Tagging RC2 revision

git-svn-id: http://dev.eclipse.org/svnroot/technology/org.eclipse.stem/tags/STEM_1_0_0_RC2@550 92a21009-5b66-0410-b83a-dc787c41c6e9
diff --git a/org.eclipse.stem.analysis.automaticexperiment/.classpath b/org.eclipse.stem.analysis.automaticexperiment/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.analysis.automaticexperiment/.project b/org.eclipse.stem.analysis.automaticexperiment/.project
new file mode 100644
index 0000000..31a21f4
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.analysis.automaticexperiment</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.analysis.automaticexperiment/META-INF/MANIFEST.MF b/org.eclipse.stem.analysis.automaticexperiment/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a30ed0e
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Automatic Experiment Plug-in
+Bundle-SymbolicName: org.eclipse.stem.analysis.automaticexperiment;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.analysis.automaticexperiment.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore,
+ org.eclipse.stem.core,
+ org.eclipse.stem.analysis,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.util.loggers,
+ org.eclipse.stem.ui
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
+Import-Package: org.eclipse.emf.ecore.provider
+Export-Package: automaticexperiment,
+ org.eclipse.stem.analysis.automaticexperiment
diff --git a/org.eclipse.stem.analysis.automaticexperiment/build.properties b/org.eclipse.stem.analysis.automaticexperiment/build.properties
new file mode 100644
index 0000000..f6cbbea
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               lib/flanagan.jar,\

+               plugin.xml

diff --git a/org.eclipse.stem.analysis.automaticexperiment/icons/full/customobj16/AutomaticExperiment.gif b/org.eclipse.stem.analysis.automaticexperiment/icons/full/customobj16/AutomaticExperiment.gif
new file mode 100644
index 0000000..242c3ff
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/icons/full/customobj16/AutomaticExperiment.gif
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticExperiment.gif b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticExperiment.gif
new file mode 100644
index 0000000..c4a8af4
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticExperiment.gif
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticexperimentModelFile.gif b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticexperimentModelFile.gif
new file mode 100644
index 0000000..1ae5c06
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/AutomaticexperimentModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/ModifiableParameter.gif b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/ModifiableParameter.gif
new file mode 100644
index 0000000..45731fe
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/icons/full/obj16/ModifiableParameter.gif
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/icons/full/wizban/NewAutomaticexperiment.gif b/org.eclipse.stem.analysis.automaticexperiment/icons/full/wizban/NewAutomaticexperiment.gif
new file mode 100644
index 0000000..36775a5
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/icons/full/wizban/NewAutomaticexperiment.gif
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperience.genmodel b/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperience.genmodel
new file mode 100644
index 0000000..bc03efd
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperience.genmodel
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.analysis.automaticexperiment/src"

+    editDirectory="/org.eclipse.stem.analysis.automaticexperiment/src" editorDirectory="/org.eclipse.stem.analysis.automaticexperiment/src"

+    modelPluginID="org.eclipse.stem.analysis.automaticexperiment" modelName="Automaticexperience"

+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//modifier ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">

+  <foreignModel>automaticexperiment.ecore</foreignModel>

+  <genPackages prefix="Automaticexperiment" disposableProviderFactory="true" generateExampleClass="false"

+      multipleEditorPages="false" generateModelWizard="false" ecorePackage="automaticexperiment.ecore#/">

+    <genClasses image="false" ecoreClass="automaticexperiment.ecore#//AutomaticExperiment">

+      <genFeatures notify="false" children="true" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference automaticexperiment.ecore#//AutomaticExperiment/baseScenario"/>

+      <genFeatures notify="false" children="true" createChild="false" propertyCategory=""

+          propertySortChoices="true" ecoreFeature="ecore:EReference automaticexperiment.ecore#//AutomaticExperiment/parameters"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//AutomaticExperiment/errorAnalysisAlgorithm"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//AutomaticExperiment/errorFunction"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//AutomaticExperiment/tolerance"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//AutomaticExperiment/referanceDataDir"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//AutomaticExperiment/maximumNumberOfIterations"/>

+    </genClasses>

+    <genClasses ecoreClass="automaticexperiment.ecore#//ModifiableParameter">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//ModifiableParameter/initialValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference automaticexperiment.ecore#//ModifiableParameter/feature"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//ModifiableParameter/step"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//ModifiableParameter/featureName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//ModifiableParameter/lowerBound"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute automaticexperiment.ecore#//ModifiableParameter/upperBound"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperiment.ecore b/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperiment.ecore
new file mode 100644
index 0000000..da1780b
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/model/automaticexperiment.ecore
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="automaticexperiment"
+    nsURI="http:///org/eclipse/stem/core/automaticexperiment.ecore" nsPrefix="org.eclipse.stem.analysis.automaticexperiment">
+  <eClassifiers xsi:type="ecore:EClass" name="AutomaticExperiment" eSuperTypes="../../org.eclipse.stem.core/model/common.ecore#//Identifiable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="baseScenario" lowerBound="1"
+        eType="ecore:EClass ../../org.eclipse.stem.core/model/scenario.ecore#//Scenario"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" lowerBound="1"
+        upperBound="-1" eType="#//ModifiableParameter"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="errorAnalysisAlgorithm"
+        lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="errorFunction" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tolerance" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="referanceDataDir" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximumNumberOfIterations"
+        lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reInit" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ModifiableParameter">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initialValue" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="feature" lowerBound="1"
+        eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="step" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="featureName" lowerBound="1"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="-1"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="-1"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetURI" eType="ecore:EDataType ../../org.eclipse.stem.core/model/common.ecore#//URI"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.analysis.automaticexperiment/plugin.properties b/org.eclipse.stem.analysis.automaticexperiment/plugin.properties
new file mode 100644
index 0000000..383994e
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.analysis.automaticexperiment/plugin.xml b/org.eclipse.stem.analysis.automaticexperiment/plugin.xml
new file mode 100644
index 0000000..646a510
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/plugin.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.2"?>

+<plugin>

+	<!--

+   <extension

+         point="org.eclipse.ui.newWizards">

+         <wizard

+            category="org.eclipse.stem.ui.wizards.stemcategory"

+            class="org.eclipse.stem.analysis.automaticexperiment.ui.NewAutomaticExperimentWizard"

+            icon="icons/full/customobj16/AutomaticExperiment.gif"

+            id="org.eclipse.stem.ui.wizards.newautoexperiment"

+            name="Automatic Experiment">

+      </wizard>

+   </extension>

+   

+	<extension

+        point="org.eclipse.ui.menus">      

+      <menuContribution

+            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">

+         <toolbar

+               id="org.eclipse.stem.ui.toolbar.newwizards">

+            <command

+                  commandId="org.eclipse.stem.ui.command.wiz.autoexperiment"

+                  icon="icons/full/customobj16/AutomaticExperiment.gif"

+                  label="Automatic Experiment"

+                  style="push"

+                  tooltip="Automatic Experiment">

+            </command>

+            <separator

+                  name="additions">

+            </separator>

+         </toolbar>

+      </menuContribution>

+     

+  </extension>

+  -->

+  <extension

+        point="org.eclipse.ui.commands">

+     <category

+           description="%_UI_STEM_WizCmd_Cat_Desc"

+           id="org.eclipse.stem.ui.wizards"

+           name="%_UI_STEM_WizCmd_Cat_Name">

+     </category>     

+     <command

+           defaultHandler="org.eclipse.stem.analysis.automaticexperiment.ui.NewAutomaticExperimentWizard$NewAutomaticExperimentWizardCommandHandler"

+           description="New Automatic Experiment"

+           id="org.eclipse.stem.ui.command.wiz.autoexperiment"

+           name="New Automatic Experiment">

+     </command>

+  </extension>

+  <extension

+        point="org.eclipse.ui.editors">

+     <editor

+          class="automaticexperiment.presentation.AutomaticexperimentEditor"

+          contributorClass="automaticexperiment.presentation.AutomaticexperimentActionBarContributor"

+          default="false"

+          extensions="automaticexperiment"

+          icon="icons/full/obj16/AutomaticexperimentModelFile.gif"

+          id="automaticexperiment.presentation.AutomaticExperimentEditorID"

+          name="Automatic Experiment Editor">

+    </editor>

+  </extension>

+  

+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <factory

+            uri="http:///org/eclipse/stem/core/automaticexperiment.ecore"

+            class="automaticexperiment.provider.AutomaticexperimentItemProviderAdapterFactory"

+            supportedTypes=

+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+               org.eclipse.emf.edit.provider.ITreeItemContentProvider

+               org.eclipse.emf.edit.provider.IItemLabelProvider

+               org.eclipse.emf.edit.provider.IItemPropertySource"/>

+   </extension>

+   

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <package

+            uri="http:///org/eclipse/stem/core/automaticexperiment.ecore"

+            class="automaticexperiment.AutomaticexperimentPackage"

+            genModel="model/automaticexperiment.genmodel"/>

+   </extension>

+  

+  <extension

+        point="org.eclipse.core.runtime.adapters">

+          <factory 

+            class="org.eclipse.stem.jobs.adapters.executable.IdentifiableExecutableAdapterFactory" 

+            adaptableType="automaticexperiment.impl.AutomaticExperimentImpl">

+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>

+         </factory>

+	</extension>

+</plugin>

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticExperiment.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticExperiment.java
new file mode 100644
index 0000000..32b6db2
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticExperiment.java
@@ -0,0 +1,240 @@
+package automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.stem.core.common.Identifiable;

+import org.eclipse.stem.core.scenario.Scenario;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Automatic Experiment</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getBaseScenario <em>Base Scenario</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getParameters <em>Parameters</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getErrorAnalysisAlgorithm <em>Error Analysis Algorithm</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getErrorFunction <em>Error Function</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getTolerance <em>Tolerance</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getReferanceDataDir <em>Referance Data Dir</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#getMaximumNumberOfIterations <em>Maximum Number Of Iterations</em>}</li>

+ *   <li>{@link automaticexperiment.AutomaticExperiment#isReInit <em>Re Init</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment()

+ * @model

+ * @generated

+ */

+public interface AutomaticExperiment extends Identifiable {

+	/**

+	 * Returns the value of the '<em><b>Base Scenario</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Base Scenario</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Base Scenario</em>' reference.

+	 * @see #setBaseScenario(Scenario)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_BaseScenario()

+	 * @model required="true"

+	 * @generated

+	 */

+	Scenario getBaseScenario();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getBaseScenario <em>Base Scenario</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Base Scenario</em>' reference.

+	 * @see #getBaseScenario()

+	 * @generated

+	 */

+	void setBaseScenario(Scenario value);

+

+	/**

+	 * Returns the value of the '<em><b>Parameters</b></em>' reference list.

+	 * The list contents are of type {@link automaticexperiment.ModifiableParameter}.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Parameters</em>' reference list isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Parameters</em>' reference list.

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_Parameters()

+	 * @model required="true"

+	 * @generated

+	 */

+	EList<ModifiableParameter> getParameters();

+

+	/**

+	 * Returns the value of the '<em><b>Error Analysis Algorithm</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Error Analysis Algorithm</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Error Analysis Algorithm</em>' attribute.

+	 * @see #setErrorAnalysisAlgorithm(String)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_ErrorAnalysisAlgorithm()

+	 * @model required="true"

+	 * @generated

+	 */

+	String getErrorAnalysisAlgorithm();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getErrorAnalysisAlgorithm <em>Error Analysis Algorithm</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Error Analysis Algorithm</em>' attribute.

+	 * @see #getErrorAnalysisAlgorithm()

+	 * @generated

+	 */

+	void setErrorAnalysisAlgorithm(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Error Function</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Error Function</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Error Function</em>' attribute.

+	 * @see #setErrorFunction(String)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_ErrorFunction()

+	 * @model required="true"

+	 * @generated

+	 */

+	String getErrorFunction();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getErrorFunction <em>Error Function</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Error Function</em>' attribute.

+	 * @see #getErrorFunction()

+	 * @generated

+	 */

+	void setErrorFunction(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Tolerance</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Tolerance</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Tolerance</em>' attribute.

+	 * @see #setTolerance(double)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_Tolerance()

+	 * @model required="true"

+	 * @generated

+	 */

+	double getTolerance();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getTolerance <em>Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Tolerance</em>' attribute.

+	 * @see #getTolerance()

+	 * @generated

+	 */

+	void setTolerance(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Referance Data Dir</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Referance Data Dir</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Referance Data Dir</em>' attribute.

+	 * @see #setReferanceDataDir(String)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_ReferanceDataDir()

+	 * @model required="true"

+	 * @generated

+	 */

+	String getReferanceDataDir();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getReferanceDataDir <em>Referance Data Dir</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Referance Data Dir</em>' attribute.

+	 * @see #getReferanceDataDir()

+	 * @generated

+	 */

+	void setReferanceDataDir(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Maximum Number Of Iterations</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Maximum Number Of Iterations</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Maximum Number Of Iterations</em>' attribute.

+	 * @see #setMaximumNumberOfIterations(long)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_MaximumNumberOfIterations()

+	 * @model required="true"

+	 * @generated

+	 */

+	long getMaximumNumberOfIterations();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#getMaximumNumberOfIterations <em>Maximum Number Of Iterations</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Maximum Number Of Iterations</em>' attribute.

+	 * @see #getMaximumNumberOfIterations()

+	 * @generated

+	 */

+	void setMaximumNumberOfIterations(long value);

+

+	/**

+	 * Returns the value of the '<em><b>Re Init</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Re Init</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Re Init</em>' attribute.

+	 * @see #setReInit(boolean)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getAutomaticExperiment_ReInit()

+	 * @model required="true"

+	 * @generated

+	 */

+	boolean isReInit();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.AutomaticExperiment#isReInit <em>Re Init</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Re Init</em>' attribute.

+	 * @see #isReInit()

+	 * @generated

+	 */

+	void setReInit(boolean value);

+

+} // AutomaticExperiment

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentFactory.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentFactory.java
new file mode 100644
index 0000000..88d207a
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentFactory.java
@@ -0,0 +1,60 @@
+package automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see automaticexperiment.AutomaticexperimentPackage

+ * @generated

+ */

+public interface AutomaticexperimentFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	AutomaticexperimentFactory eINSTANCE = automaticexperiment.impl.AutomaticexperimentFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Automatic Experiment</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Automatic Experiment</em>'.

+	 * @generated

+	 */

+	AutomaticExperiment createAutomaticExperiment();

+

+	/**

+	 * Returns a new object of class '<em>Modifiable Parameter</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Modifiable Parameter</em>'.

+	 * @generated

+	 */

+	ModifiableParameter createModifiableParameter();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	AutomaticexperimentPackage getAutomaticexperimentPackage();

+

+} //AutomaticexperimentFactory

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentPackage.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentPackage.java
new file mode 100644
index 0000000..a5f047f
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/AutomaticexperimentPackage.java
@@ -0,0 +1,618 @@
+package automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.stem.core.common.CommonPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see automaticexperiment.AutomaticexperimentFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface AutomaticexperimentPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "automaticexperiment";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http:///org/eclipse/stem/core/automaticexperiment.ecore";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.analysis.automaticexperiment";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	AutomaticexperimentPackage eINSTANCE = automaticexperiment.impl.AutomaticexperimentPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link automaticexperiment.impl.AutomaticExperimentImpl <em>Automatic Experiment</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see automaticexperiment.impl.AutomaticExperimentImpl

+	 * @see automaticexperiment.impl.AutomaticexperimentPackageImpl#getAutomaticExperiment()

+	 * @generated

+	 */

+	int AUTOMATIC_EXPERIMENT = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__URI = CommonPackage.IDENTIFIABLE__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Base Scenario</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__BASE_SCENARIO = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Parameters</b></em>' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__PARAMETERS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;

+

+	/**

+	 * The feature id for the '<em><b>Error Analysis Algorithm</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;

+

+	/**

+	 * The feature id for the '<em><b>Error Function</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__ERROR_FUNCTION = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;

+

+	/**

+	 * The feature id for the '<em><b>Tolerance</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__TOLERANCE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;

+

+	/**

+	 * The feature id for the '<em><b>Referance Data Dir</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;

+

+	/**

+	 * The feature id for the '<em><b>Maximum Number Of Iterations</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 6;

+

+	/**

+	 * The feature id for the '<em><b>Re Init</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT__RE_INIT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 7;

+

+	/**

+	 * The number of structural features of the '<em>Automatic Experiment</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int AUTOMATIC_EXPERIMENT_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 8;

+

+	/**

+	 * The meta object id for the '{@link automaticexperiment.impl.ModifiableParameterImpl <em>Modifiable Parameter</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see automaticexperiment.impl.ModifiableParameterImpl

+	 * @see automaticexperiment.impl.AutomaticexperimentPackageImpl#getModifiableParameter()

+	 * @generated

+	 */

+	int MODIFIABLE_PARAMETER = 1;

+

+	/**

+	 * The feature id for the '<em><b>Initial Value</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__INITIAL_VALUE = 0;

+

+	/**

+	 * The feature id for the '<em><b>Feature</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__FEATURE = 1;

+

+	/**

+	 * The feature id for the '<em><b>Step</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__STEP = 2;

+

+	/**

+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__FEATURE_NAME = 3;

+

+	/**

+	 * The feature id for the '<em><b>Lower Bound</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__LOWER_BOUND = 4;

+

+	/**

+	 * The feature id for the '<em><b>Upper Bound</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__UPPER_BOUND = 5;

+

+	/**

+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER__TARGET_URI = 6;

+

+	/**

+	 * The number of structural features of the '<em>Modifiable Parameter</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int MODIFIABLE_PARAMETER_FEATURE_COUNT = 7;

+

+

+	/**

+	 * Returns the meta object for class '{@link automaticexperiment.AutomaticExperiment <em>Automatic Experiment</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Automatic Experiment</em>'.

+	 * @see automaticexperiment.AutomaticExperiment

+	 * @generated

+	 */

+	EClass getAutomaticExperiment();

+

+	/**

+	 * Returns the meta object for the reference '{@link automaticexperiment.AutomaticExperiment#getBaseScenario <em>Base Scenario</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Base Scenario</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getBaseScenario()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EReference getAutomaticExperiment_BaseScenario();

+

+	/**

+	 * Returns the meta object for the reference list '{@link automaticexperiment.AutomaticExperiment#getParameters <em>Parameters</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference list '<em>Parameters</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getParameters()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EReference getAutomaticExperiment_Parameters();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#getErrorAnalysisAlgorithm <em>Error Analysis Algorithm</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Error Analysis Algorithm</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getErrorAnalysisAlgorithm()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_ErrorAnalysisAlgorithm();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#getErrorFunction <em>Error Function</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Error Function</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getErrorFunction()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_ErrorFunction();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#getTolerance <em>Tolerance</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Tolerance</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getTolerance()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_Tolerance();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#getReferanceDataDir <em>Referance Data Dir</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Referance Data Dir</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getReferanceDataDir()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_ReferanceDataDir();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#getMaximumNumberOfIterations <em>Maximum Number Of Iterations</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Maximum Number Of Iterations</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#getMaximumNumberOfIterations()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_MaximumNumberOfIterations();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.AutomaticExperiment#isReInit <em>Re Init</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Re Init</em>'.

+	 * @see automaticexperiment.AutomaticExperiment#isReInit()

+	 * @see #getAutomaticExperiment()

+	 * @generated

+	 */

+	EAttribute getAutomaticExperiment_ReInit();

+

+	/**

+	 * Returns the meta object for class '{@link automaticexperiment.ModifiableParameter <em>Modifiable Parameter</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Modifiable Parameter</em>'.

+	 * @see automaticexperiment.ModifiableParameter

+	 * @generated

+	 */

+	EClass getModifiableParameter();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getInitialValue <em>Initial Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Initial Value</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getInitialValue()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_InitialValue();

+

+	/**

+	 * Returns the meta object for the reference '{@link automaticexperiment.ModifiableParameter#getFeature <em>Feature</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Feature</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getFeature()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EReference getModifiableParameter_Feature();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getStep <em>Step</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Step</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getStep()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_Step();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getFeatureName <em>Feature Name</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Feature Name</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getFeatureName()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_FeatureName();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getLowerBound <em>Lower Bound</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Lower Bound</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getLowerBound()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_LowerBound();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getUpperBound <em>Upper Bound</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Upper Bound</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getUpperBound()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_UpperBound();

+

+	/**

+	 * Returns the meta object for the attribute '{@link automaticexperiment.ModifiableParameter#getTargetURI <em>Target URI</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Target URI</em>'.

+	 * @see automaticexperiment.ModifiableParameter#getTargetURI()

+	 * @see #getModifiableParameter()

+	 * @generated

+	 */

+	EAttribute getModifiableParameter_TargetURI();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	AutomaticexperimentFactory getAutomaticexperimentFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link automaticexperiment.impl.AutomaticExperimentImpl <em>Automatic Experiment</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see automaticexperiment.impl.AutomaticExperimentImpl

+		 * @see automaticexperiment.impl.AutomaticexperimentPackageImpl#getAutomaticExperiment()

+		 * @generated

+		 */

+		EClass AUTOMATIC_EXPERIMENT = eINSTANCE.getAutomaticExperiment();

+

+		/**

+		 * The meta object literal for the '<em><b>Base Scenario</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference AUTOMATIC_EXPERIMENT__BASE_SCENARIO = eINSTANCE.getAutomaticExperiment_BaseScenario();

+

+		/**

+		 * The meta object literal for the '<em><b>Parameters</b></em>' reference list feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference AUTOMATIC_EXPERIMENT__PARAMETERS = eINSTANCE.getAutomaticExperiment_Parameters();

+

+		/**

+		 * The meta object literal for the '<em><b>Error Analysis Algorithm</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM = eINSTANCE.getAutomaticExperiment_ErrorAnalysisAlgorithm();

+

+		/**

+		 * The meta object literal for the '<em><b>Error Function</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__ERROR_FUNCTION = eINSTANCE.getAutomaticExperiment_ErrorFunction();

+

+		/**

+		 * The meta object literal for the '<em><b>Tolerance</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__TOLERANCE = eINSTANCE.getAutomaticExperiment_Tolerance();

+

+		/**

+		 * The meta object literal for the '<em><b>Referance Data Dir</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR = eINSTANCE.getAutomaticExperiment_ReferanceDataDir();

+

+		/**

+		 * The meta object literal for the '<em><b>Maximum Number Of Iterations</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS = eINSTANCE.getAutomaticExperiment_MaximumNumberOfIterations();

+

+		/**

+		 * The meta object literal for the '<em><b>Re Init</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute AUTOMATIC_EXPERIMENT__RE_INIT = eINSTANCE.getAutomaticExperiment_ReInit();

+

+		/**

+		 * The meta object literal for the '{@link automaticexperiment.impl.ModifiableParameterImpl <em>Modifiable Parameter</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see automaticexperiment.impl.ModifiableParameterImpl

+		 * @see automaticexperiment.impl.AutomaticexperimentPackageImpl#getModifiableParameter()

+		 * @generated

+		 */

+		EClass MODIFIABLE_PARAMETER = eINSTANCE.getModifiableParameter();

+

+		/**

+		 * The meta object literal for the '<em><b>Initial Value</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__INITIAL_VALUE = eINSTANCE.getModifiableParameter_InitialValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Feature</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference MODIFIABLE_PARAMETER__FEATURE = eINSTANCE.getModifiableParameter_Feature();

+

+		/**

+		 * The meta object literal for the '<em><b>Step</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__STEP = eINSTANCE.getModifiableParameter_Step();

+

+		/**

+		 * The meta object literal for the '<em><b>Feature Name</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__FEATURE_NAME = eINSTANCE.getModifiableParameter_FeatureName();

+

+		/**

+		 * The meta object literal for the '<em><b>Lower Bound</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__LOWER_BOUND = eINSTANCE.getModifiableParameter_LowerBound();

+

+		/**

+		 * The meta object literal for the '<em><b>Upper Bound</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__UPPER_BOUND = eINSTANCE.getModifiableParameter_UpperBound();

+

+		/**

+		 * The meta object literal for the '<em><b>Target URI</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute MODIFIABLE_PARAMETER__TARGET_URI = eINSTANCE.getModifiableParameter_TargetURI();

+

+	}

+

+} //AutomaticexperimentPackage

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/ModifiableParameter.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/ModifiableParameter.java
new file mode 100644
index 0000000..0027304
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/ModifiableParameter.java
@@ -0,0 +1,226 @@
+package automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.stem.core.model.Decorator;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Modifiable Parameter</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getInitialValue <em>Initial Value</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getFeature <em>Feature</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getStep <em>Step</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getFeatureName <em>Feature Name</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getLowerBound <em>Lower Bound</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getUpperBound <em>Upper Bound</em>}</li>

+ *   <li>{@link automaticexperiment.ModifiableParameter#getTargetURI <em>Target URI</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter()

+ * @model

+ * @generated

+ */

+public interface ModifiableParameter extends EObject {

+	/**

+	 * Returns the value of the '<em><b>Initial Value</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Initial Value</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Initial Value</em>' attribute.

+	 * @see #setInitialValue(double)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_InitialValue()

+	 * @model required="true"

+	 * @generated

+	 */

+	double getInitialValue();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getInitialValue <em>Initial Value</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Initial Value</em>' attribute.

+	 * @see #getInitialValue()

+	 * @generated

+	 */

+	void setInitialValue(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Feature</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Feature</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Feature</em>' reference.

+	 * @see #setFeature(EStructuralFeature)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_Feature()

+	 * @model required="true"

+	 * @generated

+	 */

+	EStructuralFeature getFeature();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getFeature <em>Feature</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Feature</em>' reference.

+	 * @see #getFeature()

+	 * @generated

+	 */

+	void setFeature(EStructuralFeature value);

+

+	/**

+	 * Returns the value of the '<em><b>Step</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Step</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Step</em>' attribute.

+	 * @see #setStep(double)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_Step()

+	 * @model required="true"

+	 * @generated

+	 */

+	double getStep();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getStep <em>Step</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Step</em>' attribute.

+	 * @see #getStep()

+	 * @generated

+	 */

+	void setStep(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Feature Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Feature Name</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Feature Name</em>' attribute.

+	 * @see #setFeatureName(String)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_FeatureName()

+	 * @model required="true"

+	 * @generated

+	 */

+	String getFeatureName();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getFeatureName <em>Feature Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Feature Name</em>' attribute.

+	 * @see #getFeatureName()

+	 * @generated

+	 */

+	void setFeatureName(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Lower Bound</b></em>' attribute.

+	 * The default value is <code>"-1"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Lower Bound</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Lower Bound</em>' attribute.

+	 * @see #setLowerBound(double)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_LowerBound()

+	 * @model default="-1"

+	 * @generated

+	 */

+	double getLowerBound();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getLowerBound <em>Lower Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Lower Bound</em>' attribute.

+	 * @see #getLowerBound()

+	 * @generated

+	 */

+	void setLowerBound(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Upper Bound</b></em>' attribute.

+	 * The default value is <code>"-1"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Upper Bound</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Upper Bound</em>' attribute.

+	 * @see #setUpperBound(double)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_UpperBound()

+	 * @model default="-1"

+	 * @generated

+	 */

+	double getUpperBound();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getUpperBound <em>Upper Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Upper Bound</em>' attribute.

+	 * @see #getUpperBound()

+	 * @generated

+	 */

+	void setUpperBound(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Target URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Target URI</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Target URI</em>' attribute.

+	 * @see #setTargetURI(URI)

+	 * @see automaticexperiment.AutomaticexperimentPackage#getModifiableParameter_TargetURI()

+	 * @model dataType="org.eclipse.stem.core.common.URI"

+	 * @generated

+	 */

+	URI getTargetURI();

+

+	/**

+	 * Sets the value of the '{@link automaticexperiment.ModifiableParameter#getTargetURI <em>Target URI</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Target URI</em>' attribute.

+	 * @see #getTargetURI()

+	 * @generated

+	 */

+	void setTargetURI(URI value);

+

+} // ModifiableParameter

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticExperimentImpl.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticExperimentImpl.java
new file mode 100644
index 0000000..4e412ca
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticExperimentImpl.java
@@ -0,0 +1,542 @@
+package automaticexperiment.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.InternalEObject;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.emf.ecore.util.EObjectResolvingEList;

+import org.eclipse.stem.core.common.impl.IdentifiableImpl;

+import org.eclipse.stem.core.scenario.Scenario;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Automatic Experiment</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getBaseScenario <em>Base Scenario</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getParameters <em>Parameters</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getErrorAnalysisAlgorithm <em>Error Analysis Algorithm</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getErrorFunction <em>Error Function</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getTolerance <em>Tolerance</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getReferanceDataDir <em>Referance Data Dir</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#getMaximumNumberOfIterations <em>Maximum Number Of Iterations</em>}</li>

+ *   <li>{@link automaticexperiment.impl.AutomaticExperimentImpl#isReInit <em>Re Init</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class AutomaticExperimentImpl extends IdentifiableImpl implements AutomaticExperiment {

+	/**

+	 * The cached value of the '{@link #getBaseScenario() <em>Base Scenario</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getBaseScenario()

+	 * @generated

+	 * @ordered

+	 */

+	protected Scenario baseScenario;

+

+	/**

+	 * The cached value of the '{@link #getParameters() <em>Parameters</em>}' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getParameters()

+	 * @generated

+	 * @ordered

+	 */

+	protected EList<ModifiableParameter> parameters;

+

+	/**

+	 * The default value of the '{@link #getErrorAnalysisAlgorithm() <em>Error Analysis Algorithm</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getErrorAnalysisAlgorithm()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String ERROR_ANALYSIS_ALGORITHM_EDEFAULT = null;

+

+	/**

+	 * The cached value of the '{@link #getErrorAnalysisAlgorithm() <em>Error Analysis Algorithm</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getErrorAnalysisAlgorithm()

+	 * @generated

+	 * @ordered

+	 */

+	protected String errorAnalysisAlgorithm = ERROR_ANALYSIS_ALGORITHM_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getErrorFunction() <em>Error Function</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getErrorFunction()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String ERROR_FUNCTION_EDEFAULT = null;

+

+	/**

+	 * The cached value of the '{@link #getErrorFunction() <em>Error Function</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getErrorFunction()

+	 * @generated

+	 * @ordered

+	 */

+	protected String errorFunction = ERROR_FUNCTION_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getTolerance() <em>Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTolerance()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double TOLERANCE_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getTolerance() <em>Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTolerance()

+	 * @generated

+	 * @ordered

+	 */

+	protected double tolerance = TOLERANCE_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getReferanceDataDir() <em>Referance Data Dir</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getReferanceDataDir()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String REFERANCE_DATA_DIR_EDEFAULT = null;

+

+	/**

+	 * The cached value of the '{@link #getReferanceDataDir() <em>Referance Data Dir</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getReferanceDataDir()

+	 * @generated

+	 * @ordered

+	 */

+	protected String referanceDataDir = REFERANCE_DATA_DIR_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getMaximumNumberOfIterations() <em>Maximum Number Of Iterations</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getMaximumNumberOfIterations()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final long MAXIMUM_NUMBER_OF_ITERATIONS_EDEFAULT = 0L;

+

+	/**

+	 * The cached value of the '{@link #getMaximumNumberOfIterations() <em>Maximum Number Of Iterations</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getMaximumNumberOfIterations()

+	 * @generated

+	 * @ordered

+	 */

+	protected long maximumNumberOfIterations = MAXIMUM_NUMBER_OF_ITERATIONS_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #isReInit() <em>Re Init</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #isReInit()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final boolean RE_INIT_EDEFAULT = false;

+

+	/**

+	 * The cached value of the '{@link #isReInit() <em>Re Init</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #isReInit()

+	 * @generated

+	 * @ordered

+	 */

+	protected boolean reInit = RE_INIT_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticExperimentImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Scenario getBaseScenario() {

+		if (baseScenario != null && baseScenario.eIsProxy()) {

+			InternalEObject oldBaseScenario = (InternalEObject)baseScenario;

+			baseScenario = (Scenario)eResolveProxy(oldBaseScenario);

+			if (baseScenario != oldBaseScenario) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO, oldBaseScenario, baseScenario));

+			}

+		}

+		return baseScenario;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Scenario basicGetBaseScenario() {

+		return baseScenario;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setBaseScenario(Scenario newBaseScenario) {

+		Scenario oldBaseScenario = baseScenario;

+		baseScenario = newBaseScenario;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO, oldBaseScenario, baseScenario));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EList<ModifiableParameter> getParameters() {

+		if (parameters == null) {

+			parameters = new EObjectResolvingEList<ModifiableParameter>(ModifiableParameter.class, this, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__PARAMETERS);

+		}

+		return parameters;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getErrorAnalysisAlgorithm() {

+		return errorAnalysisAlgorithm;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setErrorAnalysisAlgorithm(String newErrorAnalysisAlgorithm) {

+		String oldErrorAnalysisAlgorithm = errorAnalysisAlgorithm;

+		errorAnalysisAlgorithm = newErrorAnalysisAlgorithm;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM, oldErrorAnalysisAlgorithm, errorAnalysisAlgorithm));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getErrorFunction() {

+		return errorFunction;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setErrorFunction(String newErrorFunction) {

+		String oldErrorFunction = errorFunction;

+		errorFunction = newErrorFunction;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION, oldErrorFunction, errorFunction));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getTolerance() {

+		return tolerance;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setTolerance(double newTolerance) {

+		double oldTolerance = tolerance;

+		tolerance = newTolerance;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE, oldTolerance, tolerance));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getReferanceDataDir() {

+		return referanceDataDir;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setReferanceDataDir(String newReferanceDataDir) {

+		String oldReferanceDataDir = referanceDataDir;

+		referanceDataDir = newReferanceDataDir;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR, oldReferanceDataDir, referanceDataDir));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public long getMaximumNumberOfIterations() {

+		return maximumNumberOfIterations;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setMaximumNumberOfIterations(long newMaximumNumberOfIterations) {

+		long oldMaximumNumberOfIterations = maximumNumberOfIterations;

+		maximumNumberOfIterations = newMaximumNumberOfIterations;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS, oldMaximumNumberOfIterations, maximumNumberOfIterations));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public boolean isReInit() {

+		return reInit;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setReInit(boolean newReInit) {

+		boolean oldReInit = reInit;

+		reInit = newReInit;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT, oldReInit, reInit));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO:

+				if (resolve) return getBaseScenario();

+				return basicGetBaseScenario();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__PARAMETERS:

+				return getParameters();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM:

+				return getErrorAnalysisAlgorithm();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION:

+				return getErrorFunction();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE:

+				return getTolerance();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR:

+				return getReferanceDataDir();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS:

+				return getMaximumNumberOfIterations();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT:

+				return isReInit();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO:

+				setBaseScenario((Scenario)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__PARAMETERS:

+				getParameters().clear();

+				getParameters().addAll((Collection<? extends ModifiableParameter>)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM:

+				setErrorAnalysisAlgorithm((String)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION:

+				setErrorFunction((String)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE:

+				setTolerance((Double)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR:

+				setReferanceDataDir((String)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS:

+				setMaximumNumberOfIterations((Long)newValue);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT:

+				setReInit((Boolean)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO:

+				setBaseScenario((Scenario)null);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__PARAMETERS:

+				getParameters().clear();

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM:

+				setErrorAnalysisAlgorithm(ERROR_ANALYSIS_ALGORITHM_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION:

+				setErrorFunction(ERROR_FUNCTION_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE:

+				setTolerance(TOLERANCE_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR:

+				setReferanceDataDir(REFERANCE_DATA_DIR_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS:

+				setMaximumNumberOfIterations(MAXIMUM_NUMBER_OF_ITERATIONS_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT:

+				setReInit(RE_INIT_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__BASE_SCENARIO:

+				return baseScenario != null;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__PARAMETERS:

+				return parameters != null && !parameters.isEmpty();

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM:

+				return ERROR_ANALYSIS_ALGORITHM_EDEFAULT == null ? errorAnalysisAlgorithm != null : !ERROR_ANALYSIS_ALGORITHM_EDEFAULT.equals(errorAnalysisAlgorithm);

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION:

+				return ERROR_FUNCTION_EDEFAULT == null ? errorFunction != null : !ERROR_FUNCTION_EDEFAULT.equals(errorFunction);

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE:

+				return tolerance != TOLERANCE_EDEFAULT;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR:

+				return REFERANCE_DATA_DIR_EDEFAULT == null ? referanceDataDir != null : !REFERANCE_DATA_DIR_EDEFAULT.equals(referanceDataDir);

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS:

+				return maximumNumberOfIterations != MAXIMUM_NUMBER_OF_ITERATIONS_EDEFAULT;

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT:

+				return reInit != RE_INIT_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (errorAnalysisAlgorithm: ");

+		result.append(errorAnalysisAlgorithm);

+		result.append(", errorFunction: ");

+		result.append(errorFunction);

+		result.append(", tolerance: ");

+		result.append(tolerance);

+		result.append(", referanceDataDir: ");

+		result.append(referanceDataDir);

+		result.append(", maximumNumberOfIterations: ");

+		result.append(maximumNumberOfIterations);

+		result.append(", reInit: ");

+		result.append(reInit);

+		result.append(')');

+		return result.toString();

+	}

+

+} //AutomaticExperimentImpl

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentFactoryImpl.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentFactoryImpl.java
new file mode 100644
index 0000000..b4c412a
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentFactoryImpl.java
@@ -0,0 +1,117 @@
+package automaticexperiment.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import automaticexperiment.*;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentFactory;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentFactoryImpl extends EFactoryImpl implements AutomaticexperimentFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static AutomaticexperimentFactory init() {

+		try {

+			AutomaticexperimentFactory theAutomaticexperimentFactory = (AutomaticexperimentFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/automaticexperiment.ecore"); 

+			if (theAutomaticexperimentFactory != null) {

+				return theAutomaticexperimentFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new AutomaticexperimentFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT: return createAutomaticExperiment();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER: return createModifiableParameter();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticExperiment createAutomaticExperiment() {

+		AutomaticExperimentImpl automaticExperiment = new AutomaticExperimentImpl();

+		return automaticExperiment;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ModifiableParameter createModifiableParameter() {

+		ModifiableParameterImpl modifiableParameter = new ModifiableParameterImpl();

+		return modifiableParameter;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentPackage getAutomaticexperimentPackage() {

+		return (AutomaticexperimentPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static AutomaticexperimentPackage getPackage() {

+		return AutomaticexperimentPackage.eINSTANCE;

+	}

+

+} //AutomaticexperimentFactoryImpl

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentPackageImpl.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentPackageImpl.java
new file mode 100644
index 0000000..a20d71d
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/AutomaticexperimentPackageImpl.java
@@ -0,0 +1,384 @@
+package automaticexperiment.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.emf.ecore.EcorePackage;

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+import org.eclipse.stem.core.common.CommonPackage;

+import org.eclipse.stem.core.graph.GraphPackage;

+import org.eclipse.stem.core.model.ModelPackage;

+import org.eclipse.stem.core.modifier.ModifierPackage;

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+import org.eclipse.stem.core.sequencer.SequencerPackage;

+

+import org.eclipse.stem.core.solver.SolverPackage;

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentFactory;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentPackageImpl extends EPackageImpl implements AutomaticexperimentPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass automaticExperimentEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass modifiableParameterEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see automaticexperiment.AutomaticexperimentPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private AutomaticexperimentPackageImpl() {

+		super(eNS_URI, AutomaticexperimentFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.

+	 * 

+	 * <p>This method is used to initialize {@link AutomaticexperimentPackage#eINSTANCE} when that field is accessed.

+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static AutomaticexperimentPackage init() {

+		if (isInited) return (AutomaticexperimentPackage)EPackage.Registry.INSTANCE.getEPackage(AutomaticexperimentPackage.eNS_URI);

+

+		// Obtain or create and register package

+		AutomaticexperimentPackageImpl theAutomaticexperimentPackage = (AutomaticexperimentPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof AutomaticexperimentPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new AutomaticexperimentPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		CommonPackage.eINSTANCE.eClass();

+		GraphPackage.eINSTANCE.eClass();

+		ModelPackage.eINSTANCE.eClass();

+		ModifierPackage.eINSTANCE.eClass();

+		ScenarioPackage.eINSTANCE.eClass();

+		SequencerPackage.eINSTANCE.eClass();

+		SolverPackage.eINSTANCE.eClass();

+

+		// Create package meta-data objects

+		theAutomaticexperimentPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theAutomaticexperimentPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theAutomaticexperimentPackage.freeze();

+

+  

+		// Update the registry and return the package

+		EPackage.Registry.INSTANCE.put(AutomaticexperimentPackage.eNS_URI, theAutomaticexperimentPackage);

+		return theAutomaticexperimentPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getAutomaticExperiment() {

+		return automaticExperimentEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getAutomaticExperiment_BaseScenario() {

+		return (EReference)automaticExperimentEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getAutomaticExperiment_Parameters() {

+		return (EReference)automaticExperimentEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_ErrorAnalysisAlgorithm() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_ErrorFunction() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(3);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_Tolerance() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(4);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_ReferanceDataDir() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(5);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_MaximumNumberOfIterations() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(6);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getAutomaticExperiment_ReInit() {

+		return (EAttribute)automaticExperimentEClass.getEStructuralFeatures().get(7);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getModifiableParameter() {

+		return modifiableParameterEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_InitialValue() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getModifiableParameter_Feature() {

+		return (EReference)modifiableParameterEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_Step() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_FeatureName() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(3);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_LowerBound() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(4);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_UpperBound() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(5);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getModifiableParameter_TargetURI() {

+		return (EAttribute)modifiableParameterEClass.getEStructuralFeatures().get(6);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentFactory getAutomaticexperimentFactory() {

+		return (AutomaticexperimentFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		automaticExperimentEClass = createEClass(AUTOMATIC_EXPERIMENT);

+		createEReference(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__BASE_SCENARIO);

+		createEReference(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__PARAMETERS);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__ERROR_FUNCTION);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__TOLERANCE);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS);

+		createEAttribute(automaticExperimentEClass, AUTOMATIC_EXPERIMENT__RE_INIT);

+

+		modifiableParameterEClass = createEClass(MODIFIABLE_PARAMETER);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__INITIAL_VALUE);

+		createEReference(modifiableParameterEClass, MODIFIABLE_PARAMETER__FEATURE);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__STEP);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__FEATURE_NAME);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__LOWER_BOUND);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__UPPER_BOUND);

+		createEAttribute(modifiableParameterEClass, MODIFIABLE_PARAMETER__TARGET_URI);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);

+		ScenarioPackage theScenarioPackage = (ScenarioPackage)EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI);

+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		automaticExperimentEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(automaticExperimentEClass, AutomaticExperiment.class, "AutomaticExperiment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEReference(getAutomaticExperiment_BaseScenario(), theScenarioPackage.getScenario(), null, "baseScenario", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getAutomaticExperiment_Parameters(), this.getModifiableParameter(), null, "parameters", null, 1, -1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_ErrorAnalysisAlgorithm(), theEcorePackage.getEString(), "errorAnalysisAlgorithm", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_ErrorFunction(), theEcorePackage.getEString(), "errorFunction", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_Tolerance(), theEcorePackage.getEDouble(), "tolerance", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_ReferanceDataDir(), theEcorePackage.getEString(), "referanceDataDir", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_MaximumNumberOfIterations(), theEcorePackage.getELong(), "maximumNumberOfIterations", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getAutomaticExperiment_ReInit(), theEcorePackage.getEBoolean(), "reInit", null, 1, 1, AutomaticExperiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(modifiableParameterEClass, ModifiableParameter.class, "ModifiableParameter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getModifiableParameter_InitialValue(), theEcorePackage.getEDouble(), "initialValue", null, 1, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getModifiableParameter_Feature(), theEcorePackage.getEStructuralFeature(), null, "feature", null, 1, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getModifiableParameter_Step(), theEcorePackage.getEDouble(), "step", null, 1, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getModifiableParameter_FeatureName(), theEcorePackage.getEString(), "featureName", null, 1, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getModifiableParameter_LowerBound(), theEcorePackage.getEDouble(), "lowerBound", "-1", 0, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getModifiableParameter_UpperBound(), theEcorePackage.getEDouble(), "upperBound", "-1", 0, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getModifiableParameter_TargetURI(), theCommonPackage.getURI(), "targetURI", null, 0, 1, ModifiableParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //AutomaticexperimentPackageImpl

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/ModifiableParameterImpl.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/ModifiableParameterImpl.java
new file mode 100644
index 0000000..5db6efc
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/impl/ModifiableParameterImpl.java
@@ -0,0 +1,504 @@
+package automaticexperiment.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.emf.ecore.InternalEObject;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.emf.ecore.impl.EObjectImpl;

+

+import org.eclipse.stem.core.model.Decorator;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Modifiable Parameter</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getInitialValue <em>Initial Value</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getFeature <em>Feature</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getStep <em>Step</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getFeatureName <em>Feature Name</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getLowerBound <em>Lower Bound</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getUpperBound <em>Upper Bound</em>}</li>

+ *   <li>{@link automaticexperiment.impl.ModifiableParameterImpl#getTargetURI <em>Target URI</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class ModifiableParameterImpl extends EObjectImpl implements ModifiableParameter {

+	/**

+	 * The default value of the '{@link #getInitialValue() <em>Initial Value</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getInitialValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double INITIAL_VALUE_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getInitialValue() <em>Initial Value</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getInitialValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected double initialValue = INITIAL_VALUE_EDEFAULT;

+

+	/**

+	 * The cached value of the '{@link #getFeature() <em>Feature</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getFeature()

+	 * @generated

+	 * @ordered

+	 */

+	protected EStructuralFeature feature;

+

+	/**

+	 * The default value of the '{@link #getStep() <em>Step</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getStep()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double STEP_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getStep() <em>Step</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getStep()

+	 * @generated

+	 * @ordered

+	 */

+	protected double step = STEP_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getFeatureName() <em>Feature Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getFeatureName()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String FEATURE_NAME_EDEFAULT = null;

+

+	/**

+	 * The cached value of the '{@link #getFeatureName() <em>Feature Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getFeatureName()

+	 * @generated

+	 * @ordered

+	 */

+	protected String featureName = FEATURE_NAME_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getLowerBound() <em>Lower Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getLowerBound()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double LOWER_BOUND_EDEFAULT = -1.0;

+

+	/**

+	 * The cached value of the '{@link #getLowerBound() <em>Lower Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getLowerBound()

+	 * @generated

+	 * @ordered

+	 */

+	protected double lowerBound = LOWER_BOUND_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getUpperBound() <em>Upper Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getUpperBound()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double UPPER_BOUND_EDEFAULT = -1.0;

+

+	/**

+	 * The cached value of the '{@link #getUpperBound() <em>Upper Bound</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getUpperBound()

+	 * @generated

+	 * @ordered

+	 */

+	protected double upperBound = UPPER_BOUND_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTargetURI()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final URI TARGET_URI_EDEFAULT = null;

+

+	/**

+	 * The cached value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTargetURI()

+	 * @generated

+	 * @ordered

+	 */

+	protected URI targetURI = TARGET_URI_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ModifiableParameterImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getInitialValue() {

+		return initialValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setInitialValue(double newInitialValue) {

+		double oldInitialValue = initialValue;

+		initialValue = newInitialValue;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE, oldInitialValue, initialValue));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EStructuralFeature getFeature() {

+		if (feature != null && feature.eIsProxy()) {

+			InternalEObject oldFeature = (InternalEObject)feature;

+			feature = (EStructuralFeature)eResolveProxy(oldFeature);

+			if (feature != oldFeature) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE, oldFeature, feature));

+			}

+		}

+		return feature;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EStructuralFeature basicGetFeature() {

+		return feature;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setFeature(EStructuralFeature newFeature) {

+		EStructuralFeature oldFeature = feature;

+		feature = newFeature;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE, oldFeature, feature));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getStep() {

+		return step;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStep(double newStep) {

+		double oldStep = step;

+		step = newStep;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP, oldStep, step));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getFeatureName() {

+		return featureName;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setFeatureName(String newFeatureName) {

+		String oldFeatureName = featureName;

+		featureName = newFeatureName;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME, oldFeatureName, featureName));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getLowerBound() {

+		return lowerBound;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setLowerBound(double newLowerBound) {

+		double oldLowerBound = lowerBound;

+		lowerBound = newLowerBound;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND, oldLowerBound, lowerBound));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getUpperBound() {

+		return upperBound;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setUpperBound(double newUpperBound) {

+		double oldUpperBound = upperBound;

+		upperBound = newUpperBound;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND, oldUpperBound, upperBound));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public URI getTargetURI() {

+		return targetURI;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setTargetURI(URI newTargetURI) {

+		URI oldTargetURI = targetURI;

+		targetURI = newTargetURI;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI, oldTargetURI, targetURI));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE:

+				return getInitialValue();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE:

+				if (resolve) return getFeature();

+				return basicGetFeature();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP:

+				return getStep();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME:

+				return getFeatureName();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND:

+				return getLowerBound();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND:

+				return getUpperBound();

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI:

+				return getTargetURI();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE:

+				setInitialValue((Double)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE:

+				setFeature((EStructuralFeature)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP:

+				setStep((Double)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME:

+				setFeatureName((String)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND:

+				setLowerBound((Double)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND:

+				setUpperBound((Double)newValue);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI:

+				setTargetURI((URI)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE:

+				setInitialValue(INITIAL_VALUE_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE:

+				setFeature((EStructuralFeature)null);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP:

+				setStep(STEP_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME:

+				setFeatureName(FEATURE_NAME_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND:

+				setLowerBound(LOWER_BOUND_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND:

+				setUpperBound(UPPER_BOUND_EDEFAULT);

+				return;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI:

+				setTargetURI(TARGET_URI_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE:

+				return initialValue != INITIAL_VALUE_EDEFAULT;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE:

+				return feature != null;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP:

+				return step != STEP_EDEFAULT;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME:

+				return FEATURE_NAME_EDEFAULT == null ? featureName != null : !FEATURE_NAME_EDEFAULT.equals(featureName);

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND:

+				return lowerBound != LOWER_BOUND_EDEFAULT;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND:

+				return upperBound != UPPER_BOUND_EDEFAULT;

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI:

+				return TARGET_URI_EDEFAULT == null ? targetURI != null : !TARGET_URI_EDEFAULT.equals(targetURI);

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (initialValue: ");

+		result.append(initialValue);

+		result.append(", step: ");

+		result.append(step);

+		result.append(", featureName: ");

+		result.append(featureName);

+		result.append(", lowerBound: ");

+		result.append(lowerBound);

+		result.append(", upperBound: ");

+		result.append(upperBound);

+		result.append(", targetURI: ");

+		result.append(targetURI);

+		result.append(')');

+		return result.toString();

+	}

+

+} //ModifiableParameterImpl

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentActionBarContributor.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentActionBarContributor.java
new file mode 100644
index 0000000..ac3b917
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentActionBarContributor.java
@@ -0,0 +1,429 @@
+package automaticexperiment.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+import automaticexperiment.provider.AutomaticexperienceEditPlugin;

+

+/**

+ * This is the action bar contributor for the Automaticexperiment model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet");

+				}

+				catch (PartInitException exception) {

+					AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("automaticexperiment-settings"));

+		toolBarManager.add(new Separator("automaticexperiment-additions"));

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentEditor_menu"), "automaticexperimentMenuID");

+		menuManager.insertAfter("additions", submenuManager);

+		submenuManager.add(new Separator("settings"));

+		submenuManager.add(new Separator("actions"));

+		submenuManager.add(new Separator("additions"));

+		submenuManager.add(new Separator("additions-end"));

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		submenuManager.insertBefore("additions", createChildMenuManager);

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		submenuManager.insertBefore("additions", createSiblingMenuManager);

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+

+		submenuManager = new MenuManager(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction);

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentEditor.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentEditor.java
new file mode 100644
index 0000000..c31b29b
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentEditor.java
@@ -0,0 +1,1526 @@
+package automaticexperiment.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.custom.CTabFolder;

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+import org.eclipse.swt.graphics.Point;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+import org.eclipse.ui.dialogs.SaveAsDialog;

+import org.eclipse.ui.ide.IGotoMarker;

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import automaticexperiment.provider.AutomaticexperienceEditPlugin;

+import automaticexperiment.provider.AutomaticexperimentItemProviderAdapterFactory;

+

+

+/**

+ * This is an example of a Automaticexperiment model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(AutomaticexperimentEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(AutomaticexperimentEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == AutomaticexperimentEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						getSite().getShell().getDisplay().asyncExec

+							(new Runnable() {

+								 public void run() {

+									 removedResources.addAll(visitor.getRemovedResources());

+									 if (!isDirty()) {

+										 getSite().getPage().closeEditor(AutomaticexperimentEditor.this, false);

+									 }

+								 }

+							 });

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						getSite().getShell().getDisplay().asyncExec

+							(new Runnable() {

+								 public void run() {

+									 changedResources.addAll(visitor.getChangedResources());

+									 if (getSite().getPage().getActiveEditor() == AutomaticexperimentEditor.this) {

+										 handleActivate();

+									 }

+								 }

+							 });

+					}

+				}

+				catch (CoreException exception) {

+					AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(AutomaticexperimentEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.analysis.automaticexperiment",

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"),

+				 getString("_WARN_FileConflict"));

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new AutomaticexperimentItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			getSite().getShell().getDisplay().asyncExec(runnable);

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp");

+		contextMenu.add(new Separator("additions"));

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.analysis.automaticexperiment",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.analysis.automaticexperiment",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			Tree tree = new Tree(getContainer(), SWT.MULTI);

+			selectionViewer = new TreeViewer(tree);

+			setCurrentViewer(selectionViewer);

+

+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+			selectionViewer.setInput(editingDomain.getResourceSet());

+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+

+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+			createContextMenuFor(selectionViewer);

+			int pageIndex = addPage(tree);

+			setPageText(pageIndex, getString("_UI_SelectionPage_label"));

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, "");

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label"));

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						AutomaticexperimentEditor.this.setSelectionToViewer(selection);

+						AutomaticexperimentEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				ArrayList<Object> selectionList = new ArrayList<Object>();

+				selectionList.add(selectedElement);

+				while (selectedElements.hasNext()) {

+					selectionList.add(selectedElements.next());

+				}

+

+				// Set the selection to the widget.

+				//

+				selectionViewer.setSelection(new StructuredSelection(selectionList));

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		getControl(getActivePage()).setFocus();

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage("");

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return AutomaticexperienceEditPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return AutomaticexperienceEditPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return false;

+	}

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentModelWizard.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentModelWizard.java
new file mode 100644
index 0000000..b326d89
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/presentation/AutomaticexperimentModelWizard.java
@@ -0,0 +1,612 @@
+package automaticexperiment.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.Path;

+import org.eclipse.emf.common.CommonPlugin;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.emf.ecore.xmi.XMLResource;

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.ModifyEvent;

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import automaticexperiment.AutomaticexperimentFactory;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.provider.AutomaticexperienceEditPlugin;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentEditorFilenameExtensions").split("\\s*,\\s*")));

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticexperimentPackage automaticexperimentPackage = AutomaticexperimentPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticexperimentFactory automaticexperimentFactory = automaticexperimentPackage.getAutomaticexperimentFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticexperimentModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticexperimentModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_Wizard_label"));

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(AutomaticexperienceEditPlugin.INSTANCE.getImage("full/wizban/NewAutomaticexperiment")));

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : automaticexperimentPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)automaticexperimentPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = automaticexperimentFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			AutomaticexperienceEditPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class AutomaticexperimentModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public AutomaticexperimentModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";

+					setErrorMessage(AutomaticexperienceEditPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class AutomaticexperimentModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public AutomaticexperimentModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE); {

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_ModelObject"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_XMLEncoding"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");

+			}

+			catch(MissingResourceException mre) {

+				AutomaticexperienceEditPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new AutomaticexperimentModelWizardNewFileCreationPage("Whatever", selection);

+		newFileCreationPage.setTitle(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentModelWizard_label"));

+		newFileCreationPage.setDescription(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentModelWizard_description"));

+		newFileCreationPage.setFileName(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentEditorFilenameDefaultBase");

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new AutomaticexperimentModelWizardInitialObjectCreationPage("Whatever2");

+		initialObjectCreationPage.setTitle(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_AutomaticexperimentModelWizard_label"));

+		initialObjectCreationPage.setDescription(AutomaticexperienceEditPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticExperimentItemProvider.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticExperimentItemProvider.java
new file mode 100644
index 0000000..09fc2d8
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticExperimentItemProvider.java
@@ -0,0 +1,353 @@
+package automaticexperiment.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentPackage;

+

+/**

+ * This is the item provider adapter for a {@link automaticexperiment.AutomaticExperiment} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticExperimentItemProvider

+	extends IdentifiableItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticExperimentItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addBaseScenarioPropertyDescriptor(object);

+			addParametersPropertyDescriptor(object);

+			addErrorAnalysisAlgorithmPropertyDescriptor(object);

+			addErrorFunctionPropertyDescriptor(object);

+			addTolerancePropertyDescriptor(object);

+			addReferanceDataDirPropertyDescriptor(object);

+			addMaximumNumberOfIterationsPropertyDescriptor(object);

+			addReInitPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Base Scenario feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addBaseScenarioPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_baseScenario_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_baseScenario_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__BASE_SCENARIO,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Parameters feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addParametersPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_parameters_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_parameters_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__PARAMETERS,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Error Analysis Algorithm feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addErrorAnalysisAlgorithmPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_errorAnalysisAlgorithm_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_errorAnalysisAlgorithm_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Error Function feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addErrorFunctionPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_errorFunction_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_errorFunction_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Tolerance feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addTolerancePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_tolerance_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_tolerance_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__TOLERANCE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Referance Data Dir feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addReferanceDataDirPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_referanceDataDir_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_referanceDataDir_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Maximum Number Of Iterations feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addMaximumNumberOfIterationsPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_maximumNumberOfIterations_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_maximumNumberOfIterations_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Re Init feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addReInitPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_AutomaticExperiment_reInit_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_AutomaticExperiment_reInit_feature", "_UI_AutomaticExperiment_type"),

+				 AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__RE_INIT,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an

+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or

+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {

+		if (childrenFeatures == null) {

+			super.getChildrenFeatures(object);

+			childrenFeatures.add(AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__BASE_SCENARIO);

+			childrenFeatures.add(AutomaticexperimentPackage.Literals.AUTOMATIC_EXPERIMENT__PARAMETERS);

+		}

+		return childrenFeatures;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EStructuralFeature getChildFeature(Object object, Object child) {

+		// Check the type of the specified child object and return the proper feature to use for

+		// adding (see {@link AddCommand}) it as a child.

+

+		return super.getChildFeature(object, child);

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((AutomaticExperiment)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_AutomaticExperiment_type") :

+			getString("_UI_AutomaticExperiment_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(AutomaticExperiment.class)) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_ANALYSIS_ALGORITHM:

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__ERROR_FUNCTION:

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__TOLERANCE:

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__REFERANCE_DATA_DIR:

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__MAXIMUM_NUMBER_OF_ITERATIONS:

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT__RE_INIT:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return AutomaticexperienceEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperienceEditPlugin.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperienceEditPlugin.java
new file mode 100644
index 0000000..6afb5fd
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperienceEditPlugin.java
@@ -0,0 +1,102 @@
+package automaticexperiment.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+/**

+ * This is the central singleton for the Automaticexperience editor plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public final class AutomaticexperienceEditPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final AutomaticexperienceEditPlugin INSTANCE = new AutomaticexperienceEditPlugin();

+

+	/**

+	 * 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 AutomaticexperienceEditPlugin() {

+		super

+			(new ResourceLocator [] {

+				CoreEditPlugin.INSTANCE,

+				EcoreEditPlugin.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 EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public Implementation() {

+			super();

+	

+			// Remember the static instance.

+			//

+			plugin = this;

+		}

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperimentItemProviderAdapterFactory.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperimentItemProviderAdapterFactory.java
new file mode 100644
index 0000000..130121e
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/AutomaticexperimentItemProviderAdapterFactory.java
@@ -0,0 +1,231 @@
+package automaticexperiment.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import automaticexperiment.util.AutomaticexperimentAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class AutomaticexperimentItemProviderAdapterFactory extends AutomaticexperimentAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link automaticexperiment.AutomaticExperiment} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticExperimentItemProvider automaticExperimentItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link automaticexperiment.AutomaticExperiment}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createAutomaticExperimentAdapter() {

+		if (automaticExperimentItemProvider == null) {

+			automaticExperimentItemProvider = new AutomaticExperimentItemProvider(this);

+		}

+

+		return automaticExperimentItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link automaticexperiment.ModifiableParameter} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ModifiableParameterItemProvider modifiableParameterItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link automaticexperiment.ModifiableParameter}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createModifiableParameterAdapter() {

+		if (modifiableParameterItemProvider == null) {

+			modifiableParameterItemProvider = new ModifiableParameterItemProvider(this);

+		}

+

+		return modifiableParameterItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (automaticExperimentItemProvider != null) automaticExperimentItemProvider.dispose();

+		if (modifiableParameterItemProvider != null) modifiableParameterItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/ModifiableParameterItemProvider.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/ModifiableParameterItemProvider.java
new file mode 100644
index 0000000..e1b6f60
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/provider/ModifiableParameterItemProvider.java
@@ -0,0 +1,307 @@
+package automaticexperiment.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ItemProviderAdapter;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * This is the item provider adapter for a {@link automaticexperiment.ModifiableParameter} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class ModifiableParameterItemProvider

+	extends ItemProviderAdapter

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ModifiableParameterItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addInitialValuePropertyDescriptor(object);

+			addFeaturePropertyDescriptor(object);

+			addStepPropertyDescriptor(object);

+			addFeatureNamePropertyDescriptor(object);

+			addLowerBoundPropertyDescriptor(object);

+			addUpperBoundPropertyDescriptor(object);

+			addTargetURIPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Initial Value feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addInitialValuePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_initialValue_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_initialValue_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__INITIAL_VALUE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Feature feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addFeaturePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_feature_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_feature_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__FEATURE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Step feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addStepPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_step_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_step_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__STEP,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Feature Name feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addFeatureNamePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_featureName_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_featureName_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__FEATURE_NAME,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Lower Bound feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addLowerBoundPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_lowerBound_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_lowerBound_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__LOWER_BOUND,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Upper Bound feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addUpperBoundPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_upperBound_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_upperBound_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__UPPER_BOUND,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Target URI feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addTargetURIPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_ModifiableParameter_targetURI_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_ModifiableParameter_targetURI_feature", "_UI_ModifiableParameter_type"),

+				 AutomaticexperimentPackage.Literals.MODIFIABLE_PARAMETER__TARGET_URI,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns ModifiableParameter.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ModifiableParameter"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		String label = ((ModifiableParameter)object).getFeatureName();

+		return label == null || label.length() == 0 ?

+			getString("_UI_ModifiableParameter_type") :

+			getString("_UI_ModifiableParameter_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(ModifiableParameter.class)) {

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__INITIAL_VALUE:

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__STEP:

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__FEATURE_NAME:

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__LOWER_BOUND:

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__UPPER_BOUND:

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER__TARGET_URI:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return AutomaticexperienceEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentAdapterFactory.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentAdapterFactory.java
new file mode 100644
index 0000000..30f528b
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentAdapterFactory.java
@@ -0,0 +1,185 @@
+package automaticexperiment.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import automaticexperiment.*;

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.stem.core.common.Identifiable;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see automaticexperiment.AutomaticexperimentPackage

+ * @generated

+ */

+public class AutomaticexperimentAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static AutomaticexperimentPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = AutomaticexperimentPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AutomaticexperimentSwitch<Adapter> modelSwitch =

+		new AutomaticexperimentSwitch<Adapter>() {

+			@Override

+			public Adapter caseAutomaticExperiment(AutomaticExperiment object) {

+				return createAutomaticExperimentAdapter();

+			}

+			@Override

+			public Adapter caseModifiableParameter(ModifiableParameter object) {

+				return createModifiableParameterAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link automaticexperiment.AutomaticExperiment <em>Automatic Experiment</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see automaticexperiment.AutomaticExperiment

+	 * @generated

+	 */

+	public Adapter createAutomaticExperimentAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link automaticexperiment.ModifiableParameter <em>Modifiable Parameter</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see automaticexperiment.ModifiableParameter

+	 * @generated

+	 */

+	public Adapter createModifiableParameterAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //AutomaticexperimentAdapterFactory

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentSwitch.java b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentSwitch.java
new file mode 100644
index 0000000..8916b5d
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/automaticexperiment/util/AutomaticexperimentSwitch.java
@@ -0,0 +1,192 @@
+package automaticexperiment.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import automaticexperiment.*;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.stem.core.common.Identifiable;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see automaticexperiment.AutomaticexperimentPackage

+ * @generated

+ */

+public class AutomaticexperimentSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static AutomaticexperimentPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AutomaticexperimentSwitch() {

+		if (modelPackage == null) {

+			modelPackage = AutomaticexperimentPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case AutomaticexperimentPackage.AUTOMATIC_EXPERIMENT: {

+				AutomaticExperiment automaticExperiment = (AutomaticExperiment)theEObject;

+				T1 result = caseAutomaticExperiment(automaticExperiment);

+				if (result == null) result = caseIdentifiable(automaticExperiment);

+				if (result == null) result = caseComparable(automaticExperiment);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case AutomaticexperimentPackage.MODIFIABLE_PARAMETER: {

+				ModifiableParameter modifiableParameter = (ModifiableParameter)theEObject;

+				T1 result = caseModifiableParameter(modifiableParameter);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Automatic Experiment</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Automatic Experiment</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseAutomaticExperiment(AutomaticExperiment object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable Parameter</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Modifiable Parameter</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseModifiableParameter(ModifiableParameter object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //AutomaticexperimentSwitch

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AbstractErrorAnalysisAlgorithm.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AbstractErrorAnalysisAlgorithm.java
new file mode 100644
index 0000000..72caadd
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AbstractErrorAnalysisAlgorithm.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.List;

+

+import org.eclipse.stem.analysis.AnalysisFactory;

+import org.eclipse.stem.analysis.ErrorFunction;

+import org.eclipse.stem.core.scenario.Scenario;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.ModifiableParameter;

+

+public abstract class AbstractErrorAnalysisAlgorithm implements

+		ErrorAnalysisAlgorithm {

+	

+	protected Scenario baseScenario = null;

+	protected SimplexAlgorithm simplexAlgorithm = new NelderMeadAlgorithm();

+	protected SimplexFunction simplexFnToMinimize = null;

+	protected ErrorFunction errorFunction = null;

+	protected double[] initialParamsValues = null;

+	protected double[] paramsInitialSteps = null;

+	protected double tolerance = -1;

+	protected String referenceDataDirectory = null;

+	protected long maxNumOfIterations = -1;

+	protected List<ModifiableParameter> parameters = null;

+	boolean repeat = false;

+

+	abstract public void execute();

+

+	public void setBaseScenario(Scenario baseScenario) {

+		this.baseScenario = baseScenario;

+	}

+

+	public void setTolerance(double tolerance) {

+		this.tolerance = tolerance;

+	}

+

+	public void setErrorFunction(ErrorFunction errorFunction) {

+		this.errorFunction = errorFunction;

+	}

+

+	public void setReferenceDataDirectory(String referenceDataDir) {

+		this.referenceDataDirectory = referenceDataDir;

+	}

+

+	public void init(AutomaticExperiment automaticExperiment) {

+		setBaseScenario(automaticExperiment.getBaseScenario());

+		setParameters(automaticExperiment.getParameters());

+		

+		double tolerance = automaticExperiment.getTolerance();

+		setTolerance(tolerance);		

+		long maxIterations = automaticExperiment.getMaximumNumberOfIterations();

+		setMaximumNumberOfIterations(maxIterations);

+		

+		boolean repeatUntilNoImprovement = automaticExperiment.isReInit();

+		setReInit(repeatUntilNoImprovement);

+		

+		ErrorFunction errorFunction = null;

+		String errorFunctionName = automaticExperiment.getErrorFunction();

+		if (errorFunctionName.equals("Threshold error function")) { //$NON-NLS-1$

+			errorFunction = AnalysisFactory.eINSTANCE.createThresholdErrorFunction();

+		}

+		if (errorFunctionName.equals("Simple error function")) { //$NON-NLS-1$

+			errorFunction = AnalysisFactory.eINSTANCE.createSimpleErrorFunction();

+		}		

+		setErrorFunction(errorFunction);

+		

+		String refDir = automaticExperiment.getReferanceDataDir();

+		setReferenceDataDirectory(refDir);

+	}

+

+	public double[] getResultParameters() {

+		return simplexAlgorithm.getMinimumParametersValues();

+	}

+

+	public double getResultValue() {

+		return simplexAlgorithm.getMinimumFunctionValue();

+	}

+

+	public void setMaximumNumberOfIterations(long maxNumOfIterations) {

+		this.maxNumOfIterations = maxNumOfIterations;

+	}

+

+	public void setReInit(boolean repeat) {

+		this.repeat = repeat;

+	}

+	public void setParameters(List<ModifiableParameter> parameters) {

+		this.parameters = parameters;

+		paramsInitialSteps = new double[parameters.size()];

+		initialParamsValues = new double[parameters.size()];

+		int i=0;

+		for (final ModifiableParameter param:parameters) {

+			paramsInitialSteps[i] = param.getStep();

+			initialParamsValues[i] = param.getInitialValue();

+			i++;

+		}

+	}

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/Activator.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/Activator.java
new file mode 100644
index 0000000..0e62b6c
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/Activator.java
@@ -0,0 +1,65 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.stem.analysis.automaticexperiment.executable.AutomaticExperimentExecutableAdapterFactory;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.stem.analysis.automaticexperiment"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	@Override

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+		new AutomaticExperimentExecutableAdapterFactory();

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	@Override

+	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;

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AutomaticExperimentJob.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AutomaticExperimentJob.java
new file mode 100644
index 0000000..438a70c
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/AutomaticExperimentJob.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.stem.jobs.execution.Executable;

+import org.eclipse.swt.widgets.Shell;

+import org.eclipse.ui.PlatformUI;

+

+import automaticexperiment.AutomaticExperiment;

+

+

+public class AutomaticExperimentJob extends Executable {

+	

+	protected AutomaticExperiment automaticExperiment = null;

+	protected Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();

+	protected boolean isRunning = false;

+

+	public AutomaticExperimentJob(String title, int sequenceNumber) {

+		super(title == null ? "" : title, sequenceNumber); //$NON-NLS-1$

+	}

+	

+	public AutomaticExperimentJob(AutomaticExperiment toRun) {

+		this(toRun.getDublinCore().getTitle(), 1);

+		this.automaticExperiment = toRun;

+	}

+

+	/**

+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)

+	 */

+	@Override

+	protected IStatus run(IProgressMonitor monitor) {

+		IStatus retValue = Status.OK_STATUS;

+//		isRunning = true;

+//		

+//		//Run

+//		ErrorAnalysisAlgorithm algorithm = null;

+//		String algorithmName = automaticExperiment.getErrorAnalysisAlgorithm();

+//		if (algorithmName.equals("Nedler-Mead Algorithm")) {

+//			algorithm = new SimplexAlgorithmExecuter(shell);

+//		}

+//		algorithm.setBaseScenario(automaticExperiment.getBaseScenario());

+//		

+//		int numOfParams = automaticExperiment.getParameters().size();

+//		double[] initialParamsValues = new double[numOfParams]; 

+//		double[] paramsSteps = new double[numOfParams];

+//		String[] paramsNames = new String[numOfParams];

+//		

+//		int index = 0;

+//		for (ModifiableParameter parameter:automaticExperiment.getParameters()) {

+//			initialParamsValues[index] = parameter.getInitialValue();

+//			paramsSteps[index] = parameter.getStep();

+//			paramsNames[index] = parameter.getFeatureName();

+//			index++;

+//		}

+//		algorithm.setInitialParametersValues(initialParamsValues);

+//		algorithm.setParametersSteps(paramsSteps);

+//		algorithm.setParameters(automaticExperiment.getParameters());

+//		

+//		double tolerance = automaticExperiment.getTolerance();

+//		algorithm.setTolerance(tolerance);		

+//		

+//		ErrorFunction errorFunction = null;

+//		String errorFunctionName = automaticExperiment.getErrorFunction();

+//		if (errorFunctionName.equals("Threshold error function")) {

+//			errorFunction = AnalysisFactory.eINSTANCE.createThresholdErrorFunction();

+//		}

+//		if (errorFunctionName.equals("Simple error function")) {

+//			errorFunction = AnalysisFactory.eINSTANCE.createSimpleErrorFunction();

+//		}		

+//		algorithm.setErrorFunction(errorFunction);

+//		

+//		String refDir = automaticExperiment.getReferanceDataDir();

+//		algorithm.setReferenceDataDirectory(refDir);

+//		

+//		algorithm.init();

+//		

+//		long before = System.currentTimeMillis();

+//		algorithm.execute();

+//		long after = System.currentTimeMillis();

+//		System.out.println("Time to execute the Nedler-Mead Algorithm: " + (after-before)/1000 + " seconds");

+//		System.out.println("Minimum value: " + algorithm.getResultValue());

+//		System.out.print("Parameters values: ");

+//		for (double param:algorithm.getResultParameters()) {

+//			System.out.print(param + ", ");

+//		}

+//		System.out.println();

+//		

+//		isRunning = false;

+		return retValue;

+	}

+

+	public boolean isRunning() {

+		return isRunning;

+	}

+

+	public void pause() {

+		// TODO Auto-generated method stub

+		

+	}

+

+	public void reset() {

+		// TODO Auto-generated method stub

+		

+	}

+

+	public void run() {		

+		schedule();				

+	}

+

+	public void step() {

+		// TODO Auto-generated method stub

+		

+	}

+

+	public void stop() {

+		// TODO Auto-generated method stub		

+	}

+	

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/CustomSimulationManager.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/CustomSimulationManager.java
new file mode 100644
index 0000000..f482f5b
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/CustomSimulationManager.java
@@ -0,0 +1,247 @@
+// SimulationManager.java
+package org.eclipse.stem.analysis.automaticexperiment;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.jobs.execution.ExecutableManager;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.Messages;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationCaching;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+
+/**
+ * This class manages the life-cycle of active {@link Simulation}s. There is a
+ * singleton instance of the manager that is referenced by other parts of the
+ * system to manage {@link Simulation}. It creates {@link Simulation} instances
+ * from {@link Scenario} instances and can obtain {@link Scenario} instances
+ * from file URI's or from {@link IConfigurationElement}'s. It maintains a
+ * collection of all of the active {@link Simulation}s in the system and
+ * generates {@link SimulationEvent}'s whenever a {@link Simulation} is added to
+ * that collection or removed.
+ * <p>
+ * The {@link CustomSimulationManager} maintains a sequence number and assigns
+ * successive values of that number to the {@link Simulation} instances it
+ * creates.
+ */
+public class CustomSimulationManager extends ExecutableManager {
+
+	/**
+	 * Singleton instance of the manager
+	 */
+	private static CustomSimulationManager INSTANCE = null;
+
+	/**
+	 * This is the sequence number assigned to each successive
+	 * {@link Simulation} instance the manager creates.
+	 */
+	private static int sequenceNumber = 0;
+
+	/**
+	 * Constant empty array.
+	 */
+	public static final ISimulation[] NONE = new Simulation[] {};
+
+	/**
+	 * This is the collection of active {@link Simulation} jobs
+	 */
+	private List<ISimulation> activeSimulations = null;
+
+	/**
+	 * Constructor
+	 */
+	private CustomSimulationManager() {
+		activeSimulations = new ArrayList<ISimulation>();
+
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
+				ScenarioPackage.eNAME, new XMIResourceFactoryImpl());
+	} // SimulationManager
+
+	/**
+	 * @return the singleton instance of the model
+	 */
+	public static final CustomSimulationManager getManager() {
+		if (INSTANCE == null) {
+			INSTANCE = new CustomSimulationManager();
+		}
+		return INSTANCE;
+	} // getModel
+
+	/**
+	 * Return the next simulation sequence number and increment the value.
+	 * 
+	 * @return the next simulation sequence number
+	 */
+	synchronized private static final int getAndIncrementSimulationSequenceNumber() {
+		return sequenceNumber++;
+	} // getAndIncrementSimulationSequenceNumber
+
+	/**
+	 * This is used for testing purposes to reset the state of the model.
+	 */
+	public static final void resetSimulationManager() {
+		INSTANCE = null;
+		sequenceNumber = 0;
+	} // resetSimulationManager
+
+	/**
+	 * @return the active {@link Simulation}s
+	 */
+	public final List<ISimulation> getActiveSimulations() {
+		return activeSimulations;
+	} // getActiveSimulations
+
+	/**
+	 * Add a {@link Simulation} to the collection of active {@link Simulation}s.
+	 * 
+	 * @param simulation
+	 *            the {@link ISimulation} to add
+	 */
+	private final void addActiveSimulation(final ISimulation simulation) {
+		activeSimulations.add(simulation);
+	} // addActiveSimulation
+
+	/**
+	 * Remove an {@link ISimulation} from the collection of active
+	 * {@link ISimulation}s.
+	 * 
+	 * @param simulation
+	 *            the {@link ISimulation} to remove
+	 */
+	public final void removeActiveSimulation(final ISimulation simulation) {
+		activeSimulations.remove(simulation);
+	} // removeActiveSimulation
+
+	/**
+	 * Create a {@link ISimulation} from a {@link Scenario} instance.
+	 * 
+	 * @param scenario
+	 *            the {@link Scenario} to simulate
+	 * @param monitor 
+	 * 			  Progress monitor
+	 * @return a {@link ISimulation} that's ready to run.
+	 */
+	public ISimulation createSimulation(final Scenario scenario, final IProgressMonitor monitor) {
+		ISimulation retValue = null;
+		try {
+			boolean useCache = false;
+
+			Scenario simulationScenario = null;
+			
+			if (useCache) {
+				if (SimulationCaching.INSTANCE.isScenarioInCache(scenario.getURI())) {
+					simulationScenario = SimulationCaching.INSTANCE.getCachedScenario(scenario.getURI());
+					boolean running = false;
+					for(ISimulation sim : getActiveSimulations()) {
+						if(sim.getScenario().equals(simulationScenario)) {
+							// The scenario is already running. Copy the whole scenario before resetting
+							Scenario newSimulation = null;
+							newSimulation = (Scenario)EcoreUtil.copy(simulationScenario);
+							if(simulationScenario.getModel() != null) newSimulation.setModel((Model)EcoreUtil.copy(simulationScenario.getModel()));
+							if(simulationScenario.getSequencer() != null) newSimulation.setSequencer((Sequencer)EcoreUtil.copy(simulationScenario.getSequencer()));
+							running = true;
+							break;
+						}
+					}
+					if(!running)simulationScenario.reset(); // safe since canonical graph is set 
+				}
+				else {
+					// Read scenario
+					// Add to cache
+					SimulationCaching.INSTANCE.addScenarioToCache(scenario);
+				}
+				
+			}
+			
+			if(scenario.getCanonicalGraph() == null) 
+				scenario.initialize(); // needed for preferences ...
+			else scenario.reset();
+			final Simulation simulation = new Simulation(scenario,
+					getAndIncrementSimulationSequenceNumber());
+			simulation.setPriority(Job.LONG);
+			retValue = simulation;
+
+			addActiveSimulation(retValue);
+		} catch (final RuntimeException e) {
+			// We could get an exception here if the Scenario doesn't have
+			// a Sequencer or Model which would cause problems when trying to
+			// initialize
+			Simulation.handleException(scenario, scenario.getDublinCore()
+					.getTitle(), true, e);
+			retValue = null;
+		}
+		return retValue;
+	} // createSimulation
+
+	/**
+	 * Create a {@link ISimulation} from a {@link Scenario} instance and then
+	 * start it running.
+	 * 
+	 * @param scenario
+	 *            the {@link Scenario} to be simulated
+	 */
+	public void createAndRunSimulation(final Scenario scenario) {
+		new Job(Messages.getString("SimMgr.Start_Sim")) { //$NON-NLS-1$ 
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				try {
+					final ISimulation simulation = createSimulation(scenario, monitor);
+					monitor.subTask(Messages.getString("SimMgr.Run")); //$NON-NLS-1$ 
+					simulation.run();
+				} catch (final Exception e) {
+					// The error was logged in createSimulation
+					monitor.done();
+				} // catch Exception
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndRunSimulation
+	
+	/**
+	 * Given a {@link Graph} find the {@link ISimulation} that created it.
+	 * 
+	 * @param graph
+	 *            an instance of a {@link Graph}
+	 * @return the {@link ISimulation} instance that created the {@link Graph},
+	 *         <code>null</code>, if no match could be found.
+	 */
+	public ISimulation mapGraphToSimulation(final Graph graph) {
+		ISimulation retValue = null;
+		for (final ISimulation simulation : activeSimulations) {
+			final Graph simulationGraph = simulation.getScenario()
+					.getCanonicalGraph();
+			// Is this the one we're looking for?
+			if (graph == simulationGraph) {
+				// Yes
+				retValue = simulation;
+				break;
+			} // if
+		} // for each ISimulation
+		return retValue;
+	} // mapGraphToSimulation
+} // SimulationManager
diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithm.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithm.java
new file mode 100644
index 0000000..8a640de
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithm.java
@@ -0,0 +1,34 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.List;

+

+import org.eclipse.stem.analysis.ErrorFunction;

+import org.eclipse.stem.core.scenario.Scenario;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.ModifiableParameter;

+

+public interface ErrorAnalysisAlgorithm {

+	public void setErrorFunction(final ErrorFunction errorFunction);

+	public void setParameters(final List<ModifiableParameter> parameters);

+	public void setTolerance(final double tolerance);

+	public void setBaseScenario(final Scenario baseScenario);

+	public void setReferenceDataDirectory(final String referenceDataDir);

+	public void setMaximumNumberOfIterations(final long maxNumOfIterations);

+	public double[] getResultParameters();

+	public double getResultValue();

+	public void execute();

+	public void init(AutomaticExperiment automaticExperiment);

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithmFactory.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithmFactory.java
new file mode 100644
index 0000000..52262c6
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ErrorAnalysisAlgorithmFactory.java
@@ -0,0 +1,26 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+public class ErrorAnalysisAlgorithmFactory {

+	public final static ErrorAnalysisAlgorithmFactory INSTANCE = new ErrorAnalysisAlgorithmFactory();

+	

+	public ErrorAnalysisAlgorithm createErrorAnalysisAlgorithm(final String algorithmName)

+	{

+		ErrorAnalysisAlgorithm algorithm = null;

+		if (algorithmName.equals("Nedler-Mead Algorithm")) { //$NON-NLS-1$ 

+			algorithm = new SimplexAlgorithmExecuter();

+		}

+		return algorithm;

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/NelderMeadAlgorithm.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/NelderMeadAlgorithm.java
new file mode 100644
index 0000000..b96f4b4
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/NelderMeadAlgorithm.java
@@ -0,0 +1,428 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+import java.util.ArrayList;

+import java.util.List;

+

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+/**

+ * Minimizes a function using the Nelder-Mead algorithm.

+ * 

+ * Simplex function minimisation procedure due to Nelder+Mead(1965), as

+ * implemented by O'Neill(1971, Appl.Statist. 20, 338-45), with subsequent

+ * comments by Chambers+Ertel(1974, 23, 250-1), Benyon(1976, 25, 97) and

+ * Hill(1978, 27, 380-2)

+ * 

+ * Authors:

+ * 

+ * Based on FORTRAN77 version by R ONeill 

+ * This Java version by Yossi Mesika

+ * 

+ * Reference:

+ * 

+ * John Nelder, Roger Mead, A simplex method for function minimization, Computer

+ * Journal, Volume 7, 1965, pages 308-313.

+ * 

+ * R ONeill, Algorithm AS 47: Function Minimization Using a Simplex Procedure,

+ * Applied Statistics, Volume 20, Number 3, 1971, pages 338-345.

+ */

+public class NelderMeadAlgorithm implements SimplexAlgorithm {

+

+	double ccoeff = 0.5;

+	double del;

+	double dn;

+	double dnn;

+	double ecoeff = 2.0;

+	double eps = 0.001;

+	int i;

+	int ihi;

+	int ilo;

+	int j;

+	int jcount;

+	int l;

+	int nn;

+	double[] p;

+	double[] p2star;

+	double[] pbar;

+	double[] pstar;

+	double rcoeff = 1.0;

+	double rq;

+	double x;

+	double[] y;

+	double y2star;

+	double ylo;

+	double ystar;

+	double z;

+

+	int ifault = -1;

+	int numres = -1;

+	int icount = -1;

+	double ynewlo;

+	double[] xmin;

+	

+	ArrayList<Double> minParamValues = new ArrayList<Double>();

+	ArrayList<Double> maxParamValues = new ArrayList<Double>();

+	

+	public void execute(final SimplexFunction fn,  final double[] startPoint,

+			final double[] step, final double terminatingVariance, long maxIter) {

+		execute(fn, startPoint, terminatingVariance, step,

+				1, (int)maxIter);

+	}

+	

+	/**

+	 * @param fn the {@link SimplexFunction} to be minimized

+	 * @param start a starting point for the first iteration

+	 * @param reqmin the terminating limit for the variance of function values

+	 * @param step determines the size and shape of the initial simplex. The relative magnitudes of 

+	 * its elements should reflect the units of the variables.

+	 * @param konvge the convergence check is carried out every KONVGE iterations

+	 * @param kcoun the maximum number of function evaluations

+	 */

+	private void execute(SimplexFunction fn, double start[], double reqmin, double step[], int konvge, int kcount) {

+		int n = start.length;

+		//

+		// Check the input parameters.

+		//

+		if (reqmin <= 0.0) {

+			ifault = 1;

+			return;

+		}

+

+		if (n < 1) {

+			ifault = 1;

+			return;

+		}

+

+		if (konvge < 1) {

+			ifault = 1;

+			return;

+		}

+

+		p = new double[n * (n + 1)];

+		pstar = new double[n];

+		p2star = new double[n];

+		pbar = new double[n];

+		y = new double[n + 1];

+		xmin = new double[n];

+

+		icount = 0;

+		numres = 0;

+

+		jcount = konvge;

+		dn = (n);

+		nn = n + 1;

+		dnn = (nn);

+		del = 1.0;

+		rq = reqmin * dn;

+		//

+		// Initial or restarted loop.

+		//

+		for (;;) {

+			for (i = 0; i < n; i++) {

+				p[i + n * n] = start[i];

+			}

+			limit(start);

+			y[n] = fn.getValue(start);

+			icount = icount + 1;

+

+			for (j = 0; j < n; j++) {

+				x = start[j];

+				start[j] = start[j] + step[j] * del;

+				for (i = 0; i < n; i++) {

+					p[i + j * n] = start[i];

+				}

+				limit(start);

+				y[j] = fn.getValue(start);

+				icount = icount + 1;

+				start[j] = x;

+			}

+			//	                    

+			// The simplex construction is complete.

+			//	                    

+			// Find highest and lowest Y values. YNEWLO = Y(IHI) indicates

+			// the vertex of the simplex to be replaced.

+			//	                

+			ylo = y[0];

+			ilo = 0;

+

+			for (i = 1; i < nn; i++) {

+				if (y[i] < ylo) {

+					ylo = y[i];

+					ilo = i;

+				}

+			}

+			//

+			// Inner loop.

+			//

+			for (;;) {

+				if (kcount != -1 && kcount <= icount) {

+					break;

+				}

+				ynewlo = y[0];

+				ihi = 0;

+

+				for (i = 1; i < nn; i++) {

+					if (ynewlo < y[i]) {

+						ynewlo = y[i];

+						ihi = i;

+					}

+				}

+				//

+				// Calculate PBAR, the centroid of the simplex vertices

+				// excepting the vertex with Y value YNEWLO.

+				//

+				for (i = 0; i < n; i++) {

+					z = 0.0;

+					for (j = 0; j < nn; j++) {

+						z = z + p[i + j * n];

+					}

+					z = z - p[i + ihi * n];

+					pbar[i] = z / dn;

+				}

+				//

+				// Reflection through the centroid.

+				//

+				for (i = 0; i < n; i++) {

+					pstar[i] = pbar[i] + rcoeff * (pbar[i] - p[i + ihi * n]);

+				}

+				limit(pstar);

+				ystar = fn.getValue(pstar);

+				icount = icount + 1;

+				//

+				// Successful reflection, so extension.

+				//

+				if (ystar < ylo) {

+					for (i = 0; i < n; i++) {

+						p2star[i] = pbar[i] + ecoeff * (pstar[i] - pbar[i]);

+					}

+					limit(p2star);

+					y2star = fn.getValue(p2star);

+					icount = icount + 1;

+					//

+					// Check extension.

+					//

+					if (ystar < y2star) {

+						for (i = 0; i < n; i++) {

+							p[i + ihi * n] = pstar[i];

+						}

+						y[ihi] = ystar;

+					}

+					//

+					// Retain extension or contraction.

+					//

+					else {

+						for (i = 0; i < n; i++) {

+							p[i + ihi * n] = p2star[i];

+						}

+						y[ihi] = y2star;

+					}

+				}

+				//

+				// No extension.

+				//

+				else {

+					l = 0;

+					for (i = 0; i < nn; i++) {

+						if (ystar < y[i]) {

+							l = l + 1;

+						}

+					}

+

+					if (1 < l) {

+						for (i = 0; i < n; i++) {

+							p[i + ihi * n] = pstar[i];

+						}

+						y[ihi] = ystar;

+					}

+					//

+					// Contraction on the Y(IHI) side of the centroid.

+					//

+					else if (l == 0) {

+						for (i = 0; i < n; i++) {

+							p2star[i] = pbar[i] + ccoeff

+									* (p[i + ihi * n] - pbar[i]);

+						}

+						limit(p2star);

+						y2star = fn.getValue(p2star);

+						icount = icount + 1;

+						//

+						// Contract the whole simplex.

+						//

+						if (y[ihi] < y2star) {

+							for (j = 0; j < nn; j++) {

+								for (i = 0; i < n; i++) {

+									p[i + j * n] = (p[i + j * n] + p[i + ilo

+											* n]) * 0.5;

+									xmin[i] = p[i + j * n];

+								}

+								limit(xmin);

+								y[j] = fn.getValue(xmin);

+								icount = icount + 1;

+							}

+							ylo = y[0];

+							ilo = 0;

+

+							for (i = 1; i < nn; i++) {

+								if (y[i] < ylo) {

+									ylo = y[i];

+									ilo = i;

+								}

+							}

+							continue;

+						}

+						//

+						// Retain contraction.

+						//

+						else {

+							for (i = 0; i < n; i++) {

+								p[i + ihi * n] = p2star[i];

+							}

+							y[ihi] = y2star;

+						}

+					}

+					//

+					// Contraction on the reflection side of the centroid.

+					//

+					else if (l == 1) {

+						for (i = 0; i < n; i++) {

+							p2star[i] = pbar[i] + ccoeff * (pstar[i] - pbar[i]);

+						}

+						limit(p2star);

+						y2star = fn.getValue(p2star);

+						icount = icount + 1;

+						//

+						// Retain reflection?

+						//

+						if (y2star <= ystar) {

+							for (i = 0; i < n; i++) {

+								p[i + ihi * n] = p2star[i];

+							}

+							y[ihi] = y2star;

+						} else {

+							for (i = 0; i < n; i++) {

+								p[i + ihi * n] = pstar[i];

+							}

+							y[ihi] = ystar;

+						}

+					}

+				}

+				//

+				// Check if YLO improved.

+				//

+				if (y[ihi] < ylo) {

+					ylo = y[ihi];

+					ilo = ihi;

+				}

+				jcount = jcount - 1;

+

+				if (0 < jcount) {

+					continue;

+				}

+				//

+				// Check to see if minimum reached.

+				//

+				if (kcount == -1 || icount <= kcount) {

+					jcount = konvge;

+

+					z = 0.0;

+					for (i = 0; i < nn; i++) {

+						z = z + y[i];

+					}

+					x = z / dnn;

+

+					z = 0.0;

+					for (i = 0; i < nn; i++) {

+						z = z + Math.pow(y[i] - x, 2);

+					}

+

+					if (z <= rq) {

+						break;

+					}

+				}

+			}

+			//

+			// Factorial tests to check that YNEWLO is a local minimum.

+			//

+			for (i = 0; i < n; i++) {

+				xmin[i] = p[i + ilo * n];

+			}

+			ynewlo = y[ilo];

+

+			if (kcount != -1 && kcount < icount) {

+				ifault = 2;

+				break;

+			}

+

+			ifault = 0;

+

+			for (i = 0; i < n; i++) {

+				del = step[i] * eps;

+				xmin[i] = xmin[i] + del;

+				limit(xmin);

+				z = fn.getValue(xmin);

+				icount = icount + 1;

+				if (z < ynewlo) {

+					ifault = 2;

+					break;

+				}

+				xmin[i] = xmin[i] - del - del;

+				limit(xmin);

+				z = fn.getValue(xmin);

+				icount = icount + 1;

+				if (z < ynewlo) {

+					ifault = 2;

+					break;

+				}

+				xmin[i] = xmin[i] + del;

+			}

+

+			if (ifault == 0) {

+				break;

+			}

+			//

+			// Restart the procedure.

+			//

+			for (i = 0; i < n; i++) {

+				start[i] = xmin[i];

+			}

+			del = eps;

+			numres = numres + 1;

+		}

+	}

+

+	private void limit(double []vals) {

+		for(int i=0;i<vals.length;++i) {

+			if(vals[i]<minParamValues.get(i)) vals[i] = minParamValues.get(i); 

+			else if(vals[i]>maxParamValues.get(i)) vals[i] = maxParamValues.get(i); 

+		}

+	}

+	public double getMinimumFunctionValue() {

+		return this.ynewlo;

+	}

+

+	public double[] getMinimumParametersValues() {

+		return this.xmin;

+	}

+

+	public void setParameterLimits(final int parameterIndex,

+			final double lowerBound, final double upperBound) {

+		for(int i=0;i<parameterIndex+1-minParamValues.size();++i) minParamValues.add(0.0);

+		for(int i=0;i<parameterIndex+1-maxParamValues.size();++i) maxParamValues.add(0.0);

+		minParamValues.ensureCapacity(parameterIndex+1);

+		maxParamValues.ensureCapacity(parameterIndex+1);

+		minParamValues.set(parameterIndex, lowerBound);

+		maxParamValues.set(parameterIndex,upperBound);

+		

+	}

+

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithm.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithm.java
new file mode 100644
index 0000000..6f9b030
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithm.java
@@ -0,0 +1,24 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+import java.util.List;

+

+import automaticexperiment.ModifiableParameter;

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+public interface SimplexAlgorithm {

+	public final static double NO_LIMIT = -1;

+	

+	public void execute(final SimplexFunction fn,  final double[] startPoints, final double[] step, final double terminatingVariance, long maxIter);

+	public double getMinimumFunctionValue();

+	public double[] getMinimumParametersValues();

+	public void setParameterLimits(final int parameterIndex, final double lowerBound, final double upperBound);

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java
new file mode 100644
index 0000000..5680116
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexAlgorithmExecuter.java
@@ -0,0 +1,266 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+/**

+ * Implementation was taken from: http://www.ee.ucl.ac.uk/~mflanaga/java/Minimisation.html#simplex

+ */

+

+import java.io.File;

+import java.io.FileWriter;

+import java.io.IOException;

+import java.util.Arrays;

+import java.util.List;

+

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.stem.analysis.ErrorFunction;

+import org.eclipse.stem.analysis.ErrorResult;

+import org.eclipse.stem.analysis.ScenarioInitializationException;

+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;

+import org.eclipse.stem.analysis.util.CSVscenarioLoader;

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.scenario.Scenario;

+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;

+import org.eclipse.stem.jobs.simulation.ISimulation;

+import org.eclipse.stem.jobs.simulation.Simulation;

+import org.eclipse.stem.util.loggers.views.CustomCSVLogger;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.ModifiableParameter;

+

+public class SimplexAlgorithmExecuter 

+	extends AbstractErrorAnalysisAlgorithm {

+	

+	private ISimulation simulation = null;

+	private CustomCSVLogger csvLogger = null;

+	private final static String SIMULATION_OUTPUT_DIR = Platform.getLocation() + File.separator + "AutoExpTempDir";

+	private final static String LOG_FILE_NAME = SIMULATION_OUTPUT_DIR+File.separator+"resultLog.csv";

+	static String LS = System.getProperty("line.separator"); 

+	private final CustomSimulationManager simMgr = CustomSimulationManager.getManager();

+	private ReferenceScenarioDataMapImpl ref;

+	

+	/**

+	 * @see org.eclipse.stem.analysis.automaticexperiment.AbstractErrorAnalysisAlgorithm#execute()

+	 */

+	@Override

+	public void execute() {

+		double prevmin = Double.MAX_VALUE;

+		double [] prevvals = new double[initialParamsValues.length];

+		for(;;) {

+			for(int i=0;i<initialParamsValues.length;++i) prevvals[i] = initialParamsValues[i];

+			long before = System.currentTimeMillis();

+			simplexAlgorithm.execute(simplexFnToMinimize,  initialParamsValues, paramsInitialSteps, tolerance, this.maxNumOfIterations);

+			long after = System.currentTimeMillis();

+			

+			if(!this.repeat) {

+				System.out.println("\n\nTime to execute the Nedler-Mead Algorithm: " + (after-before)/1000 + " seconds");

+				System.out.println("Minimum value: " + simplexAlgorithm.getMinimumFunctionValue());

+				System.out.println("Parameters values: " + Arrays.toString(simplexAlgorithm.getMinimumParametersValues()));

+				break;

+			}

+			double newmin = simplexAlgorithm.getMinimumFunctionValue();

+			if(newmin >= prevmin) {

+				System.out.println("\n\nTime to execute the Nedler-Mead Algorithm: " + (after-before)/1000 + " seconds");

+				System.out.println("Minimum value: " + prevmin);

+				System.out.println("Parameters values: " + Arrays.toString(prevvals));

+				break; // we couldn't improve

+			}

+			// Not same, reinit with new minimum

+			prevmin = simplexAlgorithm.getMinimumFunctionValue();

+			for(int i=0;i<initialParamsValues.length;++i){

+				initialParamsValues[i] = simplexAlgorithm.getMinimumParametersValues()[i];

+				prevvals[i] =  simplexAlgorithm.getMinimumParametersValues()[i];

+			}

+		}

+	}

+	

+	@Override

+	public void init(AutomaticExperiment automaticExperiment) {

+		super.init(automaticExperiment);

+		simplexFnToMinimize = new NedlearMeadSimplexFunction(parameters, baseScenario, errorFunction);

+		try {

+			CSVscenarioLoader loader1 = new CSVscenarioLoader(referenceDataDirectory);

+			ref = loader1.parseAllFiles(2);

+		} catch (ScenarioInitializationException e) {

+			e.printStackTrace();

+		}

+	}

+	

+	@Override

+	public void setParameters(List<ModifiableParameter> parameters) {

+		super.setParameters(parameters);

+		

+		//Set lower and upper bounds constraints for the parameters

+		int paramIndex=0;

+		for (final ModifiableParameter param:parameters) {

+			simplexAlgorithm.setParameterLimits(paramIndex, param.getLowerBound(), param.getUpperBound());

+			paramIndex++;

+		}

+	}

+	

+	/**

+	 *

+	 */

+	public class NedlearMeadSimplexFunction

+		implements SimplexFunction 

+	{	

+	    private ErrorFunction errorFunction = null;

+	    private String[] parameterNames = null;

+	    private FileWriter resultWriter;

+	    private URI[] decoratorURIs = null;

+		public NedlearMeadSimplexFunction(

+				final List<ModifiableParameter> parameters,

+				final Scenario pBaseScenario, 

+				final ErrorFunction errorFunction) {

+			

+			try {

+				resultWriter = new FileWriter(LOG_FILE_NAME);

+				baseScenario = pBaseScenario;

+				this.errorFunction = errorFunction;

+				if (parameters != null) {

+					parameterNames = new String[parameters.size()];

+					decoratorURIs = new URI[parameters.size()];

+					int i=0;

+					for (final ModifiableParameter param:parameters) {

+						decoratorURIs[i]=param.getTargetURI();

+						parameterNames[i++] = param.getFeatureName();

+						resultWriter.write(parameterNames[i-1]);

+						resultWriter.write(",");

+					}

+					resultWriter.write("error");

+					resultWriter.write(LS);

+				}

+			} catch(IOException ioe) {

+				ioe.printStackTrace();

+			}

+		}

+		

+		public double getValue(double[] parameters) {

+			

+			

+			simulation = createSimulation(baseScenario);

+			simulation.setSequenceNumber(simulation.getSequenceNumber()+1);

+			

+			// Descend into the Scenario looking for something with a double field

+			final EList<Decorator> decs = baseScenario.getCanonicalGraph().getDecorators();

+	

+			Decorator defaultDecorator = null;

+			for (Decorator decorator : decs) {

+				if (decorator instanceof DiseaseModel) {

+					defaultDecorator = decorator; 

+					break;

+				}

+			}

+			

+			for(int i=0;i<parameterNames.length;++i) {

+				Decorator decorator = defaultDecorator;

+				if(decoratorURIs[i] != null) 

+					for(Decorator scenarioDec:decs) 

+						if(decoratorURIs[i].toString().equals(scenarioDec.getURI().toString())) {

+							decorator = scenarioDec;

+							break;

+						}

+				for (EAttribute attribute : decorator.eClass().getEAllAttributes()) 

+					if(attribute.getName().equals(parameterNames[i])) 

+						decorator.eSet(attribute, new Double(parameters[i]));

+			}

+			

+			csvLogger = new CustomCSVLogger(SIMULATION_OUTPUT_DIR, simulation, (IntegrationDecorator) defaultDecorator);

+

+			// This will reinit the infectors/inoc etc to the new values 

+			baseScenario.reset();

+

+

+			//Run the simulation with the new parameters and return the error value

+			System.out.println("Running the simulation with the following parameters: ");

+			System.out.println("\tParameters Names: " + Arrays.toString(parameterNames));

+			System.out.println("\tParameters Values: " + Arrays.toString(parameters));

+			double error = 0.0;

+			try {

+				for(double val:parameters) resultWriter.write(val+",");

+				runSimulation(simulation);

+				

+				error = getErrorValue(simulation.getUniqueIDString());

+				System.out.println(" Error is: " + error);

+				resultWriter.write(error+"");

+				resultWriter.write(LS);

+				resultWriter.flush();

+			} catch(IOException ioe) {

+				ioe.printStackTrace();

+			}

+			cleanup();

+			

+			return error;

+		}

+		

+		private double getErrorValue(String simulationUniqueId) {

+			ErrorResult result = null;

+			try {

+				final EList<Decorator> decs = baseScenario.getCanonicalGraph().getDecorators();

+				

+				DiseaseModel defaultDecorator = null;

+				for (Decorator decorator : decs) {

+					if (decorator instanceof DiseaseModel) {

+						defaultDecorator = (DiseaseModel)decorator; 

+						break;

+					}

+				}

+				

+				CSVscenarioLoader loader2 = new CSVscenarioLoader(SIMULATION_OUTPUT_DIR + File.separator + simulationUniqueId +"/"+defaultDecorator.getDiseaseName());

+				ReferenceScenarioDataMapImpl data = loader2.parseAllFiles(2);

+	

+				result = errorFunction.calculateError(ref, data);

+			} catch (ScenarioInitializationException e) {

+				e.printStackTrace();

+			}

+			return result.getError();

+		}

+		

+		private void runSimulation(final ISimulation simulationToRun) {

+			long before = System.currentTimeMillis();

+			simulationToRun.run();

+			try {

+				simulationToRun.join();

+			} catch (InterruptedException e) {

+				e.printStackTrace();

+			}

+			simulationToRun.stop();			

+			

+			long after = System.currentTimeMillis();

+			System.out.println("It took " + (after-before)/1000 + " seconds to run the simulation");

+		}

+		

+		private void cleanup() {

+			if (csvLogger != null) {

+				csvLogger.close();

+				csvLogger = null;

+			}

+			simMgr.removeActiveSimulation(simulation);

+			((Simulation)simulation).destroy();

+			simulation = null;

+			CustomSimulationManager.resetSimulationManager();

+		}

+		

+		private ISimulation createSimulation(Scenario scenario) {

+			Simulation simulation = (Simulation)simMgr.createSimulation(scenario, null);

+			simulation.simulationSleep = false;

+			return simulation;

+		}

+	}

+}

+

+

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexFunction.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexFunction.java
new file mode 100644
index 0000000..0637f75
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/SimplexFunction.java
@@ -0,0 +1,17 @@
+package org.eclipse.stem.analysis.automaticexperiment;

+;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+public interface SimplexFunction {

+	public double getValue(double[] parameters); 

+}

diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/executable/AutomaticExperimentExecutableAdapterFactory.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/executable/AutomaticExperimentExecutableAdapterFactory.java
new file mode 100644
index 0000000..1a62b76
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/executable/AutomaticExperimentExecutableAdapterFactory.java
@@ -0,0 +1,88 @@
+package org.eclipse.stem.analysis.automaticexperiment.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.analysis.automaticexperiment.ErrorAnalysisAlgorithm;
+import org.eclipse.stem.analysis.automaticexperiment.ErrorAnalysisAlgorithmFactory;
+import org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter;
+import org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapterFactory;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+import automaticexperiment.AutomaticExperiment;
+import automaticexperiment.util.AutomaticexperimentAdapterFactory;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that creates adapters that
+ * adapt {@link AutomaticExperiment}s to {@link IExecutable}s.
+ */
+public class AutomaticExperimentExecutableAdapterFactory 
+	extends	AutomaticexperimentAdapterFactory 
+	implements ExecutableAdapterFactory 
+{
+
+	/**
+	 * Default Constructor
+	 */
+	public AutomaticExperimentExecutableAdapterFactory() {
+		super();
+		ExecutableAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see automaticexperiment.util.AutomaticexperimentAdapterFactory#createAutomaticExperimentAdapter()
+	 */
+	@Override
+	public Adapter createAutomaticExperimentAdapter() {
+		return new AutomaticExperimentExecutableAdapter();
+	}
+
+	/**
+	 * @see automaticexperiment.util.AutomaticexperimentAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == IExecutable.class || super.isFactoryForType(type);
+	}
+	
+	/**
+	 * This class adapts an {@link AutomaticExperiment} to an {@link IExecutable}.
+	 */
+	protected static class AutomaticExperimentExecutableAdapter extends
+			ExecutableAdapter implements Adapter {
+
+		/**
+		 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#run()
+		 */
+		@Override
+		public void run() {
+			final AutomaticExperiment automaticExperiment = (AutomaticExperiment)getTarget();
+			String algorithmName = automaticExperiment.getErrorAnalysisAlgorithm();
+			final ErrorAnalysisAlgorithm algorithm = 
+				ErrorAnalysisAlgorithmFactory.INSTANCE.createErrorAnalysisAlgorithm(algorithmName);
+			algorithm.init(automaticExperiment);
+			// Stefan fix, we can't hold up the UI thread, it causes memory leaks
+			Job j = new Job("Minimizer algorith") {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					algorithm.execute();
+					return Status.OK_STATUS;
+				}
+			};
+			j.schedule();
+		}
+	}
+}
diff --git a/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ui/NewAutomaticExperimentWizard.java b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ui/NewAutomaticExperimentWizard.java
new file mode 100644
index 0000000..55198f6
--- /dev/null
+++ b/org.eclipse.stem.analysis.automaticexperiment/src/org/eclipse/stem/analysis/automaticexperiment/ui/NewAutomaticExperimentWizard.java
@@ -0,0 +1,508 @@
+package org.eclipse.stem.analysis.automaticexperiment.ui;

+

+/*******************************************************************************

+ * Copyright (c) 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.io.FileNotFoundException;

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.core.commands.IHandler;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.wizard.IWizardPage;

+import org.eclipse.jface.wizard.WizardDialog;

+import org.eclipse.jface.wizard.WizardPage;

+import org.eclipse.stem.analysis.automaticexperiment.ui.NewAutomaticExperimentWizard.NewAutomaticExperimentPage2.ParameterDetails;

+import org.eclipse.stem.core.STEMURI;

+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;

+import org.eclipse.stem.core.common.Identifiable;

+import org.eclipse.stem.core.experiment.ExperimentPackage;

+import org.eclipse.stem.core.scenario.Scenario;

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+import org.eclipse.stem.ui.wizards.DublinCorePage;

+import org.eclipse.stem.ui.wizards.NewIdentifiablePage;

+import org.eclipse.stem.ui.wizards.NewIdentifiableWizard;

+import org.eclipse.stem.ui.wizards.NewSTEMProjectWizard;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.SelectionAdapter;

+import org.eclipse.swt.events.SelectionEvent;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.layout.RowLayout;

+import org.eclipse.swt.widgets.Button;

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.DirectoryDialog;

+import org.eclipse.swt.widgets.FileDialog;

+import org.eclipse.swt.widgets.Group;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.List;

+import org.eclipse.swt.widgets.Shell;

+import org.eclipse.swt.widgets.Spinner;

+import org.eclipse.swt.widgets.Text;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.handlers.HandlerUtil;

+

+import automaticexperiment.AutomaticExperiment;

+import automaticexperiment.AutomaticexperimentFactory;

+import automaticexperiment.AutomaticexperimentPackage;

+import automaticexperiment.ModifiableParameter;

+

+public class NewAutomaticExperimentWizard 

+	extends NewIdentifiableWizard {

+	

+	protected NewAutomaticExperimentPage2 page2 = null;

+	

+	public NewAutomaticExperimentWizard() {

+		// TODO Auto-generated constructor stub

+	}

+

+	/**

+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#addPages()

+	 */

+	@Override

+	public void addPages() {

+		setForcePreviousAndNextButtons(false);

+		newIdentifiablePage = createNewIdentifiablePage();

+		// Were we successful in creating the page?

+		if (newIdentifiablePage == null) {

+			// No

+			return;

+		}

+		page2 = createWizardPage2();

+		// Were we successful in creating the page?

+		if (page2 == null) {

+			// No

+			return;

+		}

+		newDublinCorePage = createDublinCorePage();

+		// Were we successful in creating the page?

+		if (newDublinCorePage == null) {

+			// No

+			return;

+		}

+		addPage(newIdentifiablePage);

+		addPage(page2);

+		addPage(newDublinCorePage);

+	}

+

+	/**

+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)

+	 */

+	@Override

+	public IWizardPage getNextPage(IWizardPage page) {

+		final IWizardPage nextPage = super.getNextPage(page);

+		if (nextPage instanceof NewAutomaticExperimentPage2) {

+			NewAutomaticExperimentPage1 page1 = (NewAutomaticExperimentPage1)newIdentifiablePage;

+			page2.setSelectedParameters(page1.parametersList.getSelection());

+		}

+		return nextPage;

+	}

+

+	@Override

+	protected DublinCorePage createDublinCorePage() {

+		return new DublinCorePage() {

+			/**

+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()

+			 */

+			@Override

+			protected void initializeDCAttributes() {

+				super.initializeDCAttributes();

+				format.setText(ExperimentPackage.eNS_URI);

+				format.setEnabled(false);

+				type.setText(STEMURI.EXPERIMENT_TYPE_URI.toString());

+				type.setEnabled(false);

+			}

+		};

+	}

+

+	@Override

+	protected Identifiable createIdentifiable() {

+		return createAutomaticExperiment();

+	}

+

+	@Override

+	protected NewIdentifiablePage createNewIdentifiablePage() {

+		NewAutomaticExperimentPage1 page1 = new NewAutomaticExperimentPage1(getShell(), "New Automatic Experiment Wizard"); //$NON-NLS-1$

+		page1.setTitle("Title to externalize"); //$NON-NLS-1$

+		page1.setDescription("Description to externalize"); //$NON-NLS-1$		

+		return page1;

+	}

+	

+	protected NewAutomaticExperimentPage2 createWizardPage2() {

+		NewAutomaticExperimentPage2 page2 = new NewAutomaticExperimentPage2("New Automatic Experiment Wizard"); //$NON-NLS-1$

+		page2.setTitle("Title to externalize"); //$NON-NLS-1$

+		page2.setDescription("Description to externalize"); //$NON-NLS-1$		

+		return page2;

+	}

+

+	@Override

+	protected String getSerializationFileNameExtension() {

+		return AutomaticexperimentPackage.eNAME;

+	}

+

+	@Override

+	protected String getSerializationFolderName() {

+		return NewSTEMProjectWizard.EXPERIMENTS_FOLDER_NAME;

+	}

+

+	@Override

+	protected String getWizardTitle() {

+		// TODO Externalise this string

+		return "Automatic Experiment Wizard";

+	}

+	

+	protected AutomaticExperiment createAutomaticExperiment() {

+		AutomaticExperiment autoExperiment = AutomaticexperimentFactory.eINSTANCE.createAutomaticExperiment();

+		autoExperiment.setDublinCore(newDublinCorePage.createDublinCore());

+		final NewAutomaticExperimentPage1 page1 = (NewAutomaticExperimentPage1)newIdentifiablePage;

+		String algorithmName = page1.algorithmCombo.getText();

+		autoExperiment.setErrorAnalysisAlgorithm(algorithmName);

+		String errorFunction = page1.errorFunctionCombo.getText();

+		autoExperiment.setErrorFunction(errorFunction);

+		if (!page1.numOfIterationsSpinner.getText().equals("")) {

+			Long numOfIterations = new Long(page1.numOfIterationsSpinner.getText());

+			autoExperiment.setMaximumNumberOfIterations(numOfIterations);

+		}

+		if (!page1.refDirText.getText().trim().equals("")) {

+			autoExperiment.setReferanceDataDir(page1.refDirText.getText());

+		}

+		if (!page1.refDirText.getText().trim().equals("")) {

+			Scenario scenario = createScenario(page1.scenarioText.getText());

+			autoExperiment.setBaseScenario(scenario);

+		}

+		for (String param:page2.paramToDetailsObj.keySet()) {

+			ParameterDetails details = page2.paramToDetailsObj.get(param);

+			ModifiableParameter parameter = AutomaticexperimentFactory.eINSTANCE.createModifiableParameter();

+			parameter.setFeatureName(param);

+			parameter.setInitialValue(new Double(details.initialValueText.getText()));

+			parameter.setStep(new Double(details.stepValueText.getText()));

+			autoExperiment.getParameters().add(parameter);

+		}

+		return autoExperiment;

+	}

+	

+	protected Scenario createScenario(final String scenarioFile) {

+		final ResourceSet resourceSet = new ResourceSetImpl();

+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*",

+				STEMXMIResourceFactoryImpl.INSTANCE);

+

+		resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("platform",

+				STEMXMIResourceFactoryImpl.INSTANCE);

+		final Resource resource = resourceSet.getResource(URI.createFileURI(scenarioFile),

+				true);

+		try {			

+			resource.load(null);

+		} catch (FileNotFoundException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		} catch (IOException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+		Scenario loadedScenario = (Scenario)resource.getContents().get(0);

+		loadedScenario.initialize();

+		return loadedScenario;

+		//return ScenarioTest.createFixture();

+	}

+	

+	protected static class NewAutomaticExperimentPage1 extends NewIdentifiablePage {

+		

+		public List parametersList = null;

+		public Combo algorithmCombo = null;		

+		public Combo errorFunctionCombo = null;

+		public Spinner numOfIterationsSpinner = null;

+		public Text refDirText = null;

+		public Text scenarioText = null;

+		protected Shell shell = null;

+//		public NewAutomaticExperimentPage2 page2 = null;

+		

+		/**

+		 * @param pageName

+		 *            the name of the page

+		 */

+		protected NewAutomaticExperimentPage1(final Shell shell, final String pageName) {

+			super(pageName);

+			this.shell = shell;

+//			page2 = new NewAutomaticExperimentPage2("Page 2");

+//			page2.setPreviousPage(this);

+		}

+

+		/**

+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiablePage#createSpecificComposite(org.eclipse.swt.widgets.Composite)

+		 */

+		@Override

+		protected Composite createSpecificComposite(Composite parent) {

+			final Composite composite = new Composite(parent, SWT.NONE);

+			final GridLayout gridLayout = new GridLayout();

+			gridLayout.numColumns = 3;

+			composite.setLayout(gridLayout);

+			

+			final Label label01 = new Label(composite, SWT.NONE);

+			label01.setText("Base scenario: ");

+			scenarioText = new Text(composite, SWT.BORDER);

+			scenarioText.setEditable(false);

+			final Button button01 = new Button(composite, SWT.NONE);

+			button01.setText("Select Scenario...");

+			button01.addSelectionListener(new SelectionAdapter() {

+				/**

+				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)

+				 */

+				@Override

+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {

+					FileDialog fileDialog = new FileDialog(shell);

+					fileDialog.setFilterExtensions(new String[] { "*." + ScenarioPackage.eNAME } );

+					String workspaceDir = Platform.getInstanceLocation().getURL().getPath();

+					if (workspaceDir.startsWith("/") || workspaceDir.startsWith("\\")) {

+						workspaceDir = workspaceDir.substring(1);

+					}

+					fileDialog.setFilterPath(workspaceDir);

+					String scenarioFile = fileDialog.open();

+					scenarioText.setText(scenarioFile);

+				}

+				

+			});

+			

+			final Label label11 = new Label(composite, SWT.NONE);

+			label11.setText("Disease Model Parameters: ");

+			parametersList = new List(composite, SWT.BORDER | SWT.MULTI);

+			for (String name:getParametersNames()) {

+				parametersList.add(name);

+			}

+			parametersList.addSelectionListener(new SelectionAdapter() {

+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {

+					setPageComplete(validatePage());

+				}				

+			}

+			);	

+			final Composite composite11 = new Composite(composite, SWT.NONE);

+			composite11.setLayout(new RowLayout(SWT.VERTICAL));			

+			final Button button11 = new Button(composite11, SWT.NONE);

+			button11.setText("Select All");

+			button11.addSelectionListener(new SelectionAdapter() {

+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {

+					parametersList.selectAll();

+					setPageComplete(validatePage());

+				}				

+			}

+			);			

+			final Button button12 = new Button(composite11, SWT.NONE);

+			button12.setText("Select None");

+			button12.addSelectionListener(new SelectionAdapter() {

+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {

+					parametersList.deselectAll();

+					setPageComplete(validatePage());

+				}				

+			}

+			);

+			

+			final Label label21 = new Label(composite, SWT.NONE);

+			label21.setText("Error analysis algorithm: ");			

+			algorithmCombo = new Combo(composite, SWT.READ_ONLY);

+			algorithmCombo.add("Nedler-Mead Algorithm");

+			algorithmCombo.select(0);

+			GridData gridData21 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);

+			gridData21.horizontalSpan = 2;

+			algorithmCombo.setLayoutData(gridData21);

+			

+			final Label label31 = new Label(composite, SWT.NONE);

+			label31.setText("Error function: ");			

+			errorFunctionCombo = new Combo(composite, SWT.READ_ONLY);

+			errorFunctionCombo.add("Threshold error function");

+			errorFunctionCombo.add("Simple error function");

+			errorFunctionCombo.select(0);

+			GridData gridData31 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);

+			gridData31.horizontalSpan = 2;

+			errorFunctionCombo.setLayoutData(gridData31);

+			

+			final Label label41 = new Label(composite, SWT.NONE);

+			label41.setText("Maximum number of iterations: ");			

+			numOfIterationsSpinner = new Spinner(composite, SWT.BORDER);

+			GridData gridData41 = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);

+			gridData41.horizontalSpan = 2;

+			numOfIterationsSpinner.setLayoutData(gridData41);

+			

+			final Label label51 = new Label(composite, SWT.NONE);

+			label51.setText("Reference data directory: ");

+			refDirText = new Text(composite, SWT.BORDER);

+			refDirText.setEditable(false);

+			final Button button51 = new Button(composite, SWT.NONE);

+			button51.setText("Browse...");

+			button51.addSelectionListener(new SelectionAdapter() {

+				/**

+				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)

+				 */

+				@Override

+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {

+					DirectoryDialog dirDialog = new DirectoryDialog(shell);

+					String directory = dirDialog.open();

+					refDirText.setText(directory);

+				}

+				

+			});

+			

+			return composite;

+		}

+		

+		private java.util.List<String> getParametersNames() {

+			java.util.List<String> names = new ArrayList<String>();

+			names.add("transmissionRate");

+			names.add("modulationPhaseShift");

+			names.add("seasonalModulationFloor");

+			return names;

+		}

+		

+		private Composite parameterValues(Composite parent, String name) {

+			Composite composite = new Composite(parent, SWT.NONE);

+			composite.setLayout(new RowLayout());

+			final Label label = new Label(composite, SWT.NONE);

+			label.setText("Initial value: ");

+			 

+			return composite;

+		}

+

+		/**

+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiablePage#validatePage()

+		 */

+		@Override

+		protected boolean validatePage() {

+			setErrorMessage(null);

+			if (parametersList.getSelectionCount() == 0) {

+				setErrorMessage("Choose at least one parameter from the list");

+				return false;

+			}

+			return super.validatePage();

+		}

+

+		@Override

+		protected String getDCDescription() {

+			return "Some description goes here";

+		}

+		

+	}

+	

+	protected static class NewAutomaticExperimentPage2 

+		extends WizardPage {

+		

+		private Map<String, ParameterDetails> paramToDetailsObj = new HashMap<String, ParameterDetails>();

+		private Composite pageComposite = null; 

+		

+		/**

+		 * @param pageName

+		 *            the name of the page

+		 */

+		protected NewAutomaticExperimentPage2(final String pageName) {

+			super(pageName);

+		}

+

+		public void createControl(Composite parent) {

+			pageComposite = new Composite(parent, SWT.NONE);

+			pageComposite.setLayout(new RowLayout(SWT.VERTICAL));

+			

+			setPageComplete(validatePage());

+			parent.pack();

+			setControl(pageComposite);

+		}

+		

+		public void setSelectedParameters(final String[] selected) {

+			java.util.List<String> paramsToRemove = new ArrayList<String>();

+			for (final String existingParam:paramToDetailsObj.keySet()) {

+				paramsToRemove.add(existingParam);

+			}

+			for (final String param:selected) {				

+				if (!paramToDetailsObj.containsKey(param)) {

+					addParamGroup(param);					

+				}

+				else {

+					paramsToRemove.remove(param);

+				}

+			}

+			for (final String toRemove:paramsToRemove) {

+				removeParamGroup(toRemove);

+			}

+			pageComposite.pack(true);

+		}

+		

+		private void addParamGroup(final String param) {

+			Group group = new Group(pageComposite, SWT.NONE);

+			final GridLayout layout = new GridLayout();

+			layout.numColumns = 2;

+			group.setLayout(layout);

+			final Label label1 = new Label(group, SWT.NONE);

+			label1.setText("Initial value: ");

+			final Text initialText = new Text(group, SWT.BORDER);

+			final Label label2 = new Label(group, SWT.NONE);

+			label2.setText("Step value: ");

+			final Text stepText = new Text(group, SWT.BORDER);

+			final Label label3 = new Label(group, SWT.NONE);

+			label3.setText("Upperbound value: ");

+			final Text upperboundText = new Text(group, SWT.BORDER);

+			group.setText(param);

+			

+			ParameterDetails paramDetails = new ParameterDetails();

+			paramDetails.group = group;

+			paramDetails.initialValueText = initialText;

+			paramDetails.stepValueText = stepText;

+			paramDetails.upperboundValueText = upperboundText;			

+			paramToDetailsObj.put(param, paramDetails);			

+		}

+		

+		private void removeParamGroup(final String param) {

+			ParameterDetails paramDetails = paramToDetailsObj.remove(param);

+			Group group = paramDetails.group;

+			group.dispose();

+		}		

+		

+		protected boolean validatePage() {

+			return true;

+		}

+		

+		protected static class ParameterDetails {

+			public Group group = null;

+			public Text initialValueText = null;

+			public Text stepValueText = null;

+			public Text upperboundValueText = null;

+		}

+	}

+	

+	/**

+	 * This class is a {@link IHandler} for the command that creates a

+	 * {@link NewAutomaticExperimentWizard}

+	 */

+	public static class NewAutomaticExperimentWizardCommandHandler extends AbstractHandler

+			implements IHandler {

+

+		/**

+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+		 */

+		public Object execute(final ExecutionEvent executionEvent)

+				throws ExecutionException {

+			final IWorkbenchWindow window = HandlerUtil

+					.getActiveWorkbenchWindowChecked(executionEvent);

+			final NewAutomaticExperimentWizard wizard = new NewAutomaticExperimentWizard();

+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);

+			final WizardDialog wizardDialog = new WizardDialog(window

+					.getShell(), wizard);

+			wizardDialog.open();

+			return null;

+		} // execute

+	}

+}

diff --git a/org.eclipse.stem.analysis/.classpath b/org.eclipse.stem.analysis/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.analysis/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.analysis/.project b/org.eclipse.stem.analysis/.project
new file mode 100644
index 0000000..e6edcf0
--- /dev/null
+++ b/org.eclipse.stem.analysis/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.analysis</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.analysis/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.analysis/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9910b65
--- /dev/null
+++ b/org.eclipse.stem.analysis/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:54:37 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.analysis/META-INF/MANIFEST.MF b/org.eclipse.stem.analysis/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..301e691
--- /dev/null
+++ b/org.eclipse.stem.analysis/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.analysis;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.analysis,
+ org.eclipse.stem.analysis.impl,
+ org.eclipse.stem.analysis.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.jface;bundle-version="3.4.0"
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.analysis/build.properties b/org.eclipse.stem.analysis/build.properties
new file mode 100644
index 0000000..46f6a86
--- /dev/null
+++ b/org.eclipse.stem.analysis/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2009/03/25 00:50:29 sedlund Exp $
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.analysis/model/analysis.ecore b/org.eclipse.stem.analysis/model/analysis.ecore
new file mode 100644
index 0000000..bd9cfae
--- /dev/null
+++ b/org.eclipse.stem.analysis/model/analysis.ecore
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="analysis"
+    nsURI="http:///org/eclipse/stem/analysis.ecore" nsPrefix="org.eclipse.stem.analysis">
+  <eClassifiers xsi:type="ecore:EClass" name="ErrorFunction">
+    <eOperations name="calculateError" eType="#//ErrorResult">
+      <eParameters name="reference" eType="#//ReferenceScenarioDataMap"/>
+      <eParameters name="data" eType="#//ReferenceScenarioDataMap"/>
+    </eOperations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ThresholdErrorFunction" eSuperTypes="#//ErrorFunction"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ReferenceScenarioDataMap"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SimpleErrorFunction" eSuperTypes="#//ErrorFunction"/>
+  <eClassifiers xsi:type="ecore:EClass" name="ErrorResult">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="errorByTimeStep" transient="true">
+      <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EEList">
+        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject"/>
+      </eGenericType>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="error" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        transient="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.analysis/model/analysis.genmodel b/org.eclipse.stem.analysis/model/analysis.genmodel
new file mode 100644
index 0000000..928423c
--- /dev/null
+++ b/org.eclipse.stem.analysis/model/analysis.genmodel
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.analysis/src"
+    modelPluginID="org.eclipse.stem.analysis" modelName="Analysis" importerID="org.eclipse.emf.importer.java"
+    complianceLevel="5.0" copyrightFields="false">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Analysis" basePackage="org.eclipse.stem" disposableProviderFactory="true"
+      ecorePackage="analysis.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="analysis.ecore#//ReferenceScenarioDataMap"/>
+    <genClasses ecoreClass="analysis.ecore#//ErrorFunction"/>
+    <genClasses ecoreClass="analysis.ecore#//ThresholdErrorFunction"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.analysis/plugin.properties b/org.eclipse.stem.analysis/plugin.properties
new file mode 100644
index 0000000..72de6c1
--- /dev/null
+++ b/org.eclipse.stem.analysis/plugin.properties
@@ -0,0 +1,8 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.1 2009/03/25 00:50:29 sedlund Exp $
+
+pluginName = STEM Analysis
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.analysis/plugin.xml b/org.eclipse.stem.analysis/plugin.xml
new file mode 100644
index 0000000..6a79a64
--- /dev/null
+++ b/org.eclipse.stem.analysis/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2009/03/25 00:50:29 sedlund Exp $
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/analysis.ecore"
+            class="org.eclipse.stem.analysis.AnalysisPackage"
+            genModel="model/analysis.genmodel"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/Activator.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/Activator.java
new file mode 100644
index 0000000..c205d93
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/Activator.java
@@ -0,0 +1,93 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+@SuppressWarnings("all")
+public class Activator extends Plugin {
+
+	/**
+	 * The plug-in ID
+	 */ 
+	public static final String PLUGIN_ID = "org.eclipse.stem.analysis"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logError
+	
+	/*
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+} // Activator
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisFactory.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisFactory.java
new file mode 100644
index 0000000..107c8cd
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisFactory.java
@@ -0,0 +1,87 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.analysis.AnalysisPackage
+ * @generated
+ */
+public interface AnalysisFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	AnalysisFactory eINSTANCE = org.eclipse.stem.analysis.impl.AnalysisFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Error Function</em>'.
+	 * @generated
+	 */
+	ErrorFunction createErrorFunction();
+
+	/**
+	 * Returns a new object of class '<em>Threshold Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Threshold Error Function</em>'.
+	 * @generated
+	 */
+	ThresholdErrorFunction createThresholdErrorFunction();
+
+	/**
+	 * Returns a new object of class '<em>Reference Scenario Data Map</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Reference Scenario Data Map</em>'.
+	 * @generated
+	 */
+	ReferenceScenarioDataMap createReferenceScenarioDataMap();
+
+	/**
+	 * Returns a new object of class '<em>Simple Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Simple Error Function</em>'.
+	 * @generated
+	 */
+	SimpleErrorFunction createSimpleErrorFunction();
+
+	/**
+	 * Returns a new object of class '<em>Error Result</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Error Result</em>'.
+	 * @generated
+	 */
+	ErrorResult createErrorResult();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	AnalysisPackage getAnalysisPackage();
+
+} //AnalysisFactory
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisPackage.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisPackage.java
new file mode 100644
index 0000000..9c35f43
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/AnalysisPackage.java
@@ -0,0 +1,336 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.analysis.AnalysisFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface AnalysisPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "analysis";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/analysis.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.analysis";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	AnalysisPackage eINSTANCE = org.eclipse.stem.analysis.impl.AnalysisPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.analysis.impl.ErrorFunctionImpl <em>Error Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.analysis.impl.ErrorFunctionImpl
+	 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getErrorFunction()
+	 * @generated
+	 */
+	int ERROR_FUNCTION = 0;
+
+	/**
+	 * The number of structural features of the '<em>Error Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ERROR_FUNCTION_FEATURE_COUNT = 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.analysis.impl.ThresholdErrorFunctionImpl <em>Threshold Error Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.analysis.impl.ThresholdErrorFunctionImpl
+	 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getThresholdErrorFunction()
+	 * @generated
+	 */
+	int THRESHOLD_ERROR_FUNCTION = 1;
+
+	/**
+	 * The number of structural features of the '<em>Threshold Error Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int THRESHOLD_ERROR_FUNCTION_FEATURE_COUNT = ERROR_FUNCTION_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl <em>Reference Scenario Data Map</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl
+	 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getReferenceScenarioDataMap()
+	 * @generated
+	 */
+	int REFERENCE_SCENARIO_DATA_MAP = 2;
+
+	/**
+	 * The number of structural features of the '<em>Reference Scenario Data Map</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REFERENCE_SCENARIO_DATA_MAP_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.analysis.impl.SimpleErrorFunctionImpl <em>Simple Error Function</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.analysis.impl.SimpleErrorFunctionImpl
+	 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getSimpleErrorFunction()
+	 * @generated
+	 */
+	int SIMPLE_ERROR_FUNCTION = 3;
+
+	/**
+	 * The number of structural features of the '<em>Simple Error Function</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIMPLE_ERROR_FUNCTION_FEATURE_COUNT = ERROR_FUNCTION_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.analysis.impl.ErrorResultImpl <em>Error Result</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.analysis.impl.ErrorResultImpl
+	 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getErrorResult()
+	 * @generated
+	 */
+	int ERROR_RESULT = 4;
+
+	/**
+	 * The feature id for the '<em><b>Error By Time Step</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ERROR_RESULT__ERROR_BY_TIME_STEP = 0;
+
+	/**
+	 * The feature id for the '<em><b>Error</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ERROR_RESULT__ERROR = 1;
+
+	/**
+	 * The number of structural features of the '<em>Error Result</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ERROR_RESULT_FEATURE_COUNT = 2;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.analysis.ErrorFunction <em>Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Error Function</em>'.
+	 * @see org.eclipse.stem.analysis.ErrorFunction
+	 * @generated
+	 */
+	EClass getErrorFunction();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.analysis.ThresholdErrorFunction <em>Threshold Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Threshold Error Function</em>'.
+	 * @see org.eclipse.stem.analysis.ThresholdErrorFunction
+	 * @generated
+	 */
+	EClass getThresholdErrorFunction();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.analysis.ReferenceScenarioDataMap <em>Reference Scenario Data Map</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Reference Scenario Data Map</em>'.
+	 * @see org.eclipse.stem.analysis.ReferenceScenarioDataMap
+	 * @generated
+	 */
+	EClass getReferenceScenarioDataMap();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.analysis.SimpleErrorFunction <em>Simple Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Simple Error Function</em>'.
+	 * @see org.eclipse.stem.analysis.SimpleErrorFunction
+	 * @generated
+	 */
+	EClass getSimpleErrorFunction();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.analysis.ErrorResult <em>Error Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Error Result</em>'.
+	 * @see org.eclipse.stem.analysis.ErrorResult
+	 * @generated
+	 */
+	EClass getErrorResult();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.analysis.ErrorResult#getErrorByTimeStep <em>Error By Time Step</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Error By Time Step</em>'.
+	 * @see org.eclipse.stem.analysis.ErrorResult#getErrorByTimeStep()
+	 * @see #getErrorResult()
+	 * @generated
+	 */
+	EAttribute getErrorResult_ErrorByTimeStep();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.analysis.ErrorResult#getError <em>Error</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Error</em>'.
+	 * @see org.eclipse.stem.analysis.ErrorResult#getError()
+	 * @see #getErrorResult()
+	 * @generated
+	 */
+	EAttribute getErrorResult_Error();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	AnalysisFactory getAnalysisFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.analysis.impl.ErrorFunctionImpl <em>Error Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.analysis.impl.ErrorFunctionImpl
+		 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getErrorFunction()
+		 * @generated
+		 */
+		EClass ERROR_FUNCTION = eINSTANCE.getErrorFunction();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.analysis.impl.ThresholdErrorFunctionImpl <em>Threshold Error Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.analysis.impl.ThresholdErrorFunctionImpl
+		 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getThresholdErrorFunction()
+		 * @generated
+		 */
+		EClass THRESHOLD_ERROR_FUNCTION = eINSTANCE.getThresholdErrorFunction();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl <em>Reference Scenario Data Map</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl
+		 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getReferenceScenarioDataMap()
+		 * @generated
+		 */
+		EClass REFERENCE_SCENARIO_DATA_MAP = eINSTANCE.getReferenceScenarioDataMap();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.analysis.impl.SimpleErrorFunctionImpl <em>Simple Error Function</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.analysis.impl.SimpleErrorFunctionImpl
+		 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getSimpleErrorFunction()
+		 * @generated
+		 */
+		EClass SIMPLE_ERROR_FUNCTION = eINSTANCE.getSimpleErrorFunction();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.analysis.impl.ErrorResultImpl <em>Error Result</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.analysis.impl.ErrorResultImpl
+		 * @see org.eclipse.stem.analysis.impl.AnalysisPackageImpl#getErrorResult()
+		 * @generated
+		 */
+		EClass ERROR_RESULT = eINSTANCE.getErrorResult();
+		/**
+		 * The meta object literal for the '<em><b>Error By Time Step</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ERROR_RESULT__ERROR_BY_TIME_STEP = eINSTANCE.getErrorResult_ErrorByTimeStep();
+		/**
+		 * The meta object literal for the '<em><b>Error</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ERROR_RESULT__ERROR = eINSTANCE.getErrorResult_Error();
+
+	}
+
+} //AnalysisPackage
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/DiseaseType.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/DiseaseType.java
new file mode 100644
index 0000000..9483930
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/DiseaseType.java
@@ -0,0 +1,18 @@
+package org.eclipse.stem.analysis;
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+public enum DiseaseType {
+	SEIR, 
+	SIR,
+	SI
+}
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorFunction.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorFunction.java
new file mode 100644
index 0000000..bb74277
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorFunction.java
@@ -0,0 +1,31 @@
+package org.eclipse.stem.analysis;
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+ * 
+ * @author edlund
+ * @model
+ */
+public interface ErrorFunction extends EObject {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	ErrorResult calculateError(ReferenceScenarioDataMap reference, ReferenceScenarioDataMap data);
+
+}
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorResult.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorResult.java
new file mode 100644
index 0000000..83a172c
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ErrorResult.java
@@ -0,0 +1,87 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Error Result</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.analysis.ErrorResult#getErrorByTimeStep <em>Error By Time Step</em>}</li>
+ *   <li>{@link org.eclipse.stem.analysis.ErrorResult#getError <em>Error</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.analysis.AnalysisPackage#getErrorResult()
+ * @model
+ * @generated
+ */
+public interface ErrorResult extends EObject {
+
+	/**
+	 * Returns the value of the '<em><b>Error By Time Step</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error By Time Step</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Error By Time Step</em>' attribute.
+	 * @see #setErrorByTimeStep(EList)
+	 * @see org.eclipse.stem.analysis.AnalysisPackage#getErrorResult_ErrorByTimeStep()
+	 * @model many="false" transient="true"
+	 * @generated
+	 */
+	EList<Double> getErrorByTimeStep();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.analysis.ErrorResult#getErrorByTimeStep <em>Error By Time Step</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Error By Time Step</em>' attribute.
+	 * @see #getErrorByTimeStep()
+	 * @generated
+	 */
+	void setErrorByTimeStep(EList<Double> value);
+
+	/**
+	 * Returns the value of the '<em><b>Error</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Error</em>' attribute.
+	 * @see #setError(double)
+	 * @see org.eclipse.stem.analysis.AnalysisPackage#getErrorResult_Error()
+	 * @model transient="true"
+	 * @generated
+	 */
+	double getError();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.analysis.ErrorResult#getError <em>Error</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Error</em>' attribute.
+	 * @see #getError()
+	 * @generated
+	 */
+	void setError(double value);
+} // ErrorResult
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ReferenceScenarioDataMap.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ReferenceScenarioDataMap.java
new file mode 100644
index 0000000..7f16dd8
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ReferenceScenarioDataMap.java
@@ -0,0 +1,25 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+
+
+/**
+* The class stores scenario reference data for a scenario disease as well as additional meta-data. 
+* 
+* @model
+* @generated NOT
+*/
+@SuppressWarnings("all")
+public interface ReferenceScenarioDataMap extends EObject {		
+}
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ScenarioInitializationException.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ScenarioInitializationException.java
new file mode 100644
index 0000000..d38efe0
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ScenarioInitializationException.java
@@ -0,0 +1,35 @@
+package org.eclipse.stem.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Thrown when we fail to load a scenario for any reason
+ */
+
+public class ScenarioInitializationException extends Exception {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param message
+	 */
+	public ScenarioInitializationException(String message) {super(message);}
+	
+
+	/**
+	 * Constructor
+	 * 
+	 * @param t
+	 */
+	public ScenarioInitializationException(Throwable t) {super(t);}
+
+}
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/SimpleErrorFunction.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/SimpleErrorFunction.java
new file mode 100644
index 0000000..5fd714f
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/SimpleErrorFunction.java
@@ -0,0 +1,27 @@
+package org.eclipse.stem.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Simple Error Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.analysis.AnalysisPackage#getSimpleErrorFunction()
+ * @model
+ * @generated
+ */
+@SuppressWarnings("all")
+public interface SimpleErrorFunction extends ErrorFunction {
+} // SimpleErrorFunction
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/States.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/States.java
new file mode 100644
index 0000000..ce60096
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/States.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.analysis;
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+public class States {
+	/**
+     * possible states with parameters to fit
+     */
+	public static final String[] statesToFit= {"S","E","I","R","P", "Incidence"};
+	/**
+	 *  Susceptible index (for statesToFit)
+	 */
+	public static final int SUSCEPTIBLE = 0;
+	/**
+	 * Exposed index (for statesToFit)
+	 */
+	public static final int EXPOSED     = 1;
+	/**
+	 * Infectious index (for statesToFit)
+	 */
+	public static final int INFECTIOUS  = 2;
+	/**
+	 *  Recovered index (for statesToFit)
+	 */
+	public static final int RECOVERED   = 3;
+	/**
+	 *  Infectious recover index (for statesToFit)
+	 */
+	public static final int POPULATION = 4;
+	/**
+	 *  Incidence
+	 */
+	public static final int INCIDENCE = 5;
+}
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ThresholdErrorFunction.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ThresholdErrorFunction.java
new file mode 100644
index 0000000..82ed4c9
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/ThresholdErrorFunction.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Threshold Error Function</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.analysis.AnalysisPackage#getThresholdErrorFunction()
+ * @model
+ * @generated
+ */
+@SuppressWarnings("all")
+public interface ThresholdErrorFunction extends ErrorFunction {
+} // ThresholdErrorFunction
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisFactoryImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisFactoryImpl.java
new file mode 100644
index 0000000..e5097a1
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisFactoryImpl.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.analysis.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AnalysisFactoryImpl extends EFactoryImpl implements AnalysisFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static AnalysisFactory init() {
+		try {
+			AnalysisFactory theAnalysisFactory = (AnalysisFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/analysis.ecore"); 
+			if (theAnalysisFactory != null) {
+				return theAnalysisFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new AnalysisFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnalysisFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case AnalysisPackage.ERROR_FUNCTION: return createErrorFunction();
+			case AnalysisPackage.THRESHOLD_ERROR_FUNCTION: return createThresholdErrorFunction();
+			case AnalysisPackage.REFERENCE_SCENARIO_DATA_MAP: return createReferenceScenarioDataMap();
+			case AnalysisPackage.SIMPLE_ERROR_FUNCTION: return createSimpleErrorFunction();
+			case AnalysisPackage.ERROR_RESULT: return createErrorResult();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ErrorFunction createErrorFunction() {
+		ErrorFunctionImpl errorFunction = new ErrorFunctionImpl();
+		return errorFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ThresholdErrorFunction createThresholdErrorFunction() {
+		ThresholdErrorFunctionImpl thresholdErrorFunction = new ThresholdErrorFunctionImpl();
+		return thresholdErrorFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ReferenceScenarioDataMap createReferenceScenarioDataMap() {
+		ReferenceScenarioDataMapImpl referenceScenarioDataMap = new ReferenceScenarioDataMapImpl();
+		return referenceScenarioDataMap;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SimpleErrorFunction createSimpleErrorFunction() {
+		SimpleErrorFunctionImpl simpleErrorFunction = new SimpleErrorFunctionImpl();
+		return simpleErrorFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ErrorResult createErrorResult() {
+		ErrorResultImpl errorResult = new ErrorResultImpl();
+		return errorResult;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnalysisPackage getAnalysisPackage() {
+		return (AnalysisPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static AnalysisPackage getPackage() {
+		return AnalysisPackage.eINSTANCE;
+	}
+
+} //AnalysisFactoryImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisPackageImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisPackageImpl.java
new file mode 100644
index 0000000..b811087
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/AnalysisPackageImpl.java
@@ -0,0 +1,295 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.ErrorFunction;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ReferenceScenarioDataMap;
+import org.eclipse.stem.analysis.SimpleErrorFunction;
+import org.eclipse.stem.analysis.ThresholdErrorFunction;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AnalysisPackageImpl extends EPackageImpl implements AnalysisPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass errorFunctionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass thresholdErrorFunctionEClass = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass referenceScenarioDataMapEClass = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass simpleErrorFunctionEClass = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass errorResultEClass = null;
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.analysis.AnalysisPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private AnalysisPackageImpl() {
+		super(eNS_URI, AnalysisFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static AnalysisPackage init() {
+		if (isInited) return (AnalysisPackage)EPackage.Registry.INSTANCE.getEPackage(AnalysisPackage.eNS_URI);
+
+		// Obtain or create and register package
+		AnalysisPackageImpl theAnalysisPackage = (AnalysisPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof AnalysisPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new AnalysisPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theAnalysisPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theAnalysisPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theAnalysisPackage.freeze();
+
+		return theAnalysisPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getErrorFunction() {
+		return errorFunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getThresholdErrorFunction() {
+		return thresholdErrorFunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getReferenceScenarioDataMap() {
+		return referenceScenarioDataMapEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSimpleErrorFunction() {
+		return simpleErrorFunctionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getErrorResult() {
+		return errorResultEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getErrorResult_ErrorByTimeStep() {
+		return (EAttribute)errorResultEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getErrorResult_Error() {
+		return (EAttribute)errorResultEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnalysisFactory getAnalysisFactory() {
+		return (AnalysisFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		errorFunctionEClass = createEClass(ERROR_FUNCTION);
+
+		thresholdErrorFunctionEClass = createEClass(THRESHOLD_ERROR_FUNCTION);
+
+		referenceScenarioDataMapEClass = createEClass(REFERENCE_SCENARIO_DATA_MAP);
+
+		simpleErrorFunctionEClass = createEClass(SIMPLE_ERROR_FUNCTION);
+
+		errorResultEClass = createEClass(ERROR_RESULT);
+		createEAttribute(errorResultEClass, ERROR_RESULT__ERROR_BY_TIME_STEP);
+		createEAttribute(errorResultEClass, ERROR_RESULT__ERROR);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		thresholdErrorFunctionEClass.getESuperTypes().add(this.getErrorFunction());
+		simpleErrorFunctionEClass.getESuperTypes().add(this.getErrorFunction());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(errorFunctionEClass, ErrorFunction.class, "ErrorFunction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		EOperation op = addEOperation(errorFunctionEClass, this.getErrorResult(), "calculateError", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, this.getReferenceScenarioDataMap(), "reference", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, this.getReferenceScenarioDataMap(), "data", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+		initEClass(thresholdErrorFunctionEClass, ThresholdErrorFunction.class, "ThresholdErrorFunction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(referenceScenarioDataMapEClass, ReferenceScenarioDataMap.class, "ReferenceScenarioDataMap", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(simpleErrorFunctionEClass, SimpleErrorFunction.class, "SimpleErrorFunction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(errorResultEClass, ErrorResult.class, "ErrorResult", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		EGenericType g1 = createEGenericType(ecorePackage.getEEList());
+		EGenericType g2 = createEGenericType(ecorePackage.getEDoubleObject());
+		g1.getETypeArguments().add(g2);
+		initEAttribute(getErrorResult_ErrorByTimeStep(), g1, "errorByTimeStep", null, 0, 1, ErrorResult.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getErrorResult_Error(), ecorePackage.getEDouble(), "error", null, 0, 1, ErrorResult.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //AnalysisPackageImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorFunctionImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorFunctionImpl.java
new file mode 100644
index 0000000..30c418f
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorFunctionImpl.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.ErrorFunction;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ReferenceScenarioDataMap;
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Error Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ErrorFunctionImpl extends EObjectImpl implements ErrorFunction {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ErrorFunctionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AnalysisPackage.Literals.ERROR_FUNCTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ErrorResult calculateError(ReferenceScenarioDataMap reference, ReferenceScenarioDataMap data) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * From the dataMap extract a list of infectious
+	 * @param dataMap
+	 * @return list of infectious people
+	 */
+	public List<Double> getInfectious(ReferenceScenarioDataInstance dataMap) {
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		assert(infectiousList!=null);
+		
+		List<Double> infectious = new ArrayList<Double>();
+		for (int i = 0; i < infectiousList.size(); i ++) {
+			
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			infectious.add(new Double(inf));
+		}
+		return infectious;
+	}
+	
+
+	/**
+	 * From the dataMap extract a list of infectious
+	 * @param dataMap
+	 * @return list of infectious people
+	 */
+	public List<Double> getIncidence(ReferenceScenarioDataInstance dataMap) {
+		final String INCIDENCE = States.statesToFit[States.INCIDENCE];
+		
+		 
+		// MUST exist
+		List<String> incidenceList = dataMap.getData(INCIDENCE);
+		assert(incidenceList!=null);
+		
+		List<Double> infectious = new ArrayList<Double>();
+		for (int i = 0; i < incidenceList.size(); i ++) {
+			
+			double inf = (new Double(incidenceList.get(i))).doubleValue();
+			infectious.add(new Double(inf));
+		}
+		return infectious;
+	}
+	
+	/**
+	 * From the dataMap extract a list of population values
+	 * @param dataMap
+	 * @return list of infectious people
+	 */
+	public List<Double> getPopulation(ReferenceScenarioDataInstance dataMap) {
+		final String POPULATION = States.statesToFit[States.POPULATION];
+		
+		 
+		// MUST exist
+		List<String> popList = dataMap.getData(POPULATION);
+		// We should standardize on P for population count
+		if(popList == null) popList =  dataMap.getData("Population Count");
+		assert(popList!=null);
+		
+		List<Double> populations = new ArrayList<Double>();
+		for (int i = 0; i < popList.size(); i ++) {
+			
+			double inf = (new Double(popList.get(i))).doubleValue();
+			populations.add(new Double(inf));
+		}
+		return populations;
+	}
+	
+} //ErrorFunctionImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorResultImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorResultImpl.java
new file mode 100644
index 0000000..eeb4317
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ErrorResultImpl.java
@@ -0,0 +1,215 @@
+package org.eclipse.stem.analysis.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.ErrorResult;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Error Result</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.analysis.impl.ErrorResultImpl#getErrorByTimeStep <em>Error By Time Step</em>}</li>
+ *   <li>{@link org.eclipse.stem.analysis.impl.ErrorResultImpl#getError <em>Error</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ErrorResultImpl extends EObjectImpl implements ErrorResult {
+	/**
+	 * The cached value of the '{@link #getErrorByTimeStep() <em>Error By Time Step</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getErrorByTimeStep()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Double> errorByTimeStep;
+	/**
+	 * The default value of the '{@link #getError() <em>Error</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getError()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ERROR_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getError() <em>Error</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getError()
+	 * @generated
+	 * @ordered
+	 */
+	protected double error = ERROR_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ErrorResultImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AnalysisPackage.Literals.ERROR_RESULT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Double> getErrorByTimeStep() {
+		return errorByTimeStep;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setErrorByTimeStep(EList<Double> newErrorByTimeStep) {
+		EList<Double> oldErrorByTimeStep = errorByTimeStep;
+		errorByTimeStep = newErrorByTimeStep;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AnalysisPackage.ERROR_RESULT__ERROR_BY_TIME_STEP, oldErrorByTimeStep, errorByTimeStep));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getError() {
+		return error;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setError(double newError) {
+		double oldError = error;
+		error = newError;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AnalysisPackage.ERROR_RESULT__ERROR, oldError, error));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AnalysisPackage.ERROR_RESULT__ERROR_BY_TIME_STEP:
+				return getErrorByTimeStep();
+			case AnalysisPackage.ERROR_RESULT__ERROR:
+				return new Double(getError());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AnalysisPackage.ERROR_RESULT__ERROR_BY_TIME_STEP:
+				setErrorByTimeStep((EList<Double>)newValue);
+				return;
+			case AnalysisPackage.ERROR_RESULT__ERROR:
+				setError(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AnalysisPackage.ERROR_RESULT__ERROR_BY_TIME_STEP:
+				setErrorByTimeStep((EList<Double>)null);
+				return;
+			case AnalysisPackage.ERROR_RESULT__ERROR:
+				setError(ERROR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AnalysisPackage.ERROR_RESULT__ERROR_BY_TIME_STEP:
+				return errorByTimeStep != null;
+			case AnalysisPackage.ERROR_RESULT__ERROR:
+				return error != ERROR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (errorByTimeStep: ");
+		result.append(errorByTimeStep);
+		result.append(", error: ");
+		result.append(error);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ErrorResultImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ReferenceScenarioDataMapImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ReferenceScenarioDataMapImpl.java
new file mode 100644
index 0000000..dde8a59
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ReferenceScenarioDataMapImpl.java
@@ -0,0 +1,572 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.impl;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.DiseaseType;
+import org.eclipse.stem.analysis.ReferenceScenarioDataMap;
+import org.eclipse.stem.analysis.States;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Reference Scenario Data Map</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ReferenceScenarioDataMapImpl extends EObjectImpl implements ReferenceScenarioDataMap {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ReferenceScenarioDataMapImpl() {
+		super();
+		referenceScenarioDataMap = new HashMap<String, ReferenceScenarioDataInstance>();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AnalysisPackage.Literals.REFERENCE_SCENARIO_DATA_MAP;
+	}
+
+	public static final String ITERATION_KEY = "iteration";
+	/**
+	 * key for incidence data
+	 */
+	public static final String INCIDENCE_KEY = "Incidence";
+	public static final String TIME_KEY = "time";
+	private double maxIncidence = 0.0;
+	private String maxIncidenceLocation;
+	
+	
+	/**
+	 * A single Reference Scenario is stored in a map
+	 * for each  key<String> = Region id
+	 */
+	Map<String, ReferenceScenarioDataInstance> referenceScenarioDataMap = null;
+	
+	/**
+	 * Directory used
+	 */
+	
+	private String refDir;
+	
+	/**
+	 * Type of data (e.g. SIR)
+	 */
+	
+	DiseaseType type;
+	
+	/**
+	 * addInstance Add a new data instance (e.g. data from .csv file) to the map
+	 * 
+	 * @param key The key, e.g. city id
+	 * @param data ReferenceScenarioDataInstance 
+	 */
+	public void addInstance(String key, ReferenceScenarioDataInstance data) {
+		referenceScenarioDataMap.put(key, data);
+	}
+	
+	/**
+	 * 
+	 */
+	public void findMaxIncidence() {
+		Iterator<String> iter = referenceScenarioDataMap.keySet().iterator();
+		while((iter!=null)&&(iter.hasNext()) ) {
+			String key = iter.next();
+			ReferenceScenarioDataInstance data = referenceScenarioDataMap.get(key);
+			double count = getTotalIncidence(data);
+			if(count >= maxIncidence) {
+				maxIncidence = count;
+				maxIncidenceLocation = key;
+			}
+		}
+	}
+	
+	/**
+	 * Return the type of the data. Used to determine which parameter estimator(s)
+	 * can be used.
+	 * 
+	 * @return ParameterEstimator.Type The type, e.g. SEIR 
+	 */
+	
+	public DiseaseType getType() {
+		if(referenceScenarioDataMap == null || referenceScenarioDataMap.size() == 0) {
+			return null;
+		}
+		return this.type;
+	}
+	
+	/**
+	 * Set the type of the data
+	 * 
+	 * @param t New type 
+	 */
+	
+	public void setType(DiseaseType t) {
+		this.type = t;
+	}
+	
+	/**
+	 * getNumLocations. Return the number of locations analyzed
+	 * 
+	 * @return int Number of locations
+	 */
+	
+	public int getNumLocations() {
+		return referenceScenarioDataMap.size();
+	}
+	
+	/**
+	 * getLocations. Return the locations
+	 * 
+	 * @return Set<String> Set of all locations
+	 */
+	
+	public Set<String> getLocations() {
+		return referenceScenarioDataMap.keySet();
+	}
+	
+	
+	/**
+	 * The the total incidence (summing over all time for some location instance 
+	 * @param instance
+	 * @return the total Incidence count
+	 */
+	public double getTotalIncidence(ReferenceScenarioDataInstance instance) {
+		double retValue = 0.0;
+		if(instance.getData().containsKey(INCIDENCE_KEY)) {
+			List<Double> incidence = instance.getData().get(INCIDENCE_KEY);
+			for (int i = 0; i < incidence.size(); i ++) {
+				retValue += incidence.get(i).doubleValue();
+			}
+		}
+		return retValue;
+	}
+	
+	/**
+	 * containsLocation Return true if the map contains the specified location
+	 * 
+	 * @param loc
+	 * @return boolean True if the location is found in the map
+	 */
+	public boolean containsLocation(String loc) {
+		return referenceScenarioDataMap.containsKey(loc);
+	}
+	
+	/**
+	 * getLocation. Return the data for the given location
+	 * @param loc 
+	 * @return ReferenceScenarioDataInstance Location instance, or null if not found
+	 */
+	
+	public ReferenceScenarioDataInstance getLocation(String loc) {
+		return referenceScenarioDataMap.get(loc);
+	}
+	
+	/**
+	 * Aggregate or integrate all data for all locations in a scenario.
+	 * 
+	 * @param runnableContext Runnable context for progress indicator
+	 * @return ReferenceScenarioDataInstance aggregated data instance, or null if not found
+	 */
+	
+	public ReferenceScenarioDataInstance aggregateScenarioData(IRunnableContext runnableContext) {
+		final ReferenceScenarioDataInstance aggregatedData = new ReferenceScenarioDataInstance(this);
+		
+		IRunnableWithProgress aggregateTask = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Aggregating data...", referenceScenarioDataMap.size());   	
+            	Iterator<String> iter = referenceScenarioDataMap.keySet().iterator();
+            	while((iter!=null)&&(iter.hasNext())) {
+            		progress.worked(1);
+            		if(progress.isCanceled()) throw new OperationCanceledException();
+            		String loc = iter.next();
+			
+            		ReferenceScenarioDataInstance locationData = referenceScenarioDataMap.get(loc);
+            		aggregatedData.integrateData(locationData.instance);
+            	}// all locations
+            	progress.done();
+            }
+		};
+		
+		try {
+			runnableContext.run(true, true, aggregateTask);
+		} catch(InterruptedException ie) {
+			// ToDo
+			return null;
+		} catch(InvocationTargetException ite) {
+			// ToDo
+			return null;
+		}
+		return aggregatedData;
+	}
+	
+	/**
+	 * getReferenceDirectory. Return the reference directory used
+	 * 
+	 * @return String Reference directory
+	 */
+	
+	public String getReferenceDirectory() {
+		return this.refDir;
+	}
+	
+	/**
+	 * setReferenceDirectoy. Set the reference directory
+	 * 
+	 * @param dir The directory
+	 */
+	
+	public void setReferenceDirectory(String d) {
+		this.refDir = d;
+	}
+	
+	/**
+	 * 
+	 * @return the max incidence at the most effected location 
+	 */
+	public double getMaxIncidence() {
+		return maxIncidence;
+	}
+
+	/**
+	 * 
+	 * @return the location with the max incidence
+	 */
+	public String getMaxIncidenceLocation() {
+		return maxIncidenceLocation;
+	}
+	
+	
+	/**
+	 * ReferenceScenarioDataInstance. Contains data for one location  
+	
+	 */
+	public class ReferenceScenarioDataInstance implements Cloneable {
+		
+		private double maxS = 0.0;
+		private double maxE = 0.0;
+		private double maxI = 0.0;
+		private double maxR = 0.0;
+			
+		
+
+		/**
+		 * The region data map is keyed by property (S,E, I, R, incidence, etc) and contains Data (mostly Doubles but
+		 * STEMTime is stored as a String) so all data is stored as String.
+		 */
+		
+		public Map<String,List<String>> instance;
+		
+		
+
+		protected ReferenceScenarioDataMapImpl dataMap;
+		
+		/**
+		 * Create a new instance
+		 *  
+		 * @param data Map of parameter (e.g. a state) and its values
+		 * @param map DataMap the instance belongs to
+		 */
+		public ReferenceScenarioDataInstance(Map<String, List<String>> data, ReferenceScenarioDataMapImpl map) {
+			this.instance = data;
+			this.dataMap = map;
+		}
+		
+		/**
+		 * Create an empty instance of some type
+		 *  
+		 * @param dataMap map
+		 */
+		public ReferenceScenarioDataInstance(ReferenceScenarioDataMapImpl dataMap) {
+			this.instance = new HashMap<String, List<String>>();
+			this.dataMap = dataMap;
+		}
+		
+		/**
+		 * deep clone
+		 * @see java.lang.Object#clone()
+		 */
+		@Override
+		public  ReferenceScenarioDataInstance clone() {
+			this.getData();
+			ReferenceScenarioDataInstance newInstance = new ReferenceScenarioDataInstance(this.dataMap);
+			Iterator<String> iter = this.instance.keySet().iterator();
+			while(iter.hasNext()) {
+				String key = iter.next();
+				List<String> dataList = instance.get(key);
+				List<String> newList = new ArrayList<String>();
+			
+				for (int i = 0; i < dataList.size(); i ++) {
+					String val = dataList.get(i);
+					newList.add(val);
+				}
+				newInstance.instance.put(key,newList);
+			}
+			newInstance.getData();
+			return newInstance;
+		}
+		
+		/**
+		 * integrates data from another instance
+		 * @param data
+		 */
+		public void integrateData(Map<String, List<String>> data) {
+			// get the state variables SEIR... as keys
+			Iterator<String> iter = data.keySet().iterator();
+			while((iter!=null)&&(iter.hasNext())) {
+				// get the key
+				String state = iter.next();
+				
+				List<String> valueList = data.get(state);
+				if(valueList.size()>=1) {
+					// get the current list
+					List<String> aggregatedList = new ArrayList<String>();
+					if(this.instance.containsKey(state)) {
+						aggregatedList = this.instance.get(state);
+					} else {
+						// create it if it doesn't exist
+						for(int i = 0; i < valueList.size(); i ++) {
+							aggregatedList.add("0.0");
+						}
+						this.instance.put(state,aggregatedList);
+					}
+					
+					
+					
+					String first = valueList.get(0);
+					// check if this is numeric data - it might just be a date
+					boolean isData = true;
+					try {
+						@SuppressWarnings("unused")
+						double val = (new Double(first)).doubleValue();
+					} catch (NumberFormatException nfe) {
+						isData = false;
+					}
+					for (int i = 0; i < valueList.size(); i ++) {
+						String value = valueList.get(i);
+						if(isData) {
+							double val = (new Double(value)).doubleValue();
+							double oldVal = (new Double(aggregatedList.get(i))).doubleValue();
+							if(state.indexOf(ITERATION_KEY)==-1) {
+								// add them up except for the iteration counter column
+								oldVal += val;
+							} else {
+								oldVal = val;
+							}
+							aggregatedList.set(i,""+oldVal);
+							this.instance.put(state,aggregatedList);
+						} else {
+							// just copy the strings
+							aggregatedList.set(i,value);
+							this.instance.put(state,aggregatedList);
+						}
+					}
+					
+					
+				}
+				
+				
+			}
+			
+			
+		}
+		
+		
+		/**
+		 * getData. Return data for the given parameter (e.g. state)
+		 * 
+		 * @param parm Parameter
+		 * @return List<String> data
+		 */
+		
+		public List<String> getData(String parm) {
+			return instance.get(parm);
+		}
+		
+		/**
+		 * containsParameter. Return true if the data contains the given parameter (e.g. a state)
+		 * 
+		 * @param p Parameter to check
+		 * @return boolean true if found, false otherwise
+		 */
+		
+		public boolean containsParameter(String p) {
+			return this.instance.containsKey(p);
+		}
+		
+		/**
+		 * get the all the data
+		 * @return this instance map
+		 */
+		public Map<String, List<String>> getInstance() {
+			return instance;
+		}
+		
+		/**
+		 * find the maximum values for every state
+		 */
+		public void findMaxValues() {
+			
+					// Get the data. Always have at least S and I
+					List<String>sData = this.getData(States.statesToFit[States.SUSCEPTIBLE]);
+					List<String>eData = null;
+					List<String>iData = this.getData(States.statesToFit[States.INFECTIOUS]);
+					List<String>rData = null;
+					
+					// If E state
+        			if(this.dataMap.getType()== DiseaseType.SEIR)  {
+        				eData = this.getData(States.statesToFit[States.EXPOSED]);
+        			}
+        			// If have R state (i.e., not an SI model
+        			if(this.dataMap.getType()!= DiseaseType.SI)  {
+        				rData = this.getData(States.statesToFit[States.RECOVERED]);
+        			}
+					
+					   
+        			
+        			// if we have an S state
+        			if(sData != null) {
+        				maxS = new Double(sData.get(0)).doubleValue();
+            			for(int i = 0; i < sData.size(); i ++) {
+            				double val = new Double(sData.get(i)).doubleValue();
+            				if (val > maxS) {
+            					maxS = val;
+            				}
+            			}
+        			}// if have S state
+        			
+        			// if we have an E state
+        			if(eData != null) {
+        				maxE = new Double(eData.get(0)).doubleValue();
+            			for(int i = 0; i < eData.size(); i ++) {
+            				double val = new Double(eData.get(i)).doubleValue();
+            				if (val > maxE) {
+            					maxE = val;
+            				}
+            			}
+        			}// if have E state
+        			
+        			// if we have an I state
+        			if(iData != null) {
+        				maxI = new Double(iData.get(0)).doubleValue();
+            			for(int i = 0; i < iData.size(); i ++) {
+            				double val = new Double(iData.get(i)).doubleValue();
+            				if (val > maxI) {
+            					maxI = val;
+            				}
+            			}
+        			}// if have I state
+        			
+        			// if we have an R state
+        			if(rData != null) {
+        				maxR = new Double(rData.get(0)).doubleValue();
+            			for(int i = 0; i < rData.size(); i ++) {
+            				double val = new Double(rData.get(i)).doubleValue();
+            				if (val > maxR) {
+            					maxR = val;
+            				}
+            			}
+        			}// if have R state
+        			
+		} // findMaxValues
+		
+		
+		
+		/**
+		 * getData. Return the map that of raw data (not filtered)
+		 * @return  Map<String, List<Double>> Map with state, value list
+		 */
+		@SuppressWarnings("boxing")
+		public Map<String, List<Double>> getData() {
+			
+			HashMap<String, List<Double>> data = new HashMap<String, List<Double>>();
+			
+			for(String state : instance.keySet()) {
+				ArrayList<Double> list = new ArrayList<Double>();
+				if(state.equalsIgnoreCase("time"))continue;
+				for(String sd : instance.get(state)) 
+					list.add(Double.parseDouble(sd));
+				data.put(state, list);
+			}
+			return data;
+		}
+		
+		/**
+		 * 
+		 * @return maxS
+		 */
+		public double getMaxS() {
+			return maxS;
+		}
+
+		/**
+		 * 
+		 * @return maxE
+		 */
+		public double getMaxE() {
+			return maxE;
+		}
+
+		/**
+		 * 
+		 * @return maxI
+		 */
+		public double getMaxI() {
+			return maxI;
+		}
+
+		/**
+		 * 
+		 * @return maxR
+		 */
+		public double getMaxR() {
+			return maxR;
+		}
+		
+		/**
+		 * getSize. Return the number of data rows in the instance. Each array (value) is assumed same size
+		 * 
+		 * @return int The size of the 
+		 */
+		
+		public int getSize() {
+			if(this.instance.size() == 0) return 0;
+			return this.instance.values().iterator().next().size();
+		}
+	}
+} //ReferenceScenarioDataMapImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/SimpleErrorFunctionImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/SimpleErrorFunctionImpl.java
new file mode 100644
index 0000000..1df44d8
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/SimpleErrorFunctionImpl.java
@@ -0,0 +1,221 @@
+package org.eclipse.stem.analysis.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ReferenceScenarioDataMap;
+import org.eclipse.stem.analysis.SimpleErrorFunction;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Simple Error Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class SimpleErrorFunctionImpl extends ErrorFunctionImpl implements SimpleErrorFunction {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SimpleErrorFunctionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AnalysisPackage.Literals.SIMPLE_ERROR_FUNCTION;
+	}
+
+	/**
+	 * input
+	 */
+	Map<String,List<Double>> commonInfectiousLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonInfectiousLocationsB = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonPopulationLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonPopulationLocationsB = new HashMap<String,List<Double>>();
+
+	Map<String,Double> commonAvgPopulationLocationsA = new HashMap<String,Double>();
+	Map<String,Double> commonAvgPopulationLocationsB = new HashMap<String,Double>();
+
+	/**
+	 * number common locations with nonzero Inf count at time t
+	 */
+	public double[] locationCount;
+	/**
+	 * The Result
+	 */
+	public double[] meanSqDiff;
+	/*
+	 * time
+	 */
+	public double[] time;
+	
+	protected AnalysisFactory aFactory = new AnalysisFactoryImpl();
+
+	// Set to true to weight the average by population size
+	private static boolean WEIGHTED_AVERAGE = true;
+	private static boolean FIT_INCIDENCE = true;
+	
+	/**
+	 * calculate delta for a simple error function
+	 * 
+	 * 
+	 * @override
+	 */
+	
+	@Override
+	public ErrorResult calculateError(ReferenceScenarioDataMap reference, ReferenceScenarioDataMap data) {
+		final ReferenceScenarioDataMapImpl _ref = (ReferenceScenarioDataMapImpl)reference;
+		final ReferenceScenarioDataMapImpl _data = (ReferenceScenarioDataMapImpl)data;
+
+		// clear
+		time = null;
+		
+		Iterator<String> iteratorA = _ref.getLocations().iterator();
+		int maxTime = -1;
+		while(iteratorA.hasNext()) {
+			String id = iteratorA.next();
+					
+			if(_data.containsLocation(id)) {
+				// get the lists of data only for those locations that are common to both maps						ReferenceScenarioDataInstance dataMapA = mapA.getLocation(id);
+				ReferenceScenarioDataInstance dataMapA = _ref.getLocation(id);
+				List<Double> dataAI = null;
+				if(FIT_INCIDENCE) dataAI = getIncidence(dataMapA); 
+				else dataAI = getInfectious(dataMapA);
+				List<Double> dataAP = getPopulation(dataMapA);
+				commonInfectiousLocationsA.put(id,dataAI);
+				commonPopulationLocationsA.put(id, dataAP);							
+							
+				// Map B
+				ReferenceScenarioDataInstance dataMapB = _data.getLocation(id);
+				List<Double> dataBI = null;
+				if(FIT_INCIDENCE) dataBI = getIncidence(dataMapB); 
+				else dataBI = getInfectious(dataMapB);
+				List<Double> dataBP = getPopulation(dataMapB);
+				commonInfectiousLocationsB.put(id,dataBI);
+				commonPopulationLocationsB.put(id, dataBP);
+				
+				// init the array size
+				if (maxTime == -1) maxTime = dataAI.size();
+						
+				// dimension the arrays to the length of the SMALLEST array for which we have data
+				if(maxTime >= dataBI.size() ) maxTime = dataBI.size();
+				if(maxTime >= dataAI.size() ) maxTime = dataAI.size();
+			}// if
+		}// while
+		if(maxTime<=0) maxTime = 0;
+		if(time==null) {
+			time = new double[maxTime];
+			meanSqDiff = new double[maxTime];
+			locationCount = new double[maxTime];
+			for(int i = 0; i < maxTime; i ++) {
+				time[i] = i;
+				meanSqDiff[i] = 0.0;
+				locationCount[i] = 0.0;
+			}
+		}
+		
+		// Now figure out the actual error
+		
+		double [] Xref = new double[time.length];
+		double [] Xdata = new double[time.length];
+		double [] nrmse_loc = new double[commonInfectiousLocationsA.keySet().size()];  
+		
+		double finalerror = 0.0;
+		BasicEList<Double> list = new BasicEList<Double>();
+		for(int i=0;i<time.length;++i)list.add(0.0);
+		
+		// Get the average population for each location
+		for(String loc:commonPopulationLocationsA.keySet()) {
+			List<Double>ld = commonPopulationLocationsA.get(loc);
+			double sum = 0;for(double d:ld)sum+=d;
+			sum /= (double)ld.size();
+			commonAvgPopulationLocationsA.put(loc, sum);
+		}		
+
+		// Get the average population for each location
+		for(String loc:commonPopulationLocationsB.keySet()) {
+			List<Double>ld = commonPopulationLocationsB.get(loc);
+			double sum = 0;for(double d:ld)sum+=d;
+			sum /= (double)ld.size();
+			commonAvgPopulationLocationsB.put(loc, sum);
+		}		
+
+		// Calculate the normalized root mean square error for each location, then
+		// divide by the number of locatins
+		
+		double weighted_denom = 0.0;
+		
+		int loc_iter = 0;
+		for(String loc:commonInfectiousLocationsA.keySet()) {
+			double maxRef = 0.0;
+			double minRef = Double.MAX_VALUE;
+			// Get the numbers at each time step for the location
+			for(int icount =0; icount < time.length; icount ++) {
+				List<Double> dataAI = commonInfectiousLocationsA.get(loc);
+				List<Double> dataBI = commonInfectiousLocationsB.get(loc);
+												
+				double iA = dataAI.get(icount).doubleValue();
+				double iB = dataBI.get(icount).doubleValue();
+			
+				Xref[icount]=iA;
+				Xdata[icount]=iB;
+			}
+		
+			double nominator = 0.0; 
+			for(int icount =0; icount < time.length; icount ++) {
+				nominator = nominator + Math.pow(Xref[icount]-Xdata[icount], 2);
+				if(Xref[icount]>maxRef)maxRef = Xref[icount];
+				if(Xref[icount]<minRef)minRef = Xref[icount];
+				list.set(icount, list.get(icount)+Math.abs(Xref[icount]-Xdata[icount]));
+			}
+		
+			double error =  Math.sqrt(nominator/(double)time.length);
+			error = error / (maxRef-minRef);
+			if(WEIGHTED_AVERAGE) finalerror += commonAvgPopulationLocationsA.get(loc) * error;
+			else finalerror += error;
+			weighted_denom += commonAvgPopulationLocationsA.get(loc);
+			nrmse_loc[loc_iter++] = error;
+		
+		}
+		
+		// Divide the error by the number of locations
+		if(WEIGHTED_AVERAGE) finalerror /= weighted_denom; 
+		else finalerror /= (double)nrmse_loc.length;
+		
+		ErrorResult resultobj = aFactory.createErrorResult();
+		resultobj.setErrorByTimeStep(list);
+		resultobj.setError(finalerror);
+		
+		return resultobj;	
+	}
+} //SimpleErrorFunctionImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ThresholdErrorFunctionImpl.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ThresholdErrorFunctionImpl.java
new file mode 100644
index 0000000..ae4a1a9
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/impl/ThresholdErrorFunctionImpl.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.AnalysisPackage;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ReferenceScenarioDataMap;
+import org.eclipse.stem.analysis.ThresholdErrorFunction;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Threshold Error Function</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ThresholdErrorFunctionImpl extends ErrorFunctionImpl implements ThresholdErrorFunction {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ThresholdErrorFunctionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AnalysisPackage.Literals.THRESHOLD_ERROR_FUNCTION;
+	}
+
+	/**
+	 * Timeseries data for both data sets with common locations
+	 */
+	Map<String,List<Double>> commonInfectiousLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonInfectiousLocationsB = new HashMap<String,List<Double>>();
+
+	/**
+	 * Max infectious per location
+	 */
+	Map<String,Double> maxInfA = new HashMap<String,Double>();
+	Map<String,Double> maxInfB = new HashMap<String,Double>();
+	
+	/**
+	 * The Result
+	 */
+	public double[] meanSqDiff;
+	
+	/*
+	 * time
+	 */
+	public double[] time;
+	
+	protected AnalysisFactory aFactory = new AnalysisFactoryImpl();
+
+	// This is the threshold of the maximum peak for both data sets
+	// where we consider the error
+	
+	protected static double THRESHOLD = 0.1;
+	
+	/**
+	 * calculate delta for a threshold error function
+	 * 
+	 * 
+	 * @override
+	 */
+	
+	public ErrorResult calculateError(ReferenceScenarioDataMap reference, ReferenceScenarioDataMap data) {
+		final ReferenceScenarioDataMapImpl _ref = (ReferenceScenarioDataMapImpl)reference;
+		final ReferenceScenarioDataMapImpl _data = (ReferenceScenarioDataMapImpl)data;
+
+		double denominator = 0.0;
+		// Clear
+		time = null;
+		
+		Iterator<String> iteratorA = _ref.getLocations().iterator();
+		int maxTime = -1;
+		while(iteratorA.hasNext()) {
+			String id = iteratorA.next();
+					
+			if(_data.containsLocation(id)) {
+				// get the lists of data only for those locations that are common to both maps						ReferenceScenarioDataInstance dataMapA = mapA.getLocation(id);
+				ReferenceScenarioDataInstance dataMapA = _ref.getLocation(id);
+				List<Double> dataAI = getInfectious(dataMapA);
+			
+				commonInfectiousLocationsA.put(id,dataAI);
+												
+				// Map B
+				ReferenceScenarioDataInstance dataMapB = _data.getLocation(id);
+				List<Double> dataBI = getInfectious(dataMapB);
+				commonInfectiousLocationsB.put(id,dataBI);
+												
+				// Find the peak in both data sets and remember. It will be used
+				// to determine the threshold
+				
+				double maxA = -1;
+				for(double d : dataAI) if(d > maxA) maxA = d;
+				
+				double maxB = -1;
+				for(double d : dataBI) if(d > maxB) maxB = d;
+	
+				maxInfA.put(id, maxA);
+				maxInfB.put(id, maxB);
+				
+				// init the array size
+				if (maxTime == -1) maxTime = dataAI.size();
+						
+				// dimension the arrays to the length of the SMALLEST array for which we have data
+				if(maxTime >= dataBI.size() ) maxTime = dataBI.size();
+				if(maxTime >= dataAI.size() ) maxTime = dataAI.size();
+			}// if
+		}// while
+		if(maxTime<=0) maxTime = 0;
+		if(time==null) {
+			time = new double[maxTime];
+			meanSqDiff = new double[maxTime];
+			for(int i = 0; i < maxTime; i ++) {
+				time[i] = i;
+				meanSqDiff[i] = 0.0;
+			}
+		}
+		
+		// Now figure out the actual error
+		
+		double[] maxPopulation = new double[time.length];
+
+		for(int icount =0; icount < time.length; icount ++) {
+			maxPopulation[icount] = 0.0;
+			Iterator<String> iter = commonInfectiousLocationsA.keySet().iterator();
+			////////////////////////
+			// all locations
+			while(iter.hasNext()) {
+				String id = iter.next();
+				List<Double> dataAI = commonInfectiousLocationsA.get(id);
+				List<Double> dataBI = commonInfectiousLocationsB.get(id);
+												
+				double iA = dataAI.get(icount).doubleValue();
+				double iB = dataBI.get(icount).doubleValue();
+		
+				// double denom = (iA+iB)/2.0;
+				// square of the average fraction of infectious people
+				// denom *= denom;
+				double maxA = maxInfA.get(id);
+				double maxB = maxInfB.get(id);
+
+				if ((iA > maxA*THRESHOLD) || (iB > maxB*THRESHOLD)) {
+					// we have a location with nonzero data
+					// square of the DIFFERENCE
+							
+					// Changed 2/4/09. Drop the S data comparison
+					//double term = ((iA - iB) * (iA - iB))
+					//		+ ((sA - sB) * (sA - sB));
+							
+					double term = Math.abs(iA - iB);
+					meanSqDiff[icount] += term;
+					if(iA > iB) denominator+= iA; else denominator+= iB; 
+				}					
+			}// all locations
+				
+            ////////////////////////
+	
+		}// for all time
+		
+		
+		// Sum all errors and divide by time
+		
+		double result = 0.0;
+		BasicEList<Double> list = new BasicEList<Double>();
+		for(int i=0;i<time.length;++i) {
+			meanSqDiff[i] = meanSqDiff[i] / denominator;
+			result += meanSqDiff[i];
+			list.add(meanSqDiff[i]);
+		}
+		
+		ErrorResult resultobj = aFactory.createErrorResult();
+		resultobj.setErrorByTimeStep(list);
+		resultobj.setError(result);
+		return resultobj;	
+	}
+	
+} //ThresholdErrorFunctionImpl
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisAdapterFactory.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisAdapterFactory.java
new file mode 100644
index 0000000..8602374
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisAdapterFactory.java
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.analysis.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.analysis.AnalysisPackage
+ * @generated
+ */
+public class AnalysisAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static AnalysisPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnalysisAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = AnalysisPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AnalysisSwitch<Adapter> modelSwitch =
+		new AnalysisSwitch<Adapter>() {
+			@Override
+			public Adapter caseErrorFunction(ErrorFunction object) {
+				return createErrorFunctionAdapter();
+			}
+			@Override
+			public Adapter caseThresholdErrorFunction(ThresholdErrorFunction object) {
+				return createThresholdErrorFunctionAdapter();
+			}
+			@Override
+			public Adapter caseReferenceScenarioDataMap(ReferenceScenarioDataMap object) {
+				return createReferenceScenarioDataMapAdapter();
+			}
+			@Override
+			public Adapter caseSimpleErrorFunction(SimpleErrorFunction object) {
+				return createSimpleErrorFunctionAdapter();
+			}
+			@Override
+			public Adapter caseErrorResult(ErrorResult object) {
+				return createErrorResultAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.analysis.ErrorFunction <em>Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.analysis.ErrorFunction
+	 * @generated
+	 */
+	public Adapter createErrorFunctionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.analysis.ThresholdErrorFunction <em>Threshold Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.analysis.ThresholdErrorFunction
+	 * @generated
+	 */
+	public Adapter createThresholdErrorFunctionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.analysis.ReferenceScenarioDataMap <em>Reference Scenario Data Map</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.analysis.ReferenceScenarioDataMap
+	 * @generated
+	 */
+	public Adapter createReferenceScenarioDataMapAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.analysis.SimpleErrorFunction <em>Simple Error Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.analysis.SimpleErrorFunction
+	 * @generated
+	 */
+	public Adapter createSimpleErrorFunctionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.analysis.ErrorResult <em>Error Result</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.analysis.ErrorResult
+	 * @generated
+	 */
+	public Adapter createErrorResultAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //AnalysisAdapterFactory
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisSwitch.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisSwitch.java
new file mode 100644
index 0000000..d1d795e
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/AnalysisSwitch.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.analysis.util;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.analysis.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.analysis.AnalysisPackage
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AnalysisSwitch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static AnalysisPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnalysisSwitch() {
+		if (modelPackage == null) {
+			modelPackage = AnalysisPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case AnalysisPackage.ERROR_FUNCTION: {
+				ErrorFunction errorFunction = (ErrorFunction)theEObject;
+				T result = caseErrorFunction(errorFunction);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AnalysisPackage.THRESHOLD_ERROR_FUNCTION: {
+				ThresholdErrorFunction thresholdErrorFunction = (ThresholdErrorFunction)theEObject;
+				T result = caseThresholdErrorFunction(thresholdErrorFunction);
+				if (result == null) result = caseErrorFunction(thresholdErrorFunction);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AnalysisPackage.REFERENCE_SCENARIO_DATA_MAP: {
+				ReferenceScenarioDataMap referenceScenarioDataMap = (ReferenceScenarioDataMap)theEObject;
+				T result = caseReferenceScenarioDataMap(referenceScenarioDataMap);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AnalysisPackage.SIMPLE_ERROR_FUNCTION: {
+				SimpleErrorFunction simpleErrorFunction = (SimpleErrorFunction)theEObject;
+				T result = caseSimpleErrorFunction(simpleErrorFunction);
+				if (result == null) result = caseErrorFunction(simpleErrorFunction);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AnalysisPackage.ERROR_RESULT: {
+				ErrorResult errorResult = (ErrorResult)theEObject;
+				T result = caseErrorResult(errorResult);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Error Function</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseErrorFunction(ErrorFunction object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Threshold Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Threshold Error Function</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseThresholdErrorFunction(ThresholdErrorFunction object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Reference Scenario Data Map</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Reference Scenario Data Map</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseReferenceScenarioDataMap(ReferenceScenarioDataMap object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Simple Error Function</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Simple Error Function</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSimpleErrorFunction(SimpleErrorFunction object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Error Result</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Error Result</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseErrorResult(ErrorResult object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //AnalysisSwitch
diff --git a/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/CSVscenarioLoader.java b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/CSVscenarioLoader.java
new file mode 100644
index 0000000..369345b
--- /dev/null
+++ b/org.eclipse.stem.analysis/src/org/eclipse/stem/analysis/util/CSVscenarioLoader.java
@@ -0,0 +1,771 @@
+/**
+ * 
+ */
+package org.eclipse.stem.analysis.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.analysis.Activator;
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.DiseaseType;
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.analysis.impl.AnalysisFactoryImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+
+/**
+* Load a disease scenario 
+*
+*/
+
+public class CSVscenarioLoader {
+	
+	private String directory="";
+	
+	
+	private static final String CSV_EXTENSION = ".csv";
+	
+	private List<File> diseaseData = new ArrayList<File>();
+	private final Map<String, String> runParameters = new HashMap<String, String>();
+	
+	/**
+	 * Name of all run parameter files (one per disease folder
+	 */
+	public static final String RUN_PARAMETER_FILE_NAME = "runparameters.csv";
+	public static final String RUN_PARAMETER_FILE_NAME_OLD = "runparamters.csv";
+		
+	private AnalysisFactory aFactory = new AnalysisFactoryImpl();
+	
+	/**
+	 * This class loads data from a folder containing a saved scenario run data for
+	 * a particular disease instance
+	 * The data in the folder is a set of csv files, one per disease state
+	 * 
+	 * @param diseaseDirectory Directory containing disease data 
+	 * @throws ScenarioInitializationException
+	 */
+	public CSVscenarioLoader(String diseaseDirectory) throws ScenarioInitializationException {
+		directory = diseaseDirectory;
+		diseaseData = this.getDataFiles();
+	}
+
+	/**
+	 * Empty constructor used when parsing a single file, e.g. an aggregate file
+	 */
+	public CSVscenarioLoader() {
+		// Empty
+	}
+	
+	
+	/**
+	 * read all the data files in a scenario folder
+	 * filter to return just the csv files with data
+	 * @return
+	 */
+	private List<File> getDataFiles() throws ScenarioInitializationException {
+		List<File> dataFiles = new ArrayList<File>();
+		File[] files = new File[0];
+		File dir = new File(directory);
+		if(dir.exists()&&dir.isDirectory()) {
+			files = dir.listFiles();
+		} else throw new ScenarioInitializationException("Cannot find file: "+dir);
+		
+		for (int i = 0; i < files.length; i ++)  {
+			File f = files[i];
+			if (this.isDataFile(f)) dataFiles.add(f);
+			if (this.isRunParameterFile(f)) readRunParameters(f);
+		}
+		if(dataFiles.size() == 0) throw new ScenarioInitializationException("No data files found!");
+		
+		return dataFiles;
+	}// getDataFiles
+	
+	/**
+	 * 
+	 * @param directory
+	 * @return true is a data directory exists
+	 */
+	public static boolean validate(String directory) {
+		File file = new File(directory);
+		return file.exists();
+	}
+	
+	/**
+	 * test file name to see if it is a data file. Must have extension .txt or .csv
+	 * must not be the runparameters summary file.
+	 * @param file
+	 * @return true if data file
+	 */
+	private boolean isDataFile(File file) {
+		boolean retVal = true;
+		String name = file.getName();
+		if(name.indexOf(RUN_PARAMETER_FILE_NAME)>= 0 || name.indexOf(RUN_PARAMETER_FILE_NAME_OLD) >= 0) retVal = false;
+		if(name.indexOf(CSV_EXTENSION) < 0) retVal = false;
+		return retVal;
+	}
+	/**
+	 * test file name to see if it is the RunParamtersFile
+	 * @param file
+	 * @return true if data file
+	 */
+	private boolean isRunParameterFile(File file) {
+		boolean retVal = false;
+		String name = file.getName();
+		if(name.indexOf(RUN_PARAMETER_FILE_NAME)>= 0 || name.indexOf(RUN_PARAMETER_FILE_NAME_OLD)>= 0) retVal = true;
+		return retVal;
+	}
+	
+	/**
+	 * read the run parameters file created when running an Experiment
+	 * @param file
+	 */
+	private void readRunParameters(File file) {
+
+		try {
+			BufferedReader fileReader = new BufferedReader(new FileReader(file));
+
+			if (fileReader != null) {
+				String buffer = null;
+				StringTokenizer headers = null;
+				StringTokenizer vals = null;
+				int line = 0;
+				while (EOF(buffer = fileReader.readLine()) != true) {
+					if(line == 0) headers = new StringTokenizer(buffer, ",");
+					else vals = new StringTokenizer(buffer, ",");
+					++line;
+				}
+				while(headers.hasMoreTokens()) {
+					String val = null;
+					try {
+						val = vals.nextToken();
+					} catch(NoSuchElementException e) {
+						Activator.logError("Mismatch between columns and values in run parameter file", e);
+						return;
+					}
+					
+					runParameters.put(headers.nextToken(), val);
+				}
+			}
+		} catch (FileNotFoundException fnfe) {
+			Activator
+					.logError(
+							"CVSscenarioLoader.readRunParametersFile() run parameters file not found: ",
+							fnfe);
+		} catch (IOException ioe) {
+			Activator.logError(
+					"CVSscenarioLoader.readRunParametersFile() io exception: ",
+					ioe);
+		}
+	}// readRunParameters
+	
+	/**
+	 * A single Reference Scenario is stored in a map
+	 * for each  key<String> = Region id
+	 * the Map contains a Map of data per region.
+	 * The region data map is keyed by property (S,E, I, R, etc) and contains Data (mostly Doubles but
+	 * STEMTime is stored as a String) so all data is stored as String.
+	 * @param filterSet 
+	 * @param resolution Which map resolution to load, -1 if all
+	 * @return the ReferenceScenarioDataMap object
+	 * @throws ScenarioInitializationException 
+	 */
+	
+    public ReferenceScenarioDataMapImpl parseAllFiles(Set<String> filterSet, int resolution) throws ScenarioInitializationException {
+		ReferenceScenarioDataMapImpl scenarioDataMap = (ReferenceScenarioDataMapImpl)aFactory.createReferenceScenarioDataMap();
+		ArrayList<String>states = new ArrayList<String>(); // keeps track of the states seen 
+		for(int i = 0; i < diseaseData.size(); i ++) {
+			File f = diseaseData.get(i);
+			String name = f.getName();
+			int _idx = name.lastIndexOf('_');
+			int dotidx = name.lastIndexOf('.');
+			if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+			String state = name.substring(0, _idx);
+			if(!states.contains(state)) states.add(state);
+			int res = Integer.parseInt(name.substring(_idx+1, dotidx));
+			if(resolution != -1 && res != resolution) continue; // wrong resolution
+			processAndFilterFiles(filterSet, scenarioDataMap, state, f);
+		}
+		scenarioDataMap.setReferenceDirectory(directory);
+		
+		DiseaseType type;
+		
+		if(states.contains("S") &&
+			states.contains("E") &&
+			states.contains("I") &&
+			states.contains("R")) 
+				type = DiseaseType.SEIR;
+		else  if(states.contains("S") &&
+			states.contains("I") &&
+			states.contains("R"))
+			type = DiseaseType.SIR;
+		 else if(states.contains("S") &&
+			 states.contains("I"))
+			 type = DiseaseType.SI;
+		else {
+		  throw new ScenarioInitializationException("Disease type not recognized in directory: "+this.directory);
+		}
+		scenarioDataMap.setType(type);
+		return scenarioDataMap;
+	}
+    
+    /**
+	 * A single Reference Scenario is stored in a map
+	 * for each  key<String> = Region id
+	 * the Map contains a Map of data per region.
+	 * The region data map is keyed by property (S,E, I, R, etc) and contains Data (mostly Doubles but
+	 * STEMTime is stored as a String) so all data is stored as String.
+	 * 
+	 * @param resolution Which map resolution to load, -1 if all
+	 * @return the ReferenceScenarioDataMap object
+	 * @throws ScenarioInitializationException 
+	 */
+	
+    public ReferenceScenarioDataMapImpl parseAllFiles(int resolution) throws ScenarioInitializationException {
+    	ReferenceScenarioDataMapImpl scenarioDataMap = (ReferenceScenarioDataMapImpl)aFactory.createReferenceScenarioDataMap();
+		ArrayList<String>states = new ArrayList<String>(); // keeps track of the states seen 
+		for(int i = 0; i < diseaseData.size(); i ++) {
+			File f = diseaseData.get(i);
+			String name = f.getName();
+			int _idx = name.lastIndexOf('_');
+			int dotidx = name.lastIndexOf('.');
+			if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+			String state = name.substring(0, _idx);
+			if(!states.contains(state)) states.add(state);
+			int res = Integer.parseInt(name.substring(_idx+1, dotidx));
+			if(resolution != -1 && res != resolution) continue; // wrong resolution
+			processFile(scenarioDataMap, state, f);
+		}
+		scenarioDataMap.setReferenceDirectory(directory);
+		
+		DiseaseType type;
+		
+		if(states.contains("S") &&
+			states.contains("E") &&
+			states.contains("I") &&
+			states.contains("R")) 
+				type = DiseaseType.SEIR;
+		else  if(states.contains("S") &&
+			states.contains("I") &&
+			states.contains("R"))
+			type = DiseaseType.SIR;
+		 else if(states.contains("S") &&
+			 states.contains("I"))
+			 type = DiseaseType.SI;
+		else {
+		  throw new ScenarioInitializationException("Disease type not recognized in directory: "+this.directory);
+		}
+		scenarioDataMap.setType(type);
+		return scenarioDataMap;
+	}
+	
+    /**
+     * Read scenario for all resolutions available
+     * 
+     * @return ReferenceScenarioDataMap Map with all nodes loaded
+     * @throws ScenarioInitializationException
+     */
+    
+    public ReferenceScenarioDataMapImpl parseAllFiles() throws ScenarioInitializationException {
+    	return this.parseAllFiles(null, -1);
+    }
+    
+    /**
+	 * Return the type of the logged data.
+	 * 
+	 * @return ParameterEstimator.Type The type of the data
+	 * @throws ScenarioInitializationException If the type is not recognized
+	 */
+	
+    public DiseaseType getType() throws ScenarioInitializationException {
+		ArrayList<String>states = new ArrayList<String>(); // keeps track of the states seen 
+		for(int i = 0; i < diseaseData.size(); i ++) {
+			File f = diseaseData.get(i);
+			String name = f.getName();
+			int _idx = name.lastIndexOf('_');
+			int dotidx = name.lastIndexOf('.');
+			if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+			String state = name.substring(0, _idx);
+			if(!states.contains(state)) states.add(state);
+		}
+		
+		DiseaseType type;
+		
+		if(states.contains("S") &&
+			states.contains("E") &&
+			states.contains("I") &&
+			states.contains("R")) 
+				type = DiseaseType.SEIR;
+		else  if(states.contains("S") &&
+			states.contains("I") &&
+			states.contains("R"))
+			type = DiseaseType.SIR;
+		 else if(states.contains("S") &&
+			 states.contains("I"))
+			 type = DiseaseType.SI;
+		else {
+		  throw new ScenarioInitializationException("Disease type not recognized in directory: "+this.directory);
+		}
+		return type;
+	}
+    
+    /**
+	 * Retrieve resolutions available in the disease folder
+	 * 
+	 * @return ArrayList<Integer> Available resolutions
+	 */
+	
+    @SuppressWarnings("boxing")
+	public ArrayList<Integer> getResolutions() {
+    	ArrayList<Integer> result = new ArrayList<Integer>();
+    	
+		for(int i = 0; i < diseaseData.size(); i ++) {
+			File f = diseaseData.get(i);
+			String name = f.getName();
+			int _idx = name.lastIndexOf('_');
+			int dotidx = name.lastIndexOf('.');
+			if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+			int res = Integer.parseInt(name.substring(_idx+1, dotidx));
+			if(!result.contains(res)) result.add(res);
+			
+		}
+		return result;
+	}
+    
+    /**
+	 * Retrieve resolutions available in the disease folder
+	 * 
+	 * @return ArrayList<Integer> Available resolutions
+	 */
+	
+	public int getMaxResolution() {
+    	int result = -1;
+    	
+		for(int i = 0; i < diseaseData.size(); i ++) {
+			File f = diseaseData.get(i);
+			String name = f.getName();
+			int _idx = name.lastIndexOf('_');
+			int dotidx = name.lastIndexOf('.');
+			if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+			int res = Integer.parseInt(name.substring(_idx+1, dotidx));
+			if(result < res) result = res;
+			
+		}
+		return result;
+	}
+	
+	/**
+	 * process the input file
+	 * 
+	 * @param dataMap Map to store file inside
+	 * @param state The state
+	 * @param file
+	 * 
+	 * @throws ScenarioInitializationException 
+	 */
+    
+	  public void processFile(ReferenceScenarioDataMapImpl dataMap, String state, File file) throws ScenarioInitializationException {
+		  	
+		try {
+	      String record;  
+	      String header;
+	      int recCount = 0;
+	      List<String> headerElements = new ArrayList<String>();
+	      FileInputStream fis = new FileInputStream(file); 
+	      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+	         
+	      //
+	      // Read the file header (iter, time, locations...)
+	      //
+	      if ( (header=d.readLine()) != null ) { 
+	          	
+		      StringTokenizer st = new StringTokenizer(header, ",");
+		            
+		      while (st.hasMoreTokens()) {
+		    	  String val = st.nextToken().trim();
+		    	  headerElements.add(val);
+		      }
+	        } // read the header
+	      /////////////////////
+	          
+	      // set up the empty lists
+	      int numColumns = headerElements.size();
+	      for (int i = 0; i < numColumns; i ++) {
+	      	String key = headerElements.get(i);
+	      	if(key.equals(ReferenceScenarioDataMapImpl.ITERATION_KEY) ||
+	      			key.equals(ReferenceScenarioDataMapImpl.TIME_KEY))
+	      		continue;
+	      	Map<String, List<String>> data;
+	      	ReferenceScenarioDataInstance result = null;
+	      	if(!dataMap.containsLocation(key)) {
+	      		data = new HashMap<String, List<String>>();
+	      		result = dataMap.new ReferenceScenarioDataInstance(data, dataMap);
+	      		dataMap.addInstance(key, result); // Add new location to 
+	      	} else {
+	      		result = dataMap.getLocation(key);
+	      		data = result.getInstance();
+	      	}
+	      	data.put(state, new ArrayList<String>()); // Add the new state
+	      }
+	          
+          //////////////////////
+          // Read the data
+          //
+          while ( (record=d.readLine()) != null ) { 
+             recCount++; 
+             
+             StringTokenizer st = new StringTokenizer(record,",");
+             int tcount = 0;
+			 while (st.hasMoreTokens() && tcount < headerElements.size() ) {// just to make sure
+			    String val = st.nextToken();
+				String key = headerElements.get(tcount);
+		    	if(key.equals(ReferenceScenarioDataMapImpl.ITERATION_KEY) ||
+		      			key.equals(ReferenceScenarioDataMapImpl.TIME_KEY))
+		      		{++tcount;continue;}
+				ReferenceScenarioDataInstance result = dataMap.getLocation(key);
+				Map<String, List<String>>data = result.getInstance();
+				data.get(state).add(val.trim());
+				tcount ++;
+			}
+		  } // while file has data
+       } catch (IOException e) { 
+          // catch io errors from FileInputStream or readLine()
+      	 Activator.logError(" IOException error!", e);
+      	 throw new ScenarioInitializationException(e);
+       }
+	  }
+	  
+	  /**
+		 * process the input file
+	 	 * @param resolution 
+		 * 
+	     * @return set of locations in a file
+		 * 
+		 * @throws ScenarioInitializationException 
+		 */
+		  public Set<String> getLocations(int resolution) throws ScenarioInitializationException {
+			Set<String> locations = new HashSet<String>();
+			ArrayList<String>states = new ArrayList<String>(); // keeps track of the states seen 
+			
+			for(int i = 0; i < diseaseData.size(); i ++) {
+				File file = diseaseData.get(i);
+				String name = file.getName();
+				int _idx = name.lastIndexOf('_');
+				int dotidx = name.lastIndexOf('.');
+				if(_idx <0 || dotidx < 0 || dotidx < _idx) continue; // not a data file
+				String state = name.substring(0, _idx);
+				if(!states.contains(state)) states.add(state);
+				int res = Integer.parseInt(name.substring(_idx+1, dotidx));
+				if(resolution != -1 && res != resolution) continue; // wrong resolution
+				try {  
+				      String header;
+				      List<String> headerElements = new ArrayList<String>();
+				      FileInputStream fis = new FileInputStream(file); 
+				      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+				      // Read the file header (iter, time, locations...)
+				      //
+				      if ( (header=d.readLine()) != null ) { 
+					      StringTokenizer st = new StringTokenizer(header, ",");
+					      while (st.hasMoreTokens()) {
+					    	  String val = st.nextToken().trim();
+					    	  headerElements.add(val);
+					      }
+				        } // read the header
+				      ///////////////////// 
+				      // set up the empty lists
+				      int numColumns = headerElements.size();
+				      for (int ii = 0; ii < numColumns; ii ++) {
+				      	String key = headerElements.get(ii);
+				      	if(!((key.equals(ReferenceScenarioDataMapImpl.ITERATION_KEY) ||	key.equals(ReferenceScenarioDataMapImpl.TIME_KEY)))) {
+					        locations.add(key);
+				      	}
+					  } // while file has data
+			       } catch (IOException e) { 
+			          // catch io errors from FileInputStream or readLine()
+			      	 Activator.logError(" IOException error!", e);
+			      	 throw new ScenarioInitializationException(e);
+			       }
+			}
+			
+	       return locations;
+		  }
+	  
+
+		/**
+		 * process the input file
+		 * @param locationFilter 
+		 * 
+		 * @param dataMap Map to store file inside
+		 * @param state The state
+		 * @param file
+		 * 
+		 * @throws ScenarioInitializationException 
+		 */
+		  public void processAndFilterFiles(Set<String>locationFilter, ReferenceScenarioDataMapImpl dataMap, String state, File file) throws ScenarioInitializationException {
+			  try {
+			      String record;  
+			      String header;
+			      int recCount = 0;
+			      List<String> headerElements = new ArrayList<String>();
+			      FileInputStream fis = new FileInputStream(file); 
+			      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+			         
+			      //
+			      // Read the file header (iter, time, locations...)
+			      //
+			      if ( (header=d.readLine()) != null ) { 
+			          	
+				      StringTokenizer st = new StringTokenizer(header, ",");
+				            
+				      while (st.hasMoreTokens()) {
+				    	  String val = st.nextToken().trim();
+				    	  headerElements.add(val);
+				      }
+			        } // read the header
+			      /////////////////////
+			          
+			      // set up the empty lists
+			      int numColumns = headerElements.size();
+			      for (int i = 0; i < numColumns; i ++) {
+			      	String key = headerElements.get(i);
+			      	// if filter is null just don't filter
+			      	if(locationFilter==null || locationFilter.contains(key)) {
+			      		if(key.equals(ReferenceScenarioDataMapImpl.ITERATION_KEY) ||
+				      			key.equals(ReferenceScenarioDataMapImpl.TIME_KEY))
+				      		continue;
+				      	Map<String, List<String>> data;
+				      	ReferenceScenarioDataInstance result = null;
+				      	if(!dataMap.containsLocation(key)) {
+				      		data = new HashMap<String, List<String>>();
+				      		result = dataMap.new ReferenceScenarioDataInstance(data, dataMap);
+				      		dataMap.addInstance(key, result); // Add new location to 
+				      	} else {
+				      		result = dataMap.getLocation(key);
+				      		data = result.getInstance();
+				      	}
+				      	data.put(state, new ArrayList<String>()); // Add the new state
+			      	}
+			      }
+			          
+		          //////////////////////
+		          // Read the data
+		          //
+		          while ( (record=d.readLine()) != null ) { 
+		             recCount++; 
+		             
+		             StringTokenizer st = new StringTokenizer(record,",");
+		             int tcount = 0;
+					 while (st.hasMoreTokens() && tcount < headerElements.size() ) {// just to make sure
+					    String val = st.nextToken();
+						String key = headerElements.get(tcount);
+						// if filter is null just don't filter
+						if(locationFilter==null || locationFilter.contains(key)) {
+							if(key.equals(ReferenceScenarioDataMapImpl.ITERATION_KEY) ||
+					      			key.equals(ReferenceScenarioDataMapImpl.TIME_KEY))
+					      		{++tcount;continue;}
+							ReferenceScenarioDataInstance result = dataMap.getLocation(key);
+							Map<String, List<String>>data = result.getInstance();
+							data.get(state).add(val.trim());
+						}
+						tcount ++;
+					}
+				  } // while file has data
+		       } catch (IOException e) { 
+		          // catch io errors from FileInputStream or readLine()
+		      	 Activator.logError(" IOException error!", e);
+		      	 throw new ScenarioInitializationException(e);
+		       }
+		  }// processAndFilterFiles
+	  
+	  /**
+		 * Parse a single aggregate data file
+		 * 
+		 * @param file File to parse
+		 * @return the ReferenceScenarioDataMap object
+		 * @throws ScenarioInitializationException 
+		 */
+	    public ReferenceScenarioDataMapImpl parseAggregateFile(String file) throws ScenarioInitializationException {
+	    	ReferenceScenarioDataMapImpl scenarioDataMap = (ReferenceScenarioDataMapImpl)aFactory.createReferenceScenarioDataMap();
+			File f = new File(file);
+			String name = f.getName();  // Disease name
+			int idx = name.indexOf(".");
+			String id = name.substring(0,idx);
+				
+			HashMap<String, List<String>> data = new HashMap<String,List<String>>();
+			try {
+		      String record;  
+		      String header;
+		      int recCount = 0;
+		      List<String> headerElements = new ArrayList<String>();
+		      FileInputStream fis = new FileInputStream(file); 
+		      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+		         
+		      //
+		      // Read the file header
+		      //
+		      if ( (header=d.readLine()) != null ) { 
+		          	
+			      StringTokenizer st = new StringTokenizer(header );
+			            
+			      while (st.hasMoreTokens()) {
+			    	  String val = st.nextToken(",");
+			    	  headerElements.add(val.trim());
+			      }
+		      } // read the header
+		      /////////////////////
+		          
+		      // set up the empty lists
+		      int numColumns = headerElements.size();
+		      for (int i = 0; i < numColumns; i ++) {
+		      	String key = headerElements.get(i);
+		      	data.put(key, new ArrayList<String>());
+		      }
+		          
+	          //////////////////////
+	          // Read the data
+	          //
+	          while ( (record=d.readLine()) != null ) { 
+	             recCount++; 
+	             
+	             StringTokenizer st = new StringTokenizer(record );
+	             int tcount = 0;
+					while (st.hasMoreTokens()) {
+						String val = st.nextToken(",");
+						String key = headerElements.get(tcount);
+						(data.get(key)).add(val.trim());
+						tcount ++;
+					}
+				} // while file has data
+	       } catch (IOException e) { 
+	          // catch io errors from FileInputStream or readLine()
+	      	 Activator.logError(" IOException error!", e);
+	      	 throw new ScenarioInitializationException(e);
+	       }
+	      
+			scenarioDataMap.addInstance(
+					id,   
+					scenarioDataMap.new ReferenceScenarioDataInstance(data, scenarioDataMap));
+			return scenarioDataMap;
+		}
+	  /**
+		 * process an incidence file
+		 * An incidence file does not contain SI data so it can not return 
+		 * a ReferenceScenarioDataInstance (it is not used to estimate parameters).
+		 * Instead this method returns the raw data in a map
+		 * 
+		 * @param fileName
+		 * @return a map of scenario data keyed by location ID
+		 * @throws ScenarioInitializationException 
+		 */
+		  public Map<String, List<String>> processIncidenceFile(String fileName) throws ScenarioInitializationException {
+			File file = new File(fileName);
+			HashMap<String, List<String>> data = new HashMap<String,List<String>>();
+			
+			try {
+		      String record;  
+		      String header;
+		      int recCount = 0;
+		      List<String> headerElements = new ArrayList<String>();
+		      FileInputStream fis = new FileInputStream(file); 
+		      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+		         
+		      //
+		      // Read the file header
+		      //
+		      if ( (header=d.readLine()) != null ) { 
+		          	
+			      StringTokenizer st = new StringTokenizer(header );
+			            
+			      while (st.hasMoreTokens()) {
+			    	  String val = st.nextToken(",");
+			    	  headerElements.add(val.trim());
+			      }
+		      } // read the header
+		      /////////////////////
+		          
+		      // set up the empty lists
+		      int numColumns = headerElements.size();
+		      for (int i = 0; i < numColumns; i ++) {
+		      	String key = headerElements.get(i);
+		      	data.put(key, new ArrayList<String>());
+		      }
+		          
+		      // Here we check the type of the data file
+		      // by checking the header elements
+		          
+		          
+		          
+		      
+	          //////////////////////
+	          // Read the data
+	          //
+	          while ( (record=d.readLine()) != null ) { 
+	             recCount++; 
+	             
+	             StringTokenizer st = new StringTokenizer(record );
+	             int tcount = 0;
+					while (st.hasMoreTokens()) {
+						String val = st.nextToken(",");
+						String key = headerElements.get(tcount);
+						(data.get(key)).add(val.trim());
+						tcount ++;
+					}
+				} // while file has data
+	       } catch (IOException e) { 
+	          // catch io errors from FileInputStream or readLine()
+	      	 Activator.logError(" IOException error!", e);
+	      	 throw new ScenarioInitializationException(e);
+	       }
+	       return data;
+		  }
+		  
+	
+	/**
+	 * Indicate End-Of-File
+	 * 
+	 * @param buffer
+	 *            A buffer of diva data
+	 * 
+	 * @return True if we have reached End-Of-File
+	 */
+	static protected boolean EOF(String buffer) {
+		if (buffer == null || buffer.length() == 0)
+			return true;
+		return false;
+	}
+
+	/**
+	 * Return the run parameters
+	 * 
+	 * @return Map<String, String> The run parameters
+	 */
+	
+	public Map<String, String> getRunParameters() {
+		return runParameters;
+	}
+}
diff --git a/org.eclipse.stem.core/.classpath b/org.eclipse.stem.core/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.core/.cvsignore b/org.eclipse.stem.core/.cvsignore
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/org.eclipse.stem.core/.cvsignore
@@ -0,0 +1 @@
+text
diff --git a/org.eclipse.stem.core/.fbprefs b/org.eclipse.stem.core/.fbprefs
new file mode 100644
index 0000000..347942f
--- /dev/null
+++ b/org.eclipse.stem.core/.fbprefs
@@ -0,0 +1,147 @@
+#FindBugs User Preferences
+#Tue May 27 15:38:54 EDT 2008
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
+detectorBCPMethodReturnCheck=BCPMethodReturnCheck|false
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorBooleanReturnNull=BooleanReturnNull|true
+detectorCalledMethods=CalledMethods|true
+detectorCheckCalls=CheckCalls|false
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorCrossSiteScripting=CrossSiteScripting|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDontUseEnum=DontUseEnum|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqStringTest=EqStringTest|false
+detectorFieldItemSummary=FieldItemSummary|true
+detectorFinalizerNullsFields=FinalizerNullsFields|true
+detectorFindBadCast=FindBadCast|false
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadEqualsImplementation=FindBadEqualsImplementation|false
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindBugsSummaryStats=FindBugsSummaryStats|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindFloatMath=FindFloatMath|false
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|false
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|false
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorLockedFields=LockedFields|false
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMethods=Methods|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNoteAnnotationRetention=NoteAnnotationRetention|true
+detectorNoteCheckReturnValue=NoteCheckReturnValue|true
+detectorNoteCheckReturnValueAnnotations=NoteCheckReturnValueAnnotations|true
+detectorNoteDirectlyRelevantTypeQualifiers=NoteDirectlyRelevantTypeQualifiers|true
+detectorNoteJCIPAnnotation=NoteJCIPAnnotation|true
+detectorNoteNonNullAnnotations=NoteNonNullAnnotations|true
+detectorNoteNonnullReturnValues=NoteNonnullReturnValues|true
+detectorNoteSuppressedWarnings=NoteSuppressedWarnings|true
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
+detectorNumberConstructor=NumberConstructor|false
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorReflectiveClasses=ReflectiveClasses|true
+detectorResolveAllReferences=ResolveAllReferences|false
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStaticCalendarDetector=StaticCalendarDetector|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorSynchronizationOnSharedBuiltinConstant=SynchronizationOnSharedBuiltinConstant|true
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
+detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
+detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
+detectorTestASM=TestASM|false
+detectorTestDataflowAnalysis=TestDataflowAnalysis|false
+detectorTestingGround=TestingGround|false
+detectorTrainFieldStoreTypes=TrainFieldStoreTypes|true
+detectorTrainNonNullAnnotations=TrainNonNullAnnotations|true
+detectorTrainUnconditionalDerefParams=TrainUnconditionalDerefParams|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUseObjectEquals=UseObjectEquals|false
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+effort=default
+excludefilter0=.settings/findbugs.exclude.xml
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false
+filter_settings_neg=|
diff --git a/org.eclipse.stem.core/.project b/org.eclipse.stem.core/.project
new file mode 100644
index 0000000..26bb320
--- /dev/null
+++ b/org.eclipse.stem.core/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.core</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.core/.settings/findbugs.exclude.xml b/org.eclipse.stem.core/.settings/findbugs.exclude.xml
new file mode 100644
index 0000000..4a7fff8
--- /dev/null
+++ b/org.eclipse.stem.core/.settings/findbugs.exclude.xml
@@ -0,0 +1,6 @@
+<FindBugsFilter>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.core.*" />
+        <Bug code="IC,UrF,SIC,ST,MS,EC,Eq,BC,DLS" />
+    </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..285b9e1
--- /dev/null
+++ b/org.eclipse.stem.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:37:08 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.core/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.core/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..08cbb44
--- /dev/null
+++ b/org.eclipse.stem.core/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,51 @@
+#Mon Feb 25 12:29:23 PST 2008
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_releng code cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/>
diff --git a/org.eclipse.stem.core/.template b/org.eclipse.stem.core/.template
new file mode 100644
index 0000000..0d1f2be
--- /dev/null
+++ b/org.eclipse.stem.core/.template
@@ -0,0 +1,3 @@
+<html>
+This is the welcome page for the "core" plug-in of the STEM system.
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/META-INF/MANIFEST.MF b/org.eclipse.stem.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cf932f9
--- /dev/null
+++ b/org.eclipse.stem.core/META-INF/MANIFEST.MF
@@ -0,0 +1,58 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.core;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.core.CorePlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.core.resources
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.adapters.history,
+ org.eclipse.stem.adapters.time,
+ org.eclipse.stem.core,
+ org.eclipse.stem.core.common,
+ org.eclipse.stem.core.common.impl,
+ org.eclipse.stem.core.common.provider,
+ org.eclipse.stem.core.common.util,
+ org.eclipse.stem.core.experiment,
+ org.eclipse.stem.core.experiment.impl,
+ org.eclipse.stem.core.experiment.provider,
+ org.eclipse.stem.core.experiment.util,
+ org.eclipse.stem.core.graph,
+ org.eclipse.stem.core.graph.impl,
+ org.eclipse.stem.core.graph.provider,
+ org.eclipse.stem.core.graph.util,
+ org.eclipse.stem.core.math,
+ org.eclipse.stem.core.model,
+ org.eclipse.stem.core.model.impl,
+ org.eclipse.stem.core.model.provider,
+ org.eclipse.stem.core.model.util,
+ org.eclipse.stem.core.modifier,
+ org.eclipse.stem.core.modifier.impl,
+ org.eclipse.stem.core.modifier.provider,
+ org.eclipse.stem.core.modifier.util,
+ org.eclipse.stem.core.predicate,
+ org.eclipse.stem.core.predicate.impl,
+ org.eclipse.stem.core.predicate.provider,
+ org.eclipse.stem.core.predicate.util,
+ org.eclipse.stem.core.scenario,
+ org.eclipse.stem.core.scenario.impl,
+ org.eclipse.stem.core.scenario.provider,
+ org.eclipse.stem.core.scenario.util,
+ org.eclipse.stem.core.sequencer,
+ org.eclipse.stem.core.sequencer.impl,
+ org.eclipse.stem.core.sequencer.provider,
+ org.eclipse.stem.core.sequencer.util,
+ org.eclipse.stem.core.solver,
+ org.eclipse.stem.core.solver.impl,
+ org.eclipse.stem.core.solver.provider,
+ org.eclipse.stem.core.solver.util,
+ org.eclipse.stem.core.trigger,
+ org.eclipse.stem.core.trigger.impl,
+ org.eclipse.stem.core.trigger.provider,
+ org.eclipse.stem.core.trigger.util
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.core/build.properties b/org.eclipse.stem.core/build.properties
new file mode 100644
index 0000000..99b0857
--- /dev/null
+++ b/org.eclipse.stem.core/build.properties
@@ -0,0 +1,11 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               resources/,\
+               icons/,\
+               epl-v10.html,\
+               notice.html
diff --git a/org.eclipse.stem.core/documentation/common.pdf b/org.eclipse.stem.core/documentation/common.pdf
new file mode 100644
index 0000000..6fbd9ab
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/common.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/common.uxf b/org.eclipse.stem.core/documentation/common.uxf
new file mode 100644
index 0000000..09297c1
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/common.uxf
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Class</type><coordinates><x>490</x><y>310</y><w>200</w><h>410</h></coordinates><panel_attributes>DublinCore
+--
+- bibliographicCitation: String
+- contributor: String
+- coverage: String
+- created: String
+- creator: String
+- date: String
+- description: String
+- format: String
+- identifier: String
+- language: String
+- license: String
+- publisher: String
+- relation: String
+- required: String
+- rights: String
+- source: String
+- spatial: String
+- subject: String
+- title: String
+- type: String
+- valid: String
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>330</x><y>330</y><w>180</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=dublinCore
+m2=0..1
+</panel_attributes><additional_attributes>20;20;160;20</additional_attributes></element><element><type>com.umlet.element.base.Note</type><coordinates><x>380</x><y>50</y><w>240</w><h>30</h></coordinates><panel_attributes>com.ibm.almaden.stem.common</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>110</x><y>320</y><w>240</w><h>70</h></coordinates><panel_attributes>/Identifiable/
+--
+-uri: URI
+-uri: typeURI
+--
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>161</x><y>210</y><w>138</w><h>130</h></coordinates><panel_attributes>lt=&lt;.
+&lt;&lt;instanceOf&gt;&gt;</panel_attributes><additional_attributes>69;20;69;110</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>110</x><y>130</y><w>240</w><h>100</h></coordinates><panel_attributes>&lt;&lt;Interface&gt;&gt;
+SanityChecker
+--
+ 
+--
++boolean: sane()
+ </panel_attributes><additional_attributes/></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/experiment.pdf b/org.eclipse.stem.core/documentation/experiment.pdf
new file mode 100644
index 0000000..17e6c34
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/experiment.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/experiment.uxf b/org.eclipse.stem.core/documentation/experiment.uxf
new file mode 100644
index 0000000..9e89438
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/experiment.uxf
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Relation</type><coordinates><x>451</x><y>340</y><w>59</w><h>130</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..n
+r1=modifiers
+</panel_attributes><additional_attributes>29;110;29;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>430</x><y>450</y><w>260</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.modifier::Modifier</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>273</x><y>340</y><w>55</w><h>130</h></coordinates><panel_attributes>lt=&lt;-
+m1=1
+r1=scenario</panel_attributes><additional_attributes>27;110;27;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>80</x><y>450</y><w>310</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.scenario::Scenario
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Note</type><coordinates><x>280</x><y>40</y><w>260</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.experiment</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>360</x><y>160</y><w>40</w><h>120</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;100</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>230</x><y>120</y><w>320</w><h>60</h></coordinates><panel_attributes>org.eclipse.stem.core.common.Identifiable
+--
+ 
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>250</x><y>260</y><w>260</w><h>100</h></coordinates><panel_attributes>Experiment
+--
+ 
+--
+getNextScenario(Scenario): Scenario
+getModificationSummary() : List&lt;String&gt;
+isComplete(): boolean</panel_attributes><additional_attributes/></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/graph.pdf b/org.eclipse.stem.core/documentation/graph.pdf
new file mode 100644
index 0000000..ee84106
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/graph.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/graph.uxf b/org.eclipse.stem.core/documentation/graph.uxf
new file mode 100644
index 0000000..49cb8dc
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/graph.uxf
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.Relation</type><coordinates><x>730</x><y>240</y><w>260</w><h>440</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=graphLabels
+m2=0..*</panel_attributes><additional_attributes>240;420;240;20;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1100</x><y>500</y><w>186</w><h>180</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=unresolvedIdentifiables
+m2=0..1
+</panel_attributes><additional_attributes>20;160;150;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1140</x><y>370</y><w>230</w><h>150</h></coordinates><panel_attributes>UnresolvedIdentifiable
+--
+- identifiable: Identifiable
+- unresolvedURI: URI
+- fieldName: String
+- scenario: Identifiable
+- model: Identifiable
+- graph: Identifiable
+--
+
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>560</x><y>550</y><w>250</w><h>80</h></coordinates><panel_attributes>&lt;&lt;Abstract&gt;&gt;
+/LabelValue/
+--
+  
+--
++ reset(): void</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>350</x><y>490</y><w>40</w><h>130</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;110</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>260</x><y>600</y><w>130</w><h>60</h></coordinates><panel_attributes>StaticNodeLabel
+--
+ 
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>490</y><w>40</w><h>130</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;110</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>400</x><y>600</y><w>130</w><h>60</h></coordinates><panel_attributes>DynamicNodeLabel
+--
+ 
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>539</x><y>300</y><w>82</w><h>270</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=currentValue
+m2= 1</panel_attributes><additional_attributes>41;20;41;250</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>680</x><y>300</y><w>40</w><h>100</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;80</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>300</y><w>40</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;150</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>130</x><y>520</y><w>820</w><h>220</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=nodes
+m2=1
+</panel_attributes><additional_attributes>800;200;20;200;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>479</x><y>490</y><w>471</w><h>210</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=nodeLabels
+m2=1
+</panel_attributes><additional_attributes>451;190;91;190;21;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>930</x><y>660</y><w>210</w><h>100</h></coordinates><panel_attributes>Graph
+--
+ 
+--
++addGraph(Graph)
++switchToNextValue(): void
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>350</x><y>450</y><w>190</w><h>60</h></coordinates><panel_attributes>NodeLabel
+--
+ 
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>240</x><y>460</y><w>130</w><h>40</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..n
+r1=labels</panel_attributes><additional_attributes>110;20;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>560</x><y>50</y><w>540</w><h>630</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;520;120;520;610</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>70</x><y>450</y><w>190</w><h>90</h></coordinates><panel_attributes>Node
+--
+ 
+--
++getEdge(URI) : Edge
++getLabel(URI) : Label
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>600</x><y>380</y><w>190</w><h>90</h></coordinates><panel_attributes>&lt;&lt;Interface&gt;&gt;
+DynamicLabel
+--
+ 
+--
++switchToNextValue() : void</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>300</x><y>170</y><w>740</w><h>510</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=edges
+m2=1
+</panel_attributes><additional_attributes>720;490;720;20;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>770</x><y>450</y><w>190</w><h>230</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..*
+r1=dynamicLabels</panel_attributes><additional_attributes>20;20;170;210</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>658</x><y>450</y><w>64</w><h>120</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=nextValue
+m2=1
+</panel_attributes><additional_attributes>32;20;32;100</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>300</x><y>230</y><w>140</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=label
+m2=0..1
+</panel_attributes><additional_attributes>20;20;120;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>420</x><y>230</y><w>330</w><h>90</h></coordinates><panel_attributes>&lt;&lt;Abstract&gt;&gt;
+Label
+--
+-URIOfIdentifiableToBeLabeled: URI
+--</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>460</x><y>50</y><w>40</w><h>200</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;180</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>120</x><y>180</y><w>200</w><h>120</h></coordinates><panel_attributes>Edge
+--
+- directed : Boolean
+- aURL: URL
+- bURL: URL
+--
++getOtherNode(Node) : Node
++isDirectedAt(Node) : Boolean
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>180</x><y>280</y><w>41</w><h>190</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..n
+r1=edges
+</panel_attributes><additional_attributes>20;20;20;170</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>110</x><y>280</y><w>40</w><h>190</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..1
+r1=  b</panel_attributes><additional_attributes>20;170;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>140</x><y>280</y><w>40</w><h>190</h></coordinates><panel_attributes>lt=&lt;-
+m1= 0..1
+r1=  a</panel_attributes><additional_attributes>20;170;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>70</x><y>50</y><w>280</w><h>420</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>260;20;20;100;20;400</additional_attributes></element><element><type>com.umlet.element.base.Note</type><coordinates><x>680</x><y>30</y><w>220</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.graph</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>300</x><y>40</y><w>310</w><h>30</h></coordinates><panel_attributes>/org.eclipse.stem.common.Identifiable/
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>200</x><y>50</y><w>170</w><h>150</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>150;20;20;130</additional_attributes></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/model.pdf b/org.eclipse.stem.core/documentation/model.pdf
new file mode 100644
index 0000000..01d0235
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/model.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/model.uxf b/org.eclipse.stem.core/documentation/model.uxf
new file mode 100644
index 0000000..2efc380
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/model.uxf
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.Class</type><coordinates><x>960</x><y>370</y><w>300</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.graph.DynamicLabel</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Note</type><coordinates><x>590</x><y>10</y><w>220</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.model</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>50</x><y>540</y><w>250</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.graph.Graph
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>210</x><y>70</y><w>310</w><h>30</h></coordinates><panel_attributes>/org.eclipse.stem.common.Identifiable/</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>420</y><w>380</w><h>110</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..*
+r2=edgeDecorators
+</panel_attributes><additional_attributes>20;20;360;90</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>400</y><w>270</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+r2=graphDecorators
+m2=0..*
+</panel_attributes><additional_attributes>20;20;250;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>790</x><y>270</y><w>40</w><h>70</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;50</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>600</x><y>320</y><w>270</w><h>70</h></coordinates><panel_attributes>NodeDecorator
+--
+ 
+--
+ 
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>780</x><y>480</y><w>270</w><h>70</h></coordinates><panel_attributes>EdgeDecorator
+--
+ 
+--
+
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>670</x><y>400</y><w>270</w><h>70</h></coordinates><panel_attributes>GraphDecorator
+--
+ 
+--
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>330</y><w>200</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..*
+r2=nodeDecorators
+</panel_attributes><additional_attributes>20;20;180;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>780</x><y>160</y><w>290</w><h>130</h></coordinates><panel_attributes>&lt;&lt;abstract&gt;&gt; 
+/Decorator/
+--
+-index: int
+--
+ + decorateGraph(Graph) : void
++ updateLabels(Graph, STEMTime) : void
+
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>930</x><y>270</y><w>40</w><h>230</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;210</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>60</x><y>320</y><w>380</w><h>140</h></coordinates><panel_attributes>Model
+--
+ 
+--
++ getCanonicalGraph() : Graph
++ getCanonicalNodeDecorators() : NodeDecorator
++ getCanonicalEdgeDecorators(): EdgeDecorator
++ getCanonicalGraphDecorators(): GraphDecorator
+--
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>990</x><y>270</y><w>100</w><h>120</h></coordinates><panel_attributes>lt=&lt;-
+m1=0..1
+r1=labelsToUpdate</panel_attributes><additional_attributes>50;100;50;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>0</x><y>360</y><w>120</w><h>150</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=   0..*
+r2=models
+</panel_attributes><additional_attributes>60;20;20;20;20;130;100;130;100;100</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>870</x><y>270</y><w>40</w><h>150</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;130</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>230</x><y>80</y><w>40</w><h>260</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;240</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>50</x><y>590</y><w>240</w><h>90</h></coordinates><panel_attributes>STEMTime
+--
+- currentTime: java.util.Date
+- startTime: java.util.Date
+--
++ getElapsedTime(): java.util.Date</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>150</x><y>440</y><w>45</w><h>120</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..*
+r2=graphs
+</panel_attributes><additional_attributes>22;20;22;100</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>430</x><y>80</y><w>450</w><h>100</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;430;80</additional_attributes></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/modifier.pdf b/org.eclipse.stem.core/documentation/modifier.pdf
new file mode 100644
index 0000000..7e0cb7c
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/modifier.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/modifier.uxf b/org.eclipse.stem.core/documentation/modifier.uxf
new file mode 100644
index 0000000..8938fae
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/modifier.uxf
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Note</type><coordinates><x>700</x><y>130</y><w>240</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.modifier</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>750</x><y>220</y><w>40</w><h>130</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;110</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>620</x><y>200</y><w>320</w><h>40</h></coordinates><panel_attributes>org.eclipse.stem.core.common.Identifiable
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>780</x><y>770</y><w>170</w><h>100</h></coordinates><panel_attributes>STEMTimeRangeModifier
+--
+startValue: STEMTime
+endValue: STEMTime
+increment: long
+--</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>590</x><y>770</y><w>180</w><h>100</h></coordinates><panel_attributes>IntegerRangeModifier
+--
+startValue: Integer
+endValue: Integer
+increment: int
+--</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>430</x><y>770</y><w>150</w><h>100</h></coordinates><panel_attributes>DoubleRangeModifier
+--
+startValue: Double
+endValue: Double
+increment: double
+--</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>660</x><y>480</y><w>240</w><h>100</h></coordinates><panel_attributes>/FeatureModifier/
+--
+eStructuralFeature : EStructuralFeature
+--
+updateFeature(EObject): void
+getModificationSummary(): String
+isComplete() : boolean</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>660</x><y>580</y><w>250</w><h>70</h></coordinates><panel_attributes>lt=-
+</panel_attributes><additional_attributes>20;50;20;20;230;20;230;50</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>640</x><y>330</y><w>260</w><h>100</h></coordinates><panel_attributes>Modifier
+--
+ target: URI
+--
+updateScenario(Scenario): void
+getModificationSummary(): List&lt;String&gt;
+isComplete(): boolean</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>750</x><y>560</y><w>40</w><h>60</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;40</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>719</x><y>410</y><w>103</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..n
+r2=featureModifiers</panel_attributes><additional_attributes>51;20;51;70</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>480</x><y>720</y><w>390</w><h>70</h></coordinates><panel_attributes>lt=-</panel_attributes><additional_attributes>20;50;20;20;370;20;370;50</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>660</x><y>720</y><w>40</w><h>70</h></coordinates><panel_attributes>lt=-</panel_attributes><additional_attributes>20;20;20;50</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>660</x><y>680</y><w>40</w><h>80</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;60</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>790</x><y>630</y><w>210</w><h>80</h></coordinates><panel_attributes>/SequenceModifier/
+--
+ 
+--
+getSequenceSize(): int
+
+</panel_attributes><additional_attributes/></element><group><element><type>com.umlet.element.base.Class</type><coordinates><x>620</x><y>630</y><w>120</w><h>70</h></coordinates><panel_attributes>/RangeModifier/
+--
+ 
+--
+
+
+</panel_attributes><additional_attributes/></element></group></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/predicate.pdf b/org.eclipse.stem.core/documentation/predicate.pdf
new file mode 100644
index 0000000..938b146
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/predicate.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/predicate.uxf b/org.eclipse.stem.core/documentation/predicate.uxf
new file mode 100644
index 0000000..8b3943f
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/predicate.uxf
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Relation</type><coordinates><x>170</x><y>230</y><w>240</w><h>440</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=2..*
+r2=operands</panel_attributes><additional_attributes>170;420;170;390;20;390;20;20;220;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>330</x><y>570</y><w>40</w><h>100</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;80;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>210</x><y>570</y><w>40</w><h>100</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;80;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>860</x><y>150</y><w>40</w><h>280</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;260;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>650</x><y>140</y><w>320</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.common::Identifiable</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Note</type><coordinates><x>520</x><y>80</y><w>260</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.predicate</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>700</x><y>260</y><w>100</w><h>170</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>80;150;80;100;20;100;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>750</x><y>410</y><w>210</w><h>60</h></coordinates><panel_attributes>/IdentifablePredicate/
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>920</x><y>450</y><w>40</w><h>240</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;220;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>410</x><y>770</y><w>70</w><h>70</h></coordinates><panel_attributes>Or
+--
+ 
+--
+ 
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>330</x><y>770</y><w>70</w><h>70</h></coordinates><panel_attributes>And
+--
+ 
+--
+ 
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>540</x><y>830</y><w>40</w><h>140</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=time</panel_attributes><additional_attributes>20;20;20;120</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>470</x><y>950</y><w>310</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.model::STEMTime</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>680</x><y>720</y><w>40</w><h>80</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;60;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>690</x><y>780</y><w>240</w><h>110</h></coordinates><panel_attributes>ElapsedTimeTest
+--
+ -numberofDays: int
+-referenceTimeValid: boolean
+--
++getElapsedMilliseconds(): long
++isReferenceTimeValid(): boolean
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>620</x><y>720</y><w>40</w><h>80</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;60;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>880</x><y>670</y><w>110</w><h>70</h></coordinates><panel_attributes>IdentifableTest
+--
+ 
+--
+
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>620</x><y>670</y><w>90</w><h>70</h></coordinates><panel_attributes>/TimeTest/
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>680</x><y>570</y><w>40</w><h>120</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;100;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>300</x><y>400</y><w>40</w><h>140</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;120;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>400</y><w>40</w><h>140</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;120;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>550</x><y>260</y><w>60</w><h>280</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;-
+m2=1
+r2=predicate</panel_attributes><additional_attributes>30;260;30;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>680</x><y>260</y><w>40</w><h>280</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;260;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>690</x><y>520</y><w>210</w><h>70</h></coordinates><panel_attributes>/Test/
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>530</x><y>520</y><w>150</w><h>70</h></coordinates><panel_attributes>PredicateReference
+--
+-predicate: Predicate
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>370</x><y>520</y><w>150</w><h>70</h></coordinates><panel_attributes>PredicateExpression
+--
+-predicate: Predicate
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>200</x><y>520</y><w>160</w><h>70</h></coordinates><panel_attributes>/BooleanOperator/
+--
+ 
+--
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>320</x><y>650</y><w>160</w><h>70</h></coordinates><panel_attributes>/NaryBooleanOperator/
+--
+ 
+--
+ 
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>720</x><y>670</y><w>70</w><h>70</h></coordinates><panel_attributes>True
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>280</x><y>350</y><w>210</w><h>70</h></coordinates><panel_attributes>/BooleanExpression/
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>410</x><y>260</y><w>40</w><h>110</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;90;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>684</x><y>870</y><w>92</w><h>100</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=referenceTime</panel_attributes><additional_attributes>46;20;46;80</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>510</x><y>780</y><w>160</w><h>70</h></coordinates><panel_attributes>AbsoluteTimeTest
+--
+ 
+--
+ +setTime(STEMTime)</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>870</x><y>570</y><w>40</w><h>120</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;100;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>810</x><y>570</y><w>40</w><h>120</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;100;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>740</x><y>570</y><w>40</w><h>120</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;100;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>800</x><y>670</y><w>70</w><h>70</h></coordinates><panel_attributes>False
+--
+ 
+--
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>420</x><y>700</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;70;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>340</x><y>700</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;70;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>200</x><y>700</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&gt;&gt;
+</panel_attributes><additional_attributes>20;70;20;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>190</x><y>770</y><w>70</w><h>70</h></coordinates><panel_attributes>Not
+--
+ 
+--
+ 
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>140</x><y>190</y><w>270</w><h>480</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=operand</panel_attributes><additional_attributes>20;460;20;20;250;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>150</x><y>650</y><w>160</w><h>70</h></coordinates><panel_attributes>/UnaryBooleanOperator/
+--
+ 
+--
+ 
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>390</x><y>190</y><w>340</w><h>90</h></coordinates><panel_attributes>/Predicate/
+--
+ 
+--
+#evalute(STEMTime, long, Decorator): boolean
+
+</panel_attributes><additional_attributes/></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/scenario.pdf b/org.eclipse.stem.core/documentation/scenario.pdf
new file mode 100644
index 0000000..15cc4ca
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/scenario.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/scenario.uxf b/org.eclipse.stem.core/documentation/scenario.uxf
new file mode 100644
index 0000000..918f927
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/scenario.uxf
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.Note</type><coordinates><x>470</x><y>10</y><w>230</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.scenario</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>280</x><y>60</y><w>310</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.common.Identifiable</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>520</x><y>70</y><w>40</w><h>190</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;170</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>250</x><y>660</y><w>250</w><h>30</h></coordinates><panel_attributes>com.ibm.almaden.stem.model.Model
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>90</x><y>600</y><w>250</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.graph.Graph
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>250</x><y>340</y><w>100</w><h>280</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=canonicalGraph</panel_attributes><additional_attributes>50;20;50;260</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>350</x><y>340</y><w>40</w><h>340</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=model</panel_attributes><additional_attributes>20;20;20;320</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>16</x><y>340</y><w>109</w><h>190</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..*
+r2=modelDecorators</panel_attributes><additional_attributes>54;20;54;170</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>138</x><y>340</y><w>124</w><h>190</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..*
+r2=scenarioDecorators</panel_attributes><additional_attributes>62;20;62;170</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>40</x><y>510</y><w>250</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.model.Decorator
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>50</x><y>180</y><w>330</w><h>180</h></coordinates><panel_attributes>Scenario
+--
+ - title: String
+--
++ initialize(): void
++ step(): void
++ reset(): void
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>480</x><y>400</y><w>240</w><h>120</h></coordinates><panel_attributes>/SequentialSequencer/
+--
+ 
+--
++getCurrentTime(): STEMTime
++getNextTime(): STEMTime</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>280</x><y>70</y><w>40</w><h>130</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;110</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>580</x><y>340</y><w>40</w><h>80</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;60</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>480</x><y>240</y><w>240</w><h>120</h></coordinates><panel_attributes>&lt;&lt;Abstract&gt;&gt;
+/Sequencer/
+--
+ 
+--
++getCurrentTime(): STEMTime
++getNextTime(): STEMTime</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>360</x><y>250</y><w>140</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=sequencer
+</panel_attributes><additional_attributes>20;20;120;20</additional_attributes></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/sequencer.pdf b/org.eclipse.stem.core/documentation/sequencer.pdf
new file mode 100644
index 0000000..f44d288
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/sequencer.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/sequencer.uxf b/org.eclipse.stem.core/documentation/sequencer.uxf
new file mode 100644
index 0000000..086a0fd
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/sequencer.uxf
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Class</type><coordinates><x>400</x><y>180</y><w>210</w><h>240</h></coordinates><panel_attributes>/Sequencer/
+--
+- timeDelta: long
+- workComplete: double
+- duration: int
+- cycle: int
+--
++getNextTime(): STEMTime
++getTimeDelta(): long
++getDuration(): long
++isTimeToStop(): boolean
++reset(): void
++getWorkComplete(): double
++getWorkIncrement(): int
++getCycle(): int
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>480</x><y>540</y><w>40</w><h>100</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;80</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>480</x><y>400</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;70</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>400</x><y>620</y><w>210</w><h>70</h></coordinates><panel_attributes>RealTimeSequencer
+--
+ 
+--
+ 
+ </panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>400</x><y>470</y><w>210</w><h>90</h></coordinates><panel_attributes>SequntialSequencer
+--
+-timeIncrement: long
+--
++getTimeIncrement(): long
++setTimeIncrement(long)
+</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>262</x><y>300</y><w>158</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=currentTime</panel_attributes><additional_attributes>138;20;38;20;38;70</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>182</x><y>250</y><w>238</w><h>140</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=0..1
+r2=endTime</panel_attributes><additional_attributes>218;20;28;20;28;120</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>70</x><y>200</y><w>350</w><h>190</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m2=1
+r2=startTime</panel_attributes><additional_attributes>330;20;30;20;30;170</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>70</x><y>370</y><w>290</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.model::STEMTime</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Note</type><coordinates><x>380</x><y>130</y><w>250</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.sequencer</panel_attributes><additional_attributes/></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/documentation/trigger.pdf b/org.eclipse.stem.core/documentation/trigger.pdf
new file mode 100644
index 0000000..9dd038e
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/trigger.pdf
Binary files differ
diff --git a/org.eclipse.stem.core/documentation/trigger.uxf b/org.eclipse.stem.core/documentation/trigger.uxf
new file mode 100644
index 0000000..e6bd49e
--- /dev/null
+++ b/org.eclipse.stem.core/documentation/trigger.uxf
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><help_text>//Uncomment the following line to change the fontsize:
+//fontsize=14
+
+//Welcome to UMLet!
+
+// *Double-click on UML elements to add them to the diagram.
+// *Edit element properties by modifying the text in this panel.
+// *Edit the files in the 'palettes' directory to store your own element palettes.
+// *Press Del or Backspace to remove elements from the diagram.
+// *Hold down Ctrl key to select multiple elements.
+// *Press c to copy the UML diagram to the system clipboard.
+// * This text will be stored with each diagram. Feel free to use the area for notes.
+</help_text><element><type>com.umlet.element.base.Note</type><coordinates><x>680</x><y>30</y><w>230</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.trigger</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>590</x><y>140</y><w>60</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;-
+m2=1
+r2=predicate</panel_attributes><additional_attributes>30;20;30;150</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>460</x><y>140</y><w>40</w><h>170</h></coordinates><panel_attributes>lt=&lt;&lt;&lt;-
+m2=1
+r2=action</panel_attributes><additional_attributes>20;20;20;150</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>230</x><y>290</y><w>290</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.model::Decorator</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>550</x><y>290</y><w>290</w><h>30</h></coordinates><panel_attributes>org.eclipse.stem.core.predicate::Predicate</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>440</x><y>90</y><w>210</w><h>70</h></coordinates><panel_attributes>Trigger
+--
+ 
+--
+ 
+</panel_attributes><additional_attributes/></element></umlet_diagram>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/epl-v10.html b/org.eclipse.stem.core/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.core/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_DynamicLabel.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_DynamicLabel.gif
new file mode 100644
index 0000000..9f36b38
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_DynamicLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_Label.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_Label.gif
new file mode 100644
index 0000000..7cc18f1
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateEdge_label_Label.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_modifiers_Modifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_modifiers_Modifier.gif
new file mode 100644
index 0000000..19ae144
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_modifiers_Modifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_scenario_Scenario.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_scenario_Scenario.gif
new file mode 100644
index 0000000..52be1a5
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateExperiment_scenario_Scenario.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_Decorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_Decorator.gif
new file mode 100644
index 0000000..8966d11
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_Decorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_EdgeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_EdgeDecorator.gif
new file mode 100644
index 0000000..a576718
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_EdgeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_GraphDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_GraphDecorator.gif
new file mode 100644
index 0000000..5625a64
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_GraphDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_NodeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_NodeDecorator.gif
new file mode 100644
index 0000000..96aea64
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_decorators_NodeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_edges_URIToIdentifiableMapEntry.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_edges_URIToIdentifiableMapEntry.gif
new file mode 100644
index 0000000..834778f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_edges_URIToIdentifiableMapEntry.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_graphLabels_URIToIdentifiableMapEntry.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_graphLabels_URIToIdentifiableMapEntry.gif
new file mode 100644
index 0000000..834778f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_graphLabels_URIToIdentifiableMapEntry.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodeLabels_URIToIdentifiableMapEntry.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodeLabels_URIToIdentifiableMapEntry.gif
new file mode 100644
index 0000000..834778f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodeLabels_URIToIdentifiableMapEntry.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodes_URIToIdentifiableMapEntry.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodes_URIToIdentifiableMapEntry.gif
new file mode 100644
index 0000000..834778f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_nodes_URIToIdentifiableMapEntry.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_unresolvedIdentifiables_UnresolvedIdentifiable.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_unresolvedIdentifiables_UnresolvedIdentifiable.gif
new file mode 100644
index 0000000..7936184
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateGraph_unresolvedIdentifiables_UnresolvedIdentifiable.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
new file mode 100644
index 0000000..b1a463f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModel_edgeDecorators_EdgeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_edgeDecorators_EdgeDecorator.gif
new file mode 100644
index 0000000..6878b7d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_edgeDecorators_EdgeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphDecorators_GraphDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphDecorators_GraphDecorator.gif
new file mode 100644
index 0000000..dd7b998
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphDecorators_GraphDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphs_Graph.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphs_Graph.gif
new file mode 100644
index 0000000..79c1899
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_graphs_Graph.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModel_models_Model.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_models_Model.gif
new file mode 100644
index 0000000..6c339a5
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_models_Model.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModel_nodeDecorators_NodeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_nodeDecorators_NodeDecorator.gif
new file mode 100644
index 0000000..d7c738e
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModel_nodeDecorators_NodeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_BooleanSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_BooleanSequenceModifier.gif
new file mode 100644
index 0000000..3b5e749
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_BooleanSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleNOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleNOPModifier.gif
new file mode 100644
index 0000000..4699e94
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleNOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleRangeModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleRangeModifier.gif
new file mode 100644
index 0000000..3b5e749
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleRangeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleSequenceModifier.gif
new file mode 100644
index 0000000..91619bc
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_DoubleSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerNOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerNOPModifier.gif
new file mode 100644
index 0000000..fc1a2e8
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerNOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerRangeModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerRangeModifier.gif
new file mode 100644
index 0000000..3ddab58
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerRangeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerSequenceModifier.gif
new file mode 100644
index 0000000..392d0d1
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_IntegerSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongNOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongNOPModifier.gif
new file mode 100644
index 0000000..2a3bcb3
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongNOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongRangeModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongRangeModifier.gif
new file mode 100644
index 0000000..845de0f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongRangeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongSequenceModifier.gif
new file mode 100644
index 0000000..6cb3a27
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_LongSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_NOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_NOPModifier.gif
new file mode 100644
index 0000000..de1bf6d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_NOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeNOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeNOPModifier.gif
new file mode 100644
index 0000000..6cb3a27
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeNOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeRangeModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeRangeModifier.gif
new file mode 100644
index 0000000..261e05c
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeRangeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeSequenceModifier.gif
new file mode 100644
index 0000000..2f75407
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_STEMTimeSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_SequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_SequenceModifier.gif
new file mode 100644
index 0000000..55ee60b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_SequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringNOPModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringNOPModifier.gif
new file mode 100644
index 0000000..a5bf2ed
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringNOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringSequenceModifier.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringSequenceModifier.gif
new file mode 100644
index 0000000..85e7906
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateModifier_featureModifiers_StringSequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_AbsoluteTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_AbsoluteTimeTest.gif
new file mode 100644
index 0000000..8d9cbe9
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_AbsoluteTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_And.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_And.gif
new file mode 100644
index 0000000..b3fdbea
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_And.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_ElapsedTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_ElapsedTimeTest.gif
new file mode 100644
index 0000000..e96c27f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_ElapsedTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_False.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_False.gif
new file mode 100644
index 0000000..6a5dfd4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_False.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_IdentifiablePredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_IdentifiablePredicateExpression.gif
new file mode 100644
index 0000000..05a1474
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_IdentifiablePredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Not.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Not.gif
new file mode 100644
index 0000000..6a5dfd4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Not.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Or.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Or.gif
new file mode 100644
index 0000000..1de2244
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_Or.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateExpression.gif
new file mode 100644
index 0000000..054211b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateReference.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateReference.gif
new file mode 100644
index 0000000..d0b4078
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_PredicateReference.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_TimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_TimeTest.gif
new file mode 100644
index 0000000..b7fdb14
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_TimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_True.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_True.gif
new file mode 100644
index 0000000..bfe2863
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateNaryBooleanOperator_operands_True.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_AbsoluteTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_AbsoluteTimeTest.gif
new file mode 100644
index 0000000..68005ae
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_AbsoluteTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_And.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_And.gif
new file mode 100644
index 0000000..92d407e
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_And.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_ElapsedTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_ElapsedTimeTest.gif
new file mode 100644
index 0000000..3353cf6
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_ElapsedTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_False.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_False.gif
new file mode 100644
index 0000000..0cf27b2
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_False.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_IdentifiablePredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_IdentifiablePredicateExpression.gif
new file mode 100644
index 0000000..a303761
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_IdentifiablePredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Not.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Not.gif
new file mode 100644
index 0000000..0cf27b2
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Not.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Or.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Or.gif
new file mode 100644
index 0000000..4f7ee52
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_Or.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateExpression.gif
new file mode 100644
index 0000000..0a9ad1c
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateReference.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateReference.gif
new file mode 100644
index 0000000..da5f95c
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_PredicateReference.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_TimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_TimeTest.gif
new file mode 100644
index 0000000..fa814dc
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_TimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_True.gif b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_True.gif
new file mode 100644
index 0000000..9fcf2c7
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreatePredicateExpression_predicate_True.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_model_Model.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_model_Model.gif
new file mode 100644
index 0000000..90f4828
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_model_Model.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_Decorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_Decorator.gif
new file mode 100644
index 0000000..b822374
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_Decorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_EdgeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_EdgeDecorator.gif
new file mode 100644
index 0000000..42450a8
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_EdgeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_GraphDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_GraphDecorator.gif
new file mode 100644
index 0000000..fa6a5ee
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_GraphDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_NodeDecorator.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_NodeDecorator.gif
new file mode 100644
index 0000000..ebe40ea
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_scenarioDecorators_NodeDecorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_RealTimeSequencer.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_RealTimeSequencer.gif
new file mode 100644
index 0000000..13449f5
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_RealTimeSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_SequentialSequencer.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_SequentialSequencer.gif
new file mode 100644
index 0000000..22caf47
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_sequencer_SequentialSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_solver_Solver.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_solver_Solver.gif
new file mode 100644
index 0000000..0dd99ba
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateScenario_solver_Solver.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_currentTime_STEMTime.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_currentTime_STEMTime.gif
new file mode 100644
index 0000000..1b453f4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_currentTime_STEMTime.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_endTime_STEMTime.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_endTime_STEMTime.gif
new file mode 100644
index 0000000..1b453f4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_endTime_STEMTime.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_startTime_STEMTime.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_startTime_STEMTime.gif
new file mode 100644
index 0000000..1b453f4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateSequencer_startTime_STEMTime.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateTimeTest_time_STEMTime.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateTimeTest_time_STEMTime.gif
new file mode 100644
index 0000000..de1bf6d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateTimeTest_time_STEMTime.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_AbsoluteTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_AbsoluteTimeTest.gif
new file mode 100644
index 0000000..986fb9c
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_AbsoluteTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_And.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_And.gif
new file mode 100644
index 0000000..96b347e
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_And.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_ElapsedTimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_ElapsedTimeTest.gif
new file mode 100644
index 0000000..af3a295
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_ElapsedTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_False.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_False.gif
new file mode 100644
index 0000000..07dea40
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_False.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_IdentifiablePredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_IdentifiablePredicateExpression.gif
new file mode 100644
index 0000000..2120258
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_IdentifiablePredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Not.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Not.gif
new file mode 100644
index 0000000..07dea40
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Not.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Or.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Or.gif
new file mode 100644
index 0000000..236984d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_Or.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateExpression.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateExpression.gif
new file mode 100644
index 0000000..e500955
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateReference.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateReference.gif
new file mode 100644
index 0000000..76e6f3b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_PredicateReference.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_TimeTest.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_TimeTest.gif
new file mode 100644
index 0000000..fe9abb2
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_TimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_True.gif b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_True.gif
new file mode 100644
index 0000000..c0e9653
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/ctool16/CreateUnaryBooleanOperator_operand_True.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/.cvsignore b/org.eclipse.stem.core/icons/full/customobj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Decorator.gif b/org.eclipse.stem.core/icons/full/customobj16/Decorator.gif
new file mode 100644
index 0000000..3c376ad
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Decorator.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/DublinCore.gif b/org.eclipse.stem.core/icons/full/customobj16/DublinCore.gif
new file mode 100644
index 0000000..b0c5273
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/DublinCore.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/DynamicLabel.gif b/org.eclipse.stem.core/icons/full/customobj16/DynamicLabel.gif
new file mode 100644
index 0000000..1b9e353
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/DynamicLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Edge.gif b/org.eclipse.stem.core/icons/full/customobj16/Edge.gif
new file mode 100644
index 0000000..6addb9e
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Edge.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Experiment.gif b/org.eclipse.stem.core/icons/full/customobj16/Experiment.gif
new file mode 100644
index 0000000..d6de3b1
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Experiment.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Graph.gif b/org.eclipse.stem.core/icons/full/customobj16/Graph.gif
new file mode 100644
index 0000000..570b355
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Graph.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/GraphModelFile.gif b/org.eclipse.stem.core/icons/full/customobj16/GraphModelFile.gif
new file mode 100644
index 0000000..d5216ba
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Label.gif b/org.eclipse.stem.core/icons/full/customobj16/Label.gif
new file mode 100644
index 0000000..c5ff3d9
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Label.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Model.gif b/org.eclipse.stem.core/icons/full/customobj16/Model.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Model.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/ModelModelFile.gif b/org.eclipse.stem.core/icons/full/customobj16/ModelModelFile.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Modifier.gif b/org.eclipse.stem.core/icons/full/customobj16/Modifier.gif
new file mode 100644
index 0000000..7038cd8
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Modifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Node.gif b/org.eclipse.stem.core/icons/full/customobj16/Node.gif
new file mode 100644
index 0000000..76148f8
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Node.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Predicate.gif b/org.eclipse.stem.core/icons/full/customobj16/Predicate.gif
new file mode 100644
index 0000000..46b758d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Predicate.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/RealTimeSequencer.gif b/org.eclipse.stem.core/icons/full/customobj16/RealTimeSequencer.gif
new file mode 100644
index 0000000..bbc4fca
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/RealTimeSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Scenario.gif b/org.eclipse.stem.core/icons/full/customobj16/Scenario.gif
new file mode 100644
index 0000000..72888d5
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Scenario.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/ScenarioModelFile.gif b/org.eclipse.stem.core/icons/full/customobj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..272daff
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Sequencer.gif b/org.eclipse.stem.core/icons/full/customobj16/Sequencer.gif
new file mode 100644
index 0000000..ea7ed9b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Sequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/StaticLabel.gif b/org.eclipse.stem.core/icons/full/customobj16/StaticLabel.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/StaticLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/customobj16/Trigger.gif b/org.eclipse.stem.core/icons/full/customobj16/Trigger.gif
new file mode 100644
index 0000000..a316038
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/customobj16/Trigger.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/.cvsignore b/org.eclipse.stem.core/icons/full/obj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.core/icons/full/obj16/AbsoluteTimeTest.gif b/org.eclipse.stem.core/icons/full/obj16/AbsoluteTimeTest.gif
new file mode 100644
index 0000000..cdd3b76
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/AbsoluteTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/And.gif b/org.eclipse.stem.core/icons/full/obj16/And.gif
new file mode 100644
index 0000000..53500da
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/And.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/CommonModelFile.gif b/org.eclipse.stem.core/icons/full/obj16/CommonModelFile.gif
new file mode 100644
index 0000000..22ec75b
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/CommonModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/DoubleModifier.gif b/org.eclipse.stem.core/icons/full/obj16/DoubleModifier.gif
new file mode 100644
index 0000000..c8d381f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/DoubleModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/ElapsedTimeTest.gif b/org.eclipse.stem.core/icons/full/obj16/ElapsedTimeTest.gif
new file mode 100644
index 0000000..9250fec
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/ElapsedTimeTest.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/False.gif b/org.eclipse.stem.core/icons/full/obj16/False.gif
new file mode 100644
index 0000000..89ad5da
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/False.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/GraphModelFile.gif b/org.eclipse.stem.core/icons/full/obj16/GraphModelFile.gif
new file mode 100644
index 0000000..6984fd4
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Identifiable.gif b/org.eclipse.stem.core/icons/full/obj16/Identifiable.gif
new file mode 100644
index 0000000..7c2aaac
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Identifiable.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/IdentifiableFilter.gif b/org.eclipse.stem.core/icons/full/obj16/IdentifiableFilter.gif
new file mode 100644
index 0000000..5a9bc75
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/IdentifiableFilter.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/IdentifiablePredicateExpression.gif b/org.eclipse.stem.core/icons/full/obj16/IdentifiablePredicateExpression.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/IdentifiablePredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/IntegerModifier.gif b/org.eclipse.stem.core/icons/full/obj16/IntegerModifier.gif
new file mode 100644
index 0000000..98b351f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/IntegerModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/LongModifier.gif b/org.eclipse.stem.core/icons/full/obj16/LongModifier.gif
new file mode 100644
index 0000000..a17dc7d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/LongModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/ModelModelFile.gif b/org.eclipse.stem.core/icons/full/obj16/ModelModelFile.gif
new file mode 100644
index 0000000..9d55bb2
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/NOPModifier.gif b/org.eclipse.stem.core/icons/full/obj16/NOPModifier.gif
new file mode 100644
index 0000000..badaab0
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/NOPModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/NodeLabel.gif b/org.eclipse.stem.core/icons/full/obj16/NodeLabel.gif
new file mode 100644
index 0000000..c00aedf
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/NodeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Not.gif b/org.eclipse.stem.core/icons/full/obj16/Not.gif
new file mode 100644
index 0000000..89ad5da
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Not.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Or.gif b/org.eclipse.stem.core/icons/full/obj16/Or.gif
new file mode 100644
index 0000000..c673a52
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Or.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Predicate.gif b/org.eclipse.stem.core/icons/full/obj16/Predicate.gif
new file mode 100644
index 0000000..7bac4fd
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Predicate.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/PredicateExpression.gif b/org.eclipse.stem.core/icons/full/obj16/PredicateExpression.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/PredicateExpression.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/PredicateReference.gif b/org.eclipse.stem.core/icons/full/obj16/PredicateReference.gif
new file mode 100644
index 0000000..2124f3e
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/PredicateReference.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/RangeModifier.gif b/org.eclipse.stem.core/icons/full/obj16/RangeModifier.gif
new file mode 100644
index 0000000..a17dc7d
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/RangeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/STEMTime.gif b/org.eclipse.stem.core/icons/full/obj16/STEMTime.gif
new file mode 100644
index 0000000..badaab0
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/STEMTime.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/STEMTimeModifier.gif b/org.eclipse.stem.core/icons/full/obj16/STEMTimeModifier.gif
new file mode 100644
index 0000000..7c2aaac
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/STEMTimeModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/ScenarioModelFile.gif b/org.eclipse.stem.core/icons/full/obj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..366f9ff
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/SequenceModifier.gif b/org.eclipse.stem.core/icons/full/obj16/SequenceModifier.gif
new file mode 100644
index 0000000..be22463
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/SequenceModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Solver.gif b/org.eclipse.stem.core/icons/full/obj16/Solver.gif
new file mode 100644
index 0000000..98b351f
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Solver.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Test.gif b/org.eclipse.stem.core/icons/full/obj16/Test.gif
new file mode 100644
index 0000000..45731fe
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Test.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/Trigger.gif b/org.eclipse.stem.core/icons/full/obj16/Trigger.gif
new file mode 100644
index 0000000..ea58a65
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/Trigger.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/obj16/True.gif b/org.eclipse.stem.core/icons/full/obj16/True.gif
new file mode 100644
index 0000000..45731fe
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/obj16/True.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/wizban/NewCommon.gif b/org.eclipse.stem.core/icons/full/wizban/NewCommon.gif
new file mode 100644
index 0000000..259704c
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/wizban/NewCommon.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/wizban/NewGraph.gif b/org.eclipse.stem.core/icons/full/wizban/NewGraph.gif
new file mode 100644
index 0000000..f3829ed
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/wizban/NewGraph.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/wizban/NewModel.gif b/org.eclipse.stem.core/icons/full/wizban/NewModel.gif
new file mode 100644
index 0000000..dcf7f89
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/wizban/NewModel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/icons/full/wizban/NewScenario.gif b/org.eclipse.stem.core/icons/full/wizban/NewScenario.gif
new file mode 100644
index 0000000..e85f1da
--- /dev/null
+++ b/org.eclipse.stem.core/icons/full/wizban/NewScenario.gif
Binary files differ
diff --git a/org.eclipse.stem.core/model/common.ecore b/org.eclipse.stem.core/model/common.ecore
new file mode 100644
index 0000000..571d9b5
--- /dev/null
+++ b/org.eclipse.stem.core/model/common.ecore
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="common"
+    nsURI="http:///org/eclipse/stem/core/common.ecore" nsPrefix="org.eclipse.stem.core.common">
+  <eClassifiers xsi:type="ecore:EClass" name="DublinCore">
+    <eOperations name="populate" eType="#//DublinCore"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="identifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="creator" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="format" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="publisher" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="coverage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contributor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="relation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rights" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subject" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="bibliographicCitation"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="created" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="license" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="spatial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="valid" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Identifiable" abstract="true">
+    <eOperations name="sane" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uRI" lowerBound="1" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeURI" lowerBound="1"
+        eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dublinCore" lowerBound="1"
+        eType="#//DublinCore" containment="true" resolveProxies="false"/>
+    <eGenericSuperTypes eClassifier="#//Comparable">
+      <eTypeArguments eClassifier="#//Identifiable"/>
+    </eGenericSuperTypes>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Comparable" instanceClassName="java.lang.Comparable"
+      abstract="true" interface="true">
+    <eTypeParameters name="T"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IdentifiableFilter"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/core.genmodel b/org.eclipse.stem.core/model/core.genmodel
new file mode 100644
index 0000000..77289e7
--- /dev/null
+++ b/org.eclipse.stem.core/model/core.genmodel
@@ -0,0 +1,451 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.core/src"

+    editDirectory="/org.eclipse.stem.core/src" editorDirectory="/org.eclipse.stem.ui/src"

+    modelPluginID="org.eclipse.stem.core" modelName="Core" modelPluginClass="" editorPluginClass="org.eclipse.stem.core.common.presentation.CoreEditorPlugin"

+    nonNLSMarkers="true" testsDirectory="/org.eclipse.stem.tests.core/src" importerID="org.eclipse.emf.importer.ecore"

+    complianceLevel="5.0" copyrightFields="false" usedGenPackages="platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">

+  <foreignModel>common.ecore</foreignModel>

+  <foreignModel>experiment.ecore</foreignModel>

+  <foreignModel>graph.ecore</foreignModel>

+  <foreignModel>model.ecore</foreignModel>

+  <foreignModel>modifier.ecore</foreignModel>

+  <foreignModel>predicate.ecore</foreignModel>

+  <foreignModel>scenario.ecore</foreignModel>

+  <foreignModel>sequencer.ecore</foreignModel>

+  <foreignModel>trigger.ecore</foreignModel>

+  <foreignModel>solver.ecore</foreignModel>

+  <genPackages prefix="Common" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      contentTypeIdentifier="" ecorePackage="common.ecore#/">

+    <genDataTypes ecoreDataType="common.ecore#//URI"/>

+    <genClasses image="false" ecoreClass="common.ecore#//DublinCore">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/title"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/identifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/description"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/creator"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/date"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/format"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/publisher"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/coverage"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/contributor"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/relation"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/rights"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/source"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/subject"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/type"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/language"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/bibliographicCitation"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/created"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/license"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/required"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/spatial"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//DublinCore/valid"/>

+      <genOperations ecoreOperation="common.ecore#//DublinCore/populate"/>

+    </genClasses>

+    <genClasses ecoreClass="common.ecore#//Identifiable">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Identifiable/uRI"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Identifiable/typeURI"/>

+      <genFeatures property="None" createChild="false" propertyCategory="" ecoreFeature="ecore:EReference common.ecore#//Identifiable/dublinCore"/>

+      <genOperations ecoreOperation="common.ecore#//Identifiable/sane"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="common.ecore#//Comparable">

+      <genTypeParameters ecoreTypeParameter="common.ecore#//Comparable/T"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Experiment" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="experiment.ecore#/">

+    <genDataTypes ecoreDataType="experiment.ecore#//URI"/>

+    <genClasses image="false" ecoreClass="experiment.ecore#//Experiment">

+      <genFeatures property="None" children="true" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference experiment.ecore#//Experiment/modifiers"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute experiment.ecore#//Experiment/complete"/>

+      <genFeatures property="None" children="true" createChild="false" propertyCategory=""

+          propertyDescription="" ecoreFeature="ecore:EReference experiment.ecore#//Experiment/scenario"/>

+      <genOperations ecoreOperation="experiment.ecore#//Experiment/updateScenario"/>

+      <genOperations ecoreOperation="experiment.ecore#//Experiment/initScenario"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Graph" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="graph.ecore#/">

+    <genDataTypes ecoreDataType="graph.ecore#//URI"/>

+    <genDataTypes ecoreDataType="graph.ecore#//IllegalArgumentException"/>

+    <genClasses image="false" ecoreClass="graph.ecore#//DynamicLabel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//DynamicLabel/nextValueValid"/>

+      <genFeatures property="None" createChild="false" propertyDescription="" ecoreFeature="ecore:EReference graph.ecore#//DynamicLabel/nextValue"/>

+      <genFeatures property="None" notify="false" createChild="false" propertyCategory=""

+          propertyDescription="" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//DynamicLabel/decorator"/>

+      <genOperations ecoreOperation="graph.ecore#//DynamicLabel/reset"/>

+      <genOperations ecoreOperation="graph.ecore#//DynamicLabel/switchToNextValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//DynamicNodeLabel"/>

+    <genClasses image="false" ecoreClass="graph.ecore#//Edge">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//Edge/a"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Edge/nodeAURI"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//Edge/b"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Edge/nodeBURI"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference graph.ecore#//Edge/label"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Edge/directed"/>

+      <genOperations ecoreOperation="graph.ecore#//Edge/getOtherNode">

+        <genParameters ecoreParameter="graph.ecore#//Edge/getOtherNode/node"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Edge/isDirectedAt">

+        <genParameters ecoreParameter="graph.ecore#//Edge/isDirectedAt/node"/>

+      </genOperations>

+    </genClasses>

+    <genClasses provider="Stateful" image="false" ecoreClass="graph.ecore#//Graph">

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/edges"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/nodes"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/graphLabels"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/nodeLabels"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference graph.ecore#//Graph/dynamicLabels"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Graph/numEdges"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Graph/numNodes"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Graph/numGraphLabels"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Graph/numNodeLabels"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Graph/numDynamicLabels"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/unresolvedIdentifiables"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Graph/decorators"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference graph.ecore#//Graph/time"/>

+      <genOperations ecoreOperation="graph.ecore#//Graph/getNodeLabelsByTypeURI">

+        <genParameters ecoreParameter="graph.ecore#//Graph/getNodeLabelsByTypeURI/typeURI"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/addGraph">

+        <genParameters ecoreParameter="graph.ecore#//Graph/addGraph/graph"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/putEdge">

+        <genParameters ecoreParameter="graph.ecore#//Graph/putEdge/edge"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/getEdge">

+        <genParameters ecoreParameter="graph.ecore#//Graph/getEdge/uri"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/putNode">

+        <genParameters ecoreParameter="graph.ecore#//Graph/putNode/node"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/getNode">

+        <genParameters ecoreParameter="graph.ecore#//Graph/getNode/uri"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/putNodeLabel">

+        <genParameters ecoreParameter="graph.ecore#//Graph/putNodeLabel/label"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/getNodeLabel">

+        <genParameters ecoreParameter="graph.ecore#//Graph/getNodeLabel/uri"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/putGraphLabel">

+        <genParameters ecoreParameter="graph.ecore#//Graph/putGraphLabel/label"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/getGraphLabel">

+        <genParameters ecoreParameter="graph.ecore#//Graph/getGraphLabel/uri"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/addDynamicLabel">

+        <genParameters ecoreParameter="graph.ecore#//Graph/addDynamicLabel/dynamiclabel"/>

+      </genOperations>

+      <genOperations ecoreOperation="graph.ecore#//Graph/switchToNextValue">

+        <genParameters ecoreParameter="graph.ecore#//Graph/switchToNextValue/currentTime"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//Label">

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//Label/uRIOfIdentifiableToBeLabeled"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Label/currentValue"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference graph.ecore#//Label/identifiable"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//LabelValue">

+      <genOperations ecoreOperation="graph.ecore#//LabelValue/reset"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//Node">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//Node/edges"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//Node/labels"/>

+    </genClasses>

+    <genClasses ecoreClass="graph.ecore#//NodeLabel">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//NodeLabel/node"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//StaticNodeLabel"/>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//UnresolvedIdentifiable">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//UnresolvedIdentifiable/scenario"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//UnresolvedIdentifiable/model"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//UnresolvedIdentifiable/graph"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//UnresolvedIdentifiable/identifiable"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//UnresolvedIdentifiable/unresolvedURI"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//UnresolvedIdentifiable/fieldName"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//URIToIdentifiableMapEntry">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//URIToIdentifiableMapEntry/key"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//URIToIdentifiableMapEntry/value"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//SanityChecker"/>

+    <genClasses image="false" ecoreClass="graph.ecore#//DynamicEdgeLabel"/>

+    <genClasses image="false" ecoreClass="graph.ecore#//EdgeLabel">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//EdgeLabel/edge"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//StaticEdgeLabel"/>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//URIToEdgeMapEntry">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//URIToEdgeMapEntry/key"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference graph.ecore#//URIToEdgeMapEntry/value"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//URIToNodeMapEntry">

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//URIToNodeMapEntry/key"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference graph.ecore#//URIToNodeMapEntry/value"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//URIToLabelMapEntry">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//URIToLabelMapEntry/key"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference graph.ecore#//URIToLabelMapEntry/value"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="graph.ecore#//URIToNodeLabelMapEntry">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute graph.ecore#//URIToNodeLabelMapEntry/key"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference graph.ecore#//URIToNodeLabelMapEntry/value"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="graph.ecore#//StaticLabel"/>

+  </genPackages>

+  <genPackages prefix="Model" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="model.ecore#/">

+    <genDataTypes ecoreDataType="model.ecore#//URI"/>

+    <genClasses image="false" ecoreClass="model.ecore#//Decorator">

+      <genFeatures property="None" notify="false" children="true" createChild="false"

+          propertySortChoices="true" ecoreFeature="ecore:EReference model.ecore#//Decorator/labelsToUpdate"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference model.ecore#//Decorator/graph"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//Decorator/enabled"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//Decorator/graphDecorated"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//Decorator/progress"/>

+      <genOperations ecoreOperation="model.ecore#//Decorator/decorateGraph"/>

+      <genOperations ecoreOperation="model.ecore#//Decorator/updateLabels">

+        <genParameters ecoreParameter="model.ecore#//Decorator/updateLabels/time"/>

+        <genParameters ecoreParameter="model.ecore#//Decorator/updateLabels/timerPeriod"/>

+        <genParameters ecoreParameter="model.ecore#//Decorator/updateLabels/cycle"/>

+      </genOperations>

+      <genOperations ecoreOperation="model.ecore#//Decorator/resetLabels"/>

+      <genOperations ecoreOperation="model.ecore#//Decorator/getLabelsToUpdate">

+        <genParameters ecoreParameter="model.ecore#//Decorator/getLabelsToUpdate/partition"/>

+        <genParameters ecoreParameter="model.ecore#//Decorator/getLabelsToUpdate/max"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="model.ecore#//EdgeDecorator"/>

+    <genClasses image="false" ecoreClass="model.ecore#//GraphDecorator"/>

+    <genClasses image="false" ecoreClass="model.ecore#//Model">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference model.ecore#//Model/models"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference model.ecore#//Model/graphs"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference model.ecore#//Model/graphDecorators"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference model.ecore#//Model/nodeDecorators"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference model.ecore#//Model/edgeDecorators"/>

+      <genOperations ecoreOperation="model.ecore#//Model/getCanonicalGraph">

+        <genParameters ecoreParameter="model.ecore#//Model/getCanonicalGraph/uri"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="model.ecore#//NodeDecorator"/>

+    <genClasses ecoreClass="model.ecore#//STEMTime">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute model.ecore#//STEMTime/time"/>

+      <genOperations ecoreOperation="model.ecore#//STEMTime/addIncrement">

+        <genParameters ecoreParameter="model.ecore#//STEMTime/addIncrement/timeIncrement"/>

+      </genOperations>

+      <genOperations ecoreOperation="model.ecore#//STEMTime/hashCode"/>

+      <genOperations ecoreOperation="model.ecore#//STEMTime/equals">

+        <genParameters ecoreParameter="model.ecore#//STEMTime/equals/obj"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="model.ecore#//Comparable">

+      <genTypeParameters ecoreTypeParameter="model.ecore#//Comparable/T"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Modifier" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="modifier.ecore#/">

+    <genDataTypes ecoreDataType="modifier.ecore#//URI"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//DoubleNOPModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//DoubleRangeModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleRangeModifier/startValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleRangeModifier/endValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleRangeModifier/increment"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleRangeModifier/nextValue"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleRangeModifier/originalValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//DoubleSequenceModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//DoubleSequenceModifier/sequence"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//FeatureModifier">

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference modifier.ecore#//FeatureModifier/target"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference modifier.ecore#//FeatureModifier/eStructuralFeature"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//FeatureModifier/featureName"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//FeatureModifier/featureId"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//FeatureModifier/currentValueText"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//FeatureModifier/complete"/>

+      <genOperations ecoreOperation="modifier.ecore#//FeatureModifier/updateFeature"/>

+      <genOperations ecoreOperation="modifier.ecore#//FeatureModifier/reset"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//IntegerNOPModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//IntegerRangeModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerRangeModifier/startValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerRangeModifier/endValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerRangeModifier/increment"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerRangeModifier/nextValue"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerRangeModifier/originalValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//IntegerSequenceModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//IntegerSequenceModifier/sequence"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//LongNOPModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//LongRangeModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongRangeModifier/startValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongRangeModifier/endValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongRangeModifier/increment"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongRangeModifier/nextValue"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongRangeModifier/originalValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//LongSequenceModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//LongSequenceModifier/sequence"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//Modifier">

+      <genFeatures property="Readonly" notify="false" createChild="false" propertyDescription=""

+          ecoreFeature="ecore:EAttribute modifier.ecore#//Modifier/targetURI"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference modifier.ecore#//Modifier/featureModifiers"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//Modifier/complete"/>

+      <genOperations ecoreOperation="modifier.ecore#//Modifier/updateScenario">

+        <genParameters ecoreParameter="modifier.ecore#//Modifier/updateScenario/baseScenario"/>

+      </genOperations>

+      <genOperations ecoreOperation="modifier.ecore#//Modifier/reset"/>

+    </genClasses>

+    <genClasses ecoreClass="modifier.ecore#//NOPModifier"/>

+    <genClasses ecoreClass="modifier.ecore#//RangeModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//STEMTimeNOPModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//STEMTimeRangeModifier">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modifier.ecore#//STEMTimeRangeModifier/startValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modifier.ecore#//STEMTimeRangeModifier/endValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//STEMTimeRangeModifier/increment"/>

+      <genFeatures notify="false" createChild="false" ecoreFeature="ecore:EReference modifier.ecore#//STEMTimeRangeModifier/nextValue"/>

+      <genFeatures property="None" notify="false" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference modifier.ecore#//STEMTimeRangeModifier/originalValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//STEMTimeSequenceModifier">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference modifier.ecore#//STEMTimeSequenceModifier/sequence"/>

+    </genClasses>

+    <genClasses ecoreClass="modifier.ecore#//SequenceModifier">

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//SequenceModifier/sequenceSize"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//SequenceModifier/currentSequenceIndex"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//SequenceModifier/nextValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//SequenceModifier/originalValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="modifier.ecore#//StringNOPModifier"/>

+    <genClasses image="false" ecoreClass="modifier.ecore#//StringSequenceModifier">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute modifier.ecore#//StringSequenceModifier/sequence"/>

+    </genClasses>

+    <genClasses provider="None" image="false" ecoreClass="modifier.ecore#//Modifiable"/>

+  </genPackages>

+  <genPackages prefix="Predicate" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="predicate.ecore#/">

+    <genClasses ecoreClass="predicate.ecore#//And"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//BooleanExpression"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//BooleanOperator"/>

+    <genClasses ecoreClass="predicate.ecore#//False"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//NaryBooleanOperator">

+      <genFeatures property="None" children="true" createChild="true" propertySortChoices="true"

+          ecoreFeature="ecore:EReference predicate.ecore#//NaryBooleanOperator/operands"/>

+    </genClasses>

+    <genClasses ecoreClass="predicate.ecore#//Not"/>

+    <genClasses ecoreClass="predicate.ecore#//Or"/>

+    <genClasses ecoreClass="predicate.ecore#//Predicate">

+      <genOperations ecoreOperation="predicate.ecore#//Predicate/evaluate">

+        <genParameters ecoreParameter="predicate.ecore#//Predicate/evaluate/time"/>

+        <genParameters ecoreParameter="predicate.ecore#//Predicate/evaluate/timerPeriod"/>

+        <genParameters ecoreParameter="predicate.ecore#//Predicate/evaluate/action"/>

+      </genOperations>

+    </genClasses>

+    <genClasses ecoreClass="predicate.ecore#//PredicateReference">

+      <genFeatures property="None" children="true" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference predicate.ecore#//PredicateReference/predicate"/>

+    </genClasses>

+    <genClasses ecoreClass="predicate.ecore#//Test"/>

+    <genClasses ecoreClass="predicate.ecore#//True"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//UnaryBooleanOperator">

+      <genFeatures property="None" children="true" createChild="true" propertySortChoices="true"

+          ecoreFeature="ecore:EReference predicate.ecore#//UnaryBooleanOperator/operand"/>

+    </genClasses>

+    <genClasses ecoreClass="predicate.ecore#//PredicateExpression">

+      <genFeatures property="None" children="true" createChild="true" propertySortChoices="true"

+          ecoreFeature="ecore:EReference predicate.ecore#//PredicateExpression/predicate"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="predicate.ecore#//IdentifiablePredicate"/>

+    <genClasses ecoreClass="predicate.ecore#//IdentifiablePredicateExpression"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//IdentifiableTest"/>

+    <genClasses image="false" ecoreClass="predicate.ecore#//TimeTest"/>

+    <genClasses ecoreClass="predicate.ecore#//AbsoluteTimeTest">

+      <genFeatures createChild="false" ecoreFeature="ecore:EReference predicate.ecore#//AbsoluteTimeTest/time"/>

+    </genClasses>

+    <genClasses ecoreClass="predicate.ecore#//ElapsedTimeTest">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute predicate.ecore#//ElapsedTimeTest/referenceTimeValid"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute predicate.ecore#//ElapsedTimeTest/elapsedMilliseconds"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute predicate.ecore#//ElapsedTimeTest/numberofDays"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference predicate.ecore#//ElapsedTimeTest/referenceTime"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Scenario" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="scenario.ecore#/">

+    <genClasses image="false" ecoreClass="scenario.ecore#//Scenario">

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference scenario.ecore#//Scenario/model"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference scenario.ecore#//Scenario/sequencer"/>

+      <genFeatures property="None" children="true" createChild="false" ecoreFeature="ecore:EReference scenario.ecore#//Scenario/scenarioDecorators"/>

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference scenario.ecore#//Scenario/canonicalGraph"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute scenario.ecore#//Scenario/progress"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference scenario.ecore#//Scenario/solver"/>

+      <genOperations ecoreOperation="scenario.ecore#//Scenario/step"/>

+      <genOperations ecoreOperation="scenario.ecore#//Scenario/reset"/>

+      <genOperations ecoreOperation="scenario.ecore#//Scenario/initialize"/>

+      <genOperations ecoreOperation="scenario.ecore#//Scenario/produceTitle"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Sequencer" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="sequencer.ecore#/">

+    <genClasses image="false" ecoreClass="sequencer.ecore#//RealTimeSequencer"/>

+    <genClasses image="false" ecoreClass="sequencer.ecore#//Sequencer">

+      <genFeatures createChild="false" ecoreFeature="ecore:EReference sequencer.ecore#//Sequencer/startTime"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EReference sequencer.ecore#//Sequencer/endTime"/>

+      <genFeatures property="Readonly" createChild="false" propertyDescription=""

+          ecoreFeature="ecore:EReference sequencer.ecore#//Sequencer/currentTime"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference sequencer.ecore#//Sequencer/nextTime"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/timeDelta"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/duration"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/timeToStop"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/workComplete"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/workIncrement"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//Sequencer/cycle"/>

+      <genOperations ecoreOperation="sequencer.ecore#//Sequencer/reset"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="sequencer.ecore#//SequentialSequencer">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sequencer.ecore#//SequentialSequencer/timeIncrement"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Trigger" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="trigger.ecore#/">

+    <genClasses ecoreClass="trigger.ecore#//Trigger">

+      <genFeatures property="None" children="true" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference trigger.ecore#//Trigger/predicate"/>

+      <genFeatures property="None" children="true" createChild="false" propertySortChoices="true"

+          ecoreFeature="ecore:EReference trigger.ecore#//Trigger/action"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Solver" basePackage="org.eclipse.stem.core" disposableProviderFactory="true"

+      ecorePackage="solver.ecore#/">

+    <genClasses ecoreClass="solver.ecore#//Solver">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EAttribute solver.ecore#//Solver/decorators"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute solver.ecore#//Solver/initialized"/>

+      <genOperations ecoreOperation="solver.ecore#//Solver/step">

+        <genParameters ecoreParameter="solver.ecore#//Solver/step/time"/>

+        <genParameters ecoreParameter="solver.ecore#//Solver/step/timeDelta"/>

+        <genParameters ecoreParameter="solver.ecore#//Solver/step/cycle"/>

+      </genOperations>

+      <genOperations ecoreOperation="solver.ecore#//Solver/reset"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.core/model/experiment.ecore b/org.eclipse.stem.core/model/experiment.ecore
new file mode 100644
index 0000000..9d13a56
--- /dev/null
+++ b/org.eclipse.stem.core/model/experiment.ecore
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="experiment"

+    nsURI="http:///org/eclipse/stem/core/experiment.ecore" nsPrefix="org.eclipse.stem.core.experiment">

+  <eClassifiers xsi:type="ecore:EClass" name="Experiment" eSuperTypes="common.ecore#//Identifiable">

+    <eOperations name="updateScenario" eType="ecore:EClass scenario.ecore#//Scenario"/>

+    <eOperations name="initScenario" eType="ecore:EClass scenario.ecore#//Scenario"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="modifiers" upperBound="-1"

+        eType="ecore:EClass modifier.ecore#//Modifier"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="complete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"

+        changeable="false" volatile="true" transient="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="scenario" eType="ecore:EClass scenario.ecore#//Scenario"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.core/model/graph.ecore b/org.eclipse.stem.core/model/graph.ecore
new file mode 100644
index 0000000..7e121c3
--- /dev/null
+++ b/org.eclipse.stem.core/model/graph.ecore
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="graph"
+    nsURI="http:///org/eclipse/stem/core/graph.ecore" nsPrefix="org.eclipse.stem.core.graph">
+  <eClassifiers xsi:type="ecore:EClass" name="DynamicLabel" abstract="true" eSuperTypes="#//Label">
+    <eOperations name="reset"/>
+    <eOperations name="switchToNextValue"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextValueValid" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nextValue" lowerBound="1"
+        eType="#//LabelValue" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="decorator" eType="ecore:EClass model.ecore#//Decorator"
+        eOpposite="model.ecore#//Decorator/labelsToUpdate"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DynamicNodeLabel" abstract="true" eSuperTypes="#//DynamicLabel #//NodeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Edge" eSuperTypes="common.ecore#//Identifiable modifier.ecore#//Modifiable">
+    <eOperations name="getOtherNode" eType="#//Node" eExceptions="#//IllegalArgumentException">
+      <eParameters name="node" eType="#//Node"/>
+    </eOperations>
+    <eOperations name="isDirectedAt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="node" eType="#//Node"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="a" eType="#//Node"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeAURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="b" eType="#//Node"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeBURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="label" eType="#//EdgeLabel"
+        containment="true" resolveProxies="false" eOpposite="#//EdgeLabel/edge"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="directed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Graph" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="getNodeLabelsByTypeURI" upperBound="-1" eType="#//NodeLabel">
+      <eParameters name="typeURI" eType="#//URI"/>
+    </eOperations>
+    <eOperations name="addGraph">
+      <eParameters name="graph" eType="#//Graph"/>
+      <eParameters name="filter" eType="ecore:EClass common.ecore#//IdentifiableFilter"/>
+    </eOperations>
+    <eOperations name="putEdge">
+      <eParameters name="edge" eType="#//Edge"/>
+    </eOperations>
+    <eOperations name="getEdge" eType="#//Edge">
+      <eParameters name="uri" eType="#//URI"/>
+    </eOperations>
+    <eOperations name="putNode">
+      <eParameters name="node" eType="#//Node"/>
+    </eOperations>
+    <eOperations name="getNode" eType="#//Node">
+      <eParameters name="uri" eType="#//URI"/>
+    </eOperations>
+    <eOperations name="putNodeLabel">
+      <eParameters name="label" eType="#//NodeLabel"/>
+    </eOperations>
+    <eOperations name="getNodeLabel" eType="#//NodeLabel">
+      <eParameters name="uri" eType="#//URI"/>
+    </eOperations>
+    <eOperations name="putGraphLabel">
+      <eParameters name="label" eType="#//Label"/>
+    </eOperations>
+    <eOperations name="getGraphLabel" eType="#//Label">
+      <eParameters name="uri" eType="#//URI"/>
+    </eOperations>
+    <eOperations name="addDynamicLabel">
+      <eParameters name="dynamiclabel" eType="#//DynamicLabel"/>
+    </eOperations>
+    <eOperations name="switchToNextValue">
+      <eParameters name="currentTime" eType="ecore:EClass model.ecore#//STEMTime"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="edges" upperBound="-1"
+        eType="#//URIToEdgeMapEntry" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1"
+        eType="#//URIToNodeMapEntry" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphLabels" upperBound="-1"
+        eType="#//URIToLabelMapEntry" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nodeLabels" upperBound="-1"
+        eType="#//URIToNodeLabelMapEntry" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dynamicLabels" upperBound="-1"
+        eType="#//DynamicLabel"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numEdges" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numNodes" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numGraphLabels" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numNodeLabels" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numDynamicLabels" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="unresolvedIdentifiables"
+        upperBound="-1" eType="#//UnresolvedIdentifiable" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="decorators" upperBound="-1"
+        eType="ecore:EClass model.ecore#//Decorator" containment="true" resolveProxies="false"
+        eOpposite="model.ecore#//Decorator/graph"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="time" eType="ecore:EClass model.ecore#//STEMTime"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Label" abstract="true" eSuperTypes="common.ecore#//Identifiable">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uRIOfIdentifiableToBeLabeled"
+        eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentValue" lowerBound="1"
+        eType="#//LabelValue" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifiable" eType="ecore:EClass common.ecore#//Identifiable"
+        volatile="true" transient="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LabelValue" abstract="true" eSuperTypes="#//SanityChecker">
+    <eOperations name="reset"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Node" eSuperTypes="common.ecore#//Identifiable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="edges" upperBound="-1"
+        eType="#//Edge"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labels" upperBound="-1"
+        eType="#//NodeLabel" eOpposite="#//NodeLabel/node"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NodeLabel" abstract="true" eSuperTypes="#//Label">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="node" eType="#//Node" eOpposite="#//Node/labels"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StaticNodeLabel" abstract="true" eSuperTypes="#//NodeLabel #//StaticLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="UnresolvedIdentifiable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="scenario" eType="ecore:EClass common.ecore#//Identifiable"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="model" eType="ecore:EClass common.ecore#//Identifiable"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graph" eType="ecore:EClass common.ecore#//Identifiable"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="identifiable" eType="ecore:EClass common.ecore#//Identifiable"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="unresolvedURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fieldName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="URIToIdentifiableMapEntry" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass common.ecore#//Identifiable"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SanityChecker" instanceClassName="org.eclipse.stem.core.common.SanityChecker"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DynamicEdgeLabel" abstract="true" eSuperTypes="#//DynamicLabel #//EdgeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="EdgeLabel" abstract="true" eSuperTypes="#//Label">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="edge" eType="#//Edge" eOpposite="#//Edge/label"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StaticEdgeLabel" abstract="true" eSuperTypes="#//EdgeLabel #//StaticLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="URIToEdgeMapEntry" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Edge"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="URIToNodeMapEntry" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Node"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="URIToLabelMapEntry" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Label"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="URIToNodeLabelMapEntry" instanceClassName="java.util.Map$Entry">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//NodeLabel"
+        containment="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StaticLabel" abstract="true" eSuperTypes="#//Label modifier.ecore#//Modifiable"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="IllegalArgumentException" instanceClassName="java.lang.IllegalArgumentException"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/model.ecore b/org.eclipse.stem.core/model/model.ecore
new file mode 100644
index 0000000..0bb7883
--- /dev/null
+++ b/org.eclipse.stem.core/model/model.ecore
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="model"
+    nsURI="http:///org/eclipse/stem/core/model.ecore" nsPrefix="org.eclipse.stem.core.model">
+  <eClassifiers xsi:type="ecore:EClass" name="Decorator" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="decorateGraph"/>
+    <eOperations name="updateLabels">
+      <eParameters name="time" eType="#//STEMTime"/>
+      <eParameters name="timerPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+      <eParameters name="cycle" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    </eOperations>
+    <eOperations name="resetLabels"/>
+    <eOperations name="getLabelsToUpdate">
+      <eGenericType eClassifier="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EEList">
+        <eTypeArguments eClassifier="ecore:EClass graph.ecore#//DynamicLabel"/>
+      </eGenericType>
+      <eParameters name="partition" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+      <eParameters name="max" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labelsToUpdate" upperBound="-1"
+        eType="ecore:EClass graph.ecore#//DynamicLabel" eOpposite="graph.ecore#//DynamicLabel/decorator"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graph" eType="ecore:EClass graph.ecore#//Graph"
+        transient="true" eOpposite="graph.ecore#//Graph/decorators"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="enabled" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="graphDecorated" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="progress" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EdgeDecorator" eSuperTypes="#//Decorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphDecorator" eSuperTypes="#//Decorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Model" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="getCanonicalGraph" eType="ecore:EClass graph.ecore#//Graph">
+      <eParameters name="uri" eType="#//URI"/>
+      <eParameters name="filter" eType="ecore:EClass common.ecore#//IdentifiableFilter"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="models" upperBound="-1"
+        eType="#//Model"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphs" upperBound="-1"
+        eType="ecore:EClass graph.ecore#//Graph"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphDecorators" upperBound="-1"
+        eType="#//GraphDecorator"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nodeDecorators" upperBound="-1"
+        eType="#//NodeDecorator"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="edgeDecorators" upperBound="-1"
+        eType="#//EdgeDecorator"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NodeDecorator" eSuperTypes="#//Decorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="STEMTime">
+    <eOperations name="addIncrement" eType="#//STEMTime">
+      <eParameters name="timeIncrement" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eOperations name="hashCode" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eOperations name="equals" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eParameters name="obj" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="time" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
+    <eGenericSuperTypes eClassifier="#//Comparable">
+      <eTypeArguments eClassifier="#//STEMTime"/>
+    </eGenericSuperTypes>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Comparable" instanceClassName="java.lang.Comparable"
+      abstract="true" interface="true">
+    <eTypeParameters name="T"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/modifier.ecore b/org.eclipse.stem.core/model/modifier.ecore
new file mode 100644
index 0000000..c9e3ab3
--- /dev/null
+++ b/org.eclipse.stem.core/model/modifier.ecore
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="modifier"
+    nsURI="http:///org/eclipse/stem/core/modifier.ecore" nsPrefix="org.eclipse.stem.core.modifier">
+  <eClassifiers xsi:type="ecore:EClass" name="DoubleNOPModifier" eSuperTypes="#//NOPModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DoubleRangeModifier" eSuperTypes="#//RangeModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="-99999999.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="-99999999.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="increment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="-99999999.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DoubleSequenceModifier" eSuperTypes="#//SequenceModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequence" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FeatureModifier" abstract="true">
+    <eOperations name="updateFeature"/>
+    <eOperations name="reset"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="eStructuralFeature" eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EStructuralFeature"
+        transient="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="featureName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="featureId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="currentValueText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        changeable="false" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="complete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegerNOPModifier" eSuperTypes="#//NOPModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegerRangeModifier" eSuperTypes="#//RangeModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="increment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegerSequenceModifier" eSuperTypes="#//SequenceModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequence" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LongNOPModifier" eSuperTypes="#//NOPModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="LongRangeModifier" eSuperTypes="#//RangeModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="increment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-99999999"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-99999999"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LongSequenceModifier" eSuperTypes="#//SequenceModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequence" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Modifier" eSuperTypes="model.ecore#//Decorator">
+    <eOperations name="updateScenario">
+      <eParameters name="baseScenario" eType="ecore:EClass scenario.ecore#//Scenario"/>
+    </eOperations>
+    <eOperations name="reset"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="featureModifiers" upperBound="-1"
+        eType="#//FeatureModifier" containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="complete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NOPModifier" eSuperTypes="#//FeatureModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RangeModifier" abstract="true" eSuperTypes="#//FeatureModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="STEMTimeNOPModifier" eSuperTypes="#//NOPModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="STEMTimeRangeModifier" eSuperTypes="#//RangeModifier">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="startValue" eType="ecore:EClass model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="endValue" eType="ecore:EClass model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="increment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nextValue" eType="ecore:EClass model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="ecore:EClass model.ecore#//STEMTime"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="STEMTimeSequenceModifier" eSuperTypes="#//SequenceModifier">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sequence" upperBound="-1"
+        eType="ecore:EClass model.ecore#//STEMTime"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SequenceModifier" abstract="true" eSuperTypes="#//FeatureModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequenceSize" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="currentSequenceIndex" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nextValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"
+        changeable="false" volatile="true" transient="true" unsettable="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StringNOPModifier" eSuperTypes="#//NOPModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StringSequenceModifier" eSuperTypes="#//SequenceModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequence" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Modifiable" abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SingleValueModifier" abstract="true"
+      eSuperTypes="#//FeatureModifier"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DoubleModifier" eSuperTypes="#//SingleValueModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegerModifier" eSuperTypes="#//SingleValueModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LongModifier" eSuperTypes="#//SingleValueModifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="originalValue" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="STEMTimeModifier" eSuperTypes="#//SingleValueModifier">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="ecore:EClass model.ecore#//STEMTime"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/predicate.ecore b/org.eclipse.stem.core/model/predicate.ecore
new file mode 100644
index 0000000..71d8866
--- /dev/null
+++ b/org.eclipse.stem.core/model/predicate.ecore
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="predicate"

+    nsURI="http:///org/eclipse/stem/core/predicate.ecore" nsPrefix="org.eclipse.stem.core.predicate">

+  <eClassifiers xsi:type="ecore:EClass" name="And" eSuperTypes="#//NaryBooleanOperator"/>

+  <eClassifiers xsi:type="ecore:EClass" name="BooleanExpression" abstract="true" eSuperTypes="#//Predicate"/>

+  <eClassifiers xsi:type="ecore:EClass" name="BooleanOperator" abstract="true" eSuperTypes="#//BooleanExpression"/>

+  <eClassifiers xsi:type="ecore:EClass" name="False" eSuperTypes="#//Test"/>

+  <eClassifiers xsi:type="ecore:EClass" name="NaryBooleanOperator" abstract="true"

+      eSuperTypes="#//BooleanOperator">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="operands" upperBound="-1"

+        eType="#//Predicate" containment="true" resolveProxies="false"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Not" eSuperTypes="#//UnaryBooleanOperator"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Or" eSuperTypes="#//NaryBooleanOperator"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Predicate" abstract="true">

+    <eOperations name="evaluate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="time" eType="ecore:EClass model.ecore#//STEMTime"/>

+      <eParameters name="timerPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>

+      <eParameters name="action" eType="ecore:EClass model.ecore#//Decorator"/>

+    </eOperations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PredicateReference" eSuperTypes="#//Predicate">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="predicate" eType="#//Predicate"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Test" abstract="true" eSuperTypes="#//Predicate"/>

+  <eClassifiers xsi:type="ecore:EClass" name="True" eSuperTypes="#//Test"/>

+  <eClassifiers xsi:type="ecore:EClass" name="UnaryBooleanOperator" abstract="true"

+      eSuperTypes="#//BooleanOperator">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//Predicate"

+        containment="true" resolveProxies="false"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PredicateExpression" eSuperTypes="#//BooleanExpression">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="predicate" eType="#//Predicate"

+        containment="true" resolveProxies="false"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="IdentifiablePredicate" abstract="true"

+      eSuperTypes="common.ecore#//Identifiable #//Predicate"/>

+  <eClassifiers xsi:type="ecore:EClass" name="IdentifiablePredicateExpression" eSuperTypes="#//IdentifiablePredicate #//PredicateExpression"/>

+  <eClassifiers xsi:type="ecore:EClass" name="IdentifiableTest" abstract="true" eSuperTypes="#//IdentifiablePredicate #//Test"/>

+  <eClassifiers xsi:type="ecore:EClass" name="TimeTest" abstract="true" eSuperTypes="#//Test"/>

+  <eClassifiers xsi:type="ecore:EClass" name="AbsoluteTimeTest" eSuperTypes="#//TimeTest">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="time" eType="ecore:EClass model.ecore#//STEMTime"

+        containment="true" resolveProxies="false"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ElapsedTimeTest" eSuperTypes="#//TimeTest">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="referenceTimeValid" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="elapsedMilliseconds" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"

+        changeable="false" transient="true"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numberofDays" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"

+        defaultValueLiteral="0"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="referenceTime" eType="ecore:EClass model.ecore#//STEMTime"

+        containment="true" resolveProxies="false"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.core/model/scenario.ecore b/org.eclipse.stem.core/model/scenario.ecore
new file mode 100644
index 0000000..e32aaa0
--- /dev/null
+++ b/org.eclipse.stem.core/model/scenario.ecore
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="scenario"
+    nsURI="http:///org/eclipse/stem/core/scenario.ecore" nsPrefix="org.eclipse.stem.core.scenario">
+  <eClassifiers xsi:type="ecore:EClass" name="Scenario" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="step" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eOperations name="reset"/>
+    <eOperations name="initialize"/>
+    <eOperations name="produceTitle" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="model" eType="ecore:EClass model.ecore#//Model"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sequencer" eType="ecore:EClass sequencer.ecore#//Sequencer"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="scenarioDecorators" upperBound="-1"
+        eType="ecore:EClass model.ecore#//Decorator"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="canonicalGraph" eType="ecore:EClass graph.ecore#//Graph"
+        changeable="false" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="progress" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="solver" eType="ecore:EClass solver.ecore#//Solver"
+        containment="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/sequencer.ecore b/org.eclipse.stem.core/model/sequencer.ecore
new file mode 100644
index 0000000..6dfdbbd
--- /dev/null
+++ b/org.eclipse.stem.core/model/sequencer.ecore
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sequencer"
+    nsURI="http:///org/eclipse/stem/core/sequencer.ecore" nsPrefix="org.eclipse.stem.core.sequencer">
+  <eClassifiers xsi:type="ecore:EClass" name="RealTimeSequencer" eSuperTypes="#//SequentialSequencer"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Sequencer" abstract="true" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="reset"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="startTime" eType="ecore:EClass model.ecore#//STEMTime"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="endTime" eType="ecore:EClass model.ecore#//STEMTime"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentTime" eType="ecore:EClass model.ecore#//STEMTime"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nextTime" eType="ecore:EClass model.ecore#//STEMTime"
+        changeable="false" volatile="true" transient="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        changeable="false" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="-1"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timeToStop" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workComplete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workIncrement" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cycle" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SequentialSequencer" eSuperTypes="#//Sequencer">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timeIncrement" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/solver.ecore b/org.eclipse.stem.core/model/solver.ecore
new file mode 100644
index 0000000..96f6c24
--- /dev/null
+++ b/org.eclipse.stem.core/model/solver.ecore
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="solver"
+    nsURI="http://org/eclipse/stem/core/solver" nsPrefix="org.eclipse.stem.core.solver">
+  <eClassifiers xsi:type="ecore:EClass" name="Solver" eSuperTypes="common.ecore#//Identifiable">
+    <eOperations name="step" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean">
+      <eParameters name="time" eType="ecore:EClass model.ecore#//STEMTime"/>
+      <eParameters name="timeDelta" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+      <eParameters name="cycle" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    </eOperations>
+    <eOperations name="reset"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="decorators" transient="true">
+      <eGenericType eClassifier="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EEList">
+        <eTypeArguments eClassifier="ecore:EClass model.ecore#//Decorator"/>
+      </eGenericType>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initialized" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.core/model/trigger.ecore b/org.eclipse.stem.core/model/trigger.ecore
new file mode 100644
index 0000000..71d776c
--- /dev/null
+++ b/org.eclipse.stem.core/model/trigger.ecore
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="trigger"

+    nsURI="http:///org/eclipse/stem/core/trigger.ecore" nsPrefix="org.eclipse.stem.core.trigger">

+  <eClassifiers xsi:type="ecore:EClass" name="Trigger" eSuperTypes="model.ecore#//Decorator">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="predicate" eType="ecore:EClass predicate.ecore#//Predicate"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="action" eType="ecore:EClass model.ecore#//Decorator"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.core/notice.html b/org.eclipse.stem.core/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.core/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.core/plugin.properties b/org.eclipse.stem.core/plugin.properties
new file mode 100644
index 0000000..ce47198
--- /dev/null
+++ b/org.eclipse.stem.core/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.core/plugin.xml b/org.eclipse.stem.core/plugin.xml
new file mode 100644
index 0000000..a83da4e
--- /dev/null
+++ b/org.eclipse.stem.core/plugin.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension-point id="graph" name="%EP_Graph" schema="schema/graph.exsd"/>
+   <extension-point id="model" name="%EP_Model" schema="schema/model.exsd"/>
+   <extension-point id="scenario" name="%EP_Scenario" schema="schema/scenario.exsd"/>
+   <extension-point id="sequencer" name="%EP_Sequencer" schema="schema/sequencer.exsd"/>
+   <extension-point id="decorator" name="%EP_Decorator" schema="schema/decorator.exsd"/>
+   <extension-point id="trigger" name="%EP_Trigger" schema="schema/trigger.exsd"/>
+   <extension-point id="predicate" name="%EP_Predicate" schema="schema/predicate.exsd"/>
+   <extension-point id="experiment" name="%EP_Experiment" schema="schema/experiment.exsd"/>
+   <extension-point id="solver" name="%EP_Solver" schema="schema/solver.exsd"/>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/common.ecore"
+            class="org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/experiment.ecore"
+            class="org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/graph.ecore"
+            class="org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/model.ecore"
+            class="org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/modifier.ecore"
+            class="org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/predicate.ecore"
+            class="org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/scenario.ecore"
+            class="org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/sequencer.ecore"
+            class="org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/core/trigger.ecore"
+            class="org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+   <extension
+         point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            class="org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory"
+            uri="http:///org/eclipse/stem/core/solver.ecore"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource">
+      </factory>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/common.ecore"
+            class="org.eclipse.stem.core.common.CommonPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/experiment.ecore"
+            class="org.eclipse.stem.core.experiment.ExperimentPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/graph.ecore"
+            class="org.eclipse.stem.core.graph.GraphPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/model.ecore"
+            class="org.eclipse.stem.core.model.ModelPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/modifier.ecore"
+            class="org.eclipse.stem.core.modifier.ModifierPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/predicate.ecore"
+            class="org.eclipse.stem.core.predicate.PredicatePackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/scenario.ecore"
+            class="org.eclipse.stem.core.scenario.ScenarioPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/sequencer.ecore"
+            class="org.eclipse.stem.core.sequencer.SequencerPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/core/trigger.ecore"
+            class="org.eclipse.stem.core.trigger.TriggerPackage"
+            genModel="model/core.genmodel"/>
+   </extension>
+   <extension
+         point="org.eclipse.emf.ecore.generated_package">
+      <package
+            class="org.eclipse.stem.core.solver.SolverPackage"
+            uri="http:///org/eclipse/stem/core/solver.ecore"
+            genModel="model/solver.genmodel">
+      </package>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/.cvsignore b/org.eclipse.stem.core/resources/icons/full/customobj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/DynamicLabel.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/DynamicLabel.gif
new file mode 100644
index 0000000..1b9e353
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/DynamicLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Edge.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Edge.gif
new file mode 100644
index 0000000..6addb9e
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Edge.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Graph.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Graph.gif
new file mode 100644
index 0000000..570b355
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Graph.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/GraphModelFile.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/GraphModelFile.gif
new file mode 100644
index 0000000..d5216ba
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Label.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Label.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Label.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Model.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Model.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Model.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/ModelModelFile.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/ModelModelFile.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Node.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Node.gif
new file mode 100644
index 0000000..76148f8
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Node.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/Scenario.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/Scenario.gif
new file mode 100644
index 0000000..72888d5
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/Scenario.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/ScenarioModelFile.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..272daff
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/customobj16/StaticLabel.gif b/org.eclipse.stem.core/resources/icons/full/customobj16/StaticLabel.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/customobj16/StaticLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.core/resources/icons/full/obj16/STEM.gif b/org.eclipse.stem.core/resources/icons/full/obj16/STEM.gif
new file mode 100644
index 0000000..49d167f
--- /dev/null
+++ b/org.eclipse.stem.core/resources/icons/full/obj16/STEM.gif
Binary files differ
diff --git a/org.eclipse.stem.core/schema/decorator.exsd b/org.eclipse.stem.core/schema/decorator.exsd
new file mode 100644
index 0000000..d1c73f3
--- /dev/null
+++ b/org.eclipse.stem.core/schema/decorator.exsd
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="decorator" name="STEM decorator extension point"/>
+      </appInfo>
+      <documentation>
+         The STEM system allows &quot;decorators&quot; to change the underlying graph. A plug-in that extends the &quot;decorator&quot; extension point provides an implementation of a decorator
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="stem_category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="dublin_core" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         0.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/dublin_core.exsd b/org.eclipse.stem.core/schema/dublin_core.exsd
new file mode 100644
index 0000000..a71ae20
--- /dev/null
+++ b/org.eclipse.stem.core/schema/dublin_core.exsd
@@ -0,0 +1,216 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="dublin_core" name="Dublin Core Definition"/>
+      </appinfo>
+      <documentation>
+         This is a specification of the Dublin Core metadata elements.
+      </documentation>
+   </annotation>
+
+   <element name="dublin_core">
+      <annotation>
+         <documentation>
+            Dublin Core Metadata is a set of &quot;terms&quot; that describe the content and orgin of a resource.  See &lt;a href=&quot;http://www.dublincore.org/documents/dcmi-terms/&quot;&gt; http://www.dublincore.org/documents/dcmi-terms/&lt;/a&gt; for the offical definitions of the terms and their refinements.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="title" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A name given to the resource. e.g., &quot;Base United states Administration Level 2&quot;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="identifier" type="string" use="required">
+            <annotation>
+               <documentation>
+                  An unambiguous reference to the resource within a given context.  In our case this is always a URI.  e.g. &quot;stem:/graphs/sample/sample1.graph&quot;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string">
+            <annotation>
+               <documentation>
+                  An account of the content of the resource.  Basically, a description of the content of the resource. e.g., &quot;Only the counties of the United States as nodes with no edges or labels of any kind.&quot;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="creator" type="string">
+            <annotation>
+               <documentation>
+                  An entity primarily responsible for making the content of the resource.  e.g., Daniel Ford, IBM
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="date" type="string">
+            <annotation>
+               <documentation>
+                  A date associated with an event in the life cycle of the resource.  Encoded in ISO 8601 &lt;a href=&quot;http://www.w3.org/TR/NOTE-datetime&quot;&gt;http://www.w3.org/TR/NOTE-datetime&lt;/a&gt;.  Basically, the format is: YYYY-MM-DD e.g.,  2006-03-29
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="format" type="string">
+            <annotation>
+               <documentation>
+                  The physical or digital manifestation of the resource.  For STEM this is the name space URI of the coresponding ecore model. e.g., http:///com/ibm/almaden/stem/graph.ecore
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="publisher" type="string">
+            <annotation>
+               <documentation>
+                  An entity responsible for making the resource available. e.g., IBM
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="coverage" type="string">
+            <annotation>
+               <documentation>
+                  The extent or scope of the content of the resource.  For spatial resources this would typically include the name selected from the &lt;a href=&quot;http://www.getty.edu/research/tools/vocabulary/tgn/index.html&quot;&gt;Thesaurus of Geographic Names &lt;/a&gt;. e.g., Santa Clara County
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="contributor" type="string">
+            <annotation>
+               <documentation>
+                  An entity responsible for making contributions to the content of the resource.  e.g., IBM
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="relation" type="string">
+            <annotation>
+               <documentation>
+                  A reference to a related resource. In the case of STEM that will be the URI specified as the identifier of the related resource. e.g. &quot;stem:/graphs/sample/sample1.graph&quot;
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="rights" type="string">
+            <annotation>
+               <documentation>
+                  Information about rights held in and over the resource. e.g.,  &amp;copy;Copyright STEM corporation 2006
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="source" type="string">
+            <annotation>
+               <documentation>
+                  A reference to a resource from which the present resource is derived.  e.g., US Census Tiger files
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="subject" type="string">
+            <annotation>
+               <documentation>
+                  The topic of the content of the resource.  Keywords or key phrases the describe the topic of the resource. e.g., United States
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="type" type="string">
+            <annotation>
+               <documentation>
+                  The nature or genre of the content of the resource.  See &lt;a href=&quot;http://dublincore.org/documents/dcmi-type-vocabulary/&quot;&gt;http://dublincore.org/documents/dcmi-type-vocabulary/&lt;/a&gt; e.g,  http://purl.org/dc/dcmitype/Dataset for a set of data or
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="language" type="string">
+            <annotation>
+               <documentation>
+                  A language of the intellectual content of the resource. Use 
+&lt;a href=&quot;http://www.ietf.org/rfc/rfc3066.txt&quot;&gt;
+RFC&amp;nbsp;3066 &lt;/a&gt; and &lt;a href=&quot;http://www.loc.gov/standards/iso639-2/&quot;&gt;ISO&amp;nbsp;639&lt;/a&gt; e.g., en-GB for English used in the United Kingdom.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="bibliographicCitation" type="string">
+            <annotation>
+               <documentation>
+                  A bibliographic reference for the resource. e.g., Ford, D.A., &quot;STEM and the art of computer maintenance&quot;, Journal of Foobar, 2006.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="created" type="string">
+            <annotation>
+               <documentation>
+                  Date of creation of the resource. Encoded in ISO&amp;nbsp;8601 &lt;a href=&quot;http://www.w3.org/TR/NOTE-datetime&quot;&gt;http://www.w3.org/TR/NOTE-datetime&lt;/a&gt;.  Basically, the format is: YYYY-MM-DD e.g.,  2006-03-29
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="license" type="string">
+            <annotation>
+               <documentation>
+                  A legal document giving official permission to do something with the resource.  Best practice is to use a URI to the specific license.  e.g., http://creativecommons.org/license/
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="requires" type="string">
+            <annotation>
+               <documentation>
+                  The described resource requires the referenced resource to support its function, delivery, or coherence of content.  In STEM this is the URI that is the identifier of the required resource.  e.g., stem:/graphs/sample/sample1.graph
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="spatial" type="string">
+            <annotation>
+               <documentation>
+                  Spatial characteristics of the intellectual content of the resource.  See &lt;a href=&quot;http://www.dublincore.org/documents/dcmi-point/&quot;&gt;http://www.dublincore.org/documents/dcmi-point/&lt;/a&gt;  However, this should probably be a URI to a file that contains the actual lat/long data that describes a polygon that defines the spatial outline of a place.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="valid" type="string">
+            <annotation>
+               <documentation>
+                  Date (often a range) of validty of a resource encoded in ISO&amp;nbsp;8601 &lt;a href=&quot;http://www.w3.org/TR/NOTE-datetime&quot;&gt;http://www.w3.org/TR/NOTE-datetime&lt;/a&gt;. e.g. start=2006-03-29; end=2006-03-29; or simply start=2006-03-29; if there is no end to the validity
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="category_id" type="string" use="default" value="/">
+            <annotation>
+               <documentation>
+                  If the resource that this Dublin Core instance describes is in a category then this is the unique identifier of the category. &lt;samp&gt;com.ibm.almaden.stem.test.category.graph.test&lt;/samp&gt;
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/experiment.exsd b/org.eclipse.stem.core/schema/experiment.exsd
new file mode 100644
index 0000000..5b07903
--- /dev/null
+++ b/org.eclipse.stem.core/schema/experiment.exsd
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.stem.core" id="experiment" name="%EP_Experiment"/>
+      </appinfo>
+      <documentation>
+         The STEM system can incorporate Experiment definitions provided by plug-ins.  A plug-in that extends the &quot;experiment&quot; extension point provides the definition of a Experiment  It can also define &quot;catagories&quot; into which Experiments can be grouped.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/graph.exsd b/org.eclipse.stem.core/schema/graph.exsd
new file mode 100644
index 0000000..d173883
--- /dev/null
+++ b/org.eclipse.stem.core/schema/graph.exsd
@@ -0,0 +1,128 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="graph" name="STEM graph extension point"/>
+      </appInfo>
+      <documentation>
+         The STEM system can incorporate Graph definitions and fragments of Graph definitions provided by plug-ins.  A plug-in that extends the &quot;graph&quot; extension point provides the definition of a Graph or Graph fragment.  It can also define &quot;catagories&quot; into which Graphs can be grouped.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <choice>
+            <element ref="stem_category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="dublin_core" minOccurs="1" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         0.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of the graph extension point usage.
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension
+         point=&quot;com.ibm.almaden.stem.core.graph&quot;&gt;
+      &lt;category
+            id=&quot;com.ibm.almaden.stem.test.category.graph.basic&quot;
+            name=&quot;Basic&quot;
+            parent_id=&quot;com.ibm.almaden.stem.test.category.graph.test&quot;/&gt;
+      &lt;dublin_core
+            category_id=&quot;com.ibm.almaden.stem.test.category.graph.basic&quot;
+            created=&quot;2006-04-24&quot;
+            creator=&quot;Daniel Ford&quot;
+            date=&quot;2006-04-24&quot;
+            description=&quot;A graph with a single node, nothing else, for testing&quot;
+            format=&quot;http:///com/ibm/almaden/stem/graph.ecore&quot;
+            identifier=&quot;stem:com.ibm.almaden.stem.test.graph.onenode1&quot;
+            subject=&quot;Testing&quot;
+            title=&quot;One Node #1&quot;
+            valid=&quot;start=2006-03-29;&quot;/&gt;
+      &lt;dublin_core
+            category_id=&quot;com.ibm.almaden.stem.test.category.graph.basic&quot;
+            created=&quot;2006-04-24&quot;
+            creator=&quot;Daniel Ford&quot;
+            date=&quot;2006-04-24&quot;
+            description=&quot;A graph with a single node, nothing else, for testing&quot;
+            format=&quot;http:///com/ibm/almaden/stem/graph.ecore&quot;
+            identifier=&quot;stem:com.ibm.almaden.stem.test.graph.onenode2&quot;
+            subject=&quot;Testing&quot;
+            title=&quot;One Node #2&quot;
+            valid=&quot;start=2006-03-29;&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         None
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         None.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/model.exsd b/org.eclipse.stem.core/schema/model.exsd
new file mode 100644
index 0000000..8634d4c
--- /dev/null
+++ b/org.eclipse.stem.core/schema/model.exsd
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>

diff --git a/org.eclipse.stem.core/schema/predicate.exsd b/org.eclipse.stem.core/schema/predicate.exsd
new file mode 100644
index 0000000..f93eb3d
--- /dev/null
+++ b/org.eclipse.stem.core/schema/predicate.exsd
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.stem.core" id="predicate" name="%EP_Predicate"/>
+      </appinfo>
+      <documentation>
+         The STEM system can incorporate Predicate definitions provided by plug-ins.  A plug-in that extends the &quot;predicate&quot; extension point provides the definition of a Predicate  It can also define &quot;catagories&quot; into which Predicates can be grouped.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/scenario.exsd b/org.eclipse.stem.core/schema/scenario.exsd
new file mode 100644
index 0000000..25e8cb9
--- /dev/null
+++ b/org.eclipse.stem.core/schema/scenario.exsd
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="scenario" name="STEM scenario extension point"/>
+      </appInfo>
+      <documentation>
+         The STEM system can incorporate modeling Scenario definitions provided by plug-ins.  A plug-in that extends the &quot;scenario&quot; extension point provides the definition of a modeling Scenario.  It can also define &quot;catagories&quot; into which Scenarios can be grouped.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <choice>
+            <element ref="stem_category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="dublin_core" minOccurs="1" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         0.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         None.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         None.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/sequencer.exsd b/org.eclipse.stem.core/schema/sequencer.exsd
new file mode 100644
index 0000000..558a8c0
--- /dev/null
+++ b/org.eclipse.stem.core/schema/sequencer.exsd
@@ -0,0 +1,104 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="sequencer" name="STEM sequencer extension point"/>
+      </appInfo>
+      <documentation>
+         The STEM system allows &quot;sequencers&quot; to control changes to the underlying graph. A plug-in that extends the &quot;sequencer&quot; extension point provides an implementation of a sequencer.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="stem_category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="dublin_core" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         0.0.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of the sequencer extension point usage.
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension point=&quot;com.ibm.almaden.stem.core.observer&quot;&gt;
+  &lt;sequencer
+   name=&quot;Sequential Sequencer&quot;
+   class=&quot;com.ibm.almaden.stem.sequencer.SequentialSequencer&quot; /&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/solver.exsd b/org.eclipse.stem.core/schema/solver.exsd
new file mode 100644
index 0000000..d2bff2e
--- /dev/null
+++ b/org.eclipse.stem.core/schema/solver.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="com.ibm.almaden.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appinfo>

+         <meta.schema plugin="com.ibm.almaden.stem.core" id="solver" name="%EP_Solver"/>

+      </appinfo>

+      <documentation>

+         [Enter description of this extension point.]

+      </documentation>

+   </annotation>

+

+   <include schemaLocation="schema://org.eclipse.stem.core/schema/dublin_core.exsd"/>

+

+   <element name="extension">

+      <annotation>

+         <appinfo>

+            <meta.element />

+         </appinfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="classdef"/>

+            <element ref="dublin_core"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute translatable="true"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="classdef">

+      <complexType>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.stem.solvers.impl.SolverImpl:org.eclipse.stem.solvers.Solver"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="since"/>

+      </appinfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="examples"/>

+      </appinfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="apiinfo"/>

+      </appinfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="implementation"/>

+      </appinfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+

+</schema>

diff --git a/org.eclipse.stem.core/schema/stem_category.exsd b/org.eclipse.stem.core/schema/stem_category.exsd
new file mode 100644
index 0000000..a13c05a
--- /dev/null
+++ b/org.eclipse.stem.core/schema/stem_category.exsd
@@ -0,0 +1,84 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.ibm.almaden.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="com.ibm.almaden.stem.core" id="stem_category" name="STEM Category"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="stem_category">
+      <annotation>
+         <documentation>
+            A category is a hierarchical group with a parent and childern.  It is meant to organize Identifiable resources and other components.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The unique identifier the defines a STEM category into which an Identifiable can be grouped.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The translatable name of the category.
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="parent_id" type="string" use="default" value="/">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiInfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.stem.core/schema/trigger.exsd b/org.eclipse.stem.core/schema/trigger.exsd
new file mode 100644
index 0000000..21eb852
--- /dev/null
+++ b/org.eclipse.stem.core/schema/trigger.exsd
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.stem.core" id="trigger" name="%EP_Trigger"/>
+      </appinfo>
+      <documentation>
+         The STEM system can incorporate Trigger definitions provided by plug-ins.  A plug-in that extends the &quot;trigger&quot; extension point provides the definition of a Trigger.  It can also define &quot;catagories&quot; into which Triggers can be grouped.
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="dublin_core.exsd"/>
+
+   <include schemaLocation="stem_category.exsd"/>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryExtendedListener.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryExtendedListener.java
new file mode 100644
index 0000000..6bee18c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryExtendedListener.java
@@ -0,0 +1,21 @@
+// HistoryExtendedListener.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that want to be notified when a
+ * {@link HistoryProvider} can provide additional history values.
+ */
+public interface HistoryExtendedListener {
+	void historyExtended(final HistoryProviderAdapter historyProviderAdapter);
+} // HistoryExtendedListener
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProvider.java
new file mode 100644
index 0000000..ee5fda1
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProvider.java
@@ -0,0 +1,65 @@
+// HistoryProvider.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This interface is implemented by classes that provide instances of
+ * {@link Identifiables} as they existed in previous (historic) cycles of a
+ * {@link Simulation}.
+ */
+public interface HistoryProvider {
+
+	/**
+	 * @param time
+	 *            the time in a {@link Simulation} that specifies the instance
+	 *            of the {@ Identifiable} to return
+	 * @return the {@link Identifiable} instance that was current in the state
+	 *         of the {@link org.eclipse.stem.core.graph.Graph} at the <code>time</code>.
+	 */
+	Identifiable getInstance(STEMTime time);
+
+	/**
+	 * @return all of the historic instances of the {@link Identifiable}. The
+	 *         value at index 0 is the earliest.
+	 */
+	Identifiable[] getAllHistoricInstances();
+
+	
+	/**
+	 * @return The historic instances that match the time values in
+	 * the array timeRange {@link Identifiable}. 
+	 */
+	Identifiable[] getHistoricInstances(STEMTime[] timeRange);
+
+	
+	/**
+	 * @return all of the time values that correspond to the historic values.
+	 *         The first value of the collection is the time value for the first
+	 *         value of the collection returned by
+	 */
+	STEMTime[] getAllHistoricTimeValues();
+
+	/**
+	 * @return the earliest time value associated with a relative value.
+	 */
+	STEMTime getEarliestTimeValue();
+
+	/**
+	 * @return the earliest (lowest) cycle number
+	 */
+	int getEarliestCycleNumber();
+
+} // HistoryProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapter.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapter.java
new file mode 100644
index 0000000..79cfc10
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapter.java
@@ -0,0 +1,112 @@
+// HistoryProviderAdapter.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.ResettableAdapter;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+//import org.eclipse.stem.core.model.impl.STEMTimeImpl;
+
+/**
+ * This class is a {@link HistoryProvider}.
+ */
+public class HistoryProviderAdapter extends AdapterImpl implements
+		HistoryProvider, ResettableAdapter {
+
+	private List<HistoryExtendedListener> extensionListeners = new CopyOnWriteArrayList<HistoryExtendedListener>();
+
+	private int earliestCycleNumber = 0;
+
+	/**
+	 * @see org.eclipse.stem.adapters.history.HistoryProvider#getInstance(org.eclipse.stem.core.model.STEMTime)
+	 */
+	public Identifiable getInstance(STEMTime time) {
+		return (Identifiable) getTarget();
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.history.HistoryProvider#getAllHistoricInstances()
+	 */
+	public Identifiable[] getAllHistoricInstances() {
+		return new Identifiable[] {};
+	}
+
+	
+	
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.history.HistoryProvider#getHistoricInstances()
+	 */
+	public Identifiable[] getHistoricInstances(STEMTime[] timeRange) {
+		return  new Identifiable[timeRange.length];
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.history.HistoryProvider#getAllHistoricTimeValues()
+	 */
+	public STEMTime[] getAllHistoricTimeValues() {
+		return new STEMTime[] {};
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.history.HistoryProvider#getEarliestCycleNumber()
+	 */
+	public int getEarliestCycleNumber() {
+		return earliestCycleNumber;
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.ResettableAdapter#reset()
+	 */
+	public void reset() {
+		fireHistoryExtended();
+	} // reset
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.history.HistoryProvider#getEarliestTimeValue()
+	 */
+	public STEMTime getEarliestTimeValue() {
+		final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+		retValue.setTime(new Date());
+		return retValue;
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == HistoryProvider.class;
+	}
+
+	public void addExtensionListener(HistoryExtendedListener listener) {
+		extensionListeners.add(listener);
+	}
+
+	public void removeExtensionListener(HistoryExtendedListener listener) {
+		extensionListeners.remove(listener);
+	}
+
+	protected void fireHistoryExtended() {
+		for (HistoryExtendedListener listener : extensionListeners) {
+			listener.historyExtended(this);
+		} // for each HistoryExtendedListener
+	}
+
+} // HistoryProviderAdapter
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactory.java
new file mode 100644
index 0000000..9a99224
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactory.java
@@ -0,0 +1,72 @@
+// HistoryProviderAdapterFactory.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link  org.eclipse.emf.ecore.EObject}s to {@link HistoryProvider}s.
+ */
+
+public interface HistoryProviderAdapterFactory extends
+		ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link HistoryProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements
+	 * {@link RelativeValueProviderAdapterFactory} needs to add itself to this
+	 * instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a
+	 * {@link HistoryProviderAdapterFactory} for it so that the classes in that
+	 * model can be adapted, you need to hook that factory into this one so that
+	 * later when an attempt is made to adapt a class from that model is made
+	 * the associated factory will be found. You can do that by adding the line:
+	 * <code>
+	 * HistoryProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the <code>start</code> method of
+	 * the <code>Activator</code> of the plug-in that defines the factory.
+	 */
+	HistoryProviderAdapterFactoryImpl INSTANCE = new HistoryProviderAdapterFactoryImpl();
+
+	/**
+	 * This class is extended by classes that provide historic values of
+	 * {@link Identifiables}.
+	 */
+	public class HistoryProviderAdapterFactoryImpl extends
+			ComposedAdapterFactory implements HistoryProviderAdapterFactory {
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == HistoryProvider.class;
+		} // isFactoryForType
+	} // RelativeValueHistoryProviderAdapterFactoryImpl
+
+} // HistoryProviderAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProvider.java
new file mode 100644
index 0000000..5936707
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProvider.java
@@ -0,0 +1,26 @@
+// TimeProvider.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This interface is implemented by classes that provide instances of {@link
+ * STEMTime}.
+ */
+public interface TimeProvider {
+	/**
+	 * @return the time value associated with the instance.
+	 */
+	STEMTime getTime();
+} // TimeProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapter.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapter.java
new file mode 100644
index 0000000..670ed48
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapter.java
@@ -0,0 +1,31 @@
+// TimeProviderAdapter.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This class is a {@link TimeProvider}.
+ */
+public class TimeProviderAdapter extends AdapterImpl implements TimeProvider {
+
+	/**
+	 * @see org.eclipse.stem.adapters.time.TimeProvider#getTime()
+	 */
+	public STEMTime getTime() {
+		return ModelFactory.eINSTANCE.createSTEMTime();
+	}
+
+} // TimeProviderAdapter
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactory.java
new file mode 100644
index 0000000..66f8f1b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactory.java
@@ -0,0 +1,72 @@
+// TimeProviderAdapterFactory.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link org.eclipse.emf.ecore.EObject}s to {@link TimeProvider}s.
+ */
+public interface TimeProviderAdapterFactory extends ComposeableAdapterFactory,
+		IChangeNotifier, IDisposable {
+
+	/**
+	 * This is the singleton instance of the factory that creates {@link
+	 * TimeProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements {@link
+	 * RelativeValueProviderAdapterFactory} needs to add itself to this instance
+	 * with a call to {@link
+	 * ComposedAdapterFactory#addAdapterFactory(org.eclipse
+	 * .emf.common.notify.AdapterFactory)}. This will then allow adapters
+	 * created by that factory to be found when adapting class instances handled
+	 * by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a {@link
+	 * TimeProviderAdapterFactory} for it so that the classes in that model can
+	 * be adapted, you need to hook that factory into this one so that later
+	 * when an attempt is made to adapt a class from that model is made the
+	 * associated factory will be found. You can do that by adding the line:
+	 * <code>
+	 * TimeProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code> to the default constructor of the new factory after the
+	 * super call. You're not done however, you also have to "force" an instance
+	 * of the class to be created so that the constructor is run. This is
+	 * typically achieved by allocating an instance in the <code>start</code>
+	 * method of the <code>Activator</code> of the plug-in that defines the
+	 * factory.
+	 */
+	TimeProviderAdapterFactoryImpl INSTANCE = new TimeProviderAdapterFactoryImpl();
+
+	/**
+	 * This class is extended by classes that provide time values of {@link
+	 * Identifiables}.
+	 */
+	public class TimeProviderAdapterFactoryImpl extends ComposedAdapterFactory
+			implements TimeProviderAdapterFactory {
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#
+		 * 	isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == TimeProvider.class;
+		} // isFactoryForType
+	} // TimeProviderAdapterFactoryImpl
+} // TimeProviderAdapterFactory
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/Constants.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/Constants.java
new file mode 100644
index 0000000..33a6068
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/Constants.java
@@ -0,0 +1,227 @@
+// Constants.java
+package org.eclipse.stem.core;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.trigger.Trigger;
+
+/**
+ * This interface contains a number of significant constants used by the STEM
+ * implementation.
+ */
+public interface Constants {
+
+	/**
+	 * This is the string that is the root of all packages and plugin id's
+	 */
+	String ID_ROOT = "org.eclipse.stem";
+
+	/**
+	 * This is the id for the STEM project nature.
+	 */
+	String ID_STEM_PROJECT_NATURE = ID_ROOT + ".stemnature";
+
+	/**
+	 * This is the scheme used for STEM URI's that uniquely identify a
+	 * component.
+	 */
+	String STEM_SCHEME = "stem";
+
+	/**
+	 * This is the scheme used for STEM URI's that uniquely identify a STEM
+	 * "type".
+	 */
+	String STEM_TYPE_SCHEME = "stemtype";
+
+	/**
+	 * This is the "authority" of a URI that refers to STEM resources.
+	 */
+	String STEM_URI_AUTHORITY = ID_ROOT;
+
+	/**
+	 * This is the extension point id for the "graph" extension point. {@value}
+	 * 
+	 * @see Graph
+	 */
+	String ID_GRAPH_EXTENSION_POINT = ID_ROOT + ".core.graph";
+
+	/**
+	 * This is the extension point id for the "model" extension point. {@value}
+	 * 
+	 * @see Model
+	 */
+	String ID_MODEL_EXTENSION_POINT = ID_ROOT + ".core.model";
+
+	/**
+	 * This is the extension point id for the "scenario" extension point. * *
+	 * {@value}
+	 * 
+	 * @see Scenario
+	 */
+	String ID_SCENARIO_EXTENSION_POINT = ID_ROOT + ".core.scenario";
+
+	/**
+	 * This is the extension point id for the "experiment" extension point. * *
+	 * {@value}
+	 * 
+	 * @see Experiment
+	 */
+	String ID_EXPERIMENT_EXTENSION_POINT = ID_ROOT + ".core.experiment";
+
+	/**
+	 * This is the extension point id of the "Sequencers" extension point. * *
+	 * {@value}
+	 * 
+	 * @see Sequencer
+	 */
+	String ID_SEQUENCER_EXTENSION_POINT = ID_ROOT + ".core.sequencer";
+
+	/**
+	 * This is the extension point id of the "Decorators" extension point * *
+	 * {@value}
+	 * 
+	 * @see Decorator
+	 */
+	String ID_DECORATOR_EXTENSION_POINT = ID_ROOT + ".core.decorator";
+
+	/**
+	 * This is the extension point id of the "Triggers" extension point * *
+	 * {@value}
+	 * 
+	 * @see Trigger
+	 */
+	String ID_TRIGGER_EXTENSION_POINT = ID_ROOT + ".core.trigger";
+
+	/**
+	 * This is the extension point id of the "Predicate" extension point * *
+	 * {@value}
+	 * 
+	 * @see Predicate
+	 */
+	String ID_PREDICATE_EXTENSION_POINT = ID_ROOT + ".core.predicate";
+
+	/**
+	 * This is the extension point id for the "solver" extension point. A
+	 * {@link Solver} defines the underlying computational model.
+	 * {@value}
+	 */
+	String ID_SOLVER_EXTENSION_POINT = org.eclipse.stem.core.Constants.ID_ROOT
+	+ ".core.solver";
+
+	
+	/**
+	 * This is the identifier of the element in a
+	 * <code>ConfigurationElement</code> that specifies the name and
+	 * implementing class for STEM "solver".
+	 * 
+	 * @see org.eclipse.stem.core.Constants#EXECUTABLE_NAME_ATTRIBUTE
+	 */
+	String SOLVER_ELEMENT = "classdef";
+
+	/**
+	 * This is the identifier of the XML element that specifies the name of a
+	 * "category" for extension points that are extended by extensions that plug
+	 * in {@link Identifiable}s. {@value}
+	 * 
+	 * @see #CATEGORY_NAME_ATTRIBUTE
+	 * @see #PARENT_ID_ATTRIBUTE
+	 */
+	String CATEGORY_ELEMENT = "stem_category";
+
+	/**
+	 * This is the identifier of the XML attribute in a CATEGORY element that
+	 * specifies the name of the category. {@value}
+	 * 
+	 * @see #CATEGORY_ELEMENT
+	 * @see #PARENT_ID_ATTRIBUTE
+	 */
+	String CATEGORY_NAME_ATTRIBUTE = "name";
+
+	/**
+	 * This is the identifier of the XML attribute in a Category element that
+	 * specifies the unique identifier of the category. {@value}
+	 * 
+	 * @see #CATEGORY_NAME_ATTRIBUTE
+	 * @see #PARENT_ID_ATTRIBUTE
+	 */
+	String CATEGORY_ID_ATTRIBUTE = "id";
+
+	/**
+	 * This is the identifier of the XML attribute in a CATEGORY element that
+	 * specifies the unique identifier of the parent category of a child
+	 * category. {@value}
+	 * 
+	 * @see #CATEGORY_ELEMENT
+	 * @see #CATEGORY_NAME_ATTRIBUTE
+	 */
+	String PARENT_ID_ATTRIBUTE = "parent_id";
+
+	/**
+	 * This is the identifier of the XML element that specifies the Dublin Core
+	 * values for extension points that are extended by extensions that plug in
+	 * {@link Identifiable}s. {@value}
+	 * 
+	 * @see #CATEGORY_ELEMENT
+	 * @see DublinCore
+	 */
+	String DUBLIN_CORE_ELEMENT = "dublin_core";
+
+	/**
+	 * This is the identifier of the XML element that specifies the name and
+	 * implementing class for STEM "sequencers".
+	 * 
+	 * @see #EXECUTABLE_NAME_ATTRIBUTE
+	 */
+	String SEQUENCER_ELEMENT = "sequencer";
+
+	/**
+	 * This is the identifier of the XML element that specifies the name and
+	 * implementing class for STEM "decorators"
+	 * 
+	 * @see #EXECUTABLE_NAME_ATTRIBUTE
+	 */
+	String DECORATOR_ELEMENT = "decorator";
+
+	/**
+	 * This is the identifier of the XML attribute in an Observer element that
+	 * specifies the name of a STEM "executable".
+	 * 
+	 * @see #SEQUENCER_ELEMENT
+	 * @see #DECORATOR_ELEMENT
+	 */
+	String EXECUTABLE_NAME_ATTRIBUTE = "name";
+
+	/**
+	 * The name of the root category for all IdentifiablePluginViews.
+	 * 
+	 * @see #IDENTIFIABLE_ROOT_CATEGORY_ID
+	 */
+	String IDENTIFIABLE_ROOT_CATEGORY_NAME = "/";
+
+	/**
+	 * This is the unique identifier of the root category. {@value}
+	 * 
+	 * @see #IDENTIFIABLE_ROOT_CATEGORY_NAME
+	 */
+	String IDENTIFIABLE_ROOT_CATEGORY_ID = IDENTIFIABLE_ROOT_CATEGORY_NAME;
+
+
+
+} // Constants
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/CorePlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/CorePlugin.java
new file mode 100644
index 0000000..d003559
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/CorePlugin.java
@@ -0,0 +1,129 @@
+// CorePlugin.java
+package org.eclipse.stem.core;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.core.graph.provider.GraphTimeProviderAdapterFactory;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The core STEM plugin.
+ */
+public class CorePlugin extends Plugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.cSore";
+
+	// The shared instance.
+	private static CorePlugin plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public CorePlugin() {
+		plugin = this;
+	} // CorePlugin
+
+	/**
+	 * This method is called upon plug-in activation
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new GraphTimeProviderAdapterFactory();
+		// The constructor will populate the plug-in specified resources
+		// stem = new STEM();
+	} // start
+
+	
+	/**
+	 * This method is called when the plug-in is stopped
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	} // stop
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the singleton instance of the plug-in class.
+	 */
+	public static CorePlugin getDefault() {
+		return plugin;
+	} // CorePlugin
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+							0, message, exception));
+		}
+		else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if 
+		}
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+							0, message, exception));
+		}
+		else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if 
+		}
+	} // logInformation
+
+} // CorePlugin
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMURI.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMURI.java
new file mode 100644
index 0000000..9eabfda
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMURI.java
@@ -0,0 +1,135 @@
+// STEMURI.java
+package org.eclipse.stem.core;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.sequencer.Sequencer;
+
+/**
+ * This class contains standard {@link URI} constants for STEM.
+ */
+public class STEMURI {
+
+	/**
+	 * The type {@link URI} of a STEM {@link Scenario}. {@value}
+	 */
+	public static final URI SCENARIO_TYPE_URI = createTypeURI("Scenario");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Model}. {@value}
+	 */
+	public static final URI MODEL_TYPE_URI = createTypeURI("Model");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Graph}. {@value}
+	 */
+	public static final URI GRAPH_TYPE_URI = createTypeURI("Graph");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Node}. {@value}
+	 */
+	public static final URI NODE_TYPE_URI = createTypeURI("Node");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Edge}. {@value}
+	 */
+	public static final URI EDGE_TYPE_URI = createTypeURI("Edge");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Sequencer}. {@value}
+	 */
+	public static final URI SEQUENCER_TYPE_URI = createTypeURI("Sequencer");
+
+	/**
+	 * The type {@link URI} of a STEM {@link Experiment}. {@value}
+	 */
+	public static final URI EXPERIMENT_TYPE_URI = createTypeURI("Experiment");
+
+	/**
+	 * The type {@link URI} of a STEM
+	 * {@link org.eclipse.stem.core.modifier.Modifier}. {@value}
+	 */
+	public static final URI MODIFIER_TYPE_URI = createTypeURI("Modifier");
+
+	/**
+	 * The type {@link URI} of a STEM
+	 * {@link org.eclipse.stem.core.trigger.Trigger}. {@value}
+	 */
+	public static final URI TRIGGER_TYPE_URI = createTypeURI("Trigger");
+
+	/**
+	 * The type {@link URI} of a STEM
+	 * {@link org.eclipse.stem.core.trigger.Predicate}. {@value}
+	 */
+	public static final URI PREDICATE_TYPE_URI = createTypeURI("Predicate");
+	
+	/**
+	 * Create a "Stem type" {@link URI}
+	 * 
+	 * @param segments
+	 *            the segments of the {@link URI}
+	 * @return a STEM "type" {@link URI}
+	 */
+	public static URI createTypeURI(final String segments) {
+		return create(Constants.STEM_TYPE_SCHEME, segments);
+	} // createTypeURI
+
+	/**
+	 * @param segments
+	 *            the segments of the {@link URI}
+	 * @return a STEM {@link URI}
+	 */
+	public static URI createURI(final String segments) {
+		return create(Constants.STEM_SCHEME, segments);
+	}
+
+	/**
+	 * @param scheme
+	 *            the scheme of the {@link URI}
+	 * @param segments
+	 *            the segments of the URI
+	 * @see Constants#STEM_URI_AUTHORITY
+	 * @return a STEM {@link URI} with the built-in "STEM" Authority
+	 */
+	public static URI create(final String scheme, final String segments) {
+		return create(scheme, Constants.STEM_URI_AUTHORITY, segments);
+	} // create
+
+	/**
+	 * Create a STEM {@link URI}
+	 * 
+	 * @param scheme
+	 *            the scheme of the {@link URI}
+	 * @param authority
+	 *            the "authority" of the {@link URI}
+	 * @param segments
+	 *            the segments of the {@link URI}
+	 * @see Constants#STEM_URI_AUTHORITY
+	 * @return a STEM {@link URI}
+	 */
+	public static URI create(final String scheme, final String authority,
+			final String segments) {
+		final StringBuilder sb = new StringBuilder(scheme);
+		sb.append("://");
+		sb.append(authority);
+		sb.append("/");
+		sb.append(segments);
+		return URI.createURI(sb.toString());
+	} // create
+} // STEMURI
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMXMIResourceFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMXMIResourceFactoryImpl.java
new file mode 100644
index 0000000..3397123
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/STEMXMIResourceFactoryImpl.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.core;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.impl.BasicEObjectImpl;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLHelper;
+import org.eclipse.emf.ecore.xmi.impl.XMIHelperImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * This class is the {@link XMIResourceFactoryImpl} for the STEM project. It's
+ * purpose is to provide an implementation of {@link XMIResourceImpl} whose
+ * {@link XMLHelper} has a customized implementation of
+ * {@link XMLHelper#getHREF(EObject)} that filters serialized {@link URI}'s such
+ * that they remain platform relative (i.e.,
+ * "platform:/projectname/foo/bar..."), or if absolute, are deresolved against
+ * the {@link Resource}'s {@link URI} so they remain internally relative to the
+ * containing file.
+ * <p>
+ * This is important as the serialized {@link Identifiable}s need to be able to
+ * be copied, moved and exported. If their references to other serialized
+ * {@link Identifiable}s were relative to file location rather than to the
+ * platform, such operations would break the links. Thus, all serialization
+ * operations the involve {@link Identifiable}s must employ this class. Look for
+ * references to {@link #INSTANCE} so see how this is accomplished.
+ */
+public class STEMXMIResourceFactoryImpl extends XMIResourceFactoryImpl {
+
+	public static STEMXMIResourceFactoryImpl INSTANCE = new STEMXMIResourceFactoryImpl();
+
+	/**
+	 * private so only a singleton instance is created
+	 * 
+	 * @see #INSTANCE
+	 */
+	private STEMXMIResourceFactoryImpl() {
+		super();
+	}
+
+	@Override
+	public Resource createResource(URI uri) {
+		return new XMIResourceImpl(uri) {
+			@Override
+			protected XMLHelper createXMLHelper() {
+				return new XMIHelperImpl() {
+					@Override
+					public String getHREF(EObject obj) {
+						if (obj instanceof Identifiable) {
+							// Yes
+							final Identifiable identifiable = (Identifiable) obj;
+							final URI uri = identifiable.getURI();
+							// Is it a platform URI?
+							if (uri.isPlatform()) {
+								// Yes
+								return uri.toString() + "#/";
+							} // if platform URI?
+
+							// Is it an unresolved proxy?
+							else if (identifiable.eIsProxy()) {
+								// Yes
+								return ((BasicEObjectImpl) identifiable)
+										.eProxyURI().toString();
+							} // if unresolved proxy
+
+							else {
+								// No
+								// Resolve it against the URI of the
+								// identifiable's resource
+								deresolve = true;
+								resourceURI = identifiable.eResource().getURI();
+								return super.getHREF(obj);
+							} // else
+
+						} // if Identifiable
+						else
+							return super.getHREF(obj);
+					} // getHREF
+				};
+			} // createXMLHelper
+		};
+	} // createResource
+} // STEMXMIResourceFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/Utility.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/Utility.java
new file mode 100644
index 0000000..0889042
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/Utility.java
@@ -0,0 +1,154 @@
+// Utility.java

+package org.eclipse.stem.core;

+

+/*******************************************************************************

+ * Copyright (c) 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.emf.ecore.xmi.XMLResource;

+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;

+import org.eclipse.stem.core.common.Identifiable;

+

+/**

+ * This class contains common utility methods used in STEM.

+ */

+public class Utility {

+

+	/**

+	 * EMF Save Options, for properly serializing to UTF-8

+	 */

+	private static final Map<String,String> EMF_SAVE_OPTIONS 

+		= new HashMap<String,String>();

+	static {

+		EMF_SAVE_OPTIONS.put(XMLResource.OPTION_ENCODING, "UTF-8");

+	}

+	

+	/**

+	 * @param identifableURI

+	 *            the {@link URI} of file with a serialized {@link Identifiable}

+	 * @return the {@link Identifiable} de-serialized from the file, or

+	 *         <code>null</code> if an error occurred.

+	 */

+	public static Identifiable getIdentifiable(final URI identifableURI) {

+		Identifiable retValue = null;

+

+		try {

+			final ResourceSet resourceSet = new ResourceSetImpl();

+

+			resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()

+					.put("*", new XMIResourceFactoryImpl());

+			resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap()

+					.put("platform", new XMIResourceFactoryImpl());

+

+			final Resource resource = resourceSet.getResource(identifableURI,

+					true);

+			retValue = (Identifiable) resource.getContents().get(0);

+		} catch (final Exception e) {

+			CorePlugin.logError(

+					"The serialized instance of an Identifiable at \""

+							+ identifableURI.toString()

+							+ "\" was not found or was of the wrong format", e);

+			retValue = null;

+		}

+		return retValue;

+	} // getIdentifiable

+

+	/**

+	 * Serialize an {@link Identifiable}

+	 * <p>

+	 * Note this code is copied from

+	 * org.eclipse.stem.internal.data.records.Record. That method should be

+	 * removed and this one used instead.

+	 * 

+	 * @param identifiable

+	 *            the {@link Identifiable} to be serialized.

+	 * @param serializationURI

+	 *            the {@link URI} that specifies where the {@link Identifiable}

+	 *            is to be serialized.

+	 * @throws IOException

+	 *             if there is a problem serializing the {@link Identifiable}

+	 */

+	public static void serializeIdentifiable(final Identifiable identifiable,

+			final URI serializationURI) throws IOException {

+		final List<Identifiable> set = new ArrayList<Identifiable>();

+		set.add(identifiable);

+		serializeIdentifiables(set, serializationURI);

+	} // serializeIdentifiable

+

+	/**

+	 * Serialize an {@link Identifiable}

+	 * 

+	 * @param identifiable

+	 *            the {@link Identifiable} to be serialized.

+	 * @param serializationURI

+	 *            the {@link URI} that specifies where the {@link Identifiable}

+	 *            is to be serialized.

+	 * @throws IOException

+	 *             if there is a problem serializing the {@link Identifiable}

+	 */

+	public static void serializeIdentifiables(final List<Identifiable> identifiables,

+			final URI serializationURI) throws IOException {

+

+		// This code could be running "stand alone" (i.e., not within eclipse),

+		// thus the default factories for the extensions are not registered as

+		// they would from their extension of

+		// "org.eclipse.emf.ecore.extension_parser". So we need to register them

+		// here.

+

+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*",

+				STEMXMIResourceFactoryImpl.INSTANCE);

+		Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap().put(

+				"platform", STEMXMIResourceFactoryImpl.INSTANCE);

+

+		final ResourceSet resourceSet = new ResourceSetImpl();

+

+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()

+				.put("*", STEMXMIResourceFactoryImpl.INSTANCE);

+

+		resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put(

+				"platform", STEMXMIResourceFactoryImpl.INSTANCE);

+

+		final Resource resource = resourceSet.createResource(serializationURI);

+		

+		for (Identifiable id : identifiables) {

+			resource.getContents().add(id);

+		}

+

+		resource.save(EMF_SAVE_OPTIONS);

+	} // serializeIdentifiable

+	

+	/**

+	 * Common method for determining the geographic level of a geographic key (last segment of a URI)

+	 * @param key

+	 * @return the level of the key

+	 */

+	public  static int keyLevel(final String key) {

+		// ZZZ is special

+		if(key.equalsIgnoreCase("ZZZ")) return -1;

+		int level = 0;

+		int start = 0;

+		for (int temp = key.indexOf("-"); temp > 0;) { //$NON-NLS-1$

+			level++;

+			start += temp + 1;

+			temp = key.substring(start).indexOf("-"); //$NON-NLS-1$

+		} // for

+		return level;

+	} // keyLevel

+} // Utility

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonFactory.java
new file mode 100644
index 0000000..83dcbff
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonFactory.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.core.common;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.common.CommonPackage
+ * @generated
+ */
+public interface CommonFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	CommonFactory eINSTANCE = org.eclipse.stem.core.common.impl.CommonFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Dublin Core</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Dublin Core</em>'.
+	 * @generated
+	 */
+	DublinCore createDublinCore();
+
+	/**
+	 * Returns a new object of class '<em>Identifiable Filter</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Identifiable Filter</em>'.
+	 * @generated
+	 */
+	IdentifiableFilter createIdentifiableFilter();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	CommonPackage getCommonPackage();
+
+} //CommonFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonPackage.java
new file mode 100644
index 0000000..ae0ea8c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/CommonPackage.java
@@ -0,0 +1,953 @@
+package org.eclipse.stem.core.common;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.common.CommonFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface CommonPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "common";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/common.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.common";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	CommonPackage eINSTANCE = org.eclipse.stem.core.common.impl.CommonPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.common.impl.DublinCoreImpl <em>Dublin Core</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.impl.DublinCoreImpl
+	 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getDublinCore()
+	 * @generated
+	 */
+	int DUBLIN_CORE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Title</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__TITLE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__IDENTIFIER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__DESCRIPTION = 2;
+
+	/**
+	 * The feature id for the '<em><b>Creator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__CREATOR = 3;
+
+	/**
+	 * The feature id for the '<em><b>Date</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__DATE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Format</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__FORMAT = 5;
+
+	/**
+	 * The feature id for the '<em><b>Publisher</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__PUBLISHER = 6;
+
+	/**
+	 * The feature id for the '<em><b>Coverage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__COVERAGE = 7;
+
+	/**
+	 * The feature id for the '<em><b>Contributor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__CONTRIBUTOR = 8;
+
+	/**
+	 * The feature id for the '<em><b>Relation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__RELATION = 9;
+
+	/**
+	 * The feature id for the '<em><b>Rights</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__RIGHTS = 10;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__SOURCE = 11;
+
+	/**
+	 * The feature id for the '<em><b>Subject</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__SUBJECT = 12;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__TYPE = 13;
+
+	/**
+	 * The feature id for the '<em><b>Language</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__LANGUAGE = 14;
+
+	/**
+	 * The feature id for the '<em><b>Bibliographic Citation</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__BIBLIOGRAPHIC_CITATION = 15;
+
+	/**
+	 * The feature id for the '<em><b>Created</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__CREATED = 16;
+
+	/**
+	 * The feature id for the '<em><b>License</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__LICENSE = 17;
+
+	/**
+	 * The feature id for the '<em><b>Required</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__REQUIRED = 18;
+
+	/**
+	 * The feature id for the '<em><b>Spatial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__SPATIAL = 19;
+
+	/**
+	 * The feature id for the '<em><b>Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE__VALID = 20;
+
+	/**
+	 * The number of structural features of the '<em>Dublin Core</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DUBLIN_CORE_FEATURE_COUNT = 21;
+
+	/**
+	 * The meta object id for the '{@link java.lang.Comparable <em>Comparable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.lang.Comparable
+	 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getComparable()
+	 * @generated
+	 */
+	int COMPARABLE = 2;
+
+	/**
+	 * The number of structural features of the '<em>Comparable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPARABLE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.common.impl.IdentifiableImpl <em>Identifiable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.impl.IdentifiableImpl
+	 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getIdentifiable()
+	 * @generated
+	 */
+	int IDENTIFIABLE = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE__URI = COMPARABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE__TYPE_URI = COMPARABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE__DUBLIN_CORE = COMPARABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Identifiable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_FEATURE_COUNT = COMPARABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.common.impl.IdentifiableFilterImpl <em>Identifiable Filter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.impl.IdentifiableFilterImpl
+	 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getIdentifiableFilter()
+	 * @generated
+	 */
+	int IDENTIFIABLE_FILTER = 3;
+
+	/**
+	 * The number of structural features of the '<em>Identifiable Filter</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_FILTER_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 4;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.common.DublinCore <em>Dublin Core</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Dublin Core</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore
+	 * @generated
+	 */
+	EClass getDublinCore();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getTitle <em>Title</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Title</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getTitle()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Title();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getIdentifier <em>Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Identifier</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getIdentifier()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Identifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getDescription <em>Description</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Description</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getDescription()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Description();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getCreator <em>Creator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Creator</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getCreator()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Creator();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getDate <em>Date</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Date</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getDate()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Date();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getFormat <em>Format</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Format</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getFormat()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Format();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getPublisher <em>Publisher</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Publisher</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getPublisher()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Publisher();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getCoverage <em>Coverage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Coverage</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getCoverage()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Coverage();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getContributor <em>Contributor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Contributor</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getContributor()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Contributor();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getRelation <em>Relation</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Relation</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getRelation()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Relation();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getRights <em>Rights</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Rights</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getRights()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Rights();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getSource <em>Source</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Source</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getSource()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Source();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getSubject <em>Subject</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Subject</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getSubject()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Subject();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getType()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Type();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getLanguage <em>Language</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Language</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getLanguage()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Language();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getBibliographicCitation <em>Bibliographic Citation</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Bibliographic Citation</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getBibliographicCitation()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_BibliographicCitation();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getCreated <em>Created</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Created</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getCreated()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Created();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getLicense <em>License</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>License</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getLicense()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_License();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getRequired <em>Required</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Required</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getRequired()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Required();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getSpatial <em>Spatial</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Spatial</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getSpatial()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Spatial();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.DublinCore#getValid <em>Valid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Valid</em>'.
+	 * @see org.eclipse.stem.core.common.DublinCore#getValid()
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	EAttribute getDublinCore_Valid();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Identifiable</em>'.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	EClass getIdentifiable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.Identifiable#getURI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>URI</em>'.
+	 * @see org.eclipse.stem.core.common.Identifiable#getURI()
+	 * @see #getIdentifiable()
+	 * @generated
+	 */
+	EAttribute getIdentifiable_URI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.common.Identifiable#getTypeURI <em>Type URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type URI</em>'.
+	 * @see org.eclipse.stem.core.common.Identifiable#getTypeURI()
+	 * @see #getIdentifiable()
+	 * @generated
+	 */
+	EAttribute getIdentifiable_TypeURI();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.common.Identifiable#getDublinCore <em>Dublin Core</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Dublin Core</em>'.
+	 * @see org.eclipse.stem.core.common.Identifiable#getDublinCore()
+	 * @see #getIdentifiable()
+	 * @generated
+	 */
+	EReference getIdentifiable_DublinCore();
+
+	/**
+	 * Returns the meta object for class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Comparable</em>'.
+	 * @see java.lang.Comparable
+	 * @model instanceClass="java.lang.Comparable" typeParameters="T"
+	 * @generated
+	 */
+	EClass getComparable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.common.IdentifiableFilter <em>Identifiable Filter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Identifiable Filter</em>'.
+	 * @see org.eclipse.stem.core.common.IdentifiableFilter
+	 * @generated
+	 */
+	EClass getIdentifiableFilter();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	CommonFactory getCommonFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.common.impl.DublinCoreImpl <em>Dublin Core</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.common.impl.DublinCoreImpl
+		 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getDublinCore()
+		 * @generated
+		 */
+		EClass DUBLIN_CORE = eINSTANCE.getDublinCore();
+
+		/**
+		 * The meta object literal for the '<em><b>Title</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__TITLE = eINSTANCE.getDublinCore_Title();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__IDENTIFIER = eINSTANCE.getDublinCore_Identifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__DESCRIPTION = eINSTANCE.getDublinCore_Description();
+
+		/**
+		 * The meta object literal for the '<em><b>Creator</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__CREATOR = eINSTANCE.getDublinCore_Creator();
+
+		/**
+		 * The meta object literal for the '<em><b>Date</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__DATE = eINSTANCE.getDublinCore_Date();
+
+		/**
+		 * The meta object literal for the '<em><b>Format</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__FORMAT = eINSTANCE.getDublinCore_Format();
+
+		/**
+		 * The meta object literal for the '<em><b>Publisher</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__PUBLISHER = eINSTANCE.getDublinCore_Publisher();
+
+		/**
+		 * The meta object literal for the '<em><b>Coverage</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__COVERAGE = eINSTANCE.getDublinCore_Coverage();
+
+		/**
+		 * The meta object literal for the '<em><b>Contributor</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__CONTRIBUTOR = eINSTANCE.getDublinCore_Contributor();
+
+		/**
+		 * The meta object literal for the '<em><b>Relation</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__RELATION = eINSTANCE.getDublinCore_Relation();
+
+		/**
+		 * The meta object literal for the '<em><b>Rights</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__RIGHTS = eINSTANCE.getDublinCore_Rights();
+
+		/**
+		 * The meta object literal for the '<em><b>Source</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__SOURCE = eINSTANCE.getDublinCore_Source();
+
+		/**
+		 * The meta object literal for the '<em><b>Subject</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__SUBJECT = eINSTANCE.getDublinCore_Subject();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__TYPE = eINSTANCE.getDublinCore_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>Language</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__LANGUAGE = eINSTANCE.getDublinCore_Language();
+
+		/**
+		 * The meta object literal for the '<em><b>Bibliographic Citation</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__BIBLIOGRAPHIC_CITATION = eINSTANCE.getDublinCore_BibliographicCitation();
+
+		/**
+		 * The meta object literal for the '<em><b>Created</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__CREATED = eINSTANCE.getDublinCore_Created();
+
+		/**
+		 * The meta object literal for the '<em><b>License</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__LICENSE = eINSTANCE.getDublinCore_License();
+
+		/**
+		 * The meta object literal for the '<em><b>Required</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__REQUIRED = eINSTANCE.getDublinCore_Required();
+
+		/**
+		 * The meta object literal for the '<em><b>Spatial</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__SPATIAL = eINSTANCE.getDublinCore_Spatial();
+
+		/**
+		 * The meta object literal for the '<em><b>Valid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DUBLIN_CORE__VALID = eINSTANCE.getDublinCore_Valid();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.common.impl.IdentifiableImpl <em>Identifiable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.common.impl.IdentifiableImpl
+		 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getIdentifiable()
+		 * @generated
+		 */
+		EClass IDENTIFIABLE = eINSTANCE.getIdentifiable();
+
+		/**
+		 * The meta object literal for the '<em><b>URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute IDENTIFIABLE__URI = eINSTANCE.getIdentifiable_URI();
+
+		/**
+		 * The meta object literal for the '<em><b>Type URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute IDENTIFIABLE__TYPE_URI = eINSTANCE.getIdentifiable_TypeURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Dublin Core</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference IDENTIFIABLE__DUBLIN_CORE = eINSTANCE.getIdentifiable_DublinCore();
+
+		/**
+		 * The meta object literal for the '{@link java.lang.Comparable <em>Comparable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see java.lang.Comparable
+		 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getComparable()
+		 * @generated
+		 */
+		EClass COMPARABLE = eINSTANCE.getComparable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.common.impl.IdentifiableFilterImpl <em>Identifiable Filter</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.common.impl.IdentifiableFilterImpl
+		 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getIdentifiableFilter()
+		 * @generated
+		 */
+		EClass IDENTIFIABLE_FILTER = eINSTANCE.getIdentifiableFilter();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.core.common.impl.CommonPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
+} //CommonPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/DublinCore.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/DublinCore.java
new file mode 100644
index 0000000..b575dc9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/DublinCore.java
@@ -0,0 +1,831 @@
+// DublinCore.java
+package org.eclipse.stem.core.common;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Date;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A <code>DublinCore</code> instance records a set of attributes that describe
+ * a "resource" as defined in the "Dublin Core" metadata standard <a
+ * href="http://www.dublincore.org/" >http://www.dublincore.org/</a>. These
+ * attributes are used to specify the source and details of the various
+ * components that are combined to create the canonical {@link Graph} that is
+ * used in STEM as the representational framework for simulation state.
+ * <p>
+ * Note that not all of the dublin core attributes are required.
+ * </p>
+ * 
+ * @model
+ */
+public interface DublinCore extends EObject {
+
+	/**
+	 * The XML attribute name for the "Format" of the resource.
+	 * 
+	 * @see #getFormat()
+	 * @see #setFormat(String)
+	 */
+	String FORMAT = "format";
+
+	/**
+	 * The XML attribute name for the "Identifier" of the resource. In STEM this
+	 * is the URI of the resource.
+	 * 
+	 * @see #getIdentifier()
+	 * @see #setIdentifier(String)
+	 */
+	String IDENTIFIER = "identifier";
+
+	/**
+	 * The XML attribute name for the "Title" of the resource.
+	 * 
+	 * @see #getTitle()
+	 * @see #setTitle(String)
+	 */
+	String TITLE = "title";
+
+	/**
+	 * <h1>Title</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A name given to the resource"
+	 * <li>Comment:</li>
+	 * Usually the formal name of the resource.
+	 * <li>Example:</li>
+	 * "United States Administration Level 0"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/title">
+	 * http://purl.org/dc/elements/1.1/title</a>
+	 * </ul>
+	 * 
+	 * @return the title of the resource.
+	 * @model required="false"
+	 */
+	String getTitle();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getTitle <em>Title</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Title</em>' attribute.
+	 * @see #getTitle()
+	 * @generated
+	 */
+	void setTitle(String value);
+
+	/**
+	 * <h1>Identifier</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "An unambiguous reference to the resource within a given context."
+	 * <li>Comment:</li>
+	 * The URL of the resource.
+	 * <li>Example:</li>
+	 * "stem://org.eclipse.stem/stem/foo"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/identifier">
+	 * http://purl.org/dc/elements/1.1/identifier</a>
+	 * </ul>
+	 * 
+	 * @return the identifier of the resource.
+	 * @model required="false"
+	 */
+	String getIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getIdentifier <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @param value the new value of the '<em>Identifier</em>' attribute.
+	 * @see #getIdentifier()
+	 * @generated
+	 */
+	void setIdentifier(String value);
+
+	/**
+	 * <h1>Description</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "An account of the content of the resource."
+	 * <li>Comment:</li>
+	 * Typically a short abstract.
+	 * <li>Example:</li>
+	 * "All of the cattle farms in the U.K. as of 2006."
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/description">
+	 * http://purl.org/dc/elements/1.1/description</a>
+	 * </ul>
+	 * 
+	 * @return the description of the resource.
+	 * @model required="false"
+	 */
+	String getDescription();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getDescription <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @param value the new value of the '<em>Description</em>' attribute.
+	 * @see #getDescription()
+	 * @generated
+	 */
+	void setDescription(String value);
+
+	/**
+	 * <h1>Creator</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "An entity primarily responsible for making the content of the resource."
+	 * <li>Comment:</li>
+	 * Typically the name of a person or organization.
+	 * <li>Example:</li>
+	 * "IBM"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/creator">
+	 * http://purl.org/dc/elements/1.1/creator</a>
+	 * </ul>
+	 * 
+	 * @return the creator of the resource.
+	 * @model required="false"
+	 */
+	String getCreator();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getCreator
+	 * <em>Creator</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Creator</em>' attribute.
+	 * @see #getCreator()
+	 * @generated
+	 */
+	void setCreator(String value);
+
+	/**
+	 * <h1>Date</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A date associated with an event in the life cycle of the resource."
+	 * <li>Comment:</li>
+	 * Typically YYYY-MM-DD. See: <a href="http://www.w3.org/TR/NOTE-datetime">
+	 * http://www.w3.org/TR/NOTE-datetime</a>, also ISO&nbsp;8601.
+	 * <li>Example:</li>
+	 * "2006-03-14"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/date">
+	 * http://purl.org/dc/elements/1.1/date</a>
+	 * </ul>
+	 * 
+	 * @return the date of the resource.
+	 * @model required="false"
+	 */
+	String getDate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getDate <em>Date</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Date</em>' attribute.
+	 * @see #getDate()
+	 * @generated
+	 */
+	void setDate(String value);
+
+	/**
+	 * Set the date.
+	 * 
+	 * @param date
+	 * 
+	 * @see #setDate(String)
+	 * @see #getDate()
+	 * @see #setCreated(Date)
+	 */
+	void setDate(final Date date);
+
+	/**
+	 * <h1>Format</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "The physical or digital manifestation of the resource."
+	 * <li>Comment:</li>
+	 * A MIME type perhaps.
+	 * <li>Example:</li> ?
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/format">
+	 * http://purl.org/dc/elements/1.1/format</a>
+	 * </ul>
+	 * 
+	 * @return the format of the resource.
+	 * @model required="false"
+	 */
+	String getFormat();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getFormat
+	 * <em>Format</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Format</em>' attribute.
+	 * @see #getFormat()
+	 * @generated
+	 */
+	void setFormat(String value);
+
+	/**
+	 * <h1>Publisher</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "An entity responsible for making the resource available."
+	 * <li>Comment:</li>
+	 * Typically the name of a person, organization or service.
+	 * <li>Example:</li>
+	 * "IBM"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/publisher">
+	 * http://purl.org/dc/elements/1.1/publisher</a>
+	 * </ul>
+	 * 
+	 * @return the publisher of the resource.
+	 * @model required="false"
+	 */
+	String getPublisher();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getPublisher
+	 * <em>Publisher</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Publisher</em>' attribute.
+	 * @see #getPublisher()
+	 * @generated
+	 */
+	void setPublisher(String value);
+
+	/**
+	 * <h1>Coverage</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "The extent or scope of the content of the resource."
+	 * <li>Comment:</li>
+	 * Could include spatial location, temporal period (date or date range),
+	 * jurisdiction. See, the <a
+	 * href="http://www.dublincore.org/documents/dcmi-point/"> DCMI Point </a>,
+	 * <a href="http://www.getty.edu/research/tools/vocabulary/tgn/index.html">
+	 * Thesaurus of Geographic Names</a>, <a
+	 * href="http://www.dublincore.org/documents/dcmi-period/">DCMI Period</a>
+	 * <li>Example:</li>
+	 * "United States UN Administration level 2, 1900"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/coverage">
+	 * http://purl.org/dc/elements/1.1/coverage</a>
+	 * </ul>
+	 * 
+	 * @return the coverage of the resource.
+	 * @model required="false"
+	 */
+	String getCoverage();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getCoverage
+	 * <em>Coverage</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Coverage</em>' attribute.
+	 * @see #getCoverage()
+	 * @generated
+	 */
+	void setCoverage(String value);
+
+	/**
+	 * <h1>Contributor</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "An entity responsible for making contributions to the resource"
+	 * <li>Comment:</li>
+	 * Typically the name of a person, organization or service.
+	 * <li>Example:</li>
+	 * "IBM"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/contributor">
+	 * http://purl.org/dc/elements/1.1/contributor</a>
+	 * </ul>
+	 * 
+	 * @return the contributor of the resource.
+	 * @model required="false"
+	 */
+	String getContributor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getContributor <em>Contributor</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @param value the new value of the '<em>Contributor</em>' attribute.
+	 * @see #getContributor()
+	 * @generated
+	 */
+	void setContributor(String value);
+
+	/**
+	 * <h1>Relation</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A reference to a related resource."
+	 * <li>Comment:</li>
+	 * Perhaps a URL?
+	 * <li>Example:</li> ?
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/relation">
+	 * http://purl.org/dc/elements/1.1/relation</a>
+	 * </ul>
+	 * 
+	 * @return the relation of the resource.
+	 * @model required="false"
+	 */
+	String getRelation();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getRelation
+	 * <em>Relation</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Relation</em>' attribute.
+	 * @see #getRelation()
+	 * @generated
+	 */
+	void setRelation(String value);
+
+	/**
+	 * <h1>Rights</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "Information about rights held in and over the resource."
+	 * <li>Comment:</li>
+	 * Typically, a rights management statement.
+	 * <li>Example:</li>
+	 * &#169;IBM 2006
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/rights">
+	 * http://purl.org/dc/elements/1.1/rights</a>
+	 * </ul>
+	 * 
+	 * @return the rights of the resource.
+	 * @model required="false"
+	 */
+	String getRights();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getRights
+	 * <em>Rights</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Rights</em>' attribute.
+	 * @see #getRights()
+	 * @generated
+	 */
+	void setRights(String value);
+
+	/**
+	 * <h1>Source</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A reference to a resource from which the present resource is derived."
+	 * <li>Comment:</li>
+	 * The original source of the contents of the resource.
+	 * <li>Example:</li>
+	 * "US Tiger files"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/source">
+	 * http://purl.org/dc/elements/1.1/source</a>
+	 * </ul>
+	 * 
+	 * @return the source of the resource.
+	 * @model required="false"
+	 */
+	String getSource();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getSource
+	 * <em>Source</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Source</em>' attribute.
+	 * @see #getSource()
+	 * @generated
+	 */
+	void setSource(String value);
+
+	/**
+	 * <h1>Subject</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "The topic of the content of the resource"
+	 * <li>Comment:</li>
+	 * Typically keywords or classification codes.
+	 * <li>Example:</li> ?
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/subject">
+	 * http://purl.org/dc/elements/1.1/subject</a>
+	 * </ul>
+	 * 
+	 * @return the subject of the resource.
+	 * @model required="false"
+	 */
+	String getSubject();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getSubject
+	 * <em>Subject</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Subject</em>' attribute.
+	 * @see #getSubject()
+	 * @generated
+	 */
+	void setSubject(String value);
+
+	/**
+	 * <h1>Type</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "The nature or genre of the resource."
+	 * <li>Comment:</li>
+	 * See: <a
+	 * href="http://dublincore.org/documents/dcmi-type-vocabulary/">http:
+	 * //dublincore.org/documents/dcmi-type-vocabulary/</a>
+	 * <li>Example:</li> ?
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/type">
+	 * http://purl.org/dc/elements/1.1/type</a>
+	 * </ul>
+	 * 
+	 * @return the type of the resource.
+	 * @model required="false"
+	 */
+	String getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(String value);
+
+	/**
+	 * <h1>Language</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A language of the intellectual content of the resource."
+	 * <li>Comment:</li>
+	 * Best practice <a href="http://www.ietf.org/rfc/rfc3066.txt"> RFC 3066</a>
+	 * and <a href="http://www.loc.gov/standards/iso639-2/">ISO 639</a>
+	 * <li>Example:</li>
+	 * "en-GB"
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/elements/1.1/language">
+	 * http://purl.org/dc/elements/1.1/language</a>
+	 * </ul>
+	 * 
+	 * @return the language of the resource.
+	 * @model required="false"
+	 */
+	String getLanguage();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getLanguage
+	 * <em>Language</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Language</em>' attribute.
+	 * @see #getLanguage()
+	 * @generated
+	 */
+	void setLanguage(String value);
+
+	/**
+	 * h1>Bibliographic Citation</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "A bibliographic reference for the resource."
+	 * <li>Comment:</li>
+	 * 
+	 * <li>Example:</li>
+	 * Ford, D.A., "STEM and the art of computer maintenance", Journal of
+	 * Foobar, 2006.
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/bibliographicCitation">
+	 * http://purl.org/dc/terms/1.1/bibliographicCitation</a>
+	 * </ul>
+	 * 
+	 * @return a bibliographic citation
+	 * @model required="false"
+	 */
+	String getBibliographicCitation();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getBibliographicCitation <em>Bibliographic Citation</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @param value the new value of the '<em>Bibliographic Citation</em>' attribute.
+	 * @see #getBibliographicCitation()
+	 * @generated
+	 */
+	void setBibliographicCitation(String value);
+
+	/**
+	 * h1>Created</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "The creation date of the resource."
+	 * <li>Comment:</li>
+	 * Basically, the format is: YYYY-MM-DD
+	 * <li>Example:</li>
+	 * 2006-03-29
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/created">
+	 * http://purl.org/dc/terms/1.1/created</a>
+	 * </ul>
+	 * 
+	 * @return the date the resource was created.
+	 * @model required="false"
+	 */
+	String getCreated();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getCreated
+	 * <em>Created</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Created</em>' attribute.
+	 * @see #getCreated()
+	 * @generated
+	 */
+	void setCreated(String value);
+
+	/**
+	 * Set the date the resource was created.
+	 * 
+	 * @param date
+	 *            the creation date of the resource
+	 * 
+	 * @see #setCreated(String)
+	 * @see #getCreated()
+	 * @see #setDate(Date)
+	 * @see
+	 */
+	void setCreated(final Date date);
+
+	/**
+	 * h1>License</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 *"A legal document giving official permission to do something with the
+	 * resource."
+	 * <li>Comment:</li>
+	 * Best practice is to use a URI to the specific license.
+	 * <li>Example:</li>
+	 * http://creativecommons.org/license/
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/license">
+	 * http://purl.org/dc/terms/1.1/license</a>
+	 * </ul>
+	 * 
+	 * @return the license associated with the resource
+	 * @model required="false"
+	 */
+	String getLicense();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getLicense
+	 * <em>License</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>License</em>' attribute.
+	 * @see #getLicense()
+	 * @generated
+	 */
+	void setLicense(String value);
+
+	/**
+	 * h1>Requires</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 *"The described resource requires the referenced resource to support its
+	 * function, delivery, or coherence of content."
+	 * <li>Comment:</li>
+	 * In STEM this is the URI that is the identifier of the required resource.
+	 * <li>Example:</li>
+	 * stem:/graphs/sample/sample1.graph
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/requires">
+	 * http://purl.org/dc/terms/1.1/requires</a>
+	 * </ul>
+	 * 
+	 * @return the identifier of a resource required by this resource
+	 * @model required="false"
+	 */
+	String getRequired();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getRequired
+	 * <em>Required</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Required</em>' attribute.
+	 * @see #getRequired()
+	 * @generated
+	 */
+	void setRequired(String value);
+
+	/**
+	 * h1>Spatial</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "Spatial characteristics of the intellectual content of the resource."
+	 * <li>Comment:</li>
+	 * See <a href="http://www.dublincore.org/documents/dcmi-point/">
+	 * http://www.dublincore.org/documents/dcmi-point/</a> However, this should
+	 * probably be a URI to a file that contains the actual lat/long data that
+	 * describes a polygon that defines the spatial outline of a place.
+	 * <li>Example:</li> ?
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/spatial">
+	 * http://purl.org/dc/terms/1.1/spatial</a>
+	 * </ul>
+	 * 
+	 * @return the identifier of a resource providing spatial data
+	 * @model required="false"
+	 */
+	String getSpatial();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.common.DublinCore#getSpatial
+	 * <em>Spatial</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Spatial</em>' attribute.
+	 * @see #getSpatial()
+	 * @generated
+	 */
+	void setSpatial(String value);
+
+	/**
+	 * <h1>Valid</h1>
+	 * <ul>
+	 * <li>Definition:</li>
+	 * "Date (often a range) of validity of a resource."
+	 * <li>Comment:</li>
+	 * See encoded in ISO&nbsp;8601 <a
+	 * href="http://www.w3.org/TR/NOTE-datetime">
+	 * http://www.w3.org/TR/NOTE-datetime</a>.
+	 * <li>Example:</li>
+	 * start=2006-03-29; end=2006-03-30; or simply start=2006-03-29; if there is
+	 * no end to the validity
+	 * <li>URI:</li>
+	 * <a href="http://purl.org/dc/terms/1.1/valid">
+	 * http://purl.org/dc/terms/1.1/valid</a>
+	 * </ul>
+	 * 
+	 * @return the date, or range that the resource is valid.
+	 * @model required="false"
+	 */
+	String getValid();
+
+	/**
+	 * @return the starting {@link Date} of the valid date range, or
+	 *         <code>null</code> if the valid value is not set or is not
+	 *         correctly formatted as an ISO&nbsp;8601 date string <a
+	 *         href="http://www.w3.org/TR/NOTE-datetime">
+	 *         http://www.w3.org/TR/NOTE-datetime</a>.
+	 */
+	Date getValidStartDate();
+
+	/**
+	 * @return the ending {@link Date} of the valid date range, or
+	 *         <code>null</code> if the valid value is not set or the end date
+	 *         is not specified, or the value is not correctly formatted as an
+	 *         ISO&nbsp;8601 date string <a
+	 *         href="http://www.w3.org/TR/NOTE-datetime">
+	 *         http://www.w3.org/TR/NOTE-datetime</a>.
+	 */
+	Date getValidEndDate();
+
+	/**
+	 * @param dublinCore
+	 * @return <code>true</code> if the start date of the valid date range
+	 *         attribute is before the start date of the passed
+	 *         {@link DublinCore} instance's valid date range, or, if the passed
+	 *         instance is <code>null</code>, <code>false</code> otherwise.
+	 *         Also, <code>false</code> is returned if either instance does not
+	 *         specify a valid date range.
+	 * 
+	 * @see DublinCore#getValid()
+	 */
+	boolean isValidBefore(DublinCore dublinCore);
+
+	/**
+	 * Compute the extent of the overlap of the valid date range of this
+	 * instance with that of the passed instance. If only one instance has a
+	 * valid data range specified that will be returned.
+	 * 
+	 * @param dublinCore
+	 * @return 0-start date of new range, 1-end date of new range, or
+	 *         <code>null</code> if there is no overlap.
+	 */
+	Date[] computeValidDateRangeOverlap(DublinCore dublinCore);
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.DublinCore#getValid <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Valid</em>' attribute.
+	 * @see #getValid()
+	 * @generated
+	 */
+	void setValid(String value);
+
+	/**
+	 * Set the starting date that the resource is value. No end date will be
+	 * set.
+	 * 
+	 * @param startDate
+	 *            the starting date
+	 * 
+	 * @see #setValid(String)
+	 * @see #setValid(Date, Date)
+	 * @see #setDate(Date)
+	 * @see #setCreated(Date)
+	 */
+	void setValid(final Date startDate);
+
+	/**
+	 * Set the starting and ending dates that the resource is valid.
+	 * 
+	 * @param startDate
+	 *            the starting date
+	 * @param endDate
+	 *            the ending date
+	 * 
+	 * @see #setValid(String)
+	 * @see #setValid(Date)
+	 * @see #setDate(Date)
+	 * @see #setCreated(Date)
+	 */
+	void setValid(final Date startDate, final Date endDate);
+
+	/**
+	 * Initialize some of the Dublin Core terms from information available from
+	 * the run-time environment.
+	 * <ul>
+	 * <li><code>Created</code> is set to the current date (e.g., 2006-06-02)</li>
+	 * <li><code>Creator</code> is set to the value returned by
+	 * <code>System.getProperty("user.name")</code> (e.g., <code>daford</code>)
+	 * </ul>
+	 * 
+	 * @return the instance
+	 * 
+	 * @see #setCreated(String)
+	 * @see #setDate(String)
+	 * @see #setValid(String)
+	 * @see #setCreator(String)
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DublinCore populate();
+} // DublinCore
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/Identifiable.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/Identifiable.java
new file mode 100644
index 0000000..e1e7b6c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/Identifiable.java
@@ -0,0 +1,93 @@
+// Identifiable.java
+package org.eclipse.stem.core.common;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.lang.Comparable;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * An <code>Identifiable</code> instance represents an "identifiable"
+ * component in STEM. Such a component is one that is uniquely identified by a
+ * {@link URI}. An <code>Identifiable</code> also has {@link DublinCore}
+ * metadata (<a href="http://www.dublincore.org/" >http://www.dublincore.org/</a>)
+ * associated with it that defines its origin and contents.
+ * <p>
+ * Virtually all components in a STEM simulation are <code>Identifiable</code>.
+ * </p>
+ * 
+ * @see Graph
+ * @see org.eclipse.stem.core.model.Model
+ * @see org.eclipse.stem.core.scenario.Scenario
+ * 
+ * @model abstract="true"
+ * @implements SanityChecker
+ */
+public interface Identifiable extends EObject, Comparable<Identifiable>, SanityChecker {
+
+	/**
+	 * @return the URL that uniquely identifies this Identifiable component.
+	 * 
+	 * @model required="true"
+	 */
+	URI getURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.Identifiable#getURI <em>URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>URI</em>' attribute.
+	 * @see #getURI()
+	 * @generated
+	 */
+	void setURI(URI value);
+
+	/**
+	 * @return the URL that uniquely identifies the type of this Identifiable
+	 *         component.
+	 * 
+	 * @model required="true"
+	 */
+	URI getTypeURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.Identifiable#getTypeURI <em>Type URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type URI</em>' attribute.
+	 * @see #getTypeURI()
+	 * @generated
+	 */
+	void setTypeURI(URI value);
+
+	/**
+	 * @return the "Dublin Core" metadata <a
+	 *         href="http://www.dublincore.org/">http://www.dublincore.org/</a>
+	 *         associated with this Identifiable component.
+	 * @model containment="true" required="true"
+	 */
+	DublinCore getDublinCore();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.common.Identifiable#getDublinCore <em>Dublin Core</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Dublin Core</em>' containment reference.
+	 * @see #getDublinCore()
+	 * @generated
+	 */
+	void setDublinCore(DublinCore value);
+
+	/**
+	 * @return true if the instance is "sane", false otherwise.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean sane();
+} // Identifiable
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/IdentifiableFilter.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/IdentifiableFilter.java
new file mode 100644
index 0000000..eaad0ba
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/IdentifiableFilter.java
@@ -0,0 +1,26 @@
+package org.eclipse.stem.core.common;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Identifiable Filter</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.core.common.CommonPackage#getIdentifiableFilter()
+ * @model
+ * @generated
+ */
+public interface IdentifiableFilter extends EObject {
+} // IdentifiableFilter
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/SanityChecker.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/SanityChecker.java
new file mode 100644
index 0000000..b0eb80a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/SanityChecker.java
@@ -0,0 +1,74 @@
+// SanityChecker.java
+package org.eclipse.stem.core.common;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * The <code>SanityChecker</code> interface is implemented by classes that can
+ * perform a self-check to determine their "sanity" at run-time. If assertions
+ * are enabled ("-ea" JVM flag) and an instance finds a problem an assertion
+ * will typically fail and the execution will halt. If assertions are not
+ * enabled then <code>false</code> will be returned by the {@link #sane()}
+ * method and execution will continue.
+ * <p>
+ * This interface enables the ability to check the consistency of the entire
+ * system at run-time. Typically, that is done at strategic points in the
+ * execution, for instance, at the start of the main simulation cycle.
+ * </p>
+ */
+public interface SanityChecker {
+
+	/**
+	 * This method is for ongoing development and testing purposes. It performs
+	 * a "self-check" on the instance of the class. The checking consists of
+	 * combination of boolean tests and assertions using the Java "assert"
+	 * facility. Assertions must be enabled using the "-ea" JVM flag for the
+	 * assertions to be enabled.
+	 * <p>
+	 * This method is intended to be overridden by extending sub-classes. These
+	 * classes should first call the method in the super class (i.e.,
+	 * <code>super.sane()</code>) to ensure that the super class is "ok" and
+	 * then it can issue its own assertions. <code>
+	 * <pre>
+	 * void sane() {
+	 * 	boolean retValue = super.sane();
+	 * 
+	 * 	// If foo references bar, then bar should reference foo!
+	 * 	retValue = retValue &amp;&amp; (foo.a == bar &amp;&amp; bar.a == foo);
+	 * 	assert(retValue);
+	 * 
+	 * 	return retValue;
+	 * } // sane
+	 * </pre>
+	 * </code>
+	 * <p>
+	 * The idiom <code>retValue = retValue && &lt;boolean test&gt;</code>
+	 * followed by an assertion of the value of <code>retValue</code> is a
+	 * typical pattern. If followed, then once a problem is detected, an
+	 * assertion will be thrown, or the rest of the tests will be skipped and
+	 * the value of <code>false</code> returned. By having <code>sane</code>
+	 * return a value rather than simply relying upon the <code>assert</code>
+	 * keyword sanity testing can occur even if assertions are not enabled.
+	 * <p>
+	 * The <code>sane</code> method should be called when the instance is
+	 * known to be "stable" so the consistency checks should complete with no
+	 * problems (if all is well).
+	 * 
+	 * @return <code>true</code> if the class passes its self-test,
+	 *         <code>false</code> otherwise
+	 * @throws AssertionError
+	 *             if assertions are enabled and <code>false</code> would be
+	 *             returned
+	 */
+	boolean sane();
+
+} // SanityChecker
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonFactoryImpl.java
new file mode 100644
index 0000000..53259eb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonFactoryImpl.java
@@ -0,0 +1,173 @@
+package org.eclipse.stem.core.common.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.common.CommonFactory;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+//import org.eclipse.stem.core.common.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonFactoryImpl extends EFactoryImpl implements CommonFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CommonFactory init() {
+		try {
+			CommonFactory theCommonFactory = (CommonFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/common.ecore"); //$NON-NLS-1$ 
+			if (theCommonFactory != null) {
+				return theCommonFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new CommonFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case CommonPackage.DUBLIN_CORE: return createDublinCore();
+			case CommonPackage.IDENTIFIABLE_FILTER: return createIdentifiableFilter();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case CommonPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case CommonPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DublinCore createDublinCore() {
+		DublinCoreImpl dublinCore = new DublinCoreImpl();
+		return dublinCore;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableFilter createIdentifiableFilter() {
+		IdentifiableFilterImpl identifiableFilter = new IdentifiableFilterImpl();
+		return identifiableFilter;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param eDataType 
+	 * @param initialValue 
+	 * @return the URI
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonPackage getCommonPackage() {
+		return (CommonPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static CommonPackage getPackage() {
+		return CommonPackage.eINSTANCE;
+	}
+
+} //CommonFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonPackageImpl.java
new file mode 100644
index 0000000..c6668f5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/CommonPackageImpl.java
@@ -0,0 +1,594 @@
+package org.eclipse.stem.core.common.impl;
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.lang.Comparable;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonFactory;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonPackageImpl extends EPackageImpl implements CommonPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass dublinCoreEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass identifiableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass comparableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass identifiableFilterEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.common.CommonPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private CommonPackageImpl() {
+		super(eNS_URI, CommonFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link CommonPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static CommonPackage init() {
+		if (isInited) return (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+
+		// Obtain or create and register package
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new CommonPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theCommonPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(CommonPackage.eNS_URI, theCommonPackage);
+		return theCommonPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDublinCore() {
+		return dublinCoreEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Title() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Identifier() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Description() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Creator() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Date() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Format() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Publisher() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Coverage() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Contributor() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Relation() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Rights() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Source() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Subject() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Type() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(13);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Language() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(14);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_BibliographicCitation() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(15);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Created() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(16);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_License() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(17);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Required() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(18);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Spatial() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(19);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDublinCore_Valid() {
+		return (EAttribute)dublinCoreEClass.getEStructuralFeatures().get(20);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIdentifiable() {
+		return identifiableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIdentifiable_URI() {
+		return (EAttribute)identifiableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIdentifiable_TypeURI() {
+		return (EAttribute)identifiableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getIdentifiable_DublinCore() {
+		return (EReference)identifiableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getComparable() {
+		return comparableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIdentifiableFilter() {
+		return identifiableFilterEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonFactory getCommonFactory() {
+		return (CommonFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		dublinCoreEClass = createEClass(DUBLIN_CORE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__TITLE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__IDENTIFIER);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__DESCRIPTION);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__CREATOR);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__DATE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__FORMAT);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__PUBLISHER);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__COVERAGE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__CONTRIBUTOR);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__RELATION);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__RIGHTS);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__SOURCE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__SUBJECT);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__TYPE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__LANGUAGE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__BIBLIOGRAPHIC_CITATION);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__CREATED);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__LICENSE);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__REQUIRED);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__SPATIAL);
+		createEAttribute(dublinCoreEClass, DUBLIN_CORE__VALID);
+
+		identifiableEClass = createEClass(IDENTIFIABLE);
+		createEAttribute(identifiableEClass, IDENTIFIABLE__URI);
+		createEAttribute(identifiableEClass, IDENTIFIABLE__TYPE_URI);
+		createEReference(identifiableEClass, IDENTIFIABLE__DUBLIN_CORE);
+
+		comparableEClass = createEClass(COMPARABLE);
+
+		identifiableFilterEClass = createEClass(IDENTIFIABLE_FILTER);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+		addETypeParameter(comparableEClass, "T"); //$NON-NLS-1$
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		EGenericType g1 = createEGenericType(this.getComparable());
+		EGenericType g2 = createEGenericType(this.getIdentifiable());
+		g1.getETypeArguments().add(g2);
+		identifiableEClass.getEGenericSuperTypes().add(g1);
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(dublinCoreEClass, DublinCore.class, "DublinCore", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Title(), ecorePackage.getEString(), "title", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Identifier(), ecorePackage.getEString(), "identifier", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Description(), ecorePackage.getEString(), "description", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Creator(), ecorePackage.getEString(), "creator", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Date(), ecorePackage.getEString(), "date", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Format(), ecorePackage.getEString(), "format", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Publisher(), ecorePackage.getEString(), "publisher", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Coverage(), ecorePackage.getEString(), "coverage", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Contributor(), ecorePackage.getEString(), "contributor", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Relation(), ecorePackage.getEString(), "relation", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Rights(), ecorePackage.getEString(), "rights", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Source(), ecorePackage.getEString(), "source", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Subject(), ecorePackage.getEString(), "subject", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Type(), ecorePackage.getEString(), "type", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Language(), ecorePackage.getEString(), "language", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_BibliographicCitation(), ecorePackage.getEString(), "bibliographicCitation", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Created(), ecorePackage.getEString(), "created", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_License(), ecorePackage.getEString(), "license", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Required(), ecorePackage.getEString(), "required", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Spatial(), ecorePackage.getEString(), "spatial", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDublinCore_Valid(), ecorePackage.getEString(), "valid", null, 0, 1, DublinCore.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(dublinCoreEClass, this.getDublinCore(), "populate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(identifiableEClass, Identifiable.class, "Identifiable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getIdentifiable_URI(), this.getURI(), "uRI", null, 1, 1, Identifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getIdentifiable_TypeURI(), this.getURI(), "typeURI", null, 1, 1, Identifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getIdentifiable_DublinCore(), this.getDublinCore(), null, "dublinCore", null, 1, 1, Identifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(identifiableEClass, ecorePackage.getEBoolean(), "sane", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(comparableEClass, Comparable.class, "Comparable", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(identifiableFilterEClass, IdentifiableFilter.class, "IdentifiableFilter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //CommonPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/DublinCoreImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/DublinCoreImpl.java
new file mode 100644
index 0000000..82b5d18
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/DublinCoreImpl.java
@@ -0,0 +1,1602 @@
+package org.eclipse.stem.core.common.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Dublin Core</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getTitle <em>Title</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getCreator <em>Creator</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getDate <em>Date</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getFormat <em>Format</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getPublisher <em>Publisher</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getCoverage <em>Coverage</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getContributor <em>Contributor</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getRelation <em>Relation</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getRights <em>Rights</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getSource <em>Source</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getSubject <em>Subject</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getType <em>Type</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getLanguage <em>Language</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getBibliographicCitation <em>Bibliographic Citation</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getCreated <em>Created</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getLicense <em>License</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getRequired <em>Required</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getSpatial <em>Spatial</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.DublinCoreImpl#getValid <em>Valid</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DublinCoreImpl extends EObjectImpl implements DublinCore {
+	/**
+	 * The default value of the '{@link #getTitle() <em>Title</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTitle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TITLE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTitle() <em>Title</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTitle()
+	 * @generated
+	 * @ordered
+	 */
+	protected String title = TITLE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String identifier = IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DESCRIPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected String description = DESCRIPTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreator() <em>Creator</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCreator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CREATOR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreator() <em>Creator</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCreator()
+	 * @generated
+	 * @ordered
+	 */
+	protected String creator = CREATOR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDate() <em>Date</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DATE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDate() <em>Date</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDate()
+	 * @generated
+	 * @ordered
+	 */
+	protected String date = DATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFormat() <em>Format</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getFormat()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FORMAT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFormat() <em>Format</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getFormat()
+	 * @generated
+	 * @ordered
+	 */
+	protected String format = FORMAT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPublisher() <em>Publisher</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPublisher()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PUBLISHER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPublisher() <em>Publisher</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPublisher()
+	 * @generated
+	 * @ordered
+	 */
+	protected String publisher = PUBLISHER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCoverage() <em>Coverage</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCoverage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String COVERAGE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCoverage() <em>Coverage</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCoverage()
+	 * @generated
+	 * @ordered
+	 */
+	protected String coverage = COVERAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getContributor() <em>Contributor</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getContributor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CONTRIBUTOR_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getContributor() <em>Contributor</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getContributor()
+	 * @generated
+	 * @ordered
+	 */
+	protected String contributor = CONTRIBUTOR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRelation() <em>Relation</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRelation()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String RELATION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRelation() <em>Relation</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRelation()
+	 * @generated
+	 * @ordered
+	 */
+	protected String relation = RELATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRights() <em>Rights</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRights()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String RIGHTS_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRights() <em>Rights</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRights()
+	 * @generated
+	 * @ordered
+	 */
+	protected String rights = RIGHTS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSource() <em>Source</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SOURCE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSource() <em>Source</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSource()
+	 * @generated
+	 * @ordered
+	 */
+	protected String source = SOURCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSubject() <em>Subject</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSubject()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SUBJECT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSubject() <em>Subject</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSubject()
+	 * @generated
+	 * @ordered
+	 */
+	protected String subject = SUBJECT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TYPE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected String type = TYPE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLanguage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LANGUAGE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLanguage() <em>Language</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLanguage()
+	 * @generated
+	 * @ordered
+	 */
+	protected String language = LANGUAGE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getBibliographicCitation() <em>Bibliographic Citation</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getBibliographicCitation()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String BIBLIOGRAPHIC_CITATION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getBibliographicCitation() <em>Bibliographic Citation</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getBibliographicCitation()
+	 * @generated
+	 * @ordered
+	 */
+	protected String bibliographicCitation = BIBLIOGRAPHIC_CITATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCreated() <em>Created</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCreated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CREATED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCreated() <em>Created</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCreated()
+	 * @generated
+	 * @ordered
+	 */
+	protected String created = CREATED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getLicense() <em>License</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLicense()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LICENSE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLicense() <em>License</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLicense()
+	 * @generated
+	 * @ordered
+	 */
+	protected String license = LICENSE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRequired() <em>Required</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRequired()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String REQUIRED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getRequired() <em>Required</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRequired()
+	 * @generated
+	 * @ordered
+	 */
+	protected String required = REQUIRED_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSpatial() <em>Spatial</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSpatial()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String SPATIAL_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getSpatial() <em>Spatial</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSpatial()
+	 * @generated
+	 * @ordered
+	 */
+	protected String spatial = SPATIAL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getValid() <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String VALID_EDEFAULT = null;
+
+	/**
+	 * This is the string used in the {@link #valid} attribute to specify the
+	 * starting date of the valid date range.
+	 */
+	public static final String START = "start=";
+
+	/**
+	 * This is the string used in the {@link #valid} attribute to specify the
+	 * ending date of the valid date range.
+	 */
+	public static final String END = "end=";
+
+	/**
+	 * The cached value of the '{@link #getValid() <em>Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String valid = VALID_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DublinCoreImpl() {
+		super();
+	}
+
+	/**
+	 * This constructor is used to create and initialize a Dublin Core instance
+	 * from an IConfigurationElement instance. The configuration element is
+	 * extracted from the extension definition in the plugin.xml file of a
+	 * plug-in that is providing an Identifiable. This is used by the class
+	 * IdentifiableDelegate in the class
+	 * org.eclipse.stem.ui.views.IdentifiablePluginView to create a "proxy"
+	 * representation of the Dublin Core of the Identifiable from the
+	 * configuration element so that the Identifiable itself does not have to be
+	 * loaded.
+	 * 
+	 * @param configElement
+	 *            the configuration element from the plugin.xml file
+	 * 
+	 * @generated NOT
+	 */
+	public DublinCoreImpl(IConfigurationElement configElement) {
+		title = configElement.getAttribute("title");
+		creator = configElement.getAttribute("creator");
+		subject = configElement.getAttribute("subject");
+		description = configElement.getAttribute("description");
+		publisher = configElement.getAttribute("publisher");
+		contributor = configElement.getAttribute("contributor");
+		date = configElement.getAttribute("date");
+		type = configElement.getAttribute("type");
+		format = configElement.getAttribute("format");
+		identifier = configElement.getAttribute("identifier");
+		source = configElement.getAttribute("source");
+		language = configElement.getAttribute("language");
+		relation = configElement.getAttribute("relation");
+		coverage = configElement.getAttribute("coverage");
+		bibliographicCitation = configElement
+				.getAttribute("bibliographicCitation");
+		created = configElement.getAttribute("created");
+		license = configElement.getAttribute("license");
+		required = configElement.getAttribute("required");
+		spatial = configElement.getAttribute("spatial");
+		valid = configElement.getAttribute("valid");
+	} // DublinCoreImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return CommonPackage.Literals.DUBLIN_CORE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTitle(String newTitle) {
+		String oldTitle = title;
+		title = newTitle;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__TITLE, oldTitle, title));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCreator() {
+		return creator;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreator(String newCreator) {
+		String oldCreator = creator;
+		creator = newCreator;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__CREATOR, oldCreator, creator));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSubject() {
+		return subject;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSubject(String newSubject) {
+		String oldSubject = subject;
+		subject = newSubject;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__SUBJECT, oldSubject, subject));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDescription(String newDescription) {
+		String oldDescription = description;
+		description = newDescription;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__DESCRIPTION, oldDescription, description));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPublisher() {
+		return publisher;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPublisher(String newPublisher) {
+		String oldPublisher = publisher;
+		publisher = newPublisher;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__PUBLISHER, oldPublisher, publisher));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getContributor() {
+		return contributor;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setContributor(String newContributor) {
+		String oldContributor = contributor;
+		contributor = newContributor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__CONTRIBUTOR, oldContributor, contributor));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDate() {
+		return date;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDate(String newDate) {
+		String oldDate = date;
+		date = newDate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__DATE, oldDate, date));
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.DublinCore#setDate(java.util.Date)
+	 */
+	public void setDate(Date date) {
+		setDate(createISO8601DateString(date));
+	} // setDate
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(String newType) {
+		String oldType = type;
+		type = newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFormat() {
+		return format;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFormat(String newFormat) {
+		String oldFormat = format;
+		format = newFormat;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__FORMAT, oldFormat, format));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getIdentifier() {
+		return identifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIdentifier(String newIdentifier) {
+		String oldIdentifier = identifier;
+		identifier = newIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__IDENTIFIER, oldIdentifier, identifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSource() {
+		return source;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSource(String newSource) {
+		String oldSource = source;
+		source = newSource;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__SOURCE, oldSource, source));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLanguage() {
+		return language;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLanguage(String newLanguage) {
+		String oldLanguage = language;
+		language = newLanguage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__LANGUAGE, oldLanguage, language));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRelation() {
+		return relation;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelation(String newRelation) {
+		String oldRelation = relation;
+		relation = newRelation;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__RELATION, oldRelation, relation));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCoverage() {
+		return coverage;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCoverage(String newCoverage) {
+		String oldCoverage = coverage;
+		coverage = newCoverage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__COVERAGE, oldCoverage, coverage));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRights() {
+		return rights;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRights(String newRights) {
+		String oldRights = rights;
+		rights = newRights;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__RIGHTS, oldRights, rights));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getBibliographicCitation() {
+		return bibliographicCitation;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBibliographicCitation(String newBibliographicCitation) {
+		String oldBibliographicCitation = bibliographicCitation;
+		bibliographicCitation = newBibliographicCitation;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION, oldBibliographicCitation, bibliographicCitation));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCreated() {
+		return created;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCreated(String newCreated) {
+		String oldCreated = created;
+		created = newCreated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__CREATED, oldCreated, created));
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.DublinCore#setCreated(java.util.Date)
+	 */
+	public void setCreated(Date date) {
+		setCreated(createISO8601DateString(date));
+	} // setCreated
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLicense() {
+		return license;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLicense(String newLicense) {
+		String oldLicense = license;
+		license = newLicense;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__LICENSE, oldLicense, license));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRequired() {
+		return required;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRequired(String newRequired) {
+		String oldRequired = required;
+		required = newRequired;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__REQUIRED, oldRequired, required));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getSpatial() {
+		return spatial;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSpatial(String newSpatial) {
+		String oldSpatial = spatial;
+		spatial = newSpatial;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__SPATIAL, oldSpatial, spatial));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getValid() {
+		return valid;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.DublinCore#getValidEndDate()
+	 */
+	public Date getValidEndDate() {
+		return getValidEndDate(getValid());
+	} // getValidEndDate
+
+	/**
+	 * @see org.eclipse.stem.core.common.DublinCore#getValidEndDate()
+	 */
+	@SuppressWarnings("null")
+	public static Date getValidEndDate(final String validValue) {
+		Date retValue = null;
+		// Is the valid value set?
+		if (validValue != null) {
+			// Yes
+			final int dateIndex = validValue.indexOf(END);
+			// Is the end date specified?
+			if (dateIndex >= 0) {
+				// Yes
+				try {
+					retValue = createDateFromISO8601DateString(validValue
+							.substring(dateIndex + END.length()));
+				} catch (ParseException e) {
+					retValue = null;
+				}
+			} // if
+		} // if
+		return retValue;
+	} // getValidEndDate
+
+	/**
+	 * @see org.eclipse.stem.core.common.DublinCore#isValidBefore(DublinCore)
+	 */
+	@SuppressWarnings("null")
+	public boolean isValidBefore(DublinCore dublinCore) {
+		final Date ourStartDate = getValidStartDate();
+		final Date otherStartDate = dublinCore != null ? dublinCore
+				.getValidStartDate() : null;
+
+		boolean retValue = (dublinCore == null) || (otherStartDate == null);
+
+		retValue = retValue
+				|| (ourStartDate != null && otherStartDate.after(ourStartDate));
+
+		return retValue;
+	} // isValidBefore
+
+	public Date[] computeValidDateRangeOverlap(DublinCore dublinCore) {
+		Date[] retValue = null;
+		
+		final Date ourStartDate = getValidStartDate();
+		final Date ourEndDate = getValidEndDate();
+		final Date otherStartDate = dublinCore.getValidStartDate();
+		final Date otherEndDate = dublinCore.getValidEndDate();
+
+		Date newStartDate = ourStartDate;
+		Date newEndDate = ourEndDate;
+
+		// Figure out which start date is oldest
+		// Do we have a start date?
+		if (ourStartDate != null) {
+			// Yes
+			// How about the other start date?
+			if (otherStartDate != null) {
+				// Yes
+				// Is the other start date after ours?
+				if (otherStartDate.after(ourStartDate)) {
+					// Yes
+					newStartDate = otherStartDate;
+				}
+			} // if other start date?
+		} // if start date?
+		else {
+			// No
+			newStartDate = otherStartDate;
+		}
+
+		// Figure out which end data is youngest
+		// Do we have an end date?
+		if (ourEndDate != null) {
+			// Yes
+			// How about the other end date?
+			if (otherEndDate != null) {
+				// Yes
+				// Is the other end date before ours?
+				if (otherEndDate.before(ourEndDate)) {
+					// Yes
+					newEndDate = otherEndDate;
+				}
+			} // if the other end date?
+		} // if we have an end date
+		else {
+			// No
+			newEndDate = otherEndDate;
+		}
+
+		// At this point the newStartDate and newEndDate could be null. However,
+		// if they are not null, we need to check to make sure that the start
+		// comes before the end.
+
+		// Do we have a new start date?
+		if (newStartDate != null) {
+			// Yes
+			// How about the new end date?
+			if (newEndDate != null) {
+				// Yes
+				// Does the new start date come before the new end date?
+				if (newStartDate.before(newEndDate)) {
+					// Yes
+					retValue = new Date[] {newStartDate,newEndDate};
+				} 
+			}
+		} // if new start date
+
+		return retValue;
+	} // computeValidDateRangeOverlap
+	
+	/**
+	 * @param validValue
+	 * @return <code>true</code> if the end date in the valid string does not
+	 *         exist, or if it does, if it is properly formatted,
+	 *         <code>false</code> otherwise.
+	 */
+	public static boolean isValidEndDateValid(final String validValue) {
+		boolean retValue = true;
+		// Is the valid value set?
+		if (validValue != null) {
+			// Yes
+			try {
+				final String endPart = validValue.substring(
+						"start=yyyy-DD-mm;".length()).trim();
+				final int dateIndex = endPart.indexOf(END);
+
+				// Was there just white space?
+				if (endPart.equals("")) {
+					// Yes
+					return true;
+				}
+
+				// Does it end with a ";"?
+				if (!endPart.endsWith(";")) {
+					// No
+					return false;
+				}
+				
+				// Is it the right length?
+				if (endPart.length() != END.length() + "yyyy-dd-mm;".length()) {
+					// No
+					return false;
+				}
+				
+				// Is the end date specified?
+				if (dateIndex == 0) {
+					// Yes
+					// If we throw a parse exception we'll catch it below and return false 
+					createDateFromISO8601DateString(endPart.substring( END.length()));
+					retValue = true;
+
+				} // if
+				else {
+					retValue = false;
+				}
+			} catch (ParseException e) {
+				retValue = false;
+			} catch (StringIndexOutOfBoundsException e) {
+				retValue = false;
+			}
+		} // if
+		return retValue;
+	} // isValidEndDateValid
+
+	/**
+	 * @see org.eclipse.stem.core.common.DublinCore#getValidEndDate()
+	 */
+	public Date getValidStartDate() {
+		return getValidStartDate(getValid());
+	} // getValidStartDate
+
+	/**
+	 * @see org.eclipse.stem.core.common.DublinCore#getValidStartDate()
+	 */
+	@SuppressWarnings("null")
+	public static Date getValidStartDate(final String validValue) {
+		Date retValue = null;
+		// Is the valid value set?
+		if (validValue != null) {
+			// Yes
+			final int dateIndex = validValue.indexOf(START) + START.length();
+			try {
+				retValue = createDateFromISO8601DateString(validValue
+						.substring(dateIndex));
+			} catch (ParseException e) {
+				retValue = null;
+			}
+		}
+		return retValue;
+	} // getValidStartDate
+
+	/**
+	 * @param validValue
+	 * @return <code>true</code> if the start date in the valid string exists
+	 *         and is properly formatted
+	 */
+	public static boolean isValidStartDateValid(final String validValue) {
+		boolean retValue = false;
+		// Is the valid value set?
+		if (validValue != null) {
+			// Yes
+			try {
+				final String trimedValidValue = validValue.trim();
+				final int dateIndex = validValue.indexOf(START)
+						+ START.length();
+				final String extractedDate = trimedValidValue.substring(
+						dateIndex, "start=YYYY-DD-MM;".length());
+				// Is there a ";" on the end of the date?
+				if (!extractedDate.endsWith(";")) {
+					// No
+					return false;
+				}
+				// If we throw a parse exception, we'll catch it below and return false
+				createDateFromISO8601DateString(extractedDate);
+				retValue = true;
+			} catch (ParseException e) {
+				retValue = false;
+			} catch (StringIndexOutOfBoundsException e) {
+				retValue = false;
+			}
+		}
+		return retValue;
+	} // isValidStartDateValid
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValid(String newValid) {
+		String oldValid = valid;
+		valid = newValid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.DUBLIN_CORE__VALID, oldValid, valid));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public DublinCore populate() {
+		setCreated(Calendar.getInstance().getTime());
+		setCreator(System.getProperty("user.name"));
+		return this;
+	} // populate
+
+	/**
+	 * @see org.eclipse.stem.common.DublinCore#setValid(java.util.Date,
+	 *      java.util.Date)
+	 */
+	public void setValid(final Date startDate, final Date endDate) {
+		final StringBuilder sb = new StringBuilder(START);
+		sb.append(createISO8601DateString(startDate));
+		sb.append("; ");
+		sb.append(END);
+		sb.append(createISO8601DateString(endDate));
+		sb.append(";");
+		setValid(sb.toString());
+	} // setValid
+
+	/**
+	 * @see org.eclipse.stem.common.DublinCore#setValid(java.util.Date)
+	 */
+	public void setValid(final Date startDate) {
+		final StringBuilder sb = new StringBuilder(START);
+		sb.append(createISO8601DateString(startDate));
+		sb.append(";");
+		setValid(sb.toString());
+	} // setValid
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case CommonPackage.DUBLIN_CORE__TITLE:
+				return getTitle();
+			case CommonPackage.DUBLIN_CORE__IDENTIFIER:
+				return getIdentifier();
+			case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+				return getDescription();
+			case CommonPackage.DUBLIN_CORE__CREATOR:
+				return getCreator();
+			case CommonPackage.DUBLIN_CORE__DATE:
+				return getDate();
+			case CommonPackage.DUBLIN_CORE__FORMAT:
+				return getFormat();
+			case CommonPackage.DUBLIN_CORE__PUBLISHER:
+				return getPublisher();
+			case CommonPackage.DUBLIN_CORE__COVERAGE:
+				return getCoverage();
+			case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+				return getContributor();
+			case CommonPackage.DUBLIN_CORE__RELATION:
+				return getRelation();
+			case CommonPackage.DUBLIN_CORE__RIGHTS:
+				return getRights();
+			case CommonPackage.DUBLIN_CORE__SOURCE:
+				return getSource();
+			case CommonPackage.DUBLIN_CORE__SUBJECT:
+				return getSubject();
+			case CommonPackage.DUBLIN_CORE__TYPE:
+				return getType();
+			case CommonPackage.DUBLIN_CORE__LANGUAGE:
+				return getLanguage();
+			case CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION:
+				return getBibliographicCitation();
+			case CommonPackage.DUBLIN_CORE__CREATED:
+				return getCreated();
+			case CommonPackage.DUBLIN_CORE__LICENSE:
+				return getLicense();
+			case CommonPackage.DUBLIN_CORE__REQUIRED:
+				return getRequired();
+			case CommonPackage.DUBLIN_CORE__SPATIAL:
+				return getSpatial();
+			case CommonPackage.DUBLIN_CORE__VALID:
+				return getValid();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case CommonPackage.DUBLIN_CORE__TITLE:
+				setTitle((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__IDENTIFIER:
+				setIdentifier((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+				setDescription((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__CREATOR:
+				setCreator((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__DATE:
+				setDate((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__FORMAT:
+				setFormat((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__PUBLISHER:
+				setPublisher((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__COVERAGE:
+				setCoverage((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+				setContributor((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__RELATION:
+				setRelation((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__RIGHTS:
+				setRights((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__SOURCE:
+				setSource((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__SUBJECT:
+				setSubject((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__TYPE:
+				setType((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__LANGUAGE:
+				setLanguage((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION:
+				setBibliographicCitation((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__CREATED:
+				setCreated((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__LICENSE:
+				setLicense((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__REQUIRED:
+				setRequired((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__SPATIAL:
+				setSpatial((String)newValue);
+				return;
+			case CommonPackage.DUBLIN_CORE__VALID:
+				setValid((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case CommonPackage.DUBLIN_CORE__TITLE:
+				setTitle(TITLE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__IDENTIFIER:
+				setIdentifier(IDENTIFIER_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+				setDescription(DESCRIPTION_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__CREATOR:
+				setCreator(CREATOR_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__DATE:
+				setDate(DATE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__FORMAT:
+				setFormat(FORMAT_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__PUBLISHER:
+				setPublisher(PUBLISHER_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__COVERAGE:
+				setCoverage(COVERAGE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+				setContributor(CONTRIBUTOR_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__RELATION:
+				setRelation(RELATION_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__RIGHTS:
+				setRights(RIGHTS_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__SOURCE:
+				setSource(SOURCE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__SUBJECT:
+				setSubject(SUBJECT_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__LANGUAGE:
+				setLanguage(LANGUAGE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION:
+				setBibliographicCitation(BIBLIOGRAPHIC_CITATION_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__CREATED:
+				setCreated(CREATED_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__LICENSE:
+				setLicense(LICENSE_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__REQUIRED:
+				setRequired(REQUIRED_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__SPATIAL:
+				setSpatial(SPATIAL_EDEFAULT);
+				return;
+			case CommonPackage.DUBLIN_CORE__VALID:
+				setValid(VALID_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case CommonPackage.DUBLIN_CORE__TITLE:
+				return TITLE_EDEFAULT == null ? title != null : !TITLE_EDEFAULT.equals(title);
+			case CommonPackage.DUBLIN_CORE__IDENTIFIER:
+				return IDENTIFIER_EDEFAULT == null ? identifier != null : !IDENTIFIER_EDEFAULT.equals(identifier);
+			case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case CommonPackage.DUBLIN_CORE__CREATOR:
+				return CREATOR_EDEFAULT == null ? creator != null : !CREATOR_EDEFAULT.equals(creator);
+			case CommonPackage.DUBLIN_CORE__DATE:
+				return DATE_EDEFAULT == null ? date != null : !DATE_EDEFAULT.equals(date);
+			case CommonPackage.DUBLIN_CORE__FORMAT:
+				return FORMAT_EDEFAULT == null ? format != null : !FORMAT_EDEFAULT.equals(format);
+			case CommonPackage.DUBLIN_CORE__PUBLISHER:
+				return PUBLISHER_EDEFAULT == null ? publisher != null : !PUBLISHER_EDEFAULT.equals(publisher);
+			case CommonPackage.DUBLIN_CORE__COVERAGE:
+				return COVERAGE_EDEFAULT == null ? coverage != null : !COVERAGE_EDEFAULT.equals(coverage);
+			case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+				return CONTRIBUTOR_EDEFAULT == null ? contributor != null : !CONTRIBUTOR_EDEFAULT.equals(contributor);
+			case CommonPackage.DUBLIN_CORE__RELATION:
+				return RELATION_EDEFAULT == null ? relation != null : !RELATION_EDEFAULT.equals(relation);
+			case CommonPackage.DUBLIN_CORE__RIGHTS:
+				return RIGHTS_EDEFAULT == null ? rights != null : !RIGHTS_EDEFAULT.equals(rights);
+			case CommonPackage.DUBLIN_CORE__SOURCE:
+				return SOURCE_EDEFAULT == null ? source != null : !SOURCE_EDEFAULT.equals(source);
+			case CommonPackage.DUBLIN_CORE__SUBJECT:
+				return SUBJECT_EDEFAULT == null ? subject != null : !SUBJECT_EDEFAULT.equals(subject);
+			case CommonPackage.DUBLIN_CORE__TYPE:
+				return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
+			case CommonPackage.DUBLIN_CORE__LANGUAGE:
+				return LANGUAGE_EDEFAULT == null ? language != null : !LANGUAGE_EDEFAULT.equals(language);
+			case CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION:
+				return BIBLIOGRAPHIC_CITATION_EDEFAULT == null ? bibliographicCitation != null : !BIBLIOGRAPHIC_CITATION_EDEFAULT.equals(bibliographicCitation);
+			case CommonPackage.DUBLIN_CORE__CREATED:
+				return CREATED_EDEFAULT == null ? created != null : !CREATED_EDEFAULT.equals(created);
+			case CommonPackage.DUBLIN_CORE__LICENSE:
+				return LICENSE_EDEFAULT == null ? license != null : !LICENSE_EDEFAULT.equals(license);
+			case CommonPackage.DUBLIN_CORE__REQUIRED:
+				return REQUIRED_EDEFAULT == null ? required != null : !REQUIRED_EDEFAULT.equals(required);
+			case CommonPackage.DUBLIN_CORE__SPATIAL:
+				return SPATIAL_EDEFAULT == null ? spatial != null : !SPATIAL_EDEFAULT.equals(spatial);
+			case CommonPackage.DUBLIN_CORE__VALID:
+				return VALID_EDEFAULT == null ? valid != null : !VALID_EDEFAULT.equals(valid);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		final StringBuilder result = new StringBuilder();
+		if (identifier != null && !identifier.equals("")) {
+			result.append("identifier=\"");
+			result.append(identifier.trim());
+			result.append("\" ");
+		}
+		if (type != null && !type.equals("")) {
+			result.append("type=\"");
+			result.append(type.trim());
+			result.append("\" ");
+		}
+		if (title != null && !title.equals("")) {
+			result.append("title=\"");
+			result.append(title.trim());
+			result.append("\" ");
+		}
+
+		if (creator != null && !creator.equals("")) {
+			result.append("creator=\"");
+			result.append(creator.trim());
+			result.append("\" ");
+		}
+		if (subject != null && !subject.equals("")) {
+			result.append("subject=\"");
+			result.append(subject.trim());
+			result.append("\" ");
+		}
+		if (description != null && !description.equals("")) {
+			result.append("description=\"");
+			result.append(description.trim());
+			result.append("\" ");
+		}
+
+		if (publisher != null && !publisher.equals("")) {
+			result.append("publisher=\"");
+			result.append(publisher.trim());
+			result.append("\" ");
+		}
+		if (contributor != null && !contributor.equals("")) {
+			result.append("contributor=\"");
+			result.append(contributor.trim());
+			result.append("\" ");
+		}
+		if (date != null && !date.equals("")) {
+			result.append("date=\"");
+			result.append(date.trim());
+			result.append("\" ");
+		}
+
+		if (format != null && !format.equals("")) {
+			result.append("format=\"");
+			result.append(format.trim());
+			result.append("\" ");
+		}
+
+		if (source != null && !source.equals("")) {
+			result.append("source=\"");
+			result.append(source.trim());
+			result.append("\" ");
+		}
+		if (language != null && !language.equals("")) {
+			result.append("language=\"");
+			result.append(language.trim());
+			result.append("\" ");
+		}
+		if (relation != null && !relation.equals("")) {
+			result.append("relation=\"");
+			result.append(relation.trim());
+			result.append("\" ");
+		}
+		if (coverage != null && !coverage.equals("")) {
+			result.append("coverage=\"");
+			result.append(coverage.trim());
+			result.append("\" ");
+		}
+		if (rights != null && !rights.equals("")) {
+			result.append("rights=\"");
+			result.append(rights.trim());
+			result.append("\" ");
+		}
+		if (bibliographicCitation != null && !bibliographicCitation.equals("")) {
+			result.append("bibliographicCitation=\"");
+			result.append(bibliographicCitation.trim());
+			result.append("\" ");
+		}
+		if (created != null && !created.equals("")) {
+			result.append("created=\"");
+			result.append(created.trim());
+			result.append("\" ");
+		}
+		if (license != null && !license.equals("")) {
+			result.append("license=\"");
+			result.append(license.trim());
+			result.append("\" ");
+		}
+		if (required != null && !required.equals("")) {
+			result.append("required=\"");
+			result.append(required.trim());
+			result.append("\" ");
+		}
+		if (spatial != null && !spatial.equals("")) {
+			result.append("spatial=\"");
+			result.append(spatial.trim());
+			result.append("\" ");
+		}
+		if (valid != null && !valid.equals("")) {
+			result.append("valid=\"");
+			result.append(valid.trim());
+			result.append("\" ");
+		}
+
+		return result.toString();
+	} // toString
+
+	/**
+	 * Create a date string that conforms to ISO&nbsp;8601 <a
+	 * href="http://www.w3.org/TR/NOTE-datetime">
+	 * http://www.w3.org/TR/NOTE-datetime</a>.
+	 * <ul>
+	 * <li>Example:</li>
+	 * 2006-03-29
+	 * </ul>
+	 * 
+	 * @see #getDate()
+	 * @see #getCreated()
+	 * @see #getValid()
+	 */
+	public static String createISO8601DateString(final Date date) {
+		return (new SimpleDateFormat("yyyy-MM-dd")).format(date);
+	} // createISO8601DateString
+
+	/**
+	 * Create a Date from a string that conforms to ISO&nbsp;8601 <a
+	 * href="http://www.w3.org/TR/NOTE-datetime">
+	 * http://www.w3.org/TR/NOTE-datetime</a>.
+	 * <ul>
+	 * <li>Example:</li>
+	 * 2006-03-29
+	 * </ul>
+	 * 
+	 * @throws ParseException
+	 *             if the date string is not of the format "yyyy-MM-dd"
+	 * @see #getDate()
+	 * @see #getCreated()
+	 * @see #getValid()
+	 */
+	public static Date createDateFromISO8601DateString(
+			final String iso8601DateString) throws ParseException {
+		return (new SimpleDateFormat("yyyy-MM-dd")).parse(iso8601DateString);
+	} // createDateFromISO8601DateString
+
+} // DublinCoreImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableFilterImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableFilterImpl.java
new file mode 100644
index 0000000..3f061cb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableFilterImpl.java
@@ -0,0 +1,170 @@
+package org.eclipse.stem.core.common.impl;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Identifiable Filter</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class IdentifiableFilterImpl extends EObjectImpl implements IdentifiableFilter {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdentifiableFilterImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return CommonPackage.Literals.IDENTIFIABLE_FILTER;
+	}
+
+	private String []patterns;
+	public IdentifiableFilterImpl(String filter) {
+		if(filter == null)return;
+		if(filter.contains(":"))return; // Internal use by STEM, not specified by the user
+		if(filter.trim().equals(""))return;
+		StringTokenizer st = new StringTokenizer(filter.toString(), ";");
+		patterns = new String[st.countTokens()];
+		for(int i=0;i<patterns.length;++i) {
+			String pat = st.nextToken();
+			patterns[i]=pat;
+		}
+	}
+	
+	public EMap<URI, Node> filterNodes(EMap<URI, Node>map) {
+		if(patterns == null)return map;
+		ArrayList<URI>remove = new ArrayList<URI>();
+		for(URI uri:map.keySet()) {
+			String lastSegment = uri.lastSegment();
+			boolean keep = false;
+		
+			for(int i=0;i<patterns.length;++i) {
+				String pat = patterns[i];
+				boolean wildcard = false;
+				if(pat.endsWith("*")) {pat = pat.substring(0, pat.length()-1);wildcard = true;}
+				if(wildcard && lastSegment.contains(pat)
+						|| !wildcard && lastSegment.equals(pat)) {keep = true;break;}
+			}
+			if(!keep)remove.add(uri);
+		}
+		for(URI u:remove)map.remove(u);
+		return map;
+	}
+	public EMap<URI, Edge> filterEdges(EMap<URI, Edge>map) {
+		if(patterns == null)return map;
+		ArrayList<URI>remove = new ArrayList<URI>();
+		for(URI uri:map.keySet()) {
+			Edge edge = map.get(uri);
+			boolean foundSource=false, foundDest = false;
+			for(int i=0;i<patterns.length;++i) {
+				String pat = patterns[i];
+				boolean wildcard = false;
+				if(pat.endsWith("*")) {pat = pat.substring(0, pat.length()-1);wildcard = true;}
+				
+				if(wildcard && edge.getNodeAURI().lastSegment().contains(pat)
+						|| !wildcard && edge.getNodeAURI().lastSegment().equals(pat)) foundSource = true;
+				if(wildcard && edge.getNodeBURI().lastSegment().contains(pat)
+						|| !wildcard && edge.getNodeBURI().lastSegment().equals(pat)) foundDest = true;			
+			}
+			if(!(foundSource && foundDest))remove.add(uri);
+		}
+		for(URI u:remove)map.remove(u);
+		return map;
+	}
+	public EMap<URI, NodeLabel> filterNodeLabels(EMap<URI, NodeLabel>map) {
+		if(patterns == null)return map;
+		ArrayList<URI>remove = new ArrayList<URI>();
+		for(URI uri:map.keySet()) {
+			String lastSegment = uri.lastSegment();
+			boolean keep = false;
+			for(int i=0;i<patterns.length;++i) {
+				String pat = patterns[i];
+				boolean wildcard = false;
+				if(pat.endsWith("*")) {pat = pat.substring(0, pat.length()-1);wildcard = true;}
+				if(wildcard && lastSegment.contains(pat) 
+						|| !wildcard && lastSegment.equals(pat)) {keep = true;break;}
+			}
+			if(!keep)remove.add(uri);
+		}
+		for(URI u:remove)map.remove(u);
+		return map;
+	}
+	public EMap<URI, Label> filterLabels(EMap<URI, Label>map) {
+		if(patterns == null)return map;
+		ArrayList<URI>remove = new ArrayList<URI>();
+		for(URI uri:map.keySet()) {
+			String lastSegment = uri.lastSegment();
+			boolean keep = false;
+			for(int i=0;i<patterns.length;++i) {		
+				String pat = patterns[i];
+				boolean wildcard = false;
+				if(pat.endsWith("*")) {pat = pat.substring(0, pat.length()-1);wildcard = true;}
+		
+				if(wildcard && lastSegment.contains(pat) ||
+						!wildcard && lastSegment.equals(pat)) {keep = true;break;}
+			if(!keep)remove.add(uri);
+			}
+		}
+		for(URI u:remove)map.remove(u);
+		return map;
+	}
+	public void restrict(IdentifiableFilterImpl other) {
+		// ToDO. The idea is that we need to consolidate a list of patterns into a single
+		// list if there are duplicates or more general patterns
+/*		if(other.patterns == null)return;
+		ArrayList<String>restrictedPatterns = new ArrayList<String>();
+		if(this.patterns != null) for(String mypat:this.patterns)restrictedPatterns.add(mypat);
+		for(String otherpat:other.patterns) if(!restrictedPatterns.contains(otherpat)) restrictedPatterns.add(otherpat);
+		// Now go through and remove patterns that are more general than others.
+		for(String pat:other.patterns) {
+			for(String p:restrictedPatterns)
+				if(!p.equals(pat) && p.contains(pat)) restrictedPatterns.remove(p);
+		}
+		if(this.patterns != null) 
+			for(String pat:this.patterns) {
+				for(String p:restrictedPatterns)
+					if(!p.equals(pat) && p.contains(pat)) restrictedPatterns.remove(p);
+			}
+		this.patterns = new String[restrictedPatterns.size()];
+		for(int i=0;i<restrictedPatterns.size();++i) this.patterns[i] = restrictedPatterns.get(i);
+	*/
+	}
+	
+} //IdentifiableFilterImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableImpl.java
new file mode 100644
index 0000000..99843e0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/impl/IdentifiableImpl.java
@@ -0,0 +1,401 @@
+package org.eclipse.stem.core.common.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.CommonFactory;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Identifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.common.impl.IdentifiableImpl#getURI <em>URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.IdentifiableImpl#getTypeURI <em>Type URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.common.impl.IdentifiableImpl#getDublinCore <em>Dublin Core</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class IdentifiableImpl extends EObjectImpl implements
+		Identifiable {
+
+	/**
+	 * This counter is used to generated unique URI's. It is incremented each
+	 * time we create a new Identifiable.
+	 */
+	static int uriCounter = 0;
+
+	/**
+	 * This counter is used to generated unique URI's. It is incremented each
+	 * time we create a new Identifiable.
+	 */
+	static int typeURICounter = 0;
+
+	/**
+	 * The default value of the '{@link #getURI() <em>URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getURI() <em>URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI uRI = URI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTypeURI() <em>Type URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTypeURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI TYPE_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypeURI() <em>Type URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTypeURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI typeURI = TYPE_URI_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getDublinCore() <em>Dublin Core</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDublinCore()
+	 * @generated
+	 * @ordered
+	 */
+	protected DublinCore dublinCore;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected IdentifiableImpl() {
+		super();
+		setDublinCore(CommonFactory.eINSTANCE.createDublinCore());
+		setURI(STEMURI.createURI("identifiable" + uriCounter++));
+		setTypeURI(STEMURI.createTypeURI("identifiable" + typeURICounter++));
+	} // IdentifiableImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return CommonPackage.Literals.IDENTIFIABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DublinCore getDublinCore() {
+		return dublinCore;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public NotificationChain basicSetDublinCore(DublinCore newDublinCore, NotificationChain msgs) {
+		DublinCore oldDublinCore = dublinCore;
+		dublinCore = newDublinCore;
+		
+		// A new DublinCore instance?
+		if (dublinCore != null) {
+			// Yes
+			// Make sure the identifier and format URI's match the Identifiable's
+			// Are they valid yet?
+			if (getURI() != null && getTypeURI() != null) {
+				// Yes
+				dublinCore.setIdentifier(getURI().toString());
+				dublinCore.setType(getTypeURI().toString());
+			} // if 
+			
+		} // if 
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, CommonPackage.IDENTIFIABLE__DUBLIN_CORE, oldDublinCore, newDublinCore);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDublinCore(DublinCore newDublinCore) {
+		if (newDublinCore != dublinCore) {
+			NotificationChain msgs = null;
+			if (dublinCore != null)
+				msgs = ((InternalEObject)dublinCore).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - CommonPackage.IDENTIFIABLE__DUBLIN_CORE, null, msgs);
+			if (newDublinCore != null)
+				msgs = ((InternalEObject)newDublinCore).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - CommonPackage.IDENTIFIABLE__DUBLIN_CORE, null, msgs);
+			msgs = basicSetDublinCore(newDublinCore, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CommonPackage.IDENTIFIABLE__DUBLIN_CORE, newDublinCore, newDublinCore));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypeURI() {
+		return typeURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * Set the type URI, but also update the DublinCore type.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void setTypeURI(URI newTypeURI) {
+		URI oldTypeURI = typeURI;
+		typeURI = newTypeURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					CommonPackage.IDENTIFIABLE__TYPE_URI, oldTypeURI, typeURI));
+		// Update DublinCore?
+		if (dublinCore != null) {
+			// Yes
+			dublinCore.setType(newTypeURI.toString());
+		}
+	} // setTypeURI
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean sane() {
+		boolean retValue = true;
+
+		//retValue = retValue && getURI().scheme().equals(Constants.STEM_SCHEME);
+		//assert(retValue);
+		
+		retValue = retValue && getTypeURI().scheme().equals(Constants.STEM_TYPE_SCHEME);
+		assert(retValue);
+		
+		// If there is dublin core then the URI's of the Identifiable and the
+		// Dublin Core instance should agree.
+		if (dublinCore != null) {
+			final DublinCore dc = getDublinCore();
+			retValue = retValue && getURI().toString().equals(dc.getIdentifier());
+			assert(retValue);
+		}
+
+		// This test looks for duplicate adapters. This can occur if the
+		// adapters are stateful
+		// Any adapters?
+		// if (retValue && eAdapters != null && eAdapters.size() > 0 ) {
+		// // Yes
+		// // The list of adapters shouldn't contain any duplicate adapters of
+		// // the same type
+		// final Set<Class> types = new HashSet<Class>();
+		// for (Adapter adapter : eAdapters) {
+		// types.add(adapter.getClass());
+		// }
+		// retValue = retValue && types.size() == eAdapters.size();
+		// assert retValue;
+		// } // if any adapters
+		
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getURI() {
+		return uRI;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * Set the URI and also update the Identifier in the dublin core instance
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void setURI(URI newURI) {
+		URI oldURI = uRI;
+		uRI = newURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					CommonPackage.IDENTIFIABLE__URI, oldURI, uRI));
+		// Update DublinCore?
+		if (dublinCore != null) {
+			// Yes
+			dublinCore.setIdentifier(newURI.toString());
+		}
+	} // setURI
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				return basicSetDublinCore(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case CommonPackage.IDENTIFIABLE__URI:
+				return getURI();
+			case CommonPackage.IDENTIFIABLE__TYPE_URI:
+				return getTypeURI();
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				return getDublinCore();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case CommonPackage.IDENTIFIABLE__URI:
+				setURI((URI)newValue);
+				return;
+			case CommonPackage.IDENTIFIABLE__TYPE_URI:
+				setTypeURI((URI)newValue);
+				return;
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				setDublinCore((DublinCore)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case CommonPackage.IDENTIFIABLE__URI:
+				setURI(URI_EDEFAULT);
+				return;
+			case CommonPackage.IDENTIFIABLE__TYPE_URI:
+				setTypeURI(TYPE_URI_EDEFAULT);
+				return;
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				setDublinCore((DublinCore)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case CommonPackage.IDENTIFIABLE__URI:
+				return URI_EDEFAULT == null ? uRI != null : !URI_EDEFAULT.equals(uRI);
+			case CommonPackage.IDENTIFIABLE__TYPE_URI:
+				return TYPE_URI_EDEFAULT == null ? typeURI != null : !TYPE_URI_EDEFAULT.equals(typeURI);
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				return dublinCore != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append("(uRI: ");
+		result.append(uRI);
+		result.append(", typeURI: ");
+		result.append(typeURI);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Identifiable o) {
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemLabelProvider lp1 = (IItemLabelProvider) itemProviderFactory.adapt(
+				this, IItemLabelProvider.class);
+		final IItemLabelProvider lp2 = (IItemLabelProvider) itemProviderFactory.adapt(o,
+				IItemLabelProvider.class);
+		return lp1.getText(this).compareTo(lp2.getText(o));
+	} // compareTo
+
+	
+} // IdentifiableImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonEditPlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonEditPlugin.java
new file mode 100644
index 0000000..bc314d2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonEditPlugin.java
@@ -0,0 +1,99 @@
+package org.eclipse.stem.core.common.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Common editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class CommonEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final CommonEditPlugin INSTANCE = new CommonEditPlugin();
+
+	/**
+	 * 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 CommonEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonItemProviderAdapterFactory.java
new file mode 100644
index 0000000..01be423
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CommonItemProviderAdapterFactory.java
@@ -0,0 +1,233 @@
+package org.eclipse.stem.core.common.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+//import org.eclipse.emf.edit.provider.Disposable;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.common.util.CommonAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonItemProviderAdapterFactory extends CommonAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.common.DublinCore} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DublinCoreItemProvider dublinCoreItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.common.DublinCore}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDublinCoreAdapter() {
+		if (dublinCoreItemProvider == null) {
+			dublinCoreItemProvider = new DublinCoreItemProvider(this);
+		}
+
+		return dublinCoreItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.common.IdentifiableFilter} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdentifiableFilterItemProvider identifiableFilterItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.common.IdentifiableFilter}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIdentifiableFilterAdapter() {
+		if (identifiableFilterItemProvider == null) {
+			identifiableFilterItemProvider = new IdentifiableFilterItemProvider(this);
+		}
+
+		return identifiableFilterItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (dublinCoreItemProvider != null) dublinCoreItemProvider.dispose();
+		if (identifiableFilterItemProvider != null) identifiableFilterItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CoreEditPlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CoreEditPlugin.java
new file mode 100644
index 0000000..ed23aaf
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/CoreEditPlugin.java
@@ -0,0 +1,101 @@
+package org.eclipse.stem.core.common.provider;
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+//import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the Core edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class CoreEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final CoreEditPlugin INSTANCE = new CoreEditPlugin();
+
+	/**
+	 * 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 NOT
+	 */
+	public CoreEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		    // EcoreEditPlugin.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/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/DublinCoreItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/DublinCoreItemProvider.java
new file mode 100644
index 0000000..d830d12
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/DublinCoreItemProvider.java
@@ -0,0 +1,666 @@
+package org.eclipse.stem.core.common.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.common.DublinCore} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DublinCoreItemProvider
+	extends ItemProviderAdapter
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DublinCoreItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTitlePropertyDescriptor(object);
+			addIdentifierPropertyDescriptor(object);
+			addDescriptionPropertyDescriptor(object);
+			addCreatorPropertyDescriptor(object);
+			addDatePropertyDescriptor(object);
+			addFormatPropertyDescriptor(object);
+			addPublisherPropertyDescriptor(object);
+			addCoveragePropertyDescriptor(object);
+			addContributorPropertyDescriptor(object);
+			addRelationPropertyDescriptor(object);
+			addRightsPropertyDescriptor(object);
+			addSourcePropertyDescriptor(object);
+			addSubjectPropertyDescriptor(object);
+			addTypePropertyDescriptor(object);
+			addLanguagePropertyDescriptor(object);
+			addBibliographicCitationPropertyDescriptor(object);
+			addCreatedPropertyDescriptor(object);
+			addLicensePropertyDescriptor(object);
+			addRequiredPropertyDescriptor(object);
+			addSpatialPropertyDescriptor(object);
+			addValidPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Title feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTitlePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_title_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_title_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__TITLE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Creator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCreatorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_creator_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_creator_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__CREATOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Subject feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSubjectPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_subject_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_subject_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__SUBJECT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Description feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDescriptionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_description_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_description_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__DESCRIPTION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Publisher feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPublisherPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_publisher_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_publisher_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__PUBLISHER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Contributor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addContributorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_contributor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_contributor_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__CONTRIBUTOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Date feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_date_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_date_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__DATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_type_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_type_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__TYPE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Format feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFormatPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_format_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_format_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__FORMAT,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Identifier feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_identifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_identifier_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__IDENTIFIER,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Source feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSourcePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_source_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_source_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__SOURCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Language feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLanguagePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_language_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_language_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__LANGUAGE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Relation feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRelationPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_relation_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_relation_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__RELATION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Coverage feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCoveragePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_coverage_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_coverage_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__COVERAGE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Rights feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRightsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_rights_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_rights_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__RIGHTS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Bibliographic Citation feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBibliographicCitationPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_bibliographicCitation_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_bibliographicCitation_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Created feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCreatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_created_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_created_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__CREATED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the License feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLicensePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_license_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_license_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__LICENSE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Required feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRequiredPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_required_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_required_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__REQUIRED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Spatial feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSpatialPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_spatial_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_spatial_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__SPATIAL,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Valid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected void addValidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_valid_feature"), //$NON-NLS-1$
+				 //getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_valid_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 getString("_UI_DC_Valid_Desc"), //$NON-NLS-1$ 
+				 CommonPackage.Literals.DUBLIN_CORE__VALID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	} // addValidPropertyDescriptor
+
+	/**
+	 * This adds a property descriptor for the Valid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValidPropertyDescriptorGen(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DublinCore_valid_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DublinCore_valid_feature", "_UI_DublinCore_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.DUBLIN_CORE__VALID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+	
+	/**
+	 * This returns DublinCore.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/DublinCore"));
+	} // getImage
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DublinCore)object).getTitle();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DublinCore_type") : //$NON-NLS-1$
+			getString("_UI_DublinCore_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DublinCore.class)) {
+			case CommonPackage.DUBLIN_CORE__TITLE:
+			case CommonPackage.DUBLIN_CORE__IDENTIFIER:
+			case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+			case CommonPackage.DUBLIN_CORE__CREATOR:
+			case CommonPackage.DUBLIN_CORE__DATE:
+			case CommonPackage.DUBLIN_CORE__FORMAT:
+			case CommonPackage.DUBLIN_CORE__PUBLISHER:
+			case CommonPackage.DUBLIN_CORE__COVERAGE:
+			case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+			case CommonPackage.DUBLIN_CORE__RELATION:
+			case CommonPackage.DUBLIN_CORE__RIGHTS:
+			case CommonPackage.DUBLIN_CORE__SOURCE:
+			case CommonPackage.DUBLIN_CORE__SUBJECT:
+			case CommonPackage.DUBLIN_CORE__TYPE:
+			case CommonPackage.DUBLIN_CORE__LANGUAGE:
+			case CommonPackage.DUBLIN_CORE__BIBLIOGRAPHIC_CITATION:
+			case CommonPackage.DUBLIN_CORE__CREATED:
+			case CommonPackage.DUBLIN_CORE__LICENSE:
+			case CommonPackage.DUBLIN_CORE__REQUIRED:
+			case CommonPackage.DUBLIN_CORE__SPATIAL:
+			case CommonPackage.DUBLIN_CORE__VALID:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableFilterItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableFilterItemProvider.java
new file mode 100644
index 0000000..6686467
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableFilterItemProvider.java
@@ -0,0 +1,127 @@
+package org.eclipse.stem.core.common.provider;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.common.IdentifiableFilter} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdentifiableFilterItemProvider
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableFilterItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns IdentifiableFilter.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/IdentifiableFilter")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_IdentifiableFilter_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableItemProvider.java
new file mode 100644
index 0000000..c0f43d4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/provider/IdentifiableItemProvider.java
@@ -0,0 +1,265 @@
+package org.eclipse.stem.core.common.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptorDecorator;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.common.Identifiable} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdentifiableItemProvider
+	extends ItemProviderAdapter
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+			//getPropertyDescriptorsGen(object);
+			addDublinCorePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	} // getPropertyDescriptors
+	
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addURIPropertyDescriptor(object);
+			addTypeURIPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> 
+	 * This adds the Dublin Core of the Identifiable as a property
+	 * category of all Identifiables. 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void addDublinCorePropertyDescriptor(Object object) {
+		final DublinCore dc = ((Identifiable) object).getDublinCore();
+
+		final AdapterFactory factory = ((ComposeableAdapterFactory) adapterFactory)
+				.getRootAdapterFactory();
+
+		final DublinCoreItemProvider dcItemProvider = (DublinCoreItemProvider) (factory
+				.adapt(dc, IItemPropertySource.class));
+
+		final List<IItemPropertyDescriptor> dcDescriptors = dcItemProvider
+				.getPropertyDescriptors(dc);
+
+		for (Iterator<IItemPropertyDescriptor> iter = dcDescriptors.iterator(); iter.hasNext();) {
+			final ItemPropertyDescriptor dcDescriptor = (ItemPropertyDescriptor) iter
+					.next();
+			itemPropertyDescriptors.add(new ItemPropertyDescriptorDecorator(
+					dc, dcDescriptor) {
+				@Override
+				public String getCategory(Object thisObject) {
+					return getString("_UI_Identifiable_dublinCore_feature");
+				}
+			});
+		} // for each idDescriptor
+	} // addDublinCorePropertyDescriptorcriptor
+	
+	/**
+	 * This adds a property descriptor for the URI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifiable_uRI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifiable_uRI_feature", "_UI_Identifiable_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.IDENTIFIABLE__URI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Type URI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTypeURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifiable_typeURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifiable_typeURI_feature", "_UI_Identifiable_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 CommonPackage.Literals.IDENTIFIABLE__TYPE_URI,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns Identifiable.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Identifiable")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		// Use the dublin core title if it's available, otherwise use
+		// the URI
+		final Identifiable identifiable = (Identifiable)object;
+		
+		final String title = identifiable.getDublinCore().getTitle();
+		// Was a title specified?
+		if (title != null && !title.equals("")) {
+			// Yes
+			return title;
+		}
+		else {
+			return identifiable.getURI().toString();
+		}
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Identifiable)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Identifiable_type") : //$NON-NLS-1$
+			getString("_UI_Identifiable_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Identifiable.class)) {
+			case CommonPackage.IDENTIFIABLE__URI:
+			case CommonPackage.IDENTIFIABLE__TYPE_URI:
+			case CommonPackage.IDENTIFIABLE__DUBLIN_CORE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonAdapterFactory.java
new file mode 100644
index 0000000..a7418ef
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonAdapterFactory.java
@@ -0,0 +1,187 @@
+package org.eclipse.stem.core.common.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+//import org.eclipse.stem.core.common.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.common.CommonPackage
+ * @generated
+ */
+public class CommonAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static CommonPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = CommonPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CommonSwitch<Adapter> modelSwitch =
+		new CommonSwitch<Adapter>() {
+			@Override
+			public Adapter caseDublinCore(DublinCore object) {
+				return createDublinCoreAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiableFilter(IdentifiableFilter object) {
+				return createIdentifiableFilterAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.DublinCore <em>Dublin Core</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.DublinCore
+	 * @generated
+	 */
+	public Adapter createDublinCoreAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.IdentifiableFilter <em>Identifiable Filter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.IdentifiableFilter
+	 * @generated
+	 */
+	public Adapter createIdentifiableFilterAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //CommonAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonSwitch.java
new file mode 100644
index 0000000..fb451df
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/common/util/CommonSwitch.java
@@ -0,0 +1,197 @@
+package org.eclipse.stem.core.common.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+//import org.eclipse.stem.core.common.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.common.CommonPackage
+ * @generated
+ */
+public class CommonSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static CommonPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonSwitch() {
+		if (modelPackage == null) {
+			modelPackage = CommonPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case CommonPackage.DUBLIN_CORE: {
+				DublinCore dublinCore = (DublinCore)theEObject;
+				T1 result = caseDublinCore(dublinCore);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case CommonPackage.IDENTIFIABLE: {
+				Identifiable identifiable = (Identifiable)theEObject;
+				T1 result = caseIdentifiable(identifiable);
+				if (result == null) result = caseComparable(identifiable);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case CommonPackage.IDENTIFIABLE_FILTER: {
+				IdentifiableFilter identifiableFilter = (IdentifiableFilter)theEObject;
+				T1 result = caseIdentifiableFilter(identifiableFilter);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dublin Core</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dublin Core</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDublinCore(DublinCore object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable Filter</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable Filter</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiableFilter(IdentifiableFilter object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //CommonSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/Experiment.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/Experiment.java
new file mode 100644
index 0000000..586c506
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/Experiment.java
@@ -0,0 +1,99 @@
+// Experiment.java
+package org.eclipse.stem.core.experiment;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.scenario.Scenario;
+
+/**
+ * An {@link Experiment} is a specification of how to modify a "base"
+ * {@link Scenario} to create one or more "derived" {@link Scenario}s. The
+ * purpose of this is to allow for the definition of a related spectrum of
+ * {@link Scenario}s that have slightly (or dramatically) different
+ * configurations. The intent is to enable the exploration of the effect
+ * different configurations have on the outcome of the {@link Scenario}.
+ * <p>
+ * An {@link Experiment} consists of a hierarchical organization of
+ * {@link Modifier}s and other {@link Experiment}s.
+ * 
+ * @model
+ */
+public interface Experiment extends Identifiable {
+
+	String URI_TYPE_EXPERIMENT_SEGMENT = "experiment";
+
+	/**
+	 * @return the {@link Scenario} that will be modified during the experiment.
+	 * @model containment="false"
+	 */
+	Scenario getScenario();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.experiment.Experiment#getScenario <em>Scenario</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Scenario</em>' reference.
+	 * @see #getScenario()
+	 * @generated
+	 */
+	void setScenario(Scenario value);
+
+	/**
+	 * @return the {@link Modifier}s that specify the changes to the
+	 *         {@link Scenario}.
+	 * @model containment="false"
+	 */
+	EList<Modifier> getModifiers();
+
+	/**
+	 * @return the {@link Experiment}'s {@link Scenario} modified by the
+	 *         {@link Experiment}'s collection of {@link Modifier}s
+	 *         @see #isComplete()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Scenario updateScenario();
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	Scenario initScenario();
+
+	/**
+	 * @return a {@link List} of {@link String}s that summarize the
+	 *         modifications made during the last call to
+	 *         {@link #getNextScenario()}.
+	 * model volatile="true" transient="true" changeable="false"
+	 */
+	List<String> getModificationSummary();
+	
+	/**
+	 * @return a {@link List} of {@link String}s that summarize the values of
+	 *         all of the parameters.
+	 * model volatile="true" transient="true" changeable="false"
+	 */
+	List<String> getParameterSummary();
+
+	/**
+	 * @return <code>true</code> if the {@link Experiment} is complete,
+	 *         <code>false</code>, otherwise.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean isComplete();
+} // Experiment
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentFactory.java
new file mode 100644
index 0000000..f39cf3a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.core.experiment;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.experiment.ExperimentPackage
+ * @generated
+ */
+public interface ExperimentFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExperimentFactory eINSTANCE = org.eclipse.stem.core.experiment.impl.ExperimentFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Experiment</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Experiment</em>'.
+	 * @generated
+	 */
+	Experiment createExperiment();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ExperimentPackage getExperimentPackage();
+
+} //ExperimentFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentPackage.java
new file mode 100644
index 0000000..74c81cf
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/ExperimentPackage.java
@@ -0,0 +1,277 @@
+package org.eclipse.stem.core.experiment;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.String;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.experiment.ExperimentFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ExperimentPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "experiment"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/experiment.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.experiment"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExperimentPackage eINSTANCE = org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.experiment.impl.ExperimentImpl <em>Experiment</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.experiment.impl.ExperimentImpl
+	 * @see org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl#getExperiment()
+	 * @generated
+	 */
+	int EXPERIMENT = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Modifiers</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__MODIFIERS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__COMPLETE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Scenario</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT__SCENARIO = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Experiment</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXPERIMENT_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.experiment.Experiment <em>Experiment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Experiment</em>'.
+	 * @see org.eclipse.stem.core.experiment.Experiment
+	 * @generated
+	 */
+	EClass getExperiment();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.experiment.Experiment#getModifiers <em>Modifiers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Modifiers</em>'.
+	 * @see org.eclipse.stem.core.experiment.Experiment#getModifiers()
+	 * @see #getExperiment()
+	 * @generated
+	 */
+	EReference getExperiment_Modifiers();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.experiment.Experiment#isComplete <em>Complete</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Complete</em>'.
+	 * @see org.eclipse.stem.core.experiment.Experiment#isComplete()
+	 * @see #getExperiment()
+	 * @generated
+	 */
+	EAttribute getExperiment_Complete();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.experiment.Experiment#getScenario <em>Scenario</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Scenario</em>'.
+	 * @see org.eclipse.stem.core.experiment.Experiment#getScenario()
+	 * @see #getExperiment()
+	 * @generated
+	 */
+	EReference getExperiment_Scenario();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ExperimentFactory getExperimentFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.experiment.impl.ExperimentImpl <em>Experiment</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.experiment.impl.ExperimentImpl
+		 * @see org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl#getExperiment()
+		 * @generated
+		 */
+		EClass EXPERIMENT = eINSTANCE.getExperiment();
+
+		/**
+		 * The meta object literal for the '<em><b>Modifiers</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EXPERIMENT__MODIFIERS = eINSTANCE.getExperiment_Modifiers();
+
+		/**
+		 * The meta object literal for the '<em><b>Complete</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXPERIMENT__COMPLETE = eINSTANCE.getExperiment_Complete();
+
+		/**
+		 * The meta object literal for the '<em><b>Scenario</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EXPERIMENT__SCENARIO = eINSTANCE.getExperiment_Scenario();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
+} //ExperimentPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentFactoryImpl.java
new file mode 100644
index 0000000..8aa4091
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentFactoryImpl.java
@@ -0,0 +1,148 @@
+package org.eclipse.stem.core.experiment.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+//import org.eclipse.stem.core.experiment.*;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentFactory;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model <b>Factory</b>. <!--
+ * end-user-doc -->
+ * @generated
+ */
+public class ExperimentFactoryImpl extends EFactoryImpl implements
+		ExperimentFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public static ExperimentFactory init() {
+		try {
+			ExperimentFactory theExperimentFactory = (ExperimentFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/experiment.ecore"); //$NON-NLS-1$ 
+			if (theExperimentFactory != null) {
+				return theExperimentFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ExperimentFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ExperimentPackage.EXPERIMENT: return createExperiment();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case ExperimentPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case ExperimentPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Experiment createExperiment() {
+		ExperimentImpl experiment = new ExperimentImpl();
+		return experiment;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentPackage getExperimentPackage() {
+		return (ExperimentPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ExperimentPackage getPackage() {
+		return ExperimentPackage.eINSTANCE;
+	}
+
+} // ExperimentFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentImpl.java
new file mode 100644
index 0000000..b3d8a43
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentImpl.java
@@ -0,0 +1,330 @@
+package org.eclipse.stem.core.experiment.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.scenario.Scenario;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Experiment</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.experiment.impl.ExperimentImpl#getModifiers <em>Modifiers</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.experiment.impl.ExperimentImpl#isComplete <em>Complete</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.experiment.impl.ExperimentImpl#getScenario <em>Scenario</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExperimentImpl extends IdentifiableImpl implements Experiment {
+	/**
+	 * The cached value of the '{@link #getModifiers() <em>Modifiers</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModifiers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Modifier> modifiers;
+
+	/**
+	 * The default value of the '{@link #isComplete() <em>Complete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isComplete()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean COMPLETE_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #getScenario() <em>Scenario</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getScenario()
+	 * @generated
+	 * @ordered
+	 */
+	protected Scenario scenario;
+
+	private static int experimentCounter = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected ExperimentImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_EXPERIMENT_SEGMENT + "/"
+				+ Integer.toString(experimentCounter++)));
+		setTypeURI(STEMURI.EXPERIMENT_TYPE_URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExperimentPackage.Literals.EXPERIMENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Modifier> getModifiers() {
+		if (modifiers == null) {
+			modifiers = new EObjectResolvingEList<Modifier>(Modifier.class, this, ExperimentPackage.EXPERIMENT__MODIFIERS);
+		}
+		return modifiers;
+	}
+
+	/**
+	 * @see {@link Experiment#getModificationSummary()}
+	 */
+	public List<String> getModificationSummary() {
+		final List<String> retValue = new ArrayList<String>();
+		for (Modifier modifier : getModifiers()) {
+			retValue.addAll(modifier.getModificationSummary());
+		} // for each Modifier
+		return retValue;
+	} // getModificationSummary
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public boolean isComplete() {
+		boolean retValue = true;
+		for (Modifier modifier : getModifiers()) {
+			// Is this modifier complete?
+			if (!modifier.isComplete()) {
+				// No
+				retValue = false;
+				break;
+			} // if 
+		} // for each Modifier
+		return retValue;
+	} // isComplete
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Scenario getScenario() {
+		if (scenario != null && scenario.eIsProxy()) {
+			InternalEObject oldScenario = (InternalEObject)scenario;
+			scenario = (Scenario)eResolveProxy(oldScenario);
+			if (scenario != oldScenario) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ExperimentPackage.EXPERIMENT__SCENARIO, oldScenario, scenario));
+			}
+		}
+		return scenario;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Scenario basicGetScenario() {
+		return scenario;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScenario(Scenario newScenario) {
+		Scenario oldScenario = scenario;
+		scenario = newScenario;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExperimentPackage.EXPERIMENT__SCENARIO, oldScenario, scenario));
+	}
+
+	/**
+	 * @see {@link Experiment#getParameterSummary()}
+	 */
+	public List<String> getParameterSummary() {
+		// TODO implement ExperimentImpl.getParameterSummary
+		return getModificationSummary();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Scenario updateScenario() {
+		// Get the first modifier
+		Modifier modifier = getModifiers().get(0);
+		if(!modifier.isComplete()) {
+			// If it's not complete, simply update the scenario
+			modifier.updateScenario(getScenario());
+		} else {
+			// The first modifier is complete, get the next incomplete
+			// modifier on the list and reset the "less significant" modifiers.
+			// Think of it as binary counting switching bits on and off, but
+			// the number of states is not 2 but depends on how many states
+			// the modifier has. We assume at least one modifier is not complete
+			// here, or this method wouldn't have been called.
+			for(Modifier m : getModifiers()) {
+				if(m.isComplete()) {
+					m.reset();
+					m.updateScenario(getScenario());
+				} else {
+					m.updateScenario(getScenario());
+					break;
+				}
+			}
+			
+		}
+		Scenario s =  getScenario();
+		s.setProgress(0.0);
+		return s;
+	} // updateScenario
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Scenario initScenario() {
+		// Skip the first modifier since it will update the
+		// scenario in the first call to getNextSimulation()
+		for(int i=1;i<getModifiers().size();++i) 
+			getModifiers().get(i).updateScenario(getScenario());
+		return getScenario();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.impl.IdentifiableImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+
+		retValue = getScenario() == null || getScenario().sane();
+		assert retValue;
+		
+		for (Modifier modifier : getModifiers()) {
+			retValue = modifier.sane();
+			assert retValue;
+		} // for each Modifier
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ExperimentPackage.EXPERIMENT__MODIFIERS:
+				return getModifiers();
+			case ExperimentPackage.EXPERIMENT__COMPLETE:
+				return isComplete();
+			case ExperimentPackage.EXPERIMENT__SCENARIO:
+				if (resolve) return getScenario();
+				return basicGetScenario();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ExperimentPackage.EXPERIMENT__MODIFIERS:
+				getModifiers().clear();
+				getModifiers().addAll((Collection<? extends Modifier>)newValue);
+				return;
+			case ExperimentPackage.EXPERIMENT__SCENARIO:
+				setScenario((Scenario)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ExperimentPackage.EXPERIMENT__MODIFIERS:
+				getModifiers().clear();
+				return;
+			case ExperimentPackage.EXPERIMENT__SCENARIO:
+				setScenario((Scenario)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ExperimentPackage.EXPERIMENT__MODIFIERS:
+				return modifiers != null && !modifiers.isEmpty();
+			case ExperimentPackage.EXPERIMENT__COMPLETE:
+				return isComplete() != COMPLETE_EDEFAULT;
+			case ExperimentPackage.EXPERIMENT__SCENARIO:
+				return scenario != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	
+} //ExperimentImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentPackageImpl.java
new file mode 100644
index 0000000..a1ba981
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/impl/ExperimentPackageImpl.java
@@ -0,0 +1,291 @@
+package org.eclipse.stem.core.experiment.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentFactory;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentPackageImpl extends EPackageImpl implements ExperimentPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass experimentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.experiment.ExperimentPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ExperimentPackageImpl() {
+		super(eNS_URI, ExperimentFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ExperimentPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ExperimentPackage init() {
+		if (isInited) return (ExperimentPackage)EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ExperimentPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theExperimentPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theExperimentPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theExperimentPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ExperimentPackage.eNS_URI, theExperimentPackage);
+		return theExperimentPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExperiment() {
+		return experimentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getExperiment_Modifiers() {
+		return (EReference)experimentEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExperiment_Complete() {
+		return (EAttribute)experimentEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getExperiment_Scenario() {
+		return (EReference)experimentEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentFactory getExperimentFactory() {
+		return (ExperimentFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		experimentEClass = createEClass(EXPERIMENT);
+		createEReference(experimentEClass, EXPERIMENT__MODIFIERS);
+		createEAttribute(experimentEClass, EXPERIMENT__COMPLETE);
+		createEReference(experimentEClass, EXPERIMENT__SCENARIO);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+		ModifierPackage theModifierPackage = (ModifierPackage)EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI);
+		ScenarioPackage theScenarioPackage = (ScenarioPackage)EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		experimentEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(experimentEClass, Experiment.class, "Experiment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getExperiment_Modifiers(), theModifierPackage.getModifier(), null, "modifiers", null, 0, -1, Experiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getExperiment_Complete(), ecorePackage.getEBoolean(), "complete", null, 0, 1, Experiment.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getExperiment_Scenario(), theScenarioPackage.getScenario(), null, "scenario", null, 0, 1, Experiment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(experimentEClass, theScenarioPackage.getScenario(), "updateScenario", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(experimentEClass, theScenarioPackage.getScenario(), "initScenario", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ExperimentPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProvider.java
new file mode 100644
index 0000000..dbff8eb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProvider.java
@@ -0,0 +1,337 @@
+package org.eclipse.stem.core.experiment.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.swt.dnd.DND;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.experiment.Experiment} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addCompletePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Complete feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCompletePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Experiment_complete_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Experiment_complete_feature", "_UI_Experiment_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ExperimentPackage.Literals.EXPERIMENT__COMPLETE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ExperimentPackage.Literals.EXPERIMENT__MODIFIERS);
+			childrenFeatures.add(ExperimentPackage.Literals.EXPERIMENT__SCENARIO);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Experiment.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Experiment"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((Experiment)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Experiment_type") : //$NON-NLS-1$
+			getString("_UI_Experiment_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Experiment.class)) {
+			case ExperimentPackage.EXPERIMENT__COMPLETE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case ExperimentPackage.EXPERIMENT__MODIFIERS:
+			case ExperimentPackage.EXPERIMENT__SCENARIO:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Command createAddCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Collection<?> collection, int index) {
+		final Collection identifiableCollection = new ArrayList();
+		for (Object value : collection) {
+
+			Object temp = value;
+			if (value instanceof IFile) {
+				// Yes
+				final IFile iFile = (IFile) value;
+				final URI uri = URI.createFileURI(iFile.getLocation()
+						.toString());
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				identifiableCollection.add(identifable);
+				temp = identifable;
+			} // if IFile
+
+			else if (value instanceof String) {
+				// Yes
+				final String uriString = (String) value;
+				try {
+					final URI uri = URI.createURI(uriString);
+					final Identifiable identifable = Utility
+							.getIdentifiable(uri);
+					temp = identifable;
+				} catch (Exception e) {
+					// Ignore it
+				}
+			} // if String
+
+			if (temp instanceof Identifiable) {
+				identifiableCollection.add(temp);
+			}
+		} // for each Object
+
+		return super.createAddCommand(domain, owner, feature,
+				identifiableCollection, index);
+	} // createAddCommand
+	
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      org.eclipse.emf.ecore.EObject,
+	 *      org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object, int)
+	 */
+	@Override
+	protected Command createSetCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Object value, int index) {
+		// Are we setting the model during a drag and drop?
+		Object temp = value;
+
+		if (value instanceof IFile) {
+			// Yes
+			final IFile iFile = (IFile) value;
+			final URI uri = URI.createFileURI(iFile.getLocation().toString());
+			final Identifiable identifable = Utility.getIdentifiable(uri);
+			temp = identifable;
+		} // if IFile
+
+		else if (value instanceof String) {
+			// Yes
+			// These come from IdentifablePluginView
+			final String uriString = (String) value;
+			try {
+				final URI uri = URI.createURI(uriString);
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				temp = identifable;
+			} catch (Exception e) {
+				// Ignore it
+			}
+		} // if String
+
+		if (temp instanceof Scenario) {
+			return super.createSetCommand(domain, owner,
+					ExperimentPackage.eINSTANCE.getExperiment_Scenario(), temp, index);
+		} // if
+		else if (temp instanceof Modifier) {
+			return super
+					.createAddCommand(
+							domain,
+							owner,
+							ExperimentPackage.eINSTANCE
+									.getExperiment()
+									.getEStructuralFeature(
+											ExperimentPackage.EXPERIMENT__MODIFIERS),
+							Arrays.asList((new Object[] { temp })), index);
+		} // else if
+		else {
+
+			return super.createSetCommand(domain, owner, feature, value, index);
+		}
+	} // createSetCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      java.lang.Object, float, int, int, java.util.Collection)
+	 */
+	@Override
+	protected Command createDragAndDropCommand(EditingDomain domain,
+			Object owner, float location, int operations, int operation,
+			Collection<?> collection) {
+		// We add DND.DROP_LINK as an allowed operation because all drops will
+		// be links and some sources don't allow links, we convert to links
+		// anyway
+		return super.createDragAndDropCommand(domain, owner, location,
+				operations | DND.DROP_LINK, operation, collection);
+	} // createDragAndDropCommand
+	
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isWrappingNeeded(java.lang.Object)
+	 */
+	@Override
+	protected boolean isWrappingNeeded(Object object) {
+		// return super.isWrappingNeeded(object);
+		// We return true so that non-containment references are wrapped. This
+		// enables the delete command in the editor's context menu.
+		return true;
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProviderAdapterFactory.java
new file mode 100644
index 0000000..e707d65
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/provider/ExperimentItemProviderAdapterFactory.java
@@ -0,0 +1,207 @@
+package org.eclipse.stem.core.experiment.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.experiment.util.ExperimentAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentItemProviderAdapterFactory extends ExperimentAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.experiment.Experiment} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExperimentItemProvider experimentItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.experiment.Experiment}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createExperimentAdapter() {
+		if (experimentItemProvider == null) {
+			experimentItemProvider = new ExperimentItemProvider(this);
+		}
+
+		return experimentItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (experimentItemProvider != null) experimentItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentAdapterFactory.java
new file mode 100644
index 0000000..2b1902f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentAdapterFactory.java
@@ -0,0 +1,165 @@
+package org.eclipse.stem.core.experiment.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.experiment.*;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.experiment.ExperimentPackage
+ * @generated
+ */
+public class ExperimentAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExperimentPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ExperimentPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExperimentSwitch<Adapter> modelSwitch =
+		new ExperimentSwitch<Adapter>() {
+			@Override
+			public Adapter caseExperiment(Experiment object) {
+				return createExperimentAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.experiment.Experiment <em>Experiment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.experiment.Experiment
+	 * @generated
+	 */
+	public Adapter createExperimentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ExperimentAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentSwitch.java
new file mode 100644
index 0000000..319ea1e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/experiment/util/ExperimentSwitch.java
@@ -0,0 +1,169 @@
+package org.eclipse.stem.core.experiment.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.experiment.*;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.experiment.ExperimentPackage
+ * @generated
+ */
+public class ExperimentSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExperimentPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ExperimentPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ExperimentPackage.EXPERIMENT: {
+				Experiment experiment = (Experiment)theEObject;
+				T1 result = caseExperiment(experiment);
+				if (result == null) result = caseIdentifiable(experiment);
+				if (result == null) result = caseComparable(experiment);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Experiment</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Experiment</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseExperiment(Experiment object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ExperimentSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicEdgeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicEdgeLabel.java
new file mode 100644
index 0000000..7ae9875
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicEdgeLabel.java
@@ -0,0 +1,23 @@
+// DynamicEdgeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>DynamicEdgeLabel</code> is a {@link DynamicLabel} that specifically
+ * labels an {@link Edge}.
+ * 
+ * @model abstract="true"
+ */
+public interface DynamicEdgeLabel extends DynamicLabel, EdgeLabel {
+	// Nothing
+} // DynamicEdgeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicLabel.java
new file mode 100644
index 0000000..b79b7c6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicLabel.java
@@ -0,0 +1,115 @@
+// DynamicLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.model.Decorator;
+
+/**
+ * A <code>DynamicLabel</code> is a {@link Label} that has two
+ * {@link LabelValue}s instead of one. The second value is called the "next"
+ * value. It represents the values of the attributes of the {@link Label} in the
+ * next state of the {@link Graph}. The other value is called the "current"
+ * value and it represents the value of the attributes in the current state of
+ * the {@link Graph}.
+ * <p>
+ * A <code>DynamicLabel</code> can exchange the "current" and "next' values
+ * (see {@link #switchToNextValue()}. After such a switch, the next value is
+ * marked as being "invalid" (see {@link #isNextValueValid()}).
+ * </p>
+ * 
+ * @model abstract="true"
+ */
+public interface DynamicLabel extends Label {
+
+	/**
+	 * This is the top-level segment for all type URI's for dynamic labels.
+	 */
+	String URI_TYPE_DYNAMIC_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT + "/dynamic";
+
+	/**
+	 * This is the type URI for a Dynamic Label
+	 */
+	URI URI_TYPE_DYNAMIC_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_DYNAMIC_LABEL_SEGMENT);
+
+	/**
+	 * 
+	 * @return the {@link Decorator} that updates this <code>DynamicLabel</code>.
+	 * @model opposite="labelsToUpdate"
+	 */
+	Decorator getDecorator();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.DynamicLabel#getDecorator <em>Decorator</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Decorator</em>' reference.
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	void setDecorator(Decorator value);
+
+	/**
+	 * Reset the dynamic label. This sets the {@link LabelValue}s back to their
+	 * initial states.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+
+	/**
+	 * If the next value has been set since the last call to
+	 * {@link #setNextValue(LabelValue)} and the <code>DynamicLabel</code> has
+	 * not been "reset" then the next value is valid.
+	 * 
+	 * @return true if the next value is valid
+	 * @model default="false"
+	 */
+	boolean isNextValueValid();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.DynamicLabel#isNextValueValid <em>Next Value Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value Valid</em>' attribute.
+	 * @see #isNextValueValid()
+	 * @generated
+	 */
+	void setNextValueValid(boolean value);
+
+	/**
+	 * @return the "next" {@link LabelValue}.
+	 * 
+	 * @model containment="true" required="true"
+	 */
+	LabelValue getNextValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.DynamicLabel#getNextValue <em>Next Value</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value</em>' containment reference.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	void setNextValue(LabelValue value);
+
+	/**
+	 * Exchange the "next" and "current" {@link LabelValue}s. This is called when the
+	 * {@link Graph} is ready to move to the next state (see
+	 * {@link Graph#switchToNextValue()).
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void switchToNextValue();
+} // DynamicLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicNodeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicNodeLabel.java
new file mode 100644
index 0000000..ce19907
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/DynamicNodeLabel.java
@@ -0,0 +1,23 @@
+// DynamicNodeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>DynamicNodeLabel</code> is a {@link DynamicLabel} that specifically
+ * labels a {@link Node}.
+ * 
+ * @model abstract="true"
+ */
+public interface DynamicNodeLabel extends DynamicLabel, NodeLabel {
+	// Nothing
+} // DynamicNodeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Edge.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Edge.java
new file mode 100644
index 0000000..c360f6d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Edge.java
@@ -0,0 +1,171 @@
+// Edge.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * An <code>Edge</code> represents a relationship between two {@link Node}s.
+ * The attributes of that relationship are defined by the <code>Edge</code>'s
+ * {@link Label}.
+ * <p>
+ * An <code>Edge</code> can be <em>directed</em> or <em>undirected</em>.
+ * If the <code>Edge</code> is directed then the relationship is "one-way"
+ * from {@link Node} "<code>A</code>" to {@link Node} "<code>B</code>".
+ * An example of such a relationship is "physically contains", where the entity
+ * represented by {@link Node} "<code>B</code>" is physically contained in
+ * the entity represented by {@link Node} "<code>A</code>" (e.g., Santa
+ * Clara county is physically contained in the state of California). If the
+ * <code>Edge</code> is undirected then the relationship is <em>symmetric</em>,
+ * meaning that it holds both ways. An example of such a relationship is "shares
+ * common border", where the entity represented by {@link Node} "<code>A</code>"
+ * shares a common border with the entity represented by {@link Node} "<code>B</code>"
+ * (e.g., Santa Clara county shares a common border with Santa Cruz county).
+ * 
+ * </p>
+ * 
+ * @see Graph
+ * @see Node
+ * 
+ * @model
+ */
+public interface Edge extends Identifiable, Modifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * edge URI.
+	 */
+	String URI_TYPE_EDGE_SEGMENT = "edge";
+
+	/**
+	 * @return the "A" {@link Node} of the edge. Directed edges go from
+	 *         {@link Node} A to {@link Node} B. In a graph fragment this value
+	 *         may not yet be set.
+	 * @model containment="false"
+	 */
+	Node getA();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#getA <em>A</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>A</em>' reference.
+	 * @see #getA()
+	 * @generated
+	 */
+	void setA(Node value);
+
+	/**
+	 * @return the URI of {@link Node} A.
+	 * @model
+	 */
+	URI getNodeAURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#getNodeAURI <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node AURI</em>' attribute.
+	 * @see #getNodeAURI()
+	 * @generated
+	 */
+	void setNodeAURI(URI value);
+
+	/**
+	 * @return the "B" {@link Node} of the edge. Directed edges go from
+	 *         {@link Node} A to {@link Node} B. In a graph fragment this value
+	 *         may not yet be set.
+	 * @model containment="false"
+	 */
+	Node getB();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#getB <em>B</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>B</em>' reference.
+	 * @see #getB()
+	 * @generated
+	 */
+	void setB(Node value);
+
+	/**
+	 * @return the URI of {@link Node} B.
+	 * @model
+	 */
+	URI getNodeBURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#getNodeBURI <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node BURI</em>' attribute.
+	 * @see #getNodeBURI()
+	 * @generated
+	 */
+	void setNodeBURI(URI value);
+
+	/**
+	 * @param node
+	 *            one of the two {@link Node}s of the <code>Edge</code>
+	 * @return {@link Node} A if {@link Node} B is passed in, otherwise return
+	 *         {@link Node} B if {@link Node} A is passed in.
+	 * @exception IllegalArgumentException
+	 *                if the {@link Node} passed in is not either {@link Node} A
+	 *                or {@link Node} B of this <code>Edge</code>.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Node getOtherNode(final Node node) throws IllegalArgumentException;
+
+	/**
+	 * @return the {@link EdgeLabel} of the <code>Edge</code>, if it exists.
+	 * @model containment="true" opposite="edge"
+	 */
+	EdgeLabel getLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#getLabel <em>Label</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Label</em>' containment reference.
+	 * @see #getLabel()
+	 * @generated
+	 */
+	void setLabel(EdgeLabel value);
+
+	/**
+	 * @return <code>true</code> if the <code>Edge</code> is a directed
+	 *         <code>Edge</code> (directed <code>Edge</code>s are always
+	 *         from {@link Node} A to {@link Node} B).
+	 * @model default="false"
+	 */
+	boolean isDirected();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Edge#isDirected <em>Directed</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Directed</em>' attribute.
+	 * @see #isDirected()
+	 * @generated
+	 */
+	void setDirected(boolean value);
+
+	/**
+	 * @param node
+	 *            the {@link Node} under test
+	 * @return <code>true</code> if the <code>Edge</code> is a directed
+	 *         <code>Edge</code> and the {@link Node} under test is
+	 *         {@link Node} B.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean isDirectedAt(final Node node);
+
+} // Edge
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/EdgeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/EdgeLabel.java
new file mode 100644
index 0000000..d4b4b5e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/EdgeLabel.java
@@ -0,0 +1,40 @@
+// EdgeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>EdgeLabel</code> is a {@link Label} that provides attributes to an
+ * {@link Edge}.
+ * 
+ * @model abstract="true"
+ */
+public interface EdgeLabel extends Label {
+
+	/**
+	 * @return the {@link Edge} that this <code>EdgeLabel</code> labels.
+	 * 
+	 * @model containment="false"
+	 */
+	Edge getEdge();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.EdgeLabel#getEdge <em>Edge</em>}' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Edge</em>' container reference.
+	 * @see #getEdge()
+	 * @generated
+	 */
+	void setEdge(Edge value);
+
+} // EdgeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Graph.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Graph.java
new file mode 100644
index 0000000..bb28fe3
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Graph.java
@@ -0,0 +1,292 @@
+// Graph.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A <code>Graph</code> serves two roles in the STEM system. The first is as
+ * the canonical data structure that is the representational framework for all
+ * STEM simulations. In this form, a <code>Graph</code>, with one exception,
+ * matches the theoretical definition of a "graph" in that it has a set of
+ * {@link Node}s, a set of {@link Edge}s between members of the {@link Node}
+ * set, and a set of {@link Label}s that label either a member of the
+ * {@link Node} set or a member of the {@link Edge} set. The one exception is
+ * that an additional set of {@link Label}s designated as "graph labels"
+ * exists. These {@link Label}s function as "global variables" and would
+ * typically be used during a simulation to hold global state information (for
+ * instance, parameters referenced by a
+ * {@link org.eclipse.stem.core.model.Decorator} that control it's
+ * computations on a graph-wide basis, an example might be a disease model that
+ * can change the infectious rate it uses by referencing such a label).
+ * <p>
+ * The second role played by a <code>Graph</code> is as a unit of composition
+ * in a {@link org.eclipse.stem.core.model.Model}. A
+ * {@link org.eclipse.stem.core.model.Model} forms a tree of
+ * <code>Graph</code>s and {@link Model}s. The <code>Graph</code>
+ * instances are the leaves of the tree while the
+ * {@link org.eclipse.stem.core.model.Model} instances are the root and
+ * inner nodes of the tree. In this role, a <code>Graph</code> may not meet
+ * the theoretical definition of a "graph". This means that it may only have a
+ * set of {@link Label}s or a set of {@link Edge}s, and no {@link Node}s.
+ * This "graph fragment" allows sets of {@link Label}s and {@link Edge}s to be
+ * defined and then later combined with an existing <code>Graph</code> that
+ * does have {@link Node}s. This combination is specified by adding the graph
+ * fragment to a {@link org.eclipse.stem.core.model.Model} instance. When
+ * the canonical <code>Graph</code> is created, the {@link Label}s and
+ * {@link Edge}s are "resolved" by matching their target {@link URI}(s) with
+ * those of the {@link Node}s in the canonical <code>Graph</code> under
+ * construction. Any such {@link Label}s or {@link Edge}s that are unresolved
+ * are recorded as {@link UnresolvedIdentifiable}s.
+ * </p>
+ * <p>
+ * The <code>Graph</code> has <em>containment</em> relationships for
+ * {@link Node}s, {@link Edge}s and the labels on nodes (i.e.,
+ * {@link NodeLabel}s). These support the graph fragment role by allowing a
+ * <code>Graph</code> to contain any of the three without the others. The
+ * {@link Label}s on {@link Edge}s are contained by the {@link Edge} as it is
+ * not possible to have such a {@link Label} without the {@link Edge}. Only one
+ * such {@link Label} is allowed per {@link Edge}.
+ * </p>
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * 
+ * @see Edge
+ * @see Node
+ * @see Label
+ * @see org.eclipse.stem.core.model.Model
+ * @see org.eclipse.stem.core.scenario.Scenario
+ * 
+ * @model
+ */
+public interface Graph extends Identifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * graph URI.
+	 */
+	String URI_TYPE_GRAPH_SEGMENT = "graph";
+
+	/**
+	 * @return the time that the dynamic label values were last updated.
+	 * @model containment="true" resolveProxies="false"
+	 */
+	STEMTime getTime();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Graph#getTime <em>Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time</em>' containment reference.
+	 * @see #getTime()
+	 * @generated
+	 */
+	void setTime(STEMTime value);
+
+	/**
+	 * @return the map between {@link URI} and an {@link Edge}
+	 * @model keyType="URI" valueType="Edge" valueContainment="true"
+	 */
+	EMap<URI, Edge> getEdges();
+
+	/**
+	 * @return the map between {@link URI} and an {@link Node}
+	 * @model keyType="URI" valueType="Node" valueContainment="true"
+	 */
+	EMap<URI, Node> getNodes();
+
+	/**
+	 * @return the map between {@link URI} and {@link Label} labeling the {@link Graph}
+	 * @model keyType="URI" valueType="Label" valueContainment="true"
+	 */
+	EMap<URI, Label> getGraphLabels();
+
+	/**
+	 * @return the mapping between {@link URI} and {@link NodeLabel}s
+	 * @model keyType="URI" valueType="NodeLabel" valueContainment="true"
+	 */
+	EMap<URI, NodeLabel> getNodeLabels();
+
+	/**
+	 * @param typeURI
+	 *            the type {@link URI} of the desired {@link NodeLabel}
+	 * @return a list of the {@link NodeLabel}s that match a specific type {@link URI}
+	 * @model type="NodeLabel" volatile="true" transient="true"
+	 *        changeable="false"
+	 */
+	EList<NodeLabel> getNodeLabelsByTypeURI(URI typeURI);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	void addGraph(Graph graph, IdentifiableFilter filter);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This collection of Labels contains references to ALL of the
+	 * {@link DynamicLabel}s in the {@link Graph}. It is used by
+	 * {@link #switchToNextValue()} to find each of the {@link DynamicLabel}s
+	 * that need to switch values.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @model type="DynamicLabel" containment="false"
+	 */
+	EList<DynamicLabel> getDynamicLabels();
+
+	/**
+	 * @return the collection of {@link Decorator}s that decorate this {@link Graph}
+	 * @model type="Decorator" containment="true" opposite="graph"
+	 */
+	EList<Decorator> getDecorators();
+	
+
+	/**
+	 * Put the {@link Edge} into the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void putEdge(Edge edge);
+
+	/**
+	 * Get the {@link Edge} from the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Edge getEdge(URI uri);
+
+	/**
+	 * Put the {@link Node} into the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void putNode(Node node);
+
+	/**
+	 * Get the {@link Node} from the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Node getNode(URI uri);
+
+	/**
+	 * Put the {@link NodeLabel} into the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void putNodeLabel(NodeLabel label);
+
+	/**
+	 * Get the {@link NodeLabel} from the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	NodeLabel getNodeLabel(URI uri);
+
+	/**
+	 * Put the Graph {@link Label} into the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void putGraphLabel(Label label);
+
+	/**
+	 * Get the Graph {@link Label} from the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Label getGraphLabel(URI uri);
+
+	/**
+	 * Add the {@link DynamicLabel} into the {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void addDynamicLabel(DynamicLabel dynamiclabel);
+
+	/**
+	 * Return the number of {@link Edge}s in this {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getNumEdges();
+
+	/**
+	 * Return the number of {@link Node}s in this {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getNumNodes();
+
+	/**
+	 * Return the number of Graph {@link Label} in this {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getNumGraphLabels();
+
+	/**
+	 * Return the number of {@link NodeLabel}s in this {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getNumNodeLabels();
+
+	/**
+	 * Return the number of {@link DynamicLabel}s in this {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getNumDynamicLabels();
+
+	/**
+	 * @return a collection that {@link UnresolvedIdentifiable} instances that specify
+	 *         the {@link URI}'s in an {@link Identifiable} that could not be resolved.
+	 * 
+	 * @model type="UnresolvedIdentifiable" containment="true"
+	 */
+	EList<UnresolvedIdentifiable> getUnresolvedIdentifiables();
+
+	/**
+	 * Make all of the {@link DynamicLabel}s in the model switch to their "next" value.
+	 * This has the effect of moving the state of the model to its aggregate
+	 * value at the next time period.
+	 * 
+	 * @param currentTime
+	 * 		the time value to associate with the new value.  
+	 * @see #getTime()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void switchToNextValue(final STEMTime currentTime);
+
+} // Graph
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphFactory.java
new file mode 100644
index 0000000..7a37d75
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphFactory.java
@@ -0,0 +1,78 @@
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.graph.GraphPackage
+ * @generated
+ */
+public interface GraphFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	GraphFactory eINSTANCE = org.eclipse.stem.core.graph.impl.GraphFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Edge</em>'.
+	 * @generated
+	 */
+	Edge createEdge();
+
+	/**
+	 * Returns a new object of class '<em>Graph</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Graph</em>'.
+	 * @generated
+	 */
+	Graph createGraph();
+
+	/**
+	 * Returns a new object of class '<em>Node</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Node</em>'.
+	 * @generated
+	 */
+	Node createNode();
+
+	/**
+	 * Returns a new object of class '<em>Unresolved Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Unresolved Identifiable</em>'.
+	 * @generated
+	 */
+	UnresolvedIdentifiable createUnresolvedIdentifiable();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	GraphPackage getGraphPackage();
+
+} //GraphFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphPackage.java
new file mode 100644
index 0000000..711189a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/GraphPackage.java
@@ -0,0 +1,2838 @@
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.graph.GraphFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface GraphPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "graph";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/graph.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.graph";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	GraphPackage eINSTANCE = org.eclipse.stem.core.graph.impl.GraphPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.LabelImpl <em>Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getLabel()
+	 * @generated
+	 */
+	int LABEL = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__CURRENT_VALUE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL__IDENTIFIABLE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.DynamicLabelImpl <em>Dynamic Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.DynamicLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicLabel()
+	 * @generated
+	 */
+	int DYNAMIC_LABEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__URI = LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__TYPE_URI = LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__DUBLIN_CORE = LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__CURRENT_VALUE = LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__IDENTIFIABLE = LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__NEXT_VALUE_VALID = LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__NEXT_VALUE = LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL__DECORATOR = LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Dynamic Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_LABEL_FEATURE_COUNT = LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl <em>Dynamic Node Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicNodeLabel()
+	 * @generated
+	 */
+	int DYNAMIC_NODE_LABEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__URI = DYNAMIC_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__TYPE_URI = DYNAMIC_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__DUBLIN_CORE = DYNAMIC_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = DYNAMIC_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__CURRENT_VALUE = DYNAMIC_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__IDENTIFIABLE = DYNAMIC_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__NEXT_VALUE_VALID = DYNAMIC_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__NEXT_VALUE = DYNAMIC_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__DECORATOR = DYNAMIC_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL__NODE = DYNAMIC_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Dynamic Node Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_NODE_LABEL_FEATURE_COUNT = DYNAMIC_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.EdgeImpl <em>Edge</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.EdgeImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getEdge()
+	 * @generated
+	 */
+	int EDGE = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>A</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__A = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__NODE_AURI = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>B</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__B = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__NODE_BURI = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__LABEL = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Directed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE__DIRECTED = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Edge</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.GraphImpl <em>Graph</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.GraphImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getGraph()
+	 * @generated
+	 */
+	int GRAPH = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' map.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__EDGES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Nodes</b></em>' map.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NODES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Graph Labels</b></em>' map.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__GRAPH_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Node Labels</b></em>' map.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NODE_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Dynamic Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__DYNAMIC_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Num Edges</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NUM_EDGES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Num Nodes</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NUM_NODES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Num Graph Labels</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NUM_GRAPH_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Num Node Labels</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NUM_NODE_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Num Dynamic Labels</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__NUM_DYNAMIC_LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Unresolved Identifiables</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__UNRESOLVED_IDENTIFIABLES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 10;
+
+	/**
+	 * The feature id for the '<em><b>Decorators</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 11;
+
+	/**
+	 * The feature id for the '<em><b>Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH__TIME = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 12;
+
+	/**
+	 * The number of structural features of the '<em>Graph</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 13;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getSanityChecker()
+	 * @generated
+	 */
+	int SANITY_CHECKER = 11;
+
+	/**
+	 * The number of structural features of the '<em>Sanity Checker</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SANITY_CHECKER_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.LabelValueImpl <em>Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getLabelValue()
+	 * @generated
+	 */
+	int LABEL_VALUE = 5;
+
+	/**
+	 * The number of structural features of the '<em>Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LABEL_VALUE_FEATURE_COUNT = SANITY_CHECKER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.NodeImpl <em>Node</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.NodeImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getNode()
+	 * @generated
+	 */
+	int NODE = 6;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__EDGES = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE__LABELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.NodeLabelImpl <em>Node Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.NodeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getNodeLabel()
+	 * @generated
+	 */
+	int NODE_LABEL = 7;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__URI = LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__TYPE_URI = LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__DUBLIN_CORE = LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__CURRENT_VALUE = LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__IDENTIFIABLE = LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL__NODE = LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Node Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_LABEL_FEATURE_COUNT = LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl <em>Static Node Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticNodeLabel()
+	 * @generated
+	 */
+	int STATIC_NODE_LABEL = 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl <em>Unresolved Identifiable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	int UNRESOLVED_IDENTIFIABLE = 9;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl <em>URI To Identifiable Map Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToIdentifiableMapEntry()
+	 * @generated
+	 */
+	int URI_TO_IDENTIFIABLE_MAP_ENTRY = 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.EdgeLabelImpl <em>Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.EdgeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getEdgeLabel()
+	 * @generated
+	 */
+	int EDGE_LABEL = 13;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl <em>Dynamic Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicEdgeLabel()
+	 * @generated
+	 */
+	int DYNAMIC_EDGE_LABEL = 12;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl <em>Static Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticEdgeLabel()
+	 * @generated
+	 */
+	int STATIC_EDGE_LABEL = 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl <em>URI To Edge Map Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToEdgeMapEntry()
+	 * @generated
+	 */
+	int URI_TO_EDGE_MAP_ENTRY = 15;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl <em>URI To Node Map Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToNodeMapEntry()
+	 * @generated
+	 */
+	int URI_TO_NODE_MAP_ENTRY = 16;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl <em>URI To Label Map Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToLabelMapEntry()
+	 * @generated
+	 */
+	int URI_TO_LABEL_MAP_ENTRY = 17;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl <em>URI To Node Label Map Entry</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToNodeLabelMapEntry()
+	 * @generated
+	 */
+	int URI_TO_NODE_LABEL_MAP_ENTRY = 18;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.impl.StaticLabelImpl <em>Static Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.impl.StaticLabelImpl
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticLabel()
+	 * @generated
+	 */
+	int STATIC_LABEL = 19;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__URI = NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__TYPE_URI = NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__DUBLIN_CORE = NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__CURRENT_VALUE = NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__IDENTIFIABLE = NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL__NODE = NODE_LABEL__NODE;
+
+	/**
+	 * The number of structural features of the '<em>Static Node Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_NODE_LABEL_FEATURE_COUNT = NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Scenario</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__SCENARIO = 0;
+
+	/**
+	 * The feature id for the '<em><b>Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__MODEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__GRAPH = 2;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Unresolved URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI = 4;
+
+	/**
+	 * The feature id for the '<em><b>Field Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE__FIELD_NAME = 5;
+
+	/**
+	 * The number of structural features of the '<em>Unresolved Identifiable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNRESOLVED_IDENTIFIABLE_FEATURE_COUNT = 6;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>URI To Identifiable Map Entry</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_IDENTIFIABLE_MAP_ENTRY_FEATURE_COUNT = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__URI = DYNAMIC_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__TYPE_URI = DYNAMIC_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__DUBLIN_CORE = DYNAMIC_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = DYNAMIC_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__CURRENT_VALUE = DYNAMIC_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__IDENTIFIABLE = DYNAMIC_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__NEXT_VALUE_VALID = DYNAMIC_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__NEXT_VALUE = DYNAMIC_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__DECORATOR = DYNAMIC_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL__EDGE = DYNAMIC_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Dynamic Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DYNAMIC_EDGE_LABEL_FEATURE_COUNT = DYNAMIC_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__URI = LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__TYPE_URI = LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__DUBLIN_CORE = LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__CURRENT_VALUE = LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__IDENTIFIABLE = LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL__EDGE = LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_LABEL_FEATURE_COUNT = LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__URI = EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__TYPE_URI = EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__DUBLIN_CORE = EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__CURRENT_VALUE = EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__IDENTIFIABLE = EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL__EDGE = EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Static Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_EDGE_LABEL_FEATURE_COUNT = EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_EDGE_MAP_ENTRY__KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_EDGE_MAP_ENTRY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>URI To Edge Map Entry</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_EDGE_MAP_ENTRY_FEATURE_COUNT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_MAP_ENTRY__KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_MAP_ENTRY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>URI To Node Map Entry</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_MAP_ENTRY_FEATURE_COUNT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_LABEL_MAP_ENTRY__KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_LABEL_MAP_ENTRY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>URI To Label Map Entry</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_LABEL_MAP_ENTRY_FEATURE_COUNT = 2;
+
+	/**
+	 * The feature id for the '<em><b>Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_LABEL_MAP_ENTRY__KEY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_LABEL_MAP_ENTRY__VALUE = 1;
+
+	/**
+	 * The number of structural features of the '<em>URI To Node Label Map Entry</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int URI_TO_NODE_LABEL_MAP_ENTRY_FEATURE_COUNT = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__URI = LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__TYPE_URI = LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__DUBLIN_CORE = LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__CURRENT_VALUE = LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL__IDENTIFIABLE = LABEL__IDENTIFIABLE;
+
+	/**
+	 * The number of structural features of the '<em>Static Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STATIC_LABEL_FEATURE_COUNT = LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 20;
+
+	/**
+	 * The meta object id for the '<em>Illegal Argument Exception</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.lang.IllegalArgumentException
+	 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getIllegalArgumentException()
+	 * @generated
+	 */
+	int ILLEGAL_ARGUMENT_EXCEPTION = 21;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Dynamic Label</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	EClass getDynamicLabel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.DynamicLabel#isNextValueValid <em>Next Value Valid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Next Value Valid</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#isNextValueValid()
+	 * @see #getDynamicLabel()
+	 * @generated
+	 */
+	EAttribute getDynamicLabel_NextValueValid();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.graph.DynamicLabel#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#getNextValue()
+	 * @see #getDynamicLabel()
+	 * @generated
+	 */
+	EReference getDynamicLabel_NextValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.DynamicLabel#getDecorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Decorator</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#getDecorator()
+	 * @see #getDynamicLabel()
+	 * @generated
+	 */
+	EReference getDynamicLabel_Decorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.DynamicNodeLabel <em>Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Dynamic Node Label</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicNodeLabel
+	 * @generated
+	 */
+	EClass getDynamicNodeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.Edge <em>Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Edge</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge
+	 * @generated
+	 */
+	EClass getEdge();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.Edge#getA <em>A</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>A</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#getA()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EReference getEdge_A();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Edge#getNodeAURI <em>Node AURI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Node AURI</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#getNodeAURI()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EAttribute getEdge_NodeAURI();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.Edge#getB <em>B</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>B</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#getB()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EReference getEdge_B();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Edge#getNodeBURI <em>Node BURI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Node BURI</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#getNodeBURI()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EAttribute getEdge_NodeBURI();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.graph.Edge#getLabel <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Label</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#getLabel()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EReference getEdge_Label();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Edge#isDirected <em>Directed</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Directed</em>'.
+	 * @see org.eclipse.stem.core.graph.Edge#isDirected()
+	 * @see #getEdge()
+	 * @generated
+	 */
+	EAttribute getEdge_Directed();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.Graph <em>Graph</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Graph</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph
+	 * @generated
+	 */
+	EClass getGraph();
+
+	/**
+	 * Returns the meta object for the map '{@link org.eclipse.stem.core.graph.Graph#getEdges <em>Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the map '<em>Edges</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getEdges()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_Edges();
+
+	/**
+	 * Returns the meta object for the map '{@link org.eclipse.stem.core.graph.Graph#getNodes <em>Nodes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the map '<em>Nodes</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNodes()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_Nodes();
+
+	/**
+	 * Returns the meta object for the map '{@link org.eclipse.stem.core.graph.Graph#getGraphLabels <em>Graph Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the map '<em>Graph Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getGraphLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_GraphLabels();
+
+	/**
+	 * Returns the meta object for the map '{@link org.eclipse.stem.core.graph.Graph#getNodeLabels <em>Node Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the map '<em>Node Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNodeLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_NodeLabels();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.graph.Graph#getDynamicLabels <em>Dynamic Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Dynamic Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getDynamicLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_DynamicLabels();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Graph#getNumEdges <em>Num Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Edges</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNumEdges()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EAttribute getGraph_NumEdges();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Graph#getNumNodes <em>Num Nodes</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Nodes</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNumNodes()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EAttribute getGraph_NumNodes();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Graph#getNumGraphLabels <em>Num Graph Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Graph Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNumGraphLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EAttribute getGraph_NumGraphLabels();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Graph#getNumNodeLabels <em>Num Node Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Node Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNumNodeLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EAttribute getGraph_NumNodeLabels();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Graph#getNumDynamicLabels <em>Num Dynamic Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Num Dynamic Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getNumDynamicLabels()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EAttribute getGraph_NumDynamicLabels();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.stem.core.graph.Graph#getUnresolvedIdentifiables <em>Unresolved Identifiables</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Unresolved Identifiables</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getUnresolvedIdentifiables()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_UnresolvedIdentifiables();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.stem.core.graph.Graph#getDecorators <em>Decorators</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Decorators</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getDecorators()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_Decorators();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.graph.Graph#getTime <em>Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Time</em>'.
+	 * @see org.eclipse.stem.core.graph.Graph#getTime()
+	 * @see #getGraph()
+	 * @generated
+	 */
+	EReference getGraph_Time();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Label</em>'.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	EClass getLabel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.Label#getURIOfIdentifiableToBeLabeled <em>URI Of Identifiable To Be Labeled</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>URI Of Identifiable To Be Labeled</em>'.
+	 * @see org.eclipse.stem.core.graph.Label#getURIOfIdentifiableToBeLabeled()
+	 * @see #getLabel()
+	 * @generated
+	 */
+	EAttribute getLabel_URIOfIdentifiableToBeLabeled();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.graph.Label#getCurrentValue <em>Current Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Current Value</em>'.
+	 * @see org.eclipse.stem.core.graph.Label#getCurrentValue()
+	 * @see #getLabel()
+	 * @generated
+	 */
+	EReference getLabel_CurrentValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.Label#getIdentifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Identifiable</em>'.
+	 * @see org.eclipse.stem.core.graph.Label#getIdentifiable()
+	 * @see #getLabel()
+	 * @generated
+	 */
+	EReference getLabel_Identifiable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Label Value</em>'.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	EClass getLabelValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Node</em>'.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @generated
+	 */
+	EClass getNode();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.graph.Node#getEdges <em>Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Edges</em>'.
+	 * @see org.eclipse.stem.core.graph.Node#getEdges()
+	 * @see #getNode()
+	 * @generated
+	 */
+	EReference getNode_Edges();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.graph.Node#getLabels <em>Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Labels</em>'.
+	 * @see org.eclipse.stem.core.graph.Node#getLabels()
+	 * @see #getNode()
+	 * @generated
+	 */
+	EReference getNode_Labels();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Node Label</em>'.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	EClass getNodeLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.NodeLabel#getNode <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Node</em>'.
+	 * @see org.eclipse.stem.core.graph.NodeLabel#getNode()
+	 * @see #getNodeLabel()
+	 * @generated
+	 */
+	EReference getNodeLabel_Node();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.StaticNodeLabel <em>Static Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Static Node Label</em>'.
+	 * @see org.eclipse.stem.core.graph.StaticNodeLabel
+	 * @generated
+	 */
+	EClass getStaticNodeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable <em>Unresolved Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Unresolved Identifiable</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable
+	 * @generated
+	 */
+	EClass getUnresolvedIdentifiable();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getScenario <em>Scenario</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Scenario</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getScenario()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EReference getUnresolvedIdentifiable_Scenario();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getModel <em>Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Model</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getModel()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EReference getUnresolvedIdentifiable_Model();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getGraph <em>Graph</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Graph</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getGraph()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EReference getUnresolvedIdentifiable_Graph();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getIdentifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Identifiable</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getIdentifiable()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EReference getUnresolvedIdentifiable_Identifiable();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getUnresolvedURI <em>Unresolved URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Unresolved URI</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getUnresolvedURI()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EAttribute getUnresolvedIdentifiable_UnresolvedURI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getFieldName <em>Field Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Field Name</em>'.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable#getFieldName()
+	 * @see #getUnresolvedIdentifiable()
+	 * @generated
+	 */
+	EAttribute getUnresolvedIdentifiable_FieldName();
+
+	/**
+	 * Returns the meta object for class '{@link java.util.Map.Entry <em>URI To Identifiable Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>URI To Identifiable Map Entry</em>'.
+	 * @see java.util.Map.Entry
+	 * @model keyDataType="org.eclipse.stem.core.graph.URI"
+	 *        valueType="org.eclipse.stem.core.common.Identifiable" valueContainment="true"
+	 * @generated
+	 */
+	EClass getURIToIdentifiableMapEntry();
+
+	/**
+	 * Returns the meta object for the attribute '{@link java.util.Map.Entry <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Key</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToIdentifiableMapEntry()
+	 * @generated
+	 */
+	EAttribute getURIToIdentifiableMapEntry_Key();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link java.util.Map.Entry <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToIdentifiableMapEntry()
+	 * @generated
+	 */
+	EReference getURIToIdentifiableMapEntry_Value();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Sanity Checker</em>'.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @model instanceClass="org.eclipse.stem.core.common.SanityChecker"
+	 * @generated
+	 */
+	EClass getSanityChecker();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.DynamicEdgeLabel <em>Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Dynamic Edge Label</em>'.
+	 * @see org.eclipse.stem.core.graph.DynamicEdgeLabel
+	 * @generated
+	 */
+	EClass getDynamicEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Edge Label</em>'.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	EClass getEdgeLabel();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.stem.core.graph.EdgeLabel#getEdge <em>Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Edge</em>'.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel#getEdge()
+	 * @see #getEdgeLabel()
+	 * @generated
+	 */
+	EReference getEdgeLabel_Edge();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.StaticEdgeLabel <em>Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Static Edge Label</em>'.
+	 * @see org.eclipse.stem.core.graph.StaticEdgeLabel
+	 * @generated
+	 */
+	EClass getStaticEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link java.util.Map.Entry <em>URI To Edge Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>URI To Edge Map Entry</em>'.
+	 * @see java.util.Map.Entry
+	 * @model keyDataType="org.eclipse.stem.core.graph.URI"
+	 *        valueType="org.eclipse.stem.core.graph.Edge" valueContainment="true"
+	 * @generated
+	 */
+	EClass getURIToEdgeMapEntry();
+
+	/**
+	 * Returns the meta object for the attribute '{@link java.util.Map.Entry <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Key</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToEdgeMapEntry()
+	 * @generated
+	 */
+	EAttribute getURIToEdgeMapEntry_Key();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link java.util.Map.Entry <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToEdgeMapEntry()
+	 * @generated
+	 */
+	EReference getURIToEdgeMapEntry_Value();
+
+	/**
+	 * Returns the meta object for class '{@link java.util.Map.Entry <em>URI To Node Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>URI To Node Map Entry</em>'.
+	 * @see java.util.Map.Entry
+	 * @model keyDataType="org.eclipse.stem.core.graph.URI"
+	 *        valueType="org.eclipse.stem.core.graph.Node" valueContainment="true"
+	 * @generated
+	 */
+	EClass getURIToNodeMapEntry();
+
+	/**
+	 * Returns the meta object for the attribute '{@link java.util.Map.Entry <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Key</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToNodeMapEntry()
+	 * @generated
+	 */
+	EAttribute getURIToNodeMapEntry_Key();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link java.util.Map.Entry <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToNodeMapEntry()
+	 * @generated
+	 */
+	EReference getURIToNodeMapEntry_Value();
+
+	/**
+	 * Returns the meta object for class '{@link java.util.Map.Entry <em>URI To Label Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>URI To Label Map Entry</em>'.
+	 * @see java.util.Map.Entry
+	 * @model keyDataType="org.eclipse.stem.core.graph.URI"
+	 *        valueType="org.eclipse.stem.core.graph.Label" valueContainment="true"
+	 * @generated
+	 */
+	EClass getURIToLabelMapEntry();
+
+	/**
+	 * Returns the meta object for the attribute '{@link java.util.Map.Entry <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Key</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToLabelMapEntry()
+	 * @generated
+	 */
+	EAttribute getURIToLabelMapEntry_Key();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link java.util.Map.Entry <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToLabelMapEntry()
+	 * @generated
+	 */
+	EReference getURIToLabelMapEntry_Value();
+
+	/**
+	 * Returns the meta object for class '{@link java.util.Map.Entry <em>URI To Node Label Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>URI To Node Label Map Entry</em>'.
+	 * @see java.util.Map.Entry
+	 * @model keyDataType="org.eclipse.stem.core.graph.URI"
+	 *        valueType="org.eclipse.stem.core.graph.NodeLabel" valueContainment="true"
+	 * @generated
+	 */
+	EClass getURIToNodeLabelMapEntry();
+
+	/**
+	 * Returns the meta object for the attribute '{@link java.util.Map.Entry <em>Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Key</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToNodeLabelMapEntry()
+	 * @generated
+	 */
+	EAttribute getURIToNodeLabelMapEntry_Key();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link java.util.Map.Entry <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Value</em>'.
+	 * @see java.util.Map.Entry
+	 * @see #getURIToNodeLabelMapEntry()
+	 * @generated
+	 */
+	EReference getURIToNodeLabelMapEntry_Value();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.StaticLabel <em>Static Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Static Label</em>'.
+	 * @see org.eclipse.stem.core.graph.StaticLabel
+	 * @generated
+	 */
+	EClass getStaticLabel();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the meta object for data type '{@link java.lang.IllegalArgumentException <em>Illegal Argument Exception</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>Illegal Argument Exception</em>'.
+	 * @see java.lang.IllegalArgumentException
+	 * @model instanceClass="java.lang.IllegalArgumentException"
+	 * @generated
+	 */
+	EDataType getIllegalArgumentException();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	GraphFactory getGraphFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.DynamicLabelImpl <em>Dynamic Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.DynamicLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicLabel()
+		 * @generated
+		 */
+		EClass DYNAMIC_LABEL = eINSTANCE.getDynamicLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value Valid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DYNAMIC_LABEL__NEXT_VALUE_VALID = eINSTANCE.getDynamicLabel_NextValueValid();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DYNAMIC_LABEL__NEXT_VALUE = eINSTANCE.getDynamicLabel_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Decorator</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DYNAMIC_LABEL__DECORATOR = eINSTANCE.getDynamicLabel_Decorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl <em>Dynamic Node Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicNodeLabel()
+		 * @generated
+		 */
+		EClass DYNAMIC_NODE_LABEL = eINSTANCE.getDynamicNodeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.EdgeImpl <em>Edge</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.EdgeImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getEdge()
+		 * @generated
+		 */
+		EClass EDGE = eINSTANCE.getEdge();
+
+		/**
+		 * The meta object literal for the '<em><b>A</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EDGE__A = eINSTANCE.getEdge_A();
+
+		/**
+		 * The meta object literal for the '<em><b>Node AURI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EDGE__NODE_AURI = eINSTANCE.getEdge_NodeAURI();
+
+		/**
+		 * The meta object literal for the '<em><b>B</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EDGE__B = eINSTANCE.getEdge_B();
+
+		/**
+		 * The meta object literal for the '<em><b>Node BURI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EDGE__NODE_BURI = eINSTANCE.getEdge_NodeBURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Label</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EDGE__LABEL = eINSTANCE.getEdge_Label();
+
+		/**
+		 * The meta object literal for the '<em><b>Directed</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EDGE__DIRECTED = eINSTANCE.getEdge_Directed();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.GraphImpl <em>Graph</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.GraphImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getGraph()
+		 * @generated
+		 */
+		EClass GRAPH = eINSTANCE.getGraph();
+
+		/**
+		 * The meta object literal for the '<em><b>Edges</b></em>' map feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__EDGES = eINSTANCE.getGraph_Edges();
+
+		/**
+		 * The meta object literal for the '<em><b>Nodes</b></em>' map feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__NODES = eINSTANCE.getGraph_Nodes();
+
+		/**
+		 * The meta object literal for the '<em><b>Graph Labels</b></em>' map feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__GRAPH_LABELS = eINSTANCE.getGraph_GraphLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Node Labels</b></em>' map feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__NODE_LABELS = eINSTANCE.getGraph_NodeLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Dynamic Labels</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__DYNAMIC_LABELS = eINSTANCE.getGraph_DynamicLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Edges</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GRAPH__NUM_EDGES = eINSTANCE.getGraph_NumEdges();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Nodes</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GRAPH__NUM_NODES = eINSTANCE.getGraph_NumNodes();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Graph Labels</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GRAPH__NUM_GRAPH_LABELS = eINSTANCE.getGraph_NumGraphLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Node Labels</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GRAPH__NUM_NODE_LABELS = eINSTANCE.getGraph_NumNodeLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Num Dynamic Labels</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GRAPH__NUM_DYNAMIC_LABELS = eINSTANCE.getGraph_NumDynamicLabels();
+
+		/**
+		 * The meta object literal for the '<em><b>Unresolved Identifiables</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__UNRESOLVED_IDENTIFIABLES = eINSTANCE.getGraph_UnresolvedIdentifiables();
+
+		/**
+		 * The meta object literal for the '<em><b>Decorators</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__DECORATORS = eINSTANCE.getGraph_Decorators();
+
+		/**
+		 * The meta object literal for the '<em><b>Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GRAPH__TIME = eINSTANCE.getGraph_Time();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.LabelImpl <em>Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.LabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getLabel()
+		 * @generated
+		 */
+		EClass LABEL = eINSTANCE.getLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = eINSTANCE.getLabel_URIOfIdentifiableToBeLabeled();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LABEL__CURRENT_VALUE = eINSTANCE.getLabel_CurrentValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifiable</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LABEL__IDENTIFIABLE = eINSTANCE.getLabel_Identifiable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.LabelValueImpl <em>Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getLabelValue()
+		 * @generated
+		 */
+		EClass LABEL_VALUE = eINSTANCE.getLabelValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.NodeImpl <em>Node</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.NodeImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getNode()
+		 * @generated
+		 */
+		EClass NODE = eINSTANCE.getNode();
+
+		/**
+		 * The meta object literal for the '<em><b>Edges</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NODE__EDGES = eINSTANCE.getNode_Edges();
+
+		/**
+		 * The meta object literal for the '<em><b>Labels</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NODE__LABELS = eINSTANCE.getNode_Labels();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.NodeLabelImpl <em>Node Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.NodeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getNodeLabel()
+		 * @generated
+		 */
+		EClass NODE_LABEL = eINSTANCE.getNodeLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Node</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NODE_LABEL__NODE = eINSTANCE.getNodeLabel_Node();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl <em>Static Node Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticNodeLabel()
+		 * @generated
+		 */
+		EClass STATIC_NODE_LABEL = eINSTANCE.getStaticNodeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl <em>Unresolved Identifiable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getUnresolvedIdentifiable()
+		 * @generated
+		 */
+		EClass UNRESOLVED_IDENTIFIABLE = eINSTANCE.getUnresolvedIdentifiable();
+
+		/**
+		 * The meta object literal for the '<em><b>Scenario</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference UNRESOLVED_IDENTIFIABLE__SCENARIO = eINSTANCE.getUnresolvedIdentifiable_Scenario();
+
+		/**
+		 * The meta object literal for the '<em><b>Model</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference UNRESOLVED_IDENTIFIABLE__MODEL = eINSTANCE.getUnresolvedIdentifiable_Model();
+
+		/**
+		 * The meta object literal for the '<em><b>Graph</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference UNRESOLVED_IDENTIFIABLE__GRAPH = eINSTANCE.getUnresolvedIdentifiable_Graph();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifiable</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE = eINSTANCE.getUnresolvedIdentifiable_Identifiable();
+
+		/**
+		 * The meta object literal for the '<em><b>Unresolved URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI = eINSTANCE.getUnresolvedIdentifiable_UnresolvedURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Field Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute UNRESOLVED_IDENTIFIABLE__FIELD_NAME = eINSTANCE.getUnresolvedIdentifiable_FieldName();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl <em>URI To Identifiable Map Entry</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToIdentifiableMapEntry()
+		 * @generated
+		 */
+		EClass URI_TO_IDENTIFIABLE_MAP_ENTRY = eINSTANCE.getURIToIdentifiableMapEntry();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY = eINSTANCE.getURIToIdentifiableMapEntry_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE = eINSTANCE.getURIToIdentifiableMapEntry_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.common.SanityChecker
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getSanityChecker()
+		 * @generated
+		 */
+		EClass SANITY_CHECKER = eINSTANCE.getSanityChecker();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl <em>Dynamic Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getDynamicEdgeLabel()
+		 * @generated
+		 */
+		EClass DYNAMIC_EDGE_LABEL = eINSTANCE.getDynamicEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.EdgeLabelImpl <em>Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.EdgeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getEdgeLabel()
+		 * @generated
+		 */
+		EClass EDGE_LABEL = eINSTANCE.getEdgeLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Edge</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference EDGE_LABEL__EDGE = eINSTANCE.getEdgeLabel_Edge();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl <em>Static Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticEdgeLabel()
+		 * @generated
+		 */
+		EClass STATIC_EDGE_LABEL = eINSTANCE.getStaticEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl <em>URI To Edge Map Entry</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToEdgeMapEntry()
+		 * @generated
+		 */
+		EClass URI_TO_EDGE_MAP_ENTRY = eINSTANCE.getURIToEdgeMapEntry();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute URI_TO_EDGE_MAP_ENTRY__KEY = eINSTANCE.getURIToEdgeMapEntry_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference URI_TO_EDGE_MAP_ENTRY__VALUE = eINSTANCE.getURIToEdgeMapEntry_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl <em>URI To Node Map Entry</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToNodeMapEntry()
+		 * @generated
+		 */
+		EClass URI_TO_NODE_MAP_ENTRY = eINSTANCE.getURIToNodeMapEntry();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute URI_TO_NODE_MAP_ENTRY__KEY = eINSTANCE.getURIToNodeMapEntry_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference URI_TO_NODE_MAP_ENTRY__VALUE = eINSTANCE.getURIToNodeMapEntry_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl <em>URI To Label Map Entry</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToLabelMapEntry()
+		 * @generated
+		 */
+		EClass URI_TO_LABEL_MAP_ENTRY = eINSTANCE.getURIToLabelMapEntry();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute URI_TO_LABEL_MAP_ENTRY__KEY = eINSTANCE.getURIToLabelMapEntry_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference URI_TO_LABEL_MAP_ENTRY__VALUE = eINSTANCE.getURIToLabelMapEntry_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl <em>URI To Node Label Map Entry</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURIToNodeLabelMapEntry()
+		 * @generated
+		 */
+		EClass URI_TO_NODE_LABEL_MAP_ENTRY = eINSTANCE.getURIToNodeLabelMapEntry();
+
+		/**
+		 * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute URI_TO_NODE_LABEL_MAP_ENTRY__KEY = eINSTANCE.getURIToNodeLabelMapEntry_Key();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference URI_TO_NODE_LABEL_MAP_ENTRY__VALUE = eINSTANCE.getURIToNodeLabelMapEntry_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.impl.StaticLabelImpl <em>Static Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.impl.StaticLabelImpl
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getStaticLabel()
+		 * @generated
+		 */
+		EClass STATIC_LABEL = eINSTANCE.getStaticLabel();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+		/**
+		 * The meta object literal for the '<em>Illegal Argument Exception</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see java.lang.IllegalArgumentException
+		 * @see org.eclipse.stem.core.graph.impl.GraphPackageImpl#getIllegalArgumentException()
+		 * @generated
+		 */
+		EDataType ILLEGAL_ARGUMENT_EXCEPTION = eINSTANCE.getIllegalArgumentException();
+
+	}
+
+} //GraphPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabel.java
new file mode 100644
index 0000000..71d44fd
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabel.java
@@ -0,0 +1,98 @@
+// IntegrationLabel

+package org.eclipse.stem.core.graph;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.STEMTime;

+

+/**

+ * The interface is implemented by any label that is able to switch between 

+ * current and next value optionally using an integration technique, for instance

+ * the Runge Kutta numerical ODE solver.  

+ */

+public interface IntegrationLabel  extends EObject {

+

+	/**

+	 * @return The current value at this simulation cycle

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getCurrentValue();

+

+	/**

+	 * @return The next value at next simulation cycle

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getNextValue();

+

+	

+	/**

+	 * @return The delta value that when added to the current value provides the next value

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getDeltaValue();

+

+	// The rest of the label values are for the Runge Kutta solver

+	

+	/**

+	 * @return The temporary value used when the integrating solver advances to the next step

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getTempValue();

+

+	/**

+	 * @return The value to probe and calculate delta. This is the label value any disease model should use

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getProbeValue();

+

+	/**

+	 * @return The scale used to scale the error calculated by the integrating solver

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getErrorScale();

+

+	// This label value is used for population model decorators to restore the original

+	// population value to the correct number at the beginning of a simulation

+

+	/**

+	 * @return The original value

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	LabelValue getOriginalValue();

+	

+	/**

+	 *Ugh 

+	 *

+	 *@return Decorator

+	 */

+	

+	Decorator getDecorator();

+	

+	/**

+	 * setNextValueValud

+	 * 

+	 * @param value true if valid

+	*/

+	public void setNextValueValid(boolean value);

+	

+	/**

+	 * reset. Reset the label using the 

+	 * stem time 

+	 * 

+	 * @param time STEM time

+	 */

+	

+	public void reset(STEMTime time);

+	

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabelValue.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabelValue.java
new file mode 100644
index 0000000..165ad08
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/IntegrationLabelValue.java
@@ -0,0 +1,98 @@
+// IntegrationLabel

+package org.eclipse.stem.core.graph;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+/**

+ * The interface is implemented by any label value that is able to switch between 

+ * current and next value optionally using an integration technique, for instance

+ * the Runge Kutta numerical ODE solver.  

+ */

+public interface IntegrationLabelValue extends SimpleDataExchangeLabelValue {

+

+	/**

+	 * Set the value from another value

+	 * 

+	 * @param v The value

+	 * @return The changed value

+	 * @model volatile="true" changeable="false" resolveProxies="false"

+	 */

+	IntegrationLabelValue set(IntegrationLabelValue v);

+

+	

+	/**

+	 * Add

+	 * 

+	 * @param value Value to add

+	 * @return IntegrationLabelValue Changed value

+	 */

+

+	public IntegrationLabelValue add(IntegrationLabelValue value);

+

+	/**

+	 * Sub

+	 * 

+	 * @param value Value to sub

+	 * @return IntegrationLabelValue Changed value

+	*/

+	public IntegrationLabelValue sub(IntegrationLabelValue value);

+

+	

+	/**

+	 * Scale

+	 * 

+	 * @param value Value to scale

+	 * @return IntegrationLabelValue Changed value

+	*/

+	public IntegrationLabelValue scale(double scaleFactor);

+	

+	/**

+	 * Add

+	 * 

+	 * @param value Value to add

+	 * @return IntegrationLabelValue Changed value

+	*/

+	public IntegrationLabelValue add(double addition);

+

+	/**

+	 * Abs

+	 * 

+	 * @return IntegrationLabelValue Changed value

+	*/

+	public IntegrationLabelValue abs();

+	

+	/**

+	 * adjustDelta. Adjust this delta value according to the input

+	 * 

+	 * @param value reference value

+	 * @return boolean True if changed

+	*/

+	public boolean adjustDelta(IntegrationLabelValue value);

+	

+	

+	/**

+	 * divide. Divide the input with this value

+	 * 

+	 * @param value The denominator

+	 * @return The changed value

+	*/

+	public IntegrationLabelValue divide(IntegrationLabelValue value);

+	

+	/**

+	 * max. Return the maximum if the label values

+	 * 

+	 * @return double The maximum value

+	*/

+	public double max();

+	

+

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Label.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Label.java
new file mode 100644
index 0000000..0709b22
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Label.java
@@ -0,0 +1,98 @@
+// Label.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * A <code>Label</code> represents attributes of either a {@link Node},
+ * {@link Edge}, or {@link Graph}. The attributes are represented by a
+ * {@link LabelValue}.
+ * 
+ * @see Node
+ * @see Edge
+ * @see Graph
+ * @see NodeLabel
+ * @see DynamicLabel
+ * @see StaticNodeLabel
+ * @see DynamicNodeLabel
+ * 
+ * 
+ * @model abstract="true"
+ */
+public interface Label extends Identifiable {
+
+	/**
+	 * This is the top-level segment for all type URI's for labels.
+	 */
+	String URI_TYPE_LABEL_SEGMENT = "label";
+
+	/**
+	 * This is the type URI for a Label
+	 */
+	URI URI_TYPE_LABEL = STEMURI.createTypeURI(URI_TYPE_LABEL_SEGMENT);
+
+	/**
+	 * @return the {@link Identifiable} labeled by this <code>Label</code>
+	 * @model volatile="true" transient="true"
+	 */
+	Identifiable getIdentifiable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Label#getIdentifiable <em>Identifiable</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Identifiable</em>' reference.
+	 * @see #getIdentifiable()
+	 * @generated
+	 */
+	void setIdentifiable(Identifiable value);
+
+	/**
+	 * @return the {@link URI} of the {@link Identifiable} that this
+	 *         <code>Label</code> labels. This value is typically used when
+	 *         combining "graph fragments" to resolve the connection between the
+	 *         <code>Label</code> and the {@link Identifiable} it labels.
+	 * @see Graph#addGraph(Graph)
+	 * @see UnresolvedIdentifiable
+	 * @see #getIdentifiable()
+	 * 
+	 * @model
+	 */
+	URI getURIOfIdentifiableToBeLabeled();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Label#getURIOfIdentifiableToBeLabeled <em>URI Of Identifiable To Be Labeled</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>URI Of Identifiable To Be Labeled</em>' attribute.
+	 * @see #getURIOfIdentifiableToBeLabeled()
+	 * @generated
+	 */
+	void setURIOfIdentifiableToBeLabeled(URI value);
+
+	/**
+	 * @model containment="true" required="true"
+	 */
+	LabelValue getCurrentValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.Label#getCurrentValue <em>Current Value</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Current Value</em>' containment reference.
+	 * @see #getCurrentValue()
+	 * @generated
+	 */
+	void setCurrentValue(LabelValue value);
+
+} // Label
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/LabelValue.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/LabelValue.java
new file mode 100644
index 0000000..0ca27b9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/LabelValue.java
@@ -0,0 +1,34 @@
+// LabelValue.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * A <code>LabelValue</code> stores the attributes of a {@link Label}.
+ * 
+ * @see Label
+ * @see DynamicLabel
+ * @see DynamicNodeLabel
+ * 
+ * @model abstract="true"
+ */
+public interface LabelValue extends EObject, SanityChecker {
+
+	/**
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+
+} // LabelValue
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Node.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Node.java
new file mode 100644
index 0000000..e1cd3d9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/Node.java
@@ -0,0 +1,66 @@
+// Node.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * A <code>Node</code> represents a real or abstract entity.
+ * <p>
+ * A <code>Node</code> can have "attributes". The attributes are represented
+ * by zero or more {@link NodeLabel}s.
+ * </p>
+ * <p>
+ * A <code>Node</code> can have zero or more "relationships" with one or more
+ * other <code>Node</code>s. These relationships can be with the same
+ * <code>Node</code> or with multiple different <code>Node</code>s. A
+ * single relationship is represented by an {@link Edge}.
+ * </p>
+ * 
+ * @see Edge
+ * @see Label
+ * @see NodeLabel
+ * @see Graph
+ * 
+ * @model
+ */
+public interface Node extends Identifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * node type URI.
+	 */
+	String URI_TYPE_NODE_SEGMENT = "node";
+
+	// /**
+	// * This is the type URI for area labels
+	// */
+	// URI URI_TYPE_GEOGRAPHIC_FEATURE_NODE = STEMURI
+	// .createTypeURI(URI_TYPE_NODE_SEGMENT);
+
+	/**
+	 * @return the {@link Edge}s that represent the relationships of this
+	 *         <code>Node</code>.
+	 * @model type="Edge" containment="false"
+	 */
+	EList<Edge> getEdges();
+
+	/**
+	 * the {@link Label}s that represent attributes of this <code>Node</code>.
+	 * 
+	 * @model type="NodeLabel" containment="false" opposite="node"
+	 */
+	EList<NodeLabel> getLabels();
+
+} // Node
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/NodeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/NodeLabel.java
new file mode 100644
index 0000000..b9f4533
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/NodeLabel.java
@@ -0,0 +1,40 @@
+// NodeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NodeLabel</code> is a {@link Label} that provides attributes to a
+ * {@link Node}.
+ * 
+ * @model abstract="true"
+ */
+public interface NodeLabel extends Label {
+
+	/**
+	 * @return the {@link Node} that this <code>NodeLabel</code> labels. This
+	 *         value can be null in a graph fragment.
+	 * 
+	 * @model containment="false"
+	 */
+	Node getNode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.NodeLabel#getNode <em>Node</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node</em>' reference.
+	 * @see #getNode()
+	 * @generated
+	 */
+	void setNode(Node value);
+
+} // NodeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/ResettableAdapter.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/ResettableAdapter.java
new file mode 100644
index 0000000..c7f1510
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/ResettableAdapter.java
@@ -0,0 +1,25 @@
+// ResettableAdapter.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that are <code>Adapter</code>s
+ * that can be reset. This is typically needed when the adapter maintains some
+ * kind of state information that needs to be reset when the value of the
+ * {@link DynamicLabel} is reset. The method {@link DynamicLabel#reset()} scans
+ * through all of the adapters attached to {@link DynamicLabel} and resets all
+ * that implement this interface.
+ */
+public interface ResettableAdapter {
+	void reset();
+} // ResettableAdapter
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/SimpleDataExchangeLabelValue.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/SimpleDataExchangeLabelValue.java
new file mode 100644
index 0000000..201d8cc
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/SimpleDataExchangeLabelValue.java
@@ -0,0 +1,39 @@
+// IntegrationLabel

+package org.eclipse.stem.core.graph;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * This interface is implemented by labels that needs to exchange information with other

+ * parties. 

+ */

+public interface SimpleDataExchangeLabelValue  extends EObject {

+

+	/**

+	 * getAdditions

+	 * 

+	 * @return double Additions

+	 */

+	

+	public double getAdditions();

+	

+	/**

+	 * getSubstractions

+	 * 

+	 * @return double Substractions

+	 */

+	

+	public double getSubstractions();

+	

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticEdgeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticEdgeLabel.java
new file mode 100644
index 0000000..9dc63cf
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticEdgeLabel.java
@@ -0,0 +1,33 @@
+// StaticEdgeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import java.lang.reflect.Modifier;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.trigger.Trigger;
+
+/**
+ * A <code>StaticEdgeLabel</code> is an {@link EdgeLabel} that only has a single
+ * "current" {@link LabelValue}. It is typically used for {@link Edge}
+ * attributes that rarely change in a <code>Simulation</code>. An example would
+ * be the relationship between two regions sharing a common border.
+ * <p>
+ * By implementing the {@link Modifiable} interface, a
+ * <code>StaticEdgeLabel</code> is identified as being something that can be
+ * altered by a {@link Modifier} activated by a {@link Trigger}.
+ * 
+ * @model abstract="true"
+ */
+public interface StaticEdgeLabel extends EdgeLabel, StaticLabel {
+	// Nothing
+} // StaticEdgeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticLabel.java
new file mode 100644
index 0000000..96e5bb5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticLabel.java
@@ -0,0 +1,27 @@
+// StaticLabel
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * A <code>StaticLabel</code> is a marker class.
+ * 
+ * @see StaticNodeLabel
+ * @see StaticEdgeLabel
+ * 
+ * @model abstract="true"
+ */
+public interface StaticLabel extends Label, Modifiable {
+	// Nothing
+} // StaticLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticNodeLabel.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticNodeLabel.java
new file mode 100644
index 0000000..ae05f96
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/StaticNodeLabel.java
@@ -0,0 +1,34 @@
+// StaticNodeLabel.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.Modifier;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.trigger.Trigger;
+
+/**
+ * A <code>StaticNodeLabel</code> is a {@link NodeLabel} that only has a single
+ * "current" {@link LabelValue}. It is typically used for {@link Node}
+ * attributes that rarely change in a <code>Simulation</code>. An example would
+ * be the area of a geographic location.
+ * <p>
+ * By implementing the {@link Modifiable} interface, a
+ * <code>StaticNodeLabel</code> is identified as being something that can be
+ * altered by a {@link Modifier} activated by a {@link Trigger}.
+ * 
+ * @model abstract="true"
+ */
+public interface StaticNodeLabel extends NodeLabel, StaticLabel {
+	// Nothing
+} // StaticNodeLabel
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/UnresolvedIdentifiable.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/UnresolvedIdentifiable.java
new file mode 100644
index 0000000..027b6a6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/UnresolvedIdentifiable.java
@@ -0,0 +1,138 @@
+// UnresolvedIdentifiable.java
+package org.eclipse.stem.core.graph;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * An <code>UnresolvedIdentifiable</code> is created during the generation of
+ * the canonical {@link Graph} (see
+ * {@link org.eclipse.stem.core.model.Model#getCanonicalGraph(URI)) when an {{@link Edge}
+ * or a {@link Label} cannot be matched with the {@link Node} or {@link Graph}
+ * that its target {@link URI} specifies.
+ * <p>
+ * Instances of <code>UnresolvedIdentifiable</code> are used to report the
+ * inability to resolve the {@link URI}.
+ * </p>
+ * 
+ * @model
+ */
+public interface UnresolvedIdentifiable extends EObject {
+
+	/**
+	 * This is the {@link org.eclipse.stem.core.scenario.Scenario} that
+	 * contains the {@link org.eclipse.stem.core.model.Model} that is
+	 * creating the canonical {@link Graph}.
+	 * 
+	 * TODO shouldn't the return value be Scenario?
+	 * 
+	 * @model containment="false"
+	 */
+	Identifiable getScenario();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getScenario <em>Scenario</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Scenario</em>' reference.
+	 * @see #getScenario()
+	 * @generated
+	 */
+	void setScenario(Identifiable value);
+
+	/**
+	 * This is the {@link Model} that was creating the canonical {@link Graph}
+	 * when the unresolved {@link URI} was encountered.
+	 * 
+	 * @model containment="false"
+	 */
+	Identifiable getModel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getModel <em>Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Model</em>' reference.
+	 * @see #getModel()
+	 * @generated
+	 */
+	void setModel(Identifiable value);
+
+	/**
+	 * This is the {@link Graph} that contains the {@link Edge} or {@link Label}
+	 * that has the unresolved {@link URI}.
+	 * 
+	 * TODO BUG this value is always null.
+	 * 
+	 * @model containment="false"
+	 */
+	Identifiable getGraph();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getGraph <em>Graph</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Graph</em>' reference.
+	 * @see #getGraph()
+	 * @generated
+	 */
+	void setGraph(Identifiable value);
+
+	/**
+	 * @return the {@link Edge} or {@link Label} that has the unresolved target
+	 *         {@link URI}.
+	 * @model containment="false"
+	 */
+	Identifiable getIdentifiable();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getIdentifiable <em>Identifiable</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Identifiable</em>' reference.
+	 * @see #getIdentifiable()
+	 * @generated
+	 */
+	void setIdentifiable(Identifiable value);
+
+	/**
+	 * @return the unresolved {@link URI}.
+	 * 
+	 * @model
+	 */
+	URI getUnresolvedURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getUnresolvedURI <em>Unresolved URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Unresolved URI</em>' attribute.
+	 * @see #getUnresolvedURI()
+	 * @generated
+	 */
+	void setUnresolvedURI(URI value);
+
+	/**
+	 * @return either "NODE A" or "NODE B" for an {@link Edge}, or "NODE" for a
+	 *         {@link Label}.
+	 * @model
+	 */
+	String getFieldName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable#getFieldName <em>Field Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Field Name</em>' attribute.
+	 * @see #getFieldName()
+	 * @generated
+	 */
+	void setFieldName(String value);
+
+} // UnresolvedIdentifiable
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicEdgeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicEdgeLabelImpl.java
new file mode 100644
index 0000000..7fcce4e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicEdgeLabelImpl.java
@@ -0,0 +1,261 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+//import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+//import org.eclipse.stem.core.graph.LabelValue;
+//import org.eclipse.stem.core.graph.Node;
+
+//import org.eclipse.stem.core.model.Decorator;
+//import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Dynamic Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl#getEdge <em>Edge</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DynamicEdgeLabelImpl extends DynamicLabelImpl implements DynamicEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DynamicEdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.DYNAMIC_EDGE_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return getEdge();
+	} // getIdentifiable
+
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#setIdentifiable(org.eclipse.stem.core.common.Identifiable)
+	 */
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		setEdge((Edge)newIdentifiable);
+	} // setIdentifiable
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge getEdge() {
+		if (eContainerFeatureID() != GraphPackage.DYNAMIC_EDGE_LABEL__EDGE) return null;
+		return (Edge)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEdge(Edge newEdge, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newEdge, GraphPackage.DYNAMIC_EDGE_LABEL__EDGE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEdge(Edge newEdge) {
+		if (newEdge != eInternalContainer() || (eContainerFeatureID() != GraphPackage.DYNAMIC_EDGE_LABEL__EDGE && newEdge != null)) {
+			if (EcoreUtil.isAncestor(this, newEdge))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newEdge != null)
+				msgs = ((InternalEObject)newEdge).eInverseAdd(this, GraphPackage.EDGE__LABEL, Edge.class, msgs);
+			msgs = basicSetEdge(newEdge, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_EDGE_LABEL__EDGE, newEdge, newEdge));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetEdge((Edge)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				return basicSetEdge(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				return eInternalContainer().eInverseRemove(this, GraphPackage.EDGE__LABEL, Edge.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				return getEdge();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				setEdge((Edge)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				setEdge((Edge)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE:
+				return getEdge() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == EdgeLabel.class) {
+			switch (derivedFeatureID) {
+				case GraphPackage.DYNAMIC_EDGE_LABEL__EDGE: return GraphPackage.EDGE_LABEL__EDGE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == EdgeLabel.class) {
+			switch (baseFeatureID) {
+				case GraphPackage.EDGE_LABEL__EDGE: return GraphPackage.DYNAMIC_EDGE_LABEL__EDGE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} //DynamicEdgeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicLabelImpl.java
new file mode 100644
index 0000000..77eddb8
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicLabelImpl.java
@@ -0,0 +1,404 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.ResettableAdapter;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Dynamic Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.DynamicLabelImpl#isNextValueValid <em>Next Value Valid</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.DynamicLabelImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.DynamicLabelImpl#getDecorator <em>Decorator</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DynamicLabelImpl extends LabelImpl implements DynamicLabel {
+	/**
+	 * The default value of the '{@link #isNextValueValid() <em>Next Value Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isNextValueValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean NEXT_VALUE_VALID_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isNextValueValid() <em>Next Value Valid</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isNextValueValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean nextValueValid = NEXT_VALUE_VALID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected LabelValue nextValue;
+
+	/**
+	 * The cached value of the '{@link #getDecorator() <em>Decorator</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDecorator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Decorator decorator;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected DynamicLabelImpl() {
+		super();
+		setTypeURI(DynamicLabel.URI_TYPE_DYNAMIC_LABEL);
+	} // DynamicLabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.DYNAMIC_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelValue getNextValue() {
+		return nextValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetNextValue(LabelValue newNextValue, NotificationChain msgs) {
+		LabelValue oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_LABEL__NEXT_VALUE, oldNextValue, newNextValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(LabelValue newNextValue) {
+		if (newNextValue != nextValue) {
+			NotificationChain msgs = null;
+			if (nextValue != null)
+				msgs = ((InternalEObject)nextValue).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.DYNAMIC_LABEL__NEXT_VALUE, null, msgs);
+			if (newNextValue != null)
+				msgs = ((InternalEObject)newNextValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.DYNAMIC_LABEL__NEXT_VALUE, null, msgs);
+			msgs = basicSetNextValue(newNextValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_LABEL__NEXT_VALUE, newNextValue, newNextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator getDecorator() {
+		if (decorator != null && decorator.eIsProxy()) {
+			InternalEObject oldDecorator = (InternalEObject)decorator;
+			decorator = (Decorator)eResolveProxy(oldDecorator);
+			if (decorator != oldDecorator) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.DYNAMIC_LABEL__DECORATOR, oldDecorator, decorator));
+			}
+		}
+		return decorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator basicGetDecorator() {
+		return decorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDecorator(Decorator newDecorator, NotificationChain msgs) {
+		Decorator oldDecorator = decorator;
+		decorator = newDecorator;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_LABEL__DECORATOR, oldDecorator, newDecorator);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDecorator(Decorator newDecorator) {
+		if (newDecorator != decorator) {
+			NotificationChain msgs = null;
+			if (decorator != null)
+				msgs = ((InternalEObject)decorator).eInverseRemove(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+			if (newDecorator != null)
+				msgs = ((InternalEObject)newDecorator).eInverseAdd(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+			msgs = basicSetDecorator(newDecorator, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_LABEL__DECORATOR, newDecorator, newDecorator));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isNextValueValid() {
+		return nextValueValid;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValueValid(boolean newNextValueValid) {
+		boolean oldNextValueValid = nextValueValid;
+		nextValueValid = newNextValueValid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID, oldNextValueValid, nextValueValid));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> Set the next value valid flag to false. <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void reset() {
+		getCurrentValue().reset();
+		getNextValue().reset();
+		setNextValueValid(false);
+		// Reset any adapters that are attached to this instance
+		for (Adapter adapter : eAdapters()) {
+			// Is it resettable?
+			if (adapter instanceof ResettableAdapter) {
+				// Yes
+				final ResettableAdapter resettableAdapter = (ResettableAdapter) adapter;
+				resettableAdapter.reset();
+			} // if ResettableAdapter
+		} // for each Adapter
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * Exchange the current value for the next value.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void switchToNextValue() {
+		assert isNextValueValid();
+
+		final LabelValue temp = getCurrentValue();
+		setCurrentValue(getNextValue());
+		setNextValue(temp);
+		setNextValueValid(false);
+	} // switchToNextValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				if (decorator != null)
+					msgs = ((InternalEObject)decorator).eInverseRemove(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+				return basicSetDecorator((Decorator)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				return basicSetNextValue(null, msgs);
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				return basicSetDecorator(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID:
+				return isNextValueValid();
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				return getNextValue();
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				if (resolve) return getDecorator();
+				return basicGetDecorator();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID:
+				setNextValueValid((Boolean)newValue);
+				return;
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				setNextValue((LabelValue)newValue);
+				return;
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				setDecorator((Decorator)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID:
+				setNextValueValid(NEXT_VALUE_VALID_EDEFAULT);
+				return;
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				setNextValue((LabelValue)null);
+				return;
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				setDecorator((Decorator)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID:
+				return nextValueValid != NEXT_VALUE_VALID_EDEFAULT;
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				return nextValue != null;
+			case GraphPackage.DYNAMIC_LABEL__DECORATOR:
+				return decorator != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+
+		result.append(" [");
+		result.append(nextValue.toString());
+		result.append(" (");
+		result.append(nextValueValid ? "valid" : "invalid");
+		result.append(")");
+		result.append("]");
+
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.graph.impl.LabelImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		retValue = retValue && nextValue != null;
+		assert retValue;
+
+		retValue = retValue && (isNextValueValid() ? nextValue.sane() : true);
+		assert retValue;
+
+		retValue = retValue && getDecorator() != null;
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} // DynamicLabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicNodeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicNodeLabelImpl.java
new file mode 100644
index 0000000..5b402e0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/DynamicNodeLabelImpl.java
@@ -0,0 +1,284 @@
+package org.eclipse.stem.core.graph.impl;
+ 
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Dynamic Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl#getNode <em>Node</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DynamicNodeLabelImpl extends DynamicLabelImpl implements
+		DynamicNodeLabel {
+	/**
+	 * The cached value of the '{@link #getNode() <em>Node</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNode()
+	 * @generated
+	 * @ordered
+	 */
+	protected Node node;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DynamicNodeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.DYNAMIC_NODE_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return getNode();
+	} // getIdentifiable
+
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#setIdentifiable(org.eclipse.stem.core.common.Identifiable)
+	 */
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		setNode((Node)newIdentifiable);
+	} // setIdentifiable
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getNode() {
+		if (node != null && node.eIsProxy()) {
+			InternalEObject oldNode = (InternalEObject)node;
+			node = (Node)eResolveProxy(oldNode);
+			if (node != oldNode) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.DYNAMIC_NODE_LABEL__NODE, oldNode, node));
+			}
+		}
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node basicGetNode() {
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetNode(Node newNode, NotificationChain msgs) {
+		Node oldNode = node;
+		node = newNode;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_NODE_LABEL__NODE, oldNode, newNode);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNode(Node newNode) {
+		if (newNode != node) {
+			NotificationChain msgs = null;
+			if (node != null)
+				msgs = ((InternalEObject)node).eInverseRemove(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+			if (newNode != null)
+				msgs = ((InternalEObject)newNode).eInverseAdd(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+			msgs = basicSetNode(newNode, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.DYNAMIC_NODE_LABEL__NODE, newNode, newNode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				if (node != null)
+					msgs = ((InternalEObject)node).eInverseRemove(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+				return basicSetNode((Node)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				return basicSetNode(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * @see org.eclipse.stem.graph.impl.DynamicLabelImpl#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder(super.toString());
+
+		sb.append(" Node:");
+		sb.append(node == null ? "null" : node.toString());
+		return sb.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.graph.impl.DynamicLabelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && getNode() != null ? getURIOfIdentifiableToBeLabeled()
+				.equals(getNode().getURI())
+				: true;
+		assert retValue;
+			
+		retValue = retValue && getNode() == getIdentifiable();
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				if (resolve) return getNode();
+				return basicGetNode();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				setNode((Node)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				setNode((Node)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.DYNAMIC_NODE_LABEL__NODE:
+				return node != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == NodeLabel.class) {
+			switch (derivedFeatureID) {
+				case GraphPackage.DYNAMIC_NODE_LABEL__NODE: return GraphPackage.NODE_LABEL__NODE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == NodeLabel.class) {
+			switch (baseFeatureID) {
+				case GraphPackage.NODE_LABEL__NODE: return GraphPackage.DYNAMIC_NODE_LABEL__NODE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+} // DynamicNodeLabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeImpl.java
new file mode 100644
index 0000000..9e5d0d7
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeImpl.java
@@ -0,0 +1,730 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+//import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#getA <em>A</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#getNodeAURI <em>Node AURI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#getB <em>B</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#getNodeBURI <em>Node BURI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#getLabel <em>Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeImpl#isDirected <em>Directed</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EdgeImpl extends IdentifiableImpl implements Edge {
+	
+	/**
+	 * This is used to generate unique URI's for each Edge generated
+	 */
+	static int edgeCounter = 0;
+	
+	/**
+	 * The cached value of the '{@link #getA() <em>A</em>}' reference. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getA()
+	 * @generated
+	 * @ordered
+	 */
+	protected Node a;
+
+	/**
+	 * The default value of the '{@link #getNodeAURI() <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeAURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI NODE_AURI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNodeAURI() <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeAURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI nodeAURI = NODE_AURI_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getB() <em>B</em>}' reference. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getB()
+	 * @generated
+	 * @ordered
+	 */
+	protected Node b;
+
+	/**
+	 * The default value of the '{@link #getNodeBURI() <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeBURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI NODE_BURI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNodeBURI() <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeBURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI nodeBURI = NODE_BURI_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLabel() <em>Label</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected EdgeLabel label;
+
+	/**
+	 * The default value of the '{@link #isDirected() <em>Directed</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isDirected()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean DIRECTED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isDirected() <em>Directed</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isDirected()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean directed = DIRECTED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected EdgeImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_EDGE_SEGMENT + "/"
+				+ Integer.toString(edgeCounter++)));
+		setTypeURI(STEMURI.EDGE_TYPE_URI);
+	} // EdgeImpl
+
+	/**
+	 * Create an undirected edge between two nodes
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @return an edge between nodeA and nodeB, if directed then from nodeA to
+	 *         nodeB
+	 */
+	public static Edge createEdge(final Node nodeA, final Node nodeB) {
+		return createEdge(nodeA, nodeB, false, null);
+	} // createEdge
+
+	/**
+	 * Create an undirected edge between two nodes
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param edgeURI
+	 *            if non-null then the URI to use for the edge, if null then the
+	 *            default is used.
+	 * 
+	 * @return an edge between nodeA and nodeB, if directed then from nodeA to
+	 *         nodeB
+	 */
+	public static Edge createEdge(final Node nodeA, final Node nodeB,
+			final URI edgeURI) {
+		return createEdge(nodeA, nodeB, false, edgeURI);
+	} // createEdge
+
+	/**
+	 * Create an edge between the two nodes
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @return an edge between nodeA and nodeB, if directed then from nodeA to
+	 *         nodeB
+	 */
+	public static Edge createEdge(final Node nodeA, final Node nodeB,
+			final boolean directed) {
+		return createEdge(nodeA, nodeB, directed, null);
+	} // createEdge
+
+	/**
+	 * Create an edge between the two nodes
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param edgeURI
+	 *            if non-null then the URI to use for the edge, if null then the
+	 *            default is used.
+	 * 
+	 * @return an edge between nodeA and nodeB, if directed then from nodeA to
+	 *         nodeB
+	 */
+	public static Edge createEdge(final Node nodeA, final Node nodeB,
+			final boolean directed, final URI edgeURI) {
+		final Edge retValue = createEdge(nodeA.getURI(), nodeB.getURI(),
+				directed, edgeURI);
+		retValue.setA(nodeA);
+		retValue.setB(nodeB);
+
+		nodeA.getEdges().add(retValue);
+		nodeB.getEdges().add(retValue);
+
+		return retValue;
+	} // createEdge
+
+	/**
+	 * Create an undirected edge with two node URI's
+	 * 
+	 * @param nodeAURI
+	 *            the first node's URI
+	 * @param nodeBURI
+	 *            the second node's URI
+	 * 
+	 * @return an edge with two URI's, if directed then from nodeAURI to
+	 *         nodeBURI
+	 */
+	public static Edge createEdge(final URI nodeAURI, final URI nodeBURI) {
+		return createEdge(nodeAURI, nodeBURI, false, null);
+	} // createEdge
+
+	/**
+	 * Create an undirected edge with two node URI's
+	 * 
+	 * @param nodeAURI
+	 *            the first node's URI
+	 * @param nodeBURI
+	 *            the second node's URI
+	 * @param edgeURI
+	 *            if non-null then the URI to use for the edge, if null then the
+	 *            default is used.
+	 * 
+	 * @return an edge with two URI's, if directed then from nodeAURI to
+	 *         nodeBURI
+	 */
+	public static Edge createEdge(final URI nodeAURI, final URI nodeBURI,
+			final URI edgeURI) {
+		return createEdge(nodeAURI, nodeBURI, false, edgeURI);
+	} // createEdge
+
+	/**
+	 * Create an edge with two node URI's
+	 * 
+	 * @param nodeAURI
+	 *            the first node's URI
+	 * @param nodeBURI
+	 *            the second node's URI
+	 * @param directed
+	 *            true if the edge is directed from nodeAURI to nodeBURI
+	 * 
+	 * @return an edge with two URI's, if directed then from nodeAURI to
+	 *         nodeBURI
+	 */
+	public static Edge createEdge(final URI nodeAURI, final URI nodeBURI,
+			final boolean directed) {
+		return createEdge(nodeAURI, nodeBURI, directed, null);
+	} // createEdge
+
+	/**
+	 * Create an edge with two node URI's
+	 * 
+	 * @param nodeAURI
+	 *            the first node's URI
+	 * @param nodeBURI
+	 *            the second node's URI
+	 * @param directed
+	 *            true if the edge is directed from nodeAURI to nodeBURI
+	 * 
+	 * @param edgeURI
+	 *            if non-null then the URI to use for the edge, if null then the
+	 *            default is used.
+	 * 
+	 * @return an edge with two URI's, if directed then from nodeAURI to
+	 *         nodeBURI
+	 */
+	public static Edge createEdge(final URI nodeAURI, final URI nodeBURI,
+			final boolean directed, final URI edgeURI) {
+		final Edge retValue = GraphFactory.eINSTANCE.createEdge();
+		retValue.setNodeAURI(nodeAURI);
+		retValue.setNodeBURI(nodeBURI);
+		retValue.setDirected(directed);
+		// Edge URI specified?
+		if (edgeURI != null) {
+			// Yes
+			retValue.setURI(edgeURI);
+		}
+		return retValue;
+	} // createEdge
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.EDGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getA() {
+		if (a != null && a.eIsProxy()) {
+			InternalEObject oldA = (InternalEObject)a;
+			a = (Node)eResolveProxy(oldA);
+			if (a != oldA) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.EDGE__A, oldA, a));
+			}
+		}
+		return a;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node basicGetA() {
+		return a;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setA(Node newA) {
+		Node oldA = a;
+		a = newA;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__A, oldA, a));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getNodeAURI() {
+		return nodeAURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNodeAURI(URI newNodeAURI) {
+		URI oldNodeAURI = nodeAURI;
+		nodeAURI = newNodeAURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__NODE_AURI, oldNodeAURI, nodeAURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getB() {
+		if (b != null && b.eIsProxy()) {
+			InternalEObject oldB = (InternalEObject)b;
+			b = (Node)eResolveProxy(oldB);
+			if (b != oldB) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.EDGE__B, oldB, b));
+			}
+		}
+		return b;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node basicGetB() {
+		return b;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setB(Node newB) {
+		Node oldB = b;
+		b = newB;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__B, oldB, b));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getNodeBURI() {
+		return nodeBURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNodeBURI(URI newNodeBURI) {
+		URI oldNodeBURI = nodeBURI;
+		nodeBURI = newNodeBURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__NODE_BURI, oldNodeBURI, nodeBURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeLabel getLabel() {
+		return label;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLabel(EdgeLabel newLabel, NotificationChain msgs) {
+		EdgeLabel oldLabel = label;
+		label = newLabel;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__LABEL, oldLabel, newLabel);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLabel(EdgeLabel newLabel) {
+		if (newLabel != label) {
+			NotificationChain msgs = null;
+			if (label != null)
+				msgs = ((InternalEObject)label).eInverseRemove(this, GraphPackage.EDGE_LABEL__EDGE, EdgeLabel.class, msgs);
+			if (newLabel != null)
+				msgs = ((InternalEObject)newLabel).eInverseAdd(this, GraphPackage.EDGE_LABEL__EDGE, EdgeLabel.class, msgs);
+			msgs = basicSetLabel(newLabel, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__LABEL, newLabel, newLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDirected() {
+		return directed;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDirected(boolean newDirected) {
+		boolean oldDirected = directed;
+		directed = newDirected;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE__DIRECTED, oldDirected, directed));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * Given one node of an edge, return the other.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Node getOtherNode(Node node) {
+		assert getA().equals(node) || getB().equals(node);
+		return getA().equals(node) ? getB() : getA();
+	} // getOtherNode
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <code>true</code> if the node is B and the edge is directed.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean isDirectedAt(Node node) {
+		return isDirected() && ( b != null && b.equals(node) 
+				|| b== null && nodeBURI.equals(node.getURI()));
+	} // isDirectedAt
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.EDGE__LABEL:
+				if (label != null)
+					msgs = ((InternalEObject)label).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.EDGE__LABEL, null, msgs);
+				return basicSetLabel((EdgeLabel)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.EDGE__LABEL:
+				return basicSetLabel(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.EDGE__A:
+				if (resolve) return getA();
+				return basicGetA();
+			case GraphPackage.EDGE__NODE_AURI:
+				return getNodeAURI();
+			case GraphPackage.EDGE__B:
+				if (resolve) return getB();
+				return basicGetB();
+			case GraphPackage.EDGE__NODE_BURI:
+				return getNodeBURI();
+			case GraphPackage.EDGE__LABEL:
+				return getLabel();
+			case GraphPackage.EDGE__DIRECTED:
+				return isDirected();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.EDGE__A:
+				setA((Node)newValue);
+				return;
+			case GraphPackage.EDGE__NODE_AURI:
+				setNodeAURI((URI)newValue);
+				return;
+			case GraphPackage.EDGE__B:
+				setB((Node)newValue);
+				return;
+			case GraphPackage.EDGE__NODE_BURI:
+				setNodeBURI((URI)newValue);
+				return;
+			case GraphPackage.EDGE__LABEL:
+				setLabel((EdgeLabel)newValue);
+				return;
+			case GraphPackage.EDGE__DIRECTED:
+				setDirected((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.EDGE__A:
+				setA((Node)null);
+				return;
+			case GraphPackage.EDGE__NODE_AURI:
+				setNodeAURI(NODE_AURI_EDEFAULT);
+				return;
+			case GraphPackage.EDGE__B:
+				setB((Node)null);
+				return;
+			case GraphPackage.EDGE__NODE_BURI:
+				setNodeBURI(NODE_BURI_EDEFAULT);
+				return;
+			case GraphPackage.EDGE__LABEL:
+				setLabel((EdgeLabel)null);
+				return;
+			case GraphPackage.EDGE__DIRECTED:
+				setDirected(DIRECTED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.EDGE__A:
+				return a != null;
+			case GraphPackage.EDGE__NODE_AURI:
+				return NODE_AURI_EDEFAULT == null ? nodeAURI != null : !NODE_AURI_EDEFAULT.equals(nodeAURI);
+			case GraphPackage.EDGE__B:
+				return b != null;
+			case GraphPackage.EDGE__NODE_BURI:
+				return NODE_BURI_EDEFAULT == null ? nodeBURI != null : !NODE_BURI_EDEFAULT.equals(nodeBURI);
+			case GraphPackage.EDGE__LABEL:
+				return label != null;
+			case GraphPackage.EDGE__DIRECTED:
+				return directed != DIRECTED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer("");
+
+		result.append(a != null ? a :  ( nodeAURI != null ? nodeAURI.toString() : "null"));
+
+		result.append(directed ? " -> " : " -- ");
+
+		result.append(b != null ? b : ( nodeBURI != null ? nodeBURI.toString() : "null"));
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		
+		boolean retValue = super.sane();
+
+		retValue = retValue && nodeAURI != null;
+		assert retValue;
+
+		retValue = retValue && nodeBURI != null;
+		assert retValue;
+
+		retValue = retValue && label != null;
+		assert retValue;
+
+		// A node?
+		if (a != null) {
+			// Yes
+			// If this edge links to a node, then the node should have this edge
+			// as one of its edges
+			retValue = retValue && a.getEdges().contains(this);
+			assert retValue;
+
+			// This edge should be hooked up to the correct node too.
+			retValue = retValue && nodeAURI.equals(a.getURI());
+			assert retValue;
+		} // if A Node
+
+		// B node?
+		if (b != null) {
+			// Yes
+			// If this edge links to a node, then the node should have this edge
+			// as one of its edges
+			retValue = retValue && b.getEdges().contains(this);
+			assert retValue;
+
+			// This edge should be hooked up to the correct node too.
+			retValue = retValue && nodeBURI.equals(b.getURI());
+			assert retValue;
+		}
+
+		// Of course if one node is set, so should the other
+		retValue = retValue
+				&& ((a == null && b == null) || (a != null && b != null));
+		assert retValue;
+
+		// The label should reference this edge with its URI
+		retValue = retValue && label.getURIOfIdentifiableToBeLabeled() != null;
+		assert retValue;
+		retValue = retValue
+				&& label.getURIOfIdentifiableToBeLabeled().equals(getURI());
+		assert retValue;
+
+		// And the label should be sane
+		retValue = retValue && label.sane();
+		assert retValue;
+
+		return retValue;
+	} // sane
+
+} // EdgeImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeLabelImpl.java
new file mode 100644
index 0000000..4471e45
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/EdgeLabelImpl.java
@@ -0,0 +1,216 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.EdgeLabelImpl#getEdge <em>Edge</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class EdgeLabelImpl extends LabelImpl implements EdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.EDGE_LABEL;
+	}
+
+	
+	@Override
+	public Identifiable getIdentifiable() {
+		return getEdge();
+	}
+
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		setEdge((Edge)newIdentifiable);		
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge getEdge() {
+		if (eContainerFeatureID() != GraphPackage.EDGE_LABEL__EDGE) return null;
+		return (Edge)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEdge(Edge newEdge, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newEdge, GraphPackage.EDGE_LABEL__EDGE, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEdge(Edge newEdge) {
+		if (newEdge != eInternalContainer() || (eContainerFeatureID() != GraphPackage.EDGE_LABEL__EDGE && newEdge != null)) {
+			if (EcoreUtil.isAncestor(this, newEdge))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newEdge != null)
+				msgs = ((InternalEObject)newEdge).eInverseAdd(this, GraphPackage.EDGE__LABEL, Edge.class, msgs);
+			msgs = basicSetEdge(newEdge, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.EDGE_LABEL__EDGE, newEdge, newEdge));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetEdge((Edge)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				return basicSetEdge(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				return eInternalContainer().eInverseRemove(this, GraphPackage.EDGE__LABEL, Edge.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				return getEdge();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				setEdge((Edge)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				setEdge((Edge)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.EDGE_LABEL__EDGE:
+				return getEdge() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //EdgeLabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphFactoryImpl.java
new file mode 100644
index 0000000..b60aa07
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphFactoryImpl.java
@@ -0,0 +1,268 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphFactoryImpl extends EFactoryImpl implements GraphFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static GraphFactory init() {
+		try {
+			GraphFactory theGraphFactory = (GraphFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/graph.ecore"); //$NON-NLS-1$ 
+			if (theGraphFactory != null) {
+				return theGraphFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new GraphFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case GraphPackage.EDGE: return createEdge();
+			case GraphPackage.GRAPH: return createGraph();
+			case GraphPackage.NODE: return createNode();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE: return createUnresolvedIdentifiable();
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY: return (EObject)createURIToIdentifiableMapEntry();
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY: return (EObject)createURIToEdgeMapEntry();
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY: return (EObject)createURIToNodeMapEntry();
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY: return (EObject)createURIToLabelMapEntry();
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY: return (EObject)createURIToNodeLabelMapEntry();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case GraphPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			case GraphPackage.ILLEGAL_ARGUMENT_EXCEPTION:
+				return createIllegalArgumentExceptionFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case GraphPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			case GraphPackage.ILLEGAL_ARGUMENT_EXCEPTION:
+				return convertIllegalArgumentExceptionToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge createEdge() {
+		EdgeImpl edge = new EdgeImpl();
+		return edge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Graph createGraph() {
+		GraphImpl graph = new GraphImpl();
+		return graph;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node createNode() {
+		NodeImpl node = new NodeImpl();
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnresolvedIdentifiable createUnresolvedIdentifiable() {
+		UnresolvedIdentifiableImpl unresolvedIdentifiable = new UnresolvedIdentifiableImpl();
+		return unresolvedIdentifiable;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Map.Entry<URI, Identifiable> createURIToIdentifiableMapEntry() {
+		URIToIdentifiableMapEntryImpl uriToIdentifiableMapEntry = new URIToIdentifiableMapEntryImpl();
+		return uriToIdentifiableMapEntry;
+	}
+
+		/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Map.Entry<URI, Edge> createURIToEdgeMapEntry() {
+		URIToEdgeMapEntryImpl uriToEdgeMapEntry = new URIToEdgeMapEntryImpl();
+		return uriToEdgeMapEntry;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Map.Entry<URI, Node> createURIToNodeMapEntry() {
+		URIToNodeMapEntryImpl uriToNodeMapEntry = new URIToNodeMapEntryImpl();
+		return uriToNodeMapEntry;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Map.Entry<URI, Label> createURIToLabelMapEntry() {
+		URIToLabelMapEntryImpl uriToLabelMapEntry = new URIToLabelMapEntryImpl();
+		return uriToLabelMapEntry;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Map.Entry<URI, NodeLabel> createURIToNodeLabelMapEntry() {
+		URIToNodeLabelMapEntryImpl uriToNodeLabelMapEntry = new URIToNodeLabelMapEntryImpl();
+		return uriToNodeLabelMapEntry;
+	}
+
+		/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	} // createURIFromString
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	} // convertURIToString
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IllegalArgumentException createIllegalArgumentExceptionFromString(EDataType eDataType, String initialValue) {
+		return (IllegalArgumentException)super.createFromString(eDataType, initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertIllegalArgumentExceptionToString(EDataType eDataType, Object instanceValue) {
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphPackage getGraphPackage() {
+		return (GraphPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static GraphPackage getPackage() {
+		return GraphPackage.eINSTANCE;
+	}
+
+} //GraphFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphImpl.java
new file mode 100644
index 0000000..748dded
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphImpl.java
@@ -0,0 +1,955 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.Comparator;
+
+import org.eclipse.emf.common.notify.Notification;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreEMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+//import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+import org.eclipse.stem.core.model.Decorator;
+
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Graph</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getEdges <em>Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNodes <em>Nodes</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getGraphLabels <em>Graph Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNodeLabels <em>Node Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getDynamicLabels <em>Dynamic Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNumEdges <em>Num Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNumNodes <em>Num Nodes</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNumGraphLabels <em>Num Graph Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNumNodeLabels <em>Num Node Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getNumDynamicLabels <em>Num Dynamic Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getUnresolvedIdentifiables <em>Unresolved Identifiables</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getDecorators <em>Decorators</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.GraphImpl#getTime <em>Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class GraphImpl extends IdentifiableImpl implements Graph {
+	
+	/**
+	 * This is used to generate unique URI's for each Graph generated
+	 */
+	static int graphCounter = 0;
+	
+	/**
+	 * The cached value of the '{@link #getEdges() <em>Edges</em>}' map. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EMap<URI, Edge> edges;
+
+	/**
+	 * The cached value of the '{@link #getNodes() <em>Nodes</em>}' map. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getNodes()
+	 * @generated
+	 * @ordered
+	 */
+	protected EMap<URI, Node> nodes;
+
+	/**
+	 * The cached value of the '{@link #getGraphLabels() <em>Graph Labels</em>}' map.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getGraphLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EMap<URI, Label> graphLabels;
+
+	/**
+	 * The cached value of the '{@link #getNodeLabels() <em>Node Labels</em>}' map.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EMap<URI, NodeLabel> nodeLabels;
+
+	/**
+	 * The cached value of the '{@link #getDynamicLabels() <em>Dynamic Labels</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDynamicLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<DynamicLabel> dynamicLabels;
+
+	/**
+	 * The default value of the '{@link #getNumEdges() <em>Num Edges</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNumEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_EDGES_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getNumNodes() <em>Num Nodes</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNumNodes()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_NODES_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getNumGraphLabels() <em>Num Graph Labels</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNumGraphLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_GRAPH_LABELS_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getNumNodeLabels() <em>Num Node Labels</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNumNodeLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_NODE_LABELS_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getNumDynamicLabels() <em>Num Dynamic Labels</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNumDynamicLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUM_DYNAMIC_LABELS_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getUnresolvedIdentifiables() <em>Unresolved Identifiables</em>}' containment reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getUnresolvedIdentifiables()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<UnresolvedIdentifiable> unresolvedIdentifiables;
+
+	/**
+	 * The cached value of the '{@link #getDecorators() <em>Decorators</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDecorators()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Decorator> decorators;
+
+	/**
+	 * The cached value of the '{@link #getTime() <em>Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime time;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected GraphImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_GRAPH_SEGMENT + "/"
+				+ Integer.toString(graphCounter++)));
+		setTypeURI(STEMURI.GRAPH_TYPE_URI);
+	} // GraphImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.GRAPH;
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#setURI(org.eclipse.emf.common.util.URI)
+	 * @generated NOT
+	 */
+	@Override
+	public void setURI(URI newURI) {
+		super.setURI(newURI);
+		// Now go through all the graph labels and update then to reference the
+		// new URI
+		for (final Iterator<Label> labelIter = getGraphLabels().values().iterator(); labelIter
+				.hasNext();) {
+			final Label label = labelIter.next();
+			label.setURIOfIdentifiableToBeLabeled(newURI);
+		} // for
+	} // setURI
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EMap<URI, Edge> getEdges() {
+		if (edges == null) {
+			edges = new EcoreEMap<URI,Edge>(GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY, URIToEdgeMapEntryImpl.class, this, GraphPackage.GRAPH__EDGES);
+		}
+		return edges;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EMap<URI, Node> getNodes() {
+		if (nodes == null) {
+			nodes = new EcoreEMap<URI,Node>(GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY, URIToNodeMapEntryImpl.class, this, GraphPackage.GRAPH__NODES);
+		}
+		return nodes;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<DynamicLabel> getDynamicLabels() {
+		if (dynamicLabels == null) {
+			dynamicLabels = new EObjectResolvingEList<DynamicLabel>(DynamicLabel.class, this, GraphPackage.GRAPH__DYNAMIC_LABELS);
+		}
+		return dynamicLabels;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EMap<URI, Label> getGraphLabels() {
+		if (graphLabels == null) {
+			graphLabels = new EcoreEMap<URI,Label>(GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY, URIToLabelMapEntryImpl.class, this, GraphPackage.GRAPH__GRAPH_LABELS);
+		}
+		return graphLabels;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<UnresolvedIdentifiable> getUnresolvedIdentifiables() {
+		if (unresolvedIdentifiables == null) {
+			unresolvedIdentifiables = new EObjectContainmentEList<UnresolvedIdentifiable>(UnresolvedIdentifiable.class, this, GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES);
+		}
+		return unresolvedIdentifiables;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Decorator> getDecorators() {
+		if (decorators == null) {
+			decorators = new EObjectContainmentWithInverseEList<Decorator>(Decorator.class, this, GraphPackage.GRAPH__DECORATORS, ModelPackage.DECORATOR__GRAPH);
+		}
+		return decorators;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getTime() {
+		return time;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTime(STEMTime newTime, NotificationChain msgs) {
+		STEMTime oldTime = time;
+		time = newTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.GRAPH__TIME, oldTime, newTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTime(STEMTime newTime) {
+		if (newTime != time) {
+			NotificationChain msgs = null;
+			if (time != null)
+				msgs = ((InternalEObject)time).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.GRAPH__TIME, null, msgs);
+			if (newTime != null)
+				msgs = ((InternalEObject)newTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.GRAPH__TIME, null, msgs);
+			msgs = basicSetTime(newTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.GRAPH__TIME, newTime, newTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * Return all of the Node Labels in the graph that have a particular type
+	 * URI.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public EList<NodeLabel> getNodeLabelsByTypeURI(URI typeURI) {
+		// We could perform this function in a number of ways. We could, for
+		// instance, create a Map between the type URI's and the instances,
+		// however if we do that then we do two things: 1) make management of
+		// the collection of instances more complicated (we have to add them to
+		// two maps), and, 2) we "bloat" the serialization as we now basically
+		// double the size of the serialized collection(s).
+		// Given that this method is called infrequently it's probably better to
+		// just do a "dumb" sequential scan of the instances and match them.
+		// We can always change out minds later.
+
+		final EList<NodeLabel> retValue = new BasicEList<NodeLabel>();
+
+		for (final Iterator<NodeLabel> nodeLabelIter = getNodeLabels().values().iterator(); nodeLabelIter
+				.hasNext();) {
+			final NodeLabel nodeLabel = nodeLabelIter.next();
+			// Does this one the type we're looking for?
+			if (nodeLabel.getTypeURI().equals(typeURI)) {
+				// Yes
+				retValue.add(nodeLabel);
+			}
+		} // for each nodeLabel
+
+		// Stefan 7/23/09. If need to guarantee the order of objects this list
+		// being the same for each call since the list is used to partition
+		// the work up among multiple worker threads. Luckily this call
+		// is only made once for every decorator in the beginning of a simulation
+		// so sorting is not expensive.
+		
+		ECollections.sort(retValue, new Comparator<NodeLabel>() {
+
+			public int compare(NodeLabel arg0, NodeLabel arg1) {
+				return arg0.getURI().toString().compareTo(arg1.getURI().toString());
+			}
+			
+		});
+		
+		return retValue;
+	} // getNodeLabelsByTypeURI
+
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EMap<URI, NodeLabel> getNodeLabels() {
+		if (nodeLabels == null) {
+			nodeLabels = new EcoreEMap<URI,NodeLabel>(GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY, URIToNodeLabelMapEntryImpl.class, this, GraphPackage.GRAPH__NODE_LABELS);
+		}
+		return nodeLabels;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getNumEdges() {
+		return edges == null ? 0 : getEdges().size();
+	} // getNumEdges
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getNumNodes() {
+		return nodes == null ? 0 : getNodes().size();
+	} // getNumNodes
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getNumGraphLabels() {
+		return graphLabels == null ? 0 : getGraphLabels().size();
+	} // getNumGraphLabels
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getNumNodeLabels() {
+		return nodeLabels == null ? 0 : getNodeLabels().size();
+	} // getNumNodeLabels
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getNumDynamicLabels() {
+		return dynamicLabels == null ? 0 : getDynamicLabels().size();
+	} // getNumDynamicLabels
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This method adds the {@link Edge}s, {@link Node}s, {@link Label}s and {@link Decorator} 
+	 * from another graph to  the collections maintained by this graph. 
+	 * <p>
+	 * It does not attempt to resolve
+	 * connections between Edges and the Nodes they reference.
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void addGraph(final Graph graph, IdentifiableFilter filter) {
+		IdentifiableFilterImpl _filter = (IdentifiableFilterImpl)filter;
+		EMap<URI, Edge>edges = graph.getEdges();
+		EMap<URI, Node>nodes = graph.getNodes();
+		EMap<URI, NodeLabel>nodeLabels = graph.getNodeLabels();
+		EMap<URI, Label>graphLabels = graph.getGraphLabels();
+		
+		if(filter != null) {
+			_filter.filterEdges(edges);
+			_filter.filterNodes(nodes);
+			_filter.filterNodeLabels(nodeLabels);
+			_filter.filterLabels(graphLabels);
+		}
+		
+		getEdges().addAll(edges);
+		getNodes().addAll(nodes);
+		getNodeLabels().addAll(nodeLabels);
+		getDecorators().addAll(graph.getDecorators());
+		
+		// We need to update the graph labels to the new graph
+		for (final Iterator<Label> graphLabelIter = graphLabels.values()
+				.iterator(); graphLabelIter.hasNext();) {
+			final Label graphLabel = graphLabelIter.next();
+			graphLabel.setURIOfIdentifiableToBeLabeled(getURI());
+			putGraphLabel(graphLabel);
+		} // for each new graph label
+
+		getDynamicLabels().addAll(graph.getDynamicLabels());
+		getUnresolvedIdentifiables().addAll(graph.getUnresolvedIdentifiables());
+	} // addGraph
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void putEdge(Edge edge) {
+		getEdges().put(edge.getURI(), edge);
+		final EdgeLabel edgeLabel = edge.getLabel();
+		// Dynamic?
+		if (edgeLabel instanceof DynamicLabel) {
+			// Yes
+			addDynamicLabel((DynamicLabel)edgeLabel);
+		} // if DynamicLabel
+	} // putEdge
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Edge getEdge(URI uri) {
+		return getEdges().get(uri);
+	} // getEdge
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void putNode(Node node) {
+		getNodes().put(node.getURI(), node);
+		for (NodeLabel nodeLabel : node.getLabels()) {
+			putNodeLabel(nodeLabel);
+		} // for each NodeLabel
+	} // putNode
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Node getNode(URI uri) {
+		return getNodes().get(uri);
+	} // getNode
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void putNodeLabel(NodeLabel label) {
+		getNodeLabels().put(label.getURI(), label);
+		// Dynamic?
+		if (label instanceof DynamicLabel) {
+			// Yes
+			addDynamicLabel((DynamicLabel)label);
+		} // if DynamicLabel
+	} // putNodeLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public NodeLabel getNodeLabel(URI uri) {
+		return getNodeLabels().get(uri);
+	} // getNodeLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void putGraphLabel(Label label) {
+		getGraphLabels().put(label.getURI(), label);
+		// Dynamic?
+		if (label instanceof DynamicLabel) {
+			// Yes
+			addDynamicLabel((DynamicLabel)label);
+		} // if DynamicLabel
+	} // putGraphLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Label getGraphLabel(URI uri) {
+		return getGraphLabels().get(uri);
+	} // getGraphLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void addDynamicLabel(DynamicLabel dynamiclabel) {
+		getDynamicLabels().add(dynamiclabel);
+	} // addDynamicLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void switchToNextValue(STEMTime currentTime) {
+		for (final Iterator<DynamicLabel> graphLabelIter = getDynamicLabels()
+				.iterator(); graphLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = graphLabelIter.next();
+			dynamicLabel.switchToNextValue();
+		} // for dynamic labels
+		setTime((STEMTime)EcoreUtil.copy(currentTime));
+	} // switchToNextValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__DECORATORS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getDecorators()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder("\"" + dublinCore.getTitle()
+				+ "\",\n");
+
+		// How many nodes?
+
+		sb.append(getNumNodes() > 0 ? getNumNodes() + " Nodes\n" : "");
+		sb.append(getNumEdges() > 0 ? getNumEdges() + " Edges\n" : "");
+		sb.append(getNumNodeLabels() > 0 ? getNumNodeLabels() + " Node Labels "
+				: "");
+		sb.append(getNumGraphLabels() > 0 ? getNumGraphLabels()
+				+ " Graph Labels\n" : "");
+
+		sb.append(getNumDynamicLabels() > 0 ? getNumDynamicLabels()
+				+ " Dynamic Labels\n" : "");
+
+		return sb.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		// This is the number of labels that each node references
+		int nodeLabelCount = 0;
+		int dynamicLabelCount = 0;
+
+		// Nodes
+		if (nodes != null) {
+			// Yes
+			for (final Iterator<Node> nodeIter = getNodes().values().iterator(); nodeIter
+					.hasNext()
+					&& retValue;) {
+				final Node node = nodeIter.next();
+				retValue = retValue && node.sane();
+				assert retValue;
+
+				nodeLabelCount += node.getLabels().size();
+
+				// How many dynamic labels?
+				for (final Iterator<NodeLabel> labelIter = node.getLabels()
+						.iterator(); labelIter.hasNext();) {
+					final Label label = labelIter.next();
+					if (label instanceof DynamicLabel) {
+						dynamicLabelCount++;
+						retValue = false;
+						
+						// The dynamic label should be in the collection of
+						// dynamic labels maintained by the graph
+						for (DynamicLabel dl : getDynamicLabels()) {
+							if (dl == label) {
+								retValue = true;
+								break;
+							}
+						} // for each dynamic label
+						assert retValue;
+						
+					} // if DynamicLabel
+					// The label should be in the collection of node labels
+					retValue = retValue
+							&& getNodeLabels().containsKey(label.getURI());
+					assert retValue;
+					
+					
+				} // for each label of the node
+			} // for each node
+		} // if
+
+		// Edges?
+		if (edges != null) {
+			// Yes
+			for (final Iterator<Edge> edgeIter = getEdges().values().iterator(); edgeIter
+					.hasNext()
+					&& retValue;) {
+				final Edge edge = edgeIter.next();
+				retValue = retValue && edge.sane();
+				assert retValue;
+
+				// Is the edge's label dynamic?
+				if (edge.getLabel() instanceof DynamicLabel) {
+					// Yes
+					dynamicLabelCount++;
+				}
+			} // for each edge
+		} // if
+
+		// Node Labels?
+		if (nodeLabels != null) {
+			// Yes
+			// The number of node labels should match the number we counted
+			// above...not true for graph fragments that might have labels for
+			// nodes in other (sub) graph fragments.
+			// retValue = retValue && nodeLabelCount ==
+			// getNodeLabels().getSize();
+			// assert retValue;
+
+			for (final Iterator<NodeLabel> labelIter = getNodeLabels().values()
+					.iterator(); labelIter.hasNext() && retValue;) {
+				final NodeLabel nodeLabel = labelIter.next();
+				retValue = retValue && nodeLabel.sane();
+				assert retValue;
+			} // for each node label
+		} // if
+
+		if (graphLabels != null) {
+			// Yes
+			for (final Iterator<Label> graphLabelIter = getGraphLabels().values()
+					.iterator(); graphLabelIter.hasNext();) {
+				final Label graphLabel = graphLabelIter.next();
+				retValue = retValue && graphLabel.sane();
+				assert retValue;
+
+				if (graphLabel instanceof DynamicLabel) {
+					dynamicLabelCount++;
+				}
+			}
+		} // if graphLabels
+
+		// Dynamic Labels?
+		if (dynamicLabels != null) {
+			// Yes
+			// The number of dynamic labels should equal the count
+			retValue = dynamicLabelCount == getNumDynamicLabels();
+			assert retValue;
+
+			for (final Iterator<DynamicLabel> dynamiclIter = getDynamicLabels()
+					.iterator(); dynamiclIter.hasNext() && retValue;) {
+				final DynamicLabel dynamicLabel = dynamiclIter.next();
+				retValue = retValue && dynamicLabel.sane();
+				assert retValue;
+			} // for each dynamic label
+		} // if
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__EDGES:
+				return ((InternalEList<?>)getEdges()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__NODES:
+				return ((InternalEList<?>)getNodes()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				return ((InternalEList<?>)getGraphLabels()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__NODE_LABELS:
+				return ((InternalEList<?>)getNodeLabels()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+				return ((InternalEList<?>)getUnresolvedIdentifiables()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__DECORATORS:
+				return ((InternalEList<?>)getDecorators()).basicRemove(otherEnd, msgs);
+			case GraphPackage.GRAPH__TIME:
+				return basicSetTime(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__EDGES:
+				if (coreType) return getEdges();
+				else return getEdges().map();
+			case GraphPackage.GRAPH__NODES:
+				if (coreType) return getNodes();
+				else return getNodes().map();
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				if (coreType) return getGraphLabels();
+				else return getGraphLabels().map();
+			case GraphPackage.GRAPH__NODE_LABELS:
+				if (coreType) return getNodeLabels();
+				else return getNodeLabels().map();
+			case GraphPackage.GRAPH__DYNAMIC_LABELS:
+				return getDynamicLabels();
+			case GraphPackage.GRAPH__NUM_EDGES:
+				return getNumEdges();
+			case GraphPackage.GRAPH__NUM_NODES:
+				return getNumNodes();
+			case GraphPackage.GRAPH__NUM_GRAPH_LABELS:
+				return getNumGraphLabels();
+			case GraphPackage.GRAPH__NUM_NODE_LABELS:
+				return getNumNodeLabels();
+			case GraphPackage.GRAPH__NUM_DYNAMIC_LABELS:
+				return getNumDynamicLabels();
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+				return getUnresolvedIdentifiables();
+			case GraphPackage.GRAPH__DECORATORS:
+				return getDecorators();
+			case GraphPackage.GRAPH__TIME:
+				return getTime();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__EDGES:
+				((EStructuralFeature.Setting)getEdges()).set(newValue);
+				return;
+			case GraphPackage.GRAPH__NODES:
+				((EStructuralFeature.Setting)getNodes()).set(newValue);
+				return;
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				((EStructuralFeature.Setting)getGraphLabels()).set(newValue);
+				return;
+			case GraphPackage.GRAPH__NODE_LABELS:
+				((EStructuralFeature.Setting)getNodeLabels()).set(newValue);
+				return;
+			case GraphPackage.GRAPH__DYNAMIC_LABELS:
+				getDynamicLabels().clear();
+				getDynamicLabels().addAll((Collection<? extends DynamicLabel>)newValue);
+				return;
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+				getUnresolvedIdentifiables().clear();
+				getUnresolvedIdentifiables().addAll((Collection<? extends UnresolvedIdentifiable>)newValue);
+				return;
+			case GraphPackage.GRAPH__DECORATORS:
+				getDecorators().clear();
+				getDecorators().addAll((Collection<? extends Decorator>)newValue);
+				return;
+			case GraphPackage.GRAPH__TIME:
+				setTime((STEMTime)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__EDGES:
+				getEdges().clear();
+				return;
+			case GraphPackage.GRAPH__NODES:
+				getNodes().clear();
+				return;
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				getGraphLabels().clear();
+				return;
+			case GraphPackage.GRAPH__NODE_LABELS:
+				getNodeLabels().clear();
+				return;
+			case GraphPackage.GRAPH__DYNAMIC_LABELS:
+				getDynamicLabels().clear();
+				return;
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+				getUnresolvedIdentifiables().clear();
+				return;
+			case GraphPackage.GRAPH__DECORATORS:
+				getDecorators().clear();
+				return;
+			case GraphPackage.GRAPH__TIME:
+				setTime((STEMTime)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.GRAPH__EDGES:
+				return edges != null && !edges.isEmpty();
+			case GraphPackage.GRAPH__NODES:
+				return nodes != null && !nodes.isEmpty();
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				return graphLabels != null && !graphLabels.isEmpty();
+			case GraphPackage.GRAPH__NODE_LABELS:
+				return nodeLabels != null && !nodeLabels.isEmpty();
+			case GraphPackage.GRAPH__DYNAMIC_LABELS:
+				return dynamicLabels != null && !dynamicLabels.isEmpty();
+			case GraphPackage.GRAPH__NUM_EDGES:
+				return getNumEdges() != NUM_EDGES_EDEFAULT;
+			case GraphPackage.GRAPH__NUM_NODES:
+				return getNumNodes() != NUM_NODES_EDEFAULT;
+			case GraphPackage.GRAPH__NUM_GRAPH_LABELS:
+				return getNumGraphLabels() != NUM_GRAPH_LABELS_EDEFAULT;
+			case GraphPackage.GRAPH__NUM_NODE_LABELS:
+				return getNumNodeLabels() != NUM_NODE_LABELS_EDEFAULT;
+			case GraphPackage.GRAPH__NUM_DYNAMIC_LABELS:
+				return getNumDynamicLabels() != NUM_DYNAMIC_LABELS_EDEFAULT;
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+				return unresolvedIdentifiables != null && !unresolvedIdentifiables.isEmpty();
+			case GraphPackage.GRAPH__DECORATORS:
+				return decorators != null && !decorators.isEmpty();
+			case GraphPackage.GRAPH__TIME:
+				return time != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // GraphImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphPackageImpl.java
new file mode 100644
index 0000000..6dd7f27
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/GraphPackageImpl.java
@@ -0,0 +1,1242 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphPackageImpl extends EPackageImpl implements GraphPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass dynamicLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass dynamicNodeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass edgeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass graphEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass labelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass labelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nodeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nodeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass staticNodeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass unresolvedIdentifiableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass uriToIdentifiableMapEntryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sanityCheckerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass dynamicEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass edgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass staticEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass uriToEdgeMapEntryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass uriToNodeMapEntryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass uriToLabelMapEntryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass uriToNodeLabelMapEntryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass staticLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType illegalArgumentExceptionEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.graph.GraphPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private GraphPackageImpl() {
+		super(eNS_URI, GraphFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link GraphPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static GraphPackage init() {
+		if (isInited) return (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+
+		// Obtain or create and register package
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new GraphPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theGraphPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theGraphPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theGraphPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(GraphPackage.eNS_URI, theGraphPackage);
+		return theGraphPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDynamicLabel() {
+		return dynamicLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDynamicLabel_NextValueValid() {
+		return (EAttribute)dynamicLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDynamicLabel_NextValue() {
+		return (EReference)dynamicLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDynamicLabel_Decorator() {
+		return (EReference)dynamicLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDynamicNodeLabel() {
+		return dynamicNodeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEdge() {
+		return edgeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEdge_A() {
+		return (EReference)edgeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEdge_NodeAURI() {
+		return (EAttribute)edgeEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEdge_B() {
+		return (EReference)edgeEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEdge_NodeBURI() {
+		return (EAttribute)edgeEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEdge_Label() {
+		return (EReference)edgeEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getEdge_Directed() {
+		return (EAttribute)edgeEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGraph() {
+		return graphEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_Edges() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_Nodes() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_GraphLabels() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_NodeLabels() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_DynamicLabels() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGraph_NumEdges() {
+		return (EAttribute)graphEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGraph_NumNodes() {
+		return (EAttribute)graphEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGraph_NumGraphLabels() {
+		return (EAttribute)graphEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGraph_NumNodeLabels() {
+		return (EAttribute)graphEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGraph_NumDynamicLabels() {
+		return (EAttribute)graphEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_UnresolvedIdentifiables() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_Decorators() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(11);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGraph_Time() {
+		return (EReference)graphEClass.getEStructuralFeatures().get(12);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLabel() {
+		return labelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLabel_URIOfIdentifiableToBeLabeled() {
+		return (EAttribute)labelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLabel_CurrentValue() {
+		return (EReference)labelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLabel_Identifiable() {
+		return (EReference)labelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLabelValue() {
+		return labelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNode() {
+		return nodeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNode_Edges() {
+		return (EReference)nodeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNode_Labels() {
+		return (EReference)nodeEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNodeLabel() {
+		return nodeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNodeLabel_Node() {
+		return (EReference)nodeLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStaticNodeLabel() {
+		return staticNodeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getUnresolvedIdentifiable() {
+		return unresolvedIdentifiableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getUnresolvedIdentifiable_Scenario() {
+		return (EReference)unresolvedIdentifiableEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getUnresolvedIdentifiable_Model() {
+		return (EReference)unresolvedIdentifiableEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getUnresolvedIdentifiable_Graph() {
+		return (EReference)unresolvedIdentifiableEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getUnresolvedIdentifiable_Identifiable() {
+		return (EReference)unresolvedIdentifiableEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getUnresolvedIdentifiable_UnresolvedURI() {
+		return (EAttribute)unresolvedIdentifiableEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getUnresolvedIdentifiable_FieldName() {
+		return (EAttribute)unresolvedIdentifiableEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getURIToIdentifiableMapEntry() {
+		return uriToIdentifiableMapEntryEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getURIToIdentifiableMapEntry_Key() {
+		return (EAttribute)uriToIdentifiableMapEntryEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getURIToIdentifiableMapEntry_Value() {
+		return (EReference)uriToIdentifiableMapEntryEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSanityChecker() {
+		return sanityCheckerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDynamicEdgeLabel() {
+		return dynamicEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEdgeLabel() {
+		return edgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getEdgeLabel_Edge() {
+		return (EReference)edgeLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStaticEdgeLabel() {
+		return staticEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getURIToEdgeMapEntry() {
+		return uriToEdgeMapEntryEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getURIToEdgeMapEntry_Key() {
+		return (EAttribute)uriToEdgeMapEntryEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getURIToEdgeMapEntry_Value() {
+		return (EReference)uriToEdgeMapEntryEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getURIToNodeMapEntry() {
+		return uriToNodeMapEntryEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getURIToNodeMapEntry_Key() {
+		return (EAttribute)uriToNodeMapEntryEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getURIToNodeMapEntry_Value() {
+		return (EReference)uriToNodeMapEntryEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getURIToLabelMapEntry() {
+		return uriToLabelMapEntryEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getURIToLabelMapEntry_Key() {
+		return (EAttribute)uriToLabelMapEntryEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getURIToLabelMapEntry_Value() {
+		return (EReference)uriToLabelMapEntryEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getURIToNodeLabelMapEntry() {
+		return uriToNodeLabelMapEntryEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getURIToNodeLabelMapEntry_Key() {
+		return (EAttribute)uriToNodeLabelMapEntryEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getURIToNodeLabelMapEntry_Value() {
+		return (EReference)uriToNodeLabelMapEntryEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStaticLabel() {
+		return staticLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getIllegalArgumentException() {
+		return illegalArgumentExceptionEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphFactory getGraphFactory() {
+		return (GraphFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		dynamicLabelEClass = createEClass(DYNAMIC_LABEL);
+		createEAttribute(dynamicLabelEClass, DYNAMIC_LABEL__NEXT_VALUE_VALID);
+		createEReference(dynamicLabelEClass, DYNAMIC_LABEL__NEXT_VALUE);
+		createEReference(dynamicLabelEClass, DYNAMIC_LABEL__DECORATOR);
+
+		dynamicNodeLabelEClass = createEClass(DYNAMIC_NODE_LABEL);
+
+		edgeEClass = createEClass(EDGE);
+		createEReference(edgeEClass, EDGE__A);
+		createEAttribute(edgeEClass, EDGE__NODE_AURI);
+		createEReference(edgeEClass, EDGE__B);
+		createEAttribute(edgeEClass, EDGE__NODE_BURI);
+		createEReference(edgeEClass, EDGE__LABEL);
+		createEAttribute(edgeEClass, EDGE__DIRECTED);
+
+		graphEClass = createEClass(GRAPH);
+		createEReference(graphEClass, GRAPH__EDGES);
+		createEReference(graphEClass, GRAPH__NODES);
+		createEReference(graphEClass, GRAPH__GRAPH_LABELS);
+		createEReference(graphEClass, GRAPH__NODE_LABELS);
+		createEReference(graphEClass, GRAPH__DYNAMIC_LABELS);
+		createEAttribute(graphEClass, GRAPH__NUM_EDGES);
+		createEAttribute(graphEClass, GRAPH__NUM_NODES);
+		createEAttribute(graphEClass, GRAPH__NUM_GRAPH_LABELS);
+		createEAttribute(graphEClass, GRAPH__NUM_NODE_LABELS);
+		createEAttribute(graphEClass, GRAPH__NUM_DYNAMIC_LABELS);
+		createEReference(graphEClass, GRAPH__UNRESOLVED_IDENTIFIABLES);
+		createEReference(graphEClass, GRAPH__DECORATORS);
+		createEReference(graphEClass, GRAPH__TIME);
+
+		labelEClass = createEClass(LABEL);
+		createEAttribute(labelEClass, LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED);
+		createEReference(labelEClass, LABEL__CURRENT_VALUE);
+		createEReference(labelEClass, LABEL__IDENTIFIABLE);
+
+		labelValueEClass = createEClass(LABEL_VALUE);
+
+		nodeEClass = createEClass(NODE);
+		createEReference(nodeEClass, NODE__EDGES);
+		createEReference(nodeEClass, NODE__LABELS);
+
+		nodeLabelEClass = createEClass(NODE_LABEL);
+		createEReference(nodeLabelEClass, NODE_LABEL__NODE);
+
+		staticNodeLabelEClass = createEClass(STATIC_NODE_LABEL);
+
+		unresolvedIdentifiableEClass = createEClass(UNRESOLVED_IDENTIFIABLE);
+		createEReference(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__SCENARIO);
+		createEReference(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__MODEL);
+		createEReference(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__GRAPH);
+		createEReference(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE);
+		createEAttribute(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI);
+		createEAttribute(unresolvedIdentifiableEClass, UNRESOLVED_IDENTIFIABLE__FIELD_NAME);
+
+		uriToIdentifiableMapEntryEClass = createEClass(URI_TO_IDENTIFIABLE_MAP_ENTRY);
+		createEAttribute(uriToIdentifiableMapEntryEClass, URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY);
+		createEReference(uriToIdentifiableMapEntryEClass, URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE);
+
+		sanityCheckerEClass = createEClass(SANITY_CHECKER);
+
+		dynamicEdgeLabelEClass = createEClass(DYNAMIC_EDGE_LABEL);
+
+		edgeLabelEClass = createEClass(EDGE_LABEL);
+		createEReference(edgeLabelEClass, EDGE_LABEL__EDGE);
+
+		staticEdgeLabelEClass = createEClass(STATIC_EDGE_LABEL);
+
+		uriToEdgeMapEntryEClass = createEClass(URI_TO_EDGE_MAP_ENTRY);
+		createEAttribute(uriToEdgeMapEntryEClass, URI_TO_EDGE_MAP_ENTRY__KEY);
+		createEReference(uriToEdgeMapEntryEClass, URI_TO_EDGE_MAP_ENTRY__VALUE);
+
+		uriToNodeMapEntryEClass = createEClass(URI_TO_NODE_MAP_ENTRY);
+		createEAttribute(uriToNodeMapEntryEClass, URI_TO_NODE_MAP_ENTRY__KEY);
+		createEReference(uriToNodeMapEntryEClass, URI_TO_NODE_MAP_ENTRY__VALUE);
+
+		uriToLabelMapEntryEClass = createEClass(URI_TO_LABEL_MAP_ENTRY);
+		createEAttribute(uriToLabelMapEntryEClass, URI_TO_LABEL_MAP_ENTRY__KEY);
+		createEReference(uriToLabelMapEntryEClass, URI_TO_LABEL_MAP_ENTRY__VALUE);
+
+		uriToNodeLabelMapEntryEClass = createEClass(URI_TO_NODE_LABEL_MAP_ENTRY);
+		createEAttribute(uriToNodeLabelMapEntryEClass, URI_TO_NODE_LABEL_MAP_ENTRY__KEY);
+		createEReference(uriToNodeLabelMapEntryEClass, URI_TO_NODE_LABEL_MAP_ENTRY__VALUE);
+
+		staticLabelEClass = createEClass(STATIC_LABEL);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+		illegalArgumentExceptionEDataType = createEDataType(ILLEGAL_ARGUMENT_EXCEPTION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+		ModifierPackage theModifierPackage = (ModifierPackage)EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		dynamicLabelEClass.getESuperTypes().add(this.getLabel());
+		dynamicNodeLabelEClass.getESuperTypes().add(this.getDynamicLabel());
+		dynamicNodeLabelEClass.getESuperTypes().add(this.getNodeLabel());
+		edgeEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		edgeEClass.getESuperTypes().add(theModifierPackage.getModifiable());
+		graphEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		labelEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		labelValueEClass.getESuperTypes().add(this.getSanityChecker());
+		nodeEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		nodeLabelEClass.getESuperTypes().add(this.getLabel());
+		staticNodeLabelEClass.getESuperTypes().add(this.getNodeLabel());
+		staticNodeLabelEClass.getESuperTypes().add(this.getStaticLabel());
+		dynamicEdgeLabelEClass.getESuperTypes().add(this.getDynamicLabel());
+		dynamicEdgeLabelEClass.getESuperTypes().add(this.getEdgeLabel());
+		edgeLabelEClass.getESuperTypes().add(this.getLabel());
+		staticEdgeLabelEClass.getESuperTypes().add(this.getEdgeLabel());
+		staticEdgeLabelEClass.getESuperTypes().add(this.getStaticLabel());
+		staticLabelEClass.getESuperTypes().add(this.getLabel());
+		staticLabelEClass.getESuperTypes().add(theModifierPackage.getModifiable());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(dynamicLabelEClass, DynamicLabel.class, "DynamicLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDynamicLabel_NextValueValid(), ecorePackage.getEBoolean(), "nextValueValid", "false", 0, 1, DynamicLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getDynamicLabel_NextValue(), this.getLabelValue(), null, "nextValue", null, 1, 1, DynamicLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDynamicLabel_Decorator(), theModelPackage.getDecorator(), theModelPackage.getDecorator_LabelsToUpdate(), "decorator", null, 0, 1, DynamicLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(dynamicLabelEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(dynamicLabelEClass, null, "switchToNextValue", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(dynamicNodeLabelEClass, DynamicNodeLabel.class, "DynamicNodeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(edgeEClass, Edge.class, "Edge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getEdge_A(), this.getNode(), null, "a", null, 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getEdge_NodeAURI(), this.getURI(), "nodeAURI", null, 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getEdge_B(), this.getNode(), null, "b", null, 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getEdge_NodeBURI(), this.getURI(), "nodeBURI", null, 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getEdge_Label(), this.getEdgeLabel(), this.getEdgeLabel_Edge(), "label", null, 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getEdge_Directed(), ecorePackage.getEBoolean(), "directed", "false", 0, 1, Edge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		EOperation op = addEOperation(edgeEClass, this.getNode(), "getOtherNode", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getNode(), "node", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEException(op, this.getIllegalArgumentException());
+
+		op = addEOperation(edgeEClass, ecorePackage.getEBoolean(), "isDirectedAt", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getNode(), "node", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(graphEClass, Graph.class, "Graph", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getGraph_Edges(), this.getURIToEdgeMapEntry(), null, "edges", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_Nodes(), this.getURIToNodeMapEntry(), null, "nodes", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_GraphLabels(), this.getURIToLabelMapEntry(), null, "graphLabels", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_NodeLabels(), this.getURIToNodeLabelMapEntry(), null, "nodeLabels", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_DynamicLabels(), this.getDynamicLabel(), null, "dynamicLabels", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGraph_NumEdges(), ecorePackage.getEInt(), "numEdges", null, 0, 1, Graph.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGraph_NumNodes(), ecorePackage.getEInt(), "numNodes", null, 0, 1, Graph.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGraph_NumGraphLabels(), ecorePackage.getEInt(), "numGraphLabels", null, 0, 1, Graph.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGraph_NumNodeLabels(), ecorePackage.getEInt(), "numNodeLabels", null, 0, 1, Graph.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGraph_NumDynamicLabels(), ecorePackage.getEInt(), "numDynamicLabels", null, 0, 1, Graph.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_UnresolvedIdentifiables(), this.getUnresolvedIdentifiable(), null, "unresolvedIdentifiables", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_Decorators(), theModelPackage.getDecorator(), theModelPackage.getDecorator_Graph(), "decorators", null, 0, -1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getGraph_Time(), theModelPackage.getSTEMTime(), null, "time", null, 0, 1, Graph.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, this.getNodeLabel(), "getNodeLabelsByTypeURI", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "typeURI", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "addGraph", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getGraph(), "graph", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theCommonPackage.getIdentifiableFilter(), "filter", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "putEdge", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getEdge(), "edge", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, this.getEdge(), "getEdge", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "uri", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "putNode", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getNode(), "node", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, this.getNode(), "getNode", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "uri", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "putNodeLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getNodeLabel(), "label", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, this.getNodeLabel(), "getNodeLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "uri", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "putGraphLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getLabel(), "label", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, this.getLabel(), "getGraphLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "uri", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "addDynamicLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDynamicLabel(), "dynamiclabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(graphEClass, null, "switchToNextValue", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theModelPackage.getSTEMTime(), "currentTime", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(labelEClass, Label.class, "Label", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLabel_URIOfIdentifiableToBeLabeled(), this.getURI(), "uRIOfIdentifiableToBeLabeled", null, 0, 1, Label.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLabel_CurrentValue(), this.getLabelValue(), null, "currentValue", null, 1, 1, Label.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLabel_Identifiable(), theCommonPackage.getIdentifiable(), null, "identifiable", null, 0, 1, Label.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(labelValueEClass, LabelValue.class, "LabelValue", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		addEOperation(labelValueEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(nodeEClass, Node.class, "Node", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getNode_Edges(), this.getEdge(), null, "edges", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getNode_Labels(), this.getNodeLabel(), this.getNodeLabel_Node(), "labels", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(nodeLabelEClass, NodeLabel.class, "NodeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getNodeLabel_Node(), this.getNode(), this.getNode_Labels(), "node", null, 0, 1, NodeLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(staticNodeLabelEClass, StaticNodeLabel.class, "StaticNodeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(unresolvedIdentifiableEClass, UnresolvedIdentifiable.class, "UnresolvedIdentifiable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getUnresolvedIdentifiable_Scenario(), theCommonPackage.getIdentifiable(), null, "scenario", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getUnresolvedIdentifiable_Model(), theCommonPackage.getIdentifiable(), null, "model", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getUnresolvedIdentifiable_Graph(), theCommonPackage.getIdentifiable(), null, "graph", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getUnresolvedIdentifiable_Identifiable(), theCommonPackage.getIdentifiable(), null, "identifiable", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getUnresolvedIdentifiable_UnresolvedURI(), this.getURI(), "unresolvedURI", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getUnresolvedIdentifiable_FieldName(), ecorePackage.getEString(), "fieldName", null, 0, 1, UnresolvedIdentifiable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(uriToIdentifiableMapEntryEClass, Map.Entry.class, "URIToIdentifiableMapEntry", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getURIToIdentifiableMapEntry_Key(), this.getURI(), "key", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getURIToIdentifiableMapEntry_Value(), theCommonPackage.getIdentifiable(), null, "value", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sanityCheckerEClass, SanityChecker.class, "SanityChecker", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(dynamicEdgeLabelEClass, DynamicEdgeLabel.class, "DynamicEdgeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(edgeLabelEClass, EdgeLabel.class, "EdgeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getEdgeLabel_Edge(), this.getEdge(), this.getEdge_Label(), "edge", null, 0, 1, EdgeLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(staticEdgeLabelEClass, StaticEdgeLabel.class, "StaticEdgeLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(uriToEdgeMapEntryEClass, Map.Entry.class, "URIToEdgeMapEntry", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getURIToEdgeMapEntry_Key(), this.getURI(), "key", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getURIToEdgeMapEntry_Value(), this.getEdge(), null, "value", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(uriToNodeMapEntryEClass, Map.Entry.class, "URIToNodeMapEntry", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getURIToNodeMapEntry_Key(), this.getURI(), "key", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getURIToNodeMapEntry_Value(), this.getNode(), null, "value", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(uriToLabelMapEntryEClass, Map.Entry.class, "URIToLabelMapEntry", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getURIToLabelMapEntry_Key(), this.getURI(), "key", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getURIToLabelMapEntry_Value(), this.getLabel(), null, "value", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(uriToNodeLabelMapEntryEClass, Map.Entry.class, "URIToNodeLabelMapEntry", !IS_ABSTRACT, !IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getURIToNodeLabelMapEntry_Key(), this.getURI(), "key", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getURIToNodeLabelMapEntry_Value(), this.getNodeLabel(), null, "value", null, 0, 1, Map.Entry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(staticLabelEClass, StaticLabel.class, "StaticLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEDataType(illegalArgumentExceptionEDataType, IllegalArgumentException.class, "IllegalArgumentException", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //GraphPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelImpl.java
new file mode 100644
index 0000000..550c13c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelImpl.java
@@ -0,0 +1,307 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+//import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+//import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.LabelImpl#getURIOfIdentifiableToBeLabeled <em>URI Of Identifiable To Be Labeled</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.LabelImpl#getCurrentValue <em>Current Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.LabelImpl#getIdentifiable <em>Identifiable</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LabelImpl extends IdentifiableImpl implements Label {
+	/**
+	 * This is used to generate unique URI's for each Label generated
+	 */
+	static int labelCounter = 0;
+
+	/**
+	 * The default value of the '{@link #getURIOfIdentifiableToBeLabeled() <em>URI Of Identifiable To Be Labeled</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getURIOfIdentifiableToBeLabeled()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI URI_OF_IDENTIFIABLE_TO_BE_LABELED_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getURIOfIdentifiableToBeLabeled() <em>URI Of Identifiable To Be Labeled</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getURIOfIdentifiableToBeLabeled()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI uRIOfIdentifiableToBeLabeled = URI_OF_IDENTIFIABLE_TO_BE_LABELED_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getCurrentValue() <em>Current Value</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCurrentValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected LabelValue currentValue;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected LabelImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_LABEL_SEGMENT + "/"
+				+ Integer.toString(labelCounter++)));
+		setTypeURI(Label.URI_TYPE_LABEL);
+	} // LabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelValue getCurrentValue() {
+		return currentValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCurrentValue(LabelValue newCurrentValue, NotificationChain msgs) {
+		LabelValue oldCurrentValue = currentValue;
+		currentValue = newCurrentValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.LABEL__CURRENT_VALUE, oldCurrentValue, newCurrentValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentValue(LabelValue newCurrentValue) {
+		if (newCurrentValue != currentValue) {
+			NotificationChain msgs = null;
+			if (currentValue != null)
+				msgs = ((InternalEObject)currentValue).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.LABEL__CURRENT_VALUE, null, msgs);
+			if (newCurrentValue != null)
+				msgs = ((InternalEObject)newCurrentValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.LABEL__CURRENT_VALUE, null, msgs);
+			msgs = basicSetCurrentValue(newCurrentValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.LABEL__CURRENT_VALUE, newCurrentValue, newCurrentValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public Identifiable getIdentifiable();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Identifiable basicGetIdentifiable() {
+		return getIdentifiable();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public void setIdentifiable(Identifiable newIdentifiable);
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public URI getURIOfIdentifiableToBeLabeled() {
+		// Is it set?
+		if (uRIOfIdentifiableToBeLabeled == null) {
+			// No
+			final Identifiable identifiable = getIdentifiable();
+			// Do we have an Identifiable?
+			if (identifiable != null) {
+				// Yes
+				return identifiable.getURI();
+			}
+		}
+		return uRIOfIdentifiableToBeLabeled;
+	} // getURIOfIdentifiableToBeLabeled
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setURIOfIdentifiableToBeLabeled(URI newURIOfIdentifiableToBeLabeled) {
+		URI oldURIOfIdentifiableToBeLabeled = uRIOfIdentifiableToBeLabeled;
+		uRIOfIdentifiableToBeLabeled = newURIOfIdentifiableToBeLabeled;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED, oldURIOfIdentifiableToBeLabeled, uRIOfIdentifiableToBeLabeled));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				return basicSetCurrentValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED:
+				return getURIOfIdentifiableToBeLabeled();
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				return getCurrentValue();
+			case GraphPackage.LABEL__IDENTIFIABLE:
+				if (resolve) return getIdentifiable();
+				return basicGetIdentifiable();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED:
+				setURIOfIdentifiableToBeLabeled((URI)newValue);
+				return;
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				setCurrentValue((LabelValue)newValue);
+				return;
+			case GraphPackage.LABEL__IDENTIFIABLE:
+				setIdentifiable((Identifiable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED:
+				setURIOfIdentifiableToBeLabeled(URI_OF_IDENTIFIABLE_TO_BE_LABELED_EDEFAULT);
+				return;
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				setCurrentValue((LabelValue)null);
+				return;
+			case GraphPackage.LABEL__IDENTIFIABLE:
+				setIdentifiable((Identifiable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED:
+				return URI_OF_IDENTIFIABLE_TO_BE_LABELED_EDEFAULT == null ? uRIOfIdentifiableToBeLabeled != null : !URI_OF_IDENTIFIABLE_TO_BE_LABELED_EDEFAULT.equals(uRIOfIdentifiableToBeLabeled);
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				return currentValue != null;
+			case GraphPackage.LABEL__IDENTIFIABLE:
+				return basicGetIdentifiable() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+		return getCurrentValue().toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		retValue = retValue && currentValue != null;
+		assert retValue;
+
+		retValue = retValue && currentValue.sane();
+		assert retValue : getURIOfIdentifiableToBeLabeled().toString();
+
+		return retValue;
+	} // sane
+
+} // LabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelValueImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelValueImpl.java
new file mode 100644
index 0000000..e7fc49f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/LabelValueImpl.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class LabelValueImpl extends EObjectImpl implements LabelValue {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void reset() {
+		// nothing to reset
+	}
+
+	/**
+	 * @return true
+	 */
+	public boolean sane() {
+		return true;
+	} // sane
+
+} // LabelValueImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeImpl.java
new file mode 100644
index 0000000..50a9fcc
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeImpl.java
@@ -0,0 +1,246 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Node</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.NodeImpl#getEdges <em>Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.NodeImpl#getLabels <em>Labels</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NodeImpl extends IdentifiableImpl implements Node {
+
+	/**
+	 * This is used to generate unique URI's for each node generated
+	 */
+	static int nodeCounter = 0;
+
+	/**
+	 * The cached value of the '{@link #getEdges() <em>Edges</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Edge> edges;
+
+	/**
+	 * The cached value of the '{@link #getLabels() <em>Labels</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<NodeLabel> labels;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected NodeImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_NODE_SEGMENT + "/"
+				+ Integer.toString(nodeCounter++)));
+		setTypeURI(STEMURI.NODE_TYPE_URI);
+	} // NodeImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.NODE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Edge> getEdges() {
+		if (edges == null) {
+			edges = new EObjectResolvingEList<Edge>(Edge.class, this, GraphPackage.NODE__EDGES);
+		}
+		return edges;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<NodeLabel> getLabels() {
+		if (labels == null) {
+			labels = new EObjectWithInverseResolvingEList<NodeLabel>(NodeLabel.class, this, GraphPackage.NODE__LABELS, GraphPackage.NODE_LABEL__NODE);
+		}
+		return labels;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.NODE__LABELS:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getLabels()).basicAdd(otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.NODE__LABELS:
+				return ((InternalEList<?>)getLabels()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		if (labels != null) {
+			// All the labels should be sane
+			for (final Iterator<NodeLabel> labelIter = getLabels().iterator(); labelIter
+					.hasNext()
+					&& retValue;) {
+				final NodeLabel nodeLabel = labelIter.next();
+				// The sanity of individual NodeLabels is checked elsewhere
+				// The node label should be the one that labels this node
+				retValue = retValue
+						&& nodeLabel.getURIOfIdentifiableToBeLabeled().equals(
+								getURI());
+				assert retValue;
+			} // for each label
+		}
+		// All the edges should be sane
+		// We don't test that because their test is to check their nodes
+		// which results in infinite recursion
+
+		return retValue;
+	} // sane
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#toString()
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		// Return the title of the node from it's DublinCore if it is set
+		final String title = getDublinCore().getTitle();
+		return (title != null) ? title : super.toString();
+	} // toString
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.NODE__EDGES:
+				return getEdges();
+			case GraphPackage.NODE__LABELS:
+				return getLabels();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.NODE__EDGES:
+				getEdges().clear();
+				getEdges().addAll((Collection<? extends Edge>)newValue);
+				return;
+			case GraphPackage.NODE__LABELS:
+				getLabels().clear();
+				getLabels().addAll((Collection<? extends NodeLabel>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.NODE__EDGES:
+				getEdges().clear();
+				return;
+			case GraphPackage.NODE__LABELS:
+				getLabels().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.NODE__EDGES:
+				return edges != null && !edges.isEmpty();
+			case GraphPackage.NODE__LABELS:
+				return labels != null && !labels.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // NodeImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeLabelImpl.java
new file mode 100644
index 0000000..1af7440
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/NodeLabelImpl.java
@@ -0,0 +1,240 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.NodeLabelImpl#getNode <em>Node</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class NodeLabelImpl extends LabelImpl implements NodeLabel {
+	/**
+	 * The cached value of the '{@link #getNode() <em>Node</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNode()
+	 * @generated
+	 * @ordered
+	 */
+	protected Node node;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NodeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.NODE_LABEL;
+	}
+
+	@Override
+	public Identifiable getIdentifiable() {
+		return getNode();
+	}
+
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		setNode((Node)newIdentifiable);		
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getNode() {
+		if (node != null && node.eIsProxy()) {
+			InternalEObject oldNode = (InternalEObject)node;
+			node = (Node)eResolveProxy(oldNode);
+			if (node != oldNode) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.NODE_LABEL__NODE, oldNode, node));
+			}
+		}
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node basicGetNode() {
+		return node;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetNode(Node newNode, NotificationChain msgs) {
+		Node oldNode = node;
+		node = newNode;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.NODE_LABEL__NODE, oldNode, newNode);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNode(Node newNode) {
+		if (newNode != node) {
+			NotificationChain msgs = null;
+			if (node != null)
+				msgs = ((InternalEObject)node).eInverseRemove(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+			if (newNode != null)
+				msgs = ((InternalEObject)newNode).eInverseAdd(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+			msgs = basicSetNode(newNode, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.NODE_LABEL__NODE, newNode, newNode));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				if (node != null)
+					msgs = ((InternalEObject)node).eInverseRemove(this, GraphPackage.NODE__LABELS, Node.class, msgs);
+				return basicSetNode((Node)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				return basicSetNode(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				if (resolve) return getNode();
+				return basicGetNode();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				setNode((Node)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				setNode((Node)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.NODE_LABEL__NODE:
+				return node != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue
+				&& (getNode() == null || getNode().equals(getIdentifiable()));
+		assert retValue;
+
+		return retValue;
+	} // sane
+	
+} //NodeLabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticEdgeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticEdgeLabelImpl.java
new file mode 100644
index 0000000..21e28a6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticEdgeLabelImpl.java
@@ -0,0 +1,78 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+//import org.eclipse.emf.ecore.InternalEObject;
+
+//import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+//import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+//import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+//import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Static Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StaticEdgeLabelImpl extends EdgeLabelImpl implements StaticEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StaticEdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.STATIC_EDGE_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return getEdge();
+	} // getIdentifiable
+
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#setIdentifiable(org.eclipse.stem.core.common.Identifiable)
+	 */
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		setEdge((Edge)newIdentifiable);
+	} // setIdentifiable
+
+} //StaticEdgeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticLabelImpl.java
new file mode 100644
index 0000000..0649396
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticLabelImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.StaticLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Static Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StaticLabelImpl extends LabelImpl implements StaticLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StaticLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.STATIC_LABEL;
+	}
+
+} //StaticLabelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticNodeLabelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticNodeLabelImpl.java
new file mode 100644
index 0000000..d1a1028
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/StaticNodeLabelImpl.java
@@ -0,0 +1,91 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+//import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+//import org.eclipse.emf.ecore.InternalEObject;
+//import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+//import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+//import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Static Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StaticNodeLabelImpl extends NodeLabelImpl implements StaticNodeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StaticNodeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.STATIC_NODE_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return getNode();
+	} // getIdentifiable
+
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#setIdentifiable(org.eclipse.stem.core.common.Identifiable)
+	 */
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		super.setIdentifiable(newIdentifiable);
+		setNode((Node)newIdentifiable);
+	} // setIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+		retValue = retValue && getNode() != null ? getURIOfIdentifiableToBeLabeled()
+				.equals(getNode().getURI())
+				: true;
+		assert retValue;
+			
+		retValue = retValue && getNode() == getIdentifiable();
+		assert retValue;
+		
+		return retValue;
+	} // sane
+	
+} //StaticNodeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToEdgeMapEntryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToEdgeMapEntryImpl.java
new file mode 100644
index 0000000..40d141a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToEdgeMapEntryImpl.java
@@ -0,0 +1,335 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEMap;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI To Edge Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl#getTypedKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToEdgeMapEntryImpl#getTypedValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class URIToEdgeMapEntryImpl extends EObjectImpl implements BasicEMap.Entry<URI,Edge> {
+	/**
+	 * The default value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI key = KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTypedValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Edge value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected URIToEdgeMapEntryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypedKey() {
+		return key;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedKey(URI newKey) {
+		URI oldKey = key;
+		key = newKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_EDGE_MAP_ENTRY__KEY, oldKey, key));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge getTypedValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypedValue(Edge newValue, NotificationChain msgs) {
+		Edge oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedValue(Edge newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE, null, msgs);
+			msgs = basicSetTypedValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE:
+				return basicSetTypedValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__KEY:
+				return getTypedKey();
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE:
+				return getTypedValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__KEY:
+				setTypedKey((URI)newValue);
+				return;
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE:
+				setTypedValue((Edge)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__KEY:
+				setTypedKey(KEY_EDEFAULT);
+				return;
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE:
+				setTypedValue((Edge)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__KEY:
+				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (key: "); //$NON-NLS-1$
+		result.append(key);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected int hash = -1;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getHash() {
+		if (hash == -1) {
+			Object theKey = getKey();
+			hash = (theKey == null ? 0 : theKey.hashCode());
+		}
+		return hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHash(int hash) {
+		this.hash = hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(URI key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Edge setValue(Edge value) {
+		Edge oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<URI, Edge> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<URI, Edge>)container.eGet(eContainmentFeature());
+	}
+
+} //URIToEdgeMapEntryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToIdentifiableMapEntryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToIdentifiableMapEntryImpl.java
new file mode 100644
index 0000000..23a169e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToIdentifiableMapEntryImpl.java
@@ -0,0 +1,333 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEMap;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI To Identifiable Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl#getTypedKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToIdentifiableMapEntryImpl#getTypedValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class URIToIdentifiableMapEntryImpl extends EObjectImpl implements BasicEMap.Entry<URI,Identifiable> {
+	/**
+	 * The default value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI key = KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTypedValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Identifiable value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected URIToIdentifiableMapEntryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.URI_TO_IDENTIFIABLE_MAP_ENTRY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypedKey() {
+		return key;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedKey(URI newKey) {
+		URI oldKey = key;
+		key = newKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY, oldKey, key));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getTypedValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypedValue(Identifiable newValue, NotificationChain msgs) {
+		Identifiable oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedValue(Identifiable newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE, null, msgs);
+			msgs = basicSetTypedValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE:
+				return basicSetTypedValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY:
+				return getTypedKey();
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE:
+				return getTypedValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY:
+				setTypedKey((URI)newValue);
+				return;
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE:
+				setTypedValue((Identifiable)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY:
+				setTypedKey(KEY_EDEFAULT);
+				return;
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE:
+				setTypedValue((Identifiable)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__KEY:
+				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (key: "); //$NON-NLS-1$
+		result.append(key);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected int hash = -1;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getHash() {
+		if (hash == -1) {
+			Object theKey = getKey();
+			hash = (theKey == null ? 0 : theKey.hashCode());
+		}
+		return hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHash(int hash) {
+		this.hash = hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(URI key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable setValue(Identifiable value) {
+		Identifiable oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<URI, Identifiable> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<URI, Identifiable>)container.eGet(eContainmentFeature());
+	}
+
+} //URIToIdentifiableMapEntryImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToLabelMapEntryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToLabelMapEntryImpl.java
new file mode 100644
index 0000000..1628637
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToLabelMapEntryImpl.java
@@ -0,0 +1,335 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEMap;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI To Label Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl#getTypedKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToLabelMapEntryImpl#getTypedValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class URIToLabelMapEntryImpl extends EObjectImpl implements BasicEMap.Entry<URI,Label> {
+	/**
+	 * The default value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI key = KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTypedValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Label value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected URIToLabelMapEntryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypedKey() {
+		return key;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedKey(URI newKey) {
+		URI oldKey = key;
+		key = newKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_LABEL_MAP_ENTRY__KEY, oldKey, key));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Label getTypedValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypedValue(Label newValue, NotificationChain msgs) {
+		Label oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedValue(Label newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE, null, msgs);
+			msgs = basicSetTypedValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE:
+				return basicSetTypedValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__KEY:
+				return getTypedKey();
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE:
+				return getTypedValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__KEY:
+				setTypedKey((URI)newValue);
+				return;
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE:
+				setTypedValue((Label)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__KEY:
+				setTypedKey(KEY_EDEFAULT);
+				return;
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE:
+				setTypedValue((Label)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__KEY:
+				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (key: "); //$NON-NLS-1$
+		result.append(key);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected int hash = -1;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getHash() {
+		if (hash == -1) {
+			Object theKey = getKey();
+			hash = (theKey == null ? 0 : theKey.hashCode());
+		}
+		return hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHash(int hash) {
+		this.hash = hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(URI key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Label getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Label setValue(Label value) {
+		Label oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<URI, Label> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<URI, Label>)container.eGet(eContainmentFeature());
+	}
+
+} //URIToLabelMapEntryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeLabelMapEntryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeLabelMapEntryImpl.java
new file mode 100644
index 0000000..61ed9ce
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeLabelMapEntryImpl.java
@@ -0,0 +1,335 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEMap;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI To Node Label Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl#getTypedKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToNodeLabelMapEntryImpl#getTypedValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class URIToNodeLabelMapEntryImpl extends EObjectImpl implements BasicEMap.Entry<URI,NodeLabel> {
+	/**
+	 * The default value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI key = KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTypedValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected NodeLabel value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected URIToNodeLabelMapEntryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypedKey() {
+		return key;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedKey(URI newKey) {
+		URI oldKey = key;
+		key = newKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__KEY, oldKey, key));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeLabel getTypedValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypedValue(NodeLabel newValue, NotificationChain msgs) {
+		NodeLabel oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedValue(NodeLabel newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE, null, msgs);
+			msgs = basicSetTypedValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE:
+				return basicSetTypedValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__KEY:
+				return getTypedKey();
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE:
+				return getTypedValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__KEY:
+				setTypedKey((URI)newValue);
+				return;
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE:
+				setTypedValue((NodeLabel)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__KEY:
+				setTypedKey(KEY_EDEFAULT);
+				return;
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE:
+				setTypedValue((NodeLabel)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__KEY:
+				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (key: "); //$NON-NLS-1$
+		result.append(key);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected int hash = -1;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getHash() {
+		if (hash == -1) {
+			Object theKey = getKey();
+			hash = (theKey == null ? 0 : theKey.hashCode());
+		}
+		return hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHash(int hash) {
+		this.hash = hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(URI key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeLabel getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeLabel setValue(NodeLabel value) {
+		NodeLabel oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<URI, NodeLabel> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<URI, NodeLabel>)container.eGet(eContainmentFeature());
+	}
+
+} //URIToNodeLabelMapEntryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeMapEntryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeMapEntryImpl.java
new file mode 100644
index 0000000..35ad71b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/URIToNodeMapEntryImpl.java
@@ -0,0 +1,335 @@
+package org.eclipse.stem.core.graph.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.BasicEMap;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>URI To Node Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl#getTypedKey <em>Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl#getTypedValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class URIToNodeMapEntryImpl extends EObjectImpl implements BasicEMap.Entry<URI,Node> {
+	/**
+	 * The default value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTypedKey() <em>Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI key = KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getTypedValue() <em>Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTypedValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Node value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected URIToNodeMapEntryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTypedKey() {
+		return key;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedKey(URI newKey) {
+		URI oldKey = key;
+		key = newKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_MAP_ENTRY__KEY, oldKey, key));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getTypedValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTypedValue(Node newValue, NotificationChain msgs) {
+		Node oldValue = value;
+		value = newValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE, oldValue, newValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTypedValue(Node newValue) {
+		if (newValue != value) {
+			NotificationChain msgs = null;
+			if (value != null)
+				msgs = ((InternalEObject)value).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE, null, msgs);
+			if (newValue != null)
+				msgs = ((InternalEObject)newValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE, null, msgs);
+			msgs = basicSetTypedValue(newValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE, newValue, newValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE:
+				return basicSetTypedValue(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__KEY:
+				return getTypedKey();
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE:
+				return getTypedValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__KEY:
+				setTypedKey((URI)newValue);
+				return;
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE:
+				setTypedValue((Node)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__KEY:
+				setTypedKey(KEY_EDEFAULT);
+				return;
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE:
+				setTypedValue((Node)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__KEY:
+				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY__VALUE:
+				return value != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (key: "); //$NON-NLS-1$
+		result.append(key);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected int hash = -1;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getHash() {
+		if (hash == -1) {
+			Object theKey = getKey();
+			hash = (theKey == null ? 0 : theKey.hashCode());
+		}
+		return hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHash(int hash) {
+		this.hash = hash;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(URI key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Node setValue(Node value) {
+		Node oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<URI, Node> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<URI, Node>)container.eGet(eContainmentFeature());
+	}
+
+} //URIToNodeMapEntryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/UnresolvedIdentifiableImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/UnresolvedIdentifiableImpl.java
new file mode 100644
index 0000000..846ada9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/impl/UnresolvedIdentifiableImpl.java
@@ -0,0 +1,436 @@
+package org.eclipse.stem.core.graph.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Unresolved Identifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getScenario <em>Scenario</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getModel <em>Model</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getGraph <em>Graph</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getIdentifiable <em>Identifiable</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getUnresolvedURI <em>Unresolved URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.impl.UnresolvedIdentifiableImpl#getFieldName <em>Field Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class UnresolvedIdentifiableImpl extends EObjectImpl implements
+		UnresolvedIdentifiable {
+	/**
+	 * The cached value of the '{@link #getScenario() <em>Scenario</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getScenario()
+	 * @generated
+	 * @ordered
+	 */
+	protected Identifiable scenario;
+
+	/**
+	 * The cached value of the '{@link #getModel() <em>Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getModel()
+	 * @generated
+	 * @ordered
+	 */
+	protected Identifiable model;
+
+	/**
+	 * The cached value of the '{@link #getGraph() <em>Graph</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getGraph()
+	 * @generated
+	 * @ordered
+	 */
+	protected Identifiable graph;
+
+	/**
+	 * The cached value of the '{@link #getIdentifiable() <em>Identifiable</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIdentifiable()
+	 * @generated
+	 * @ordered
+	 */
+	protected Identifiable identifiable;
+
+	/**
+	 * The default value of the '{@link #getUnresolvedURI() <em>Unresolved URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getUnresolvedURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI UNRESOLVED_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUnresolvedURI() <em>Unresolved URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getUnresolvedURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI unresolvedURI = UNRESOLVED_URI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFieldName() <em>Field Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getFieldName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FIELD_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFieldName() <em>Field Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getFieldName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String fieldName = FIELD_NAME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UnresolvedIdentifiableImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return GraphPackage.Literals.UNRESOLVED_IDENTIFIABLE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getScenario() {
+		if (scenario != null && scenario.eIsProxy()) {
+			InternalEObject oldScenario = (InternalEObject)scenario;
+			scenario = (Identifiable)eResolveProxy(oldScenario);
+			if (scenario != oldScenario) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO, oldScenario, scenario));
+			}
+		}
+		return scenario;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable basicGetScenario() {
+		return scenario;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setScenario(Identifiable newScenario) {
+		Identifiable oldScenario = scenario;
+		scenario = newScenario;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO, oldScenario, scenario));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getModel() {
+		if (model != null && model.eIsProxy()) {
+			InternalEObject oldModel = (InternalEObject)model;
+			model = (Identifiable)eResolveProxy(oldModel);
+			if (model != oldModel) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL, oldModel, model));
+			}
+		}
+		return model;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable basicGetModel() {
+		return model;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModel(Identifiable newModel) {
+		Identifiable oldModel = model;
+		model = newModel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL, oldModel, model));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getGraph() {
+		if (graph != null && graph.eIsProxy()) {
+			InternalEObject oldGraph = (InternalEObject)graph;
+			graph = (Identifiable)eResolveProxy(oldGraph);
+			if (graph != oldGraph) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH, oldGraph, graph));
+			}
+		}
+		return graph;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable basicGetGraph() {
+		return graph;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGraph(Identifiable newGraph) {
+		Identifiable oldGraph = graph;
+		graph = newGraph;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH, oldGraph, graph));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable getIdentifiable() {
+		if (identifiable != null && identifiable.eIsProxy()) {
+			InternalEObject oldIdentifiable = (InternalEObject)identifiable;
+			identifiable = (Identifiable)eResolveProxy(oldIdentifiable);
+			if (identifiable != oldIdentifiable) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE, oldIdentifiable, identifiable));
+			}
+		}
+		return identifiable;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Identifiable basicGetIdentifiable() {
+		return identifiable;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		Identifiable oldIdentifiable = identifiable;
+		identifiable = newIdentifiable;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE, oldIdentifiable, identifiable));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getUnresolvedURI() {
+		return unresolvedURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUnresolvedURI(URI newUnresolvedURI) {
+		URI oldUnresolvedURI = unresolvedURI;
+		unresolvedURI = newUnresolvedURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI, oldUnresolvedURI, unresolvedURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFieldName() {
+		return fieldName;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFieldName(String newFieldName) {
+		String oldFieldName = fieldName;
+		fieldName = newFieldName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, GraphPackage.UNRESOLVED_IDENTIFIABLE__FIELD_NAME, oldFieldName, fieldName));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO:
+				if (resolve) return getScenario();
+				return basicGetScenario();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL:
+				if (resolve) return getModel();
+				return basicGetModel();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH:
+				if (resolve) return getGraph();
+				return basicGetGraph();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE:
+				if (resolve) return getIdentifiable();
+				return basicGetIdentifiable();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI:
+				return getUnresolvedURI();
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__FIELD_NAME:
+				return getFieldName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO:
+				setScenario((Identifiable)newValue);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL:
+				setModel((Identifiable)newValue);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH:
+				setGraph((Identifiable)newValue);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE:
+				setIdentifiable((Identifiable)newValue);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI:
+				setUnresolvedURI((URI)newValue);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__FIELD_NAME:
+				setFieldName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO:
+				setScenario((Identifiable)null);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL:
+				setModel((Identifiable)null);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH:
+				setGraph((Identifiable)null);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE:
+				setIdentifiable((Identifiable)null);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI:
+				setUnresolvedURI(UNRESOLVED_URI_EDEFAULT);
+				return;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__FIELD_NAME:
+				setFieldName(FIELD_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__SCENARIO:
+				return scenario != null;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__MODEL:
+				return model != null;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__GRAPH:
+				return graph != null;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__IDENTIFIABLE:
+				return identifiable != null;
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__UNRESOLVED_URI:
+				return UNRESOLVED_URI_EDEFAULT == null ? unresolvedURI != null : !UNRESOLVED_URI_EDEFAULT.equals(unresolvedURI);
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE__FIELD_NAME:
+				return FIELD_NAME_EDEFAULT == null ? fieldName != null : !FIELD_NAME_EDEFAULT.equals(fieldName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append(identifiable.toString());
+		result.append(", unresolved URI: ");
+		result.append(unresolvedURI);
+		result.append(", fieldName: ");
+		result.append(fieldName);
+		return result.toString();
+	} // toString
+
+} // UnresolvedIdentifiableImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicEdgeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicEdgeLabelItemProvider.java
new file mode 100644
index 0000000..a976688
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicEdgeLabelItemProvider.java
@@ -0,0 +1,140 @@
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+//import org.eclipse.emf.edit.provider.ViewerNotification;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.DynamicEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DynamicEdgeLabelItemProvider
+	extends DynamicLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DynamicEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addEdgePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Edge feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEdgePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_EdgeLabel_edge_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_EdgeLabel_edge_feature", "_UI_EdgeLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE_LABEL__EDGE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((DynamicEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DynamicEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_DynamicEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicLabelItemProvider.java
new file mode 100644
index 0000000..6587d04
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicLabelItemProvider.java
@@ -0,0 +1,174 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+//import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.DynamicLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DynamicLabelItemProvider
+	extends LabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DynamicLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNextValueValidPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Next Value Valid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNextValueValidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DynamicLabel_nextValueValid_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DynamicLabel_nextValueValid_feature", "_UI_DynamicLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.DYNAMIC_LABEL__NEXT_VALUE_VALID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns DynamicLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/DynamicLabel"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+//		URI labelValue = ((DynamicLabel)object).getURI();
+//		String label = labelValue == null ? null : labelValue.toString();
+//		return label == null || label.length() == 0 ?
+//			getString("_UI_DynamicLabel_type") :
+//			getString("_UI_DynamicLabel_type") + " " + label;
+		return super.getText(object);
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((DynamicLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DynamicLabel_type") : //$NON-NLS-1$
+			getString("_UI_DynamicLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DynamicLabel.class)) {
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID:
+			case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicNodeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicNodeLabelItemProvider.java
new file mode 100644
index 0000000..9cec792
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/DynamicNodeLabelItemProvider.java
@@ -0,0 +1,135 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.DynamicNodeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DynamicNodeLabelItemProvider
+	extends DynamicLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DynamicNodeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNodePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Node feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_NodeLabel_node_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_NodeLabel_node_feature", "_UI_NodeLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.NODE_LABEL__NODE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((DynamicNodeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DynamicNodeLabel_type") : //$NON-NLS-1$
+			getString("_UI_DynamicNodeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeItemProvider.java
new file mode 100644
index 0000000..e77c666
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeItemProvider.java
@@ -0,0 +1,318 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.Edge} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgeItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAPropertyDescriptor(object);
+			addNodeAURIPropertyDescriptor(object);
+			addBPropertyDescriptor(object);
+			addNodeBURIPropertyDescriptor(object);
+			addDirectedPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the A feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Edge_a_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Edge_a_feature", "_UI_Edge_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE__A,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Node AURI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodeAURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Edge_nodeAURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Edge_nodeAURI_feature", "_UI_Edge_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE__NODE_AURI,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the B feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Edge_b_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Edge_b_feature", "_UI_Edge_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE__B,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Node BURI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodeBURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Edge_nodeBURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Edge_nodeBURI_feature", "_UI_Edge_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE__NODE_BURI,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Directed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDirectedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Edge_directed_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Edge_directed_feature", "_UI_Edge_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE__DIRECTED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(GraphPackage.Literals.EDGE__LABEL);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Edge.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Edge"));
+	} // getImage
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final Edge edge = (Edge)object;
+		final EdgeLabel label = edge.getLabel();
+				
+		if (label==null) return getTextGen(object);
+		final IItemLabelProvider labelProvider =(IItemLabelProvider) itemProviderFactory.adapt(label,IItemLabelProvider.class);
+		// Did we find an adapter?
+		if (labelProvider != null) {
+			// Yes
+			return labelProvider.getText(label);
+		} // if 
+		return getTextGen(object);
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Edge)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Edge_type") : //$NON-NLS-1$
+			getString("_UI_Edge_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Edge.class)) {
+			case GraphPackage.EDGE__DIRECTED:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case GraphPackage.EDGE__LABEL:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+	
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+} // EdgeItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeLabelItemProvider.java
new file mode 100644
index 0000000..41c858a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/EdgeLabelItemProvider.java
@@ -0,0 +1,138 @@
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.EdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgeLabelItemProvider
+	extends LabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addEdgePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Edge feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEdgePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_EdgeLabel_edge_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_EdgeLabel_edge_feature", "_UI_EdgeLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.EDGE_LABEL__EDGE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((EdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_EdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_EdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphEditPlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphEditPlugin.java
new file mode 100644
index 0000000..5f21ecc
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphEditPlugin.java
@@ -0,0 +1,101 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CommonEditPlugin;
+
+/**
+ * This is the central singleton for the Graph editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class GraphEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final GraphEditPlugin INSTANCE = new GraphEditPlugin();
+
+	/**
+	 * 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 GraphEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     CommonEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProvider.java
new file mode 100644
index 0000000..ae64ee2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProvider.java
@@ -0,0 +1,1048 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandWrapper;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationWrapper;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.CreateChildCommand;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+//import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+//import org.eclipse.stem.core.model.Model;
+//import org.eclipse.stem.core.model.ModelFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.Graph} object.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @generated
+ */
+public class GraphItemProvider extends IdentifiableItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+
+	/**
+	 * This is a collection of the {@link TransientGraphItemProvider}'s that
+	 * are playing the role of children to the graph while in fact they are
+	 * "Non-Modeled Intermediary View Objects". They provide the correct method
+	 * implementations to play the role of an ItemProvider. See pages 369-378 of
+	 * the EMF book (1st Edition).
+	 */
+	private List<GraphItemProvider.TransientGraphItemProvider> children;
+
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public GraphItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated 
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * @see org.eclipse.stem.common.provider.IdentifiableItemProvider#getParent(java.lang.Object)
+	 */
+	@Override
+	public Object getParent(Object object) {
+		return super.getParent(object);
+	} // getParent
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildren(java.lang.Object)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Collection<?> getChildren(Object object) {
+		final Graph graph = (Graph) object;
+		children = new ArrayList<TransientGraphItemProvider>();
+		// This is where we add the "fake" children of a Graph. If you implement
+		// more then add them here.
+
+		// Any Edges in the Graph?
+		if (graph.getNumEdges() > 0) {
+			// Yes
+			children.add(new GraphItemProvider.EdgesItemProvider(
+					adapterFactory, graph));
+		} // if Edges
+
+		// Any Nodes in the Graph?
+		if (graph.getNumNodes() > 0) {
+			// Yes
+			children.add(new GraphItemProvider.NodesItemProvider(adapterFactory,
+					graph));
+		} // if Nodes
+		
+		// Any NodeLabels in the Graph?
+		if (graph.getNumNodeLabels() > 0) {
+			// Yes
+			children.add(new GraphItemProvider.NodeLabelsItemProvider(adapterFactory,
+					graph));
+		} // if NodeLabels
+		
+		// Any GraphLabels in the Graph?
+		if (graph.getNumGraphLabels() > 0) {
+			// Yes
+			children.add(new GraphItemProvider.GraphLabelsItemProvider(adapterFactory,
+					graph));
+		} // if GraphLabels
+
+		final Collection otherChildren = super.getChildren(object);
+		otherChildren.addAll(children);
+		return otherChildren;
+	} // getChildren
+
+	/**
+	 * This adds a property descriptor for the Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Graph_time_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Graph_time_feature", "_UI_Graph_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.GRAPH__TIME,
+				 false,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(GraphPackage.Literals.GRAPH__UNRESOLVED_IDENTIFIABLES);
+			childrenFeatures.add(GraphPackage.Literals.GRAPH__DECORATORS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Graph.gif. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage(
+				"full/customobj16/Graph"));
+	} // getImage
+
+	/**
+	 * This returns the label text for the adapted class. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Graph)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Graph_type") : //$NON-NLS-1$
+			getString("_UI_Graph_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to
+	 * update any cached children and by creating a viewer notification, which
+	 * it passes to {@link #fireNotifyChanged}. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Graph.class)) {
+		case GraphPackage.GRAPH__NUM_EDGES:
+		case GraphPackage.GRAPH__NUM_NODES:
+		case GraphPackage.GRAPH__NUM_GRAPH_LABELS:
+		case GraphPackage.GRAPH__NUM_NODE_LABELS:
+		case GraphPackage.GRAPH__NUM_DYNAMIC_LABELS:
+			fireNotifyChanged(new ViewerNotification(notification, notification
+					.getNotifier(), false, true));
+			return;
+		case GraphPackage.GRAPH__EDGES:
+		case GraphPackage.GRAPH__NODES:
+		case GraphPackage.GRAPH__GRAPH_LABELS:
+		case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+		case GraphPackage.GRAPH__NODE_LABELS:
+			fireNotifyChanged(new ViewerNotification(notification, notification
+					.getNotifier(), true, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public void notifyChangedGen(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Graph.class)) {
+			case GraphPackage.GRAPH__EDGES:
+			case GraphPackage.GRAPH__NODES:
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+			case GraphPackage.GRAPH__NODE_LABELS:
+			case GraphPackage.GRAPH__NUM_EDGES:
+			case GraphPackage.GRAPH__NUM_NODES:
+			case GraphPackage.GRAPH__NUM_GRAPH_LABELS:
+			case GraphPackage.GRAPH__NUM_NODE_LABELS:
+			case GraphPackage.GRAPH__NUM_DYNAMIC_LABELS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case GraphPackage.GRAPH__UNRESOLVED_IDENTIFIABLES:
+			case GraphPackage.GRAPH__DECORATORS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+	
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (children != null) {
+			for (Iterator<TransientGraphItemProvider> iter = children.iterator(); iter.hasNext();) {
+				((IDisposable) iter.next()).dispose();
+			}
+		}
+	}
+
+	/**
+	 * This class is extended by classes that are item providers for "Non-Model
+	 * Intermediary View Objects". It follows the pattern described in the book
+	 * "Eclipse Modeling Framework", pages 369-378.
+	 * 
+	 * This is NOT a generated class.
+	 */
+	public static abstract class TransientGraphItemProvider extends
+			ItemProviderAdapter implements IEditingDomainItemProvider,
+			IStructuredItemContentProvider, ITreeItemContentProvider,
+			IItemLabelProvider, IItemPropertySource {
+
+		/**
+		 * @param adapterFactory
+		 */
+		public TransientGraphItemProvider(AdapterFactory adapterFactory,
+				final Graph graph) {
+			super(adapterFactory);
+			graph.eAdapters().add(this);
+		} // TransientGraphItemProvider
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildrenFeatures(java.lang.Object)
+		 */
+		@Override
+		protected Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+			if (childrenFeatures == null) {
+				super.getChildrenFeatures(object);
+				childrenFeatures.add(getMapReference());
+			}
+			return childrenFeatures;
+		} // getChildrenFeatures
+
+		
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getFeatureValue(org.eclipse.emf.ecore.EObject,
+		 *      org.eclipse.emf.ecore.EStructuralFeature)
+		 */
+		@Override
+		protected Object getFeatureValue(EObject object,
+				EStructuralFeature feature) {
+			if (object == null) {
+				// Yes
+				return ((Graph) target).eGet(feature);
+			} // if
+			else {
+				return super.getFeatureValue(object, feature);
+			}
+		} // getFeatureValue
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getParent(java.lang.Object)
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return target;
+		} // getParent
+
+		/**
+		 * This assumes that all children are members of a map of {@link Identifiable}s
+		 */
+		@Override
+		public Collection<Identifiable> getChildren(Object object) {
+			final Graph graph = (Graph) target;
+			final List<Identifiable> children = new ArrayList<Identifiable>();
+			children.addAll(  (getIdentifiableMap(graph).values()));
+			Collections.sort(children);
+			return children;
+		} // getChildren
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getText(java.lang.Object)
+		 */
+		@Override
+		public String getText(Object object) {
+			final StringBuilder sb = new StringBuilder(getText());
+			sb.append(" (");
+			sb.append(Integer.toString(getIdentifiableMap((Graph) target)
+					.size()));
+			sb.append(")");
+			return sb.toString();
+		} // getText
+
+		/**
+		 */
+		@Override
+		protected String getFeatureText(Object feature) {
+			return super.getFeatureText(target);
+		} // getFeatureText
+
+		/**
+		 * This redirects the call to the "target" (i.e., the Graph), it then
+		 * returns the child descriptors which would include the Transient Graph
+		 * Item providers such as this one.
+		 */
+		@Override
+		public Collection<?> getNewChildDescriptors(Object object,
+				EditingDomain editingDomain, Object sibling) {
+			return super.getNewChildDescriptors(target, editingDomain, sibling);
+		} // getNewChildDescriptors
+
+		/**
+		 * Return the resource locator for this item provider's resources.
+		 */
+		@Override
+		public ResourceLocator getResourceLocator() {
+			return GraphEditPlugin.INSTANCE;
+		}
+
+		/**
+		 * @return the name of the Transient Graph Item Provider. (e.g.,
+		 *         "Edges")
+		 */
+		abstract protected String getText();
+
+		/**
+		 * @param graph
+		 *            the graph that will have a child added to it.
+		 * @return the map of <code>Identifiable</code>s that associated with this
+		 *         item provider.
+		 */
+		abstract protected EMap<URI,? extends Identifiable> getIdentifiableMap(Graph graph);
+
+		/**
+		 * Create the appropriate map entry to add to the map.
+		 * 
+		 * @param key
+		 *            the URI that uniquely identifies the
+		 *            <code>Identifiable</code>
+		 * @param value
+		 *            the value of the map entry
+		 * @return a MapEntry instance
+		 */
+		abstract protected EObject getMapEntry(final URI key,
+				final Identifiable value);
+
+		/**
+		 * @return the StructuralFeature that represents the "value" of the MapEntry
+		 */
+		abstract  protected EStructuralFeature getMapEntryValueEReference();
+		
+		/**
+		 * @return the meta-reference to the feature of the graph that is the
+		 *         map
+		 */
+		abstract protected EReference getMapReference();
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createRemoveCommand(org.eclipse.emf.edit.domain.EditingDomain,
+		 *      org.eclipse.emf.ecore.EObject,
+		 *      org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection)
+		 */
+		@Override
+		protected Command createRemoveCommand(EditingDomain domain,
+				EObject owner, EStructuralFeature feature, Collection<?> collection) {
+			return createWrappedCommand(super.createRemoveCommand(domain,
+					owner, feature, collection), owner);
+		} // createRemoveCommand
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain,
+		 *      org.eclipse.emf.ecore.EObject,
+		 *      org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection,
+		 *      int)
+		 */
+		@Override
+		protected Command createAddCommand(EditingDomain domain, EObject owner,
+				EStructuralFeature feature, Collection<?> collection, int index) {
+			return createWrappedCommand(super.createAddCommand(domain, owner,
+					feature, collection, index), owner);
+		} // createAddCommand
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain,
+		 *      java.lang.Object, float, int, int, java.util.Collection)
+		 */
+		@Override
+		protected Command createDragAndDropCommand(EditingDomain domain,
+				Object owner, float location, int operations, int operation,
+				Collection<?> collection) {
+			Command retValue = null;
+			if (new AddCommand(domain, (EObject) target, getMapReference(),
+					collection).canExecute()) {
+				retValue = super.createDragAndDropCommand(domain, target,
+						location, operations, operation, collection);
+			} else {
+				retValue = UnexecutableCommand.INSTANCE;
+			}
+			return retValue;
+		} // createDragAndDropCommand
+
+		/**
+		 * Create a CreateChildCommand. It will be used to determine if a child
+		 * can be added. If "canExecute" is false, then the menu entry will be
+		 * grayed out.
+		 */
+		@Override
+		protected Command createCreateChildCommand(EditingDomain domain,
+				EObject owner, EStructuralFeature feature, Object value,
+				int index, Collection<?> collection) {
+
+			Command retValue = null;
+
+			// Is the child an Identifiable?
+			if (!(value instanceof Identifiable)) {
+				// No
+				retValue = super.createCreateChildCommand(domain, owner,
+						feature, value, index, collection);
+			} else {
+				// Yes
+				retValue = new CreateChildCommand(domain, owner, feature,
+						value, index, collection, this) {
+					@Override
+					protected Command createCommand() {
+
+						Command result = null;
+
+						Graph graph = (Graph) target;
+						Identifiable newChildIdentifiable = (Identifiable) child;
+						final URI uri = newChildIdentifiable.getURI();
+
+						// Does the Edge Map already contain an entry for the
+						// edge's URI?
+						Identifiable existingIdentifiable = getIdentifiableMap(
+								graph).get(uri);
+
+						if (existingIdentifiable == null) {
+							// No
+							// There isn't an existing entry. Need to create a
+							// map entry and initialize it.
+							final EObject mapEntry = getMapEntry(uri,
+									newChildIdentifiable);
+
+							// Now, we need to put the entry we just created
+							// into the map
+							result = new AddCommand(domain, graph,
+									getMapReference(), mapEntry);
+
+						} // if no existing entry
+						else {
+							// Yes
+							// Existing label with the same URI as the one to be
+							// added. Create the command that will set the value
+							// to the new label
+							final EObject mapEntry = existingIdentifiable
+									.eContainer();
+							result = new SetCommand(
+									domain,
+									mapEntry, 
+									getMapEntryValueEReference(),
+									newChildIdentifiable);
+						} // else
+						
+						return result;
+					} // createCommand
+
+					
+				}; // CreateChildCommand
+
+			} // else
+			return retValue;
+
+		} // createCreateChildCommand
+
+		/**
+		 * 
+		 * @param command
+		 *            the command to be wrapped
+		 * @param owner
+		 *            the owner
+		 * @return
+		 */
+		protected Command createWrappedCommand(Command command,
+				final EObject owner) {
+			return new CommandWrapper(command) {
+				@Override
+				public Collection<?> getAffectedObjects() {
+					Collection<?> affected = super.getAffectedObjects();
+					if (affected.contains(owner)) {
+						affected = Collections
+								.singleton(TransientGraphItemProvider.this);
+					}
+					return affected;
+				} // getAffectedObjects
+			};
+		} // createWrappedCommand
+
+	} // TransientGraphItemProvider
+
+	/**
+	 * This class represents a "Non-Model Intermediary View Object". It
+	 * represents the "Edges" of the graph.
+	 */
+	public static class EdgesItemProvider extends TransientGraphItemProvider {
+
+		/**
+		 * @param adapterFactory
+		 * @param graph
+		 *            the graph that the Edges belong to
+		 */
+		public EdgesItemProvider(AdapterFactory adapterFactory, Graph graph) {
+			super(adapterFactory, graph);
+		} // EdgesItemProvider
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getImage(java.lang.Object)
+		 */
+		@Override
+		public Object getImage(Object object) {
+			return overlayImage(object, getResourceLocator().getImage(
+					"full/customobj16/Edge"));
+		}
+
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		@Override
+		public void notifyChanged(Notification msg) {
+			switch (msg.getFeatureID(Graph.class)) {
+			case GraphPackage.GRAPH__EDGES:
+				fireNotifyChanged(new NotificationWrapper(this, msg));
+				return;
+			} // switch
+		} // notifyChanged
+
+		/**
+		 * This determines the contents of the list of "children" that can be
+		 * added to the Edges. We modify
+		 * {@link GraphItemProvider#collectNewChildDescriptors(Collection, Object)}
+		 * so that it doesn't return "Edges" as an option to be created under
+		 * Graph. Of those children, this is where we create "Edges".
+		 * 
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#collectNewChildDescriptors(java.util.Collection,
+		 *      java.lang.Object)
+		 */
+		@Override
+		protected void collectNewChildDescriptors(
+				Collection<Object> newChildDescriptors, Object object) {
+			super.collectNewChildDescriptors(newChildDescriptors, object);
+			newChildDescriptors.add(createChildParameter(GraphPackage.eINSTANCE
+					.getGraph_Edges(), GraphFactory.eINSTANCE.createEdge()));
+		} // collectNewChildDescriptors
+
+		/**
+		 * @see TransientGraphItemProvider#getText(java.lang.Object)
+		 */
+		@Override
+		protected String getText() {
+			// TODO NLS "Edges"
+			return "Edges";
+		} // getText
+
+		/**
+		 * @see org.eclipse.stem.graph.provider.TransientGraphItemProvider#getIdentifiableMap(org.eclipse.stem.graph.Graph)
+		 */
+		@Override
+		protected EMap<URI,Edge> getIdentifiableMap(Graph graph) {
+			return graph.getEdges();
+		} // getIdentifiableMap
+
+		@Override
+		protected EObject getMapEntry(URI key, Identifiable value) {
+
+			// Use reflection since
+			// there is no generated API for map entries.
+			final EObject retValue = GraphFactory.eINSTANCE
+					.create(GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY);
+			retValue
+					.eSet(GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY__KEY, key);
+			retValue.eSet(GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY__VALUE,
+					value);
+			return retValue;
+
+		} // getMapEntry
+		
+		@Override
+		protected EStructuralFeature getMapEntryValueEReference() {
+			return GraphPackage.eINSTANCE.getURIToEdgeMapEntry_Value();
+		} // getMapEntryValueEReference
+		
+
+		/**
+		 * @see org.eclipse.stem.graph.provider.TransientGraphItemProvider#getMapReference()
+		 */
+		@Override
+		protected EReference getMapReference() {
+			return GraphPackage.Literals.GRAPH__EDGES;
+		} // getMapReference
+
+	} // EdgesItemProvider
+
+	/**
+	 * This class represents a "Non-Model Intermediary View Object". It
+	 * represents the "Nodes" of the graph.
+	 */
+	protected static class NodesItemProvider extends TransientGraphItemProvider {
+
+		/**
+		 * @param adapterFactory
+		 * @param graph
+		 */
+		public NodesItemProvider(AdapterFactory adapterFactory, Graph graph) {
+			super(adapterFactory, graph);
+		}
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getImage(java.lang.Object)
+		 */
+		@Override
+		public Object getImage(Object object) {
+			return overlayImage(object, getResourceLocator().getImage(
+					"full/customobj16/Node"));
+		}
+
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		@Override
+		public void notifyChanged(Notification msg) {
+			switch (msg.getFeatureID(Graph.class)) {
+			case GraphPackage.GRAPH__NODES:
+				fireNotifyChanged(new NotificationWrapper(this, msg));
+				return;
+			} // switch
+		} // notifyChanged
+
+		/**
+		 * This determines the contents of the list of "children" that can be
+		 * added to the Nodes. We modify
+		 * {@link GraphItemProvider#collectNewChildDescriptors(Collection, Object)}
+		 * so that it doesn't return "Nodes" as an option to be created under
+		 * Graph. Of those children, this is where we create "Nodes".
+		 * 
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#collectNewChildDescriptors(java.util.Collection,
+		 *      java.lang.Object)
+		 */
+		@Override
+		protected void collectNewChildDescriptors(
+				Collection<Object> newChildDescriptors, Object object) {
+			super.collectNewChildDescriptors(newChildDescriptors, object);
+			newChildDescriptors.add(createChildParameter(GraphPackage.eINSTANCE
+					.getGraph_Nodes(), GraphFactory.eINSTANCE.createNode()));
+		} // collectNewChildDescriptors
+
+		/**
+		 * @see TransientGraphItemProvider#getText(java.lang.Object)
+		 */
+		@Override
+		protected String getText() {
+			// TODO NLS "Nodes"
+			return "Nodes";
+		} // getText
+
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getIdentifiableMap(org.eclipse.stem.graph.Graph)
+		 */
+		@Override
+		protected EMap<URI,Node> getIdentifiableMap(Graph graph) {
+			return graph.getNodes();
+		}
+
+		@Override
+		protected EObject getMapEntry(URI key, Identifiable value) {
+
+			// Use reflection since
+			// there is no generated API for map entries.
+			final EObject retValue = GraphFactory.eINSTANCE
+					.create(GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY);
+			retValue
+					.eSet(GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY__KEY, key);
+			retValue.eSet(GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY__VALUE,
+					value);
+			return retValue;
+
+		} // getMapEntry
+		
+		@Override
+		protected EStructuralFeature getMapEntryValueEReference() {
+			return GraphPackage.eINSTANCE.getURIToNodeMapEntry_Value();
+		} // getMapEntryValueEReference
+		
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getMapReference()
+		 */
+		@Override
+		protected EReference getMapReference() {
+			return GraphPackage.Literals.GRAPH__NODES;
+		}
+
+	} // NodesItemProvider
+
+	/**
+	 * This class represents a "Non-Model Intermediary View Object". It
+	 * represents the "Node Labels" of the graph.
+	 */
+	protected static class NodeLabelsItemProvider extends
+			TransientGraphItemProvider {
+
+		/**
+		 * @param adapterFactory
+		 * @param graph
+		 */
+		public NodeLabelsItemProvider(AdapterFactory adapterFactory, Graph graph) {
+			super(adapterFactory, graph);
+		}
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getImage(java.lang.Object)
+		 */
+		@Override
+		public Object getImage(Object object) {
+			return overlayImage(object, getResourceLocator().getImage(
+					"full/customobj16/StaticLabel"));
+		} // getImage
+
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		@Override
+		public void notifyChanged(Notification msg) {
+			switch (msg.getFeatureID(Graph.class)) {
+			case GraphPackage.GRAPH__NODE_LABELS:
+				fireNotifyChanged(new NotificationWrapper(this, msg));
+				return;
+			} // switch
+		} // notifyChanged
+
+		/**
+		 * This determines the contents of the list of "children" that can be
+		 * added to the Node Labels. We modify
+		 * {@link GraphItemProvider#collectNewChildDescriptors(Collection, Object)}
+		 * so that it doesn't return "Node Labels" as an option to be created
+		 * under Graph. Of those children, this is where we create "Node
+		 * Labels".
+		 * 
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#collectNewChildDescriptors(java.util.Collection,
+		 *      java.lang.Object)
+		 */
+		@Override
+		protected void collectNewChildDescriptors(
+				Collection<Object> newChildDescriptors, Object object) {
+			super.collectNewChildDescriptors(newChildDescriptors, object);
+//			 TODO fix GraphItenProvider.collectNewChildDescriptors
+//			newChildDescriptors.add(createChildParameter(GraphPackage.eINSTANCE
+//					.getGraph_NodeLabels(), GraphFactory.eINSTANCE
+//					.createLabel()));
+		} // collectNewChildDescriptors
+
+		/**
+		 * @see TransientGraphItemProvider#getText(java.lang.Object)
+		 */
+		@Override
+		protected String getText() {
+			// TODO NLS "Node Labels"
+			return "Node Labels";
+		} // getText
+
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getIdentifiableMap(org.eclipse.stem.graph.Graph)
+		 */
+		@Override
+		protected EMap<URI,NodeLabel> getIdentifiableMap(Graph graph) {
+			return graph.getNodeLabels();
+		}
+
+		@Override
+		protected EObject getMapEntry(URI key, Identifiable value) {
+
+			// Use reflection since
+			// there is no generated API for map entries.
+			final EObject retValue = GraphFactory.eINSTANCE
+					.create(GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY);
+			retValue
+					.eSet(GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY__KEY, key);
+			retValue.eSet(GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY__VALUE,
+					value);
+			return retValue;
+
+		} // getMapEntry
+		
+		@Override
+		protected EStructuralFeature getMapEntryValueEReference() {
+			return GraphPackage.eINSTANCE.getURIToNodeLabelMapEntry_Value();
+		} // getMapEntryValueEReference
+		
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getMapReference()
+		 */
+		@Override
+		protected EReference getMapReference() {
+			return GraphPackage.Literals.GRAPH__NODE_LABELS;
+		}
+
+	} // NodeLabelsItemProvider
+
+	/**
+	 * This class represents a "Non-Model Intermediary View Object". It
+	 * represents the "Graph Labels" of the graph.
+	 */
+	protected static class GraphLabelsItemProvider extends
+			TransientGraphItemProvider {
+
+		/**
+		 * @param adapterFactory
+		 * @param graph
+		 */
+		public GraphLabelsItemProvider(AdapterFactory adapterFactory,
+				Graph graph) {
+			super(adapterFactory, graph);
+		}
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getImage(java.lang.Object)
+		 */
+		@Override
+		public Object getImage(Object object) {
+			return overlayImage(object, getResourceLocator().getImage(
+					"full/customobj16/StaticLabel"));
+		} // getImage
+
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		@Override
+		public void notifyChanged(Notification msg) {
+			switch (msg.getFeatureID(Graph.class)) {
+			case GraphPackage.GRAPH__GRAPH_LABELS:
+				fireNotifyChanged(new NotificationWrapper(this, msg));
+				return;
+			} // switch
+		} // notifyChanged
+
+		/**
+		 * This determines the contents of the list of "children" that can be
+		 * added to the Graph Labels. We modify
+		 * {@link GraphItemProvider#collectNewChildDescriptors(Collection, Object)}
+		 * so that it doesn't return "Graph Labels" as an option to be created
+		 * under Graph. Of those children, this is where we create "Graph
+		 * Labels".
+		 * 
+		 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#collectNewChildDescriptors(java.util.Collection,
+		 *      java.lang.Object)
+		 */
+		@Override
+		protected void collectNewChildDescriptors(
+				Collection<Object> newChildDescriptors, Object object) {
+			super.collectNewChildDescriptors(newChildDescriptors, object);
+			
+//			 TODO fix GraphLabelsItemProvider.collectNewChildDescriptors
+//			newChildDescriptors.add(createChildParameter(GraphPackage.eINSTANCE
+//					.getGraph_GraphLabels(), GraphFactory.eINSTANCE
+//					.createLabel()));
+		} // collectNewChildDescriptors
+
+		/**
+		 * @see TransientGraphItemProvider#getText(java.lang.Object)
+		 */
+		@Override
+		protected String getText() {
+			// TODO NLS "GraphLabels"
+			return "Graph Labels";
+		} // getText
+
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getIdentifiableMap(org.eclipse.stem.graph.Graph)
+		 */
+		@Override
+		protected EMap<URI,Label> getIdentifiableMap(Graph graph) {
+			return graph.getGraphLabels();
+		}
+
+		@Override
+		protected EObject getMapEntry(URI key, Identifiable value) {
+
+			// Use reflection since
+			// there is no generated API for map entries.
+			final EObject retValue = GraphFactory.eINSTANCE
+					.create(GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY);
+			retValue
+					.eSet(GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY__KEY, key);
+			retValue.eSet(GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY__VALUE,
+					value);
+			return retValue;
+
+		} // getMapEntry
+		
+		@Override
+		protected EStructuralFeature getMapEntryValueEReference() {
+			return GraphPackage.eINSTANCE.getURIToLabelMapEntry_Value();
+		} // getMapEntryValueEReference
+		
+		/**
+		 * @see org.eclipse.stem.graph.provider.GraphItemProvider.TransientGraphItemProvider#getMapReference()
+		 */
+		@Override
+		protected EReference getMapReference() {
+			return GraphPackage.Literals.GRAPH__GRAPH_LABELS;
+		}
+
+	} // GraphLabelsItemProvider
+
+} // GraphItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProviderAdapterFactory.java
new file mode 100644
index 0000000..9496e91
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphItemProviderAdapterFactory.java
@@ -0,0 +1,264 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.Disposable;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.util.GraphAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphItemProviderAdapterFactory extends GraphAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the item providers created, so that they can be {@link #dispose disposed}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Disposable disposable = new Disposable();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.graph.Edge} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EdgeItemProvider edgeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.graph.Edge}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEdgeAdapter() {
+		if (edgeItemProvider == null) {
+			edgeItemProvider = new EdgeItemProvider(this);
+		}
+
+		return edgeItemProvider;
+	}
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.graph.Graph}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createGraphAdapter() {
+		return new GraphItemProvider(this);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.graph.Node} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NodeItemProvider nodeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.graph.Node}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createNodeAdapter() {
+		if (nodeItemProvider == null) {
+			nodeItemProvider = new NodeItemProvider(this);
+		}
+
+		return nodeItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Associates an adapter with a notifier via the base implementation, then records it to ensure it will be disposed.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void associate(Adapter adapter, Notifier target) {
+		super.associate(adapter, target);
+		if (adapter != null) {
+			disposable.add(adapter);
+		}
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		disposable.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphTimeProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphTimeProviderAdapterFactory.java
new file mode 100644
index 0000000..e2e7eeb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/GraphTimeProviderAdapterFactory.java
@@ -0,0 +1,150 @@
+// GraphTimeProviderAdapterFactory.java
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.adapters.time.TimeProviderAdapter;
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.util.GraphAdapterFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This class is an {@link TimeProviderAdapterFactory}.
+ */
+public class GraphTimeProviderAdapterFactory extends GraphAdapterFactory
+		implements TimeProviderAdapterFactory {
+
+	/**
+	 * This keeps track of the root adapter factory that delegates to this
+	 * adapter factory.
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link
+	 * org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * Default Constructor
+	 */
+	public GraphTimeProviderAdapterFactory() {
+		super();
+		TimeProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#
+	 * 	createGraphAdapter()
+	 */
+	@Override
+	public Adapter createGraphAdapter() {
+		return new GraphTimeProvider();
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse
+	 * 	.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void addListener(final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse
+	 * 	.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void removeListener(
+			final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.
+	 * 	eclipse.emf.common.notify.Notification)
+	 */
+	public void fireNotifyChanged(final Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#
+	 * 	getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory
+				.getRootAdapterFactory();
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#
+	 * 	setParentAdapterFactory
+	 * 	(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(
+			final ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory
+	 * 	#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == TimeProvider.class || super.isFactoryForType(type);
+	} // isFactoryForType
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * This class is a {@link TimeProvider} for {@link Graph} instances. It
+	 * provides a time value for the graph. The value is the time that the
+	 * {@link LabelValue}s of {@link DynamicLabel} were last updated.
+	 */
+	private static class GraphTimeProvider extends TimeProviderAdapter
+			implements TimeProvider {
+		/**
+		 * @see org.eclipse.stem.adapters.time.TimeProviderAdapter#getTime()
+		 */
+		@Override
+		public STEMTime getTime() {
+			Graph graph = (Graph)getTarget();
+			return graph.getTime();
+		}
+
+	} // GraphTimeProvider
+
+} // GraphTimeProviderAdapterFactory
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelItemProvider.java
new file mode 100644
index 0000000..7c11184
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelItemProvider.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+//import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.Label} object.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @generated
+ */
+public class LabelItemProvider extends IdentifiableItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public LabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addURIOfIdentifiableToBeLabeledPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the URI Of Identifiable To Be Labeled feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addURIOfIdentifiableToBeLabeledPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Label_uRIOfIdentifiableToBeLabeled_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Label_uRIOfIdentifiableToBeLabeled_feature", "_UI_Label_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(GraphPackage.Literals.LABEL__CURRENT_VALUE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * @returns Label.gif. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage(
+				"full/customobj16/StaticLabel"));
+	} // getImage
+
+	/**
+	 * This returns the label text for the adapted class. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String getText(Object object) {
+		return super.getText(object);
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Label)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Label_type") : //$NON-NLS-1$
+			getString("_UI_Label_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Label.class)) {
+			case GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case GraphPackage.LABEL__CURRENT_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelValueItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelValueItemProvider.java
new file mode 100644
index 0000000..347acca
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/LabelValueItemProvider.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.LabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelValueItemProvider
+	extends ItemProviderAdapter
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_LabelValue_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeItemProvider.java
new file mode 100644
index 0000000..eca696b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeItemProvider.java
@@ -0,0 +1,190 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+//import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.Node} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodeItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addEdgesPropertyDescriptor(object);
+			addLabelsPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Edges feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEdgesPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Node_edges_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Node_edges_feature", "_UI_Node_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.NODE__EDGES,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Labels feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLabelsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Node_labels_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Node_labels_feature", "_UI_Node_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.NODE__LABELS,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns Node.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Node"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String getText(Object object) {
+		return super.getText(object);
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Node)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Node_type") : //$NON-NLS-1$
+			getString("_UI_Node_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeLabelItemProvider.java
new file mode 100644
index 0000000..b8c57d5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/NodeLabelItemProvider.java
@@ -0,0 +1,149 @@
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.NodeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodeLabelItemProvider
+	extends LabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNodePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Node feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_NodeLabel_node_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_NodeLabel_node_feature", "_UI_NodeLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 GraphPackage.Literals.NODE_LABEL__NODE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns NodeLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/NodeLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((NodeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_NodeLabel_type") : //$NON-NLS-1$
+			getString("_UI_NodeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticEdgeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticEdgeLabelItemProvider.java
new file mode 100644
index 0000000..fc38e6f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticEdgeLabelItemProvider.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+//import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+//import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.StaticEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StaticEdgeLabelItemProvider
+	extends EdgeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StaticEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+			StaticLabelItemProvider.addCurrentValueProperties(object,itemPropertyDescriptors);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((StaticEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StaticEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_StaticEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticLabelItemProvider.java
new file mode 100644
index 0000000..29f0f03
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticLabelItemProvider.java
@@ -0,0 +1,128 @@
+package org.eclipse.stem.core.graph.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.StaticLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.StaticLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StaticLabelItemProvider
+	extends LabelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StaticLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	public static void addCurrentValueProperties(Object object,
+			final List<IItemPropertyDescriptor> itemPropertyDescriptors) {
+		final StaticLabel snl = (StaticLabel) object;
+		final LabelValue lv = (LabelValue) snl
+				.eGet(GraphPackage.Literals.LABEL__CURRENT_VALUE);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(lv, IItemPropertySource.class);
+		if (propertySource != null) {
+			final List<IItemPropertyDescriptor> properties = propertySource
+					.getPropertyDescriptors(lv);
+			itemPropertyDescriptors.addAll(properties);
+		}
+	} // addCurrentValueProperties
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((StaticLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StaticLabel_type") : //$NON-NLS-1$
+			getString("_UI_StaticLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticNodeLabelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticNodeLabelItemProvider.java
new file mode 100644
index 0000000..f76c781
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/provider/StaticNodeLabelItemProvider.java
@@ -0,0 +1,122 @@
+package org.eclipse.stem.core.graph.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.graph.StaticNodeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StaticNodeLabelItemProvider
+	extends NodeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StaticNodeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+			StaticLabelItemProvider.addCurrentValueProperties(object,itemPropertyDescriptors);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((StaticNodeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StaticNodeLabel_type") : //$NON-NLS-1$
+			getString("_UI_StaticNodeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphAdapterFactory.java
new file mode 100644
index 0000000..15dc00f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphAdapterFactory.java
@@ -0,0 +1,540 @@
+package org.eclipse.stem.core.graph.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.graph.*;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.graph.GraphPackage
+ * @generated
+ */
+public class GraphAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static GraphPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = GraphPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GraphSwitch<Adapter> modelSwitch =
+		new GraphSwitch<Adapter>() {
+			@Override
+			public Adapter caseDynamicLabel(DynamicLabel object) {
+				return createDynamicLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicNodeLabel(DynamicNodeLabel object) {
+				return createDynamicNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseEdge(Edge object) {
+				return createEdgeAdapter();
+			}
+			@Override
+			public Adapter caseGraph(Graph object) {
+				return createGraphAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseNode(Node object) {
+				return createNodeAdapter();
+			}
+			@Override
+			public Adapter caseNodeLabel(NodeLabel object) {
+				return createNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseStaticNodeLabel(StaticNodeLabel object) {
+				return createStaticNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseUnresolvedIdentifiable(UnresolvedIdentifiable object) {
+				return createUnresolvedIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseURIToIdentifiableMapEntry(Map.Entry<URI, Identifiable> object) {
+				return createURIToIdentifiableMapEntryAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+				return createDynamicEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseEdgeLabel(EdgeLabel object) {
+				return createEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseStaticEdgeLabel(StaticEdgeLabel object) {
+				return createStaticEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseURIToEdgeMapEntry(Map.Entry<URI, Edge> object) {
+				return createURIToEdgeMapEntryAdapter();
+			}
+			@Override
+			public Adapter caseURIToNodeMapEntry(Map.Entry<URI, Node> object) {
+				return createURIToNodeMapEntryAdapter();
+			}
+			@Override
+			public Adapter caseURIToLabelMapEntry(Map.Entry<URI, Label> object) {
+				return createURIToLabelMapEntryAdapter();
+			}
+			@Override
+			public Adapter caseURIToNodeLabelMapEntry(Map.Entry<URI, NodeLabel> object) {
+				return createURIToNodeLabelMapEntryAdapter();
+			}
+			@Override
+			public Adapter caseStaticLabel(StaticLabel object) {
+				return createStaticLabelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	public Adapter createDynamicLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Edge <em>Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Edge
+	 * @generated
+	 */
+	public Adapter createEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Graph <em>Graph</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Graph
+	 * @generated
+	 */
+	public Adapter createGraphAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @generated
+	 */
+	public Adapter createNodeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.UnresolvedIdentifiable <em>Unresolved Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.UnresolvedIdentifiable
+	 * @generated
+	 */
+	public Adapter createUnresolvedIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>URI To Identifiable Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createURIToIdentifiableMapEntryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicEdgeLabel <em>Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicEdgeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	public Adapter createEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticEdgeLabel <em>Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticEdgeLabel
+	 * @generated
+	 */
+	public Adapter createStaticEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>URI To Edge Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createURIToEdgeMapEntryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>URI To Node Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createURIToNodeMapEntryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>URI To Label Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createURIToLabelMapEntryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>URI To Node Label Map Entry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createURIToNodeLabelMapEntryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticLabel <em>Static Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticLabel
+	 * @generated
+	 */
+	public Adapter createStaticLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicNodeLabel <em>Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicNodeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticNodeLabel <em>Static Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticNodeLabel
+	 * @generated
+	 */
+	public Adapter createStaticNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	public Adapter createNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //GraphAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphSwitch.java
new file mode 100644
index 0000000..e4a1cf6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/graph/util/GraphSwitch.java
@@ -0,0 +1,634 @@
+package org.eclipse.stem.core.graph.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.graph.*;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.graph.GraphPackage
+ * @generated
+ */
+public class GraphSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static GraphPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphSwitch() {
+		if (modelPackage == null) {
+			modelPackage = GraphPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case GraphPackage.DYNAMIC_LABEL: {
+				DynamicLabel dynamicLabel = (DynamicLabel)theEObject;
+				T1 result = caseDynamicLabel(dynamicLabel);
+				if (result == null) result = caseLabel(dynamicLabel);
+				if (result == null) result = caseIdentifiable(dynamicLabel);
+				if (result == null) result = caseComparable(dynamicLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.DYNAMIC_NODE_LABEL: {
+				DynamicNodeLabel dynamicNodeLabel = (DynamicNodeLabel)theEObject;
+				T1 result = caseDynamicNodeLabel(dynamicNodeLabel);
+				if (result == null) result = caseDynamicLabel(dynamicNodeLabel);
+				if (result == null) result = caseNodeLabel(dynamicNodeLabel);
+				if (result == null) result = caseLabel(dynamicNodeLabel);
+				if (result == null) result = caseIdentifiable(dynamicNodeLabel);
+				if (result == null) result = caseComparable(dynamicNodeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.EDGE: {
+				Edge edge = (Edge)theEObject;
+				T1 result = caseEdge(edge);
+				if (result == null) result = caseIdentifiable(edge);
+				if (result == null) result = caseModifiable(edge);
+				if (result == null) result = caseComparable(edge);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.GRAPH: {
+				Graph graph = (Graph)theEObject;
+				T1 result = caseGraph(graph);
+				if (result == null) result = caseIdentifiable(graph);
+				if (result == null) result = caseComparable(graph);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.LABEL: {
+				Label label = (Label)theEObject;
+				T1 result = caseLabel(label);
+				if (result == null) result = caseIdentifiable(label);
+				if (result == null) result = caseComparable(label);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.LABEL_VALUE: {
+				LabelValue labelValue = (LabelValue)theEObject;
+				T1 result = caseLabelValue(labelValue);
+				if (result == null) result = caseSanityChecker(labelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.NODE: {
+				Node node = (Node)theEObject;
+				T1 result = caseNode(node);
+				if (result == null) result = caseIdentifiable(node);
+				if (result == null) result = caseComparable(node);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.NODE_LABEL: {
+				NodeLabel nodeLabel = (NodeLabel)theEObject;
+				T1 result = caseNodeLabel(nodeLabel);
+				if (result == null) result = caseLabel(nodeLabel);
+				if (result == null) result = caseIdentifiable(nodeLabel);
+				if (result == null) result = caseComparable(nodeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.STATIC_NODE_LABEL: {
+				StaticNodeLabel staticNodeLabel = (StaticNodeLabel)theEObject;
+				T1 result = caseStaticNodeLabel(staticNodeLabel);
+				if (result == null) result = caseNodeLabel(staticNodeLabel);
+				if (result == null) result = caseStaticLabel(staticNodeLabel);
+				if (result == null) result = caseLabel(staticNodeLabel);
+				if (result == null) result = caseModifiable(staticNodeLabel);
+				if (result == null) result = caseIdentifiable(staticNodeLabel);
+				if (result == null) result = caseComparable(staticNodeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.UNRESOLVED_IDENTIFIABLE: {
+				UnresolvedIdentifiable unresolvedIdentifiable = (UnresolvedIdentifiable)theEObject;
+				T1 result = caseUnresolvedIdentifiable(unresolvedIdentifiable);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.URI_TO_IDENTIFIABLE_MAP_ENTRY: {
+				@SuppressWarnings("unchecked") Map.Entry<URI, Identifiable> uriToIdentifiableMapEntry = (Map.Entry<URI, Identifiable>)theEObject;
+				T1 result = caseURIToIdentifiableMapEntry(uriToIdentifiableMapEntry);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.DYNAMIC_EDGE_LABEL: {
+				DynamicEdgeLabel dynamicEdgeLabel = (DynamicEdgeLabel)theEObject;
+				T1 result = caseDynamicEdgeLabel(dynamicEdgeLabel);
+				if (result == null) result = caseDynamicLabel(dynamicEdgeLabel);
+				if (result == null) result = caseEdgeLabel(dynamicEdgeLabel);
+				if (result == null) result = caseLabel(dynamicEdgeLabel);
+				if (result == null) result = caseIdentifiable(dynamicEdgeLabel);
+				if (result == null) result = caseComparable(dynamicEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.EDGE_LABEL: {
+				EdgeLabel edgeLabel = (EdgeLabel)theEObject;
+				T1 result = caseEdgeLabel(edgeLabel);
+				if (result == null) result = caseLabel(edgeLabel);
+				if (result == null) result = caseIdentifiable(edgeLabel);
+				if (result == null) result = caseComparable(edgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.STATIC_EDGE_LABEL: {
+				StaticEdgeLabel staticEdgeLabel = (StaticEdgeLabel)theEObject;
+				T1 result = caseStaticEdgeLabel(staticEdgeLabel);
+				if (result == null) result = caseEdgeLabel(staticEdgeLabel);
+				if (result == null) result = caseStaticLabel(staticEdgeLabel);
+				if (result == null) result = caseLabel(staticEdgeLabel);
+				if (result == null) result = caseModifiable(staticEdgeLabel);
+				if (result == null) result = caseIdentifiable(staticEdgeLabel);
+				if (result == null) result = caseComparable(staticEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.URI_TO_EDGE_MAP_ENTRY: {
+				@SuppressWarnings("unchecked") Map.Entry<URI, Edge> uriToEdgeMapEntry = (Map.Entry<URI, Edge>)theEObject;
+				T1 result = caseURIToEdgeMapEntry(uriToEdgeMapEntry);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.URI_TO_NODE_MAP_ENTRY: {
+				@SuppressWarnings("unchecked") Map.Entry<URI, Node> uriToNodeMapEntry = (Map.Entry<URI, Node>)theEObject;
+				T1 result = caseURIToNodeMapEntry(uriToNodeMapEntry);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.URI_TO_LABEL_MAP_ENTRY: {
+				@SuppressWarnings("unchecked") Map.Entry<URI, Label> uriToLabelMapEntry = (Map.Entry<URI, Label>)theEObject;
+				T1 result = caseURIToLabelMapEntry(uriToLabelMapEntry);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.URI_TO_NODE_LABEL_MAP_ENTRY: {
+				@SuppressWarnings("unchecked") Map.Entry<URI, NodeLabel> uriToNodeLabelMapEntry = (Map.Entry<URI, NodeLabel>)theEObject;
+				T1 result = caseURIToNodeLabelMapEntry(uriToNodeLabelMapEntry);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case GraphPackage.STATIC_LABEL: {
+				StaticLabel staticLabel = (StaticLabel)theEObject;
+				T1 result = caseStaticLabel(staticLabel);
+				if (result == null) result = caseLabel(staticLabel);
+				if (result == null) result = caseModifiable(staticLabel);
+				if (result == null) result = caseIdentifiable(staticLabel);
+				if (result == null) result = caseComparable(staticLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicLabel(DynamicLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdge(Edge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Graph</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Graph</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraph(Graph object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNode(Node object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Unresolved Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Unresolved Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseUnresolvedIdentifiable(UnresolvedIdentifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>URI To Identifiable Map Entry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>URI To Identifiable Map Entry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseURIToIdentifiableMapEntry(Map.Entry<URI, Identifiable> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeLabel(EdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticEdgeLabel(StaticEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>URI To Edge Map Entry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>URI To Edge Map Entry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseURIToEdgeMapEntry(Map.Entry<URI, Edge> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>URI To Node Map Entry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>URI To Node Map Entry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseURIToNodeMapEntry(Map.Entry<URI, Node> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>URI To Label Map Entry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>URI To Label Map Entry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseURIToLabelMapEntry(Map.Entry<URI, Label> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>URI To Node Label Map Entry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>URI To Node Label Map Entry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseURIToNodeLabelMapEntry(Map.Entry<URI, NodeLabel> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticLabel(StaticLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicNodeLabel(DynamicNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticNodeLabel(StaticNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeLabel(NodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //GraphSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/math/BinomialDistributionUtil.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/math/BinomialDistributionUtil.java
new file mode 100644
index 0000000..416ebe3
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/math/BinomialDistributionUtil.java
@@ -0,0 +1,80 @@
+package org.eclipse.stem.core.math;
+
+
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Utility primarily used by stochastic models
+ * This technique makes a random pick from a binomial distribution.
+ * The complex part of this operationn is to compute the binomial coefficient
+ * efficiently (see for example: http://en.wikipedia.org/wiki/Binomial_distribution)
+ * In order to do the computation for large N (large S) we compute the log of the binomial coefficent
+ * so we do a sum (instead of a factorial product) and then exponentiate the result. 
+ */
+public class BinomialDistributionUtil {
+
+	 /**
+	  * Returns the random pick from a binomial dist
+	  * given 0<=rndVar<=1
+	  * This sums the binomial dist and retruns the k value with that integrated probability
+	  * @param p The probability
+	  * @param n N, (e.g. susceptible)	   
+	  * @param rndVAR Random number
+	  * @return K Random pick
+	  **/ 
+	 public static int fastPickFromBinomialDist(double p, int n, double rndVAR){
+		 if(p == 0 || n == 0) return 0;
+		 double Bsum = 0.0;
+		 // compute this once
+		 double lnFactorialN = lnFactorial(n);
+		 double lnFactorialK = 0.0;
+		 double lnFactorialN_K = lnFactorialN;
+		 int n_k = n;
+		 for(int k = 0; k <= n; k ++) {
+			 
+			 if(k>=1) {
+				 // count up
+				 lnFactorialK += Math.log((double)k);
+			 
+				 // count down for n-k
+				 lnFactorialN_K -= Math.log((double)n_k);
+				 n_k -= 1;
+			 }
+			 // do the entire computation in log space
+			 double logB = lnFactorialN - lnFactorialK - lnFactorialN_K;
+			 // now instead of multplying by p^k * (1-p)^n-k
+			 // we add
+			 // logB + k*log(p) + (n-k)*log(1-p);
+			 logB += (k*Math.log(p))  + ( (n-k) * Math.log (1-p) );
+			 // NOW we take the exponent
+			 Bsum += Math.exp(logB);
+			 if (Bsum >= rndVAR) return k;
+		 }
+		 return n;
+	 }
+	 
+	   
+	 /**
+	  * compute the log(n!)
+	  * @param n
+	  * @return log(n!)
+	  */
+	   static double lnFactorial(int n) {
+	      double retVal = 0.0;
+	
+	      for (int i = 1; i <= n; i++) {
+	    	  retVal += Math.log((double)i);
+	      }
+	       
+	      return retVal;
+	   }
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Decorator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Decorator.java
new file mode 100644
index 0000000..3d33e79
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Decorator.java
@@ -0,0 +1,214 @@
+// Decorator.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+
+/**
+ * A <code>Decorator</code> represents a computational component that can
+ * modify or "decorate" a {@link org.eclipse.stem.core.graph.Graph}.
+ * <p>
+ * The method {@link #decorateGraph(org.eclipse.stem.core.graph.Graph)} is
+ * called once for each <code>Decorator</code> instance during the creation of
+ * the canonical {@link org.eclipse.stem.core.graph.Graph} (see
+ * {@link Model#getCanonicalGraph(org.eclipse.emf.common.util.URI)}).
+ * Typically, this method would add additional {@link DynamicLabel}s to the
+ * {@link org.eclipse.stem.core.graph.Graph} under construction. For
+ * example, a disease model would be implemented as a <code>Decorator</code>
+ * and it would add {@link DynamicLabel}s to the
+ * {@link org.eclipse.stem.core.graph.Node}s of the
+ * {@link org.eclipse.stem.core.graph.Graph} that represent the state of the
+ * disease at each {@link org.eclipse.stem.core.graph.Node}.
+ * </p>
+ * <p>
+ * After the canonical {@link org.eclipse.stem.core.graph.Graph} is created,
+ * the method
+ * {@link #updateLabels(org.eclipse.stem.core.graph.Graph, STEMTime, long)}
+ * will be called once every time the
+ * {@link org.eclipse.stem.core.scenario.Scenario} is "stepped" (see
+ * {@link org.eclipse.stem.core.scenario.Scenario#step()}). The
+ * {@link DynamicLabel}s that it updates are those that were added to the
+ * {@link org.eclipse.stem.core.graph.Graph} in the
+ * {@link #decorateGraph(org.eclipse.stem.core.graph.Graph)} method call. A
+ * reference to each of those {@link DynamicLabel}s is kept in a collection
+ * (see {@link #getLabelsToUpdate()}) maintained by the <code>Decorator</code>.
+ * The {@link #updateLabels(Graph, STEMTime, long)} method computes the "next"
+ * value of all of the {@link DynamicLabel}s in that collection.
+ * </p>
+ * <p>
+ * For maximum flexibility, the nature of that
+ * {@link org.eclipse.stem.core.graph.LabelValue} and its computation are
+ * not defined or restricted. For instance, the <code>Decorator</code> could
+ * compute the {@link org.eclipse.stem.core.graph.LabelValue} from the
+ * contents of the {@link org.eclipse.stem.core.graph.Graph}, read the
+ * value from a file, obtain it from a real-time data source such as a weather
+ * station or something accessible from a web site or a web service.
+ * </p>
+ * 
+ * @model
+ */
+public interface Decorator extends Identifiable {
+
+	/**
+	 * A {@link Decorator} is enabled by default, but if it is the action of a
+	 * {@link Trigger} then it will be disabled by the {@link Trigger} until the
+	 * {@link Trigger}'s {@link Predicate} evaluates to <code>true</code>.
+	 * <p>
+	 * If the value is <code>false</code> then calls to {@link #decorateGraph()}
+	 * and {@link #updateLabels(STEMTime, long)} will be ignored.
+	 * 
+	 * @return <code>true</code> if the {@link Decorator} is enabled.
+	 * @model default="true"
+	 */
+	boolean isEnabled();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.Decorator#isEnabled <em>Enabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Enabled</em>' attribute.
+	 * @see #isEnabled()
+	 * @generated
+	 */
+	void setEnabled(boolean value);
+
+
+	/**
+	 * @return <code>true</code> if {@link #decorateGraph()} has been called and
+	 *         it has completed decorating the {@link Graph}, <code>false</code>
+	 *         otherwise.
+	 * @model default="false"
+	 */
+	boolean isGraphDecorated();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.Decorator#isGraphDecorated <em>Graph Decorated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Graph Decorated</em>' attribute.
+	 * @see #isGraphDecorated()
+	 * @generated
+	 */
+	void setGraphDecorated(boolean value);
+	
+	/**
+	 * Returns the value of the '<em><b>Progress</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Progress</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Progress</em>' attribute.
+	 * @see #setProgress(double)
+	 * @see org.eclipse.stem.core.model.ModelPackage#getDecorator_Progress()
+	 * @model default="0.0"
+	 * @generated
+	 */
+	double getProgress();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.Decorator#getProgress <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Progress</em>' attribute.
+	 * @see #getProgress()
+	 * @generated
+	 */
+	void setProgress(double value);
+
+	/**
+	 * 
+	 * @return the {@link Graph} that the <code>Decorator</code> decorates.
+	 * @model opposite="decorators"
+	 */
+	Graph getGraph();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.Decorator#getGraph <em>Graph</em>}' container reference.
+	 * <!-- begin-user-doc --> 
+	 * 
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.Decorator#getGraph <em>Graph</em>}'
+	 * container reference.
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Graph</em>' container reference.
+	 * @see #getGraph()
+	 * 
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Graph</em>' container reference.
+	 * @see #getGraph()
+	 * @generated
+	 */
+	void setGraph(Graph value);
+
+	/**
+	 * @return the list of {@link DynamicLabel}s that this <code>Decorator</code>
+	 * 	 is responsible for updating.
+	 * @model type="DynamicLabel" containment="false" opposite="decorator"
+	 */
+	EList<DynamicLabel> getLabelsToUpdate();
+
+	/**
+	 * Augment the graph by adding components ({@link Edge}s,
+	 * {@link org.eclipse.stem.core.graph.Node}s,
+	 * {@link org.eclipse.stem.core.graph.Label}s). The added components,
+	 * in particular {@link DynamicLabel}s, can be modified later during a call
+	 * to {@link #updateLabels(Graph, STEMTime)}. A side effect of this call is
+	 * that it adds the decorator to the collection maintained by the
+	 * {@link Graph}.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void decorateGraph();
+
+	/**
+	 * Process each of the {@link DynamicLabel}s that this
+	 * <code>Decorator</code> is responsible for and determine their "next"
+	 * value.
+	 * 
+	 * @param time
+	 *            the time to be used when determining the changes to be made to
+	 *            the Graph
+	 * @param timePeriod
+	 *            the number of milliseconds difference between the time and the
+	 *            previous time value.
+	 * @param cycle 
+	 * 			  The next cycle number.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void updateLabels(final STEMTime time, final long timerPeriod, int cycle);
+
+	/**
+	 * Process each of the {@link DynamicLabels} that this
+	 * <code>decorator</code> is responsible for and reset their "current"
+	 * value to be the initial value assigned during the call to the method
+	 * {@link #decorateGraph()}
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void resetLabels();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model many="false"
+	 * @generated
+	 */
+	EList<DynamicLabel> getLabelsToUpdate(int partition, int max);
+
+} // Decorator
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/EdgeDecorator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/EdgeDecorator.java
new file mode 100644
index 0000000..1b70141
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/EdgeDecorator.java
@@ -0,0 +1,29 @@
+// EdgeDecorator.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>EdgeDecorator</code> is a {@link Decorator} that specifically
+ * modifies {@link Edge}s and their {@link Label}s.
+ * 
+ * @see Edge
+ * @see org.eclipse.stem.core.graph.DynamicLabel
+ * @see NodeDecorator
+ * @see GraphDecorator
+ * @see Sequencer
+ * 
+ * @model
+ */
+public interface EdgeDecorator extends Decorator {
+	// Nothing Yet
+} // EdgeDecorator
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/GraphDecorator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/GraphDecorator.java
new file mode 100644
index 0000000..6cd210d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/GraphDecorator.java
@@ -0,0 +1,30 @@
+// GraphDecorator.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>GraphDecorator</code> is a {@link Decorator} that specifically
+ * modifies {@link org.eclipse.stem.core.graph.Edge}s and their
+ * {@link org.eclipse.stem.core.graph.Label}s.
+ * 
+ * @see org.eclipse.stem.core.graph.Graph
+ * @see org.eclipse.stem.core.graph.DynamicLabel
+ * @see NodeDecorator
+ * @see EdgeDecorator
+ * @see org.eclipse.stem.core.sequencer.Sequencer
+ * 
+ * @model
+ */
+public interface GraphDecorator extends Decorator {
+	// Nothing Yet
+} // GraphDecorator
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/IntegrationDecorator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/IntegrationDecorator.java
new file mode 100644
index 0000000..8129a75
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/IntegrationDecorator.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.core.model;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.LabelValue;

+

+/**

+ * The interface is implemented by any decorator able to calculate a delta (change)

+ * value given a current value and a time 

+ */

+public interface IntegrationDecorator extends EObject {

+

+	/**

+	 * Method invoked to calculate a delta 

+	 * 

+	 * @param time The STEM time

+	 * @param timeDelta The number of ms for a single cycle of the simulation

+	 * @param labels The labels to update

+	 */

+	void calculateDelta(STEMTime time, long timeDelta, EList<DynamicLabel> labels);

+

+	/**

+	 * applyExternalDeltas. After calculateDelta has been invoked for all

+	 * integration decorators on a simulation, each decorator can adjust

+	 * it's own delta values taking into account deltas calculated by 

+	 * other decorators the the same node. For instance, in an SIR model

+	 * people are removed from each compartment that depends on deaths

+	 * calculated by general background deaths (from Population Models)

+	 * and deaths caused by other diseases (disease models) 

+	 * 

+	 * @param time The STEM time

+	 * @param timeDelta The number of ms for a single cycle of the simulation

+	 * @param labels The labels to update

+	 */

+	void applyExternalDeltas(STEMTime time, long timeDelta, EList<DynamicLabel> labels);

+

+	

+	/**

+	 * Invoked at the end of a simulation cycle to add additional perturbations

+	 * such as noise.

+	 */

+	void doModelSpecificAdjustments(LabelValue label);

+

+	/**

+	 * Determine whether the decorator is deterministic. The developer returns

+	 * the proper value here depending upon whether calculatedDelta always

+	 * returns the same delta for the same input

+	 * 

+	 * @return true If the decorator is deterministic, false otherwise

+	 */

+	public boolean isDeterministic();

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Model.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Model.java
new file mode 100644
index 0000000..527f723
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/Model.java
@@ -0,0 +1,143 @@
+// Model.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.stem.core.graph.Graph;
+
+/**
+ * A <code>Model</code> contains all of the components necessary to create a
+ * canonical {@link org.eclipse.stem.core.graph.Graph} suitable for
+ * simulation. In particular it contains a collection of
+ * {@link org.eclipse.stem.core.graph.Graph}'s and a collection of other
+ * (sub) <code>Model</code>'s. This structure forms a "tree" with
+ * <code>Model</code> instances as the tree's root and interior nodes, and
+ * {@link org.eclipse.stem.core.graph.Graph} instances as the tree's leaves.
+ * <p>
+ * Each <code>Model</code> can also contain collection's of {@link Decorator}'s
+ * which can modify the canonical {@link org.eclipse.stem.core.graph.Graph}
+ * when it is first created from the model (see {@link #getCanonicalGraph(URI)}.
+ * </p>
+ * <p>
+ * Each {@link org.eclipse.stem.core.scenario.Scenario} contains a single
+ * reference to a <code>Model</code>. That model is the root of the tree the
+ * defines the canonical {@link org.eclipse.stem.core.graph.Graph} that will
+ * be used for simulation. A {@link org.eclipse.stem.core.scenario.Scenario}
+ * obtains the canonical {@link org.eclipse.stem.core.graph.Graph} from the
+ * model by calling the method {@link #getCanonicalGraph(URI)}. This method
+ * recursively creates the canonical
+ * {@link org.eclipse.stem.core.graph.Graph} by invoking itself on the
+ * <code>Model</code> instances it contains. At each level of the recursion,
+ * it combines the results of those calls with the
+ * {@link org.eclipse.stem.core.graph.Graph}'s it contains (if any). The
+ * {@link Decorator}s in the model are also then allowed to modify (decorate)
+ * the {@link org.eclipse.stem.core.graph.Graph}. Then, the recursion
+ * attempts to resolve any outstanding unresolved links between
+ * {@link org.eclipse.stem.core.graph.Edge}s and
+ * {@link org.eclipse.stem.core.graph.Label}s and the
+ * {@link org.eclipse.stem.core.graph.Node}s in the canonical
+ * {@link org.eclipse.stem.core.graph.Graph} under construction. This is
+ * accomplished by matching up the "target" {@link URI}s of the unresolved
+ * {@link org.eclipse.stem.core.graph.Edge}s or {@link Label}s with a
+ * {@link URI} of a {@link Node}. Any which cannot be resolved are recorded
+ * with a {@link org.eclipse.stem.core.graph.UnresolvedIdentifiable}
+ * instance (see
+ * {@link org.eclipse.stem.core.graph.Graph#getUnresolvedIdentifiables()})
+ * for later reporting.
+ * </p>
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * 
+ * @see org.eclipse.stem.core.graph.Graph
+ * @see org.eclipse.stem.core.scenario.Scenario
+ * 
+ * @model
+ */
+public interface Model extends Identifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * model URI.
+	 */
+	String URI_TYPE_MODEL_SEGMENT = "model";
+	
+	/**
+	 * @return this <code>Model</code>'s collection of (sub)
+	 *         <code>Model</code>s
+	 * 
+	 * @model type="Model" containment="false"
+	 */
+	EList<Model> getModels();
+
+	/**
+	 * @return this <code>Model</code>'s collection of {@link org.eclipse.stem.core.graph.Graph}}s
+	 * 
+	 * @model type="Graph" containment="false"
+	 */
+	EList<Graph> getGraphs();
+
+	/**
+	 * @return the collection of {@link Decorator}s that decorate the canonical
+	 *         {@link Graph} itself. These decorations are {@link Label}s that
+	 *         act like "global variables" for the canonical {@link Graph}.
+	 * 
+	 * @model type="GraphDecorator" containment="false"
+	 */
+	EList<GraphDecorator> getGraphDecorators();
+
+	/**
+	 * @return the collection of {@link Decorator}s that decorate the
+	 *         {@link Node}s in the canonical {@link Graph}.
+	 * 
+	 * @model type="NodeDecorator" containment="false"
+	 */
+	EList<NodeDecorator> getNodeDecorators();
+
+	/**
+	 * @return the collection of {@link Decorator}s that decorate the
+	 *         {@link org.eclipse.stem.core.graph.Edge}s in the canonical {@link Graph}.
+	 * 
+	 * @model type="EdgeDecorator" containment="false"
+	 */
+	EList<EdgeDecorator> getEdgeDecorators();
+
+	/**
+	 * Recursively process any models this model contains to obtain their
+	 * canonical {@link Graph}s. Combine these with any graphs this model
+	 * contains to make one aggregate {@link Graph}. Then this
+	 * <code>model</code>'s {@link Decorator}s decorate the graph.
+	 * 
+	 * @param uri
+	 *            the {@link URI} of the newly created canonical graph
+	 * @param parentFilter
+	 * @return the canonical graph of the model
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	Graph getCanonicalGraph(URI uri, IdentifiableFilter filter);
+
+} // Model
+
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelFactory.java
new file mode 100644
index 0000000..858055b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelFactory.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.model.ModelPackage
+ * @generated
+ */
+public interface ModelFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ModelFactory eINSTANCE = org.eclipse.stem.core.model.impl.ModelFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Decorator</em>'.
+	 * @generated
+	 */
+	Decorator createDecorator();
+
+	/**
+	 * Returns a new object of class '<em>Edge Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Edge Decorator</em>'.
+	 * @generated
+	 */
+	EdgeDecorator createEdgeDecorator();
+
+	/**
+	 * Returns a new object of class '<em>Graph Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Graph Decorator</em>'.
+	 * @generated
+	 */
+	GraphDecorator createGraphDecorator();
+
+	/**
+	 * Returns a new object of class '<em>Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Model</em>'.
+	 * @generated
+	 */
+	Model createModel();
+
+	/**
+	 * Returns a new object of class '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Node Decorator</em>'.
+	 * @generated
+	 */
+	NodeDecorator createNodeDecorator();
+
+	/**
+	 * Returns a new object of class '<em>STEM Time</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>STEM Time</em>'.
+	 * @generated
+	 */
+	STEMTime createSTEMTime();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ModelPackage getModelPackage();
+
+} //ModelFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelPackage.java
new file mode 100644
index 0000000..428668e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/ModelPackage.java
@@ -0,0 +1,978 @@
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.model.ModelFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ModelPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "model";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/model.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.model";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ModelPackage eINSTANCE = org.eclipse.stem.core.model.impl.ModelPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.DecoratorImpl <em>Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getDecorator()
+	 * @generated
+	 */
+	int DECORATOR = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__LABELS_TO_UPDATE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__GRAPH = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__ENABLED = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__GRAPH_DECORATED = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR__PROGRESS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DECORATOR_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.EdgeDecoratorImpl <em>Edge Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.EdgeDecoratorImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getEdgeDecorator()
+	 * @generated
+	 */
+	int EDGE_DECORATOR = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__URI = DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__TYPE_URI = DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__DUBLIN_CORE = DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__LABELS_TO_UPDATE = DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__GRAPH = DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__ENABLED = DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__GRAPH_DECORATED = DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR__PROGRESS = DECORATOR__PROGRESS;
+
+	/**
+	 * The number of structural features of the '<em>Edge Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR_FEATURE_COUNT = DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.GraphDecoratorImpl <em>Graph Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.GraphDecoratorImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getGraphDecorator()
+	 * @generated
+	 */
+	int GRAPH_DECORATOR = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__URI = DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__TYPE_URI = DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__DUBLIN_CORE = DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__LABELS_TO_UPDATE = DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__GRAPH = DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__ENABLED = DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__GRAPH_DECORATED = DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR__PROGRESS = DECORATOR__PROGRESS;
+
+	/**
+	 * The number of structural features of the '<em>Graph Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR_FEATURE_COUNT = DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.ModelImpl <em>Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.ModelImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getModel()
+	 * @generated
+	 */
+	int MODEL = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Models</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__MODELS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Graphs</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__GRAPHS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorators</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__GRAPH_DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Node Decorators</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__NODE_DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Edge Decorators</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL__EDGE_DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODEL_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.NodeDecoratorImpl <em>Node Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.NodeDecoratorImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getNodeDecorator()
+	 * @generated
+	 */
+	int NODE_DECORATOR = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__URI = DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__TYPE_URI = DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__DUBLIN_CORE = DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__LABELS_TO_UPDATE = DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__GRAPH = DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__ENABLED = DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__GRAPH_DECORATED = DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR__PROGRESS = DECORATOR__PROGRESS;
+
+	/**
+	 * The number of structural features of the '<em>Node Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR_FEATURE_COUNT = DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link java.lang.Comparable <em>Comparable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.lang.Comparable
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getComparable()
+	 * @generated
+	 */
+	int COMPARABLE = 6;
+
+	/**
+	 * The number of structural features of the '<em>Comparable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPARABLE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.impl.STEMTimeImpl <em>STEM Time</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.impl.STEMTimeImpl
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getSTEMTime()
+	 * @generated
+	 */
+	int STEM_TIME = 5;
+
+	/**
+	 * The feature id for the '<em><b>Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME__TIME = COMPARABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>STEM Time</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_FEATURE_COUNT = COMPARABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 7;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	EClass getDecorator();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Decorator#getLabelsToUpdate <em>Labels To Update</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Labels To Update</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator#getLabelsToUpdate()
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	EReference getDecorator_LabelsToUpdate();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.stem.core.model.Decorator#getGraph <em>Graph</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Graph</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator#getGraph()
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	EReference getDecorator_Graph();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.model.Decorator#isEnabled <em>Enabled</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Enabled</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator#isEnabled()
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	EAttribute getDecorator_Enabled();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.model.Decorator#isGraphDecorated <em>Graph Decorated</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Graph Decorated</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator#isGraphDecorated()
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	EAttribute getDecorator_GraphDecorated();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.model.Decorator#getProgress <em>Progress</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Progress</em>'.
+	 * @see org.eclipse.stem.core.model.Decorator#getProgress()
+	 * @see #getDecorator()
+	 * @generated
+	 */
+	EAttribute getDecorator_Progress();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Edge Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @generated
+	 */
+	EClass getEdgeDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Graph Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @generated
+	 */
+	EClass getGraphDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.Model <em>Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Model</em>'.
+	 * @see org.eclipse.stem.core.model.Model
+	 * @generated
+	 */
+	EClass getModel();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Model#getModels <em>Models</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Models</em>'.
+	 * @see org.eclipse.stem.core.model.Model#getModels()
+	 * @see #getModel()
+	 * @generated
+	 */
+	EReference getModel_Models();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Model#getGraphs <em>Graphs</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Graphs</em>'.
+	 * @see org.eclipse.stem.core.model.Model#getGraphs()
+	 * @see #getModel()
+	 * @generated
+	 */
+	EReference getModel_Graphs();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Model#getGraphDecorators <em>Graph Decorators</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Graph Decorators</em>'.
+	 * @see org.eclipse.stem.core.model.Model#getGraphDecorators()
+	 * @see #getModel()
+	 * @generated
+	 */
+	EReference getModel_GraphDecorators();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Model#getNodeDecorators <em>Node Decorators</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Node Decorators</em>'.
+	 * @see org.eclipse.stem.core.model.Model#getNodeDecorators()
+	 * @see #getModel()
+	 * @generated
+	 */
+	EReference getModel_NodeDecorators();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.model.Model#getEdgeDecorators <em>Edge Decorators</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Edge Decorators</em>'.
+	 * @see org.eclipse.stem.core.model.Model#getEdgeDecorators()
+	 * @see #getModel()
+	 * @generated
+	 */
+	EReference getModel_EdgeDecorators();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Node Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	EClass getNodeDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.STEMTime <em>STEM Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>STEM Time</em>'.
+	 * @see org.eclipse.stem.core.model.STEMTime
+	 * @generated
+	 */
+	EClass getSTEMTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.model.STEMTime#getTime <em>Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time</em>'.
+	 * @see org.eclipse.stem.core.model.STEMTime#getTime()
+	 * @see #getSTEMTime()
+	 * @generated
+	 */
+	EAttribute getSTEMTime_Time();
+
+	/**
+	 * Returns the meta object for class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Comparable</em>'.
+	 * @see java.lang.Comparable
+	 * @model instanceClass="java.lang.Comparable" typeParameters="T"
+	 * @generated
+	 */
+	EClass getComparable();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ModelFactory getModelFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.DecoratorImpl <em>Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.DecoratorImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getDecorator()
+		 * @generated
+		 */
+		EClass DECORATOR = eINSTANCE.getDecorator();
+
+		/**
+		 * The meta object literal for the '<em><b>Labels To Update</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DECORATOR__LABELS_TO_UPDATE = eINSTANCE.getDecorator_LabelsToUpdate();
+
+		/**
+		 * The meta object literal for the '<em><b>Graph</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DECORATOR__GRAPH = eINSTANCE.getDecorator_Graph();
+
+		/**
+		 * The meta object literal for the '<em><b>Enabled</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DECORATOR__ENABLED = eINSTANCE.getDecorator_Enabled();
+
+		/**
+		 * The meta object literal for the '<em><b>Graph Decorated</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DECORATOR__GRAPH_DECORATED = eINSTANCE.getDecorator_GraphDecorated();
+
+		/**
+		 * The meta object literal for the '<em><b>Progress</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DECORATOR__PROGRESS = eINSTANCE.getDecorator_Progress();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.EdgeDecoratorImpl <em>Edge Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.EdgeDecoratorImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getEdgeDecorator()
+		 * @generated
+		 */
+		EClass EDGE_DECORATOR = eINSTANCE.getEdgeDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.GraphDecoratorImpl <em>Graph Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.GraphDecoratorImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getGraphDecorator()
+		 * @generated
+		 */
+		EClass GRAPH_DECORATOR = eINSTANCE.getGraphDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.ModelImpl <em>Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.ModelImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getModel()
+		 * @generated
+		 */
+		EClass MODEL = eINSTANCE.getModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Models</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODEL__MODELS = eINSTANCE.getModel_Models();
+
+		/**
+		 * The meta object literal for the '<em><b>Graphs</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODEL__GRAPHS = eINSTANCE.getModel_Graphs();
+
+		/**
+		 * The meta object literal for the '<em><b>Graph Decorators</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODEL__GRAPH_DECORATORS = eINSTANCE.getModel_GraphDecorators();
+
+		/**
+		 * The meta object literal for the '<em><b>Node Decorators</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODEL__NODE_DECORATORS = eINSTANCE.getModel_NodeDecorators();
+
+		/**
+		 * The meta object literal for the '<em><b>Edge Decorators</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODEL__EDGE_DECORATORS = eINSTANCE.getModel_EdgeDecorators();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.NodeDecoratorImpl <em>Node Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.NodeDecoratorImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getNodeDecorator()
+		 * @generated
+		 */
+		EClass NODE_DECORATOR = eINSTANCE.getNodeDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.impl.STEMTimeImpl <em>STEM Time</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.impl.STEMTimeImpl
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getSTEMTime()
+		 * @generated
+		 */
+		EClass STEM_TIME = eINSTANCE.getSTEMTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STEM_TIME__TIME = eINSTANCE.getSTEMTime_Time();
+
+		/**
+		 * The meta object literal for the '{@link java.lang.Comparable <em>Comparable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see java.lang.Comparable
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getComparable()
+		 * @generated
+		 */
+		EClass COMPARABLE = eINSTANCE.getComparable();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.core.model.impl.ModelPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
+} //ModelPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/NodeDecorator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/NodeDecorator.java
new file mode 100644
index 0000000..673a6a2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/NodeDecorator.java
@@ -0,0 +1,30 @@
+// NodeDecorator.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>GraphDecorator</code> is a {@link Decorator} that specifically
+ * modifies {@link org.eclipse.stem.core.graph.Edge}s and their
+ * {@link org.eclipse.stem.core.graph.Label}s.
+ * 
+ * @see org.eclipse.stem.core.graph.Node
+ * @see org.eclipse.stem.core.graph.DynamicLabel
+ * @see EdgeDecorator
+ * @see GraphDecorator
+ * @see org.eclipse.stem.core.sequencer.Sequencer
+ * 
+ * @model
+ */
+public interface NodeDecorator extends Decorator {
+	// Nothing yet
+} // NodeDecorator
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/STEMTime.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/STEMTime.java
new file mode 100644
index 0000000..ccf7b4b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/STEMTime.java
@@ -0,0 +1,91 @@
+// STEMTime.java
+package org.eclipse.stem.core.model;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.Comparable;
+import java.util.Date;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A <code>STEMTime</code> instance represents a point in time in in the STEM
+ * system.
+ * 
+ * @see org.eclipse.stem.core.sequencer.Sequencer
+ * 
+ * @model
+ */
+public interface STEMTime extends EObject, Comparable<STEMTime> {
+
+	/**
+	 * This is an enumeration of different common time units with their duration
+	 * in milliseconds.
+	 */
+	enum Units {
+		MILLISECOND(1),
+		SECOND(1000),
+		MINUTE(60*1000), 
+		HOUR(60*60*1000), 
+		DAY(24*60*60*1000),
+		WEEK(7*24*60*60*1000), 
+		YEAR(52*7*24*60*60*1000);
+		private int duration;
+
+		private Units(int duration) {
+			this.duration = duration;
+		}
+		
+		/**
+		 * @return the number of milliseconds that is equivalent to this time unit.
+		 */
+		public long getMilliseconds() {
+			return duration;
+		}
+	}; // Units
+
+	/**
+	 * @return the time
+	 * @model
+	 */
+	Date getTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.model.STEMTime#getTime <em>Time</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time</em>' attribute.
+	 * @see #getTime()
+	 * @generated
+	 */
+	void setTime(Date value);
+
+	/**
+	 * @param timeIncrement
+	 *            the number of milliseconds the new STEMTime is in the future.
+	 * @return a new STEMTime that is a specified number of milliseconds from
+	 *         the current time.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	STEMTime addIncrement(long timeIncrement);
+
+	/**
+	 * @see java.lang.Object#hashCode()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int hashCode();
+
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean equals(Object obj);
+} // STEMTime
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/DecoratorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/DecoratorImpl.java
new file mode 100644
index 0000000..fad3daa
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/DecoratorImpl.java
@@ -0,0 +1,519 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+//import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.stem.core.CorePlugin;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.impl.DecoratorImpl#getLabelsToUpdate <em>Labels To Update</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.DecoratorImpl#getGraph <em>Graph</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.DecoratorImpl#isEnabled <em>Enabled</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.DecoratorImpl#isGraphDecorated <em>Graph Decorated</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.DecoratorImpl#getProgress <em>Progress</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DecoratorImpl extends IdentifiableImpl implements Decorator {
+	/**
+	 * The cached value of the '{@link #getLabelsToUpdate() <em>Labels To Update</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getLabelsToUpdate()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<DynamicLabel> labelsToUpdate;
+
+	/**
+	 * The default value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnabled()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ENABLED_EDEFAULT = true;
+	/**
+	 * The cached value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isEnabled()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean enabled = ENABLED_EDEFAULT;
+	/**
+	 * The default value of the '{@link #isGraphDecorated() <em>Graph Decorated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isGraphDecorated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean GRAPH_DECORATED_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isGraphDecorated() <em>Graph Decorated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isGraphDecorated()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean graphDecorated = GRAPH_DECORATED_EDEFAULT;
+
+	
+	/**
+	 * The default value of the '{@link #getProgress() <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgress()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double PROGRESS_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getProgress() <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgress()
+	 * @generated
+	 * @ordered
+	 */
+	protected double progress = PROGRESS_EDEFAULT;
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.DECORATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<DynamicLabel> getLabelsToUpdate() {
+		if (labelsToUpdate == null) {
+			labelsToUpdate = new EObjectWithInverseResolvingEList<DynamicLabel>(DynamicLabel.class, this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, GraphPackage.DYNAMIC_LABEL__DECORATOR);
+		}
+		return labelsToUpdate;
+	}
+
+	protected Map<Integer, EList<DynamicLabel>> labelPartitionMap;
+	protected int numThreads = -1;
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @param partition Which partition
+	 * @param max Max partition
+	 * @generated not
+	 */
+	@SuppressWarnings("boxing")
+	public synchronized EList<DynamicLabel>  getLabelsToUpdate(int partition, int max) {
+		if (labelsToUpdate == null) {
+			labelsToUpdate = new EObjectWithInverseResolvingEList<DynamicLabel>(DynamicLabel.class, this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, GraphPackage.DYNAMIC_LABEL__DECORATOR);
+		}
+		if(max != numThreads) labelPartitionMap = null; // clear when the number of threads changes
+		numThreads = max;
+		if(labelPartitionMap != null && labelPartitionMap.containsKey(partition))
+			return labelPartitionMap.get(partition);
+		
+		EList<DynamicLabel> temp = new BasicEList<DynamicLabel>(); 
+			
+		int size = labelsToUpdate.size();
+		int labelsPerPartition = size / max;
+		int start =  partition*labelsPerPartition;
+		int end;
+		if(partition == max -1) end = size; // The last threads grabs all nodes until the last one
+		else end = start + labelsPerPartition;
+		for(int i=start;i<end;++i) temp.add(labelsToUpdate.get(i));
+		
+		if(labelPartitionMap == null) labelPartitionMap = new HashMap<Integer, EList<DynamicLabel>>();
+		labelPartitionMap.put(partition, temp);
+		return temp;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Graph getGraph() {
+		if (eContainerFeatureID() != ModelPackage.DECORATOR__GRAPH) return null;
+		return (Graph)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetGraph(Graph newGraph, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newGraph, ModelPackage.DECORATOR__GRAPH, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGraph(Graph newGraph) {
+		if (newGraph != eInternalContainer() || (eContainerFeatureID() != ModelPackage.DECORATOR__GRAPH && newGraph != null)) {
+			if (EcoreUtil.isAncestor(this, newGraph))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newGraph != null)
+				msgs = ((InternalEObject)newGraph).eInverseAdd(this, GraphPackage.GRAPH__DECORATORS, Graph.class, msgs);
+			msgs = basicSetGraph(newGraph, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.DECORATOR__GRAPH, newGraph, newGraph));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnabled(boolean newEnabled) {
+		boolean oldEnabled = enabled;
+		enabled = newEnabled;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.DECORATOR__ENABLED, oldEnabled, enabled));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isGraphDecorated() {
+		return graphDecorated;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGraphDecorated(boolean newGraphDecorated) {
+		boolean oldGraphDecorated = graphDecorated;
+		graphDecorated = newGraphDecorated;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.DECORATOR__GRAPH_DECORATED, oldGraphDecorated, graphDecorated));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getProgress() {
+		return progress;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProgress(double newProgress) {
+		double oldProgress = progress;
+		progress = newProgress;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.DECORATOR__PROGRESS, oldProgress, progress));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void decorateGraph() {
+		CorePlugin.logError("decorateGraph() not implemented in \""+
+				getDublinCore().getTitle()
+				+ "\" of type \"" + this.getClass().getCanonicalName()
+				+ "\"", null);
+		throw new UnsupportedOperationException();
+	} // decorateGraph
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void updateLabels(STEMTime time, long timerPeriod, int cycle) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void resetLabels() {
+		setEnabled(ENABLED_EDEFAULT);
+		setGraphDecorated(GRAPH_DECORATED_EDEFAULT);
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate()
+				.iterator(); labelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = labelIter.next();
+			dynamicLabel.reset();
+		}
+	} // resetLabels
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				return ((InternalEList<InternalEObject>)(InternalEList<?>)getLabelsToUpdate()).basicAdd(otherEnd, msgs);
+			case ModelPackage.DECORATOR__GRAPH:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetGraph((Graph)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				return ((InternalEList<?>)getLabelsToUpdate()).basicRemove(otherEnd, msgs);
+			case ModelPackage.DECORATOR__GRAPH:
+				return basicSetGraph(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case ModelPackage.DECORATOR__GRAPH:
+				return eInternalContainer().eInverseRemove(this, GraphPackage.GRAPH__DECORATORS, Graph.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				return getLabelsToUpdate();
+			case ModelPackage.DECORATOR__GRAPH:
+				return getGraph();
+			case ModelPackage.DECORATOR__ENABLED:
+				return isEnabled();
+			case ModelPackage.DECORATOR__GRAPH_DECORATED:
+				return isGraphDecorated();
+			case ModelPackage.DECORATOR__PROGRESS:
+				return getProgress();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				getLabelsToUpdate().clear();
+				getLabelsToUpdate().addAll((Collection<? extends DynamicLabel>)newValue);
+				return;
+			case ModelPackage.DECORATOR__GRAPH:
+				setGraph((Graph)newValue);
+				return;
+			case ModelPackage.DECORATOR__ENABLED:
+				setEnabled((Boolean)newValue);
+				return;
+			case ModelPackage.DECORATOR__GRAPH_DECORATED:
+				setGraphDecorated((Boolean)newValue);
+				return;
+			case ModelPackage.DECORATOR__PROGRESS:
+				setProgress((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				getLabelsToUpdate().clear();
+				return;
+			case ModelPackage.DECORATOR__GRAPH:
+				setGraph((Graph)null);
+				return;
+			case ModelPackage.DECORATOR__ENABLED:
+				setEnabled(ENABLED_EDEFAULT);
+				return;
+			case ModelPackage.DECORATOR__GRAPH_DECORATED:
+				setGraphDecorated(GRAPH_DECORATED_EDEFAULT);
+				return;
+			case ModelPackage.DECORATOR__PROGRESS:
+				setProgress(PROGRESS_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModelPackage.DECORATOR__LABELS_TO_UPDATE:
+				return labelsToUpdate != null && !labelsToUpdate.isEmpty();
+			case ModelPackage.DECORATOR__GRAPH:
+				return getGraph() != null;
+			case ModelPackage.DECORATOR__ENABLED:
+				return enabled != ENABLED_EDEFAULT;
+			case ModelPackage.DECORATOR__GRAPH_DECORATED:
+				return graphDecorated != GRAPH_DECORATED_EDEFAULT;
+			case ModelPackage.DECORATOR__PROGRESS:
+				return progress != PROGRESS_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (enabled: "); //$NON-NLS-1$
+		result.append(enabled);
+		result.append(", graphDecorated: "); //$NON-NLS-1$
+		result.append(graphDecorated);
+		result.append(", progress: "); //$NON-NLS-1$
+		result.append(progress);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext()
+				&& retValue;) {
+			final Label label = labelIter.next();
+
+			retValue = retValue && label.sane();
+			assert retValue;
+		}
+
+		return retValue;
+	} // sane
+} // DecoratorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/EdgeDecoratorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/EdgeDecoratorImpl.java
new file mode 100644
index 0000000..5aca58f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/EdgeDecoratorImpl.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Edge Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class EdgeDecoratorImpl extends DecoratorImpl implements EdgeDecorator {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EdgeDecoratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.EDGE_DECORATOR;
+	}
+
+	/**
+	 * @see org.eclipse.stem.model.impl.DecoratorImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		return retValue;
+	} // sane
+
+} // EdgeDecoratorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/GraphDecoratorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/GraphDecoratorImpl.java
new file mode 100644
index 0000000..4fb0fef
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/GraphDecoratorImpl.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Graph Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class GraphDecoratorImpl extends DecoratorImpl implements GraphDecorator {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GraphDecoratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.GRAPH_DECORATOR;
+	}
+
+	/**
+	 * @see org.eclipse.stem.model.impl.DecoratorImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		return retValue;
+	} // sane
+} // GraphDecoratorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelFactoryImpl.java
new file mode 100644
index 0000000..9614ee3
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelFactoryImpl.java
@@ -0,0 +1,215 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+//import org.eclipse.stem.core.model.*;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelFactoryImpl extends EFactoryImpl implements ModelFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ModelFactory init() {
+		try {
+			ModelFactory theModelFactory = (ModelFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/model.ecore"); //$NON-NLS-1$ 
+			if (theModelFactory != null) {
+				return theModelFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ModelFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ModelPackage.DECORATOR: return createDecorator();
+			case ModelPackage.EDGE_DECORATOR: return createEdgeDecorator();
+			case ModelPackage.GRAPH_DECORATOR: return createGraphDecorator();
+			case ModelPackage.MODEL: return createModel();
+			case ModelPackage.NODE_DECORATOR: return createNodeDecorator();
+			case ModelPackage.STEM_TIME: return createSTEMTime();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case ModelPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case ModelPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator createDecorator() {
+		DecoratorImpl decorator = new DecoratorImpl();
+		return decorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeDecorator createEdgeDecorator() {
+		EdgeDecoratorImpl edgeDecorator = new EdgeDecoratorImpl();
+		return edgeDecorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphDecorator createGraphDecorator() {
+		GraphDecoratorImpl graphDecorator = new GraphDecoratorImpl();
+		return graphDecorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model createModel() {
+		ModelImpl model = new ModelImpl();
+		return model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeDecorator createNodeDecorator() {
+		NodeDecoratorImpl nodeDecorator = new NodeDecoratorImpl();
+		return nodeDecorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime createSTEMTime() {
+		STEMTimeImpl stemTime = new STEMTimeImpl();
+		return stemTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	} // createURIFromString
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	} // convertURIToString
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelPackage getModelPackage() {
+		return (ModelPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ModelPackage getPackage() {
+		return ModelPackage.eINSTANCE;
+	}
+
+} //ModelFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelImpl.java
new file mode 100644
index 0000000..8bba24c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelImpl.java
@@ -0,0 +1,592 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.stem.core.common.IdentifiableFilter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.scenario.impl.ScenarioImpl;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.impl.ModelImpl#getModels <em>Models</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.ModelImpl#getGraphs <em>Graphs</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.ModelImpl#getGraphDecorators <em>Graph Decorators</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.ModelImpl#getNodeDecorators <em>Node Decorators</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.impl.ModelImpl#getEdgeDecorators <em>Edge Decorators</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModelImpl extends IdentifiableImpl implements Model {
+
+	/**
+	 * This is used to generate unique URI's for each Model generated
+	 */
+	static int modelCounter = 0;
+
+	/**
+	 * The cached value of the '{@link #getModels() <em>Models</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getModels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Model> models;
+
+	/**
+	 * The cached value of the '{@link #getGraphs() <em>Graphs</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getGraphs()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Graph> graphs;
+
+	/**
+	 * The cached value of the '{@link #getGraphDecorators() <em>Graph Decorators</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getGraphDecorators()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<GraphDecorator> graphDecorators;
+
+	/**
+	 * The cached value of the '{@link #getNodeDecorators() <em>Node Decorators</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeDecorators()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<NodeDecorator> nodeDecorators;
+
+	/**
+	 * The cached value of the '{@link #getEdgeDecorators() <em>Edge Decorators</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEdgeDecorators()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EdgeDecorator> edgeDecorators;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected ModelImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_MODEL_SEGMENT + "/"
+				+ Integer.toString(modelCounter++)));
+		setTypeURI(STEMURI.MODEL_TYPE_URI);
+	} // ModelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Model> getModels() {
+		if (models == null) {
+			models = new EObjectResolvingEList<Model>(Model.class, this, ModelPackage.MODEL__MODELS);
+		}
+		return models;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Graph> getGraphs() {
+		if (graphs == null) {
+			graphs = new EObjectResolvingEList<Graph>(Graph.class, this, ModelPackage.MODEL__GRAPHS);
+		}
+		return graphs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<GraphDecorator> getGraphDecorators() {
+		if (graphDecorators == null) {
+			graphDecorators = new EObjectResolvingEList<GraphDecorator>(GraphDecorator.class, this, ModelPackage.MODEL__GRAPH_DECORATORS);
+		}
+		return graphDecorators;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<NodeDecorator> getNodeDecorators() {
+		if (nodeDecorators == null) {
+			nodeDecorators = new EObjectResolvingEList<NodeDecorator>(NodeDecorator.class, this, ModelPackage.MODEL__NODE_DECORATORS);
+		}
+		return nodeDecorators;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<EdgeDecorator> getEdgeDecorators() {
+		if (edgeDecorators == null) {
+			edgeDecorators = new EObjectResolvingEList<EdgeDecorator>(EdgeDecorator.class, this, ModelPackage.MODEL__EDGE_DECORATORS);
+		}
+		return edgeDecorators;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This method combines all of the graph "fragments" together to make a
+	 * graph suitable for simulation.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public Graph getCanonicalGraph(final URI uri, IdentifiableFilter parentFilter) {
+		IdentifiableFilterImpl _parentfilter = (IdentifiableFilterImpl)parentFilter;
+		final Graph retValue = GraphFactory.eINSTANCE.createGraph();
+		retValue.setURI(uri);
+
+		IdentifiableFilterImpl myFilter = new IdentifiableFilterImpl(this.getDublinCore().getCoverage());
+		if(parentFilter != null)myFilter.restrict(_parentfilter);	
+		
+		// Basically, we iterate through each of the models getting their
+		// canonical graphs and then merge them together. Then we add in the
+		// graphs of this model and finally "resolve" all the "dangling" links
+
+		for (final Iterator<Model> modelIter = getModels().iterator(); modelIter
+				.hasNext();) {
+			final Model model = (Model) modelIter.next();
+			retValue.addGraph(model.getCanonicalGraph(uri, myFilter), myFilter);
+		} // for models
+
+		// Now do the graphs that are part of this model
+		for (final Iterator<Graph> graphIter = getGraphs().iterator(); graphIter
+				.hasNext();) {
+			final Graph graph = (Graph) graphIter.next();
+
+			final Graph copyGraph = (Graph) EcoreUtil.copy(graph);
+			// final Graph graph = (Graph) graphIter.next();
+			// final Copier copier = new Copier();
+			// final Graph copyGraph = (Graph) copier.copy(graph);
+			// copier.copyReferences();
+			retValue.addGraph(copyGraph, myFilter);
+		} // for graphs
+
+		// Hook up the Identifiables with other ones they reference via URI's,
+		// if any URI are unresolved, then instances of UnresolvedIdentifiables
+		// will be added to the graph's collection of "unresolved
+		// identifiables".
+		resolveURIs(this, retValue);
+
+		invokeNodeDecorators(retValue);
+		invokeEdgeDecorators(retValue);
+		invokeGraphDecorators(retValue);
+
+		// Update the Dublin Core for this graph
+		final DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc.setFormat(GraphPackage.eNS_URI);
+
+		return retValue;
+	} // getCanonicalGraph
+
+	/**
+	 * Process all of the components of a graph and link up all unresolved URI
+	 * references in the graph.
+	 * 
+	 * @param model
+	 *            the model that contains the graph
+	 * @param graph
+	 *            a graph
+	 * 
+	 * @generated NOT
+	 */
+	private void resolveURIs(final Model model, final Graph graph) {
+
+		// TODO optimize by keeping a list of unresolved edges
+
+		// Go through each edge in the graph and try to hook it up with the
+		// nodes it references
+		for (final Iterator<Edge> edgeIter = graph.getEdges().values().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = (Edge) edgeIter.next();
+
+			// Does Node A of this edge need resolving?
+			if (!edge.eIsSet(GraphPackage.Literals.EDGE__A)) {
+				// Yes
+				final Node nodeA = graph.getNode(edge.getNodeAURI());
+				// Did we find it?
+				if (nodeA != null) {
+					// Yes
+					edge.setA(nodeA);
+					nodeA.getEdges().add(edge);
+				} else {
+					// No
+					final UnresolvedIdentifiable ui = GraphFactory.eINSTANCE
+							.createUnresolvedIdentifiable();
+					ui.setModel(model);
+					ui.setGraph(graph);
+					ui.setUnresolvedURI(edge.getNodeAURI());
+					ui.setIdentifiable(edge);
+					ui.setFieldName("NODE_A");
+					if(ScenarioImpl.reportDanglingAirTransportEdges ||
+							!edge.getURI().toString().contains("/pipetransport"))
+						graph.getUnresolvedIdentifiables().add(ui);
+				} // else
+			} // if nodeA
+
+			// Does Node B of this edge need resolving?
+			if (!edge.eIsSet(GraphPackage.Literals.EDGE__B)
+					&& edge.eIsSet(GraphPackage.Literals.EDGE__A)) {
+				// Yes
+				final Node nodeB = graph.getNode(edge.getNodeBURI());
+				// Did we find it?
+				if (nodeB != null) {
+					// Yes
+					edge.setB(nodeB);
+					nodeB.getEdges().add(edge);
+				} else {
+					// No
+					// Was Node A found though?
+					if (edge.getA() != null) {
+						// Yes
+						// We remove our link with it then so that we don't have
+						// a dangling edge in the graph
+						final Node nodeA = edge.getA();
+						edge.setA(null);
+						nodeA.getEdges().remove(edge);
+					} // if Node A
+
+					final UnresolvedIdentifiable ui = GraphFactory.eINSTANCE
+							.createUnresolvedIdentifiable();
+					ui.setModel(model);
+					ui.setGraph(graph);
+					ui.setUnresolvedURI(edge.getNodeBURI());
+					ui.setIdentifiable(edge);
+					ui.setFieldName("NODE_B");
+					if(ScenarioImpl.reportDanglingAirTransportEdges ||
+							!edge.getURI().toString().contains("/pipetransport"))
+						graph.getUnresolvedIdentifiables().add(ui);
+				} // else
+			} // if nodeB
+		} // for each edge
+
+		// Now do the labels
+		for (final Iterator<NodeLabel> labelIter = graph.getNodeLabels().values()
+				.iterator(); labelIter.hasNext();) {
+			final NodeLabel label = (NodeLabel) labelIter.next();
+			// Can you find the Node for this label?
+			final Node node = graph.getNode(label
+					.getURIOfIdentifiableToBeLabeled());
+			if (node != null) {
+				// Yes
+				node.getLabels().add(label);
+			} else {
+				// No
+				final UnresolvedIdentifiable ui = GraphFactory.eINSTANCE
+						.createUnresolvedIdentifiable();
+				ui.setModel(model);
+				ui.setGraph(graph);
+				ui.setUnresolvedURI(label.getURIOfIdentifiableToBeLabeled());
+				ui.setIdentifiable(label);
+				ui.setFieldName("Node");
+				graph.getUnresolvedIdentifiables().add(ui);
+			}
+		} // for
+
+	} // resolveURIs
+
+	/**
+	 * Iterate through each node decorator and give it a chance to decorate the
+	 * nodes of the graph.
+	 * 
+	 * @param graph
+	 *            the {@link Graph} to decorate
+	 */
+	private void invokeNodeDecorators(Graph graph) {
+		for (final Iterator<NodeDecorator> nodeDecoratorIter = getNodeDecorators().iterator(); nodeDecoratorIter
+				.hasNext();) {
+			final NodeDecorator nodeDecorator = (NodeDecorator) nodeDecoratorIter
+					.next();
+			final Decorator canonicalDecorator = (Decorator) EcoreUtil
+					.copy(nodeDecorator);
+			graph.getDecorators().add(canonicalDecorator);
+			canonicalDecorator.decorateGraph();
+		} // for
+	} // invokeNodeDecorators
+
+	/**
+	 * Iterate through each edge decorator and give it a chance to decorate the
+	 * edges of the graph.
+	 * 
+	 * @param graph
+	 *            the {@link Graph} to decorate
+	 */
+	private void invokeEdgeDecorators(final Graph graph) {
+		for (final Iterator<EdgeDecorator> edgeDecoratorIter = getEdgeDecorators().iterator(); edgeDecoratorIter
+				.hasNext();) {
+			final EdgeDecorator edgeDecorator = (EdgeDecorator) edgeDecoratorIter
+					.next();
+			final Decorator canonicalDecorator = (Decorator) EcoreUtil
+					.copy(edgeDecorator);
+			graph.getDecorators().add(canonicalDecorator);
+			canonicalDecorator.decorateGraph();
+		} // for
+	} // invokeEdgeDecorators
+
+	/**
+	 * Iterate through each graph decorator and give it a chance to decorate the
+	 * graph itself.
+	 * 
+	 * @param graph
+	 *            the {@link Graph} to decorate
+	 */
+	private void invokeGraphDecorators(Graph graph) {
+		for (final Iterator<GraphDecorator> graphDecoratorIter = getGraphDecorators()
+				.iterator(); graphDecoratorIter.hasNext();) {
+			final GraphDecorator graphDecorator = (GraphDecorator) graphDecoratorIter
+					.next();
+			final Decorator canonicalDecorator = (Decorator) EcoreUtil
+					.copy(graphDecorator);
+			graph.getDecorators().add(canonicalDecorator);
+			canonicalDecorator.decorateGraph();
+		} // for
+
+	} // invokeGraphDecorators
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModelPackage.MODEL__MODELS:
+				return getModels();
+			case ModelPackage.MODEL__GRAPHS:
+				return getGraphs();
+			case ModelPackage.MODEL__GRAPH_DECORATORS:
+				return getGraphDecorators();
+			case ModelPackage.MODEL__NODE_DECORATORS:
+				return getNodeDecorators();
+			case ModelPackage.MODEL__EDGE_DECORATORS:
+				return getEdgeDecorators();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModelPackage.MODEL__MODELS:
+				getModels().clear();
+				getModels().addAll((Collection<? extends Model>)newValue);
+				return;
+			case ModelPackage.MODEL__GRAPHS:
+				getGraphs().clear();
+				getGraphs().addAll((Collection<? extends Graph>)newValue);
+				return;
+			case ModelPackage.MODEL__GRAPH_DECORATORS:
+				getGraphDecorators().clear();
+				getGraphDecorators().addAll((Collection<? extends GraphDecorator>)newValue);
+				return;
+			case ModelPackage.MODEL__NODE_DECORATORS:
+				getNodeDecorators().clear();
+				getNodeDecorators().addAll((Collection<? extends NodeDecorator>)newValue);
+				return;
+			case ModelPackage.MODEL__EDGE_DECORATORS:
+				getEdgeDecorators().clear();
+				getEdgeDecorators().addAll((Collection<? extends EdgeDecorator>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModelPackage.MODEL__MODELS:
+				getModels().clear();
+				return;
+			case ModelPackage.MODEL__GRAPHS:
+				getGraphs().clear();
+				return;
+			case ModelPackage.MODEL__GRAPH_DECORATORS:
+				getGraphDecorators().clear();
+				return;
+			case ModelPackage.MODEL__NODE_DECORATORS:
+				getNodeDecorators().clear();
+				return;
+			case ModelPackage.MODEL__EDGE_DECORATORS:
+				getEdgeDecorators().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModelPackage.MODEL__MODELS:
+				return models != null && !models.isEmpty();
+			case ModelPackage.MODEL__GRAPHS:
+				return graphs != null && !graphs.isEmpty();
+			case ModelPackage.MODEL__GRAPH_DECORATORS:
+				return graphDecorators != null && !graphDecorators.isEmpty();
+			case ModelPackage.MODEL__NODE_DECORATORS:
+				return nodeDecorators != null && !nodeDecorators.isEmpty();
+			case ModelPackage.MODEL__EDGE_DECORATORS:
+				return edgeDecorators != null && !edgeDecorators.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder("\"" + dublinCore.getTitle()
+				+ "\"\n");
+
+		sb.append(models != null ? models.size() + " models\n" : "");
+		sb.append(graphs != null ? graphs.size() + " graphs\n" : "");
+		sb.append(graphDecorators != null ? graphDecorators.size()
+				+ " graph decorators\n" : "");
+		sb.append(nodeDecorators != null ? nodeDecorators.size()
+				+ " node decorators\n" : "");
+		sb.append(edgeDecorators != null ? edgeDecorators.size()
+				+ "edge decorators\n" : "");
+
+		return sb.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		if (retValue && models != null) {
+			for (final Iterator<Model> modelIter = models.iterator(); modelIter
+					.hasNext()
+					&& retValue;) {
+				final Model model = (Model) modelIter.next();
+				retValue = retValue && model.sane();
+				assert retValue;
+			} // for each model
+		}
+
+		if (retValue && graphs != null) {
+			for (final Iterator<Graph> graphIter = graphs.iterator(); graphIter
+					.hasNext()
+					&& retValue;) {
+				final Graph graph = (Graph) graphIter.next();
+				retValue = retValue && graph.sane();
+				assert retValue;
+			} // for each graph
+		}
+
+		if (retValue && graphDecorators != null) {
+			for (final Iterator<GraphDecorator> graphDecoratorIter = graphDecorators.iterator(); graphDecoratorIter
+					.hasNext()
+					&& retValue;) {
+				final GraphDecorator graphDecorator = (GraphDecorator) graphDecoratorIter
+						.next();
+				retValue = retValue && graphDecorator.sane();
+				assert retValue;
+			} // for each graphDecorator
+		} // if
+
+		if (retValue && nodeDecorators != null) {
+			for (Iterator<NodeDecorator> nodeDecoratorIter = nodeDecorators.iterator(); nodeDecoratorIter
+					.hasNext()
+					&& retValue;) {
+				NodeDecorator nodeDecorator = (NodeDecorator) nodeDecoratorIter
+						.next();
+				retValue = retValue && nodeDecorator.sane();
+				assert retValue;
+			} // for each noeDecorator
+		} // if
+
+		if (retValue && edgeDecorators != null) {
+			for (Iterator<EdgeDecorator> edgeDecoratorIter = edgeDecorators.iterator(); edgeDecoratorIter
+					.hasNext()
+					&& retValue;) {
+				EdgeDecorator edgeDecorator = (EdgeDecorator) edgeDecoratorIter
+						.next();
+				retValue = retValue && edgeDecorator.sane();
+				assert retValue;
+			} // for each edgeDecorator
+		}
+		return retValue;
+	} // sane
+} // ModelImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelPackageImpl.java
new file mode 100644
index 0000000..48e83e8
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/ModelPackageImpl.java
@@ -0,0 +1,543 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.lang.Comparable;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelPackageImpl extends EPackageImpl implements ModelPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass decoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass edgeDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass graphDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass modelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nodeDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stemTimeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass comparableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.model.ModelPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ModelPackageImpl() {
+		super(eNS_URI, ModelFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ModelPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ModelPackage init() {
+		if (isInited) return (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ModelPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theModelPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theModelPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theModelPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ModelPackage.eNS_URI, theModelPackage);
+		return theModelPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDecorator() {
+		return decoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDecorator_LabelsToUpdate() {
+		return (EReference)decoratorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDecorator_Graph() {
+		return (EReference)decoratorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDecorator_Enabled() {
+		return (EAttribute)decoratorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDecorator_GraphDecorated() {
+		return (EAttribute)decoratorEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDecorator_Progress() {
+		return (EAttribute)decoratorEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEdgeDecorator() {
+		return edgeDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGraphDecorator() {
+		return graphDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getModel() {
+		return modelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModel_Models() {
+		return (EReference)modelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModel_Graphs() {
+		return (EReference)modelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModel_GraphDecorators() {
+		return (EReference)modelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModel_NodeDecorators() {
+		return (EReference)modelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModel_EdgeDecorators() {
+		return (EReference)modelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNodeDecorator() {
+		return nodeDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSTEMTime() {
+		return stemTimeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSTEMTime_Time() {
+		return (EAttribute)stemTimeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getComparable() {
+		return comparableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelFactory getModelFactory() {
+		return (ModelFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		decoratorEClass = createEClass(DECORATOR);
+		createEReference(decoratorEClass, DECORATOR__LABELS_TO_UPDATE);
+		createEReference(decoratorEClass, DECORATOR__GRAPH);
+		createEAttribute(decoratorEClass, DECORATOR__ENABLED);
+		createEAttribute(decoratorEClass, DECORATOR__GRAPH_DECORATED);
+		createEAttribute(decoratorEClass, DECORATOR__PROGRESS);
+
+		edgeDecoratorEClass = createEClass(EDGE_DECORATOR);
+
+		graphDecoratorEClass = createEClass(GRAPH_DECORATOR);
+
+		modelEClass = createEClass(MODEL);
+		createEReference(modelEClass, MODEL__MODELS);
+		createEReference(modelEClass, MODEL__GRAPHS);
+		createEReference(modelEClass, MODEL__GRAPH_DECORATORS);
+		createEReference(modelEClass, MODEL__NODE_DECORATORS);
+		createEReference(modelEClass, MODEL__EDGE_DECORATORS);
+
+		nodeDecoratorEClass = createEClass(NODE_DECORATOR);
+
+		stemTimeEClass = createEClass(STEM_TIME);
+		createEAttribute(stemTimeEClass, STEM_TIME__TIME);
+
+		comparableEClass = createEClass(COMPARABLE);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+		addETypeParameter(comparableEClass, "T"); //$NON-NLS-1$
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		decoratorEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		edgeDecoratorEClass.getESuperTypes().add(this.getDecorator());
+		graphDecoratorEClass.getESuperTypes().add(this.getDecorator());
+		modelEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		nodeDecoratorEClass.getESuperTypes().add(this.getDecorator());
+		EGenericType g1 = createEGenericType(this.getComparable());
+		EGenericType g2 = createEGenericType(this.getSTEMTime());
+		g1.getETypeArguments().add(g2);
+		stemTimeEClass.getEGenericSuperTypes().add(g1);
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(decoratorEClass, Decorator.class, "Decorator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDecorator_LabelsToUpdate(), theGraphPackage.getDynamicLabel(), theGraphPackage.getDynamicLabel_Decorator(), "labelsToUpdate", null, 0, -1, Decorator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDecorator_Graph(), theGraphPackage.getGraph(), theGraphPackage.getGraph_Decorators(), "graph", null, 0, 1, Decorator.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDecorator_Enabled(), ecorePackage.getEBoolean(), "enabled", "true", 0, 1, Decorator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDecorator_GraphDecorated(), ecorePackage.getEBoolean(), "graphDecorated", "false", 0, 1, Decorator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDecorator_Progress(), ecorePackage.getEDouble(), "progress", "0.0", 0, 1, Decorator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		addEOperation(decoratorEClass, null, "decorateGraph", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		EOperation op = addEOperation(decoratorEClass, null, "updateLabels", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getSTEMTime(), "time", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timerPeriod", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEInt(), "cycle", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(decoratorEClass, null, "resetLabels", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(decoratorEClass, null, "getLabelsToUpdate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theEcorePackage.getEInt(), "partition", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theEcorePackage.getEInt(), "max", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		g1 = createEGenericType(theEcorePackage.getEEList());
+		g2 = createEGenericType(theGraphPackage.getDynamicLabel());
+		g1.getETypeArguments().add(g2);
+		initEOperation(op, g1);
+
+		initEClass(edgeDecoratorEClass, EdgeDecorator.class, "EdgeDecorator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(graphDecoratorEClass, GraphDecorator.class, "GraphDecorator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getModel_Models(), this.getModel(), null, "models", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getModel_Graphs(), theGraphPackage.getGraph(), null, "graphs", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getModel_GraphDecorators(), this.getGraphDecorator(), null, "graphDecorators", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getModel_NodeDecorators(), this.getNodeDecorator(), null, "nodeDecorators", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getModel_EdgeDecorators(), this.getEdgeDecorator(), null, "edgeDecorators", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(modelEClass, theGraphPackage.getGraph(), "getCanonicalGraph", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getURI(), "uri", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theCommonPackage.getIdentifiableFilter(), "filter", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(nodeDecoratorEClass, NodeDecorator.class, "NodeDecorator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stemTimeEClass, STEMTime.class, "STEMTime", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSTEMTime_Time(), ecorePackage.getEDate(), "time", null, 0, 1, STEMTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(stemTimeEClass, this.getSTEMTime(), "addIncrement", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeIncrement", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(stemTimeEClass, ecorePackage.getEInt(), "hashCode", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(stemTimeEClass, ecorePackage.getEBoolean(), "equals", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEJavaObject(), "obj", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(comparableEClass, Comparable.class, "Comparable", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ModelPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/NodeDecoratorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/NodeDecoratorImpl.java
new file mode 100644
index 0000000..7ece81a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/NodeDecoratorImpl.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Node Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class NodeDecoratorImpl extends DecoratorImpl implements NodeDecorator {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NodeDecoratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.NODE_DECORATOR;
+	}
+
+	/**
+	 * @see org.eclipse.stem.model.impl.DecoratorImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		return retValue;
+	} // sane
+} // NodeDecoratorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/STEMTimeImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/STEMTimeImpl.java
new file mode 100644
index 0000000..3579a58
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/impl/STEMTimeImpl.java
@@ -0,0 +1,224 @@
+package org.eclipse.stem.core.model.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Calendar;
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>STEM Time</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.impl.STEMTimeImpl#getTime <em>Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class STEMTimeImpl extends EObjectImpl implements STEMTime {
+	/**
+	 * The default value of the '{@link #getTime() <em>Time</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Date TIME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTime() <em>Time</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected Date time = TIME_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected STEMTimeImpl() {
+		super();
+		// Set the default time to the current time.
+		setTime(Calendar.getInstance().getTime());
+	} // STEMTimeImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModelPackage.Literals.STEM_TIME;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Date getTime() {
+		return (Date)time.clone();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setTime(Date newTime) {
+		Date oldTime = time;
+		time = (Date)newTime.clone();
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.STEM_TIME__TIME, oldTime, time));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public STEMTime addIncrement(long timeIncrement) {
+		final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+
+		final long newTime = time.getTime() + timeIncrement;
+		final Date newDate = new Date(newTime);
+
+		retValue.setTime(newDate);
+
+		return retValue;
+	} // addIncrement
+	
+	
+
+	/**
+	 * compares STEMTimes
+	 * 
+	 */
+	public int compareTo(STEMTime otherTime) {
+		return time.compareTo(otherTime.getTime());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public int hashCode() {
+		final int PRIME = 31;
+		int result = 1;
+		result = PRIME * result + ((time == null) ? 0 : time.hashCode());
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final STEMTimeImpl other = (STEMTimeImpl) obj;
+		if (time == null) {
+			if (other.time != null)
+				return false;
+		} else if (!time.equals(other.time))
+			return false;
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModelPackage.STEM_TIME__TIME:
+				return getTime();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModelPackage.STEM_TIME__TIME:
+				setTime((Date)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModelPackage.STEM_TIME__TIME:
+				setTime(TIME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModelPackage.STEM_TIME__TIME:
+				return TIME_EDEFAULT == null ? time != null : !TIME_EDEFAULT.equals(time);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		// StringBuffer result = new StringBuffer(super.toString());
+		// result.append(" (time: ");
+		// result.append(time);
+		// result.append(')');
+		return time.toString();
+	} // toString
+
+} // STEMTimeImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/DecoratorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/DecoratorItemProvider.java
new file mode 100644
index 0000000..29d10b9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/DecoratorItemProvider.java
@@ -0,0 +1,188 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.Decorator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			//addLabelsToUpdatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ModelPackage.Literals.DECORATOR__LABELS_TO_UPDATE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Decorator.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Decorator")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((Decorator)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Decorator_type") : //$NON-NLS-1$
+			getString("_UI_Decorator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Decorator.class)) {
+			case ModelPackage.DECORATOR__PROGRESS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/EdgeDecoratorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/EdgeDecoratorItemProvider.java
new file mode 100644
index 0000000..d6d8fd5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/EdgeDecoratorItemProvider.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.model.EdgeDecorator;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.EdgeDecorator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgeDecoratorItemProvider
+	extends DecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeDecoratorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((EdgeDecorator)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_EdgeDecorator_type") : //$NON-NLS-1$
+			getString("_UI_EdgeDecorator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/GraphDecoratorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/GraphDecoratorItemProvider.java
new file mode 100644
index 0000000..262f000
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/GraphDecoratorItemProvider.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.model.GraphDecorator;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.GraphDecorator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphDecoratorItemProvider
+	extends DecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphDecoratorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((GraphDecorator)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_GraphDecorator_type") : //$NON-NLS-1$
+			getString("_UI_GraphDecorator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelEditPlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelEditPlugin.java
new file mode 100644
index 0000000..7babd54
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelEditPlugin.java
@@ -0,0 +1,102 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CommonEditPlugin;
+import org.eclipse.stem.core.graph.provider.GraphEditPlugin;
+
+/**
+ * This is the central singleton for the Model editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ModelEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ModelEditPlugin INSTANCE = new ModelEditPlugin();
+
+	/**
+	 * 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 ModelEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     GraphEditPlugin.INSTANCE,
+		     CommonEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProvider.java
new file mode 100644
index 0000000..e86e916
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProvider.java
@@ -0,0 +1,366 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.CreateChildCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.swt.dnd.DND;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.Model} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ModelPackage.Literals.MODEL__MODELS);
+			childrenFeatures.add(ModelPackage.Literals.MODEL__GRAPHS);
+			childrenFeatures.add(ModelPackage.Literals.MODEL__GRAPH_DECORATORS);
+			childrenFeatures.add(ModelPackage.Literals.MODEL__NODE_DECORATORS);
+			childrenFeatures.add(ModelPackage.Literals.MODEL__EDGE_DECORATORS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+		
+		Object temp = child;
+		if (child instanceof IFile) {
+			// Yes
+			final IFile iFile = (IFile) child;
+			final URI uri = URI.createFileURI(iFile.getLocation().toString()); 
+			final Identifiable identifable = Utility.getIdentifiable(uri);
+			temp = identifable;
+		} // if IFile
+		
+		else if (child instanceof String) {
+			// Yes
+			// These come from IdentifablePluginView
+			final String uriString = (String) child;
+			try {
+				final URI uri = URI.createURI(uriString);
+				final Identifiable identifable  = Utility.getIdentifiable(uri);
+				temp = identifable;
+			} catch (Exception e) {
+				// Ignore it
+			}
+		} // if String
+
+		if (temp instanceof Identifiable) {
+			return super.getChildFeature(object, temp);
+		} else
+			return super.getChildFeature(object, child);
+	} // getChildFeature
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EStructuralFeature getChildFeatureGen(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+	
+	/**
+	 * This returns Model.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+//		return getImageGen(object);
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Model"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Model)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Model_type") : //$NON-NLS-1$
+			getString("_UI_Model_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Model.class)) {
+			case ModelPackage.MODEL__MODELS:
+			case ModelPackage.MODEL__GRAPHS:
+			case ModelPackage.MODEL__GRAPH_DECORATORS:
+			case ModelPackage.MODEL__NODE_DECORATORS:
+			case ModelPackage.MODEL__EDGE_DECORATORS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ModelPackage.Literals.MODEL__MODELS,
+				 ModelFactory.eINSTANCE.createModel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ModelPackage.Literals.MODEL__GRAPHS,
+				 GraphFactory.eINSTANCE.createGraph()));
+	}
+
+	
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain, java.lang.Object, float, int, int, java.util.Collection)
+	 */
+	@Override
+	protected Command createDragAndDropCommand(EditingDomain domain,
+			Object owner, float location, int operations, int operation,
+			Collection<?> collection) {
+		// We add DND.DROP_LINK as an allowed operation because all drops will
+		// be links and some sources don't allow links, we convert to links anyway
+		return super.createDragAndDropCommand(domain, owner, location, operations | DND.DROP_LINK,
+				operation, collection);
+	} // createDragAndDropCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Command createAddCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Collection<?> collection, int index) {
+		final Collection identifiableCollection = new ArrayList();
+		for (Object value : collection) {
+
+			Object temp = value;
+			if (value instanceof IFile) {
+				// Yes
+				final IFile iFile = (IFile) value;
+				final URI uri = URI.createFileURI(iFile.getLocation()
+						.toString());
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				identifiableCollection.add(identifable);
+				temp = identifable;
+			} // if IFile
+
+			else if (value instanceof String) {
+				// Yes
+				final String uriString = (String) value;
+				try {
+					final URI uri = URI.createURI(uriString);
+					final Identifiable identifable = Utility
+							.getIdentifiable(uri);
+					temp = identifable;
+				} catch (Exception e) {
+					// Ignore it
+				}
+			} // if String
+
+			if (temp instanceof Identifiable) {
+				identifiableCollection.add(temp);
+			}
+		} // for each Object
+
+		return super.createAddCommand(domain, owner, feature,
+				identifiableCollection, index);
+	} // createAddCommand
+
+	@Override
+	protected Command createCreateChildCommand(EditingDomain domain,
+			EObject owner, EStructuralFeature feature, Object value, int index,
+			Collection<?> collection) {
+		
+		return new CreateChildCommand(domain,owner,feature,value,index,collection,this) {
+		
+			@Override
+			protected Command createCommand() {
+
+				Command retValue = null;
+
+				final Command createChildCommand = super.createCommand();
+
+				// Are we creating a Model or a Graph?
+				if (child instanceof Model || child instanceof Graph) {
+					// Yes
+					final EObject temp = (EObject) child;
+					// Does the child have a resource already?
+					if (temp.eResource() == null) {
+						// No
+						final Resource parentResource = owner.eResource();
+						final Command addCommand = new AddCommand(domain,
+								parentResource.getContents(), temp);
+
+						final CompoundCommand compoundCommand = new CompoundCommand(
+								0, createChildCommand.getLabel(),
+								createChildCommand.getDescription());
+						compoundCommand.append(createChildCommand);
+						compoundCommand.append(addCommand);
+						retValue = compoundCommand;
+					} // if Model does not have a resource
+				} // if Model
+				else {
+					retValue = createChildCommand;
+				}
+
+				return retValue;
+			} // createCommand
+		
+		}; // CreateChildCommand
+		
+	} // createCreateChildCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isWrappingNeeded(java.lang.Object)
+	 */
+	@Override
+	protected boolean isWrappingNeeded(Object object) {
+		// return super.isWrappingNeeded(object);
+		// We return true so that non-containment references are wrapped. This
+		// enables the delete command in the editor's context menu.
+		return true;
+	} // isWrappingNeeded
+	
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProviderAdapterFactory.java
new file mode 100644
index 0000000..9722dba
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/ModelItemProviderAdapterFactory.java
@@ -0,0 +1,327 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.model.util.ModelAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelItemProviderAdapterFactory extends ModelAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.Decorator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorItemProvider decoratorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.Decorator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDecoratorAdapter() {
+		if (decoratorItemProvider == null) {
+			decoratorItemProvider = new DecoratorItemProvider(this);
+		}
+
+		return decoratorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.EdgeDecorator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EdgeDecoratorItemProvider edgeDecoratorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.EdgeDecorator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createEdgeDecoratorAdapter() {
+		if (edgeDecoratorItemProvider == null) {
+			edgeDecoratorItemProvider = new EdgeDecoratorItemProvider(this);
+		}
+
+		return edgeDecoratorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.GraphDecorator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GraphDecoratorItemProvider graphDecoratorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.GraphDecorator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createGraphDecoratorAdapter() {
+		if (graphDecoratorItemProvider == null) {
+			graphDecoratorItemProvider = new GraphDecoratorItemProvider(this);
+		}
+
+		return graphDecoratorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.Model} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModelItemProvider modelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.Model}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createModelAdapter() {
+		if (modelItemProvider == null) {
+			modelItemProvider = new ModelItemProvider(this);
+		}
+
+		return modelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.NodeDecorator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NodeDecoratorItemProvider nodeDecoratorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.NodeDecorator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createNodeDecoratorAdapter() {
+		if (nodeDecoratorItemProvider == null) {
+			nodeDecoratorItemProvider = new NodeDecoratorItemProvider(this);
+		}
+
+		return nodeDecoratorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.model.STEMTime} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeItemProvider stemTimeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.model.STEMTime}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSTEMTimeAdapter() {
+		if (stemTimeItemProvider == null) {
+			stemTimeItemProvider = new STEMTimeItemProvider(this);
+		}
+
+		return stemTimeItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (decoratorItemProvider != null) decoratorItemProvider.dispose();
+		if (edgeDecoratorItemProvider != null) edgeDecoratorItemProvider.dispose();
+		if (graphDecoratorItemProvider != null) graphDecoratorItemProvider.dispose();
+		if (modelItemProvider != null) modelItemProvider.dispose();
+		if (nodeDecoratorItemProvider != null) nodeDecoratorItemProvider.dispose();
+		if (stemTimeItemProvider != null) stemTimeItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/NodeDecoratorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/NodeDecoratorItemProvider.java
new file mode 100644
index 0000000..89d06c0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/NodeDecoratorItemProvider.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.model.NodeDecorator;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.NodeDecorator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodeDecoratorItemProvider
+	extends DecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeDecoratorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((NodeDecorator)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_NodeDecorator_type") : //$NON-NLS-1$
+			getString("_UI_NodeDecorator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/STEMTimeItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/STEMTimeItemProvider.java
new file mode 100644
index 0000000..040e650
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/provider/STEMTimeItemProvider.java
@@ -0,0 +1,160 @@
+package org.eclipse.stem.core.model.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.model.STEMTime} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class STEMTimeItemProvider extends ItemProviderAdapter implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public STEMTimeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Time feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTime_time_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTime_time_feature", "_UI_STEMTime_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModelPackage.Literals.STEM_TIME__TIME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns STEMTime.gif.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/STEMTime")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		Date labelValue = ((STEMTime)object).getTime();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_STEMTime_type") : //$NON-NLS-1$
+			getString("_UI_STEMTime_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(STEMTime.class)) {
+			case ModelPackage.STEM_TIME__TIME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelAdapterFactory.java
new file mode 100644
index 0000000..6aa6900
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelAdapterFactory.java
@@ -0,0 +1,279 @@
+package org.eclipse.stem.core.model.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.model.*;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.model.ModelPackage
+ * @generated
+ */
+public class ModelAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ModelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ModelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModelSwitch<Adapter> modelSwitch =
+		new ModelSwitch<Adapter>() {
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseEdgeDecorator(EdgeDecorator object) {
+				return createEdgeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseGraphDecorator(GraphDecorator object) {
+				return createGraphDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseModel(Model object) {
+				return createModelAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseSTEMTime(STEMTime object) {
+				return createSTEMTimeAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public <T> Adapter caseCommon_Comparable(Comparable<T> object) {
+				return createCommon_ComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @generated
+	 */
+	public Adapter createEdgeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @generated
+	 */
+	public Adapter createGraphDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Model <em>Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Model
+	 * @generated
+	 */
+	public Adapter createModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.STEMTime <em>STEM Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.STEMTime
+	 * @generated
+	 */
+	public Adapter createSTEMTimeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createCommon_ComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ModelAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelSwitch.java
new file mode 100644
index 0000000..7e4a084
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/model/util/ModelSwitch.java
@@ -0,0 +1,307 @@
+package org.eclipse.stem.core.model.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.model.*;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.model.ModelPackage
+ * @generated
+ */
+public class ModelSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ModelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ModelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ModelPackage.DECORATOR: {
+				Decorator decorator = (Decorator)theEObject;
+				T1 result = caseDecorator(decorator);
+				if (result == null) result = caseIdentifiable(decorator);
+				if (result == null) result = caseCommon_Comparable(decorator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModelPackage.EDGE_DECORATOR: {
+				EdgeDecorator edgeDecorator = (EdgeDecorator)theEObject;
+				T1 result = caseEdgeDecorator(edgeDecorator);
+				if (result == null) result = caseDecorator(edgeDecorator);
+				if (result == null) result = caseIdentifiable(edgeDecorator);
+				if (result == null) result = caseCommon_Comparable(edgeDecorator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModelPackage.GRAPH_DECORATOR: {
+				GraphDecorator graphDecorator = (GraphDecorator)theEObject;
+				T1 result = caseGraphDecorator(graphDecorator);
+				if (result == null) result = caseDecorator(graphDecorator);
+				if (result == null) result = caseIdentifiable(graphDecorator);
+				if (result == null) result = caseCommon_Comparable(graphDecorator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModelPackage.MODEL: {
+				Model model = (Model)theEObject;
+				T1 result = caseModel(model);
+				if (result == null) result = caseIdentifiable(model);
+				if (result == null) result = caseCommon_Comparable(model);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModelPackage.NODE_DECORATOR: {
+				NodeDecorator nodeDecorator = (NodeDecorator)theEObject;
+				T1 result = caseNodeDecorator(nodeDecorator);
+				if (result == null) result = caseDecorator(nodeDecorator);
+				if (result == null) result = caseIdentifiable(nodeDecorator);
+				if (result == null) result = caseCommon_Comparable(nodeDecorator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModelPackage.STEM_TIME: {
+				STEMTime stemTime = (STEMTime)theEObject;
+				T1 result = caseSTEMTime(stemTime);
+				if (result == null) result = caseComparable(stemTime);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeDecorator(EdgeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraphDecorator(GraphDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModel(Model object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>STEM Time</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>STEM Time</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSTEMTime(STEMTime object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseCommon_Comparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ModelSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleModifier.java
new file mode 100644
index 0000000..b11563a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleModifier.java
@@ -0,0 +1,85 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Double Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.DoubleModifier#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.DoubleModifier#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.core.modifier.ModifierPackage#getDoubleModifier()
+ * @model
+ * @generated
+ */
+public interface DoubleModifier extends SingleValueModifier {
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(double)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getDoubleModifier_Value()
+	 * @model
+	 * @generated
+	 */
+	double getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleModifier#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' attribute.
+	 * @see #setOriginalValue(double)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getDoubleModifier_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	double getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(double value);
+} // DoubleModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleNOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleNOPModifier.java
new file mode 100644
index 0000000..333ed21
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleNOPModifier.java
@@ -0,0 +1,24 @@
+// DoubleNOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface DoubleNOPModifier extends NOPModifier {
+	// Nothing
+} // DoubleNOPModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleRangeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleRangeModifier.java
new file mode 100644
index 0000000..4914e55
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleRangeModifier.java
@@ -0,0 +1,100 @@
+// DoubleRangeModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>DoubleRangeModifier</code> modifies a double valued feature from a
+ * starting value to and end value (inclusive> by increments.
+ * 
+ * @model
+ */
+public interface DoubleRangeModifier extends RangeModifier {
+	
+	/**
+	 * @model
+	 */
+	double getOriginalValue();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(double value);
+
+	/**
+	 * @model default="-99999999.0"
+	 */
+	double getStartValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getStartValue <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Value</em>' attribute.
+	 * @see #getStartValue()
+	 * @generated
+	 */
+	void setStartValue(double value);
+
+	/**
+	 * @model default="-99999999.0"
+	 */
+	double getEndValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getEndValue <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Value</em>' attribute.
+	 * @see #getEndValue()
+	 * @generated
+	 */
+	void setEndValue(double value);
+
+	/**
+	 * @model default="-99999999.0"
+	 */
+	double getIncrement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getIncrement <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increment</em>' attribute.
+	 * @see #getIncrement()
+	 * @generated
+	 */
+	void setIncrement(double value);
+
+	/**
+	 * @return the next value of the feature
+	 * @model default="0.0" changeable="true"
+	 */
+	double getNextValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getNextValue <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value</em>' attribute.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	void setNextValue(double value);
+
+	
+} // DoubleRangeModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleSequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleSequenceModifier.java
new file mode 100644
index 0000000..ab520a9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/DoubleSequenceModifier.java
@@ -0,0 +1,30 @@
+// DoubleSequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A {@link DoubleSequenceModifier} modifies a feature by setting it to a
+ * sequence of "double" values.
+ * 
+ * @model
+ */
+public interface DoubleSequenceModifier extends SequenceModifier {
+
+	/**
+	 * @model
+	 */
+	EList<Double> getSequence();
+
+} // DoubleSequenceModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/FeatureModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/FeatureModifier.java
new file mode 100644
index 0000000..c7fa4e2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/FeatureModifier.java
@@ -0,0 +1,129 @@
+// FeatureModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.String;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * A {@link FeatureModifier} specifies how to change the value of
+ * "feature" in an {@link Identifiable}.
+ * 
+ * @model abstract="true"
+ * @implements SanityChecker
+ */
+public interface FeatureModifier extends EObject, SanityChecker {
+	
+	/**
+	 * @return the {@link Identifiable} that will be modified.
+	 * @model 
+	 */
+	EObject getTarget();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.FeatureModifier#getTarget <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target</em>' reference.
+	 * @see #getTarget()
+	 * @generated
+	 */
+	void setTarget(EObject value);
+
+	/**
+	 * @return the id of the feature being modified
+	 * @model transient="true" resolveProxies="false"
+	 */
+	EStructuralFeature getEStructuralFeature();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.FeatureModifier#getEStructuralFeature <em>EStructural Feature</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>EStructural Feature</em>' reference.
+	 * @see #getEStructuralFeature()
+	 * @generated
+	 */
+	void setEStructuralFeature(EStructuralFeature value);
+
+	/**
+	 * @model
+	 */
+	String getFeatureName();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.FeatureModifier#getFeatureName <em>Feature Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Feature Name</em>' attribute.
+	 * @see #getFeatureName()
+	 * @generated
+	 */
+	void setFeatureName(String value);
+
+	/**
+	 * @return the featureID of the {@link EStructuralFeature} to be modified.
+	 * @model
+	 */
+	int getFeatureId();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.FeatureModifier#getFeatureId <em>Feature Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Feature Id</em>' attribute.
+	 * @see #getFeatureId()
+	 * @generated
+	 */
+	void setFeatureId(int value);
+
+	/**
+	 * @return the textual representation of the value that was used in the
+	 *         last call to {@link #updateFeature()}
+	 * @see #getNextValue()
+	 * @model transient="true" changeable="false"
+	 */
+	String getCurrentValueText();
+	
+	/**
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void updateFeature();
+
+	/**
+	 * @return a {@link List} of {@link String}s that summarize the
+	 *         modifications made to the last {@link EObject} by the call to
+	 *         {@link #updateFeature()}.
+	 * model volatile="true" transient="true" changeable="false"
+	 */
+	String getModificationSummary();
+
+	/**
+	 * @return <code>true</code> if all of the modifications to the feature
+	 *         been completed, <code>false</code>, otherwise.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean isComplete();
+	
+	/**
+	 * Restore the value of the feature being modified to its original value
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+
+} // FeatureModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerModifier.java
new file mode 100644
index 0000000..a43e5df
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerModifier.java
@@ -0,0 +1,85 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Integer Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.IntegerModifier#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.IntegerModifier#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.core.modifier.ModifierPackage#getIntegerModifier()
+ * @model
+ * @generated
+ */
+public interface IntegerModifier extends SingleValueModifier {
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(int)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getIntegerModifier_Value()
+	 * @model
+	 * @generated
+	 */
+	int getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerModifier#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(int value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' attribute.
+	 * @see #setOriginalValue(int)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getIntegerModifier_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	int getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(int value);
+} // IntegerModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerNOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerNOPModifier.java
new file mode 100644
index 0000000..5f3a291
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerNOPModifier.java
@@ -0,0 +1,24 @@
+// IntegerNOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface IntegerNOPModifier extends NOPModifier {
+	// Nothing
+} // IntegerNOPModifier
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerRangeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerRangeModifier.java
new file mode 100644
index 0000000..22e26ae
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerRangeModifier.java
@@ -0,0 +1,99 @@
+// IntegerRangeModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>IntegerRangeModifier</code> modifies an integer valued feature from
+ * a starting value to and end value (inclusive> by increments.
+ * 
+ * @model
+ */
+public interface IntegerRangeModifier extends RangeModifier {
+	
+	/**
+	 * @model
+	 */
+	int getOriginalValue();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(int value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	int getStartValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getStartValue <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Value</em>' attribute.
+	 * @see #getStartValue()
+	 * @generated
+	 */
+	void setStartValue(int value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	int getEndValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getEndValue <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Value</em>' attribute.
+	 * @see #getEndValue()
+	 * @generated
+	 */
+	void setEndValue(int value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	int getIncrement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getIncrement <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increment</em>' attribute.
+	 * @see #getIncrement()
+	 * @generated
+	 */
+	void setIncrement(int value);
+	
+	/**
+	 * @return the next value of the feature
+	 * @model default="-99999999" changeable="true"
+	 */
+	int getNextValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getNextValue <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value</em>' attribute.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	void setNextValue(int value);
+	
+} // IntegerRangeModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerSequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerSequenceModifier.java
new file mode 100644
index 0000000..a7098e4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/IntegerSequenceModifier.java
@@ -0,0 +1,28 @@
+// IntegerSequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A {@link IntegerSequenceModifier} modifies a feature by setting it to a
+ * sequence of "integer" values.
+ * 
+ * @model
+ */
+public interface IntegerSequenceModifier extends SequenceModifier {
+	/**
+	 * @model
+	 */
+	EList<Integer> getSequence();
+} // IntegerSequenceModifier
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongModifier.java
new file mode 100644
index 0000000..66b9070
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongModifier.java
@@ -0,0 +1,85 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Long Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.LongModifier#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.LongModifier#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.core.modifier.ModifierPackage#getLongModifier()
+ * @model
+ * @generated
+ */
+public interface LongModifier extends SingleValueModifier {
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(long)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getLongModifier_Value()
+	 * @model
+	 * @generated
+	 */
+	long getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongModifier#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(long value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' attribute.
+	 * @see #setOriginalValue(long)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getLongModifier_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	long getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(long value);
+} // LongModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongNOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongNOPModifier.java
new file mode 100644
index 0000000..62652b8
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongNOPModifier.java
@@ -0,0 +1,24 @@
+// LongNOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface LongNOPModifier extends NOPModifier {
+	// Nothing
+} // LongNOPModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongRangeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongRangeModifier.java
new file mode 100644
index 0000000..d860a85
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongRangeModifier.java
@@ -0,0 +1,98 @@
+// LongRangeModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>LongRangeModifier</code> modifies an long valued feature from
+ * a starting value to and end value (inclusive> by increments.
+ * 
+ * @model
+ */
+public interface LongRangeModifier extends RangeModifier {
+	
+	/**
+	 * @model default="-99999999"
+	 */
+	long getOriginalValue();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(long value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	long getStartValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getStartValue <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Value</em>' attribute.
+	 * @see #getStartValue()
+	 * @generated
+	 */
+	void setStartValue(long value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	long getEndValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getEndValue <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Value</em>' attribute.
+	 * @see #getEndValue()
+	 * @generated
+	 */
+	void setEndValue(long value);
+
+	/**
+	 * @model default="-99999999"
+	 */
+	long getIncrement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getIncrement <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increment</em>' attribute.
+	 * @see #getIncrement()
+	 * @generated
+	 */
+	void setIncrement(long value);
+	
+	/**
+	 * @return the next value of the feature
+	 * @model default="-99999999" changeable="true"
+	 */
+	long getNextValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getNextValue <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value</em>' attribute.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	void setNextValue(long value);
+} // LongRangeModifier
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongSequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongSequenceModifier.java
new file mode 100644
index 0000000..8821983
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/LongSequenceModifier.java
@@ -0,0 +1,28 @@
+// LongSequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A {@link LongSequenceModifier} modifies a feature by setting it to a
+ * sequence of "long" values.
+ * 
+ * @model
+ */
+public interface LongSequenceModifier extends SequenceModifier {
+	/**
+	 * @model
+	 */
+	EList<Long> getSequence();
+} // LongSequenceModifier
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifiable.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifiable.java
new file mode 100644
index 0000000..48a8d54
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifiable.java
@@ -0,0 +1,54 @@
+// Modifiable.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * This interface is a "marker interface" used to identify {@link Identifiable}s
+ * that can be modified by a {@link Modifier}. The main use of this marker is in
+ * <a href="http://wiki.eclipse.org/Command_Core_Expressions">Command Core
+ * Expressions</a> where they are used in <em>adapt</em> elements to test if the
+ * current selection can be adapted to the type <code>Modifiable</code>. </p>
+ * <p>
+ * An example of its use can be found in
+ * <code>org.eclipse.stem.ui/plugin.xml</code>. In that file there are
+ * several instances of extensions of the extension point
+ * <code>org.eclipse.core.expressions.definitions</code>; one contains the
+ * definition of the expression
+ * <code>org.eclipse.stem.ui.isModifiableIdentifiable</code> which includes
+ * a test that the current selection can be adapted to <code>Modifiable</code>
+ * (among other things). The value of the expression is used to enable the
+ * command <code>org.eclipse.stem.ui.command.newmodifierwizard</code>
+ * defined via a <code>org.eclipse.ui.commands</code> extension point elsewhere
+ * in the same file. The command opens the wizard for creating a new
+ * <code>Modifiable</code> given the current selection. The "Create Modifier"
+ * entry in the popup context menu for the current selection will appear when
+ * this command is enabled.
+ * </p>
+ * <p>
+ * It is not sufficient to simply implement the <code>Modifiable</code>
+ * interface for this test to return <code>true</code> in the core expression.
+ * An instance of {@link IAdapterFactory} needs to be defined and then
+ * registered as a "run time adapter factory" using the extension point
+ * <code>org.eclipse.core.runtime.adapters</code>. The file
+ * <code>org.eclipse.stem.ui/plugin.xml</code> contains examples.
+ * 
+ * 
+ * @model interface="true"
+ */
+public interface Modifiable extends EObject {
+	// Nothing
+} // Modifiable
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifier.java
new file mode 100644
index 0000000..899d8a2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/Modifier.java
@@ -0,0 +1,120 @@
+// Modifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.String;
+import java.util.List;
+
+import javax.sql.rowset.Predicate;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.trigger.Trigger;
+
+/**
+ * A <code>Modifier</code> specifies the changes to be made to the features of
+ * an specific "target" {@link EObject}. It contains the {@link URI} of the
+ * {@link Identifiable} and a collection of {@link FeatureModifier}s that
+ * perform the actual feature modification. A <code>Modifier</code> can change
+ * the value of a feature in a {@link LabelValue}, instances of which are not
+ * {@link Identifiable}s. In such cases, the {@link URI} specifies the
+ * {@link Label} instance which contains a reference to the {@link LabelValue}
+ * instance that will be modified.
+ * <p>
+ * <code>Modifiers</code> are used by both {@link Experiment}s and
+ * {@link Trigger}s to modify elements of a canonical {@link Graph} that
+ * represents simulation state. In the former case, the <code>Modifier</code>
+ * makes alterations to a {@link Scenario} instance before it is used to launch
+ * a Simulation. In the later case, a <code>Modifier</code> is used as a
+ * {@link Decorator} that is conditionally enabled by the value of the
+ * {@link Predicate} referenced by a {@link Trigger}.
+ * <p>
+ * The {@link FeatureModifier}s perform the actual modifications to the
+ * {@link EObject}s.
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * @model
+ */
+public interface Modifier extends Decorator {
+
+	String URI_TYPE_MODIFIER_SEGMENT = "modifier";
+	
+	/**
+	 * @model
+	 */
+	URI getTargetURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.Modifier#getTargetURI <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target URI</em>' attribute.
+	 * @see #getTargetURI()
+	 * @generated
+	 */
+	void setTargetURI(URI value);
+
+	/**
+	 * @model containment="true"
+	 */
+	EList<FeatureModifier> getFeatureModifiers();
+
+	/**
+	 * @param baseScenario
+	 *            the {@link Scenario} to be modified.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void updateScenario(final Scenario baseScenario);
+
+	/**
+	 * @return a {@link List} of {@link String}s that summarize the
+	 *         modifications made to the last {@link Scenario} by the call to
+	 *         {@link #updateScenario(Scenario)}.
+	 * model volatile="true" transient="true" changeable="false"
+	 */
+	List<String> getModificationSummary();
+
+	/**
+	 * @return <code>true</code> if all of the modifications to the
+	 *         {@link Identifiable} have been completed, <code>false</code>,
+	 *         otherwise.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean isComplete();
+
+	/**
+	 * Restore the value of all of the features being modified to their original
+	 * values.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+} // Modifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierFactory.java
new file mode 100644
index 0000000..6bfa374
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierFactory.java
@@ -0,0 +1,222 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.modifier.ModifierPackage
+ * @generated
+ */
+public interface ModifierFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ModifierFactory eINSTANCE = org.eclipse.stem.core.modifier.impl.ModifierFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Double NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Double NOP Modifier</em>'.
+	 * @generated
+	 */
+	DoubleNOPModifier createDoubleNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>Double Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Double Range Modifier</em>'.
+	 * @generated
+	 */
+	DoubleRangeModifier createDoubleRangeModifier();
+
+	/**
+	 * Returns a new object of class '<em>Double Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Double Sequence Modifier</em>'.
+	 * @generated
+	 */
+	DoubleSequenceModifier createDoubleSequenceModifier();
+
+	/**
+	 * Returns a new object of class '<em>Integer NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Integer NOP Modifier</em>'.
+	 * @generated
+	 */
+	IntegerNOPModifier createIntegerNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>Integer Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Integer Range Modifier</em>'.
+	 * @generated
+	 */
+	IntegerRangeModifier createIntegerRangeModifier();
+
+	/**
+	 * Returns a new object of class '<em>Integer Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Integer Sequence Modifier</em>'.
+	 * @generated
+	 */
+	IntegerSequenceModifier createIntegerSequenceModifier();
+
+	/**
+	 * Returns a new object of class '<em>Long NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Long NOP Modifier</em>'.
+	 * @generated
+	 */
+	LongNOPModifier createLongNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>Long Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Long Range Modifier</em>'.
+	 * @generated
+	 */
+	LongRangeModifier createLongRangeModifier();
+
+	/**
+	 * Returns a new object of class '<em>Long Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Long Sequence Modifier</em>'.
+	 * @generated
+	 */
+	LongSequenceModifier createLongSequenceModifier();
+
+	/**
+	 * Returns a new object of class '<em>Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Modifier</em>'.
+	 * @generated
+	 */
+	Modifier createModifier();
+
+	/**
+	 * Returns a new object of class '<em>NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>NOP Modifier</em>'.
+	 * @generated
+	 */
+	NOPModifier createNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>STEM Time NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>STEM Time NOP Modifier</em>'.
+	 * @generated
+	 */
+	STEMTimeNOPModifier createSTEMTimeNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>STEM Time Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>STEM Time Range Modifier</em>'.
+	 * @generated
+	 */
+	STEMTimeRangeModifier createSTEMTimeRangeModifier();
+
+	/**
+	 * Returns a new object of class '<em>STEM Time Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>STEM Time Sequence Modifier</em>'.
+	 * @generated
+	 */
+	STEMTimeSequenceModifier createSTEMTimeSequenceModifier();
+
+	/**
+	 * Returns a new object of class '<em>String NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>String NOP Modifier</em>'.
+	 * @generated
+	 */
+	StringNOPModifier createStringNOPModifier();
+
+	/**
+	 * Returns a new object of class '<em>String Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>String Sequence Modifier</em>'.
+	 * @generated
+	 */
+	StringSequenceModifier createStringSequenceModifier();
+
+	/**
+	 * Returns a new object of class '<em>Double Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Double Modifier</em>'.
+	 * @generated
+	 */
+	DoubleModifier createDoubleModifier();
+
+	/**
+	 * Returns a new object of class '<em>Integer Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Integer Modifier</em>'.
+	 * @generated
+	 */
+	IntegerModifier createIntegerModifier();
+
+	/**
+	 * Returns a new object of class '<em>Long Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Long Modifier</em>'.
+	 * @generated
+	 */
+	LongModifier createLongModifier();
+
+	/**
+	 * Returns a new object of class '<em>STEM Time Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>STEM Time Modifier</em>'.
+	 * @generated
+	 */
+	STEMTimeModifier createSTEMTimeModifier();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ModifierPackage getModifierPackage();
+
+} //ModifierFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierPackage.java
new file mode 100644
index 0000000..49cec51
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/ModifierPackage.java
@@ -0,0 +1,3830 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.model.ModelPackage;
+//import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.modifier.ModifierFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ModifierPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "modifier"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/modifier.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.modifier"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ModifierPackage eINSTANCE = org.eclipse.stem.core.modifier.impl.ModifierPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl <em>Feature Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getFeatureModifier()
+	 * @generated
+	 */
+	int FEATURE_MODIFIER = 3;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__TARGET = 0;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__ESTRUCTURAL_FEATURE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__FEATURE_NAME = 2;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__FEATURE_ID = 3;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__CURRENT_VALUE_TEXT = 4;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER__COMPLETE = 5;
+
+	/**
+	 * The number of structural features of the '<em>Feature Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_MODIFIER_FEATURE_COUNT = 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.NOPModifierImpl <em>NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.NOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getNOPModifier()
+	 * @generated
+	 */
+	int NOP_MODIFIER = 11;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__TARGET = FEATURE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__ESTRUCTURAL_FEATURE = FEATURE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__FEATURE_NAME = FEATURE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__FEATURE_ID = FEATURE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__CURRENT_VALUE_TEXT = FEATURE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER__COMPLETE = FEATURE_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOP_MODIFIER_FEATURE_COUNT = FEATURE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.DoubleNOPModifierImpl <em>Double NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.DoubleNOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleNOPModifier()
+	 * @generated
+	 */
+	int DOUBLE_NOP_MODIFIER = 0;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__TARGET = NOP_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__ESTRUCTURAL_FEATURE = NOP_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__FEATURE_NAME = NOP_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__FEATURE_ID = NOP_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__CURRENT_VALUE_TEXT = NOP_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER__COMPLETE = NOP_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>Double NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_NOP_MODIFIER_FEATURE_COUNT = NOP_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.RangeModifierImpl <em>Range Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getRangeModifier()
+	 * @generated
+	 */
+	int RANGE_MODIFIER = 12;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__TARGET = FEATURE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__ESTRUCTURAL_FEATURE = FEATURE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__FEATURE_NAME = FEATURE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__FEATURE_ID = FEATURE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__CURRENT_VALUE_TEXT = FEATURE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER__COMPLETE = FEATURE_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>Range Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_MODIFIER_FEATURE_COUNT = FEATURE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl <em>Double Range Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleRangeModifier()
+	 * @generated
+	 */
+	int DOUBLE_RANGE_MODIFIER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__TARGET = RANGE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__ESTRUCTURAL_FEATURE = RANGE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__FEATURE_NAME = RANGE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__FEATURE_ID = RANGE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__CURRENT_VALUE_TEXT = RANGE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__COMPLETE = RANGE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__START_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__END_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__INCREMENT = RANGE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__NEXT_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Double Range Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_RANGE_MODIFIER_FEATURE_COUNT = RANGE_MODIFIER_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl <em>Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSequenceModifier()
+	 * @generated
+	 */
+	int SEQUENCE_MODIFIER = 16;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__TARGET = FEATURE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = FEATURE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__FEATURE_NAME = FEATURE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__FEATURE_ID = FEATURE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = FEATURE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__COMPLETE = FEATURE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__SEQUENCE_SIZE = FEATURE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = FEATURE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__NEXT_VALUE = FEATURE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER__ORIGINAL_VALUE = FEATURE_MODIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCE_MODIFIER_FEATURE_COUNT = FEATURE_MODIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.DoubleSequenceModifierImpl <em>Double Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.DoubleSequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleSequenceModifier()
+	 * @generated
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER = 2;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__TARGET = SEQUENCE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__FEATURE_NAME = SEQUENCE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__FEATURE_ID = SEQUENCE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__COMPLETE = SEQUENCE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__SEQUENCE_SIZE = SEQUENCE_MODIFIER__SEQUENCE_SIZE;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__NEXT_VALUE = SEQUENCE_MODIFIER__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__ORIGINAL_VALUE = SEQUENCE_MODIFIER__ORIGINAL_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER__SEQUENCE = SEQUENCE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Double Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_SEQUENCE_MODIFIER_FEATURE_COUNT = SEQUENCE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.IntegerNOPModifierImpl <em>Integer NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.IntegerNOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerNOPModifier()
+	 * @generated
+	 */
+	int INTEGER_NOP_MODIFIER = 4;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__TARGET = NOP_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__ESTRUCTURAL_FEATURE = NOP_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__FEATURE_NAME = NOP_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__FEATURE_ID = NOP_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__CURRENT_VALUE_TEXT = NOP_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER__COMPLETE = NOP_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>Integer NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_NOP_MODIFIER_FEATURE_COUNT = NOP_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl <em>Integer Range Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerRangeModifier()
+	 * @generated
+	 */
+	int INTEGER_RANGE_MODIFIER = 5;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__TARGET = RANGE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__ESTRUCTURAL_FEATURE = RANGE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__FEATURE_NAME = RANGE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__FEATURE_ID = RANGE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__CURRENT_VALUE_TEXT = RANGE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__COMPLETE = RANGE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__START_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__END_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__INCREMENT = RANGE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__NEXT_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Integer Range Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_RANGE_MODIFIER_FEATURE_COUNT = RANGE_MODIFIER_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.IntegerSequenceModifierImpl <em>Integer Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.IntegerSequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerSequenceModifier()
+	 * @generated
+	 */
+	int INTEGER_SEQUENCE_MODIFIER = 6;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__TARGET = SEQUENCE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__FEATURE_NAME = SEQUENCE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__FEATURE_ID = SEQUENCE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__COMPLETE = SEQUENCE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__SEQUENCE_SIZE = SEQUENCE_MODIFIER__SEQUENCE_SIZE;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__NEXT_VALUE = SEQUENCE_MODIFIER__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__ORIGINAL_VALUE = SEQUENCE_MODIFIER__ORIGINAL_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER__SEQUENCE = SEQUENCE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Integer Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_SEQUENCE_MODIFIER_FEATURE_COUNT = SEQUENCE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.LongNOPModifierImpl <em>Long NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.LongNOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongNOPModifier()
+	 * @generated
+	 */
+	int LONG_NOP_MODIFIER = 7;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__TARGET = NOP_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__ESTRUCTURAL_FEATURE = NOP_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__FEATURE_NAME = NOP_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__FEATURE_ID = NOP_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__CURRENT_VALUE_TEXT = NOP_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER__COMPLETE = NOP_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>Long NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_NOP_MODIFIER_FEATURE_COUNT = NOP_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl <em>Long Range Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongRangeModifier()
+	 * @generated
+	 */
+	int LONG_RANGE_MODIFIER = 8;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__TARGET = RANGE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__ESTRUCTURAL_FEATURE = RANGE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__FEATURE_NAME = RANGE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__FEATURE_ID = RANGE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__CURRENT_VALUE_TEXT = RANGE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__COMPLETE = RANGE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__START_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__END_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__INCREMENT = RANGE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__NEXT_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER__ORIGINAL_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Long Range Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_RANGE_MODIFIER_FEATURE_COUNT = RANGE_MODIFIER_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.LongSequenceModifierImpl <em>Long Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.LongSequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongSequenceModifier()
+	 * @generated
+	 */
+	int LONG_SEQUENCE_MODIFIER = 9;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__TARGET = SEQUENCE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__FEATURE_NAME = SEQUENCE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__FEATURE_ID = SEQUENCE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__COMPLETE = SEQUENCE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__SEQUENCE_SIZE = SEQUENCE_MODIFIER__SEQUENCE_SIZE;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__NEXT_VALUE = SEQUENCE_MODIFIER__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__ORIGINAL_VALUE = SEQUENCE_MODIFIER__ORIGINAL_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER__SEQUENCE = SEQUENCE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Long Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_SEQUENCE_MODIFIER_FEATURE_COUNT = SEQUENCE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.ModifierImpl <em>Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getModifier()
+	 * @generated
+	 */
+	int MODIFIER = 10;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__URI = ModelPackage.DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__TYPE_URI = ModelPackage.DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__DUBLIN_CORE = ModelPackage.DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__LABELS_TO_UPDATE = ModelPackage.DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__GRAPH = ModelPackage.DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__ENABLED = ModelPackage.DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__GRAPH_DECORATED = ModelPackage.DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__PROGRESS = ModelPackage.DECORATOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__TARGET_URI = ModelPackage.DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Feature Modifiers</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__FEATURE_MODIFIERS = ModelPackage.DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER__COMPLETE = ModelPackage.DECORATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIER_FEATURE_COUNT = ModelPackage.DECORATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeNOPModifierImpl <em>STEM Time NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.STEMTimeNOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeNOPModifier()
+	 * @generated
+	 */
+	int STEM_TIME_NOP_MODIFIER = 13;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__TARGET = NOP_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__ESTRUCTURAL_FEATURE = NOP_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__FEATURE_NAME = NOP_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__FEATURE_ID = NOP_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__CURRENT_VALUE_TEXT = NOP_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER__COMPLETE = NOP_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>STEM Time NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_NOP_MODIFIER_FEATURE_COUNT = NOP_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl <em>STEM Time Range Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	int STEM_TIME_RANGE_MODIFIER = 14;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__TARGET = RANGE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__ESTRUCTURAL_FEATURE = RANGE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__FEATURE_NAME = RANGE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__FEATURE_ID = RANGE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__CURRENT_VALUE_TEXT = RANGE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__COMPLETE = RANGE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Start Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__START_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__END_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__INCREMENT = RANGE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__NEXT_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE = RANGE_MODIFIER_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>STEM Time Range Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_RANGE_MODIFIER_FEATURE_COUNT = RANGE_MODIFIER_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeSequenceModifierImpl <em>STEM Time Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.STEMTimeSequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeSequenceModifier()
+	 * @generated
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER = 15;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__TARGET = SEQUENCE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__FEATURE_NAME = SEQUENCE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__FEATURE_ID = SEQUENCE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__COMPLETE = SEQUENCE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE_SIZE = SEQUENCE_MODIFIER__SEQUENCE_SIZE;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__NEXT_VALUE = SEQUENCE_MODIFIER__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__ORIGINAL_VALUE = SEQUENCE_MODIFIER__ORIGINAL_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE = SEQUENCE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>STEM Time Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_SEQUENCE_MODIFIER_FEATURE_COUNT = SEQUENCE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.StringNOPModifierImpl <em>String NOP Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.StringNOPModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getStringNOPModifier()
+	 * @generated
+	 */
+	int STRING_NOP_MODIFIER = 17;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__TARGET = NOP_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__ESTRUCTURAL_FEATURE = NOP_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__FEATURE_NAME = NOP_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__FEATURE_ID = NOP_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__CURRENT_VALUE_TEXT = NOP_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER__COMPLETE = NOP_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>String NOP Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_NOP_MODIFIER_FEATURE_COUNT = NOP_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.StringSequenceModifierImpl <em>String Sequence Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.StringSequenceModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getStringSequenceModifier()
+	 * @generated
+	 */
+	int STRING_SEQUENCE_MODIFIER = 18;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__TARGET = SEQUENCE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE = SEQUENCE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__FEATURE_NAME = SEQUENCE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__FEATURE_ID = SEQUENCE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT = SEQUENCE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__COMPLETE = SEQUENCE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence Size</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__SEQUENCE_SIZE = SEQUENCE_MODIFIER__SEQUENCE_SIZE;
+
+	/**
+	 * The feature id for the '<em><b>Current Sequence Index</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__NEXT_VALUE = SEQUENCE_MODIFIER__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__ORIGINAL_VALUE = SEQUENCE_MODIFIER__ORIGINAL_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Sequence</b></em>' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER__SEQUENCE = SEQUENCE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>String Sequence Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STRING_SEQUENCE_MODIFIER_FEATURE_COUNT = SEQUENCE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getModifiable()
+	 * @generated
+	 */
+	int MODIFIABLE = 19;
+
+	/**
+	 * The number of structural features of the '<em>Modifiable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MODIFIABLE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.SingleValueModifierImpl <em>Single Value Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.SingleValueModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSingleValueModifier()
+	 * @generated
+	 */
+	int SINGLE_VALUE_MODIFIER = 20;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__TARGET = FEATURE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__ESTRUCTURAL_FEATURE = FEATURE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__FEATURE_NAME = FEATURE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__FEATURE_ID = FEATURE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__CURRENT_VALUE_TEXT = FEATURE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER__COMPLETE = FEATURE_MODIFIER__COMPLETE;
+
+	/**
+	 * The number of structural features of the '<em>Single Value Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SINGLE_VALUE_MODIFIER_FEATURE_COUNT = FEATURE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.DoubleModifierImpl <em>Double Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.DoubleModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleModifier()
+	 * @generated
+	 */
+	int DOUBLE_MODIFIER = 21;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__TARGET = SINGLE_VALUE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__ESTRUCTURAL_FEATURE = SINGLE_VALUE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__FEATURE_NAME = SINGLE_VALUE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__FEATURE_ID = SINGLE_VALUE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__CURRENT_VALUE_TEXT = SINGLE_VALUE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__COMPLETE = SINGLE_VALUE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER__ORIGINAL_VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Double Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DOUBLE_MODIFIER_FEATURE_COUNT = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.IntegerModifierImpl <em>Integer Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.IntegerModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerModifier()
+	 * @generated
+	 */
+	int INTEGER_MODIFIER = 22;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__TARGET = SINGLE_VALUE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__ESTRUCTURAL_FEATURE = SINGLE_VALUE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__FEATURE_NAME = SINGLE_VALUE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__FEATURE_ID = SINGLE_VALUE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__CURRENT_VALUE_TEXT = SINGLE_VALUE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__COMPLETE = SINGLE_VALUE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER__ORIGINAL_VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Integer Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGER_MODIFIER_FEATURE_COUNT = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.LongModifierImpl <em>Long Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.LongModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongModifier()
+	 * @generated
+	 */
+	int LONG_MODIFIER = 23;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__TARGET = SINGLE_VALUE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__ESTRUCTURAL_FEATURE = SINGLE_VALUE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__FEATURE_NAME = SINGLE_VALUE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__FEATURE_ID = SINGLE_VALUE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__CURRENT_VALUE_TEXT = SINGLE_VALUE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__COMPLETE = SINGLE_VALUE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER__ORIGINAL_VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Long Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LONG_MODIFIER_FEATURE_COUNT = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl <em>STEM Time Modifier</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeModifier()
+	 * @generated
+	 */
+	int STEM_TIME_MODIFIER = 24;
+
+	/**
+	 * The feature id for the '<em><b>Target</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__TARGET = SINGLE_VALUE_MODIFIER__TARGET;
+
+	/**
+	 * The feature id for the '<em><b>EStructural Feature</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__ESTRUCTURAL_FEATURE = SINGLE_VALUE_MODIFIER__ESTRUCTURAL_FEATURE;
+
+	/**
+	 * The feature id for the '<em><b>Feature Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__FEATURE_NAME = SINGLE_VALUE_MODIFIER__FEATURE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Feature Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__FEATURE_ID = SINGLE_VALUE_MODIFIER__FEATURE_ID;
+
+	/**
+	 * The feature id for the '<em><b>Current Value Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__CURRENT_VALUE_TEXT = SINGLE_VALUE_MODIFIER__CURRENT_VALUE_TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__COMPLETE = SINGLE_VALUE_MODIFIER__COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER__ORIGINAL_VALUE = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>STEM Time Modifier</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEM_TIME_MODIFIER_FEATURE_COUNT = SINGLE_VALUE_MODIFIER_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 25;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.DoubleNOPModifier <em>Double NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Double NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleNOPModifier
+	 * @generated
+	 */
+	EClass getDoubleNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier <em>Double Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Double Range Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier
+	 * @generated
+	 */
+	EClass getDoubleRangeModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getStartValue <em>Start Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Start Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier#getStartValue()
+	 * @see #getDoubleRangeModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleRangeModifier_StartValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getEndValue <em>End Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>End Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier#getEndValue()
+	 * @see #getDoubleRangeModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleRangeModifier_EndValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getIncrement <em>Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increment</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier#getIncrement()
+	 * @see #getDoubleRangeModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleRangeModifier_Increment();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier#getNextValue()
+	 * @see #getDoubleRangeModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleRangeModifier_NextValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier#getOriginalValue()
+	 * @see #getDoubleRangeModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleRangeModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.DoubleSequenceModifier <em>Double Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Double Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleSequenceModifier
+	 * @generated
+	 */
+	EClass getDoubleSequenceModifier();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.stem.core.modifier.DoubleSequenceModifier#getSequence <em>Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Sequence</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleSequenceModifier#getSequence()
+	 * @see #getDoubleSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleSequenceModifier_Sequence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.FeatureModifier <em>Feature Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Feature Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier
+	 * @generated
+	 */
+	EClass getFeatureModifier();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.FeatureModifier#getTarget <em>Target</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Target</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getTarget()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EReference getFeatureModifier_Target();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.FeatureModifier#getEStructuralFeature <em>EStructural Feature</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>EStructural Feature</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getEStructuralFeature()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EReference getFeatureModifier_EStructuralFeature();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.FeatureModifier#getFeatureName <em>Feature Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Feature Name</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getFeatureName()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EAttribute getFeatureModifier_FeatureName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.FeatureModifier#getFeatureId <em>Feature Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Feature Id</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getFeatureId()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EAttribute getFeatureModifier_FeatureId();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.FeatureModifier#getCurrentValueText <em>Current Value Text</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Current Value Text</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getCurrentValueText()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EAttribute getFeatureModifier_CurrentValueText();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.FeatureModifier#isComplete <em>Complete</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Complete</em>'.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#isComplete()
+	 * @see #getFeatureModifier()
+	 * @generated
+	 */
+	EAttribute getFeatureModifier_Complete();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.IntegerNOPModifier <em>Integer NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integer NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerNOPModifier
+	 * @generated
+	 */
+	EClass getIntegerNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier <em>Integer Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integer Range Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier
+	 * @generated
+	 */
+	EClass getIntegerRangeModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getStartValue <em>Start Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Start Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier#getStartValue()
+	 * @see #getIntegerRangeModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerRangeModifier_StartValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getEndValue <em>End Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>End Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier#getEndValue()
+	 * @see #getIntegerRangeModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerRangeModifier_EndValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getIncrement <em>Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increment</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier#getIncrement()
+	 * @see #getIntegerRangeModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerRangeModifier_Increment();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier#getNextValue()
+	 * @see #getIntegerRangeModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerRangeModifier_NextValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier#getOriginalValue()
+	 * @see #getIntegerRangeModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerRangeModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.IntegerSequenceModifier <em>Integer Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integer Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerSequenceModifier
+	 * @generated
+	 */
+	EClass getIntegerSequenceModifier();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.stem.core.modifier.IntegerSequenceModifier#getSequence <em>Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Sequence</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerSequenceModifier#getSequence()
+	 * @see #getIntegerSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerSequenceModifier_Sequence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.LongNOPModifier <em>Long NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Long NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongNOPModifier
+	 * @generated
+	 */
+	EClass getLongNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.LongRangeModifier <em>Long Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Long Range Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier
+	 * @generated
+	 */
+	EClass getLongRangeModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getStartValue <em>Start Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Start Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier#getStartValue()
+	 * @see #getLongRangeModifier()
+	 * @generated
+	 */
+	EAttribute getLongRangeModifier_StartValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getEndValue <em>End Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>End Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier#getEndValue()
+	 * @see #getLongRangeModifier()
+	 * @generated
+	 */
+	EAttribute getLongRangeModifier_EndValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getIncrement <em>Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increment</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier#getIncrement()
+	 * @see #getLongRangeModifier()
+	 * @generated
+	 */
+	EAttribute getLongRangeModifier_Increment();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier#getNextValue()
+	 * @see #getLongRangeModifier()
+	 * @generated
+	 */
+	EAttribute getLongRangeModifier_NextValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongRangeModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier#getOriginalValue()
+	 * @see #getLongRangeModifier()
+	 * @generated
+	 */
+	EAttribute getLongRangeModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.LongSequenceModifier <em>Long Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Long Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongSequenceModifier
+	 * @generated
+	 */
+	EClass getLongSequenceModifier();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.stem.core.modifier.LongSequenceModifier#getSequence <em>Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Sequence</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongSequenceModifier#getSequence()
+	 * @see #getLongSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getLongSequenceModifier_Sequence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.Modifier <em>Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.Modifier
+	 * @generated
+	 */
+	EClass getModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.Modifier#getTargetURI <em>Target URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Target URI</em>'.
+	 * @see org.eclipse.stem.core.modifier.Modifier#getTargetURI()
+	 * @see #getModifier()
+	 * @generated
+	 */
+	EAttribute getModifier_TargetURI();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.stem.core.modifier.Modifier#getFeatureModifiers <em>Feature Modifiers</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Feature Modifiers</em>'.
+	 * @see org.eclipse.stem.core.modifier.Modifier#getFeatureModifiers()
+	 * @see #getModifier()
+	 * @generated
+	 */
+	EReference getModifier_FeatureModifiers();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.Modifier#isComplete <em>Complete</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Complete</em>'.
+	 * @see org.eclipse.stem.core.modifier.Modifier#isComplete()
+	 * @see #getModifier()
+	 * @generated
+	 */
+	EAttribute getModifier_Complete();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.NOPModifier <em>NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.NOPModifier
+	 * @generated
+	 */
+	EClass getNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.RangeModifier <em>Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Range Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.RangeModifier
+	 * @generated
+	 */
+	EClass getRangeModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier <em>STEM Time NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>STEM Time NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeNOPModifier
+	 * @generated
+	 */
+	EClass getSTEMTimeNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier <em>STEM Time Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>STEM Time Range Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier
+	 * @generated
+	 */
+	EClass getSTEMTimeRangeModifier();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getStartValue <em>Start Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Start Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getStartValue()
+	 * @see #getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeRangeModifier_StartValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getEndValue <em>End Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>End Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getEndValue()
+	 * @see #getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeRangeModifier_EndValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getIncrement <em>Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Increment</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getIncrement()
+	 * @see #getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	EAttribute getSTEMTimeRangeModifier_Increment();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getNextValue()
+	 * @see #getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeRangeModifier_NextValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getOriginalValue()
+	 * @see #getSTEMTimeRangeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeRangeModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier <em>STEM Time Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>STEM Time Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeSequenceModifier
+	 * @generated
+	 */
+	EClass getSTEMTimeSequenceModifier();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier#getSequence <em>Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Sequence</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeSequenceModifier#getSequence()
+	 * @see #getSTEMTimeSequenceModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeSequenceModifier_Sequence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.SequenceModifier <em>Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier
+	 * @generated
+	 */
+	EClass getSequenceModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.SequenceModifier#getSequenceSize <em>Sequence Size</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sequence Size</em>'.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getSequenceSize()
+	 * @see #getSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getSequenceModifier_SequenceSize();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.SequenceModifier#getCurrentSequenceIndex <em>Current Sequence Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Current Sequence Index</em>'.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getCurrentSequenceIndex()
+	 * @see #getSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getSequenceModifier_CurrentSequenceIndex();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.SequenceModifier#getNextValue <em>Next Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Next Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getNextValue()
+	 * @see #getSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getSequenceModifier_NextValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.SequenceModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getOriginalValue()
+	 * @see #getSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getSequenceModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.StringNOPModifier <em>String NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>String NOP Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.StringNOPModifier
+	 * @generated
+	 */
+	EClass getStringNOPModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.StringSequenceModifier <em>String Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>String Sequence Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.StringSequenceModifier
+	 * @generated
+	 */
+	EClass getStringSequenceModifier();
+
+	/**
+	 * Returns the meta object for the attribute list '{@link org.eclipse.stem.core.modifier.StringSequenceModifier#getSequence <em>Sequence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute list '<em>Sequence</em>'.
+	 * @see org.eclipse.stem.core.modifier.StringSequenceModifier#getSequence()
+	 * @see #getStringSequenceModifier()
+	 * @generated
+	 */
+	EAttribute getStringSequenceModifier_Sequence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Modifiable</em>'.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	EClass getModifiable();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.SingleValueModifier <em>Single Value Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Single Value Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.SingleValueModifier
+	 * @generated
+	 */
+	EClass getSingleValueModifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.DoubleModifier <em>Double Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Double Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleModifier
+	 * @generated
+	 */
+	EClass getDoubleModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleModifier#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleModifier#getValue()
+	 * @see #getDoubleModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleModifier_Value();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.DoubleModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.DoubleModifier#getOriginalValue()
+	 * @see #getDoubleModifier()
+	 * @generated
+	 */
+	EAttribute getDoubleModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.IntegerModifier <em>Integer Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integer Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerModifier
+	 * @generated
+	 */
+	EClass getIntegerModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerModifier#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerModifier#getValue()
+	 * @see #getIntegerModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerModifier_Value();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.IntegerModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.IntegerModifier#getOriginalValue()
+	 * @see #getIntegerModifier()
+	 * @generated
+	 */
+	EAttribute getIntegerModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.LongModifier <em>Long Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Long Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongModifier
+	 * @generated
+	 */
+	EClass getLongModifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongModifier#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongModifier#getValue()
+	 * @see #getLongModifier()
+	 * @generated
+	 */
+	EAttribute getLongModifier_Value();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.modifier.LongModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.LongModifier#getOriginalValue()
+	 * @see #getLongModifier()
+	 * @generated
+	 */
+	EAttribute getLongModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.modifier.STEMTimeModifier <em>STEM Time Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>STEM Time Modifier</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeModifier
+	 * @generated
+	 */
+	EClass getSTEMTimeModifier();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeModifier#getValue()
+	 * @see #getSTEMTimeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeModifier_Value();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeModifier#getOriginalValue()
+	 * @see #getSTEMTimeModifier()
+	 * @generated
+	 */
+	EReference getSTEMTimeModifier_OriginalValue();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ModifierFactory getModifierFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.DoubleNOPModifierImpl <em>Double NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.DoubleNOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleNOPModifier()
+		 * @generated
+		 */
+		EClass DOUBLE_NOP_MODIFIER = eINSTANCE.getDoubleNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl <em>Double Range Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleRangeModifier()
+		 * @generated
+		 */
+		EClass DOUBLE_RANGE_MODIFIER = eINSTANCE.getDoubleRangeModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_RANGE_MODIFIER__START_VALUE = eINSTANCE.getDoubleRangeModifier_StartValue();
+
+		/**
+		 * The meta object literal for the '<em><b>End Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_RANGE_MODIFIER__END_VALUE = eINSTANCE.getDoubleRangeModifier_EndValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_RANGE_MODIFIER__INCREMENT = eINSTANCE.getDoubleRangeModifier_Increment();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_RANGE_MODIFIER__NEXT_VALUE = eINSTANCE.getDoubleRangeModifier_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getDoubleRangeModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.DoubleSequenceModifierImpl <em>Double Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.DoubleSequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleSequenceModifier()
+		 * @generated
+		 */
+		EClass DOUBLE_SEQUENCE_MODIFIER = eINSTANCE.getDoubleSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_SEQUENCE_MODIFIER__SEQUENCE = eINSTANCE.getDoubleSequenceModifier_Sequence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl <em>Feature Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getFeatureModifier()
+		 * @generated
+		 */
+		EClass FEATURE_MODIFIER = eINSTANCE.getFeatureModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Target</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEATURE_MODIFIER__TARGET = eINSTANCE.getFeatureModifier_Target();
+
+		/**
+		 * The meta object literal for the '<em><b>EStructural Feature</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference FEATURE_MODIFIER__ESTRUCTURAL_FEATURE = eINSTANCE.getFeatureModifier_EStructuralFeature();
+
+		/**
+		 * The meta object literal for the '<em><b>Feature Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_MODIFIER__FEATURE_NAME = eINSTANCE.getFeatureModifier_FeatureName();
+
+		/**
+		 * The meta object literal for the '<em><b>Feature Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_MODIFIER__FEATURE_ID = eINSTANCE.getFeatureModifier_FeatureId();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Value Text</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_MODIFIER__CURRENT_VALUE_TEXT = eINSTANCE.getFeatureModifier_CurrentValueText();
+
+		/**
+		 * The meta object literal for the '<em><b>Complete</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_MODIFIER__COMPLETE = eINSTANCE.getFeatureModifier_Complete();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.IntegerNOPModifierImpl <em>Integer NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.IntegerNOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerNOPModifier()
+		 * @generated
+		 */
+		EClass INTEGER_NOP_MODIFIER = eINSTANCE.getIntegerNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl <em>Integer Range Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerRangeModifier()
+		 * @generated
+		 */
+		EClass INTEGER_RANGE_MODIFIER = eINSTANCE.getIntegerRangeModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_RANGE_MODIFIER__START_VALUE = eINSTANCE.getIntegerRangeModifier_StartValue();
+
+		/**
+		 * The meta object literal for the '<em><b>End Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_RANGE_MODIFIER__END_VALUE = eINSTANCE.getIntegerRangeModifier_EndValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_RANGE_MODIFIER__INCREMENT = eINSTANCE.getIntegerRangeModifier_Increment();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_RANGE_MODIFIER__NEXT_VALUE = eINSTANCE.getIntegerRangeModifier_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getIntegerRangeModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.IntegerSequenceModifierImpl <em>Integer Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.IntegerSequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerSequenceModifier()
+		 * @generated
+		 */
+		EClass INTEGER_SEQUENCE_MODIFIER = eINSTANCE.getIntegerSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_SEQUENCE_MODIFIER__SEQUENCE = eINSTANCE.getIntegerSequenceModifier_Sequence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.LongNOPModifierImpl <em>Long NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.LongNOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongNOPModifier()
+		 * @generated
+		 */
+		EClass LONG_NOP_MODIFIER = eINSTANCE.getLongNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl <em>Long Range Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongRangeModifier()
+		 * @generated
+		 */
+		EClass LONG_RANGE_MODIFIER = eINSTANCE.getLongRangeModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_RANGE_MODIFIER__START_VALUE = eINSTANCE.getLongRangeModifier_StartValue();
+
+		/**
+		 * The meta object literal for the '<em><b>End Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_RANGE_MODIFIER__END_VALUE = eINSTANCE.getLongRangeModifier_EndValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_RANGE_MODIFIER__INCREMENT = eINSTANCE.getLongRangeModifier_Increment();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_RANGE_MODIFIER__NEXT_VALUE = eINSTANCE.getLongRangeModifier_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_RANGE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getLongRangeModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.LongSequenceModifierImpl <em>Long Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.LongSequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongSequenceModifier()
+		 * @generated
+		 */
+		EClass LONG_SEQUENCE_MODIFIER = eINSTANCE.getLongSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_SEQUENCE_MODIFIER__SEQUENCE = eINSTANCE.getLongSequenceModifier_Sequence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.ModifierImpl <em>Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getModifier()
+		 * @generated
+		 */
+		EClass MODIFIER = eINSTANCE.getModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Target URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MODIFIER__TARGET_URI = eINSTANCE.getModifier_TargetURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Feature Modifiers</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference MODIFIER__FEATURE_MODIFIERS = eINSTANCE.getModifier_FeatureModifiers();
+
+		/**
+		 * The meta object literal for the '<em><b>Complete</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MODIFIER__COMPLETE = eINSTANCE.getModifier_Complete();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.NOPModifierImpl <em>NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.NOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getNOPModifier()
+		 * @generated
+		 */
+		EClass NOP_MODIFIER = eINSTANCE.getNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.RangeModifierImpl <em>Range Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getRangeModifier()
+		 * @generated
+		 */
+		EClass RANGE_MODIFIER = eINSTANCE.getRangeModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeNOPModifierImpl <em>STEM Time NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.STEMTimeNOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeNOPModifier()
+		 * @generated
+		 */
+		EClass STEM_TIME_NOP_MODIFIER = eINSTANCE.getSTEMTimeNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl <em>STEM Time Range Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeRangeModifier()
+		 * @generated
+		 */
+		EClass STEM_TIME_RANGE_MODIFIER = eINSTANCE.getSTEMTimeRangeModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_RANGE_MODIFIER__START_VALUE = eINSTANCE.getSTEMTimeRangeModifier_StartValue();
+
+		/**
+		 * The meta object literal for the '<em><b>End Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_RANGE_MODIFIER__END_VALUE = eINSTANCE.getSTEMTimeRangeModifier_EndValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STEM_TIME_RANGE_MODIFIER__INCREMENT = eINSTANCE.getSTEMTimeRangeModifier_Increment();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_RANGE_MODIFIER__NEXT_VALUE = eINSTANCE.getSTEMTimeRangeModifier_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getSTEMTimeRangeModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeSequenceModifierImpl <em>STEM Time Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.STEMTimeSequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeSequenceModifier()
+		 * @generated
+		 */
+		EClass STEM_TIME_SEQUENCE_MODIFIER = eINSTANCE.getSTEMTimeSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE = eINSTANCE.getSTEMTimeSequenceModifier_Sequence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl <em>Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSequenceModifier()
+		 * @generated
+		 */
+		EClass SEQUENCE_MODIFIER = eINSTANCE.getSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence Size</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCE_MODIFIER__SEQUENCE_SIZE = eINSTANCE.getSequenceModifier_SequenceSize();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Sequence Index</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX = eINSTANCE.getSequenceModifier_CurrentSequenceIndex();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCE_MODIFIER__NEXT_VALUE = eINSTANCE.getSequenceModifier_NextValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getSequenceModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.StringNOPModifierImpl <em>String NOP Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.StringNOPModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getStringNOPModifier()
+		 * @generated
+		 */
+		EClass STRING_NOP_MODIFIER = eINSTANCE.getStringNOPModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.StringSequenceModifierImpl <em>String Sequence Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.StringSequenceModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getStringSequenceModifier()
+		 * @generated
+		 */
+		EClass STRING_SEQUENCE_MODIFIER = eINSTANCE.getStringSequenceModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequence</b></em>' attribute list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STRING_SEQUENCE_MODIFIER__SEQUENCE = eINSTANCE.getStringSequenceModifier_Sequence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.Modifiable
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getModifiable()
+		 * @generated
+		 */
+		EClass MODIFIABLE = eINSTANCE.getModifiable();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.SingleValueModifierImpl <em>Single Value Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.SingleValueModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSingleValueModifier()
+		 * @generated
+		 */
+		EClass SINGLE_VALUE_MODIFIER = eINSTANCE.getSingleValueModifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.DoubleModifierImpl <em>Double Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.DoubleModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getDoubleModifier()
+		 * @generated
+		 */
+		EClass DOUBLE_MODIFIER = eINSTANCE.getDoubleModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_MODIFIER__VALUE = eINSTANCE.getDoubleModifier_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DOUBLE_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getDoubleModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.IntegerModifierImpl <em>Integer Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.IntegerModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getIntegerModifier()
+		 * @generated
+		 */
+		EClass INTEGER_MODIFIER = eINSTANCE.getIntegerModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_MODIFIER__VALUE = eINSTANCE.getIntegerModifier_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INTEGER_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getIntegerModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.LongModifierImpl <em>Long Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.LongModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getLongModifier()
+		 * @generated
+		 */
+		EClass LONG_MODIFIER = eINSTANCE.getLongModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_MODIFIER__VALUE = eINSTANCE.getLongModifier_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LONG_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getLongModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl <em>STEM Time Modifier</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getSTEMTimeModifier()
+		 * @generated
+		 */
+		EClass STEM_TIME_MODIFIER = eINSTANCE.getSTEMTimeModifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_MODIFIER__VALUE = eINSTANCE.getSTEMTimeModifier_Value();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference STEM_TIME_MODIFIER__ORIGINAL_VALUE = eINSTANCE.getSTEMTimeModifier_OriginalValue();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.core.modifier.impl.ModifierPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
+} //ModifierPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/NOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/NOPModifier.java
new file mode 100644
index 0000000..3a91de6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/NOPModifier.java
@@ -0,0 +1,24 @@
+// NOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface NOPModifier extends FeatureModifier {
+	// Nothing
+} // NOPModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/RangeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/RangeModifier.java
new file mode 100644
index 0000000..c2d338b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/RangeModifier.java
@@ -0,0 +1,29 @@
+// RangeModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+/**
+ * A <code>RangeModifier</code> modifies the value of a numeric
+ * {@link EStructuralFeature} over a specific range of values. A
+ * <code>RangeModifier</code> specifies a starting value, an ending value and an
+ * increment. The increment is successively applied to the starting value until
+ * the result exceeds the end value. If the increment is negative, the end value
+ * must be less than the starting value.
+ * 
+ * @model abstract="true"
+ */
+public interface RangeModifier extends FeatureModifier {
+	// Nothing
+} // RangeModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeModifier.java
new file mode 100644
index 0000000..5c915c2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeModifier.java
@@ -0,0 +1,87 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>STEM Time Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.core.modifier.ModifierPackage#getSTEMTimeModifier()
+ * @model
+ * @generated
+ */
+public interface STEMTimeModifier extends SingleValueModifier {
+
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' reference.
+	 * @see #setValue(STEMTime)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getSTEMTimeModifier_Value()
+	 * @model
+	 * @generated
+	 */
+	STEMTime getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getValue <em>Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' reference.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(STEMTime value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' reference.
+	 * @see #setOriginalValue(STEMTime)
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#getSTEMTimeModifier_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	STEMTime getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeModifier#getOriginalValue <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' reference.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(STEMTime value);
+} // STEMTimeModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeNOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeNOPModifier.java
new file mode 100644
index 0000000..9a9ff55
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeNOPModifier.java
@@ -0,0 +1,24 @@
+// STEMTimeNOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface STEMTimeNOPModifier extends NOPModifier {
+	// Nothing
+} // STEMTimeNOPModifier
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeRangeModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeRangeModifier.java
new file mode 100644
index 0000000..b38427f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeRangeModifier.java
@@ -0,0 +1,98 @@
+// STEMTimeRangeModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A <code>STEMTimeRangeModifier</code> modifies an {@link STEMTime} valued
+ * feature from a starting value to and end value (inclusive> by increments.
+ * 
+ * @model
+ */
+public interface STEMTimeRangeModifier extends RangeModifier {
+	
+	/**
+	 * @model
+	 */
+	STEMTime getOriginalValue();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getOriginalValue <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' reference.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(STEMTime value);
+
+	/**
+	 * @model
+	 */
+	STEMTime getStartValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getStartValue <em>Start Value</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Value</em>' reference.
+	 * @see #getStartValue()
+	 * @generated
+	 */
+	void setStartValue(STEMTime value);
+
+	/**
+	 * @model
+	 */
+	STEMTime getEndValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getEndValue <em>End Value</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Value</em>' reference.
+	 * @see #getEndValue()
+	 * @generated
+	 */
+	void setEndValue(STEMTime value);
+
+	/**
+	 * @model
+	 */
+	long getIncrement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getIncrement <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Increment</em>' attribute.
+	 * @see #getIncrement()
+	 * @generated
+	 */
+	void setIncrement(long value);
+
+	/**
+	 * @return the next value of the feature
+	 * @model changeable="true"
+	 */
+	STEMTime getNextValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier#getNextValue <em>Next Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Next Value</em>' reference.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	void setNextValue(STEMTime value);
+
+} // STEMTimeRangeModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeSequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeSequenceModifier.java
new file mode 100644
index 0000000..b8646ad
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/STEMTimeSequenceModifier.java
@@ -0,0 +1,29 @@
+// STEMTimeSequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A {@link STEMTimeSequenceModifier} modifies a feature by setting it to a
+ * sequence of "STEMTime" values.
+ * 
+ * @model
+ */
+public interface STEMTimeSequenceModifier extends SequenceModifier {
+	/**
+	 * @model
+	 */
+	EList<STEMTime> getSequence();
+} // STEMTimeSequenceModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SequenceModifier.java
new file mode 100644
index 0000000..b3f0f4b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SequenceModifier.java
@@ -0,0 +1,76 @@
+// SequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * A {@link SequenceModifier} modifies a feature by setting it to a
+ * sequence of specific values.
+ * 
+ * @model abstract="true"
+ */
+public interface SequenceModifier extends FeatureModifier {
+	
+	/**
+	 * @model
+	 */
+	Object getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.SequenceModifier#getOriginalValue <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' attribute.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(Object value);
+
+	/**
+	 * @return the number of entries in the collection of values.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getSequenceSize();
+
+	/**
+	 * @return the index of the current value in the sequence
+	 * @model default="0"
+	 */
+	int getCurrentSequenceIndex();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.modifier.SequenceModifier#getCurrentSequenceIndex <em>Current Sequence Index</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Current Sequence Index</em>' attribute.
+	 * @see #getCurrentSequenceIndex()
+	 * @generated
+	 */
+	void setCurrentSequenceIndex(int value);
+
+	/**
+	 * @return the next value in the sequence
+	 * @model volatile="true" transient="true" changeable="true"
+	 */
+	Object getNextValue();
+
+	/**
+	 * Returns whether the value of the '{@link org.eclipse.stem.core.modifier.SequenceModifier#getNextValue <em>Next Value</em>}' attribute is set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return whether the value of the '<em>Next Value</em>' attribute is set.
+	 * @see #getNextValue()
+	 * @generated
+	 */
+	boolean isSetNextValue();
+} // SequenceModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SingleValueModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SingleValueModifier.java
new file mode 100644
index 0000000..5c2f29c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/SingleValueModifier.java
@@ -0,0 +1,21 @@
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+/**
+ * A special case of Range Modifier where the start and end value are the same
+ *
+ * @see org.eclipse.stem.core.modifier.ModifierPackage#getSingleValueModifier()
+ * @model abstract="true"
+ * @generated
+ */
+public interface SingleValueModifier extends FeatureModifier {
+} // SingleValueModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringNOPModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringNOPModifier.java
new file mode 100644
index 0000000..2f30976
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringNOPModifier.java
@@ -0,0 +1,24 @@
+// StringNOPModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>NOPModifier</code> does nothing. It is useful for the GUI
+ * components that edit {@link FeatureModifier}s to have one that is available
+ * for the case when no {@link FeatureModifier} is specified by the user.
+ * 
+ * @model
+ */
+public interface StringNOPModifier extends NOPModifier {
+	// Nothing
+} // StringNOPModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringSequenceModifier.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringSequenceModifier.java
new file mode 100644
index 0000000..1879d21
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/StringSequenceModifier.java
@@ -0,0 +1,28 @@
+// StringSequenceModifier.java
+package org.eclipse.stem.core.modifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A {@link StringSequenceModifier} modifies a feature by setting it to a
+ * sequence of "String" values.
+ * 
+ * @model
+ */
+public interface StringSequenceModifier extends SequenceModifier {
+	/**
+	 * @model
+	 */
+	EList<String> getSequence();
+} // StringSequenceModifier
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleModifierImpl.java
new file mode 100644
index 0000000..6d13ad9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleModifierImpl.java
@@ -0,0 +1,256 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.DoubleModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleModifierImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DoubleModifierImpl extends SingleValueModifierImpl implements DoubleModifier {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double VALUE_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double value = VALUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ORIGINAL_VALUE_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double originalValue = ORIGINAL_VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.DOUBLE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(double newValue) {
+		double oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_MODIFIER__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(double newOriginalValue) {
+		double oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_MODIFIER__VALUE:
+				return getValue();
+			case ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_MODIFIER__VALUE:
+				setValue((Double)newValue);
+				return;
+			case ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_MODIFIER__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_MODIFIER__VALUE:
+				return value != VALUE_EDEFAULT;
+			case ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	
+	@SuppressWarnings("boxing")
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Double)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getValue());
+		complete = true;
+	} // updateFeature
+
+	
+	/**
+	 *reset
+	 */
+	@Override
+	public void reset() {
+		complete = false;
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	private boolean complete = false;
+	/**
+	 * isComplete
+	 */
+	@Override
+	public boolean isComplete() {
+		return complete;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DoubleModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleNOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleNOPModifierImpl.java
new file mode 100644
index 0000000..3f98a41
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleNOPModifierImpl.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.DoubleNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DoubleNOPModifierImpl extends NOPModifierImpl implements DoubleNOPModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleNOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.DOUBLE_NOP_MODIFIER;
+	}
+
+} // DoubleNOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleRangeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleRangeModifierImpl.java
new file mode 100644
index 0000000..9d41549
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleRangeModifierImpl.java
@@ -0,0 +1,424 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Double Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl#getStartValue <em>Start Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl#getEndValue <em>End Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl#getIncrement <em>Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleRangeModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+@SuppressWarnings("boxing")
+public class DoubleRangeModifierImpl extends RangeModifierImpl implements
+		DoubleRangeModifier {
+	/**
+	 * The default value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double START_VALUE_EDEFAULT = -9.9999999E7;
+	/**
+	 * The cached value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double startValue = START_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double END_VALUE_EDEFAULT = -9.9999999E7;
+	/**
+	 * The cached value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double endValue = END_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INCREMENT_EDEFAULT = -9.9999999E7;
+	/**
+	 * The cached value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected double increment = INCREMENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double NEXT_VALUE_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double nextValue = NEXT_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ORIGINAL_VALUE_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double originalValue = ORIGINAL_VALUE_EDEFAULT;
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleRangeModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.DOUBLE_RANGE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getStartValue() {
+		return startValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartValue(double newStartValue) {
+		double oldStartValue = startValue;
+		startValue = newStartValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE, oldStartValue, startValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getEndValue() {
+		return endValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndValue(double newEndValue) {
+		double oldEndValue = endValue;
+		endValue = newEndValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE, oldEndValue, endValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getIncrement() {
+		return increment;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncrement(double newIncrement) {
+		double oldIncrement = increment;
+		increment = newIncrement;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT, oldIncrement, increment));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getNextValue() {
+		// Unset?
+		if (!eIsSet(ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE)) {
+			// Yes
+			nextValue = startValue;
+		} // if
+		
+		final double retValue = nextValue;
+		
+		complete = (increment < 0.0)? (retValue <= endValue):(retValue >= endValue); 
+		
+		// Still incrementing?
+		if (!complete) {
+			// Yes
+			final double temp = retValue + increment;
+			// Would the new currentValue be equal or "past" the endValue?
+			if ((increment >= 0 && temp < endValue) || (increment < 0 && temp > endValue)) {
+				// No
+				nextValue = temp;
+			} // if
+			else {
+				// Yes
+				nextValue = endValue;
+			} // else 
+		} // if 
+		currentValueText = Double.toString(retValue);
+		return retValue;
+	} // getNextValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(double newNextValue) {
+		double oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE, oldNextValue, nextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(double newOriginalValue) {
+		double oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Double)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getNextValue());
+	} // updateFeature
+
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		eUnset(ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE);
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE:
+				return getStartValue();
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE:
+				return getEndValue();
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT:
+				return getIncrement();
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE:
+				return getNextValue();
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE:
+				setStartValue((Double)newValue);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE:
+				setEndValue((Double)newValue);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT:
+				setIncrement((Double)newValue);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue((Double)newValue);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE:
+				setStartValue(START_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE:
+				setEndValue(END_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT:
+				setIncrement(INCREMENT_EDEFAULT);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue(NEXT_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE:
+				return startValue != START_VALUE_EDEFAULT;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE:
+				return endValue != END_VALUE_EDEFAULT;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT:
+				return increment != INCREMENT_EDEFAULT;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE:
+				return nextValue != NEXT_VALUE_EDEFAULT;
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (startValue: "); //$NON-NLS-1$
+		result.append(startValue);
+		result.append(", endValue: "); //$NON-NLS-1$
+		result.append(endValue);
+		result.append(", increment: "); //$NON-NLS-1$
+		result.append(increment);
+		result.append(", nextValue: "); //$NON-NLS-1$
+		result.append(nextValue);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+
+		retValue = retValue && (endValue >= startValue);
+		assert retValue;
+
+		retValue = retValue && (increment > 0.0);
+		assert retValue;
+
+		return retValue;
+	} // sane
+
+} // DoubleRangeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleSequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleSequenceModifierImpl.java
new file mode 100644
index 0000000..f4108c5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/DoubleSequenceModifierImpl.java
@@ -0,0 +1,194 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Double Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.DoubleSequenceModifierImpl#getSequence <em>Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DoubleSequenceModifierImpl extends SequenceModifierImpl implements DoubleSequenceModifier {
+	/**
+	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Double> sequence;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleSequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.DOUBLE_SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Double> getSequence() {
+		if (sequence == null) {
+			sequence = new EDataTypeUniqueEList<Double>(Double.class, this, ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE);
+		}
+		return sequence;
+	}
+
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue()
+	 */
+	@Override
+	public Object getNextValue() {
+		int index = getCurrentSequenceIndex();
+		final Object retValue = getSequence().get(index++);
+		setCurrentSequenceIndex(index);
+		return retValue;
+	} // getNextValue
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize()
+	 */
+	@Override
+	public int getSequenceSize() {
+		return getSequence().size();
+	} // getSequenceSize
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		super.updateFeature();
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE:
+				return getSequence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				getSequence().addAll((Collection<? extends Double>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE:
+				return sequence != null && !sequence.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sequence: "); //$NON-NLS-1$
+		result.append(sequence);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DoubleSequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/FeatureModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/FeatureModifierImpl.java
new file mode 100644
index 0000000..748d9cb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/FeatureModifierImpl.java
@@ -0,0 +1,440 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#getTarget <em>Target</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#getEStructuralFeature <em>EStructural Feature</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#getFeatureName <em>Feature Name</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#getFeatureId <em>Feature Id</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#getCurrentValueText <em>Current Value Text</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#isComplete <em>Complete</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class FeatureModifierImpl extends EObjectImpl implements FeatureModifier {
+	/**
+	 * The cached value of the '{@link #getTarget() <em>Target</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTarget()
+	 * @generated
+	 * @ordered
+	 */
+	protected EObject target;
+
+	/**
+	 * The cached value of the '{@link #getEStructuralFeature() <em>EStructural Feature</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEStructuralFeature()
+	 * @generated
+	 * @ordered
+	 */
+	protected EStructuralFeature eStructuralFeature;
+
+	/**
+	 * The default value of the '{@link #getFeatureName() <em>Feature Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFeatureName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String FEATURE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getFeatureName() <em>Feature Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFeatureName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String featureName = FEATURE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getFeatureId() <em>Feature Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFeatureId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int FEATURE_ID_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getFeatureId() <em>Feature Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getFeatureId()
+	 * @generated
+	 * @ordered
+	 */
+	protected int featureId = FEATURE_ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCurrentValueText() <em>Current Value Text</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentValueText()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CURRENT_VALUE_TEXT_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getCurrentValueText() <em>Current Value Text</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentValueText()
+	 * @generated
+	 * @ordered
+	 */
+	protected String currentValueText = CURRENT_VALUE_TEXT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isComplete() <em>Complete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isComplete()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean COMPLETE_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.FEATURE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String getModificationSummary() {
+		try {
+			final StringBuilder sb = new StringBuilder(eStructuralFeature.getName());
+			sb.append(" = ");
+			sb.append(getCurrentValueText());
+			return sb.toString();
+		} catch (RuntimeException e) {
+			return "foo";
+		}
+	} // getModificationSummary
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public boolean isComplete();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public EStructuralFeature getEStructuralFeature() {
+		// Is it set yet?
+		if (!eIsSet(ModifierPackage.eINSTANCE.getFeatureModifier_EStructuralFeature())) {
+			// No
+			eStructuralFeature = target.eClass().getEStructuralFeature(getFeatureId());
+		} // if 
+		
+		return eStructuralFeature;
+	} // getEStructuralFeature
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setEStructuralFeature(EStructuralFeature newEStructuralFeature) {
+		EStructuralFeature oldEStructuralFeature = eStructuralFeature;
+		eStructuralFeature = newEStructuralFeature;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.FEATURE_MODIFIER__ESTRUCTURAL_FEATURE, oldEStructuralFeature, eStructuralFeature));
+		// Is it null?
+		if (newEStructuralFeature != null) {
+			// Yes
+			setFeatureId(newEStructuralFeature.getFeatureID());
+			setFeatureName(newEStructuralFeature.getName());
+		} // if 
+		else {
+			// No
+			setFeatureId(FEATURE_ID_EDEFAULT);
+		} // else 
+	} // setEStructuralFeature
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getFeatureId() {
+		return featureId;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFeatureId(int newFeatureId) {
+		int oldFeatureId = featureId;
+		featureId = newFeatureId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.FEATURE_MODIFIER__FEATURE_ID, oldFeatureId, featureId));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject getTarget() {
+		if (target != null && target.eIsProxy()) {
+			InternalEObject oldTarget = (InternalEObject)target;
+			target = eResolveProxy(oldTarget);
+			if (target != oldTarget) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.FEATURE_MODIFIER__TARGET, oldTarget, target));
+			}
+		}
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject basicGetTarget() {
+		return target;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTarget(EObject newTarget) {
+		EObject oldTarget = target;
+		target = newTarget;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.FEATURE_MODIFIER__TARGET, oldTarget, target));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getFeatureName() {
+		return featureName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFeatureName(String newFeatureName) {
+		String oldFeatureName = featureName;
+		featureName = newFeatureName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME, oldFeatureName, featureName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getCurrentValueText() {
+		return currentValueText;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public void updateFeature();
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public void reset();
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	public boolean sane() {
+		return true;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.FEATURE_MODIFIER__TARGET:
+				if (resolve) return getTarget();
+				return basicGetTarget();
+			case ModifierPackage.FEATURE_MODIFIER__ESTRUCTURAL_FEATURE:
+				return getEStructuralFeature();
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME:
+				return getFeatureName();
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_ID:
+				return getFeatureId();
+			case ModifierPackage.FEATURE_MODIFIER__CURRENT_VALUE_TEXT:
+				return getCurrentValueText();
+			case ModifierPackage.FEATURE_MODIFIER__COMPLETE:
+				return isComplete();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.FEATURE_MODIFIER__TARGET:
+				setTarget((EObject)newValue);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__ESTRUCTURAL_FEATURE:
+				setEStructuralFeature((EStructuralFeature)newValue);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME:
+				setFeatureName((String)newValue);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_ID:
+				setFeatureId((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.FEATURE_MODIFIER__TARGET:
+				setTarget((EObject)null);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__ESTRUCTURAL_FEATURE:
+				setEStructuralFeature((EStructuralFeature)null);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME:
+				setFeatureName(FEATURE_NAME_EDEFAULT);
+				return;
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_ID:
+				setFeatureId(FEATURE_ID_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.FEATURE_MODIFIER__TARGET:
+				return target != null;
+			case ModifierPackage.FEATURE_MODIFIER__ESTRUCTURAL_FEATURE:
+				return eStructuralFeature != null;
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME:
+				return FEATURE_NAME_EDEFAULT == null ? featureName != null : !FEATURE_NAME_EDEFAULT.equals(featureName);
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_ID:
+				return featureId != FEATURE_ID_EDEFAULT;
+			case ModifierPackage.FEATURE_MODIFIER__CURRENT_VALUE_TEXT:
+				return CURRENT_VALUE_TEXT_EDEFAULT == null ? currentValueText != null : !CURRENT_VALUE_TEXT_EDEFAULT.equals(currentValueText);
+			case ModifierPackage.FEATURE_MODIFIER__COMPLETE:
+				return isComplete() != COMPLETE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (featureName: "); //$NON-NLS-1$
+		result.append(featureName);
+		result.append(", featureId: "); //$NON-NLS-1$
+		result.append(featureId);
+		result.append(", currentValueText: "); //$NON-NLS-1$
+		result.append(currentValueText);
+		result.append(')');
+		return result.toString();
+	}
+
+} //FeatureModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerModifierImpl.java
new file mode 100644
index 0000000..b7b668d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerModifierImpl.java
@@ -0,0 +1,254 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.IntegerModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Integer Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerModifierImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IntegerModifierImpl extends SingleValueModifierImpl implements IntegerModifier {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int VALUE_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int value = VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int ORIGINAL_VALUE_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int originalValue = ORIGINAL_VALUE_EDEFAULT;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.INTEGER_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(int newValue) {
+		int oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_MODIFIER__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(int newOriginalValue) {
+		int oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_MODIFIER__VALUE:
+				return getValue();
+			case ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_MODIFIER__VALUE:
+				setValue((Integer)newValue);
+				return;
+			case ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_MODIFIER__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_MODIFIER__VALUE:
+				return value != VALUE_EDEFAULT;
+			case ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	
+	@SuppressWarnings("boxing")
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Integer)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getValue());
+		complete = true;
+	} // updateFeature
+
+	
+	/**
+	 *reset
+	 */
+	@Override
+	public void reset() {
+		complete = false;
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	
+	private boolean complete = false;
+	/**
+	 * isComplete
+	 */
+	@Override
+	public boolean isComplete() {
+		return complete;
+	}
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //IntegerModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerNOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerNOPModifierImpl.java
new file mode 100644
index 0000000..063bf59
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerNOPModifierImpl.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Integer NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class IntegerNOPModifierImpl extends NOPModifierImpl implements IntegerNOPModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerNOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.INTEGER_NOP_MODIFIER;
+	}
+
+} //IntegerNOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerRangeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerRangeModifierImpl.java
new file mode 100644
index 0000000..bae514c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerRangeModifierImpl.java
@@ -0,0 +1,441 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Integer Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl#getStartValue <em>Start Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl#getEndValue <em>End Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl#getIncrement <em>Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerRangeModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+@SuppressWarnings("boxing")
+public class IntegerRangeModifierImpl extends RangeModifierImpl implements IntegerRangeModifier {
+	/**
+	 * The default value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int START_VALUE_EDEFAULT = -99999999;
+	/**
+	 * The cached value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int startValue = START_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int END_VALUE_EDEFAULT = -99999999;
+	/**
+	 * The cached value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int endValue = END_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INCREMENT_EDEFAULT = -99999999;
+	/**
+	 * The cached value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected int increment = INCREMENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NEXT_VALUE_EDEFAULT = -99999999;
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int nextValue = NEXT_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int ORIGINAL_VALUE_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int originalValue = ORIGINAL_VALUE_EDEFAULT;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerRangeModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.INTEGER_RANGE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getStartValue() {
+		return startValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartValue(int newStartValue) {
+		int oldStartValue = startValue;
+		startValue = newStartValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE, oldStartValue, startValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getEndValue() {
+		return endValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndValue(int newEndValue) {
+		int oldEndValue = endValue;
+		endValue = newEndValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE, oldEndValue, endValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getIncrement() {
+		return increment;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncrement(int newIncrement) {
+		int oldIncrement = increment;
+		increment = newIncrement;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT, oldIncrement, increment));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public int getNextValue() {
+		// Unset?
+		if (!eIsSet(ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE)) {
+			// Yes
+			nextValue = startValue;
+		} // if
+		
+		final int retValue = nextValue;
+		complete = retValue == endValue;
+		
+		// Still incrementing?
+		if (!complete) {
+			// Yes
+			final int temp = retValue + increment;
+			// Would the new currentValue be equal or "past" the endValue?
+			if (Math.abs(temp) < Math.abs(endValue)) {
+				// No
+				nextValue = temp;
+			} // if
+			else {
+				// Yes
+				nextValue = endValue;
+			} // else 
+		} // if 
+		currentValueText = Integer.toString(retValue);
+		return retValue;
+	} // getNextValue
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(int newNextValue) {
+		int oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE, oldNextValue, nextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(int newOriginalValue) {
+		int oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Integer)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(),getNextValue());
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		eUnset(ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE);
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE:
+				return getStartValue();
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE:
+				return getEndValue();
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT:
+				return getIncrement();
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE:
+				return getNextValue();
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE:
+				setStartValue((Integer)newValue);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE:
+				setEndValue((Integer)newValue);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT:
+				setIncrement((Integer)newValue);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue((Integer)newValue);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE:
+				setStartValue(START_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE:
+				setEndValue(END_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT:
+				setIncrement(INCREMENT_EDEFAULT);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue(NEXT_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE:
+				return startValue != START_VALUE_EDEFAULT;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE:
+				return endValue != END_VALUE_EDEFAULT;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT:
+				return increment != INCREMENT_EDEFAULT;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE:
+				return nextValue != NEXT_VALUE_EDEFAULT;
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (startValue: "); //$NON-NLS-1$
+		result.append(startValue);
+		result.append(", endValue: "); //$NON-NLS-1$
+		result.append(endValue);
+		result.append(", increment: "); //$NON-NLS-1$
+		result.append(increment);
+		result.append(", nextValue: "); //$NON-NLS-1$
+		result.append(nextValue);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+		
+		retValue = retValue && (endValue >= startValue);
+		assert retValue;
+		
+		retValue = retValue && (increment > 0);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} //IntegerRangeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerSequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerSequenceModifierImpl.java
new file mode 100644
index 0000000..6d340a0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/IntegerSequenceModifierImpl.java
@@ -0,0 +1,193 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Integer Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.IntegerSequenceModifierImpl#getSequence <em>Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IntegerSequenceModifierImpl extends SequenceModifierImpl implements IntegerSequenceModifier {
+	/**
+	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Integer> sequence;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerSequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.INTEGER_SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Integer> getSequence() {
+		if (sequence == null) {
+			sequence = new EDataTypeUniqueEList<Integer>(Integer.class, this, ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE);
+		}
+		return sequence;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue()
+	 */
+	@Override
+	public Object getNextValue() {
+		int index = getCurrentSequenceIndex();
+		final Object retValue = getSequence().get(index++);
+		setCurrentSequenceIndex(index);	
+		currentValueText = retValue.toString();
+		return retValue;
+	} // getNextValue
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize()
+	 */
+	@Override
+	public int getSequenceSize() {
+		return getSequence().size();
+	} // getSequenceSize
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		super.updateFeature();
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE:
+				return getSequence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				getSequence().addAll((Collection<? extends Integer>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE:
+				return sequence != null && !sequence.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sequence: "); //$NON-NLS-1$
+		result.append(sequence);
+		result.append(')');
+		return result.toString();
+	}
+
+} //IntegerSequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongModifierImpl.java
new file mode 100644
index 0000000..7aced2f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongModifierImpl.java
@@ -0,0 +1,257 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.LongModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Long Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongModifierImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LongModifierImpl extends SingleValueModifierImpl implements LongModifier {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long VALUE_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long value = VALUE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long ORIGINAL_VALUE_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long originalValue = ORIGINAL_VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.LONG_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(long newValue) {
+		long oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_MODIFIER__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(long newOriginalValue) {
+		long oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.LONG_MODIFIER__VALUE:
+				return getValue();
+			case ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.LONG_MODIFIER__VALUE:
+				setValue((Long)newValue);
+				return;
+			case ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Long)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_MODIFIER__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_MODIFIER__VALUE:
+				return value != VALUE_EDEFAULT;
+			case ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	
+	@SuppressWarnings("boxing")
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Long)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getValue());
+		complete = true;
+	} // updateFeature
+
+	
+	/**
+	 *reset
+	 */
+	@Override
+	public void reset() {
+		complete = false;
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	
+	private boolean complete = false;
+	/**
+	 * isComplete
+	 */
+	@Override
+	public boolean isComplete() {
+		return complete;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: "); //$NON-NLS-1$
+		result.append(value);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LongModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongNOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongNOPModifierImpl.java
new file mode 100644
index 0000000..9301894
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongNOPModifierImpl.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.LongNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Long NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class LongNOPModifierImpl extends NOPModifierImpl implements LongNOPModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongNOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.LONG_NOP_MODIFIER;
+	}
+
+} // LongNOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongRangeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongRangeModifierImpl.java
new file mode 100644
index 0000000..bd5bde1
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongRangeModifierImpl.java
@@ -0,0 +1,443 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Long Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl#getStartValue <em>Start Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl#getEndValue <em>End Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl#getIncrement <em>Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongRangeModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+@SuppressWarnings("boxing")
+public class LongRangeModifierImpl extends RangeModifierImpl implements LongRangeModifier {
+	/**
+	 * The default value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long START_VALUE_EDEFAULT = -99999999L;
+	/**
+	 * The cached value of the '{@link #getStartValue() <em>Start Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long startValue = START_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long END_VALUE_EDEFAULT = -99999999L;
+	/**
+	 * The cached value of the '{@link #getEndValue() <em>End Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long endValue = END_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long INCREMENT_EDEFAULT = -99999999L;
+	/**
+	 * The cached value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected long increment = INCREMENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long NEXT_VALUE_EDEFAULT = -99999999L;
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long nextValue = NEXT_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long ORIGINAL_VALUE_EDEFAULT = -99999999L;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected long originalValue = ORIGINAL_VALUE_EDEFAULT;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongRangeModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.LONG_RANGE_MODIFIER;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getStartValue() {
+		return startValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartValue(long newStartValue) {
+		long oldStartValue = startValue;
+		startValue = newStartValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE, oldStartValue, startValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getEndValue() {
+		return endValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndValue(long newEndValue) {
+		long oldEndValue = endValue;
+		endValue = newEndValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE, oldEndValue, endValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getIncrement() {
+		return increment;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncrement(long newIncrement) {
+		long oldIncrement = increment;
+		increment = newIncrement;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT, oldIncrement, increment));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public long getNextValue() {
+		// Unset?
+		if (!eIsSet(ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE)) {
+			// Yes
+			nextValue = startValue;
+		} // if
+		
+		final long retValue = nextValue;
+		complete = retValue == endValue;
+		
+		// Still incrementing?
+		if (!complete) {
+			// Yes
+			final long temp = retValue + increment;
+			// Would the new currentValue be equal or "past" the endValue?
+			if (Math.abs(temp) < Math.abs(endValue)) {
+				// No
+				nextValue = temp;
+			} // if
+			else {
+				// Yes
+				nextValue = endValue;
+			} // else 
+		} // if 
+		currentValueText = Long.toString(retValue);
+		return retValue;
+	} // getNextValue
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(long newNextValue) {
+		long oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE, oldNextValue, nextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(long newOriginalValue) {
+		long oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((Long)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(),getNextValue());
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		eUnset(ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE);
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE:
+				return getStartValue();
+			case ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE:
+				return getEndValue();
+			case ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT:
+				return getIncrement();
+			case ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE:
+				return getNextValue();
+			case ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE:
+				setStartValue((Long)newValue);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE:
+				setEndValue((Long)newValue);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT:
+				setIncrement((Long)newValue);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue((Long)newValue);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((Long)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE:
+				setStartValue(START_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE:
+				setEndValue(END_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT:
+				setIncrement(INCREMENT_EDEFAULT);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue(NEXT_VALUE_EDEFAULT);
+				return;
+			case ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE:
+				return startValue != START_VALUE_EDEFAULT;
+			case ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE:
+				return endValue != END_VALUE_EDEFAULT;
+			case ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT:
+				return increment != INCREMENT_EDEFAULT;
+			case ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE:
+				return nextValue != NEXT_VALUE_EDEFAULT;
+			case ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != ORIGINAL_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (startValue: "); //$NON-NLS-1$
+		result.append(startValue);
+		result.append(", endValue: "); //$NON-NLS-1$
+		result.append(endValue);
+		result.append(", increment: "); //$NON-NLS-1$
+		result.append(increment);
+		result.append(", nextValue: "); //$NON-NLS-1$
+		result.append(nextValue);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+
+	
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+		
+		retValue = retValue && (endValue >= startValue);
+		assert retValue;
+		
+		retValue = retValue && (increment > 0L);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} //LongRangeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongSequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongSequenceModifierImpl.java
new file mode 100644
index 0000000..c53164a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/LongSequenceModifierImpl.java
@@ -0,0 +1,193 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Long Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.LongSequenceModifierImpl#getSequence <em>Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LongSequenceModifierImpl extends SequenceModifierImpl implements LongSequenceModifier {
+	/**
+	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Long> sequence;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongSequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.LONG_SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Long> getSequence() {
+		if (sequence == null) {
+			sequence = new EDataTypeUniqueEList<Long>(Long.class, this, ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE);
+		}
+		return sequence;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue()
+	 */
+	@Override
+	public Object getNextValue() {
+		int index = getCurrentSequenceIndex();
+		final Object retValue = getSequence().get(index++);
+		setCurrentSequenceIndex(index);	
+		currentValueText = retValue.toString();
+		return retValue;
+	} // getNextValue
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize()
+	 */
+	@Override
+	public int getSequenceSize() {
+		return getSequence().size();
+	} // getSequenceSize
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		super.updateFeature();
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE:
+				return getSequence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				getSequence().addAll((Collection<? extends Long>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE:
+				return sequence != null && !sequence.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sequence: "); //$NON-NLS-1$
+		result.append(sequence);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LongSequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierFactoryImpl.java
new file mode 100644
index 0000000..1d840bd
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierFactoryImpl.java
@@ -0,0 +1,398 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.core.modifier.DoubleNOPModifier;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.DoubleModifier;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.IntegerModifier;
+import org.eclipse.stem.core.modifier.LongNOPModifier;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.LongModifier;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.NOPModifier;
+import org.eclipse.stem.core.modifier.STEMTimeNOPModifier;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+import org.eclipse.stem.core.modifier.STEMTimeModifier;
+import org.eclipse.stem.core.modifier.StringNOPModifier;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModifierFactoryImpl extends EFactoryImpl implements ModifierFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ModifierFactory init() {
+		try {
+			ModifierFactory theModifierFactory = (ModifierFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/modifier.ecore"); //$NON-NLS-1$ 
+			if (theModifierFactory != null) {
+				return theModifierFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ModifierFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ModifierPackage.DOUBLE_NOP_MODIFIER: return createDoubleNOPModifier();
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER: return createDoubleRangeModifier();
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER: return createDoubleSequenceModifier();
+			case ModifierPackage.INTEGER_NOP_MODIFIER: return createIntegerNOPModifier();
+			case ModifierPackage.INTEGER_RANGE_MODIFIER: return createIntegerRangeModifier();
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER: return createIntegerSequenceModifier();
+			case ModifierPackage.LONG_NOP_MODIFIER: return createLongNOPModifier();
+			case ModifierPackage.LONG_RANGE_MODIFIER: return createLongRangeModifier();
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER: return createLongSequenceModifier();
+			case ModifierPackage.MODIFIER: return createModifier();
+			case ModifierPackage.NOP_MODIFIER: return createNOPModifier();
+			case ModifierPackage.STEM_TIME_NOP_MODIFIER: return createSTEMTimeNOPModifier();
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER: return createSTEMTimeRangeModifier();
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER: return createSTEMTimeSequenceModifier();
+			case ModifierPackage.STRING_NOP_MODIFIER: return createStringNOPModifier();
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER: return createStringSequenceModifier();
+			case ModifierPackage.DOUBLE_MODIFIER: return createDoubleModifier();
+			case ModifierPackage.INTEGER_MODIFIER: return createIntegerModifier();
+			case ModifierPackage.LONG_MODIFIER: return createLongModifier();
+			case ModifierPackage.STEM_TIME_MODIFIER: return createSTEMTimeModifier();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case ModifierPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case ModifierPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleNOPModifier createDoubleNOPModifier() {
+		DoubleNOPModifierImpl doubleNOPModifier = new DoubleNOPModifierImpl();
+		return doubleNOPModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleRangeModifier createDoubleRangeModifier() {
+		DoubleRangeModifierImpl doubleRangeModifier = new DoubleRangeModifierImpl();
+		return doubleRangeModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleSequenceModifier createDoubleSequenceModifier() {
+		DoubleSequenceModifierImpl doubleSequenceModifier = new DoubleSequenceModifierImpl();
+		return doubleSequenceModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerNOPModifier createIntegerNOPModifier() {
+		IntegerNOPModifierImpl integerNOPModifier = new IntegerNOPModifierImpl();
+		return integerNOPModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerRangeModifier createIntegerRangeModifier() {
+		IntegerRangeModifierImpl integerRangeModifier = new IntegerRangeModifierImpl();
+		return integerRangeModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerSequenceModifier createIntegerSequenceModifier() {
+		IntegerSequenceModifierImpl integerSequenceModifier = new IntegerSequenceModifierImpl();
+		return integerSequenceModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongNOPModifier createLongNOPModifier() {
+		LongNOPModifierImpl longNOPModifier = new LongNOPModifierImpl();
+		return longNOPModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongRangeModifier createLongRangeModifier() {
+		LongRangeModifierImpl longRangeModifier = new LongRangeModifierImpl();
+		return longRangeModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongSequenceModifier createLongSequenceModifier() {
+		LongSequenceModifierImpl longSequenceModifier = new LongSequenceModifierImpl();
+		return longSequenceModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Modifier createModifier() {
+		ModifierImpl modifier = new ModifierImpl();
+		return modifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NOPModifier createNOPModifier() {
+		NOPModifierImpl nopModifier = new NOPModifierImpl();
+		return nopModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeNOPModifier createSTEMTimeNOPModifier() {
+		STEMTimeNOPModifierImpl stemTimeNOPModifier = new STEMTimeNOPModifierImpl();
+		return stemTimeNOPModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeRangeModifier createSTEMTimeRangeModifier() {
+		STEMTimeRangeModifierImpl stemTimeRangeModifier = new STEMTimeRangeModifierImpl();
+		return stemTimeRangeModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeSequenceModifier createSTEMTimeSequenceModifier() {
+		STEMTimeSequenceModifierImpl stemTimeSequenceModifier = new STEMTimeSequenceModifierImpl();
+		return stemTimeSequenceModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringNOPModifier createStringNOPModifier() {
+		StringNOPModifierImpl stringNOPModifier = new StringNOPModifierImpl();
+		return stringNOPModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringSequenceModifier createStringSequenceModifier() {
+		StringSequenceModifierImpl stringSequenceModifier = new StringSequenceModifierImpl();
+		return stringSequenceModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleModifier createDoubleModifier() {
+		DoubleModifierImpl doubleModifier = new DoubleModifierImpl();
+		return doubleModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerModifier createIntegerModifier() {
+		IntegerModifierImpl integerModifier = new IntegerModifierImpl();
+		return integerModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongModifier createLongModifier() {
+		LongModifierImpl longModifier = new LongModifierImpl();
+		return longModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeModifier createSTEMTimeModifier() {
+		STEMTimeModifierImpl stemTimeModifier = new STEMTimeModifierImpl();
+		return stemTimeModifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI createURIFromStringGen(EDataType eDataType, String initialValue) {
+		return (URI)super.createFromString(eDataType, initialValue);
+	}
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertURIToStringGen(EDataType eDataType, Object instanceValue) {
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierPackage getModifierPackage() {
+		return (ModifierPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ModifierPackage getPackage() {
+		return ModifierPackage.eINSTANCE;
+	}
+
+} //ModifierFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierImpl.java
new file mode 100644
index 0000000..113276b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierImpl.java
@@ -0,0 +1,453 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.stem.core.CorePlugin;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.DecoratorImpl;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.Scenario;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '
+ * <em><b>Modifier</b></em>'. <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.ModifierImpl#getTargetURI <em>Target URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.ModifierImpl#getFeatureModifiers <em>Feature Modifiers</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.ModifierImpl#isComplete <em>Complete</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ModifierImpl extends DecoratorImpl implements Modifier {
+	/**
+	 * The default value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI TARGET_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI targetURI = TARGET_URI_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getFeatureModifiers()
+	 * <em>Feature Modifiers</em>}' containment reference list. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getFeatureModifiers()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<FeatureModifier> featureModifiers;
+
+	// set to true when there's an error
+	private boolean complete = false;
+
+	private static int modifierCounter = 0;
+
+	/**
+	 * The default value of the '{@link #isComplete() <em>Complete</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isComplete()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean COMPLETE_EDEFAULT = false;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected ModifierImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_MODIFIER_SEGMENT + "/"
+				+ Integer.toString(modifierCounter++)));
+		setTypeURI(STEMURI.MODIFIER_TYPE_URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getTargetURI() {
+		return targetURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTargetURI(URI newTargetURI) {
+		URI oldTargetURI = targetURI;
+		targetURI = newTargetURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.MODIFIER__TARGET_URI, oldTargetURI, targetURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<FeatureModifier> getFeatureModifiers() {
+		if (featureModifiers == null) {
+			featureModifiers = new EObjectContainmentEList<FeatureModifier>(FeatureModifier.class, this, ModifierPackage.MODIFIER__FEATURE_MODIFIERS);
+		}
+		return featureModifiers;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean isComplete() {
+
+		if (complete) {
+			// Yes
+			return true;
+		} // if
+
+		boolean retValue = true;
+
+		for (FeatureModifier featureModifier : getFeatureModifiers()) {
+			retValue = featureModifier.isComplete();
+			// Found one that's false?
+			if (!retValue) {
+				// Yes
+				break;
+			} // if
+		} // for each FeatureModifier
+		return retValue;
+	} // isComplete
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void reset() {
+		for (FeatureModifier featureModifier : getFeatureModifiers()) {
+			featureModifier.reset();
+		} // for each FeatureModifier
+	} // reset
+
+	
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels()
+	 */
+	@Override
+	public void resetLabels() {
+		reset();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph()
+	 */
+	@Override
+	public void decorateGraph() {
+		// Nothing
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(org.eclipse.stem.core.model.STEMTime,
+	 *      long)
+	 */
+	@Override
+	public void updateLabels(STEMTime time, long timerPeriod, int cycle) {
+		modifyIdentifiable(getIdentifiable(getGraph()));
+	} // updateLabels
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void updateScenario(final Scenario scenario) {
+		modifyIdentifiable(getIdentifiable(scenario));
+	} // updateScenario
+
+	private Identifiable getIdentifiable(final Scenario scenario) {
+		Identifiable retValue = null;
+		// Sequencer?
+		if (scenario.getSequencer().getURI().equals(targetURI)) {
+			// Yes
+			retValue = scenario.getSequencer();
+		} // if
+		else {
+			// No
+			// Scenario Decorators?
+			/* Commented out 6/10/09 since a modifier for infectors needs to modify the infector in the graph
+			for (Decorator scenarioDecorator : scenario.getScenarioDecorators()) {
+				// Our target?
+				if (scenarioDecorator.getURI().equals(targetURI)) {
+					// Yes
+					retValue = scenarioDecorator;
+					break;
+				} // if
+			} // for each Scenario Decorator
+			*/
+			// Did we find a Scenario decorator?
+			if (retValue == null) {
+				// No
+				// We've done the easy stuff, we need to get the canonical graph
+				if(scenario.getCanonicalGraph() == null) scenario.initialize();
+				retValue = getIdentifiable(scenario.getCanonicalGraph());
+			} // if no Scenario Decorator
+
+		} // else not a Scenario decorator
+		return retValue;
+	} // getIdentifiable
+
+	private Identifiable getIdentifiable(final Graph graph) {
+		Identifiable retValue = null;
+		for (Decorator decorator : graph.getDecorators()) {
+			// Our target?
+			if (decorator.getURI().equals(targetURI)) {
+				// Yes
+				retValue = decorator;
+				break;
+			} // if
+		} // for each Decorator
+
+		// A Node label?
+		if (retValue == null) {
+			for (NodeLabel nodeLabel : graph.getNodeLabels().values()) {
+				// Our target?
+				if (nodeLabel.getURI().equals(targetURI)) {
+					// Yes
+					retValue = nodeLabel;
+					break;
+				} // if
+			} // for each Node Label
+		} // if retValue == null
+
+		// An Edge Label?
+		if (retValue == null) {
+			for (Edge edge : graph.getEdges().values()) {
+				// Our target?
+				if (edge.getLabel().getURI().equals(targetURI)) {
+					// Yes
+					retValue = edge.getLabel();
+					break;
+				} // if
+			} // for each Edge
+		} // if retValue == null
+		return retValue;
+	} // getIdentifiable
+
+	private void modifyIdentifiable(final Identifiable identifiableToModify) {
+		// Did we find it?
+		if (identifiableToModify != null) {
+			// Yes
+			for (FeatureModifier featureModifier : getFeatureModifiers()) {
+				EObject target = identifiableToModify;
+				
+				// If the Identifiable is a static label, then the feature we
+				// are modifying could be in the current label value. If it is
+				// we need to adjust the target of the feature modifier.
+				// Static label?
+				if (identifiableToModify instanceof StaticLabel) {
+					// Yes
+					final StaticLabel sl = (StaticLabel)identifiableToModify;
+					target = sl.getCurrentValue();
+				}
+				featureModifier.setTarget(target);
+				featureModifier.updateFeature();
+			} // for each FeatureModifier
+		} // if
+		else {
+			// No
+			CorePlugin.logError("Modifier \"" + this.getDublinCore().getTitle()
+					+ "\" could not find target \"" + getTargetURI().toString()
+					+ "\"", null);
+			complete = true;
+		} // else
+	} // modifyIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.Modifier#getModificationSummary()
+	 */
+	public List<String> getModificationSummary() {
+		final List<String> retValue = new ArrayList<String>();
+		for (FeatureModifier featureModifier : getFeatureModifiers()) {
+			retValue.add(featureModifier.getModificationSummary());
+		} // for each FeatureModifier
+		return retValue;
+	} // getModificationSummary
+
+	/**
+	 * @see org.eclipse.stem.core.common.impl.IdentifiableImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+
+		/*
+		 * This is commented out because of the difficulty of dynamically
+		 * creating a test object that is derived from Identifable. So the test
+		 * object doesn't have a URI. See MonitorTest#createTestPackage()
+		 */
+		// retValue = retValue && targetURI != null;
+		// assert retValue;
+		for (FeatureModifier featureModifier : getFeatureModifiers()) {
+			retValue = retValue && featureModifier.sane();
+			assert retValue;
+		} // for each FeatureModifier
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd,
+			int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				return ((InternalEList<?>)getFeatureModifiers()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.MODIFIER__TARGET_URI:
+				return getTargetURI();
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				return getFeatureModifiers();
+			case ModifierPackage.MODIFIER__COMPLETE:
+				return isComplete();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.MODIFIER__TARGET_URI:
+				setTargetURI((URI)newValue);
+				return;
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				getFeatureModifiers().clear();
+				getFeatureModifiers().addAll((Collection<? extends FeatureModifier>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.MODIFIER__TARGET_URI:
+				setTargetURI(TARGET_URI_EDEFAULT);
+				return;
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				getFeatureModifiers().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.MODIFIER__TARGET_URI:
+				return TARGET_URI_EDEFAULT == null ? targetURI != null : !TARGET_URI_EDEFAULT.equals(targetURI);
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				return featureModifiers != null && !featureModifiers.isEmpty();
+			case ModifierPackage.MODIFIER__COMPLETE:
+				return isComplete() != COMPLETE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (targetURI: "); //$NON-NLS-1$
+		result.append(targetURI);
+		result.append(')');
+		return result.toString();
+	}
+
+} // ModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierPackageImpl.java
new file mode 100644
index 0000000..f0c5403
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/ModifierPackageImpl.java
@@ -0,0 +1,1296 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+import org.eclipse.stem.core.modifier.DoubleModifier;
+import org.eclipse.stem.core.modifier.DoubleNOPModifier;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.IntegerModifier;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.LongModifier;
+import org.eclipse.stem.core.modifier.LongNOPModifier;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.NOPModifier;
+import org.eclipse.stem.core.modifier.RangeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeNOPModifier;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+import org.eclipse.stem.core.modifier.SingleValueModifier;
+import org.eclipse.stem.core.modifier.StringNOPModifier;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModifierPackageImpl extends EPackageImpl implements ModifierPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass doubleNOPModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass doubleRangeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass doubleSequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass featureModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integerNOPModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integerRangeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integerSequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass longNOPModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass longRangeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass longSequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass modifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nopModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass rangeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stemTimeNOPModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stemTimeRangeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stemTimeSequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stringNOPModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stringSequenceModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass modifiableEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass singleValueModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass doubleModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integerModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass longModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stemTimeModifierEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.modifier.ModifierPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ModifierPackageImpl() {
+		super(eNS_URI, ModifierFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ModifierPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ModifierPackage init() {
+		if (isInited) return (ModifierPackage)EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ModifierPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theModifierPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theModifierPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theModifierPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ModifierPackage.eNS_URI, theModifierPackage);
+		return theModifierPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDoubleNOPModifier() {
+		return doubleNOPModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDoubleRangeModifier() {
+		return doubleRangeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleRangeModifier_StartValue() {
+		return (EAttribute)doubleRangeModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleRangeModifier_EndValue() {
+		return (EAttribute)doubleRangeModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleRangeModifier_Increment() {
+		return (EAttribute)doubleRangeModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleRangeModifier_NextValue() {
+		return (EAttribute)doubleRangeModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleRangeModifier_OriginalValue() {
+		return (EAttribute)doubleRangeModifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDoubleSequenceModifier() {
+		return doubleSequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleSequenceModifier_Sequence() {
+		return (EAttribute)doubleSequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFeatureModifier() {
+		return featureModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFeatureModifier_Target() {
+		return (EReference)featureModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFeatureModifier_EStructuralFeature() {
+		return (EReference)featureModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureModifier_FeatureName() {
+		return (EAttribute)featureModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureModifier_FeatureId() {
+		return (EAttribute)featureModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureModifier_CurrentValueText() {
+		return (EAttribute)featureModifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureModifier_Complete() {
+		return (EAttribute)featureModifierEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegerNOPModifier() {
+		return integerNOPModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegerRangeModifier() {
+		return integerRangeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerRangeModifier_StartValue() {
+		return (EAttribute)integerRangeModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerRangeModifier_EndValue() {
+		return (EAttribute)integerRangeModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerRangeModifier_Increment() {
+		return (EAttribute)integerRangeModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerRangeModifier_NextValue() {
+		return (EAttribute)integerRangeModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerRangeModifier_OriginalValue() {
+		return (EAttribute)integerRangeModifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegerSequenceModifier() {
+		return integerSequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerSequenceModifier_Sequence() {
+		return (EAttribute)integerSequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLongNOPModifier() {
+		return longNOPModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLongRangeModifier() {
+		return longRangeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongRangeModifier_StartValue() {
+		return (EAttribute)longRangeModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongRangeModifier_EndValue() {
+		return (EAttribute)longRangeModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongRangeModifier_Increment() {
+		return (EAttribute)longRangeModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongRangeModifier_NextValue() {
+		return (EAttribute)longRangeModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongRangeModifier_OriginalValue() {
+		return (EAttribute)longRangeModifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLongSequenceModifier() {
+		return longSequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongSequenceModifier_Sequence() {
+		return (EAttribute)longSequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getModifier() {
+		return modifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getModifier_TargetURI() {
+		return (EAttribute)modifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getModifier_FeatureModifiers() {
+		return (EReference)modifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getModifier_Complete() {
+		return (EAttribute)modifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNOPModifier() {
+		return nopModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRangeModifier() {
+		return rangeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSTEMTimeNOPModifier() {
+		return stemTimeNOPModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSTEMTimeRangeModifier() {
+		return stemTimeRangeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeRangeModifier_StartValue() {
+		return (EReference)stemTimeRangeModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeRangeModifier_EndValue() {
+		return (EReference)stemTimeRangeModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSTEMTimeRangeModifier_Increment() {
+		return (EAttribute)stemTimeRangeModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeRangeModifier_NextValue() {
+		return (EReference)stemTimeRangeModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeRangeModifier_OriginalValue() {
+		return (EReference)stemTimeRangeModifierEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSTEMTimeSequenceModifier() {
+		return stemTimeSequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeSequenceModifier_Sequence() {
+		return (EReference)stemTimeSequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSequenceModifier() {
+		return sequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequenceModifier_SequenceSize() {
+		return (EAttribute)sequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequenceModifier_CurrentSequenceIndex() {
+		return (EAttribute)sequenceModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequenceModifier_NextValue() {
+		return (EAttribute)sequenceModifierEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequenceModifier_OriginalValue() {
+		return (EAttribute)sequenceModifierEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStringNOPModifier() {
+		return stringNOPModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStringSequenceModifier() {
+		return stringSequenceModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStringSequenceModifier_Sequence() {
+		return (EAttribute)stringSequenceModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getModifiable() {
+		return modifiableEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSingleValueModifier() {
+		return singleValueModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDoubleModifier() {
+		return doubleModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleModifier_Value() {
+		return (EAttribute)doubleModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDoubleModifier_OriginalValue() {
+		return (EAttribute)doubleModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegerModifier() {
+		return integerModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerModifier_Value() {
+		return (EAttribute)integerModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getIntegerModifier_OriginalValue() {
+		return (EAttribute)integerModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLongModifier() {
+		return longModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongModifier_Value() {
+		return (EAttribute)longModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLongModifier_OriginalValue() {
+		return (EAttribute)longModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSTEMTimeModifier() {
+		return stemTimeModifierEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeModifier_Value() {
+		return (EReference)stemTimeModifierEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSTEMTimeModifier_OriginalValue() {
+		return (EReference)stemTimeModifierEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierFactory getModifierFactory() {
+		return (ModifierFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		doubleNOPModifierEClass = createEClass(DOUBLE_NOP_MODIFIER);
+
+		doubleRangeModifierEClass = createEClass(DOUBLE_RANGE_MODIFIER);
+		createEAttribute(doubleRangeModifierEClass, DOUBLE_RANGE_MODIFIER__START_VALUE);
+		createEAttribute(doubleRangeModifierEClass, DOUBLE_RANGE_MODIFIER__END_VALUE);
+		createEAttribute(doubleRangeModifierEClass, DOUBLE_RANGE_MODIFIER__INCREMENT);
+		createEAttribute(doubleRangeModifierEClass, DOUBLE_RANGE_MODIFIER__NEXT_VALUE);
+		createEAttribute(doubleRangeModifierEClass, DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE);
+
+		doubleSequenceModifierEClass = createEClass(DOUBLE_SEQUENCE_MODIFIER);
+		createEAttribute(doubleSequenceModifierEClass, DOUBLE_SEQUENCE_MODIFIER__SEQUENCE);
+
+		featureModifierEClass = createEClass(FEATURE_MODIFIER);
+		createEReference(featureModifierEClass, FEATURE_MODIFIER__TARGET);
+		createEReference(featureModifierEClass, FEATURE_MODIFIER__ESTRUCTURAL_FEATURE);
+		createEAttribute(featureModifierEClass, FEATURE_MODIFIER__FEATURE_NAME);
+		createEAttribute(featureModifierEClass, FEATURE_MODIFIER__FEATURE_ID);
+		createEAttribute(featureModifierEClass, FEATURE_MODIFIER__CURRENT_VALUE_TEXT);
+		createEAttribute(featureModifierEClass, FEATURE_MODIFIER__COMPLETE);
+
+		integerNOPModifierEClass = createEClass(INTEGER_NOP_MODIFIER);
+
+		integerRangeModifierEClass = createEClass(INTEGER_RANGE_MODIFIER);
+		createEAttribute(integerRangeModifierEClass, INTEGER_RANGE_MODIFIER__START_VALUE);
+		createEAttribute(integerRangeModifierEClass, INTEGER_RANGE_MODIFIER__END_VALUE);
+		createEAttribute(integerRangeModifierEClass, INTEGER_RANGE_MODIFIER__INCREMENT);
+		createEAttribute(integerRangeModifierEClass, INTEGER_RANGE_MODIFIER__NEXT_VALUE);
+		createEAttribute(integerRangeModifierEClass, INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE);
+
+		integerSequenceModifierEClass = createEClass(INTEGER_SEQUENCE_MODIFIER);
+		createEAttribute(integerSequenceModifierEClass, INTEGER_SEQUENCE_MODIFIER__SEQUENCE);
+
+		longNOPModifierEClass = createEClass(LONG_NOP_MODIFIER);
+
+		longRangeModifierEClass = createEClass(LONG_RANGE_MODIFIER);
+		createEAttribute(longRangeModifierEClass, LONG_RANGE_MODIFIER__START_VALUE);
+		createEAttribute(longRangeModifierEClass, LONG_RANGE_MODIFIER__END_VALUE);
+		createEAttribute(longRangeModifierEClass, LONG_RANGE_MODIFIER__INCREMENT);
+		createEAttribute(longRangeModifierEClass, LONG_RANGE_MODIFIER__NEXT_VALUE);
+		createEAttribute(longRangeModifierEClass, LONG_RANGE_MODIFIER__ORIGINAL_VALUE);
+
+		longSequenceModifierEClass = createEClass(LONG_SEQUENCE_MODIFIER);
+		createEAttribute(longSequenceModifierEClass, LONG_SEQUENCE_MODIFIER__SEQUENCE);
+
+		modifierEClass = createEClass(MODIFIER);
+		createEAttribute(modifierEClass, MODIFIER__TARGET_URI);
+		createEReference(modifierEClass, MODIFIER__FEATURE_MODIFIERS);
+		createEAttribute(modifierEClass, MODIFIER__COMPLETE);
+
+		nopModifierEClass = createEClass(NOP_MODIFIER);
+
+		rangeModifierEClass = createEClass(RANGE_MODIFIER);
+
+		stemTimeNOPModifierEClass = createEClass(STEM_TIME_NOP_MODIFIER);
+
+		stemTimeRangeModifierEClass = createEClass(STEM_TIME_RANGE_MODIFIER);
+		createEReference(stemTimeRangeModifierEClass, STEM_TIME_RANGE_MODIFIER__START_VALUE);
+		createEReference(stemTimeRangeModifierEClass, STEM_TIME_RANGE_MODIFIER__END_VALUE);
+		createEAttribute(stemTimeRangeModifierEClass, STEM_TIME_RANGE_MODIFIER__INCREMENT);
+		createEReference(stemTimeRangeModifierEClass, STEM_TIME_RANGE_MODIFIER__NEXT_VALUE);
+		createEReference(stemTimeRangeModifierEClass, STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE);
+
+		stemTimeSequenceModifierEClass = createEClass(STEM_TIME_SEQUENCE_MODIFIER);
+		createEReference(stemTimeSequenceModifierEClass, STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE);
+
+		sequenceModifierEClass = createEClass(SEQUENCE_MODIFIER);
+		createEAttribute(sequenceModifierEClass, SEQUENCE_MODIFIER__SEQUENCE_SIZE);
+		createEAttribute(sequenceModifierEClass, SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX);
+		createEAttribute(sequenceModifierEClass, SEQUENCE_MODIFIER__NEXT_VALUE);
+		createEAttribute(sequenceModifierEClass, SEQUENCE_MODIFIER__ORIGINAL_VALUE);
+
+		stringNOPModifierEClass = createEClass(STRING_NOP_MODIFIER);
+
+		stringSequenceModifierEClass = createEClass(STRING_SEQUENCE_MODIFIER);
+		createEAttribute(stringSequenceModifierEClass, STRING_SEQUENCE_MODIFIER__SEQUENCE);
+
+		modifiableEClass = createEClass(MODIFIABLE);
+
+		singleValueModifierEClass = createEClass(SINGLE_VALUE_MODIFIER);
+
+		doubleModifierEClass = createEClass(DOUBLE_MODIFIER);
+		createEAttribute(doubleModifierEClass, DOUBLE_MODIFIER__VALUE);
+		createEAttribute(doubleModifierEClass, DOUBLE_MODIFIER__ORIGINAL_VALUE);
+
+		integerModifierEClass = createEClass(INTEGER_MODIFIER);
+		createEAttribute(integerModifierEClass, INTEGER_MODIFIER__VALUE);
+		createEAttribute(integerModifierEClass, INTEGER_MODIFIER__ORIGINAL_VALUE);
+
+		longModifierEClass = createEClass(LONG_MODIFIER);
+		createEAttribute(longModifierEClass, LONG_MODIFIER__VALUE);
+		createEAttribute(longModifierEClass, LONG_MODIFIER__ORIGINAL_VALUE);
+
+		stemTimeModifierEClass = createEClass(STEM_TIME_MODIFIER);
+		createEReference(stemTimeModifierEClass, STEM_TIME_MODIFIER__VALUE);
+		createEReference(stemTimeModifierEClass, STEM_TIME_MODIFIER__ORIGINAL_VALUE);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		ScenarioPackage theScenarioPackage = (ScenarioPackage)EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		doubleNOPModifierEClass.getESuperTypes().add(this.getNOPModifier());
+		doubleRangeModifierEClass.getESuperTypes().add(this.getRangeModifier());
+		doubleSequenceModifierEClass.getESuperTypes().add(this.getSequenceModifier());
+		integerNOPModifierEClass.getESuperTypes().add(this.getNOPModifier());
+		integerRangeModifierEClass.getESuperTypes().add(this.getRangeModifier());
+		integerSequenceModifierEClass.getESuperTypes().add(this.getSequenceModifier());
+		longNOPModifierEClass.getESuperTypes().add(this.getNOPModifier());
+		longRangeModifierEClass.getESuperTypes().add(this.getRangeModifier());
+		longSequenceModifierEClass.getESuperTypes().add(this.getSequenceModifier());
+		modifierEClass.getESuperTypes().add(theModelPackage.getDecorator());
+		nopModifierEClass.getESuperTypes().add(this.getFeatureModifier());
+		rangeModifierEClass.getESuperTypes().add(this.getFeatureModifier());
+		stemTimeNOPModifierEClass.getESuperTypes().add(this.getNOPModifier());
+		stemTimeRangeModifierEClass.getESuperTypes().add(this.getRangeModifier());
+		stemTimeSequenceModifierEClass.getESuperTypes().add(this.getSequenceModifier());
+		sequenceModifierEClass.getESuperTypes().add(this.getFeatureModifier());
+		stringNOPModifierEClass.getESuperTypes().add(this.getNOPModifier());
+		stringSequenceModifierEClass.getESuperTypes().add(this.getSequenceModifier());
+		singleValueModifierEClass.getESuperTypes().add(this.getFeatureModifier());
+		doubleModifierEClass.getESuperTypes().add(this.getSingleValueModifier());
+		integerModifierEClass.getESuperTypes().add(this.getSingleValueModifier());
+		longModifierEClass.getESuperTypes().add(this.getSingleValueModifier());
+		stemTimeModifierEClass.getESuperTypes().add(this.getSingleValueModifier());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(doubleNOPModifierEClass, DoubleNOPModifier.class, "DoubleNOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(doubleRangeModifierEClass, DoubleRangeModifier.class, "DoubleRangeModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDoubleRangeModifier_StartValue(), ecorePackage.getEDouble(), "startValue", "-99999999.0", 0, 1, DoubleRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDoubleRangeModifier_EndValue(), ecorePackage.getEDouble(), "endValue", "-99999999.0", 0, 1, DoubleRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDoubleRangeModifier_Increment(), ecorePackage.getEDouble(), "increment", "-99999999.0", 0, 1, DoubleRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDoubleRangeModifier_NextValue(), ecorePackage.getEDouble(), "nextValue", "0.0", 0, 1, DoubleRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDoubleRangeModifier_OriginalValue(), ecorePackage.getEDouble(), "originalValue", null, 0, 1, DoubleRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(doubleSequenceModifierEClass, DoubleSequenceModifier.class, "DoubleSequenceModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDoubleSequenceModifier_Sequence(), ecorePackage.getEDoubleObject(), "sequence", null, 0, -1, DoubleSequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(featureModifierEClass, FeatureModifier.class, "FeatureModifier", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getFeatureModifier_Target(), theEcorePackage.getEObject(), null, "target", null, 0, 1, FeatureModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getFeatureModifier_EStructuralFeature(), theEcorePackage.getEStructuralFeature(), null, "eStructuralFeature", null, 0, 1, FeatureModifier.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureModifier_FeatureName(), ecorePackage.getEString(), "featureName", null, 0, 1, FeatureModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureModifier_FeatureId(), ecorePackage.getEInt(), "featureId", null, 0, 1, FeatureModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureModifier_CurrentValueText(), ecorePackage.getEString(), "currentValueText", null, 0, 1, FeatureModifier.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getFeatureModifier_Complete(), ecorePackage.getEBoolean(), "complete", null, 0, 1, FeatureModifier.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(featureModifierEClass, null, "updateFeature", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(featureModifierEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(integerNOPModifierEClass, IntegerNOPModifier.class, "IntegerNOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(integerRangeModifierEClass, IntegerRangeModifier.class, "IntegerRangeModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getIntegerRangeModifier_StartValue(), ecorePackage.getEInt(), "startValue", "-99999999", 0, 1, IntegerRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getIntegerRangeModifier_EndValue(), ecorePackage.getEInt(), "endValue", "-99999999", 0, 1, IntegerRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getIntegerRangeModifier_Increment(), ecorePackage.getEInt(), "increment", "-99999999", 0, 1, IntegerRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getIntegerRangeModifier_NextValue(), ecorePackage.getEInt(), "nextValue", "-99999999", 0, 1, IntegerRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getIntegerRangeModifier_OriginalValue(), ecorePackage.getEInt(), "originalValue", null, 0, 1, IntegerRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(integerSequenceModifierEClass, IntegerSequenceModifier.class, "IntegerSequenceModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getIntegerSequenceModifier_Sequence(), ecorePackage.getEIntegerObject(), "sequence", null, 0, -1, IntegerSequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(longNOPModifierEClass, LongNOPModifier.class, "LongNOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(longRangeModifierEClass, LongRangeModifier.class, "LongRangeModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLongRangeModifier_StartValue(), ecorePackage.getELong(), "startValue", "-99999999", 0, 1, LongRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLongRangeModifier_EndValue(), ecorePackage.getELong(), "endValue", "-99999999", 0, 1, LongRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLongRangeModifier_Increment(), ecorePackage.getELong(), "increment", "-99999999", 0, 1, LongRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLongRangeModifier_NextValue(), ecorePackage.getELong(), "nextValue", "-99999999", 0, 1, LongRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getLongRangeModifier_OriginalValue(), ecorePackage.getELong(), "originalValue", "-99999999", 0, 1, LongRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(longSequenceModifierEClass, LongSequenceModifier.class, "LongSequenceModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLongSequenceModifier_Sequence(), ecorePackage.getELongObject(), "sequence", null, 0, -1, LongSequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(modifierEClass, Modifier.class, "Modifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getModifier_TargetURI(), this.getURI(), "targetURI", null, 0, 1, Modifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getModifier_FeatureModifiers(), this.getFeatureModifier(), null, "featureModifiers", null, 0, -1, Modifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getModifier_Complete(), ecorePackage.getEBoolean(), "complete", null, 0, 1, Modifier.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		EOperation op = addEOperation(modifierEClass, null, "updateScenario", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theScenarioPackage.getScenario(), "baseScenario", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(modifierEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(nopModifierEClass, NOPModifier.class, "NOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(rangeModifierEClass, RangeModifier.class, "RangeModifier", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stemTimeNOPModifierEClass, STEMTimeNOPModifier.class, "STEMTimeNOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stemTimeRangeModifierEClass, STEMTimeRangeModifier.class, "STEMTimeRangeModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSTEMTimeRangeModifier_StartValue(), theModelPackage.getSTEMTime(), null, "startValue", null, 0, 1, STEMTimeRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSTEMTimeRangeModifier_EndValue(), theModelPackage.getSTEMTime(), null, "endValue", null, 0, 1, STEMTimeRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSTEMTimeRangeModifier_Increment(), ecorePackage.getELong(), "increment", null, 0, 1, STEMTimeRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSTEMTimeRangeModifier_NextValue(), theModelPackage.getSTEMTime(), null, "nextValue", null, 0, 1, STEMTimeRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSTEMTimeRangeModifier_OriginalValue(), theModelPackage.getSTEMTime(), null, "originalValue", null, 0, 1, STEMTimeRangeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(stemTimeSequenceModifierEClass, STEMTimeSequenceModifier.class, "STEMTimeSequenceModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSTEMTimeSequenceModifier_Sequence(), theModelPackage.getSTEMTime(), null, "sequence", null, 0, -1, STEMTimeSequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sequenceModifierEClass, SequenceModifier.class, "SequenceModifier", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSequenceModifier_SequenceSize(), ecorePackage.getEInt(), "sequenceSize", null, 0, 1, SequenceModifier.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequenceModifier_CurrentSequenceIndex(), ecorePackage.getEInt(), "currentSequenceIndex", "0", 0, 1, SequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSequenceModifier_NextValue(), ecorePackage.getEJavaObject(), "nextValue", null, 0, 1, SequenceModifier.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequenceModifier_OriginalValue(), ecorePackage.getEJavaObject(), "originalValue", null, 0, 1, SequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(stringNOPModifierEClass, StringNOPModifier.class, "StringNOPModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stringSequenceModifierEClass, StringSequenceModifier.class, "StringSequenceModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStringSequenceModifier_Sequence(), ecorePackage.getEString(), "sequence", null, 0, -1, StringSequenceModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(modifiableEClass, Modifiable.class, "Modifiable", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(singleValueModifierEClass, SingleValueModifier.class, "SingleValueModifier", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(doubleModifierEClass, DoubleModifier.class, "DoubleModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDoubleModifier_Value(), theEcorePackage.getEDouble(), "value", null, 0, 1, DoubleModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDoubleModifier_OriginalValue(), theEcorePackage.getEDouble(), "originalValue", null, 0, 1, DoubleModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(integerModifierEClass, IntegerModifier.class, "IntegerModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getIntegerModifier_Value(), theEcorePackage.getEInt(), "value", null, 0, 1, IntegerModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getIntegerModifier_OriginalValue(), theEcorePackage.getEInt(), "originalValue", null, 0, 1, IntegerModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(longModifierEClass, LongModifier.class, "LongModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getLongModifier_Value(), theEcorePackage.getELong(), "value", null, 0, 1, LongModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLongModifier_OriginalValue(), theEcorePackage.getELong(), "originalValue", null, 0, 1, LongModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(stemTimeModifierEClass, STEMTimeModifier.class, "STEMTimeModifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSTEMTimeModifier_Value(), theModelPackage.getSTEMTime(), null, "value", null, 0, 1, STEMTimeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSTEMTimeModifier_OriginalValue(), theModelPackage.getSTEMTime(), null, "originalValue", null, 0, 1, STEMTimeModifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ModifierPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/NOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/NOPModifierImpl.java
new file mode 100644
index 0000000..452d2ff
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/NOPModifierImpl.java
@@ -0,0 +1,69 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.NOPModifier;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class NOPModifierImpl extends FeatureModifierImpl implements
+		NOPModifier {
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#reset()
+	 */
+	public void reset() {
+		// Nothing to do		
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#isComplete()
+	 */
+	@Override
+	public boolean isComplete() {
+		return true;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature(org.eclipse.emf.ecore.EObject)
+	 */
+	@Override
+	public void updateFeature() {
+		// do nothing
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.NOP_MODIFIER;
+	}
+
+} // NOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/RangeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/RangeModifierImpl.java
new file mode 100644
index 0000000..03471f8
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/RangeModifierImpl.java
@@ -0,0 +1,73 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.RangeModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class RangeModifierImpl extends FeatureModifierImpl implements RangeModifier {
+	
+
+	/**
+	 * If <code>true</code> then the modifier has completed
+	 * @see DoubleRangeModifierImpl#getNextValue()
+	 */
+	protected boolean complete = false;
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RangeModifierImpl() {
+		super();
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#isComplete()
+	 */
+	@Override
+	public boolean isComplete() {
+		return complete;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		complete = false;		
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.RANGE_MODIFIER;
+	}
+
+} //RangeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeModifierImpl.java
new file mode 100644
index 0000000..23482ca
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeModifierImpl.java
@@ -0,0 +1,254 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>STEM Time Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class STEMTimeModifierImpl extends SingleValueModifierImpl implements STEMTimeModifier {
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime value;
+
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime originalValue;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STEM_TIME_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getValue() {
+		if (value != null && value.eIsProxy()) {
+			InternalEObject oldValue = (InternalEObject)value;
+			value = (STEMTime)eResolveProxy(oldValue);
+			if (value != oldValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.STEM_TIME_MODIFIER__VALUE, oldValue, value));
+			}
+		}
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(STEMTime newValue) {
+		STEMTime oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_MODIFIER__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getOriginalValue() {
+		if (originalValue != null && originalValue.eIsProxy()) {
+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;
+			originalValue = (STEMTime)eResolveProxy(oldOriginalValue);
+			if (originalValue != oldOriginalValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+			}
+		}
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(STEMTime newOriginalValue) {
+		STEMTime oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_MODIFIER__VALUE:
+				if (resolve) return getValue();
+				return basicGetValue();
+			case ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE:
+				if (resolve) return getOriginalValue();
+				return basicGetOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_MODIFIER__VALUE:
+				setValue((STEMTime)newValue);
+				return;
+			case ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((STEMTime)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_MODIFIER__VALUE:
+				setValue((STEMTime)null);
+				return;
+			case ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((STEMTime)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	@SuppressWarnings("boxing")
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((STEMTime)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getValue());
+		complete = true;
+	} // updateFeature
+
+	
+	/**
+	 *reset
+	 */
+	@Override
+	public void reset() {
+		complete = false;
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	private boolean complete = false;
+	/**
+	 * isComplete
+	 */
+	@Override
+	public boolean isComplete() {
+		return complete;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_MODIFIER__VALUE:
+				return value != null;
+			case ModifierPackage.STEM_TIME_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //STEMTimeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeNOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeNOPModifierImpl.java
new file mode 100644
index 0000000..2664bd4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeNOPModifierImpl.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeNOPModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>STEM Time NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class STEMTimeNOPModifierImpl extends NOPModifierImpl implements STEMTimeNOPModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeNOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STEM_TIME_NOP_MODIFIER;
+	}
+
+} // STEMTimeNOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeRangeModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeRangeModifierImpl.java
new file mode 100644
index 0000000..bf3143c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeRangeModifierImpl.java
@@ -0,0 +1,444 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>STEM Time Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl#getStartValue <em>Start Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl#getEndValue <em>End Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl#getIncrement <em>Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeRangeModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class STEMTimeRangeModifierImpl extends RangeModifierImpl implements
+		STEMTimeRangeModifier {
+	/**
+	 * The cached value of the '{@link #getStartValue() <em>Start Value</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getStartValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime startValue;
+	/**
+	 * The cached value of the '{@link #getEndValue() <em>End Value</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEndValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime endValue;
+	/**
+	 * The default value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long INCREMENT_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getIncrement() <em>Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected long increment = INCREMENT_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime nextValue;
+
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime originalValue;
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 */
+	protected STEMTimeRangeModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STEM_TIME_RANGE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getStartValue() {
+		if (startValue != null && startValue.eIsProxy()) {
+			InternalEObject oldStartValue = (InternalEObject)startValue;
+			startValue = (STEMTime)eResolveProxy(oldStartValue);
+			if (startValue != oldStartValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE, oldStartValue, startValue));
+			}
+		}
+		return startValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetStartValue() {
+		return startValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartValue(STEMTime newStartValue) {
+		STEMTime oldStartValue = startValue;
+		startValue = newStartValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE, oldStartValue, startValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getEndValue() {
+		if (endValue != null && endValue.eIsProxy()) {
+			InternalEObject oldEndValue = (InternalEObject)endValue;
+			endValue = (STEMTime)eResolveProxy(oldEndValue);
+			if (endValue != oldEndValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE, oldEndValue, endValue));
+			}
+		}
+		return endValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetEndValue() {
+		return endValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndValue(STEMTime newEndValue) {
+		STEMTime oldEndValue = endValue;
+		endValue = newEndValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE, oldEndValue, endValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getIncrement() {
+		return increment;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncrement(long newIncrement) {
+		long oldIncrement = increment;
+		increment = newIncrement;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT, oldIncrement, increment));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE:
+				if (resolve) return getStartValue();
+				return basicGetStartValue();
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE:
+				if (resolve) return getEndValue();
+				return basicGetEndValue();
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT:
+				return getIncrement();
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE:
+				if (resolve) return getNextValue();
+				return basicGetNextValue();
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE:
+				if (resolve) return getOriginalValue();
+				return basicGetOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE:
+				setStartValue((STEMTime)newValue);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE:
+				setEndValue((STEMTime)newValue);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT:
+				setIncrement((Long)newValue);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue((STEMTime)newValue);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((STEMTime)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE:
+				setStartValue((STEMTime)null);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE:
+				setEndValue((STEMTime)null);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT:
+				setIncrement(INCREMENT_EDEFAULT);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE:
+				setNextValue((STEMTime)null);
+				return;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue((STEMTime)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__START_VALUE:
+				return startValue != null;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__END_VALUE:
+				return endValue != null;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT:
+				return increment != INCREMENT_EDEFAULT;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE:
+				return nextValue != null;
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE:
+				return originalValue != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (increment: "); //$NON-NLS-1$
+		result.append(increment);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public STEMTime getNextValue() {
+		// Unset?
+		if (!eIsSet(ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE)) {
+			// Yes
+			nextValue = startValue;
+		} // if
+
+		final STEMTime retValue = nextValue;
+		complete = retValue.equals(endValue);
+
+		// Still incrementing?
+		if (!complete) {
+			// Yes
+			final STEMTime temp = ((STEMTime) EcoreUtil.copy(retValue))
+					.addIncrement(increment);
+			// Would the new currentValue be equal or "past" the endValue?
+			if (temp.getTime().before(endValue.getTime())) {
+				// No
+				nextValue = temp;
+			} // if
+			else {
+				// Yes
+				nextValue = endValue;
+			} // else
+		} // if
+		currentValueText = retValue.toString();
+		return retValue;
+
+	} // getNextValue
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetNextValue() {
+		return nextValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(STEMTime newNextValue) {
+		STEMTime oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE, oldNextValue, nextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getOriginalValue() {
+		if (originalValue != null && originalValue.eIsProxy()) {
+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;
+			originalValue = (STEMTime)eResolveProxy(oldOriginalValue);
+			if (originalValue != oldOriginalValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+			}
+		}
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(STEMTime newOriginalValue) {
+		STEMTime oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.STEM_TIME_RANGE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		// Original value captured yet?
+		if (!eIsSet(ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE)) {
+			// No
+			setOriginalValue((STEMTime)target.eGet(getEStructuralFeature()));
+		} // if
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.RangeModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		eUnset(ModifierPackage.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE);
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		assert retValue;
+
+		retValue = retValue
+				&& !((endValue).getTime().before((startValue).getTime()));
+		assert retValue;
+
+		retValue = retValue && increment > 0;
+		assert retValue;
+
+		return retValue;
+	} // sane
+
+} // STEMTimeRangeModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeSequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeSequenceModifierImpl.java
new file mode 100644
index 0000000..1d50b4e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/STEMTimeSequenceModifierImpl.java
@@ -0,0 +1,178 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>STEM Time Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.STEMTimeSequenceModifierImpl#getSequence <em>Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class STEMTimeSequenceModifierImpl extends SequenceModifierImpl implements STEMTimeSequenceModifier {
+	/**
+	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<STEMTime> sequence;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeSequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STEM_TIME_SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<STEMTime> getSequence() {
+		if (sequence == null) {
+			sequence = new EObjectResolvingEList<STEMTime>(STEMTime.class, this, ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE);
+		}
+		return sequence;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue()
+	 */
+	@Override
+	public Object getNextValue() {
+		int index = getCurrentSequenceIndex();
+		final Object retValue = getSequence().get(index++);
+		setCurrentSequenceIndex(index);		
+		currentValueText = retValue.toString();
+		return retValue;
+	} // getNextValue
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize()
+	 */
+	@Override
+	public int getSequenceSize() {
+		return getSequence().size();
+	} // getSequenceSize
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		super.updateFeature();
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE:
+				return getSequence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				getSequence().addAll((Collection<? extends STEMTime>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE:
+				return sequence != null && !sequence.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //STEMTimeSequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SequenceModifierImpl.java
new file mode 100644
index 0000000..fd0dfb6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SequenceModifierImpl.java
@@ -0,0 +1,309 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize <em>Sequence Size</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getCurrentSequenceIndex <em>Current Sequence Index</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getOriginalValue <em>Original Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SequenceModifierImpl extends FeatureModifierImpl implements SequenceModifier {
+	/**
+	 * The default value of the '{@link #getSequenceSize() <em>Sequence Size</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequenceSize()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int SEQUENCE_SIZE_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getCurrentSequenceIndex() <em>Current Sequence Index</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentSequenceIndex()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int CURRENT_SEQUENCE_INDEX_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getCurrentSequenceIndex() <em>Current Sequence Index</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCurrentSequenceIndex()
+	 * @generated
+	 * @ordered
+	 */
+	protected int currentSequenceIndex = CURRENT_SEQUENCE_INDEX_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNextValue() <em>Next Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Object NEXT_VALUE_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Object ORIGINAL_VALUE_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected Object originalValue = ORIGINAL_VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getSequenceSize() {
+		// TODO: implement this method to return the 'Sequence Size' attribute
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getCurrentSequenceIndex() {
+		return currentSequenceIndex;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentSequenceIndex(int newCurrentSequenceIndex) {
+		int oldCurrentSequenceIndex = currentSequenceIndex;
+		currentSequenceIndex = newCurrentSequenceIndex;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX, oldCurrentSequenceIndex, currentSequenceIndex));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	abstract public Object getNextValue();
+		
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetNextValue() {
+		// TODO: implement this method to return whether the 'Next Value' attribute is set
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(Object newOriginalValue) {
+		Object oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#isComplete()
+	 */
+	@Override
+	public boolean isComplete() {
+		return getCurrentSequenceIndex() >= getSequenceSize();
+	} // isComplete
+
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		setCurrentSequenceIndex(CURRENT_SEQUENCE_INDEX_EDEFAULT);		
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		// Capture the original value?
+		if (getCurrentSequenceIndex() == CURRENT_SEQUENCE_INDEX_EDEFAULT) {
+			// Yes
+			setOriginalValue(target.eGet(getEStructuralFeature()));
+		} // if
+	} // updateFeature
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.SEQUENCE_MODIFIER__SEQUENCE_SIZE:
+				return getSequenceSize();
+			case ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX:
+				return getCurrentSequenceIndex();
+			case ModifierPackage.SEQUENCE_MODIFIER__NEXT_VALUE:
+				return getNextValue();
+			case ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE:
+				return getOriginalValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX:
+				setCurrentSequenceIndex((Integer)newValue);
+				return;
+			case ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX:
+				setCurrentSequenceIndex(CURRENT_SEQUENCE_INDEX_EDEFAULT);
+				return;
+			case ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE:
+				setOriginalValue(ORIGINAL_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.SEQUENCE_MODIFIER__SEQUENCE_SIZE:
+				return getSequenceSize() != SEQUENCE_SIZE_EDEFAULT;
+			case ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX:
+				return currentSequenceIndex != CURRENT_SEQUENCE_INDEX_EDEFAULT;
+			case ModifierPackage.SEQUENCE_MODIFIER__NEXT_VALUE:
+				return isSetNextValue();
+			case ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE:
+				return ORIGINAL_VALUE_EDEFAULT == null ? originalValue != null : !ORIGINAL_VALUE_EDEFAULT.equals(originalValue);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (currentSequenceIndex: "); //$NON-NLS-1$
+		result.append(currentSequenceIndex);
+		result.append(", originalValue: "); //$NON-NLS-1$
+		result.append(originalValue);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SingleValueModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SingleValueModifierImpl.java
new file mode 100644
index 0000000..e5e6625
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/SingleValueModifierImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.SingleValueModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Single Value Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SingleValueModifierImpl extends FeatureModifierImpl implements SingleValueModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SingleValueModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.SINGLE_VALUE_MODIFIER;
+	}
+
+} //SingleValueModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringNOPModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringNOPModifierImpl.java
new file mode 100644
index 0000000..43f70b0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringNOPModifierImpl.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.StringNOPModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class StringNOPModifierImpl extends NOPModifierImpl implements StringNOPModifier {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringNOPModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STRING_NOP_MODIFIER;
+	}
+
+} //StringNOPModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringSequenceModifierImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringSequenceModifierImpl.java
new file mode 100644
index 0000000..d8200fa
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/impl/StringSequenceModifierImpl.java
@@ -0,0 +1,193 @@
+package org.eclipse.stem.core.modifier.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.impl.StringSequenceModifierImpl#getSequence <em>Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StringSequenceModifierImpl extends SequenceModifierImpl implements StringSequenceModifier {
+	/**
+	 * The cached value of the '{@link #getSequence() <em>Sequence</em>}' attribute list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSequence()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<String> sequence;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringSequenceModifierImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ModifierPackage.Literals.STRING_SEQUENCE_MODIFIER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<String> getSequence() {
+		if (sequence == null) {
+			sequence = new EDataTypeUniqueEList<String>(String.class, this, ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE);
+		}
+		return sequence;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getNextValue()
+	 */
+	@Override
+	public Object getNextValue() {
+		int index = getCurrentSequenceIndex();
+		final Object retValue = getSequence().get(index++);
+		setCurrentSequenceIndex(index);	
+		currentValueText = retValue.toString();
+		return retValue;
+	} // getNextValue
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.SequenceModifierImpl#getSequenceSize()
+	 */
+	@Override
+	public int getSequenceSize() {
+		return getSequence().size();
+	} // getSequenceSize
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#updateFeature()
+	 */
+	@Override
+	public void updateFeature() {
+		super.updateFeature();
+		target.eSet(getEStructuralFeature(), getNextValue());
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.impl.FeatureModifierImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		target.eSet(getEStructuralFeature(), getOriginalValue());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE:
+				return getSequence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				getSequence().addAll((Collection<? extends String>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE:
+				getSequence().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE:
+				return sequence != null && !sequence.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sequence: "); //$NON-NLS-1$
+		result.append(sequence);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StringSequenceModifierImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleModifierItemProvider.java
new file mode 100644
index 0000000..107c73f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleModifierItemProvider.java
@@ -0,0 +1,176 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.DoubleModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.DoubleModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DoubleModifierItemProvider
+	extends SingleValueModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleModifier_value_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleModifier_value_feature", "_UI_DoubleModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_MODIFIER__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleModifier_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleModifier_originalValue_feature", "_UI_DoubleModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_MODIFIER__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns DoubleModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/DoubleModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DoubleModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DoubleModifier_type") : //$NON-NLS-1$
+			getString("_UI_DoubleModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DoubleModifier.class)) {
+			case ModifierPackage.DOUBLE_MODIFIER__VALUE:
+			case ModifierPackage.DOUBLE_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleNOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleNOPModifierItemProvider.java
new file mode 100644
index 0000000..db4fc5e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleNOPModifierItemProvider.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.DoubleNOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.DoubleNOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DoubleNOPModifierItemProvider
+	extends NOPModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleNOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DoubleNOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DoubleNOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_DoubleNOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleRangeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleRangeModifierItemProvider.java
new file mode 100644
index 0000000..a884088
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleRangeModifierItemProvider.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.DoubleRangeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DoubleRangeModifierItemProvider
+	extends RangeModifierItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleRangeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addStartValuePropertyDescriptor(object);
+			addEndValuePropertyDescriptor(object);
+			addIncrementPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+
+	/**
+	 * This adds a property descriptor for the Start Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleRangeModifier_startValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleRangeModifier_startValue_feature", "_UI_DoubleRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_RANGE_MODIFIER__START_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the End Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEndValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleRangeModifier_endValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleRangeModifier_endValue_feature", "_UI_DoubleRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_RANGE_MODIFIER__END_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleRangeModifier_increment_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleRangeModifier_increment_feature", "_UI_DoubleRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_RANGE_MODIFIER__INCREMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final DoubleRangeModifier rm = (DoubleRangeModifier)object;
+		final StringBuilder sb = new StringBuilder(rm.getFeatureName());
+		sb.append(": ");
+		sb.append(rm.getStartValue());
+		sb.append(" to ");
+		sb.append(rm.getEndValue());
+		sb.append(" by ");
+		sb.append(rm.getIncrement());
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTextGen(Object object) {
+		String label = ((DoubleRangeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DoubleRangeModifier_type") : //$NON-NLS-1$
+			getString("_UI_DoubleRangeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DoubleRangeModifier.class)) {
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__START_VALUE:
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__END_VALUE:
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__INCREMENT:
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__NEXT_VALUE:
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleSequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleSequenceModifierItemProvider.java
new file mode 100644
index 0000000..034585a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/DoubleSequenceModifierItemProvider.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.DoubleSequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DoubleSequenceModifierItemProvider
+	extends SequenceModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleSequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DoubleSequenceModifier_sequence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DoubleSequenceModifier_sequence_feature", "_UI_DoubleSequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DoubleSequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DoubleSequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_DoubleSequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DoubleSequenceModifier.class)) {
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER__SEQUENCE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/FeatureModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/FeatureModifierItemProvider.java
new file mode 100644
index 0000000..d37a5fb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/FeatureModifierItemProvider.java
@@ -0,0 +1,178 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.FeatureModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FeatureModifierItemProvider
+	extends ItemProviderAdapter
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FeatureModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addFeatureNamePropertyDescriptor(object);
+			addCompletePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Complete feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCompletePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_FeatureModifier_complete_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_FeatureModifier_complete_feature", "_UI_FeatureModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.FEATURE_MODIFIER__COMPLETE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Feature Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFeatureNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_FeatureModifier_featureName_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_FeatureModifier_featureName_feature", "_UI_FeatureModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.FEATURE_MODIFIER__FEATURE_NAME,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((FeatureModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_FeatureModifier_type") : //$NON-NLS-1$
+			getString("_UI_FeatureModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(FeatureModifier.class)) {
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_NAME:
+			case ModifierPackage.FEATURE_MODIFIER__FEATURE_ID:
+			case ModifierPackage.FEATURE_MODIFIER__CURRENT_VALUE_TEXT:
+			case ModifierPackage.FEATURE_MODIFIER__COMPLETE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerModifierItemProvider.java
new file mode 100644
index 0000000..d37aebf
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerModifierItemProvider.java
@@ -0,0 +1,176 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.IntegerModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.IntegerModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IntegerModifierItemProvider
+	extends SingleValueModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerModifier_value_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerModifier_value_feature", "_UI_IntegerModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_MODIFIER__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerModifier_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerModifier_originalValue_feature", "_UI_IntegerModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_MODIFIER__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns IntegerModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/IntegerModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((IntegerModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IntegerModifier_type") : //$NON-NLS-1$
+			getString("_UI_IntegerModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(IntegerModifier.class)) {
+			case ModifierPackage.INTEGER_MODIFIER__VALUE:
+			case ModifierPackage.INTEGER_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerNOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerNOPModifierItemProvider.java
new file mode 100644
index 0000000..c6b1c2c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerNOPModifierItemProvider.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.IntegerNOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IntegerNOPModifierItemProvider
+	extends NOPModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerNOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((IntegerNOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IntegerNOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_IntegerNOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerRangeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerRangeModifierItemProvider.java
new file mode 100644
index 0000000..2679f5e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerRangeModifierItemProvider.java
@@ -0,0 +1,226 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.IntegerRangeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IntegerRangeModifierItemProvider
+	extends RangeModifierItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerRangeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+//	/**
+//	 * This returns the property descriptors for the adapted class.
+//	 * <!-- begin-user-doc -->
+//	 * <!-- end-user-doc -->
+//	 * @generated
+//	 */
+//	@Override
+//	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+//		if (itemPropertyDescriptors == null) {
+//			super.getPropertyDescriptors(object);
+//
+//			addStartValuePropertyDescriptor(object);
+//			addEndValuePropertyDescriptor(object);
+//			addIncrementPropertyDescriptor(object);
+//			addNextValuePropertyDescriptor(object);
+//		}
+//		return itemPropertyDescriptors;
+//	}
+	
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addStartValuePropertyDescriptor(object);
+			addEndValuePropertyDescriptor(object);
+			addIncrementPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+
+	/**
+	 * This adds a property descriptor for the Start Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerRangeModifier_startValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerRangeModifier_startValue_feature", "_UI_IntegerRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_RANGE_MODIFIER__START_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the End Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEndValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerRangeModifier_endValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerRangeModifier_endValue_feature", "_UI_IntegerRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_RANGE_MODIFIER__END_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerRangeModifier_increment_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerRangeModifier_increment_feature", "_UI_IntegerRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_RANGE_MODIFIER__INCREMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final IntegerRangeModifier rm = (IntegerRangeModifier)object;
+		final StringBuilder sb = new StringBuilder(rm.getFeatureName());
+		sb.append(": ");
+		sb.append(rm.getStartValue());
+		sb.append(" to ");
+		sb.append(rm.getEndValue());
+		sb.append(" by ");
+		sb.append(rm.getIncrement());
+		return sb.toString();
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTextGen(Object object) {
+		String label = ((IntegerRangeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IntegerRangeModifier_type") : //$NON-NLS-1$
+			getString("_UI_IntegerRangeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(IntegerRangeModifier.class)) {
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__START_VALUE:
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__END_VALUE:
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__INCREMENT:
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__NEXT_VALUE:
+			case ModifierPackage.INTEGER_RANGE_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerSequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerSequenceModifierItemProvider.java
new file mode 100644
index 0000000..3987430
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/IntegerSequenceModifierItemProvider.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.IntegerSequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IntegerSequenceModifierItemProvider
+	extends SequenceModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerSequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_IntegerSequenceModifier_sequence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_IntegerSequenceModifier_sequence_feature", "_UI_IntegerSequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.INTEGER_SEQUENCE_MODIFIER__SEQUENCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((IntegerSequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IntegerSequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_IntegerSequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(IntegerSequenceModifier.class)) {
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER__SEQUENCE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongModifierItemProvider.java
new file mode 100644
index 0000000..83f7d30
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongModifierItemProvider.java
@@ -0,0 +1,176 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.LongModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.LongModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LongModifierItemProvider
+	extends SingleValueModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongModifier_value_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongModifier_value_feature", "_UI_LongModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_MODIFIER__VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongModifier_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongModifier_originalValue_feature", "_UI_LongModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_MODIFIER__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns LongModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/LongModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((LongModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_LongModifier_type") : //$NON-NLS-1$
+			getString("_UI_LongModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(LongModifier.class)) {
+			case ModifierPackage.LONG_MODIFIER__VALUE:
+			case ModifierPackage.LONG_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongNOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongNOPModifierItemProvider.java
new file mode 100644
index 0000000..258df30
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongNOPModifierItemProvider.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.LongNOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.LongNOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LongNOPModifierItemProvider
+	extends NOPModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongNOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((LongNOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_LongNOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_LongNOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongRangeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongRangeModifierItemProvider.java
new file mode 100644
index 0000000..df07837
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongRangeModifierItemProvider.java
@@ -0,0 +1,226 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.LongRangeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LongRangeModifierItemProvider
+	extends RangeModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongRangeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+//	/**
+//	 * This returns the property descriptors for the adapted class.
+//	 * <!-- begin-user-doc -->
+//	 * <!-- end-user-doc -->
+//	 * @generated
+//	 */
+//	@Override
+//	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+//		if (itemPropertyDescriptors == null) {
+//			super.getPropertyDescriptors(object);
+//
+//			addStartValuePropertyDescriptor(object);
+//			addEndValuePropertyDescriptor(object);
+//			addIncrementPropertyDescriptor(object);
+//			addNextValuePropertyDescriptor(object);
+//		}
+//		return itemPropertyDescriptors;
+//	}
+	
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addStartValuePropertyDescriptor(object);
+			addEndValuePropertyDescriptor(object);
+			addIncrementPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Start Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongRangeModifier_startValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongRangeModifier_startValue_feature", "_UI_LongRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_RANGE_MODIFIER__START_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the End Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEndValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongRangeModifier_endValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongRangeModifier_endValue_feature", "_UI_LongRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_RANGE_MODIFIER__END_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongRangeModifier_increment_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongRangeModifier_increment_feature", "_UI_LongRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_RANGE_MODIFIER__INCREMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final LongRangeModifier rm = (LongRangeModifier)object;
+		final StringBuilder sb = new StringBuilder(rm.getFeatureName());
+		sb.append(": ");
+		sb.append(rm.getStartValue());
+		sb.append(" to ");
+		sb.append(rm.getEndValue());
+		sb.append(" by ");
+		sb.append(rm.getIncrement());
+		return sb.toString();
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTextGen(Object object) {
+		String label = ((LongRangeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_LongRangeModifier_type") : //$NON-NLS-1$
+			getString("_UI_LongRangeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(LongRangeModifier.class)) {
+			case ModifierPackage.LONG_RANGE_MODIFIER__START_VALUE:
+			case ModifierPackage.LONG_RANGE_MODIFIER__END_VALUE:
+			case ModifierPackage.LONG_RANGE_MODIFIER__INCREMENT:
+			case ModifierPackage.LONG_RANGE_MODIFIER__NEXT_VALUE:
+			case ModifierPackage.LONG_RANGE_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongSequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongSequenceModifierItemProvider.java
new file mode 100644
index 0000000..5fa4777
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/LongSequenceModifierItemProvider.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.LongSequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LongSequenceModifierItemProvider
+	extends SequenceModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongSequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LongSequenceModifier_sequence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LongSequenceModifier_sequence_feature", "_UI_LongSequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.LONG_SEQUENCE_MODIFIER__SEQUENCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((LongSequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_LongSequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_LongSequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(LongSequenceModifier.class)) {
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER__SEQUENCE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProvider.java
new file mode 100644
index 0000000..aa88fcd
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProvider.java
@@ -0,0 +1,231 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.model.provider.DecoratorItemProvider;
+//import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.core.modifier.Modifier} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ModifierItemProvider extends DecoratorItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTargetURIPropertyDescriptor(object);
+			addCompletePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Target URI feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTargetURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Modifier_targetURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Modifier_targetURI_feature", "_UI_Modifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.MODIFIER__TARGET_URI,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Complete feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addCompletePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Modifier_complete_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Modifier_complete_feature", "_UI_Modifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.MODIFIER__COMPLETE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(
+			Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ModifierPackage.Literals.MODIFIER__FEATURE_MODIFIERS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Modifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Modifier"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated  NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final String title = ((Modifier)object).getDublinCore().getTitle();
+		return "Modifier \"" + (title != null ? title : "") + "\"";
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Modifier)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Modifier_type") : //$NON-NLS-1$
+			getString("_UI_Modifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Modifier.class)) {
+			case ModifierPackage.MODIFIER__COMPLETE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case ModifierPackage.MODIFIER__FEATURE_MODIFIERS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s
+	 * describing the children that can be created under this object. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(
+			Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProviderAdapterFactory.java
new file mode 100644
index 0000000..84a85ea
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/ModifierItemProviderAdapterFactory.java
@@ -0,0 +1,663 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.util.ModifierAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModifierItemProviderAdapterFactory extends ModifierAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.DoubleNOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleNOPModifierItemProvider doubleNOPModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.DoubleNOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDoubleNOPModifierAdapter() {
+		if (doubleNOPModifierItemProvider == null) {
+			doubleNOPModifierItemProvider = new DoubleNOPModifierItemProvider(this);
+		}
+
+		return doubleNOPModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.DoubleRangeModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleRangeModifierItemProvider doubleRangeModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.DoubleRangeModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDoubleRangeModifierAdapter() {
+		if (doubleRangeModifierItemProvider == null) {
+			doubleRangeModifierItemProvider = new DoubleRangeModifierItemProvider(this);
+		}
+
+		return doubleRangeModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.DoubleSequenceModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleSequenceModifierItemProvider doubleSequenceModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.DoubleSequenceModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDoubleSequenceModifierAdapter() {
+		if (doubleSequenceModifierItemProvider == null) {
+			doubleSequenceModifierItemProvider = new DoubleSequenceModifierItemProvider(this);
+		}
+
+		return doubleSequenceModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.IntegerNOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerNOPModifierItemProvider integerNOPModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.IntegerNOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIntegerNOPModifierAdapter() {
+		if (integerNOPModifierItemProvider == null) {
+			integerNOPModifierItemProvider = new IntegerNOPModifierItemProvider(this);
+		}
+
+		return integerNOPModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.IntegerRangeModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerRangeModifierItemProvider integerRangeModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.IntegerRangeModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIntegerRangeModifierAdapter() {
+		if (integerRangeModifierItemProvider == null) {
+			integerRangeModifierItemProvider = new IntegerRangeModifierItemProvider(this);
+		}
+
+		return integerRangeModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.IntegerSequenceModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerSequenceModifierItemProvider integerSequenceModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.IntegerSequenceModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIntegerSequenceModifierAdapter() {
+		if (integerSequenceModifierItemProvider == null) {
+			integerSequenceModifierItemProvider = new IntegerSequenceModifierItemProvider(this);
+		}
+
+		return integerSequenceModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.LongNOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongNOPModifierItemProvider longNOPModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.LongNOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createLongNOPModifierAdapter() {
+		if (longNOPModifierItemProvider == null) {
+			longNOPModifierItemProvider = new LongNOPModifierItemProvider(this);
+		}
+
+		return longNOPModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.LongRangeModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongRangeModifierItemProvider longRangeModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.LongRangeModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createLongRangeModifierAdapter() {
+		if (longRangeModifierItemProvider == null) {
+			longRangeModifierItemProvider = new LongRangeModifierItemProvider(this);
+		}
+
+		return longRangeModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.LongSequenceModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongSequenceModifierItemProvider longSequenceModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.LongSequenceModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createLongSequenceModifierAdapter() {
+		if (longSequenceModifierItemProvider == null) {
+			longSequenceModifierItemProvider = new LongSequenceModifierItemProvider(this);
+		}
+
+		return longSequenceModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.Modifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModifierItemProvider modifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.Modifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createModifierAdapter() {
+		if (modifierItemProvider == null) {
+			modifierItemProvider = new ModifierItemProvider(this);
+		}
+
+		return modifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.NOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NOPModifierItemProvider nopModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.NOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createNOPModifierAdapter() {
+		if (nopModifierItemProvider == null) {
+			nopModifierItemProvider = new NOPModifierItemProvider(this);
+		}
+
+		return nopModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeNOPModifierItemProvider stemTimeNOPModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSTEMTimeNOPModifierAdapter() {
+		if (stemTimeNOPModifierItemProvider == null) {
+			stemTimeNOPModifierItemProvider = new STEMTimeNOPModifierItemProvider(this);
+		}
+
+		return stemTimeNOPModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeRangeModifierItemProvider stemTimeRangeModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSTEMTimeRangeModifierAdapter() {
+		if (stemTimeRangeModifierItemProvider == null) {
+			stemTimeRangeModifierItemProvider = new STEMTimeRangeModifierItemProvider(this);
+		}
+
+		return stemTimeRangeModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeSequenceModifierItemProvider stemTimeSequenceModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSTEMTimeSequenceModifierAdapter() {
+		if (stemTimeSequenceModifierItemProvider == null) {
+			stemTimeSequenceModifierItemProvider = new STEMTimeSequenceModifierItemProvider(this);
+		}
+
+		return stemTimeSequenceModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.StringNOPModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringNOPModifierItemProvider stringNOPModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.StringNOPModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStringNOPModifierAdapter() {
+		if (stringNOPModifierItemProvider == null) {
+			stringNOPModifierItemProvider = new StringNOPModifierItemProvider(this);
+		}
+
+		return stringNOPModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.StringSequenceModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StringSequenceModifierItemProvider stringSequenceModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.StringSequenceModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStringSequenceModifierAdapter() {
+		if (stringSequenceModifierItemProvider == null) {
+			stringSequenceModifierItemProvider = new StringSequenceModifierItemProvider(this);
+		}
+
+		return stringSequenceModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.DoubleModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DoubleModifierItemProvider doubleModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.DoubleModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDoubleModifierAdapter() {
+		if (doubleModifierItemProvider == null) {
+			doubleModifierItemProvider = new DoubleModifierItemProvider(this);
+		}
+
+		return doubleModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.IntegerModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IntegerModifierItemProvider integerModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.IntegerModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIntegerModifierAdapter() {
+		if (integerModifierItemProvider == null) {
+			integerModifierItemProvider = new IntegerModifierItemProvider(this);
+		}
+
+		return integerModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.LongModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LongModifierItemProvider longModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.LongModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createLongModifierAdapter() {
+		if (longModifierItemProvider == null) {
+			longModifierItemProvider = new LongModifierItemProvider(this);
+		}
+
+		return longModifierItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.modifier.STEMTimeModifier} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTimeModifierItemProvider stemTimeModifierItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeModifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSTEMTimeModifierAdapter() {
+		if (stemTimeModifierItemProvider == null) {
+			stemTimeModifierItemProvider = new STEMTimeModifierItemProvider(this);
+		}
+
+		return stemTimeModifierItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (doubleNOPModifierItemProvider != null) doubleNOPModifierItemProvider.dispose();
+		if (doubleRangeModifierItemProvider != null) doubleRangeModifierItemProvider.dispose();
+		if (doubleSequenceModifierItemProvider != null) doubleSequenceModifierItemProvider.dispose();
+		if (integerNOPModifierItemProvider != null) integerNOPModifierItemProvider.dispose();
+		if (integerRangeModifierItemProvider != null) integerRangeModifierItemProvider.dispose();
+		if (integerSequenceModifierItemProvider != null) integerSequenceModifierItemProvider.dispose();
+		if (longNOPModifierItemProvider != null) longNOPModifierItemProvider.dispose();
+		if (longRangeModifierItemProvider != null) longRangeModifierItemProvider.dispose();
+		if (longSequenceModifierItemProvider != null) longSequenceModifierItemProvider.dispose();
+		if (modifierItemProvider != null) modifierItemProvider.dispose();
+		if (nopModifierItemProvider != null) nopModifierItemProvider.dispose();
+		if (stemTimeNOPModifierItemProvider != null) stemTimeNOPModifierItemProvider.dispose();
+		if (stemTimeRangeModifierItemProvider != null) stemTimeRangeModifierItemProvider.dispose();
+		if (stemTimeSequenceModifierItemProvider != null) stemTimeSequenceModifierItemProvider.dispose();
+		if (stringNOPModifierItemProvider != null) stringNOPModifierItemProvider.dispose();
+		if (stringSequenceModifierItemProvider != null) stringSequenceModifierItemProvider.dispose();
+		if (doubleModifierItemProvider != null) doubleModifierItemProvider.dispose();
+		if (integerModifierItemProvider != null) integerModifierItemProvider.dispose();
+		if (longModifierItemProvider != null) longModifierItemProvider.dispose();
+		if (stemTimeModifierItemProvider != null) stemTimeModifierItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/NOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/NOPModifierItemProvider.java
new file mode 100644
index 0000000..0ee4a39
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/NOPModifierItemProvider.java
@@ -0,0 +1,117 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.NOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.NOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NOPModifierItemProvider
+	extends FeatureModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns NOPModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/NOPModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((NOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_NOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_NOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/RangeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/RangeModifierItemProvider.java
new file mode 100644
index 0000000..444ad3b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/RangeModifierItemProvider.java
@@ -0,0 +1,116 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.RangeModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.RangeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RangeModifierItemProvider
+	extends FeatureModifierItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RangeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns RangeModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/RangeModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((RangeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_RangeModifier_type") : //$NON-NLS-1$
+			getString("_UI_RangeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeModifierItemProvider.java
new file mode 100644
index 0000000..cac7a2b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeModifierItemProvider.java
@@ -0,0 +1,167 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class STEMTimeModifierItemProvider
+	extends SingleValueModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeModifier_value_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeModifier_value_feature", "_UI_STEMTimeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_MODIFIER__VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeModifier_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeModifier_originalValue_feature", "_UI_STEMTimeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_MODIFIER__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns STEMTimeModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/STEMTimeModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((STEMTimeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_STEMTimeModifier_type") : //$NON-NLS-1$
+			getString("_UI_STEMTimeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeNOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeNOPModifierItemProvider.java
new file mode 100644
index 0000000..079680d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeNOPModifierItemProvider.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.STEMTimeNOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class STEMTimeNOPModifierItemProvider
+	extends NOPModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeNOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((STEMTimeNOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_STEMTimeNOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_STEMTimeNOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeRangeModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeRangeModifierItemProvider.java
new file mode 100644
index 0000000..1130783
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeRangeModifierItemProvider.java
@@ -0,0 +1,245 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class STEMTimeRangeModifierItemProvider
+	extends RangeModifierItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeRangeModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+//	/**
+//	 * This returns the property descriptors for the adapted class.
+//	 * <!-- begin-user-doc -->
+//	 * <!-- end-user-doc -->
+//	 * @generated
+//	 */
+//	@Override
+//	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+//		if (itemPropertyDescriptors == null) {
+//			super.getPropertyDescriptors(object);
+//
+//			addStartValuePropertyDescriptor(object);
+//			addEndValuePropertyDescriptor(object);
+//			addIncrementPropertyDescriptor(object);
+//			addNextValuePropertyDescriptor(object);
+//		}
+//		return itemPropertyDescriptors;
+//	}
+	
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addStartValuePropertyDescriptor(object);
+			addEndValuePropertyDescriptor(object);
+			addIncrementPropertyDescriptor(object);
+			addNextValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+
+	/**
+	 * This adds a property descriptor for the Start Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeRangeModifier_startValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeRangeModifier_startValue_feature", "_UI_STEMTimeRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_RANGE_MODIFIER__START_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the End Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEndValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeRangeModifier_endValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeRangeModifier_endValue_feature", "_UI_STEMTimeRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_RANGE_MODIFIER__END_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeRangeModifier_increment_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeRangeModifier_increment_feature", "_UI_STEMTimeRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_RANGE_MODIFIER__INCREMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Next Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNextValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeRangeModifier_nextValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeRangeModifier_nextValue_feature", "_UI_STEMTimeRangeModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_RANGE_MODIFIER__NEXT_VALUE,
+				 true,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final STEMTimeRangeModifier rm = (STEMTimeRangeModifier)object;
+		final StringBuilder sb = new StringBuilder(rm.getFeatureName());
+		sb.append(": ");
+		sb.append(rm.getStartValue());
+		sb.append(" to ");
+		sb.append(rm.getEndValue());
+		sb.append(" by ");
+		sb.append(rm.getIncrement());
+		return sb.toString();
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTextGen(Object object) {
+		String label = ((STEMTimeRangeModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_STEMTimeRangeModifier_type") : //$NON-NLS-1$
+			getString("_UI_STEMTimeRangeModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(STEMTimeRangeModifier.class)) {
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER__INCREMENT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeSequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeSequenceModifierItemProvider.java
new file mode 100644
index 0000000..aa8b0fa
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/STEMTimeSequenceModifierItemProvider.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class STEMTimeSequenceModifierItemProvider
+	extends SequenceModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeSequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_STEMTimeSequenceModifier_sequence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_STEMTimeSequenceModifier_sequence_feature", "_UI_STEMTimeSequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STEM_TIME_SEQUENCE_MODIFIER__SEQUENCE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((STEMTimeSequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_STEMTimeSequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_STEMTimeSequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SequenceModifierItemProvider.java
new file mode 100644
index 0000000..cfc3451
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SequenceModifierItemProvider.java
@@ -0,0 +1,221 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.SequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequenceModifierItemProvider
+	extends FeatureModifierItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequenceSizePropertyDescriptor(object);
+			addCurrentSequenceIndexPropertyDescriptor(object);
+			addNextValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence Size feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequenceSizePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SequenceModifier_sequenceSize_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SequenceModifier_sequenceSize_feature", "_UI_SequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.SEQUENCE_MODIFIER__SEQUENCE_SIZE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Sequence Index feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentSequenceIndexPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SequenceModifier_currentSequenceIndex_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SequenceModifier_currentSequenceIndex_feature", "_UI_SequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Next Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNextValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SequenceModifier_nextValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SequenceModifier_nextValue_feature", "_UI_SequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.SEQUENCE_MODIFIER__NEXT_VALUE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SequenceModifier_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SequenceModifier_originalValue_feature", "_UI_SequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.SEQUENCE_MODIFIER__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns SequenceModifier.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/SequenceModifier")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_SequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SequenceModifier.class)) {
+			case ModifierPackage.SEQUENCE_MODIFIER__SEQUENCE_SIZE:
+			case ModifierPackage.SEQUENCE_MODIFIER__CURRENT_SEQUENCE_INDEX:
+			case ModifierPackage.SEQUENCE_MODIFIER__NEXT_VALUE:
+			case ModifierPackage.SEQUENCE_MODIFIER__ORIGINAL_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SingleValueModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SingleValueModifierItemProvider.java
new file mode 100644
index 0000000..790a52c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/SingleValueModifierItemProvider.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.modifier.SingleValueModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.SingleValueModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SingleValueModifierItemProvider
+	extends FeatureModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SingleValueModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SingleValueModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SingleValueModifier_type") : //$NON-NLS-1$
+			getString("_UI_SingleValueModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringNOPModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringNOPModifierItemProvider.java
new file mode 100644
index 0000000..894f4a6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringNOPModifierItemProvider.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.modifier.StringNOPModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.StringNOPModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StringNOPModifierItemProvider
+	extends NOPModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringNOPModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StringNOPModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StringNOPModifier_type") : //$NON-NLS-1$
+			getString("_UI_StringNOPModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringSequenceModifierItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringSequenceModifierItemProvider.java
new file mode 100644
index 0000000..a2f45e0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/provider/StringSequenceModifierItemProvider.java
@@ -0,0 +1,138 @@
+package org.eclipse.stem.core.modifier.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.modifier.StringSequenceModifier} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StringSequenceModifierItemProvider
+	extends SequenceModifierItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringSequenceModifierItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSequencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sequence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSequencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StringSequenceModifier_sequence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StringSequenceModifier_sequence_feature", "_UI_StringSequenceModifier_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ModifierPackage.Literals.STRING_SEQUENCE_MODIFIER__SEQUENCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StringSequenceModifier)object).getFeatureName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StringSequenceModifier_type") : //$NON-NLS-1$
+			getString("_UI_StringSequenceModifier_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StringSequenceModifier.class)) {
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER__SEQUENCE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierAdapterFactory.java
new file mode 100644
index 0000000..acb45ba
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierAdapterFactory.java
@@ -0,0 +1,618 @@
+package org.eclipse.stem.core.modifier.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.modifier.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.modifier.ModifierPackage
+ * @generated
+ */
+public class ModifierAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ModifierPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ModifierPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ModifierSwitch<Adapter> modelSwitch =
+		new ModifierSwitch<Adapter>() {
+			@Override
+			public Adapter caseDoubleNOPModifier(DoubleNOPModifier object) {
+				return createDoubleNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseDoubleRangeModifier(DoubleRangeModifier object) {
+				return createDoubleRangeModifierAdapter();
+			}
+			@Override
+			public Adapter caseDoubleSequenceModifier(DoubleSequenceModifier object) {
+				return createDoubleSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseFeatureModifier(FeatureModifier object) {
+				return createFeatureModifierAdapter();
+			}
+			@Override
+			public Adapter caseIntegerNOPModifier(IntegerNOPModifier object) {
+				return createIntegerNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseIntegerRangeModifier(IntegerRangeModifier object) {
+				return createIntegerRangeModifierAdapter();
+			}
+			@Override
+			public Adapter caseIntegerSequenceModifier(IntegerSequenceModifier object) {
+				return createIntegerSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseLongNOPModifier(LongNOPModifier object) {
+				return createLongNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseLongRangeModifier(LongRangeModifier object) {
+				return createLongRangeModifierAdapter();
+			}
+			@Override
+			public Adapter caseLongSequenceModifier(LongSequenceModifier object) {
+				return createLongSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseModifier(Modifier object) {
+				return createModifierAdapter();
+			}
+			@Override
+			public Adapter caseNOPModifier(NOPModifier object) {
+				return createNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseRangeModifier(RangeModifier object) {
+				return createRangeModifierAdapter();
+			}
+			@Override
+			public Adapter caseSTEMTimeNOPModifier(STEMTimeNOPModifier object) {
+				return createSTEMTimeNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseSTEMTimeRangeModifier(STEMTimeRangeModifier object) {
+				return createSTEMTimeRangeModifierAdapter();
+			}
+			@Override
+			public Adapter caseSTEMTimeSequenceModifier(STEMTimeSequenceModifier object) {
+				return createSTEMTimeSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseSequenceModifier(SequenceModifier object) {
+				return createSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseStringNOPModifier(StringNOPModifier object) {
+				return createStringNOPModifierAdapter();
+			}
+			@Override
+			public Adapter caseStringSequenceModifier(StringSequenceModifier object) {
+				return createStringSequenceModifierAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseSingleValueModifier(SingleValueModifier object) {
+				return createSingleValueModifierAdapter();
+			}
+			@Override
+			public Adapter caseDoubleModifier(DoubleModifier object) {
+				return createDoubleModifierAdapter();
+			}
+			@Override
+			public Adapter caseIntegerModifier(IntegerModifier object) {
+				return createIntegerModifierAdapter();
+			}
+			@Override
+			public Adapter caseLongModifier(LongModifier object) {
+				return createLongModifierAdapter();
+			}
+			@Override
+			public Adapter caseSTEMTimeModifier(STEMTimeModifier object) {
+				return createSTEMTimeModifierAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.DoubleNOPModifier <em>Double NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.DoubleNOPModifier
+	 * @generated
+	 */
+	public Adapter createDoubleNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.DoubleRangeModifier <em>Double Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.DoubleRangeModifier
+	 * @generated
+	 */
+	public Adapter createDoubleRangeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.DoubleSequenceModifier <em>Double Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.DoubleSequenceModifier
+	 * @generated
+	 */
+	public Adapter createDoubleSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.FeatureModifier <em>Feature Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier
+	 * @generated
+	 */
+	public Adapter createFeatureModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.IntegerNOPModifier <em>Integer NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.IntegerNOPModifier
+	 * @generated
+	 */
+	public Adapter createIntegerNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.IntegerRangeModifier <em>Integer Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.IntegerRangeModifier
+	 * @generated
+	 */
+	public Adapter createIntegerRangeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.IntegerSequenceModifier <em>Integer Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.IntegerSequenceModifier
+	 * @generated
+	 */
+	public Adapter createIntegerSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.LongNOPModifier <em>Long NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.LongNOPModifier
+	 * @generated
+	 */
+	public Adapter createLongNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.LongRangeModifier <em>Long Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.LongRangeModifier
+	 * @generated
+	 */
+	public Adapter createLongRangeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.LongSequenceModifier <em>Long Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.LongSequenceModifier
+	 * @generated
+	 */
+	public Adapter createLongSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifier <em>Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifier
+	 * @generated
+	 */
+	public Adapter createModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.NOPModifier <em>NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.NOPModifier
+	 * @generated
+	 */
+	public Adapter createNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.RangeModifier <em>Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.RangeModifier
+	 * @generated
+	 */
+	public Adapter createRangeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier <em>STEM Time NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeNOPModifier
+	 * @generated
+	 */
+	public Adapter createSTEMTimeNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.STEMTimeRangeModifier <em>STEM Time Range Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeRangeModifier
+	 * @generated
+	 */
+	public Adapter createSTEMTimeRangeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.STEMTimeSequenceModifier <em>STEM Time Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeSequenceModifier
+	 * @generated
+	 */
+	public Adapter createSTEMTimeSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.SequenceModifier <em>Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier
+	 * @generated
+	 */
+	public Adapter createSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.StringNOPModifier <em>String NOP Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.StringNOPModifier
+	 * @generated
+	 */
+	public Adapter createStringNOPModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.StringSequenceModifier <em>String Sequence Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.StringSequenceModifier
+	 * @generated
+	 */
+	public Adapter createStringSequenceModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.SingleValueModifier <em>Single Value Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.SingleValueModifier
+	 * @generated
+	 */
+	public Adapter createSingleValueModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.DoubleModifier <em>Double Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.DoubleModifier
+	 * @generated
+	 */
+	public Adapter createDoubleModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.IntegerModifier <em>Integer Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.IntegerModifier
+	 * @generated
+	 */
+	public Adapter createIntegerModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.LongModifier <em>Long Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.LongModifier
+	 * @generated
+	 */
+	public Adapter createLongModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.STEMTimeModifier <em>STEM Time Modifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.STEMTimeModifier
+	 * @generated
+	 */
+	public Adapter createSTEMTimeModifierAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ModifierAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierSwitch.java
new file mode 100644
index 0000000..2f2a84d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/modifier/util/ModifierSwitch.java
@@ -0,0 +1,730 @@
+package org.eclipse.stem.core.modifier.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.modifier.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.modifier.ModifierPackage
+ * @generated
+ */
+public class ModifierSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ModifierPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ModifierPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ModifierPackage.DOUBLE_NOP_MODIFIER: {
+				DoubleNOPModifier doubleNOPModifier = (DoubleNOPModifier)theEObject;
+				T1 result = caseDoubleNOPModifier(doubleNOPModifier);
+				if (result == null) result = caseNOPModifier(doubleNOPModifier);
+				if (result == null) result = caseFeatureModifier(doubleNOPModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.DOUBLE_RANGE_MODIFIER: {
+				DoubleRangeModifier doubleRangeModifier = (DoubleRangeModifier)theEObject;
+				T1 result = caseDoubleRangeModifier(doubleRangeModifier);
+				if (result == null) result = caseRangeModifier(doubleRangeModifier);
+				if (result == null) result = caseFeatureModifier(doubleRangeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.DOUBLE_SEQUENCE_MODIFIER: {
+				DoubleSequenceModifier doubleSequenceModifier = (DoubleSequenceModifier)theEObject;
+				T1 result = caseDoubleSequenceModifier(doubleSequenceModifier);
+				if (result == null) result = caseSequenceModifier(doubleSequenceModifier);
+				if (result == null) result = caseFeatureModifier(doubleSequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.FEATURE_MODIFIER: {
+				FeatureModifier featureModifier = (FeatureModifier)theEObject;
+				T1 result = caseFeatureModifier(featureModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.INTEGER_NOP_MODIFIER: {
+				IntegerNOPModifier integerNOPModifier = (IntegerNOPModifier)theEObject;
+				T1 result = caseIntegerNOPModifier(integerNOPModifier);
+				if (result == null) result = caseNOPModifier(integerNOPModifier);
+				if (result == null) result = caseFeatureModifier(integerNOPModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.INTEGER_RANGE_MODIFIER: {
+				IntegerRangeModifier integerRangeModifier = (IntegerRangeModifier)theEObject;
+				T1 result = caseIntegerRangeModifier(integerRangeModifier);
+				if (result == null) result = caseRangeModifier(integerRangeModifier);
+				if (result == null) result = caseFeatureModifier(integerRangeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.INTEGER_SEQUENCE_MODIFIER: {
+				IntegerSequenceModifier integerSequenceModifier = (IntegerSequenceModifier)theEObject;
+				T1 result = caseIntegerSequenceModifier(integerSequenceModifier);
+				if (result == null) result = caseSequenceModifier(integerSequenceModifier);
+				if (result == null) result = caseFeatureModifier(integerSequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.LONG_NOP_MODIFIER: {
+				LongNOPModifier longNOPModifier = (LongNOPModifier)theEObject;
+				T1 result = caseLongNOPModifier(longNOPModifier);
+				if (result == null) result = caseNOPModifier(longNOPModifier);
+				if (result == null) result = caseFeatureModifier(longNOPModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.LONG_RANGE_MODIFIER: {
+				LongRangeModifier longRangeModifier = (LongRangeModifier)theEObject;
+				T1 result = caseLongRangeModifier(longRangeModifier);
+				if (result == null) result = caseRangeModifier(longRangeModifier);
+				if (result == null) result = caseFeatureModifier(longRangeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.LONG_SEQUENCE_MODIFIER: {
+				LongSequenceModifier longSequenceModifier = (LongSequenceModifier)theEObject;
+				T1 result = caseLongSequenceModifier(longSequenceModifier);
+				if (result == null) result = caseSequenceModifier(longSequenceModifier);
+				if (result == null) result = caseFeatureModifier(longSequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.MODIFIER: {
+				Modifier modifier = (Modifier)theEObject;
+				T1 result = caseModifier(modifier);
+				if (result == null) result = caseDecorator(modifier);
+				if (result == null) result = caseIdentifiable(modifier);
+				if (result == null) result = caseComparable(modifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.NOP_MODIFIER: {
+				NOPModifier nopModifier = (NOPModifier)theEObject;
+				T1 result = caseNOPModifier(nopModifier);
+				if (result == null) result = caseFeatureModifier(nopModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.RANGE_MODIFIER: {
+				RangeModifier rangeModifier = (RangeModifier)theEObject;
+				T1 result = caseRangeModifier(rangeModifier);
+				if (result == null) result = caseFeatureModifier(rangeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STEM_TIME_NOP_MODIFIER: {
+				STEMTimeNOPModifier stemTimeNOPModifier = (STEMTimeNOPModifier)theEObject;
+				T1 result = caseSTEMTimeNOPModifier(stemTimeNOPModifier);
+				if (result == null) result = caseNOPModifier(stemTimeNOPModifier);
+				if (result == null) result = caseFeatureModifier(stemTimeNOPModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STEM_TIME_RANGE_MODIFIER: {
+				STEMTimeRangeModifier stemTimeRangeModifier = (STEMTimeRangeModifier)theEObject;
+				T1 result = caseSTEMTimeRangeModifier(stemTimeRangeModifier);
+				if (result == null) result = caseRangeModifier(stemTimeRangeModifier);
+				if (result == null) result = caseFeatureModifier(stemTimeRangeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STEM_TIME_SEQUENCE_MODIFIER: {
+				STEMTimeSequenceModifier stemTimeSequenceModifier = (STEMTimeSequenceModifier)theEObject;
+				T1 result = caseSTEMTimeSequenceModifier(stemTimeSequenceModifier);
+				if (result == null) result = caseSequenceModifier(stemTimeSequenceModifier);
+				if (result == null) result = caseFeatureModifier(stemTimeSequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.SEQUENCE_MODIFIER: {
+				SequenceModifier sequenceModifier = (SequenceModifier)theEObject;
+				T1 result = caseSequenceModifier(sequenceModifier);
+				if (result == null) result = caseFeatureModifier(sequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STRING_NOP_MODIFIER: {
+				StringNOPModifier stringNOPModifier = (StringNOPModifier)theEObject;
+				T1 result = caseStringNOPModifier(stringNOPModifier);
+				if (result == null) result = caseNOPModifier(stringNOPModifier);
+				if (result == null) result = caseFeatureModifier(stringNOPModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STRING_SEQUENCE_MODIFIER: {
+				StringSequenceModifier stringSequenceModifier = (StringSequenceModifier)theEObject;
+				T1 result = caseStringSequenceModifier(stringSequenceModifier);
+				if (result == null) result = caseSequenceModifier(stringSequenceModifier);
+				if (result == null) result = caseFeatureModifier(stringSequenceModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.MODIFIABLE: {
+				Modifiable modifiable = (Modifiable)theEObject;
+				T1 result = caseModifiable(modifiable);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.SINGLE_VALUE_MODIFIER: {
+				SingleValueModifier singleValueModifier = (SingleValueModifier)theEObject;
+				T1 result = caseSingleValueModifier(singleValueModifier);
+				if (result == null) result = caseFeatureModifier(singleValueModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.DOUBLE_MODIFIER: {
+				DoubleModifier doubleModifier = (DoubleModifier)theEObject;
+				T1 result = caseDoubleModifier(doubleModifier);
+				if (result == null) result = caseSingleValueModifier(doubleModifier);
+				if (result == null) result = caseFeatureModifier(doubleModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.INTEGER_MODIFIER: {
+				IntegerModifier integerModifier = (IntegerModifier)theEObject;
+				T1 result = caseIntegerModifier(integerModifier);
+				if (result == null) result = caseSingleValueModifier(integerModifier);
+				if (result == null) result = caseFeatureModifier(integerModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.LONG_MODIFIER: {
+				LongModifier longModifier = (LongModifier)theEObject;
+				T1 result = caseLongModifier(longModifier);
+				if (result == null) result = caseSingleValueModifier(longModifier);
+				if (result == null) result = caseFeatureModifier(longModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ModifierPackage.STEM_TIME_MODIFIER: {
+				STEMTimeModifier stemTimeModifier = (STEMTimeModifier)theEObject;
+				T1 result = caseSTEMTimeModifier(stemTimeModifier);
+				if (result == null) result = caseSingleValueModifier(stemTimeModifier);
+				if (result == null) result = caseFeatureModifier(stemTimeModifier);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Double NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Double NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDoubleNOPModifier(DoubleNOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Double Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Double Range Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDoubleRangeModifier(DoubleRangeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Double Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Double Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDoubleSequenceModifier(DoubleSequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Feature Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Feature Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseFeatureModifier(FeatureModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integer NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integer NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegerNOPModifier(IntegerNOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integer Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integer Range Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegerRangeModifier(IntegerRangeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integer Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integer Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegerSequenceModifier(IntegerSequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Long NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Long NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLongNOPModifier(LongNOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Long Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Long Range Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLongRangeModifier(LongRangeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Long Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Long Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLongSequenceModifier(LongSequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifier(Modifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNOPModifier(NOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Range Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRangeModifier(RangeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>STEM Time NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>STEM Time NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSTEMTimeNOPModifier(STEMTimeNOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>STEM Time Range Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>STEM Time Range Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSTEMTimeRangeModifier(STEMTimeRangeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>STEM Time Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>STEM Time Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSTEMTimeSequenceModifier(STEMTimeSequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSequenceModifier(SequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>String NOP Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>String NOP Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStringNOPModifier(StringNOPModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>String Sequence Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>String Sequence Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStringSequenceModifier(StringSequenceModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Single Value Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Single Value Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSingleValueModifier(SingleValueModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Double Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Double Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDoubleModifier(DoubleModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integer Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integer Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegerModifier(IntegerModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Long Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Long Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLongModifier(LongModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>STEM Time Modifier</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>STEM Time Modifier</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSTEMTimeModifier(STEMTimeModifier object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ModifierSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/AbsoluteTimeTest.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/AbsoluteTimeTest.java
new file mode 100644
index 0000000..f975a78
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/AbsoluteTimeTest.java
@@ -0,0 +1,43 @@
+// AbsoluteTimeTest.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A <code>AbsoluteTimeTest</code> is a {@link TimeTest} that returns a boolean
+ * value depending upon the comparison of the current time value passed to
+ * {@link #evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)}
+ * and the value returned by {@link #getReferenceTime()}.
+ * 
+ * @model
+ */
+public interface AbsoluteTimeTest extends TimeTest {
+	/**
+	 * @return the time value used for comparison purposes.
+	 * @model containment="true"
+	 */
+	STEMTime getTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.AbsoluteTimeTest#getTime <em>Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time</em>' containment reference.
+	 * @see #getTime()
+	 * @generated
+	 */
+	void setTime(STEMTime value);
+
+	
+} // AbsoluteTimeTest
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/And.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/And.java
new file mode 100644
index 0000000..94a2780
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/And.java
@@ -0,0 +1,26 @@
+// And.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * <code>And</code> is a {@link NaryBooleanOperator} whose value is
+ * <code>true</code> only if the values of all of its operands are
+ * <code>true</code>.
+ * 
+ * @see Or
+ * @see Not
+ * @model
+ */
+public interface And extends NaryBooleanOperator {
+	// Nothing
+} // And
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanExpression.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanExpression.java
new file mode 100644
index 0000000..3920be4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanExpression.java
@@ -0,0 +1,25 @@
+// BooleanExpression.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>BooleanExpression</code> is a {@link Predicate} whose value is the
+ * result of evaluating a logical (boolean) expression.
+ * 
+ * @see Test
+ * @see PredicateReference
+ * @model abstract="true"
+ */
+public interface BooleanExpression extends Predicate {
+	// Nothing
+} // BooleanExpression
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanOperator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanOperator.java
new file mode 100644
index 0000000..7694210
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/BooleanOperator.java
@@ -0,0 +1,25 @@
+// BooleanOperator.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>BooleanOperator</code> is a {@link BooleanExpression} whose value is
+ * the result of evaluating a boolean operator.
+ * 
+ * @see UnaryBooleanOperator
+ * @see NaryBooleanOperator
+ * @model abstract="true"
+ */
+public interface BooleanOperator extends BooleanExpression {
+	// Nothing
+} // BooleanOperator
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/ElapsedTimeTest.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/ElapsedTimeTest.java
new file mode 100644
index 0000000..412cff7
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/ElapsedTimeTest.java
@@ -0,0 +1,83 @@
+// ElapsedTimeTest.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A <code>ElapsedTimeTest</code> is a {@link TimeTest} that returns a boolean
+ * value depending upon the difference between the first time value passed to
+ * {@link #evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)}
+ * and subsequent values.
+ * 
+ * @model
+ */
+public interface ElapsedTimeTest extends TimeTest {
+
+	/**
+	 * @return the time value used for comparison purposes.
+	 * @model containment="true"
+	 */
+	STEMTime getReferenceTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getReferenceTime <em>Reference Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Reference Time</em>' containment reference.
+	 * @see #getReferenceTime()
+	 * @generated
+	 */
+	void setReferenceTime(STEMTime value);
+
+	/**
+	 * @return <code>true</code> if the reference time has been set
+	 * @model default="false"
+	 */
+	boolean isReferenceTimeValid();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#isReferenceTimeValid <em>Reference Time Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Reference Time Valid</em>' attribute.
+	 * @see #isReferenceTimeValid()
+	 * @generated
+	 */
+	void setReferenceTimeValid(boolean value);
+
+	/**
+	 * @return the number of milliseconds of elapsed time to be used for
+	 *         comparison between the reference time and the current time.
+	 * @model transient="true" changeable="false"
+	 */
+	long getElapsedMilliseconds();
+
+	/**
+	 * @return the number of days of elapsed time to be used for the comparison
+	 *         between the reference time and the current time.
+	 * @model default="0"
+	 */
+	int getNumberofDays();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getNumberofDays <em>Numberof Days</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Numberof Days</em>' attribute.
+	 * @see #getNumberofDays()
+	 * @generated
+	 */
+	void setNumberofDays(int value);
+
+} // ElapsedTimeTest
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/False.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/False.java
new file mode 100644
index 0000000..5489f4d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/False.java
@@ -0,0 +1,23 @@
+// False.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * <code>False</code> is a {@link Test} whose value is always <code>false</code>.
+ * 
+ * @see True
+ * @model
+ */
+public interface False extends Test {
+	// Nothing
+} // False
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicate.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicate.java
new file mode 100644
index 0000000..f6ee5ae
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicate.java
@@ -0,0 +1,31 @@
+// IdentifiablePredicate.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * A <code>IdentifiablePredicate</code> represents a testable condition that is
+ * Identifiable.
+ * 
+ * @model abstract="true"
+ */
+public interface IdentifiablePredicate extends Identifiable, Predicate {
+	
+	/**
+	 * This is the segment of the type {@link URI} that prefixes all other segments in a
+	 * predicate {@link URI}s.
+	 */
+	String URI_TYPE_PREDICATE_SEGMENT = "predicate";
+} // IdentifiablePredicate
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicateExpression.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicateExpression.java
new file mode 100644
index 0000000..f482b7d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiablePredicateExpression.java
@@ -0,0 +1,24 @@
+// IdentifiablePredicateExpression.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>IdentifiablePredicateExpression</code> is a PredicateExpression that
+ * is Identifiable.
+ * 
+ * @model
+ */
+public interface IdentifiablePredicateExpression extends IdentifiablePredicate,
+		PredicateExpression {
+	// Nothing
+} // IdentifiablePredicateExpression
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiableTest.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiableTest.java
new file mode 100644
index 0000000..70b133a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/IdentifiableTest.java
@@ -0,0 +1,22 @@
+// IdentifiableTest.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>IdentifiableTest<code> is a <code>IdentifiablePredicate</code> represents a testable condition.
+ * 
+ * @model abstract="true"
+ */
+public interface IdentifiableTest extends IdentifiablePredicate, Test {
+	// Nothing
+} // IdentifiableTest
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/NaryBooleanOperator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/NaryBooleanOperator.java
new file mode 100644
index 0000000..82758cc
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/NaryBooleanOperator.java
@@ -0,0 +1,31 @@
+// NaryBooleanOperator.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A <code>NaryBooleanOperator</code> is a {@link BooleanOperator} whose value
+ * is the result of evaluating a boolean operator that takes one or (usually)
+ * more operands.
+ * 
+ * @see UnaryBooleanOperator
+ * @model abstract="true"
+ */
+public interface NaryBooleanOperator extends BooleanOperator {
+	/**
+	 * @return the collection of operands to this operator
+	 * @model type="Predicate" containment="true"
+	 */
+	EList<Predicate> getOperands();
+} // NaryBooleanOperator
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Not.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Not.java
new file mode 100644
index 0000000..f868c6c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Not.java
@@ -0,0 +1,26 @@
+// Not.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * <code>Not</code> is a {@link UnaryBooleanOperator} whose value is
+ * <code>true</code> if the value of its operand is <code>false</code>,
+ * otherwise it is <code>false</code>.
+ * 
+ * @see And
+ * @see Or
+ * @model
+ */
+public interface Not extends UnaryBooleanOperator {
+	// Nothing
+} // Not
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Or.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Or.java
new file mode 100644
index 0000000..462246b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Or.java
@@ -0,0 +1,25 @@
+// Or.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>Or</code> is a {@link NaryBooleanOperator} whose value is
+ * <code>true</code> if any of the values of its operands are <code>true</code>.
+ * 
+ * @see And
+ * @see Not
+ * @model
+ */
+public interface Or extends NaryBooleanOperator {
+	// Nothing
+} // Or
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Predicate.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Predicate.java
new file mode 100644
index 0000000..df53179
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Predicate.java
@@ -0,0 +1,61 @@
+// Predicate.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.trigger.Trigger;
+
+/**
+ * A <code>Predicate</code> represents a testable condition. Instances of
+ * <code>Predicate</code> are referenced by {@link Trigger}s that use the value
+ * returned by {@link #evaluate(STEMTime, long, Decorator)} to control the
+ * execution of another {@link Decorator} called the {@link Trigger}'s "action".
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * @see Trigger
+ * @see Modifier
+ * @model abstract="true"
+ */
+public interface Predicate extends EObject {
+
+	/**
+	 * Determine if a particular condition is <code>true</code> or
+	 * <code>false</code>.
+	 * 
+	 * @param time
+	 *            the time to be used when determining if the {@link Predicate}
+	 *            is <code>true</code> or <code>false</code>.
+	 * @param timePeriod
+	 *            the number of milliseconds difference between the time and the
+	 *            previous time value.
+	 * @param action
+	 *            a {@link Decorator}
+	 * @return <code>true</code> if the {@link Predicate} is <code>true</code>,
+	 *         <code>false</code> otherwise.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean evaluate(final STEMTime time, final long timerPeriod,
+			final Decorator action);
+
+} // Predicate
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateExpression.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateExpression.java
new file mode 100644
index 0000000..7bfd001
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateExpression.java
@@ -0,0 +1,39 @@
+// PredicateExpression.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>PredicateExpression</code> is a {@link BooleanExpression} whose value
+ * is the result of evaluating a {@link Predicate}.
+ * 
+ * @model
+ */
+public interface PredicateExpression extends BooleanExpression {
+
+	/**
+	 * @return the {@link Predicate} that determines the value of this
+	 *         expression.
+	 * @model containment="true"
+	 */
+	Predicate getPredicate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.PredicateExpression#getPredicate <em>Predicate</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Predicate</em>' containment reference.
+	 * @see #getPredicate()
+	 * @generated
+	 */
+	void setPredicate(Predicate value);
+} // PredicateExpression
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateFactory.java
new file mode 100644
index 0000000..74b48d2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateFactory.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.predicate.PredicatePackage
+ * @generated
+ */
+public interface PredicateFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PredicateFactory eINSTANCE = org.eclipse.stem.core.predicate.impl.PredicateFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>And</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>And</em>'.
+	 * @generated
+	 */
+	And createAnd();
+
+	/**
+	 * Returns a new object of class '<em>False</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>False</em>'.
+	 * @generated
+	 */
+	False createFalse();
+
+	/**
+	 * Returns a new object of class '<em>Not</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Not</em>'.
+	 * @generated
+	 */
+	Not createNot();
+
+	/**
+	 * Returns a new object of class '<em>Or</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Or</em>'.
+	 * @generated
+	 */
+	Or createOr();
+
+	/**
+	 * Returns a new object of class '<em>Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Reference</em>'.
+	 * @generated
+	 */
+	PredicateReference createPredicateReference();
+
+	/**
+	 * Returns a new object of class '<em>True</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>True</em>'.
+	 * @generated
+	 */
+	True createTrue();
+
+	/**
+	 * Returns a new object of class '<em>Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Expression</em>'.
+	 * @generated
+	 */
+	PredicateExpression createPredicateExpression();
+
+	/**
+	 * Returns a new object of class '<em>Identifiable Predicate Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Identifiable Predicate Expression</em>'.
+	 * @generated
+	 */
+	IdentifiablePredicateExpression createIdentifiablePredicateExpression();
+
+	/**
+	 * Returns a new object of class '<em>Absolute Time Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Absolute Time Test</em>'.
+	 * @generated
+	 */
+	AbsoluteTimeTest createAbsoluteTimeTest();
+
+	/**
+	 * Returns a new object of class '<em>Elapsed Time Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Elapsed Time Test</em>'.
+	 * @generated
+	 */
+	ElapsedTimeTest createElapsedTimeTest();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	PredicatePackage getPredicatePackage();
+
+} //PredicateFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicatePackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicatePackage.java
new file mode 100644
index 0000000..bdd9b83
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicatePackage.java
@@ -0,0 +1,1208 @@
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.stem.core.common.CommonPackage;
+
+//import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.predicate.PredicateFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface PredicatePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "predicate"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/predicate.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.predicate"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	PredicatePackage eINSTANCE = org.eclipse.stem.core.predicate.impl.PredicatePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.PredicateImpl <em>Predicate</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicate()
+	 * @generated
+	 */
+	int PREDICATE = 7;
+
+	/**
+	 * The number of structural features of the '<em>Predicate</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PREDICATE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.BooleanExpressionImpl <em>Boolean Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.BooleanExpressionImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getBooleanExpression()
+	 * @generated
+	 */
+	int BOOLEAN_EXPRESSION = 1;
+
+	/**
+	 * The number of structural features of the '<em>Boolean Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOOLEAN_EXPRESSION_FEATURE_COUNT = PREDICATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.BooleanOperatorImpl <em>Boolean Operator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.BooleanOperatorImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getBooleanOperator()
+	 * @generated
+	 */
+	int BOOLEAN_OPERATOR = 2;
+
+	/**
+	 * The number of structural features of the '<em>Boolean Operator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BOOLEAN_OPERATOR_FEATURE_COUNT = BOOLEAN_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.NaryBooleanOperatorImpl <em>Nary Boolean Operator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.NaryBooleanOperatorImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getNaryBooleanOperator()
+	 * @generated
+	 */
+	int NARY_BOOLEAN_OPERATOR = 4;
+
+	/**
+	 * The feature id for the '<em><b>Operands</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NARY_BOOLEAN_OPERATOR__OPERANDS = BOOLEAN_OPERATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Nary Boolean Operator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NARY_BOOLEAN_OPERATOR_FEATURE_COUNT = BOOLEAN_OPERATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.AndImpl <em>And</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.AndImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getAnd()
+	 * @generated
+	 */
+	int AND = 0;
+
+	/**
+	 * The feature id for the '<em><b>Operands</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AND__OPERANDS = NARY_BOOLEAN_OPERATOR__OPERANDS;
+
+	/**
+	 * The number of structural features of the '<em>And</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AND_FEATURE_COUNT = NARY_BOOLEAN_OPERATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.TestImpl <em>Test</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.TestImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTest()
+	 * @generated
+	 */
+	int TEST = 9;
+
+	/**
+	 * The number of structural features of the '<em>Test</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_FEATURE_COUNT = PREDICATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.FalseImpl <em>False</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.FalseImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getFalse()
+	 * @generated
+	 */
+	int FALSE = 3;
+
+	/**
+	 * The number of structural features of the '<em>False</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FALSE_FEATURE_COUNT = TEST_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.UnaryBooleanOperatorImpl <em>Unary Boolean Operator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.UnaryBooleanOperatorImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getUnaryBooleanOperator()
+	 * @generated
+	 */
+	int UNARY_BOOLEAN_OPERATOR = 11;
+
+	/**
+	 * The feature id for the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNARY_BOOLEAN_OPERATOR__OPERAND = BOOLEAN_OPERATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Unary Boolean Operator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int UNARY_BOOLEAN_OPERATOR_FEATURE_COUNT = BOOLEAN_OPERATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.NotImpl <em>Not</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.NotImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getNot()
+	 * @generated
+	 */
+	int NOT = 5;
+
+	/**
+	 * The feature id for the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOT__OPERAND = UNARY_BOOLEAN_OPERATOR__OPERAND;
+
+	/**
+	 * The number of structural features of the '<em>Not</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NOT_FEATURE_COUNT = UNARY_BOOLEAN_OPERATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.OrImpl <em>Or</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.OrImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getOr()
+	 * @generated
+	 */
+	int OR = 6;
+
+	/**
+	 * The feature id for the '<em><b>Operands</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OR__OPERANDS = NARY_BOOLEAN_OPERATOR__OPERANDS;
+
+	/**
+	 * The number of structural features of the '<em>Or</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OR_FEATURE_COUNT = NARY_BOOLEAN_OPERATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.PredicateReferenceImpl <em>Reference</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateReferenceImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicateReference()
+	 * @generated
+	 */
+	int PREDICATE_REFERENCE = 8;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PREDICATE_REFERENCE__PREDICATE = PREDICATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Reference</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PREDICATE_REFERENCE_FEATURE_COUNT = PREDICATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.TrueImpl <em>True</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.TrueImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTrue()
+	 * @generated
+	 */
+	int TRUE = 10;
+
+	/**
+	 * The number of structural features of the '<em>True</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRUE_FEATURE_COUNT = TEST_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.PredicateExpressionImpl <em>Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateExpressionImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicateExpression()
+	 * @generated
+	 */
+	int PREDICATE_EXPRESSION = 12;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PREDICATE_EXPRESSION__PREDICATE = BOOLEAN_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PREDICATE_EXPRESSION_FEATURE_COUNT = BOOLEAN_EXPRESSION_FEATURE_COUNT + 1;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiablePredicateImpl <em>Identifiable Predicate</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.IdentifiablePredicateImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiablePredicate()
+	 * @generated
+	 */
+	int IDENTIFIABLE_PREDICATE = 13;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The number of structural features of the '<em>Identifiable Predicate</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiablePredicateExpressionImpl <em>Identifiable Predicate Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.IdentifiablePredicateExpressionImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiablePredicateExpression()
+	 * @generated
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION = 14;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION__URI = IDENTIFIABLE_PREDICATE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION__TYPE_URI = IDENTIFIABLE_PREDICATE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION__DUBLIN_CORE = IDENTIFIABLE_PREDICATE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE = IDENTIFIABLE_PREDICATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Identifiable Predicate Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_PREDICATE_EXPRESSION_FEATURE_COUNT = IDENTIFIABLE_PREDICATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiableTestImpl <em>Identifiable Test</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.IdentifiableTestImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiableTest()
+	 * @generated
+	 */
+	int IDENTIFIABLE_TEST = 15;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_TEST__URI = IDENTIFIABLE_PREDICATE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_TEST__TYPE_URI = IDENTIFIABLE_PREDICATE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_TEST__DUBLIN_CORE = IDENTIFIABLE_PREDICATE__DUBLIN_CORE;
+
+	/**
+	 * The number of structural features of the '<em>Identifiable Test</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int IDENTIFIABLE_TEST_FEATURE_COUNT = IDENTIFIABLE_PREDICATE_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.TimeTestImpl <em>Time Test</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.TimeTestImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTimeTest()
+	 * @generated
+	 */
+	int TIME_TEST = 16;
+
+	/**
+	 * The number of structural features of the '<em>Time Test</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TIME_TEST_FEATURE_COUNT = TEST_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.AbsoluteTimeTestImpl <em>Absolute Time Test</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.AbsoluteTimeTestImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getAbsoluteTimeTest()
+	 * @generated
+	 */
+	int ABSOLUTE_TIME_TEST = 17;
+
+	/**
+	 * The feature id for the '<em><b>Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ABSOLUTE_TIME_TEST__TIME = TIME_TEST_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Absolute Time Test</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ABSOLUTE_TIME_TEST_FEATURE_COUNT = TIME_TEST_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl <em>Elapsed Time Test</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl
+	 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getElapsedTimeTest()
+	 * @generated
+	 */
+	int ELAPSED_TIME_TEST = 18;
+
+	/**
+	 * The feature id for the '<em><b>Reference Time Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELAPSED_TIME_TEST__REFERENCE_TIME_VALID = TIME_TEST_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Elapsed Milliseconds</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELAPSED_TIME_TEST__ELAPSED_MILLISECONDS = TIME_TEST_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Numberof Days</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELAPSED_TIME_TEST__NUMBEROF_DAYS = TIME_TEST_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Reference Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELAPSED_TIME_TEST__REFERENCE_TIME = TIME_TEST_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Elapsed Time Test</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ELAPSED_TIME_TEST_FEATURE_COUNT = TIME_TEST_FEATURE_COUNT + 4;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.And <em>And</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>And</em>'.
+	 * @see org.eclipse.stem.core.predicate.And
+	 * @generated
+	 */
+	EClass getAnd();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.BooleanExpression <em>Boolean Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Boolean Expression</em>'.
+	 * @see org.eclipse.stem.core.predicate.BooleanExpression
+	 * @generated
+	 */
+	EClass getBooleanExpression();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.BooleanOperator <em>Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Boolean Operator</em>'.
+	 * @see org.eclipse.stem.core.predicate.BooleanOperator
+	 * @generated
+	 */
+	EClass getBooleanOperator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.False <em>False</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>False</em>'.
+	 * @see org.eclipse.stem.core.predicate.False
+	 * @generated
+	 */
+	EClass getFalse();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.NaryBooleanOperator <em>Nary Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Nary Boolean Operator</em>'.
+	 * @see org.eclipse.stem.core.predicate.NaryBooleanOperator
+	 * @generated
+	 */
+	EClass getNaryBooleanOperator();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.stem.core.predicate.NaryBooleanOperator#getOperands <em>Operands</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Operands</em>'.
+	 * @see org.eclipse.stem.core.predicate.NaryBooleanOperator#getOperands()
+	 * @see #getNaryBooleanOperator()
+	 * @generated
+	 */
+	EReference getNaryBooleanOperator_Operands();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.Not <em>Not</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Not</em>'.
+	 * @see org.eclipse.stem.core.predicate.Not
+	 * @generated
+	 */
+	EClass getNot();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.Or <em>Or</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Or</em>'.
+	 * @see org.eclipse.stem.core.predicate.Or
+	 * @generated
+	 */
+	EClass getOr();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.Predicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Predicate</em>'.
+	 * @see org.eclipse.stem.core.predicate.Predicate
+	 * @generated
+	 */
+	EClass getPredicate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.PredicateReference <em>Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Reference</em>'.
+	 * @see org.eclipse.stem.core.predicate.PredicateReference
+	 * @generated
+	 */
+	EClass getPredicateReference();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.predicate.PredicateReference#getPredicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Predicate</em>'.
+	 * @see org.eclipse.stem.core.predicate.PredicateReference#getPredicate()
+	 * @see #getPredicateReference()
+	 * @generated
+	 */
+	EReference getPredicateReference_Predicate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.Test <em>Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test</em>'.
+	 * @see org.eclipse.stem.core.predicate.Test
+	 * @generated
+	 */
+	EClass getTest();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.True <em>True</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>True</em>'.
+	 * @see org.eclipse.stem.core.predicate.True
+	 * @generated
+	 */
+	EClass getTrue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.UnaryBooleanOperator <em>Unary Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Unary Boolean Operator</em>'.
+	 * @see org.eclipse.stem.core.predicate.UnaryBooleanOperator
+	 * @generated
+	 */
+	EClass getUnaryBooleanOperator();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.predicate.UnaryBooleanOperator#getOperand <em>Operand</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Operand</em>'.
+	 * @see org.eclipse.stem.core.predicate.UnaryBooleanOperator#getOperand()
+	 * @see #getUnaryBooleanOperator()
+	 * @generated
+	 */
+	EReference getUnaryBooleanOperator_Operand();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.PredicateExpression <em>Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Expression</em>'.
+	 * @see org.eclipse.stem.core.predicate.PredicateExpression
+	 * @generated
+	 */
+	EClass getPredicateExpression();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.predicate.PredicateExpression#getPredicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Predicate</em>'.
+	 * @see org.eclipse.stem.core.predicate.PredicateExpression#getPredicate()
+	 * @see #getPredicateExpression()
+	 * @generated
+	 */
+	EReference getPredicateExpression_Predicate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.IdentifiablePredicate <em>Identifiable Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Identifiable Predicate</em>'.
+	 * @see org.eclipse.stem.core.predicate.IdentifiablePredicate
+	 * @generated
+	 */
+	EClass getIdentifiablePredicate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.IdentifiablePredicateExpression <em>Identifiable Predicate Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Identifiable Predicate Expression</em>'.
+	 * @see org.eclipse.stem.core.predicate.IdentifiablePredicateExpression
+	 * @generated
+	 */
+	EClass getIdentifiablePredicateExpression();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.IdentifiableTest <em>Identifiable Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Identifiable Test</em>'.
+	 * @see org.eclipse.stem.core.predicate.IdentifiableTest
+	 * @generated
+	 */
+	EClass getIdentifiableTest();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.TimeTest <em>Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Time Test</em>'.
+	 * @see org.eclipse.stem.core.predicate.TimeTest
+	 * @generated
+	 */
+	EClass getTimeTest();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.AbsoluteTimeTest <em>Absolute Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Absolute Time Test</em>'.
+	 * @see org.eclipse.stem.core.predicate.AbsoluteTimeTest
+	 * @generated
+	 */
+	EClass getAbsoluteTimeTest();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.predicate.AbsoluteTimeTest#getTime <em>Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Time</em>'.
+	 * @see org.eclipse.stem.core.predicate.AbsoluteTimeTest#getTime()
+	 * @see #getAbsoluteTimeTest()
+	 * @generated
+	 */
+	EReference getAbsoluteTimeTest_Time();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest <em>Elapsed Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Elapsed Time Test</em>'.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest
+	 * @generated
+	 */
+	EClass getElapsedTimeTest();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#isReferenceTimeValid <em>Reference Time Valid</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Reference Time Valid</em>'.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest#isReferenceTimeValid()
+	 * @see #getElapsedTimeTest()
+	 * @generated
+	 */
+	EAttribute getElapsedTimeTest_ReferenceTimeValid();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getElapsedMilliseconds <em>Elapsed Milliseconds</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Elapsed Milliseconds</em>'.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest#getElapsedMilliseconds()
+	 * @see #getElapsedTimeTest()
+	 * @generated
+	 */
+	EAttribute getElapsedTimeTest_ElapsedMilliseconds();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getNumberofDays <em>Numberof Days</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Numberof Days</em>'.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest#getNumberofDays()
+	 * @see #getElapsedTimeTest()
+	 * @generated
+	 */
+	EAttribute getElapsedTimeTest_NumberofDays();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getReferenceTime <em>Reference Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Reference Time</em>'.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest#getReferenceTime()
+	 * @see #getElapsedTimeTest()
+	 * @generated
+	 */
+	EReference getElapsedTimeTest_ReferenceTime();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	PredicateFactory getPredicateFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.AndImpl <em>And</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.AndImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getAnd()
+		 * @generated
+		 */
+		EClass AND = eINSTANCE.getAnd();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.BooleanExpressionImpl <em>Boolean Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.BooleanExpressionImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getBooleanExpression()
+		 * @generated
+		 */
+		EClass BOOLEAN_EXPRESSION = eINSTANCE.getBooleanExpression();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.BooleanOperatorImpl <em>Boolean Operator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.BooleanOperatorImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getBooleanOperator()
+		 * @generated
+		 */
+		EClass BOOLEAN_OPERATOR = eINSTANCE.getBooleanOperator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.FalseImpl <em>False</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.FalseImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getFalse()
+		 * @generated
+		 */
+		EClass FALSE = eINSTANCE.getFalse();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.NaryBooleanOperatorImpl <em>Nary Boolean Operator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.NaryBooleanOperatorImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getNaryBooleanOperator()
+		 * @generated
+		 */
+		EClass NARY_BOOLEAN_OPERATOR = eINSTANCE.getNaryBooleanOperator();
+
+		/**
+		 * The meta object literal for the '<em><b>Operands</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NARY_BOOLEAN_OPERATOR__OPERANDS = eINSTANCE.getNaryBooleanOperator_Operands();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.NotImpl <em>Not</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.NotImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getNot()
+		 * @generated
+		 */
+		EClass NOT = eINSTANCE.getNot();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.OrImpl <em>Or</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.OrImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getOr()
+		 * @generated
+		 */
+		EClass OR = eINSTANCE.getOr();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.PredicateImpl <em>Predicate</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicate()
+		 * @generated
+		 */
+		EClass PREDICATE = eINSTANCE.getPredicate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.PredicateReferenceImpl <em>Reference</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.PredicateReferenceImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicateReference()
+		 * @generated
+		 */
+		EClass PREDICATE_REFERENCE = eINSTANCE.getPredicateReference();
+
+		/**
+		 * The meta object literal for the '<em><b>Predicate</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PREDICATE_REFERENCE__PREDICATE = eINSTANCE.getPredicateReference_Predicate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.TestImpl <em>Test</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.TestImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTest()
+		 * @generated
+		 */
+		EClass TEST = eINSTANCE.getTest();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.TrueImpl <em>True</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.TrueImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTrue()
+		 * @generated
+		 */
+		EClass TRUE = eINSTANCE.getTrue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.UnaryBooleanOperatorImpl <em>Unary Boolean Operator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.UnaryBooleanOperatorImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getUnaryBooleanOperator()
+		 * @generated
+		 */
+		EClass UNARY_BOOLEAN_OPERATOR = eINSTANCE.getUnaryBooleanOperator();
+
+		/**
+		 * The meta object literal for the '<em><b>Operand</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference UNARY_BOOLEAN_OPERATOR__OPERAND = eINSTANCE.getUnaryBooleanOperator_Operand();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.PredicateExpressionImpl <em>Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.PredicateExpressionImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getPredicateExpression()
+		 * @generated
+		 */
+		EClass PREDICATE_EXPRESSION = eINSTANCE.getPredicateExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Predicate</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PREDICATE_EXPRESSION__PREDICATE = eINSTANCE.getPredicateExpression_Predicate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiablePredicateImpl <em>Identifiable Predicate</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.IdentifiablePredicateImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiablePredicate()
+		 * @generated
+		 */
+		EClass IDENTIFIABLE_PREDICATE = eINSTANCE.getIdentifiablePredicate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiablePredicateExpressionImpl <em>Identifiable Predicate Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.IdentifiablePredicateExpressionImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiablePredicateExpression()
+		 * @generated
+		 */
+		EClass IDENTIFIABLE_PREDICATE_EXPRESSION = eINSTANCE.getIdentifiablePredicateExpression();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.IdentifiableTestImpl <em>Identifiable Test</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.IdentifiableTestImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getIdentifiableTest()
+		 * @generated
+		 */
+		EClass IDENTIFIABLE_TEST = eINSTANCE.getIdentifiableTest();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.TimeTestImpl <em>Time Test</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.TimeTestImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getTimeTest()
+		 * @generated
+		 */
+		EClass TIME_TEST = eINSTANCE.getTimeTest();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.AbsoluteTimeTestImpl <em>Absolute Time Test</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.AbsoluteTimeTestImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getAbsoluteTimeTest()
+		 * @generated
+		 */
+		EClass ABSOLUTE_TIME_TEST = eINSTANCE.getAbsoluteTimeTest();
+
+		/**
+		 * The meta object literal for the '<em><b>Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ABSOLUTE_TIME_TEST__TIME = eINSTANCE.getAbsoluteTimeTest_Time();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl <em>Elapsed Time Test</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl
+		 * @see org.eclipse.stem.core.predicate.impl.PredicatePackageImpl#getElapsedTimeTest()
+		 * @generated
+		 */
+		EClass ELAPSED_TIME_TEST = eINSTANCE.getElapsedTimeTest();
+
+		/**
+		 * The meta object literal for the '<em><b>Reference Time Valid</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELAPSED_TIME_TEST__REFERENCE_TIME_VALID = eINSTANCE.getElapsedTimeTest_ReferenceTimeValid();
+
+		/**
+		 * The meta object literal for the '<em><b>Elapsed Milliseconds</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELAPSED_TIME_TEST__ELAPSED_MILLISECONDS = eINSTANCE.getElapsedTimeTest_ElapsedMilliseconds();
+
+		/**
+		 * The meta object literal for the '<em><b>Numberof Days</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ELAPSED_TIME_TEST__NUMBEROF_DAYS = eINSTANCE.getElapsedTimeTest_NumberofDays();
+
+		/**
+		 * The meta object literal for the '<em><b>Reference Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ELAPSED_TIME_TEST__REFERENCE_TIME = eINSTANCE.getElapsedTimeTest_ReferenceTime();
+
+	}
+
+} //PredicatePackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateReference.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateReference.java
new file mode 100644
index 0000000..09f76f7
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/PredicateReference.java
@@ -0,0 +1,38 @@
+// PredicateReference.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>PredicateReference</code> is a {@link Predicate} whose value is the
+ * result of evaluating a referenced (i.e., non-containment) {@link Predicate}.
+ * 
+ * @see Test
+ * @see BooleanExpression
+ * @model
+ */
+public interface PredicateReference extends Predicate {
+	/**
+	 * @model containment="false"
+	 */
+	Predicate getPredicate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.PredicateReference#getPredicate <em>Predicate</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Predicate</em>' reference.
+	 * @see #getPredicate()
+	 * @generated
+	 */
+	void setPredicate(Predicate value);
+} // PredicateReference
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Test.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Test.java
new file mode 100644
index 0000000..9c5f0ce
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/Test.java
@@ -0,0 +1,26 @@
+// Test.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>Test</code> is a {@link Predicate} whose value is the result of
+ * executing underlying code rather than from the evaluation of some boolean
+ * expression.
+ * 
+ * @see BooleanExpression
+ * @see PredicateReference
+ * @model abstract="true"
+ */
+public interface Test extends Predicate {
+	// Nothing
+} // Test
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/TimeTest.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/TimeTest.java
new file mode 100644
index 0000000..67914e3
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/TimeTest.java
@@ -0,0 +1,26 @@
+// TimeTest.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * A <code>TimeTest</code> is a <code>Test</code> that returns a boolean value
+ * depending upon the comparison of the time values passed to
+ * {@link #evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)}
+ * and a reference time value.
+ * 
+ * @model abstract="true"
+ */
+public interface TimeTest extends Test {
+	// Nothing	
+} // TimeTest
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/True.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/True.java
new file mode 100644
index 0000000..a0412ad
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/True.java
@@ -0,0 +1,23 @@
+// True.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * <code>True</code> is a {@link Test} whose value is always <code>true</code>.
+ * 
+ * @see False
+ * @model
+ */
+public interface True extends Test {
+	// Nothing
+} // True
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/UnaryBooleanOperator.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/UnaryBooleanOperator.java
new file mode 100644
index 0000000..4b9a582
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/UnaryBooleanOperator.java
@@ -0,0 +1,39 @@
+// UnaryBooleanOperator.java
+package org.eclipse.stem.core.predicate;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * An <code>UnaryBooleanOperator</code> is a {@link BooleanOperator} whose value
+ * is the result of evaluating a boolean operator that takes only a single
+ * operand.
+ * 
+ * @see NaryBooleanOperator
+ * @model abstract="true"
+ */
+public interface UnaryBooleanOperator extends BooleanOperator {
+	/**
+	 * @return the operand of the operator
+	 * @model containment="true"
+	 */
+	Predicate getOperand();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.predicate.UnaryBooleanOperator#getOperand <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operand</em>' containment reference.
+	 * @see #getOperand()
+	 * @generated
+	 */
+	void setOperand(Predicate value);
+} // UnaryBooleanOperator
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AbsoluteTimeTestImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AbsoluteTimeTestImpl.java
new file mode 100644
index 0000000..b452351
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AbsoluteTimeTestImpl.java
@@ -0,0 +1,192 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.AbsoluteTimeTest;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Absolute Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.AbsoluteTimeTestImpl#getTime <em>Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AbsoluteTimeTestImpl extends TimeTestImpl implements AbsoluteTimeTest {
+	/**
+	 * The cached value of the '{@link #getTime() <em>Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime time;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected AbsoluteTimeTestImpl() {
+		super();
+		setTime(ModelFactory.eINSTANCE.createSTEMTime());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.ABSOLUTE_TIME_TEST;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getTime() {
+		return time;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetTime(STEMTime newTime, NotificationChain msgs) {
+		STEMTime oldTime = time;
+		time = newTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PredicatePackage.ABSOLUTE_TIME_TEST__TIME, oldTime, newTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTime(STEMTime newTime) {
+		if (newTime != time) {
+			NotificationChain msgs = null;
+			if (time != null)
+				msgs = ((InternalEObject)time).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.ABSOLUTE_TIME_TEST__TIME, null, msgs);
+			if (newTime != null)
+				msgs = ((InternalEObject)newTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.ABSOLUTE_TIME_TEST__TIME, null, msgs);
+			msgs = basicSetTime(newTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.ABSOLUTE_TIME_TEST__TIME, newTime, newTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				return basicSetTime(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				return getTime();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				setTime((STEMTime)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				setTime((STEMTime)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				return time != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		return time.equals(getTime());
+	}
+	
+} //AbsoluteTimeTestImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AndImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AndImpl.java
new file mode 100644
index 0000000..f50247d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/AndImpl.java
@@ -0,0 +1,67 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.And;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>And</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class AndImpl extends NaryBooleanOperatorImpl implements And {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AndImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.AND;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		boolean retValue = true;
+		for (Predicate predicate : getOperands()) {
+			retValue = predicate.evaluate(time, timerPeriod, action);
+			// One is true?
+			if (retValue) {
+				// Yes
+				break;
+			} // if 
+		} // for each Predicate
+		return retValue;
+	} // evaluate
+} //AndImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanExpressionImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanExpressionImpl.java
new file mode 100644
index 0000000..4ab3da4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanExpressionImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.predicate.BooleanExpression;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class BooleanExpressionImpl extends PredicateImpl implements BooleanExpression {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BooleanExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.BOOLEAN_EXPRESSION;
+	}
+
+} //BooleanExpressionImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanOperatorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanOperatorImpl.java
new file mode 100644
index 0000000..ff3fe5e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/BooleanOperatorImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.predicate.BooleanOperator;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class BooleanOperatorImpl extends BooleanExpressionImpl implements BooleanOperator {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BooleanOperatorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.BOOLEAN_OPERATOR;
+	}
+
+} //BooleanOperatorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/ElapsedTimeTestImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/ElapsedTimeTestImpl.java
new file mode 100644
index 0000000..d9d1ac4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/ElapsedTimeTestImpl.java
@@ -0,0 +1,374 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.ElapsedTimeTest;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Elapsed Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl#isReferenceTimeValid <em>Reference Time Valid</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl#getElapsedMilliseconds <em>Elapsed Milliseconds</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl#getNumberofDays <em>Numberof Days</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.ElapsedTimeTestImpl#getReferenceTime <em>Reference Time</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ElapsedTimeTestImpl extends TimeTestImpl implements ElapsedTimeTest {
+	/**
+	 * The default value of the '{@link #isReferenceTimeValid() <em>Reference Time Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isReferenceTimeValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean REFERENCE_TIME_VALID_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isReferenceTimeValid() <em>Reference Time Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isReferenceTimeValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean referenceTimeValid = REFERENCE_TIME_VALID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getElapsedMilliseconds() <em>Elapsed Milliseconds</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElapsedMilliseconds()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long ELAPSED_MILLISECONDS_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getElapsedMilliseconds() <em>Elapsed Milliseconds</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getElapsedMilliseconds()
+	 * @generated
+	 * @ordered
+	 */
+	protected long elapsedMilliseconds = ELAPSED_MILLISECONDS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNumberofDays() <em>Numberof Days</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberofDays()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBEROF_DAYS_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getNumberofDays() <em>Numberof Days</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberofDays()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numberofDays = NUMBEROF_DAYS_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getReferenceTime() <em>Reference Time</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReferenceTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime referenceTime;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected ElapsedTimeTestImpl() {
+		super();
+		setReferenceTime(ModelFactory.eINSTANCE.createSTEMTime());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.ELAPSED_TIME_TEST;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isReferenceTimeValid() {
+		return referenceTimeValid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReferenceTimeValid(boolean newReferenceTimeValid) {
+		boolean oldReferenceTimeValid = referenceTimeValid;
+		referenceTimeValid = newReferenceTimeValid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME_VALID, oldReferenceTimeValid, referenceTimeValid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getElapsedMilliseconds() {
+		return elapsedMilliseconds;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumberofDays() {
+		return numberofDays;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setNumberofDays(int newNumberofDays) {
+		int oldNumberofDays = numberofDays;
+		numberofDays = newNumberofDays;
+		
+		elapsedMilliseconds = numberofDays * STEMTime.Units.DAY.getMilliseconds();
+		
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS, oldNumberofDays, numberofDays));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getReferenceTime() {
+		return referenceTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetReferenceTime(STEMTime newReferenceTime, NotificationChain msgs) {
+		STEMTime oldReferenceTime = referenceTime;
+		referenceTime = newReferenceTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME, oldReferenceTime, newReferenceTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReferenceTime(STEMTime newReferenceTime) {
+		if (newReferenceTime != referenceTime) {
+			NotificationChain msgs = null;
+			if (referenceTime != null)
+				msgs = ((InternalEObject)referenceTime).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME, null, msgs);
+			if (newReferenceTime != null)
+				msgs = ((InternalEObject)newReferenceTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME, null, msgs);
+			msgs = basicSetReferenceTime(newReferenceTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME, newReferenceTime, newReferenceTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME:
+				return basicSetReferenceTime(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME_VALID:
+				return isReferenceTimeValid();
+			case PredicatePackage.ELAPSED_TIME_TEST__ELAPSED_MILLISECONDS:
+				return getElapsedMilliseconds();
+			case PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS:
+				return getNumberofDays();
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME:
+				return getReferenceTime();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME_VALID:
+				setReferenceTimeValid((Boolean)newValue);
+				return;
+			case PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS:
+				setNumberofDays((Integer)newValue);
+				return;
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME:
+				setReferenceTime((STEMTime)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME_VALID:
+				setReferenceTimeValid(REFERENCE_TIME_VALID_EDEFAULT);
+				return;
+			case PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS:
+				setNumberofDays(NUMBEROF_DAYS_EDEFAULT);
+				return;
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME:
+				setReferenceTime((STEMTime)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME_VALID:
+				return referenceTimeValid != REFERENCE_TIME_VALID_EDEFAULT;
+			case PredicatePackage.ELAPSED_TIME_TEST__ELAPSED_MILLISECONDS:
+				return elapsedMilliseconds != ELAPSED_MILLISECONDS_EDEFAULT;
+			case PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS:
+				return numberofDays != NUMBEROF_DAYS_EDEFAULT;
+			case PredicatePackage.ELAPSED_TIME_TEST__REFERENCE_TIME:
+				return referenceTime != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (referenceTimeValid: "); //$NON-NLS-1$
+		result.append(referenceTimeValid);
+		result.append(", elapsedMilliseconds: "); //$NON-NLS-1$
+		result.append(elapsedMilliseconds);
+		result.append(", numberofDays: "); //$NON-NLS-1$
+		result.append(numberofDays);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		boolean retValue = false;
+		// Is the reference time valid?
+		if (isReferenceTimeValid()) {
+			// Yes
+			final long elapsedTimeMS = time.getTime().getTime() - getReferenceTime().getTime().getTime();
+			// Has enough time gone by?
+			retValue = elapsedTimeMS > getElapsedMilliseconds();
+		} // if reference time valid?
+		else {
+			// No
+			// This must be the first time this has been called so this must be
+			// the start of the simulation. Remember the time value passed in as
+			// the reference value.
+			setReferenceTime((STEMTime)EcoreUtil.copy(time));
+			setReferenceTimeValid(true);			
+		} // else
+		
+		return retValue;
+	} // evaluate
+	
+} //ElapsedTimeTestImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/FalseImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/FalseImpl.java
new file mode 100644
index 0000000..f80e315
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/FalseImpl.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>False</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class FalseImpl extends TestImpl implements False {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FalseImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.FALSE;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		return false;
+	}
+	
+} //FalseImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateExpressionImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateExpressionImpl.java
new file mode 100644
index 0000000..7c2db33
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateExpressionImpl.java
@@ -0,0 +1,259 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.BooleanExpression;
+import org.eclipse.stem.core.predicate.IdentifiablePredicateExpression;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicateExpression;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Identifiable Predicate Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.IdentifiablePredicateExpressionImpl#getPredicate <em>Predicate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IdentifiablePredicateExpressionImpl extends IdentifiablePredicateImpl implements IdentifiablePredicateExpression {
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected Predicate predicate;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdentifiablePredicateExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.IDENTIFIABLE_PREDICATE_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate getPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPredicate(Predicate newPredicate, NotificationChain msgs) {
+		Predicate oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE, oldPredicate, newPredicate);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(Predicate newPredicate) {
+		if (newPredicate != predicate) {
+			NotificationChain msgs = null;
+			if (predicate != null)
+				msgs = ((InternalEObject)predicate).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE, null, msgs);
+			if (newPredicate != null)
+				msgs = ((InternalEObject)newPredicate).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE, null, msgs);
+			msgs = basicSetPredicate(newPredicate, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE, newPredicate, newPredicate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				return basicSetPredicate(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				return getPredicate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				setPredicate((Predicate)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				setPredicate((Predicate)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				return predicate != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == BooleanExpression.class) {
+			switch (derivedFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == PredicateExpression.class) {
+			switch (derivedFeatureID) {
+				case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE: return PredicatePackage.PREDICATE_EXPRESSION__PREDICATE;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == BooleanExpression.class) {
+			switch (baseFeatureID) {
+				default: return -1;
+			}
+		}
+		if (baseClass == PredicateExpression.class) {
+			switch (baseFeatureID) {
+				case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE: return PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * @see Identifiable#compareTo(Identifiable)
+	 */
+	@Override
+	public int compareTo(Identifiable o) {
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemLabelProvider lp1 = (IItemLabelProvider) itemProviderFactory.adapt(
+				this, IItemLabelProvider.class);
+		final IItemLabelProvider lp2 = (IItemLabelProvider) itemProviderFactory.adapt(o,
+				IItemLabelProvider.class);
+		return lp1.getText(this).compareTo(lp2.getText(o));
+	} // compareTo
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.IdentifiablePredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		boolean retValue = false;
+		final Predicate predicate = getPredicate();
+		// Was a predicate supplied?
+		if (predicate != null) {
+			// Yes
+			retValue = predicate.evaluate(time, timerPeriod, action);
+		}		
+		return retValue;
+	} // evaluate
+
+} //IdentifiablePredicateExpressionImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateImpl.java
new file mode 100644
index 0000000..4d11934
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiablePredicateImpl.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.IdentifiablePredicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Identifiable Predicate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class IdentifiablePredicateImpl extends IdentifiableImpl implements IdentifiablePredicate {
+	private static int predicateCounter = 0;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected IdentifiablePredicateImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_PREDICATE_SEGMENT + "/"
+				+ Integer.toString(predicateCounter++)));
+		setTypeURI(STEMURI.PREDICATE_TYPE_URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.IDENTIFIABLE_PREDICATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public boolean evaluate(STEMTime time, long timerPeriod, Decorator action);
+
+} //IdentifiablePredicateImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiableTestImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiableTestImpl.java
new file mode 100644
index 0000000..1b36985
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/IdentifiableTestImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.predicate.IdentifiableTest;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Identifiable Test</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class IdentifiableTestImpl extends IdentifiablePredicateImpl implements IdentifiableTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdentifiableTestImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.IDENTIFIABLE_TEST;
+	}
+
+} //IdentifiableTestImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NaryBooleanOperatorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NaryBooleanOperatorImpl.java
new file mode 100644
index 0000000..5ee604e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NaryBooleanOperatorImpl.java
@@ -0,0 +1,155 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.stem.core.predicate.NaryBooleanOperator;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Nary Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.NaryBooleanOperatorImpl#getOperands <em>Operands</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class NaryBooleanOperatorImpl extends BooleanOperatorImpl implements NaryBooleanOperator {
+	/**
+	 * The cached value of the '{@link #getOperands() <em>Operands</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperands()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Predicate> operands;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NaryBooleanOperatorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Predicate> getOperands() {
+		if (operands == null) {
+			operands = new EObjectContainmentEList<Predicate>(Predicate.class, this, PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS);
+		}
+		return operands;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				return ((InternalEList<?>)getOperands()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				return getOperands();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				getOperands().clear();
+				getOperands().addAll((Collection<? extends Predicate>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				getOperands().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				return operands != null && !operands.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //NaryBooleanOperatorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NotImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NotImpl.java
new file mode 100644
index 0000000..1c5cb02
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/NotImpl.java
@@ -0,0 +1,59 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.Not;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Not</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class NotImpl extends UnaryBooleanOperatorImpl implements Not {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NotImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.NOT;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		return !getOperand().evaluate(time, timerPeriod, action);
+	}
+
+	
+} //NotImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/OrImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/OrImpl.java
new file mode 100644
index 0000000..116b1ba
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/OrImpl.java
@@ -0,0 +1,69 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.Or;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Or</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class OrImpl extends NaryBooleanOperatorImpl implements Or {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OrImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.OR;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		boolean retValue = false;
+		for (Predicate predicate : getOperands()) {
+			retValue = predicate.evaluate(time, timerPeriod, action);
+			// One is true?
+			if (retValue) {
+				// Yes
+				break;
+			} // if 
+		} // for each Predicate
+		return retValue;
+	} // evaluate
+
+	
+} //OrImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateExpressionImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateExpressionImpl.java
new file mode 100644
index 0000000..697cc59
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateExpressionImpl.java
@@ -0,0 +1,198 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicateExpression;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.PredicateExpressionImpl#getPredicate <em>Predicate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PredicateExpressionImpl extends BooleanExpressionImpl implements PredicateExpression {
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected Predicate predicate;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.PREDICATE_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate getPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetPredicate(Predicate newPredicate, NotificationChain msgs) {
+		Predicate oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PredicatePackage.PREDICATE_EXPRESSION__PREDICATE, oldPredicate, newPredicate);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(Predicate newPredicate) {
+		if (newPredicate != predicate) {
+			NotificationChain msgs = null;
+			if (predicate != null)
+				msgs = ((InternalEObject)predicate).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.PREDICATE_EXPRESSION__PREDICATE, null, msgs);
+			if (newPredicate != null)
+				msgs = ((InternalEObject)newPredicate).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.PREDICATE_EXPRESSION__PREDICATE, null, msgs);
+			msgs = basicSetPredicate(newPredicate, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.PREDICATE_EXPRESSION__PREDICATE, newPredicate, newPredicate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				return basicSetPredicate(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				return getPredicate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				setPredicate((Predicate)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				setPredicate((Predicate)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				return predicate != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		try {
+			return getPredicate().evaluate(time, timerPeriod, action);
+		} catch (Exception e) {
+			return false;
+		}
+	}
+
+} //PredicateExpressionImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateFactoryImpl.java
new file mode 100644
index 0000000..23eff6f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateFactoryImpl.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.predicate.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateFactoryImpl extends EFactoryImpl implements PredicateFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static PredicateFactory init() {
+		try {
+			PredicateFactory thePredicateFactory = (PredicateFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/predicate.ecore"); //$NON-NLS-1$ 
+			if (thePredicateFactory != null) {
+				return thePredicateFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new PredicateFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case PredicatePackage.AND: return createAnd();
+			case PredicatePackage.FALSE: return createFalse();
+			case PredicatePackage.NOT: return createNot();
+			case PredicatePackage.OR: return createOr();
+			case PredicatePackage.PREDICATE_REFERENCE: return createPredicateReference();
+			case PredicatePackage.TRUE: return createTrue();
+			case PredicatePackage.PREDICATE_EXPRESSION: return createPredicateExpression();
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION: return createIdentifiablePredicateExpression();
+			case PredicatePackage.ABSOLUTE_TIME_TEST: return createAbsoluteTimeTest();
+			case PredicatePackage.ELAPSED_TIME_TEST: return createElapsedTimeTest();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public And createAnd() {
+		AndImpl and = new AndImpl();
+		return and;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public False createFalse() {
+		FalseImpl false_ = new FalseImpl();
+		return false_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Not createNot() {
+		NotImpl not = new NotImpl();
+		return not;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Or createOr() {
+		OrImpl or = new OrImpl();
+		return or;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateReference createPredicateReference() {
+		PredicateReferenceImpl predicateReference = new PredicateReferenceImpl();
+		return predicateReference;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public True createTrue() {
+		TrueImpl true_ = new TrueImpl();
+		return true_;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateExpression createPredicateExpression() {
+		PredicateExpressionImpl predicateExpression = new PredicateExpressionImpl();
+		return predicateExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiablePredicateExpression createIdentifiablePredicateExpression() {
+		IdentifiablePredicateExpressionImpl identifiablePredicateExpression = new IdentifiablePredicateExpressionImpl();
+		return identifiablePredicateExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AbsoluteTimeTest createAbsoluteTimeTest() {
+		AbsoluteTimeTestImpl absoluteTimeTest = new AbsoluteTimeTestImpl();
+		return absoluteTimeTest;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElapsedTimeTest createElapsedTimeTest() {
+		ElapsedTimeTestImpl elapsedTimeTest = new ElapsedTimeTestImpl();
+		return elapsedTimeTest;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicatePackage getPredicatePackage() {
+		return (PredicatePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static PredicatePackage getPackage() {
+		return PredicatePackage.eINSTANCE;
+	}
+
+} //PredicateFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateImpl.java
new file mode 100644
index 0000000..4aeef20
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateImpl.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Predicate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class PredicateImpl extends EObjectImpl implements Predicate {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.PREDICATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public boolean evaluate(STEMTime time, long timerPeriod, Decorator action);
+
+} //PredicateImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicatePackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicatePackageImpl.java
new file mode 100644
index 0000000..8c05477
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicatePackageImpl.java
@@ -0,0 +1,749 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.AbsoluteTimeTest;
+import org.eclipse.stem.core.predicate.And;
+import org.eclipse.stem.core.predicate.BooleanExpression;
+import org.eclipse.stem.core.predicate.BooleanOperator;
+import org.eclipse.stem.core.predicate.ElapsedTimeTest;
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.IdentifiablePredicate;
+import org.eclipse.stem.core.predicate.IdentifiablePredicateExpression;
+import org.eclipse.stem.core.predicate.IdentifiableTest;
+import org.eclipse.stem.core.predicate.NaryBooleanOperator;
+import org.eclipse.stem.core.predicate.Not;
+import org.eclipse.stem.core.predicate.Or;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.PredicateReference;
+import org.eclipse.stem.core.predicate.Test;
+import org.eclipse.stem.core.predicate.TimeTest;
+import org.eclipse.stem.core.predicate.True;
+import org.eclipse.stem.core.predicate.UnaryBooleanOperator;
+
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicatePackageImpl extends EPackageImpl implements PredicatePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass andEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass booleanExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass booleanOperatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass falseEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass naryBooleanOperatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass notEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass orEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass predicateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass predicateReferenceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass trueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass unaryBooleanOperatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass predicateExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass identifiablePredicateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass identifiablePredicateExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass identifiableTestEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass timeTestEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass absoluteTimeTestEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass elapsedTimeTestEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.predicate.PredicatePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private PredicatePackageImpl() {
+		super(eNS_URI, PredicateFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link PredicatePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static PredicatePackage init() {
+		if (isInited) return (PredicatePackage)EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI);
+
+		// Obtain or create and register package
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new PredicatePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		thePredicatePackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		thePredicatePackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		thePredicatePackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(PredicatePackage.eNS_URI, thePredicatePackage);
+		return thePredicatePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAnd() {
+		return andEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getBooleanExpression() {
+		return booleanExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getBooleanOperator() {
+		return booleanOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFalse() {
+		return falseEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNaryBooleanOperator() {
+		return naryBooleanOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNaryBooleanOperator_Operands() {
+		return (EReference)naryBooleanOperatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNot() {
+		return notEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getOr() {
+		return orEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPredicate() {
+		return predicateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPredicateReference() {
+		return predicateReferenceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPredicateReference_Predicate() {
+		return (EReference)predicateReferenceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTest() {
+		return testEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTrue() {
+		return trueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getUnaryBooleanOperator() {
+		return unaryBooleanOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getUnaryBooleanOperator_Operand() {
+		return (EReference)unaryBooleanOperatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPredicateExpression() {
+		return predicateExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPredicateExpression_Predicate() {
+		return (EReference)predicateExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIdentifiablePredicate() {
+		return identifiablePredicateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIdentifiablePredicateExpression() {
+		return identifiablePredicateExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIdentifiableTest() {
+		return identifiableTestEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTimeTest() {
+		return timeTestEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAbsoluteTimeTest() {
+		return absoluteTimeTestEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbsoluteTimeTest_Time() {
+		return (EReference)absoluteTimeTestEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getElapsedTimeTest() {
+		return elapsedTimeTestEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElapsedTimeTest_ReferenceTimeValid() {
+		return (EAttribute)elapsedTimeTestEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElapsedTimeTest_ElapsedMilliseconds() {
+		return (EAttribute)elapsedTimeTestEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getElapsedTimeTest_NumberofDays() {
+		return (EAttribute)elapsedTimeTestEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getElapsedTimeTest_ReferenceTime() {
+		return (EReference)elapsedTimeTestEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateFactory getPredicateFactory() {
+		return (PredicateFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		andEClass = createEClass(AND);
+
+		booleanExpressionEClass = createEClass(BOOLEAN_EXPRESSION);
+
+		booleanOperatorEClass = createEClass(BOOLEAN_OPERATOR);
+
+		falseEClass = createEClass(FALSE);
+
+		naryBooleanOperatorEClass = createEClass(NARY_BOOLEAN_OPERATOR);
+		createEReference(naryBooleanOperatorEClass, NARY_BOOLEAN_OPERATOR__OPERANDS);
+
+		notEClass = createEClass(NOT);
+
+		orEClass = createEClass(OR);
+
+		predicateEClass = createEClass(PREDICATE);
+
+		predicateReferenceEClass = createEClass(PREDICATE_REFERENCE);
+		createEReference(predicateReferenceEClass, PREDICATE_REFERENCE__PREDICATE);
+
+		testEClass = createEClass(TEST);
+
+		trueEClass = createEClass(TRUE);
+
+		unaryBooleanOperatorEClass = createEClass(UNARY_BOOLEAN_OPERATOR);
+		createEReference(unaryBooleanOperatorEClass, UNARY_BOOLEAN_OPERATOR__OPERAND);
+
+		predicateExpressionEClass = createEClass(PREDICATE_EXPRESSION);
+		createEReference(predicateExpressionEClass, PREDICATE_EXPRESSION__PREDICATE);
+
+		identifiablePredicateEClass = createEClass(IDENTIFIABLE_PREDICATE);
+
+		identifiablePredicateExpressionEClass = createEClass(IDENTIFIABLE_PREDICATE_EXPRESSION);
+
+		identifiableTestEClass = createEClass(IDENTIFIABLE_TEST);
+
+		timeTestEClass = createEClass(TIME_TEST);
+
+		absoluteTimeTestEClass = createEClass(ABSOLUTE_TIME_TEST);
+		createEReference(absoluteTimeTestEClass, ABSOLUTE_TIME_TEST__TIME);
+
+		elapsedTimeTestEClass = createEClass(ELAPSED_TIME_TEST);
+		createEAttribute(elapsedTimeTestEClass, ELAPSED_TIME_TEST__REFERENCE_TIME_VALID);
+		createEAttribute(elapsedTimeTestEClass, ELAPSED_TIME_TEST__ELAPSED_MILLISECONDS);
+		createEAttribute(elapsedTimeTestEClass, ELAPSED_TIME_TEST__NUMBEROF_DAYS);
+		createEReference(elapsedTimeTestEClass, ELAPSED_TIME_TEST__REFERENCE_TIME);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		andEClass.getESuperTypes().add(this.getNaryBooleanOperator());
+		booleanExpressionEClass.getESuperTypes().add(this.getPredicate());
+		booleanOperatorEClass.getESuperTypes().add(this.getBooleanExpression());
+		falseEClass.getESuperTypes().add(this.getTest());
+		naryBooleanOperatorEClass.getESuperTypes().add(this.getBooleanOperator());
+		notEClass.getESuperTypes().add(this.getUnaryBooleanOperator());
+		orEClass.getESuperTypes().add(this.getNaryBooleanOperator());
+		predicateReferenceEClass.getESuperTypes().add(this.getPredicate());
+		testEClass.getESuperTypes().add(this.getPredicate());
+		trueEClass.getESuperTypes().add(this.getTest());
+		unaryBooleanOperatorEClass.getESuperTypes().add(this.getBooleanOperator());
+		predicateExpressionEClass.getESuperTypes().add(this.getBooleanExpression());
+		identifiablePredicateEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		identifiablePredicateEClass.getESuperTypes().add(this.getPredicate());
+		identifiablePredicateExpressionEClass.getESuperTypes().add(this.getIdentifiablePredicate());
+		identifiablePredicateExpressionEClass.getESuperTypes().add(this.getPredicateExpression());
+		identifiableTestEClass.getESuperTypes().add(this.getIdentifiablePredicate());
+		identifiableTestEClass.getESuperTypes().add(this.getTest());
+		timeTestEClass.getESuperTypes().add(this.getTest());
+		absoluteTimeTestEClass.getESuperTypes().add(this.getTimeTest());
+		elapsedTimeTestEClass.getESuperTypes().add(this.getTimeTest());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(andEClass, And.class, "And", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(booleanExpressionEClass, BooleanExpression.class, "BooleanExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(booleanOperatorEClass, BooleanOperator.class, "BooleanOperator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(falseEClass, False.class, "False", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(naryBooleanOperatorEClass, NaryBooleanOperator.class, "NaryBooleanOperator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getNaryBooleanOperator_Operands(), this.getPredicate(), null, "operands", null, 0, -1, NaryBooleanOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(notEClass, Not.class, "Not", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(orEClass, Or.class, "Or", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(predicateEClass, Predicate.class, "Predicate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		EOperation op = addEOperation(predicateEClass, ecorePackage.getEBoolean(), "evaluate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theModelPackage.getSTEMTime(), "time", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timerPeriod", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theModelPackage.getDecorator(), "action", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(predicateReferenceEClass, PredicateReference.class, "PredicateReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getPredicateReference_Predicate(), this.getPredicate(), null, "predicate", null, 0, 1, PredicateReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testEClass, Test.class, "Test", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(trueEClass, True.class, "True", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(unaryBooleanOperatorEClass, UnaryBooleanOperator.class, "UnaryBooleanOperator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getUnaryBooleanOperator_Operand(), this.getPredicate(), null, "operand", null, 0, 1, UnaryBooleanOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(predicateExpressionEClass, PredicateExpression.class, "PredicateExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getPredicateExpression_Predicate(), this.getPredicate(), null, "predicate", null, 0, 1, PredicateExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(identifiablePredicateEClass, IdentifiablePredicate.class, "IdentifiablePredicate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(identifiablePredicateExpressionEClass, IdentifiablePredicateExpression.class, "IdentifiablePredicateExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(identifiableTestEClass, IdentifiableTest.class, "IdentifiableTest", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(timeTestEClass, TimeTest.class, "TimeTest", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(absoluteTimeTestEClass, AbsoluteTimeTest.class, "AbsoluteTimeTest", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getAbsoluteTimeTest_Time(), theModelPackage.getSTEMTime(), null, "time", null, 0, 1, AbsoluteTimeTest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(elapsedTimeTestEClass, ElapsedTimeTest.class, "ElapsedTimeTest", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getElapsedTimeTest_ReferenceTimeValid(), ecorePackage.getEBoolean(), "referenceTimeValid", "false", 0, 1, ElapsedTimeTest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getElapsedTimeTest_ElapsedMilliseconds(), ecorePackage.getELong(), "elapsedMilliseconds", null, 0, 1, ElapsedTimeTest.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getElapsedTimeTest_NumberofDays(), ecorePackage.getEInt(), "numberofDays", "0", 0, 1, ElapsedTimeTest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getElapsedTimeTest_ReferenceTime(), theModelPackage.getSTEMTime(), null, "referenceTime", null, 0, 1, ElapsedTimeTest.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //PredicatePackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateReferenceImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateReferenceImpl.java
new file mode 100644
index 0000000..51f2c84
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/PredicateReferenceImpl.java
@@ -0,0 +1,178 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.PredicateReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Reference</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.PredicateReferenceImpl#getPredicate <em>Predicate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PredicateReferenceImpl extends PredicateImpl implements PredicateReference {
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected Predicate predicate;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateReferenceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.PREDICATE_REFERENCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate getPredicate() {
+		if (predicate != null && predicate.eIsProxy()) {
+			InternalEObject oldPredicate = (InternalEObject)predicate;
+			predicate = (Predicate)eResolveProxy(oldPredicate);
+			if (predicate != oldPredicate) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, PredicatePackage.PREDICATE_REFERENCE__PREDICATE, oldPredicate, predicate));
+			}
+		}
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate basicGetPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(Predicate newPredicate) {
+		Predicate oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.PREDICATE_REFERENCE__PREDICATE, oldPredicate, predicate));
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		return getPredicate().evaluate(time, timerPeriod, action);
+	} // evaluate
+	
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_REFERENCE__PREDICATE:
+				if (resolve) return getPredicate();
+				return basicGetPredicate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_REFERENCE__PREDICATE:
+				setPredicate((Predicate)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_REFERENCE__PREDICATE:
+				setPredicate((Predicate)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.PREDICATE_REFERENCE__PREDICATE:
+				return predicate != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //PredicateReferenceImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TestImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TestImpl.java
new file mode 100644
index 0000000..aa3baf8
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TestImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.Test;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class TestImpl extends PredicateImpl implements Test {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.TEST;
+	}
+
+} //TestImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TimeTestImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TimeTestImpl.java
new file mode 100644
index 0000000..67add71
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TimeTestImpl.java
@@ -0,0 +1,48 @@
+// TimeTestImpl.java
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.TimeTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class TimeTestImpl extends TestImpl implements TimeTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TimeTestImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.TIME_TEST;
+	}
+	
+} //TimeTestImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TrueImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TrueImpl.java
new file mode 100644
index 0000000..7ad7852
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/TrueImpl.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.True;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>True</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TrueImpl extends TestImpl implements True {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TrueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.TRUE;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.impl.PredicateImpl#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public boolean evaluate(STEMTime time, long timerPeriod, Decorator action) {
+		return true;
+	}
+
+} //TrueImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/UnaryBooleanOperatorImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/UnaryBooleanOperatorImpl.java
new file mode 100644
index 0000000..59a9776
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/impl/UnaryBooleanOperatorImpl.java
@@ -0,0 +1,184 @@
+package org.eclipse.stem.core.predicate.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.UnaryBooleanOperator;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Unary Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.impl.UnaryBooleanOperatorImpl#getOperand <em>Operand</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class UnaryBooleanOperatorImpl extends BooleanOperatorImpl implements UnaryBooleanOperator {
+	/**
+	 * The cached value of the '{@link #getOperand() <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperand()
+	 * @generated
+	 * @ordered
+	 */
+	protected Predicate operand;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UnaryBooleanOperatorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate getOperand() {
+		return operand;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOperand(Predicate newOperand, NotificationChain msgs) {
+		Predicate oldOperand = operand;
+		operand = newOperand;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND, oldOperand, newOperand);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperand(Predicate newOperand) {
+		if (newOperand != operand) {
+			NotificationChain msgs = null;
+			if (operand != null)
+				msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND, null, msgs);
+			if (newOperand != null)
+				msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND, null, msgs);
+			msgs = basicSetOperand(newOperand, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND, newOperand, newOperand));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				return basicSetOperand(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				return getOperand();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				setOperand((Predicate)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				setOperand((Predicate)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				return operand != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //UnaryBooleanOperatorImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AbsoluteTimeTestItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AbsoluteTimeTestItemProvider.java
new file mode 100644
index 0000000..0e07ccb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AbsoluteTimeTestItemProvider.java
@@ -0,0 +1,158 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.predicate.AbsoluteTimeTest;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.AbsoluteTimeTest} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AbsoluteTimeTestItemProvider
+	extends TimeTestItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AbsoluteTimeTestItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTimePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_AbsoluteTimeTest_time_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_AbsoluteTimeTest_time_feature", "_UI_AbsoluteTimeTest_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 PredicatePackage.Literals.ABSOLUTE_TIME_TEST__TIME,
+				 true,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns AbsoluteTimeTest.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/AbsoluteTimeTest")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final AbsoluteTimeTest att = (AbsoluteTimeTest)object;
+		return "At " + att.getTime().toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_AbsoluteTimeTest_type"); //$NON-NLS-1$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(AbsoluteTimeTest.class)) {
+			case PredicatePackage.ABSOLUTE_TIME_TEST__TIME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AndItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AndItemProvider.java
new file mode 100644
index 0000000..89fc459
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/AndItemProvider.java
@@ -0,0 +1,124 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.And} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AndItemProvider
+	extends NaryBooleanOperatorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AndItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns And.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/And")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return "&";
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_And_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanExpressionItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanExpressionItemProvider.java
new file mode 100644
index 0000000..b0e4eed
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanExpressionItemProvider.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.BooleanExpression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class BooleanExpressionItemProvider
+	extends PredicateItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BooleanExpressionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_BooleanExpression_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanOperatorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanOperatorItemProvider.java
new file mode 100644
index 0000000..3c0778e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/BooleanOperatorItemProvider.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.BooleanOperator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class BooleanOperatorItemProvider
+	extends BooleanExpressionItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BooleanOperatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_BooleanOperator_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/ElapsedTimeTestItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/ElapsedTimeTestItemProvider.java
new file mode 100644
index 0000000..f6af5a5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/ElapsedTimeTestItemProvider.java
@@ -0,0 +1,161 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.core.predicate.ElapsedTimeTest;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.ElapsedTimeTest} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ElapsedTimeTestItemProvider
+	extends TimeTestItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElapsedTimeTestItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNumberofDaysPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Numberof Days feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNumberofDaysPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ElapsedTimeTest_numberofDays_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ElapsedTimeTest_numberofDays_feature", "_UI_ElapsedTimeTest_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 PredicatePackage.Literals.ELAPSED_TIME_TEST__NUMBEROF_DAYS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns ElapsedTimeTest.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ElapsedTimeTest")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final ElapsedTimeTest ett = (ElapsedTimeTest)object;
+		return "After " +  ett.getNumberofDays() + " days";
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		ElapsedTimeTest elapsedTimeTest = (ElapsedTimeTest)object;
+		return getString("_UI_ElapsedTimeTest_type") + " " + elapsedTimeTest.isReferenceTimeValid(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ElapsedTimeTest.class)) {
+			case PredicatePackage.ELAPSED_TIME_TEST__NUMBEROF_DAYS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+} // ElapsedTimeTestItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/FalseItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/FalseItemProvider.java
new file mode 100644
index 0000000..dbebab6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/FalseItemProvider.java
@@ -0,0 +1,125 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.False} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FalseItemProvider
+	extends TestItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FalseItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns False.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/False")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return "False";
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_False_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateExpressionItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateExpressionItemProvider.java
new file mode 100644
index 0000000..b67608d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateExpressionItemProvider.java
@@ -0,0 +1,306 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.predicate.IdentifiablePredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.IdentifiablePredicateExpression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdentifiablePredicateExpressionItemProvider
+	extends IdentifiablePredicateItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiablePredicateExpressionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Predicate.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Predicate"));
+	}
+	
+	/**
+	 * This returns IdentifiablePredicateExpression.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getImageGen(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/IdentifiablePredicateExpression")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IdentifiableItemProvider#getText(Object)
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		// Use the dublin core title if it's available, otherwise use
+		// the URI
+		final Identifiable identifiable = (Identifiable)object;
+		
+		final String title = identifiable.getDublinCore().getTitle();
+		// Was a title specified?
+		if (title != null && !title.equals("")) {
+			// Yes
+			return title;
+		}
+		else {
+			return identifiable.getURI().toString();
+		}
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((IdentifiablePredicateExpression)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IdentifiablePredicateExpression_type") : //$NON-NLS-1$
+			getString("_UI_IdentifiablePredicateExpression_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(IdentifiablePredicateExpression.class)) {
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION__PREDICATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+//				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+//				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	protected void collectNewChildDescriptorsGen(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateItemProvider.java
new file mode 100644
index 0000000..ea8500f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiablePredicateItemProvider.java
@@ -0,0 +1,121 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.predicate.IdentifiablePredicate;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.IdentifiablePredicate} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdentifiablePredicateItemProvider
+	extends IdentifiableItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiablePredicateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((IdentifiablePredicate)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IdentifiablePredicate_type") : //$NON-NLS-1$
+			getString("_UI_IdentifiablePredicate_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiableTestItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiableTestItemProvider.java
new file mode 100644
index 0000000..9798f22
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/IdentifiableTestItemProvider.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.predicate.IdentifiableTest;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.IdentifiableTest} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdentifiableTestItemProvider
+	extends IdentifiablePredicateItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableTestItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((IdentifiableTest)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_IdentifiableTest_type") : //$NON-NLS-1$
+			getString("_UI_IdentifiableTest_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NaryBooleanOperatorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NaryBooleanOperatorItemProvider.java
new file mode 100644
index 0000000..e9e6581
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NaryBooleanOperatorItemProvider.java
@@ -0,0 +1,256 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.predicate.NaryBooleanOperator;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.NaryBooleanOperator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NaryBooleanOperatorItemProvider
+	extends BooleanOperatorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NaryBooleanOperatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_NaryBooleanOperator_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(NaryBooleanOperator.class)) {
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR__OPERANDS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+//				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+//				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	} // collectNewChildDescriptors
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	protected void collectNewChildDescriptorsGen(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.NARY_BOOLEAN_OPERATOR__OPERANDS,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	}
+
+	
+} // NaryBooleanOperatorItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NotItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NotItemProvider.java
new file mode 100644
index 0000000..3cf928f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/NotItemProvider.java
@@ -0,0 +1,124 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.Not} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NotItemProvider
+	extends UnaryBooleanOperatorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Not.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Not")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return "!";
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_Not_type"); //$NON-NLS-1$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/OrItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/OrItemProvider.java
new file mode 100644
index 0000000..9dea7b3
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/OrItemProvider.java
@@ -0,0 +1,125 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.Or} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OrItemProvider
+	extends NaryBooleanOperatorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OrItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Or.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Or")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Or_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_Or_type"); //$NON-NLS-1$
+	}
+
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateExpressionItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateExpressionItemProvider.java
new file mode 100644
index 0000000..b3e812c
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateExpressionItemProvider.java
@@ -0,0 +1,288 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.predicate.PredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.PredicateExpression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateExpressionItemProvider
+	extends BooleanExpressionItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateExpressionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns PredicateExpression.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Predicate"));
+	}
+	
+	/**
+	 * This returns PredicateExpression.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImageGen(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PredicateExpression")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return "()";
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_PredicateExpression_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(PredicateExpression.class)) {
+			case PredicatePackage.PREDICATE_EXPRESSION__PREDICATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+//				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+//				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+		
+		newChildDescriptors.add
+		(createChildParameter
+			(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+			 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+	newChildDescriptors.add
+		(createChildParameter
+			(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+			 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+		
+	} // collectNewChildDescriptors
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	protected void collectNewChildDescriptorsGen(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.PREDICATE_EXPRESSION__PREDICATE,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	}
+	
+} // PredicateExpressionItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProvider.java
new file mode 100644
index 0000000..f32e2cc
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProvider.java
@@ -0,0 +1,148 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.Predicate} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateItemProvider
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Predicate.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Predicate"));
+	}
+	
+	/**
+	 * This returns Predicate.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getImageGen(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Predicate")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Predicate_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isWrappingNeeded(java.lang.Object)
+	 */
+	@Override
+	protected boolean isWrappingNeeded(Object object) {
+		return true;
+	}
+
+	
+} // 
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProviderAdapterFactory.java
new file mode 100644
index 0000000..b8a5b9f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateItemProviderAdapterFactory.java
@@ -0,0 +1,425 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.predicate.util.PredicateAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateItemProviderAdapterFactory extends PredicateAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.And} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AndItemProvider andItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.And}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAndAdapter() {
+		if (andItemProvider == null) {
+			andItemProvider = new AndItemProvider(this);
+		}
+
+		return andItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.False} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FalseItemProvider falseItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.False}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createFalseAdapter() {
+		if (falseItemProvider == null) {
+			falseItemProvider = new FalseItemProvider(this);
+		}
+
+		return falseItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.Not} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NotItemProvider notItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.Not}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createNotAdapter() {
+		if (notItemProvider == null) {
+			notItemProvider = new NotItemProvider(this);
+		}
+
+		return notItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.Or} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OrItemProvider orItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.Or}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createOrAdapter() {
+		if (orItemProvider == null) {
+			orItemProvider = new OrItemProvider(this);
+		}
+
+		return orItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.PredicateReference} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateReferenceItemProvider predicateReferenceItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.PredicateReference}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPredicateReferenceAdapter() {
+		if (predicateReferenceItemProvider == null) {
+			predicateReferenceItemProvider = new PredicateReferenceItemProvider(this);
+		}
+
+		return predicateReferenceItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.True} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TrueItemProvider trueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.True}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTrueAdapter() {
+		if (trueItemProvider == null) {
+			trueItemProvider = new TrueItemProvider(this);
+		}
+
+		return trueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.PredicateExpression} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateExpressionItemProvider predicateExpressionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.PredicateExpression}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPredicateExpressionAdapter() {
+		if (predicateExpressionItemProvider == null) {
+			predicateExpressionItemProvider = new PredicateExpressionItemProvider(this);
+		}
+
+		return predicateExpressionItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.IdentifiablePredicateExpression} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IdentifiablePredicateExpressionItemProvider identifiablePredicateExpressionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.IdentifiablePredicateExpression}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createIdentifiablePredicateExpressionAdapter() {
+		if (identifiablePredicateExpressionItemProvider == null) {
+			identifiablePredicateExpressionItemProvider = new IdentifiablePredicateExpressionItemProvider(this);
+		}
+
+		return identifiablePredicateExpressionItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.AbsoluteTimeTest} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AbsoluteTimeTestItemProvider absoluteTimeTestItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.AbsoluteTimeTest}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAbsoluteTimeTestAdapter() {
+		if (absoluteTimeTestItemProvider == null) {
+			absoluteTimeTestItemProvider = new AbsoluteTimeTestItemProvider(this);
+		}
+
+		return absoluteTimeTestItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.predicate.ElapsedTimeTest} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ElapsedTimeTestItemProvider elapsedTimeTestItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.predicate.ElapsedTimeTest}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createElapsedTimeTestAdapter() {
+		if (elapsedTimeTestItemProvider == null) {
+			elapsedTimeTestItemProvider = new ElapsedTimeTestItemProvider(this);
+		}
+
+		return elapsedTimeTestItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (andItemProvider != null) andItemProvider.dispose();
+		if (falseItemProvider != null) falseItemProvider.dispose();
+		if (notItemProvider != null) notItemProvider.dispose();
+		if (orItemProvider != null) orItemProvider.dispose();
+		if (predicateReferenceItemProvider != null) predicateReferenceItemProvider.dispose();
+		if (trueItemProvider != null) trueItemProvider.dispose();
+		if (predicateExpressionItemProvider != null) predicateExpressionItemProvider.dispose();
+		if (identifiablePredicateExpressionItemProvider != null) identifiablePredicateExpressionItemProvider.dispose();
+		if (absoluteTimeTestItemProvider != null) absoluteTimeTestItemProvider.dispose();
+		if (elapsedTimeTestItemProvider != null) elapsedTimeTestItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateReferenceItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateReferenceItemProvider.java
new file mode 100644
index 0000000..0b85b58
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/PredicateReferenceItemProvider.java
@@ -0,0 +1,153 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.PredicateReference;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.PredicateReference} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateReferenceItemProvider
+	extends PredicateItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateReferenceItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PredicatePackage.Literals.PREDICATE_REFERENCE__PREDICATE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns PredicateReference.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PredicateReference")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_PredicateReference_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(PredicateReference.class)) {
+			case PredicatePackage.PREDICATE_REFERENCE__PREDICATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TestItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TestItemProvider.java
new file mode 100644
index 0000000..2327a9a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TestItemProvider.java
@@ -0,0 +1,114 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.Test} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestItemProvider
+	extends PredicateItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns Test.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Test")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_Test_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TimeTestItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TimeTestItemProvider.java
new file mode 100644
index 0000000..c60fcd4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TimeTestItemProvider.java
@@ -0,0 +1,101 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.TimeTest} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TimeTestItemProvider
+	extends TestItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TimeTestItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_TimeTest_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TrueItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TrueItemProvider.java
new file mode 100644
index 0000000..215a039
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/TrueItemProvider.java
@@ -0,0 +1,125 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.True} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TrueItemProvider
+	extends TestItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TrueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns True.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/True")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return "True";
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		return getString("_UI_True_type"); //$NON-NLS-1$
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/UnaryBooleanOperatorItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/UnaryBooleanOperatorItemProvider.java
new file mode 100644
index 0000000..ff7db18
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/provider/UnaryBooleanOperatorItemProvider.java
@@ -0,0 +1,255 @@
+package org.eclipse.stem.core.predicate.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.UnaryBooleanOperator;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.predicate.UnaryBooleanOperator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class UnaryBooleanOperatorItemProvider
+	extends BooleanOperatorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnaryBooleanOperatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_UnaryBooleanOperator_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(UnaryBooleanOperator.class)) {
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR__OPERAND:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+//				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+//		newChildDescriptors.add
+//			(createChildParameter
+//				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+//				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	} // collectNewChildDescriptors
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	protected void collectNewChildDescriptorsGen(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createAnd()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createFalse()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createNot()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createOr()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createPredicateReference()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createTrue()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createPredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createAbsoluteTimeTest()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(PredicatePackage.Literals.UNARY_BOOLEAN_OPERATOR__OPERAND,
+				 PredicateFactory.eINSTANCE.createElapsedTimeTest()));
+	}
+
+} // UnaryBooleanOperatorItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateAdapterFactory.java
new file mode 100644
index 0000000..97baa23
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateAdapterFactory.java
@@ -0,0 +1,491 @@
+package org.eclipse.stem.core.predicate.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.predicate.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.predicate.PredicatePackage
+ * @generated
+ */
+public class PredicateAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PredicatePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = PredicatePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PredicateSwitch<Adapter> modelSwitch =
+		new PredicateSwitch<Adapter>() {
+			@Override
+			public Adapter caseAnd(And object) {
+				return createAndAdapter();
+			}
+			@Override
+			public Adapter caseBooleanExpression(BooleanExpression object) {
+				return createBooleanExpressionAdapter();
+			}
+			@Override
+			public Adapter caseBooleanOperator(BooleanOperator object) {
+				return createBooleanOperatorAdapter();
+			}
+			@Override
+			public Adapter caseFalse(False object) {
+				return createFalseAdapter();
+			}
+			@Override
+			public Adapter caseNaryBooleanOperator(NaryBooleanOperator object) {
+				return createNaryBooleanOperatorAdapter();
+			}
+			@Override
+			public Adapter caseNot(Not object) {
+				return createNotAdapter();
+			}
+			@Override
+			public Adapter caseOr(Or object) {
+				return createOrAdapter();
+			}
+			@Override
+			public Adapter casePredicate(Predicate object) {
+				return createPredicateAdapter();
+			}
+			@Override
+			public Adapter casePredicateReference(PredicateReference object) {
+				return createPredicateReferenceAdapter();
+			}
+			@Override
+			public Adapter caseTest(Test object) {
+				return createTestAdapter();
+			}
+			@Override
+			public Adapter caseTrue(True object) {
+				return createTrueAdapter();
+			}
+			@Override
+			public Adapter caseUnaryBooleanOperator(UnaryBooleanOperator object) {
+				return createUnaryBooleanOperatorAdapter();
+			}
+			@Override
+			public Adapter casePredicateExpression(PredicateExpression object) {
+				return createPredicateExpressionAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiablePredicate(IdentifiablePredicate object) {
+				return createIdentifiablePredicateAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiablePredicateExpression(IdentifiablePredicateExpression object) {
+				return createIdentifiablePredicateExpressionAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiableTest(IdentifiableTest object) {
+				return createIdentifiableTestAdapter();
+			}
+			@Override
+			public Adapter caseTimeTest(TimeTest object) {
+				return createTimeTestAdapter();
+			}
+			@Override
+			public Adapter caseAbsoluteTimeTest(AbsoluteTimeTest object) {
+				return createAbsoluteTimeTestAdapter();
+			}
+			@Override
+			public Adapter caseElapsedTimeTest(ElapsedTimeTest object) {
+				return createElapsedTimeTestAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.And <em>And</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.And
+	 * @generated
+	 */
+	public Adapter createAndAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.BooleanExpression <em>Boolean Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.BooleanExpression
+	 * @generated
+	 */
+	public Adapter createBooleanExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.BooleanOperator <em>Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.BooleanOperator
+	 * @generated
+	 */
+	public Adapter createBooleanOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.False <em>False</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.False
+	 * @generated
+	 */
+	public Adapter createFalseAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.NaryBooleanOperator <em>Nary Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.NaryBooleanOperator
+	 * @generated
+	 */
+	public Adapter createNaryBooleanOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.Not <em>Not</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.Not
+	 * @generated
+	 */
+	public Adapter createNotAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.Or <em>Or</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.Or
+	 * @generated
+	 */
+	public Adapter createOrAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.Predicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.Predicate
+	 * @generated
+	 */
+	public Adapter createPredicateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.PredicateReference <em>Reference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.PredicateReference
+	 * @generated
+	 */
+	public Adapter createPredicateReferenceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.Test <em>Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.Test
+	 * @generated
+	 */
+	public Adapter createTestAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.True <em>True</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.True
+	 * @generated
+	 */
+	public Adapter createTrueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.UnaryBooleanOperator <em>Unary Boolean Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.UnaryBooleanOperator
+	 * @generated
+	 */
+	public Adapter createUnaryBooleanOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.PredicateExpression <em>Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.PredicateExpression
+	 * @generated
+	 */
+	public Adapter createPredicateExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.IdentifiablePredicate <em>Identifiable Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.IdentifiablePredicate
+	 * @generated
+	 */
+	public Adapter createIdentifiablePredicateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.IdentifiablePredicateExpression <em>Identifiable Predicate Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.IdentifiablePredicateExpression
+	 * @generated
+	 */
+	public Adapter createIdentifiablePredicateExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.IdentifiableTest <em>Identifiable Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.IdentifiableTest
+	 * @generated
+	 */
+	public Adapter createIdentifiableTestAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.TimeTest <em>Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.TimeTest
+	 * @generated
+	 */
+	public Adapter createTimeTestAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.AbsoluteTimeTest <em>Absolute Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.AbsoluteTimeTest
+	 * @generated
+	 */
+	public Adapter createAbsoluteTimeTestAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest <em>Elapsed Time Test</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest
+	 * @generated
+	 */
+	public Adapter createElapsedTimeTestAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //PredicateAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateSwitch.java
new file mode 100644
index 0000000..dc1d2b7
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/predicate/util/PredicateSwitch.java
@@ -0,0 +1,595 @@
+package org.eclipse.stem.core.predicate.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.predicate.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.predicate.PredicatePackage
+ * @generated
+ */
+public class PredicateSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static PredicatePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateSwitch() {
+		if (modelPackage == null) {
+			modelPackage = PredicatePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case PredicatePackage.AND: {
+				And and = (And)theEObject;
+				T1 result = caseAnd(and);
+				if (result == null) result = caseNaryBooleanOperator(and);
+				if (result == null) result = caseBooleanOperator(and);
+				if (result == null) result = caseBooleanExpression(and);
+				if (result == null) result = casePredicate(and);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.BOOLEAN_EXPRESSION: {
+				BooleanExpression booleanExpression = (BooleanExpression)theEObject;
+				T1 result = caseBooleanExpression(booleanExpression);
+				if (result == null) result = casePredicate(booleanExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.BOOLEAN_OPERATOR: {
+				BooleanOperator booleanOperator = (BooleanOperator)theEObject;
+				T1 result = caseBooleanOperator(booleanOperator);
+				if (result == null) result = caseBooleanExpression(booleanOperator);
+				if (result == null) result = casePredicate(booleanOperator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.FALSE: {
+				False false_ = (False)theEObject;
+				T1 result = caseFalse(false_);
+				if (result == null) result = caseTest(false_);
+				if (result == null) result = casePredicate(false_);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.NARY_BOOLEAN_OPERATOR: {
+				NaryBooleanOperator naryBooleanOperator = (NaryBooleanOperator)theEObject;
+				T1 result = caseNaryBooleanOperator(naryBooleanOperator);
+				if (result == null) result = caseBooleanOperator(naryBooleanOperator);
+				if (result == null) result = caseBooleanExpression(naryBooleanOperator);
+				if (result == null) result = casePredicate(naryBooleanOperator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.NOT: {
+				Not not = (Not)theEObject;
+				T1 result = caseNot(not);
+				if (result == null) result = caseUnaryBooleanOperator(not);
+				if (result == null) result = caseBooleanOperator(not);
+				if (result == null) result = caseBooleanExpression(not);
+				if (result == null) result = casePredicate(not);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.OR: {
+				Or or = (Or)theEObject;
+				T1 result = caseOr(or);
+				if (result == null) result = caseNaryBooleanOperator(or);
+				if (result == null) result = caseBooleanOperator(or);
+				if (result == null) result = caseBooleanExpression(or);
+				if (result == null) result = casePredicate(or);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.PREDICATE: {
+				Predicate predicate = (Predicate)theEObject;
+				T1 result = casePredicate(predicate);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.PREDICATE_REFERENCE: {
+				PredicateReference predicateReference = (PredicateReference)theEObject;
+				T1 result = casePredicateReference(predicateReference);
+				if (result == null) result = casePredicate(predicateReference);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.TEST: {
+				Test test = (Test)theEObject;
+				T1 result = caseTest(test);
+				if (result == null) result = casePredicate(test);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.TRUE: {
+				True true_ = (True)theEObject;
+				T1 result = caseTrue(true_);
+				if (result == null) result = caseTest(true_);
+				if (result == null) result = casePredicate(true_);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.UNARY_BOOLEAN_OPERATOR: {
+				UnaryBooleanOperator unaryBooleanOperator = (UnaryBooleanOperator)theEObject;
+				T1 result = caseUnaryBooleanOperator(unaryBooleanOperator);
+				if (result == null) result = caseBooleanOperator(unaryBooleanOperator);
+				if (result == null) result = caseBooleanExpression(unaryBooleanOperator);
+				if (result == null) result = casePredicate(unaryBooleanOperator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.PREDICATE_EXPRESSION: {
+				PredicateExpression predicateExpression = (PredicateExpression)theEObject;
+				T1 result = casePredicateExpression(predicateExpression);
+				if (result == null) result = caseBooleanExpression(predicateExpression);
+				if (result == null) result = casePredicate(predicateExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.IDENTIFIABLE_PREDICATE: {
+				IdentifiablePredicate identifiablePredicate = (IdentifiablePredicate)theEObject;
+				T1 result = caseIdentifiablePredicate(identifiablePredicate);
+				if (result == null) result = caseIdentifiable(identifiablePredicate);
+				if (result == null) result = casePredicate(identifiablePredicate);
+				if (result == null) result = caseComparable(identifiablePredicate);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.IDENTIFIABLE_PREDICATE_EXPRESSION: {
+				IdentifiablePredicateExpression identifiablePredicateExpression = (IdentifiablePredicateExpression)theEObject;
+				T1 result = caseIdentifiablePredicateExpression(identifiablePredicateExpression);
+				if (result == null) result = caseIdentifiablePredicate(identifiablePredicateExpression);
+				if (result == null) result = casePredicateExpression(identifiablePredicateExpression);
+				if (result == null) result = caseIdentifiable(identifiablePredicateExpression);
+				if (result == null) result = caseBooleanExpression(identifiablePredicateExpression);
+				if (result == null) result = caseComparable(identifiablePredicateExpression);
+				if (result == null) result = casePredicate(identifiablePredicateExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.IDENTIFIABLE_TEST: {
+				IdentifiableTest identifiableTest = (IdentifiableTest)theEObject;
+				T1 result = caseIdentifiableTest(identifiableTest);
+				if (result == null) result = caseIdentifiablePredicate(identifiableTest);
+				if (result == null) result = caseTest(identifiableTest);
+				if (result == null) result = caseIdentifiable(identifiableTest);
+				if (result == null) result = casePredicate(identifiableTest);
+				if (result == null) result = caseComparable(identifiableTest);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.TIME_TEST: {
+				TimeTest timeTest = (TimeTest)theEObject;
+				T1 result = caseTimeTest(timeTest);
+				if (result == null) result = caseTest(timeTest);
+				if (result == null) result = casePredicate(timeTest);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.ABSOLUTE_TIME_TEST: {
+				AbsoluteTimeTest absoluteTimeTest = (AbsoluteTimeTest)theEObject;
+				T1 result = caseAbsoluteTimeTest(absoluteTimeTest);
+				if (result == null) result = caseTimeTest(absoluteTimeTest);
+				if (result == null) result = caseTest(absoluteTimeTest);
+				if (result == null) result = casePredicate(absoluteTimeTest);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case PredicatePackage.ELAPSED_TIME_TEST: {
+				ElapsedTimeTest elapsedTimeTest = (ElapsedTimeTest)theEObject;
+				T1 result = caseElapsedTimeTest(elapsedTimeTest);
+				if (result == null) result = caseTimeTest(elapsedTimeTest);
+				if (result == null) result = caseTest(elapsedTimeTest);
+				if (result == null) result = casePredicate(elapsedTimeTest);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>And</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>And</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAnd(And object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Boolean Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Boolean Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseBooleanExpression(BooleanExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Boolean Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Boolean Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseBooleanOperator(BooleanOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>False</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>False</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseFalse(False object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Nary Boolean Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Nary Boolean Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNaryBooleanOperator(NaryBooleanOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Not</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Not</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNot(Not object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Or</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Or</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseOr(Or object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Predicate</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Predicate</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePredicate(Predicate object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Reference</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Reference</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePredicateReference(PredicateReference object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTest(Test object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>True</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>True</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTrue(True object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Unary Boolean Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Unary Boolean Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseUnaryBooleanOperator(UnaryBooleanOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePredicateExpression(PredicateExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable Predicate</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable Predicate</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiablePredicate(IdentifiablePredicate object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable Predicate Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable Predicate Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiablePredicateExpression(IdentifiablePredicateExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable Test</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiableTest(IdentifiableTest object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Time Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Time Test</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTimeTest(TimeTest object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Absolute Time Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Absolute Time Test</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAbsoluteTimeTest(AbsoluteTimeTest object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Elapsed Time Test</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Elapsed Time Test</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseElapsedTimeTest(ElapsedTimeTest object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //PredicateSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/Scenario.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/Scenario.java
new file mode 100644
index 0000000..08a1e72
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/Scenario.java
@@ -0,0 +1,246 @@
+// Scenario.java
+package org.eclipse.stem.core.scenario;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.solver.Solver;
+
+/**
+ * A <code>Scenario</code> combines all of the components required to create
+ * and execute a simulation. These are a {@link Model}, a {@link Sequencer},
+ * and a set of <code>Scenario</code> specific {@link Decorator}'s.
+ * <p>
+ * The {@link Model} contains the details of how to construct the
+ * <em>canonical graph</em> (see {@link Graph}. This graph is what the
+ * <code>Scenario</code> uses to represent the state of a simulation.
+ * <p>
+ * The {@link Sequencer} is used by the <code>Scenario</code> to determine the
+ * sequence of points in time through which the <code>Scenario</code> will
+ * {@link #step()} as it computes successive simulation states.
+ * <p>
+ * The "scenario decorators" implement that part of the simulation computation
+ * that is specific to the <code>Scenario</code>.
+ * <p>
+ * A <code>Scenario</code> implements all of the logic necessary to sequence
+ * through each step of a simulation and can be executed outside of the Eclipse
+ * workbench.
+ * </p>
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * 
+ * @see Model
+ * @see Graph
+ * 
+ * @model
+ */
+public interface Scenario extends Identifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * scenario URI.
+	 */
+	String URI_TYPE_SCENARIO_SEGMENT = "scenario";
+	
+	/**
+	 * The {@link Model} contains all of the details required to construct the
+	 * canonical graph that the scenario will use to represent the state of a
+	 * simulation.
+	 * 
+	 * @return the Scenario's {@link Model}.
+	 * @model containment="false"
+	 */
+	Model getModel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.scenario.Scenario#getModel <em>Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Model</em>' reference.
+	 * @see #getModel()
+	 * @generated
+	 */
+	void setModel(Model value);
+
+	/**
+	 * The {@link Sequencer} is the component that determines the time of the
+	 * simulation. It generates {@link org.eclipse.stem.core.model.STEMTime}
+	 * values that are then used by the {@link Decorator}'s to update the
+	 * {@link org.eclipse.stem.core.graph.Label}'s in the canonical graph.
+	 * 
+	 * @model containment="false"
+	 */
+	Sequencer getSequencer();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.scenario.Scenario#getSequencer <em>Sequencer</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sequencer</em>' reference.
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	void setSequencer(Sequencer value);
+
+	/**
+	 * The "scenario decorators" are the {@link Decorator}'s that can
+	 * "decorate" (i.e., modify) the canonical {@link Graph} after it has been
+	 * generated by the {@link Model}. Typically, these decorators are used to
+	 * provide scenario specific initialization of a simulation independent of
+	 * the more general initialization provided by the decorators in the
+	 * {@link Model}.
+	 * <p>
+	 * For instance, in the case of a disease simulation, the model decorators
+	 * would include one that implements a disease model. That decorator would
+	 * have added labels to appropriate nodes to represent the state of the
+	 * disease at specific geographic locations (likely most of the
+	 * {@link Nodes} in the {@link Graph}). However, none of the disease states
+	 * would (likely) include infected population members. The job of
+	 * introducing the infected population members would be left up to a
+	 * decorator contained in the scenario. Thus, one could reuse the same
+	 * underlying {@link Model} in different {@link Scenario}'s. Each
+	 * {@link Scenario}, in turn, would contain a {@link Decorator} configured
+	 * for a different infection starting point.
+	 * <p>
+	 * 
+	 * @see #initialize()
+	 * @see #getCanonicalGraph()
+	 * 
+	 * @return the Scenario Decorators
+	 * @model type="org.eclipse.stem.core.model.Decorator"
+	 *        containment="false"
+	 */
+	EList<Decorator> getScenarioDecorators();
+
+	/**
+	 * The canonical {@link Graph} is created by the scenario's {@link Model}
+	 * when the method {@link #initialize()} is invoked. This occurs either by a
+	 * direct call or more typically in the {@link #step()} method.
+	 * 
+	 * @return the canonical graph, or null if the Scenario hasn't been
+	 *         initialized.
+	 * 
+	 * @model resolveProxies="false" changeable="false"
+	 */
+	Graph getCanonicalGraph();
+
+	/**
+	 * Returns the value of the '<em><b>Progress</b></em>' attribute.
+	 * The default value is <code>"0.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Progress</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Progress</em>' attribute.
+	 * @see #setProgress(double)
+	 * @see org.eclipse.stem.core.scenario.ScenarioPackage#getScenario_Progress()
+	 * @model default="0.0"
+	 * @generated
+	 */
+	double getProgress();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.scenario.Scenario#getProgress <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Progress</em>' attribute.
+	 * @see #getProgress()
+	 * @generated
+	 */
+	void setProgress(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Solver</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Solver</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Solver</em>' containment reference.
+	 * @see #setSolver(Solver)
+	 * @see org.eclipse.stem.core.scenario.ScenarioPackage#getScenario_Solver()
+	 * @model containment="true"
+	 * @generated
+	 */
+	Solver getSolver();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.scenario.Scenario#getSolver <em>Solver</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Solver</em>' containment reference.
+	 * @see #getSolver()
+	 * @generated
+	 */
+	void setSolver(Solver value);
+
+	/**
+	 * Sequence the model by one simulation step. This performs any
+	 * initialization required to create the canonical {@link Graph}, if
+	 * necessary.
+	 * 
+	 * @param l Listener that needs to be notified of progress of decorators
+	 * @see #initialize()
+	 * @return <code>true</code> if the sequence can continue,
+	 *         <code>false</code> if the sequence has completed.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean step();
+	
+	/**
+	 * Reset the state of the canonical {@link Graph} to its initial state. This
+	 * does not delete and recreate the canonical graph.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+
+	/**
+	 * Create the canonical {@link Graph} and perform initialization steps
+	 * required to sequence the scenario. This method is called by
+	 * {@link #step()} when it needs to create the canonical {@link Graph}. It
+	 * can be called before a call to {@link #step()} to create the
+	 * {@link Graph}.
+	 * 
+	 * @see #getCanonicalGraph()
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void initialize();
+
+	/**
+	 * @return the title of the scenario as specified by its
+	 *         {@link org.eclipse.stem.core.common.DublinCore}, or, if no
+	 *         title is defined, return the empty string.
+	 * 
+	 * @see Identifiable#getDublinCore()
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	String produceTitle();
+} // Scenario
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioFactory.java
new file mode 100644
index 0000000..68875aa
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.core.scenario;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.scenario.ScenarioPackage
+ * @generated
+ */
+public interface ScenarioFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ScenarioFactory eINSTANCE = org.eclipse.stem.core.scenario.impl.ScenarioFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Scenario</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Scenario</em>'.
+	 * @generated
+	 */
+	Scenario createScenario();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ScenarioPackage getScenarioPackage();
+
+} //ScenarioFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioPackage.java
new file mode 100644
index 0000000..7c07b84
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/ScenarioPackage.java
@@ -0,0 +1,328 @@
+package org.eclipse.stem.core.scenario;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.scenario.ScenarioFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ScenarioPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "scenario";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/scenario.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.scenario";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ScenarioPackage eINSTANCE = org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl <em>Scenario</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.scenario.impl.ScenarioImpl
+	 * @see org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl#getScenario()
+	 * @generated
+	 */
+	int SCENARIO = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__MODEL = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Sequencer</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__SEQUENCER = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Scenario Decorators</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__SCENARIO_DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Canonical Graph</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__CANONICAL_GRAPH = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__PROGRESS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Solver</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO__SOLVER = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Scenario</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCENARIO_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.scenario.Scenario <em>Scenario</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Scenario</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario
+	 * @generated
+	 */
+	EClass getScenario();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.scenario.Scenario#getModel <em>Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Model</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getModel()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EReference getScenario_Model();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.scenario.Scenario#getSequencer <em>Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Sequencer</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getSequencer()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EReference getScenario_Sequencer();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.core.scenario.Scenario#getScenarioDecorators <em>Scenario Decorators</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Scenario Decorators</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getScenarioDecorators()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EReference getScenario_ScenarioDecorators();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.scenario.Scenario#getCanonicalGraph <em>Canonical Graph</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Canonical Graph</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getCanonicalGraph()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EReference getScenario_CanonicalGraph();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.scenario.Scenario#getProgress <em>Progress</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Progress</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getProgress()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EAttribute getScenario_Progress();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.scenario.Scenario#getSolver <em>Solver</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Solver</em>'.
+	 * @see org.eclipse.stem.core.scenario.Scenario#getSolver()
+	 * @see #getScenario()
+	 * @generated
+	 */
+	EReference getScenario_Solver();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ScenarioFactory getScenarioFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl <em>Scenario</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.scenario.impl.ScenarioImpl
+		 * @see org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl#getScenario()
+		 * @generated
+		 */
+		EClass SCENARIO = eINSTANCE.getScenario();
+
+		/**
+		 * The meta object literal for the '<em><b>Model</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SCENARIO__MODEL = eINSTANCE.getScenario_Model();
+
+		/**
+		 * The meta object literal for the '<em><b>Sequencer</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SCENARIO__SEQUENCER = eINSTANCE.getScenario_Sequencer();
+
+		/**
+		 * The meta object literal for the '<em><b>Scenario Decorators</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SCENARIO__SCENARIO_DECORATORS = eINSTANCE.getScenario_ScenarioDecorators();
+
+		/**
+		 * The meta object literal for the '<em><b>Canonical Graph</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SCENARIO__CANONICAL_GRAPH = eINSTANCE.getScenario_CanonicalGraph();
+
+		/**
+		 * The meta object literal for the '<em><b>Progress</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SCENARIO__PROGRESS = eINSTANCE.getScenario_Progress();
+
+		/**
+		 * The meta object literal for the '<em><b>Solver</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SCENARIO__SOLVER = eINSTANCE.getScenario_Solver();
+
+}
+
+} //ScenarioPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioFactoryImpl.java
new file mode 100644
index 0000000..e54d66d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.scenario.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.scenario.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ScenarioFactoryImpl extends EFactoryImpl implements ScenarioFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ScenarioFactory init() {
+		try {
+			ScenarioFactory theScenarioFactory = (ScenarioFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/scenario.ecore"); //$NON-NLS-1$ 
+			if (theScenarioFactory != null) {
+				return theScenarioFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ScenarioFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ScenarioPackage.SCENARIO: return createScenario();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Scenario createScenario() {
+		ScenarioImpl scenario = new ScenarioImpl();
+		return scenario;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioPackage getScenarioPackage() {
+		return (ScenarioPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ScenarioPackage getPackage() {
+		return ScenarioPackage.eINSTANCE;
+	}
+
+} //ScenarioFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioImpl.java
new file mode 100644
index 0000000..7d2cc6e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioImpl.java
@@ -0,0 +1,806 @@
+package org.eclipse.stem.core.scenario.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.CorePlugin;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.solver.Solver;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Scenario</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getModel <em>Model</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getSequencer <em>Sequencer</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getScenarioDecorators <em>Scenario Decorators</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getCanonicalGraph <em>Canonical Graph</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getProgress <em>Progress</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.impl.ScenarioImpl#getSolver <em>Solver</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ScenarioImpl extends IdentifiableImpl implements Scenario {
+
+	/**
+	 * This is used to generate unique {@link URI}'s for each {@link Scenario} generated
+	 */
+	private int scenarioCounter = 0;
+
+	/**
+	 * This is the {@link URI} used to identify the canonical {@link Graph} used during the
+	 * simulation
+	 * 
+	 * TODO is this the right URI to use for canonical graphs?
+	 */
+	protected static final URI CANONICAL_GRAPH_URI = URI
+			.createURI("stem:canonicalgraph");
+	
+	/**
+	 * This flag controls the reporting of each and every unresolved 
+	 * {@link Identifiable} reference encountered when creating the 
+	 * canonical {@link Graph}.  Default: <code>false</code>
+	 */
+	public static boolean reportEachUnresolvedIdentifiable = true;
+
+	/**
+	 * This flag controls the reporting of dangling air transport edges 
+	 */
+	public static boolean reportDanglingAirTransportEdges = false; 
+
+	/**
+	 * This flag controls the reporting of a single summary message of the 
+	 * number of unresolved {@link Identifiable} references encountered 
+	 * when creating the canonical {@link Graph}. Default: <code>false</code>
+	 */
+	public static boolean reportNumberofUnresolvedIdentifiables = false;
+	
+	/**
+	 * The cached value of the '{@link #getModel() <em>Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getModel()
+	 * @generated
+	 * @ordered
+	 */
+	protected Model model;
+
+	/**
+	 * The cached value of the '{@link #getSequencer() <em>Sequencer</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getSequencer()
+	 * @generated
+	 * @ordered
+	 */
+	protected Sequencer sequencer;
+
+	/**
+	 * The cached value of the '{@link #getScenarioDecorators() <em>Scenario Decorators</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getScenarioDecorators()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<Decorator> scenarioDecorators;
+
+	/**
+	 * The cached value of the '{@link #getCanonicalGraph() <em>Canonical Graph</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCanonicalGraph()
+	 * @generated
+	 * @ordered
+	 */
+	protected Graph canonicalGraph;
+	
+	/**
+	 * The default value of the '{@link #getProgress() <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgress()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double PROGRESS_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getProgress() <em>Progress</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProgress()
+	 * @generated
+	 * @ordered
+	 */
+	protected double progress = PROGRESS_EDEFAULT;
+
+	
+	/**
+	 * The cached value of the '{@link #getSolver() <em>Solver</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSolver()
+	 * @generated
+	 * @ordered
+	 */
+	protected Solver solver;
+
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected ScenarioImpl() {
+		super();
+		setURI(STEMURI.createURI(URI_TYPE_SCENARIO_SEGMENT + "/"
+				+ Integer.toString(scenarioCounter++)));
+		setTypeURI(STEMURI.SCENARIO_TYPE_URI);
+	} // ScenarioImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ScenarioPackage.Literals.SCENARIO;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model getModel() {
+		if (model != null && model.eIsProxy()) {
+			InternalEObject oldModel = (InternalEObject)model;
+			model = (Model)eResolveProxy(oldModel);
+			if (model != oldModel) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ScenarioPackage.SCENARIO__MODEL, oldModel, model));
+			}
+		}
+		return model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model basicGetModel() {
+		return model;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModel(Model newModel) {
+		Model oldModel = model;
+		model = newModel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ScenarioPackage.SCENARIO__MODEL, oldModel, model));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequencer getSequencer() {
+		if (sequencer != null && sequencer.eIsProxy()) {
+			InternalEObject oldSequencer = (InternalEObject)sequencer;
+			sequencer = (Sequencer)eResolveProxy(oldSequencer);
+			if (sequencer != oldSequencer) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ScenarioPackage.SCENARIO__SEQUENCER, oldSequencer, sequencer));
+			}
+		}
+		return sequencer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Sequencer basicGetSequencer() {
+		return sequencer;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSequencer(Sequencer newSequencer) {
+		Sequencer oldSequencer = sequencer;
+		sequencer = newSequencer;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ScenarioPackage.SCENARIO__SEQUENCER, oldSequencer, sequencer));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The value is set in {@link #initialize()} <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Graph getCanonicalGraph() {
+		return canonicalGraph;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getProgress() {
+		return progress;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProgress(double newProgress) {
+		double oldProgress = progress;
+		progress = newProgress;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ScenarioPackage.SCENARIO__PROGRESS, oldProgress, progress));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Solver getSolver() {
+		return solver;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetSolver(Solver newSolver, NotificationChain msgs) {
+		Solver oldSolver = solver;
+		solver = newSolver;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ScenarioPackage.SCENARIO__SOLVER, oldSolver, newSolver);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSolver(Solver newSolver) {
+		if (newSolver != solver) {
+			NotificationChain msgs = null;
+			if (solver != null)
+				msgs = ((InternalEObject)solver).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ScenarioPackage.SCENARIO__SOLVER, null, msgs);
+			if (newSolver != null)
+				msgs = ((InternalEObject)newSolver).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ScenarioPackage.SCENARIO__SOLVER, null, msgs);
+			msgs = basicSetSolver(newSolver, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ScenarioPackage.SCENARIO__SOLVER, newSolver, newSolver));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <code>true</code> if it's ok to call step again.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public boolean step() {
+		boolean success = true;
+		// Is the sequencer finished?
+		
+		if (!getSequencer().isTimeToStop()) {
+			// No
+			// Is there a canonical graph?
+			if (canonicalGraph == null) {
+				// No
+				// Create one then...
+				initialize();
+			} // if no canonical graph
+
+			// Everything should be sane
+			assert sane();
+
+			final STEMTime currentTime = getSequencer().getNextTime();
+			final long timeDelta = getSequencer().getTimeDelta();
+			
+			// First reset the progress of each decorator to 0. Necessary for the iteration progress
+			// bar
+			for (final Iterator<Decorator> decoratorIter = canonicalGraph
+					.getDecorators().iterator(); decoratorIter.hasNext();) {
+				final Decorator decorator = decoratorIter.next();
+				decorator.setProgress(0.0);
+			}
+			
+			// This is the solver we will be using to advance the solution
+			// one step
+			
+			Solver solver = this.getSolver();
+			
+			// Needed to support old model where the solver was part of the decorator
+			
+			if(solver == null) {
+				Solver [] solvers = this.getSolvers();
+				// Use the default finite difference when not available
+				for(Solver s:solvers)
+					if(s.getClass().getName().equals("org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl"))
+					{solver = s;this.setSolver(s);break;}
+			}
+			
+			// Make sure the decorators are set on the solver
+			if(solver.getDecorators() == null) solver.setDecorators(canonicalGraph.getDecorators());
+			
+			// Do the one step using the current solver
+			success = solver.step(currentTime, timeDelta, getSequencer().getCycle());
+						
+			// Everything should still be sane
+			assert sane();
+	
+			// Once everyone is done, we tell the graph to switch all the
+			// dynamic labels to their next value and then we're ready to do
+			// it all over again.
+			canonicalGraph.switchToNextValue(currentTime);
+		} // if sequencer finished
+		if(success) success = !getSequencer().isTimeToStop();
+		return success;
+	} // step
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void reset() {
+		// Set the sequencer back to its original state. The sequencer determines
+		// the "current" time of the simulation. This is a value used to compute
+		// the values of dynamic labels for each step of the simulation.
+		getSequencer().reset();
+		
+		//  Now give each decorator a chance to reset its dynamic
+		// labels in the canonical graph
+		
+		// SED fix. We need to reset the disease models first since the infectors
+		// inoculators depend up those being reset beforehand.
+		
+		ArrayList<Decorator>intDecorators = new ArrayList<Decorator>();
+		ArrayList<Decorator>otherDecorators = new ArrayList<Decorator>();
+		
+		for (final Iterator<Decorator> graphDecoratorIter = canonicalGraph.getDecorators()
+				.iterator(); graphDecoratorIter.hasNext();) {
+			final Decorator decorator = graphDecoratorIter
+					.next();
+			if(decorator instanceof IntegrationDecorator)intDecorators.add(decorator);
+			else otherDecorators.add(decorator);
+		}
+		for(Decorator decorator:intDecorators){
+			// Is the Decorator enabled?
+			if (decorator.isEnabled()) {
+				// Yes
+				decorator.resetLabels();
+			} // if 
+			
+			// Reset the solver
+		} // for each decorator
+		for(Decorator decorator:otherDecorators){
+			// Is the Decorator enabled?
+			if (decorator.isEnabled()) {
+				// Yes
+				decorator.resetLabels();
+			} // if 
+			
+			// Reset the solver
+		} // for each decorator
+	
+		solver.reset();
+	}// reset
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void initialize() {
+		// Set the sequencer back to its original state. The sequencer determines
+		// the "current" time of the simulation. This is a value used to compute
+		// the values of dynamic labels for each step of the simulation.
+		getSequencer().reset();
+
+		// Get the canonical graph that we'll use for the simulation. It
+		// maintains all state information during the simulation.
+		canonicalGraph = getModel().getCanonicalGraph(CANONICAL_GRAPH_URI, new IdentifiableFilterImpl(getModel().getDublinCore().getCoverage()));
+
+		canonicalGraph.setTime((STEMTime) EcoreUtil.copy(getSequencer()
+				.getCurrentTime()));
+
+		//
+		// Confirm, re-validate the set of unresolved identifiables.
+		// Because we add graphs to graphs and models to models some of the 
+		// unresolved identifiables do not resolve until the very end
+		// this method does that check on the FINAL canonicalGraph.
+		//
+		Iterator<UnresolvedIdentifiable> unresolved = canonicalGraph.getUnresolvedIdentifiables().iterator();
+		  while (unresolved.hasNext()) {
+		   UnresolvedIdentifiable temp = unresolved.next();
+		   
+		   if (canonicalGraph.getNodes().get(temp.getUnresolvedURI()) != null 
+		     || canonicalGraph.getEdges().get(temp.getUnresolvedURI()) != null) {
+		    unresolved.remove();
+		   }
+		}
+		// Just checking...
+		assert canonicalGraph.sane();
+
+		// Add the adaptors to keep track of the progress for each graph decorator
+		final double numDecorators = this.getCanonicalGraph().getDecorators().size();
+		final Scenario self = this;
+		for (final Iterator<Decorator> scenarioDecorators = this.getCanonicalGraph().getDecorators()
+				.iterator(); scenarioDecorators.hasNext();) {
+			final Decorator decorator = scenarioDecorators.next();
+			decorator.eAdapters().add(
+					new AdapterImpl() {
+						/**
+						   * @override
+						   */
+						  public void notifyChanged(Notification msg)
+						  {
+							  Decorator decorator = (Decorator)msg.getNotifier();
+							  switch(msg.getFeatureID(Decorator.class)) {
+							  	case ModelPackage.DECORATOR__PROGRESS:
+							  		double delta = (msg.getNewDoubleValue() - msg.getOldDoubleValue());
+							  		delta /= numDecorators;
+							  		self.setProgress(self.getProgress()+delta);
+							  }
+						  }
+					}
+			);
+		}
+		
+		// The scenario decorators are regular decorators that are allowed to
+		// modified the state of the canonical graph to customize it for a
+		// particular scenario. At this point the model decorators have done
+		// their job. They were invoked above in the call to
+		// getCanonicalGraph(). Now it is the turn of the scenario decorators to
+		// add their final touch to the graph. The scenario decorators need to
+		// be copied however so that any state information they may generate and
+		// retain does not become part of the scenario itself. 
+
+		ArrayList<Decorator>intDecorators = new ArrayList<Decorator>();
+		ArrayList<Decorator>otherDecorators = new ArrayList<Decorator>();
+		// Let the scenario decorators decorate the graph
+		for (final Iterator<Decorator> scenarioDecorators = getScenarioDecorators()
+				.iterator(); scenarioDecorators.hasNext();) {
+			final Decorator decorator = (Decorator) EcoreUtil.copy(scenarioDecorators.next());
+			if(decorator instanceof IntegrationDecorator)intDecorators.add(decorator);
+			else otherDecorators.add(decorator);
+		}
+		for(Decorator decorator:intDecorators) {
+			canonicalGraph.getDecorators().add(decorator);
+			decorator.decorateGraph();
+			decorator.setGraphDecorated(true);
+		} 
+		for(Decorator decorator:otherDecorators) {
+			canonicalGraph.getDecorators().add(decorator);
+			decorator.decorateGraph();
+			decorator.setGraphDecorated(true);
+		} 
+
+		
+		// Are there any unresolved identifiables in the canonical graph and 
+		// should we report them?
+		if ( reportEachUnresolvedIdentifiable && canonicalGraph.getUnresolvedIdentifiables().size() > 0) {
+			// Yes
+			logUnresolvedIdentifiables();
+		}
+		
+		// Are there any unresolved identifiables in the canonical graph and 
+		// should we report their number?
+		if ( reportNumberofUnresolvedIdentifiables && canonicalGraph.getUnresolvedIdentifiables().size() > 0) {
+			// Yes
+			logNumberOfUnresolvedIdentifiables();
+		}
+	} // initialize
+
+	private org.eclipse.stem.core.solver.Solver [] getSolvers() {
+		Solver [] solvers;
+		final IExtensionRegistry registry = Platform.getExtensionRegistry();
+		final IConfigurationElement[] solverConfigElements = registry
+				.getConfigurationElementsFor(org.eclipse.stem.core.Constants.ID_SOLVER_EXTENSION_POINT);
+
+		final List<Solver> temp = new ArrayList<Solver>();
+
+		solvers = new Solver[solverConfigElements.length];
+
+		for (int i = 0; i < solverConfigElements.length; i++) {
+			final IConfigurationElement element = solverConfigElements[i];
+			// Does the element specify the class of the disease model?
+				if (element.getName().equals(Constants.SOLVER_ELEMENT)) {
+					// Yes
+					try {
+						temp.add((Solver) element
+								.createExecutableExtension("class")); //$NON-NLS-1$
+					} catch (final Exception e) {
+						CorePlugin.logError(
+								"Can't create solver", e); //$NON-NLS-1$
+					}
+				} // if
+			} // for each configuration element
+
+			solvers = temp.toArray(new Solver[] {});
+
+		return solvers;
+	}
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String produceTitle() {
+		String retValue = "";
+		if (dublinCore != null) {
+			final String title = dublinCore.getTitle();
+			retValue = title == null ? "" : title;
+		}
+		return retValue;
+	} // produceTitle
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ScenarioPackage.SCENARIO__SOLVER:
+				return basicSetSolver(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<Decorator> getScenarioDecorators() {
+		if (scenarioDecorators == null) {
+			scenarioDecorators = new EObjectResolvingEList<Decorator>(Decorator.class, this, ScenarioPackage.SCENARIO__SCENARIO_DECORATORS);
+		}
+		return scenarioDecorators;
+	}
+
+	/**
+	 * Report the unresolved Identifiables in the canonical graph
+	 */
+	private void logUnresolvedIdentifiables() {
+		for (Iterator<UnresolvedIdentifiable> unresolvedIter = canonicalGraph
+				.getUnresolvedIdentifiables().iterator(); unresolvedIter
+				.hasNext();) {
+			final UnresolvedIdentifiable unresolvedID = unresolvedIter
+					.next();
+				
+			CorePlugin.logInformation("In scenario "
+					+ produceTitle()
+					+ "\", model \""
+					+ unresolvedID.getModel().getDublinCore()
+							.getTitle()
+					+ "\",  the URI \""
+					+ unresolvedID.getUnresolvedURI()
+					+ "\" was unresolved."
+	
+			, null);
+		} // for each unresolved identifiable
+	} // reportUnresolvedIdentifiables
+
+	/**
+	 * Report the number of unresolved Identifiables in the canonical graph.
+	 */
+	private void logNumberOfUnresolvedIdentifiables() {
+		CorePlugin.logInformation("In scenario \""
+				+ produceTitle()
+				+ "\", there were "
+				+ canonicalGraph.getUnresolvedIdentifiables().size()
+				+ " unresolved references."
+		, null);
+		
+	} // logNumberOfUnresolvedIdentifiables
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ScenarioPackage.SCENARIO__MODEL:
+				if (resolve) return getModel();
+				return basicGetModel();
+			case ScenarioPackage.SCENARIO__SEQUENCER:
+				if (resolve) return getSequencer();
+				return basicGetSequencer();
+			case ScenarioPackage.SCENARIO__SCENARIO_DECORATORS:
+				return getScenarioDecorators();
+			case ScenarioPackage.SCENARIO__CANONICAL_GRAPH:
+				return getCanonicalGraph();
+			case ScenarioPackage.SCENARIO__PROGRESS:
+				return getProgress();
+			case ScenarioPackage.SCENARIO__SOLVER:
+				return getSolver();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ScenarioPackage.SCENARIO__MODEL:
+				setModel((Model)newValue);
+				return;
+			case ScenarioPackage.SCENARIO__SEQUENCER:
+				setSequencer((Sequencer)newValue);
+				return;
+			case ScenarioPackage.SCENARIO__SCENARIO_DECORATORS:
+				getScenarioDecorators().clear();
+				getScenarioDecorators().addAll((Collection<? extends Decorator>)newValue);
+				return;
+			case ScenarioPackage.SCENARIO__PROGRESS:
+				setProgress((Double)newValue);
+				return;
+			case ScenarioPackage.SCENARIO__SOLVER:
+				setSolver((Solver)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ScenarioPackage.SCENARIO__MODEL:
+				setModel((Model)null);
+				return;
+			case ScenarioPackage.SCENARIO__SEQUENCER:
+				setSequencer((Sequencer)null);
+				return;
+			case ScenarioPackage.SCENARIO__SCENARIO_DECORATORS:
+				getScenarioDecorators().clear();
+				return;
+			case ScenarioPackage.SCENARIO__PROGRESS:
+				setProgress(PROGRESS_EDEFAULT);
+				return;
+			case ScenarioPackage.SCENARIO__SOLVER:
+				setSolver((Solver)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ScenarioPackage.SCENARIO__MODEL:
+				return model != null;
+			case ScenarioPackage.SCENARIO__SEQUENCER:
+				return sequencer != null;
+			case ScenarioPackage.SCENARIO__SCENARIO_DECORATORS:
+				return scenarioDecorators != null && !scenarioDecorators.isEmpty();
+			case ScenarioPackage.SCENARIO__CANONICAL_GRAPH:
+				return canonicalGraph != null;
+			case ScenarioPackage.SCENARIO__PROGRESS:
+				return progress != PROGRESS_EDEFAULT;
+			case ScenarioPackage.SCENARIO__SOLVER:
+				return solver != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#toString()
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		// If there is a title then we use that otherwise we let the super class
+		// handle it
+		final String title = getDublinCore().getTitle();
+		return (title != null ? title : super.toString());
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.common.impl.IdentifiableImpl#sane()
+	 * @generated NOT
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		if (retValue && model != null) {
+			retValue = retValue && model.sane();
+			assert retValue;
+		}
+
+		if (retValue && canonicalGraph != null) {
+			retValue = retValue && canonicalGraph.sane();
+			assert retValue;
+		}
+
+		if (retValue && sequencer != null) {
+			retValue = retValue && sequencer.sane();
+			assert retValue;
+		}
+
+		return retValue;
+	} // sane
+
+} // ScenarioImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioPackageImpl.java
new file mode 100644
index 0000000..bdba7a5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/impl/ScenarioPackageImpl.java
@@ -0,0 +1,312 @@
+package org.eclipse.stem.core.scenario.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+//import org.eclipse.emf.ecore.EAttribute;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+//import org.eclipse.stem.core.sequencer.Sequencer;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ScenarioPackageImpl extends EPackageImpl implements ScenarioPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass scenarioEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.scenario.ScenarioPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ScenarioPackageImpl() {
+		super(eNS_URI, ScenarioFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ScenarioPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ScenarioPackage init() {
+		if (isInited) return (ScenarioPackage)EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ScenarioPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theScenarioPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theScenarioPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theScenarioPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ScenarioPackage.eNS_URI, theScenarioPackage);
+		return theScenarioPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getScenario() {
+		return scenarioEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getScenario_Model() {
+		return (EReference)scenarioEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getScenario_Sequencer() {
+		return (EReference)scenarioEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getScenario_ScenarioDecorators() {
+		return (EReference)scenarioEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getScenario_CanonicalGraph() {
+		return (EReference)scenarioEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getScenario_Progress() {
+		return (EAttribute)scenarioEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getScenario_Solver() {
+		return (EReference)scenarioEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioFactory getScenarioFactory() {
+		return (ScenarioFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		scenarioEClass = createEClass(SCENARIO);
+		createEReference(scenarioEClass, SCENARIO__MODEL);
+		createEReference(scenarioEClass, SCENARIO__SEQUENCER);
+		createEReference(scenarioEClass, SCENARIO__SCENARIO_DECORATORS);
+		createEReference(scenarioEClass, SCENARIO__CANONICAL_GRAPH);
+		createEAttribute(scenarioEClass, SCENARIO__PROGRESS);
+		createEReference(scenarioEClass, SCENARIO__SOLVER);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		SequencerPackage theSequencerPackage = (SequencerPackage)EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI);
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+		SolverPackage theSolverPackage = (SolverPackage)EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		scenarioEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(scenarioEClass, Scenario.class, "Scenario", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getScenario_Model(), theModelPackage.getModel(), null, "model", null, 0, 1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getScenario_Sequencer(), theSequencerPackage.getSequencer(), null, "sequencer", null, 0, 1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getScenario_ScenarioDecorators(), theModelPackage.getDecorator(), null, "scenarioDecorators", null, 0, -1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getScenario_CanonicalGraph(), theGraphPackage.getGraph(), null, "canonicalGraph", null, 0, 1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getScenario_Progress(), ecorePackage.getEDouble(), "progress", "0.0", 0, 1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEReference(getScenario_Solver(), theSolverPackage.getSolver(), null, "solver", null, 0, 1, Scenario.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(scenarioEClass, ecorePackage.getEBoolean(), "step", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(scenarioEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(scenarioEClass, null, "initialize", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(scenarioEClass, ecorePackage.getEString(), "produceTitle", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ScenarioPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioEditPlugin.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioEditPlugin.java
new file mode 100644
index 0000000..e52ee00
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioEditPlugin.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.scenario.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CommonEditPlugin;
+import org.eclipse.stem.core.graph.provider.GraphEditPlugin;
+import org.eclipse.stem.core.model.provider.ModelEditPlugin;
+
+/**
+ * This is the central singleton for the Scenario editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ScenarioEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ScenarioEditPlugin INSTANCE = new ScenarioEditPlugin();
+
+	/**
+	 * 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 ScenarioEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     ModelEditPlugin.INSTANCE,
+		     CommonEditPlugin.INSTANCE,
+		     GraphEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProvider.java
new file mode 100644
index 0000000..9ae7522
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProvider.java
@@ -0,0 +1,403 @@
+package org.eclipse.stem.core.scenario.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.command.CreateChildCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+//import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+//import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.core.solver.SolverFactory;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.swt.dnd.DND;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.core.scenario.Scenario} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class ScenarioItemProvider extends IdentifiableItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ScenarioItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(
+			Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(ScenarioPackage.Literals.SCENARIO__MODEL);
+			childrenFeatures.add(ScenarioPackage.Literals.SCENARIO__SEQUENCER);
+			childrenFeatures.add(ScenarioPackage.Literals.SCENARIO__SCENARIO_DECORATORS);
+			childrenFeatures.add(ScenarioPackage.Literals.SCENARIO__SOLVER);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Scenario.gif. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage(
+				"full/customobj16/Scenario"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Scenario)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Scenario_type") : //$NON-NLS-1$
+			getString("_UI_Scenario_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Scenario.class)) {
+			case ScenarioPackage.SCENARIO__PROGRESS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case ScenarioPackage.SCENARIO__MODEL:
+			case ScenarioPackage.SCENARIO__SEQUENCER:
+			case ScenarioPackage.SCENARIO__SCENARIO_DECORATORS:
+			case ScenarioPackage.SCENARIO__SOLVER:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s
+	 * describing the children that can be created under this object. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(
+			Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ScenarioPackage.Literals.SCENARIO__MODEL,
+				 ModelFactory.eINSTANCE.createModel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ScenarioPackage.Literals.SCENARIO__SEQUENCER,
+				 SequencerFactory.eINSTANCE.createSequentialSequencer()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ScenarioPackage.Literals.SCENARIO__SEQUENCER,
+				 SequencerFactory.eINSTANCE.createRealTimeSequencer()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(ScenarioPackage.Literals.SCENARIO__SOLVER,
+				 SolverFactory.eINSTANCE.createSolver()));
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      org.eclipse.emf.ecore.EObject,
+	 *      org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Command createAddCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Collection<?> collection, int index) {
+		final Collection identifiableCollection = new ArrayList();
+		for (Object value : collection) {
+
+			Object temp = value;
+			if (value instanceof IFile) {
+				// Yes
+				final IFile iFile = (IFile) value;
+				final URI uri = URI.createFileURI(iFile.getLocation()
+						.toString());
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				identifiableCollection.add(identifable);
+				temp = identifable;
+			} // if IFile
+
+			else if (value instanceof String) {
+				// Yes
+				final String uriString = (String) value;
+				try {
+					final URI uri = URI.createURI(uriString);
+					final Identifiable identifable = Utility
+							.getIdentifiable(uri);
+					temp = identifable;
+				} catch (Exception e) {
+					// Ignore it
+				}
+			} // if String
+
+			if (temp instanceof Identifiable) {
+				identifiableCollection.add(temp);
+			}
+		} // for each Object
+
+		return super.createAddCommand(domain, owner, feature,
+				identifiableCollection, index);
+	} // createAddCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      org.eclipse.emf.ecore.EObject,
+	 *      org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object, int)
+	 */
+	@Override
+	protected Command createSetCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Object value, int index) {
+		// Are we setting the model during a drag and drop?
+		Object temp = value;
+
+		if (value instanceof IFile) {
+			// Yes
+			final IFile iFile = (IFile) value;
+			final URI uri = URI.createFileURI(iFile.getLocation().toString());
+			final Identifiable identifable = Utility.getIdentifiable(uri);
+			temp = identifable;
+		} // if IFile
+
+		else if (value instanceof String) {
+			// Yes
+			// These come from IdentifablePluginView
+			final String uriString = (String) value;
+			try {
+				final URI uri = URI.createURI(uriString);
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				temp = identifable;
+			} catch (Exception e) {
+				// Ignore it
+			}
+		} // if String
+
+		if (temp instanceof Model) {
+			return super.createSetCommand(domain, owner,
+					ScenarioPackage.eINSTANCE.getScenario_Model(), temp, index);
+		} else if (temp instanceof Sequencer) {
+			return super.createSetCommand(domain, owner,
+					ScenarioPackage.eINSTANCE.getScenario_Sequencer(), temp,
+					index);
+		} // if
+		else if (temp instanceof Decorator) {
+			return super
+					.createAddCommand(
+							domain,
+							owner,
+							ScenarioPackage.eINSTANCE
+									.getScenario()
+									.getEStructuralFeature(
+											ScenarioPackage.SCENARIO__SCENARIO_DECORATORS),
+							Arrays.asList((new Object[] { temp })), index);
+		} // if
+		else {
+
+			return super.createSetCommand(domain, owner, feature, value, index);
+		}
+	} // createSetCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      java.lang.Object, float, int, int, java.util.Collection)
+	 */
+	@Override
+	protected Command createDragAndDropCommand(EditingDomain domain,
+			Object owner, float location, int operations, int operation,
+			Collection<?> collection) {
+		// We add DND.DROP_LINK as an allowed operation because all drops will
+		// be links and some sources don't allow links, we convert to links
+		// anyway
+		return super.createDragAndDropCommand(domain, owner, location,
+				operations | DND.DROP_LINK, operation, collection);
+	} // createDragAndDropCommand
+
+	@Override
+	protected Command createCreateChildCommand(EditingDomain domain,
+			EObject owner, EStructuralFeature feature, Object value, int index,
+			Collection<?> collection) {
+
+		return new CreateChildCommand(domain, owner, feature, value,
+				collection, this) {
+			/**
+			 * @see org.eclipse.emf.edit.command.CreateChildCommand#createCommand()
+			 */
+			@Override
+			protected Command createCommand() {
+
+				Command retValue = null;
+
+				final Command createChildCommand = super.createCommand();
+
+				// Are we creating a Model?
+				if (child instanceof Model) {
+					// Yes
+					final Model model = (Model) child;
+					// Does the model have a resource already?
+					if (model.eResource() == null) {
+						// No
+						final Resource parentResource = owner.eResource();
+						final Command addCommand = new AddCommand(domain,
+								parentResource.getContents(), model);
+
+						final CompoundCommand compoundCommand = new CompoundCommand(
+								0, createChildCommand.getLabel(),
+								createChildCommand.getDescription());
+						compoundCommand.append(createChildCommand);
+						compoundCommand.append(addCommand);
+						retValue = compoundCommand;
+					} // if Model does not have a resource
+				} // if Model
+				else {
+					retValue = createChildCommand;
+				}
+
+				return retValue;
+			}
+		}; // CreateChildCommand
+
+	}// createCreateChildCommand
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isWrappingNeeded(java.lang.Object)
+	 */
+	@Override
+	protected boolean isWrappingNeeded(Object object) {
+		// return super.isWrappingNeeded(object);
+		// We return true so that non-containment references are wrapped. This
+		// enables the delete command in the editor's context menu.
+		return true;
+	} // isWrappingNeeded
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+} // ScenarioItemProvider
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProviderAdapterFactory.java
new file mode 100644
index 0000000..b924f52
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/provider/ScenarioItemProviderAdapterFactory.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.core.scenario.provider;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+//import org.eclipse.emf.edit.provider.Disposable;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ScenarioItemProviderAdapterFactory extends ScenarioAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.scenario.Scenario} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ScenarioItemProvider scenarioItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.scenario.Scenario}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createScenarioAdapter() {
+		if (scenarioItemProvider == null) {
+			scenarioItemProvider = new ScenarioItemProvider(this);
+		}
+
+		return scenarioItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (scenarioItemProvider != null) scenarioItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioAdapterFactory.java
new file mode 100644
index 0000000..d659238
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioAdapterFactory.java
@@ -0,0 +1,162 @@
+package org.eclipse.stem.core.scenario.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.scenario.*;
+
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+//import org.eclipse.stem.core.sequencer.Sequencer;
+
+/**
+ * <!-- begin-user-doc --> The <b>Adapter Factory</b> for the model. It
+ * provides an adapter <code>createXXX</code> method for each class of the
+ * model. <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.scenario.ScenarioPackage
+ * @generated
+ */
+public class ScenarioAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ScenarioPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ScenarioPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc --> This implementation returns <code>true</code>
+	 * if the object is either the model's package or is an instance object of
+	 * the model. <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ScenarioSwitch<Adapter> modelSwitch =
+		new ScenarioSwitch<Adapter>() {
+			@Override
+			public Adapter caseScenario(Scenario object) {
+				return createScenarioAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.scenario.Scenario <em>Scenario</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.scenario.Scenario
+	 * @generated
+	 */
+	public Adapter createScenarioAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc --> This
+	 * default implementation returns null. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} // ScenarioAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioSwitch.java
new file mode 100644
index 0000000..92d3386
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/scenario/util/ScenarioSwitch.java
@@ -0,0 +1,162 @@
+package org.eclipse.stem.core.scenario.util;
+
+/******************************************************************************* 
+ * Copyright (c) 2006, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+ 
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.scenario.*;
+
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+//import org.eclipse.stem.core.sequencer.Sequencer;
+
+/**
+ * <!-- begin-user-doc --> The <b>Switch</b> for the model's inheritance
+ * hierarchy. It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object and proceeding up the
+ * inheritance hierarchy until a non-null result is returned, which is the
+ * result of the switch. <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.scenario.ScenarioPackage
+ * @generated
+ */
+public class ScenarioSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ScenarioPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ScenarioPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ScenarioPackage.SCENARIO: {
+				Scenario scenario = (Scenario)theEObject;
+				T1 result = caseScenario(scenario);
+				if (result == null) result = caseIdentifiable(scenario);
+				if (result == null) result = caseComparable(scenario);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Scenario</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Scenario</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseScenario(Scenario object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch, but this is the last case
+	 * anyway. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} // ScenarioSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/RealTimeSequencer.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/RealTimeSequencer.java
new file mode 100644
index 0000000..d59129d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/RealTimeSequencer.java
@@ -0,0 +1,24 @@
+// RealTimeSequencer.java
+package org.eclipse.stem.core.sequencer;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>RealTimeSequencer</code> is a <code>SequentialSequencer</code>
+ * that always as a starting time equal to the current time. It also sleeps for
+ * the time increment of the sequence.
+ * 
+ * @model
+ */
+public interface RealTimeSequencer extends SequentialSequencer {
+
+} // RealTimeSequencer
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/Sequencer.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/Sequencer.java
new file mode 100644
index 0000000..82a9087
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/Sequencer.java
@@ -0,0 +1,207 @@
+// Sequencer.java
+package org.eclipse.stem.core.sequencer;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.scenario.Scenario;
+
+/**
+ * A <code>Sequencer</code> is the computational unit that determines the
+ * sequence of time points at which the state of the canonical {@link Graph} is
+ * determined. It also is used to determine if and when the sequence terminates.
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * @see Scenario#step()
+ * @see STEMTime
+ * 
+ * @model abstract="true"
+ */
+public interface Sequencer extends Identifiable {
+
+	/**
+	 * This constant is returned by {@link #getEndTime()} when a
+	 * <code>Sequencer</code> has no specified end time.
+	 * 
+	 * @see #getDuration()
+	 */
+	long UNKNOWN_DURATION = -1;
+
+	/**
+	 * @return the start time of the sequence.
+	 * 
+	 * @model resolveProxies="false" containment="true"
+	 */
+	STEMTime getStartTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getStartTime <em>Start Time</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Time</em>' containment reference.
+	 * @see #getStartTime()
+	 * @generated
+	 */
+	void setStartTime(STEMTime value);
+
+	/**
+	 * @return the ending time of the sequence, or {@link #UNKNOWN_DURATION} if
+	 *         there is no end time.
+	 * 
+	 * @model resolveProxies="false" containment="true"
+	 */
+	STEMTime getEndTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getEndTime <em>End Time</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End Time</em>' containment reference.
+	 * @see #getEndTime()
+	 * @generated
+	 */
+	void setEndTime(STEMTime value);
+
+	/**
+	 * @return the <code>Sequencer</code>'s current time.
+	 * @model resolveProxies="false" containment="true"
+	 */
+	STEMTime getCurrentTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getCurrentTime <em>Current Time</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Current Time</em>' containment reference.
+	 * @see #getCurrentTime()
+	 * @generated
+	 */
+	void setCurrentTime(STEMTime value);
+
+	/**
+	 * @return the next time point in the sequence. As a side effect the
+	 *         <code>sequencer</code>'s current time is set to the returned
+	 *         value.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	STEMTime getNextTime();
+
+	/**
+	 * @return the time difference in milliseconds between the value returned by
+	 *         {@link  #getCurrentTime()} and that returned by
+	 *         {@link #getNextTime()}. This value is only valid after a call to
+	 *         {@link #getNextTime()}.
+	 * 
+	 * @see #getCurrentTime()
+	 * @see #getNextTime()
+	 * 
+	 * @model changeable="false" transient="true"
+	 */
+	long getTimeDelta();
+
+	/**
+	 * @return the total amount of time in milliseconds in the sequence. If
+	 *         there is no ending time specified for the sequence, the constant
+	 *         {@link #UNKNOWN_DURATION} is returned.
+	 * @see #UNKNOWN_DURATION
+	 * @model default="-1"
+	 */
+	long getDuration();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getDuration <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Duration</em>' attribute.
+	 * @see #getDuration()
+	 * @generated
+	 */
+	void setDuration(long value);
+
+	/**
+	 * @return true if the sequence has ended.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	boolean isTimeToStop();
+
+	/**
+	 * Set the current time to the start time and prepare the
+	 * <code>Sequencer</code> to begin computing the next time from that
+	 * point. Also reset the amount of work complete
+	 * 
+	 * @see #getNextTime()
+	 * @see #getWorkComplete()
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void reset();
+
+	/**
+	 * @return an value (0-100) representing the percentage of the sequence
+	 *         that has been completed so far. If no end time has been
+	 *         specified, then return 0.
+	 * 
+	 * @model
+	 */
+	double getWorkComplete();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getWorkComplete <em>Work Complete</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Work Complete</em>' attribute.
+	 * @see #getWorkComplete()
+	 * @generated
+	 */
+	void setWorkComplete(double value);
+
+	/**
+	 * @return an integer (0-100) representing the percentage of the sequence
+	 *         that was completed by the time delta between the previous two
+	 *         calls to {@link #getNextTime()}
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getWorkIncrement();
+
+	/**
+	 * obtain the number of processing cycles that have 
+	 * been completed.  
+	 * It will return 0 if no cycles have been completed 
+	 * or if the simulation was reset or is just starting.
+	 * 
+	 * @return number of completed cycles.
+	 * @model default="0"
+	 */
+	int getCycle();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.Sequencer#getCycle <em>Cycle</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Cycle</em>' attribute.
+	 * @see #getCycle()
+	 * @generated
+	 */
+	void setCycle(int value);
+	
+} // Sequencer
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerFactory.java
new file mode 100644
index 0000000..faa6ff7
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerFactory.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.core.sequencer;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.sequencer.SequencerPackage
+ * @generated
+ */
+public interface SequencerFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	SequencerFactory eINSTANCE = org.eclipse.stem.core.sequencer.impl.SequencerFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Real Time Sequencer</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Real Time Sequencer</em>'.
+	 * @generated
+	 */
+	RealTimeSequencer createRealTimeSequencer();
+
+	/**
+	 * Returns a new object of class '<em>Sequential Sequencer</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Sequential Sequencer</em>'.
+	 * @generated
+	 */
+	SequentialSequencer createSequentialSequencer();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	SequencerPackage getSequencerPackage();
+
+} //SequencerFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerPackage.java
new file mode 100644
index 0000000..4969091
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequencerPackage.java
@@ -0,0 +1,789 @@
+package org.eclipse.stem.core.sequencer;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.sequencer.SequencerFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface SequencerPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "sequencer"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/sequencer.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.sequencer"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	SequencerPackage eINSTANCE = org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl <em>Sequencer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.impl.SequencerImpl
+	 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getSequencer()
+	 * @generated
+	 */
+	int SEQUENCER = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__URI = CommonPackage.IDENTIFIABLE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Start Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__START_TIME = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__END_TIME = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Current Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__CURRENT_TIME = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Next Time</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__NEXT_TIME = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Time Delta</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__TIME_DELTA = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__DURATION = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Time To Stop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__TIME_TO_STOP = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Work Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__WORK_COMPLETE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Work Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__WORK_INCREMENT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Cycle</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER__CYCLE = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 9;
+
+	/**
+	 * The number of structural features of the '<em>Sequencer</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENCER_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl <em>Sequential Sequencer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl
+	 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getSequentialSequencer()
+	 * @generated
+	 */
+	int SEQUENTIAL_SEQUENCER = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__URI = SEQUENCER__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__TYPE_URI = SEQUENCER__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__DUBLIN_CORE = SEQUENCER__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Start Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__START_TIME = SEQUENCER__START_TIME;
+
+	/**
+	 * The feature id for the '<em><b>End Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__END_TIME = SEQUENCER__END_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Current Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__CURRENT_TIME = SEQUENCER__CURRENT_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Next Time</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__NEXT_TIME = SEQUENCER__NEXT_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Time Delta</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__TIME_DELTA = SEQUENCER__TIME_DELTA;
+
+	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__DURATION = SEQUENCER__DURATION;
+
+	/**
+	 * The feature id for the '<em><b>Time To Stop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__TIME_TO_STOP = SEQUENCER__TIME_TO_STOP;
+
+	/**
+	 * The feature id for the '<em><b>Work Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__WORK_COMPLETE = SEQUENCER__WORK_COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Work Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__WORK_INCREMENT = SEQUENCER__WORK_INCREMENT;
+
+	/**
+	 * The feature id for the '<em><b>Cycle</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__CYCLE = SEQUENCER__CYCLE;
+
+	/**
+	 * The feature id for the '<em><b>Time Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER__TIME_INCREMENT = SEQUENCER_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Sequential Sequencer</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEQUENTIAL_SEQUENCER_FEATURE_COUNT = SEQUENCER_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.sequencer.impl.RealTimeSequencerImpl <em>Real Time Sequencer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.impl.RealTimeSequencerImpl
+	 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getRealTimeSequencer()
+	 * @generated
+	 */
+	int REAL_TIME_SEQUENCER = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__URI = SEQUENTIAL_SEQUENCER__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__TYPE_URI = SEQUENTIAL_SEQUENCER__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__DUBLIN_CORE = SEQUENTIAL_SEQUENCER__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Start Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__START_TIME = SEQUENTIAL_SEQUENCER__START_TIME;
+
+	/**
+	 * The feature id for the '<em><b>End Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__END_TIME = SEQUENTIAL_SEQUENCER__END_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Current Time</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__CURRENT_TIME = SEQUENTIAL_SEQUENCER__CURRENT_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Next Time</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__NEXT_TIME = SEQUENTIAL_SEQUENCER__NEXT_TIME;
+
+	/**
+	 * The feature id for the '<em><b>Time Delta</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__TIME_DELTA = SEQUENTIAL_SEQUENCER__TIME_DELTA;
+
+	/**
+	 * The feature id for the '<em><b>Duration</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__DURATION = SEQUENTIAL_SEQUENCER__DURATION;
+
+	/**
+	 * The feature id for the '<em><b>Time To Stop</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__TIME_TO_STOP = SEQUENTIAL_SEQUENCER__TIME_TO_STOP;
+
+	/**
+	 * The feature id for the '<em><b>Work Complete</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__WORK_COMPLETE = SEQUENTIAL_SEQUENCER__WORK_COMPLETE;
+
+	/**
+	 * The feature id for the '<em><b>Work Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__WORK_INCREMENT = SEQUENTIAL_SEQUENCER__WORK_INCREMENT;
+
+	/**
+	 * The feature id for the '<em><b>Cycle</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__CYCLE = SEQUENTIAL_SEQUENCER__CYCLE;
+
+	/**
+	 * The feature id for the '<em><b>Time Increment</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER__TIME_INCREMENT = SEQUENTIAL_SEQUENCER__TIME_INCREMENT;
+
+	/**
+	 * The number of structural features of the '<em>Real Time Sequencer</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REAL_TIME_SEQUENCER_FEATURE_COUNT = SEQUENTIAL_SEQUENCER_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.sequencer.RealTimeSequencer <em>Real Time Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Real Time Sequencer</em>'.
+	 * @see org.eclipse.stem.core.sequencer.RealTimeSequencer
+	 * @generated
+	 */
+	EClass getRealTimeSequencer();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.sequencer.Sequencer <em>Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Sequencer</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer
+	 * @generated
+	 */
+	EClass getSequencer();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.sequencer.Sequencer#getStartTime <em>Start Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Start Time</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getStartTime()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EReference getSequencer_StartTime();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.sequencer.Sequencer#getEndTime <em>End Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>End Time</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getEndTime()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EReference getSequencer_EndTime();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.core.sequencer.Sequencer#getCurrentTime <em>Current Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Current Time</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getCurrentTime()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EReference getSequencer_CurrentTime();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.sequencer.Sequencer#getNextTime <em>Next Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Next Time</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getNextTime()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EReference getSequencer_NextTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#getTimeDelta <em>Time Delta</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time Delta</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getTimeDelta()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_TimeDelta();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#getDuration <em>Duration</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Duration</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getDuration()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_Duration();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#isTimeToStop <em>Time To Stop</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time To Stop</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#isTimeToStop()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_TimeToStop();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#getWorkComplete <em>Work Complete</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Work Complete</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getWorkComplete()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_WorkComplete();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#getWorkIncrement <em>Work Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Work Increment</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getWorkIncrement()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_WorkIncrement();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.Sequencer#getCycle <em>Cycle</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Cycle</em>'.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getCycle()
+	 * @see #getSequencer()
+	 * @generated
+	 */
+	EAttribute getSequencer_Cycle();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.sequencer.SequentialSequencer <em>Sequential Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Sequential Sequencer</em>'.
+	 * @see org.eclipse.stem.core.sequencer.SequentialSequencer
+	 * @generated
+	 */
+	EClass getSequentialSequencer();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.sequencer.SequentialSequencer#getTimeIncrement <em>Time Increment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time Increment</em>'.
+	 * @see org.eclipse.stem.core.sequencer.SequentialSequencer#getTimeIncrement()
+	 * @see #getSequentialSequencer()
+	 * @generated
+	 */
+	EAttribute getSequentialSequencer_TimeIncrement();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	SequencerFactory getSequencerFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.sequencer.impl.RealTimeSequencerImpl <em>Real Time Sequencer</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.sequencer.impl.RealTimeSequencerImpl
+		 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getRealTimeSequencer()
+		 * @generated
+		 */
+		EClass REAL_TIME_SEQUENCER = eINSTANCE.getRealTimeSequencer();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl <em>Sequencer</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.sequencer.impl.SequencerImpl
+		 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getSequencer()
+		 * @generated
+		 */
+		EClass SEQUENCER = eINSTANCE.getSequencer();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEQUENCER__START_TIME = eINSTANCE.getSequencer_StartTime();
+
+		/**
+		 * The meta object literal for the '<em><b>End Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEQUENCER__END_TIME = eINSTANCE.getSequencer_EndTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Time</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEQUENCER__CURRENT_TIME = eINSTANCE.getSequencer_CurrentTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Next Time</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEQUENCER__NEXT_TIME = eINSTANCE.getSequencer_NextTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Time Delta</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__TIME_DELTA = eINSTANCE.getSequencer_TimeDelta();
+
+		/**
+		 * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__DURATION = eINSTANCE.getSequencer_Duration();
+
+		/**
+		 * The meta object literal for the '<em><b>Time To Stop</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__TIME_TO_STOP = eINSTANCE.getSequencer_TimeToStop();
+
+		/**
+		 * The meta object literal for the '<em><b>Work Complete</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__WORK_COMPLETE = eINSTANCE.getSequencer_WorkComplete();
+
+		/**
+		 * The meta object literal for the '<em><b>Work Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__WORK_INCREMENT = eINSTANCE.getSequencer_WorkIncrement();
+
+		/**
+		 * The meta object literal for the '<em><b>Cycle</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENCER__CYCLE = eINSTANCE.getSequencer_Cycle();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl <em>Sequential Sequencer</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl
+		 * @see org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl#getSequentialSequencer()
+		 * @generated
+		 */
+		EClass SEQUENTIAL_SEQUENCER = eINSTANCE.getSequentialSequencer();
+
+		/**
+		 * The meta object literal for the '<em><b>Time Increment</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEQUENTIAL_SEQUENCER__TIME_INCREMENT = eINSTANCE.getSequentialSequencer_TimeIncrement();
+
+	}
+
+} //SequencerPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequentialSequencer.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequentialSequencer.java
new file mode 100644
index 0000000..a0c399a
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/SequentialSequencer.java
@@ -0,0 +1,41 @@
+// SequentialSequencer.java
+package org.eclipse.stem.core.sequencer;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+* A <code>SequentialSequencer</code> is a {@link Sequencer} that generates
+* sequential time points that are uniformly spaced at a constant interval of
+* time.
+* 
+* @model
+*/
+public interface SequentialSequencer extends Sequencer {
+
+	/**
+	 * @return the number of milliseconds between the time points returned by
+	 *         successive calls to {@link Sequencer#getNextTime()}.
+	 * 
+	 * @model
+	 */
+	long getTimeIncrement();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.core.sequencer.SequentialSequencer#getTimeIncrement <em>Time Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time Increment</em>' attribute.
+	 * @see #getTimeIncrement()
+	 * @generated
+	 */
+	void setTimeIncrement(long value);
+
+} // SequentialSequencer
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/RealTimeSequencerImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/RealTimeSequencerImpl.java
new file mode 100644
index 0000000..79145d5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/RealTimeSequencerImpl.java
@@ -0,0 +1,152 @@
+package org.eclipse.stem.core.sequencer.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.CorePlugin;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Real Time Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class RealTimeSequencerImpl extends SequentialSequencerImpl implements
+		RealTimeSequencer {
+	/**
+	 * If <code>true</code> then the method {@link #getNextCalled()} has been
+	 * called once. This is checked below in {@link #getStartTime()}.
+	 */
+	private boolean getNextCalled = false;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RealTimeSequencerImpl() {
+		super();
+	}
+
+	/**
+	 * The start time for a real-time sequencer is the current time until there
+	 * is a call to getNextTime(), at which point the start time is fixed.
+	 * 
+	 * @see #getNextCalled
+	 * @see #getNextTime()
+	 */
+	@Override
+	public STEMTime getStartTime() {
+		// Has getNextTime been called yet.
+		if (!getNextCalled) {
+			// No
+			return getCurrentSystemTime();
+		} // if
+		else {
+			return super.getStartTime();
+		}
+	} // getStartTime
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl#getNextTime()
+	 */
+	@Override
+	public STEMTime getNextTime() {
+		super.getNextTime();
+		
+		// Is this our first call?
+		if (!getNextCalled) {
+			// Yes
+			getNextCalled = true;
+			// The start time is right now
+			setStartTime(getCurrentSystemTime());
+		} // if
+
+		final STEMTime currentTime = getCurrentTime();
+		
+		final STEMTime timeToWakeUp = super.getNextTime();
+
+		// Now we sleep until it is the next time
+		sleepUntil(timeToWakeUp, currentTime);
+
+		// We may or may not have woken up when we expected. Set the current
+		// time to be whatever the time is now.
+		setCurrentTime(getCurrentSystemTime());
+		return getCurrentTime();
+	} // getNextTime
+
+	/**
+	 * @param currentTime TODO
+	 * @param retValue
+	 */
+	private void sleepUntil(STEMTime futureTime, STEMTime currentTime) {
+		final long millisecondsToSleep = futureTime.getTime().getTime()
+				- currentTime.getTime().getTime();
+		try {
+			Thread.sleep(millisecondsToSleep);
+		} catch (InterruptedException e) {
+			CorePlugin.logInformation(
+					"RealTimeSequencer's sleep was interrupted", e);
+		}
+	} // sleepUntil
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.impl.SequencerImpl#setEndTime(org.eclipse.stem.core.model.STEMTime)
+	 * @throws IllegalArgumentException
+	 *             if the new end time is before the current (wall clock) time.
+	 */
+	@Override
+	public void setEndTime(STEMTime newEndTime) {
+		// The end time should be later than the current time
+		final STEMTime currentTime = getCurrentSystemTime();
+		if (isEndTimeBefore(currentTime)) {
+			super.setEndTime(newEndTime);
+		} // if
+		else {
+			throw new IllegalArgumentException("The new end time \""
+					+ newEndTime.toString()
+					+ "\" is not after the current time of \""
+					+ currentTime.toString() + "\"");
+		} // else
+	} // setEndTime
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		getNextCalled = false;
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SequencerPackage.Literals.REAL_TIME_SEQUENCER;
+	}
+
+	/**
+	 * @return the current real wall clock time as returned by the system.
+	 */
+	protected static STEMTime getCurrentSystemTime() {
+		return ModelFactory.eINSTANCE.createSTEMTime();
+	} // getCurrentSystemTime
+} // RealTimeSequencerImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerFactoryImpl.java
new file mode 100644
index 0000000..8d4a904
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerFactoryImpl.java
@@ -0,0 +1,115 @@
+package org.eclipse.stem.core.sequencer.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.sequencer.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerFactoryImpl extends EFactoryImpl implements SequencerFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SequencerFactory init() {
+		try {
+			SequencerFactory theSequencerFactory = (SequencerFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/sequencer.ecore"); //$NON-NLS-1$ 
+			if (theSequencerFactory != null) {
+				return theSequencerFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new SequencerFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case SequencerPackage.REAL_TIME_SEQUENCER: return createRealTimeSequencer();
+			case SequencerPackage.SEQUENTIAL_SEQUENCER: return createSequentialSequencer();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RealTimeSequencer createRealTimeSequencer() {
+		RealTimeSequencerImpl realTimeSequencer = new RealTimeSequencerImpl();
+		return realTimeSequencer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequentialSequencer createSequentialSequencer() {
+		SequentialSequencerImpl sequentialSequencer = new SequentialSequencerImpl();
+		return sequentialSequencer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerPackage getSequencerPackage() {
+		return (SequencerPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static SequencerPackage getPackage() {
+		return SequencerPackage.eINSTANCE;
+	}
+
+} //SequencerFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerImpl.java
new file mode 100644
index 0000000..7bd0f49
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerImpl.java
@@ -0,0 +1,613 @@
+package org.eclipse.stem.core.sequencer.impl;
+
+/******************************************************************************* 
+ * Copyright (c) 2007, 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.text.SimpleDateFormat;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getStartTime <em>Start Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getEndTime <em>End Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getCurrentTime <em>Current Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getNextTime <em>Next Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getTimeDelta <em>Time Delta</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getDuration <em>Duration</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#isTimeToStop <em>Time To Stop</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getWorkComplete <em>Work Complete</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getWorkIncrement <em>Work Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequencerImpl#getCycle <em>Cycle</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SequencerImpl extends IdentifiableImpl implements
+		Sequencer {
+
+	/**
+	 * The cached value of the '{@link #getStartTime() <em>Start Time</em>}'
+	 * containment reference. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getStartTime()
+	 * @generated NOT
+	 * @ordered
+	 */
+	protected STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+
+	/**
+	 * The cached value of the '{@link #getEndTime() <em>End Time</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEndTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime endTime;
+
+	/**
+	 * The cached value of the '{@link #getCurrentTime() <em>Current Time</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCurrentTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime currentTime;
+
+	/**
+	 * The default value of the '{@link #getTimeDelta() <em>Time Delta</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTimeDelta()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long TIME_DELTA_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getTimeDelta() <em>Time Delta</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTimeDelta()
+	 * @generated
+	 * @ordered
+	 */
+	protected long timeDelta = TIME_DELTA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long DURATION_EDEFAULT = -1L;
+
+	/**
+	 * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDuration()
+	 * @generated
+	 * @ordered
+	 */
+	protected long duration = DURATION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isTimeToStop() <em>Time To Stop</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isTimeToStop()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean TIME_TO_STOP_EDEFAULT = false;
+
+	/**
+	 * The default value of the '{@link #getWorkComplete() <em>Work Complete</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getWorkComplete()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double WORK_COMPLETE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getWorkComplete() <em>Work Complete</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getWorkComplete()
+	 * @generated
+	 * @ordered
+	 */
+	protected double workComplete = WORK_COMPLETE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getWorkIncrement() <em>Work Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getWorkIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int WORK_INCREMENT_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getCycle() <em>Cycle</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCycle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int CYCLE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getCycle() <em>Cycle</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCycle()
+	 * @generated
+	 * @ordered
+	 */
+	protected int cycle = CYCLE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SequencerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SequencerPackage.Literals.SEQUENCER;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public STEMTime getStartTime() {
+		return (STEMTime) EcoreUtil.copy(startTime);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetStartTime(STEMTime newStartTime,
+			NotificationChain msgs) {
+		STEMTime oldStartTime = startTime;
+		startTime = newStartTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__START_TIME, oldStartTime, newStartTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartTime(STEMTime newStartTime) {
+		if (newStartTime != startTime) {
+			NotificationChain msgs = null;
+			if (startTime != null)
+				msgs = ((InternalEObject)startTime).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__START_TIME, null, msgs);
+			if (newStartTime != null)
+				msgs = ((InternalEObject)newStartTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__START_TIME, null, msgs);
+			msgs = basicSetStartTime(newStartTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__START_TIME, newStartTime, newStartTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getEndTime() {
+		return endTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEndTime(STEMTime newEndTime,
+			NotificationChain msgs) {
+		STEMTime oldEndTime = endTime;
+		endTime = newEndTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__END_TIME, oldEndTime, newEndTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEndTime(STEMTime newEndTime) {
+		if (newEndTime != endTime) {
+			NotificationChain msgs = null;
+			if (endTime != null)
+				msgs = ((InternalEObject)endTime).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__END_TIME, null, msgs);
+			if (newEndTime != null)
+				msgs = ((InternalEObject)newEndTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__END_TIME, null, msgs);
+			msgs = basicSetEndTime(newEndTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__END_TIME, newEndTime, newEndTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public STEMTime getCurrentTime() {
+		// Is the current time set yet?
+		if (currentTime == null) {
+			// No
+			// Then the current time is the start time.
+			setCurrentTime((STEMTime) EcoreUtil.copy(getStartTime()));
+		}
+		return (STEMTime) EcoreUtil.copy(currentTime);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetCurrentTime(STEMTime newCurrentTime,
+			NotificationChain msgs) {
+		STEMTime oldCurrentTime = currentTime;
+		currentTime = newCurrentTime;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__CURRENT_TIME, oldCurrentTime, newCurrentTime);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentTime(STEMTime newCurrentTime) {
+		if (newCurrentTime != currentTime) {
+			NotificationChain msgs = null;
+			if (currentTime != null)
+				msgs = ((InternalEObject)currentTime).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__CURRENT_TIME, null, msgs);
+			if (newCurrentTime != null)
+				msgs = ((InternalEObject)newCurrentTime).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SequencerPackage.SEQUENCER__CURRENT_TIME, null, msgs);
+			msgs = basicSetCurrentTime(newCurrentTime, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__CURRENT_TIME, newCurrentTime, newCurrentTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public STEMTime getNextTime() {
+		cycle++; // count this as a completed cycle
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getTimeDelta() {
+		return timeDelta;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public long getDuration() {
+		// Can we compute a duration?
+		if (duration == UNKNOWN_DURATION && getStartTime() != null
+				&& getEndTime() != null) {
+			// Yes
+			duration = getEndTime().getTime().getTime()
+					- getStartTime().getTime().getTime();
+		}
+		return duration;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDuration(long newDuration) {
+		long oldDuration = duration;
+		duration = newDuration;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__DURATION, oldDuration, duration));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isTimeToStop() {
+		// TODO: implement this method to return the 'Time To Stop' attribute
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getWorkComplete() {
+		return workComplete;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setWorkComplete(double newWorkComplete) {
+		double oldWorkComplete = workComplete;
+		workComplete = newWorkComplete;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__WORK_COMPLETE, oldWorkComplete, workComplete));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getWorkIncrement() {
+		// TODO: implement this method to return the 'Work Increment' attribute
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getCycle() {
+		return cycle;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCycle(int newCycle) {
+		int oldCycle = cycle;
+		cycle = newCycle;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SequencerPackage.SEQUENCER__CYCLE, oldCycle, cycle));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void reset() {
+		setCurrentTime((STEMTime) EcoreUtil.copy(getStartTime()));
+		setWorkComplete(0);
+		setCycle(CYCLE_EDEFAULT);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd,
+			int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+				return basicSetStartTime(null, msgs);
+			case SequencerPackage.SEQUENCER__END_TIME:
+				return basicSetEndTime(null, msgs);
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+				return basicSetCurrentTime(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+				return getStartTime();
+			case SequencerPackage.SEQUENCER__END_TIME:
+				return getEndTime();
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+				return getCurrentTime();
+			case SequencerPackage.SEQUENCER__NEXT_TIME:
+				return getNextTime();
+			case SequencerPackage.SEQUENCER__TIME_DELTA:
+				return getTimeDelta();
+			case SequencerPackage.SEQUENCER__DURATION:
+				return getDuration();
+			case SequencerPackage.SEQUENCER__TIME_TO_STOP:
+				return isTimeToStop();
+			case SequencerPackage.SEQUENCER__WORK_COMPLETE:
+				return getWorkComplete();
+			case SequencerPackage.SEQUENCER__WORK_INCREMENT:
+				return getWorkIncrement();
+			case SequencerPackage.SEQUENCER__CYCLE:
+				return getCycle();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+				setStartTime((STEMTime)newValue);
+				return;
+			case SequencerPackage.SEQUENCER__END_TIME:
+				setEndTime((STEMTime)newValue);
+				return;
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+				setCurrentTime((STEMTime)newValue);
+				return;
+			case SequencerPackage.SEQUENCER__DURATION:
+				setDuration((Long)newValue);
+				return;
+			case SequencerPackage.SEQUENCER__WORK_COMPLETE:
+				setWorkComplete((Double)newValue);
+				return;
+			case SequencerPackage.SEQUENCER__CYCLE:
+				setCycle((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+				setStartTime((STEMTime)null);
+				return;
+			case SequencerPackage.SEQUENCER__END_TIME:
+				setEndTime((STEMTime)null);
+				return;
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+				setCurrentTime((STEMTime)null);
+				return;
+			case SequencerPackage.SEQUENCER__DURATION:
+				setDuration(DURATION_EDEFAULT);
+				return;
+			case SequencerPackage.SEQUENCER__WORK_COMPLETE:
+				setWorkComplete(WORK_COMPLETE_EDEFAULT);
+				return;
+			case SequencerPackage.SEQUENCER__CYCLE:
+				setCycle(CYCLE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+				return startTime != null;
+			case SequencerPackage.SEQUENCER__END_TIME:
+				return endTime != null;
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+				return currentTime != null;
+			case SequencerPackage.SEQUENCER__NEXT_TIME:
+				return getNextTime() != null;
+			case SequencerPackage.SEQUENCER__TIME_DELTA:
+				return timeDelta != TIME_DELTA_EDEFAULT;
+			case SequencerPackage.SEQUENCER__DURATION:
+				return duration != DURATION_EDEFAULT;
+			case SequencerPackage.SEQUENCER__TIME_TO_STOP:
+				return isTimeToStop() != TIME_TO_STOP_EDEFAULT;
+			case SequencerPackage.SEQUENCER__WORK_COMPLETE:
+				return workComplete != WORK_COMPLETE_EDEFAULT;
+			case SequencerPackage.SEQUENCER__WORK_INCREMENT:
+				return getWorkIncrement() != WORK_INCREMENT_EDEFAULT;
+			case SequencerPackage.SEQUENCER__CYCLE:
+				return cycle != CYCLE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		final SimpleDateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy");
+
+		final StringBuffer result = new StringBuffer();
+		result.append(dateFormat.format(startTime.getTime()));
+
+		if (endTime != null) {
+			result.append(" to ");
+			result.append(dateFormat.format(endTime.getTime()));
+		}
+
+		if (currentTime != null) {
+			result.append(", current=");
+			result.append(dateFormat.format(currentTime.getTime()));
+		}
+
+		result.append(" (timeDelta: "); //$NON-NLS-1$
+		result.append(timeDelta);
+		result.append(" (");
+		final long days = timeDelta / STEMTime.Units.DAY.getMilliseconds();
+		result.append(days);
+		result.append(days == 1 ? " day)" : " days)");
+		result.append(", duration: "); //$NON-NLS-1$
+		result.append(duration);
+		result.append(", workComplete: "); //$NON-NLS-1$
+		result.append(workComplete);
+		result.append(')');
+		return result.toString();
+	}
+
+} // SequencerImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerPackageImpl.java
new file mode 100644
index 0000000..51d3905
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequencerPackageImpl.java
@@ -0,0 +1,407 @@
+package org.eclipse.stem.core.sequencer.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerPackageImpl extends EPackageImpl implements SequencerPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass realTimeSequencerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sequencerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sequentialSequencerEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.sequencer.SequencerPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private SequencerPackageImpl() {
+		super(eNS_URI, SequencerFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link SequencerPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static SequencerPackage init() {
+		if (isInited) return (SequencerPackage)EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI);
+
+		// Obtain or create and register package
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new SequencerPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theSequencerPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theTriggerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theSequencerPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theTriggerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theSequencerPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(SequencerPackage.eNS_URI, theSequencerPackage);
+		return theSequencerPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRealTimeSequencer() {
+		return realTimeSequencerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSequencer() {
+		return sequencerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSequencer_StartTime() {
+		return (EReference)sequencerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSequencer_EndTime() {
+		return (EReference)sequencerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSequencer_CurrentTime() {
+		return (EReference)sequencerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSequencer_NextTime() {
+		return (EReference)sequencerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_TimeDelta() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_Duration() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_TimeToStop() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_WorkComplete() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_WorkIncrement() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequencer_Cycle() {
+		return (EAttribute)sequencerEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSequentialSequencer() {
+		return sequentialSequencerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSequentialSequencer_TimeIncrement() {
+		return (EAttribute)sequentialSequencerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerFactory getSequencerFactory() {
+		return (SequencerFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		realTimeSequencerEClass = createEClass(REAL_TIME_SEQUENCER);
+
+		sequencerEClass = createEClass(SEQUENCER);
+		createEReference(sequencerEClass, SEQUENCER__START_TIME);
+		createEReference(sequencerEClass, SEQUENCER__END_TIME);
+		createEReference(sequencerEClass, SEQUENCER__CURRENT_TIME);
+		createEReference(sequencerEClass, SEQUENCER__NEXT_TIME);
+		createEAttribute(sequencerEClass, SEQUENCER__TIME_DELTA);
+		createEAttribute(sequencerEClass, SEQUENCER__DURATION);
+		createEAttribute(sequencerEClass, SEQUENCER__TIME_TO_STOP);
+		createEAttribute(sequencerEClass, SEQUENCER__WORK_COMPLETE);
+		createEAttribute(sequencerEClass, SEQUENCER__WORK_INCREMENT);
+		createEAttribute(sequencerEClass, SEQUENCER__CYCLE);
+
+		sequentialSequencerEClass = createEClass(SEQUENTIAL_SEQUENCER);
+		createEAttribute(sequentialSequencerEClass, SEQUENTIAL_SEQUENCER__TIME_INCREMENT);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		realTimeSequencerEClass.getESuperTypes().add(this.getSequentialSequencer());
+		sequencerEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());
+		sequentialSequencerEClass.getESuperTypes().add(this.getSequencer());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(realTimeSequencerEClass, RealTimeSequencer.class, "RealTimeSequencer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(sequencerEClass, Sequencer.class, "Sequencer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSequencer_StartTime(), theModelPackage.getSTEMTime(), null, "startTime", null, 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSequencer_EndTime(), theModelPackage.getSTEMTime(), null, "endTime", null, 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSequencer_CurrentTime(), theModelPackage.getSTEMTime(), null, "currentTime", null, 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSequencer_NextTime(), theModelPackage.getSTEMTime(), null, "nextTime", null, 0, 1, Sequencer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequencer_TimeDelta(), ecorePackage.getELong(), "timeDelta", null, 0, 1, Sequencer.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequencer_Duration(), ecorePackage.getELong(), "duration", "-1", 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSequencer_TimeToStop(), ecorePackage.getEBoolean(), "timeToStop", null, 0, 1, Sequencer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequencer_WorkComplete(), ecorePackage.getEDouble(), "workComplete", null, 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequencer_WorkIncrement(), ecorePackage.getEInt(), "workIncrement", null, 0, 1, Sequencer.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getSequencer_Cycle(), ecorePackage.getEInt(), "cycle", "0", 0, 1, Sequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		addEOperation(sequencerEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sequentialSequencerEClass, SequentialSequencer.class, "SequentialSequencer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSequentialSequencer_TimeIncrement(), ecorePackage.getELong(), "timeIncrement", null, 0, 1, SequentialSequencer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //SequencerPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequentialSequencerImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequentialSequencerImpl.java
new file mode 100644
index 0000000..319bcd9
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/impl/SequentialSequencerImpl.java
@@ -0,0 +1,295 @@
+package org.eclipse.stem.core.sequencer.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Sequential Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.sequencer.impl.SequentialSequencerImpl#getTimeIncrement <em>Time Increment</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SequentialSequencerImpl extends SequencerImpl implements
+		SequentialSequencer {
+	/**
+	 * The default value of the '{@link #getTimeIncrement() <em>Time Increment</em>}'
+	 * attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getTimeIncrement()
+	 * @generated NOT
+	 * @ordered
+	 */
+	protected static final long TIME_INCREMENT_EDEFAULT = STEMTime.Units.DAY.getMilliseconds();
+
+	/**
+	 * The cached value of the '{@link #getTimeIncrement() <em>Time Increment</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTimeIncrement()
+	 * @generated
+	 * @ordered
+	 */
+	protected long timeIncrement = TIME_INCREMENT_EDEFAULT;
+
+	/**
+	 * This is an accumulator of the work increment that keeps account of the
+	 * fraction of the work increments until they exceed 1.0
+	 */
+	private double workIncrementRunningTotal = 0.0;
+
+	/**
+	 * If <code>true</code> then the last value has been returned by
+	 * {@link #getNextTime()}
+	 */
+	private boolean endOfSequenceReached = false;
+
+	/**
+	 * If <code>true</code> then the method {@link #getNextTime()} has not
+	 * been called yet so when it is it should return the value returned by
+	 * {@link #getStartTime()}
+	 */
+	private boolean getNextTimeNotCalled = true;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected SequentialSequencerImpl() {
+		super();
+		// The time delta is always the same with a sequential sequencer
+		timeDelta = getTimeIncrement();
+	} // SequentialSequencerImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return SequencerPackage.Literals.SEQUENTIAL_SEQUENCER;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getTimeIncrement() {
+		return timeIncrement;
+	}
+
+	/**
+	 * @see org.eclipse.stem.scenario.impl.SequencerImpl#isTimeToStop()
+	 */
+	@Override
+	public boolean isTimeToStop() {
+		return endOfSequenceReached || isEndTimeBefore(getCurrentTime());
+	} // isTimeToStop
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void setTimeIncrement(long newTimeIncrement) {
+		long oldTimeIncrement = timeIncrement;
+		timeIncrement = newTimeIncrement;
+		timeDelta = timeIncrement;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT,
+					oldTimeIncrement, timeIncrement));
+	}
+
+	/**
+	 * @see org.eclipse.stem.scenario.impl.SequencerImpl#getNextTime()
+	 * 
+	 * Among other things that this does, it increments the 
+	 * count of the number of completed cycles. 
+	 *
+	 */
+	@Override
+	public STEMTime getNextTime() {
+		super.getNextTime();
+		
+		STEMTime nextTime = null;
+		// Is this our first call?
+		if (getNextTimeNotCalled) {
+			// Yes
+			// then the start time is the first value to return, we don't
+			// test for it relationship to the end time here.  This makes
+			// it possible that the value returned would be after the end time.
+			nextTime = getStartTime();
+			getNextTimeNotCalled = false;
+		} // if first call
+		else {
+			final STEMTime potentialNextTime = getCurrentTime().addIncrement(
+					getTimeIncrement());
+			
+			// Was an end time specified and is it before the potential next
+			// time?
+			if (isEndTimeBefore(potentialNextTime)) {
+				// Yes
+				// Then the end time is the next value to return
+				nextTime = (STEMTime) EcoreUtil.copy(getEndTime());
+			} // if end time specified
+			else {
+				nextTime = potentialNextTime;
+			} // else
+
+			// Are we returning a value equal to the specified end time?
+			if (nextTime.equals(getEndTime())) {
+				// Yes
+				// ok, then this is the last value of the sequence. The next
+				// call
+				// to isTimeToStop() should fail
+				endOfSequenceReached = true;
+			} // if
+		} // else not first call
+		setCurrentTime(nextTime);
+		setWorkComplete(Math.min(getWorkComplete() + getWorkIncrement(), 100));
+		
+		return getCurrentTime();
+	} // getNextTime
+
+	/**
+	 * @param time
+	 * @return <code>true</code> if the end time is specified and it is before
+	 *         the current time, <code>false</code>, otherwise.
+	 */
+	protected boolean isEndTimeBefore(STEMTime time) {
+		return getEndTime() != null
+				&& (getEndTime().getTime().before(time.getTime()));
+	} // isEndTimeBefore
+
+	/**
+	 * @see org.eclipse.stem.scenario.impl.SequencerImpl#getWorkIncrement()
+	 */
+	@SuppressWarnings("cast")
+	@Override
+	public int getWorkIncrement() {
+		int retValue = 0;
+		// Is there a work increment?
+		if (getDuration() != UNKNOWN_DURATION) {
+			// Yes
+			// The work increment could be fractional (<1.0). If so then it will
+			// not accumulate in the progress monitor. So, we keep a running sum
+			// of the work increment and when it exceeds 1.0 we return the value
+			// less the fractional part and keep that for the future.
+			workIncrementRunningTotal += 100.0 * (double) getTimeIncrement()
+					/ (double) (getDuration()+getTimeIncrement());
+
+			// Do we have more than 1.0?
+			if (workIncrementRunningTotal >= 1.0) {
+				// Yes
+				retValue = (int) workIncrementRunningTotal;
+				workIncrementRunningTotal -= retValue;
+			}
+		}
+
+		return retValue;
+
+	} // getWorkIncrement
+
+	/**
+	 * handle what needs to be done when a simulation is reset.
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		workIncrementRunningTotal = 0.0;
+		getNextTimeNotCalled = true;
+		endOfSequenceReached = false;
+	} // reset
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT:
+				return getTimeIncrement();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT:
+				setTimeIncrement((Long)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT:
+				setTimeIncrement(TIME_INCREMENT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT:
+				return timeIncrement != TIME_INCREMENT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (timeIncrement: "); //$NON-NLS-1$
+		result.append(timeIncrement);
+		result.append(')');
+		return result.toString();
+	}
+
+} // SequentialSequencerImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/RealTimeSequencerItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/RealTimeSequencerItemProvider.java
new file mode 100644
index 0000000..235e633
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/RealTimeSequencerItemProvider.java
@@ -0,0 +1,136 @@
+package org.eclipse.stem.core.sequencer.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+//import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.sequencer.RealTimeSequencer} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RealTimeSequencerItemProvider
+	extends SequentialSequencerItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RealTimeSequencerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns RealTimeSequencer.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/RealTimeSequencer"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((RealTimeSequencer)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_RealTimeSequencer_type") : //$NON-NLS-1$
+			getString("_UI_RealTimeSequencer_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProvider.java
new file mode 100644
index 0000000..d40603f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProvider.java
@@ -0,0 +1,401 @@
+package org.eclipse.stem.core.sequencer.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+//import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+//import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;
+
+//import org.eclipse.stem.core.model.ModelFactory;
+
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.sequencer.Sequencer} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerItemProvider
+	extends IdentifiableItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addStartTimePropertyDescriptor(object);
+			addEndTimePropertyDescriptor(object);
+			addCurrentTimePropertyDescriptor(object);
+			addNextTimePropertyDescriptor(object);
+			addTimeDeltaPropertyDescriptor(object);
+			addDurationPropertyDescriptor(object);
+			addTimeToStopPropertyDescriptor(object);
+			addWorkCompletePropertyDescriptor(object);
+			addWorkIncrementPropertyDescriptor(object);
+			addCyclePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Start Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_startTime_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_startTime_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__START_TIME,
+				 true,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the End Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEndTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_endTime_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_endTime_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__END_TIME,
+				 true,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_currentTime_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_currentTime_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__CURRENT_TIME,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Next Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNextTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_nextTime_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_nextTime_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__NEXT_TIME,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Time Delta feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimeDeltaPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_timeDelta_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_timeDelta_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__TIME_DELTA,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Duration feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDurationPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_duration_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_duration_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__DURATION,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Time To Stop feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimeToStopPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_timeToStop_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_timeToStop_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__TIME_TO_STOP,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Work Complete feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addWorkCompletePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_workComplete_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_workComplete_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__WORK_COMPLETE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Work Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addWorkIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_workIncrement_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_workIncrement_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__WORK_INCREMENT,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Cycle feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCyclePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Sequencer_cycle_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Sequencer_cycle_feature", "_UI_Sequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENCER__CYCLE,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Sequencer)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Sequencer_type") : //$NON-NLS-1$
+			getString("_UI_Sequencer_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This returns Sequencer.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Sequencer"));
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Sequencer.class)) {
+			case SequencerPackage.SEQUENCER__START_TIME:
+			case SequencerPackage.SEQUENCER__END_TIME:
+			case SequencerPackage.SEQUENCER__CURRENT_TIME:
+			case SequencerPackage.SEQUENCER__TIME_DELTA:
+			case SequencerPackage.SEQUENCER__DURATION:
+			case SequencerPackage.SEQUENCER__TIME_TO_STOP:
+			case SequencerPackage.SEQUENCER__WORK_COMPLETE:
+			case SequencerPackage.SEQUENCER__WORK_INCREMENT:
+			case SequencerPackage.SEQUENCER__CYCLE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProviderAdapterFactory.java
new file mode 100644
index 0000000..b7deee1
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequencerItemProviderAdapterFactory.java
@@ -0,0 +1,233 @@
+package org.eclipse.stem.core.sequencer.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.sequencer.util.SequencerAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerItemProviderAdapterFactory extends SequencerAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.sequencer.RealTimeSequencer} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RealTimeSequencerItemProvider realTimeSequencerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.sequencer.RealTimeSequencer}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRealTimeSequencerAdapter() {
+		if (realTimeSequencerItemProvider == null) {
+			realTimeSequencerItemProvider = new RealTimeSequencerItemProvider(this);
+		}
+
+		return realTimeSequencerItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.sequencer.SequentialSequencer} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SequentialSequencerItemProvider sequentialSequencerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.sequencer.SequentialSequencer}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSequentialSequencerAdapter() {
+		if (sequentialSequencerItemProvider == null) {
+			sequentialSequencerItemProvider = new SequentialSequencerItemProvider(this);
+		}
+
+		return sequentialSequencerItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (realTimeSequencerItemProvider != null) realTimeSequencerItemProvider.dispose();
+		if (sequentialSequencerItemProvider != null) sequentialSequencerItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequentialSequencerItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequentialSequencerItemProvider.java
new file mode 100644
index 0000000..d0668b0
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/provider/SequentialSequencerItemProvider.java
@@ -0,0 +1,169 @@
+package org.eclipse.stem.core.sequencer.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+//import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.sequencer.SequentialSequencer} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequentialSequencerItemProvider
+	extends SequencerItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequentialSequencerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTimeIncrementPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Time Increment feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTimeIncrementPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SequentialSequencer_timeIncrement_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SequentialSequencer_timeIncrement_feature", "_UI_SequentialSequencer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 SequencerPackage.Literals.SEQUENTIAL_SEQUENCER__TIME_INCREMENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns Sequencer.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Sequencer"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((SequentialSequencer)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SequentialSequencer_type") : //$NON-NLS-1$
+			getString("_UI_SequentialSequencer_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SequentialSequencer.class)) {
+			case SequencerPackage.SEQUENTIAL_SEQUENCER__TIME_INCREMENT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerAdapterFactory.java
new file mode 100644
index 0000000..6a0275f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerAdapterFactory.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.core.sequencer.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+//import org.eclipse.stem.core.sequencer.*;
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.sequencer.SequencerPackage
+ * @generated
+ */
+public class SequencerAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static SequencerPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = SequencerPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SequencerSwitch<Adapter> modelSwitch =
+		new SequencerSwitch<Adapter>() {
+			@Override
+			public Adapter caseRealTimeSequencer(RealTimeSequencer object) {
+				return createRealTimeSequencerAdapter();
+			}
+			@Override
+			public Adapter caseSequencer(Sequencer object) {
+				return createSequencerAdapter();
+			}
+			@Override
+			public Adapter caseSequentialSequencer(SequentialSequencer object) {
+				return createSequentialSequencerAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.sequencer.RealTimeSequencer <em>Real Time Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.sequencer.RealTimeSequencer
+	 * @generated
+	 */
+	public Adapter createRealTimeSequencerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.sequencer.Sequencer <em>Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.sequencer.Sequencer
+	 * @generated
+	 */
+	public Adapter createSequencerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.sequencer.SequentialSequencer <em>Sequential Sequencer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.sequencer.SequentialSequencer
+	 * @generated
+	 */
+	public Adapter createSequentialSequencerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //SequencerAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerSwitch.java
new file mode 100644
index 0000000..56d36e6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/sequencer/util/SequencerSwitch.java
@@ -0,0 +1,219 @@
+package org.eclipse.stem.core.sequencer.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+//import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.core.sequencer.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.sequencer.SequencerPackage
+ * @generated
+ */
+public class SequencerSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static SequencerPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerSwitch() {
+		if (modelPackage == null) {
+			modelPackage = SequencerPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case SequencerPackage.REAL_TIME_SEQUENCER: {
+				RealTimeSequencer realTimeSequencer = (RealTimeSequencer)theEObject;
+				T1 result = caseRealTimeSequencer(realTimeSequencer);
+				if (result == null) result = caseSequentialSequencer(realTimeSequencer);
+				if (result == null) result = caseSequencer(realTimeSequencer);
+				if (result == null) result = caseIdentifiable(realTimeSequencer);
+				if (result == null) result = caseComparable(realTimeSequencer);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SequencerPackage.SEQUENCER: {
+				Sequencer sequencer = (Sequencer)theEObject;
+				T1 result = caseSequencer(sequencer);
+				if (result == null) result = caseIdentifiable(sequencer);
+				if (result == null) result = caseComparable(sequencer);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SequencerPackage.SEQUENTIAL_SEQUENCER: {
+				SequentialSequencer sequentialSequencer = (SequentialSequencer)theEObject;
+				T1 result = caseSequentialSequencer(sequentialSequencer);
+				if (result == null) result = caseSequencer(sequentialSequencer);
+				if (result == null) result = caseIdentifiable(sequentialSequencer);
+				if (result == null) result = caseComparable(sequentialSequencer);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Real Time Sequencer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Real Time Sequencer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRealTimeSequencer(RealTimeSequencer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sequencer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sequencer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSequencer(Sequencer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sequential Sequencer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sequential Sequencer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSequentialSequencer(SequentialSequencer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //SequencerSwitch
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/Solver.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/Solver.java
new file mode 100644
index 0000000..834b8a4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/Solver.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.solver;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.STEMTime;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Solver</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.core.solver.Solver#getDecorators <em>Decorators</em>}</li>

+ *   <li>{@link org.eclipse.stem.core.solver.Solver#isInitialized <em>Initialized</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.core.solver.SolverPackage#getSolver()

+ * @model

+ * @generated

+ */

+public interface Solver extends Identifiable {

+	/**

+	 * Returns the value of the '<em><b>Decorators</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Decorators</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Decorators</em>' attribute.

+	 * @see #setDecorators(EList)

+	 * @see org.eclipse.stem.core.solver.SolverPackage#getSolver_Decorators()

+	 * @model many="false" transient="true"

+	 * @generated

+	 */

+	EList<Decorator> getDecorators();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.core.solver.Solver#getDecorators <em>Decorators</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Decorators</em>' attribute.

+	 * @see #getDecorators()

+	 * @generated

+	 */

+	void setDecorators(EList<Decorator> value);

+

+	/**

+	 * Returns the value of the '<em><b>Initialized</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Initialized</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Initialized</em>' attribute.

+	 * @see #setInitialized(boolean)

+	 * @see org.eclipse.stem.core.solver.SolverPackage#getSolver_Initialized()

+	 * @model

+	 * @generated

+	 */

+	boolean isInitialized();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.core.solver.Solver#isInitialized <em>Initialized</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Initialized</em>' attribute.

+	 * @see #isInitialized()

+	 * @generated

+	 */

+	void setInitialized(boolean value);

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @model

+	 * @generated

+	 */

+	boolean step(STEMTime time, long timeDelta, int cycle);

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @model

+	 * @generated

+	 */

+	void reset();

+

+} // Solver

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverFactory.java
new file mode 100644
index 0000000..f9465d4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.core.solver;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.core.solver.SolverPackage

+ * @generated

+ */

+public interface SolverFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	SolverFactory eINSTANCE = org.eclipse.stem.core.solver.impl.SolverFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Solver</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Solver</em>'.

+	 * @generated

+	 */

+	Solver createSolver();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	SolverPackage getSolverPackage();

+

+} //SolverFactory

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverPackage.java
new file mode 100644
index 0000000..82472a2
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/SolverPackage.java
@@ -0,0 +1,215 @@
+package org.eclipse.stem.core.solver;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.stem.core.common.CommonPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.core.solver.SolverFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface SolverPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "solver"; //$NON-NLS-1$

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http://org/eclipse/stem/core/solver"; //$NON-NLS-1$

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.core.solver"; //$NON-NLS-1$

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	SolverPackage eINSTANCE = org.eclipse.stem.core.solver.impl.SolverPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.core.solver.impl.SolverImpl <em>Solver</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.solver.impl.SolverImpl

+	 * @see org.eclipse.stem.core.solver.impl.SolverPackageImpl#getSolver()

+	 * @generated

+	 */

+	int SOLVER = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER__URI = CommonPackage.IDENTIFIABLE__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER__TYPE_URI = CommonPackage.IDENTIFIABLE__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER__DUBLIN_CORE = CommonPackage.IDENTIFIABLE__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Decorators</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER__DECORATORS = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Initialized</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER__INITIALIZED = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 1;

+

+	/**

+	 * The number of structural features of the '<em>Solver</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int SOLVER_FEATURE_COUNT = CommonPackage.IDENTIFIABLE_FEATURE_COUNT + 2;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.core.solver.Solver <em>Solver</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Solver</em>'.

+	 * @see org.eclipse.stem.core.solver.Solver

+	 * @generated

+	 */

+	EClass getSolver();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.solver.Solver#getDecorators <em>Decorators</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Decorators</em>'.

+	 * @see org.eclipse.stem.core.solver.Solver#getDecorators()

+	 * @see #getSolver()

+	 * @generated

+	 */

+	EAttribute getSolver_Decorators();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.core.solver.Solver#isInitialized <em>Initialized</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Initialized</em>'.

+	 * @see org.eclipse.stem.core.solver.Solver#isInitialized()

+	 * @see #getSolver()

+	 * @generated

+	 */

+	EAttribute getSolver_Initialized();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	SolverFactory getSolverFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.core.solver.impl.SolverImpl <em>Solver</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.core.solver.impl.SolverImpl

+		 * @see org.eclipse.stem.core.solver.impl.SolverPackageImpl#getSolver()

+		 * @generated

+		 */

+		EClass SOLVER = eINSTANCE.getSolver();

+

+		/**

+		 * The meta object literal for the '<em><b>Decorators</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute SOLVER__DECORATORS = eINSTANCE.getSolver_Decorators();

+

+		/**

+		 * The meta object literal for the '<em><b>Initialized</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute SOLVER__INITIALIZED = eINSTANCE.getSolver_Initialized();

+

+	}

+

+} //SolverPackage

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverFactoryImpl.java
new file mode 100644
index 0000000..d433f85
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.solver.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.stem.core.solver.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverFactoryImpl extends EFactoryImpl implements SolverFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static SolverFactory init() {

+		try {

+			SolverFactory theSolverFactory = (SolverFactory)EPackage.Registry.INSTANCE.getEFactory("http://org/eclipse/stem/core/solver"); //$NON-NLS-1$ 

+			if (theSolverFactory != null) {

+				return theSolverFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new SolverFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case SolverPackage.SOLVER: return createSolver();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Solver createSolver() {

+		SolverImpl solver = new SolverImpl();

+		return solver;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverPackage getSolverPackage() {

+		return (SolverPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static SolverPackage getPackage() {

+		return SolverPackage.eINSTANCE;

+	}

+

+} //SolverFactoryImpl

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverImpl.java
new file mode 100644
index 0000000..4ce8ff4
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverImpl.java
@@ -0,0 +1,243 @@
+package org.eclipse.stem.core.solver.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+

+import org.eclipse.stem.core.common.impl.IdentifiableImpl;

+

+import org.eclipse.stem.core.model.Decorator;

+

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.core.solver.Solver;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Solver</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.core.solver.impl.SolverImpl#getDecorators <em>Decorators</em>}</li>

+ *   <li>{@link org.eclipse.stem.core.solver.impl.SolverImpl#isInitialized <em>Initialized</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class SolverImpl extends IdentifiableImpl implements Solver {

+	/**

+	 * The cached value of the '{@link #getDecorators() <em>Decorators</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDecorators()

+	 * @generated

+	 * @ordered

+	 */

+	protected EList<Decorator> decorators;

+

+	/**

+	 * The default value of the '{@link #isInitialized() <em>Initialized</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #isInitialized()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final boolean INITIALIZED_EDEFAULT = false;

+	/**

+	 * The cached value of the '{@link #isInitialized() <em>Initialized</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #isInitialized()

+	 * @generated

+	 * @ordered

+	 */

+	protected boolean initialized = INITIALIZED_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return SolverPackage.Literals.SOLVER;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EList<Decorator> getDecorators() {

+		return decorators;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDecorators(EList<Decorator> newDecorators) {

+		EList<Decorator> oldDecorators = decorators;

+		decorators = newDecorators;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, SolverPackage.SOLVER__DECORATORS, oldDecorators, decorators));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public boolean isInitialized() {

+		return initialized;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setInitialized(boolean newInitialized) {

+		boolean oldInitialized = initialized;

+		initialized = newInitialized;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, SolverPackage.SOLVER__INITIALIZED, oldInitialized, initialized));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public boolean step(STEMTime time, long timeDelta, int cycle) {

+		// TODO: implement this method

+		// Ensure that you remove @generated or mark it @generated NOT

+		throw new UnsupportedOperationException();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void reset() {

+		// TODO: implement this method

+		// Ensure that you remove @generated or mark it @generated NOT

+		throw new UnsupportedOperationException();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case SolverPackage.SOLVER__DECORATORS:

+				return getDecorators();

+			case SolverPackage.SOLVER__INITIALIZED:

+				return isInitialized();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case SolverPackage.SOLVER__DECORATORS:

+				setDecorators((EList<Decorator>)newValue);

+				return;

+			case SolverPackage.SOLVER__INITIALIZED:

+				setInitialized((Boolean)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case SolverPackage.SOLVER__DECORATORS:

+				setDecorators((EList<Decorator>)null);

+				return;

+			case SolverPackage.SOLVER__INITIALIZED:

+				setInitialized(INITIALIZED_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case SolverPackage.SOLVER__DECORATORS:

+				return decorators != null;

+			case SolverPackage.SOLVER__INITIALIZED:

+				return initialized != INITIALIZED_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (decorators: "); //$NON-NLS-1$

+		result.append(decorators);

+		result.append(", initialized: "); //$NON-NLS-1$

+		result.append(initialized);

+		result.append(')');

+		return result.toString();

+	}

+

+} //SolverImpl

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverPackageImpl.java
new file mode 100644
index 0000000..36a6f52
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/impl/SolverPackageImpl.java
@@ -0,0 +1,284 @@
+package org.eclipse.stem.core.solver.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EGenericType;

+import org.eclipse.emf.ecore.EOperation;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EcorePackage;

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.stem.core.common.CommonPackage;

+

+import org.eclipse.stem.core.common.impl.CommonPackageImpl;

+

+import org.eclipse.stem.core.experiment.ExperimentPackage;

+

+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;

+

+import org.eclipse.stem.core.graph.GraphPackage;

+

+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;

+

+import org.eclipse.stem.core.model.ModelPackage;

+

+import org.eclipse.stem.core.model.impl.ModelPackageImpl;

+

+import org.eclipse.stem.core.modifier.ModifierPackage;

+

+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;

+

+import org.eclipse.stem.core.predicate.PredicatePackage;

+

+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;

+

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+

+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;

+

+import org.eclipse.stem.core.sequencer.SequencerPackage;

+

+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;

+

+import org.eclipse.stem.core.solver.Solver;

+import org.eclipse.stem.core.solver.SolverFactory;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+import org.eclipse.stem.core.trigger.TriggerPackage;

+

+import org.eclipse.stem.core.trigger.impl.TriggerPackageImpl;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverPackageImpl extends EPackageImpl implements SolverPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass solverEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.stem.core.solver.SolverPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private SolverPackageImpl() {

+		super(eNS_URI, SolverFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.

+	 * 

+	 * <p>This method is used to initialize {@link SolverPackage#eINSTANCE} when that field is accessed.

+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static SolverPackage init() {

+		if (isInited) return (SolverPackage)EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI);

+

+		// Obtain or create and register package

+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new SolverPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		EcorePackage.eINSTANCE.eClass();

+

+		// Obtain or create and register interdependencies

+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);

+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);

+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);

+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);

+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);

+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);

+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);

+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);

+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI) : TriggerPackage.eINSTANCE);

+

+		// Create package meta-data objects

+		theSolverPackage.createPackageContents();

+		theCommonPackage.createPackageContents();

+		theExperimentPackage.createPackageContents();

+		theGraphPackage.createPackageContents();

+		theModelPackage.createPackageContents();

+		theModifierPackage.createPackageContents();

+		thePredicatePackage.createPackageContents();

+		theScenarioPackage.createPackageContents();

+		theSequencerPackage.createPackageContents();

+		theTriggerPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theSolverPackage.initializePackageContents();

+		theCommonPackage.initializePackageContents();

+		theExperimentPackage.initializePackageContents();

+		theGraphPackage.initializePackageContents();

+		theModelPackage.initializePackageContents();

+		theModifierPackage.initializePackageContents();

+		thePredicatePackage.initializePackageContents();

+		theScenarioPackage.initializePackageContents();

+		theSequencerPackage.initializePackageContents();

+		theTriggerPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theSolverPackage.freeze();

+

+  

+		// Update the registry and return the package

+		EPackage.Registry.INSTANCE.put(SolverPackage.eNS_URI, theSolverPackage);

+		return theSolverPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getSolver() {

+		return solverEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getSolver_Decorators() {

+		return (EAttribute)solverEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getSolver_Initialized() {

+		return (EAttribute)solverEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverFactory getSolverFactory() {

+		return (SolverFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		solverEClass = createEClass(SOLVER);

+		createEAttribute(solverEClass, SOLVER__DECORATORS);

+		createEAttribute(solverEClass, SOLVER__INITIALIZED);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);

+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);

+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		solverEClass.getESuperTypes().add(theCommonPackage.getIdentifiable());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(solverEClass, Solver.class, "Solver", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$

+		EGenericType g1 = createEGenericType(theEcorePackage.getEEList());

+		EGenericType g2 = createEGenericType(theModelPackage.getDecorator());

+		g1.getETypeArguments().add(g2);

+		initEAttribute(getSolver_Decorators(), g1, "decorators", null, 0, 1, Solver.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$

+		initEAttribute(getSolver_Initialized(), theEcorePackage.getEBoolean(), "initialized", null, 0, 1, Solver.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$

+

+		EOperation op = addEOperation(solverEClass, theEcorePackage.getEBoolean(), "step", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$

+		addEParameter(op, theModelPackage.getSTEMTime(), "time", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$

+		addEParameter(op, theEcorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$

+		addEParameter(op, theEcorePackage.getEInt(), "cycle", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$

+

+		addEOperation(solverEClass, null, "reset", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //SolverPackageImpl

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProvider.java
new file mode 100644
index 0000000..3ae0ef6
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProvider.java
@@ -0,0 +1,170 @@
+package org.eclipse.stem.core.solver.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+import org.eclipse.stem.core.common.provider.IdentifiableItemProvider;

+

+import org.eclipse.stem.core.solver.Solver;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.core.solver.Solver} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverItemProvider

+	extends IdentifiableItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addDecoratorsPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Decorators feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addDecoratorsPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_Solver_decorators_feature"), //$NON-NLS-1$

+				 getString("_UI_PropertyDescriptor_description", "_UI_Solver_decorators_feature", "_UI_Solver_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

+				 SolverPackage.Literals.SOLVER__DECORATORS,

+				 true,

+				 false,

+				 true,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns Solver.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Solver")); //$NON-NLS-1$

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((Solver)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_Solver_type") : //$NON-NLS-1$

+			getString("_UI_Solver_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(Solver.class)) {

+			case SolverPackage.SOLVER__INITIALIZED:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return CoreEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProviderAdapterFactory.java
new file mode 100644
index 0000000..f577ecf
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/provider/SolverItemProviderAdapterFactory.java
@@ -0,0 +1,209 @@
+package org.eclipse.stem.core.solver.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.core.solver.util.SolverAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverItemProviderAdapterFactory extends SolverAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.solver.Solver} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverItemProvider solverItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.core.solver.Solver}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createSolverAdapter() {

+		if (solverItemProvider == null) {

+			solverItemProvider = new SolverItemProvider(this);

+		}

+

+		return solverItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (solverItemProvider != null) solverItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverAdapterFactory.java
new file mode 100644
index 0000000..7376e3f
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverAdapterFactory.java
@@ -0,0 +1,167 @@
+package org.eclipse.stem.core.solver.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.core.solver.SolverPackage

+ * @generated

+ */

+public class SolverAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static SolverPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = SolverPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverSwitch<Adapter> modelSwitch =

+		new SolverSwitch<Adapter>() {

+			@Override

+			public Adapter caseSolver(Solver object) {

+				return createSolverAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.solver.Solver <em>Solver</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.solver.Solver

+	 * @generated

+	 */

+	public Adapter createSolverAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //SolverAdapterFactory

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverSwitch.java
new file mode 100644
index 0000000..294b91e
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/solver/util/SolverSwitch.java
@@ -0,0 +1,169 @@
+package org.eclipse.stem.core.solver.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.core.solver.SolverPackage

+ * @generated

+ */

+public class SolverSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static SolverPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverSwitch() {

+		if (modelPackage == null) {

+			modelPackage = SolverPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case SolverPackage.SOLVER: {

+				Solver solver = (Solver)theEObject;

+				T1 result = caseSolver(solver);

+				if (result == null) result = caseIdentifiable(solver);

+				if (result == null) result = caseComparable(solver);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSolver(Solver object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //SolverSwitch

diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/Trigger.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/Trigger.java
new file mode 100644
index 0000000..e340e9b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/Trigger.java
@@ -0,0 +1,90 @@
+// Trigger.java
+package org.eclipse.stem.core.trigger;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.predicate.Predicate;
+
+/**
+ * A <code>Trigger</code> is a {@link Decorator} that allows for conditional
+ * execution of another {@link Decorator}. It combines a reference to a
+ * conditional {@link Predicate} with a reference to another {@link Decorator}
+ * called the "action" ({@link #getAction()}. When the <code>Trigger</code>'s
+ * {@link #updateLabels(org.eclipse.stem.core.model.STEMTime, long)} method
+ * is called it invokes the {@link Predicate} and if it returns
+ * <code>true</code> then the <code>Trigger</code> calls the
+ * {@link #updateLabels(org.eclipse.stem.core.model.STEMTime, long)} method
+ * of the referenced {@link Decorator}.
+ * <p>
+ * Frequently, the action will be an instance of
+ * {@link org.eclipse.stem.core.modifier.Modifier} which will then alter
+ * some aspect of the running Simulation.
+ * <p>
+ * This interface definition is also an "Annotated Java Interface" that defines
+ * one class in a <a href="http://www.uml.org/">UML</a> "model". The UML class
+ * diagram for the model is in the <code>documentation</code> folder of the
+ * project. This file and the other interfaces in this Java package are
+ * processed by the Eclipse Modeling Framework (aka EMF <a
+ * href="http://org.eclipse/emf">http://org.eclipse/emf</a>). to automatically
+ * generate an implementation of the model. EMF is documented in the book <a
+ * href="http://www.awprofessional.com/bookstore/product.asp?isbn=0131425420&rl=1">Eclipse
+ * Modeling Framework </a> by Budinsky, et al.
+ * </p>
+ * @model
+ */
+public interface Trigger extends Decorator {
+	/**
+	 * This is the segment of the type {@link URI} that prefixes all other
+	 * segments in a {@link Trigger} {@link URI}.
+	 */
+	String URI_TYPE_TRIGGER_SEGMENT = "trigger";
+
+	/**
+	 * @return the {@link Trigger}'s Predicate
+	 * @model containment="false"
+	 */
+	Predicate getPredicate();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.trigger.Trigger#getPredicate
+	 * <em>Predicate</em>}' reference. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Predicate</em>' reference.
+	 * @see #getPredicate()
+	 * @generated
+	 */
+	void setPredicate(Predicate value);
+
+	/**
+	 * @return the {@link Trigger}'s action.
+	 * @model containment="false"
+	 */
+	Decorator getAction();
+
+	/**
+	 * Sets the value of the '
+	 * {@link org.eclipse.stem.core.trigger.Trigger#getAction
+	 * <em>Action</em>}' reference. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Action</em>' reference.
+	 * @see #getAction()
+	 * @generated
+	 */
+	void setAction(Decorator value);
+} // Trigger
\ No newline at end of file
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerFactory.java
new file mode 100644
index 0000000..76bbf26
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.core.trigger;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.trigger.TriggerPackage
+ * @generated
+ */
+public interface TriggerFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TriggerFactory eINSTANCE = org.eclipse.stem.core.trigger.impl.TriggerFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Trigger</em>'.
+	 * @generated
+	 */
+	Trigger createTrigger();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	TriggerPackage getTriggerPackage();
+
+} //TriggerFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerPackage.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerPackage.java
new file mode 100644
index 0000000..4999e15
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/TriggerPackage.java
@@ -0,0 +1,260 @@
+package org.eclipse.stem.core.trigger;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.trigger.TriggerFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface TriggerPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "trigger"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/core/trigger.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.core.trigger"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TriggerPackage eINSTANCE = org.eclipse.stem.core.trigger.impl.TriggerPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.trigger.impl.TriggerImpl <em>Trigger</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.trigger.impl.TriggerImpl
+	 * @see org.eclipse.stem.core.trigger.impl.TriggerPackageImpl#getTrigger()
+	 * @generated
+	 */
+	int TRIGGER = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__URI = ModelPackage.DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__TYPE_URI = ModelPackage.DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__DUBLIN_CORE = ModelPackage.DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__LABELS_TO_UPDATE = ModelPackage.DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__GRAPH = ModelPackage.DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__ENABLED = ModelPackage.DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__GRAPH_DECORATED = ModelPackage.DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__PROGRESS = ModelPackage.DECORATOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Predicate</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__PREDICATE = ModelPackage.DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Action</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER__ACTION = ModelPackage.DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Trigger</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRIGGER_FEATURE_COUNT = ModelPackage.DECORATOR_FEATURE_COUNT + 2;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.trigger.Trigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Trigger</em>'.
+	 * @see org.eclipse.stem.core.trigger.Trigger
+	 * @generated
+	 */
+	EClass getTrigger();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.trigger.Trigger#getPredicate <em>Predicate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Predicate</em>'.
+	 * @see org.eclipse.stem.core.trigger.Trigger#getPredicate()
+	 * @see #getTrigger()
+	 * @generated
+	 */
+	EReference getTrigger_Predicate();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.core.trigger.Trigger#getAction <em>Action</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Action</em>'.
+	 * @see org.eclipse.stem.core.trigger.Trigger#getAction()
+	 * @see #getTrigger()
+	 * @generated
+	 */
+	EReference getTrigger_Action();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	TriggerFactory getTriggerFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.trigger.impl.TriggerImpl <em>Trigger</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.trigger.impl.TriggerImpl
+		 * @see org.eclipse.stem.core.trigger.impl.TriggerPackageImpl#getTrigger()
+		 * @generated
+		 */
+		EClass TRIGGER = eINSTANCE.getTrigger();
+
+		/**
+		 * The meta object literal for the '<em><b>Predicate</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRIGGER__PREDICATE = eINSTANCE.getTrigger_Predicate();
+
+		/**
+		 * The meta object literal for the '<em><b>Action</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRIGGER__ACTION = eINSTANCE.getTrigger_Action();
+
+	}
+
+} //TriggerPackage
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerFactoryImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerFactoryImpl.java
new file mode 100644
index 0000000..467a0d5
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.trigger.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.core.trigger.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerFactoryImpl extends EFactoryImpl implements TriggerFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TriggerFactory init() {
+		try {
+			TriggerFactory theTriggerFactory = (TriggerFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/core/trigger.ecore"); //$NON-NLS-1$ 
+			if (theTriggerFactory != null) {
+				return theTriggerFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new TriggerFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case TriggerPackage.TRIGGER: return createTrigger();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Trigger createTrigger() {
+		TriggerImpl trigger = new TriggerImpl();
+		return trigger;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerPackage getTriggerPackage() {
+		return (TriggerPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static TriggerPackage getPackage() {
+		return TriggerPackage.eINSTANCE;
+	}
+
+} //TriggerFactoryImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerImpl.java
new file mode 100644
index 0000000..0ceec63
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerImpl.java
@@ -0,0 +1,334 @@
+package org.eclipse.stem.core.trigger.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.CorePlugin;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.DecoratorImpl;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.trigger.Trigger;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.trigger.impl.TriggerImpl#getPredicate <em>Predicate</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.trigger.impl.TriggerImpl#getAction <em>Action</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TriggerImpl extends DecoratorImpl implements Trigger {
+	/**
+	 * The cached value of the '{@link #getPredicate() <em>Predicate</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPredicate()
+	 * @generated
+	 * @ordered
+	 */
+	protected Predicate predicate;
+
+	/**
+	 * The cached value of the '{@link #getAction() <em>Action</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAction()
+	 * @generated
+	 * @ordered
+	 */
+	protected Decorator action;
+
+	protected Decorator actionCopy;
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TriggerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TriggerPackage.Literals.TRIGGER;
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph()
+	 */
+	@Override
+	public void decorateGraph() {
+		// Do we have an action?
+		if (action != null) {
+			// Yes
+			// Have we already made a copy of the action?
+			if (actionCopy == null ) {
+				// No
+				actionCopy = (Decorator) EcoreUtil.copy(action);
+				getGraph().getDecorators().add(actionCopy);
+			} // if
+			actionCopy.setEnabled(false);
+		} // if we have an action
+		else {
+			// No
+			CorePlugin.logInformation("No action specified for trigger \""+this.getDublinCore().getTitle()+ "\"", null);
+		}
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(org.eclipse.stem.core.model.STEMTime,
+	 *      long)
+	 */
+	@Override
+	public void updateLabels(STEMTime time, long timerPeriod, int cycle) {
+		// Evaluate the predicate and if it returns true, then let the action
+		// decorate the graph.
+		// Do we have an action?
+		if (actionCopy != null) {
+			// Yes
+			// Let the action do it's thing?
+			if (getPredicate().evaluate(time, timerPeriod, actionCopy)) {
+				// Yes
+				actionCopy.setEnabled(true);
+
+				// Has the action decorated the graph yet?
+				if (!actionCopy.isGraphDecorated()) {
+					// No
+					actionCopy.decorateGraph();
+					actionCopy.setGraphDecorated(true);
+				} // if graph not decorated yet
+
+				actionCopy.updateLabels(time, timerPeriod, cycle);
+			} // if action time
+			else {
+				// No
+				actionCopy.setEnabled(false);
+			} // else
+		} // if actionCopy != null
+	} // updateLabels
+
+	
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels()
+	 */
+	@Override
+	public void resetLabels() {
+		if (actionCopy != null) {
+			// Yes
+			actionCopy.setEnabled(false);
+			actionCopy.setGraphDecorated(false);
+			// The problem with reseting labels in a Trigger is that it implies
+			// some kind of initialization of the labels by the action that in
+			// fact should be conditional on the value of the Trigger's
+			// predicate.
+			// Is the action a Modifier?
+			if (actionCopy instanceof Modifier) {
+				// Yes
+				// It's okay for a Modifier to reset its labels because this
+				// restores them to their original values. This works for static
+				// labels. A more general Decorator, like an Infector, might do
+				// things it should not do unless it is triggered.
+				Modifier modifier = (Modifier) actionCopy;
+				modifier.resetLabels();
+			}
+		} // if
+	} // resetLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+//		retValue = retValue && getPredicate() != null;
+//		assert retValue;
+		
+		//retValue = retValue && getPredicate().sane();
+		//assert retValue;
+		
+		retValue = retValue && (getAction() == null || getAction().sane());
+		assert retValue;
+		
+		retValue = retValue && (actionCopy == null || actionCopy.sane());
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate getPredicate() {
+		if (predicate != null && predicate.eIsProxy()) {
+			InternalEObject oldPredicate = (InternalEObject)predicate;
+			predicate = (Predicate)eResolveProxy(oldPredicate);
+			if (predicate != oldPredicate) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TriggerPackage.TRIGGER__PREDICATE, oldPredicate, predicate));
+			}
+		}
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Predicate basicGetPredicate() {
+		return predicate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPredicate(Predicate newPredicate) {
+		Predicate oldPredicate = predicate;
+		predicate = newPredicate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TriggerPackage.TRIGGER__PREDICATE, oldPredicate, predicate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator getAction() {
+		if (action != null && action.eIsProxy()) {
+			InternalEObject oldAction = (InternalEObject)action;
+			action = (Decorator)eResolveProxy(oldAction);
+			if (action != oldAction) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TriggerPackage.TRIGGER__ACTION, oldAction, action));
+			}
+		}
+		return action;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator basicGetAction() {
+		return action;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAction(Decorator newAction) {
+		Decorator oldAction = action;
+		action = newAction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TriggerPackage.TRIGGER__ACTION, oldAction, action));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TriggerPackage.TRIGGER__PREDICATE:
+				if (resolve) return getPredicate();
+				return basicGetPredicate();
+			case TriggerPackage.TRIGGER__ACTION:
+				if (resolve) return getAction();
+				return basicGetAction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TriggerPackage.TRIGGER__PREDICATE:
+				setPredicate((Predicate)newValue);
+				return;
+			case TriggerPackage.TRIGGER__ACTION:
+				setAction((Decorator)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TriggerPackage.TRIGGER__PREDICATE:
+				setPredicate((Predicate)null);
+				return;
+			case TriggerPackage.TRIGGER__ACTION:
+				setAction((Decorator)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TriggerPackage.TRIGGER__PREDICATE:
+				return predicate != null;
+			case TriggerPackage.TRIGGER__ACTION:
+				return action != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //TriggerImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerPackageImpl.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerPackageImpl.java
new file mode 100644
index 0000000..b5f4f96
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/impl/TriggerPackageImpl.java
@@ -0,0 +1,267 @@
+package org.eclipse.stem.core.trigger.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.common.impl.CommonPackageImpl;
+
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+
+import org.eclipse.stem.core.experiment.impl.ExperimentPackageImpl;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.impl.GraphPackageImpl;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.model.impl.ModelPackageImpl;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.modifier.impl.ModifierPackageImpl;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+
+import org.eclipse.stem.core.predicate.impl.PredicatePackageImpl;
+
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.scenario.impl.ScenarioPackageImpl;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.sequencer.impl.SequencerPackageImpl;
+
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.solver.impl.SolverPackageImpl;
+import org.eclipse.stem.core.trigger.Trigger;
+import org.eclipse.stem.core.trigger.TriggerFactory;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerPackageImpl extends EPackageImpl implements TriggerPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass triggerEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.core.trigger.TriggerPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private TriggerPackageImpl() {
+		super(eNS_URI, TriggerFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link TriggerPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static TriggerPackage init() {
+		if (isInited) return (TriggerPackage)EPackage.Registry.INSTANCE.getEPackage(TriggerPackage.eNS_URI);
+
+		// Obtain or create and register package
+		TriggerPackageImpl theTriggerPackage = (TriggerPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof TriggerPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new TriggerPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		CommonPackageImpl theCommonPackage = (CommonPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) instanceof CommonPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI) : CommonPackage.eINSTANCE);
+		ExperimentPackageImpl theExperimentPackage = (ExperimentPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) instanceof ExperimentPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExperimentPackage.eNS_URI) : ExperimentPackage.eINSTANCE);
+		GraphPackageImpl theGraphPackage = (GraphPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) instanceof GraphPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI) : GraphPackage.eINSTANCE);
+		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
+		ModifierPackageImpl theModifierPackage = (ModifierPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) instanceof ModifierPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI) : ModifierPackage.eINSTANCE);
+		PredicatePackageImpl thePredicatePackage = (PredicatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) instanceof PredicatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI) : PredicatePackage.eINSTANCE);
+		ScenarioPackageImpl theScenarioPackage = (ScenarioPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) instanceof ScenarioPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ScenarioPackage.eNS_URI) : ScenarioPackage.eINSTANCE);
+		SequencerPackageImpl theSequencerPackage = (SequencerPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) instanceof SequencerPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SequencerPackage.eNS_URI) : SequencerPackage.eINSTANCE);
+		SolverPackageImpl theSolverPackage = (SolverPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) instanceof SolverPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI) : SolverPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theTriggerPackage.createPackageContents();
+		theCommonPackage.createPackageContents();
+		theExperimentPackage.createPackageContents();
+		theGraphPackage.createPackageContents();
+		theModelPackage.createPackageContents();
+		theModifierPackage.createPackageContents();
+		thePredicatePackage.createPackageContents();
+		theScenarioPackage.createPackageContents();
+		theSequencerPackage.createPackageContents();
+		theSolverPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theTriggerPackage.initializePackageContents();
+		theCommonPackage.initializePackageContents();
+		theExperimentPackage.initializePackageContents();
+		theGraphPackage.initializePackageContents();
+		theModelPackage.initializePackageContents();
+		theModifierPackage.initializePackageContents();
+		thePredicatePackage.initializePackageContents();
+		theScenarioPackage.initializePackageContents();
+		theSequencerPackage.initializePackageContents();
+		theSolverPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theTriggerPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(TriggerPackage.eNS_URI, theTriggerPackage);
+		return theTriggerPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTrigger() {
+		return triggerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTrigger_Predicate() {
+		return (EReference)triggerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTrigger_Action() {
+		return (EReference)triggerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerFactory getTriggerFactory() {
+		return (TriggerFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		triggerEClass = createEClass(TRIGGER);
+		createEReference(triggerEClass, TRIGGER__PREDICATE);
+		createEReference(triggerEClass, TRIGGER__ACTION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		PredicatePackage thePredicatePackage = (PredicatePackage)EPackage.Registry.INSTANCE.getEPackage(PredicatePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		triggerEClass.getESuperTypes().add(theModelPackage.getDecorator());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(triggerEClass, Trigger.class, "Trigger", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getTrigger_Predicate(), thePredicatePackage.getPredicate(), null, "predicate", null, 0, 1, Trigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getTrigger_Action(), theModelPackage.getDecorator(), null, "action", null, 0, 1, Trigger.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //TriggerPackageImpl
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProvider.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProvider.java
new file mode 100644
index 0000000..b01a19b
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProvider.java
@@ -0,0 +1,263 @@
+package org.eclipse.stem.core.trigger.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.provider.DecoratorItemProvider;
+import org.eclipse.stem.core.predicate.Predicate;
+import org.eclipse.stem.core.trigger.Trigger;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.swt.dnd.DND;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.core.trigger.Trigger} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerItemProvider
+	extends DecoratorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(TriggerPackage.Literals.TRIGGER__PREDICATE);
+			childrenFeatures.add(TriggerPackage.Literals.TRIGGER__ACTION);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns Trigger.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/customobj16/Trigger"));
+	}
+	
+	/**
+	 * This returns Trigger.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getImageGen(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Trigger")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((Trigger)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Trigger_type") : //$NON-NLS-1$
+			getString("_UI_Trigger_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Trigger.class)) {
+			case TriggerPackage.TRIGGER__PREDICATE:
+			case TriggerPackage.TRIGGER__ACTION:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      org.eclipse.emf.ecore.EObject,
+	 *      org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object, int)
+	 */
+	@Override
+	protected Command createSetCommand(EditingDomain domain, EObject owner,
+			EStructuralFeature feature, Object value, int index) {
+		// Are we setting the model during a drag and drop?
+		Object temp = value;
+
+		if (value instanceof IFile) {
+			// Yes
+			final IFile iFile = (IFile) value;
+			final URI uri = URI.createFileURI(iFile.getLocation().toString());
+			final Identifiable identifable = Utility.getIdentifiable(uri);
+			temp = identifable;
+		} // if IFile
+
+		else if (value instanceof String) {
+			// Yes
+			// These come from IdentifablePluginView
+			final String uriString = (String) value;
+			try {
+				final URI uri = URI.createURI(uriString);
+				final Identifiable identifable = Utility.getIdentifiable(uri);
+				temp = identifable;
+			} catch (Exception e) {
+				// Ignore it
+			}
+		} // if String
+
+		if (temp instanceof Predicate) {
+			return super.createSetCommand(domain, owner,
+					TriggerPackage.eINSTANCE.getTrigger_Predicate(), temp, index);
+		} else if (temp instanceof Decorator) {
+			return super.createSetCommand(domain, owner,
+					TriggerPackage.eINSTANCE.getTrigger_Action(), temp,
+					index);
+		} // if
+		else {
+			return super.createSetCommand(domain, owner, feature, value, index);
+		}
+	} // createSetCommand
+	
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain,
+	 *      java.lang.Object, float, int, int, java.util.Collection)
+	 */
+	@Override
+	protected Command createDragAndDropCommand(EditingDomain domain,
+			Object owner, float location, int operations, int operation,
+			Collection<?> collection) {
+		// We add DND.DROP_LINK as an allowed operation because all drops will
+		// be links and some sources don't allow links, we convert to links
+		// anyway
+		return super.createDragAndDropCommand(domain, owner, location,
+				operations | DND.DROP_LINK, operation, collection);
+	} // createDragAndDropCommand
+	
+	/**
+	 * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isWrappingNeeded(java.lang.Object)
+	 */
+	@Override
+	protected boolean isWrappingNeeded(Object object) {
+		// return super.isWrappingNeeded(object);
+		// We return true so that non-containment references are wrapped. This
+		// enables the delete command in the editor's context menu.
+		return true;
+	} // isWrappingNeeded
+	
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return CoreEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProviderAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProviderAdapterFactory.java
new file mode 100644
index 0000000..0782f55
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/provider/TriggerItemProviderAdapterFactory.java
@@ -0,0 +1,209 @@
+package org.eclipse.stem.core.trigger.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.trigger.util.TriggerAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerItemProviderAdapterFactory extends TriggerAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.core.trigger.Trigger} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TriggerItemProvider triggerItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.core.trigger.Trigger}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTriggerAdapter() {
+		if (triggerItemProvider == null) {
+			triggerItemProvider = new TriggerItemProvider(this);
+		}
+
+		return triggerItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (triggerItemProvider != null) triggerItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerAdapterFactory.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerAdapterFactory.java
new file mode 100644
index 0000000..5d2defb
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerAdapterFactory.java
@@ -0,0 +1,187 @@
+package org.eclipse.stem.core.trigger.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.model.Decorator;
+
+import org.eclipse.stem.core.trigger.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.trigger.TriggerPackage
+ * @generated
+ */
+public class TriggerAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TriggerPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = TriggerPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TriggerSwitch<Adapter> modelSwitch =
+		new TriggerSwitch<Adapter>() {
+			@Override
+			public Adapter caseTrigger(Trigger object) {
+				return createTriggerAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.trigger.Trigger <em>Trigger</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.trigger.Trigger
+	 * @generated
+	 */
+	public Adapter createTriggerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //TriggerAdapterFactory
diff --git a/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerSwitch.java b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerSwitch.java
new file mode 100644
index 0000000..9c4293d
--- /dev/null
+++ b/org.eclipse.stem.core/src/org/eclipse/stem/core/trigger/util/TriggerSwitch.java
@@ -0,0 +1,187 @@
+package org.eclipse.stem.core.trigger.util;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.model.Decorator;
+
+import org.eclipse.stem.core.trigger.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.core.trigger.TriggerPackage
+ * @generated
+ */
+public class TriggerSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TriggerPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerSwitch() {
+		if (modelPackage == null) {
+			modelPackage = TriggerPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case TriggerPackage.TRIGGER: {
+				Trigger trigger = (Trigger)theEObject;
+				T1 result = caseTrigger(trigger);
+				if (result == null) result = caseDecorator(trigger);
+				if (result == null) result = caseIdentifiable(trigger);
+				if (result == null) result = caseComparable(trigger);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Trigger</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTrigger(Trigger object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //TriggerSwitch
diff --git a/org.eclipse.stem.definitions/.classpath b/org.eclipse.stem.definitions/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.definitions/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.definitions/.cvsignore b/org.eclipse.stem.definitions/.cvsignore
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/org.eclipse.stem.definitions/.cvsignore
@@ -0,0 +1 @@
+text
diff --git a/org.eclipse.stem.definitions/.fbprefs b/org.eclipse.stem.definitions/.fbprefs
new file mode 100644
index 0000000..22268a1
--- /dev/null
+++ b/org.eclipse.stem.definitions/.fbprefs
@@ -0,0 +1,125 @@
+#FindBugs User Preferences
+#Tue Aug 11 15:08:12 EDT 2009
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorBooleanReturnNull=BooleanReturnNull|true
+detectorCallToUnsupportedMethod=CallToUnsupportedMethod|true
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorCrossSiteScripting=CrossSiteScripting|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDontUseEnum=DontUseEnum|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
+detectorFinalizerNullsFields=FinalizerNullsFields|true
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorFormatStringChecker=FormatStringChecker|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInconsistentAnnotations=InconsistentAnnotations|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|true
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNumberConstructor=NumberConstructor|false
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorRepeatedConditionals=RepeatedConditionals|true
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStaticCalendarDetector=StaticCalendarDetector|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
+detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
+detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUseObjectEquals=UseObjectEquals|false
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+effort=max
+excludefilter0=.settings/findbugs.exclude.xml
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false
+filter_settings_neg=NOISE|
+run_at_full_build=false
diff --git a/org.eclipse.stem.definitions/.project b/org.eclipse.stem.definitions/.project
new file mode 100644
index 0000000..755c06b
--- /dev/null
+++ b/org.eclipse.stem.definitions/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.definitions</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.definitions/.settings/findbugs.exclude.xml b/org.eclipse.stem.definitions/.settings/findbugs.exclude.xml
new file mode 100644
index 0000000..68debfc
--- /dev/null
+++ b/org.eclipse.stem.definitions/.settings/findbugs.exclude.xml
@@ -0,0 +1,46 @@
+<FindBugsFilter>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.*\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.edges\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.edges\.util\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.labels\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.labels\.util\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+       <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.nodes\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+       <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.nodes\.util\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.types\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.definitions\.types\.util\.*\.*" />
+        <Bug code="ST,LI,MS,IC" />
+    </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af59edc
--- /dev/null
+++ b/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:39:26 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..b7b599a
--- /dev/null
+++ b/org.eclipse.stem.definitions/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Sep 12 22:17:05 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.definitions/META-INF/MANIFEST.MF b/org.eclipse.stem.definitions/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5b008d7
--- /dev/null
+++ b/org.eclipse.stem.definitions/META-INF/MANIFEST.MF
@@ -0,0 +1,41 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.definitions; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.definitions.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.definitions,
+ org.eclipse.stem.definitions.adapters.relativevalue,
+ org.eclipse.stem.definitions.adapters.relativevalue.history,
+ org.eclipse.stem.definitions.adapters.spatial,
+ org.eclipse.stem.definitions.adapters.spatial.geo,
+ org.eclipse.stem.definitions.adapters.spatial.geo.preferences,
+ org.eclipse.stem.definitions.edges,
+ org.eclipse.stem.definitions.edges.impl,
+ org.eclipse.stem.definitions.edges.provider,
+ org.eclipse.stem.definitions.edges.util,
+ org.eclipse.stem.definitions.labels,
+ org.eclipse.stem.definitions.labels.impl,
+ org.eclipse.stem.definitions.labels.presentation,
+ org.eclipse.stem.definitions.labels.provider,
+ org.eclipse.stem.definitions.labels.util,
+ org.eclipse.stem.definitions.nodes,
+ org.eclipse.stem.definitions.nodes.impl,
+ org.eclipse.stem.definitions.nodes.presentation,
+ org.eclipse.stem.definitions.nodes.provider,
+ org.eclipse.stem.definitions.nodes.util,
+ org.eclipse.stem.definitions.types,
+ org.eclipse.stem.definitions.types.impl,
+ org.eclipse.stem.definitions.types.provider,
+ org.eclipse.stem.definitions.types.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.data.geography,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.eclipse.emf.ecore.provider
diff --git a/org.eclipse.stem.definitions/build.properties b/org.eclipse.stem.definitions/build.properties
new file mode 100644
index 0000000..6ff0ced
--- /dev/null
+++ b/org.eclipse.stem.definitions/build.properties
@@ -0,0 +1,16 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               epl-v10.html,\
+               notice.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.definitions/epl-v10.html b/org.eclipse.stem.definitions/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.definitions/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif
new file mode 100644
index 0000000..3f70d4d
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif
new file mode 100644
index 0000000..b89aadc
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MigrationEdgeLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MigrationEdgeLabelValue.gif
new file mode 100644
index 0000000..430fd75
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MigrationEdgeLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MixingEdgeLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MixingEdgeLabelValue.gif
new file mode 100644
index 0000000..8f218cb
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_MixingEdgeLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..f37ce87
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif
new file mode 100644
index 0000000..cc34a0f
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..2f084ae
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RoadTransportRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RoadTransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..ff485d7
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_RoadTransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..8a52761
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_CommonBorderRelationshipLabel.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_CommonBorderRelationshipLabel.gif
new file mode 100644
index 0000000..5752ff0
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_CommonBorderRelationshipLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MigrationEdgeLabel.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MigrationEdgeLabel.gif
new file mode 100644
index 0000000..420564e
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MigrationEdgeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MixingEdgeLabel.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MixingEdgeLabel.gif
new file mode 100644
index 0000000..c382aa6
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_MixingEdgeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_RelativePhysicalRelationshipLabel.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_RelativePhysicalRelationshipLabel.gif
new file mode 100644
index 0000000..1b453f4
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_RelativePhysicalRelationshipLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_TransportRelationshipLabel.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_TransportRelationshipLabel.gif
new file mode 100644
index 0000000..d61425d
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateEdge_label_TransportRelationshipLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
new file mode 100644
index 0000000..628ff3f
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif
new file mode 100644
index 0000000..6f8b380
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif
new file mode 100644
index 0000000..f93c92d
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MigrationEdgeLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MigrationEdgeLabelValue.gif
new file mode 100644
index 0000000..1bf6bbe
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MigrationEdgeLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MixingEdgeLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MixingEdgeLabelValue.gif
new file mode 100644
index 0000000..6910560
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_MixingEdgeLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..1f765e1
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif
new file mode 100644
index 0000000..446da01
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..d193bf3
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RoadTransportRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RoadTransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..44afafd
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_RoadTransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..20f19ea
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/obj16/EdgesModelFile.gif b/org.eclipse.stem.definitions/icons/full/obj16/EdgesModelFile.gif
new file mode 100644
index 0000000..b91c5df
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/obj16/EdgesModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/obj16/LabelsModelFile.gif b/org.eclipse.stem.definitions/icons/full/obj16/LabelsModelFile.gif
new file mode 100644
index 0000000..b251792
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/obj16/LabelsModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/obj16/NodesModelFile.gif b/org.eclipse.stem.definitions/icons/full/obj16/NodesModelFile.gif
new file mode 100644
index 0000000..8b3ad80
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/obj16/NodesModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/wizban/NewEdges.gif b/org.eclipse.stem.definitions/icons/full/wizban/NewEdges.gif
new file mode 100644
index 0000000..9e8865f
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/wizban/NewEdges.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/wizban/NewLabels.gif b/org.eclipse.stem.definitions/icons/full/wizban/NewLabels.gif
new file mode 100644
index 0000000..97fd1e1
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/wizban/NewLabels.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/icons/full/wizban/NewNodes.gif b/org.eclipse.stem.definitions/icons/full/wizban/NewNodes.gif
new file mode 100644
index 0000000..33f212f
--- /dev/null
+++ b/org.eclipse.stem.definitions/icons/full/wizban/NewNodes.gif
Binary files differ
diff --git a/org.eclipse.stem.definitions/model/definitions.genmodel b/org.eclipse.stem.definitions/model/definitions.genmodel
new file mode 100644
index 0000000..355f5e5
--- /dev/null
+++ b/org.eclipse.stem.definitions/model/definitions.genmodel
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText=""

+    modelDirectory="/org.eclipse.stem.definitions/src" editDirectory="/org.eclipse.stem.definitions/src"

+    editorDirectory="/org.eclipse.stem.definitions/src" modelPluginID="org.eclipse.stem.definitions"

+    redirection="" modelName="Definitions" nonNLSMarkers="true" testsDirectory="/org.eclipse.stem.tests.definitions/src"

+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//modifier ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.core/model/core.genmodel#//solver">

+  <foreignModel>@model</foreignModel>

+  <genPackages prefix="Edges" basePackage="org.eclipse.stem.definitions" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="edges.ecore#/">

+    <genClasses image="false" ecoreClass="edges.ecore#//MigrationEdge"/>

+    <genClasses image="false" ecoreClass="edges.ecore#//MigrationEdgeLabel"/>

+    <genClasses image="false" ecoreClass="edges.ecore#//MigrationEdgeLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute edges.ecore#//MigrationEdgeLabelValue/migrationRate"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="edges.ecore#//MixingEdge"/>

+    <genClasses image="false" ecoreClass="edges.ecore#//MixingEdgeLabel"/>

+    <genClasses image="false" ecoreClass="edges.ecore#//MixingEdgeLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute edges.ecore#//MixingEdgeLabelValue/mixingRate"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Labels" basePackage="org.eclipse.stem.definitions" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      ecorePackage="labels.ecore#/">

+    <genEnums ecoreEnum="labels.ecore#//RelativePhysicalRelationship">

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Unspecified"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Above"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Below"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/RightOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/LeftOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/NorthOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/SouthOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/WestOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/EastOf"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Contains"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/ContainedBy"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Overlaps"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//RelativePhysicalRelationship/Orbits"/>

+    </genEnums>

+    <genEnums ecoreEnum="labels.ecore#//TransportMode">

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/unspecified"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/air"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/road"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/rail"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/marine"/>

+      <genEnumLiterals ecoreEnumLiteral="labels.ecore#//TransportMode/foot"/>

+    </genEnums>

+    <genClasses image="false" ecoreClass="labels.ecore#//AreaLabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference labels.ecore#//AreaLabel/currentAreaValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//AreaLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//AreaLabelValue/area"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//AreaLabelValue/averageExtent"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//CommonBorderRelationshipLabel"/>

+    <genClasses image="false" ecoreClass="labels.ecore#//CommonBorderRelationshipLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//CommonBorderRelationshipLabelValue/borderLength"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//PhysicalRelationshipLabel"/>

+    <genClasses image="false" ecoreClass="labels.ecore#//PopulationLabel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//PopulationLabel/populationIdentifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//PopulationLabel/name"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference labels.ecore#//PopulationLabel/currentPopulationValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//PopulationLabel/populatedArea"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//PopulationLabel/validYear"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//PopulationLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//PopulationLabelValue/count"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//RelativePhysicalRelationshipLabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference labels.ecore#//RelativePhysicalRelationshipLabel/currentRelationship"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//RelativePhysicalRelationshipLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//RelativePhysicalRelationshipLabelValue/adjacent"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//RelativePhysicalRelationshipLabelValue/relationship"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//TransportRelationshipLabel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/transportMode"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/populationIdentifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/transportIdentifier"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference labels.ecore#//TransportRelationshipLabel/currentTransportRelationshipLabelValue"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/rateTimePeriod"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/departureCapacity"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/maximumDepartureCapacity"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/capacity"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/maximumCapacity"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/transitTime"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabel/startUpDelay"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//TransportRelationshipLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TransportRelationshipLabelValue/availableDepartureCapacityProportion"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="labels.ecore#//PhysicalRelationshipLabelValue"/>

+    <genClasses image="false" ecoreClass="labels.ecore#//RoadTransportRelationshipLabel"/>

+    <genClasses image="false" ecoreClass="labels.ecore#//RoadTransportRelationshipLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//RoadTransportRelationshipLabelValue/roadName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//RoadTransportRelationshipLabelValue/roadClass"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//RoadTransportRelationshipLabelValue/numberCrossings"/>

+    </genClasses>

+  </genPackages>

+  <genPackages prefix="Nodes" basePackage="org.eclipse.stem.definitions" disposableProviderFactory="true"

+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"

+      contentTypeIdentifier="" ecorePackage="nodes.ecore#/">

+    <genClasses image="false" ecoreClass="nodes.ecore#//GeographicFeature"/>

+    <genClasses image="false" ecoreClass="nodes.ecore#//Region"/>

+    <genClasses image="false" ecoreClass="nodes.ecore#//Node"/>

+  </genPackages>

+  <genPackages prefix="Types" basePackage="org.eclipse.stem.definitions" disposableProviderFactory="true"

+      ecorePackage="types.ecore#/">

+    <genClasses image="false" ecoreClass="types.ecore#//CategorizedType"/>

+    <genClasses image="false" ecoreClass="types.ecore#//Rate">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute types.ecore#//Rate/rate"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.definitions/model/edges.ecore b/org.eclipse.stem.definitions/model/edges.ecore
new file mode 100644
index 0000000..322da3d
--- /dev/null
+++ b/org.eclipse.stem.definitions/model/edges.ecore
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="edges"

+    nsURI="http:///org/eclipse/stem/definitions/edges.ecore" nsPrefix="org.eclipse.stem.definitions.edges">

+  <eClassifiers xsi:type="ecore:EClass" name="MigrationEdge" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Edge"/>

+  <eClassifiers xsi:type="ecore:EClass" name="MigrationEdgeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//EdgeLabel"/>

+  <eClassifiers xsi:type="ecore:EClass" name="MigrationEdgeLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="migrationRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"

+        defaultValueLiteral="0.0"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MixingEdge" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Edge"/>

+  <eClassifiers xsi:type="ecore:EClass" name="MixingEdgeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//EdgeLabel"/>

+  <eClassifiers xsi:type="ecore:EClass" name="MixingEdgeLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixingRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.definitions/model/labels.ecore b/org.eclipse.stem.definitions/model/labels.ecore
new file mode 100644
index 0000000..2796105
--- /dev/null
+++ b/org.eclipse.stem.definitions/model/labels.ecore
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="labels"
+    nsURI="http:///org/eclipse/stem/definitions/labels.ecore" nsPrefix="org.eclipse.stem.definitions.labels">
+  <eClassifiers xsi:type="ecore:EClass" name="AreaLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//StaticNodeLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentAreaValue" eType="#//AreaLabelValue"
+        changeable="false" volatile="true" transient="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AreaLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="area" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="averageExtent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CommonBorderRelationshipLabel" eSuperTypes="#//PhysicalRelationshipLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="CommonBorderRelationshipLabelValue"
+      eSuperTypes="#//PhysicalRelationshipLabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="borderLength" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PhysicalRelationshipLabel" abstract="true"
+      eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//StaticEdgeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PopulationLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//StaticNodeLabel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentPopulationValue"
+        eType="#//PopulationLabelValue" changeable="false" volatile="true" transient="true"
+        resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populatedArea" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="validYear" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="2006"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PopulationLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RelativePhysicalRelationshipLabel" eSuperTypes="#//PhysicalRelationshipLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentRelationship" eType="#//RelativePhysicalRelationshipLabelValue"
+        changeable="false" volatile="true" transient="true" resolveProxies="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RelativePhysicalRelationshipLabelValue"
+      eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="adjacent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="relationship" eType="#//RelativePhysicalRelationship"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransportRelationshipLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicEdgeLabel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transportMode" eType="#//TransportMode"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transportIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="currentTransportRelationshipLabelValue"
+        eType="#//TransportRelationshipLabelValue" changeable="false" volatile="true"
+        transient="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rateTimePeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="departureCapacity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximumDepartureCapacity"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="capacity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maximumCapacity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transitTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startUpDelay" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransportRelationshipLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="availableDepartureCapacityProportion"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="1.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PhysicalRelationshipLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RoadTransportRelationshipLabel" eSuperTypes="#//PhysicalRelationshipLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RoadTransportRelationshipLabelValue"
+      eSuperTypes="#//PhysicalRelationshipLabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="roadName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="road"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="roadClass" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="route"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numberCrossings" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+        defaultValueLiteral="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="RelativePhysicalRelationship">
+    <eLiterals name="Unspecified"/>
+    <eLiterals name="Above" value="2"/>
+    <eLiterals name="Below" value="4"/>
+    <eLiterals name="RightOf" value="6"/>
+    <eLiterals name="LeftOf" value="8"/>
+    <eLiterals name="NorthOf" value="10"/>
+    <eLiterals name="SouthOf" value="12"/>
+    <eLiterals name="WestOf" value="14"/>
+    <eLiterals name="EastOf" value="16"/>
+    <eLiterals name="Contains" value="18"/>
+    <eLiterals name="ContainedBy" value="20"/>
+    <eLiterals name="Overlaps" value="22"/>
+    <eLiterals name="Orbits" value="24"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="TransportMode">
+    <eLiterals name="unspecified"/>
+    <eLiterals name="air" value="2"/>
+    <eLiterals name="road" value="4"/>
+    <eLiterals name="rail" value="6"/>
+    <eLiterals name="marine" value="8"/>
+    <eLiterals name="foot" value="10"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.definitions/model/nodes.ecore b/org.eclipse.stem.definitions/model/nodes.ecore
new file mode 100644
index 0000000..f188e08
--- /dev/null
+++ b/org.eclipse.stem.definitions/model/nodes.ecore
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="nodes"

+    nsURI="http:///org/eclipse/stem/definitions/nodes.ecore" nsPrefix="org.eclipse.stem.definitions.nodes">

+  <eClassifiers xsi:type="ecore:EClass" name="GeographicFeature" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Node"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Region" eSuperTypes="#//GeographicFeature"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Node" instanceClassName="org.eclipse.stem.core.graph.Node"

+      abstract="true" interface="true"/>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.definitions/model/types.ecore b/org.eclipse.stem.definitions/model/types.ecore
new file mode 100644
index 0000000..c7d461c
--- /dev/null
+++ b/org.eclipse.stem.definitions/model/types.ecore
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="types"

+    nsURI="http:///org/eclipse/stem/definitions/types.ecore" nsPrefix="org.eclipse.stem.definitions.types">

+  <eClassifiers xsi:type="ecore:EClass" name="CategorizedType" abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Rate" abstract="true">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.definitions/notice.html b/org.eclipse.stem.definitions/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.definitions/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.definitions/plugin.properties b/org.eclipse.stem.definitions/plugin.properties
new file mode 100644
index 0000000..b505f48
--- /dev/null
+++ b/org.eclipse.stem.definitions/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.definitions/plugin.xml b/org.eclipse.stem.definitions/plugin.xml
new file mode 100644
index 0000000..4a2cbae
--- /dev/null
+++ b/org.eclipse.stem.definitions/plugin.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/definitions/edges.ecore"
+            class="org.eclipse.stem.definitions.edges.provider.EdgesItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/definitions/labels.ecore"
+            class="org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+      <factory
+            uri="http:///org/eclipse/stem/definitions/nodes.ecore"
+            class="org.eclipse.stem.definitions.nodes.provider.NodesItemProviderAdapterFactory"
+            supportedTypes=
+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+               org.eclipse.emf.edit.provider.ITreeItemContentProvider
+               org.eclipse.emf.edit.provider.IItemLabelProvider
+               org.eclipse.emf.edit.provider.IItemPropertySource"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/definitions/edges.ecore"
+            class="org.eclipse.stem.definitions.edges.EdgesPackage"
+            genModel="model/definitions.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/definitions/labels.ecore"
+            class="org.eclipse.stem.definitions.labels.LabelsPackage"
+            genModel="model/definitions.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <package
+            uri="http:///org/eclipse/stem/definitions/nodes.ecore"
+            class="org.eclipse.stem.definitions.nodes.NodesPackage"
+            genModel="model/definitions.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <editor
+            id="org.eclipse.stem.definitions.edges.presentation.EdgesEditorID"
+            name="%_UI_EdgesEditor_label"
+            icon="icons/full/obj16/EdgesModelFile.gif"
+            extensions="edges"
+            class="org.eclipse.stem.definitions.edges.presentation.EdgesEditor"
+            contributorClass="org.eclipse.stem.definitions.edges.presentation.EdgesActionBarContributor">
+      </editor>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <editor
+            id="org.eclipse.stem.definitions.labels.presentation.LabelsEditorID"
+            name="%_UI_LabelsEditor_label"
+            icon="icons/full/obj16/LabelsModelFile.gif"
+            extensions="labels"
+            class="org.eclipse.stem.definitions.labels.presentation.LabelsEditor"
+            contributorClass="org.eclipse.stem.definitions.labels.presentation.LabelsActionBarContributor">
+      </editor>
+   </extension>
+
+   <extension point="org.eclipse.ui.editors">
+      <editor
+            id="org.eclipse.stem.definitions.nodes.presentation.NodesEditorID"
+            name="%_UI_NodesEditor_label"
+            icon="icons/full/obj16/NodesModelFile.gif"
+            extensions="nodes"
+            class="org.eclipse.stem.definitions.nodes.presentation.NodesEditor"
+            contributorClass="org.eclipse.stem.definitions.nodes.presentation.NodesActionBarContributor">
+      </editor>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/Activator.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/Activator.java
new file mode 100644
index 0000000..f9090f1
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/Activator.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.definitions;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+//import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = Constants.ID_ROOT + ".definitions";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProvider.java
new file mode 100644
index 0000000..03e8607
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProvider.java
@@ -0,0 +1,64 @@
+// RelativeValueProvider.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+
+/**
+ * This interface is implemented by classes that have properties and can map the
+ * value of the property to a value between 0.0 (zero) and 1.0 (one), inclusive.
+ */
+public interface RelativeValueProvider {
+
+	/**
+	 * @return the properties of the provider
+	 */
+	List<IItemPropertyDescriptor> getProperties();
+
+	/**
+	 * Determine the relative (0.0 to 1.0) value of the property as compared to
+	 * the other properties.
+	 * 
+	 * @param property
+	 *            the property whose relative value is to be determined
+	 * @return relative (0.0-1.0) value of the property as compared to the other
+	 *         properties.
+	 */
+	double getRelativeValue(final ItemPropertyDescriptor property);
+
+	/**
+	 * Determine the relative (0.0 to 1.0) value of the property as compared to
+	 * the other properties.
+	 * 
+	 * @param feature
+	 *            feature of the property whose relative value is to be
+	 *            determined
+	 * @return relative (0.0-1.0) value of the property as compared to the other
+	 *         properties.
+	 */
+	double getRelativeValue(final EStructuralFeature feature);
+	
+	/**
+	 * This method returns the denominator or scale used to convert to relative
+	 * values in the range 0-1. For example, in an Epidemic Compartment model
+	 * the state values are normalized by population.
+	 * It is required whenever we need to switch between relative and absolute values
+	 * or can be used to create a label showing the maximum scale for any relative value.
+	 * @return the denominator or scale used to normalize the relative value
+	 */
+	double getDenominator(final EStructuralFeature feature) ;
+}// RelativeValueProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapter.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapter.java
new file mode 100644
index 0000000..8026b93
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapter.java
@@ -0,0 +1,65 @@
+// RelativeValueProviderAdapter.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+//import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+
+/**
+ * This class adapts <code>EObjects</code>'s to
+ * <code>RelativeValueProvider</code>'s.
+ */
+abstract public class RelativeValueProviderAdapter extends AdapterImpl
+		implements RelativeValueProvider {
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider#getProperties()
+	 */
+	public abstract List<IItemPropertyDescriptor> getProperties();
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider#getRelativeValue(org.eclipse.emf.edit.provider.ItemPropertyDescriptor)
+	 */
+	public double getRelativeValue(ItemPropertyDescriptor property) {
+		return getRelativeValue((EStructuralFeature) property.getFeature(null));
+	} // getRelativeValue
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature)
+	 */
+	public abstract double getRelativeValue(final EStructuralFeature feature);
+	
+	/**
+	 * This method returns the denominator or scale used to convert to relative
+	 * values in the range 0-1. For example, in an Epidemic Compartment model
+	 * the state values are normalized by population.
+	 * It is required whenever we need to switch between relative and absolute values
+	 * or can be used to create a label showing the maximum scale for any relative value.
+	 * @return the denominator or scale used to normalize the relative value
+	 */
+	public abstract double getDenominator(final EStructuralFeature feature) ;
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == RelativeValueProvider.class;
+	}
+	
+} // RelativeValueProviderAdapter
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactory.java
new file mode 100644
index 0000000..209c684
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactory.java
@@ -0,0 +1,73 @@
+// RelativeValueProviderAdapterFactory.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link  EObject}s to {@link RelativeValueProvider}s.
+ */
+public interface RelativeValueProviderAdapterFactory extends
+		ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link RelativeValueProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements
+	 * {@link RelativeValueProviderAdapterFactory} needs to add itself to this
+	 * instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a
+	 * {@link RelativeValueProviderAdapterFactory} for it so that the classes in
+	 * that model can be adapted, you need to hook that factory into this one so
+	 * that later when an attempt is made to adapt a class from that model is
+	 * made the associated factory will be found. You can do that by adding the
+	 * line: <code>
+	 * RelativeValueProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the <code>start</code> method of
+	 * the <code>Activator</code> of the plug-in that defines the factory.
+	 */
+	RelativeValueProviderAdapterFactoryImpl INSTANCE = new RelativeValueProviderAdapterFactoryImpl();
+
+	/**
+	 * This class is the implementation of the factory that creates
+	 * {@link RelativeValueProvider}'s
+	 */
+	public static class RelativeValueProviderAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			RelativeValueProviderAdapterFactory {
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == RelativeValueProvider.class;
+		} // isFactoryForType
+	} // RelativeValueProviderAdapterFactoryImpl
+
+} // RelativeValueProviderAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryExtendedListener.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryExtendedListener.java
new file mode 100644
index 0000000..de2b56c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryExtendedListener.java
@@ -0,0 +1,22 @@
+// RelativeValueHistoryExtendedListener.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that want to be notified when a
+ * {@link RelativeValueHistoryProvider} can provide additional history values.
+ */
+public interface RelativeValueHistoryExtendedListener {
+	void relativeValueHistoryExtended(
+			final RelativeValueHistoryProviderAdapter relativeValueHistoryProviderAdapter);
+} // RelativeValueHistoryExtendedListener
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProvider.java
new file mode 100644
index 0000000..415dfbe
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProvider.java
@@ -0,0 +1,113 @@
+// RelativeValueHistoryProvider.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+
+/**
+ * This interface is implemented by classes that have properties and can map the
+ * value of the property to a value between 0.0 (zero) and 1.0 (one), inclusive,
+ * and which can provide historic values for those properties as a function of
+ * time.
+ */
+public interface RelativeValueHistoryProvider extends RelativeValueProvider {
+	/**
+	 * Determine the relative (0.0 to 1.0) value of the property as compared to
+	 * the other properties as a function of Time.
+	 * 
+	 * @param property
+	 *            the property whose relative value is to be determined
+	 * @param time
+	 *            the time to use when determining which value to return.
+	 * @return relative (0.0-1.0) value of the property as compared to the other
+	 *         properties and whose associated time value is either equal to or
+	 *         after/later than the parameter time.
+	 */
+	double getRelativeValue(final ItemPropertyDescriptor property,
+			final STEMTime time);
+
+	/**
+	 * Determine the relative (0.0 to 1.0) value of the property as compared to
+	 * the other properties.
+	 * 
+	 * @param feature
+	 *            feature of the property whose relative value is to be
+	 *            determined
+	 * @param time
+	 *            the time to use when determining which value to return.
+	 * @return relative (0.0-1.0) value of the property as compared to the other
+	 *         properties and whose associated time value is either equal to or
+	 *         after/later than the parameter time.
+	 */
+	double getRelativeValue(final EStructuralFeature feature,
+			final STEMTime time);
+
+	/**
+	 * Produce all relative values for a given property.
+	 * 
+	 * @param property
+	 *            the property whose relative value is to be determined
+	 * 
+	 * @return all relative (0.0-1.0) values of the property as compared to the
+	 *         other properties. The first value of the array (index 0) is the
+	 *         oldest value.
+	 */
+	double[] getAllHistoricRelativeValues(final ItemPropertyDescriptor property);
+
+	/**
+	 * Produce all relative values for a given feature.
+	 * 
+	 * @param feature
+	 *            feature of the property whose relative value is to be
+	 *            determined
+	 * @return all relative (0.0-1.0) values of the feature as compared to the
+	 *         other properties. The first value of the array (index 0) is the
+	 *         oldest value.
+	 */
+	double[] getAllHistoricRelativeValues(final EStructuralFeature feature);
+	
+	
+	/**
+	 * Produce all relative values in a time range
+	 * @param timeRange
+	 * @return all relative (0.0-1.0) values of the feature as compared to the
+	 *         other properties. The first value of the array (index 0) is the
+	 *         oldest value.
+	 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getHistoricInstances()
+	 */
+	public double[] getHistoricInstances(final ItemPropertyDescriptor property, STEMTime[] timeRange);
+
+	/**
+	 * @return all of the time values that correspond to the historic relative
+	 *         time values. The first value of the collection is the time value
+	 *         for the first value of the collection returned by
+	 *         {@link #getAllHistoricRelativeValues(ItemPropertyDescriptor)} and
+	 *         by {@link #getAllHistoricRelativeValues(EStructuralFeature)}.
+	 */
+	STEMTime[] getAllHistoricTimeValues();
+
+	/**
+	 * @return the earliest time value associated with a relative value.
+	 */
+	STEMTime getEarliestTimeValue();
+
+	/**
+	 * @return the earliest (lowest) cycle number
+	 */
+	int getEarliestCycleNumber();
+
+} // RelativeValueHistoryProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapter.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapter.java
new file mode 100644
index 0000000..181e3c8
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapter.java
@@ -0,0 +1,122 @@
+// RelatieValueHistoryProviderAdapter.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.adapters.history.HistoryExtendedListener;
+import org.eclipse.stem.adapters.history.HistoryProviderAdapter;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+
+/**
+ * This class adapts <code>EObjects</code>'s to
+ * <code>RelativeValueProvider</code>'s.
+ */
+public abstract class RelativeValueHistoryProviderAdapter extends
+		RelativeValueProviderAdapter implements RelativeValueHistoryProvider,
+		HistoryExtendedListener {
+
+	private List<RelativeValueHistoryExtendedListener> extensionListeners = new CopyOnWriteArrayList<RelativeValueHistoryExtendedListener>();
+
+	// This should be removed DAF
+	private final int earliestCycleNumber = 0;
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getRelativeValue(org.eclipse.emf.edit.provider.ItemPropertyDescriptor,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	public double getRelativeValue(final ItemPropertyDescriptor property,
+			final STEMTime time) {
+		return getRelativeValue((EStructuralFeature) property.getFeature(null),
+				time);
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	abstract public double getRelativeValue(EStructuralFeature feature,
+			STEMTime time);
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getAllHistoricRelativeValues(org.eclipse.emf.ecore.EStructuralFeature)
+	 */
+	abstract public double[] getAllHistoricRelativeValues(
+			EStructuralFeature feature);
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getAllHistoricRelativeValues(org.eclipse.emf.edit.provider.ItemPropertyDescriptor)
+	 */
+	public double[] getAllHistoricRelativeValues(
+			final ItemPropertyDescriptor property) {
+		return getAllHistoricRelativeValues((EStructuralFeature) property
+				.getFeature(null));
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getAllHistoricTimeValues()
+	 */
+	abstract public STEMTime[] getAllHistoricTimeValues();
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getEarliestTimeValue()
+	 */
+	abstract public STEMTime getEarliestTimeValue();
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getEarliestCycleNumber()
+	 */
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getEarliestCycleNumber()
+	 */
+	public int getEarliestCycleNumber() {
+		return earliestCycleNumber;
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(final Object type) {
+		return type == RelativeValueHistoryProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.adapters.history.HistoryExtendedListener#historyExtended(org.eclipse.stem.adapters.history.HistoryProviderAdapter)
+	 */
+	public void historyExtended(HistoryProviderAdapter historyProviderAdapter) {
+		fireHistoryExtended();
+	}
+
+	public void addExtensionListener(
+			RelativeValueHistoryExtendedListener listener) {
+		extensionListeners.add(listener);
+	}
+
+	public void removeExtensionListener(
+			RelativeValueHistoryExtendedListener listener) {
+		extensionListeners.remove(listener);
+	}
+
+	protected void fireHistoryExtended() {
+		for (RelativeValueHistoryExtendedListener listener : extensionListeners) {
+			listener.relativeValueHistoryExtended(this);
+		} // for each HistoryExtendedListener
+	}
+
+} // RelatieValueHistoryProviderAdapter
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactory.java
new file mode 100644
index 0000000..216a128
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactory.java
@@ -0,0 +1,71 @@
+// RelativeValueHistoryProviderAdapterFactory.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link  EObject}s to {@link RelativeValueHistoryProvider}s.
+ */
+public interface RelativeValueHistoryProviderAdapterFactory extends
+		ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link RelativeValueHistoryProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements
+	 * {@link RelativeValueProviderAdapterFactory} needs to add itself to this
+	 * instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a
+	 * {@link RelativeValueHistoryProviderAdapterFactory} for it so that the
+	 * classes in that model can be adapted, you need to hook that factory into
+	 * this one so that later when an attempt is made to adapt a class from that
+	 * model is made the associated factory will be found. You can do that by
+	 * adding the line: <code>
+	 * RelativeValueHistoryProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the <code>start</code> method of
+	 * the <code>Activator</code> of the plug-in that defines the factory.  
+	 */
+	RelativeValueHistoryProviderAdapterFactoryImpl INSTANCE = new RelativeValueHistoryProviderAdapterFactoryImpl();
+
+	/**
+	 * This class represents
+	 */
+	public class RelativeValueHistoryProviderAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			RelativeValueHistoryProviderAdapterFactory {
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == RelativeValueHistoryProvider.class;
+		} // isFactoryForType
+	} // RelativeValueHistoryProviderAdapterFactoryImpl
+
+} // RelativeValueHistoryProviderAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProvider.java
new file mode 100644
index 0000000..8c2a2ce
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProvider.java
@@ -0,0 +1,20 @@
+// SpatialProvider.java
+package org.eclipse.stem.definitions.adapters.spatial;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that provide spatial descriptions.
+ */
+public interface SpatialProvider {
+	// Marker interface
+} // SpatialProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapter.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapter.java
new file mode 100644
index 0000000..77f2ece
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapter.java
@@ -0,0 +1,53 @@
+// SpatialProviderAdapter.java
+package org.eclipse.stem.definitions.adapters.spatial;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+
+/**
+ * This class is extended by classes that adapt Identifiables to
+ * SpatialProviders.
+ * 
+ * @see org.eclipse.stem.core.common.Identifiable
+ */
+abstract public class SpatialProviderAdapter extends AdapterImpl implements
+		SpatialProvider {
+
+	/**
+	 * This is the scheme used for specifying URI's that are values for the
+	 * <em>spatial</em> attribute of an <code>Identifiable</code>'s dublin
+	 * core instance. If the value is a valid URI that conforms to this scheme,
+	 * it will be interpreted by the adapter.
+	 * 
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @see org.eclipse.stem.core.common.DublinCore#getSpatial()
+	 * @see org.eclipse.stem.core.common.DublinCore#setSpatial(String)
+	 */
+	public static final String STEM_SPATIAL_SCHEME = "stemspatial";
+
+	/**
+	 * the scheme with a colon
+	 */
+	public static final String STEM_SPATIAL_SCHEME_PREFIX = STEM_SPATIAL_SCHEME
+			+ ":";
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == SpatialProvider.class;
+	} // isAdapterForType
+	
+	
+} // SpatialProviderAdapter
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactory.java
new file mode 100644
index 0000000..3e35341
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactory.java
@@ -0,0 +1,33 @@
+// SpatialProviderAdapterFactory.java
+package org.eclipse.stem.definitions.adapters.spatial;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+/**
+ * This class is extended by classes that create adapters that adapt
+ * Identifiables to SpatialProviders.
+ * 
+ * @see org.eclipse.stem.core.common.Identifiable
+ */
+public abstract class SpatialProviderAdapterFactory extends AdapterFactoryImpl {
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == SpatialProvider.class;
+	} // isFactoryForType
+
+} // SpatialProviderAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProvider.java
new file mode 100644
index 0000000..7fe8871
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProvider.java
@@ -0,0 +1,166 @@
+// InlineLatLongDataProvider.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.NumberFormat;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.definitions.Activator;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ * This class interprets a URI that contains embedded (i.e., "inline") lat/long
+ * data.
+ * <p>
+ * The format of the URI is a comma separated list of lat/long pairs as double
+ * values. These can be separated into "segments" by slashes ("/") which will
+ * create separate lat/long sequences (arrays) in the return value.
+ * 
+ * <pre>
+ *   e.g., &quot;inline:Lat1,Long1,Lat2,Long2/Lat3,Long3,Lat4,Long4&quot;
+ * </pre>
+ * 
+ * </p>
+ * 
+ * @see PlatformLatLongDataProvider
+ * @see LatLongProviderAdapter
+ */
+public class InlineLatLongDataProvider implements LatLongDataProvider {
+
+	/**
+	 * This is the scheme for an "inline" data URI that specifies lat/long data
+	 * in the URI
+	 */
+	public static final String INLINE_SCHEME = "inline";
+
+	private static final int NUMBER_OF_FACTIONAL_DIGITS = 2;
+
+	private static NumberFormat formatter = null;
+
+	static {
+		// The static initializer isn't being called in eclipse
+		// Register this data provider with the adapter so it can find us when
+		// it comes across an "inline" URI.
+		// LatLongProviderAdapter.registerLatLongDataProvider(INLINE_SCHEME,
+		// new InlineLatLongDataProvider());
+	} // static
+
+	/**
+	 * @param dataURI
+	 * @return a latitude/longitude value
+	 */
+	public LatLong getLatLong(final URI dataURI) {
+		final LatLong retValue = new LatLong();
+
+		final String[] segments = dataURI.segments();
+		try {
+			for (final String segmentString : segments) {
+				final LatLong.SegmentBuilder sb = new LatLong.SegmentBuilder();
+
+				final StringTokenizer st = new StringTokenizer(segmentString,
+						",");
+				while (st.hasMoreTokens()) {
+					final String latitudeString = st.nextToken();
+					// Is there a matching Longitude?
+					if (st.hasMoreTokens()) {
+						// Yes
+						sb.add(latitudeString, st.nextToken());
+					} else {
+						// No
+						// lat/long mismatch
+						Activator
+								.logError(
+										"Inline lat/long data \""
+												+ segmentString
+												+ "\" is missing a longitude match for the latitude \""
+												+ latitudeString + "\"", null);
+						sb.clear();
+						break;
+					} // else
+				} // while more tokens
+
+				// Anything in the segment builder?
+				if (sb.size() > 0) {
+					// Yes
+					retValue.add(sb.toSegment());
+				}
+			} // for each segment
+		} // try
+		catch (final NumberFormatException nfe) {
+			Activator.logError(
+					"Inline lat/long data is not properly formatted", nfe);
+		} // catch
+		return retValue;
+	} // getLatLong
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.spatial.geo.LatLongDataProvider#getLatLongNoWait(org.eclipse.emf.common.util.URI)
+	 */
+	public LatLong getLatLongNoWait(final URI dataURI) {
+		return getLatLong(dataURI);
+	} // getLatLongNoWait
+
+	/**
+	 * Encode a list of arrays of double values representing polygons/lines into
+	 * an spatial inline URI string.
+	 * 
+	 * @param segmentArrays
+	 *            a list of arrays each of which represents a polygon/line
+	 * @return the list of values in the arrays encoded in a spatial inline URI
+	 *         string
+	 */
+	public static String createSpatialInlineURIString(
+			final LatLong segmentArrays) {
+		final StringBuilder sb = new StringBuilder(
+				SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX);
+		sb.append(createInlineURIString(segmentArrays));
+		return sb.toString();
+	} // createSpatialInlineURIString
+
+	/**
+	 * Encode a list of arrays of double values representing polygons/lines into
+	 * an inline URI string. This is the inverse operation of
+	 * {@link #getLatLong(URI)}.
+	 * 
+	 * @param latLong
+	 * 
+	 * @return the list of values in the arrays encoded in an inline URI string
+	 */
+	public static String createInlineURIString(final LatLong latLong) {
+		final StringBuilder sb = new StringBuilder(INLINE_SCHEME);
+		sb.append("://");
+		for (final Segment segment : latLong.getSegments()) {
+			sb.append("/");
+			sb.append(segment.toInlineURIString());
+		} // for each segment
+
+		return sb.toString();
+	} // createInlineURIString
+
+	/**
+	 * @return a formatter
+	 */
+	private static NumberFormat getFormatter() {
+		// Is there already a formatter?
+		if (formatter == null) {
+			// No
+			formatter = NumberFormat.getNumberInstance();
+			formatter.setMaximumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+			formatter.setMinimumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+		}
+		return formatter;
+	} // getFormatter
+
+} // InlineLatLongDataProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLong.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLong.java
new file mode 100644
index 0000000..d88f747
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLong.java
@@ -0,0 +1,462 @@
+// LatLong.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class is a collection of latitude/longitude data pairs partitioned into
+ * one or more "segments". Each segment is a sequence of latitude/longitude data
+ * pairs. A segment could form a closed polygon or it could be a path. A
+ * {@link SegmentBuilder} can be used to construct a {@link Segment}.
+ */
+public class LatLong {
+
+	private static final int NUMBER_OF_FACTIONAL_DIGITS = 2;
+
+	static NumberFormat formatter = null;
+
+	private final List<Segment> segments = new ArrayList<Segment>();
+
+	/**
+	 * Add a segment to a collection
+	 * 
+	 * @param segment
+	 *            the segment to add to the collection
+	 */
+	public void add(final Segment segment) {
+		segments.add(segment);
+	}
+
+	/**
+	 * @param segments
+	 *            add the list of segments to the collection maintained by
+	 *            LatLong
+	 */
+	public void add(final List<Segment> segments) {
+		this.segments.addAll(segments);
+	} // add
+
+	/**
+	 * Add the segments from one <code>LatLong</code> to this one.
+	 * 
+	 * @param latLong
+	 *            the <code>LatLong</code> instance that contains the segments
+	 *            to add.
+	 */
+	public void add(final LatLong latLong) {
+		segments.addAll(latLong.getSegments());
+	} // add
+
+	/**
+	 * @return the list of segments
+	 */
+	public final List<Segment> getSegments() {
+		return segments;
+	} // getSegments
+
+	/**
+	 * @return the number of segments
+	 */
+	public final int size() {
+		return segments.size();
+	} // size
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return Integer.toString(size());
+	} // toString
+
+	/**
+	 * @return a number formatter
+	 */
+	static NumberFormat getFormatter() {
+		// Is there already a formatter?
+		if (formatter == null) {
+			// No
+			formatter = NumberFormat.getNumberInstance();
+			formatter.setMaximumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+			formatter.setMinimumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+		}
+		return formatter;
+	} // getFormatter
+
+	/**
+	 * This class creates {@link Segment}'s
+	 */
+	public static class SegmentBuilder {
+
+		private final List<LatLongPair> collectedPairs = new ArrayList<LatLongPair>();
+
+		/**
+		 * @param latitudeString
+		 *            a double latitude value represented as a
+		 *            <code>String</code>
+		 * @param longitudeString
+		 *            a double longitude value represented as a
+		 *            <code>String</code>
+		 */
+		public void add(final String latitudeString,
+				final String longitudeString) {
+			add(Double.parseDouble(latitudeString), Double
+					.parseDouble(longitudeString));
+		} // add
+
+		/**
+		 * @param latitude
+		 * @param longitude
+		 */
+		public void add(final double latitude, final double longitude) {
+			collectedPairs.add(new LatLongPair(latitude, longitude));
+		} // add
+
+		/**
+		 * @return the number of latitude/longitude data pairs in the segment
+		 *         being built.
+		 */
+		public int size() {
+			return collectedPairs.size();
+		} // size
+
+		/**
+		 * Remove all of the collected latitude/longitude pairs collected so far
+		 */
+		public void clear() {
+			collectedPairs.clear();
+		} // clear
+
+		/**
+		 * @return the collected latitude/longitude data pairs as a segment.
+		 */
+		public Segment toSegment() {
+			return toSegment(collectedPairs);
+		} // toSegment
+
+		/**
+		 * Create a {@link Segment}, but reduce the number of data points it
+		 * contains by the sample frequency. A value of "1" means all points are
+		 * included, a value of "2" means that every 2nd point is included. The
+		 * first and last points are always included.
+		 * 
+		 * @param sampleFrequency
+		 *            the frequency in data points at which the pairs are
+		 *            sampled.
+		 * @return a subset of the collected latitude/longitude data pairs as a
+		 *         segment.
+		 * @throws IllegalArgumentException if sampleFrequency is < 1
+		 */
+		public Segment toSegment(final int sampleFrequency) {
+			return toSegment(createDownSampledPairs(sampleFrequency,
+					collectedPairs));
+		} // toSegment
+
+		/**
+		 * @param sampleFrequency  the frequency in data points at which the pairs are
+		 *            sampled.
+		 * @param pairs
+		 * @throws IllegalArgumentException if sampleFrequency is < 1
+		 */
+		private final List<LatLongPair> createDownSampledPairs(
+				final int sampleFrequency, final List<LatLongPair> pairs) {
+			final List<LatLongPair> downSampledPairs = new ArrayList<LatLongPair>();
+
+			// Is the sample frequency too small?
+			if (sampleFrequency >= 1) {
+				// No
+				final int lastPoint = collectedPairs.size() - 1;
+
+				// Is it greater than or equal to the number of pairs?
+				if (sampleFrequency < lastPoint) {
+					// No
+					int dataPointCounter = 0;
+					for (final LatLongPair pair : pairs) {
+						// Include this point?
+						if (dataPointCounter % sampleFrequency == 0
+								|| dataPointCounter == lastPoint) {
+							// Yes
+							downSampledPairs.add(pair);
+						} // if include this point
+						dataPointCounter++;
+					} // for each lat/long point
+				} // if sample frequency not greater than number of pairs
+				else {
+					// Yes
+					// Pick the first point, the middle point and the last point
+					downSampledPairs.add(pairs.get(0));
+					downSampledPairs.add(pairs.get(pairs.size() / 2));
+					downSampledPairs.add(pairs.get(lastPoint));
+				} // else
+
+			} // if sample frequency not too small
+			else {
+				// Yes
+				// Bad sample frequency
+				throw new IllegalArgumentException("Sample frequency \""
+						+ sampleFrequency + "\" must be 1 or greater");
+			}
+
+			return downSampledPairs;
+		} // createDownSampledPairs
+
+		/**
+		 * @param pairs
+		 *            a list of lat/long data pairs
+		 * @return the latitude/longitude data pairs as a segment.
+		 */
+		private Segment toSegment(final List<LatLongPair> pairs) {
+			final double[][] data = new double[pairs.size()][2];
+
+			int i = 0;
+			for (final LatLongPair latLongPair : pairs) {
+				data[i][Segment.LATITUDE_INDEX] = latLongPair.latitude;
+				data[i][Segment.LONGITUDE_INDEX] = latLongPair.longitude;
+				i++;
+			}
+			return new Segment(data);
+		} // toSegment
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder();
+			// Any latitude/longitude pairs?
+			if (size() > 0) {
+				sb.append(collectedPairs.get(0).toString());
+				// More than 2?
+				if (size() > 2) {
+					// Yes
+					sb.append("...<" + (size() - 2) + ">...");
+				}
+				// Were there at least two?
+				if (size() > 1) {
+					// Yes
+					sb.append(collectedPairs.get(size() - 1).toString());
+				}
+			} // if any pairs
+
+			return sb.toString();
+		} // toString
+
+		/**
+		 * This class represents a latitude/longitude data pair.
+		 */
+		private static class LatLongPair {
+			double latitude = 0.0;
+
+			double longitude = 0.0;
+
+			/**
+			 * @param lat
+			 * @param lng
+			 */
+			protected LatLongPair(final double latitude, final double longitude) {
+				super();
+				assert longitude >= -180.0 && longitude <= 180.0;
+				assert latitude >= -90.0 && latitude <= 90.0;
+				this.latitude = latitude;
+				this.longitude = longitude;
+			} // LatLongPair
+
+			/**
+			 * @see java.lang.Object#toString()
+			 */
+			@Override
+			public String toString() {
+				final StringBuffer sb = new StringBuffer();
+				sb.append(getFormatter().format(latitude));
+				sb.append(", ");
+				sb.append(getFormatter().format(longitude));
+				return sb.toString();
+			}
+
+		} // LatLongPair
+	} // SegmentBuilder
+
+	/**
+	 * This class represents a sequence of latitude/longitude data pairs. A
+	 * segment could form a closed polygon or it could be a path.
+	 */
+	public static class Segment {
+
+		// In a two element array this is the index of the latitude value
+		static final int LATITUDE_INDEX = 0;
+
+		// In a two element array this is the index of the longitude value
+		static final int LONGITUDE_INDEX = 1;
+
+		/**
+		 * The latitude/longitude data pairs.
+		 */
+		private double[][] data = null;
+
+		/**
+		 * @param data
+		 *            an array of latitude/longitude pairs
+		 */
+		public Segment(final double[][] data) {
+			this.data = data;
+		} // Segment
+
+		/**
+		 * @param i
+		 *            the index of the data pair
+		 * @return the latitude value of the i'th latitude/longitude data pair
+		 */
+		public double latitude(final int i) {
+			return data[i][LATITUDE_INDEX];
+		} // latitude
+
+		/**
+		 * @param i
+		 *            the index of the latitude/longitude data pair
+		 * @return the longitude value of the i'th latitude/longitude data pair
+		 */
+		public double longitude(final int i) {
+			return data[i][LONGITUDE_INDEX];
+		} // longitude
+
+		/**
+		 * @return the number of latitude/longitude data pairs
+		 */
+		public int size() {
+			return data.length;
+		} // size
+
+		/**
+		 * @return <code>true</code> if the sequence of lat/long pairs form a
+		 *         closed polygon, <code>false</code>, otherwise.
+		 */
+		public boolean isPolygon() {
+			final int size = data.length;
+			return size > 2 && data[0][0] == data[size - 1][0]
+					&& data[0][1] == data[size - 1][1];
+		} // isPolygon
+
+		/**
+		 * @return create a URI string the encodes the latitude/longitude values
+		 */
+		public String toInlineURIString() {
+			final StringBuilder sb = new StringBuilder();
+
+			for (int i = 0; i < data.length; i++) {
+				sb.append(getFormatter().format(data[i][LATITUDE_INDEX]));
+				sb.append(",");
+				sb.append(getFormatter().format(data[i][LONGITUDE_INDEX]));
+				// Any more values?
+				if (i < data.length - 1) {
+					// Yes
+					sb.append(",");
+				}
+			}
+			return sb.toString();
+		} // toInlineURIString
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+
+			final StringBuilder sb = new StringBuilder();
+			// Any latitude/longitude pairs?
+			if (data.length > 0) {
+				// Yes
+				sb.append(getFormatter().format(data[0][LATITUDE_INDEX]));
+				sb.append(",");
+				sb.append(getFormatter().format(data[0][LONGITUDE_INDEX]));
+
+				// More than 2?
+				if (data.length > 2) {
+					// Yes
+					sb.append("...<" + (data.length - 2) + ">...");
+				}
+				// Were there at least two?
+				if (data.length > 1) {
+					// Yes
+					sb.append(getFormatter().format(
+							data[data.length - 1][LATITUDE_INDEX]));
+					sb.append(",");
+					sb.append(getFormatter().format(
+							data[data.length - 1][LONGITUDE_INDEX]));
+				}
+
+			} // if any pairs
+
+			return sb.toString();
+		} // toString
+
+		/**
+		 * @see java.lang.Object#hashCode()
+		 */
+		@Override
+		public int hashCode() {
+
+			double sum = 1.0;
+			for (final double[] element : data) {
+				sum += Math.abs(element[0] + element[1]);
+			}
+
+			//$ANALYSIS-IGNORE
+			final int temp = ((int) sum) * 31;
+
+			return temp + data.length;
+			// final int PRIME = 31;
+			// int result = 1;
+			// result = PRIME * result + Arrays.hashCode(data);
+			// return result;
+		}
+
+		/**
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		@Override
+		public boolean equals(final Object obj) {
+			if (this == obj) {
+				return true;
+			}
+			if (obj == null) {
+				return false;
+			}
+			if (getClass() != obj.getClass()) {
+				return false;
+			}
+			final Segment other = (Segment) obj;
+
+			if (data.length != other.data.length) {
+				return false;
+			}
+
+			for (final double[] element : data) {
+				if (element[LATITUDE_INDEX] != element[LATITUDE_INDEX]) {
+					return false;
+				}
+				if (element[LONGITUDE_INDEX] != element[LONGITUDE_INDEX]) {
+					return false;
+				}
+			}
+
+			// if (!Arrays.equals(data, other.data))
+			// return false;
+			return true;
+		}
+
+	} // Segment
+
+} // LatLong
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProvider.java
new file mode 100644
index 0000000..c946ede
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProvider.java
@@ -0,0 +1,57 @@
+// LatLongDataProvider.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * This interface is extended by classes that can interpret a "data uri" as
+ * contained in a "stemspatial" URI and return latitude and longitude data from
+ * the source specified by the URI. The {@link LatLongProviderAdapter} maintains
+ * a static singleton collection of classes that implement this interface. The
+ * collection is indexed by the scheme of the URI they handle. It uses this
+ * collection to find the appropriate instance for the URI's it encounters that
+ * need to be processed. That processing is delegated to classes that extend
+ * this interface.
+ * <p>
+ * Thus, if you extend this interface you should also register an instance of
+ * your class with the method
+ * {@link LatLongProviderAdapter#registerLatLongDataProvider(String, LatLongDataProvider)}.
+ * 
+ * @see LatLongProviderAdapter
+ */
+public interface LatLongDataProvider {
+
+	/**
+	 * @param dataURI
+	 *            the data URI to be processed by this provider
+	 * @return a list of arrays of latitude/longitude pairs.
+	 */
+	LatLong getLatLong(URI dataURI);
+
+	/**
+	 * This method is just like {@link #getLatLong(URI)} except that it will
+	 * immediately return with an empty {@link LatLong} instance if the data
+	 * identified by the URI has not been retrieved. As a side effect, it will
+	 * create a separate {@link org.eclipse.core.runtime.jobs.Job} (i.e.,
+	 * <code>Thread</code>) to retrieve the data. If that
+	 * {@link org.eclipse.core.runtime.jobs.Job} completes successfully, a
+	 * future call will return the appropriate data.
+	 * 
+	 * @param dataURI
+	 *            the data URI to be processed by this provider
+	 * @return an instance of latitude/longitude data.
+	 */
+	LatLong getLatLongNoWait(URI dataURI);
+
+} // LatLongDataProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProvider.java
new file mode 100644
index 0000000..41b4dc2
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProvider.java
@@ -0,0 +1,46 @@
+// LatLongProvider.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProvider;
+
+/**
+ * This interface is implemented by classes that provide Latitude and Longitude
+ * data.
+ */
+public interface LatLongProvider extends SpatialProvider {
+
+	/**
+	 * @return latitude/longitude data.
+	 */
+	LatLong getLatLong();
+
+	/**
+	 * This is just like {@link #getLatLong()} except that it returns an empty
+	 * instance of {@link LatLong} if the data has not been retrieved yet. As a
+	 * side effect, it immediately schedules a
+	 * {@link org.eclipse.core.runtime.jobs.Job} to retrieve the data. As such,
+	 * a future call might produce a fully populated result.
+	 * 
+	 * @return latitude/longitude data.
+	 */
+	LatLong getLatLongNoWait();
+	
+	/**
+	 * This method will return the Latitude and Longitude values for the adapted
+	 * object, if such exists. 
+	 * @return Latitude and Longitude values for the adapted object
+	 */
+	double[] getCenter();
+
+} // LatLongProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapter.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapter.java
new file mode 100644
index 0000000..29f5d51
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapter.java
@@ -0,0 +1,361 @@
+// LatLongProviderAdapter.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.definitions.Activator;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ * This class adapts <code>Identifiable</code>'s to
+ * <code>LatLongProvider</code>'s. It extracts the lat/long data by examining
+ * the <em>spatial</em> attribute of an <code>Identifiable</code>'s dublin
+ * core instance. Typically, the value of the attribute will be recognized by
+ * the adapter and the values returned. If the attribute does not have a value
+ * or the format of the value is not recognized, then an empty list will be
+ * returned.
+ * <p>
+ * The format recognized by the adapter is a URI with the scheme defined by the
+ * constant {@link #STEM_SPATIAL_SCHEME STEM_SPATIAL_SCHEME}
+ * 
+ * @see org.eclipse.stem.core.common.Identifiable
+ */
+public class LatLongProviderAdapter extends SpatialProviderAdapter implements
+		LatLongProvider {
+
+	private static Map<Identifiable, LatLong> identifiableLatLongCache = new ConcurrentHashMap<Identifiable, LatLong>();
+	private static Map<Identifiable, double[]> identifiableCenterCache = new ConcurrentHashMap<Identifiable, double[]>();
+
+	private static Map<String, LatLongDataProvider> latLongDataProviders = null;
+
+	/**
+	 * Add the latLongDataProvider to the collection of available to this
+	 * adapter
+	 * 
+	 * @param scheme
+	 *            the key of the URI's that the data provider processes
+	 * @param latLongDataProvider
+	 *            the data provider
+	 */
+	public static void registerLatLongDataProvider(final String scheme,
+			final LatLongDataProvider latLongDataProvider) {
+		getLatLongDataProviders().put(scheme, latLongDataProvider);
+	} // registerLatLongDataProvider
+
+	/**
+	 * @return the map between scheme's and their lat/long data providers
+	 */
+	synchronized public static Map<String, LatLongDataProvider> getLatLongDataProviders() {
+		// Has the has Map been allocated yet?
+		if (latLongDataProviders == null) {
+			// No
+			latLongDataProviders = new HashMap<String, LatLongDataProvider>();
+
+			// We're doing this here because the static initializer in
+			// InlineLatLongDataProvider isn't being called.
+			latLongDataProviders.put(InlineLatLongDataProvider.INLINE_SCHEME,
+					new InlineLatLongDataProvider());
+			latLongDataProviders.put(
+					PlatformLatLongDataProvider.PLATFORM_SCHEME,
+					new PlatformLatLongDataProvider());
+		}
+		return latLongDataProviders;
+	} // getLatLongDataProviders
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(final Object type) {
+		boolean retValue = type == LatLongProvider.class;
+		// Try to the super class?
+		if (!retValue) {
+			// Yes
+			retValue = super.isAdapterForType(type);
+		} // if
+		return retValue;
+	} // isAdapterForType
+
+	/**
+	 * @return the lat/long value
+	 */
+	public LatLong getLatLong() {
+		final Identifiable identifiable = (Identifiable) getTarget();
+		LatLong retValue = identifiableLatLongCache.get(identifiable);
+
+		// Do we have a value in the cache?
+		if (retValue == null) {
+			// No
+			retValue = new LatLong();
+
+			// First let's get the value of the spatial attribute of the
+			// Identifiable, if there is one.
+			final String spatialValue = identifiable.getDublinCore()
+					.getSpatial();
+			// Is there a spatial value for this Identifiable and does it start
+			// with the correct prefix?
+			if (spatialValue != null
+					&& spatialValue
+							.startsWith(SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX)) {
+				// Yes
+				// Try to interpret it by parsing it as a URI
+				try {
+					// This is where it might be possible to get fancy with
+					// interpreting the URI. The format is
+					// "stemspatial:dataURI".
+					// Where "dataURI" is the real specification of the data.
+					// For example we might have
+					// "stempspatial:inline:///120.0,101.0,120.0,120.0" which
+					// would directly (i.e., "inline") define the data for a
+					// line between two points on the Earth's surface from
+					// "120.0W,
+					// 101.0N" to "120.0W, 120.0N". Or,
+					// "stemspatial:platform:///foo/data/bar.gml" which would
+					// specify a file containing the data.
+
+					final URI dataURI = extractDataURI(spatialValue);
+
+					// Were we successful in extracting a URI from the string?
+					if (dataURI != null) {
+						// Yes
+						// This call will attempt to find something that can
+						// understand the dataURI and come up with lat/long data
+						// if it can, otherwise if it can be interpreted, a
+						// message
+						// is dropped into the log and an empty list will be
+						// returned
+						retValue = getLatLong(dataURI);
+						if (retValue != null) {
+							identifiableLatLongCache
+									.put(identifiable, retValue);
+						}
+					}
+					// else the problem was logged so just ignore and return an
+					// empty list
+				} catch (final IllegalArgumentException e) {
+					// We get here when the value of the spatial attribute isn't
+					// something we understand so we're done, we'll just return
+					// an
+					// empty collection.
+				}
+
+			} // if spatial value
+		} // if value in cache
+
+		return retValue;
+	} // getLatLong
+
+	/**
+	 * @return the lat/long value
+	 */
+	public LatLong getLatLongNoWait() {
+
+		final Identifiable identifiable = (Identifiable) getTarget();
+		LatLong retValue = identifiableLatLongCache.get(identifiable);
+
+		// Do we have a value in the cache?
+		if (retValue == null) {
+			// No
+			retValue = new LatLong();
+
+			final String spatialValue = identifiable.getDublinCore()
+					.getSpatial();
+			// Is there a spatial value for this Identifiable and does it start
+			// with the correct prefix?
+			if (spatialValue != null
+					&& spatialValue
+							.startsWith(SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX)) {
+				// Yes
+				// Try to interpret it by parsing it as a URI
+				try {
+					// This is where it might be possible to get fancy with
+					// interpreting the URI. The format is
+					// "stemspatial:dataURI". Where "dataURI" is the real
+					// specification of the data. For example we might have
+					// "stempspatial:inline:///120.0,101.0,120.0,120.0" which
+					// would directly (i.e., "") define the data for a
+					// line between two points on the Earth's surface from
+					// "120.0W, 101.0N" to "120.0W, 120.0N". Or,
+					// "stemspatial:platform:///foo/data/bar.gml" which would
+					// specify a file containing the data.
+
+					final URI dataURI = extractDataURI(spatialValue);
+
+					// Were we successful in extracting a URI from the string?
+					if (dataURI != null) {
+						// Yes
+						// This call will attempt to find something that can
+						// understand the dataURI and come up with lat/long data
+						// if it can, otherwise if it can be interpreted, a
+						// message is dropped into the log and an empty list
+						// will be returned
+						retValue = getLatLongNoWait(dataURI);
+						if (retValue != null) {
+							// Is it empty?
+							if (retValue.size() > 0) {
+								// No
+								// We don't cache empty values because that is
+								// what is returned as a temporary value in
+								// "NoWait" calls. A separate Job might be
+								// reading in the values for the future so if we
+								// cache empty values we'd return them instead
+								// of getting the real value read in later.
+								identifiableLatLongCache.put(identifiable,
+										retValue);
+							}
+						}
+					}
+					// else the problem was logged so just ignore and return an
+					// empty value
+				} catch (final IllegalArgumentException e) {
+					// We get here when the value of the spatial attribute isn't
+					// something we understand so we're done, we'll just return
+					// an empty collection.
+				}
+
+			} // if spatial value
+		} // if value not in cache
+		return retValue;
+	} // getLatLongNoWait
+
+	/**
+	 * @param stemSpatialURI
+	 *            a URI with a "stemspatial" scheme. The format of the URI is
+	 *            "stempspatial:dataURI"
+	 * @see SpatialProviderAdapter#STEM_SPATIAL_SCHEME
+	 * @return the data URI extracted from the stemSpatialURI
+	 */
+	private URI extractDataURI(final String stemSpatialURIString) {
+		URI retValue = null;
+
+		try {
+			final String dataURIString = stemSpatialURIString
+					.substring(SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX
+							.length());
+
+			retValue = URI.createURI(dataURIString);
+		} catch (final Exception e) {
+			Activator.logError("Badly formated spatial URI \""
+					+ stemSpatialURIString + "\"", null);
+		}
+		return retValue;
+	} // extractDataURI
+
+	/**
+	 * @param dataURI
+	 *            the URI extracted from a dublin core <em>spatial</em>
+	 *            attribute that specifies the location of lat/long data
+	 * @return a list of arrays of latitude/longitude pairs.
+	 */
+	private LatLong getLatLong(final URI dataURI) {
+		LatLong retValue = new LatLong();
+
+		final LatLongDataProvider latLongDataProvider = getLatLongDataProvider(dataURI
+				.scheme());
+		// Did we find a data provider?
+		if (latLongDataProvider != null) {
+			// Yes
+			retValue = latLongDataProvider.getLatLong(dataURI);
+		} else {
+			Activator.logError(
+					"Unable to find a lat/long data provider for scheme \""
+							+ dataURI.scheme() + "\"", null);
+		}
+
+		return retValue;
+	} // getLatLong
+
+	/**
+	 * @param dataURI
+	 *            the URI extracted from a dublin core <em>spatial</em>
+	 *            attribute that specifies the location of lat/long data
+	 * @return a list of arrays of latitude/longitude pairs.
+	 */
+	private LatLong getLatLongNoWait(final URI dataURI) {
+		LatLong retValue = new LatLong();
+
+		final LatLongDataProvider latLongDataProvider = getLatLongDataProvider(dataURI
+				.scheme());
+		// Did we find a data provider?
+		if (latLongDataProvider != null) {
+			// Yes
+			retValue = latLongDataProvider.getLatLongNoWait(dataURI);
+		} else {
+			Activator.logError(
+					"Unable to find a lat/long data provider for scheme \""
+							+ dataURI.scheme() + "\"", null);
+		}
+
+		return retValue;
+	} // getLatLongNoWait
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider#getCenter()
+	 */
+	public double[] getCenter() {		
+		//First try to get the center of the identifiable from the cache
+		double[] centerLatLong = identifiableCenterCache.get(getTarget());
+		if (centerLatLong != null) {
+			//Yes, it was already calculated so just return the value
+			return centerLatLong;
+		}
+		
+		//Calculate the center and put it in the cache
+		centerLatLong = new double[2];
+		double maxLat = Double.MAX_VALUE, maxLong = Double.MAX_VALUE, minLat = Double.MIN_VALUE, minLong = Double.MIN_VALUE;
+		LatLong latLong = getLatLong();
+		if (latLong.getSegments().isEmpty()) {
+			return null;
+		}
+		Iterator<Segment> segmentsIter = latLong.getSegments().iterator();
+		while(segmentsIter.hasNext()) {
+			Segment segment = segmentsIter.next();
+			if (maxLat == Double.MAX_VALUE && minLat == Double.MIN_VALUE) { //Arbitrary initialize values from segment
+				maxLat = minLat = segment.latitude(0);
+				maxLong = minLong = segment.longitude(0);
+			}
+			final int size = segment.size();
+			for (int i=0; i<size; i++) {				
+				double lon = segment.longitude(i);
+				double lat = segment.latitude(i);
+				if (maxLong < lon) maxLong = lon;
+				if (maxLat < lat) maxLat = lat;
+				if (minLong > lon) minLong = lon;
+				if (minLat > lat) minLat = lat;
+			}
+		}
+		centerLatLong[0] = (maxLat + minLat) / 2.0;
+		centerLatLong[1] = (maxLong + minLong) / 2.0;
+		identifiableCenterCache.put((Identifiable)getTarget(), centerLatLong);
+		return centerLatLong;
+	} // getCenter
+
+	/**
+	 * @param scheme
+	 *            the scheme of the data URI that we're looking for a lat/long
+	 *            data provider for
+	 * @return a LatLongDataProvider that can interpret the URI and extract
+	 *         lat/long data, or null
+	 */
+	protected LatLongDataProvider getLatLongDataProvider(final String scheme) {
+		return getLatLongDataProviders().get(scheme);
+	} // getLatLongDataProvider
+
+} // LatLongProviderAdapter
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactory.java
new file mode 100644
index 0000000..0a8a0f4
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactory.java
@@ -0,0 +1,61 @@
+// LatLongProviderAdapterFactory.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapterFactory;
+
+/**
+ * This class creates adapters that that adapt <code>Identifiable</code>'s to
+ * <code>LatLongProvider</code>'s. The typical <code>LatLongProvider</code>
+ * that is returned extracts the lat/long data from the <em>spatial</em>
+ * attribute of an <code>Identifiable</code>'s dublin core instance.
+ * 
+ * @see org.eclipse.stem.core.common.Identifiable
+ */
+public class LatLongProviderAdapterFactory extends
+		SpatialProviderAdapterFactory {
+
+	/**
+	 * This is the singleton instance of the adapter.
+	 */
+	private static LatLongProviderAdapter adapter = null;
+
+	/**
+	 * This is a static reference to the adapter factory to use.
+	 */
+	public final static LatLongProviderAdapterFactory INSTANCE = new LatLongProviderAdapterFactory();
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == LatLongProvider.class;
+	} // isFactoryForType
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.spatial.LatLongProviderAdapterFactory#createAdapter(org.eclipse.emf.common.notify.Notifier)
+	 */
+	@Override
+	protected Adapter createAdapter(final Notifier target) {
+		// Have we already created an adapter?
+		if (adapter == null) {
+			// No
+			adapter = new LatLongProviderAdapter();
+		}
+		return adapter;
+	} // createAdapter
+
+} // LatLongProviderAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProvider.java
new file mode 100644
index 0000000..e40f8fe
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProvider.java
@@ -0,0 +1,766 @@
+// PlatformLatLongDataProvider.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
+import org.eclipse.stem.definitions.Activator;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder;
+import org.eclipse.stem.definitions.adapters.spatial.geo.preferences.PreferenceConstants;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * This class interprets a URI that specifies a file of (i.e., "platform")
+ * lat/long data in some format (currently <a
+ * href="http://www.opengis.net/gml/">GML</a>).
+ * 
+ * @see InlineLatLongDataProvider
+ * @see LatLongProviderAdapter
+ */
+@SuppressWarnings("deprecation")
+public class PlatformLatLongDataProvider implements LatLongDataProvider {
+	/**
+	 * The class name of the first SAX XML parser to attempt to create if the
+	 * default cannot be found. Value:
+	 * <code>org.apache.xerces.parsers.SAXParser</code>
+	 */
+	public static final String SAX_PARSER1 = "org.apache.xerces.parsers.SAXParser";
+
+	/**
+	 * The class name of the second SAX XML parser to attempt to create if the
+	 * default cannot be found. Value:
+	 * <code>org.apache.crimson.parser.XMLReaderImpl</code>
+	 */
+	public static final String SAX_PARSER2 = "org.apache.crimson.parser.XMLReaderImpl";
+
+	/**
+	 * This set of nested Maps implements a cache for latitude/longitude data
+	 * read in. The key of the first map is the URI of the file containing the
+	 * data. The key of the second map is the identifier that is the fragment of
+	 * the original query URI. If the first map does not contain an entry for a
+	 * specified file, then one is created and populated with the contents of
+	 * the file.
+	 */
+	static Map<URI, Map<String, LatLong>> cache = new ConcurrentHashMap<URI, Map<String, LatLong>>();
+
+	/**
+	 * This is the scheme for a "platform" data URI that specifies a file that
+	 * contains lat/long data.
+	 */
+	public static final String PLATFORM_SCHEME = "platform";
+
+	/**
+	 * This is the name of the folder that contains the normal resolution GML
+	 * files.
+	 */
+	private static final CharSequence NORMAL_RES_FOLDER = "country";
+
+	/**
+	 * This is the name of the folder that contains the lower resolution GML
+	 * files
+	 */
+	private static final CharSequence LOW_RES_FOLDER = "country_reduced";
+
+	/**
+	 * If <code>true</code> then the latitude/longitude points will be sampled
+	 * and some will be discarded to reduce their number.
+	 */
+	public boolean isSampling = false;
+
+	/**
+	 * This is the frequency at which the latitude/longitude data points will be
+	 * sampled. A value of "1" means every point will be included, a value of
+	 * "2" means that every 2nd point will be included. The first and last data
+	 * points are always included.
+	 */
+	public int sampleFrequency = 1;
+
+	/**
+	 * If <code>true</code> then I/O Exceptions are logged, otherwise they are
+	 * ignored.
+	 */
+	public boolean reportIOExceptions = true;
+
+	/**
+	 * If <code>true</code> then the path to the GML file will be modified to
+	 * point to a smaller GML file that has a lower resolution.
+	 */
+	public boolean useLowerResolutionLatLongData = false;
+
+	/**
+	 * Constructor
+	 */
+	public PlatformLatLongDataProvider() {
+		super();
+		setPreferences();
+
+		Activator.getDefault().getPluginPreferences()
+				.addPropertyChangeListener(new IPropertyChangeListener() {
+					public void propertyChange(final PropertyChangeEvent event) {
+						setPreferences();
+						// Flush everything in the cache to force it to be read
+						// again from the gml file and re-sampled
+						cache = new ConcurrentHashMap<URI, Map<String, LatLong>>();
+					} // propertyChange
+				} // IPropertyChangeListener
+				);
+
+	} // PlatformLatLongDataProvider
+
+	/**
+	 * @param latlongFileURI
+	 * @return the lat/long values
+	 */
+	public LatLong getLatLong(final URI latlongFileURI) {
+		LatLong retValue = null;
+
+		// The URI should have an ID as the fragment that specifies the
+		// latitude/longitude data in the GML file.
+
+		// Is there an entry for our key?
+		retValue = getLatLongMap(latlongFileURI.trimFragment()).get(
+				latlongFileURI.fragment());
+
+		retValue = retValue != null ? retValue : new LatLong();
+		return retValue;
+	} // getLatLong
+
+	/**
+	 * This method is just like {@link #getLatLong(URI)} except that it will
+	 * immediately return an "empty" LatLong instance if the data for the URI
+	 * has not been retrieved. It will also start a separate job to retrieve
+	 * that data and will return it when that job completes successfully.
+	 * 
+	 * @param latlongFileURI
+	 * @return the lat/long values
+	 */
+	public LatLong getLatLongNoWait(final URI latlongFileURI) {
+		LatLong retValue = null;
+
+		// The URI should have an ID as the fragment that specifies the
+		// latitude/longitude data in the GML file.
+
+		// Is there an entry for our key?
+		retValue = getLatLongMapNoWait(latlongFileURI.trimFragment()).get(
+				latlongFileURI.fragment());
+
+		retValue = retValue != null ? retValue : new LatLong();
+		return retValue;
+	} // getLatLong
+
+	/**
+	 * @param fileURI
+	 *            the uri of a file of latitude/longitude data
+	 * @return the identifiers of the latitude/longitude data in the file
+	 */
+	public Set<String> getIds(final URI fileURI) {
+		return getLatLongMap(fileURI).keySet();
+	} // getIds
+
+	/**
+	 * This method is just like {@link #getIds(URI)} except that it will return
+	 * an empty set if the data referenced by the URI has not been read yet. It
+	 * will then cause a separate job to start that will read that data. A
+	 * subsequent call, after that job completes successfully, would return a
+	 * set of ids.
+	 * 
+	 * @param fileURI
+	 *            the uri of a file of latitude/longitude data
+	 * @return the identifiers of the latitude/longitude data in the file
+	 */
+	public Set<String> getIdsNoWait(final URI fileURI) {
+		return getLatLongMapNoWait(fileURI).keySet();
+	} // getIds
+
+	/**
+	 * @param fileURI
+	 *            the uri of a file of latitude/longitude data
+	 * @return the map between id's and data values for that file.
+	 */
+	private Map<String, LatLong> getLatLongMap(final URI fileURI) {
+		// Have we processed this file before?
+		Map<String, LatLong> latLongMap = cache.get(fileURI);
+		if (latLongMap == null) {
+			// No
+			// We need to read the contents of the file and populate the entry
+			latLongMap = createLatLongMap(fileURI);
+			cache.put(fileURI, latLongMap);
+		}
+		return latLongMap;
+	} // getLatLongMap
+
+	/**
+	 * This method is the same as {@link #getLatLongMap(URI)}, except that it
+	 * immediately returns an instance of the lat/long map. This map will be
+	 * empty if this is the first time a request has been made for it. In that
+	 * case a separate Job (i.e., thread) is scheduled to read and populate the
+	 * map from a GML file. When that is finished, the empty map is replaced by
+	 * the populated one so that the next call will return the populated map.
+	 * 
+	 * @param fileURI
+	 *            the uri of a file of latitude/longitude data
+	 * @return the map between id's and data values for that file.
+	 */
+	synchronized private Map<String, LatLong> getLatLongMapNoWait(
+			final URI fileURI) {
+		// Have we processed this file before?
+		Map<String, LatLong> latLongMap = cache.get(fileURI);
+		if (latLongMap == null) {
+			// No
+			// We need to put an empty map into the cache so that the next call
+			// doesn't try to start up another job to read in the file.
+			latLongMap = new ConcurrentHashMap<String, LatLong>();
+			cache.put(fileURI, latLongMap);
+
+			// Now down to business, we create a separate job to read in the
+			// lat/long data from the GML file and populate the map.
+			final Job readGMLJob = new Job(fileURI.toString()) {
+				/**
+				 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+				 */
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					monitor.beginTask(fileURI.toString(), 100);
+					// We need to read the contents of the file and populate the
+					// entry
+					final Map<String, LatLong> latLongMap = createLatLongMap(fileURI);
+					// Replace the empty map with this one.
+					cache.put(fileURI, latLongMap);
+					monitor.done();
+					return new Status(IStatus.OK, Activator.PLUGIN_ID,
+							IStatus.OK, "Done", null);
+				} // run
+			}; // readGMLJob
+			readGMLJob.schedule();
+		} // if no lat/long map
+
+		return latLongMap;
+	} // getLatLongMap
+
+	Map<String, LatLong> createLatLongMap(final URI fileURI) {
+		final Map<String, LatLong> latLongMap = new ConcurrentHashMap<String, LatLong>();
+		final URIConverter converter = new URIConverterImpl();
+		final GMLDecoder gMLDecoder = new GMLDecoder(latLongMap);
+		try {
+			final InputStream is = converter
+					.createInputStream(adjustFilePath(fileURI));
+			final BufferedReader in = new BufferedReader(new InputStreamReader(
+					is));
+			parseInputStream(in, gMLDecoder);
+		} // try
+		catch (final IOException e) {
+			// It could be that we tried to get a low resolution version of the
+			// file and it wasn't found. So let's try getting the regular
+			// resolution
+			// Are we getting low resolution files?
+			if (useLowerResolutionLatLongData) {
+				// Yes
+				try {
+					// Try again without adjusting the file path
+					final InputStream is = converter.createInputStream(fileURI);
+					final BufferedReader in = new BufferedReader(
+							new InputStreamReader(is));
+					parseInputStream(in, gMLDecoder);
+				} catch (final FileNotFoundException fnfe) {
+					// Should we report the missing file?
+					if (reportIOExceptions) {
+						// Yes
+						Activator.logInformation(fnfe.getMessage(), fnfe);
+					}
+				} // catch FileNotFoundException
+				catch (final IOException e2) {
+					// Should we report the error?
+					if (reportIOExceptions) {
+						// Yes
+						Activator.logError(e2.getMessage(), e2);
+					}
+				} // catch IOException
+			} // if using low resolution
+			// Should we report the error?
+			else if (reportIOExceptions) {
+				// Yes
+				Activator.logError(e.getMessage(), e);
+			}
+		} // catch
+
+		return latLongMap;
+	} // createLatLongMap
+
+	/**
+	 * This method determines if it should modify the path to the GML file so
+	 * that a different file is selected. Typically, this is to switch to a
+	 * lower resolution GML file.
+	 * 
+	 * @param fileURI
+	 *            the original URI
+	 * @return the adjusted URI
+	 */
+	private URI adjustFilePath(final URI fileURI) {
+		URI retValue = fileURI;
+
+		// Should we use a lower resolution version of the file?
+		if (useLowerResolutionLatLongData) {
+			// Yes
+			final String adjustedPath = fileURI.toString().replace(
+					NORMAL_RES_FOLDER, LOW_RES_FOLDER);
+			retValue = URI.createURI(adjustedPath);
+		}
+
+		return retValue;
+	} // adjustFilePath
+
+	/**
+	 * Set the preferences.
+	 * 
+	 * @see #isSampling
+	 * @see #sampleFrequency
+	 */
+	private void setPreferences() {
+		final Preferences perferences = Activator.getDefault()
+				.getPluginPreferences();
+		isSampling = perferences
+				.getBoolean(PreferenceConstants.DOWN_SAMPLE_LAT_LONG_DATA_BOOLEAN_PREFERENCE);
+		sampleFrequency = perferences
+				.getInt(PreferenceConstants.LAT_LONG_SAMPLE_FREQUENCY_INTEGER_PREFERENCE);
+		reportIOExceptions = perferences
+				.getBoolean(PreferenceConstants.REPORT_IO_EXCEPTIONS_BOOLEAN_PREFERENCE);
+		useLowerResolutionLatLongData = perferences
+				.getBoolean(PreferenceConstants.USE_LOWER_RESOLUTION_LAT_LONG_DATA_BOOLEAN_PREFERENCE);
+	} // setPerferences
+
+	/**
+	 * Try to create a SAX Parser. The method first attempts to create the
+	 * default parser. The class name of this parser is assigned to the property
+	 * "org.xml.sax.driver". This value is defined on the command line that
+	 * starts the Java interpreter
+	 * <code>java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser</code>
+	 * If it is not successful in finding this parser, it will attempt to create
+	 * an instance of <code>org.apache.xerces.parsers.SAXParser</code>, if
+	 * that fails, it will try the parser
+	 * <code>"org.apache.crimson.parser.XMLReaderImpl</code>. If that fails,
+	 * it will throw a <code>SimulationException</code> reporting the
+	 * inability to create a SAX XML Parser.
+	 * 
+	 * @return a SAXParser
+	 */
+	public static XMLReader getSAXParser() {
+
+		XMLReader retValue = null;
+		try {
+			// Try to make the default SAX Parser
+			retValue = XMLReaderFactory.createXMLReader();
+
+		} // try
+		catch (final SAXException saxe) {
+			// Try specific parsers
+			try { // SAX_PARSER1
+				retValue = XMLReaderFactory.createXMLReader(SAX_PARSER1);
+			} // try SAX_PARSER1
+			catch (final SAXException saxe1) {
+				try { // try SAX_PARSER2
+					retValue = XMLReaderFactory.createXMLReader(SAX_PARSER2);
+				} // try SAX_PARSER2
+				catch (final SAXException saxe2) {
+					Activator.logError(saxe2.getMessage(), saxe2);
+				} // catch SAX_PARSER2
+			} // catch SAX_PARSER1
+		} // catch default
+
+		return retValue;
+	} // getSAXParser()
+
+	/**
+	 * Parse the specified input character stream using the
+	 * 
+	 * specified Handler. Where the output is stored depends on the handler
+	 * 
+	 * @param in
+	 *            BufferedReader to read the XML from.
+	 * @param handler
+	 *            The class that will handle the parsing
+	 */
+	public static void parseInputStream(final BufferedReader in,
+			final DefaultHandler handler) {
+		try {
+			final XMLReader saxParser = getSAXParser();
+			saxParser.setContentHandler(handler);
+			saxParser.parse(new InputSource(in));
+			in.close();
+		} catch (final IOException e) {
+			Activator.logError(e.getMessage(), e);
+		} catch (final SAXException e) {
+			Activator.logError(e.getMessage(), e);
+		}
+	} // parseInputStream
+
+	/**
+	 * This class is a SAX Handler used to process the contents of a GML file
+	 * specifying latitude/longitude data.
+	 */
+	public class GMLDecoder extends DefaultHandler {
+
+		// XML element name
+		private static final String XML_MAP_ELEMENT_NAME = "Map";
+
+		private static final String XML_TITLE_ELEMENT_NAME = "title";
+
+		private static final String XML_SUBTITLE_ELEMENT_NAME = "subTitle";
+
+		private static final String XML_UPDATED_ELEMENT_NAME = "updated";
+
+		private static final String XML_ENTRY_ELEMENT_NAME = "entry";
+
+		private static final String XML_WHERE_ELEMENT_NAME = "where";
+
+		private static final String XML_OUTER_BOUNDARY_ELEMENT_NAME = "outerBoundaryIs";
+
+		private static final String XML_LINEAR_RING_ELEMENT_NAME = "LinearRing";
+
+		private static final String XML_POLYGON_ELEMENT_NAME = "Polygon";
+
+		private static final String XML_POSLIST_ELEMENT_NAME = "posList";
+
+		private static final String XML_ID_ATTR = "gml:id";
+
+		/**
+		 * This is the title parsed from the file
+		 */
+		private String title = "";
+
+		/**
+		 * This is the sub-title parsed from the file;
+		 */
+		// We're ignoring subtitles right now
+		// private String subTitle = "";
+		/**
+		 * This is the date the file was updated as parsed from the file;
+		 */
+		// We're ignoring updated right now
+		// private String updated = "";
+		/**
+		 * This is the identifier of the current polygon being parsed
+		 */
+		private String currentPolygonId = null;
+
+		// Parse position in the document being parsed
+		private Locator locator = null;
+
+		/**
+		 * The map that is constructed during the processing of the GML file.
+		 */
+		Map<String, LatLong> latLongMap = null;
+
+		/**
+		 * This is the collection of
+		 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment}'s
+		 * collected for a polygon.
+		 */
+		private LatLong polygonLatLong = null;
+
+		/**
+		 * This segment builder is used to collect together related
+		 * latitude/longitude data pairs to create a
+		 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment}
+		 */
+		private LatLong.SegmentBuilder segmentBuilder = null;
+
+		/**
+		 * These are the characters that have been collected but are not yet
+		 * complete.
+		 */
+		private StringBuilder characterStringBuilder = new StringBuilder();
+
+		/**
+		 * Constructor
+		 */
+		protected GMLDecoder(final Map<String, LatLong> latLongMap) {
+			super();
+			this.latLongMap = latLongMap;
+		} // GMLDecoder
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
+		 *      java.lang.String, java.lang.String, org.xml.sax.Attributes)
+		 */
+		@Override
+		public void startElement(final String namespace, final String sName, final String qName,
+				final Attributes attributes) throws SAXException {
+			// The name of the element
+			final String elementName = sName.equals("") ? qName : sName;
+
+			// The "Map" root element?
+			if (elementName.equalsIgnoreCase(XML_MAP_ELEMENT_NAME)) {
+				// Yes
+				assert latLongMap != null;
+			} // else if Map
+
+			// A title element?
+			else if (elementName.equalsIgnoreCase(XML_TITLE_ELEMENT_NAME)) {
+				// Yes
+				characterStringBuilder = new StringBuilder();
+			} // title
+
+			// subTitle element?
+			else if (elementName.equalsIgnoreCase(XML_SUBTITLE_ELEMENT_NAME)) {
+				// Yes
+				characterStringBuilder = new StringBuilder();
+			} // subTitle
+
+			// updated element?
+			else if (elementName.equalsIgnoreCase(XML_UPDATED_ELEMENT_NAME)) {
+				// Yes
+				characterStringBuilder = new StringBuilder();
+			} // updated
+
+			// entry element?
+			else if (elementName.equalsIgnoreCase(XML_ENTRY_ELEMENT_NAME)) {
+				// Yes
+			} // updated
+
+			// where element?
+			else if (elementName.equalsIgnoreCase(XML_WHERE_ELEMENT_NAME)) {
+				// Yes
+			} // where
+
+			// outerBoundaryIs element?
+			else if (elementName
+					.equalsIgnoreCase(XML_OUTER_BOUNDARY_ELEMENT_NAME)) {
+				// Yes
+			} // outerBoundaryIs
+
+			// linearRing element?
+			else if (elementName.equalsIgnoreCase(XML_LINEAR_RING_ELEMENT_NAME)) {
+				// Yes
+			} // linearRing
+
+			// polygon element?
+			else if (elementName.equalsIgnoreCase(XML_POLYGON_ELEMENT_NAME)) {
+				// Yes
+				assert currentPolygonId == null;
+				assert polygonLatLong == null;
+				currentPolygonId = attributes.getValue(XML_ID_ATTR);
+				polygonLatLong = new LatLong();
+			} // polygon
+
+			// posList element?
+			else if (elementName.equalsIgnoreCase(XML_POSLIST_ELEMENT_NAME)) {
+				// Yes
+				assert segmentBuilder == null;
+				segmentBuilder = new SegmentBuilder();
+				characterStringBuilder = new StringBuilder();
+			} // posList
+
+			else {
+				// No
+				// We have no idea what this element is
+				throw new SAXParseException("Invalid element name \""
+						+ elementName + "\"", locator);
+			} // else unrecognized element name
+		} // startElement
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
+		 *      java.lang.String, java.lang.String)
+		 */
+		@Override
+		public void endElement(final String namespace, final String sName, final String qName)
+				throws SAXException {
+			// The name of the element
+			final String elementName = sName.equals("") ? qName : sName;
+
+			// The "Map" root element?
+			if (elementName.equalsIgnoreCase(XML_MAP_ELEMENT_NAME)) {
+				// Yes
+				assert latLongMap != null;
+			} // else if Map
+
+			// A title element?
+			else if (elementName.equalsIgnoreCase(XML_TITLE_ELEMENT_NAME)) {
+				// Yes
+				title = characterStringBuilder.toString();
+				characterStringBuilder = new StringBuilder();
+			} // title
+
+			// subTitle element?
+			else if (elementName.equalsIgnoreCase(XML_SUBTITLE_ELEMENT_NAME)) {
+				// Yes
+				// We're ignoring subtitles right now
+				// subTitle = characterStringBuilder.toString();
+				characterStringBuilder = new StringBuilder();
+			} // subTitle
+
+			// updated element?
+			else if (elementName.equalsIgnoreCase(XML_UPDATED_ELEMENT_NAME)) {
+				// Yes
+				// updated = characterStringBuilder.toString();
+				characterStringBuilder = new StringBuilder();
+			} // updated
+
+			// entry element?
+			else if (elementName.equalsIgnoreCase(XML_ENTRY_ELEMENT_NAME)) {
+				// Yes
+			} // entry
+
+			// where element?
+			else if (elementName.equalsIgnoreCase(XML_WHERE_ELEMENT_NAME)) {
+				// Yes
+			} // where
+
+			// outerBoundaryIs element?
+			else if (elementName
+					.equalsIgnoreCase(XML_OUTER_BOUNDARY_ELEMENT_NAME)) {
+				// Yes
+			} // outerBoundaryIs
+
+			// linearRing element?
+			else if (elementName.equalsIgnoreCase(XML_LINEAR_RING_ELEMENT_NAME)) {
+				// Yes
+			} // linearRing
+
+			// polygon element?
+			else if (elementName.equalsIgnoreCase(XML_POLYGON_ELEMENT_NAME)) {
+				// Yes
+				latLongMap.put(currentPolygonId, polygonLatLong);
+				currentPolygonId = null;
+				polygonLatLong = null;
+			} // polygon
+
+			// posList element?
+			else if (elementName.equalsIgnoreCase(XML_POSLIST_ELEMENT_NAME)) {
+				// Yes
+				// Parse the current characters for the latitude/longitude data
+				// pairs
+
+				final StringTokenizer st = new StringTokenizer(
+						characterStringBuilder.toString(), " \n");
+				characterStringBuilder = new StringBuilder();
+
+				while (st.hasMoreTokens()) {
+					final String value1 = st.nextToken();
+					// Is there a matching Longitude?
+					if (st.hasMoreTokens()) {
+						// Yes
+						// Lat
+						final String value2 = st.nextToken();
+						segmentBuilder.add(value1, value2);
+					} else {
+						// No
+						// lat/long mismatch
+						Activator
+								.logError(
+										"Latitude/Longitude data titled \""
+												+ title
+												+ "\" is missing a longitude  match for the latitude value \""
+												+ value1 + "\" at line: "
+												+ locator.getLineNumber()
+												+ ", column: "
+												+ locator.getColumnNumber(),
+										null);
+						// discard whatever we've collected so far
+						segmentBuilder.clear();
+						break;
+					} // else
+				} // while more tokens
+
+				// Anything in the segment?
+				if (segmentBuilder.size() > 0) {
+					// Yes
+					try {
+						polygonLatLong.add(isSampling ? segmentBuilder
+								.toSegment(sampleFrequency) : segmentBuilder
+								.toSegment());
+					} catch (IllegalArgumentException iae) {
+						Activator.logError(
+								"Problem processing Latitude/Longitude data titled \""
+										+ title + "\"", iae);
+					}
+				} // if
+				segmentBuilder = null;
+			} // posList
+			else {
+				// No
+				// We have no idea what this element is
+				throw new SAXParseException("Invalid element name \""
+						+ elementName + "\"", locator);
+			} // else unrecognized element name
+		} // endElement
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
+		 */
+		@Override
+		public void characters(final char[] ch, final int start,
+				final int length) {
+			characterStringBuilder.append(new String(ch, start, length));
+		} // characters
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#warning(org.xml.sax.SAXParseException)
+		 */
+		@Override
+		public void warning(final SAXParseException spe) {
+			Activator.logInformation(spe.getMessage(), spe);
+		} // warning
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#error(org.xml.sax.SAXParseException)
+		 */
+		@Override
+		public void error(final SAXParseException spe) {
+			Activator.logError(spe.getMessage(), spe);
+		} // error
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#fatalError(org.xml.sax.SAXParseException)
+		 */
+		@Override
+		public void fatalError(final SAXParseException spe) {
+			Activator.logError(spe.getMessage(), spe);
+		} // fatalError
+
+		/**
+		 * @see org.xml.sax.helpers.DefaultHandler#setDocumentLocator(org.xml.sax.Locator)
+		 */
+		@Override
+		public void setDocumentLocator(final Locator locator) {
+			this.locator = locator;
+		} // setDocumentLocator
+
+	} // GMLDecoder
+
+} // PlatformLatLongDataProvider
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/MapDataManagementPreferencePage.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/MapDataManagementPreferencePage.java
new file mode 100644
index 0000000..1712799
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/MapDataManagementPreferencePage.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.definitions.adapters.spatial.geo.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.stem.definitions.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <code>FieldEditorPreferencePage</code>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class MapDataManagementPreferencePage extends FieldEditorPreferencePage
+		implements IWorkbenchPreferencePage {
+
+	/**
+	 * This is the minimum sample frequency for lat/long polygon data. A value
+	 * of 1 means all points are included (i.e. no sampling)
+	 */
+	public static final int MIN_SAMPLE_FREQUENCY = 1;
+
+	/**
+	 * This is the maximum sample frequency for lat/long polygon data. There is
+	 * no good value for this.
+	 */
+	private static final int MAX_SAMPLE_FREQUENCY = 1000;
+
+	BooleanFieldEditor enableDownsampleFieldEditor = null;
+
+	IntegerFieldEditor latLongSampleFrequencyFieldEditor = null;
+
+	BooleanFieldEditor enableIOExceptionReportingFieldEditor = null;
+
+	BooleanFieldEditor useLowResolutionLatLongDataFieldEditor = null;
+
+	/**
+	 * Constructor
+	 */
+	public MapDataManagementPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription("Latitude/Longitude polygon sample frequence specification.");
+	} // MapDataManagementPreferencePage
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	@Override
+	public void createFieldEditors() {
+		enableDownsampleFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.DOWN_SAMPLE_LAT_LONG_DATA_BOOLEAN_PREFERENCE,
+				"&Down sample latitude/longitude polygons.",
+				getFieldEditorParent());
+
+		latLongSampleFrequencyFieldEditor = new IntegerFieldEditor(
+				PreferenceConstants.LAT_LONG_SAMPLE_FREQUENCY_INTEGER_PREFERENCE,
+				"&latitude/longitude data sample frequency.",
+				getFieldEditorParent());
+		latLongSampleFrequencyFieldEditor.setValidRange(MIN_SAMPLE_FREQUENCY,
+				MAX_SAMPLE_FREQUENCY);
+		latLongSampleFrequencyFieldEditor
+				.setErrorMessage("Error: Valid range: " + MIN_SAMPLE_FREQUENCY
+						+ " to " + MAX_SAMPLE_FREQUENCY + " data points.");
+
+		enableIOExceptionReportingFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.REPORT_IO_EXCEPTIONS_BOOLEAN_PREFERENCE,
+				"&Report I/O Exceptions.", getFieldEditorParent());
+
+		useLowResolutionLatLongDataFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.USE_LOWER_RESOLUTION_LAT_LONG_DATA_BOOLEAN_PREFERENCE,
+				"&Use lower resolution lat/long data if available.",
+				getFieldEditorParent());
+
+		addField(enableDownsampleFieldEditor);
+		addField(latLongSampleFrequencyFieldEditor);
+		addField(enableIOExceptionReportingFieldEditor);
+		addField(useLowResolutionLatLongDataFieldEditor);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(final IWorkbench workbench) {
+		// Nothing
+	}
+
+} // MapDataManagementPreferencePage
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceConstants.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..89570d7
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceConstants.java
@@ -0,0 +1,27 @@
+package org.eclipse.stem.definitions.adapters.spatial.geo.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public interface PreferenceConstants {
+
+	public static final String DOWN_SAMPLE_LAT_LONG_DATA_BOOLEAN_PREFERENCE = "org.eclipse.stem.definitions.latlong.sample";
+
+	public static final String LAT_LONG_SAMPLE_FREQUENCY_INTEGER_PREFERENCE = "org.eclipse.stem.definitions.latlong.samplefrequency";
+
+	public static final String REPORT_IO_EXCEPTIONS_BOOLEAN_PREFERENCE = "org.eclipse.stem.definitions.latlong.ioreport";
+
+	public static final String USE_LOWER_RESOLUTION_LAT_LONG_DATA_BOOLEAN_PREFERENCE = "org.eclipse.stem.definitions.latlong.lowresolution";
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceInitializer.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..ed9aefb
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/preferences/PreferenceInitializer.java
@@ -0,0 +1,46 @@
+package org.eclipse.stem.definitions.adapters.spatial.geo.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.definitions.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	@Override
+	public void initializeDefaultPreferences() {
+		final IPreferenceStore store = Activator.getDefault()
+				.getPreferenceStore();
+		store
+				.setDefault(
+						PreferenceConstants.LAT_LONG_SAMPLE_FREQUENCY_INTEGER_PREFERENCE,
+						MapDataManagementPreferencePage.MIN_SAMPLE_FREQUENCY);
+		store
+				.setDefault(
+						PreferenceConstants.DOWN_SAMPLE_LAT_LONG_DATA_BOOLEAN_PREFERENCE,
+						false);
+		store.setDefault(
+				PreferenceConstants.REPORT_IO_EXCEPTIONS_BOOLEAN_PREFERENCE,
+				false);
+		store
+				.setDefault(
+						PreferenceConstants.USE_LOWER_RESOLUTION_LAT_LONG_DATA_BOOLEAN_PREFERENCE,
+						true);
+	} // initializeDefaultPreferences
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesFactory.java
new file mode 100644
index 0000000..58c11db
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesFactory.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.edges.EdgesPackage
+ * @generated
+ */
+public interface EdgesFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	EdgesFactory eINSTANCE = org.eclipse.stem.definitions.edges.impl.EdgesFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Migration Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Migration Edge</em>'.
+	 * @generated
+	 */
+	MigrationEdge createMigrationEdge();
+
+	/**
+	 * Returns a new object of class '<em>Migration Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Migration Edge Label</em>'.
+	 * @generated
+	 */
+	MigrationEdgeLabel createMigrationEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Migration Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Migration Edge Label Value</em>'.
+	 * @generated
+	 */
+	MigrationEdgeLabelValue createMigrationEdgeLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Mixing Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Mixing Edge</em>'.
+	 * @generated
+	 */
+	MixingEdge createMixingEdge();
+
+	/**
+	 * Returns a new object of class '<em>Mixing Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Mixing Edge Label</em>'.
+	 * @generated
+	 */
+	MixingEdgeLabel createMixingEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Mixing Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Mixing Edge Label Value</em>'.
+	 * @generated
+	 */
+	MixingEdgeLabelValue createMixingEdgeLabelValue();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	EdgesPackage getEdgesPackage();
+
+} //EdgesFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesPackage.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesPackage.java
new file mode 100644
index 0000000..b038256
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/EdgesPackage.java
@@ -0,0 +1,672 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.edges.EdgesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface EdgesPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "edges";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/definitions/edges.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.definitions.edges";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	EdgesPackage eINSTANCE = org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeImpl <em>Migration Edge</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdge()
+	 * @generated
+	 */
+	int MIGRATION_EDGE = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__URI = GraphPackage.EDGE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__TYPE_URI = GraphPackage.EDGE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__DUBLIN_CORE = GraphPackage.EDGE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>A</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__A = GraphPackage.EDGE__A;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__NODE_AURI = GraphPackage.EDGE__NODE_AURI;
+
+	/**
+	 * The feature id for the '<em><b>B</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__B = GraphPackage.EDGE__B;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__NODE_BURI = GraphPackage.EDGE__NODE_BURI;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__LABEL = GraphPackage.EDGE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Directed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE__DIRECTED = GraphPackage.EDGE__DIRECTED;
+
+	/**
+	 * The number of structural features of the '<em>Migration Edge</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_FEATURE_COUNT = GraphPackage.EDGE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl <em>Migration Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdgeLabel()
+	 * @generated
+	 */
+	int MIGRATION_EDGE_LABEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__URI = GraphPackage.EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__TYPE_URI = GraphPackage.EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__DUBLIN_CORE = GraphPackage.EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__CURRENT_VALUE = GraphPackage.EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__IDENTIFIABLE = GraphPackage.EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL__EDGE = GraphPackage.EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Migration Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL_FEATURE_COUNT = GraphPackage.EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl <em>Migration Edge Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdgeLabelValue()
+	 * @generated
+	 */
+	int MIGRATION_EDGE_LABEL_VALUE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Migration Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Migration Edge Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIGRATION_EDGE_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeImpl <em>Mixing Edge</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdge()
+	 * @generated
+	 */
+	int MIXING_EDGE = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__URI = GraphPackage.EDGE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__TYPE_URI = GraphPackage.EDGE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__DUBLIN_CORE = GraphPackage.EDGE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>A</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__A = GraphPackage.EDGE__A;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__NODE_AURI = GraphPackage.EDGE__NODE_AURI;
+
+	/**
+	 * The feature id for the '<em><b>B</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__B = GraphPackage.EDGE__B;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__NODE_BURI = GraphPackage.EDGE__NODE_BURI;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__LABEL = GraphPackage.EDGE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Directed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE__DIRECTED = GraphPackage.EDGE__DIRECTED;
+
+	/**
+	 * The number of structural features of the '<em>Mixing Edge</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_FEATURE_COUNT = GraphPackage.EDGE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelImpl <em>Mixing Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdgeLabel()
+	 * @generated
+	 */
+	int MIXING_EDGE_LABEL = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__URI = GraphPackage.EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__TYPE_URI = GraphPackage.EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__DUBLIN_CORE = GraphPackage.EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__CURRENT_VALUE = GraphPackage.EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__IDENTIFIABLE = GraphPackage.EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL__EDGE = GraphPackage.EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Mixing Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL_FEATURE_COUNT = GraphPackage.EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl <em>Mixing Edge Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl
+	 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdgeLabelValue()
+	 * @generated
+	 */
+	int MIXING_EDGE_LABEL_VALUE = 5;
+
+	/**
+	 * The feature id for the '<em><b>Mixing Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL_VALUE__MIXING_RATE = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Mixing Edge Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MIXING_EDGE_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MigrationEdge <em>Migration Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Migration Edge</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdge
+	 * @generated
+	 */
+	EClass getMigrationEdge();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel <em>Migration Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Migration Edge Label</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabel
+	 * @generated
+	 */
+	EClass getMigrationEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue <em>Migration Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Migration Edge Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue
+	 * @generated
+	 */
+	EClass getMigrationEdgeLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue#getMigrationRate <em>Migration Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Migration Rate</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue#getMigrationRate()
+	 * @see #getMigrationEdgeLabelValue()
+	 * @generated
+	 */
+	EAttribute getMigrationEdgeLabelValue_MigrationRate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MixingEdge <em>Mixing Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Mixing Edge</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdge
+	 * @generated
+	 */
+	EClass getMixingEdge();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabel <em>Mixing Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Mixing Edge Label</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdgeLabel
+	 * @generated
+	 */
+	EClass getMixingEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue <em>Mixing Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Mixing Edge Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdgeLabelValue
+	 * @generated
+	 */
+	EClass getMixingEdgeLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue#getMixingRate <em>Mixing Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Mixing Rate</em>'.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdgeLabelValue#getMixingRate()
+	 * @see #getMixingEdgeLabelValue()
+	 * @generated
+	 */
+	EAttribute getMixingEdgeLabelValue_MixingRate();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	EdgesFactory getEdgesFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeImpl <em>Migration Edge</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdge()
+		 * @generated
+		 */
+		EClass MIGRATION_EDGE = eINSTANCE.getMigrationEdge();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl <em>Migration Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdgeLabel()
+		 * @generated
+		 */
+		EClass MIGRATION_EDGE_LABEL = eINSTANCE.getMigrationEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl <em>Migration Edge Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMigrationEdgeLabelValue()
+		 * @generated
+		 */
+		EClass MIGRATION_EDGE_LABEL_VALUE = eINSTANCE.getMigrationEdgeLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Migration Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE = eINSTANCE.getMigrationEdgeLabelValue_MigrationRate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeImpl <em>Mixing Edge</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdge()
+		 * @generated
+		 */
+		EClass MIXING_EDGE = eINSTANCE.getMixingEdge();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelImpl <em>Mixing Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdgeLabel()
+		 * @generated
+		 */
+		EClass MIXING_EDGE_LABEL = eINSTANCE.getMixingEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl <em>Mixing Edge Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl
+		 * @see org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl#getMixingEdgeLabelValue()
+		 * @generated
+		 */
+		EClass MIXING_EDGE_LABEL_VALUE = eINSTANCE.getMixingEdgeLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Mixing Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute MIXING_EDGE_LABEL_VALUE__MIXING_RATE = eINSTANCE.getMixingEdgeLabelValue_MixingRate();
+
+	}
+
+} //EdgesPackage
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdge.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdge.java
new file mode 100644
index 0000000..7c99f3d
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdge.java
@@ -0,0 +1,41 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Edge;
+
+/**
+ * An edge representing migration between 
+ * two areas. These edges have the following restrictions:
+ * -getLabel() must return a migration edge label
+ * -isDirected() must return true
+ * 
+ * @author jlessler
+ *
+ * @model
+ */
+public interface MigrationEdge extends Edge {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * migration edge URI.
+	 */
+	public String URI_TYPE_MIGRATION_EDGE_SEGMENT = URI_TYPE_EDGE_SEGMENT + "/migration";
+	
+	
+	
+	/**Overrides getLabel() to enforce the returning of a migration edge label
+	 **/
+	MigrationEdgeLabel getLabel();
+	void setLabel(MigrationEdgeLabel lbl);
+				
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabel.java
new file mode 100644
index 0000000..3c7d601
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabel.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.EdgeLabel;
+
+
+/**
+ * Defines a directed edge that represents migration between two nodes.
+ * Migration denotes movement of the population between two nodes (i.e., the
+ * home node of migrating population changes).
+ * 
+ * @author jlessler
+ * @model
+ */
+
+public interface MigrationEdgeLabel extends EdgeLabel {
+	
+	
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * migration relationship label type URI.
+	 */
+	String URI_TYPE_MIGRATION_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT
+			+ "/migration";
+	
+	
+	/**Make the current  value stuff have to be MixingEdgeLabelValues
+	 * */
+	MigrationEdgeLabelValue getCurrentValue();
+	void setCurrentValue(MigrationEdgeLabelValue val);
+		
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabelValue.java
new file mode 100644
index 0000000..dbccf4f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MigrationEdgeLabelValue.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * Represents the rate of migration between two nodes. This is a 
+ * number between 0 and infinity
+ * 
+ * @author jlessler
+ *
+ *@model
+ */
+public interface MigrationEdgeLabelValue extends LabelValue {
+	
+	/**Returns the migration rate
+	 * @return a number between 0 and infinity
+	 * 
+	 * @model default="0.0"*/
+	double getMigrationRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue#getMigrationRate <em>Migration Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Migration Rate</em>' attribute.
+	 * @see #getMigrationRate()
+	 * @generated
+	 */
+	void setMigrationRate(double value);
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdge.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdge.java
new file mode 100644
index 0000000..d022d6d
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdge.java
@@ -0,0 +1,38 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Edge;
+
+/**
+ * A mixing edge. A mixing edge must have the property that:
+ *  - it is undirected
+ *  - getLabel() returns a mixing edge label
+ * @author jlessler
+ *
+ * @model
+ */
+public interface MixingEdge extends Edge {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * mixing edge URI.
+	 */
+	public String URI_TYPE_MIXING_EDGE_SEGMENT = URI_TYPE_EDGE_SEGMENT + "/mixing";
+	
+	
+	/**Overrides getLabel() to enforce the returning of a mixing edge label	
+	 */
+	MixingEdgeLabel getLabel();
+	void setLabel(MixingEdgeLabel lbl);
+			
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabel.java
new file mode 100644
index 0000000..bff0f2a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabel.java
@@ -0,0 +1,37 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.EdgeLabel;
+
+/**
+ * Defines a mixing edge. Mixing edges are undirected and defines some rate of 
+ * contact between members of two populations in which the home population of
+ * the individuals involved does not change.
+ * 
+ * @model
+ * */
+public interface MixingEdgeLabel extends EdgeLabel {
+	
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * mixing relationship label type URI.
+	 */
+	String URI_TYPE_MIXING_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT
+			+ "/mixing";
+	
+	/**Make the current  value stuff have to be MixingEdgeLabelValues
+	 * */
+	MixingEdgeLabelValue getCurrentValue();
+	void setCurrentValue(MixingEdgeLabelValue val);
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabelValue.java
new file mode 100644
index 0000000..855105a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/MixingEdgeLabelValue.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.definitions.edges;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+
+/**
+ * Label value denoting the rate of mixing between two populations.
+ * 
+ * @model
+ **/
+public interface MixingEdgeLabelValue extends LabelValue {
+		
+	/**The rate of mixing between the two populations.
+	 * 
+	 * @model*/
+	double getMixingRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue#getMixingRate <em>Mixing Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mixing Rate</em>' attribute.
+	 * @see #getMixingRate()
+	 * @generated
+	 */
+	void setMixingRate(double value);
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesFactoryImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesFactoryImpl.java
new file mode 100644
index 0000000..edbd0ab
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesFactoryImpl.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.definitions.edges.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesFactoryImpl extends EFactoryImpl implements EdgesFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static EdgesFactory init() {
+		try {
+			EdgesFactory theEdgesFactory = (EdgesFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/definitions/edges.ecore"); //$NON-NLS-1$ 
+			if (theEdgesFactory != null) {
+				return theEdgesFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new EdgesFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case EdgesPackage.MIGRATION_EDGE: return createMigrationEdge();
+			case EdgesPackage.MIGRATION_EDGE_LABEL: return createMigrationEdgeLabel();
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE: return createMigrationEdgeLabelValue();
+			case EdgesPackage.MIXING_EDGE: return createMixingEdge();
+			case EdgesPackage.MIXING_EDGE_LABEL: return createMixingEdgeLabel();
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE: return createMixingEdgeLabelValue();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdge createMigrationEdge() {
+		MigrationEdgeImpl migrationEdge = new MigrationEdgeImpl();
+		return migrationEdge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabel createMigrationEdgeLabel() {
+		MigrationEdgeLabelImpl migrationEdgeLabel = new MigrationEdgeLabelImpl();
+		return migrationEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabelValue createMigrationEdgeLabelValue() {
+		MigrationEdgeLabelValueImpl migrationEdgeLabelValue = new MigrationEdgeLabelValueImpl();
+		return migrationEdgeLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdge createMixingEdge() {
+		MixingEdgeImpl mixingEdge = new MixingEdgeImpl();
+		return mixingEdge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabel createMixingEdgeLabel() {
+		MixingEdgeLabelImpl mixingEdgeLabel = new MixingEdgeLabelImpl();
+		return mixingEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabelValue createMixingEdgeLabelValue() {
+		MixingEdgeLabelValueImpl mixingEdgeLabelValue = new MixingEdgeLabelValueImpl();
+		return mixingEdgeLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesPackage getEdgesPackage() {
+		return (EdgesPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static EdgesPackage getPackage() {
+		return EdgesPackage.eINSTANCE;
+	}
+
+} //EdgesFactoryImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesPackageImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesPackageImpl.java
new file mode 100644
index 0000000..3b8b96f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/EdgesPackageImpl.java
@@ -0,0 +1,352 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+import org.eclipse.stem.definitions.edges.MixingEdge;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabelValue;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+import org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl;
+
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+
+import org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl;
+import org.eclipse.stem.definitions.types.TypesPackage;
+import org.eclipse.stem.definitions.types.impl.TypesPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesPackageImpl extends EPackageImpl implements EdgesPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass migrationEdgeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass migrationEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass migrationEdgeLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mixingEdgeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mixingEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass mixingEdgeLabelValueEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.definitions.edges.EdgesPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private EdgesPackageImpl() {
+		super(eNS_URI, EdgesFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link EdgesPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static EdgesPackage init() {
+		if (isInited) return (EdgesPackage)EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI);
+
+		// Obtain or create and register package
+		EdgesPackageImpl theEdgesPackage = (EdgesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof EdgesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new EdgesPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		GraphPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+		SolverPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) : LabelsPackage.eINSTANCE);
+		NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) : NodesPackage.eINSTANCE);
+		TypesPackageImpl theTypesPackage = (TypesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) instanceof TypesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) : TypesPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theEdgesPackage.createPackageContents();
+		theLabelsPackage.createPackageContents();
+		theNodesPackage.createPackageContents();
+		theTypesPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theEdgesPackage.initializePackageContents();
+		theLabelsPackage.initializePackageContents();
+		theNodesPackage.initializePackageContents();
+		theTypesPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theEdgesPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(EdgesPackage.eNS_URI, theEdgesPackage);
+		return theEdgesPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMigrationEdge() {
+		return migrationEdgeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMigrationEdgeLabel() {
+		return migrationEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMigrationEdgeLabelValue() {
+		return migrationEdgeLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMigrationEdgeLabelValue_MigrationRate() {
+		return (EAttribute)migrationEdgeLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMixingEdge() {
+		return mixingEdgeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMixingEdgeLabel() {
+		return mixingEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMixingEdgeLabelValue() {
+		return mixingEdgeLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMixingEdgeLabelValue_MixingRate() {
+		return (EAttribute)mixingEdgeLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesFactory getEdgesFactory() {
+		return (EdgesFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		migrationEdgeEClass = createEClass(MIGRATION_EDGE);
+
+		migrationEdgeLabelEClass = createEClass(MIGRATION_EDGE_LABEL);
+
+		migrationEdgeLabelValueEClass = createEClass(MIGRATION_EDGE_LABEL_VALUE);
+		createEAttribute(migrationEdgeLabelValueEClass, MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE);
+
+		mixingEdgeEClass = createEClass(MIXING_EDGE);
+
+		mixingEdgeLabelEClass = createEClass(MIXING_EDGE_LABEL);
+
+		mixingEdgeLabelValueEClass = createEClass(MIXING_EDGE_LABEL_VALUE);
+		createEAttribute(mixingEdgeLabelValueEClass, MIXING_EDGE_LABEL_VALUE__MIXING_RATE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		migrationEdgeEClass.getESuperTypes().add(theGraphPackage.getEdge());
+		migrationEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getEdgeLabel());
+		migrationEdgeLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		mixingEdgeEClass.getESuperTypes().add(theGraphPackage.getEdge());
+		mixingEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getEdgeLabel());
+		mixingEdgeLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(migrationEdgeEClass, MigrationEdge.class, "MigrationEdge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(migrationEdgeLabelEClass, MigrationEdgeLabel.class, "MigrationEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(migrationEdgeLabelValueEClass, MigrationEdgeLabelValue.class, "MigrationEdgeLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getMigrationEdgeLabelValue_MigrationRate(), ecorePackage.getEDouble(), "migrationRate", "0.0", 0, 1, MigrationEdgeLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(mixingEdgeEClass, MixingEdge.class, "MixingEdge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(mixingEdgeLabelEClass, MixingEdgeLabel.class, "MixingEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(mixingEdgeLabelValueEClass, MixingEdgeLabelValue.class, "MixingEdgeLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getMixingEdgeLabelValue_MixingRate(), ecorePackage.getEDouble(), "mixingRate", null, 0, 1, MixingEdgeLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //EdgesPackageImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeImpl.java
new file mode 100644
index 0000000..02605fd
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeImpl.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Migration Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class MigrationEdgeImpl extends EdgeImpl implements MigrationEdge {
+	
+	/**
+	 * This is used to generate unique URI's for each MigrationEdge generated
+	 */
+	static int migrationEdgeCounter = 0;
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected MigrationEdgeImpl() {
+		super();
+		
+		//set the URI
+		setURI(STEMURI.createURI(URI_TYPE_MIGRATION_EDGE_SEGMENT + "/"
+				+ Integer.toString(migrationEdgeCounter++)));
+		
+		//Make a label
+		setLabel(EdgesFactory.eINSTANCE.createMigrationEdgeLabel());				
+		
+		//this edge must be directed
+		setDirected(true);
+		
+	}
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIGRATION_EDGE;
+	}
+	
+	/***
+	 * Override setter for setDirected so that it will blow up if anyone tries to make it directed (when assertions are on).
+	 */
+	@Override
+	public void setDirected(boolean isDirected) {
+		assert(isDirected==true);
+		super.setDirected(isDirected);
+	}
+	
+	
+	/**Override to make getEdge return the 
+	 * correct type.*/
+	@Override
+	public MigrationEdgeLabel getLabel() {
+		return (MigrationEdgeLabel)super.getLabel();	
+	}
+
+	public void setLabel(MigrationEdgeLabel lbl) {
+		//just deal with making sure the URI labeling scheme is correct here.
+		lbl.setURIOfIdentifiableToBeLabeled(this.getURI());
+		
+		super.setLabel(lbl);
+	}
+	
+	
+} //MigrationEdgeImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelImpl.java
new file mode 100644
index 0000000..997ce33
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelImpl.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.EdgeLabelImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Migration Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class MigrationEdgeLabelImpl extends EdgeLabelImpl implements MigrationEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected MigrationEdgeLabelImpl() {
+		super();
+		setCurrentValue(EdgesFactory.eINSTANCE.createMigrationEdgeLabelValue());
+	}
+
+	/**
+	 * @param node
+	 *            the node
+	 * @return the Edges that represent the common border relationship between
+	 *         the node and other nodes.
+	 */
+	public static List<Edge> getMigrationEdgesFromNode(final Node node) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		for (Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter.hasNext();) {
+			final Edge edge = edgeIter.next();
+			final EdgeLabel edgeLabel = edge.getLabel();
+			// Is the label a migrationEdge label?
+			if (edgeLabel instanceof MigrationEdgeLabel) {
+				// Yes
+				retValue.add(edge);
+			}
+		} // for
+
+		return retValue;
+	} // getMigrationEdgesFromNode
+	
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIGRATION_EDGE_LABEL;
+	}
+	
+	/**
+	 * Make the current value stuff have to be MixingEdgeLabelValues
+	 */
+	@Override
+	public MigrationEdgeLabelValue getCurrentValue() {
+		return((MigrationEdgeLabelValue)super.getCurrentValue());
+	}
+	
+	public void setCurrentValue(MigrationEdgeLabelValue val) {
+		super.setCurrentValue(val);
+	}
+
+} //MigrationEdgeLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelValueImpl.java
new file mode 100644
index 0000000..2487496
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MigrationEdgeLabelValueImpl.java
@@ -0,0 +1,200 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Migration Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl#getMigrationRate <em>Migration Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MigrationEdgeLabelValueImpl extends LabelValueImpl implements MigrationEdgeLabelValue {
+	/**
+	 * The default value of the '{@link #getMigrationRate() <em>Migration Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMigrationRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MIGRATION_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMigrationRate() <em>Migration Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMigrationRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double migrationRate = MIGRATION_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIGRATION_EDGE_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMigrationRate() {
+		return migrationRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMigrationRate(double newMigrationRate) {
+		double oldMigrationRate = migrationRate;
+		migrationRate = newMigrationRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE, oldMigrationRate, migrationRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE:
+				return getMigrationRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE:
+				setMigrationRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE:
+				setMigrationRate(MIGRATION_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE:
+				return migrationRate != MIGRATION_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (migrationRate: "); //$NON-NLS-1$
+		result.append(migrationRate);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**
+	 * Resets the value for this migration edge to the default value. Is this
+	 * really the correct behavior? do we really want to go to the model start
+	 * state?
+	 */
+	@Override
+	public void reset() {
+		setMigrationRate(MIGRATION_RATE_EDEFAULT);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+		retValue = retValue && !Double.isNaN( getMigrationRate());
+		assert retValue : "Migration rate is NaN";
+		
+		retValue = retValue && !Double.isInfinite( getMigrationRate());
+		assert retValue: "Migration rate is Infinite";
+		
+		return retValue;
+	} // sane
+
+	
+} //MigrationEdgeLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeImpl.java
new file mode 100644
index 0000000..5c35f5f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeImpl.java
@@ -0,0 +1,90 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MixingEdge;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mixing Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class MixingEdgeImpl extends EdgeImpl implements MixingEdge {
+
+	/**
+	 * This is used to generate unique URI's for each MixingEdge generated
+	 */
+	static int mixingEdgeCounter = 0;
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected MixingEdgeImpl() {
+		super();
+				
+		//set the URI
+		setURI(STEMURI.createURI(URI_TYPE_MIXING_EDGE_SEGMENT + "/"
+				+ Integer.toString(mixingEdgeCounter++)));
+		
+		//Make a label
+		setLabel(EdgesFactory.eINSTANCE.createMixingEdgeLabel());				
+				
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIXING_EDGE;
+	}
+	
+	
+	/***
+	 * Override setter for setDirected so that it will blow up if anyone tries to make it directed (when assertions are on).
+	 */
+	@Override
+	public void setDirected(boolean isDirected) {
+		assert(isDirected==false);
+		super.setDirected(isDirected);
+	}
+	
+	/**Overrides methods from EdgeImpl correctly
+	 * for correct return types*/
+	@Override
+	public MixingEdgeLabel getLabel() {
+		return (MixingEdgeLabel)super.getLabel();
+	}
+	public void setLabel(MixingEdgeLabel lbl) {
+		//just deal with making sure the URI labeling scheme is correct here.
+		lbl.setURIOfIdentifiableToBeLabeled(this.getURI());
+		super.setLabel(lbl);
+	}
+
+} //MixingEdgeImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelImpl.java
new file mode 100644
index 0000000..cfd192c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelImpl.java
@@ -0,0 +1,71 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.impl.EdgeLabelImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mixing Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class MixingEdgeLabelImpl extends EdgeLabelImpl implements MixingEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected MixingEdgeLabelImpl() {
+		super();
+		
+		//set the MixingEdgeLabel
+		setCurrentValue(EdgesFactory.eINSTANCE.createMixingEdgeLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIXING_EDGE_LABEL;
+	}
+	
+	/**
+	 * Methods need to make this return edge labels properly
+	 */
+	@Override
+	public MixingEdgeLabelValue getCurrentValue() {
+		return (MixingEdgeLabelValue)super.getCurrentValue();
+	}
+	public void setCurrentValue(MixingEdgeLabelValue val) {
+		super.setCurrentValue(val);
+	}
+
+} //MixingEdgeLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelValueImpl.java
new file mode 100644
index 0000000..5b7670c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/impl/MixingEdgeLabelValueImpl.java
@@ -0,0 +1,182 @@
+package org.eclipse.stem.definitions.edges.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Mixing Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl#getMixingRate <em>Mixing Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MixingEdgeLabelValueImpl extends LabelValueImpl implements MixingEdgeLabelValue {
+	/**
+	 * The default value of the '{@link #getMixingRate() <em>Mixing Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMixingRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MIXING_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMixingRate() <em>Mixing Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMixingRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double mixingRate = MIXING_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return EdgesPackage.Literals.MIXING_EDGE_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMixingRate() {
+		return mixingRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMixingRate(double newMixingRate) {
+		double oldMixingRate = mixingRate;
+		mixingRate = newMixingRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE, oldMixingRate, mixingRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE:
+				return getMixingRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE:
+				setMixingRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE:
+				setMixingRate(MIXING_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE:
+				return mixingRate != MIXING_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (mixingRate: "); //$NON-NLS-1$
+		result.append(mixingRate);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**
+	 * for reset set the rate to the default rate.
+	 */
+	@Override
+	public void reset() {
+		setMixingRate(MIXING_RATE_EDEFAULT);	
+	}
+	
+
+} //MixingEdgeLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesActionBarContributor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesActionBarContributor.java
new file mode 100644
index 0000000..36cce1c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesActionBarContributor.java
@@ -0,0 +1,436 @@
+package org.eclipse.stem.definitions.edges.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Edges model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("edges-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("edges-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_EdgesEditor_menu"), "org.eclipse.stem.definitions.edgesMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesEditor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesEditor.java
new file mode 100644
index 0000000..479d275
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/presentation/EdgesEditor.java
@@ -0,0 +1,1571 @@
+package org.eclipse.stem.definitions.edges.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.definitions.edges.provider.EdgesItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+import org.eclipse.stem.definitions.nodes.provider.NodesItemProviderAdapterFactory;
+
+import org.eclipse.stem.definitions.types.provider.TypesItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Edges model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(EdgesEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(EdgesEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == EdgesEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(EdgesEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == EdgesEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(EdgesEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						DefinitionsEditPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EdgesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new NodesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TypesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						EdgesEditor.this.setSelectionToViewer(selection);
+						EdgesEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/DefinitionsEditPlugin.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/DefinitionsEditPlugin.java
new file mode 100644
index 0000000..4993d7b
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/DefinitionsEditPlugin.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the central singleton for the Definitions editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DefinitionsEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final DefinitionsEditPlugin INSTANCE = new DefinitionsEditPlugin();
+	
+	/**
+	 * 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 DefinitionsEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				CoreEditPlugin.INSTANCE,
+				EcoreEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/EdgesItemProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/EdgesItemProviderAdapterFactory.java
new file mode 100644
index 0000000..6845be8
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/EdgesItemProviderAdapterFactory.java
@@ -0,0 +1,328 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.definitions.edges.util.EdgesAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesItemProviderAdapterFactory extends EdgesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MigrationEdge} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeItemProvider migrationEdgeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdge}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMigrationEdgeAdapter() {
+		if (migrationEdgeItemProvider == null) {
+			migrationEdgeItemProvider = new MigrationEdgeItemProvider(this);
+		}
+
+		return migrationEdgeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabelItemProvider migrationEdgeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMigrationEdgeLabelAdapter() {
+		if (migrationEdgeLabelItemProvider == null) {
+			migrationEdgeLabelItemProvider = new MigrationEdgeLabelItemProvider(this);
+		}
+
+		return migrationEdgeLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabelValueItemProvider migrationEdgeLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMigrationEdgeLabelValueAdapter() {
+		if (migrationEdgeLabelValueItemProvider == null) {
+			migrationEdgeLabelValueItemProvider = new MigrationEdgeLabelValueItemProvider(this);
+		}
+
+		return migrationEdgeLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MixingEdge} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeItemProvider mixingEdgeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdge}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMixingEdgeAdapter() {
+		if (mixingEdgeItemProvider == null) {
+			mixingEdgeItemProvider = new MixingEdgeItemProvider(this);
+		}
+
+		return mixingEdgeItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MixingEdgeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabelItemProvider mixingEdgeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdgeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMixingEdgeLabelAdapter() {
+		if (mixingEdgeLabelItemProvider == null) {
+			mixingEdgeLabelItemProvider = new MixingEdgeLabelItemProvider(this);
+		}
+
+		return mixingEdgeLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabelValueItemProvider mixingEdgeLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createMixingEdgeLabelValueAdapter() {
+		if (mixingEdgeLabelValueItemProvider == null) {
+			mixingEdgeLabelValueItemProvider = new MixingEdgeLabelValueItemProvider(this);
+		}
+
+		return mixingEdgeLabelValueItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (migrationEdgeItemProvider != null) migrationEdgeItemProvider.dispose();
+		if (migrationEdgeLabelItemProvider != null) migrationEdgeLabelItemProvider.dispose();
+		if (migrationEdgeLabelValueItemProvider != null) migrationEdgeLabelValueItemProvider.dispose();
+		if (mixingEdgeItemProvider != null) mixingEdgeItemProvider.dispose();
+		if (mixingEdgeLabelItemProvider != null) mixingEdgeLabelItemProvider.dispose();
+		if (mixingEdgeLabelValueItemProvider != null) mixingEdgeLabelValueItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeItemProvider.java
new file mode 100644
index 0000000..d2bc076
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeItemProvider.java
@@ -0,0 +1,160 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.provider.EdgeItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdge} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationEdgeItemProvider
+	extends EdgeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((MigrationEdge)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_MigrationEdge_type") : //$NON-NLS-1$
+			getString("_UI_MigrationEdge_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 EdgesFactory.eINSTANCE.createMigrationEdgeLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 EdgesFactory.eINSTANCE.createMixingEdgeLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createCommonBorderRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createRelativePhysicalRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createTransportRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createRoadTransportRelationshipLabel()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelItemProvider.java
new file mode 100644
index 0000000..7c43fff
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelItemProvider.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.provider.EdgeLabelItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationEdgeLabelItemProvider
+	extends EdgeLabelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((MigrationEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_MigrationEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_MigrationEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelValueItemProvider.java
new file mode 100644
index 0000000..87a9177
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MigrationEdgeLabelValueItemProvider.java
@@ -0,0 +1,154 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MigrationEdgeLabelValueItemProvider
+	extends LabelValueItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addMigrationRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Migration Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMigrationRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_MigrationEdgeLabelValue_migrationRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_MigrationEdgeLabelValue_migrationRate_feature", "_UI_MigrationEdgeLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 EdgesPackage.Literals.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		MigrationEdgeLabelValue migrationEdgeLabelValue = (MigrationEdgeLabelValue)object;
+		return getString("_UI_MigrationEdgeLabelValue_type") + " " + migrationEdgeLabelValue.getMigrationRate(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(MigrationEdgeLabelValue.class)) {
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE__MIGRATION_RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeItemProvider.java
new file mode 100644
index 0000000..4266362
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeItemProvider.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.provider.EdgeItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MixingEdge;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdge} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MixingEdgeItemProvider
+	extends EdgeItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((MixingEdge)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_MixingEdge_type") : //$NON-NLS-1$
+			getString("_UI_MixingEdge_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 EdgesFactory.eINSTANCE.createMigrationEdgeLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 EdgesFactory.eINSTANCE.createMixingEdgeLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createCommonBorderRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createRelativePhysicalRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createTransportRelationshipLabel()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(GraphPackage.Literals.EDGE__LABEL,
+				 LabelsFactory.eINSTANCE.createRoadTransportRelationshipLabel()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelItemProvider.java
new file mode 100644
index 0000000..5136a8e
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelItemProvider.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.provider.EdgeLabelItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MixingEdgeLabelItemProvider
+	extends EdgeLabelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((MixingEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_MixingEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_MixingEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelValueItemProvider.java
new file mode 100644
index 0000000..04cdea0
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/provider/MixingEdgeLabelValueItemProvider.java
@@ -0,0 +1,153 @@
+package org.eclipse.stem.definitions.edges.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MixingEdgeLabelValueItemProvider
+	extends LabelValueItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addMixingRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Mixing Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMixingRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_MixingEdgeLabelValue_mixingRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_MixingEdgeLabelValue_mixingRate_feature", "_UI_MixingEdgeLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 EdgesPackage.Literals.MIXING_EDGE_LABEL_VALUE__MIXING_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		MixingEdgeLabelValue mixingEdgeLabelValue = (MixingEdgeLabelValue)object;
+		return getString("_UI_MixingEdgeLabelValue_type") + " " + mixingEdgeLabelValue.getMixingRate(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(MixingEdgeLabelValue.class)) {
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE__MIXING_RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesAdapterFactory.java
new file mode 100644
index 0000000..11736be
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesAdapterFactory.java
@@ -0,0 +1,372 @@
+package org.eclipse.stem.definitions.edges.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.edges.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.edges.EdgesPackage
+ * @generated
+ */
+public class EdgesAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static EdgesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = EdgesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EdgesSwitch<Adapter> modelSwitch =
+		new EdgesSwitch<Adapter>() {
+			@Override
+			public Adapter caseMigrationEdge(MigrationEdge object) {
+				return createMigrationEdgeAdapter();
+			}
+			@Override
+			public Adapter caseMigrationEdgeLabel(MigrationEdgeLabel object) {
+				return createMigrationEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseMigrationEdgeLabelValue(MigrationEdgeLabelValue object) {
+				return createMigrationEdgeLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseMixingEdge(MixingEdge object) {
+				return createMixingEdgeAdapter();
+			}
+			@Override
+			public Adapter caseMixingEdgeLabel(MixingEdgeLabel object) {
+				return createMixingEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseMixingEdgeLabelValue(MixingEdgeLabelValue object) {
+				return createMixingEdgeLabelValueAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseEdge(Edge object) {
+				return createEdgeAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseEdgeLabel(EdgeLabel object) {
+				return createEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MigrationEdge <em>Migration Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdge
+	 * @generated
+	 */
+	public Adapter createMigrationEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel <em>Migration Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabel
+	 * @generated
+	 */
+	public Adapter createMigrationEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue <em>Migration Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue
+	 * @generated
+	 */
+	public Adapter createMigrationEdgeLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MixingEdge <em>Mixing Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdge
+	 * @generated
+	 */
+	public Adapter createMixingEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabel <em>Mixing Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdgeLabel
+	 * @generated
+	 */
+	public Adapter createMixingEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MixingEdgeLabelValue <em>Mixing Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MixingEdgeLabelValue
+	 * @generated
+	 */
+	public Adapter createMixingEdgeLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Edge <em>Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Edge
+	 * @generated
+	 */
+	public Adapter createEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	public Adapter createEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //EdgesAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesSwitch.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesSwitch.java
new file mode 100644
index 0000000..4f65b6b
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/edges/util/EdgesSwitch.java
@@ -0,0 +1,389 @@
+package org.eclipse.stem.definitions.edges.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.edges.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.edges.EdgesPackage
+ * @generated
+ */
+public class EdgesSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static EdgesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesSwitch() {
+		if (modelPackage == null) {
+			modelPackage = EdgesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case EdgesPackage.MIGRATION_EDGE: {
+				MigrationEdge migrationEdge = (MigrationEdge)theEObject;
+				T1 result = caseMigrationEdge(migrationEdge);
+				if (result == null) result = caseEdge(migrationEdge);
+				if (result == null) result = caseIdentifiable(migrationEdge);
+				if (result == null) result = caseModifiable(migrationEdge);
+				if (result == null) result = caseComparable(migrationEdge);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case EdgesPackage.MIGRATION_EDGE_LABEL: {
+				MigrationEdgeLabel migrationEdgeLabel = (MigrationEdgeLabel)theEObject;
+				T1 result = caseMigrationEdgeLabel(migrationEdgeLabel);
+				if (result == null) result = caseEdgeLabel(migrationEdgeLabel);
+				if (result == null) result = caseLabel(migrationEdgeLabel);
+				if (result == null) result = caseIdentifiable(migrationEdgeLabel);
+				if (result == null) result = caseComparable(migrationEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case EdgesPackage.MIGRATION_EDGE_LABEL_VALUE: {
+				MigrationEdgeLabelValue migrationEdgeLabelValue = (MigrationEdgeLabelValue)theEObject;
+				T1 result = caseMigrationEdgeLabelValue(migrationEdgeLabelValue);
+				if (result == null) result = caseLabelValue(migrationEdgeLabelValue);
+				if (result == null) result = caseSanityChecker(migrationEdgeLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case EdgesPackage.MIXING_EDGE: {
+				MixingEdge mixingEdge = (MixingEdge)theEObject;
+				T1 result = caseMixingEdge(mixingEdge);
+				if (result == null) result = caseEdge(mixingEdge);
+				if (result == null) result = caseIdentifiable(mixingEdge);
+				if (result == null) result = caseModifiable(mixingEdge);
+				if (result == null) result = caseComparable(mixingEdge);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case EdgesPackage.MIXING_EDGE_LABEL: {
+				MixingEdgeLabel mixingEdgeLabel = (MixingEdgeLabel)theEObject;
+				T1 result = caseMixingEdgeLabel(mixingEdgeLabel);
+				if (result == null) result = caseEdgeLabel(mixingEdgeLabel);
+				if (result == null) result = caseLabel(mixingEdgeLabel);
+				if (result == null) result = caseIdentifiable(mixingEdgeLabel);
+				if (result == null) result = caseComparable(mixingEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case EdgesPackage.MIXING_EDGE_LABEL_VALUE: {
+				MixingEdgeLabelValue mixingEdgeLabelValue = (MixingEdgeLabelValue)theEObject;
+				T1 result = caseMixingEdgeLabelValue(mixingEdgeLabelValue);
+				if (result == null) result = caseLabelValue(mixingEdgeLabelValue);
+				if (result == null) result = caseSanityChecker(mixingEdgeLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Migration Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Migration Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMigrationEdge(MigrationEdge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Migration Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Migration Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMigrationEdgeLabel(MigrationEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Migration Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Migration Edge Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMigrationEdgeLabelValue(MigrationEdgeLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Mixing Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Mixing Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMixingEdge(MixingEdge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Mixing Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Mixing Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMixingEdgeLabel(MixingEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Mixing Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Mixing Edge Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMixingEdgeLabelValue(MixingEdgeLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdge(Edge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeLabel(EdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //EdgesSwitch
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabel.java
new file mode 100644
index 0000000..33d3e0a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabel.java
@@ -0,0 +1,45 @@
+// AreaLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+
+/**
+ * This interface defines a class in an EMF model for AreaLabel.
+ * 
+ * @model
+ */
+public interface AreaLabel extends StaticNodeLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * area label type URI.
+	 */
+	String URI_TYPE_AREA_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT + "/area";
+
+	/**
+	 * This is the type URI for area labels
+	 */
+	URI URI_TYPE_AREA_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_AREA_LABEL_SEGMENT);
+
+	/**
+	 * @return the current area value
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	AreaLabelValue getCurrentAreaValue();
+
+} // AreaLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabelValue.java
new file mode 100644
index 0000000..bd9ebe6
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/AreaLabelValue.java
@@ -0,0 +1,59 @@
+// AreaLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This interface defines a class in an EMF model for a Area Label Value.
+ * 
+ * @model
+ */
+public interface AreaLabelValue extends LabelValue {
+
+	/**
+	 * @return the area in square Kilometers
+	 * @model
+	 */
+	double getArea();
+	
+	/**
+	 * @return the area in square Kilometers
+	 * @model
+	 */
+	double getAverageExtent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.AreaLabelValue#getAverageExtent <em>Average Extent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * The Average Extent is just the square root of the area.
+	 * It is necessary to retain this value as it is quite expenseive to commute.
+	 * Average extent can be compared, for example, to an average commute distance.
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Average Extent</em>' attribute.
+	 * @see #getAverageExtent()
+	 * @generated
+	 */
+	void setAverageExtent(double value);
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.AreaLabelValue#getArea <em>Area</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Area</em>' attribute.
+	 * @see #getArea()
+	 * @generated
+	 */
+	void setArea(double value);
+
+} // AreaLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabel.java
new file mode 100644
index 0000000..d3a4f1f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabel.java
@@ -0,0 +1,31 @@
+// CommonBorderRelationshipLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * This interface is an EMF definition of a class that represents a label for an
+ * Edge that represents a the relationship of two nodes sharing a common border
+ * 
+ * @model
+ */
+public interface CommonBorderRelationshipLabel extends
+		PhysicalRelationshipLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * relative physical relationship label type URI.
+	 */
+	String URI_TYPE_COMMON_BORDER_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_PHYSICAL_RELATIONSHIP_LABEL_SEGMENT
+			+ "/border";
+
+} // CommonBorderRelationshipLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabelValue.java
new file mode 100644
index 0000000..726e534
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/CommonBorderRelationshipLabelValue.java
@@ -0,0 +1,40 @@
+// CommonBorderRelationshipLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for a Common border
+ * Relationship Label Value.
+ * 
+ * @model
+ */
+public interface CommonBorderRelationshipLabelValue extends
+		PhysicalRelationshipLabelValue{
+
+	/**
+	 * @return the length of the common border in kilometers
+	 * @model
+	 */
+	double getBorderLength();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue#getBorderLength <em>Border Length</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Border Length</em>' attribute.
+	 * @see #getBorderLength()
+	 * @generated
+	 */
+	void setBorderLength(double value);
+
+} // CommonBorderRelationshipLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsFactory.java
new file mode 100644
index 0000000..5484e2c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsFactory.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.labels.LabelsPackage
+ * @generated
+ */
+public interface LabelsFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LabelsFactory eINSTANCE = org.eclipse.stem.definitions.labels.impl.LabelsFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Area Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Area Label</em>'.
+	 * @generated
+	 */
+	AreaLabel createAreaLabel();
+
+	/**
+	 * Returns a new object of class '<em>Area Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Area Label Value</em>'.
+	 * @generated
+	 */
+	AreaLabelValue createAreaLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Common Border Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Common Border Relationship Label</em>'.
+	 * @generated
+	 */
+	CommonBorderRelationshipLabel createCommonBorderRelationshipLabel();
+
+	/**
+	 * Returns a new object of class '<em>Common Border Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Common Border Relationship Label Value</em>'.
+	 * @generated
+	 */
+	CommonBorderRelationshipLabelValue createCommonBorderRelationshipLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Population Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Population Label</em>'.
+	 * @generated
+	 */
+	PopulationLabel createPopulationLabel();
+
+	/**
+	 * Returns a new object of class '<em>Population Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Population Label Value</em>'.
+	 * @generated
+	 */
+	PopulationLabelValue createPopulationLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Relative Physical Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Relative Physical Relationship Label</em>'.
+	 * @generated
+	 */
+	RelativePhysicalRelationshipLabel createRelativePhysicalRelationshipLabel();
+
+	/**
+	 * Returns a new object of class '<em>Relative Physical Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Relative Physical Relationship Label Value</em>'.
+	 * @generated
+	 */
+	RelativePhysicalRelationshipLabelValue createRelativePhysicalRelationshipLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Transport Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Transport Relationship Label</em>'.
+	 * @generated
+	 */
+	TransportRelationshipLabel createTransportRelationshipLabel();
+
+	/**
+	 * Returns a new object of class '<em>Transport Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Transport Relationship Label Value</em>'.
+	 * @generated
+	 */
+	TransportRelationshipLabelValue createTransportRelationshipLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Physical Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Physical Relationship Label Value</em>'.
+	 * @generated
+	 */
+	PhysicalRelationshipLabelValue createPhysicalRelationshipLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Road Transport Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Road Transport Relationship Label</em>'.
+	 * @generated
+	 */
+	RoadTransportRelationshipLabel createRoadTransportRelationshipLabel();
+
+	/**
+	 * Returns a new object of class '<em>Road Transport Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Road Transport Relationship Label Value</em>'.
+	 * @generated
+	 */
+	RoadTransportRelationshipLabelValue createRoadTransportRelationshipLabelValue();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	LabelsPackage getLabelsPackage();
+
+} //LabelsFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsPackage.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsPackage.java
new file mode 100644
index 0000000..b98ef87
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/LabelsPackage.java
@@ -0,0 +1,1953 @@
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.labels.LabelsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface LabelsPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "labels";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/definitions/labels.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.definitions.labels";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LabelsPackage eINSTANCE = org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.AreaLabelImpl <em>Area Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.AreaLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getAreaLabel()
+	 * @generated
+	 */
+	int AREA_LABEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__URI = GraphPackage.STATIC_NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__TYPE_URI = GraphPackage.STATIC_NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__DUBLIN_CORE = GraphPackage.STATIC_NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.STATIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__CURRENT_VALUE = GraphPackage.STATIC_NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__IDENTIFIABLE = GraphPackage.STATIC_NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__NODE = GraphPackage.STATIC_NODE_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Current Area Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL__CURRENT_AREA_VALUE = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Area Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL_FEATURE_COUNT = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl <em>Area Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getAreaLabelValue()
+	 * @generated
+	 */
+	int AREA_LABEL_VALUE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL_VALUE__AREA = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Average Extent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL_VALUE__AVERAGE_EXTENT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Area Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AREA_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelImpl <em>Physical Relationship Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPhysicalRelationshipLabel()
+	 * @generated
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__URI = GraphPackage.STATIC_EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__TYPE_URI = GraphPackage.STATIC_EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__DUBLIN_CORE = GraphPackage.STATIC_EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.STATIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__CURRENT_VALUE = GraphPackage.STATIC_EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__IDENTIFIABLE = GraphPackage.STATIC_EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL__EDGE = GraphPackage.STATIC_EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Physical Relationship Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT = GraphPackage.STATIC_EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelImpl <em>Relative Physical Relationship Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationshipLabel()
+	 * @generated
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL = 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl <em>Common Border Relationship Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getCommonBorderRelationshipLabel()
+	 * @generated
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__URI = PHYSICAL_RELATIONSHIP_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__TYPE_URI = PHYSICAL_RELATIONSHIP_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__DUBLIN_CORE = PHYSICAL_RELATIONSHIP_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = PHYSICAL_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__CURRENT_VALUE = PHYSICAL_RELATIONSHIP_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__IDENTIFIABLE = PHYSICAL_RELATIONSHIP_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL__EDGE = PHYSICAL_RELATIONSHIP_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Common Border Relationship Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL_FEATURE_COUNT = PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelValueImpl <em>Physical Relationship Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPhysicalRelationshipLabelValue()
+	 * @generated
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL_VALUE = 11;
+
+	/**
+	 * The number of structural features of the '<em>Physical Relationship Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl <em>Relative Physical Relationship Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationshipLabelValue()
+	 * @generated
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE = 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelValueImpl <em>Common Border Relationship Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getCommonBorderRelationshipLabelValue()
+	 * @generated
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL_VALUE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Border Length</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Common Border Relationship Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMMON_BORDER_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl <em>Population Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPopulationLabel()
+	 * @generated
+	 */
+	int POPULATION_LABEL = 5;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__URI = GraphPackage.STATIC_NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__TYPE_URI = GraphPackage.STATIC_NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__DUBLIN_CORE = GraphPackage.STATIC_NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.STATIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__CURRENT_VALUE = GraphPackage.STATIC_NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__IDENTIFIABLE = GraphPackage.STATIC_NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__NODE = GraphPackage.STATIC_NODE_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__POPULATION_IDENTIFIER = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__NAME = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Current Population Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__CURRENT_POPULATION_VALUE = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Populated Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__POPULATED_AREA = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Valid Year</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL__VALID_YEAR = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Population Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL_FEATURE_COUNT = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl <em>Population Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPopulationLabelValue()
+	 * @generated
+	 */
+	int POPULATION_LABEL_VALUE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL_VALUE__COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Population Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POPULATION_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__URI = PHYSICAL_RELATIONSHIP_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__TYPE_URI = PHYSICAL_RELATIONSHIP_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__DUBLIN_CORE = PHYSICAL_RELATIONSHIP_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = PHYSICAL_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_VALUE = PHYSICAL_RELATIONSHIP_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__IDENTIFIABLE = PHYSICAL_RELATIONSHIP_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__EDGE = PHYSICAL_RELATIONSHIP_LABEL__EDGE;
+
+	/**
+	 * The feature id for the '<em><b>Current Relationship</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP = PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Relative Physical Relationship Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT = PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Adjacent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Relationship</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Relative Physical Relationship Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl <em>Transport Relationship Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportRelationshipLabel()
+	 * @generated
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL = 9;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__URI = GraphPackage.DYNAMIC_EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__TYPE_URI = GraphPackage.DYNAMIC_EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__DUBLIN_CORE = GraphPackage.DYNAMIC_EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__CURRENT_VALUE = GraphPackage.DYNAMIC_EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__IDENTIFIABLE = GraphPackage.DYNAMIC_EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_EDGE_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__NEXT_VALUE = GraphPackage.DYNAMIC_EDGE_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__DECORATOR = GraphPackage.DYNAMIC_EDGE_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__EDGE = GraphPackage.DYNAMIC_EDGE_LABEL__EDGE;
+
+	/**
+	 * The feature id for the '<em><b>Transport Mode</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Transport Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Current Transport Relationship Label Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Rate Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Departure Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Maximum Departure Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__CAPACITY = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Maximum Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 8;
+
+	/**
+	 * The feature id for the '<em><b>Transit Time</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 9;
+
+	/**
+	 * The feature id for the '<em><b>Start Up Delay</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 10;
+
+	/**
+	 * The number of structural features of the '<em>Transport Relationship Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL_FEATURE_COUNT = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelValueImpl <em>Transport Relationship Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL_VALUE = 10;
+
+	/**
+	 * The feature id for the '<em><b>Available Departure Capacity Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Transport Relationship Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelImpl <em>Road Transport Relationship Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRoadTransportRelationshipLabel()
+	 * @generated
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL = 12;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__URI = PHYSICAL_RELATIONSHIP_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__TYPE_URI = PHYSICAL_RELATIONSHIP_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__DUBLIN_CORE = PHYSICAL_RELATIONSHIP_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = PHYSICAL_RELATIONSHIP_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__CURRENT_VALUE = PHYSICAL_RELATIONSHIP_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__IDENTIFIABLE = PHYSICAL_RELATIONSHIP_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL__EDGE = PHYSICAL_RELATIONSHIP_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Road Transport Relationship Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_FEATURE_COUNT = PHYSICAL_RELATIONSHIP_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl <em>Road Transport Relationship Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRoadTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE = 13;
+
+	/**
+	 * The feature id for the '<em><b>Road Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Road Class</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Number Crossings</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Road Transport Relationship Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT = PHYSICAL_RELATIONSHIP_LABEL_VALUE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationship <em>Relative Physical Relationship</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationship
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationship()
+	 * @generated
+	 */
+	int RELATIVE_PHYSICAL_RELATIONSHIP = 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.labels.TransportMode <em>Transport Mode</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.TransportMode
+	 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportMode()
+	 * @generated
+	 */
+	int TRANSPORT_MODE = 15;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.AreaLabel <em>Area Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Area Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabel
+	 * @generated
+	 */
+	EClass getAreaLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.labels.AreaLabel#getCurrentAreaValue <em>Current Area Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Current Area Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabel#getCurrentAreaValue()
+	 * @see #getAreaLabel()
+	 * @generated
+	 */
+	EReference getAreaLabel_CurrentAreaValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.AreaLabelValue <em>Area Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Area Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabelValue
+	 * @generated
+	 */
+	EClass getAreaLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.AreaLabelValue#getArea <em>Area</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Area</em>'.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabelValue#getArea()
+	 * @see #getAreaLabelValue()
+	 * @generated
+	 */
+	EAttribute getAreaLabelValue_Area();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.AreaLabelValue#getAverageExtent <em>Average Extent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Average Extent</em>'.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabelValue#getAverageExtent()
+	 * @see #getAreaLabelValue()
+	 * @generated
+	 */
+	EAttribute getAreaLabelValue_AverageExtent();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel <em>Common Border Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Common Border Relationship Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel
+	 * @generated
+	 */
+	EClass getCommonBorderRelationshipLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue <em>Common Border Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Common Border Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue
+	 * @generated
+	 */
+	EClass getCommonBorderRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue#getBorderLength <em>Border Length</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Border Length</em>'.
+	 * @see org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue#getBorderLength()
+	 * @see #getCommonBorderRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getCommonBorderRelationshipLabelValue_BorderLength();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel <em>Physical Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Physical Relationship Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel
+	 * @generated
+	 */
+	EClass getPhysicalRelationshipLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.PopulationLabel <em>Population Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Population Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel
+	 * @generated
+	 */
+	EClass getPopulationLabel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getPopulationIdentifier <em>Population Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Population Identifier</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getPopulationIdentifier()
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	EAttribute getPopulationLabel_PopulationIdentifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getName()
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	EAttribute getPopulationLabel_Name();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getCurrentPopulationValue <em>Current Population Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Current Population Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getCurrentPopulationValue()
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	EReference getPopulationLabel_CurrentPopulationValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getPopulatedArea <em>Populated Area</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Populated Area</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getPopulatedArea()
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	EAttribute getPopulationLabel_PopulatedArea();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getValidYear <em>Valid Year</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Valid Year</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getValidYear()
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	EAttribute getPopulationLabel_ValidYear();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.PopulationLabelValue <em>Population Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Population Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabelValue
+	 * @generated
+	 */
+	EClass getPopulationLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.PopulationLabelValue#getCount <em>Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Count</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabelValue#getCount()
+	 * @see #getPopulationLabelValue()
+	 * @generated
+	 */
+	EAttribute getPopulationLabelValue_Count();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel <em>Relative Physical Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relative Physical Relationship Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel
+	 * @generated
+	 */
+	EClass getRelativePhysicalRelationshipLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel#getCurrentRelationship <em>Current Relationship</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Current Relationship</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel#getCurrentRelationship()
+	 * @see #getRelativePhysicalRelationshipLabel()
+	 * @generated
+	 */
+	EReference getRelativePhysicalRelationshipLabel_CurrentRelationship();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue <em>Relative Physical Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Relative Physical Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue
+	 * @generated
+	 */
+	EClass getRelativePhysicalRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#isAdjacent <em>Adjacent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Adjacent</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#isAdjacent()
+	 * @see #getRelativePhysicalRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getRelativePhysicalRelationshipLabelValue_Adjacent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#getRelationship <em>Relationship</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Relationship</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#getRelationship()
+	 * @see #getRelativePhysicalRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getRelativePhysicalRelationshipLabelValue_Relationship();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel <em>Transport Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Transport Relationship Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel
+	 * @generated
+	 */
+	EClass getTransportRelationshipLabel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportMode <em>Transport Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transport Mode</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportMode()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_TransportMode();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getPopulationIdentifier <em>Population Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Population Identifier</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getPopulationIdentifier()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_PopulationIdentifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportIdentifier <em>Transport Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transport Identifier</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportIdentifier()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_TransportIdentifier();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCurrentTransportRelationshipLabelValue <em>Current Transport Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Current Transport Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCurrentTransportRelationshipLabelValue()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EReference getTransportRelationshipLabel_CurrentTransportRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getRateTimePeriod <em>Rate Time Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Rate Time Period</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getRateTimePeriod()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_RateTimePeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getDepartureCapacity <em>Departure Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Departure Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getDepartureCapacity()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_DepartureCapacity();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumDepartureCapacity <em>Maximum Departure Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maximum Departure Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumDepartureCapacity()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_MaximumDepartureCapacity();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCapacity <em>Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCapacity()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_Capacity();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumCapacity <em>Maximum Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Maximum Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumCapacity()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_MaximumCapacity();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransitTime <em>Transit Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transit Time</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransitTime()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_TransitTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getStartUpDelay <em>Start Up Delay</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Start Up Delay</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getStartUpDelay()
+	 * @see #getTransportRelationshipLabel()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabel_StartUpDelay();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue <em>Transport Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Transport Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue
+	 * @generated
+	 */
+	EClass getTransportRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue#getAvailableDepartureCapacityProportion <em>Available Departure Capacity Proportion</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Available Departure Capacity Proportion</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue#getAvailableDepartureCapacityProportion()
+	 * @see #getTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getTransportRelationshipLabelValue_AvailableDepartureCapacityProportion();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue <em>Physical Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Physical Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue
+	 * @generated
+	 */
+	EClass getPhysicalRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel <em>Road Transport Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Road Transport Relationship Label</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel
+	 * @generated
+	 */
+	EClass getRoadTransportRelationshipLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue <em>Road Transport Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Road Transport Relationship Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue
+	 * @generated
+	 */
+	EClass getRoadTransportRelationshipLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadName <em>Road Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Road Name</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadName()
+	 * @see #getRoadTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getRoadTransportRelationshipLabelValue_RoadName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadClass <em>Road Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Road Class</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadClass()
+	 * @see #getRoadTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getRoadTransportRelationshipLabelValue_RoadClass();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getNumberCrossings <em>Number Crossings</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Number Crossings</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getNumberCrossings()
+	 * @see #getRoadTransportRelationshipLabelValue()
+	 * @generated
+	 */
+	EAttribute getRoadTransportRelationshipLabelValue_NumberCrossings();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationship <em>Relative Physical Relationship</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Relative Physical Relationship</em>'.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationship
+	 * @generated
+	 */
+	EEnum getRelativePhysicalRelationship();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.stem.definitions.labels.TransportMode <em>Transport Mode</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Transport Mode</em>'.
+	 * @see org.eclipse.stem.definitions.labels.TransportMode
+	 * @generated
+	 */
+	EEnum getTransportMode();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	LabelsFactory getLabelsFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.AreaLabelImpl <em>Area Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.AreaLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getAreaLabel()
+		 * @generated
+		 */
+		EClass AREA_LABEL = eINSTANCE.getAreaLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Area Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference AREA_LABEL__CURRENT_AREA_VALUE = eINSTANCE.getAreaLabel_CurrentAreaValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl <em>Area Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getAreaLabelValue()
+		 * @generated
+		 */
+		EClass AREA_LABEL_VALUE = eINSTANCE.getAreaLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Area</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute AREA_LABEL_VALUE__AREA = eINSTANCE.getAreaLabelValue_Area();
+
+		/**
+		 * The meta object literal for the '<em><b>Average Extent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute AREA_LABEL_VALUE__AVERAGE_EXTENT = eINSTANCE.getAreaLabelValue_AverageExtent();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl <em>Common Border Relationship Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getCommonBorderRelationshipLabel()
+		 * @generated
+		 */
+		EClass COMMON_BORDER_RELATIONSHIP_LABEL = eINSTANCE.getCommonBorderRelationshipLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelValueImpl <em>Common Border Relationship Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getCommonBorderRelationshipLabelValue()
+		 * @generated
+		 */
+		EClass COMMON_BORDER_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getCommonBorderRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Border Length</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH = eINSTANCE.getCommonBorderRelationshipLabelValue_BorderLength();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelImpl <em>Physical Relationship Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPhysicalRelationshipLabel()
+		 * @generated
+		 */
+		EClass PHYSICAL_RELATIONSHIP_LABEL = eINSTANCE.getPhysicalRelationshipLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl <em>Population Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPopulationLabel()
+		 * @generated
+		 */
+		EClass POPULATION_LABEL = eINSTANCE.getPopulationLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POPULATION_LABEL__POPULATION_IDENTIFIER = eINSTANCE.getPopulationLabel_PopulationIdentifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POPULATION_LABEL__NAME = eINSTANCE.getPopulationLabel_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Population Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference POPULATION_LABEL__CURRENT_POPULATION_VALUE = eINSTANCE.getPopulationLabel_CurrentPopulationValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Populated Area</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POPULATION_LABEL__POPULATED_AREA = eINSTANCE.getPopulationLabel_PopulatedArea();
+
+		/**
+		 * The meta object literal for the '<em><b>Valid Year</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POPULATION_LABEL__VALID_YEAR = eINSTANCE.getPopulationLabel_ValidYear();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl <em>Population Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPopulationLabelValue()
+		 * @generated
+		 */
+		EClass POPULATION_LABEL_VALUE = eINSTANCE.getPopulationLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute POPULATION_LABEL_VALUE__COUNT = eINSTANCE.getPopulationLabelValue_Count();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelImpl <em>Relative Physical Relationship Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationshipLabel()
+		 * @generated
+		 */
+		EClass RELATIVE_PHYSICAL_RELATIONSHIP_LABEL = eINSTANCE.getRelativePhysicalRelationshipLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Relationship</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP = eINSTANCE.getRelativePhysicalRelationshipLabel_CurrentRelationship();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl <em>Relative Physical Relationship Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationshipLabelValue()
+		 * @generated
+		 */
+		EClass RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getRelativePhysicalRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Adjacent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT = eINSTANCE.getRelativePhysicalRelationshipLabelValue_Adjacent();
+
+		/**
+		 * The meta object literal for the '<em><b>Relationship</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP = eINSTANCE.getRelativePhysicalRelationshipLabelValue_Relationship();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl <em>Transport Relationship Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportRelationshipLabel()
+		 * @generated
+		 */
+		EClass TRANSPORT_RELATIONSHIP_LABEL = eINSTANCE.getTransportRelationshipLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Transport Mode</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE = eINSTANCE.getTransportRelationshipLabel_TransportMode();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER = eINSTANCE.getTransportRelationshipLabel_PopulationIdentifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Transport Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER = eINSTANCE.getTransportRelationshipLabel_TransportIdentifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Current Transport Relationship Label Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getTransportRelationshipLabel_CurrentTransportRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Rate Time Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD = eINSTANCE.getTransportRelationshipLabel_RateTimePeriod();
+
+		/**
+		 * The meta object literal for the '<em><b>Departure Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY = eINSTANCE.getTransportRelationshipLabel_DepartureCapacity();
+
+		/**
+		 * The meta object literal for the '<em><b>Maximum Departure Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY = eINSTANCE.getTransportRelationshipLabel_MaximumDepartureCapacity();
+
+		/**
+		 * The meta object literal for the '<em><b>Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__CAPACITY = eINSTANCE.getTransportRelationshipLabel_Capacity();
+
+		/**
+		 * The meta object literal for the '<em><b>Maximum Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY = eINSTANCE.getTransportRelationshipLabel_MaximumCapacity();
+
+		/**
+		 * The meta object literal for the '<em><b>Transit Time</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME = eINSTANCE.getTransportRelationshipLabel_TransitTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Start Up Delay</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY = eINSTANCE.getTransportRelationshipLabel_StartUpDelay();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelValueImpl <em>Transport Relationship Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportRelationshipLabelValue()
+		 * @generated
+		 */
+		EClass TRANSPORT_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getTransportRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Available Departure Capacity Proportion</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION = eINSTANCE.getTransportRelationshipLabelValue_AvailableDepartureCapacityProportion();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelValueImpl <em>Physical Relationship Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.PhysicalRelationshipLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getPhysicalRelationshipLabelValue()
+		 * @generated
+		 */
+		EClass PHYSICAL_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getPhysicalRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelImpl <em>Road Transport Relationship Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRoadTransportRelationshipLabel()
+		 * @generated
+		 */
+		EClass ROAD_TRANSPORT_RELATIONSHIP_LABEL = eINSTANCE.getRoadTransportRelationshipLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl <em>Road Transport Relationship Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRoadTransportRelationshipLabelValue()
+		 * @generated
+		 */
+		EClass ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE = eINSTANCE.getRoadTransportRelationshipLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Road Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME = eINSTANCE.getRoadTransportRelationshipLabelValue_RoadName();
+
+		/**
+		 * The meta object literal for the '<em><b>Road Class</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS = eINSTANCE.getRoadTransportRelationshipLabelValue_RoadClass();
+
+		/**
+		 * The meta object literal for the '<em><b>Number Crossings</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS = eINSTANCE.getRoadTransportRelationshipLabelValue_NumberCrossings();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationship <em>Relative Physical Relationship</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationship
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getRelativePhysicalRelationship()
+		 * @generated
+		 */
+		EEnum RELATIVE_PHYSICAL_RELATIONSHIP = eINSTANCE.getRelativePhysicalRelationship();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.labels.TransportMode <em>Transport Mode</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.labels.TransportMode
+		 * @see org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl#getTransportMode()
+		 * @generated
+		 */
+		EEnum TRANSPORT_MODE = eINSTANCE.getTransportMode();
+
+	}
+
+} //LabelsPackage
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabel.java
new file mode 100644
index 0000000..0050091
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabel.java
@@ -0,0 +1,33 @@
+// PhysicalRelationshipLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+
+/**
+ * This interface is an EMF definition of a class that represents a label for an
+ * Edge that represents a physical relationship between two nodes.
+ * 
+ * @model abstract="true"
+ */
+public interface PhysicalRelationshipLabel extends StaticEdgeLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * relative physical relationship label type URI.
+	 */
+	String URI_TYPE_PHYSICAL_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT
+			+ "/physical";
+
+	// Nothing
+} // PhysicalRelationshipLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabelValue.java
new file mode 100644
index 0000000..c1cb150
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PhysicalRelationshipLabelValue.java
@@ -0,0 +1,24 @@
+// PhysicalRelationshipLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This class represents a physical relationship
+ * 
+ * @model
+ */
+public interface PhysicalRelationshipLabelValue extends LabelValue {
+	// Nothing
+} // PhysicalRelationshipLabelValue
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabel.java
new file mode 100644
index 0000000..cd7d698
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabel.java
@@ -0,0 +1,215 @@
+// PopulationLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+
+/**
+ * This interface defines a class in an EMF model for PopulationLabel.
+ * 
+ * @model
+ */
+public interface PopulationLabel extends StaticNodeLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * population label type URI.
+	 */
+	String URI_TYPE_POPULATION_LABEL_SEGMENT = URI_TYPE_LABEL_SEGMENT
+			+ "/population";
+
+	/**
+	 * This is the type URI for population labels
+	 */
+	URI URI_TYPE_POPULATION_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_POPULATION_LABEL_SEGMENT);
+
+	// These constants are identifiers of various "built-in" population types
+	/**
+	 * Generic human population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN = "human";
+
+	/**
+	 * Human male population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN_MALE = "human_male";
+
+	/**
+	 * Human adult male population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN_MALE_ADULT = "human_male_adult";
+
+	/**
+	 * Human child male population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN_MALE_CHILD = "human_male_child";
+
+	/**
+	 * Human adult female population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN_FEMALE_ADULT = "human_female_adult";
+
+	/**
+	 * Human child female population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String HUMAN_FEMALE_CHILD = "human_female_child";
+
+	/**
+	 * Generic bird population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String BIRD = "bird";
+
+	/**
+	 * Duck population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String BIRD_DUCK = "bird_duck";
+
+	/**
+	 * Chicken population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String BIRD_CHICKEN = "bird_chicken";
+
+	/**
+	 * Generic swine (pig) population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String SWINE = "swine";
+
+	/**
+	 * Generic mosquito population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String MOSQUITO = "mosquito";
+
+	/**
+	 * Anopheles mosquito population.
+	 * 
+	 * @see #getPopulationIdentifier()
+	 */
+	String MOSQUITO_ANOPHELES = "mosquito_anopheles";
+
+	/**
+	 * @return a string that is a non-NLS'd identifier of the population. e.g.
+	 *         "boys", "birds"
+	 * @model
+	 */
+	String getPopulationIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getPopulationIdentifier <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Population Identifier</em>' attribute.
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 */
+	void setPopulationIdentifier(String value);
+
+	/**
+	 * @return the NLS'd name of the population
+	 * @model
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * @return the current population value
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	PopulationLabelValue getCurrentPopulationValue();
+
+	/**
+	 * This value can be used to compute a more accurate population density for
+	 * cases where the area of a node might be quite large while the actual
+	 * distribution of population members is quite small. This would be the case
+	 * for instance if a node represented a large empty area with a few cities
+	 * and towns (e.g., The State of Wyoming in the United States). If this
+	 * optional value value is set, then it represents the smaller area that is
+	 * actually populated. Typically, this value would not be set and the
+	 * population density would be computed by using the actual area of the
+	 * region that this label labels.
+	 * 
+	 * @return the actual area that is populated (square kilometers).
+	 * @model default="0"
+	 */
+	double getPopulatedArea();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getPopulatedArea <em>Populated Area</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Populated Area</em>' attribute.
+	 * @see #getPopulatedArea()
+	 * @generated
+	 */
+	void setPopulatedArea(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Valid Year</b></em>' attribute.
+	 * The default value is <code>"2006"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Valid Year</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Valid Year</em>' attribute.
+	 * @see #setValidYear(int)
+	 * @see org.eclipse.stem.definitions.labels.LabelsPackage#getPopulationLabel_ValidYear()
+	 * @model default="2006"
+	 * @generated
+	 */
+	int getValidYear();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getValidYear <em>Valid Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Valid Year</em>' attribute.
+	 * @see #getValidYear()
+	 * @generated
+	 */
+	void setValidYear(int value);
+
+} // PopulationLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabelValue.java
new file mode 100644
index 0000000..24603d0
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/PopulationLabelValue.java
@@ -0,0 +1,39 @@
+// PopulationLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This interface defines a class in an EMF model for a Population Label Value.
+ * 
+ * @model
+ */
+public interface PopulationLabelValue extends LabelValue {
+
+	/**
+	 * @return the number of population members
+	 * @model
+	 */
+	double getCount();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.PopulationLabelValue#getCount <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Count</em>' attribute.
+	 * @see #getCount()
+	 * @generated
+	 */
+	void setCount(double value);
+
+} // PopulationLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationship.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationship.java
new file mode 100644
index 0000000..4e34080
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationship.java
@@ -0,0 +1,391 @@
+// RelativePhysicalRelationship.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * This class represents the enumeration of the different types of relative
+ * physical relationships.
+ * 
+ * @model
+ */
+public enum RelativePhysicalRelationship implements Enumerator
+{
+	/**
+	 * The '<em><b>Unspecified</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNSPECIFIED
+	 * @generated
+	 * @ordered
+	 */
+	UNSPECIFIED_LITERAL(0, "Unspecified", "Unspecified"),
+	/**
+	 * The '<em><b>Above</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ABOVE
+	 * @generated
+	 * @ordered
+	 */
+	ABOVE_LITERAL(2, "Above", "Above"),
+	/**
+	 * The '<em><b>Below</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BELOW
+	 * @generated
+	 * @ordered
+	 */
+	BELOW_LITERAL(4, "Below", "Below"),
+	/**
+	 * The '<em><b>Right Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RIGHT_OF
+	 * @generated
+	 * @ordered
+	 */
+	RIGHT_OF_LITERAL(6, "RightOf", "RightOf"),
+	/**
+	 * The '<em><b>Left Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LEFT_OF
+	 * @generated
+	 * @ordered
+	 */
+	LEFT_OF_LITERAL(8, "LeftOf", "LeftOf"),
+	/**
+	 * The '<em><b>North Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NORTH_OF
+	 * @generated
+	 * @ordered
+	 */
+	NORTH_OF_LITERAL(10, "NorthOf", "NorthOf"),
+	/**
+	 * The '<em><b>South Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SOUTH_OF
+	 * @generated
+	 * @ordered
+	 */
+	SOUTH_OF_LITERAL(12, "SouthOf", "SouthOf"),
+	/**
+	 * The '<em><b>West Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #WEST_OF
+	 * @generated
+	 * @ordered
+	 */
+	WEST_OF_LITERAL(14, "WestOf", "WestOf"),
+	/**
+	 * The '<em><b>East Of</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #EAST_OF
+	 * @generated
+	 * @ordered
+	 */
+	EAST_OF_LITERAL(16, "EastOf", "EastOf"),
+	/**
+	 * The '<em><b>Contains</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CONTAINS
+	 * @generated
+	 * @ordered
+	 */
+	CONTAINS_LITERAL(18, "Contains", "Contains"),
+	/**
+	 * The '<em><b>Contained By</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #CONTAINED_BY
+	 * @generated
+	 * @ordered
+	 */
+	CONTAINED_BY_LITERAL(20, "ContainedBy", "ContainedBy"),
+	/**
+	 * The '<em><b>Overlaps</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #OVERLAPS
+	 * @generated
+	 * @ordered
+	 */
+	OVERLAPS_LITERAL(22, "Overlaps", "Overlaps"),
+	/**
+	 * The '<em><b>Orbits</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ORBITS
+	 * @generated
+	 * @ordered
+	 */
+	ORBITS_LITERAL(24, "Orbits", "Orbits");
+	/**
+	 * @model name="Unspecified"
+	 */
+	public static final int UNSPECIFIED = 0;
+
+	/**
+	 * One thing is above another, but not touching.
+	 * 
+	 * @model name="Above"
+	 */
+	public static final int ABOVE = 2;
+
+	/**
+	 * One thing is below another, but not touching.
+	 * 
+	 * @model name="Below"
+	 */
+	public static final int BELOW = 4;
+
+	/**
+	 * One thing is to the right of another, but not touching.
+	 * 
+	 * @model name="RightOf"
+	 */
+	public static final int RIGHT_OF = 6;
+
+	/**
+	 * One thing is to the left of another, but not touching.
+	 * 
+	 * @model name="LeftOf"
+	 */
+	public static final int LEFT_OF = 8;
+
+	/**
+	 * One thing is to the north of another, but not touching.
+	 * 
+	 * @model name="NorthOf"
+	 */
+	public static final int NORTH_OF = 10;
+
+	/**
+	 * One thing is to the south of another, but not touching.
+	 * 
+	 * @model name="SouthOf"
+	 */
+	public static final int SOUTH_OF = 12;
+
+	/**
+	 * One thing is to the west of another, but not touching.
+	 * 
+	 * @model name="WestOf"
+	 */
+	public static final int WEST_OF = 14;
+
+	/**
+	 * @model name="EastOf"
+	 */
+	public static final int EAST_OF = 16;
+
+	/**
+	 * One thing completely contains another.
+	 * 
+	 * @model name="Contains"
+	 */
+	public static final int CONTAINS = 18;
+
+	/**
+	 * One thing is contained by another.
+	 * 
+	 * @model name="ContainedBy"
+	 */
+	public static final int CONTAINED_BY = 20;
+
+	/**
+	 * One thing overlaps another.
+	 * 
+	 * @model name="Overlaps"
+	 */
+	public static final int OVERLAPS = 22;
+
+	/**
+	 * One orbits another
+	 * 
+	 * @model name="Orbits"
+	 */
+	public static final int ORBITS = 24;
+
+	/**
+	 * An array of all the '<em><b>Relative Physical Relationship</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final RelativePhysicalRelationship[] VALUES_ARRAY =
+		new RelativePhysicalRelationship[] {
+			UNSPECIFIED_LITERAL,
+			ABOVE_LITERAL,
+			BELOW_LITERAL,
+			RIGHT_OF_LITERAL,
+			LEFT_OF_LITERAL,
+			NORTH_OF_LITERAL,
+			SOUTH_OF_LITERAL,
+			WEST_OF_LITERAL,
+			EAST_OF_LITERAL,
+			CONTAINS_LITERAL,
+			CONTAINED_BY_LITERAL,
+			OVERLAPS_LITERAL,
+			ORBITS_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Relative Physical Relationship</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<RelativePhysicalRelationship> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Relative Physical Relationship</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RelativePhysicalRelationship get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			RelativePhysicalRelationship result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Relative Physical Relationship</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RelativePhysicalRelationship getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			RelativePhysicalRelationship result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Relative Physical Relationship</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static RelativePhysicalRelationship get(int value) {
+		switch (value) {
+			case UNSPECIFIED: return UNSPECIFIED_LITERAL;
+			case ABOVE: return ABOVE_LITERAL;
+			case BELOW: return BELOW_LITERAL;
+			case RIGHT_OF: return RIGHT_OF_LITERAL;
+			case LEFT_OF: return LEFT_OF_LITERAL;
+			case NORTH_OF: return NORTH_OF_LITERAL;
+			case SOUTH_OF: return SOUTH_OF_LITERAL;
+			case WEST_OF: return WEST_OF_LITERAL;
+			case EAST_OF: return EAST_OF_LITERAL;
+			case CONTAINS: return CONTAINS_LITERAL;
+			case CONTAINED_BY: return CONTAINED_BY_LITERAL;
+			case OVERLAPS: return OVERLAPS_LITERAL;
+			case ORBITS: return ORBITS_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private RelativePhysicalRelationship(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral() {
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabel.java
new file mode 100644
index 0000000..8f38952
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabel.java
@@ -0,0 +1,37 @@
+// RelativePhysicalRelationshipLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is an EMF definition of a class that represents a label for an
+ * Edge that represents a relatvie physical relationship between two nodes.
+ * 
+ * @model
+ */
+public interface RelativePhysicalRelationshipLabel extends
+		PhysicalRelationshipLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * relative physical relationship label type URI.
+	 */
+	String URI_TYPE_RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_PHYSICAL_RELATIONSHIP_LABEL_SEGMENT
+			+ "/relative";
+
+	/**
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	RelativePhysicalRelationshipLabelValue getCurrentRelationship();
+
+} // RelativePhysicalRelationshipLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabelValue.java
new file mode 100644
index 0000000..fe43594
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RelativePhysicalRelationshipLabelValue.java
@@ -0,0 +1,57 @@
+// RelativePhysicalRelationshipLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This interface defines a class in an EMF model for a Physical Relationship
+ * Label Value.
+ * 
+ * @model
+ */
+public interface RelativePhysicalRelationshipLabelValue extends LabelValue {
+
+	/**
+	 * True if the relationship involves physical contact (i.e. touching).
+	 * @model
+	 */
+	boolean isAdjacent();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#isAdjacent <em>Adjacent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Adjacent</em>' attribute.
+	 * @see #isAdjacent()
+	 * @generated
+	 */
+	void setAdjacent(boolean value);
+
+	/**
+	 * @return the physical relationship between two things.
+	 * @model
+	 */
+	RelativePhysicalRelationship getRelationship();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue#getRelationship <em>Relationship</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Relationship</em>' attribute.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationship
+	 * @see #getRelationship()
+	 * @generated
+	 */
+	void setRelationship(RelativePhysicalRelationship value);
+
+} // RelativePhysicalRelationshipLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabel.java
new file mode 100644
index 0000000..8cba56f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabel.java
@@ -0,0 +1,31 @@
+// CommonBorderRelationshipLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * This interface is an EMF definition of a class that represents a label for an
+ * Edge that represents a the relationship of two nodes connected by some type of road
+ * 
+ * @model
+ */
+public interface RoadTransportRelationshipLabel extends
+		PhysicalRelationshipLabel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * relative physical relationship label type URI.
+	 */
+	String URI_TYPE_ROAD_TRANSPORT_RELATIONSHIP_LABEL_SEGMENT = URI_TYPE_PHYSICAL_RELATIONSHIP_LABEL_SEGMENT
+			+ "/road";
+
+} // CommonBorderRelationshipLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabelValue.java
new file mode 100644
index 0000000..72408ef
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/RoadTransportRelationshipLabelValue.java
@@ -0,0 +1,74 @@
+// CommonBorderRelationshipLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for Road Transport
+ * Relationship Label Values.
+ * 
+ * @model
+ */
+public interface RoadTransportRelationshipLabelValue extends
+		PhysicalRelationshipLabelValue{
+
+	/**
+	 * @return the name of the road
+	 * @model default="road"
+	 */
+	String getRoadName();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadName <em>Road Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Road Name</em>' attribute.
+	 * @see #getRoadName()
+	 * @generated
+	 */
+	void setRoadName(String value);
+
+	/**
+	 * @return the class of the road (e.g., Interstate, State Route, etc.)
+	 * @model default="route"
+	 */
+	String getRoadClass();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getRoadClass <em>Road Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Road Class</em>' attribute.
+	 * @see #getRoadClass()
+	 * @generated
+	 */
+	void setRoadClass(String value);
+
+	/**
+	 * Roads may wander back and forth across a single border. This counts the crossings
+	 * @return the number of times a road crosses a border between two locations
+	 * @model default="1"
+	 */
+	int getNumberCrossings();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue#getNumberCrossings <em>Number Crossings</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Number Crossings</em>' attribute.
+	 * @see #getNumberCrossings()
+	 * @generated
+	 */
+	void setNumberCrossings(int value);
+	
+
+} // RoadTransportRelationshipLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportMode.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportMode.java
new file mode 100644
index 0000000..36cf50e
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportMode.java
@@ -0,0 +1,266 @@
+// TransportMode.java
+package org.eclipse.stem.definitions.labels;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * This class represents the enumeration of the different types of
+ * transportation modes that can be used to move population members between one
+ * location and another.
+ * 
+ * @model
+ */
+public enum TransportMode implements Enumerator
+{
+	/**
+	 * The '<em><b>Unspecified</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #UNSPECIFIED
+	 * @generated
+	 * @ordered
+	 */
+	UNSPECIFIED_LITERAL(0, "unspecified", "unspecified"),
+	/**
+	 * The '<em><b>Air</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #AIR
+	 * @generated
+	 * @ordered
+	 */
+	AIR_LITERAL(2, "air", "air"),
+	/**
+	 * The '<em><b>Road</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ROAD
+	 * @generated
+	 * @ordered
+	 */
+	ROAD_LITERAL(4, "road", "road"),
+	/**
+	 * The '<em><b>Rail</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #RAIL
+	 * @generated
+	 * @ordered
+	 */
+	RAIL_LITERAL(6, "rail", "rail"),
+	/**
+	 * The '<em><b>Marine</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MARINE
+	 * @generated
+	 * @ordered
+	 */
+	MARINE_LITERAL(8, "marine", "marine"),
+	/**
+	 * The '<em><b>Foot</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FOOT
+	 * @generated
+	 * @ordered
+	 */
+	FOOT_LITERAL(10, "foot", "foot");
+	/**
+	 * @model name="unspecified"
+	 */
+	public static final int UNSPECIFIED = 0;
+
+	/**
+	 * @model name="air"
+	 */
+	public static final int AIR = 2;
+
+	/**
+	 * Vehicular transport
+	 * 
+	 * @model name="road"
+	 */
+	public static final int ROAD = 4;
+
+	/**
+	 * Rail road
+	 * 
+	 * @model name="rail"
+	 */
+	public static final int RAIL = 6;
+
+	/**
+	 * Travel by waterway
+	 * 
+	 * @model name="marine"
+	 */
+	public static final int MARINE = 8;
+
+	/**
+	 * Self-powered walking
+	 * 
+	 * @model name="foot"
+	 */
+	public static final int FOOT = 10;
+
+	/**
+	 * An array of all the '<em><b>Transport Mode</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final TransportMode[] VALUES_ARRAY =
+		new TransportMode[] {
+			UNSPECIFIED_LITERAL,
+			AIR_LITERAL,
+			ROAD_LITERAL,
+			RAIL_LITERAL,
+			MARINE_LITERAL,
+			FOOT_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Transport Mode</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<TransportMode> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Transport Mode</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TransportMode get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			TransportMode result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Transport Mode</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TransportMode getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			TransportMode result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Transport Mode</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TransportMode get(int value) {
+		switch (value) {
+			case UNSPECIFIED: return UNSPECIFIED_LITERAL;
+			case AIR: return AIR_LITERAL;
+			case ROAD: return ROAD_LITERAL;
+			case RAIL: return RAIL_LITERAL;
+			case MARINE: return MARINE_LITERAL;
+			case FOOT: return FOOT_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private TransportMode(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral() {
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabel.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabel.java
new file mode 100644
index 0000000..850f22e
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabel.java
@@ -0,0 +1,220 @@
+// TransportRelationshipLabel.java
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This interface is an EMF definition of a class that represents a label for an
+ * Edge that represents the physical transportation of population members
+ * between two nodes.
+ * 
+ * @model
+ */
+public interface TransportRelationshipLabel extends DynamicEdgeLabel {
+
+	/**
+	 * @model
+	 */
+	TransportMode getTransportMode();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportMode <em>Transport Mode</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transport Mode</em>' attribute.
+	 * @see org.eclipse.stem.definitions.labels.TransportMode
+	 * @see #getTransportMode()
+	 * @generated
+	 */
+	void setTransportMode(TransportMode value);
+
+	/**
+	 * @model
+	 */
+	String getPopulationIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getPopulationIdentifier <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Population Identifier</em>' attribute.
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 */
+	void setPopulationIdentifier(String value);
+
+	/**
+	 * @return the number of milliseconds it takes to transport the that defines
+	 *         the rate at which population members are transported.
+	 *         (Milliseconds)
+	 * @see STEMTime
+	 * @model
+	 */
+	long getRateTimePeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getRateTimePeriod <em>Rate Time Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Rate Time Period</em>' attribute.
+	 * @see #getRateTimePeriod()
+	 * @generated
+	 */
+	void setRateTimePeriod(long value);
+
+	/**
+	 * @return the current number of population members that can depart given
+	 *         the currently available departure capacity.
+	 * @see TransportRelationshipLabelValue#getAvailableDepartureCapacityProportion()
+	 * @see #getMaximumDepartureCapacity()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getDepartureCapacity();
+
+	/**
+	 * @return the maximum number of population members that can depart using
+	 *         the transportation mode/identifier each time period
+	 * @see #getTimePeriod()
+	 * @see #getMaximumCapacity()
+	 * @see #getStartUpDelay()
+	 * @model
+	 */
+	int getMaximumDepartureCapacity();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumDepartureCapacity <em>Maximum Departure Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Maximum Departure Capacity</em>' attribute.
+	 * @see #getMaximumDepartureCapacity()
+	 * @generated
+	 */
+	void setMaximumDepartureCapacity(int value);
+
+	/**
+	 * @return the current number of population members that can be in transit
+	 *         at any one time.
+	 * 
+	 * @see TransportRelationshipLabelValue#getAvailableDepartureCapacityProportion()
+	 * @see #getMaximumCapacity()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	int getCapacity();
+
+	/**
+	 * @return the total maximum number of population members that can be in
+	 *         transit at any one time.
+	 * @see #getTimePeriod()
+	 * @see #getCapacity()
+	 * @see #getStartUpDelay()
+	 * @model
+	 */
+	int getMaximumCapacity();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getMaximumCapacity <em>Maximum Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Maximum Capacity</em>' attribute.
+	 * @see #getMaximumCapacity()
+	 * @generated
+	 */
+	void setMaximumCapacity(int value);
+
+	/**
+	 * @return the number of milliseconds it takes population members to travel
+	 *         from one <code>Node</code> to another using the the type of
+	 *         transportation represented by the relationship.
+	 * @model default=0
+	 */
+	long getTransitTime();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransitTime <em>Transit Time</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transit Time</em>' attribute.
+	 * @see #getTransitTime()
+	 * @generated
+	 */
+	void setTransitTime(long value);
+
+	/**
+	 * @return the number of milliseconds it takes the transportation capacity
+	 *         to linearly increase from zero to maximum capacity. The departure
+	 *         capacity also increases at this rate from 0 to its maximum.
+	 * @see #getMaximumCapacity()
+	 * @see #getDepartureCapacity()
+	 * @model default=0
+	 */
+	long getStartUpDelay();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getStartUpDelay <em>Start Up Delay</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start Up Delay</em>' attribute.
+	 * @see #getStartUpDelay()
+	 * @generated
+	 */
+	void setStartUpDelay(long value);
+
+	/**
+	 * @return a String that identifiers the specific transportation instance.
+	 *         For example, this might be the name of a road.
+	 * @model
+	 */
+	String getTransportIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getTransportIdentifier <em>Transport Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transport Identifier</em>' attribute.
+	 * @see #getTransportIdentifier()
+	 * @generated
+	 */
+	void setTransportIdentifier(String value);
+
+	/**
+	 * Send a representation of population members to be "transported" from the
+	 * <code>Node</code> <code>here</code> to the other <code>Node</code>
+	 * in the relationship.
+	 * 
+	 * @param here
+	 *            the <code>Node</code> the population members depart from
+	 * @param departees
+	 *            the population member representation
+	 */
+	void send(final Node here, final EObject departees);
+
+	/**
+	 * Receive some travelers.
+	 * 
+	 * @param here
+	 *            the <code>Node</code> of arrival
+	 * @param currentTime
+	 *            the current time of the simulation
+	 * @return all of the representations of population members who have
+	 *         traveled to the <code>Node</code> <code>here</code> by the
+	 *         <code>currentTime</code>
+	 * @see STEMTime
+	 */
+	EList<EObject> receive(final Node here, final STEMTime currentTime);
+
+	/**
+	 * @return the current transport relationship value
+	 * @model volatile="true" transient="true" changeable="false"
+	 *        resolveProxies="false"
+	 */
+	TransportRelationshipLabelValue getCurrentTransportRelationshipLabelValue();
+} // TransportRelationshipLabel
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabelValue.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabelValue.java
new file mode 100644
index 0000000..97ea732
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/TransportRelationshipLabelValue.java
@@ -0,0 +1,47 @@
+// TransportRelationshipLabelValue.java
+package org.eclipse.stem.definitions.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * The value of a transportation relationship label is the current available
+ * capacity expressed as a proportion of the maximum capacity of the
+ * transportation mode/identifier. Typically, this value will be 1.0 (100%), but
+ * it could be reduced by travel restrictions.
+ * 
+ * @see TransportRelationshipLabel#getMaximumCapacity()
+ * 
+ * @model
+ */
+public interface TransportRelationshipLabelValue extends LabelValue {
+
+	/**
+	 * @return the proportion (i.e., 0.0-1.0) of the departure transportation
+	 *         capacity that is available.
+	 * @see TransportRelationshipLabel#getDepartureCapacity()
+	 * @model default="1.0"
+	 */
+	double getAvailableDepartureCapacityProportion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue#getAvailableDepartureCapacityProportion <em>Available Departure Capacity Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Available Departure Capacity Proportion</em>' attribute.
+	 * @see #getAvailableDepartureCapacityProportion()
+	 * @generated
+	 */
+	void setAvailableDepartureCapacityProportion(double value);
+
+} // TransportRelationshipLabelValue
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelImpl.java
new file mode 100644
index 0000000..26b12fc
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelImpl.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Area Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.AreaLabelImpl#getCurrentAreaValue <em>Current Area Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AreaLabelImpl extends StaticNodeLabelImpl implements AreaLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected AreaLabelImpl() {
+		super();
+		setCurrentValue(LabelsFactory.eINSTANCE.createAreaLabelValue());
+	} // AreaLabelImpl
+
+	/**
+	 * @param adminLevel
+	 * @param countryCode
+	 * @param nodeCode
+	 * @return the URI for a specific area label for a geographic region
+	 */
+	public static URI createAreaLabelURI(final int adminLevel,
+			final String countryCode, final String nodeCode) {
+		final URI retValue = STEMURI.createURI(URI_TYPE_AREA_LABEL_SEGMENT
+				+ "/" + countryCode + "/" + adminLevel + "/" + nodeCode);
+		return retValue;
+	} // createAreaLabelURI
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.AREA_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public AreaLabelValue getCurrentAreaValue() {
+		return (AreaLabelValue) getCurrentValue();
+	} // getCurrentAreaValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL__CURRENT_AREA_VALUE:
+				return getCurrentAreaValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL__CURRENT_AREA_VALUE:
+				return getCurrentAreaValue() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} // AreaLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelValueImpl.java
new file mode 100644
index 0000000..9ee4948
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/AreaLabelValueImpl.java
@@ -0,0 +1,272 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Area Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl#getArea <em>Area</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.AreaLabelValueImpl#getAverageExtent <em>Average Extent</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+@SuppressWarnings("boxing")
+public class AreaLabelValueImpl extends LabelValueImpl implements
+		AreaLabelValue {
+	/**
+	 * The default value of the '{@link #getArea() <em>Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double AREA_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getArea() <em>Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected double area = AREA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAverageExtent() <em>Average Extent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageExtent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double AVERAGE_EXTENT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAverageExtent() <em>Average Extent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAverageExtent()
+	 * @generated
+	 * @ordered
+	 */
+	protected double averageExtent = AVERAGE_EXTENT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AreaLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.AREA_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getArea() {
+		return area;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		// We don't reset
+	} // reset
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = true;
+
+		// The area should be greater than zero
+		retValue = retValue && getArea() > 0;
+		//assert retValue;
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newArea
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArea(double newArea) {
+		double oldArea = area;
+		area = newArea;
+		if(area >= 1.0) {
+			setAverageExtent(Math.sqrt(area));
+		} else {
+			setAverageExtent(1.0);
+		}
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.AREA_LABEL_VALUE__AREA, oldArea, area));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAverageExtent() {
+		return averageExtent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAverageExtent(double newAverageExtent) {
+		double oldAverageExtent = averageExtent;
+		averageExtent = newAverageExtent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT, oldAverageExtent, averageExtent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL_VALUE__AREA:
+				return getArea();
+			case LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT:
+				return getAverageExtent();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL_VALUE__AREA:
+				setArea((Double)newValue);
+				return;
+			case LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT:
+				setAverageExtent((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL_VALUE__AREA:
+				setArea(AREA_EDEFAULT);
+				return;
+			case LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT:
+				setAverageExtent(AVERAGE_EXTENT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.AREA_LABEL_VALUE__AREA:
+				return area != AREA_EDEFAULT;
+			case LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT:
+				return averageExtent != AVERAGE_EXTENT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append(area);
+		result.append(" km^2");
+		return result.toString();
+	}
+
+} // AreaLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelImpl.java
new file mode 100644
index 0000000..6a7b1e1
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelImpl.java
@@ -0,0 +1,112 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+//import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+//import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Common Border Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class CommonBorderRelationshipLabelImpl extends
+		PhysicalRelationshipLabelImpl implements CommonBorderRelationshipLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected CommonBorderRelationshipLabelImpl() {
+		super();
+		setCurrentValue(LabelsFactory.eINSTANCE
+				.createCommonBorderRelationshipLabelValue());
+	} // CommonBorderRelationshipLabelImpl
+
+	/**
+	 * Create an edge between two nodes that represents the relationship of
+	 * sharing a common border.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param borderLength
+	 *            the length of the border (km's)
+	 * @return an edge between the two nodes
+	 */
+	public static Edge createCommonBorderRelationship(final Node nodeA,
+			final Node nodeB, final int borderLength) {
+		final Edge retValue = EdgeImpl.createEdge(nodeA, nodeB);
+		final CommonBorderRelationshipLabel label = LabelsFactory.eINSTANCE
+				.createCommonBorderRelationshipLabel();
+		label.setURIOfIdentifiableToBeLabeled(retValue.getURI());
+
+		final CommonBorderRelationshipLabelValue labelValue = (CommonBorderRelationshipLabelValue) label
+				.getCurrentValue();
+		labelValue.setBorderLength(borderLength);
+
+		retValue.setLabel(label);
+
+		return retValue;
+	} // createCommonBorderRelationship
+
+	/**
+	 * @param node
+	 *            the node
+	 * @return the Edges that represent the common border relationship between
+	 *         the node and other nodes.
+	 */
+	public static List<Edge> getCommonBorderEdgesFromNode(final Node node) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		if(node == null || node.getEdges() == null) return retValue;
+		
+		for (Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter.hasNext();) {
+			final Edge edge = edgeIter.next();
+			final EdgeLabel edgeLabel = edge.getLabel();
+			// Is the label a common border label?
+			if (edgeLabel instanceof CommonBorderRelationshipLabel) {
+				// Yes
+				retValue.add(edge);
+			}
+		} // for
+
+		return retValue;
+	} // getCommonBorderEdgesFromNode
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.COMMON_BORDER_RELATIONSHIP_LABEL;
+	}
+
+} // CommonBorderRelationshipLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelValueImpl.java
new file mode 100644
index 0000000..51916b8
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/CommonBorderRelationshipLabelValueImpl.java
@@ -0,0 +1,160 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+//import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Common Border Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelValueImpl#getBorderLength <em>Border Length</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CommonBorderRelationshipLabelValueImpl extends
+		PhysicalRelationshipLabelValueImpl implements
+		CommonBorderRelationshipLabelValue {
+	/**
+	 * The default value of the '{@link #getBorderLength() <em>Border Length</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getBorderLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double BORDER_LENGTH_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getBorderLength() <em>Border Length</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getBorderLength()
+	 * @generated
+	 * @ordered
+	 */
+	protected double borderLength = BORDER_LENGTH_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CommonBorderRelationshipLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getBorderLength() {
+		return borderLength;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBorderLength(double newBorderLength) {
+		double oldBorderLength = borderLength;
+		borderLength = newBorderLength;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH, oldBorderLength, borderLength));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH:
+				return getBorderLength();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH:
+				setBorderLength((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH:
+				setBorderLength(BORDER_LENGTH_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH:
+				return borderLength != BORDER_LENGTH_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (borderLength: "); //$NON-NLS-1$
+		result.append(borderLength);
+		result.append(')');
+		return result.toString();
+	}
+
+} // CommonBorderRelationshipLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsFactoryImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsFactoryImpl.java
new file mode 100644
index 0000000..04fc6c7
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsFactoryImpl.java
@@ -0,0 +1,323 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.definitions.labels.*;
+
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsFactoryImpl extends EFactoryImpl implements LabelsFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LabelsFactory init() {
+		try {
+			LabelsFactory theLabelsFactory = (LabelsFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/definitions/labels.ecore"); //$NON-NLS-1$ 
+			if (theLabelsFactory != null) {
+				return theLabelsFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new LabelsFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case LabelsPackage.AREA_LABEL: return createAreaLabel();
+			case LabelsPackage.AREA_LABEL_VALUE: return createAreaLabelValue();
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL: return createCommonBorderRelationshipLabel();
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE: return createCommonBorderRelationshipLabelValue();
+			case LabelsPackage.POPULATION_LABEL: return createPopulationLabel();
+			case LabelsPackage.POPULATION_LABEL_VALUE: return createPopulationLabelValue();
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL: return createRelativePhysicalRelationshipLabel();
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE: return createRelativePhysicalRelationshipLabelValue();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL: return createTransportRelationshipLabel();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE: return createTransportRelationshipLabelValue();
+			case LabelsPackage.PHYSICAL_RELATIONSHIP_LABEL_VALUE: return createPhysicalRelationshipLabelValue();
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL: return createRoadTransportRelationshipLabel();
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE: return createRoadTransportRelationshipLabelValue();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP:
+				return createRelativePhysicalRelationshipFromString(eDataType, initialValue);
+			case LabelsPackage.TRANSPORT_MODE:
+				return createTransportModeFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP:
+				return convertRelativePhysicalRelationshipToString(eDataType, instanceValue);
+			case LabelsPackage.TRANSPORT_MODE:
+				return convertTransportModeToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabel createAreaLabel() {
+		AreaLabelImpl areaLabel = new AreaLabelImpl();
+		return areaLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabelValue createAreaLabelValue() {
+		AreaLabelValueImpl areaLabelValue = new AreaLabelValueImpl();
+		return areaLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabel createCommonBorderRelationshipLabel() {
+		CommonBorderRelationshipLabelImpl commonBorderRelationshipLabel = new CommonBorderRelationshipLabelImpl();
+		return commonBorderRelationshipLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabelValue createCommonBorderRelationshipLabelValue() {
+		CommonBorderRelationshipLabelValueImpl commonBorderRelationshipLabelValue = new CommonBorderRelationshipLabelValueImpl();
+		return commonBorderRelationshipLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabel createPopulationLabel() {
+		PopulationLabelImpl populationLabel = new PopulationLabelImpl();
+		return populationLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabelValue createPopulationLabelValue() {
+		PopulationLabelValueImpl populationLabelValue = new PopulationLabelValueImpl();
+		return populationLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabel createRelativePhysicalRelationshipLabel() {
+		RelativePhysicalRelationshipLabelImpl relativePhysicalRelationshipLabel = new RelativePhysicalRelationshipLabelImpl();
+		return relativePhysicalRelationshipLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabelValue createRelativePhysicalRelationshipLabelValue() {
+		RelativePhysicalRelationshipLabelValueImpl relativePhysicalRelationshipLabelValue = new RelativePhysicalRelationshipLabelValueImpl();
+		return relativePhysicalRelationshipLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportRelationshipLabel createTransportRelationshipLabel() {
+		TransportRelationshipLabelImpl transportRelationshipLabel = new TransportRelationshipLabelImpl();
+		return transportRelationshipLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportRelationshipLabelValue createTransportRelationshipLabelValue() {
+		TransportRelationshipLabelValueImpl transportRelationshipLabelValue = new TransportRelationshipLabelValueImpl();
+		return transportRelationshipLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalRelationshipLabelValue createPhysicalRelationshipLabelValue() {
+		PhysicalRelationshipLabelValueImpl physicalRelationshipLabelValue = new PhysicalRelationshipLabelValueImpl();
+		return physicalRelationshipLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabel createRoadTransportRelationshipLabel() {
+		RoadTransportRelationshipLabelImpl roadTransportRelationshipLabel = new RoadTransportRelationshipLabelImpl();
+		return roadTransportRelationshipLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabelValue createRoadTransportRelationshipLabelValue() {
+		RoadTransportRelationshipLabelValueImpl roadTransportRelationshipLabelValue = new RoadTransportRelationshipLabelValueImpl();
+		return roadTransportRelationshipLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationship createRelativePhysicalRelationshipFromString(EDataType eDataType, String initialValue) {
+		RelativePhysicalRelationship result = RelativePhysicalRelationship.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertRelativePhysicalRelationshipToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportMode createTransportModeFromString(EDataType eDataType, String initialValue) {
+		TransportMode result = TransportMode.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertTransportModeToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsPackage getLabelsPackage() {
+		return (LabelsPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static LabelsPackage getPackage() {
+		return LabelsPackage.eINSTANCE;
+	}
+
+} //LabelsFactoryImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsPackageImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsPackageImpl.java
new file mode 100644
index 0000000..4bb26fa
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/LabelsPackageImpl.java
@@ -0,0 +1,871 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+//import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl;
+import org.eclipse.stem.definitions.types.TypesPackage;
+import org.eclipse.stem.definitions.types.impl.TypesPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsPackageImpl extends EPackageImpl implements LabelsPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass areaLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass areaLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass commonBorderRelationshipLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass commonBorderRelationshipLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass physicalRelationshipLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass populationLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass populationLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass relativePhysicalRelationshipLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass relativePhysicalRelationshipLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transportRelationshipLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transportRelationshipLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass physicalRelationshipLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass roadTransportRelationshipLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass roadTransportRelationshipLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum relativePhysicalRelationshipEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum transportModeEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.definitions.labels.LabelsPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private LabelsPackageImpl() {
+		super(eNS_URI, LabelsFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link LabelsPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static LabelsPackage init() {
+		if (isInited) return (LabelsPackage)EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI);
+
+		// Obtain or create and register package
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new LabelsPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		GraphPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+		SolverPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		EdgesPackageImpl theEdgesPackage = (EdgesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) instanceof EdgesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) : EdgesPackage.eINSTANCE);
+		NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) : NodesPackage.eINSTANCE);
+		TypesPackageImpl theTypesPackage = (TypesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) instanceof TypesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) : TypesPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theLabelsPackage.createPackageContents();
+		theEdgesPackage.createPackageContents();
+		theNodesPackage.createPackageContents();
+		theTypesPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theLabelsPackage.initializePackageContents();
+		theEdgesPackage.initializePackageContents();
+		theNodesPackage.initializePackageContents();
+		theTypesPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theLabelsPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(LabelsPackage.eNS_URI, theLabelsPackage);
+		return theLabelsPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAreaLabel() {
+		return areaLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAreaLabel_CurrentAreaValue() {
+		return (EReference)areaLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAreaLabelValue() {
+		return areaLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getAreaLabelValue_Area() {
+		return (EAttribute)areaLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getAreaLabelValue_AverageExtent() {
+		return (EAttribute)areaLabelValueEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCommonBorderRelationshipLabel() {
+		return commonBorderRelationshipLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCommonBorderRelationshipLabelValue() {
+		return commonBorderRelationshipLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getCommonBorderRelationshipLabelValue_BorderLength() {
+		return (EAttribute)commonBorderRelationshipLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPhysicalRelationshipLabel() {
+		return physicalRelationshipLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPopulationLabel() {
+		return populationLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPopulationLabel_PopulationIdentifier() {
+		return (EAttribute)populationLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPopulationLabel_Name() {
+		return (EAttribute)populationLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPopulationLabel_CurrentPopulationValue() {
+		return (EReference)populationLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPopulationLabel_PopulatedArea() {
+		return (EAttribute)populationLabelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPopulationLabel_ValidYear() {
+		return (EAttribute)populationLabelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPopulationLabelValue() {
+		return populationLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPopulationLabelValue_Count() {
+		return (EAttribute)populationLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRelativePhysicalRelationshipLabel() {
+		return relativePhysicalRelationshipLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRelativePhysicalRelationshipLabel_CurrentRelationship() {
+		return (EReference)relativePhysicalRelationshipLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRelativePhysicalRelationshipLabelValue() {
+		return relativePhysicalRelationshipLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRelativePhysicalRelationshipLabelValue_Adjacent() {
+		return (EAttribute)relativePhysicalRelationshipLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRelativePhysicalRelationshipLabelValue_Relationship() {
+		return (EAttribute)relativePhysicalRelationshipLabelValueEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransportRelationshipLabel() {
+		return transportRelationshipLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_TransportMode() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_PopulationIdentifier() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_TransportIdentifier() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTransportRelationshipLabel_CurrentTransportRelationshipLabelValue() {
+		return (EReference)transportRelationshipLabelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_RateTimePeriod() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_DepartureCapacity() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_MaximumDepartureCapacity() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_Capacity() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_MaximumCapacity() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_TransitTime() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(9);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabel_StartUpDelay() {
+		return (EAttribute)transportRelationshipLabelEClass.getEStructuralFeatures().get(10);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransportRelationshipLabelValue() {
+		return transportRelationshipLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTransportRelationshipLabelValue_AvailableDepartureCapacityProportion() {
+		return (EAttribute)transportRelationshipLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPhysicalRelationshipLabelValue() {
+		return physicalRelationshipLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRoadTransportRelationshipLabel() {
+		return roadTransportRelationshipLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRoadTransportRelationshipLabelValue() {
+		return roadTransportRelationshipLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRoadTransportRelationshipLabelValue_RoadName() {
+		return (EAttribute)roadTransportRelationshipLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRoadTransportRelationshipLabelValue_RoadClass() {
+		return (EAttribute)roadTransportRelationshipLabelValueEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRoadTransportRelationshipLabelValue_NumberCrossings() {
+		return (EAttribute)roadTransportRelationshipLabelValueEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getRelativePhysicalRelationship() {
+		return relativePhysicalRelationshipEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getTransportMode() {
+		return transportModeEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsFactory getLabelsFactory() {
+		return (LabelsFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		areaLabelEClass = createEClass(AREA_LABEL);
+		createEReference(areaLabelEClass, AREA_LABEL__CURRENT_AREA_VALUE);
+
+		areaLabelValueEClass = createEClass(AREA_LABEL_VALUE);
+		createEAttribute(areaLabelValueEClass, AREA_LABEL_VALUE__AREA);
+		createEAttribute(areaLabelValueEClass, AREA_LABEL_VALUE__AVERAGE_EXTENT);
+
+		commonBorderRelationshipLabelEClass = createEClass(COMMON_BORDER_RELATIONSHIP_LABEL);
+
+		commonBorderRelationshipLabelValueEClass = createEClass(COMMON_BORDER_RELATIONSHIP_LABEL_VALUE);
+		createEAttribute(commonBorderRelationshipLabelValueEClass, COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH);
+
+		physicalRelationshipLabelEClass = createEClass(PHYSICAL_RELATIONSHIP_LABEL);
+
+		populationLabelEClass = createEClass(POPULATION_LABEL);
+		createEAttribute(populationLabelEClass, POPULATION_LABEL__POPULATION_IDENTIFIER);
+		createEAttribute(populationLabelEClass, POPULATION_LABEL__NAME);
+		createEReference(populationLabelEClass, POPULATION_LABEL__CURRENT_POPULATION_VALUE);
+		createEAttribute(populationLabelEClass, POPULATION_LABEL__POPULATED_AREA);
+		createEAttribute(populationLabelEClass, POPULATION_LABEL__VALID_YEAR);
+
+		populationLabelValueEClass = createEClass(POPULATION_LABEL_VALUE);
+		createEAttribute(populationLabelValueEClass, POPULATION_LABEL_VALUE__COUNT);
+
+		relativePhysicalRelationshipLabelEClass = createEClass(RELATIVE_PHYSICAL_RELATIONSHIP_LABEL);
+		createEReference(relativePhysicalRelationshipLabelEClass, RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP);
+
+		relativePhysicalRelationshipLabelValueEClass = createEClass(RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE);
+		createEAttribute(relativePhysicalRelationshipLabelValueEClass, RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT);
+		createEAttribute(relativePhysicalRelationshipLabelValueEClass, RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP);
+
+		transportRelationshipLabelEClass = createEClass(TRANSPORT_RELATIONSHIP_LABEL);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER);
+		createEReference(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__CAPACITY);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME);
+		createEAttribute(transportRelationshipLabelEClass, TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY);
+
+		transportRelationshipLabelValueEClass = createEClass(TRANSPORT_RELATIONSHIP_LABEL_VALUE);
+		createEAttribute(transportRelationshipLabelValueEClass, TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION);
+
+		physicalRelationshipLabelValueEClass = createEClass(PHYSICAL_RELATIONSHIP_LABEL_VALUE);
+
+		roadTransportRelationshipLabelEClass = createEClass(ROAD_TRANSPORT_RELATIONSHIP_LABEL);
+
+		roadTransportRelationshipLabelValueEClass = createEClass(ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE);
+		createEAttribute(roadTransportRelationshipLabelValueEClass, ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME);
+		createEAttribute(roadTransportRelationshipLabelValueEClass, ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS);
+		createEAttribute(roadTransportRelationshipLabelValueEClass, ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS);
+
+		// Create enums
+		relativePhysicalRelationshipEEnum = createEEnum(RELATIVE_PHYSICAL_RELATIONSHIP);
+		transportModeEEnum = createEEnum(TRANSPORT_MODE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		areaLabelEClass.getESuperTypes().add(theGraphPackage.getStaticNodeLabel());
+		areaLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		commonBorderRelationshipLabelEClass.getESuperTypes().add(this.getPhysicalRelationshipLabel());
+		commonBorderRelationshipLabelValueEClass.getESuperTypes().add(this.getPhysicalRelationshipLabelValue());
+		physicalRelationshipLabelEClass.getESuperTypes().add(theGraphPackage.getStaticEdgeLabel());
+		populationLabelEClass.getESuperTypes().add(theGraphPackage.getStaticNodeLabel());
+		populationLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		relativePhysicalRelationshipLabelEClass.getESuperTypes().add(this.getPhysicalRelationshipLabel());
+		relativePhysicalRelationshipLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		transportRelationshipLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicEdgeLabel());
+		transportRelationshipLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		physicalRelationshipLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		roadTransportRelationshipLabelEClass.getESuperTypes().add(this.getPhysicalRelationshipLabel());
+		roadTransportRelationshipLabelValueEClass.getESuperTypes().add(this.getPhysicalRelationshipLabelValue());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(areaLabelEClass, AreaLabel.class, "AreaLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getAreaLabel_CurrentAreaValue(), this.getAreaLabelValue(), null, "currentAreaValue", null, 0, 1, AreaLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(areaLabelValueEClass, AreaLabelValue.class, "AreaLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getAreaLabelValue_Area(), ecorePackage.getEDouble(), "area", null, 0, 1, AreaLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getAreaLabelValue_AverageExtent(), ecorePackage.getEDouble(), "averageExtent", null, 0, 1, AreaLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(commonBorderRelationshipLabelEClass, CommonBorderRelationshipLabel.class, "CommonBorderRelationshipLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(commonBorderRelationshipLabelValueEClass, CommonBorderRelationshipLabelValue.class, "CommonBorderRelationshipLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getCommonBorderRelationshipLabelValue_BorderLength(), ecorePackage.getEDouble(), "borderLength", null, 0, 1, CommonBorderRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(physicalRelationshipLabelEClass, PhysicalRelationshipLabel.class, "PhysicalRelationshipLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(populationLabelEClass, PopulationLabel.class, "PopulationLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getPopulationLabel_PopulationIdentifier(), ecorePackage.getEString(), "populationIdentifier", null, 0, 1, PopulationLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPopulationLabel_Name(), ecorePackage.getEString(), "name", null, 0, 1, PopulationLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getPopulationLabel_CurrentPopulationValue(), this.getPopulationLabelValue(), null, "currentPopulationValue", null, 0, 1, PopulationLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPopulationLabel_PopulatedArea(), ecorePackage.getEDouble(), "populatedArea", "0", 0, 1, PopulationLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getPopulationLabel_ValidYear(), ecorePackage.getEInt(), "validYear", "2006", 0, 1, PopulationLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(populationLabelValueEClass, PopulationLabelValue.class, "PopulationLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getPopulationLabelValue_Count(), ecorePackage.getEDouble(), "count", null, 0, 1, PopulationLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(relativePhysicalRelationshipLabelEClass, RelativePhysicalRelationshipLabel.class, "RelativePhysicalRelationshipLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getRelativePhysicalRelationshipLabel_CurrentRelationship(), this.getRelativePhysicalRelationshipLabelValue(), null, "currentRelationship", null, 0, 1, RelativePhysicalRelationshipLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(relativePhysicalRelationshipLabelValueEClass, RelativePhysicalRelationshipLabelValue.class, "RelativePhysicalRelationshipLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getRelativePhysicalRelationshipLabelValue_Adjacent(), ecorePackage.getEBoolean(), "adjacent", null, 0, 1, RelativePhysicalRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getRelativePhysicalRelationshipLabelValue_Relationship(), this.getRelativePhysicalRelationship(), "relationship", null, 0, 1, RelativePhysicalRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(transportRelationshipLabelEClass, TransportRelationshipLabel.class, "TransportRelationshipLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_TransportMode(), this.getTransportMode(), "transportMode", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_PopulationIdentifier(), ecorePackage.getEString(), "populationIdentifier", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_TransportIdentifier(), ecorePackage.getEString(), "transportIdentifier", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getTransportRelationshipLabel_CurrentTransportRelationshipLabelValue(), this.getTransportRelationshipLabelValue(), null, "currentTransportRelationshipLabelValue", null, 0, 1, TransportRelationshipLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_RateTimePeriod(), ecorePackage.getELong(), "rateTimePeriod", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_DepartureCapacity(), ecorePackage.getEInt(), "departureCapacity", null, 0, 1, TransportRelationshipLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_MaximumDepartureCapacity(), ecorePackage.getEInt(), "maximumDepartureCapacity", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_Capacity(), ecorePackage.getEInt(), "capacity", null, 0, 1, TransportRelationshipLabel.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_MaximumCapacity(), ecorePackage.getEInt(), "maximumCapacity", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_TransitTime(), ecorePackage.getELong(), "transitTime", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabel_StartUpDelay(), ecorePackage.getELong(), "startUpDelay", null, 0, 1, TransportRelationshipLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(transportRelationshipLabelValueEClass, TransportRelationshipLabelValue.class, "TransportRelationshipLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTransportRelationshipLabelValue_AvailableDepartureCapacityProportion(), ecorePackage.getEDouble(), "availableDepartureCapacityProportion", "1.0", 0, 1, TransportRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(physicalRelationshipLabelValueEClass, PhysicalRelationshipLabelValue.class, "PhysicalRelationshipLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(roadTransportRelationshipLabelEClass, RoadTransportRelationshipLabel.class, "RoadTransportRelationshipLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(roadTransportRelationshipLabelValueEClass, RoadTransportRelationshipLabelValue.class, "RoadTransportRelationshipLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getRoadTransportRelationshipLabelValue_RoadName(), ecorePackage.getEString(), "roadName", "road", 0, 1, RoadTransportRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getRoadTransportRelationshipLabelValue_RoadClass(), ecorePackage.getEString(), "roadClass", "route", 0, 1, RoadTransportRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getRoadTransportRelationshipLabelValue_NumberCrossings(), ecorePackage.getEInt(), "numberCrossings", "1", 0, 1, RoadTransportRelationshipLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Initialize enums and add enum literals
+		initEEnum(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.class, "RelativePhysicalRelationship"); //$NON-NLS-1$
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.UNSPECIFIED_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.ABOVE_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.BELOW_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.RIGHT_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.LEFT_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.NORTH_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.SOUTH_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.WEST_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.EAST_OF_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.CONTAINS_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.CONTAINED_BY_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.OVERLAPS_LITERAL);
+		addEEnumLiteral(relativePhysicalRelationshipEEnum, RelativePhysicalRelationship.ORBITS_LITERAL);
+
+		initEEnum(transportModeEEnum, TransportMode.class, "TransportMode"); //$NON-NLS-1$
+		addEEnumLiteral(transportModeEEnum, TransportMode.UNSPECIFIED_LITERAL);
+		addEEnumLiteral(transportModeEEnum, TransportMode.AIR_LITERAL);
+		addEEnumLiteral(transportModeEEnum, TransportMode.ROAD_LITERAL);
+		addEEnumLiteral(transportModeEEnum, TransportMode.RAIL_LITERAL);
+		addEEnumLiteral(transportModeEEnum, TransportMode.MARINE_LITERAL);
+		addEEnumLiteral(transportModeEEnum, TransportMode.FOOT_LITERAL);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //LabelsPackageImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelImpl.java
new file mode 100644
index 0000000..8c92a91
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelImpl.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import org.eclipse.emf.common.notify.Notification;
+//import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl;
+
+//import org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl;
+//
+//import org.eclipse.emf.ecore.InternalEObject;
+//
+//import org.eclipse.emf.ecore.impl.ENotificationImpl;
+//
+//import org.eclipse.emf.ecore.util.EcoreUtil;
+//
+//import org.eclipse.stem.core.graph.Edge;
+//import org.eclipse.stem.core.graph.GraphPackage;
+//
+//import org.eclipse.stem.core.graph.impl.LabelImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Physical Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class PhysicalRelationshipLabelImpl extends StaticEdgeLabelImpl implements PhysicalRelationshipLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.PHYSICAL_RELATIONSHIP_LABEL;
+	}
+
+} //PhysicalRelationshipLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelValueImpl.java
new file mode 100644
index 0000000..cb0cb3a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PhysicalRelationshipLabelValueImpl.java
@@ -0,0 +1,50 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Physical Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PhysicalRelationshipLabelValueImpl extends LabelValueImpl implements PhysicalRelationshipLabelValue {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.PHYSICAL_RELATIONSHIP_LABEL_VALUE;
+	}
+
+} //PhysicalRelationshipLabelValueImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelImpl.java
new file mode 100644
index 0000000..aab8899
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelImpl.java
@@ -0,0 +1,431 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '
+ * <em><b>Population Label</b></em>'. <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl#getPopulationIdentifier <em>Population Identifier</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl#getCurrentPopulationValue <em>Current Population Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl#getPopulatedArea <em>Populated Area</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl#getValidYear <em>Valid Year</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PopulationLabelImpl extends StaticNodeLabelImpl implements
+		PopulationLabel {
+	/**
+	 * The default value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String POPULATION_IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String populationIdentifier = POPULATION_IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPopulatedArea() <em>Populated Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulatedArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double POPULATED_AREA_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getPopulatedArea() <em>Populated Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulatedArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected double populatedArea = POPULATED_AREA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getValidYear() <em>Valid Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValidYear()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int VALID_YEAR_EDEFAULT = 2006;
+
+	/**
+	 * The cached value of the '{@link #getValidYear() <em>Valid Year</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValidYear()
+	 * @generated
+	 * @ordered
+	 */
+	protected int validYear = VALID_YEAR_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected PopulationLabelImpl() {
+		super();
+		setTypeURI(PopulationLabel.URI_TYPE_POPULATION_LABEL);
+		setPopulationIdentifier(PopulationLabel.HUMAN);
+		setCurrentValue(LabelsFactory.eINSTANCE.createPopulationLabelValue());
+	} // PopulationLabelImpl
+
+	/**
+	 * @param adminLevel
+	 * @param countryCode
+	 * @param populationIdentifier
+	 * @param year
+	 *            the year for which the population data is valid
+	 * @param nodeCode
+	 * @return the URI for a specific population label for a geographic region
+	 */
+	public static URI createPopulationLabelURI(final int adminLevel,
+			final String countryCode, final String populationIdentifier,
+			final String year, final String nodeCode) {
+		final URI retValue = STEMURI
+				.createURI(PopulationLabel.URI_TYPE_POPULATION_LABEL_SEGMENT
+						+ "/" + countryCode + "/" + adminLevel + "/"
+						+ populationIdentifier + "/" + year + "/" + nodeCode);
+		return retValue;
+	} // createPopulationLabelURI
+
+	/**
+	 * 
+	 * @param populationIdentifier
+	 *            the identifier of the population
+	 * @param node
+	 *            the node with the label
+	 * @return the population label for the population on the node, or null if
+	 *         there isn't one.
+	 */
+	public static PopulationLabel getPopulationLabel(
+			final String populationIdentifier, final Node node) {
+		PopulationLabel retValue = null;
+
+		for (final Iterator<NodeLabel> nodeLabelIter = node.getLabels()
+				.iterator(); nodeLabelIter.hasNext();) {
+			final NodeLabel nodeLabel = nodeLabelIter.next();
+			// Is this a PopulationLabel?
+			if (nodeLabel instanceof PopulationLabel) {
+				// Yes
+				final PopulationLabel populationLabel = (PopulationLabel) nodeLabel;
+				// The correct population?
+				if (populationLabel.getPopulationIdentifier().equalsIgnoreCase(
+						populationIdentifier)) {
+					// Yes
+					retValue = populationLabel;
+					break;
+				}
+			}
+		} // for
+		return retValue;
+	} // getPopulationLabel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.POPULATION_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPopulationIdentifier() {
+		return populationIdentifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newPopulationIdentifier
+	 * 
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulationIdentifier(String newPopulationIdentifier) {
+		String oldPopulationIdentifier = populationIdentifier;
+		populationIdentifier = newPopulationIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER, oldPopulationIdentifier, populationIdentifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String getName() {
+		// Is a name set?
+		if (eIsSet(LabelsPackage.POPULATION_LABEL__NAME)) {
+			return name;
+		} else {
+			return getPopulationIdentifier();
+		}
+	} // getName
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newName
+	 * 
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.POPULATION_LABEL__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public PopulationLabelValue getCurrentPopulationValue() {
+		return (PopulationLabelValue) getCurrentValue();
+	} // getCurrentPopulationValue
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getPopulatedArea() {
+		return populatedArea;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulatedArea(double newPopulatedArea) {
+		double oldPopulatedArea = populatedArea;
+		populatedArea = newPopulatedArea;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.POPULATION_LABEL__POPULATED_AREA, oldPopulatedArea, populatedArea));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValidYear() {
+		return validYear;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValidYear(int newValidYear) {
+		int oldValidYear = validYear;
+		validYear = newValidYear;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.POPULATION_LABEL__VALID_YEAR, oldValidYear, validYear));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER:
+				return getPopulationIdentifier();
+			case LabelsPackage.POPULATION_LABEL__NAME:
+				return getName();
+			case LabelsPackage.POPULATION_LABEL__CURRENT_POPULATION_VALUE:
+				return getCurrentPopulationValue();
+			case LabelsPackage.POPULATION_LABEL__POPULATED_AREA:
+				return getPopulatedArea();
+			case LabelsPackage.POPULATION_LABEL__VALID_YEAR:
+				return getValidYear();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier((String)newValue);
+				return;
+			case LabelsPackage.POPULATION_LABEL__NAME:
+				setName((String)newValue);
+				return;
+			case LabelsPackage.POPULATION_LABEL__POPULATED_AREA:
+				setPopulatedArea((Double)newValue);
+				return;
+			case LabelsPackage.POPULATION_LABEL__VALID_YEAR:
+				setValidYear((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier(POPULATION_IDENTIFIER_EDEFAULT);
+				return;
+			case LabelsPackage.POPULATION_LABEL__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case LabelsPackage.POPULATION_LABEL__POPULATED_AREA:
+				setPopulatedArea(POPULATED_AREA_EDEFAULT);
+				return;
+			case LabelsPackage.POPULATION_LABEL__VALID_YEAR:
+				setValidYear(VALID_YEAR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER:
+				return POPULATION_IDENTIFIER_EDEFAULT == null ? populationIdentifier != null : !POPULATION_IDENTIFIER_EDEFAULT.equals(populationIdentifier);
+			case LabelsPackage.POPULATION_LABEL__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case LabelsPackage.POPULATION_LABEL__CURRENT_POPULATION_VALUE:
+				return getCurrentPopulationValue() != null;
+			case LabelsPackage.POPULATION_LABEL__POPULATED_AREA:
+				return populatedArea != POPULATED_AREA_EDEFAULT;
+			case LabelsPackage.POPULATION_LABEL__VALID_YEAR:
+				return validYear != VALID_YEAR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(
+				name == null ? populationIdentifier : name);
+		result.append(" [");
+		result.append(getCurrentPopulationValue().getCount());
+		// Was an area extend specified?
+		result
+				.append(eIsSet(LabelsPackage.POPULATION_LABEL__POPULATED_AREA) ? "/"
+						+ Double.toString(getPopulatedArea()) + "km^2"
+						: "");
+		result.append("]");
+		return result.toString();
+	} // toString
+} // PopulationLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelValueImpl.java
new file mode 100644
index 0000000..15da1b4
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/PopulationLabelValueImpl.java
@@ -0,0 +1,210 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Population Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl#getCount <em>Count</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PopulationLabelValueImpl extends LabelValueImpl implements
+		PopulationLabelValue {
+	/**
+	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double COUNT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected double count = COUNT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PopulationLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.POPULATION_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getCount() {
+		return count;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCount(double newCount) {
+		double oldCount = count;
+		count = newCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.POPULATION_LABEL_VALUE__COUNT, oldCount, count));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		// We don't reset
+		// setCount(COUNT_EDEFAULT);
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL_VALUE__COUNT:
+				return getCount();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL_VALUE__COUNT:
+				setCount((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL_VALUE__COUNT:
+				setCount(COUNT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.POPULATION_LABEL_VALUE__COUNT:
+				return count != COUNT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (count: "); //$NON-NLS-1$
+		result.append(count);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @return <code>true</code> if the value is sane
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = true;
+
+		retValue = retValue
+				&& (!eIsSet(LabelsPackage.POPULATION_LABEL_VALUE__COUNT) || getCount() >= 0);
+		assert retValue;
+
+		return retValue;
+	} // sane
+} // PopulationLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelImpl.java
new file mode 100644
index 0000000..1d2d531
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelImpl.java
@@ -0,0 +1,98 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Relative Physical Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelImpl#getCurrentRelationship <em>Current Relationship</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RelativePhysicalRelationshipLabelImpl extends
+		PhysicalRelationshipLabelImpl implements
+		RelativePhysicalRelationshipLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected RelativePhysicalRelationshipLabelImpl() {
+		super();
+		setCurrentValue(LabelsFactory.eINSTANCE
+				.createRelativePhysicalRelationshipLabelValue());
+	} // RelativePhysicalRelationshipLabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public RelativePhysicalRelationshipLabelValue getCurrentRelationship() {
+		return (RelativePhysicalRelationshipLabelValue) getCurrentValue();
+	} // getCurrentRelationship
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP:
+				return getCurrentRelationship();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP:
+				return getCurrentRelationship() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#toString()
+	 */
+	@Override
+	public String toString() {
+		return super.toString();
+	}
+
+} // RelativePhysicalRelationshipLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelValueImpl.java
new file mode 100644
index 0000000..f8a86b8
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RelativePhysicalRelationshipLabelValueImpl.java
@@ -0,0 +1,226 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Relative Physical Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl#isAdjacent <em>Adjacent</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RelativePhysicalRelationshipLabelValueImpl#getRelationship <em>Relationship</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RelativePhysicalRelationshipLabelValueImpl extends LabelValueImpl
+		implements RelativePhysicalRelationshipLabelValue {
+	/**
+	 * The default value of the '{@link #isAdjacent() <em>Adjacent</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isAdjacent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean ADJACENT_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isAdjacent() <em>Adjacent</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #isAdjacent()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean adjacent = ADJACENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRelationship() <em>Relationship</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRelationship()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final RelativePhysicalRelationship RELATIONSHIP_EDEFAULT = RelativePhysicalRelationship.UNSPECIFIED_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getRelationship() <em>Relationship</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRelationship()
+	 * @generated
+	 * @ordered
+	 */
+	protected RelativePhysicalRelationship relationship = RELATIONSHIP_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelativePhysicalRelationshipLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isAdjacent() {
+		return adjacent;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAdjacent(boolean newAdjacent) {
+		boolean oldAdjacent = adjacent;
+		adjacent = newAdjacent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT, oldAdjacent, adjacent));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationship getRelationship() {
+		return relationship;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelationship(RelativePhysicalRelationship newRelationship) {
+		RelativePhysicalRelationship oldRelationship = relationship;
+		relationship = newRelationship == null ? RELATIONSHIP_EDEFAULT : newRelationship;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP, oldRelationship, relationship));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT:
+				return isAdjacent();
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP:
+				return getRelationship();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT:
+				setAdjacent((Boolean)newValue);
+				return;
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP:
+				setRelationship((RelativePhysicalRelationship)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT:
+				setAdjacent(ADJACENT_EDEFAULT);
+				return;
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP:
+				setRelationship(RELATIONSHIP_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT:
+				return adjacent != ADJACENT_EDEFAULT;
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP:
+				return relationship != RELATIONSHIP_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer("");
+		result.append("adjacent: ");
+		result.append(adjacent);
+		result.append(", relationship: ");
+		result.append(relationship);
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		// Nothing to reset.
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		return true;
+	}
+
+} // RelativePhysicalRelationshipLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelImpl.java
new file mode 100644
index 0000000..95bdffe
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelImpl.java
@@ -0,0 +1,123 @@
+
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Road Transport Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class RoadTransportRelationshipLabelImpl extends PhysicalRelationshipLabelImpl implements RoadTransportRelationshipLabel {
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected RoadTransportRelationshipLabelImpl() {
+		super();
+		setCurrentValue(LabelsFactory.eINSTANCE
+				.createRoadTransportRelationshipLabelValue());
+	}
+	
+	/**
+	 * Create an edge between two nodes that represents the relationship of
+	 * sharing a common border.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param roadName
+	 *            the name of the roadway
+	 * @param roadClass           
+	 *            the class of road (Interstate, route, etc)
+	 * @param numCrossings
+	 *            the number of times the road crosses between nodeA and nodeB
+	 * @return an edge between the two nodes
+	 */
+	public static Edge createRoadTransportRelationship(final Node nodeA,
+			final Node nodeB, final String roadName, final String roadClass, final int numCrossings) {
+		final Edge retValue = EdgeImpl.createEdge(nodeA, nodeB);
+		final RoadTransportRelationshipLabel label = LabelsFactory.eINSTANCE
+				.createRoadTransportRelationshipLabel();
+		label.setURIOfIdentifiableToBeLabeled(retValue.getURI());
+
+		final RoadTransportRelationshipLabelValue labelValue = (RoadTransportRelationshipLabelValue) label
+				.getCurrentValue();
+		labelValue.setRoadName(roadName);
+		labelValue.setRoadClass(roadClass);
+		labelValue.setNumberCrossings(numCrossings);
+		retValue.setLabel(label);
+
+		return retValue;
+	} // createCommonBorderRelationship
+	
+	
+	/**
+	 * @param node
+	 *            the node
+	 * @return the Edges that represent the common border relationship between
+	 *         the node and other nodes.
+	 * @generated NOT
+	 */
+	public static List<Edge> getRoadEdgesFromNode(final Node node) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		if(node == null || node.getEdges() == null) return retValue;
+		
+		for (Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter.hasNext();) {
+			final Edge edge = edgeIter.next();
+			final EdgeLabel edgeLabel = edge.getLabel();
+			// Is the label a common border label?
+			if (edgeLabel instanceof RoadTransportRelationshipLabel) {
+				// Yes
+				retValue.add(edge);
+			}
+		} // for
+
+		return retValue;
+	} // getCommonBorderEdgesFromNode
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.ROAD_TRANSPORT_RELATIONSHIP_LABEL;
+	}
+
+} //RoadTransportRelationshipLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelValueImpl.java
new file mode 100644
index 0000000..1cba066
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/RoadTransportRelationshipLabelValueImpl.java
@@ -0,0 +1,277 @@
+
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Road Transport Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl#getRoadName <em>Road Name</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl#getRoadClass <em>Road Class</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl#getNumberCrossings <em>Number Crossings</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RoadTransportRelationshipLabelValueImpl extends PhysicalRelationshipLabelValueImpl implements RoadTransportRelationshipLabelValue {
+	/**
+	 * The default value of the '{@link #getRoadName() <em>Road Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ROAD_NAME_EDEFAULT = "road";
+
+	/**
+	 * The cached value of the '{@link #getRoadName() <em>Road Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String roadName = ROAD_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRoadClass() <em>Road Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ROAD_CLASS_EDEFAULT = "route";
+
+	/**
+	 * The cached value of the '{@link #getRoadClass() <em>Road Class</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadClass()
+	 * @generated
+	 * @ordered
+	 */
+	protected String roadClass = ROAD_CLASS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNumberCrossings() <em>Number Crossings</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberCrossings()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int NUMBER_CROSSINGS_EDEFAULT = 1;
+
+	/**
+	 * The cached value of the '{@link #getNumberCrossings() <em>Number Crossings</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNumberCrossings()
+	 * @generated
+	 * @ordered
+	 */
+	protected int numberCrossings = NUMBER_CROSSINGS_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RoadTransportRelationshipLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRoadName() {
+		return roadName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRoadName(String newRoadName) {
+		String oldRoadName = roadName;
+		roadName = newRoadName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME, oldRoadName, roadName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getRoadClass() {
+		return roadClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRoadClass(String newRoadClass) {
+		String oldRoadClass = roadClass;
+		roadClass = newRoadClass;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS, oldRoadClass, roadClass));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getNumberCrossings() {
+		return numberCrossings;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNumberCrossings(int newNumberCrossings) {
+		int oldNumberCrossings = numberCrossings;
+		numberCrossings = newNumberCrossings;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS, oldNumberCrossings, numberCrossings));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME:
+				return getRoadName();
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS:
+				return getRoadClass();
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS:
+				return getNumberCrossings();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME:
+				setRoadName((String)newValue);
+				return;
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS:
+				setRoadClass((String)newValue);
+				return;
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS:
+				setNumberCrossings((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME:
+				setRoadName(ROAD_NAME_EDEFAULT);
+				return;
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS:
+				setRoadClass(ROAD_CLASS_EDEFAULT);
+				return;
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS:
+				setNumberCrossings(NUMBER_CROSSINGS_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME:
+				return ROAD_NAME_EDEFAULT == null ? roadName != null : !ROAD_NAME_EDEFAULT.equals(roadName);
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS:
+				return ROAD_CLASS_EDEFAULT == null ? roadClass != null : !ROAD_CLASS_EDEFAULT.equals(roadClass);
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS:
+				return numberCrossings != NUMBER_CROSSINGS_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (roadName: "); //$NON-NLS-1$
+		result.append(roadName);
+		result.append(", roadClass: "); //$NON-NLS-1$
+		result.append(roadClass);
+		result.append(", numberCrossings: "); //$NON-NLS-1$
+		result.append(numberCrossings);
+		result.append(')');
+		return result.toString();
+	}
+
+} //RoadTransportRelationshipLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelImpl.java
new file mode 100644
index 0000000..a5b9e24
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelImpl.java
@@ -0,0 +1,892 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '
+ * <em><b>Transport Relationship Label</b></em>'. <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getTransportMode <em>Transport Mode</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getPopulationIdentifier <em>Population Identifier</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getTransportIdentifier <em>Transport Identifier</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getCurrentTransportRelationshipLabelValue <em>Current Transport Relationship Label Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getRateTimePeriod <em>Rate Time Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getDepartureCapacity <em>Departure Capacity</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getMaximumDepartureCapacity <em>Maximum Departure Capacity</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getCapacity <em>Capacity</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getMaximumCapacity <em>Maximum Capacity</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getTransitTime <em>Transit Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl#getStartUpDelay <em>Start Up Delay</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TransportRelationshipLabelImpl extends DynamicEdgeLabelImpl
+		implements TransportRelationshipLabel {
+	/**
+	 * The default value of the '{@link #getTransportMode() <em>Transport Mode</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getTransportMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final TransportMode TRANSPORT_MODE_EDEFAULT = TransportMode.UNSPECIFIED_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getTransportMode() <em>Transport Mode</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getTransportMode()
+	 * @generated
+	 * @ordered
+	 */
+	protected TransportMode transportMode = TRANSPORT_MODE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String POPULATION_IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String populationIdentifier = POPULATION_IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTransportIdentifier() <em>Transport Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getTransportIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TRANSPORT_IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTransportIdentifier() <em>Transport Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getTransportIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String transportIdentifier = TRANSPORT_IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRateTimePeriod() <em>Rate Time Period</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getRateTimePeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long RATE_TIME_PERIOD_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getRateTimePeriod() <em>Rate Time Period</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getRateTimePeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected long rateTimePeriod = RATE_TIME_PERIOD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDepartureCapacity() <em>Departure Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getDepartureCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int DEPARTURE_CAPACITY_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getMaximumDepartureCapacity() <em>Maximum Departure Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumDepartureCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int MAXIMUM_DEPARTURE_CAPACITY_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getMaximumDepartureCapacity() <em>Maximum Departure Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaximumDepartureCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected int maximumDepartureCapacity = MAXIMUM_DEPARTURE_CAPACITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getCapacity() <em>Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int CAPACITY_EDEFAULT = 0;
+
+	/**
+	 * The default value of the '{@link #getMaximumCapacity() <em>Maximum Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getMaximumCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int MAXIMUM_CAPACITY_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getMaximumCapacity() <em>Maximum Capacity</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getMaximumCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected int maximumCapacity = MAXIMUM_CAPACITY_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTransitTime() <em>Transit Time</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTransitTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long TRANSIT_TIME_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getTransitTime() <em>Transit Time</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTransitTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected long transitTime = TRANSIT_TIME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getStartUpDelay() <em>Start Up Delay</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getStartUpDelay()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long START_UP_DELAY_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getStartUpDelay() <em>Start Up Delay</em>}' attribute.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @see #getStartUpDelay()
+	 * @generated
+	 * @ordered
+	 */
+	protected long startUpDelay = START_UP_DELAY_EDEFAULT;
+
+	private EObject nodeBArrivals = null;
+
+	private EObject nodeAArrivals = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected TransportRelationshipLabelImpl() {
+		super();
+		setCurrentValue(LabelsFactory.eINSTANCE
+				.createTransportRelationshipLabelValue());
+		setNextValue(LabelsFactory.eINSTANCE
+				.createTransportRelationshipLabelValue());
+	} // TransportRelationshipLabelImpl
+
+	/**
+	 * Create an edge the represents a reflexive transportation relationship
+	 * between two nodes.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param transportMode
+	 *            the transportation mode
+	 * @param transportIdentifier
+	 *            the identifier of the transportation (e.g., road name)
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @param edgeDecorator
+	 * @return
+	 */
+	public static Edge createTransportRelationship(final Node nodeA,
+			final Node nodeB, final TransportMode transportMode,
+			final String transportIdentifier,
+			final String populationIdentifier, final long rateTimePeriod,
+			final int maximumCapacity, EdgeDecorator edgeDecorator) {
+		return createTransportRelationship(nodeA, nodeB, transportMode,
+				transportIdentifier, populationIdentifier, rateTimePeriod,
+				maximumCapacity, false, edgeDecorator);
+	} // createTransportRelationship
+
+	/**
+	 * Create an edge the represents a reflexive transportation relationship
+	 * between two nodes.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param transportMode
+	 *            the transportation mode
+	 * @param transportIdentifier
+	 *            the identifier of the transportation (e.g., road name)
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @param edgeDecorator
+	 * @return
+	 */
+	public static Edge createTransportRelationship(final Node nodeA,
+			final Node nodeB, final TransportMode transportMode,
+			final String transportIdentifier,
+			final String populationIdentifier, final long rateTimePeriod,
+			final int maximumCapacity, final boolean directed,
+			EdgeDecorator edgeDecorator) {
+		return createTransportRelationship(nodeA, nodeB, transportMode,
+				transportIdentifier, populationIdentifier, rateTimePeriod,
+				maximumCapacity, maximumCapacity, 0, 0, directed, edgeDecorator);
+	} // createTransportRelationship
+
+	/**
+	 * Create an edge the represents a reflexive transportation relationship
+	 * between two nodes.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param transportMode
+	 *            the transportation mode
+	 * @param transportIdentifier
+	 *            the identifier of the transportation (e.g., road name)
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @param edgeDecorator
+	 * @return
+	 */
+	public static Edge createTransportRelationship(final Node nodeA,
+			final Node nodeB, final TransportMode transportMode,
+			final String transportIdentifier,
+			final String populationIdentifier, final long rateTimePeriod,
+			final int maximumDepartureCapacity, final int maximumCapacity,
+			final long transitTime, final long startUpDelay,
+			EdgeDecorator edgeDecorator) {
+		return createTransportRelationship(nodeA, nodeB, transportMode,
+				transportIdentifier, populationIdentifier, rateTimePeriod,
+				maximumDepartureCapacity, maximumCapacity, transitTime,
+				startUpDelay, false, edgeDecorator);
+	} // createTransportRelationship
+
+	/**
+	 * Create an edge the represents a transportation relationship between two
+	 * nodes.
+	 * 
+	 * @param nodeA
+	 *            the first node
+	 * @param nodeB
+	 *            the second node
+	 * @param transportMode
+	 *            the transportation mode
+	 * @param transportIdentifier
+	 *            the identifier of the transportion (e.g., road name)
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @param rateTimePeriod
+	 *            the unit of time the population count is transported in
+	 *            (milliseconds)
+	 * @param directed
+	 *            if true then the relationship is only from nodeA to nodeB, and
+	 *            not the other way around. This means things move from nodeA to
+	 *            nodeB, but not in the other direction.
+	 * @param edgeDecorator
+	 *            TODO
+	 * @param populationCount
+	 *            the number of population members
+	 * @return
+	 */
+	public static Edge createTransportRelationship(final Node nodeA,
+			final Node nodeB, final TransportMode transportMode,
+			final String transportIdentifier,
+			final String populationIdentifier, final long rateTimePeriod,
+			final int maximumDepartureCapacity, final int maximumCapacity,
+			final long transitTime, final long startUpDelay,
+			final boolean directed, EdgeDecorator edgeDecorator) {
+
+		final Edge retValue = EdgeImpl.createEdge(nodeA, nodeB, directed);
+
+		final TransportRelationshipLabel label = LabelsFactory.eINSTANCE
+				.createTransportRelationshipLabel();
+		label.setURIOfIdentifiableToBeLabeled(retValue.getURI());
+		label.setDecorator(edgeDecorator);
+		label.setPopulationIdentifier(populationIdentifier);
+		label.setTransportIdentifier(transportIdentifier);
+		label.setRateTimePeriod(rateTimePeriod);
+		label.setMaximumDepartureCapacity(maximumDepartureCapacity);
+		label.setMaximumCapacity(maximumCapacity);
+		label.setTransitTime(transitTime);
+		label.setStartUpDelay(startUpDelay);
+		label.setTransportMode(transportMode);
+
+		final TransportRelationshipLabelValue trlv = label
+				.getCurrentTransportRelationshipLabelValue();
+		trlv.setAvailableDepartureCapacityProportion(1.0);
+
+		retValue.setLabel(label);
+		return retValue;
+	} // createTransportRelationship
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportMode getTransportMode() {
+		return transportMode;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransportMode(TransportMode newTransportMode) {
+		TransportMode oldTransportMode = transportMode;
+		transportMode = newTransportMode == null ? TRANSPORT_MODE_EDEFAULT : newTransportMode;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE, oldTransportMode, transportMode));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPopulationIdentifier() {
+		return populationIdentifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulationIdentifier(String newPopulationIdentifier) {
+		String oldPopulationIdentifier = populationIdentifier;
+		populationIdentifier = newPopulationIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER, oldPopulationIdentifier, populationIdentifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTransportIdentifier() {
+		return transportIdentifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransportIdentifier(String newTransportIdentifier) {
+		String oldTransportIdentifier = transportIdentifier;
+		transportIdentifier = newTransportIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER, oldTransportIdentifier, transportIdentifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public TransportRelationshipLabelValue getCurrentTransportRelationshipLabelValue() {
+		return (TransportRelationshipLabelValue) getCurrentValue();
+	} // getCurrentTransportRelationshipLabelValue
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getRateTimePeriod() {
+		return rateTimePeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRateTimePeriod(long newRateTimePeriod) {
+		long oldRateTimePeriod = rateTimePeriod;
+		rateTimePeriod = newRateTimePeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD, oldRateTimePeriod, rateTimePeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getDepartureCapacity() {
+		// $ANALYSIS-IGNORE
+		return (int) (getMaximumDepartureCapacity() * getCurrentTransportRelationshipLabelValue()
+				.getAvailableDepartureCapacityProportion());
+	} // getDepartureCapacity
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getMaximumDepartureCapacity() {
+		return maximumDepartureCapacity;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaximumDepartureCapacity(int newMaximumDepartureCapacity) {
+		int oldMaximumDepartureCapacity = maximumDepartureCapacity;
+		maximumDepartureCapacity = newMaximumDepartureCapacity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY, oldMaximumDepartureCapacity, maximumDepartureCapacity));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public int getCapacity() {
+		// $ANALYSIS-IGNORE
+		return (int) (getMaximumCapacity() * getCurrentTransportRelationshipLabelValue()
+				.getAvailableDepartureCapacityProportion());
+	} // getCapacity
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getMaximumCapacity() {
+		return maximumCapacity;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaximumCapacity(int newMaximumCapacity) {
+		int oldMaximumCapacity = maximumCapacity;
+		maximumCapacity = newMaximumCapacity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY, oldMaximumCapacity, maximumCapacity));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getTransitTime() {
+		return transitTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransitTime(long newTransitTime) {
+		long oldTransitTime = transitTime;
+		transitTime = newTransitTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME, oldTransitTime, transitTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getStartUpDelay() {
+		return startUpDelay;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStartUpDelay(long newStartUpDelay) {
+		long oldStartUpDelay = startUpDelay;
+		startUpDelay = newStartUpDelay;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY, oldStartUpDelay, startUpDelay));
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#send(org.eclipse.stem.core.graph.Node,
+	 *      org.eclipse.emf.ecore.EObject)
+	 */
+	public void send(Node here, EObject departees) {
+		// Are we sending from Node A?
+		if (getEdge().getA().equals(here)) {
+			// Yes
+			nodeBArrivals = departees;
+		} else {
+			// No
+			// Must be Node B
+			nodeAArrivals = departees;
+		}
+	} // send
+
+	/**
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#receive(org.eclipse.stem.core.graph.Node,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	public EList<EObject> receive(Node here, STEMTime currentTime) {
+		final EList<EObject> retValue = new BasicEList<EObject>();
+		// Are we receiving at Node A?
+		if (getEdge().getA().equals(here)) {
+			// Yes
+			// Anything to get?
+			if (nodeAArrivals != null) {
+				// Yes
+				retValue.add(nodeAArrivals);
+				nodeAArrivals = null;
+			}
+		} else {
+			// No
+			// Anything to get?
+			if (nodeBArrivals != null) {
+				// Yes
+				retValue.add(nodeBArrivals);
+				nodeBArrivals = null;
+			}
+		}
+		return retValue;
+	} // receive
+
+	/**
+	 * @param node
+	 *            the node
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @return the Edges that represent the transportation of population members
+	 *         to the node.
+	 */
+	public static List<Edge> getTransportEdgesToNode(final Node node,
+			final String populationIdentifier) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		for (Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = edgeIter.next();
+			// Is the edge directed away from us?
+			if (!edge.isDirected() || edge.isDirectedAt(node)) {
+				// No
+				// It could be transporting population members to the node then
+				final Label edgeLabel = edge.getLabel();
+				// Is the label a transport label?
+				if (edgeLabel instanceof TransportRelationshipLabel) {
+					// Yes
+					final TransportRelationshipLabel transportLabel = (TransportRelationshipLabel) edgeLabel;
+					// Same population?
+					if (transportLabel.getPopulationIdentifier()
+							.equalsIgnoreCase(populationIdentifier)) {
+						// Yes
+						// It's a keeper
+						retValue.add(edge);
+					}
+				}
+			}
+		} // for
+
+		return retValue;
+	} // getTransportEdgesToNode
+
+	/**
+	 * @param node
+	 *            the node
+	 * @param populationIdentifier
+	 *            the population being transported
+	 * @return the Edges that represent the transportation of population members
+	 *         to the node.
+	 */
+	public static List<Edge> getTransportEdgesFromNode(final Node node,
+			final String populationIdentifier) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		for (Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = edgeIter.next();
+			// Is the edge directed away from us?
+			if (!edge.isDirected() || !edge.isDirectedAt(node)) {
+				// Yes
+				// It could be transporting population members from the node
+				// then
+				final Label edgeLabel = edge.getLabel();
+				// Is the label a transport label?
+				if (edgeLabel instanceof TransportRelationshipLabel) {
+					// Yes
+					final TransportRelationshipLabel transportLabel = (TransportRelationshipLabel) edgeLabel;
+					// Same population?
+					if (transportLabel.getPopulationIdentifier()
+							.equalsIgnoreCase(populationIdentifier)) {
+						// Yes
+						// It's a keeper
+						retValue.add(edge);
+					}
+				}
+			}
+		} // for
+
+		return retValue;
+	} // getTransportEdgesToNode
+
+	@Override
+	public void reset() {
+		super.reset();
+		nodeAArrivals = null;
+		nodeBArrivals = null;
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE:
+				return getTransportMode();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER:
+				return getPopulationIdentifier();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER:
+				return getTransportIdentifier();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE:
+				return getCurrentTransportRelationshipLabelValue();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD:
+				return getRateTimePeriod();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY:
+				return getDepartureCapacity();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY:
+				return getMaximumDepartureCapacity();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__CAPACITY:
+				return getCapacity();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY:
+				return getMaximumCapacity();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME:
+				return getTransitTime();
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY:
+				return getStartUpDelay();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE:
+				setTransportMode((TransportMode)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier((String)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER:
+				setTransportIdentifier((String)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD:
+				setRateTimePeriod((Long)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY:
+				setMaximumDepartureCapacity((Integer)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY:
+				setMaximumCapacity((Integer)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME:
+				setTransitTime((Long)newValue);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY:
+				setStartUpDelay((Long)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE:
+				setTransportMode(TRANSPORT_MODE_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier(POPULATION_IDENTIFIER_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER:
+				setTransportIdentifier(TRANSPORT_IDENTIFIER_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD:
+				setRateTimePeriod(RATE_TIME_PERIOD_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY:
+				setMaximumDepartureCapacity(MAXIMUM_DEPARTURE_CAPACITY_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY:
+				setMaximumCapacity(MAXIMUM_CAPACITY_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME:
+				setTransitTime(TRANSIT_TIME_EDEFAULT);
+				return;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY:
+				setStartUpDelay(START_UP_DELAY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE:
+				return transportMode != TRANSPORT_MODE_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER:
+				return POPULATION_IDENTIFIER_EDEFAULT == null ? populationIdentifier != null : !POPULATION_IDENTIFIER_EDEFAULT.equals(populationIdentifier);
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER:
+				return TRANSPORT_IDENTIFIER_EDEFAULT == null ? transportIdentifier != null : !TRANSPORT_IDENTIFIER_EDEFAULT.equals(transportIdentifier);
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE:
+				return getCurrentTransportRelationshipLabelValue() != null;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD:
+				return rateTimePeriod != RATE_TIME_PERIOD_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY:
+				return getDepartureCapacity() != DEPARTURE_CAPACITY_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY:
+				return maximumDepartureCapacity != MAXIMUM_DEPARTURE_CAPACITY_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__CAPACITY:
+				return getCapacity() != CAPACITY_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY:
+				return maximumCapacity != MAXIMUM_CAPACITY_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME:
+				return transitTime != TRANSIT_TIME_EDEFAULT;
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY:
+				return startUpDelay != START_UP_DELAY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+		StringBuffer result = new StringBuffer();
+		result.append(transportMode);
+		result.append(", ");
+		result.append(populationIdentifier);
+		result.append(", \"");
+		result.append(transportIdentifier);
+		result.append("\" ");
+		result.append(getCurrentTransportRelationshipLabelValue().toString());
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.DynamicLabelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && rateTimePeriod >= 0;
+		assert retValue;
+
+		retValue = retValue
+				&& getCurrentTransportRelationshipLabelValue().sane();
+
+		return retValue;
+	}
+
+} // TransportRelationshipLabelImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelValueImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelValueImpl.java
new file mode 100644
index 0000000..e1f1006
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/impl/TransportRelationshipLabelValueImpl.java
@@ -0,0 +1,185 @@
+package org.eclipse.stem.definitions.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Transport Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelValueImpl#getAvailableDepartureCapacityProportion <em>Available Departure Capacity Proportion</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TransportRelationshipLabelValueImpl extends LabelValueImpl
+		implements TransportRelationshipLabelValue {
+	/**
+	 * The default value of the '{@link #getAvailableDepartureCapacityProportion() <em>Available Departure Capacity Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAvailableDepartureCapacityProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double AVAILABLE_DEPARTURE_CAPACITY_PROPORTION_EDEFAULT = 1.0;
+
+	/**
+	 * The cached value of the '{@link #getAvailableDepartureCapacityProportion() <em>Available Departure Capacity Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAvailableDepartureCapacityProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected double availableDepartureCapacityProportion = AVAILABLE_DEPARTURE_CAPACITY_PROPORTION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportRelationshipLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAvailableDepartureCapacityProportion() {
+		return availableDepartureCapacityProportion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAvailableDepartureCapacityProportion(double newAvailableDepartureCapacityProportion) {
+		double oldAvailableDepartureCapacityProportion = availableDepartureCapacityProportion;
+		availableDepartureCapacityProportion = newAvailableDepartureCapacityProportion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION, oldAvailableDepartureCapacityProportion, availableDepartureCapacityProportion));
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		// Nothing to do
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = true;
+
+		retValue = retValue && availableDepartureCapacityProportion >= 0 && availableDepartureCapacityProportion<= AVAILABLE_DEPARTURE_CAPACITY_PROPORTION_EDEFAULT;
+		assert retValue;
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION:
+				return getAvailableDepartureCapacityProportion();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION:
+				setAvailableDepartureCapacityProportion((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION:
+				setAvailableDepartureCapacityProportion(AVAILABLE_DEPARTURE_CAPACITY_PROPORTION_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION:
+				return availableDepartureCapacityProportion != AVAILABLE_DEPARTURE_CAPACITY_PROPORTION_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append(" (available proportion: ");
+		result.append(availableDepartureCapacityProportion);
+		result.append(')');
+		return result.toString();
+	} // toString
+
+} // TransportRelationshipLabelValueImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsActionBarContributor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsActionBarContributor.java
new file mode 100644
index 0000000..8e37633
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.definitions.labels.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Labels model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("labels-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("labels-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_LabelsEditor_menu"), "org.eclipse.stem.definitions.labelsMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsEditor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsEditor.java
new file mode 100644
index 0000000..254c08b
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/presentation/LabelsEditor.java
@@ -0,0 +1,1564 @@
+package org.eclipse.stem.definitions.labels.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.provider.EdgesItemProviderAdapterFactory;
+
+import org.eclipse.stem.definitions.nodes.provider.NodesItemProviderAdapterFactory;
+
+import org.eclipse.stem.definitions.types.provider.TypesItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Labels model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(LabelsEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(LabelsEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == LabelsEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						removedResources.addAll(visitor.getRemovedResources());
+						if (!isDirty()) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 getSite().getPage().closeEditor(LabelsEditor.this, false);
+									 }
+								 });
+						}
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						changedResources.addAll(visitor.getChangedResources());
+						if (getSite().getPage().getActiveEditor() == LabelsEditor.this) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 handleActivate();
+									 }
+								 });
+						}
+					}
+				}
+				catch (CoreException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(LabelsEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						DefinitionsEditPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EdgesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new NodesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TypesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			// I don't know if this should be run this deferred
+			// because we might have to give the editor a chance to process the viewer update events
+			// and hence to update the views first.
+			//
+			//
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			runnable.run();
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						LabelsEditor.this.setSelectionToViewer(selection);
+						LabelsEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelItemProvider.java
new file mode 100644
index 0000000..41b853a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelItemProvider.java
@@ -0,0 +1,194 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.StaticNodeLabelItemProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+//import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.definitions.labels.AreaLabel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class AreaLabelItemProvider extends StaticNodeLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addCurrentAreaValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Area Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentAreaValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_AreaLabel_currentAreaValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_AreaLabel_currentAreaValue_feature", "_UI_AreaLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.AREA_LABEL__CURRENT_AREA_VALUE,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+		final AreaLabel areaLabel = (AreaLabel) object;
+		final IItemLabelProvider alvip = (AreaLabelValueItemProvider) itemProviderFactory
+				.adapt(areaLabel.getCurrentAreaValue(),
+						IItemLabelProvider.class);
+
+		final String geoName = GeographicNames.getName(areaLabel.getURI());
+		final StringBuilder sb = new StringBuilder(
+				geoName.startsWith("!") ? getTextGen(object) : geoName);
+		sb.append(" (");
+		sb.append(alvip.getText(areaLabel.getCurrentAreaValue()));
+		sb.append(")");
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((AreaLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_AreaLabel_type") : //$NON-NLS-1$
+			getString("_UI_AreaLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelValueItemProvider.java
new file mode 100644
index 0000000..26a1e44
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/AreaLabelValueItemProvider.java
@@ -0,0 +1,223 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.NumberFormat;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.definitions.labels.AreaLabelValue} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class AreaLabelValueItemProvider extends LabelValueItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+
+	private static final int NUMBER_OF_FACTIONAL_DIGITS = 2;
+	private static NumberFormat formatter;
+
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+	
+	/*
+	 * @return a number formatter
+	 */
+	static NumberFormat getFormatter() {
+		// Is there already a formatter?
+		if (formatter == null) {
+			// No
+			formatter = NumberFormat.getNumberInstance();
+			formatter.setMaximumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+			formatter.setMinimumFractionDigits(NUMBER_OF_FACTIONAL_DIGITS);
+		}
+		return formatter;
+	} // getFormatter
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAreaPropertyDescriptor(object);
+			addAverageExtentPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Area feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAreaPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_AreaLabelValue_area_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_AreaLabelValue_area_feature", "_UI_AreaLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.AREA_LABEL_VALUE__AREA,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Average Extent feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAverageExtentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_AreaLabelValue_averageExtent_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_AreaLabelValue_averageExtent_feature", "_UI_AreaLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.AREA_LABEL_VALUE__AVERAGE_EXTENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final StringBuilder sb = new StringBuilder(getFormatter().format(((AreaLabelValue)object).getArea()));
+		sb.append(" km^2");
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public String getTextGen(Object object) {
+		AreaLabelValue areaLabelValue = (AreaLabelValue)object;
+		return getString("_UI_AreaLabelValue_type") + " " + areaLabelValue.getArea(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(AreaLabelValue.class)) {
+			case LabelsPackage.AREA_LABEL_VALUE__AREA:
+			case LabelsPackage.AREA_LABEL_VALUE__AVERAGE_EXTENT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelItemProvider.java
new file mode 100644
index 0000000..df9786b
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelItemProvider.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+//import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonBorderRelationshipLabelItemProvider extends
+		PhysicalRelationshipLabelItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabelItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final URI labelURI = ((CommonBorderRelationshipLabel)object).getURI();
+		final String lastSegment = labelURI.lastSegment().toString();
+		final int i = lastSegment.indexOf("_");
+		final String firstISOKey = lastSegment.substring(0, i);
+		final String secondISOKey = lastSegment.substring(i+1);
+		
+		final String firstGeoName = GeographicNames.getName(firstISOKey);
+		final String secondGeoName = GeographicNames.getName(secondISOKey);
+		
+		final StringBuilder sb = new StringBuilder(
+				firstGeoName.startsWith("!") ? firstISOKey : firstGeoName);
+		final Edge edge = ((EdgeLabel) object).getEdge();
+		sb.append(edge.isDirected() ? " -> " : " <-> ");
+		sb
+				.append(secondGeoName.startsWith("!") ? secondGeoName
+						: secondGeoName);
+
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((CommonBorderRelationshipLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_CommonBorderRelationshipLabel_type") : //$NON-NLS-1$
+			getString("_UI_CommonBorderRelationshipLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelValueItemProvider.java
new file mode 100644
index 0000000..9bc2945
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/CommonBorderRelationshipLabelValueItemProvider.java
@@ -0,0 +1,146 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonBorderRelationshipLabelValueItemProvider extends
+		PhysicalRelationshipLabelValueItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabelValueItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addBorderLengthPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Border Length feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addBorderLengthPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CommonBorderRelationshipLabelValue_borderLength_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_CommonBorderRelationshipLabelValue_borderLength_feature", "_UI_CommonBorderRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		CommonBorderRelationshipLabelValue commonBorderRelationshipLabelValue = (CommonBorderRelationshipLabelValue)object;
+		return commonBorderRelationshipLabelValue.getBorderLength() + " km"; //$NON-NLS-1$ 
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		CommonBorderRelationshipLabelValue commonBorderRelationshipLabelValue = (CommonBorderRelationshipLabelValue)object;
+		return getString("_UI_CommonBorderRelationshipLabelValue_type") + " " + commonBorderRelationshipLabelValue.getBorderLength(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(CommonBorderRelationshipLabelValue.class)) {
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE__BORDER_LENGTH:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/DefinitionsEditPlugin.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/DefinitionsEditPlugin.java
new file mode 100644
index 0000000..d3960af
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/DefinitionsEditPlugin.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the central singleton for the Definitions editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DefinitionsEditPlugin extends EMFPlugin {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "";
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final DefinitionsEditPlugin INSTANCE = new DefinitionsEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DefinitionsEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				CoreEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/LabelsItemProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/LabelsItemProviderAdapterFactory.java
new file mode 100644
index 0000000..44a0ff0
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/LabelsItemProviderAdapterFactory.java
@@ -0,0 +1,528 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @generated
+ */
+public class LabelsItemProviderAdapterFactory extends LabelsAdapterFactory
+		implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @generated
+	 */
+	public LabelsItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.PopulationLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PopulationLabelItemProvider populationLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.definitions.labels.PopulationLabel}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPopulationLabelAdapter() {
+		if (populationLabelItemProvider == null) {
+			populationLabelItemProvider = new PopulationLabelItemProvider(this);
+		}
+
+		return populationLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.PopulationLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PopulationLabelValueItemProvider populationLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.PopulationLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPopulationLabelValueAdapter() {
+		if (populationLabelValueItemProvider == null) {
+			populationLabelValueItemProvider = new PopulationLabelValueItemProvider(this);
+		}
+
+		return populationLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all
+	 * {@link org.eclipse.stem.definitions.labels.AreaLabel} instances. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected AreaLabelItemProvider areaLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.definitions.labels.AreaLabel}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAreaLabelAdapter() {
+		if (areaLabelItemProvider == null) {
+			areaLabelItemProvider = new AreaLabelItemProvider(this);
+		}
+
+		return areaLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.AreaLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AreaLabelValueItemProvider areaLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.definitions.labels.AreaLabelValue}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAreaLabelValueAdapter() {
+		if (areaLabelValueItemProvider == null) {
+			areaLabelValueItemProvider = new AreaLabelValueItemProvider(this);
+		}
+
+		return areaLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelativePhysicalRelationshipLabelItemProvider relativePhysicalRelationshipLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRelativePhysicalRelationshipLabelAdapter() {
+		if (relativePhysicalRelationshipLabelItemProvider == null) {
+			relativePhysicalRelationshipLabelItemProvider = new RelativePhysicalRelationshipLabelItemProvider(this);
+		}
+
+		return relativePhysicalRelationshipLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelativePhysicalRelationshipLabelValueItemProvider relativePhysicalRelationshipLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRelativePhysicalRelationshipLabelValueAdapter() {
+		if (relativePhysicalRelationshipLabelValueItemProvider == null) {
+			relativePhysicalRelationshipLabelValueItemProvider = new RelativePhysicalRelationshipLabelValueItemProvider(this);
+		}
+
+		return relativePhysicalRelationshipLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CommonBorderRelationshipLabelItemProvider commonBorderRelationshipLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCommonBorderRelationshipLabelAdapter() {
+		if (commonBorderRelationshipLabelItemProvider == null) {
+			commonBorderRelationshipLabelItemProvider = new CommonBorderRelationshipLabelItemProvider(this);
+		}
+
+		return commonBorderRelationshipLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CommonBorderRelationshipLabelValueItemProvider commonBorderRelationshipLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCommonBorderRelationshipLabelValueAdapter() {
+		if (commonBorderRelationshipLabelValueItemProvider == null) {
+			commonBorderRelationshipLabelValueItemProvider = new CommonBorderRelationshipLabelValueItemProvider(this);
+		}
+
+		return commonBorderRelationshipLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportRelationshipLabelItemProvider transportRelationshipLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTransportRelationshipLabelAdapter() {
+		if (transportRelationshipLabelItemProvider == null) {
+			transportRelationshipLabelItemProvider = new TransportRelationshipLabelItemProvider(this);
+		}
+
+		return transportRelationshipLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportRelationshipLabelValueItemProvider transportRelationshipLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTransportRelationshipLabelValueAdapter() {
+		if (transportRelationshipLabelValueItemProvider == null) {
+			transportRelationshipLabelValueItemProvider = new TransportRelationshipLabelValueItemProvider(this);
+		}
+
+		return transportRelationshipLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabelValueItemProvider physicalRelationshipLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPhysicalRelationshipLabelValueAdapter() {
+		if (physicalRelationshipLabelValueItemProvider == null) {
+			physicalRelationshipLabelValueItemProvider = new PhysicalRelationshipLabelValueItemProvider(this);
+		}
+
+		return physicalRelationshipLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RoadTransportRelationshipLabelItemProvider roadTransportRelationshipLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRoadTransportRelationshipLabelAdapter() {
+		if (roadTransportRelationshipLabelItemProvider == null) {
+			roadTransportRelationshipLabelItemProvider = new RoadTransportRelationshipLabelItemProvider(this);
+		}
+
+		return roadTransportRelationshipLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RoadTransportRelationshipLabelValueItemProvider roadTransportRelationshipLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRoadTransportRelationshipLabelValueAdapter() {
+		if (roadTransportRelationshipLabelValueItemProvider == null) {
+			roadTransportRelationshipLabelValueItemProvider = new RoadTransportRelationshipLabelValueItemProvider(this);
+		}
+
+		return roadTransportRelationshipLabelValueItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param parentAdapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(
+			ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param type
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifier
+	 * @param type
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @param type
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifyChangedListener
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifyChangedListener
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void dispose() {
+		if (areaLabelItemProvider != null) areaLabelItemProvider.dispose();
+		if (areaLabelValueItemProvider != null) areaLabelValueItemProvider.dispose();
+		if (commonBorderRelationshipLabelItemProvider != null) commonBorderRelationshipLabelItemProvider.dispose();
+		if (commonBorderRelationshipLabelValueItemProvider != null) commonBorderRelationshipLabelValueItemProvider.dispose();
+		if (populationLabelItemProvider != null) populationLabelItemProvider.dispose();
+		if (populationLabelValueItemProvider != null) populationLabelValueItemProvider.dispose();
+		if (relativePhysicalRelationshipLabelItemProvider != null) relativePhysicalRelationshipLabelItemProvider.dispose();
+		if (relativePhysicalRelationshipLabelValueItemProvider != null) relativePhysicalRelationshipLabelValueItemProvider.dispose();
+		if (transportRelationshipLabelItemProvider != null) transportRelationshipLabelItemProvider.dispose();
+		if (transportRelationshipLabelValueItemProvider != null) transportRelationshipLabelValueItemProvider.dispose();
+		if (physicalRelationshipLabelValueItemProvider != null) physicalRelationshipLabelValueItemProvider.dispose();
+		if (roadTransportRelationshipLabelItemProvider != null) roadTransportRelationshipLabelItemProvider.dispose();
+		if (roadTransportRelationshipLabelValueItemProvider != null) roadTransportRelationshipLabelValueItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelItemProvider.java
new file mode 100644
index 0000000..e2a3491
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelItemProvider.java
@@ -0,0 +1,157 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+//import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.provider.StaticEdgeLabelItemProvider;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+//import org.eclipse.stem.core.graph.provider.DynamicEdgeLabelItemProvider;
+//
+//import org.eclipse.stem.core.graph.provider.LabelItemProvider;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class PhysicalRelationshipLabelItemProvider extends StaticEdgeLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public PhysicalRelationshipLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final URI labelURI = ((PhysicalRelationshipLabel) object).getURI();
+		final String lastSegment = labelURI
+				.segment(labelURI.segmentCount() - 2).toString();
+		final int i = lastSegment.indexOf("_");
+		final String firstISOKey = lastSegment.substring(0, i);
+		final String secondISOKey = lastSegment.substring(i + 1);
+
+		final String firstGeoName = GeographicNames.getName(firstISOKey);
+		final String secondGeoName = GeographicNames.getName(secondISOKey);
+
+		final StringBuilder sb = new StringBuilder(
+				firstGeoName.startsWith("!") ? firstISOKey : firstGeoName);
+		final Edge edge = ((EdgeLabel) object).getEdge();
+		sb.append(edge.isDirected() ? " -> " : " <-> ");
+		sb
+				.append(secondGeoName.startsWith("!") ? secondGeoName
+						: secondGeoName);
+
+		return sb.toString();
+	} // getText
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((PhysicalRelationshipLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_PhysicalRelationshipLabel_type") : //$NON-NLS-1$
+			getString("_UI_PhysicalRelationshipLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelValueItemProvider.java
new file mode 100644
index 0000000..9e224a7
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PhysicalRelationshipLabelValueItemProvider.java
@@ -0,0 +1,119 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PhysicalRelationshipLabelValueItemProvider
+	extends LabelValueItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalRelationshipLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_PhysicalRelationshipLabelValue_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelItemProvider.java
new file mode 100644
index 0000000..0a870d6
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelItemProvider.java
@@ -0,0 +1,291 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.StaticNodeLabelItemProvider;
+//import org.eclipse.stem.definitions.labels.AreaLabel;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.definitions.labels.PopulationLabel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class PopulationLabelItemProvider extends StaticNodeLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addPopulationIdentifierPropertyDescriptor(object);
+			addNamePropertyDescriptor(object);
+			addCurrentPopulationValuePropertyDescriptor(object);
+			addPopulatedAreaPropertyDescriptor(object);
+			addValidYearPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Identifier feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPopulationIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabel_populationIdentifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabel_populationIdentifier_feature", "_UI_PopulationLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL__POPULATION_IDENTIFIER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabel_name_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabel_name_feature", "_UI_PopulationLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL__NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Population Value feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentPopulationValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabel_currentPopulationValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabel_currentPopulationValue_feature", "_UI_PopulationLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL__CURRENT_POPULATION_VALUE,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Populated Area feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addPopulatedAreaPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabel_populatedArea_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabel_populatedArea_feature", "_UI_PopulationLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL__POPULATED_AREA,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Valid Year feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addValidYearPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabel_validYear_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabel_validYear_feature", "_UI_PopulationLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL__VALID_YEAR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final StringBuilder sb = new StringBuilder();
+		final PopulationLabel populationLabel = (PopulationLabel) object;
+
+		sb.append(GeographicNames.getName(populationLabel
+				.getURIOfIdentifiableToBeLabeled()));
+		sb.append(", \"");
+		sb.append(populationLabel.getPopulationIdentifier());
+		sb.append("\" population: ");
+		sb.append((int) populationLabel.getCurrentPopulationValue().getCount());
+		sb.append(populationLabel.getPopulatedArea() == 0.0 ? "" : (" ("
+				+ populationLabel.getPopulatedArea() + " km^2)"));
+
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		String label = ((PopulationLabel)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_PopulationLabel_type") : //$NON-NLS-1$
+			getString("_UI_PopulationLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(PopulationLabel.class)) {
+			case LabelsPackage.POPULATION_LABEL__POPULATION_IDENTIFIER:
+			case LabelsPackage.POPULATION_LABEL__NAME:
+			case LabelsPackage.POPULATION_LABEL__POPULATED_AREA:
+			case LabelsPackage.POPULATION_LABEL__VALID_YEAR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelValueItemProvider.java
new file mode 100644
index 0000000..eaf6fd4
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/PopulationLabelValueItemProvider.java
@@ -0,0 +1,180 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.PopulationLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class PopulationLabelValueItemProvider extends LabelValueItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addCountPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Count feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PopulationLabelValue_count_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationLabelValue_count_feature", "_UI_PopulationLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.POPULATION_LABEL_VALUE__COUNT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		PopulationLabelValue populationLabelValue = (PopulationLabelValue) object;
+		return Integer.toString((int) populationLabelValue.getCount());
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		PopulationLabelValue populationLabelValue = (PopulationLabelValue)object;
+		return getString("_UI_PopulationLabelValue_type") + " " + populationLabelValue.getCount(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(PopulationLabelValue.class)) {
+			case LabelsPackage.POPULATION_LABEL_VALUE__COUNT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelItemProvider.java
new file mode 100644
index 0000000..012a8fa
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelItemProvider.java
@@ -0,0 +1,149 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+//import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RelativePhysicalRelationshipLabelItemProvider
+	extends PhysicalRelationshipLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addCurrentRelationshipPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Relationship feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentRelationshipPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RelativePhysicalRelationshipLabel_currentRelationship_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RelativePhysicalRelationshipLabel_currentRelationship_feature", "_UI_RelativePhysicalRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL__CURRENT_RELATIONSHIP,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		return super.getText(object);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((RelativePhysicalRelationshipLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_RelativePhysicalRelationshipLabel_type") : //$NON-NLS-1$
+			getString("_UI_RelativePhysicalRelationshipLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelValueItemProvider.java
new file mode 100644
index 0000000..1fc77cf
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RelativePhysicalRelationshipLabelValueItemProvider.java
@@ -0,0 +1,192 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RelativePhysicalRelationshipLabelValueItemProvider
+	extends LabelValueItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAdjacentPropertyDescriptor(object);
+			addRelationshipPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Adjacent feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAdjacentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RelativePhysicalRelationshipLabelValue_adjacent_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RelativePhysicalRelationshipLabelValue_adjacent_feature", "_UI_RelativePhysicalRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Relationship feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRelationshipPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RelativePhysicalRelationshipLabelValue_relationship_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RelativePhysicalRelationshipLabelValue_relationship_feature", "_UI_RelativePhysicalRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final StringBuilder sb = new StringBuilder();
+		final RelativePhysicalRelationshipLabelValue rprlv = (RelativePhysicalRelationshipLabelValue)object;
+		final RelativePhysicalRelationship relationship = rprlv.getRelationship();
+		sb.append(relationship.getLiteral());
+		sb.append(rprlv.isAdjacent() ? "/Adjacent" : "/Not Adjacent");
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		RelativePhysicalRelationshipLabelValue relativePhysicalRelationshipLabelValue = (RelativePhysicalRelationshipLabelValue)object;
+		return getString("_UI_RelativePhysicalRelationshipLabelValue_type") + " " + relativePhysicalRelationshipLabelValue.isAdjacent(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(RelativePhysicalRelationshipLabelValue.class)) {
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT:
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelItemProvider.java
new file mode 100644
index 0000000..aadf76f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelItemProvider.java
@@ -0,0 +1,146 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RoadTransportRelationshipLabelItemProvider
+	extends PhysicalRelationshipLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final URI labelURI = ((RoadTransportRelationshipLabel)object).getURI();
+		final String lastSegment = labelURI.lastSegment().toString();
+		final int i = lastSegment.indexOf("_");
+		final String firstISOKey = lastSegment.substring(0, i);
+		final String secondISOKey = lastSegment.substring(i+1);
+		
+		final String firstGeoName = GeographicNames.getName(firstISOKey);
+		final String secondGeoName = GeographicNames.getName(secondISOKey);
+		
+		final StringBuilder sb = new StringBuilder(
+				firstGeoName.startsWith("!") ? firstISOKey : firstGeoName);
+		final Edge edge = ((EdgeLabel) object).getEdge();
+		sb.append(edge.isDirected() ? " -> " : " <-> ");
+		sb
+				.append(secondGeoName.startsWith("!") ? secondGeoName
+						: secondGeoName);
+
+		return sb.toString();
+	} // getText
+
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((RoadTransportRelationshipLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_RoadTransportRelationshipLabel_type") : //$NON-NLS-1$
+			getString("_UI_RoadTransportRelationshipLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelValueItemProvider.java
new file mode 100644
index 0000000..d5bcde4
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/RoadTransportRelationshipLabelValueItemProvider.java
@@ -0,0 +1,211 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RoadTransportRelationshipLabelValueItemProvider
+	extends PhysicalRelationshipLabelValueItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addRoadNamePropertyDescriptor(object);
+			addRoadClassPropertyDescriptor(object);
+			addNumberCrossingsPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Road Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRoadNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RoadTransportRelationshipLabelValue_roadName_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RoadTransportRelationshipLabelValue_roadName_feature", "_UI_RoadTransportRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Road Class feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRoadClassPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RoadTransportRelationshipLabelValue_roadClass_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RoadTransportRelationshipLabelValue_roadClass_feature", "_UI_RoadTransportRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Number Crossings feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNumberCrossingsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_RoadTransportRelationshipLabelValue_numberCrossings_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_RoadTransportRelationshipLabelValue_numberCrossings_feature", "_UI_RoadTransportRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final StringBuilder sb = new StringBuilder();
+		final RoadTransportRelationshipLabelValue labelValue = (RoadTransportRelationshipLabelValue)object;
+		sb.append(labelValue.getRoadClass());
+		sb.append(": \"");
+		sb.append(labelValue.getRoadName());
+		sb.append("\", Crossings: ");
+		sb.append(labelValue.getNumberCrossings());
+		
+		return sb.toString();
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public String getTextGen(Object object) {
+		String label = ((RoadTransportRelationshipLabelValue)object).getRoadName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_RoadTransportRelationshipLabelValue_type") : //$NON-NLS-1$
+			getString("_UI_RoadTransportRelationshipLabelValue_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(RoadTransportRelationshipLabelValue.class)) {
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_NAME:
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__ROAD_CLASS:
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE__NUMBER_CROSSINGS:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelItemProvider.java
new file mode 100644
index 0000000..6cd758e
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelItemProvider.java
@@ -0,0 +1,427 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.DynamicEdgeLabelItemProvider;
+
+//import org.eclipse.stem.core.graph.provider.LabelItemProvider;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+//import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportRelationshipLabelItemProvider extends DynamicEdgeLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TransportRelationshipLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTransportModePropertyDescriptor(object);
+			addPopulationIdentifierPropertyDescriptor(object);
+			addTransportIdentifierPropertyDescriptor(object);
+			addCurrentTransportRelationshipLabelValuePropertyDescriptor(object);
+			addRateTimePeriodPropertyDescriptor(object);
+			addDepartureCapacityPropertyDescriptor(object);
+			addMaximumDepartureCapacityPropertyDescriptor(object);
+			addCapacityPropertyDescriptor(object);
+			addMaximumCapacityPropertyDescriptor(object);
+			addTransitTimePropertyDescriptor(object);
+			addStartUpDelayPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Transport Mode feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTransportModePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_transportMode_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_transportMode_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Identifier feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPopulationIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_populationIdentifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_populationIdentifier_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Transport Identifier feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTransportIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_transportIdentifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_transportIdentifier_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Current Transport Relationship Label Value feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCurrentTransportRelationshipLabelValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_currentTransportRelationshipLabelValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_currentTransportRelationshipLabelValue_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__CURRENT_TRANSPORT_RELATIONSHIP_LABEL_VALUE,
+				 false,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Rate Time Period feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRateTimePeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_rateTimePeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_rateTimePeriod_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Departure Capacity feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDepartureCapacityPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_departureCapacity_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_departureCapacity_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Maximum Departure Capacity feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMaximumDepartureCapacityPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_maximumDepartureCapacity_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_maximumDepartureCapacity_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Capacity feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addCapacityPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_capacity_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_capacity_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__CAPACITY,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Maximum Capacity feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addMaximumCapacityPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_maximumCapacity_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_maximumCapacity_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Transit Time feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTransitTimePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_transitTime_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_transitTime_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Start Up Delay feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStartUpDelayPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabel_startUpDelay_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabel_startUpDelay_feature", "_UI_TransportRelationshipLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final URI labelURI = ((TransportRelationshipLabel)object).getURI();
+		final String lastSegment = labelURI.lastSegment().toString();
+		final int i = lastSegment.indexOf("_");
+		final String firstISOKey = lastSegment.substring(0, i);
+		final String secondISOKey = lastSegment.substring(i+1);
+		
+		final String firstGeoName = GeographicNames.getName(firstISOKey);
+		final String secondGeoName = GeographicNames.getName(secondISOKey);
+		
+		final StringBuilder sb = new StringBuilder(
+				firstGeoName.startsWith("!") ? firstISOKey : firstGeoName);
+		final Edge edge = ((EdgeLabel) object).getEdge();
+		sb.append(edge.isDirected() ? " -> " : " <-> ");
+		sb
+				.append(secondGeoName.startsWith("!") ? secondGeoName
+						: secondGeoName);
+
+		return sb.toString();
+	} // getText
+
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((TransportRelationshipLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TransportRelationshipLabel_type") : //$NON-NLS-1$
+			getString("_UI_TransportRelationshipLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TransportRelationshipLabel.class)) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_MODE:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__POPULATION_IDENTIFIER:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSPORT_IDENTIFIER:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__RATE_TIME_PERIOD:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__DEPARTURE_CAPACITY:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_DEPARTURE_CAPACITY:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__CAPACITY:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__MAXIMUM_CAPACITY:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__TRANSIT_TIME:
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL__START_UP_DELAY:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelValueItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelValueItemProvider.java
new file mode 100644
index 0000000..ec22641
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/provider/TransportRelationshipLabelValueItemProvider.java
@@ -0,0 +1,146 @@
+package org.eclipse.stem.definitions.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportRelationshipLabelValueItemProvider extends
+		LabelValueItemProvider implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider,
+		IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public TransportRelationshipLabelValueItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAvailableDepartureCapacityProportionPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Available Departure Capacity Proportion feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAvailableDepartureCapacityProportionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TransportRelationshipLabelValue_availableDepartureCapacityProportion_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TransportRelationshipLabelValue_availableDepartureCapacityProportion_feature", "_UI_TransportRelationshipLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		TransportRelationshipLabelValue transportRelationshipLabelValue = (TransportRelationshipLabelValue)object;
+		return getString("_UI_TransportRelationshipLabelValue_type") + " " + transportRelationshipLabelValue.getAvailableDepartureCapacityProportion(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TransportRelationshipLabelValue.class)) {
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE__AVAILABLE_DEPARTURE_CAPACITY_PROPORTION:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsAdapterFactory.java
new file mode 100644
index 0000000..5565387
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsAdapterFactory.java
@@ -0,0 +1,606 @@
+package org.eclipse.stem.definitions.labels.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.labels.*;
+
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> The <b>Adapter Factory</b> for the model. It
+ * provides an adapter <code>createXXX</code> method for each class of the
+ * model. <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.labels.LabelsPackage
+ * @generated
+ */
+public class LabelsAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static LabelsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public LabelsAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = LabelsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc --> This implementation returns <code>true</code>
+	 * if the object is either the model's package or is an instance object of
+	 * the model.
+	 * 
+	 * @param object
+	 * 
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected LabelsSwitch<Adapter> modelSwitch =
+		new LabelsSwitch<Adapter>() {
+			@Override
+			public Adapter caseAreaLabel(AreaLabel object) {
+				return createAreaLabelAdapter();
+			}
+			@Override
+			public Adapter caseAreaLabelValue(AreaLabelValue object) {
+				return createAreaLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseCommonBorderRelationshipLabel(CommonBorderRelationshipLabel object) {
+				return createCommonBorderRelationshipLabelAdapter();
+			}
+			@Override
+			public Adapter caseCommonBorderRelationshipLabelValue(CommonBorderRelationshipLabelValue object) {
+				return createCommonBorderRelationshipLabelValueAdapter();
+			}
+			@Override
+			public Adapter casePhysicalRelationshipLabel(PhysicalRelationshipLabel object) {
+				return createPhysicalRelationshipLabelAdapter();
+			}
+			@Override
+			public Adapter casePopulationLabel(PopulationLabel object) {
+				return createPopulationLabelAdapter();
+			}
+			@Override
+			public Adapter casePopulationLabelValue(PopulationLabelValue object) {
+				return createPopulationLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseRelativePhysicalRelationshipLabel(RelativePhysicalRelationshipLabel object) {
+				return createRelativePhysicalRelationshipLabelAdapter();
+			}
+			@Override
+			public Adapter caseRelativePhysicalRelationshipLabelValue(RelativePhysicalRelationshipLabelValue object) {
+				return createRelativePhysicalRelationshipLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseTransportRelationshipLabel(TransportRelationshipLabel object) {
+				return createTransportRelationshipLabelAdapter();
+			}
+			@Override
+			public Adapter caseTransportRelationshipLabelValue(TransportRelationshipLabelValue object) {
+				return createTransportRelationshipLabelValueAdapter();
+			}
+			@Override
+			public Adapter casePhysicalRelationshipLabelValue(PhysicalRelationshipLabelValue object) {
+				return createPhysicalRelationshipLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseRoadTransportRelationshipLabel(RoadTransportRelationshipLabel object) {
+				return createRoadTransportRelationshipLabelAdapter();
+			}
+			@Override
+			public Adapter caseRoadTransportRelationshipLabelValue(RoadTransportRelationshipLabelValue object) {
+				return createRoadTransportRelationshipLabelValueAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseNodeLabel(NodeLabel object) {
+				return createNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseStaticLabel(StaticLabel object) {
+				return createStaticLabelAdapter();
+			}
+			@Override
+			public Adapter caseStaticNodeLabel(StaticNodeLabel object) {
+				return createStaticNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseEdgeLabel(EdgeLabel object) {
+				return createEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseStaticEdgeLabel(StaticEdgeLabel object) {
+				return createStaticEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicLabel(DynamicLabel object) {
+				return createDynamicLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+				return createDynamicEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.PopulationLabel <em>Population Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel
+	 * @generated
+	 */
+	public Adapter createPopulationLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.PopulationLabelValue <em>Population Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabelValue
+	 * @generated
+	 */
+	public Adapter createPopulationLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.AreaLabel <em>Area Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabel
+	 * @generated
+	 */
+	public Adapter createAreaLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.AreaLabelValue <em>Area Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.AreaLabelValue
+	 * @generated
+	 */
+	public Adapter createAreaLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel <em>Physical Relationship Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel
+	 * @generated
+	 */
+	public Adapter createPhysicalRelationshipLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel <em>Relative Physical Relationship Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel
+	 * @generated
+	 */
+	public Adapter createRelativePhysicalRelationshipLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue <em>Relative Physical Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue
+	 * @generated
+	 */
+	public Adapter createRelativePhysicalRelationshipLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel <em>Common Border Relationship Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel
+	 * @generated
+	 */
+	public Adapter createCommonBorderRelationshipLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue <em>Common Border Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue
+	 * @generated
+	 */
+	public Adapter createCommonBorderRelationshipLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel <em>Transport Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel
+	 * @generated
+	 */
+	public Adapter createTransportRelationshipLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue <em>Transport Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue
+	 * @generated
+	 */
+	public Adapter createTransportRelationshipLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue <em>Physical Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue
+	 * @generated
+	 */
+	public Adapter createPhysicalRelationshipLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel <em>Road Transport Relationship Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel
+	 * @generated
+	 */
+	public Adapter createRoadTransportRelationshipLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue <em>Road Transport Relationship Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue
+	 * @generated
+	 */
+	public Adapter createRoadTransportRelationshipLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	public Adapter createNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticLabel <em>Static Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticLabel
+	 * @generated
+	 */
+	public Adapter createStaticLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticNodeLabel <em>Static Node Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticNodeLabel
+	 * @generated
+	 */
+	public Adapter createStaticNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	public Adapter createEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticEdgeLabel <em>Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticEdgeLabel
+	 * @generated
+	 */
+	public Adapter createStaticEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	public Adapter createDynamicLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicEdgeLabel <em>Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicEdgeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc --> This
+	 * default implementation returns null. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} // LabelsAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsSwitch.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsSwitch.java
new file mode 100644
index 0000000..99ec14a
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/labels/util/LabelsSwitch.java
@@ -0,0 +1,668 @@
+package org.eclipse.stem.definitions.labels.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.labels.*;
+
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> The <b>Switch</b> for the model's inheritance
+ * hierarchy. It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object and proceeding up the
+ * inheritance hierarchy until a non-null result is returned, which is the
+ * result of the switch. <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.labels.LabelsPackage
+ * @generated
+ */
+public class LabelsSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static LabelsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public LabelsSwitch() {
+		if (modelPackage == null) {
+			modelPackage = LabelsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param theEObject
+	 * 
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case LabelsPackage.AREA_LABEL: {
+				AreaLabel areaLabel = (AreaLabel)theEObject;
+				T1 result = caseAreaLabel(areaLabel);
+				if (result == null) result = caseStaticNodeLabel(areaLabel);
+				if (result == null) result = caseNodeLabel(areaLabel);
+				if (result == null) result = caseStaticLabel(areaLabel);
+				if (result == null) result = caseLabel(areaLabel);
+				if (result == null) result = caseModifiable(areaLabel);
+				if (result == null) result = caseIdentifiable(areaLabel);
+				if (result == null) result = caseComparable(areaLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.AREA_LABEL_VALUE: {
+				AreaLabelValue areaLabelValue = (AreaLabelValue)theEObject;
+				T1 result = caseAreaLabelValue(areaLabelValue);
+				if (result == null) result = caseLabelValue(areaLabelValue);
+				if (result == null) result = caseSanityChecker(areaLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL: {
+				CommonBorderRelationshipLabel commonBorderRelationshipLabel = (CommonBorderRelationshipLabel)theEObject;
+				T1 result = caseCommonBorderRelationshipLabel(commonBorderRelationshipLabel);
+				if (result == null) result = casePhysicalRelationshipLabel(commonBorderRelationshipLabel);
+				if (result == null) result = caseStaticEdgeLabel(commonBorderRelationshipLabel);
+				if (result == null) result = caseEdgeLabel(commonBorderRelationshipLabel);
+				if (result == null) result = caseStaticLabel(commonBorderRelationshipLabel);
+				if (result == null) result = caseLabel(commonBorderRelationshipLabel);
+				if (result == null) result = caseModifiable(commonBorderRelationshipLabel);
+				if (result == null) result = caseIdentifiable(commonBorderRelationshipLabel);
+				if (result == null) result = caseComparable(commonBorderRelationshipLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.COMMON_BORDER_RELATIONSHIP_LABEL_VALUE: {
+				CommonBorderRelationshipLabelValue commonBorderRelationshipLabelValue = (CommonBorderRelationshipLabelValue)theEObject;
+				T1 result = caseCommonBorderRelationshipLabelValue(commonBorderRelationshipLabelValue);
+				if (result == null) result = casePhysicalRelationshipLabelValue(commonBorderRelationshipLabelValue);
+				if (result == null) result = caseLabelValue(commonBorderRelationshipLabelValue);
+				if (result == null) result = caseSanityChecker(commonBorderRelationshipLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.PHYSICAL_RELATIONSHIP_LABEL: {
+				PhysicalRelationshipLabel physicalRelationshipLabel = (PhysicalRelationshipLabel)theEObject;
+				T1 result = casePhysicalRelationshipLabel(physicalRelationshipLabel);
+				if (result == null) result = caseStaticEdgeLabel(physicalRelationshipLabel);
+				if (result == null) result = caseEdgeLabel(physicalRelationshipLabel);
+				if (result == null) result = caseStaticLabel(physicalRelationshipLabel);
+				if (result == null) result = caseLabel(physicalRelationshipLabel);
+				if (result == null) result = caseModifiable(physicalRelationshipLabel);
+				if (result == null) result = caseIdentifiable(physicalRelationshipLabel);
+				if (result == null) result = caseComparable(physicalRelationshipLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.POPULATION_LABEL: {
+				PopulationLabel populationLabel = (PopulationLabel)theEObject;
+				T1 result = casePopulationLabel(populationLabel);
+				if (result == null) result = caseStaticNodeLabel(populationLabel);
+				if (result == null) result = caseNodeLabel(populationLabel);
+				if (result == null) result = caseStaticLabel(populationLabel);
+				if (result == null) result = caseLabel(populationLabel);
+				if (result == null) result = caseModifiable(populationLabel);
+				if (result == null) result = caseIdentifiable(populationLabel);
+				if (result == null) result = caseComparable(populationLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.POPULATION_LABEL_VALUE: {
+				PopulationLabelValue populationLabelValue = (PopulationLabelValue)theEObject;
+				T1 result = casePopulationLabelValue(populationLabelValue);
+				if (result == null) result = caseLabelValue(populationLabelValue);
+				if (result == null) result = caseSanityChecker(populationLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL: {
+				RelativePhysicalRelationshipLabel relativePhysicalRelationshipLabel = (RelativePhysicalRelationshipLabel)theEObject;
+				T1 result = caseRelativePhysicalRelationshipLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = casePhysicalRelationshipLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseStaticEdgeLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseEdgeLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseStaticLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseLabel(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseModifiable(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseIdentifiable(relativePhysicalRelationshipLabel);
+				if (result == null) result = caseComparable(relativePhysicalRelationshipLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE: {
+				RelativePhysicalRelationshipLabelValue relativePhysicalRelationshipLabelValue = (RelativePhysicalRelationshipLabelValue)theEObject;
+				T1 result = caseRelativePhysicalRelationshipLabelValue(relativePhysicalRelationshipLabelValue);
+				if (result == null) result = caseLabelValue(relativePhysicalRelationshipLabelValue);
+				if (result == null) result = caseSanityChecker(relativePhysicalRelationshipLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL: {
+				TransportRelationshipLabel transportRelationshipLabel = (TransportRelationshipLabel)theEObject;
+				T1 result = caseTransportRelationshipLabel(transportRelationshipLabel);
+				if (result == null) result = caseDynamicEdgeLabel(transportRelationshipLabel);
+				if (result == null) result = caseDynamicLabel(transportRelationshipLabel);
+				if (result == null) result = caseEdgeLabel(transportRelationshipLabel);
+				if (result == null) result = caseLabel(transportRelationshipLabel);
+				if (result == null) result = caseIdentifiable(transportRelationshipLabel);
+				if (result == null) result = caseComparable(transportRelationshipLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TRANSPORT_RELATIONSHIP_LABEL_VALUE: {
+				TransportRelationshipLabelValue transportRelationshipLabelValue = (TransportRelationshipLabelValue)theEObject;
+				T1 result = caseTransportRelationshipLabelValue(transportRelationshipLabelValue);
+				if (result == null) result = caseLabelValue(transportRelationshipLabelValue);
+				if (result == null) result = caseSanityChecker(transportRelationshipLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.PHYSICAL_RELATIONSHIP_LABEL_VALUE: {
+				PhysicalRelationshipLabelValue physicalRelationshipLabelValue = (PhysicalRelationshipLabelValue)theEObject;
+				T1 result = casePhysicalRelationshipLabelValue(physicalRelationshipLabelValue);
+				if (result == null) result = caseLabelValue(physicalRelationshipLabelValue);
+				if (result == null) result = caseSanityChecker(physicalRelationshipLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL: {
+				RoadTransportRelationshipLabel roadTransportRelationshipLabel = (RoadTransportRelationshipLabel)theEObject;
+				T1 result = caseRoadTransportRelationshipLabel(roadTransportRelationshipLabel);
+				if (result == null) result = casePhysicalRelationshipLabel(roadTransportRelationshipLabel);
+				if (result == null) result = caseStaticEdgeLabel(roadTransportRelationshipLabel);
+				if (result == null) result = caseEdgeLabel(roadTransportRelationshipLabel);
+				if (result == null) result = caseStaticLabel(roadTransportRelationshipLabel);
+				if (result == null) result = caseLabel(roadTransportRelationshipLabel);
+				if (result == null) result = caseModifiable(roadTransportRelationshipLabel);
+				if (result == null) result = caseIdentifiable(roadTransportRelationshipLabel);
+				if (result == null) result = caseComparable(roadTransportRelationshipLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.ROAD_TRANSPORT_RELATIONSHIP_LABEL_VALUE: {
+				RoadTransportRelationshipLabelValue roadTransportRelationshipLabelValue = (RoadTransportRelationshipLabelValue)theEObject;
+				T1 result = caseRoadTransportRelationshipLabelValue(roadTransportRelationshipLabelValue);
+				if (result == null) result = casePhysicalRelationshipLabelValue(roadTransportRelationshipLabelValue);
+				if (result == null) result = caseLabelValue(roadTransportRelationshipLabelValue);
+				if (result == null) result = caseSanityChecker(roadTransportRelationshipLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Population Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Population Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePopulationLabel(PopulationLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Population Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Population Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePopulationLabelValue(PopulationLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Area Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Area Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAreaLabel(AreaLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Area Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Area Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAreaLabelValue(AreaLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Physical Relationship Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Physical Relationship Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePhysicalRelationshipLabel(PhysicalRelationshipLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Relative Physical Relationship Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Relative Physical Relationship Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRelativePhysicalRelationshipLabel(
+			RelativePhysicalRelationshipLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Relative Physical Relationship Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Relative Physical Relationship Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRelativePhysicalRelationshipLabelValue(
+			RelativePhysicalRelationshipLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Common Border Relationship Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Common Border Relationship Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseCommonBorderRelationshipLabel(
+			CommonBorderRelationshipLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Common Border Relationship Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Common Border Relationship Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseCommonBorderRelationshipLabelValue(
+			CommonBorderRelationshipLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Transport Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Transport Relationship Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTransportRelationshipLabel(TransportRelationshipLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Transport Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Transport Relationship Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTransportRelationshipLabelValue(TransportRelationshipLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Physical Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Physical Relationship Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePhysicalRelationshipLabelValue(PhysicalRelationshipLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Road Transport Relationship Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Road Transport Relationship Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRoadTransportRelationshipLabel(RoadTransportRelationshipLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Road Transport Relationship Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Road Transport Relationship Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRoadTransportRelationshipLabelValue(RoadTransportRelationshipLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeLabel(NodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticLabel(StaticLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticNodeLabel(StaticNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeLabel(EdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticEdgeLabel(StaticEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicLabel(DynamicLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch, but this is the last case
+	 * anyway. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} // LabelsSwitch
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/GeographicFeature.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/GeographicFeature.java
new file mode 100644
index 0000000..95f8640
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/GeographicFeature.java
@@ -0,0 +1,32 @@
+// GeographicFeature.java
+package org.eclipse.stem.definitions.nodes;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+//import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * This interface defines a class in an EMF model for a Geographic Feature node.
+ * 
+ * @model abstract="true"
+ */
+public interface GeographicFeature extends Node {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * geographic feature node type URI.
+	 */
+	String URI_TYPE_GEOGRAPHIC_FEATURE_NODE_SEGMENT = URI_TYPE_NODE_SEGMENT
+			+ "/geo";
+
+} // GeographicFeature
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesFactory.java
new file mode 100644
index 0000000..19e5d30
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.definitions.nodes;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.nodes.NodesPackage
+ * @generated
+ */
+public interface NodesFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	NodesFactory eINSTANCE = org.eclipse.stem.definitions.nodes.impl.NodesFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Region</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Region</em>'.
+	 * @generated
+	 */
+	Region createRegion();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	NodesPackage getNodesPackage();
+
+} //NodesFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesPackage.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesPackage.java
new file mode 100644
index 0000000..1301d33
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/NodesPackage.java
@@ -0,0 +1,300 @@
+package org.eclipse.stem.definitions.nodes;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.nodes.NodesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface NodesPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "nodes";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/definitions/nodes.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.definitions.nodes";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	NodesPackage eINSTANCE = org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getNode()
+	 * @generated
+	 */
+	int NODE = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.nodes.impl.GeographicFeatureImpl <em>Geographic Feature</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.nodes.impl.GeographicFeatureImpl
+	 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getGeographicFeature()
+	 * @generated
+	 */
+	int GEOGRAPHIC_FEATURE = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE__URI = GraphPackage.NODE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE__TYPE_URI = GraphPackage.NODE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE__DUBLIN_CORE = GraphPackage.NODE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE__EDGES = GraphPackage.NODE__EDGES;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE__LABELS = GraphPackage.NODE__LABELS;
+
+	/**
+	 * The number of structural features of the '<em>Geographic Feature</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEOGRAPHIC_FEATURE_FEATURE_COUNT = GraphPackage.NODE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.nodes.impl.RegionImpl <em>Region</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.nodes.impl.RegionImpl
+	 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getRegion()
+	 * @generated
+	 */
+	int REGION = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION__URI = GEOGRAPHIC_FEATURE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION__TYPE_URI = GEOGRAPHIC_FEATURE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION__DUBLIN_CORE = GEOGRAPHIC_FEATURE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION__EDGES = GEOGRAPHIC_FEATURE__EDGES;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION__LABELS = GEOGRAPHIC_FEATURE__LABELS;
+
+	/**
+	 * The number of structural features of the '<em>Region</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int REGION_FEATURE_COUNT = GEOGRAPHIC_FEATURE_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The number of structural features of the '<em>Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_FEATURE_COUNT = 0;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.nodes.GeographicFeature <em>Geographic Feature</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Geographic Feature</em>'.
+	 * @see org.eclipse.stem.definitions.nodes.GeographicFeature
+	 * @generated
+	 */
+	EClass getGeographicFeature();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.nodes.Region <em>Region</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Region</em>'.
+	 * @see org.eclipse.stem.definitions.nodes.Region
+	 * @generated
+	 */
+	EClass getRegion();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Node</em>'.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @model instanceClass="org.eclipse.stem.core.graph.Node"
+	 * @generated
+	 */
+	EClass getNode();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	NodesFactory getNodesFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.nodes.impl.GeographicFeatureImpl <em>Geographic Feature</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.nodes.impl.GeographicFeatureImpl
+		 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getGeographicFeature()
+		 * @generated
+		 */
+		EClass GEOGRAPHIC_FEATURE = eINSTANCE.getGeographicFeature();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.nodes.impl.RegionImpl <em>Region</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.nodes.impl.RegionImpl
+		 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getRegion()
+		 * @generated
+		 */
+		EClass REGION = eINSTANCE.getRegion();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.Node
+		 * @see org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl#getNode()
+		 * @generated
+		 */
+		EClass NODE = eINSTANCE.getNode();
+
+	}
+
+} //NodesPackage
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/Region.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/Region.java
new file mode 100644
index 0000000..692cd6d
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/Region.java
@@ -0,0 +1,31 @@
+// Region.java
+package org.eclipse.stem.definitions.nodes;
+
+/******************************************************************************* 
+ * Copyright (c) 2007 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for a Region node.
+ * 
+ * @model
+ */
+public interface Region extends GeographicFeature {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * geographic feature node type URI.
+	 */
+	String URI_TYPE_REGION_NODE_SEGMENT = URI_TYPE_GEOGRAPHIC_FEATURE_NODE_SEGMENT
+			+ "/region";
+
+	String DUBLIN_CORE_SUBJECT = "region";
+	
+} // Region
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/GeographicFeatureImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/GeographicFeatureImpl.java
new file mode 100644
index 0000000..89f7ecb
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/GeographicFeatureImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.definitions.nodes.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.NodeImpl;
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Geographic Feature</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class GeographicFeatureImpl extends NodeImpl  implements GeographicFeature {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GeographicFeatureImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NodesPackage.Literals.GEOGRAPHIC_FEATURE;
+	}
+
+} //GeographicFeatureImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesFactoryImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesFactoryImpl.java
new file mode 100644
index 0000000..30c3f32
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesFactoryImpl.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.definitions.nodes.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+//import org.eclipse.stem.definitions.nodes.*;
+
+import org.eclipse.stem.definitions.nodes.NodesFactory;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesFactoryImpl extends EFactoryImpl implements NodesFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NodesFactory init() {
+		try {
+			NodesFactory theNodesFactory = (NodesFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/definitions/nodes.ecore"); //$NON-NLS-1$ 
+			if (theNodesFactory != null) {
+				return theNodesFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NodesFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NodesPackage.REGION: return createRegion();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Region createRegion() {
+		RegionImpl region = new RegionImpl();
+		return region;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesPackage getNodesPackage() {
+		return (NodesPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static NodesPackage getPackage() {
+		return NodesPackage.eINSTANCE;
+	}
+
+} //NodesFactoryImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesPackageImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesPackageImpl.java
new file mode 100644
index 0000000..a29ac1f
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/NodesPackageImpl.java
@@ -0,0 +1,253 @@
+package org.eclipse.stem.definitions.nodes.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+import org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl;
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+import org.eclipse.stem.definitions.nodes.NodesFactory;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.definitions.types.TypesPackage;
+import org.eclipse.stem.definitions.types.impl.TypesPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesPackageImpl extends EPackageImpl implements NodesPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass geographicFeatureEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass regionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nodeEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.definitions.nodes.NodesPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private NodesPackageImpl() {
+		super(eNS_URI, NodesFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link NodesPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static NodesPackage init() {
+		if (isInited) return (NodesPackage)EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI);
+
+		// Obtain or create and register package
+		NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new NodesPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		GraphPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+		SolverPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		EdgesPackageImpl theEdgesPackage = (EdgesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) instanceof EdgesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) : EdgesPackage.eINSTANCE);
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) : LabelsPackage.eINSTANCE);
+		TypesPackageImpl theTypesPackage = (TypesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) instanceof TypesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI) : TypesPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theNodesPackage.createPackageContents();
+		theEdgesPackage.createPackageContents();
+		theLabelsPackage.createPackageContents();
+		theTypesPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theNodesPackage.initializePackageContents();
+		theEdgesPackage.initializePackageContents();
+		theLabelsPackage.initializePackageContents();
+		theTypesPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theNodesPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(NodesPackage.eNS_URI, theNodesPackage);
+		return theNodesPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGeographicFeature() {
+		return geographicFeatureEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRegion() {
+		return regionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNode() {
+		return nodeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesFactory getNodesFactory() {
+		return (NodesFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		geographicFeatureEClass = createEClass(GEOGRAPHIC_FEATURE);
+
+		regionEClass = createEClass(REGION);
+
+		nodeEClass = createEClass(NODE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		geographicFeatureEClass.getESuperTypes().add(theGraphPackage.getNode());
+		regionEClass.getESuperTypes().add(this.getGeographicFeature());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(geographicFeatureEClass, GeographicFeature.class, "GeographicFeature", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(regionEClass, Region.class, "Region", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(nodeEClass, Node.class, "Node", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //NodesPackageImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/RegionImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/RegionImpl.java
new file mode 100644
index 0000000..b1b66a5
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/impl/RegionImpl.java
@@ -0,0 +1,74 @@
+package org.eclipse.stem.definitions.nodes.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Region</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class RegionImpl extends GeographicFeatureImpl implements Region {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RegionImpl() {
+		super();
+	}
+
+	/**
+	 * @param nodeCode
+	 *            the code for the region
+	 * @return the URI for a specific region node
+	 */
+	public static URI createRegionNodeURI(String nodeCode) {
+		final URI retValue = STEMURI.createURI(URI_TYPE_REGION_NODE_SEGMENT
+				+ "/" + nodeCode);
+		return retValue;
+	} // createRegionNodeURI
+
+//	/**
+//	 * @param adminLevel
+//	 *            the administration level of the region
+//	 * @param countryCode
+//	 *            the ISO-3166-1 code for the country containing the region
+//	 * @param nodeCode
+//	 *            the code for the region
+//	 * @return the URI for a specific region node
+//	 */
+//	public static URI createRegionNodeURI(int adminLevel,
+//			final String countryCode, String nodeCode) {
+//		final URI retValue = STEMURI.createURI(URI_TYPE_REGION_NODE_SEGMENT
+//				+ "/" + countryCode + "/" + adminLevel + "/" + nodeCode);
+//		return retValue;
+//	} // createRegionNodeURI
+
+	
+					/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return NodesPackage.Literals.REGION;
+	}
+
+} // RegionImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesActionBarContributor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesActionBarContributor.java
new file mode 100644
index 0000000..1bbe36d
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.definitions.nodes.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Nodes model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(DefinitionsEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("nodes-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("nodes-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_NodesEditor_menu"), "org.eclipse.stem.definitions.nodesMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(DefinitionsEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesEditor.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesEditor.java
new file mode 100644
index 0000000..2b93a48
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/presentation/NodesEditor.java
@@ -0,0 +1,1556 @@
+package org.eclipse.stem.definitions.nodes.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.definitions.nodes.provider.NodesItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.edges.provider.EdgesItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+import org.eclipse.stem.definitions.types.provider.TypesItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Nodes model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(NodesEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(NodesEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == NodesEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(NodesEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == NodesEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(NodesEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					DefinitionsEditPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						DefinitionsEditPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EdgesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new NodesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TypesItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.definitions", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						NodesEditor.this.setSelectionToViewer(selection);
+						NodesEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			DefinitionsEditPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return DefinitionsEditPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/GeographicFeatureItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/GeographicFeatureItemProvider.java
new file mode 100644
index 0000000..f7e0a1b
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/GeographicFeatureItemProvider.java
@@ -0,0 +1,125 @@
+package org.eclipse.stem.definitions.nodes.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.provider.NodeItemProvider;
+
+//import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.nodes.GeographicFeature} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GeographicFeatureItemProvider
+	extends NodeItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GeographicFeatureItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((GeographicFeature)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_GeographicFeature_type") : //$NON-NLS-1$
+			getString("_UI_GeographicFeature_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/NodesItemProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/NodesItemProviderAdapterFactory.java
new file mode 100644
index 0000000..dfb6a67
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/NodesItemProviderAdapterFactory.java
@@ -0,0 +1,206 @@
+package org.eclipse.stem.definitions.nodes.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.definitions.nodes.util.NodesAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesItemProviderAdapterFactory extends NodesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.definitions.nodes.Region} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RegionItemProvider regionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.definitions.nodes.Region}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createRegionAdapter() {
+		if (regionItemProvider == null) {
+			regionItemProvider = new RegionItemProvider(this);
+		}
+
+		return regionItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (regionItemProvider != null) regionItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/RegionItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/RegionItemProvider.java
new file mode 100644
index 0000000..75a1e24
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/provider/RegionItemProvider.java
@@ -0,0 +1,145 @@
+package org.eclipse.stem.definitions.nodes.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.data.geography.GeographicNames;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.nodes.Region} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RegionItemProvider
+	extends GeographicFeatureItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RegionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String getText(Object object) {
+		final Region region = (Region)object;
+		
+		final URI regionURI = region.getURI();
+		final String lastSegment = regionURI.lastSegment();
+		final String isoKey = lastSegment.toString();
+
+		final String geoName = GeographicNames.getName(isoKey);
+		if (geoName.startsWith("!")) {
+			// Yes
+			return getTextGen(object);
+		} // if 
+		else {
+			return geoName;
+		}
+	} // getText
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getTextGen(Object object) {
+		URI labelValue = ((Region)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Region_type") : //$NON-NLS-1$
+			getString("_UI_Region_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesAdapterFactory.java
new file mode 100644
index 0000000..8828782
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesAdapterFactory.java
@@ -0,0 +1,224 @@
+package org.eclipse.stem.definitions.nodes.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.graph.Node;
+//import org.eclipse.stem.definitions.nodes.*;
+
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.nodes.NodesPackage
+ * @generated
+ */
+public class NodesAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static NodesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = NodesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NodesSwitch<Adapter> modelSwitch =
+		new NodesSwitch<Adapter>() {
+			@Override
+			public Adapter caseGeographicFeature(GeographicFeature object) {
+				return createGeographicFeatureAdapter();
+			}
+			@Override
+			public Adapter caseRegion(Region object) {
+				return createRegionAdapter();
+			}
+			@Override
+			public Adapter caseNode(Node object) {
+				return createNodeAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseGraph_Node(Node object) {
+				return createGraph_NodeAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.nodes.GeographicFeature <em>Geographic Feature</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.nodes.GeographicFeature
+	 * @generated
+	 */
+	public Adapter createGeographicFeatureAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.nodes.Region <em>Region</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.nodes.Region
+	 * @generated
+	 */
+	public Adapter createRegionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @generated
+	 */
+	public Adapter createNodeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @generated
+	 */
+	public Adapter createGraph_NodeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //NodesAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesSwitch.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesSwitch.java
new file mode 100644
index 0000000..7decce8
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/nodes/util/NodesSwitch.java
@@ -0,0 +1,229 @@
+package org.eclipse.stem.definitions.nodes.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.graph.Node;
+//import org.eclipse.stem.definitions.nodes.*;
+
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.nodes.NodesPackage
+ * @generated
+ */
+public class NodesSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static NodesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesSwitch() {
+		if (modelPackage == null) {
+			modelPackage = NodesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case NodesPackage.GEOGRAPHIC_FEATURE: {
+				GeographicFeature geographicFeature = (GeographicFeature)theEObject;
+				T1 result = caseGeographicFeature(geographicFeature);
+				if (result == null) result = caseGraph_Node(geographicFeature);
+				if (result == null) result = caseIdentifiable(geographicFeature);
+				if (result == null) result = caseComparable(geographicFeature);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case NodesPackage.REGION: {
+				Region region = (Region)theEObject;
+				T1 result = caseRegion(region);
+				if (result == null) result = caseGeographicFeature(region);
+				if (result == null) result = caseGraph_Node(region);
+				if (result == null) result = caseIdentifiable(region);
+				if (result == null) result = caseComparable(region);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Geographic Feature</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Geographic Feature</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGeographicFeature(GeographicFeature object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Region</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Region</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseRegion(Region object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNode(Node object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraph_Node(Node object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //NodesSwitch
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/CategorizedType.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/CategorizedType.java
new file mode 100644
index 0000000..b56e551
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/CategorizedType.java
@@ -0,0 +1,28 @@
+// CategorizedType.java
+package org.eclipse.stem.definitions.types;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A <code>CatagorizedType</code> is a marker interface for the types of
+ * properties specified for {@link Decorator}s. The intent is that particular
+ * properties can be "marked" as having a "category" by the type of the
+ * property. This will facilitate things like grouping properties in the same
+ * category together in a user interface.
+ * 
+ * @model interface="true"
+ */
+public interface CategorizedType extends EObject {
+	// Nothing
+} // CategorizedType
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/Rate.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/Rate.java
new file mode 100644
index 0000000..723608d
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/Rate.java
@@ -0,0 +1,38 @@
+// Rate.java
+package org.eclipse.stem.definitions.types;
+
+import org.eclipse.emf.ecore.EObject;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A <code>Rate</code> is a type that specifies a rate of change of one unit of
+ * measure with respect to another unit of measure.
+ * 
+ * @model abstract="true"
+ */
+public interface Rate extends EObject {
+	/**
+	 * @model
+	 */
+	double getRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.types.Rate#getRate <em>Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Rate</em>' attribute.
+	 * @see #getRate()
+	 * @generated
+	 */
+	void setRate(double value);
+} // Rate
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesFactory.java
new file mode 100644
index 0000000..11dd685
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesFactory.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.definitions.types;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.types.TypesPackage
+ * @generated
+ */
+public interface TypesFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TypesFactory eINSTANCE = org.eclipse.stem.definitions.types.impl.TypesFactoryImpl.init();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	TypesPackage getTypesPackage();
+
+} //TypesFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesPackage.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesPackage.java
new file mode 100644
index 0000000..43b87be
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/TypesPackage.java
@@ -0,0 +1,197 @@
+package org.eclipse.stem.definitions.types;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.types.TypesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface TypesPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "types"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/definitions/types.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.definitions.types"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TypesPackage eINSTANCE = org.eclipse.stem.definitions.types.impl.TypesPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.types.CategorizedType <em>Categorized Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.types.CategorizedType
+	 * @see org.eclipse.stem.definitions.types.impl.TypesPackageImpl#getCategorizedType()
+	 * @generated
+	 */
+	int CATEGORIZED_TYPE = 0;
+
+	/**
+	 * The number of structural features of the '<em>Categorized Type</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CATEGORIZED_TYPE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.types.impl.RateImpl <em>Rate</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.types.impl.RateImpl
+	 * @see org.eclipse.stem.definitions.types.impl.TypesPackageImpl#getRate()
+	 * @generated
+	 */
+	int RATE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RATE__RATE = 0;
+
+	/**
+	 * The number of structural features of the '<em>Rate</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RATE_FEATURE_COUNT = 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.types.CategorizedType <em>Categorized Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Categorized Type</em>'.
+	 * @see org.eclipse.stem.definitions.types.CategorizedType
+	 * @generated
+	 */
+	EClass getCategorizedType();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.types.Rate <em>Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Rate</em>'.
+	 * @see org.eclipse.stem.definitions.types.Rate
+	 * @generated
+	 */
+	EClass getRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.types.Rate#getRate <em>Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Rate</em>'.
+	 * @see org.eclipse.stem.definitions.types.Rate#getRate()
+	 * @see #getRate()
+	 * @generated
+	 */
+	EAttribute getRate_Rate();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	TypesFactory getTypesFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.types.CategorizedType <em>Categorized Type</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.types.CategorizedType
+		 * @see org.eclipse.stem.definitions.types.impl.TypesPackageImpl#getCategorizedType()
+		 * @generated
+		 */
+		EClass CATEGORIZED_TYPE = eINSTANCE.getCategorizedType();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.types.impl.RateImpl <em>Rate</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.types.impl.RateImpl
+		 * @see org.eclipse.stem.definitions.types.impl.TypesPackageImpl#getRate()
+		 * @generated
+		 */
+		EClass RATE = eINSTANCE.getRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute RATE__RATE = eINSTANCE.getRate_Rate();
+
+	}
+
+} //TypesPackage
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/RateImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/RateImpl.java
new file mode 100644
index 0000000..650a739
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/RateImpl.java
@@ -0,0 +1,172 @@
+package org.eclipse.stem.definitions.types.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.stem.definitions.types.Rate;
+import org.eclipse.stem.definitions.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Rate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.types.impl.RateImpl#getRate <em>Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class RateImpl extends EObjectImpl implements Rate {
+	/**
+	 * The default value of the '{@link #getRate() <em>Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getRate() <em>Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double rate = RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TypesPackage.Literals.RATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRate() {
+		return rate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRate(double newRate) {
+		double oldRate = rate;
+		rate = newRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TypesPackage.RATE__RATE, oldRate, rate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TypesPackage.RATE__RATE:
+				return getRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TypesPackage.RATE__RATE:
+				setRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TypesPackage.RATE__RATE:
+				setRate(RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TypesPackage.RATE__RATE:
+				return rate != RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (rate: "); //$NON-NLS-1$
+		result.append(rate);
+		result.append(')');
+		return result.toString();
+	}
+
+} //RateImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesFactoryImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesFactoryImpl.java
new file mode 100644
index 0000000..027acef
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesFactoryImpl.java
@@ -0,0 +1,93 @@
+package org.eclipse.stem.definitions.types.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.definitions.types.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesFactoryImpl extends EFactoryImpl implements TypesFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TypesFactory init() {
+		try {
+			TypesFactory theTypesFactory = (TypesFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/definitions/types.ecore"); //$NON-NLS-1$ 
+			if (theTypesFactory != null) {
+				return theTypesFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new TypesFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesPackage getTypesPackage() {
+		return (TypesPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static TypesPackage getPackage() {
+		return TypesPackage.eINSTANCE;
+	}
+
+} //TypesFactoryImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesPackageImpl.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesPackageImpl.java
new file mode 100644
index 0000000..0e0c94c
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/impl/TypesPackageImpl.java
@@ -0,0 +1,252 @@
+package org.eclipse.stem.definitions.types.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.core.modifier.ModifierPackage;
+
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+
+import org.eclipse.stem.definitions.edges.impl.EdgesPackageImpl;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+import org.eclipse.stem.definitions.labels.impl.LabelsPackageImpl;
+
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+
+import org.eclipse.stem.definitions.nodes.impl.NodesPackageImpl;
+
+import org.eclipse.stem.definitions.types.CategorizedType;
+import org.eclipse.stem.definitions.types.Rate;
+import org.eclipse.stem.definitions.types.TypesFactory;
+import org.eclipse.stem.definitions.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesPackageImpl extends EPackageImpl implements TypesPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass categorizedTypeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass rateEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.definitions.types.TypesPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private TypesPackageImpl() {
+		super(eNS_URI, TypesFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link TypesPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static TypesPackage init() {
+		if (isInited) return (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+		// Obtain or create and register package
+		TypesPackageImpl theTypesPackage = (TypesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof TypesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new TypesPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		GraphPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+		SolverPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		EdgesPackageImpl theEdgesPackage = (EdgesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) instanceof EdgesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI) : EdgesPackage.eINSTANCE);
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) : LabelsPackage.eINSTANCE);
+		NodesPackageImpl theNodesPackage = (NodesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) instanceof NodesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NodesPackage.eNS_URI) : NodesPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theTypesPackage.createPackageContents();
+		theEdgesPackage.createPackageContents();
+		theLabelsPackage.createPackageContents();
+		theNodesPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theTypesPackage.initializePackageContents();
+		theEdgesPackage.initializePackageContents();
+		theLabelsPackage.initializePackageContents();
+		theNodesPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theTypesPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(TypesPackage.eNS_URI, theTypesPackage);
+		return theTypesPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getCategorizedType() {
+		return categorizedTypeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRate() {
+		return rateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRate_Rate() {
+		return (EAttribute)rateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesFactory getTypesFactory() {
+		return (TypesFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		categorizedTypeEClass = createEClass(CATEGORIZED_TYPE);
+
+		rateEClass = createEClass(RATE);
+		createEAttribute(rateEClass, RATE__RATE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(categorizedTypeEClass, CategorizedType.class, "CategorizedType", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(rateEClass, Rate.class, "Rate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getRate_Rate(), ecorePackage.getEDouble(), "rate", null, 0, 1, Rate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //TypesPackageImpl
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/RateItemProvider.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/RateItemProvider.java
new file mode 100644
index 0000000..e254442
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/RateItemProvider.java
@@ -0,0 +1,155 @@
+package org.eclipse.stem.definitions.types.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.definitions.types.Rate;
+import org.eclipse.stem.definitions.types.TypesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.definitions.types.Rate} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RateItemProvider
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Rate_rate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Rate_rate_feature", "_UI_Rate_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 TypesPackage.Literals.RATE__RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		Rate rate = (Rate)object;
+		return getString("_UI_Rate_type") + " " + rate.getRate(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Rate.class)) {
+			case TypesPackage.RATE__RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DefinitionsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/TypesItemProviderAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/TypesItemProviderAdapterFactory.java
new file mode 100644
index 0000000..7ecbc14
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/provider/TypesItemProviderAdapterFactory.java
@@ -0,0 +1,184 @@
+package org.eclipse.stem.definitions.types.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.definitions.types.util.TypesAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesItemProviderAdapterFactory extends TypesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+	}
+
+}
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesAdapterFactory.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesAdapterFactory.java
new file mode 100644
index 0000000..ac35a63
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesAdapterFactory.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.definitions.types.util;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.definitions.types.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.types.TypesPackage
+ * @generated
+ */
+public class TypesAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TypesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = TypesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TypesSwitch<Adapter> modelSwitch =
+		new TypesSwitch<Adapter>() {
+			@Override
+			public Adapter caseCategorizedType(CategorizedType object) {
+				return createCategorizedTypeAdapter();
+			}
+			@Override
+			public Adapter caseRate(Rate object) {
+				return createRateAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.types.CategorizedType <em>Categorized Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.types.CategorizedType
+	 * @generated
+	 */
+	public Adapter createCategorizedTypeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.types.Rate <em>Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.types.Rate
+	 * @generated
+	 */
+	public Adapter createRateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //TypesAdapterFactory
diff --git a/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesSwitch.java b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesSwitch.java
new file mode 100644
index 0000000..9952c01
--- /dev/null
+++ b/org.eclipse.stem.definitions/src/org/eclipse/stem/definitions/types/util/TypesSwitch.java
@@ -0,0 +1,156 @@
+package org.eclipse.stem.definitions.types.util;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.definitions.types.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.types.TypesPackage
+ * @generated
+ */
+public class TypesSwitch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TypesPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesSwitch() {
+		if (modelPackage == null) {
+			modelPackage = TypesPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case TypesPackage.CATEGORIZED_TYPE: {
+				CategorizedType categorizedType = (CategorizedType)theEObject;
+				T result = caseCategorizedType(categorizedType);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TypesPackage.RATE: {
+				Rate rate = (Rate)theEObject;
+				T result = caseRate(rate);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Categorized Type</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Categorized Type</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCategorizedType(CategorizedType object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Rate</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Rate</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRate(Rate object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //TypesSwitch
diff --git a/org.eclipse.stem.diseasemodels.example/.classpath b/org.eclipse.stem.diseasemodels.example/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseasemodels.example/.cvsignore b/org.eclipse.stem.diseasemodels.example/.cvsignore
new file mode 100644
index 0000000..8e27be7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/.cvsignore
@@ -0,0 +1 @@
+text
diff --git a/org.eclipse.stem.diseasemodels.example/.project b/org.eclipse.stem.diseasemodels.example/.project
new file mode 100644
index 0000000..045aed0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseasemodels.example</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5719700
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,78 @@
+#Tue Nov 27 19:11:01 PST 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.diseasemodels.example/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels.example/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2ba137d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/META-INF/MANIFEST.MF
@@ -0,0 +1,39 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.example;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.example.provider.ExampleEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.diseasemodels.example;uses:="org.eclipse.stem.diseasemodels.standard,org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.example.impl;
+  uses:="org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.stem.diseasemodels.example,
+   org.eclipse.emf.ecore.impl,
+   org.eclipse.stem.diseasemodels.standard.impl,
+   org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.example.provider;
+  uses:="org.eclipse.stem.diseasemodels.example.util,
+   org.eclipse.emf.common,
+   org.eclipse.emf.common.ui,
+   org.eclipse.stem.diseasemodels.standard.provider,
+   org.eclipse.emf.common.notify,
+   org.eclipse.emf.edit.provider,
+   org.eclipse.emf.common.util",
+ org.eclipse.stem.diseasemodels.example.util;
+  uses:="org.eclipse.emf.common.notify.impl,
+   org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.stem.diseasemodels.example,
+   org.eclipse.emf.common.notify,
+   org.eclipse.stem.core.model,
+   org.eclipse.stem.core.common,
+   org.eclipse.emf.ecore"
diff --git a/org.eclipse.stem.diseasemodels.example/build.properties b/org.eclipse.stem.diseasemodels.example/build.properties
new file mode 100644
index 0000000..ef05c5e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/build.properties
@@ -0,0 +1,15 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               epl-v10.html,\
+               notice.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.diseasemodels.example/epl-v10.html b/org.eclipse.stem.diseasemodels.example/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleDiseaseModel.gif b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleDiseaseModel.gif
new file mode 100644
index 0000000..a729a04
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif
new file mode 100644
index 0000000..5d309ef
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExperimentalDiseaseModel.gif b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExperimentalDiseaseModel.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/icons/full/obj16/ExperimentalDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.example/icons/full/wizban/NewExample.gif b/org.eclipse.stem.diseasemodels.example/icons/full/wizban/NewExample.gif
new file mode 100644
index 0000000..97de441
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/icons/full/wizban/NewExample.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.example/model/example.ecore b/org.eclipse.stem.diseasemodels.example/model/example.ecore
new file mode 100644
index 0000000..6c12f47
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/model/example.ecore
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="example"
+    nsURI="http:///org/eclipse/stem/diseasemodels/example.ecore" nsPrefix="org.eclipse.stem.diseasemodels.example">
+  <eClassifiers xsi:type="ecore:EClass" name="ExampleDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSIRDiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationExponent"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="2.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="365.256363051"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPhaseShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationFloor"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="0.6"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.diseasemodels.example/model/example.genmodel b/org.eclipse.stem.diseasemodels.example/model/example.genmodel
new file mode 100644
index 0000000..2fe0694
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/model/example.genmodel
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels.example/src"
+    editDirectory="/org.eclipse.stem.diseasemodels.example/src" editorDirectory="/org.eclipse.stem.ui.diseasemodels.example/src"
+    modelPluginID="org.eclipse.stem.diseasemodels.example" modelName="Example"
+    editPluginClass="org.eclipse.stem.diseasemodels.example.provider.ExampleEditPlugin"
+    editorPluginClass="org.eclipse.stem.ui.diseasemodels.example.presentation.ExampleEditorPlugin"
+    nonNLSMarkers="true" testsDirectory="/org.eclipse.stem.tests.diseasemodels.example/src"
+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"
+    editPluginID="org.eclipse.stem.diseasemodels.example" editorPluginID="org.eclipse.stem.ui.diseasemodels.example.editor"
+    testsPluginID="org.eclipse.stem.tests.diseasemodels.example" usedGenPackages="../../org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel#//standard ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Example" basePackage="org.eclipse.stem.diseasemodels" disposableProviderFactory="true"
+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="example.ecore#/">
+    <genClasses ecoreClass="example.ecore#//ExampleDiseaseModel">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute example.ecore#//ExampleDiseaseModel/seasonalModulation"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute example.ecore#//ExampleDiseaseModel/modulationPeriod"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute example.ecore#//ExampleDiseaseModel/modulationPhaseShift"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.diseasemodels.example/notice.html b/org.eclipse.stem.diseasemodels.example/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.diseasemodels.example/plugin.properties b/org.eclipse.stem.diseasemodels.example/plugin.properties
new file mode 100644
index 0000000..dc46b1e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.example/plugin.xml b/org.eclipse.stem.diseasemodels.example/plugin.xml
new file mode 100644
index 0000000..0abad7a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+    
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/diseasemodels/example.ecore" 
+       class = "org.eclipse.stem.diseasemodels.example.provider.ExampleItemProviderAdapterFactory" 
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/diseasemodels/example.ecore"
+       class = "org.eclipse.stem.diseasemodels.example.ExamplePackage"
+       genModel = "model/example.genmodel" /> 
+  </extension>
+ <!-- Commented out for release 1.0 
+ 	<extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_kaufman"
+           description="%dc_desc_E_S_SEIR"
+           identifier="org.eclipse.stem.diseasemodels.experimental.dublin_core4"
+           title="%dc_title_E_S_SEIR">
+     </dublin_core>
+  </extension> -->
+
+</plugin>
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleDiseaseModel.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleDiseaseModel.java
new file mode 100644
index 0000000..0fafea1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleDiseaseModel.java
@@ -0,0 +1,108 @@
+// ExampleDiseaseModel.java
+package org.eclipse.stem.diseasemodels.example;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * This interface is an EMF Model.
+ * 
+ * @model
+ */
+public interface ExampleDiseaseModel extends StochasticSIRDiseaseModel {
+	/**
+	 * Returns the value of the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.
+	 * The default value is <code>"2.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seasonal Modulation Exponent</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seasonal Modulation Exponent</em>' attribute.
+	 * @see #setSeasonalModulationExponent(double)
+	 * @see org.eclipse.stem.diseasemodels.example.ExamplePackage#getExampleDiseaseModel_SeasonalModulationExponent()
+	 * @model default="2.0"
+	 * @generated
+	 */
+	double getSeasonalModulationExponent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seasonal Modulation Exponent</em>' attribute.
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 */
+	void setSeasonalModulationExponent(double value);
+
+	/**
+	 * @return the default modulation period is 1 year. This default value assumes time steps in days. Note that one year = 365.256363051 days 
+	 * @model default="365.256363051"
+	 */
+	double getModulationPeriod();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPeriod <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Period</em>' attribute.
+	 * @see #getModulationPeriod()
+	 * @generated
+	 */
+	void setModulationPeriod(double value);
+
+	/**
+	 * @return the modulation phase shift shift. 
+	 * @model default="0.0"
+	 */
+	double getModulationPhaseShift();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 */
+	void setModulationPhaseShift(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Seasonal Modulation Floor</b></em>' attribute.
+	 * The default value is <code>"0.6"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seasonal Modulation Floor</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seasonal Modulation Floor</em>' attribute.
+	 * @see #setSeasonalModulationFloor(double)
+	 * @see org.eclipse.stem.diseasemodels.example.ExamplePackage#getExampleDiseaseModel_SeasonalModulationFloor()
+	 * @model default="0.6"
+	 * @generated
+	 */
+	double getSeasonalModulationFloor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seasonal Modulation Floor</em>' attribute.
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 */
+	void setSeasonalModulationFloor(double value);
+} // ExampleDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleFactory.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleFactory.java
new file mode 100644
index 0000000..8e24626
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExampleFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.diseasemodels.example;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.example.ExamplePackage
+ * @generated
+ */
+public interface ExampleFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExampleFactory eINSTANCE = org.eclipse.stem.diseasemodels.example.impl.ExampleFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Disease Model</em>'.
+	 * @generated
+	 */
+	ExampleDiseaseModel createExampleDiseaseModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ExamplePackage getExamplePackage();
+
+} //ExampleFactory
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExamplePackage.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExamplePackage.java
new file mode 100644
index 0000000..a46147b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/ExamplePackage.java
@@ -0,0 +1,519 @@
+package org.eclipse.stem.diseasemodels.example;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.example.ExampleFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ExamplePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "example";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/example.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.example";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExamplePackage eINSTANCE = org.eclipse.stem.diseasemodels.example.impl.ExamplePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl <em>Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.example.impl.ExamplePackageImpl#getExampleDiseaseModel()
+	 * @generated
+	 */
+	int EXAMPLE_DISEASE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__GRAPH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__ENABLED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__GRAPH_DECORATED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__PROGRESS = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__RELATIVE_TOLERANCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__FINITE_DIFFERENCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__FREQUENCY_DEPENDENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__INFECTIOUS_MORTALITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__SEED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__GAIN = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;
+
+	/**
+	 * The feature id for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Seasonal Modulation Floor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXAMPLE_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 4;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel
+	 * @generated
+	 */
+	EClass getExampleDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seasonal Modulation Exponent</em>'.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationExponent()
+	 * @see #getExampleDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExampleDiseaseModel_SeasonalModulationExponent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPeriod <em>Modulation Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Period</em>'.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPeriod()
+	 * @see #getExampleDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExampleDiseaseModel_ModulationPeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Phase Shift</em>'.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getModulationPhaseShift()
+	 * @see #getExampleDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExampleDiseaseModel_ModulationPhaseShift();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seasonal Modulation Floor</em>'.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel#getSeasonalModulationFloor()
+	 * @see #getExampleDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExampleDiseaseModel_SeasonalModulationFloor();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ExampleFactory getExampleFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl <em>Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.example.impl.ExamplePackageImpl#getExampleDiseaseModel()
+		 * @generated
+		 */
+		EClass EXAMPLE_DISEASE_MODEL = eINSTANCE.getExampleDiseaseModel();
+		/**
+		 * The meta object literal for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT = eINSTANCE.getExampleDiseaseModel_SeasonalModulationExponent();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD = eINSTANCE.getExampleDiseaseModel_ModulationPeriod();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Phase Shift</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT = eINSTANCE.getExampleDiseaseModel_ModulationPhaseShift();
+		/**
+		 * The meta object literal for the '<em><b>Seasonal Modulation Floor</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR = eINSTANCE.getExampleDiseaseModel_SeasonalModulationFloor();
+
+	}
+
+} //ExamplePackage
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleDiseaseModelImpl.java
new file mode 100644
index 0000000..5d92b29
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleDiseaseModelImpl.java
@@ -0,0 +1,481 @@
+package org.eclipse.stem.diseasemodels.example.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel;
+import org.eclipse.stem.diseasemodels.example.ExamplePackage;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExampleDiseaseModelImpl extends StochasticSIRDiseaseModelImpl implements ExampleDiseaseModel {
+	
+	/**
+	 * The default value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SEASONAL_MODULATION_EXPONENT_EDEFAULT = 2.0;
+	/**
+	 * The cached value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 * @ordered
+	 */
+	protected double seasonalModulationExponent = SEASONAL_MODULATION_EXPONENT_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PERIOD_EDEFAULT = 365.256363051;
+	/**
+	 * The cached value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPeriod = MODULATION_PERIOD_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PHASE_SHIFT_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPhaseShift = MODULATION_PHASE_SHIFT_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SEASONAL_MODULATION_FLOOR_EDEFAULT = 0.6;
+	/**
+	 * The cached value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected double seasonalModulationFloor = SEASONAL_MODULATION_FLOOR_EDEFAULT;
+	/**
+	 * a false (Hidden) time counter used for this toy example
+	 */
+	private double falseHiddenTimeExample = 0.0;
+	
+	private static final double MILLIS_PER_DAY = 1000.0*60.0*60.0*24.0;
+	private static final double MILLIS_PER_YEAR = MILLIS_PER_DAY*365.256363051;
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public ExampleDiseaseModelImpl() {
+		super();
+	}
+	
+	
+	/**
+	 * To create a user defined (experimental) disease mode, the user may wish 
+	 * to extend the existing models but simply override two methods.
+	 * computeDiseaseDeltas() sets the work flow for the model. The following example
+	 * is derived from the standard code for all build in models but in the line below
+	 * where we define final "double transmisionRate" we show and example modification
+	 * where a periodic forcing factor { sin(freq*t) } is added to the code as an example
+	 * modification.
+	 * 
+	 * @param time
+	 * 			  current time
+	 * @param currentState
+	 *            the current state of the population
+	 * @param diseaseLabel
+	 *            the disease label for which the state transitions are being
+	 *            computed.
+	 * @param timeDelta
+	 *            the time period (milliseconds) over which the population
+	 *            members transition to new states          
+	 * @return a disease state label value that contains the number of
+	 *         delta changes in each disease state
+	 * 
+	 * Users can modify the method below to create their own model.
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		double currentMillis = time.getTime().getTime();
+		double seasonalModulationExponent = getSeasonalModulationExponent();
+		double seasonalModulationFloor = getSeasonalModulationFloor();
+		double phase = getModulationPhaseShift();	
+		double modulation = seasonalModulationFloor + (1-seasonalModulationFloor)*Math.pow(Math.abs(Math.sin(phase + Math.PI*currentMillis/(getModulationPeriod()*MILLIS_PER_DAY))), seasonalModulationExponent);
+		
+		// This is beta*
+		double transmissionRate = modulation * (getAdjustedTransmissionRate(timeDelta));
+
+		if(!this.isFrequencyDependent())  transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* effectiveInfectious;
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+		
+	} // computeTransitions
+
+	
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double Inoisy = currentSI.getI()* computeNoise();
+			double change = oldI-Inoisy;
+			currentSI.setI(Inoisy);
+			double newS = currentSI.getS() + change;
+			if(newS < 0.0) {
+				// Need to rescale
+				double scale = (currentSI.getS() + newS) / currentSI.getS();
+				currentSI.setI(Inoisy*scale);
+			} else  currentSI.setS(newS);
+			return;
+	} // doModelSpecificAdjustments
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSeasonalModulationExponent() {
+		return seasonalModulationExponent;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeasonalModulationExponent(double newSeasonalModulationExponent) {
+		double oldSeasonalModulationExponent = seasonalModulationExponent;
+		seasonalModulationExponent = newSeasonalModulationExponent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT, oldSeasonalModulationExponent, seasonalModulationExponent));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPeriod() {
+		return modulationPeriod;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPeriod(double newModulationPeriod) {
+		double oldModulationPeriod = modulationPeriod;
+		modulationPeriod = newModulationPeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD, oldModulationPeriod, modulationPeriod));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPhaseShift() {
+		return modulationPhaseShift;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPhaseShift(double newModulationPhaseShift) {
+		double oldModulationPhaseShift = modulationPhaseShift;
+		modulationPhaseShift = newModulationPhaseShift;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT, oldModulationPhaseShift, modulationPhaseShift));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSeasonalModulationFloor() {
+		return seasonalModulationFloor;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeasonalModulationFloor(double newSeasonalModulationFloor) {
+		double oldSeasonalModulationFloor = seasonalModulationFloor;
+		seasonalModulationFloor = newSeasonalModulationFloor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR, oldSeasonalModulationFloor, seasonalModulationFloor));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				return new Double(getSeasonalModulationExponent());
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+				return new Double(getModulationPeriod());
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return new Double(getModulationPhaseShift());
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				return new Double(getSeasonalModulationFloor());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				setSeasonalModulationExponent(((Double)newValue).doubleValue());
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod(((Double)newValue).doubleValue());
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift(((Double)newValue).doubleValue());
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				setSeasonalModulationFloor(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				setSeasonalModulationExponent(SEASONAL_MODULATION_EXPONENT_EDEFAULT);
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod(MODULATION_PERIOD_EDEFAULT);
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift(MODULATION_PHASE_SHIFT_EDEFAULT);
+				return;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				setSeasonalModulationFloor(SEASONAL_MODULATION_FLOOR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				return seasonalModulationExponent != SEASONAL_MODULATION_EXPONENT_EDEFAULT;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+				return modulationPeriod != MODULATION_PERIOD_EDEFAULT;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return modulationPhaseShift != MODULATION_PHASE_SHIFT_EDEFAULT;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				return seasonalModulationFloor != SEASONAL_MODULATION_FLOOR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seasonalModulationExponent: "); //$NON-NLS-1$
+		result.append(seasonalModulationExponent);
+		result.append(", modulationPeriod: "); //$NON-NLS-1$
+		result.append(modulationPeriod);
+		result.append(", modulationPhaseShift: "); //$NON-NLS-1$
+		result.append(modulationPhaseShift);
+		result.append(", seasonalModulationFloor: "); //$NON-NLS-1$
+		result.append(seasonalModulationFloor);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ExampleDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleFactoryImpl.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleFactoryImpl.java
new file mode 100644
index 0000000..394282c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExampleFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.diseasemodels.example.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.diseasemodels.example.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleFactoryImpl extends EFactoryImpl implements ExampleFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ExampleFactory init() {
+		try {
+			ExampleFactory theExampleFactory = (ExampleFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/example.ecore"); //$NON-NLS-1$ 
+			if (theExampleFactory != null) {
+				return theExampleFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ExampleFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL: return createExampleDiseaseModel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleDiseaseModel createExampleDiseaseModel() {
+		ExampleDiseaseModelImpl exampleDiseaseModel = new ExampleDiseaseModelImpl();
+		return exampleDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExamplePackage getExamplePackage() {
+		return (ExamplePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ExamplePackage getPackage() {
+		return ExamplePackage.eINSTANCE;
+	}
+
+} //ExampleFactoryImpl
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExamplePackageImpl.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExamplePackageImpl.java
new file mode 100644
index 0000000..59de210
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/impl/ExamplePackageImpl.java
@@ -0,0 +1,245 @@
+package org.eclipse.stem.diseasemodels.example.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+
+import org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel;
+import org.eclipse.stem.diseasemodels.example.ExampleFactory;
+import org.eclipse.stem.diseasemodels.example.ExamplePackage;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExamplePackageImpl extends EPackageImpl implements ExamplePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass exampleDiseaseModelEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.diseasemodels.example.ExamplePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ExamplePackageImpl() {
+		super(eNS_URI, ExampleFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ExamplePackage init() {
+		if (isInited) return (ExamplePackage)EPackage.Registry.INSTANCE.getEPackage(ExamplePackage.eNS_URI);
+
+		// Obtain or create and register package
+		ExamplePackageImpl theExamplePackage = (ExamplePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ExamplePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ExamplePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		StandardPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theExamplePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theExamplePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theExamplePackage.freeze();
+
+		return theExamplePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExampleDiseaseModel() {
+		return exampleDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExampleDiseaseModel_SeasonalModulationExponent() {
+		return (EAttribute)exampleDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExampleDiseaseModel_ModulationPeriod() {
+		return (EAttribute)exampleDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExampleDiseaseModel_ModulationPhaseShift() {
+		return (EAttribute)exampleDiseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExampleDiseaseModel_SeasonalModulationFloor() {
+		return (EAttribute)exampleDiseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleFactory getExampleFactory() {
+		return (ExampleFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		exampleDiseaseModelEClass = createEClass(EXAMPLE_DISEASE_MODEL);
+		createEAttribute(exampleDiseaseModelEClass, EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT);
+		createEAttribute(exampleDiseaseModelEClass, EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD);
+		createEAttribute(exampleDiseaseModelEClass, EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT);
+		createEAttribute(exampleDiseaseModelEClass, EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		StandardPackage theStandardPackage = (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		exampleDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSIRDiseaseModel());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(exampleDiseaseModelEClass, ExampleDiseaseModel.class, "ExampleDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getExampleDiseaseModel_SeasonalModulationExponent(), theEcorePackage.getEDouble(), "seasonalModulationExponent", "2.0", 0, 1, ExampleDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getExampleDiseaseModel_ModulationPeriod(), ecorePackage.getEDouble(), "modulationPeriod", "365.256363051", 0, 1, ExampleDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getExampleDiseaseModel_ModulationPhaseShift(), ecorePackage.getEDouble(), "modulationPhaseShift", "0.0", 0, 1, ExampleDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getExampleDiseaseModel_SeasonalModulationFloor(), theEcorePackage.getEDouble(), "seasonalModulationFloor", "0.6", 0, 1, ExampleDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ExamplePackageImpl
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleDiseaseModelItemProvider.java
new file mode 100644
index 0000000..8680ae3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleDiseaseModelItemProvider.java
@@ -0,0 +1,239 @@
+package org.eclipse.stem.diseasemodels.example.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel;
+import org.eclipse.stem.diseasemodels.example.ExamplePackage;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleDiseaseModelItemProvider
+	extends StochasticSIRDiseaseModelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeasonalModulationExponentPropertyDescriptor(object);
+			addModulationPeriodPropertyDescriptor(object);
+			addModulationPhaseShiftPropertyDescriptor(object);
+			addSeasonalModulationFloorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Seasonal Modulation Exponent feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeasonalModulationExponentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExampleDiseaseModel_seasonalModulationExponent_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExampleDiseaseModel_seasonalModulationExponent_feature", "_UI_ExampleDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Period feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExampleDiseaseModel_modulationPeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExampleDiseaseModel_modulationPeriod_feature", "_UI_ExampleDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Phase Shift feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPhaseShiftPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExampleDiseaseModel_modulationPhaseShift_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExampleDiseaseModel_modulationPhaseShift_feature", "_UI_ExampleDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Seasonal Modulation Floor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeasonalModulationFloorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExampleDiseaseModel_seasonalModulationFloor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExampleDiseaseModel_seasonalModulationFloor_feature", "_UI_ExampleDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns ExampleDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ExampleDiseaseModel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ExampleDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ExampleDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_ExampleDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ExampleDiseaseModel.class)) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ExampleEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleEditPlugin.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleEditPlugin.java
new file mode 100644
index 0000000..a763865
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleEditPlugin.java
@@ -0,0 +1,112 @@
+package org.eclipse.stem.diseasemodels.example.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+//import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+//import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+/**
+ * This is the central singleton for the Example edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ExampleEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ExampleEditPlugin INSTANCE = new ExampleEditPlugin();
+	
+	/**
+	 * 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 NOT
+	 */
+	public ExampleEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				//EcoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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
+		 */
+		@SuppressWarnings("synthetic-access")
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleItemProviderAdapterFactory.java
new file mode 100644
index 0000000..0258d17
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/provider/ExampleItemProviderAdapterFactory.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.diseasemodels.example.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.example.util.ExampleAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleItemProviderAdapterFactory extends ExampleAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExampleDiseaseModelItemProvider exampleDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createExampleDiseaseModelAdapter() {
+		if (exampleDiseaseModelItemProvider == null) {
+			exampleDiseaseModelItemProvider = new ExampleDiseaseModelItemProvider(this);
+		}
+
+		return exampleDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (exampleDiseaseModelItemProvider != null) exampleDiseaseModelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleAdapterFactory.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleAdapterFactory.java
new file mode 100644
index 0000000..849e908
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleAdapterFactory.java
@@ -0,0 +1,399 @@
+package org.eclipse.stem.diseasemodels.example.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.example.*;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.example.ExamplePackage
+ * @generated
+ */
+public class ExampleAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExamplePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ExamplePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExampleSwitch<Adapter> modelSwitch =
+		new ExampleSwitch<Adapter>() {
+			@Override
+			public Adapter caseExampleDiseaseModel(ExampleDiseaseModel object) {
+				return createExampleDiseaseModelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModel(DiseaseModel object) {
+				return createDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseIntegrationDecorator(IntegrationDecorator object) {
+				return createIntegrationDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModel(StandardDiseaseModel object) {
+				return createStandardDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseSI(SI object) {
+				return createSIAdapter();
+			}
+			@Override
+			public Adapter caseSIR(SIR object) {
+				return createSIRAdapter();
+			}
+			@Override
+			public Adapter caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+				return createStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+				return createStandardStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+				return createStochasticSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel
+	 * @generated
+	 */
+	public Adapter createExampleDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.IntegrationDecorator
+	 * @generated
+	 */
+	public Adapter createIntegrationDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI
+	 * @generated
+	 */
+	public Adapter createSIAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR
+	 * @generated
+	 */
+	public Adapter createSIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel <em>Stochastic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ExampleAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleSwitch.java b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleSwitch.java
new file mode 100644
index 0000000..2509d9d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/util/ExampleSwitch.java
@@ -0,0 +1,377 @@
+package org.eclipse.stem.diseasemodels.example.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.example.*;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.example.ExamplePackage
+ * @generated
+ */
+public class ExampleSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExamplePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ExamplePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL: {
+				ExampleDiseaseModel exampleDiseaseModel = (ExampleDiseaseModel)theEObject;
+				T1 result = caseExampleDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseStochasticSIRDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseSIR(exampleDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseSI(exampleDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseDiseaseModel(exampleDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(exampleDiseaseModel);
+				if (result == null) result = caseNodeDecorator(exampleDiseaseModel);
+				if (result == null) result = caseSanityChecker(exampleDiseaseModel);
+				if (result == null) result = caseModifiable(exampleDiseaseModel);
+				if (result == null) result = caseDecorator(exampleDiseaseModel);
+				if (result == null) result = caseIdentifiable(exampleDiseaseModel);
+				if (result == null) result = caseComparable(exampleDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseExampleDiseaseModel(ExampleDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModel(DiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegrationDecorator(IntegrationDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModel(StandardDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSI(SI object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIR(SIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ExampleSwitch
diff --git a/org.eclipse.stem.diseasemodels.experimental/.classpath b/org.eclipse.stem.diseasemodels.experimental/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseasemodels.experimental/.project b/org.eclipse.stem.diseasemodels.experimental/.project
new file mode 100644
index 0000000..0294642
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseasemodels.experimental</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseasemodels.experimental/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels.experimental/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..16c3a68
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:57:56 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.diseasemodels.experimental/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels.experimental/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7f1a6e7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/META-INF/MANIFEST.MF
@@ -0,0 +1,39 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.experimental; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.experimental.provider.ExperimentalEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.experimental;uses:="org.eclipse.stem.diseasemodels.standard,org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.experimental.impl;
+  uses:="org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.emf.ecore.impl,
+   org.eclipse.stem.diseasemodels.experimental,
+   org.eclipse.stem.diseasemodels.standard.impl,
+   org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.experimental.provider;
+  uses:="org.eclipse.emf.common,
+   org.eclipse.stem.diseasemodels.experimental.util,
+   org.eclipse.stem.diseasemodels.standard.provider,
+   org.eclipse.emf.common.notify,
+   org.eclipse.emf.edit.provider,
+   org.eclipse.emf.common.util",
+ org.eclipse.stem.diseasemodels.experimental.util;
+  uses:="org.eclipse.emf.common.notify.impl,
+   org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.stem.diseasemodels.experimental,
+   org.eclipse.emf.common.notify,
+   org.eclipse.stem.core.model,
+   org.eclipse.stem.core.common,
+   org.eclipse.emf.ecore"
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.diseasemodels.experimental/build.properties b/org.eclipse.stem.diseasemodels.experimental/build.properties
new file mode 100644
index 0000000..4b45343
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/build.properties
@@ -0,0 +1,13 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.diseasemodels.experimental/icons/full/obj16/PerculationDiseaseModel.gif b/org.eclipse.stem.diseasemodels.experimental/icons/full/obj16/PerculationDiseaseModel.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/icons/full/obj16/PerculationDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.experimental/model/experimental.ecore b/org.eclipse.stem.diseasemodels.experimental/model/experimental.ecore
new file mode 100644
index 0000000..ec1fa2f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/model/experimental.ecore
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="experimental"
+    nsURI="http:///org/eclipse/stem/diseasemodels/experimental.ecore" nsPrefix="org.eclipse.stem.diseasemodels.experimental">
+  <eClassifiers xsi:type="ecore:EClass" name="PerculationDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSEIRDiseaseModel"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.diseasemodels.experimental/model/experimental.genmodel b/org.eclipse.stem.diseasemodels.experimental/model/experimental.genmodel
new file mode 100644
index 0000000..51b1305
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/model/experimental.genmodel
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels.experimental/src"
+    editDirectory="/org.eclipse.stem.diseasemodels.experimental/src" editorDirectory="/org.eclipse.stem.ui.diseasemodels.experimental/src"
+    modelPluginID="org.eclipse.stem.diseasemodels.experimental" modelName="Experimental"
+    testsDirectory="/org.eclipse.stem.diseasemodels.tests.experimental/src" importerID="org.eclipse.emf.importer.java"
+    complianceLevel="5.0" usedGenPackages="../../org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel#//standard ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Experimental" basePackage="org.eclipse.stem.diseasemodels"
+      disposableProviderFactory="true" ecorePackage="experimental.ecore#/">
+    <genClasses ecoreClass="experimental.ecore#//PerculationDiseaseModel"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.diseasemodels.experimental/plugin.properties b/org.eclipse.stem.diseasemodels.experimental/plugin.properties
new file mode 100644
index 0000000..b5f16ec
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.experimental/plugin.xml b/org.eclipse.stem.diseasemodels.experimental/plugin.xml
new file mode 100644
index 0000000..1f68b99
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+    
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/diseasemodels/experimental.ecore" 
+       class = "org.eclipse.stem.diseasemodels.experimental.provider.ExperimentalItemProviderAdapterFactory" 
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/diseasemodels/experimental.ecore"
+       class = "org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage"
+       genModel = "model/experimental.genmodel" /> 
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="Kaufman"
+           description="Percolation SEIR Stochastic Disease Model"
+           identifier="org.eclipse.stem.diseasemodels.experimental.dublin_core4"
+           title="Percolation SEIR Disease Model">
+     </dublin_core>
+  </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabel.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabel.java
new file mode 100644
index 0000000..2ad36ee
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabel.java
@@ -0,0 +1,71 @@
+// CellularAutomataModelLabel.java
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+
+/**
+ * This interface defines a class in an EMF model for an STEM Disease model
+ * label. It is the top-level disease model, all other disease model labels
+ * derive from this class.
+ * 
+ * @model abstract="true"
+ */
+public interface CellularAutomataModelLabel extends DynamicNodeLabel {
+
+	/**
+	 * This is the top-level segment for all type URI's for disease model
+	 * labels.
+	 */
+	String URI_TYPE_DISEASE_MODEL_LABEL_SEGMENT = URI_TYPE_DYNAMIC_LABEL_SEGMENT
+			+ "/diseasemodel"; //$NON-NLS-1$
+
+	/**
+	 * This is the type URI for disease model labels
+	 */
+	URI URI_TYPE_SIR_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_DISEASE_MODEL_LABEL_SEGMENT);
+
+	
+
+	/**
+	 * @return the disease model state associated with this label (if any).
+	 * @model containment="true" opposite="label"
+	 */
+	CellularAutomataModelState getCellularAutomataModelState();
+
+	/**
+	 * Sets the value of the '<em>Disease Model State</em> containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Model State</em>' containment reference.
+	 * @generated
+	 */
+	void setCellularAutomataModelState(CellularAutomataModelState value);
+
+	
+	
+	
+	/**
+	 * @return the current SI label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	CellularAutomataModelLabelValue getCurrentCellularAutomataModelLabelValue();
+
+	/**
+	 * @return the next SI label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	CellularAutomataModelLabelValue getNextCellularAutomataModelLabelValue();
+} // CellularAutomataModelLabel
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabelValue.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabelValue.java
new file mode 100644
index 0000000..da8aade
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelLabelValue.java
@@ -0,0 +1,67 @@
+// CellularAutomataModelLabelValue.java
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This interface defines a class in an EMF model for an disease model label
+ * value. The values of this label record the number of population members who
+ * have been "born" and who have "died".
+ * 
+ * @model abstract="true"
+ */
+
+public interface CellularAutomataModelLabelValue extends LabelValue {
+
+	
+	
+	/**
+	 * @return the genome property 
+	 * @model default="0"
+	 */
+	double getGenome();
+
+	/**
+	 * Sets the value of the <em>Genome</em> attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Births</em>' attribute.
+	 * @generated
+	 */
+	void setGenome(String value);
+
+
+	/**
+	 * Set the value of this disease model label to be the same as the value
+	 * 
+	 * @param value
+	 *            the new value for this disease model value
+	 * @return this instance with the new values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	CellularAutomataModelLabelValue set(final CellularAutomataModelLabelValue value);
+
+	/**
+	 * Add the value of this disease model label to the value
+	 * 
+	 * @param value
+	 *            the value to be added to this disease model value
+	 * @return this instance with the sum of values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	CellularAutomataModelLabelValue add(final CellularAutomataModelLabelValue value);
+
+	
+} // CellularAutomataModelLabelValue
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelState.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelState.java
new file mode 100644
index 0000000..cc8356b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularAutomataModelState.java
@@ -0,0 +1,49 @@
+// CellularAutomataModelState.java
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * This interface defines a class in an EMF model that contains state
+ * information for a STEM cellular automata model's computations from one simulation cycle
+ * to another. The basic idea is that the cellular automata model can store state
+ * information in an instance and attach it to a cellular automata model label such that
+ * when it revisits the label to compute its value it can refer to the state
+ * information to as part of its computation. For instance, if the value of
+ * a label is dependent on the values of other labels, references to those
+ * labels could be "cached" in the state instance and not recomputed for each
+ * cycle.
+ * 
+ * @model abstract="true"
+ * @implements SanityChecker
+ */
+public interface CellularAutomataModelState extends EObject, SanityChecker {
+
+	/**
+	 * @return the label associated with the state information
+	 * @model
+	 */
+	CellularAutomataModelLabel getLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.experimental.CellularAutomataModelState#getLabel <em>Label</em>}' container reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Label</em>' container reference.
+	 * @see #getLabel()
+	 * @generated
+	 */
+	void setLabel(CellularAutomataModelLabel value);
+
+}// CellularAutomataModelState
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularDiseaseModel.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularDiseaseModel.java
new file mode 100644
index 0000000..92eefb5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/CellularDiseaseModel.java
@@ -0,0 +1,24 @@
+// CellularDiseaseModel.java
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+
+/**
+ * This interface is an EMF Model.
+ * 
+ * @model
+ */
+public interface CellularDiseaseModel extends StandardDiseaseModel {
+	// Nothing
+} // CellularDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalFactory.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalFactory.java
new file mode 100644
index 0000000..2634830
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage
+ * @generated
+ */
+public interface ExperimentalFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExperimentalFactory eINSTANCE = org.eclipse.stem.diseasemodels.experimental.impl.ExperimentalFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Percolation Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Percolation Disease Model</em>'.
+	 * @generated
+	 */
+	PercolationDiseaseModel createPercolationDiseaseModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ExperimentalPackage getExperimentalPackage();
+
+} //ExperimentalFactory
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalPackage.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalPackage.java
new file mode 100644
index 0000000..9374170
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/ExperimentalPackage.java
@@ -0,0 +1,329 @@
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.experimental.ExperimentalFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ExperimentalPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "experimental";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/experimental.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.experimental";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExperimentalPackage eINSTANCE = org.eclipse.stem.diseasemodels.experimental.impl.ExperimentalPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl <em>Percolation Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.experimental.impl.ExperimentalPackageImpl#getPercolationDiseaseModel()
+	 * @generated
+	 */
+	int PERCOLATION_DISEASE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__URI = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__GRAPH = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_AREA;
+
+	
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Incubation Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__INCUBATION_RATE = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__INCUBATION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__SEED = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL__GAIN = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN;
+
+	/**
+	 * The number of structural features of the '<em>Percolation Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PERCOLATION_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel <em>Percolation Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Percolation Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel
+	 * @generated
+	 */
+	EClass getPercolationDiseaseModel();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ExperimentalFactory getExperimentalFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl <em>Percolation Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.experimental.impl.ExperimentalPackageImpl#getPercolationDiseaseModel()
+		 * @generated
+		 */
+		EClass PERCOLATION_DISEASE_MODEL = eINSTANCE.getPercolationDiseaseModel();
+
+	}
+
+} //ExperimentalPackage
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/PercolationDiseaseModel.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/PercolationDiseaseModel.java
new file mode 100644
index 0000000..969bc9f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/PercolationDiseaseModel.java
@@ -0,0 +1,24 @@
+// PercolationDiseaseModel.java
+package org.eclipse.stem.diseasemodels.experimental;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * This interface is an EMF Model.
+ * 
+ * @model
+ */
+public interface PercolationDiseaseModel extends StochasticSEIRDiseaseModel {
+	// Nothing
+} // PercolationDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/CellularDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/CellularDiseaseModelImpl.java
new file mode 100644
index 0000000..2c0fdb9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/CellularDiseaseModelImpl.java
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.stem.diseasemodels.experimental.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.experimental.CellularDiseaseModel;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Percolation Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class CellularDiseaseModelImpl extends SIImpl implements CellularDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CellularDiseaseModelImpl() {
+		super();
+	}
+
+	LogDiseaseState lds = null;
+	int icount = 0;
+	
+	
+	
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(org.eclipse.stem.core.model.STEMTime, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		
+		final SILabelValue currentSI = (SILabelValue) currentState;
+		
+		// This is beta*
+		final double transmissionRate = (getAdjustedTransmissionRate(timeDelta)
+				* getTransmissionRateScaleFactor(diseaseLabel));
+				
+		
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSI.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		
+		double numberOfSusceptibleToInfected = transmissionRate
+		* currentSI.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		
+		// Compute the number of recovering "infectious" that become "recovered"
+		// this is rescaled by the surviving I population  so we don't move people that
+		// are already dead.
+		double numberOfInfectedToSusceptible = getAdjustedRecoveryRate(timeDelta)
+				* currentSI.getI();
+		
+
+		
+		// Determine delta S
+		final double deltaS = - numberOfSusceptibleToInfected + numberOfInfectedToSusceptible;
+		// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected - numberOfInfectedToSusceptible;	
+		
+		SILabelValueImpl ret = (SILabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToInfected);
+		ret.setDiseaseDeaths(0.0);
+		return ret;
+	} // computeDiseaseDeltas
+	
+	
+	
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	@Override
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue currentState) {
+
+	
+		return;
+		
+	} // doModelSpecificAdjustments
+	
+	
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExperimentalPackage.Literals.PERCOLATION_DISEASE_MODEL;
+	}
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// Nothing
+	}
+	
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+} //CellularDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalFactoryImpl.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalFactoryImpl.java
new file mode 100644
index 0000000..05e047b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalFactoryImpl.java
@@ -0,0 +1,107 @@
+package org.eclipse.stem.diseasemodels.experimental.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalFactory;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalFactoryImpl extends EFactoryImpl implements ExperimentalFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return ExperimentalFactory instance
+	 * @generated
+	 */
+	public static ExperimentalFactory init() {
+		try {
+			ExperimentalFactory theExperimentalFactory = (ExperimentalFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/experimental.ecore"); 
+			if (theExperimentalFactory != null) {
+				return theExperimentalFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ExperimentalFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentalFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ExperimentalPackage.PERCOLATION_DISEASE_MODEL: return createPercolationDiseaseModel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the percolationDiseaseModel
+	 * @generated
+	 */
+	public PercolationDiseaseModel createPercolationDiseaseModel() {
+		PercolationDiseaseModelImpl percolationDiseaseModel = new PercolationDiseaseModelImpl();
+		return percolationDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return experimentalPackage 
+	 * @generated
+	 */
+	public ExperimentalPackage getExperimentalPackage() {
+		return (ExperimentalPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return ExperimentalPackage eInstance
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ExperimentalPackage getPackage() {
+		return ExperimentalPackage.eINSTANCE;
+	}
+
+} //ExperimentalFactoryImpl
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalPackageImpl.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalPackageImpl.java
new file mode 100644
index 0000000..c35d637
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/ExperimentalPackageImpl.java
@@ -0,0 +1,198 @@
+package org.eclipse.stem.diseasemodels.experimental.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalFactory;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalPackageImpl extends EPackageImpl implements ExperimentalPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass PercolationDiseaseModelEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ExperimentalPackageImpl() {
+		super(eNS_URI, ExperimentalFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return  ExperimentalPackate instance
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ExperimentalPackage init() {
+		if (isInited) return (ExperimentalPackage)EPackage.Registry.INSTANCE.getEPackage(ExperimentalPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ExperimentalPackageImpl theExperimentalPackage = (ExperimentalPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ExperimentalPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ExperimentalPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		StandardPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		GraphPackage.eINSTANCE.eClass();
+		LabelsPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theExperimentalPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theExperimentalPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theExperimentalPackage.freeze();
+
+		return theExperimentalPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return PercolationDiseaseModelEClass
+	 * @generated
+	 */
+	public EClass getPercolationDiseaseModel() {
+		return PercolationDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return ExperimentalFactory
+	 * @generated
+	 */
+	public ExperimentalFactory getExperimentalFactory() {
+		return (ExperimentalFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		PercolationDiseaseModelEClass = createEClass(PERCOLATION_DISEASE_MODEL);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		StandardPackage theStandardPackage = (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		PercolationDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSEIRDiseaseModel());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(PercolationDiseaseModelEClass, PercolationDiseaseModel.class, "PercolationDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ExperimentalPackageImpl
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/LogDiseaseState.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/LogDiseaseState.java
new file mode 100644
index 0000000..a3e8e46
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/LogDiseaseState.java
@@ -0,0 +1,66 @@
+package org.eclipse.stem.diseasemodels.experimental.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.FileWriter;
+import java.io.IOException;
+
+ class LogDiseaseState {
+
+    private static FileWriter fw;
+
+    /**
+     * Constructor
+     * @param fileName
+     */
+	public LogDiseaseState(String fileName) {
+		try {
+			fw = new FileWriter(fileName);
+	} catch (IOException e) {
+				System.out.println("Error creating file writer "+e.getMessage());
+			    e.printStackTrace();
+			    System.exit(1);
+	}
+	}
+	
+
+/**
+ * write string
+ * @param str
+ */
+public void write(String str) {
+	try {
+		 //System.out.print(str);
+	     fw.write(str); 
+	 } catch (IOException e) {
+			System.out.println("Error writing to file writer "+e.getMessage());
+		    e.printStackTrace();
+		    System.exit(1);
+	  }// try
+} // write
+
+/**
+ * close
+ */
+public static void close() {
+			
+	try {
+		  fw.flush();
+	      fw.close();
+	} catch (IOException e) {
+			System.out.println("Error closing file writer "+e.getMessage());
+		    e.printStackTrace();
+	}// try
+}
+	
+
+} // LogDiseaseState
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/PercolationDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/PercolationDiseaseModelImpl.java
new file mode 100644
index 0000000..78c751b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/impl/PercolationDiseaseModelImpl.java
@@ -0,0 +1,244 @@
+package org.eclipse.stem.diseasemodels.experimental.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Percolation Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PercolationDiseaseModelImpl extends StochasticSEIRDiseaseModelImpl implements PercolationDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PercolationDiseaseModelImpl() {
+		super();
+	}
+
+	LogDiseaseState lds = null;
+	int icount = 0;
+	static boolean logComplete = false;
+
+	
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl#computeDiseaseDeltas(org.eclipse.stem.core.model.STEMTime, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		final SEIRLabelValue currentSEIR = (SEIRLabelValue) currentState;
+
+		// This is beta* The effective transmission rate constant (normalized)
+		final double transmisionRate = getAdjustedTransmissionRate(timeDelta)
+				* getTransmissionRateScaleFactor(diseaseLabel);
+		
+		
+		/*
+		 * This Must become a parameter
+		 */
+		final double CRITICAL_SUSCEPTIBLE = 0.25;
+		
+		/*
+         * 4) Compute the "Local Transmission Coefficient"
+         * 
+         * The (Normalized) "Local Transmission Coefficient" depends upon the
+         * disease's specified transmission coefficient, but it scales with the
+         * local population density. This rescaling or "normalization" is done
+         * by the currentCounty.getTransScaleFactor() method.
+         */
+		
+		double den = currentSEIR.getPopulationCount();
+
+		double se =  (currentSEIR.getS()+ currentSEIR.getE()+ currentSEIR.getI()) / den;
+        //double se =  (currentSEIR.getS()+ currentSEIR.getE()) / den;
+        //double se =  currentSEIR.getS() / den;
+        double percFact = 1.0;
+        double localTransmisionCoefficient = 0.0;
+        
+        
+        /*
+         ******************************************************************
+         * THIS IS WHERE WE ADD THE PERCOLATION THRESHOLD TO THE MODEL ****
+         ******************************************************************
+         */ 
+        // if above percolation threshold
+        if (se >= CRITICAL_SUSCEPTIBLE) {
+			// now we put in percolation
+			double percNum = se - CRITICAL_SUSCEPTIBLE;
+			if (percNum <= 0.0)
+				percNum = 0.0; // should never happen
+			// Normalization (so all percolation fn terms max at 1.0
+			double percNorm = 1.0 - CRITICAL_SUSCEPTIBLE;
+			/*
+			 * getNonLinearityCoefficient() used differently here....
+			 */
+			percFact = Math.pow((percNum / percNorm), getNonLinearityCoefficient());
+			// THE TRANSMISSION COEF ABOVE CRITICAL POINT
+			localTransmisionCoefficient = transmisionRate * percFact;
+		} else {
+			localTransmisionCoefficient = 0.0;
+			////ELSE add an exponential tail
+			//double num = -1.0 * Math.abs(CRITICAL_SUSCEPTIBLE - si);
+			//num *= (20.0 / nonLinearityExponent);
+			////THE TRANSMISSION COEF BELOW CRITICAL POINT
+			//localTransmisionCoefficient = .02*Math.exp(num);
+			////System.out.println("s= "+si+" beta= "+localTransmisionCoefficient);
+		}
+        /*
+         *************************************
+         * END PERCOLATION THRESHOLD CODE ****
+         *************************************
+         */ 
+        
+		
+		if (lds==null) {
+			int inc = (int) (this.incubationRate*100.0);
+			int beta = (int) (this.transmissionRate*100.0);
+			int rec = (int) (this.recoveryRate*100.0);
+			int imloss = (int) (this.immunityLossRate*1000.0);
+			
+			lds = new LogDiseaseState("./timelogI"+inc+"B"+beta+"il"+imloss+"r"+rec+".txt");
+		}
+		
+		
+		double pd = 1.0 / currentSEIR.getPopulationCount();
+		String str = icount+", "+currentSEIR.getS() * pd +", "+currentSEIR.getE()* pd + ", " + currentSEIR.getI()* pd + ", " + currentSEIR.getR()* pd + "\n";
+        
+		if (icount <= 500) {
+			lds.write(str);
+			icount++;
+		}
+        
+		if (icount == 501) {
+			if ((!logComplete) && (lds != null)) {
+				LogDiseaseState.close();
+				logComplete = true;
+			}
+		}
+      
+		// System.out.println(" si = "+si+" str = "+str );
+		
+		// The effective Infectious population  is a dimensionless number normalize by total
+		// population used in the computation of bets*S*i where i = I{effective}/Pop.
+		// This includes a correction to the current
+		// infectious population (I{effective}) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSEIR.getI());
+
+		
+		// Compute the number of recovering "infectious" that become "recovered"
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+				* currentSEIR.getI();
+
+		// Compute the number of "recovered" that lose their immunity and
+		// become "susceptible"
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+				* currentSEIR.getR();
+
+		/*
+		 * Compute the number of transitions from Susceptible to Exposed
+		 * 
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+
+		double numberOfSusceptibleToExposed = localTransmisionCoefficient
+				* currentSEIR.getS()
+				* effectiveInfectious;
+
+		// Compute the number of "exposed" that become "infectious"
+		double numberOfExposedToInfectious = getAdjustedIncubationRate(timeDelta)
+				* currentSEIR.getE();
+		
+		
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToExposed;
+		final double deltaE = numberOfSusceptibleToExposed - numberOfExposedToInfectious;
+		final double deltaI = numberOfExposedToInfectious - numberOfInfectedToRecovered;
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SEIRLabelValueImpl ret = (SEIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setE(deltaE);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToExposed);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	
+	} // computeDiseaseDeltas
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double Inoisy = currentSI.getI()* computeNoise();
+			double change = oldI-Inoisy;
+			currentSI.setI(Inoisy);
+			double newS = currentSI.getS() + change;
+			if(newS < 0.0) {
+				// Need to rescale
+				double scale = (currentSI.getS() + newS) / currentSI.getS();
+				currentSI.setI(Inoisy*scale);
+			} else  currentSI.setS(newS);
+			return;
+	} // doModelSpecificAdjustments
+	
+	
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExperimentalPackage.Literals.PERCOLATION_DISEASE_MODEL;
+	}
+
+} //PercolationDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/CellularDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/CellularDiseaseModelItemProvider.java
new file mode 100644
index 0000000..3fbe2e8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/CellularDiseaseModelItemProvider.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.diseasemodels.experimental.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.experimental.CellularDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSEIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.experimental.CellularDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CellularDiseaseModelItemProvider
+	extends StochasticSEIRDiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param adapterFactory 
+	 * @generated
+	 */
+	public CellularDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns CellularDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/CellularDiseaseModel"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((CellularDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_CellularDiseaseModel_type") :
+			getString("_UI_CellularDiseaseModel_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling to update any cached
+	 * children and by creating a viewer notification, which it passes to .
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ExperimentalEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalEditPlugin.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalEditPlugin.java
new file mode 100644
index 0000000..a4f67e5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalEditPlugin.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.diseasemodels.experimental.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+/**
+ * This is the central singleton for the Experimental edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ExperimentalEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ExperimentalEditPlugin INSTANCE = new ExperimentalEditPlugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentalEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     DiseasemodelsEditPlugin.INSTANCE,
+		     CoreEditPlugin.INSTANCE,
+		     DefinitionsEditPlugin.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/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalItemProviderAdapterFactory.java
new file mode 100644
index 0000000..2b939c6
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/ExperimentalItemProviderAdapterFactory.java
@@ -0,0 +1,210 @@
+package org.eclipse.stem.diseasemodels.experimental.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.experimental.util.ExperimentalAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalItemProviderAdapterFactory extends ExperimentalAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentalItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PercolationDiseaseModelItemProvider percolationDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createPercolationDiseaseModelAdapter() {
+		if (percolationDiseaseModelItemProvider == null) {
+			percolationDiseaseModelItemProvider = new PercolationDiseaseModelItemProvider(this);
+		}
+
+		return percolationDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return rootAdapterFactory
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param parentAdapterFactory 
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param notifyChangedListener 
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param notifyChangedListener 
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param notification 
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (percolationDiseaseModelItemProvider != null) percolationDiseaseModelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/PercolationDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/PercolationDiseaseModelItemProvider.java
new file mode 100644
index 0000000..b19d61b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/provider/PercolationDiseaseModelItemProvider.java
@@ -0,0 +1,143 @@
+package org.eclipse.stem.diseasemodels.experimental.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSEIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PercolationDiseaseModelItemProvider
+	extends StochasticSEIRDiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param adapterFactory 
+	 * @generated
+	 */
+	public PercolationDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns PercolationDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return super.getImage(object);
+	}
+	
+	/**
+	 * This returns PercolationDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * @param object 
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object getImageGen(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PercolationDiseaseModel"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((PercolationDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_PercolationDiseaseModel_type") :
+			getString("_UI_PercolationDiseaseModel_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling updateChildren to update any cached
+	 * children and by creating a viewer notification.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ExperimentalEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalAdapterFactory.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalAdapterFactory.java
new file mode 100644
index 0000000..627782e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalAdapterFactory.java
@@ -0,0 +1,355 @@
+package org.eclipse.stem.diseasemodels.experimental.util;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage
+ * @generated
+ */
+public class ExperimentalAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExperimentalPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentalAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ExperimentalPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExperimentalSwitch<Adapter> modelSwitch =
+		new ExperimentalSwitch<Adapter>() {
+			@Override
+			public Adapter casePercolationDiseaseModel(PercolationDiseaseModel object) {
+				return createPercolationDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModel(DiseaseModel object) {
+				return createDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModel(StandardDiseaseModel object) {
+				return createStandardDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseSI(SI object) {
+				return createSIAdapter();
+			}
+			@Override
+			public Adapter caseSIR(SIR object) {
+				return createSIRAdapter();
+			}
+			@Override
+			public Adapter caseSEIR(SEIR object) {
+				return createSEIRAdapter();
+			}
+			@Override
+			public Adapter caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+				return createStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+				return createStandardStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSEIRDiseaseModel(StochasticSEIRDiseaseModel object) {
+				return createStochasticSEIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel <em>Percolation Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel
+	 * @generated
+	 */
+	public Adapter createPercolationDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI
+	 * @generated
+	 */
+	public Adapter createSIAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR
+	 * @generated
+	 */
+	public Adapter createSIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SEIR <em>SEIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIR
+	 * @generated
+	 */
+	public Adapter createSEIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel <em>Stochastic SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSEIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ExperimentalAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalSwitch.java b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalSwitch.java
new file mode 100644
index 0000000..92894be
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/util/ExperimentalSwitch.java
@@ -0,0 +1,344 @@
+package org.eclipse.stem.diseasemodels.experimental.util;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @param <T> 
+ * @see org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage
+ * @generated
+ */
+
+import org.eclipse.emf.ecore.EObject;
+@SuppressWarnings("all")
+public class ExperimentalSwitch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExperimentalPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentalSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ExperimentalPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param theEObject 
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ExperimentalPackage.PERCOLATION_DISEASE_MODEL: {
+				PercolationDiseaseModel percolationDiseaseModel = (PercolationDiseaseModel)theEObject;
+				T result = casePercolationDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseStochasticSEIRDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseSEIR(percolationDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseSIR(percolationDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseSI(percolationDiseaseModel);
+				if (result == null) result = caseDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(percolationDiseaseModel);
+				if (result == null) result = caseNodeDecorator(percolationDiseaseModel);
+				if (result == null) result = caseSanityChecker(percolationDiseaseModel);
+				if (result == null) result = caseDecorator(percolationDiseaseModel);
+				if (result == null) result = caseIdentifiable(percolationDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Percolation Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Percolation Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePercolationDiseaseModel(PercolationDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseDiseaseModel(DiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStandardDiseaseModel(StandardDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>SI</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>SI</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSI(SI object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>SIR</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>SIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSIR(SIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>SEIR</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>SEIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSEIR(SEIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpretting the object as an instance of '<em>Stochastic SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpretting the object as an instance of '<em>Stochastic SEIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStochasticSEIRDiseaseModel(StochasticSEIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //ExperimentalSwitch
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/.classpath b/org.eclipse.stem.diseasemodels.externaldatasource/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/.project b/org.eclipse.stem.diseasemodels.externaldatasource/.project
new file mode 100644
index 0000000..4a78285
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseasemodels.externaldatasource</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..911f2da
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,78 @@
+#Tue Sep 23 09:35:12 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d85be2c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
@@ -0,0 +1,40 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.externaldatasource;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.externaldatasource.provider.ExternalDataSourceEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.util.analysis,
+ org.eclipse.stem.analysis
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.diseasemodels.externaldatasource;uses:="org.eclipse.stem.diseasemodels.standard,org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.externaldatasource.impl;
+  uses:="org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.emf.ecore.impl,
+   org.eclipse.stem.diseasemodels.externaldatasource,
+   org.eclipse.stem.diseasemodels.standard.impl,
+   org.eclipse.stem.core.model,
+   org.eclipse.swt.widgets,
+   org.eclipse.emf.ecore",
+ org.eclipse.stem.diseasemodels.externaldatasource.provider;
+  uses:="org.eclipse.emf.common,
+   org.eclipse.emf.common.ui,
+   org.eclipse.stem.diseasemodels.standard.provider,
+   org.eclipse.emf.common.notify,
+   org.eclipse.emf.edit.provider,
+   org.eclipse.emf.common.util,
+   org.eclipse.stem.diseasemodels.externaldatasource.util",
+ org.eclipse.stem.diseasemodels.externaldatasource.util;
+  uses:="org.eclipse.stem.diseasemodels.standard,
+   org.eclipse.emf.common.notify.impl,
+   org.eclipse.emf.common.notify,
+   org.eclipse.stem.core.model,
+   org.eclipse.stem.core.common,
+   org.eclipse.stem.diseasemodels.externaldatasource,
+   org.eclipse.emf.ecore"
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/build.properties b/org.eclipse.stem.diseasemodels.externaldatasource/build.properties
new file mode 100644
index 0000000..87d7f43
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/build.properties
@@ -0,0 +1,13 @@
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2008/03/18 04:48:38 jkaufman Exp $
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExperimentalDiseaseModel.gif b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExperimentalDiseaseModel.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExperimentalDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceDiseaseModel.gif b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceDiseaseModel.gif
new file mode 100644
index 0000000..136e3b2
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif
new file mode 100644
index 0000000..8a94410
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif
new file mode 100644
index 0000000..92c8b75
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/model/ExternalDataSource.genmodel b/org.eclipse.stem.diseasemodels.externaldatasource/model/ExternalDataSource.genmodel
new file mode 100644
index 0000000..beeb53a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/model/ExternalDataSource.genmodel
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels.externaldatasource/src"
+    editDirectory="/org.eclipse.stem.diseasemodels.externaldatasource/src" editorDirectory="/org.eclipse.stem.diseasemodels.externaldatasource/src"
+    modelPluginID="org.eclipse.stem.diseasemodels.externaldatasource" modelName="ExternalDataSource"
+    nonNLSMarkers="true" testsDirectory="/org.eclipse.stem.tests.diseasemodels.externaldatasource/src"
+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"
+    usedGenPackages="../../org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel#//standard ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="ExternalDataSource" basePackage="org.eclipse.stem.diseasemodels"
+      disposableProviderFactory="true" multipleEditorPages="false" ecorePackage="externaldatasource.ecore#/">
+    <genClasses ecoreClass="externaldatasource.ecore#//ExternalDataSourceDiseaseModel">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute externaldatasource.ecore#//ExternalDataSourceDiseaseModel/dataPath"/>
+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute externaldatasource.ecore#//ExternalDataSourceDiseaseModel/diseaseType"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/model/externaldatasource.ecore b/org.eclipse.stem.diseasemodels.externaldatasource/model/externaldatasource.ecore
new file mode 100644
index 0000000..975b94e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/model/externaldatasource.ecore
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="externaldatasource"
+    nsURI="http:///org/eclipse/stem/diseasemodels/externaldatasource.ecore" nsPrefix="org.eclipse.stem.diseasemodels.externaldatasource">
+  <eClassifiers xsi:type="ecore:EClass" name="ExternalDataSourceDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//DiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dataPath" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diseaseType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/plugin.properties b/org.eclipse.stem.diseasemodels.externaldatasource/plugin.properties
new file mode 100644
index 0000000..068dd10
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/plugin.xml b/org.eclipse.stem.diseasemodels.externaldatasource/plugin.xml
new file mode 100644
index 0000000..feb7790
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2008/03/18 04:48:38 jkaufman Exp $
+-->
+
+<plugin>
+    
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/diseasemodels/externaldatasource.ecore" 
+       class = "org.eclipse.stem.diseasemodels.externaldatasource.provider.ExternalDataSourceItemProviderAdapterFactory" 
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/diseasemodels/externaldatasource.ecore"
+       class = "org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage"
+       genModel = "model/externaldatasource.genmodel" /> 
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_kaufman"
+           description="%dc_desc_E_S_SEIR"
+           identifier="org.eclipse.stem.diseasemodels.externaldatasource.dublin_core4"
+           title="%dc_title_E_S_SEIR">
+     </dublin_core>
+  </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceDiseaseModel.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceDiseaseModel.java
new file mode 100644
index 0000000..c26ab86
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceDiseaseModel.java
@@ -0,0 +1,126 @@
+// ExternalDataSourceDiseaseModel.java

+package org.eclipse.stem.diseasemodels.externaldatasource;

+

+/*******************************************************************************

+ * Copyright (c) 2007, 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.File;

+

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.diseasemodels.Activator;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;

+

+/**

+ * This interface is an EMF Model.

+ * 

+ * @model

+ */

+public interface ExternalDataSourceDiseaseModel extends DiseaseModel, IntegrationDecorator {

+

+

+	/**

+     * default type of data to input

+     */

+	public static final String IMPORT_TYPE_SI = "SI";

+	/**

+     * default type of data to input

+     */

+	public static final String IMPORT_TYPE_SIR = "SIR";

+	/**

+     * default type of data to input

+     */

+	public static final String IMPORT_TYPE_SEIR = "SEIR";

+	

+	/**

+	 * This is the Default ROOT folder for Import files.

+	 * The User can change this but by default, and for testing,

+	 * data will be in sub-folders of the disease model plug-in runtime preferences

+	 */

+	public static final IPath PATH = Activator.getDefault().getStateLocation();

+

+	/**

+	 * path separator

+	 */

+	public static final String sep = File.separator;

+	

+	/**

+	 * This is the Default folder for Import files.

+	 * The User can change this but by default, and for testing,

+	 * data will be in sub-folders of the disease model plug-in runtime preferences

+	 */

+	public static final String PLAYBACK_SUBDIR = sep+"csv"+sep+"Import";

+	

+	/**

+	 * This is the Default directory for Import files.

+	 * The User can change this but by default, and for testing,

+	 * data will be in sub-folders of the disease model plug-in runtime preferences

+	 */	

+	public static final String DEFAULT_DIR = PATH.toOSString() + PLAYBACK_SUBDIR+sep;

+	

+	/**

+	 * Returns the value of the '<em><b>Data Path</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Data Path</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Data Path</em>' attribute.

+	 * @see #setDataPath(String)

+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage#getExternalDataSourceDiseaseModel_DataPath()

+	 * @model

+	 * @generated

+	 */

+	String getDataPath();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDataPath <em>Data Path</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Data Path</em>' attribute.

+	 * @see #getDataPath()

+	 * @generated

+	 */

+	void setDataPath(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Disease Type</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Disease Type</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Disease Type</em>' attribute.

+	 * @see #setDiseaseType(String)

+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage#getExternalDataSourceDiseaseModel_DiseaseType()

+	 * @model

+	 * @generated

+	 */

+	String getDiseaseType();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDiseaseType <em>Disease Type</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Disease Type</em>' attribute.

+	 * @see #getDiseaseType()

+	 * @generated

+	 */

+	void setDiseaseType(String value);	

+

+	

+	

+	

+	

+} // ExternalDataSourceDiseaseModel

diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceFactory.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceFactory.java
new file mode 100644
index 0000000..2385aac
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourceFactory.java
@@ -0,0 +1,52 @@
+// ExternalDataSourceFactory
+package org.eclipse.stem.diseasemodels.externaldatasource;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage
+ * @generated
+ */
+public interface ExternalDataSourceFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExternalDataSourceFactory eINSTANCE = org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Disease Model</em>'.
+	 * @generated
+	 */
+	ExternalDataSourceDiseaseModel createExternalDataSourceDiseaseModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ExternalDataSourcePackage getExternalDataSourcePackage();
+
+} //ExternalDataSourceFactory
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourcePackage.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourcePackage.java
new file mode 100644
index 0000000..506e92b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/ExternalDataSourcePackage.java
@@ -0,0 +1,287 @@
+// ExternalDataSourcePackage 
+package org.eclipse.stem.diseasemodels.externaldatasource;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ExternalDataSourcePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "externaldatasource";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/externaldatasource.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.externaldatasource";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ExternalDataSourcePackage eINSTANCE = org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourcePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl <em>Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourcePackageImpl#getExternalDataSourceDiseaseModel()
+	 * @generated
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__URI = StandardPackage.DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__TYPE_URI = StandardPackage.DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__GRAPH = StandardPackage.DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__ENABLED = StandardPackage.DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__GRAPH_DECORATED = StandardPackage.DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__TIME_PERIOD = StandardPackage.DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_NAME = StandardPackage.DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Data Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH = StandardPackage.DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Disease Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE = StandardPackage.DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EXTERNAL_DATA_SOURCE_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.DISEASE_MODEL_FEATURE_COUNT + 2;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel
+	 * @generated
+	 */
+	EClass getExternalDataSourceDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDataPath <em>Data Path</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Data Path</em>'.
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDataPath()
+	 * @see #getExternalDataSourceDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExternalDataSourceDiseaseModel_DataPath();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDiseaseType <em>Disease Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Disease Type</em>'.
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel#getDiseaseType()
+	 * @see #getExternalDataSourceDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getExternalDataSourceDiseaseModel_DiseaseType();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ExternalDataSourceFactory getExternalDataSourceFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl <em>Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourcePackageImpl#getExternalDataSourceDiseaseModel()
+		 * @generated
+		 */
+		EClass EXTERNAL_DATA_SOURCE_DISEASE_MODEL = eINSTANCE.getExternalDataSourceDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Data Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH = eINSTANCE.getExternalDataSourceDiseaseModel_DataPath();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE = eINSTANCE.getExternalDataSourceDiseaseModel_DiseaseType();
+
+	}
+
+} //ExternalDataSourcePackage
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceDiseaseModelImpl.java
new file mode 100644
index 0000000..d42eb33
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceDiseaseModelImpl.java
@@ -0,0 +1,804 @@
+// ExternalDataSourceDiseaseModelImpl

+package org.eclipse.stem.diseasemodels.externaldatasource.impl;

+

+

+/*******************************************************************************

+ * Copyright (c) 2007, 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.Iterator;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.ui.provider.PropertySource;

+import org.eclipse.stem.analysis.ScenarioInitializationException;

+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;

+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;

+import org.eclipse.stem.analysis.util.CSVscenarioLoader;

+import org.eclipse.stem.core.common.Identifiable;

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.definitions.labels.AreaLabel;

+import org.eclipse.stem.definitions.labels.PopulationLabel;

+import org.eclipse.stem.diseasemodels.Activator;

+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;

+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;

+import org.eclipse.stem.diseasemodels.standard.Infector;

+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;

+import org.eclipse.stem.diseasemodels.standard.SILabelValue;

+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;

+import org.eclipse.stem.diseasemodels.standard.StandardFactory;

+import org.eclipse.stem.diseasemodels.standard.StandardPackage;

+import org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl;

+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;

+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;

+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;

+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;

+

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Disease Model</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl#getDataPath <em>Data Path</em>}</li>

+ *   <li>{@link org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl#getDiseaseType <em>Disease Type</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class ExternalDataSourceDiseaseModelImpl extends DiseaseModelImpl implements ExternalDataSourceDiseaseModel {

+	

+    /**

+	 * The default value of the '{@link #getDataPath() <em>Data Path</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDataPath()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String DATA_PATH_EDEFAULT = null;

+	/**

+	 * The cached value of the '{@link #getDataPath() <em>Data Path</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDataPath()

+	 * @generated

+	 * @ordered

+	 */

+	protected String dataPath = DATA_PATH_EDEFAULT;

+	

+	//private final static String URI_PREFIX_PATTERN = "geo/region/";

+	

+	/**

+	 * The default value of the '{@link #getDiseaseType() <em>Disease Type</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDiseaseType()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String DISEASE_TYPE_EDEFAULT = null;

+	/**

+	 * This prefix precedes the node id and must be removed in the 

+	 * filterFilename method to auto-generate the output file name.

+	 */

+	public static final String LOCATIONID_PREFIX = "/node/geo/region/";

+	

+	

+	/**

+	 * Directory containing the scenario to import and play back

+	 */

+	public String dirName = DEFAULT_DIR;

+

+	/**

+	 * a map of maps (one for each location containing a data file

+	 */

+	private ReferenceScenarioDataMapImpl scenarioMap = null;

+	

+	/**

+	 * a list of data for each location keyed by nodeID

+	 */

+	private ReferenceScenarioDataInstance dataInstance = null;

+	

+	

+	/**

+	 * a false (Hidden) time counter used for this toy example

+	 */

+	private int fileLineCounter = 0;

+	

+	public static String labelS  = null ;

+	public static String labelE  = null ;

+	public static String labelI = null ;

+	public static String labelR  = null ;

+	

+	/**

+     * not used

+	 */

+	private double totalPopulationCount = 0.0;

+	private double totalArea = 0.0;

+	

+	private String diseaseType;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public ExternalDataSourceDiseaseModelImpl() {

+		super();

+	}

+

+	

+	

+

+	/**

+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(org.eclipse.stem.core.graph.Graph,

+	 *      org.eclipse.stem.core.model.STEMTime)

+	 */

+	@Override

+	public void updateLabels(final STEMTime time, final long timeDelta, int cycle) {

+		

+		

+		// MAD 10/29/2009

+		// Commented out code, moved to "calculateDelta" for IntegrationDecorator.

+		// Not sure what updates need to happen to "updateLabels".

+		

+		/*

+		// Iterate through each of the labels we need to update.

+		for (final Iterator<DynamicLabel> currentStateLabelIter = getLabelsToUpdate()

+				.iterator(); currentStateLabelIter.hasNext();) {

+			final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) currentStateLabelIter

+					.next();

+

+			assert diseaseLabel.getPopulationLabel().getPopulationIdentifier()

+					.equals(getPopulationIdentifier());

+

+			// This is the current state of the disease for this label

+			final StandardDiseaseModelLabelValue currentState = (StandardDiseaseModelLabelValue)diseaseLabel

+					.getCurrentValue();

+

+		

+			// 2) Compute the state transitions

+			final StandardDiseaseModelLabelValue nullAdditions = importDiseaseData(currentState, diseaseLabel, time, timeDelta);

+

+			

+			// This will be the state that we compute.

+			final StandardDiseaseModelLabelValue nextState = (StandardDiseaseModelLabelValue)diseaseLabel.getNextValue();

+

+			// Initialize the next state from the current state and then we'll

+			// make the changes to that.

+			nextState.set(currentState);

+			

+			

+			

+			assert nextState.sane():"disease state is insane after subtracting deaths: "+nextState.toString();

+			

+			

+			// The next value is valid now.

+			diseaseLabel.setNextValueValid(true);

+

+			

+		} // for

+		++fileLineCounter;

+		*/

+	} // updateLabels

+

+	/**

+	 * get the constants which identify the disease label state variables

+	 * @param diseaseLabel

+	 */

+	private static void setPropertyLabels() {

+		SEIRLabelValue diseaseLabel = StandardFactory.eINSTANCE.createSEIRLabel().getCurrentSEIRValue();

+		StandardItemProviderAdapterFactory itemProviderFactory = new StandardItemProviderAdapterFactory();

+		IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory.adapt(diseaseLabel, PropertySource.class);

+		List<IItemPropertyDescriptor> properties = propertySource.getPropertyDescriptors(null);

+		

+		IItemPropertyDescriptor propertyS = properties.get(StandardPackage.SEIR_LABEL_VALUE__S);

+		IItemPropertyDescriptor propertyE = properties.get(StandardPackage.SEIR_LABEL_VALUE__E);

+		IItemPropertyDescriptor propertyI = properties.get(StandardPackage.SEIR_LABEL_VALUE__I);

+		IItemPropertyDescriptor propertyR = properties.get(StandardPackage.SEIR_LABEL_VALUE__R);

+		

+		labelS = propertyS.getDisplayName(propertyS);

+		labelE = propertyE.getDisplayName(propertyE);

+		labelI = propertyI.getDisplayName(propertyI);

+		labelR = propertyR.getDisplayName(propertyR);

+	}// setPropertyLabels

+

+	// We need this to determine when a simulation is restarted so we 

+	// can reset the file line counter. Also needed to keep track of the line number in the file

+	private STEMTime firstSTEMTime = null;

+	

+	private synchronized void readDatafiles() {

+		if(scenarioMap == null) { // Not yet loaded

+			try {

+				CSVscenarioLoader loader = new CSVscenarioLoader(this.dataPath);

+				int maxresolution = loader.getMaxResolution();

+				scenarioMap = loader.parseAllFiles();

+				// Set the disease type here since we don't need that

+				// input from the end-user any longer

+				this.diseaseType = loader.getType().name();

+			} catch(ScenarioInitializationException sie) {

+				Activator.logError("Error reading scenario files", sie);

+			}

+		}

+	}

+	

+	/**

+	 * 

+	 * This method reads the next state data from the external dataFile

+	 * 

+	 * @param deltaState

+	 * @param diseaseLabel

+	 * @param time

+	 * @param timeDelta

+	 * @return

+	 */

+	public StandardDiseaseModelLabelValue importDiseaseData(

+			final StandardDiseaseModelLabelValue deltaState,

+			final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, final long timeDelta) {

+			

+		if(labelS==null) setPropertyLabels();

+		

+	    // TODO

+		// the filename actually comes from the node itself

+		// we need to regen the code with a scenarioDirectory 

+		// specification as every node maps to a different data file. for now we will test

+		// with only one node and one file

+		// need a map of maps keyed by location name

+

+		

+		Identifiable ident = diseaseLabel.getIdentifiable();

+		String fileName = ident.getURI().toString();

+		int last = fileName.lastIndexOf(LOCATIONID_PREFIX);

+		last += LOCATIONID_PREFIX.length();

+		String key = fileName.substring(last,fileName.length());

+		

+

+		dataInstance = scenarioMap.getLocation(key);

+		// if no data

+		if((dataInstance==null)||(dataInstance.getSize() == 0)) {

+			// no data for location in questions

+			if (diseaseType.equals(IMPORT_TYPE_SI)) {

+				return new SILabelValueImpl(0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SIR)) {

+				return new SIRLabelValueImpl(0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SEIR)) {

+				return new SEIRLabelValueImpl( 0.0, 0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else {

+				throw new UnsupportedOperationException("ExternalDataSource Invalid Type "+diseaseType+" must be SI, SIR, or SEIR");

+			}

+		}

+		

+		// JHK Notes: HOW DO I GET THE CURRENT STEP??

+		//  

+		// node >> graph

+		// graph >> scenario using SimulationManger method

+		// SimulationManger.getManger()

+		// then call manager.mapGraphToSimulation(final Graph graph) {

+		// to get the rvhp you just have to adapt it again.

+		

+		// csv diseases read from file know their own

+		// time period property in millisecs

+		// This method is called by "updateLabels"

+		// should really override that instead fo compute transitions

+		// updateLabels has the TIME.

+		

+		// TODO

+		// remove filter in StandardRelativeValueProviderAdapterFactory 

+		// which is preventing disease deaths from being logged.

+		// method is StandardRelativeValueProviderAdapterFactory List<IItemPropertyDescriptor> getProperties()

+				

+		double deltaS  = 0.0;

+		double deltaE  = 0.0;

+		double deltaI = 0.0;

+		double deltaR  = 0.0;

+		

+		

+		StandardDiseaseModelLabelValue currentValue = (StandardDiseaseModelLabelValue)diseaseLabel.getCurrentValue();

+//		String id = ident.getURI().toString();

+//		int strt = id.indexOf(URI_PREFIX_PATTERN);

+//		if(strt>=0) {

+//			id = id.substring(strt+URI_PREFIX_PATTERN.length(),id.length());

+//		}

+		

+//		if((dataInstance!=null)&&(dataInstance.instance.containsKey(id))) {

+		

+		if(dataInstance!=null) {

+			// compute the changes

+			if(dataInstance.getData(labelS).size() > fileLineCounter) {

+				String sString1 = dataInstance.getData(labelS).get(fileLineCounter);

+				deltaS = new Double(sString1).doubleValue() - currentValue.getS();

+			}// S 

+			

+			if (diseaseType.equals(IMPORT_TYPE_SEIR)) 

+				if(dataInstance.getData(labelE).size() > fileLineCounter) {

+					String eString1 = dataInstance.getData(labelE).get(fileLineCounter);

+					deltaE = new Double(eString1).doubleValue() - ((SEIRLabelValue)currentValue).getE();

+				}// E

+			

+			if(dataInstance.getData(labelI).size() > fileLineCounter) {

+				String iString1 = dataInstance.getData(labelI).get(fileLineCounter);

+				deltaI = new Double(iString1).doubleValue() - ((SILabelValue)currentValue).getI();

+			}//i

+					

+			if (diseaseType.equals(IMPORT_TYPE_SIR) || diseaseType.equals(IMPORT_TYPE_SEIR)) 

+				if(dataInstance.getData(labelR).size() > fileLineCounter) {

+					String rString1 = dataInstance.getData(labelR).get(fileLineCounter);

+					deltaR = new Double(rString1).doubleValue() - ((SIRLabelValue)currentValue).getR();

+				}// R

+		

+			if (diseaseType.equals(IMPORT_TYPE_SI)) {

+				((SILabelValue)deltaState).setS(deltaS);

+				((SILabelValue)deltaState).setI(deltaI);

+				((SILabelValue)deltaState).setIncidence(deltaI);

+				return new SILabelValueImpl( 0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SIR)) {

+				((SIRLabelValue)deltaState).setS(deltaS);

+				((SIRLabelValue)deltaState).setI(deltaI);

+				((SIRLabelValue)deltaState).setR(deltaR);

+				((SIRLabelValue)deltaState).setIncidence(deltaI);

+				return new SIRLabelValueImpl(0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SEIR)) {

+				((SEIRLabelValue)deltaState).setS(deltaS);

+				((SEIRLabelValue)deltaState).setE(deltaE);

+				((SEIRLabelValue)deltaState).setI(deltaI);

+				((SEIRLabelValue)deltaState).setR(deltaR);

+				((SEIRLabelValue)deltaState).setIncidence(deltaI);

+				return new SEIRLabelValueImpl(0.0, 0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else {

+				throw new UnsupportedOperationException("ExternalDataSource Invalid Type "+diseaseType+" must be SI, SIR, or SEIR");

+			}

+		}else {

+			// if data == null

+			// no data for location in questions

+			if (diseaseType.equals(IMPORT_TYPE_SI)) {

+				return new SILabelValueImpl(0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SIR)) {

+				return new SIRLabelValueImpl(0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else if (diseaseType.equals(IMPORT_TYPE_SEIR)) {

+				return new SEIRLabelValueImpl( 0.0, 0.0, 0.0 , 0.0, 0.0, 0.0);

+			} else {

+				throw new UnsupportedOperationException("ExternalDataSource Invalid Type "+diseaseType+" must be SI, SIR, or SEIR");

+			}

+		}

+	

+		

+	} // importDiseaseData

+	

+	

+

+	/**

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelState()

+	 */

+	@Override

+	public DiseaseModelState createDiseaseModelState() {

+		return StandardFactory.eINSTANCE.createSIDiseaseModelState();

+	} // createDiseaseModelState

+

+

+	/**

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelLabel()

+	 */

+	@Override

+	public DiseaseModelLabel createDiseaseModelLabel() {

+		readDatafiles();

+		if (diseaseType==IMPORT_TYPE_SI) return StandardFactory.eINSTANCE.createSILabel();

+		if (diseaseType==IMPORT_TYPE_SIR) return StandardFactory.eINSTANCE.createSIRLabel();

+		// else default

+		return StandardFactory.eINSTANCE.createSEIRLabel();

+	} // createDiseaseModelLabel

+	

+	/**

+	 * 

+	 */

+	@Override

+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {

+		readDatafiles();

+		if(diseaseType==IMPORT_TYPE_SI) return StandardFactory.eINSTANCE.createSILabelValue();

+		if(diseaseType==IMPORT_TYPE_SIR) return StandardFactory.eINSTANCE.createSIRLabelValue();

+		return StandardFactory.eINSTANCE.createSEIRLabelValue();

+	} // createDiseaseModelLabelValue

+	

+	/**

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState,

+	 *      org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)

+	 */

+	@Override

+	public DiseaseModelState initializeDiseaseState(

+			final DiseaseModelState diseaseModelState,

+			final DiseaseModelLabel diseaseModelLabel) {

+

+		final PopulationLabel populationLabel = diseaseModelLabel

+				.getPopulationLabel();

+		final double populationCount = populationLabel

+				.getCurrentPopulationValue().getCount();

+

+		// Accumulate the population count in the disease model

+		addToTotalPopulationCount(populationCount);

+

+		double area = getArea(populationLabel);

+		// If we have a bad data set it could be that the area would be

+		// unspecified or zero.

+		// Do we have a bad area value?

+		if (area <= 0.0) {

+			// Yes

+			reportBadAreaValue(populationLabel, area);

+			area = 1.0;

+		} // if bad area value

+

+		// Accumulate the area in the disease model so we'll know the total when

+		// we do our next pass and compute the area ratio

+		addToTotalArea(area);

+

+		return diseaseModelState;

+	} // initializeDiseaseState

+	

+

+	/**

+	 * Here we compute and set the ratio between the total area and the area

+	 * used for this {@link DiseaseModelLabel}. This value is used to determine

+	 * the <em>transmission scale factor</em>.

+	 * 

+	 * @see #computeTransitions(StandardDiseaseModelLabelValue,

+	 *      StandardDiseaseModelLabel, long)

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)

+	 */

+	@Override

+	public void initializeDiseaseState(final DiseaseModelLabel diseaseModelLabel) {

+		final StandardDiseaseModelState sdms = (StandardDiseaseModelState) diseaseModelLabel

+				.getDiseaseModelState();

+		// Is there a population ?

+		if (totalPopulationCount > 0.0) {

+			// Yes

+			double area = getArea(diseaseModelLabel.getPopulationLabel());

+			// Do we have a bad area value?

+			if (area <= 0.0) {

+				// Yes

+				reportBadAreaValue(diseaseModelLabel.getPopulationLabel(), area);

+				area = 1.0;

+			} // if bad area value

+

+			final double ratio = totalArea / area;

+			sdms.setAreaRatio(ratio);

+		}

+	} // initializeDiseaseState

+

+	/**

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createInfector()

+	 */

+	@Override

+	public Infector createInfector() {

+		 throw new UnsupportedOperationException();

+	} // createInfector

+	

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	public void addToTotalArea(double area) {

+		totalArea += area;

+	} // addToTotalArea

+

+	

+	

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @generated NOT

+	 */

+	public void addToTotalPopulationCount(double populationCount) {

+		totalPopulationCount += populationCount;

+	} // addToTotalPopulationCount

+

+	/**

+	 * @param populationLabel

+	 *            the population label that labels the node

+	 * @return the area of the node associated with the label

+	 */

+	private double getArea(final PopulationLabel populationLabel) {

+		double retValue = 0.0;

+

+		// The population label could have an area specified for the population

+		// that we should use instead of the area of the region labeled by the

+		// population label. This value would be specified if the population was

+		// densely packed into a small area of the larger region, for instance

+		// like a city in an otherwise large desert.

+

+		retValue = populationLabel.getPopulatedArea();

+

+		// Is there an area specified for the population?

+		if (retValue == 0.0) {

+			// No

+			// Ok, go find the area label and return the area of the region

+			for (final Iterator<NodeLabel> labelIter = populationLabel.getNode()

+					.getLabels().iterator(); labelIter.hasNext();) {

+				final NodeLabel nodeLabel = labelIter.next();

+				// Is this an area label?

+				if (nodeLabel instanceof AreaLabel) {

+					// Yes

+					final AreaLabel areaLabel = (AreaLabel) nodeLabel;

+					retValue = areaLabel.getCurrentAreaValue().getArea();

+					break;

+				}

+			} // for

+		} // If no population area specified

+

+		return retValue;

+	} // getArea

+

+

+		/**

+		 * @param populationLabel

+		 * @param area

+		 */

+		private void reportBadAreaValue(final PopulationLabel populationLabel,

+				double area) {

+			// The bad value could be specified for the node or be an overide

+			// value specified for the population.

+			// Is the bad value from the node?

+			if (populationLabel.getPopulatedArea() == 0.0) {

+				// Yes

+				Activator.logError("The area value of \"" + area

+						+ "\" specified for \""

+						+ populationLabel.getNode().toString()

+						+ "\" is not greater than zero (0.0)", null);

+			} // if bad value for node area

+			else {

+				Activator.logError("The area value of \"" + area

+						+ "\" specified for the population \""

+						+ populationLabel.getName() + "\" for the region \""

+						+ populationLabel.getNode().toString()

+						+ "\" is not greater than zero (0.0)", null);

+			}

+		} // reportBadAreaValue

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return ExternalDataSourcePackage.Literals.EXTERNAL_DATA_SOURCE_DISEASE_MODEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getDataPath() {

+		return dataPath;

+	}

+

+

+

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDataPath(String newDataPath) {

+		String oldDataPath = dataPath;

+		dataPath = newDataPath;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH, oldDataPath, dataPath));

+	}

+

+

+

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getDiseaseType() {

+		return diseaseType;

+	}

+

+

+

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDiseaseType(String newDiseaseType) {

+		String oldDiseaseType = diseaseType;

+		diseaseType = newDiseaseType;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE, oldDiseaseType, diseaseType));

+	}

+

+

+

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:

+				return getDataPath();

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:

+				return getDiseaseType();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:

+				setDataPath((String)newValue);

+				return;

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:

+				setDiseaseType((String)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:

+				setDataPath(DATA_PATH_EDEFAULT);

+				return;

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:

+				setDiseaseType(DISEASE_TYPE_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:

+				return DATA_PATH_EDEFAULT == null ? dataPath != null : !DATA_PATH_EDEFAULT.equals(dataPath);

+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:

+				return DISEASE_TYPE_EDEFAULT == null ? diseaseType != null : !DISEASE_TYPE_EDEFAULT.equals(diseaseType);

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (dataPath: ");

+		result.append(dataPath);

+		result.append(", diseaseType: ");

+		result.append(diseaseType);

+		result.append(')');

+		return result.toString();

+	}

+

+

+	/**

+	 *  Since data is read from a file we don't have to take into account

+	 *   birth/deaths etc from other decorators, the data is already supposed

+	 *	 to handle that.

+	 */

+	

+	public void applyExternalDeltas(STEMTime time, long timeDelta,

+			EList<DynamicLabel> labels) {

+		// Nothing to do.

+		

+	}

+

+

+	public synchronized void calculateDelta(STEMTime time, long timeDelta,

+			EList<DynamicLabel> labels) {

+		

+		if(firstSTEMTime == null || time.getTime().equals(firstSTEMTime.getTime()))

+			fileLineCounter = 0;

+		else

+			fileLineCounter = (int)((time.getTime().getTime() - firstSTEMTime.getTime().getTime()) / timeDelta);

+		

+		if(firstSTEMTime == null) firstSTEMTime = time;

+		

+		// Iterate through each of the labels we need to update.

+		for (final DynamicLabel dynLabel : labels) {

+			final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) dynLabel;

+

+			

+			

+			assert diseaseLabel.getPopulationLabel().getPopulationIdentifier()

+					.equals(getPopulationIdentifier());

+

+			// This is the current state of the disease for this label

+			final StandardDiseaseModelLabelValue deltaState = (StandardDiseaseModelLabelValue)diseaseLabel

+					.getDeltaValue();

+

+		

+			// 2) This will set the delta

+			final StandardDiseaseModelLabelValue nullAdditions = importDiseaseData(deltaState, diseaseLabel, time, timeDelta);

+

+			

+			// This will be the state that we compute.

+//			final StandardDiseaseModelLabelValue nextState = (StandardDiseaseModelLabelValue)diseaseLabel.getNextValue();

+

+			// Initialize the next state from the current state and then we'll

+			// make the changes to that.

+			// nextState.set(currentState);

+			

+			

+			

+//			assert nextState.sane():"disease state is insane after subtracting deaths: "+nextState.toString();

+			

+			

+			// The next value is valid now.

+//			diseaseLabel.setNextValueValid(true);

+

+			

+		} // for

+	}

+

+

+

+

+	public void doModelSpecificAdjustments(LabelValue label) {

+		// TODO Auto-generated method stub

+		

+	}

+

+

+	public boolean isDeterministic() {

+		return true;

+	}

+

+} //ExternalDataSourceDiseaseModelImpl

diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceFactoryImpl.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceFactoryImpl.java
new file mode 100644
index 0000000..f31af37
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourceFactoryImpl.java
@@ -0,0 +1,104 @@
+// ExternalDataSourceFactoryImpl 
+package org.eclipse.stem.diseasemodels.externaldatasource.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceFactoryImpl extends EFactoryImpl implements ExternalDataSourceFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ExternalDataSourceFactory init() {
+		try {
+			ExternalDataSourceFactory theExternalDataSourceFactory = (ExternalDataSourceFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/externaldatasource.ecore"); 
+			if (theExternalDataSourceFactory != null) {
+				return theExternalDataSourceFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ExternalDataSourceFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL: return createExternalDataSourceDiseaseModel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceDiseaseModel createExternalDataSourceDiseaseModel() {
+		ExternalDataSourceDiseaseModelImpl externalDataSourceDiseaseModel = new ExternalDataSourceDiseaseModelImpl();
+		return externalDataSourceDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourcePackage getExternalDataSourcePackage() {
+		return (ExternalDataSourcePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ExternalDataSourcePackage getPackage() {
+		return ExternalDataSourcePackage.eINSTANCE;
+	}
+
+} //ExternalDataSourceFactoryImpl
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourcePackageImpl.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourcePackageImpl.java
new file mode 100644
index 0000000..8b16d8c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/impl/ExternalDataSourcePackageImpl.java
@@ -0,0 +1,219 @@
+// ExternalDataSourcePackageImpl
+package org.eclipse.stem.diseasemodels.externaldatasource.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourcePackageImpl extends EPackageImpl implements ExternalDataSourcePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass externalDataSourceDiseaseModelEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ExternalDataSourcePackageImpl() {
+		super(eNS_URI, ExternalDataSourceFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ExternalDataSourcePackage init() {
+		if (isInited) return (ExternalDataSourcePackage)EPackage.Registry.INSTANCE.getEPackage(ExternalDataSourcePackage.eNS_URI);
+
+		// Obtain or create and register package
+		ExternalDataSourcePackageImpl theExternalDataSourcePackage = (ExternalDataSourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ExternalDataSourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ExternalDataSourcePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		StandardPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		ModelPackage.eINSTANCE.eClass();
+		GraphPackage.eINSTANCE.eClass();
+		LabelsPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theExternalDataSourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theExternalDataSourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theExternalDataSourcePackage.freeze();
+
+		return theExternalDataSourcePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getExternalDataSourceDiseaseModel() {
+		return externalDataSourceDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExternalDataSourceDiseaseModel_DataPath() {
+		return (EAttribute)externalDataSourceDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getExternalDataSourceDiseaseModel_DiseaseType() {
+		return (EAttribute)externalDataSourceDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceFactory getExternalDataSourceFactory() {
+		return (ExternalDataSourceFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		externalDataSourceDiseaseModelEClass = createEClass(EXTERNAL_DATA_SOURCE_DISEASE_MODEL);
+		createEAttribute(externalDataSourceDiseaseModelEClass, EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH);
+		createEAttribute(externalDataSourceDiseaseModelEClass, EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		StandardPackage theStandardPackage = (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		externalDataSourceDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getDiseaseModel());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(externalDataSourceDiseaseModelEClass, ExternalDataSourceDiseaseModel.class, "ExternalDataSourceDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getExternalDataSourceDiseaseModel_DataPath(), ecorePackage.getEString(), "dataPath", null, 0, 1, ExternalDataSourceDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getExternalDataSourceDiseaseModel_DiseaseType(), ecorePackage.getEString(), "diseaseType", null, 0, 1, ExternalDataSourceDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ExternalDataSourcePackageImpl
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceDiseaseModelItemProvider.java
new file mode 100644
index 0000000..c0f81c8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceDiseaseModelItemProvider.java
@@ -0,0 +1,164 @@
+// ExternalDataSourceDiseaseModelItemProvider
+package org.eclipse.stem.diseasemodels.externaldatasource.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceDiseaseModelItemProvider
+	extends DiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDataPathPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Data Path feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDataPathPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ExternalDataSourceDiseaseModel_dataPath_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ExternalDataSourceDiseaseModel_dataPath_feature", "_UI_ExternalDataSourceDiseaseModel_type"),
+				 ExternalDataSourcePackage.Literals.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns ExternalDataSourceDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ExternalDataSourceDiseaseModel"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ExternalDataSourceDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ExternalDataSourceDiseaseModel_type") :
+			getString("_UI_ExternalDataSourceDiseaseModel_type") + " " + label;
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ExternalDataSourceDiseaseModel.class)) {
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ExternalDataSourceEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceEditPlugin.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceEditPlugin.java
new file mode 100644
index 0000000..b4a65ef
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceEditPlugin.java
@@ -0,0 +1,105 @@
+// ExternalDataSourceEditPlugin
+package org.eclipse.stem.diseasemodels.externaldatasource.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+/**
+ * This is the central singleton for the ExternalDataSource editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ExternalDataSourceEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ExternalDataSourceEditPlugin INSTANCE = new ExternalDataSourceEditPlugin();
+	
+	/**
+	 * 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 ExternalDataSourceEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceItemProviderAdapterFactory.java
new file mode 100644
index 0000000..6092d98
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/provider/ExternalDataSourceItemProviderAdapterFactory.java
@@ -0,0 +1,209 @@
+// ExternalDataSourceItemProviderAdapterFactory
+package org.eclipse.stem.diseasemodels.externaldatasource.provider;
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.externaldatasource.util.ExternalDataSourceAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ExternalDataSourceItemProviderAdapterFactory extends ExternalDataSourceAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceDiseaseModelItemProvider externalDataSourceDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createExternalDataSourceDiseaseModelAdapter() {
+		if (externalDataSourceDiseaseModelItemProvider == null) {
+			externalDataSourceDiseaseModelItemProvider = new ExternalDataSourceDiseaseModelItemProvider(this);
+		}
+
+		return externalDataSourceDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (externalDataSourceDiseaseModelItemProvider != null) externalDataSourceDiseaseModelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceAdapterFactory.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceAdapterFactory.java
new file mode 100644
index 0000000..31b8814
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceAdapterFactory.java
@@ -0,0 +1,260 @@
+// ExternalDataSourceAdapterFactory
+package org.eclipse.stem.diseasemodels.externaldatasource.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage
+ * @generated
+ */
+public class ExternalDataSourceAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExternalDataSourcePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ExternalDataSourcePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceSwitch<Adapter> modelSwitch =
+		new ExternalDataSourceSwitch<Adapter>() {
+			@Override
+			public Adapter caseExternalDataSourceDiseaseModel(ExternalDataSourceDiseaseModel object) {
+				return createExternalDataSourceDiseaseModelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModel(DiseaseModel object) {
+				return createDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel
+	 * @generated
+	 */
+	public Adapter createExternalDataSourceDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ExternalDataSourceAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceSwitch.java b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceSwitch.java
new file mode 100644
index 0000000..d104a0e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/util/ExternalDataSourceSwitch.java
@@ -0,0 +1,254 @@
+// ExternalDataSourceSwitch
+package org.eclipse.stem.diseasemodels.externaldatasource.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage
+ * @generated
+ */
+public class ExternalDataSourceSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ExternalDataSourcePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ExternalDataSourcePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL: {
+				ExternalDataSourceDiseaseModel externalDataSourceDiseaseModel = (ExternalDataSourceDiseaseModel)theEObject;
+				T1 result = caseExternalDataSourceDiseaseModel(externalDataSourceDiseaseModel);
+				if (result == null) result = caseDiseaseModel(externalDataSourceDiseaseModel);
+				if (result == null) result = caseNodeDecorator(externalDataSourceDiseaseModel);
+				if (result == null) result = caseSanityChecker(externalDataSourceDiseaseModel);
+				if (result == null) result = caseModifiable(externalDataSourceDiseaseModel);
+				if (result == null) result = caseDecorator(externalDataSourceDiseaseModel);
+				if (result == null) result = caseIdentifiable(externalDataSourceDiseaseModel);
+				if (result == null) result = caseComparable(externalDataSourceDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseExternalDataSourceDiseaseModel(ExternalDataSourceDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModel(DiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ExternalDataSourceSwitch
diff --git a/org.eclipse.stem.diseasemodels.forcing/.classpath b/org.eclipse.stem.diseasemodels.forcing/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseasemodels.forcing/.project b/org.eclipse.stem.diseasemodels.forcing/.project
new file mode 100644
index 0000000..2c5cbd0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseasemodels.forcing</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..66982a8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:54:57 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.diseasemodels.forcing/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels.forcing/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7968527
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.forcing;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.forcing.provider.ForcingEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.forcing,
+ org.eclipse.stem.diseasemodels.forcing.impl,
+ org.eclipse.stem.diseasemodels.forcing.provider,
+ org.eclipse.stem.diseasemodels.forcing.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.diseasemodels.forcing/build.properties b/org.eclipse.stem.diseasemodels.forcing/build.properties
new file mode 100644
index 0000000..a973eb8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2009/03/13 00:05:49 sedlund Exp $
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleDiseaseModel.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleDiseaseModel.gif
new file mode 100644
index 0000000..a729a04
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleModelFile.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleModelFile.gif
new file mode 100644
index 0000000..5d309ef
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExampleModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExperimentalDiseaseModel.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExperimentalDiseaseModel.gif
new file mode 100644
index 0000000..338fb8d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ExperimentalDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ForcingDiseaseModel.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ForcingDiseaseModel.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/ForcingDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/Gaussian2ForcingDiseaseModel.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/Gaussian2ForcingDiseaseModel.gif
new file mode 100644
index 0000000..83afb9b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/Gaussian2ForcingDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/GaussianForcingDiseaseModel.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/GaussianForcingDiseaseModel.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/obj16/GaussianForcingDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/icons/full/wizban/NewExample.gif b/org.eclipse.stem.diseasemodels.forcing/icons/full/wizban/NewExample.gif
new file mode 100644
index 0000000..97de441
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/icons/full/wizban/NewExample.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/model/forcing.ecore b/org.eclipse.stem.diseasemodels.forcing/model/forcing.ecore
new file mode 100644
index 0000000..bd2683a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/model/forcing.ecore
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="forcing"
+    nsURI="http:///org/eclipse/stem/diseasemodels/forcing.ecore" nsPrefix="org.eclipse.stem.diseasemodels.forcing">
+  <eClassifiers xsi:type="ecore:EClass" name="ForcingDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSIRDiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationExponent"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="2.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="365.256363051"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPhaseShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationFloor"
+        eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="0.6"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GaussianForcingDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSIRDiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sigma2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="100"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="365.25"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPhaseShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationFloor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.6"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Gaussian2ForcingDiseaseModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSIRDiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sigma2_2" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sigma2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPhaseShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationFloor" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="att1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="att2" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="att3" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="att4" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.diseasemodels.forcing/model/forcing.genmodel b/org.eclipse.stem.diseasemodels.forcing/model/forcing.genmodel
new file mode 100644
index 0000000..c49a6f8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/model/forcing.genmodel
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels.forcing/src"
+    editDirectory="/org.eclipse.stem.diseasemodels.forcing/src" editorDirectory="/org.eclipse.stem.ui.diseasemodels.forcing/src"
+    modelPluginID="org.eclipse.stem.diseasemodels.forcing" modelName="Forcing"
+    editPluginClass="org.eclipse.stem.diseasemodels.forcing.provider.ForcingEditPlugin"
+    editorPluginClass="org.eclipse.stem.ui.diseasemodels.forcing.presentation.ForcingEditorPlugin"
+    nonNLSMarkers="true" testsDirectory="/org.eclipse.stem.tests.diseasemodels.forcing/src"
+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"
+    editPluginID="org.eclipse.stem.diseasemodels.forcing" editorPluginID="org.eclipse.stem.ui.diseasemodels.forcing.editor"
+    testsPluginID="org.eclipse.stem.tests.diseasemodels.forcing" usedGenPackages="../../org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel#//standard ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Forcing" basePackage="org.eclipse.stem.diseasemodels" disposableProviderFactory="true"
+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="forcing.ecore#/">
+    <genClasses ecoreClass="forcing.ecore#//ForcingDiseaseModel">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute forcing.ecore#//ForcingDiseaseModel/seasonalModulation"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute forcing.ecore#//ForcingDiseaseModel/modulationPeriod"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute forcing.ecore#//ForcingDiseaseModel/modulationPhaseShift"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute forcing.ecore#//ForcingDiseaseModel/attenuation"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.diseasemodels.forcing/plugin.properties b/org.eclipse.stem.diseasemodels.forcing/plugin.properties
new file mode 100644
index 0000000..8fe68cd
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.forcing/plugin.xml b/org.eclipse.stem.diseasemodels.forcing/plugin.xml
new file mode 100644
index 0000000..35e7893
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/plugin.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2009/03/13 00:05:49 sedlund Exp $
+-->
+
+<plugin>
+    
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/diseasemodels/forcing.ecore" 
+       class = "org.eclipse.stem.diseasemodels.forcing.provider.ForcingItemProviderAdapterFactory" 
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/diseasemodels/forcing.ecore"
+       class = "org.eclipse.stem.diseasemodels.forcing.ForcingPackage"
+       genModel = "model/forcing.genmodel" /> 
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_edlund"
+           description="%dc_desc_E_S_SEIR"
+           identifier="org.eclipse.stem.diseasemodels.experimental.dublin_core4"
+           title="%dc_title_E_S_SEIR">
+     </dublin_core>
+  </extension>
+	<extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_edlund"
+           description="%dc_desc_E_S_SEIR"
+           identifier="org.eclipse.stem.diseasemodels.experimental.dublin_core4"
+           title="%dc_title_E_S_SEIR">
+     </dublin_core>
+  </extension>
+</plugin>
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingDiseaseModel.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingDiseaseModel.java
new file mode 100644
index 0000000..68b1d1d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingDiseaseModel.java
@@ -0,0 +1,108 @@
+// ExampleDiseaseModel.java
+package org.eclipse.stem.diseasemodels.forcing;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * This interface is an EMF Model.
+ * 
+ * @model
+ */
+public interface ForcingDiseaseModel extends StochasticSIRDiseaseModel {
+	/**
+	 * Returns the value of the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.
+	 * The default value is <code>"2.0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seasonal Modulation Exponent</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seasonal Modulation Exponent</em>' attribute.
+	 * @see #setSeasonalModulationExponent(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getForcingDiseaseModel_SeasonalModulationExponent()
+	 * @model default="2.0"
+	 * @generated
+	 */
+	double getSeasonalModulationExponent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seasonal Modulation Exponent</em>' attribute.
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 */
+	void setSeasonalModulationExponent(double value);
+
+	/**
+	 * @return the default modulation period is 1 year. This default value assumes time steps in days. Note that one year = 365.256363051 days 
+	 * @model default="365.256363051"
+	 */
+	double getModulationPeriod();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Period</em>' attribute.
+	 * @see #getModulationPeriod()
+	 * @generated
+	 */
+	void setModulationPeriod(double value);
+
+	/**
+	 * @return the modulation phase shift shift. 
+	 * @model default="0.0"
+	 */
+	double getModulationPhaseShift();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 */
+	void setModulationPhaseShift(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Seasonal Modulation Floor</b></em>' attribute.
+	 * The default value is <code>"0.6"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Seasonal Modulation Floor</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Seasonal Modulation Floor</em>' attribute.
+	 * @see #setSeasonalModulationFloor(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getForcingDiseaseModel_SeasonalModulationFloor()
+	 * @model default="0.6"
+	 * @generated
+	 */
+	double getSeasonalModulationFloor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seasonal Modulation Floor</em>' attribute.
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 */
+	void setSeasonalModulationFloor(double value);
+} // ExampleDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingFactory.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingFactory.java
new file mode 100644
index 0000000..8167c41
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingFactory.java
@@ -0,0 +1,69 @@
+package org.eclipse.stem.diseasemodels.forcing;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage
+ * @generated
+ */
+public interface ForcingFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ForcingFactory eINSTANCE = org.eclipse.stem.diseasemodels.forcing.impl.ForcingFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Disease Model</em>'.
+	 * @generated
+	 */
+	ForcingDiseaseModel createForcingDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Gaussian Forcing Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Gaussian Forcing Disease Model</em>'.
+	 * @generated
+	 */
+	GaussianForcingDiseaseModel createGaussianForcingDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Gaussian2 Forcing Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Gaussian2 Forcing Disease Model</em>'.
+	 * @generated
+	 */
+	Gaussian2ForcingDiseaseModel createGaussian2ForcingDiseaseModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ForcingPackage getForcingPackage();
+
+} //ExampleFactory
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingPackage.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingPackage.java
new file mode 100644
index 0000000..06f49cf
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/ForcingPackage.java
@@ -0,0 +1,1506 @@
+package org.eclipse.stem.diseasemodels.forcing;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ForcingPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "forcing";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/forcing.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.forcing";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ForcingPackage eINSTANCE = org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl <em>Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getForcingDiseaseModel()
+	 * @generated
+	 */
+	int FORCING_DISEASE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__GRAPH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__ENABLED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__GRAPH_DECORATED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__PROGRESS = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__RELATIVE_TOLERANCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__FINITE_DIFFERENCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__FREQUENCY_DEPENDENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__SEED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__GAIN = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;
+
+	/**
+	 * The feature id for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__MODULATION_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Seasonal Modulation Floor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FORCING_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 4;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl <em>Gaussian Forcing Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getGaussianForcingDiseaseModel()
+	 * @generated
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__GRAPH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__ENABLED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__GRAPH_DECORATED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__PROGRESS = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__RELATIVE_TOLERANCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__FINITE_DIFFERENCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__FREQUENCY_DEPENDENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__SEED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__GAIN = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;
+
+	/**
+	 * The feature id for the '<em><b>Sigma2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Floor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Gaussian Forcing Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN_FORCING_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 4;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl <em>Gaussian2 Forcing Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__GRAPH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ENABLED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__GRAPH_DECORATED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__PROGRESS = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__RELATIVE_TOLERANCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__FINITE_DIFFERENCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__FREQUENCY_DEPENDENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__INFECTIOUS_MORTALITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__SEED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__GAIN = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;
+
+	/**
+	 * The feature id for the '<em><b>Sigma2 2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Sigma2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Modulation Floor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Att1</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Att2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Att3</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 7;
+
+	/**
+	 * The feature id for the '<em><b>Att4</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4 = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 8;
+
+	/**
+	 * The number of structural features of the '<em>Gaussian2 Forcing Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GAUSSIAN2_FORCING_DISEASE_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 9;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel
+	 * @generated
+	 */
+	EClass getForcingDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seasonal Modulation Exponent</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationExponent()
+	 * @see #getForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getForcingDiseaseModel_SeasonalModulationExponent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Period</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPeriod()
+	 * @see #getForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getForcingDiseaseModel_ModulationPeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Phase Shift</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getModulationPhaseShift()
+	 * @see #getForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getForcingDiseaseModel_ModulationPhaseShift();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seasonal Modulation Floor</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel#getSeasonalModulationFloor()
+	 * @see #getForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getForcingDiseaseModel_SeasonalModulationFloor();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel <em>Gaussian Forcing Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Gaussian Forcing Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel
+	 * @generated
+	 */
+	EClass getGaussianForcingDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getSigma2 <em>Sigma2</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sigma2</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getSigma2()
+	 * @see #getGaussianForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussianForcingDiseaseModel_Sigma2();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Period</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPeriod()
+	 * @see #getGaussianForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussianForcingDiseaseModel_ModulationPeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Phase Shift</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPhaseShift()
+	 * @see #getGaussianForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussianForcingDiseaseModel_ModulationPhaseShift();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Floor</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationFloor()
+	 * @see #getGaussianForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussianForcingDiseaseModel_ModulationFloor();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel <em>Gaussian2 Forcing Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Gaussian2 Forcing Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel
+	 * @generated
+	 */
+	EClass getGaussian2ForcingDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2_2 <em>Sigma2 2</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sigma2 2</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2_2()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Sigma2_2();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2 <em>Sigma2</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Sigma2</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Sigma2();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Period</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPeriod()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_ModulationPeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Phase Shift</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPhaseShift()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_ModulationPhaseShift();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Modulation Floor</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationFloor()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_ModulationFloor();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt1 <em>Att1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Att1</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt1()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Att1();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt2 <em>Att2</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Att2</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt2()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Att2();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt3 <em>Att3</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Att3</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt3()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Att3();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt4 <em>Att4</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Att4</em>'.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt4()
+	 * @see #getGaussian2ForcingDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getGaussian2ForcingDiseaseModel_Att4();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ForcingFactory getForcingFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl <em>Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getForcingDiseaseModel()
+		 * @generated
+		 */
+		EClass FORCING_DISEASE_MODEL = eINSTANCE.getForcingDiseaseModel();
+		/**
+		 * The meta object literal for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT = eINSTANCE.getForcingDiseaseModel_SeasonalModulationExponent();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FORCING_DISEASE_MODEL__MODULATION_PERIOD = eINSTANCE.getForcingDiseaseModel_ModulationPeriod();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Phase Shift</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = eINSTANCE.getForcingDiseaseModel_ModulationPhaseShift();
+		/**
+		 * The meta object literal for the '<em><b>Seasonal Modulation Floor</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR = eINSTANCE.getForcingDiseaseModel_SeasonalModulationFloor();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl <em>Gaussian Forcing Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getGaussianForcingDiseaseModel()
+		 * @generated
+		 */
+		EClass GAUSSIAN_FORCING_DISEASE_MODEL = eINSTANCE.getGaussianForcingDiseaseModel();
+		/**
+		 * The meta object literal for the '<em><b>Sigma2</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2 = eINSTANCE.getGaussianForcingDiseaseModel_Sigma2();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD = eINSTANCE.getGaussianForcingDiseaseModel_ModulationPeriod();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Phase Shift</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = eINSTANCE.getGaussianForcingDiseaseModel_ModulationPhaseShift();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Floor</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR = eINSTANCE.getGaussianForcingDiseaseModel_ModulationFloor();
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl <em>Gaussian2 Forcing Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.forcing.impl.ForcingPackageImpl#getGaussian2ForcingDiseaseModel()
+		 * @generated
+		 */
+		EClass GAUSSIAN2_FORCING_DISEASE_MODEL = eINSTANCE.getGaussian2ForcingDiseaseModel();
+		/**
+		 * The meta object literal for the '<em><b>Sigma2 2</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2 = eINSTANCE.getGaussian2ForcingDiseaseModel_Sigma2_2();
+		/**
+		 * The meta object literal for the '<em><b>Sigma2</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2 = eINSTANCE.getGaussian2ForcingDiseaseModel_Sigma2();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD = eINSTANCE.getGaussian2ForcingDiseaseModel_ModulationPeriod();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Phase Shift</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT = eINSTANCE.getGaussian2ForcingDiseaseModel_ModulationPhaseShift();
+		/**
+		 * The meta object literal for the '<em><b>Modulation Floor</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR = eINSTANCE.getGaussian2ForcingDiseaseModel_ModulationFloor();
+		/**
+		 * The meta object literal for the '<em><b>Att1</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1 = eINSTANCE.getGaussian2ForcingDiseaseModel_Att1();
+		/**
+		 * The meta object literal for the '<em><b>Att2</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2 = eINSTANCE.getGaussian2ForcingDiseaseModel_Att2();
+		/**
+		 * The meta object literal for the '<em><b>Att3</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3 = eINSTANCE.getGaussian2ForcingDiseaseModel_Att3();
+		/**
+		 * The meta object literal for the '<em><b>Att4</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4 = eINSTANCE.getGaussian2ForcingDiseaseModel_Att4();
+
+	}
+
+} //ExamplePackage
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/Gaussian2ForcingDiseaseModel.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/Gaussian2ForcingDiseaseModel.java
new file mode 100644
index 0000000..da894fb
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/Gaussian2ForcingDiseaseModel.java
@@ -0,0 +1,274 @@
+package org.eclipse.stem.diseasemodels.forcing;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Gaussian2 Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2_2 <em>Sigma2 2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2 <em>Sigma2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt1 <em>Att1</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt2 <em>Att2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt3 <em>Att3</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt4 <em>Att4</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel()
+ * @model
+ * @generated
+ */
+public interface Gaussian2ForcingDiseaseModel extends StochasticSIRDiseaseModel {
+	/**
+	 * Returns the value of the '<em><b>Sigma2 2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sigma2 2</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sigma2 2</em>' attribute.
+	 * @see #setSigma2_2(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Sigma2_2()
+	 * @model
+	 * @generated
+	 */
+	double getSigma2_2();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2_2 <em>Sigma2 2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sigma2 2</em>' attribute.
+	 * @see #getSigma2_2()
+	 * @generated
+	 */
+	void setSigma2_2(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Sigma2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sigma2</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sigma2</em>' attribute.
+	 * @see #setSigma2(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Sigma2()
+	 * @model
+	 * @generated
+	 */
+	double getSigma2();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getSigma2 <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sigma2</em>' attribute.
+	 * @see #getSigma2()
+	 * @generated
+	 */
+	void setSigma2(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Period</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Period</em>' attribute.
+	 * @see #setModulationPeriod(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_ModulationPeriod()
+	 * @model
+	 * @generated
+	 */
+	double getModulationPeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Period</em>' attribute.
+	 * @see #getModulationPeriod()
+	 * @generated
+	 */
+	void setModulationPeriod(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Phase Shift</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #setModulationPhaseShift(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_ModulationPhaseShift()
+	 * @model
+	 * @generated
+	 */
+	double getModulationPhaseShift();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 */
+	void setModulationPhaseShift(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Floor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Floor</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Floor</em>' attribute.
+	 * @see #setModulationFloor(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_ModulationFloor()
+	 * @model
+	 * @generated
+	 */
+	double getModulationFloor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Floor</em>' attribute.
+	 * @see #getModulationFloor()
+	 * @generated
+	 */
+	void setModulationFloor(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Att1</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Att1</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Att1</em>' attribute.
+	 * @see #setAtt1(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Att1()
+	 * @model
+	 * @generated
+	 */
+	double getAtt1();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt1 <em>Att1</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Att1</em>' attribute.
+	 * @see #getAtt1()
+	 * @generated
+	 */
+	void setAtt1(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Att2</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Att2</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Att2</em>' attribute.
+	 * @see #setAtt2(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Att2()
+	 * @model
+	 * @generated
+	 */
+	double getAtt2();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt2 <em>Att2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Att2</em>' attribute.
+	 * @see #getAtt2()
+	 * @generated
+	 */
+	void setAtt2(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Att3</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Att3</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Att3</em>' attribute.
+	 * @see #setAtt3(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Att3()
+	 * @model
+	 * @generated
+	 */
+	double getAtt3();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt3 <em>Att3</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Att3</em>' attribute.
+	 * @see #getAtt3()
+	 * @generated
+	 */
+	void setAtt3(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Att4</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Att4</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Att4</em>' attribute.
+	 * @see #setAtt4(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussian2ForcingDiseaseModel_Att4()
+	 * @model
+	 * @generated
+	 */
+	double getAtt4();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel#getAtt4 <em>Att4</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Att4</em>' attribute.
+	 * @see #getAtt4()
+	 * @generated
+	 */
+	void setAtt4(double value);
+
+} // Gaussian2ForcingDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/GaussianForcingDiseaseModel.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/GaussianForcingDiseaseModel.java
new file mode 100644
index 0000000..7b31714
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/GaussianForcingDiseaseModel.java
@@ -0,0 +1,143 @@
+package org.eclipse.stem.diseasemodels.forcing;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Gaussian Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getSigma2 <em>Sigma2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussianForcingDiseaseModel()
+ * @model
+ * @generated
+ */
+public interface GaussianForcingDiseaseModel extends StochasticSIRDiseaseModel {
+
+	/**
+	 * Returns the value of the '<em><b>Sigma2</b></em>' attribute.
+	 * The default value is <code>"100"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sigma2</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sigma2</em>' attribute.
+	 * @see #setSigma2(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussianForcingDiseaseModel_Sigma2()
+	 * @model default="100"
+	 * @generated
+	 */
+	double getSigma2();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getSigma2 <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Sigma2</em>' attribute.
+	 * @see #getSigma2()
+	 * @generated
+	 */
+	void setSigma2(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Period</b></em>' attribute.
+	 * The default value is <code>"365.25"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Period</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Period</em>' attribute.
+	 * @see #setModulationPeriod(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussianForcingDiseaseModel_ModulationPeriod()
+	 * @model default="365.25"
+	 * @generated
+	 */
+	double getModulationPeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPeriod <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Period</em>' attribute.
+	 * @see #getModulationPeriod()
+	 * @generated
+	 */
+	void setModulationPeriod(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Phase Shift</b></em>' attribute.
+	 * The default value is <code>"0"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Phase Shift</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #setModulationPhaseShift(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussianForcingDiseaseModel_ModulationPhaseShift()
+	 * @model default="0"
+	 * @generated
+	 */
+	double getModulationPhaseShift();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Phase Shift</em>' attribute.
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 */
+	void setModulationPhaseShift(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Modulation Floor</b></em>' attribute.
+	 * The default value is <code>"0.6"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Modulation Floor</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Modulation Floor</em>' attribute.
+	 * @see #setModulationFloor(double)
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#getGaussianForcingDiseaseModel_ModulationFloor()
+	 * @model default="0.6"
+	 * @generated
+	 */
+	double getModulationFloor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel#getModulationFloor <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Modulation Floor</em>' attribute.
+	 * @see #getModulationFloor()
+	 * @generated
+	 */
+	void setModulationFloor(double value);
+} // GaussianForcingDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingDiseaseModelImpl.java
new file mode 100644
index 0000000..5b390ce
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingDiseaseModelImpl.java
@@ -0,0 +1,495 @@
+package org.eclipse.stem.diseasemodels.forcing.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+@SuppressWarnings("boxing")
+public class ForcingDiseaseModelImpl extends StochasticSIRDiseaseModelImpl implements ForcingDiseaseModel {
+	
+	/**
+	 * The default value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SEASONAL_MODULATION_EXPONENT_EDEFAULT = 2.0;
+	/**
+	 * The cached value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationExponent()
+	 * @generated
+	 * @ordered
+	 */
+	protected double seasonalModulationExponent = SEASONAL_MODULATION_EXPONENT_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PERIOD_EDEFAULT = 365.256363051;
+	/**
+	 * The cached value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPeriod = MODULATION_PERIOD_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PHASE_SHIFT_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPhaseShift = MODULATION_PHASE_SHIFT_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SEASONAL_MODULATION_FLOOR_EDEFAULT = 0.6;
+	/**
+	 * The cached value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeasonalModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected double seasonalModulationFloor = SEASONAL_MODULATION_FLOOR_EDEFAULT;
+	private static final double MILLIS_PER_DAY = 1000.0*60.0*60.0*24.0;
+	
+	private final Calendar calendar = Calendar.getInstance();
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public ForcingDiseaseModelImpl() {
+		super();
+	}
+	
+	
+	/**
+	 * To create a user defined (experimental) disease mode, the user may wish 
+	 * to extend the existing models but simply override two methods.
+	 * computeDiseaseDeltas() sets the work flow for the model. The following example
+	 * is derived from the standard code for all build in models but in the line below
+	 * where we define final "double transmisionRate" we show and example modification
+	 * where a periodic forcing factor { sin(freq*t) } is added to the code as an example
+	 * modification.
+	 * 
+	 * @param time
+	 * 			  current time
+	 * @param currentState
+	 *            the current state of the population
+	 * @param diseaseLabel
+	 *            the disease label for which the state transitions are being
+	 *            computed.
+	 * @param timeDelta
+	 *            the time period (milliseconds) over which the population
+	 *            members transition to new states          
+	 * @return a disease state label value that contains the number of
+	 *         delta changes in each disease state
+	 * 
+	 * Users can modify the method below to create their own model.
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		double currentMillis = time.getTime().getTime();
+		double seasonalModulationExponent = getSeasonalModulationExponent();
+		double seasonalModulationFloor = getSeasonalModulationFloor();
+		double modulationPeriod = getModulationPeriod();
+		double phase = getModulationPhaseShift();	
+				
+		// Get the year that matches the phase shift. -pi/2 is -modulationPeriod/2, pi/2 is modulationPeriod/2
+		long adjustedMillisecsForPhaseShft = (long)(currentMillis + modulationPeriod*MILLIS_PER_DAY*phase/(2.0*Math.PI/2.0));
+		
+		int year=0;
+		// Shared calendar object not thread safe
+		synchronized(calendar) {
+			calendar.setTimeInMillis(adjustedMillisecsForPhaseShft);
+			year = calendar.get(Calendar.YEAR);
+		}
+		
+		
+		double modulation = seasonalModulationFloor + (1-seasonalModulationFloor)*Math.pow(Math.abs(Math.sin(phase + Math.PI*currentMillis/(modulationPeriod*MILLIS_PER_DAY))), seasonalModulationExponent);
+		
+		
+		
+		// This is beta*
+		double transmissionRate = modulation * (getAdjustedTransmissionRate(timeDelta));
+
+		if(!this.isFrequencyDependent())  transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* effectiveInfectious;
+		
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	} // computeTransitions
+
+	
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	@Override
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double Inoisy = currentSI.getI()* computeNoise();
+			double change = oldI-Inoisy;
+			currentSI.setI(Inoisy);
+			double newS = currentSI.getS() + change;
+			if(newS < 0.0) {
+				// Need to rescale
+				double scale = (currentSI.getS() + newS) / currentSI.getS();
+				currentSI.setI(Inoisy*scale);
+			} else  currentSI.setS(newS);
+			return;
+	} // doModelSpecificAdjustments
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ForcingPackage.Literals.FORCING_DISEASE_MODEL;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSeasonalModulationExponent() {
+		return seasonalModulationExponent;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeasonalModulationExponent(double newSeasonalModulationExponent) {
+		double oldSeasonalModulationExponent = seasonalModulationExponent;
+		seasonalModulationExponent = newSeasonalModulationExponent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT, oldSeasonalModulationExponent, seasonalModulationExponent));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPeriod() {
+		return modulationPeriod;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPeriod(double newModulationPeriod) {
+		double oldModulationPeriod = modulationPeriod;
+		modulationPeriod = newModulationPeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD, oldModulationPeriod, modulationPeriod));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPhaseShift() {
+		return modulationPhaseShift;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPhaseShift(double newModulationPhaseShift) {
+		double oldModulationPhaseShift = modulationPhaseShift;
+		modulationPhaseShift = newModulationPhaseShift;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT, oldModulationPhaseShift, modulationPhaseShift));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSeasonalModulationFloor() {
+		return seasonalModulationFloor;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSeasonalModulationFloor(double newSeasonalModulationFloor) {
+		double oldSeasonalModulationFloor = seasonalModulationFloor;
+		seasonalModulationFloor = newSeasonalModulationFloor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR, oldSeasonalModulationFloor, seasonalModulationFloor));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				return getSeasonalModulationExponent();
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return getModulationPeriod();
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return getModulationPhaseShift();
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				return getSeasonalModulationFloor();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				setSeasonalModulationExponent((Double)newValue);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod((Double)newValue);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift((Double)newValue);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				setSeasonalModulationFloor((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				setSeasonalModulationExponent(SEASONAL_MODULATION_EXPONENT_EDEFAULT);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod(MODULATION_PERIOD_EDEFAULT);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift(MODULATION_PHASE_SHIFT_EDEFAULT);
+				return;
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				setSeasonalModulationFloor(SEASONAL_MODULATION_FLOOR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				return seasonalModulationExponent != SEASONAL_MODULATION_EXPONENT_EDEFAULT;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return modulationPeriod != MODULATION_PERIOD_EDEFAULT;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return modulationPhaseShift != MODULATION_PHASE_SHIFT_EDEFAULT;
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				return seasonalModulationFloor != SEASONAL_MODULATION_FLOOR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seasonalModulationExponent: "); //$NON-NLS-1$
+		result.append(seasonalModulationExponent);
+		result.append(", modulationPeriod: "); //$NON-NLS-1$
+		result.append(modulationPeriod);
+		result.append(", modulationPhaseShift: "); //$NON-NLS-1$
+		result.append(modulationPhaseShift);
+		result.append(", seasonalModulationFloor: "); //$NON-NLS-1$
+		result.append(seasonalModulationFloor);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ForcingDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingFactoryImpl.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingFactoryImpl.java
new file mode 100644
index 0000000..308103d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingFactoryImpl.java
@@ -0,0 +1,126 @@
+package org.eclipse.stem.diseasemodels.forcing.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.diseasemodels.forcing.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingFactoryImpl extends EFactoryImpl implements ForcingFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ForcingFactory init() {
+		try {
+			ForcingFactory theForcingFactory = (ForcingFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/forcing.ecore"); //$NON-NLS-1$ 
+			if (theForcingFactory != null) {
+				return theForcingFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ForcingFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ForcingPackage.FORCING_DISEASE_MODEL: return createForcingDiseaseModel();
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL: return createGaussianForcingDiseaseModel();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL: return createGaussian2ForcingDiseaseModel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingDiseaseModel createForcingDiseaseModel() {
+		ForcingDiseaseModelImpl forcingDiseaseModel = new ForcingDiseaseModelImpl();
+		return forcingDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GaussianForcingDiseaseModel createGaussianForcingDiseaseModel() {
+		GaussianForcingDiseaseModelImpl gaussianForcingDiseaseModel = new GaussianForcingDiseaseModelImpl();
+		return gaussianForcingDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Gaussian2ForcingDiseaseModel createGaussian2ForcingDiseaseModel() {
+		Gaussian2ForcingDiseaseModelImpl gaussian2ForcingDiseaseModel = new Gaussian2ForcingDiseaseModelImpl();
+		return gaussian2ForcingDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingPackage getForcingPackage() {
+		return (ForcingPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ForcingPackage getPackage() {
+		return ForcingPackage.eINSTANCE;
+	}
+
+} //ExampleFactoryImpl
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingPackageImpl.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingPackageImpl.java
new file mode 100644
index 0000000..2d602d2
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/ForcingPackageImpl.java
@@ -0,0 +1,414 @@
+package org.eclipse.stem.diseasemodels.forcing.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.ForcingFactory;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+
+import org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingPackageImpl extends EPackageImpl implements ForcingPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass forcingDiseaseModelEClass = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass gaussianForcingDiseaseModelEClass = null;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass gaussian2ForcingDiseaseModelEClass = null;
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ForcingPackageImpl() {
+		super(eNS_URI, ForcingFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ForcingPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ForcingPackage init() {
+		if (isInited) return (ForcingPackage)EPackage.Registry.INSTANCE.getEPackage(ForcingPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ForcingPackageImpl theForcingPackage = (ForcingPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ForcingPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ForcingPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		StandardPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theForcingPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theForcingPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theForcingPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ForcingPackage.eNS_URI, theForcingPackage);
+		return theForcingPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getForcingDiseaseModel() {
+		return forcingDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getForcingDiseaseModel_SeasonalModulationExponent() {
+		return (EAttribute)forcingDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getForcingDiseaseModel_ModulationPeriod() {
+		return (EAttribute)forcingDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getForcingDiseaseModel_ModulationPhaseShift() {
+		return (EAttribute)forcingDiseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getForcingDiseaseModel_SeasonalModulationFloor() {
+		return (EAttribute)forcingDiseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGaussianForcingDiseaseModel() {
+		return gaussianForcingDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussianForcingDiseaseModel_Sigma2() {
+		return (EAttribute)gaussianForcingDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussianForcingDiseaseModel_ModulationPeriod() {
+		return (EAttribute)gaussianForcingDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussianForcingDiseaseModel_ModulationPhaseShift() {
+		return (EAttribute)gaussianForcingDiseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussianForcingDiseaseModel_ModulationFloor() {
+		return (EAttribute)gaussianForcingDiseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGaussian2ForcingDiseaseModel() {
+		return gaussian2ForcingDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Sigma2_2() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Sigma2() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_ModulationPeriod() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_ModulationPhaseShift() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_ModulationFloor() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Att1() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Att2() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Att3() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getGaussian2ForcingDiseaseModel_Att4() {
+		return (EAttribute)gaussian2ForcingDiseaseModelEClass.getEStructuralFeatures().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingFactory getForcingFactory() {
+		return (ForcingFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		forcingDiseaseModelEClass = createEClass(FORCING_DISEASE_MODEL);
+		createEAttribute(forcingDiseaseModelEClass, FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT);
+		createEAttribute(forcingDiseaseModelEClass, FORCING_DISEASE_MODEL__MODULATION_PERIOD);
+		createEAttribute(forcingDiseaseModelEClass, FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT);
+		createEAttribute(forcingDiseaseModelEClass, FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR);
+
+		gaussianForcingDiseaseModelEClass = createEClass(GAUSSIAN_FORCING_DISEASE_MODEL);
+		createEAttribute(gaussianForcingDiseaseModelEClass, GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2);
+		createEAttribute(gaussianForcingDiseaseModelEClass, GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD);
+		createEAttribute(gaussianForcingDiseaseModelEClass, GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT);
+		createEAttribute(gaussianForcingDiseaseModelEClass, GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR);
+
+		gaussian2ForcingDiseaseModelEClass = createEClass(GAUSSIAN2_FORCING_DISEASE_MODEL);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3);
+		createEAttribute(gaussian2ForcingDiseaseModelEClass, GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		StandardPackage theStandardPackage = (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		forcingDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSIRDiseaseModel());
+		gaussianForcingDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSIRDiseaseModel());
+		gaussian2ForcingDiseaseModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSIRDiseaseModel());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(forcingDiseaseModelEClass, ForcingDiseaseModel.class, "ForcingDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getForcingDiseaseModel_SeasonalModulationExponent(), theEcorePackage.getEDouble(), "seasonalModulationExponent", "2.0", 0, 1, ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getForcingDiseaseModel_ModulationPeriod(), ecorePackage.getEDouble(), "modulationPeriod", "365.256363051", 0, 1, ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getForcingDiseaseModel_ModulationPhaseShift(), ecorePackage.getEDouble(), "modulationPhaseShift", "0.0", 0, 1, ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getForcingDiseaseModel_SeasonalModulationFloor(), theEcorePackage.getEDouble(), "seasonalModulationFloor", "0.6", 0, 1, ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(gaussianForcingDiseaseModelEClass, GaussianForcingDiseaseModel.class, "GaussianForcingDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getGaussianForcingDiseaseModel_Sigma2(), ecorePackage.getEDouble(), "sigma2", "100", 0, 1, GaussianForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getGaussianForcingDiseaseModel_ModulationPeriod(), ecorePackage.getEDouble(), "modulationPeriod", "365.25", 0, 1, GaussianForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getGaussianForcingDiseaseModel_ModulationPhaseShift(), ecorePackage.getEDouble(), "modulationPhaseShift", "0", 0, 1, GaussianForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getGaussianForcingDiseaseModel_ModulationFloor(), ecorePackage.getEDouble(), "modulationFloor", "0.6", 0, 1, GaussianForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(gaussian2ForcingDiseaseModelEClass, Gaussian2ForcingDiseaseModel.class, "Gaussian2ForcingDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Sigma2_2(), theEcorePackage.getEDouble(), "sigma2_2", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Sigma2(), ecorePackage.getEDouble(), "sigma2", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_ModulationPeriod(), ecorePackage.getEDouble(), "modulationPeriod", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_ModulationPhaseShift(), ecorePackage.getEDouble(), "modulationPhaseShift", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_ModulationFloor(), theEcorePackage.getEDouble(), "modulationFloor", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Att1(), theEcorePackage.getEDouble(), "att1", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Att2(), theEcorePackage.getEDouble(), "att2", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Att3(), theEcorePackage.getEDouble(), "att3", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getGaussian2ForcingDiseaseModel_Att4(), theEcorePackage.getEDouble(), "att4", null, 0, 1, Gaussian2ForcingDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ExamplePackageImpl
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/Gaussian2ForcingDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/Gaussian2ForcingDiseaseModelImpl.java
new file mode 100644
index 0000000..9d31fef
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/Gaussian2ForcingDiseaseModelImpl.java
@@ -0,0 +1,759 @@
+package org.eclipse.stem.diseasemodels.forcing.impl;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Calendar;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Gaussian2 Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getSigma2_2 <em>Sigma2 2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getSigma2 <em>Sigma2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getModulationFloor <em>Modulation Floor</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getAtt1 <em>Att1</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getAtt2 <em>Att2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getAtt3 <em>Att3</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.Gaussian2ForcingDiseaseModelImpl#getAtt4 <em>Att4</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class Gaussian2ForcingDiseaseModelImpl extends StochasticSIRDiseaseModelImpl implements Gaussian2ForcingDiseaseModel {
+	/**
+	 * The default value of the '{@link #getSigma2_2() <em>Sigma2 2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2_2()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SIGMA2_2_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getSigma2_2() <em>Sigma2 2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2_2()
+	 * @generated
+	 * @ordered
+	 */
+	protected double sigma2_2 = SIGMA2_2_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getSigma2() <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SIGMA2_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getSigma2() <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2()
+	 * @generated
+	 * @ordered
+	 */
+	protected double sigma2 = SIGMA2_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PERIOD_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPeriod = MODULATION_PERIOD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PHASE_SHIFT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPhaseShift = MODULATION_PHASE_SHIFT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getModulationFloor() <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_FLOOR_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getModulationFloor() <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationFloor = MODULATION_FLOOR_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAtt1() <em>Att1</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt1()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ATT1_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAtt1() <em>Att1</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt1()
+	 * @generated
+	 * @ordered
+	 */
+	protected double att1 = ATT1_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAtt2() <em>Att2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt2()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ATT2_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAtt2() <em>Att2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt2()
+	 * @generated
+	 * @ordered
+	 */
+	protected double att2 = ATT2_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAtt3() <em>Att3</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt3()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ATT3_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAtt3() <em>Att3</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt3()
+	 * @generated
+	 * @ordered
+	 */
+	protected double att3 = ATT3_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getAtt4() <em>Att4</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt4()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ATT4_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAtt4() <em>Att4</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAtt4()
+	 * @generated
+	 * @ordered
+	 */
+	protected double att4 = ATT4_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Gaussian2ForcingDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSigma2_2() {
+		return sigma2_2;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSigma2_2(double newSigma2_2) {
+		double oldSigma2_2 = sigma2_2;
+		sigma2_2 = newSigma2_2;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2, oldSigma2_2, sigma2_2));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSigma2() {
+		return sigma2;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSigma2(double newSigma2) {
+		double oldSigma2 = sigma2;
+		sigma2 = newSigma2;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2, oldSigma2, sigma2));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPeriod() {
+		return modulationPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPeriod(double newModulationPeriod) {
+		double oldModulationPeriod = modulationPeriod;
+		modulationPeriod = newModulationPeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD, oldModulationPeriod, modulationPeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPhaseShift() {
+		return modulationPhaseShift;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPhaseShift(double newModulationPhaseShift) {
+		double oldModulationPhaseShift = modulationPhaseShift;
+		modulationPhaseShift = newModulationPhaseShift;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT, oldModulationPhaseShift, modulationPhaseShift));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationFloor() {
+		return modulationFloor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationFloor(double newModulationFloor) {
+		double oldModulationFloor = modulationFloor;
+		modulationFloor = newModulationFloor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR, oldModulationFloor, modulationFloor));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAtt1() {
+		return att1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAtt1(double newAtt1) {
+		double oldAtt1 = att1;
+		att1 = newAtt1;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1, oldAtt1, att1));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAtt2() {
+		return att2;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAtt2(double newAtt2) {
+		double oldAtt2 = att2;
+		att2 = newAtt2;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2, oldAtt2, att2));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAtt3() {
+		return att3;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAtt3(double newAtt3) {
+		double oldAtt3 = att3;
+		att3 = newAtt3;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3, oldAtt3, att3));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAtt4() {
+		return att4;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAtt4(double newAtt4) {
+		double oldAtt4 = att4;
+		att4 = newAtt4;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4, oldAtt4, att4));
+	}
+
+	private Long firstTime = new Long(Long.MAX_VALUE);
+	private Calendar calendar = Calendar.getInstance();
+	private Calendar calendar2 = Calendar.getInstance();
+	private static final double MILLIS_PER_DAY = 1000.0*60.0*60.0*24.0;
+
+	private ArrayList<Long> writtedTimes = new ArrayList<Long>();
+	private FileWriter fw;
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		long currentMillis = time.getTime().getTime();
+		double seasonalModulationFloor = getModulationFloor();
+		double modulationPeriod = getModulationPeriod();
+		double phase = getModulationPhaseShift();	
+		double sigma2 = getSigma2();
+		double sigma2_2 = getSigma2_2();
+		
+		synchronized(firstTime) {
+			if(firstTime.longValue() == Long.MAX_VALUE)
+				firstTime = new Long(time.getTime().getTime());
+		}
+		
+		// Get the day from time and adjust for the phase	
+		double day=0;
+		// Shared calendar object not thread safe
+		synchronized(calendar) {
+			calendar.setTimeInMillis(currentMillis);
+			calendar2.setTimeInMillis(firstTime.longValue());
+			day = (calendar.getTimeInMillis() - calendar2.getTimeInMillis())/MILLIS_PER_DAY;
+		}
+		
+		
+		double mu1 = phase;
+		double mu2 = phase + modulationPeriod;
+		
+		double modulation1 = (1/Math.sqrt(2*Math.PI*sigma2))*Math.exp(-(Math.pow(day-mu1,2))/(2*sigma2));						
+		double modulation2 = (1/Math.sqrt(2*Math.PI*sigma2_2))*Math.exp(-(Math.pow(day-mu2,2))/(2*sigma2_2));
+		
+		// This is beta*
+		double transmissionRate = seasonalModulationFloor + (getAdjustedTransmissionRate(timeDelta)) * (modulation1+modulation2);
+
+		if(day >= 116 && day <= 119) // April 24 - 27
+			transmissionRate = transmissionRate * this.getAtt1();
+		else 	if(day >= 120 && day <= 127) // April 28 - May 5
+			transmissionRate = transmissionRate * this.getAtt2();
+		else if(day >= 128 && day <= 132) // May 6 - May 10
+			transmissionRate = transmissionRate * this.getAtt3();
+		
+		synchronized(writtedTimes) {
+			if(!writtedTimes.contains(time.getTime().getTime())) {
+				try {
+				if(fw == null) fw = new FileWriter("beta.csv");
+				fw.write(time.getTime().getTime()+","+transmissionRate+"\n");
+				} catch(Exception e) {
+					e.printStackTrace();
+				}
+				writtedTimes.add(time.getTime().getTime());
+			}
+		}
+		
+		if(!this.isFrequencyDependent())  transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* effectiveInfectious;
+		
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	} // computeTransitions
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	@Override
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double Inoisy = currentSI.getI()* computeNoise();
+			double change = oldI-Inoisy;
+			currentSI.setI(Inoisy);
+			double newS = currentSI.getS() + change;
+			if(newS < 0.0) {
+				// Need to rescale
+				double scale = (currentSI.getS() + newS) / currentSI.getS();
+				currentSI.setI(Inoisy*scale);
+			} else  currentSI.setS(newS);
+			return;
+	} // doModelSpecificAdjustments
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2:
+				return getSigma2_2();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2:
+				return getSigma2();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return getModulationPeriod();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return getModulationPhaseShift();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				return getModulationFloor();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1:
+				return getAtt1();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2:
+				return getAtt2();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3:
+				return getAtt3();
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4:
+				return getAtt4();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2:
+				setSigma2_2((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2:
+				setSigma2((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				setModulationFloor((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1:
+				setAtt1((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2:
+				setAtt2((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3:
+				setAtt3((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4:
+				setAtt4((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2:
+				setSigma2_2(SIGMA2_2_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2:
+				setSigma2(SIGMA2_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod(MODULATION_PERIOD_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift(MODULATION_PHASE_SHIFT_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				setModulationFloor(MODULATION_FLOOR_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1:
+				setAtt1(ATT1_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2:
+				setAtt2(ATT2_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3:
+				setAtt3(ATT3_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4:
+				setAtt4(ATT4_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2:
+				return sigma2_2 != SIGMA2_2_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2:
+				return sigma2 != SIGMA2_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return modulationPeriod != MODULATION_PERIOD_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return modulationPhaseShift != MODULATION_PHASE_SHIFT_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				return modulationFloor != MODULATION_FLOOR_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1:
+				return att1 != ATT1_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2:
+				return att2 != ATT2_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3:
+				return att3 != ATT3_EDEFAULT;
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4:
+				return att4 != ATT4_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sigma2_2: "); //$NON-NLS-1$
+		result.append(sigma2_2);
+		result.append(", sigma2: "); //$NON-NLS-1$
+		result.append(sigma2);
+		result.append(", modulationPeriod: "); //$NON-NLS-1$
+		result.append(modulationPeriod);
+		result.append(", modulationPhaseShift: "); //$NON-NLS-1$
+		result.append(modulationPhaseShift);
+		result.append(", modulationFloor: "); //$NON-NLS-1$
+		result.append(modulationFloor);
+		result.append(", att1: "); //$NON-NLS-1$
+		result.append(att1);
+		result.append(", att2: "); //$NON-NLS-1$
+		result.append(att2);
+		result.append(", att3: "); //$NON-NLS-1$
+		result.append(att3);
+		result.append(", att4: "); //$NON-NLS-1$
+		result.append(att4);
+		result.append(')');
+		return result.toString();
+	}
+
+} //Gaussian2ForcingDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/GaussianForcingDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/GaussianForcingDiseaseModelImpl.java
new file mode 100644
index 0000000..806a9ca
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/impl/GaussianForcingDiseaseModelImpl.java
@@ -0,0 +1,494 @@
+package org.eclipse.stem.diseasemodels.forcing.impl;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Calendar;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Gaussian Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl#getSigma2 <em>Sigma2</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl#getModulationPeriod <em>Modulation Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.forcing.impl.GaussianForcingDiseaseModelImpl#getModulationFloor <em>Modulation Floor</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class GaussianForcingDiseaseModelImpl extends StochasticSIRDiseaseModelImpl implements GaussianForcingDiseaseModel {
+	/**
+	 * The default value of the '{@link #getSigma2() <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double SIGMA2_EDEFAULT = 100.0;
+	/**
+	 * The cached value of the '{@link #getSigma2() <em>Sigma2</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSigma2()
+	 * @generated
+	 * @ordered
+	 */
+	protected double sigma2 = SIGMA2_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PERIOD_EDEFAULT = 365.25;
+	/**
+	 * The cached value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPeriod = MODULATION_PERIOD_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_PHASE_SHIFT_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationPhaseShift()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationPhaseShift = MODULATION_PHASE_SHIFT_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getModulationFloor() <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MODULATION_FLOOR_EDEFAULT = 0.6;
+	/**
+	 * The cached value of the '{@link #getModulationFloor() <em>Modulation Floor</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getModulationFloor()
+	 * @generated
+	 * @ordered
+	 */
+	protected double modulationFloor = MODULATION_FLOOR_EDEFAULT;
+
+	private Calendar calendar = Calendar.getInstance();
+	private Calendar calendar2 = Calendar.getInstance();
+	private static final double MILLIS_PER_DAY = 1000.0*60.0*60.0*24.0;
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public GaussianForcingDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ForcingPackage.Literals.GAUSSIAN_FORCING_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getSigma2() {
+		return sigma2;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSigma2(double newSigma2) {
+		double oldSigma2 = sigma2;
+		sigma2 = newSigma2;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2, oldSigma2, sigma2));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPeriod() {
+		return modulationPeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPeriod(double newModulationPeriod) {
+		double oldModulationPeriod = modulationPeriod;
+		modulationPeriod = newModulationPeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD, oldModulationPeriod, modulationPeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationPhaseShift() {
+		return modulationPhaseShift;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationPhaseShift(double newModulationPhaseShift) {
+		double oldModulationPhaseShift = modulationPhaseShift;
+		modulationPhaseShift = newModulationPhaseShift;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT, oldModulationPhaseShift, modulationPhaseShift));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getModulationFloor() {
+		return modulationFloor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setModulationFloor(double newModulationFloor) {
+		double oldModulationFloor = modulationFloor;
+		modulationFloor = newModulationFloor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR, oldModulationFloor, modulationFloor));
+	}
+
+	/**
+	 * To create a user defined (experimental) disease mode, the user may wish 
+	 * to extend the existing models but simply override two methods.
+	 * computeDiseaseDeltas() sets the work flow for the model. The following example
+	 * is derived from the standard code for all build in models but in the line below
+	 * where we define final "double transmisionRate" we show and example modification
+	 * where a periodic forcing factor { sin(freq*t) } is added to the code as an example
+	 * modification.
+	 * 
+	 * @param time
+	 * 			  current time
+	 * @param currentState
+	 *            the current state of the population
+	 * @param diseaseLabel
+	 *            the disease label for which the state transitions are being
+	 *            computed.
+	 * @param timeDelta
+	 *            the time period (milliseconds) over which the population
+	 *            members transition to new states          
+	 * @return a disease state label value that contains the number of
+	 *         delta changes in each disease state
+	 * 
+	 * Users can modify the method below to create their own model.
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	private ArrayList<Long> writtedTimes = new ArrayList<Long>();
+	private FileWriter fw;
+	private Long firstTime = new Long(Long.MAX_VALUE);
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		long currentMillis = time.getTime().getTime();
+		double seasonalModulationFloor = getModulationFloor();
+		double modulationPeriod = getModulationPeriod();
+		double phase = getModulationPhaseShift();	
+		double sigma2 = getSigma2();		
+		
+		synchronized(firstTime) {
+			if(firstTime.longValue() == Long.MAX_VALUE)
+				firstTime = new Long(time.getTime().getTime());
+		}
+		
+		// Get the day from time and adjust for the phase	
+		double day=0;
+		// Shared calendar object not thread safe
+		synchronized(calendar) {
+			calendar.setTimeInMillis(currentMillis+(long)(phase*MILLIS_PER_DAY));
+			calendar2.setTimeInMillis(firstTime.longValue());
+			day = (calendar.getTimeInMillis() - calendar2.getTimeInMillis())/MILLIS_PER_DAY;
+		}
+		
+		day = ((day % modulationPeriod)-modulationPeriod/2.0)/modulationPeriod;
+		double modulation = (1/Math.sqrt(2*Math.PI*sigma2))*Math.exp(-(Math.pow(day,2))/(2*sigma2));						
+		
+		// This is beta*
+		double transmissionRate = seasonalModulationFloor + modulation * (getAdjustedTransmissionRate(timeDelta));
+
+/*		synchronized(writtedTimes) {
+			if(!writtedTimes.contains(time.getTime().getTime())) {
+				try {
+				if(fw == null) fw = new FileWriter("beta.csv");
+				fw.write(time.getTime().getTime()+","+transmissionRate+"\n");
+				} catch(Exception e) {
+					e.printStackTrace();
+				}
+				writtedTimes.add(time.getTime().getTime());
+			}
+		}
+		*/
+		if(!this.isFrequencyDependent())  transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* effectiveInfectious;
+		
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	} // computeTransitions
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	@Override
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double Inoisy = currentSI.getI()* computeNoise();
+			double change = oldI-Inoisy;
+			currentSI.setI(Inoisy);
+			double newS = currentSI.getS() + change;
+			if(newS < 0.0) {
+				// Need to rescale
+				double scale = (currentSI.getS() + newS) / currentSI.getS();
+				currentSI.setI(Inoisy*scale);
+			} else  currentSI.setS(newS);
+			return;
+	} // doModelSpecificAdjustments
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2:
+				return getSigma2();
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return getModulationPeriod();
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return getModulationPhaseShift();
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				return getModulationFloor();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2:
+				setSigma2((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift((Double)newValue);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				setModulationFloor((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2:
+				setSigma2(SIGMA2_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				setModulationPeriod(MODULATION_PERIOD_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				setModulationPhaseShift(MODULATION_PHASE_SHIFT_EDEFAULT);
+				return;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				setModulationFloor(MODULATION_FLOOR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2:
+				return sigma2 != SIGMA2_EDEFAULT;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				return modulationPeriod != MODULATION_PERIOD_EDEFAULT;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				return modulationPhaseShift != MODULATION_PHASE_SHIFT_EDEFAULT;
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				return modulationFloor != MODULATION_FLOOR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (sigma2: "); //$NON-NLS-1$
+		result.append(sigma2);
+		result.append(", modulationPeriod: "); //$NON-NLS-1$
+		result.append(modulationPeriod);
+		result.append(", modulationPhaseShift: "); //$NON-NLS-1$
+		result.append(modulationPhaseShift);
+		result.append(", modulationFloor: "); //$NON-NLS-1$
+		result.append(modulationFloor);
+		result.append(')');
+		return result.toString();
+	}
+
+} //GaussianForcingDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingDiseaseModelItemProvider.java
new file mode 100644
index 0000000..2484ab8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingDiseaseModelItemProvider.java
@@ -0,0 +1,240 @@
+package org.eclipse.stem.diseasemodels.forcing.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("unused") 
+public class ForcingDiseaseModelItemProvider
+	extends StochasticSIRDiseaseModelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeasonalModulationExponentPropertyDescriptor(object);
+			addModulationPeriodPropertyDescriptor(object);
+			addModulationPhaseShiftPropertyDescriptor(object);
+			addSeasonalModulationFloorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Seasonal Modulation Exponent feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeasonalModulationExponentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ForcingDiseaseModel_seasonalModulationExponent_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ForcingDiseaseModel_seasonalModulationExponent_feature", "_UI_ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Period feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ForcingDiseaseModel_modulationPeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ForcingDiseaseModel_modulationPeriod_feature", "_UI_ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.FORCING_DISEASE_MODEL__MODULATION_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Phase Shift feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPhaseShiftPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ForcingDiseaseModel_modulationPhaseShift_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ForcingDiseaseModel_modulationPhaseShift_feature", "_UI_ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Seasonal Modulation Floor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeasonalModulationFloorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ForcingDiseaseModel_seasonalModulationFloor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_ForcingDiseaseModel_seasonalModulationFloor_feature", "_UI_ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns ForcingDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ForcingDiseaseModel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((ForcingDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ForcingDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_ForcingDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ForcingDiseaseModel.class)) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ForcingEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingEditPlugin.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingEditPlugin.java
new file mode 100644
index 0000000..5118133
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingEditPlugin.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.diseasemodels.forcing.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+//import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+//import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+/**
+ * This is the central singleton for the Forcing edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ForcingEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ForcingEditPlugin INSTANCE = new ForcingEditPlugin();
+	
+	/**
+	 * 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 NOT
+	 */
+	public ForcingEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				//EcoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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
+		 */
+		@SuppressWarnings("synthetic-access")
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingItemProviderAdapterFactory.java
new file mode 100644
index 0000000..78c00af
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/ForcingItemProviderAdapterFactory.java
@@ -0,0 +1,256 @@
+package org.eclipse.stem.diseasemodels.forcing.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.forcing.util.ForcingAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingItemProviderAdapterFactory extends ForcingAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ForcingDiseaseModelItemProvider forcingDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createForcingDiseaseModelAdapter() {
+		if (forcingDiseaseModelItemProvider == null) {
+			forcingDiseaseModelItemProvider = new ForcingDiseaseModelItemProvider(this);
+		}
+
+		return forcingDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GaussianForcingDiseaseModelItemProvider gaussianForcingDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createGaussianForcingDiseaseModelAdapter() {
+		if (gaussianForcingDiseaseModelItemProvider == null) {
+			gaussianForcingDiseaseModelItemProvider = new GaussianForcingDiseaseModelItemProvider(this);
+		}
+
+		return gaussianForcingDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Gaussian2ForcingDiseaseModelItemProvider gaussian2ForcingDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createGaussian2ForcingDiseaseModelAdapter() {
+		if (gaussian2ForcingDiseaseModelItemProvider == null) {
+			gaussian2ForcingDiseaseModelItemProvider = new Gaussian2ForcingDiseaseModelItemProvider(this);
+		}
+
+		return gaussian2ForcingDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (forcingDiseaseModelItemProvider != null) forcingDiseaseModelItemProvider.dispose();
+		if (gaussianForcingDiseaseModelItemProvider != null) gaussianForcingDiseaseModelItemProvider.dispose();
+		if (gaussian2ForcingDiseaseModelItemProvider != null) gaussian2ForcingDiseaseModelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/Gaussian2ForcingDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/Gaussian2ForcingDiseaseModelItemProvider.java
new file mode 100644
index 0000000..8a381dc
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/Gaussian2ForcingDiseaseModelItemProvider.java
@@ -0,0 +1,358 @@
+package org.eclipse.stem.diseasemodels.forcing.provider;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class Gaussian2ForcingDiseaseModelItemProvider
+	extends StochasticSIRDiseaseModelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Gaussian2ForcingDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSigma2_2PropertyDescriptor(object);
+			addSigma2PropertyDescriptor(object);
+			addModulationPeriodPropertyDescriptor(object);
+			addModulationPhaseShiftPropertyDescriptor(object);
+			addModulationFloorPropertyDescriptor(object);
+			addAtt1PropertyDescriptor(object);
+			addAtt2PropertyDescriptor(object);
+			addAtt3PropertyDescriptor(object);
+			addAtt4PropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sigma2 2 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSigma2_2PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_sigma2_2_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_sigma2_2_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Sigma2 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSigma2PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_sigma2_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_sigma2_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Period feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_modulationPeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_modulationPeriod_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Phase Shift feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPhaseShiftPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_modulationPhaseShift_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_modulationPhaseShift_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Floor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationFloorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_modulationFloor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_modulationFloor_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Att1 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAtt1PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_att1_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_att1_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Att2 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAtt2PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_att2_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_att2_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Att3 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAtt3PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_att3_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_att3_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Att4 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAtt4PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Gaussian2ForcingDiseaseModel_att4_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Gaussian2ForcingDiseaseModel_att4_feature", "_UI_Gaussian2ForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns Gaussian2ForcingDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/Gaussian2ForcingDiseaseModel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Gaussian2ForcingDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Gaussian2ForcingDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_Gaussian2ForcingDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Gaussian2ForcingDiseaseModel.class)) {
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2_2:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__SIGMA2:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT1:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT2:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT3:
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL__ATT4:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ForcingEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/GaussianForcingDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/GaussianForcingDiseaseModelItemProvider.java
new file mode 100644
index 0000000..9a03f1f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/provider/GaussianForcingDiseaseModelItemProvider.java
@@ -0,0 +1,238 @@
+package org.eclipse.stem.diseasemodels.forcing.provider;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSIRDiseaseModelItemProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GaussianForcingDiseaseModelItemProvider
+	extends StochasticSIRDiseaseModelItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GaussianForcingDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSigma2PropertyDescriptor(object);
+			addModulationPeriodPropertyDescriptor(object);
+			addModulationPhaseShiftPropertyDescriptor(object);
+			addModulationFloorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Sigma2 feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSigma2PropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_GaussianForcingDiseaseModel_sigma2_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_GaussianForcingDiseaseModel_sigma2_feature", "_UI_GaussianForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Period feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_GaussianForcingDiseaseModel_modulationPeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_GaussianForcingDiseaseModel_modulationPeriod_feature", "_UI_GaussianForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Phase Shift feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationPhaseShiftPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_GaussianForcingDiseaseModel_modulationPhaseShift_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_GaussianForcingDiseaseModel_modulationPhaseShift_feature", "_UI_GaussianForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Modulation Floor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addModulationFloorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_GaussianForcingDiseaseModel_modulationFloor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_GaussianForcingDiseaseModel_modulationFloor_feature", "_UI_GaussianForcingDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 ForcingPackage.Literals.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns GaussianForcingDiseaseModel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/GaussianForcingDiseaseModel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((GaussianForcingDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_GaussianForcingDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_GaussianForcingDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(GaussianForcingDiseaseModel.class)) {
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__SIGMA2:
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL__MODULATION_FLOOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ForcingEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingAdapterFactory.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingAdapterFactory.java
new file mode 100644
index 0000000..45e63e9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingAdapterFactory.java
@@ -0,0 +1,433 @@
+package org.eclipse.stem.diseasemodels.forcing.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.forcing.*;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage
+ * @generated
+ */
+public class ForcingAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ForcingPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ForcingPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ForcingSwitch<Adapter> modelSwitch =
+		new ForcingSwitch<Adapter>() {
+			@Override
+			public Adapter caseForcingDiseaseModel(ForcingDiseaseModel object) {
+				return createForcingDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseGaussianForcingDiseaseModel(GaussianForcingDiseaseModel object) {
+				return createGaussianForcingDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseGaussian2ForcingDiseaseModel(Gaussian2ForcingDiseaseModel object) {
+				return createGaussian2ForcingDiseaseModelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModel(DiseaseModel object) {
+				return createDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseIntegrationDecorator(IntegrationDecorator object) {
+				return createIntegrationDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModel(StandardDiseaseModel object) {
+				return createStandardDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseSI(SI object) {
+				return createSIAdapter();
+			}
+			@Override
+			public Adapter caseSIR(SIR object) {
+				return createSIRAdapter();
+			}
+			@Override
+			public Adapter caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+				return createStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+				return createStandardStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+				return createStochasticSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel
+	 * @generated
+	 */
+	public Adapter createForcingDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel <em>Gaussian Forcing Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel
+	 * @generated
+	 */
+	public Adapter createGaussianForcingDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel <em>Gaussian2 Forcing Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel
+	 * @generated
+	 */
+	public Adapter createGaussian2ForcingDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.IntegrationDecorator
+	 * @generated
+	 */
+	public Adapter createIntegrationDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI
+	 * @generated
+	 */
+	public Adapter createSIAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR
+	 * @generated
+	 */
+	public Adapter createSIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel <em>Stochastic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ExampleAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingSwitch.java b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingSwitch.java
new file mode 100644
index 0000000..a23c5d8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/util/ForcingSwitch.java
@@ -0,0 +1,446 @@
+package org.eclipse.stem.diseasemodels.forcing.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.forcing.*;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.forcing.ForcingPackage
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ForcingSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ForcingPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ForcingPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ForcingPackage.FORCING_DISEASE_MODEL: {
+				ForcingDiseaseModel forcingDiseaseModel = (ForcingDiseaseModel)theEObject;
+				T1 result = caseForcingDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseStochasticSIRDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseSIR(forcingDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseSI(forcingDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseDiseaseModel(forcingDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(forcingDiseaseModel);
+				if (result == null) result = caseNodeDecorator(forcingDiseaseModel);
+				if (result == null) result = caseSanityChecker(forcingDiseaseModel);
+				if (result == null) result = caseModifiable(forcingDiseaseModel);
+				if (result == null) result = caseDecorator(forcingDiseaseModel);
+				if (result == null) result = caseIdentifiable(forcingDiseaseModel);
+				if (result == null) result = caseComparable(forcingDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ForcingPackage.GAUSSIAN_FORCING_DISEASE_MODEL: {
+				GaussianForcingDiseaseModel gaussianForcingDiseaseModel = (GaussianForcingDiseaseModel)theEObject;
+				T1 result = caseGaussianForcingDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseStochasticSIRDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseSIR(gaussianForcingDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseSI(gaussianForcingDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseDiseaseModel(gaussianForcingDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(gaussianForcingDiseaseModel);
+				if (result == null) result = caseNodeDecorator(gaussianForcingDiseaseModel);
+				if (result == null) result = caseSanityChecker(gaussianForcingDiseaseModel);
+				if (result == null) result = caseModifiable(gaussianForcingDiseaseModel);
+				if (result == null) result = caseDecorator(gaussianForcingDiseaseModel);
+				if (result == null) result = caseIdentifiable(gaussianForcingDiseaseModel);
+				if (result == null) result = caseComparable(gaussianForcingDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ForcingPackage.GAUSSIAN2_FORCING_DISEASE_MODEL: {
+				Gaussian2ForcingDiseaseModel gaussian2ForcingDiseaseModel = (Gaussian2ForcingDiseaseModel)theEObject;
+				T1 result = caseGaussian2ForcingDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseStochasticSIRDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseSIR(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseSI(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseDiseaseModel(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseNodeDecorator(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseSanityChecker(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseModifiable(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseDecorator(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseIdentifiable(gaussian2ForcingDiseaseModel);
+				if (result == null) result = caseComparable(gaussian2ForcingDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseForcingDiseaseModel(ForcingDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Gaussian Forcing Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Gaussian Forcing Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGaussianForcingDiseaseModel(GaussianForcingDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Gaussian2 Forcing Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Gaussian2 Forcing Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGaussian2ForcingDiseaseModel(Gaussian2ForcingDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModel(DiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegrationDecorator(IntegrationDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModel(StandardDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSI(SI object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIR(SIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //ExampleSwitch
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.classpath b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.project b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.project
new file mode 100644
index 0000000..c8f6431
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.diseasemodels.globalinfluenzamodel</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3c0739d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 15 12:07:24 PDT 2009

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..033b746
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.globalinfluenzamodel;singleton:=true

+Bundle-Version: 1.0.0.qualifier

+Bundle-ClassPath: .

+Bundle-Activator: org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider.GlobalinfluenzamodelEditPlugin$Implementation

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.diseasemodels.globalinfluenzamodel,

+ org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl,

+ org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider,

+ org.eclipse.stem.diseasemodels.globalinfluenzamodel.util

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.stem.data.geography,

+ org.eclipse.emf.ecore;visibility:=reexport,

+ org.eclipse.stem.diseasemodels;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.stem.definitions;visibility:=reexport,

+ org.eclipse.emf.edit;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;visibility:=reexport

+Bundle-ActivationPolicy: lazy

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/build.properties b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/build.properties
new file mode 100644
index 0000000..b922ae8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/build.properties
@@ -0,0 +1,15 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               model/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               icons/

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalInfluenzaModel.gif b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalInfluenzaModel.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalInfluenzaModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif
new file mode 100644
index 0000000..66b71ec
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db
new file mode 100644
index 0000000..33c0b40
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif
new file mode 100644
index 0000000..35743ce
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.ecore b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.ecore
new file mode 100644
index 0000000..4f46b21
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.ecore
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="globalinfluenzamodel"

+    nsURI="http:///org/eclipse/stem/diseasemodels/globalinfluenzamodel.ecore" nsPrefix="org.eclipse.stem.diseasemodels.globalinfluenzamodel">

+  <eClassifiers xsi:type="ecore:EClass" name="GlobalInfluenzaModel" eSuperTypes="../../org.eclipse.stem.diseasemodels/model/standard.ecore#//StochasticSIRDiseaseModel">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="latitudeSigmoidWidth" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"

+        defaultValueLiteral="4.50"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationExponent"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="2.0"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"

+        defaultValueLiteral="365.256363051"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modulationPhaseShift" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"

+        defaultValueLiteral="0.0"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seasonalModulationFloor"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.6"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.genmodel b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.genmodel
new file mode 100644
index 0000000..efa48ae
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/model/globalinfluenzamodel.genmodel
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src"

+    editDirectory="/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src" editorDirectory="/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src"

+    modelPluginID="org.eclipse.stem.diseasemodels.globalinfluenzamodel" redirection=""

+    modelName="Globalinfluenzamodel" editorPluginClass="org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorPlugin"

+    testsDirectory="/org.eclipse.stem.tests.diseasemodels.globalinfluenzamodel/src"

+    importerID="org.eclipse.emf.importer.java" complianceLevel="6.0" copyrightFields="false"

+    providerRootExtendsClass="" editorPluginID="org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.editor"

+    usedGenPackages="../../org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel#//standard ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels ../../org.eclipse.stem.core/model/core.genmodel#//solver"

+    interfaceNamePattern="">

+  <foreignModel>@model</foreignModel>

+  <genPackages prefix="Globalinfluenzamodel" basePackage="org.eclipse.stem.diseasemodels"

+      disposableProviderFactory="true" ecorePackage="globalinfluenzamodel.ecore#/">

+    <genClasses ecoreClass="globalinfluenzamodel.ecore#//GlobalInfluenzaModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute globalinfluenzamodel.ecore#//GlobalInfluenzaModel/latitudeSigmoidWidth"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute globalinfluenzamodel.ecore#//GlobalInfluenzaModel/seasonalModulationExponent"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute globalinfluenzamodel.ecore#//GlobalInfluenzaModel/modulationPeriod"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute globalinfluenzamodel.ecore#//GlobalInfluenzaModel/modulationPhaseShift"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute globalinfluenzamodel.ecore#//GlobalInfluenzaModel/seasonalModulationFloor"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.properties b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.properties
new file mode 100644
index 0000000..193f9f7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.xml b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.xml
new file mode 100644
index 0000000..03a505e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+   <extension

+         point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <factory

+       		uri="http:///org/eclipse/stem/diseasemodels/globalinfluenzamodel.ecore"

+            class="org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider.GlobalinfluenzamodelItemProviderAdapterFactory"

+       		supportedTypes = 

+				         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+				          org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+				          org.eclipse.emf.edit.provider.ITreeItemContentProvider

+				          org.eclipse.emf.edit.provider.IItemLabelProvider

+				          org.eclipse.emf.edit.provider.IItemPropertySource" />

+   </extension>

+

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <package

+            uri="http:///org/eclipse/stem/diseasemodels/globalinfluenzamodel.ecore"

+            class="org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage"

+            genModel="model/globalinfluenzamodel.genmodel"/>

+   </extension>

+   <extension

+         point="org.eclipse.stem.diseasemodels.diseasemodel">

+      <classdef

+            class="org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl">

+      </classdef>

+      <dublin_core

+            category_id="/"

+            creator="James Kaufman"

+            description="A global Disease Model that adjusts seasonal transmission forcing with lattidue"

+            identifier="org.eclipse.stem.diseasemodels.globalinfluenzamodel.dublin_core1"

+            title="org.eclipse.stem.diseasemodels.globalinfluenzamodel.dublin_core1">

+      </dublin_core>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalInfluenzaModel.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalInfluenzaModel.java
new file mode 100644
index 0000000..97a1ea0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalInfluenzaModel.java
@@ -0,0 +1,151 @@
+/**

+ * 

+ */

+package org.eclipse.stem.diseasemodels.globalinfluenzamodel;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;

+

+

+/**

+ * This interface is an EMF Model.

+ * 

+ * @model

+ */

+public interface GlobalInfluenzaModel  extends StochasticSIRDiseaseModel {

+

+	

+/**

+ * Latitude of the Tropic of Cancer in Degrees (Tropic of Capricorn is -ve of this).

+ */

+public static final double TROPIC_OF_CANCER_LATITUDE = 23.439444;

+

+

+/**

+ * The modulation of the transmission coefficient of influenza is Latitude dependent.

+ * We model this with a sigmoid function that goes from zero to one

+ * with center at the tropic of cancer, and the tropic of capricorn.

+ * The default width factor is 4.5 which gives the sigmoid a slope proportional to the 

+ * observed variation in seasonal flu epidemics as a function of latitude in Brazil.

+ * See: http://aje.oxfordjournals.org/cgi/content/full/165/12/1434

+ * 

+ * As our sigmoid we use the basic logistic function 1/1+exp(-x) 

+ * so

+ * Sigmoid Function (lat)  = SeasonalModulationFloor/(1.0 + exp((TROPIC_OF_CANCER_LATITUDE - abs(Lat))./4.5) );

+ * This is near zero near the equator and goes to SeasonalModulationFloor above and below 

+ * the tropics.

+ * 

+ * @return the Latitude Sigmoid width

+ * @model default="4.50"

+ */

+double getLatitudeSigmoidWidth();

+

+/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getLatitudeSigmoidWidth <em>Latitude Sigmoid Width</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Latitude Sigmoid Width</em>' attribute.

+	 * @see #getLatitudeSigmoidWidth()

+	 * @generated

+	 */

+	void setLatitudeSigmoidWidth(double value);

+

+/**

+	 * Returns the value of the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.

+	 * The default value is <code>"2.0"</code>.

+	 * <!-- begin-user-doc -->

+ * <p>

+ * If the meaning of the '<em>Seasonal Modulation Exponent</em>' attribute isn't clear,

+ * there really should be more of a description here...

+ * </p>

+ * <!-- end-user-doc -->

+	 * @return the value of the '<em>Seasonal Modulation Exponent</em>' attribute.

+	 * @see #setSeasonalModulationExponent(double)

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage#getGlobalInfluenzaModel_SeasonalModulationExponent()

+	 * @model default="2.0"

+	 * @generated

+	 */

+double getSeasonalModulationExponent();

+

+/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}' attribute.

+	 * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Seasonal Modulation Exponent</em>' attribute.

+	 * @see #getSeasonalModulationExponent()

+	 * @generated

+	 */

+void setSeasonalModulationExponent(double value);

+

+/**

+ * @return the default modulation period is 1 year. This default value assumes time steps in days. Note that one year = 365.256363051 days 

+ * @model default="365.256363051"

+ */

+double getModulationPeriod();

+

+/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPeriod <em>Modulation Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Modulation Period</em>' attribute.

+	 * @see #getModulationPeriod()

+	 * @generated

+	 */

+void setModulationPeriod(double value);

+

+/**

+ * @return the modulation phase shift shift. 

+ * @model default="0.0"

+ */

+double getModulationPhaseShift();

+

+/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}' attribute.

+	 * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Modulation Phase Shift</em>' attribute.

+	 * @see #getModulationPhaseShift()

+	 * @generated

+	 */

+void setModulationPhaseShift(double value);

+

+/**

+	 * Returns the value of the '<em><b>Seasonal Modulation Floor</b></em>' attribute.

+	 * The default value is <code>"0.6"</code>.

+	 * <!-- begin-user-doc -->

+ * <p>

+ * If the meaning of the '<em>Seasonal Modulation Floor</em>' attribute isn't clear,

+ * there really should be more of a description here...

+ * </p>

+ * <!-- end-user-doc -->

+	 * @return the value of the '<em>Seasonal Modulation Floor</em>' attribute.

+	 * @see #setSeasonalModulationFloor(double)

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage#getGlobalInfluenzaModel_SeasonalModulationFloor()

+	 * @model default="0.6"

+	 * @generated

+	 */

+double getSeasonalModulationFloor();

+

+/**

+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}' attribute.

+	 * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Seasonal Modulation Floor</em>' attribute.

+	 * @see #getSeasonalModulationFloor()

+	 * @generated

+	 */

+void setSeasonalModulationFloor(double value);

+} // GlobalInfluenzaModel

+

+

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelFactory.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelFactory.java
new file mode 100644
index 0000000..fd256ba
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage

+ * @generated

+ */

+public interface GlobalinfluenzamodelFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	GlobalinfluenzamodelFactory eINSTANCE = org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalinfluenzamodelFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Global Influenza Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Global Influenza Model</em>'.

+	 * @generated

+	 */

+	GlobalInfluenzaModel createGlobalInfluenzaModel();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	GlobalinfluenzamodelPackage getGlobalinfluenzamodelPackage();

+

+} //GlobalinfluenzamodelFactory

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelPackage.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelPackage.java
new file mode 100644
index 0000000..8672e38
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/GlobalinfluenzamodelPackage.java
@@ -0,0 +1,551 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.stem.diseasemodels.standard.StandardPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface GlobalinfluenzamodelPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "globalinfluenzamodel";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/globalinfluenzamodel.ecore";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.globalinfluenzamodel";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	GlobalinfluenzamodelPackage eINSTANCE = org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalinfluenzamodelPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl <em>Global Influenza Model</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalinfluenzamodelPackageImpl#getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	int GLOBAL_INFLUENZA_MODEL = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TYPE_URI = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__DUBLIN_CORE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__LABELS_TO_UPDATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;

+

+	/**

+	 * The feature id for the '<em><b>Graph</b></em>' container reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__GRAPH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH;

+

+	/**

+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__ENABLED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ENABLED;

+

+	/**

+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__GRAPH_DECORATED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED;

+

+	/**

+	 * The feature id for the '<em><b>Progress</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__PROGRESS = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS;

+

+	/**

+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__BACKGROUND_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__POPULATION_IDENTIFIER = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;

+

+	/**

+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TIME_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD;

+

+	/**

+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__DISEASE_NAME = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME;

+

+	/**

+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__RELATIVE_TOLERANCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;

+

+	/**

+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__FINITE_DIFFERENCE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;

+

+	/**

+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__FREQUENCY_DEPENDENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;

+

+	/**

+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__BACKGROUND_BIRTH_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TOTAL_POPULATION_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;

+

+	/**

+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;

+

+	/**

+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TOTAL_AREA = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA;

+

+	/**

+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__REFERENCE_POPULATION_DENSITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;

+

+	/**

+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__TRANSMISSION_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__NON_LINEARITY_COEFFICIENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;

+

+	/**

+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__RECOVERY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__INFECTIOUS_MORTALITY_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;

+

+	/**

+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;

+

+	/**

+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__INFECTIOUS_MORTALITY = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;

+

+	/**

+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__IMMUNITY_LOSS_RATE = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Seed</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__SEED = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;

+

+	/**

+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__RANDOM_GENERATOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;

+

+	/**

+	 * The feature id for the '<em><b>Gain</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__GAIN = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;

+

+	/**

+	 * The feature id for the '<em><b>Latitude Sigmoid Width</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 1;

+

+	/**

+	 * The feature id for the '<em><b>Modulation Period</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 2;

+

+	/**

+	 * The feature id for the '<em><b>Modulation Phase Shift</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 3;

+

+	/**

+	 * The feature id for the '<em><b>Seasonal Modulation Floor</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 4;

+

+	/**

+	 * The number of structural features of the '<em>Global Influenza Model</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int GLOBAL_INFLUENZA_MODEL_FEATURE_COUNT = StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT + 5;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel <em>Global Influenza Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Global Influenza Model</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel

+	 * @generated

+	 */

+	EClass getGlobalInfluenzaModel();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getLatitudeSigmoidWidth <em>Latitude Sigmoid Width</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Latitude Sigmoid Width</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getLatitudeSigmoidWidth()

+	 * @see #getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	EAttribute getGlobalInfluenzaModel_LatitudeSigmoidWidth();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Seasonal Modulation Exponent</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationExponent()

+	 * @see #getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	EAttribute getGlobalInfluenzaModel_SeasonalModulationExponent();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPeriod <em>Modulation Period</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Modulation Period</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPeriod()

+	 * @see #getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	EAttribute getGlobalInfluenzaModel_ModulationPeriod();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPhaseShift <em>Modulation Phase Shift</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Modulation Phase Shift</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getModulationPhaseShift()

+	 * @see #getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	EAttribute getGlobalInfluenzaModel_ModulationPhaseShift();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Seasonal Modulation Floor</em>'.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel#getSeasonalModulationFloor()

+	 * @see #getGlobalInfluenzaModel()

+	 * @generated

+	 */

+	EAttribute getGlobalInfluenzaModel_SeasonalModulationFloor();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	GlobalinfluenzamodelFactory getGlobalinfluenzamodelFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl <em>Global Influenza Model</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl

+		 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalinfluenzamodelPackageImpl#getGlobalInfluenzaModel()

+		 * @generated

+		 */

+		EClass GLOBAL_INFLUENZA_MODEL = eINSTANCE.getGlobalInfluenzaModel();

+

+		/**

+		 * The meta object literal for the '<em><b>Latitude Sigmoid Width</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH = eINSTANCE.getGlobalInfluenzaModel_LatitudeSigmoidWidth();

+

+		/**

+		 * The meta object literal for the '<em><b>Seasonal Modulation Exponent</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT = eINSTANCE.getGlobalInfluenzaModel_SeasonalModulationExponent();

+

+		/**

+		 * The meta object literal for the '<em><b>Modulation Period</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD = eINSTANCE.getGlobalInfluenzaModel_ModulationPeriod();

+

+		/**

+		 * The meta object literal for the '<em><b>Modulation Phase Shift</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT = eINSTANCE.getGlobalInfluenzaModel_ModulationPhaseShift();

+

+		/**

+		 * The meta object literal for the '<em><b>Seasonal Modulation Floor</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR = eINSTANCE.getGlobalInfluenzaModel_SeasonalModulationFloor();

+

+	}

+

+} //GlobalinfluenzamodelPackage

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalInfluenzaModelImpl.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalInfluenzaModelImpl.java
new file mode 100644
index 0000000..58bad2f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalInfluenzaModelImpl.java
@@ -0,0 +1,621 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.graph.Node;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.data.geography.centers.GeographicCenters;

+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;

+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapter;

+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;

+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;

+import org.eclipse.stem.diseasemodels.Activator;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage;

+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;

+import org.eclipse.stem.diseasemodels.standard.SILabelValue;

+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;

+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;

+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Global Influenza Model</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl#getLatitudeSigmoidWidth <em>Latitude Sigmoid Width</em>}</li>

+ *   <li>{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl#getSeasonalModulationExponent <em>Seasonal Modulation Exponent</em>}</li>

+ *   <li>{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl#getModulationPeriod <em>Modulation Period</em>}</li>

+ *   <li>{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl#getModulationPhaseShift <em>Modulation Phase Shift</em>}</li>

+ *   <li>{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl.GlobalInfluenzaModelImpl#getSeasonalModulationFloor <em>Seasonal Modulation Floor</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class GlobalInfluenzaModelImpl extends StochasticSIRDiseaseModelImpl implements GlobalInfluenzaModel {

+

+	private static final double MILLIS_PER_DAY = 1000.0*60.0*60.0*24.0;

+	

+	/**

+	 * The default value of the '{@link #getLatitudeSigmoidWidth() <em>Latitude Sigmoid Width</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getLatitudeSigmoidWidth()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double LATITUDE_SIGMOID_WIDTH_EDEFAULT = 4.5;

+	

+	/**

+	 * the equator

+	 */

+	private static final double EQUATOR_LATITUDE = 0.0;

+	

+

+	/**

+	 * The cached value of the '{@link #getLatitudeSigmoidWidth() <em>Latitude Sigmoid Width</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getLatitudeSigmoidWidth()

+	 * @generated

+	 * @ordered

+	 */

+	protected double latitudeSigmoidWidth = LATITUDE_SIGMOID_WIDTH_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getSeasonalModulationExponent()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double SEASONAL_MODULATION_EXPONENT_EDEFAULT = 2.0;

+

+	/**

+	 * The cached value of the '{@link #getSeasonalModulationExponent() <em>Seasonal Modulation Exponent</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getSeasonalModulationExponent()

+	 * @generated

+	 * @ordered

+	 */

+	protected double seasonalModulationExponent = SEASONAL_MODULATION_EXPONENT_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getModulationPeriod()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double MODULATION_PERIOD_EDEFAULT = 365.256363051;

+

+	/**

+	 * The cached value of the '{@link #getModulationPeriod() <em>Modulation Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getModulationPeriod()

+	 * @generated

+	 * @ordered

+	 */

+	protected double modulationPeriod = MODULATION_PERIOD_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getModulationPhaseShift()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double MODULATION_PHASE_SHIFT_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getModulationPhaseShift() <em>Modulation Phase Shift</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getModulationPhaseShift()

+	 * @generated

+	 * @ordered

+	 */

+	protected double modulationPhaseShift = MODULATION_PHASE_SHIFT_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getSeasonalModulationFloor()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double SEASONAL_MODULATION_FLOOR_EDEFAULT = 0.6;

+

+	/**

+	 * The cached value of the '{@link #getSeasonalModulationFloor() <em>Seasonal Modulation Floor</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getSeasonalModulationFloor()

+	 * @generated

+	 * @ordered

+	 */

+	protected double seasonalModulationFloor = SEASONAL_MODULATION_FLOOR_EDEFAULT;

+	

+	public static long firstDay = -1;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public GlobalInfluenzaModelImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL;

+	}

+

+	

+

+	/**

+	 * To model influenza on a global scale, this method takes into account

+	 * the modulation of the transmission coefficient of the virus as a function of Latitude.

+	 * Near the tropics the transmission coefficient is almost constant (and at a value

+	 * called the SEASONAL_MODULATION_FLOOR.

+	 * As one moved in latitude away from the tropics the modulation (and MAXIMUM) amplitude of the 

+	 * transmission coefficient increases. We model this seasonal increase 	 

+	 * We model this with a sigmoidal function that goes from zero to one

+	 * with center at the tropic of cancer, and the tropic of Capricorn.

+	 * The default width factor is 4.5 which gives the sigmoid a slope proportional to the 

+	 * observed variation in seasonal influenza epidemics as a function of latitude in Brazil.

+	 * See: http://aje.oxfordjournals.org/cgi/content/full/165/12/1434

+	 * 

+	 * As our sigmoid we use the basic logistic function 1/1+exp(-x) 

+	 * so

+	 * Sigmoid Function (lat)  = SeasonalModulationFloor/(1.0 + exp((TROPIC_OF_CANCER_LATITUDE - abs(Lat))./4.5) );

+	 * This is near zero near the equator and goes to SeasonalModulationFloor above and below 

+	 * the tropics.

+	 * 

+	 * 

+	 * @param time

+	 * 			  current time

+	 * @param currentState

+	 *            the current state of the population

+	 * @param diseaseLabel

+	 *            the disease label for which the state transitions are being

+	 *            computed.

+	 * @param timeDelta

+	 *            the time period (milliseconds) over which the population

+	 *            members transition to new states          

+	 * @return a disease state label value that contains the number of

+	 *         delta changes in each disease state

+	 * 

+	 * Users can modify the method below to create their own model.

+	 * 

+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,

+	 *      StandardDiseaseModelLabel, long)

+	 */

+	@Override

+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(

+			final STEMTime time,

+			final StandardDiseaseModelLabelValue currentState,

+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {

+			final SIRLabelValue currentSIR = (SIRLabelValue) currentState;

+		

+		long currentMillis = time.getTime().getTime();

+		double seasonalModulationExponent = getSeasonalModulationExponent();

+		double seasonalModulationFloor = getSeasonalModulationFloor();

+		double modulationPeriod = getModulationPeriod();

+		final double absolutePhase = getModulationPhaseShift();	

+		

+		

+		/**

+		 * the latitude of this regions

+		 */

+		double latitude = EQUATOR_LATITUDE;

+

+		

+		/**

+		 * the coordinates of the center of this regions

+		 */

+		double[] lat_long = null;

+		

+		if (firstDay == -1) {

+			firstDay = currentMillis;

+		}

+		

+		Node node = diseaseLabel.getNode();

+		

+		if(node instanceof RegionImpl) {

+			String nodeURI = node.getURI().lastSegment();

+			lat_long = GeographicCenters.getCenter(nodeURI);

+			// still null? Compute it

+			if(lat_long==null) {

+				// Get the lat/long of the center of the node

+				final LatLongProviderAdapter latLongProviderB = (LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE

+						.adapt(node, LatLongProvider.class);

+				latLongProviderB.setTarget(node);

+				lat_long = latLongProviderB.getCenter();

+			}

+			if (lat_long == null) {

+				Activator.logError("Cannot find latitude for "+ nodeURI, null);

+			}

+		} else {

+			lat_long = new double[2];

+			lat_long[0] = EQUATOR_LATITUDE;

+			lat_long[1] = EQUATOR_LATITUDE; // not used. sets it to 0,0

+		}

+

+

+		// get the latitude

+		if(lat_long != null) {

+			latitude = lat_long[0] ;

+		} 

+		

+		/////////////////////////////////////////////////////

+		// corrects phase for northern vs southern hemisphere

+		double phase = absolutePhase;

+		if(latitude<0.0) phase += Math.PI/2.0;

+		/////////////////////////////////////////////////////

+		

+		

+		//////////////////////////////////////////

+		// now compute the transmission rate

+		// with the seasonal forcing function

+		// adjusted by latitude

+		double latFactor  = seasonalModulationFloor/(1.0 + Math.exp((TROPIC_OF_CANCER_LATITUDE - Math.abs(latitude))/latitudeSigmoidWidth) );

+		latFactor *= Math.pow(Math.abs(Math.cos(phase + Math.PI*currentMillis/(modulationPeriod*MILLIS_PER_DAY))), seasonalModulationExponent);

+		double modulation = ( (1.0-(seasonalModulationFloor/2.0)) + (latFactor/2.0) );

+		// This is beta

+		double transmissionRate = modulation * (getAdjustedTransmissionRate(timeDelta));

+		/////////////////////////////////////////

+		

+		//LogWriter.write(latitude +","+ Math.round((currentMillis - firstDay)/86400000) +"," + transmissionRate);

+		

+		if(!this.isFrequencyDependent())  transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);

+		

+		// The effective Infectious population  is a dimensionles number normalize by total

+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.

+		// This includes a correction to the current

+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)

+		// between regions. Note that this is no the "arrivals" and "departures" which are

+		// a different process.

+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());

+

+		/*

+		 * Compute state transitions

+		 * 

+		 * Regarding computing the number of transitions from Susceptible to Exposed:

+		 * In a linear model the "effective" number of infectious people is just

+		 * the number of infectious people In a nonlinear model we have a

+		 * nonLinearity exponent that is > 1 this models the effect of immune

+		 * system saturation when Susceptible people are exposed to large

+		 * numbers of infectious people. then the "effective" number of

+		 * infectious people is I^nonLinearity exponent to allow for either

+		 * linear or nonlinear models we always calculate I^nonLinearity

+		 * exponent and allow nonLinearity exponent >= 1.0

+		 */

+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)

+		* currentSIR.getI();

+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)

+		* currentSIR.getR();

+		// Need to checked what do do here. If non linear coefficient is not 1 and

+		// the effective infectious is negative (which is possible), what do do? 

+		// Let's fall back on the linear method for now.

+		double numberOfSusceptibleToInfected = 0.0;

+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)

+			numberOfSusceptibleToInfected = transmissionRate

+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());

+		else

+			numberOfSusceptibleToInfected = transmissionRate

+			* currentSIR.getS()* effectiveInfectious;

+		

+		// Determine delta S

+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;

+			// Determine delta I

+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;

+		// Determine delta R

+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;

+		

+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;

+		ret.setS(deltaS);

+		ret.setI(deltaI);

+		ret.setIncidence(numberOfInfectedToRecovered);

+		ret.setR(deltaR);

+		ret.setDiseaseDeaths(0);

+		return ret;

+	} // computeTransitions

+

+	

+	

+	/**

+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 

+	 * the disease state transition values by multiplying

+	 * the additions by a random variable r ~ (1+/-x) with x small.

+	 * The requirements that no more individuals can be moved from a state than are

+	 * already in that state is still enforced.

+	 * 

+	 */

+	

+	public void doModelSpecificAdjustments(

+			final StandardDiseaseModelLabelValue state) {

+			final SILabelValue currentSI = (SILabelValue) state;

+			double incidence = state.getIncidence();

+			double newIncidence = incidence*computeNoise();

+			double diff = newIncidence - incidence;

+			

+			double newI = currentSI.getI() + diff;

+			double newS = currentSI.getS() - diff;

+			if(newI < 0.0) {

+				double scale = (-newI) / currentSI.getI();

+				diff = diff * scale;

+				newI = currentSI.getI() + diff; // 0

+				newS = currentSI.getS() - diff;

+			}

+			if(newS < 0.0) {

+				double scale = (-newS) / currentSI.getS();

+				diff = diff * scale;

+				newI = currentSI.getI() + diff;

+				newS = currentSI.getS() - diff; // 0

+			}

+			newIncidence = incidence + diff;

+			currentSI.setS(newS);

+			currentSI.setI(newI);

+			currentSI.setIncidence(newIncidence);

+			return;

+	} // doModelSpecificAdjustments

+	

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getLatitudeSigmoidWidth() {

+		return latitudeSigmoidWidth;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setLatitudeSigmoidWidth(double newLatitudeSigmoidWidth) {

+		double oldLatitudeSigmoidWidth = latitudeSigmoidWidth;

+		latitudeSigmoidWidth = newLatitudeSigmoidWidth;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH, oldLatitudeSigmoidWidth, latitudeSigmoidWidth));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getSeasonalModulationExponent() {

+		return seasonalModulationExponent;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSeasonalModulationExponent(double newSeasonalModulationExponent) {

+		double oldSeasonalModulationExponent = seasonalModulationExponent;

+		seasonalModulationExponent = newSeasonalModulationExponent;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT, oldSeasonalModulationExponent, seasonalModulationExponent));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getModulationPeriod() {

+		return modulationPeriod;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setModulationPeriod(double newModulationPeriod) {

+		double oldModulationPeriod = modulationPeriod;

+		modulationPeriod = newModulationPeriod;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD, oldModulationPeriod, modulationPeriod));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getModulationPhaseShift() {

+		return modulationPhaseShift;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setModulationPhaseShift(double newModulationPhaseShift) {

+		double oldModulationPhaseShift = modulationPhaseShift;

+		modulationPhaseShift = newModulationPhaseShift;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT, oldModulationPhaseShift, modulationPhaseShift));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getSeasonalModulationFloor() {

+		return seasonalModulationFloor;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSeasonalModulationFloor(double newSeasonalModulationFloor) {

+		double oldSeasonalModulationFloor = seasonalModulationFloor;

+		seasonalModulationFloor = newSeasonalModulationFloor;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR, oldSeasonalModulationFloor, seasonalModulationFloor));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:

+				return new Double(getLatitudeSigmoidWidth());

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:

+				return new Double(getSeasonalModulationExponent());

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:

+				return new Double(getModulationPeriod());

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:

+				return new Double(getModulationPhaseShift());

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:

+				return new Double(getSeasonalModulationFloor());

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:

+				setLatitudeSigmoidWidth(((Double)newValue).doubleValue());

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:

+				setSeasonalModulationExponent(((Double)newValue).doubleValue());

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:

+				setModulationPeriod(((Double)newValue).doubleValue());

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:

+				setModulationPhaseShift(((Double)newValue).doubleValue());

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:

+				setSeasonalModulationFloor(((Double)newValue).doubleValue());

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:

+				setLatitudeSigmoidWidth(LATITUDE_SIGMOID_WIDTH_EDEFAULT);

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:

+				setSeasonalModulationExponent(SEASONAL_MODULATION_EXPONENT_EDEFAULT);

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:

+				setModulationPeriod(MODULATION_PERIOD_EDEFAULT);

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:

+				setModulationPhaseShift(MODULATION_PHASE_SHIFT_EDEFAULT);

+				return;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:

+				setSeasonalModulationFloor(SEASONAL_MODULATION_FLOOR_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:

+				return latitudeSigmoidWidth != LATITUDE_SIGMOID_WIDTH_EDEFAULT;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:

+				return seasonalModulationExponent != SEASONAL_MODULATION_EXPONENT_EDEFAULT;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:

+				return modulationPeriod != MODULATION_PERIOD_EDEFAULT;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:

+				return modulationPhaseShift != MODULATION_PHASE_SHIFT_EDEFAULT;

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:

+				return seasonalModulationFloor != SEASONAL_MODULATION_FLOOR_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (latitudeSigmoidWidth: ");

+		result.append(latitudeSigmoidWidth);

+		result.append(", seasonalModulationExponent: ");

+		result.append(seasonalModulationExponent);

+		result.append(", modulationPeriod: ");

+		result.append(modulationPeriod);

+		result.append(", modulationPhaseShift: ");

+		result.append(modulationPhaseShift);

+		result.append(", seasonalModulationFloor: ");

+		result.append(seasonalModulationFloor);

+		result.append(')');

+		return result.toString();

+	}

+

+} //GlobalInfluenzaModelImpl

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelFactoryImpl.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelFactoryImpl.java
new file mode 100644
index 0000000..a36faa6
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelFactoryImpl extends EFactoryImpl implements GlobalinfluenzamodelFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static GlobalinfluenzamodelFactory init() {

+		try {

+			GlobalinfluenzamodelFactory theGlobalinfluenzamodelFactory = (GlobalinfluenzamodelFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/globalinfluenzamodel.ecore"); 

+			if (theGlobalinfluenzamodelFactory != null) {

+				return theGlobalinfluenzamodelFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new GlobalinfluenzamodelFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL: return createGlobalInfluenzaModel();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalInfluenzaModel createGlobalInfluenzaModel() {

+		GlobalInfluenzaModelImpl globalInfluenzaModel = new GlobalInfluenzaModelImpl();

+		return globalInfluenzaModel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelPackage getGlobalinfluenzamodelPackage() {

+		return (GlobalinfluenzamodelPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static GlobalinfluenzamodelPackage getPackage() {

+		return GlobalinfluenzamodelPackage.eINSTANCE;

+	}

+

+} //GlobalinfluenzamodelFactoryImpl

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelPackageImpl.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelPackageImpl.java
new file mode 100644
index 0000000..f6605ec
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/impl/GlobalinfluenzamodelPackageImpl.java
@@ -0,0 +1,246 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelFactory;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage;

+

+import org.eclipse.stem.diseasemodels.standard.StandardPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelPackageImpl extends EPackageImpl implements GlobalinfluenzamodelPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass globalInfluenzaModelEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private GlobalinfluenzamodelPackageImpl() {

+		super(eNS_URI, GlobalinfluenzamodelFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this

+	 * model, and for any others upon which it depends.  Simple

+	 * dependencies are satisfied by calling this method on all

+	 * dependent packages before doing anything else.  This method drives

+	 * initialization for interdependent packages directly, in parallel

+	 * with this package, itself.

+	 * <p>Of this package and its interdependencies, all packages which

+	 * have not yet been registered by their URI values are first created

+	 * and registered.  The packages are then initialized in two steps:

+	 * meta-model objects for all of the packages are created before any

+	 * are initialized, since one package's meta-model objects may refer to

+	 * those of another.

+	 * <p>Invocation of this method will not affect any packages that have

+	 * already been initialized.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static GlobalinfluenzamodelPackage init() {

+		if (isInited) return (GlobalinfluenzamodelPackage)EPackage.Registry.INSTANCE.getEPackage(GlobalinfluenzamodelPackage.eNS_URI);

+

+		// Obtain or create and register package

+		GlobalinfluenzamodelPackageImpl theGlobalinfluenzamodelPackage = (GlobalinfluenzamodelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof GlobalinfluenzamodelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new GlobalinfluenzamodelPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		StandardPackage.eINSTANCE.eClass();

+

+		// Create package meta-data objects

+		theGlobalinfluenzamodelPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theGlobalinfluenzamodelPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theGlobalinfluenzamodelPackage.freeze();

+

+		return theGlobalinfluenzamodelPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getGlobalInfluenzaModel() {

+		return globalInfluenzaModelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getGlobalInfluenzaModel_LatitudeSigmoidWidth() {

+		return (EAttribute)globalInfluenzaModelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getGlobalInfluenzaModel_SeasonalModulationExponent() {

+		return (EAttribute)globalInfluenzaModelEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getGlobalInfluenzaModel_ModulationPeriod() {

+		return (EAttribute)globalInfluenzaModelEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getGlobalInfluenzaModel_ModulationPhaseShift() {

+		return (EAttribute)globalInfluenzaModelEClass.getEStructuralFeatures().get(3);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getGlobalInfluenzaModel_SeasonalModulationFloor() {

+		return (EAttribute)globalInfluenzaModelEClass.getEStructuralFeatures().get(4);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelFactory getGlobalinfluenzamodelFactory() {

+		return (GlobalinfluenzamodelFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		globalInfluenzaModelEClass = createEClass(GLOBAL_INFLUENZA_MODEL);

+		createEAttribute(globalInfluenzaModelEClass, GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH);

+		createEAttribute(globalInfluenzaModelEClass, GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT);

+		createEAttribute(globalInfluenzaModelEClass, GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD);

+		createEAttribute(globalInfluenzaModelEClass, GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT);

+		createEAttribute(globalInfluenzaModelEClass, GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		StandardPackage theStandardPackage = (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		globalInfluenzaModelEClass.getESuperTypes().add(theStandardPackage.getStochasticSIRDiseaseModel());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(globalInfluenzaModelEClass, GlobalInfluenzaModel.class, "GlobalInfluenzaModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getGlobalInfluenzaModel_LatitudeSigmoidWidth(), ecorePackage.getEDouble(), "latitudeSigmoidWidth", "4.50", 0, 1, GlobalInfluenzaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getGlobalInfluenzaModel_SeasonalModulationExponent(), ecorePackage.getEDouble(), "seasonalModulationExponent", "2.0", 0, 1, GlobalInfluenzaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getGlobalInfluenzaModel_ModulationPeriod(), ecorePackage.getEDouble(), "modulationPeriod", "365.256363051", 0, 1, GlobalInfluenzaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getGlobalInfluenzaModel_ModulationPhaseShift(), ecorePackage.getEDouble(), "modulationPhaseShift", "0.0", 0, 1, GlobalInfluenzaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getGlobalInfluenzaModel_SeasonalModulationFloor(), ecorePackage.getEDouble(), "seasonalModulationFloor", "0.6", 0, 1, GlobalInfluenzaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //GlobalinfluenzamodelPackageImpl

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalInfluenzaModelItemProvider.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalInfluenzaModelItemProvider.java
new file mode 100644
index 0000000..8d7bd7b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalInfluenzaModelItemProvider.java
@@ -0,0 +1,263 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage;

+

+import org.eclipse.stem.diseasemodels.standard.provider.StochasticSIRDiseaseModelItemProvider;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalInfluenzaModelItemProvider

+	extends StochasticSIRDiseaseModelItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalInfluenzaModelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addLatitudeSigmoidWidthPropertyDescriptor(object);

+			addSeasonalModulationExponentPropertyDescriptor(object);

+			addModulationPeriodPropertyDescriptor(object);

+			addModulationPhaseShiftPropertyDescriptor(object);

+			addSeasonalModulationFloorPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Latitude Sigmoid Width feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addLatitudeSigmoidWidthPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_GlobalInfluenzaModel_latitudeSigmoidWidth_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_GlobalInfluenzaModel_latitudeSigmoidWidth_feature", "_UI_GlobalInfluenzaModel_type"),

+				 GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Seasonal Modulation Exponent feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addSeasonalModulationExponentPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_GlobalInfluenzaModel_seasonalModulationExponent_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_GlobalInfluenzaModel_seasonalModulationExponent_feature", "_UI_GlobalInfluenzaModel_type"),

+				 GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Modulation Period feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addModulationPeriodPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_GlobalInfluenzaModel_modulationPeriod_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_GlobalInfluenzaModel_modulationPeriod_feature", "_UI_GlobalInfluenzaModel_type"),

+				 GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Modulation Phase Shift feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addModulationPhaseShiftPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_GlobalInfluenzaModel_modulationPhaseShift_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_GlobalInfluenzaModel_modulationPhaseShift_feature", "_UI_GlobalInfluenzaModel_type"),

+				 GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Seasonal Modulation Floor feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addSeasonalModulationFloorPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_GlobalInfluenzaModel_seasonalModulationFloor_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_GlobalInfluenzaModel_seasonalModulationFloor_feature", "_UI_GlobalInfluenzaModel_type"),

+				 GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns GlobalInfluenzaModel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/GlobalInfluenzaModel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		String label = ((GlobalInfluenzaModel)object).getDiseaseName();

+		return label == null || label.length() == 0 ?

+			getString("_UI_GlobalInfluenzaModel_type") :

+			getString("_UI_GlobalInfluenzaModel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(GlobalInfluenzaModel.class)) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return GlobalinfluenzamodelEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelEditPlugin.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelEditPlugin.java
new file mode 100644
index 0000000..b59b757
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelEditPlugin.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;

+

+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;

+

+/**

+ * This is the central singleton for the Globalinfluenzamodel edit plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public final class GlobalinfluenzamodelEditPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final GlobalinfluenzamodelEditPlugin INSTANCE = new GlobalinfluenzamodelEditPlugin();

+

+	/**

+	 * 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 GlobalinfluenzamodelEditPlugin() {

+		super

+		  (new ResourceLocator [] {

+		     DiseasemodelsEditPlugin.INSTANCE,

+		     CoreEditPlugin.INSTANCE,

+		     EcoreEditPlugin.INSTANCE,

+		     DefinitionsEditPlugin.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/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelItemProviderAdapterFactory.java
new file mode 100644
index 0000000..598f5da
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/provider/GlobalinfluenzamodelItemProviderAdapterFactory.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.util.GlobalinfluenzamodelAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelItemProviderAdapterFactory extends GlobalinfluenzamodelAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalInfluenzaModelItemProvider globalInfluenzaModelItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createGlobalInfluenzaModelAdapter() {

+		if (globalInfluenzaModelItemProvider == null) {

+			globalInfluenzaModelItemProvider = new GlobalInfluenzaModelItemProvider(this);

+		}

+

+		return globalInfluenzaModelItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (globalInfluenzaModelItemProvider != null) globalInfluenzaModelItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelAdapterFactory.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelAdapterFactory.java
new file mode 100644
index 0000000..04ae2d9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelAdapterFactory.java
@@ -0,0 +1,398 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+import org.eclipse.stem.core.common.SanityChecker;

+

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.NodeDecorator;

+

+import org.eclipse.stem.core.modifier.Modifiable;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.*;

+

+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.SI;

+import org.eclipse.stem.diseasemodels.standard.SIR;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage

+ * @generated

+ */

+public class GlobalinfluenzamodelAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static GlobalinfluenzamodelPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = GlobalinfluenzamodelPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalinfluenzamodelSwitch<Adapter> modelSwitch =

+		new GlobalinfluenzamodelSwitch<Adapter>() {

+			@Override

+			public Adapter caseGlobalInfluenzaModel(GlobalInfluenzaModel object) {

+				return createGlobalInfluenzaModelAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter caseDecorator(Decorator object) {

+				return createDecoratorAdapter();

+			}

+			@Override

+			public Adapter caseNodeDecorator(NodeDecorator object) {

+				return createNodeDecoratorAdapter();

+			}

+			@Override

+			public Adapter caseSanityChecker(SanityChecker object) {

+				return createSanityCheckerAdapter();

+			}

+			@Override

+			public Adapter caseModifiable(Modifiable object) {

+				return createModifiableAdapter();

+			}

+			@Override

+			public Adapter caseDiseaseModel(DiseaseModel object) {

+				return createDiseaseModelAdapter();

+			}

+			@Override

+			public Adapter caseIntegrationDecorator(IntegrationDecorator object) {

+				return createIntegrationDecoratorAdapter();

+			}

+			@Override

+			public Adapter caseStandardDiseaseModel(StandardDiseaseModel object) {

+				return createStandardDiseaseModelAdapter();

+			}

+			@Override

+			public Adapter caseSI(SI object) {

+				return createSIAdapter();

+			}

+			@Override

+			public Adapter caseSIR(SIR object) {

+				return createSIRAdapter();

+			}

+			@Override

+			public Adapter caseStochasticDiseaseModel(StochasticDiseaseModel object) {

+				return createStochasticDiseaseModelAdapter();

+			}

+			@Override

+			public Adapter caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {

+				return createStandardStochasticDiseaseModelAdapter();

+			}

+			@Override

+			public Adapter caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {

+				return createStochasticSIRDiseaseModelAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel <em>Global Influenza Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel

+	 * @generated

+	 */

+	public Adapter createGlobalInfluenzaModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.Decorator

+	 * @generated

+	 */

+	public Adapter createDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.NodeDecorator

+	 * @generated

+	 */

+	public Adapter createNodeDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.SanityChecker

+	 * @generated

+	 */

+	public Adapter createSanityCheckerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.modifier.Modifiable

+	 * @generated

+	 */

+	public Adapter createModifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel

+	 * @generated

+	 */

+	public Adapter createDiseaseModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.IntegrationDecorator

+	 * @generated

+	 */

+	public Adapter createIntegrationDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel

+	 * @generated

+	 */

+	public Adapter createStandardDiseaseModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.SI

+	 * @generated

+	 */

+	public Adapter createSIAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.SIR

+	 * @generated

+	 */

+	public Adapter createSIRAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel

+	 * @generated

+	 */

+	public Adapter createStochasticDiseaseModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel

+	 * @generated

+	 */

+	public Adapter createStandardStochasticDiseaseModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel <em>Stochastic SIR Disease Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel

+	 * @generated

+	 */

+	public Adapter createStochasticSIRDiseaseModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //GlobalinfluenzamodelAdapterFactory

diff --git a/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelSwitch.java b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelSwitch.java
new file mode 100644
index 0000000..aa647f5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/util/GlobalinfluenzamodelSwitch.java
@@ -0,0 +1,376 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+import org.eclipse.stem.core.common.SanityChecker;

+

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.NodeDecorator;

+

+import org.eclipse.stem.core.modifier.Modifiable;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.*;

+

+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.SI;

+import org.eclipse.stem.diseasemodels.standard.SIR;

+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;

+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage

+ * @generated

+ */

+public class GlobalinfluenzamodelSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static GlobalinfluenzamodelPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelSwitch() {

+		if (modelPackage == null) {

+			modelPackage = GlobalinfluenzamodelPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL: {

+				GlobalInfluenzaModel globalInfluenzaModel = (GlobalInfluenzaModel)theEObject;

+				T1 result = caseGlobalInfluenzaModel(globalInfluenzaModel);

+				if (result == null) result = caseStochasticSIRDiseaseModel(globalInfluenzaModel);

+				if (result == null) result = caseSIR(globalInfluenzaModel);

+				if (result == null) result = caseStandardStochasticDiseaseModel(globalInfluenzaModel);

+				if (result == null) result = caseSI(globalInfluenzaModel);

+				if (result == null) result = caseStochasticDiseaseModel(globalInfluenzaModel);

+				if (result == null) result = caseStandardDiseaseModel(globalInfluenzaModel);

+				if (result == null) result = caseDiseaseModel(globalInfluenzaModel);

+				if (result == null) result = caseIntegrationDecorator(globalInfluenzaModel);

+				if (result == null) result = caseNodeDecorator(globalInfluenzaModel);

+				if (result == null) result = caseSanityChecker(globalInfluenzaModel);

+				if (result == null) result = caseModifiable(globalInfluenzaModel);

+				if (result == null) result = caseDecorator(globalInfluenzaModel);

+				if (result == null) result = caseIdentifiable(globalInfluenzaModel);

+				if (result == null) result = caseComparable(globalInfluenzaModel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Global Influenza Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Global Influenza Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseGlobalInfluenzaModel(GlobalInfluenzaModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDecorator(Decorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseNodeDecorator(NodeDecorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSanityChecker(SanityChecker object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseModifiable(Modifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDiseaseModel(DiseaseModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIntegrationDecorator(IntegrationDecorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStandardDiseaseModel(StandardDiseaseModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>SI</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>SI</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSI(SI object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>SIR</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>SIR</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSIR(SIR object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStochasticDiseaseModel(StochasticDiseaseModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //GlobalinfluenzamodelSwitch

diff --git a/org.eclipse.stem.diseasemodels/.classpath b/org.eclipse.stem.diseasemodels/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseasemodels/.fbprefs b/org.eclipse.stem.diseasemodels/.fbprefs
new file mode 100644
index 0000000..a7d3726
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/.fbprefs
@@ -0,0 +1,129 @@
+#FindBugs User Preferences
+#Fri Mar 16 15:22:06 EDT 2007
+default_directory=C\:\\Program Files\\eclipse\\eclipse3.2.2
+detectorBCPMethodReturnCheck=BCPMethodReturnCheck|false
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorCalledMethods=CalledMethods|true
+detectorCheckCalls=CheckCalls|false
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqStringTest=EqStringTest|false
+detectorFindBadCast=FindBadCast|false
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadEqualsImplementation=FindBadEqualsImplementation|false
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindBugsSummaryStats=FindBugsSummaryStats|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindFloatMath=FindFloatMath|false
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|false
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|true
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorLockedFields=LockedFields|false
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMethods=Methods|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNoteAnnotationRetention=NoteAnnotationRetention|true
+detectorNoteCheckReturnValue=NoteCheckReturnValue|true
+detectorNoteCheckReturnValueAnnotations=NoteCheckReturnValueAnnotations|true
+detectorNoteJCIPAnnotation=NoteJCIPAnnotation|true
+detectorNoteNonNullAnnotations=NoteNonNullAnnotations|true
+detectorNoteSuppressedWarnings=NoteSuppressedWarnings|true
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
+detectorNumberConstructor=NumberConstructor|false
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorResolveAllReferences=ResolveAllReferences|false
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorTestASM=TestASM|false
+detectorTestingGround=TestingGround|false
+detectorTrainFieldStoreTypes=TrainFieldStoreTypes|true
+detectorTrainNonNullAnnotations=TrainNonNullAnnotations|true
+detectorTrainUnconditionalDerefParams=TrainUnconditionalDerefParams|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUseObjectEquals=UseObjectEquals|false
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+filter_settings=Medium|I18N,MT_CORRECTNESS,MALICIOUS_CODE,BAD_PRACTICE,STYLE,CORRECTNESS,PERFORMANCE|false
+filter_settings_neg=|
diff --git a/org.eclipse.stem.diseasemodels/.project b/org.eclipse.stem.diseasemodels/.project
new file mode 100644
index 0000000..a89beb0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseasemodels</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f403ab7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:39:47 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..0775e87
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Jul 25 12:27:00 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.diseasemodels/META-INF/MANIFEST.MF b/org.eclipse.stem.diseasemodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8706aca
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.diseasemodels.standard,
+ org.eclipse.stem.diseasemodels.standard.impl,
+ org.eclipse.stem.diseasemodels.standard.provider,
+ org.eclipse.stem.diseasemodels.standard.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.stem.transport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.diseasemodels/build.properties b/org.eclipse.stem.diseasemodels/build.properties
new file mode 100644
index 0000000..6ff0ced
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/build.properties
@@ -0,0 +1,16 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               epl-v10.html,\
+               notice.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.diseasemodels/epl-v10.html b/org.eclipse.stem.diseasemodels/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_AggregatingDiseaseModelState.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_AggregatingDiseaseModelState.gif
new file mode 100644
index 0000000..7cfafa0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_AggregatingDiseaseModelState.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_SIDiseaseModelState.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_SIDiseaseModelState.gif
new file mode 100644
index 0000000..48f8111
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDiseaseModelLabel_diseaseModelState_SIDiseaseModelState.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif
new file mode 100644
index 0000000..ae4714f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_AreaLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif
new file mode 100644
index 0000000..511800c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_CommonBorderRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..e3dc34a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif
new file mode 100644
index 0000000..d9e27ce
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_PopulationLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..efad8ec
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_RelativePhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SEIRLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SEIRLabelValue.gif
new file mode 100644
index 0000000..85a51d1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SEIRLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SILabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SILabelValue.gif
new file mode 100644
index 0000000..ae7259c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SILabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SIRLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SIRLabelValue.gif
new file mode 100644
index 0000000..991b86a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_SIRLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..48f8111
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateDynamicLabel_nextValue_TransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
new file mode 100644
index 0000000..224dcf0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif
new file mode 100644
index 0000000..ae4714f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_AreaLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif
new file mode 100644
index 0000000..511800c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_CommonBorderRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..e3dc34a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif
new file mode 100644
index 0000000..d9e27ce
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_PopulationLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif
new file mode 100644
index 0000000..efad8ec
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_RelativePhysicalRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SEIRLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SEIRLabelValue.gif
new file mode 100644
index 0000000..85a51d1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SEIRLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SILabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SILabelValue.gif
new file mode 100644
index 0000000..ae7259c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SILabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SIRLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SIRLabelValue.gif
new file mode 100644
index 0000000..991b86a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_SIRLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif
new file mode 100644
index 0000000..48f8111
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/ctool16/CreateLabel_currentValue_TransportRelationshipLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/custom16/disease.gif b/org.eclipse.stem.diseasemodels/icons/full/custom16/disease.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/custom16/disease.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/custom16/infector.gif b/org.eclipse.stem.diseasemodels/icons/full/custom16/infector.gif
new file mode 100644
index 0000000..91bb686
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/custom16/infector.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/custom16/inoculator.gif b/org.eclipse.stem.diseasemodels/icons/full/custom16/inoculator.gif
new file mode 100644
index 0000000..f37a362
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/custom16/inoculator.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSEIRDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSEIRDiseaseModel.gif
new file mode 100644
index 0000000..db7414e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSEIRDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIDiseaseModel.gif
new file mode 100644
index 0000000..45731fe
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIRDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIRDiseaseModel.gif
new file mode 100644
index 0000000..c00aedf
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/NewDeterministicSIRDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/PoissonSIDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/PoissonSIDiseaseModel.gif
new file mode 100644
index 0000000..1e5345f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/PoissonSIDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/SIRInoculator.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/SIRInoculator.gif
new file mode 100644
index 0000000..94c953e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/SIRInoculator.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonDiseaseModel.gif
new file mode 100644
index 0000000..7b7c428
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSEIRDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSEIRDiseaseModel.gif
new file mode 100644
index 0000000..b1f8afa
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSEIRDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIDiseaseModel.gif
new file mode 100644
index 0000000..e4bc22d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIRDiseaseModel.gif b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIRDiseaseModel.gif
new file mode 100644
index 0000000..db7414e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/icons/full/obj16/StochasticPoissonSIRDiseaseModel.gif
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel b/org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel
new file mode 100644
index 0000000..e0aa0c3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/model/diseasemodels.genmodel
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.diseasemodels/src"

+    editDirectory="/org.eclipse.stem.diseasemodels/src" editorDirectory="/org.eclipse.stem.ui.diseasemodels/src"

+    modelPluginID="org.eclipse.stem.diseasemodels" modelName="Diseasemodels" nonNLSMarkers="true"

+    richClientPlatform="true" testsDirectory="/org.eclipse.stem.tests.diseasemodels/src"

+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels ../../org.eclipse.stem.core/model/core.genmodel#//solver">

+  <foreignModel>@model</foreignModel>

+  <genPackages prefix="Standard" basePackage="org.eclipse.stem.diseasemodels" disposableProviderFactory="true"

+      generateExampleClass="false" ecorePackage="standard.ecore#/">

+    <genDataTypes ecoreDataType="standard.ecore#//URI"/>

+    <genDataTypes ecoreDataType="standard.ecore#//EList"/>

+    <genDataTypes ecoreDataType="standard.ecore#//Random"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//DeterministicSEIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//DeterministicSIDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//DeterministicSIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//DiseaseModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/backgroundMortalityRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/populationIdentifier"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/timePeriod"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/diseaseName"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/stepSize"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/currentX"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/relativeTolerance"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/finiteDifference"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/frequencyDependent"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModel/backgroundBirthRate"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/getAdjustedBackgroundMortalityRate">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModel/getAdjustedBackgroundMortalityRate/timeDelta"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/createDiseaseModelLabel"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/createDiseaseModelLabelValue"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/createDiseaseModelState"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/initializeDiseaseState">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModel/initializeDiseaseState/diseaseModelState"/>

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModel/initializeDiseaseState/diseaseModelLabel"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/initializeDiseaseState.1">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModel/initializeDiseaseState.1/diseaseModelLabel"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/createInfector"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModel/getAdjustedBackgroundBirthRate">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModel/getAdjustedBackgroundBirthRate/timeDelta"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//DiseaseModelLabel">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/populationLabel"/>

+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/diseaseModelState"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/currentDiseaseModelLabelValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/nextDiseaseModelLabelValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/deltaValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/currentY"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/currentDiseaseModelTempLabelValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelLabel/yScale"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//DiseaseModelLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModelLabelValue/births"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModelLabelValue/deaths"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModelLabelValue/diseaseDeaths"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModelLabelValue/populationCount"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//DiseaseModelLabelValue/incidence"/>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/set">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/set/value"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/add">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/add/value"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/sub">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/sub/value"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/scale">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/scale/scaleFactor"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/maxerror">

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/maxerror/value"/>

+        <genParameters ecoreParameter="standard.ecore#//DiseaseModelLabelValue/maxerror/reltol"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//DiseaseModelLabelValue/zeroOutPopulationCount"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//DiseaseModelState">

+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//DiseaseModelState/label"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//Infector">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//Infector/diseaseModel"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//Infector/targetURI"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//Infector/diseaseName"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//Infector/targetISOKey"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//Infector/labelsToInfect"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//Infector/populationIdentifier"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SEIR">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SEIR/incubationRate"/>

+      <genOperations ecoreOperation="standard.ecore#//SEIR/getAdjustedIncubationRate">

+        <genParameters ecoreParameter="standard.ecore#//SEIR/getAdjustedIncubationRate/timeDelta"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SEIRLabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SEIRLabel/currentSEIRValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SEIRLabel/nextSEIRValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SEIRLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SEIRLabelValue/e"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SI">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/transmissionRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/nonLinearityCoefficient"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/recoveryRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/infectiousMortalityRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/physicallyAdjacentInfectiousProportion"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/roadNetworkInfectiousProportion"/>

+      <genFeatures property="None" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SI/infectiousMortality"/>

+      <genOperations ecoreOperation="standard.ecore#//SI/getAdjustedInfectiousMortalityRate">

+        <genParameters ecoreParameter="standard.ecore#//SI/getAdjustedInfectiousMortalityRate/timeDelta"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//SI/getAdjustedTransmissionRate">

+        <genParameters ecoreParameter="standard.ecore#//SI/getAdjustedTransmissionRate/timeDelta"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//SI/getAdjustedRecoveryRate">

+        <genParameters ecoreParameter="standard.ecore#//SI/getAdjustedRecoveryRate/timeDelta"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//SI/getEffectiveInfectious">

+        <genParameters ecoreParameter="standard.ecore#//SI/getEffectiveInfectious/node"/>

+        <genParameters ecoreParameter="standard.ecore#//SI/getEffectiveInfectious/diseaseLabel"/>

+        <genParameters ecoreParameter="standard.ecore#//SI/getEffectiveInfectious/onsiteInfectious"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//SI/getNormalizedEffectiveInfectious">

+        <genParameters ecoreParameter="standard.ecore#//SI/getNormalizedEffectiveInfectious/node"/>

+        <genParameters ecoreParameter="standard.ecore#//SI/getNormalizedEffectiveInfectious/diseaseLabel"/>

+        <genParameters ecoreParameter="standard.ecore#//SI/getNormalizedEffectiveInfectious/onsiteInfectious"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SIDiseaseModelState"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//SIInfector">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SIInfector/infectiousCount"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SILabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SILabel/currentSIValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SILabel/nextSIValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SILabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SILabelValue/i"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SIR">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SIR/immunityLossRate"/>

+      <genOperations ecoreOperation="standard.ecore#//SIR/getAdjustedImmunityLossRate">

+        <genParameters ecoreParameter="standard.ecore#//SIR/getAdjustedImmunityLossRate/timeDelta"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SIRLabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SIRLabel/currentSIRValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//SIRLabel/nextSIRValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//SIRLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SIRLabelValue/r"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardDiseaseModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModel/totalPopulationCount"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModel/totalPopulationCountReciprocal"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModel/totalArea"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModel/referencePopulationDensity"/>

+      <genOperations ecoreOperation="standard.ecore#//StandardDiseaseModel/addToTotalPopulationCount">

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/addToTotalPopulationCount/populationCount"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//StandardDiseaseModel/computeTotalPopulationCountReciprocal"/>

+      <genOperations ecoreOperation="standard.ecore#//StandardDiseaseModel/addToTotalArea">

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/addToTotalArea/area"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//StandardDiseaseModel/calculateDelta">

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/calculateDelta/time"/>

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/calculateDelta/timeDelta"/>

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/calculateDelta/labels"/>

+      </genOperations>

+      <genOperations ecoreOperation="standard.ecore#//StandardDiseaseModel/doModelSpecificAdjustments">

+        <genParameters ecoreParameter="standard.ecore#//StandardDiseaseModel/doModelSpecificAdjustments/label"/>

+      </genOperations>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardDiseaseModelLabel">

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//StandardDiseaseModelLabel/currentStandardDiseaseModelLabelValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//StandardDiseaseModelLabel/nextStandardDiseaseModelLabelValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//StandardDiseaseModelLabel/deltaStandardDiseaseModelLabelValue"/>

+      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference standard.ecore#//StandardDiseaseModelLabel/currentYStandardDiseaseModelLabelValue"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardDiseaseModelLabelValue">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModelLabelValue/s"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardDiseaseModelState">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardDiseaseModelState/areaRatio"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardInfector"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//StochasticSEIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//StochasticSIDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//StochasticSIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//SanityChecker"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//AggregatingSIDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//AggregatingDiseaseModelState">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//AggregatingDiseaseModelState/childrensLabels"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//AggregatingSEIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//AggregatingSIRDiseaseModel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//StochasticDiseaseModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StochasticDiseaseModel/seed"/>

+      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StochasticDiseaseModel/randomGenerator"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//StandardStochasticDiseaseModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardStochasticDiseaseModel/gain"/>

+      <genOperations ecoreOperation="standard.ecore#//StandardStochasticDiseaseModel/computeNoise"/>

+    </genClasses>

+    <genClasses ecoreClass="standard.ecore#//SIRInoculator">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//SIRInoculator/inoculatedPercentage"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.diseasemodels/model/standard.ecore b/org.eclipse.stem.diseasemodels/model/standard.ecore
new file mode 100644
index 0000000..17db794
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/model/standard.ecore
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="standard"
+    nsURI="http:///org/eclipse/stem/diseasemodels/standard.ecore" nsPrefix="org.eclipse.stem.diseasemodels.standard">
+  <eClassifiers xsi:type="ecore:EClass" name="DeterministicSEIRDiseaseModel" eSuperTypes="#//SEIR"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DeterministicSIDiseaseModel" eSuperTypes="#//SI"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DeterministicSIRDiseaseModel" eSuperTypes="#//SIR"/>
+  <eClassifiers xsi:type="ecore:EClass" name="DiseaseModel" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//NodeDecorator #//SanityChecker ../../org.eclipse.stem.core/model/modifier.ecore#//Modifiable">
+    <eOperations name="getAdjustedBackgroundMortalityRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eOperations name="createDiseaseModelLabel" eType="#//DiseaseModelLabel"/>
+    <eOperations name="createDiseaseModelLabelValue" eType="#//DiseaseModelLabelValue"/>
+    <eOperations name="createDiseaseModelState" eType="#//DiseaseModelState"/>
+    <eOperations name="initializeDiseaseState" eType="#//DiseaseModelState">
+      <eParameters name="diseaseModelState" eType="#//DiseaseModelState"/>
+      <eParameters name="diseaseModelLabel" eType="#//DiseaseModelLabel"/>
+    </eOperations>
+    <eOperations name="initializeDiseaseState">
+      <eParameters name="diseaseModelLabel" eType="#//DiseaseModelLabel"/>
+    </eOperations>
+    <eOperations name="createInfector" eType="#//Infector"/>
+    <eOperations name="getAdjustedBackgroundBirthRate" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="backgroundMortalityRate"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="5.5E-5"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        defaultValueLiteral="human"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timePeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="86400000"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diseaseName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="relativeTolerance" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="1E-9"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="finiteDifference" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="frequencyDependent" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="backgroundBirthRate" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"
+        defaultValueLiteral="5.5E-5"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiseaseModelLabel" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicNodeLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="populationLabel" eType="ecore:EClass ../../org.eclipse.stem.definitions/model/labels.ecore#//PopulationLabel"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diseaseModelState" eType="#//DiseaseModelState"
+        containment="true" resolveProxies="false" eOpposite="#//DiseaseModelState/label"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiseaseModelLabelValue" abstract="true"
+      eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue #//IntegrationLabelValue">
+    <eOperations name="set" eType="#//DiseaseModelLabelValue">
+      <eParameters name="value" eType="#//DiseaseModelLabelValue"/>
+    </eOperations>
+    <eOperations name="add" eType="#//DiseaseModelLabelValue">
+      <eParameters name="value" eType="#//DiseaseModelLabelValue"/>
+    </eOperations>
+    <eOperations name="sub" eType="#//DiseaseModelLabelValue">
+      <eParameters name="value" eType="#//DiseaseModelLabelValue"/>
+    </eOperations>
+    <eOperations name="scale" eType="#//DiseaseModelLabelValue">
+      <eParameters name="scaleFactor" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eOperations>
+    <eOperations name="zeroOutPopulationCount"/>
+    <eOperations name="getAdditions" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eOperations name="getSubstractions" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diseaseDeaths" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        changeable="false" volatile="true" transient="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="incidence" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiseaseModelState" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="label" eType="#//DiseaseModelLabel"
+        eOpposite="#//DiseaseModelLabel/diseaseModelState"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Infector" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//NodeDecorator ../../org.eclipse.stem.core/model/modifier.ecore#//Modifiable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diseaseModel" eType="#//StandardDiseaseModel"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diseaseName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="targetISOKey" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="labelsToInfect" upperBound="-1"
+        eType="#//DiseaseModelLabel"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationIdentifier" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SEIR" abstract="true" eSuperTypes="#//SIR">
+    <eOperations name="getAdjustedIncubationRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="incubationRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SEIRLabel" eSuperTypes="#//StandardDiseaseModelLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deltaValue" eType="#//SEIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="probeValue" eType="#//SEIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tempValue" eType="#//SEIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="#//SEIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="errorScale" eType="#//SEIRLabelValue"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SEIRLabelValue" eSuperTypes="#//SIRLabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="e" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SI" abstract="true" eSuperTypes="#//StandardDiseaseModel">
+    <eOperations name="getAdjustedInfectiousMortalityRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eOperations name="getAdjustedTransmissionRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eOperations name="getAdjustedRecoveryRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eOperations name="getEffectiveInfectious" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="node" eType="ecore:EClass ../../org.eclipse.stem.core/model/graph.ecore#//Node"/>
+      <eParameters name="diseaseLabel" eType="#//StandardDiseaseModelLabel"/>
+      <eParameters name="onsiteInfectious" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eOperations>
+    <eOperations name="getNormalizedEffectiveInfectious" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="node" eType="ecore:EClass ../../org.eclipse.stem.core/model/graph.ecore#//Node"/>
+      <eParameters name="diseaseLabel" eType="#//StandardDiseaseModelLabel"/>
+      <eParameters name="onsiteInfectious" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transmissionRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nonLinearityCoefficient"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="1.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="recoveryRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="infectiousMortalityRate"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="physicallyAdjacentInfectiousProportion"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.05"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="roadNetworkInfectiousProportion"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="0.01"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="infectiousMortality" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SIDiseaseModelState" eSuperTypes="#//StandardDiseaseModelState"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SIInfector" eSuperTypes="#//StandardInfector">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="infectiousCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SILabel" eSuperTypes="#//StandardDiseaseModelLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deltaValue" eType="#//SILabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="probeValue" eType="#//SILabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tempValue" eType="#//SILabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="#//SILabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="errorScale" eType="#//SILabelValue"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SILabelValue" eSuperTypes="#//StandardDiseaseModelLabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="i" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SIR" abstract="true" eSuperTypes="#//SI">
+    <eOperations name="getAdjustedImmunityLossRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble">
+      <eParameters name="timeDelta" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="immunityLossRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SIRLabel" eSuperTypes="#//StandardDiseaseModelLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deltaValue" eType="#//SIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="probeValue" eType="#//SIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tempValue" eType="#//SIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="#//SIRLabelValue"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="errorScale" eType="#//SIRLabelValue"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SIRLabelValue" eSuperTypes="#//SILabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="r" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardDiseaseModel" abstract="true"
+      eSuperTypes="#//DiseaseModel #//IntegrationDecorator">
+    <eOperations name="addToTotalPopulationCount">
+      <eParameters name="populationCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eOperations>
+    <eOperations name="computeTotalPopulationCountReciprocal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eOperations name="addToTotalArea">
+      <eParameters name="area" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    </eOperations>
+    <eOperations name="calculateDelta">
+      <eParameters name="time" eType="ecore:EClass ../../org.eclipse.stem.core/model/model.ecore#//STEMTime"/>
+      <eParameters name="timeDelta" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+      <eParameters name="labels">
+        <eGenericType eClassifier="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EEList">
+          <eTypeArguments eClassifier="ecore:EClass ../../org.eclipse.stem.core/model/graph.ecore#//DynamicLabel"/>
+        </eGenericType>
+      </eParameters>
+    </eOperations>
+    <eOperations name="doModelSpecificAdjustments">
+      <eParameters name="label" eType="#//StandardDiseaseModelLabelValue"/>
+    </eOperations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="totalPopulationCount" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="totalPopulationCountReciprocal"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" changeable="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="totalArea" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="referencePopulationDensity"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble" defaultValueLiteral="100"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardDiseaseModelLabel" abstract="true"
+      eSuperTypes="#//DiseaseModelLabel #//IntegrationLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardDiseaseModelLabelValue" abstract="true"
+      eSuperTypes="#//DiseaseModelLabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="s" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardDiseaseModelState" abstract="true"
+      eSuperTypes="#//DiseaseModelState">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="areaRatio" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardInfector" abstract="true" eSuperTypes="#//Infector"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticSEIRDiseaseModel" eSuperTypes="#//SEIR #//StandardStochasticDiseaseModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticSIDiseaseModel" eSuperTypes="#//SI #//StandardStochasticDiseaseModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticSIRDiseaseModel" eSuperTypes="#//SIR #//StandardStochasticDiseaseModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SanityChecker" instanceClassName="org.eclipse.stem.core.common.SanityChecker"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationLabel" instanceClassName="org.eclipse.stem.core.graph.IntegrationLabel"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationLabelValue" instanceClassName="org.eclipse.stem.core.graph.IntegrationLabelValue"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationDecorator" instanceClassName="org.eclipse.stem.core.model.IntegrationDecorator"
+      abstract="true" interface="true">
+    <eOperations name="isDeterministic" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregatingSIDiseaseModel" eSuperTypes="#//SI"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregatingDiseaseModelState" eSuperTypes="#//DiseaseModelState">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="childrensLabels" upperBound="-1"
+        eType="#//SILabel"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregatingSEIRDiseaseModel" eSuperTypes="#//AggregatingSIRDiseaseModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AggregatingSIRDiseaseModel" eSuperTypes="#//AggregatingSIDiseaseModel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticDiseaseModel" abstract="true"
+      eSuperTypes="#//DiseaseModel">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="seed" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+        defaultValueLiteral="0"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="randomGenerator" eType="#//Random"
+        changeable="false" defaultValueLiteral="0"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StandardStochasticDiseaseModel" abstract="true"
+      eSuperTypes="#//StochasticDiseaseModel">
+    <eOperations name="computeNoise" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="gain" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="0.01"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SIRInoculator" eSuperTypes="#//SIInfector">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="inoculatedPercentage" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"
+        defaultValueLiteral="1"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="EList" instanceClassName="org.eclipse.emf.common.util.EList"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="Random" instanceClassName="java.util.Random"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticPoissonSIDiseaseModel" eSuperTypes="#//SI"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticPoissonSIRDiseaseModel" eSuperTypes="#//SIR"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StochasticPoissonSEIRDiseaseModel" eSuperTypes="#//SEIR"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.diseasemodels/notice.html b/org.eclipse.stem.diseasemodels/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.diseasemodels/plugin.properties b/org.eclipse.stem.diseasemodels/plugin.properties
new file mode 100644
index 0000000..1d4a575
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.diseasemodels/plugin.xml b/org.eclipse.stem.diseasemodels/plugin.xml
new file mode 100644
index 0000000..d23af60
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/plugin.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+   <extension-point id="disease" name="%EP_Disease" schema="schema/disease.exsd"/>
+   <extension-point id="diseasemodel" name="%EP_Disease_Model" schema="schema/diseasemodel.exsd"/>
+    
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/diseasemodels/standard.ecore" 
+       class = "org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory" 
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/diseasemodels/standard.ecore"
+       class = "org.eclipse.stem.diseasemodels.standard.StandardPackage"
+       genModel = "model/diseasemodels.genmodel" /> 
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef class="org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl"/>
+     <dublin_core
+           category_id="/"
+           creator="%dc_creator_daford"
+           description="%dc_desc_D_SI"
+           identifier="foo"
+           title="%dc_desc_D_SI"/>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef class="org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl"/>
+     <dublin_core
+           category_id="/"
+           creator="%dc_creator_daford"
+           description="%dc_desc_D_SEIR"
+           identifier="foo"
+           title="%dc_desc_D_SEIR"/>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef class="org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl"/>
+     <dublin_core
+           category_id="/"
+           creator="%dc_creator_daford"
+           description="%dc_desc_D_SIR"
+           identifier="foo"
+           title="%dc_desc_D_SIR"/>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_kaufman"
+           description="%dc_desc_S_SEIR"
+           identifier="foo"
+           title="%dc_desc_S_SEIR">
+     </dublin_core>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_kaufman"
+           description="%dc_desc_S_SIR"
+           identifier="foo"
+           title="%dc_desc_S_SIR">
+     </dublin_core>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_kaufman"
+           description="%dc_desc_S_SI"
+           identifier="foo"
+           title="%dc_desc_S_SI">
+     </dublin_core>
+  </extension>
+  <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_edlund"
+           description="%dc_desc_S_SI"
+           identifier="foo"
+           title="%dc_desc_S_SI">
+     </dublin_core>
+  </extension>
+   <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIRDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_edlund"
+           description="%dc_desc_S_SI"
+           identifier="foo"
+           title="%dc_desc_S_SI">
+     </dublin_core>
+  </extension>
+   <extension
+        point="org.eclipse.stem.diseasemodels.diseasemodel">
+     <classdef
+           class="org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSEIRDiseaseModelImpl">
+     </classdef>
+     <dublin_core
+           creator="%dc_creator_edlund"
+           description="%dc_desc_S_SI"
+           identifier="foo"
+           title="%dc_desc_S_SI">
+     </dublin_core>
+  </extension>
+  <extension
+        point="org.eclipse.core.runtime.preferences">
+     <initializer
+           class="org.eclipse.stem.diseasemodels.preferences.PreferenceInitializer">
+     </initializer>
+  </extension>
+
+</plugin>
+
diff --git a/org.eclipse.stem.diseasemodels/schema/disease.exsd b/org.eclipse.stem.diseasemodels/schema/disease.exsd
new file mode 100644
index 0000000..45dcdeb
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/schema/disease.exsd
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.diseasemodels">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.stem.diseasemodels" id="disease" name="STEM Disease Definition"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.stem.core/schema/stem_category.exsd"/>
+
+   <include schemaLocation="schema://org.eclipse.stem.core/schema/dublin_core.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="stem_category" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="dublin_core" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.diseasemodels/schema/diseasemodel.exsd b/org.eclipse.stem.diseasemodels/schema/diseasemodel.exsd
new file mode 100644
index 0000000..5a95b94
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/schema/diseasemodel.exsd
@@ -0,0 +1,108 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.diseasemodels">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.stem.diseasemodels" id="diseasemodel" name="STEM Disease Model"/>
+      </appInfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <include schemaLocation="schema://org.eclipse.stem.core/schema/dublin_core.exsd"/>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="classdef"/>
+            <element ref="dublin_core"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="classdef">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl:org.eclipse.stem.diseasemodels.standard.DiseaseModel"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="implementation"/>
+      </appInfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Activator.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Activator.java
new file mode 100644
index 0000000..fdfa236
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Activator.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.diseasemodels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = Constants.ID_ROOT + ".diseasemodels";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context
+	 * @throws Exception
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		// We create these instances so that their constructors run and they
+		// then add themselves to a collection of factories maintained by the
+		// factory interfaces they implement respectively.
+		
+		// Add to RelativeValueProviderAdapterFactory.INSTANCE
+		new StandardRelativeValueProviderAdapterFactory();
+		
+		// Add to RelativeValueHistoryProviderAdapterFactory.INSTANCE
+		new StandardRelativeValueHistoryProviderAdapterFactory();
+		
+		// Add to HistoryProviderAdapterFactory.INSTANCE
+		new StandardHistoryProviderAdapterFactory();
+	} // start
+
+	/**
+	 * @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;
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Running as a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			System.err.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.err.println(exception.getMessage());
+				exception.printStackTrace(System.err);
+			}
+		}
+
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Running as a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+				exception.printStackTrace(System.err);
+			}
+		}
+
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Constants.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Constants.java
new file mode 100644
index 0000000..95e3b47
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/Constants.java
@@ -0,0 +1,47 @@
+// Constants.java
+package org.eclipse.stem.diseasemodels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains constants that are significant to the STEM disease
+ * model definitions.
+ */
+public interface Constants {
+
+	/**
+	 * This is the extension point id for the "disease model" extension point. A
+	 * {@link DiseaseModel} defines the underlying computational model for how a
+	 * disease propagates.
+	 * {@value}
+	 */
+	String ID_DISEASE_MODEL_EXTENSION_POINT = org.eclipse.stem.core.Constants.ID_ROOT
+	+ ".diseasemodels.diseasemodel";
+
+	
+	/**
+	 * This is the extension point id for the "disease" extension point.
+	 * {@value}
+	 */
+	String ID_DISEASE_EXTENSION_POINT = org.eclipse.stem.core.Constants.ID_ROOT
+			+ ".diseasemodels.disease";
+
+	/**
+	 * This is the identifier of the element in a
+	 * <code>ConfigurationElement</code> that specifies the name and
+	 * implementing class for STEM "disease models".
+	 * 
+	 * @see org.eclipse.stem.core.Constants#EXECUTABLE_NAME_ATTRIBUTE
+	 */
+	String DISEASE_MODEL_ELEMENT = "classdef";
+
+} // Constants
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingDiseaseModelState.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingDiseaseModelState.java
new file mode 100644
index 0000000..c64c274
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingDiseaseModelState.java
@@ -0,0 +1,31 @@
+// AggregatingDiseaseModelState.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+//import org.eclipse.emf.common.util.EMap;
+
+/**
+ * This class represents the state of an aggregate disease model at a label.
+ * 
+ * @model
+ */
+public interface AggregatingDiseaseModelState extends DiseaseModelState {
+
+	/**
+	 * @return the disease model labels whose values are to be aggregated
+	 * @model type="SILabel" containment="false"
+	 */
+	EList<SILabel> getChildrensLabels();
+
+} // AggregatingDiseaseModelState
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSEIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSEIRDiseaseModel.java
new file mode 100644
index 0000000..d8b6113
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSEIRDiseaseModel.java
@@ -0,0 +1,38 @@
+// AggregatingSEIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface defines a class in an EMF model for an aggregating SEIR
+ * disease model. This disease model determines its disease state values by
+ * summing (aggregating) the (next) values of the labels of other SEIR disease
+ * models. Typically, it is placed in a model that contains the target SEIR
+ * disease model so that its
+ * {@link Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long)}
+ * method will be called after the contained disease model. This ensures that
+ * the "next" values that this model collects will be valid by the time it runs.
+ * 
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface AggregatingSEIRDiseaseModel extends AggregatingSIRDiseaseModel {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SEIR disease model type URI.
+	 */
+	String URI_TYPE_AGGREGATING_SEIR_DISEASE_MODEL_SEGMENT = URI_TYPE_AGGREGATING_SI_DISEASE_MODEL_SEGMENT
+			+ "/SEIR";
+} // AggregatingSEIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIDiseaseModel.java
new file mode 100644
index 0000000..c6a4fc1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIDiseaseModel.java
@@ -0,0 +1,38 @@
+// AggregatingSIDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface defines a class in an EMF model for an aggregating SI disease
+ * model. This disease model determines its disease state values by summing
+ * (aggregating) the (next) values of the labels of other SI disease models.
+ * Typically, it is placed in a model that contains the target SI disease model
+ * so that its
+ * {@link Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long)}
+ * method will be called after the contained disease model. This ensures that
+ * the "next" values that this model collects will be valid by the time it runs.
+ * 
+ * @see SILabel
+ * @see SILabelValue
+ * 
+ * @model
+ */
+public interface AggregatingSIDiseaseModel extends SI {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SI disease model type URI.
+	 */
+	String URI_TYPE_AGGREGATING_SI_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT
+			+ "/aggregating";
+} // AggregatingSIDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIRDiseaseModel.java
new file mode 100644
index 0000000..511c992
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/AggregatingSIRDiseaseModel.java
@@ -0,0 +1,38 @@
+// AggregatingSIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface defines a class in an EMF model for an aggregating SIR disease
+ * model. This disease model determines its disease state values by summing
+ * (aggregating) the (next) values of the labels of other SIR disease models.
+ * Typically, it is placed in a model that contains the target SIR disease model
+ * so that its
+ * {@link Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long)}
+ * method will be called after the contained disease model. This ensures that
+ * the "next" values that this model collects will be valid by the time it runs.
+ * 
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * 
+ * @model
+ */
+public interface AggregatingSIRDiseaseModel extends AggregatingSIDiseaseModel {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SIR disease model type URI.
+	 */
+	String URI_TYPE_AGGREGATING_SIR_DISEASE_MODEL_SEGMENT = URI_TYPE_AGGREGATING_SI_DISEASE_MODEL_SEGMENT
+			+ "/SIR";
+} // AggregatingSIRDiseaseModel
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSEIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSEIRDiseaseModel.java
new file mode 100644
index 0000000..cab85db
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSEIRDiseaseModel.java
@@ -0,0 +1,32 @@
+// DeterministicSEIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Deterministic SEIR
+ * disease model.
+ * 
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface DeterministicSEIRDiseaseModel extends SEIR {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SEIR disease model type URI.
+	 */
+	String URI_TYPE_DETERMINISTIC_SEIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SEIR_DISEASE_MODEL_SEGMENT
+			+ "/stochastic";
+} // DeterministicSEIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIDiseaseModel.java
new file mode 100644
index 0000000..0da97e9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIDiseaseModel.java
@@ -0,0 +1,31 @@
+// DeterministicSIDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Deterministic SI
+ * disease model.
+ * 
+ * @see SILabel
+ * @see SILabelValue
+ * 
+ * @model
+ */
+public interface DeterministicSIDiseaseModel extends SI {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SI disease model type URI.
+	 */
+	String URI_TYPE_DETERMINISTIC_SI_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT
+			+ "/deterministic";
+} // DeterministicSIDiseaseModel
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIRDiseaseModel.java
new file mode 100644
index 0000000..b77e4af
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DeterministicSIRDiseaseModel.java
@@ -0,0 +1,31 @@
+// DeterministicSIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Deterministic SIR
+ * disease model.
+ * 
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * 
+ * @model
+ */
+public interface DeterministicSIRDiseaseModel extends SIR {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard deterministic SIR disease model type URI.
+	 */
+	String URI_TYPE_DETERMINISTIC_SIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SIR_DISEASE_MODEL_SEGMENT
+			+ "/deterministic";
+} // DeterministicSIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModel.java
new file mode 100644
index 0000000..0da567f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModel.java
@@ -0,0 +1,296 @@
+// DiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * This interface defines a class in an EMF model for an STEM Disease model. It
+ * is the top-level disease model, all other disease models derive from this
+ * class.
+ * 
+ * @model abstract="true"
+ */
+public interface DiseaseModel extends NodeDecorator, SanityChecker, Modifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * disease model type URI.
+	 */
+	String URI_TYPE_DISEASEMODEL_SEGMENT = "diseasemodel";
+
+	/**
+	 * This is the "background" rate (i.e., in the absence of disease) at which
+	 * population members (on average) transition from all of the other states
+	 * (except <em>Pre-Born</em> and including Infectious) to the state
+	 * <em>Dead</em>, per time period. For the population in the Infectious
+	 * state the mortality rate may also be increased. This is specified by
+	 * {@link #getInfectiousMortality()}.
+	 * 
+	 * 1/mortalityRate is the average life span in time periods, on average,
+	 * that is takes for a population member to die from any state.
+	 * 
+	 * In typical models, the background mortality rate is specified to be the
+	 * same as the "birth rate" to keep the population fixed.
+	 * 
+	 * @return the number of population members that die per time period
+	 * @model default="5.5E-5"
+	 */
+	double getBackgroundMortalityRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundMortalityRate <em>Background Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Background Mortality Rate</em>' attribute.
+	 * @see #getBackgroundMortalityRate()
+	 * @generated
+	 */
+	void setBackgroundMortalityRate(double value);
+
+	/**
+	 * Compute the background mortality rate adjusted for a time delta
+	 * potentially different from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedBackgroundMortalityRate(final long timeDelta);
+
+	/**
+	 * This is the name of the disease
+	 * @return the name of the disease
+	 * 
+	 * @model
+	 */
+	String getDiseaseName();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getDiseaseName <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Name</em>' attribute.
+	 * @see #getDiseaseName()
+	 * @generated
+	 */
+	void setDiseaseName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * The default value is <code>"1E-9"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Relative Tolerance</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Relative Tolerance</em>' attribute.
+	 * @see #setRelativeTolerance(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getDiseaseModel_RelativeTolerance()
+	 * @model default="1E-9"
+	 * @generated
+	 */
+	double getRelativeTolerance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getRelativeTolerance <em>Relative Tolerance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Relative Tolerance</em>' attribute.
+	 * @see #getRelativeTolerance()
+	 * @generated
+	 */
+	void setRelativeTolerance(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Finite Difference</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Finite Difference</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Finite Difference</em>' attribute.
+	 * @see #setFiniteDifference(boolean)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getDiseaseModel_FiniteDifference()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isFiniteDifference();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFiniteDifference <em>Finite Difference</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Finite Difference</em>' attribute.
+	 * @see #isFiniteDifference()
+	 * @generated
+	 */
+	void setFiniteDifference(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * The default value is <code>"true"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Frequency Dependent</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Frequency Dependent</em>' attribute.
+	 * @see #setFrequencyDependent(boolean)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getDiseaseModel_FrequencyDependent()
+	 * @model default="true"
+	 * @generated
+	 */
+	boolean isFrequencyDependent();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFrequencyDependent <em>Frequency Dependent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Frequency Dependent</em>' attribute.
+	 * @see #isFrequencyDependent()
+	 * @generated
+	 */
+	void setFrequencyDependent(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * The default value is <code>"5.5E-5"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Background Birth Rate</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Background Birth Rate</em>' attribute.
+	 * @see #setBackgroundBirthRate(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getDiseaseModel_BackgroundBirthRate()
+	 * @model default="5.5E-5"
+	 * @generated
+	 */
+	double getBackgroundBirthRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundBirthRate <em>Background Birth Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Background Birth Rate</em>' attribute.
+	 * @see #getBackgroundBirthRate()
+	 * @generated
+	 */
+	void setBackgroundBirthRate(double value);
+
+	/**
+	 * This is the identifier of the population being infected by a Disease.
+	 * 
+	 * @return the identifier of the Population affected by the disease.
+	 * 
+	 * @model default="human"
+	 */
+	String getPopulationIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getPopulationIdentifier <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Population Identifier</em>' attribute.
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 */
+	void setPopulationIdentifier(String value);
+
+	/**
+	 * The time period for the specified rates.  Default: 1 Day
+	 * @return the time period (milliseconds) of the rates specified for this
+	 *         disease model
+	 * 
+	 * @model default="86400000"
+	 */
+	long getTimePeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getTimePeriod <em>Time Period</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time Period</em>' attribute.
+	 * @see #getTimePeriod()
+	 * @generated
+	 */
+	void setTimePeriod(long value);
+
+	/**
+	 * @return an instance of the disease model label that this disease model
+	 *         updates.
+	 * @model abstract="true"
+	 */
+	DiseaseModelLabel createDiseaseModelLabel();
+
+	/**
+	 * @return an instance of the disease model label value that this disease model
+	 *         updates.
+	 * @model abstract="true"
+	 */
+	DiseaseModelLabelValue createDiseaseModelLabelValue();
+	
+	/**
+	 * @return an instance of the disease model state that this disease model
+	 *         would use to hold computation state information attached to a
+	 *         disease model label.
+	 * @model abstract="true"
+	 */
+	DiseaseModelState createDiseaseModelState();
+
+	/**
+	 * @param diseaseModelState
+	 *            the state information to be initialized
+	 * @param diseaseModelLabel
+	 *            the label to use to initialize the state information
+	 * @return the initialized disease model state instance
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelState initializeDiseaseState(
+			DiseaseModelState diseaseModelState,
+			DiseaseModelLabel diseaseModelLabel);
+
+	
+	/**
+	 * @param diseaseModelLabel
+	 *            the label to use to initialize the state information
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void initializeDiseaseState(
+			DiseaseModelLabel diseaseModelLabel);
+
+	/**
+	 * @return a new instance of an infector for this disease model.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	Infector createInfector();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	double getAdjustedBackgroundBirthRate(long timeDelta);
+
+} // DiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabel.java
new file mode 100644
index 0000000..e84284b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabel.java
@@ -0,0 +1,99 @@
+// DiseaseModelLabel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+
+/**
+ * This interface defines a class in an EMF model for an STEM Disease model
+ * label. It is the top-level disease model, all other disease model labels
+ * derive from this class.
+ * 
+ * @model abstract="true"
+ */
+public interface DiseaseModelLabel extends DynamicNodeLabel {
+
+	/**
+	 * This is the top-level segment for all type URI's for disease model
+	 * labels.
+	 */
+	String URI_TYPE_DISEASE_MODEL_LABEL_SEGMENT = URI_TYPE_DYNAMIC_LABEL_SEGMENT
+			+ "/diseasemodel";
+
+	/**
+	 * This is the type URI for disease model labels
+	 */
+	URI URI_TYPE_SIR_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_DISEASE_MODEL_LABEL_SEGMENT);
+
+	/**
+	 * This is the Population being infected by a Disease. The values for this
+	 * disease model label apply to the population represented by the population
+	 * label.
+	 * 
+	 * @return the Population affected by the disease.
+	 * 
+	 * @model
+	 */
+	PopulationLabel getPopulationLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getPopulationLabel <em>Population Label</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Population Label</em>' reference.
+	 * @see #getPopulationLabel()
+	 * @generated
+	 */
+	void setPopulationLabel(PopulationLabel value);
+
+	/**
+	 * @return the disease model state associated with this label (if any).
+	 * @model containment="true" opposite="label"
+	 */
+	DiseaseModelState getDiseaseModelState();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getDiseaseModelState <em>Disease Model State</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Model State</em>' containment reference.
+	 * @see #getDiseaseModelState()
+	 * @generated
+	 */
+	void setDiseaseModelState(DiseaseModelState value);
+	
+	/**
+	 * @return the value of the number of population members who have died from
+	 *         the disease.
+	 */
+	double getDiseaseDeaths();
+
+	/**
+	 * @param d the number of deaths
+	 */
+	void setDiseaseDeaths(final double d);
+	
+	/**
+	 * @return the next value of the number of population members who have died
+	 *         from the disease.
+	 */
+	double getNextDiseaseDeaths();
+
+	/**
+	 * @param d the number of deaths
+	 */
+	void setNextDiseaseDeaths(final double d);
+	
+} // DiseaseModelLabel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabelValue.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabelValue.java
new file mode 100644
index 0000000..74b13fa
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelLabelValue.java
@@ -0,0 +1,160 @@
+// DiseaseModelLabelValue.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * This interface defines a class in an EMF model for an disease model label
+ * value. The values of this label record the number of population members who
+ * have been "born" and who have "died".
+ * 
+ * @model abstract="true"
+ */
+
+public interface DiseaseModelLabelValue extends LabelValue, IntegrationLabelValue {
+
+	/**
+	 * This is the maximum value for any population.
+	 */
+	double MAX_POPULATION_VALUE = 1e12;
+	
+	/**
+	 * Set the incidence.
+	 * @param incidence
+	 * @model
+	 */
+	double getIncidence();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getIncidence <em>Incidence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Incidence</em>' attribute.
+	 * @see #getIncidence()
+	 * @generated
+	 */
+	void setIncidence(double value);
+
+	/**
+	 * @return the number of population members who have died due to the disease
+	 *         being modeled
+	 * @model default="0"
+	 */
+	double getDiseaseDeaths();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getDiseaseDeaths <em>Disease Deaths</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Deaths</em>' attribute.
+	 * @see #getDiseaseDeaths()
+	 * @generated
+	 */
+	void setDiseaseDeaths(double value);
+
+	/**
+	 * Set the value of this disease model label to be the same as the value
+	 * 
+	 * @param value
+	 *            the new value for this disease model value
+	 * @return this instance with the new values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue set(final DiseaseModelLabelValue value);
+
+	/**
+	 * Add the value of this disease model label to the value
+	 * 
+	 * @param value
+	 *            the value to be added to this disease model value
+	 * @return this instance with the sum of values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue add(final DiseaseModelLabelValue value);
+
+	/**
+	 * Subtract the value of the passed disease model label value from this
+	 * disease model label to the value.
+	 * 
+	 * @param value
+	 *            the value to be added to this disease model value
+	 * @return this instance with the difference of values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue sub(final DiseaseModelLabelValue value);
+
+	/**
+	 * Multiply the values by a scale factor.
+	 * 
+	 * @param scaleFactor
+	 * 	the multiplier
+	 * @return this instance with the new scaled values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue scale(final double scaleFactor);
+
+	/**
+	 * Add a scalar to each value
+	 * 
+	 * @param scalar
+	 * 	The scalar
+	 * @return this instance with the new added value
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue add(final double scaleFactor);
+
+	/**
+	 * Make the values absolute 
+	 * 
+	 * @return this instance with negative replaced with positive values
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	DiseaseModelLabelValue abs();
+
+
+	/**
+	 * @return the sum of the living population members in all states
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getPopulationCount();
+
+	/**
+	 * Set all population values in all states to zero.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void zeroOutPopulationCount();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	double getAdditions();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	double getSubstractions();
+} // DiseaseModelLabelValue
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelState.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelState.java
new file mode 100644
index 0000000..f5f86be
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/DiseaseModelState.java
@@ -0,0 +1,49 @@
+// DiseaseModelState.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * This interface defines a class in an EMF model that contains state
+ * information for a STEM disease model's computations from one simulation cycle
+ * to another. The basic idea is that the disease model can store state
+ * information in an instance and attach it to a disease model label such that
+ * when it revisits the label to compute its value it can refer to the state
+ * information to as part of its computation. For instance, if the value of
+ * a label is dependent on the values of other labels, references to those
+ * labels could be "cached" in the state instance and not recomputed for each
+ * cycle.
+ * 
+ * @model abstract="true"
+ * @implements SanityChecker
+ */
+public interface DiseaseModelState extends EObject, SanityChecker {
+
+	/**
+	 * @return the label associated with the state information
+	 * @model
+	 */
+	DiseaseModelLabel getLabel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelState#getLabel <em>Label</em>}' container reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Label</em>' container reference.
+	 * @see #getLabel()
+	 * @generated
+	 */
+	void setLabel(DiseaseModelLabel value);
+
+}// DiseaseModelState
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/Infector.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/Infector.java
new file mode 100644
index 0000000..8f81646
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/Infector.java
@@ -0,0 +1,117 @@
+// Infector.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * This interface defines a class in an EMF model for the initialization of an
+ * infectious population in a disease model.
+ * 
+ * @model abstract="true"
+ */
+public interface Infector extends NodeDecorator, Modifiable {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * infector type URI.
+	 */
+	String URI_TYPE_INFECTOR_SEGMENT = "infector";
+
+	/**
+	 * @return the name of the disease to be infected
+	 * @model
+	 */
+	String getDiseaseName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseName <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Name</em>' attribute.
+	 * @see #getDiseaseName()
+	 * @generated
+	 */
+	void setDiseaseName(String value);
+
+	/**
+	 * @return the ISO3166 based key for the {@link Region} to be infected.
+	 * @model
+	 */
+	String getTargetISOKey();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.Infector#getTargetISOKey <em>Target ISO Key</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target ISO Key</em>' attribute.
+	 * @see #getTargetISOKey()
+	 * @generated
+	 */
+	void setTargetISOKey(String value);
+
+	/**
+	 * @return the identifier of the population that is to be infected
+	 * @model
+	 */
+	String getPopulationIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.Infector#getPopulationIdentifier <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Population Identifier</em>' attribute.
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 */
+	void setPopulationIdentifier(String value);
+
+	/**
+	 * @return the disease model that this infector initializes
+	 * @model containment="false"
+	 */
+	StandardDiseaseModel getDiseaseModel();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseModel <em>Disease Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Disease Model</em>' reference.
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	void setDiseaseModel(StandardDiseaseModel value);
+
+	/**
+	 * @return the URI of the node that will receive the infectious population
+	 * @model
+	 */
+	URI getTargetURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.Infector#getTargetURI <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Target URI</em>' attribute.
+	 * @see #getTargetURI()
+	 * @generated
+	 */
+	void setTargetURI(URI value);
+
+	/**
+	 * @return the list of {@link DiseaseLabel}s that this <code>Infector</code>
+	 * 	 is responsible for "infecting".
+	 * @model type="DiseaseModelLabel" containment="false" 
+	 */
+	EList<DiseaseModelLabel> getLabelsToInfect();
+} // Infector
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIR.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIR.java
new file mode 100644
index 0000000..7ad543a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIR.java
@@ -0,0 +1,252 @@
+// SEIR.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+
+/**
+ * A {@link DiseaseModel} with four states <em>Susceptible</em>,
+ * <em>Exposed</em>, <em>Infectious</em> and <em>Recovered</em>(SEIR).
+ * 
+ * <p>
+ * The basic <em>SEIR</em> (Susceptible, Exposed, Infectious, Recovered)
+ * disease model assumes a uniform population at a single location and that the
+ * population members are well "mixed", meaning that they are equally likely to
+ * meet and infect each other. This model, for a normalized population, is
+ * defined by the three equations below:
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &gamma;r &minus; &mu;s</em>
+ * </li>
+ * <li><em>&Delta;e = &beta;s i &minus; &phi;e  &minus; &mu;e</em> </li>
+ * <li><em>&Delta;i = &phi;e &minus; &sigma;i  &minus; &mu;i</em> </li>
+ * <li><em>&Delta;r =   &sigma;i &minus; &gamma;r &minus; &mu;r</em> </li>
+ * </ul>
+ * 
+ * 
+ * <p>
+ * Where:
+ * <ul>
+ * <li><em>s</em> is the normalized <em>Susceptible</em> population </li>
+ * <li> <em>i</em> is the normalized <em>Infectious</em> population</li>
+ * <li>&mu; is the <em>background mortality rate</em>, and, because it is
+ * assumed that the population was not growing or shrinking significantly before
+ * the onset of the disease, &mu; is also assumed to be the birth rate. </li>
+ * <li> <em>&beta;</em> is the disease <em>transmission (infection) rate</em>.
+ * This coefficient determines the number of population members that become
+ * <em>Exposed</em> per population member in the <em>Infectious</em> state,
+ * assuming the entire population is in the <em>Susceptible</em> state. </li>
+ * <li> &sigma; is the <em>Infectious</em> recovery rate. This coefficient
+ * determines the rate at which <em>Infectious</em> population members
+ * <em>Recover</em>.</li>
+ * <li><em>&gamma;</em> is the <em>immunity loss rate</em>. This
+ * coefficient determines the rate at which <em>Recovered</em> population
+ * members lose their immunity to the disease and become <em>Susceptible</em>
+ * again.</li>
+ * <li><em>&phi;</em> is the <em>incubation rate</em>. This coefficient
+ * determines the rate at which <em>Exposed</em> population members become
+ * <em>Infectious</em>.</li>
+ * </ul>
+ * </p>
+ * Following basically the same derivation as outlined for the {@link SI} and
+ * {@link SIR} models, these become:
+ * 
+ * <p>
+ * Let
+ * <ul>
+ * <li><em>x</em> be the <em>Infectious Mortality</em> which is the
+ * proportion of the population members who become <em>Infectious</em> that
+ * will eventually die.</li>
+ * <li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality Rate</em>.
+ * This is the rate at which fatally infected population members die
+ * specifically due to the disease. </li>
+ * </ul>
+ * Thus, we now have two types of <em>Infectious</em> population members,
+ * those that will eventually recover at rate <em>&sigma;</em>, and those that
+ * will eventually die at rate <em>&mu;<sub>i</sub></em> (of course, members
+ * in all three states still die at the background rate <em>&mu;</em>).
+ * </p>
+ * <p>
+ * Let
+ * <ul>
+ * <li><em> i <sup>R</sup></em> be the normalized infectious population that
+ * will recover.</li>
+ * <li><em> i <sup>F</sup></em> be the normalized infectious population that
+ * will die from the disease.</li>
+ * <li><em> i = i <sup>R</sup> +  i <sup>F</sup></em> be the total normalized
+ * infectious population (as before).</li>
+ * </ul>
+ * </p>
+ * 
+ * <p>
+ * We modify our model to include these additional states and rates.
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &gamma;r  &minus; &mu; s</em>
+ * </li>
+ * <li><em>&Delta;e = &beta;s i &minus; &phi;e  &minus; &mu;e</em> </li>
+ * <li><em>&Delta;i <sup>R</sup> = (1-x)&phi;e  &minus; &sigma;i <sup>R</sup>  &minus; &mu;i <sup>R</sup></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> = x&phi;e  &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup></em>
+ * </li>
+ * <li><em>&Delta;r =   &sigma;i<sup>R</sup> &minus; &gamma;r &minus; &mu;r</em>
+ * </li>
+ * 
+ * </ul>
+ * </p>
+ * <h3>Spatial Adaptation</h3>
+ * <p>
+ * <ul>
+ * <li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> s i P<sub>l</sub> + &gamma; r P<sub>l</sub>  &minus; &mu; s P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;e P<sub>l</sub>= &beta;siP<sub>l</sub> &minus; &phi;eP<sub>l</sub>  &minus; &mu;eP<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>R</sup> P<sub>l</sub> = (1-x)&phi;e P<sub>l</sub> &minus; &sigma; i <sup>R</sup> P<sub>l</sub> &minus; &mu;i <sup>R</sup> P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> P<sub>l</sub> = x &phi;e P<sub>l</sub> &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup> P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;r P<sub>l</sub>=   &sigma;i<sup>R</sup>P<sub>l</sub> &minus; &gamma;r P<sub>l</sub>&minus; &mu;r P<sub>l</sub></em>
+ * </li>
+ * </ul>
+ * <p>
+ * Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of
+ * <em>Susceptible</em> population members at location <em>l</em>.
+ * Similarly, let <em>I<sub>l</sub> = i P<sub>l</sub></em> be the number
+ * of population members at location <em>l</em> that are <em>Infectious</em>
+ * (both states combined), and let
+ * <em>r P<sub>l</sub> be the <em>Recovered</em> population.
+ * For readability, we drop the <em>l</em> subscript and substitute.
+ * </p>
+ * Substituting
+ *  
+ * </p>
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> S i + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;E = &beta;S i &minus; &phi;E  &minus; &mu;E</em> </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&phi;E  &minus; &sigma;I <sup>R</sup> &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x&phi;E   &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *  <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ *   Continuing with <em> i = I/P<sub>l</sub></em>, we have:
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; (&beta;<sub>l</sub>/P<sub>l</sub>)SI + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;E = (&beta;<sub>l</sub>/P<sub>l</sub>)SI &minus; &phi;E  &minus; &mu;E</em> </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&phi;E  &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x&phi;E   &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *   <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ * Letting
+ * <em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta; (d<sub>l</sub>/(APD * P<sub>l</sub>))
+ * </em>
+ * gives:
+ * 
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S I + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;E =  &beta;<sup>*</sup> S I &minus; &phi;E  &minus; &mu;E</em> </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&phi;E &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x&phi;E  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *   <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * TSF
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = ((S+E+I+R)/Area<sub>l</sub>) / (P/Area * (S+E+I+R))</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+ * <li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+ * <li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+ * </ul>
+ * <h3>Neighboring Infectious Populations</h3>
+ * </p>
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;E =  &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) &minus; &phi;E  &minus; &mu;E</em> </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&phi;E &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x&phi;E  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ * Specific statistics on the total number of births, deaths and deaths due to
+ * the disease can be computed by adding the appropriate terms of the equations
+ * above.
+ * <ul>
+ * <li><em>B= &mu;(S + E + I + R)</em>, is the number of <em>Births</em> </li>
+ * <li><em>D = &mu;S + &mu;E + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu;I<sup>R</sup> + &mu;R</em>,is
+ * the total number of <em>Deaths</em></li>
+ * <li><em>DD= &mu;<sub>i</sub> I<sup>F</sup></em>, is the number of
+ * <em>Disease Deaths</em> </li>
+ * </ul>
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+public interface SEIR extends SIR {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard disease model type URI.
+	 */
+	String URI_TYPE_STANDARD_SEIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_DISEASEMODEL_SEGMENT
+			+ "/seir";
+
+	/**
+	 * The Type URI for the standard SEIR disease model
+	 */
+	URI URI_TYPE_STANDARD_SEIR_DISEASE_MODEL = STEMURI
+			.createTypeURI(URI_TYPE_STANDARD_SEIR_DISEASE_MODEL_SEGMENT);
+
+	/**
+	 * @return the number of population members in the <em>Exposed</em> state
+	 *         that move to the <em>infectious</em> state, per time period.
+	 * @model default="0.0"
+	 */
+	double getIncubationRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIR#getIncubationRate <em>Incubation Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Incubation Rate</em>' attribute.
+	 * @see #getIncubationRate()
+	 * @generated
+	 */
+	void setIncubationRate(double value);
+
+	/**
+	 * Compute the incubation rate adjusted for a time delta potentially
+	 * different from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedIncubationRate(final long timeDelta);
+
+} // SEIR
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabel.java
new file mode 100644
index 0000000..5e69e54
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabel.java
@@ -0,0 +1,218 @@
+// SEIRLabel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+
+
+/**
+ * This interface defines a class in an EMF model for a standard SEIR disease
+ * model dynamic label.
+ * 
+ * @see StandardDiseaseModel
+ * @see StandardDiseaseModelLabel
+ * @see StandardDiseaseModelLabelValue
+ * @see SI
+ * @see SILabel
+ * @see SILabelValue
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface SEIRLabel extends StandardDiseaseModelLabel {
+
+	/**
+	 * Returns the value of the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Delta Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Delta Value</em>' reference.
+	 * @see #setDeltaValue(SEIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSEIRLabel_DeltaValue()
+	 * @model
+	 * @generated
+	 */
+	SEIRLabelValue getDeltaValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getDeltaValue <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Delta Value</em>' reference.
+	 * @see #getDeltaValue()
+	 * @generated
+	 */
+	void setDeltaValue(SEIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Probe Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Probe Value</em>' reference.
+	 * @see #setProbeValue(SEIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSEIRLabel_ProbeValue()
+	 * @model
+	 * @generated
+	 */
+	SEIRLabelValue getProbeValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getProbeValue <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Probe Value</em>' reference.
+	 * @see #getProbeValue()
+	 * @generated
+	 */
+	void setProbeValue(SEIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temp Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temp Value</em>' reference.
+	 * @see #setTempValue(SEIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSEIRLabel_TempValue()
+	 * @model
+	 * @generated
+	 */
+	SEIRLabelValue getTempValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getTempValue <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Temp Value</em>' reference.
+	 * @see #getTempValue()
+	 * @generated
+	 */
+	void setTempValue(SEIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' reference.
+	 * @see #setOriginalValue(SEIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSEIRLabel_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	SEIRLabelValue getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getOriginalValue <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' reference.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(SEIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error Scale</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Error Scale</em>' reference.
+	 * @see #setErrorScale(SEIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSEIRLabel_ErrorScale()
+	 * @model
+	 * @generated
+	 */
+	SEIRLabelValue getErrorScale();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getErrorScale <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Error Scale</em>' reference.
+	 * @see #getErrorScale()
+	 * @generated
+	 */
+	void setErrorScale(SEIRLabelValue value);
+
+	/**
+	 * This is the top-level segment for all type URI's for SEIR disease model
+	 * labels.
+	 */
+	String URI_TYPE_SEIR_LABEL_SEGMENT = URI_TYPE_STANDARD_DISEASE_MODEL_LABEL_SEGMENT
+			+ "/seir";
+
+	/**
+	 * This is the type URI for standard SEIR disease labels
+	 */
+	URI URI_TYPE_SEIR_LABEL = STEMURI
+			.createTypeURI(URI_TYPE_SEIR_LABEL_SEGMENT);
+
+	/**
+	 * @return the current number of "exposed" population members
+	 */
+	public double getE();
+
+	/**
+	 * @param e
+	 *            the new value for the current number of "exposed" population
+	 *            members
+	 */
+	public void setE(double e);
+
+	/**
+	 * @return the next number of "exposed" population members
+	 */
+	public double getNextE();
+
+	/**
+	 * @param e
+	 *            the new value for the next number of "exposed" population
+	 *            members
+	 */
+	public void setNextE(double e);
+
+	/**
+	 * @return the current SEIR label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	SEIRLabelValue getCurrentSEIRValue();
+
+	/**
+	 * @return the next SEIR label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	SEIRLabelValue getNextSEIRValue();
+
+} // SEIRLabel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabelValue.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabelValue.java
new file mode 100644
index 0000000..8b11a46
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SEIRLabelValue.java
@@ -0,0 +1,62 @@
+// SEIRLabelValue.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an SEIR disease model
+ * label value. The values of this label record the number of population members
+ * who are in one of four states with repsect to a particular disease.
+ * <ul>
+ * <li><em>Susceptible</em> which means that they are not infected by the
+ * disease, but they can become exposed (and later infected) to the disease.</li>
+ * <li><em>Exposed</em> which means that they are infected with the disease,
+ * but are not yet infectious to others. </li>
+ * <li><em>Infectious</em> which means that population members are infected
+ * with the disease and they can infect others. </li>
+ * <li><em>Recovered</em> which means that population members are not
+ * infected with the disease and <em>cannot</em> become infected by the
+ * disease. Note that in some disease models a population member in the
+ * <em>Recovered</em> state could transition to the <em>Susceptible</em>
+ * state and then become a candidate for re-infection.</li>
+ * </ul>
+ * <p>
+ * Sub-classes could introduce additional states in which population members
+ * could exist.
+ * </p>
+ * 
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * 
+ * @model
+ */
+public interface SEIRLabelValue extends SIRLabelValue {
+
+	/**
+	 * @return the number of population members in the <em>Exposed</em> state.
+	 * @model
+	 */
+	double getE();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue#getE <em>E</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>E</em>' attribute.
+	 * @see #getE()
+	 * @generated
+	 */
+	void setE(double value);
+
+} // SEIRLabelValue
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SI.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SI.java
new file mode 100644
index 0000000..a9a1842
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SI.java
@@ -0,0 +1,558 @@
+// SI.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * A {@link DiseaseModel} with two states <em>Susceptible</em> and
+ * <em>Infectious</em> (SI).
+ * 
+ * <p>
+ * The basic <em>SI</em> (Susceptible, Infectious) disease model assumes a
+ * uniform population at a single location and that the population members are
+ * well "mixed", meaning that they are equally likely to meet and infect each
+ * other. This model, for a normalized population, is defined by the two
+ * equations below:
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &sigma;i &minus; &mu;s</em>
+ * </li>
+ * <li><em>&Delta;i = &beta;s i &minus; &sigma;i  &minus;  	i</em> </li>
+ * </ul>
+ * <p>
+ * Where:
+ * <ul>
+ * <li><em>s</em> is the normalized <em>Susceptible</em> population </li>
+ * <li> <em>i</em> is the normalized <em>Infectious</em> population</li>
+ * <li>&mu; is the background mortality rate, and, because it is assumed that
+ * the population was not growing or shrinking significantly before the onset of
+ * the disease, &mu; is also assumed to be the birth rate. </li>
+ * <li> <em>&beta;</em> is the disease transmission (infection) rate. This
+ * coefficient determines the number of population members that become
+ * infected/exposed per population member in the <em>Infectious</em> state,
+ * assuming the entire population is in the <em>Susceptible</em> state. </li>
+ * <li> &sigma; is the <em>Infectious</em> recovery rate. This coefficient
+ * determines the rate at which <em>Infectious</em> population members
+ * <em>Recover</em>. In this model <em>recovery</em> means becoming
+ * <em>Susceptible</em> again.</li>
+ * </ul>
+ * </p>
+ * <p>
+ * In the first equation, the <em>Susceptible</em> population increases when
+ * new members are born. This value is the birth rate &mu; multiplied by the
+ * total population, which, because the values are normalized, is 1. It also
+ * increases due to <em>Infectious</em> population members recovering. The
+ * <em>Susceptible</em> population decreases by members who die. That value is
+ * &mu;, the mortality rate, multiplied by the <em>Susceptible</em>
+ * population, <em>s</em>. The <em>Susceptible</em> population also
+ * decreases by having members become <em>infected</em>. The product of
+ * <em>&beta;</em> and <em>i</em> gives the normalized number of
+ * <em>Susceptible</em> population members that would become infected for each
+ * <em>Infectious</em> population member assuming all population members are
+ * in the <em>Susceptible</em> state. Multiplying that by <em>s</em>, the
+ * fraction that actually are <em>Susceptible</em>, gives the normalized
+ * amount that become <em>Infectious</em>.
+ * </p>
+ * <p>
+ * In the second equation, the <em>Infectious</em> population increases by the
+ * number of <em>Susceptible</em> population members that become
+ * <em>Infectious</em> (the first term). It also decreases by the proportion
+ * that <em>Recover</em> from the disease (middle term) and by the proportion
+ * that die (last term).
+ * </p>
+ * <p>
+ * Frequently, being infected by a disease will increase the likelihood that a
+ * population member will die. The model above needs to be enhanced to include
+ * the likelihood of a fatal infection and a potentially different rate at which
+ * infected members die.
+ * </p>
+ * <p>
+ * Let
+ * <ul>
+ * <li><em>x</em> be the <em>Infectious Mortality</em> which is the
+ * proportion of the population members who become <em>Infectious</em> that
+ * will eventually die.</li>
+ * <li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality Rate</em>.
+ * This is the rate at which fatally infected population members die
+ * specifically due to the disease. </li>
+ * </ul>
+ * Thus, we now have two types of <em>Infectious</em> population members,
+ * those that will eventually recover at rate <em>&sigma;</em>, and those
+ * that will eventually die at rate <em>&mu;<sub>i</sub></em> (of course,
+ * members in both states still die at the background rate <em>&mu;</em>).
+ * </p>
+ * <p>
+ * Let
+ * <ul>
+ * <li><em> i <sup>R</sup></em> be the normalized infectious population that
+ * will recover.</li>
+ * <li><em> i <sup>F</sup></em> be the normalized infectious population that
+ * will die from the disease.</li>
+ * <li><em> i = i <sup>R</sup> +  i <sup>F</sup></em> be the total normalized
+ * infectious population (as before).</li>
+ * </ul>
+ * </p>
+ * 
+ * <p>
+ * We modify our model to include these additional states and rates.
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &sigma;i <sup>R</sup>  &minus; &mu; s</em>
+ * </li>
+ * <li><em>&Delta;i <sup>R</sup> = (1-x)&beta;s i &minus; &sigma;i <sup>R</sup>  &minus; &mu;i <sup>R</sup></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> = x &beta;s i &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup></em>
+ * </li>
+ * </ul>
+ * </p>
+ * <h3>Spatial Adaptation</h3>
+ * <p>
+ * The "SI" disease model computations in STEM enhance these equations by
+ * adapting them to populations that are spatially distributed. This relaxes the
+ * assumption that the populations are at a single location and opens up the
+ * possibility that different locations could have different areas and numbers
+ * of population members (i.e., different population densities). To accommodate
+ * this situation STEM maintains separate disease state values for each location
+ * and uses unnormalized versions of the equations presented above. We develop
+ * those below.
+ * <p>
+ * To account for population differences at different locations, we define a new
+ * parameter <em>P<sub>l</sub></em> which is the number of population
+ * members at location <em>l</em> (Note: <em>P<sub>l</sub> = S + I</em>).
+ * We also need to account for variability in the disease transmission
+ * (infection) rate, &beta;, due to potentially different population densities.
+ * This modification is based upon the assumption that locations with greater
+ * population densities will have a higher effective transmission rates than
+ * locations with lower densities (i.e., one value can't be used for all
+ * locations). Thus, we need to replace the <em>&beta;</em> in the non-spatial
+ * versions of the equations with a <em>&beta; <sub>l</sub></em> that is
+ * specific to the location.
+ * </p>
+ * Making the substitution for <em>&beta;</em> and multiply both sides of the
+ * equations by <em>P<sub>l</sub></em>, we obtain:
+ * </p>
+ * 
+ * <ul>
+ * <li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> s i P<sub>l</sub> + &sigma; i <sup>R</sup>P<sub>l</sub>  &minus; &mu; s P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>R</sup> P<sub>l</sub> = (1-x)&beta;<sub>l</sub> s i P<sub>l</sub> &minus; &sigma; i <sup>R</sup> P<sub>l</sub> &minus; &mu;i <sup>R</sup> P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> P<sub>l</sub> = x &beta;<sub>l</sub>s i P<sub>l</sub> &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup> P<sub>l</sub></em>
+ * </li>
+ * </ul>
+ * 
+ * We choose the value for <em>&beta;<sub>l</sub></em> to be original
+ * <em>&beta;</em> scaled by the ratio between the population density at the
+ * location and the average population density of all locations.
+ * <ul>
+ * <li> <em> &beta;<sub>l</sub> = &beta; d<sub>l</sub>/APD</em></li>
+ * </ul>
+ * Where <em>d<sub>l</sub></em> is the population density at location
+ * <em>l</em>, and <em>APD</em> is the average population density for all
+ * locations.
+ * 
+ * 
+ * 
+ * 
+ * <p>
+ * Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of
+ * <em>Susceptible</em> population members at location <em>l</em>. , let
+ * <em>I<sub>l</sub> = i P<sub>l</sub></em> be the number of population
+ * members at location <em>l</em> that are <em>Infectious</em> (both states
+ * combined). For readability, we drop the <em>l</em> subscript and
+ * substitute.
+ * </p>
+ * 
+ * 
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> S i + &sigma;I <sup>R</sup>  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sub>l</sub> S i &minus; &sigma;I <sup>R</sup> &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sub>l</sub>S i  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * </ul>
+ * 
+ * Continuing with <em> i = I/P<sub>l</sub></em>, we have:
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; (&beta;<sub>l</sub>/P<sub>l</sub>) S I + &sigma;I <sup>R</sup>  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)(&beta;<sub>l</sub>/P<sub>l</sub>) S I &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x (&beta;<sub>l</sub>/P<sub>l</sub>) S I  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * </ul>
+ * 
+ * Letting
+ * <em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta; (d<sub>l</sub>/(APD * P<sub>l</sub>))
+ * </em>
+ * gives:
+ * 
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S I + &sigma;I <sup>R</sup>  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sup>*</sup> S I &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sup>*</sup> S I  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * </ul>
+ * 
+ * <p>
+ * Computing <em>&beta;<sup>*</sup></em> is straightforward. Let
+ * <em>TSF<sub>l</sub> = (d<sub>l</sub>/(APD * P<sub>l</sub>)</em> be
+ * the <em>transmission scale factor</em> at location <em>l</em>.
+ * </p>
+ * <p>
+ * Thus
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * </ul>
+ * </p>
+ * <p>
+ * Substituting <em>P<sub>l</sub> = S + I</em>, <em>APD = P/Area</em> and
+ * <em>d<sub>l</sub> = (S+I)/Area<sub>l</sub></em>, where <em>P</em> is
+ * the total population for all locations, <em>Area<sub>l</sub></em> is the
+ * area of location <em>l</em>, and <em>Area</em> is the total area of all
+ * locations, we get:
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = ((S+I)/Area<sub>l</sub>) / (P/Area *    (S+I))</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+ * <li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+ * <li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+ * </ul>
+ * So the <em>TSF<sub>l</sub></em> is the product of the reciprocal of the
+ * total population of all locations and the constant ratio between the area of
+ * the location and the total area of all locations. The former can be computed
+ * by accumulating the population of all locations as they are generated and the
+ * later ratio can be computed once at the start of the simulation.
+ * </p>
+ * 
+ * <h3>Neighboring Infectious Populations</h3>
+ * <p>
+ * The extension of the non-spatial model into a spatial one in STEM also needs
+ * to account for infectious population members that reside in a location's
+ * "neighbors". Consider a location with no infections that is physically
+ * adjacent to several locations that have large infectious populations. This
+ * physical adjacency would naturally lead to population-to-population contact
+ * and eventually to disease transmission. We need to further extend the
+ * equations we are here to incorporate this aspect of a spatially distributed
+ * population.
+ * </p>
+ * <p>
+ * In STEM, a location has another location as a neighbor <em>Relationship</em>
+ * that links it to that location. If the <em>Relationship</em> represents the
+ * exchange of of population members (i.e., some kind of
+ * {@link TransportRelationshipLabel transportation relationship} like pathways,
+ * roads or air travel) then it would be possible for <em>Infectious</em>
+ * population members from a neighbor to "visit" a location. We need to account
+ * for this potential by increasing the "effective" <em>Infectious</em>
+ * population at a location when doing our computations. Each Relationship has a
+ * rate at which population members travel from one location to another. It is
+ * assumed that the visitors would have the same level of "infectious contact"
+ * as an infectious member of the population at the current location (i.e., that
+ * they could could be counted as an infectious member of the population at the
+ * current location).
+ * </p>
+ * <p>
+ * The equations become:
+ * </p>
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) + &sigma;I <sup>R</sup>  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() )  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * </ul>
+ * </p>
+ * <p>
+ * Where
+ * <ul>
+ * <li>
+ * <em>I<sub>neighbor</sub>() = &sum; <sub>m</sub>   I <sub>m</sub>transport(m)/P<sub>m</sub></em>
+ * is the number of <em>Infectious</em> visitors from neighbor <em>m</em>.</li>
+ * <li>transport(m) = the the number of population members are transported from
+ * neighbor <em>m</em></li>
+ * <li>P<sub>m</sub> is the number of population members at neighbor
+ * <em>m</em></li>
+ * <li>I<sub>m</sub> is the number of <em>Infectious</em> population
+ * members at neighbor <em>m</em></li>
+ * </ul>
+ * </p>
+ * <p>
+ * Specific statistics on the total number of births, deaths and deaths due to
+ * the disease can be computed by adding the appropriate terms of the equations
+ * above.
+ * <ul>
+ * <li><em>B= &mu; (S + I)</em>, is the number of <em>Births</em> </li>
+ * <li><em>D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu;I<sup>R</sup></em>,is
+ * the total number of <em>Deaths</em></li>
+ * <li><em>DD= &mu;<sub>i</sub> I<sup>F</sup></em>, is the number of
+ * <em>Disease Deaths</em> </li>
+ * </ul>
+ * </p>
+ * 
+ * @see SIImpl#computeInfectiousMortalityRate(double, double)
+ * @see SIRLabel
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+public interface SI extends StandardDiseaseModel {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard disease model type URI.
+	 */
+	String URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_DISEASEMODEL_SEGMENT
+			+ "/si";
+
+	/**
+	 * This is the proportion which <em>Infectious</em> population
+	 * members die per time period. This is <em>&mu;<sub>i</sub></em>.
+	 * 
+	 * @return the increased rate at which infected population members that die per
+	 *         time period.
+	 * @see DiseaseModel#getBackgroundMortalityRate()
+	 * @model default="0.0"
+	 */
+	double getInfectiousMortalityRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortalityRate <em>Infectious Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Infectious Mortality Rate</em>' attribute.
+	 * @see #getInfectiousMortalityRate()
+	 * @generated
+	 */
+	void setInfectiousMortalityRate(double value);
+
+	/**
+	 * Compute the infectious mortality rate adjusted for a time delta
+	 * potentially different from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedInfectiousMortalityRate(final long timeDelta);
+
+	/**
+	 * This is the proportion of population members that become infected/exposed
+	 * per population member in the <em>Infectious</em> state, assuming the
+	 * entire population is in the <em>Susceptible</em> state, per time
+	 * period.
+	 * <p>
+	 * In the rate equation this coefficient is normalize by the ratio of the
+	 * Susceptible population to the total population. The final value may also
+	 * be rescaled based on variations in local population density (above or
+	 * below average). This is <em>&beta;</em>.
+	 * </p>
+	 * 
+	 * @return the number of population members that become infected per time
+	 *         period
+	 * @model default="0.0"
+	 */
+	double getTransmissionRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getTransmissionRate <em>Transmission Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transmission Rate</em>' attribute.
+	 * @see #getTransmissionRate()
+	 * @generated
+	 */
+	void setTransmissionRate(double value);
+
+	/**
+	 * Compute the transmission rate adjusted for a time delta potentially
+	 * different from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedTransmissionRate(final long timeDelta);
+
+	/**
+	 * By default this exponent is one (1.0) and the rate of infection scales as
+	 * the product of the Susceptible population and the Infectious population.
+	 * In a nonlinear model (which captures saturation of the immune system for
+	 * Susceptible population), the Infectious term is raise to this power (>=
+	 * 1.0) This exponent should never be less than one (that would imply
+	 * Susceptible population would become less susceptible as their probability
+	 * of exposure increases.
+	 * 
+	 * @return the non-linearity coefficient
+	 * @model default="1.0"
+	 */
+	double getNonLinearityCoefficient();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getNonLinearityCoefficient <em>Non Linearity Coefficient</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Non Linearity Coefficient</em>' attribute.
+	 * @see #getNonLinearityCoefficient()
+	 * @generated
+	 */
+	void setNonLinearityCoefficient(double value);
+
+	/**
+	 * This coefficient determines the number of population members that recover
+	 * from the disease per population member in the <em>Infectious</em>
+	 * state. This is <em>&sigma;</em>.
+	 * 
+	 * @return the number of population members that recover per time period
+	 * @model default="0.0"
+	 */
+	double getRecoveryRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getRecoveryRate <em>Recovery Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Recovery Rate</em>' attribute.
+	 * @see #getRecoveryRate()
+	 * @generated
+	 */
+	void setRecoveryRate(double value);
+
+	/**
+	 * Compute the recovery rate adjusted for a time delta potentially different
+	 * from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedRecoveryRate(final long timeDelta);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	double getEffectiveInfectious(Node node, StandardDiseaseModelLabel diseaseLabel, double onsiteInfectious);
+
+	/**
+	 * Two <code>Node</code>s that share a border exchange population members
+	 * through otherwise un-modeled transportation routes. This is the proportion
+	 * of the infectious population members in any adjacent <code>Node</code>
+	 * to include in the computations of another <code>Node</code>.
+	 * 
+	 * @return the proportion of the infectious population in physically
+	 *         adjacent <code>Node</code>s that contribute to the effective
+	 *         infectious population at the current <code>Node</code>.
+	 * @model default="0.05"
+	 */
+	double getPhysicallyAdjacentInfectiousProportion();
+	
+
+	/**
+	 * This parameter adjust the strength of mixing of people between
+	 * adjacent nodes <code>Node</code>s that are connected by one or more roads.
+	 * Exchange of population members by the road network can add or, or augment, mixing
+	 * based on  physical adjacency based on the relative strength of these independent
+	 * mixing proportions. Two <code>Node</code>s that are connected by one or more roads exchange population members
+	 * by road transport. This is the the proportion exchanged PER ROAD.
+	 * An road transport edge may represent multiple roads in which case the value returned
+	 * is scaled (multiplied) by the number of roads encoded by that edge.
+	 * This product is then the proportion of the infectious population members in any adjacent <code>Node</code>
+	 * to include in the computations of another <code>Node</code>.
+	 * 
+	 * @return the proportion of the infectious population in physically
+	 *         adjacent <code>Node</code>s that contribute to the effective
+	 *         infectious population at the current <code>Node</code>.
+	 * @model default="0.01"
+	 */
+	double getRoadNetworkInfectiousProportion();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getRoadNetworkInfectiousProportion <em>Road Network Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Road Network Infectious Proportion</em>' attribute.
+	 * @see #getRoadNetworkInfectiousProportion()
+	 * @generated
+	 */
+	void setRoadNetworkInfectiousProportion(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Infectious Mortality</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Infectious Mortality</em>' attribute.
+	 * @see #setInfectiousMortality(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSI_InfectiousMortality()
+	 * @model
+	 * @generated
+	 */
+	double getInfectiousMortality();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortality <em>Infectious Mortality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Infectious Mortality</em>' attribute.
+	 * @see #getInfectiousMortality()
+	 * @generated
+	 */
+	void setInfectiousMortality(double value);
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectiousProportion <em>Physically Adjacent Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Physically Adjacent Infectious Proportion</em>' attribute.
+	 * @see #getPhysicallyAdjacentInfectiousProportion()
+	 * @generated
+	 */
+	void setPhysicallyAdjacentInfectiousProportion(double value);
+
+
+	/**
+	 * This method replaces the onsiteInfectious value with an effectiveInfectious population
+	 * size based on mixing with other sites. For example, 
+	 * an implementation of this method replaces the onsiteInfectious value with an effectiveInfectious population
+	 * size based on mixing with neighhboring sites. In this implementation the edges are bidirectional
+	 * and have a fixed weight based on getPhysicallyAdjacentInfectiousProportion() (called in the helper method
+	 * getInfectiousChangeFromMixing(). But the mixing is also weighted by the areas and populations of a site relative
+	 * to the area and population of it's neighbors. Note that the value returned must be NORMALIZED by the total
+	 * population because the product beta * S * Ieffective must have units of persons. Since S has units of persons
+	 * the Ieffective must be dimensionless (normalized to the population). beta is the infection rate and has units
+	 * of inverse time.
+	 * @param node the node we are currently looking at to compute the next disease state
+	 * @param diseaseLabel the label for the current disease computation
+	 * @param onsiteInfectious the number of infectious people on site (at the node above)
+	 * @return the number of infectious population members in <code>Node</code>s
+	 *         that share a {@link CommonBorderRelationshipLabel} with this
+	 *         <code>Node</code>.
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getNormalizedEffectiveInfectious(final Node node, final StandardDiseaseModelLabel diseaseLabel, final double onsiteInfectious);
+
+} // SI
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIDiseaseModelState.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIDiseaseModelState.java
new file mode 100644
index 0000000..f44eb84
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIDiseaseModelState.java
@@ -0,0 +1,24 @@
+// SIDiseaseModelState.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model that contains state
+ * information for a SI STEM disease model's computations from one simulation
+ * cycle to another.
+ * 
+ * @model
+ */
+public interface SIDiseaseModelState extends StandardDiseaseModelState {
+	// Nothing
+} // SIDiseaseModelState
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIInfector.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIInfector.java
new file mode 100644
index 0000000..7b68ae7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIInfector.java
@@ -0,0 +1,49 @@
+// SIInfector.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for the initialization of an
+ * infectious population in a Standard disease model.
+ * 
+ * The infector removes population members from the <em>Susceptible</em> state
+ * to the <em>Infectious</em> state at at particular node.
+ * 
+ * @model
+ */
+public interface SIInfector extends StandardInfector {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard infector type URI.
+	 */
+	String URI_TYPE_SI_INFECTOR_SEGMENT = URI_TYPE_STANDARD_INFECTOR_SEGMENT
+			+ "/si";
+	
+	/**
+	 * @return the number of population members to be infectious
+	 * @model default="1";
+	 */
+	double getInfectiousCount();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIInfector#getInfectiousCount <em>Infectious Count</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Infectious Count</em>' attribute.
+	 * @see #getInfectiousCount()
+	 * @generated
+	 */
+	void setInfectiousCount(double value);
+
+} // SIInfector
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabel.java
new file mode 100644
index 0000000..c85f755
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabel.java
@@ -0,0 +1,208 @@
+// SILabel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an SI disease model
+ * dynamic label.
+ * 
+ * @see StandardDiseaseModel
+ * @see StandardDiseaseModelLabel
+ * @see StandardDiseaseModelLabelValue
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface SILabel extends StandardDiseaseModelLabel {
+
+	/**
+	 * Returns the value of the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Delta Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Delta Value</em>' reference.
+	 * @see #setDeltaValue(SILabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSILabel_DeltaValue()
+	 * @model
+	 * @generated
+	 */
+	SILabelValue getDeltaValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getDeltaValue <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Delta Value</em>' reference.
+	 * @see #getDeltaValue()
+	 * @generated
+	 */
+	void setDeltaValue(SILabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Probe Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Probe Value</em>' reference.
+	 * @see #setProbeValue(SILabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSILabel_ProbeValue()
+	 * @model
+	 * @generated
+	 */
+	SILabelValue getProbeValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getProbeValue <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Probe Value</em>' reference.
+	 * @see #getProbeValue()
+	 * @generated
+	 */
+	void setProbeValue(SILabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temp Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temp Value</em>' reference.
+	 * @see #setTempValue(SILabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSILabel_TempValue()
+	 * @model
+	 * @generated
+	 */
+	SILabelValue getTempValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getTempValue <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Temp Value</em>' reference.
+	 * @see #getTempValue()
+	 * @generated
+	 */
+	void setTempValue(SILabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' reference.
+	 * @see #setOriginalValue(SILabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSILabel_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	SILabelValue getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getOriginalValue <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' reference.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(SILabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error Scale</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Error Scale</em>' reference.
+	 * @see #setErrorScale(SILabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSILabel_ErrorScale()
+	 * @model
+	 * @generated
+	 */
+	SILabelValue getErrorScale();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getErrorScale <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Error Scale</em>' reference.
+	 * @see #getErrorScale()
+	 * @generated
+	 */
+	void setErrorScale(SILabelValue value);
+
+	/**
+	 * This is the top-level segment for all type URI's for SI disease model
+	 * labels.
+	 */
+	String URI_TYPE_SI_LABEL_SEGMENT = URI_TYPE_STANDARD_DISEASE_MODEL_LABEL_SEGMENT
+			+ "/si";
+
+	/**
+	 * @return the current number of "infectious" population members
+	 */
+	public double getI();
+
+	/**
+	 * @return set the current number of "infectious" population members
+	 */
+	public void setI(double i);
+
+	
+	/**
+	 * @return the incidence - which is the "new infectious" or "new exposed" number that comes from
+	 * the interaction term in any disease model. This corresponds to the count of actual new disease
+	 * reports in real public health surveillance statistics.
+	 */
+	public double getIncidence();
+	
+	/**
+	 * set the incidence - which is the "new infectious" or "new exposed" number that comes from
+	 * the interaction term in any disease model. This corresponds to the count of actual new disease
+	 * reports in real public health surveillance statistics.
+	 */
+	public void setIncidence(double incidence);
+
+
+
+	/**
+	 * @return the next number of "infectious" population members
+	 */
+	public double getNextI();
+
+	/**
+	 * @return set the number number of infectious population members
+	 */
+	public void setNextI(double i);
+
+
+} // SILabel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabelValue.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabelValue.java
new file mode 100644
index 0000000..62adfb6
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SILabelValue.java
@@ -0,0 +1,66 @@
+// SILabelValue.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an SI disease model label
+ * value. The values of this label record the number of population members who
+ * are in one of two states with respect to a particular disease.
+ * <ul>
+ * <li><em>Susceptible</em> which means that they are not infected by the
+ * disease, but they can become infected by the disease.</li>
+ * <li><em>Infectious</em> which means that population members are infected
+ * with the disease and they can infect others. </li>
+ * </ul>
+ * <p>
+ * Sub-classes could introduce additional states in which population members
+ * could exist.
+ * </p>
+ * 
+ * @see SIR
+ * @see SIRLabel
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface SILabelValue extends StandardDiseaseModelLabelValue {
+
+	/**
+	 * @return the number of population members in the <em>Infectious</em>
+	 *         state.
+	 * @model
+	 */
+	double getI();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SILabelValue#getI <em>I</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>I</em>' attribute.
+	 * @see #getI()
+	 * @generated
+	 */
+	void setI(double value);
+
+	/**
+	 * @return the incidence - which is the "new infectious" or "new exposed" number that comes from
+	 * the interaction term in any disease model. This corresponds to the count of actual new disease
+	 * reports in real public health surveillance statistics.
+	 * @see #getI()
+	 *
+	 */
+	double getIncidence();
+
+} // SILabelValue
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIR.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIR.java
new file mode 100644
index 0000000..b580693
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIR.java
@@ -0,0 +1,247 @@
+// SIR.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+
+/**
+ * A {@link DiseaseModel} with three states <em>Susceptible</em>,
+ * <em>Infectious</em> and <em>Recovered</em>(SIR).
+ * 
+ * <p>
+ * The basic <em>SIR</em> (Susceptible, Infectious, Recovered) disease model
+ * assumes a uniform population at a single location and that the population
+ * members are well "mixed", meaning that they are equally likely to meet and
+ * infect each other. This model, for a normalized population, is defined by the
+ * three equations below:
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &gamma;r &minus; &mu;s</em>
+ * </li>
+ * <li><em>&Delta;i = &beta;s i &minus; &sigma;i  &minus; &mu;i</em> </li>
+ * <li><em>&Delta;r =   &sigma;i &minus; &gamma;r &minus; &mu;r</em> </li>
+ * </ul>
+ * 
+ * 
+ * <p>
+ * Where:
+ * <ul>
+ * <li><em>s</em> is the normalized <em>Susceptible</em> population </li>
+ * <li> <em>i</em> is the normalized <em>Infectious</em> population</li>
+ * <li>&mu; is the background mortality rate, and, because it is assumed that
+ * the population was not growing or shrinking significantly before the onset of
+ * the disease, &mu; is also assumed to be the birth rate. </li>
+ * <li> <em>&beta;</em> is the disease transmission (infection) rate. This
+ * coefficient determines the number of population members that become
+ * infected/exposed per population member in the <em>Infectious</em> state,
+ * assuming the entire population is in the <em>Susceptible</em> state. </li>
+ * <li> &sigma; is the <em>Infectious</em> recovery rate. This coefficient
+ * determines the rate at which <em>Infectious</em> population members
+ * <em>Recover</em>.</li>
+ * <li><em>&gamma;</em> is the immunity loss rate. This coefficient
+ * determines the rate at which <em>Recovered</em> population members lose
+ * their immunity to the disease and become <em>Susceptible</em> again.</li>
+ * </ul>
+ * </p>
+ * Following basically the same derivation as outlined in {@link SI} for the SI
+ * model, these become:
+ * 
+ * <p>
+ * Let
+ * <ul>
+ * <li><em>x</em> be the <em>Infectious Mortality</em> which is the
+ * proportion of the population members who become <em>Infectious</em> that
+ * will eventually die.</li>
+ * <li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality Rate</em>.
+ * This is the rate at which fatally infected population members die
+ * specifically due to the disease. </li>
+ * </ul>
+ * Thus, we now have two types of <em>Infectious</em> population members,
+ * those that will eventually recover at rate <em>&sigma;</em>, and those that
+ * will eventually die at rate <em>&mu;<sub>i</sub></em> (of course, members
+ * in all three states still die at the background rate <em>&mu;</em>).
+ * </p>
+ * <p>
+ * Let
+ * <ul>
+ * <li><em> i <sup>R</sup></em> be the normalized infectious population that
+ * will recover.</li>
+ * <li><em> i <sup>F</sup></em> be the normalized infectious population that
+ * will die from the disease.</li>
+ * <li><em> i = i <sup>R</sup> +  i <sup>F</sup></em> be the total normalized
+ * infectious population (as before).</li>
+ * </ul>
+ * </p>
+ * 
+ * <p>
+ * We modify our model to include these additional states and rates.
+ * <ul>
+ * <li><em>&Delta;s = &mu;  &minus; &beta;s i + &gamma;r  &minus; &mu; s</em>
+ * </li>
+ * <li><em>&Delta;i <sup>R</sup> = (1-x)&beta;s i &minus; &sigma;i <sup>R</sup>  &minus; &mu;i <sup>R</sup></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> = x &beta;s i &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup></em>
+ * </li>
+ * <li><em>&Delta;r =   &sigma;i<sup>R</sup> &minus; &gamma;r &minus; &mu;r</em>
+ * </li>
+ * 
+ * </ul>
+ * </p>
+ * <h3>Spatial Adaptation</h3>
+ * <p>
+ * <ul>
+ * <li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> s i P<sub>l</sub> + &gamma; r P<sub>l</sub>  &minus; &mu; s P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>R</sup> P<sub>l</sub> = (1-x)&beta;<sub>l</sub> s i P<sub>l</sub> &minus; &sigma; i <sup>R</sup> P<sub>l</sub> &minus; &mu;i <sup>R</sup> P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;i <sup>F</sup> P<sub>l</sub> = x &beta;<sub>l</sub>s i P<sub>l</sub> &minus; (&mu; + &mu;<sub>i</sub>) i <sup>F</sup> P<sub>l</sub></em>
+ * </li>
+ * <li><em>&Delta;r P<sub>l</sub>=   &sigma;i<sup>R</sup>P<sub>l</sub> &minus; &gamma;r P<sub>l</sub>&minus; &mu;r P<sub>l</sub></em>
+ * </li>
+ * </ul>
+ * 
+ * <p>
+ * Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of
+ * <em>Susceptible</em> population members at location <em>l</em>.
+ * Similarly, let <em>I<sub>l</sub> = i P<sub>l</sub></em> be the number
+ * of population members at location <em>l</em> that are <em>Infectious</em>
+ * (both states combined), and let
+ * <em>r P<sub>l</sub> be the <em>Recovered</em> population.
+ * For readability, we drop the <em>l</em> subscript and substitute.
+ * </p>
+ * Substituting
+ *  
+ * </p>
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sub>l</sub> S i + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sub>l</sub> S i &minus; &sigma;I <sup>R</sup> &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sub>l</sub>S i  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *  <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ *   Continuing with <em> i = I/P<sub>l</sub></em>, we have:
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; (&beta;<sub>l</sub>/P<sub>l</sub>) S I + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)(&beta;<sub>l</sub>/P<sub>l</sub>) S I &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x (&beta;<sub>l</sub>/P<sub>l</sub>) S I  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *   <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ * Letting
+ * <em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta; (d<sub>l</sub>/(APD * P<sub>l</sub>))
+ * </em>
+ * gives:
+ * 
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S I + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sup>*</sup> S I &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sup>*</sup> S I  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ *   <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * TSF
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = ((S+I+R)/Area<sub>l</sub>) / (P/Area * (S+I+R))</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+ * <li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+ * <li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+ * </ul>
+ * <h3>Neighboring Infectious Populations</h3>
+ * </p>
+ * <ul>
+ * <li><em>&Delta;S = &mu;P<sub>l</sub>  &minus; &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) + &gamma;R  &minus; &mu; S</em>
+ * </li>
+ * <li><em>&Delta;I <sup>R</sup> = (1-x)&beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() ) &minus; &sigma;I <sup>R</sup>  &minus; &mu;I <sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;I <sup>F</sup> = x &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>() )  &minus; (&mu; + &mu;<sub>i</sub>) I <sup>F</sup> </em>
+ * </li>
+ * <li><em>&Delta;R=   &sigma;I<sup>R</sup> &minus; &gamma;R &minus; &mu;R</em> </li>
+ * </ul>
+ * 
+ * Specific statistics on the total number of births, deaths and deaths due to
+ * the disease can be computed by adding the appropriate terms of the equations
+ * above.
+ * <ul>
+ * <li><em>B= &mu; (S + I + R)</em>, is the number of <em>Births</em> </li>
+ * <li><em>D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu;I<sup>R</sup> + &mu;R</em>,is
+ * the total number of <em>Deaths</em></li>
+ * <li><em>DD= &mu;<sub>i</sub> I<sup>F</sup></em>, is the number of
+ * <em>Disease Deaths</em> </li>
+ * </ul>
+ * @see SI
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+public interface SIR extends SI {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard disease model type URI.
+	 */
+	String URI_TYPE_STANDARD_SIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_DISEASEMODEL_SEGMENT
+			+ "/sir";
+
+	/**
+	 * The Type URI for the standard SIR disease model
+	 */
+	URI URI_TYPE_STANDARD_SIR_DISEASE_MODEL = STEMURI
+			.createTypeURI(URI_TYPE_STANDARD_SIR_DISEASE_MODEL_SEGMENT);
+
+	/**
+	 * This coefficient determines the number of population members that lose
+	 * their immunity to a disease and become Susceptible to the disease per
+	 * population member in the <em>Recovered</em> state. A value of zero
+	 * (0.0), the default, means the population members never lose their
+	 * immunity. This is <em>&gamma;</em>.
+	 * 
+	 * @return the proportion of <em>Recovered</em> population members that
+	 *         lose their immunity per time period.
+	 * @model default="0.0"
+	 */
+	double getImmunityLossRate();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIR#getImmunityLossRate <em>Immunity Loss Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Immunity Loss Rate</em>' attribute.
+	 * @see #getImmunityLossRate()
+	 * @generated
+	 */
+	void setImmunityLossRate(double value);
+
+	/**
+	 * Compute the immunity rate adjusted for a time delta potentially different
+	 * from the time period specified for the rate.
+	 * 
+	 * @param timeDelta
+	 *            the time period (milliseconds) to which the rate is to be
+	 *            adjusted.
+	 * @return the adjusted rate
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double getAdjustedImmunityLossRate(final long timeDelta);
+
+} // SIR
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRInoculator.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRInoculator.java
new file mode 100644
index 0000000..4e39246
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRInoculator.java
@@ -0,0 +1,51 @@
+// SIRInoculator.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for the initialization of an
+ * inoculated population in a Standard disease model.
+ * 
+ * The inoculator removes a fraction of the population from the <em>Susceptible</em> state
+ * to the <em>Recovered</em> state at at particular node.
+ * 
+ * @model
+ */
+public interface SIRInoculator extends SIInfector {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard infector or inoculator type URI.
+	 */
+	String URI_TYPE_SIR_INFECTOR_SEGMENT = URI_TYPE_STANDARD_INFECTOR_SEGMENT
+			+ "/sir";
+	
+	/**
+	 * @return the number percentage of the population to be inoculated
+	 * @model default="1";
+	 */
+	double getInoculatedPercentage();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRInoculator#getInoculatedPercentage <em>Inoculated Percentage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Inoculated Percentage</em>' attribute.
+	 * @see #getInoculatedPercentage()
+	 * @generated
+	 */
+	void setInoculatedPercentage(double value);
+	
+	
+
+} // SIInoculator
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabel.java
new file mode 100644
index 0000000..a7c20dd
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabel.java
@@ -0,0 +1,216 @@
+// SIRLabel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+
+
+/**
+ * This interface defines a class in an EMF model for an SIR disease model
+ * dynamic label.
+ * 
+ * @see StandardDiseaseModel
+ * @see StandardDiseaseModelLabel
+ * @see StandardDiseaseModelLabelValue
+ * @see SI
+ * @see SILabel
+ * @see SILabelValue
+ * @see SIR
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface SIRLabel extends StandardDiseaseModelLabel {
+
+	/**
+	 * Returns the value of the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Delta Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Delta Value</em>' reference.
+	 * @see #setDeltaValue(SIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSIRLabel_DeltaValue()
+	 * @model
+	 * @generated
+	 */
+	SIRLabelValue getDeltaValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getDeltaValue <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Delta Value</em>' reference.
+	 * @see #getDeltaValue()
+	 * @generated
+	 */
+	void setDeltaValue(SIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Probe Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Probe Value</em>' reference.
+	 * @see #setProbeValue(SIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSIRLabel_ProbeValue()
+	 * @model
+	 * @generated
+	 */
+	SIRLabelValue getProbeValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getProbeValue <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Probe Value</em>' reference.
+	 * @see #getProbeValue()
+	 * @generated
+	 */
+	void setProbeValue(SIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Temp Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Temp Value</em>' reference.
+	 * @see #setTempValue(SIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSIRLabel_TempValue()
+	 * @model
+	 * @generated
+	 */
+	SIRLabelValue getTempValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getTempValue <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Temp Value</em>' reference.
+	 * @see #getTempValue()
+	 * @generated
+	 */
+	void setTempValue(SIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Original Value</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Original Value</em>' reference.
+	 * @see #setOriginalValue(SIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSIRLabel_OriginalValue()
+	 * @model
+	 * @generated
+	 */
+	SIRLabelValue getOriginalValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getOriginalValue <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Original Value</em>' reference.
+	 * @see #getOriginalValue()
+	 * @generated
+	 */
+	void setOriginalValue(SIRLabelValue value);
+
+	/**
+	 * Returns the value of the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Error Scale</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Error Scale</em>' reference.
+	 * @see #setErrorScale(SIRLabelValue)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getSIRLabel_ErrorScale()
+	 * @model
+	 * @generated
+	 */
+	SIRLabelValue getErrorScale();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getErrorScale <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Error Scale</em>' reference.
+	 * @see #getErrorScale()
+	 * @generated
+	 */
+	void setErrorScale(SIRLabelValue value);
+
+	/**
+	 * This is the top-level segment for all type URI's for SIR disease model
+	 * labels.
+	 */
+	String URI_TYPE_SIR_LABEL_SEGMENT = URI_TYPE_STANDARD_DISEASE_MODEL_LABEL_SEGMENT
+			+ "/sir";
+
+	/**
+	 * This is the type URI for standard SIR disease labels
+	 */
+	URI URI_TYPE_SIR_LABEL = STEMURI.createTypeURI(URI_TYPE_SIR_LABEL_SEGMENT);
+
+	/**
+	 * @return the current number of "recovered" population members
+	 */
+	public double getR();
+
+	/**
+	 * @param r
+	 *            the new value for the current number of "recovered" population
+	 *            members
+	 */
+	public void setR(double r);
+
+	/**
+	 * @return the next number of "recovered" population members
+	 */
+	public double getNextR();
+
+	/**
+	 * @param r
+	 *            the new value for the next number of "recovered" population
+	 *            members
+	 */
+	public void setNextR(double r);
+
+	/**
+	 * @return the current SIR label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	SIRLabelValue getCurrentSIRValue();
+
+	/**
+	 * @return the next SIR label value
+	 * @model volatile="true" changeable="false" resolveProxies="false"
+	 */
+	SIRLabelValue getNextSIRValue();
+} // SIRLabel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabelValue.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabelValue.java
new file mode 100644
index 0000000..3caf83d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/SIRLabelValue.java
@@ -0,0 +1,61 @@
+// SIRLabelValue.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an SIR disease model label
+ * value. The values of this label record the number of population members who
+ * are in one of three states with respect to a particular disease.
+ * <ul>
+ * <li><em>Susceptible</em> which means that they are not infected by the
+ * disease, but they can become infected by the disease.</li>
+ * <li><em>Infectious</em> which means that population members are infected
+ * with the disease and they can infect others. </li>
+ * <li><em>Recovered</em> which means that population members are not
+ * infected with the disease and <em>cannot</em> become infected by the
+ * disease. Note that in some disease models a population member in the
+ * <em>Recovered</em> state could transition to the <em>Susceptible</em>
+ * state and then become a candidate for re-infection.</li>
+ * </ul>
+ * <p>
+ * Sub-classes could introduce additional states in which population members
+ * could exist.
+ * </p>
+ * 
+ * @see SIR
+ * @see SIRLabel
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface SIRLabelValue extends SILabelValue {
+
+	/**
+	 * @return the number of population members in the <em>Recovered</em>
+	 *         state.
+	 * @model
+	 */
+	double getR();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue#getR <em>R</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>R</em>' attribute.
+	 * @see #getR()
+	 * @generated
+	 */
+	void setR(double value);
+
+} // SIRLabelValue
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModel.java
new file mode 100644
index 0000000..78ae943
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModel.java
@@ -0,0 +1,171 @@
+// StandardDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface defines a class in an EMF model for a Standard disease model.
+ * 
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+public interface StandardDiseaseModel extends DiseaseModel, IntegrationDecorator {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard disease model type URI.
+	 */
+	String URI_TYPE_STANDARD_DISEASEMODEL_SEGMENT = URI_TYPE_DISEASEMODEL_SEGMENT
+			+ "/standard";
+
+
+	/**
+	 * Add a number of population members to an accumulating value for the total
+	 * number of population members (in all disease states) for all {@link Node}s
+	 * for which this {@link StandardDiseseModel} computes
+	 * {@link StandardDiseaseModelLabel} values.
+	 * 
+	 * @param populationCount
+	 *            the number of population members to add to the total
+	 * @see #getTotalPopulationCount()
+	 * @see #setTotalPopulationCount(double)
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void addToTotalPopulationCount(final double populationCount);
+
+	/**
+	 * @return the total number of population members this disease model is
+	 *         processing
+	 * @see #setTotalPopulationCount(double)
+	 * @see #addToTotalPopulationCount(double)
+	 * @model default="0"
+	 */
+	double getTotalPopulationCount();
+	
+	/**
+	 * 	/**
+	 * The Transmission Coefficient (beta) must be scaled by
+	 * the local population density divided by a reference
+	 * population density (e.g. the particular location where beta is know or was measured)
+	 * For example, in the US the avg pop density is 32.9 people per square km
+	 * In China, 141.8 people per sq km,
+	 * In Europe 69.7 people per sq km
+     * The default value is 100 but this should be specified for any
+     * disease along with the value beta. This method is called in
+     * getTransmissionRateScaleFactor and used to computeTransions method for a diseaes model.
+	 * @return the Reference Population 
+	 * @see #SIImpl.getTransmissionRateScaleFactor()
+	 * @see #setReferencePopulationDensity(double)
+	 * @model default="100"
+	 */
+	double getReferencePopulationDensity();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getReferencePopulationDensity <em>Reference Population Density</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Reference Population Density</em>' attribute.
+	 * @see #getReferencePopulationDensity()
+	 * @generated
+	 */
+	void setReferencePopulationDensity(double value);
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalPopulationCount <em>Total Population Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Total Population Count</em>' attribute.
+	 * @see #getTotalPopulationCount()
+	 * @generated
+	 */
+	void setTotalPopulationCount(double value);
+
+	/**
+	 * Compute and store the reciprocal of the total population count. This
+	 * value only needs to be computed once for each simulation cycle so we
+	 * store the value so that we don't compute it more than once. This method
+	 * is called once just before the first cycle, and then again at the end of
+	 * every cycle when the current total population count has been determined.
+	 * 
+	 * @return 1/getTotalPopulationCount()
+	 * @see #getTotalPopulationCountReciprocal()
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	double computeTotalPopulationCountReciprocal();
+
+	/**
+	 * @return the reciprocal of the total population count.
+	 * @see #computeTotalPopulationReciprocal()
+	 * @model changeable="false"
+	 */
+	double getTotalPopulationCountReciprocal();
+
+	/**
+	 * Add the area value to the accumulating value for the total area of all
+	 * {@link Node}s for which this {@link StandardDiseseModel} computes
+	 * {@link StandardDiseaseModelLabel} values.
+	 * 
+	 * @param area
+	 *            the area to add (km^2)
+	 * @see #getTotalArea()
+	 * @see #setTotalArea(double)
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void addToTotalArea(final double area);
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model labelsMany="false"
+	 * @generated
+	 */
+	void calculateDelta(STEMTime time, long timeDelta, EList<DynamicLabel> labels);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	void doModelSpecificAdjustments(StandardDiseaseModelLabelValue label);
+
+	/**
+	 * @return the total area (km^2) occupied by the population whose disease
+	 *         state is processed by this <code>StandardDiseseModel</code>
+	 * @see #addToTotalArea(double)
+	 * @see #setTotalArea(double)
+	 * @model default="0"
+	 */
+	double getTotalArea();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalArea <em>Total Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Total Area</em>' attribute.
+	 * @see #getTotalArea()
+	 * @generated
+	 */
+	void setTotalArea(double value);
+
+} // StandardDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabel.java
new file mode 100644
index 0000000..9d0b35d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabel.java
@@ -0,0 +1,67 @@
+// StandardDiseaseModelLabel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+import org.eclipse.stem.core.graph.IntegrationLabel;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for a Standard Disease model
+ * label. A standard disease model is one that computes the changes in
+ * population state when there is a single <em>Susceptible</em> state.
+ * 
+ * @see SI
+ * @see SILabel
+ * @see SILabelValue
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+public interface StandardDiseaseModelLabel extends DiseaseModelLabel, IntegrationLabel {
+	/**
+	 * This is the top-level segment for all type URI's for standard disease
+	 * model labels.
+	 */
+	String URI_TYPE_STANDARD_DISEASE_MODEL_LABEL_SEGMENT = URI_TYPE_DISEASE_MODEL_LABEL_SEGMENT
+			+ "/standard";
+
+	/**
+	 * @return the current number of "susceptible" population members
+	 */
+	public double getS();
+
+	/**
+	 * @param s
+	 *            the new value for the current number of "susceptible"
+	 *            population members
+	 */
+	public void setS(double s);
+
+	/**
+	 * @return the next number of "susceptible" population members
+	 */
+	public double getNextS();
+
+	/**
+	 * @param s
+	 *            the new value for the next number of "susceptible" population
+	 *            members
+	 */
+	public void setNextS(double s);
+
+	
+} // StandardDiseaseModelLabel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabelValue.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabelValue.java
new file mode 100644
index 0000000..2167574
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelLabelValue.java
@@ -0,0 +1,51 @@
+// StandardDiseaseModelLabelValue.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Standard disease model
+ * label value. In a standard disease model population members can be in a
+ * single <em>Susceptible</em> state, which means that they are not exposed or
+ * infected by a disease. Sub-classes could introduce additional states in which
+ * population members could exist.
+ * 
+ * @see SIR
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * @see SEIR
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model abstract="true"
+ */
+
+public interface StandardDiseaseModelLabelValue extends DiseaseModelLabelValue {
+	/**
+	 * @return the number of population members in the <em>Susceptible</em>
+	 *         state.
+	 * @model
+	 */
+	double getS();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue#getS <em>S</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>S</em>' attribute.
+	 * @see #getS()
+	 * @generated
+	 */
+	void setS(double value);
+
+
+} // StandardDiseaseModelLabelValue
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelState.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelState.java
new file mode 100644
index 0000000..72e61fc
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardDiseaseModelState.java
@@ -0,0 +1,44 @@
+// StandardDiseaseModelState.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model that contains state
+ * information for a standard STEM disease model's computations from one
+ * simulation cycle to another.
+ * 
+ * @model abstract="true"
+ */
+public interface StandardDiseaseModelState extends DiseaseModelState {
+
+	/**
+	 * 
+	 * @return the ratio between the total area of all {@link Node}s processed
+	 *         by the {@link StandardDiseaseModel} and the area of the
+	 *         {@link Node} that the {@link DiseaseModelLabel} is associated
+	 *         with.
+	 * @model
+	 */
+	double getAreaRatio();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState#getAreaRatio <em>Area Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Area Ratio</em>' attribute.
+	 * @see #getAreaRatio()
+	 * @generated
+	 */
+	void setAreaRatio(double value);
+
+}// StandardDiseaseModelState
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardFactory.java
new file mode 100644
index 0000000..8a66296
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardFactory.java
@@ -0,0 +1,240 @@
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage
+ * @generated
+ */
+public interface StandardFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StandardFactory eINSTANCE = org.eclipse.stem.diseasemodels.standard.impl.StandardFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Deterministic SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Deterministic SEIR Disease Model</em>'.
+	 * @generated
+	 */
+	DeterministicSEIRDiseaseModel createDeterministicSEIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Deterministic SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Deterministic SI Disease Model</em>'.
+	 * @generated
+	 */
+	DeterministicSIDiseaseModel createDeterministicSIDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Deterministic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Deterministic SIR Disease Model</em>'.
+	 * @generated
+	 */
+	DeterministicSIRDiseaseModel createDeterministicSIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>SEIR Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SEIR Label</em>'.
+	 * @generated
+	 */
+	SEIRLabel createSEIRLabel();
+
+	/**
+	 * Returns a new object of class '<em>SEIR Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SEIR Label Value</em>'.
+	 * @generated
+	 */
+	SEIRLabelValue createSEIRLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>SI Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SI Disease Model State</em>'.
+	 * @generated
+	 */
+	SIDiseaseModelState createSIDiseaseModelState();
+
+	/**
+	 * Returns a new object of class '<em>SI Infector</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SI Infector</em>'.
+	 * @generated
+	 */
+	SIInfector createSIInfector();
+
+	/**
+	 * Returns a new object of class '<em>SI Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SI Label</em>'.
+	 * @generated
+	 */
+	SILabel createSILabel();
+
+	/**
+	 * Returns a new object of class '<em>SI Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SI Label Value</em>'.
+	 * @generated
+	 */
+	SILabelValue createSILabelValue();
+
+	/**
+	 * Returns a new object of class '<em>SIR Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SIR Label</em>'.
+	 * @generated
+	 */
+	SIRLabel createSIRLabel();
+
+	/**
+	 * Returns a new object of class '<em>SIR Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SIR Label Value</em>'.
+	 * @generated
+	 */
+	SIRLabelValue createSIRLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic SEIR Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticSEIRDiseaseModel createStochasticSEIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic SI Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticSIDiseaseModel createStochasticSIDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic SIR Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticSIRDiseaseModel createStochasticSIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Aggregating SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Aggregating SI Disease Model</em>'.
+	 * @generated
+	 */
+	AggregatingSIDiseaseModel createAggregatingSIDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Aggregating Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Aggregating Disease Model State</em>'.
+	 * @generated
+	 */
+	AggregatingDiseaseModelState createAggregatingDiseaseModelState();
+
+	/**
+	 * Returns a new object of class '<em>Aggregating SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Aggregating SEIR Disease Model</em>'.
+	 * @generated
+	 */
+	AggregatingSEIRDiseaseModel createAggregatingSEIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Aggregating SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Aggregating SIR Disease Model</em>'.
+	 * @generated
+	 */
+	AggregatingSIRDiseaseModel createAggregatingSIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>SIR Inoculator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>SIR Inoculator</em>'.
+	 * @generated
+	 */
+	SIRInoculator createSIRInoculator();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic Poisson SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic Poisson SI Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticPoissonSIDiseaseModel createStochasticPoissonSIDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic Poisson SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic Poisson SIR Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticPoissonSIRDiseaseModel createStochasticPoissonSIRDiseaseModel();
+
+	/**
+	 * Returns a new object of class '<em>Stochastic Poisson SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Stochastic Poisson SEIR Disease Model</em>'.
+	 * @generated
+	 */
+	StochasticPoissonSEIRDiseaseModel createStochasticPoissonSEIRDiseaseModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	StandardPackage getStandardPackage();
+
+} //StandardFactory
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardInfector.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardInfector.java
new file mode 100644
index 0000000..5d1fd18
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardInfector.java
@@ -0,0 +1,31 @@
+// StandardInfector.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for the initialization of an
+ * infectious population in a Standard disease model.
+ * 
+ * The infector removes population members from the <em>Susceptible</em> state
+ * to the <em>Infectious</em> state.
+ * 
+ * @model abstract="true"
+ */
+public interface StandardInfector extends Infector {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard infector type URI.
+	 */
+	String URI_TYPE_STANDARD_INFECTOR_SEGMENT = URI_TYPE_INFECTOR_SEGMENT
+			+ "/standard";
+} // StandardInfector
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardPackage.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardPackage.java
new file mode 100644
index 0000000..13d2951
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardPackage.java
@@ -0,0 +1,8901 @@
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.standard.StandardFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StandardPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "standard";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/diseasemodels/standard.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.diseasemodels.standard";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StandardPackage eINSTANCE = org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl <em>Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModel()
+	 * @generated
+	 */
+	int DISEASE_MODEL = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__URI = ModelPackage.NODE_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__TYPE_URI = ModelPackage.NODE_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__DUBLIN_CORE = ModelPackage.NODE_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__LABELS_TO_UPDATE = ModelPackage.NODE_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__GRAPH = ModelPackage.NODE_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__ENABLED = ModelPackage.NODE_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__GRAPH_DECORATED = ModelPackage.NODE_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__PROGRESS = ModelPackage.NODE_DECORATOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__POPULATION_IDENTIFIER = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__TIME_PERIOD = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__DISEASE_NAME = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__RELATIVE_TOLERANCE = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__FINITE_DIFFERENCE = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__FREQUENCY_DEPENDENT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL__BACKGROUND_BIRTH_RATE = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 7;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_FEATURE_COUNT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl <em>Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModel()
+	 * @generated
+	 */
+	int STANDARD_DISEASE_MODEL = 19;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__URI = DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__TYPE_URI = DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__DUBLIN_CORE = DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__LABELS_TO_UPDATE = DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__GRAPH = DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__ENABLED = DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__GRAPH_DECORATED = DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__PROGRESS = DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__POPULATION_IDENTIFIER = DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__TIME_PERIOD = DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__DISEASE_NAME = DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__RELATIVE_TOLERANCE = DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__FINITE_DIFFERENCE = DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__FREQUENCY_DEPENDENT = DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT = DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__TOTAL_AREA = DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_FEATURE_COUNT = DISEASE_MODEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl <em>SI</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSI()
+	 * @generated
+	 */
+	int SI = 11;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__URI = STANDARD_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TYPE_URI = STANDARD_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__DUBLIN_CORE = STANDARD_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__LABELS_TO_UPDATE = STANDARD_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__GRAPH = STANDARD_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__ENABLED = STANDARD_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__GRAPH_DECORATED = STANDARD_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__PROGRESS = STANDARD_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__BACKGROUND_MORTALITY_RATE = STANDARD_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__POPULATION_IDENTIFIER = STANDARD_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TIME_PERIOD = STANDARD_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__DISEASE_NAME = STANDARD_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__RELATIVE_TOLERANCE = STANDARD_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__FINITE_DIFFERENCE = STANDARD_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__FREQUENCY_DEPENDENT = STANDARD_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__BACKGROUND_BIRTH_RATE = STANDARD_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TOTAL_POPULATION_COUNT = STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TOTAL_POPULATION_COUNT_RECIPROCAL = STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TOTAL_AREA = STANDARD_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__REFERENCE_POPULATION_DENSITY = STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__TRANSMISSION_RATE = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__NON_LINEARITY_COEFFICIENT = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__RECOVERY_RATE = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__INFECTIOUS_MORTALITY_RATE = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__ROAD_NETWORK_INFECTIOUS_PROPORTION = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI__INFECTIOUS_MORTALITY = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 6;
+
+	/**
+	 * The number of structural features of the '<em>SI</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_FEATURE_COUNT = STANDARD_DISEASE_MODEL_FEATURE_COUNT + 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRImpl <em>SIR</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIR()
+	 * @generated
+	 */
+	int SIR = 16;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__URI = SI__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TYPE_URI = SI__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__DUBLIN_CORE = SI__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__LABELS_TO_UPDATE = SI__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__GRAPH = SI__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__ENABLED = SI__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__GRAPH_DECORATED = SI__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__PROGRESS = SI__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__BACKGROUND_MORTALITY_RATE = SI__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__POPULATION_IDENTIFIER = SI__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TIME_PERIOD = SI__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__DISEASE_NAME = SI__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__RELATIVE_TOLERANCE = SI__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__FINITE_DIFFERENCE = SI__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__FREQUENCY_DEPENDENT = SI__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__BACKGROUND_BIRTH_RATE = SI__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TOTAL_POPULATION_COUNT = SI__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TOTAL_POPULATION_COUNT_RECIPROCAL = SI__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TOTAL_AREA = SI__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__REFERENCE_POPULATION_DENSITY = SI__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__TRANSMISSION_RATE = SI__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__NON_LINEARITY_COEFFICIENT = SI__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__RECOVERY_RATE = SI__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__INFECTIOUS_MORTALITY_RATE = SI__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__ROAD_NETWORK_INFECTIOUS_PROPORTION = SI__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__INFECTIOUS_MORTALITY = SI__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR__IMMUNITY_LOSS_RATE = SI_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SIR</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_FEATURE_COUNT = SI_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl <em>SEIR</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIR()
+	 * @generated
+	 */
+	int SEIR = 8;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__URI = SIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TYPE_URI = SIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__DUBLIN_CORE = SIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__LABELS_TO_UPDATE = SIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__GRAPH = SIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__ENABLED = SIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__GRAPH_DECORATED = SIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__PROGRESS = SIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__BACKGROUND_MORTALITY_RATE = SIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__POPULATION_IDENTIFIER = SIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TIME_PERIOD = SIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__DISEASE_NAME = SIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__RELATIVE_TOLERANCE = SIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__FINITE_DIFFERENCE = SIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__FREQUENCY_DEPENDENT = SIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__BACKGROUND_BIRTH_RATE = SIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TOTAL_POPULATION_COUNT = SIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TOTAL_POPULATION_COUNT_RECIPROCAL = SIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TOTAL_AREA = SIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__REFERENCE_POPULATION_DENSITY = SIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__TRANSMISSION_RATE = SIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__NON_LINEARITY_COEFFICIENT = SIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__RECOVERY_RATE = SIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__INFECTIOUS_MORTALITY_RATE = SIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__ROAD_NETWORK_INFECTIOUS_PROPORTION = SIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__INFECTIOUS_MORTALITY = SIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__IMMUNITY_LOSS_RATE = SIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Incubation Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR__INCUBATION_RATE = SIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SEIR</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_FEATURE_COUNT = SIR_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl <em>Deterministic SEIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSEIRDiseaseModel()
+	 * @generated
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__URI = SEIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TYPE_URI = SEIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__DUBLIN_CORE = SEIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__LABELS_TO_UPDATE = SEIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__GRAPH = SEIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__ENABLED = SEIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__GRAPH_DECORATED = SEIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__PROGRESS = SEIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SEIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SEIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TIME_PERIOD = SEIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__DISEASE_NAME = SEIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SEIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__FINITE_DIFFERENCE = SEIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SEIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SEIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SEIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SEIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TOTAL_AREA = SEIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SEIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__TRANSMISSION_RATE = SEIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SEIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__RECOVERY_RATE = SEIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SEIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SEIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SEIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SEIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SEIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Incubation Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL__INCUBATION_RATE = SEIR__INCUBATION_RATE;
+
+	/**
+	 * The number of structural features of the '<em>Deterministic SEIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SEIR_DISEASE_MODEL_FEATURE_COUNT = SEIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl <em>Deterministic SI Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSIDiseaseModel()
+	 * @generated
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__URI = SI__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TYPE_URI = SI__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__DUBLIN_CORE = SI__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__LABELS_TO_UPDATE = SI__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__GRAPH = SI__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__ENABLED = SI__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__GRAPH_DECORATED = SI__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__PROGRESS = SI__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SI__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__POPULATION_IDENTIFIER = SI__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TIME_PERIOD = SI__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__DISEASE_NAME = SI__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__RELATIVE_TOLERANCE = SI__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__FINITE_DIFFERENCE = SI__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__FREQUENCY_DEPENDENT = SI__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SI__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SI__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SI__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TOTAL_AREA = SI__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SI__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__TRANSMISSION_RATE = SI__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SI__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__RECOVERY_RATE = SI__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SI__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SI__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY = SI__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The number of structural features of the '<em>Deterministic SI Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SI_DISEASE_MODEL_FEATURE_COUNT = SI_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl <em>Deterministic SIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSIRDiseaseModel()
+	 * @generated
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__URI = SIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TYPE_URI = SIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__DUBLIN_CORE = SIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE = SIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__GRAPH = SIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__ENABLED = SIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED = SIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__PROGRESS = SIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TIME_PERIOD = SIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__DISEASE_NAME = SIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE = SIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TOTAL_AREA = SIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE = SIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__RECOVERY_RATE = SIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The number of structural features of the '<em>Deterministic SIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETERMINISTIC_SIR_DISEASE_MODEL_FEATURE_COUNT = SIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl <em>Disease Model Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelLabel()
+	 * @generated
+	 */
+	int DISEASE_MODEL_LABEL = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__URI = GraphPackage.DYNAMIC_NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__TYPE_URI = GraphPackage.DYNAMIC_NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__DUBLIN_CORE = GraphPackage.DYNAMIC_NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__CURRENT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__IDENTIFIABLE = GraphPackage.DYNAMIC_NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__NEXT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__DECORATOR = GraphPackage.DYNAMIC_NODE_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__NODE = GraphPackage.DYNAMIC_NODE_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__POPULATION_LABEL = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model State</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL_FEATURE_COUNT = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl <em>Disease Model Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelLabelValue()
+	 * @generated
+	 */
+	int DISEASE_MODEL_LABEL_VALUE = 5;
+
+	/**
+	 * The feature id for the '<em><b>Disease Deaths</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL_VALUE__INCIDENCE = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl <em>Disease Model State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelState()
+	 * @generated
+	 */
+	int DISEASE_MODEL_STATE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_STATE__LABEL = 0;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DISEASE_MODEL_STATE_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl <em>Infector</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getInfector()
+	 * @generated
+	 */
+	int INFECTOR = 7;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__URI = ModelPackage.NODE_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__TYPE_URI = ModelPackage.NODE_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__DUBLIN_CORE = ModelPackage.NODE_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__LABELS_TO_UPDATE = ModelPackage.NODE_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__GRAPH = ModelPackage.NODE_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__ENABLED = ModelPackage.NODE_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__GRAPH_DECORATED = ModelPackage.NODE_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__PROGRESS = ModelPackage.NODE_DECORATOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__DISEASE_MODEL = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__TARGET_URI = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__DISEASE_NAME = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Target ISO Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__TARGET_ISO_KEY = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Infect</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__LABELS_TO_INFECT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR__POPULATION_IDENTIFIER = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Infector</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INFECTOR_FEATURE_COUNT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelImpl <em>Disease Model Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelLabel()
+	 * @generated
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL = 20;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__URI = DISEASE_MODEL_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__TYPE_URI = DISEASE_MODEL_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__DUBLIN_CORE = DISEASE_MODEL_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__CURRENT_VALUE = DISEASE_MODEL_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__IDENTIFIABLE = DISEASE_MODEL_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE_VALID = DISEASE_MODEL_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE = DISEASE_MODEL_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__DECORATOR = DISEASE_MODEL_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__NODE = DISEASE_MODEL_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__POPULATION_LABEL = DISEASE_MODEL_LABEL__POPULATION_LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model State</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE = DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT = DISEASE_MODEL_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl <em>SI Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSILabel()
+	 * @generated
+	 */
+	int SI_LABEL = 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl <em>SIR Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRLabel()
+	 * @generated
+	 */
+	int SIR_LABEL = 17;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl <em>SEIR Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIRLabel()
+	 * @generated
+	 */
+	int SEIR_LABEL = 9;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__URI = STANDARD_DISEASE_MODEL_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__TYPE_URI = STANDARD_DISEASE_MODEL_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__DUBLIN_CORE = STANDARD_DISEASE_MODEL_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = STANDARD_DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__CURRENT_VALUE = STANDARD_DISEASE_MODEL_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__IDENTIFIABLE = STANDARD_DISEASE_MODEL_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__NEXT_VALUE_VALID = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__NEXT_VALUE = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__DECORATOR = STANDARD_DISEASE_MODEL_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__NODE = STANDARD_DISEASE_MODEL_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__POPULATION_LABEL = STANDARD_DISEASE_MODEL_LABEL__POPULATION_LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model State</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__DISEASE_MODEL_STATE = STANDARD_DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__DELTA_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__PROBE_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__TEMP_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__ORIGINAL_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL__ERROR_SCALE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>SEIR Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_FEATURE_COUNT = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl <em>Disease Model Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelLabelValue()
+	 * @generated
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE = 21;
+
+	/**
+	 * The feature id for the '<em><b>Disease Deaths</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS = DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS;
+
+	/**
+	 * The feature id for the '<em><b>Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT = DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE__INCIDENCE = DISEASE_MODEL_LABEL_VALUE__INCIDENCE;
+
+	/**
+	 * The feature id for the '<em><b>S</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE__S = DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT = DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl <em>SI Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSILabelValue()
+	 * @generated
+	 */
+	int SI_LABEL_VALUE = 15;
+
+	/**
+	 * The feature id for the '<em><b>Disease Deaths</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE__DISEASE_DEATHS = STANDARD_DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS;
+
+	/**
+	 * The feature id for the '<em><b>Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE__POPULATION_COUNT = STANDARD_DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE__INCIDENCE = STANDARD_DISEASE_MODEL_LABEL_VALUE__INCIDENCE;
+
+	/**
+	 * The feature id for the '<em><b>S</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE__S = STANDARD_DISEASE_MODEL_LABEL_VALUE__S;
+
+	/**
+	 * The feature id for the '<em><b>I</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE__I = STANDARD_DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SI Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_VALUE_FEATURE_COUNT = STANDARD_DISEASE_MODEL_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl <em>SIR Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRLabelValue()
+	 * @generated
+	 */
+	int SIR_LABEL_VALUE = 18;
+
+	/**
+	 * The feature id for the '<em><b>Disease Deaths</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__DISEASE_DEATHS = SI_LABEL_VALUE__DISEASE_DEATHS;
+
+	/**
+	 * The feature id for the '<em><b>Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__POPULATION_COUNT = SI_LABEL_VALUE__POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__INCIDENCE = SI_LABEL_VALUE__INCIDENCE;
+
+	/**
+	 * The feature id for the '<em><b>S</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__S = SI_LABEL_VALUE__S;
+
+	/**
+	 * The feature id for the '<em><b>I</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__I = SI_LABEL_VALUE__I;
+
+	/**
+	 * The feature id for the '<em><b>R</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE__R = SI_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SIR Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_VALUE_FEATURE_COUNT = SI_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl <em>SEIR Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIRLabelValue()
+	 * @generated
+	 */
+	int SEIR_LABEL_VALUE = 10;
+
+	/**
+	 * The feature id for the '<em><b>Disease Deaths</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__DISEASE_DEATHS = SIR_LABEL_VALUE__DISEASE_DEATHS;
+
+	/**
+	 * The feature id for the '<em><b>Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__POPULATION_COUNT = SIR_LABEL_VALUE__POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__INCIDENCE = SIR_LABEL_VALUE__INCIDENCE;
+
+	/**
+	 * The feature id for the '<em><b>S</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__S = SIR_LABEL_VALUE__S;
+
+	/**
+	 * The feature id for the '<em><b>I</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__I = SIR_LABEL_VALUE__I;
+
+	/**
+	 * The feature id for the '<em><b>R</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__R = SIR_LABEL_VALUE__R;
+
+	/**
+	 * The feature id for the '<em><b>E</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE__E = SIR_LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SEIR Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SEIR_LABEL_VALUE_FEATURE_COUNT = SIR_LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl <em>Disease Model State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelState()
+	 * @generated
+	 */
+	int STANDARD_DISEASE_MODEL_STATE = 22;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_STATE__LABEL = DISEASE_MODEL_STATE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Area Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_STATE__AREA_RATIO = DISEASE_MODEL_STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Disease Model State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_DISEASE_MODEL_STATE_FEATURE_COUNT = DISEASE_MODEL_STATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl <em>SI Disease Model State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIDiseaseModelState()
+	 * @generated
+	 */
+	int SI_DISEASE_MODEL_STATE = 12;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_DISEASE_MODEL_STATE__LABEL = STANDARD_DISEASE_MODEL_STATE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Area Ratio</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_DISEASE_MODEL_STATE__AREA_RATIO = STANDARD_DISEASE_MODEL_STATE__AREA_RATIO;
+
+	/**
+	 * The number of structural features of the '<em>SI Disease Model State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_DISEASE_MODEL_STATE_FEATURE_COUNT = STANDARD_DISEASE_MODEL_STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardInfectorImpl <em>Infector</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardInfectorImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardInfector()
+	 * @generated
+	 */
+	int STANDARD_INFECTOR = 23;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__URI = INFECTOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__TYPE_URI = INFECTOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__DUBLIN_CORE = INFECTOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__LABELS_TO_UPDATE = INFECTOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__GRAPH = INFECTOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__ENABLED = INFECTOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__GRAPH_DECORATED = INFECTOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__PROGRESS = INFECTOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__DISEASE_MODEL = INFECTOR__DISEASE_MODEL;
+
+	/**
+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__TARGET_URI = INFECTOR__TARGET_URI;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__DISEASE_NAME = INFECTOR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Target ISO Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__TARGET_ISO_KEY = INFECTOR__TARGET_ISO_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Infect</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__LABELS_TO_INFECT = INFECTOR__LABELS_TO_INFECT;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR__POPULATION_IDENTIFIER = INFECTOR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The number of structural features of the '<em>Infector</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_INFECTOR_FEATURE_COUNT = INFECTOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIInfectorImpl <em>SI Infector</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIInfectorImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIInfector()
+	 * @generated
+	 */
+	int SI_INFECTOR = 13;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__URI = STANDARD_INFECTOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__TYPE_URI = STANDARD_INFECTOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__DUBLIN_CORE = STANDARD_INFECTOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__LABELS_TO_UPDATE = STANDARD_INFECTOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__GRAPH = STANDARD_INFECTOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__ENABLED = STANDARD_INFECTOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__GRAPH_DECORATED = STANDARD_INFECTOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__PROGRESS = STANDARD_INFECTOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__DISEASE_MODEL = STANDARD_INFECTOR__DISEASE_MODEL;
+
+	/**
+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__TARGET_URI = STANDARD_INFECTOR__TARGET_URI;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__DISEASE_NAME = STANDARD_INFECTOR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Target ISO Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__TARGET_ISO_KEY = STANDARD_INFECTOR__TARGET_ISO_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Infect</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__LABELS_TO_INFECT = STANDARD_INFECTOR__LABELS_TO_INFECT;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__POPULATION_IDENTIFIER = STANDARD_INFECTOR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR__INFECTIOUS_COUNT = STANDARD_INFECTOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SI Infector</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_INFECTOR_FEATURE_COUNT = STANDARD_INFECTOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__URI = STANDARD_DISEASE_MODEL_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__TYPE_URI = STANDARD_DISEASE_MODEL_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__DUBLIN_CORE = STANDARD_DISEASE_MODEL_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = STANDARD_DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__CURRENT_VALUE = STANDARD_DISEASE_MODEL_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__IDENTIFIABLE = STANDARD_DISEASE_MODEL_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__NEXT_VALUE_VALID = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__NEXT_VALUE = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__DECORATOR = STANDARD_DISEASE_MODEL_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__NODE = STANDARD_DISEASE_MODEL_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__POPULATION_LABEL = STANDARD_DISEASE_MODEL_LABEL__POPULATION_LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model State</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__DISEASE_MODEL_STATE = STANDARD_DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__DELTA_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__PROBE_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__TEMP_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__ORIGINAL_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL__ERROR_SCALE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>SI Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SI_LABEL_FEATURE_COUNT = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__URI = STANDARD_DISEASE_MODEL_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__TYPE_URI = STANDARD_DISEASE_MODEL_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__DUBLIN_CORE = STANDARD_DISEASE_MODEL_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = STANDARD_DISEASE_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__CURRENT_VALUE = STANDARD_DISEASE_MODEL_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__IDENTIFIABLE = STANDARD_DISEASE_MODEL_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__NEXT_VALUE_VALID = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__NEXT_VALUE = STANDARD_DISEASE_MODEL_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__DECORATOR = STANDARD_DISEASE_MODEL_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__NODE = STANDARD_DISEASE_MODEL_LABEL__NODE;
+
+	/**
+	 * The feature id for the '<em><b>Population Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__POPULATION_LABEL = STANDARD_DISEASE_MODEL_LABEL__POPULATION_LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model State</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__DISEASE_MODEL_STATE = STANDARD_DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE;
+
+	/**
+	 * The feature id for the '<em><b>Delta Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__DELTA_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Probe Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__PROBE_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Temp Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__TEMP_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Original Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__ORIGINAL_VALUE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Error Scale</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL__ERROR_SCALE = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>SIR Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_LABEL_FEATURE_COUNT = STANDARD_DISEASE_MODEL_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl <em>Stochastic SEIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSEIRDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL = 24;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__URI = SEIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TYPE_URI = SEIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__DUBLIN_CORE = SEIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__LABELS_TO_UPDATE = SEIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__GRAPH = SEIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__ENABLED = SEIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__GRAPH_DECORATED = SEIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__PROGRESS = SEIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SEIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SEIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TIME_PERIOD = SEIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__DISEASE_NAME = SEIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SEIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__FINITE_DIFFERENCE = SEIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SEIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SEIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SEIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SEIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TOTAL_AREA = SEIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SEIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__TRANSMISSION_RATE = SEIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SEIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__RECOVERY_RATE = SEIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SEIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SEIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SEIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SEIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SEIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Incubation Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__INCUBATION_RATE = SEIR__INCUBATION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__SEED = SEIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR = SEIR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL__GAIN = SEIR_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic SEIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SEIR_DISEASE_MODEL_FEATURE_COUNT = SEIR_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl <em>Stochastic SI Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSIDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL = 25;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__URI = SI__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TYPE_URI = SI__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__DUBLIN_CORE = SI__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__LABELS_TO_UPDATE = SI__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__GRAPH = SI__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__ENABLED = SI__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__GRAPH_DECORATED = SI__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__PROGRESS = SI__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SI__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__POPULATION_IDENTIFIER = SI__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TIME_PERIOD = SI__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__DISEASE_NAME = SI__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__RELATIVE_TOLERANCE = SI__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__FINITE_DIFFERENCE = SI__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__FREQUENCY_DEPENDENT = SI__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SI__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SI__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SI__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TOTAL_AREA = SI__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SI__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__TRANSMISSION_RATE = SI__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SI__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__RECOVERY_RATE = SI__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SI__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SI__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY = SI__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__SEED = SI_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR = SI_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL__GAIN = SI_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic SI Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SI_DISEASE_MODEL_FEATURE_COUNT = SI_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl <em>Stochastic SIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSIRDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL = 26;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__URI = SIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TYPE_URI = SIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__DUBLIN_CORE = SIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__LABELS_TO_UPDATE = SIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__GRAPH = SIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__ENABLED = SIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__GRAPH_DECORATED = SIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__PROGRESS = SIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TIME_PERIOD = SIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__DISEASE_NAME = SIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__FINITE_DIFFERENCE = SIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TOTAL_AREA = SIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__TRANSMISSION_RATE = SIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__RECOVERY_RATE = SIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__SEED = SIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR = SIR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL__GAIN = SIR_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic SIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_SIR_DISEASE_MODEL_FEATURE_COUNT = SIR_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSanityChecker()
+	 * @generated
+	 */
+	int SANITY_CHECKER = 27;
+
+	/**
+	 * The number of structural features of the '<em>Sanity Checker</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SANITY_CHECKER_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.IntegrationLabel
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationLabel()
+	 * @generated
+	 */
+	int INTEGRATION_LABEL = 28;
+
+	/**
+	 * The number of structural features of the '<em>Integration Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGRATION_LABEL_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationLabelValue()
+	 * @generated
+	 */
+	int INTEGRATION_LABEL_VALUE = 29;
+
+	/**
+	 * The number of structural features of the '<em>Integration Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGRATION_LABEL_VALUE_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.IntegrationDecorator
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationDecorator()
+	 * @generated
+	 */
+	int INTEGRATION_DECORATOR = 30;
+
+	/**
+	 * The number of structural features of the '<em>Integration Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTEGRATION_DECORATOR_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIDiseaseModelImpl <em>Aggregating SI Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSIDiseaseModel()
+	 * @generated
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL = 31;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__URI = SI__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TYPE_URI = SI__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__DUBLIN_CORE = SI__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__LABELS_TO_UPDATE = SI__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__GRAPH = SI__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__ENABLED = SI__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__GRAPH_DECORATED = SI__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__PROGRESS = SI__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SI__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__POPULATION_IDENTIFIER = SI__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TIME_PERIOD = SI__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__DISEASE_NAME = SI__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__RELATIVE_TOLERANCE = SI__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__FINITE_DIFFERENCE = SI__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__FREQUENCY_DEPENDENT = SI__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SI__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SI__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SI__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TOTAL_AREA = SI__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SI__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__TRANSMISSION_RATE = SI__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SI__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__RECOVERY_RATE = SI__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SI__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SI__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY = SI__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The number of structural features of the '<em>Aggregating SI Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SI_DISEASE_MODEL_FEATURE_COUNT = SI_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingDiseaseModelStateImpl <em>Aggregating Disease Model State</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingDiseaseModelStateImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingDiseaseModelState()
+	 * @generated
+	 */
+	int AGGREGATING_DISEASE_MODEL_STATE = 32;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_DISEASE_MODEL_STATE__LABEL = DISEASE_MODEL_STATE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Childrens Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS = DISEASE_MODEL_STATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Aggregating Disease Model State</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_DISEASE_MODEL_STATE_FEATURE_COUNT = DISEASE_MODEL_STATE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIRDiseaseModelImpl <em>Aggregating SIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSIRDiseaseModel()
+	 * @generated
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL = 34;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__URI = AGGREGATING_SI_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TYPE_URI = AGGREGATING_SI_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__DUBLIN_CORE = AGGREGATING_SI_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__LABELS_TO_UPDATE = AGGREGATING_SI_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__GRAPH = AGGREGATING_SI_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__ENABLED = AGGREGATING_SI_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__GRAPH_DECORATED = AGGREGATING_SI_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__PROGRESS = AGGREGATING_SI_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = AGGREGATING_SI_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER = AGGREGATING_SI_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TIME_PERIOD = AGGREGATING_SI_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__DISEASE_NAME = AGGREGATING_SI_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE = AGGREGATING_SI_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__FINITE_DIFFERENCE = AGGREGATING_SI_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = AGGREGATING_SI_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = AGGREGATING_SI_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = AGGREGATING_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = AGGREGATING_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TOTAL_AREA = AGGREGATING_SI_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = AGGREGATING_SI_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__TRANSMISSION_RATE = AGGREGATING_SI_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = AGGREGATING_SI_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__RECOVERY_RATE = AGGREGATING_SI_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = AGGREGATING_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = AGGREGATING_SI_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = AGGREGATING_SI_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = AGGREGATING_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The number of structural features of the '<em>Aggregating SIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SIR_DISEASE_MODEL_FEATURE_COUNT = AGGREGATING_SI_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSEIRDiseaseModelImpl <em>Aggregating SEIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSEIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSEIRDiseaseModel()
+	 * @generated
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL = 33;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__URI = AGGREGATING_SIR_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TYPE_URI = AGGREGATING_SIR_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__DUBLIN_CORE = AGGREGATING_SIR_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__LABELS_TO_UPDATE = AGGREGATING_SIR_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__GRAPH = AGGREGATING_SIR_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__ENABLED = AGGREGATING_SIR_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__GRAPH_DECORATED = AGGREGATING_SIR_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__PROGRESS = AGGREGATING_SIR_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = AGGREGATING_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__POPULATION_IDENTIFIER = AGGREGATING_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TIME_PERIOD = AGGREGATING_SIR_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__DISEASE_NAME = AGGREGATING_SIR_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__RELATIVE_TOLERANCE = AGGREGATING_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__FINITE_DIFFERENCE = AGGREGATING_SIR_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = AGGREGATING_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = AGGREGATING_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = AGGREGATING_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = AGGREGATING_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TOTAL_AREA = AGGREGATING_SIR_DISEASE_MODEL__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = AGGREGATING_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__TRANSMISSION_RATE = AGGREGATING_SIR_DISEASE_MODEL__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = AGGREGATING_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__RECOVERY_RATE = AGGREGATING_SIR_DISEASE_MODEL__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = AGGREGATING_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = AGGREGATING_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = AGGREGATING_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = AGGREGATING_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The number of structural features of the '<em>Aggregating SEIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int AGGREGATING_SEIR_DISEASE_MODEL_FEATURE_COUNT = AGGREGATING_SIR_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl <em>Stochastic Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_DISEASE_MODEL = 35;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__URI = DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__TYPE_URI = DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__DUBLIN_CORE = DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__LABELS_TO_UPDATE = DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__GRAPH = DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__ENABLED = DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__GRAPH_DECORATED = DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__PROGRESS = DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__POPULATION_IDENTIFIER = DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__TIME_PERIOD = DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__DISEASE_NAME = DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__RELATIVE_TOLERANCE = DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__FINITE_DIFFERENCE = DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__FREQUENCY_DEPENDENT = DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__SEED = DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR = DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_DISEASE_MODEL_FEATURE_COUNT = DISEASE_MODEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl <em>Stochastic Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardStochasticDiseaseModel()
+	 * @generated
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL = 36;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__URI = STOCHASTIC_DISEASE_MODEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__TYPE_URI = STOCHASTIC_DISEASE_MODEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__DUBLIN_CORE = STOCHASTIC_DISEASE_MODEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__LABELS_TO_UPDATE = STOCHASTIC_DISEASE_MODEL__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__GRAPH = STOCHASTIC_DISEASE_MODEL__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__ENABLED = STOCHASTIC_DISEASE_MODEL__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__GRAPH_DECORATED = STOCHASTIC_DISEASE_MODEL__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__PROGRESS = STOCHASTIC_DISEASE_MODEL__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = STOCHASTIC_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__POPULATION_IDENTIFIER = STOCHASTIC_DISEASE_MODEL__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__TIME_PERIOD = STOCHASTIC_DISEASE_MODEL__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__DISEASE_NAME = STOCHASTIC_DISEASE_MODEL__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__RELATIVE_TOLERANCE = STOCHASTIC_DISEASE_MODEL__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__FINITE_DIFFERENCE = STOCHASTIC_DISEASE_MODEL__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__FREQUENCY_DEPENDENT = STOCHASTIC_DISEASE_MODEL__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = STOCHASTIC_DISEASE_MODEL__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Seed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__SEED = STOCHASTIC_DISEASE_MODEL__SEED;
+
+	/**
+	 * The feature id for the '<em><b>Random Generator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR = STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR;
+
+	/**
+	 * The feature id for the '<em><b>Gain</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN = STOCHASTIC_DISEASE_MODEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STANDARD_STOCHASTIC_DISEASE_MODEL_FEATURE_COUNT = STOCHASTIC_DISEASE_MODEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl <em>SIR Inoculator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRInoculator()
+	 * @generated
+	 */
+	int SIR_INOCULATOR = 37;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__URI = SI_INFECTOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__TYPE_URI = SI_INFECTOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__DUBLIN_CORE = SI_INFECTOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__LABELS_TO_UPDATE = SI_INFECTOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__GRAPH = SI_INFECTOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__ENABLED = SI_INFECTOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__GRAPH_DECORATED = SI_INFECTOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__PROGRESS = SI_INFECTOR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Disease Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__DISEASE_MODEL = SI_INFECTOR__DISEASE_MODEL;
+
+	/**
+	 * The feature id for the '<em><b>Target URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__TARGET_URI = SI_INFECTOR__TARGET_URI;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__DISEASE_NAME = SI_INFECTOR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Target ISO Key</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__TARGET_ISO_KEY = SI_INFECTOR__TARGET_ISO_KEY;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Infect</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__LABELS_TO_INFECT = SI_INFECTOR__LABELS_TO_INFECT;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__POPULATION_IDENTIFIER = SI_INFECTOR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__INFECTIOUS_COUNT = SI_INFECTOR__INFECTIOUS_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Inoculated Percentage</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR__INOCULATED_PERCENTAGE = SI_INFECTOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>SIR Inoculator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIR_INOCULATOR_FEATURE_COUNT = SI_INFECTOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIDiseaseModelImpl <em>Stochastic Poisson SI Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSIDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL = 38;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__URI = SI__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TYPE_URI = SI__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__DUBLIN_CORE = SI__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__LABELS_TO_UPDATE = SI__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__GRAPH = SI__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__ENABLED = SI__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__GRAPH_DECORATED = SI__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__PROGRESS = SI__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SI__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__POPULATION_IDENTIFIER = SI__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TIME_PERIOD = SI__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__DISEASE_NAME = SI__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__RELATIVE_TOLERANCE = SI__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__FINITE_DIFFERENCE = SI__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__FREQUENCY_DEPENDENT = SI__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SI__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SI__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SI__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TOTAL_AREA = SI__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SI__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__TRANSMISSION_RATE = SI__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SI__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__RECOVERY_RATE = SI__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SI__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SI__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL__INFECTIOUS_MORTALITY = SI__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic Poisson SI Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SI_DISEASE_MODEL_FEATURE_COUNT = SI_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIRDiseaseModelImpl <em>Stochastic Poisson SIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSIRDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL = 39;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__URI = SIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TYPE_URI = SIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__DUBLIN_CORE = SIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__LABELS_TO_UPDATE = SIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__GRAPH = SIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__ENABLED = SIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__GRAPH_DECORATED = SIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__PROGRESS = SIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TIME_PERIOD = SIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__DISEASE_NAME = SIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__FINITE_DIFFERENCE = SIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TOTAL_AREA = SIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__TRANSMISSION_RATE = SIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__RECOVERY_RATE = SIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic Poisson SIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SIR_DISEASE_MODEL_FEATURE_COUNT = SIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSEIRDiseaseModelImpl <em>Stochastic Poisson SEIR Disease Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSEIRDiseaseModelImpl
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSEIRDiseaseModel()
+	 * @generated
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL = 40;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__URI = SEIR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TYPE_URI = SEIR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__DUBLIN_CORE = SEIR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__LABELS_TO_UPDATE = SEIR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__GRAPH = SEIR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__ENABLED = SEIR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__GRAPH_DECORATED = SEIR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__PROGRESS = SEIR__PROGRESS;
+
+	/**
+	 * The feature id for the '<em><b>Background Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = SEIR__BACKGROUND_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__POPULATION_IDENTIFIER = SEIR__POPULATION_IDENTIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TIME_PERIOD = SEIR__TIME_PERIOD;
+
+	/**
+	 * The feature id for the '<em><b>Disease Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__DISEASE_NAME = SEIR__DISEASE_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__RELATIVE_TOLERANCE = SEIR__RELATIVE_TOLERANCE;
+
+	/**
+	 * The feature id for the '<em><b>Finite Difference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__FINITE_DIFFERENCE = SEIR__FINITE_DIFFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Frequency Dependent</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__FREQUENCY_DEPENDENT = SEIR__FREQUENCY_DEPENDENT;
+
+	/**
+	 * The feature id for the '<em><b>Background Birth Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__BACKGROUND_BIRTH_RATE = SEIR__BACKGROUND_BIRTH_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT = SEIR__TOTAL_POPULATION_COUNT;
+
+	/**
+	 * The feature id for the '<em><b>Total Population Count Reciprocal</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = SEIR__TOTAL_POPULATION_COUNT_RECIPROCAL;
+
+	/**
+	 * The feature id for the '<em><b>Total Area</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TOTAL_AREA = SEIR__TOTAL_AREA;
+
+	/**
+	 * The feature id for the '<em><b>Reference Population Density</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = SEIR__REFERENCE_POPULATION_DENSITY;
+
+	/**
+	 * The feature id for the '<em><b>Transmission Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__TRANSMISSION_RATE = SEIR__TRANSMISSION_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Non Linearity Coefficient</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__NON_LINEARITY_COEFFICIENT = SEIR__NON_LINEARITY_COEFFICIENT;
+
+	/**
+	 * The feature id for the '<em><b>Recovery Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__RECOVERY_RATE = SEIR__RECOVERY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY_RATE = SEIR__INFECTIOUS_MORTALITY_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = SEIR__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Road Network Infectious Proportion</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__ROAD_NETWORK_INFECTIOUS_PROPORTION = SEIR__ROAD_NETWORK_INFECTIOUS_PROPORTION;
+
+	/**
+	 * The feature id for the '<em><b>Infectious Mortality</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__INFECTIOUS_MORTALITY = SEIR__INFECTIOUS_MORTALITY;
+
+	/**
+	 * The feature id for the '<em><b>Immunity Loss Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__IMMUNITY_LOSS_RATE = SEIR__IMMUNITY_LOSS_RATE;
+
+	/**
+	 * The feature id for the '<em><b>Incubation Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL__INCUBATION_RATE = SEIR__INCUBATION_RATE;
+
+	/**
+	 * The number of structural features of the '<em>Stochastic Poisson SEIR Disease Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STOCHASTIC_POISSON_SEIR_DISEASE_MODEL_FEATURE_COUNT = SEIR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 41;
+
+
+	/**
+	 * The meta object id for the '<em>EList</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.EList
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getEList()
+	 * @generated
+	 */
+	int ELIST = 42;
+
+
+	/**
+	 * The meta object id for the '<em>Random</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.util.Random
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getRandom()
+	 * @generated
+	 */
+	int RANDOM = 43;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel <em>Deterministic SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Deterministic SEIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel
+	 * @generated
+	 */
+	EClass getDeterministicSEIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel <em>Deterministic SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Deterministic SI Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel
+	 * @generated
+	 */
+	EClass getDeterministicSIDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel <em>Deterministic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Deterministic SIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel
+	 * @generated
+	 */
+	EClass getDeterministicSIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	EClass getDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundMortalityRate <em>Background Mortality Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Background Mortality Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundMortalityRate()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_BackgroundMortalityRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getPopulationIdentifier <em>Population Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Population Identifier</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getPopulationIdentifier()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_PopulationIdentifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getTimePeriod <em>Time Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time Period</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getTimePeriod()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_TimePeriod();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getDiseaseName <em>Disease Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Disease Name</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getDiseaseName()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_DiseaseName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getRelativeTolerance <em>Relative Tolerance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Relative Tolerance</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getRelativeTolerance()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_RelativeTolerance();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFiniteDifference <em>Finite Difference</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Finite Difference</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFiniteDifference()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_FiniteDifference();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFrequencyDependent <em>Frequency Dependent</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Frequency Dependent</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#isFrequencyDependent()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_FrequencyDependent();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundBirthRate <em>Background Birth Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Background Birth Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getBackgroundBirthRate()
+	 * @see #getDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getDiseaseModel_BackgroundBirthRate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel <em>Disease Model Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel
+	 * @generated
+	 */
+	EClass getDiseaseModelLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getPopulationLabel <em>Population Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Population Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getPopulationLabel()
+	 * @see #getDiseaseModelLabel()
+	 * @generated
+	 */
+	EReference getDiseaseModelLabel_PopulationLabel();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getDiseaseModelState <em>Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Disease Model State</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getDiseaseModelState()
+	 * @see #getDiseaseModelLabel()
+	 * @generated
+	 */
+	EReference getDiseaseModelLabel_DiseaseModelState();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue <em>Disease Model Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model Label Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue
+	 * @generated
+	 */
+	EClass getDiseaseModelLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getDiseaseDeaths <em>Disease Deaths</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Disease Deaths</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getDiseaseDeaths()
+	 * @see #getDiseaseModelLabelValue()
+	 * @generated
+	 */
+	EAttribute getDiseaseModelLabelValue_DiseaseDeaths();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getPopulationCount <em>Population Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Population Count</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getPopulationCount()
+	 * @see #getDiseaseModelLabelValue()
+	 * @generated
+	 */
+	EAttribute getDiseaseModelLabelValue_PopulationCount();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getIncidence <em>Incidence</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Incidence</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getIncidence()
+	 * @see #getDiseaseModelLabelValue()
+	 * @generated
+	 */
+	EAttribute getDiseaseModelLabelValue_Incidence();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelState <em>Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model State</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelState
+	 * @generated
+	 */
+	EClass getDiseaseModelState();
+
+	/**
+	 * Returns the meta object for the container reference '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelState#getLabel <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the container reference '<em>Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelState#getLabel()
+	 * @see #getDiseaseModelState()
+	 * @generated
+	 */
+	EReference getDiseaseModelState_Label();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.Infector <em>Infector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Infector</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector
+	 * @generated
+	 */
+	EClass getInfector();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseModel()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EReference getInfector_DiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.Infector#getTargetURI <em>Target URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Target URI</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getTargetURI()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EAttribute getInfector_TargetURI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseName <em>Disease Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Disease Name</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getDiseaseName()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EAttribute getInfector_DiseaseName();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.Infector#getTargetISOKey <em>Target ISO Key</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Target ISO Key</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getTargetISOKey()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EAttribute getInfector_TargetISOKey();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.diseasemodels.standard.Infector#getLabelsToInfect <em>Labels To Infect</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Labels To Infect</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getLabelsToInfect()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EReference getInfector_LabelsToInfect();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.Infector#getPopulationIdentifier <em>Population Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Population Identifier</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector#getPopulationIdentifier()
+	 * @see #getInfector()
+	 * @generated
+	 */
+	EAttribute getInfector_PopulationIdentifier();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SEIR <em>SEIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SEIR</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIR
+	 * @generated
+	 */
+	EClass getSEIR();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SEIR#getIncubationRate <em>Incubation Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Incubation Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIR#getIncubationRate()
+	 * @see #getSEIR()
+	 * @generated
+	 */
+	EAttribute getSEIR_IncubationRate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel <em>SEIR Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SEIR Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel
+	 * @generated
+	 */
+	EClass getSEIRLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getDeltaValue <em>Delta Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Delta Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getDeltaValue()
+	 * @see #getSEIRLabel()
+	 * @generated
+	 */
+	EReference getSEIRLabel_DeltaValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getProbeValue <em>Probe Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Probe Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getProbeValue()
+	 * @see #getSEIRLabel()
+	 * @generated
+	 */
+	EReference getSEIRLabel_ProbeValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getTempValue <em>Temp Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Temp Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getTempValue()
+	 * @see #getSEIRLabel()
+	 * @generated
+	 */
+	EReference getSEIRLabel_TempValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getOriginalValue()
+	 * @see #getSEIRLabel()
+	 * @generated
+	 */
+	EReference getSEIRLabel_OriginalValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getErrorScale <em>Error Scale</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Error Scale</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getErrorScale()
+	 * @see #getSEIRLabel()
+	 * @generated
+	 */
+	EReference getSEIRLabel_ErrorScale();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue <em>SEIR Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SEIR Label Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabelValue
+	 * @generated
+	 */
+	EClass getSEIRLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue#getE <em>E</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>E</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabelValue#getE()
+	 * @see #getSEIRLabelValue()
+	 * @generated
+	 */
+	EAttribute getSEIRLabelValue_E();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SI</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI
+	 * @generated
+	 */
+	EClass getSI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getTransmissionRate <em>Transmission Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Transmission Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getTransmissionRate()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_TransmissionRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getNonLinearityCoefficient <em>Non Linearity Coefficient</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Non Linearity Coefficient</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getNonLinearityCoefficient()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_NonLinearityCoefficient();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getRecoveryRate <em>Recovery Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Recovery Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getRecoveryRate()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_RecoveryRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortalityRate <em>Infectious Mortality Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Infectious Mortality Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortalityRate()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_InfectiousMortalityRate();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectiousProportion <em>Physically Adjacent Infectious Proportion</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Physically Adjacent Infectious Proportion</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectiousProportion()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_PhysicallyAdjacentInfectiousProportion();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getRoadNetworkInfectiousProportion <em>Road Network Infectious Proportion</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Road Network Infectious Proportion</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getRoadNetworkInfectiousProportion()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_RoadNetworkInfectiousProportion();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortality <em>Infectious Mortality</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Infectious Mortality</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getInfectiousMortality()
+	 * @see #getSI()
+	 * @generated
+	 */
+	EAttribute getSI_InfectiousMortality();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState <em>SI Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SI Disease Model State</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState
+	 * @generated
+	 */
+	EClass getSIDiseaseModelState();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIInfector <em>SI Infector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SI Infector</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIInfector
+	 * @generated
+	 */
+	EClass getSIInfector();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SIInfector#getInfectiousCount <em>Infectious Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Infectious Count</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIInfector#getInfectiousCount()
+	 * @see #getSIInfector()
+	 * @generated
+	 */
+	EAttribute getSIInfector_InfectiousCount();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SILabel <em>SI Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SI Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel
+	 * @generated
+	 */
+	EClass getSILabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getDeltaValue <em>Delta Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Delta Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getDeltaValue()
+	 * @see #getSILabel()
+	 * @generated
+	 */
+	EReference getSILabel_DeltaValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getProbeValue <em>Probe Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Probe Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getProbeValue()
+	 * @see #getSILabel()
+	 * @generated
+	 */
+	EReference getSILabel_ProbeValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getTempValue <em>Temp Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Temp Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getTempValue()
+	 * @see #getSILabel()
+	 * @generated
+	 */
+	EReference getSILabel_TempValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getOriginalValue()
+	 * @see #getSILabel()
+	 * @generated
+	 */
+	EReference getSILabel_OriginalValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getErrorScale <em>Error Scale</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Error Scale</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getErrorScale()
+	 * @see #getSILabel()
+	 * @generated
+	 */
+	EReference getSILabel_ErrorScale();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SILabelValue <em>SI Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SI Label Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabelValue
+	 * @generated
+	 */
+	EClass getSILabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SILabelValue#getI <em>I</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>I</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabelValue#getI()
+	 * @see #getSILabelValue()
+	 * @generated
+	 */
+	EAttribute getSILabelValue_I();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SIR</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR
+	 * @generated
+	 */
+	EClass getSIR();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SIR#getImmunityLossRate <em>Immunity Loss Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Immunity Loss Rate</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR#getImmunityLossRate()
+	 * @see #getSIR()
+	 * @generated
+	 */
+	EAttribute getSIR_ImmunityLossRate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel <em>SIR Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SIR Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel
+	 * @generated
+	 */
+	EClass getSIRLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getDeltaValue <em>Delta Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Delta Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getDeltaValue()
+	 * @see #getSIRLabel()
+	 * @generated
+	 */
+	EReference getSIRLabel_DeltaValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getProbeValue <em>Probe Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Probe Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getProbeValue()
+	 * @see #getSIRLabel()
+	 * @generated
+	 */
+	EReference getSIRLabel_ProbeValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getTempValue <em>Temp Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Temp Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getTempValue()
+	 * @see #getSIRLabel()
+	 * @generated
+	 */
+	EReference getSIRLabel_TempValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getOriginalValue <em>Original Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Original Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getOriginalValue()
+	 * @see #getSIRLabel()
+	 * @generated
+	 */
+	EReference getSIRLabel_OriginalValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getErrorScale <em>Error Scale</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Error Scale</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getErrorScale()
+	 * @see #getSIRLabel()
+	 * @generated
+	 */
+	EReference getSIRLabel_ErrorScale();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue <em>SIR Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SIR Label Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabelValue
+	 * @generated
+	 */
+	EClass getSIRLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue#getR <em>R</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>R</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabelValue#getR()
+	 * @see #getSIRLabelValue()
+	 * @generated
+	 */
+	EAttribute getSIRLabelValue_R();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel
+	 * @generated
+	 */
+	EClass getStandardDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalPopulationCount <em>Total Population Count</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Total Population Count</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalPopulationCount()
+	 * @see #getStandardDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModel_TotalPopulationCount();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalPopulationCountReciprocal <em>Total Population Count Reciprocal</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Total Population Count Reciprocal</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalPopulationCountReciprocal()
+	 * @see #getStandardDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModel_TotalPopulationCountReciprocal();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalArea <em>Total Area</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Total Area</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getTotalArea()
+	 * @see #getStandardDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModel_TotalArea();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getReferencePopulationDensity <em>Reference Population Density</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Reference Population Density</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getReferencePopulationDensity()
+	 * @see #getStandardDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModel_ReferencePopulationDensity();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel <em>Disease Model Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model Label</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel
+	 * @generated
+	 */
+	EClass getStandardDiseaseModelLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue <em>Disease Model Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model Label Value</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue
+	 * @generated
+	 */
+	EClass getStandardDiseaseModelLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue#getS <em>S</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>S</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue#getS()
+	 * @see #getStandardDiseaseModelLabelValue()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModelLabelValue_S();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState <em>Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Disease Model State</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState
+	 * @generated
+	 */
+	EClass getStandardDiseaseModelState();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState#getAreaRatio <em>Area Ratio</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Area Ratio</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState#getAreaRatio()
+	 * @see #getStandardDiseaseModelState()
+	 * @generated
+	 */
+	EAttribute getStandardDiseaseModelState_AreaRatio();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardInfector <em>Infector</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Infector</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardInfector
+	 * @generated
+	 */
+	EClass getStandardInfector();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel <em>Stochastic SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic SEIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticSEIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel <em>Stochastic SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic SI Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticSIDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel <em>Stochastic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic SIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticSIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Sanity Checker</em>'.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @model instanceClass="org.eclipse.stem.core.common.SanityChecker"
+	 * @generated
+	 */
+	EClass getSanityChecker();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integration Label</em>'.
+	 * @see org.eclipse.stem.core.graph.IntegrationLabel
+	 * @model instanceClass="org.eclipse.stem.core.graph.IntegrationLabel"
+	 * @generated
+	 */
+	EClass getIntegrationLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integration Label Value</em>'.
+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue
+	 * @model instanceClass="org.eclipse.stem.core.graph.IntegrationLabelValue"
+	 * @generated
+	 */
+	EClass getIntegrationLabelValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Integration Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.IntegrationDecorator
+	 * @model instanceClass="org.eclipse.stem.core.model.IntegrationDecorator"
+	 * @generated
+	 */
+	EClass getIntegrationDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel <em>Aggregating SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Aggregating SI Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel
+	 * @generated
+	 */
+	EClass getAggregatingSIDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState <em>Aggregating Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Aggregating Disease Model State</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState
+	 * @generated
+	 */
+	EClass getAggregatingDiseaseModelState();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState#getChildrensLabels <em>Childrens Labels</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Childrens Labels</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState#getChildrensLabels()
+	 * @see #getAggregatingDiseaseModelState()
+	 * @generated
+	 */
+	EReference getAggregatingDiseaseModelState_ChildrensLabels();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel <em>Aggregating SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Aggregating SEIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel
+	 * @generated
+	 */
+	EClass getAggregatingSEIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel <em>Aggregating SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Aggregating SIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel
+	 * @generated
+	 */
+	EClass getAggregatingSIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel#getSeed <em>Seed</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Seed</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel#getSeed()
+	 * @see #getStochasticDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStochasticDiseaseModel_Seed();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel#getRandomGenerator <em>Random Generator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Random Generator</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel#getRandomGenerator()
+	 * @see #getStochasticDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStochasticDiseaseModel_RandomGenerator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel
+	 * @generated
+	 */
+	EClass getStandardStochasticDiseaseModel();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#getGain <em>Gain</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Gain</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#getGain()
+	 * @see #getStandardStochasticDiseaseModel()
+	 * @generated
+	 */
+	EAttribute getStandardStochasticDiseaseModel_Gain();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.SIRInoculator <em>SIR Inoculator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>SIR Inoculator</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRInoculator
+	 * @generated
+	 */
+	EClass getSIRInoculator();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.diseasemodels.standard.SIRInoculator#getInoculatedPercentage <em>Inoculated Percentage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Inoculated Percentage</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRInoculator#getInoculatedPercentage()
+	 * @see #getSIRInoculator()
+	 * @generated
+	 */
+	EAttribute getSIRInoculator_InoculatedPercentage();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel <em>Stochastic Poisson SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic Poisson SI Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticPoissonSIDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel <em>Stochastic Poisson SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic Poisson SIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticPoissonSIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel <em>Stochastic Poisson SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Stochastic Poisson SEIR Disease Model</em>'.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel
+	 * @generated
+	 */
+	EClass getStochasticPoissonSEIRDiseaseModel();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.EList <em>EList</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>EList</em>'.
+	 * @see org.eclipse.emf.common.util.EList
+	 * @model instanceClass="org.eclipse.emf.common.util.EList"
+	 * @generated
+	 */
+	EDataType getEList();
+
+	/**
+	 * Returns the meta object for data type '{@link java.util.Random <em>Random</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>Random</em>'.
+	 * @see java.util.Random
+	 * @model instanceClass="java.util.Random"
+	 * @generated
+	 */
+	EDataType getRandom();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	StandardFactory getStandardFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl <em>Deterministic SEIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSEIRDiseaseModel()
+		 * @generated
+		 */
+		EClass DETERMINISTIC_SEIR_DISEASE_MODEL = eINSTANCE.getDeterministicSEIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl <em>Deterministic SI Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSIDiseaseModel()
+		 * @generated
+		 */
+		EClass DETERMINISTIC_SI_DISEASE_MODEL = eINSTANCE.getDeterministicSIDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl <em>Deterministic SIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDeterministicSIRDiseaseModel()
+		 * @generated
+		 */
+		EClass DETERMINISTIC_SIR_DISEASE_MODEL = eINSTANCE.getDeterministicSIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl <em>Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModel()
+		 * @generated
+		 */
+		EClass DISEASE_MODEL = eINSTANCE.getDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Background Mortality Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__BACKGROUND_MORTALITY_RATE = eINSTANCE.getDiseaseModel_BackgroundMortalityRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__POPULATION_IDENTIFIER = eINSTANCE.getDiseaseModel_PopulationIdentifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Time Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__TIME_PERIOD = eINSTANCE.getDiseaseModel_TimePeriod();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__DISEASE_NAME = eINSTANCE.getDiseaseModel_DiseaseName();
+
+		/**
+		 * The meta object literal for the '<em><b>Relative Tolerance</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__RELATIVE_TOLERANCE = eINSTANCE.getDiseaseModel_RelativeTolerance();
+
+		/**
+		 * The meta object literal for the '<em><b>Finite Difference</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__FINITE_DIFFERENCE = eINSTANCE.getDiseaseModel_FiniteDifference();
+
+		/**
+		 * The meta object literal for the '<em><b>Frequency Dependent</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__FREQUENCY_DEPENDENT = eINSTANCE.getDiseaseModel_FrequencyDependent();
+
+		/**
+		 * The meta object literal for the '<em><b>Background Birth Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL__BACKGROUND_BIRTH_RATE = eINSTANCE.getDiseaseModel_BackgroundBirthRate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl <em>Disease Model Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelLabel()
+		 * @generated
+		 */
+		EClass DISEASE_MODEL_LABEL = eINSTANCE.getDiseaseModelLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Label</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DISEASE_MODEL_LABEL__POPULATION_LABEL = eINSTANCE.getDiseaseModelLabel_PopulationLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Model State</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE = eINSTANCE.getDiseaseModelLabel_DiseaseModelState();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl <em>Disease Model Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelLabelValue()
+		 * @generated
+		 */
+		EClass DISEASE_MODEL_LABEL_VALUE = eINSTANCE.getDiseaseModelLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Deaths</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS = eINSTANCE.getDiseaseModelLabelValue_DiseaseDeaths();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT = eINSTANCE.getDiseaseModelLabelValue_PopulationCount();
+
+		/**
+		 * The meta object literal for the '<em><b>Incidence</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute DISEASE_MODEL_LABEL_VALUE__INCIDENCE = eINSTANCE.getDiseaseModelLabelValue_Incidence();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl <em>Disease Model State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getDiseaseModelState()
+		 * @generated
+		 */
+		EClass DISEASE_MODEL_STATE = eINSTANCE.getDiseaseModelState();
+
+		/**
+		 * The meta object literal for the '<em><b>Label</b></em>' container reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DISEASE_MODEL_STATE__LABEL = eINSTANCE.getDiseaseModelState_Label();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl <em>Infector</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getInfector()
+		 * @generated
+		 */
+		EClass INFECTOR = eINSTANCE.getInfector();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Model</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INFECTOR__DISEASE_MODEL = eINSTANCE.getInfector_DiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Target URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INFECTOR__TARGET_URI = eINSTANCE.getInfector_TargetURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Disease Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INFECTOR__DISEASE_NAME = eINSTANCE.getInfector_DiseaseName();
+
+		/**
+		 * The meta object literal for the '<em><b>Target ISO Key</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INFECTOR__TARGET_ISO_KEY = eINSTANCE.getInfector_TargetISOKey();
+
+		/**
+		 * The meta object literal for the '<em><b>Labels To Infect</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference INFECTOR__LABELS_TO_INFECT = eINSTANCE.getInfector_LabelsToInfect();
+
+		/**
+		 * The meta object literal for the '<em><b>Population Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute INFECTOR__POPULATION_IDENTIFIER = eINSTANCE.getInfector_PopulationIdentifier();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl <em>SEIR</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIR()
+		 * @generated
+		 */
+		EClass SEIR = eINSTANCE.getSEIR();
+
+		/**
+		 * The meta object literal for the '<em><b>Incubation Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEIR__INCUBATION_RATE = eINSTANCE.getSEIR_IncubationRate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl <em>SEIR Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIRLabel()
+		 * @generated
+		 */
+		EClass SEIR_LABEL = eINSTANCE.getSEIRLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Delta Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEIR_LABEL__DELTA_VALUE = eINSTANCE.getSEIRLabel_DeltaValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Probe Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEIR_LABEL__PROBE_VALUE = eINSTANCE.getSEIRLabel_ProbeValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Temp Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEIR_LABEL__TEMP_VALUE = eINSTANCE.getSEIRLabel_TempValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEIR_LABEL__ORIGINAL_VALUE = eINSTANCE.getSEIRLabel_OriginalValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Error Scale</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SEIR_LABEL__ERROR_SCALE = eINSTANCE.getSEIRLabel_ErrorScale();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl <em>SEIR Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSEIRLabelValue()
+		 * @generated
+		 */
+		EClass SEIR_LABEL_VALUE = eINSTANCE.getSEIRLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>E</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SEIR_LABEL_VALUE__E = eINSTANCE.getSEIRLabelValue_E();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl <em>SI</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSI()
+		 * @generated
+		 */
+		EClass SI = eINSTANCE.getSI();
+
+		/**
+		 * The meta object literal for the '<em><b>Transmission Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__TRANSMISSION_RATE = eINSTANCE.getSI_TransmissionRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Non Linearity Coefficient</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__NON_LINEARITY_COEFFICIENT = eINSTANCE.getSI_NonLinearityCoefficient();
+
+		/**
+		 * The meta object literal for the '<em><b>Recovery Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__RECOVERY_RATE = eINSTANCE.getSI_RecoveryRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Infectious Mortality Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__INFECTIOUS_MORTALITY_RATE = eINSTANCE.getSI_InfectiousMortalityRate();
+
+		/**
+		 * The meta object literal for the '<em><b>Physically Adjacent Infectious Proportion</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION = eINSTANCE.getSI_PhysicallyAdjacentInfectiousProportion();
+
+		/**
+		 * The meta object literal for the '<em><b>Road Network Infectious Proportion</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__ROAD_NETWORK_INFECTIOUS_PROPORTION = eINSTANCE.getSI_RoadNetworkInfectiousProportion();
+
+		/**
+		 * The meta object literal for the '<em><b>Infectious Mortality</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI__INFECTIOUS_MORTALITY = eINSTANCE.getSI_InfectiousMortality();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl <em>SI Disease Model State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIDiseaseModelState()
+		 * @generated
+		 */
+		EClass SI_DISEASE_MODEL_STATE = eINSTANCE.getSIDiseaseModelState();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIInfectorImpl <em>SI Infector</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIInfectorImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIInfector()
+		 * @generated
+		 */
+		EClass SI_INFECTOR = eINSTANCE.getSIInfector();
+
+		/**
+		 * The meta object literal for the '<em><b>Infectious Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI_INFECTOR__INFECTIOUS_COUNT = eINSTANCE.getSIInfector_InfectiousCount();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl <em>SI Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSILabel()
+		 * @generated
+		 */
+		EClass SI_LABEL = eINSTANCE.getSILabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Delta Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SI_LABEL__DELTA_VALUE = eINSTANCE.getSILabel_DeltaValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Probe Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SI_LABEL__PROBE_VALUE = eINSTANCE.getSILabel_ProbeValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Temp Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SI_LABEL__TEMP_VALUE = eINSTANCE.getSILabel_TempValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SI_LABEL__ORIGINAL_VALUE = eINSTANCE.getSILabel_OriginalValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Error Scale</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SI_LABEL__ERROR_SCALE = eINSTANCE.getSILabel_ErrorScale();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl <em>SI Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSILabelValue()
+		 * @generated
+		 */
+		EClass SI_LABEL_VALUE = eINSTANCE.getSILabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>I</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SI_LABEL_VALUE__I = eINSTANCE.getSILabelValue_I();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRImpl <em>SIR</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIR()
+		 * @generated
+		 */
+		EClass SIR = eINSTANCE.getSIR();
+
+		/**
+		 * The meta object literal for the '<em><b>Immunity Loss Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SIR__IMMUNITY_LOSS_RATE = eINSTANCE.getSIR_ImmunityLossRate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl <em>SIR Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRLabel()
+		 * @generated
+		 */
+		EClass SIR_LABEL = eINSTANCE.getSIRLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Delta Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SIR_LABEL__DELTA_VALUE = eINSTANCE.getSIRLabel_DeltaValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Probe Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SIR_LABEL__PROBE_VALUE = eINSTANCE.getSIRLabel_ProbeValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Temp Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SIR_LABEL__TEMP_VALUE = eINSTANCE.getSIRLabel_TempValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SIR_LABEL__ORIGINAL_VALUE = eINSTANCE.getSIRLabel_OriginalValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Error Scale</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SIR_LABEL__ERROR_SCALE = eINSTANCE.getSIRLabel_ErrorScale();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl <em>SIR Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRLabelValue()
+		 * @generated
+		 */
+		EClass SIR_LABEL_VALUE = eINSTANCE.getSIRLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>R</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SIR_LABEL_VALUE__R = eINSTANCE.getSIRLabelValue_R();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl <em>Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModel()
+		 * @generated
+		 */
+		EClass STANDARD_DISEASE_MODEL = eINSTANCE.getStandardDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Total Population Count</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT = eINSTANCE.getStandardDiseaseModel_TotalPopulationCount();
+
+		/**
+		 * The meta object literal for the '<em><b>Total Population Count Reciprocal</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL = eINSTANCE.getStandardDiseaseModel_TotalPopulationCountReciprocal();
+
+		/**
+		 * The meta object literal for the '<em><b>Total Area</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL__TOTAL_AREA = eINSTANCE.getStandardDiseaseModel_TotalArea();
+
+		/**
+		 * The meta object literal for the '<em><b>Reference Population Density</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY = eINSTANCE.getStandardDiseaseModel_ReferencePopulationDensity();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelImpl <em>Disease Model Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelLabel()
+		 * @generated
+		 */
+		EClass STANDARD_DISEASE_MODEL_LABEL = eINSTANCE.getStandardDiseaseModelLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl <em>Disease Model Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelLabelValue()
+		 * @generated
+		 */
+		EClass STANDARD_DISEASE_MODEL_LABEL_VALUE = eINSTANCE.getStandardDiseaseModelLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>S</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL_LABEL_VALUE__S = eINSTANCE.getStandardDiseaseModelLabelValue_S();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl <em>Disease Model State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardDiseaseModelState()
+		 * @generated
+		 */
+		EClass STANDARD_DISEASE_MODEL_STATE = eINSTANCE.getStandardDiseaseModelState();
+
+		/**
+		 * The meta object literal for the '<em><b>Area Ratio</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_DISEASE_MODEL_STATE__AREA_RATIO = eINSTANCE.getStandardDiseaseModelState_AreaRatio();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardInfectorImpl <em>Infector</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardInfectorImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardInfector()
+		 * @generated
+		 */
+		EClass STANDARD_INFECTOR = eINSTANCE.getStandardInfector();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl <em>Stochastic SEIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSEIRDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_SEIR_DISEASE_MODEL = eINSTANCE.getStochasticSEIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl <em>Stochastic SI Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSIDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_SI_DISEASE_MODEL = eINSTANCE.getStochasticSIDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl <em>Stochastic SIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticSIRDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_SIR_DISEASE_MODEL = eINSTANCE.getStochasticSIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.common.SanityChecker
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSanityChecker()
+		 * @generated
+		 */
+		EClass SANITY_CHECKER = eINSTANCE.getSanityChecker();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.IntegrationLabel
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationLabel()
+		 * @generated
+		 */
+		EClass INTEGRATION_LABEL = eINSTANCE.getIntegrationLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.graph.IntegrationLabelValue
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationLabelValue()
+		 * @generated
+		 */
+		EClass INTEGRATION_LABEL_VALUE = eINSTANCE.getIntegrationLabelValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.IntegrationDecorator
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getIntegrationDecorator()
+		 * @generated
+		 */
+		EClass INTEGRATION_DECORATOR = eINSTANCE.getIntegrationDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIDiseaseModelImpl <em>Aggregating SI Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSIDiseaseModel()
+		 * @generated
+		 */
+		EClass AGGREGATING_SI_DISEASE_MODEL = eINSTANCE.getAggregatingSIDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingDiseaseModelStateImpl <em>Aggregating Disease Model State</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingDiseaseModelStateImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingDiseaseModelState()
+		 * @generated
+		 */
+		EClass AGGREGATING_DISEASE_MODEL_STATE = eINSTANCE.getAggregatingDiseaseModelState();
+
+		/**
+		 * The meta object literal for the '<em><b>Childrens Labels</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS = eINSTANCE.getAggregatingDiseaseModelState_ChildrensLabels();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSEIRDiseaseModelImpl <em>Aggregating SEIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSEIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSEIRDiseaseModel()
+		 * @generated
+		 */
+		EClass AGGREGATING_SEIR_DISEASE_MODEL = eINSTANCE.getAggregatingSEIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIRDiseaseModelImpl <em>Aggregating SIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.AggregatingSIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getAggregatingSIRDiseaseModel()
+		 * @generated
+		 */
+		EClass AGGREGATING_SIR_DISEASE_MODEL = eINSTANCE.getAggregatingSIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl <em>Stochastic Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_DISEASE_MODEL = eINSTANCE.getStochasticDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Seed</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STOCHASTIC_DISEASE_MODEL__SEED = eINSTANCE.getStochasticDiseaseModel_Seed();
+
+		/**
+		 * The meta object literal for the '<em><b>Random Generator</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR = eINSTANCE.getStochasticDiseaseModel_RandomGenerator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl <em>Stochastic Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStandardStochasticDiseaseModel()
+		 * @generated
+		 */
+		EClass STANDARD_STOCHASTIC_DISEASE_MODEL = eINSTANCE.getStandardStochasticDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Gain</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN = eINSTANCE.getStandardStochasticDiseaseModel_Gain();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl <em>SIR Inoculator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getSIRInoculator()
+		 * @generated
+		 */
+		EClass SIR_INOCULATOR = eINSTANCE.getSIRInoculator();
+
+		/**
+		 * The meta object literal for the '<em><b>Inoculated Percentage</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SIR_INOCULATOR__INOCULATED_PERCENTAGE = eINSTANCE.getSIRInoculator_InoculatedPercentage();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIDiseaseModelImpl <em>Stochastic Poisson SI Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSIDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_POISSON_SI_DISEASE_MODEL = eINSTANCE.getStochasticPoissonSIDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIRDiseaseModelImpl <em>Stochastic Poisson SIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSIRDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_POISSON_SIR_DISEASE_MODEL = eINSTANCE.getStochasticPoissonSIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSEIRDiseaseModelImpl <em>Stochastic Poisson SEIR Disease Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticPoissonSEIRDiseaseModelImpl
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getStochasticPoissonSEIRDiseaseModel()
+		 * @generated
+		 */
+		EClass STOCHASTIC_POISSON_SEIR_DISEASE_MODEL = eINSTANCE.getStochasticPoissonSEIRDiseaseModel();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+		/**
+		 * The meta object literal for the '<em>EList</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.EList
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getEList()
+		 * @generated
+		 */
+		EDataType ELIST = eINSTANCE.getEList();
+
+		/**
+		 * The meta object literal for the '<em>Random</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see java.util.Random
+		 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardPackageImpl#getRandom()
+		 * @generated
+		 */
+		EDataType RANDOM = eINSTANCE.getRandom();
+
+	}
+
+} //StandardPackage
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardStochasticDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardStochasticDiseaseModel.java
new file mode 100644
index 0000000..f56eb76
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StandardStochasticDiseaseModel.java
@@ -0,0 +1,46 @@
+// StandardStochastiDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface is an EMF model.
+ * 
+ * @model abstract="true"
+ */
+public interface StandardStochasticDiseaseModel extends StochasticDiseaseModel {
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model default="0.01"
+	 */
+	public double getGain();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#getGain <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Gain</em>' attribute.
+	 * @see #getGain()
+	 * @generated
+	 */
+	void setGain(double value);
+
+	/**
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	public double computeNoise();
+	
+} // StandardStochastiDiseaseModel
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticDiseaseModel.java
new file mode 100644
index 0000000..90bfb20
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticDiseaseModel.java
@@ -0,0 +1,44 @@
+// StochasticDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+/**
+ * This interface defines an EMF model
+ * @model abstract="true"
+ */
+public interface StochasticDiseaseModel extends DiseaseModel {
+
+	
+	/**
+	 * @return the seed used to initialize the random number generator.
+	 * @model default="0"
+	 */
+	long getSeed();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel#getSeed <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Seed</em>' attribute.
+	 * @see #getSeed()
+	 * @generated
+	 */
+	void setSeed(long value);
+
+	/**
+	 * @model changeable="false" default="0"
+	 */
+	Random getRandomGenerator();
+} // StochasticDiseaseModel
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSEIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSEIRDiseaseModel.java
new file mode 100644
index 0000000..c325724
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSEIRDiseaseModel.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Stochastic Poisson SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getStochasticPoissonSEIRDiseaseModel()
+ * @model
+ * @generated
+ */
+public interface StochasticPoissonSEIRDiseaseModel extends SEIR {
+} // StochasticPoissonSEIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIDiseaseModel.java
new file mode 100644
index 0000000..4c7ce8b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIDiseaseModel.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Stochastic Poisson SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getStochasticPoissonSIDiseaseModel()
+ * @model
+ * @generated
+ */
+public interface StochasticPoissonSIDiseaseModel extends SI {
+} // StochasticPoissonSIDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIRDiseaseModel.java
new file mode 100644
index 0000000..180cfe1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticPoissonSIRDiseaseModel.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Stochastic Poisson SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#getStochasticPoissonSIRDiseaseModel()
+ * @model
+ * @generated
+ */
+public interface StochasticPoissonSIRDiseaseModel extends SIR {
+} // StochasticPoissonSIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSEIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSEIRDiseaseModel.java
new file mode 100644
index 0000000..a7ba68e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSEIRDiseaseModel.java
@@ -0,0 +1,33 @@
+// StochasticSEIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Stochastic SEIR disease
+ * model.
+ * 
+ * @see SEIRLabel
+ * @see SEIRLabelValue
+ * 
+ * @model
+ */
+public interface StochasticSEIRDiseaseModel extends SEIR, StandardStochasticDiseaseModel {
+
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SEIR disease model type URI.
+	 */
+	String URI_TYPE_STOCHASTIC_SEIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SEIR_DISEASE_MODEL_SEGMENT
+			+ "/stochastic";
+
+} // StochasticSEIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIDiseaseModel.java
new file mode 100644
index 0000000..5b925b7
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIDiseaseModel.java
@@ -0,0 +1,31 @@
+// StochasticSIDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Stochastic SI disease
+ * model.
+ * 
+ * @see SILabel
+ * @see SILabelValue
+ * 
+ * @model
+ */
+public interface StochasticSIDiseaseModel extends SI, StandardStochasticDiseaseModel {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SI disease model type URI.
+	 */
+	String URI_TYPE_STOCHASTIC_SI_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SI_DISEASE_MODEL_SEGMENT
+			+ "/stochastic";
+} // StochasticSIDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIRDiseaseModel.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIRDiseaseModel.java
new file mode 100644
index 0000000..222d049
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/StochasticSIRDiseaseModel.java
@@ -0,0 +1,31 @@
+// StochasticSIRDiseaseModel.java
+package org.eclipse.stem.diseasemodels.standard;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface defines a class in an EMF model for an Stochastic SIR disease
+ * model.
+ * 
+ * @see SIRLabel
+ * @see SIRLabelValue
+ * 
+ * @model
+ */
+public interface StochasticSIRDiseaseModel extends SIR, StandardStochasticDiseaseModel {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * standard stochastic SIR disease model type URI.
+	 */
+	String URI_TYPE_STOCHASTIC_SIR_DISEASE_MODEL_SEGMENT = URI_TYPE_STANDARD_SIR_DISEASE_MODEL_SEGMENT
+			+ "/stochastic";
+} // StochasticSIRDiseaseModel
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingDiseaseModelStateImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingDiseaseModelStateImpl.java
new file mode 100644
index 0000000..4e29719
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingDiseaseModelStateImpl.java
@@ -0,0 +1,288 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Aggregating Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.AggregatingDiseaseModelStateImpl#getChildrensLabels <em>Childrens Labels</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AggregatingDiseaseModelStateImpl extends DiseaseModelStateImpl
+		implements AggregatingDiseaseModelState {
+
+	// A list of the names of the transportation modes
+	protected List<TransportMode> transportModes = null;
+
+	// Map between transport mode and list of children's transport
+	protected Map<TransportMode, List<Edge>> childTransportEdges = null;
+
+	// Map between transport mode and list of parent/peer edges
+	protected Map<TransportMode, List<Edge>> parentPeerTransportEdges = null;
+
+	/**
+	 * The cached value of the '{@link #getChildrensLabels() <em>Childrens Labels</em>}' reference list.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getChildrensLabels()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<SILabel> childrensLabels;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingDiseaseModelStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.AGGREGATING_DISEASE_MODEL_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<SILabel> getChildrensLabels() {
+		if (childrensLabels == null) {
+			childrensLabels = new EObjectResolvingEList<SILabel>(SILabel.class, this, StandardPackage.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS);
+		}
+		return childrensLabels;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS:
+				return getChildrensLabels();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS:
+				getChildrensLabels().clear();
+				getChildrensLabels().addAll((Collection<? extends SILabel>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS:
+				getChildrensLabels().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS:
+				return childrensLabels != null && !childrensLabels.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @return a list of the transportation modes that send and receive
+	 *         population members to and from the <code>Node</code> labeled by
+	 *         the disease model label.
+	 */
+	public List<TransportMode> getTransportModes() {
+		// Have we set the transport modes yet?
+		if (transportModes == null) {
+			// No
+			initializeTransportCollections();
+		} // if transport modes
+
+		return transportModes;
+	} // getTransportModes
+
+	/**
+	 * @return a Map between the transportation modes that send and receive
+	 *         population members to and from the <code>Node</code> labeled by
+	 *         the disease model label and the <code>Edge</code>s to/from the
+	 *         <code>Node</code>'s children.
+	 */
+	public Map<TransportMode, List<Edge>> getChildTransportEdges() {
+		// Have we set the child transport edges yet?
+		if (childTransportEdges == null) {
+			// No
+			initializeTransportCollections();
+		}
+		return childTransportEdges;
+	} // getChildTransportEdges
+
+	/**
+	 * @return a Map between the transportation modes that send and receive
+	 *         population members to and from the <code>Node</code> labeled by
+	 *         the disease model label and the <code>Edge</code>s to/from the
+	 *         <code>Node</code>'s parent and peers (i.e., not the children).
+	 */
+	public Map<TransportMode, List<Edge>> getParentPeerTransportEdges() {
+		// Have we set the child transport edges yet?
+		if (parentPeerTransportEdges == null) {
+			// No
+			initializeTransportCollections();
+		}
+		return parentPeerTransportEdges;
+	} // getParentPeerTransportEdges
+
+	/**
+	 * Initialize the values returned by {@link #getTransportModes()},
+	 * {@link #getChildrensLabels()}, and
+	 * {@link #getParentPeerTransportEdges()}.
+	 * 
+	 */
+	protected void initializeTransportCollections() {
+		transportModes = new ArrayList<TransportMode>();
+		childTransportEdges = new HashMap<TransportMode, List<Edge>>();
+		parentPeerTransportEdges = new HashMap<TransportMode, List<Edge>>();
+
+		final Node node = getLabel().getNode();
+
+		final List<Edge> transportEdges = getTransportEdges(node);
+
+		// Sort out the transport edges
+		for (Edge edge : transportEdges) {
+			// Is the edge with one this node's children?
+			if (isEdgeWithAChildNode(edge, node)) {
+				// Yes
+				addEdge(edge, childTransportEdges);
+			} else {
+				// No
+				// Must be the parent or a peer
+				addEdge(edge, parentPeerTransportEdges);
+			}
+		} // for each edge
+
+		final Set<TransportMode> tempSet = new HashSet<TransportMode>();
+		tempSet.addAll(childTransportEdges.keySet());
+		tempSet.addAll(parentPeerTransportEdges.keySet());
+		transportModes.addAll(tempSet);
+	} // initializeTransportCollections
+
+	/**
+	 * @param node
+	 * @return all of the transportation edges to/from the argument
+	 *         <code>Node</code>
+	 */
+	public static List<Edge> getTransportEdges(Node node) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		for (final Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = edgeIter.next();
+			// Is this a transportation edge?
+			final Label label = edge.getLabel();
+			if (label instanceof TransportRelationshipLabel) {
+				// Yes
+				retValue.add(edge);
+			}
+		} // for each edge
+
+		return retValue;
+	} // getTransportEdges
+
+	/**
+	 * @param edge
+	 * @param node
+	 * @return <code>true</code> if the <code>Edge</code> is with one of the
+	 *         <code>Node</code>'s children.
+	 */
+	private boolean isEdgeWithAChildNode(Edge edge, Node node) {
+		boolean retValue = false;
+		final Node otherNode = edge.getOtherNode(node);
+		retValue = AggregatingSIDiseaseModelImpl.getParentNode(otherNode) == node;
+		return retValue;
+	} // isEdgeWithAChildNode
+
+	/**
+	 * Add the edge to the map under the correct transportation mode
+	 * 
+	 * @param edge
+	 * @param transportMap
+	 */
+	private void addEdge(Edge edge, Map<TransportMode, List<Edge>> transportMap) {
+		// Get the transport mode
+		final TransportRelationshipLabel trl = (TransportRelationshipLabel) edge
+				.getLabel();
+		final TransportMode transportMode = trl.getTransportMode();
+		List<Edge> edgeList = transportMap.get(transportMode);
+		// Was there already a list?
+		if (edgeList == null) {
+			// No
+			// ...there will be.
+			edgeList = new ArrayList<Edge>();
+			transportMap.put(transportMode, edgeList);
+		}
+		edgeList.add(edge);
+	} // addEdge
+
+} // AggregatingDiseaseModelStateImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSEIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSEIRDiseaseModelImpl.java
new file mode 100644
index 0000000..b8568cd
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSEIRDiseaseModelImpl.java
@@ -0,0 +1,73 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Aggregating SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class AggregatingSEIRDiseaseModelImpl extends
+		AggregatingSIRDiseaseModelImpl implements AggregatingSEIRDiseaseModel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSEIRDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.AGGREGATING_SEIR_DISEASE_MODEL;
+	}
+
+	@Override
+	public DiseaseModelLabel createDiseaseModelLabel() {
+		return StandardFactory.eINSTANCE.createSEIRLabel();
+	} // createDiseaseModelLabel
+
+	@Override
+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {
+		return StandardFactory.eINSTANCE.createSEIRLabelValue();
+	} // createDiseaseModelLabelValue
+
+	@Override
+	protected void updateFromChildLabel(final SILabel parentLabel,
+			final SILabel childLabel) {
+		super.updateFromChildLabel(parentLabel, childLabel);
+
+		final SEIRLabel seirParentLabel = (SEIRLabel) parentLabel;
+		final SEIRLabel seirChildLabel = (SEIRLabel) childLabel;
+
+		final double nextE = ((SEIRLabelValue)seirParentLabel.getNextValue()).getR();
+		seirParentLabel.setNextE(nextE + seirChildLabel.getNextE());
+	} // updateFromChildLabel
+
+} // AggregatingSEIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIDiseaseModelImpl.java
new file mode 100644
index 0000000..cfa7219
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIDiseaseModelImpl.java
@@ -0,0 +1,744 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.impl.URIToNodeMapEntryImpl;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationship;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Aggregating SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class AggregatingSIDiseaseModelImpl extends SIImpl implements
+		AggregatingSIDiseaseModel {
+
+	BasicEList reverseLabelsToUpdate = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSIDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.AGGREGATING_SI_DISEASE_MODEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#decorateGraph()
+	 */
+	@Override
+	public void decorateGraph() {
+		final Node rootNode = getRootNode(getGraph());
+		// Did we find a root node?
+		if (rootNode != null) {
+			// Yes
+			decorateGraph(rootNode);
+		} // if
+		else {
+			// No
+			Activator
+					.logInformation(
+							getDublinCore().getTitle()
+									+ " didn't find a root node for the graph.  Missing containment relationship?",
+							null);
+		} // else
+	} // decorateGraph
+
+	/**
+	 * @return the root {@link Node} in the tree in the graph formed by the
+	 *         containment edges.
+	 */
+	private Node getRootNode(final Graph graph) {
+
+		Node parent = null;
+		// Find a node that has a containment edge directed at it
+		for (final Iterator<Node> nodeIter = graph.getNodes().values().iterator(); nodeIter
+				.hasNext();) {
+			final Node node = nodeIter.next();
+			// Is this node "contained" by another?
+			parent = getParentNode(node);
+			if (parent != null) {
+				// Yes
+				break;
+			}
+		} // for each node
+
+		// Did we find a parent?
+		if (parent != null) {
+			// Yes
+			// Walk up the tree to the root
+			Node newParent = parent;
+			do {
+				parent = newParent;
+				newParent = getParentNode(parent);
+			} while (newParent != null);
+		} // if
+
+		return parent;
+	} // getRootNode
+
+	/**
+	 * @param node
+	 * @return the {@link Node} that contains this one, or <code>null</code>
+	 *         if there is no parent
+	 */
+	static public Node getParentNode(final Node node) {
+		Node parent = null;
+		if (node == null) {
+			return null;
+		}
+
+		for (final Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = edgeIter.next();
+			// Directed at this node?
+			if (edge.isDirectedAt(node)) {
+				// Yes
+				final Label label = edge.getLabel();
+				// Containment?
+				if (label instanceof RelativePhysicalRelationshipLabel) {
+					final RelativePhysicalRelationshipLabel rprl = (RelativePhysicalRelationshipLabel) label;
+					if (rprl.getCurrentRelationship().getRelationship() == RelativePhysicalRelationship.CONTAINS_LITERAL) {
+						// Yes
+						parent = edge.getOtherNode(node);
+						break;
+					}
+				}
+			}
+		} // for each edge
+
+		return parent;
+	} // getParentNode
+
+	/**
+	 * Recursively descend the tree formed by the {@link Edge}s with
+	 * {@link RelativePhysicalRelationshipLabel}s
+	 * {@link RelativePhysicalRelationship#CONTAINS} values. For instance, from
+	 * a country to its states.
+	 * 
+	 * @param node
+	 *            the starting {@link Node}
+	 * @return the {@link SILabel} instance that decorates the tree rooted at
+	 *         <code>node</code>.
+	 */
+	protected SILabel decorateGraph(final Node node) {
+		SILabel retValue = null;
+		// Is there a node to decorate?
+		if (node != null) {
+			// Yes
+
+			// Does this node already have a label for the right population and
+			// disease model type?
+			for (final DiseaseModelLabel diseaseModelLabel : getDiseaseLabels(node)) {
+				// Is this one we're looking for?
+				if (diseaseModelLabel instanceof SILabel) {
+					// Is the population the same?
+					if (diseaseModelLabel.getPopulationLabel().getName()
+							.equals(getPopulationIdentifier())) {
+						// Yes
+						// This is the one we want then
+						retValue = (SILabel) diseaseModelLabel;
+						break;
+					}
+				}
+			} // for each disease model label on this node
+
+			// Did we find a label here already?
+			if (retValue == null) {
+				// No
+				final EList childrensLabels = getChildrensLabels(node);
+
+				final PopulationLabel populationLabel = getOrCreatePopulationLabel(
+						node, getPopulationIdentifier());
+
+				final DiseaseModelLabel dml = createDiseaseModelLabel();
+				DiseaseModelLabelImpl.labelNode(dml, populationLabel, node);
+				getLabelsToUpdate().add(dml);
+
+				getGraph().putNodeLabel(dml);
+
+				// Initialize the disease model state (if any). The state holds
+				// values useful for the computation of the disease model
+				final DiseaseModelState dms = createDiseaseModelState();
+				final AggregatingDiseaseModelState adms = (AggregatingDiseaseModelState) dms;
+				adms.getChildrensLabels().addAll(childrensLabels);
+				dml.setDiseaseModelState(adms);
+
+				retValue = (SILabel) dml;
+			}
+		} // if node to decorate
+
+		return retValue;
+	} // decorateGraph
+
+	/**
+	 * @param node
+	 * @return a list of all of the {@link DiseaseModelLabel}s that label the
+	 *         {@link Node}
+	 */
+	private List<DiseaseModelLabel> getDiseaseLabels(final Node node) {
+		final List<DiseaseModelLabel> retValue = new ArrayList<DiseaseModelLabel>();
+		try {
+			for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter
+					.hasNext();) {
+				final Label label = labelIter.next();
+				// Is this a disease model label?
+				if (label instanceof DiseaseModelLabel) {
+					final DiseaseModelLabel diseaseModelLabel = (DiseaseModelLabel) label;
+					retValue.add(diseaseModelLabel);
+				}
+			}
+		} // try
+		catch (NullPointerException npe) {
+			// We get a NPE if node is null
+			Activator.logError("Internal error", npe);
+		} // catch NullPointerException
+		return retValue;
+	} // getDiseaseLabels
+
+	/**
+	 * @param node
+	 * @return a list of the {@link DiseaseModelLabel}s that label {@link Node}s
+	 *         that are "children" of parameter <code>node</code>
+	 */
+	private EList getChildrensLabels(final Node node) {
+		final EList retValue = new BasicEList();
+		// Iterate through each of the children of this node recursively
+		for (final Node childNode : getChildNodes(node)) {
+			retValue.add(decorateGraph(childNode));
+		}
+		return retValue;
+	} // getChildrensLabels
+
+	/**
+	 * @param node
+	 * @return the {@link Node}s that are children of the parameter
+	 *         <code>node</code>
+	 */
+	public static List<Node> getChildNodes(final Node node) {
+		final List<Node> retValue = new ArrayList<Node>();
+
+		for (final Iterator<Edge> edgeIter = node.getEdges().iterator(); edgeIter
+				.hasNext();) {
+			final Edge edge = edgeIter.next();
+			// Is this a physical containment edge directed from us?
+			final Label label = edge.getLabel();
+			if (label instanceof RelativePhysicalRelationshipLabel) {
+				final RelativePhysicalRelationshipLabel rprLabel = (RelativePhysicalRelationshipLabel) label;
+				if (!edge.isDirectedAt(node)
+						&& rprLabel.getCurrentRelationship().getRelationship() == RelativePhysicalRelationship.CONTAINS_LITERAL) {
+					// Yes
+					// Has the other node been resolved?
+					final Node otherNode = edge.getOtherNode(node);
+					if (otherNode != null) {
+						// Yes
+						retValue.add(otherNode);
+					}
+				}
+			}
+		} // for each edge
+
+		return retValue;
+	} // getChildNodes
+
+	/**
+	 * @param node
+	 * @param populationIdentifier
+	 * @return a {@link PopulationLabel} that labels the parameter
+	 *         <code>node</node>, either by finding it labeling the {@link Node}, or by creating it.
+	 */
+	private PopulationLabel getOrCreatePopulationLabel(final Node node,
+			final String populationIdentifier) {
+		PopulationLabel retValue = null;
+
+		// Try to find the population label if it exists
+		for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter
+				.hasNext();) {
+			final Label label = labelIter.next();
+			// Is it the population label we're looking for?
+			if (label instanceof PopulationLabel) {
+				final PopulationLabel populationLabel = (PopulationLabel) label;
+				if (populationLabel.getName().equals(populationIdentifier)) {
+					// Yes
+					retValue = populationLabel;
+					break;
+				}
+			}
+		} // for each label
+
+		// Did we find the population Label?
+		if (retValue == null) {
+			// No
+			// Make one then.
+			retValue = LabelsFactory.eINSTANCE.createPopulationLabel();
+			retValue.setURIOfIdentifiableToBeLabeled(node.getURI());
+			// We don't set the population value
+			node.getLabels().add(retValue);
+			URIToNodeMapEntryImpl entry = (URIToNodeMapEntryImpl) node
+					.eContainer();
+			Graph graph = (Graph) entry.eContainer();
+			graph.putNodeLabel(retValue);
+		}
+
+		return retValue;
+	} // getOrCreatePopulationLabel
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#updateLabels(org.eclipse.stem.core.model.STEMTime,
+	 *      long)
+	 */
+	@Override
+	public void updateLabels(final STEMTime time, final long timeDelta, int cycle) {
+		// The "next" values of the disease model labels of the underlying child
+		// nodes have been computed by the time this is called. And, the label
+		// values for this decorator have been ordered so that the parent is
+		// processed after its children, with the root label being last.
+
+		// First we "reset" the labels so they all have zero values. We're going
+		// to accumulate the values of their children's next values so we want
+		// to start the sum off from zero.
+
+		zeroOutPopulationCountsOnLabels();
+
+		// Set the progress of this iterator to 0
+		this.setProgress(0.0);
+		// Now go through each label we update and update it from all of its
+		// children
+		double numLabels = getLabelsToUpdate().size();
+		double n = 0.0;
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final SILabel parentSILabel = (SILabel) labelIter.next();
+			final AggregatingDiseaseModelState adms = (AggregatingDiseaseModelState) parentSILabel
+					.getDiseaseModelState();
+			for (final Iterator childDMLIter = adms.getChildrensLabels()
+					.iterator(); childDMLIter.hasNext();) {
+				final SILabel childSILabel = (SILabel) childDMLIter.next();
+				updateFromChildLabel(parentSILabel, childSILabel);
+			} // for
+			parentSILabel.setNextValueValid(true);
+			this.setProgress(n/numLabels);
+			n+=1.0;
+		} // for each disease model label to update
+
+		// Now we forward the population members that are being transported
+		forwardTransportation(time);
+		// Done
+		this.setProgress(1.0);
+	} // updateLabels
+
+	/**
+	 * Accumulate the values from the child label in to the next value of the
+	 * parent label
+	 * 
+	 * @param childLabel
+	 */
+	protected void updateFromChildLabel(final SILabel parentLabel,
+			final SILabel childLabel) {
+		final double nextDiseaseDeaths = parentLabel.getNextDiseaseDeaths();
+
+		parentLabel.setNextDiseaseDeaths(nextDiseaseDeaths
+				+ childLabel.getNextDiseaseDeaths());
+
+		final double nextS = parentLabel.getNextS();
+		final double nextI = parentLabel.getNextI();
+
+		parentLabel.setNextS(nextS + childLabel.getNextS());
+		parentLabel.setNextI(nextI + childLabel.getNextI());
+
+	} // updateFromChildLabel
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDepartures(double,
+	 *      org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue)
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue computeDepartures(
+			final double fractionToDepart,
+			final StandardDiseaseModelLabelValue nextState) {
+		return super.computeDepartures(fractionToDepart, nextState);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#createDiseaseModelState()
+	 */
+	@Override
+	public DiseaseModelState createDiseaseModelState() {
+		return StandardFactory.eINSTANCE.createAggregatingDiseaseModelState();
+	} // createDiseaseModelState
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getArrivals(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue getMigrationDeltas(
+			final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, DiseaseModelLabelValue returnValue) {
+		return super.getMigrationDeltas(diseaseLabel, time, returnValue);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 */
+	@Override
+	public void initializeDiseaseState(final DiseaseModelLabel diseaseModelLabel) {
+		// super.initializeDiseaseState(diseaseModelLabel);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState,
+	 *      org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 */
+	@Override
+	public DiseaseModelState initializeDiseaseState(
+			final DiseaseModelState diseaseModelState,
+			final DiseaseModelLabel diseaseModelLabel) {
+
+		return diseaseModelState;
+	} // initializeDiseaseState
+
+	
+
+	/**
+	 * One of the jobs of the aggregating disease model is to also forward
+	 * population members along the transportation network.
+	 * 
+	 * @param time
+	 */
+	protected void forwardTransportation(final STEMTime time) {
+		// Go through each label that needs to be updated and accumulate the
+		// arrivals from their children, then pass those along to the node's
+		// parent and peers (if any).
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final SILabel siLabel = (SILabel) labelIter.next();
+			final AggregatingDiseaseModelStateImpl adms = (AggregatingDiseaseModelStateImpl) siLabel
+					.getDiseaseModelState();
+			final Node node = siLabel.getNode();
+
+			boolean isRootNode = !labelIter.hasNext();
+			// Iterate through each of the transportation modes that
+			// send/receive population members from the node.
+			for (final TransportMode transportationMode : adms
+					.getTransportModes()) {
+				// Get all of the arrivals at this node from the kids for
+				// the current transportation mode
+				final SILabelValue kidArrivals = getArrivalsFromKids(node,
+						adms, transportationMode, time);
+				// Is this the root?
+				if (!isRootNode) {
+					// No
+					// Now send what we got from the kids along to our parent
+					// and our peers
+					// Anything to send?
+					if (kidArrivals.getPopulationCount() > 0.0) {
+						// Yes
+						sendDeparturesToParentAndPeers(kidArrivals, node, adms,
+								transportationMode, time);
+					} // if Anything to send?
+				} // if root
+				else {
+					// Yes
+					// This is the root, no parent, no peers, time to
+					// redistribute what the kids have been sending out.
+					// Send what we got from the kids, back to the kids
+					// Anything to send?
+					if (kidArrivals.getPopulationCount() > 0.0) {
+						// Yes
+						sendDeparturesToKids(kidArrivals, node, adms,
+								transportationMode, time);
+					} // if Anything to send?
+				} // else root
+			} // for each transport mode
+		} // for each label to update
+
+		// Now we want to work backwards through the list of labels to
+		// update to propagate the population members down through the tree
+		// to their ultimate destinations in the leaf Nodes.
+		boolean firstOne = true;
+		for (final Iterator reverseLabelsToUpdateIter = getReverseLabelsToUpdate()
+				.iterator(); reverseLabelsToUpdateIter.hasNext();) {
+			final SILabel reverseSILabel = (SILabel) reverseLabelsToUpdateIter
+					.next();
+			final AggregatingDiseaseModelStateImpl revadms = (AggregatingDiseaseModelStateImpl) reverseSILabel
+					.getDiseaseModelState();
+			final Node node = reverseSILabel.getNode();
+
+			// Iterate through each of the transportation modes that
+			// send/receive population members from the node.
+			for (final TransportMode transportationMode : revadms
+					.getTransportModes()) {
+				// Is this the root?
+				if (!firstOne) {
+					// No
+					final SILabelValue parentPeerArrivals = getArrivalsFromParentPeers(
+							node, revadms, transportationMode, time);
+					// Now send what we got from our parent or our peers
+					// along to our children
+					// Anything to send?
+					if (parentPeerArrivals.getPopulationCount() > 0.0) {
+						// Yes
+						sendDeparturesToKids(parentPeerArrivals, node, revadms,
+								transportationMode, time);
+					} // if Anything to send?
+
+				} else {
+					// Yes
+					// We skip over the root because we already processed it
+					// at the end of the previous for loop.
+					firstOne = false;
+				} // else
+			} // for each transport mode
+		} // for each label to update in reverse order
+	}// forwardTransportation
+
+	/**
+	 * @param node
+	 * @param adms
+	 * @param transportationMode
+	 * @param time
+	 * @return
+	 */
+	protected SILabelValue getArrivalsFromKids(final Node node,
+			final AggregatingDiseaseModelStateImpl adms,
+			final TransportMode transportationMode, final STEMTime time) {
+		return receiveFromEdges(node, adms.getChildTransportEdges().get(
+				transportationMode), time);
+	} // getArrivalsFromKids
+
+	/**
+	 * @param parentPeerArrivals
+	 * @param node
+	 * @param adms
+	 * @param transportationMode
+	 * @param time
+	 */
+	protected void sendDeparturesToKids(final SILabelValue parentPeerArrivals,
+			final Node node, final AggregatingDiseaseModelStateImpl adms,
+			final TransportMode transportationMode, final STEMTime time) {
+		sendToEdges(node, parentPeerArrivals, adms.getChildTransportEdges()
+				.get(transportationMode), time);
+	} // sendDeparturesToKids
+
+	/**
+	 * @param node
+	 * @param revadms
+	 * @param transportationMode
+	 * @param time
+	 * @return
+	 */
+	protected SILabelValue getArrivalsFromParentPeers(final Node node,
+			final AggregatingDiseaseModelStateImpl adms,
+			final TransportMode transportationMode, final STEMTime time) {
+		return receiveFromEdges(node, adms.getParentPeerTransportEdges().get(
+				transportationMode), time);
+	} // getArrivalsFromParentPeers
+
+	/**
+	 * @param kidArrivals
+	 * @param node
+	 * @param adms
+	 * @param transportationMode
+	 * @param time
+	 */
+	protected void sendDeparturesToParentAndPeers(
+			final SILabelValue kidArrivals, final Node node,
+			final AggregatingDiseaseModelStateImpl adms,
+			final TransportMode transportationMode, final STEMTime time) {
+		sendToEdges(node, kidArrivals, adms.getParentPeerTransportEdges().get(
+				transportationMode), time);
+	} // sendDeparturesToParentAndPeers
+
+	/**
+	 * @param node
+	 * @param transportEdges
+	 * @param time
+	 * @return
+	 */
+	private SILabelValue receiveFromEdges(final Node node,
+			final List<Edge> transportEdges, final STEMTime time) {
+		final SILabelValue retValue = (SILabelValue) createDiseaseModelLabelValue();
+
+		// Any edges for this transportation mode?
+		if (transportEdges != null) {
+			// Yes
+			for (final Edge edge : transportEdges) {
+				final TransportRelationshipLabel trl = (TransportRelationshipLabel) edge
+						.getLabel();
+				final EList arrivals = trl.receive(node, time);
+				for (final Iterator arrivalIter = arrivals.iterator(); arrivalIter
+						.hasNext();) {
+					final SILabelValue arrivalSILabelValue = (SILabelValue) arrivalIter
+							.next();
+					retValue.add(arrivalSILabelValue);
+				} // for each arrival
+			} // for each edge
+		} // if transport edges
+
+		return retValue;
+	} // receiveFromEdges
+
+	/**
+	 * @param node
+	 * @param arrivals
+	 * @param transportEdges
+	 * @param time
+	 * @return
+	 */
+	private void sendToEdges(final Node node, final SILabelValue arrivals,
+			final List<Edge> transportEdges, final STEMTime time) {
+		// Any edges for this transportation mode?
+		if (transportEdges != null) {
+			// Yes
+			// Sum up the total capacity. This can change if transportation
+			// links are closed or opened during the simulation
+			double totalCapacity = 0;
+			for (final Edge edge : transportEdges) {
+				final TransportRelationshipLabel trl = (TransportRelationshipLabel) edge
+						.getLabel();
+				totalCapacity += trl.getDepartureCapacity();
+			} // for each edge
+
+			// Was there any capacity?
+			if (totalCapacity > 0.0) {
+				// Yes
+				// Now send the right proportion along each edge
+				for (final Edge edge : transportEdges) {
+					final TransportRelationshipLabel trl = (TransportRelationshipLabel) edge
+							.getLabel();
+					final double proportion = trl.getDepartureCapacity()
+							/ totalCapacity;
+					final SILabelValue departees = (SILabelValue) createDiseaseModelLabelValue();
+					departees.add(arrivals).scale(proportion);
+					trl.send(node, departees);
+				} // for each edge
+			} // capacity
+		} // if transport edges
+	} // sendToEdges
+
+	/**
+	 * @return the labels to update in reverse order
+	 */
+	private BasicEList getReverseLabelsToUpdate() {
+		// Do we have the reverse list?
+		if (reverseLabelsToUpdate == null) {
+			// No
+			// Reverse the list
+			// There must be a utility to do this better.
+			final EList<DynamicLabel> forwardList = getLabelsToUpdate();
+			final int numLabels = forwardList.size();
+
+			reverseLabelsToUpdate = new BasicEList();
+			for (int i = numLabels - 1; i >= 0; i--) {
+				reverseLabelsToUpdate.add(forwardList.get(i));
+			} // for
+		} // if we have the reverse list
+
+		return reverseLabelsToUpdate;
+	} // getReverseLabelsToUpdate
+
+	/**
+	 * Make all the population values be zero for all of the labels we update.
+	 */
+	private void zeroOutPopulationCountsOnLabels() {
+		// The reset call above sets the susceptible population to the
+		// population of the node being labeled. Make sure we zero that out too.
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final SILabel siLabel = (SILabel) labelIter.next();
+			((StandardDiseaseModelLabelValue) siLabel.getCurrentValue()).zeroOutPopulationCount();
+			((StandardDiseaseModelLabelValue) siLabel.getNextValue()).zeroOutPopulationCount();
+		} // for each population label
+	} // zeroOutPopulationCountsOnLabels
+
+	@Override
+	public void resetLabels() {
+		super.resetLabels();
+		// The reset call above sets the susceptible population to the
+		// population of the node being labeled. Make sure we zero that out too.
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final SILabel siLabel = (SILabel) labelIter.next();
+			siLabel.setS(0);
+			siLabel.setNextS(0);
+		} // for
+	} // resetLabels
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// Nothing
+	}
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#toString()
+	 */
+	@Override
+	public String toString() {
+		return super.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		return true;
+	} // sane
+
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+} // AggregatingSIDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIRDiseaseModelImpl.java
new file mode 100644
index 0000000..e1559d3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/AggregatingSIRDiseaseModelImpl.java
@@ -0,0 +1,73 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Aggregating SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class AggregatingSIRDiseaseModelImpl extends AggregatingSIDiseaseModelImpl implements AggregatingSIRDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSIRDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.AGGREGATING_SIR_DISEASE_MODEL;
+	}
+
+	@Override
+	public DiseaseModelLabel createDiseaseModelLabel() {
+		return StandardFactory.eINSTANCE.createSIRLabel();
+	}
+
+	@Override
+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {
+		return StandardFactory.eINSTANCE.createSIRLabelValue();
+	}
+
+	@Override
+	protected void updateFromChildLabel(SILabel parentLabel, SILabel childLabel) {
+		super.updateFromChildLabel(parentLabel, childLabel);
+		
+		final SIRLabel sirParentLabel = (SIRLabel)parentLabel;
+		final SIRLabel sirChildLabel = (SIRLabel)childLabel;
+		
+		final double nextR = sirParentLabel.getNextR();
+		sirParentLabel.setNextR(nextR + sirChildLabel.getNextR());
+	} // updateFromChildLabel
+	
+} // AggregatingSIRDiseaseModelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSEIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSEIRDiseaseModelImpl.java
new file mode 100644
index 0000000..8b19b57
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSEIRDiseaseModelImpl.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Deterministic SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DeterministicSEIRDiseaseModelImpl extends SEIRImpl implements
+		DeterministicSEIRDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public DeterministicSEIRDiseaseModelImpl() {
+		super();
+	} // DeterministicSEIRDiseaseModelImpl
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @return an initialized instance of DeterministicSEIRDiseaseModel
+	 */
+	public static final DeterministicSEIRDiseaseModel createDeterministicSEIRDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate, final double incubationRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		final DeterministicSEIRDiseaseModel seirDiseaseModel = StandardFactory.eINSTANCE
+				.createDeterministicSEIRDiseaseModel();
+		initializeSEIRDiseaseModel(seirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				immunityLossRate, incubationRate, nonLinearityCoefficient,
+				timePeriod, populationIdentifier);
+		return seirDiseaseModel;
+	} // createDeterministicSEIRDiseaseModel
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// Nothing
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DETERMINISTIC_SEIR_DISEASE_MODEL;
+	}
+
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+	
+} // DeterministicSEIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIDiseaseModelImpl.java
new file mode 100644
index 0000000..751e2e1
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIDiseaseModelImpl.java
@@ -0,0 +1,92 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Deterministic SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DeterministicSIDiseaseModelImpl extends SIImpl implements
+		DeterministicSIDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public DeterministicSIDiseaseModelImpl() {
+		super();
+	} // DeterministicSIDiseaseModelImpl
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @return an initialized instance of DeterministicSIRDiseaseModel
+	 */
+	public static final DeterministicSIDiseaseModel createDeterministicSIDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		final DeterministicSIDiseaseModel siDiseaseModel = StandardFactory.eINSTANCE
+				.createDeterministicSIDiseaseModel();
+		initializeSIDiseaseModel(siDiseaseModel, diseaseModelName,
+				backgroundMortalityRate, 
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				nonLinearityCoefficient, timePeriod, populationIdentifier);
+		return siDiseaseModel;
+	} // createDeterministicSIDiseaseModel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DETERMINISTIC_SI_DISEASE_MODEL;
+	}
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// Nothing
+	}
+
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+} // DeterministicSIDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIRDiseaseModelImpl.java
new file mode 100644
index 0000000..5257615
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DeterministicSIRDiseaseModelImpl.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Deterministic SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DeterministicSIRDiseaseModelImpl extends SIRImpl implements
+		DeterministicSIRDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public DeterministicSIRDiseaseModelImpl() {
+		super();
+	} // DeterministicSIRDiseaseModelImpl
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @return an initialized instance of DeterministicSIRDiseaseModel
+	 */
+	public static final DeterministicSIRDiseaseModel createDeterministicSIRDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		final DeterministicSIRDiseaseModel sirDiseaseModel = StandardFactory.eINSTANCE
+				.createDeterministicSIRDiseaseModel();
+		initializeSIRDiseaseModel(sirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				immunityLossRate, nonLinearityCoefficient, timePeriod,
+				populationIdentifier);
+		return sirDiseaseModel;
+	} // createDeterministicSIRDiseaseModel
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// Nothing
+	}
+
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DETERMINISTIC_SIR_DISEASE_MODEL;
+	}
+
+} // DeterministicSIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelImpl.java
new file mode 100644
index 0000000..9c3f06b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelImpl.java
@@ -0,0 +1,805 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.NodeLabel;
+//import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.NodeDecoratorImpl;
+//import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getBackgroundMortalityRate <em>Background Mortality Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getPopulationIdentifier <em>Population Identifier</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getTimePeriod <em>Time Period</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getDiseaseName <em>Disease Name</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getRelativeTolerance <em>Relative Tolerance</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#isFiniteDifference <em>Finite Difference</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#isFrequencyDependent <em>Frequency Dependent</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#getBackgroundBirthRate <em>Background Birth Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DiseaseModelImpl extends NodeDecoratorImpl implements
+		DiseaseModel {
+	/**
+	 * The default value of the '{@link #getBackgroundMortalityRate() <em>Background Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBackgroundMortalityRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double BACKGROUND_MORTALITY_RATE_EDEFAULT = 5.5E-5;
+
+	/**
+	 * The cached value of the '{@link #getBackgroundMortalityRate() <em>Background Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBackgroundMortalityRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double backgroundMortalityRate = BACKGROUND_MORTALITY_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String POPULATION_IDENTIFIER_EDEFAULT = "human";
+
+	/**
+	 * The cached value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String populationIdentifier = POPULATION_IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTimePeriod() <em>Time Period</em>}'
+	 * attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getTimePeriod()
+	 * @generated NOT
+	 * @ordered
+	 */
+	protected static final long TIME_PERIOD_EDEFAULT = STEMTime.Units.DAY.getMilliseconds();
+
+	/**
+	 * The cached value of the '{@link #getTimePeriod() <em>Time Period</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTimePeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected long timePeriod = TIME_PERIOD_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDiseaseName() <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DISEASE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDiseaseName() <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String diseaseName = DISEASE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRelativeTolerance() <em>Relative Tolerance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRelativeTolerance()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RELATIVE_TOLERANCE_EDEFAULT = 1.0E-9;
+
+	/**
+	 * The cached value of the '{@link #getRelativeTolerance() <em>Relative Tolerance</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRelativeTolerance()
+	 * @generated
+	 * @ordered
+	 */
+	protected double relativeTolerance = RELATIVE_TOLERANCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFiniteDifference() <em>Finite Difference</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFiniteDifference()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FINITE_DIFFERENCE_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isFiniteDifference() <em>Finite Difference</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFiniteDifference()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean finiteDifference = FINITE_DIFFERENCE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isFrequencyDependent() <em>Frequency Dependent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFrequencyDependent()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean FREQUENCY_DEPENDENT_EDEFAULT = true;
+
+	/**
+	 * The cached value of the '{@link #isFrequencyDependent() <em>Frequency Dependent</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isFrequencyDependent()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean frequencyDependent = FREQUENCY_DEPENDENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getBackgroundBirthRate() <em>Background Birth Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBackgroundBirthRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double BACKGROUND_BIRTH_RATE_EDEFAULT = 5.5E-5;
+
+	/**
+	 * The cached value of the '{@link #getBackgroundBirthRate() <em>Background Birth Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBackgroundBirthRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double backgroundBirthRate = BACKGROUND_BIRTH_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * @param standardDiseaseModel
+	 *            the StandardDiseaseModel disease model to be initialized
+	 * @param diseaseModelName
+	 * @param backgroundMortalityRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 * @param populationIdentifier
+	 */
+	protected static DiseaseModel initializeDiseaseModel(
+			final DiseaseModel diseaseModel, final String diseaseModelName,
+			final double backgroundMortalityRate, final long timePeriod,
+			final String populationIdentifier) {
+		diseaseModel.setDiseaseName(diseaseModelName);
+		diseaseModel.getDublinCore().setTitle(diseaseModelName);
+		diseaseModel.setBackgroundMortalityRate(backgroundMortalityRate);
+		diseaseModel.setTimePeriod(timePeriod);
+		diseaseModel.setPopulationIdentifier(populationIdentifier);
+
+		return diseaseModel;
+	} // initializeDiseaseModel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getBackgroundMortalityRate() {
+		return backgroundMortalityRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBackgroundMortalityRate(double newBackgroundMortalityRate) {
+		double oldBackgroundMortalityRate = backgroundMortalityRate;
+		backgroundMortalityRate = newBackgroundMortalityRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE, oldBackgroundMortalityRate, backgroundMortalityRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getTimePeriod() {
+		return timePeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newTimePeriod
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTimePeriod(long newTimePeriod) {
+		long oldTimePeriod = timePeriod;
+		timePeriod = newTimePeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__TIME_PERIOD, oldTimePeriod, timePeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPopulationIdentifier() {
+		return populationIdentifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newPopulationIdentifier
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulationIdentifier(String newPopulationIdentifier) {
+		String oldPopulationIdentifier = populationIdentifier;
+		populationIdentifier = newPopulationIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER, oldPopulationIdentifier, populationIdentifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDiseaseName() {
+		return diseaseName;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDiseaseName(String newDiseaseName) {
+		String oldDiseaseName = diseaseName;
+		diseaseName = newDiseaseName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__DISEASE_NAME, oldDiseaseName, diseaseName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRelativeTolerance() {
+		return relativeTolerance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRelativeTolerance(double newRelativeTolerance) {
+		double oldRelativeTolerance = relativeTolerance;
+		relativeTolerance = newRelativeTolerance;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE, oldRelativeTolerance, relativeTolerance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFiniteDifference() {
+		return finiteDifference;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFiniteDifference(boolean newFiniteDifference) {
+		boolean oldFiniteDifference = finiteDifference;
+		finiteDifference = newFiniteDifference;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE, oldFiniteDifference, finiteDifference));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isFrequencyDependent() {
+		return frequencyDependent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setFrequencyDependent(boolean newFrequencyDependent) {
+		boolean oldFrequencyDependent = frequencyDependent;
+		frequencyDependent = newFrequencyDependent;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT, oldFrequencyDependent, frequencyDependent));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getBackgroundBirthRate() {
+		return backgroundBirthRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBackgroundBirthRate(double newBackgroundBirthRate) {
+		double oldBackgroundBirthRate = backgroundBirthRate;
+		backgroundBirthRate = newBackgroundBirthRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE, oldBackgroundBirthRate, backgroundBirthRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param timeDelta
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdjustedBackgroundMortalityRate(long timeDelta) {
+		return getBackgroundMortalityRate()
+				* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedBackgroundMortalityRate
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract DiseaseModelLabel createDiseaseModelLabel();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract DiseaseModelLabelValue createDiseaseModelLabelValue();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract DiseaseModelState createDiseaseModelState();
+
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param diseaseModelState
+	 * @param diseaseModelLabel
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	abstract public DiseaseModelState initializeDiseaseState(
+			final DiseaseModelState diseaseModelState,
+			final DiseaseModelLabel diseaseModelLabel);
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * This is a second chance to update the {@link DiseaseModelState} instance that
+	 * is being kept at a {@link DiseaseModelLabel}.  We get this because we've
+	 * already done one pass over the lablel's that the disease model updates.  In
+	 * that pass we accumlated global state information (e.g., the total population)
+	 * and now we might need to add something to the state information such
+	 * as the global population density.
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public void initializeDiseaseState(DiseaseModelLabel diseaseModelLabel);
+
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract Infector createInfector();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdjustedBackgroundBirthRate(long timeDelta) {
+		return getBackgroundBirthRate()
+		* ((double) timeDelta / (double) getTimePeriod());
+	}
+
+	/**
+	 * Search through the graph and find all of the population labels that have
+	 * the same identifier.
+	 * 
+	 * @param populationIdentifier
+	 *            the population being labeled
+	 * @param graph
+	 *            the graph to search
+	 * @return the PopulationLabel instances of the graph that match the
+	 *         identifier.
+	 */
+	protected Collection<PopulationLabel> getPopulationLabels(
+			final String populationIdentifier, final Graph graph) {
+		final List<PopulationLabel> retValue = new ArrayList<PopulationLabel>();
+
+		// Iterate through all of the population labels in the graph
+		EList<NodeLabel> labels = graph.getNodeLabelsByTypeURI(
+				PopulationLabel.URI_TYPE_POPULATION_LABEL);
+		for (NodeLabel pl:labels) {
+			final PopulationLabel populationLabel = (PopulationLabel) pl;
+			// Is this label for the population we're looking for?
+			if (populationLabel.getPopulationIdentifier().equals(
+					populationIdentifier)) {
+				// Yes
+				// If there is a problem with the "node uri" of the population
+				// label then it would not have been associated with a node
+				// instance in the graph at this point. This is a problem for
+				// disease models that are trying to label the node (there isn't
+				// one!). So filter out those mistakes here.
+
+				// Does the population label have an associated node?
+				if (populationLabel.getNode() != null) {
+					// Yes
+					retValue.add(populationLabel);
+				} // if the population label has a node
+			} // if the population we're looking for
+		} // for each population label
+
+		return retValue;
+	} // getPopulationLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void decorateGraph() {
+		for (final Iterator<PopulationLabel> populationLabelIter = getPopulationLabels(
+				getPopulationIdentifier(), getGraph()).iterator(); populationLabelIter
+				.hasNext();) {
+			final PopulationLabel populationLabel = populationLabelIter.next();
+
+			final DiseaseModelLabel dml = createDiseaseModelLabel();
+			DiseaseModelLabelImpl.labelNode(dml, populationLabel,
+					populationLabel.getNode());
+			getLabelsToUpdate().add(dml);
+
+			getGraph().putNodeLabel(dml);
+
+			// Initialize the disease model state (if any). The state holds
+			// values useful for the computation of the disease model
+			final DiseaseModelState diseaseModelState = createDiseaseModelState();
+
+			dml.setDiseaseModelState(initializeDiseaseState(diseaseModelState,
+					dml));
+		} // for each population label
+
+		// We've made one pass labeling the Node's with the disease model label,
+		// and we created DiseaseModelState instances that are specific to this
+		// disease that hold state information useful in its computations.
+		// Having made one pass we need to give the disease model another chance
+		// to update its state information with things it learned during the
+		// first pass (e.g., the total population or total area).  
+		
+		for (Iterator diseseModelLabelIter = getLabelsToUpdate().iterator(); diseseModelLabelIter.hasNext();) {
+			initializeDiseaseState((DiseaseModelLabel) diseseModelLabelIter.next());
+		} // for each label this disease model updates
+
+		
+		// This initializes the disease model values from the population values.
+		// For instance for StandardDiseaseModels, it initializes the
+		// susceptiable population from the population
+		resetLabels();
+	} // decorateGraph
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+				return getBackgroundMortalityRate();
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+				return getPopulationIdentifier();
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+				return getTimePeriod();
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+				return getDiseaseName();
+			case StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE:
+				return getRelativeTolerance();
+			case StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE:
+				return isFiniteDifference();
+			case StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT:
+				return isFrequencyDependent();
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE:
+				return getBackgroundBirthRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+				setBackgroundMortalityRate((Double)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier((String)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+				setTimePeriod((Long)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+				setDiseaseName((String)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE:
+				setRelativeTolerance((Double)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE:
+				setFiniteDifference((Boolean)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT:
+				setFrequencyDependent((Boolean)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE:
+				setBackgroundBirthRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+				setBackgroundMortalityRate(BACKGROUND_MORTALITY_RATE_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+				setPopulationIdentifier(POPULATION_IDENTIFIER_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+				setTimePeriod(TIME_PERIOD_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+				setDiseaseName(DISEASE_NAME_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE:
+				setRelativeTolerance(RELATIVE_TOLERANCE_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE:
+				setFiniteDifference(FINITE_DIFFERENCE_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT:
+				setFrequencyDependent(FREQUENCY_DEPENDENT_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE:
+				setBackgroundBirthRate(BACKGROUND_BIRTH_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+				return backgroundMortalityRate != BACKGROUND_MORTALITY_RATE_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+				return POPULATION_IDENTIFIER_EDEFAULT == null ? populationIdentifier != null : !POPULATION_IDENTIFIER_EDEFAULT.equals(populationIdentifier);
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+				return timePeriod != TIME_PERIOD_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+				return DISEASE_NAME_EDEFAULT == null ? diseaseName != null : !DISEASE_NAME_EDEFAULT.equals(diseaseName);
+			case StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE:
+				return relativeTolerance != RELATIVE_TOLERANCE_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE:
+				return finiteDifference != FINITE_DIFFERENCE_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT:
+				return frequencyDependent != FREQUENCY_DEPENDENT_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE:
+				return backgroundBirthRate != BACKGROUND_BIRTH_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		final StringBuffer result = new StringBuffer();
+
+		final String title = getDublinCore().getTitle();
+		result.append(title == null ? "<disease model>" : title);
+		result.append("(");
+		result.append(populationIdentifier);
+		result.append(')');
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.NodeDecoratorImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && diseaseName != null;
+		assert retValue;
+
+		retValue = retValue
+				&& backgroundMortalityRate >= 0.0;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(backgroundMortalityRate);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(backgroundMortalityRate);
+		assert retValue;
+		
+		retValue = retValue && timePeriod >= TIME_PERIOD_EDEFAULT;
+		assert retValue;
+
+	
+		return retValue;
+	} // sane
+
+} // DiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelImpl.java
new file mode 100644
index 0000000..4ed70f2
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelImpl.java
@@ -0,0 +1,375 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl;
+//import org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl#getPopulationLabel <em>Population Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelImpl#getDiseaseModelState <em>Disease Model State</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DiseaseModelLabelImpl extends DynamicNodeLabelImpl
+		implements DiseaseModelLabel {
+	/**
+	 * The cached value of the '{@link #getPopulationLabel() <em>Population Label</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPopulationLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected PopulationLabel populationLabel;
+
+	/**
+	 * The cached value of the '{@link #getDiseaseModelState() <em>Disease Model State</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseModelState()
+	 * @generated
+	 * @ordered
+	 */
+	protected DiseaseModelState diseaseModelState;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelLabelImpl() {
+		super();
+	}
+
+	public double getDiseaseDeaths() {
+		return getCurrentDiseaseModelLabelValue().getDiseaseDeaths();
+	} // getDiseaseDeaths
+
+	public void setDiseaseDeaths(final double d) {
+		getCurrentDiseaseModelLabelValue().setDiseaseDeaths(d);
+	} // setDiseaseDeaths
+
+
+	public double getNextDiseaseDeaths() {
+		return getNextDiseaseModelLabelValue().getDiseaseDeaths();
+	} // getNextDiseaseDeaths
+
+	public void setNextDiseaseDeaths(final double d) {
+		getNextDiseaseModelLabelValue().setDiseaseDeaths(d);
+	} // setNextDiseaseDeaths
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DISEASE_MODEL_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabel getPopulationLabel() {
+		if (populationLabel != null && populationLabel.eIsProxy()) {
+			InternalEObject oldPopulationLabel = (InternalEObject)populationLabel;
+			populationLabel = (PopulationLabel)eResolveProxy(oldPopulationLabel);
+			if (populationLabel != oldPopulationLabel) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL, oldPopulationLabel, populationLabel));
+			}
+		}
+		return populationLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabel basicGetPopulationLabel() {
+		return populationLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newPopulationLabel
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulationLabel(PopulationLabel newPopulationLabel) {
+		PopulationLabel oldPopulationLabel = populationLabel;
+		populationLabel = newPopulationLabel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL, oldPopulationLabel, populationLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelState getDiseaseModelState() {
+		return diseaseModelState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newDiseaseModelState
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDiseaseModelState(DiseaseModelState newDiseaseModelState, NotificationChain msgs) {
+		DiseaseModelState oldDiseaseModelState = diseaseModelState;
+		diseaseModelState = newDiseaseModelState;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE, oldDiseaseModelState, newDiseaseModelState);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newDiseaseModelState
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDiseaseModelState(DiseaseModelState newDiseaseModelState) {
+		if (newDiseaseModelState != diseaseModelState) {
+			NotificationChain msgs = null;
+			if (diseaseModelState != null)
+				msgs = ((InternalEObject)diseaseModelState).eInverseRemove(this, StandardPackage.DISEASE_MODEL_STATE__LABEL, DiseaseModelState.class, msgs);
+			if (newDiseaseModelState != null)
+				msgs = ((InternalEObject)newDiseaseModelState).eInverseAdd(this, StandardPackage.DISEASE_MODEL_STATE__LABEL, DiseaseModelState.class, msgs);
+			msgs = basicSetDiseaseModelState(newDiseaseModelState, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE, newDiseaseModelState, newDiseaseModelState));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue getCurrentDiseaseModelLabelValue() {
+		return (DiseaseModelLabelValue)getCurrentValue(); 
+	} // getCurrentDiseaseModelLabelValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue getNextDiseaseModelLabelValue() {
+		return (DiseaseModelLabelValue)getNextValue();
+	} // getNextDiseaseModelLabelValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param otherEnd
+	 * @param featureID
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				if (diseaseModelState != null)
+					msgs = ((InternalEObject)diseaseModelState).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE, null, msgs);
+				return basicSetDiseaseModelState((DiseaseModelState)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param otherEnd
+	 * @param featureID
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				return basicSetDiseaseModelState(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * Label the node with the disease model label
+	 * 
+	 * @param dml
+	 *            the disease model label
+	 * @param populationLabel
+	 *            the population affected by the disease
+	 * @param node
+	 *            the node that has the population being affected by the disease
+	 */
+	public static void labelNode(final DiseaseModelLabel dml,
+			final PopulationLabel populationLabel, final Node node) {
+		dml.setPopulationLabel(populationLabel);
+		node.getLabels().add(dml);
+	} // labelNode
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL:
+				if (resolve) return getPopulationLabel();
+				return basicGetPopulationLabel();
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				return getDiseaseModelState();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL:
+				setPopulationLabel((PopulationLabel)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				setDiseaseModelState((DiseaseModelState)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL:
+				setPopulationLabel((PopulationLabel)null);
+				return;
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				setDiseaseModelState((DiseaseModelState)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL__POPULATION_LABEL:
+				return populationLabel != null;
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				return diseaseModelState != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && diseaseModelState != null ? diseaseModelState
+				.sane() : true;
+		assert retValue;
+
+		return retValue;
+	} // sane
+
+} // DiseaseModelLabelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelValueImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelValueImpl.java
new file mode 100644
index 0000000..10c0dc3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelLabelValueImpl.java
@@ -0,0 +1,398 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#getDiseaseDeaths <em>Disease Deaths</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#getPopulationCount <em>Population Count</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#getIncidence <em>Incidence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DiseaseModelLabelValueImpl extends LabelValueImpl
+		implements DiseaseModelLabelValue {
+	/**
+	 * The default value of the '{@link #getDiseaseDeaths() <em>Disease Deaths</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseDeaths()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double DISEASE_DEATHS_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getDiseaseDeaths() <em>Disease Deaths</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseDeaths()
+	 * @generated
+	 * @ordered
+	 */
+	protected double diseaseDeaths = DISEASE_DEATHS_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPopulationCount() <em>Population Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getPopulationCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double POPULATION_COUNT_EDEFAULT = 0.0;
+
+	/**
+	 * The default value of the '{@link #getIncidence() <em>Incidence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncidence()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INCIDENCE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getIncidence() <em>Incidence</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIncidence()
+	 * @generated
+	 * @ordered
+	 */
+	protected double incidence = INCIDENCE_EDEFAULT;
+
+	public static final double ABS_TOLERANCE = 1E-12; // fix hardcoded?
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param births
+	 *            the number of births that have occured in the population
+	 * @param deaths
+	 *            the total number of deaths that have occured in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occured in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	protected DiseaseModelLabelValueImpl(final double diseaseDeaths) {
+		this.diseaseDeaths = diseaseDeaths;
+	} // DiseaseModelLabelValueImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DISEASE_MODEL_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public abstract double getPopulationCount();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getIncidence() {
+		return incidence;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncidence(double newIncidence) {
+		double oldIncidence = incidence;
+		incidence = newIncidence;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE, oldIncidence, incidence));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	abstract public void zeroOutPopulationCount();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdditions() {
+		return 0.0; // A disease does not contribute to more pople being born
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getSubstractions() {
+		return this.diseaseDeaths; // People are removed only from death by disease
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getDiseaseDeaths() {
+		return diseaseDeaths;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newDiseaseDeaths
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDiseaseDeaths(double newDiseaseDeaths) {
+		double oldDiseaseDeaths = diseaseDeaths;
+		diseaseDeaths = newDiseaseDeaths;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS, oldDiseaseDeaths, diseaseDeaths));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param value
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue set(DiseaseModelLabelValue value) {
+		setDiseaseDeaths(value.getDiseaseDeaths());
+		setIncidence(value.getIncidence());
+		return this;
+	} // set
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param value
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue add(DiseaseModelLabelValue value) {
+		return this;
+	} // add
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param value
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue sub(DiseaseModelLabelValue value) {
+		return this;
+	} // sub
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public DiseaseModelLabelValue scale(double scaleFactor) {
+		return this;
+	} // scale
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		setDiseaseDeaths(DISEASE_DEATHS_EDEFAULT);
+	} // reset
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+				
+		// disease deaths
+		retValue = retValue && diseaseDeaths >= DISEASE_DEATHS_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && diseaseDeaths <= MAX_POPULATION_VALUE;
+		assert retValue;
+		
+		retValue = retValue && !Double.isInfinite(diseaseDeaths);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(diseaseDeaths);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS:
+				return getDiseaseDeaths();
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT:
+				return getPopulationCount();
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE:
+				return getIncidence();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS:
+				setDiseaseDeaths((Double)newValue);
+				return;
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE:
+				setIncidence((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS:
+				setDiseaseDeaths(DISEASE_DEATHS_EDEFAULT);
+				return;
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE:
+				setIncidence(INCIDENCE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS:
+				return diseaseDeaths != DISEASE_DEATHS_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT:
+				return getPopulationCount() != POPULATION_COUNT_EDEFAULT;
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE:
+				return incidence != INCIDENCE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append("(DD: "); //$NON-NLS-1$
+		result.append(diseaseDeaths);
+		result.append(')');
+		return result.toString();
+	} // toString
+
+} // DiseaseModelLabelValueImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelStateImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelStateImpl.java
new file mode 100644
index 0000000..b56a61a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/DiseaseModelStateImpl.java
@@ -0,0 +1,267 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl#getLabel <em>Label</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class DiseaseModelStateImpl extends EObjectImpl implements
+		DiseaseModelState {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelStateImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.DISEASE_MODEL_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelLabel getLabel() {
+		if (eContainerFeatureID() != StandardPackage.DISEASE_MODEL_STATE__LABEL) return null;
+		return (DiseaseModelLabel)eContainer();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newLabel
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLabel(DiseaseModelLabel newLabel, NotificationChain msgs) {
+		msgs = eBasicSetContainer((InternalEObject)newLabel, StandardPackage.DISEASE_MODEL_STATE__LABEL, msgs);
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newLabel
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLabel(DiseaseModelLabel newLabel) {
+		if (newLabel != eInternalContainer() || (eContainerFeatureID() != StandardPackage.DISEASE_MODEL_STATE__LABEL && newLabel != null)) {
+			if (EcoreUtil.isAncestor(this, newLabel))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null)
+				msgs = eBasicRemoveFromContainer(msgs);
+			if (newLabel != null)
+				msgs = ((InternalEObject)newLabel).eInverseAdd(this, StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE, DiseaseModelLabel.class, msgs);
+			msgs = basicSetLabel(newLabel, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.DISEASE_MODEL_STATE__LABEL, newLabel, newLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param otherEnd
+	 * @param featureID
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetLabel((DiseaseModelLabel)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param otherEnd
+	 * @param featureID
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				return basicSetLabel(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param msgs
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+		switch (eContainerFeatureID()) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				return eInternalContainer().eInverseRemove(this, StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE, DiseaseModelLabel.class, msgs);
+		}
+		return super.eBasicRemoveFromContainerFeature(msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				return getLabel();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				setLabel((DiseaseModelLabel)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				setLabel((DiseaseModelLabel)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.DISEASE_MODEL_STATE__LABEL:
+				return getLabel() != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	public boolean sane() {
+		boolean retValue = true;
+		return retValue;
+	} // sane
+
+} // DiseaseModelStateImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/InfectorImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/InfectorImpl.java
new file mode 100644
index 0000000..2f3e669
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/InfectorImpl.java
@@ -0,0 +1,664 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.NodeDecoratorImpl;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getDiseaseModel <em>Disease Model</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getTargetURI <em>Target URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getDiseaseName <em>Disease Name</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getTargetISOKey <em>Target ISO Key</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getLabelsToInfect <em>Labels To Infect</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.InfectorImpl#getPopulationIdentifier <em>Population Identifier</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class InfectorImpl extends NodeDecoratorImpl implements
+		Infector {
+	/**
+	 * The cached value of the '{@link #getDiseaseModel() <em>Disease Model</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseModel()
+	 * @generated
+	 * @ordered
+	 */
+	protected StandardDiseaseModel diseaseModel;
+
+	/**
+	 * The default value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI TARGET_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTargetURI() <em>Target URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI targetURI = TARGET_URI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getDiseaseName() <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DISEASE_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDiseaseName() <em>Disease Name</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getDiseaseName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String diseaseName = DISEASE_NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTargetISOKey() <em>Target ISO Key</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetISOKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TARGET_ISO_KEY_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getTargetISOKey() <em>Target ISO Key</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetISOKey()
+	 * @generated
+	 * @ordered
+	 */
+	protected String targetISOKey = TARGET_ISO_KEY_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLabelsToInfect() <em>Labels To Infect</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLabelsToInfect()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<DiseaseModelLabel> labelsToInfect;
+
+	/**
+	 * The default value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String POPULATION_IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPopulationIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String populationIdentifier = POPULATION_IDENTIFIER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected InfectorImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void decorateGraph() {
+
+		final Graph graph = getGraph();
+
+		// Do we need to look up the disease model from its name?
+		if (diseaseModel == null) {
+			// Yes
+			// There's a disease model out there with our name on it
+			// (maybe)...let's find it
+			for (Iterator<Decorator> decoratorIter = graph.getDecorators().iterator(); decoratorIter
+					.hasNext();) {
+				final Decorator decorator = decoratorIter.next();
+				// Disease Model?
+				if (decorator instanceof StandardDiseaseModel) {
+					final StandardDiseaseModel diseaseModel = (StandardDiseaseModel) decorator;
+					// Is this the one we're looking for?
+					if (diseaseModel.getDiseaseName().equalsIgnoreCase(
+							getDiseaseName())) {
+						// Yes
+						this.diseaseModel = diseaseModel;
+						break;
+					}
+				}
+			} // for each decorator
+		} // if look up disease model
+
+		// Did we find the disease model we're suppose to work for?
+		if (diseaseModel != null) {
+			// Yes
+			// Now try to find the node to be infected
+			final Node node = getGraph().getNode(getTargetURI());
+			
+			// Did we find the Node?
+			if (node != null) {
+				// Yes
+				for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter
+						.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof DiseaseModelLabel) {
+						final DiseaseModelLabel diseaseModelLabel = (DiseaseModelLabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (diseaseModelLabel.getDecorator() == diseaseModel) {
+							// Yes
+							doInitialization(diseaseModelLabel);
+							getLabelsToInfect().add(diseaseModelLabel);
+							break;
+						} // if
+					}
+				} // for
+			} // if node to infect was found
+			else {
+				// No
+				// The target URI was probably bad
+				Activator.logError("The node to infect specified by the URI \""
+						+ getTargetURI()
+						+ "\" was not found.  The URI is likely incorrect.",
+						null);
+			} // else node not found
+
+		} // if disease model found
+		else {
+			// No
+			// The disease name was probably wrong
+			Activator.logError("The disease named \"" + diseaseName
+					+ "\" was not found.", null);
+		} // else node not found
+
+		this.setProgress(1.0); // we're done
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void resetLabels() {
+		for (final Iterator<DiseaseModelLabel> nodeIter = getLabelsToInfect().iterator(); nodeIter
+				.hasNext();) {
+			final DiseaseModelLabel diseaseModelLabel = nodeIter.next();
+			doInitialization(diseaseModelLabel);
+		} // for
+	} // resetLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(org.eclipse.stem.core.graph.Graph,
+	 *      org.eclipse.stem.core.model.STEMTime, long)
+	 */
+	@Override
+	public void updateLabels(STEMTime time, long timerPeriod, int cycle) {
+		// Do nothing
+	} // updateLabels
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.INFECTOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModel getDiseaseModel() {
+		if (diseaseModel != null && diseaseModel.eIsProxy()) {
+			InternalEObject oldDiseaseModel = (InternalEObject)diseaseModel;
+			diseaseModel = (StandardDiseaseModel)eResolveProxy(oldDiseaseModel);
+			if (diseaseModel != oldDiseaseModel) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.INFECTOR__DISEASE_MODEL, oldDiseaseModel, diseaseModel));
+			}
+		}
+		return diseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModel basicGetDiseaseModel() {
+		return diseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newDiseaseModel
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setDiseaseModel(StandardDiseaseModel newDiseaseModel) {
+		StandardDiseaseModel oldDiseaseModel = diseaseModel;
+		diseaseModel = newDiseaseModel;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+					StandardPackage.INFECTOR__DISEASE_MODEL, oldDiseaseModel,
+					diseaseModel));
+		
+		setDiseaseName(diseaseModel != null? diseaseModel.getDiseaseName():null);
+	} // setDiseaseModel
+
+	
+	/**
+	 * finds all the child nodes of a parent (direct children and children of children etc...)
+	 * and returns them in a set.
+	 * Child is defined by a containment relationship
+	 * @param parent
+	 */
+	public Set<Node> getAllChildren(Node parent) {
+		Set<Node> allChildren = new HashSet<Node>();
+		Set<Node> toDoSet = getChildSet(parent);
+		toDoSet.remove(parent);
+		Set<Node> directChildren  = new HashSet<Node>();
+		
+		while(toDoSet.size() >=1) {
+			directChildren.addAll(toDoSet);
+			Iterator<Node> iter = directChildren.iterator();
+			while(iter!=null && iter.hasNext()) {
+				Node next = iter.next();
+				allChildren.add(next);
+				Set<Node> nextSet = getChildSet(next);
+				nextSet.removeAll(allChildren);
+				toDoSet.addAll(nextSet);
+			}
+			toDoSet.removeAll(directChildren);
+			directChildren.clear();
+		}
+		return allChildren;
+	}
+	
+	
+	/**
+	 * finds all the direct child nodes of a parent and returns them in a set.
+	 * Child is defined by a containment relationship
+	 * @param parent
+	 */
+	public Set<Node> getChildSet(Node parent) {
+		Set<Node> children = new HashSet<Node>();
+		if(parent == null) return children;
+		String parentID = getTargetURI().lastSegment();
+		//RelativePhysicalRelationshipLabelValue
+		EList<Edge> allEdges = parent.getEdges();
+		for (int i = 0; i < allEdges.size(); i ++) {
+			Edge e = allEdges.get(i);
+			LabelValue lv = e.getLabel().getCurrentValue();
+			if(lv instanceof RelativePhysicalRelationshipLabelValue) {
+				RelativePhysicalRelationshipLabelValue containment = (RelativePhysicalRelationshipLabelValue)lv;
+				Node neighborNode = e.getOtherNode(parent);
+				String neighborID= neighborNode.getURI().lastSegment();
+				// is it really a child
+				if(neighborID.length() > parentID.length()) {
+					//yes
+					children.add(neighborNode);
+				}// is child
+			}// is containment relationship
+		}// for all edges
+		//just to be sure
+		children.remove(parent);
+		return children;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public URI getTargetURI() {
+		// Is it set?
+		if (targetURI == null) {
+			// No
+			targetURI = RegionImpl.createRegionNodeURI(targetISOKey);
+		}
+		return targetURI;
+	} // getTargetURI
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newTargetURI
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTargetURI(URI newTargetURI) {
+		URI oldTargetURI = targetURI;
+		targetURI = newTargetURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.INFECTOR__TARGET_URI, oldTargetURI, targetURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDiseaseName() {
+		return diseaseName;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDiseaseName(String newDiseaseName) {
+		String oldDiseaseName = diseaseName;
+		diseaseName = newDiseaseName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.INFECTOR__DISEASE_NAME, oldDiseaseName, diseaseName));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getTargetISOKey() {
+		return targetISOKey;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTargetURI()
+	 * @generated NOT
+	 */
+	public void setTargetISOKey(String newTargetISOKey) {
+		String oldTargetISOKey = targetISOKey;
+		targetISOKey = newTargetISOKey;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.INFECTOR__TARGET_ISO_KEY, oldTargetISOKey, targetISOKey));
+		// This will cause the URI to be recreated with the new ISO key
+		setTargetURI(null);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<DiseaseModelLabel> getLabelsToInfect() {
+		if (labelsToInfect == null) {
+			labelsToInfect = new EObjectResolvingEList<DiseaseModelLabel>(DiseaseModelLabel.class, this, StandardPackage.INFECTOR__LABELS_TO_INFECT);
+		}
+		return labelsToInfect;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPopulationIdentifier() {
+		return populationIdentifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPopulationIdentifier(String newPopulationIdentifier) {
+		String oldPopulationIdentifier = populationIdentifier;
+		populationIdentifier = newPopulationIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.INFECTOR__POPULATION_IDENTIFIER, oldPopulationIdentifier, populationIdentifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.INFECTOR__DISEASE_MODEL:
+				if (resolve) return getDiseaseModel();
+				return basicGetDiseaseModel();
+			case StandardPackage.INFECTOR__TARGET_URI:
+				return getTargetURI();
+			case StandardPackage.INFECTOR__DISEASE_NAME:
+				return getDiseaseName();
+			case StandardPackage.INFECTOR__TARGET_ISO_KEY:
+				return getTargetISOKey();
+			case StandardPackage.INFECTOR__LABELS_TO_INFECT:
+				return getLabelsToInfect();
+			case StandardPackage.INFECTOR__POPULATION_IDENTIFIER:
+				return getPopulationIdentifier();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.INFECTOR__DISEASE_MODEL:
+				setDiseaseModel((StandardDiseaseModel)newValue);
+				return;
+			case StandardPackage.INFECTOR__TARGET_URI:
+				setTargetURI((URI)newValue);
+				return;
+			case StandardPackage.INFECTOR__DISEASE_NAME:
+				setDiseaseName((String)newValue);
+				return;
+			case StandardPackage.INFECTOR__TARGET_ISO_KEY:
+				setTargetISOKey((String)newValue);
+				return;
+			case StandardPackage.INFECTOR__LABELS_TO_INFECT:
+				getLabelsToInfect().clear();
+				getLabelsToInfect().addAll((Collection<? extends DiseaseModelLabel>)newValue);
+				return;
+			case StandardPackage.INFECTOR__POPULATION_IDENTIFIER:
+				setPopulationIdentifier((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.INFECTOR__DISEASE_MODEL:
+				setDiseaseModel((StandardDiseaseModel)null);
+				return;
+			case StandardPackage.INFECTOR__TARGET_URI:
+				setTargetURI(TARGET_URI_EDEFAULT);
+				return;
+			case StandardPackage.INFECTOR__DISEASE_NAME:
+				setDiseaseName(DISEASE_NAME_EDEFAULT);
+				return;
+			case StandardPackage.INFECTOR__TARGET_ISO_KEY:
+				setTargetISOKey(TARGET_ISO_KEY_EDEFAULT);
+				return;
+			case StandardPackage.INFECTOR__LABELS_TO_INFECT:
+				getLabelsToInfect().clear();
+				return;
+			case StandardPackage.INFECTOR__POPULATION_IDENTIFIER:
+				setPopulationIdentifier(POPULATION_IDENTIFIER_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.INFECTOR__DISEASE_MODEL:
+				return diseaseModel != null;
+			case StandardPackage.INFECTOR__TARGET_URI:
+				return TARGET_URI_EDEFAULT == null ? targetURI != null : !TARGET_URI_EDEFAULT.equals(targetURI);
+			case StandardPackage.INFECTOR__DISEASE_NAME:
+				return DISEASE_NAME_EDEFAULT == null ? diseaseName != null : !DISEASE_NAME_EDEFAULT.equals(diseaseName);
+			case StandardPackage.INFECTOR__TARGET_ISO_KEY:
+				return TARGET_ISO_KEY_EDEFAULT == null ? targetISOKey != null : !TARGET_ISO_KEY_EDEFAULT.equals(targetISOKey);
+			case StandardPackage.INFECTOR__LABELS_TO_INFECT:
+				return labelsToInfect != null && !labelsToInfect.isEmpty();
+			case StandardPackage.INFECTOR__POPULATION_IDENTIFIER:
+				return POPULATION_IDENTIFIER_EDEFAULT == null ? populationIdentifier != null : !POPULATION_IDENTIFIER_EDEFAULT.equals(populationIdentifier);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append(" (populationIdentifier: "); //$NON-NLS-1$
+		result.append(populationIdentifier != null ? populationIdentifier : "\"\"");
+		result.append(", targetURI: "); //$NON-NLS-1$
+		result.append(targetURI != null ? targetURI : "\"\"");
+		result.append(", diseaseName: "); //$NON-NLS-1$
+		result.append(diseaseName != null ? diseaseName : "\"\"");
+		result.append(", targetISOKey: "); //$NON-NLS-1$
+		result.append(targetISOKey != null ? targetISOKey : "\"\"");
+		result.append(')');
+		return result.toString();
+	} // toString
+
+	
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+		retValue = retValue && !(targetISOKey == null && targetURI == null);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+	
+
+	/**
+	 * Initialize the disease model label value
+	 * 
+	 * @param diseaseModelLabel
+	 *            the disease model label to be initialized
+	 */
+	protected abstract void doInitialization(
+			final DiseaseModelLabel diseaseModelLabel);
+
+} // InfectorImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRImpl.java
new file mode 100644
index 0000000..fd48dd0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRImpl.java
@@ -0,0 +1,496 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SEIR</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRImpl#getIncubationRate <em>Incubation Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SEIRImpl extends SIRImpl implements SEIR {
+
+	/**
+	 * The default value of the '{@link #getIncubationRate() <em>Incubation Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncubationRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INCUBATION_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getIncubationRate() <em>Incubation Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getIncubationRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double incubationRate = INCUBATION_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SEIRImpl() {
+		super();
+	}
+
+	/**
+	 * @param seirDiseaseModel
+	 *            the SEIR disease model to be initialized
+	 * @param diseaseModelName
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 * @param populationIdentifier
+	 */
+	protected static SEIR initializeSEIRDiseaseModel(
+			final SEIR seirDiseaseModel, final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate, final double incubationRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		SIRImpl.initializeSIRDiseaseModel(seirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				immunityLossRate, nonLinearityCoefficient, timePeriod,
+				populationIdentifier);
+		seirDiseaseModel.setIncubationRate(incubationRate);
+		return seirDiseaseModel;
+	} // initializeStandardDiseaseModel
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeBirthsDeathsDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue,
+	 *      long)
+	 */
+	@Override
+	public SEIRLabelValue computeDiseaseDeathsDeltas(
+			final STEMTime time, final StandardDiseaseModelLabelValue currentLabelValue, final long timeDelta, DiseaseModelLabelValue returnValue) {
+
+		final SEIRLabelValue currentSEIR = (SEIRLabelValue) currentLabelValue;
+		
+		final double adjustedInfectiousMortalityRate = getAdjustedInfectiousMortalityRate(timeDelta);
+		final double diseaseDeaths = adjustedInfectiousMortalityRate
+				* currentSEIR.getI();
+
+		SEIRLabelValueImpl ret = (SEIRLabelValueImpl)returnValue;
+		ret.setS(0.0);
+		ret.setE(0.0);
+		ret.setI(-diseaseDeaths);
+		ret.setIncidence(0);
+		ret.setR(0.0);
+		ret.setDiseaseDeaths(diseaseDeaths);
+		return ret;
+	} // computeBirthsDeaths
+
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time, 
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		final SEIRLabelValue currentSEIR = (SEIRLabelValue) currentState;
+	
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+		
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+			
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSEIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSEIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSEIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToExposed = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >=0.0)
+			numberOfSusceptibleToExposed = transmissionRate
+			* currentSEIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else 
+			numberOfSusceptibleToExposed = transmissionRate
+			* currentSEIR.getS()* effectiveInfectious;
+		double numberOfExposedToInfectious = getAdjustedIncubationRate(timeDelta)
+		* currentSEIR.getE();
+			
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToExposed;
+		// Determine delta E
+		final double deltaE = numberOfSusceptibleToExposed - numberOfExposedToInfectious;		
+		// Determine delta I
+		final double deltaI = numberOfExposedToInfectious - numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SEIRLabelValueImpl ret = (SEIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setE(deltaE);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToExposed);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	
+	} // computeDiseaseDeltas
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getMigrationDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue getMigrationDeltas(final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, DiseaseModelLabelValue returnValue) {
+		final StandardDiseaseModelLabelValue retValue = (StandardDiseaseModelLabelValue) createDiseaseModelLabelValue();
+		
+		double deltaS = 0.0;
+		double deltaE = 0.0;
+		double deltaI = 0.0;
+		double deltaR = 0.0;
+
+		// DO MIGRATION THROUGH MIGRATION EDGES
+	    // to/from THIS node
+		Node node = diseaseLabel.getNode();
+		for (final Iterator<Edge> migrationEdgeIter = MigrationEdgeLabelImpl.getMigrationEdgesFromNode(node).iterator(); migrationEdgeIter.hasNext();) {
+			//every edge is an A=>B Edge. For each node there might be two edges
+			//where THIS node can act as type A or type B (origin or destination)
+			final Edge migrationEdge = migrationEdgeIter.next();
+			MigrationEdgeLabel migrationLabel = (MigrationEdgeLabel) migrationEdge.getLabel();
+			double migrationRate = migrationLabel.getCurrentValue().getMigrationRate();
+			// get the other node
+			final Node otherNode = migrationEdge.getOtherNode(node);
+			// do a test to find out if this edge is an incoming or outgoing edge
+			// by getting the edges' destination node (which could be THIS node)
+			boolean incomming = (migrationEdge.getB().equals(node));
+			// is this incoming
+			if (incomming) {
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = otherNode.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SEIRLabel otherSEIRLabel = (SEIRLabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == otherSEIRLabel.getDecorator()) {
+							deltaS  += migrationRate*otherSEIRLabel.getCurrentSEIRValue().getS();
+							deltaE  += migrationRate*otherSEIRLabel.getCurrentSEIRValue().getE();
+							deltaI += migrationRate*otherSEIRLabel.getCurrentSEIRValue().getI();
+							deltaR  += migrationRate*otherSEIRLabel.getCurrentSEIRValue().getR();
+							break;
+						} // if
+					}
+				} // for
+			} else {
+				// edge is outgoing
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SEIRLabel thisSEIRLabel = (SEIRLabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == thisSEIRLabel.getDecorator()) {
+							deltaS  -= migrationRate*thisSEIRLabel.getCurrentSEIRValue().getS();
+							deltaE  -= migrationRate*thisSEIRLabel.getCurrentSEIRValue().getE();
+							deltaI -= migrationRate*thisSEIRLabel.getCurrentSEIRValue().getI();
+							deltaR  -= migrationRate*thisSEIRLabel.getCurrentSEIRValue().getR();
+							break;
+						} // if
+					}
+				} // for
+			}
+		} // for each migration edge
+		
+		SEIRLabelValueImpl ret = (SEIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setE(deltaE);
+		ret.setI(deltaI);
+		ret.setIncidence(0);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	} // getMigrationDeltas
+
+
+	/**
+	 * @param fractionToDepart
+	 * @param nextState
+	 * @return
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue computeDepartures(
+			final double fractionToDepart,
+			final StandardDiseaseModelLabelValue nextState) {
+		final SEIRLabelValue departees = StandardFactory.eINSTANCE
+				.createSEIRLabelValue();
+		final SEIRLabelValue siState = (SEIRLabelValue) nextState;
+		departees.setS(fractionToDepart * siState.getS());
+		departees.setE(fractionToDepart * siState.getE());
+		departees.setI(fractionToDepart * siState.getI());
+		departees.setR(fractionToDepart * siState.getR());
+		return departees;
+	} // computeDepartures
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelLabel()
+	 */
+	@Override
+	public DiseaseModelLabel createDiseaseModelLabel() {
+		return StandardFactory.eINSTANCE.createSEIRLabel();
+	} // createDiseaseModelLabel
+	
+	@Override
+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {
+		return StandardFactory.eINSTANCE.createSEIRLabelValue();
+	} // createDiseaseModelLabelValue
+	
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SEIR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getIncubationRate() {
+		return incubationRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newIncubationRate
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIncubationRate(double newIncubationRate) {
+		double oldIncubationRate = incubationRate;
+		incubationRate = newIncubationRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR__INCUBATION_RATE, oldIncubationRate, incubationRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param timeDelta
+	 *            the time period to adjust the rate to
+	 * @return the adjusted rate
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdjustedIncubationRate(long timeDelta) {
+		return getIncubationRate()
+				* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedIncubationRate
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				return getIncubationRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				setIncubationRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				setIncubationRate(INCUBATION_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				return incubationRate != INCUBATION_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (incubationRate: "); //$NON-NLS-1$
+		result.append(incubationRate);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.NodeDecoratorImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && incubationRate >= INCUBATION_RATE_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(incubationRate);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(incubationRate);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} // SEIRImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelImpl.java
new file mode 100644
index 0000000..bec4ba6
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelImpl.java
@@ -0,0 +1,571 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SEIR Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl#getDeltaValue <em>Delta Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl#getProbeValue <em>Probe Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl#getTempValue <em>Temp Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl#getOriginalValue <em>Original Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl#getErrorScale <em>Error Scale</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SEIRLabelImpl extends StandardDiseaseModelLabelImpl implements SEIRLabel {
+	/**
+	 * The cached value of the '{@link #getDeltaValue() <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeltaValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SEIRLabelValue deltaValue;
+	/**
+	 * The cached value of the '{@link #getProbeValue() <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProbeValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SEIRLabelValue probeValue;
+	/**
+	 * The cached value of the '{@link #getTempValue() <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTempValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SEIRLabelValue tempValue;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SEIRLabelValue originalValue;
+	/**
+	 * The cached value of the '{@link #getErrorScale() <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getErrorScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected SEIRLabelValue errorScale;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected SEIRLabelImpl() {
+		super();
+		setTypeURI(URI_TYPE_SEIR_LABEL);
+		setCurrentValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setNextValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setOriginalValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setTempValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setProbeValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setErrorScale(StandardFactory.eINSTANCE.createSEIRLabelValue());
+		setDeltaValue(StandardFactory.eINSTANCE.createSEIRLabelValue());
+	} // SEIRLabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SEIR_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue getDeltaValue() {
+		if (deltaValue != null && deltaValue.eIsProxy()) {
+			InternalEObject oldDeltaValue = (InternalEObject)deltaValue;
+			deltaValue = (SEIRLabelValue)eResolveProxy(oldDeltaValue);
+			if (deltaValue != oldDeltaValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SEIR_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+			}
+		}
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue basicGetDeltaValue() {
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeltaValue(SEIRLabelValue newDeltaValue) {
+		SEIRLabelValue oldDeltaValue = deltaValue;
+		deltaValue = newDeltaValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue getProbeValue() {
+		if (probeValue != null && probeValue.eIsProxy()) {
+			InternalEObject oldProbeValue = (InternalEObject)probeValue;
+			probeValue = (SEIRLabelValue)eResolveProxy(oldProbeValue);
+			if (probeValue != oldProbeValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SEIR_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+			}
+		}
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue basicGetProbeValue() {
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProbeValue(SEIRLabelValue newProbeValue) {
+		SEIRLabelValue oldProbeValue = probeValue;
+		probeValue = newProbeValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue getTempValue() {
+		if (tempValue != null && tempValue.eIsProxy()) {
+			InternalEObject oldTempValue = (InternalEObject)tempValue;
+			tempValue = (SEIRLabelValue)eResolveProxy(oldTempValue);
+			if (tempValue != oldTempValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SEIR_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+			}
+		}
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue basicGetTempValue() {
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTempValue(SEIRLabelValue newTempValue) {
+		SEIRLabelValue oldTempValue = tempValue;
+		tempValue = newTempValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue getOriginalValue() {
+		if (originalValue != null && originalValue.eIsProxy()) {
+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;
+			originalValue = (SEIRLabelValue)eResolveProxy(oldOriginalValue);
+			if (originalValue != oldOriginalValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SEIR_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+			}
+		}
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue basicGetOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(SEIRLabelValue newOriginalValue) {
+		SEIRLabelValue oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue getErrorScale() {
+		if (errorScale != null && errorScale.eIsProxy()) {
+			InternalEObject oldErrorScale = (InternalEObject)errorScale;
+			errorScale = (SEIRLabelValue)eResolveProxy(oldErrorScale);
+			if (errorScale != oldErrorScale) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SEIR_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+			}
+		}
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue basicGetErrorScale() {
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setErrorScale(SEIRLabelValue newErrorScale) {
+		SEIRLabelValue oldErrorScale = errorScale;
+		errorScale = newErrorScale;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public SEIRLabelValue getCurrentSEIRValue() {
+		return (SEIRLabelValue) getCurrentValue();
+	} // getCurrentSEIRValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public SEIRLabelValue getNextSEIRValue() {
+		return (SEIRLabelValue) getNextValue();
+	} // getNextSEIRValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#setE(double)
+	 */
+	public void setE(double e) {
+		getCurrentSEIRValue().setE(e);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getE()
+	 */
+	public double getE() {
+		return getCurrentSEIRValue().getE();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getNextE()
+	 */
+	public double getNextE() {
+		return getNextSEIRValue().getE();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#setNextE(double)
+	 */
+	public void setNextE(double e) {
+		getNextSEIRValue().setE(e);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getR()
+	 */
+	public double getR() {
+		return getCurrentSEIRValue().getR();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setR(double)
+	 */
+	public void setR(double r) {
+		getCurrentSEIRValue().setR(r);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getNextR()
+	 */
+	public double getNextR() {
+		return getNextSEIRValue().getR();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setNextR(double)
+	 */
+	public void setNextR(double r) {
+		getNextSEIRValue().setR(r);
+	} // setNextR
+
+	/**
+	 * @return set the number number of infectious population members
+	 */
+	public void setNextI(double i) {
+		((SILabelValue)getNextValue()).setI(i);
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getI()
+	 */
+	public double getI() {
+		return getCurrentSEIRValue().getI();
+	} // getI
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setI()
+	 */
+	public void setI(double i) {
+		getCurrentSEIRValue().setI(i);
+	} // getI
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getNextI()
+	 */
+	public double getNextI() {
+		return getNextSEIRValue().getI();
+	} // getNextI
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL__DELTA_VALUE:
+				if (resolve) return getDeltaValue();
+				return basicGetDeltaValue();
+			case StandardPackage.SEIR_LABEL__PROBE_VALUE:
+				if (resolve) return getProbeValue();
+				return basicGetProbeValue();
+			case StandardPackage.SEIR_LABEL__TEMP_VALUE:
+				if (resolve) return getTempValue();
+				return basicGetTempValue();
+			case StandardPackage.SEIR_LABEL__ORIGINAL_VALUE:
+				if (resolve) return getOriginalValue();
+				return basicGetOriginalValue();
+			case StandardPackage.SEIR_LABEL__ERROR_SCALE:
+				if (resolve) return getErrorScale();
+				return basicGetErrorScale();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL__DELTA_VALUE:
+				setDeltaValue((SEIRLabelValue)newValue);
+				return;
+			case StandardPackage.SEIR_LABEL__PROBE_VALUE:
+				setProbeValue((SEIRLabelValue)newValue);
+				return;
+			case StandardPackage.SEIR_LABEL__TEMP_VALUE:
+				setTempValue((SEIRLabelValue)newValue);
+				return;
+			case StandardPackage.SEIR_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SEIRLabelValue)newValue);
+				return;
+			case StandardPackage.SEIR_LABEL__ERROR_SCALE:
+				setErrorScale((SEIRLabelValue)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL__DELTA_VALUE:
+				setDeltaValue((SEIRLabelValue)null);
+				return;
+			case StandardPackage.SEIR_LABEL__PROBE_VALUE:
+				setProbeValue((SEIRLabelValue)null);
+				return;
+			case StandardPackage.SEIR_LABEL__TEMP_VALUE:
+				setTempValue((SEIRLabelValue)null);
+				return;
+			case StandardPackage.SEIR_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SEIRLabelValue)null);
+				return;
+			case StandardPackage.SEIR_LABEL__ERROR_SCALE:
+				setErrorScale((SEIRLabelValue)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL__DELTA_VALUE:
+				return deltaValue != null;
+			case StandardPackage.SEIR_LABEL__PROBE_VALUE:
+				return probeValue != null;
+			case StandardPackage.SEIR_LABEL__TEMP_VALUE:
+				return tempValue != null;
+			case StandardPackage.SEIR_LABEL__ORIGINAL_VALUE:
+				return originalValue != null;
+			case StandardPackage.SEIR_LABEL__ERROR_SCALE:
+				return errorScale != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	public void reset(STEMTime time) {
+		// Adjust current value by adding/substracting deltas by other models (population models).
+		// We do this to set the right counts to match the population numbers at the beginning
+		// of the simulation.
+		
+		for(Label l:this.getNode().getLabels()) {
+			if(l instanceof IntegrationLabel) {
+				IntegrationLabel il = (IntegrationLabel)l;
+				if(l == this) continue;
+				SimpleDataExchangeLabelValue delta = (SimpleDataExchangeLabelValue)il.getDeltaValue();
+				
+				double additions = delta.getAdditions();
+				double substractions = delta.getSubstractions();
+				
+				// We scale the label values back since at this point the innoculators/infectors
+				// have already been applied and we need to modify all states of the disease
+				
+				double popCount = ((SILabelValue)this.getCurrentValue()).getPopulationCount();
+				if(additions > 0.0) {
+					double factor = additions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue addV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					addV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).add((IntegrationLabelValue)addV);
+				}
+				if(substractions > 0.0) {
+					double factor = substractions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue subV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					subV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).sub((IntegrationLabelValue)subV);
+				}
+				
+					
+			}
+		}
+	}
+
+	
+} // SEIRLabelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelValueImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelValueImpl.java
new file mode 100644
index 0000000..72acd40
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SEIRLabelValueImpl.java
@@ -0,0 +1,449 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SEIR Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl#getE <em>E</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SEIRLabelValueImpl extends SIRLabelValueImpl implements
+		SEIRLabelValue {
+	/**
+	 * The default value of the '{@link #getE() <em>E</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getE()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double E_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getE() <em>E</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getE()
+	 * @generated
+	 * @ordered
+	 */
+	protected double e = E_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SEIRLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * @param e
+	 *            the number of exposed population members
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 *        
+	 * @param incidence
+	 *            the new incidence from the interaction term in the compartment model
+	 * 
+	 * @param r
+	 *            the number of recovered population members
+	 * @param births
+	 *            the number of births that have occurred in the population
+	 * @param deaths
+	 *            the total number of deaths that have occurred in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occurred in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SEIRLabelValueImpl(final double s, final double e, final double i, double incidence,
+			final double r, 
+			final double diseaseDeaths) {
+		super(s, i, incidence, r, diseaseDeaths);
+		this.e = e;
+	} // SEIRLabelValueImpl
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * @param e
+	 *            the number of exposed population members
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 *
+	 * @param r
+	 *            the number of recovered population members
+	 * @param births
+	 *            the number of births that have occurred in the population
+	 * @param deaths
+	 *            the total number of deaths that have occurred in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occurred in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SEIRLabelValueImpl(final double s, final double e, final double i, 
+			final double r, 
+			final double diseaseDeaths) {
+		super(s, i, 0.0, r, diseaseDeaths);
+		this.e = e;
+	} // SEIRLabelValueImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SEIR_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getE() {
+		return e;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newE
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setE(double newE) {
+		double oldE = e;
+		e = newE;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SEIR_LABEL_VALUE__E, oldE, e));
+	}
+
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#getPopulationCount()
+	 */
+	@Override
+	public double getPopulationCount() {
+		return e + super.getPopulationCount();
+	} // getPopulationCount
+
+	
+	@Override
+	public void zeroOutPopulationCount() {
+		super.zeroOutPopulationCount();
+		setE(E_EDEFAULT);
+	} // zeroOutPopulationCount
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue set(IntegrationLabelValue value) {
+		super.set(value);
+		setE(((SEIRLabelValue) value).getE());
+		return this;
+	} // set
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue add(IntegrationLabelValue value) {
+		super.add(value);
+		setE(getE() + ((SEIRLabelValue) value).getE());
+		return this;
+	} // add
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue sub(IntegrationLabelValue value) {
+		super.sub(value);
+		setE(getE() - ((SEIRLabelValue) value).getE());
+		return this;
+	} // sub
+	
+	@Override
+	public DiseaseModelLabelValue scale(double scaleFactor) {
+		super.scale(scaleFactor);
+		setE(getE() *scaleFactor);
+		return this;
+	} // scale
+	
+	public DiseaseModelLabelValue add(double addition) {
+		super.add(addition);
+		setE(getE() +addition);
+		return this;
+	} // scale
+
+	public DiseaseModelLabelValue abs() {
+		super.abs();
+		setE(Math.abs(getE()));
+		return this;
+	} // scale
+	
+	
+	public IntegrationLabelValue divide(IntegrationLabelValue d) {
+		SEIRLabelValue _scale = (SEIRLabelValue)d;
+		double sScaled = Math.abs(s) / Math.abs(_scale.getS());
+		double iScaled = Math.abs(i) / Math.abs(_scale.getI());
+		double rScaled = Math.abs(r) / Math.abs(_scale.getR());
+		double eScaled = Math.abs(e) / Math.abs(_scale.getE());
+		setS(sScaled);
+		setI(iScaled);
+		setR(rScaled);
+		setE(eScaled);
+		return this;
+	}
+	
+	public double max() {
+		double max;
+		if(s > i && s > r && s > e)
+			max = s;
+		else if(i > r && i > e) max = i;
+		else if(r > e) max = r;
+		else max = e;
+		return max;  
+	}
+	
+	/**
+	 * Adjust when a delta value is bad, e.g. forces the 
+	 * target to go negative in any state.
+	 * 
+	 * @return boolean
+	 * @override
+	 */
+	public boolean adjustDelta(IntegrationLabelValue target) {
+		SEIRLabelValue seirValue = (SEIRLabelValue)target;
+		
+		boolean adjusted = false;
+		double newS = this.getS() + seirValue.getS();
+		double newE = this.getE() + seirValue.getE();
+		double newI = this.getI() + seirValue.getI();
+		double newR = this.getR() + seirValue.getR();
+	
+		double factor = 1.0;
+		if(newS < newE && newS < newI && newS < newR && newS < 0.0) {
+			// Scale using S
+			adjusted = true;
+			factor = -seirValue.getS()/this.getS();
+		} else if(newE < newI && newE < newR && newE < 0.0) {
+			// Scale using E
+			adjusted = true;
+			factor = -seirValue.getE()/this.getE();
+		} else if(newI < newR && newI < 0.0) {
+			// Scale using I
+			adjusted = true;
+			factor = -seirValue.getI()/this.getI();
+		} else if(newR < 0.0) {
+			// Scale using R
+			adjusted = true;
+			factor = -seirValue.getR()/this.getR();
+		}
+		if(adjusted) this.scale(factor);
+		
+		// Due to precision limitations it is still possible the number if tiny negative. Adjust if necessary
+		newS = this.getS() + seirValue.getS();
+		newE = this.getE() + seirValue.getE();
+		newI = this.getI() + seirValue.getI();
+		newR = this.getR() + seirValue.getR();
+
+		if(newS<0)
+			this.setS(-seirValue.getS());
+		if(newE<0)
+			this.setE(-seirValue.getE());
+		if(newI<0)
+			this.setI(-seirValue.getI());
+		if(newR<0)
+			this.setR(-seirValue.getR());
+		return adjusted;
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		setE(E_EDEFAULT);
+	} // reset
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && getE() >= E_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && getE() <= MAX_POPULATION_VALUE;
+		assert retValue;		
+		
+		retValue = retValue && !Double.isInfinite(getE());
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(getE());
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL_VALUE__E:
+				return getE();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL_VALUE__E:
+				setE((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL_VALUE__E:
+				setE(E_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SEIR_LABEL_VALUE__E:
+				return e != E_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append("s:"); //$NON-NLS-1$
+		result.append(getFormatter().format(s));
+		result.append(", e:"); //$NON-NLS-1$
+		result.append(getFormatter().format(e));
+		result.append(", i:"); //$NON-NLS-1$
+		result.append(getFormatter().format(i));
+		result.append(", r:"); //$NON-NLS-1$
+		result.append(getFormatter().format(r));
+		result.append(", DD:"); //$NON-NLS-1$
+		result.append(getFormatter().format(getDiseaseDeaths()));
+		return result.toString();
+	} // toString
+
+} // SEIRLabelValueImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIDiseaseModelStateImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIDiseaseModelStateImpl.java
new file mode 100644
index 0000000..7838b17
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIDiseaseModelStateImpl.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SI Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class SIDiseaseModelStateImpl extends StandardDiseaseModelStateImpl
+		implements SIDiseaseModelState {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIDiseaseModelStateImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SI_DISEASE_MODEL_STATE;
+	}
+
+} // SIDiseaseModelStateImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIImpl.java
new file mode 100644
index 0000000..f483f8f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIImpl.java
@@ -0,0 +1,1137 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl;
+import org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelImpl;
+import org.eclipse.stem.definitions.labels.impl.RoadTransportRelationshipLabelValueImpl;
+import org.eclipse.stem.definitions.nodes.Region;
+//import org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+//import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+//import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SI</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getTransmissionRate <em>Transmission Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getNonLinearityCoefficient <em>Non Linearity Coefficient</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getRecoveryRate <em>Recovery Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getInfectiousMortalityRate <em>Infectious Mortality Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getPhysicallyAdjacentInfectiousProportion <em>Physically Adjacent Infectious Proportion</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getRoadNetworkInfectiousProportion <em>Road Network Infectious Proportion</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIImpl#getInfectiousMortality <em>Infectious Mortality</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SIImpl extends StandardDiseaseModelImpl implements SI {
+	/**
+	 * The default value of the '{@link #getTransmissionRate() <em>Transmission Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTransmissionRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TRANSMISSION_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTransmissionRate() <em>Transmission Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTransmissionRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double transmissionRate = TRANSMISSION_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNonLinearityCoefficient() <em>Non Linearity Coefficient</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNonLinearityCoefficient()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double NON_LINEARITY_COEFFICIENT_EDEFAULT = 1.0;
+
+	/**
+	 * The cached value of the '{@link #getNonLinearityCoefficient() <em>Non Linearity Coefficient</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNonLinearityCoefficient()
+	 * @generated
+	 * @ordered
+	 */
+	protected double nonLinearityCoefficient = NON_LINEARITY_COEFFICIENT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRecoveryRate() <em>Recovery Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRecoveryRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double RECOVERY_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getRecoveryRate() <em>Recovery Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getRecoveryRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double recoveryRate = RECOVERY_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInfectiousMortalityRate() <em>Infectious Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getInfectiousMortalityRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INFECTIOUS_MORTALITY_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getInfectiousMortalityRate() <em>Infectious Mortality Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getInfectiousMortalityRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double infectiousMortalityRate = INFECTIOUS_MORTALITY_RATE_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getPhysicallyAdjacentInfectiousProportion() <em>Physically Adjacent Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPhysicallyAdjacentInfectiousProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION_EDEFAULT = 0.05;
+	
+	/**
+	 * For distances less than the REFERENCE_COMMUTE_DISTANCE = 50.0
+	 * we use the default physicallyAdjacentInfectiousProportion
+	 * This then is really the MAXIMUM physicallyAdjacentInfectiousProportion.
+	 * For distances (counties) larger than REFERENCE_COMMUTE_DISTANCE in linear extent,
+	 * we scale the physicallyAdjacentInfectiousProportion by REFERENCE_COMMUTE_DISTANCE/LINEAR EXTENT
+	 * Where Linear Extent is Sqrt(Area).
+	 */
+	protected static final double REFERENCE_COMMUTE_DISTANCE = 45.0;
+
+	/**
+	 * The cached value of the '{@link #getPhysicallyAdjacentInfectiousProportion() <em>Physically Adjacent Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPhysicallyAdjacentInfectiousProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected double physicallyAdjacentInfectiousProportion = PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getRoadNetworkInfectiousProportion() <em>Road Network Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadNetworkInfectiousProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ROAD_NETWORK_INFECTIOUS_PROPORTION_EDEFAULT = 0.01;
+
+	/**
+	 * The cached value of the '{@link #getRoadNetworkInfectiousProportion() <em>Road Network Infectious Proportion</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRoadNetworkInfectiousProportion()
+	 * @generated
+	 * @ordered
+	 */
+	protected double roadNetworkInfectiousProportion = ROAD_NETWORK_INFECTIOUS_PROPORTION_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getInfectiousMortality() <em>Infectious Mortality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInfectiousMortality()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INFECTIOUS_MORTALITY_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getInfectiousMortality() <em>Infectious Mortality</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInfectiousMortality()
+	 * @generated
+	 * @ordered
+	 */
+	protected double infectiousMortality = INFECTIOUS_MORTALITY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIImpl() {
+		super();
+	}
+
+	/**
+	 * @param siDiseaseModel
+	 *            the SI disease model to be initialized
+	 * @param diseaseModelName
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 * @param populationIdentifier
+	 */
+	protected static SI initializeSIDiseaseModel(final SI siDiseaseModel,
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		StandardDiseaseModelImpl.initializeStandardDiseaseModel(siDiseaseModel,
+				diseaseModelName, backgroundMortalityRate, timePeriod,
+				populationIdentifier);
+		siDiseaseModel.setTransmissionRate(transmissionRate);
+		siDiseaseModel.setRecoveryRate(recoveryRate);
+		siDiseaseModel.setInfectiousMortalityRate(infectiousMortalityRate);
+		siDiseaseModel.setNonLinearityCoefficient(nonLinearityCoefficient);
+		return siDiseaseModel;
+	} // initializeSIRDiseaseModel
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#computeDeaths(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue,
+	 *      long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeathsDeltas(
+			final STEMTime time, final StandardDiseaseModelLabelValue currentLabelValue, final long timeDelta, DiseaseModelLabelValue returnValue) {
+
+		final SILabelValue currentSEIR = (SILabelValue) currentLabelValue;
+		
+		final double adjustedInfectiousMortalityRate = getAdjustedInfectiousMortalityRate(timeDelta);
+		
+		final double diseaseDeaths = adjustedInfectiousMortalityRate
+				* currentSEIR.getI();
+
+		SILabelValueImpl ret = (SILabelValueImpl)returnValue;
+		ret.setS(0.0);
+		ret.setI(-diseaseDeaths);
+		ret.setIncidence(0.0);
+		ret.setDiseaseDeaths(diseaseDeaths);
+		
+		return ret;
+	} // computeBirthDeathsDeltas
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#computeTransitions(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue,
+	 *      long, double, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		
+		final SILabelValue currentSI = (SILabelValue) currentState;
+		
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+				
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSI.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSI.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSI.getS()* effectiveInfectious;
+		
+		double numberOfInfectedToSusceptible = getAdjustedRecoveryRate(timeDelta)
+				* currentSI.getI();
+		
+	
+		// Determine delta S
+		final double deltaS = - numberOfSusceptibleToInfected + numberOfInfectedToSusceptible;
+		// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected - numberOfInfectedToSusceptible;	
+	
+		SILabelValueImpl ret = (SILabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToInfected);
+		ret.setDiseaseDeaths(0.0);
+		return ret;
+	} // computeDiseaseDeltas
+	
+	
+	
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getMigrationDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue getMigrationDeltas(final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, DiseaseModelLabelValue returnValue) {
+		final StandardDiseaseModelLabelValue retValue = (StandardDiseaseModelLabelValue) createDiseaseModelLabelValue();
+		
+		double deltaS = 0.0;
+		double deltaI = 0.0;
+
+		// DO MIGRATION THROUGH MIGRATION EDGES
+	    // to/from THIS node
+		Node node = diseaseLabel.getNode();
+		for (final Iterator<Edge> migrationEdgeIter = MigrationEdgeLabelImpl.getMigrationEdgesFromNode(node).iterator(); migrationEdgeIter.hasNext();) {
+			//every edge is an A=>B Edge. For each node there might be two edges
+			//where THIS node can act as type A or type B (origin or destination)
+			final Edge migrationEdge = migrationEdgeIter.next();
+			MigrationEdgeLabel migrationLabel = (MigrationEdgeLabel) migrationEdge.getLabel();
+			double migrationRate = migrationLabel.getCurrentValue().getMigrationRate();
+			// get the other node
+			final Node otherNode = migrationEdge.getOtherNode(node);
+			// do a test to find out if this edge is an incoming or outgoing edge
+			// by getting the edges' destination node (which could be THIS node)
+			boolean incomming = (migrationEdge.getB().equals(node));
+			// is this incoming
+			if (incomming) {
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = otherNode.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SILabel otherSILabel = (SILabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == otherSILabel.getDecorator()) {
+							deltaS  += migrationRate*otherSILabel.getTempValue().getS();
+							deltaI += migrationRate*otherSILabel.getTempValue().getI();
+							break;
+						} // if
+					}
+				} // for
+			} else {
+				// edge is outgoing
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SILabel thisSILabel = (SILabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == thisSILabel.getDecorator()) {
+							deltaS  -= migrationRate*thisSILabel.getTempValue().getS();
+							deltaI -= migrationRate*thisSILabel.getTempValue().getI();
+							break;
+						} // if
+					}
+				} // for
+			}
+		} // for each migration edge
+		SILabelValueImpl ret = (SILabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(0.0);
+		ret.setDiseaseDeaths(0.0);
+		return ret;
+	} // getMigrationDeltas
+
+
+
+	/**
+	 * @param fractionToDepart
+	 * @param nextState
+	 * @return
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue computeDepartures(
+			final double fractionToDepart,
+			final StandardDiseaseModelLabelValue nextState) {
+		final SILabelValue departees = StandardFactory.eINSTANCE
+				.createSEIRLabelValue();
+		final SILabelValue siState = (SILabelValue) nextState;
+		departees.setS(fractionToDepart * siState.getS());
+		departees.setI(fractionToDepart * siState.getI());
+		return departees;
+	} // computeDepartures
+
+	/**
+	 * This method is used to scale the transmission rate.
+ 	 * it returns the local density divided by a "reference" density
+	 * @param diseaseLabel the label being processed
+	 * @return the transmission rate scale factor for the label being processed
+	 */
+	public double getTransmissionRateScaleFactor(
+			StandardDiseaseModelLabel diseaseLabel) {
+		final StandardDiseaseModelState sdms = (StandardDiseaseModelState) diseaseLabel
+				.getDiseaseModelState();
+		
+		double referenceDensity = getReferencePopulationDensity();
+		// assert(referenceDensity > 0);
+		// need editor check so ref density always >1. Default is 100.
+		assert getArea(diseaseLabel.getPopulationLabel()) > 0.0;
+		double localDensity = ((StandardDiseaseModelLabelValue)diseaseLabel.getTempValue()).getPopulationCount()/getArea(diseaseLabel.getPopulationLabel());
+		return localDensity/referenceDensity;
+	} // getTransmissionRateScaleFactor
+
+	
+	/**
+	 * The <em>infectious mortality rate</em> is the rate at which
+	 * <em>Infectious</em> population members die. Basically, that rate is
+	 * simply the proportional fraction of the flow into the <em>Infectious</em>
+	 * state.
+	 * 
+	 * @param infectiousInputRate
+	 *            the rate at which population members enter the infectious
+	 *            state (&beta;)
+	 * @param infectiousMortality
+	 *            the proportion of population members that die from the disease
+	 *            (x)
+	 * @return the rate at which population members die from the disease
+	 */
+//	public double computeInfectiousMortalityRate(
+//			final double infectiousInputRate, final double infectiousMortality) {
+//		return infectiousMortality * infectiousInputRate;
+//	} // computeInfectiousMortalityRate
+
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelLabel()
+	 */
+	@Override
+	public DiseaseModelLabel createDiseaseModelLabel() {
+		return StandardFactory.eINSTANCE.createSILabel();
+	} // createDiseaseModelLabel
+
+	@Override
+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {
+		return StandardFactory.eINSTANCE.createSILabelValue();
+	} // createDiseaseModelLabelValue
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelState()
+	 */
+	@Override
+	public DiseaseModelState createDiseaseModelState() {
+		return StandardFactory.eINSTANCE.createSIDiseaseModelState();
+	} // createDiseaseModelState
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createInfector()
+	 */
+	@Override
+	public Infector createInfector() {
+		SIInfector retValue = StandardFactory.eINSTANCE.createSIInfector();
+		retValue.setDiseaseName(this.getDiseaseName());
+		retValue.setPopulationIdentifier(getPopulationIdentifier());
+		return retValue;
+	} // createInfector
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SI;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTransmissionRate() {
+		return transmissionRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newTransmissionRate
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransmissionRate(double newTransmissionRate) {
+		double oldTransmissionRate = transmissionRate;
+		transmissionRate = newTransmissionRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__TRANSMISSION_RATE, oldTransmissionRate, transmissionRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRecoveryRate() {
+		return recoveryRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newRecoveryRate
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRecoveryRate(double newRecoveryRate) {
+		double oldRecoveryRate = recoveryRate;
+		recoveryRate = newRecoveryRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__RECOVERY_RATE, oldRecoveryRate, recoveryRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getInfectiousMortalityRate() {
+		return infectiousMortalityRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInfectiousMortalityRate(double newInfectiousMortalityRate) {
+		double oldInfectiousMortalityRate = infectiousMortalityRate;
+		infectiousMortalityRate = newInfectiousMortalityRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__INFECTIOUS_MORTALITY_RATE, oldInfectiousMortalityRate, infectiousMortalityRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getPhysicallyAdjacentInfectiousProportion() {
+		return physicallyAdjacentInfectiousProportion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPhysicallyAdjacentInfectiousProportion(double newPhysicallyAdjacentInfectiousProportion) {
+		double oldPhysicallyAdjacentInfectiousProportion = physicallyAdjacentInfectiousProportion;
+		physicallyAdjacentInfectiousProportion = newPhysicallyAdjacentInfectiousProportion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION, oldPhysicallyAdjacentInfectiousProportion, physicallyAdjacentInfectiousProportion));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getRoadNetworkInfectiousProportion() {
+		return roadNetworkInfectiousProportion;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRoadNetworkInfectiousProportion(double newRoadNetworkInfectiousProportion) {
+		double oldRoadNetworkInfectiousProportion = roadNetworkInfectiousProportion;
+		roadNetworkInfectiousProportion = newRoadNetworkInfectiousProportion;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION, oldRoadNetworkInfectiousProportion, roadNetworkInfectiousProportion));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getInfectiousMortality() {
+		return infectiousMortality;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInfectiousMortality(double newInfectiousMortality) {
+		double oldInfectiousMortality = infectiousMortality;
+		infectiousMortality = newInfectiousMortality;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__INFECTIOUS_MORTALITY, oldInfectiousMortality, infectiousMortality));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdjustedInfectiousMortalityRate(long timeDelta) {
+		// TODO this division can be eliminated if timeDelta==getTimePeriod
+		return getInfectiousMortalityRate()
+		* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedInfectiousMortalityRate
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getNonLinearityCoefficient() {
+		return nonLinearityCoefficient;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newNonLinearityCoefficient
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNonLinearityCoefficient(double newNonLinearityCoefficient) {
+		double oldNonLinearityCoefficient = nonLinearityCoefficient;
+		nonLinearityCoefficient = newNonLinearityCoefficient;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI__NON_LINEARITY_COEFFICIENT, oldNonLinearityCoefficient, nonLinearityCoefficient));
+	}
+
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to or adjusts 
+	 * the disease state transition values by multiplying
+	 * the additions by a random variable r ~ (1+/-x) with x small.
+	 * The requirements that no more individuals can be moved from a state than are
+	 * already in that state is still enforced.
+	 * 
+	 */
+	public void doModelSpecificAdjustments(StandardDiseaseModelLabelValue val) {
+	} // doModelSpecificAdjustments
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * Returns the time interval deltaT divided by the initial time period
+	 * @param timeDelta
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public double getAdjustedTransmissionRate(long timeDelta) {
+		return getTransmissionRate()
+				* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedTransmissionRate
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param timeDelta
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public double getAdjustedRecoveryRate(long timeDelta) {
+		return getRecoveryRate()
+				* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedRecoveryRate
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getEffectiveInfectious(Node node, StandardDiseaseModelLabel diseaseLabel, double onsiteInfectious) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * This method replaces the onsiteInfectious value with an effectiveInfectious population
+	 * size based on mixing with neighboring sites. In this implementation the edges are bidirectional
+	 * and have a fixed weight based on getPhysicallyAdjacentInfectiousProportion() (called in the helper method
+	 * getInfectiousChangeFromMixing(). But the mixing is also weighted by the areas and populations of a site relative
+	 * to the area and population of it's neighbors. Note that the value returned must be NORMALIZED by the total
+	 * population because the product beta * S * Ieffective must have units of persons. Since S has units of persons
+	 * the Ieffective must be dimensionless (normalized to the population). beta is the infection rate and has units
+	 * of inverse time.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI.getNormalizedEffectiveInfectious
+	 * @param node the node we are currently looking at to compute the next disease state
+	 * @param diseaseLabel the label for the current disease computation
+	 * @param onsiteInfectious the number of infectious people on site (at the node above)
+	 * @generated NOT
+	 */
+	public double getNormalizedEffectiveInfectious(final Node node, final StandardDiseaseModelLabel diseaseLabel, final double onsiteInfectious) {
+        // running tally of changes from mixing with other nodes
+		double infectiousChangeFromMixing = 0.0;
+		double borderDivisor = 0.0;
+		double roadDivisor = 0.0;
+		
+		for (final Iterator<Edge> commonBorderEdgeIter = CommonBorderRelationshipLabelImpl
+				.getCommonBorderEdgesFromNode(node).iterator(); commonBorderEdgeIter
+				.hasNext();) {
+			final Edge borderEdge = commonBorderEdgeIter.next();
+			// If it exists, we're looking for the label this disease model
+			// updates on the node at the other end of the border edge.
+			final Node otherNode = borderEdge.getOtherNode(node);
+			StandardDiseaseModelLabel neighborLabel = null;
+			// sum up the changes from each connected node.
+			// NOTE: some of these changes could be negative
+			
+			///////////////////////////////////////////////////////////////////////
+			// get the Default or MAXIMUM value for the physAdjacentInfProportion
+			double physAdjacentInfProportion = getPhysicallyAdjacentInfectiousProportion();
+			// we need to scale the default Physically Adjacent Infectious proportion by
+			// the AREA of the REGION
+			
+			if (otherNode instanceof Region) {
+				double otherAvgExtent = -1.0;
+				for (final Iterator<NodeLabel> labelIter = otherNode.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this an area label?
+					if (nodeLabel instanceof AreaLabel) {
+						// Yes
+						final AreaLabel areaLabel = (AreaLabel) nodeLabel;
+						otherAvgExtent = areaLabel.getCurrentAreaValue().getAverageExtent();
+						break;
+					}
+				} // for
+				// IF we have a valid area 
+				// then we can re-scale the default Physically Adjacent Infectious proportion
+				if(otherAvgExtent >= 1.0) {
+					double scaleFactor = (REFERENCE_COMMUTE_DISTANCE/otherAvgExtent) ;
+					physAdjacentInfProportion *= scaleFactor;
+					if(physAdjacentInfProportion >= 1.0) physAdjacentInfProportion = 1.0;
+				}
+			}
+			
+			infectiousChangeFromMixing += getInfectiousChangeFromMixing(this, otherNode, diseaseLabel, onsiteInfectious, physAdjacentInfProportion);
+			borderDivisor += getPhysicallyAdjacentInfectiousProportion()*this.getLocalPopulation(this, otherNode);
+		} // for each border edge
+		
+		for (final Iterator<Edge> roadEdgeIter = RoadTransportRelationshipLabelImpl.getRoadEdgesFromNode(node).iterator(); 	roadEdgeIter.hasNext();) {
+			final Edge roadEdge = roadEdgeIter.next();
+			
+			// find the number of edges from the road edge - could be more than one
+			// also, roads have differenct capacities
+			final EdgeLabel edgeLabel = roadEdge.getLabel();
+			// init the number of crossings or total road connections across the border
+			double numCrossings = 1.0;
+		
+			if (edgeLabel instanceof RoadTransportRelationshipLabelImpl) {
+				RoadTransportRelationshipLabelValueImpl roadLabelValue = (RoadTransportRelationshipLabelValueImpl)(edgeLabel.getCurrentValue());
+				numCrossings = roadLabelValue.getNumberCrossings();
+			}
+			double infectiousProportion = getRoadNetworkInfectiousProportion() * numCrossings;
+			
+			// must never be greater than 1
+			if(infectiousProportion > 1.0) infectiousProportion = 1.0;
+			
+			// If it exists, we're looking for the label this disease model
+			// updates on the node at the other end of the border edge.
+			final Node otherNode = roadEdge.getOtherNode(node);
+			StandardDiseaseModelLabel neighborLabel = null;
+			// sum up the changes from each connected node.
+			// NOTE: some of these changes could be negative
+			infectiousChangeFromMixing += getInfectiousChangeFromMixing(this, otherNode, diseaseLabel, onsiteInfectious, infectiousProportion);
+			
+			roadDivisor += infectiousProportion*this.getLocalPopulation(this, otherNode);
+		} // for each road edge
+		
+	
+		// return the sum normalized to the total population
+		double denom = ((StandardDiseaseModelLabelValue)diseaseLabel.getTempValue()).getPopulationCount() + borderDivisor + roadDivisor;
+		double retVal = 0.0;
+		if (denom > 0.0) {
+			retVal = ( onsiteInfectious + infectiousChangeFromMixing ) / denom;
+		}
+		
+		
+		return retVal;
+
+	} // getPhysicallyAdjacentInfectious
+	
+	/**
+	 * This method correctly computes the mixing of the infectious population (onsite) with the infectious population
+	 * at neighboring nodes
+	 * @param diseaseModel
+	 * @param the node
+	 * @param diseaseLabel
+	 * @param onsiteInfectious
+	 * @param connectedInfectiousProportion (this is the weight given to the edge connection)
+	 * @return the number of population members at a node infected by the disease modeled by diseaseModel
+	 */
+	protected double getInfectiousChangeFromMixing(final SI diseaseModel,
+			final Node node, final StandardDiseaseModelLabel diseaseLabel, final double onsiteInfectious, double connectedInfectiousProportion) {
+		double retValue = 0.0;
+
+		// the local area
+		double a0 = getArea(diseaseLabel.getPopulationLabel());
+		// the local population
+
+		double p0 = ((StandardDiseaseModelLabelValue)diseaseLabel.getTempValue()).getPopulationCount();
+		
+		// infectious from other sites mixing here at site 0
+		double mixing = 0.0;
+			
+		for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter
+				.hasNext();) {
+			final NodeLabel nodeLabel = labelIter.next();
+			// Is this a disease label?
+			if (nodeLabel instanceof StandardDiseaseModelLabel) {
+				final IntegrationLabel otherSILabel = (IntegrationLabel) nodeLabel;
+				// Yes
+				// Is it updated by this disease model?
+				if (diseaseModel == otherSILabel.getDecorator()) {
+					if(this.isFrequencyDependent()) {
+						double Iother = (((SILabelValue)otherSILabel.getTempValue())).getI();
+						//double Iother = otherSILabel.getCurrentSIValue().getI();
+						double mixingFactor = connectedInfectiousProportion;					
+						mixing = Iother * mixingFactor;
+					} else {
+//						double a1 = getArea(otherSILabel.getPopulationLabel());
+//						double p1 = ((StandardDiseaseModelLabelValue)otherSILabel.getTempValue()).getPopulationCount();
+//						double Iother = (otherSILabel.getTempValue()).getI();
+//						double mixingFactor = (a0*p1 + a1*p0)* connectedInfectiousProportion /(a1* (p1+p0)) ;
+					
+//						mixing = Iother * mixingFactor;
+					}
+					
+					break;
+				} // if
+			}
+		} // for
+
+		return mixing;
+	} // getInfectious
+	
+    private double getLocalPopulation(final SI diseaseModel, Node node) {
+    	for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter.hasNext();) {
+    		final NodeLabel nodeLabel = labelIter.next();
+    		// Is this a disease label?
+    		if (nodeLabel instanceof StandardDiseaseModelLabel) {
+    			final IntegrationLabel otherSILabel = (IntegrationLabel) nodeLabel;
+    			// Yes
+    			// Is it updated by this disease model?
+    			if (diseaseModel == otherSILabel.getDecorator()) 
+    		     return ((StandardDiseaseModelLabelValue)otherSILabel.getTempValue()).getPopulationCount();
+    		}
+    	}
+    	return 0.0;
+    }
+    
+    
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SI__TRANSMISSION_RATE:
+				return getTransmissionRate();
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+				return getNonLinearityCoefficient();
+			case StandardPackage.SI__RECOVERY_RATE:
+				return getRecoveryRate();
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+				return getInfectiousMortalityRate();
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+				return getPhysicallyAdjacentInfectiousProportion();
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+				return getRoadNetworkInfectiousProportion();
+			case StandardPackage.SI__INFECTIOUS_MORTALITY:
+				return getInfectiousMortality();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SI__TRANSMISSION_RATE:
+				setTransmissionRate((Double)newValue);
+				return;
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+				setNonLinearityCoefficient((Double)newValue);
+				return;
+			case StandardPackage.SI__RECOVERY_RATE:
+				setRecoveryRate((Double)newValue);
+				return;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+				setInfectiousMortalityRate((Double)newValue);
+				return;
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+				setPhysicallyAdjacentInfectiousProportion((Double)newValue);
+				return;
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+				setRoadNetworkInfectiousProportion((Double)newValue);
+				return;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY:
+				setInfectiousMortality((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI__TRANSMISSION_RATE:
+				setTransmissionRate(TRANSMISSION_RATE_EDEFAULT);
+				return;
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+				setNonLinearityCoefficient(NON_LINEARITY_COEFFICIENT_EDEFAULT);
+				return;
+			case StandardPackage.SI__RECOVERY_RATE:
+				setRecoveryRate(RECOVERY_RATE_EDEFAULT);
+				return;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+				setInfectiousMortalityRate(INFECTIOUS_MORTALITY_RATE_EDEFAULT);
+				return;
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+				setPhysicallyAdjacentInfectiousProportion(PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION_EDEFAULT);
+				return;
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+				setRoadNetworkInfectiousProportion(ROAD_NETWORK_INFECTIOUS_PROPORTION_EDEFAULT);
+				return;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY:
+				setInfectiousMortality(INFECTIOUS_MORTALITY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI__TRANSMISSION_RATE:
+				return transmissionRate != TRANSMISSION_RATE_EDEFAULT;
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+				return nonLinearityCoefficient != NON_LINEARITY_COEFFICIENT_EDEFAULT;
+			case StandardPackage.SI__RECOVERY_RATE:
+				return recoveryRate != RECOVERY_RATE_EDEFAULT;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+				return infectiousMortalityRate != INFECTIOUS_MORTALITY_RATE_EDEFAULT;
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+				return physicallyAdjacentInfectiousProportion != PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION_EDEFAULT;
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+				return roadNetworkInfectiousProportion != ROAD_NETWORK_INFECTIOUS_PROPORTION_EDEFAULT;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY:
+				return infectiousMortality != INFECTIOUS_MORTALITY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (transmissionRate: "); //$NON-NLS-1$
+		result.append(transmissionRate);
+		result.append(", nonLinearityCoefficient: "); //$NON-NLS-1$
+		result.append(nonLinearityCoefficient);
+		result.append(", recoveryRate: "); //$NON-NLS-1$
+		result.append(recoveryRate);
+		result.append(", infectiousMortalityRate: "); //$NON-NLS-1$
+		result.append(infectiousMortalityRate);
+		result.append(", physicallyAdjacentInfectiousProportion: "); //$NON-NLS-1$
+		result.append(physicallyAdjacentInfectiousProportion);
+		result.append(", roadNetworkInfectiousProportion: "); //$NON-NLS-1$
+		result.append(roadNetworkInfectiousProportion);
+		result.append(", infectiousMortality: "); //$NON-NLS-1$
+		result.append(infectiousMortality);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+		// transmissionRate
+		retValue = retValue && transmissionRate >= TRANSMISSION_RATE_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(transmissionRate);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(transmissionRate);
+		assert retValue;
+		
+		// recoveryRate
+		retValue = retValue && recoveryRate >= RECOVERY_RATE_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(recoveryRate);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(recoveryRate);
+		assert retValue;
+		
+		// nonLinearityCoefficient
+		retValue = retValue
+				&& nonLinearityCoefficient >= 0.0;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(nonLinearityCoefficient);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(nonLinearityCoefficient);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} // SIImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIInfectorImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIInfectorImpl.java
new file mode 100644
index 0000000..d2d513f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIInfectorImpl.java
@@ -0,0 +1,222 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SI Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIInfectorImpl#getInfectiousCount <em>Infectious Count</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SIInfectorImpl extends StandardInfectorImpl implements SIInfector {
+	/**
+	 * The default value of the '{@link #getInfectiousCount() <em>Infectious Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getInfectiousCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INFECTIOUS_COUNT_EDEFAULT = 1.0;
+
+	/**
+	 * The cached value of the '{@link #getInfectiousCount() <em>Infectious Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getInfectiousCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected double infectiousCount = INFECTIOUS_COUNT_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIInfectorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SI_INFECTOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getInfectiousCount() {
+		return infectiousCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newInfectiousCount
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInfectiousCount(double newInfectiousCount) {
+		double oldInfectiousCount = infectiousCount;
+		infectiousCount = newInfectiousCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT, oldInfectiousCount, infectiousCount));
+	}
+
+	/**
+	 * @param diseaseModelLabel
+	 *            the disease model label to have its infectious value
+	 *            initialized
+	 */
+	@Override
+	protected void doInitialization(final DiseaseModelLabel diseaseModelLabel) {
+		final IntegrationLabel siLabel = (IntegrationLabel) diseaseModelLabel;
+		final SILabelValue siValue = (SILabelValue)siLabel.getCurrentValue();
+		double newSValue = siValue.getS() - getInfectiousCount();
+		// TODO log infectious count greater than Susceptible population
+		final double additionalInfectious = newSValue < 0 ? siValue.getS()
+				: getInfectiousCount();
+		
+		final double newIValue = siValue.getI() + additionalInfectious;
+		
+		newSValue = newSValue < 0 ? 0 : newSValue;
+		((SILabelValue)siLabel.getCurrentValue()).setS(newSValue);
+		((SILabelValue)siLabel.getNextValue()).setS(newSValue);
+		(((SILabelValue)siLabel.getProbeValue())).setS(newSValue);
+		// We could divide them between the two infectious states, 
+		// but this should be okay
+		((SILabelValue)siLabel.getCurrentValue()).setI(newIValue);
+		((SILabelValue)siLabel.getNextValue()).setI(newIValue);
+		((SILabelValue)siLabel.getProbeValue()).setI(newIValue);
+	} // doInitialization
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT:
+				return getInfectiousCount();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT:
+				setInfectiousCount((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT:
+				setInfectiousCount(INFECTIOUS_COUNT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT:
+				return infectiousCount != INFECTIOUS_COUNT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (infectiousCount: "); //$NON-NLS-1$
+		result.append(infectiousCount);
+		result.append(')');
+		return result.toString();
+	}
+
+} // SIInfectorImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelImpl.java
new file mode 100644
index 0000000..8b5f228
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelImpl.java
@@ -0,0 +1,528 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SI Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl#getDeltaValue <em>Delta Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl#getProbeValue <em>Probe Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl#getTempValue <em>Temp Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl#getOriginalValue <em>Original Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl#getErrorScale <em>Error Scale</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SILabelImpl extends StandardDiseaseModelLabelImpl implements
+		SILabel {
+	/**
+	 * The cached value of the '{@link #getDeltaValue() <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeltaValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SILabelValue deltaValue;
+	/**
+	 * The cached value of the '{@link #getProbeValue() <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProbeValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SILabelValue probeValue;
+	/**
+	 * The cached value of the '{@link #getTempValue() <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTempValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SILabelValue tempValue;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SILabelValue originalValue;
+	/**
+	 * The cached value of the '{@link #getErrorScale() <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getErrorScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected SILabelValue errorScale;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected SILabelImpl() {
+		setCurrentValue(StandardFactory.eINSTANCE.createSILabelValue());
+		setNextValue(StandardFactory.eINSTANCE.createSILabelValue());
+		setOriginalValue(StandardFactory.eINSTANCE.createSILabelValue());
+		setTempValue(StandardFactory.eINSTANCE.createSILabelValue());
+		setProbeValue(StandardFactory.eINSTANCE.createSILabelValue());
+		setErrorScale(StandardFactory.eINSTANCE.createSILabelValue());
+		setDeltaValue(StandardFactory.eINSTANCE.createSILabelValue());
+	} // SILabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SI_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue getDeltaValue() {
+		if (deltaValue != null && deltaValue.eIsProxy()) {
+			InternalEObject oldDeltaValue = (InternalEObject)deltaValue;
+			deltaValue = (SILabelValue)eResolveProxy(oldDeltaValue);
+			if (deltaValue != oldDeltaValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SI_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+			}
+		}
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue basicGetDeltaValue() {
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeltaValue(SILabelValue newDeltaValue) {
+		SILabelValue oldDeltaValue = deltaValue;
+		deltaValue = newDeltaValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue getProbeValue() {
+		if (probeValue != null && probeValue.eIsProxy()) {
+			InternalEObject oldProbeValue = (InternalEObject)probeValue;
+			probeValue = (SILabelValue)eResolveProxy(oldProbeValue);
+			if (probeValue != oldProbeValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SI_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+			}
+		}
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue basicGetProbeValue() {
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProbeValue(SILabelValue newProbeValue) {
+		SILabelValue oldProbeValue = probeValue;
+		probeValue = newProbeValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue getTempValue() {
+		if (tempValue != null && tempValue.eIsProxy()) {
+			InternalEObject oldTempValue = (InternalEObject)tempValue;
+			tempValue = (SILabelValue)eResolveProxy(oldTempValue);
+			if (tempValue != oldTempValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SI_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+			}
+		}
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue basicGetTempValue() {
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTempValue(SILabelValue newTempValue) {
+		SILabelValue oldTempValue = tempValue;
+		tempValue = newTempValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue getOriginalValue() {
+		if (originalValue != null && originalValue.eIsProxy()) {
+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;
+			originalValue = (SILabelValue)eResolveProxy(oldOriginalValue);
+			if (originalValue != oldOriginalValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SI_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+			}
+		}
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue basicGetOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(SILabelValue newOriginalValue) {
+		SILabelValue oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue getErrorScale() {
+		if (errorScale != null && errorScale.eIsProxy()) {
+			InternalEObject oldErrorScale = (InternalEObject)errorScale;
+			errorScale = (SILabelValue)eResolveProxy(oldErrorScale);
+			if (errorScale != oldErrorScale) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SI_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+			}
+		}
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue basicGetErrorScale() {
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setErrorScale(SILabelValue newErrorScale) {
+		SILabelValue oldErrorScale = errorScale;
+		errorScale = newErrorScale;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public SILabelValue getCurrentSIValue() {
+		return (SILabelValue) getCurrentValue();
+	} // getCurrentSIValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public SILabelValue getNextSIValue() {
+		return (SILabelValue) getNextValue();
+	} // getNextSIValue
+
+	/**
+	 * @return set the number number of infectious population members
+	 */
+	public void setNextI(double i) {
+		((SILabelValue)getNextValue()).setI(i);
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getI()
+	 */
+	public double getI() {
+		return getCurrentSIValue().getI();
+	} // getI
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setI()
+	 */
+	public void setI(double i) {
+		getCurrentSIValue().setI(i);
+	} // getI
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getNextI()
+	 */
+	public double getNextI() {
+		return getNextSIValue().getI();
+	} // getNextI
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL__DELTA_VALUE:
+				if (resolve) return getDeltaValue();
+				return basicGetDeltaValue();
+			case StandardPackage.SI_LABEL__PROBE_VALUE:
+				if (resolve) return getProbeValue();
+				return basicGetProbeValue();
+			case StandardPackage.SI_LABEL__TEMP_VALUE:
+				if (resolve) return getTempValue();
+				return basicGetTempValue();
+			case StandardPackage.SI_LABEL__ORIGINAL_VALUE:
+				if (resolve) return getOriginalValue();
+				return basicGetOriginalValue();
+			case StandardPackage.SI_LABEL__ERROR_SCALE:
+				if (resolve) return getErrorScale();
+				return basicGetErrorScale();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL__DELTA_VALUE:
+				setDeltaValue((SILabelValue)newValue);
+				return;
+			case StandardPackage.SI_LABEL__PROBE_VALUE:
+				setProbeValue((SILabelValue)newValue);
+				return;
+			case StandardPackage.SI_LABEL__TEMP_VALUE:
+				setTempValue((SILabelValue)newValue);
+				return;
+			case StandardPackage.SI_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SILabelValue)newValue);
+				return;
+			case StandardPackage.SI_LABEL__ERROR_SCALE:
+				setErrorScale((SILabelValue)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL__DELTA_VALUE:
+				setDeltaValue((SILabelValue)null);
+				return;
+			case StandardPackage.SI_LABEL__PROBE_VALUE:
+				setProbeValue((SILabelValue)null);
+				return;
+			case StandardPackage.SI_LABEL__TEMP_VALUE:
+				setTempValue((SILabelValue)null);
+				return;
+			case StandardPackage.SI_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SILabelValue)null);
+				return;
+			case StandardPackage.SI_LABEL__ERROR_SCALE:
+				setErrorScale((SILabelValue)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL__DELTA_VALUE:
+				return deltaValue != null;
+			case StandardPackage.SI_LABEL__PROBE_VALUE:
+				return probeValue != null;
+			case StandardPackage.SI_LABEL__TEMP_VALUE:
+				return tempValue != null;
+			case StandardPackage.SI_LABEL__ORIGINAL_VALUE:
+				return originalValue != null;
+			case StandardPackage.SI_LABEL__ERROR_SCALE:
+				return errorScale != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getIncidence()
+	 */
+	public double getIncidence() {
+		return this.getCurrentSIValue().getIncidence();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setIncidence(double)
+	 */
+	public void setIncidence(double incidence) {
+		this.getCurrentSIValue().setIncidence(incidence);
+	}
+
+	public void reset(STEMTime time) {
+		// Adjust current value by adding/substracting deltas by other models (population models).
+		// We do this to set the right counts to match the population numbers at the beginning
+		// of the simulation.
+		
+		for(Label l:this.getNode().getLabels()) {
+			if(l instanceof IntegrationLabel) {
+				IntegrationLabel il = (IntegrationLabel)l;
+				if(l == this) continue;
+				SimpleDataExchangeLabelValue delta = (SimpleDataExchangeLabelValue)il.getDeltaValue();
+				
+				double additions = delta.getAdditions();
+				double substractions = delta.getSubstractions();
+				
+				// We scale the label values back since at this point the innoculators/infectors
+				// have already been applied and we need to modify all states of the disease
+				
+				double popCount = ((SILabelValue)this.getCurrentValue()).getPopulationCount();
+				if(additions > 0.0) {
+					double factor = additions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue addV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					addV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).add((IntegrationLabelValue)addV);
+				}
+				if(substractions > 0.0) {
+					double factor = substractions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue subV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					subV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).sub((IntegrationLabelValue)subV);
+				}
+				
+					
+			}
+		}
+	}
+
+} // SILabelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelValueImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelValueImpl.java
new file mode 100644
index 0000000..55c3d6c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SILabelValueImpl.java
@@ -0,0 +1,415 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SI Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl#getI <em>I</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SILabelValueImpl extends StandardDiseaseModelLabelValueImpl
+		implements SILabelValue {
+	/**
+	 * The default value of the '{@link #getI() <em>I</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double I_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getI() <em>I</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getI()
+	 * @generated
+	 * @ordered
+	 */
+	protected double i = I_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SILabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * 
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * 
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 * 
+	 * @param incidence
+	 *            the new incidence from the interaction term in the compartment model
+	 * 
+	 * @param births
+	 *            the number of births that have occurred in the population
+	 * @param deaths
+	 *            the total number of deaths that have occurred in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occurred in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SILabelValueImpl(final double s, final double i, final double incidence,
+			final double diseaseDeaths) {
+		super(s, diseaseDeaths);
+		this.i = i;
+		this.incidence = incidence;
+	} // SILabelValueImpl
+
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * 
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * 
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 *            
+	 * @param births
+	 *            the number of births that have occurred in the population
+	 * @param deaths
+	 *            the total number of deaths that have occurred in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occurred in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SILabelValueImpl(final double s, final double i, 
+			final double diseaseDeaths) {
+		super(s, diseaseDeaths);
+		this.incidence = 0.0;
+		this.i = i;
+	} // SILabelValueImpl
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SI_LABEL_VALUE;
+	}
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getI() {
+		return i;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setI(double newI) {
+		double oldI = i;
+		i = newI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SI_LABEL_VALUE__I, oldI, i));
+	}
+
+	//	/**
+//	 * <!-- begin-user-doc -->
+//	 * 
+//	 * @return
+//	 * 
+//	 * <!-- end-user-doc -->
+//	 * @generated NOT
+//	 */
+//	public SILabelValue rotateLeft() {
+//		final double tempS = getS();
+//		setS(getI());
+//		setI(tempS);
+//		return this;
+//	} // rotateLeft
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl#getPopulationCount()
+	 */
+	@Override
+	public double getPopulationCount() {
+		return super.getPopulationCount() + i;
+	} // getPopulationCount
+
+	
+	@Override
+	public void zeroOutPopulationCount() {
+		super.zeroOutPopulationCount();
+		setI(I_EDEFAULT);
+	} // zeroOutPopulationCount
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue set(IntegrationLabelValue value) {
+		super.set(value);
+		setI(((SILabelValue) value).getI());
+		return this;
+	} // set
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue add(IntegrationLabelValue value) {
+		super.add(value);
+		setI(getI() + ((SILabelValue) value).getI());
+		return this;
+	} // add
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue sub(IntegrationLabelValue value) {
+		super.sub(value);
+		setI(getI() - ((SILabelValue) value).getI());
+		return this;
+	} // sub
+
+	
+
+	public DiseaseModelLabelValue scale(double scaleFactor) {
+		super.scale(scaleFactor);
+		setI(getI() *scaleFactor);
+		return this;
+	} // scale
+	
+	public DiseaseModelLabelValue add(double addition) {
+		setI(getI() +addition);
+		setS(getS() +addition);
+		return this;
+	} // scale
+
+	public DiseaseModelLabelValue abs() {
+		setI(Math.abs(getI()));
+		setS(Math.abs(getS()));
+		return this;
+	} // scale
+
+	public IntegrationLabelValue divide(IntegrationLabelValue d) {
+		SILabelValue _scale = (SILabelValue)d;
+		double sScaled = Math.abs(s) / Math.abs(_scale.getS());
+		double iScaled = Math.abs(i) / Math.abs(_scale.getI());
+		setS(sScaled);
+		setI(iScaled);
+		return this;
+	}
+	
+	public double max() {
+		return (s > i)? s : i;
+	}
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		setI(I_EDEFAULT);
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL_VALUE__I:
+				return getI();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL_VALUE__I:
+				setI((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL_VALUE__I:
+				setI(I_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SI_LABEL_VALUE__I:
+				return i != I_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append("s:"); //$NON-NLS-1$
+		result.append(getFormatter().format(s));
+		result.append(", i:"); //$NON-NLS-1$
+		result.append(getFormatter().format(i));
+		result.append(", DD:"); //$NON-NLS-1$
+		result.append(getFormatter().format(getDiseaseDeaths()));
+		return result.toString();
+	} // toString
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+	
+		retValue = retValue && getI() >= I_EDEFAULT;
+		assert retValue;
+	
+		retValue = retValue && getI() <= MAX_POPULATION_VALUE;
+		assert retValue;
+	
+		retValue = retValue && !Double.isInfinite(getI());
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(getI());
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * Adjust when a delta value is bad, e.g. forces the 
+	 * target to go negative in any state.
+	 * 
+	 * @return boolean 
+	 */
+	public boolean adjustDelta(IntegrationLabelValue target) {
+		SILabelValue siValue = (SILabelValue)target;
+		boolean adjusted = false;
+		double newS = this.getS() + siValue.getS();
+		double newI = this.getI() + siValue.getI();
+		
+		double factor = 1.0;
+		if(newS < newI && newS < 0.0) {
+			// Scale using S
+			adjusted = true;
+			factor = -siValue.getS()/this.getS();
+		} else if(newI < 0.0) {
+			// Scale using R
+			adjusted = true;
+			factor = -siValue.getI()/this.getI();
+		}
+		if(adjusted) this.scale(factor);
+		// Due to precision limitations it is still possible the number if tiny negative. Adjust if necessary
+		newS = this.getS() + siValue.getS();
+		newI = this.getI() + siValue.getI();
+	
+		if(newS<0)
+			this.setS(-siValue.getS());
+		if(newI<0)
+			this.setI(-siValue.getI());
+		return adjusted;
+	}
+
+} // SILabelValueImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRImpl.java
new file mode 100644
index 0000000..425c6f9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRImpl.java
@@ -0,0 +1,485 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SIR</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRImpl#getImmunityLossRate <em>Immunity Loss Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class SIRImpl extends SIImpl implements SIR {
+	/**
+	 * The default value of the '{@link #getImmunityLossRate() <em>Immunity Loss Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getImmunityLossRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double IMMUNITY_LOSS_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getImmunityLossRate() <em>Immunity Loss Rate</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getImmunityLossRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double immunityLossRate = IMMUNITY_LOSS_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRImpl() {
+		super();
+	}
+
+	/**
+	 * @param sirDiseaseModel
+	 *            the SIR disease model to be initialized
+	 * @param diseaseModelName
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 * @param populationIdentifier
+	 */
+	protected static SIR initializeSIRDiseaseModel(final SIR sirDiseaseModel,
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier) {
+		SIImpl.initializeSIDiseaseModel(sirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				nonLinearityCoefficient, timePeriod, populationIdentifier);
+		sirDiseaseModel.setImmunityLossRate(immunityLossRate);
+		return sirDiseaseModel;
+	} // initializeSIRDiseaseModel
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#createDiseaseModelLabel()
+	 */
+	@Override
+	public DiseaseModelLabel createDiseaseModelLabel() {
+		return StandardFactory.eINSTANCE.createSIRLabel();
+	} // createDiseaseModelLabel
+	
+	@Override
+	public DiseaseModelLabelValue createDiseaseModelLabelValue() {
+		return StandardFactory.eINSTANCE.createSIRLabelValue();
+	} // createDiseaseModelLabelValue
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDeaths(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue,
+	 *      long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeathsDeltas(
+			final STEMTime time, final StandardDiseaseModelLabelValue currentLabelValue, final long timeDelta, DiseaseModelLabelValue returnValue) {
+
+
+		final SIRLabelValue currentSIR = (SIRLabelValue) currentLabelValue;
+		
+		final double adjustedInfectiousMortalityRate = getAdjustedInfectiousMortalityRate(timeDelta);
+		final double diseaseDeaths = adjustedInfectiousMortalityRate
+				* currentSIR.getI();
+
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(0.0);
+		ret.setI(-diseaseDeaths);
+		ret.setIncidence(0.0);
+		ret.setR(0.0);
+		ret.setDiseaseDeaths(diseaseDeaths);
+		return ret;
+	} // computeDeaths
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeTransitions(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time, 
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+				
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		// Need to checked what do do here. If non linear coefficient is not 1 and
+		// the effective infectious is negative (which is possible), what do do? 
+		// Let's fall back on the linear method for now.
+		double numberOfSusceptibleToInfected = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			numberOfSusceptibleToInfected = transmissionRate
+			* currentSIR.getS()* effectiveInfectious;
+		
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+		
+	} // computeTransitions
+
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getMigrationDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue getMigrationDeltas(final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, DiseaseModelLabelValue returnValue) {
+		final StandardDiseaseModelLabelValue retValue = (StandardDiseaseModelLabelValue) createDiseaseModelLabelValue();
+		
+		double deltaS = 0.0;
+		double deltaI = 0.0;
+		double deltaR = 0.0;
+
+		// DO MIGRATION THROUGH MIGRATION EDGES
+	    // to/from THIS node
+		Node node = diseaseLabel.getNode();
+		for (final Iterator<Edge> migrationEdgeIter = MigrationEdgeLabelImpl.getMigrationEdgesFromNode(node).iterator(); migrationEdgeIter.hasNext();) {
+			//every edge is an A=>B Edge. For each node there might be two edges
+			//where THIS node can act as type A or type B (origin or destination)
+			final Edge migrationEdge = migrationEdgeIter.next();
+			MigrationEdgeLabel migrationLabel = (MigrationEdgeLabel) migrationEdge.getLabel();
+			double migrationRate = migrationLabel.getCurrentValue().getMigrationRate();
+			// get the other node
+			final Node otherNode = migrationEdge.getOtherNode(node);
+			// do a test to find out if this edge is an incoming or outgoing edge
+			// by getting the edges' destination node (which could be THIS node)
+			boolean incomming = (migrationEdge.getB().equals(node));
+			// is this incoming
+			if (incomming) {
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = otherNode.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SIRLabel otherSIRLabel = (SIRLabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == otherSIRLabel.getDecorator()) {
+							deltaS  += migrationRate*otherSIRLabel.getCurrentSIRValue().getS();
+							deltaI += migrationRate*otherSIRLabel.getCurrentSIRValue().getI();
+							deltaR  += migrationRate*otherSIRLabel.getCurrentSIRValue().getR();
+							break;
+						} // if
+					}
+				} // for
+			} else {
+				// edge is outgoing
+				// edge is incoming
+				for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter.hasNext();) {
+					final NodeLabel nodeLabel = labelIter.next();
+					// Is this a disease label?
+					if (nodeLabel instanceof StandardDiseaseModelLabel) {
+						final SIRLabel thisSIRLabel = (SIRLabel) nodeLabel;
+						// Yes
+						// Is it updated by this disease model?
+						if (this == thisSIRLabel.getDecorator()) {
+							deltaS  -= migrationRate*thisSIRLabel.getCurrentSIRValue().getS();
+							deltaI -= migrationRate*thisSIRLabel.getCurrentSIRValue().getI();
+							deltaR  -= migrationRate*thisSIRLabel.getCurrentSIRValue().getR();
+							break;
+						} // if
+					}
+				} // for
+			}
+		} // for each migration edge
+
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(0);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	} // getMigrationDeltas
+
+	
+	
+	
+	/**
+	 * @param fractionToDepart
+	 * @param nextState
+	 * @return
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue computeDepartures(
+			final 	double fractionToDepart,final  StandardDiseaseModelLabelValue nextState) {
+		final SIRLabelValue departees = StandardFactory.eINSTANCE
+				.createSIRLabelValue();
+		final SIRLabelValue siState = (SIRLabelValue) nextState;
+		departees.setS(fractionToDepart * siState.getS());
+		departees.setI(fractionToDepart * siState.getI());
+		departees.setR(fractionToDepart * siState.getR());
+		return departees;
+	} // computeDepartures
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SIR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getImmunityLossRate() {
+		return immunityLossRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newImmunityLossRate
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setImmunityLossRate(double newImmunityLossRate) {
+		double oldImmunityLossRate = immunityLossRate;
+		immunityLossRate = newImmunityLossRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR__IMMUNITY_LOSS_RATE, oldImmunityLossRate, immunityLossRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param timeDelta
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getAdjustedImmunityLossRate(long timeDelta) {
+		return getImmunityLossRate()
+				* ((double) timeDelta / (double) getTimePeriod());
+	} // getAdjustedImmunityRate
+
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				return getImmunityLossRate();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				setImmunityLossRate((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				setImmunityLossRate(IMMUNITY_LOSS_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				return immunityLossRate != IMMUNITY_LOSS_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (immunityLossRate: "); //$NON-NLS-1$
+		result.append(immunityLossRate);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && immunityLossRate >= IMMUNITY_LOSS_RATE_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(immunityLossRate);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(immunityLossRate);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} // SIRImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRInoculatorImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRInoculatorImpl.java
new file mode 100644
index 0000000..c3155c6
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRInoculatorImpl.java
@@ -0,0 +1,334 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRInoculator;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>SIR Inoculator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl#getInoculatedPercentage <em>Inoculated Percentage</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SIRInoculatorImpl extends SIInfectorImpl implements SIRInoculator {
+	/**
+	 * The default value of the '{@link #getInoculatedPercentage() <em>Inoculated Percentage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInoculatedPercentage()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double INOCULATED_PERCENTAGE_EDEFAULT = 1.0;
+	
+	/**
+	 * OverrideThe default value of the '{@link #getInfectiousCount() <em>Infectious Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getInfectiousCount()
+	 * @generated NOT
+	 * @ordered
+	 */
+	protected static final double INFECTIOUS_COUNT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getInoculatedPercentage() <em>Inoculated Percentage</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInoculatedPercentage()
+	 * @generated
+	 * @ordered
+	 */
+	protected double inoculatedPercentage = INOCULATED_PERCENTAGE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRInoculatorImpl() {
+		super();
+	}
+	
+	
+	/**
+	 * For the innoculator, we not only innoculate the present node but every child underneath it
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void decorateGraph() {
+
+		final Graph graph = getGraph();
+
+		// Do we need to look up the disease model from its name?
+		if (diseaseModel == null) {
+			// Yes
+			// There's a disease model out there with our name on it
+			// (maybe)...let's find it
+			for (Iterator<Decorator> decoratorIter = graph.getDecorators().iterator(); decoratorIter
+					.hasNext();) {
+				final Decorator decorator = decoratorIter.next();
+				// Disease Model?
+				if (decorator instanceof StandardDiseaseModel) {
+					final StandardDiseaseModel diseaseModel = (StandardDiseaseModel) decorator;
+					// Is this the one we're looking for?
+					if (diseaseModel.getDiseaseName().equalsIgnoreCase(
+							getDiseaseName())) {
+						// Yes
+						this.diseaseModel = diseaseModel;
+						break;
+					}
+				}
+			} // for each decorator
+		} // if look up disease model
+
+		// Did we find the disease model we're suppose to work for?
+		if (diseaseModel != null) {
+			// Yes
+			// Now try to find the node to be infected
+			final Node parent = getGraph().getNode(getTargetURI());
+			Set<Node> allNodes = getAllChildren(parent);
+			
+			allNodes.add(parent);
+			Iterator<Node> iter = allNodes.iterator();
+			while(iter!=null && iter.hasNext()) {
+				Node node = iter.next();
+				// Did we find the Node?
+				if (node != null) {
+					// Yes
+					for (final Iterator<NodeLabel> labelIter = node.getLabels().iterator(); labelIter
+							.hasNext();) {
+						final NodeLabel nodeLabel = labelIter.next();
+						// Is this a disease label?
+						if (nodeLabel instanceof DiseaseModelLabel) {
+							final DiseaseModelLabel diseaseModelLabel = (DiseaseModelLabel) nodeLabel;
+							// Yes
+							// Is it updated by this disease model?
+							if (diseaseModelLabel.getDecorator() == diseaseModel) {
+								// Yes
+								doInitialization(diseaseModelLabel);
+								getLabelsToInfect().add(diseaseModelLabel);
+								break;
+							} // if
+						}
+					} // for
+				} // if node to infect was found
+				else {
+					// No
+					// The target URI was probably bad
+					Activator.logError("The node to infect specified by the URI \""
+							+ getTargetURI()
+							+ "\" was not found.  The URI is likely incorrect.",
+							null);
+				} // else node not found
+			}// all NODES
+			
+		} // if disease model found
+		else {
+			// No
+			// The disease name was probably wrong
+			Activator.logError("The disease named \"" + diseaseName
+					+ "\" was not found.", null);
+		} // else node not found
+
+		this.setProgress(1.0); // we're done
+	} // decorateGraph
+
+	/**
+	 * @param diseaseModelLabel
+	 *            the disease model label to have its infectious value
+	 *            initialized
+	 */
+	@Override
+	protected void doInitialization(final DiseaseModelLabel diseaseModelLabel) {
+		// The disease model in question must have an R state
+		// if it is not some type of SIR model then we can not inoculate
+		if(diseaseModelLabel instanceof SIRLabel ||
+				diseaseModelLabel instanceof SEIRLabel) {
+			double currentPopulation = diseaseModelLabel.getPopulationLabel().getCurrentPopulationValue().getCount();
+			SIRLabelValue sirValue = null;
+			IntegrationLabel iLabel = null;
+			if(diseaseModelLabel instanceof SIRLabel) {
+				iLabel = (SIRLabel) diseaseModelLabel;
+				sirValue = (SIRLabelValue)iLabel.getCurrentValue();
+			} else if(diseaseModelLabel instanceof SEIRLabel) {
+				iLabel = (SEIRLabel) diseaseModelLabel;
+				sirValue = (SIRLabelValue)iLabel.getCurrentValue();
+			} else {
+				Activator.logError("SIRInoculatorImpl: Unknown or invalid disease model class for innoculation. ClassName= "+diseaseModelLabel.getClass().getName(),null);
+			}
+		
+			double currentSValue = sirValue.getS();
+			double percentTreated = getInoculatedPercentage();
+			if(percentTreated > 100.0) {
+				Activator.logError("InoculatedPercentage must be <= 100%. Was "+percentTreated+" Now resetting to 100%",null);
+				percentTreated = 100.0;
+			}
+			
+			double inoculatedNumber = currentSValue*(percentTreated/100.0);
+			
+			double newSValue = currentSValue - inoculatedNumber;
+			// check for round off errors
+			newSValue = newSValue < 0 ? 0 : newSValue;
+			inoculatedNumber = inoculatedNumber < 0 ? 0 : inoculatedNumber;
+			
+			final double newRValue = sirValue.getR() + inoculatedNumber;
+			
+		    ((SIRLabelValue)iLabel.getCurrentValue()).setS(newSValue);
+			((SIRLabelValue)iLabel.getNextValue()).setS(newSValue);
+			
+			((SIRLabelValue)iLabel.getCurrentValue()).setR(newRValue);
+			((SIRLabelValue)iLabel.getNextValue()).setR(newRValue);
+			
+		}else {
+			// log error
+			Activator.logError("Can not Inoculated an SI diesase model. Disease Model must be SIR. Check compatibility of Innoculaor for Disease Model In scenario ",null);
+		}
+	
+	} // doInitialization
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SIR_INOCULATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getInoculatedPercentage() {
+		return inoculatedPercentage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInoculatedPercentage(double newInoculatedPercentage) {
+		double oldInoculatedPercentage = inoculatedPercentage;
+		inoculatedPercentage = newInoculatedPercentage;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE, oldInoculatedPercentage, inoculatedPercentage));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE:
+				return getInoculatedPercentage();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE:
+				setInoculatedPercentage((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE:
+				setInoculatedPercentage(INOCULATED_PERCENTAGE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE:
+				return inoculatedPercentage != INOCULATED_PERCENTAGE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (inoculatedPercentage: "); //$NON-NLS-1$
+		result.append(inoculatedPercentage);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SIRInoculatorImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelImpl.java
new file mode 100644
index 0000000..835c640
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelImpl.java
@@ -0,0 +1,542 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SIR Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl#getDeltaValue <em>Delta Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl#getProbeValue <em>Probe Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl#getTempValue <em>Temp Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl#getOriginalValue <em>Original Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl#getErrorScale <em>Error Scale</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SIRLabelImpl extends StandardDiseaseModelLabelImpl implements SIRLabel {
+	/**
+	 * The cached value of the '{@link #getDeltaValue() <em>Delta Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeltaValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SIRLabelValue deltaValue;
+	/**
+	 * The cached value of the '{@link #getProbeValue() <em>Probe Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getProbeValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SIRLabelValue probeValue;
+	/**
+	 * The cached value of the '{@link #getTempValue() <em>Temp Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTempValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SIRLabelValue tempValue;
+	/**
+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOriginalValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected SIRLabelValue originalValue;
+	/**
+	 * The cached value of the '{@link #getErrorScale() <em>Error Scale</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getErrorScale()
+	 * @generated
+	 * @ordered
+	 */
+	protected SIRLabelValue errorScale;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected SIRLabelImpl() {
+		super();
+		setCurrentValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setNextValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setOriginalValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setTempValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setProbeValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setErrorScale(StandardFactory.eINSTANCE.createSIRLabelValue());
+		setDeltaValue(StandardFactory.eINSTANCE.createSIRLabelValue());
+	} // SIRLabelImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SIR_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue getDeltaValue() {
+		if (deltaValue != null && deltaValue.eIsProxy()) {
+			InternalEObject oldDeltaValue = (InternalEObject)deltaValue;
+			deltaValue = (SIRLabelValue)eResolveProxy(oldDeltaValue);
+			if (deltaValue != oldDeltaValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SIR_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+			}
+		}
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue basicGetDeltaValue() {
+		return deltaValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeltaValue(SIRLabelValue newDeltaValue) {
+		SIRLabelValue oldDeltaValue = deltaValue;
+		deltaValue = newDeltaValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue getProbeValue() {
+		if (probeValue != null && probeValue.eIsProxy()) {
+			InternalEObject oldProbeValue = (InternalEObject)probeValue;
+			probeValue = (SIRLabelValue)eResolveProxy(oldProbeValue);
+			if (probeValue != oldProbeValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SIR_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+			}
+		}
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue basicGetProbeValue() {
+		return probeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setProbeValue(SIRLabelValue newProbeValue) {
+		SIRLabelValue oldProbeValue = probeValue;
+		probeValue = newProbeValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL__PROBE_VALUE, oldProbeValue, probeValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue getTempValue() {
+		if (tempValue != null && tempValue.eIsProxy()) {
+			InternalEObject oldTempValue = (InternalEObject)tempValue;
+			tempValue = (SIRLabelValue)eResolveProxy(oldTempValue);
+			if (tempValue != oldTempValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SIR_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+			}
+		}
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue basicGetTempValue() {
+		return tempValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTempValue(SIRLabelValue newTempValue) {
+		SIRLabelValue oldTempValue = tempValue;
+		tempValue = newTempValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL__TEMP_VALUE, oldTempValue, tempValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue getOriginalValue() {
+		if (originalValue != null && originalValue.eIsProxy()) {
+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;
+			originalValue = (SIRLabelValue)eResolveProxy(oldOriginalValue);
+			if (originalValue != oldOriginalValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SIR_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+			}
+		}
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue basicGetOriginalValue() {
+		return originalValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOriginalValue(SIRLabelValue newOriginalValue) {
+		SIRLabelValue oldOriginalValue = originalValue;
+		originalValue = newOriginalValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue getErrorScale() {
+		if (errorScale != null && errorScale.eIsProxy()) {
+			InternalEObject oldErrorScale = (InternalEObject)errorScale;
+			errorScale = (SIRLabelValue)eResolveProxy(oldErrorScale);
+			if (errorScale != oldErrorScale) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.SIR_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+			}
+		}
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue basicGetErrorScale() {
+		return errorScale;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setErrorScale(SIRLabelValue newErrorScale) {
+		SIRLabelValue oldErrorScale = errorScale;
+		errorScale = newErrorScale;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL__ERROR_SCALE, oldErrorScale, errorScale));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public SIRLabelValue getNextSIRValue() {
+		return (SIRLabelValue) getNextValue();
+	} // getNextSIRValue
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public SIRLabelValue getCurrentSIRValue() {
+		return (SIRLabelValue) getCurrentValue();
+	} // getCurrentSIRValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getR()
+	 */
+	public double getR() {
+		return getCurrentSIRValue().getR();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setR(double)
+	 */
+	public void setR(double r) {
+		getCurrentSIRValue().setR(r);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getNextR()
+	 */
+	public double getNextR() {
+		return getNextSIRValue().getR();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setNextR(double)
+	 */
+	public void setNextR(double r) {
+		getNextSIRValue().setR(r);
+	} // setNextR
+
+	/**
+	 * @return set the number number of infectious population members
+	 */
+	public void setNextI(double i) {
+		((SILabelValue)getNextValue()).setI(i);
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getI()
+	 */
+	public double getI() {
+		return getCurrentSIRValue().getI();
+	} // getI
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setI()
+	 */
+	public void setI(double i) {
+		getCurrentSIRValue().setI(i);
+	} // getI
+
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getNextI()
+	 */
+	public double getNextI() {
+		return getNextSIRValue().getI();
+	} // getNextI
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL__DELTA_VALUE:
+				if (resolve) return getDeltaValue();
+				return basicGetDeltaValue();
+			case StandardPackage.SIR_LABEL__PROBE_VALUE:
+				if (resolve) return getProbeValue();
+				return basicGetProbeValue();
+			case StandardPackage.SIR_LABEL__TEMP_VALUE:
+				if (resolve) return getTempValue();
+				return basicGetTempValue();
+			case StandardPackage.SIR_LABEL__ORIGINAL_VALUE:
+				if (resolve) return getOriginalValue();
+				return basicGetOriginalValue();
+			case StandardPackage.SIR_LABEL__ERROR_SCALE:
+				if (resolve) return getErrorScale();
+				return basicGetErrorScale();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL__DELTA_VALUE:
+				setDeltaValue((SIRLabelValue)newValue);
+				return;
+			case StandardPackage.SIR_LABEL__PROBE_VALUE:
+				setProbeValue((SIRLabelValue)newValue);
+				return;
+			case StandardPackage.SIR_LABEL__TEMP_VALUE:
+				setTempValue((SIRLabelValue)newValue);
+				return;
+			case StandardPackage.SIR_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SIRLabelValue)newValue);
+				return;
+			case StandardPackage.SIR_LABEL__ERROR_SCALE:
+				setErrorScale((SIRLabelValue)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL__DELTA_VALUE:
+				setDeltaValue((SIRLabelValue)null);
+				return;
+			case StandardPackage.SIR_LABEL__PROBE_VALUE:
+				setProbeValue((SIRLabelValue)null);
+				return;
+			case StandardPackage.SIR_LABEL__TEMP_VALUE:
+				setTempValue((SIRLabelValue)null);
+				return;
+			case StandardPackage.SIR_LABEL__ORIGINAL_VALUE:
+				setOriginalValue((SIRLabelValue)null);
+				return;
+			case StandardPackage.SIR_LABEL__ERROR_SCALE:
+				setErrorScale((SIRLabelValue)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL__DELTA_VALUE:
+				return deltaValue != null;
+			case StandardPackage.SIR_LABEL__PROBE_VALUE:
+				return probeValue != null;
+			case StandardPackage.SIR_LABEL__TEMP_VALUE:
+				return tempValue != null;
+			case StandardPackage.SIR_LABEL__ORIGINAL_VALUE:
+				return originalValue != null;
+			case StandardPackage.SIR_LABEL__ERROR_SCALE:
+				return errorScale != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	public void reset(STEMTime time) {
+		// Adjust current value by adding/substracting deltas by other models (population models).
+		// We do this to set the right counts to match the population numbers at the beginning
+		// of the simulation.
+		
+		for(Label l:this.getNode().getLabels()) {
+			if(l instanceof IntegrationLabel) {
+				IntegrationLabel il = (IntegrationLabel)l;
+				if(l == this) continue;
+				SimpleDataExchangeLabelValue delta = (SimpleDataExchangeLabelValue)il.getDeltaValue();
+				
+				double additions = delta.getAdditions();
+				double substractions = delta.getSubstractions();
+				
+				// We scale the label values back since at this point the innoculators/infectors
+				// have already been applied and we need to modify all states of the disease
+				
+				double popCount = ((SILabelValue)this.getCurrentValue()).getPopulationCount();
+				if(additions > 0.0) {
+					double factor = additions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue addV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					addV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).add((IntegrationLabelValue)addV);
+				}
+				if(substractions > 0.0) {
+					double factor = substractions / popCount;
+					if(Double.isNaN(factor) || Double.isNaN(factor)) factor = 0.0;// do nothing
+					SILabelValue subV = (SILabelValue)EcoreUtil.copy(this.getCurrentValue());
+					subV.scale(factor);
+					((SILabelValue)this.getCurrentValue()).sub((IntegrationLabelValue)subV);
+				}
+				
+					
+			}
+		}
+	}
+
+	
+} // SIRLabelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelValueImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelValueImpl.java
new file mode 100644
index 0000000..27f6536
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/SIRLabelValueImpl.java
@@ -0,0 +1,450 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>SIR Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl#getR <em>R</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SIRLabelValueImpl extends SILabelValueImpl implements
+		SIRLabelValue {
+	/**
+	 * The default value of the '{@link #getR() <em>R</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getR()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double R_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getR() <em>R</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getR()
+	 * @generated
+	 * @ordered
+	 */
+	protected double r = R_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * 
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * 
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 *            
+	 * @param incidence
+	 *            the new incidence from the interaction term in the compartment model
+	 * 
+	 * @param r
+	 *            the number of recovered population members
+	 * @param births
+	 *            the number of births that have occured in the population
+	 * @param deaths
+	 *            the total number of deaths that have occured in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occured in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SIRLabelValueImpl(final double s, final double i, 
+			final double incidence, final double r,
+			final double diseaseDeaths) {
+		super(s, i, incidence, diseaseDeaths);
+		this.r = r;
+	} // SIRLabelValueImpl
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * 
+	 * @param iR
+	 *            the number of recovering infectious population members
+	 * 
+	 * @param iF
+	 *            the number of fatally infectious population members
+	 *            
+	 * @param r
+	 *            the number of recovered population members
+	 * @param births
+	 *            the number of births that have occured in the population
+	 * @param deaths
+	 *            the total number of deaths that have occured in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occured in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public SIRLabelValueImpl(final double s, final double i, 
+			final double r,  final double diseaseDeaths) {
+		super(s, i, 0.0, diseaseDeaths);
+		this.r = r;
+	} // SIRLabelValueImpl
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.SIR_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return the number of Infectious population members.
+	 * 
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getR() {
+		return r;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newR
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setR(double newR) {
+		double oldR = r;
+		r = newR;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.SIR_LABEL_VALUE__R, oldR, r));
+	}
+
+//	/**
+//	 * <!-- begin-user-doc -->
+//	 * 
+//	 * @return the instance with the values rotated S->R->I->S
+//	 * 
+//	 * <!-- end-user-doc -->
+//	 * @generated NOT
+//	 */
+//	public SIRLabelValue rotateLeft() {
+//		final double tempS = getS();
+//		setS(getI());
+//		setI(getR());
+//		setR(tempS);
+//		return this;
+//	} // rotateLeft
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#getPopulationCount()
+	 */
+	@Override
+	public double getPopulationCount() {
+		return super.getPopulationCount() + r;
+	} // getPopulationCount
+
+	@Override
+	public void zeroOutPopulationCount() {
+		super.zeroOutPopulationCount();
+		setR(R_EDEFAULT);
+	} // zeroOutPopulationCount
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue set(IntegrationLabelValue value) {
+		super.set(value);
+		setR(((SIRLabelValue) value).getR());
+		return this;
+	} // set
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue add(IntegrationLabelValue value) {
+		super.add(value);
+		setR(getR() + ((SIRLabelValue) value).getR());
+		return this;
+	} // add
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+	@Override
+	public DiseaseModelLabelValue sub(IntegrationLabelValue value) {
+		super.sub(value);
+		setR(getR() - ((SIRLabelValue) value).getR());
+		return this;
+	} // sub
+	
+	@Override
+	public DiseaseModelLabelValue scale(double scaleFactor) {
+		super.scale(scaleFactor);
+		setR(getR() *scaleFactor);
+		return this;
+	} // scale
+	
+	public DiseaseModelLabelValue add(double addition) {
+		super.add(addition);
+		setR(getR() +addition);
+		return this;
+	} // scale
+
+	public DiseaseModelLabelValue abs() {
+		super.abs();
+		setR(Math.abs(getR()));
+		return this;
+	} // scale
+
+
+	
+	public IntegrationLabelValue divide(IntegrationLabelValue d) {
+		SIRLabelValue _scale = (SIRLabelValue)d;
+		double sScaled = Math.abs(s) / Math.abs(_scale.getS());
+		double iScaled = Math.abs(i) / Math.abs(_scale.getI());
+		double rScaled = Math.abs(r) / Math.abs(_scale.getR());
+		setS(sScaled);
+		setI(iScaled);
+		setR(rScaled);
+		return this;
+	}
+	
+	public double max() {
+		double max;
+		if(s > i && s > r)
+			max = s;
+		else if(i > r) max = i;
+		else max = r;
+		return max;  
+	}
+	/**
+	 * Adjust when a delta value is bad, e.g. forces the 
+	 * target to go negative in any state.
+	 * 
+	 * @return boolean
+	 * @override
+	 */
+	public boolean adjustDelta(IntegrationLabelValue target) {
+		SIRLabelValue sirValue = (SIRLabelValue)target;
+		boolean adjusted = false;
+		double newS = this.getS() + sirValue.getS();
+		double newI = this.getI() + sirValue.getI();
+		double newR = this.getR() + sirValue.getR();
+		
+		double factor = 1.0;
+		if(newS < newI && newS < newR && newS < 0.0) {
+			// Scale using S
+			adjusted = true;
+			factor = -sirValue.getS()/this.getS();
+		} else if(newI < newR && newI < 0.0) {
+			// Scale using I
+			adjusted = true;
+			factor = -sirValue.getI()/this.getI();
+		} else if(newR < 0.0) {
+			// Scale using R
+			adjusted = true;
+			factor = -sirValue.getR()/this.getR();
+		}
+		if(adjusted) this.scale(factor);
+		
+		
+		// Due to precision limitations it is still possible the number if tiny negative. Adjust if necessary
+		newS = this.getS() + sirValue.getS();
+		newI = this.getI() + sirValue.getI();
+		newR = this.getR() + sirValue.getR();
+
+		if(newS<0)
+			this.setS(-sirValue.getS());
+		if(newI<0)
+			this.setI(-sirValue.getI());
+		if(newR<0)
+			this.setR(-sirValue.getR());
+		return adjusted;
+	}
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		setR(R_EDEFAULT);
+	} // reset
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && getR() >= R_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && getR() <= MAX_POPULATION_VALUE;
+		assert retValue;
+		
+		retValue = retValue && !Double.isInfinite(getR());
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(getR());
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL_VALUE__R:
+				return getR();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL_VALUE__R:
+				setR((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL_VALUE__R:
+				setR(R_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.SIR_LABEL_VALUE__R:
+				return r != R_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append("s:"); //$NON-NLS-1$
+		result.append(getFormatter().format(s));
+		result.append(", i:"); //$NON-NLS-1$
+		result.append(getFormatter().format(i));
+		result.append(", r:"); //$NON-NLS-1$
+		result.append(getFormatter().format(r));
+		result.append(", DD:"); //$NON-NLS-1$
+		result.append(getFormatter().format(getDiseaseDeaths()));
+		return result.toString();
+	} // toString
+
+} // SIRLabelValueImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelImpl.java
new file mode 100644
index 0000000..3383aaf
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelImpl.java
@@ -0,0 +1,1122 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.CyclicBarrier;
+
+import javax.naming.OperationNotSupportedException;
+import javax.xml.transform.SourceLocator;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.resource.impl.DESCipherImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.spatial.geo.preferences.PreferenceConstants;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl;
+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;
+import org.eclipse.stem.definitions.transport.PipeTransportEdge;
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel;
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl;
+import org.eclipse.stem.definitions.transport.util.TransportAdapterFactory;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+//import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getTotalPopulationCount <em>Total Population Count</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getTotalPopulationCountReciprocal <em>Total Population Count Reciprocal</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getTotalArea <em>Total Area</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getReferencePopulationDensity <em>Reference Population Density</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardDiseaseModelImpl extends DiseaseModelImpl
+		implements StandardDiseaseModel {
+	/**
+	 * The default value of the '{@link #getTotalPopulationCount() <em>Total Population Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalPopulationCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TOTAL_POPULATION_COUNT_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTotalPopulationCount() <em>Total Population Count</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalPopulationCount()
+	 * @generated
+	 * @ordered
+	 */
+	protected double totalPopulationCount = TOTAL_POPULATION_COUNT_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTotalPopulationCountReciprocal() <em>Total Population Count Reciprocal</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalPopulationCountReciprocal()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TOTAL_POPULATION_COUNT_RECIPROCAL_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTotalPopulationCountReciprocal() <em>Total Population Count Reciprocal</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalPopulationCountReciprocal()
+	 * @generated
+	 * @ordered
+	 */
+	protected double totalPopulationCountReciprocal = TOTAL_POPULATION_COUNT_RECIPROCAL_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTotalArea() <em>Total Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TOTAL_AREA_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTotalArea() <em>Total Area</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getTotalArea()
+	 * @generated
+	 * @ordered
+	 */
+	protected double totalArea = TOTAL_AREA_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getReferencePopulationDensity() <em>Reference Population Density</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReferencePopulationDensity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double REFERENCE_POPULATION_DENSITY_EDEFAULT = 100.0;
+
+	/**
+	 * The cached value of the '{@link #getReferencePopulationDensity() <em>Reference Population Density</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getReferencePopulationDensity()
+	 * @generated
+	 * @ordered
+	 */
+	protected double referencePopulationDensity = REFERENCE_POPULATION_DENSITY_EDEFAULT;
+
+	
+	protected Map<Integer, List<PipeTransportEdge>> pipeTransportationUpEdgesMap;
+	protected Map<Integer, List<PipeTransportEdge>> pipeTransportationDownEdgesMap;
+	protected Map<Node, List<PipeTransportEdge>> pipeTransportationNodeEdgesMap;
+	
+	/**
+	 * We only need one of these.
+	 * 
+	 * @see #updateLabels(STEMTime, long)
+	 */
+	protected StandardDiseaseModelLabelValue departures = (StandardDiseaseModelLabelValue) createDiseaseModelLabelValue();
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * @param standardDiseaseModel
+	 *            the StandardDiseaseModel disease model to be initialized
+	 * @param diseaseModelName
+	 * @param backgroundMortalityRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 * @param populationIdentifier
+	 */
+	protected static StandardDiseaseModel initializeStandardDiseaseModel(
+			final StandardDiseaseModel standardDiseaseModel,
+			final String diseaseModelName,
+			final double backgroundMortalityRate, final long timePeriod,
+			final String populationIdentifier) {
+		DiseaseModelImpl.initializeDiseaseModel(standardDiseaseModel,
+				diseaseModelName, backgroundMortalityRate, timePeriod,
+				populationIdentifier);
+
+		return standardDiseaseModel;
+	} // initializeStandardDiseaseModel
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTotalPopulationCount() {
+		return totalPopulationCount;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTotalPopulationCount(double newTotalPopulationCount) {
+		double oldTotalPopulationCount = totalPopulationCount;
+		totalPopulationCount = newTotalPopulationCount;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT, oldTotalPopulationCount, totalPopulationCount));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTotalPopulationCountReciprocal() {
+		return totalPopulationCountReciprocal;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTotalArea() {
+		return totalArea;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTotalArea(double newTotalArea) {
+		double oldTotalArea = totalArea;
+		totalArea = newTotalArea;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA, oldTotalArea, totalArea));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getReferencePopulationDensity() {
+		return referencePopulationDensity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setReferencePopulationDensity(double newReferencePopulationDensity) {
+		double oldReferencePopulationDensity = referencePopulationDensity;
+		referencePopulationDensity = newReferencePopulationDensity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY, oldReferencePopulationDensity, referencePopulationDensity));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void addToTotalPopulationCount(double populationCount) {
+		setTotalPopulationCount(totalPopulationCount + populationCount);
+	} // addToTotalPopulationCount
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public double computeTotalPopulationCountReciprocal() {
+		return totalPopulationCountReciprocal = 1.0 / totalPopulationCount;
+	} // computeTotalPopulationCountReciprocal
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void addToTotalArea(double area) {
+		setTotalArea(totalArea + area);
+	} // addToTotalArea
+
+	/**
+	 * calculateDelta will use the current label values updated by 
+	 * the disease model and upon return the delta label values
+	 * are set with an estimate of the derivatives to advance to the
+	 * next step  
+	 * 
+	 * @param time current time
+	 * @param timeDelta delta time  step
+	 * @param labels The labels to update
+	 */
+
+	public void calculateDelta(STEMTime time, long timeDelta, EList<DynamicLabel> labels) {
+		// Iterate through each of the labels we need to update.		
+		// Place holders to keep delta values. 
+		
+		DiseaseModelLabelValue migrationDelta = this.createDiseaseModelLabelValue();
+		DiseaseModelLabelValue pipeDelta = this.createDiseaseModelLabelValue();
+		DiseaseModelLabelValue birthDeathsDelta = this.createDiseaseModelLabelValue();
+		DiseaseModelLabelValue diseaseDelta = this.createDiseaseModelLabelValue();
+	
+		for (final Iterator<DynamicLabel> currentStateLabelIter = labels
+				.iterator(); currentStateLabelIter.hasNext();) {
+			final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) currentStateLabelIter
+					.next();
+
+			assert diseaseLabel.getPopulationLabel().getPopulationIdentifier()
+					.equals(getPopulationIdentifier());
+
+			// This is the estimated state of the disease for this label
+			final StandardDiseaseModelLabelValue currentState = (StandardDiseaseModelLabelValue)diseaseLabel
+					.getProbeValue();
+
+			// 0) Get the migration in this region 
+			final StandardDiseaseModelLabelValue migrationDeltas = getMigrationDeltas(diseaseLabel,time, migrationDelta);
+	
+			// 1) Get the pipe transportation deltas
+			final StandardDiseaseModelLabelValue pipeTransportDeltas = getPipeTransportationDeltas(diseaseLabel, time, timeDelta, pipeDelta);
+
+			// 2) Compute Birth and Deaths state delta changes
+			final StandardDiseaseModelLabelValue diseaseDeathDeltas = computeDiseaseDeathsDeltas(time, currentState, timeDelta, birthDeathsDelta);
+
+			StandardDiseaseModelLabelValue diseaseState = currentState;
+				
+			// 3) Compute the delta changes caused  by the Disease itself
+			final StandardDiseaseModelLabelValue diseaseDeltas = computeDiseaseDeltas(time, diseaseState, diseaseLabel, timeDelta, diseaseDelta);
+			
+			 //  Just capture the incidence that was passed on from computeTransistions
+			final double incidence = diseaseDeltas.getIncidence();
+			final double diseaseDeaths = diseaseDeathDeltas.getDiseaseDeaths();
+			/*
+			 * 5) Record the new state variable values.
+			 * 
+			 * These will become the current state variable values at the end of
+			 * the current simulation cycle and before the next.
+			 */
+
+			// This is the delta disease label
+			final StandardDiseaseModelLabelValue deltaState = (StandardDiseaseModelLabelValue)diseaseLabel
+					.getDeltaValue();
+
+			// Initialize the next state from the current state and then we'll
+			// make the changes to that.
+			//deltaState.set(currentState);
+			
+			// We need to add in the births and deaths on so they'll be counted
+			// as well...
+
+			//diseaseDeltas.setBirths(numberBornSusceptible);
+			//diseaseDeltas.setDeaths(stateDeaths.getDeaths());
+			//diseaseDeltas.setDiseaseDeaths(stateDeaths.getDiseaseDeaths());
+
+			// Now apply the migration/death/disease/birth deltas one at a time
+			
+			// Reset the state
+			deltaState.reset();
+			
+			// 1) Migration deltas
+			deltaState.add((IntegrationLabelValue)migrationDeltas);
+
+			// 2) Pipe transport deltas
+			deltaState.add((IntegrationLabelValue)pipeTransportDeltas);
+			
+			// 3) Add birth/death deltas
+			deltaState.add((IntegrationLabelValue)diseaseDeathDeltas);
+			
+			// 4) Disease deltas
+			deltaState.add((IntegrationLabelValue)diseaseDeltas);
+		
+			// and pass on the incidence
+			deltaState.setIncidence(incidence);
+			// and the disease deaths
+			deltaState.setDiseaseDeaths(diseaseDeaths);
+			
+			migrationDelta.reset();
+			pipeDelta.reset();
+			birthDeathsDelta.reset();
+			diseaseDelta.reset();
+				
+		} // for
+	}
+
+	public void applyExternalDeltas(STEMTime time, long timeDelta, EList<DynamicLabel> labels) {
+		for (final Iterator<DynamicLabel> currentStateLabelIter = labels
+				.iterator(); currentStateLabelIter.hasNext();) {
+			final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) currentStateLabelIter
+					.next();
+			
+			StandardDiseaseModelLabelValue myDelta = (StandardDiseaseModelLabelValue)diseaseLabel.getDeltaValue();
+			Node n = diseaseLabel.getNode();
+			
+			// Find other labels on the node that wants to exchange data
+			
+			EList<NodeLabel> labs = n.getLabels();
+			for(NodeLabel l:labs) {
+				if(l instanceof IntegrationLabel && !l.equals(diseaseLabel)) {
+					SimpleDataExchangeLabelValue sdeLabelValue = (SimpleDataExchangeLabelValue)((IntegrationLabel)l).getDeltaValue();
+					double additions = sdeLabelValue.getAdditions();
+					double substractions = sdeLabelValue.getSubstractions();
+					
+					// Additions are births and goes into the S state
+					myDelta.setS(myDelta.getS() + additions);
+					
+					// Substractions are deaths and are removed from all states
+					StandardDiseaseModelLabelValue currentState = (StandardDiseaseModelLabelValue)EcoreUtil.copy((StandardDiseaseModelLabelValue)diseaseLabel.getTempValue());
+					double populationCount = currentState.getPopulationCount();
+					double factor = substractions/populationCount;
+					if(Double.isNaN(factor) || Double.isInfinite(factor)) factor = 0.0; //safe
+			
+					currentState.scale(factor);
+					myDelta.sub((IntegrationLabelValue)currentState);
+				}
+			}
+
+		}
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT:
+				return getTotalPopulationCount();
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL:
+				return getTotalPopulationCountReciprocal();
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA:
+				return getTotalArea();
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				return getReferencePopulationDensity();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT:
+				setTotalPopulationCount((Double)newValue);
+				return;
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA:
+				setTotalArea((Double)newValue);
+				return;
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				setReferencePopulationDensity((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT:
+				setTotalPopulationCount(TOTAL_POPULATION_COUNT_EDEFAULT);
+				return;
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA:
+				setTotalArea(TOTAL_AREA_EDEFAULT);
+				return;
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				setReferencePopulationDensity(REFERENCE_POPULATION_DENSITY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT:
+				return totalPopulationCount != TOTAL_POPULATION_COUNT_EDEFAULT;
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL:
+				return totalPopulationCountReciprocal != TOTAL_POPULATION_COUNT_RECIPROCAL_EDEFAULT;
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA:
+				return totalArea != TOTAL_AREA_EDEFAULT;
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				return referencePopulationDensity != REFERENCE_POPULATION_DENSITY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+	
+	/**
+	 * Standard disease models do not update the labels, it's the
+	 * task of the Solver to do that.
+	 * 
+	 * Standard Disease Models 
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(org.eclipse.stem.core.graph.Graph,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	public void updateLabels(final STEMTime time, final long timeDelta, int cycle) {
+		throw new UnsupportedOperationException();
+	}
+	
+	/**
+	 * Populate the pipe system nodes initially
+	 */
+	
+	@SuppressWarnings("boxing")
+	private void populatePipeSystemNodes() {
+		Graph graph = this.getGraph();
+		
+		if(pipeTransportationUpEdgesMap == null || pipeTransportationDownEdgesMap == null) {
+			initPipeTransport(graph);
+		}
+		Map<Integer, List<PipeTransportEdge>> map = pipeTransportationUpEdgesMap;
+		
+		Integer [] levels = new Integer[map.keySet().size()];
+		levels = map.keySet().toArray(levels);
+		Arrays.sort(levels, 0, levels.length, 
+				new Comparator<Integer>() {
+					public int compare(Integer o1, Integer o2) {
+						if(o1 < o2) return 1;
+					else if(o1 > o2) return -1;
+						return 0;
+					}
+		});
+		
+		
+		for(int level : levels) {
+			List<PipeTransportEdge> edges = map.get(level);
+			
+			for(PipeTransportEdge ptedge:edges) {
+				// Move people from source to destination using the flow of the pipe
+				Node source = ptedge.getA();
+				Node dest = ptedge.getB();
+				if(source == null || dest == null) continue; // ok, the region or transport system is not part of the model
+				
+				PipeTransportEdgeLabelValue label = (PipeTransportEdgeLabelValue) ptedge.getLabel().getCurrentValue();
+				double maxflow = label.getMaxFlow();
+				
+				DiseaseModelLabelValue nextsrclabelval=null, nextdestlabelval=null, currsrclabelval=null, currdestlabelval=null;
+				PopulationLabelValue srcpoplabval = null, destpoplabval = null;
+				for(NodeLabel nlabel:source.getLabels()) {
+					if(nlabel instanceof DiseaseModelLabel) {
+						currsrclabelval = (StandardDiseaseModelLabelValue)((StandardDiseaseModelLabel)nlabel).getCurrentValue();
+						nextsrclabelval = (StandardDiseaseModelLabelValue)((StandardDiseaseModelLabel)nlabel).getNextValue();
+					} else if(nlabel instanceof PopulationLabel) {
+						srcpoplabval = ((PopulationLabel)nlabel).getCurrentPopulationValue();
+					}
+				}
+				
+				for(NodeLabel nlabel:dest.getLabels()) {
+					if(nlabel instanceof DiseaseModelLabel) {
+						currdestlabelval = (StandardDiseaseModelLabelValue)((StandardDiseaseModelLabel)nlabel).getCurrentValue();
+						nextdestlabelval  =  (StandardDiseaseModelLabelValue)((StandardDiseaseModelLabel)nlabel).getNextValue();
+					} else if(nlabel instanceof PopulationLabel) {
+						destpoplabval = ((PopulationLabel)nlabel).getCurrentPopulationValue();
+					}
+				}
+				
+				if(currsrclabelval == null || currdestlabelval == null) {
+					continue; // possible for transport pipes connected to regions above the lowest region part of the model
+				}
+				
+				// Check, make sure we don't move more people than available
+				
+				double flow = maxflow;	
+				if(currsrclabelval.getPopulationCount() < flow) flow = currsrclabelval.getPopulationCount(); // check
+				
+				double factor = flow / currsrclabelval.getPopulationCount();
+				if(Double.isNaN(factor)) factor = 0.0;
+				
+				DiseaseModelLabelValue move = null;
+				
+				move = (DiseaseModelLabelValue)EcoreUtil.copy(currsrclabelval);
+				
+				move.scale(factor);
+				// Don't touch disease deaths
+				move.setDiseaseDeaths(0.0);
+		
+				currdestlabelval.add((IntegrationLabelValue)move);
+				
+				destpoplabval.setCount(currdestlabelval.getPopulationCount());
+			}
+		}
+		
+		// Check for nodes that have no initial population. Get rid of those
+		ArrayList<Node>nodesToRemove = new ArrayList<Node>();
+		for(Node n:pipeTransportationNodeEdgesMap.keySet()) {
+			boolean remove = false;
+			if( (n instanceof PipeStyleTransportSystemImpl)) {
+				PipeStyleTransportSystemImpl psts = (PipeStyleTransportSystemImpl)n;
+				for(NodeLabel l:psts.getLabels()) {
+					if(l instanceof StandardDiseaseModelLabel) {
+						StandardDiseaseModelLabel sl = (StandardDiseaseModelLabel)l;
+						StandardDiseaseModelLabelValue slv = (StandardDiseaseModelLabelValue)sl.getCurrentValue();
+						if(slv.getPopulationCount() == 0.0) {
+							remove = true;break;
+						}
+					}
+					if(remove)break;
+				}
+				ArrayList<PipeTransportEdge>edgesToRemove = new ArrayList<PipeTransportEdge>();
+				if(remove) {
+					Activator.logInformation("Warning, ignoring air transportation node without population "+n, new Exception());
+					nodesToRemove.add(n);
+					// Remove all air transport edges using the node as well as the node itself
+					for(List<PipeTransportEdge>l :pipeTransportationDownEdgesMap.values()) {
+						for(PipeTransportEdge pse:l) {
+							if(pse.getA() == null || pse.getB() == null) continue;
+							if(pse.getA().equals(n) || pse.getB().equals(n)) {
+								if(!edgesToRemove.contains(pse))edgesToRemove.add(pse);
+							}
+						}
+					}
+					for(List<PipeTransportEdge>l :pipeTransportationUpEdgesMap.values()) {
+						for(PipeTransportEdge pse:l) {
+							if(pse.getA() == null || pse.getB() == null) continue;
+							if(pse.getA().equals(n) || pse.getB().equals(n)) {
+								if(!edgesToRemove.contains(pse))edgesToRemove.add(pse);
+							}
+						}
+					}
+					for(PipeTransportEdge pse:edgesToRemove) { 
+						for(List<PipeTransportEdge>l :pipeTransportationDownEdgesMap.values())
+							l.remove(pse);
+						for(List<PipeTransportEdge>l :pipeTransportationUpEdgesMap.values())
+							l.remove(pse);
+					}
+					for(PipeTransportEdge pse:edgesToRemove) { 
+						for(List<PipeTransportEdge>l :pipeTransportationNodeEdgesMap.values())
+							l.remove(pse);
+						for(List<PipeTransportEdge>l :pipeTransportationNodeEdgesMap.values())
+							l.remove(pse);
+					}
+					
+				}
+			}
+		}
+		for(Node n:nodesToRemove) pipeTransportationNodeEdgesMap.remove(n);
+	}
+	/**
+	 * initialize pipe transport maps organizing pipes by direction (up/down)
+	 * and level
+	 * @param graph
+	 */
+	@SuppressWarnings("boxing")
+	private void initPipeTransport(Graph graph) {
+		pipeTransportationUpEdgesMap = new HashMap<Integer, List<PipeTransportEdge>>();
+		pipeTransportationDownEdgesMap = new HashMap<Integer, List<PipeTransportEdge>>();
+		pipeTransportationNodeEdgesMap = new HashMap<Node, List<PipeTransportEdge>>();
+		// Traverse all pipe transport edges and determine what
+		// geographic level their source (A) node is at
+		for(URI edgeURI : graph.getEdges().keySet()) {
+			Edge edge = graph.getEdges().get(edgeURI);
+			
+			if(edge instanceof PipeTransportEdge) {
+				PipeTransportEdge pedge = (PipeTransportEdge)edge;
+				int beginLevel = Utility.keyLevel(edge.getNodeAURI().lastSegment());
+				int endLevel = Utility.keyLevel(edge.getNodeBURI().lastSegment());
+				
+				Map<Integer, List<PipeTransportEdge>> map;
+				if(beginLevel > endLevel) map = pipeTransportationUpEdgesMap;
+				else map = pipeTransportationDownEdgesMap;
+				
+				if(map.containsKey(beginLevel)) {
+					map.get(beginLevel).add(pedge);
+				} else {
+					ArrayList<PipeTransportEdge> list = new ArrayList<PipeTransportEdge>();
+					list.add(pedge);
+					map.put(beginLevel, list);
+				}
+				
+				Node a = edge.getA();
+				Node b = edge.getB();
+				
+				if(a != null)
+					if(pipeTransportationNodeEdgesMap.containsKey(a))
+						pipeTransportationNodeEdgesMap.get(a).add(pedge);
+					else {
+						ArrayList<PipeTransportEdge> newList = new ArrayList<PipeTransportEdge>();
+						newList.add(pedge);
+						pipeTransportationNodeEdgesMap.put(a, newList);
+					}	
+				
+				if(b != null)
+					if(pipeTransportationNodeEdgesMap.containsKey(b))
+						pipeTransportationNodeEdgesMap.get(b).add(pedge);
+					else {
+						ArrayList<PipeTransportEdge> newList = new ArrayList<PipeTransportEdge>();
+						newList.add(pedge);
+						pipeTransportationNodeEdgesMap.put(b, newList);
+					}	
+			}
+		}
+	}
+	
+		
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState,
+	 *      org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 */
+	@Override
+	public DiseaseModelState initializeDiseaseState(
+			final DiseaseModelState diseaseModelState,
+			final DiseaseModelLabel diseaseModelLabel) {
+
+		final PopulationLabel populationLabel = diseaseModelLabel
+				.getPopulationLabel();
+		final double populationCount = populationLabel
+				.getCurrentPopulationValue().getCount();
+
+		// Accumulate the population count in the disease model
+		addToTotalPopulationCount(populationCount);
+
+		double area = getArea(populationLabel);
+		// If we have a bad data set it could be that the area would be
+		// unspecified or zero.
+		// Do we have a bad area value?
+		if (area <= 0.0) {
+			// Yes
+			reportBadAreaValue(populationLabel, area);
+			area = 1.0;
+		} // if bad area value
+
+		// Accumulate the area in the disease model so we'll know the total when
+		// we do our next pass and compute the area ratio
+		addToTotalArea(area);
+	
+		return diseaseModelState;
+	} // initializeDiseaseState
+
+	/**
+	 * Here we compute and set the ratio between the total area and the area
+	 * used for this {@link DiseaseModelLabel}. This value is used to determine
+	 * the <em>transmission scale factor</em>.
+	 * 
+	 * @see #computeTransitions(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 */
+	@Override
+	public void initializeDiseaseState(final DiseaseModelLabel diseaseModelLabel) {
+		final StandardDiseaseModelState sdms = (StandardDiseaseModelState) diseaseModelLabel
+				.getDiseaseModelState();
+		// Is there a population ?
+		if (totalPopulationCount > 0.0) {
+			// Yes
+			double area = getArea(diseaseModelLabel.getPopulationLabel());
+			// Do we have a bad area value?
+			if (area <= 0.0) {
+				// Yes
+				reportBadAreaValue(diseaseModelLabel.getPopulationLabel(), area);
+				area = 1.0;
+			} // if bad area value
+
+			final double ratio = getTotalArea() / area;
+			sdms.setAreaRatio(ratio);
+		}
+	} // initializeDiseaseState
+
+	/**
+	 * @param populationLabel
+	 *            the population label that labels the node
+	 * @return the area of the node associated with the label
+	 */
+	public double getArea(final PopulationLabel populationLabel) {
+		double retValue = 0.0;
+
+		// The population label could have an area specified for the population
+		// that we should use instead of the area of the region labeled by the
+		// population label. This value would be specified if the population was
+		// densely packed into a small area of the larger region, for instance
+		// like a city in an otherwise large desert.
+
+		retValue = populationLabel.getPopulatedArea();
+
+		// Is there an area specified for the population?
+		if (retValue == 0.0) {
+			// No
+			// Ok, go find the area label and return the area of the region
+			for (final Iterator<NodeLabel> labelIter = populationLabel.getNode()
+					.getLabels().iterator(); labelIter.hasNext();) {
+				final NodeLabel nodeLabel = labelIter.next();
+				// Is this an area label?
+				if (nodeLabel instanceof AreaLabel) {
+					// Yes
+					final AreaLabel areaLabel = (AreaLabel) nodeLabel;
+					retValue = areaLabel.getCurrentAreaValue().getArea();
+					break;
+				}
+			} // for
+		} // If no population area specified
+
+		return retValue;
+	} // getArea
+
+	/**
+	 * @param populationLabel
+	 * @param area
+	 */
+	private void reportBadAreaValue(final PopulationLabel populationLabel,
+			double area) {
+		// The bad value could be specified for the node or be an override
+		// value specified for the population.
+		// Is the bad value from the node?
+		if (populationLabel.getPopulatedArea() == 0.0) {
+			// Yes
+			Activator.logError("The area value of \"" + area
+					+ "\" specified for \""
+					+ populationLabel.getNode().toString()
+					+ "\" is not greater than zero (0.0)", null);
+		} // if bad value for node area
+		else {
+			Activator.logError("The area value of \"" + area
+					+ "\" specified for the population \""
+					+ populationLabel.getName() + "\" for the region \""
+					+ populationLabel.getNode().toString()
+					+ "\" is not greater than zero (0.0)", null);
+		}
+	} // reportBadAreaValue
+
+	/**
+	 * Perform disease model specific changes to the additions to each state and
+	 * to the deaths from each state. This method is used to perform stochastic
+	 * modifications to the next disease state.
+	 * 
+	 * @param currentState
+	 *            the current disease state
+	 */
+	public void doModelSpecificAdjustments(
+			final StandardDiseaseModelLabelValue currentState) {
+		// Do nothing here. Sub-classes override this method to make changes
+	} // doModelSpecificAdjustments
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isDeterministic() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * computeDiseaseDeltas. This method calculates the delta changes for each disease state depending 
+	 * on disease parameters and mixing factors
+	 * 
+	 * @param time 
+	 * 		  	  STEM time
+	 * @param currentState
+	 *            the current state of the population
+	 * @param diseaseLabel
+	 *            the disease label for which the state transitions are being
+	 *            computed.
+	 * @param timeDelta
+	 *            the time period (milliseconds) over which the population
+	 *            members transition to new states
+	 * @param cycle
+	 * 			  the simulation cycle we're in
+	 * @return a disease state label value that contains the delta changes in
+	 * 		   population members for each state.
+	 */
+	
+	public abstract StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, 
+			final long timeDelta, 
+			DiseaseModelLabelValue returnValue);
+
+	/**
+	 * computeDiseaseDeathsDeltas Compute the delta vector resulting from disease deaths
+	 * 
+	 * @param time 
+	 * 			  STEM time
+	 * @param currentLabelValue
+	 *            the current label value of the disease model
+	 * @param timeDelta
+	 *            the time period over which the population members die
+	 * @return the disease state label value that represents the number of
+	 *         deaths in each state.
+	 */
+	
+	public abstract StandardDiseaseModelLabelValue computeDiseaseDeathsDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentLabelValue, 
+			final long timeDelta, 
+			DiseaseModelLabelValue returnValue);
+
+
+	/**
+	 * @param fractionToDepart
+	 * @param nextState
+	 * @return
+	 */
+	abstract protected StandardDiseaseModelLabelValue computeDepartures(
+			double fractionToDepart, StandardDiseaseModelLabelValue nextState);
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getMigrationDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	protected abstract StandardDiseaseModelLabelValue getMigrationDeltas(
+			final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, DiseaseModelLabelValue returnValue) ;
+	
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#getPipeTransportationDeltas(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel,
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	protected StandardDiseaseModelLabelValue getPipeTransportationDeltas(final StandardDiseaseModelLabel diseaseLabel, final STEMTime time, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		
+		// Get the pipe transport edges to/from the node
+		Node node = diseaseLabel.getNode();
+		List<PipeTransportEdge>pedges = pipeTransportationNodeEdgesMap.get(node);
+		if(pedges == null) return (StandardDiseaseModelLabelValue)createDiseaseModelLabelValue(); // no delta
+		
+		for(PipeTransportEdge pedge:pedges) {			
+			boolean incomming = pedge.getB().equals(node);
+			if(incomming) {
+				for(NodeLabel lab: pedge.getA().getLabels()) {
+					if(lab instanceof StandardDiseaseModelLabel && ((StandardDiseaseModelLabel)lab).getDecorator() == this) {
+						// Make sure the target node has a disease model decorator
+						boolean found = false;
+						for(NodeLabel otherLab:pedge.getB().getLabels()) {
+							if(otherLab instanceof StandardDiseaseModelLabel &&
+									((StandardDiseaseModelLabel)otherLab).getDecorator().equals(((StandardDiseaseModelLabel)lab).getDecorator()))
+									{found=true;break;}
+						}
+						if(!found) continue; // skip edge
+						StandardDiseaseModelLabel otherLabel = (StandardDiseaseModelLabel)lab;
+						StandardDiseaseModelLabelValue otherValue = (StandardDiseaseModelLabelValue)otherLabel.getTempValue();
+						StandardDiseaseModelLabelValue change = (StandardDiseaseModelLabelValue)EcoreUtil.copy(otherValue);
+						PipeTransportEdgeLabelValue edgeLabelValue =  (PipeTransportEdgeLabelValue)pedge.getLabel().getCurrentValue();
+						double maxFlow = edgeLabelValue.getMaxFlow();
+						double flow = maxFlow;
+						double popCount = ((StandardDiseaseModelLabelValue)otherLabel.getTempValue()).getPopulationCount();
+						if(flow > popCount) flow = popCount; // don't move more people than available.
+						long timePeriod = edgeLabelValue.getTimePeriod();
+						double factor = flow / popCount;
+						
+						factor = factor * timeDelta / timePeriod;
+						if(Double.isNaN(factor) || Double.isInfinite(factor)) factor = 0.0;
+						change.scale(factor);
+						
+						returnValue.add((IntegrationLabelValue)change);
+					}
+				}
+			} else { // outgoing edge
+				for(NodeLabel lab: pedge.getA().getLabels()) {
+					if(lab instanceof StandardDiseaseModelLabel && ((StandardDiseaseModelLabel)lab).getDecorator() == this) {
+						// Make sure the target node has a disease model decorator
+						boolean found = false;
+						for(NodeLabel otherLab:pedge.getB().getLabels()) {
+							if(otherLab instanceof StandardDiseaseModelLabel &&
+									((StandardDiseaseModelLabel)otherLab).getDecorator().equals(((StandardDiseaseModelLabel)lab).getDecorator()))
+									{found=true;break;}
+						}
+						if(!found) continue; // skip edge
+						StandardDiseaseModelLabel thisLabel = (StandardDiseaseModelLabel)lab;
+						StandardDiseaseModelLabelValue thisValue = (StandardDiseaseModelLabelValue)thisLabel.getTempValue();
+						StandardDiseaseModelLabelValue change = (StandardDiseaseModelLabelValue)EcoreUtil.copy(thisValue);
+						PipeTransportEdgeLabelValue edgeLabelValue =  (PipeTransportEdgeLabelValue)pedge.getLabel().getCurrentValue();
+						double maxFlow = edgeLabelValue.getMaxFlow();
+						double popCount = ((StandardDiseaseModelLabelValue)thisLabel.getTempValue()).getPopulationCount();
+						double flow = maxFlow;
+						if(flow > popCount) flow = popCount;
+						long timePeriod = edgeLabelValue.getTimePeriod();
+						double factor = flow / popCount;
+						factor = factor * timeDelta / timePeriod;
+						if(Double.isNaN(factor) || Double.isInfinite(factor)) factor = 0.0;
+						change.scale(factor);
+						
+						returnValue.sub((IntegrationLabelValue)change);
+					}
+				}
+			}
+		} // for each edge
+		return (StandardDiseaseModelLabelValue)returnValue;
+		
+	} // getPipeTransportationDeltas
+	
+	
+	
+	@Override
+	public void resetLabels() {
+		super.resetLabels();
+
+		// Reset all the labels on the transport edges to the node that each
+		// label labels
+		for (final Iterator<DynamicLabel> labelIter = getLabelsToUpdate()
+				.iterator(); labelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = labelIter.next();
+			final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) dynamicLabel;
+
+			final Node node = diseaseLabel.getNode();
+			for (Iterator<Edge> transportationEdgeIter = TransportRelationshipLabelImpl
+					.getTransportEdgesToNode(node, populationIdentifier)
+					.iterator(); transportationEdgeIter.hasNext();) {
+				final Edge transportEdge = transportationEdgeIter.next();
+				final TransportRelationshipLabel transportLabel = (TransportRelationshipLabel) transportEdge
+						.getLabel();
+				transportLabel.reset();
+			} // for each transport edge
+			
+		} // for each disease label
+		
+		// Populate the pipe transportation systems
+		this.populatePipeSystemNodes();
+	} // resetLabels
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (totalPopulationCount: "); //$NON-NLS-1$
+		result.append(totalPopulationCount);
+		result.append(", totalPopulationCountReciprocal: "); //$NON-NLS-1$
+		result.append(totalPopulationCountReciprocal);
+		result.append(", totalArea: "); //$NON-NLS-1$
+		result.append(totalArea);
+		result.append(", referencePopulationDensity: "); //$NON-NLS-1$
+		result.append(referencePopulationDensity);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue
+				&& totalPopulationCount >= TOTAL_POPULATION_COUNT_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(totalPopulationCount);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(totalPopulationCount);
+		assert retValue;
+		
+		retValue = retValue
+				&& totalPopulationCountReciprocal >= TOTAL_POPULATION_COUNT_RECIPROCAL_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(totalPopulationCountReciprocal);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(totalPopulationCountReciprocal);
+		assert retValue;
+		
+		retValue = retValue && totalArea >= TOTAL_AREA_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && !Double.isInfinite(totalArea);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(totalArea);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+} // StandardDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelImpl.java
new file mode 100644
index 0000000..7f6c3d8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelImpl.java
@@ -0,0 +1,102 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardDiseaseModelLabelImpl extends
+		DiseaseModelLabelImpl implements StandardDiseaseModelLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardDiseaseModelLabelImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.DynamicLabelImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		// The call to super.reset will reset the label value of this label
+		// which will zero out all of the disease state values.
+		super.reset();
+		getTempValue().reset();
+		getDeltaValue().reset();
+		getErrorScale().reset();
+		getProbeValue().reset();
+		// Is there a population instance associated with this instance?
+		if (getPopulationLabel() != null) {
+			// Yes
+			// Ok, set the susceptible population to the count of the number of
+			// population members
+			final StandardDiseaseModelLabelValue sValue = (StandardDiseaseModelLabelValue)getCurrentValue();
+
+			sValue.setS(getPopulationLabel().getCurrentPopulationValue()
+					.getCount());
+		} // if
+
+	} // reset
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_DISEASE_MODEL_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getS()
+	 */
+	public double getS() {
+		return (((StandardDiseaseModelLabelValue)getCurrentValue())).getS();
+	} // getS
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#setS(double)
+	 */
+	public void setS(double s) {
+		(((StandardDiseaseModelLabelValue)getCurrentValue())).setS(s);
+	} // setS
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getNextS()
+	 */
+	public double getNextS() {
+		return (((StandardDiseaseModelLabelValue)getNextValue())).getS();
+	} // getNextS
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#setNextS(double)
+	 */
+	public void setNextS(double s) {
+		(((StandardDiseaseModelLabelValue)getNextValue())).setS(s);
+	} // setNextS
+
+} // StandardDiseaseModelLabelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelValueImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelValueImpl.java
new file mode 100644
index 0000000..16a5701
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelLabelValueImpl.java
@@ -0,0 +1,325 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.NumberFormat;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+//import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelLabelValueImpl#getS <em>S</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardDiseaseModelLabelValueImpl extends
+		DiseaseModelLabelValueImpl implements StandardDiseaseModelLabelValue {
+	
+	private static final int NUMBER_OF_FRACTIONAL_DIGITS = 2;
+
+	private static NumberFormat formatter = null;
+
+	/**
+	 * @return a number formatter
+	 */
+	protected static NumberFormat getFormatter() {
+		// Is there already a formatter?
+		if (formatter == null) {
+			// No
+			formatter = NumberFormat.getNumberInstance();
+			formatter.setMaximumFractionDigits(NUMBER_OF_FRACTIONAL_DIGITS);
+			formatter.setMinimumFractionDigits(NUMBER_OF_FRACTIONAL_DIGITS);
+		}
+		return formatter;
+	} // getFormatter
+	
+	
+	/**
+	 * The default value of the '{@link #getS() <em>S</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getS()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double S_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getS() <em>S</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getS()
+	 * @generated
+	 * @ordered
+	 */
+	protected double s = S_EDEFAULT;
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardDiseaseModelLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * This is used to create instances for testing purposes.
+	 * 
+	 * @param s
+	 *            the number of susceptible population members
+	 * 
+	 * @param births
+	 *            the number of births that have occured in the population
+	 * @param deaths
+	 *            the total number of deaths that have occured in the population
+	 * @param diseaseDeaths
+	 *            the number of deaths due to the disease that have occured in
+	 *            the population
+	 * 
+	 * <!-- end-user-doc -->
+	 */
+	public StandardDiseaseModelLabelValueImpl(final double s,
+			final double diseaseDeaths) {
+		super(diseaseDeaths);
+		this.s = s;
+	} // StandardDiseaseModelLabelValueImpl
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_DISEASE_MODEL_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getS() {
+		return s;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param newS
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setS(double newS) {
+		double oldS = s;
+		s = newS;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S, oldS, s));
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#getPopulationCount()
+	 */
+	@Override
+	public double getPopulationCount() {
+		return s;
+	} // getPopulationCount
+
+	@Override
+	public void zeroOutPopulationCount() {
+		setS(S_EDEFAULT);
+	} // zeroOutPopulationCount
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue set(IntegrationLabelValue value) {
+		super.set((DiseaseModelLabelValue)value);
+		setS(((StandardDiseaseModelLabelValue) value).getS());
+		return this;
+	} // set
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue add(IntegrationLabelValue value) {
+	
+		super.add((DiseaseModelLabelValue)value);
+		setS(getS() + ((StandardDiseaseModelLabelValue) value).getS());
+		return this;
+	} // add
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 */
+
+	public DiseaseModelLabelValue sub(IntegrationLabelValue value) {
+		super.sub((DiseaseModelLabelValue)value);
+		setS(getS() - ((StandardDiseaseModelLabelValue) value).getS());
+		return this;
+	} // sub
+	
+	@Override
+	public DiseaseModelLabelValue scale(double scaleFactor) {
+		super.scale(scaleFactor);
+		setS(getS() *scaleFactor);
+		return this;
+	} // scale
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		setS(S_EDEFAULT);
+	} // reset
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelLabelValueImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		retValue = retValue && s >= S_EDEFAULT;
+		assert retValue;
+
+		retValue = retValue && s <= MAX_POPULATION_VALUE;
+		assert retValue;		
+		
+		retValue = retValue && !Double.isInfinite(s);
+		assert retValue;
+		
+		retValue = retValue && !Double.isNaN(s);
+		assert retValue;
+		
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S:
+				return getS();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S:
+				setS((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S:
+				setS(S_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S:
+				return s != S_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuffer result = new StringBuffer();
+		result.append(" (s: "); //$NON-NLS-1$
+		result.append(getFormatter().format(s));
+		result.append(')');
+		return result.toString();
+	} // toString
+
+} // StandardDiseaseModelLabelValueImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelStateImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelStateImpl.java
new file mode 100644
index 0000000..27ebb61
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardDiseaseModelStateImpl.java
@@ -0,0 +1,196 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelStateImpl#getAreaRatio <em>Area Ratio</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardDiseaseModelStateImpl extends
+		DiseaseModelStateImpl implements StandardDiseaseModelState {
+	/**
+	 * The default value of the '{@link #getAreaRatio() <em>Area Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAreaRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double AREA_RATIO_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getAreaRatio() <em>Area Ratio</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAreaRatio()
+	 * @generated
+	 * @ordered
+	 */
+	protected double areaRatio = AREA_RATIO_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardDiseaseModelStateImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_DISEASE_MODEL_STATE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getAreaRatio() {
+		return areaRatio;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAreaRatio(double newAreaRatio) {
+		double oldAreaRatio = areaRatio;
+		areaRatio = newAreaRatio;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO, oldAreaRatio, areaRatio));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param resolve
+	 * @param coreType
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO:
+				return getAreaRatio();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @param newValue
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO:
+				setAreaRatio((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO:
+				setAreaRatio(AREA_RATIO_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param featureID
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO:
+				return areaRatio != AREA_RATIO_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (areaRatio: "); //$NON-NLS-1$
+		result.append(areaRatio);
+		result.append(')');
+		return result.toString();
+	}
+
+} // StandardDiseaseModelStateImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardFactoryImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardFactoryImpl.java
new file mode 100644
index 0000000..f42891f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardFactoryImpl.java
@@ -0,0 +1,447 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+//import java.util.Map;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.diseasemodels.standard.*;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardFactoryImpl extends EFactoryImpl implements StandardFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static StandardFactory init() {
+		try {
+			StandardFactory theStandardFactory = (StandardFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/diseasemodels/standard.ecore"); //$NON-NLS-1$ 
+			if (theStandardFactory != null) {
+				return theStandardFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new StandardFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case StandardPackage.DETERMINISTIC_SEIR_DISEASE_MODEL: return createDeterministicSEIRDiseaseModel();
+			case StandardPackage.DETERMINISTIC_SI_DISEASE_MODEL: return createDeterministicSIDiseaseModel();
+			case StandardPackage.DETERMINISTIC_SIR_DISEASE_MODEL: return createDeterministicSIRDiseaseModel();
+			case StandardPackage.SEIR_LABEL: return createSEIRLabel();
+			case StandardPackage.SEIR_LABEL_VALUE: return createSEIRLabelValue();
+			case StandardPackage.SI_DISEASE_MODEL_STATE: return createSIDiseaseModelState();
+			case StandardPackage.SI_INFECTOR: return createSIInfector();
+			case StandardPackage.SI_LABEL: return createSILabel();
+			case StandardPackage.SI_LABEL_VALUE: return createSILabelValue();
+			case StandardPackage.SIR_LABEL: return createSIRLabel();
+			case StandardPackage.SIR_LABEL_VALUE: return createSIRLabelValue();
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL: return createStochasticSEIRDiseaseModel();
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL: return createStochasticSIDiseaseModel();
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL: return createStochasticSIRDiseaseModel();
+			case StandardPackage.AGGREGATING_SI_DISEASE_MODEL: return createAggregatingSIDiseaseModel();
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE: return createAggregatingDiseaseModelState();
+			case StandardPackage.AGGREGATING_SEIR_DISEASE_MODEL: return createAggregatingSEIRDiseaseModel();
+			case StandardPackage.AGGREGATING_SIR_DISEASE_MODEL: return createAggregatingSIRDiseaseModel();
+			case StandardPackage.SIR_INOCULATOR: return createSIRInoculator();
+			case StandardPackage.STOCHASTIC_POISSON_SI_DISEASE_MODEL: return createStochasticPoissonSIDiseaseModel();
+			case StandardPackage.STOCHASTIC_POISSON_SIR_DISEASE_MODEL: return createStochasticPoissonSIRDiseaseModel();
+			case StandardPackage.STOCHASTIC_POISSON_SEIR_DISEASE_MODEL: return createStochasticPoissonSEIRDiseaseModel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case StandardPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			case StandardPackage.ELIST:
+				return createEListFromString(eDataType, initialValue);
+			case StandardPackage.RANDOM:
+				return createRandomFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case StandardPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			case StandardPackage.ELIST:
+				return convertEListToString(eDataType, instanceValue);
+			case StandardPackage.RANDOM:
+				return convertRandomToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSEIRDiseaseModel createDeterministicSEIRDiseaseModel() {
+		DeterministicSEIRDiseaseModelImpl deterministicSEIRDiseaseModel = new DeterministicSEIRDiseaseModelImpl();
+		return deterministicSEIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIDiseaseModel createDeterministicSIDiseaseModel() {
+		DeterministicSIDiseaseModelImpl deterministicSIDiseaseModel = new DeterministicSIDiseaseModelImpl();
+		return deterministicSIDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIRDiseaseModel createDeterministicSIRDiseaseModel() {
+		DeterministicSIRDiseaseModelImpl deterministicSIRDiseaseModel = new DeterministicSIRDiseaseModelImpl();
+		return deterministicSIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabel createSEIRLabel() {
+		SEIRLabelImpl seirLabel = new SEIRLabelImpl();
+		return seirLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValue createSEIRLabelValue() {
+		SEIRLabelValueImpl seirLabelValue = new SEIRLabelValueImpl();
+		return seirLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIDiseaseModelState createSIDiseaseModelState() {
+		SIDiseaseModelStateImpl siDiseaseModelState = new SIDiseaseModelStateImpl();
+		return siDiseaseModelState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIInfector createSIInfector() {
+		SIInfectorImpl siInfector = new SIInfectorImpl();
+		return siInfector;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabel createSILabel() {
+		SILabelImpl siLabel = new SILabelImpl();
+		return siLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValue createSILabelValue() {
+		SILabelValueImpl siLabelValue = new SILabelValueImpl();
+		return siLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabel createSIRLabel() {
+		SIRLabelImpl sirLabel = new SIRLabelImpl();
+		return sirLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValue createSIRLabelValue() {
+		SIRLabelValueImpl sirLabelValue = new SIRLabelValueImpl();
+		return sirLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSEIRDiseaseModel createStochasticSEIRDiseaseModel() {
+		StochasticSEIRDiseaseModelImpl stochasticSEIRDiseaseModel = new StochasticSEIRDiseaseModelImpl();
+		return stochasticSEIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIDiseaseModel createStochasticSIDiseaseModel() {
+		StochasticSIDiseaseModelImpl stochasticSIDiseaseModel = new StochasticSIDiseaseModelImpl();
+		return stochasticSIDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIRDiseaseModel createStochasticSIRDiseaseModel() {
+		StochasticSIRDiseaseModelImpl stochasticSIRDiseaseModel = new StochasticSIRDiseaseModelImpl();
+		return stochasticSIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIDiseaseModel createAggregatingSIDiseaseModel() {
+		AggregatingSIDiseaseModelImpl aggregatingSIDiseaseModel = new AggregatingSIDiseaseModelImpl();
+		return aggregatingSIDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingDiseaseModelState createAggregatingDiseaseModelState() {
+		AggregatingDiseaseModelStateImpl aggregatingDiseaseModelState = new AggregatingDiseaseModelStateImpl();
+		return aggregatingDiseaseModelState;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSEIRDiseaseModel createAggregatingSEIRDiseaseModel() {
+		AggregatingSEIRDiseaseModelImpl aggregatingSEIRDiseaseModel = new AggregatingSEIRDiseaseModelImpl();
+		return aggregatingSEIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIRDiseaseModel createAggregatingSIRDiseaseModel() {
+		AggregatingSIRDiseaseModelImpl aggregatingSIRDiseaseModel = new AggregatingSIRDiseaseModelImpl();
+		return aggregatingSIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRInoculator createSIRInoculator() {
+		SIRInoculatorImpl sirInoculator = new SIRInoculatorImpl();
+		return sirInoculator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSIDiseaseModel createStochasticPoissonSIDiseaseModel() {
+		StochasticPoissonSIDiseaseModelImpl stochasticPoissonSIDiseaseModel = new StochasticPoissonSIDiseaseModelImpl();
+		return stochasticPoissonSIDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSIRDiseaseModel createStochasticPoissonSIRDiseaseModel() {
+		StochasticPoissonSIRDiseaseModelImpl stochasticPoissonSIRDiseaseModel = new StochasticPoissonSIRDiseaseModelImpl();
+		return stochasticPoissonSIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSEIRDiseaseModel createStochasticPoissonSEIRDiseaseModel() {
+		StochasticPoissonSEIRDiseaseModelImpl stochasticPoissonSEIRDiseaseModel = new StochasticPoissonSEIRDiseaseModelImpl();
+		return stochasticPoissonSEIRDiseaseModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	} // createURIFromString
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	} // convertURIToString
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList createEListFromString(EDataType eDataType, String initialValue) {
+		return (EList)super.createFromString(eDataType, initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertEListToString(EDataType eDataType, Object instanceValue) {
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public Random createRandomFromString(EDataType eDataType, String initialValue) {
+		return new Random(Long.parseLong(initialValue));
+	} // createRandomFromString
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertRandomToString(EDataType eDataType, Object instanceValue) {
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardPackage getStandardPackage() {
+		return (StandardPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static StandardPackage getPackage() {
+		return StandardPackage.eINSTANCE;
+	}
+
+} //StandardFactoryImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardInfectorImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardInfectorImpl.java
new file mode 100644
index 0000000..10b6443
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardInfectorImpl.java
@@ -0,0 +1,52 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardInfectorImpl extends InfectorImpl implements
+		StandardInfector {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardInfectorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_INFECTOR;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.NodeDecoratorImpl#sane()
+	 */
+	@Override
+	public boolean sane() {
+		return super.sane();
+	}
+} // StandardInfectorImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardPackageImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardPackageImpl.java
new file mode 100644
index 0000000..793997f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardPackageImpl.java
@@ -0,0 +1,1877 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+//import java.util.Map;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EGenericType;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.solver.SolverPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRInoculator;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardPackageImpl extends EPackageImpl implements StandardPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass deterministicSEIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass deterministicSIDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass deterministicSIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass diseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass diseaseModelLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass diseaseModelLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass diseaseModelStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass infectorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass seirEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass seirLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass seirLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass siEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass siDiseaseModelStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass siInfectorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass siLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass siLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sirEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sirLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sirLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardDiseaseModelLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardDiseaseModelLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardDiseaseModelStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardInfectorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticSEIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticSIDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticSIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sanityCheckerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integrationLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integrationLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass integrationDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass aggregatingSIDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass aggregatingDiseaseModelStateEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass aggregatingSEIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass aggregatingSIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass standardStochasticDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sirInoculatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticPoissonSIDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticPoissonSIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stochasticPoissonSEIRDiseaseModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType eListEDataType = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType randomEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private StandardPackageImpl() {
+		super(eNS_URI, StandardFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link StandardPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static StandardPackage init() {
+		if (isInited) return (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);
+
+		// Obtain or create and register package
+		StandardPackageImpl theStandardPackage = (StandardPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StandardPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StandardPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		LabelsPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theStandardPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theStandardPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theStandardPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(StandardPackage.eNS_URI, theStandardPackage);
+		return theStandardPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDeterministicSEIRDiseaseModel() {
+		return deterministicSEIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDeterministicSIDiseaseModel() {
+		return deterministicSIDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDeterministicSIRDiseaseModel() {
+		return deterministicSIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDiseaseModel() {
+		return diseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_BackgroundMortalityRate() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_PopulationIdentifier() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_TimePeriod() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_DiseaseName() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_RelativeTolerance() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_FiniteDifference() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_FrequencyDependent() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModel_BackgroundBirthRate() {
+		return (EAttribute)diseaseModelEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDiseaseModelLabel() {
+		return diseaseModelLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDiseaseModelLabel_PopulationLabel() {
+		return (EReference)diseaseModelLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDiseaseModelLabel_DiseaseModelState() {
+		return (EReference)diseaseModelLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDiseaseModelLabelValue() {
+		return diseaseModelLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModelLabelValue_DiseaseDeaths() {
+		return (EAttribute)diseaseModelLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModelLabelValue_PopulationCount() {
+		return (EAttribute)diseaseModelLabelValueEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getDiseaseModelLabelValue_Incidence() {
+		return (EAttribute)diseaseModelLabelValueEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDiseaseModelState() {
+		return diseaseModelStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDiseaseModelState_Label() {
+		return (EReference)diseaseModelStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getInfector() {
+		return infectorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getInfector_DiseaseModel() {
+		return (EReference)infectorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInfector_TargetURI() {
+		return (EAttribute)infectorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInfector_DiseaseName() {
+		return (EAttribute)infectorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInfector_TargetISOKey() {
+		return (EAttribute)infectorEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getInfector_LabelsToInfect() {
+		return (EReference)infectorEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getInfector_PopulationIdentifier() {
+		return (EAttribute)infectorEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSEIR() {
+		return seirEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSEIR_IncubationRate() {
+		return (EAttribute)seirEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSEIRLabel() {
+		return seirLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSEIRLabel_DeltaValue() {
+		return (EReference)seirLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSEIRLabel_ProbeValue() {
+		return (EReference)seirLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSEIRLabel_TempValue() {
+		return (EReference)seirLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSEIRLabel_OriginalValue() {
+		return (EReference)seirLabelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSEIRLabel_ErrorScale() {
+		return (EReference)seirLabelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSEIRLabelValue() {
+		return seirLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSEIRLabelValue_E() {
+		return (EAttribute)seirLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSI() {
+		return siEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_TransmissionRate() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_NonLinearityCoefficient() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_RecoveryRate() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_InfectiousMortalityRate() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_PhysicallyAdjacentInfectiousProportion() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_RoadNetworkInfectiousProportion() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSI_InfectiousMortality() {
+		return (EAttribute)siEClass.getEStructuralFeatures().get(6);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIDiseaseModelState() {
+		return siDiseaseModelStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIInfector() {
+		return siInfectorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSIInfector_InfectiousCount() {
+		return (EAttribute)siInfectorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSILabel() {
+		return siLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSILabel_DeltaValue() {
+		return (EReference)siLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSILabel_ProbeValue() {
+		return (EReference)siLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSILabel_TempValue() {
+		return (EReference)siLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSILabel_OriginalValue() {
+		return (EReference)siLabelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSILabel_ErrorScale() {
+		return (EReference)siLabelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSILabelValue() {
+		return siLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSILabelValue_I() {
+		return (EAttribute)siLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIR() {
+		return sirEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSIR_ImmunityLossRate() {
+		return (EAttribute)sirEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIRLabel() {
+		return sirLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSIRLabel_DeltaValue() {
+		return (EReference)sirLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSIRLabel_ProbeValue() {
+		return (EReference)sirLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSIRLabel_TempValue() {
+		return (EReference)sirLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSIRLabel_OriginalValue() {
+		return (EReference)sirLabelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSIRLabel_ErrorScale() {
+		return (EReference)sirLabelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIRLabelValue() {
+		return sirLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSIRLabelValue_R() {
+		return (EAttribute)sirLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardDiseaseModel() {
+		return standardDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModel_TotalPopulationCount() {
+		return (EAttribute)standardDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModel_TotalPopulationCountReciprocal() {
+		return (EAttribute)standardDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModel_TotalArea() {
+		return (EAttribute)standardDiseaseModelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModel_ReferencePopulationDensity() {
+		return (EAttribute)standardDiseaseModelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardDiseaseModelLabel() {
+		return standardDiseaseModelLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardDiseaseModelLabelValue() {
+		return standardDiseaseModelLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModelLabelValue_S() {
+		return (EAttribute)standardDiseaseModelLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardDiseaseModelState() {
+		return standardDiseaseModelStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardDiseaseModelState_AreaRatio() {
+		return (EAttribute)standardDiseaseModelStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardInfector() {
+		return standardInfectorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticSEIRDiseaseModel() {
+		return stochasticSEIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticSIDiseaseModel() {
+		return stochasticSIDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticSIRDiseaseModel() {
+		return stochasticSIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSanityChecker() {
+		return sanityCheckerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegrationLabel() {
+		return integrationLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegrationLabelValue() {
+		return integrationLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getIntegrationDecorator() {
+		return integrationDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAggregatingSIDiseaseModel() {
+		return aggregatingSIDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAggregatingDiseaseModelState() {
+		return aggregatingDiseaseModelStateEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAggregatingDiseaseModelState_ChildrensLabels() {
+		return (EReference)aggregatingDiseaseModelStateEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAggregatingSEIRDiseaseModel() {
+		return aggregatingSEIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAggregatingSIRDiseaseModel() {
+		return aggregatingSIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticDiseaseModel() {
+		return stochasticDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStochasticDiseaseModel_Seed() {
+		return (EAttribute)stochasticDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStochasticDiseaseModel_RandomGenerator() {
+		return (EAttribute)stochasticDiseaseModelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStandardStochasticDiseaseModel() {
+		return standardStochasticDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStandardStochasticDiseaseModel_Gain() {
+		return (EAttribute)standardStochasticDiseaseModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSIRInoculator() {
+		return sirInoculatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSIRInoculator_InoculatedPercentage() {
+		return (EAttribute)sirInoculatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticPoissonSIDiseaseModel() {
+		return stochasticPoissonSIDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticPoissonSIRDiseaseModel() {
+		return stochasticPoissonSIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStochasticPoissonSEIRDiseaseModel() {
+		return stochasticPoissonSEIRDiseaseModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getEList() {
+		return eListEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getRandom() {
+		return randomEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardFactory getStandardFactory() {
+		return (StandardFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		deterministicSEIRDiseaseModelEClass = createEClass(DETERMINISTIC_SEIR_DISEASE_MODEL);
+
+		deterministicSIDiseaseModelEClass = createEClass(DETERMINISTIC_SI_DISEASE_MODEL);
+
+		deterministicSIRDiseaseModelEClass = createEClass(DETERMINISTIC_SIR_DISEASE_MODEL);
+
+		diseaseModelEClass = createEClass(DISEASE_MODEL);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__BACKGROUND_MORTALITY_RATE);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__POPULATION_IDENTIFIER);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__TIME_PERIOD);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__DISEASE_NAME);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__RELATIVE_TOLERANCE);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__FINITE_DIFFERENCE);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__FREQUENCY_DEPENDENT);
+		createEAttribute(diseaseModelEClass, DISEASE_MODEL__BACKGROUND_BIRTH_RATE);
+
+		diseaseModelLabelEClass = createEClass(DISEASE_MODEL_LABEL);
+		createEReference(diseaseModelLabelEClass, DISEASE_MODEL_LABEL__POPULATION_LABEL);
+		createEReference(diseaseModelLabelEClass, DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE);
+
+		diseaseModelLabelValueEClass = createEClass(DISEASE_MODEL_LABEL_VALUE);
+		createEAttribute(diseaseModelLabelValueEClass, DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS);
+		createEAttribute(diseaseModelLabelValueEClass, DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT);
+		createEAttribute(diseaseModelLabelValueEClass, DISEASE_MODEL_LABEL_VALUE__INCIDENCE);
+
+		diseaseModelStateEClass = createEClass(DISEASE_MODEL_STATE);
+		createEReference(diseaseModelStateEClass, DISEASE_MODEL_STATE__LABEL);
+
+		infectorEClass = createEClass(INFECTOR);
+		createEReference(infectorEClass, INFECTOR__DISEASE_MODEL);
+		createEAttribute(infectorEClass, INFECTOR__TARGET_URI);
+		createEAttribute(infectorEClass, INFECTOR__DISEASE_NAME);
+		createEAttribute(infectorEClass, INFECTOR__TARGET_ISO_KEY);
+		createEReference(infectorEClass, INFECTOR__LABELS_TO_INFECT);
+		createEAttribute(infectorEClass, INFECTOR__POPULATION_IDENTIFIER);
+
+		seirEClass = createEClass(SEIR);
+		createEAttribute(seirEClass, SEIR__INCUBATION_RATE);
+
+		seirLabelEClass = createEClass(SEIR_LABEL);
+		createEReference(seirLabelEClass, SEIR_LABEL__DELTA_VALUE);
+		createEReference(seirLabelEClass, SEIR_LABEL__PROBE_VALUE);
+		createEReference(seirLabelEClass, SEIR_LABEL__TEMP_VALUE);
+		createEReference(seirLabelEClass, SEIR_LABEL__ORIGINAL_VALUE);
+		createEReference(seirLabelEClass, SEIR_LABEL__ERROR_SCALE);
+
+		seirLabelValueEClass = createEClass(SEIR_LABEL_VALUE);
+		createEAttribute(seirLabelValueEClass, SEIR_LABEL_VALUE__E);
+
+		siEClass = createEClass(SI);
+		createEAttribute(siEClass, SI__TRANSMISSION_RATE);
+		createEAttribute(siEClass, SI__NON_LINEARITY_COEFFICIENT);
+		createEAttribute(siEClass, SI__RECOVERY_RATE);
+		createEAttribute(siEClass, SI__INFECTIOUS_MORTALITY_RATE);
+		createEAttribute(siEClass, SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION);
+		createEAttribute(siEClass, SI__ROAD_NETWORK_INFECTIOUS_PROPORTION);
+		createEAttribute(siEClass, SI__INFECTIOUS_MORTALITY);
+
+		siDiseaseModelStateEClass = createEClass(SI_DISEASE_MODEL_STATE);
+
+		siInfectorEClass = createEClass(SI_INFECTOR);
+		createEAttribute(siInfectorEClass, SI_INFECTOR__INFECTIOUS_COUNT);
+
+		siLabelEClass = createEClass(SI_LABEL);
+		createEReference(siLabelEClass, SI_LABEL__DELTA_VALUE);
+		createEReference(siLabelEClass, SI_LABEL__PROBE_VALUE);
+		createEReference(siLabelEClass, SI_LABEL__TEMP_VALUE);
+		createEReference(siLabelEClass, SI_LABEL__ORIGINAL_VALUE);
+		createEReference(siLabelEClass, SI_LABEL__ERROR_SCALE);
+
+		siLabelValueEClass = createEClass(SI_LABEL_VALUE);
+		createEAttribute(siLabelValueEClass, SI_LABEL_VALUE__I);
+
+		sirEClass = createEClass(SIR);
+		createEAttribute(sirEClass, SIR__IMMUNITY_LOSS_RATE);
+
+		sirLabelEClass = createEClass(SIR_LABEL);
+		createEReference(sirLabelEClass, SIR_LABEL__DELTA_VALUE);
+		createEReference(sirLabelEClass, SIR_LABEL__PROBE_VALUE);
+		createEReference(sirLabelEClass, SIR_LABEL__TEMP_VALUE);
+		createEReference(sirLabelEClass, SIR_LABEL__ORIGINAL_VALUE);
+		createEReference(sirLabelEClass, SIR_LABEL__ERROR_SCALE);
+
+		sirLabelValueEClass = createEClass(SIR_LABEL_VALUE);
+		createEAttribute(sirLabelValueEClass, SIR_LABEL_VALUE__R);
+
+		standardDiseaseModelEClass = createEClass(STANDARD_DISEASE_MODEL);
+		createEAttribute(standardDiseaseModelEClass, STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT);
+		createEAttribute(standardDiseaseModelEClass, STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL);
+		createEAttribute(standardDiseaseModelEClass, STANDARD_DISEASE_MODEL__TOTAL_AREA);
+		createEAttribute(standardDiseaseModelEClass, STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY);
+
+		standardDiseaseModelLabelEClass = createEClass(STANDARD_DISEASE_MODEL_LABEL);
+
+		standardDiseaseModelLabelValueEClass = createEClass(STANDARD_DISEASE_MODEL_LABEL_VALUE);
+		createEAttribute(standardDiseaseModelLabelValueEClass, STANDARD_DISEASE_MODEL_LABEL_VALUE__S);
+
+		standardDiseaseModelStateEClass = createEClass(STANDARD_DISEASE_MODEL_STATE);
+		createEAttribute(standardDiseaseModelStateEClass, STANDARD_DISEASE_MODEL_STATE__AREA_RATIO);
+
+		standardInfectorEClass = createEClass(STANDARD_INFECTOR);
+
+		stochasticSEIRDiseaseModelEClass = createEClass(STOCHASTIC_SEIR_DISEASE_MODEL);
+
+		stochasticSIDiseaseModelEClass = createEClass(STOCHASTIC_SI_DISEASE_MODEL);
+
+		stochasticSIRDiseaseModelEClass = createEClass(STOCHASTIC_SIR_DISEASE_MODEL);
+
+		sanityCheckerEClass = createEClass(SANITY_CHECKER);
+
+		integrationLabelEClass = createEClass(INTEGRATION_LABEL);
+
+		integrationLabelValueEClass = createEClass(INTEGRATION_LABEL_VALUE);
+
+		integrationDecoratorEClass = createEClass(INTEGRATION_DECORATOR);
+
+		aggregatingSIDiseaseModelEClass = createEClass(AGGREGATING_SI_DISEASE_MODEL);
+
+		aggregatingDiseaseModelStateEClass = createEClass(AGGREGATING_DISEASE_MODEL_STATE);
+		createEReference(aggregatingDiseaseModelStateEClass, AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS);
+
+		aggregatingSEIRDiseaseModelEClass = createEClass(AGGREGATING_SEIR_DISEASE_MODEL);
+
+		aggregatingSIRDiseaseModelEClass = createEClass(AGGREGATING_SIR_DISEASE_MODEL);
+
+		stochasticDiseaseModelEClass = createEClass(STOCHASTIC_DISEASE_MODEL);
+		createEAttribute(stochasticDiseaseModelEClass, STOCHASTIC_DISEASE_MODEL__SEED);
+		createEAttribute(stochasticDiseaseModelEClass, STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR);
+
+		standardStochasticDiseaseModelEClass = createEClass(STANDARD_STOCHASTIC_DISEASE_MODEL);
+		createEAttribute(standardStochasticDiseaseModelEClass, STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN);
+
+		sirInoculatorEClass = createEClass(SIR_INOCULATOR);
+		createEAttribute(sirInoculatorEClass, SIR_INOCULATOR__INOCULATED_PERCENTAGE);
+
+		stochasticPoissonSIDiseaseModelEClass = createEClass(STOCHASTIC_POISSON_SI_DISEASE_MODEL);
+
+		stochasticPoissonSIRDiseaseModelEClass = createEClass(STOCHASTIC_POISSON_SIR_DISEASE_MODEL);
+
+		stochasticPoissonSEIRDiseaseModelEClass = createEClass(STOCHASTIC_POISSON_SEIR_DISEASE_MODEL);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+		eListEDataType = createEDataType(ELIST);
+		randomEDataType = createEDataType(RANDOM);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		ModifierPackage theModifierPackage = (ModifierPackage)EPackage.Registry.INSTANCE.getEPackage(ModifierPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+		LabelsPackage theLabelsPackage = (LabelsPackage)EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		deterministicSEIRDiseaseModelEClass.getESuperTypes().add(this.getSEIR());
+		deterministicSIDiseaseModelEClass.getESuperTypes().add(this.getSI());
+		deterministicSIRDiseaseModelEClass.getESuperTypes().add(this.getSIR());
+		diseaseModelEClass.getESuperTypes().add(theModelPackage.getNodeDecorator());
+		diseaseModelEClass.getESuperTypes().add(this.getSanityChecker());
+		diseaseModelEClass.getESuperTypes().add(theModifierPackage.getModifiable());
+		diseaseModelLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicNodeLabel());
+		diseaseModelLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		diseaseModelLabelValueEClass.getESuperTypes().add(this.getIntegrationLabelValue());
+		infectorEClass.getESuperTypes().add(theModelPackage.getNodeDecorator());
+		infectorEClass.getESuperTypes().add(theModifierPackage.getModifiable());
+		seirEClass.getESuperTypes().add(this.getSIR());
+		seirLabelEClass.getESuperTypes().add(this.getStandardDiseaseModelLabel());
+		seirLabelValueEClass.getESuperTypes().add(this.getSIRLabelValue());
+		siEClass.getESuperTypes().add(this.getStandardDiseaseModel());
+		siDiseaseModelStateEClass.getESuperTypes().add(this.getStandardDiseaseModelState());
+		siInfectorEClass.getESuperTypes().add(this.getStandardInfector());
+		siLabelEClass.getESuperTypes().add(this.getStandardDiseaseModelLabel());
+		siLabelValueEClass.getESuperTypes().add(this.getStandardDiseaseModelLabelValue());
+		sirEClass.getESuperTypes().add(this.getSI());
+		sirLabelEClass.getESuperTypes().add(this.getStandardDiseaseModelLabel());
+		sirLabelValueEClass.getESuperTypes().add(this.getSILabelValue());
+		standardDiseaseModelEClass.getESuperTypes().add(this.getDiseaseModel());
+		standardDiseaseModelEClass.getESuperTypes().add(this.getIntegrationDecorator());
+		standardDiseaseModelLabelEClass.getESuperTypes().add(this.getDiseaseModelLabel());
+		standardDiseaseModelLabelEClass.getESuperTypes().add(this.getIntegrationLabel());
+		standardDiseaseModelLabelValueEClass.getESuperTypes().add(this.getDiseaseModelLabelValue());
+		standardDiseaseModelStateEClass.getESuperTypes().add(this.getDiseaseModelState());
+		standardInfectorEClass.getESuperTypes().add(this.getInfector());
+		stochasticSEIRDiseaseModelEClass.getESuperTypes().add(this.getSEIR());
+		stochasticSEIRDiseaseModelEClass.getESuperTypes().add(this.getStandardStochasticDiseaseModel());
+		stochasticSIDiseaseModelEClass.getESuperTypes().add(this.getSI());
+		stochasticSIDiseaseModelEClass.getESuperTypes().add(this.getStandardStochasticDiseaseModel());
+		stochasticSIRDiseaseModelEClass.getESuperTypes().add(this.getSIR());
+		stochasticSIRDiseaseModelEClass.getESuperTypes().add(this.getStandardStochasticDiseaseModel());
+		aggregatingSIDiseaseModelEClass.getESuperTypes().add(this.getSI());
+		aggregatingDiseaseModelStateEClass.getESuperTypes().add(this.getDiseaseModelState());
+		aggregatingSEIRDiseaseModelEClass.getESuperTypes().add(this.getAggregatingSIRDiseaseModel());
+		aggregatingSIRDiseaseModelEClass.getESuperTypes().add(this.getAggregatingSIDiseaseModel());
+		stochasticDiseaseModelEClass.getESuperTypes().add(this.getDiseaseModel());
+		standardStochasticDiseaseModelEClass.getESuperTypes().add(this.getStochasticDiseaseModel());
+		sirInoculatorEClass.getESuperTypes().add(this.getSIInfector());
+		stochasticPoissonSIDiseaseModelEClass.getESuperTypes().add(this.getSI());
+		stochasticPoissonSIRDiseaseModelEClass.getESuperTypes().add(this.getSIR());
+		stochasticPoissonSEIRDiseaseModelEClass.getESuperTypes().add(this.getSEIR());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(deterministicSEIRDiseaseModelEClass, DeterministicSEIRDiseaseModel.class, "DeterministicSEIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(deterministicSIDiseaseModelEClass, DeterministicSIDiseaseModel.class, "DeterministicSIDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(deterministicSIRDiseaseModelEClass, DeterministicSIRDiseaseModel.class, "DeterministicSIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(diseaseModelEClass, DiseaseModel.class, "DiseaseModel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDiseaseModel_BackgroundMortalityRate(), ecorePackage.getEDouble(), "backgroundMortalityRate", "5.5E-5", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_PopulationIdentifier(), ecorePackage.getEString(), "populationIdentifier", "human", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_TimePeriod(), ecorePackage.getELong(), "timePeriod", "86400000", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_DiseaseName(), ecorePackage.getEString(), "diseaseName", null, 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDiseaseModel_RelativeTolerance(), ecorePackage.getEDouble(), "relativeTolerance", "1E-9", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_FiniteDifference(), ecorePackage.getEBoolean(), "finiteDifference", "true", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_FrequencyDependent(), ecorePackage.getEBoolean(), "frequencyDependent", "true", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModel_BackgroundBirthRate(), theEcorePackage.getEDouble(), "backgroundBirthRate", "5.5E-5", 0, 1, DiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		EOperation op = addEOperation(diseaseModelEClass, ecorePackage.getEDouble(), "getAdjustedBackgroundMortalityRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelEClass, this.getDiseaseModelLabel(), "createDiseaseModelLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelEClass, this.getDiseaseModelLabelValue(), "createDiseaseModelLabelValue", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelEClass, this.getDiseaseModelState(), "createDiseaseModelState", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelEClass, this.getDiseaseModelState(), "initializeDiseaseState", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelState(), "diseaseModelState", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelLabel(), "diseaseModelLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelEClass, null, "initializeDiseaseState", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelLabel(), "diseaseModelLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelEClass, this.getInfector(), "createInfector", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelEClass, theEcorePackage.getEDouble(), "getAdjustedBackgroundBirthRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theEcorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(diseaseModelLabelEClass, DiseaseModelLabel.class, "DiseaseModelLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDiseaseModelLabel_PopulationLabel(), theLabelsPackage.getPopulationLabel(), null, "populationLabel", null, 0, 1, DiseaseModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getDiseaseModelLabel_DiseaseModelState(), this.getDiseaseModelState(), this.getDiseaseModelState_Label(), "diseaseModelState", null, 0, 1, DiseaseModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(diseaseModelLabelValueEClass, DiseaseModelLabelValue.class, "DiseaseModelLabelValue", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getDiseaseModelLabelValue_DiseaseDeaths(), ecorePackage.getEDouble(), "diseaseDeaths", "0", 0, 1, DiseaseModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getDiseaseModelLabelValue_PopulationCount(), ecorePackage.getEDouble(), "populationCount", null, 0, 1, DiseaseModelLabelValue.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getDiseaseModelLabelValue_Incidence(), ecorePackage.getEDouble(), "incidence", null, 0, 1, DiseaseModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelLabelValueEClass, this.getDiseaseModelLabelValue(), "set", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelLabelValue(), "value", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelLabelValueEClass, this.getDiseaseModelLabelValue(), "add", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelLabelValue(), "value", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelLabelValueEClass, this.getDiseaseModelLabelValue(), "sub", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getDiseaseModelLabelValue(), "value", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(diseaseModelLabelValueEClass, this.getDiseaseModelLabelValue(), "scale", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEDouble(), "scaleFactor", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelLabelValueEClass, null, "zeroOutPopulationCount", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelLabelValueEClass, theEcorePackage.getEDouble(), "getAdditions", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(diseaseModelLabelValueEClass, theEcorePackage.getEDouble(), "getSubstractions", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(diseaseModelStateEClass, DiseaseModelState.class, "DiseaseModelState", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getDiseaseModelState_Label(), this.getDiseaseModelLabel(), this.getDiseaseModelLabel_DiseaseModelState(), "label", null, 0, 1, DiseaseModelState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(infectorEClass, Infector.class, "Infector", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getInfector_DiseaseModel(), this.getStandardDiseaseModel(), null, "diseaseModel", null, 0, 1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getInfector_TargetURI(), this.getURI(), "targetURI", null, 0, 1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getInfector_DiseaseName(), ecorePackage.getEString(), "diseaseName", null, 0, 1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getInfector_TargetISOKey(), ecorePackage.getEString(), "targetISOKey", null, 0, 1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getInfector_LabelsToInfect(), this.getDiseaseModelLabel(), null, "labelsToInfect", null, 0, -1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getInfector_PopulationIdentifier(), ecorePackage.getEString(), "populationIdentifier", null, 0, 1, Infector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(seirEClass, org.eclipse.stem.diseasemodels.standard.SEIR.class, "SEIR", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSEIR_IncubationRate(), ecorePackage.getEDouble(), "incubationRate", "0.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SEIR.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		op = addEOperation(seirEClass, ecorePackage.getEDouble(), "getAdjustedIncubationRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(seirLabelEClass, SEIRLabel.class, "SEIRLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSEIRLabel_DeltaValue(), this.getSEIRLabelValue(), null, "deltaValue", null, 0, 1, SEIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSEIRLabel_ProbeValue(), this.getSEIRLabelValue(), null, "probeValue", null, 0, 1, SEIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSEIRLabel_TempValue(), this.getSEIRLabelValue(), null, "tempValue", null, 0, 1, SEIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSEIRLabel_OriginalValue(), this.getSEIRLabelValue(), null, "originalValue", null, 0, 1, SEIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSEIRLabel_ErrorScale(), this.getSEIRLabelValue(), null, "errorScale", null, 0, 1, SEIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(seirLabelValueEClass, SEIRLabelValue.class, "SEIRLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSEIRLabelValue_E(), ecorePackage.getEDouble(), "e", null, 0, 1, SEIRLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(siEClass, org.eclipse.stem.diseasemodels.standard.SI.class, "SI", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSI_TransmissionRate(), ecorePackage.getEDouble(), "transmissionRate", "0.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_NonLinearityCoefficient(), ecorePackage.getEDouble(), "nonLinearityCoefficient", "1.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_RecoveryRate(), ecorePackage.getEDouble(), "recoveryRate", "0.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_InfectiousMortalityRate(), ecorePackage.getEDouble(), "infectiousMortalityRate", "0.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_PhysicallyAdjacentInfectiousProportion(), ecorePackage.getEDouble(), "physicallyAdjacentInfectiousProportion", "0.05", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_RoadNetworkInfectiousProportion(), ecorePackage.getEDouble(), "roadNetworkInfectiousProportion", "0.01", 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getSI_InfectiousMortality(), theEcorePackage.getEDouble(), "infectiousMortality", null, 0, 1, org.eclipse.stem.diseasemodels.standard.SI.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(siEClass, ecorePackage.getEDouble(), "getAdjustedInfectiousMortalityRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(siEClass, ecorePackage.getEDouble(), "getAdjustedTransmissionRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(siEClass, ecorePackage.getEDouble(), "getAdjustedRecoveryRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(siEClass, ecorePackage.getEDouble(), "getEffectiveInfectious", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theGraphPackage.getNode(), "node", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getStandardDiseaseModelLabel(), "diseaseLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEDouble(), "onsiteInfectious", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(siEClass, ecorePackage.getEDouble(), "getNormalizedEffectiveInfectious", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theGraphPackage.getNode(), "node", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getStandardDiseaseModelLabel(), "diseaseLabel", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEDouble(), "onsiteInfectious", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(siDiseaseModelStateEClass, SIDiseaseModelState.class, "SIDiseaseModelState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(siInfectorEClass, SIInfector.class, "SIInfector", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSIInfector_InfectiousCount(), ecorePackage.getEDouble(), "infectiousCount", "1", 0, 1, SIInfector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(siLabelEClass, SILabel.class, "SILabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSILabel_DeltaValue(), this.getSILabelValue(), null, "deltaValue", null, 0, 1, SILabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSILabel_ProbeValue(), this.getSILabelValue(), null, "probeValue", null, 0, 1, SILabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSILabel_TempValue(), this.getSILabelValue(), null, "tempValue", null, 0, 1, SILabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSILabel_OriginalValue(), this.getSILabelValue(), null, "originalValue", null, 0, 1, SILabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSILabel_ErrorScale(), this.getSILabelValue(), null, "errorScale", null, 0, 1, SILabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(siLabelValueEClass, SILabelValue.class, "SILabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSILabelValue_I(), ecorePackage.getEDouble(), "i", null, 0, 1, SILabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sirEClass, org.eclipse.stem.diseasemodels.standard.SIR.class, "SIR", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSIR_ImmunityLossRate(), ecorePackage.getEDouble(), "immunityLossRate", "0.0", 0, 1, org.eclipse.stem.diseasemodels.standard.SIR.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		op = addEOperation(sirEClass, ecorePackage.getEDouble(), "getAdjustedImmunityLossRate", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sirLabelEClass, SIRLabel.class, "SIRLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getSIRLabel_DeltaValue(), this.getSIRLabelValue(), null, "deltaValue", null, 0, 1, SIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSIRLabel_ProbeValue(), this.getSIRLabelValue(), null, "probeValue", null, 0, 1, SIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSIRLabel_TempValue(), this.getSIRLabelValue(), null, "tempValue", null, 0, 1, SIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSIRLabel_OriginalValue(), this.getSIRLabelValue(), null, "originalValue", null, 0, 1, SIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getSIRLabel_ErrorScale(), this.getSIRLabelValue(), null, "errorScale", null, 0, 1, SIRLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sirLabelValueEClass, SIRLabelValue.class, "SIRLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSIRLabelValue_R(), ecorePackage.getEDouble(), "r", null, 0, 1, SIRLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(standardDiseaseModelEClass, StandardDiseaseModel.class, "StandardDiseaseModel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStandardDiseaseModel_TotalPopulationCount(), ecorePackage.getEDouble(), "totalPopulationCount", "0", 0, 1, StandardDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getStandardDiseaseModel_TotalPopulationCountReciprocal(), ecorePackage.getEDouble(), "totalPopulationCountReciprocal", null, 0, 1, StandardDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getStandardDiseaseModel_TotalArea(), ecorePackage.getEDouble(), "totalArea", "0", 0, 1, StandardDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getStandardDiseaseModel_ReferencePopulationDensity(), ecorePackage.getEDouble(), "referencePopulationDensity", "100", 0, 1, StandardDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		op = addEOperation(standardDiseaseModelEClass, null, "addToTotalPopulationCount", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEDouble(), "populationCount", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(standardDiseaseModelEClass, ecorePackage.getEDouble(), "computeTotalPopulationCountReciprocal", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(standardDiseaseModelEClass, null, "addToTotalArea", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, ecorePackage.getEDouble(), "area", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(standardDiseaseModelEClass, null, "calculateDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theModelPackage.getSTEMTime(), "time", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, theEcorePackage.getELong(), "timeDelta", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		EGenericType g1 = createEGenericType(theEcorePackage.getEEList());
+		EGenericType g2 = createEGenericType(theGraphPackage.getDynamicLabel());
+		g1.getETypeArguments().add(g2);
+		addEParameter(op, g1, "labels", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		op = addEOperation(standardDiseaseModelEClass, null, "doModelSpecificAdjustments", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getStandardDiseaseModelLabelValue(), "label", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(standardDiseaseModelLabelEClass, StandardDiseaseModelLabel.class, "StandardDiseaseModelLabel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(standardDiseaseModelLabelValueEClass, StandardDiseaseModelLabelValue.class, "StandardDiseaseModelLabelValue", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStandardDiseaseModelLabelValue_S(), ecorePackage.getEDouble(), "s", null, 0, 1, StandardDiseaseModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(standardDiseaseModelStateEClass, StandardDiseaseModelState.class, "StandardDiseaseModelState", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStandardDiseaseModelState_AreaRatio(), ecorePackage.getEDouble(), "areaRatio", null, 0, 1, StandardDiseaseModelState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(standardInfectorEClass, StandardInfector.class, "StandardInfector", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticSEIRDiseaseModelEClass, StochasticSEIRDiseaseModel.class, "StochasticSEIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticSIDiseaseModelEClass, StochasticSIDiseaseModel.class, "StochasticSIDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticSIRDiseaseModelEClass, StochasticSIRDiseaseModel.class, "StochasticSIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(sanityCheckerEClass, SanityChecker.class, "SanityChecker", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(integrationLabelEClass, IntegrationLabel.class, "IntegrationLabel", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(integrationLabelValueEClass, IntegrationLabelValue.class, "IntegrationLabelValue", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(integrationDecoratorEClass, IntegrationDecorator.class, "IntegrationDecorator", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		addEOperation(integrationDecoratorEClass, theEcorePackage.getEBoolean(), "isDeterministic", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(aggregatingSIDiseaseModelEClass, AggregatingSIDiseaseModel.class, "AggregatingSIDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(aggregatingDiseaseModelStateEClass, AggregatingDiseaseModelState.class, "AggregatingDiseaseModelState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getAggregatingDiseaseModelState_ChildrensLabels(), this.getSILabel(), null, "childrensLabels", null, 0, -1, AggregatingDiseaseModelState.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(aggregatingSEIRDiseaseModelEClass, AggregatingSEIRDiseaseModel.class, "AggregatingSEIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(aggregatingSIRDiseaseModelEClass, AggregatingSIRDiseaseModel.class, "AggregatingSIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticDiseaseModelEClass, StochasticDiseaseModel.class, "StochasticDiseaseModel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStochasticDiseaseModel_Seed(), ecorePackage.getELong(), "seed", "0", 0, 1, StochasticDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+		initEAttribute(getStochasticDiseaseModel_RandomGenerator(), this.getRandom(), "randomGenerator", "0", 0, 1, StochasticDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(standardStochasticDiseaseModelEClass, StandardStochasticDiseaseModel.class, "StandardStochasticDiseaseModel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getStandardStochasticDiseaseModel_Gain(), ecorePackage.getEDouble(), "gain", "0.01", 0, 1, StandardStochasticDiseaseModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		addEOperation(standardStochasticDiseaseModelEClass, ecorePackage.getEDouble(), "computeNoise", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(sirInoculatorEClass, SIRInoculator.class, "SIRInoculator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getSIRInoculator_InoculatedPercentage(), ecorePackage.getEDouble(), "inoculatedPercentage", "1", 0, 1, SIRInoculator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
+		initEClass(stochasticPoissonSIDiseaseModelEClass, StochasticPoissonSIDiseaseModel.class, "StochasticPoissonSIDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticPoissonSIRDiseaseModelEClass, StochasticPoissonSIRDiseaseModel.class, "StochasticPoissonSIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(stochasticPoissonSEIRDiseaseModelEClass, StochasticPoissonSEIRDiseaseModel.class, "StochasticPoissonSEIRDiseaseModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEDataType(eListEDataType, EList.class, "EList", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEDataType(randomEDataType, Random.class, "Random", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //StandardPackageImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardStochasticDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardStochasticDiseaseModelImpl.java
new file mode 100644
index 0000000..138d12a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StandardStochasticDiseaseModelImpl.java
@@ -0,0 +1,201 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stochastic Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl#getGain <em>Gain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StandardStochasticDiseaseModelImpl extends StochasticDiseaseModelImpl implements StandardStochasticDiseaseModel {
+	/**
+	 * The default value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated NOT
+	 * @ordered
+	 */
+	public static final double GAIN_EDEFAULT = 0.01;
+
+	/**
+	 * The cached value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected double gain = GAIN_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardStochasticDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STANDARD_STOCHASTIC_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getGain() {
+		return gain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGain(double newGain) {
+		double oldGain = gain;
+		gain = newGain;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN, oldGain, gain));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * By default this calls the static method StandardStochasticDiseaseModelImpl.computeNoise(gain, rand)
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double computeNoise() {
+		return computeNoise(gain, randomGenerator);
+	}
+	
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+     
+	    assert (gain <= StochasticDiseaseModelImpl.getMAX_GAIN()):"STOCHASTIC NOISE must be 'small', therefore gain parameter must be < MAX_GAIN="+MAX_GAIN; // maximum noise should be 1%
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				return getGain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				setGain((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				setGain(GAIN_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				return gain != GAIN_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (gain: "); //$NON-NLS-1$
+		result.append(gain);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StandardStochasticDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticDiseaseModelImpl.java
new file mode 100644
index 0000000..2c17aa9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticDiseaseModelImpl.java
@@ -0,0 +1,226 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stochastic Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#getSeed <em>Seed</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#getRandomGenerator <em>Random Generator</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StochasticDiseaseModelImpl extends DiseaseModelImpl implements StochasticDiseaseModel {
+	/**
+	 * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SEED_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected long seed = SEED_EDEFAULT;
+	
+	/**
+	 * This is an upper bound on the maximum amount of allowed noise. 
+	 * In any stochastic model the noise should cause only a small purturbation
+	 * of the deterministic model (perhaps of the order of the background death rate or about 1/50).
+	 * The default value set here may be overridden by setter a setter method.
+	 **/
+	protected static double MAX_GAIN = 0.02;
+
+	/**
+	 * The default value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Random RANDOM_GENERATOR_EDEFAULT = (Random)StandardFactory.eINSTANCE.createFromString(StandardPackage.eINSTANCE.getRandom(), "0");
+
+	/**
+	 * The cached value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Random randomGenerator = RANDOM_GENERATOR_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getSeed() {
+		return seed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setSeed(long newSeed) {
+		long oldSeed = seed;
+		seed = newSeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED, oldSeed, seed));
+		randomGenerator.setSeed(newSeed);
+	} // setSeed
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Random getRandomGenerator() {
+		return randomGenerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+				return getSeed();
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR:
+				return getRandomGenerator();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+				setSeed((Long)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+				setSeed(SEED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+				return seed != SEED_EDEFAULT;
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR:
+				return RANDOM_GENERATOR_EDEFAULT == null ? randomGenerator != null : !RANDOM_GENERATOR_EDEFAULT.equals(randomGenerator);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seed: "); //$NON-NLS-1$
+		result.append(seed);
+		result.append(", randomGenerator: "); //$NON-NLS-1$
+		result.append(randomGenerator);
+		result.append(')');
+		return result.toString();
+	}
+
+	public static double getMAX_GAIN() {
+		return MAX_GAIN;
+	}
+
+	public static void setMAX_GAIN(double max_gain) {
+		MAX_GAIN = max_gain;
+	}
+
+} //StochasticDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSEIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSEIRDiseaseModelImpl.java
new file mode 100644
index 0000000..2101eea
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSEIRDiseaseModelImpl.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+import java.util.Random;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.math.BinomialDistributionUtil;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stochastic Poisson SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticPoissonSEIRDiseaseModelImpl extends SEIRImpl implements StochasticPoissonSEIRDiseaseModel {
+
+	private Random rand = new Random();
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public StochasticPoissonSEIRDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeDiseaseDeltas(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time, 
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		final SEIRLabelValue currentSEIR = (SEIRLabelValue) currentState;
+	
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+		
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+		
+			
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSEIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSEIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSEIR.getR();
+		
+		int S = (int)currentSEIR.getS();
+		double prob = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			prob = transmissionRate * Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			prob = transmissionRate * effectiveInfectious;
+	    double rndVar = rand.nextDouble();
+	    int pickN = 0;
+	    pickN = BinomialDistributionUtil.fastPickFromBinomialDist(prob, S, rndVar);
+	    	  
+		// Move pickK from S to I;
+		
+		double numberOfSusceptibleToExposed = pickN;
+		
+		
+		
+		double numberOfExposedToInfectious = getAdjustedIncubationRate(timeDelta)
+		* currentSEIR.getE();
+			
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToExposed;
+		// Determine delta E
+		final double deltaE = numberOfSusceptibleToExposed - numberOfExposedToInfectious;		
+		// Determine delta I
+		final double deltaI = numberOfExposedToInfectious - numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SEIRLabelValueImpl ret = (SEIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setE(deltaE);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToExposed);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+	
+	} // computeDiseaseDeltas
+	
+	@Override
+	public boolean isDeterministic() {
+		return false;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_POISSON_SEIR_DISEASE_MODEL;
+	}
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	
+} //StochasticPoissonSEIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIDiseaseModelImpl.java
new file mode 100644
index 0000000..bd9fb80
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIDiseaseModelImpl.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+import java.util.Random;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.math.BinomialDistributionUtil;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stochastic Poisson SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticPoissonSIDiseaseModelImpl extends SIImpl implements StochasticPoissonSIDiseaseModel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public StochasticPoissonSIDiseaseModelImpl() {
+		super();
+	}
+
+	private Random rand = new Random();
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StandardDiseaseModelImpl#computeTransitions(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue,
+	 *      long, double, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time,
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		 
+		final SILabelValue currentSI = (SILabelValue) currentState;
+		
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+				
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSI.getI());
+
+		int S = (int)currentSI.getS();
+		double prob = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			prob = transmissionRate * Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			prob = transmissionRate * effectiveInfectious;
+	    double rndVar = rand.nextDouble();
+	    int pickN = 0;
+	    pickN = BinomialDistributionUtil.fastPickFromBinomialDist(prob, S, rndVar);
+	    	  
+		// Move pickK from S to I;
+		
+		double numberOfSusceptibleToInfected = pickN;
+		
+		double numberOfInfectedToSusceptible = getAdjustedRecoveryRate(timeDelta)
+				* currentSI.getI();
+		
+	
+		// Determine delta S
+		final double deltaS = - numberOfSusceptibleToInfected + numberOfInfectedToSusceptible;
+		// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected - numberOfInfectedToSusceptible;	
+	
+		SILabelValueImpl ret = (SILabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfSusceptibleToInfected);
+		ret.setDiseaseDeaths(0.0);
+		return ret;
+	} // computeDiseaseDeltas
+	
+		 
+		 public void doModelSpecificAdjustments(LabelValue label) {
+				// TODO Auto-generated method stub
+				
+			}
+		 
+	 @Override
+		public boolean isDeterministic() {
+			return false;
+		}
+	 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_POISSON_SI_DISEASE_MODEL;
+	}
+
+} //StochasticPoissonSIDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIRDiseaseModelImpl.java
new file mode 100644
index 0000000..44829e3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticPoissonSIRDiseaseModelImpl.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+import java.util.Random;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.math.BinomialDistributionUtil;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Stochastic Poisson SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticPoissonSIRDiseaseModelImpl extends SIRImpl implements StochasticPoissonSIRDiseaseModel {
+	private Random rand = new Random();
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public StochasticPoissonSIRDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.SIImpl#computeTransitions(StandardDiseaseModelLabelValue,
+	 *      StandardDiseaseModelLabel, long)
+	 */
+	@Override
+	public StandardDiseaseModelLabelValue computeDiseaseDeltas(
+			final STEMTime time, 
+			final StandardDiseaseModelLabelValue currentState,
+			final StandardDiseaseModelLabel diseaseLabel, final long timeDelta, DiseaseModelLabelValue returnValue) {
+		final SIRLabelValue currentSIR = (SIRLabelValue) currentState;
+		
+		// This is beta*
+		double transmissionRate = getAdjustedTransmissionRate(timeDelta);
+				
+		if(!this.isFrequencyDependent()) transmissionRate *= getTransmissionRateScaleFactor(diseaseLabel);
+
+		// The effective Infectious population  is a dimensionles number normalize by total
+		// population used in teh computation of bets*S*i where i = Ieffective/Pop.
+		// This includes a correction to the current
+		// infectious population (Ieffective) based on the conserved exchange of people (circulation)
+		// between regions. Note that this is no the "arrivals" and "departures" which are
+		// a different process.
+		final double effectiveInfectious = getNormalizedEffectiveInfectious(diseaseLabel.getNode(), diseaseLabel, currentSIR.getI());
+
+		/*
+		 * Compute state transitions
+		 * 
+		 * Regarding computing the number of transitions from Susceptible to Exposed:
+		 * In a linear model the "effective" number of infectious people is just
+		 * the number of infectious people In a nonlinear model we have a
+		 * nonLinearity exponent that is > 1 this models the effect of immune
+		 * system saturation when Susceptible people are exposed to large
+		 * numbers of infectious people. then the "effective" number of
+		 * infectious people is I^nonLinearity exponent to allow for either
+		 * linear or nonlinear models we always calculate I^nonLinearity
+		 * exponent and allow nonLinearity exponent >= 1.0
+		 */
+		double numberOfInfectedToRecovered = getAdjustedRecoveryRate(timeDelta)
+		* currentSIR.getI();
+		double numberOfRecoveredToSusceptible = getAdjustedImmunityLossRate(timeDelta)
+		* currentSIR.getR();
+		
+		int S = (int)currentSIR.getS();
+		double prob = 0.0;
+		if(getNonLinearityCoefficient() != 1.0 && effectiveInfectious >= 0.0)
+			prob = transmissionRate * Math.pow(effectiveInfectious, getNonLinearityCoefficient());
+		else
+			prob = transmissionRate * effectiveInfectious;
+	    double rndVar = rand.nextDouble();
+	    int pickN = 0;
+	    pickN = BinomialDistributionUtil.fastPickFromBinomialDist(prob, S, rndVar);
+	    	  
+		// Move pickK from S to I;
+		
+		double numberOfSusceptibleToInfected = pickN;
+		
+		// Determine delta S
+		final double deltaS = numberOfRecoveredToSusceptible - numberOfSusceptibleToInfected;
+			// Determine delta I
+		final double deltaI = numberOfSusceptibleToInfected- numberOfInfectedToRecovered;
+		// Determine delta R
+		final double deltaR = numberOfInfectedToRecovered - numberOfRecoveredToSusceptible;
+		
+		SIRLabelValueImpl ret = (SIRLabelValueImpl)returnValue;
+		ret.setS(deltaS);
+		ret.setI(deltaI);
+		ret.setIncidence(numberOfInfectedToRecovered);
+		ret.setR(deltaR);
+		ret.setDiseaseDeaths(0);
+		return ret;
+		
+	} // computeTransitions
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_POISSON_SIR_DISEASE_MODEL;
+	}
+
+	public void doModelSpecificAdjustments(LabelValue label) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public boolean isDeterministic() {
+		return false;
+	}
+	
+} //StochasticPoissonSIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSEIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSEIRDiseaseModelImpl.java
new file mode 100644
index 0000000..56d4224
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSEIRDiseaseModelImpl.java
@@ -0,0 +1,413 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import java.util.Random;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Stochastic SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl#getSeed <em>Seed</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl#getRandomGenerator <em>Random Generator</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl#getGain <em>Gain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticSEIRDiseaseModelImpl extends SEIRImpl implements
+		StochasticSEIRDiseaseModel {
+
+	/**
+	 * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SEED_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected long seed = SEED_EDEFAULT;
+	
+	/**
+	 * The default value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Random RANDOM_GENERATOR_EDEFAULT = (Random)StandardFactory.eINSTANCE.createFromString(StandardPackage.eINSTANCE.getRandom(), "0");
+	/**
+	 * The cached value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Random randomGenerator = RANDOM_GENERATOR_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double GAIN_EDEFAULT = 0.01;
+	/**
+	 * The cached value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected double gain = GAIN_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public StochasticSEIRDiseaseModelImpl() {
+		super();
+	}
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param incubationRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @param gain 
+	 * @return an initialized instance of StochasticSEIRDiseaseModel
+	 */
+	public static final StochasticSEIRDiseaseModel createStochasticSEIRDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate, final double incubationRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier, double gain) {
+		
+		final StochasticSEIRDiseaseModel seirDiseaseModel = StandardFactory.eINSTANCE
+				.createStochasticSEIRDiseaseModel();
+		
+		initializeSEIRDiseaseModel(seirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				immunityLossRate, incubationRate, nonLinearityCoefficient,
+				timePeriod, populationIdentifier);
+		
+		seirDiseaseModel.setGain(gain);
+		
+		return seirDiseaseModel;
+	} // createStochasticSEIRDiseaseModel
+
+
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to
+	 * the I state. It will be propagated to other states automatically
+	 * 
+	 */
+	
+	public void doModelSpecificAdjustments(
+			final LabelValue state) {
+		final SILabelValue currentSI = (SILabelValue) state;
+		double oldI = currentSI.getI();
+		double incidence = currentSI.getIncidence();
+		double newIncidence = incidence*computeNoise();
+		double diff = newIncidence - incidence; 
+		
+		double newI = currentSI.getI() + diff;
+		double newS = currentSI.getS() - diff;
+		if(newI < 0.0) {
+			double scale = (-newI) / currentSI.getI();
+			if(Double.isInfinite(scale))
+				scale = 0.0; // cancel noise if 0
+			diff = diff * scale;
+			newI = currentSI.getI() + diff; // 0
+			newS = currentSI.getS() - diff;
+		}
+		if(newS < 0.0) {
+			double scale = (-newS) / currentSI.getS();
+			if(Double.isInfinite(scale))
+				scale = 0.0; // cancel noise if 0
+			diff = diff * scale;
+			newI = currentSI.getI() + diff;
+			newS = currentSI.getS() - diff; // 0
+		}
+		newIncidence = incidence + diff;
+		currentSI.setS(newS);
+		currentSI.setI(newI);
+		currentSI.setIncidence(newIncidence); 
+		return;
+	} // doModelSpecificAdjustments
+	
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_SEIR_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getSeed() {
+		return seed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setSeed(long newSeed) {
+		long oldSeed = seed;
+		seed = newSeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED, oldSeed, seed));
+		randomGenerator.setSeed(newSeed);
+	} // setSeed
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Random getRandomGenerator() {
+		return randomGenerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getGain() {
+		return gain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGain(double newGain) {
+		double oldGain = gain;
+		gain = newGain;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN, oldGain, gain));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * By default this calls the static method StandardStochasticDiseaseModelImpl.computeNoise(gain, rand)
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double computeNoise() {
+		return StandardStochasticDiseaseModelImpl.computeNoise(gain, randomGenerator);
+	}
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED:
+				return getSeed();
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR:
+				return getRandomGenerator();
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN:
+				return getGain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED:
+				setSeed((Long)newValue);
+				return;
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN:
+				setGain((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED:
+				setSeed(SEED_EDEFAULT);
+				return;
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN:
+				setGain(GAIN_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED:
+				return seed != SEED_EDEFAULT;
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR:
+				return RANDOM_GENERATOR_EDEFAULT == null ? randomGenerator != null : !RANDOM_GENERATOR_EDEFAULT.equals(randomGenerator);
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN:
+				return gain != GAIN_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN: return StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN: return StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seed: "); //$NON-NLS-1$
+		result.append(seed);
+		result.append(", randomGenerator: "); //$NON-NLS-1$
+		result.append(randomGenerator);
+		result.append(", gain: "); //$NON-NLS-1$
+		result.append(gain);
+		result.append(')');
+		return result.toString();
+	}
+
+} // StochasticSEIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIDiseaseModelImpl.java
new file mode 100644
index 0000000..3466beb
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIDiseaseModelImpl.java
@@ -0,0 +1,410 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import java.util.Random;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+//import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Stochastic SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl#getSeed <em>Seed</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl#getRandomGenerator <em>Random Generator</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl#getGain <em>Gain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticSIDiseaseModelImpl extends SIImpl implements
+		StochasticSIDiseaseModel {
+
+	/**
+	 * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SEED_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected long seed = SEED_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Random RANDOM_GENERATOR_EDEFAULT = (Random)StandardFactory.eINSTANCE.createFromString(StandardPackage.eINSTANCE.getRandom(), "0");
+	/**
+	 * The cached value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Random randomGenerator = RANDOM_GENERATOR_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double GAIN_EDEFAULT = 0.01;
+	/**
+	 * The cached value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected double gain = GAIN_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public StochasticSIDiseaseModelImpl() {
+		super();
+	} // StochasticSIDiseaseModelImpl
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate rate at which goes back to susceptible
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @param gain 
+	 * @return an initialized instance of DeterministicSIDiseaseModel
+	 */
+	public static final StochasticSIDiseaseModel createStochasticSIDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, 
+			final double recoveryRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier, double gain) {
+		
+		final StochasticSIDiseaseModel sirDiseaseModel = StandardFactory.eINSTANCE
+				.createStochasticSIDiseaseModel();
+		
+		initializeSIDiseaseModel(sirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				nonLinearityCoefficient, timePeriod,
+				populationIdentifier);
+		
+		sirDiseaseModel.setGain(gain);
+		
+		return sirDiseaseModel;
+	} // createStochasticSIDiseaseModel
+
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to
+	 * the I state. It will be propagated to other states automatically
+	 * 
+	 */
+	
+	public void doModelSpecificAdjustments(
+			final LabelValue state) {
+		final SILabelValue currentSI = (SILabelValue) state;
+		double oldI = currentSI.getI();
+		double incidence = currentSI.getIncidence();
+		double newIncidence = incidence*computeNoise();
+		double diff = newIncidence - incidence; 
+		
+		double newI = currentSI.getI() + diff;
+		double newS = currentSI.getS() - diff;
+		if(newI < 0.0) {
+			double scale = (-newI) / currentSI.getI();
+			if(Double.isInfinite(scale))
+				scale = 0.0; // cancel noise if 0
+			diff = diff * scale;
+			newI = currentSI.getI() + diff; // 0
+			newS = currentSI.getS() - diff;
+		}
+		if(newS < 0.0) {
+			double scale = (-newS) / currentSI.getS();
+			if(Double.isInfinite(scale))
+				scale = 0.0; // cancel noise if 0
+			diff = diff * scale;
+			newI = currentSI.getI() + diff;
+			newS = currentSI.getS() - diff; // 0
+		}
+		newIncidence = incidence + diff;
+		currentSI.setS(newS);
+		currentSI.setI(newI);
+		currentSI.setIncidence(newIncidence); 
+		return;
+	} // doModelSpecificAdjustments
+	
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_SI_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getSeed() {
+		return seed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setSeed(long newSeed) {
+		long oldSeed = seed;
+		seed = newSeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED, oldSeed, seed));
+		randomGenerator.setSeed(newSeed);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Random getRandomGenerator() {
+		return randomGenerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getGain() {
+		return gain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGain(double newGain) {
+		double oldGain = gain;
+		gain = newGain;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN, oldGain, gain));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * By default this calls the static method StandardStochasticDiseaseModelImpl.computeNoise(gain, rand)
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double computeNoise() {
+		return StandardStochasticDiseaseModelImpl.computeNoise(gain, randomGenerator);
+	}
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED:
+				return getSeed();
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR:
+				return getRandomGenerator();
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN:
+				return getGain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED:
+				setSeed((Long)newValue);
+				return;
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN:
+				setGain((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED:
+				setSeed(SEED_EDEFAULT);
+				return;
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN:
+				setGain(GAIN_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED:
+				return seed != SEED_EDEFAULT;
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR:
+				return RANDOM_GENERATOR_EDEFAULT == null ? randomGenerator != null : !RANDOM_GENERATOR_EDEFAULT.equals(randomGenerator);
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN:
+				return gain != GAIN_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN: return StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN: return StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seed: "); //$NON-NLS-1$
+		result.append(seed);
+		result.append(", randomGenerator: "); //$NON-NLS-1$
+		result.append(randomGenerator);
+		result.append(", gain: "); //$NON-NLS-1$
+		result.append(gain);
+		result.append(')');
+		return result.toString();
+	}
+
+} // StochasticSIDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIRDiseaseModelImpl.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIRDiseaseModelImpl.java
new file mode 100644
index 0000000..7ac29db
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/impl/StochasticSIRDiseaseModelImpl.java
@@ -0,0 +1,412 @@
+package org.eclipse.stem.diseasemodels.standard.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import java.util.Random;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Stochastic SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl#getSeed <em>Seed</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl#getRandomGenerator <em>Random Generator</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl#getGain <em>Gain</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StochasticSIRDiseaseModelImpl extends SIRImpl implements
+		StochasticSIRDiseaseModel {
+
+	/**
+	 * The default value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long SEED_EDEFAULT = 0L;
+	/**
+	 * The cached value of the '{@link #getSeed() <em>Seed</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSeed()
+	 * @generated
+	 * @ordered
+	 */
+	protected long seed = SEED_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final Random RANDOM_GENERATOR_EDEFAULT = (Random)StandardFactory.eINSTANCE.createFromString(StandardPackage.eINSTANCE.getRandom(), "0");
+	/**
+	 * The cached value of the '{@link #getRandomGenerator() <em>Random Generator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRandomGenerator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Random randomGenerator = RANDOM_GENERATOR_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double GAIN_EDEFAULT = 0.01;
+	/**
+	 * The cached value of the '{@link #getGain() <em>Gain</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getGain()
+	 * @generated
+	 * @ordered
+	 */
+	protected double gain = GAIN_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * The constructor needs to be public so that the new disease wizard can
+	 * create an instance of the class without using the factory.
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public StochasticSIRDiseaseModelImpl() {
+		super();
+	} // StochasticSIRDiseaseModelImpl
+
+	/**
+	 * @param diseaseModelName
+	 *            the name of the disease model
+	 * @param backgroundMortalityRate
+	 * @param infectiousMortality
+	 * @param infectiousMortalityRate
+	 *            the rate at which fatally infectious population members die
+	 * @param transmissionRate
+	 * @param recoveryRate
+	 * @param immunityLossRate
+	 * @param nonLinearityCoefficient
+	 * @param timePeriod
+	 *            the time period for the rates (milliseconds)
+	 * @param populationIdentifier
+	 *            the identifier of the population affected by the disease
+	 * @param gain 
+	 * @return an initialized instance of DeterministicSIRDiseaseModel
+	 */
+	public static final StochasticSIRDiseaseModel createStochasticSIRDiseaseModel(
+			final String diseaseModelName,
+			final double backgroundMortalityRate,
+			final double infectiousMortalityRate,
+			final double transmissionRate, final double recoveryRate,
+			final double immunityLossRate,
+			final double nonLinearityCoefficient, final long timePeriod,
+			final String populationIdentifier, double gain) {
+		
+		final StochasticSIRDiseaseModel sirDiseaseModel = StandardFactory.eINSTANCE
+				.createStochasticSIRDiseaseModel();
+		
+		initializeSIRDiseaseModel(sirDiseaseModel, diseaseModelName,
+				backgroundMortalityRate,
+				infectiousMortalityRate, transmissionRate, recoveryRate,
+				immunityLossRate, nonLinearityCoefficient, timePeriod,
+				populationIdentifier);
+		
+		sirDiseaseModel.setGain(gain);
+		
+		return sirDiseaseModel;
+	} // createStochasticSIRDiseaseModel
+	
+	/**
+	 * ModelSpecificAdjustments for a Stochastic model adds noise to
+	 * the I state. It will be propagated to other states automatically
+	 * 
+	 */
+	
+	public void doModelSpecificAdjustments(
+			final LabelValue state) {
+			final SILabelValue currentSI = (SILabelValue) state;
+			double oldI = currentSI.getI();
+			double incidence = currentSI.getIncidence();
+			double newIncidence = incidence*computeNoise();
+			double diff = newIncidence - incidence; 
+			
+			double newI = currentSI.getI() + diff;
+			double newS = currentSI.getS() - diff;
+			if(newI < 0.0) {
+				double scale = (-newI) / currentSI.getI();
+				if(Double.isInfinite(scale))
+					scale = 0.0; // cancel noise if 0
+				diff = diff * scale;
+				newI = currentSI.getI() + diff; // 0
+				newS = currentSI.getS() - diff;
+			}
+			if(newS < 0.0) {
+				double scale = (-newS) / currentSI.getS();
+				if(Double.isInfinite(scale))
+					scale = 0.0; // cancel noise if 0
+				diff = diff * scale;
+				newI = currentSI.getI() + diff;
+				newS = currentSI.getS() - diff; // 0
+			}
+			newIncidence = incidence + diff;
+			currentSI.setS(newS);
+			currentSI.setI(newI);
+			currentSI.setIncidence(newIncidence); 
+			return;
+			
+	} // doModelSpecificAdjustments
+	
+	@Override
+	public boolean isDeterministic() {
+		return true;
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StandardPackage.Literals.STOCHASTIC_SIR_DISEASE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getSeed() {
+		return seed;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setSeed(long newSeed) {
+		long oldSeed = seed;
+		seed = newSeed;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED, oldSeed, seed));
+		randomGenerator.setSeed(newSeed);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Random getRandomGenerator() {
+		return randomGenerator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getGain() {
+		return gain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setGain(double newGain) {
+		double oldGain = gain;
+		gain = newGain;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN, oldGain, gain));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * By default this calls the static method StandardStochasticDiseaseModelImpl.computeNoise(gain, rand)
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double computeNoise() {
+		return StandardStochasticDiseaseModelImpl.computeNoise(gain, randomGenerator);
+	}
+	
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED:
+				return getSeed();
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR:
+				return getRandomGenerator();
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN:
+				return getGain();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED:
+				setSeed((Long)newValue);
+				return;
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN:
+				setGain((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED:
+				setSeed(SEED_EDEFAULT);
+				return;
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN:
+				setGain(GAIN_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED:
+				return seed != SEED_EDEFAULT;
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR:
+				return RANDOM_GENERATOR_EDEFAULT == null ? randomGenerator != null : !RANDOM_GENERATOR_EDEFAULT.equals(randomGenerator);
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN:
+				return gain != GAIN_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (derivedFeatureID) {
+				case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN: return StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == StochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED: return StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED;
+				case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR: return StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR;
+				default: return -1;
+			}
+		}
+		if (baseClass == StandardStochasticDiseaseModel.class) {
+			switch (baseFeatureID) {
+				case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN: return StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (seed: "); //$NON-NLS-1$
+		result.append(seed);
+		result.append(", randomGenerator: "); //$NON-NLS-1$
+		result.append(randomGenerator);
+		result.append(", gain: "); //$NON-NLS-1$
+		result.append(gain);
+		result.append(')');
+		return result.toString();
+	}
+
+} // StochasticSIRDiseaseModelImpl
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingDiseaseModelStateItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingDiseaseModelStateItemProvider.java
new file mode 100644
index 0000000..8817028
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingDiseaseModelStateItemProvider.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AggregatingDiseaseModelStateItemProvider
+	extends DiseaseModelStateItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingDiseaseModelStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addChildrensLabelsPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Childrens Labels feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addChildrensLabelsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_AggregatingDiseaseModelState_childrensLabels_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_AggregatingDiseaseModelState_childrensLabels_feature", "_UI_AggregatingDiseaseModelState_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.AGGREGATING_DISEASE_MODEL_STATE__CHILDRENS_LABELS,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_AggregatingDiseaseModelState_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSEIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSEIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..bf9d506
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSEIRDiseaseModelItemProvider.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AggregatingSEIRDiseaseModelItemProvider
+	extends AggregatingSIRDiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSEIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((AggregatingSEIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_AggregatingSEIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_AggregatingSEIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIDiseaseModelItemProvider.java
new file mode 100644
index 0000000..c3450af
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIDiseaseModelItemProvider.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AggregatingSIDiseaseModelItemProvider
+	extends SIItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((AggregatingSIDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_AggregatingSIDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_AggregatingSIDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..81b03b4
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/AggregatingSIRDiseaseModelItemProvider.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AggregatingSIRDiseaseModelItemProvider
+	extends AggregatingSIDiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((AggregatingSIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_AggregatingSIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_AggregatingSIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSEIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSEIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..542d2ee
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSEIRDiseaseModelItemProvider.java
@@ -0,0 +1,116 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DeterministicSEIRDiseaseModelItemProvider extends SEIRItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSEIRDiseaseModelItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DeterministicSEIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DeterministicSEIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_DeterministicSEIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+} // DeterministicSEIRDiseaseModelItemProvider
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIDiseaseModelItemProvider.java
new file mode 100644
index 0000000..37df0f2
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIDiseaseModelItemProvider.java
@@ -0,0 +1,116 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DeterministicSIDiseaseModelItemProvider extends SIItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DeterministicSIDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DeterministicSIDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_DeterministicSIDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..9d8b727
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DeterministicSIRDiseaseModelItemProvider.java
@@ -0,0 +1,117 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DeterministicSIRDiseaseModelItemProvider extends SIRItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIRDiseaseModelItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DeterministicSIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DeterministicSIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_DeterministicSIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelItemProvider.java
new file mode 100644
index 0000000..248dbeb
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelItemProvider.java
@@ -0,0 +1,332 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.model.provider.NodeDecoratorItemProvider;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.DiseaseModel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class DiseaseModelItemProvider extends NodeDecoratorItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			// Modified to reorder how the properties appear.  This
+			// helps in the new disease wizard.
+			addDiseaseNamePropertyDescriptor(object);
+			addPopulationIdentifierPropertyDescriptor(object);
+			addTimePeriodPropertyDescriptor(object);
+			
+			addFrequencyDependentPropertyDescriptor(object);
+			
+			
+			// Old order
+			//			addBackgroundMortalityRatePropertyDescriptor(object);
+			//			addPopulationIdentifierPropertyDescriptor(object);
+			//			addTimePeriodPropertyDescriptor(object);
+			//			addDiseaseNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated 
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addBackgroundMortalityRatePropertyDescriptor(object);
+			addPopulationIdentifierPropertyDescriptor(object);
+			addTimePeriodPropertyDescriptor(object);
+			addDiseaseNamePropertyDescriptor(object);
+			addFrequencyDependentPropertyDescriptor(object);
+			addBackgroundBirthRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Background Mortality Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBackgroundMortalityRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_backgroundMortalityRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_backgroundMortalityRate_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Time Period feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTimePeriodPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_timePeriod_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_timePeriod_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__TIME_PERIOD,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Identifier feature.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPopulationIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_populationIdentifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_populationIdentifier_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__POPULATION_IDENTIFIER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Disease Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDiseaseNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_diseaseName_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_diseaseName_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__DISEASE_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Frequency Dependent feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFrequencyDependentPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_frequencyDependent_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_frequencyDependent_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__FREQUENCY_DEPENDENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Background Birth Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBackgroundBirthRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModel_backgroundBirthRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModel_backgroundBirthRate_feature", "_UI_DiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL__BACKGROUND_BIRTH_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns disease.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/disease"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((DiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_DiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DiseaseModel.class)) {
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+			case StandardPackage.DISEASE_MODEL__RELATIVE_TOLERANCE:
+			case StandardPackage.DISEASE_MODEL__FINITE_DIFFERENCE:
+			case StandardPackage.DISEASE_MODEL__FREQUENCY_DEPENDENT:
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_BIRTH_RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DiseasemodelsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelItemProvider.java
new file mode 100644
index 0000000..e3c2700
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelItemProvider.java
@@ -0,0 +1,213 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.DynamicNodeLabelItemProvider;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DiseaseModelLabelItemProvider extends DynamicNodeLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addPopulationLabelPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Label feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addPopulationLabelPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModelLabel_populationLabel_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModelLabel_populationLabel_feature", "_UI_DiseaseModelLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL_LABEL__POPULATION_LABEL,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(StandardPackage.Literals.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((DiseaseModelLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_DiseaseModelLabel_type") : //$NON-NLS-1$
+			getString("_UI_DiseaseModelLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DiseaseModelLabel.class)) {
+			case StandardPackage.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(StandardPackage.Literals.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE,
+				 StandardFactory.eINSTANCE.createSIDiseaseModelState()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(StandardPackage.Literals.DISEASE_MODEL_LABEL__DISEASE_MODEL_STATE,
+				 StandardFactory.eINSTANCE.createAggregatingDiseaseModelState()));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DiseasemodelsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelValueItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelValueItemProvider.java
new file mode 100644
index 0000000..d922241
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelLabelValueItemProvider.java
@@ -0,0 +1,210 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DiseaseModelLabelValueItemProvider extends LabelValueItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDiseaseDeathsPropertyDescriptor(object);
+			addPopulationCountPropertyDescriptor(object);
+			addIncidencePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Count feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addPopulationCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModelLabelValue_populationCount_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModelLabelValue_populationCount_feature", "_UI_DiseaseModelLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Incidence feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIncidencePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModelLabelValue_incidence_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModelLabelValue_incidence_feature", "_UI_DiseaseModelLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL_LABEL_VALUE__INCIDENCE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Disease Deaths feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addDiseaseDeathsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_DiseaseModelLabelValue_diseaseDeaths_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_DiseaseModelLabelValue_diseaseDeaths_feature", "_UI_DiseaseModelLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		DiseaseModelLabelValue diseaseModelLabelValue = (DiseaseModelLabelValue)object;
+		return getString("_UI_DiseaseModelLabelValue_type") + " " + diseaseModelLabelValue.getDiseaseDeaths(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(DiseaseModelLabelValue.class)) {
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS:
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT:
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE__INCIDENCE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DiseasemodelsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelStateItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelStateItemProvider.java
new file mode 100644
index 0000000..782732f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseaseModelStateItemProvider.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+//import org.eclipse.emf.edit.provider.ViewerNotification;
+//import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+
+//import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.DiseaseModelState} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class DiseaseModelStateItemProvider extends ItemProviderAdapter
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		return getString("_UI_DiseaseModelState_type"); //$NON-NLS-1$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DiseasemodelsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseasemodelsEditPlugin.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseasemodelsEditPlugin.java
new file mode 100644
index 0000000..413ba8a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/DiseasemodelsEditPlugin.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+//import org.eclipse.stem.core.common.provider.CommonEditPlugin;
+//import org.eclipse.stem.core.graph.provider.GraphEditPlugin;
+//import org.eclipse.stem.core.model.provider.ModelEditPlugin;
+//import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+
+/**
+ * This is the central singleton for the Diseasemodels edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DiseasemodelsEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final DiseasemodelsEditPlugin INSTANCE = new DiseasemodelsEditPlugin();
+
+	/**
+	 * 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 NOT
+	 */
+	public DiseasemodelsEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     CoreEditPlugin.INSTANCE,
+		     /*EcoreEditPlugin.INSTANCE,*/
+		     DefinitionsEditPlugin.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/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/InfectorItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/InfectorItemProvider.java
new file mode 100644
index 0000000..7be073f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/InfectorItemProvider.java
@@ -0,0 +1,295 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.model.provider.NodeDecoratorItemProvider;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.Infector} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class InfectorItemProvider extends NodeDecoratorItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InfectorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDiseaseModelPropertyDescriptor(object);
+			addTargetURIPropertyDescriptor(object);
+			addDiseaseNamePropertyDescriptor(object);
+			addTargetISOKeyPropertyDescriptor(object);
+			addLabelsToInfectPropertyDescriptor(object);
+			addPopulationIdentifierPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Disease Model feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addDiseaseModelPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_diseaseModel_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_diseaseModel_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__DISEASE_MODEL,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Target URI feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addTargetURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_targetURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_targetURI_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__TARGET_URI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Disease Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDiseaseNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_diseaseName_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_diseaseName_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__DISEASE_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Target ISO Key feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTargetISOKeyPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_targetISOKey_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_targetISOKey_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__TARGET_ISO_KEY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Labels To Infect feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLabelsToInfectPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_labelsToInfect_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_labelsToInfect_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__LABELS_TO_INFECT,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Population Identifier feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPopulationIdentifierPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Infector_populationIdentifier_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_Infector_populationIdentifier_feature", "_UI_Infector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.INFECTOR__POPULATION_IDENTIFIER,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns infector.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/infector"));
+	}
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((Infector)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_Infector_type") : //$NON-NLS-1$
+			getString("_UI_Infector_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(Infector.class)) {
+			case StandardPackage.INFECTOR__TARGET_URI:
+			case StandardPackage.INFECTOR__DISEASE_NAME:
+			case StandardPackage.INFECTOR__TARGET_ISO_KEY:
+			case StandardPackage.INFECTOR__POPULATION_IDENTIFIER:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return DiseasemodelsEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRItemProvider.java
new file mode 100644
index 0000000..ae7e56a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRItemProvider.java
@@ -0,0 +1,164 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SEIR} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SEIRItemProvider extends SIRItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addIncubationRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Incubation Rate feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addIncubationRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIR_incubationRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIR_incubationRate_feature", "_UI_SEIR_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR__INCUBATION_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SEIR)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SEIR_type") : //$NON-NLS-1$
+			getString("_UI_SEIR_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 *            <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+//	@Override
+	public void notifyChangedGen(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SEIR.class)) {
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+	
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelItemProvider.java
new file mode 100644
index 0000000..47799da
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelItemProvider.java
@@ -0,0 +1,238 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SEIRLabel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SEIRLabelItemProvider extends StandardDiseaseModelLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDeltaValuePropertyDescriptor(object);
+			addProbeValuePropertyDescriptor(object);
+			addTempValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+			addErrorScalePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Delta Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDeltaValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabel_deltaValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabel_deltaValue_feature", "_UI_SEIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL__DELTA_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Probe Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addProbeValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabel_probeValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabel_probeValue_feature", "_UI_SEIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL__PROBE_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Temp Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTempValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabel_tempValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabel_tempValue_feature", "_UI_SEIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL__TEMP_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabel_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabel_originalValue_feature", "_UI_SEIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Error Scale feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addErrorScalePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabel_errorScale_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabel_errorScale_feature", "_UI_SEIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL__ERROR_SCALE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((SEIRLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SEIRLabel_type") : //$NON-NLS-1$
+			getString("_UI_SEIRLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelValueItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelValueItemProvider.java
new file mode 100644
index 0000000..f86bb85
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SEIRLabelValueItemProvider.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class SEIRLabelValueItemProvider extends SIRLabelValueItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addEPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the E feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SEIRLabelValue_e_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SEIRLabelValue_e_feature", "_UI_SEIRLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SEIR_LABEL_VALUE__E,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		SEIRLabelValue seirLabelValue = (SEIRLabelValue)object;
+		return getString("_UI_SEIRLabelValue_type") + " " + seirLabelValue.getDiseaseDeaths(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SEIRLabelValue.class)) {
+			case StandardPackage.SEIR_LABEL_VALUE__E:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIDiseaseModelStateItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIDiseaseModelStateItemProvider.java
new file mode 100644
index 0000000..e6ee98d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIDiseaseModelStateItemProvider.java
@@ -0,0 +1,116 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class SIDiseaseModelStateItemProvider extends
+		StandardDiseaseModelStateItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIDiseaseModelStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * 
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		SIDiseaseModelState siDiseaseModelState = (SIDiseaseModelState)object;
+		return getString("_UI_SIDiseaseModelState_type") + " " + siDiseaseModelState.getAreaRatio(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIInfectorItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIInfectorItemProvider.java
new file mode 100644
index 0000000..50e92de
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIInfectorItemProvider.java
@@ -0,0 +1,154 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SIInfector} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SIInfectorItemProvider extends StandardInfectorItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIInfectorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addInfectiousCountPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Infectious Count feature. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void addInfectiousCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIInfector_infectiousCount_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIInfector_infectiousCount_feature", "_UI_SIInfector_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_INFECTOR__INFECTIOUS_COUNT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	
+	
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SIInfector)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SIInfector_type") : //$NON-NLS-1$
+			getString("_UI_SIInfector_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SIInfector.class)) {
+			case StandardPackage.SI_INFECTOR__INFECTIOUS_COUNT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIItemProvider.java
new file mode 100644
index 0000000..62880ee
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIItemProvider.java
@@ -0,0 +1,297 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SI;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SI} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SIItemProvider extends StandardDiseaseModelItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public List getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+			
+			addTransmissionRatePropertyDescriptor(object);
+			addNonLinearityCoefficientPropertyDescriptor(object);
+			addRecoveryRatePropertyDescriptor(object);
+			addInfectiousMortalityRatePropertyDescriptor(object);
+			addPhysicallyAdjacentInfectiousProportionPropertyDescriptor(object);
+			addRoadNetworkInfectiousProportionPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTransmissionRatePropertyDescriptor(object);
+			addNonLinearityCoefficientPropertyDescriptor(object);
+			addRecoveryRatePropertyDescriptor(object);
+			addInfectiousMortalityRatePropertyDescriptor(object);
+			addPhysicallyAdjacentInfectiousProportionPropertyDescriptor(object);
+			addRoadNetworkInfectiousProportionPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Transmission Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTransmissionRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_transmissionRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_transmissionRate_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__TRANSMISSION_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Recovery Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRecoveryRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_recoveryRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_recoveryRate_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__RECOVERY_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Infectious Mortality Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addInfectiousMortalityRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_infectiousMortalityRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_infectiousMortalityRate_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__INFECTIOUS_MORTALITY_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Physically Adjacent Infectious Proportion feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addPhysicallyAdjacentInfectiousProportionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_physicallyAdjacentInfectiousProportion_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_physicallyAdjacentInfectiousProportion_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Road Network Infectious Proportion feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRoadNetworkInfectiousProportionPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_roadNetworkInfectiousProportion_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_roadNetworkInfectiousProportion_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Non Linearity Coefficient feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNonLinearityCoefficientPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SI_nonLinearityCoefficient_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SI_nonLinearityCoefficient_feature", "_UI_SI_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI__NON_LINEARITY_COEFFICIENT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SI)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SI_type") : //$NON-NLS-1$
+			getString("_UI_SI_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SI.class)) {
+			case StandardPackage.SI__TRANSMISSION_RATE:
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+			case StandardPackage.SI__RECOVERY_RATE:
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+			case StandardPackage.SI__INFECTIOUS_MORTALITY:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelItemProvider.java
new file mode 100644
index 0000000..93b08c5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelItemProvider.java
@@ -0,0 +1,237 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SILabel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SILabelItemProvider extends StandardDiseaseModelLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDeltaValuePropertyDescriptor(object);
+			addProbeValuePropertyDescriptor(object);
+			addTempValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+			addErrorScalePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Delta Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDeltaValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabel_deltaValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabel_deltaValue_feature", "_UI_SILabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL__DELTA_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Probe Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addProbeValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabel_probeValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabel_probeValue_feature", "_UI_SILabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL__PROBE_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Temp Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTempValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabel_tempValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabel_tempValue_feature", "_UI_SILabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL__TEMP_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabel_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabel_originalValue_feature", "_UI_SILabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Error Scale feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addErrorScalePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabel_errorScale_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabel_errorScale_feature", "_UI_SILabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL__ERROR_SCALE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((SILabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SILabel_type") : //$NON-NLS-1$
+			getString("_UI_SILabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelValueItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelValueItemProvider.java
new file mode 100644
index 0000000..68bd8f3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SILabelValueItemProvider.java
@@ -0,0 +1,150 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SILabelValue} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SILabelValueItemProvider extends
+		StandardDiseaseModelLabelValueItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addIPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the I feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SILabelValue_i_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SILabelValue_i_feature", "_UI_SILabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SI_LABEL_VALUE__I,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		SILabelValue siLabelValue = (SILabelValue)object;
+		return getString("_UI_SILabelValue_type") + " " + siLabelValue.getDiseaseDeaths(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SILabelValue.class)) {
+			case StandardPackage.SI_LABEL_VALUE__I:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRInoculatorItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRInoculatorItemProvider.java
new file mode 100644
index 0000000..84b3966
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRInoculatorItemProvider.java
@@ -0,0 +1,152 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.standard.SIRInoculator;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.SIRInoculator} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SIRInoculatorItemProvider
+	extends SIInfectorItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRInoculatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addInoculatedPercentagePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Inoculated Percentage feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addInoculatedPercentagePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRInoculator_inoculatedPercentage_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRInoculator_inoculatedPercentage_feature", "_UI_SIRInoculator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_INOCULATOR__INOCULATED_PERCENTAGE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns SIRInoculator.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/inoculator"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SIRInoculator)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SIRInoculator_type") : //$NON-NLS-1$
+			getString("_UI_SIRInoculator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SIRInoculator.class)) {
+			case StandardPackage.SIR_INOCULATOR__INOCULATED_PERCENTAGE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRItemProvider.java
new file mode 100644
index 0000000..88db484
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRItemProvider.java
@@ -0,0 +1,151 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SIR} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SIRItemProvider extends SIItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addImmunityLossRatePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Immunity Loss Rate feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addImmunityLossRatePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIR_immunityLossRate_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIR_immunityLossRate_feature", "_UI_SIR_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR__IMMUNITY_LOSS_RATE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((SIR)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SIR_type") : //$NON-NLS-1$
+			getString("_UI_SIR_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SIR.class)) {
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelItemProvider.java
new file mode 100644
index 0000000..48bb71c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelItemProvider.java
@@ -0,0 +1,238 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a
+ * {@link org.eclipse.stem.diseasemodels.standard.SIRLabel} object. <!--
+ * begin-user-doc --> <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+public class SIRLabelItemProvider extends StandardDiseaseModelLabelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDeltaValuePropertyDescriptor(object);
+			addProbeValuePropertyDescriptor(object);
+			addTempValuePropertyDescriptor(object);
+			addOriginalValuePropertyDescriptor(object);
+			addErrorScalePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Delta Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDeltaValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabel_deltaValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabel_deltaValue_feature", "_UI_SIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL__DELTA_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Probe Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addProbeValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabel_probeValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabel_probeValue_feature", "_UI_SIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL__PROBE_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Temp Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTempValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabel_tempValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabel_tempValue_feature", "_UI_SIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL__TEMP_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Original Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOriginalValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabel_originalValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabel_originalValue_feature", "_UI_SIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL__ORIGINAL_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Error Scale feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addErrorScalePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabel_errorScale_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabel_errorScale_feature", "_UI_SIRLabel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL__ERROR_SCALE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((SIRLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SIRLabel_type") : //$NON-NLS-1$
+			getString("_UI_SIRLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelValueItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelValueItemProvider.java
new file mode 100644
index 0000000..c025777
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/SIRLabelValueItemProvider.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class SIRLabelValueItemProvider extends SILabelValueItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addRPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the R feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_SIRLabelValue_r_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_SIRLabelValue_r_feature", "_UI_SIRLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.SIR_LABEL_VALUE__R,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		SIRLabelValue sirLabelValue = (SIRLabelValue)object;
+		return getString("_UI_SIRLabelValue_type") + " " + sirLabelValue.getDiseaseDeaths(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(SIRLabelValue.class)) {
+			case StandardPackage.SIR_LABEL_VALUE__R:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelItemProvider.java
new file mode 100644
index 0000000..e6f04f9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelItemProvider.java
@@ -0,0 +1,244 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardDiseaseModelItemProvider extends DiseaseModelItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public List getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+			addReferencePopulationDensityPropertyDescriptor(object);
+			//addTotalPopulationCountPropertyDescriptor(object);
+			//addTotalPopulationCountReciprocalPropertyDescriptor(object);
+			//addTotalAreaPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTotalPopulationCountPropertyDescriptor(object);
+			addTotalPopulationCountReciprocalPropertyDescriptor(object);
+			addTotalAreaPropertyDescriptor(object);
+			addReferencePopulationDensityPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Total Population Count feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTotalPopulationCountPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModel_totalPopulationCount_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModel_totalPopulationCount_feature", "_UI_StandardDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Total Population Count Reciprocal feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTotalPopulationCountReciprocalPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModel_totalPopulationCountReciprocal_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModel_totalPopulationCountReciprocal_feature", "_UI_StandardDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Total Area feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTotalAreaPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModel_totalArea_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModel_totalArea_feature", "_UI_StandardDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL__TOTAL_AREA,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Reference Population Density feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addReferencePopulationDensityPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModel_referencePopulationDensity_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModel_referencePopulationDensity_feature", "_UI_StandardDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StandardDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StandardDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StandardDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StandardDiseaseModel.class)) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT:
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_POPULATION_COUNT_RECIPROCAL:
+			case StandardPackage.STANDARD_DISEASE_MODEL__TOTAL_AREA:
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelItemProvider.java
new file mode 100644
index 0000000..9a9ab33
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelItemProvider.java
@@ -0,0 +1,123 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardDiseaseModelLabelItemProvider extends
+		DiseaseModelLabelItemProvider implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider,
+		IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((StandardDiseaseModelLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StandardDiseaseModelLabel_type") : //$NON-NLS-1$
+			getString("_UI_StandardDiseaseModelLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelValueItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelValueItemProvider.java
new file mode 100644
index 0000000..d7a1ae5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelLabelValueItemProvider.java
@@ -0,0 +1,149 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardDiseaseModelLabelValueItemProvider extends
+		DiseaseModelLabelValueItemProvider implements
+		IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelLabelValueItemProvider(
+			AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the S feature.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModelLabelValue_s_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModelLabelValue_s_feature", "_UI_StandardDiseaseModelLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL_LABEL_VALUE__S,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		StandardDiseaseModelLabelValue standardDiseaseModelLabelValue = (StandardDiseaseModelLabelValue)object;
+		return getString("_UI_StandardDiseaseModelLabelValue_type") + " " + standardDiseaseModelLabelValue.getDiseaseDeaths(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StandardDiseaseModelLabelValue.class)) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE__S:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelStateItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelStateItemProvider.java
new file mode 100644
index 0000000..7d12ee5
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardDiseaseModelStateItemProvider.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardDiseaseModelStateItemProvider extends
+		DiseaseModelStateItemProvider implements IEditingDomainItemProvider,
+		IStructuredItemContentProvider, ITreeItemContentProvider,
+		IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * @generated
+	 */
+	public StandardDiseaseModelStateItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addAreaRatioPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Area Ratio feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addAreaRatioPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardDiseaseModelState_areaRatio_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardDiseaseModelState_areaRatio_feature", "_UI_StandardDiseaseModelState_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		StandardDiseaseModelState standardDiseaseModelState = (StandardDiseaseModelState)object;
+		return getString("_UI_StandardDiseaseModelState_type") + " " + standardDiseaseModelState.getAreaRatio(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StandardDiseaseModelState.class)) {
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE__AREA_RATIO:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardHistoryProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardHistoryProviderAdapterFactory.java
new file mode 100644
index 0000000..c6e3633
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardHistoryProviderAdapterFactory.java
@@ -0,0 +1,291 @@
+// StandardHistoryProviderAdapterFactory.java
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.stem.adapters.history.HistoryProvider;
+import org.eclipse.stem.adapters.history.HistoryProviderAdapter;
+import org.eclipse.stem.adapters.history.HistoryProviderAdapterFactory;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+
+/**
+ * This class represents
+ */
+public class StandardHistoryProviderAdapterFactory extends
+		StandardAdapterFactory implements RelativeValueProviderAdapterFactory {
+
+	/**
+	 * This keeps track of the root adapter factory that delegates to this
+	 * adapter factory.
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * Default Constructor
+	 */
+	public StandardHistoryProviderAdapterFactory() {
+		super();
+		HistoryProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	} // StandardHistoryProviderAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelLabelAdapter() {
+		return new DiseaseModelLabelHistoryProvider();
+	} // createDiseaseModelLabelAdapter
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void addListener(final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void fireNotifyChanged(final Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void removeListener(
+			final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory
+				.getRootAdapterFactory();
+	}
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#setParentAdapterFactory(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(
+			final ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == HistoryProvider.class || super.isFactoryForType(type);
+	} // isFactoryForType
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * This class is a History Provider for DiseaseModelLabel instances. It
+	 * provides a collection of historic values of a DiseaseModelLabel
+	 */
+	private static class DiseaseModelLabelHistoryProvider extends
+			HistoryProviderAdapter implements HistoryProvider {
+
+		long cycle = 0L;
+		final STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+
+		final Map<STEMTime, DiseaseModelLabel> history = Collections.synchronizedMap(new TreeMap<STEMTime, DiseaseModelLabel>());
+
+		
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
+		 */
+		@Override
+		public void notifyChanged(final Notification msg) {
+			switch (msg.getEventType()) {
+			case Notification.SET:
+				// Is it setting the nextValue?
+				switch (msg.getFeatureID(LabelValue.class)) {
+				case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE:
+					// If the next value null?
+					
+					if (msg.getNewValue() != null) {
+						// No
+						STEMTime timeKey = generateNextSTEMTime(cycle++);
+						synchronized (history) {
+							// Make of copy of the disease model label
+							final DiseaseModelLabel dml = (DiseaseModelLabel)EcoreUtil
+									.copy((DiseaseModelLabel) getTarget());
+							// When you copy an EObject, the references are
+							// copied as well this means that the Node that
+							// referenced the original DiseaseModelLabel will
+							// also reference the copy. This adds the copy to
+							// the list of Labels maintained by the Node. We
+							// need to remove it from the list so that we don't
+							// get extraneous Labels hanging around.
+							dml.getNode().getLabels().remove(dml);
+							history.put(timeKey, dml);
+						}// synchronized
+						fireHistoryExtended();
+					} // if not null
+					break;
+
+				default:
+					break;
+				} // switch LabelValue feature Id
+				break;
+
+			default:
+				break;
+			} // switch
+
+		} // notifyChanged
+
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getAllHistoricTimeValues()
+		 */
+		@Override
+		public STEMTime[] getAllHistoricTimeValues() {
+			STEMTime[] time = null;
+			synchronized(history) {
+				time=history.keySet().toArray(new STEMTime[0]);
+			}
+			return time;
+		}
+
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getAllHistoricInstances()
+		 */
+		@Override
+		public Identifiable[] getAllHistoricInstances() {
+			Identifiable[] allInstances = null;
+			synchronized(history) {
+				allInstances=history.values().toArray(new Identifiable[0]);
+			}
+			return allInstances;
+		}
+
+		
+
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getHistoricInstances()
+		 */
+		@Override
+		public Identifiable[] getHistoricInstances(STEMTime[] timeRange) {
+			Identifiable[] allValues = getAllHistoricInstances();
+			Identifiable[] retVal = new Identifiable[timeRange.length];
+			System.arraycopy(allValues, 0, retVal, 0, timeRange.length);
+			return retVal;
+		}
+		
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getEarliestCycleNumber()
+		 */
+		@Override
+		public int getEarliestCycleNumber() {
+			long retValue = 0;
+			synchronized(history) {
+				try {
+					retValue = history.keySet().toArray(new Long[0])[0].longValue();
+				} catch (final RuntimeException e) {
+					// Ignore, return 0
+				}
+			}
+			return (int) retValue;
+		} // getEarliestCycleNumber
+
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getEarliestTimeValue()
+		 */
+		@Override
+		public STEMTime getEarliestTimeValue() {
+			return generateHistoricSTEMTime(getEarliestCycleNumber());
+		}
+
+		/**
+		 * @return
+		 */
+		private STEMTime generateHistoricSTEMTime(final int daysInPast) {
+			final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+			final long daysAgo = retValue.getTime().getTime() - daysInPast
+					* STEMTime.Units.DAY.getMilliseconds();
+			retValue.setTime(new Date(daysAgo));
+			return retValue;
+		} // generateHistoricSTEMTime
+		
+
+		/**
+		 * @return
+		 */
+		private STEMTime generateNextSTEMTime(final long daysInFuture) {
+			final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+			final long day = startTime.getTime().getTime() + daysInFuture
+					* STEMTime.Units.DAY.getMilliseconds();
+			retValue.setTime(new Date(day));
+			return retValue;
+		} // generateHistoricSTEMTime
+		
+		
+
+		/**
+		 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#reset()
+		 */
+		@Override
+		public void reset() {
+
+			cycle = 0;
+			synchronized(history) {
+				history.clear();
+			}
+			
+			// The super class will tell the listeners that the history has
+			// changed.
+			super.reset();
+		}
+
+	} // DiseaseModelLabelHistoryProvider
+
+} // StandardHistoryProviderAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardInfectorItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardInfectorItemProvider.java
new file mode 100644
index 0000000..5cf2a5d
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardInfectorItemProvider.java
@@ -0,0 +1,116 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardInfector} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardInfectorItemProvider extends InfectorItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardInfectorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StandardInfector)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StandardInfector_type") : //$NON-NLS-1$
+			getString("_UI_StandardInfector_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardItemProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardItemProviderAdapterFactory.java
new file mode 100644
index 0000000..cca902a
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardItemProviderAdapterFactory.java
@@ -0,0 +1,781 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+//import org.eclipse.emf.edit.provider.ComposedImage;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.model.Model;
+//import org.eclipse.stem.core.model.ModelFactory;
+//import org.eclipse.stem.core.model.ModelPackage;
+//import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @generated
+ */
+public class StandardItemProviderAdapterFactory extends StandardAdapterFactory
+		implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @generated
+	 */
+	public StandardItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SEIRLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SEIRLabelItemProvider seirLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SEIRLabel}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSEIRLabelAdapter() {
+		if (seirLabelItemProvider == null) {
+			seirLabelItemProvider = new SEIRLabelItemProvider(this);
+		}
+
+		return seirLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SEIRLabelValueItemProvider seirLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSEIRLabelValueAdapter() {
+		if (seirLabelValueItemProvider == null) {
+			seirLabelValueItemProvider = new SEIRLabelValueItemProvider(this);
+		}
+
+		return seirLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SIRLabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRLabelItemProvider sirLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SIRLabel}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSIRLabelAdapter() {
+		if (sirLabelItemProvider == null) {
+			sirLabelItemProvider = new SIRLabelItemProvider(this);
+		}
+
+		return sirLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRLabelValueItemProvider sirLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSIRLabelValueAdapter() {
+		if (sirLabelValueItemProvider == null) {
+			sirLabelValueItemProvider = new SIRLabelValueItemProvider(this);
+		}
+
+		return sirLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticSEIRDiseaseModelItemProvider stochasticSEIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticSEIRDiseaseModelAdapter() {
+		if (stochasticSEIRDiseaseModelItemProvider == null) {
+			stochasticSEIRDiseaseModelItemProvider = new StochasticSEIRDiseaseModelItemProvider(this);
+		}
+
+		return stochasticSEIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DeterministicSEIRDiseaseModelItemProvider deterministicSEIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDeterministicSEIRDiseaseModelAdapter() {
+		if (deterministicSEIRDiseaseModelItemProvider == null) {
+			deterministicSEIRDiseaseModelItemProvider = new DeterministicSEIRDiseaseModelItemProvider(this);
+		}
+
+		return deterministicSEIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SILabel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SILabelItemProvider siLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SILabel}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSILabelAdapter() {
+		if (siLabelItemProvider == null) {
+			siLabelItemProvider = new SILabelItemProvider(this);
+		}
+
+		return siLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SILabelValue} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SILabelValueItemProvider siLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SILabelValue}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSILabelValueAdapter() {
+		if (siLabelValueItemProvider == null) {
+			siLabelValueItemProvider = new SILabelValueItemProvider(this);
+		}
+
+		return siLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SIInfector} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIInfectorItemProvider siInfectorItemProvider;
+
+	/**
+	 * This creates an adapter for a
+	 * {@link org.eclipse.stem.diseasemodels.standard.SIInfector}. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSIInfectorAdapter() {
+		if (siInfectorItemProvider == null) {
+			siInfectorItemProvider = new SIInfectorItemProvider(this);
+		}
+
+		return siInfectorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DeterministicSIRDiseaseModelItemProvider deterministicSIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDeterministicSIRDiseaseModelAdapter() {
+		if (deterministicSIRDiseaseModelItemProvider == null) {
+			deterministicSIRDiseaseModelItemProvider = new DeterministicSIRDiseaseModelItemProvider(this);
+		}
+
+		return deterministicSIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DeterministicSIDiseaseModelItemProvider deterministicSIDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createDeterministicSIDiseaseModelAdapter() {
+		if (deterministicSIDiseaseModelItemProvider == null) {
+			deterministicSIDiseaseModelItemProvider = new DeterministicSIDiseaseModelItemProvider(this);
+		}
+
+		return deterministicSIDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticSIRDiseaseModelItemProvider stochasticSIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticSIRDiseaseModelAdapter() {
+		if (stochasticSIRDiseaseModelItemProvider == null) {
+			stochasticSIRDiseaseModelItemProvider = new StochasticSIRDiseaseModelItemProvider(this);
+		}
+
+		return stochasticSIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSIDiseaseModelItemProvider aggregatingSIDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAggregatingSIDiseaseModelAdapter() {
+		if (aggregatingSIDiseaseModelItemProvider == null) {
+			aggregatingSIDiseaseModelItemProvider = new AggregatingSIDiseaseModelItemProvider(this);
+		}
+
+		return aggregatingSIDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingDiseaseModelStateItemProvider aggregatingDiseaseModelStateItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAggregatingDiseaseModelStateAdapter() {
+		if (aggregatingDiseaseModelStateItemProvider == null) {
+			aggregatingDiseaseModelStateItemProvider = new AggregatingDiseaseModelStateItemProvider(this);
+		}
+
+		return aggregatingDiseaseModelStateItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSEIRDiseaseModelItemProvider aggregatingSEIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAggregatingSEIRDiseaseModelAdapter() {
+		if (aggregatingSEIRDiseaseModelItemProvider == null) {
+			aggregatingSEIRDiseaseModelItemProvider = new AggregatingSEIRDiseaseModelItemProvider(this);
+		}
+
+		return aggregatingSEIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AggregatingSIRDiseaseModelItemProvider aggregatingSIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createAggregatingSIRDiseaseModelAdapter() {
+		if (aggregatingSIRDiseaseModelItemProvider == null) {
+			aggregatingSIRDiseaseModelItemProvider = new AggregatingSIRDiseaseModelItemProvider(this);
+		}
+
+		return aggregatingSIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SIRInoculator} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIRInoculatorItemProvider sirInoculatorItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.SIRInoculator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSIRInoculatorAdapter() {
+		if (sirInoculatorItemProvider == null) {
+			sirInoculatorItemProvider = new SIRInoculatorItemProvider(this);
+		}
+
+		return sirInoculatorItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticPoissonSIDiseaseModelItemProvider stochasticPoissonSIDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticPoissonSIDiseaseModelAdapter() {
+		if (stochasticPoissonSIDiseaseModelItemProvider == null) {
+			stochasticPoissonSIDiseaseModelItemProvider = new StochasticPoissonSIDiseaseModelItemProvider(this);
+		}
+
+		return stochasticPoissonSIDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticPoissonSIRDiseaseModelItemProvider stochasticPoissonSIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticPoissonSIRDiseaseModelAdapter() {
+		if (stochasticPoissonSIRDiseaseModelItemProvider == null) {
+			stochasticPoissonSIRDiseaseModelItemProvider = new StochasticPoissonSIRDiseaseModelItemProvider(this);
+		}
+
+		return stochasticPoissonSIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticPoissonSEIRDiseaseModelItemProvider stochasticPoissonSEIRDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticPoissonSEIRDiseaseModelAdapter() {
+		if (stochasticPoissonSEIRDiseaseModelItemProvider == null) {
+			stochasticPoissonSEIRDiseaseModelItemProvider = new StochasticPoissonSEIRDiseaseModelItemProvider(this);
+		}
+
+		return stochasticPoissonSEIRDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StochasticSIDiseaseModelItemProvider stochasticSIDiseaseModelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createStochasticSIDiseaseModelAdapter() {
+		if (stochasticSIDiseaseModelItemProvider == null) {
+			stochasticSIDiseaseModelItemProvider = new StochasticSIDiseaseModelItemProvider(this);
+		}
+
+		return stochasticSIDiseaseModelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState} instances.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SIDiseaseModelStateItemProvider siDiseaseModelStateItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSIDiseaseModelStateAdapter() {
+		if (siDiseaseModelStateItemProvider == null) {
+			siDiseaseModelStateItemProvider = new SIDiseaseModelStateItemProvider(this);
+		}
+
+		return siDiseaseModelStateItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param parentAdapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(
+			ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param type
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifier
+	 * @param type
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param object
+	 * @param type
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifyChangedListener
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notifyChangedListener
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void dispose() {
+		if (deterministicSEIRDiseaseModelItemProvider != null) deterministicSEIRDiseaseModelItemProvider.dispose();
+		if (deterministicSIDiseaseModelItemProvider != null) deterministicSIDiseaseModelItemProvider.dispose();
+		if (deterministicSIRDiseaseModelItemProvider != null) deterministicSIRDiseaseModelItemProvider.dispose();
+		if (seirLabelItemProvider != null) seirLabelItemProvider.dispose();
+		if (seirLabelValueItemProvider != null) seirLabelValueItemProvider.dispose();
+		if (siDiseaseModelStateItemProvider != null) siDiseaseModelStateItemProvider.dispose();
+		if (siInfectorItemProvider != null) siInfectorItemProvider.dispose();
+		if (siLabelItemProvider != null) siLabelItemProvider.dispose();
+		if (siLabelValueItemProvider != null) siLabelValueItemProvider.dispose();
+		if (sirLabelItemProvider != null) sirLabelItemProvider.dispose();
+		if (sirLabelValueItemProvider != null) sirLabelValueItemProvider.dispose();
+		if (stochasticSEIRDiseaseModelItemProvider != null) stochasticSEIRDiseaseModelItemProvider.dispose();
+		if (stochasticSIDiseaseModelItemProvider != null) stochasticSIDiseaseModelItemProvider.dispose();
+		if (stochasticSIRDiseaseModelItemProvider != null) stochasticSIRDiseaseModelItemProvider.dispose();
+		if (aggregatingSIDiseaseModelItemProvider != null) aggregatingSIDiseaseModelItemProvider.dispose();
+		if (aggregatingDiseaseModelStateItemProvider != null) aggregatingDiseaseModelStateItemProvider.dispose();
+		if (aggregatingSEIRDiseaseModelItemProvider != null) aggregatingSEIRDiseaseModelItemProvider.dispose();
+		if (aggregatingSIRDiseaseModelItemProvider != null) aggregatingSIRDiseaseModelItemProvider.dispose();
+		if (sirInoculatorItemProvider != null) sirInoculatorItemProvider.dispose();
+		if (stochasticPoissonSIDiseaseModelItemProvider != null) stochasticPoissonSIDiseaseModelItemProvider.dispose();
+		if (stochasticPoissonSIRDiseaseModelItemProvider != null) stochasticPoissonSIRDiseaseModelItemProvider.dispose();
+		if (stochasticPoissonSEIRDiseaseModelItemProvider != null) stochasticPoissonSEIRDiseaseModelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueHistoryProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueHistoryProviderAdapterFactory.java
new file mode 100644
index 0000000..7333e5b
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueHistoryProviderAdapterFactory.java
@@ -0,0 +1,333 @@
+// StandardRelativeHistoryValueProviderAdapterFactory.java
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.adapters.history.HistoryProvider;
+import org.eclipse.stem.adapters.history.HistoryProviderAdapter;
+import org.eclipse.stem.adapters.history.HistoryProviderAdapterFactory;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+
+/**
+ * This class is a factory for this model that creates
+ * {@link RelativeValueHistoryProvider}'s for classes in the model.
+ */
+public class StandardRelativeValueHistoryProviderAdapterFactory extends
+		StandardAdapterFactory implements
+		RelativeValueHistoryProviderAdapterFactory {
+
+	/**
+	 * This keeps track of the root adapter factory that delegates to this
+	 * adapter factory.
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This factory is used to create item providers for the adapted classes.
+	 * The item providers are used as property sources to get the properties
+	 * that can have relative values.
+	 */
+	private static StandardItemProviderAdapterFactory itemProviderFactory;
+
+	private HistoryProviderAdapter historyProviderAdapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public StandardRelativeValueHistoryProviderAdapterFactory() {
+		super();
+		RelativeValueHistoryProviderAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	} // StandardRelativeHistoryValueProviderAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createAdapter(org.eclipse.emf.common.notify.Notifier)
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		Adapter retValue = null;
+
+		// Before we create our adapter, we try to adapt the target to a
+		// HistoryProvider. If we can't then we're done and return null to
+		// indicate that this factory can't create the adapter. If not, then we
+		// remember the history provider and let the super class's method do the
+		// switch on the type.
+		historyProviderAdapter = (HistoryProviderAdapter) HistoryProviderAdapterFactory.INSTANCE
+				.adapt(target, HistoryProvider.class);
+
+		// Did we succeed?
+		if (historyProviderAdapter != null) {
+			// Yes
+			retValue = super.createAdapter(target);
+		} // if
+
+		return retValue;
+	} // createAdapter
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelLabelAdapter() {
+		return new DiseaseModelLabelRelativeValueHistoryProvider(
+				historyProviderAdapter);
+	} // createDiseaseModelLabelAdapter
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void addListener(final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	} // addListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void fireNotifyChanged(final Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	} // fireNotifyChanged
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void removeListener(
+			final INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	} // removeListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory
+				.getRootAdapterFactory();
+	} // getRootAdapterFactory
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#setParentAdapterFactory(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(
+			final ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	} // setParentAdapterFactory
+
+	/**
+	 * @see org.eclipse.emf.common.notify.AdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == RelativeValueHistoryProvider.class
+				|| super.isFactoryForType(type);
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory.
+	 * 
+	 * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	} // dispose
+
+	/**
+	 * @return the instance of the Relative Value Provider Adapter Factory
+	 */
+	private static RelativeValueProviderAdapterFactory getRelativeValueProviderAdapterFactory() {
+		return RelativeValueProviderAdapterFactory.INSTANCE;
+	} // getRelativeValueProviderAdapterFactory
+
+	/**
+	 * This class is a Relative Value History Provider for DiseaseModelLabel
+	 * instances. It provides a collection of the properties that can have
+	 * relative values and will compute the value between 0.0 and 1.0 for any of
+	 * those properties. It will also provide historic relative values.
+	 * 
+	 * @see DiseaseModelLabelValueRelativeValueHistoryProvider
+	 */
+	public static class DiseaseModelLabelRelativeValueHistoryProvider extends
+			RelativeValueHistoryProviderAdapter implements
+			RelativeValueHistoryProvider {
+
+		private HistoryProviderAdapter historyProviderAdapter = null;
+
+		/**
+		 * @param historyProviderAdapter
+		 */
+		public DiseaseModelLabelRelativeValueHistoryProvider(
+				final HistoryProviderAdapter historyProviderAdapter) {
+			this.historyProviderAdapter = historyProviderAdapter;
+			historyProviderAdapter.addExtensionListener(this);
+		} // DiseaseModelLabelRelativeValueHistoryProvider
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getProperties()
+		 */
+		@Override
+		public List<IItemPropertyDescriptor> getProperties() {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(dml.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getProperties();
+		} // getProperties
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature)
+		 */
+		@Override
+		public double getRelativeValue(final EStructuralFeature feature) {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(dml.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getRelativeValue(feature);
+		} // getRelativeValue
+
+		/**
+		 * This method returns the denominator or scale used to convert to relative
+		 * values in the range 0-1. For example, in an Epidemic Compartment model
+		 * the state values are normalized by population.
+		 * It is required whenever we need to switch between relative and absolute values
+		 * or can be used to create a label showing the maximum scale for any relative value.
+		 * @return the denominator or scale used to normalize the relative value
+		 */
+		public double getDenominator(final EStructuralFeature feature) {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			DiseaseModelLabelValue dmlv = (DiseaseModelLabelValue)dml.getCurrentValue();
+			final double populationCount = dmlv.getPopulationCount();
+			return dmlv.getPopulationCount();
+		}
+		
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getRelativeValue(org.eclipse.emf.edit.provider.ItemPropertyDescriptor,
+		 *      org.eclipse.stem.core.model.STEMTime)
+		 */
+		@Override
+		public double getRelativeValue(final ItemPropertyDescriptor property,
+				final STEMTime time) {
+			return getRelativeValue((EStructuralFeature) property
+					.getFeature(null), time);
+		}
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature,
+		 *      org.eclipse.stem.core.model.STEMTime)
+		 */
+		@Override
+		public double getRelativeValue(final EStructuralFeature feature,
+				final STEMTime time) {
+			historyProviderAdapter.setTarget(getTarget());
+			final DiseaseModelLabel dml = (DiseaseModelLabel) historyProviderAdapter
+					.getInstance(time);
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dml, RelativeValueProvider.class);
+			return rvp.getRelativeValue(feature);
+		} // getRelativeValue
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider#getAllHistoricRelativeValues(org.eclipse.emf.edit.provider.ItemPropertyDescriptor)
+		 */
+		@Override
+		public double[] getAllHistoricRelativeValues(
+				final ItemPropertyDescriptor property) {
+			return getAllHistoricRelativeValues((EStructuralFeature) property
+					.getFeature(null));
+		}
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter#getAllHistoricRelativeValues(org.eclipse.emf.ecore.EStructuralFeature)
+		 */
+		@Override
+		public double[] getAllHistoricRelativeValues(
+				final EStructuralFeature feature) {
+			historyProviderAdapter.setTarget(getTarget());
+			final Identifiable[] historicValues = historyProviderAdapter
+					.getAllHistoricInstances();
+			final double[] retValue = new double[historicValues.length];
+
+			int i = 0;
+			for (Identifiable identifiable : historicValues) {
+				final DiseaseModelLabel dml = (DiseaseModelLabel) identifiable;
+				final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+						.adapt(dml, RelativeValueProvider.class);
+				retValue[i++] = rvp.getRelativeValue(feature);
+			} // for each Identifiable
+
+			return retValue;
+		} // getAllHistoricRelativeValues
+		
+
+		/**
+		 * 
+		 * @param property
+		 * @param timeRange
+		 * @return
+		 */
+		public double[] getHistoricInstances(final ItemPropertyDescriptor property, STEMTime[] timeRange) {
+			double[] allValues = getAllHistoricRelativeValues(property);
+			double[] retVal = new double[timeRange.length];
+			System.arraycopy(allValues, 0, retVal, 0, timeRange.length);
+			return retVal;
+		}
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter#getEarliestTimeValue()
+		 */
+		@Override
+		public STEMTime getEarliestTimeValue() {
+			historyProviderAdapter.setTarget(getTarget());
+			return historyProviderAdapter.getEarliestTimeValue();
+		} // getEarliestTimeValue
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter#getAllHistoricTimeValues()
+		 */
+		@Override
+		public STEMTime[] getAllHistoricTimeValues() {
+			historyProviderAdapter.setTarget(getTarget());
+			return historyProviderAdapter.getAllHistoricTimeValues();
+		} // getAllHistoricTimeValues
+
+	} // DiseaseModelLabelRelativeValueHistoryProvider
+
+} // StandardRelativeValueHistoryProviderAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueProviderAdapterFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueProviderAdapterFactory.java
new file mode 100644
index 0000000..77930f9
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardRelativeValueProviderAdapterFactory.java
@@ -0,0 +1,330 @@
+// StandardRelativeValueProviderAdapterFactory.java
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.ui.provider.PropertySource;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+
+/**
+ * This class is a factory for this model that creates
+ * {@link RelativeValueProvider}'s for classes in the model.
+ */
+public class StandardRelativeValueProviderAdapterFactory extends
+		StandardAdapterFactory implements RelativeValueProviderAdapterFactory {
+
+	/**
+	 * This keeps track of the root adapter factory that delegates to this
+	 * adapter factory.
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This factory is used to create item providers for the adapted classes.
+	 * The item providers are used as property sources to get the properties
+	 * that can have relative values.
+	 */
+	private static StandardItemProviderAdapterFactory itemProviderFactory;
+
+	/**
+	 * Constructor
+	 */
+	public StandardRelativeValueProviderAdapterFactory() {
+		super();
+		RelativeValueProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	} // StandardRelativeValueProviderAdapterFactory
+
+	/**
+	 * This method is called by the {@link StandardSwitch} instance in the
+	 * parent {@link StandardAdapterFactory} for all cases for classes derived
+	 * from {@link DiseaseModelLabel} (e.g., {@link SILabel}, {@link SIRLabel},
+	 * {@link SEIRLabel}).
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelLabelAdapter() {
+		// It seems that you can't have singleton adapters that provide
+		// behavioral extensions without explicitly setting the target
+		// each time it is adapted
+		return new DiseaseModelLabelRelativeValueProvider();
+	} // createDiseaseModelLabelAdapter
+
+	/**
+	 * This method is called by the {@link StandardSwitch} instance in the
+	 * parent {@link StandardAdapterFactory} for all cases for classes derived
+	 * from {@link DiseaseModelLabelValue} (e.g., {@link SILabelValue},
+	 * {@link SIRLabelValue}, {@link SEIRLabelValue}).
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelValueAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelLabelValueAdapter() {
+		// It seems that you can't have singleton adapters that provide
+		// behavioral extensions without explicitly setting the target
+		// each time it is adapted
+		return new DiseaseModelLabelValueRelativeValueProvider();
+	} // createDiseaseModelLabelValueAdapter
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	} // addListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	} // fireNotifyChanged
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	} // removeListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory
+				.getRootAdapterFactory();
+	} // getRootAdapterFactory
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#setParentAdapterFactory(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(
+			ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	} // setParentAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == RelativeValueProvider.class
+				|| super.isFactoryForType(type);
+	} // isFactoryForType
+
+	/**
+	 * This disposes all of the item providers created by this factory.
+	 * 
+	 * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	} // dispose
+
+	/**
+	 * @return the instance of the Relative Value Provider Adapter Factory
+	 */
+	private static RelativeValueProviderAdapterFactory getRelativeValueProviderAdapterFactory() {
+		return RelativeValueProviderAdapterFactory.INSTANCE;
+	} // getRelativeValueProviderAdapterFactory
+
+	/**
+	 * @return the instance of the Standard Item Provider factory.
+	 */
+	private static StandardItemProviderAdapterFactory getItemProviderFactory() {
+		if (itemProviderFactory == null) {
+			itemProviderFactory = new StandardItemProviderAdapterFactory();
+		}
+		return itemProviderFactory;
+	} // getItemProviderFactory
+
+	/**
+	 * This class is a Relative Value Provider for DiseaseModelLabel instances.
+	 * It provides a collection of the properties that can have relative values
+	 * and will compute the value between 0.0 and 1.0 for any of those
+	 * properties.
+	 * 
+	 * @see DiseaseModelLabelValueRelativeValueProvider
+	 */
+	public static class DiseaseModelLabelRelativeValueProvider extends
+			RelativeValueProviderAdapter implements RelativeValueProvider {
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getProperties()
+		 */
+		@Override
+		public List<IItemPropertyDescriptor> getProperties() {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(dml.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getProperties();
+		} // getProperties
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature)
+		 */
+		@Override
+		public double getRelativeValue(EStructuralFeature feature) {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(dml.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getRelativeValue(feature);
+		} // getRelativeValue
+		
+		/**
+		 * this helper method returns the absolute total population.
+		 * It is required whenever we need to switch between relative and absolute values
+		 * @return the total current population count (absolute)
+		 */
+		public double getDenominator(final EStructuralFeature feature) {
+			final DiseaseModelLabel dml = (DiseaseModelLabel) getTarget();
+			DiseaseModelLabelValue dmlv = (StandardDiseaseModelLabelValue)dml.getCurrentValue();
+			final double populationCount = dmlv.getPopulationCount();
+			return dmlv.getPopulationCount();
+		}
+		
+		
+		
+
+	} // DiseaseModelLabelRelativeValueProvider
+
+	/**
+	 * This class is a Relative Value Provider for DiseaseModelLabelValue
+	 * instances. It provides a collection of the properties that can have
+	 * relative values and will compute the value between 0.0 and 1.0 for any of
+	 * those properties.
+	 * <p>
+	 * The {@link DiseaseModelLabelValueRelativeValueProvider} instance that we
+	 * create here filters out the properties that are not relative and can
+	 * reflectively compute the relative value, with respect to the population
+	 * count for the disease model label value, for the remaining properties. If
+	 * a new sub-class of {@link DiseaseModelLabelValue} is introduced that has
+	 * other non-relative properties, they would not be filtered out by this
+	 * {@link RelativeValueProvider} so a corresponding sub-class of
+	 * {@link DiseaseModelLabelValueRelativeValueProvider} would need to be
+	 * defined that implemented {@link RelativeValueProvider#getProperties()}
+	 * such that it first called its super-class
+	 * <code>super.getProperties</code> (i.e.,
+	 * {@link DiseaseModelLabelValueRelativeValueProvider#getProperties()}) to
+	 * get the list of filtered properties. Then, it would need to remove any
+	 * non-relative properties that it knows about from that list.
+	 * <p>
+	 * There would probably be no need for the new class to override
+	 * {@link DiseaseModelLabelValueRelativeValueProvider#getRelativeValue(EStructuralFeature)}
+	 * as the relative values are computed such that the new property values are
+	 * obtained reflexively, so they should be found. This assumes that the new
+	 * values are relative to the population count (i.e.,
+	 * {@link DiseaseModelLabelValue#getPopulationCount()}). If they're
+	 * relative to some other value then an override would be necessary.
+	 */
+	public static class DiseaseModelLabelValueRelativeValueProvider extends
+			RelativeValueProviderAdapter implements RelativeValueProvider {
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getProperties()
+		 */
+		@Override
+		public List<IItemPropertyDescriptor> getProperties() {
+			final List<IItemPropertyDescriptor> retValue = new ArrayList<IItemPropertyDescriptor>();
+			final StandardItemProviderAdapterFactory itemProviderFactory = getItemProviderFactory();
+			final DiseaseModelLabelValue dmlv = (DiseaseModelLabelValue) getTarget();
+			final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+					.adapt(dmlv, PropertySource.class);
+			final List<IItemPropertyDescriptor> properties = propertySource
+					.getPropertyDescriptors(null);
+			// The list of property descriptors includes ones that do not have
+			// relative values. We filter those out here and return the rest.
+			for (IItemPropertyDescriptor descriptor : properties) {
+				// Does this property have a relative value?
+				final EStructuralFeature feature = (EStructuralFeature) descriptor
+						.getFeature(null);
+				final int featureId = feature.getFeatureID();
+				
+				
+				// new
+				if (!(featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS 
+						|| featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT)) {
+					// Yes
+					retValue.add(descriptor);
+				} // if has relative value
+				// Old
+				/*
+				if (!(featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__BIRTHS
+						|| featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__DEATHS
+						|| featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS || featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT)) {
+					// Yes
+					retValue.add(descriptor);
+				} // if has relative value
+				*/
+				
+			} // for
+			return retValue;
+		} // getProperties
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider#getRelativeValue(EStructuralFeature)
+		 */
+		public double getRelativeValue(final EStructuralFeature feature) {
+			final DiseaseModelLabelValue dmlv = (DiseaseModelLabelValue) getTarget();
+			final double stateCount = ((Double) dmlv.eGet(feature))
+					.doubleValue();
+			final double populationCount = dmlv.getPopulationCount();
+			final double retValue = populationCount == 0.0 ? 0.0
+					: (stateCount / populationCount);
+			return retValue;
+		} // getRelativeValue
+		
+		/**
+		 * This method returns the denominator or scale used to convert to relative
+		 * values in the range 0-1. For example, in an Epidemic Compartment model
+		 * the state values are normalized by population.
+		 * It is required whenever we need to switch between relative and absolute values
+		 * or can be used to create a label showing the maximum scale for any relative value.
+		 * @return the denominator or scale used to normalize the relative value
+		 */
+		public double getDenominator(final EStructuralFeature feature) {
+			final DiseaseModelLabelValue dmlv = (DiseaseModelLabelValue) getTarget();
+			final double populationCount = dmlv.getPopulationCount();
+			return dmlv.getPopulationCount();
+		}
+		
+	} // DiseaseModelLabelValueRelativeValueProvider
+} // StandardRelativeValueProviderAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardStochasticDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardStochasticDiseaseModelItemProvider.java
new file mode 100644
index 0000000..743fea3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StandardStochasticDiseaseModelItemProvider.java
@@ -0,0 +1,142 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardStochasticDiseaseModelItemProvider
+	extends StochasticDiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardStochasticDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Gain feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addGainPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardStochasticDiseaseModel_gain_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardStochasticDiseaseModel_gain_feature", "_UI_StandardStochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StandardStochasticDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StandardStochasticDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StandardStochasticDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StandardStochasticDiseaseModel.class)) {
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticDiseaseModelItemProvider.java
new file mode 100644
index 0000000..3ca152e
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticDiseaseModelItemProvider.java
@@ -0,0 +1,186 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticDiseaseModelItemProvider
+	extends DiseaseModelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			// addRandomGeneratorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			addRandomGeneratorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Seed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_seed_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_seed_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__SEED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Random Generator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRandomGeneratorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_randomGenerator_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_randomGenerator_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StochasticDiseaseModel.class)) {
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSEIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSEIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..9cee5f8
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSEIRDiseaseModelItemProvider.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticPoissonSEIRDiseaseModelItemProvider
+	extends SEIRItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSEIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns This returns disease.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/disease")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticPoissonSEIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticPoissonSEIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticPoissonSEIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIDiseaseModelItemProvider.java
new file mode 100644
index 0000000..28aeae3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIDiseaseModelItemProvider.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticPoissonSIDiseaseModelItemProvider
+	extends SIItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSIDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns This returns disease.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/disease")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticPoissonSIDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticPoissonSIDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticPoissonSIDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..cfedf4f
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticPoissonSIRDiseaseModelItemProvider.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticPoissonSIRDiseaseModelItemProvider
+	extends SIRItemProvider
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticPoissonSIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns This returns disease.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/custom16/disease")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticPoissonSIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticPoissonSIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticPoissonSIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSEIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSEIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..a9137c3
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSEIRDiseaseModelItemProvider.java
@@ -0,0 +1,218 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticSEIRDiseaseModelItemProvider extends SEIRItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSEIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			//addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Seed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_seed_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_seed_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__SEED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Random Generator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRandomGeneratorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_randomGenerator_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_randomGenerator_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Gain feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addGainPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardStochasticDiseaseModel_gain_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardStochasticDiseaseModel_gain_feature", "_UI_StandardStochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticSEIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticSEIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticSEIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StochasticSEIRDiseaseModel.class)) {
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__SEED:
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__RANDOM_GENERATOR:
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL__GAIN:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIDiseaseModelItemProvider.java
new file mode 100644
index 0000000..040e29c
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIDiseaseModelItemProvider.java
@@ -0,0 +1,218 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticSIDiseaseModelItemProvider extends SIItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			//addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Seed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_seed_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_seed_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__SEED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Random Generator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRandomGeneratorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_randomGenerator_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_randomGenerator_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Gain feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addGainPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardStochasticDiseaseModel_gain_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardStochasticDiseaseModel_gain_feature", "_UI_StandardStochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticSIDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticSIDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticSIDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StochasticSIDiseaseModel.class)) {
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__SEED:
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__RANDOM_GENERATOR:
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL__GAIN:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIRDiseaseModelItemProvider.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIRDiseaseModelItemProvider.java
new file mode 100644
index 0000000..3638af0
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/provider/StochasticSIRDiseaseModelItemProvider.java
@@ -0,0 +1,218 @@
+package org.eclipse.stem.diseasemodels.standard.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+//import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel} object.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
+public class StochasticSIRDiseaseModelItemProvider extends SIRItemProvider
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider,
+		ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param adapterFactory
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIRDiseaseModelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			//addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List<IItemPropertyDescriptor> getPropertyDescriptorsGen(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addSeedPropertyDescriptor(object);
+			addRandomGeneratorPropertyDescriptor(object);
+			addGainPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+	
+	/**
+	 * This adds a property descriptor for the Seed feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSeedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_seed_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_seed_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__SEED,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Random Generator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addRandomGeneratorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StochasticDiseaseModel_randomGenerator_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticDiseaseModel_randomGenerator_feature", "_UI_StochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STOCHASTIC_DISEASE_MODEL__RANDOM_GENERATOR,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Gain feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addGainPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_StandardStochasticDiseaseModel_gain_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardStochasticDiseaseModel_gain_feature", "_UI_StandardStochasticDiseaseModel_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 StandardPackage.Literals.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param object
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((StochasticSIRDiseaseModel)object).getDiseaseName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StochasticSIRDiseaseModel_type") : //$NON-NLS-1$
+			getString("_UI_StochasticSIRDiseaseModel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param notification
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(StochasticSIRDiseaseModel.class)) {
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__SEED:
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__RANDOM_GENERATOR:
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL__GAIN:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardAdapterFactory.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardAdapterFactory.java
new file mode 100644
index 0000000..791e071
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardAdapterFactory.java
@@ -0,0 +1,1058 @@
+package org.eclipse.stem.diseasemodels.standard.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import java.util.Map;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.standard.*;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc --> The <b>Adapter Factory</b> for the model. It
+ * provides an adapter <code>createXXX</code> method for each class of the
+ * model. <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage
+ * @generated
+ */
+public class StandardAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StandardPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public StandardAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = StandardPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc --> This implementation returns <code>true</code>
+	 * if the object is either the model's package or is an instance object of
+	 * the model.
+	 * 
+	 * @param object
+	 * 
+	 * 
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected StandardSwitch<Adapter> modelSwitch =
+		new StandardSwitch<Adapter>() {
+			@Override
+			public Adapter caseDeterministicSEIRDiseaseModel(DeterministicSEIRDiseaseModel object) {
+				return createDeterministicSEIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseDeterministicSIDiseaseModel(DeterministicSIDiseaseModel object) {
+				return createDeterministicSIDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseDeterministicSIRDiseaseModel(DeterministicSIRDiseaseModel object) {
+				return createDeterministicSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModel(DiseaseModel object) {
+				return createDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModelLabel(DiseaseModelLabel object) {
+				return createDiseaseModelLabelAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModelLabelValue(DiseaseModelLabelValue object) {
+				return createDiseaseModelLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseDiseaseModelState(DiseaseModelState object) {
+				return createDiseaseModelStateAdapter();
+			}
+			@Override
+			public Adapter caseInfector(Infector object) {
+				return createInfectorAdapter();
+			}
+			@Override
+			public Adapter caseSEIR(SEIR object) {
+				return createSEIRAdapter();
+			}
+			@Override
+			public Adapter caseSEIRLabel(SEIRLabel object) {
+				return createSEIRLabelAdapter();
+			}
+			@Override
+			public Adapter caseSEIRLabelValue(SEIRLabelValue object) {
+				return createSEIRLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseSI(SI object) {
+				return createSIAdapter();
+			}
+			@Override
+			public Adapter caseSIDiseaseModelState(SIDiseaseModelState object) {
+				return createSIDiseaseModelStateAdapter();
+			}
+			@Override
+			public Adapter caseSIInfector(SIInfector object) {
+				return createSIInfectorAdapter();
+			}
+			@Override
+			public Adapter caseSILabel(SILabel object) {
+				return createSILabelAdapter();
+			}
+			@Override
+			public Adapter caseSILabelValue(SILabelValue object) {
+				return createSILabelValueAdapter();
+			}
+			@Override
+			public Adapter caseSIR(SIR object) {
+				return createSIRAdapter();
+			}
+			@Override
+			public Adapter caseSIRLabel(SIRLabel object) {
+				return createSIRLabelAdapter();
+			}
+			@Override
+			public Adapter caseSIRLabelValue(SIRLabelValue object) {
+				return createSIRLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModel(StandardDiseaseModel object) {
+				return createStandardDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModelLabel(StandardDiseaseModelLabel object) {
+				return createStandardDiseaseModelLabelAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModelLabelValue(StandardDiseaseModelLabelValue object) {
+				return createStandardDiseaseModelLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseStandardDiseaseModelState(StandardDiseaseModelState object) {
+				return createStandardDiseaseModelStateAdapter();
+			}
+			@Override
+			public Adapter caseStandardInfector(StandardInfector object) {
+				return createStandardInfectorAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSEIRDiseaseModel(StochasticSEIRDiseaseModel object) {
+				return createStochasticSEIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSIDiseaseModel(StochasticSIDiseaseModel object) {
+				return createStochasticSIDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+				return createStochasticSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseIntegrationLabel(IntegrationLabel object) {
+				return createIntegrationLabelAdapter();
+			}
+			@Override
+			public Adapter caseIntegrationLabelValue(IntegrationLabelValue object) {
+				return createIntegrationLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseIntegrationDecorator(IntegrationDecorator object) {
+				return createIntegrationDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseAggregatingSIDiseaseModel(AggregatingSIDiseaseModel object) {
+				return createAggregatingSIDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseAggregatingDiseaseModelState(AggregatingDiseaseModelState object) {
+				return createAggregatingDiseaseModelStateAdapter();
+			}
+			@Override
+			public Adapter caseAggregatingSEIRDiseaseModel(AggregatingSEIRDiseaseModel object) {
+				return createAggregatingSEIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseAggregatingSIRDiseaseModel(AggregatingSIRDiseaseModel object) {
+				return createAggregatingSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+				return createStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+				return createStandardStochasticDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseSIRInoculator(SIRInoculator object) {
+				return createSIRInoculatorAdapter();
+			}
+			@Override
+			public Adapter caseStochasticPoissonSIDiseaseModel(StochasticPoissonSIDiseaseModel object) {
+				return createStochasticPoissonSIDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticPoissonSIRDiseaseModel(StochasticPoissonSIRDiseaseModel object) {
+				return createStochasticPoissonSIRDiseaseModelAdapter();
+			}
+			@Override
+			public Adapter caseStochasticPoissonSEIRDiseaseModel(StochasticPoissonSEIRDiseaseModel object) {
+				return createStochasticPoissonSEIRDiseaseModelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicLabel(DynamicLabel object) {
+				return createDynamicLabelAdapter();
+			}
+			@Override
+			public Adapter caseNodeLabel(NodeLabel object) {
+				return createNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicNodeLabel(DynamicNodeLabel object) {
+				return createDynamicNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseGraph_SanityChecker(SanityChecker object) {
+				return createGraph_SanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SEIR <em>SEIR</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIR
+	 * @generated
+	 */
+	public Adapter createSEIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel <em>SEIR Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel
+	 * @generated
+	 */
+	public Adapter createSEIRLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue <em>SEIR Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabelValue
+	 * @generated
+	 */
+	public Adapter createSEIRLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIR <em>SIR</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR
+	 * @generated
+	 */
+	public Adapter createSIRAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel <em>SIR Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel
+	 * @generated
+	 */
+	public Adapter createSIRLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue <em>SIR Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabelValue
+	 * @generated
+	 */
+	public Adapter createSIRLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel <em>Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel <em>Disease Model Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel
+	 * @generated
+	 */
+	public Adapter createDiseaseModelLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel <em>Stochastic SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSEIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardInfector <em>Infector</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardInfector
+	 * @generated
+	 */
+	public Adapter createStandardInfectorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel <em>Deterministic SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createDeterministicSEIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue <em>Disease Model Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue
+	 * @generated
+	 */
+	public Adapter createDiseaseModelLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue <em>Disease Model Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel <em>Disease Model Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SI <em>SI</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SI
+	 * @generated
+	 */
+	public Adapter createSIAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SILabel <em>SI Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel
+	 * @generated
+	 */
+	public Adapter createSILabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SILabelValue <em>SI Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabelValue
+	 * @generated
+	 */
+	public Adapter createSILabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.Infector <em>Infector</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.Infector
+	 * @generated
+	 */
+	public Adapter createInfectorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIInfector <em>SI Infector</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIInfector
+	 * @generated
+	 */
+	public Adapter createSIInfectorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel <em>Deterministic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createDeterministicSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel <em>Deterministic SI Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel
+	 * @generated
+	 */
+	public Adapter createDeterministicSIDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel <em>Stochastic SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel <em>Stochastic SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticSIDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelState <em>Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelState
+	 * @generated
+	 */
+	public Adapter createDiseaseModelStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState <em>SI Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState
+	 * @generated
+	 */
+	public Adapter createSIDiseaseModelStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState <em>Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState
+	 * @generated
+	 */
+	public Adapter createStandardDiseaseModelStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.IntegrationLabel
+	 * @generated
+	 */
+	public Adapter createIntegrationLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue
+	 * @generated
+	 */
+	public Adapter createIntegrationLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.IntegrationDecorator
+	 * @generated
+	 */
+	public Adapter createIntegrationDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel <em>Aggregating SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel
+	 * @generated
+	 */
+	public Adapter createAggregatingSIDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState <em>Aggregating Disease Model State</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState
+	 * @generated
+	 */
+	public Adapter createAggregatingDiseaseModelStateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel <em>Aggregating SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createAggregatingSEIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel <em>Aggregating SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createAggregatingSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel <em>Stochastic Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStandardStochasticDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.SIRInoculator <em>SIR Inoculator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRInoculator
+	 * @generated
+	 */
+	public Adapter createSIRInoculatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel <em>Stochastic Poisson SI Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticPoissonSIDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel <em>Stochastic Poisson SIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticPoissonSIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel <em>Stochastic Poisson SEIR Disease Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.diseasemodels.standard.StochasticPoissonSEIRDiseaseModel
+	 * @generated
+	 */
+	public Adapter createStochasticPoissonSEIRDiseaseModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	public Adapter createDynamicLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	public Adapter createNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicNodeLabel <em>Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicNodeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createGraph_SanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc --> This default implementation returns null so that
+	 * we can easily ignore cases; it's useful to ignore a case when inheritance
+	 * will catch all the cases anyway. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc --> This
+	 * default implementation returns null. <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} // StandardAdapterFactory
diff --git a/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardSwitch.java b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardSwitch.java
new file mode 100644
index 0000000..7cd9945
--- /dev/null
+++ b/org.eclipse.stem.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/util/StandardSwitch.java
@@ -0,0 +1,1392 @@
+package org.eclipse.stem.diseasemodels.standard.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+//import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.diseasemodels.standard.*;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+
+/**
+ * <!-- begin-user-doc --> The <b>Switch</b> for the model's inheritance
+ * hierarchy. It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object and proceeding up the
+ * inheritance hierarchy until a non-null result is returned, which is the
+ * result of the switch. <!-- end-user-doc -->
+ * @see org.eclipse.stem.diseasemodels.standard.StandardPackage
+ * @generated
+ */
+public class StandardSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StandardPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public StandardSwitch() {
+		if (modelPackage == null) {
+			modelPackage = StandardPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param theEObject
+	 * 
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case StandardPackage.DETERMINISTIC_SEIR_DISEASE_MODEL: {
+				DeterministicSEIRDiseaseModel deterministicSEIRDiseaseModel = (DeterministicSEIRDiseaseModel)theEObject;
+				T1 result = caseDeterministicSEIRDiseaseModel(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseSEIR(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseSIR(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseSI(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseModifiable(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseDecorator(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(deterministicSEIRDiseaseModel);
+				if (result == null) result = caseComparable(deterministicSEIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DETERMINISTIC_SI_DISEASE_MODEL: {
+				DeterministicSIDiseaseModel deterministicSIDiseaseModel = (DeterministicSIDiseaseModel)theEObject;
+				T1 result = caseDeterministicSIDiseaseModel(deterministicSIDiseaseModel);
+				if (result == null) result = caseSI(deterministicSIDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(deterministicSIDiseaseModel);
+				if (result == null) result = caseDiseaseModel(deterministicSIDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(deterministicSIDiseaseModel);
+				if (result == null) result = caseNodeDecorator(deterministicSIDiseaseModel);
+				if (result == null) result = caseSanityChecker(deterministicSIDiseaseModel);
+				if (result == null) result = caseModifiable(deterministicSIDiseaseModel);
+				if (result == null) result = caseDecorator(deterministicSIDiseaseModel);
+				if (result == null) result = caseIdentifiable(deterministicSIDiseaseModel);
+				if (result == null) result = caseComparable(deterministicSIDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DETERMINISTIC_SIR_DISEASE_MODEL: {
+				DeterministicSIRDiseaseModel deterministicSIRDiseaseModel = (DeterministicSIRDiseaseModel)theEObject;
+				T1 result = caseDeterministicSIRDiseaseModel(deterministicSIRDiseaseModel);
+				if (result == null) result = caseSIR(deterministicSIRDiseaseModel);
+				if (result == null) result = caseSI(deterministicSIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(deterministicSIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(deterministicSIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(deterministicSIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(deterministicSIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(deterministicSIRDiseaseModel);
+				if (result == null) result = caseModifiable(deterministicSIRDiseaseModel);
+				if (result == null) result = caseDecorator(deterministicSIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(deterministicSIRDiseaseModel);
+				if (result == null) result = caseComparable(deterministicSIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DISEASE_MODEL: {
+				DiseaseModel diseaseModel = (DiseaseModel)theEObject;
+				T1 result = caseDiseaseModel(diseaseModel);
+				if (result == null) result = caseNodeDecorator(diseaseModel);
+				if (result == null) result = caseSanityChecker(diseaseModel);
+				if (result == null) result = caseModifiable(diseaseModel);
+				if (result == null) result = caseDecorator(diseaseModel);
+				if (result == null) result = caseIdentifiable(diseaseModel);
+				if (result == null) result = caseComparable(diseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DISEASE_MODEL_LABEL: {
+				DiseaseModelLabel diseaseModelLabel = (DiseaseModelLabel)theEObject;
+				T1 result = caseDiseaseModelLabel(diseaseModelLabel);
+				if (result == null) result = caseDynamicNodeLabel(diseaseModelLabel);
+				if (result == null) result = caseDynamicLabel(diseaseModelLabel);
+				if (result == null) result = caseNodeLabel(diseaseModelLabel);
+				if (result == null) result = caseLabel(diseaseModelLabel);
+				if (result == null) result = caseIdentifiable(diseaseModelLabel);
+				if (result == null) result = caseComparable(diseaseModelLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DISEASE_MODEL_LABEL_VALUE: {
+				DiseaseModelLabelValue diseaseModelLabelValue = (DiseaseModelLabelValue)theEObject;
+				T1 result = caseDiseaseModelLabelValue(diseaseModelLabelValue);
+				if (result == null) result = caseLabelValue(diseaseModelLabelValue);
+				if (result == null) result = caseIntegrationLabelValue(diseaseModelLabelValue);
+				if (result == null) result = caseGraph_SanityChecker(diseaseModelLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.DISEASE_MODEL_STATE: {
+				DiseaseModelState diseaseModelState = (DiseaseModelState)theEObject;
+				T1 result = caseDiseaseModelState(diseaseModelState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.INFECTOR: {
+				Infector infector = (Infector)theEObject;
+				T1 result = caseInfector(infector);
+				if (result == null) result = caseNodeDecorator(infector);
+				if (result == null) result = caseModifiable(infector);
+				if (result == null) result = caseDecorator(infector);
+				if (result == null) result = caseIdentifiable(infector);
+				if (result == null) result = caseComparable(infector);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SEIR: {
+				SEIR seir = (SEIR)theEObject;
+				T1 result = caseSEIR(seir);
+				if (result == null) result = caseSIR(seir);
+				if (result == null) result = caseSI(seir);
+				if (result == null) result = caseStandardDiseaseModel(seir);
+				if (result == null) result = caseDiseaseModel(seir);
+				if (result == null) result = caseIntegrationDecorator(seir);
+				if (result == null) result = caseNodeDecorator(seir);
+				if (result == null) result = caseSanityChecker(seir);
+				if (result == null) result = caseModifiable(seir);
+				if (result == null) result = caseDecorator(seir);
+				if (result == null) result = caseIdentifiable(seir);
+				if (result == null) result = caseComparable(seir);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SEIR_LABEL: {
+				SEIRLabel seirLabel = (SEIRLabel)theEObject;
+				T1 result = caseSEIRLabel(seirLabel);
+				if (result == null) result = caseStandardDiseaseModelLabel(seirLabel);
+				if (result == null) result = caseDiseaseModelLabel(seirLabel);
+				if (result == null) result = caseIntegrationLabel(seirLabel);
+				if (result == null) result = caseDynamicNodeLabel(seirLabel);
+				if (result == null) result = caseDynamicLabel(seirLabel);
+				if (result == null) result = caseNodeLabel(seirLabel);
+				if (result == null) result = caseLabel(seirLabel);
+				if (result == null) result = caseIdentifiable(seirLabel);
+				if (result == null) result = caseComparable(seirLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SEIR_LABEL_VALUE: {
+				SEIRLabelValue seirLabelValue = (SEIRLabelValue)theEObject;
+				T1 result = caseSEIRLabelValue(seirLabelValue);
+				if (result == null) result = caseSIRLabelValue(seirLabelValue);
+				if (result == null) result = caseSILabelValue(seirLabelValue);
+				if (result == null) result = caseStandardDiseaseModelLabelValue(seirLabelValue);
+				if (result == null) result = caseDiseaseModelLabelValue(seirLabelValue);
+				if (result == null) result = caseLabelValue(seirLabelValue);
+				if (result == null) result = caseIntegrationLabelValue(seirLabelValue);
+				if (result == null) result = caseGraph_SanityChecker(seirLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SI: {
+				SI si = (SI)theEObject;
+				T1 result = caseSI(si);
+				if (result == null) result = caseStandardDiseaseModel(si);
+				if (result == null) result = caseDiseaseModel(si);
+				if (result == null) result = caseIntegrationDecorator(si);
+				if (result == null) result = caseNodeDecorator(si);
+				if (result == null) result = caseSanityChecker(si);
+				if (result == null) result = caseModifiable(si);
+				if (result == null) result = caseDecorator(si);
+				if (result == null) result = caseIdentifiable(si);
+				if (result == null) result = caseComparable(si);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SI_DISEASE_MODEL_STATE: {
+				SIDiseaseModelState siDiseaseModelState = (SIDiseaseModelState)theEObject;
+				T1 result = caseSIDiseaseModelState(siDiseaseModelState);
+				if (result == null) result = caseStandardDiseaseModelState(siDiseaseModelState);
+				if (result == null) result = caseDiseaseModelState(siDiseaseModelState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SI_INFECTOR: {
+				SIInfector siInfector = (SIInfector)theEObject;
+				T1 result = caseSIInfector(siInfector);
+				if (result == null) result = caseStandardInfector(siInfector);
+				if (result == null) result = caseInfector(siInfector);
+				if (result == null) result = caseNodeDecorator(siInfector);
+				if (result == null) result = caseModifiable(siInfector);
+				if (result == null) result = caseDecorator(siInfector);
+				if (result == null) result = caseIdentifiable(siInfector);
+				if (result == null) result = caseComparable(siInfector);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SI_LABEL: {
+				SILabel siLabel = (SILabel)theEObject;
+				T1 result = caseSILabel(siLabel);
+				if (result == null) result = caseStandardDiseaseModelLabel(siLabel);
+				if (result == null) result = caseDiseaseModelLabel(siLabel);
+				if (result == null) result = caseIntegrationLabel(siLabel);
+				if (result == null) result = caseDynamicNodeLabel(siLabel);
+				if (result == null) result = caseDynamicLabel(siLabel);
+				if (result == null) result = caseNodeLabel(siLabel);
+				if (result == null) result = caseLabel(siLabel);
+				if (result == null) result = caseIdentifiable(siLabel);
+				if (result == null) result = caseComparable(siLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SI_LABEL_VALUE: {
+				SILabelValue siLabelValue = (SILabelValue)theEObject;
+				T1 result = caseSILabelValue(siLabelValue);
+				if (result == null) result = caseStandardDiseaseModelLabelValue(siLabelValue);
+				if (result == null) result = caseDiseaseModelLabelValue(siLabelValue);
+				if (result == null) result = caseLabelValue(siLabelValue);
+				if (result == null) result = caseIntegrationLabelValue(siLabelValue);
+				if (result == null) result = caseGraph_SanityChecker(siLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SIR: {
+				SIR sir = (SIR)theEObject;
+				T1 result = caseSIR(sir);
+				if (result == null) result = caseSI(sir);
+				if (result == null) result = caseStandardDiseaseModel(sir);
+				if (result == null) result = caseDiseaseModel(sir);
+				if (result == null) result = caseIntegrationDecorator(sir);
+				if (result == null) result = caseNodeDecorator(sir);
+				if (result == null) result = caseSanityChecker(sir);
+				if (result == null) result = caseModifiable(sir);
+				if (result == null) result = caseDecorator(sir);
+				if (result == null) result = caseIdentifiable(sir);
+				if (result == null) result = caseComparable(sir);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SIR_LABEL: {
+				SIRLabel sirLabel = (SIRLabel)theEObject;
+				T1 result = caseSIRLabel(sirLabel);
+				if (result == null) result = caseStandardDiseaseModelLabel(sirLabel);
+				if (result == null) result = caseDiseaseModelLabel(sirLabel);
+				if (result == null) result = caseIntegrationLabel(sirLabel);
+				if (result == null) result = caseDynamicNodeLabel(sirLabel);
+				if (result == null) result = caseDynamicLabel(sirLabel);
+				if (result == null) result = caseNodeLabel(sirLabel);
+				if (result == null) result = caseLabel(sirLabel);
+				if (result == null) result = caseIdentifiable(sirLabel);
+				if (result == null) result = caseComparable(sirLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SIR_LABEL_VALUE: {
+				SIRLabelValue sirLabelValue = (SIRLabelValue)theEObject;
+				T1 result = caseSIRLabelValue(sirLabelValue);
+				if (result == null) result = caseSILabelValue(sirLabelValue);
+				if (result == null) result = caseStandardDiseaseModelLabelValue(sirLabelValue);
+				if (result == null) result = caseDiseaseModelLabelValue(sirLabelValue);
+				if (result == null) result = caseLabelValue(sirLabelValue);
+				if (result == null) result = caseIntegrationLabelValue(sirLabelValue);
+				if (result == null) result = caseGraph_SanityChecker(sirLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_DISEASE_MODEL: {
+				StandardDiseaseModel standardDiseaseModel = (StandardDiseaseModel)theEObject;
+				T1 result = caseStandardDiseaseModel(standardDiseaseModel);
+				if (result == null) result = caseDiseaseModel(standardDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(standardDiseaseModel);
+				if (result == null) result = caseNodeDecorator(standardDiseaseModel);
+				if (result == null) result = caseSanityChecker(standardDiseaseModel);
+				if (result == null) result = caseModifiable(standardDiseaseModel);
+				if (result == null) result = caseDecorator(standardDiseaseModel);
+				if (result == null) result = caseIdentifiable(standardDiseaseModel);
+				if (result == null) result = caseComparable(standardDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL: {
+				StandardDiseaseModelLabel standardDiseaseModelLabel = (StandardDiseaseModelLabel)theEObject;
+				T1 result = caseStandardDiseaseModelLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseDiseaseModelLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseIntegrationLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseDynamicNodeLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseDynamicLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseNodeLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseLabel(standardDiseaseModelLabel);
+				if (result == null) result = caseIdentifiable(standardDiseaseModelLabel);
+				if (result == null) result = caseComparable(standardDiseaseModelLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_DISEASE_MODEL_LABEL_VALUE: {
+				StandardDiseaseModelLabelValue standardDiseaseModelLabelValue = (StandardDiseaseModelLabelValue)theEObject;
+				T1 result = caseStandardDiseaseModelLabelValue(standardDiseaseModelLabelValue);
+				if (result == null) result = caseDiseaseModelLabelValue(standardDiseaseModelLabelValue);
+				if (result == null) result = caseLabelValue(standardDiseaseModelLabelValue);
+				if (result == null) result = caseIntegrationLabelValue(standardDiseaseModelLabelValue);
+				if (result == null) result = caseGraph_SanityChecker(standardDiseaseModelLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_DISEASE_MODEL_STATE: {
+				StandardDiseaseModelState standardDiseaseModelState = (StandardDiseaseModelState)theEObject;
+				T1 result = caseStandardDiseaseModelState(standardDiseaseModelState);
+				if (result == null) result = caseDiseaseModelState(standardDiseaseModelState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_INFECTOR: {
+				StandardInfector standardInfector = (StandardInfector)theEObject;
+				T1 result = caseStandardInfector(standardInfector);
+				if (result == null) result = caseInfector(standardInfector);
+				if (result == null) result = caseNodeDecorator(standardInfector);
+				if (result == null) result = caseModifiable(standardInfector);
+				if (result == null) result = caseDecorator(standardInfector);
+				if (result == null) result = caseIdentifiable(standardInfector);
+				if (result == null) result = caseComparable(standardInfector);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_SEIR_DISEASE_MODEL: {
+				StochasticSEIRDiseaseModel stochasticSEIRDiseaseModel = (StochasticSEIRDiseaseModel)theEObject;
+				T1 result = caseStochasticSEIRDiseaseModel(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseSEIR(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseSIR(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseSI(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticSEIRDiseaseModel);
+				if (result == null) result = caseComparable(stochasticSEIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_SI_DISEASE_MODEL: {
+				StochasticSIDiseaseModel stochasticSIDiseaseModel = (StochasticSIDiseaseModel)theEObject;
+				T1 result = caseStochasticSIDiseaseModel(stochasticSIDiseaseModel);
+				if (result == null) result = caseSI(stochasticSIDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(stochasticSIDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticSIDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(stochasticSIDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticSIDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticSIDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticSIDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticSIDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticSIDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticSIDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticSIDiseaseModel);
+				if (result == null) result = caseComparable(stochasticSIDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_SIR_DISEASE_MODEL: {
+				StochasticSIRDiseaseModel stochasticSIRDiseaseModel = (StochasticSIRDiseaseModel)theEObject;
+				T1 result = caseStochasticSIRDiseaseModel(stochasticSIRDiseaseModel);
+				if (result == null) result = caseSIR(stochasticSIRDiseaseModel);
+				if (result == null) result = caseStandardStochasticDiseaseModel(stochasticSIRDiseaseModel);
+				if (result == null) result = caseSI(stochasticSIRDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(stochasticSIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticSIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticSIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticSIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticSIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticSIRDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticSIRDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticSIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticSIRDiseaseModel);
+				if (result == null) result = caseComparable(stochasticSIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.AGGREGATING_SI_DISEASE_MODEL: {
+				AggregatingSIDiseaseModel aggregatingSIDiseaseModel = (AggregatingSIDiseaseModel)theEObject;
+				T1 result = caseAggregatingSIDiseaseModel(aggregatingSIDiseaseModel);
+				if (result == null) result = caseSI(aggregatingSIDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(aggregatingSIDiseaseModel);
+				if (result == null) result = caseDiseaseModel(aggregatingSIDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(aggregatingSIDiseaseModel);
+				if (result == null) result = caseNodeDecorator(aggregatingSIDiseaseModel);
+				if (result == null) result = caseSanityChecker(aggregatingSIDiseaseModel);
+				if (result == null) result = caseModifiable(aggregatingSIDiseaseModel);
+				if (result == null) result = caseDecorator(aggregatingSIDiseaseModel);
+				if (result == null) result = caseIdentifiable(aggregatingSIDiseaseModel);
+				if (result == null) result = caseComparable(aggregatingSIDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.AGGREGATING_DISEASE_MODEL_STATE: {
+				AggregatingDiseaseModelState aggregatingDiseaseModelState = (AggregatingDiseaseModelState)theEObject;
+				T1 result = caseAggregatingDiseaseModelState(aggregatingDiseaseModelState);
+				if (result == null) result = caseDiseaseModelState(aggregatingDiseaseModelState);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.AGGREGATING_SEIR_DISEASE_MODEL: {
+				AggregatingSEIRDiseaseModel aggregatingSEIRDiseaseModel = (AggregatingSEIRDiseaseModel)theEObject;
+				T1 result = caseAggregatingSEIRDiseaseModel(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseAggregatingSIRDiseaseModel(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseAggregatingSIDiseaseModel(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseSI(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseModifiable(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseDecorator(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(aggregatingSEIRDiseaseModel);
+				if (result == null) result = caseComparable(aggregatingSEIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.AGGREGATING_SIR_DISEASE_MODEL: {
+				AggregatingSIRDiseaseModel aggregatingSIRDiseaseModel = (AggregatingSIRDiseaseModel)theEObject;
+				T1 result = caseAggregatingSIRDiseaseModel(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseAggregatingSIDiseaseModel(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseSI(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseModifiable(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseDecorator(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(aggregatingSIRDiseaseModel);
+				if (result == null) result = caseComparable(aggregatingSIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL: {
+				StochasticDiseaseModel stochasticDiseaseModel = (StochasticDiseaseModel)theEObject;
+				T1 result = caseStochasticDiseaseModel(stochasticDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticDiseaseModel);
+				if (result == null) result = caseComparable(stochasticDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL: {
+				StandardStochasticDiseaseModel standardStochasticDiseaseModel = (StandardStochasticDiseaseModel)theEObject;
+				T1 result = caseStandardStochasticDiseaseModel(standardStochasticDiseaseModel);
+				if (result == null) result = caseStochasticDiseaseModel(standardStochasticDiseaseModel);
+				if (result == null) result = caseDiseaseModel(standardStochasticDiseaseModel);
+				if (result == null) result = caseNodeDecorator(standardStochasticDiseaseModel);
+				if (result == null) result = caseSanityChecker(standardStochasticDiseaseModel);
+				if (result == null) result = caseModifiable(standardStochasticDiseaseModel);
+				if (result == null) result = caseDecorator(standardStochasticDiseaseModel);
+				if (result == null) result = caseIdentifiable(standardStochasticDiseaseModel);
+				if (result == null) result = caseComparable(standardStochasticDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.SIR_INOCULATOR: {
+				SIRInoculator sirInoculator = (SIRInoculator)theEObject;
+				T1 result = caseSIRInoculator(sirInoculator);
+				if (result == null) result = caseSIInfector(sirInoculator);
+				if (result == null) result = caseStandardInfector(sirInoculator);
+				if (result == null) result = caseInfector(sirInoculator);
+				if (result == null) result = caseNodeDecorator(sirInoculator);
+				if (result == null) result = caseModifiable(sirInoculator);
+				if (result == null) result = caseDecorator(sirInoculator);
+				if (result == null) result = caseIdentifiable(sirInoculator);
+				if (result == null) result = caseComparable(sirInoculator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_POISSON_SI_DISEASE_MODEL: {
+				StochasticPoissonSIDiseaseModel stochasticPoissonSIDiseaseModel = (StochasticPoissonSIDiseaseModel)theEObject;
+				T1 result = caseStochasticPoissonSIDiseaseModel(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseSI(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = caseComparable(stochasticPoissonSIDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_POISSON_SIR_DISEASE_MODEL: {
+				StochasticPoissonSIRDiseaseModel stochasticPoissonSIRDiseaseModel = (StochasticPoissonSIRDiseaseModel)theEObject;
+				T1 result = caseStochasticPoissonSIRDiseaseModel(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseSIR(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseSI(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = caseComparable(stochasticPoissonSIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StandardPackage.STOCHASTIC_POISSON_SEIR_DISEASE_MODEL: {
+				StochasticPoissonSEIRDiseaseModel stochasticPoissonSEIRDiseaseModel = (StochasticPoissonSEIRDiseaseModel)theEObject;
+				T1 result = caseStochasticPoissonSEIRDiseaseModel(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseSEIR(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseSIR(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseSI(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseStandardDiseaseModel(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseDiseaseModel(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseIntegrationDecorator(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseNodeDecorator(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseSanityChecker(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseModifiable(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseDecorator(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseIdentifiable(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = caseComparable(stochasticPoissonSEIRDiseaseModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SEIR</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SEIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSEIR(SEIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SEIR Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SEIR Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSEIRLabel(SEIRLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SEIR Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SEIR Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSEIRLabelValue(SEIRLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIR(SIR object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIRLabel(SIRLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIRLabelValue(SIRLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModel(StandardDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModel(DiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModelLabel(DiseaseModelLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SEIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticSEIRDiseaseModel(
+			StochasticSEIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Infector</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Infector</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardInfector(StandardInfector object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Deterministic SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Deterministic SEIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDeterministicSEIRDiseaseModel(
+			DeterministicSEIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModelLabelValue(DiseaseModelLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModelLabelValue(
+			StandardDiseaseModelLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModelLabel(StandardDiseaseModelLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSI(SI object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSILabel(SILabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSILabelValue(SILabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Infector</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Infector</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseInfector(Infector object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI Infector</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI Infector</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIInfector(SIInfector object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Deterministic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Deterministic SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDeterministicSIRDiseaseModel(
+			DeterministicSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Deterministic SI Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Deterministic SI Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDeterministicSIDiseaseModel(
+			DeterministicSIDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticSIRDiseaseModel(StochasticSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic SI Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticSIDiseaseModel(StochasticSIDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDiseaseModelState(DiseaseModelState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SI Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SI Disease Model State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIDiseaseModelState(SIDiseaseModelState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Disease Model State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardDiseaseModelState(StandardDiseaseModelState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integration Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integration Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegrationLabel(IntegrationLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integration Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integration Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegrationLabelValue(IntegrationLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIntegrationDecorator(IntegrationDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Aggregating SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Aggregating SI Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAggregatingSIDiseaseModel(AggregatingSIDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Aggregating Disease Model State</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Aggregating Disease Model State</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAggregatingDiseaseModelState(AggregatingDiseaseModelState object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Aggregating SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Aggregating SEIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAggregatingSEIRDiseaseModel(AggregatingSEIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Aggregating SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Aggregating SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseAggregatingSIRDiseaseModel(AggregatingSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticDiseaseModel(StochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStandardStochasticDiseaseModel(StandardStochasticDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>SIR Inoculator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>SIR Inoculator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSIRInoculator(SIRInoculator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Poisson SI Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Poisson SI Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticPoissonSIDiseaseModel(StochasticPoissonSIDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Poisson SIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Poisson SIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticPoissonSIRDiseaseModel(StochasticPoissonSIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Poisson SEIR Disease Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Poisson SEIR Disease Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStochasticPoissonSEIRDiseaseModel(StochasticPoissonSEIRDiseaseModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicLabel(DynamicLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeLabel(NodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicNodeLabel(DynamicNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraph_SanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc --> This implementation returns null; returning a
+	 * non-null result will terminate the switch, but this is the last case
+	 * anyway. <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} // StandardSwitch
diff --git a/org.eclipse.stem.diseases/.classpath b/org.eclipse.stem.diseases/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.diseases/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.diseases/.project b/org.eclipse.stem.diseases/.project
new file mode 100644
index 0000000..88ded5e
--- /dev/null
+++ b/org.eclipse.stem.diseases/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.diseases</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.diseases/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.diseases/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e91f7f8
--- /dev/null
+++ b/org.eclipse.stem.diseases/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Jan 21 12:40:39 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.diseases/META-INF/MANIFEST.MF b/org.eclipse.stem.diseases/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e84fb82
--- /dev/null
+++ b/org.eclipse.stem.diseases/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseases;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.diseases.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: %providerName
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseases
diff --git a/org.eclipse.stem.diseases/build.properties b/org.eclipse.stem.diseases/build.properties
new file mode 100644
index 0000000..25c2719
--- /dev/null
+++ b/org.eclipse.stem.diseases/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               resources/,\
+               plugin.properties,\
+               epl-v10.html,\
+               notice.html
diff --git a/org.eclipse.stem.diseases/epl-v10.html b/org.eclipse.stem.diseases/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.diseases/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.diseases/notice.html b/org.eclipse.stem.diseases/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.diseases/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.diseases/plugin.properties b/org.eclipse.stem.diseases/plugin.properties
new file mode 100644
index 0000000..11fc2c1
--- /dev/null
+++ b/org.eclipse.stem.diseases/plugin.properties
@@ -0,0 +1,39 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Disease Categories
+pluginName = STEM Diseases Model
+providerName = Eclipse.org
+
+_UI_STEM = STEM
+_UI_Builtin = Built-in
+
+# Dublin Core
+dc_creator_daford = daford
+dc_pub = Eclipse.org
+#dc_creator_kaufman = kaufman
+dc_sflu_d_seir_desc = The Spanish Flu (SEIR)
+dc_sflu_d_seir_title = Spanish Flu (1918)
+
+dc_agg_seir_desc = This &quot;Disease Model&quot; aggregates the values produced by other SEIR disease models acting on Human populations.
+dc_agg_seir_title = Aggregating SEIR Human
+
+dc_inf_msex_desc = This is an &quot;Infector&quot; that infects ten (10) Humans with the Spanish Flu, in Middlesex, MA 
+dc_inf_msex_title = Ten (10) Humans Infected with the Spanish Flu, in Middlesex, MA
+
+dc_flu_d_seir_desc = Influenza (SEIR)
+dc_flu_d_seir_title = Influenza
+
+dc_sam_d_seir_desc = Salmonella (SEIR)
+dc_sam_d_seir_title = Salmonella
+
+dc_shig_d_seir_desc = Shigella (SEIR)
+dc_shig_d_seir_title = Shigella
\ No newline at end of file
diff --git a/org.eclipse.stem.diseases/plugin.xml b/org.eclipse.stem.diseases/plugin.xml
new file mode 100644
index 0000000..d1aa163
--- /dev/null
+++ b/org.eclipse.stem.diseases/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.stem.diseasemodels.disease">
+      <stem_category
+            id="org.eclipse.stem.diseases.stem"
+            name="%_UI_STEM"
+            parent_id="/"/>
+      <stem_category
+            id="org.eclipse.stem.diseases.stem.builtin"
+            name="%_UI_Builtin"
+            parent_id="org.eclipse.stem.diseases.stem"/>
+      <dublin_core
+            category_id="org.eclipse.stem.diseases.stem.builtin"
+            created="2007-02-15"
+            creator="%dc_creator_daford"
+            description="%dc_flu_d_seir_desc"
+            format="http:///org/eclipse/stem/diseasemodels/standard.ecore"
+            identifier="platform:/plugin/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard"
+            publisher="%dc_pub"
+            title="%dc_flu_d_seir_title"/>
+   </extension>
+
+
+</plugin>
diff --git a/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard b/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard
new file mode 100644
index 0000000..f49a194
--- /dev/null
+++ b/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ASCII"?>
+<org.eclipse.stem.diseasemodels.standard:DeterministicSEIRDiseaseModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.stem.diseasemodels.standard="http:///org/eclipse/stem/diseasemodels/standard.ecore" uRI="platform:/plugin/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard" typeURI="stemtype://org.eclipse.stem/identifiable1" backgroundMortalityRate="5.5E-5" diseaseName="Influenza" infectiousMortality="0.0" transmissionRate="1.0" nonLinearityCoefficient="1.16" recoveryRate="0.175" infectiousMortalityRate="0.0" physicallyAdjacentInfectiousProportion="0.075" incubationRate="0.67">
+  <dublinCore title="Spanish Flu (1918) Deterministic SEIR" identifier="platform:/plugin/org.eclipse.stem.diseases/resources/diseases/influenza_deterministic_seir.standard" description="1 Model Decorator" creator="daford" format="http:///org/eclipse/stem/diseasemodels/standard.ecore"/>
+</org.eclipse.stem.diseasemodels.standard:DeterministicSEIRDiseaseModel>
diff --git a/org.eclipse.stem.diseases/src/org/eclipse/stem/diseases/Activator.java b/org.eclipse.stem.diseases/src/org/eclipse/stem/diseases/Activator.java
new file mode 100644
index 0000000..0b3f02d
--- /dev/null
+++ b/org.eclipse.stem.diseases/src/org/eclipse/stem/diseases/Activator.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.diseases;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+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.stem.diseases"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+} // Activator
diff --git a/org.eclipse.stem.doc/.project b/org.eclipse.stem.doc/.project
new file mode 100644
index 0000000..79ac5c5
--- /dev/null
+++ b/org.eclipse.stem.doc/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.doc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.doc/META-INF/MANIFEST.MF b/org.eclipse.stem.doc/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5efb7f8
--- /dev/null
+++ b/org.eclipse.stem.doc/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.doc;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.help
diff --git a/org.eclipse.stem.doc/build.properties b/org.eclipse.stem.doc/build.properties
new file mode 100644
index 0000000..42c7e51
--- /dev/null
+++ b/org.eclipse.stem.doc/build.properties
@@ -0,0 +1,25 @@
+bin.includes = META-INF/,\
+               plugin.xml,\
+               toc.xml,\
+               tocconcepts.xml,\
+               tocepidemiologicalmodeling.xml,\
+               tocgettingstarted.xml,\
+               tocinterface.xml,\
+               tocreference.xml,\
+               toctutorials.xml,\
+               help/,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html,\
+               tocdisclaimer.xml
+src.includes = help/,\
+               epl-v10.html,\
+               notice.html,\
+               toctutorials.xml,\
+               tocreference.xml,\
+               tocinterface.xml,\
+               tocgettingstarted.xml,\
+               tocepidemiologicalmodeling.xml,\
+               tocdisclaimer.xml,\
+               tocconcepts.xml,\
+               toc.xml
diff --git a/org.eclipse.stem.doc/copyhelp.xml b/org.eclipse.stem.doc/copyhelp.xml
new file mode 100644
index 0000000..908a916
--- /dev/null
+++ b/org.eclipse.stem.doc/copyhelp.xml
@@ -0,0 +1,43 @@
+<!-- ******************************************************* -->
+<!-- Ant build script to copy the help files       -->
+<!-- ******************************************************* -->
+<project name="copyHelp" default="copyhelp" >
+
+	
+	<!-- Configure the directory into which the web application is built -->
+	<property name="build.dir"    value="${basedir}"/>
+        <property name="zip.name"    value="help.zip"/>
+        
+	
+
+ 	
+	<!-- Executable Targets -->
+		
+	<target name="clean" description="removes previous build">		
+		<delete dir="$(zip.name)" />	
+	</target>
+
+	
+	
+	<!-- 
+		* Build the zip file  
+		*   contains
+		*     
+		*     help/html/
+		*       index.html
+		*       toc.html
+		*       *.html  all the rcp help files
+		* 
+		-->
+	<target name="copyhelp" depends="clean" 
+		description="creates the zip file">	
+				
+		<zip 
+			destfile="${zip.name}">
+			<zipfileset dir="help/html" prefix="help/html"/> 	      
+			 
+		</zip>
+	</target>
+
+
+</project>
diff --git a/org.eclipse.stem.doc/epl-v10.html b/org.eclipse.stem.doc/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.doc/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/concepts/extensibility.html b/org.eclipse.stem.doc/help/html/concepts/extensibility.html
new file mode 100644
index 0000000..f6bc1c9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/concepts/extensibility.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<title>STEM Concepts</title>
+</head>
+
+<body>
+<h2>Extensibility</h2>
+<p>
+STEM was designed from the very beginning to be easily extended.  This means
+that it is possible to add new data and compuatational components to STEM
+and use them in new modeling approaches not explicitly provided in the 
+base configuration of the system.  The choice of Eclipse as the implementation 
+framework allows STEM to leverage the framework's software component architecture to
+facillitate this.  
+</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/concepts/img/ScenarioComposition.jpg b/org.eclipse.stem.doc/help/html/concepts/img/ScenarioComposition.jpg
new file mode 100644
index 0000000..37e3802
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/concepts/img/ScenarioComposition.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/concepts/modelingframework.html b/org.eclipse.stem.doc/help/html/concepts/modelingframework.html
new file mode 100644
index 0000000..79895ba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/concepts/modelingframework.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>STEM Concepts</title>
+</head>
+
+<body>
+
+<h2>The STEM Modeling Framework</h2>
+<p>At its core STEM is a discrete event simulation system. It
+begins with an initial "simulation state" and then proceeds in step-wise
+fashion to determine the next state of the Simulation as a function of
+the current state and a parameter that specifies the current "time". It
+uses a "graph" to represent the state of the Simulation at each of its
+steps.</p>
+<p>A graph is a simple, but powerful, mathematical abstraction for
+representing "entities" (i.e., things in the world) and their
+relationships. More formally, a graph is a set of "nodes", "edges" and
+"labels", where Nodes generally correspond to entities and edges link
+two nodes and represent some relationship between them. Labels are
+attached to either a node or an edge and represent some aspect of their
+host (like the name of the entity, or the name of the relationship).
+Each node may have more than one label, but each edge will only have
+one.</p>
+
+<h4 id=canonicalgraph>The Canonical Graph</h4>
+<p>
+In STEM, nodes typically represent geographic regions while edges 
+represent relationships between geographic regions. There may be 
+any number of edges between any two nodes, as there may be any number 
+of relationships between any two geographic locations. A label on a node 
+might represent the physical area of the corresponding geographic location, 
+the number of population members of a particular type that live there, 
+or a mathematical representation of the state of a particular disease at 
+that location. An edge between two nodes might represent a relationship 
+such as the sharing of a common border (i.e., two regions are physically 
+adjacent and could easily exchange population members); a different edge 
+between the same two nodes might represent a road that connects the two 
+locations.  In the first case, the label for a border edge might record 
+the length of the border between the two locations; in the later case, 
+the label might indicate the type of road and how much traffic it carries. 
+Completely different edges could also exist, for instance ones that represent 
+the flight path of migratory birds. The graph that includes all of the nodes, 
+edges and labels necessary to represent the state of the simulation is called 
+the <em>canonical graph</em>.
+</p>
+<h4 id=simulation>Simulation</h4>
+<p>
+A <em>Simulation</em> in STEM is created from a 
+<a href="#canonicalgraph">canonical graph</a>.  The specification of how
+to create the graph is represented by a <a href="#scenario">Scenario</a>
+(defined below).  
+<p>
+</p>
+The execution of a Simulation begins with an <em>initialized</em>
+canonical graph and a starting <em>time</em>. The first step in a
+Simulation is to determine the next point in time that will be used to
+update the state of the <a href="#canonicalgraph">canonical graph</a>. 
+With this value determined the internal STEM Simulation "engine" invokes,
+in a very specific order, a set of computations associated with the 
+<a href="#canonicalgraph">canonical graph</a>.  These
+computations take the time point as input and compute the "next" state
+of the graph as it will be at that time. When these computations are
+complete, the state of the entire graph is changed to the "next" value
+just computed. This process continues until stopped by the user, or, if
+specified, a predetermined end-time is reached.</p>
+
+
+<h3>The STEM Compositional Modeling Framework</h3>
+<p>One of the main features of STEM, and the one that makes it such
+a powerful modeling system, is its framework for specifying the features
+of a <a href="#simulation">Simulation</a>. This framework allows a 
+<a href="#simulation">Simulation</a> to be composed from
+many different reusable components that are combined to form the 
+<a href="#simulation">Simulation's</a>
+<a href="#canonicalgraph">canonical graph</a>, computational elements
+and sequence of time points.
+</p>
+<p>This approach is extremely flexible and powerful. The components
+can be from many different sources and can be exchanged among users. The
+components can also be combined to create larger structures which then
+can become reusable components themselves. For instance, it is possible
+to create a detailed model of a country and then reuse that model as a
+component in many different <a href="#simulation">Simulations</a>. Similarly, computational
+aspects of a <a href="#simulation">Simulation</a> such as a specialized disease model can be
+developed by an individual researcher and then used by many others in
+their models. The ability of STEM to combine components from different
+sources makes it possible to leverage the varied expertise of different
+model builders in a way that has never before been possible.</p>
+<p>To foster reuse and collaboration, each component in the
+framework has a set of <a href="http://dublincore.org/">Dublin Core</a>
+metadata associated with it. This metadata records important attributes
+of the component such as its title, descriptive text, the name of the
+original creator, any literature citations associated with it (e.g., a
+paper describing a particular disease model) and many others such as
+important dates, spatial characteristics. This information allows
+modelers to know exactly what they are using in their models.</p>
+
+
+<h3>STEM Components</h3>
+<p>The STEM compositional modeling framework consists of eight
+components that constitute the "building blocks" of any <a href="#simulation">Simulation</a>.
+These are: <em><a href="#scenario">Scenarios</a></em>, 
+<em><a href="#sequencer">Sequencers</a></em>, <em><a href="#decorator">Decorators</a></em>, 
+<em><a href="#model">Models</a></em>, <em><a href="#graph"> Graphs</a></em>,
+<em><a href="#modifier"> Modifiers</a></em>, <em><a href="#trigger"> Triggers</a></em>, and
+<em><a href="#predicate"> Predicates</a></em>.  In addition, 
+a sequence of related <a href="#simulation">Simulations</a> called a <a href="#batch">Batch</a>, 
+can be defined using components called an <em><a href="#experiment">Experiment</a></em> and 
+<em><a href="#modifier">Modifier</a></em>. </p>
+
+<h4 id=scenario>Scenario</h4>
+<p>The main component of a <a href="#simulation">Simulation</a> is a Scenario. When a
+<a href="#simulation">Simulation</a> is run in STEM, it is always created from a Scenario. A
+Scenario logically collects together three other types of components, a
+single <a href="#sequencer">Sequencer</a>, a set of <a href="#decorator">
+Decorators</a>, and a single <a href="#model"> Model</a>. Together, these
+components can be used to create a <a href="#simulation">Simulation</a>.</p>
+</p>
+<p>
+A Scenario can be created using the 
+<a href="../interface/wizards/scenariowizard.html">Scenario Wizard</a> and 
+edited using the <a href="../interface/editors/scenarioeditor.html">Scenario Editor</a>.
+</p>
+<h4 id=sequencer>Sequencer</h4>
+<p>A Sequencer is the component of a <a href="#simulation">Simulation</a> that determines the
+sequence of time values that will be used to compute the next state of
+the <a href="#canonicalgraph">canonical graph</a>. It may produce values
+that are at fixed intervals of time, or it may vary the duration of the
+intervals between points. The values it creates are in simulated "STEM
+Time", but there is no restriction preventing the values from reflecting
+"wall clock" time. This can be useful for "Simulations" that incorporate
+external "real-time" data values from databases or other sources such as
+weather observations.</p>
+</p>
+<p>
+A Sequencer can be created using the 
+<a href="../interface/wizards/sequentialsequencerwizard.html">Sequential Sequencer Wizard</a> or the
+<a href="../interface/wizards/realtimesequencerwizard.html">Real-time Sequencer Wizard</a>
+and edited using the <a href="../interface/editors/sequencereditor.html">Sequencer Editor</a>.
+</p>
+<h4 id=decorator>Decorator</h4>
+<p>A Decorator is the framework's computational component. Every
+Decorator can participate in the initialization of the 
+<a href="#canonicalgraph">canonical graph</a>, for instance by setting the
+values of existing labels or adding additional ones (i.e., they
+"decorate" the graph). Also, at each simulation cycle, they are
+responsible for determining the next state of the 
+<a href="#canonicalgraph">canonical graph</a> by computing the values of
+labels as a function of the current <a href="#simulation">Simulation</a> 
+time. In an epidemiological <a href="#simulation">Simulation</a>, a 
+disease model would be implemented as a Decorator. There is no restriction 
+on what a Decorator can do, it can, for instance, issue a query to a 
+database or invoke a web service.</p>
+
+<h4 id=model>Model</h4>
+<p>A Model is the component responsible for representing the
+contents of the <a href="#canonicalgraph">canonical graph</a> and for
+creating an instance of it when a <a href="#simulation">Simulation</a> 
+is started from a <a href="#scenario">Scenario</a>. It combines with 
+the final component of the framework called a <a href="#graph">Graph</a> 
+to form a tree. This tree is a hierarchical organization of the different
+contributions to the <a href="#canonicalgraph">canonical graph</a>.
+Model instances form the root and interior nodes of the tree while 
+<a href="#graph"> Graph</a> instances form the leaves. The Model
+referenced by a <a href="#scenario">Scenario</a> is the root of such a
+tree.</p>
+<p>Each Model contains three different collections. The first is a
+collection of "sub-Model" instances, each of which is essentially the
+root of a sub-tree. The second is a collection of 
+<a href="#graph"> Graph</a> instances, and the third is another collection
+of <a href="#decorator"> Decorators</a>.</p>
+</p>
+<p>
+A Model can be created using the 
+<a href="../interface/wizards/modelwizard.html">Model Wizard</a> and 
+edited using the <a href="../interface/editors/modeleditor.html">Model Editor</a>.
+</p>
+<h4 id=graph>Graph</h4>
+<p>Graph instances contain the actual components, Nodes, Edges, and
+Labels, that eventually will be contributed to a 
+<a href="#canonicalgraph">canonical graph</a>. In the compositional
+framework, Graph instances are not true mathematical "graphs", they are
+better described as "graph fragments" as they may contain unresolved
+sets of Edges or Labels (and no Nodes). When the 
+<a href="#canonicalgraph">canonical graph</a> is created, these fragments
+are combined and their content's connections eventually resolved (i.e.,
+Edges and Labels will be mated with their appropriate "missing" Nodes).
+The resulting <a href="#canonicalgraph">canonical graph</a> is a true
+mathematical graph.</p>
+</p>
+<p>
+A Graph can be created using the 
+<a href="../interface/wizards/graphwizard.html">Graph Wizard</a> and 
+edited using the <a href="../interface/editors/grapheditor.html">Graph Editor</a>.
+</p>
+<h4 id=label>Label</h4>
+<p>Labels play a special role in the framework in that they can
+store two state values simultaneously. They have a "current" value
+which, collectively, records the current state of the graph. They can
+also have a "next" value which is used, collectively, to store the next
+state of the graph.</p>
+
+<h4 id=modeldecorators>Model Decorators</h4>
+<p>The collection of <a href="#decorator"> Decorators</a> that may
+exist in each <a href="#model"> Model</a> is similar to that contained
+in a <a href="#scenario">Scenario</a> instance. Its contents represents
+the computational component of the <a href="#model"> Model</a>. The
+difference is that the <a href="#modeldecorators"> Model Decorators</a>
+are only able to modify the parts of the <a href="#canonicalgraph">canonical
+graph</a> that are contributed by the tree rooted at the <a href="#model">
+Model</a>. The <a href="#decorator"> Decorators</a> in the <a
+	href="#scenario">Scenario</a>, being above the root of the tree, are
+able to access the entire <a href="#canonicalgraph">canonical graph</a>.
+There is also a strict execution order of <a href="#modeldecorators">
+Model Decorators</a>. The ones that are contributed lower in the tree are
+invoked before ones contributed above them. <a href="#scenario">Scenario</a>
+<a href="#decorator"> Decorators</a> are invoked last. The order of
+invocation for <a href="#decorator"> Decorators</a> at the same "level"
+is arbitrary.</p>
+
+<p>A <a href="#modeldecorators"> Model Decorator</a> would typically
+be some computation that needs to be executed for each cycle of the
+<a href="#simulation">Simulation</a>, while a <a href="#scenario">Scenario</a> <a
+	href="#decorator"> Decorator</a> would typically be used to modify the
+initial state of the <a href="#canonicalgraph">canonical graph</a> to
+customize it for a particular "#scenario". For example, in an
+epidemiological <a href="#simulation">Simulation</a>, a disease model 
+would be added to a
+<a href="#simulation">Simulation</a> as a <a href="#modeldecorators"> 
+Model Decorator</a> while
+the exact location of an outbreak of a disease would be added to the
+<a href="#simulation">Simulation</a> by a <a href="#scenario">Scenario</a> 
+<a href="#decorator">
+Decorator</a>. Many different <a href="#scenario">Scenario</a> instances
+could refer to the same <a href="#model"> Model</a> (with its disease
+model), but provide different <a href="#decorator"> Decorators</a> to
+specify different starting locations.</p>
+<p><a href="#decorator"> Decorators</a> typically compute the next
+value for Labels in the <a href="#canonicalgraph">canonical graph</a> as
+a function of the current contents of the graph and the time.</p>
+<p>The Figure below illustrates how these components are combined to
+create a <a href="#model"> Model</a> that is used by two different <a
+href="#scenario"> Scenarios</a>.</p>
+<p><img src="img/ScenarioComposition.jpg" /></p>
+
+<h4 id=experiment>Experiment</h4>
+<p>
+An Experiment is a specification of how to take a <em>base</em> 
+<a href="#scenario">Scenario</a> and systematically modify it to create 
+and run a sequence of related <a href="#simulation">Simulations</a>.  
+For instance, one might want
+to explore the effect of different transmission rates for a disease in a 
+particular <a href="#scenario">Scenario</a>.  An Experiment allows one 
+to specify the (base) <a href="#scenario">Scenario</a> and a collection 
+of  <a href="#modifier">Modifiers</a> that know how to modify it in 
+specific ways.  The modified <a href="#scenario">Scenario</a> instances 
+can then be used to create <a href="#simulation">Simulations</a>. 
+</p>
+<p>
+To initiate the creation of the derivative <a href="#scenario">Scenarios</a>
+and subsequent <a href="#simulation">Simulations</a>, an Experiment can 
+be run just like a <a href="#scenario">Scenario</a> to create a type of 
+execution unit called a <a href="#batch">Batch</a>.  
+</p>
+<p>
+An Experiment can be created using the 
+<a href="../interface/wizards/experimentwizard.html">Experiment Wizard</a> and 
+edited using the <a href="../interface/editors/experimenteditor.html">Experiment Editor</a>.
+</p>
+<h4 id=modifier>Modifier</h4>
+<p>
+A Modifier is a specification of how to systematically change the values
+of one or more features of a <a href="#scenario">Scenario</a>.  There are 
+two types of Modifiers. A <a href="#rangemodifier">Range Modifier</a>  
+modifies numeric features by assigning them values from a specified "range" 
+of values, while a <a href="#sequencemodifier">Sequence Modifier</a> 
+modifies features by assigning them successive values from a prespecified 
+ordered collection.
+</p>
+<p>
+A Modifier can be created using the 
+<a href="../interface/wizards/modifierwizard.html">Modifier Wizard</a> and 
+edited using the <a href="../interface/editors/modifereditor.html">Modifier Editor</a>.
+</p>
+<h4 id=rangemodifier>Range Modifier</h4>
+<p>
+A Range Modifier specifies a range of values for a numeric feature and an
+increment value.  It modifies a numeric feature by first assigning it a
+starting value and then it subsequently assigns values generated by adding
+an increment value to the previously assigned value until the result exceeds
+a specified end value.  If the start value is greater than the end value, 
+then the increment must be negative.
+</p>
+<h4 id=sequencemodifier>Sequence Modifier</h4>
+<p>
+A Sequence Modifier specifies a sequence of values for an arbitrary feature.
+It modifies the feature by assigning it, in sequential order, the values 
+in the sequence.
+</p>
+<h4 id=trigger>Trigger</h4>
+<p>
+A Trigger is a special kind of <a href="#decorator">Decorator</a> that combines 
+a <a href="#predicate">Predicate</a> with a reference to another 
+<a href="#decorator">Decorator</a>.  Its role is to conditionally execute the
+<a href="#decorator">Decorator</a> it references if certain conditions exist 
+in the <a href="#simulation">Simulation</a>.  Typically, the 
+<a href="#decorator">Decorator</a> referenced by the Trigger will be a 
+<a href="#modifier">Modifier</a> which will be configured to alter some aspect of the
+running <a href="#simulation">Simulation</a>.  For instance, a 
+<a href="#modifier">Modifier</a> could change the values on <a href="#label">Labels</a>
+on an <a href="#edge">Edge</a> or <a href="#node">Node</a> in the 
+<a href="#canonicalgraph">canonical graph</a>.  Those values could represent such
+things as the operational status of an airport, or the status (open or closed) of
+a road between two regions.  A modifier can also modify another 
+<a href="#decorator">Decorator</a> active in a <a href="#simulation">Simulation</a>.
+An example would be changing the configuration values of a Disease Model.
+</p>
+<p>
+The operation of a Trigger is conceptually simple, on each simulation cycle, 
+the Triggers contained by a  <a href="#scenario">Scenario</a>
+are executed, just like the other <a href="#decorator">Decorators</a>, to update 
+the <a href="#canonicalgraph">canonical graph</a>.  The first thing the Trigger 
+does is evaluate the <a href="#predicate">Predicate</a> it references.  If the 
+<a href="#predicate">Predicate</a> evaluates to <em>False</em>, then the Trigger 
+simply returns without performing any other actions.  If, however, the 
+<a href="#predicate">Predicate</a> evaluates to <em>True</em>, then the Trigger
+allows the <a href="#decorator">Decorator</a> it references to update the  
+<a href="#canonicalgraph">canonical graph</a>.  So long as the 
+<a href="#predicate">Predicate</a> returns <em>True</em> the referenced 
+<a href="#decorator">Decorator</a> will be executed.  If the 
+<a href="#decorator">Decorator</a> is a  <a href="#modifier">Modifier</a> then it
+will step through each of its configured modifications each time it is 
+activated until all modifications have been completed.
+</p>
+<p>
+A Trigger can be created using the 
+<a href="../interface/wizards/triggerwizard.html">Trigger Wizard</a> and 
+edited using the <a href="../interface/editors/triggereditor.html">Trigger Editor</a>.
+</p>
+<h4 id=predicate>Predicate</h4>
+<p>
+A Predicate is a boolean expression that returns <em>True</em> or <em>False</em>
+depending on testable conditions in a running <a href="#simulation">Simulation</a>
+and the expression itself.  Instances of  Predicates are referenced by  
+<a href="#trigger">Triggers</a> and their logical values are used to control
+the execution of a <a href="#decorator">Decorator</a> referenced by each 
+<a href="#trigger">Trigger</a>.
+</p>
+<p>
+Arbitrary logical expressions can be expressed in a Predicate, but currently,
+due to implementation limitations, the only testable conditions are the
+current and elapsed times in a running <a href="#simulation">Simulation</a>.
+In future versions of STEM, a richer set of conditions will be available.  
+The testing of time is still an extremely useful condition as it allows for
+specific modifications to be made to a <a href="#simulation">Simulation</a>
+at precise points in time.
+</p>
+<p>
+A Predicate can be created using the 
+<a href="../interface/wizards/predicatewizard.html">Predicate Wizard</a> and 
+edited using the <a href="../interface/editors/predicateeditor.html">Predicate Editor</a>.
+</p>
+<h3>Simulation Execution</h3>
+<p>When is Simulation is started, the first operation is to create
+the <a href="#canonicalgraph">canonical graph</a>. This is accomplished
+by recursively descending the tree rooted by the <a href="#model">
+Model</a> referenced by the <a href="#scenario">Scenario</a>. As the <a
+	href="#canonicalgraph">canonical graph</a> is constructed, connections
+between Labels and Edges in the graph fragments are resolved and then
+each <a href="#model"> Model</a> <a href="#decorator"> Decorator</a> is
+invoked and given the opportunity to "decorate" the <a
+	href="#canonicalgraph">canonical graph</a> as part of its
+initialization. When this is complete, the <a href="#scenario">Scenario</a>
+<a href="#decorator"> Decorators</a> are invoked to give them the
+opportunity to decorate the <a href="#canonicalgraph">canonical
+graph</a>.</p>
+<p>When the <a href="#canonicalgraph">canonical graph</a> has been
+constructed and initialized by the <a href="#model"> Model</a> and <a
+	href="#scenario">Scenario</a> <a href="#decorator"> Decorators</a>, the
+Simulation can begin its first cycle. The first step of the Simulation
+is to determine if the Simulation has completed its sequence of cycles.
+The answer to this question is provided by the <a href="#sequencer">Sequencer</a>
+that is referenced by the <a href="#scenario">Scenario</a> from which
+the Simulation was started. If the answer is "No," and the Simulation
+should continue, the <a href="#sequencer">Sequencer</a> will provide a
+value that represents the "time" of the next cycle. The STEM Simulation
+engine then takes that value and invokes each of the <a href="#model">
+Model</a> <a href="#decorator"> Decorators</a> (in proper order) passing
+them the time value. They perform their computations and then the <a
+	href="#scenario">Scenario</a> <a href="#decorator"> Decorators</a> are
+invoked in the same manner. Frequently, the <a href="#scenario">Scenario</a>
+<a href="#decorator"> Decorators</a> will not have any computations to
+perform after they have done their initialization, but there is no
+restriction that enforces this.</p>
+<p>When the <a href="#decorator"> Decorators</a> are finished, the
+Simulation engine tells the <a href="#canonicalgraph">canonical
+graph</a> to switch to its "next" state. This means that all of the Labels
+exchange their "current" and "next" values. This completes the first
+cycle. The process begins the next cycle with the <a href="#sequencer">Sequencer</a>
+determining if the sequence of simulation cycles is complete.</p>
+
+<h4 id=batch>Batch Execution</h4>
+<p>
+A Batch is created when an <a href="#experiment">Experiment</a> is executed.  
+When a Batch runs, it first takes the base <a href="#scenario">Scenario</a> 
+of the <a href="#experiment">Experiment</a>, applies the Modifiers referenced 
+by the <a href="#experiment">Experiment</a> and creates a new derivative 
+<a href="#scenario">Scenario</a>.  It then initiates the execution of a 
+<a href="#simulation">Simulation</a> from the derived <a href="#scenario">Scenario</a>.  
+When that <a href="#simulation">Simulation</a> completes, the Batch repeats the
+process until the Modifiers indicate that there are no additional modifications to 
+make, at which point the execution of the Batch is complete and it exits.
+</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/concepts/overview.html b/org.eclipse.stem.doc/help/html/concepts/overview.html
new file mode 100644
index 0000000..67e3021
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/concepts/overview.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<title>STEM Concepts</title>
+</head>
+
+<body>
+
+<h2>
+What is the Spatiotemporal Epidemiological Modeler (STEM)?
+</h2>
+<p>
+The Spatiotemporal Epidemiological Modeler (STEM) tool is designed 
+to help scientists and public health officials create and use spatial 
+and temporal models of emerging infectious diseases. 
+These models could aid in understanding, and potentially preventing, 
+the spread such diseases.
+</p>
+<p>
+Policymakers responsible for creating strategies to contain diseases 
+and prevent epidemics need an accurate understanding of disease 
+dynamics and the likely outcomes of preventive actions. 
+In an increasingly connected world with extremely efficient 
+global transportation links, the vectors of infection can 
+be quite complex. STEM facilitates the development of advanced 
+mathematical models that incorporate many factors that impact 
+the spread of disease.  These include population types and their 
+geographical distribution and density, transportation routes and 
+their capacities, and the characteristics of a disease.
+</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SEIRS.gif b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SEIRS.gif
new file mode 100644
index 0000000..c3dff00
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SEIRS.gif
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIRS.gif b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIRS.gif
new file mode 100644
index 0000000..efbb896
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIRS.gif
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIS.gif b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIS.gif
new file mode 100644
index 0000000..b390c75
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/images/SIS.gif
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/overview.html b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/overview.html
new file mode 100644
index 0000000..632f343
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/overview.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Epidemiological Modeling Overview</title>
+</head>
+
+<body>
+<h1>Epidemiological Modeling</h1>
+
+<img src="images/sis.gif" align=RIGHT HSPACE=10 VSPACE=10 width=25%>
+<p> Compartmental disease models are some of the most widely used
+models of infectious disease. In these models individuals (or portions of
+an individual) are considered to be in a compartments based on their
+disease status. By convention, commonly used compartmental models are
+designated by the first letters of the compartments and the order 
+people move between them. So, the model for a disease where people 
+start out Susceptible, become Infectious after catching the disease, 
+and then after some time clear the disease and become Susceptible again
+would be an SIS model. The four most commonly used compartments
+are <u>S</u>usceptible, <u>E</u>xposed, <u>I</u>nfectious, and
+<u>R</u>emoved. <u>S</u>usceptible contains those individuals 
+who can still be infected with disease. <u>E</u>xposed contains individuals
+who have been infected with the disease, but have not yet become
+infectious themselves. <u>I</u>nfectious contains those individuals who
+are infected and infectious. <u>R</u>emoved (sometimes called <u>R</u>ecovered)
+contains those individuals who have been removed from the system
+either through death or immunity. The disease state of a population 
+is speccified by knowing the nuber of individuals (or proportion of
+the population) that is in each compartment.
+  	
+ <p> There are two main types of compartmental models: deterministic
+ and stochastic. In deterministic model, rates of movements between
+ compartments are used to represent the processes by which individuals
+ are infected, become ill and eventually recover from disease. These 
+ rates specify a set of differential or difference equations, which
+ can be evaluated to give that state of the model at a future time 
+ point. In deterministic models compartments need not contain an
+ integer number of individuals.
+ 
+ <p>Deterministic models only give the <i>expected</i> behavior of
+ the disease in a population under a set of assumptions about 
+ the natural history and epidemiology of the disease. Often
+ we would also like to know how the disease behaves in more
+ extreme cases, and what the distribution of this behavior 
+ is. Stochastic models provide a method for addressing this
+ issue. In a stochastic model, whole individuals are moved 
+ between compartments based on a random draw from some specified
+ distribution. To get informative results from a stochastic 
+ compartmental model it is necessary to do hundreds, or even
+ thousands of experiments. 
+
+<p>Compartamental models also may have "closed" or "open" populations.
+In closed populations the set of individuals represented by the model
+is static, no one comes in and no one comes out. It is of note that
+in such populations any disease that confers permanent immunity
+after infection will eventually become extinct. In an open 
+population there is continuous immigration and emigration from
+the population, usually via birth and death. 
+  
+<p>STEM comes with deterministic implementations for three commonly used
+compartmental models: SI(S), SIR(S), and SIER(S). These models are
+implemented as having open populations, but closed populations can
+be easily simulated by setting the immigration/emigration rate to
+zero. Which model is appropriate for a modeling project depends
+on both the disease of interest and the timescale that we are 
+interested in modeling our results. 
+
+<h2>The SI(S) Model</h2>
+<a href="simath.html">
+<img src="images/sis.gif" align=CENTER HSPACE=10 VSPACE=10 width=24% border=0>
+</a>
+
+<p>SI(S) are useful for modeling diseases with a short latent period (the time 
+between being infected and becoming infectious) that either confer no long term 
+immunity (in the case of SIS models) or result in permanent infection (in the case
+of SI models). Diseases of this type include the common cold and many 
+macro-parasite infections. Susceptible individuals are infected at the 
+rate of <em>&beta;I</em>, at which time they lose infectiousness
+at the rate of <em>&gamma;</em>. Mathematical details of this model
+can be viewed <a href="simath.html">here</a>.
+
+
+<h2>The SIR(S) Model</h2>
+<a href="sirmath.html">
+<img src="images/sirs.gif" align=CENTER HSPACE=10 VSPACE=10 width=36% border=0>
+</a>
+
+<p> SIR(S) models are useful for modeling diseases with a short latent 
+period that confer immunity after infection, whether permanently (an SIR
+model), or temporarily (an SIRS model). Such a model might be useful for
+modeling diseases such as influenza or chicken-pox. Susceptible individuals are infected 
+at the rate of <em>&beta;I</em>. They then loose infectiousness at the rate of
+<em>&gamma;</em> and then become immune to further infection. Immunity is lost
+at the rate of <em>&sigma;</em>.  Mathematical details of this model can be
+viewed <a href="sirmath.html">here</a>.
+
+<h2>The SEIR(S) Model</h2>
+<a href="seirmath.html">
+<img src="images/seirs.gif" align=CENTER HSPACE=10 VSPACE=10 width=48% border=0>
+</a>
+
+<p> SEIR(S) models are useful for modeling diseases that have a long latent
+period in which infected individuals are not themselves infectious.  Measles,
+influenza and smallpox are all diseases that might be appropriately characterized
+by this model. Susceptible individuals are infected  at the rate of <em>&beta;I</em>.
+These individuals become infectious at the rate of <em>&epsilon;</em>, and  
+then loose infectiousness at the rate of
+<em>&gamma;</em>, becoming immune to further infection. Immunity is lost
+at the rate of <em>&sigma;</em>. Mathematical details of this model can be
+viewed <a href="swirmath.html">here</a>.
+
+
+<h2>Further Reading</h2>
+<ol>
+	<li> Hethcote, H. W. 2000. The Mathematics of Infectious Diseases. 
+	SIAM Rev. 42, 4 (Dec. 2000), 599-653. DOI= http://dx.doi.org/10.1137/S0036144500371907
+	<li>  Ford, D. A., Kaufman, J. H., Eiron, I.,2006. An extensible spatial
+		and temporal epidemiological modeling system. 
+		Int J Health Geogr. 5, 4 (Jan. 2006). DOI=http://dx.doi.org/10.1186/1476-072X-5-4
+		 
+</ol>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/seirmath.html b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/seirmath.html
new file mode 100644
index 0000000..2326b46
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/seirmath.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SEIR(S) Disease Model Mathematics</title>
+</head>
+<body>
+<h1>SEIR Disease Model Mathematics</h1>
+<img src="images/seirs.gif" align=CENTER HSPACE=10 VSPACE=10 border=0 width=100%>
+<p>The basic <em>SEIR</em> (Susceptible, Exposed, Infectious, Removed)
+and <em>SEIRS</em> (Susceptible, Exposed, Infectious, Removed, 
+Susceptible) disease models assume a uniform
+population at a single location and that the population members are well
+"mixed", meaning that they are equally likely to meet and infect each
+other. This model, for a normalized population, is defined by the three
+equations below:
+<ul>
+	<li><em>&Delta;s = &mu; &minus; &beta;s i + &sigma;r &minus;
+	&mu;s</em></li>
+	<li><em>&Delta;e = &beta;s i &minus; &epsilon;e &minus; &mu;e</em></li>
+	<li><em>&Delta;i = &epsilon;e &minus; &gamma;i &minus; &mu;i</em></li>
+	<li><em>&Delta;r = &gamma;i &minus; &sigma;r &minus; &mu;r</em></li>
+</ul>
+
+
+<p>Where:
+<ul>
+	<li><em>s</em> is the proportion of the population that is
+		<em>Susceptible</em></li>
+	<li><em>e</em> is the proportion of the population that is <em>Exposed</em> to
+		the disease, but not yet infectious.</li>	
+	<li><em>i</em> is the proportion of the population
+		that is <em>Infectious</em></li>
+	<li><em>r</em> is the proportion of the population
+		that is <em>Removed</em> from the infectious and susceptible populations, 
+		and therefore cannot be infected.</li>
+	<li><em>&mu;</em> both the rate of immigration (e.g., by birth) and emigration
+		(e.g., by death) from the population. These rates are assumed to be equal
+		over the time period of interest (this simplifies the mathematics).</li>
+ 	<li><em>&beta;</em> is the disease transmission (infection) rate.
+		 The rate at which infectious individuals infect susceptible individuals. Once
+	 	infected, susceptible enter the exposed compartment.</li>
+	<li><em>&epsilon;</em> is the rate at which <em>Exposed</em> population
+		members become <em>Infectious</em>.</li>
+	<li>&gamma; is the rate at which individuals clear infection. In this model these
+		individuals cannot be re-infected for some period of time after infection (whether through
+		immunity or removal from the population).</li>
+	<li><em>&sigma;</em> is the immunity loss rate. This coefficient
+		determines the rate at which <em>Removed</em> population members lose
+		their immunity to the disease and become <em>Susceptible</em> again. For an SEIR
+		model, this rate is 0.
+	</li>	
+</ul>
+</p>
+Following basically the same derivation as outlined for the
+<a href="simath.html">SI</a>
+and
+<a href="sirmath.html">SIR</a>
+models, these become:
+
+<p>Let
+<ul>
+	<li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality
+	Rate</em>. This is the rate at which infected population members die
+	specifically due to the disease.</li>
+</ul>
+
+<p>We modify our model to include this additional rate
+
+<ul>
+	<li><em>&Delta;s = &mu; &minus; &beta;s i + &sigma;r &minus;
+	&mu; s</em></li>
+	<li><em>&Delta;e = &beta;s i &minus; &epsilon;e &minus; &mu;e</em></li>
+	<li><em>&Delta;i = &epsilon;e &minus; &gamma;i
+	&minus; (&mu;+&mu;<sub>i</sub>)i</em></li>
+	<li><em>&Delta;r = &gamma;i &minus; &sigma;r
+	&minus; &mu;r</em></li>
+</ul>
+</p>
+<h3>Spatial Adaptation</h3>
+<p>
+<ul>
+	<li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub> &minus;
+	&beta;<sub>l</sub> s i P<sub>l</sub> + &sigma; r P<sub>l</sub> &minus;
+	&mu; s P<sub>l</sub></em></li>
+	<li><em>&Delta;e P<sub>l</sub>= &beta;siP<sub>l</sub> &minus;
+	&epsilon;eP<sub>l</sub> &minus; &mu;eP<sub>l</sub></em></li>
+	<li><em>&Delta;iP<sub>l</sub> = &epsilon;e P<sub>l</sub>
+	&minus; &gamma; i P<sub>l</sub> &minus; (&mu;+&mu;<sub>i</sub>)i 
+	P<sub>l</sub></em></li>
+	<li><em>&Delta;r P<sub>l</sub>= &gamma;iP<sub>l</sub>
+	&minus; &sigma;r P<sub>l</sub>&minus; &mu;r P<sub>l</sub></em></li>
+</ul>
+<p>Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of <em>Susceptible</em>
+population members at location <em>l</em>. Similarly, let <em>I<sub>l</sub>
+= i P<sub>l</sub></em> be the number of population members at location <em>l</em>
+that are <em>Infectious</em>, and let <em>r
+P<sub>l</sub> </em>be the <em>Recovered</em> population. For readability, we
+drop the <em>l</em> subscript and substitute. </p>
+Substituting
+
+</p>
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sub>l</sub>
+	S i + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;E = &beta;S i &minus; &epsilon;E &minus; &mu;E</em></li>
+	<li><em>&Delta;I = &epsilon;E &minus; &gamma;I
+	&minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I&minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Continuing with
+<em> i = I/P<sub>l</sub></em>
+, we have:
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; (&beta;<sub>l</sub>/P<sub>l</sub>)SI
+	+ &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;E = (&beta;<sub>l</sub>/P<sub>l</sub>)SI
+	&minus; &epsilon;E &minus; &mu;E</em></li>
+	<li><em>&Delta;I = &epsilon;E &minus; &gamma;I
+	&minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Letting
+<em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta;
+(d<sub>l</sub>/(APDP<sub>l</sub>)) </em>
+gives:
+
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S I + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;E = &beta;<sup>*</sup> S I &minus; &epsilon;E
+	&minus; &mu;E</em></li>
+	<li><em>&Delta;I = &epsilon;E &minus; &gamma;I
+	&minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+TSF
+<ul>
+	<li><em>TSF<sub>l</sub> = ((S+E+I+R)/Area<sub>l</sub>) /
+	(P/Area(S+E+I+R))</em></li>
+	<li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+	<li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+	<li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+</ul>
+<h3>Neighboring Infectious Populations</h3>
+</p>
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S (I + I<sub>neighbor</sub>() ) + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;E = &beta;<sup>*</sup> S (I + I<sub>neighbor</sub>()
+	) &minus; &epsilon;E &minus; &mu;E</em></li>
+	<li><em>&Delta;I = &epsilon;E &minus; &gamma;I
+	&minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Specific statistics on the total number of births, deaths and deaths due
+to the disease can be computed by adding the appropriate terms of the
+equations above.
+<ul>
+	<li><em>B= &mu;(S + E + I + R)</em>, is the number of <em>Births</em>
+	</li>
+	<li><em>D = &mu;S + &mu;E + (&mu; + &mu;<sub>i</sub>)I
+	+ &mu;R</em>,is the total number of <em>Deaths</em></li>
+	<li><em>DD= &mu;<sub>i</sub> I</em>, is the number of
+	<em>Disease Deaths</em></li>
+</ul>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/simath.html b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/simath.html
new file mode 100644
index 0000000..86e0a50
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/simath.html
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SI Disease Model Mathematics</title>
+</head>
+<body>
+<h1>SI(S) Disease Model Mathematics</h1>
+<img src="images/sis.gif" align=CENTER HSPACE=10 VSPACE=10 border=0>
+<p>The basic <em>SI</em> (Susceptible, Infectious)
+and <em>SIS</em> (Susceptible, Infectious Susceptible) 
+disease models assume a uniform population 
+at a single location and that the
+population members are well "mixed", meaning that they are equally
+likely to meet and infect each other. This model, for a normalized
+population, can be defined by the two difference equations below:
+<ul>
+	<li><em>&Delta;s = &mu; &minus; &beta;s i + &gamma;i &minus;
+	&mu;s</em></li>
+	<li><em>&Delta;i = &beta;s i &minus; &gamma;i &minus; &mu;i</em></li>
+</ul>
+<p>Where:
+<ul>
+	<li><em>s</em> is the proportion of the population <em>Susceptible</em> to the disease. </li>
+	<li><em>i</em> is the proportion of the population that is <em>Infectious</em></li>
+	<li><em>&mu;</em> both the rate of immigration (e.g., by birth) and emigration
+		(e.g., by death) from the population. These rates are assumed to be equal
+		over the time period of interest (this simplifies the mathematics).</li>
+	<li><em>&beta;</em> is the disease transmission (infection) rate.
+	The rate at which infectious individuals infect susceptible individuals. Once
+	infected, susceptible individuals instantly become infectious themselves. In the STEM 
+	new disease wizard, <em>&beta;</em> is specified using  the "Transmission Rate" property.</li>
+	<li>&gamma; is the rate at which individuals clear infection. In this model these
+		individuals become susceptible again after clearing infection. In a pure <em>SI</em> model,
+		this rate is 0. In the STEM  new disease wizard, <em>&gamma;</em> is specified using 
+		the "Infectious Recovery Rate" property.</li>
+</ul>
+</p>
+<p>In the first equation, the <em>Susceptible</em> population
+increases when new members are born. This value is the birth rate &mu;
+multiplied by the total population which, since the values are normalized, is 1. It also increases 
+due to <em>Infectious</em> population members recovering. The <em>Susceptible</em> population
+decreases by members who die. That value is &mu;, the mortality rate,
+multiplied by the <em>Susceptible</em> population, <em>s</em>. The <em>Susceptible</em>
+population also decreases by having members become <em>infected</em>.
+The product of <em>&beta;</em> and <em>i</em> gives the normalized
+number of <em>Susceptible</em> population members that would become
+infected for each <em>Infectious</em> population member assuming all
+population members are in the <em>Susceptible</em> state. Multiplying
+that by <em>s</em>, the fraction that actually are <em>Susceptible</em>,
+gives the normalized amount that become <em>Infectious</em>.</p>
+<p>In the second equation, the <em>Infectious</em> population
+increases by the number of <em>Susceptible</em> population members that
+become <em>Infectious</em> (the first term). It also decreases by the
+proportion that <em>Recover</em> from the disease (middle term) and by
+the proportion that die (last term).</p>
+<p>Frequently, being infected by a disease will increase the
+likelihood that a population member will die. The model above needs to
+be enhanced to include the likelihood of a fatal infection and a
+potentially different rate at which infected members die.</p>
+<p>Let
+<ul>
+	<li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality
+	Rate</em>. This is the increased rate at which infected population members die
+	specifically due to the disease. The actual mortality rate at which infected population
+	members die is <em>&mu;+&mu;<sub>i</sub></em> (the background mortality rate plus 
+	the infectious mortality rate) </li>
+</ul>
+</p>
+
+<p>We modify our model to include this additional rate
+
+<ul>
+	<li><em>&Delta;s = &mu;P &minus; &beta;s i + &gamma;i
+	&minus; &mu; s</em></li>
+	<li><em>&Delta;i = &beta;s i &minus;
+	&gamma;i &minus; (&mu;+&mu;<sub>i</sub>)i</em></li>
+</ul>
+</p>
+<h3>Spatial Adaptation</h3>
+<p>The "SI" disease model computations in STEM enhance these
+equations by adapting them to populations that are spatially
+distributed. This relaxes the assumption that the populations are at a
+single location and opens up the possibility that different locations
+could have different areas and numbers of population members (i.e.,
+different population densities). To accommodate this situation STEM
+maintains separate disease state values for each location and uses
+unnormalized versions of the equations presented above. We develop those
+below.
+<p>To account for population differences at different locations, we
+define a new parameter <em>P<sub>l</sub></em> which is the number of
+population members at location <em>l</em> (Note: <em>P<sub>l</sub>
+= S<sub>l</sub> + I<sub>l</sub></em>). We also need to account for variability in the disease
+transmission (infection) rate, &beta;, due to potentially different
+population densities. This modification is based upon the assumption
+that locations with greater population densities will have a higher
+effective transmission rates than locations with lower densities (i.e.,
+one value can't be used for all locations). Thus, we need to replace the
+<em>&beta;</em> in the non-spatial versions of the equations with a <em>&beta;
+<sub>l</sub></em> that is specific to the location.</p>
+Making the substitution for
+<em>&beta;</em>
+and multiply both sides of the equations by
+<em>P<sub>l</sub></em>
+, we obtain:
+</p>
+
+<ul>
+	<li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub> &minus;
+	&beta;<sub>l</sub> s i P<sub>l</sub> + &gamma; i P<sub>l</sub>
+	&minus; &mu; s P<sub>l</sub></em></li>
+	<li><em>&Delta;i P<sub>l</sub> = &beta;<sub>l</sub>
+	s i P<sub>l</sub> &minus; &gamma; i P<sub>l</sub> &minus;
+	(&mu;+&mu;<sub>i</sub>i P<sub>l</sub></em></li>
+	</li>
+</ul>
+
+We choose the value for
+<em>&beta;<sub>l</sub></em>
+to be original
+<em>&beta;</em>
+scaled by the ratio between the population density at the location and
+the average population density of all locations.
+<ul>
+	<li><em> &beta;<sub>l</sub> = &beta; d<sub>l</sub>/APD</em></li>
+</ul>
+Where
+<em>d<sub>l</sub></em>
+is the population density at location
+<em>l</em>
+, and
+<em>APD</em>
+is the average population density for all locations.
+
+<p>Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of <em>Susceptible</em>
+population members at location <em>l</em>. , let <em>I<sub>l</sub>
+= i P<sub>l</sub></em> be the number of population members at location <em>l</em>
+that are <em>Infectious</em> (both states combined). For readability, we
+drop the <em>l</em> subscript and substitute.</p>
+
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sub>l</sub>
+	S i + &gamma;I  &minus; &mu; S</em></li>
+	<li><em>&Delta;I = &beta;<sub>l</sub> S i
+	&minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I  </em></li>
+</ul>
+
+Continuing with
+<em> i = I/P<sub>l</sub></em>
+, we have:
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; (&beta;<sub>l</sub>/P<sub>l</sub>)
+	S I + &gamma;I &minus; &mu; S</em></li>
+	<li><em>&Delta;I = (&beta;<sub>l</sub>/P<sub>l</sub>)
+	S I &minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+</ul>
+
+Letting
+<em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta;
+(d<sub>l</sub>/(APDP<sub>l</sub>)) </em>
+gives:
+
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S I + &gamma;I &minus; &mu; S</em></li>
+	<li><em>&Delta;I = &beta;<sup>*</sup> S I
+	&minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+</ul>
+
+<p>Computing <em>&beta;<sup>*</sup></em> is straightforward. Let <em>TSF<sub>l</sub>
+= (d<sub>l</sub>/(APDP<sub>l</sub>)</em> be the <em>transmission scale
+factor</em> at location <em>l</em>.</p>
+<p>Thus
+<ul>
+	<li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+</ul>
+</p>
+<p>Substituting <em>P<sub>l</sub> = S + I</em>, <em>APD =
+P/Area</em> and <em>d<sub>l</sub> = (S+I)/Area<sub>l</sub></em>, where <em>P</em>
+is the total population for all locations, <em>Area<sub>l</sub></em> is
+the area of location <em>l</em>, and <em>Area</em> is the total area of
+all locations, we get:
+<ul>
+	<li><em>TSF<sub>l</sub> = ((S+I)/Area<sub>l</sub>) / (P/Area
+	(S+I))</em></li>
+	<li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+	<li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+	<li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+</ul>
+So the
+<em>TSF<sub>l</sub></em>
+is the product of the reciprocal of the total population of all
+locations and the constant ratio between the area of the location and
+the total area of all locations. The former can be computed by
+accumulating the population of all locations as they are generated and
+the later ratio can be computed once at the start of the simulation.
+</p>
+
+<h3>Neighboring Infectious Populations</h3>
+<p>The extension of the non-spatial model into a spatial one in STEM
+also needs to account for infectious population members that reside in a
+location's "neighbors". Consider a location with no infections that is
+physically adjacent to several locations that have large infectious
+populations. This physical adjacency would naturally lead to
+population-to-population contact and eventually to disease transmission.
+We need to further extend the equations we are here to incorporate this
+aspect of a spatially distributed population.</p>
+<p>In STEM, a location has another location as a neighbor <em>Relationship</em>
+that links it to that location. If the <em>Relationship</em> represents
+the exchange of of population members (i.e., some kind of transportation
+relationship like pathways, roads or air travel) then it would be
+possible for <em>Infectious</em> population members from a neighbor to
+"visit" a location. We need to account for this potential by increasing
+the "effective" <em>Infectious</em> population at a location when doing
+our computations. Each Relationship has a rate at which population
+members travel from one location to another. It is assumed that the
+visitors would have the same level of "infectious contact" as an
+infectious member of the population at the current location (i.e., that
+they could could be counted as an infectious member of the population at
+the current location).</p>
+<p>The equations become:</p>
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S (I + I<sub>neighbor</sub>() ) + &gamma;I &minus; &mu; S</em>
+	</li>
+	<li><em>&Delta;I = &beta;<sup>*</sup> S (I
+	+ I<sub>neighbor</sub>() ) &minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I
+	</em></li>
+</ul>
+</p>
+<p>Where
+<ul>
+	<li><em>I<sub>neighbor</sub>() = (&sum; <sub>m</sub> I <sub>m</sub>mixingfactor)/(&sum;<sub>m</sub>P<sub>m</sub>mixingfactor)</em>
+	is the number of <em>Infectious</em> visitors from neighbor <em>m</em>.</li>
+	<li><em>mixingfactor</em> is a constant that varies depending on the type of relationship. For neighboring locations
+	(i.e. people migrating across border) STEM uses the "Phys.Adj.Inf.Proportion" property on the new disease 
+	wizard to specify the mixing factor. For road transportation, STEM uses "Road.Net.Inf.Proportion" to 
+	specify the mixing factor for roads between locations.</li>
+	<li>P<sub>m</sub> is the number of population members at neighbor
+	<em>m</em></li>
+	<li>I<sub>m</sub> is the number of <em>Infectious</em> population
+	members at neighbor <em>m</em></li>
+</ul>
+</p>
+<p>Specific statistics on the total number of births, deaths and
+deaths due to the disease can be computed by adding the appropriate
+terms of the equations above.
+<ul>
+	<li><em>B= &mu; (S + I)</em>, is the number of <em>Births</em></li>
+	<li><em>D = &mu; S + (&mu; + &mu;<sub>i</sub> )</em>,is the total number of <em>Deaths</em></li>
+	<li><em>DD= &mu;<sub>i</sub> I</em>, is the number of
+	<em>Disease Deaths</em></li>
+</ul>
+</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/sirmath.html b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/sirmath.html
new file mode 100644
index 0000000..5317f37
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/epidemiologicalmodeling/sirmath.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SIR Disease Model Mathematics</title>
+</head>
+<body>
+<h1>SIR(S) Disease Model Mathematics</h1>
+<img src="images/sirs.gif" align=CENTER HSPACE=10 VSPACE=10 border=0 width=80%>
+
+<p>The basic <em>SIR</em> (Susceptible, Infectious, Removed)
+and  <em>SIRS</em> (Susceptible, Infectious, Recovered, Susceptible)
+disease models assume a uniform population at a single location and that
+the population members are well "mixed", meaning that they are equally
+likely to meet and infect each other. This model, for a normalized
+population, is defined by the three equations below:
+<ul>
+	<li><em>&Delta;s = &mu; &minus; &beta;s i + &sigma;r &minus;
+	&mu;s</em></li>
+	<li><em>&Delta;i = &beta;s i &minus; &gamma;i &minus; &mu;i</em></li>
+	<li><em>&Delta;r = &gamma;i &minus; &sigma;r &minus; &mu;r</em></li>
+</ul>
+
+<p>Where:
+<ul>
+	<li><em>s</em> is the proportion of the population that is
+		<em>Susceptible</em></li>
+	<li><em>i</em> is the proportion of the population
+		that is <em>Infectious</em></li>
+	<li><em>r</em> is the proportion of the population
+		that is <em>Removed</em> from the infectious and susceptible populations, 
+		and therefore cannot be infected.</li>
+	<li><em>&mu;</em> both the rate of immigration (e.g., by birth) and emigration
+		(e.g., by death) from the population. These rates are assumed to be equal
+		over the time period of interest (this simplifies the mathematics).</li>
+	<li><em>&beta;</em> is the disease transmission (infection) rate.
+	 The rate at which infectious individuals infect susceptible individuals. Once
+	 infected, susceptible individuals instantly become infectious themselves.</li>
+	<li>&gamma; is the rate at which individuals clear infection. In this model these
+		individuals cannot be re-infected for some period of time after infection (whether through
+		immunity or removal from the population).</li>
+	<li><em>&sigma;</em> is the immunity loss rate. This coefficient
+		determines the rate at which <em>Removed</em> population members lose
+		their immunity to the disease and become <em>Susceptible</em> again. For an SIR
+		model, this rate is 0.
+	</li>
+</ul>
+</p>
+Following basically the same derivation as outlined for the
+<a href="simath.html">SI</a>
+model, these become:
+
+<p>Let
+<ul>
+	<li><em>&mu;<sub>i</sub></em> be the <em>Infectious Mortality
+	Rate</em>. This is the increased rate at which infected population members die
+	specifically due to the disease.</li>
+</ul>
+</p>
+<p>We modify our model to include this additional rate.
+
+<ul>
+	<li><em>&Delta;s = &mu; &minus; &beta;s i + &sigma;r &minus;
+	&mu; s</em></li>
+	<li><em>&Delta;i = &beta;s i &minus;
+	&gamma;i &minus; (&mu;+&mu;<sub>i</sub>)i</em></li>
+	<li><em>&Delta;r = &gamma;i &minus; &sigma;r
+	&minus; &mu;r</em></li>
+</ul>
+</p>
+<h3>Spatial Adaptation</h3>
+<p>
+<ul>
+	<li><em>&Delta;s P<sub>l</sub>= &mu;P<sub>l</sub> &minus;
+	&beta;<sub>l</sub> s i P<sub>l</sub> + &sigma; r P<sub>l</sub> &minus;
+	&mu; s P<sub>l</sub></em></li>
+	<li><em>&Delta;i P<sub>l</sub> = &beta;<sub>l</sub>
+	s i P<sub>l</sub> &minus; &gamma; i P<sub>l</sub> &minus;
+	(&mu;+&mu;<sub>i</sub>)i P<sub>l</sub></em></li>
+	<li><em>&Delta;r P<sub>l</sub>= &gamma;iP<sub>l</sub>
+	&minus; &sigma;r P<sub>l</sub>&minus; &mu;r P<sub>l</sub></em></li>
+</ul>
+
+<p>Let <em>S<sub>l</sub> = s P<sub>l</sub></em> be the number of <em>Susceptible</em>
+population members at location <em>l</em>. Similarly, let <em>I<sub>l</sub>
+= i P<sub>l</sub></em> be the number of population members at location <em>l</em>
+that are <em>Infectious</em>, and let <em>r
+P<sub>l</sub></em> be the <em>Recovered</em> population. For readability, we
+drop the <em>l</em> subscript and substitute. </p>
+Substituting
+
+</p>
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sub>l</sub>
+	S i + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;I = &beta;<sub>l</sub> S i
+	&minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Continuing with
+<em> i = I/P<sub>l</sub></em>
+, we have:
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; (&beta;<sub>l</sub>/P<sub>l</sub>)
+	S I + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;I = (&beta;<sub>l</sub>/P<sub>l</sub>)
+	S I &minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Letting
+<em>&beta;<sup>*</sup> = &beta;<sub>l</sub>/P<sub>l</sub> = &beta;
+(d<sub>l</sub>/(APDP<sub>l</sub>)) </em>
+gives:
+
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S I + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;I = &beta;<sup>*</sup> S I
+	&minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I </em></li>
+	<li><em>&Delta;R= &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+TSF
+<ul>
+	<li><em>TSF<sub>l</sub> = ((S+I+R)/Area<sub>l</sub>) /
+	(P/Area(S+I+R))</em></li>
+	<li><em>TSF<sub>l</sub> = (1/Area<sub>l</sub>) / (P/Area )</em></li>
+	<li><em>TSF<sub>l</sub> = Area / (P *Area<sub>l</sub> )</em></li>
+	<li><em>TSF<sub>l</sub> = (1 / P)* (Area/Area<sub>l</sub> )</em></li>
+</ul>
+<h3>Neighboring Infectious Populations</h3>
+</p>
+<ul>
+	<li><em>&Delta;S = &mu;P<sub>l</sub> &minus; &beta;<sup>*</sup>
+	S (I + I<sub>neighbor</sub>() ) + &sigma;R &minus; &mu; S</em></li>
+	<li><em>&Delta;I = &beta;<sup>*</sup> S (I
+	+ I<sub>neighbor</sub>() ) &minus; &gamma;I &minus; (&mu;+&mu;<sub>i</sub>)I
+	</em></li>
+	<li><em>&Delta;R = &gamma;I &minus; &sigma;R
+	&minus; &mu;R</em></li>
+</ul>
+
+Specific statistics on the total number of births, deaths and deaths due
+to the disease can be computed by adding the appropriate terms of the
+equations above.
+<ul>
+	<li><em>B= &mu; (S + I + R)</em>, is the number of <em>Births</em>
+	</li>
+	<li><em>D = &mu; S + (&mu; + &mu;<sub>i</sub> )I + &mu;R</em>,is the total number of <em>Deaths</em></li>
+	<li><em>DD= &mu;<sub>i</sub> I</em>, is the number of
+	<em>Disease Deaths</em></li>
+</ul>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/.cvsignore b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/.cvsignore
new file mode 100644
index 0000000..98e6ef6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/.cvsignore
@@ -0,0 +1 @@
+*.db
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1.png b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1.png
new file mode 100644
index 0000000..0b3cec9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1_cropped.png b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1_cropped.png
new file mode 100644
index 0000000..c82f26a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig1_cropped.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig2.png b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig2.png
new file mode 100644
index 0000000..4f1afc4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/Fig2.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig1.jpg b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig1.jpg
new file mode 100644
index 0000000..f180ac6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig2.jpg b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig2.jpg
new file mode 100644
index 0000000..db929df
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig3.jpg b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig3.jpg
new file mode 100644
index 0000000..b59440c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig4.jpg b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig4.jpg
new file mode 100644
index 0000000..7dd24ed
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig4.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig5.jpg b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig5.jpg
new file mode 100644
index 0000000..db4c254
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/img/quickstart/fig5.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/gettingstarted/quickstart.html b/org.eclipse.stem.doc/help/html/gettingstarted/quickstart.html
new file mode 100644
index 0000000..9181a92
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/gettingstarted/quickstart.html
@@ -0,0 +1,56 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>STEM Quick Start</title>
+</head>
+
+<body>
+<h1>STEM Quick Start</h1>
+<p>When you first start STEM it will display the <a href="../interface/perspectives/simulation.html">Simulation
+perspective</a> containing a <a	href="../interface/views/scenariosview.html">Scenarios view</a>. This
+view contains a hierarchical display of the <a
+	href="../concepts/modelingframework.html#scenario"> Scenarios</a> that
+are built in to STEM and are ready to start a Simulation. See
+Figures&nbsp;1 and 2 below.
+<p>
+<a
+	href="../interface/perspectives/img/simulationperspective.png"><img
+	src="../interface/perspectives/img/simulationperspective.png" style="width:800px"></a>
+<p>Figure 1.
+<p>Expand the tree displayed in the <a
+	href="../interface/views/scenariosview.html">Scenarios view</a> to
+display the available <a
+	href="../concepts/modelingframework.html#scenario"> Scenarios</a>.
+Select one of the displayed <a
+	href="../concepts/modelingframework.html#scenario"> Scenarios</a> by
+"double-clicking" on its title, Figure&nbsp;2.
+<a href="img/quickstart/Fig1_cropped.png"><img
+	src="img/quickstart/Fig1_cropped.png"></a>
+<p>Figure 2
+<p>STEM will immediately begin reading in
+the data that defines the Simulation. It's progress is displayed at the
+bottom of the window. The amount of time it takes to read in the data
+for the Simulation will depend upon the size of the model and the
+characteristics of the host computer. On a fast computer with more than
+2 gigabytes of RAM and fast disks the <a
+	href="../concepts/modelingframework.html#scenario"> Scenario</a>
+illustrated in Figure&nbsp;3, below, will load and began execution in
+less than 5 seconds. On a smaller slower machine (e.g., a small laptop
+with slow disks), this could take 30 seconds or longer).</p>
+
+<a href="img/quickstart/Fig2.png"><img
+	src="img/quickstart/Fig2.png" style="width:800px"></a></center>
+</p>
+<p>Figure 3
+<p>In Figure&nbsp;3, we see the state of the simulation after about 103 iterations. In this case
+the disease is spreading accross common borders from starting in the north
+and moving south.
+<p>
+The "Simulation control" area in the lower left is used to "Start", "Pause", "Reset",
+"Step" and "Stop" all the active Simulations. 
+<p>
+</p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/index.html b/org.eclipse.stem.doc/help/html/index.html
new file mode 100644
index 0000000..eef7603
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/index.html
@@ -0,0 +1,15 @@
+<HTML>
+<HEAD> 
+<title>STEM User Help</title>
+</HEAD> 
+
+  <FRAMESET cols="25%,75%">
+      <FRAME src="toc.html">
+      <FRAME name="main">
+  </FRAMESET>
+
+<BODY>
+<h2>This requires a web client with FRAME support</h2>
+</BODY>
+
+</HTML>
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/editorsoverview.html b/org.eclipse.stem.doc/help/html/interface/editors/editorsoverview.html
new file mode 100644
index 0000000..34cb5bd
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/editorsoverview.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Overview</title>
+</head>
+
+<body>
+<h1>Editors</h1>
+<p>The STEM interface includes a number of different "Editors". Each
+editor facilitates the modification of a component of a STEM <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>.
+<ul>
+    <li><a href="experimenteditor.html">Experiment Editor</a></li>
+	<li><a href="grapheditor.html">Graph Editor</a></li>
+	<li><a href="modeleditor.html">Model Editor</a></li>
+	<li><a href="modifiereditor.html">Modifier Editor</a></li>
+	<li><a href="predicateeditor.html">Predicate Editor</a></li>
+	<li><a href="scenarioeditor.html"> Scenario Editor</a></li>
+	<li><a href="sequencereditor.html"> Sequencer Editor</a></li>
+	<li><a href="triggereditor.html"> Trigger Editor</a></li>
+</ul>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/experimenteditor.html b/org.eclipse.stem.doc/help/html/interface/editors/experimenteditor.html
new file mode 100644
index 0000000..b05b48c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/experimenteditor.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Experiment Editor</title>
+</head>
+<body>
+<h1>Experiment Editor</h1>
+<p>The Experiment editor is used to edit <a href="../../concepts/modelingframework.html#experiment"> Experiments</a>. It
+supports drag and drop, and undo.</p>
+<p>A <a href="../../concepts/modelingframework.html#experiment">
+Experiment</a> can be dragged from a project's collection or from the <a
+	href="../views/experimentsview.html"> Experiments View</a>. Similarly, a <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a> can be
+dragged from a projects collection or from the <a
+	href="../views/scenariosview.html"> Scenarios View</a>, and 
+	a <a href="../../concepts/modelingframework.html#modifier"> Modifier</a> can be
+dragged from a projects collection.</p>
+<img src="img/experimenteditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/grapheditor.html b/org.eclipse.stem.doc/help/html/interface/editors/grapheditor.html
new file mode 100644
index 0000000..d2f3ab5
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/grapheditor.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Graph Editor</title>
+</head>
+<body>
+<h1>Graph Editor</h1>
+<p>The Graph editor is used to modify <a href="../../concepts/modelingframework.html#graph"> Graphs</a>. It
+supports drag and drop, and undo.</p>
+<img src="img/grapheditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/experimenteditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/experimenteditor1.jpg
new file mode 100644
index 0000000..406a14f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/experimenteditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/grapheditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/grapheditor1.jpg
new file mode 100644
index 0000000..0577316
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/grapheditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/modeleditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/modeleditor1.jpg
new file mode 100644
index 0000000..bf318f4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/modeleditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/modifiereditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/modifiereditor1.jpg
new file mode 100644
index 0000000..b9e7b23
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/modifiereditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/predicateeditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/predicateeditor1.jpg
new file mode 100644
index 0000000..ca98c3d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/predicateeditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/scenarioeditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/scenarioeditor1.jpg
new file mode 100644
index 0000000..99e5999
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/scenarioeditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/sequencereditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/sequencereditor1.jpg
new file mode 100644
index 0000000..e51e33d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/sequencereditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/img/triggereditor1.jpg b/org.eclipse.stem.doc/help/html/interface/editors/img/triggereditor1.jpg
new file mode 100644
index 0000000..481b62a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/img/triggereditor1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/modeleditor.html b/org.eclipse.stem.doc/help/html/interface/editors/modeleditor.html
new file mode 100644
index 0000000..751d6a3
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/modeleditor.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Model Editor</title>
+</head>
+<body>
+<h1>Model Editor</h1>
+<p>The Model editor is used to edit <a href="../../concepts/modelingframework.html#model"> Models</a>. It
+supports drag and drop, and undo.</p>
+<p>A <a href="../../concepts/modelingframework.html#model">
+Model</a> can be dragged from a project's collection or from the <a
+	href="../views/modelsview.html"> Models View</a>. Similarly, a <a
+	href="../../concepts/modelingframework.html#graph"> Graph</a> can be
+dragged from a projects collection or from the <a
+	href="../views/graphsview.html"> Graphs View</a>.</p>
+<img src="img/modeleditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/modifiereditor.html b/org.eclipse.stem.doc/help/html/interface/editors/modifiereditor.html
new file mode 100644
index 0000000..e4f2ab6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/modifiereditor.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Modifier Editor</title>
+</head>
+<body>
+<h1>Modifier Editor</h1>
+<p>The Modifier editor is used to edit <a href="../../concepts/modelingframework.html#modifier"> Modifiers</a>. 
+</p>
+<p>
+<img src="img/modifiereditor1.jpg" />
+</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/predicateeditor.html b/org.eclipse.stem.doc/help/html/interface/editors/predicateeditor.html
new file mode 100644
index 0000000..1610160
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/predicateeditor.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Predicate Editor</title>
+</head>
+<body>
+<h1>Predicate Editor</h1>
+<p>The Predicate editor is used to edit <a href="../../concepts/modelingframework.html#predicate"> Predicates</a>. 
+</p>
+<img src="img/predicateeditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/scenarioeditor.html b/org.eclipse.stem.doc/help/html/interface/editors/scenarioeditor.html
new file mode 100644
index 0000000..3843b2a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/scenarioeditor.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Scenario Editor</title>
+</head>
+<body>
+<h1>Scenario Editor</h1>
+<p>The Scenario editor is used to edit <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>.
+It supports drag and drop, and undo.</p>
+<p>A <a href="../../concepts/modelingframework.html#model">
+Model</a> can be added to a <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a> by
+dragging it from either a project's collection of <a
+	href="../../concepts/modelingframework.html#model"> Models</a>, or from
+the set in the <a href="../views/modelsview.html"> Models View</a>.
+Similarly, any number of <a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>
+can be dragged from a project's collection or from the set of Built-in <a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>
+from the <a href="../views/decoratorsview.html">Decorators View</a> or
+from the <a href="../views/diseasesview.html">Diseases View</a>. As
+well, a <a href="../../concepts/modelingframework.html#sequencer">
+Sequencer</a> can be added to a <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a> by
+dragging it from a project's collection or from the <a
+	href="../views/sequencersview.html">Sequencers view</a>.</p>
+<img src="img/scenarioeditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/sequencereditor.html b/org.eclipse.stem.doc/help/html/interface/editors/sequencereditor.html
new file mode 100644
index 0000000..b9a297e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/sequencereditor.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Sequencer Editor</title>
+</head>
+<body>
+<h1>Sequencer Editor</h1>
+<p>The Sequencer editor is used to edit <a href="../../concepts/modelingframework.html#sequencer"> Sequencers</a>. Modifications to the
+Sequencer are done through the  <a
+    href="../views/propertiesview.html"> Properties View</a>
+<img src="img/sequencereditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/editors/triggereditor.html b/org.eclipse.stem.doc/help/html/interface/editors/triggereditor.html
new file mode 100644
index 0000000..9796433
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/editors/triggereditor.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Experiment Editor</title>
+</head>
+<body>
+<h1>Trigger Editor</h1>
+<p>The Trigger editor is used to edit <a href="../../concepts/modelingframework.html#trigger"> Trigger</a>. It
+supports drag and drop, and undo.</p>
+<p>A <a href="../../concepts/modelingframework.html#predicate">
+Predicate</a> can be dragged from a project's collection. Similarly, 
+	a <a href="../../concepts/modelingframework.html#modifier"> Modifier</a> can be
+dragged from a projects collection.</p>
+<img src="img/triggereditor1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/img/fig1a.jpg b/org.eclipse.stem.doc/help/html/interface/img/fig1a.jpg
new file mode 100644
index 0000000..8bc7f10
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/img/fig1a.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/img/fig2a.jpg b/org.eclipse.stem.doc/help/html/interface/img/fig2a.jpg
new file mode 100644
index 0000000..3bbf2a2
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/img/fig2a.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/interfaceoverview.html b/org.eclipse.stem.doc/help/html/interface/interfaceoverview.html
new file mode 100644
index 0000000..21060e0
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/interfaceoverview.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Interface Overview</title>
+</head>
+
+<body>
+<center>
+<h1>STEM Interface Overview</h1>
+</center>
+<p>The STEM user interface is organized into three "perspectives",
+<a href="perspectives/designer.html">Designer perspective </a>,
+a <a href="perspectives/simulation.html">Simulation perspective</a>
+and an <a href="perspectives/analysis.html">Analysis perspective</a>. A
+perspective is a collection of "editors", "views", "menu bar", "tool
+bar" and a "perspective bar". An editor is a sub-window used to
+interactively modify one of STEM's components while a view is a
+sub-window used to display information to a user. The menu bar contains
+high-level menus for options and operations that can be selected by a
+user, while the tool bar contains icons that if selected (clicked on)
+cause STEM to perform actions. The perspective bar is used to switch
+between STEM's perspectives. These are illustrated in the image in
+Figure 1 below.
+<p>
+<center><a href="img/fig1a.jpg"><img src="img/fig1a.jpg"></a></center>
+<p>Similarly in the image in Figure 2 below, is STEM's <a
+	href="perspectives/simulation.html">Simulation perspective</a>. Note
+that it does not have an editor area.
+<center><a href="img/fig2a.jpg"><img src="img/fig2a.jpg"></a></center>
+A user can switch back and forth between the two perspectives by
+clicking on them in the perspective bar. The views are grouped together
+in different areas of the perspective. Clicking on the title of a view
+displayed on its tab will bring that view to the foreground. Views can
+be closed by clicking on the "X" next to their name, or opened from the
+"Window" menu in the menu bar. Any view can be displayed in any
+perspective, though each perspective has a default set it displays when
+first created.
+</p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/analysis.html b/org.eclipse.stem.doc/help/html/interface/perspectives/analysis.html
new file mode 100644
index 0000000..52644f3
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/analysis.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Designer</title>
+</head>
+
+<body>
+<h1>Analysis Perspective</h1>
+<p>The Analysis <span style="font-size: 11.0pt; color: black">and Validation 
+Perspective allows users to perform analysis, fitting, model comparison, and 
+validation across multiple simulations and data sets. The Analysis perspective 
+uses <br>
+data from either complete simulation runs or data imported into STEM. The latter 
+could be real bio-surveillance data in the appropriate CSV format or data from a 
+completed simulation. </span>
+<p>The purpose of this perspective is to hold the windows (and associated tools) that 
+support various analysis operations on existing data. If the perspective is not 
+visible once you starT<br>
+STEM, just go to the menu bar and click:<br>
+<br>
+&gt;Window&gt;Open Perspective&gt;Analysis<p>
+<span style="font-size: 11.0pt; color: black">By default the
+Analysis perspective contains three views. </span>&nbsp;However you can close any of these views and open others.
+<h3>Default Views</h3>
+<ul>
+	<li><b>Tabbed views</b>The tabbed view holds the following views.</li>
+	<ul>
+		<li><a href="../views/Estimatorview.html">Estimatorview</a> Used to 
+		estimate model parameters from an existing data set (simulated or real).<li>
+		<a href="../views/ScenarioComparisonview.html">ScenarioComparisonview</a> 
+		Measures the RMS difference between two existing data sets (simulated or 
+		real).<li><a href="../views/Lyapunovview.html">Lyapunovview</a> 
+		Comparison of two existing scenarios based on their trajectories in a 
+		Lyapunov Phase Space<li><a href="../views/Epidemicview.html">
+		Epidemicview</a> Aggregates data across locations for a given epidemic 
+		scenario and plots the aggregated data and disease incidence.</ul>
+</ul>
+<p><span style="font-size: 11.0pt; color: black"><br>
+&nbsp;</span><p> <br>
+<img border="0" src="img/analysisperspective.jpg" width="1000" height="644">
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/designer.html b/org.eclipse.stem.doc/help/html/interface/perspectives/designer.html
new file mode 100644
index 0000000..8e2001c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/designer.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Designer</title>
+</head>
+
+<body>
+<h1>Designer Perspective</h1>
+<p>The Designer perspective is loaded the first time that you load
+STEM with a set of default Views. Subsequent uses of STEM will load the
+perspectives and views that you last used. <br>
+<img src="img/designerperspective.png" >
+<p>The purpose of this perspective is to hold the windows that are
+used in building a <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>
+that you will then run. You can also use it to start an existing
+simulation.
+<p>To start an existing simulation, select the <a
+	href="../views/scenarioview.html">Scenario View</a>. It will show an
+existing projects and if you select a project, it will display the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a> for
+that project. Double click the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a> to
+select it and start the simulation running. STEM will automatically
+switch to the <a href="simulation.html">Simulation Perspective</a>
+<p>The following views are displayed for the Designer Perspective by
+default. However you can close any of these views and open others.
+<h3>Default Views</h3>
+<ul>
+	<li><a href="../views/projectview.html">STEM Project Explorer</a></li>
+	This view is used to build new STEM projects.
+	<li><b>Tabbed views</b>The tabbed view holds the following views.</li>
+	<ul>
+		<li><a href="../views/scenarioview.html">Scenario View</a></li>
+		When selected this view will display a list of existing projects with
+		their
+		<a href="../../concepts/modelingframework.html#scenario">
+		Scenarios</a>
+		.
+		<li><a href="../views/modelsview.html">Models View</a></li>
+		<li><a href="../views/graphsview.html">Graphs View</a></li>
+		<li><a href="../views/sequencerview.html">Sequencer View</a></li>
+		<li><a href="../views/decoratorsview.html">Decorators View</a></li>
+		<li><a href="../views/propertiesview.html">Properties View</a></li>
+		<li><a href="../views/tasksview.html">Tasks View</a></li>
+		<li><a href="../views/error_log.html">Error Log View</a></li>
+	</ul>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/img/.cvsignore b/org.eclipse.stem.doc/help/html/interface/perspectives/img/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/img/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/img/analysisperspective.jpg b/org.eclipse.stem.doc/help/html/interface/perspectives/img/analysisperspective.jpg
new file mode 100644
index 0000000..a872d77
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/img/analysisperspective.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.jpg b/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.jpg
new file mode 100644
index 0000000..583ea02
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.png b/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.png
new file mode 100644
index 0000000..99ccbd9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/img/designerperspective.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/img/simulationperspective.png b/org.eclipse.stem.doc/help/html/interface/perspectives/img/simulationperspective.png
new file mode 100644
index 0000000..07c7808
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/img/simulationperspective.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/perspectivesoverview.html b/org.eclipse.stem.doc/help/html/interface/perspectives/perspectivesoverview.html
new file mode 100644
index 0000000..3181df7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/perspectivesoverview.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Overview</title>
+</head>
+
+<body>
+<h1>Perspectives</h1>
+<p>
+STEM is an Eclipse Rich Client application. As such it is organized into
+&quot;perspectives&quot; each of which contains one or more
+<a href="../views/viewsoverview.html">views</a>. <br>
+The contents of a perspective can be customized by the user but the default
+perspectives are designed to support different uses of the STEM application.<p>
+The STEM system contains three "perspectives":
+<ul>
+	<li>The <a href="analysis.html">Analysis</a> perspective is use to analyze
+	epidemic data&nbsp; gathered from completed simulations or from import
+	public health reports. It also supports comparison and validation of
+	multiple data sets.</li>
+	
+	<li>The <a href="designer.html"> Designer</a> perspective is used
+	to design and create new STEM Simulations.</li>
+	
+	<li>The <a href="simulation.html"> Simulation</a> perspective is
+	used to start,&nbsp; view, and control running STEM Simulations.</li>
+
+</ul>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/perspectives/simulation.html b/org.eclipse.stem.doc/help/html/interface/perspectives/simulation.html
new file mode 100644
index 0000000..7c6772d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/perspectives/simulation.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Simulation Perspective</title>
+</head>
+
+<body>
+<h1>Simulation Perspective</h1>
+<p>The Simulation perspective is loaded when a simulation is
+activated from the <a href="designer.html">Designer perspective</a> or
+if the user selects it. It is started with a set of default Views.
+Subsequent uses of STEM will load the perspectives and views that you
+last used. <br>
+<img src="img/simulationperspective.png">
+<p>The purpose of this perspective is to hold the windows that are
+used to display the progress of a simulation as it runs. The following
+Views are displayed by default. However you can close any of these views
+and open others.
+<h3>Default Views</h3>
+<ul>
+	<li><a href="../views/mapview.html">Map View</a></li>
+	This view is used to graphically display the state of the simulation.
+	<li><b>Tabbed views</b>The tabbed view holds the following views.</li>
+	<ul>
+		<li><a href="../views/scenarioview.html">Scenario View</a> When
+		selected this view will display a list of existing projects. Selecting
+		the project will display the <a
+			href="../../concepts/modelingframework.html#scenario"> Scenario</a>
+		which can be selected to run the simulation.</li>
+		<li><a href="../views/controlview.html">Simulation Control
+		View</a></li>
+		<li><a href="../views/modelsview.html">Models View</a></li>
+		<li><a href="../views/graphsview.html">Graphs View</a></li>
+		<li><a href="../views/sequencerview.html">Sequencer View</a></li>
+		<li><a href="../views/decoratorsview.html">Decorators View</a></li>
+		<li><a href="../views/propertiesview.html">Properties View</a></li>
+		<li><a href="../views/tasksview.html">Tasks View</a></li>
+		<li><a href="../views/error_log.html">Error Log View</a></li>
+	</ul>
+	<h3>Optional Views</h3>
+	<p>The following views can be selected from the <b>Window->Other</b>
+	menu.
+	<ul>
+		<li><a href="../views/ge.html">Google Earth Interface</a></li>
+		This view is used to project the spread of disease on the 3D
+		GoogleEarth image.
+	</ul>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/loggingpreferences.png b/org.eclipse.stem.doc/help/html/interface/preferences/img/loggingpreferences.png
new file mode 100644
index 0000000..73b34fa
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/loggingpreferences.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgeadvanced.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgeadvanced.jpg
new file mode 100644
index 0000000..c12a434
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgeadvanced.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgetoplevel.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgetoplevel.jpg
new file mode 100644
index 0000000..eb35c18
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesgetoplevel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapdatamgnt.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapdatamgnt.jpg
new file mode 100644
index 0000000..1062641
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapdatamgnt.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapview.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapview.jpg
new file mode 100644
index 0000000..03250d7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesmapview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.jpg
new file mode 100644
index 0000000..353d16c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.png b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.png
new file mode 100644
index 0000000..2032fdc
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesopenmenu.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.jpg
new file mode 100644
index 0000000..6056e9a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.png b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.png
new file mode 100644
index 0000000..6ad9e92
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencessimmanagement.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.jpg
new file mode 100644
index 0000000..4bb689f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.png b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.png
new file mode 100644
index 0000000..0154933
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencestoplevel.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesvisualizationtoplevel.jpg b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesvisualizationtoplevel.jpg
new file mode 100644
index 0000000..6ce4da0
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/preferencesvisualizationtoplevel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/img/solverpreferences.png b/org.eclipse.stem.doc/help/html/interface/preferences/img/solverpreferences.png
new file mode 100644
index 0000000..e4d76a7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/img/solverpreferences.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgeadvanced.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgeadvanced.html
new file mode 100644
index 0000000..7f7eec4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgeadvanced.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Google Earth Advanced</title>
+</head>
+<body>
+<h1>Google Earth Advanced</h1>
+<ul>
+	<li><em>"Allow debug output on Console"</em> 
+	    <br>This is used for problem determination.
+.       (Default:&nbsp;False)</li>
+	<li><em>"Use GoogleEarth Bounding Box to filter output"</em>
+	    <br>This will improve performance because only data is sent to GoogleEarth
+	    for the areas shown in the GoogleEarth window.  
+	    This is useful when you are usually  zoomed in on GoogleEarth to examine a 
+	    small area.  This is only available when using one the servlet related 
+	    display methods.
+	    (Default:&nbsp;False)</li>
+	<li><em>"Show Admin Area Borders"</em>
+	     <br>If selected then the borders of the STEM Administration areas are shown.
+	     This is usually not needed because GoogleEarth also has an option to 
+	     show border areas.
+	     (Default:&nbsp;False)</li>
+	<li><em>"Experimental Option"</em>
+	      <br>Used to turn on various expirmental options. Not normally used!
+	      (Default:&nbsp;False)</li>
+</ul>
+<img src="img/preferencesgeadvanced.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgetoplevel.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgetoplevel.html
new file mode 100644
index 0000000..5668edf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesgetoplevel.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Google Earth Preferences</title>
+</head>
+<body>
+<h1>Google Earth Preferences</h1>
+<p>
+Specifies the preferences used by the STEM to GoogleEarth interface.
+<p>
+<ul>
+  <li><em>Choose the Method used to display STEM Results</em></li>
+  <ul>
+	<li><em>LogOnly</em><br>With this option, the KML files 
+	are written but not displayed by GoogleEarth. 
+	This would be used when you are either going to display 
+	the GoogleEarth visualization at a later time or if you are 
+	going to run GoogleEarth from another system with the KML 
+	files on a shared disk.</li>
+	<li><em>"Log+Servlet"</em><br>With this option, 
+	the KML files are written and then displayed by GoogleEarth. 
+	GoogleEarth actually requests the file from a webserver 
+	Servlet which reads the file and sends it to GoogleEarth.</li>
+	<li><em>"AsyncServlet"</em><br>The KML is written on every cycle, 
+	overlaying the file written for the previous cycle. GoogleEarth 
+	asks for new data on a predetermined interval and is sent the 
+	current KML.  The advantage over the previous method is that 
+	it helps keep GoogleEarth from falling too far behind the STEM processing.</li>
+	<li><em>"DirectLaunch"</em><br>With this option, the KML files 
+	are directly sent to GoogleEarth without using an intermediate 
+	web server. This can cause problems because GoogleEarth may get 
+	files faster than it can process them but it is more efficient.</li>
+	<li><em>"ManualDisplay"</em><br> The map is generated by user 
+	clicking the <b>Display</b> button. This is the default option.</li>
+  </ul>
+  <li><em>"Folder for KML logging:"</em>This is the folder where 
+	STEM will write the KML files that GoogleEarth will read.  
+	If it already contains KML files, the user will be given 
+	the oportunity to delete them, keep them or choose a new folder.</li>
+  <li><em>"Use internal webserver"</em><br>This is used to cause the 
+    webserver built into Eclipse to be used.</li>
+  <li><em>"Hostname:port for external webserver"</em>
+    <br>This is the required hostname and port for an external webserver. 
+    Normally the internal webserver would be used so this is not needed 
+    but there are cases where one might want to use an existing web server. </li>
+  <li><em>"Automatically startup GoogleEarth"</em>
+    <br>If specified then when the STEM-GoogleEarth view is started,
+     then the GoogleEarth application is also launched.</li>
+  <li><em>"Automatically process every simulation"</em>
+    <br>if specified, then when you start any simulation running, 
+    it will automatically have its processing be mapped to GoogleEarth.  
+    Only one simulation will be displayed by GE since it would 
+    be counterproductive to show 2 different views at the same time. </li>
+  <li><em>"Write KML files only every N th cycle"</em>
+    <br>If the simulation does not change rapidly from cycle to cycle, 
+    significant overhead can be saved by only sending data to 
+    GoogleEarth every Nth cycle.</li>
+  <li><em>"Chose Aspect to be Logged.cycle"</em>
+    <br>Select the disease aspect to be displayed as colored polygons
+    on the GoogleEarth map.</li>
+</ul>
+<img src="img/preferencesgetoplevel.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferenceslogging.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferenceslogging.html
new file mode 100644
index 0000000..98f2bf8
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferenceslogging.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Simulation Management</title>
+</head>
+<body>
+<h1>Logging</h1>
+<p>
+On the logging preference page, you can specify whether to log integers or real numbers in log files. 
+The default is to log real numbers.
+ </p>
+ <br/>
+ <img src="img/loggingpreferences.png">
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapdatamgnt.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapdatamgnt.html
new file mode 100644
index 0000000..3060a5a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapdatamgnt.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Map Data Management</title>
+</head>
+<body>
+<h1>Map Data Management</h1>
+<p>The Map Data Management preferences page sets preferences for
+managing the latitude/longitude data that defines the borders of
+geographic polygons.</p>
+<ul>
+	<li><em> "Down sample latitude/longitude polygons."</em> If True,
+	then the full resolution polygon data will be "sampled" by skipping
+	over data points in the polygons (as specified in the sample frequency)
+	(Default:&nbsp;False)</li>
+	<li><em> "latitude/longitude data sample frequency."</em>The
+	number of lat/long data points to skip when sampling the full
+	resolution data. (Default:&nbsp;1)</li>
+	<li><em> "Report I/O Exceptions."</em> If True, then an error in
+	reading in the lat/long data for a country will be reported. Typically,
+	this is False as there are a few countries where the lat/long data is
+	missing and this can be ignored. (Default:&nbsp;False)</li>
+	<li><em> "Use lower resolution lat/long data if available" </em>If
+	True, then the geographic visualizations will favor the use of
+	pre-computed lower resolution data sets instead of more detailed
+	resolution data. This can result in faster visualization performance
+	with the potential for slight visual defects. In practice, the visual
+	impact is undetectable while the increase in performance is dramatic.
+	(Default:&nbsp;True)</li>
+</ul>
+<img src="img/preferencesmapdatamgnt.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapview.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapview.html
new file mode 100644
index 0000000..0d2140a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesmapview.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Map View</title>
+</head>
+<body>
+<h1>Map View</h1>
+<p>Map View</p>
+<ul>
+	<li><em>Background Color</em>The color of the display outside of a
+	polygon.</li>
+	<li><em>Foreground Color</em>The color of polygons that correspond
+	to a property with a relative value greater than zero (0.0)</li>
+	<li><em>Zero Relative Value Color</em> The color of polygons that
+	correspond to a property with a relative value equal to zero (0.0).</li>
+	<li><em>Borders Color</em>The color of polygon borders.</li>
+	<li><em>Draw Polygon Borders</em>If True, then draw the polygon
+	borders (Default:&nbsp;True)</li>
+	<li><em>Use Logarithmic Scale</em>If True, then the intensity of
+	the color displayed in a polygon that corresponds to a property with a
+	non-zero relative value will be determined using a logarithmic scale.
+	(Default:&nbsp;False)</li>
+	<li><em>Gain Factor</em>(Default:&nbsp;1.0E7)</li>
+	<li><em>GUI Scaling Factor</em>(Default:&nbsp;8.0)</li>
+	<li><em>Initial X Translation</em>(Default:&nbsp;0)</li>
+	<li><em>Initial Y Translation</em>(Default:&nbsp;0)</li>
+	<li><em>Zoom Ruler Scaling Factor</em></li>
+	<li><em>Initial Scale Selection (0-100)</em>(Default:&nbsp;50)</li>
+</ul>
+<img src="img/preferencesmapview.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesoverview.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesoverview.html
new file mode 100644
index 0000000..063a847
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesoverview.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>STEM Preferences Overview</title>
+</head>
+
+<body>
+<h1>STEM Preferences Overview</h1>
+<p>STEM has a number of <em>preferences</em> that can be specified
+that specify configuration information or control how Simulations
+execute or are displayed. Preferences are accessed through the
+"Windows-&gt;Preferences..." menu. </p>
+<p>
+<img
+	src="img/preferencesopenmenu.png" /></p>
+<p>This opens the preferences dialog. Selecting various elements
+under "STEM" in the tree display on the left, displays the corresponding
+interface for setting preferences on the right.</p>
+
+
+<img
+	src="img/preferencestoplevel.png" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencessimmanagement.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencessimmanagement.html
new file mode 100644
index 0000000..1ea21f8
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencessimmanagement.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Simulation Management</title>
+</head>
+<body>
+<h1>Simulation Management</h1>
+<p>The <em>Simulation Management</em> preference page allows control
+over the execution of Simulations and the reporting of warning messages
+generated when a Simulation is created from a <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>.
+<ul>
+	<li><em>"Pause simulation after each cycle"</em> If this box is
+	checked, the Simulation will pause execution for the number of seconds
+	specified in the box below it. This is useful to match the speed of
+	execution of the machine running the Simulation with its visualization.
+	This preference provides the option to give visualizations more time to
+	render, this can be useful for the <a href="../views/ge.html">
+	Google Earth view</a>, for instance.
+	(Default:&nbsp;True,&nbsp;2&nbsp;Seconds)</li>
+	<li><em>"Report all unresolved links"</em> If this box is checked,
+	then any Edges or Labels that specify a Node in a graph that can not be
+	"resolved" (i.e., the Node cannot be found) will be reported with an
+	informational message. It is useful to have the option to suppress
+	these messages as many of the built-in <a
+		href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+	have unresolved links. This is not an error, the unresolved links are
+	ignored and result from using <a
+		href="../../concepts/modelingframework.html#graph"> Graphs</a> that
+	provide general connectivity. For instance, between the Earth (ZZZ) and
+	all of the possible countries in the world. Not all <a
+		href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+	will involve every country some links are unresolved.
+	(Default:&nbsp;False)</li>
+	<li><em>"Report unresolved air transport links"</em> If this box
+	is checked then unresolved links from air transportation will be 
+	showed.(Default:&nbsp;False)</li>
+	<li><em>"Report the number of unresolved links"</em> If this box
+	is checked then the number of links that cannot be resolved will be
+	reported as an informational message.(Default:&nbsp;False)</li>
+	<li><em>"User scenario caching"</em>If this box is checked scenarios
+	will be cached in memory allowing them to start up more quickly. (Default:&nbsp;False, unchecked)</li>
+</ul>
+</p>
+<img src="img/preferencessimmanagement.png" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencessolver.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencessolver.html
new file mode 100644
index 0000000..b8dd9b6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencessolver.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Simulation Management</title>
+</head>
+<body>
+<h1>Solver</h1>
+<p>
+On the solver preference page, you can specify the number of concurrent worker threads you want to 
+run during a simulation. The number is typically the name as the number of CPU cores available 
+on your hardware, put you can experiment with the number to determine what performs best on your machine.
+ </p>
+ <p> You can also specify the default solver to use when runnign a simulation. When a new scenario is created,
+ the default solver will be pre-selected for the scenario.
+ </p>
+ <br/>
+ <img src="img/solverpreferences.png">
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/preferences/preferencesvisualizationtoplevel.html b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesvisualizationtoplevel.html
new file mode 100644
index 0000000..7a2174e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/preferences/preferencesvisualizationtoplevel.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Visualization Preferences</title>
+</head>
+<body>
+<h1>Visualization</h1>
+<p>The Visualization preferences specify the configuration values
+that specify parameters that control the generation of visual
+representations of a Simulation.</p>
+<p>
+<ul>
+	<li><em>"Name of the initial attribute to display:"</em> This is
+	the text string that is the name of the property updated by a <a
+		href="../../concepts/modelingframework.html#decorator"> Decorator</a>
+	to display by default. This means that if a <a
+		href="../../concepts/modelingframework.html#decorator"> Decorator</a>
+	updates a property that has the specified character string as its name,
+	then it will select it as the default to display first. If the value is
+	"I", for instance, then it will display the "infectious" value
+	(Default:&nbsp;"I")</li>
+</ul>
+<img src="img/preferencesvisualizationtoplevel.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/views/activesimulationsview.html b/org.eclipse.stem.doc/help/html/interface/views/activesimulationsview.html
new file mode 100644
index 0000000..0bba6a0
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/activesimulationsview.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Active Simulations View</title>
+</head>
+<body>
+<h1>Active Simulations View</h1>
+<p>
+The <em>Active Simulations</em> view simply lists the Simulations (running or not) that are "active" in STEM.  
+</p>
+<p>
+Clicking on the name of one of the Simulations will set the focus on that Simulation.
+</p>
+<img src="img/activesimulationsview.jpg"/>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/views/controlview.html b/org.eclipse.stem.doc/help/html/interface/views/controlview.html
new file mode 100644
index 0000000..087c0f0
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/controlview.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Control View</h1>
+<p>The <em>Control View</em> displays a dynamic collection of
+"simulation controls" that match the set of "active" Simulations. Each
+control shows the name of the Scenario and that status of the
+Simulation, including its "state" (either "Running" or "Paused"), the
+current "time" in the simulation, a progress bar. Each control also has
+five buttons that control the corresponding Simulation:
+<ol>
+	<li>"Run" Begin running the Simulation.</li>
+	<li>"Pause" Pause the running of the Simulation. This maintains
+	the current state of the simulation.</li>
+	<li>"Reset" Reset all state information in the Simulation back to
+	initial values and set the state of the Simulation to "Paused"</li>
+	<li>"Step" Run the simulation for a single cycle and then set the
+	state of the Simulation to "Paused"</li>
+	<li>"Stop" Stop all execution of the Simulation and destroy all
+	state information. The Simulation will be removed from the system.</li>
+</ol>
+</p>
+<img src="img/controlview.png"/>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/csvloggerview.html b/org.eclipse.stem.doc/help/html/interface/views/csvloggerview.html
new file mode 100644
index 0000000..4903b2d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/csvloggerview.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1 align="left"><font face="Times New Roman" size="5">CSV Logger View</font></h1>
+<p align="left"><font face="Times New Roman">The current distribution of STEM provides users with
+the ability to output Disease State Data to a comma separated variable (CSV) 
+file. This function is enables through a view called the CSV Logger View.<br>
+&nbsp;</font><p align="left"><font face="Times New Roman" size="4"><b>1) Loading the 
+CSV Logger View</b></font></p>
+	<font FACE="Helv">
+	<p align="left"><font face="Times New Roman">To load or activate the CSV 
+	Logger View,&nbsp; first launch
+	(and run) stem. On the top menu (See figure 1) bar click on </font></p>
+	<p DIR="LTR" align="left"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;
+	<b>&nbsp;&gt;window&gt;other...&gt;CSV Logger</b></font></p>
+	</font>
+	<p DIR="LTR" align="left"><font face="Times New Roman">This will open a CSV 
+	Logger Tab at the bottom of your Simulation Perspective (See figure 2). <br>
+	Initially the view will be blank because there are no scenarios being 
+	logged.</font></p>
+	<font FACE="Helv">
+	<table border="1" cellspacing="3" width="21%" id="table5" bgcolor="#C0C0C0" cellpadding="3">
+		<tr>
+			<td>
+			<p align="left"><font FACE="Times New Roman">
+			<img border="0" src="img/csv1.jpg" width="347" height="446"></font></td>
+			<td>
+			<p align="left">
+	<font FACE="Times New Roman">
+			<img border="0" src="img/csv2.jpg" width="502" height="331"></font></td>
+		</tr>
+		<tr>
+			<td bgcolor="#FFFFFF"><font FACE="Times New Roman">
+			<p align="left"><b>Figure 1: Opening the CSV Logger View</b></font></td>
+			<td bgcolor="#FFFFFF">
+	<font FACE="Times New Roman">
+			<p align="left"><b>Figure 2: Starting a Scenario</b></font></td>
+		</tr>
+</table>
+<p DIR="LTR" align="left">&nbsp;</p>
+	<font FACE="Times New Roman">
+	<p DIR="LTR" align="left"><b><font size="4">2) Testing the Logger</font></b></p>
+	<p DIR="LTR" align="left">To use the logger, you first have to activate logging from the CSV Logger tab. 
+	Click the 'On' button and the next time a scenario is started data will be logged, see figure 3. </p>
+	<table border="1" cellspacing="1" width="49%" id="table2">
+		<tr>
+			<td>
+			<p align="left">
+			<img border="0" src="img/csv2_5.jpg"></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="left"><b>Figure 3. Enabling Logging from the CSV Logger tab</b></td>
+		</tr>
+	</table>
+	<p DIR="LTR" align="left">Next you pick the scenario you want to log. 
+	You can pick either your own scenario or a built in one. 
+	In the following example we use the built in scenario for the 
+	Spanish Flu in Tokyo, Japan. </p>
+<p DIR="LTR" align="left">Go to the Scenarios Tab in either the Simulation or 
+Designer Perspective and expand the Tabs</p>
+	</font>
+	</font>
+	<p DIR="LTR" align="left"><b><font face="Times New Roman">-&gt;STEM-&gt;Geography-&gt;Political-&gt;Country-&gt;Japan</font></b></p>
+	<p DIR="LTR" align="left"><font face="Times New Roman">double click on the built in scenario<i><br>
+	Spanish Flu, Tokyo, Japan, 2000<br>
+	</i>to start it. (See Figure 2).</font></p>
+	<font FACE="Helv">
+	<p align="left">&nbsp;</p>
+	</font>
+	<font FACE="Times New Roman">
+	<p align="left">Once you have started the scenario, click on the CSV Logger Tab.
+	You will notice that the view now displays the scenario and disease being logged. 
+	You can stop logging at any time by selecting the 'Off' button in the CSV 
+	<p dir="ltr" align="left"><b><font size="4">3) Remembering User preferences</font></b></p>
+<p dir="ltr" align="left">Your selections, by scenario, will be remembered 
+the system preferences for the CSV Logger View. The STEM CSV Logger View 
+uses Eclipse DialogSettings to automatically remember user preferences. 
+This feature is always enabled and begins as soon as you enable any report view. 
+The preferences that are "remembered" are the logger setting for each scenario. 
+<p dir="ltr" align="left"><b>... runtime-stem.product\.metadata\.plugins\org.eclipse.stem.util.loggers</b></p>
+<p dir="ltr" align="left">where the directory <b>\runtime-stem.product</b> is 
+located in the same parent directory as the users STEM eclipse workspace (for 
+example c:\runtime-stem.product).</p>
+<p dir="ltr" align="left">Preferences for the Time Series views are stored in a 
+file:<br>
+<br>
+<b>CSVLogger_Preferences.txt</b></p>
+<p dir="ltr" align="left">You never need to edit this file directly. Once you 
+have designated a set of locations to monitor for the logger, these will always 
+be used for the corresponding scenario.<br>
+In <b>Figure 4</b> we show the disease that has been designated for logging for the 
+Japan scenario.</p>
+	</font>
+	<p dir="ltr" align="left">&nbsp;</p>
+	<font FACE="Times New Roman">
+	</font>
+	<p align="left">&nbsp;</p>
+	<font FACE="Times New Roman">
+	<table border="1" cellspacing="1" width="49%" id="table2">
+		<tr>
+			<td>
+			<p align="left">
+			<img border="0" src="img/csv3.jpg" width="800" height="647"></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="left"><b>Figure 4: Logging Data for a Scenario</b></td>
+		</tr>
+	</table>
+	</font>
+	<p align="left">&nbsp;</p>
+	</font>
+	<font FACE="Times New Roman" size="4">
+	<p align="left"><b>4) Directory Location of Logged Data</b></p>
+	</font>
+	<font FACE="Times New Roman">
+	<p align="left">The Disease State data for every location monitored is stored 
+	in a separate Comma Separated Variable file. The data directory (Figure 5) 
+	may be found under your STEM workspace folder as subfolder of 
+	"Recorded Simulations" in your project folder. For instance, if you are 
+	logging a scenario in a project called "Vermont", the log files will be 
+	found in a subfolder under this directory: </p>
+<p align="left"><b>&nbsp;...runtime-stem.product\Vermont\Recorded Simulations\</b><br>
+<br>
+<p align="left">For built-in scenarios the log files are located under this 
+folder:  </p>
+<p align="left"><b>&nbsp;...runtime-stem.product\BuiltInScenarios\Recorded Simulations\</b><br>
+<br>
+It is possible to run multiple scenarios in STEM, or to simultaneously run 
+more than one instance of a given scenario. Logged data is stored in a folder 
+with the same name as the scenario just run, but this folder is place in turn 
+in a parent folder named by the start time of the particular scenario instance. 
+This way, if you run the scenario more than once (for example as a batch process 
+with some parameter changed from run to run) no data will be accidentally 
+overwritten as each scenario will have a unique time stamp. 
+Each scenario folder is further subdivided into subfolders, one folder for each 
+disease (the folder name is the disease name) that is part of the scenario 
+(See Figure 5).  </p>
+	</font><font FACE="Helv">
+	<font FACE="Times New Roman">
+	<table border="1" cellspacing="1" width="26%" id="table3">
+		<tr>
+			<td height="223">
+			<p align="left">
+			<img border="0" src="img/csv4.jpg"></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="left"><b>Figure 5: The location (directory) where files 
+			are stored.</b></td>
+		</tr>
+	</table>
+	</font>
+	<p align="left">
+	<font FACE="Times New Roman" size="4">
+	<b>5) CSV Logged Data Files</b></font></p>
+	</font>
+	<font FACE="Times New Roman">
+	<p align="left">In Figure 6 we show the particular data files written by the 
+	logger for the Spanish Flu disease. Separate CSV files (with extension .csv) 
+	are created for each disease state modeled by the disease. These are named 
+	using the ID of the state (e.g. S, E, I or R) followed by an underscore 
+	(_) followed by a number. The number indicates the resolution of the locations 
+	stored in the file. For instance, 3 means geographical administration 
+	level 3, i.e. US cities. A second file (runparameters.csv) is also generated. 
+	This will contain data about the run parameters for each disease.</p>
+	</font>
+	<font FACE="Helv">
+	<font FACE="Times New Roman">
+	<table border="1" cellspacing="1" width="49%" id="table4">
+		<tr>
+			<td>
+			<p align="left">
+			<img border="0" src="img/csv5.jpg"></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="left"><b>Figure 6:  Individual Log Files. These are created 
+			for each location or node monitored. Another file contains the 
+			parameters run for the scenario in question.</b></td>
+		</tr>
+	</table>
+	</font>
+	</font>
+<p align="left">Each of the data files for monitored nodes contains comma 
+separated data. The specific columns in the file represents the locations 
+being logged. For example, for the Japan scenario the file S_1.csv has the 
+columns: </p>
+<p align="left"><b>&nbsp;iteration,time,JP-KYU,JP-KNT,JP-0,JP-CHB,JP-TAI,JP-CHG,JP-SKO,JP-HRI,JP-TOH,JP-KIN,JP-RYU
+</b></p>
+<p align="left">A data sample is shown in Figure 7.</p>
+<table border="1" width="64%" id="table6">
+	<tr>
+		<td>1,Fri&nbsp;10&nbsp;Oct&nbsp;08,560042.0,245240.45466207762,5627424.0,79564.86664536313,79332.0,110140.0<br/>
+2,Sun&nbsp;12&nbsp;Oct&nbsp;08,560042.0,232427.57523514942,5627424.0,79519.11998544677,79331.93495068772,110140.0<br/>
+3,Tue&nbsp;14&nbsp;Oct&nbsp;08,560042.0,198318.63446606975,5627424.0,77166.49459938332,79326.44576007508,110140.0,115284.0<br/>
+4,Thu&nbsp;16&nbsp;Oct&nbsp;08,560042.0,104046.9798877738,5627424.0,60049.957044064824,78761.24316196528,110140.0,115284.0 <br/></td>
+	</tr>
+	<tr>
+		<td><b><font size="4">Figure 7: Sample data from a CSV Log File</font></b></td>
+	</tr>
+</table>
+<p align="left">&nbsp;</p>
+<p align="left">&nbsp;</p>
+</body>
+</html>
+
diff --git a/org.eclipse.stem.doc/help/html/interface/views/decoratorsview.html b/org.eclipse.stem.doc/help/html/interface/views/decoratorsview.html
new file mode 100644
index 0000000..92a813d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/decoratorsview.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Decorators View</title>
+</head>
+
+<body>
+<h1>Decorators View</h1>
+<p>The <em>Decorators</em> view displays the <a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>
+that are available for use in <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>.
+The available <a href="../../concepts/modelingframework.html#decorator">
+Decorators</a> are organized in a tree. Those listed under "STEM" are
+built-in to STEM.</p>
+<p>The view supports "drag" such that a <a
+	href="../../concepts/modelingframework.html#decorator"> Decorator</a>
+can be dragged from this view and "dropped" into an open <a
+	href="../editors/modeleditor.html">Model editor</a>. </p>
+<img src="img/decoratorsview.jpg" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/diseasesview.html b/org.eclipse.stem.doc/help/html/interface/views/diseasesview.html
new file mode 100644
index 0000000..1b7ea51
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/diseasesview.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Diseases View</title>
+</head>
+<body>
+<h1>Diseases View</h1>
+<p>The <em>Diseases</em> view lists the Diseases that are built-in to STEM.
+<img src="img/diseasesview.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/views/dublincorepopup.html b/org.eclipse.stem.doc/help/html/interface/views/dublincorepopup.html
new file mode 100644
index 0000000..06709b2
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/dublincorepopup.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Dublin Core Pop-up</title>
+</head>
+<body>
+<h1>Dublin Core Pop-up</h1>
+<p>The views that list Simulation components (<a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>,
+<a href="../../concepts/modelingframework.html#graph"> Graphs</a>, <a
+	href="../../concepts/modelingframework.html#model"> Models</a>, <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+and <a href="../../concepts/modelingframework.html#sequencer">
+Sequencers</a>) support an instant "pop-up" display of the <a
+	href="http://dublincore.org/">Dublin Core</a> metadata associated with
+the components displayed in the view. This takes the form of a small
+window that is activated when the mouse stops and "hovers" over one of
+the components. The window presents a short summary of the metadata as
+illustrated in the images below.</p>
+
+<p>The metadata pop-up in the <a href="scenarioview.html">Scenarios
+view</a>. The first line is the title of the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>,
+the second line ("daford") is the name of the "creator" of the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>.
+The third line is the date range specified for the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>.
+The last line ("IBM") is the name of the "publisher". <img
+	src="img/dcscenariospopup.jpg" /></p>
+
+<p>The metadata pop-up in the <a href="modelsview.html">Models
+view</a></p>
+<img src="img/dcmodelspopup.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/views/epidemicview.html b/org.eclipse.stem.doc/help/html/interface/views/epidemicview.html
new file mode 100644
index 0000000..b885c87
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/epidemicview.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Epidemic View</h1>
+<p>The <em>Epidemic View</em> displays a dynamic collection of
+"simulation controls" that match the set of "active" Simulations. Each
+control shows the name of the Scenario and that status of the
+Simulation, including its "state" (either "Running" or "Paused"), the
+current "time" in the simulation, a progress bar. Each control also has
+five buttons that control the corresponding Simulation:
+<ol>
+	<li>"Run" Begin running the Simulation.</li>
+	<li>"Pause" Pause the running of the Simulation. This maintains
+	the current state of the simulation.</li>
+	<li>"Reset" Reset all state information in the Simulation back to
+	initial values and set the state of the Simulation to "Paused"</li>
+	<li>"Step" Run the simulation for a single cycle and then set the
+	state of the Simulation to "Paused"</li>
+	<li>"Stop" Stop all execution of the Simulation and destroy all
+	state information. The Simulation will be removed from the system.</li>
+</ol>
+</p>
+&nbsp;<p>To use the Epidemic view:<ol>
+	<li>Enter the <a href="../perspectives/analysis.html">Analysis Perspective</a></li>
+	<li>Click on the Epidemic Tab</li>
+	<li>Use the Select Folder button to chose the folder containing the epidemic data 
+	you wish to study. The files should have the following
+	<a href="csvloggerview.html">&nbsp;format.</a></li>
+	<li>Click Aggregate Data. This will automatically create two aggregated data 
+	files based on the data in the original scenario folder. These file names 
+	will appear in the<br>
+	text fields for Scenario Aggregate File and Scenario Incidence file.&nbsp; 
+	The aggregated data will be written to the 'aggregate' and 'incidence' 
+	subfolders respectively <br>
+	(these will be created if they do not exist). The files will be named based 
+	on the input scenario folder. The aggregate data is the running integral or 
+	sum over time <br>
+	of all compartment data (S,E,I,R) over all locations in the input scenario 
+	folder. The incidence data contains differential data including incidence 
+	(new cases at time t), <br>
+	new births, deaths, etc. Incidence data will be estimated if it does not 
+	exist in the original scenario data files. Note, if you already have 
+	aggregate data you can also input<br>
+	these files manually.</li>
+	<li>On the left hand side the Epidemic view will show the integrated state 
+	data (S,E,I,R, etc). Differential data will appear on the right hand chart. 
+	To toggle between linear<br>
+	and logarithmic scales or to change what variables are plotted just right 
+	click and use the custom dialog that will appear. </li>
+</ol>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+<p><img border="0" src="img/Epidemic.jpg" width="1000" height="644"> </p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/error_log.html b/org.eclipse.stem.doc/help/html/interface/views/error_log.html
new file mode 100644
index 0000000..275435e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/error_log.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Error Log</title>
+<script language="JavaScript" type="text/javascript"
+	src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"></script>
+<link href="../../book.css" rel="stylesheet" type="text/css">
+<style type="text/css">
+<!--
+.style1 {
+	font-size: 18px;
+	font-weight: bold;
+}
+.style2 {
+	font-size: 12pt;
+	font-weight: bold;
+}
+-->
+</style>
+</head>
+
+<body>
+<p class="style1">Error Log View</p>
+<p>The <strong>Error Log</strong> view captures all the warnings and
+errors logged by plug-ins. The underlying log file is a <em>.log</em>
+file stored in the <em>.metadata</em> subdirectory of the workspace. The<strong>
+</strong>view is available under <a class="command-link"
+	href='javascript:executeCommand("org.eclipse.ui.views.showView(org.eclipse.ui.views.showView.viewId=org.eclipse.pde.runtime.LogView)")'>
+<img src="PLUGINS_ROOT/org.eclipse.help/command_link.png"> <strong>Window
+&gt; Show View &gt; Error Log</strong> </a>.</p>
+<p><img src="img/error_log.png" alt="Error Log"
+	hspace="30"></p>
+<p>&nbsp;</p>
+<p class="style2">Event Sorting</p>
+<p>Events in the log view can be sorted by <strong>Message</strong>,
+<strong>Plug-in ID</strong> or <strong>Date</strong> in ascending or
+descending order. Simply click on the column header that you want the
+sorting to be based on. The down arrow in the column header indicates
+descending order; while, the up arrow indicates an ascending order.</p>
+<p>&nbsp;</p>
+<p class="style2">Event Filtering</p>
+<p>You can filter the view to show events of a particular type or
+session. Also, you can limit the number of entries in the view.
+Filtering options are available under <strong>Filters...</strong> from
+the view's toolbar drop down menu.</p>
+<p>&nbsp;</p>
+<p class="style2">Import and Export Logs</p>
+<p>To <strong>import</strong> an arbitrary <em>.log</em> file into
+the view, press the <strong>Import Log</strong> toolbar button or select
+<strong>Import Log...</strong> from the context menu. Then, choose a <em>.log</em>
+file from the file system.</p>
+<p>To <strong>export</strong> the current log view content into a
+file, press the <strong>Export Log</strong> toolbar button or select <strong>Export
+Log...</strong> from the context menu. Then, enter a file name.</p>
+<p>&nbsp;</p>
+<p class="style2">Clear and Delete Logs</p>
+<p>To <strong>clear</strong> the view log content without deleting
+the underlying <em>.log</em> file, press the <strong>Clear Log</strong>
+toolbar button or select <strong>Clear Log Viewer</strong> from the
+context menu.</p>
+<p>To permanently <strong>delete</strong> the underlying <em>.log</em>
+file, press the <strong>Delete Log</strong> toolbar button or select <strong>Delete
+Log</strong> from the context menu.</p>
+<p>&nbsp;</p>
+<p class="style2">Event Details</p>
+<p>Full details about a particular event can be viewed in the <strong>Event
+Details</strong> dialog by double-clicking on a particular entry or selecting <strong>Event
+Details</strong> from the context menu of that entry. You can view the <strong>Date</strong>,
+<strong>Severity</strong>, <strong>Message</strong>, <strong>Exception
+Stack Trace</strong> (if available) and <strong>Session Data</strong> of each
+event.</p>
+<p>You can navigate from one entry to the next via the <strong>Up</strong>
+and <strong>Down</strong> arrow buttons.</p>
+<p>To copy the error to the clipboard, press the button with the
+clipboard image.</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/estimatorview.html b/org.eclipse.stem.doc/help/html/interface/views/estimatorview.html
new file mode 100644
index 0000000..9c6fc6b
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/estimatorview.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Estimator View</h1>
+<p class="MsoNormal" style="page-break-after: avoid; text-autospace: none; margin-left: .75pt">
+<b><span style="font-size:11.0pt;color:black">Model Parameter Estimation</span>
+</b></p>
+<span style="font-size: 11.0pt; font-family: Times New Roman; color: black">This 
+view allows a user to estimate parameter for a (new) model based on existing 
+data.&nbsp; Algorithms are now complete for parameter Estimation using SI, SIR, 
+and SEIR models. </span>
+<ol>
+	<li>Enter the <a href="../perspectives/analysis.html">Analysis Perspective</a></li>
+	<li>Click on the Estimator Tab</li>
+	<li>Click on the &quot;Select&quot; button to chose the directory that contains the 
+	data files you wish to analyze. These files should have the following
+	<a href="csvloggerview.html">&nbsp;format.</a></li>
+	<li>A dialog will launch allowing you to chose the folder. Select the folder 
+	by clicking &quot;Select Scenario Folder&quot; and then click &quot;Next&quot;</li>
+</ol>
+</p>
+&nbsp;<p><img border="0" src="img/Estimator1a.jpg" width="808" height="397"></p>
+<p>5. A second dialog will launch allowing you to chose from valid models 
+appropriate to the data set you chose. If, for example, the data<br>
+contains columns for all S,E,I,R states, then any SEIR parameter estimator will 
+appear on the list. Select and Estimator and click &quot;Finish&quot;</p>
+<p>&nbsp;</p>
+<p><img border="0" src="img/Estimator1b.jpg" width="808" height="397"></p>
+<p>6. The Folder you chose will now show up on the &quot;Scenario Folder&quot; text field. 
+Click &quot;Estimate Parameters&quot;.</p>
+<p><img border="0" src="img/Estimator2.jpg" width="670" height="445"></p>
+<p>7. A bar chart graph will appear showing you estimates for the appropriate 
+model parameters. In some case two bars will appear for each parameter as the 
+estimator may<br>
+determine the best estimate fits within a range of values. For more information 
+on the estimation algorithms please see the
+<a href="http://wiki.eclipse.org/Estimating_Model_Parameters_from_External_Data">
+Eclipse STEM wiki.</a></p>
+<p><img border="0" src="img/Estimator3.jpg" width="1000" height="666"></p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/ge.html b/org.eclipse.stem.doc/help/html/interface/views/ge.html
new file mode 100644
index 0000000..6e900a0
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/ge.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>GoogleEarth View</title>
+</head>
+
+<body>
+<h1>STEM to GoogleEarth View</h1>
+<p>The STEM to GoogleEarth view projects the results of the STEM
+simulation onto GoogleEarths 3D display of the World. For example, in
+the following display, the progress of a disease is shown in red
+superimposed on the GoogleEarth display.</p>
+<p>
+<ul>
+	Color Key
+	<li>Blue - Susceptible</li>
+	<li>Yellow - Exposed</li>
+	<li>Red - Infectious</li>
+	<li>Green - Recovered</li>
+</ul>
+<p><img src="img/gemap1.jpg" width=600>
+<p>
+<h2>Prerequisites</h2>
+<p>You must have installed the GoogleEarth application which is
+available for personal use from the <a
+	href="http://earth.google.com/earth4.html">GoogleEarth download
+site</a>. You should verify that GoogleEarth works correctly on your machine
+by starting it and verifing that you can browse the 3D image. 
+Plus it is a fun application to play with. Note that some older
+computers do not have the 3D graphics capabilities required by
+GoogleEarth and you will not be able to run GoogleEarth.   
+<h2>Starting the STEM to GoogleEarth interface.</h2>
+<p>You can leave GoogleEarth running or not. STEM will start it if
+needed. 
+<p>
+If you are running STEM from the source distribution,  you need build the 
+Servlets as described later.  
+<ul>
+    <li>Startup the STEM application as described earlier.
+	<li>Load GoogleEarth View <b>Windows->GoogleEarth View</b>
+	<li>Select the GoogleEarth View from the Tabbed Window. <br>
+	This should start the GoogleEarth application if it was not
+	already started. The STEM-GoogleEarth interface has many options that
+	can be set from 
+	<b>Windows->preferences->STEM->Visualization->Geographic->GoogleEarth</b> 
+	However, we can use the defaults for our first run. 
+	<li>Start a new simulation by selecting the Scenario window. 
+	<li>Select the USA scenario. STEM->Geography->Political->Country->USA
+	<li>double clicking the "Spanish Flu" <a href="../../concepts/modelingframework.html#scenario"> Scenario</a>.
+	<li>After the display has run for at laeast 7 cycles, 
+	    press the <b>pause</b> control.
+	<li>Select the GoogleEarth View and press the <b>Display</b> button.
+	<li>You should see the current state of the Spanish Flu infection superimposed on 
+	    the GoogleEarth map.
+</ul>
+
+<p>
+<h2>Manual mode versus Automatic Mode.</h2>
+  The STEM to GoogleEarth is distributed with the default to run in Manual mode.
+  In order to see the state of the disease superimposed on the 
+  GoogleEarth 3D image, you have to manually press the display button.
+  The more interesting way to run it is with the GoogleEarth display 
+  being automatically updated on each cycle with the current status of the disease.
+  But because both STEM and GoogleEarth use a lot of CPU resources and 
+  system memory, they will only run well simultaneously if you have at least 
+  two Gigabytes of memory and a fast processor.  It will run with one gigabyte 
+  of memory but very slowly.
+  <p>
+  If you are lucky enough to have 2 Gigabytes memory, go to the 
+  <a href="../preferences/preferencesgetoplevel.html">GoogleEarth Preferences</a>
+  and set the "method" preference to "Asynch Servlet" or "Direct Launch".
+  <p>
+  The next time you start a simulation, you should then see the disease spread 
+  in the GoogleEarth window as STEM runs.
+  <p>
+  You can also <b>right click</b> in the STEM-GoogleEarth window to bring up 
+  a context menu with additional commands.
+  
+  <h2>Building Servlets</h2>
+  If you are running from the STEM source distribution:
+  <ul>
+    <li>Update STEM to the latest code level and ensure it is refreshed and rebuilt.
+    <li>From project <b>org.eclipse.stem.ui.ge</b> select <b>servlet.xml</b>
+    <li>Select <b>RunAs->AntBuild</b>
+    <li>From Eclipse, Run Stem using stem.product in org.eclipse.stem.ui 
+        as described earlier 
+   </ul>
+  If you are running the STEM standalone executable, the above steps were 
+  already done for you and you just need to start STEM.exe.
+  
+  <h2>Context Menu</h2>
+  If you bring up the context menu (Right click in Windows) then you will 
+  get a menu where you can issue some control commands or options for the 
+  STEM/GoogleEarth interface.  The difference between the context menu and 
+  the <b>Prefereces</b> is that the context menu only affects the current 
+  invocation.  
+  <ul>
+   <li><em>Display Admin Area</em><br>
+     This will bring up a menu where you can specify an admin area and 
+     have if displayed on the GoogleEarth map.  This has nothing to do 
+     with STEM but it was useful during our develpment of the STEM 
+     geography files and has been left in.
+   <li><em>Display Status</em><br>
+     This will display on the console the status of the STEM/GoogleEarth 
+     internal interface.  It is a useful debug tool.
+   <li><em>Debug On/Off</em><br>
+     Turns on  or off the debug output.
+   <li><em>GoogleEarth Start</em><br>
+     Startup GoogleEarth application if it is not already started.
+   <li><em>GoogleEarth Restart</em><br>
+     If GoogleEarth was for any reason stopped or crashed, 
+     this will attempt to get it running again with the current 
+     STEM status. It may not work.
+   <li><em>GoogleEarth Run</em><br>
+     This is used if you have already captured the KML log files and 
+     you want to run them after the simulation is complete.
+     It will let you specify the folder containing the KML files and 
+     will send them one by one to GoogleEarth.
+   <li><em>GoogleEarth Stop</em><br>
+     This will stop the sending of files to GoogleEarth and 
+     clear the polygons already displayed. 
+   
+  </ul>
+    
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/graphsview.html b/org.eclipse.stem.doc/help/html/interface/views/graphsview.html
new file mode 100644
index 0000000..fa6cb77
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/graphsview.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Graphs View</h1>
+<p>The <em>Graphs</em> view displays the <a
+	href="../../concepts/modelingframework.html#graph"> Graphs</a> that are
+available for use in <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>It contains graphs representing
+	infrastucture such as airports and roads, as well as common border relationships between regions.
+The available <a href="../../concepts/modelingframework.html#graph">
+Graphs</a> are organized in a tree. Those listed under "STEM" are built-in
+to STEM.</p>
+<p>The view supports "drag" such that a <a
+	href="../../concepts/modelingframework.html#graph"> Graphs</a> can be
+dragged from this view and "dropped" into an open <a
+	href="../editors/modeleditor.html">Model editor</a>.</p>
+<img src="img/graphsview.png" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/.cvsignore b/org.eclipse.stem.doc/help/html/interface/views/img/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Csv2_5.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Csv2_5.jpg
new file mode 100644
index 0000000..92f7b65
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Csv2_5.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Csv6.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Csv6.jpg
new file mode 100644
index 0000000..7c83649
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Csv6.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Epidemic.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Epidemic.jpg
new file mode 100644
index 0000000..1de5684
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Epidemic.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1a.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1a.jpg
new file mode 100644
index 0000000..17eed9e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1a.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1b.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1b.jpg
new file mode 100644
index 0000000..d1f8f4e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator1b.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Estimator2.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator2.jpg
new file mode 100644
index 0000000..e4805c6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Estimator3.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator3.jpg
new file mode 100644
index 0000000..fde409f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Estimator3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/Lyapunov.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/Lyapunov.jpg
new file mode 100644
index 0000000..7e27380
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/Lyapunov.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/PhaseSpaceView.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/PhaseSpaceView.jpg
new file mode 100644
index 0000000..aafcb0e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/PhaseSpaceView.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparison.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparison.jpg
new file mode 100644
index 0000000..e4273a7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparison.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparisonB.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparisonB.jpg
new file mode 100644
index 0000000..d72a176
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/ScenarioComparisonB.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/activesimulationsview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/activesimulationsview.jpg
new file mode 100644
index 0000000..d09178c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/activesimulationsview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/comparsonEquation.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/comparsonEquation.jpg
new file mode 100644
index 0000000..65b6d9e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/comparsonEquation.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/controlview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/controlview.jpg
new file mode 100644
index 0000000..1b3e685
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/controlview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/controlview.png b/org.eclipse.stem.doc/help/html/interface/views/img/controlview.png
new file mode 100644
index 0000000..1ddaedf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/controlview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/csv1.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/csv1.jpg
new file mode 100644
index 0000000..e3c4cd6
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/csv1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/csv2.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/csv2.jpg
new file mode 100644
index 0000000..9d6c320
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/csv2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/csv3.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/csv3.jpg
new file mode 100644
index 0000000..bc11372
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/csv3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/csv4.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/csv4.jpg
new file mode 100644
index 0000000..4006b38
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/csv4.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/csv5.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/csv5.jpg
new file mode 100644
index 0000000..4346aea
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/csv5.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/dcmodelspopup.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/dcmodelspopup.jpg
new file mode 100644
index 0000000..b19c7cb
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/dcmodelspopup.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/dcscenariospopup.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/dcscenariospopup.jpg
new file mode 100644
index 0000000..4f22aed
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/dcscenariospopup.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/decoratorsview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/decoratorsview.jpg
new file mode 100644
index 0000000..3961e25
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/decoratorsview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/diseasesview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/diseasesview.jpg
new file mode 100644
index 0000000..3ce7daf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/diseasesview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/error_log.png b/org.eclipse.stem.doc/help/html/interface/views/img/error_log.png
new file mode 100644
index 0000000..7d74c39
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/error_log.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/errorlogview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/errorlogview.jpg
new file mode 100644
index 0000000..b097641
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/errorlogview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/gemap1.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/gemap1.jpg
new file mode 100644
index 0000000..2a18eba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/gemap1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.jpg
new file mode 100644
index 0000000..138bd63
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.png b/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.png
new file mode 100644
index 0000000..833137b
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/graphsview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq1.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq1.jpg
new file mode 100644
index 0000000..1a41fca
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq2.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq2.jpg
new file mode 100644
index 0000000..f62d297
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq3.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq3.jpg
new file mode 100644
index 0000000..9d1256a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/lyapEq3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapview.jpg
new file mode 100644
index 0000000..0b1d079
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapview.png b/org.eclipse.stem.doc/help/html/interface/views/img/mapview.png
new file mode 100644
index 0000000..459fc34
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapviewcombo.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewcombo.jpg
new file mode 100644
index 0000000..0a4e88e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewcombo.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopup.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopup.jpg
new file mode 100644
index 0000000..249bd1a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopup.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupgain.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupgain.jpg
new file mode 100644
index 0000000..664f18d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupgain.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupprojection.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupprojection.jpg
new file mode 100644
index 0000000..03f8cdf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewpopupprojection.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/mapviewscale.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewscale.jpg
new file mode 100644
index 0000000..aeece46
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/mapviewscale.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.jpg
new file mode 100644
index 0000000..910d7ea
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.png b/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.png
new file mode 100644
index 0000000..5f40d86
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/modelsview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/projectview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/projectview.jpg
new file mode 100644
index 0000000..1b1219c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/projectview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/projectview.png b/org.eclipse.stem.doc/help/html/interface/views/img/projectview.png
new file mode 100644
index 0000000..94f19c7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/projectview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.jpg
new file mode 100644
index 0000000..bc2f442
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.png b/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.png
new file mode 100644
index 0000000..83a7e92
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/propertiesview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/reportPreferences.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/reportPreferences.jpg
new file mode 100644
index 0000000..6b46e76
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/reportPreferences.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.jpg
new file mode 100644
index 0000000..581595d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.png b/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.png
new file mode 100644
index 0000000..6aeea93
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/scenariosview.png
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/selectreports.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/selectreports.jpg
new file mode 100644
index 0000000..ddc050c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/selectreports.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/sequencersview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/sequencersview.jpg
new file mode 100644
index 0000000..73c52a5
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/sequencersview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/img/timeseriesview.jpg b/org.eclipse.stem.doc/help/html/interface/views/img/timeseriesview.jpg
new file mode 100644
index 0000000..48d8c9f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/img/timeseriesview.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/views/lyapunovview.html b/org.eclipse.stem.doc/help/html/interface/views/lyapunovview.html
new file mode 100644
index 0000000..ca5f424
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/lyapunovview.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns="http://www.w3.org/TR/REC-html40">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+
+<title>help</title>
+</head>
+
+<body>
+<h1>Lyapunov View</h1>
+<p>The <em>Lyapunov View</em> allows a user to apply tools developed to analyze
+dynamical systems. The RMS comparison view is a useful measure of the average
+difference between two scenarios. However, if a model and reference scenario
+each describe an epidemic that begins and end in the same state (zero
+infectious), the RMS error will eventually fall&nbsp; to zero as a function of
+time, even in case of a &#8220;bad&#8221; model. In addition to measuring the average error,
+it is useful to look for other measures that might provide a &#8220;fingerprint&#8221; for
+the spatiotemporal dynamics of an infectious disease. Like many dynamical
+systems, infectious disease is a process of many variables. However, it is often
+possible to capture the essential dynamics by looking at just a few system
+variables in an appropriate phase space.&nbsp; In its most general formalism, any
+dynamical system is defined by a fixed set of equations that govern the time
+dependence of the system&#8217;s state variables. The state variables at some instant
+in time define a point in phase space. A SEIR model defines a four dimensional
+phase space. An SI model defines a two dimensional space. Examining a reduced
+set of dimension may be thought of as taking slice through phase space (for
+example in the SI plane).
+<p class="MsoNormal" style="text-indent:11.5pt">At the state of the system
+changes with time, the point (S(t), I(t)) in phase space defines a <i>trajectory</i>
+in the SI plane. Consider an epidemic that begins with one infectious person and
+virtually the entire population susceptible at t=0,&nbsp; S(0) ~ 1. The trajectory
+will begin at time zero along the S axis near 1. As the disease spreads, the
+susceptible population (S) will decrease and the infectious population (I) will
+increase. The detailed shape of the this trajectory will depend on the time it
+takes for the disease to spread to different population centers, as well as the
+(susceptible) population density function. The peaks and valleys along the
+trajectory in SI phase space proved a signature or fingerprint for an epidemic
+the shape of which depends on the disease, the disease vectors, the population
+distribution, etc. The mathematics of dynamical systems provide us with a
+formalism to compare trajectories in a phase space. Given a single set of rules
+(e.g., a disease model), two simulations that begin infinitesimally close
+together in phase space may evolve different in time and space. This separation
+in phase space can be measure quantitatively. </p>
+<p class="MsoNormal" style="text-indent:11.5pt">The Vector</p>
+<p class="MsoNormal" style="text-indent:11.5pt" align="center">&nbsp;<span style="font-size:
+9.0pt"><img border="0" src="img/lyapEq2.jpg" width="147" height="39"></span> </p>
+<p class="MsoNormal" style="text-indent:11.5pt">defines a trajectory in SI space. The initial separation at
+time zero be defined as </p>
+<p class="MsoNormal" style="text-indent:11.5pt" align="center">
+<img border="0" src="img/lyapEq3.jpg" width="66" height="38">.
+</p>
+<p class="MsoNormal" style="text-indent:11.5pt">The rate of separation of two trajectories in phase space will often obey the
+equation</p>
+<p class="MsoNormal" align="center" style="text-align:center;text-indent:11.5pt">
+<img border="0" src="img/lyapEq1.jpg" width="234" height="48"></p>
+<p class="MsoNormal" style="text-indent:0in">&nbsp;where
+<span style="font-family:Symbol">l </span>is the Lyapunov Exponent. This
+exponent is a characteristic of the dynamical system that defines the rate of
+separation of infinitesimally close trajectories in phase space. </p>
+<p>To use the Lyapunov view:<ol>
+	<li>Enter the <a href="../perspectives/analysis.html">Analysis Perspective</a></li>
+	<li>Click on the Lyapunov Tab</li>
+	<li>Use the Select Folder buttons to chose the folders containing the data
+	you wish to compare. The files should have the following
+	<a href="csvloggerview.html">&nbsp;format.</a></li>
+	<li>Click &quot;Compute Lyapunov Exponent&quot;</li>
+	<li>Two charts will appear, the left hand chart will show the trajectories
+	in phase space (I vs. S) for the two data sets. The right hand chart will
+	show the Log of the integrated<br>
+	difference between the two trajectories as a function of time. The exponent
+	is the initial slope of this time varying difference plotted on a semi-log
+	plot.</li>
+</ol>
+</p>
+&nbsp;<p><img border="0" src="img/Lyapunov.jpg" width="1000" height="608"> </p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/mapview.html b/org.eclipse.stem.doc/help/html/interface/views/mapview.html
new file mode 100644
index 0000000..548ae9d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/mapview.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Map View</h1>
+<p>The Map View displays geographic images that reflect the state of
+an active Simulation. <img src="img/mapview.png" />
+<p>The state information displayed in the map view directly
+corresponds to the values updated by one of the <a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>
+in the Simulation. The particular <a
+	href="../../concepts/modelingframework.html#decorator"> Decorator</a>
+is selected by a "combo box" in the lower left of the view. Each <a
+	href="../../concepts/modelingframework.html#decorator"> Decorator</a>
+updates a number of properties (i.e., values that define the state of
+the Simulation). The Map view can display the "relative" values of these
+properties with different intensities/colors. The specific property is
+selected by the combo box beneath the one that selects the <a
+	href="../../concepts/modelingframework.html#decorator"> Decorator</a>.</p>
+<p><img src="img/mapviewcombo.jpg" />
+<p>The image can be panned by holding the left mouse button down and
+dragging the cursor.</p>
+<h2>Context Menu</h2>
+<p>A pop-up context menu is available by right-clicking on the
+image.</p>
+<p>
+<img src="img/mapviewpopup.jpg" />
+</p>
+<p>There is a sub-menu for specifying the "gain factor" to use
+when displaying values. The gain factor scales the values of the properties so that small
+values can be visualized. <br/>
+<img src="img/mapviewpopupgain.jpg" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/modelsview.html b/org.eclipse.stem.doc/help/html/interface/views/modelsview.html
new file mode 100644
index 0000000..cda465a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/modelsview.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Models View</h1>
+<p>The <em>Models</em> view displays the <a
+	href="../../concepts/modelingframework.html#model"> Models</a> that are
+available for use in user defined <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>.
+The available <a href="../../concepts/modelingframework.html#model">
+Models</a> are organized in a tree. Those listed under "STEM" are built-in
+to STEM. There may be others provided by third-parties. These predefined
+models provide an invaluable "jump-start" in the process of defining
+other <a href="../../concepts/modelingframework.html#model"> Models</a>.</p>
+<p>The view supports "drag" such that a <a
+	href="../../concepts/modelingframework.html#model"> Model</a> can be
+dragged from this view and "dropped" into an open Model or <a
+	href="../editors/scenarioeditor.html">Scenario editor</a>.</p>
+<img src="img/modelsview.png" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/projectview.html b/org.eclipse.stem.doc/help/html/interface/views/projectview.html
new file mode 100644
index 0000000..3c20c46
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/projectview.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>STEM Project Explorer View</h1>
+<p>The <em>STEM Project Explorer</em> view displays the STEM
+projects and their contents. A project is a collection of <a
+	href="../../concepts/modelingframework.html#decorator"> Decorators</a>,
+<a href="../../concepts/modelingframework.html#graph"> Graphs</a>, <a
+	href="../../concepts/modelingframework.html#model"> Models</a>, <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+and Sequencers that are typically focused on one particular simulation
+area, for instance, the spread of a particular disease.</p>
+<p>Right-clicking on items in the view will bring up a pop-up
+context menu.</p>
+<img src="img/projectview.png" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/propertiesview.html b/org.eclipse.stem.doc/help/html/interface/views/propertiesview.html
new file mode 100644
index 0000000..953d4cf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/propertiesview.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Properties View</h1>
+<p>The properties view allows you to edit the properties of components in your scenario, such as disease
+models, infectors and sequencers. As shown in the figure below, after selecting a disease model with the 
+properties view open, the properties of the model is shown. It is possible to change any of the parameters 
+in the disease model by left-clicking on its value. After changing one or more parameters, remember to save
+the disease model (Ctrl+S) to pick up the changes the next time you run a simulation.  
+<img src="img/propertiesview.png" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/reportview.html b/org.eclipse.stem.doc/help/html/interface/views/reportview.html
new file mode 100644
index 0000000..83a1535
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/reportview.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Report View</h1>
+<p><font size="2">The current distribution of STEM provides users with
+configurable run time Report Views with which to study running simulations. In
+the current distribution the available reports are:</font><ul>
+	<li><font size="2">The Time Series View</font></li>
+	<li><font size="2">The Phase Space View</font></li>
+	</ul>
+	<p><font size="2">All STEM views are create using the
+	<a href="http://www.eclipse.org/birt/">Eclipse Business Intelligence
+	Reporting Tool (BIRT).</a>&nbsp; </font></p>
+	<p><font size="2" face="Times New Roman">The Report Views complement the various Map visualization
+	views. While the Map gives a qualitative visualization of a running
+	simulation (e.g. a spreading infectious disease), the Report Views provide
+	more quantitative information about the simulation state either at specific
+	locations or aggregated a different levels.</font></p>
+	<p><font face="Times New Roman"><b>1) Loading the Report Views</b></font></p>
+	<p DIR="LTR"><font size="2" face="Times New Roman">To load or activate the reports, first launch
+	(and run) stem. Then, on the top menu bar click on </font></p>
+	<p DIR="LTR"><font size="2" face="Arial">&gt;window&gt;other...&gt;Time Series</font></p>
+	<font FACE="Helv">
+	<p DIR="LTR"><font size="2">Select it. Go back to the top menu bar and click
+	on </font></p>
+	</font>
+	<p DIR="LTR"><font size="2" face="Arial">&gt;window&gt;other...&gt;Phase Space</font></p>
+	<font FACE="Helv">
+	<p DIR="LTR"><font size="2">This will open two different BIRT Report Views.
+	Other views would be activated in the same way.</font></p>
+	<p DIR="LTR"><b>2) Starting the Report Views</b></p>
+	<p DIR="LTR"><font size="2">Next go to the scenarios tab and expand </font>
+	</p>
+	</font>
+	<p DIR="LTR"><font size="2" face="Arial">-&gt;STEM-&gt;Geography-&gt;Political-&gt;Country-&gt;Japan</font></p>
+	<font FACE="Helv">
+	<p DIR="LTR"><font size="2">double click on the built in scenario<i><br>
+	Spanish Flu, Tokyo, Japan, 2000<br>
+	</i>to start it.</font></p>
+	<table border="1" cellspacing="1" width="60%">
+		<tr>
+			<td>
+			<p align="center"><font FACE="Helv">
+			<img border="0" src="img/timeseriesview.jpg" width="600" height="417"></font></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="center"><b>Figure 1: Running the built in Japan Scenario
+			with the TimeSeries view displayed below the map.</b></td>
+		</tr>
+	</table>
+	<p DIR="LTR">&nbsp;</p>
+	<p DIR="LTR">&nbsp;</p>
+	<p DIR="LTR"><b>3) Adding and removing locations to Monitor</b></p>
+	<p DIR="LTR"><font size="2">Look at the time series and phase space views.
+	You will probably see a single chart which should show the data for all of
+	Japan. If you click on any location on the map, a new report will be added
+	for that new location. In this release clicking on the map will generate a
+	new report of every type that is currently loaded (e.g., both Time Series
+	and Phase Space reports will be added for that location if they are both
+	active). In the future we will add a selector so map clicking will generate
+	user specified types of new reports.<br>
+	<br>
+	Keep clicking on the map to get new reports. T<br>
+	To remove a report simply click the remove
+	button in the report window.</font></p>
+	
+	<p DIR="LTR"><b>4) Selecting what reports to generate</b></p>
+	<p DIR="LTR"><font size="2">You can choose what types of reports will be generated once you click on a location.
+	Right-clicking on a location will show you the context menu where you can enable or disable reports from the sub-menu <i>Select Reports</i>.
+	Next time you left-click on a specific location only the enabled reports for that location will be generated.</font></p>
+	<table border="1" cellspacing="1" width="60%">
+		<tr>
+			<td>
+			<p align="center"><font FACE="Helv">
+			<img border="0" src="img/selectreports.jpg" width="600" height="417"></font></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="center"><b>Figure 2: Context menu for enabling/disabling reports.</b></td>
+		</tr>
+	</table>
+	<p DIR="LTR">&nbsp;</p>
+	<p DIR="LTR">&nbsp;</p>
+	
+	<p DIR="LTR"><b>5) Remembering User preferences</b></p>
+	<p DIR="LTR"><font size="2">The STEM report views use Eclipse DialogSettings to
+	automatically remember user preferences. This feature is always enabled and
+	begins as soon as you enable any report view. The preferences that are
+	&quot;remembered&quot; are the map locations the user was most recently monitoring
+	with one or more report views. Preferences are stored independently for each
+	type of report so the system will allow (and remember) that the user wishes
+	to monitor, for example, one set of locations with Time Series reports and
+	another set of locations with Phase Space reports. The users preferences are
+	stored on disk in a directory:</font></p>
+	</font>
+	<font FACE="Arial">
+	<p DIR="LTR">...\runtime-stem.product\.metadata\.plugins\org.eclipse.stem.ui.reports</p>
+	</font>
+	<font FACE="Helv">
+	<p DIR="LTR"><font size="2">where the directory \runtime-stem.product is located in the
+	same parent directory as the users STEM eclipse workspace (for example
+	c:\runtime-stem.product).</font></p>
+	<p DIR="LTR"><font size="2">Preferences for the Time Series views are stored in a file:<br>
+	TimeSeries_Preferences.txt<br>
+	Preferences for the Phase Space views are stored in a file:<br>
+	PhaseSpace_Preferences.txt</font></p>
+	<p DIR="LTR"><b>6) Configuring the TimeSeries Report</b></p>
+	<p DIR="LTR"><font size="2">On the lower left hand side of every TimeSeries Report view
+	window are two combo boxes one atop the other. If a simulation is running,
+	the top combo box allows a user to take data from different &quot;decorators&quot;
+	that exist at selected locations. In most cases the user will be running
+	only one disease at a time and there will be only one location decorator to
+	chose from (the running disease). In general one can configure scenarios in
+	STEM to simultaneous run multiple diseases in which case one can examine the
+	state of each disease in turn via this to combo box. </font> </p>
+	<p DIR="LTR"><font size="2">The bottom combo box is not used by the TimeSeries Report. The
+	bottom combo box shows the different &quot;labels&quot; processed by the selected
+	decorator. For a particular disease model these labels might <i>include</i>,
+	for example,</font></p>
+	<p DIR="LTR">S - the population fraction&nbsp; Susceptible (0.0 &lt;= S &lt;= 1.0)</p>
+	<p DIR="LTR">E - the population fraction&nbsp; Exposed (0.0 &lt;= E &lt;= 1.0)</p>
+	<p DIR="LTR">I - the population fraction Infectious (0.0 &lt;= I &lt;= 1.0)</p>
+	<p DIR="LTR">R - the population fraction Recovered (0.0 &lt;= R &lt;= 1.0) </p>
+	<p DIR="LTR"><i><font size="2">Rather than display only a single variable or label S, E, I,
+	or R, the Time Series viewer simultaneously displays multiple labels for the
+	selected decorator in configurable colors. </font> </i><font size="2">See the colored lines in
+	Figure 1. By default the labels displayed in the Time Series view are S, E,
+	I, and R in Blue, Yellow, Red, and Green respectively. If these labels do
+	not exist in the selected decorator then the STEM report view will attempt
+	to render every label for which relative values (0-&gt;1) are defined. The
+	default color (blue) would be used.</font></p>
+	<p DIR="LTR"><b>7) Configuring the Labels and Colors</b></p>
+	<p DIR="LTR"><font size="2">To configure or change the default labels and colors displayed
+	in the Time Series view, go to the top menu bar and select</font></p>
+	<p DIR="LTR"><font size="2">&gt;Window&gt;preferences</font></p>
+	<p DIR="LTR"><font size="2">a dialog will open. On the left hand side expand -&gt;STEM -&gt;
+	Visualization</font></p>
+	<p DIR="LTR"><font size="2">and click on visualization. The displayed labels and their
+	associated colors may be changed in this dialog. See Figure 2 below.</font></p>
+	<table border="1" cellspacing="1" width="60%">
+		<tr>
+			<td>
+			<p align="center">
+			<img border="0" src="img/reportPreferences.jpg" width="600" ></td>
+		</tr>
+		<tr>
+			<td><b>Figure 3: The Default Labels and Colors may be configured in
+			the view preferences <i>(see text).</i></b></td>
+		</tr>
+	</table>
+	<p DIR="LTR"><i><font size="2">Please note, you must specify only valid label values for a
+	running model. If you type a label name that does not exist (e.g., X) the
+	Report Viewer will not find that label or associated values to plot. If you
+	are using one of STEMs built in Models it will not be necessary to change
+	these default values.</font></i></p>
+	<p DIR="LTR"><b>8) Configuring the PhaseSpace Report</b></p>
+	<p DIR="LTR"><font size="2">On the lower left hand side of every PhaseSpace
+	Report view window are four combo boxes. The left hand pair (one atop the
+	other) determine the y-axis value displayed. The right hand pair (one atop
+	the other) determine the x-axis value displayed.. If a simulation is
+	running, both top combo boxes allows a user to take data from different
+	&quot;decorators&quot; that exist at selected locations. In most cases the user will
+	be running only one disease at a time and there will be only one location
+	decorator to chose from (the running disease). The two bottom combo boxes
+	allow the user to select among the different &quot;labels&quot; processed by the
+	selected decorator. As discussed above, for a particular disease model these
+	labels might <i>
+	include</i>, for example, S, E, I, and R.&nbsp; The PhaseSpace view allows
+	one to view the &quot;trajectory&quot; of one system variable plotted against another
+	in a phase space of two variables. Typically epidemiologist will plot I(t)
+	vs S(t). Not that time is not an explicit axis label in this view. Rather
+	the resulting curve represents the trajectory of I vs S in time.</font></p>
+	<table border="1" cellspacing="1" width="60%">
+		<tr>
+			<td>
+			<p align="center"><font FACE="Helv">
+			<img border="0" src="img/PhaseSpaceView.jpg" width="600" ></font></td>
+		</tr>
+		<tr>
+			<td>
+			<p align="center"><b>Figure 4: <font FACE="Helv">Running the built
+			in Japan Scenario with the PhaseSpace view <br>
+			displayed below the map.</font></b></td>
+		</tr>
+	</table>
+	<p DIR="LTR">&nbsp; </p>
+	<p DIR="LTR"><b>9) For Code Developers</b></p>
+	<p DIR="LTR"><font size="2">All of the source code for the Report Viewers
+	may be found in the STEM package:</font></p>
+	</font><font FACE="Courier New" size="2">
+	<p DIR="LTR">org.eclipse.stem.ui.reports.views</p>
+	</font>
+	<p>&nbsp;</p>
+	<p>&nbsp;</p>
+</body>
+</html>
+
diff --git a/org.eclipse.stem.doc/help/html/interface/views/scenariocomparisonview.html b/org.eclipse.stem.doc/help/html/interface/views/scenariocomparisonview.html
new file mode 100644
index 0000000..ec5a065
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/scenariocomparisonview.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns="http://www.w3.org/TR/REC-html40">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+
+<title>help</title>
+</head>
+
+<body>
+<h1>Scenario Comparison View</h1>
+<p dir="ltr">The <em>Scenario Comparison View</em> allows a user to compare two data sets
+and to measure the time varying Root Mean Square (RMS) difference between the
+aggregate epidemic data. <br>
+The data may be real data or the results from one or more completed simulations.
+The algorithm used to measure the RMS difference
+<span style="font-family:Symbol">d</span><sub>a,b</sub>(t) between two scenarios
+&#8216;a&#8217; and &#8216;b&#8217; <br>
+at time t averaged over all locations (i) is:<p class="MsoNormal">
+<img border="0" src="img/comparsonEquation.jpg" width="597" height="149">
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</p>
+<p class="MsoNormal">Note that each location &#8216;<i>i</i>&#8217; is weighted by the local
+population P<sub>i</sub> so more populous locations contribute more to the
+measurement. The method assumes the scenarios a,b each cover the same set of
+location {i} which is true in this case. The RMS difference is evaluated only at
+locations that have a non-zero rate of infection at some time t. If, for
+example, a comparison is made of two scenarios involving the entire planet but
+the epidemic in question is localized to a small region (e.g., the state of
+Vermont), one only wants to compare the model to the reference over those
+locations where the epidemic actually took place. Including locations with I = 0<font face="Symbol">&quot;</font><font face="Times New Roman">t</font>
+would
+artificially reduce the estimated RMS error.</p>
+<p class="MsoNormal">Finally we note that the comparison is made including only
+the S and I states. The algorithm compares these two disease state variables to
+allow for comparisons between different types of models. In a real epidemic
+scenario, one may wish to evaluate (for example) SI, SIR and SEIR models for the
+same infectious disease. Since the S and I states are common to all, measuring
+the RMS difference in this way allows for comparison across different types of
+models. In cases where only the infectious or perhaps change in infectious<span style="position: relative; top: 2.0pt">
+<font face="Symbol">D</font>I </span><!--[if gte mso 9]><![endif]-->is
+known, RMS comparison may also be made based only on the I state.</p>
+<p>&nbsp;<p>To use the Scenario Comparison view:<ol>
+	<li>Enter the <a href="../perspectives/analysis.html">Analysis Perspective</a></li>
+	<li>Click on the Scenario Comparison Tab</li>
+	<li>Use the Select Folder buttons to chose the folders containing the data
+	you wish to compare. The files should have the following
+	<a href="csvloggerview.html">&nbsp;format.</a></li>
+	<li>Click Analyze</li>
+	<li>The time varying RMS difference will appear in the chart and the
+	integrated RMS difference will appear in the console at the bottom of the
+	view.</li>
+</ol>
+</p>
+<p>&nbsp;</p>
+<img border="0" src="img/ScenarioComparison.jpg" width="1000" height="608"><p>6.
+In this (or in any STEM chart) view, to toggle between a Linear and Log scale
+simply right click on the chart and specify you plot preferences in the dialog
+that<br>
+appears (see below).</p>
+<p><img border="0" src="img/ScenarioComparisonB.jpg" width="458" height="588">
+</p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/scenariosview.html b/org.eclipse.stem.doc/help/html/interface/views/scenariosview.html
new file mode 100644
index 0000000..4c61aab
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/scenariosview.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Scenarios View</h1>
+<p>The Scenarios view displays the <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+that are available to start a Simulation. The available <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>
+are organized in a tree. Those listed under "STEM" are built-in to STEM.</p>
+<p>A Simulation can be started by double-clicking on one of the
+listed <a href="../../concepts/modelingframework.html#scenario">
+Scenarios</a>, or by clicking on the green triangle in the menu bar. <img
+	src="img/scenariosview.png" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/sequencersview.html b/org.eclipse.stem.doc/help/html/interface/views/sequencersview.html
new file mode 100644
index 0000000..d8acc95
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/sequencersview.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Sequencers View</h1>
+<p>The <em>Sequencers</em> view displays the <a
+	href="../../concepts/modelingframework.html#sequencer"> Sequencers</a>
+that are available for use in <a
+	href="../../concepts/modelingframework.html#scenario"> Scenarios</a>.
+The available <a href="../../concepts/modelingframework.html#sequencer">
+Sequencers</a> are organized in a tree. Those listed under "STEM" are
+built-in to STEM.</p>
+<p>The view supports "drag" such that a <a
+	href="../../concepts/modelingframework.html#sequencer"> Sequencer</a>
+can be dragged from this view and "dropped" into an open Scenario
+editor.</p>
+<img src="img/sequencersview.jpg" />
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/tasksview.html b/org.eclipse.stem.doc/help/html/interface/views/tasksview.html
new file mode 100644
index 0000000..5894054
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/tasksview.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>help</title>
+</head>
+
+<body>
+<h1>Tasks View</h1>
+<p>This help text has not yet been written. Volunteers needed!
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/views/viewsoverview.html b/org.eclipse.stem.doc/help/html/interface/views/viewsoverview.html
new file mode 100644
index 0000000..b96c611
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/views/viewsoverview.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Overview</title>
+</head>
+
+<body>
+<h1>Views</h1>
+<p>The STEM interface includes a number of different "Views". Each
+view displays a particular aspect of the state of STEM, its components,
+or of an active Simulation. Some views have functions that allow
+Simulations to be created and controlled.
+<ul>
+    <li><a href="activesimulationsview.html">Active Simulations</a></li>
+	<li><a href="controlview.html">Control</a></li>
+	<li><a href="csvloggerview.html">CSV Logger View</a></li>
+	<li><a href="decoratorsview.html">Decorators</a></li>
+	<li><a href="diseasessview.html">Diseases</a></li>
+	<li><a href="dublincorepopup.html">Dublin Core Pop-up</a></li>
+	<li><a href="epidemicview.html">Epidemic</a></li>
+	<li><a href="error_log.html">Error Log</a></li>
+	<li><a href="estimatorview.html">Estimator</a></li>
+	<li><a href="ge.html">Google Earth</a></li>
+	<li><a href="graphsview.html">Graphs</a></li>
+	<li><a href="lyapunovview.html">Lyapunov</a></li>
+	<li><a href="mapview.html">Map</a></li>
+	<li><a href="modelsview.html">Models</a></li>
+	<li><a href="projectview.html">Project</a></li>
+	<li><a href="propertiesview.html">Properties</a></li>
+	<li><a href="reportview.html">Report</a></li>
+	<li><a href="scenariocomparisonview.html">Scenario Comparison</a></li>
+	<li><a href="scenariosview.html">Scenarios</a></li>
+	<li><a href="sequencerview.html">Sequencers</a></li>
+	<li><a href="tasksview.html">Tasks</a></li>
+
+</ul>
+<p>In addition, views that list Simulation components (<a
+	href="decoratorsview.html">Decorators</a>, <a href="graphsview.html">Graphs</a>,
+<a href="modelsview.html">Models</a>, <a href="scenariosview.html">Scenarios</a>
+and <a href="sequencerview.html">Sequencers</a>) also support an instant
+"pop-up" display of the <a href="http://dublincore.org/">Dublin Core</a>
+metadata of the component displayed in the view. See <a
+	href="dublincorepopup.html">Dublin Core Pop-up</a> for more details.</p>
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/diseasewizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/diseasewizard.html
new file mode 100644
index 0000000..d5bde6e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/diseasewizard.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Disease Wizard</title>
+</head>
+<body>
+<p>The <em>New Disease Wizard</em> is used to create and define the
+properties of a new Disease.</p>
+
+<img src="img/diseasewizard1.jpg" />
+<img src="img/diseasewizard2.jpg" />
+<img src="img/diseaseproperties.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/experimentwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/experimentwizard.html
new file mode 100644
index 0000000..be28d29
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/experimentwizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Experiment</title>
+</head>
+<body>
+<p>The <em>New Experiment</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#experiment"> Experiment</a>.</p>
+<img src="img/experimentwizard1.jpg" />
+<img src="img/experimentwizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/graphwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/graphwizard.html
new file mode 100644
index 0000000..0ea416f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/graphwizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Graph</title>
+</head>
+<body>
+<p>The <em>New Graph</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#graph"> Graph</a>.</p>
+<img src="img/graphwizard1.jpg" />
+<img src="img/graphwizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/diseaseproperties.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseaseproperties.jpg
new file mode 100644
index 0000000..b2e5a40
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseaseproperties.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard1.jpg
new file mode 100644
index 0000000..bd3bbae
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard2.jpg
new file mode 100644
index 0000000..db50eb9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/diseasewizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard1.jpg
new file mode 100644
index 0000000..6df2177
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard2.jpg
new file mode 100644
index 0000000..4e5a233
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/experimentwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard1.jpg
new file mode 100644
index 0000000..e38b834
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard2.jpg
new file mode 100644
index 0000000..b9caf1f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/graphwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorproperties.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorproperties.jpg
new file mode 100644
index 0000000..d485217
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorproperties.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard1.jpg
new file mode 100644
index 0000000..83106ed
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard2.jpg
new file mode 100644
index 0000000..ebbd71a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/infectorwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard1.jpg
new file mode 100644
index 0000000..904f9d2
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard2.jpg
new file mode 100644
index 0000000..7172caa
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modelwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard1.jpg
new file mode 100644
index 0000000..766e3ab
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard2.jpg
new file mode 100644
index 0000000..8ee4959
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard3.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard3.jpg
new file mode 100644
index 0000000..eb4dea5
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard4.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard4.jpg
new file mode 100644
index 0000000..69a617c
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard4.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard5.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard5.jpg
new file mode 100644
index 0000000..110b394
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard5.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard6.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard6.jpg
new file mode 100644
index 0000000..b9abcd4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/modifierwizard6.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard1.jpg
new file mode 100644
index 0000000..b6401b1
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard2.jpg
new file mode 100644
index 0000000..b21f546
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/predicatewizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard1.jpg
new file mode 100644
index 0000000..0ba4790
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard2.jpg
new file mode 100644
index 0000000..5340938
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/realtimesequencerwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard1.jpg
new file mode 100644
index 0000000..626d327
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard2.jpg
new file mode 100644
index 0000000..e061e7f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/scenariowizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard1.jpg
new file mode 100644
index 0000000..4443481
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard2.jpg
new file mode 100644
index 0000000..cb9216d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/sequentialsequencerwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/stemprojectwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/stemprojectwizard1.jpg
new file mode 100644
index 0000000..a481d6a
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/stemprojectwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard1.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard1.jpg
new file mode 100644
index 0000000..618c1ac
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard2.jpg b/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard2.jpg
new file mode 100644
index 0000000..e7fc9c4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/img/triggerwizard2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/infectorwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/infectorwizard.html
new file mode 100644
index 0000000..12cc686
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/infectorwizard.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Infector Wizard</title>
+</head>
+<body>
+<p>The <em>New Infector Wizard</em> is used to create and define the
+properties of a new Infector.</p>
+<img src="img/infectorwizard1.jpg" />
+<img src="img/infectorwizard2.jpg" />
+<img src="img/infectorproperties.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/modelwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/modelwizard.html
new file mode 100644
index 0000000..11232d3
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/modelwizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Model</title>
+</head>
+<body>
+<p>The <em>New Model</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#model"> Model</a>.</p>
+<img src="img/modelwizard1.jpg" />
+<img src="img/modelwizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/modifierwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/modifierwizard.html
new file mode 100644
index 0000000..8903e45
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/modifierwizard.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Modifier</title>
+</head>
+<body>
+<p>The <em>New Modifier</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#modifier"> Modifier</a>.  It is a 
+bit different from the other wizards in that it is invoked from the context menu
+of selected STEM components that can be modified.  In the image below, the built-in
+disease model for the Spanish Flu is selected and the context menu displayed. 
+<img src="img/modifierwizard1.jpg" />
+</p>
+<p>
+The resulting wizard is in the next image.  It shows the attributes of the disease model that
+can be modified.  In the example, a <a href="../../concepts/modelingframework.html#rangemodifier"> 
+Range Modifier</a> for the <em>Transmission Rate</em> has been 
+created that sets the initial value to 2.0 and then increments it by 0.1 until 2.5 (inclusive).
+In the example, the <em>Disease Name</em> and <em>Population</em> are grayed out, indicating
+that no modifier can be specified for those attributes.
+</p>
+<p>
+The creation of <a href="../../concepts/modelingframework.html#sequencemodifier"> 
+Sequence Modifiers</a> is not implemented yet.
+</p>
+<p>
+<img src="img/modifierwizard4.jpg" />
+</p>
+<p>
+Similiarly, creating a <a href="../../concepts/modelingframework.html#modifier"> Modifier</a> for
+an Edge Label and a Node label is illustrated below. 
+</p>
+<p>
+<img src="img/modifierwizard2.jpg" />
+<img src="img/modifierwizard3.jpg" />
+</p>
+<img src="img/modifierwizard6.jpg" />
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/predicatewizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/predicatewizard.html
new file mode 100644
index 0000000..1ebfed3
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/predicatewizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Predicate</title>
+</head>
+<body>
+<p>The <em>New Predicate</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#predicate"> Predicate</a>.</p>
+<img src="img/predicatewizard1.jpg" />
+<img src="img/predicatewizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/realtimesequencerwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/realtimesequencerwizard.html
new file mode 100644
index 0000000..2c27aeb
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/realtimesequencerwizard.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Real-Time Sequencer Wizard</title>
+</head>
+<body>
+<p>The <em>New Real-Time Sequencer</em> wizard is used to create and
+define the properties of a new Real-Time <a
+	href="../../concepts/modelingframework.html#sequencer"> Sequencer</a>.</p>
+<img src="img/realtimesequencerwizard1.jpg" />
+<img src="img/realtimesequencerwizard2.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/scenariowizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/scenariowizard.html
new file mode 100644
index 0000000..077f4f9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/scenariowizard.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Scenario</title>
+</head>
+<body>
+<p>The <em>New Scenario</em> wizard is used to create and define the
+properties of a new <a
+	href="../../concepts/modelingframework.html#scenario"> Scenario</a>.</p>
+<img src="img/scenariowizard1.jpg" />
+<img src="img/scenariowizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/sequentialsequencerwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/sequentialsequencerwizard.html
new file mode 100644
index 0000000..1ef2937
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/sequentialsequencerwizard.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Sequential Sequencer Wizard</title>
+</head>
+<body>
+<p>The <em>New Sequential Sequencer</em> wizard is used to create
+and define the properties of a new Sequential <a
+	href="../../concepts/modelingframework.html#sequencer"> Sequencer</a>.</p>
+<img src="img/sequentialsequencerwizard1.jpg" />
+<img src="img/sequentialsequencerwizard2.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/stemprojectwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/stemprojectwizard.html
new file mode 100644
index 0000000..d13c158
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/stemprojectwizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New STEM Project Wizard</title>
+</head>
+<body>
+<p>The <em>New STEM Project</em> wizard is used to create and
+define the properties of a new STEM Project.</p>
+<img src="img/stemprojectwizard1.jpg" />
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/triggerwizard.html b/org.eclipse.stem.doc/help/html/interface/wizards/triggerwizard.html
new file mode 100644
index 0000000..8e54ee8
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/triggerwizard.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>New Trigger</title>
+</head>
+<body>
+<p>The <em>New Trigger</em> wizard is used to create and define the
+properties of a new <a href="../../concepts/modelingframework.html#trigger"> Trigger</a>.</p>
+<img src="img/triggerwizard1.jpg" />
+<img src="img/triggerwizard2.jpg" />
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/interface/wizards/wizardsoverview.html b/org.eclipse.stem.doc/help/html/interface/wizards/wizardsoverview.html
new file mode 100644
index 0000000..4a78629
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/interface/wizards/wizardsoverview.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Overview</title>
+</head>
+
+<body>
+<h1>Wizards</h1>
+<p>A <em>Wizard</em> is an aid that helps a STEM user complete a
+common task. A Wizard "walks" a user step-by-step through each stage of
+the process of completing the task. When a Wizard is started it creates
+a series of small windows that contain "forms" that a user fills out to
+provide the information necessary to complete the task. Informative
+messages prompt the user for missing information and provide feedback
+(i.e. error messages) on the validity of the user's entries.</p>
+<p>When the user has provided sufficient information to complete the
+task they select the "Finish" button and the Wizard will complete its
+job by performing the task for the user.</p>
+<p>At any point a user can abandon the Wizard by canceling the
+operation and nothing will have changed in their system.</p>
+<p>STEM contains the following Wizards:</p>
+<ul>
+	<li><a href="diseasewizard.html">Define a new Disease</a></li>
+	<li><a href="experimentwizard.html">New Experiment</a></li>
+	<li><a href="infectorwizard.html">Define a new Infector</a></li>
+	<li><a href="graphwizard.html">New Graph</a></li>
+	<li><a href="modelwizard.html">New Model</a></li>
+	<li><a href="modifierwizard.html">New Modifier</a></li>
+	<li><a href="predicatewizard.html">New Predicate</a></li>
+	<li><a href="realtimesequencerwizard.html">New Real-Time Sequencer</a></li>
+	<li><a href="scenariowizard.html">New Scenario</a></li>
+	<li><a href="sequentialsequencer.html">New Sequential Sequencer</a></li>
+	<li><a href="stemprojectwizard.html">New STEM Project</a></li>
+	<li><a href="triggerwizard.html">New Trigger</a></li>
+</ul>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/reference/disclaimer.html b/org.eclipse.stem.doc/help/html/reference/disclaimer.html
new file mode 100644
index 0000000..784d762
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/reference/disclaimer.html
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<title>Disclaimer</title>
+</head>
+
+
+<body>
+<h2>Disclaimer</h2>
+<p>&nbsp;</p>
+<table border="0" width="60%" id="table1">
+	<tr>
+		<td><font FACE="Helv">
+The various models and reference data included in STEM are provided 
+as examples of how users can create and define their own models and data. While effort was/is 
+made to ensure the data reflects information available today in the public domain, we do not represent or guarantee the accuracy 
+of data or of the original sources including populations, area, population densities, geographic information (precise latitudes and longitudes, etc). In 
+some cases estimations were used to provide approximations for population densities where no public data could be found. The mathematical 
+models included in STEM are based on standard textbook models like, for example, the SIR or SEIR models.
+Users are free to adjust the rate constants in these mathematical 
+models to create their own approximations or models of infectious disease. In 
+addition to changing rate constants,
+advanced users will want to code their own mathematics extending 
+the simple base models. We do not represented or guarantee that the simple base 
+models included in STEM are
+&quot;optimal&quot; for any particular infectious disease and creation of a 
+&quot;good&quot; model for real disease is part of modern state of the art epidemiological 
+research. STEM is provided as 
+a Framework to support this research in which users may create and 
+exchange their own models based on their own reference data. We do claim to implemented &quot;best&quot; or even &quot;accurate&quot; 
+models for any particular disease.
+Over time we will build into STEM tools that will allow users to do 
+their own validation studies of various models.
+</font>
+		</td>
+	</tr>
+</table>
+<font FACE="Helv" SIZE="2">
+<p DIR="LTR">&nbsp;</p>
+</font><font FACE="Helv">
+<p>
+&nbsp;</p>
+</font>
+<p>
+
+&nbsp;
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/reference/references.html b/org.eclipse.stem.doc/help/html/reference/references.html
new file mode 100644
index 0000000..ebeabdd
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/reference/references.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<title>Reference</title>
+</head>
+
+
+<body>
+<h2>Spatiotemporal Epidemiological Modeller (STEM) References</h2>
+<p>
+
+The following links will give you more information about STEM.
+<p>
+These web pages do not format well in the Eclipse environment, so 
+we recommend using your normal browser (Firefox, etc). 
+<p>
+To do this, go to: 
+<i><pre>
+ Window -> Prefereces -> Help 
+   select <b>Use external browser</b>
+ Terminate the current help window, 
+ and reselect <b>Help -> Help Contents</b>
+</pre></i>
+
+<h2>References</h2> 
+  <ul>
+  <li>  
+  <a href="http://www.ij-healthgeographics.com/content/5/1/4">
+    http://www.ij-healthgeographics.com/content/5/1/4</a>
+   <br>A recent paper describing the STEM concepts
+   
+   
+   <li>
+    <a href="http://wiki.eclipse.org/index.php/STEM">
+    http://wiki.eclipse.org/index.php/STEM</a>
+    <br>Eclipse STEM Wiki
+   <li>
+     <a href="http://www.eclipse.org/stem">http://www.eclipse.org/stem</a>
+      <br>Eclipse STEM web page
+  </ul>
+  
+  
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/toc.html b/org.eclipse.stem.doc/help/html/toc.html
new file mode 100644
index 0000000..c2ed66d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/toc.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>STEM Table of Contents</title>
+</head>
+
+<body>
+<center>
+<h1>STEM User Help</h1>
+</center>
+<h2>STEM Table of Contents</h2>
+<p>The Spatiotemporal Epidemiological Modeler (STEM) is an
+extensible software system and framework for developing and running
+discrete event simulation models. It was primarily developed for
+modeling the spread of infectious diseases, but it is general enough to
+be applied to virtually any other modeling application involving space
+and time.</p>
+<P>
+<ul>
+  <li><a href=gettingstarted/quickstart.html target="main" >Getting Started</a>
+  <li>STEM concepts
+    <ul>
+      <li><a href=concepts/overview.html target="main" >Overview</a>
+      <li><a href=concepts/modelingframework.html target="main" >Framework</a>
+      <li><a href=concepts/extensibility.html target="main" >Extensibility</a>
+    </ul>
+ <li>Interface </a>
+    <ul>
+      <li><a href=interface/interfaceoverview.html target="main" >Overview</a>
+      <li><a href=interface/perspectives/perspectivesoverview.html target="main" >Perspectives</a>
+      <ul>
+        <li><a href=interface/perspectives/analysis.html target="main" >Analysis</a>
+        <li><a href=interface/perspectives/designer.html target="main" >Designer</a>
+        <li><a href=interface/perspectives/simulation.html target="main" >Simulation</a>
+      </ul>
+      <li><a href=interface/views/viewsoverview.html target="main" >Views</a>
+      <ul>
+
+
+			<li><a href=interface/views/activesimulationsview.html target="main" >Active Simulations View</a>
+
+			<li><a href=interface/views/controlview.html target="main" >Control View</a>
+
+			<li><a href=interface/views/csvloggerview.html target="main" >CSV Logger View</a>
+
+			<li><a href=interface/views/decoratorsview.html target="main" >Decorators View</a>
+
+			<li><a href=interface/views/diseasesview.html target="main" >Diseases View</a>
+
+			<li><a href=interface/views/epidemicview.html target="main" >Epidemic View</a>
+
+			<li><a href=interface/views/error_log.html target="main" >Error Log View</a>
+
+			<li><a href=interface/views/estimator.html target="main" >Estimator View</a>
+
+			<li><a href=interface/views/ge.html target="main" >Google Earth View</a>
+
+			<li><a href=interface/views/graphsview.html target="main" >Graphs View</a>
+
+			<li><a href=interface/views/lyapunovview.html target="main" >Lyapunov View</a>
+
+			<li><a href=interface/views/mapview.html target="main" >Map View</a>
+
+			<li><a href=interface/views/modelsview.html target="main" >Models View</a>
+
+			<li><a href=interface/views/projectview.html target="main" >Project Explorer View</a>
+
+			<li><a href=interface/views/propertiesview.html target="main" >Properties View</a>
+
+			<li><a href=interface/views/reportview.html target="main" >Report View</a>
+
+			<li><a href=interface/views/scenariosview.html target="main" >Scenarios View</a>
+
+			<li><a href=interface/views/scenariocomparisonview.html target="main" >Scenario Comparison View</a>
+
+			<li><a href=interface/views/sequencersview.html target="main" >Sequencers View</a>
+
+			<li><a href=interface/views/dublincorepopup.html target="main" >Dublin Core Popup</a>
+      </ul>
+    </ul>
+
+
+
+
+  <li><a href=epidemiologicalmodeling/overview.html target="main" > Epidemiological Modeling </a>
+  <li><a href=tutorials/tutorialsoverview.html target="main" >Tutorials</a>
+  <li><a href=reference/references.html target="main" >References </a>
+  <li><a href="reference/disclaimer.html">Disclaimer</a></ul>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/csvimporttutorial.html b/org.eclipse.stem.doc/help/html/tutorials/csvimporttutorial.html
new file mode 100644
index 0000000..1a2f1f8
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/csvimporttutorial.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Scenario Tutorial</title>
+</head>
+<body>
+<h1>Importing Data From External Files</h1>
+<p><b>Overview:</b></p>
+<p>STEM also allows users to import data from one or more external files and to 
+play them back. Today, import is supported for Comma Separated Variable (CSV) 
+files.<br>
+&nbsp;</p>
+<p><b>Organizing the Data Files:</b></p>
+<p>The individual files or collections of files for a particular scenario 
+should be grouped in a single folder. In figure 1a we show a collection of 
+files, all containing Shigella data, grouped in a folder called "ScenarioShigella". 
+This folder can have any name and be placed in any location. In the example 
+below we place the folder in the same location that STEM typically exports 
+data to, namely:</p>
+<p>&nbsp;&nbsp; ... <b> runtime-stem.product\&lt;project&gt;\Recorded Simulations\
+</b></p>
+<p>Where your runtime-stem.product\ is typically located n&nbsp;
+<a href="file:///C:/runtime-stem.product/">C:\runtime-stem.product\</a> in a 
+default Eclipse installation.</p>
+<p>To import data, it is necessary that a CSV file be created for each state 
+modeled by the disease. Each file name should be the disease state identifier 
+(e.g. S, E, I or R) followed by an underscore character (_) followed by a number. 
+The number indicates the geographical resolution for locations contained in the 
+file. For instance, 3 represents locations at administration level 3 (US cities). 
+In Figure 1a we show several files containing data for the S, E, I and R states 
+at administration level 3. The file extension should be .csv. </p>
+<p>For information on how to export data, please see the documentation on the
+<a href="../interface/views/csvloggerview.html">CSV Logger View</a>.</p>
+<table border="1" width="55%" id="table3">
+	<tr>
+		<td>
+		<img border="0" src="img/importscenario1a.jpg"></td>
+	</tr>
+	<tr>
+		<td><b>Figure 1a: Organizing your data to prepare to import into STEM.</b></td>
+	</tr>
+</table>
+<p>Each CSV file should contain a header indicating the domain of data in 
+each column. The first column should contain a sequential iteration or row 
+number and the header label must be 'iteration'. The second column should 
+contain the time the data applies to (each row should be sequential in time) 
+with header label 'time'. The following columns headers should indicate the 
+unique STEM location ID for which data in that column belongs to, and the 
+values in each row is the count (individuals) at the location in the state 
+represented by the file. If the data is from syndromic surveillance users 
+will likely not have information on every possible state but when importing 
+you must have files and file headers for each state that you want to display. 
+STEM determines the type of the disease by checking which files are available 
+when importing data, so if for example STEM finds an S_3.csv and I_3.csv file 
+but no E_3.csv or R_3.csv file it will assumed the disease is of type SI. 
+Note that the data in each column must be total count (individuals) and not 
+fraction in each state. The numbers may be floating point (allowing fractional 
+people infected for example). </p>
+<table border="1" id="table5">
+	<tr>
+		<td>
+		<p align="left"><b>iteration,&nbsp;time,&nbsp;US-VT-50013-67000,&nbsp;US-VT-50027-77500,&nbsp;US-VT-50021-16825,&nbsp;US-VT-50021-75925<br/>
+		0,Thu&nbsp;Dec&nbsp;13&nbsp;18:32:58&nbsp;PST&nbsp;2007,&nbsp;253175,&nbsp;1.45,&nbsp;1.45,&nbsp;0.0,&nbsp;0.0,&nbsp;22.99<br/>
+		1,Thu&nbsp;Dec&nbsp;13&nbsp;18:32:59&nbsp;PST&nbsp;2007,&nbsp;253110,&nbsp;3.34,&nbsp;3.34,&nbsp;0.0,&nbsp;0.43,&nbsp;86.22<br/>
+		...</b></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Table 1: The CSV file must label the locations you plan to import 
+		into STEM (see text)<br>
+		</b><i>For information on how to export data, please see the 
+		documentation on the <a href="../interface/views/csvloggerview.html">CSV 
+		Logger View</a>.</i></td>
+	</tr>
+</table>
+<p align="center">&nbsp;</p>
+<p align="left">In order to actually import the data into STEM you must create a 
+scenario. The external data will be read by adding a special disease model<br>
+called a <b>&quot;ExternalDataSourceDiseaseModel&quot;</b> to your scenario. Follow the 
+instructions for <a href="scenariotutorial.html">creating a scenario.</a> Your 
+scenario must contain<br>
+a&nbsp; <a href="modeltutorial.html">model</a> and <a href="graphtutorial.html">
+graph</a> that contains the same set of the regions named in your collection of 
+data files. So if you want to play back data on US counties, <br>
+you must add all the US counties to your model.</p>
+<p align="left">When you are ready to add the <b>ExternalDataSourceDiseaseModel
+</b>to your scenario (under the model node), click on the icon for
+<a href="diseasetutorial.html">adding a new disease</a>.<br>
+specify your project and give the disease a name. Select&nbsp; <b>
+ExternalDataSourceDiseaseModel </b>as the disease model. You must then tell the&nbsp;
+<b>ExternalDataSourceDiseaseModel <br>
+</b>the location of your data file(s). You may use the selector buttons to the 
+right of Data Path. A &quot;Select Directory&quot; dialog (figure 1c) will appear allowing 
+you to select a directory that contains the data files you wish to play back. <br>
+</p>
+<table border="1" width="38%" id="table4">
+	<tr>
+		<td>
+		<img border="0" src="img/importscenario1b.jpg"></td>
+		<td>
+		<img border="0" src="img/importscenario1c.jpg"></td>
+	</tr>
+	<tr>
+		<td><b>Figure 1b: Creating an&nbsp; ExternalDataSourceDiseaseModel </b>
+		</td>
+		<td><b>Figure 1c: Select the Directory that Contains your data</b></td>
+	</tr>
+</table>
+<p>Once you have created a scenario set up to Replay a disease from an external 
+file you can also edit the data path using the Properties Editor.&nbsp; Just go 
+to your project, find the&nbsp; <b>ExternalDataSourceDiseaseModel </b>you 
+created<br>
+under the &quot;decorators&quot; folder, and&nbsp; double click on it in the Resource Set 
+window (See figure 2). The Editor will show up allowing you to change this path 
+used to read in data.</p>
+<p>&nbsp;</p>
+<table border="1" width="43%" id="table2">
+	<tr>
+		<td>
+		<b>
+		<img border="0" src="img/importscenario2.jpg" ></b></td>
+	</tr>
+	<tr>
+		<td><b>Figure 2: Changing the Data Path in the Properties Editor</b></td>
+	</tr>
+</table>
+<p>&nbsp;</p>
+<p> Once you have completed setting up your scenario,
+<span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></p>
+<p> To replay your data, simply select the scenario you created in the STEM 
+project explorer, right click, and select run. STEM will launch, load the 
+locations you specified<br>
+and play back your data.</p>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/diseasetutorial.html b/org.eclipse.stem.doc/help/html/tutorials/diseasetutorial.html
new file mode 100644
index 0000000..b18cd16
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/diseasetutorial.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Disease Tutorial</title>
+</head>
+<body>
+<h1>Creating a new Disease</h1>
+
+<p>1) On the menu bar click -&gt;new-&gt;new disease </p>
+<p>2) This will launch the Dialog shown in Figure 1. Fill in the Name: (ExperimentalDisease)
+</p>
+<p>3) Fill in the Disease Name: You can use the same name you used in (2) (ExperimentalDisease)
+</p>
+<p>4) Select the DiseaseModel in the ComboBox: e.g., select &quot;ExperimentalDiseaseModelImpl&quot;
+</p>
+<p>At this point you should also edit or set any of the disease parameters (i.e. 
+Transmission Rate, Recovery Rate, etc).<br>
+If you don't want to do it now it will also be editable any time after the 
+scenario is created. </p>
+<table border="1" cellspacing="1" width="49%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/diseaseDialog.jpg" width="525" height="531"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 1: The new Disease Dialog.</b></td>
+	</tr>
+</table>
+<p>&nbsp;</p>
+<p>5) Fill in any Dublin core data you want to add </p>
+<p>6) Click finish </p>
+<p>7) Under decorators you should see ExperimentalDisease.standard </p>
+<p>8) Double click on MODELS in the project explorer. You should see &quot;CubaExperimentalDisease&quot; 
+in the Resource Set. </p>
+<p>9) DRAG your new disease (e.g., CubaExperimentalDisease.Standard) from 
+decorators (in the project explorer window) into the model &quot;CubaExperimentalDisease&quot; 
+in the Resource Set window. Expand the &quot;CubaExperimentalDisease&quot; in the 
+Resource Set window to see that it worked. See Figure 2.</p>
+<table border="1" cellspacing="1" width="49%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/dragdiseasetomodel.jpg" width="573" height="431"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 2. Drag the Disease Model (decorator) into 
+		the Model in the Resource Set.</b></td>
+	</tr>
+</table>
+
+<h3><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/experimenttutorial.html b/org.eclipse.stem.doc/help/html/tutorials/experimenttutorial.html
new file mode 100644
index 0000000..eb71be5
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/experimenttutorial.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Experiment Tutorial</title>
+</head>
+<body>
+<h1>Create a new Experiment</h1>
+<p><b>Overview:</b></p>
+<p>An Experiment is a collection of <i>modifiers </i>with a link to a <b>
+Scenario</b><br>
+An experiment can run just like a scenario can run. When you run an experiment
+it creates a <b>Batch</b><br>
+A Batch is an executable that spawns off (a sequence of) simulations. The
+Experiment uses modifiers to make changes to the scenario then run a simulation
+from each.<br>
+&nbsp;</p>
+<p>New View: Active Batches (analogous to Active Simulations)<br>
+<br>
+1) create your scenario<br>
+<br>
+2) in the editor you can create modifiers for models, decorators (a disease
+model), or graphs.<br>
+To create a modifier for a disease, for example, find your disease in the STEM
+Project explorer. Select it, right click on your disease, and chose create a modifier
+as shown in figure 1. </p>
+<table border="1" width="30%" id="table1">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/exper1a.jpg" width="448" height="653"></td>
+		<td><img border="0" src="img/exper1b.jpg" width="449" height="649"></td>
+	</tr>
+	<tr>
+		<td><b>Figure 1a: Creating a new modifier for a particular disease in an
+		existing scenario</b></td>
+		<td><b>Figure 1b: Defining the new modifier for an experiment</b></td>
+	</tr>
+</table>
+<p> <br>
+This will launch a new dialog to help you create a modifier that can be added to
+an experiment (see figure 2). In the new modifier dialog, for example, under Transmission rate select &quot;range&quot; <br>
+<i>(sequence not yet enabled)</i> and specify the range as shown in figure 2.</p>
+<p><br>
+<br>
+3) On top, select &quot;Experiment Model&quot; to launch the experiment wizard (Figure 2)<br>
+drag the scenario into the experiment<br>
+drag any number of modifiers into the experiment</p>
+<p>click on the experiment, right click, and run it.</p>
+<font size="4">
+</font>
+<table border="1" cellspacing="1" width="45%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/exper2.jpg" width="756" height="490"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 2: The New Experiment Wizard.</b></td>
+	</tr>
+</table>
+
+<h3><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/graphtutorial.html b/org.eclipse.stem.doc/help/html/tutorials/graphtutorial.html
new file mode 100644
index 0000000..748a1f7
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/graphtutorial.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Graph Tutorial</title>
+</head>
+<body>
+<h1>Creating a new Graph Tutorial</h1>
+Creating a graph in stem involves building a model and adding to it a set of 
+locations (Nodes) and connections between those locations (Edges).<p>Stem comes 
+with a number of build in Model each containing preconfigured graphs. It also 
+comes with preconfigured Models for every country and for every continent. These 
+may be found in the Designer Perspective under the Models tab. See: 
+Models&gt;Geography</p>
+<p>Adding a new disease vector or transmission path between two locations 
+required adding a new Edge between between the two respective nodes. Before we 
+discuss how to define an entirely new type of edge, it is important to learn how 
+to compose a graph taking advantage of build in edge collections that are 
+already included in STEM.</p>
+<p>&nbsp;</p>
+<p align="center"><b><font size="5">Composing a Graph</font></b></p>
+<p align="left">Suppose you want to create a new simulation scenario for some 
+disease involving three countries; France, Italy, and Spain. Stem comes with 
+models for each country but does not come with a graph for that group of three. 
+We must compose it.</p>
+<p align="left">1) Follow the example in the section on <a href="projecttutorial.html">Creating a new Project</a> 
+to create a project folder for this new scenario.</p>
+<p align="left">2) Follow the example in the section on <a href="modeltutorial.html">Creating a new Model</a> 
+to create a parent model. In the following example we will assume that you used 
+the name &quot;Example&quot; for this parent model.</p>
+<p align="left">3) Click on your &quot;Example&quot; model to open it in the Resource Set 
+window.</p>
+<p align="left">4) Click on the models folder and open the Folders</p>
+<p align="left">&gt;STEM&gt;Geography&gt;Political&gt;Country&gt;ESP</p>
+<p align="left">Drag the model entitled&nbsp; &quot;ESP(0, 1) Full Infrastructure&quot; 
+into your parent &quot;Example&quot; model. </p>
+<p align="left">&nbsp;&quot;ESP(0, 1) Full Infrastructure&quot; is the full infrastructure 
+for Spain with admin 0 and admin 1 resolution. It is itself a graph with 
+containment relationships and <br>
+adjacency relationships for Spain.</p>
+<p align="left">5) Repeat Step 4 for France and Italy</p>
+<p align="left">&gt;STEM&gt;Geography&gt;Political&gt;Country&gt;FRA</p>
+<p align="left">&gt;STEM&gt;Geography&gt;Political&gt;Country&gt;ITA</p>
+<p align="left">6) Your parent model &quot;Example&quot; will appear next to a blue 
+triangle. If you expand this node by clicking on (+) next to the model you will 
+see three new blue triangles representing the three country level graphs you 
+added to your model (See Figure 1). However, at this point there are no 
+connections between the three countries you added. These connections or &quot;Common 
+Border&quot; relationships between any two countries must be added once per pair of 
+countries. They may be found under the Graphs tab. Any two way edge is place in 
+the folder of the countries who's three letter country code appears first 
+alphabetically. </p>
+<table border="1" cellspacing="1" width="100%">
+	<tr>
+		<td><b>
+
+<img border="0" src="img/graph1.jpg" width="800" height="623"></b></td>
+	</tr>
+	<tr>
+		<td><b>Figure 1: Composing a Graph</b></td>
+	</tr>
+</table>
+<p align="center">&nbsp;</p>
+<p align="left">7) To add the border between France and Spain select the GRAPHS 
+tab and click on:</p>
+<p align="left">&gt;STEM&gt;Geography&gt;Political&gt;Country&gt;ESP</p>
+<p align="left">drag the icon for &quot;Common Border relationship between country 
+ESP and FRA&quot; into your &quot;Example&quot; model. It will appear at the same level in the 
+tree as the countries Spain and France. Note that the Edges connecting Spain and 
+France may be found in the ESP folder because ESP comes before FRA 
+alphabetically.</p>
+<p align="left">8) To add the border between France and Italy select the GRAPHS 
+tab and click on:</p>
+<p align="left">&gt;STEM&gt;Geography&gt;Political&gt;Country&gt;FRA</p>
+<p align="left">drag the icon for &quot;Common Border relationship between country 
+FRA and ITA</p>
+<p align="left">9) Follow the instructions for <a href="diseasetutorial.html">Creating a new Disease</a> 
+and drag your new Disease into your &quot;Experimental&quot; Model. Note that any disease 
+(or all diseases) appear under the top level MODEL node. See figure 2.</p>
+<p align="left">&nbsp;</p>
+<table border="1" cellspacing="1" width="100%">
+	<tr>
+		<td><b><img border="0" src="img/graph2.jpg" width="800" height="623"></b></td>
+	</tr>
+	<tr>
+		<td><b>Figure 2: A Disease has been added to the Model</b></td>
+	</tr>
+</table>
+<p align="left">10) Follow the instructions <a href="scenariotutorial.html">Creating a new Scenario</a>. 
+Add your model to the Scenario. Then follow instructions for&nbsp; <a href="sequencertutorial.html">Creating a new Sequencer</a> 
+and <a href="infectortutorial.html">Creating a new Infector</a>. See Figure 3 
+below. The Sequencer, the Infector, and your new &quot;Example&quot; Model are all part of 
+a Scenario node. Expand your model to see the graph of nodes and edges, as well 
+as the disease or disease you have defined. </p>
+<table border="1" cellspacing="1" width="100%">
+	<tr>
+		<td>
+<img border="0" src="img/graph3.jpg" width="800" height="623"></td>
+	</tr>
+	<tr>
+		<td><b>Figure 3: The Example Scenario is ready to run. See the proper 
+		hierarchical structure of this scenario in the Resource Set window.</b></td>
+	</tr>
+</table>
+<p align="center">&nbsp;&nbsp;
+<b>Defining a New Graph Edge</b></p>
+<p align="left">In the example above we composed a graph from existing 
+components. Suppose you wanted to add a new relationship between two places. 
+Take for example the Staten Island Ferry between Staten Island and Manhattan 
+Island in NY.</p>
+<p align="left"><i>this needs to be written.</i></p>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/.cvsignore b/org.eclipse.stem.doc/help/html/tutorials/img/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/InfectorDialog.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/InfectorDialog.jpg
new file mode 100644
index 0000000..3926059
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/InfectorDialog.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/InfectorIcon.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/InfectorIcon.jpg
new file mode 100644
index 0000000..28d1429
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/InfectorIcon.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/NewModel.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/NewModel.jpg
new file mode 100644
index 0000000..50de6ff
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/NewModel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/NewPopulationModel.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/NewPopulationModel.jpg
new file mode 100644
index 0000000..aef7b20
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/NewPopulationModel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/diseaseDialog.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/diseaseDialog.jpg
new file mode 100644
index 0000000..f8e804d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/diseaseDialog.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/dragdiseasetomodel.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/dragdiseasetomodel.jpg
new file mode 100644
index 0000000..5d14ebd
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/dragdiseasetomodel.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/exper1a.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/exper1a.jpg
new file mode 100644
index 0000000..5795727
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/exper1a.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/exper1b.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/exper1b.jpg
new file mode 100644
index 0000000..b52acc4
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/exper1b.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/exper2.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/exper2.jpg
new file mode 100644
index 0000000..d622edf
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/exper2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/graph1.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/graph1.jpg
new file mode 100644
index 0000000..7d9e1b5
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/graph1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/graph2.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/graph2.jpg
new file mode 100644
index 0000000..bc913d9
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/graph2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/graph3.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/graph3.jpg
new file mode 100644
index 0000000..52bb5f1
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/graph3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1a.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1a.jpg
new file mode 100644
index 0000000..6d9d44b
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1a.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1b.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1b.jpg
new file mode 100644
index 0000000..665af1e
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1b.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1c.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1c.jpg
new file mode 100644
index 0000000..4561b9d
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario1c.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/importscenario2.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario2.jpg
new file mode 100644
index 0000000..496a811
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/importscenario2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/modelIcon.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/modelIcon.jpg
new file mode 100644
index 0000000..8ab6547
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/modelIcon.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/newproject.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/newproject.jpg
new file mode 100644
index 0000000..d998436
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/newproject.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/newprojectIcon.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/newprojectIcon.jpg
new file mode 100644
index 0000000..ded06ef
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/newprojectIcon.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/populationmodel.gif b/org.eclipse.stem.doc/help/html/tutorials/img/populationmodel.gif
new file mode 100644
index 0000000..346f932
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/populationmodel.gif
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/projectDialog.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/projectDialog.jpg
new file mode 100644
index 0000000..d2f6801
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/projectDialog.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/propEditor.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/propEditor.jpg
new file mode 100644
index 0000000..480bde1
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/propEditor.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/scenario.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/scenario.jpg
new file mode 100644
index 0000000..9f83b97
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/scenario.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/sequencer1.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer1.jpg
new file mode 100644
index 0000000..8301bff
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer1.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/sequencer2.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer2.jpg
new file mode 100644
index 0000000..575aa2f
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer2.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/img/sequencer3.jpg b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer3.jpg
new file mode 100644
index 0000000..5233262
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/img/sequencer3.jpg
Binary files differ
diff --git a/org.eclipse.stem.doc/help/html/tutorials/infectortutorial.html b/org.eclipse.stem.doc/help/html/tutorials/infectortutorial.html
new file mode 100644
index 0000000..a500e5b
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/infectortutorial.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Infector Tutorial</title>
+</head>
+<body>
+<h1>Create a new Infector</h1>
+
+
+
+&nbsp;<table border="1" cellspacing="1" width="45%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/InfectorIcon.jpg" width="86" height="98"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 1: The Infector Icon looks similar to the 
+		New Disease Icon but contains a capital letter 'I' in the lower right 
+		hand corner.</b></td>
+	</tr>
+</table>
+<p>Click on the new infector icon (black square with the health symbol and 
+the letter I) </p>
+<ol>
+	<li>Name it (e.g., &quot;CubaInfector&quot;), under DiseaseName: &quot;ExperimentalDisease&quot;
+	<br>
+&nbsp;</li>
+	<li>Under country select the location you want to infect (e.g.,&nbsp; Cuba). 
+	You can infect at the country level, state or province level or even at the 
+	county level depending on the resolution of the graph you are using. In the 
+	case of Cuba, only country level is selected (see Figure 2.)<br>
+&nbsp;</li>
+	<li>Click on the Scenario to open it in the Resource set <br>
+&nbsp;</li>
+	<li>drag the CubaInfector from Decorators into the <b>Scenario</b> (open it to see 
+it) <br>
+&nbsp;</li>
+	<li>In the resource set click on the infector SI Infector ExperimentalDisease to edit 
+it. Your disease model may be SI, SIR, SIER, etc but in all cases you only need 
+an SI infector (as this base class will add infectious people to seed any model.<br>
+&nbsp;</li>
+	<li>Click on Properties to open the Properties Editor and double click on 
+	the Infector in the Resource Set under your scenario. This will open an 
+	editor where you can confirm the location to be infected and the number of 
+	infectious people to start with.<br>
+&nbsp;</li>
+	<li>Add additional infectors for other locations as desired following the 
+	procedure above.<br>
+&nbsp;</li>
+</ol>
+
+<table border="1" cellspacing="1" width="70%">
+	<tr>
+		<td>
+		<img border="0" src="img/InfectorDialog.jpg" width="525" height="669"></td>
+	</tr>
+	<tr>
+		<td>Figure 2: Creating an Infector for Cuba. Here we are selecting a 
+		country level node. Note the location ID (CUB).</td>
+	</tr>
+</table>
+<p><i>save your work at this point by hitting &lt;ctrl&gt;S</i> </p>
+<p>
+<p>
+&nbsp;&nbsp;
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/modeltutorial.html b/org.eclipse.stem.doc/help/html/tutorials/modeltutorial.html
new file mode 100644
index 0000000..9a3d474
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/modeltutorial.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Model Tutorial</title>
+</head>
+<body>
+<h1>Create a new Model</h1>
+
+<br>
+A model will contain several things including a disease, a locations or graphs 
+of locations, populations, etc.<br>
+&nbsp;<table border="1" cellspacing="1" width="22%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/modelIcon.jpg" width="108" height="108"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Fig. 1: The new model Icon</b></td>
+	</tr>
+</table>
+<p>
+To create a new model, go to the STEM Designer Perspective. 
+<ul>
+	<li>Click on blue triangle to create new model (for example, concatenate: 
+	CubaExperimentalDisease) </li>
+	<li>This will launch a dialog where you can give your model a name.</li>
+	<li>Click Next</li>
+	<li>Fill in any Dublin core data you want to add</li>
+	<li>Click Finished</li>
+</ul>
+<p>In the STEM Explorer under your new Project you should see a models folder 
+containing your model. Double<br>
+click on your model and you should see also see it in the Resource Set Window.</p>
+<table border="1" cellspacing="1" width="56%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/NewModel.jpg" width="627" height="462"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 2: The designer perspective showing the new 
+		model names &quot;CubaExperimentalDisease&quot; in both the STEM project Explorer
+		<br>
+		under a project entitled &quot;Experimental Disease&quot; and also in<br>
+		the &quot;Resource Set&quot; Window. </b></td>
+	</tr>
+</table>
+<p align="center">&nbsp;</p>
+
+<h3><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/populationmodeltutorial.html b/org.eclipse.stem.doc/help/html/tutorials/populationmodeltutorial.html
new file mode 100644
index 0000000..0a468ba
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/populationmodeltutorial.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Disease Tutorial</title>
+</head>
+<body>
+<h1>Creating a new Population Model</h1>
+
+<p>1) On the menu bar click -&gt;new-&gt;Population Model or alternatively select the 
+New Population Icon <img src="img/populationmodel.gif"/> from the toolbar </p>
+
+<p>2) This will launch the Dialog shown in Figure 1. Fill in the Name: (e.g. ExperimentalPopulationModel)
+</p>
+<p>3) Select the Population Model in the ComboBox: e.g., select &quot;StandardPopulationModelImpl&quot;
+</p>
+<p>Set the parameters of the population model, such as background birth rate, background mortality rate and
+time period </p>
+<table border="1" cellspacing="1" width="49%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/NewPopulationModel.jpg"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 1: The new Population Model.</b></td>
+	</tr>
+</table>
+<p>&nbsp;</p>
+<p>5) Fill in any Dublin core data you want to add </p>
+<p>6) Click finish </p>
+<p>7) Under decorators you should see ExperimentalPopulationModel.standard </p>
+<p>8) Double click on MODELS in the project explorer. You should see &quot;CubaExperimentalDisease&quot; 
+in the Resource Set. </p>
+<p>9) DRAG your new population model (e.g., ExperimentalPopulationModel.standard) from 
+decorators (in the project explorer window) into the model &quot;CubaExperimentalDisease&quot; 
+in the Resource Set window. Expand the &quot;CubaExperimentalDisease&quot; in the 
+Resource Set window to see that it worked.
+
+<h3><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/projecttutorial.html b/org.eclipse.stem.doc/help/html/tutorials/projecttutorial.html
new file mode 100644
index 0000000..5b6a5b2
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/projecttutorial.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Project Tutorial</title>
+</head>
+<body>
+<h1>Create a new Project</h1>
+
+<p>
+
+<b>Step 1: Creation of a new Project.</b><br>
+This tutorial tells you how to create a project in the STEM Designer 
+perspective. A project is really a new Folder in you<br>
+your STEM workspace. You never need to access these folders or STEM design files 
+outside of the STEM environment but they
+are all stored in the folder <br>
+...\runtime-stem.product <br>
+which is located in the 
+same folder as your STEM workspace (e.g. c:\runtime-stem.product).<p>
+The names used to create a Test project in this example are in parentheses. 
+<br>
+Substitute your names as appropriate. 
+In this example, the scenario will be for Japan.
+<p>
+<b>Note:</b> There are icons for many of the actions but for clarity here 
+the menubar items are used.<br>
+The new project Icon is shown in Figure 1.<br>
+&nbsp;<table border="1" cellspacing="1" width="19%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/newproject.jpg" width="651" height="626"></td>
+	</tr>
+	<tr>
+		<td><b>Figure 1: the new project Icon</b></td>
+	</tr>
+</table>
+
+<h3>Creating the Project</h3>
+<ul>
+<li>Run STEM. You should see a TAB with the label &quot;Designer&quot; on it. This is the 
+Designer Perspective used to design projects, Scenarios, etc. Another 
+perspective is the STEM Perspective used when you actually run a mode. If for 
+some reason the Designer Perspective has been closed or is not visible. Go to 
+the menu bar and click:<br>
+&gt;window&gt;open perspective...&gt;Designer<br>
+to open it. Go to the STEM Designer Perspective. <br>
+&nbsp;<li>Click on New->STEM project and create new STEM project (Test)
+<li>Click "Next" if you want to update the DublinCore data.
+<li>Click "Finish"
+<li> Open the new project. You should see several folders including: decorators, graphs, etc.
+</ul>
+
+<table border="1" cellspacing="1" width="59%">
+	<tr>
+		<td>
+		<p align="center"><b>
+		<img border="0" src="img/projectDialog.jpg" width="525" height="434"></b></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 2: The new project dialog</b></td>
+	</tr>
+</table>
+
+<h3><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/scenariotutorial.html b/org.eclipse.stem.doc/help/html/tutorials/scenariotutorial.html
new file mode 100644
index 0000000..502f247
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/scenariotutorial.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Scenario Tutorial</title>
+</head>
+<body>
+<h1>Create a new Scenario</h1>
+<font size="4">
+</font> 
+<p>click on the purple diamond icon to create new scenario </p>
+<p>give it a name (you might want more than one so index it, for example, as 
+&quot;ExperimentalDisease1&quot;) </p>
+<p>Fill in any Dublin core data you want to add </p>
+<p>click finish </p>
+<p>From the Project Explorer window, under Models, Drag the new model 
+(&quot;cuba.model&quot;) into the new Scenario in the Resource Set. Expand the scenario so 
+you can see that it worked. </p>
+<table border="1" cellspacing="1" width="56%">
+	<tr>
+		<td>
+		<p align="center">
+		<img border="0" src="img/scenario.jpg" width="852" height="498"></td>
+	</tr>
+	<tr>
+		<td>
+		<p align="center"><b>Figure 1: A new Scenario in the Resource Set. The 
+		model has already been dragged into it.</b></td>
+	</tr>
+</table>
+
+<p align="left">&nbsp;</p>
+<p align="left">Your model is now part of your scenario but you are not finished 
+yet. Every scenario must also include a &quot;sequencer&quot; which basically is a clock 
+that<br>
+regulates time, and an &quot;infector&quot; which sets the initial infectious population. 
+If you ran a model for an infectious disease where nobody was infected anywhere 
+then<br>
+nothing would happen. Please follow the separate tutorials on &quot;<a href="sequencertutorial.html">creating 
+a sequencer</a>&quot; and &quot;<a href="infectortutorial.html">creating and infector</a>&quot; 
+to learn more about how to create and customize<br>
+each of them. In the example below we will describe creation of a scenario using 
+a default sequencer but you can easily use your own custom sequence simply<br>
+by dragging that from&nbsp; your projects &quot;sequencers&quot; folder.</p>
+<p align="left"><br>
+<b>Add a sequencer to the Scenario</b><br>
+<br>
+To add the system default sequencer to your model, go to Sequencers on the 
+bottom window - expand fully<br>
+<br>
+drag &quot;Sequential Sequencer 2006&quot; into the Scenario in the Resource Set. Make 
+sure you have a properties Editor Window open<br>
+<br>
+click on &gt;Window&gt;other&gt;General&gt;Properties to open the properties view. Open the 
+Disease in the Properties Editor &#8211; get ready to Create an Infector<br>
+&nbsp;</p>
+<p align="left"><b>Adding an Infector<br>
+</b><i>See also the instructions for <a href="infectortutorial.html">creating an 
+infector.</a></i><br>
+To create an infector you first need to make sure you know the exact &#8216;Disease 
+Name&#8217; used when you created your disease. <br>
+To be sure check it as follows. In the Project Explorer, Under Decorators, 
+double click on ExperimentalDisease.standard <br>
+The new disease will be visible in the resource set. Expand the file node an you 
+should see &#8220;ExperimentalDisease model human&#8221;. <br>
+Click on &#8220;ExperimentalDisease Disease model human&#8221; In the bottom window click on 
+the properties tab to show the disease in the properties editor view. <br>
+<br>
+Click on the new infector icon (black square with the health symbol and the 
+letter I)</p>
+<table border="1" width="10%" id="table1">
+	<tr>
+		<td>
+		<p align="center"><b>
+		<img border="0" src="img/InfectorIcon.jpg" width="86" height="98"></b></td>
+	</tr>
+	<tr>
+		<td height="27">
+		<p align="center"><b>The New Infector Icon</b></td>
+	</tr>
+</table>
+<p align="left"><br>
+<br>
+Name it (e.g., &quot;CubaInfector&quot;), under DiseaseName: &quot;ExperimentalDisease&quot;<br>
+Under country select Cuba<br>
+Click on the Scenario to open it in the Resource set<br>
+drag the CubaInfector from Decorators into the scenario (open it to see it)<br>
+<br>
+In the resource set click on the infector SI Infector ExperimentalDisease to 
+edit it. Your disease model may be SI, SIR, SIER, etc but in all cases you only 
+need an SI infector (as this base class will add infectious people to seed any 
+model.<br>
+<br>
+click on the scenario, right click and run </p>
+<h3 align="left"><span style="font-weight: 400"><i>Save your work at this point by hitting <b>ctrl-s</b></i></span></h3>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/tutorials/sequencertutorial.html b/org.eclipse.stem.doc/help/html/tutorials/sequencertutorial.html
new file mode 100644
index 0000000..0f27723
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/tutorials/sequencertutorial.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Creating a new Sequencer Tutorial</title>
+</head>
+<body>
+<h1>Creating a new Sequencer Tutorial</h1>
+<p>Every scenario must also include a &quot;sequencer&quot; which basically is a clock 
+that<br>
+regulates time, and an &quot;infector&quot; which sets the initial infectious population. 
+Stem has a build in default<br>
+sequencer called the &quot;Sequential Sequencer&quot; but you will no doubt want to create 
+your own to specify<br>
+start time, step size, end time, etc.</p>
+<p>To create a new sequencer click on the New Sequencer Icon which appears as a 
+little clock.<br>
+Alternatively, on the menu bar you can select &gt;NEW&gt;SEQUENCER</p>
+<table border="1" width="16%" id="table1">
+	<tr>
+		<td align="center">
+		<img border="0" src="img/sequencer3.jpg" width="58" height="56"></td>
+	</tr>
+	<tr>
+		<td align="center"><b>Figure 1: The New Sequencer Icon</b></td>
+	</tr>
+</table>
+<p>&nbsp;</p>
+<p>The &quot;New Sequential Sequencer&quot; Dialog will open as shown in figure 2 below.<br>
+Specify in which Project to put the Sequencer (it will always go in your 
+Sequencers folder).<br>
+Give it a name, and select the cycle period and unit. At this point in time STEM 
+only supports<br>
+constant time steps. In the future new Sequencers will be created that allow 
+variable time steps.</p>
+<p>Select the starting date.</p>
+<p>If you wish to specify and End Date be sure to check the <b>&quot;Specify End 
+Date&quot; </b>checkbox.<br>
+This check box MUST be set for the end date to be editable later.</p>
+<p>You will then be allowed to set the End Date in the second calendar. <br>
+&nbsp;</p>
+<table border="1" width="34%" id="table2">
+	<tr>
+		<td align="center"><b>
+		<img border="0" src="img/sequencer1.jpg" width="455" height="636"></b></td>
+	</tr>
+	<tr>
+		<td align="center"><b>Figure 2: The New Sequential Sequencer Dialog 
+		helps you configure a Sequencer.</b></td>
+	</tr>
+</table>
+<p>&nbsp;</p>
+<p>Once you have created your sequencer it must be dragged into your scenario 
+folder. Follow the instructions<br>
+under <a href="scenariotutorial.html">&quot;Creating a Scenario&quot;. </a>&nbsp;The 
+sequencer can be edited after creation by opening the scenario, selecting the
+<br>
+sequencer, and double clicking to open it in the &quot;property editor&quot; at the bottom 
+of the screen (See figure 3).</p>
+<p>&nbsp;</p>
+<table border="1" width="14%" id="table3">
+	<tr>
+		<td><img border="0" src="img/sequencer2.jpg" width="659" height="586"></td>
+	</tr>
+	<tr>
+		<td>Figure 3: Changing the sequencer in the property editor after it has 
+		been added to a scenario.</td>
+	</tr>
+</table>
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/help/html/whatsnew/v0.2.2.html b/org.eclipse.stem.doc/help/html/whatsnew/v0.2.2.html
new file mode 100644
index 0000000..b7d67ea
--- /dev/null
+++ b/org.eclipse.stem.doc/help/html/whatsnew/v0.2.2.html
@@ -0,0 +1,23 @@
+<html>
+<head>
+<title>What's new in V0.2.2 of STEM</title>
+</head>
+<body>
+<h1>What's new in V0.2.2 of STEM</h1>
+<ol>
+
+	<li>Time delay changed from seconds to milliseconds <a
+		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=204483">Bug
+	204483</a></li>
+	
+	<li>Time Series view now shows time units <a
+		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=211836">Bug
+	211836</a></li>
+	
+		<li>Need user tutorial for composing a new graph <a
+		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=213656">Bug
+	213656</a></li>
+</ol>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/javadoc.xml b/org.eclipse.stem.doc/javadoc.xml
new file mode 100644
index 0000000..e915e9d
--- /dev/null
+++ b/org.eclipse.stem.doc/javadoc.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="javadoc">
+	<description>
+	    Generate JavaDoc for the STEM projects
+		
+		  The output will go to:
+		    org.eclipse.stem.doc/javadoc
+		
+		  This generates thousands of wrning messages but 
+		  there appears to be no easy way to avoid this.
+		
+	    </description>
+
+		
+
+		<!-- P r o j e c t  S p e c i f i c a t i o n s -->
+
+
+		<!-- The prefix for fully qualified names -->
+		<property name="ID_ROOT" value="org.eclipse.stem" />
+
+	
+	<!-- 
+	    The source file to generate JavaDoc for  
+	-->
+	<path id="sourcepath">		
+		<pathelement location="../${ID_ROOT}.core/src" />		
+		<pathelement location="../${ID_ROOT}.definitions/src" />
+		<pathelement location="../${ID_ROOT}.tests.util/src" />
+		<pathelement location="../${ID_ROOT}.diseasemodels/src" />
+		<pathelement location="../${ID_ROOT}.diseases/src" />
+		<pathelement location="../${ID_ROOT}.geography/src" />
+		<pathelement location="../${ID_ROOT}.internal.data/src" />
+		<pathelement location="../${ID_ROOT}.jobs/src" />
+		<pathelement location="../${ID_ROOT}.sequencers/src" />
+		<pathelement location="../${ID_ROOT}.ui/src" />
+		<pathelement location="../${ID_ROOT}.ui.diseasemodels/src" />
+		<pathelement location="../${ID_ROOT}.ui.ge/src" />
+	</path>
+	
+	
+<target name="javadoc">
+  
+  <javadoc access="public" author="false" 		
+	destdir="javadoc" doctitle="STEM Javadoc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" 
+	sourcepathref="sourcepath"	
+	source="1.5"  splitindex="true" use="true" version="false"
+  	  /> 
+</target>
+
+<!-- 
+		* Build the zip file  
+		*   
+		* 
+		-->
+	<target name="zip" 
+		description="creates the zip file">	
+				
+		<zip 
+			destfile="javadoc.zip">
+			<zipfileset dir="javadoc" prefix="javadoc"/> 	      
+			 
+		</zip>
+	</target>
+	
+</project>
diff --git a/org.eclipse.stem.doc/notice.html b/org.eclipse.stem.doc/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.doc/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.doc/plugin.properties b/org.eclipse.stem.doc/plugin.properties
new file mode 100644
index 0000000..95b53a2
--- /dev/null
+++ b/org.eclipse.stem.doc/plugin.properties
@@ -0,0 +1,13 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+pluginName = STEM Documentation
+providerName = Eclipse.org
\ No newline at end of file
diff --git a/org.eclipse.stem.doc/plugin.xml b/org.eclipse.stem.doc/plugin.xml
new file mode 100644
index 0000000..a39d2e2
--- /dev/null
+++ b/org.eclipse.stem.doc/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+   <extension
+        point="org.eclipse.help.toc">
+     <toc
+           file="toc.xml"
+           primary="true"/>
+     
+  </extension>
+  
+  <extension
+         point="org.eclipse.help.toc">
+     <toc
+           file="tocconcepts.xml">
+     </toc>
+     <toc file="tocgettingstarted.xml"/>
+     <toc file="tocreference.xml"/>
+     <toc
+           file="tocepidemiologicalmodeling.xml"
+           >
+     </toc>
+     <toc
+           file="tocinterface.xml">
+     </toc>
+     <toc
+           file="toctutorials.xml">
+     </toc>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.doc/toc.xml b/org.eclipse.stem.doc/toc.xml
new file mode 100644
index 0000000..181a7b5
--- /dev/null
+++ b/org.eclipse.stem.doc/toc.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="STEM User Help" topic="help/html/toc.html">
+	<topic label="Getting Started">
+		<anchor id="gettingstarted" />
+	</topic>
+	<topic label="Concepts">
+		<anchor id="concepts" />
+	</topic>
+	<topic label="Interface">
+		<anchor id="interface" />
+	</topic>
+	<topic label="Epidemiological Modeling">
+		<anchor id="epidemiologicalmodeling" />
+	</topic>
+	<topic label="Tutorials (internet access required)">
+		<anchor id="tutorials" />
+	</topic>
+	<topic label="Reference">
+		<anchor id="reference" />
+	</topic>
+	<topic href="help/html/reference/disclaimer.html" label="Disclaimer">
+		<anchor id="disclaimer" />
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/tocconcepts.xml b/org.eclipse.stem.doc/tocconcepts.xml
new file mode 100644
index 0000000..0064d3d
--- /dev/null
+++ b/org.eclipse.stem.doc/tocconcepts.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Concepts" link_to="toc.xml#concepts">
+	<topic label="Overview" href="help/html/concepts/overview.html">
+	</topic>
+	<topic label="Modeling Framework"
+		href="help/html/concepts/modelingframework.html">
+	</topic>
+	<topic label="Extensibility"
+		href="help/html/concepts/extensibility.html">
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/tocdisclaimer.xml b/org.eclipse.stem.doc/tocdisclaimer.xml
new file mode 100644
index 0000000..39eb974
--- /dev/null
+++ b/org.eclipse.stem.doc/tocdisclaimer.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Disclaimer" link_to="toc.xml#disclaimer" topic="help/html/reference/disclaimer.html">
+	<topic label="Disclaimer"
+		href="help/html/reference/disclaimer.html">
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/tocepidemiologicalmodeling.xml b/org.eclipse.stem.doc/tocepidemiologicalmodeling.xml
new file mode 100644
index 0000000..ada8a02
--- /dev/null
+++ b/org.eclipse.stem.doc/tocepidemiologicalmodeling.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Epidemiological Modeling"
+	link_to="toc.xml#epidemiologicalmodeling">
+	<topic label="Epidemiological Modeling Overview"
+		href="help/html/epidemiologicalmodeling/overview.html" />
+	<topic label="SI Disease Model Mathematics"
+		href="help/html/epidemiologicalmodeling/simath.html" />
+	<topic label="SIR Disease Model Mathematics"
+		href="help/html/epidemiologicalmodeling/sirmath.html" />
+	<topic label="SEIR Disease Model Mathematics"
+		href="help/html/epidemiologicalmodeling/seirmath.html" />
+
+</toc>
diff --git a/org.eclipse.stem.doc/tocgettingstarted.xml b/org.eclipse.stem.doc/tocgettingstarted.xml
new file mode 100644
index 0000000..4b06e8b
--- /dev/null
+++ b/org.eclipse.stem.doc/tocgettingstarted.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Getting Started" link_to="toc.xml#gettingstarted">
+	<topic label="Quick Start"
+		href="help/html/gettingstarted/quickstart.html">
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/tocinterface.xml b/org.eclipse.stem.doc/tocinterface.xml
new file mode 100644
index 0000000..55c50d8
--- /dev/null
+++ b/org.eclipse.stem.doc/tocinterface.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Interface" link_to="toc.xml#interface">
+
+	<topic label="Overview"
+		href="help/html/interface/interfaceoverview.html" />
+
+	<topic label="Perspectives"
+		href="help/html/interface/perspectives/perspectivesoverview.html">
+		<topic label="Analysis"
+			href="help/html/interface/perspectives/analysis.html" />
+		<topic label="Designer"
+			href="help/html/interface/perspectives/designer.html" />
+		<topic label="Simulation"
+			href="help/html/interface/perspectives/simulation.html" />
+	</topic>
+
+	<topic label="Views"
+		href="help/html/interface/views/viewsoverview.html">
+		<topic label="Active Simulations View"
+			href="help/html/interface/views/activesimulationsview.html" />
+		<topic label="Control View"
+			href="help/html/interface/views/controlview.html" />
+  		<topic label="CSV Logger View" 
+  			href="help/html/interface/views/csvloggerview.html" />
+		<topic label="Decorators View"
+			href="help/html/interface/views/decoratorsview.html" />
+		<topic label="Diseases View"
+			href="help/html/interface/views/diseasesview.html" />
+			<topic label="Epidemic View"
+			href="help/html/interface/views/epidemicview.html" />
+		<topic label="Error Log View"
+			href="help/html/interface/views/error_log.html" />
+			<topic label="Estimator View"
+			href="help/html/interface/views/estimatorview.html" />
+		<topic label="Google Earth View"
+			href="help/html/interface/views/ge.html" />
+		<topic label="Graphs View"
+			href="help/html/interface/views/graphsview.html" />
+			<topic label="Lyapunov View"
+			href="help/html/interface/views/lyapunovview.html" />
+		<topic label="Map View"
+			href="help/html/interface/views/mapview.html" />
+		<topic label="Models View"
+			href="help/html/interface/views/modelsview.html" />
+  <topic href="help/html/interface/views/projectview.html" label="Project Explorer">
+  </topic>
+  <topic href="help/html/interface/views/propertiesview.html" label="Properties View">
+  </topic>
+  <topic href="help/html/interface/views/reportview.html" label="Report View">
+  </topic>
+			<topic href="help/html/interface/views/scenariocomparisonview.html" label="Scenario Comparison View">
+   </topic>
+		<topic label="Scenarios View"
+			href="help/html/interface/views/scenariosview.html" />
+		<topic label="Sequencers View"
+			href="help/html/interface/views/sequencersview.html" />
+  <topic href="help/html/interface/views/tasksview.html" label="Tasks View">
+  </topic>
+	</topic>
+
+	<topic label="Editors"
+		href="help/html/interface/editors/editorsoverview.html">
+  <topic href="help/html/interface/editors/experimenteditor.html" label="Experiment Editor">
+  </topic>
+		<topic label="Graph Editor"
+			href="help/html/interface/editors/grapheditor.html" />
+		<topic label="Model Editor"
+			href="help/html/interface/editors/modeleditor.html" />
+  <topic href="help/html/interface/editors/modifiereditor.html" label="Modifier Editor">
+  </topic>
+  <topic href="help/html/interface/editors/predicateeditor.html" label="Predicate Editor">
+  </topic>
+		<topic label="Scenario Editor"
+			href="help/html/interface/editors/scenarioeditor.html" />
+  <topic href="help/html/interface/editors/sequencereditor.html" label="Sequencer Editor">
+  </topic>
+  <topic href="help/html/interface/editors/triggereditor.html" label="Trigger Editor">
+  </topic>
+	</topic>
+
+	<topic label="Wizards"
+		href="help/html/interface/wizards/wizardsoverview.html">
+		<topic label="New Disease Wizard"
+			href="help/html/interface/wizards/diseasewizard.html" />
+  <topic href="help/html/interface/wizards/experimentwizard.html" label="New Experiment Wizard">
+  </topic>
+		<topic label="New Graph Wizard"
+			href="help/html/interface/wizards/graphwizard.html" />
+		<topic label="New Infector Wizard"
+			href="help/html/interface/wizards/infectorwizard.html" />
+		<topic label="New Model Wizard"
+			href="help/html/interface/wizards/modelwizard.html" />
+		<topic label="New Real-Time Sequencer Wizard"
+			href="help/html/interface/wizards/realtimesequencerwizard.html" />
+		<topic label="New Scenario Wizard"
+			href="help/html/interface/wizards/scenariowizard.html" />
+		<topic label="New Sequential Sequencer Wizard"
+			href="help/html/interface/wizards/sequentialsequencerwizard.html" />
+		<topic label="New STEM Project Wizard"
+			href="help/html/interface/wizards/stemprojectwizard.html" />
+  <topic href="help/html/interface/wizards/modifierwizard.html" label="New Modifier Wizard">
+  </topic>
+  <topic href="help/html/interface/wizards/predicatewizard.html" label="New Predicate Wizard">
+  </topic>
+  <topic href="help/html/interface/wizards/triggerwizard.html" label="New Trigger Wizard">
+  </topic>
+	</topic>
+
+	<topic label="Preferences"
+		href="help/html/interface/preferences/preferencesoverview.html">
+
+		<topic label="Simulation Management"
+			href="help/html/interface/preferences/preferencessimmanagement.html" />
+
+		<topic label="Visualization"
+			href="help/html/interface/preferences/preferencesvisualizationtoplevel.html">
+			<topic label="Google Earth"
+				href="help/html/interface/preferences/preferencesgetoplevel.html">
+				<topic label="Advanced"
+					href="help/html/interface/preferences/preferencesgeadvanced.html" />
+			</topic>
+			<topic label="Map Data Management"
+				href="help/html/interface/preferences/preferencesmapdatamgnt.html" />
+			<topic label="Map View"
+				href="help/html/interface/preferences/preferencesmapview.html" />
+		</topic>
+  <topic href="help/html/interface/preferences/preferenceslogging.html" label="Logging">
+  </topic>
+  <topic href="help/html/interface/preferences/preferencessolver.html" label="Solver">
+  </topic>
+
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/tocreference.xml b/org.eclipse.stem.doc/tocreference.xml
new file mode 100644
index 0000000..68ac95b
--- /dev/null
+++ b/org.eclipse.stem.doc/tocreference.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Reference Material" link_to="toc.xml#reference">
+	<topic label="STEM reference information"
+		href="help/html/reference/references.html">
+	</topic>
+</toc>
diff --git a/org.eclipse.stem.doc/toctutorials.xml b/org.eclipse.stem.doc/toctutorials.xml
new file mode 100644
index 0000000..badf74b
--- /dev/null
+++ b/org.eclipse.stem.doc/toctutorials.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+<toc label="Tutorials (internet access required)" link_to="toc.xml#tutorials">
+	<topic label="Creating a Scenario"
+		href="http://wiki.eclipse.org/Creating_a_STEM_Scenario" />
+   <topic href="http://wiki.eclipse.org/Batch_Mode_%28Running_Experiments%29" label="Creating and running Experiments">
+   </topic>
+   <topic href="http://wiki.eclipse.org/Invoking_modifiers_using_triggers_and_predicates." label="Modifying scenarios using triggers">
+   </topic>
+	<topic label="Analysis">
+		<topic label="Analysis overview"
+		href="http://wiki.eclipse.org/Analysis" />
+		<topic label="Analyzing an Epidemic"
+		href="http://wiki.eclipse.org/Epidemic_View" />
+		<topic label="Estimating Model Parameters"
+		href="http://wiki.eclipse.org/Estimating_Model_Parameters_from_External_Data" />
+		<topic label="Lyapunov (Phase Space) Analysis"
+		href="http://wiki.eclipse.org/Lyapunov_Analysis" />
+		<topic label="Comparing Scenarios and Epidemics"
+		href="http://wiki.eclipse.org/RMS_Comparison_between_data_sets" />
+ 	</topic>
+</toc>
+
diff --git a/org.eclipse.stem.feature.core/.project b/org.eclipse.stem.feature.core/.project
new file mode 100644
index 0000000..89e3ffd
--- /dev/null
+++ b/org.eclipse.stem.feature.core/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.feature.core</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.feature.core/build.properties b/org.eclipse.stem.feature.core/build.properties
new file mode 100644
index 0000000..7269042
--- /dev/null
+++ b/org.eclipse.stem.feature.core/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+               epl-v10.html,\
+               notice.html
diff --git a/org.eclipse.stem.feature.core/epl-v10.html b/org.eclipse.stem.feature.core/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.feature.core/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.feature.core/feature.xml b/org.eclipse.stem.feature.core/feature.xml
new file mode 100644
index 0000000..3a9d892
--- /dev/null
+++ b/org.eclipse.stem.feature.core/feature.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.stem.feature.core"
+      label="STEM Core"
+      version="1.0.0.qualifier">
+
+   <description url="http://www.example.com/description">
+      [Enter Feature Description here.]
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.emf.ecore.xmi"/>
+      <import plugin="org.eclipse.emf.edit.ui"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.ui.ide"/>
+      <import plugin="org.eclipse.pde.runtime"/>
+      <import plugin="org.eclipse.help.appserver"/>
+      <import plugin="org.eclipse.birt.chart.engine"/>
+      <import plugin="org.eclipse.birt.core.ui"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.stem.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.definitions"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.diseasemodels"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.diseases"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.doc"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.stem.geography"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.jobs"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.jobs.nl1"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.sequencers"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.ui.diseasemodels"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.ui.nl1"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         fragment="true"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.ui.reports"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.stem.util.loggers"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.stem.feature.core/notice.html b/org.eclipse.stem.feature.core/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.feature.core/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.feature.prereq/.project b/org.eclipse.stem.feature.prereq/.project
new file mode 100644
index 0000000..7799e9e
--- /dev/null
+++ b/org.eclipse.stem.feature.prereq/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.feature.prereq</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.feature.prereq/build.properties b/org.eclipse.stem.feature.prereq/build.properties
new file mode 100644
index 0000000..a17f64b
--- /dev/null
+++ b/org.eclipse.stem.feature.prereq/build.properties
@@ -0,0 +1,4 @@
+bin.includes = feature.xml,\
+               build.properties,\
+               epl-v10.html,\
+               notice.html
diff --git a/org.eclipse.stem.feature.prereq/epl-v10.html b/org.eclipse.stem.feature.prereq/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.feature.prereq/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.feature.prereq/feature.xml b/org.eclipse.stem.feature.prereq/feature.xml
new file mode 100644
index 0000000..db92529
--- /dev/null
+++ b/org.eclipse.stem.feature.prereq/feature.xml
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.stem.feature.prereq"
+      label="Prereq Features"
+      version="1.0.0.qualifier"
+      provider-name="Eclipse">
+
+   <description url="http://www.example.com/description">
+      Eclipse Prereqs for STEM
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      [Enter Copyright Description here.]
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      [Enter License Description here.]
+   </license>
+
+   <url>
+      <update label="STEM local update site" url="file:/C:/eclipse/update"/>
+      <discovery label="STEM update site" url="http://download.eclipse.org/technology/stem/update-site/"/>
+   </url>
+
+   <plugin
+         id="com.ibm.icu"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.birt.chart.engine"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.birt.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.birt.core.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.commands"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.contenttype"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.databinding"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.expressions"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.filesystem"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.jobs"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.net"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.resources"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.resources.compatibility"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.runtime"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.runtime.compatibility.auth"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.runtime.compatibility.registry"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.core.variables"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.common.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.ecore"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.ecore.change"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.ecore.xmi"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.emf.edit.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.app"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.preferences"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.equinox.registry"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.help"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.jface"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.jface.databinding"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.jface.text"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osgi.services"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.swt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.team.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.text"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui.forms"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui.ide"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui.views"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui.views.log"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.ui.workbench"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.update.configurator"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.update.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.update.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.mozilla.rhino"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+</feature>
diff --git a/org.eclipse.stem.feature.prereq/notice.html b/org.eclipse.stem.feature.prereq/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.feature.prereq/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.feature/.project b/org.eclipse.stem.feature/.project
new file mode 100644
index 0000000..c109808
--- /dev/null
+++ b/org.eclipse.stem.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.feature/build.properties b/org.eclipse.stem.feature/build.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.feature/build.properties
diff --git a/org.eclipse.stem.feature/epl-v10.html b/org.eclipse.stem.feature/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.feature/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.feature/feature.xml b/org.eclipse.stem.feature/feature.xml
new file mode 100644
index 0000000..a3a7e9f
--- /dev/null
+++ b/org.eclipse.stem.feature/feature.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.stem.feature"
+      label="STEM feature"
+      version="1.0.0"
+      provider-name="Eclipse"
+      plugin="org.eclipse.stem.ui">
+
+   <description>
+      STEM - Spatiotemporal Epidemiological Modeler 
+The STEM tool is designed to help scientists and public health
+officials create and use spatial and temporal models of emerging
+infectious diseases.
+   </description>
+
+   <copyright>
+      Copyright (c) 2007 IBM Corporation and others.
+All rights reserved.
+   </copyright>
+
+   <license url="http://www.eclipse.org/legal/epl-v10.html">
+      http://www.eclipse.org/legal/epl-v10.html
+   </license>
+
+   <url>
+      <update label="STEM local update site" url="file:/C:/eclipse/update/"/>
+      <discovery label="STEM update site" url="http://download.eclipse.org/technology/stem/update-site/"/>
+   </url>
+
+   <includes
+         id="org.eclipse.stem.feature.core"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.stem.feature.prereq"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.rcp"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.equinox.executable"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.platform"
+         version="0.0.0"/>
+
+</feature>
diff --git a/org.eclipse.stem.feature/notice.html b/org.eclipse.stem.feature/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.feature/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.feature/update.txt b/org.eclipse.stem.feature/update.txt
new file mode 100644
index 0000000..b5432ef
--- /dev/null
+++ b/org.eclipse.stem.feature/update.txt
@@ -0,0 +1,87 @@
+STEM Creating Updates based on features.
+
+Assume that you have STEM version 0.2.1M1  distributed on the download 
+site as zip files for each supported platform (Win,Linux,Mac) 
+and you later want to publish an update for 0.2.1M2. 
+
+The users had originally installed STEM by downloading the 
+appropriate 0.2.1M1 zip file and unziping it and running the STEM rcp.  
+They will use the Help->update feature to install the updates for 0.2.1M2.  
+For simplicity, the 0.2.1M2 updates consist of code for all the 
+org.eclipse.stem projects but none of the plugin dependencies 
+or platform dependencies.   
+Ability to update only parts of the STEM code is left as a future feature.   
+
+If you are going to generate a STEM application for platforms other
+than the platform that you are running Eclipse on, then you need to 
+download and install the 3.3 delta-pack
+
+http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.3-200706251500/eclipse-RCP-3.3-delta-pack.zip
+
+STEM projects.
+  org.eclipse.stem.feature
+   feature.xml 
+     Contains the stem plugins
+      - Update as required:
+      - Version should be 0.2.1M1
+      - Update Site URL should be specified
+        Point to org.eclipse download site where the 
+        update feature will be placed.  ?????
+        (For testing you can point to a local file system
+         like file:/c:eclipse/updatesite )
+  org.eclipse.stem.feature.prereq
+   feature.xml
+      Contains a list of all the prereq plugins.
+      The list was generated from stem.product which was used to 
+      generate the initial STEM rcp. 
+      
+       Update Site URL should be specified same as above.
+  org.eclipse.stem.ui
+    stem.product
+      This is the original product file and can still be used 
+      to run the application within eclipse with debug. 
+
+    feature.product 
+      Now used to generate the STEM rcp from the above 2 features.
+      It includes the following features. 
+         org.eclipse.stem.feature
+         org.eclipse.stem.feature.prereq
+         org.eclipse.rcp
+         org.eclipse.platform
+         
+  create the distributable rcp by using the export selection in 
+     feature.product -> overview
+     It will prompt you for the platforms to generate for.
+        It will run about an hour for each one.
+     You will now have one or more zip files containing the STEM application.
+     Place them on the download site. 
+     
+   Platform dependent generation.
+     The feature.prereq zip file contains the platform independent 
+     files and should not need to be regenerated. It is generated 
+     similar to the feature.zip but using the feature.xml file from
+     the feature.prereq file.  This contains all of the prereq plugins 
+     and should not need to be updated except when Eclpse platform 
+     changes.  
+     
+
+To create an update 
+      
+    - Import the org.eclipse.stem.feature project if not already 
+      available.
+    - Select the feature.xml file
+    - Select the overview tab. 
+    - Update as required:
+      - Version should be 0.2.1M2
+      - Update Site URL should be specified
+        Point to org.eclipse download site where the 
+        update feature will be placed.  
+    - Select "export" on the "overview" tab for feature.xml.
+    - The generated zip file should be unzipped into the 
+      update site.  
+    - A new distribution zip file for the 0.2.2M2 STEM RCP should also 
+      be created as above and uploaded to the download site for 
+      new users.  
+      
+      
+        
diff --git a/org.eclipse.stem.geography/.classpath b/org.eclipse.stem.geography/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.geography/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.geography/.cvsignore b/org.eclipse.stem.geography/.cvsignore
new file mode 100644
index 0000000..bfe1856
--- /dev/null
+++ b/org.eclipse.stem.geography/.cvsignore
@@ -0,0 +1,2 @@
+plugin.properties
+plugin.xml
diff --git a/org.eclipse.stem.geography/.fbprefs b/org.eclipse.stem.geography/.fbprefs
new file mode 100644
index 0000000..d34236d
--- /dev/null
+++ b/org.eclipse.stem.geography/.fbprefs
@@ -0,0 +1,129 @@
+#FindBugs User Preferences
+#Fri Mar 16 15:19:13 EDT 2007
+default_directory=C\:\\Program Files\\eclipse\\eclipse3.2.2
+detectorBCPMethodReturnCheck=BCPMethodReturnCheck|false
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorCalledMethods=CalledMethods|true
+detectorCheckCalls=CheckCalls|false
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqStringTest=EqStringTest|false
+detectorFindBadCast=FindBadCast|false
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadEqualsImplementation=FindBadEqualsImplementation|false
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindBugsSummaryStats=FindBugsSummaryStats|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindFloatMath=FindFloatMath|false
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|false
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|false
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorLockedFields=LockedFields|false
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMethods=Methods|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNoteAnnotationRetention=NoteAnnotationRetention|true
+detectorNoteCheckReturnValue=NoteCheckReturnValue|true
+detectorNoteCheckReturnValueAnnotations=NoteCheckReturnValueAnnotations|true
+detectorNoteJCIPAnnotation=NoteJCIPAnnotation|true
+detectorNoteNonNullAnnotations=NoteNonNullAnnotations|true
+detectorNoteSuppressedWarnings=NoteSuppressedWarnings|true
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
+detectorNumberConstructor=NumberConstructor|true
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorResolveAllReferences=ResolveAllReferences|false
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorTestASM=TestASM|false
+detectorTestingGround=TestingGround|false
+detectorTrainFieldStoreTypes=TrainFieldStoreTypes|true
+detectorTrainNonNullAnnotations=TrainNonNullAnnotations|true
+detectorTrainUnconditionalDerefParams=TrainUnconditionalDerefParams|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUseObjectEquals=UseObjectEquals|false
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+filter_settings=Medium|I18N,MT_CORRECTNESS,MALICIOUS_CODE,BAD_PRACTICE,STYLE,CORRECTNESS,PERFORMANCE|false
+filter_settings_neg=|
diff --git a/org.eclipse.stem.geography/.project b/org.eclipse.stem.geography/.project
new file mode 100644
index 0000000..d1ad98b
--- /dev/null
+++ b/org.eclipse.stem.geography/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.geography</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.geography/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.geography/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b8e9dee
--- /dev/null
+++ b/org.eclipse.stem.geography/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Jan 21 12:41:58 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.geography/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.geography/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..bd80a09
--- /dev/null
+++ b/org.eclipse.stem.geography/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Oct 17 17:52:33 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.geography/META-INF/MANIFEST.MF b/org.eclipse.stem.geography/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3a0976c
--- /dev/null
+++ b/org.eclipse.stem.geography/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: STEM Geography
+Bundle-SymbolicName: org.eclipse.stem.geography;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.geography.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.core
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: Eclipse.org
+Export-Package: org.eclipse.stem.geography,
+ org.eclipse.stem.geography.centers
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.geography/build.properties b/org.eclipse.stem.geography/build.properties
new file mode 100644
index 0000000..127cae0
--- /dev/null
+++ b/org.eclipse.stem.geography/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               bin/,\
+               epl-v10.html,\
+               notice.html
diff --git a/org.eclipse.stem.geography/epl-v10.html b/org.eclipse.stem.geography/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.geography/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.geography/notice.html b/org.eclipse.stem.geography/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.geography/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/.cvsignore b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/.cvsignore
new file mode 100644
index 0000000..0567e20
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/.cvsignore
@@ -0,0 +1 @@
+*.properties
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/Activator.java b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/Activator.java
new file mode 100644
index 0000000..0301cad
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/Activator.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.geography;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Model;
+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.stem.geography"; //$NON-NLS-1$
+
+	/**
+	 * This is the prefix of the platform {@link URI} for geography {@link Graph}s and {@link Model}s
+	 */
+	public static final String GEOGRAPHY_FILE_URI_PREFIX = "platform:/plugin/" //$NON-NLS-1$
+			+ org.eclipse.stem.geography.Activator.PLUGIN_ID
+			+ "/resources/data"; //$NON-NLS-1$
+	
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context 
+	 * @throws Exception 
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+
+
+} // Activator
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicMapper.java b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicMapper.java
new file mode 100644
index 0000000..7666402
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicMapper.java
@@ -0,0 +1,274 @@
+// GeographicMapper.java
+package org.eclipse.stem.geography;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class maps geographic locations to specific data/information about the
+ * location.
+ */
+@SuppressWarnings("all")
+abstract public class GeographicMapper {
+
+	/**
+	 * The String that is used internally like an ISO-3166 alpha3 key to
+	 * represent the Earth as if it was a country.
+	 */
+	public static final String EARTH_ALPHA3_ISO_KEY = "ZZZ"; //$NON-NLS-1$
+	/**
+	 * The name of the file that maps ISO-3166 alpha2 keys to ISO-3166 alpha3
+	 * keys.
+	 */
+	public static final String ALPHA2_TO_ALPHA3_NAME = "level0ISOKeys.properties"; //$NON-NLS-1$
+	private static final URI LEVEL_0_ISO_MAPPING_FILE_URI = URI
+			.createURI("platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZZZ/" //$NON-NLS-1$
+					+ ALPHA2_TO_ALPHA3_NAME);
+	protected static final String RB_PREFIX = Constants.ID_ROOT + ".geography"; //$NON-NLS-1$
+	private static Properties alpha2ToAlpha3Map = null;
+	private static Properties alpha3ToAlpha2Map = null;
+
+	/**
+	 * @param propertyFile
+	 * @return the properties read from the file
+	 */
+	protected static Properties readPropertyFiles(final URI propertyFileURI) {
+		final URIConverter converter = new URIConverterImpl();
+
+		final Properties retValue = new Properties();
+		BufferedInputStream propertiesInputStream = null;
+		try {
+			propertiesInputStream = new BufferedInputStream(converter
+					.createInputStream(propertyFileURI));
+			retValue.load(propertiesInputStream);
+			propertiesInputStream.close();
+		} catch (final FileNotFoundException e) {
+			Activator.logError(EARTH_ALPHA3_ISO_KEY, e);
+		} catch (final IOException e) {
+			Activator.logError(EARTH_ALPHA3_ISO_KEY, e);
+		}
+		return retValue;
+	} // readPropertyFiles
+
+	/**
+	 * @param key
+	 * @return the level of the key
+	 */
+	protected static int keyLevel(final String key) {
+		int level = 0;
+		int start = 0;
+		for (int temp = key.indexOf("-"); temp > 0;) { //$NON-NLS-1$
+			level++;
+			start += temp + 1;
+			temp = key.substring(start).indexOf("-"); //$NON-NLS-1$
+		} // for
+		return level;
+	} // keyLevel
+
+	/**
+	 * 
+	 */
+	protected static Properties getAlpha2ToAlpha3Map() {
+		// Got the alpha2->alpha3 map?
+		if (alpha2ToAlpha3Map == null) {
+			// No
+			alpha2ToAlpha3Map = readPropertyFiles(LEVEL_0_ISO_MAPPING_FILE_URI);
+		} // if
+		// Got it now?
+		if (alpha2ToAlpha3Map == null) {
+			// No
+			Activator.logError(
+					"Can't read the alpha2 to alpha3 mapping file \"" //$NON-NLS-1$
+							+ ALPHA2_TO_ALPHA3_NAME + "\"", null); //$NON-NLS-1$
+		} // if
+		return alpha2ToAlpha3Map;
+	} // getAlpha2ToAlpha3Map
+
+	/**
+	 * @param alpha2ISOKey
+	 * @return the alpha 3 ISO key of the alpha2 key, or the alpha 2 key if
+	 *         there is an error
+	 */
+	public static String getAlpha3(final String alpha2ISOKey) {
+		String retValue = alpha2ISOKey;
+		final Properties alpha2ToAlpha3Map = getAlpha2ToAlpha3Map();
+		// Do we have the map?
+		if (alpha2ToAlpha3Map != null) {
+			// Yes
+			retValue = alpha2ToAlpha3Map.getProperty(alpha2ISOKey);
+		} // if
+		return retValue;
+	} // getAlpha3
+
+	/**
+	 * @param alpha3ISOKey
+	 * @return the alpha 2 ISO key of the alpha2 key, or the alpha 2 key if
+	 *         there is an error
+	 */
+	public static String getAlpha2(final String alpha3ISOKey) {
+		String retValue = alpha3ISOKey;
+
+		final Properties alpha3toAlpha2Map = getAlpha3toAlpha2Map();
+		// Do we have the map?
+		if (alpha3toAlpha2Map != null) {
+			// Yes
+			retValue = alpha3toAlpha2Map.getProperty(alpha3ISOKey);
+		} // if
+		return retValue;
+	}
+
+	private static Properties getAlpha3toAlpha2Map() {
+		// Already created the map?
+		if (alpha3ToAlpha2Map == null) {
+			// No
+			final Properties alpha2ToAlpha3Map = getAlpha2ToAlpha3Map();
+			// Do we have the reverse map?
+			if (alpha2ToAlpha3Map != null) {
+				// Yes
+				alpha3ToAlpha2Map = new Properties();
+				for (final Object iso2Key : alpha2ToAlpha3Map.keySet()) {
+					alpha3ToAlpha2Map.put(alpha2ToAlpha3Map.get(iso2Key),
+							iso2Key);
+				} // for each String
+			} // if
+		} // if
+
+		return alpha3ToAlpha2Map;
+	}
+
+	/**
+	 * @param alpha3ISOKey
+	 *            the ISO-3166 alpha-3 key
+	 * @param bundlePrefix
+	 *            TODO
+	 * @param bundleType
+	 *            a {@link String} that identifies the type of bundle
+	 * @return the name of the bundle that contains the names for the iso key's
+	 *         country.
+	 */
+	protected static String makeBundleName(final String alpha3ISOKey,
+			final String bundlePrefix, final String bundleType) {
+		final StringBuilder sb = new StringBuilder(bundlePrefix);
+		sb.append("."); //$NON-NLS-1$
+		sb.append(alpha3ISOKey);
+		sb.append("_"); //$NON-NLS-1$
+		sb.append(bundleType);
+		return sb.toString();
+	} // makeBundleName
+
+	/**
+	 * @param alpha2ISOKey
+	 *            the ISO-3166 alpha-3 key
+	 * @param bundlePrefix
+	 *            TODO
+	 * @param bundleType
+	 *            a {@link String} that identifies the type of bundle
+	 * @return the {@link ResourceBundle} for the country identified by the
+	 *         ISO-3166 alpha2 key
+	 */
+	protected static ResourceBundle readResourceBundle(
+			final String alpha2ISOKey, final String bundlePrefix,
+			final String bundleType) {
+		ResourceBundle retValue = null;
+		final Properties alpha2ToAlpha3Map = getAlpha2ToAlpha3Map();
+		// Got it?
+		if (alpha2ToAlpha3Map != null) {
+			// Yes
+			final String alpha3ISOKey = alpha2ToAlpha3Map
+					.getProperty(alpha2ISOKey);
+			retValue = ResourceBundle.getBundle(makeBundleName(alpha3ISOKey,
+					bundlePrefix, bundleType));
+		} // if
+
+		return retValue;
+	} // readResourceBundle
+
+	/**
+	 * @param isoKey
+	 * @param bundlePrefix
+	 *            TODO
+	 * @param bundleType
+	 *            a {@link String} that identifies the type of bundle
+	 * @param level0RBName
+	 *            the name of the {@link ResourceBundle} file that contains the
+	 *            level 0 resources
+	 * @param level0RB
+	 *            the reference of the level 0 {@link ResourceBundle}
+	 * @param rbMap
+	 *            a {@link Map} between alpha-2 iso key and
+	 *            {@link ResourceBundle}s
+	 * @return the {@link ResourceBundle} that contains the mapping
+	 */
+	protected static ResourceBundle getResourceBundle(final String isoKey,
+			final int level, final String bundlePrefix,
+			final String bundleType, final String level0RBName,
+			ResourceBundle level0RB, Map<String, ResourceBundle> rbMap) {
+		ResourceBundle retValue = null;
+		// If the level is 0, we handle things specially. There is a single
+		// resource bundle that contains all of the level 0 mappings (i.e., the
+		// names of all countries) This allows us to avoid reading in all of the
+		// other (245!) resource bundles just to obtain the names of the
+		// countries. For the other levels we retrieve the bundle specific to
+		// the country because it has the names for all levels (i.e., all ISO
+		// keys).
+
+		// Level 0?
+		if (level == -1 || level == 0) {
+			// Yes
+			// Have we retrieved the level 0 resource bundle yet?
+			if (level0RB == null) {
+				// No
+				level0RB = ResourceBundle.getBundle(level0RBName);
+			} // if
+			retValue = level0RB;
+		} // if level 0
+		else {
+			// No
+			final String alpha2ISOKey = isoKey.substring(0, 2);
+
+			// We use that value as the key to "cache" the resource bundle
+			retValue = rbMap.get(alpha2ISOKey);
+
+			// Have we retrieved this ResourceBundle before?
+			if (retValue == null) {
+				// No
+				retValue = readResourceBundle(alpha2ISOKey, bundlePrefix,
+						bundleType);
+				// Were we successful?
+				if (retValue == null) {
+					// No
+					Activator.logError(
+							"Could not read Resource Bundle of type " //$NON-NLS-1$
+									+ bundleType + " for \"" + alpha2ISOKey //$NON-NLS-1$
+									+ "\"", null); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					rbMap.put(alpha2ISOKey, retValue);
+				} // else
+			} // if
+		} // else
+		return retValue;
+	} // getResourceBundle
+
+} // GeographicMapper
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicNames.java b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicNames.java
new file mode 100644
index 0000000..a47564b
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/GeographicNames.java
@@ -0,0 +1,226 @@
+// GeographicNames.java
+package org.eclipse.stem.geography;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.Properties;
+import java.util.ResourceBundle;
+
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * This class is responsible for providing NLS'd names for geographic locations.
+ */
+@SuppressWarnings("all")
+public class GeographicNames extends GeographicMapper {
+
+	/**
+	 * This is the string that identifies the type of bundle for geographic
+	 * names.
+	 */
+	private static final String NAMES_BUNDLE_TYPE = "names";
+
+	/**
+	 * The root name of the file that contains the level 0 names.
+	 */
+	public static final String LEVEL_0_ISO_NAMES_ROOT_NAME = "level0ISONames"; //$NON-NLS-1$
+
+	private static final String LEVEL_0_RB_NAME = RB_PREFIX + "." //$NON-NLS-1$
+			+ LEVEL_0_ISO_NAMES_ROOT_NAME;
+
+	private static ResourceBundle level0RB = null;
+
+	private static Map<String, ResourceBundle> rbMap = new HashMap<String, ResourceBundle>();
+
+	/**
+	 * @param isoKey
+	 * @return the name of the geographic location that matches isoKey
+	 */
+	public static String getName(final String isoKey) {
+		return getName(isoKey, keyLevel(isoKey));
+	} // getName
+
+	/**
+	 * @param isoKey
+	 * @param level
+	 * @return the name of the geographic location that matches isoKey
+	 */
+	public static String getName(final String isoKey, final int level) {
+		try {
+			String isoKey2 = isoKey;
+			// alpha3 key?
+			if (isoKey.length() == 3) {
+				// Yes
+				isoKey2 = getAlpha2(isoKey);
+			} // if
+
+			final ResourceBundle rb = getResourceBundle(isoKey2, level,
+					RB_PREFIX, NAMES_BUNDLE_TYPE, LEVEL_0_RB_NAME, level0RB, rbMap);
+			return rb.getString(isoKey2).trim();
+		} catch (final MissingResourceException e) {
+			return '!' + isoKey + '!';
+		} catch (final NullPointerException e) {
+			return '!' + isoKey + '!';
+		} // catch NullPointerException
+	} // getName
+
+	/**
+	 * @param uri the {@link URI} of a geographic location
+	 * @return the name of the geographic location that matches {@link URI}
+	 */
+	public static String getName(URI uri) {
+		return getName(uri.lastSegment().toString());
+	} // getName
+
+	/**
+	 * @param isoKey
+	 *            the ISO-3166 alpha2 or alpha3 key of a geographic location
+	 * @return the name of the location specified by the isoKey in reverse
+	 *         hierarchy, e.g., "Santa Clara Country, California, USA" for the
+	 *         ISO Key "US-CA-06085"
+	 */
+	public static String getReverseHierarchyName(final String isoKey) {
+		final StringBuilder sb = new StringBuilder(getName(isoKey));
+
+		String temp = isoKey;
+		int i = temp.lastIndexOf("-"); //$NON-NLS-1$
+		while( i > 0) {
+			// Strip off the last segment of the key
+			temp = isoKey.substring(0,i);
+			sb.append(", "); //$NON-NLS-1$
+			sb.append(getName(temp));
+			i = temp.lastIndexOf("-"); //$NON-NLS-1$
+		}
+		return sb.toString();
+	} // getReverseHierarchyName
+
+	/**
+	 * @param isoKey
+	 *            the isoKey for which any "sub" keys at the level should be
+	 *            returned.
+	 * @param level
+	 *            the administrative level of the key
+	 * @return an array of the ISO keys that have the passed key as a prefix.
+	 */
+	public static Object[] getSubISOKeys(final String isoKey, final int level) {
+		Object[] retValue = new Object[] {};
+
+		// Earth (ZZZ)?
+		if (isoKey.equals(EARTH_ALPHA3_ISO_KEY)) {
+			// Yes
+			final Properties alpha2ToAlpha3Map = getAlpha2ToAlpha3Map();
+			// Do we have the map?
+			if (alpha2ToAlpha3Map != null) {
+				// Yes
+				// retValue = alpha2ToAlpha3Map.keySet().toArray();
+				retValue = alpha2ToAlpha3Map.values().toArray();
+			} // if
+		} // if Earth
+		else {
+			// No
+			try {
+				final ResourceBundle rb = getResourceBundle(isoKey, level,
+						RB_PREFIX, NAMES_BUNDLE_TYPE, LEVEL_0_RB_NAME, level0RB, rbMap);
+				final List<String> temp = new ArrayList<String>();
+				for (final Enumeration<String> keys = rb.getKeys(); keys
+						.hasMoreElements();) {
+					final String tempKey = keys.nextElement();
+					// Is this key at the next level?
+					if (tempKey.startsWith(isoKey)
+							&& keyLevel(tempKey) == level /* + 1 */) {
+						// Yes
+						temp.add(tempKey);
+					} // if
+				} // for each key
+				retValue = temp.toArray(new String[] {});
+			} catch (final MissingResourceException mre) {
+				Activator.logError(mre.getMessage(), mre);
+			}
+		} // else
+
+		return retValue;
+	} // getSubISOKeys
+	
+	/**
+	 * @param isoKey
+	 * @param bundlePrefix
+	 *            TODO
+	 * @param bundleType
+	 *            a {@link String} that identifies the type of bundle
+	 * @param level0RBName
+	 *            the name of the {@link ResourceBundle} file that contains the
+	 *            level 0 resources
+	 * @param level0RB
+	 *            the reference of the level 0 {@link ResourceBundle}
+	 * @param rbMap
+	 *            a {@link Map} between alpha-2 iso key and
+	 *            {@link ResourceBundle}s
+	 * @return the {@link ResourceBundle} that contains the mapping
+	 */
+	protected static ResourceBundle getResourceBundle(final String isoKey,
+			final int level, final String bundlePrefix,
+			final String bundleType, final String level0RBName,
+			ResourceBundle level0RB, Map<String, ResourceBundle> rbMap) {
+		ResourceBundle retValue = null;
+		// If the level is 0, we handle things specially. There is a single
+		// resource bundle that contains all of the level 0 mappings (i.e., the
+		// names of all countries) This allows us to avoid reading in all of the
+		// other (245!) resource bundles just to obtain the names of the
+		// countries. For the other levels we retrieve the bundle specific to
+		// the country because it has the names for all levels (i.e., all ISO
+		// keys).
+
+		// Level 0?
+		if (level == -1 || level == 0) {
+			// Yes
+			// Have we retrieved the level 0 resource bundle yet?
+			if (level0RB == null) {
+				// No
+				level0RB = ResourceBundle.getBundle(level0RBName);
+			} // if
+			retValue = level0RB;
+		} // if level 0
+		else {
+			// No
+			final String alpha2ISOKey = isoKey.substring(0, 2);
+
+			// We use that value as the key to "cache" the resource bundle
+			retValue = rbMap.get(alpha2ISOKey);
+
+			// Have we retrieved this ResourceBundle before?
+			if (retValue == null) {
+				// No
+				retValue = readResourceBundle(alpha2ISOKey, bundlePrefix,
+						bundleType);
+				// Were we successful?
+				if (retValue == null) {
+					// No
+					Activator.logError(
+							"Could not read Resource Bundle of type " //$NON-NLS-1$
+									+ bundleType + " for \"" + alpha2ISOKey //$NON-NLS-1$
+									+ "\"", null); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					rbMap.put(alpha2ISOKey, retValue);
+				} // else
+			} // if
+		} // else
+		return retValue;
+	} // getResourceBundle
+} // GeographicNames
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/ISOKey.java b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/ISOKey.java
new file mode 100644
index 0000000..387583a
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/ISOKey.java
@@ -0,0 +1,93 @@
+// ISOKey.java
+package org.eclipse.stem.geography;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class represents an ISO-3166-1 alpha3 or alpha2 country key (or
+ * combination).
+ */
+public class ISOKey implements Comparable<ISOKey> {
+	/**
+	 * This is the ISO key used to represent The Earth
+	 */
+	public static final ISOKey EARTH = new ISOKey("ZZZ"); //$NON-NLS-1$
+
+	private String key = null;
+
+	/**
+	 * @param key
+	 *            the key
+	 */
+	public ISOKey(final String key) {
+		this.key = key.trim();
+	}
+
+	/**
+	 * @return the key
+	 */
+	public final String getKey() {
+		return key;
+	}
+
+	/**
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		return key.hashCode();
+	}
+
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(final Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final ISOKey other = (ISOKey) obj;
+		if (key == null) {
+			if (other.key != null) {
+				return false;
+			}
+		} else if (!key.equals(other.key)) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return key;
+	}
+
+	/**
+	 * @param isoKey
+	 *            the key to compare to
+	 * @return the value of string compareTo
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(final ISOKey isoKey) {
+		return this.key.compareTo(isoKey.key);
+	}
+
+} // ISOKey
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/.cvsignore b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/.cvsignore
new file mode 100644
index 0000000..0567e20
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/.cvsignore
@@ -0,0 +1 @@
+*.properties
diff --git a/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/GeographicCenters.java b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/GeographicCenters.java
new file mode 100644
index 0000000..1f55a3d
--- /dev/null
+++ b/org.eclipse.stem.geography/src/org/eclipse/stem/geography/centers/GeographicCenters.java
@@ -0,0 +1,162 @@
+// GeographicCenters.java
+package org.eclipse.stem.geography.centers;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.NoSuchElementException;
+import java.util.ResourceBundle;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.geography.Activator;
+import org.eclipse.stem.geography.GeographicMapper;
+
+/**
+ * This class is responsible for providing pre-computed geographic Latitude and
+ * Longitude for the center of geographic locations.
+ */
+public class GeographicCenters extends GeographicMapper {
+	/**
+	 * This is the string that identifies the type of bundle for geographic
+	 * centers.
+	 */
+	private static final String CENTERS_BUNDLE_TYPE = "centers"; //$NON-NLS-1$
+
+	/**
+	 * The root name of the file that contains the level 0 names.
+	 */
+	public static final String LEVEL_0_ISO_NAMES_ROOT_NAME = "level0ISONames"; //$NON-NLS-1$
+
+	private static final String LEVEL_0_RB_NAME = RB_PREFIX + "." //$NON-NLS-1$
+			+ LEVEL_0_ISO_NAMES_ROOT_NAME;
+
+	private static ResourceBundle level0RB = null;
+
+	private static Map<String, ResourceBundle> rbMap = new HashMap<String, ResourceBundle>();
+
+	/**
+	 * @param isoKey
+	 *            the ISO-3166 alpha2 or alpha3 key of a geographic location
+	 * @return the center of the geographic location that matches isoKey, the
+	 *         first index (0) of the array is the latitude, the second (1) is
+	 *         the longitude, or <code>null</code> if the center could not be
+	 *         found for the key.
+	 */
+	public static double[] getCenter(final String isoKey) {
+		return getCenter(isoKey, keyLevel(isoKey));
+	} // getCenter
+
+	/**
+	 * @param isoKey
+	 *            the ISO-3166 alpha2 or alpha3 key of a geographic location
+	 * @param level
+	 *            the level of the key
+	 * @return the latitude and longitude of the center of the geographic region
+	 *         that matches isoKey, or <code>null</code> if not found.
+	 */
+	public static double[] getCenter(final String isoKey, final int level) {
+		double[] retValue = null;
+		String latLongString = ""; //$NON-NLS-1$
+
+		try {
+			String isoKey2 = isoKey;
+			// alpha3 key?
+			if (isoKey.length() == 3) {
+				// Yes
+				isoKey2 = getAlpha2(isoKey);
+			} // if
+
+			final ResourceBundle rb = getResourceBundle(isoKey2, level,
+					RB_PREFIX + ".centers", CENTERS_BUNDLE_TYPE, //$NON-NLS-1$
+					LEVEL_0_RB_NAME, level0RB, rbMap);
+			latLongString = rb.getString(isoKey2).trim();
+			// Did we get anything?
+			if (latLongString != null && !latLongString.equals("")) { //$NON-NLS-1$
+				// Yes
+				final StringTokenizer st = new StringTokenizer(latLongString,
+						","); //$NON-NLS-1$
+				final String latitudeString = st.nextToken();
+				final String longitudeString = st.nextToken();
+
+				retValue = new double[2];
+				retValue[0] = Double.parseDouble(latitudeString);
+				retValue[1] = Double.parseDouble(longitudeString);
+			} // if
+
+		} catch (final MissingResourceException e) {
+			retValue = null;
+		} catch (final NullPointerException e) {
+			retValue = null;
+		} // catch NullPointerException
+		catch (NumberFormatException nfe) {
+			Activator.logError("Error parsing \"" + latLongString //$NON-NLS-1$
+					+ "\" for the lat/long center of \"" + isoKey //$NON-NLS-1$
+					+ "\" Number format?", nfe); //$NON-NLS-1$
+		} // catch NumberFormatException
+		catch (NoSuchElementException nsee) {
+			Activator.logError("Error parsing \"" + latLongString //$NON-NLS-1$
+					+ "\" for the lat/long center of \"" + isoKey //$NON-NLS-1$
+					+ "\" Missing value?", nsee); //$NON-NLS-1$
+		} // catch NoSuchElementException
+
+		return retValue;
+	} // getCenter
+
+	/**
+	 * @param isoKey
+	 * @param bundlePrefix
+	 *            TODO
+	 * @param bundleType
+	 *            a {@link String} that identifies the type of bundle
+	 * @param level0RBName
+	 *            the name of the {@link ResourceBundle} file that contains the
+	 *            level 0 resources
+	 * @param level0RB
+	 *            the reference of the level 0 {@link ResourceBundle}
+	 * @param rbMap
+	 *            a {@link Map} between alpha-2 iso key and
+	 *            {@link ResourceBundle}s
+	 * @return the {@link ResourceBundle} that contains the mapping
+	 */
+	protected static ResourceBundle getResourceBundle(final String isoKey,
+			final int level,
+			final String bundlePrefix, final String bundleType,
+			final String level0RBName, ResourceBundle level0RB,
+			Map<String, ResourceBundle> rbMap) {
+		ResourceBundle retValue = null;
+
+		final String alpha2ISOKey = isoKey.substring(0, 2);
+
+		// We use that value as the key to "cache" the resource bundle
+		retValue = rbMap.get(alpha2ISOKey);
+
+		// Have we retrieved this ResourceBundle before?
+		if (retValue == null) {
+			// No
+			retValue = readResourceBundle(alpha2ISOKey, bundlePrefix,
+					bundleType);
+			// Were we successful?
+			if (retValue == null) {
+				// No
+				Activator.logError("Could not read Resource Bundle of type " //$NON-NLS-1$
+						+ bundleType + " for \"" + alpha2ISOKey + "\"", null); //$NON-NLS-1$ //$NON-NLS-2$
+			} // if
+			else {
+				// No
+				rbMap.put(alpha2ISOKey, retValue);
+			} // else
+		} // if
+		return retValue;
+	} // getResourceBundle
+} // GeographicCenters
diff --git a/org.eclipse.stem.internal.diseasemodels.models/.classpath b/org.eclipse.stem.internal.diseasemodels.models/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.internal.diseasemodels.models/.cvsignore b/org.eclipse.stem.internal.diseasemodels.models/.cvsignore
new file mode 100644
index 0000000..9c595a6
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/.cvsignore
@@ -0,0 +1 @@
+temp
diff --git a/org.eclipse.stem.internal.diseasemodels.models/.project b/org.eclipse.stem.internal.diseasemodels.models/.project
new file mode 100644
index 0000000..af4617e
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.internal.diseasemodels.models</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.internal.diseasemodels.models/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.internal.diseasemodels.models/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c4b62ca
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:59:50 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.internal.diseasemodels.models/META-INF/MANIFEST.MF b/org.eclipse.stem.internal.diseasemodels.models/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5c2b110
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: STEM Internal Disease Models
+Bundle-SymbolicName: org.eclipse.stem.internal.diseasemodels.models
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.core,
+ org.eclipse.stem.data.geography,
+ org.eclipse.stem.data.diseasemodels.models,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.diseases,
+ org.eclipse.stem.internal.data,
+ org.eclipse.stem.internal.data.geography,
+ org.eclipse.stem.internal.data.geography.models,
+ org.eclipse.stem.data.geography.population.human.models
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: Eclipse.org
diff --git a/org.eclipse.stem.internal.diseasemodels.models/build.properties b/org.eclipse.stem.internal.diseasemodels.models/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/data/specifications/DiseaseModelModelSpecification.java b/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/data/specifications/DiseaseModelModelSpecification.java
new file mode 100644
index 0000000..3a23d9a
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/data/specifications/DiseaseModelModelSpecification.java
@@ -0,0 +1,211 @@
+// DiseaseModelModelSpecification.java
+package org.eclipse.stem.internal.data.specifications;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.data.geography.ISOKey;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.internal.data.generatedplugin.DublinCore;
+import org.eclipse.stem.internal.data.geography.specifications.AdminLevelSet;
+import org.eclipse.stem.internal.data.geography.specifications.CountryGraphPropertyFileSpecification;
+
+/**
+ * This class represents a {@link ModelSpecification} for a Disease model.
+ */
+public class DiseaseModelModelSpecification extends ModelSpecification
+		implements Comparable<DiseaseModelModelSpecification> {
+
+	/**
+	 * This is referenced to cause the {@link ModelPackage} to register itself
+	 * as a package.
+	 */
+	@SuppressWarnings("unused")
+	private final ModelPackage modelPackage = ModelPackage.eINSTANCE;
+	@SuppressWarnings("unused")
+	private final StandardPackage standardPackage = StandardPackage.eINSTANCE;
+
+	private final DublinCore populationModelDC;
+	@SuppressWarnings("unused")
+	private final DublinCore diseaseModelDC;
+
+	private final DiseaseModel diseaseModel;
+	
+	private final ISOKey isoKey;
+	private final AdminLevelSet adminLevelSet;
+	private final String diseaseName;
+
+	static {
+		// This sets up the mapping between the "platform" URI's and the
+		// projects in the file system.
+
+		// CWD is the current working directory
+		final String CWD = System.getProperty("user.dir"); //$NON-NLS-1$
+		// WORKSPACE is the directory of the parent workspace
+		final String WORKSPACE = CWD.substring(0, CWD
+				.lastIndexOf(File.separator));
+
+		// The path to the generated population data project
+		final String HUMAN_POPULATION_MODELS_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the diseases project
+		final String DISEASES_PROJECT_ROOT = WORKSPACE + File.separator
+				+ org.eclipse.stem.diseases.Activator.PLUGIN_ID
+				+ File.separator;
+
+		final Map<String, URI> platformResourceMap = EcorePlugin
+				.getPlatformResourceMap();
+
+		// Register the mapping between the project id and the absolute path to
+		// the project in the file system. This will be found later when
+		// deserializing when the platform URI is mapped.
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID,
+						URI.createFileURI(HUMAN_POPULATION_MODELS_PROJECT_ROOT));
+
+		platformResourceMap.put(
+				org.eclipse.stem.diseases.Activator.PLUGIN_ID, URI
+						.createFileURI(DISEASES_PROJECT_ROOT));
+	} // static
+
+	/**
+	 * @param isoKey
+	 *            the {@link ISOKey} for a single region
+	 * @param levelSet
+	 *            the {@link AdminLevelSet} covered
+	 * @param populationModelDC
+	 *            {@link DublinCore} instance that describes the population
+	 *            model
+	 * @param diseaseModelDC
+	 *            {@link DublinCore} instance that describes a disease model
+	 * @param diseaseModel 
+	 */
+	public DiseaseModelModelSpecification(ISOKey isoKey,
+			AdminLevelSet levelSet, DublinCore populationModelDC,
+			DublinCore diseaseModelDC, final DiseaseModel diseaseModel) {
+		this.isoKey = isoKey;
+		this.adminLevelSet = levelSet;
+		this.populationModelDC = populationModelDC;
+		this.diseaseModelDC = diseaseModelDC;
+		this.diseaseModel = diseaseModel;
+		this.diseaseName = diseaseModel.getDiseaseName();
+	} // DiseaseModelModelSpecification
+
+	/**
+	 * @see org.eclipse.stem.internal.data.specifications.ModelSpecification#createIdentifiableInstance()
+	 */
+	@Override
+	protected Model createIdentifiableInstance() {
+		final Model retValue = super.createIdentifiableInstance();
+		// The generated Graphs etc., all have dublin core that references
+		// them as plugins. This is as it should be when STEM is running,
+		// but right now we're running stand-alone and want to access the
+		// plugins as projects (they aren't plugged into our running version
+		// of Eclipse). Substitute "resource" for "plugin" in the URI's we
+		// use and all will be well.
+
+		retValue
+				.getModels()
+				.add(
+						(Model) Utility
+								.getIdentifiable(getIdentifiableProjectURI(populationModelDC)));
+		
+		retValue.getNodeDecorators().add(diseaseModel);
+		return retValue;
+	} // createIdentifiableInstance
+
+	public int compareTo(DiseaseModelModelSpecification pms) {
+		return adminLevelSet.getNumAdminLevels() > pms.adminLevelSet
+				.getNumAdminLevels() ? 1 : -1;
+	} // compareTo
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder();
+		sb.append(isoKey);
+		sb.append(":"); //$NON-NLS-1$
+		sb.append(diseaseName);
+		sb.append(" "); //$NON-NLS-1$
+		sb.append(adminLevelSet.toString());
+		return sb.toString();
+	} // toString
+
+	@Override
+	protected String getRelativeSerializationPath() {
+		final StringBuilder sb = new StringBuilder();
+		sb.append(CountryGraphPropertyFileSpecification.COUNTRY_DIR);
+		sb.append(File.separatorChar);
+		sb.append(isoKey.toString());
+		return sb.toString();
+	}
+
+	@Override
+	protected String getSerializationFileNameRoot() {
+		final StringBuilder sb = new StringBuilder(isoKey.toString());
+		sb.append("_"); //$NON-NLS-1$
+		sb.append(adminLevelSet.toString());
+		sb.append("_disease_"); //$NON-NLS-1$
+		sb.append(diseaseName.replace(" ", "_"));  //$NON-NLS-1$//$NON-NLS-2$
+		return sb.toString();
+	}
+
+	@Override
+	protected String getTargetPluginId() {
+		return org.eclipse.stem.data.diseasemodels.models.Activator.PLUGIN_ID;
+	}
+
+	@Override
+	protected String getTitleDescriptor() {
+		final StringBuilder sb = new StringBuilder(isoKey.toString());
+		sb.append(" Disease "); //$NON-NLS-1$
+		sb.append(diseaseName);
+		sb
+				.append(adminLevelSet.getNumAdminLevels() > 1 ? " (Levels: " : " (Level: "); //$NON-NLS-1$ //$NON-NLS-2$
+		sb.append(adminLevelSet.toString(",")); //$NON-NLS-1$
+		sb.append(")"); //$NON-NLS-1$
+		return sb.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.internal.data.specifications.IdentifiableSpecification#createDubinCoreCoverage()
+	 */
+	@Override
+	protected String createDubinCoreCoverage() {
+		return populationModelDC.getCoverage();
+	}
+
+	/**
+	 * @see org.eclipse.stem.internal.data.specifications.IdentifiableSpecification#createDubinCoreSubject()
+	 */
+	@Override
+	protected String createDubinCoreSubject() {
+		return GraphPropertyFileSpecification.createDublinCoreSubjectString(
+				ModelPackage.Literals.MODEL.getName(), "disease"); //$NON-NLS-1$
+	}
+
+} // DiseaseModelModelSpecification
\ No newline at end of file
diff --git a/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/diseasemodels/models/DiseaseModelModelGenerator.java b/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/diseasemodels/models/DiseaseModelModelGenerator.java
new file mode 100644
index 0000000..278f1cf
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/src/org/eclipse/stem/internal/diseasemodels/models/DiseaseModelModelGenerator.java
@@ -0,0 +1,269 @@
+// DiseaseModelModelGenerator.java
+package org.eclipse.stem.internal.diseasemodels.models;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.data.geography.ISOKey;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.internal.data.ModelGenerator;
+import org.eclipse.stem.internal.data.PluginFileGenerator;
+import org.eclipse.stem.internal.data.generatedplugin.DublinCore;
+import org.eclipse.stem.internal.data.generatedplugin.Extension;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+import org.eclipse.stem.internal.data.generatedplugin.Plugin;
+import org.eclipse.stem.internal.data.generatedplugin.StemCategory;
+import org.eclipse.stem.internal.data.geography.models.GeographyModelGenerator;
+import org.eclipse.stem.internal.data.geography.specifications.AdminLevelSet;
+import org.eclipse.stem.internal.data.geography.specifications.CountryGraphPropertyFileSpecification;
+import org.eclipse.stem.internal.data.specifications.DiseaseModelModelSpecification;
+import org.eclipse.stem.internal.data.specifications.IdentifiableSpecification;
+import org.eclipse.stem.internal.data.specifications.ModelSpecification;
+
+/**
+ * This class processes the generated population model files to create Disease
+ * model models.
+ */
+public class DiseaseModelModelGenerator extends GeographyModelGenerator {
+
+	@SuppressWarnings("unused")
+	private final StandardPackage standardPackage = StandardPackage.eINSTANCE;
+	@SuppressWarnings("unused")
+	private final ModelPackage modelPackage = ModelPackage.eINSTANCE;
+
+	static {
+		// This sets up the mapping between the "platform" URI's and the
+		// projects in the file system.
+
+		// CWD is the current working directory
+		final String CWD = System.getProperty("user.dir"); //$NON-NLS-1$
+		// WORKSPACE is the directory of the parent workspace
+		final String WORKSPACE = CWD.substring(0, CWD
+				.lastIndexOf(File.separator));
+
+		// The path to the generated population data project
+		final String HUMAN_POPULATION_MODELS_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the diseases project
+		final String DISEASES_PROJECT_ROOT = WORKSPACE + File.separator
+				+ org.eclipse.stem.diseases.Activator.PLUGIN_ID
+				+ File.separator;
+
+		final Map<String, URI> platformResourceMap = EcorePlugin
+				.getPlatformResourceMap();
+
+		// Register the mapping between the project id and the absolute path to
+		// the project in the file system. This will be found later when
+		// deserializing when the platform URI is mapped.
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID,
+						URI.createFileURI(HUMAN_POPULATION_MODELS_PROJECT_ROOT));
+
+		platformResourceMap.put(
+				org.eclipse.stem.diseases.Activator.PLUGIN_ID, URI
+						.createFileURI(DISEASES_PROJECT_ROOT));
+	} // static
+
+	/**
+	 * The id of the Disease Model category
+	 */
+	public static final String ID_MODEL_DISEASE_CATEGORY = PluginFileGenerator.ID_MODEL_CATEGORY
+			+ ".disease"; //$NON-NLS-1$
+
+	/**
+	 * @param args
+	 *            [0] the URI of the generated population model plugin.xml file
+	 *            [1] the name of the project with the population models [2] the
+	 *            name of the project with the disease models
+	 */
+	public static void main(final String[] args) {
+		// Is the plugin file specified?
+		if (args.length == 0) {
+			// Yes
+			System.err.println("Missing specification of the plugin file"); //$NON-NLS-1$
+		} // if
+		else {
+
+			final String GENERATED_FILES_PATH = args[0];
+
+			final String populationModelProjectName = args[1];
+			final String diseaseModelProjectName = args[2];
+
+			final String GENERATED_MODELS_PATH = GENERATED_FILES_PATH
+					+ File.separator + "resources" + File.separator + "data"; //$NON-NLS-1$ //$NON-NLS-2$
+
+			final File populationModelPluginFile = new File(
+					".."	+ File.separator + populationModelProjectName + File.separator + PluginFileGenerator.PLUGIN_XML_FILE_NAME); //$NON-NLS-1$
+			final URI populationModelPluginFileURI = URI
+					.createFileURI(populationModelPluginFile.getAbsolutePath());
+
+			final File diseaseModelPluginFile = new File(
+					".."	+ File.separator + diseaseModelProjectName + File.separator + PluginFileGenerator.PLUGIN_XML_FILE_NAME); //$NON-NLS-1$
+			final URI diseaseModelPluginFileURI = URI
+					.createFileURI(diseaseModelPluginFile.getAbsolutePath());
+
+			final DiseaseModelModelGenerator dmmg = new DiseaseModelModelGenerator();
+			final Map<ISOKey, List<DiseaseModelModelSpecification>> modelSpecifications = dmmg
+					.processFiles2(populationModelPluginFileURI,
+							diseaseModelPluginFileURI);
+
+			for (final ISOKey isoKey : sortISOKeys(modelSpecifications)) {
+				// Now serialize the Identifiables
+				for (final ModelSpecification gms : modelSpecifications
+						.get(isoKey)) {
+					try {
+						gms.serialize(GENERATED_MODELS_PATH);
+					} catch (final IOException e) {
+						e.printStackTrace();
+					}
+				} // for gms
+			} // for isoKey
+
+			// Create the instance of plugin.xml that we'll serialize later
+			final Plugin pluginxml = GeneratedpluginFactory.eINSTANCE
+					.createPlugin();
+			final Extension extension = GeneratedpluginFactory.eINSTANCE
+					.createExtension();
+
+			// Add the "model" extension point
+			extension.setPoint(Constants.ID_MODEL_EXTENSION_POINT);
+
+			pluginxml.getExtensionelement().add(extension);
+
+			// Now add the dublin core entries to the plugin.xml file for
+			// each of the models
+			for (final ISOKey isoKey : sortISOKeys(modelSpecifications)) {
+				final StemCategory countryCategory = GeneratedpluginFactory.eINSTANCE
+						.createStemCategory();
+				final String COUNTRY_CATAGORY_STRING = ID_MODEL_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY
+						+ "." + isoKey.toString().toLowerCase(); //$NON-NLS-1$
+				countryCategory.setId(COUNTRY_CATAGORY_STRING);
+				countryCategory.setName(isoKey.toString());
+				countryCategory
+						.setParentId(ID_MODEL_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY);
+				for (final ModelSpecification gms : modelSpecifications
+						.get(isoKey)) {
+					final DublinCore dc = GeneratedpluginFactory.eINSTANCE
+							.createDublinCore();
+					dc.setCategoryId(COUNTRY_CATAGORY_STRING);
+					extension.getDublinCores().add(
+							populateGeneratedDC(dc, gms.getDublinCore()));
+				} // for gms
+			} // for isoKey
+
+			final URI TEMP_PLUGINXML_URI = URI
+					.createFileURI(GENERATED_FILES_PATH + File.separator
+							+ PluginFileGenerator.PLUGIN_XML_FILE_NAME);
+
+			// Serialize the plugin.xml file.
+			ModelGenerator.writePluginxml(pluginxml, TEMP_PLUGINXML_URI);
+
+			// Create the plugin.properties file
+			createPluginPropertties(GENERATED_FILES_PATH);
+		} // else
+
+	} // main
+
+	protected Map<ISOKey, List<DiseaseModelModelSpecification>> processFiles2(
+			final URI populationModelPluginFileURI,
+			final URI diseaseModelPluginFileURI) {
+		final HashMap<ISOKey, List<DiseaseModelModelSpecification>> retValue = new HashMap<ISOKey, List<DiseaseModelModelSpecification>>();
+
+		// Get the contents of the population plug.xml file
+		final Plugin populationPluginXML = getPluginxml(populationModelPluginFileURI);
+		final Plugin diseaseModelPluginXML = getPluginxml(diseaseModelPluginFileURI);
+
+		// Populate the map of population models by ISOKey and Administration
+		// level
+		final Map<ISOKey, Map<AdminLevelSet, DublinCore>> populationModelMap = new HashMap<ISOKey, Map<AdminLevelSet, DublinCore>>();
+
+		for (Extension extension : populationPluginXML.getExtensionelement()) {
+			for (DublinCore dc : extension.getDublinCores()) {
+				final Map<ISOKey, AdminLevelSet> isoKeyAdminLevelSetMap = CountryGraphPropertyFileSpecification
+						.parseDublinCoreCoverageString(dc.getCoverage());
+				final AdminLevelSet adminLevelSet = (AdminLevelSet) isoKeyAdminLevelSetMap
+						.values().toArray()[0];
+				final ISOKey isoKey = (ISOKey) isoKeyAdminLevelSetMap.keySet()
+						.toArray()[0];
+
+				Map<AdminLevelSet, DublinCore> temp = populationModelMap
+						.get(isoKey);
+				if (temp == null) {
+					temp = new HashMap<AdminLevelSet, DublinCore>();
+					populationModelMap.put(isoKey, temp);
+				}
+				temp.put(adminLevelSet, dc);
+			} // for dc
+		} // for extension
+
+		final Map<DublinCore, DiseaseModel> dcDiseaseModelMap = new HashMap<DublinCore, DiseaseModel>();
+		// Populate the collection of disease models
+		for (Extension extension : diseaseModelPluginXML.getExtensionelement()) {
+			for (DublinCore diseaseModelDC : extension.getDublinCores()) {
+				final Identifiable dm = Utility
+						.getIdentifiable(IdentifiableSpecification
+								.getIdentifiableProjectURI(diseaseModelDC));
+				// Is this a standard, non-aggregating disease model?
+				if ((dm instanceof DiseaseModel)
+						&& !(dm instanceof AggregatingSIDiseaseModel)) {
+					dcDiseaseModelMap.put(diseaseModelDC, (DiseaseModel) dm);
+				}
+
+			} // for dc
+		} // for extension
+
+		// Create the disease model models
+		for (ISOKey isoKey : sortISOKeys(populationModelMap)) {
+			final List<DiseaseModelModelSpecification> gmsList = new ArrayList<DiseaseModelModelSpecification>();
+
+			final Map<AdminLevelSet, DublinCore> adminSetDCMap = populationModelMap
+					.get(isoKey);
+			for (AdminLevelSet adminLevelSet : adminSetDCMap.keySet()) {
+				final DublinCore populationModelDC = adminSetDCMap
+						.get(adminLevelSet);
+
+				// Iterate through each of the disease models and create one
+				// model for each for the current ISOKey
+				for (DublinCore diseaseModelDC : dcDiseaseModelMap.keySet()) {
+					final DiseaseModelModelSpecification temp = new DiseaseModelModelSpecification(
+							isoKey, adminLevelSet, populationModelDC,
+							diseaseModelDC, dcDiseaseModelMap
+									.get(diseaseModelDC));
+
+					gmsList.add(temp);
+				} // for diseaseDCs
+			} // for adminLevel
+			retValue.put(isoKey, gmsList);
+		} // for each isoKey
+		return retValue;
+	} // processFiles
+
+} // DiseaseModelModelGenerator
\ No newline at end of file
diff --git a/org.eclipse.stem.internal.diseasemodels.models/update.xml b/org.eclipse.stem.internal.diseasemodels.models/update.xml
new file mode 100644
index 0000000..45aa9f8
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.models/update.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!-- ====================================================================== 
+     ANT script to build org.eclispe.ohf.stem.geography project 
+     and the initial set of STEM scenarios.  
+     This must be run after installing the STEM workspace and after changes
+     to code generated by EMF models.
+                                                                    
+     ====================================================================== -->
+<project name="STEM Internal Disease Models" default="update_all">
+	<description>
+     Use the properties files to populate the org.eclipse.stem.data.diseasemodels.models plugin
+    </description>
+
+	<!-- P r o j e c t  S p e c i f i c a t i o n s -->
+
+	<!-- The name of the project -->
+	<property name="project.name" value="stem" />
+
+	
+	<!-- Are we running headless? -->
+	<condition property="runningHeadless" >
+		<isset property="buildDirectory" />
+	</condition>
+	
+	<!-- The buildDirectory property is set in a headless build -->
+	<condition property="pluginRootDirectory" value="${buildDirectory}/plugins" else="..">
+		<isset property="runningHeadless" />
+	</condition>
+
+	<!-- The baseLocation property is the location of the eclipse home installation -->
+	<!-- It is used to find eclipse plugins                                         -->
+	<!-- It is set in a headless build, but not one started manually from Eclipse   -->
+	<condition property="baseLocation" value="${eclipse.pdebuild.home}../..">
+		<not>
+			<isset property="runningHeadless" />
+		</not>
+	</condition>
+
+	<!-- This is the location of the class files of the built plug-ins     -->
+	<!-- If this is a manual build started from Eclipse then the directory -->
+	<!-- is "bin", if its a headless build then the directory is "@dot"    -->
+	<!-- The property baseLocation is set in a headless build              -->
+	<condition property="targetBin" value="@dot" else="bin">
+		<isset property="runningHeadless" />
+	</condition>
+	
+	
+	<!-- The prefix for fully qualified names -->
+	<property name="ID_ROOT" value="org.eclipse.stem" />
+
+	<!-- The name of the plugin that contains the plugin.xml file to scan -->
+	<property name="scan.plugin" value="${ID_ROOT}.data.geography.population.human.models" />
+	
+	<!-- The name of the source plugin (i.e., the one that contains this file -->
+	<property name="source.plugin" value="${ID_ROOT}.internal.diseasemodels.models" />
+
+	<!-- The name of the plugin with the diseases -->
+	<property name="disease.plugin"  value="${ID_ROOT}.diseases" />
+	
+	<!-- The name of the target plugin -->
+	<property name="target.plugin" value="${ID_ROOT}.data.diseasemodels.models" />
+
+	<!-- The path to the root directory of the source plugin -->
+	<property name="path.sourceplugin" location="${pluginRootDirectory}/${source.plugin}" />
+
+	<!-- The path to the root directory of the plugin that will be augmented with generated content -->
+	<property name="path.targetplugin" location="${pluginRootDirectory}/${target.plugin}" />
+
+	<!-- The path to the root directory of the resource files -->
+	<property name="path.resource.files" value="${path.sourceplugin}/resources/data/country" />
+
+	<!-- The path to the root directory of the plugin that will be augmented with generated content-->
+	<property name="path.generated.files" value="${path.sourceplugin}/temp" />
+
+	<!-- The path to the root directory of geography source code -->
+	<property name="path.geography.src" value="${path.targetplugin}/src/org/eclipse/stem/data/geography/population/human/models" />
+
+	<!-- The name of the plugin.xml file that will be augmented with generated content-->
+	<property name="file.target.pluginxml" value="${path.targetplugin}/plugin.xml" />
+
+	<!-- The name of the plugin.properties file that will be augmented with generated content-->
+	<property name="file.target.pluginproperties" value="${path.targetplugin}/plugin.properties" />
+
+	<!-- The name of the plugin.xml file that that is the aggregation of the generated content-->
+	<property name="file.util.pluginxml" value="${path.generated.files}/plugin.xml" />
+
+	<!-- The name of the plugin.properties file that that is the aggregation of the generated content-->
+	<property name="file.util.pluginproperties" value="${path.generated.files}/plugin.properties" />
+
+    <!-- The name of the plugin.xml file that that is the aggregation of the generated content-->
+    <property name="file.target.pluginproperties" value="${path.generated.files}/plugin.properties" />
+
+	<!-- The class path to use -->
+	<path id="classpath.runtime"> 
+		<pathelement location="${path.sourceplugin}/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.core/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.definitions/${targetBin}" />
+	    <pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data.geography/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data.geography.models/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.data.geography/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.diseasemodels/${targetBin}" />
+		<fileset dir="${baseLocation}/plugins/">
+			<include name="*emf*.jar" />
+		</fileset>
+	</path>
+
+	<target name="update_all" depends="update" />
+
+	<!-- Update the geography plugin with the latest definitions -->
+	<target name="update" depends="update_disease_models, update_diseasemodels_models_plugin_xml, update_diseasemodels_models_plugin_properties" />
+
+	<target name="update_diseasemodels_models_plugin_xml" depends="create_candidates">
+		<copy tofile="${file.target.pluginxml}" file="${file.util.pluginxml}" overwrite="true" />
+	</target>
+
+	<target name="update_diseasemodels_models_plugin_properties" depends="create_candidates">
+		<copy tofile="${file.target.pluginproperties}" file="${file.util.pluginproperties}" overwrite="true" />
+	</target>
+
+	<!-- Update the graph files in the geography plugin -->
+	<target name="update_disease_models" depends="create_candidates">
+		<copy todir="${path.targetplugin}/resources/data/" overwrite="true">
+			<fileset dir="${path.generated.files}/resources/data">
+				<include name="**/*.model" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<!-- Create the model files for countries and the plugin.xml and plugin.properties fragments -->
+	<target name="create_candidates" depends="clean">
+		<!-- There is a problem here with specifying fork="true"  maxmemory="768m".  It causes an IOException on some machines -->
+		<java classname="${ID_ROOT}.internal.diseasemodels.models.DiseaseModelModelGenerator" fork="true" maxmemory="1024m">
+			<classpath refid="classpath.runtime" />
+			<arg value="${path.generated.files}" />
+			<arg value="${scan.plugin}" />
+			<arg value="${disease.plugin}" />
+			<jvmarg value="-Xms1024m"/>
+			<jvmarg value="-Xmx1024m"/>
+		</java>
+	</target>
+
+	<!-- clean out the .../temp/data directories -->
+	<!-- clean out the target directories -->
+	<target name="clean" depends="create_generated_files_dir">
+		<delete includeEmptyDirs="true" quiet="true">
+			<fileset dir="${path.generated.files}/">
+				<include name="**/*" />
+			</fileset>
+			<fileset dir="${path.targetplugin}/resources/data/">
+				<include name="country/**/*" />
+			</fileset>
+		</delete>
+	</target>
+
+	<target name="create_generated_files_dir">
+		<mkdir dir="${path.generated.files}/resources/data"/>		
+	</target>
+</project>
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/.classpath b/org.eclipse.stem.internal.diseasemodels.scenarios/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/.cvsignore b/org.eclipse.stem.internal.diseasemodels.scenarios/.cvsignore
new file mode 100644
index 0000000..9c595a6
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/.cvsignore
@@ -0,0 +1 @@
+temp
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/.project b/org.eclipse.stem.internal.diseasemodels.scenarios/.project
new file mode 100644
index 0000000..39a1c67
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.internal.diseasemodels.scenarios</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.internal.diseasemodels.scenarios/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..13b705f
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:59:32 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/META-INF/MANIFEST.MF b/org.eclipse.stem.internal.diseasemodels.scenarios/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a6ce366
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: STEM Internal Disease Scenarios
+Bundle-SymbolicName: org.eclipse.stem.internal.diseasemodels.scenarios
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.common,
+ org.eclipse.stem.core,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.diseases,
+ org.eclipse.stem.data.geography,
+ org.eclipse.stem.data.geography.population.human,
+ org.eclipse.stem.data.geography.population.human.models,
+ org.eclipse.stem.data.diseasemodels.models,
+ org.eclipse.stem.data.diseasemodels.scenarios,
+ org.eclipse.stem.internal.data,
+ org.eclipse.stem.internal.data.geography,
+ org.eclipse.stem.internal.data.geography.models
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: Eclipse.org
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/build.properties b/org.eclipse.stem.internal.diseasemodels.scenarios/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/data/specifications/DiseaseModelScenarioSpecification.java b/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/data/specifications/DiseaseModelScenarioSpecification.java
new file mode 100644
index 0000000..ca0004d
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/data/specifications/DiseaseModelScenarioSpecification.java
@@ -0,0 +1,329 @@
+// DiseaseModelScenarioSpecification.java
+package org.eclipse.stem.internal.data.specifications;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Date;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.data.geography.ISOKey;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.internal.data.generatedplugin.DublinCore;
+import org.eclipse.stem.internal.data.geography.specifications.AdminLevelSet;
+import org.eclipse.stem.internal.data.geography.specifications.CountryGraphPropertyFileSpecification;
+
+/**
+ * This class represents
+ */
+public class DiseaseModelScenarioSpecification extends
+		IdentifiableSpecification implements
+		Comparable<DiseaseModelScenarioSpecification> {
+
+	/**
+	 * The number of people that will be infected
+	 */
+	private static final int INFECTIOUS_COUNT = 10000;
+
+	@SuppressWarnings("unused")
+	private final ModelPackage modelPackage = ModelPackage.eINSTANCE;
+	@SuppressWarnings("unused")
+	private final StandardPackage standardPackage = StandardPackage.eINSTANCE;
+
+	private final DublinCore diseaseModelModelDC;
+
+	private final ISOKey isoKey;
+	private final AdminLevelSet adminLevelSet;
+	private Model diseaseModelModel;
+	private DiseaseModel diseaseModel;
+	private Sequencer sequencer;
+	private SIInfector infector;
+	private String infectedRegionName;
+
+	static {
+		// This sets up the mapping between the "platform" URI's and the
+		// projects in the file system.
+
+		// CWD is the current working directory
+		final String CWD = System.getProperty("user.dir"); //$NON-NLS-1$
+		// WORKSPACE is the directory of the parent workspace
+		final String WORKSPACE = CWD.substring(0, CWD
+				.lastIndexOf(File.separator));
+
+		// The path to the disease models project
+		final String DISEASES_MODELS_MODELS_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.diseasemodels.models.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the diseases project
+		final String DISEASES_PROJECT_ROOT = WORKSPACE + File.separator
+				+ org.eclipse.stem.diseases.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the population model project
+		final String POPULATION_DATA_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.geography.population.human.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the population model project
+		final String POPULATION_MODEL_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID
+				+ File.separator;
+
+		final Map<String, URI> platformResourceMap = EcorePlugin
+				.getPlatformResourceMap();
+
+		// Register the mapping between the project id and the absolute path to
+		// the project in the file system. This will be found later when
+		// deserializing when the platform URI is mapped.
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.diseasemodels.models.Activator.PLUGIN_ID,
+						URI.createFileURI(DISEASES_MODELS_MODELS_PROJECT_ROOT));
+
+		platformResourceMap.put(
+				org.eclipse.stem.diseases.Activator.PLUGIN_ID, URI
+						.createFileURI(DISEASES_PROJECT_ROOT));
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.geography.population.human.Activator.PLUGIN_ID,
+						URI.createFileURI(POPULATION_DATA_PROJECT_ROOT));
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.geography.population.human.models.Activator.PLUGIN_ID,
+						URI.createFileURI(POPULATION_MODEL_PROJECT_ROOT));
+	} // static
+
+	/**
+	 * @param isoKey
+	 * @param adminLevelSet
+	 * @param diseaseModelModelDC
+	 */
+	public DiseaseModelScenarioSpecification(final ISOKey isoKey,
+			final AdminLevelSet adminLevelSet, DublinCore diseaseModelModelDC) {
+		this.diseaseModelModelDC = diseaseModelModelDC;
+
+		this.isoKey = isoKey;
+		this.adminLevelSet = adminLevelSet;
+		getDublinCore().setFormat(ScenarioPackage.eNS_URI);
+	} // DiseaseModelScenarioSpecification
+
+	/**
+	 * @see org.eclipse.stem.internal.data.specifications.ModelSpecification#createIdentifiableInstance()
+	 */
+	@Override
+	protected Scenario createIdentifiableInstance() {
+		final Scenario retValue = ScenarioFactory.eINSTANCE.createScenario();
+		// The generated Graphs etc., all have dublin core that references
+		// them as plugins. This is as it should be when STEM is running,
+		// but right now we're running stand-alone and want to access the
+		// plugins as projects (they aren't plugged into our running version
+		// of Eclipse). Substitute "resource" for "plugin" in the URI's we
+		// use and all will be well.
+
+		diseaseModelModel = (Model) Utility
+				.getIdentifiable(getIdentifiableProjectURI(diseaseModelModelDC));
+		retValue.setModel(diseaseModelModel);
+
+		diseaseModel = extractDiseaseModel(diseaseModelModel);
+		sequencer = createSequencer();
+		retValue.setSequencer(sequencer);
+		infector = createInfector(diseaseModelModel);
+		retValue.getScenarioDecorators().add(infector);
+		return retValue;
+	} // createIdentifiableInstance
+
+	private DiseaseModel extractDiseaseModel(Model diseaseModelModel) {
+		DiseaseModel retValue = null;
+
+		for (NodeDecorator nodeDecorator : diseaseModelModel
+				.getNodeDecorators()) {
+			if (nodeDecorator.eIsProxy()) {
+				retValue = (DiseaseModel) Utility
+						.getIdentifiable(URI
+								.createURI(IdentifiableSpecification
+										.convertToProjectURI(((InternalEObject) nodeDecorator)
+												.eProxyURI().toString())));
+				break;
+			}
+		} // for each nodeDecorator
+		return retValue;
+	} // extractDiseaseModel
+
+	@Override
+	protected String getRelativeSerializationPath() {
+		final StringBuilder sb = new StringBuilder();
+		sb.append(CountryGraphPropertyFileSpecification.COUNTRY_DIR);
+		sb.append(File.separatorChar);
+		sb.append(isoKey.toString());
+		return sb.toString();
+	}
+
+	@Override
+	protected String getSerializationFileNameRoot() {
+		final StringBuilder sb = new StringBuilder(isoKey.toString());
+		sb.append("_"); //$NON-NLS-1$
+		sb.append(adminLevelSet.toString());
+		sb.append("_disease_"); //$NON-NLS-1$
+		if (diseaseModel != null) {
+			sb.append(diseaseModel.getDiseaseName().trim().replace(" ", "_")); //$NON-NLS-1$//$NON-NLS-2$
+		}
+		return sb.toString();
+	}
+
+	@Override
+	protected String getTargetPluginId() {
+		return org.eclipse.stem.data.diseasemodels.scenarios.Activator.PLUGIN_ID;
+	}
+
+	@Override
+	protected String getTitleDescriptor() {
+		final StringBuilder sb = new StringBuilder(isoKey.toString());
+		sb.append(" "); //$NON-NLS-1$
+		sb
+				.append(adminLevelSet.getNumAdminLevels() > 1 ? " (Levels: " : " (Level: "); //$NON-NLS-1$ //$NON-NLS-2$
+		sb.append(adminLevelSet.toString(",")); //$NON-NLS-1$
+		sb.append(") "); //$NON-NLS-1$
+		sb.append(diseaseModel.getDiseaseName());
+		sb.append(", "); //$NON-NLS-1$
+		sb.append(infector.getInfectiousCount());
+		sb.append(" infections in "); //$NON-NLS-1$
+		sb.append(infectedRegionName);
+
+		return sb.toString();
+	} // getTitleDescriptor
+
+	private Sequencer createSequencer() {
+		final Sequencer retValue = SequencerFactory.eINSTANCE
+				.createSequentialSequencer();
+
+		final STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+		startTime.setTime(Date.valueOf("2000-01-01")); //$NON-NLS-1$
+		retValue.setStartTime(startTime);
+
+		retValue.setCycle((int) STEMTime.Units.DAY.getMilliseconds());
+		return retValue;
+	} // createSequencer
+
+	private SIInfector createInfector(Model diseaseModelModel) {
+		SIInfector retValue = null;
+		// We need to descend into the model and find one location that can be
+		// place where the infection starts.
+
+		for (Model model : diseaseModelModel.getModels()) {
+			if (model.eIsProxy()) {
+				final Model populationModel = (Model) Utility
+						.getIdentifiable(URI
+								.createURI(IdentifiableSpecification
+										.convertToProjectURI(((InternalEObject) model)
+												.eProxyURI().toString())));
+				// The population model?
+				if (populationModel.getURI().toString().contains("population")) { //$NON-NLS-1$
+					// Yes
+					final Graph populationGraph = populationModel.getGraphs()
+							.get(0);
+
+					final Graph poulationData = (Graph) Utility
+							.getIdentifiable(URI
+									.createURI(IdentifiableSpecification
+											.convertToProjectURI(((InternalEObject) populationGraph)
+													.eProxyURI().toString())));
+
+					final EMap<URI, NodeLabel> data = poulationData
+							.getNodeLabels();
+					final NodeLabel nodeLabel = (NodeLabel) data.values()
+							.toArray()[0];
+					final URI targetURI = nodeLabel
+							.getURIOfIdentifiableToBeLabeled();
+
+					final String targetISOKeyString = targetURI.lastSegment();
+
+					// infectedRegionName = GeographicNames
+					// .getName(targetISOKeyString);
+					infectedRegionName = targetISOKeyString;
+
+					retValue = StandardFactory.eINSTANCE.createSIInfector();
+					retValue.setTargetURI(targetURI);
+					retValue.setDiseaseName(diseaseModel.getDiseaseName());
+					retValue.setPopulationIdentifier(diseaseModel
+							.getPopulationIdentifier());
+					retValue.setInfectiousCount(INFECTIOUS_COUNT);
+					retValue.getDublinCore().setTitle(
+							"Infect " + INFECTIOUS_COUNT + " " //$NON-NLS-1$ //$NON-NLS-2$
+									+ diseaseModel.getPopulationIdentifier()
+									+ " in " + infectedRegionName); //$NON-NLS-1$
+					break;
+				}
+			}
+		} // for each nodeDecorator
+
+		return retValue;
+	} // createInfector
+
+	/**
+	 * @see org.eclipse.stem.internal.data.specifications.IdentifiableSpecification#serialize(java.lang.String)
+	 */
+	@Override
+	public void serialize(String directory) throws IOException {
+		final List<Identifiable> set = new ArrayList<Identifiable>();
+		set.add(getIdentifiable());
+		set.add(sequencer);
+		if (infector != null) {
+			set.add(infector);
+		}
+
+		Utility.serializeIdentifiables(set, converter.normalize(URI
+				.createFileURI(directory + File.separator
+						+ getRelativeSerializationPathAndFileName())));
+	} // serialize
+
+	public int compareTo(DiseaseModelScenarioSpecification o) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return ScenarioPackage.eNAME;
+	}
+
+} // DiseaseModelScenarioSpecification
\ No newline at end of file
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/diseasemodels/scenarios/DiseaseModelScenarioGenerator.java b/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/diseasemodels/scenarios/DiseaseModelScenarioGenerator.java
new file mode 100644
index 0000000..96f2e32
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/src/org/eclipse/stem/internal/diseasemodels/scenarios/DiseaseModelScenarioGenerator.java
@@ -0,0 +1,264 @@
+// DiseaseScenarioGenerator.java
+package org.eclipse.stem.internal.diseasemodels.scenarios;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.data.geography.ISOKey;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.internal.data.ModelGenerator;
+import org.eclipse.stem.internal.data.PluginFileGenerator;
+import org.eclipse.stem.internal.data.generatedplugin.DublinCore;
+import org.eclipse.stem.internal.data.generatedplugin.Extension;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+import org.eclipse.stem.internal.data.generatedplugin.Plugin;
+import org.eclipse.stem.internal.data.generatedplugin.StemCategory;
+import org.eclipse.stem.internal.data.geography.GeographyPluginFileGenerator;
+import org.eclipse.stem.internal.data.geography.models.GeographyModelGenerator;
+import org.eclipse.stem.internal.data.geography.specifications.AdminLevelSet;
+import org.eclipse.stem.internal.data.geography.specifications.CountryGraphPropertyFileSpecification;
+import org.eclipse.stem.internal.data.specifications.DiseaseModelScenarioSpecification;
+import org.eclipse.stem.internal.data.specifications.IdentifiableSpecification;
+
+/**
+ * This class processes the generated disease model model files to create
+ * Disease model scenarios.
+ */
+public class DiseaseModelScenarioGenerator extends GeographyModelGenerator {
+
+	@SuppressWarnings("unused")
+	private final ModelPackage modelPackage = ModelPackage.eINSTANCE;
+	@SuppressWarnings("unused")
+	private final StandardPackage standardPackage = StandardPackage.eINSTANCE;
+
+	/**
+	 * The id of the Geography category
+	 */
+	public static final String ID_SCENARIO_GEOGRAPHY_CATEGORY = PluginFileGenerator.ID_SCENARIO_CATEGORY
+			+ ".geography"; //$NON-NLS-1$
+
+	/**
+	 * The id of the Political category
+	 */
+	public static final String ID_SCENARIO_GEOGRAPHY_POLITICAL_CATEGORY = ID_SCENARIO_GEOGRAPHY_CATEGORY
+			+ ".political"; //$NON-NLS-1$
+
+	/**
+	 * The id of the Countries category
+	 */
+	public static final String ID_SCENARIO_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY = ID_SCENARIO_GEOGRAPHY_POLITICAL_CATEGORY
+			+ ".countries"; //$NON-NLS-1$
+
+	
+	static {
+		// This sets up the mapping between the "platform" URI's and the
+		// projects in the file system.
+
+		// CWD is the current working directory
+		final String CWD = System.getProperty("user.dir"); //$NON-NLS-1$
+		// WORKSPACE is the directory of the parent workspace
+		final String WORKSPACE = CWD.substring(0, CWD
+				.lastIndexOf(File.separator));
+
+		// The path to the diseases project
+		final String DISEASES_MODELS_MODELS_PROJECT_ROOT = WORKSPACE
+				+ File.separator
+				+ org.eclipse.stem.data.diseasemodels.models.Activator.PLUGIN_ID
+				+ File.separator;
+
+		// The path to the diseases project
+		final String DISEASES_PROJECT_ROOT = WORKSPACE + File.separator
+				+ org.eclipse.stem.diseases.Activator.PLUGIN_ID
+				+ File.separator;
+
+		final Map<String, URI> platformResourceMap = EcorePlugin
+				.getPlatformResourceMap();
+
+		// Register the mapping between the project id and the absolute path to
+		// the project in the file system. This will be found later when
+		// deserializing when the platform URI is mapped.
+
+		platformResourceMap
+				.put(
+						org.eclipse.stem.data.diseasemodels.models.Activator.PLUGIN_ID,
+						URI.createFileURI(DISEASES_MODELS_MODELS_PROJECT_ROOT));
+
+		platformResourceMap.put(
+				org.eclipse.stem.diseases.Activator.PLUGIN_ID, URI
+						.createFileURI(DISEASES_PROJECT_ROOT));
+	} // static
+
+	/**
+	 * @param args
+	 *            the URI of the generated geography plugin.xml file
+	 */
+	public static void main(final String[] args) {
+		// Is the plugin file specified?
+		if (args.length == 0) {
+			// Yes
+			System.err.println("Missing specification of the plugin file"); //$NON-NLS-1$
+		} // if
+		else {
+
+			final String GENERATED_FILES_PATH = args[0];
+			final String diseaseModelModelProjecName = args[1];
+
+			final String GENERATED_SCENARIOS_PATH = GENERATED_FILES_PATH
+					+ File.separator + "resources" + File.separator + "data"; //$NON-NLS-1$ //$NON-NLS-2$
+
+			final File diseaseModelModelPluginFile = new File(
+					".."	+ File.separator + diseaseModelModelProjecName + File.separator + PluginFileGenerator.PLUGIN_XML_FILE_NAME); //$NON-NLS-1$
+			final URI diseaseModelModelPluginFileURI = URI
+					.createFileURI(diseaseModelModelPluginFile
+							.getAbsolutePath());
+
+			DiseaseModelScenarioGenerator dmsg = new DiseaseModelScenarioGenerator();
+
+			final Map<ISOKey, List<DiseaseModelScenarioSpecification>> scenarioSpecifications = dmsg
+					.processFiles2(diseaseModelModelPluginFileURI);
+
+			for (final ISOKey isoKey : sortISOKeys(scenarioSpecifications)) {
+				// Now serialize the Identifiables
+				for (final IdentifiableSpecification gms : scenarioSpecifications
+						.get(isoKey)) {
+					try {
+						gms.serialize(GENERATED_SCENARIOS_PATH);
+					} catch (final IOException e) {
+						e.printStackTrace();
+					}
+				} // for gms
+			} // for isoKey
+
+			// Create the instance of plugin.xml that we'll serialize later
+			final Plugin pluginxml = GeneratedpluginFactory.eINSTANCE
+					.createPlugin();
+			final Extension extension = GeneratedpluginFactory.eINSTANCE
+					.createExtension();
+
+			// Add the "scenario" extension point
+			extension.setPoint(Constants.ID_SCENARIO_EXTENSION_POINT);
+
+			// Add the categories to the extension
+			addCatagoriesToExtension(extension);
+			
+			pluginxml.getExtensionelement().add(extension);
+
+			// Now add the dublin core entries to the plugin.xml file for
+			// each of the models
+			for (final ISOKey isoKey : sortISOKeys(scenarioSpecifications)) {
+				final StemCategory countryCategory = GeneratedpluginFactory.eINSTANCE
+						.createStemCategory();
+				final String COUNTRY_CATAGORY_STRING = ID_SCENARIO_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY
+						+ "." + isoKey.toString().toLowerCase(); //$NON-NLS-1$
+				countryCategory.setId(COUNTRY_CATAGORY_STRING);
+				countryCategory.setName(isoKey.toString());
+				countryCategory
+						.setParentId(ID_SCENARIO_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY);
+				extension.getCategories().add(countryCategory);
+				for (final IdentifiableSpecification gms : scenarioSpecifications
+						.get(isoKey)) {
+					final DublinCore dc = GeneratedpluginFactory.eINSTANCE
+							.createDublinCore();
+					dc.setCategoryId(COUNTRY_CATAGORY_STRING);
+					extension.getDublinCores().add(
+							populateGeneratedDC(dc, gms.getDublinCore()));
+				} // for gms
+			} // for isoKey
+
+			final URI TEMP_PLUGINXML_URI = URI
+					.createFileURI(GENERATED_FILES_PATH + File.separator
+							+ PluginFileGenerator.PLUGIN_XML_FILE_NAME);
+
+			// Serialize the plugin.xml file.
+			ModelGenerator.writePluginxml(pluginxml, TEMP_PLUGINXML_URI);
+
+			// Create the plugin.properties file
+			createPluginPropertties(GENERATED_FILES_PATH);
+		} // else
+	} // main
+
+	private Map<ISOKey, List<DiseaseModelScenarioSpecification>> processFiles2(
+			URI diseaseModelModelPluginFileURI) {
+
+		final Map<ISOKey, List<DiseaseModelScenarioSpecification>> retValue = new HashMap<ISOKey, List<DiseaseModelScenarioSpecification>>();
+
+		// Get the contents of the disease model model plug.xml file
+		final Plugin diseaseModelPluginXML = getPluginxml(diseaseModelModelPluginFileURI);
+
+		for (Extension extension : diseaseModelPluginXML.getExtensionelement()) {
+			for (DublinCore dc : extension.getDublinCores()) {
+				final Map<ISOKey, AdminLevelSet> isoKeyAdminLevelSetMap = CountryGraphPropertyFileSpecification
+						.parseDublinCoreCoverageString(dc.getCoverage());
+				final AdminLevelSet adminLevelSet = (AdminLevelSet) isoKeyAdminLevelSetMap
+						.values().toArray()[0];
+				final ISOKey isoKey = (ISOKey) isoKeyAdminLevelSetMap.keySet()
+						.toArray()[0];
+
+				List<DiseaseModelScenarioSpecification> temp = retValue
+						.get(isoKey);
+				if (temp == null) {
+					temp = new ArrayList<DiseaseModelScenarioSpecification>();
+					retValue.put(isoKey, temp);
+				}
+				temp.add(new DiseaseModelScenarioSpecification(isoKey,
+						adminLevelSet, dc));
+			} // for dc
+		} // for Disease Models
+
+		return retValue;
+	} // processFiles2
+	
+	private static void addCatagoriesToExtension(final Extension extension) {
+
+		final StemCategory scenarioCatagory = GeneratedpluginFactory.eINSTANCE
+				.createStemCategory();
+		scenarioCatagory.setId(PluginFileGenerator.ID_SCENARIO_CATEGORY);
+		scenarioCatagory.setName("%" + PluginFileGenerator.UI_STEM_CATEGORY_NAME); //$NON-NLS-1$
+		scenarioCatagory.setParentId("/"); //$NON-NLS-1$
+		extension.getCategories().add(scenarioCatagory);
+
+		final StemCategory geographyCatagory = GeneratedpluginFactory.eINSTANCE
+				.createStemCategory();
+		geographyCatagory.setId(ID_SCENARIO_GEOGRAPHY_CATEGORY);
+		geographyCatagory
+				.setName("%" + GeographyPluginFileGenerator.UI_GEOGRAPHY_CATEGORY_NAME); //$NON-NLS-1$
+		geographyCatagory.setParentId(PluginFileGenerator.ID_SCENARIO_CATEGORY);
+		extension.getCategories().add(geographyCatagory);
+
+		final StemCategory politicalCatagory = GeneratedpluginFactory.eINSTANCE
+				.createStemCategory();
+		politicalCatagory.setId(ID_SCENARIO_GEOGRAPHY_POLITICAL_CATEGORY);
+		politicalCatagory
+				.setName("%" + GeographyPluginFileGenerator.UI_POLITICAL_CATEGORY_NAME); //$NON-NLS-1$
+		politicalCatagory.setParentId(ID_SCENARIO_GEOGRAPHY_CATEGORY);
+		extension.getCategories().add(politicalCatagory);
+
+		final StemCategory countriesCatagory = GeneratedpluginFactory.eINSTANCE
+				.createStemCategory();
+		countriesCatagory
+				.setId(ID_SCENARIO_GEOGRAPHY_POLITICAL_COUNTRIES_CATEGORY);
+		countriesCatagory
+				.setName("%" + GeographyPluginFileGenerator.UI_COUNTRIES_CATEGORY_NAME); //$NON-NLS-1$
+		countriesCatagory.setParentId(ID_SCENARIO_GEOGRAPHY_POLITICAL_CATEGORY);
+		extension.getCategories().add(countriesCatagory);
+	} // addCatagoriesToExtension
+} // DiseaseModelScenarioGenerator
\ No newline at end of file
diff --git a/org.eclipse.stem.internal.diseasemodels.scenarios/update.xml b/org.eclipse.stem.internal.diseasemodels.scenarios/update.xml
new file mode 100644
index 0000000..b3cfa58
--- /dev/null
+++ b/org.eclipse.stem.internal.diseasemodels.scenarios/update.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+<!-- ====================================================================== 
+     ANT script to build org.eclispe.ohf.stem.geography project 
+     and the initial set of STEM scenarios.  
+     This must be run after installing the STEM workspace and after changes
+     to code generated by EMF models.
+                                                                    
+     ====================================================================== -->
+<project name="STEM Internal Disease Model Scenarios" default="update_all">
+	<description>
+     Use the properties files to populate the org.eclipse.stem.data.diseasemodels.models plugin
+    </description>
+
+	<!-- P r o j e c t  S p e c i f i c a t i o n s -->
+
+	<!-- The name of the project -->
+	<property name="project.name" value="stem" />
+
+	
+	<!-- Are we running headless? -->
+	<condition property="runningHeadless" >
+		<isset property="buildDirectory" />
+	</condition>
+	
+	<!-- The buildDirectory property is set in a headless build -->
+	<condition property="pluginRootDirectory" value="${buildDirectory}/plugins" else="..">
+		<isset property="runningHeadless" />
+	</condition>
+
+	<!-- The baseLocation property is the location of the eclipse home installation -->
+	<!-- It is used to find eclipse plugins                                         -->
+	<!-- It is set in a headless build, but not one started manually from Eclipse   -->
+	<condition property="baseLocation" value="${eclipse.pdebuild.home}../..">
+		<not>
+			<isset property="runningHeadless" />
+		</not>
+	</condition>
+
+	<!-- This is the location of the class files of the built plug-ins     -->
+	<!-- If this is a manual build started from Eclipse then the directory -->
+	<!-- is "bin", if its a headless build then the directory is "@dot"    -->
+	<!-- The property baseLocation is set in a headless build              -->
+	<condition property="targetBin" value="@dot" else="bin">
+		<isset property="runningHeadless" />
+	</condition>
+	
+	
+	<!-- The prefix for fully qualified names -->
+	<property name="ID_ROOT" value="org.eclipse.stem" />
+
+	<!-- The name of the plugin that contains the plugin.xml file to scan -->
+	<property name="scan.plugin" value="${ID_ROOT}.data.diseasemodels.models" />
+	
+	<!-- The name of the source plugin (i.e., the one that contains this file -->
+	<property name="source.plugin" value="${ID_ROOT}.internal.diseasemodels.scenarios" />
+
+	<!-- The name of the plugin with the diseases -->
+	<property name="disease.plugin"  value="${ID_ROOT}.diseases" />
+	
+	<!-- The name of the target plugin -->
+	<property name="target.plugin" value="${ID_ROOT}.data.diseasemodels.scenarios" />
+
+	<!-- The path to the root directory of the source plugin -->
+	<property name="path.sourceplugin" location="${pluginRootDirectory}/${source.plugin}" />
+
+	<!-- The path to the root directory of the plugin that will be augmented with generated content -->
+	<property name="path.targetplugin" location="${pluginRootDirectory}/${target.plugin}" />
+
+	<!-- The path to the root directory of the resource files -->
+	<property name="path.resource.files" value="${path.sourceplugin}/resources/data/country" />
+
+	<!-- The path to the root directory of the plugin that will be augmented with generated content-->
+	<property name="path.generated.files" value="${path.sourceplugin}/temp" />
+
+	<!-- The path to the root directory of geography source code -->
+	<property name="path.geography.src" value="${path.targetplugin}/src/org/eclipse/stem/data/geography/population/human/models" />
+
+	<!-- The name of the plugin.xml file that will be augmented with generated content-->
+	<property name="file.target.pluginxml" value="${path.targetplugin}/plugin.xml" />
+
+	<!-- The name of the plugin.properties file that will be augmented with generated content-->
+	<property name="file.target.pluginproperties" value="${path.targetplugin}/plugin.properties" />
+
+	<!-- The name of the plugin.xml file that that is the aggregation of the generated content-->
+	<property name="file.util.pluginxml" value="${path.generated.files}/plugin.xml" />
+
+	<!-- The name of the plugin.properties file that that is the aggregation of the generated content-->
+	<property name="file.util.pluginproperties" value="${path.generated.files}/plugin.properties" />
+
+    <!-- The name of the plugin.xml file that that is the aggregation of the generated content-->
+    <property name="file.target.pluginproperties" value="${path.generated.files}/plugin.properties" />
+
+	<!-- The class path to use -->
+	<path id="classpath.runtime"> 
+		<pathelement location="${path.sourceplugin}/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.core/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.definitions/${targetBin}" />
+	    <pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data.geography/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.internal.data.geography.models/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.data.geography/${targetBin}" />
+		<pathelement location="${pluginRootDirectory}/${ID_ROOT}.diseasemodels/${targetBin}" />
+		<fileset dir="${baseLocation}/plugins/">
+			<include name="*emf*.jar" />
+		</fileset>
+	</path>
+
+	<target name="update_all" depends="update" />
+
+	<!-- Update the geography plugin with the latest definitions -->
+	<target name="update" depends="update_disease_scenarios, update_diseasemodels_scenarios_plugin_xml, update_diseasemodels_scenarios_plugin_properties" />
+
+	<target name="update_diseasemodels_scenarios_plugin_xml" depends="create_candidates">
+		<copy tofile="${file.target.pluginxml}" file="${file.util.pluginxml}" overwrite="true" />
+	</target>
+
+	<target name="update_diseasemodels_scenarios_plugin_properties" depends="create_candidates">
+		<copy tofile="${file.target.pluginproperties}" file="${file.util.pluginproperties}" overwrite="true" />
+	</target>
+
+	<!-- Update the graph files in the geography plugin -->
+	<target name="update_disease_scenarios" depends="create_candidates">
+		<copy todir="${path.targetplugin}/resources/data/" overwrite="true">
+			<fileset dir="${path.generated.files}/resources/data">
+				<include name="**/*.scenario" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<!-- Create the model files for countries and the plugin.xml and plugin.properties fragments -->
+	<target name="create_candidates" depends="clean">
+		<!-- There is a problem here with specifying fork="true"  maxmemory="768m".  It causes an IOException on some machines -->
+		<java classname="${ID_ROOT}.internal.diseasemodels.scenarios.DiseaseModelScenarioGenerator" fork="true" maxmemory="1024m">
+			<classpath refid="classpath.runtime" />
+			<arg value="${path.generated.files}" />
+			<arg value="${scan.plugin}" />
+			<jvmarg value="-Xms1024m"/>
+			<jvmarg value="-Xmx1024m"/>
+		</java>
+	</target>
+
+	<!-- clean out the .../temp/data directories -->
+	<!-- clean out the target directories -->
+	<target name="clean" depends="create_generated_files_dir">
+		<delete includeEmptyDirs="true" quiet="true">
+			<fileset dir="${path.generated.files}/">
+				<include name="**/*" />
+			</fileset>
+			<fileset dir="${path.targetplugin}/resources/data/">
+				<include name="country/**/*" />
+			</fileset>
+		</delete>
+	</target>
+
+	<target name="create_generated_files_dir">
+		<mkdir dir="${path.generated.files}/resources/data"/>		
+	</target>
+</project>
diff --git a/org.eclipse.stem.jobs.nl1/.classpath b/org.eclipse.stem.jobs.nl1/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.jobs.nl1/.project b/org.eclipse.stem.jobs.nl1/.project
new file mode 100644
index 0000000..b6876c3
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.jobs.nl1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.jobs.nl1/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.jobs.nl1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6b3560d
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Jan 21 12:43:14 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.jobs.nl1/META-INF/MANIFEST.MF b/org.eclipse.stem.jobs.nl1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c0c5b13
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.jobs.nl1
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.stem.jobs
+Bundle-Localization: plugin
+Bundle-ClassPath: bin/,
+ .
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.jobs.nl1/build.properties b/org.eclipse.stem.jobs.nl1/build.properties
new file mode 100644
index 0000000..770206e
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               bin/,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html
diff --git a/org.eclipse.stem.jobs.nl1/epl-v10.html b/org.eclipse.stem.jobs.nl1/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs.nl1/notice.html b/org.eclipse.stem.jobs.nl1/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.jobs.nl1/plugin.properties b/org.eclipse.stem.jobs.nl1/plugin.properties
new file mode 100644
index 0000000..8916cd7
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/plugin.properties
@@ -0,0 +1,27 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Jobs Nl1 Fragment
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_en_US_CA.properties b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_en_US_CA.properties
new file mode 100644
index 0000000..cd4f899
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_en_US_CA.properties
@@ -0,0 +1,19 @@
+# messages_en_US_CA.properties
+# Californian
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
diff --git a/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_es.properties b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_es.properties
new file mode 100644
index 0000000..288f123
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_es.properties
@@ -0,0 +1,19 @@
+# messages_es.properties
+# Spanish
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
diff --git a/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_he.properties b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_he.properties
new file mode 100644
index 0000000..7fabcfc
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_he.properties
@@ -0,0 +1,19 @@
+# messages.properties
+# Hebrew
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
diff --git a/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_ta.properties b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_ta.properties
new file mode 100644
index 0000000..c4b7797
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_ta.properties
@@ -0,0 +1,19 @@
+# messages.properties
+# Tamil
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
diff --git a/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_zh.properties b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_zh.properties
new file mode 100644
index 0000000..9205c5b
--- /dev/null
+++ b/org.eclipse.stem.jobs.nl1/src/org/eclipse/stem/jobs/simulation/messages_zh.properties
@@ -0,0 +1,19 @@
+# messages.properties
+# Chinese
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
diff --git a/org.eclipse.stem.jobs/.classpath b/org.eclipse.stem.jobs/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.jobs/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.jobs/.project b/org.eclipse.stem.jobs/.project
new file mode 100644
index 0000000..c439d72
--- /dev/null
+++ b/org.eclipse.stem.jobs/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.jobs</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.jobs/.settings/org.eclipse.core.resources.prefs b/org.eclipse.stem.jobs/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..8b86879
--- /dev/null
+++ b/org.eclipse.stem.jobs/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 17 17:47:03 EST 2006
+eclipse.preferences.version=1
+encoding//src/org/eclipse/stem/jobs/simulation/messages.properties=8859_1
diff --git a/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..193a460
--- /dev/null
+++ b/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,70 @@
+#Tue Sep 01 16:57:07 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..fd578b3
--- /dev/null
+++ b/org.eclipse.stem.jobs/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Sep 12 22:14:50 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.jobs/META-INF/MANIFEST.MF b/org.eclipse.stem.jobs/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6d5b2ac
--- /dev/null
+++ b/org.eclipse.stem.jobs/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.jobs;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.jobs.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.core.resources
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.jobs,
+ org.eclipse.stem.jobs.adapters.executable,
+ org.eclipse.stem.jobs.adapters.executable.emf,
+ org.eclipse.stem.jobs.adapters.identifiable,
+ org.eclipse.stem.jobs.batch,
+ org.eclipse.stem.jobs.execution,
+ org.eclipse.stem.jobs.preferences,
+ org.eclipse.stem.jobs.simulation
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.jobs/build.properties b/org.eclipse.stem.jobs/build.properties
new file mode 100644
index 0000000..727ce10
--- /dev/null
+++ b/org.eclipse.stem.jobs/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               bin/,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html
diff --git a/org.eclipse.stem.jobs/epl-v10.html b/org.eclipse.stem.jobs/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.jobs/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/notice.html b/org.eclipse.stem.jobs/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.jobs/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.jobs/plugin.properties b/org.eclipse.stem.jobs/plugin.properties
new file mode 100644
index 0000000..25a4683
--- /dev/null
+++ b/org.eclipse.stem.jobs/plugin.properties
@@ -0,0 +1,15 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+pluginName= STEM Job and Simulation Manager
+providerName = Eclipse.org
+
+_UI_SimMgmtPPage = Simulation Management
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/plugin.xml b/org.eclipse.stem.jobs/plugin.xml
new file mode 100644
index 0000000..8207313
--- /dev/null
+++ b/org.eclipse.stem.jobs/plugin.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            class="org.eclipse.stem.jobs.preferences.SimulationManagementPreferencePage"
+            id="org.eclipse.stem.jobs.preferences.SimulationManagementPreferencePage"
+            name="%_UI_SimMgmtPPage"/>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer class="org.eclipse.stem.jobs.preferences.PreferenceInitializer"/>
+      <initializer class="org.eclipse.stem.jobs.preferences.PreferenceInitializer"/>
+   </extension>
+ <extension
+        point="org.eclipse.core.runtime.adapters">
+         <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.FileExecutableAdapterFactory" 
+            adaptableType="org.eclipse.core.resources.IFile">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.ConfigurationElementExecutableAdapterFactory" 
+            adaptableType="org.eclipse.core.runtime.IConfigurationElement">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.IdentifiableExecutableAdapterFactory" 
+            adaptableType="org.eclipse.stem.core.Experiment">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory
+                adaptableType="org.eclipse.stem.core.experiment.impl.ExperimentImpl"
+                class="org.eclipse.stem.jobs.adapters.executable.IdentifiableExecutableAdapterFactory">
+             <adapter
+                   type="org.eclipse.stem.jobs.execution.IExecutable">
+             </adapter>
+          </factory>
+          <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.IdentifiableExecutableAdapterFactory" 
+            adaptableType="org.eclipse.stem.core.Scenario">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory
+                adaptableType="org.eclipse.stem.core.scenario.impl.ScenarioImpl"
+                class="org.eclipse.stem.jobs.adapters.executable.IdentifiableExecutableAdapterFactory">
+             <adapter
+                   type="org.eclipse.stem.jobs.execution.IExecutable">
+             </adapter>
+          </factory>
+          <factory
+                adaptableType="org.eclipse.stem.jobs.simulation.ISimulation"
+                class="org.eclipse.stem.jobs.adapters.executable.SimulationExecutableAdapterFactory">
+             <adapter
+                   type="org.eclipse.stem.jobs.execution.IExecutable">
+             </adapter>
+          </factory>
+           <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.SimulationExecutableAdapterFactory" 
+            adaptableType="org.eclipse.stem.jobs.simulation.Simulation">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory 
+            class="org.eclipse.stem.jobs.adapters.executable.BatchExecutionAdapterFactory" 
+            adaptableType="org.eclipse.stem.jobs.batch.Batch">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+          <factory
+                adaptableType="org.eclipse.stem.jobs.batch.IBatch"
+                class="org.eclipse.stem.jobs.adapters.executable.BatchExecutionAdapterFactory">
+             <adapter
+                   type="org.eclipse.stem.jobs.execution.IExecutable">
+             </adapter>
+          </factory>
+  </extension>
+ <extension
+       point="org.eclipse.core.runtime.adapters">
+    <factory
+          adaptableType="org.eclipse.core.runtime.IConfigurationElement"
+          class="org.eclipse.stem.jobs.adapters.identifiable.ConfigurationElementIdentifiableAdapterFactory">
+       <adapter
+             type="org.eclipse.stem.core.common.Identifiable">
+       </adapter>
+    </factory>
+    <factory
+          adaptableType="org.eclipse.core.resources.IFile"
+          class="org.eclipse.stem.jobs.adapters.identifiable.FileIdentifiableAdapterFactory">
+       <adapter
+             type="org.eclipse.stem.core.common.Identifiable">
+       </adapter>
+    </factory>
+    <factory
+          adaptableType="org.eclipse.emf.common.util.URI"
+          class="org.eclipse.stem.jobs.adapters.identifiable.URIIdentifiableAdapterFactory">
+       <adapter
+             type="org.eclipse.stem.core.common.Identifiable">
+       </adapter>
+    </factory>
+ </extension>
+</plugin>
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/Activator.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/Activator.java
new file mode 100644
index 0000000..3bc7d95
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/Activator.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.jobs;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.jobs.adapters.executable.emf.ExperimentExecutableAdapterFactory;
+import org.eclipse.stem.jobs.adapters.executable.emf.ScenarioExecutableAdapterFactory;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.jobs"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new ScenarioExecutableAdapterFactory();
+		new ExperimentExecutableAdapterFactory();
+	} // start
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/BatchExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/BatchExecutableAdapterFactory.java
new file mode 100644
index 0000000..f864047
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/BatchExecutableAdapterFactory.java
@@ -0,0 +1,40 @@
+// BatchExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.batch.IBatch;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts {@link IBatch}s
+ * to {@link IExecutable}s.
+ */
+public class BatchExecutableAdapterFactory extends ExecutableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		IBatch retValue = null;
+		// A Batch?
+		if (adaptableObject instanceof IBatch
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (IBatch) adaptableObject;
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // BatchExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ConfigurationElementExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ConfigurationElementExecutableAdapterFactory.java
new file mode 100644
index 0000000..c1a5a50
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ConfigurationElementExecutableAdapterFactory.java
@@ -0,0 +1,45 @@
+// ConfigurationElementExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts
+ * {@link IConfigurationElement}s to {@link IExecutable}s.
+ */
+public class ConfigurationElementExecutableAdapterFactory extends
+		ExecutableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		IExecutable retValue = null;
+		// A IConfigurationElement?
+		if (adaptableObject instanceof IConfigurationElement
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (IExecutable) Platform.getAdapterManager().getAdapter(
+					Platform.getAdapterManager().getAdapter(adaptableObject,
+							Identifiable.class), IExecutable.class);
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // ConfigurationElementExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ExecutableAdapterFactory.java
new file mode 100644
index 0000000..a5bf47d
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/ExecutableAdapterFactory.java
@@ -0,0 +1,31 @@
+// ExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link IAdapterFactory} that is extended by classes that
+ * adapt {@link Object}s to {@link IExecutable}s.
+ */
+abstract public class ExecutableAdapterFactory implements IAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
+	 */
+	public Class[] getAdapterList() {
+		return new Class[] { IExecutable.class };
+	}
+
+} // ExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/FileExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/FileExecutableAdapterFactory.java
new file mode 100644
index 0000000..e0fdfb7
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/FileExecutableAdapterFactory.java
@@ -0,0 +1,43 @@
+// FileExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts {@link IFile}s
+ * to {@link IExecutable}s.
+ */
+public class FileExecutableAdapterFactory extends ExecutableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		IExecutable retValue = null;
+		// A File?
+		if (adaptableObject instanceof IFile
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (IExecutable) Platform.getAdapterManager().getAdapter(
+					Platform.getAdapterManager().getAdapter(adaptableObject,
+							Identifiable.class), IExecutable.class);
+		} // if
+		return retValue;
+	} // getAdapter
+} // FileExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/IdentifiableExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/IdentifiableExecutableAdapterFactory.java
new file mode 100644
index 0000000..9ec8f63
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/IdentifiableExecutableAdapterFactory.java
@@ -0,0 +1,52 @@
+// IdentifiableExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts
+ * {@link Identifiable}s to {@link IExecutable}s.
+ * <p>
+ * This class serves as a "bridge" between the Eclipse {@link IAdapterManager}
+ * and
+ * {@link org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapterFactory}
+ * which is the EMF {@link Adapter} implementation that adapts
+ * {@link Identifiable}s to {@link IExecutable}s.
+ * 
+ * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter
+ * @see org.eclipse.stem.jobs.adapters.executable.emf.ScenarioExecutableAdapterFactory
+ * @see org.eclipse.stem.jobs.adapters.executable.emf.ExperimentExecutableAdapterFactory
+ */
+public class IdentifiableExecutableAdapterFactory extends
+		ExecutableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		IExecutable retValue = null;
+		// It it what we're looking for?
+		if (adaptableObject instanceof Identifiable
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (IExecutable) org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapterFactory.INSTANCE
+					.adapt(adaptableObject, IExecutable.class);
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // IdentifiableExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/SimulationExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/SimulationExecutableAdapterFactory.java
new file mode 100644
index 0000000..2f64616
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/SimulationExecutableAdapterFactory.java
@@ -0,0 +1,41 @@
+// SimulationExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts
+ * {@link ISimulation}s to {@link IExecutable}s.
+ */
+public class SimulationExecutableAdapterFactory extends
+		ExecutableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		ISimulation retValue = null;
+		// A Simulation?
+		if (adaptableObject instanceof ISimulation
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (ISimulation) adaptableObject;
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // SimulationExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapter.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapter.java
new file mode 100644
index 0000000..49e42c6
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapter.java
@@ -0,0 +1,135 @@
+// ExecutableAdapter.java
+package org.eclipse.stem.jobs.adapters.executable.emf;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Date;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is extended by classes that adapt {@link Object}s to
+ * {@link IExecutable}s.
+ */
+abstract public class ExecutableAdapter extends AdapterImpl implements
+		IExecutable {
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getSequenceNumber()
+	 */
+	public int getSequenceNumber() {
+		return ((IExecutable) getTarget()).getSequenceNumber();
+	} // getSequenceNumber
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getName()
+	 */
+	public String getName() {
+		return ((IExecutable) getTarget()).getName();
+	} // getName
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getNameWithSequenceNumber()
+	 */
+	public String getNameWithSequenceNumber() {
+		return ((IExecutable) getTarget()).getNameWithSequenceNumber();
+	} // getNameWithSequenceNumber
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getCreationTime()
+	 */
+	public Date getCreationTime() {
+		return ((IExecutable) getTarget()).getCreationTime();
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getUniqueIDString()
+	 */
+	public String getUniqueIDString() {
+		return ((IExecutable) getTarget()).getUniqueIDString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#run()
+	 */
+	public void run() {
+		logUnimplementedError("run");
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#pause()
+	 */
+	public void pause() {
+		logUnimplementedError("pause");
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#step()
+	 */
+	public void step() {
+		logUnimplementedError("step");
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#reset()
+	 */
+	public void reset() {
+		logUnimplementedError("reset");
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#stop()
+	 */
+	public void stop() {
+		logUnimplementedError("stop");
+	}
+
+	private void logUnimplementedError(final String action) {
+		Activator
+				.logError("Internal error: " + action + " unimplemented", null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#isRunning()
+	 */
+	public boolean isRunning() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#isStoppable()
+	 */
+	public boolean isStoppable() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(final Object type) {
+		return type == IExecutable.class;
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	@Override
+	public void notifyChanged(
+			@SuppressWarnings("unused") final Notification notification) {
+		// Nothing
+	}
+
+} // ExecutableAdapter
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapterFactory.java
new file mode 100644
index 0000000..00f9b40
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExecutableAdapterFactory.java
@@ -0,0 +1,70 @@
+// ExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable.emf;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link  org.eclipse.emf.ecore.EObject}s to {@link IExecutable}s.
+ */
+public interface ExecutableAdapterFactory {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link ExecutableAdapter} instances.
+	 * <p>
+	 * 
+	 * Basically, if you create an EMF model and define a
+	 * {@link ExecutableAdapterFactory} for it so that the classes in that model
+	 * can be adapted, you need to hook that factory into this one so that later
+	 * when an attempt is made to adapt a class from that model is made the
+	 * associated factory will be found. You can do that by adding the line:
+	 * <code>
+	 * ExecutableAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the method
+	 * {@link Activator#start(org.osgi.framework.BundleContext)}of the plug-in
+	 * that defines the factory.
+	 */
+	ExecutableAdapterFactoryImpl INSTANCE = new ExecutableAdapterFactoryImpl();
+
+	/**
+	 * This class is extended by classes that wrap {@link EObject}s and
+	 * {@link Object}s to be {@link IExecutable}s
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements {@link ExecutableAdapterFactory}
+	 * needs to add itself to this instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 */
+	class ExecutableAdapterFactoryImpl extends ComposedAdapterFactory implements
+			ExecutableAdapterFactory {
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(final Object type) {
+			return type == IExecutable.class;
+		} // isFactoryForType
+
+	} // ExecutableAdapterFactoryImpl
+} // ExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExperimentExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExperimentExecutableAdapterFactory.java
new file mode 100644
index 0000000..3996f58
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ExperimentExecutableAdapterFactory.java
@@ -0,0 +1,77 @@
+// ExperimentExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable.emf;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.util.ExperimentAdapterFactory;
+import org.eclipse.stem.jobs.batch.BatchManager;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that creates adapters that
+ * adapt {@link Experiment}s to {@link IExecutable}s.
+ */
+public class ExperimentExecutableAdapterFactory extends
+		ExperimentAdapterFactory implements ExecutableAdapterFactory {
+
+	/**
+	 * Default Constructor
+	 */
+	public ExperimentExecutableAdapterFactory() {
+		super();
+		ExecutableAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.experiment.util.ExperimentAdapterFactory#createExperimentAdapter()
+	 */
+	@Override
+	public Adapter createExperimentAdapter() {
+		return new ExperimentExecutableAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == IExecutable.class || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This class adapts an {@link Experiment} to an {@link IExecutable}.
+	 */
+	protected static class ExperimentExecutableAdapter extends
+			ExecutableAdapter implements Adapter {
+
+		/**
+		 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#run()
+		 */
+		@Override
+		public void run() {
+			BatchManager.INSTANCE.createAndRunBatch((Experiment) getTarget());
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#step()
+		 */
+		@Override
+		public void step() {
+			super.step();
+			// TODO implement ExperimentExecutableAdapter.step()
+			// BatchManager.INSTANCE.createAndStepBatch((Experiment)
+			// getTarget());
+		}
+	} // ExperimentExecutableAdapter
+} // ExperimentExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ScenarioExecutableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ScenarioExecutableAdapterFactory.java
new file mode 100644
index 0000000..1b5b85b
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/executable/emf/ScenarioExecutableAdapterFactory.java
@@ -0,0 +1,76 @@
+// ScenarioExecutableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.executable.emf;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory;
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that creates adapters that
+ * adapt {@link Scenario}s to {@link IExecutable}s.
+ */
+public class ScenarioExecutableAdapterFactory extends ScenarioAdapterFactory
+		implements ExecutableAdapterFactory {
+
+	/**
+	 * Default Constructor
+	 */
+	public ScenarioExecutableAdapterFactory() {
+		super();
+		ExecutableAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory#createScenarioAdapter()
+	 */
+	@Override
+	public Adapter createScenarioAdapter() {
+		return new ScenarioExecutableAdapter();
+	} // createScenarioAdapter
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == IExecutable.class || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This class adapts a {@link Scenario} to an {@link IExecutable}.
+	 */
+	protected static class ScenarioExecutableAdapter extends ExecutableAdapter {
+
+		/**
+		 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#run()
+		 */
+		@Override
+		public void run() {
+			SimulationManager.getManager().createAndRunSimulation(
+					(Scenario) getTarget());
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.adapters.executable.emf.ExecutableAdapter#step()
+		 */
+		@Override
+		public void step() {
+			SimulationManager.getManager().createAndStepSimulation(
+					(Scenario) getTarget());
+		}
+	} // ScenarioExecutableAdapter
+
+} // ScenarioExecutableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/ConfigurationElementIdentifiableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/ConfigurationElementIdentifiableAdapterFactory.java
new file mode 100644
index 0000000..891f82d
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/ConfigurationElementIdentifiableAdapterFactory.java
@@ -0,0 +1,46 @@
+// ConfigurationElementIdentifiableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * This class is an {@link IAdapterFactory} that adapts
+ * {@link IConfigurationElement}s to {@link Identifiable}s.
+ */
+public class ConfigurationElementIdentifiableAdapterFactory extends
+		IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		Identifiable retValue = null;
+		if (adaptableObject instanceof IConfigurationElement
+				&& adapterType.equals(Identifiable.class)) {
+			// Yes
+			retValue = (Identifiable) Platform.getAdapterManager().getAdapter(
+					URI.createURI(((IConfigurationElement) adaptableObject)
+							.getAttribute(DublinCore.IDENTIFIER)),
+					Identifiable.class);
+		} // if
+
+		return retValue;
+	} // getAdapter
+} // ConfigurationElementIdentifiableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/FileIdentifiableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/FileIdentifiableAdapterFactory.java
new file mode 100644
index 0000000..8c80ba5
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/FileIdentifiableAdapterFactory.java
@@ -0,0 +1,43 @@
+// FileIdentifiableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * This class is an {@link IAdapterFactory} that adapts {@link IFile}s to
+ * {@link Identifiable}s.
+ */
+public class FileIdentifiableAdapterFactory extends IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		Identifiable retValue = null;
+		if (adaptableObject instanceof IFile
+				&& adapterType.equals(Identifiable.class)) {
+			// Yes
+			retValue = (Identifiable) Platform.getAdapterManager().getAdapter(
+					URI.createFileURI(((IFile) adaptableObject).getLocation()
+							.toString()), Identifiable.class);
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // FileIdentifiableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/IdentifiableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/IdentifiableAdapterFactory.java
new file mode 100644
index 0000000..469a846
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/IdentifiableAdapterFactory.java
@@ -0,0 +1,31 @@
+// IdentifiableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * This class is an {@link IAdapterFactory} that adapts {@link Object}s to
+ * {@link Identifiable}s.
+ */
+abstract public class IdentifiableAdapterFactory implements IAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
+	 */
+	public Class[] getAdapterList() {
+		return new Class[] { Identifiable.class };
+	}
+
+} // IdentifiableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/URIIdentifiableAdapterFactory.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/URIIdentifiableAdapterFactory.java
new file mode 100644
index 0000000..90ba0d6
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/adapters/identifiable/URIIdentifiableAdapterFactory.java
@@ -0,0 +1,54 @@
+// URIIdentifiableAdapterFactory.java
+package org.eclipse.stem.jobs.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.Activator;
+
+/**
+ * This class is an {@link IAdapterFactory} that adapts
+ * {@link org.eclipse.emf.common.util.URI}s to {@link Identifiable}s.
+ */
+public class URIIdentifiableAdapterFactory extends IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		Identifiable retValue = null;
+		if (adaptableObject instanceof URI
+				&& adapterType.equals(Identifiable.class)) {
+			// Yes
+			final URI identifableURI = (URI) adaptableObject;
+			try {
+				final ResourceSet resourceSet = new ResourceSetImpl();
+				final Resource resource = resourceSet.getResource(
+						identifableURI, true);
+				retValue = (Identifiable) resource.getContents().get(0);
+			} catch (final Exception e) {
+				Activator.logError("The resource \""
+						+ identifableURI.toString()
+						+ "\" was not found or was of the wrong format", e);
+				retValue = null;
+			}
+		} // if URI
+		return retValue;
+	}
+
+} // URIIdentifiableAdapterFactory
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Batch.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Batch.java
new file mode 100644
index 0000000..3f5656d
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Batch.java
@@ -0,0 +1,546 @@
+// Batch.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.execution.Executable;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * This class is the runtime handle for the execution of an {@link Experiment}.
+ * Each {@link Experiment} has a {@link Scenario} and a collection of
+ * {@link Modifier}s. The {@link Scenario} forms the basis for the creation of a
+ * set of derived {@link Scenario}s that are created by the application of the
+ * {@link Experiment}'s {@link Modifier}s. Each of the derived {@link Scenario}s
+ * is executed as a {@link Simulation}. A {@link Batch} maintains the link
+ * between an {@link Experiment} and the resulting {@link Simulation}s.
+ * <p>
+ * Each {@link Batch} has a unique sequence number and its {@link Simulation}s
+ * can be run sequentially or in parallel and in the "foreground" (i.e., appear
+ * in the GUI) or in the "background" (i.e., not appear in the GUI).
+ */
+public class Batch extends Executable implements IBatch, ISimulationListener {
+
+	/**
+	 * The current state of the {@link Batch}
+	 */
+	private BatchState batchState = BatchState.PAUSED;
+
+	/**
+	 * The {@link Experiment} that is being executed by the {@link Batch}.
+	 */
+	private Experiment experiment = null;
+
+	/**
+	 * The Set of {@link ISimulation}s that are actively running as part of the
+	 * {@link Batch};
+	 */
+	private final List<ISimulation> activeSimulations = new ArrayList<ISimulation>();
+
+	// TODO these need to be initialized from preferences
+	// If this is ever false, you need to re-implement run(IProgressMonitor) to
+	// handle parallel Simulations
+	private boolean runningSimulationsSequentially = true;
+
+	private boolean runningInBackground = false;
+
+	/**
+	 * This flag indicates whether the {@link Batch} should continue executing
+	 * or not. If it becomes <code>false</code>, then the {@link Batch} will
+	 * kill all of its {@link ISimulation}s.
+	 */
+	private boolean keepRunning = true;
+
+	/**
+	 * The collection of {@link IBatchListener} waiting to be told about
+	 * {@link BatchEvent}'s
+	 */
+	private final List<IBatchListener> listeners = new CopyOnWriteArrayList<IBatchListener>();
+
+	/**
+	 * The collection of {@link IBatchListenerSync} waiting to be told about
+	 * {@link BatchEvent}'s
+	 */
+	private final List<IBatchListenerSync> listenersSync = new CopyOnWriteArrayList<IBatchListenerSync>();
+
+	private IProgressMonitor monitor;
+
+	private boolean cancelRequested;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param experiment
+	 *            the {@link Experiment} that forms the basis of this
+	 *            {@link Batch}
+	 * 
+	 * @param sequenceNumber
+	 *            the unique sequence number of this {@link Batch}. This is
+	 *            typically provided by the {@link BatchManager}.
+	 */
+	Batch(final Experiment experiment, final int sequenceNumber) {
+		super("Batch: " + sequenceNumber, sequenceNumber);
+		this.experiment = experiment;
+	} // Batch
+
+	/**
+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	@Override
+	protected IStatus run(final IProgressMonitor monitor) {
+		IStatus retValue = Status.OK_STATUS;
+		this.monitor = monitor;
+		try {
+			setBatchState(BatchState.RUNNING);
+			monitor.beginTask("Batch: " + getSequenceNumber(), getTotalWork());
+
+			// Initialize the scenario that is part of the experiment
+			getExperiment().initScenario();
+			
+			// Iterate through each of the Simulations to run and begin their
+			// execution.
+			for (ISimulation simulation = getNextSimulationToRun(); keepRunning
+					&& simulation != null; simulation = getNextSimulationToRun()) {
+				setBatchState(BatchState.RUNNING);
+
+				startSimulationRunning(simulation);
+
+				// Are we running the simulations sequentially?
+				if (isRunningSimulationsSequentially()) {
+					// Yes
+					// Then we only start one here and then handle the rest in
+					// simulationChanged()
+					break;
+				} // if
+				// Canceled?
+				if (monitor.isCanceled()) {
+					// Yes
+					cancelRequested = true;
+					stopAllSimulations();
+					retValue = Status.CANCEL_STATUS;
+				}
+			} // for each Simulation
+
+			// If we're running the Simulations in parallel then we need to
+			// pause here and wait for them all to end.
+		} catch (final Exception e) {
+			handleException(e);
+			keepRunning = false;
+
+			// Are there any Simulations running?
+			if (activeSimulations.size() > 0) {
+				// Yes
+				// Stop'em
+				cancelRequested = true;
+				stopAllSimulations();
+			} // if
+			monitor.done();
+			setBatchState(BatchState.STOPPED);
+		} // catch Exception
+
+		return retValue;
+	} // run
+
+	/**
+	 * Do the processing required to handle a {@link RuntimeException}
+	 * 
+	 * @param e
+	 *            the {@link Exception} that was caught in the {@link #run()}
+	 *            method.
+	 */
+	private void handleException(final Exception e) {
+
+		// We can get a Runtime exception if the user tries to run an Experiment
+		// that doesn't have a Scenario. Or, we can get one because of some real
+		// internal error.
+
+		String tempErrorMessage = "";
+		boolean logIt = false;
+
+		// Could we be missing a Scenario or something in the Scenario?
+		if (e instanceof NullPointerException) {
+			// Yes
+			// Does the Experiment have a Scenario?
+			if (experiment.getScenario() == null) {
+				// No
+				tempErrorMessage = MessageFormat.format(Messages
+						.getString("Exp.MissingScenario"),
+						new Object[] { getName() });
+			} // if missing a sequencer
+			else {
+				// Yes
+				// Does the Scenario have a Sequencer?
+				if (experiment.getScenario().getSequencer() == null) {
+					// No
+					tempErrorMessage = MessageFormat.format(Messages
+							.getString("Exp.MissingSeq"),
+							new Object[] { getName() });
+				} // if missing a sequencer
+				// How about a model?
+				else if (experiment.getScenario().getModel() == null) {
+					// No
+					tempErrorMessage = MessageFormat.format(Messages
+							.getString("Exp.MissingModel"),
+							new Object[] { getName() });
+				} // if missing model
+				else {
+					// Yes
+					// Just some other NPE
+					logIt = true;
+					tempErrorMessage = MessageFormat.format(Messages
+							.getString("Exp.IErr"), new Object[] { getName() });
+				} // else
+			} // else has a Scenario
+
+		} // if NullPointerException
+		else {
+			// No
+			logIt = true;
+			tempErrorMessage = MessageFormat.format(Messages
+					.getString("Exp.IErr"), new Object[] { getName() });
+		} // else
+
+		final String errorMessage = tempErrorMessage;
+
+		// Log it?
+		if (logIt) {
+			// Yes
+			Activator.logError(errorMessage, e);
+		} // if
+
+		try {
+			Display.getDefault().syncExec(new Runnable() {
+				public void run() {
+					final IWorkbenchWindow window = PlatformUI.getWorkbench()
+							.getActiveWorkbenchWindow();
+					final IStatus warning = new Status(IStatus.WARNING,
+							Activator.PLUGIN_ID, 1, errorMessage, null);
+					ErrorDialog.openError(window.getShell(), null, null,
+							warning);
+				} // run
+			});
+		} catch (final Error ncdfe) {
+			// If we get this exception, it is because we're not running in
+			// eclipse.
+		} // catch
+
+	} // handleException
+
+	/**
+	 * Iterate through all of the active {@link Simulation}s and stop/cancel
+	 * them.
+	 */
+	private void stopAllSimulations() {
+		for (final ISimulation simulation : activeSimulations) {
+			simulation.stop();
+			simulation.cancel();
+		} // for each ISimulation
+	} // stopAllSimulations
+
+	/**
+	 * @param simulation
+	 *            a {@link Simulation} that is to be started.
+	 */
+	private void startSimulationRunning(final ISimulation simulation) {
+		activeSimulations.add(simulation);
+		simulation.addSimulationListener(this);
+		simulation.run();
+	} // startSimulationRunning
+
+	/**
+	 * @return the value to be passed to the {@link Batch}'s
+	 *         {@link IProgressMonitor} when beginning the task. This value
+	 *         could be {@link IProgressMonitor#UNKNOWN} if the number of
+	 *         {@link ISimulation}s to be run is not known before hand.
+	 *         Otherwise, it should be the number of {@link ISimulation}'s that
+	 *         will be returned by {@link #getNextSimulationToRun()}.
+	 */
+	protected int getTotalWork() {
+		return 1;
+	}
+
+	/**
+	 * @return the next {@link ISimulation} to run as part of the {@link Batch},
+	 *         or <code>null</code>, if there are no more.
+	 */
+	protected ISimulation getNextSimulationToRun() {
+		ISimulation retValue = null;
+		// Is the experiment complete?
+		if (!experiment.isComplete()) {
+			// No
+			retValue = SimulationManager.getManager().createSimulation(
+					experiment.updateScenario(), null);
+		}
+
+		return retValue;
+	} // getNextSimulationToRun
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#run()
+	 */
+	public void run() {
+		schedule();
+	} // run
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#pause()
+	 */
+	public void pause() {
+		// TODO implement Batch.pause()
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#step()
+	 */
+	public void step() {
+		// TODO implement Batch.step()
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#reset()
+	 */
+	public void reset() {
+		// TODO implement Batch.reset()
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#stop()
+	 */
+	public void stop() {
+		keepRunning = false;
+	} // stop
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#isRunning()
+	 */
+	public boolean isRunning() {
+		return !batchState.equals(BatchState.PAUSED);
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChanged(final SimulationEvent event) {
+
+		// For the case when we're running {@link Simulation}s sequentially,
+		// this method contains most of the control logic for the execution of
+		// the {@link Batch}. Basically, as each of the {@link Batch}'s
+		// {@link Simulation}s changes state, this method is called. In it we
+		// check to see if the {@link Batch} has been canceled, or has been
+		// requested to stop.
+
+		// Did the Simulation complete?
+		if (event.getSimulationState() == SimulationState.COMPLETED_SEQUENCE) {
+			// Yes
+
+			monitor.worked(1);
+			event.getSimulation().stop();
+//			event.getSimulation().step();
+
+			// Are we waiting for Simulations to end?
+			if (keepRunning) {
+				// No
+				// Should we try to start another one?
+				if (!monitor.isCanceled() && runningSimulationsSequentially) {
+					// Yes
+					final ISimulation simulation = getNextSimulationToRun();
+					// Is there another simulation to run?
+					if (simulation != null) {
+						// Yes
+						startSimulationRunning(simulation);
+					} // if
+					// Have all the Simulations ended?
+					else if (activeSimulations.size() == 0) {
+						// Yes
+						monitor.done();
+						setBatchState(BatchState.STOPPED);
+					} // else all the Simulations ended
+				} // if
+			} // if waiting for Simulations to end
+			else {
+				// Yes
+				// Have all the Simulations ended?
+				if (activeSimulations.size() == 0) {
+					// Yes
+					monitor.done();
+					setBatchState(BatchState.STOPPED);
+				} // if
+			} // else waiting for Simulations to end
+		} // if a simulation completed cycle
+		else if (event.getSimulationState() == SimulationState.STOPPED) {
+			activeSimulations.remove(event.getSimulation());
+			event.getSimulation().removeSimulationListener(this);
+			if (activeSimulations.size() == 0) {
+				// Yes
+				monitor.done();
+				setBatchState(BatchState.STOPPED);
+			} // else all the Simulations ended
+		} // if stopped
+
+		// Should we cancel all the Simulations?
+		if (!cancelRequested && monitor.isCanceled()) {
+			// Yes
+			keepRunning = false;
+			cancelRequested = true;
+			stopAllSimulations();
+		} // if canceled
+
+		// Have we been asked to stop?
+		if (!keepRunning && !cancelRequested) {
+			// Yes
+			cancelRequested = true;
+			stopAllSimulations();
+		} // if
+	}// simulationChanged
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#getExperiment()
+	 */
+	public Experiment getExperiment() {
+		return experiment;
+	} // getExperiment
+
+	/**
+	 * @return the current state of the {@link Batch}
+	 */
+	public final BatchState getBatchState() {
+		return batchState;
+	}
+
+	/**
+	 * @param batchState
+	 *            the new state of the {@link Batch}
+	 */
+	private void setBatchState(final BatchState batchState) {
+		// Is the state changing?
+		if (getBatchState() != batchState) {
+			// Yes
+			this.batchState = batchState;
+			fireBatchChanged(batchState);
+		} // if
+
+	} // setBatchState
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#isRunningSimulationsSequentially()
+	 */
+	public final boolean isRunningSimulationsSequentially() {
+		return runningSimulationsSequentially;
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#setRunningSimulationsSequentially(boolean)
+	 */
+	public final void setRunningSimulationsSequentially(
+			final boolean runningSimulationsSequentially) {
+		this.runningSimulationsSequentially = runningSimulationsSequentially;
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#isRunningInBackground()
+	 */
+	public final boolean isRunningInBackground() {
+		return runningInBackground;
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#setRunningInBackground(boolean)
+	 */
+	public final void setRunningInBackground(final boolean runningInBackground) {
+		this.runningInBackground = runningInBackground;
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#addBatchListener(org.eclipse.stem.jobs.batch.IBatchListener)
+	 */
+	final public void addBatchListener(final IBatchListener listener) {
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#removeBatchListener(org.eclipse.stem.jobs.batch.IBatchListener)
+	 */
+	final public void removeBatchListener(final IBatchListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#addBatchListenerSync(org.eclipse.stem.jobs.batch.IBatchListenerSync)
+	 */
+	public void addBatchListenerSync(IBatchListenerSync listener) {
+		if (!listenersSync.contains(listener)) {
+			listenersSync.add(listener);
+		}
+	} // addBatchListenerSync
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatch#removeBatchListenerSync(org.eclipse.stem.jobs.batch.IBatchListenerSync)
+	 */
+	public void removeBatchListenerSync(IBatchListenerSync listener) {
+		listenersSync.remove(listener);
+	} // removeBatchListenerSync
+
+	/**
+	 * Tell the listeners about the change in the {@link Batch}'s state
+	 * 
+	 * @param batchState
+	 *            the new state of the {@link Batch}
+	 */
+	private void fireBatchChanged(final BatchState batchState) {
+		final BatchEvent event = new BatchEvent(this, batchState);
+		for (final IBatchListener listener : listeners) {
+			listener.batchChanged(event);
+		} // for
+
+		for (final IBatchListenerSync listener : listenersSync) {
+			listener.batchChangedSync(event);
+		} // for
+	} // fireBatchChanged
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder("[");
+		sb.append(getSequenceNumber());
+		sb.append("] ");
+		sb.append(isRunningSimulationsSequentially() ? "S/" : "P/");
+		sb.append(isRunningInBackground() ? "B " : "F ");
+		sb.append(getBatchState().toString());
+		return sb.toString();
+	} // toString
+
+} // Batch
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchEvent.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchEvent.java
new file mode 100644
index 0000000..96c6a61
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchEvent.java
@@ -0,0 +1,61 @@
+// BatchEvent.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.EventObject;
+
+/**
+ * This class represents the occurrence of an event in a {@link Batch}.
+ */
+public class BatchEvent extends EventObject {
+
+	/**
+	 * Default serial id
+	 */
+	private static final long serialVersionUID = 1L;
+	private BatchState batchState;
+
+	/**
+	 * @param batchState
+	 *            the new state of a {@link IBatch}.
+	 * @param batch
+	 *            the source of the event.
+	 */
+	public BatchEvent(final IBatch batch, final BatchState batchState) {
+		super(batch);
+		this.batchState = batchState;
+	}
+
+	/**
+	 * @return the batchState
+	 */
+	public final BatchState getBatchState() {
+		return batchState;
+	}
+
+	/**
+	 * @return the {@link IBatch} that is the source of the event.
+	 */
+	public final IBatch getBatch() {
+		return (IBatch) getSource();
+	}
+
+	/**
+	 * @see java.util.EventObject#toString()
+	 */
+	@Override
+	public String toString() {
+		return batchState.toString();
+	}
+
+} // BatchEvent
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManager.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManager.java
new file mode 100644
index 0000000..005481e
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManager.java
@@ -0,0 +1,677 @@
+// BatchManager.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.execution.ExecutableManager;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * This class implements a centralized manager for running {@link Experiment}s
+ * in "batch mode". The idea of batch mode is that a {@link Scenario} referenced
+ * by an {@link Experiment} can be used as a base from which a collection of
+ * other {@link Scenario}s can be derived. These derived {@link Scenario}s
+ * differ from the base in some (usually) minor variation of one or more of the
+ * base's configuration parameters.
+ * <p>
+ * The manager controls the creation of the derived {@link Scenario}s from
+ * specifications provided by a user, and then, their subsequent execution as
+ * {@link Simulation}s.
+ * 
+ * @see Batch
+ * @see Experiment
+ * @see Modifier
+ */
+public class BatchManager extends ExecutableManager implements IBatchListener {
+
+	/**
+	 * The singleton instance of the {@link BatchManager}.
+	 */
+	public static BatchManager INSTANCE = new BatchManager();
+
+	/**
+	 * This is the sequence number assigned to each successive {@link Batch}
+	 * instance the manager creates.
+	 */
+	static private int sequenceNumber = 0;
+
+	/**
+	 * Constant empty array of {@link Batch}s.
+	 */
+	public static final IBatch[] NONE = new Batch[] {};
+
+	/**
+	 * The collection of {@link IBatchManagerListener}'s waiting to be told
+	 * about {@link BatchManagerEvent}'s
+	 */
+	private final List<IBatchManagerListener> listeners = new CopyOnWriteArrayList<IBatchManagerListener>();
+
+	/**
+	 * The collection of {@link IBatchManagerListenerSync}'s waiting to be told
+	 * about {@link BatchManagerEvent}'s
+	 */
+	private final List<IBatchManagerListenerSync> listenersSync = new CopyOnWriteArrayList<IBatchManagerListenerSync>();
+
+	/**
+	 * The {@link Set} of {@link Batch}s being managed.
+	 */
+	private final List<IBatch> batches = new ArrayList<IBatch>();
+
+	/**
+	 * Private constructor so that instances of the {@link BatchManager} cannot
+	 * be created externally.
+	 */
+	private BatchManager() {
+		// nothing
+	} // BatchManager
+
+	/**
+	 * @return the next {@link Batch} sequence number and increment the value.
+	 */
+	synchronized private static final int getAndIncrementBatchSequenceNumber() {
+		return sequenceNumber++;
+	} // getAndIncrementBatchSequenceNumber
+
+	/**
+	 * @return the {@link List} of {@link Batch}s being managed.
+	 */
+	public List<IBatch> getActiveBatches() {
+		return batches;
+	} // getActiveBatches
+
+	/**
+	 * Add a new {@link Batch} to the manager's collection and notify any
+	 * listeners of the addition.
+	 */
+	private void addActiveBatch(final IBatch batch) {
+		batches.add(batch);
+		batch.addBatchListener(this);
+		fireBatchManagerChanged(new IBatch[] { batch }, NONE);
+	} // addActiveBatch
+
+	/**
+	 * Remove an {@link IBatch} from the collection of active {@link IBatch}s.
+	 * 
+	 * @param simulation
+	 *            the {@link IBatch} to remove
+	 */
+	private final void removeActiveBatch(final IBatch batch) {
+		batches.remove(batch);
+		// We're no longer a listener
+		batch.removeBatchListener(this);
+		fireBatchManagerChanged(NONE, new IBatch[] { batch });
+	} // removeActiveBatch
+
+	/**
+	 * Create a {@link IBatch} that's ready to run
+	 * 
+	 * @param experiment
+	 *            the {@link Experiment} that is the basis for the {@link Batch}
+	 * @return an {@link IBatch} from the {@link Experiment}
+	 */
+	public IBatch createBatch(final Experiment experiment) {
+		final Batch batch = new Batch(experiment,
+				getAndIncrementBatchSequenceNumber());
+		batch.setPriority(Job.LONG);
+		final IBatch retValue = new BatchAdapter(batch);
+		addActiveBatch(retValue);
+		return retValue;
+	} // createBatch
+
+	/**
+	 * @param configurationElement
+	 * @param monitor
+	 * @return
+	 */
+	protected IBatch createBatch(
+			final IConfigurationElement configurationElement,
+			final IProgressMonitor monitor) {
+		IBatch retValue = null;
+
+		final String experimentURIString = configurationElement
+				.getAttribute(DublinCore.IDENTIFIER);
+		try {
+			retValue = createBatch(URI.createURI(experimentURIString), monitor);
+		} catch (final Exception e) {
+			Activator
+					.logError(
+							MessageFormat
+									.format(
+											Messages
+													.getString("BatchMgr.Deserialization_Error"), experimentURIString), e); //$NON-NLS-1$
+			retValue = null;
+		}
+		return retValue;
+	} // createBatch
+
+	/**
+	 * @param experimentURI
+	 *            the {@link URI} of a serialized {@link Experiment}
+	 * @param monitor
+	 *            a {@link ProgressMonitor}
+	 * @return an {@link IBatch} deserialized from the source identified by the
+	 *         experimentURI, or <code>null</code> if there was a problem.
+	 */
+	private IBatch createBatch(final URI experimentURI,
+			final IProgressMonitor monitor) {
+		IBatch retValue = null;
+		try {
+			final ResourceSet resourceSet = new ResourceSetImpl();
+			final Resource resource = resourceSet.getResource(experimentURI,
+					true);
+			monitor.subTask("Reading Experiment from file");
+			resource.load(null);
+			monitor.subTask("Creating Batch from Experiment");
+			retValue = createBatch((Experiment) resource.getContents().get(0));
+		} catch (final Exception e) {
+			Activator
+					.logError(
+							MessageFormat
+									.format(
+											Messages
+													.getString("BatchMgr.Deserialization_Error"), experimentURI.toString()), e); //$NON-NLS-1$
+			retValue = null;
+		}
+		return retValue;
+	} // createBatch
+
+	/**
+	 * Create a {@link IBatch} from an {@link Experiment} instance and then
+	 * start it running.
+	 * 
+	 * @param experiment
+	 *            the {@link Experiment} to be run
+	 */
+	public void createAndRunBatch(final Experiment experiment) {
+		new Job(Messages.getString("BatchMgr.StartBatch")) {
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				try {
+					final IBatch batch = createBatch(experiment);
+					monitor.subTask(Messages.getString("BatchMgr.Run"));
+					batch.run();
+				} catch (final Exception e) {
+					// The error was logged in createBatch
+					monitor.done();
+				} // catch Exception
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndRunBatch
+
+	/**
+	 * @param configurationElement
+	 *            a {@link IConfigurationElement} that specifies the details and
+	 *            serialized location of an {@link Experiment} to simulate.
+	 */
+	public void createAndRunBatch(
+			final IConfigurationElement configurationElement) {
+		new Job(Messages.getString("BatchMgr.StartBatch")) { //$NON-NLS-1$
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				monitor.beginTask(Messages.getString("BatchMgr.CrtSim"),
+						IProgressMonitor.UNKNOWN);
+				try {
+					final IBatch batch = createBatch(configurationElement,
+							monitor);
+					monitor.subTask(Messages.getString("BatchMgr.Run"));
+					batch.run();
+				} // try
+				catch (final NullPointerException e) {
+					// The error was logged in createBatch
+					monitor.done();
+				}
+				monitor.done();
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndRunBatch
+
+	/**
+	 * @return the current batch sequence number
+	 */
+	public final int getSequenceNumber() {
+		return sequenceNumber;
+	} // getSequenceNumber
+
+	/**
+	 * @param listener
+	 *            a listener wanting to be told about changes to the manager.
+	 */
+	public void addBatchManagerListener(final IBatchManagerListener listener) {
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+		}
+	} // addBatchManagerListener
+
+	/**
+	 * @param listenerSync
+	 *            a listener wanting to be told about changes to the manager.
+	 */
+	public void addBatchManagerListenerSync(
+			final IBatchManagerListenerSync listenerSync) {
+		if (!listenersSync.contains(listenerSync)) {
+			listenersSync.add(listenerSync);
+		}
+	} // addBatchManagerListenerSync
+
+	/**
+	 * @param listener
+	 *            a listener NOT wanting to be told about changes to the
+	 *            manager.
+	 */
+	public void removeListener(final IBatchManagerListener listener) {
+		listeners.remove(listener);
+	} // removeListener
+
+	/**
+	 * @param listenerSync
+	 *            a listener NOT wanting to be told about changes to the
+	 *            manager.
+	 */
+	public void removeListenerSync(final IBatchManagerListenerSync listenerSync) {
+		listenersSync.remove(listenerSync);
+	} // removeListenerSync
+
+	/**
+	 * Tell the listeners about the change.
+	 * 
+	 * @param batchesAdded
+	 *            the {@link Batch}s added
+	 * @param batchesRemoved
+	 *            the {@link Batch}s removed
+	 */
+	private void fireBatchManagerChanged(final IBatch[] batchesAdded,
+			final IBatch[] batchesRemoved) {
+		final BatchManagerEvent event = new BatchManagerEvent(this,
+				batchesAdded, batchesRemoved);
+
+		// Inform the asynchronous listeners
+		for (final IBatchManagerListener listener : listeners) {
+			try {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						listener.batchesChanged(event);
+					}
+				});
+			} catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				listener.batchesChanged(event);
+			} // catch
+		} // for
+
+		// Now inform the synchronized listeners
+		for (final IBatchManagerListenerSync listenerSync : listenersSync) {
+			try {
+				Display.getDefault().syncExec(new Runnable() {
+					public void run() {
+						listenerSync.batchesChangedSync(event);
+					}
+				});
+			} catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				listenerSync.batchesChangedSync(event);
+			} // catch
+		} // for
+
+	} // fireBatchManagerChanged
+
+	/**
+	 * @see org.eclipse.stem.jobs.batch.IBatchListener#batchChanged(org.eclipse.stem.jobs.batch.BatchEvent)
+	 */
+	public void batchChanged(final BatchEvent event) {
+		// Has a batch stopped?
+		if (event.getBatchState().equals(BatchState.STOPPED)) {
+			// Yes
+			removeActiveBatch(event.getBatch());
+		}
+	} // batchChanged
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder();
+		for (final IBatch batch : batches) {
+			sb.append(batch.toString());
+			sb.append("\n");
+		} // for each Batch
+		return sb.toString();
+	} // toString
+
+	/**
+	 * Discard the current {@link BatchManager} and replace it with a newly
+	 * allocated one. This method is primarily intended to be used by JUnit test
+	 * cases that need a {@link BatchManager} with a known initial state.
+	 */
+	static void resetBatchManager() {
+		INSTANCE = new BatchManager();
+	} // resetBatchManager
+
+	/**
+	 * This class adapts a {@link Batch} instance that runs as an asynchronous
+	 * Eclipse {@link Job} to be an {@link IBatch} instance. The adapter manages
+	 * thread safety issues so that the UI thread can access the {@link IBatch}
+	 * instance directly.
+	 */
+	protected static class BatchAdapter implements IBatch, IBatchListener,
+			IBatchListenerSync {
+
+		/**
+		 * The collection of {@link IBatchListener}'s waiting to be told about
+		 * {@link BatchEvent}s.
+		 */
+		private final List<IBatchListener> listeners = new CopyOnWriteArrayList<IBatchListener>();
+
+		/**
+		 * The collection of {@link IBatchListenerSync}'s waiting to be told
+		 * about {@link BatchEvent}s.
+		 */
+		private final List<IBatchListenerSync> listenersSync = new CopyOnWriteArrayList<IBatchListenerSync>();
+
+		/**
+		 * The {@link Batch} instance to adapt. This will be an instance of
+		 * {@link Batch} which is also an eclipse {@link Job} and runs
+		 * asynchronously from the UI thread of eclipse. This adapter registers
+		 * as a listener of adapted {@link Batch} and safely passes
+		 * {@link BatchEvent}'s on to listeners in the UI or other threads.
+		 */
+		private final IBatch batch;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param batch
+		 *            the {@link Batch} to adapt
+		 */
+		protected BatchAdapter(final IBatch batch) {
+			this.batch = batch;
+			batch.addBatchListener(this);
+			batch.addBatchListenerSync(this);
+		} // BatchAdapter
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#getName()
+		 */
+		public String getName() {
+			return batch.getName();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#getNameWithSequenceNumber()
+		 */
+		public String getNameWithSequenceNumber() {
+			return batch.getNameWithSequenceNumber();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#getExperiment()
+		 */
+		public Experiment getExperiment() {
+			return batch.getExperiment();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#getCreationTime()
+		 */
+		public Date getCreationTime() {
+			return batch.getCreationTime();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#getUniqueIDString()
+		 */
+		public String getUniqueIDString() {
+			return batch.getUniqueIDString();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#getBatchState()
+		 */
+		public BatchState getBatchState() {
+			return batch.getBatchState();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#getSequenceNumber()
+		 */
+		public int getSequenceNumber() {
+			return batch.getSequenceNumber();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#isRunningInBackground()
+		 */
+		public boolean isRunningInBackground() {
+			return batch.isRunningInBackground();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#isRunningSimulationsSequentially()
+		 */
+		public boolean isRunningSimulationsSequentially() {
+			return batch.isRunningSimulationsSequentially();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#setRunningInBackground(boolean)
+		 */
+		public void setRunningInBackground(final boolean runningInBackground) {
+			batch.setRunningInBackground(runningInBackground);
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#setRunningSimulationsSequentially(boolean)
+		 */
+		public void setRunningSimulationsSequentially(
+				final boolean runningSimulationsSequentially) {
+			batch
+					.setRunningSimulationsSequentially(runningSimulationsSequentially);
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#run()
+		 */
+		public void run() {
+			batch.run();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#pause()
+		 */
+		public void pause() {
+			batch.pause();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#step()
+		 */
+		public void step() {
+			batch.step();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#reset()
+		 */
+		public void reset() {
+			batch.reset();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#stop()
+		 */
+		public void stop() {
+			batch.stop();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#isRunning()
+		 */
+		public boolean isRunning() {
+			return batch.isRunning();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#isStoppable()
+		 */
+		public boolean isStoppable() {
+			return batch.isStoppable();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#cancel()
+		 */
+		public boolean cancel() {
+			return batch.cancel();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#addBatchListener(org.eclipse.stem.jobs.batch.IBatchListener)
+		 */
+		public void addBatchListener(final IBatchListener listener) {
+			if (!listeners.contains(listener)) {
+				listeners.add(listener);
+			}
+		} // addBatchListener
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#removeBatchListener(org.eclipse.stem.jobs.batch.IBatchListener)
+		 */
+		public void removeBatchListener(final IBatchListener listener) {
+			listeners.remove(listener);
+		} // removeBatchListener
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#addBatchListenerSync(org.eclipse.stem.jobs.batch.IBatchListenerSync)
+		 */
+		public void addBatchListenerSync(final IBatchListenerSync listener) {
+			if (!listenersSync.contains(listener)) {
+				listenersSync.add(listener);
+			}
+		} // addBatchListenerSync
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatch#removeBatchListenerSync(org.eclipse.stem.jobs.batch.IBatchListenerSync)
+		 */
+		public void removeBatchListenerSync(final IBatchListenerSync listener) {
+			listenersSync.remove(listener);
+		} // removeBatchListenerSync
+
+		/**
+		 * Tell the listeners about the change in the {@link Batch}'s state
+		 * 
+		 * @param batchState
+		 *            the new state of the {@link Batch}
+		 */
+		protected void fireBatchChanged(final BatchState batchState) {
+			final BatchEvent event = new BatchEvent(this, batchState);
+			for (final IBatchListener listener : listeners) {
+				listener.batchChanged(event);
+			} // for
+		} // fireBatchManagerChanged
+
+		/**
+		 * Tell the listeners about the change in the {@link Batch}'s state
+		 * 
+		 * @param batchState
+		 *            the new state of the {@link Batch}
+		 */
+		protected void fireBatchChangedSync(final BatchState batchState) {
+			final BatchEvent event = new BatchEvent(this, batchState);
+			for (final IBatchListenerSync listener : listenersSync) {
+				listener.batchChangedSync(event);
+			} // for
+		} // fireBatchChangedSync
+
+		/**
+		 * This is where the adapted {@link Batch} tells us of its state changes
+		 * and we need to adapt them to the UI thread.
+		 * 
+		 * @see org.eclipse.stem.jobs.batch.IBatchListener#batchChanged(org.eclipse.stem.jobs.batch.BatchEvent)
+		 */
+		public void batchChanged(final BatchEvent event) {
+			try {
+				if (!Display.getDefault().isDisposed()) {
+					// Yes
+					Display.getDefault().asyncExec(new Runnable() {
+						public void run() {
+							fireBatchChanged(event.getBatchState());
+						}
+					});
+				} // if
+			} // try
+			catch (final NullPointerException e) {
+				// Nothing to do, shutting down...
+			} // catch NullPointerException
+			catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				fireBatchChanged(event.getBatchState());
+			} // catch
+
+		} // batchChanged
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatchListenerSync#batchChangedSync(org.eclipse.stem.jobs.batch.BatchEvent)
+		 */
+		public void batchChangedSync(final BatchEvent event) {
+			try {
+				if (!Display.getDefault().isDisposed()) {
+					// Yes
+					Display.getDefault().asyncExec(new Runnable() {
+						public void run() {
+							fireBatchChangedSync(event.getBatchState());
+						}
+					});
+				} // if
+			} // try
+			catch (final NullPointerException e) {
+				// Nothing to do, shutting down...
+			} // catch NullPointerException
+			catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				fireBatchChanged(event.getBatchState());
+			} // catch
+
+		} // batchChangedSync
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			return batch.toString();
+		} // toString
+	} // BatchAdapter
+} // BatchManager
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerEvent.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerEvent.java
new file mode 100644
index 0000000..76f03fa
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerEvent.java
@@ -0,0 +1,63 @@
+// BatchManagerEvent.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.EventObject;
+
+/**
+ * This class represents an event that has occurred in the operation of the
+ * {@link BatchManager}.
+ */
+public class BatchManagerEvent extends EventObject {
+
+	/**
+	 * Default serial id.
+	 */
+	transient static final long serialVersionUID = 1L;
+
+	transient IBatch[] batchesAdded = null;
+
+	transient IBatch[] batchesRemoved = null;
+
+	/**
+	 * @param batchManager
+	 *            the {@link BatchManager} that created the event.
+	 * @param batchsRemoved
+	 *            the {@link Batch}s removed from management by the
+	 *            {@link BatchManager}.
+	 * @param batchsAdded
+	 *            the {@link Batch}s added to the management of the
+	 *            {@link BatchManager}.
+	 */
+	public BatchManagerEvent(final BatchManager batchManager,
+			final IBatch[] batchsAdded, final IBatch[] batchsRemoved) {
+		super(batchManager);
+		this.batchesAdded = batchsAdded.clone();
+		this.batchesRemoved = batchsRemoved.clone();
+	} // BatchManagerEvent
+
+	/**
+	 * @return the batchesAdded
+	 */
+	public final IBatch[] getBatchesAdded() {
+		return batchesAdded;
+	}
+
+	/**
+	 * @return the batchesRemoved
+	 */
+	public final IBatch[] getBatchesRemoved() {
+		return batchesRemoved;
+	}
+
+} // BatchManagerEvent
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchState.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchState.java
new file mode 100644
index 0000000..8b6d448
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/BatchState.java
@@ -0,0 +1,46 @@
+// BatchState.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This enumeration defines the states that a {@link Batch} can be in.
+ * 
+ * @see SimulationState
+ */
+public enum BatchState {
+	/**
+	 * When the {@link Batch} has been scheduled for execution and is running.
+	 * This is the initial state of all newly created {@link Batch}s.
+	 * <p>
+	 * The next state is: {@link #PAUSED}
+	 */
+	RUNNING,
+
+	/**
+	 * When all of the {@link Simulation}s in a {@link Batch} are not scheduled
+	 * for execution.
+	 * <p>
+	 * The next states are {@link #RUNNING}, {@link #STOPPED}
+	 * 
+	 * @see #RUNNING
+	 * @see #STOPPED
+	 */
+	PAUSED,
+
+	/**
+	 * The simulation is being removed from the {@link SimulationManager} and its state
+	 * information destroyed.
+	 */
+	STOPPED
+} // BatchState
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatch.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatch.java
new file mode 100644
index 0000000..9063655
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatch.java
@@ -0,0 +1,119 @@
+// IBatch.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This interface is implemented by classes that represent {@link Batch}
+ * simulations.
+ * 
+ * @see BatchManager
+ */
+public interface IBatch extends IExecutable {
+
+	/**
+	 * @return the current state of the {@link IBatch}
+	 */
+	BatchState getBatchState();
+
+	/**
+	 * @return <code>true</code> if the derived simulations are to be run
+	 *         sequentially, <code>false</code>, otherwise.
+	 */
+	boolean isRunningSimulationsSequentially();
+
+	/**
+	 * @param runningSimulationsSequentially
+	 *            the value of the flag controlling the choice of sequential or
+	 *            parallel execution of the derived {@link Simulation}s.
+	 *            <code>true</code> if the derived {@link Simulation}s are to be
+	 *            run sequentially, <code>false</code>, otherwise.
+	 */
+	void setRunningSimulationsSequentially(
+			boolean runningSimulationsSequentially);
+
+	/**
+	 * @return <code>true</code>, if the derived {@link Simulation}s will be run
+	 *         in the background (i.e., no GUI), <code>false</code>, otherwise.
+	 */
+	boolean isRunningInBackground();
+
+	/**
+	 * @param runningInBackground
+	 *            the value of the flag controlling the choice of background or
+	 *            foreground execution of the derived {@link Simulation}s.
+	 *            <code>true</code> if the derived {@link Simulation}s are to be
+	 *            run in the background, <code>false</code>, if in the
+	 *            foreground.
+	 */
+	void setRunningInBackground(boolean runningInBackground);
+
+	/**
+	 * Start running the {@link IBatch}.
+	 */
+	void run();
+
+	/**
+	 * Stop the {@link IBatch} and all of the derived {@link ISimulation}s.
+	 */
+	void stop();
+
+	/**
+	 * @return <code>true</code> if the execution of the {@link IBatch} has been
+	 *         canceled.
+	 */
+	boolean cancel();
+
+	/**
+	 * Add a listener to the {@link IBatch}.
+	 * 
+	 * @param listener
+	 *            an {@link IBatchListener} who wants to be kept informed of the
+	 *            state of the {@link IBatch}.
+	 */
+	void addBatchListener(final IBatchListener listener);
+
+	/**
+	 * Remove a listener from the {@link IBatch}.
+	 * 
+	 * @param listener
+	 *            the listener to remove.
+	 */
+	void removeBatchListener(final IBatchListener listener);
+
+	/**
+	 * Add a listener to the {@link IBatch}.
+	 * 
+	 * @param listener
+	 *            an {@link IBatchListener} who wants to be kept informed of the
+	 *            state of the {@link IBatch}.
+	 */
+	void addBatchListenerSync(final IBatchListenerSync listener);
+
+	/**
+	 * Remove a listener from the {@link IBatch}.
+	 * 
+	 * @param listener
+	 *            the listener to remove.
+	 */
+	void removeBatchListenerSync(final IBatchListenerSync listener);
+
+	/**
+	 * @return the {@link Experiment} that is used to created the
+	 *         {@link Simulation}s.
+	 */
+	Experiment getExperiment();
+
+} // IBatch
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListener.java
new file mode 100644
index 0000000..fe5f0ac
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListener.java
@@ -0,0 +1,33 @@
+// IBatchListener.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableListener;
+
+
+/**
+ * This interface is implemented by classes that want to listen to events
+ * generated by a {@link IBatch}.
+ * 
+ * @see IBatch
+ */
+public interface IBatchListener extends IExecutableListener {
+
+	/**
+	 * @param event
+	 *            the {@link BatchEvent} the specifies what changed in the
+	 *            {@link IBatch}.
+	 */
+	void batchChanged(BatchEvent event);
+
+} // IBatchListener
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListenerSync.java
new file mode 100644
index 0000000..b3ccfa9
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchListenerSync.java
@@ -0,0 +1,34 @@
+// IBatchListener.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableListenerSync;
+
+/**
+ * This interface is implemented by classes that want to listen to events
+ * generated by a {@link IBatch}. The thread running the {@link Batch} will wait
+ * until the {@link #batchChangedSync(BatchEvent)} method returns before it
+ * continues execution.
+ * 
+ * @see IBatch
+ */
+public interface IBatchListenerSync extends IExecutableListenerSync {
+
+	/**
+	 * @param event
+	 *            the {@link BatchEvent} the specifies what changed in the
+	 *            {@link IBatch}.
+	 */
+	void batchChangedSync(BatchEvent event);
+
+} // IBatchListenerSync
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListener.java
new file mode 100644
index 0000000..87c5ff4
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListener.java
@@ -0,0 +1,31 @@
+// IBatchManagerListener.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableManagerListener;
+
+/**
+ * This interface is implemented by classes that listen for
+ * {@link BatchManagerEvent}s.
+ * 
+ * @see BatchManager
+ * @see Batch
+ */
+public interface IBatchManagerListener extends IExecutableManagerListener {
+
+	/**
+	 * @param event
+	 */
+	void batchesChanged(BatchManagerEvent event);
+
+} // IBatchManagerListener
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListenerSync.java
new file mode 100644
index 0000000..fd918e0
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/IBatchManagerListenerSync.java
@@ -0,0 +1,33 @@
+// IBatchManagerListener.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableManagerListenerSync;
+
+/**
+ * This interface is implemented by classes that listen for
+ * {@link BatchManagerEvent}s. The thread running the {@link BatchManager} will
+ * wait until the {@link #batchesChangedSync(BatchManagerEvent)} method returns
+ * before it continues execution.
+ * 
+ * @see IBatchManagerListener
+ */
+public interface IBatchManagerListenerSync extends
+		IExecutableManagerListenerSync {
+
+	/**
+	 * @param event
+	 */
+	void batchesChangedSync(BatchManagerEvent event);
+
+} // IBatchManagerListenerSync
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Messages.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Messages.java
new file mode 100644
index 0000000..317a55d
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/Messages.java
@@ -0,0 +1,41 @@
+// Messages.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.jobs.batch.messages"; //$NON-NLS-1$
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string that matches the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/messages.properties b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/messages.properties
new file mode 100644
index 0000000..4c2e481
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/batch/messages.properties
@@ -0,0 +1,25 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# BatchManager
+BatchMgr.Deserialization_Error = Problem reading in a serialized Experiment from URI \"{0}\"
+BatchMgr.StartBatch = Starting batch
+BatchMgr.CrtSim = Creating batch
+BatchMgr.Run = Running batch
+
+
+# Experiment
+Exp.IErr = An internal error occurred running Experiment "{0}".
+Exp.MissingScenario = The Experiment "{0}" cannot run because it does not have a base Scenario.
+Exp.MissingSeq = The Experiment "{0}" cannot run because its base Scenario does not have a Sequencer.
+Exp.MissingModel= The Experiment "{0}" cannot run because its base Scenario does not have a Model.
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/Executable.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/Executable.java
new file mode 100644
index 0000000..d2bce88
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/Executable.java
@@ -0,0 +1,108 @@
+// Executable.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Calendar;
+import java.util.Date;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.impl.DublinCoreImpl;
+
+/**
+ * This class is an "adapter" class for the interface {@link IExecutable}. It
+ * implements common features of that interface for extending subclasses.
+ */
+abstract public class Executable extends Job implements IExecutable {
+
+	/**
+	 * The {@link Executable}'s sequence number. This value is typically
+	 * assigned by the {@link ExecutableManager} when it first creates a
+	 * {@link Executable}.
+	 */
+	private int sequenceNumber = 0;
+
+	/**
+	 * The time (wall clock) when this {@link Executable} was created.
+	 */
+	private final Date creationTime;
+
+	/**
+	 * @param name
+	 *            the name of the {@link Executable}
+	 * @param sequenceNumber
+	 *            the unique sequence number of the {@link Executable}
+	 */
+	public Executable(final String name, final int sequenceNumber) {
+		super(name);
+		this.sequenceNumber = sequenceNumber;
+		this.creationTime = Calendar.getInstance().getTime();
+	} // Executable
+
+	/**
+	 * @return the unique sequence number of the {@link Executable}
+	 */
+	public int getSequenceNumber() {
+		return sequenceNumber;
+	} // getSequenceNumber
+
+	/**
+	 * @param sequenceNumber
+	 *            the unique sequence number of the {@link Executable}
+	 */
+	public void setSequenceNumber(final int sequenceNumber) {
+		this.sequenceNumber = sequenceNumber;
+	} // setSequenceNumber
+
+	/**
+	 * @return the name of the Executable with its sequence number as a prefix
+	 *         (e.g., "[2] FooBar").
+	 * @see #getSequenceNumber()
+	 * @see #getName()
+	 */
+	public String getNameWithSequenceNumber() {
+		final StringBuilder retValue = new StringBuilder("[");
+		retValue.append(getSequenceNumber());
+		retValue.append("] ");
+		retValue.append(getName());
+		return retValue.toString();
+	} // getNameWithSequenceNumber
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getCreationTime()
+	 */
+	public Date getCreationTime() {
+		return creationTime;
+	} // getCreationTime
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#getUniqueIDString()
+	 */
+	public String getUniqueIDString() {
+		final StringBuilder sb = new StringBuilder(URI.encodeSegment(getName(),
+				false).replace("%", "-"));
+		sb.append("-");
+		sb.append(getSequenceNumber());
+		sb.append("-");
+		sb.append(DublinCoreImpl.createISO8601DateString(getCreationTime()));
+		return sb.toString();
+	} // getUniqueIDString
+
+	/**
+	 * @see org.eclipse.stem.jobs.execution.IExecutable#isStoppable()
+	 */
+	public boolean isStoppable() {
+		return true;
+	}
+
+} // Executable
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableManager.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableManager.java
new file mode 100644
index 0000000..e55a993
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableManager.java
@@ -0,0 +1,21 @@
+// ExecutableManager.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is extended by classes the manage the life-cycle of
+ * {@link IExecutable}s.
+ */
+public abstract class ExecutableManager {
+	// Nothing
+} // ExecutableManager
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableState.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableState.java
new file mode 100644
index 0000000..d018aa8
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/ExecutableState.java
@@ -0,0 +1,21 @@
+// ExecutableState.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This enumeration represents the different states an {@link Executable} can be
+ * in.
+ */
+public enum ExecutableState {
+	// Nothing
+} // ExecutableState
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutable.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutable.java
new file mode 100644
index 0000000..ac8e0f1
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutable.java
@@ -0,0 +1,92 @@
+// IExecutable.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Date;
+
+/**
+ * This interface is implemented by classes that can are executable.
+ */
+public interface IExecutable {
+
+	/**
+	 * The units of work (100) that represents complete execution.
+	 */
+	int TOTAL_WORK = 100;
+
+	/**
+	 * @return the unique sequence number of the {@link IExecutable}.
+	 * @see #getNameWithSequenceNumber()
+	 */
+	int getSequenceNumber();
+
+	/**
+	 * @return the name of the {@link IExecutable}.
+	 */
+	String getName();
+
+	/**
+	 * @return a {@link String} that contains the sequence number of the
+	 *         {@link IExecutable} and it's name.
+	 * @see #getName()
+	 */
+	String getNameWithSequenceNumber();
+
+	/**
+	 * @return a {@link String} without spaces that is unique to this
+	 *         {@link Executable} instance.
+	 */
+	String getUniqueIDString();
+
+	/**
+	 * @return the time (wall clock) that the {@link Executable} was created.
+	 */
+	Date getCreationTime();
+
+	/**
+	 * Start running the {@link IExecutable}.
+	 */
+	void run();
+
+	/**
+	 * Pause the {@link IExecutable}.
+	 */
+	void pause();
+
+	/**
+	 * Reset the {@link IExecutable}.
+	 */
+	void reset();
+
+	/**
+	 * Step the {@link IExecutable} one step/cycle if it hasn't already ended.
+	 */
+	void step();
+
+	/**
+	 * Stop the {@link IExecutable}.
+	 */
+	void stop();
+
+	/**
+	 * @return <code>true</code> if the {@link IExecutable} is running.
+	 */
+	boolean isRunning();
+
+	/**
+	 * @return <code>true</code> if the {@link IExecutable} can be stopped.
+	 *         This is only <code>true</code> for {@link IExecutable}s for
+	 *         which {@link #isRunning()} can be <code>true</code>.
+	 */
+	boolean isStoppable();
+} // IExecutable
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListener.java
new file mode 100644
index 0000000..bcd22a2
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListener.java
@@ -0,0 +1,21 @@
+// IExecutableListener.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is extended by classes that wish to be informed of changes to
+ * the state of an {@link Executable}s.
+ */
+public interface IExecutableListener {
+	// BatchState and Simulation state should be merged into this enum and removed.
+} // IExecutableListener
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListenerSync.java
new file mode 100644
index 0000000..94f882f
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableListenerSync.java
@@ -0,0 +1,22 @@
+// IExecutableListener.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is extended by classes that wish to be informed of changes to
+ * the state of an {@link Executable}s. Where the {@link Executable} is
+ * suspended while the listener receives the message.
+ */
+public interface IExecutableListenerSync {
+	// Nothing
+} // IExecutableListenerSync
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListener.java
new file mode 100644
index 0000000..6981399
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListener.java
@@ -0,0 +1,21 @@
+// IExecutableManagerListener.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is extended by classes that wish to be informed of changes to
+ * the state of an {@link ExecutableManager}s.
+ */
+public interface IExecutableManagerListener {
+	// Nothing
+} // IExecutableManagerListener
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListenerSync.java
new file mode 100644
index 0000000..7dd0e7f
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/execution/IExecutableManagerListenerSync.java
@@ -0,0 +1,23 @@
+// IExecutableManagerListenerSync.java
+package org.eclipse.stem.jobs.execution;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is extended by classes that wish to be informed of changes to
+ * the state of an {@link ExecutableManager}s. Where the
+ * {@link ExecutableManager} is suspended while the listener receives the
+ * message.
+ */
+public interface IExecutableManagerListenerSync {
+	// Nothing
+} // IExecutableManagerListenerSync
\ No newline at end of file
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/Messages.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/Messages.java
new file mode 100644
index 0000000..1dbb577
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.jobs.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class retrieves messages for STEM simulation management preferences.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.jobs.preferences.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceConstants.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..267d269
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceConstants.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.jobs.preferences;
+
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public class PreferenceConstants {
+
+	/**
+	 * The preference for pausing after each simulation cycle
+	 */
+	public static final String SIMULATION_SLEEP_BOOLEAN = "cyclePause"; //$NON-NLS-1$
+
+	/**
+	 * This is the preference that specifies the number of seconds to pause the
+	 * simulation at the end of each cycle.
+	 */
+	public static final String SIMULATION_SLEEP_MILLISECONDS_INTEGER = "cyclePauseMilliSeconds"; //$NON-NLS-1$
+
+	/**
+	 * This is the preference that specifies that when the canonical graph is
+	 * created at the beginning of a <code>Simulation</code> that each
+	 * unresolved <code>Identifiable</code> should be reported in the error
+	 * log.
+	 */
+	public static final String REPORT_EACH_UNRESOLVED_IDENTIFIABLE_BOOLEAN = "reportEachUnresolvedIdentifiable"; //$NON-NLS-1$
+
+	/**
+	 * This is the preference to report dangling air transport edges
+	 */
+
+	public static final String REPORT_DANGLING_AIR_TRANPORT_EDGES_BOOLEAN = "reportDanglingAirTransportEdges";
+	
+	/**
+	 * This is the preference that specifies that when the canonical graph is
+	 * created at the beginning of a <code>Simulation</code> that if there are
+	 * unresolved <code>Identifiable</code>s then the number should be
+	 * reported in the error log.
+	 */
+	public static final String REPORT_NUMBER_OF_UNRESOLVED_IDENTIFIABLES_BOOLEAN = "reportNumberOfUnresolvedIdentifiable"; //$NON-NLS-1$
+	
+	/**
+	 * This is the preference enables or disables the use of caching in STEM.
+	 * Caching system can cache initialized {@link Scenario}s to save the time
+	 * it takes to initialize the {@link Scenario} when running the same scenario
+	 * more than once. 
+	 */
+	public static final String USE_SCENARIOS_CACHING_BOOLEAN = "useScenariosCaching"; //$NON-NLS-1$
+} // PreferenceConstants
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceInitializer.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..537a0af
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/PreferenceInitializer.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.jobs.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.jobs.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		store.setDefault(PreferenceConstants.SIMULATION_SLEEP_BOOLEAN,
+				SimulationManagementPreferencePage.DEFAULT_SIMULATION_SLEEP);
+		store
+				.setDefault(
+						PreferenceConstants.SIMULATION_SLEEP_MILLISECONDS_INTEGER,
+						SimulationManagementPreferencePage.DEFAULT_SIMULATION_SLEEP_MILLISECONDS);
+		store
+				.setDefault(
+						PreferenceConstants.REPORT_EACH_UNRESOLVED_IDENTIFIABLE_BOOLEAN,
+						SimulationManagementPreferencePage.DEFAULT_SIMULATION_REPORT_EACH_UNRESOLVED_IDENTIFIABLE);
+
+		store
+		.setDefault(
+				PreferenceConstants.REPORT_DANGLING_AIR_TRANPORT_EDGES_BOOLEAN,
+				SimulationManagementPreferencePage.DEFAULT_SIMULATION_REPORT_DANGLING_AIR_TRANPORT_EDGES);
+
+		store
+				.setDefault(
+						PreferenceConstants.REPORT_NUMBER_OF_UNRESOLVED_IDENTIFIABLES_BOOLEAN,
+						SimulationManagementPreferencePage.DEFAULT_SIMULATION_REPORT_NUMBER_UNRESOLVED_IDENTIFIABLE);
+		store
+				.setDefault(
+						PreferenceConstants.USE_SCENARIOS_CACHING_BOOLEAN,
+						SimulationManagementPreferencePage.DEFAULT_USE_SCENARIOS_CACHING);
+
+	} // initializeDefaultPreferences
+
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/SimulationManagementPreferencePage.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/SimulationManagementPreferencePage.java
new file mode 100644
index 0000000..8be6c13
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/SimulationManagementPreferencePage.java
@@ -0,0 +1,154 @@
+package org.eclipse.stem.jobs.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <samp>FieldEditorPreferencePage</samp>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class SimulationManagementPreferencePage extends
+		FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	/**
+	 * The minimum number of milliseconds that can be specified to pause each
+	 * simulation cycle
+	 */
+	public static final int MIN_SIMULATION_SLEEP_MILLISECONDS = 0;
+
+	/**
+	 * The maximum number of milliseconds that can be specified to pause each
+	 */
+	public static final int MAX_SIMULATION_SLEEP_MILLISECONDS = 3600000;
+
+	/**
+	 * The maximum number of digits allowed in cycle pause milliseconds
+	 */
+	public static final int MAX_SIMULATION_SLEEP_SECONDS_NUM_DIGITS = Integer
+			.toString(MAX_SIMULATION_SLEEP_MILLISECONDS).length();
+
+	/**
+	 * The default value for the simulation sleep preference.
+	 * 
+	 * @see #DEFAULT_SIMULATION_SLEEP
+	 */
+	public static final boolean DEFAULT_SIMULATION_SLEEP = true;
+
+	/**
+	 * This is the default value for the number of seconds to pause the
+	 * simulation on each cycle.
+	 * 
+	 * @see #DEFAULT_SIMULATION_SLEEP
+	 */
+	public static final int DEFAULT_SIMULATION_SLEEP_MILLISECONDS = 1000;
+
+	/**
+	 * This is the default value for reporting all unresolved
+	 * <code>Identifiables</code>. Value: <code>false</code>
+	 */
+	public static final boolean DEFAULT_SIMULATION_REPORT_EACH_UNRESOLVED_IDENTIFIABLE = false;
+
+	/**
+	 * This is the default value for reporting all unresolved
+	 * Air transport edges Value: <code>false</code>
+	 */
+
+	public static final boolean DEFAULT_SIMULATION_REPORT_DANGLING_AIR_TRANPORT_EDGES = false;
+	
+	/**
+	 * This is the default value for reporting the number of unresolved
+	 * <code>Identifiables</code>. Value: <code>true</code>
+	 */
+	public static final boolean DEFAULT_SIMULATION_REPORT_NUMBER_UNRESOLVED_IDENTIFIABLE = false;
+	
+	/**
+	 * This is the default value for caching. Value: <code>true</code>
+	 */
+	public static final boolean DEFAULT_USE_SCENARIOS_CACHING = true;
+
+	/**
+	 * Constructor
+	 */
+	public SimulationManagementPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("SMPPageTITLE")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	public void createFieldEditors() {
+
+		final BooleanFieldEditor cyclePauseFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.SIMULATION_SLEEP_BOOLEAN,
+				Messages.getString("SMPPagePause"), getFieldEditorParent()); //$NON-NLS-1$
+
+		final IntegerFieldEditor cyclePauseSecondsFieldEditor = new IntegerFieldEditor(
+				PreferenceConstants.SIMULATION_SLEEP_MILLISECONDS_INTEGER,
+				Messages.getString("SMPPageMSToPause"), getFieldEditorParent()); //$NON-NLS-1$
+		cyclePauseSecondsFieldEditor.setValidRange(
+				MIN_SIMULATION_SLEEP_MILLISECONDS, MAX_SIMULATION_SLEEP_MILLISECONDS);
+		cyclePauseSecondsFieldEditor
+				.setTextLimit(MAX_SIMULATION_SLEEP_SECONDS_NUM_DIGITS);
+		cyclePauseSecondsFieldEditor.setErrorMessage(Messages.getString("SMPPage0") //$NON-NLS-1$
+				+ MIN_SIMULATION_SLEEP_MILLISECONDS + Messages.getString("SMPPageTO") //$NON-NLS-1$
+				+ MAX_SIMULATION_SLEEP_MILLISECONDS + Messages.getString("SMPPageSECONDS")); //$NON-NLS-1$
+
+		final BooleanFieldEditor reportEachUnresolvedIdentifiableFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.REPORT_EACH_UNRESOLVED_IDENTIFIABLE_BOOLEAN,
+				Messages.getString("SMPPageReportUnresolved"), getFieldEditorParent()); //$NON-NLS-1$
+
+		final BooleanFieldEditor reportDanglingAirTransportEdgesFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.REPORT_DANGLING_AIR_TRANPORT_EDGES_BOOLEAN,
+				Messages.getString("SMPPageReportAirTransport"), getFieldEditorParent()); //$NON-NLS-1$
+
+		final BooleanFieldEditor reportNumberOfUnresolvedIdentifiablesFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.REPORT_NUMBER_OF_UNRESOLVED_IDENTIFIABLES_BOOLEAN,
+				Messages.getString("SMPPageReportNumUnresolved"), getFieldEditorParent()); //$NON-NLS-1$
+		
+		final BooleanFieldEditor useScenariosCaching = new BooleanFieldEditor(
+				PreferenceConstants.USE_SCENARIOS_CACHING_BOOLEAN,
+				Messages.getString("SMPPageCacheScenarios"), getFieldEditorParent()); //$NON-NLS-1$
+		
+		addField(cyclePauseFieldEditor);
+		addField(cyclePauseSecondsFieldEditor);
+		addField(reportEachUnresolvedIdentifiableFieldEditor);
+		addField(reportDanglingAirTransportEdgesFieldEditor);
+		addField(reportNumberOfUnresolvedIdentifiablesFieldEditor);
+		addField(useScenariosCaching);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")//$NON-NLS-1$
+			IWorkbench workbench) {
+		// Nothing
+	}
+
+} // SimulationManagementPreferencePage
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/messages.properties b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/messages.properties
new file mode 100644
index 0000000..7a4ab41
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/preferences/messages.properties
@@ -0,0 +1,22 @@
+# PreferenceMessages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+SMPPage0=Error: Valid range is: 
+SMPPageCacheScenarios=&Use scenarios caching
+SMPPageMSToPause=&MilliSeconds to pause each cycle
+SMPPagePause=&Pause simulation after each cycle
+SMPPageReportNumUnresolved=&Report the number of unresolved links
+SMPPageReportUnresolved=&Report all unresolved links
+SMPPageReportAirTransport=&Report unresolved air transport links
+SMPPageSECONDS=\ seconds
+SMPPageTITLE=Simulation Management Preferences
+SMPPageTO=\ to 
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulation.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulation.java
new file mode 100644
index 0000000..bec7044
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulation.java
@@ -0,0 +1,110 @@
+// ISimulation.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/**
+ * This interface is implemented by classes that represent {@link Simulation}s
+ * of {@link Scenario}s.
+ */
+public interface ISimulation extends IExecutable {
+
+	/**
+	 * @param sequenceNumber
+	 *            The sequence number of the {@link Simulation}
+	 */
+	void setSequenceNumber(int sequenceNumber);
+
+	/**
+	 * @return the state of the {@link Simulation}
+	 */
+	SimulationState getSimulationState();
+
+	/**
+	 * Start running the {@link Simulation}.
+	 */
+	void run();
+
+	/**
+	 * Pause the {@link Simulation}
+	 */
+	void pause();
+
+	/**
+	 * Reset the {@link Simulation}.
+	 */
+	void reset();
+
+	/**
+	 * Step the {@link Simulation} one step/cycle if it hasn't already ended
+	 */
+	void step();
+
+	/**
+	 * Stop the {@link Simulation}
+	 */
+	void stop();
+
+	/**
+	 * Wait for execution to complete.
+	 * 
+	 * @throws InterruptedException
+	 *             if the job is interrupted
+	 */
+	void join() throws InterruptedException;
+
+	/**
+	 * @return <code>true</code> if execution has been canceled.
+	 */
+	boolean cancel();
+
+	/**
+	 * @return the {@link Scenario} being simulated
+	 */
+	Scenario getScenario();
+
+	/**
+	 * Add a {@link ISimulationListener} to those that will be notified of
+	 * changes.
+	 * 
+	 * @param simulationListener
+	 */
+	void addSimulationListener(ISimulationListener simulationListener);
+
+	/**
+	 * Remove {@link ISimulationListener} to those that will be notified of
+	 * changes.
+	 * 
+	 * @param simulationListener
+	 */
+	void removeSimulationListener(ISimulationListener simulationListener);
+
+	/**
+	 * Add a {@link ISimulationListener} to those that will be notified of
+	 * changes.
+	 * 
+	 * @param simulationListener
+	 */
+	void addSimulationListenerSync(ISimulationListenerSync simulationListener);
+
+	/**
+	 * Remove {@link ISimulationListener} to those that will be notified of
+	 * changes.
+	 * 
+	 * @param simulationListener
+	 */
+	void removeSimulationListenerSync(ISimulationListenerSync simulationListener);
+
+} // ISimulation
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListener.java
new file mode 100644
index 0000000..1ef7032
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListener.java
@@ -0,0 +1,30 @@
+// ISimulationListener.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableListener;
+
+/**
+ * This interface is implemented by classes that want to listen to events
+ * generated by a {@link Simulation}.
+ * 
+ * @see ISimulation
+ */
+public interface ISimulationListener extends IExecutableListener {
+	/**
+	 * @param event
+	 *            the event that records what happened to the {@link Simulation}
+	 *            .
+	 */
+	void simulationChanged(SimulationEvent event);
+} // ISimulationListener
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListenerSync.java
new file mode 100644
index 0000000..441242e
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationListenerSync.java
@@ -0,0 +1,31 @@
+// ISimulationListener.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableListenerSync;
+
+/**
+ * This interface is implemented by classes that want to listen to events
+ * generated by a {@link Simulation}. The thread running the {@link Simulation}
+ * will wait until the {@link #simulationChangedSync(SimulationEvent)} method
+ * returns before it continues execution.
+ * 
+ * @see ISimulation
+ */
+public interface ISimulationListenerSync extends IExecutableListenerSync {
+	/**
+	 * @param event
+	 *            the event that records what happened to the {@link Simulation}.
+	 */
+	void simulationChangedSync(SimulationEvent event);
+} // ISimulationListenerSync
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListener.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListener.java
new file mode 100644
index 0000000..607b72b
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListener.java
@@ -0,0 +1,31 @@
+// ISimulationManagerListener.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableManagerListener;
+
+/**
+ * This interface is implemented by classes that want to be informed of events
+ * generated by a {@link SimulationManager}.
+ * 
+ * @see SimulationManager
+ * @see Simulation
+ */
+public interface ISimulationManagerListener extends IExecutableManagerListener {
+	/**
+	 * @param event
+	 *            the event that records what happened to the manager.
+	 */
+	void simulationsChanged(SimulationManagerEvent event);
+
+} // ISimulationManagerListener
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListenerSync.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListenerSync.java
new file mode 100644
index 0000000..5b1f6a0
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/ISimulationManagerListenerSync.java
@@ -0,0 +1,34 @@
+// ISimulationManagerListener.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.jobs.execution.IExecutableManagerListenerSync;
+
+/**
+ * This interface is implemented by classes that want to be informed of events
+ * generated by a {@link SimulationManager}. The thread running the
+ * {@link SimulationManager} will wait until the
+ * {@link #simulationsChangedSync(SimulationManagerEvent)} method returns before
+ * it continues execution.
+ * 
+ * @see SimulationManager
+ * @see Simulation
+ */
+public interface ISimulationManagerListenerSync extends
+		IExecutableManagerListenerSync {
+	/**
+	 * @param event
+	 *            the event that records what happened to the manager.
+	 */
+	void simulationsChangedSync(SimulationManagerEvent event);
+} // ISimulationManagerListenerSync
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Messages.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Messages.java
new file mode 100644
index 0000000..8752374
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.jobs.simulation.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string that matches the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Simulation.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Simulation.java
new file mode 100644
index 0000000..7fcabbf
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/Simulation.java
@@ -0,0 +1,596 @@
+// Simulation.java

+package org.eclipse.stem.jobs.simulation;

+

+/*******************************************************************************

+ * Copyright (c) 2006, 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.text.MessageFormat;

+import java.util.ArrayList;

+import java.util.Collections;

+import java.util.List;

+import java.util.concurrent.CopyOnWriteArrayList;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Preferences;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;

+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.impl.AdapterImpl;

+import org.eclipse.jface.dialogs.ErrorDialog;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.core.scenario.Scenario;

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+import org.eclipse.stem.core.scenario.impl.ScenarioImpl;

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+import org.eclipse.stem.core.sequencer.Sequencer;

+import org.eclipse.stem.jobs.Activator;

+import org.eclipse.stem.jobs.execution.Executable;

+import org.eclipse.stem.jobs.preferences.PreferenceConstants;

+import org.eclipse.stem.jobs.preferences.SimulationManagementPreferencePage;

+import org.eclipse.swt.widgets.Display;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PlatformUI;

+

+/**

+ * This class implements the main simulation logic of the STEM system. It runs

+ * in the background as a separate {@link Job} in eclipse.

+ */

+public class Simulation extends Executable implements ISimulation, IPropertyChangeListener {

+	/**

+	 * The collection of {@link ISimulationListener}'s waiting to be told about

+	 * {@link Simulation}'s events.

+	 */

+	// I think this should really be a {@link CopyOnWriteArrayList} like {@link

+	// #listenersSync}

+	private final List<ISimulationListener> listeners = Collections

+			.synchronizedList(new ArrayList<ISimulationListener>());

+

+	/**

+	 * The collection of {@link IBatchManagerListenerSync}'s waiting to be told

+	 * about {@link BatchManagerEvent}'s

+	 */

+	private final List<ISimulationListenerSync> listenersSync = new CopyOnWriteArrayList<ISimulationListenerSync>();

+

+	/**

+	 * If <code>true</code> then the {@link Simulation} will sleep for a

+	 * specified time period at the end of each simulation cycle.

+	 */

+	public boolean simulationSleep = SimulationManagementPreferencePage.DEFAULT_SIMULATION_SLEEP;

+

+	/**

+	 * If {@link simulationSleep} is <code>true</code>, then this is the number

+	 * of milliseconds at the end of each cycle that the {@link Simulation}

+	 * should sleep.

+	 */

+	private int sleepMilliseconds = SimulationManagementPreferencePage.MIN_SIMULATION_SLEEP_MILLISECONDS;

+

+	/**

+	 * The current state of the {@link Simulation}.

+	 */

+	private SimulationState simulationState;

+

+	/**

+	 * This is the {@link Scenario} being simulated. It contains all of the

+	 * {@link SimulationState} information.

+	 */

+	private Scenario scenario = null;

+	

+	private Adapter adapter = null; 

+

+	/**

+	 * This flag controls the execution of the {@link Simulation}. If it is

+	 * <code>false</code> the {@link Simulation} stops running (sleeps) on the

+	 * next cycle.

+	 * 

+	 * @see #pause()

+	 */

+	private boolean keepRunning = true;

+

+	/**

+	 * This flag controls the state of the {@link Simulation}. If

+	 * <code>true</code> then the {@link Simulation} is stopped if it is running

+	 * and the {@link Scenario} is reset to its initial state. The

+	 * {@link Simulation} does NOT resume running after the reset.

+	 * 

+	 * @see #resetSimulation()

+	 */

+	private boolean reset = false;

+

+	/**

+	 * This flag indicates that the {@link Simulation} should complete a single

+	 * step (cycle) and then pause.

+	 */

+	private boolean stepping = false;

+

+	/**

+	 * If <code>true</code> then the {@link Simulation} is stopping

+	 */

+	private boolean stopping = false;

+

+	ScenarioItemProviderAdapterFactory scenarioItemProviderAdapterFactory = new ScenarioItemProviderAdapterFactory();

+	/**

+	 * Constructor

+	 * 

+	 * @param title

+	 *            the title of the {@link Simulation}.

+	 * @param sequenceNumber

+	 *            the sequence number of the {@link Simulation}

+	 */

+	public Simulation(final String title, final int sequenceNumber) {

+		super(title == null ? "" : title, sequenceNumber); //$NON-NLS-1$

+		simulationState = SimulationState.PAUSED;

+	} // Simulation

+

+	/**

+	 * Constructor

+	 * 

+	 * @param scenario

+	 *            the {@link Scenario} to simulate

+	 * @param sequenceNumber

+	 *            the sequence number of the {@link Simulation}

+	 */

+	public Simulation(final Scenario scenario, final int sequenceNumber) {

+		this(scenario.produceTitle(), sequenceNumber);

+		this.scenario = scenario;

+		setPreferences();

+

+		Activator.getDefault().getPluginPreferences().addPropertyChangeListener(this);

+	} // Simulation

+

+	/**

+	 * Set the preferences.

+	 * 

+	 * @see #simulationSleep

+	 * @see #sleepMilliseconds

+	 */

+	protected void setPreferences() {

+		final Preferences preferences = Activator.getDefault()

+				.getPluginPreferences();

+		simulationSleep = preferences

+				.getBoolean(PreferenceConstants.SIMULATION_SLEEP_BOOLEAN);

+		sleepMilliseconds = preferences

+				.getInt(PreferenceConstants.SIMULATION_SLEEP_MILLISECONDS_INTEGER);

+		ScenarioImpl.reportEachUnresolvedIdentifiable = preferences

+				.getBoolean(PreferenceConstants.REPORT_EACH_UNRESOLVED_IDENTIFIABLE_BOOLEAN);

+		ScenarioImpl.reportDanglingAirTransportEdges = preferences

+			.getBoolean(PreferenceConstants.REPORT_DANGLING_AIR_TRANPORT_EDGES_BOOLEAN);

+

+		ScenarioImpl.reportNumberofUnresolvedIdentifiables = preferences

+				.getBoolean(PreferenceConstants.REPORT_NUMBER_OF_UNRESOLVED_IDENTIFIABLES_BOOLEAN);

+

+	} // setPerferences

+

+	/**

+	 * @return the state of the {@link Simulation}

+	 */

+	public final SimulationState getSimulationState() {

+		return simulationState;

+	} // getSimulationState

+

+	/**

+	 * @param simulationState

+	 *            the {@link SimulationState} to set

+	 */

+	private final void setSimulationState(final SimulationState simulationState) {

+		this.simulationState = simulationState;

+		fireSimulationChanged(simulationState);

+	} // setSimulationState

+

+	/**

+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)

+	 */

+	@Override

+	protected IStatus run(final IProgressMonitor monitor) {

+		IStatus retValue = Status.OK_STATUS;

+

+		try {

+			setSimulationState(SimulationState.RUNNING);

+

+			keepRunning = true;

+

+			// Did we get a request to reset?

+			if (reset) {

+				// Yes

+				scenario.reset();

+				reset = false;

+			}

+

+			assert scenario.sane();

+

+			monitor.beginTask(scenario.produceTitle(), TOTAL_WORK);

+			final Sequencer sequencer = scenario.getSequencer();

+

+			// Figure out how much work has been performed for this scenario

+			// already.

+			// $ANALYSIS-IGNORE

+			monitor.worked((int) sequencer.getWorkComplete());

+			final Simulation self = this;

+			adapter = new AdapterImpl() {

+				/**

+				   * @override

+				   */

+				  @Override

+				public void notifyChanged(Notification msg)

+				  {

+					  Scenario scenario = (Scenario)msg.getNotifier();

+					  switch(msg.getFeatureID(Scenario.class)) {

+					  	case ScenarioPackage.SCENARIO__PROGRESS:

+					  		SimulationEvent event = new SimulationEvent(self, SimulationState.RUNNING, scenario.getProgress());

+					  		self.fireSimulationChangedEvent(event);

+					  		break;

+					  }

+				    

+				  }

+			}; 

+			scenario.eAdapters().add(adapter);

+			//ScenarioItemProvider sip = (ScenarioItemProvider)scenarioItemProviderAdapterFactory.adapt(this, ScenarioItemProvider.class);

+			

+			//scenarioItemProviderAdapterFactory.addListener(this); // ugh

+			

+			// Does the sequencer say we've finished before we've started?

+			if (!sequencer.isTimeToStop()) {

+				// No

+				while (keepRunning && !reset) {

+					final STEMTime currentTime = sequencer.getCurrentTime();

+					monitor.subTask(currentTime.toString());

+

+					// Attempt one step (cycle) in the simulation

+					try {

+						

+						boolean success = scenario.step();

+						if(!success) {keepRunning = false;retValue = Status.CANCEL_STATUS;}

+						assert scenario.sane();

+

+						// To sleep, per chance to dream?

+						if (simulationSleep) {

+							// Yes

+							Thread.sleep(sleepMilliseconds);

+						}

+

+						monitor.worked(sequencer.getWorkIncrement());

+

+						// We stop when the sequencer tells us it is time

+						if (sequencer.isTimeToStop()) {

+							keepRunning = false;

+							retValue = Status.OK_STATUS;

+						}

+						// Or, if things are canceled

+						else if (monitor.isCanceled()) {

+							keepRunning = false;

+							retValue = Status.CANCEL_STATUS;

+						}

+						// Or, if we're stepping

+						else if (stepping) {

+							keepRunning = false;

+						}

+

+					} catch (final Exception e) {

+						// Problem. We're out of here.

+						handleException(scenario, getName(), true, e);

+						keepRunning = false;

+						stopping = true;

+						retValue = Status.CANCEL_STATUS;

+					}

+					setSimulationState(SimulationState.COMPLETED_CYCLE);

+				} // while keepRunning

+

+				// Was it time to stop?

+				if (sequencer.isTimeToStop() && retValue == Status.OK_STATUS) {

+					// Yes

+					setSimulationState(SimulationState.COMPLETED_SEQUENCE);

+				}

+			} // if NOT time to stop before we start

+			else {

+				// Yes

+				// The sequencer says we've finished before we started

+				Activator.logInformation(MessageFormat.format(Messages

+						.getString("Sim.Time_Error"), sequencer

+						.getCurrentTime().toString(), sequencer.getEndTime()

+						.toString()), null);

+			} // else

+

+			// Did we get a request to reset?

+			if (reset) {

+				// Yes

+				scenario.reset();

+				reset = false;

+				setSimulationState(SimulationState.RESET);

+			}

+

+			monitor.done();

+

+		} catch (final RuntimeException e) {

+			handleException(scenario, getName(), true, e);

+			stopping = true;

+		} // catch RuntimeException

+

+		// Are we stopping or just pausing?

+		setSimulationState(stopping ? SimulationState.STOPPED

+				: SimulationState.PAUSED);

+

+		return retValue;

+

+	} // run

+

+	/**

+	 * Do the processing required to handle a {@link Exception}

+	 * 

+	 * @param scenario

+	 *            the {@link Scenario} that caused the {@link Exception}

+	 * @param name

+	 *            the name to use in error messages that identifies the source

+	 *            of the {@link Scenario}

+	 * @param promptUser

+	 *            if <code>true</code> then present the user with a dialog box

+	 *            explaining the message.

+	 * @param e

+	 *            the {@link Exception}

+	 */

+	static public void handleException(final Scenario scenario,

+			final String name, final boolean promptUser, final Exception e) {

+

+		// We can get a exception if the user tries to run a Scenario

+		// that doesn't have a Sequencer or Model specified. Or, we can get one

+		// because of some other internal error.

+

+		String tempErrorMessage = "";

+

+		boolean logIt = false;

+

+		// Potential missing Sequencer or Model?

+		if (e instanceof NullPointerException) {

+			// Yes

+			// Does the Scenario have a Sequencer?

+			if (scenario.getSequencer() == null) {

+				// No

+				tempErrorMessage = MessageFormat.format(Messages

+						.getString("Sim.MissingSeq"), new Object[] { name });

+			} // if missing a sequencer

+			// How about a model?

+			else if (scenario.getModel() == null) {

+				// No

+				tempErrorMessage = MessageFormat.format(Messages

+						.getString("Sim.MissingModel"), new Object[] { name });

+			} // if missing model

+			else {

+				// No

+				// Just some other NPE

+				logIt = true;

+				tempErrorMessage = MessageFormat.format(Messages

+						.getString("Sim.IErr"), new Object[] { name });

+			} // else

+		} // if NullPointerException

+		else {

+			// No

+			logIt = true;

+			tempErrorMessage = MessageFormat.format(Messages

+					.getString("Sim.IErr"), new Object[] { name });

+		} // else

+

+		final String errorMessage = tempErrorMessage;

+

+		// Log it?

+		if (logIt || !promptUser) {

+			// Yes

+			Activator.logError(errorMessage, e);

+		} // if

+

+		// Prompt the user?

+		if (promptUser) {

+			// Yes

+			try {

+				Display.getDefault().syncExec(new Runnable() {

+					public void run() {

+						try {

+							final IWorkbenchWindow window = PlatformUI

+									.getWorkbench().getActiveWorkbenchWindow();

+							final IStatus warning = new Status(IStatus.WARNING,

+									Activator.PLUGIN_ID, 1, errorMessage, null);

+							ErrorDialog.openError(window.getShell(), null, null,

+									warning);

+						} catch(Exception e) {

+							// If we get this exception, it is because we're not running in

+							// eclipse.

+						}

+					} // run

+				});

+			} catch (final Error ncdfe) {

+				// Empty

+			} // catch

+		} // if

+	} // handleRuntimeException

+

+	/**

+	 * Start running the {@link Simulation}.

+	 */

+	public final void run() {

+		stepping = false;

+		schedule();

+	} // run

+

+	/**

+	 * Pause the {@link Simulation}

+	 */

+	public final void pause() {

+		keepRunning = false;

+	} // pause

+

+	/**

+	 * Reset the {@link Simulation}.

+	 */

+	public final void reset() {

+		reset = true;

+		stepping = false;

+		// Is the simulation currently paused?

+		if (getSimulationState().equals(SimulationState.PAUSED)) {

+			// Yes

+			scenario.reset();

+			reset = false;

+			setSimulationState(SimulationState.RESET);

+			setSimulationState(SimulationState.PAUSED);

+		} // if

+	} // reset

+

+	/**

+	 * Step the {@link Simulation} one step/cycle if it hasn't already ended

+	 */

+	public final void step() {

+		stepping = true;

+		schedule();

+	} // stepSimulation

+

+	/**

+	 * Stop the {@link Simulation}.

+	 */

+	public final void stop() {

+		stopping = true;

+		keepRunning = false;

+		// We need to set our state here, which will notify our listeners,

+		// because we may not be scheduled and so the run(IProgressMonitor)

+		// method may not be executing and so would not set the state to STOPPED

+		// (and thus notify listeners)

+		setSimulationState(SimulationState.STOPPED);

+	} // stepSimulation

+

+	/**

+	 * @see org.eclipse.stem.jobs.execution.IExecutable#isRunning()

+	 */

+	public boolean isRunning() {

+		return !simulationState.equals(SimulationState.PAUSED);

+	}

+

+	/**

+	 * @return the {@link Scenario}

+	 */

+	public final Scenario getScenario() {

+		return this.scenario;

+	}

+

+	/**

+	 * @param scenario

+	 *            the {@link Scenario} to set

+	 */

+	protected final void setScenario(final Scenario scenario) {

+		this.scenario = scenario;

+	}

+

+	/**

+	 * @see org.eclipse.stem.jobs.simulation.ISimulation#addSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)

+	 */

+	public void addSimulationListener(final ISimulationListener listener) {

+		if (!listeners.contains(listener)) {

+			listeners.add(listener);

+		}

+	} // addSimulationListener

+

+	/**

+	 * @see org.eclipse.stem.jobs.simulation.ISimulation#addSimulationListenerSync(org.eclipse.stem.jobs.simulation.ISimulationListenerSync)

+	 */

+	public void addSimulationListenerSync(final ISimulationListenerSync listener) {

+		if (!listenersSync.contains(listener)) {

+			listenersSync.add(listener);

+		}

+	} // addSimulationListenerSync

+

+	/**

+	 * @see org.eclipse.stem.jobs.simulation.ISimulation#removeSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)

+	 */

+	public void removeSimulationListener(final ISimulationListener listener) {

+		listeners.remove(listener);

+	} // removeSimulationListener

+

+	/**

+	 * @see org.eclipse.stem.jobs.simulation.ISimulation#removeSimulationListenerSync(org.eclipse.stem.jobs.simulation.ISimulationListenerSync)

+	 */

+	public void removeSimulationListenerSync(

+			final ISimulationListenerSync listener) {

+		listenersSync.remove(listener);

+	} // removeSimulationListenerSync

+

+	/**

+	 * Tell the listeners about the change in the {@link Simulation}'s state

+	 * 

+	 * @param simulationState

+	 *            the new {@link SimulationState} of the {@link Simulation}

+	 */

+	private void fireSimulationChanged(final SimulationState simulationState) {

+		final SimulationEvent event = new SimulationEvent(this, simulationState);

+		fireSimulationChangedEvent(event);

+	} // fireSimulationManagerChanged

+	

+	/**

+	 * Tell the listeners about the change in the {@link Simulation}'s state

+	 * 

+	 * @param simulationState

+	 *            the new {@link SimulationState} of the {@link Simulation}

+	 */

+	void fireSimulationChangedEvent(final SimulationEvent event) {

+		

+		for (final ISimulationListenerSync listener : listenersSync) {

+			listener.simulationChangedSync(event);

+		} // for

+		

+		for (final ISimulationListener listener : listeners) {

+			listener.simulationChanged(event);

+		} // for

+	} // fireSimulationManagerChanged

+	

+	/**

+	 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)

+	 */

+	public void propertyChange(@SuppressWarnings("unused") final PropertyChangeEvent event) {

+		setPreferences();

+	} // propertyChange

+

+	/**

+	 * @return the title of the {@link Scenario}

+	 */

+	@Override

+	public String toString() {

+		return scenario.produceTitle();

+	}

+	

+	/**

+	 * interruptRequested. Return true if this listener requests 

+	 * that a decorator stops updating labels

+	 * 

+	 * @return boolean True if stop

+	 */

+	

+	public boolean interruptRequested() {

+		return (!this.keepRunning && stopping);

+	}

+	

+	public void destroy() {

+		List<ISimulationListener> tempList = new ArrayList<ISimulationListener>();

+		tempList.addAll(listeners);

+		for (ISimulationListener listener:tempList) {

+			this.removeSimulationListener(listener);

+		}

+		listeners.clear();

+		List<ISimulationListenerSync> tempListSync = new ArrayList<ISimulationListenerSync>();

+		tempListSync.addAll(listenersSync);

+		for (ISimulationListenerSync listener:tempListSync) {

+			this.removeSimulationListenerSync(listener);

+		}

+		listenersSync.clear();

+		tempList.clear();

+		tempListSync.clear();

+		

+		scenario.eAdapters().remove(adapter);

+		

+		Activator.getDefault().getPluginPreferences().removePropertyChangeListener(this);

+	}

+

+} // Simulation

diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationCaching.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationCaching.java
new file mode 100644
index 0000000..4f8fff3
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationCaching.java
@@ -0,0 +1,100 @@
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.preferences.PreferenceConstants;
+
+/**
+ * This class implements caching of {@link Scenario}s.
+ * 
+ * TODO Why isn't this called ScenarioCaching?
+ */
+public class SimulationCaching {
+
+	/**
+	 * Singleton instance of caching manager
+	 */
+	public final static SimulationCaching INSTANCE = new SimulationCaching();
+
+	/**
+	 * Caching uses a {@link WeakHashMap} object to store Scenarios. In the
+	 * future this can be replaced with a smarter caching mechanism.
+	 */
+	private final Map<URI, Scenario> cachedScenarios = new WeakHashMap<URI, Scenario>();
+
+	private boolean toUseCaching = false;
+
+	/**
+	 * Private constructor as this is a Singleton object.
+	 */
+	private SimulationCaching() {
+		setPreferences();
+
+		Activator.getDefault().getPluginPreferences()
+				.addPropertyChangeListener(new IPropertyChangeListener() {
+					public void propertyChange(
+							@SuppressWarnings("unused") final PropertyChangeEvent event) {
+						setPreferences();
+					} // propertyChange
+				} // IPropertyChangeListener
+				);
+	}
+
+	/**
+	 * @param scenarioURI
+	 * @return <code>true</code> if the {@link Scenario} is in the cache
+	 */
+	public boolean isScenarioInCache(URI scenarioURI) {
+		return cachedScenarios.containsKey(scenarioURI);
+	}
+
+	/**
+	 * @param scenarioURI
+	 * @return the {@link Scenario} identified by the {@link URI} from the
+	 *         cache, or <code>null</code> if not found.
+	 */
+	public Scenario getCachedScenario(URI scenarioURI) {
+		return cachedScenarios.get(scenarioURI);
+	}
+
+	/**
+	 * @param scenario
+	 */
+	public void addScenarioToCache(Scenario scenario) {
+		if (scenario.getURI() == null)
+			return;
+		cachedScenarios.put(scenario.getURI(), scenario);
+	}
+
+	/**
+	 * @return <code>true</code> if caching is enabled.
+	 */
+	public boolean toUseCaching() {
+		return toUseCaching;
+	}
+
+	protected void setPreferences() {
+		final Preferences preferences = Activator.getDefault()
+				.getPluginPreferences();
+		toUseCaching = preferences
+				.getBoolean(PreferenceConstants.USE_SCENARIOS_CACHING_BOOLEAN);
+	} // setPerferences
+}
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEvent.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEvent.java
new file mode 100644
index 0000000..cd3d8a0
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEvent.java
@@ -0,0 +1,91 @@
+// SimulationEvent.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.EventObject;
+
+
+/**
+ * This class represents an event that has occurred in the operation of the
+ * Simulation
+ */
+public class SimulationEvent extends EventObject {
+
+	private SimulationState simulationState;
+	private double iterationProgress = 0.0;
+	
+	/**
+	 * @param source
+	 *            the Simulation the generated the event
+	 * @param simulationState
+	 *            the new state of the simulation
+	 */
+	public SimulationEvent(ISimulation source,
+			final SimulationState simulationState) {
+		super(source);
+		this.simulationState = simulationState;
+		this.iterationProgress = 0.0;
+	} // SimulationEvent
+
+	/**
+	 * @param source
+	 *            the Simulation the generated the event
+	 * @param simulationState
+	 *            the new state of the simulation
+	 * @param iprogress Iteration progress
+	 */
+	public SimulationEvent(ISimulation source,
+			final SimulationState simulationState, 
+			double iprogress) {
+		super(source);
+		this.simulationState = simulationState;
+		this.iterationProgress = iprogress;
+	} // SimulationEvent
+	
+	/**
+	 * Generated serialization ID
+	 */
+	private static final long serialVersionUID = 7512868955841962331L;
+
+	/**
+	 * @return the new state of the simulation
+	 */
+	public final SimulationState getSimulationState() {
+		return simulationState;
+	}
+
+	/**
+	 * @return the simulation that is the source of the event
+	 */
+	public ISimulation getSimulation() {
+		return (ISimulation) getSource();
+	}
+
+	/**
+	 * @return double The progress of the current iteration (0-1)
+	 */
+	public double getIterationProgress() {
+		return iterationProgress;
+	}
+	
+	/**
+	 * @see java.util.EventObject#toString()
+	 */
+	@Override
+	public String toString() {
+		return simulationState.toString();
+	}
+	
+	
+
+} // SimulationEvent
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManager.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManager.java
new file mode 100644
index 0000000..0f6d21e
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManager.java
@@ -0,0 +1,837 @@
+// SimulationManager.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.execution.ExecutableManager;
+import org.eclipse.stem.jobs.preferences.PreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * This class manages the life-cycle of active {@link Simulation}s. There is a
+ * singleton instance of the manager that is referenced by other parts of the
+ * system to manage {@link Simulation}. It creates {@link Simulation} instances
+ * from {@link Scenario} instances and can obtain {@link Scenario} instances
+ * from file URI's or from {@link IConfigurationElement}'s. It maintains a
+ * collection of all of the active {@link Simulation}s in the system and
+ * generates {@link SimulationEvent}'s whenever a {@link Simulation} is added to
+ * that collection or removed.
+ * <p>
+ * The {@link SimulationManager} maintains a sequence number and assigns
+ * successive values of that number to the {@link Simulation} instances it
+ * creates.
+ */
+public class SimulationManager extends ExecutableManager implements
+		ISimulationListener {
+
+	/**
+	 * Singleton instance of the manager
+	 */
+	private static SimulationManager INSTANCE = null;
+
+	/**
+	 * This is the sequence number assigned to each successive
+	 * {@link Simulation} instance the manager creates.
+	 */
+	private static int sequenceNumber = 0;
+
+	/**
+	 * The collection of {@link ISimulationManagerListener}'s waiting to be told
+	 * about {@link SimulationManagerEvent}s
+	 */
+	private final List<ISimulationManagerListener> listeners = new CopyOnWriteArrayList<ISimulationManagerListener>();
+
+	/**
+	 * The collection of {@link ISimulationManagerListenerSync}'s waiting to be
+	 * told about {@link SimulationManagerEvent}s
+	 */
+	private final List<ISimulationManagerListenerSync> listenersSync = new CopyOnWriteArrayList<ISimulationManagerListenerSync>();
+
+	/**
+	 * Constant empty array.
+	 */
+	public static final ISimulation[] NONE = new Simulation[] {};
+
+	/**
+	 * This is the collection of active {@link Simulation} jobs
+	 */
+	private List<ISimulation> activeSimulations = null;
+
+	/**
+	 * Constructor
+	 */
+	private SimulationManager() {
+		activeSimulations = new ArrayList<ISimulation>();
+
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
+				ScenarioPackage.eNAME, new XMIResourceFactoryImpl());
+	} // SimulationManager
+
+	/**
+	 * @return the singleton instance of the model
+	 */
+	public static final SimulationManager getManager() {
+		if (INSTANCE == null) {
+			INSTANCE = new SimulationManager();
+		}
+		return INSTANCE;
+	} // getModel
+
+	/**
+	 * Return the next simulation sequence number and increment the value.
+	 * 
+	 * @return the next simulation sequence number
+	 */
+	synchronized private static final int getAndIncrementSimulationSequenceNumber() {
+		return sequenceNumber++;
+	} // getAndIncrementSimulationSequenceNumber
+
+	/**
+	 * This is used for testing purposes to reset the state of the model.
+	 */
+	public static final void resetSimulationManager() {
+		INSTANCE = null;
+		sequenceNumber = 0;
+	} // resetSimulationManager
+
+	/**
+	 * @return the active {@link Simulation}s
+	 */
+	public final List<ISimulation> getActiveSimulations() {
+		return activeSimulations;
+	} // getActiveSimulations
+
+	/**
+	 * Add a {@link Simulation} to the collection of active {@link Simulation}s.
+	 * 
+	 * @param simulation
+	 *            the {@link ISimulation} to add
+	 */
+	private final void addActiveSimulation(final ISimulation simulation) {
+		activeSimulations.add(simulation);
+		simulation.addSimulationListener(this);
+		fireSimulationManagerChanged(new ISimulation[] { simulation }, NONE);
+	} // addActiveSimulation
+
+	/**
+	 * Remove an {@link ISimulation} from the collection of active
+	 * {@link ISimulation}s.
+	 * 
+	 * @param simulation
+	 *            the {@link ISimulation} to remove
+	 */
+	private final void removeActiveSimulation(final ISimulation simulation) {
+		activeSimulations.remove(simulation);
+		// We're no longer a listener
+		simulation.removeSimulationListener(this);
+		fireSimulationManagerChanged(NONE, new ISimulation[] { simulation });
+	} // removeActiveSimulation
+
+	/**
+	 * Create a {@link ISimulation} that's ready to run.
+	 * 
+	 * @param configurationElement
+	 *            a {@link IConfigurationElement} that specifies the details of
+	 *            a serialized {@link Scenario} that is in a plug-in
+	 * @param monitor
+	 *            a progress monitor
+	 * @return an {@link ISimulation} constructed from the
+	 *         {@link IConfigurationElement}, or null if there was a problem.
+	 * 
+	 * @Deprecated
+	 */
+	public ISimulation createSimulation(
+			final IConfigurationElement configurationElement,
+			final IProgressMonitor monitor) {
+		ISimulation retValue = null;
+
+		final String scenarioURIString = configurationElement
+				.getAttribute(DublinCore.IDENTIFIER);
+
+		try {
+			retValue = createSimulation(URI.createURI(scenarioURIString),
+					monitor);
+		} catch (final Exception e) {
+			Activator
+					.logError(
+							MessageFormat
+									.format(
+											Messages
+													.getString("SimMgr.Deserialization_Error"), scenarioURIString), e); //$NON-NLS-1$
+			retValue = null;
+		}
+		return retValue;
+	} // createSimulation
+
+	/**
+	 * Create an {@link ISimulation} that's ready to run.
+	 * 
+	 * @param scenarioURI
+	 *            the URI of a serialized {@link Scenario}
+	 * @param monitor
+	 *            a progress monitor
+	 * @return an {@link ISimulation} constructed from the URI, or
+	 *         <code>null</code> if there was a problem.
+	 *         
+	 * @Deprecated
+	 */
+	public ISimulation createSimulation(final URI scenarioURI,
+			final IProgressMonitor monitor) {
+		ISimulation retValue = null;
+
+			try {
+				
+					// Read scenario
+				monitor.subTask("Reading Scenario from file");
+				Scenario simulationScenario = (Scenario)Utility.getIdentifiable(scenarioURI);
+				
+				monitor.subTask("Creating Simulation from Scenario");
+				retValue = createSimulation(simulationScenario, monitor);
+			} catch (final Exception e) {
+				Activator
+						.logError(
+								MessageFormat
+										.format(
+												Messages
+														.getString("SimMgr.Deserialization_Error"), scenarioURI.toString()), e); //$NON-NLS-1$
+			retValue = null;
+		}
+		return retValue;
+	} // createSimulation
+
+	/**
+	 * Create a {@link ISimulation} from a {@link Scenario} instance.
+	 * 
+	 * @param scenario
+	 *            the {@link Scenario} to simulate
+	 * @param monitor 
+	 * 			  Progress monitor
+	 * @return a {@link ISimulation} that's ready to run.
+	 */
+	public ISimulation createSimulation(final Scenario scenario, final IProgressMonitor monitor) {
+		ISimulation retValue = null;
+		try {
+			final Preferences preferences = 
+				org.eclipse.stem.jobs.Activator.getDefault()
+					.getPluginPreferences();
+			boolean useCache = preferences
+					.getBoolean(PreferenceConstants.USE_SCENARIOS_CACHING_BOOLEAN);
+
+			Scenario simulationScenario = null;
+			
+			if (useCache) {
+				if (SimulationCaching.INSTANCE.isScenarioInCache(scenario.getURI())) {
+					simulationScenario = SimulationCaching.INSTANCE.getCachedScenario(scenario.getURI());
+					boolean running = false;
+					for(ISimulation sim : getActiveSimulations()) {
+						if(sim.getScenario().equals(simulationScenario)) {
+							// The scenario is already running. Copy the whole scenario before resetting
+							Scenario newSimulation = null;
+							newSimulation = (Scenario)EcoreUtil.copy(simulationScenario);
+							if(simulationScenario.getModel() != null) newSimulation.setModel((Model)EcoreUtil.copy(simulationScenario.getModel()));
+							if(simulationScenario.getSequencer() != null) newSimulation.setSequencer((Sequencer)EcoreUtil.copy(simulationScenario.getSequencer()));
+							running = true;
+							break;
+						}
+					}
+					if(!running)simulationScenario.reset(); // safe since canonical graph is set 
+				}
+				else {
+					// Read scenario
+					// Add to cache
+					SimulationCaching.INSTANCE.addScenarioToCache(scenario);
+				}
+				
+			}
+			
+			final Simulation simulation = new Simulation(scenario,
+					getAndIncrementSimulationSequenceNumber());
+			
+			if(scenario.getCanonicalGraph() == null) 
+				scenario.initialize(); // needed for preferences ...
+			else scenario.reset();
+	
+			simulation.setPriority(Job.LONG);
+			retValue = new SimulationAdapter(simulation);
+
+			addActiveSimulation(retValue);
+		} catch (final RuntimeException e) {
+			// We could get an exception here if the Scenario doesn't have
+			// a Sequencer or Model which would cause problems when trying to
+			// initialize
+			Simulation.handleException(scenario, scenario.getDublinCore()
+					.getTitle(), true, e);
+			retValue = null;
+		}
+		return retValue;
+	} // createSimulation
+
+	/**
+	 * Create a {@link ISimulation} from a {@link IConfigurationElement} and
+	 * then start it running.
+	 * 
+	 * @param configurationElement
+	 *            a {@link IConfigurationElement} that specifies the details of
+	 *            a serialized {@link Scenario} that is in a plug-in
+	 * 
+	 *@Deprecated
+	 */
+	public void createAndRunSimulation(
+			final IConfigurationElement configurationElement) {
+		new Job(Messages.getString("SimMgr.Start_Sim")) { //$NON-NLS-1$
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				monitor.beginTask(Messages.getString("SimMgr.CrtSim"),
+						IProgressMonitor.UNKNOWN);
+				try {
+					final ISimulation simulation = createSimulation(
+							configurationElement, monitor);
+					monitor.subTask(Messages.getString("SimMgr.Run"));
+					simulation.run();
+				} // try
+				catch (final NullPointerException e) {
+					// The error was logged in createSimulation
+					monitor.done();
+				}
+				monitor.done();
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndRunSimulation
+
+	/**
+	 * Create a {@link ISimulation} from a {@link Scenario} instance and then
+	 * start it running.
+	 * 
+	 * @param scenario
+	 *            the {@link Scenario} to be simulated
+	 */
+	public void createAndRunSimulation(final Scenario scenario) {
+		new Job(Messages.getString("SimMgr.Start_Sim")) {
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				try {
+					final ISimulation simulation = createSimulation(scenario, monitor);
+					monitor.subTask(Messages.getString("SimMgr.Run"));
+					simulation.run();
+				} catch (final Exception e) {
+					// The error was logged in createSimulation
+					monitor.done();
+				} // catch Exception
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndRunSimulation
+
+	
+	/**
+	 * Create an {@link ISimulation} from a {@link IConfigurationElement} and
+	 * then start it running.
+	 * 
+	 * @param configurationElement
+	 *            an {@link IConfigurationElement} that specifies the details of
+	 *            a serialized {@link Scenario} that is in a plug-in
+	 * 
+	 * @Deprecated
+	 */
+	public void createAndStepSimulation(
+			final IConfigurationElement configurationElement) {
+		new Job(Messages.getString("SimMgr.Start_Sim")) { //$NON-NLS-1$
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				try {
+					final ISimulation simulation = createSimulation(
+							configurationElement, monitor);
+					monitor.subTask(Messages.getString("SimMgr.Run"));
+					simulation.step();
+				} // try
+				catch (final NullPointerException e) {
+					// The error was logged in createSimulation
+					monitor.done();
+				}
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndStepSimulation
+	
+	/**
+	 * Create an {@link ISimulation} from a {@link Scenario} instance and then
+	 * start it running.
+	 * 
+	 * @param scenario
+	 *            the {@link Scenario} to be simulated
+	 */
+	public void createAndStepSimulation(final Scenario scenario) {
+		new Job(Messages.getString("SimMgr.Start_Sim")) { //$NON-NLS-1$
+			@Override
+			protected IStatus run(final IProgressMonitor monitor) {
+				try {
+					final ISimulation simulation = createSimulation(scenario, monitor);
+					monitor.subTask(Messages.getString("SimMgr.Run"));
+					simulation.step();
+				} // try
+				catch (final NullPointerException e) {
+					// The error was logged in createSimulation
+					monitor.done();
+				}
+				return Status.OK_STATUS;
+			} // run
+		}.schedule();
+	} // createAndStepSimulation
+
+	
+	/**
+	 * Given a {@link Graph} find the {@link ISimulation} that created it.
+	 * 
+	 * @param graph
+	 *            an instance of a {@link Graph}
+	 * @return the {@link ISimulation} instance that created the {@link Graph},
+	 *         <code>null</code>, if no match could be found.
+	 */
+	public ISimulation mapGraphToSimulation(final Graph graph) {
+		ISimulation retValue = null;
+		for (final ISimulation simulation : activeSimulations) {
+			final Graph simulationGraph = simulation.getScenario()
+					.getCanonicalGraph();
+			// Is this the one we're looking for?
+			if (graph == simulationGraph) {
+				// Yes
+				retValue = simulation;
+				break;
+			} // if
+		} // for each ISimulation
+		return retValue;
+	} // mapGraphToSimulation
+
+	/**
+	 * @param listener
+	 *            a listener wanting to be told about changes to the manager.
+	 */
+	public void addSimulationManagerListener(
+			final ISimulationManagerListener listener) {
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+		}
+	} // addSimulationManagerListener
+
+	/**
+	 * @param listener
+	 *            a listener wanting to be told about changes to the manager.
+	 */
+	public void addSimulationManagerListenerSync(
+			final ISimulationManagerListenerSync listener) {
+		if (!listenersSync.contains(listener)) {
+			listenersSync.add(listener);
+		}
+	} // addSimulationManagerListenerSync
+
+	/**
+	 * @param listener
+	 *            a listener wanting NOT to be told about changes to the
+	 *            manager.
+	 */
+	public void removeListener(final ISimulationManagerListener listener) {
+		listeners.remove(listener);
+	} // removeListener
+
+	/**
+	 * @param listener
+	 *            a listener NOT wanting to be told about changes to the
+	 *            manager.
+	 */
+	public void removeListenerSync(final ISimulationManagerListenerSync listener) {
+		listenersSync.remove(listener);
+	} // removeListener
+
+	/**
+	 * Tell the listeners about the change.
+	 * 
+	 * @param simulationsAdded
+	 *            the {@link ISimulation}s added
+	 * @param simulationsRemoved
+	 *            the {@link ISimulation}s removed
+	 */
+	private void fireSimulationManagerChanged(
+			final ISimulation[] simulationsAdded,
+			final ISimulation[] simulationsRemoved) {
+		final SimulationManagerEvent event = new SimulationManagerEvent(this,
+				simulationsAdded, simulationsRemoved);
+
+		for (final ISimulationManagerListener listener : listeners) {
+			try {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						listener.simulationsChanged(event);
+					}
+				});
+			} catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				listener.simulationsChanged(event);
+			} // catch
+		} // for
+
+		for (final ISimulationManagerListenerSync listener : listenersSync) {
+			try {
+				Display.getDefault().syncExec(new Runnable() {
+					public void run() {
+						listener.simulationsChangedSync(event);
+					}
+				});
+			} catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				listener.simulationsChangedSync(event);
+			} // catch
+		} // for
+	} // fireSimulationManagerChanged
+
+	/**
+	 * This is where the manager hears about changes in the {@link ISimulation}s
+	 * it is managing. It is really only interested in those that "stop" so it
+	 * can remove them from its collection of active {@link ISimulation}s.
+	 * 
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChanged(final SimulationEvent event) {
+		// Has a simulation stopped?
+		if (event.getSimulationState().equals(SimulationState.STOPPED)) {
+			// Yes
+			if (event.getSimulation() instanceof SimulationAdapter) {
+				SimulationAdapter stoppedSimulationAdapter = (SimulationAdapter)event.getSimulation();
+				Simulation stoppedSimulation = (Simulation)stoppedSimulationAdapter.getSimulation();
+				Activator.getDefault().getPluginPreferences().removePropertyChangeListener(stoppedSimulation);
+			}
+			removeActiveSimulation(event.getSimulation());
+		}
+	} // simulationChanged
+
+	/**
+	 * This class adapts a {@link Simulation} instance that runs as an
+	 * asynchronous Eclipse {@link Job} to be an {@link ISimulation} instance.
+	 * The adapter manages thread safety issues so that the UI thread can access
+	 * the {@link ISimulation} instance directly.
+	 */
+	public static class SimulationAdapter implements ISimulation,
+			ISimulationListener, ISimulationListenerSync {
+
+		/**
+		 * The collection of {@link ISimulationListener}'s waiting to be told
+		 * about {@link SimulationEvent}s.
+		 */
+		private final List<ISimulationListener> listeners = new CopyOnWriteArrayList<ISimulationListener>();
+
+		/**
+		 * The collection of {@link ISimulationListenerSync}'s waiting to be
+		 * told about {@link SimulationEvent}s.
+		 */
+		private final List<ISimulationListenerSync> listenersSync = new CopyOnWriteArrayList<ISimulationListenerSync>();
+
+		/**
+		 * The {@link Simulation} instance to adapt. This will be an instance of
+		 * {@link Simulation} which is also an eclipse {@link Job} and runs
+		 * asynchronously from the UI thread of eclipse. This adapter registers
+		 * as a listener of adapted {@link Simulation} and safely passes
+		 * {@link SimulationEvent}'s on to listeners in the UI or other threads.
+		 */
+		private final ISimulation simulation;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param simulation
+		 *            the {@link Simulation} to adapt
+		 */
+		protected SimulationAdapter(final ISimulation simulation) {
+			this.simulation = simulation;
+			simulation.addSimulationListener(this);
+			simulation.addSimulationListenerSync(this);
+		} // SimulationAdapter
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#getName()
+		 */
+		public String getName() {
+			return simulation.getName();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#getNameWithSequenceNumber()
+		 */
+		public String getNameWithSequenceNumber() {
+			return simulation.getNameWithSequenceNumber();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#getCreationTime()
+		 */
+		public Date getCreationTime() {
+			return simulation.getCreationTime();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#getUniqueIDString()
+		 */
+		public String getUniqueIDString() {
+			return simulation.getUniqueIDString();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#getScenario()
+		 */
+		public Scenario getScenario() {
+			return simulation.getScenario();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#getSimulationState()
+		 */
+		public SimulationState getSimulationState() {
+			return simulation.getSimulationState();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#getSequenceNumber()
+		 */
+		public int getSequenceNumber() {
+			return simulation.getSequenceNumber();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#setSequenceNumber(int)
+		 */
+		public void setSequenceNumber(final int sequenceNumber) {
+			simulation.setSequenceNumber(sequenceNumber);
+		} // setSequenceNumber
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#pause()
+		 */
+		public void pause() {
+			simulation.pause();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#reset()
+		 */
+		public void reset() {
+			simulation.reset();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#run()
+		 */
+		public void run() {
+			simulation.run();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#step()
+		 */
+		public void step() {
+			simulation.step();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#stop()
+		 */
+		public void stop() {
+			simulation.stop();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#isRunning()
+		 */
+		public boolean isRunning() {
+			return simulation.isRunning();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.execution.IExecutable#isStoppable()
+		 */
+		public boolean isStoppable() {
+			return simulation.isStoppable();
+		}
+
+		/**
+		 * @throws InterruptedException
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#join()
+		 */
+		public void join() throws InterruptedException {
+			simulation.join();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#cancel()
+		 */
+		public boolean cancel() {
+			return simulation.cancel();
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#addSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)
+		 */
+		public void addSimulationListener(final ISimulationListener listener) {
+			if (!listeners.contains(listener)) {
+				listeners.add(listener);
+			}
+		} // addSimulationListener
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#removeSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)
+		 */
+		public void removeSimulationListener(final ISimulationListener listener) {
+			listeners.remove(listener);
+		} // removeSimulationListener
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#addSimulationListenerSync(org.eclipse.stem.jobs.simulation.ISimulationListenerSync)
+		 */
+		public void addSimulationListenerSync(
+				final ISimulationListenerSync listener) {
+			if (!listenersSync.contains(listener)) {
+				listenersSync.add(listener);
+			}
+		}
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulation#removeSimulationListenerSync(org.eclipse.stem.jobs.simulation.ISimulationListenerSync)
+		 */
+		public void removeSimulationListenerSync(
+				final ISimulationListenerSync listener) {
+			listenersSync.remove(listener);
+		}
+
+		/**
+		 * Tell the listeners about the change in the {@link Simulation}s state
+		 * 
+		 * @param simulationState
+		 *            the new state of the {@link Simulation}
+		 */
+		protected void fireSimulationChanged(
+				final SimulationEvent event) {
+			final SimulationEvent ev = new SimulationEvent(this,
+					event.getSimulationState(), event.getIterationProgress());
+			for (final ISimulationListener listener : listeners) {
+				listener.simulationChanged(ev);
+			} // for
+		} // fireSimulationManagerChanged
+
+		/**
+		 * Tell the listeners about the change in the {@link Simulation}s state
+		 * 
+		 * @param simulationState
+		 *            the new state of the {@link Simulation}
+		 */
+		protected void fireSimulationChangedSync(
+				final SimulationEvent event) {
+			final SimulationEvent ev = new SimulationEvent(this,
+					event.getSimulationState(), event.getIterationProgress());
+			for (final ISimulationListenerSync listener : listenersSync) {
+				listener.simulationChangedSync(ev);
+			} // for
+		} // fireSimulationChangedSync
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			return simulation.toString();
+		} // toString
+
+		/**
+		 * This is where the adapted {@link Simulation} tells us of its state
+		 * changes and we need to adapt them to the UI thread.
+		 * 
+		 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+		 */
+		public void simulationChanged(final SimulationEvent event) {
+			try {
+				if (!Display.getDefault().isDisposed()) {
+					// Yes
+					Display.getDefault().asyncExec(new Runnable() {
+						public void run() {
+							fireSimulationChanged(event);
+						}
+					});
+				} // if
+			} // try
+			catch (final NullPointerException e) {
+				// Nothing to do, shutting down...
+			} // catch NullPointerException
+			catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				fireSimulationChanged(event);
+			} // catch
+
+		} // simulationChanged
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulationListenerSync#simulationChangedSync(org.eclipse.stem.jobs.simulation.SimulationEvent)
+		 */
+		public void simulationChangedSync(final SimulationEvent event) {
+			try {
+				if (!Display.getDefault().isDisposed()) {
+					// Yes
+					Display.getDefault().syncExec(new Runnable() {
+						public void run() {
+							fireSimulationChangedSync(event);
+						}
+					});
+				} // if
+			} // try
+			catch (final NullPointerException e) {
+				// Nothing to do, shutting down...
+			} // catch NullPointerException
+			catch (final Error ncdfe) {
+				// If we get this exception, it is because we're not running in
+				// eclipse. Just fire the event.
+				fireSimulationChangedSync(event);
+			} // catch
+
+		} // simulationChangedSync
+
+		/**
+		 * @return the simulation
+		 */
+		public ISimulation getSimulation() {
+			return simulation;
+		}
+
+	} // SimulationAdapter
+} // SimulationManager
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEvent.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEvent.java
new file mode 100644
index 0000000..5abc6c8
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEvent.java
@@ -0,0 +1,99 @@
+// SimulationManagerEvent.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.EventObject;
+
+/**
+ * This class represents an event that has occurred in the operation of the
+ * SimulationManager
+ * 
+ * @see SimulationManager
+ * @see ISimulationManagerListener
+ */
+public class SimulationManagerEvent extends EventObject {
+
+	/**
+	 * Generated serialization ID
+	 */
+	transient private static final long serialVersionUID = 6533682842547235809L;
+
+	/**
+	 * This is a collection of the Simulations added to the manager.
+	 */
+	transient  private final ISimulation[] simulationsAdded;
+
+	/**
+	 * This is a collection of the Simulations removed from the
+	 * SimulationManager.
+	 */
+	 private final ISimulation[] simulationsRemoved;
+
+	/**
+	 * @param source
+	 *            the source of the event
+	 * @param simulationsAdded
+	 *            the collection of Simulations added to the manager
+	 * @param simulationsRemoved
+	 *            the collection of Simulations removed from the manager
+	 */
+	public SimulationManagerEvent(SimulationManager source,
+			ISimulation[] simulationsAdded, ISimulation[] simulationsRemoved) {
+		super(source);
+		this.simulationsAdded = simulationsAdded.clone();
+		this.simulationsRemoved = simulationsRemoved.clone();
+	} // SimulationManagerEvent
+
+	/**
+	 * @return the simulationsAdded
+	 */
+	public final ISimulation[] getSimulationsAdded() {
+		return simulationsAdded.clone();
+	}
+
+	/**
+	 * @return the simulationsRemoved
+	 */
+	public final ISimulation[] getSimulationsRemoved() {
+		return simulationsRemoved.clone();
+	}
+
+	/**
+	 * @see java.util.EventObject#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder("Added:["); //$NON-NLS-1$
+		for (int i = 0; i < simulationsAdded.length; i++) {
+			sb.append("\""); //$NON-NLS-1$
+			sb.append(simulationsAdded[i].toString());
+			sb.append("\""); //$NON-NLS-1$
+			if (i + 1 < simulationsAdded.length) {
+				sb.append(", "); //$NON-NLS-1$
+			}
+		}
+		sb.append("], Removed:["); //$NON-NLS-1$
+		for (int i = 0; i < simulationsRemoved.length; i++) {
+			sb.append("\""); //$NON-NLS-1$
+			sb.append(simulationsRemoved[i].toString());
+			sb.append("\""); //$NON-NLS-1$
+			if (i + 1 < simulationsRemoved.length) {
+				sb.append(", "); //$NON-NLS-1$
+			}
+		}
+		sb.append("]"); //$NON-NLS-1$
+
+		return sb.toString();
+	} // toString
+
+} // SimulationManagerEvent
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationState.java b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationState.java
new file mode 100644
index 0000000..6e0e397
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/SimulationState.java
@@ -0,0 +1,93 @@
+// SimulationState.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This enumeration defines the states that a Simulation can be in.
+ * 
+ * @see SimulationEvent
+ * @see ISimulationListener
+ * @see ISimulation
+ */
+public enum SimulationState {
+	/**
+	 * When the simulation has been scheduled for execution and is running. This
+	 * is the initial state of all newly created Simulations.
+	 * <p>
+	 * The next state is {@link #COMPLETED_CYCLE}.
+	 * 
+	 * @see #COMPLETED_CYCLE
+	 */
+	RUNNING,
+
+	/**
+	 * When the simulation has completed one cycle of a simulation sequence.
+	 * <p>
+	 * The next states are {@link #COMPLETED_CYCLE},
+	 * {@link #COMPLETED_SEQUENCE}, {@link #PAUSED}, {@link #RESET},
+	 * {@link #STOPPED}.
+	 * 
+	 * @see #COMPLETED_CYCLE
+	 * @see #COMPLETED_SEQUENCE
+	 * @see #PAUSED
+	 * @see #RESET
+	 * @see #STOPPED
+	 */
+	COMPLETED_CYCLE,
+
+	/**
+	 * When the simulation has completed all of the sequences in the simulation.
+	 * <p>
+	 * The next states are {@link #COMPLETED_CYCLE}, {@link #PAUSED},
+	 * {@link #RESET}, {@link #STOPPED}.
+	 * 
+	 * @see #PAUSED
+	 * @see #RESET
+	 * @see #STOPPED
+	 */
+	COMPLETED_SEQUENCE,
+	/**
+	 * When the simulation is not scheduled for execution, but it still retains
+	 * its scenario which maintains its state information. The Simulation can be
+	 * scheduled again for execution.
+	 * <p>
+	 * The next states are {@link #RUNNING}, {@link #RESET}, {@link #STOPPED}
+	 * 
+	 * @see #RUNNING
+	 * @see #RESET
+	 * @see #STOPPED
+	 */
+	PAUSED,
+
+	/**
+	 * The Simulation's Scenario is being reset to its initial state. The
+	 * Simulation can be scheduled for execution.
+	 * <p>
+	 * The next states are {@link #PAUSED}, {@link #STOPPED}
+	 * 
+	 * @see #PAUSED
+	 * @see #STOPPED
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#reset()
+	 */
+	RESET,
+
+	/**
+	 * The simulation is being removed from the simulation manager and its state
+	 * information destroyed.
+	 * 
+	 * @see SimulationManager
+	 */
+	STOPPED
+} // SimulationState
diff --git a/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/messages.properties b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/messages.properties
new file mode 100644
index 0000000..80d2ca8
--- /dev/null
+++ b/org.eclipse.stem.jobs/src/org/eclipse/stem/jobs/simulation/messages.properties
@@ -0,0 +1,24 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# SimulationManager
+SimMgr.Deserialization_Error=Problem reading in a serialized Scenario from URI \"{0}\"
+SimMgr.Start_Sim=Starting simulation
+SimMgr.CrtSim = Creating Simulation
+SimMgr.Run = Running Simulation
+
+# Simulation
+Sim.Time_Error=Time to stop before starting.  Current time is: {0}, Stopping time is: {1}
+Sim.IErr = An internal error occurred running "{0}".
+Sim.MissingSeq = The Scenario "{0}" cannot run because it does not have a Sequencer.
+Sim.MissingModel = The Scenario "{0}" cannot run because it does not have a Model.
\ No newline at end of file
diff --git a/org.eclipse.stem.populationmodels/.classpath b/org.eclipse.stem.populationmodels/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.populationmodels/.project b/org.eclipse.stem.populationmodels/.project
new file mode 100644
index 0000000..74a1d5d
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.populationmodels</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.populationmodels/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.populationmodels/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9187e37
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:54:13 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.populationmodels/META-INF/MANIFEST.MF b/org.eclipse.stem.populationmodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ebfff91
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.populationmodels;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.emf.ecore;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;bundle-version="2.4.1",

+ org.eclipse.stem.definitions

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.stem.populationmodels,

+ org.eclipse.stem.populationmodels.standard,

+ org.eclipse.stem.populationmodels.standard.impl,

+ org.eclipse.stem.populationmodels.standard.provider,

+ org.eclipse.stem.populationmodels.standard.util

+Bundle-Activator: org.eclipse.stem.populationmodels.Activator

diff --git a/org.eclipse.stem.populationmodels/build.properties b/org.eclipse.stem.populationmodels/build.properties
new file mode 100644
index 0000000..17ae787
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/build.properties
@@ -0,0 +1,16 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               model/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               icons/,\

+               bin/

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.populationmodels/icons/full/custom16/PopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/custom16/PopulationModel.gif
new file mode 100644
index 0000000..af16f59
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/custom16/PopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/custom16/StandardPopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/custom16/StandardPopulationModel.gif
new file mode 100644
index 0000000..0d464dc
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/custom16/StandardPopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/custom16/StochasticStandardPopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/custom16/StochasticStandardPopulationModel.gif
new file mode 100644
index 0000000..f39e497
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/custom16/StochasticStandardPopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/custom16/Thumbs.db b/org.eclipse.stem.populationmodels/icons/full/custom16/Thumbs.db
new file mode 100644
index 0000000..0d0576a
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/custom16/Thumbs.db
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabel.gif
new file mode 100644
index 0000000..be22463
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabelValue.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabelValue.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModel.gif
new file mode 100644
index 0000000..420eee1
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabel.gif
new file mode 100644
index 0000000..83afb9b
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabelValue.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabelValue.gif
new file mode 100644
index 0000000..10d2229
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelValue.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelValue.gif
new file mode 100644
index 0000000..be22463
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/PopulationModelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModel.gif
new file mode 100644
index 0000000..30f0c48
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabel.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabelValue.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabelValue.gif
new file mode 100644
index 0000000..53500da
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/StandardPopulationModelLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/icons/full/obj16/StochasticStandardPopulationModel.gif b/org.eclipse.stem.populationmodels/icons/full/obj16/StochasticStandardPopulationModel.gif
new file mode 100644
index 0000000..9041598
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/icons/full/obj16/StochasticStandardPopulationModel.gif
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/model/standard.ecore b/org.eclipse.stem.populationmodels/model/standard.ecore
new file mode 100644
index 0000000..773e138
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/model/standard.ecore
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="standard"

+    nsURI="http:///org/eclipse/stem/populationmodels/standard" nsPrefix="org.eclipse.stem.populationmodels.standard">

+  <eClassifiers xsi:type="ecore:EClass" name="PopulationModel" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//NodeDecorator">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="populationIdentifier" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"

+        defaultValueLiteral="human"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString"

+        defaultValueLiteral="HumanPopulationModel"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="StandardPopulationModel" eSuperTypes="#//PopulationModel #//IntegrationDecorator">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="birthRate" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"

+        defaultValueLiteral="0.0"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deathRate" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"

+        defaultValueLiteral="0.0"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timePeriod" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"

+        defaultValueLiteral="86400000"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PopulationModelLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicNodeLabel">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="populationLabel" eType="ecore:EClass ../../org.eclipse.stem.definitions/model/labels.ecore#//PopulationLabel"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="StandardPopulationModelLabel" eSuperTypes="#//PopulationModelLabel #//IntegrationLabel">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="deltaValue" eType="#//StandardPopulationModelLabelValue"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="probeValue" eType="#//StandardPopulationModelLabelValue"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="tempValue" eType="#//StandardPopulationModelLabelValue"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="originalValue" eType="#//StandardPopulationModelLabelValue"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="errorScale" eType="#//StandardPopulationModelLabelValue"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationLabel" instanceClassName="org.eclipse.stem.core.graph.IntegrationLabel"

+      abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationLabelValue" instanceClassName="org.eclipse.stem.core.graph.IntegrationLabelValue"

+      abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EClass" name="IntegrationDecorator" instanceClassName="org.eclipse.stem.core.model.IntegrationDecorator"

+      abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EClass" name="PopulationModelLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue"/>

+  <eClassifiers xsi:type="ecore:EClass" name="StandardPopulationModelLabelValue" eSuperTypes="#//PopulationModelLabelValue #//IntegrationLabelValue">

+    <eOperations name="adjustDelta" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean">

+      <eParameters name="value" eType="#//IntegrationLabelValue"/>

+    </eOperations>

+    <eOperations name="getAdditions" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eOperations name="getSubstractions" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="incidence" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="births" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deaths" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="density" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"

+        changeable="false" volatile="true" defaultValueLiteral="0.0" unsettable="true"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="StochasticStandardPopulationModel" eSuperTypes="#//StandardPopulationModel">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="gain" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"

+        defaultValueLiteral="0.01"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.populationmodels/model/standard.genmodel b/org.eclipse.stem.populationmodels/model/standard.genmodel
new file mode 100644
index 0000000..f0799ef
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/model/standard.genmodel
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.populationmodels/src"

+    editDirectory="/org.eclipse.stem.populationmodels/src" editorDirectory="/org.eclipse.stem.ui.populationmodels/src"

+    modelPluginID="org.eclipse.stem.populationmodels" modelName="Standard" testsDirectory="/org.eclipse.stem.ui.populationmodels/src"

+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"

+    editorPluginID="org.eclipse.stem.ui.populationmodels" testsPluginID="org.eclipse.stem.ui.populationmodels"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//modifier ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.core/model/core.genmodel#//solver ../../org.eclipse.stem.definitions/model/definitions.genmodel#//labels platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">

+  <foreignModel>standard.ecore</foreignModel>

+  <genPackages prefix="Standard" basePackage="org.eclipse.stem.populationmodels" disposableProviderFactory="true"

+      ecorePackage="standard.ecore#/">

+    <genClasses ecoreClass="standard.ecore#//PopulationModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//PopulationModel/populationIdentifier"/>

+    </genClasses>

+    <genClasses ecoreClass="standard.ecore#//StandardPopulationModel">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardPopulationModel/birthRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardPopulationModel/deathRate"/>

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute standard.ecore#//StandardPopulationModel/timePeriod"/>

+    </genClasses>

+    <genClasses ecoreClass="standard.ecore#//PopulationModelLabel">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//PopulationModelLabel/populationLabel"/>

+    </genClasses>

+    <genClasses ecoreClass="standard.ecore#//StandardPopulationModelLabel">

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//StandardPopulationModelLabel/deltaValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//StandardPopulationModelLabel/probeValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//StandardPopulationModelLabel/tempValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//StandardPopulationModelLabel/originalValue"/>

+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference standard.ecore#//StandardPopulationModelLabel/errorScale"/>

+    </genClasses>

+    <genClasses image="false" ecoreClass="standard.ecore#//IntegrationLabel"/>

+    <genClasses image="false" ecoreClass="standard.ecore#//IntegrationDecorator"/>

+    <genClasses ecoreClass="standard.ecore#//PopulationModelLabelValue"/>

+    <genClasses ecoreClass="standard.ecore#//StandardPopulationModelLabelValue"/>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.populationmodels/plugin.properties b/org.eclipse.stem.populationmodels/plugin.properties
new file mode 100644
index 0000000..e309ec5
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.populationmodels/plugin.xml b/org.eclipse.stem.populationmodels/plugin.xml
new file mode 100644
index 0000000..9d67a35
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/plugin.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+   <extension-point id="populationmodel" name="%EP_Populationmodel" schema="schema/populationmodel.exsd"/>

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <package

+            uri="http:///org/eclipse/stem/populationmodels/standard"

+            class="org.eclipse.stem.populationmodels.standard.StandardPackage"

+            genModel="model/standard.genmodel"/>

+   </extension>

+   <extension

+         point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <factory

+            class="org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory"

+            uri="http:///org/eclipse/stem/populationmodels/standard"

+            supportedTypes=

+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+               org.eclipse.emf.edit.provider.ITreeItemContentProvider

+               org.eclipse.emf.edit.provider.IItemLabelProvider

+               org.eclipse.emf.edit.provider.IItemPropertySource">

+      </factory>

+   </extension>

+   <extension

+         point="org.eclipse.stem.populationmodels.populationmodel">

+      <classdef

+            class="org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl">

+      </classdef>

+      <dublin_core

+            category_id="/"

+            identifier="org.eclipse.stem.populationmodels.dublin_core1"

+            title="org.eclipse.stem.populationmodels.dublin_core1">

+      </dublin_core>

+   </extension>

+   <extension

+         point="org.eclipse.stem.populationmodels.populationmodel">

+      <classdef

+            class="org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl">

+      </classdef>

+      <dublin_core

+            category_id="/"

+            identifier="org.eclipse.stem.populationmodels.dublin_core1"

+            title="org.eclipse.stem.populationmodels.dublin_core1">

+      </dublin_core>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.stem.populationmodels/schema/populationmodel.exsd b/org.eclipse.stem.populationmodels/schema/populationmodel.exsd
new file mode 100644
index 0000000..f7d8cc5
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/schema/populationmodel.exsd
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="com.ibm.almaden.stem.populationmodels" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appinfo>

+         <meta.schema plugin="com.ibm.almaden.stem.populationmodels" id="populationmodel" name="%EP_Populationmodel"/>

+      </appinfo>

+      <documentation>

+         Use to register instances of population models

+      </documentation>

+   </annotation>

+

+   <include schemaLocation="schema://org.eclipse.stem.core/schema/dublin_core.exsd"/>

+

+   <element name="extension">

+      <annotation>

+         <appinfo>

+            <meta.element />

+         </appinfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="classdef"/>

+            <element ref="dublin_core"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute translatable="true"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="classdef">

+      <complexType>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl:org.eclipse.stem.populationmodels.standard.PopulationModel"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="since"/>

+      </appinfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="examples"/>

+      </appinfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="apiinfo"/>

+      </appinfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="implementation"/>

+      </appinfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+

+</schema>

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Activator.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Activator.java
new file mode 100644
index 0000000..2dc6494
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Activator.java
@@ -0,0 +1,126 @@
+package org.eclipse.stem.populationmodels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = Constants.ID_ROOT + ".populationmodels"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		// We create these instances so that their constructors run and they
+		// then add themselves to a collection of factories maintained by the
+		// factory interfaces they implement respectively.
+		
+	
+		
+	} // start
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Running as a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			System.err.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.err.println(exception.getMessage());
+				exception.printStackTrace(System.err);
+			}
+		}
+
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Running as a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+				exception.printStackTrace(System.err);
+			}
+		}
+
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Constants.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Constants.java
new file mode 100644
index 0000000..03f475c
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/Constants.java
@@ -0,0 +1,40 @@
+// Constants.java
+package org.eclipse.stem.populationmodels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains constants that are significant to the STEM disease
+ * model definitions.
+ */
+public interface Constants {
+
+	/**
+	 * This is the extension point id for the "population model" extension point. A
+	 * {@link DiseaseModel} defines the underlying computational model for how a
+	 * population changes
+	 * {@value}
+	 */
+	String ID_POPULATION_MODEL_EXTENSION_POINT = org.eclipse.stem.core.Constants.ID_ROOT
+	+ ".populationmodels.populationmodel"; //$NON-NLS-1$ 
+
+	
+	/**
+	 * This is the identifier of the element in a
+	 * <code>ConfigurationElement</code> that specifies the name and
+	 * implementing class for STEM "population models".
+	 * 
+	 * @see org.eclipse.stem.core.Constants#EXECUTABLE_NAME_ATTRIBUTE
+	 */
+	String POPULATION_MODEL_ELEMENT = "classdef"; //$NON-NLS-1$ 
+
+} // Constants
diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModel.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModel.java
new file mode 100644
index 0000000..ee8a0e6
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModel.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.populationmodels.standard;

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.stem.core.model.NodeDecorator;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getPopulationIdentifier <em>Population Identifier</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getName <em>Name</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModel()

+ * @model abstract="true"

+ * @generated

+ */

+public interface PopulationModel extends NodeDecorator {

+	

+	/**

+	 * This is the segment of the type URI that prefixes all other segments in a

+	 * population model type URI.

+	 */

+	String URI_TYPE_POPULATIONMODEL_SEGMENT = "population";

+

+	

+	/**

+	 * Returns the value of the '<em><b>Population Identifier</b></em>' attribute.

+	 * The default value is <code>"human"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Population Identifier</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Population Identifier</em>' attribute.

+	 * @see #setPopulationIdentifier(String)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModel_PopulationIdentifier()

+	 * @model default="human"

+	 * @generated

+	 */

+	String getPopulationIdentifier();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getPopulationIdentifier <em>Population Identifier</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Population Identifier</em>' attribute.

+	 * @see #getPopulationIdentifier()

+	 * @generated

+	 */

+	void setPopulationIdentifier(String value);

+

+	/**

+	 * Returns the value of the '<em><b>Name</b></em>' attribute.

+	 * The default value is <code>"HumanPopulationModel"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Name</em>' attribute.

+	 * @see #setName(String)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModel_Name()

+	 * @model default="HumanPopulationModel"

+	 * @generated

+	 */

+	String getName();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getName <em>Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Name</em>' attribute.

+	 * @see #getName()

+	 * @generated

+	 */

+	void setName(String value);

+

+} // PopulationModel

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabel.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabel.java
new file mode 100644
index 0000000..943c15f
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabel.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.stem.core.graph.DynamicNodeLabel;

+import org.eclipse.stem.definitions.labels.PopulationLabel;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model Label</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel#getPopulationLabel <em>Population Label</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModelLabel()

+ * @model

+ * @generated

+ */

+public interface PopulationModelLabel extends DynamicNodeLabel {

+

+	/**

+	 * Returns the value of the '<em><b>Population Label</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Population Label</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Population Label</em>' reference.

+	 * @see #setPopulationLabel(PopulationLabel)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModelLabel_PopulationLabel()

+	 * @model

+	 * @generated

+	 */

+	PopulationLabel getPopulationLabel();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel#getPopulationLabel <em>Population Label</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Population Label</em>' reference.

+	 * @see #getPopulationLabel()

+	 * @generated

+	 */

+	void setPopulationLabel(PopulationLabel value);

+} // PopulationModelLabel

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabelValue.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabelValue.java
new file mode 100644
index 0000000..6a2c099
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/PopulationModelLabelValue.java
@@ -0,0 +1,29 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.stem.core.graph.LabelValue;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model Label Value</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getPopulationModelLabelValue()

+ * @model

+ * @generated

+ */

+@SuppressWarnings("all")

+public interface PopulationModelLabelValue extends LabelValue {

+} // PopulationModelLabelValue

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardFactory.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardFactory.java
new file mode 100644
index 0000000..29e896c
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardFactory.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage

+ * @generated

+ */

+public interface StandardFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	StandardFactory eINSTANCE = org.eclipse.stem.populationmodels.standard.impl.StandardFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Population Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Population Model</em>'.

+	 * @generated

+	 */

+	StandardPopulationModel createStandardPopulationModel();

+

+	/**

+	 * Returns a new object of class '<em>Population Model Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Population Model Label</em>'.

+	 * @generated

+	 */

+	PopulationModelLabel createPopulationModelLabel();

+

+	/**

+	 * Returns a new object of class '<em>Population Model Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Population Model Label</em>'.

+	 * @generated

+	 */

+	StandardPopulationModelLabel createStandardPopulationModelLabel();

+

+	/**

+	 * Returns a new object of class '<em>Population Model Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Population Model Label Value</em>'.

+	 * @generated

+	 */

+	PopulationModelLabelValue createPopulationModelLabelValue();

+

+	/**

+	 * Returns a new object of class '<em>Population Model Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Population Model Label Value</em>'.

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue createStandardPopulationModelLabelValue();

+

+	/**

+	 * Returns a new object of class '<em>Stochastic Standard Population Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Stochastic Standard Population Model</em>'.

+	 * @generated

+	 */

+	StochasticStandardPopulationModel createStochasticStandardPopulationModel();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	StandardPackage getStandardPackage();

+

+} //StandardFactory

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPackage.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPackage.java
new file mode 100644
index 0000000..be70325
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPackage.java
@@ -0,0 +1,1436 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.stem.core.graph.GraphPackage;

+import org.eclipse.stem.core.model.ModelPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.populationmodels.standard.StandardFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface StandardPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "standard";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http:///org/eclipse/stem/populationmodels/standard";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.populationmodels.standard";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	StandardPackage eINSTANCE = org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl <em>Population Model</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModel()

+	 * @generated

+	 */

+	int POPULATION_MODEL = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__URI = ModelPackage.NODE_DECORATOR__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__TYPE_URI = ModelPackage.NODE_DECORATOR__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__DUBLIN_CORE = ModelPackage.NODE_DECORATOR__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__LABELS_TO_UPDATE = ModelPackage.NODE_DECORATOR__LABELS_TO_UPDATE;

+

+	/**

+	 * The feature id for the '<em><b>Graph</b></em>' container reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__GRAPH = ModelPackage.NODE_DECORATOR__GRAPH;

+

+	/**

+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__ENABLED = ModelPackage.NODE_DECORATOR__ENABLED;

+

+	/**

+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__GRAPH_DECORATED = ModelPackage.NODE_DECORATOR__GRAPH_DECORATED;

+

+	/**

+	 * The feature id for the '<em><b>Progress</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__PROGRESS = ModelPackage.NODE_DECORATOR__PROGRESS;

+

+	/**

+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__POPULATION_IDENTIFIER = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL__NAME = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 1;

+

+	/**

+	 * The number of structural features of the '<em>Population Model</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_FEATURE_COUNT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 2;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl <em>Population Model</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModel()

+	 * @generated

+	 */

+	int STANDARD_POPULATION_MODEL = 1;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__URI = POPULATION_MODEL__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__TYPE_URI = POPULATION_MODEL__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__DUBLIN_CORE = POPULATION_MODEL__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__LABELS_TO_UPDATE = POPULATION_MODEL__LABELS_TO_UPDATE;

+

+	/**

+	 * The feature id for the '<em><b>Graph</b></em>' container reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__GRAPH = POPULATION_MODEL__GRAPH;

+

+	/**

+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__ENABLED = POPULATION_MODEL__ENABLED;

+

+	/**

+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__GRAPH_DECORATED = POPULATION_MODEL__GRAPH_DECORATED;

+

+	/**

+	 * The feature id for the '<em><b>Progress</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__PROGRESS = POPULATION_MODEL__PROGRESS;

+

+	/**

+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__POPULATION_IDENTIFIER = POPULATION_MODEL__POPULATION_IDENTIFIER;

+

+	/**

+	 * The feature id for the '<em><b>Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__NAME = POPULATION_MODEL__NAME;

+

+	/**

+	 * The feature id for the '<em><b>Birth Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__BIRTH_RATE = POPULATION_MODEL_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Death Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__DEATH_RATE = POPULATION_MODEL_FEATURE_COUNT + 1;

+

+	/**

+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL__TIME_PERIOD = POPULATION_MODEL_FEATURE_COUNT + 2;

+

+	/**

+	 * The number of structural features of the '<em>Population Model</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_FEATURE_COUNT = POPULATION_MODEL_FEATURE_COUNT + 3;

+

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelImpl <em>Population Model Label</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModelLabel()

+	 * @generated

+	 */

+	int POPULATION_MODEL_LABEL = 2;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__URI = GraphPackage.DYNAMIC_NODE_LABEL__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__TYPE_URI = GraphPackage.DYNAMIC_NODE_LABEL__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__DUBLIN_CORE = GraphPackage.DYNAMIC_NODE_LABEL__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;

+

+	/**

+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__CURRENT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__CURRENT_VALUE;

+

+	/**

+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__IDENTIFIABLE = GraphPackage.DYNAMIC_NODE_LABEL__IDENTIFIABLE;

+

+	/**

+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE_VALID;

+

+	/**

+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__NEXT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE;

+

+	/**

+	 * The feature id for the '<em><b>Decorator</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__DECORATOR = GraphPackage.DYNAMIC_NODE_LABEL__DECORATOR;

+

+	/**

+	 * The feature id for the '<em><b>Node</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__NODE = GraphPackage.DYNAMIC_NODE_LABEL__NODE;

+

+	/**

+	 * The feature id for the '<em><b>Population Label</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL__POPULATION_LABEL = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 0;

+

+	/**

+	 * The number of structural features of the '<em>Population Model Label</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL_FEATURE_COUNT = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 1;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl <em>Population Model Label</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL = 3;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__URI = POPULATION_MODEL_LABEL__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__TYPE_URI = POPULATION_MODEL_LABEL__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__DUBLIN_CORE = POPULATION_MODEL_LABEL__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = POPULATION_MODEL_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;

+

+	/**

+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__CURRENT_VALUE = POPULATION_MODEL_LABEL__CURRENT_VALUE;

+

+	/**

+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__IDENTIFIABLE = POPULATION_MODEL_LABEL__IDENTIFIABLE;

+

+	/**

+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__NEXT_VALUE_VALID = POPULATION_MODEL_LABEL__NEXT_VALUE_VALID;

+

+	/**

+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__NEXT_VALUE = POPULATION_MODEL_LABEL__NEXT_VALUE;

+

+	/**

+	 * The feature id for the '<em><b>Decorator</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__DECORATOR = POPULATION_MODEL_LABEL__DECORATOR;

+

+	/**

+	 * The feature id for the '<em><b>Node</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__NODE = POPULATION_MODEL_LABEL__NODE;

+

+	/**

+	 * The feature id for the '<em><b>Population Label</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__POPULATION_LABEL = POPULATION_MODEL_LABEL__POPULATION_LABEL;

+

+	/**

+	 * The feature id for the '<em><b>Delta Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE = POPULATION_MODEL_LABEL_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Probe Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE = POPULATION_MODEL_LABEL_FEATURE_COUNT + 1;

+

+	/**

+	 * The feature id for the '<em><b>Temp Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE = POPULATION_MODEL_LABEL_FEATURE_COUNT + 2;

+

+	/**

+	 * The feature id for the '<em><b>Original Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE = POPULATION_MODEL_LABEL_FEATURE_COUNT + 3;

+

+	/**

+	 * The feature id for the '<em><b>Error Scale</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE = POPULATION_MODEL_LABEL_FEATURE_COUNT + 4;

+

+	/**

+	 * The number of structural features of the '<em>Population Model Label</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_FEATURE_COUNT = POPULATION_MODEL_LABEL_FEATURE_COUNT + 5;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.graph.IntegrationLabel

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationLabel()

+	 * @generated

+	 */

+	int INTEGRATION_LABEL = 4;

+

+	/**

+	 * The number of structural features of the '<em>Integration Label</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int INTEGRATION_LABEL_FEATURE_COUNT = 0;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationLabelValue()

+	 * @generated

+	 */

+	int INTEGRATION_LABEL_VALUE = 5;

+

+	/**

+	 * The number of structural features of the '<em>Integration Label Value</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int INTEGRATION_LABEL_VALUE_FEATURE_COUNT = 0;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.model.IntegrationDecorator

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationDecorator()

+	 * @generated

+	 */

+	int INTEGRATION_DECORATOR = 6;

+

+	/**

+	 * The number of structural features of the '<em>Integration Decorator</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int INTEGRATION_DECORATOR_FEATURE_COUNT = 0;

+

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelValueImpl <em>Population Model Label Value</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelValueImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModelLabelValue()

+	 * @generated

+	 */

+	int POPULATION_MODEL_LABEL_VALUE = 7;

+

+	/**

+	 * The number of structural features of the '<em>Population Model Label Value</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl <em>Population Model Label Value</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE = 8;

+

+	/**

+	 * The feature id for the '<em><b>Count</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 0;

+

+	/**

+	 * The feature id for the '<em><b>Incidence</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 1;

+

+	/**

+	 * The feature id for the '<em><b>Births</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 2;

+

+	/**

+	 * The feature id for the '<em><b>Deaths</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 3;

+

+	/**

+	 * The feature id for the '<em><b>Density</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 4;

+

+	/**

+	 * The number of structural features of the '<em>Population Model Label Value</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STANDARD_POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT = POPULATION_MODEL_LABEL_VALUE_FEATURE_COUNT + 5;

+

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl <em>Stochastic Standard Population Model</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl

+	 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStochasticStandardPopulationModel()

+	 * @generated

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL = 9;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__URI = STANDARD_POPULATION_MODEL__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__TYPE_URI = STANDARD_POPULATION_MODEL__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__DUBLIN_CORE = STANDARD_POPULATION_MODEL__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__LABELS_TO_UPDATE = STANDARD_POPULATION_MODEL__LABELS_TO_UPDATE;

+

+	/**

+	 * The feature id for the '<em><b>Graph</b></em>' container reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__GRAPH = STANDARD_POPULATION_MODEL__GRAPH;

+

+	/**

+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__ENABLED = STANDARD_POPULATION_MODEL__ENABLED;

+

+	/**

+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__GRAPH_DECORATED = STANDARD_POPULATION_MODEL__GRAPH_DECORATED;

+

+	/**

+	 * The feature id for the '<em><b>Progress</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__PROGRESS = STANDARD_POPULATION_MODEL__PROGRESS;

+

+	/**

+	 * The feature id for the '<em><b>Population Identifier</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__POPULATION_IDENTIFIER = STANDARD_POPULATION_MODEL__POPULATION_IDENTIFIER;

+

+	/**

+	 * The feature id for the '<em><b>Name</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__NAME = STANDARD_POPULATION_MODEL__NAME;

+

+	/**

+	 * The feature id for the '<em><b>Birth Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__BIRTH_RATE = STANDARD_POPULATION_MODEL__BIRTH_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Death Rate</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__DEATH_RATE = STANDARD_POPULATION_MODEL__DEATH_RATE;

+

+	/**

+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__TIME_PERIOD = STANDARD_POPULATION_MODEL__TIME_PERIOD;

+

+	/**

+	 * The feature id for the '<em><b>Gain</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN = STANDARD_POPULATION_MODEL_FEATURE_COUNT + 0;

+

+	/**

+	 * The number of structural features of the '<em>Stochastic Standard Population Model</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int STOCHASTIC_STANDARD_POPULATION_MODEL_FEATURE_COUNT = STANDARD_POPULATION_MODEL_FEATURE_COUNT + 1;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.PopulationModel <em>Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModel

+	 * @generated

+	 */

+	EClass getPopulationModel();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getPopulationIdentifier <em>Population Identifier</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Population Identifier</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModel#getPopulationIdentifier()

+	 * @see #getPopulationModel()

+	 * @generated

+	 */

+	EAttribute getPopulationModel_PopulationIdentifier();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.PopulationModel#getName <em>Name</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Name</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModel#getName()

+	 * @see #getPopulationModel()

+	 * @generated

+	 */

+	EAttribute getPopulationModel_Name();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel <em>Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModel

+	 * @generated

+	 */

+	EClass getStandardPopulationModel();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getBirthRate <em>Birth Rate</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Birth Rate</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getBirthRate()

+	 * @see #getStandardPopulationModel()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModel_BirthRate();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getDeathRate <em>Death Rate</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Death Rate</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getDeathRate()

+	 * @see #getStandardPopulationModel()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModel_DeathRate();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getTimePeriod <em>Time Period</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Time Period</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getTimePeriod()

+	 * @see #getStandardPopulationModel()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModel_TimePeriod();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel <em>Population Model Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model Label</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModelLabel

+	 * @generated

+	 */

+	EClass getPopulationModelLabel();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel#getPopulationLabel <em>Population Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Population Label</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModelLabel#getPopulationLabel()

+	 * @see #getPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getPopulationModelLabel_PopulationLabel();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel <em>Population Model Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model Label</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel

+	 * @generated

+	 */

+	EClass getStandardPopulationModelLabel();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getDeltaValue <em>Delta Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Delta Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getDeltaValue()

+	 * @see #getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getStandardPopulationModelLabel_DeltaValue();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getProbeValue <em>Probe Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Probe Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getProbeValue()

+	 * @see #getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getStandardPopulationModelLabel_ProbeValue();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getTempValue <em>Temp Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Temp Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getTempValue()

+	 * @see #getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getStandardPopulationModelLabel_TempValue();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getOriginalValue <em>Original Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Original Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getOriginalValue()

+	 * @see #getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getStandardPopulationModelLabel_OriginalValue();

+

+	/**

+	 * Returns the meta object for the reference '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getErrorScale <em>Error Scale</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the reference '<em>Error Scale</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getErrorScale()

+	 * @see #getStandardPopulationModelLabel()

+	 * @generated

+	 */

+	EReference getStandardPopulationModelLabel_ErrorScale();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Integration Label</em>'.

+	 * @see org.eclipse.stem.core.graph.IntegrationLabel

+	 * @model instanceClass="org.eclipse.stem.core.graph.IntegrationLabel"

+	 * @generated

+	 */

+	EClass getIntegrationLabel();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Integration Label Value</em>'.

+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue

+	 * @model instanceClass="org.eclipse.stem.core.graph.IntegrationLabelValue"

+	 * @generated

+	 */

+	EClass getIntegrationLabelValue();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Integration Decorator</em>'.

+	 * @see org.eclipse.stem.core.model.IntegrationDecorator

+	 * @model instanceClass="org.eclipse.stem.core.model.IntegrationDecorator"

+	 * @generated

+	 */

+	EClass getIntegrationDecorator();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue <em>Population Model Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model Label Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue

+	 * @generated

+	 */

+	EClass getPopulationModelLabelValue();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue <em>Population Model Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Population Model Label Value</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue

+	 * @generated

+	 */

+	EClass getStandardPopulationModelLabelValue();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getCount <em>Count</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Count</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getCount()

+	 * @see #getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModelLabelValue_Count();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getIncidence <em>Incidence</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Incidence</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getIncidence()

+	 * @see #getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModelLabelValue_Incidence();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getBirths <em>Births</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Births</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getBirths()

+	 * @see #getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModelLabelValue_Births();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDeaths <em>Deaths</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Deaths</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDeaths()

+	 * @see #getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModelLabelValue_Deaths();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDensity <em>Density</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Density</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDensity()

+	 * @see #getStandardPopulationModelLabelValue()

+	 * @generated

+	 */

+	EAttribute getStandardPopulationModelLabelValue_Density();

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel <em>Stochastic Standard Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Stochastic Standard Population Model</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel

+	 * @generated

+	 */

+	EClass getStochasticStandardPopulationModel();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel#getGain <em>Gain</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Gain</em>'.

+	 * @see org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel#getGain()

+	 * @see #getStochasticStandardPopulationModel()

+	 * @generated

+	 */

+	EAttribute getStochasticStandardPopulationModel_Gain();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	StandardFactory getStandardFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl <em>Population Model</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModel()

+		 * @generated

+		 */

+		EClass POPULATION_MODEL = eINSTANCE.getPopulationModel();

+

+		/**

+		 * The meta object literal for the '<em><b>Population Identifier</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute POPULATION_MODEL__POPULATION_IDENTIFIER = eINSTANCE.getPopulationModel_PopulationIdentifier();

+

+		/**

+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute POPULATION_MODEL__NAME = eINSTANCE.getPopulationModel_Name();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl <em>Population Model</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModel()

+		 * @generated

+		 */

+		EClass STANDARD_POPULATION_MODEL = eINSTANCE.getStandardPopulationModel();

+

+		/**

+		 * The meta object literal for the '<em><b>Birth Rate</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL__BIRTH_RATE = eINSTANCE.getStandardPopulationModel_BirthRate();

+

+		/**

+		 * The meta object literal for the '<em><b>Death Rate</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL__DEATH_RATE = eINSTANCE.getStandardPopulationModel_DeathRate();

+

+		/**

+		 * The meta object literal for the '<em><b>Time Period</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL__TIME_PERIOD = eINSTANCE.getStandardPopulationModel_TimePeriod();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelImpl <em>Population Model Label</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModelLabel()

+		 * @generated

+		 */

+		EClass POPULATION_MODEL_LABEL = eINSTANCE.getPopulationModelLabel();

+

+		/**

+		 * The meta object literal for the '<em><b>Population Label</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference POPULATION_MODEL_LABEL__POPULATION_LABEL = eINSTANCE.getPopulationModelLabel_PopulationLabel();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl <em>Population Model Label</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModelLabel()

+		 * @generated

+		 */

+		EClass STANDARD_POPULATION_MODEL_LABEL = eINSTANCE.getStandardPopulationModelLabel();

+

+		/**

+		 * The meta object literal for the '<em><b>Delta Value</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE = eINSTANCE.getStandardPopulationModelLabel_DeltaValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Probe Value</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE = eINSTANCE.getStandardPopulationModelLabel_ProbeValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Temp Value</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE = eINSTANCE.getStandardPopulationModelLabel_TempValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Original Value</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE = eINSTANCE.getStandardPopulationModelLabel_OriginalValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Error Scale</b></em>' reference feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE = eINSTANCE.getStandardPopulationModelLabel_ErrorScale();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.core.graph.IntegrationLabel

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationLabel()

+		 * @generated

+		 */

+		EClass INTEGRATION_LABEL = eINSTANCE.getIntegrationLabel();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.core.graph.IntegrationLabelValue

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationLabelValue()

+		 * @generated

+		 */

+		EClass INTEGRATION_LABEL_VALUE = eINSTANCE.getIntegrationLabelValue();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.core.model.IntegrationDecorator

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getIntegrationDecorator()

+		 * @generated

+		 */

+		EClass INTEGRATION_DECORATOR = eINSTANCE.getIntegrationDecorator();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelValueImpl <em>Population Model Label Value</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelValueImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getPopulationModelLabelValue()

+		 * @generated

+		 */

+		EClass POPULATION_MODEL_LABEL_VALUE = eINSTANCE.getPopulationModelLabelValue();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl <em>Population Model Label Value</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStandardPopulationModelLabelValue()

+		 * @generated

+		 */

+		EClass STANDARD_POPULATION_MODEL_LABEL_VALUE = eINSTANCE.getStandardPopulationModelLabelValue();

+

+		/**

+		 * The meta object literal for the '<em><b>Count</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT = eINSTANCE.getStandardPopulationModelLabelValue_Count();

+

+		/**

+		 * The meta object literal for the '<em><b>Incidence</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE = eINSTANCE.getStandardPopulationModelLabelValue_Incidence();

+

+		/**

+		 * The meta object literal for the '<em><b>Births</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS = eINSTANCE.getStandardPopulationModelLabelValue_Births();

+

+		/**

+		 * The meta object literal for the '<em><b>Deaths</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS = eINSTANCE.getStandardPopulationModelLabelValue_Deaths();

+

+		/**

+		 * The meta object literal for the '<em><b>Density</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY = eINSTANCE.getStandardPopulationModelLabelValue_Density();

+

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl <em>Stochastic Standard Population Model</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl

+		 * @see org.eclipse.stem.populationmodels.standard.impl.StandardPackageImpl#getStochasticStandardPopulationModel()

+		 * @generated

+		 */

+		EClass STOCHASTIC_STANDARD_POPULATION_MODEL = eINSTANCE.getStochasticStandardPopulationModel();

+

+		/**

+		 * The meta object literal for the '<em><b>Gain</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN = eINSTANCE.getStochasticStandardPopulationModel_Gain();

+

+	}

+

+} //StandardPackage

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModel.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModel.java
new file mode 100644
index 0000000..6600b5c
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModel.java
@@ -0,0 +1,117 @@
+package org.eclipse.stem.populationmodels.standard;

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.stem.core.model.IntegrationDecorator;

+

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getBirthRate <em>Birth Rate</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getDeathRate <em>Death Rate</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getTimePeriod <em>Time Period</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModel()

+ * @model superTypes="org.eclipse.stem.populationmodels.standard.PopulationModel org.eclipse.stem.populationmodels.standard.IntegrationDecorator"

+ * @generated

+ */

+public interface StandardPopulationModel extends PopulationModel, IntegrationDecorator {

+	/**

+	 * Returns the value of the '<em><b>Birth Rate</b></em>' attribute.

+	 * The default value is <code>"0.0"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Birth Rate</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Birth Rate</em>' attribute.

+	 * @see #setBirthRate(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModel_BirthRate()

+	 * @model default="0.0"

+	 * @generated

+	 */

+	double getBirthRate();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getBirthRate <em>Birth Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Birth Rate</em>' attribute.

+	 * @see #getBirthRate()

+	 * @generated

+	 */

+	void setBirthRate(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Death Rate</b></em>' attribute.

+	 * The default value is <code>"0.0"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Death Rate</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Death Rate</em>' attribute.

+	 * @see #setDeathRate(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModel_DeathRate()

+	 * @model default="0.0"

+	 * @generated

+	 */

+	double getDeathRate();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getDeathRate <em>Death Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Death Rate</em>' attribute.

+	 * @see #getDeathRate()

+	 * @generated

+	 */

+	void setDeathRate(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Time Period</b></em>' attribute.

+	 * The default value is <code>"86400000"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Time Period</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Time Period</em>' attribute.

+	 * @see #setTimePeriod(long)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModel_TimePeriod()

+	 * @model default="86400000"

+	 * @generated

+	 */

+	long getTimePeriod();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel#getTimePeriod <em>Time Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Time Period</em>' attribute.

+	 * @see #getTimePeriod()

+	 * @generated

+	 */

+	void setTimePeriod(long value);

+

+} // StandardPopulationModel

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabel.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabel.java
new file mode 100644
index 0000000..56d0b25
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabel.java
@@ -0,0 +1,166 @@
+package org.eclipse.stem.populationmodels.standard;

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.stem.core.graph.IntegrationLabel;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model Label</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getDeltaValue <em>Delta Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getProbeValue <em>Probe Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getTempValue <em>Temp Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getOriginalValue <em>Original Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getErrorScale <em>Error Scale</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel()

+ * @model superTypes="org.eclipse.stem.populationmodels.standard.PopulationModelLabel org.eclipse.stem.populationmodels.standard.IntegrationLabel"

+ * @generated

+ */

+public interface StandardPopulationModelLabel extends PopulationModelLabel, IntegrationLabel {

+

+	/**

+	 * Returns the value of the '<em><b>Delta Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Delta Value</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Delta Value</em>' reference.

+	 * @see #setDeltaValue(StandardPopulationModelLabelValue)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel_DeltaValue()

+	 * @model

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue getDeltaValue();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getDeltaValue <em>Delta Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Delta Value</em>' reference.

+	 * @see #getDeltaValue()

+	 * @generated

+	 */

+	void setDeltaValue(StandardPopulationModelLabelValue value);

+

+	/**

+	 * Returns the value of the '<em><b>Probe Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Probe Value</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Probe Value</em>' reference.

+	 * @see #setProbeValue(StandardPopulationModelLabelValue)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel_ProbeValue()

+	 * @model

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue getProbeValue();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getProbeValue <em>Probe Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Probe Value</em>' reference.

+	 * @see #getProbeValue()

+	 * @generated

+	 */

+	void setProbeValue(StandardPopulationModelLabelValue value);

+

+	/**

+	 * Returns the value of the '<em><b>Temp Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Temp Value</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Temp Value</em>' reference.

+	 * @see #setTempValue(StandardPopulationModelLabelValue)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel_TempValue()

+	 * @model

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue getTempValue();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getTempValue <em>Temp Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Temp Value</em>' reference.

+	 * @see #getTempValue()

+	 * @generated

+	 */

+	void setTempValue(StandardPopulationModelLabelValue value);

+

+	/**

+	 * Returns the value of the '<em><b>Original Value</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Original Value</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Original Value</em>' reference.

+	 * @see #setOriginalValue(StandardPopulationModelLabelValue)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel_OriginalValue()

+	 * @model

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue getOriginalValue();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getOriginalValue <em>Original Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Original Value</em>' reference.

+	 * @see #getOriginalValue()

+	 * @generated

+	 */

+	void setOriginalValue(StandardPopulationModelLabelValue value);

+

+	/**

+	 * Returns the value of the '<em><b>Error Scale</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Error Scale</em>' reference isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Error Scale</em>' reference.

+	 * @see #setErrorScale(StandardPopulationModelLabelValue)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabel_ErrorScale()

+	 * @model

+	 * @generated

+	 */

+	StandardPopulationModelLabelValue getErrorScale();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel#getErrorScale <em>Error Scale</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Error Scale</em>' reference.

+	 * @see #getErrorScale()

+	 * @generated

+	 */

+	void setErrorScale(StandardPopulationModelLabelValue value);

+} // StandardPopulationModelLabel

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabelValue.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabelValue.java
new file mode 100644
index 0000000..6c3e469
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StandardPopulationModelLabelValue.java
@@ -0,0 +1,194 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Population Model Label Value</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getCount <em>Count</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getIncidence <em>Incidence</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getBirths <em>Births</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDeaths <em>Deaths</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDensity <em>Density</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue()

+ * @model superTypes="org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue org.eclipse.stem.populationmodels.standard.IntegrationLabelValue"

+ * @generated

+ */

+public interface StandardPopulationModelLabelValue extends PopulationModelLabelValue, IntegrationLabelValue {

+

+	/**

+	 * Returns the value of the '<em><b>Count</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Count</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Count</em>' attribute.

+	 * @see #setCount(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue_Count()

+	 * @model

+	 * @generated

+	 */

+	double getCount();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getCount <em>Count</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Count</em>' attribute.

+	 * @see #getCount()

+	 * @generated

+	 */

+	void setCount(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Incidence</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Incidence</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Incidence</em>' attribute.

+	 * @see #setIncidence(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue_Incidence()

+	 * @model

+	 * @generated

+	 */

+	double getIncidence();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getIncidence <em>Incidence</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Incidence</em>' attribute.

+	 * @see #getIncidence()

+	 * @generated

+	 */

+	void setIncidence(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Births</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Births</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Births</em>' attribute.

+	 * @see #setBirths(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue_Births()

+	 * @model

+	 * @generated

+	 */

+	double getBirths();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getBirths <em>Births</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Births</em>' attribute.

+	 * @see #getBirths()

+	 * @generated

+	 */

+	void setBirths(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Deaths</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Deaths</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Deaths</em>' attribute.

+	 * @see #setDeaths(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue_Deaths()

+	 * @model

+	 * @generated

+	 */

+	double getDeaths();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDeaths <em>Deaths</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Deaths</em>' attribute.

+	 * @see #getDeaths()

+	 * @generated

+	 */

+	void setDeaths(double value);

+

+	/**

+	 * Returns the value of the '<em><b>Density</b></em>' attribute.

+	 * The default value is <code>"0.0"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Density</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Density</em>' attribute.

+	 * @see #isSetDensity()

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStandardPopulationModelLabelValue_Density()

+	 * @model default="0.0" unsettable="true" changeable="false" volatile="true"

+	 * @generated

+	 */

+	double getDensity();

+

+	/**

+	 * Returns whether the value of the '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue#getDensity <em>Density</em>}' attribute is set.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return whether the value of the '<em>Density</em>' attribute is set.

+	 * @see #getDensity()

+	 * @generated

+	 */

+	boolean isSetDensity();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @model valueType="org.eclipse.stem.populationmodels.standard.IntegrationLabelValue"

+	 * @generated

+	 */

+	boolean adjustDelta(IntegrationLabelValue value);

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @model kind="operation"

+	 * @generated

+	 */

+	double getAdditions();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @model kind="operation"

+	 * @generated

+	 */

+	double getSubstractions();

+} // StandardPopulationModelLabelValue

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StochasticStandardPopulationModel.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StochasticStandardPopulationModel.java
new file mode 100644
index 0000000..025000b
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/StochasticStandardPopulationModel.java
@@ -0,0 +1,59 @@
+package org.eclipse.stem.populationmodels.standard;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Stochastic Standard Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel#getGain <em>Gain</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStochasticStandardPopulationModel()

+ * @model

+ * @generated

+ */

+public interface StochasticStandardPopulationModel extends StandardPopulationModel {

+	/**

+	 * Returns the value of the '<em><b>Gain</b></em>' attribute.

+	 * The default value is <code>"0.01"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Gain</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Gain</em>' attribute.

+	 * @see #setGain(double)

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#getStochasticStandardPopulationModel_Gain()

+	 * @model default="0.01"

+	 * @generated

+	 */

+	double getGain();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel#getGain <em>Gain</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Gain</em>' attribute.

+	 * @see #getGain()

+	 * @generated

+	 */

+	void setGain(double value);

+

+} // StochasticStandardPopulationModel

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelImpl.java
new file mode 100644
index 0000000..e8909ec
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelImpl.java
@@ -0,0 +1,323 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Iterator;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.graph.Graph;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.core.model.impl.NodeDecoratorImpl;

+import org.eclipse.stem.definitions.labels.PopulationLabel;

+import org.eclipse.stem.populationmodels.standard.PopulationModel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl#getPopulationIdentifier <em>Population Identifier</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelImpl#getName <em>Name</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public abstract class PopulationModelImpl extends NodeDecoratorImpl implements PopulationModel {

+	/**

+	 * The default value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getPopulationIdentifier()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String POPULATION_IDENTIFIER_EDEFAULT = "human";

+

+	/**

+	 * The cached value of the '{@link #getPopulationIdentifier() <em>Population Identifier</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getPopulationIdentifier()

+	 * @generated

+	 * @ordered

+	 */

+	protected String populationIdentifier = POPULATION_IDENTIFIER_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getName()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final String NAME_EDEFAULT = "HumanPopulationModel";

+

+	/**

+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getName()

+	 * @generated

+	 * @ordered

+	 */

+	protected String name = NAME_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public PopulationModelImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.POPULATION_MODEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getPopulationIdentifier() {

+		return populationIdentifier;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setPopulationIdentifier(String newPopulationIdentifier) {

+		String oldPopulationIdentifier = populationIdentifier;

+		populationIdentifier = newPopulationIdentifier;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER, oldPopulationIdentifier, populationIdentifier));

+	}

+

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public String getName() {

+		return name;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setName(String newName) {

+		String oldName = name;

+		name = newName;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.POPULATION_MODEL__NAME, oldName, name));

+	}

+

+	/**

+	 * Decorate the graph for a standard population model

+	 * 

+	 */

+	@Override

+	public void decorateGraph() {

+		for (final Iterator<PopulationLabel> populationLabelIter = getPopulationLabels(

+				getPopulationIdentifier(), getGraph()).iterator(); populationLabelIter

+				.hasNext();) {

+			final PopulationLabel populationLabel = populationLabelIter.next();

+

+			if(this.getPopulationIdentifier().equals(populationLabel.getPopulationIdentifier())) {

+				final PopulationModelLabel pl = createPopulationLabel();

+				pl.setPopulationLabel(populationLabel); // Remember the static population label

+				getLabelsToUpdate().add(pl);

+				populationLabel.getNode().getLabels().add(pl);

+				pl.setNode(populationLabel.getNode());

+				getGraph().putNodeLabel(pl);

+			}

+		} // for each population label

+

+		

+		// This initializes the disease model values from the population values.

+		// For instance for StandardDiseaseModels, it initializes the

+		// susceptiable population from the population

+		resetLabels();

+	} // decorateGraph

+	

+	/**

+	 * Search through the graph and find all of the population labels that have

+	 * the same identifier.

+	 * 

+	 * @param populationIdentifier

+	 *            the population being labeled

+	 * @param graph

+	 *            the graph to search

+	 * @return the PopulationLabel instances of the graph that match the

+	 *         identifier.

+	 */

+	protected Collection<PopulationLabel> getPopulationLabels(

+			final String populationIdentifier, final Graph graph) {

+		final List<PopulationLabel> retValue = new ArrayList<PopulationLabel>();

+

+		// Iterate through all of the population labels in the graph

+		EList<NodeLabel> labels = graph.getNodeLabelsByTypeURI(

+				PopulationLabel.URI_TYPE_POPULATION_LABEL);

+		for (NodeLabel pl:labels) {

+			final PopulationLabel populationLabel = (PopulationLabel) pl;

+			// Is this label for the population we're looking for?

+			if (populationLabel.getPopulationIdentifier().equals(

+					populationIdentifier)) {

+				// Yes

+				// If there is a problem with the "node uri" of the population

+				// label then it would not have been associated with a node

+				// instance in the graph at this point. This is a problem for

+				// disease models that are trying to label the node (there isn't

+				// one!). So filter out those mistakes here.

+

+				// Does the population label have an associated node?

+				if (populationLabel.getNode() != null) {

+					// Yes

+					retValue.add(populationLabel);

+				} // if the population label has a node

+			} // if the population we're looking for

+		} // for each population label

+

+		return retValue;

+	} // getPopulationLabels

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * 

+	 * @return

+	 * 

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public abstract PopulationModelLabel createPopulationLabel();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public abstract PopulationModelLabelValue createPopulationLabelValue();

+	

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER:

+				return getPopulationIdentifier();

+			case StandardPackage.POPULATION_MODEL__NAME:

+				return getName();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER:

+				setPopulationIdentifier((String)newValue);

+				return;

+			case StandardPackage.POPULATION_MODEL__NAME:

+				setName((String)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER:

+				setPopulationIdentifier(POPULATION_IDENTIFIER_EDEFAULT);

+				return;

+			case StandardPackage.POPULATION_MODEL__NAME:

+				setName(NAME_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER:

+				return POPULATION_IDENTIFIER_EDEFAULT == null ? populationIdentifier != null : !POPULATION_IDENTIFIER_EDEFAULT.equals(populationIdentifier);

+			case StandardPackage.POPULATION_MODEL__NAME:

+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (populationIdentifier: ");

+		result.append(populationIdentifier);

+		result.append(", name: ");

+		result.append(name);

+		result.append(')');

+		return result.toString();

+	}

+

+} //PopulationModelImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelImpl.java
new file mode 100644
index 0000000..b6e2a8f
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelImpl.java
@@ -0,0 +1,166 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.ecore.EClass;

+

+import org.eclipse.emf.ecore.InternalEObject;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl;

+

+import org.eclipse.stem.definitions.labels.PopulationLabel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model Label</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.PopulationModelLabelImpl#getPopulationLabel <em>Population Label</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class PopulationModelLabelImpl extends DynamicNodeLabelImpl implements PopulationModelLabel {

+	/**

+	 * The cached value of the '{@link #getPopulationLabel() <em>Population Label</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getPopulationLabel()

+	 * @generated

+	 * @ordered

+	 */

+	protected PopulationLabel populationLabel;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PopulationModelLabelImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.POPULATION_MODEL_LABEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationLabel getPopulationLabel() {

+		if (populationLabel != null && populationLabel.eIsProxy()) {

+			InternalEObject oldPopulationLabel = (InternalEObject)populationLabel;

+			populationLabel = (PopulationLabel)eResolveProxy(oldPopulationLabel);

+			if (populationLabel != oldPopulationLabel) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL, oldPopulationLabel, populationLabel));

+			}

+		}

+		return populationLabel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationLabel basicGetPopulationLabel() {

+		return populationLabel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setPopulationLabel(PopulationLabel newPopulationLabel) {

+		PopulationLabel oldPopulationLabel = populationLabel;

+		populationLabel = newPopulationLabel;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL, oldPopulationLabel, populationLabel));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL:

+				if (resolve) return getPopulationLabel();

+				return basicGetPopulationLabel();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL:

+				setPopulationLabel((PopulationLabel)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL:

+				setPopulationLabel((PopulationLabel)null);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.POPULATION_MODEL_LABEL__POPULATION_LABEL:

+				return populationLabel != null;

+		}

+		return super.eIsSet(featureID);

+	}

+

+} //PopulationModelLabelImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelValueImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelValueImpl.java
new file mode 100644
index 0000000..9924c28
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/PopulationModelLabelValueImpl.java
@@ -0,0 +1,50 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+

+import org.eclipse.stem.core.graph.impl.LabelValueImpl;

+

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model Label Value</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * </p>

+ *

+ * @generated

+ */

+public class PopulationModelLabelValueImpl extends LabelValueImpl implements PopulationModelLabelValue {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PopulationModelLabelValueImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.POPULATION_MODEL_LABEL_VALUE;

+	}

+

+} //PopulationModelLabelValueImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardFactoryImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardFactoryImpl.java
new file mode 100644
index 0000000..6fdad70
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardFactoryImpl.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.stem.populationmodels.standard.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class StandardFactoryImpl extends EFactoryImpl implements StandardFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static StandardFactory init() {

+		try {

+			StandardFactory theStandardFactory = (StandardFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/populationmodels/standard"); 

+			if (theStandardFactory != null) {

+				return theStandardFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new StandardFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case StandardPackage.STANDARD_POPULATION_MODEL: return createStandardPopulationModel();

+			case StandardPackage.POPULATION_MODEL_LABEL: return createPopulationModelLabel();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL: return createStandardPopulationModelLabel();

+			case StandardPackage.POPULATION_MODEL_LABEL_VALUE: return createPopulationModelLabelValue();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE: return createStandardPopulationModelLabelValue();

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL: return createStochasticStandardPopulationModel();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModel createStandardPopulationModel() {

+		StandardPopulationModelImpl standardPopulationModel = new StandardPopulationModelImpl();

+		return standardPopulationModel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelLabel createPopulationModelLabel() {

+		PopulationModelLabelImpl populationModelLabel = new PopulationModelLabelImpl();

+		return populationModelLabel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabel createStandardPopulationModelLabel() {

+		StandardPopulationModelLabelImpl standardPopulationModelLabel = new StandardPopulationModelLabelImpl();

+		return standardPopulationModelLabel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelLabelValue createPopulationModelLabelValue() {

+		PopulationModelLabelValueImpl populationModelLabelValue = new PopulationModelLabelValueImpl();

+		return populationModelLabelValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue createStandardPopulationModelLabelValue() {

+		StandardPopulationModelLabelValueImpl standardPopulationModelLabelValue = new StandardPopulationModelLabelValueImpl();

+		return standardPopulationModelLabelValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StochasticStandardPopulationModel createStochasticStandardPopulationModel() {

+		StochasticStandardPopulationModelImpl stochasticStandardPopulationModel = new StochasticStandardPopulationModelImpl();

+		return stochasticStandardPopulationModel;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPackage getStandardPackage() {

+		return (StandardPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static StandardPackage getPackage() {

+		return StandardPackage.eINSTANCE;

+	}

+

+} //StandardFactoryImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPackageImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPackageImpl.java
new file mode 100644
index 0000000..96a3257
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPackageImpl.java
@@ -0,0 +1,588 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EOperation;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.emf.ecore.EcorePackage;

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.stem.core.graph.GraphPackage;

+

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.ModelPackage;

+

+import org.eclipse.stem.core.solver.SolverPackage;

+

+import org.eclipse.stem.definitions.labels.LabelsPackage;

+import org.eclipse.stem.populationmodels.standard.PopulationModel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StandardFactory;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class StandardPackageImpl extends EPackageImpl implements StandardPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass populationModelEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass standardPopulationModelEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass populationModelLabelEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass standardPopulationModelLabelEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass integrationLabelEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass integrationLabelValueEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass integrationDecoratorEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass populationModelLabelValueEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass standardPopulationModelLabelValueEClass = null;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass stochasticStandardPopulationModelEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private StandardPackageImpl() {

+		super(eNS_URI, StandardFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.

+	 * 

+	 * <p>This method is used to initialize {@link StandardPackage#eINSTANCE} when that field is accessed.

+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static StandardPackage init() {

+		if (isInited) return (StandardPackage)EPackage.Registry.INSTANCE.getEPackage(StandardPackage.eNS_URI);

+

+		// Obtain or create and register package

+		StandardPackageImpl theStandardPackage = (StandardPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StandardPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StandardPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		LabelsPackage.eINSTANCE.eClass();

+

+		// Create package meta-data objects

+		theStandardPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theStandardPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theStandardPackage.freeze();

+

+  

+		// Update the registry and return the package

+		EPackage.Registry.INSTANCE.put(StandardPackage.eNS_URI, theStandardPackage);

+		return theStandardPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getPopulationModel() {

+		return populationModelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getPopulationModel_PopulationIdentifier() {

+		return (EAttribute)populationModelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getPopulationModel_Name() {

+		return (EAttribute)populationModelEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getStandardPopulationModel() {

+		return standardPopulationModelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModel_BirthRate() {

+		return (EAttribute)standardPopulationModelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModel_DeathRate() {

+		return (EAttribute)standardPopulationModelEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModel_TimePeriod() {

+		return (EAttribute)standardPopulationModelEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getPopulationModelLabel() {

+		return populationModelLabelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getPopulationModelLabel_PopulationLabel() {

+		return (EReference)populationModelLabelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getStandardPopulationModelLabel() {

+		return standardPopulationModelLabelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getStandardPopulationModelLabel_DeltaValue() {

+		return (EReference)standardPopulationModelLabelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getStandardPopulationModelLabel_ProbeValue() {

+		return (EReference)standardPopulationModelLabelEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getStandardPopulationModelLabel_TempValue() {

+		return (EReference)standardPopulationModelLabelEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getStandardPopulationModelLabel_OriginalValue() {

+		return (EReference)standardPopulationModelLabelEClass.getEStructuralFeatures().get(3);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EReference getStandardPopulationModelLabel_ErrorScale() {

+		return (EReference)standardPopulationModelLabelEClass.getEStructuralFeatures().get(4);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getIntegrationLabel() {

+		return integrationLabelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getIntegrationLabelValue() {

+		return integrationLabelValueEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getIntegrationDecorator() {

+		return integrationDecoratorEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getPopulationModelLabelValue() {

+		return populationModelLabelValueEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getStandardPopulationModelLabelValue() {

+		return standardPopulationModelLabelValueEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModelLabelValue_Count() {

+		return (EAttribute)standardPopulationModelLabelValueEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModelLabelValue_Incidence() {

+		return (EAttribute)standardPopulationModelLabelValueEClass.getEStructuralFeatures().get(1);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModelLabelValue_Births() {

+		return (EAttribute)standardPopulationModelLabelValueEClass.getEStructuralFeatures().get(2);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModelLabelValue_Deaths() {

+		return (EAttribute)standardPopulationModelLabelValueEClass.getEStructuralFeatures().get(3);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStandardPopulationModelLabelValue_Density() {

+		return (EAttribute)standardPopulationModelLabelValueEClass.getEStructuralFeatures().get(4);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getStochasticStandardPopulationModel() {

+		return stochasticStandardPopulationModelEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getStochasticStandardPopulationModel_Gain() {

+		return (EAttribute)stochasticStandardPopulationModelEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardFactory getStandardFactory() {

+		return (StandardFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		populationModelEClass = createEClass(POPULATION_MODEL);

+		createEAttribute(populationModelEClass, POPULATION_MODEL__POPULATION_IDENTIFIER);

+		createEAttribute(populationModelEClass, POPULATION_MODEL__NAME);

+

+		standardPopulationModelEClass = createEClass(STANDARD_POPULATION_MODEL);

+		createEAttribute(standardPopulationModelEClass, STANDARD_POPULATION_MODEL__BIRTH_RATE);

+		createEAttribute(standardPopulationModelEClass, STANDARD_POPULATION_MODEL__DEATH_RATE);

+		createEAttribute(standardPopulationModelEClass, STANDARD_POPULATION_MODEL__TIME_PERIOD);

+

+		populationModelLabelEClass = createEClass(POPULATION_MODEL_LABEL);

+		createEReference(populationModelLabelEClass, POPULATION_MODEL_LABEL__POPULATION_LABEL);

+

+		standardPopulationModelLabelEClass = createEClass(STANDARD_POPULATION_MODEL_LABEL);

+		createEReference(standardPopulationModelLabelEClass, STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE);

+		createEReference(standardPopulationModelLabelEClass, STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE);

+		createEReference(standardPopulationModelLabelEClass, STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE);

+		createEReference(standardPopulationModelLabelEClass, STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE);

+		createEReference(standardPopulationModelLabelEClass, STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE);

+

+		integrationLabelEClass = createEClass(INTEGRATION_LABEL);

+

+		integrationLabelValueEClass = createEClass(INTEGRATION_LABEL_VALUE);

+

+		integrationDecoratorEClass = createEClass(INTEGRATION_DECORATOR);

+

+		populationModelLabelValueEClass = createEClass(POPULATION_MODEL_LABEL_VALUE);

+

+		standardPopulationModelLabelValueEClass = createEClass(STANDARD_POPULATION_MODEL_LABEL_VALUE);

+		createEAttribute(standardPopulationModelLabelValueEClass, STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT);

+		createEAttribute(standardPopulationModelLabelValueEClass, STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE);

+		createEAttribute(standardPopulationModelLabelValueEClass, STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS);

+		createEAttribute(standardPopulationModelLabelValueEClass, STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS);

+		createEAttribute(standardPopulationModelLabelValueEClass, STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY);

+

+		stochasticStandardPopulationModelEClass = createEClass(STOCHASTIC_STANDARD_POPULATION_MODEL);

+		createEAttribute(stochasticStandardPopulationModelEClass, STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);

+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);

+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);

+		LabelsPackage theLabelsPackage = (LabelsPackage)EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		populationModelEClass.getESuperTypes().add(theModelPackage.getNodeDecorator());

+		standardPopulationModelEClass.getESuperTypes().add(this.getPopulationModel());

+		standardPopulationModelEClass.getESuperTypes().add(this.getIntegrationDecorator());

+		populationModelLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicNodeLabel());

+		standardPopulationModelLabelEClass.getESuperTypes().add(this.getPopulationModelLabel());

+		standardPopulationModelLabelEClass.getESuperTypes().add(this.getIntegrationLabel());

+		populationModelLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());

+		standardPopulationModelLabelValueEClass.getESuperTypes().add(this.getPopulationModelLabelValue());

+		standardPopulationModelLabelValueEClass.getESuperTypes().add(this.getIntegrationLabelValue());

+		stochasticStandardPopulationModelEClass.getESuperTypes().add(this.getStandardPopulationModel());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(populationModelEClass, PopulationModel.class, "PopulationModel", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getPopulationModel_PopulationIdentifier(), theEcorePackage.getEString(), "populationIdentifier", "human", 0, 1, PopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getPopulationModel_Name(), theEcorePackage.getEString(), "name", "HumanPopulationModel", 0, 1, PopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(standardPopulationModelEClass, StandardPopulationModel.class, "StandardPopulationModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getStandardPopulationModel_BirthRate(), theEcorePackage.getEDouble(), "birthRate", "0.0", 0, 1, StandardPopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModel_DeathRate(), theEcorePackage.getEDouble(), "deathRate", "0.0", 0, 1, StandardPopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModel_TimePeriod(), ecorePackage.getELong(), "timePeriod", "86400000", 0, 1, StandardPopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(populationModelLabelEClass, PopulationModelLabel.class, "PopulationModelLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEReference(getPopulationModelLabel_PopulationLabel(), theLabelsPackage.getPopulationLabel(), null, "populationLabel", null, 0, 1, PopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(standardPopulationModelLabelEClass, StandardPopulationModelLabel.class, "StandardPopulationModelLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEReference(getStandardPopulationModelLabel_DeltaValue(), this.getStandardPopulationModelLabelValue(), null, "deltaValue", null, 0, 1, StandardPopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getStandardPopulationModelLabel_ProbeValue(), this.getStandardPopulationModelLabelValue(), null, "probeValue", null, 0, 1, StandardPopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getStandardPopulationModelLabel_TempValue(), this.getStandardPopulationModelLabelValue(), null, "tempValue", null, 0, 1, StandardPopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getStandardPopulationModelLabel_OriginalValue(), this.getStandardPopulationModelLabelValue(), null, "originalValue", null, 0, 1, StandardPopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEReference(getStandardPopulationModelLabel_ErrorScale(), this.getStandardPopulationModelLabelValue(), null, "errorScale", null, 0, 1, StandardPopulationModelLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		initEClass(integrationLabelEClass, IntegrationLabel.class, "IntegrationLabel", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS);

+

+		initEClass(integrationLabelValueEClass, IntegrationLabelValue.class, "IntegrationLabelValue", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS);

+

+		initEClass(integrationDecoratorEClass, IntegrationDecorator.class, "IntegrationDecorator", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS);

+

+		initEClass(populationModelLabelValueEClass, PopulationModelLabelValue.class, "PopulationModelLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+

+		initEClass(standardPopulationModelLabelValueEClass, StandardPopulationModelLabelValue.class, "StandardPopulationModelLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getStandardPopulationModelLabelValue_Count(), theEcorePackage.getEDouble(), "count", null, 0, 1, StandardPopulationModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModelLabelValue_Incidence(), theEcorePackage.getEDouble(), "incidence", null, 0, 1, StandardPopulationModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModelLabelValue_Births(), theEcorePackage.getEDouble(), "births", null, 0, 1, StandardPopulationModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModelLabelValue_Deaths(), theEcorePackage.getEDouble(), "deaths", null, 0, 1, StandardPopulationModelLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+		initEAttribute(getStandardPopulationModelLabelValue_Density(), theEcorePackage.getEDouble(), "density", "0.0", 0, 1, StandardPopulationModelLabelValue.class, !IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		EOperation op = addEOperation(standardPopulationModelLabelValueEClass, theEcorePackage.getEBoolean(), "adjustDelta", 0, 1, IS_UNIQUE, IS_ORDERED);

+		addEParameter(op, this.getIntegrationLabelValue(), "value", 0, 1, IS_UNIQUE, IS_ORDERED);

+

+		addEOperation(standardPopulationModelLabelValueEClass, theEcorePackage.getEDouble(), "getAdditions", 0, 1, IS_UNIQUE, IS_ORDERED);

+

+		addEOperation(standardPopulationModelLabelValueEClass, theEcorePackage.getEDouble(), "getSubstractions", 0, 1, IS_UNIQUE, IS_ORDERED);

+

+		initEClass(stochasticStandardPopulationModelEClass, StochasticStandardPopulationModel.class, "StochasticStandardPopulationModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getStochasticStandardPopulationModel_Gain(), theEcorePackage.getEDouble(), "gain", "0.01", 0, 1, StochasticStandardPopulationModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //StandardPackageImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelImpl.java
new file mode 100644
index 0000000..eb48fde
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelImpl.java
@@ -0,0 +1,383 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Iterator;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.EList;

+

+import org.eclipse.emf.ecore.EClass;

+

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.Node;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StandardFactory;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl#getBirthRate <em>Birth Rate</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl#getDeathRate <em>Death Rate</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelImpl#getTimePeriod <em>Time Period</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class StandardPopulationModelImpl extends PopulationModelImpl implements StandardPopulationModel {

+	/**

+	 * The default value of the '{@link #getBirthRate() <em>Birth Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getBirthRate()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double BIRTH_RATE_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getBirthRate() <em>Birth Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getBirthRate()

+	 * @generated

+	 * @ordered

+	 */

+	protected double birthRate = BIRTH_RATE_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getDeathRate() <em>Death Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDeathRate()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double DEATH_RATE_EDEFAULT = 0.0;

+

+	/**

+	 * The cached value of the '{@link #getDeathRate() <em>Death Rate</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDeathRate()

+	 * @generated

+	 * @ordered

+	 */

+	protected double deathRate = DEATH_RATE_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getTimePeriod() <em>Time Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTimePeriod()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final long TIME_PERIOD_EDEFAULT = 86400000L;

+

+	/**

+	 * The cached value of the '{@link #getTimePeriod() <em>Time Period</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTimePeriod()

+	 * @generated

+	 * @ordered

+	 */

+	protected long timePeriod = TIME_PERIOD_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public StandardPopulationModelImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.STANDARD_POPULATION_MODEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getBirthRate() {

+		return birthRate;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setBirthRate(double newBirthRate) {

+		double oldBirthRate = birthRate;

+		birthRate = newBirthRate;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE, oldBirthRate, birthRate));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getDeathRate() {

+		return deathRate;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDeathRate(double newDeathRate) {

+		double oldDeathRate = deathRate;

+		deathRate = newDeathRate;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE, oldDeathRate, deathRate));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public long getTimePeriod() {

+		return timePeriod;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setTimePeriod(long newTimePeriod) {

+		long oldTimePeriod = timePeriod;

+		timePeriod = newTimePeriod;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD, oldTimePeriod, timePeriod));

+	}

+

+	/**

+	 * Decorate the graph for a standard population model

+	 * 

+	 */

+	@Override

+	public void decorateGraph() {

+		super.decorateGraph();

+	} // decorateGraph

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:

+				return getBirthRate();

+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:

+				return getDeathRate();

+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:

+				return getTimePeriod();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:

+				setBirthRate((Double)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:

+				setDeathRate((Double)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:

+				setTimePeriod((Long)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:

+				setBirthRate(BIRTH_RATE_EDEFAULT);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:

+				setDeathRate(DEATH_RATE_EDEFAULT);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:

+				setTimePeriod(TIME_PERIOD_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:

+				return birthRate != BIRTH_RATE_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:

+				return deathRate != DEATH_RATE_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:

+				return timePeriod != TIME_PERIOD_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (birthRate: ");

+		result.append(birthRate);

+		result.append(", deathRate: ");

+		result.append(deathRate);

+		result.append(", timePeriod: ");

+		result.append(timePeriod);

+		result.append(')');

+		return result.toString();

+	}

+

+	@Override

+	public PopulationModelLabel createPopulationLabel() {

+		return StandardFactory.eINSTANCE.createStandardPopulationModelLabel();

+	}

+

+	@Override

+	public PopulationModelLabelValue createPopulationLabelValue() {

+		return StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue();

+	}

+

+	public void calculateDelta(STEMTime time, long timeDelta,

+			EList<DynamicLabel> labels) {

+		// We simply calculate the change from the birth/death rate

+		// adjusted for the time period used in the simulation

+		

+		double adjustedBirthRate = adjustRate(this.getBirthRate(), this.getTimePeriod(), timeDelta);

+		double adjustedDeathRate = adjustRate(this.getDeathRate(), this.getTimePeriod(), timeDelta);

+		

+		for(DynamicLabel label:labels) {

+			StandardPopulationModelLabelImpl slabel = (StandardPopulationModelLabelImpl)label;

+			StandardPopulationModelLabelValue delta = slabel.getDeltaValue();

+			StandardPopulationModelLabelValue current = slabel.getProbeValue();

+			

+			double currentPopulation = current.getCount();

+			double births = currentPopulation * adjustedBirthRate;

+			double deaths = currentPopulation * adjustedDeathRate;

+			delta.setIncidence(births-deaths);

+			delta.setCount(births-deaths);

+			delta.setBirths(births);

+			delta.setDeaths(deaths);

+		}

+	}

+

+	public void applyExternalDeltas(STEMTime time, long timeDelta,

+			EList<DynamicLabel> labels) {

+		for (final Iterator<DynamicLabel> currentStateLabelIter = labels

+				.iterator(); currentStateLabelIter.hasNext();) {

+			final StandardPopulationModelLabel plabel = (StandardPopulationModelLabel) currentStateLabelIter

+					.next();

+			

+			StandardPopulationModelLabelValue myDelta = plabel.getDeltaValue();

+			Node n = plabel.getNode();

+			

+			// Find other labels on the node that wants to exchange data

+			

+			EList<NodeLabel> labs = n.getLabels();

+			for(NodeLabel l:labs) {

+				if(l instanceof IntegrationLabel && !l.equals(plabel)) {

+					SimpleDataExchangeLabelValue sdeLabelValue = (SimpleDataExchangeLabelValue)((IntegrationLabel)l).getDeltaValue();

+					double additions = sdeLabelValue.getAdditions();

+					double substractions = sdeLabelValue.getSubstractions();

+					

+					// Additions are births. Observe that additions should be 0 since 

+					// other decorators are disease models that don't cause an "increase"

+					// in births.

+					myDelta.setCount(myDelta.getCount()+additions);

+					

+					// Substractions are deaths 

+					myDelta.setCount(myDelta.getCount() - substractions);

+				}

+			}

+

+		}

+	}

+	

+	private double adjustRate(double rate, long ratePeriod, long actualPeriod) {

+		return rate * ((double)actualPeriod/(double)ratePeriod);

+	}

+	

+	public void doModelSpecificAdjustments(LabelValue label) {

+		// TODO Auto-generated method stub

+		

+	}

+

+	

+	public boolean isDeterministic() {

+		return true;

+	}

+

+} //StandardPopulationModelImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelImpl.java
new file mode 100644
index 0000000..654d15a
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelImpl.java
@@ -0,0 +1,461 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Calendar;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.InternalEObject;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.definitions.labels.PopulationLabel;

+import org.eclipse.stem.populationmodels.standard.StandardFactory;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model Label</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl#getDeltaValue <em>Delta Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl#getProbeValue <em>Probe Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl#getTempValue <em>Temp Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl#getOriginalValue <em>Original Value</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelImpl#getErrorScale <em>Error Scale</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class StandardPopulationModelLabelImpl extends PopulationModelLabelImpl implements StandardPopulationModelLabel {

+	/**

+	 * The cached value of the '{@link #getDeltaValue() <em>Delta Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDeltaValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected StandardPopulationModelLabelValue deltaValue;

+	/**

+	 * The cached value of the '{@link #getProbeValue() <em>Probe Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getProbeValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected StandardPopulationModelLabelValue probeValue;

+	/**

+	 * The cached value of the '{@link #getTempValue() <em>Temp Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getTempValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected StandardPopulationModelLabelValue tempValue;

+	/**

+	 * The cached value of the '{@link #getOriginalValue() <em>Original Value</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getOriginalValue()

+	 * @generated

+	 * @ordered

+	 */

+	protected StandardPopulationModelLabelValue originalValue;

+	/**

+	 * The cached value of the '{@link #getErrorScale() <em>Error Scale</em>}' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getErrorScale()

+	 * @generated

+	 * @ordered

+	 */

+	protected StandardPopulationModelLabelValue errorScale;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	protected StandardPopulationModelLabelImpl() {

+		super();

+		setCurrentValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setNextValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setOriginalValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setTempValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setProbeValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setErrorScale(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+		setDeltaValue(StandardFactory.eINSTANCE.createStandardPopulationModelLabelValue());

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue getDeltaValue() {

+		if (deltaValue != null && deltaValue.eIsProxy()) {

+			InternalEObject oldDeltaValue = (InternalEObject)deltaValue;

+			deltaValue = (StandardPopulationModelLabelValue)eResolveProxy(oldDeltaValue);

+			if (deltaValue != oldDeltaValue) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));

+			}

+		}

+		return deltaValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue basicGetDeltaValue() {

+		return deltaValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDeltaValue(StandardPopulationModelLabelValue newDeltaValue) {

+		StandardPopulationModelLabelValue oldDeltaValue = deltaValue;

+		deltaValue = newDeltaValue;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE, oldDeltaValue, deltaValue));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue getProbeValue() {

+		if (probeValue != null && probeValue.eIsProxy()) {

+			InternalEObject oldProbeValue = (InternalEObject)probeValue;

+			probeValue = (StandardPopulationModelLabelValue)eResolveProxy(oldProbeValue);

+			if (probeValue != oldProbeValue) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE, oldProbeValue, probeValue));

+			}

+		}

+		return probeValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue basicGetProbeValue() {

+		return probeValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setProbeValue(StandardPopulationModelLabelValue newProbeValue) {

+		StandardPopulationModelLabelValue oldProbeValue = probeValue;

+		probeValue = newProbeValue;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE, oldProbeValue, probeValue));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue getTempValue() {

+		if (tempValue != null && tempValue.eIsProxy()) {

+			InternalEObject oldTempValue = (InternalEObject)tempValue;

+			tempValue = (StandardPopulationModelLabelValue)eResolveProxy(oldTempValue);

+			if (tempValue != oldTempValue) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE, oldTempValue, tempValue));

+			}

+		}

+		return tempValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue basicGetTempValue() {

+		return tempValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setTempValue(StandardPopulationModelLabelValue newTempValue) {

+		StandardPopulationModelLabelValue oldTempValue = tempValue;

+		tempValue = newTempValue;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE, oldTempValue, tempValue));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue getOriginalValue() {

+		if (originalValue != null && originalValue.eIsProxy()) {

+			InternalEObject oldOriginalValue = (InternalEObject)originalValue;

+			originalValue = (StandardPopulationModelLabelValue)eResolveProxy(oldOriginalValue);

+			if (originalValue != oldOriginalValue) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));

+			}

+		}

+		return originalValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue basicGetOriginalValue() {

+		return originalValue;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setOriginalValue(StandardPopulationModelLabelValue newOriginalValue) {

+		StandardPopulationModelLabelValue oldOriginalValue = originalValue;

+		originalValue = newOriginalValue;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE, oldOriginalValue, originalValue));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue getErrorScale() {

+		if (errorScale != null && errorScale.eIsProxy()) {

+			InternalEObject oldErrorScale = (InternalEObject)errorScale;

+			errorScale = (StandardPopulationModelLabelValue)eResolveProxy(oldErrorScale);

+			if (errorScale != oldErrorScale) {

+				if (eNotificationRequired())

+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE, oldErrorScale, errorScale));

+			}

+		}

+		return errorScale;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValue basicGetErrorScale() {

+		return errorScale;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setErrorScale(StandardPopulationModelLabelValue newErrorScale) {

+		StandardPopulationModelLabelValue oldErrorScale = errorScale;

+		errorScale = newErrorScale;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE, oldErrorScale, errorScale));

+	}

+

+	/**

+	 * Reset the dynamic label. This sets the {@link LabelValue}s back to their

+	 * initial states.

+	 * 

+	 * @model volatile="true" transient="true" changeable="false"

+	 */

+	@Override

+	public void reset() {

+		((StandardPopulationModelLabelValue)this.getCurrentValue()).reset();

+		((StandardPopulationModelLabelValue)this.getNextValue()).reset();

+		this.getDeltaValue().reset();

+		this.getTempValue().reset();

+		this.getProbeValue().reset();

+		this.getErrorScale().reset();

+		

+		double originalCount = this.getPopulationLabel().getCurrentPopulationValue().getCount();

+		((StandardPopulationModelLabelValue)this.getCurrentValue()).setCount(originalCount);

+	}

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE:

+				if (resolve) return getDeltaValue();

+				return basicGetDeltaValue();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE:

+				if (resolve) return getProbeValue();

+				return basicGetProbeValue();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE:

+				if (resolve) return getTempValue();

+				return basicGetTempValue();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE:

+				if (resolve) return getOriginalValue();

+				return basicGetOriginalValue();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE:

+				if (resolve) return getErrorScale();

+				return basicGetErrorScale();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE:

+				setDeltaValue((StandardPopulationModelLabelValue)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE:

+				setProbeValue((StandardPopulationModelLabelValue)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE:

+				setTempValue((StandardPopulationModelLabelValue)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE:

+				setOriginalValue((StandardPopulationModelLabelValue)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE:

+				setErrorScale((StandardPopulationModelLabelValue)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE:

+				setDeltaValue((StandardPopulationModelLabelValue)null);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE:

+				setProbeValue((StandardPopulationModelLabelValue)null);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE:

+				setTempValue((StandardPopulationModelLabelValue)null);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE:

+				setOriginalValue((StandardPopulationModelLabelValue)null);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE:

+				setErrorScale((StandardPopulationModelLabelValue)null);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE:

+				return deltaValue != null;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE:

+				return probeValue != null;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE:

+				return tempValue != null;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE:

+				return originalValue != null;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE:

+				return errorScale != null;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * Reset to the correct population value for the

+	 * passed in time

+	 * 

+	 * @param time Reference time

+	 */

+	public void reset(STEMTime time) {

+		StandardPopulationModel spm = (StandardPopulationModel)this.getDecorator();

+		PopulationLabel plabel = this.getPopulationLabel();

+		int year = plabel.getValidYear();

+		Calendar c = Calendar.getInstance();

+		c.setTime(time.getTime());

+		int startYear = c.get(Calendar.YEAR);

+		double growth = spm.getBirthRate() - spm.getDeathRate();

+		double dailyGrowth = (spm.getTimePeriod() / 86400000.0)*growth;

+		double diff = ((double)startYear - (double)year)*365.25; // approx

+		double currentPopulation = ((StandardPopulationModelLabelValue)this.getCurrentValue()).getCount();

+		dailyGrowth = 1.0 + dailyGrowth;

+		double newPopulation = currentPopulation * Math.pow(dailyGrowth, diff);

+		((StandardPopulationModelLabelValue)this.getCurrentValue()).setCount(newPopulation);	

+		// Store the additions/substractions in the delta value so that disease models can

+		// adjust their counts

+		double popdiff = newPopulation - currentPopulation;

+		if(popdiff > 0.0)

+			(this.getDeltaValue()).setBirths(popdiff);

+		else

+			(this.getDeltaValue()).setDeaths(-popdiff);

+	}

+

+	

+} //StandardPopulationModelLabelImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelValueImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelValueImpl.java
new file mode 100644
index 0000000..edbe1eb
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StandardPopulationModelLabelValueImpl.java
@@ -0,0 +1,458 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.graph.Node;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.definitions.labels.AreaLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Population Model Label Value</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl#getCount <em>Count</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl#getIncidence <em>Incidence</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl#getBirths <em>Births</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl#getDeaths <em>Deaths</em>}</li>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StandardPopulationModelLabelValueImpl#getDensity <em>Density</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class StandardPopulationModelLabelValueImpl extends PopulationModelLabelValueImpl implements StandardPopulationModelLabelValue {

+	/**

+	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getCount()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double COUNT_EDEFAULT = 0.0;

+	/**

+	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getCount()

+	 * @generated

+	 * @ordered

+	 */

+	protected double count = COUNT_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getIncidence() <em>Incidence</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getIncidence()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double INCIDENCE_EDEFAULT = 0.0;

+	/**

+	 * The cached value of the '{@link #getIncidence() <em>Incidence</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getIncidence()

+	 * @generated

+	 * @ordered

+	 */

+	protected double incidence = INCIDENCE_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getBirths() <em>Births</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getBirths()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double BIRTHS_EDEFAULT = 0.0;

+	/**

+	 * The cached value of the '{@link #getBirths() <em>Births</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getBirths()

+	 * @generated

+	 * @ordered

+	 */

+	protected double births = BIRTHS_EDEFAULT;

+	/**

+	 * The default value of the '{@link #getDeaths() <em>Deaths</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDeaths()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double DEATHS_EDEFAULT = 0.0;

+	/**

+	 * The cached value of the '{@link #getDeaths() <em>Deaths</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDeaths()

+	 * @generated

+	 * @ordered

+	 */

+	protected double deaths = DEATHS_EDEFAULT;

+

+	/**

+	 * The default value of the '{@link #getDensity() <em>Density</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getDensity()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double DENSITY_EDEFAULT = 0.0;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardPopulationModelLabelValueImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getCount() {

+		return count;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCount(double newCount) {

+		double oldCount = count;

+		count = newCount;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT, oldCount, count));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getIncidence() {

+		return incidence;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setIncidence(double newIncidence) {

+		double oldIncidence = incidence;

+		incidence = newIncidence;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE, oldIncidence, incidence));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getBirths() {

+		return births;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setBirths(double newBirths) {

+		double oldBirths = births;

+		births = newBirths;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS, oldBirths, births));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getDeaths() {

+		return deaths;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setDeaths(double newDeaths) {

+		double oldDeaths = deaths;

+		deaths = newDeaths;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS, oldDeaths, deaths));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public double getDensity() {

+		double population = this.count;

+		StandardPopulationModelLabel label = (StandardPopulationModelLabel)this.eContainer();

+		Node n= label.getNode();

+		double area = 0.0;

+		for(NodeLabel nodeLab : n.getLabels()) {

+			if(nodeLab instanceof AreaLabel) {

+				area = ((AreaLabel)nodeLab).getCurrentAreaValue().getArea();

+				break;

+			}

+		}

+		return (area > 0.0)? (population/area) : 0.0;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public boolean isSetDensity() {

+		return true; // Density always set

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public boolean adjustDelta(IntegrationLabelValue value) {

+		// TODO: implement this method

+		// Ensure that you remove @generated or mark it @generated NOT

+		return false;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public double getAdditions() {

+		return births; // Births are additions

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public double getSubstractions() {

+		return deaths; // Deaths are substractions

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT:

+				return getCount();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE:

+				return getIncidence();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS:

+				return getBirths();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS:

+				return getDeaths();

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY:

+				return getDensity();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT:

+				setCount((Double)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE:

+				setIncidence((Double)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS:

+				setBirths((Double)newValue);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS:

+				setDeaths((Double)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT:

+				setCount(COUNT_EDEFAULT);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE:

+				setIncidence(INCIDENCE_EDEFAULT);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS:

+				setBirths(BIRTHS_EDEFAULT);

+				return;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS:

+				setDeaths(DEATHS_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT:

+				return count != COUNT_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE:

+				return incidence != INCIDENCE_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS:

+				return births != BIRTHS_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS:

+				return deaths != DEATHS_EDEFAULT;

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY:

+				return isSetDensity();

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (count: ");

+		result.append(count);

+		result.append(", incidence: ");

+		result.append(incidence);

+		result.append(", births: ");

+		result.append(births);

+		result.append(", deaths: ");

+		result.append(deaths);

+		result.append(')');

+		return result.toString();

+	}

+

+	public IntegrationLabelValue abs() {

+		this.count = Math.abs(this.count);

+		this.births = Math.abs(this.births);

+		this.deaths = Math.abs(this.deaths);

+		return this;

+	}

+

+	public IntegrationLabelValue add(IntegrationLabelValue value) {

+		StandardPopulationModelLabelValue v = (StandardPopulationModelLabelValue)value;

+		this.count += v.getCount();

+		return this;

+	}

+

+	public IntegrationLabelValue add(double addition) {

+		this.count += addition;

+		return this;

+	}

+

+	public IntegrationLabelValue scale(double scaleFactor) {

+		this.count *= scaleFactor;

+		return this;

+	}

+

+	public IntegrationLabelValue set(IntegrationLabelValue value) {

+		StandardPopulationModelLabelValue v = (StandardPopulationModelLabelValue)value;

+		this.count = v.getCount();

+		this.births = v.getBirths();

+		this.deaths = v.getDeaths();

+		this.incidence = v.getIncidence();

+		return this;

+	}

+

+	public IntegrationLabelValue sub(IntegrationLabelValue value) {

+		StandardPopulationModelLabelValue v = (StandardPopulationModelLabelValue)value;

+		this.count -= v.getCount();

+		return this;

+	}

+

+	public IntegrationLabelValue divide(IntegrationLabelValue d) {

+		StandardPopulationModelLabelValue v = (StandardPopulationModelLabelValue)d;

+		this.count /= v.getCount();

+		return this;

+	}

+	

+	public double max() {

+		return count;

+	}

+	

+	@Override

+	public void reset() {

+		super.reset();

+		this.setCount(COUNT_EDEFAULT);

+		this.setBirths(BIRTHS_EDEFAULT);

+		this.setDeaths(DEATHS_EDEFAULT);

+	}

+} //StandardPopulationModelLabelValueImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StochasticStandardPopulationModelImpl.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StochasticStandardPopulationModelImpl.java
new file mode 100644
index 0000000..c2eb8b3
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/impl/StochasticStandardPopulationModelImpl.java
@@ -0,0 +1,217 @@
+package org.eclipse.stem.populationmodels.standard.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Random;

+

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+import org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Stochastic Standard Population Model</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.populationmodels.standard.impl.StochasticStandardPopulationModelImpl#getGain <em>Gain</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+public class StochasticStandardPopulationModelImpl extends StandardPopulationModelImpl implements StochasticStandardPopulationModel {

+	protected static double MAX_GAIN = 0.02;

+	

+	/**

+	 * The default value of the '{@link #getGain() <em>Gain</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getGain()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double GAIN_EDEFAULT = 0.01;

+

+	/**

+	 * The cached value of the '{@link #getGain() <em>Gain</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getGain()

+	 * @generated

+	 * @ordered

+	 */

+	protected double gain = GAIN_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public StochasticStandardPopulationModelImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return StandardPackage.Literals.STOCHASTIC_STANDARD_POPULATION_MODEL;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getGain() {

+		return gain;

+	}

+

+	@Override

+	public void doModelSpecificAdjustments(LabelValue label) {

+		final StandardPopulationModelLabelValue currentLabelValue = (StandardPopulationModelLabelValue) label;

+		double oldCount = currentLabelValue.getCount();

+		double incidence = currentLabelValue.getIncidence();

+		double newIncidence = incidence*computeNoise();

+		double diff = newIncidence - incidence;

+		

+		double newCount = currentLabelValue.getCount() + diff;

+		double newBirths = currentLabelValue.getBirths() + diff/2.0;

+		double newDeaths = currentLabelValue.getDeaths() + diff/2.0;

+		

+		currentLabelValue.setCount(newCount);

+		currentLabelValue.setBirths(newBirths);

+		currentLabelValue.setDeaths(newDeaths);

+	}

+	

+	Random rand = new Random();

+	protected double computeNoise() {

+		return this.computeNoise(this.getGain(), this.rand);

+	}

+	

+	/**

+	 * This method returns a double precision random noise variable

+	 * r between (1.0+x) and (1.0-x)

+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise

+	 * 

+	 * @param gain

+	 * @param rand

+	 * @return noise

+	 */

+	protected double computeNoise(final double gain, final Random rand) {

+     

+	    assert (gain <= MAX_GAIN):"STOCHASTIC NOISE must be 'small', therefore gain parameter must be < MAX_GAIN="+MAX_GAIN; // maximum noise should be 1%

+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1

+		x *= gain;

+		x += 1.0;

+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";

+		return x;

+		

+	} // getNoise

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setGain(double newGain) {

+		double oldGain = gain;

+		gain = newGain;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN, oldGain, gain));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN:

+				return getGain();

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN:

+				setGain((Double)newValue);

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN:

+				setGain(GAIN_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN:

+				return gain != GAIN_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (gain: ");

+		result.append(gain);

+		result.append(')');

+		return result.toString();

+	}

+

+} //StochasticStandardPopulationModelImpl

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelItemProvider.java
new file mode 100644
index 0000000..abd4424
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelItemProvider.java
@@ -0,0 +1,194 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import org.eclipse.stem.core.model.provider.NodeDecoratorItemProvider;

+import org.eclipse.stem.core.model.provider.DecoratorItemProvider;

+

+import org.eclipse.stem.populationmodels.standard.PopulationModel;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class PopulationModelItemProvider

+	extends NodeDecoratorItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addPopulationIdentifierPropertyDescriptor(object);

+			addNamePropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Population Identifier feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addPopulationIdentifierPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_PopulationModel_populationIdentifier_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationModel_populationIdentifier_feature", "_UI_PopulationModel_type"),

+				 StandardPackage.Literals.POPULATION_MODEL__POPULATION_IDENTIFIER,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Name feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addNamePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_PopulationModel_name_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationModel_name_feature", "_UI_PopulationModel_type"),

+				 StandardPackage.Literals.POPULATION_MODEL__NAME,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns PopulationModel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/custom16/PopulationModel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		String label = ((PopulationModel)object).getName();

+		return label == null || label.length() == 0 ?

+			getString("_UI_PopulationModel_type") :

+			getString("_UI_PopulationModel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(PopulationModel.class)) {

+			case StandardPackage.POPULATION_MODEL__POPULATION_IDENTIFIER:

+			case StandardPackage.POPULATION_MODEL__NAME:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return StandardEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelItemProvider.java
new file mode 100644
index 0000000..5861fdb
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelItemProvider.java
@@ -0,0 +1,162 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.core.graph.provider.DynamicNodeLabelItemProvider;

+

+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class PopulationModelLabelItemProvider

+	extends DynamicNodeLabelItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelLabelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addPopulationLabelPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Population Label feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addPopulationLabelPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_PopulationModelLabel_populationLabel_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_PopulationModelLabel_populationLabel_feature", "_UI_PopulationModelLabel_type"),

+				 StandardPackage.Literals.POPULATION_MODEL_LABEL__POPULATION_LABEL,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns PopulationModelLabel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PopulationModelLabel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((PopulationModelLabel)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_PopulationModelLabel_type") :

+			getString("_UI_PopulationModelLabel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return StandardEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelValueItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelValueItemProvider.java
new file mode 100644
index 0000000..9517578
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelLabelValueItemProvider.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class PopulationModelLabelValueItemProvider

+	extends LabelValueItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelLabelValueItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This returns PopulationModelLabelValue.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PopulationModelLabelValue"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		return getString("_UI_PopulationModelLabelValue_type");

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return StandardEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelValueItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelValueItemProvider.java
new file mode 100644
index 0000000..c25e791
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/PopulationModelValueItemProvider.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModelValue} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class PopulationModelValueItemProvider

+	extends LabelValueItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public PopulationModelValueItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This returns PopulationModelValue.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PopulationModelValue"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		return getString("_UI_PopulationModelValue_type");

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return StandardEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardEditPlugin.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardEditPlugin.java
new file mode 100644
index 0000000..39b0f65
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardEditPlugin.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;

+

+/**

+ * This is the central singleton for the Standard edit plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class StandardEditPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final StandardEditPlugin INSTANCE = new StandardEditPlugin();

+

+	/**

+	 * 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 StandardEditPlugin() {

+		super

+		  (new ResourceLocator [] {

+		     CoreEditPlugin.INSTANCE,

+		     DefinitionsEditPlugin.INSTANCE,

+		     EcoreEditPlugin.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/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardItemProviderAdapterFactory.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardItemProviderAdapterFactory.java
new file mode 100644
index 0000000..f60180f
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardItemProviderAdapterFactory.java
@@ -0,0 +1,328 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.populationmodels.standard.util.StandardAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class StandardItemProviderAdapterFactory extends StandardAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardPopulationModelItemProvider standardPopulationModelItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createStandardPopulationModelAdapter() {

+		if (standardPopulationModelItemProvider == null) {

+			standardPopulationModelItemProvider = new StandardPopulationModelItemProvider(this);

+		}

+

+		return standardPopulationModelItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PopulationModelLabelItemProvider populationModelLabelItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createPopulationModelLabelAdapter() {

+		if (populationModelLabelItemProvider == null) {

+			populationModelLabelItemProvider = new PopulationModelLabelItemProvider(this);

+		}

+

+		return populationModelLabelItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardPopulationModelLabelItemProvider standardPopulationModelLabelItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createStandardPopulationModelLabelAdapter() {

+		if (standardPopulationModelLabelItemProvider == null) {

+			standardPopulationModelLabelItemProvider = new StandardPopulationModelLabelItemProvider(this);

+		}

+

+		return standardPopulationModelLabelItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PopulationModelLabelValueItemProvider populationModelLabelValueItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createPopulationModelLabelValueAdapter() {

+		if (populationModelLabelValueItemProvider == null) {

+			populationModelLabelValueItemProvider = new PopulationModelLabelValueItemProvider(this);

+		}

+

+		return populationModelLabelValueItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardPopulationModelLabelValueItemProvider standardPopulationModelLabelValueItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createStandardPopulationModelLabelValueAdapter() {

+		if (standardPopulationModelLabelValueItemProvider == null) {

+			standardPopulationModelLabelValueItemProvider = new StandardPopulationModelLabelValueItemProvider(this);

+		}

+

+		return standardPopulationModelLabelValueItemProvider;

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StochasticStandardPopulationModelItemProvider stochasticStandardPopulationModelItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createStochasticStandardPopulationModelAdapter() {

+		if (stochasticStandardPopulationModelItemProvider == null) {

+			stochasticStandardPopulationModelItemProvider = new StochasticStandardPopulationModelItemProvider(this);

+		}

+

+		return stochasticStandardPopulationModelItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (standardPopulationModelItemProvider != null) standardPopulationModelItemProvider.dispose();

+		if (populationModelLabelItemProvider != null) populationModelLabelItemProvider.dispose();

+		if (standardPopulationModelLabelItemProvider != null) standardPopulationModelLabelItemProvider.dispose();

+		if (populationModelLabelValueItemProvider != null) populationModelLabelValueItemProvider.dispose();

+		if (standardPopulationModelLabelValueItemProvider != null) standardPopulationModelLabelValueItemProvider.dispose();

+		if (stochasticStandardPopulationModelItemProvider != null) stochasticStandardPopulationModelItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelItemProvider.java
new file mode 100644
index 0000000..01067ce
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelItemProvider.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModel;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class StandardPopulationModelItemProvider

+	extends PopulationModelItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addBirthRatePropertyDescriptor(object);

+			addDeathRatePropertyDescriptor(object);

+			addTimePeriodPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Birth Rate feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addBirthRatePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModel_birthRate_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModel_birthRate_feature", "_UI_StandardPopulationModel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL__BIRTH_RATE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Death Rate feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addDeathRatePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModel_deathRate_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModel_deathRate_feature", "_UI_StandardPopulationModel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL__DEATH_RATE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Time Period feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addTimePeriodPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModel_timePeriod_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModel_timePeriod_feature", "_UI_StandardPopulationModel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL__TIME_PERIOD,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns StandardPopulationModel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/custom16/StandardPopulationModel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		String label = ((StandardPopulationModel)object).getName();

+		return label == null || label.length() == 0 ?

+			getString("_UI_StandardPopulationModel_type") :

+			getString("_UI_StandardPopulationModel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(StandardPopulationModel.class)) {

+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:

+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:

+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelItemProvider.java
new file mode 100644
index 0000000..0d0708d
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelItemProvider.java
@@ -0,0 +1,240 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class StandardPopulationModelLabelItemProvider

+	extends PopulationModelLabelItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addDeltaValuePropertyDescriptor(object);

+			addProbeValuePropertyDescriptor(object);

+			addTempValuePropertyDescriptor(object);

+			addOriginalValuePropertyDescriptor(object);

+			addErrorScalePropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Delta Value feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addDeltaValuePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabel_deltaValue_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabel_deltaValue_feature", "_UI_StandardPopulationModelLabel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL__DELTA_VALUE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Probe Value feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addProbeValuePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabel_probeValue_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabel_probeValue_feature", "_UI_StandardPopulationModelLabel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL__PROBE_VALUE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Temp Value feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addTempValuePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabel_tempValue_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabel_tempValue_feature", "_UI_StandardPopulationModelLabel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL__TEMP_VALUE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Original Value feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addOriginalValuePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabel_originalValue_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabel_originalValue_feature", "_UI_StandardPopulationModelLabel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL__ORIGINAL_VALUE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Error Scale feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addErrorScalePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabel_errorScale_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabel_errorScale_feature", "_UI_StandardPopulationModelLabel_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL__ERROR_SCALE,

+				 true,

+				 false,

+				 true,

+				 null,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns StandardPopulationModelLabel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/StandardPopulationModelLabel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((StandardPopulationModelLabel)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_StandardPopulationModelLabel_type") :

+			getString("_UI_StandardPopulationModelLabel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelValueItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelValueItemProvider.java
new file mode 100644
index 0000000..34a92b5
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StandardPopulationModelLabelValueItemProvider.java
@@ -0,0 +1,246 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class StandardPopulationModelLabelValueItemProvider

+	extends PopulationModelLabelValueItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardPopulationModelLabelValueItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addCountPropertyDescriptor(object);

+			addIncidencePropertyDescriptor(object);

+			addBirthsPropertyDescriptor(object);

+			addDeathsPropertyDescriptor(object);

+			addDensityPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Count feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addCountPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabelValue_count_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabelValue_count_feature", "_UI_StandardPopulationModelLabelValue_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Incidence feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addIncidencePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabelValue_incidence_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabelValue_incidence_feature", "_UI_StandardPopulationModelLabelValue_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Births feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addBirthsPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabelValue_births_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabelValue_births_feature", "_UI_StandardPopulationModelLabelValue_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Deaths feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addDeathsPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabelValue_deaths_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabelValue_deaths_feature", "_UI_StandardPopulationModelLabelValue_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This adds a property descriptor for the Density feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addDensityPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StandardPopulationModelLabelValue_density_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StandardPopulationModelLabelValue_density_feature", "_UI_StandardPopulationModelLabelValue_type"),

+				 StandardPackage.Literals.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY,

+				 false,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns StandardPopulationModelLabelValue.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/StandardPopulationModelLabelValue"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		StandardPopulationModelLabelValue standardPopulationModelLabelValue = (StandardPopulationModelLabelValue)object;

+		return getString("_UI_StandardPopulationModelLabelValue_type") + " " + standardPopulationModelLabelValue.getCount();

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(StandardPopulationModelLabelValue.class)) {

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__COUNT:

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE:

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS:

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS:

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StochasticStandardPopulationModelItemProvider.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StochasticStandardPopulationModelItemProvider.java
new file mode 100644
index 0000000..ac969fb
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/provider/StochasticStandardPopulationModelItemProvider.java
@@ -0,0 +1,153 @@
+package org.eclipse.stem.populationmodels.standard.provider;

+

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class StochasticStandardPopulationModelItemProvider

+	extends StandardPopulationModelItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StochasticStandardPopulationModelItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addGainPropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Gain feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addGainPropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_StochasticStandardPopulationModel_gain_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_StochasticStandardPopulationModel_gain_feature", "_UI_StochasticStandardPopulationModel_type"),

+				 StandardPackage.Literals.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns StochasticStandardPopulationModel.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/custom16/StochasticStandardPopulationModel"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		String label = ((StochasticStandardPopulationModel)object).getName();

+		return label == null || label.length() == 0 ?

+			getString("_UI_StochasticStandardPopulationModel_type") :

+			getString("_UI_StochasticStandardPopulationModel_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(StochasticStandardPopulationModel.class)) {

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+}

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardAdapterFactory.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardAdapterFactory.java
new file mode 100644
index 0000000..4b49444
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardAdapterFactory.java
@@ -0,0 +1,486 @@
+package org.eclipse.stem.populationmodels.standard.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.common.SanityChecker;

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.DynamicNodeLabel;

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.graph.Label;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.core.model.Decorator;

+

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.NodeDecorator;

+import org.eclipse.stem.populationmodels.standard.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage

+ * @generated

+ */

+public class StandardAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static StandardPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = StandardPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unused") 

+	protected StandardSwitch<Adapter> modelSwitch =

+		new StandardSwitch<Adapter>() {

+			@Override

+			public Adapter casePopulationModel(PopulationModel object) {

+				return createPopulationModelAdapter();

+			}

+			@Override

+			public Adapter caseStandardPopulationModel(StandardPopulationModel object) {

+				return createStandardPopulationModelAdapter();

+			}

+			@Override

+			public Adapter casePopulationModelLabel(PopulationModelLabel object) {

+				return createPopulationModelLabelAdapter();

+			}

+			@Override

+			public Adapter caseStandardPopulationModelLabel(StandardPopulationModelLabel object) {

+				return createStandardPopulationModelLabelAdapter();

+			}

+			@Override

+			public Adapter caseIntegrationLabel(IntegrationLabel object) {

+				return createIntegrationLabelAdapter();

+			}

+			@Override

+			public Adapter caseIntegrationLabelValue(IntegrationLabelValue object) {

+				return createIntegrationLabelValueAdapter();

+			}

+			@Override

+			public Adapter caseIntegrationDecorator(IntegrationDecorator object) {

+				return createIntegrationDecoratorAdapter();

+			}

+			@Override

+			public Adapter casePopulationModelLabelValue(PopulationModelLabelValue object) {

+				return createPopulationModelLabelValueAdapter();

+			}

+			@Override

+			public Adapter caseStandardPopulationModelLabelValue(StandardPopulationModelLabelValue object) {

+				return createStandardPopulationModelLabelValueAdapter();

+			}

+			@Override

+			public Adapter caseStochasticStandardPopulationModel(StochasticStandardPopulationModel object) {

+				return createStochasticStandardPopulationModelAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter caseDecorator(Decorator object) {

+				return createDecoratorAdapter();

+			}

+			@Override

+			public Adapter caseNodeDecorator(NodeDecorator object) {

+				return createNodeDecoratorAdapter();

+			}

+			@Override

+			public Adapter caseLabel(Label object) {

+				return createLabelAdapter();

+			}

+			@Override

+			public Adapter caseDynamicLabel(DynamicLabel object) {

+				return createDynamicLabelAdapter();

+			}

+			@Override

+			public Adapter caseNodeLabel(NodeLabel object) {

+				return createNodeLabelAdapter();

+			}

+			@Override

+			public Adapter caseDynamicNodeLabel(DynamicNodeLabel object) {

+				return createDynamicNodeLabelAdapter();

+			}

+			@Override

+			public Adapter caseSanityChecker(SanityChecker object) {

+				return createSanityCheckerAdapter();

+			}

+			@Override

+			public Adapter caseLabelValue(LabelValue object) {

+				return createLabelValueAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.PopulationModel <em>Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModel

+	 * @generated

+	 */

+	public Adapter createPopulationModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModel <em>Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModel

+	 * @generated

+	 */

+	public Adapter createStandardPopulationModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabel <em>Population Model Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModelLabel

+	 * @generated

+	 */

+	public Adapter createPopulationModelLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel <em>Population Model Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabel

+	 * @generated

+	 */

+	public Adapter createStandardPopulationModelLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.IntegrationLabel <em>Integration Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.IntegrationLabel

+	 * @generated

+	 */

+	public Adapter createIntegrationLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.IntegrationLabelValue <em>Integration Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.IntegrationLabelValue

+	 * @generated

+	 */

+	public Adapter createIntegrationLabelValueAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.IntegrationDecorator <em>Integration Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.IntegrationDecorator

+	 * @generated

+	 */

+	public Adapter createIntegrationDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue <em>Population Model Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue

+	 * @generated

+	 */

+	public Adapter createPopulationModelLabelValueAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue <em>Population Model Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue

+	 * @generated

+	 */

+	public Adapter createStandardPopulationModelLabelValueAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel <em>Stochastic Standard Population Model</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.populationmodels.standard.StochasticStandardPopulationModel

+	 * @generated

+	 */

+	public Adapter createStochasticStandardPopulationModelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.Decorator

+	 * @generated

+	 */

+	public Adapter createDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.model.NodeDecorator

+	 * @generated

+	 */

+	public Adapter createNodeDecoratorAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.Label

+	 * @generated

+	 */

+	public Adapter createLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.DynamicLabel

+	 * @generated

+	 */

+	public Adapter createDynamicLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.NodeLabel

+	 * @generated

+	 */

+	public Adapter createNodeLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicNodeLabel <em>Dynamic Node Label</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.DynamicNodeLabel

+	 * @generated

+	 */

+	public Adapter createDynamicNodeLabelAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.SanityChecker

+	 * @generated

+	 */

+	public Adapter createSanityCheckerAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.graph.LabelValue

+	 * @generated

+	 */

+	public Adapter createLabelValueAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //StandardAdapterFactory

diff --git a/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardSwitch.java b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardSwitch.java
new file mode 100644
index 0000000..6906822
--- /dev/null
+++ b/org.eclipse.stem.populationmodels/src/org/eclipse/stem/populationmodels/standard/util/StandardSwitch.java
@@ -0,0 +1,508 @@
+package org.eclipse.stem.populationmodels.standard.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.common.SanityChecker;

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.DynamicNodeLabel;

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.graph.Label;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.NodeLabel;

+import org.eclipse.stem.core.model.Decorator;

+

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.NodeDecorator;

+import org.eclipse.stem.populationmodels.standard.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.populationmodels.standard.StandardPackage

+ * @generated

+ */

+@SuppressWarnings("all")

+public class StandardSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static StandardPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardSwitch() {

+		if (modelPackage == null) {

+			modelPackage = StandardPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case StandardPackage.POPULATION_MODEL: {

+				PopulationModel populationModel = (PopulationModel)theEObject;

+				T1 result = casePopulationModel(populationModel);

+				if (result == null) result = caseNodeDecorator(populationModel);

+				if (result == null) result = caseDecorator(populationModel);

+				if (result == null) result = caseIdentifiable(populationModel);

+				if (result == null) result = caseComparable(populationModel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.STANDARD_POPULATION_MODEL: {

+				StandardPopulationModel standardPopulationModel = (StandardPopulationModel)theEObject;

+				T1 result = caseStandardPopulationModel(standardPopulationModel);

+				if (result == null) result = casePopulationModel(standardPopulationModel);

+				if (result == null) result = caseIntegrationDecorator(standardPopulationModel);

+				if (result == null) result = caseNodeDecorator(standardPopulationModel);

+				if (result == null) result = caseDecorator(standardPopulationModel);

+				if (result == null) result = caseIdentifiable(standardPopulationModel);

+				if (result == null) result = caseComparable(standardPopulationModel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.POPULATION_MODEL_LABEL: {

+				PopulationModelLabel populationModelLabel = (PopulationModelLabel)theEObject;

+				T1 result = casePopulationModelLabel(populationModelLabel);

+				if (result == null) result = caseDynamicNodeLabel(populationModelLabel);

+				if (result == null) result = caseDynamicLabel(populationModelLabel);

+				if (result == null) result = caseNodeLabel(populationModelLabel);

+				if (result == null) result = caseLabel(populationModelLabel);

+				if (result == null) result = caseIdentifiable(populationModelLabel);

+				if (result == null) result = caseComparable(populationModelLabel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL: {

+				StandardPopulationModelLabel standardPopulationModelLabel = (StandardPopulationModelLabel)theEObject;

+				T1 result = caseStandardPopulationModelLabel(standardPopulationModelLabel);

+				if (result == null) result = casePopulationModelLabel(standardPopulationModelLabel);

+				if (result == null) result = caseIntegrationLabel(standardPopulationModelLabel);

+				if (result == null) result = caseDynamicNodeLabel(standardPopulationModelLabel);

+				if (result == null) result = caseDynamicLabel(standardPopulationModelLabel);

+				if (result == null) result = caseNodeLabel(standardPopulationModelLabel);

+				if (result == null) result = caseLabel(standardPopulationModelLabel);

+				if (result == null) result = caseIdentifiable(standardPopulationModelLabel);

+				if (result == null) result = caseComparable(standardPopulationModelLabel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.POPULATION_MODEL_LABEL_VALUE: {

+				PopulationModelLabelValue populationModelLabelValue = (PopulationModelLabelValue)theEObject;

+				T1 result = casePopulationModelLabelValue(populationModelLabelValue);

+				if (result == null) result = caseLabelValue(populationModelLabelValue);

+				if (result == null) result = caseSanityChecker(populationModelLabelValue);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE: {

+				StandardPopulationModelLabelValue standardPopulationModelLabelValue = (StandardPopulationModelLabelValue)theEObject;

+				T1 result = caseStandardPopulationModelLabelValue(standardPopulationModelLabelValue);

+				if (result == null) result = casePopulationModelLabelValue(standardPopulationModelLabelValue);

+				if (result == null) result = caseIntegrationLabelValue(standardPopulationModelLabelValue);

+				if (result == null) result = caseLabelValue(standardPopulationModelLabelValue);

+				if (result == null) result = caseSanityChecker(standardPopulationModelLabelValue);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			case StandardPackage.STOCHASTIC_STANDARD_POPULATION_MODEL: {

+				StochasticStandardPopulationModel stochasticStandardPopulationModel = (StochasticStandardPopulationModel)theEObject;

+				T1 result = caseStochasticStandardPopulationModel(stochasticStandardPopulationModel);

+				if (result == null) result = caseStandardPopulationModel(stochasticStandardPopulationModel);

+				if (result == null) result = casePopulationModel(stochasticStandardPopulationModel);

+				if (result == null) result = caseIntegrationDecorator(stochasticStandardPopulationModel);

+				if (result == null) result = caseNodeDecorator(stochasticStandardPopulationModel);

+				if (result == null) result = caseDecorator(stochasticStandardPopulationModel);

+				if (result == null) result = caseIdentifiable(stochasticStandardPopulationModel);

+				if (result == null) result = caseComparable(stochasticStandardPopulationModel);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 casePopulationModel(PopulationModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStandardPopulationModel(StandardPopulationModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 casePopulationModelLabel(PopulationModelLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStandardPopulationModelLabel(StandardPopulationModelLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Integration Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Integration Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIntegrationLabel(IntegrationLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Integration Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Integration Label Value</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIntegrationLabelValue(IntegrationLabelValue object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Integration Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIntegrationDecorator(IntegrationDecorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model Label Value</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 casePopulationModelLabelValue(PopulationModelLabelValue object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Population Model Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Population Model Label Value</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStandardPopulationModelLabelValue(StandardPopulationModelLabelValue object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Stochastic Standard Population Model</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Stochastic Standard Population Model</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseStochasticStandardPopulationModel(StochasticStandardPopulationModel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDecorator(Decorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseNodeDecorator(NodeDecorator object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseLabel(Label object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDynamicLabel(DynamicLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseNodeLabel(NodeLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseDynamicNodeLabel(DynamicNodeLabel object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSanityChecker(SanityChecker object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseLabelValue(LabelValue object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //StandardSwitch

diff --git a/org.eclipse.stem.releng/.project b/org.eclipse.stem.releng/.project
new file mode 100644
index 0000000..4547c59
--- /dev/null
+++ b/org.eclipse.stem.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.releng</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.releng/README.txt b/org.eclipse.stem.releng/README.txt
new file mode 100644
index 0000000..c73e1e2
--- /dev/null
+++ b/org.eclipse.stem.releng/README.txt
@@ -0,0 +1,61 @@
+This project serves as the repository for the release engineering components of the STEM project.  
+
+The folders "3.3" and "3.4" contain the scripts and configuration files needed to build STEM for the 
+Eclipse 3.3 and 3.4 platforms, respectively.  The folder "maps" contains the configuration files that
+map the id's of the plugins and features to their repository locations.  This indirection allows the
+exact repository version of a plugin to be altered without changing the rest of the build process.
+
+The files that define the build process are in the "3.3/config" and "3.4/config" folders.  The files
+in these two folders only differ slightly in the details that are different between versions 3.3 and 3.4
+of Eclipse.  
+
+	allElements.xml		This has to do with "feature" builds.
+	build.bat			This is the script file that runs the build process.
+	build.properties	Specification of the build process, such as the platforms to build on, the
+						version number encoded in the build.
+	customTargets.xml	The main top-level set of ant targets that are processed during the build.  This
+							is modified to incorporate specific processing steps.  In the case of STEM,
+							this includes:
+								"postsetup" 		modified for internal.data
+								"postgenerate" 	modified to include internal.data
+								"postprocess" 	modified to run the ant scripts for internal.data and ge.view
+
+The "resources" folder contains files that are useful for the entire project.
+
+	codecleanupconfiguration.xml contains the specification of "source code cleanup"
+	
+
+Creating a Build
+----------------
+To start a build, run the "build.bat" file in either the "3.3/config" or "3.4/config" file.  This only
+works on the windows platform.  In the future a "build.sh" file will likely be provided for builds on
+unix/linux.  When creating a build for distribution the build.bat file needs to be edited to update two
+variables that specify the version and qualifier.  The two lines in question are:
+
+	set MAJOR_VERSION=0.2.2
+
+	set QUALIFIER=I20080118-1200
+	
+The QUALIFIER variable specifies the date and time of the build, in the example above, January 18, 2008, at 1200.  
+Likely the MAJOR_VERSION number would not change as frequently as the QUALIFIER.
+
+Adding a new version of Eclipse
+-------------------------------
+
+When you install a new version of Eclipse, you need to also install the "eclipse RCP delta pack" for 
+all platforms.  You'll find this distributed on the download page for the version of Eclipse.  For instance,
+for Eclipse 3.4M4, the download page is at:
+
+http://download.eclipse.org/eclipse/downloads/drops/S-3.4M4-200712131700/index.php
+
+and the delta pack is named: eclipse-RCP-3.4M4-delta-pack.zip and is found listed under the "RCP SDK" 
+section of the page.
+
+The delta pack zip file contains a single top-level folder called "eclipse".  This folder is a "match"
+for the top-level folder of the Eclipse installation.  To incorporate the contents of the delta pack,
+the file is unzipped "over" the install folder.  Make sure that the you're not running Eclipse from
+the installation you are overwriting.
+ 
+
+ 
+
diff --git a/org.eclipse.stem.releng/build.sh b/org.eclipse.stem.releng/build.sh
new file mode 100644
index 0000000..e822e72
--- /dev/null
+++ b/org.eclipse.stem.releng/build.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# root of build tree
+BUILD_ROOT=$(cd $(dirname $0); pwd)
+
+BUILD=`date -u +%Y%m%d`
+sed -i -e s/QUALIFIER=.*/QUALIFIER=$BUILD/ local.sh
+
+source $BUILD_ROOT/local.sh
+
+QUALIFIER=$BUILD_TYPE$QUALIFIER
+echo Qualifier = $QUALIFIER
+
+BUILD_HOME=$BUILD_ROOT/build
+
+JAVA_VM_ARGS="-Xms1024M -Xmx1024M"
+
+rm -r -f $BUILD_HOME
+mkdir -p $BUILD_HOME/maps
+cp $BUILD_ROOT/maps/stem.map $BUILD_HOME/maps/
+
+
+# Feature build
+#$JAVA_HOME/bin/java \
+# -Xmx256m \
+# -jar $ECLIPSE_HOME/plugins/org.eclipse.equinox.launcher_*.jar \
+# -application org.eclipse.ant.core.antRunner \
+# -buildfile $ECLIPSE_HOME/plugins/org.eclipse.pde.build_*/scripts/build.xml \
+# -Dbase=$BUILD_ROOT \
+# -DbaseLocation=$ECLIPSE_HOME \
+# -Dbuilder=$BUILD_ROOT/config \
+# -DforceContextQualifier=$QUALIFIER \
+# -DmajorVersion=$MAJOR_VERSION \
+# $*
+ 
+# Product build
+$JAVA_HOME/bin/java \
+ $JAVA_VM_ARGS \
+ -jar $ECLIPSE_HOME/plugins/org.eclipse.equinox.launcher_*.jar \
+ -application org.eclipse.ant.core.antRunner \
+ -buildfile $ECLIPSE_HOME/plugins/org.eclipse.pde.build_*/scripts/productBuild/productBuild.xml \
+ -DtoPublish=$TO_PUBLISH \
+ -Dusername=$ECLIPSE_DEVELOPER_USERNAME \
+ -Dpassword=$ECLIPSE_DEVELOPER_PASSWORD \
+ -DcheckoutDir=$BUILD_ROOT/checkout_dir \
+ -Dbase=$BUILD_ROOT \
+ -DbaseLocation=$ECLIPSE_HOME \
+ -Dbuilder=$BUILD_ROOT/config \
+ -DforceContextQualifier=$QUALIFIER \
+ -DmajorVersion=$MAJOR_VERSION \
+ $*
+
+
diff --git a/org.eclipse.stem.releng/config/allElements.xml b/org.eclipse.stem.releng/config/allElements.xml
new file mode 100644
index 0000000..75f8048
--- /dev/null
+++ b/org.eclipse.stem.releng/config/allElements.xml
@@ -0,0 +1,49 @@
+<project name="allElements Delegator">
+	<property name="defaultAssemblyEnabled" value="true" />
+	
+ 	<!-- ===================================================================== 	-->
+ 	<!-- Run a given ${target} on all elements being built						-->
+	<!-- Replace element.id with the id of the top level element being built.    -->
+	<!-- If element.id does not exist in ${buildDirectory}/features/element.id   -->
+	<!-- or ${baseLocation}/features/element.id, then you must provide the       -->
+	<!-- location by setting the property "pluginPath"                           -->
+	<!-- Add on <ant> task for each top level element being built.             -->
+ 	<!-- ===================================================================== 	-->
+ 	<target name="allElementsDelegator">
+ 		<ant antfile="${genericTargets}" target="${target}">
+	 		<property name="type" value="${topLevelElementType}" />
+	 		<property name="id" value="${topLevelElementId}" />
+ 		</ant>
+ 	</target>
+ 
+	<!-- ====================================================================== -->
+	<!--  The default assemble target, this will be called to assemble each		-->	 
+	<!--  config if a custom assemble target is not defined.					-->
+	<!-- The following properties will be defined:								-->
+	<!-- 		config : The configuration being assembled eg "win32.win32.x86"	-->
+	<!-- 		element: The element being assembled eg "org.eclipse.sdk"		-->
+	<!-- 		assembleScriptName: The assemble script to be called			-->
+	<!-- ====================================================================== -->
+	<target name="defaultAssemble">
+		<ant antfile="${assembleScriptName}" dir="${buildDirectory}" />
+	</target>	
+	
+ 	<!-- =====================================================================	-->
+ 	<!-- Custom targets to assemble the built elements for particular 			-->
+ 	<!-- configurations.  These generally call the generated assemble scripts 	-->
+ 	<!-- (named in  ${assembleScriptName}) but may also add pre and post		--> 
+ 	<!-- processing      														-->
+ 	<!-- Add one target for each root element and each configuration for which	--> 
+ 	<!-- custom processing is desired. Replace element.id with the id of the 	-->
+ 	<!-- top level element being built.  A property with a matching name must 	-->
+ 	<!-- be defined for this custom target to be called instead of the 			-->
+ 	<!-- defaultAssemble target above.											-->
+	<!--	Example:  name="assemble.org.eclipse.sdk"							-->
+	<!--	Example:  name="assemble.org.eclipse.sdk.win32.win32.x86"			-->
+ 	<!-- ====================================================================== -->
+	<property name="assemble.org.eclipse.stem.feature.win32.win32.x86" value="true" />
+ 	<target name="assemble.org.eclipse.stem.feature.win32.win32.x86">
+ 		<ant antfile="${assembleScriptName}" dir="${buildDirectory}"/>
+ 	</target>
+	
+</project>
diff --git a/org.eclipse.stem.releng/config/build.properties b/org.eclipse.stem.releng/config/build.properties
new file mode 100644
index 0000000..824109b
--- /dev/null
+++ b/org.eclipse.stem.releng/config/build.properties
@@ -0,0 +1,232 @@
+###############################################################################
+# Copyright (c) 2003, 2006 IBM Corporation 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:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+#####################
+# Parameters describing how and where to execute the build.
+# Typical users need only update the following properties:
+#    baseLocation - where things you are building against are installed
+#    bootclasspath - The base jars to compile against (typicaly rt.jar)
+#    configs - the list of {os, ws, arch} configurations to build.  
+#
+# Of course any of the settings here can be overridden by spec'ing 
+# them on the command line (e.g., -DbaseLocation=d:/eclipse
+
+#The type of the top level element we are building,  generally "feature"
+topLevelElementType = product
+#The id of the top level element we are building
+topLevelElementId = org.eclipse.stem.ui.product
+
+############# PRODUCT/PACKAGING CONTROL #############
+product=org.eclipse.stem.ui/stem.product
+runPackager=true
+
+#Set the name of the archive that will result from the product build.
+#archiveNamePrefix=
+
+# The prefix that will be used in the generated archive.
+archivePrefix=stem
+
+# The location underwhich all of the build output will be collected.
+collectingFolder=${archivePrefix}
+
+# The list of {os, ws, arch} configurations to build.  This 
+# value is a '&' separated list of ',' separate triples.  For example, 
+#     configs=win32,win32,x86 & linux,motif,x86
+# By default the value is *,*,*
+#configs = *, *, *
+configs=win32, win32, x86 & macosx, carbon, ppc & linux, gtk, x86 & macosx, cocoa, x86 & linux, gtk, x86_64 & linux, gtk, ppc
+#	win32, win32, x86 & \
+#	linux, gtk, ppc &\
+# linux, gtk, x86 & \
+#	linux, gtk, x86_64 & \
+#	linux, motif, x86 & \
+#	solaris, motif, sparc & \
+#	solaris, gtk, sparc & \
+#	aix, motif, ppc & \
+#	hpux, motif, PA_RISC & \
+#	macosx, cocoa, x86 & \
+#	macosx, carbon, ppc
+
+# By default PDE creates one archive (result) per entry listed in the configs property.
+# Setting this value to true will cause PDE to only create one output containing all 
+# artifacts for all the platforms listed in the configs property.
+# To control the output format for the group, add a "group, group, group - <format>" entry to the
+# archivesFormat. 
+#groupConfigurations=true
+
+#The format of the archive. By default a zip is created using antZip.
+#The list can only contain the configuration for which the desired format is different than zip.
+#archivesFormat=win32, win32, x86 - antZip& \
+#	linux, gtk, ppc - antZip &\
+#    linux, gtk, x86 - antZip& \
+#	linux, gtk, x86_64 - antZip& \
+# linux, motif, x86 - antZip& \
+#	solaris, motif, sparc - antZip& \
+#	solaris, gtk, sparc - antZip& \
+#	aix, motif, ppc - antZip& \
+#	hpux, motif, PA_RISC - antZip& \
+#	macosx, carbon, ppc - antZip
+	
+#Set to true if you want the output to be ready for an update jar (no site.xml generated)
+#outputUpdateJars = false
+
+#Set to true for Jnlp generation
+#codebase should be a URL that will be used as the root of all relative URLs in the output.
+#generateJnlp=false
+#jnlp.codebase=<codebase url>
+#jnlp.j2se=<j2se version>
+#jnlp.locale=<a locale>
+#jnlp.generateOfflineAllowed=true or false generate <offlineAllowed/> attribute in the generated features
+#jnlp.configs=${configs}			#uncomment to filter the content of the generated jnlp files based on the configuration being built
+
+#Set to true if you want to sign jars
+#signJars=false
+#sign.alias=<alias>
+#sign.keystore=<keystore location>
+#sign.storepass=<keystore password>
+
+#Arguments to send to the zip executable
+zipargs=
+
+#Arguments to send to the tar executable
+tarargs=
+
+#Control the creation of a file containing the version included in each configuration - on by default 
+#generateVersionsLists=false
+
+############## BUILD NAMING CONTROL ################
+# The directory into which the build elements are fetched and where
+# the build takes place.
+buildDirectory=${base}/build
+
+# Type of build.  Used in naming the build output.  Typically this value is
+# one of I, N, M, S, ...
+buildType=I
+
+# ID of the build.  Used in naming the build output.
+buildId=WeeklyBuild
+
+# Label for the build.  Used in naming the build output
+buildLabel=${buildType}.${buildId}
+
+# Timestamp for the build.  Used in naming the build output
+timestamp=${QUALIFIER}
+
+#The value to be used for the qualifier of a plugin or feature when you want to override the value computed by pde.
+#The value will only be applied to plugin or features indicating build.properties, qualifier = context 
+#forceContextQualifier=<the value for the qualifier>
+
+#Enable / disable the generation of a suffix for the features that use .qualifier. 
+#The generated suffix is computed according to the content of the feature   
+#generateFeatureVersionSuffix=true
+
+############# BASE CONTROL #############
+# Settings for the base Eclipse components and Java class libraries 
+# against which you are building.
+# Base location for anything the build needs to compile against.  For example,
+# in most RCP app or a plug-in,  the baseLocation should be the location of a previously
+# installed Eclipse against which the application or plug-in code will be compiled and the RCP delta pack.
+
+#base=<path/to/parent/of/eclipse>
+#baseLocation=${base}/eclipse
+#Os/Ws/Arch/nl of the eclipse specified by baseLocation
+baseos=win32
+basews=win32
+basearch=x86
+
+#this property indicates whether you want the set of plug-ins and features to be considered during the build to be limited to the ones reachable from the features / plugins being built
+filteredDependencyCheck=false
+
+#this property indicates whether the resolution should be done in development mode (i.e. ignore multiple bundles with singletons)
+resolution.devMode=false
+
+#pluginPath is a list of locations in which to find plugins and features.  This list is separated by the platform file separator (; or :)
+#a location is one of:  
+#- the location of the jar or folder that is the plugin or feature : /path/to/foo.jar or /path/to/foo
+#- a directory that contains a /plugins or /features subdirectory
+#- the location of a feature.xml, or for 2.1 style plugins, the plugin.xml or fragment.xml
+#pluginPath=
+
+skipBase=true
+eclipseURL=<url for eclipse download site>
+eclipseBuildId=<Id of Eclipse build to get>
+eclipseBaseURL=${eclipseURL}/eclipse-platform-${eclipseBuildId}-win32.zip
+
+
+############# MAP FILE CONTROL ################
+# This section defines CVS tags to use when fetching the map files from the repository.
+# If you want to fetch the map file from repository / location, change the getMapFiles target in the customTargets.xml
+
+skipMaps=true
+mapsRepo=:pserver:anonymous@example.com/path/to/repo
+mapsRoot=path/to/maps
+mapsCheckoutTag=HEAD
+
+#tagMaps=true
+mapsTagTag=v${buildId}
+
+
+############ REPOSITORY CONTROL ###############
+# This section defines properties parameterizing the repositories where plugins, fragments
+# bundles and features are being obtained from. 
+
+# The tags to use when fetching elements to build.
+# By default thebuilder will use whatever is in the maps.  
+# This value takes the form of a comma separated list of repository identifier (like used in the map files) and the 
+# overriding value
+# For example fetchTag=CVS=HEAD, SVN=v20050101
+fetchTag=SVN=trunk
+#skipFetch=true
+
+
+############# JAVA COMPILER OPTIONS ##############
+# The location of the Java jars to compile against.  Typically the rt.jar for your JDK/JRE
+#bootclasspath=${java.home}/lib/rt.jar
+
+# specific JRE locations to compile against. These values are used to compile bundles specifying a 
+# Bundle-RequiredExecutionEnvironment. Uncomment and set values for environments that you support
+#CDC-1.0/Foundation-1.0= /path/to/rt.jar
+#CDC-1.1/Foundation-1.1=
+#OSGi/Minimum-1.0=
+#OSGi/Minimum-1.1=
+#JRE-1.1=
+#J2SE-1.2=
+#J2SE-1.3=
+#J2SE-1.4=
+#J2SE-1.5=
+#JavaSE-1.6=
+#PersonalJava-1.1=
+#PersonalJava-1.2=
+#CDC-1.0/PersonalBasis-1.0=
+#CDC-1.0/PersonalJava-1.0=
+#CDC-1.1/PersonalBasis-1.1=
+#CDC-1.1/PersonalJava-1.1=
+
+# Specify the output format of the compiler log when eclipse jdt is used
+logExtension=.log
+
+# Whether or not to include debug info in the output jars
+javacDebugInfo=false 
+
+# Whether or not to fail the build if there are compiler errors
+javacFailOnError=true
+
+# Enable or disable verbose mode of the compiler
+javacVerbose=true
+
+# Extra arguments for the compiler. These are specific to the java compiler being used.
+#compilerArg=
+
+# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacSource in build.properties
+javacSource=1.5
+
+# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
+javacTarget=1.5
+
diff --git a/org.eclipse.stem.releng/config/customTargets.xml b/org.eclipse.stem.releng/config/customTargets.xml
new file mode 100644
index 0000000..67a8856
--- /dev/null
+++ b/org.eclipse.stem.releng/config/customTargets.xml
@@ -0,0 +1,330 @@
+<project name="Build specific targets and properties" default="noDefault">
+
+	<!-- ===================================================================== -->
+	<!-- Run a given ${target} on all elements being built -->
+	<!-- Add on <ant> task for each top level element being built. -->
+	<!-- ===================================================================== -->	
+	<property name="allElementsFile" value="${builder}/allElements.xml" />
+	<import file="${allElementsFile}" />
+	<target name="allElements">
+		<antcall target="allElementsDelegator" />		
+	</target>
+	
+	<!-- ===================================================================== -->
+	<!-- ===================================================================== -->
+	<target name="getBaseComponents" depends="checkLocalBase" unless="skipBase">
+		<get src="${eclipseBaseURL}" dest="${base}/temp-base.zip" />
+		<unzip dest="${base}" overwrite="true" src="${base}/temp-base.zip" />
+	</target>
+
+	<target name="checkLocalBase">
+		<available file="${base}" property="skipBase" />
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Check out map files from correct repository -->
+	<!-- Replace values for mapsCheckoutTag as desired. -->
+	<!-- ===================================================================== -->
+	<target name="getMapFiles" depends="checkLocalMaps" unless="skipMaps">		
+		<property name="mapsCheckoutTag" value="HEAD" />
+		<cvs cvsRoot="${mapsRepo}" package="${mapsRoot}" dest="${buildDirectory}/maps" tag="${mapsCheckoutTag}" />
+	</target>
+
+	<target name="checkLocalMaps">
+		<available property="skipMaps" file="${buildDirectory}/maps" />
+	</target>
+
+	<target name="tagMapFiles" if="tagMaps">
+		<cvs dest="${buildDirectory}/maps/${mapsRoot}" command="tag ${mapsTagTag}" />
+	</target>
+
+	<!-- ===================================================================== -->
+
+	<target name="clean" unless="noclean">
+		<antcall target="allElements">
+			<param name="target" value="cleanElement" />
+		</antcall>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before setup -->
+	<!-- ===================================================================== -->
+	<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar" /> 
+	<target name="preSetup">
+		<svn>
+			<checkout url="svn://dev.eclipse.org/svnroot/technology/org.eclipse.stem/trunk" destPath="${base}/checkout_dir" />
+		</svn>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after setup but before starting the build proper -->
+	<!-- ===================================================================== -->
+	<target name="postSetup">
+		<antcall target="getBaseComponents" />
+		<!-- Fetch the UI plugin first because that's where the stem.product file is -->
+		<ant antfile="${genericTargets}" target="fetchElement">
+			<property name="type" value="plugin"/>
+			<property name="id" value="org.eclipse.stem.ui"/>
+		</ant>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="preFetch">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after fetching the build elements -->
+	<!-- ===================================================================== -->
+	<target name="postFetch">
+		<!-- This call was added to get the internal data plugin out of the    -->
+		<!-- repository to be used later to build the stem.geography plugin    -->    
+		<!--ant antfile="${genericTargets}" target="fetchElement">
+			<property name="type" value="plugin"/>
+			<property name="id" value="org.eclipse.stem.internal.data"/>
+		</ant>
+		<ant antfile="${genericTargets}" target="fetchElement">
+			<property name="type" value="plugin"/>
+			<property name="id" value="org.eclipse.stem.transport"/>
+		</ant-->
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before generating the build scripts. -->
+	<!-- ===================================================================== -->
+	<target name="preGenerate">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after generating the build scripts. -->
+	<!-- ===================================================================== -->
+	<target name="postGenerate">
+		<!--ant antfile="${genericTargets}" target="generateScript">
+			<property name="type" value="plugin"/>
+			<property name="id" value="org.eclipse.stem.transport"/>
+		</ant>
+		<ant antfile="${genericTargets}" target="generateScript">
+			<property name="type" value="plugin"/>
+			<property name="id" value="org.eclipse.stem.internal.data"/>
+		</ant-->
+		<!--antcall target="clean" /-->
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="preProcess">
+		<ant dir="${buildDirectory}/plugins/org.eclipse.stem.data.geography.infrastructure.transportation" antfile="build.xml" target="@dot"/>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after running the build.xmls for the elements being built. -->
+	<!-- ===================================================================== -->
+	<target name="postProcess">
+		<!-- Run the update.xml script from the internal.data plugin to generate all internal data  -->
+		<ant antfile="${buildDirectory}/plugins/org.eclipse.stem.internal.data/update.xml"/>
+		<!-- We are building the data.geography plugin again so that the files   -->
+		<!-- that were generated in the previous ant call (xxx_names.properties) -->
+		<!-- will be copied to the binary folder to be included in the final jar.-->
+		<ant dir="${buildDirectory}/plugins/org.eclipse.stem.data.geography"
+			 antfile="build.xml" target="@dot"/>
+		
+		<!-- We are building the plugin again so that the files that were -->
+		<!-- generated in the previous ant call will be included in the final jar.-->
+		<!--ant dir="${buildDirectory}/plugins/org.eclipse.stem.data.geography.infrastructure.transportation"
+			 antfile="build.xml" target="@dot"/-->
+		
+		<!--ant dir="${buildDirectory}/plugins/org.eclipse.stem.transport"
+			 antfile="build.xml" target="@dot"/-->
+			 
+		<!-- The internal data plugin isn't compiled even though we generate its -->
+		<!-- build.xml file above in postGenerate -->
+		<!--ant dir="${buildDirectory}/plugins/org.eclipse.stem.internal.data"
+			 antfile="build.xml" target="@dot"/-->
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running assemble. -->
+	<!-- ===================================================================== -->
+	<target name="preAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after  running assemble. -->
+	<!-- ===================================================================== -->
+	<target name="postAssemble">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do before running package. -->
+	<!-- ===================================================================== -->
+	<target name="prePackage">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after  running package. -->
+	<!-- ===================================================================== -->
+	<target name="postPackage">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do after the build is done. -->
+	<!-- ===================================================================== -->
+	<property name="packagesDir" value="${buildDirectory}/${buildLabel}" />
+	<property name="packagePostfix" value="${majorVersion}.${forceContextQualifier}" />
+	<target name="postBuild">
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="linux.gtk.x86"/>
+		</antcall>
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="linux.gtk.x86_64"/>
+		</antcall>
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="win32.win32.x86"/>
+		</antcall>
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="macosx.carbon.ppc"/>
+		</antcall>
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="macosx.cocoa.x86"/>
+		</antcall>
+		<antcall target="updateZipFile">
+			<param name="os_conf" value="linux.gtk.ppc"/>
+		</antcall>
+
+		<!--move file="${packagesDir}/${buildId}-linux.gtk.x86.zip" tofile="${packagesDir}/STEM-linux.gtk.x86-${packagePostfix}.zip"/>
+		<move file="${packagesDir}/${buildId}-linux.gtk.x86_64.zip" tofile="${packagesDir}/STEM-linux.gtk.x86_64-${packagePostfix}.zip"/>
+		<move file="${packagesDir}/${buildId}-win32.win32.x86.zip" tofile="${packagesDir}/STEM-win32-${packagePostfix}.zip"/>
+		<move file="${packagesDir}/${buildId}-macosx.carbon.ppc.zip" tofile="${packagesDir}/STEM-macosx.carbon.ppc-${packagePostfix}.zip"/>
+		<move file="${packagesDir}/${buildId}-macosx.cocoa.x86.zip" tofile="${packagesDir}/STEM-macosx.cocoa.x86-${packagePostfix}.zip"/>
+		<move file="${packagesDir}/${buildId}-linux.gtk.ppc.zip" tofile="${packagesDir}/STEM-linux.gtk.ppc-${packagePostfix}.zip"/-->
+		
+		<!-- Add the default workspace to all zip files -->
+		<!--unzip src="${packagesDir}/STEM-linux.gtk.x86-${packagePostfix}.zip" dest="${packagesDir}/../../resources/configuration">
+			<patternset>
+				<include name="stem/configuration/config.ini"/>
+			</patternset>
+			<mapper type="flatten"/>
+		</unzip>
+		<propertyfile file="${packagesDir}/../../resources/configuration/config.ini">
+			<entry key="stem.buildId" value="${packagePostfix}"/>
+		</propertyfile>
+		<zip destfile="${packagesDir}/STEM-linux.gtk.x86-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+			<zipfileset dir="${packagesDir}/../../resources/configuration" prefix="stem/configuration"/>
+		</zip>
+		<zip destfile="${packagesDir}/STEM-linux.gtk.x86_64-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+		</zip>
+		<zip destfile="${packagesDir}/STEM-win32-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+		</zip>
+		<zip destfile="${packagesDir}/STEM-macosx.carbon.ppc-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+		</zip>
+		<zip destfile="${packagesDir}/STEM-macosx.cocoa.x86-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+		</zip>
+		<zip destfile="${packagesDir}/STEM-linux.gtk.ppc-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+		</zip-->
+		
+		<!-- Check if there is a request to publish the binaries -->
+		<!--istrue value="${toPublish}">
+			<antcall target="publish" />
+			<antcall target="updateWebSiteWithWeeklyBuild" />
+		</istrue-->
+	</target>
+	
+	<target name="updateZipFile">
+		<move file="${packagesDir}/${buildId}-${os_conf}.zip" tofile="${packagesDir}/STEM-${os_conf}-${packagePostfix}.zip"/>
+		<unzip src="${packagesDir}/STEM-${os_conf}-${packagePostfix}.zip" dest="${packagesDir}/../../resources/configuration">
+			<patternset>
+				<include name="stem/configuration/config.ini"/>
+			</patternset>
+			<mapper type="flatten"/>
+		</unzip>
+		<propertyfile file="${packagesDir}/../../resources/configuration/config.ini">
+			<entry key="stem.buildId" value="${packagePostfix}"/>
+		</propertyfile>
+		<zip destfile="${packagesDir}/STEM-${os_conf}-${packagePostfix}.zip" update="true">
+			<zipfileset dir="${packagesDir}/../../resources/workspace" prefix="stem/workspace"/>
+			<zipfileset dir="${packagesDir}/../../resources/configuration" prefix="stem/configuration"/>
+		</zip>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do to test the build results -->
+	<!-- ===================================================================== -->
+	<target name="test">
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Steps to do to publish the build results -->
+	<!-- ===================================================================== -->
+	<property name="publishDir" value="/home/data/httpd/download.eclipse.org/stem" />
+	<target name="publish">
+		<!-- If running outside of build.eclipse.org or download1.eclipse.org servers then use this one to SCP the files -->
+		<!--scp todir="${username}:${password}@download1.eclipse.org:~/downloads/stem">
+			<fileset dir="${packagesDir}">
+				<include name="STEM-*-${packagePostfix}.zip"/>
+			</fileset>
+		</scp-->
+		<!-- If running on build.eclipse.org or download1.eclipse.org servers, then use this one to copy the files -->
+		<copy todir="${publishDir}">
+			<fileset dir="${packagesDir}">
+				<include name="STEM-*-${packagePostfix}.zip"/>
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="updateWebSiteWithWeeklyBuild">
+		<!-- Load the properties file which holds the last weekly/stable build postfixes -->
+		<loadproperties>
+			<file file="${base}/my.properties"/>
+		</loadproperties>
+		
+		<!-- Checkout/updated the STEM website files from CVS -->
+		<cvs cvsRoot="${username}@dev.eclipse.org:/cvsroot/org.eclipse"
+			package="www/stem"
+			dest="${buildDirectory}"
+		/>
+		
+		<!-- Update the downloads.php file -->
+		<replaceregexp byline="true">
+			<regexp pattern="${lastWeeklyBuild}"/>
+			<substitution expression="${packagePostfix}"/>
+			<fileset dir="${base}/www/stem">
+				<include name="downloads.php"/>
+			</fileset>
+		</replaceregexp>
+		
+		<!-- Commit the updated downloads.php file into CVS -->
+		<cvs cvsRoot="${username}@dev.eclipse.org:/cvsroot/org.eclipse"
+			package="www/stem"
+			dest="${buildDirectory}/.." 
+			command="commit -m 'Updated to Weekly Integration Build ${packagePostfix}'"/>
+
+		<!-- Save the updated postfix of the weekly build into the properties file -->
+		<propertyfile file="${base}/my.properties">
+			<entry  key="lastWeeklyBuild" value="${packagePostfix}"/>
+			<entry  key="lastStableBuild" value="${lastStableBuild}"/>
+		</propertyfile>
+		
+		<!-- Delete the previous weekly build files from the publish directory -->
+		<delete>
+			<fileset dir="${publishDir}">
+				<include name="STEM-*-${lastWeeklyBuild}.zip"/>
+			</fileset>
+		</delete>
+	</target>
+
+	<!-- ===================================================================== -->
+	<!-- Default target                                                        -->
+	<!-- ===================================================================== -->
+	<target name="noDefault">
+		<echo message="You must specify a target when invoking this file" />
+	</target>
+
+</project>
diff --git a/org.eclipse.stem.releng/local.sh-template b/org.eclipse.stem.releng/local.sh-template
new file mode 100644
index 0000000..f17dfba
--- /dev/null
+++ b/org.eclipse.stem.releng/local.sh-template
@@ -0,0 +1,22 @@
+# STEM's major version
+MAJOR_VERSION=1.0.0
+
+# root of the JDK (Java 5.0 or higher)
+#JAVA_HOME=${BUILD_ROOT}/jdk1.5.0_16
+JAVA_HOME=/path/to/jdk
+
+# Eclipse SDK used for building
+ECLIPSE_HOME=/path/to/eclipse
+
+#Publishing information used for placing the binaries on the Eclipse downloads
+#server and updating the STEM downloads website
+TO_PUBLISH=false
+ECLIPSE_DEVELOPER_USERNAME=username
+ECLIPSE_DEVELOPER_PASSWORD=password
+
+#Build type (I or M) letter will prefix the qualifier
+BUILD_TYPE=I
+
+#Do not edit the following, it's assigned automatically by the script
+#qualifier format: YYYYMMDD
+QUALIFIER=I20090806
diff --git a/org.eclipse.stem.releng/maps/stem.map b/org.eclipse.stem.releng/maps/stem.map
new file mode 100644
index 0000000..181cbbb
--- /dev/null
+++ b/org.eclipse.stem.releng/maps/stem.map
@@ -0,0 +1,58 @@
+!********** FEATURES *********

+feature@org.eclipse.stem.feature=COPY,${checkoutDir},org.eclipse.stem.feature

+feature@org.eclipse.stem.feature.core=COPY,${checkoutDir},org.eclipse.stem.feature.core

+feature@org.eclipse.stem.feature.prereq=COPY,${checkoutDir},org.eclipse.stem.feature.prereq

+

+!********** PLUGINS **********

+plugin@org.eclipse.stem.analysis=COPY,${checkoutDir},org.eclipse.stem.analysis

+plugin@org.eclipse.stem.analysis.automaticexperiment=COPY,${checkoutDir},org.eclipse.stem.analysis.automaticexperiment

+plugin@org.eclipse.stem.core=COPY,${checkoutDir},org.eclipse.stem.core

+plugin@org.eclipse.stem.data.diseasemodels.models=COPY,${checkoutDir},org.eclipse.stem.data.diseasemodels.models

+plugin@org.eclipse.stem.data.diseasemodels.scenarios=COPY,${checkoutDir},org.eclipse.stem.data.diseasemodels.scenarios

+plugin@org.eclipse.stem.data.geography=COPY,${checkoutDir},org.eclipse.stem.data.geography

+plugin@org.eclipse.stem.data.geography.infrastructure.transportation=COPY,${checkoutDir},org.eclipse.stem.data.geography.infrastructure.transportation

+plugin@org.eclipse.stem.data.geography.models=COPY,${checkoutDir},org.eclipse.stem.data.geography.models

+plugin@org.eclipse.stem.data.geography.population.human=COPY,${checkoutDir},org.eclipse.stem.data.geography.population.human

+plugin@org.eclipse.stem.data.geography.population.human.models=COPY,${checkoutDir},org.eclipse.stem.data.geography.population.human.models

+plugin@org.eclipse.stem.data.population.human=COPY,${checkoutDir},org.eclipse.stem.data.population.human

+plugin@org.eclipse.stem.definitions=COPY,${checkoutDir},org.eclipse.stem.definitions

+plugin@org.eclipse.stem.diseasemodels=COPY,${checkoutDir},org.eclipse.stem.diseasemodels

+plugin@org.eclipse.stem.diseasemodels.example=COPY,${checkoutDir},org.eclipse.stem.diseasemodels.example

+plugin@org.eclipse.stem.diseasemodels.experimental=COPY,${checkoutDir},org.eclipse.stem.diseasemodels.experimental

+plugin@org.eclipse.stem.diseasemodels.externaldatasource=COPY,${checkoutDir},org.eclipse.stem.diseasemodels.externaldatasource

+plugin@org.eclipse.stem.diseasemodels.forcing=COPY,${checkoutDir},org.eclipse.stem.diseasemodels.forcing

+plugin@org.eclipse.stem.diseases=COPY,${checkoutDir},org.eclipse.stem.diseases

+plugin@org.eclipse.stem.doc=COPY,${checkoutDir},org.eclipse.stem.doc

+plugin@org.eclipse.stem.geography=COPY,${checkoutDir},org.eclipse.stem.geography

+plugin@org.eclipse.stem.internal.data=COPY,${checkoutDir},org.eclipse.stem.internal.data

+plugin@org.eclipse.stem.internal.data.geography=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography

+plugin@org.eclipse.stem.internal.data.geography.infrastructure.transportation=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography.infrastructure.transportation

+plugin@org.eclipse.stem.internal.data.geography.models=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography.models

+plugin@org.eclipse.stem.internal.data.geography.population=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography.population

+plugin@org.eclipse.stem.internal.data.geography.population.human=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography.population.human

+plugin@org.eclipse.stem.internal.data.geography.population.human.models=COPY,${checkoutDir},org.eclipse.stem.internal.data.geography.population.human.models

+plugin@org.eclipse.stem.internal.data.population.human=COPY,${checkoutDir},org.eclipse.stem.internal.data.population.human

+plugin@org.eclipse.stem.internal.diseasemodels.models=COPY,${checkoutDir},org.eclipse.stem.internal.diseasemodels.models

+plugin@org.eclipse.stem.internal.diseasemodels.scenarios=COPY,${checkoutDir},org.eclipse.stem.internal.diseasemodels.scenarios

+plugin@org.eclipse.stem.jobs=COPY,${checkoutDir},org.eclipse.stem.jobs

+fragment@org.eclipse.stem.jobs.nl1=COPY,${checkoutDir},org.eclipse.stem.jobs.nl1

+plugin@org.eclipse.stem.populationmodels=COPY,${checkoutDir},org.eclipse.stem.populationmodels

+plugin@org.eclipse.stem.sample=COPY,${checkoutDir},org.eclipse.stem.sample

+plugin@org.eclipse.stem.sequencers=COPY,${checkoutDir},org.eclipse.stem.sequencers

+plugin@org.eclipse.stem.solvers.fd=COPY,${checkoutDir},org.eclipse.stem.solvers.fd

+plugin@org.eclipse.stem.solvers.rk=COPY,${checkoutDir},org.eclipse.stem.solvers.rk

+plugin@org.eclipse.stem.transport=COPY,${checkoutDir},org.eclipse.stem.transport

+plugin@org.eclipse.stem.ui=COPY,${checkoutDir},org.eclipse.stem.ui

+plugin@org.eclipse.stem.ui.diseasemodels=COPY,${checkoutDir},org.eclipse.stem.ui.diseasemodels

+plugin@org.eclipse.stem.ui.diseasemodels.example=COPY,${checkoutDir},org.eclipse.stem.ui.diseasemodels.example

+plugin@org.eclipse.stem.ui.diseasemodels.externaldatasource=COPY,${checkoutDir},org.eclipse.stem.ui.diseasemodels.externaldatasource

+plugin@org.eclipse.stem.ui.diseasemodels.forcing.editor=COPY,${checkoutDir},org.eclipse.stem.ui.diseasemodels.forcing

+plugin@org.eclipse.stem.ui.ge=COPY,${checkoutDir},org.eclipse.stem.ui.ge

+fragment@org.eclipse.stem.ui.nl1=COPY,${checkoutDir},org.eclipse.stem.ui.nl1

+plugin@org.eclipse.stem.ui.populationmodels=COPY,${checkoutDir},org.eclipse.stem.ui.populationmodels

+plugin@org.eclipse.stem.ui.reports=COPY,${checkoutDir},org.eclipse.stem.ui.reports

+plugin@org.eclipse.stem.ui.solvers.fd=COPY,${checkoutDir},org.eclipse.stem.ui.solvers.fd

+plugin@org.eclipse.stem.ui.solvers.rk=COPY,${checkoutDir},org.eclipse.stem.ui.solvers.rk

+plugin@org.eclipse.stem.util.analysis=COPY,${checkoutDir},org.eclipse.stem.util.analysis

+plugin@org.eclipse.stem.util.loggers=COPY,${checkoutDir},org.eclipse.stem.util.loggers

+plugin@org.eclipse.stem.utility=COPY,${checkoutDir},org.eclipse.stem.utility

diff --git a/org.eclipse.stem.releng/resources/STEMTPTPStaticAnalysisRules.dat b/org.eclipse.stem.releng/resources/STEMTPTPStaticAnalysisRules.dat
new file mode 100644
index 0000000..95c1e94
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/STEMTPTPStaticAnalysisRules.dat
@@ -0,0 +1,179 @@
+codereview.java.analysisProvider
+codereview.java.j2sebestpractices
+codereview.java.category.awt
+codereview.java.rules.awt.RuleAwtPeer
+codereview.java.rules.awt.RuleAwtPeer.variable.SEVERITY,2
+codereview.java.category.casting
+codereview.java.rules.casting.RuleCastingPrimitives
+codereview.java.rules.casting.RuleCastingPrimitives.variable.SEVERITY,1
+codereview.java.rules.casting.RuleCastingObjectDowncast.variable.SEVERITY,0
+codereview.java.category.cloneable
+codereview.java.rules.cloneable.RuleCloneableSuperClone
+codereview.java.rules.cloneable.RuleCloneableSuperClone.variable.SEVERITY,2
+codereview.java.rules.cloneable.RuleCloneableOverrideClone
+codereview.java.rules.cloneable.RuleCloneableOverrideClone.variable.SEVERITY,1
+codereview.java.rules.cloneable.RuleCloneableImplementCloneable
+codereview.java.rules.cloneable.RuleCloneableImplementCloneable.variable.SEVERITY,1
+codereview.java.category.comparison
+codereview.java.rules.comparison.RuleComparisonEqualsHashCode
+codereview.java.rules.comparison.RuleComparisonEqualsHashCode.variable.SEVERITY,2
+codereview.java.rules.comparison.RuleComparisonPlaceConstants.variable.SEVERITY,0
+codereview.java.rules.comparison.RuleComparisonInstanceOfEquals.variable.SEVERITY,1
+codereview.java.rules.comparison.RuleComparisonReferenceEquality.variable.SEVERITY,1
+codereview.java.rules.comparison.RuleComparisonClassNameComparison
+codereview.java.rules.comparison.RuleComparisonClassNameComparison.variable.SEVERITY,2
+codereview.java.category.conditional
+codereview.java.rules.conditional.RuleConditionalTernary
+codereview.java.rules.conditional.RuleConditionalTernary.variable.SEVERITY,0
+codereview.java.rules.conditional.RuleConditionalNegationIfCondition
+codereview.java.rules.conditional.RuleConditionalNegationIfCondition.variable.SEVERITY,0
+codereview.java.category.constructors
+codereview.java.rules.constructors.RuleConstructorsAbstractMethods
+codereview.java.rules.constructors.RuleConstructorsAbstractMethods.variable.SEVERITY,0
+codereview.java.rules.constructors.RuleConstructorsOverridableMethods.variable.SEVERITY,0
+codereview.java.category.declaration
+codereview.java.rules.declaration.RuleDeclarationCArrayStyle
+codereview.java.rules.declaration.RuleDeclarationCArrayStyle.variable.SEVERITY,0
+codereview.java.rules.declaration.RuleDeclarationMultipleDeclaration
+codereview.java.rules.declaration.RuleDeclarationMultipleDeclaration.variable.SEVERITY,0
+codereview.java.rules.declaration.RuleDeclarationMixedDeclaration
+codereview.java.rules.declaration.RuleDeclarationMixedDeclaration.variable.SEVERITY,0
+codereview.java.rules.declaration.RuleDeclarationDeclareConstants.variable.SEVERITY,0
+codereview.java.rules.declaration.RuleDeclarationInterfaceConstants
+codereview.java.rules.declaration.RuleDeclarationInterfaceConstants.variable.SEVERITY,0
+codereview.java.category.exceptions
+codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions
+codereview.java.rules.exceptions.RuleExceptionsSpecificExceptions.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsCatchGeneric.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsExtendError
+codereview.java.rules.exceptions.RuleExceptionsExtendError.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsExtendError.variable.CLASS,java.lang.Error
+codereview.java.rules.exceptions.RuleExceptionsExtendRuntimeException
+codereview.java.rules.exceptions.RuleExceptionsExtendRuntimeException.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsExtendRuntimeException.variable.CLASS,java.lang.RuntimeException
+codereview.java.rules.exceptions.RuleExceptionsExtendThrowable
+codereview.java.rules.exceptions.RuleExceptionsExtendThrowable.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsExtendThrowable.variable.CLASS,java.lang.Throwable
+codereview.java.rules.exceptions.RuleExceptionsThrowError
+codereview.java.rules.exceptions.RuleExceptionsThrowError.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsThrowError.variable.CLASS,java.lang.Error
+codereview.java.rules.exceptions.RuleExceptionsThrowException
+codereview.java.rules.exceptions.RuleExceptionsThrowException.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsThrowException.variable.CLASS,java.lang.Exception
+codereview.java.rules.exceptions.RuleExceptionsThrowThrowable
+codereview.java.rules.exceptions.RuleExceptionsThrowThrowable.variable.SEVERITY,0
+codereview.java.rules.exceptions.RuleExceptionsThrowThrowable.variable.CLASS,java.lang.Throwable
+codereview.java.rules.exceptions.RuleExceptionsInstanceofCatch
+codereview.java.rules.exceptions.RuleExceptionsInstanceofCatch.variable.SEVERITY,1
+codereview.java.category.initialization
+codereview.java.rules.initialization.RuleInitializationInitializeStaticFields.variable.SEVERITY,0
+codereview.java.rules.initialization.RuleInitializationChainingAssignments
+codereview.java.rules.initialization.RuleInitializationChainingAssignments.variable.SEVERITY,0
+codereview.java.rules.initialization.RuleInitializationAssigningMethodParameter.variable.SEVERITY,0
+codereview.java.category.loop
+codereview.java.rules.loop.RuleLoopNoConditionForLoop
+codereview.java.rules.loop.RuleLoopNoConditionForLoop.variable.SEVERITY,0
+codereview.java.rules.loop.RuleLoopNoInitIncrForLoop
+codereview.java.rules.loop.RuleLoopNoInitIncrForLoop.variable.SEVERITY,0
+codereview.java.rules.loop.RuleLoopAssignLoopVariable
+codereview.java.rules.loop.RuleLoopAssignLoopVariable.variable.SEVERITY,1
+codereview.java.rules.loop.RuleLoopContinueStatement.variable.SEVERITY,0
+codereview.java.category.null
+codereview.java.rules.nulls.RuleNullEmptyArray
+codereview.java.rules.nulls.RuleNullEmptyArray.variable.SEVERITY,2
+codereview.java.rules.nulls.RuleNullEnumeration
+codereview.java.rules.nulls.RuleNullEnumeration.variable.SEVERITY,1
+codereview.java.rules.nulls.RuleNullIterator
+codereview.java.rules.nulls.RuleNullIterator.variable.SEVERITY,1
+codereview.java.category.portability
+codereview.java.rules.portability.RulePortabilitySystemGetenv
+codereview.java.rules.portability.RulePortabilitySystemGetenv.variable.SEVERITY,1
+codereview.java.rules.portability.RulePortabilityLineSeparators
+codereview.java.rules.portability.RulePortabilityLineSeparators.variable.SEVERITY,1
+codereview.java.rules.portability.RulePortabilityFileSeparator
+codereview.java.rules.portability.RulePortabilityFileSeparator.variable.SEVERITY,1
+codereview.java.category.reflection
+codereview.java.rules.reflection.RuleReflectionGetDeclaredField
+codereview.java.rules.reflection.RuleReflectionGetDeclaredField.variable.SEVERITY,0
+codereview.java.rules.reflection.RuleReflectionGetDeclaredField.variable.CLASS,java.lang.Class
+codereview.java.rules.reflection.RuleReflectionGetDeclaredField.variable.METHOD,getDeclaredField
+codereview.java.rules.reflection.RuleReflectionGetDeclaredMethod
+codereview.java.rules.reflection.RuleReflectionGetDeclaredMethod.variable.SEVERITY,0
+codereview.java.rules.reflection.RuleReflectionGetDeclaredMethod.variable.CLASS,java.lang.Class
+codereview.java.rules.reflection.RuleReflectionGetDeclaredMethod.variable.METHOD,getDeclaredMethod
+codereview.java.rules.reflection.RuleReflectionGetField
+codereview.java.rules.reflection.RuleReflectionGetField.variable.SEVERITY,0
+codereview.java.rules.reflection.RuleReflectionGetField.variable.CLASS,java.lang.Class
+codereview.java.rules.reflection.RuleReflectionGetField.variable.METHOD,getField
+codereview.java.rules.reflection.RuleReflectionGetMethod
+codereview.java.rules.reflection.RuleReflectionGetMethod.variable.SEVERITY,0
+codereview.java.rules.reflection.RuleReflectionGetMethod.variable.CLASS,java.lang.Class
+codereview.java.rules.reflection.RuleReflectionGetMethod.variable.METHOD,getMethod
+codereview.java.category.serialization
+codereview.java.rules.serialization.RuleSerializationSerialVersionUID
+codereview.java.rules.serialization.RuleSerializationSerialVersionUID.variable.SEVERITY,0
+codereview.java.rules.serialization.RuleSerializationReadWriteObject
+codereview.java.rules.serialization.RuleSerializationReadWriteObject.variable.SEVERITY,2
+codereview.java.rules.serialization.RuleSerializationResolveObject
+codereview.java.rules.serialization.RuleSerializationResolveObject.variable.SEVERITY,2
+codereview.java.rules.serialization.RuleSerializationSerializableField
+codereview.java.rules.serialization.RuleSerializationSerializableField.variable.SEVERITY,2
+codereview.java.rules.serialization.RuleSerializationTransientField
+codereview.java.rules.serialization.RuleSerializationTransientField.variable.SEVERITY,0
+codereview.java.category.statement
+codereview.java.rules.statement.RuleStatementSurroundWithBraces.variable.SEVERITY,0
+codereview.java.rules.statement.RuleStatementEmptyStatement
+codereview.java.rules.statement.RuleStatementEmptyStatement.variable.SEVERITY,0
+codereview.java.category.switch
+codereview.java.rules.switches.RuleSwitchBreak
+codereview.java.rules.switches.RuleSwitchBreak.variable.SEVERITY,1
+codereview.java.rules.switches.RuleSwitchDefaultLabel.variable.SEVERITY,0
+codereview.java.rules.switches.RuleSwitchBranch.variable.SEVERITY,0
+codereview.java.category.threads
+codereview.java.threads.nonsynchronizednotify
+codereview.java.threads.nonsynchronizednotify.variable.SEVERITY,2
+codereview.java.threads.nonsynchronizednotify.variable.CLASS,java.lang.Object
+codereview.java.threads.nonsynchronizednotify.variable.METHOD,notify
+codereview.java.threads.nonsynchronizednotifyall
+codereview.java.threads.nonsynchronizednotifyall.variable.SEVERITY,2
+codereview.java.threads.nonsynchronizednotifyall.variable.CLASS,java.lang.Object
+codereview.java.threads.nonsynchronizednotifyall.variable.METHOD,notifyAll
+codereview.java.threads.nonsynchronizedwait
+codereview.java.threads.nonsynchronizedwait.variable.SEVERITY,2
+codereview.java.threads.nonsynchronizedwait.variable.CLASS,java.lang.Object
+codereview.java.threads.nonsynchronizedwait.variable.METHOD,wait
+codereview.java.threads.destroy
+codereview.java.threads.destroy.variable.SEVERITY,2
+codereview.java.threads.destroy.variable.CLASS,java.lang.Thread
+codereview.java.threads.destroy.variable.METHOD,destroy
+codereview.java.threads.resume
+codereview.java.threads.resume.variable.SEVERITY,2
+codereview.java.threads.resume.variable.CLASS,java.lang.Thread
+codereview.java.threads.resume.variable.METHOD,resume
+codereview.java.threads.stop
+codereview.java.threads.stop.variable.SEVERITY,2
+codereview.java.threads.stop.variable.CLASS,java.lang.Thread
+codereview.java.threads.stop.variable.METHOD,stop
+codereview.java.threads.suspend
+codereview.java.threads.suspend.variable.SEVERITY,2
+codereview.java.threads.suspend.variable.CLASS,java.lang.Thread
+codereview.java.threads.suspend.variable.METHOD,suspend
+codereview.java.threads.yield
+codereview.java.threads.yield.variable.SEVERITY,0
+codereview.java.threads.yield.variable.CLASS,java.lang.Thread
+codereview.java.threads.yield.variable.METHOD,yield
+codereview.java.threads.extendthread
+codereview.java.threads.extendthread.variable.SEVERITY,0
+codereview.java.threads.extendthread.variable.CLASS,java.lang.Thread
+codereview.java.threads.overridesynchronizable
+codereview.java.threads.overridesynchronizable.variable.SEVERITY,2
+codereview.java.threads.synchronizedthis
+codereview.java.threads.synchronizedthis.variable.SEVERITY,0
+codereview.java.threads.notifyall
+codereview.java.threads.notifyall.variable.SEVERITY,0
+codereview.java.threads.waitoutsideloop
+codereview.java.threads.waitoutsideloop.variable.SEVERITY,0
+codereview.java.threads.synchronizedmethod
+codereview.java.threads.synchronizedmethod.variable.SEVERITY,0
+codereview.java.threads.whilesleep
+codereview.java.threads.whilesleep.variable.SEVERITY,0
diff --git a/org.eclipse.stem.releng/resources/codecleanupconfiguration.xml b/org.eclipse.stem.releng/resources/codecleanupconfiguration.xml
new file mode 100644
index 0000000..b4ed683
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/codecleanupconfiguration.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<profiles version="2">
+<profile kind="CleanUpProfile" name="cleanup" version="2">
+<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
+<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
+<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
+<setting id="cleanup.remove_unnecessary_casts" value="true"/>
+<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
+<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
+<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
+<setting id="cleanup.add_generated_serial_version_id" value="false"/>
+<setting id="cleanup.use_this_for_non_static_field_access" value="false"/>
+<setting id="cleanup.make_local_variable_final" value="true"/>
+<setting id="cleanup.add_default_serial_version_id" value="true"/>
+<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
+<setting id="cleanup.remove_unused_private_types" value="true"/>
+<setting id="cleanup.add_serial_version_id" value="false"/>
+<setting id="cleanup.always_use_parentheses_in_expressions" value="true"/>
+<setting id="cleanup.always_use_blocks" value="true"/>
+<setting id="cleanup.sort_members_all" value="false"/>
+<setting id="cleanup.add_missing_annotations" value="true"/>
+<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
+<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
+<setting id="cleanup.remove_unused_private_methods" value="true"/>
+<setting id="cleanup.organize_imports" value="true"/>
+<setting id="cleanup.never_use_parentheses_in_expressions" value="false"/>
+<setting id="cleanup.never_use_blocks" value="false"/>
+<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
+<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
+<setting id="cleanup.remove_unused_imports" value="true"/>
+<setting id="cleanup.convert_to_enhanced_for_loop" value="true"/>
+<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="true"/>
+<setting id="cleanup.make_private_fields_final" value="true"/>
+<setting id="cleanup.format_source_code" value="true"/>
+<setting id="cleanup.add_missing_override_annotations" value="true"/>
+<setting id="cleanup.always_use_this_for_non_static_field_access" value="false"/>
+<setting id="cleanup.remove_unused_private_fields" value="true"/>
+<setting id="cleanup.make_variable_declarations_final" value="true"/>
+<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
+<setting id="cleanup.remove_unused_local_variables" value="true"/>
+<setting id="cleanup.make_parameters_final" value="true"/>
+<setting id="cleanup.use_parentheses_in_expressions" value="false"/>
+<setting id="cleanup.use_blocks" value="true"/>
+<setting id="cleanup.remove_private_constructors" value="true"/>
+<setting id="cleanup.remove_unused_private_members" value="true"/>
+<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
+<setting id="cleanup.add_missing_nls_tags" value="false"/>
+<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
+<setting id="cleanup.sort_members" value="false"/>
+</profile>
+</profiles>
diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
new file mode 100644
index 0000000..25cb955
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
new file mode 100644
index 0000000..6b2aaa7
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree
new file mode 100644
index 0000000..03a4dad
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree
Binary files differ
diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
new file mode 100644
index 0000000..832fb51
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
Binary files differ
diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.diseasemodels/CSVLogger_Preferences.txt b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.diseasemodels/CSVLogger_Preferences.txt
new file mode 100644
index 0000000..c5b4e1f
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.diseasemodels/CSVLogger_Preferences.txt
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<section name="root">

+</section>

diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/PhaseSpace_Preferences.txt b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/PhaseSpace_Preferences.txt
new file mode 100644
index 0000000..4f90a79
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/PhaseSpace_Preferences.txt
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<section name="root">

+	<section name="platform:/plugin/org.eclipse.stem.data.diseasemodels.scenarios/resources/data/country/USA/USA_1_2_disease_Influenza.scenario">

+		<list key="location.ids">

+			<item value="stem://org.eclipse.stem/node/geo/region/US-NY-36081"/>

+		</list>

+	</section>

+</section>

diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/TimeSeries_Preferences.txt b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/TimeSeries_Preferences.txt
new file mode 100644
index 0000000..4f90a79
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.stem.ui.reports/TimeSeries_Preferences.txt
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<section name="root">

+	<section name="platform:/plugin/org.eclipse.stem.data.diseasemodels.scenarios/resources/data/country/USA/USA_1_2_disease_Influenza.scenario">

+		<list key="location.ids">

+			<item value="stem://org.eclipse.stem/node/geo/region/US-NY-36081"/>

+		</list>

+	</section>

+</section>

diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml
new file mode 100644
index 0000000..ad43558
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<section name="Workbench">

+	<section name="WorkbenchPreferenceDialogSettings">

+		<item value="83" key="DIALOG_Y_ORIGIN"/>

+		<item value="489" key="DIALOG_X_ORIGIN"/>

+	</section>

+	<section name="ShowViewDialog">

+		<item value="403" key="DIALOG_WIDTH"/>

+		<item value="org.eclipse.stem.util.loggers" key="ShowViewDialog.STORE_SELECTED_VIEW_ID"/>

+		<item value="154" key="DIALOG_Y_ORIGIN"/>

+		<item value="603" key="DIALOG_X_ORIGIN"/>

+		<item value="470" key="DIALOG_HEIGHT"/>

+		<item value="1|Tahoma|12.0|0|WINDOWS|1|-16|0|0|0|400|0|0|0|1|0|0|0|0|Tahoma" key="DIALOG_FONT_NAME"/>

+		<list key="ShowViewDialog.STORE_EXPANDED_CATEGORIES_ID">

+			<item value="org.eclipse.stem.ui.views"/>

+		</list>

+	</section>

+</section>

diff --git a/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
new file mode 100644
index 0000000..840daa8
--- /dev/null
+++ b/org.eclipse.stem.releng/resources/workspace/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<workbench progressCount="11" version="2.0">

+<workbenchAdvisor/>

+<window height="934" maximized="true" width="1292" x="22" y="39">

+<fastViewData fastViewLocation="1024"/>

+<perspectiveBar>

+<itemSize x="160"/>

+</perspectiveBar>

+<coolbarLayout locked="0">

+<coolItem id="org.eclipse.stem.ui.toolbar.newwizards" itemType="typeToolBarContribution" x="269" y="22"/>

+<coolItem id="org.eclipse.stem.ui.toolbar" itemType="typeToolBarContribution" x="131" y="22"/>

+</coolbarLayout>

+<page focus="true" label="Workspace - Simulation">

+<editors>

+<editorArea activeWorkbook="DefaultEditorWorkbook">

+<info part="DefaultEditorWorkbook">

+<folder appearance="1" expanded="2">

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory"/>

+</folder>

+</info>

+</editorArea>

+</editors>

+<views>

+<view id="org.eclipse.stem.ui.views.sequencers" partName="Sequencers"/>

+<view id="org.eclipse.stem.ui.views.graphs" partName="Graphs"/>

+<view id="org.eclipse.stem.ui.views.predicates" partName="Predicates"/>

+<view id="org.eclipse.stem.util.analysis.views.lyapunov" partName="Lyapunov"/>

+<view id="org.eclipse.stem.ui.views.reports.phaseSpace" partName="Phase Space">

+<viewState/>

+</view>

+<view id="org.eclipse.pde.runtime.LogView" partName="Error Log">

+<viewState activate="true" allSessions="true" column2="448" column3="150" column4="150" error="true" groupBy="0" info="true" limit="50" ok="true" orderType="2" orderValue="-1" show_filter_text="true" useLimit="true" warning="true"/>

+</view>

+<view id="org.eclipse.ui.views.TaskList" partName="Tasks"/>

+<view id="org.eclipse.stem.ui.views.simulationcontrolview" partName="Simulation Control">

+<viewState/>

+</view>

+<view id="org.eclipse.ui.views.ContentOutline" partName="Outline">

+<viewState/>

+</view>

+<view id="org.eclipse.ui.navigator.ProjectExplorer" partName="Project Explorer">

+<viewState CommonNavigator.LINKING_ENABLED="0" org.eclipse.ui.navigator.resources.workingSets.showTopLevelWorkingSets="0"/>

+</view>

+<view id="org.eclipse.stem.util.analysis.views.aggregate" partName="Epidemic"/>

+<view id="org.eclipse.stem.ui.views.models" partName="Models"/>

+<view id="org.eclipse.stem.ui.views.decorators" partName="Decorators"/>

+<view id="org.eclipse.ui.views.PropertySheet" partName="Properties"/>

+<view id="org.eclipse.stem.util.loggers" partName="CSV Logger">

+<viewState/>

+</view>

+<view id="org.eclipse.stem.ui.views.diseases" partName="Diseases"/>

+<view id="org.eclipse.stem.util.analysis.views.processor" partName="Processor">

+<viewState/>

+</view>

+<view id="org.eclipse.stem.ui.views.scenarios" partName="Scenarios">

+<viewState/>

+</view>

+<view id="org.eclipse.stem.util.analysis.views.estimator" partName="Estimator"/>

+<view id="org.eclipse.stem.util.analysis.views.comparison" partName="ScenarioComparison"/>

+<view id="org.eclipse.stem.ui.views.triggers" partName="Triggers"/>

+<view id="org.eclipse.stem.ui.views.geographic.map" partName="Map">

+<viewState/>

+</view>

+<view id="org.eclipse.stem.ui.views.reports" partName="Time Series">

+<viewState/>

+</view>

+</views>

+<perspectives activePart="org.eclipse.stem.ui.views.scenarios" activePerspective="org.eclipse.stem.ui.STEMSimulationPerspective">

+<perspective editorAreaTrimState="2" editorAreaVisible="0" fixed="0" version="0.016">

+<descriptor class="org.eclipse.stem.util.analysis.perspectives.Analysis" id="org.eclipse.stem.util.analysis.perspectives.STEMAnalysisPerspective" label="Analysis"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>

+<show_view_action id="org.eclipse.stem.util.analysis.views.processor"/>

+<show_view_action id="org.eclipse.stem.util.analysis.views.estimator"/>

+<show_view_action id="org.eclipse.stem.util.analysis.views.comparison"/>

+<show_view_action id="org.eclipse.stem.util.analysis.views.lyapunov"/>

+<show_view_action id="org.eclipse.stem.util.analysis.views.aggregate"/>

+<perspective_action id="org.eclipse.stem.util.analysis.perspectives.STEMAnalysisPerspective"/>

+<view id="org.eclipse.stem.util.analysis.views.processor"/>

+<view id="org.eclipse.stem.util.analysis.views.estimator"/>

+<view id="org.eclipse.stem.util.analysis.views.comparison"/>

+<view id="org.eclipse.stem.util.analysis.views.lyapunov"/>

+<view id="org.eclipse.stem.util.analysis.views.aggregate"/>

+<fastViewBars/>

+<layout>

+<mainWindow>

+<info folder="true" part="top">

+<folder activePageID="org.eclipse.stem.util.analysis.views.processor" appearance="2" expanded="2">

+<page content="org.eclipse.stem.util.analysis.views.processor" label="Processor"/>

+<page content="org.eclipse.stem.util.analysis.views.estimator" label="Estimator"/>

+<page content="org.eclipse.stem.util.analysis.views.comparison" label="ScenarioComparison"/>

+<page content="org.eclipse.stem.util.analysis.views.lyapunov" label="Lyapunov"/>

+<page content="org.eclipse.stem.util.analysis.views.aggregate" label="Epidemic"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+<part id="1"/>

+<part id="2"/>

+<part id="3"/>

+<part id="4"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="stickyFolderRight" ratio="0.75" ratioLeft="756" ratioRight="252" relationship="2" relative="top">

+<folder appearance="2" expanded="2">

+<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>

+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>

+</folder>

+</info>

+<info part="org.eclipse.ui.editorss" ratio="0.94983816" ratioLeft="587" ratioRight="31" relationship="4" relative="top"/>

+</mainWindow>

+</layout>

+</perspective>

+<perspective editorAreaTrimState="2" editorAreaVisible="1" fixed="0" version="0.016">

+<descriptor class="org.eclipse.stem.ui.perspectives.Designer" id="org.eclipse.stem.ui.STEMDesignerPerspective" label="Designer"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>

+<show_view_action id="org.eclipse.stem.ui.views.simulationcontrolview"/>

+<show_view_action id="org.eclipse.stem.ui.views.graphs"/>

+<show_view_action id="org.eclipse.stem.ui.views.models"/>

+<show_view_action id="org.eclipse.stem.ui.views.scenarios"/>

+<show_view_action id="org.eclipse.stem.ui.views.sequencers"/>

+<show_view_action id="org.eclipse.stem.ui.views.decorators"/>

+<show_view_action id="org.eclipse.stem.ui.views.triggers"/>

+<show_view_action id="org.eclipse.stem.ui.views.predicates"/>

+<show_view_action id="org.eclipse.ui.navigator.ProjectExplorer"/>

+<show_view_action id="org.eclipse.stem.ui.views.diseases"/>

+<new_wizard_action id="org.eclipse.stem.ui.wizards.newstemproject"/>

+<perspective_action id="org.eclipse.stem.ui.STEMDesignerPerspective"/>

+<view id="org.eclipse.ui.navigator.ProjectExplorer"/>

+<view id="org.eclipse.stem.ui.views.scenarios"/>

+<view id="org.eclipse.stem.ui.views.models"/>

+<view id="org.eclipse.stem.ui.views.graphs"/>

+<view id="org.eclipse.stem.ui.views.triggers"/>

+<view id="org.eclipse.stem.ui.views.predicates"/>

+<view id="org.eclipse.stem.ui.views.sequencers"/>

+<view id="org.eclipse.stem.ui.views.decorators"/>

+<view id="org.eclipse.ui.views.PropertySheet"/>

+<view id="org.eclipse.ui.views.TaskList"/>

+<view id="org.eclipse.pde.runtime.LogView"/>

+<view id="org.eclipse.stem.ui.views.diseases"/>

+<view id="org.eclipse.ui.views.ContentOutline"/>

+<fastViewBars/>

+<layout>

+<mainWindow>

+<info folder="true" part="left">

+<folder activePageID="org.eclipse.ui.navigator.ProjectExplorer" appearance="2" expanded="2">

+<page content="org.eclipse.ui.navigator.ProjectExplorer" label="Project Explorer"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="stickyFolderRight" ratio="0.75" ratioLeft="756" ratioRight="252" relationship="2" relative="left">

+<folder appearance="2" expanded="2">

+<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>

+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>

+</folder>

+</info>

+<info part="org.eclipse.ui.editorss" ratio="0.25" ratioLeft="252" ratioRight="756" relationship="2" relative="left"/>

+<info folder="true" part="bottom" ratio="0.6585761" ratioLeft="407" ratioRight="211" relationship="4" relative="org.eclipse.ui.editorss">

+<folder activePageID="org.eclipse.stem.ui.views.scenarios" appearance="2" expanded="2">

+<page content="org.eclipse.stem.ui.views.scenarios" label="Scenarios"/>

+<page content="org.eclipse.stem.ui.views.models" label="Models"/>

+<page content="org.eclipse.stem.ui.views.graphs" label="Graphs"/>

+<page content="org.eclipse.stem.ui.views.triggers" label="Triggers"/>

+<page content="org.eclipse.stem.ui.views.predicates" label="Predicates"/>

+<page content="org.eclipse.stem.ui.views.sequencers" label="Sequencers"/>

+<page content="org.eclipse.stem.ui.views.decorators" label="Decorators"/>

+<page content="org.eclipse.ui.views.PropertySheet" label="Properties"/>

+<page content="org.eclipse.ui.views.TaskList" label="Tasks"/>

+<page content="org.eclipse.pde.runtime.LogView" label="Error Log"/>

+<page content="org.eclipse.stem.ui.views.diseases" label="Diseases"/>

+<page content="org.eclipse.ui.views.ProblemView" label="LabelNotFound"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+<part id="1"/>

+<part id="2"/>

+<part id="3"/>

+<part id="4"/>

+<part id="5"/>

+<part id="6"/>

+<part id="7"/>

+<part id="8"/>

+<part id="9"/>

+<part id="10"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="org.eclipse.ui.internal.ViewStack@1280c85" ratio="0.75" ratioLeft="567" ratioRight="189" relationship="2" relative="org.eclipse.ui.editorss">

+<folder activePageID="org.eclipse.ui.views.ContentOutline" appearance="2" expanded="2">

+<page content="org.eclipse.ui.views.ContentOutline" label="Outline"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+</presentation>

+</folder>

+</info>

+</mainWindow>

+</layout>

+</perspective>

+<perspective editorAreaTrimState="2" editorAreaVisible="0" fixed="0" version="0.016">

+<descriptor class="org.eclipse.stem.ui.perspectives.Simulation" id="org.eclipse.stem.ui.STEMSimulationPerspective" label="Simulation"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.keyBindings"/>

+<alwaysOnActionSet id="org.eclipse.ui.actionSet.openFiles"/>

+<show_view_action id="org.eclipse.stem.ui.views.simulationcontrolview"/>

+<show_view_action id="org.eclipse.ui.views.ProgressView"/>

+<show_view_action id="org.eclipse.stem.ui.views.scenarios"/>

+<show_view_action id="org.eclipse.stem.ui.views.activesimulations"/>

+<show_view_action id="org.eclipse.stem.ui.views.activebatches"/>

+<show_view_action id="org.eclipse.stem.ui.views.geographic.map"/>

+<show_view_action id="org.eclipse.stem.ui.views.ge"/>

+<show_view_action id="org.eclipse.stem.ui.views.reports"/>

+<show_view_action id="org.eclipse.stem.ui.views.reports.phaseSpace"/>

+<perspective_action id="org.eclipse.stem.ui.STEMSimulationPerspective"/>

+<view id="org.eclipse.stem.ui.views.geographic.map"/>

+<view id="org.eclipse.stem.ui.views.simulationcontrolview"/>

+<view id="org.eclipse.pde.runtime.LogView"/>

+<view id="org.eclipse.stem.ui.views.reports.phaseSpace"/>

+<view id="org.eclipse.stem.ui.views.reports"/>

+<view id="org.eclipse.stem.util.loggers"/>

+<view id="org.eclipse.ui.navigator.ProjectExplorer"/>

+<view id="org.eclipse.stem.ui.views.scenarios"/>

+<fastViewBars/>

+<viewLayoutRec id="org.eclipse.stem.ui.views.geographic.map" showTitle="true" standalone="true"/>

+<layout>

+<mainWindow>

+<info part="org.eclipse.ui.editorss"/>

+<info folder="true" part="stickyFolderRight" ratio="0.75" ratioLeft="756" ratioRight="252" relationship="2" relative="org.eclipse.ui.editorss">

+<folder appearance="2" expanded="2">

+<page content="org.eclipse.help.ui.HelpView" label="LabelNotFound"/>

+<page content="org.eclipse.ui.internal.introview" label="LabelNotFound"/>

+</folder>

+</info>

+<info folder="true" part="org.eclipse.ui.internal.ViewStack@675039" ratio="0.049603175" ratioLeft="50" ratioRight="958" relationship="2" relative="org.eclipse.ui.editorss">

+<folder activePageID="org.eclipse.stem.ui.views.scenarios" appearance="2" expanded="2">

+<page content="org.eclipse.ui.navigator.ProjectExplorer" label="Project Explorer"/>

+<page content="org.eclipse.stem.ui.views.scenarios" label="Scenarios"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+<part id="1"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="left" ratio="0.59903383" ratioLeft="372" ratioRight="249" relationship="4" relative="org.eclipse.ui.internal.ViewStack@675039">

+<folder activePageID="org.eclipse.stem.ui.views.simulationcontrolview" appearance="2" expanded="2">

+<page content="org.eclipse.stem.ui.views.simulationcontrolview" label="Simulation Control"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="bottom" ratio="0.29958245" ratioLeft="287" ratioRight="671" relationship="2" relative="left">

+<folder activePageID="org.eclipse.stem.ui.views.reports" appearance="2" expanded="2">

+<page content="org.eclipse.pde.runtime.LogView" label="Error Log"/>

+<page content="org.eclipse.stem.ui.views.reports.phaseSpace" label="Phase Space"/>

+<page content="org.eclipse.stem.ui.views.reports" label="Time Series"/>

+<page content="org.eclipse.stem.util.loggers" label="CSV Logger"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="2"/>

+<part id="1"/>

+<part id="3"/>

+<part id="0"/>

+</presentation>

+</folder>

+</info>

+<info folder="true" part="org.eclipse.ui.internal.ViewStack@13f5841" ratio="0.2995025" ratioLeft="301" ratioRight="704" relationship="2" relative="org.eclipse.ui.internal.ViewStack@675039">

+<folder activePageID="org.eclipse.stem.ui.views.geographic.map" appearance="3" expanded="2">

+<page content="org.eclipse.stem.ui.views.geographic.map" label="Map"/>

+<presentation id="org.eclipse.ui.presentations.WorkbenchPresentationFactory">

+<part id="0"/>

+</presentation>

+</folder>

+</info>

+</mainWindow>

+</layout>

+</perspective>

+</perspectives>

+<workingSets/>

+<navigationHistory/>

+<input factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/" type="8"/>

+</page>

+<workbenchWindowAdvisor/>

+<actionBarAdvisor/>

+<trimLayout>

+<trimArea IMemento.internal.id="128">

+<trimItem IMemento.internal.id="org.eclipse.ui.internal.WorkbenchWindow.topBar"/>

+</trimArea>

+<trimArea IMemento.internal.id="1024">

+<trimItem IMemento.internal.id="org.eclise.ui.internal.FastViewBar"/>

+<trimItem IMemento.internal.id="org.eclipse.jface.action.StatusLineManager"/>

+<trimItem IMemento.internal.id="org.eclipse.ui.internal.progress.ProgressRegion"/>

+</trimArea>

+</trimLayout>

+</window>

+<mruList/>

+</workbench>
\ No newline at end of file
diff --git a/org.eclipse.stem.sample/.classpath b/org.eclipse.stem.sample/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.sample/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.sample/.project b/org.eclipse.stem.sample/.project
new file mode 100644
index 0000000..7137c10
--- /dev/null
+++ b/org.eclipse.stem.sample/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.sample</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.sample/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.sample/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..73bc73d
--- /dev/null
+++ b/org.eclipse.stem.sample/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,57 @@
+#Mon Jan 21 12:43:56 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.sample/META-INF/MANIFEST.MF b/org.eclipse.stem.sample/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bb3bf1f
--- /dev/null
+++ b/org.eclipse.stem.sample/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.sample;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.sample.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.stem.jobs,
+ org.junit,
+ org.eclipse.stem.tests.diseasemodels
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.sample,
+ org.eclipse.stem.sample.adaption
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.sample/build.properties b/org.eclipse.stem.sample/build.properties
new file mode 100644
index 0000000..373972d
--- /dev/null
+++ b/org.eclipse.stem.sample/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html
diff --git a/org.eclipse.stem.sample/epl-v10.html b/org.eclipse.stem.sample/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.sample/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.sample/notice.html b/org.eclipse.stem.sample/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.sample/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.sample/plugin.properties b/org.eclipse.stem.sample/plugin.properties
new file mode 100644
index 0000000..03353e9
--- /dev/null
+++ b/org.eclipse.stem.sample/plugin.properties
@@ -0,0 +1,36 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Sample Model
+providerName = Eclipse.org
+
+# View 1
+v1Name = View Example 1
+v2Name = Relative Value View Example
+v3Name = Utility View
+
+
+# Categories
+_UI_Sample_Category = Sample
+
+# Graph Categories
diff --git a/org.eclipse.stem.sample/plugin.xml b/org.eclipse.stem.sample/plugin.xml
new file mode 100644
index 0000000..1b8423c
--- /dev/null
+++ b/org.eclipse.stem.sample/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.sample.adaption.ViewExample1"
+            id="org.eclipse.stem.sample.adapter.viewexample1"
+            name="%v1Name"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.sample.adaption.RelativeValueViewExample"
+            id="org.eclipse.stem.sample.adapter.relativevalueviewexample"
+            name="%v2Name"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.sample.UtilityView"
+            id="org.eclipse.stem.sample.utilityview"
+            name="%v3Name"/>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/Activator.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/Activator.java
new file mode 100644
index 0000000..814c836
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/Activator.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.sample;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.sample";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+} // Activator
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityTest.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityTest.java
new file mode 100644
index 0000000..afb1d60
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityTest.java
@@ -0,0 +1,99 @@
+package org.eclipse.stem.sample;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ *
+ */
+public class UtilityTest extends TestCase {
+    LatLong polygon1 =null;
+    LatLong polygon2 =null;
+    LatLong polygon3 =null;
+    LatLong polygon4 =null;
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		double[][] d1 = {{0.0, 0.0},
+				{10.0, 0.0},
+				{10.0, 10.0},
+				{0.0, 10.0},
+				{0.0, 0.0} };
+		Segment s1 = new Segment(d1);
+		polygon1 = new LatLong();
+		polygon1.add(s1);
+		
+		double[][] d2 = {{10.0, 0.0},
+				{10.0, 20.0},
+				{20.0, 0.0},
+				{10.0, 0.0} };
+		Segment s2 = new Segment(d2);
+		polygon2 = new LatLong();
+		polygon2.add(s2);
+		
+		double[][] d3 = {{20.0, 0.0},
+				{20.0, 20.0},
+				{40.0, 0.0},
+				{20.0, 0.0} };
+		Segment s3 = new Segment(d3);
+		polygon3 = new LatLong();
+		polygon3.add(s3);
+		
+		double[][] d4a = {{-20.0, 0.0},
+				{-20.0, -10.0},
+				{-40.0, -10.0},
+				{-20.0, -10.0},
+				{-20.0, 0.0} };
+		Segment s4a = new Segment(d4a);
+		polygon4 = new LatLong();
+		polygon4.add(s4a);
+		double[][] d4b = {{00.0, 0.0},
+				{-20.0, 0.0},
+				{-20.0, -20.0},
+				{0.0, -20.0},
+				{0.0, 0.0} };
+		Segment s4b = new Segment(d4b);		
+		polygon4.add(s4b);
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Test method for 
+	 * {@link org.eclipse.stem.sample.Utility#setBBox(String, LatLong)}.
+	 */
+//	public void testGetBBoxLatLong() {
+//		Map<String,Rectangle[]> map = new HashMap<String,Rectangle[]>();
+//		NeighborUtility.setBBox(map,"Test3",polygon3);
+//		NeighborUtility.setBBox(map,"Test1",polygon1);
+//		NeighborUtility.setBBox(map,"Test4",polygon4);
+//		NeighborUtility.setBBox(map,"Test2",polygon2);
+//		List list = NeighborUtility.processBBox(map);
+//	    Assert.assertNotNull(list);
+//	    Assert.assertEquals(list.size(),3);
+//		
+//	}
+
+}
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityView.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityView.java
new file mode 100644
index 0000000..fd627be
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/UtilityView.java
@@ -0,0 +1,463 @@
+// UtilityView.java
+package org.eclipse.stem.sample;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is an example of how to run GUI code in Eclipse and monitor the
+ * "selected" simulation, and how to extract the canonical graph from the
+ * selected simulation and then extract data from it.
+ * <p>
+ * It creats an Eclipse "View" called "View Example1" that simply "dumps" the
+ * latitude and longitude data extracted from the canonical graph to the view's
+ * window. The example is simple, but it helps to understand how a JFace
+ * "Viewer" (not the same as an Eclipse "View") works with content and label
+ * providers.
+ * <p>
+ * There are three classes defined in this example. The first is the parent
+ * class that is a <code>ViewPart</code> and implements what is seen in the
+ * view's window in Eclipse. It contains a JFace <code>ListViewer</code> which
+ * basically maintains a list of Objects and creates a display that prints a
+ * descriptive text string for each one. The method
+ * <code>createPartControl</code> is the code that initializes the SWT
+ * graphics for the display of the view. It is passed an SWT
+ * <code>Composite</code> instance called <code>parent</code> that is used
+ * to "contain" the SWT/JFace elements of the view's that make up the display in
+ * the view. The method does three things, it first creates the
+ * <code>ListViewer</code> instance, giving the parent as an argument to the
+ * constructer (this makes it part of the display), it then creates and passes
+ * to the <code>ListViewer</code> the "Content" and "Label" providers it
+ * needs. The Content and Label providers are the other two classes in this
+ * example.
+ * <p>
+ * The content provider class is {@link UtilityViewContentProvider}, while not
+ * complex, it may not be obvious what's it's doing. It's job is to maintain the
+ * contents of the <code>ListViewer</code>'s internal list of things to
+ * display. It performs the "Controler" job in an "MVC" architecture. In our
+ * example, the content provider is an {@link ISelectionListener} which means it
+ * has a <code>selectionChanged</code> method. The idea behind the method is
+ * that it is called whenever the user "selects" something in the Eclipse
+ * interface. This doesn't happen automatically, an instance of the class must
+ * be registered with the Eclipse "selection service" that serves as a central
+ * dispatcher for selections. This registration is done in the
+ * <code>createPartControl</code> method of the parent class. When something
+ * is selected and the method is called, it must filter out the selections and
+ * ignore those that are not instances of {@link ISimulation}. When it does
+ * find a simulation instance, it removes the current contents of the list
+ * maintained by the <code>ListViewer</code> and adds the newly selected
+ * instances. It then tells the viewer to redraw itself.
+ * <p>
+ * The label provider class is {@link UtilityViewLabelProvider} and is the
+ * easiest to understand, its is used by the <code>ListViewer</code> to
+ * generate a text string for any of the <code>Objects</code> (i.e.,
+ * <code>ISimulation</code> instances) it contains. The method
+ * {@link UtilityViewLabelProvider#getText(Object)} does this and in this
+ * example does the work to extract the latitude and longitude data from the
+ * canonical graph used in the simulation. Then it just returns that data as a
+ * (long) string to be displayed.
+ * 
+ * To see the example in action, you need to:
+ * <ol>
+ * <li> Run STEM</li>
+ * <li> Open the "View Example 1" view.
+ * "Window->Show&nbsp;View->Other->STEM->View&nbsp;Example&nbsp;1"</li>
+ * <li> Open the "Active Simulations" view.
+ * "Window->Show&nbsp;View->Active&nbsp;Simulations"</li>.
+ * 
+ * <li> Go to the "Scenarios" view. It shows the STEM Scenarios that are plugged
+ * into STEM. </li>
+ * <li> Expand "Test->Disease&nbsp;Models->Standard" and you'll see disease
+ * modeling scenarios that are plugged into STEM. </li>
+ * <li> Double-click on a scenario in the list (e.g., "SEIR 1 x 1") it will
+ * begin simulation and an entry will appear in the "Active Simulations" view.
+ * </li>
+ * <li> Single click on the entry in the Active Simulations view. This will
+ * select that simulation and the latitude/longitude data for that scenario will
+ * appear in the View Example 1 view as a single (long) string. </li>
+ * </ol>
+ * If you double-click on another plugged-in Scenario so that two entries are
+ * displayed in the Active Simulations view and the you select both, you'll see
+ * two entries in the View Example 1 view, one for each of the selected
+ * simulations.
+ * 
+ */
+public class UtilityView extends ViewPart {
+
+	/**
+	 * The identifier of the View Example1 View. Nobody uses this right now, but
+	 * it would be useful if we wanted to programmatically add this view to a
+	 * perspective.
+	 */
+	public static final String ID_VIEW_EXAMPLE1_VIEW = "org.eclipse.stem.sample.adapters.UtilityView";
+
+	/**
+	 * This is the {@link ListViewer} that creates the display that will show up
+	 * in the view's window. It contains a list of Objects, which in this
+	 * example's case will be instances of ISimulation.
+	 */
+	protected ListViewer lv = null;
+
+	/**
+	 * This method is called when the view is created and it has the
+	 * responsibility for doing all of the initialization. It creates the
+	 * {@link ListViewer} and instances of the ContentProvider and
+	 * {@link LabelProvider} for the viewer. It also gets a reference to the
+	 * selection service and registers the content provider so it will be
+	 * notified when something is selected.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		// Create the content provider
+		UtilityViewContentProvider contentProvider = new UtilityViewContentProvider();
+		// Create the ListViewer
+		lv = new ListViewer(parent);
+
+		// Let the ListViewer know who its content and label providers are
+		lv.setContentProvider(contentProvider);
+		lv.setLabelProvider(new UtilityViewLabelProvider());
+
+		// This call tells the viewer's content provider where it should get the
+		// source of its content. In this case it is the selection service.
+		lv.setInput(getSite().getWorkbenchWindow().getSelectionService());
+
+		// We also want to be able to have a user select a simulation from our
+		// view and have that be seen by others. So we register the ListViewer
+		// instance as the view's selection provider. When you click on the view
+		// in the interface it finds the underlying Object (i.e., ISimulation)
+		// you selected and passes it to the selection service.
+		getSite().setSelectionProvider(lv);
+
+	} // createPartControl
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+	/**
+	 * This class is the content provider for the view. It is also a selection
+	 * listener and uses the selection service as the source of its input. It
+	 * looks for selected {@link ISimulation} instances and updates the list in
+	 * the view's {@link ListViewer} instance with the current selection.
+	 */
+	public class UtilityViewContentProvider implements
+			IStructuredContentProvider, ISelectionListener {
+
+		// We remember the ListViewer that we're providing content for because
+		// we need to manipulate its list in the method selectionChanged.
+		private ListViewer viewer = null;
+
+		// These are the simulations we added to the ListViewer, we remember
+		// these so we can remove them when a different set of simulations is
+		// selected.
+		private List<ISimulation> selectedSimulations = null;
+
+		/**
+		 * This is used by the ListViewer to get the initial list of ISimulation
+		 * instances.
+		 * 
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(
+				@SuppressWarnings("unused") Object inputElement) {
+			Object[] retValue = new Object[] {};
+
+			// Anything yet?
+			if (selectedSimulations != null) {
+				// Yes
+				retValue = selectedSimulations.toArray();
+			}
+			return retValue;
+		} // getElements
+
+		/**
+		 * This is called when the view is closed, we could remove ourselves as
+		 * a selection service listener, but this is really for cleaning up SWT
+		 * things. The method inputChanged will be called before dispose when
+		 * the view is closed, we remove ourselves from the selection service
+		 * there.
+		 * 
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing to do
+		} // dispose
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			// We remember the ListViewer we're providing content for because
+			// we'll have to change the list of things it contains in the
+			// selectionChanged method.
+			this.viewer = (ListViewer) viewer;
+
+			// Were we previously getting input from a different service?
+			if (oldInput != null) {
+				// Yes
+				// Not any more.
+				final ISelectionService oldSS = (ISelectionService) oldInput;
+				oldSS.removePostSelectionListener(this);
+			}
+
+			// Is there some new input we should register with?
+			if (newInput != null) {
+				// Yes
+				// Register us with the new service. Since there should only
+				// really be one selection service in Eclipse, this would only
+				// happen once, however, the code can handle a change if needed.
+				final ISelectionService ss = (ISelectionService) newInput;
+				ss.addPostSelectionListener(this);
+			}
+
+		} // inputChanged
+
+		/**
+		 * This method is called whenever ANYTHING is selected in the Eclipse
+		 * workbench. It's job is to filter out selections of
+		 * {@link ISimulation} instances and update the list in the
+		 * {@link ListViewer}.
+		 * 
+		 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+		 *      org.eclipse.jface.viewers.ISelection)
+		 */
+		public void selectionChanged(final IWorkbenchPart part,
+				final ISelection selection) {
+
+			// Is this selection changed event coming from our view?
+			if (part != UtilityView.this) {
+				// No
+				// This will hold the new simulations that have been selected
+				final List<ISimulation> temp = new ArrayList<ISimulation>();
+
+				// Is it a structured selection?
+				if (selection instanceof IStructuredSelection) {
+					// Yes
+					final List list = ((IStructuredSelection) selection)
+							.toList();
+
+					// Go through everything in the list of things that were
+					// selected and pick out the ones that are ISimulations.
+					for (final Iterator selectionIter = list.iterator(); selectionIter
+							.hasNext();) {
+						final Object obj = selectionIter.next();
+						if (obj instanceof ISimulation) {
+							temp.add((ISimulation) obj);
+						}
+					} // for each selected item
+				} // if structured selection
+
+				// Did we find any new simulations that were selected?
+				if (temp.size() > 0) {
+					// Yes
+					// Tell the ListViewer not to redraw while we're changing
+					// its list.
+					viewer.getList().setRedraw(false);
+					try {
+						// Do we have any old selections we should remove?
+						if (selectedSimulations != null) {
+							// Yes
+							viewer.remove(selectedSimulations.toArray());
+						}
+						// Add the new selections to the ListViewer's list. It
+						// will use the label provider to get a text string for
+						// each one.
+						viewer.add(temp.toArray());
+
+						// Remember what we added this time so we can remove it
+						// next selection.
+						selectedSimulations = temp;
+					} // try
+					finally {
+						// The ListViewer should update itself now.
+						viewer.getList().setRedraw(true);
+					}
+				} // if any new simulations selected
+			} // if selection changed event coming from our view?
+		} // selectionChanged
+
+	} // UtilityViewContentProvider
+
+	/**
+	 * This class is the label provider for the view. It is used by the
+	 * ListViewer to convert ISimulation instances to text strings.
+	 */
+	public class UtilityViewLabelProvider implements ILabelProvider {
+
+		/**
+		 * This is called by the {@link ListViewer} for each {@link Object} in
+		 * its list to generate a text {@link String} that represents that
+		 * {@link Object}. This implementation digs into the {@link Simulation}
+		 * to get the {@link Scenario} and then from that it obtains the
+		 * canonical {@link Graph}. It then goes through the {@link Node}s of
+		 * the {@link Graph} and using a {@link LatLongProviderAdapterFactory}
+		 * creates a {@link LatLongProvider} for each {@link Node} that can
+		 * return the latitude and longitude data of the {@link Node}. That
+		 * data is just turned into a string and returned as the textual
+		 * representation of the {@link Simulation}.
+		 * 
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			final StringBuilder sb = new StringBuilder();
+
+			// Extract the scenario and then the canonical graph
+			final ISimulation simulation = (ISimulation) element;
+			final Scenario scenario = simulation.getScenario();
+			final Graph canonicalGraph = scenario.getCanonicalGraph();
+
+			// Get the nodes from the graph and iterate through them. Note that
+			// the getNodes call returns a Map instance where the keys are the
+			// URI's of the Node instances. We get the values of the map to
+			// iterate through the nodes.
+			// Map<String,Rectangle[]> map = new HashMap<String,Rectangle[]>();
+			for (final Iterator nodeIter = canonicalGraph.getNodes().values()
+					.iterator(); nodeIter.hasNext();) {
+				final Node node = (Node) nodeIter.next();
+
+				// We'd like to have access to lat/long data of the node if
+				// there is any, to do that we use a factory to create an
+				// adapter that knows about the inner details of nodes (it
+				// really knows about all Identifiables) and implements the
+				// LatLongProvider interface.
+				final LatLongProvider latLongProvider = (LatLongProvider) LatLongProviderAdapterFactory.INSTANCE
+						.adapt(node, LatLongProvider.class);
+
+				// The node may or may not have lat/long data associated with
+				// it, if it doesn't the list that's returned will be empty.
+				final LatLong latLong = latLongProvider.getLatLong();
+
+				// String name = node.getDublinCore().getIdentifier();
+				// NeighborUtility.setBBox(map,name,latLong);
+
+				// Now we just go through each segment and create a string.
+				for (Segment segment : latLong.getSegments()) {
+
+					sb.append(createStringOfLatLongData(segment));
+					sb.append("///");
+				} // for
+			} // for
+			// NeighborUtility.processBBox(map);
+			// Now if we didn't find any lat/long data, we just return a simple
+			// response. This will appear in the view instead of the data.
+			String retValue = sb.toString();
+			retValue = retValue.length() == 0 ? "No Lat/Long Data" : retValue;
+
+			return retValue;
+		} // getText
+
+		/**
+		 * We don't have any images associated with {@link Simulation}, but if
+		 * we did we'd return them here. Returning null just tells the caller
+		 * that there are no images.
+		 * 
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused") Object element) {
+			return null;
+		} // getImage
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(
+				@SuppressWarnings("unused") ILabelProviderListener listener) {
+			// nothing
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// nothing
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(
+				@SuppressWarnings("unused") Object element,
+				@SuppressWarnings("unused") String property) {
+			return false;
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(
+				@SuppressWarnings("unused") ILabelProviderListener listener) {
+			// nothing
+		}
+	} // UtilityViewLabelProvider
+
+	/**
+	 * @param segment
+	 * @return a string of the lat/long points
+	 */
+	public static String createStringOfLatLongData(final Segment segment) {
+		final StringBuilder sb = new StringBuilder();
+		final int size = segment.size();
+		for (int i = 0; i < size; i++) {
+			sb.append("(");
+			sb.append(segment.latitude(i));
+			sb.append(", ");
+			sb.append(segment.longitude(i));
+			sb.append(")");
+		} // for each lat/long pair
+		return sb.toString();
+	} // createStringOfLatLongData
+} // UtilityView
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/Example1.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/Example1.java
new file mode 100644
index 0000000..772389d
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/Example1.java
@@ -0,0 +1,129 @@
+// Example1.java
+package org.eclipse.stem.sample.adaption;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.diseasemodels.standard.tests.DeterministicSEIRScenarioTest;
+
+/**
+ * This class is an example of how to obtain the canonical graph from a
+ * scenario, access the nodes in the graph, and adapt the nodes to produce
+ * lat/long data sets for each node.
+ */
+public class Example1 {
+
+	/**
+	 * @param args
+	 *            none
+	 */
+	public static void main(String[] args) {
+
+		// This creates a scenario that's ready to be "stepped" (i.e.,
+		// simulated). The world is a lattice (grid) that 2x2 where each node
+		// has a population of 100 humans and has an area of 100 square
+		// kilometers. There is one disease that is modeled with a
+		// "deterministic SEIR disease model". One person in the node at
+		// position [0][0], in the upper left of the grid, is infected.
+		final Scenario scenario = DeterministicSEIRScenarioTest.createScenario(
+				2, 2);
+
+		// This will initialize the scenario and make it ready to step through
+		// the simulation sequence. In particular, it will create the canonical
+		// graph from the scenario's model.
+		scenario.initialize();
+
+		// We get the graph...
+		final Graph canonicalGraph = scenario.getCanonicalGraph();
+
+		// ...and can now iterate through the nodes. Note that the method
+		// "getNodes" returns a map indexed by the URI of each of the nodes,
+		// thus we need to get the values of the map to have an actual list to
+		// iterator over.
+		for (final Iterator nodeIter = canonicalGraph.getNodes().values()
+				.iterator(); nodeIter.hasNext();) {
+			final Node node = (Node) nodeIter.next();
+
+			// We'd like to have access to lat/long data of the node if there is
+			// any, to do that we use a factory to create an adapter that knows
+			// about the inner details of nodes (it really knows about all
+			// Identifiables) and implements the LatLongProvider interface.
+			final LatLongProvider latLongProvider = (LatLongProvider) LatLongProviderAdapterFactory.INSTANCE
+					.adapt(node, LatLongProvider.class);
+
+			// The node may or may not have lat/long data associated with it, if
+			// it doesn't the list that's returned will be empty.
+			final LatLong latLongData = latLongProvider.getLatLong();
+
+			System.out.println("The lat/long data for \""
+					+ node.getDublinCore().getTitle() + "\" is:");
+			outputLatLongData(latLongData);
+		} // for each node
+
+		System.out.println("Edges...");
+
+		// For fun, let's do the edges, there might not be anything defined for
+		// them...yet
+		for (final Iterator edgeIter = canonicalGraph.getEdges().values()
+				.iterator(); edgeIter.hasNext();) {
+			final Edge edge = (Edge) edgeIter.next();
+			final LatLongProvider latLongProvider = (LatLongProvider) LatLongProviderAdapterFactory.INSTANCE
+					.adapt(edge, LatLongProvider.class);
+
+			final LatLong latLongData = latLongProvider.getLatLong();
+
+			System.out.println("The lat/long data for \""
+					+ edge.getDublinCore().getTitle() + "\" is:");
+			outputLatLongData(latLongData);
+		} // for each edge
+	} // main
+
+	/**
+	 * @param latLong
+	 *            a LatLong instance
+	 */
+	public static void outputLatLongData(LatLong latLong) {
+		for (Segment segment : latLong.getSegments()) {
+			final int size = segment.size();
+			for (int i = 0; i < size; i++) {
+				System.out.println(createStringOfLatLongData(segment));
+			} // for each lat/long pair
+			System.out.println();
+		} // for each segment
+	} // outputLatLongData
+
+	/**
+	 * @param segment
+	 * @return a string of the lat/long points
+	 */
+	public static String createStringOfLatLongData(final Segment segment) {
+		final StringBuilder sb = new StringBuilder();
+		final int size = segment.size();
+		for (int i = 0; i < size; i++) {
+			sb.append("(");
+			sb.append(segment.latitude(i));
+			sb.append(", ");
+			sb.append(segment.longitude(i));
+			sb.append(")");
+		} // for each lat/long pair
+		return sb.toString();
+	} // createStringOfLatLongData
+} // Example1
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/RelativeValueViewExample.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/RelativeValueViewExample.java
new file mode 100644
index 0000000..7f29f97
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/RelativeValueViewExample.java
@@ -0,0 +1,668 @@
+// RelativeValueViewExample.java
+package org.eclipse.stem.sample.adaption;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is an example of how to run GUI code in Eclipse and monitor the
+ * "selected" simulation, and how to extract the canonical graph from the
+ * selected simulation and then extract data from it. In particular, this
+ * example view illustrates how to explore the canonical graph and discover
+ * property values of graph components that can be represented as a value
+ * between 0.0 and 1.0 (inclusive) relative to other peer property values. For
+ * instance, in the case of a disease model, the disease model label values
+ * contain population numbers for population members in different disease states
+ * (e.g., "susceptible", "exposed", "infectious", "recovered"). The number of
+ * members in each state can be represented relative to the total population
+ * figure (i.e., as a percentage of the sum of all the states). The relative
+ * values can be interpreted by a generic graphical interface to display
+ * different colors or intensities to represent the property value.
+ * <p>
+ * The discovery of properties and their conversion to relative values is
+ * facilitated by an interface called {@link RelativeValueProvider}. Instances
+ * of classes that implement this interface can provide a list of properties for
+ * which relative values can be generated, and, given one of those properties,
+ * can generate its relative value. The properties contain details such as the
+ * name of the property and a text description, among other things. These values
+ * could be presented to a user of a graphical interface in a menu to select the
+ * (relative) property values to display. The trick, and the point of this
+ * example, is obtaining {@link RelativeValueProvider}'s for components of the
+ * graph.
+ * <p>
+ * Instances of {@link RelativeValueProvider} are created by an adapter factory
+ * called {@link RelativeValueProviderAdapterFactory}. This adapter factory can
+ * be given any component in a graph and, if possible, create a
+ * {@link RelativeValueProvider} for it. If it can't, it simply returns
+ * <code>null</code> as the result of the attempt. The factory can be
+ * generically extended to encompass new graph components. This allows clients
+ * of the factory to obtain adapters for future enhancements with no change to
+ * the interface. An example of this is the
+ * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory}
+ * which provides relative values for properties of the "standard" STEM disease
+ * model components, in particular, for the disease model label values (e.g.,
+ * {@link org.eclipse.stem.diseasemodels.standard.SILabelValue},
+ * {@link org.eclipse.stem.diseasemodels.standard.SIRLabelValue}, and
+ * {@link org.eclipse.stem.diseasemodels.standard.SEIRLabelValue}).
+ * <p>
+ * This example illustrates how to track which simulation is selected and then
+ * how to extract the simulation's underlying
+ * {@link org.eclipse.stem.core.scenario.Scenario} and then from that obtain
+ * the <em>canonical graph</em>. The canonical graph is the actual graph used
+ * to represent the simulation state information. The simulation proceeds by
+ * updating the values of labels on edges and nodes in the graph. The example
+ * shows how to obtain the decorators (e.g., disease models such as
+ * {@link org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel})
+ * that update the state of the graph and then from those discover properties
+ * that can have relative values. The example then shows how to use the adapter
+ * factory to create {@link RelativeValueProvider}'s.
+ * <p>
+ * To see the example in action, you need to:
+ * <ol>
+ * <li> Run STEM</li>
+ * <li> Open the "Relative Value View Example" view.
+ * "Window->Show&nbsp;View->Other->STEM->Relative&nbsp;Value&nbsp;View&nbsp;Example"</li>
+ * <li> Open the "Active Simulations" view.
+ * "Window->Show&nbsp;View->Active&nbsp;Simulations"</li>.
+ * 
+ * <li> Go to the "Scenarios" view. It shows the STEM Scenarios that are plugged
+ * into STEM. </li>
+ * <li> Expand "Test->Disease&nbsp;Models->Standard" and you'll see disease
+ * modeling scenarios that are plugged into STEM. </li>
+ * <li> Double-click on a scenario in the list (e.g., "SEIR 1 x 1") it will
+ * begin simulation and an entry will appear in the "Active Simulations" view.
+ * </li>
+ * <li> Single click on the entry in the Active Simulations view. This will
+ * select that simulation and the relative values for that scenario will appear
+ * in the Relative Value View Example view.</li>
+ * </ol>
+ * If you double-click on another plugged-in Scenario so that two entries are
+ * displayed in the Active Simulations view and if you select both, you'll see
+ * data from both simulations.
+ * 
+ */
+public class RelativeValueViewExample extends ViewPart {
+
+	/**
+	 * The identifier of the Relative Value View Example View. Nobody uses this
+	 * right now, but it would be useful if we wanted to programatically add
+	 * this view to a perspective.
+	 */
+	public static final String ID_VIEW_EXAMPLE1_VIEW = "org.eclipse.stem.sample.adapter.relativevalueviewexample";
+
+	private static final int NUMBER_OF_FRACTIONAL_DIGITS = 2;
+
+	TreeViewer treeViewer = null;
+
+	private static NumberFormat formatter = null;
+
+	/**
+	 * @return a number formatter
+	 */
+	protected static NumberFormat getFormatter() {
+		// Is there already a formatter?
+		if (formatter == null) {
+			// No
+			formatter = NumberFormat.getNumberInstance();
+			formatter.setMaximumFractionDigits(NUMBER_OF_FRACTIONAL_DIGITS);
+			formatter.setMinimumFractionDigits(NUMBER_OF_FRACTIONAL_DIGITS);
+		}
+		return formatter;
+	} // getFormatter
+
+	/**
+	 * This method is called when the view is created and it has the
+	 * responsibility for doing all of the initialization. It creates the
+	 * TreeViewer and instances of the ContentProvider and LabelProvider for the
+	 * viewer. It also gets a reference to the selection service and registers
+	 * the content provider so it will be notified when something is selected.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		// Create the TreeViewer
+		treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL
+				| SWT.V_SCROLL);
+
+		final Tree tree = treeViewer.getTree();
+		tree.setLinesVisible(true);
+		tree.setHeaderVisible(true);
+
+		final TreeColumn simulationColumn = new TreeColumn(tree, SWT.NONE);
+		simulationColumn.setText("Simulation");
+		simulationColumn.setResizable(true);
+		simulationColumn.setWidth(200);
+		simulationColumn.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			SelectionEvent e) {
+				((RelativeValueViewSorter) treeViewer.getSorter()).doSort(0);
+				treeViewer.refresh(true);
+			}
+		});
+
+		final TreeColumn decoratorColumn = new TreeColumn(tree, SWT.NONE);
+		decoratorColumn.setText("Decorator");
+		decoratorColumn.setResizable(true);
+		decoratorColumn.setWidth(200);
+		decoratorColumn.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			SelectionEvent e) {
+				((RelativeValueViewSorter) treeViewer.getSorter()).doSort(1);
+				treeViewer.refresh(true);
+			}
+		});
+
+		final TreeColumn nodeColumn = new TreeColumn(tree, SWT.NONE);
+		nodeColumn.setText("Node");
+		nodeColumn.setResizable(true);
+		nodeColumn.setWidth(100);
+		nodeColumn.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			SelectionEvent e) {
+				((RelativeValueViewSorter) treeViewer.getSorter()).doSort(2);
+				treeViewer.refresh(true);
+			}
+		});
+
+		final TreeColumn currentValueColumn = new TreeColumn(tree, SWT.NONE);
+		currentValueColumn.setText("Current Values");
+		currentValueColumn.setResizable(true);
+		currentValueColumn.setWidth(100);
+		currentValueColumn.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			SelectionEvent e) {
+				((RelativeValueViewSorter) treeViewer.getSorter()).doSort(3);
+				treeViewer.refresh(true);
+			}
+		});
+
+		final TreeColumn relativeValueColumn = new TreeColumn(tree, SWT.NONE);
+		relativeValueColumn.setText("Relative Values");
+		relativeValueColumn.setResizable(true);
+		relativeValueColumn.setWidth(100);
+		currentValueColumn.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			SelectionEvent e) {
+				((RelativeValueViewSorter) treeViewer.getSorter()).doSort(4);
+				treeViewer.refresh(true);
+			}
+		});
+
+		// Let the ListViewer know who its content and label providers are
+		treeViewer.setContentProvider(new RelativeValueViewContentProvider());
+		treeViewer.setLabelProvider(new RelativeValueViewLabelProvider());
+		treeViewer.setSorter(new RelativeValueViewSorter());
+
+		// This call tells the viewer's content provider where it should get the
+		// source of its content. In this case it is the selection service.
+		treeViewer.setInput(getSite().getWorkbenchWindow()
+				.getSelectionService());
+
+		// We also want to be able to have a user select a simluation from our
+		// view and have that be seen by others. So we register the TreeViewer
+		// instance as the view's selection provider. When you click on the view
+		// in the interface it finds the underlying Object (i.e., ISimulation)
+		// you selected and passes it to the selection service.
+		// getSite().setSelectionProvider(treeViewer);
+
+	} // createPartControl
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// nothing
+	} // setFocus
+
+	/**
+	 * This class is the content provider.
+	 */
+	public class RelativeValueViewContentProvider implements
+			ITreeContentProvider, ISelectionListener {
+
+		ISelectionService ss = null;
+
+		private TreeViewer viewer = null;
+
+		private List<ISimulation> selectedSimulations;
+
+		/**
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(Object inputElement) {
+			return new Object[] { inputElement };
+		} // getElements
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			// TODO Auto-generated method stub
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			// We remember the TreeViewer we're providing content for because
+			// we'll have to change the list of things it contains in the
+			// selectionChanged method.
+			this.viewer = (TreeViewer) viewer;
+
+			// Were we previously getting input from a different service?
+			if (oldInput != null) {
+				// Yes
+				// Not any more.
+				final ISelectionService oldSS = (ISelectionService) oldInput;
+				oldSS.removePostSelectionListener(this);
+			}
+
+			// Is there some new input we should register with?
+			if (newInput != null) {
+				// Yes
+				// Register us with the new service. Since there should only
+				// really be one selection service in Eclipse, this would only
+				// happen once, however, the code can handle a change if needed.
+				ss = (ISelectionService) newInput;
+				ss.addPostSelectionListener(this);
+			}
+
+		} // inputChanged
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+		 */
+		public Object[] getChildren(Object parentElement) {
+			Object[] retValue = null;
+			if (parentElement instanceof ISelectionService) {
+				retValue = selectedSimulations == null ? null
+						: selectedSimulations.toArray();
+			} else if (parentElement instanceof ISimulation) {
+				ISimulation simulation = (ISimulation) parentElement;
+				retValue = simulation.getScenario().getCanonicalGraph()
+						.getDecorators().toArray();
+			} else if (parentElement instanceof Decorator) {
+				Decorator decorator = (Decorator) parentElement;
+				retValue = decorator.getLabelsToUpdate().toArray();
+			}
+
+			// else if (parentElement instanceof Label) {
+			// Label label = (Label) parentElement;
+			// RelativeValueProvider rvp = (RelativeValueProvider)
+			// RelativeValueProviderAdapterFactory.INSTANCE
+			// .adapt(label, RelativeValueProvider.class);
+			// retValue = rvp.getProperties().toArray();
+			// }
+			return retValue;
+		} // getChildren
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+		 */
+		@SuppressWarnings("null")
+		public Object getParent(Object element) {
+			Object retValue = null;
+			if (element instanceof ISelectionService) {
+				retValue = null;
+			} else if (element instanceof ISimulation) {
+				retValue = ss;
+			} else if (element instanceof Decorator) {
+				Decorator decorator = (Decorator) element;
+				retValue = decorator.eContainer().eContainer();
+			}
+			// if (element instanceof Label) {
+			// Label label = (Label) element;
+			// label.g
+			// }
+			return retValue;
+		} // getParent
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+		 */
+		public boolean hasChildren(Object element) {
+			boolean retValue = false;
+			if (element instanceof ISelectionService) {
+				retValue = selectedSimulations != null
+						&& selectedSimulations.size() > 0;
+			} else if (element instanceof ISimulation) {
+				final ISimulation simulation = (ISimulation) element;
+				final Graph canonicalGraph = simulation.getScenario()
+						.getCanonicalGraph();
+				// Do we have a canonical Graph yet?
+				if (canonicalGraph != null) {
+					// Yes
+					retValue = canonicalGraph.getDecorators().size() > 0;
+				} // if
+			} else if (element instanceof Decorator) {
+				Decorator decorator = (Decorator) element;
+				retValue = decorator.getLabelsToUpdate().size() > 0;
+			}
+
+			// else if (element instanceof Label) {
+			// Label label = (Label) element;
+			// RelativeValueProvider rvp = (RelativeValueProvider)
+			// RelativeValueProviderAdapterFactory.INSTANCE
+			// .adapt(label, RelativeValueProvider.class);
+			// retValue = rvp != null && rvp.getProperties().size() > 0;
+			// }
+			return retValue;
+		} // hasChildren
+
+		/**
+		 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+		 *      org.eclipse.jface.viewers.ISelection)
+		 */
+		public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+
+			// Is this selection changed event coming from our view?
+			if (part != RelativeValueViewExample.this) {
+				// No
+				// This will hold the new simulations that have been selected
+				final List<ISimulation> temp = new ArrayList<ISimulation>();
+
+				// Is it a structured selection?
+				if (selection instanceof IStructuredSelection) {
+					// Yes
+					final List list = ((IStructuredSelection) selection)
+							.toList();
+
+					// Go through everything in the list of things that were
+					// selected and pick out the ones that are ISimulations.
+					for (final Iterator selectionIter = list.iterator(); selectionIter
+							.hasNext();) {
+						final Object obj = selectionIter.next();
+						if (obj instanceof ISimulation) {
+							temp.add((ISimulation) obj);
+						}
+					} // for each selected item
+				} // if structured selection
+
+				// Did we find any new simulations that were selected?
+				if (temp.size() > 0) {
+					// Yes
+					// Tell the ListViewer not to redraw while we're changing
+					// its list.
+					viewer.getTree().setRedraw(false);
+					try {
+						// Do we have any old selections we should remove?
+						if (selectedSimulations != null) {
+							// Yes
+							viewer.remove(selectedSimulations.toArray());
+						}
+						// Add the new selections to the ListViewer's list. It
+						// will use the label provider to get a text string for
+						// each one.
+						viewer.add(ss, temp.toArray());
+
+						// Remember what we added this time so we can remove it
+						// next selection.
+						selectedSimulations = temp;
+					} // try
+					finally {
+						// The ListViewer should update itself now.
+						viewer.getTree().setRedraw(true);
+					}
+				} // if any new simulations selected
+			} // if selection changed event coming from our view?
+
+		} // selectionChanged
+
+	} // RelativeValueViewContentProvider
+
+	/**
+	 * This class is a Label provider
+	 */
+	public class RelativeValueViewLabelProvider implements ILabelProvider,
+			ITableLabelProvider, ITableColorProvider {
+
+		private final List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused")
+		Object element) {
+			return null;
+		} // getImage
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			String retValue = "";
+			if (element instanceof ISelectionService) {
+				retValue = "Active Simulations";
+			} else if (element instanceof ISimulation) {
+				ISimulation simulation = (ISimulation) element;
+				retValue = simulation.getName() + " ("
+						+ simulation.getSequenceNumber() + ")";
+			} else if (element instanceof Decorator) {
+				Decorator decorator = (Decorator) element;
+				// final String title = decorator.getDublinCore().getTitle();
+				// final StringBuilder sb = new StringBuilder();
+				retValue = decorator.toString();
+			} else if (element instanceof NodeLabel) {
+				NodeLabel nodeLabel = (NodeLabel) element;
+				retValue = nodeLabel.getNode().getDublinCore().getTitle();
+				retValue = retValue == null ? "Label" : retValue;
+			} else if (element instanceof ItemPropertyDescriptor) {
+				ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+				retValue = property.getDisplayName(null);
+			}
+			return retValue;
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
+		 *      int)
+		 */
+		public Image getColumnImage(@SuppressWarnings("unused")
+		Object element, @SuppressWarnings("unused")
+		int columnIndex) {
+			return null;
+		} // getColumnImage
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
+		 *      int)
+		 */
+		public String getColumnText(Object element, int columnIndex) {
+			String retValue = "";
+			if (columnIndex == 0 && element instanceof ISelectionService) {
+				retValue = "Active Simulations";
+			} else if (columnIndex == 0 && element instanceof ISimulation) {
+				ISimulation simulation = (ISimulation) element;
+				retValue = simulation.getName() + " ("
+						+ simulation.getSequenceNumber() + ")";
+			} else if (columnIndex == 1 && element instanceof Decorator) {
+				Decorator decorator = (Decorator) element;
+				// final String title = decorator.getDublinCore().getTitle();
+				// final StringBuilder sb = new StringBuilder();
+				retValue = decorator.toString();
+			} else if (columnIndex == 2 && element instanceof NodeLabel) {
+				NodeLabel nodeLabel = (NodeLabel) element;
+				retValue = nodeLabel.getNode().getDublinCore().getTitle();
+				retValue = retValue == null ? "Node" : retValue;
+			}
+
+			else if (columnIndex == 3 && element instanceof NodeLabel) {
+				NodeLabel nodeLabel = (NodeLabel) element;
+				retValue = nodeLabel.getCurrentValue().toString();
+			} // else index = 3 && NodeLabel
+
+			else if (columnIndex == 4 && element instanceof NodeLabel) {
+				
+				RelativeValueProvider rvp = (RelativeValueProvider) RelativeValueProviderAdapterFactory.INSTANCE
+						.adapt(element, RelativeValueProvider.class);
+				// Does the label have relative values?
+				if (rvp != null) {
+					// Yes
+
+					final StringBuilder sb = new StringBuilder();
+					for (Iterator propertyIter = rvp.getProperties().iterator(); propertyIter
+							.hasNext();) {
+						ItemPropertyDescriptor property = (ItemPropertyDescriptor) propertyIter
+								.next();
+						sb.append(property.getDisplayName(property));
+						sb.append(": ");
+
+						sb.append(getFormatter().format(
+								rvp.getRelativeValue(property)));
+
+						if (propertyIter.hasNext()) {
+							sb.append(", ");
+						}
+					} // for each property
+					retValue = sb.toString();
+				} // if
+				else {
+					retValue = "";
+				}
+			} // else index = 4 && NodeLabel
+
+			return retValue;
+		} // getColumnText
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITableColorProvider#getBackground(java.lang.Object,
+		 *      int)
+		 */
+		public Color getBackground(@SuppressWarnings("unused")
+		Object element, @SuppressWarnings("unused")
+		int columnIndex) {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITableColorProvider#getForeground(java.lang.Object,
+		 *      int)
+		 */
+		public Color getForeground(@SuppressWarnings("unused")
+		Object element, @SuppressWarnings("unused")
+		int columnIndex) {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// TODO Auto-generated method stub
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(@SuppressWarnings("unused")
+		Object element, @SuppressWarnings("unused")
+		String property) {
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(ILabelProviderListener listener) {
+			listeners.add(listener);
+		} // addListener
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(ILabelProviderListener listener) {
+			listeners.remove(listener);
+		} // removeListener
+
+	} // RelativeValueViewLabelProvider
+
+	/**
+	 * This class implements the sorting of the RelativeValue View viewer
+	 */
+	public class RelativeValueViewSorter extends ViewerSorter {
+		private static final int ASCENDING = 0;
+
+		private static final int DESCENDING = 1;
+
+		private int column = -1;
+
+		private int direction = ASCENDING;
+
+		/**
+		 * @param column
+		 *            the column to sort
+		 */
+		public void doSort(int column) {
+			direction = this.column == column ? 1 - direction : ASCENDING;
+			this.column = column;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		@Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			int rc = super.compare(viewer, e1, e2);
+			if (direction == DESCENDING) {
+				rc = -rc;
+			}
+			return rc;
+		} // compare
+
+	} // RelativeValueViewSorter
+} // RelativeValueViewExample
diff --git a/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/ViewExample1.java b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/ViewExample1.java
new file mode 100644
index 0000000..5626e0f
--- /dev/null
+++ b/org.eclipse.stem.sample/src/org/eclipse/stem/sample/adaption/ViewExample1.java
@@ -0,0 +1,436 @@
+// ViewExample1.java
+package org.eclipse.stem.sample.adaption;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is an example of how to run GUI code in Eclipse and monitor the
+ * "selected" simulation, and how to extract the canonical graph from the
+ * selected simulation and then extract data from it.
+ * <p>
+ * It creats an Eclipse "View" called "View Example1" that simply "dumps" the
+ * latitude and longitude data extracted from the canonical graph to the view's
+ * window. The example is simple, but it helps to understand how a JFace
+ * "Viewer" (not the same as an Eclipse "View") works with content and label
+ * providers.
+ * <p>
+ * There are three classes defined in this example. The first is the parent
+ * class that is a <code>ViewPart</code> and implements what is seen in the
+ * view's window in Eclipse. It contains a JFace <code>ListViewer</code> which
+ * basically maintains a list of Objects and creates a display that prints a
+ * descriptive text string for each one. The method
+ * <code>createPartControl</code> is the code that initializes the SWT
+ * graphics for the display of the view. It is passed an SWT
+ * <code>Composite</code> instance called <code>parent</code> that is used
+ * to "contain" the SWT/JFace elements of the view's that make up the display in
+ * the view. The method does three things, it first creates the
+ * <code>ListViewer</code> instance, giving the parent as an argument to the
+ * constructer (this makes it part of the display), it then creates and passes
+ * to the <code>ListViewer</code> the "Content" and "Label" providers it
+ * needs. The Content and Label providers are the other two classes in this
+ * example.
+ * <p>
+ * The content provider class is {@link ViewExample1ContentProvider}, while not
+ * complex, it may not be obvious what's it's doing. It's job is to maintain the
+ * contents of the <code>ListViewer</code>'s internal list of things to
+ * display. It performs the "Controler" job in an "MVC" architecture. In our
+ * example, the content provider is an {@link ISelectionListener} which means it
+ * has a <code>selectionChanged</code> method. The idea behind the method is
+ * that it is called whenever the user "selects" something in the Eclipse
+ * interface. This doesn't happen automatically, an instance of the class must
+ * be registered with the Eclipse "selection service" that serves as a central
+ * dispatcher for selections. This registration is done in the
+ * <code>createPartControl</code> method of the parent class. When something
+ * is selected and the method is called, it must filter out the selections and
+ * ignore those that are not instances of {@link ISimulation}. When it does
+ * find a simulation instance, it removes the current contents of the list
+ * maintained by the <code>ListViewer</code> and adds the newly selected
+ * instances. It then tells the viewer to redraw itself.
+ * <p>
+ * The label provider class is {@link ViewExample1LabelProvider} and is the
+ * easiest to understand, its is used by the <code>ListViewer</code> to
+ * generate a text string for any of the <code>Objects</code> (i.e.,
+ * <code>ISimulation</code> instances) it contains. The method
+ * {@link ViewExample1LabelProvider#getText(Object)} does this and in this
+ * example does the work to extract the latitude and longitude data from the
+ * canonical graph used in the simulation. Then it just returns that data as a
+ * (long) string to be displayed.
+ * 
+ * To see the example in action, you need to:
+ * <ol>
+ * <li> Run STEM</li>
+ * <li> Open the "View Example 1" view.
+ * "Window->Show&nbsp;View->Other->STEM->View&nbsp;Example&nbsp;1"</li>
+ * <li> Open the "Active Simulations" view.
+ * "Window->Show&nbsp;View->Active&nbsp;Simulations"</li>.
+ * 
+ * <li> Go to the "Scenarios" view. It shows the STEM Scenarios that are plugged
+ * into STEM. </li>
+ * <li> Expand "Test->Disease&nbsp;Models->Standard" and you'll see disease
+ * modeling scenarios that are plugged into STEM. </li>
+ * <li> Double-click on a scenario in the list (e.g., "SEIR 1 x 1") it will
+ * begin simulation and an entry will appear in the "Active Simulations" view.
+ * </li>
+ * <li> Single click on the entry in the Active Simulations view. This will
+ * select that simulation and the latitude/longitude data for that scenario will
+ * appear in the View Example 1 view as a single (long) string. </li>
+ * </ol>
+ * If you double-click on another plugged-in Scenario so that two entries are
+ * displayed in the Active Simulations view and the you select both, you'll see
+ * two entries in the View Example 1 view, one for each of the selected
+ * simulations.
+ * 
+ */
+public class ViewExample1 extends ViewPart {
+
+	/**
+	 * The identifier of the View Example1 View. Nobody uses this right now, but
+	 * it would be useful if we wanted to programatically add this view to a
+	 * perspective.
+	 */
+	public static final String ID_VIEW_EXAMPLE1_VIEW = "org.eclipse.stem.sample.adapters.viewexample1";
+
+	/**
+	 * This is the ListViewer that creates the display that will show up in the
+	 * view's window. It contains a list of Objects, which in this example's
+	 * case will be instances of ISimulation.
+	 */
+	protected ListViewer lv = null;
+
+	/**
+	 * This method is called when the view is created and it has the
+	 * responsibility for doing all of the initialization. It creates the
+	 * ListViewer and instances of the ContentProvider and LabelProvider for the
+	 * viewer. It also gets a reference to the selection service and registers
+	 * the content provider so it will be notified when something is selected.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		// Create the content provider
+		ViewExample1ContentProvider contentProvider = new ViewExample1ContentProvider();
+		// Create the ListViewer
+		lv = new ListViewer(parent);
+
+		// Let the ListViewer know who its content and label providers are
+		lv.setContentProvider(contentProvider);
+		lv.setLabelProvider(new ViewExample1LabelProvider());
+
+		// This call tells the viewer's content provider where it should get the
+		// source of its content. In this case it is the selection service.
+		lv.setInput(getSite().getWorkbenchWindow().getSelectionService());
+
+		// We also want to be able to have a user select a simluation from our
+		// view and have that be seen by others. So we register the ListViewer
+		// instance as the view's selection provider. When you click on the view
+		// in the interface it finds the underlying Object (i.e., ISimulation)
+		// you selected and passes it to the selection service.
+		getSite().setSelectionProvider(lv);
+
+	} // createPartControl
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+	/**
+	 * This class is the content provider for the view. It is also a selection
+	 * listener and uses the selection service as the source of its input. It
+	 * looks for selected ISimulation instances and updates the list in the
+	 * view's ListViewer instance with the current selection.
+	 */
+	public class ViewExample1ContentProvider implements
+			IStructuredContentProvider, ISelectionListener {
+
+		// We remember the ListViewer that we're providing content for because
+		// we need to manipulate its list in the method selectionChanged.
+		private ListViewer viewer = null;
+
+		// These are the simulations we added to the ListViewer, we remember
+		// these so we can remove them when a different set of simulations is
+		// selected.
+		private List<ISimulation> selectedSimulations = null;
+
+		/**
+		 * This is used by the ListViewer to get the initial list of ISimulation
+		 * instances.
+		 * 
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(@SuppressWarnings("unused")
+		Object inputElement) {
+			Object[] retValue = new Object[] {};
+
+			// Anything yet?
+			if (selectedSimulations != null) {
+				// Yes
+				retValue = selectedSimulations.toArray();
+			}
+			return retValue;
+		} // getElements
+
+		/**
+		 * This is called when the view is closed, we could remove ourselves as
+		 * a selection service listener, but this is really for cleaning up SWT
+		 * things. The method inputChanged will be called before dispose when
+		 * the view is closed, we remove ourselves from the selection service
+		 * there.
+		 * 
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing to do
+		} // dispose
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			// We remember the ListViewer we're providing content for because
+			// we'll have to change the list of things it contains in the
+			// selectionChanged method.
+			this.viewer = (ListViewer) viewer;
+
+			// Were we previously getting input from a different service?
+			if (oldInput != null) {
+				// Yes
+				// Not any more.
+				final ISelectionService oldSS = (ISelectionService) oldInput;
+				oldSS.removePostSelectionListener(this);
+			}
+
+			// Is there some new input we should register with?
+			if (newInput != null) {
+				// Yes
+				// Register us with the new service. Since there should only
+				// really be one selection service in Eclipse, this would only
+				// happen once, however, the code can handle a change if needed.
+				final ISelectionService ss = (ISelectionService) newInput;
+				ss.addPostSelectionListener(this);
+			}
+
+		} // inputChanged
+
+		/**
+		 * This method is called whenever ANYTHING is selected in the Eclipse
+		 * workbench. It's job is to filter out selections of ISimulation
+		 * instances and update the list in the ListViewer.
+		 * 
+		 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+		 *      org.eclipse.jface.viewers.ISelection)
+		 */
+		public void selectionChanged(final IWorkbenchPart part, final ISelection selection) {
+
+			// Is this selection changed event coming from our view?
+			if (part != ViewExample1.this) {
+				// No
+				// This will hold the new simulations that have been selected
+				final List<ISimulation> temp = new ArrayList<ISimulation>();
+
+				// Is it a structured selection?
+				if (selection instanceof IStructuredSelection) {
+					// Yes
+					final List list = ((IStructuredSelection) selection)
+							.toList();
+
+					// Go through everything in the list of things that were
+					// selected and pick out the ones that are ISimulations.
+					for (final Iterator selectionIter = list.iterator(); selectionIter
+							.hasNext();) {
+						final Object obj = selectionIter.next();
+						if (obj instanceof ISimulation) {
+							temp.add((ISimulation) obj);
+						}
+					} // for each selected item
+				} // if structured selection
+
+				// Did we find any new simulations that were selected?
+				if (temp.size() > 0) {
+					// Yes
+					// Tell the ListViewer not to redraw while we're changing
+					// its list.
+					viewer.getList().setRedraw(false);
+					try {
+						// Do we have any old selections we should remove?
+						if (selectedSimulations != null) {
+							// Yes
+							viewer.remove(selectedSimulations.toArray());
+						}
+						// Add the new selections to the ListViewer's list. It
+						// will use the label provider to get a text string for
+						// each one.
+						viewer.add(temp.toArray());
+
+						// Remember what we added this time so we can remove it
+						// next selection.
+						selectedSimulations = temp;
+					} // try
+					finally {
+						// The ListViewer should update itself now.
+						viewer.getList().setRedraw(true);
+					}
+				} // if any new simulations selected
+			} // if selection changed event coming from our view?
+		} // selectionChanged
+
+	} // ViewExample1ContentProvider
+
+	/**
+	 * This class is the label provider for the view. It is used by the
+	 * ListViewer to convert ISimulation instances to text strings.
+	 */
+	public class ViewExample1LabelProvider implements ILabelProvider {
+
+		/**
+		 * This is called by the ListViewer for each Object in its list to
+		 * generate a text string that represents that Object. This
+		 * implementation digs into the simulation to get the scenario and then
+		 * from that it obtains the canonical graph. It then goes through the
+		 * nodes of the graph and using a LatLongProviderAdapterFactory creates
+		 * a LatLongProvider for each node that can return the latitude and
+		 * longitude data of the node. That data is just turned into a string
+		 * and returned as the textual representation of the simulation.
+		 * 
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			final StringBuilder sb = new StringBuilder();
+
+			// Extract the scenario and then the canonical graph
+			final ISimulation simulation = (ISimulation) element;
+			final Scenario scenario = simulation.getScenario();
+			final Graph canonicalGraph = scenario.getCanonicalGraph();
+
+			// Get the nodes from the graph and iterate through them. Note that
+			// the getNodes call returns a Map instance where the keys are the
+			// URI's of the Node instances. We get the values of the map to
+			// interate through the nodes.
+			for (final Iterator nodeIter = canonicalGraph.getNodes().values()
+					.iterator(); nodeIter.hasNext();) {
+				final Node node = (Node) nodeIter.next();
+
+				// We'd like to have access to lat/long data of the node if
+				// there is any, to do that we use a factory to create an
+				// adapter that knows about the inner details of nodes (it
+				// really knows about all Identifiables) and implements the
+				// LatLongProvider interface.
+				final LatLongProvider latLongProvider = (LatLongProvider) LatLongProviderAdapterFactory.INSTANCE
+						.adapt(node, LatLongProvider.class);
+
+				// The node may or may not have lat/long data associated with
+				// it, if it doesn't the list that's returned will be empty.
+				final LatLong latLong = latLongProvider.getLatLong();
+
+				// Now we just go through each segment and create a string.
+				for (Segment segment : latLong.getSegments()) {
+					sb.append(Example1.createStringOfLatLongData(segment));
+					sb.append("///");
+				} // for
+			} // for
+
+			// Now if we didn't find any lat/long data, we just return a simple
+			// response. This will appear in the view instead of the data.
+			String retValue = sb.toString();
+			retValue = retValue.length() == 0 ? "No Lat/Long Data" : retValue;
+
+			return retValue;
+		} // getText
+
+		/**
+		 * We don't have any images associated with simulations, but if we did
+		 * we'd return them here. Returning null just tells the caller that
+		 * there are no images.
+		 * 
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused")
+		Object element) {
+			return null;
+		} // getImage
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(@SuppressWarnings("unused")
+		ILabelProviderListener listener) {
+			// nothing
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// nothing
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(@SuppressWarnings("unused")
+		Object element, @SuppressWarnings("unused")
+		String property) {
+			return false;
+		}
+
+		/**
+		 * Required by the interface, but not used by us.
+		 * 
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(@SuppressWarnings("unused")
+		ILabelProviderListener listener) {
+			// nothing
+		}
+	} // ViewExample1LabelProvider
+
+} // ViewExample1
diff --git a/org.eclipse.stem.sequencers/.checkstyle b/org.eclipse.stem.sequencers/.checkstyle
new file mode 100644
index 0000000..2e8139b
--- /dev/null
+++ b/org.eclipse.stem.sequencers/.checkstyle
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <fileset name="all" enabled="true" check-config-name="Sun Checks" local="false">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/org.eclipse.stem.sequencers/.classpath b/org.eclipse.stem.sequencers/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.sequencers/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.sequencers/.project b/org.eclipse.stem.sequencers/.project
new file mode 100644
index 0000000..3c11123
--- /dev/null
+++ b/org.eclipse.stem.sequencers/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.sequencers</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.sequencers/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.sequencers/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0d97933
--- /dev/null
+++ b/org.eclipse.stem.sequencers/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:44:19 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=ignore
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.sequencers/META-INF/MANIFEST.MF b/org.eclipse.stem.sequencers/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c935cc9
--- /dev/null
+++ b/org.eclipse.stem.sequencers/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.sequencers; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.sequencers/build.properties b/org.eclipse.stem.sequencers/build.properties
new file mode 100644
index 0000000..a21e66a
--- /dev/null
+++ b/org.eclipse.stem.sequencers/build.properties
@@ -0,0 +1,16 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html,\
+               resources/
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.sequencers/epl-v10.html b/org.eclipse.stem.sequencers/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.sequencers/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.sequencers/icons/full/obj16/SequencerModelFile.gif b/org.eclipse.stem.sequencers/icons/full/obj16/SequencerModelFile.gif
new file mode 100644
index 0000000..3097cf4
--- /dev/null
+++ b/org.eclipse.stem.sequencers/icons/full/obj16/SequencerModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.sequencers/icons/full/obj16/SequentialSequencer.gif b/org.eclipse.stem.sequencers/icons/full/obj16/SequentialSequencer.gif
new file mode 100644
index 0000000..35ef84e
--- /dev/null
+++ b/org.eclipse.stem.sequencers/icons/full/obj16/SequentialSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.sequencers/icons/full/wizban/NewSequencer.gif b/org.eclipse.stem.sequencers/icons/full/wizban/NewSequencer.gif
new file mode 100644
index 0000000..f9e80f0
--- /dev/null
+++ b/org.eclipse.stem.sequencers/icons/full/wizban/NewSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.sequencers/notice.html b/org.eclipse.stem.sequencers/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.sequencers/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.sequencers/plugin.properties b/org.eclipse.stem.sequencers/plugin.properties
new file mode 100644
index 0000000..b85ad18
--- /dev/null
+++ b/org.eclipse.stem.sequencers/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.sequencers/plugin.xml b/org.eclipse.stem.sequencers/plugin.xml
new file mode 100644
index 0000000..be5de8b
--- /dev/null
+++ b/org.eclipse.stem.sequencers/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+ <extension
+        point="org.eclipse.stem.core.sequencer">
+     <stem_category
+           id="org.eclipse.stem.sequencers.category.stem"
+           name="%_UI_Common_STEM"
+           parent_id="/"/>
+     <stem_category
+           id="org.eclipse.stem.sequencers.category.sequential"
+           name="%_UI_Sequential_Sequencer"
+           parent_id="org.eclipse.stem.sequencers.category.stem"/>
+     <dublin_core
+           category_id="org.eclipse.stem.sequencers.category.sequential"
+           creator="%dc_creator_daford"
+           format="http:///org/eclipse/stem/core/sequencer.ecore"
+           identifier="platform:/plugin/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer"
+           publisher="%dc_pub"
+           title="%dc_seqseq2000_title"
+           valid="start=2000-01-01; end=2000-01-10"/>
+  </extension>
+ 
+</plugin>
diff --git a/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer b/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer
new file mode 100644
index 0000000..917907f
--- /dev/null
+++ b/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="ASCII"?>
+<org.eclipse.stem.sequencer:SequentialSequencer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.stem.sequencer="http:///org/eclipse/stem/core/sequencer.ecore" uRI="platform:/plugin/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer" typeURI="stemtype://org.eclipse.stem/identifiable0">
+  <dublinCore title="Sequential Sequencer Jun. 01, 2006 to Jun. 10, 2006 (Cycle: 1 Day)" identifier="platform:/plugin/org.eclipse.stem.sequencers/resources/sequencers/2000-01-01_2000-12-31_sequentialsequencer.sequencer" description="" creator="daford" format="http:///org/eclipse/stem/sequencer.ecore" valid="start=2000-01-01; end=2000-12-31"/>
+  <startTime time="2000-01-01T00:00:00.00-0500"/>
+</org.eclipse.stem.sequencer:SequentialSequencer>
diff --git a/org.eclipse.stem.sequencers/src/.cvsignore b/org.eclipse.stem.sequencers/src/.cvsignore
new file mode 100644
index 0000000..421376d
--- /dev/null
+++ b/org.eclipse.stem.sequencers/src/.cvsignore
@@ -0,0 +1 @@
+dummy
diff --git a/org.eclipse.stem.solvers.fd/.classpath b/org.eclipse.stem.solvers.fd/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.solvers.fd/.project b/org.eclipse.stem.solvers.fd/.project
new file mode 100644
index 0000000..c7e7c33
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.solvers.fd</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.solvers.fd/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.solvers.fd/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b436fa9
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:56:41 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.solvers.fd/META-INF/MANIFEST.MF b/org.eclipse.stem.solvers.fd/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6f62faa
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.solvers.fd;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.emf.ecore;visibility:=reexport,

+ org.eclipse.stem.core,

+ org.eclipse.emf.ecore.edit;bundle-version="2.4.1",

+ org.eclipse.stem.diseasemodels,

+ org.eclipse.stem.ui

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.stem.solvers.fd,

+ org.eclipse.stem.solvers.fd.impl,

+ org.eclipse.stem.solvers.fd.provider,

+ org.eclipse.stem.solvers.fd.util

diff --git a/org.eclipse.stem.solvers.fd/build.properties b/org.eclipse.stem.solvers.fd/build.properties
new file mode 100644
index 0000000..b922ae8
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/build.properties
@@ -0,0 +1,15 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               model/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               icons/

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.solvers.fd/icons/full/obj16/FiniteDifference.gif b/org.eclipse.stem.solvers.fd/icons/full/obj16/FiniteDifference.gif
new file mode 100644
index 0000000..9250fec
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/icons/full/obj16/FiniteDifference.gif
Binary files differ
diff --git a/org.eclipse.stem.solvers.fd/model/fd.ecore b/org.eclipse.stem.solvers.fd/model/fd.ecore
new file mode 100644
index 0000000..edabd60
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/model/fd.ecore
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="fd"

+    nsURI="http:///org/eclipse/stem/solvers/fd" nsPrefix="org.eclipse.stem.solvers.fd">

+  <eClassifiers xsi:type="ecore:EClass" name="FiniteDifference" eSuperTypes="../../org.eclipse.stem.core/model/solver.ecore#//Solver"/>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.solvers.fd/model/fd.genmodel b/org.eclipse.stem.solvers.fd/model/fd.genmodel
new file mode 100644
index 0000000..2a1079e
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/model/fd.genmodel
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.solvers.fd/src"

+    editDirectory="/org.eclipse.stem.solvers.fd/src" editorDirectory="/org.eclipse.stem.ui.solvers.fd/src"

+    modelPluginID="org.eclipse.stem.solvers.fd" modelName="Fd" testsDirectory="/org.eclipse.stem.tests.solvers.fd/src"

+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//modifier ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.core/model/core.genmodel#//solver platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">

+  <foreignModel>fd.ecore</foreignModel>

+  <genPackages prefix="Fd" basePackage="org.eclipse.stem.solvers" disposableProviderFactory="true"

+      ecorePackage="fd.ecore#/">

+    <genClasses ecoreClass="fd.ecore#//FiniteDifference"/>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.solvers.fd/plugin.properties b/org.eclipse.stem.solvers.fd/plugin.properties
new file mode 100644
index 0000000..7fb2911
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.solvers.fd/plugin.xml b/org.eclipse.stem.solvers.fd/plugin.xml
new file mode 100644
index 0000000..8c6aa26
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/plugin.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+    <extension

+         point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <factory

+            class="org.eclipse.stem.solvers.fd.provider.FdItemProviderAdapterFactory"

+            uri="http:///org/eclipse/stem/solvers/fd"

+            supportedTypes=

+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+               org.eclipse.emf.edit.provider.ITreeItemContentProvider

+               org.eclipse.emf.edit.provider.IItemLabelProvider

+               org.eclipse.emf.edit.provider.IItemPropertySource">

+      </factory>

+   </extension>

+   <extension

+         point="org.eclipse.stem.core.solver">

+      <classdef

+            class="org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl">

+      </classdef>

+      <dublin_core

+            category_id="/"

+            identifier="org.eclipse.stem.solvers.fd.dublin_core1"

+            title="org.eclipse.stem.solvers.fd.dublin_core1">

+      </dublin_core>

+   </extension>

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <package

+            uri="http:///org/eclipse/stem/solvers/fd"

+            class="org.eclipse.stem.solvers.fd.FdPackage"

+            genModel="model/fd.genmodel"/>

+   </extension>
+</plugin>

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdFactory.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdFactory.java
new file mode 100644
index 0000000..4dbfbfc
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.solvers.fd;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.fd.FdPackage

+ * @generated

+ */

+public interface FdFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	FdFactory eINSTANCE = org.eclipse.stem.solvers.fd.impl.FdFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Finite Difference</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Finite Difference</em>'.

+	 * @generated

+	 */

+	FiniteDifference createFiniteDifference();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	FdPackage getFdPackage();

+

+} //FdFactory

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdPackage.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdPackage.java
new file mode 100644
index 0000000..77163fb
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FdPackage.java
@@ -0,0 +1,167 @@
+package org.eclipse.stem.solvers.fd;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.stem.core.solver.SolverPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.fd.FdFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface FdPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "fd";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http:///org/eclipse/stem/solvers/fd";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.solvers.fd";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	FdPackage eINSTANCE = org.eclipse.stem.solvers.fd.impl.FdPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl <em>Finite Difference</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl

+	 * @see org.eclipse.stem.solvers.fd.impl.FdPackageImpl#getFiniteDifference()

+	 * @generated

+	 */

+	int FINITE_DIFFERENCE = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int FINITE_DIFFERENCE__URI = SolverPackage.SOLVER__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int FINITE_DIFFERENCE__TYPE_URI = SolverPackage.SOLVER__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int FINITE_DIFFERENCE__DUBLIN_CORE = SolverPackage.SOLVER__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Decorators</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int FINITE_DIFFERENCE__DECORATORS = SolverPackage.SOLVER__DECORATORS;

+

+	/**

+	 * The number of structural features of the '<em>Finite Difference</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int FINITE_DIFFERENCE_FEATURE_COUNT = SolverPackage.SOLVER_FEATURE_COUNT + 0;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.solvers.fd.FiniteDifference <em>Finite Difference</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Finite Difference</em>'.

+	 * @see org.eclipse.stem.solvers.fd.FiniteDifference

+	 * @generated

+	 */

+	EClass getFiniteDifference();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	FdFactory getFdFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl <em>Finite Difference</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl

+		 * @see org.eclipse.stem.solvers.fd.impl.FdPackageImpl#getFiniteDifference()

+		 * @generated

+		 */

+		EClass FINITE_DIFFERENCE = eINSTANCE.getFiniteDifference();

+

+	}

+

+} //FdPackage

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FiniteDifference.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FiniteDifference.java
new file mode 100644
index 0000000..b7b2506
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/FiniteDifference.java
@@ -0,0 +1,30 @@
+package org.eclipse.stem.solvers.fd;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.stem.core.solver.Solver;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Finite Difference</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ *

+ * @see org.eclipse.stem.solvers.fd.FdPackage#getFiniteDifference()

+ * @model

+ * @generated

+ */

+@SuppressWarnings("all")

+public interface FiniteDifference extends Solver {

+	

+	

+} // FiniteDifference

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdFactoryImpl.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdFactoryImpl.java
new file mode 100644
index 0000000..66545a2
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.solvers.fd.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.stem.solvers.fd.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FdFactoryImpl extends EFactoryImpl implements FdFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static FdFactory init() {

+		try {

+			FdFactory theFdFactory = (FdFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/solvers/fd"); 

+			if (theFdFactory != null) {

+				return theFdFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new FdFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case FdPackage.FINITE_DIFFERENCE: return createFiniteDifference();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FiniteDifference createFiniteDifference() {

+		FiniteDifferenceImpl finiteDifference = new FiniteDifferenceImpl();

+		return finiteDifference;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdPackage getFdPackage() {

+		return (FdPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static FdPackage getPackage() {

+		return FdPackage.eINSTANCE;

+	}

+

+} //FdFactoryImpl

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdJob.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdJob.java
new file mode 100644
index 0000000..ced246b
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdJob.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.solvers.fd.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A job for the finite difference solver
+ *
+ */
+public class FdJob extends Job {
+	
+	public FdJob(String n, short thread, FiniteDifferenceImpl s) {
+		super(n);
+		this.threadnum = thread;
+		this.solver = s;
+	}
+
+	protected double progress;
+	protected double t;
+	protected FiniteDifferenceImpl solver;
+	
+	protected STEMTime time;
+	long timeDelta;
+	int cycle;
+	short threadnum;
+	
+	public double getProgress() {
+		return this.progress;
+	}
+	public void setProgress(double p) {
+		this.progress = p;
+	}
+	protected IStatus run(final IProgressMonitor monitor) {
+		solver._step(time,timeDelta,cycle,threadnum);
+		
+		return Status.OK_STATUS;
+	}
+}
diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdPackageImpl.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdPackageImpl.java
new file mode 100644
index 0000000..e0ac220
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FdPackageImpl.java
@@ -0,0 +1,202 @@
+package org.eclipse.stem.solvers.fd.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.stem.core.common.CommonPackage;

+import org.eclipse.stem.core.graph.GraphPackage;

+import org.eclipse.stem.core.model.ModelPackage;

+import org.eclipse.stem.core.modifier.ModifierPackage;

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+import org.eclipse.stem.core.sequencer.SequencerPackage;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+import org.eclipse.stem.solvers.fd.FdFactory;

+import org.eclipse.stem.solvers.fd.FdPackage;

+import org.eclipse.stem.solvers.fd.FiniteDifference;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FdPackageImpl extends EPackageImpl implements FdPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass finiteDifferenceEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.stem.solvers.fd.FdPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private FdPackageImpl() {

+		super(eNS_URI, FdFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this

+	 * model, and for any others upon which it depends.  Simple

+	 * dependencies are satisfied by calling this method on all

+	 * dependent packages before doing anything else.  This method drives

+	 * initialization for interdependent packages directly, in parallel

+	 * with this package, itself.

+	 * <p>Of this package and its interdependencies, all packages which

+	 * have not yet been registered by their URI values are first created

+	 * and registered.  The packages are then initialized in two steps:

+	 * meta-model objects for all of the packages are created before any

+	 * are initialized, since one package's meta-model objects may refer to

+	 * those of another.

+	 * <p>Invocation of this method will not affect any packages that have

+	 * already been initialized.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static FdPackage init() {

+		if (isInited) return (FdPackage)EPackage.Registry.INSTANCE.getEPackage(FdPackage.eNS_URI);

+

+		// Obtain or create and register package

+		FdPackageImpl theFdPackage = (FdPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof FdPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new FdPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		CommonPackage.eINSTANCE.eClass();

+		GraphPackage.eINSTANCE.eClass();

+		ModelPackage.eINSTANCE.eClass();

+		ModifierPackage.eINSTANCE.eClass();

+		ScenarioPackage.eINSTANCE.eClass();

+		SequencerPackage.eINSTANCE.eClass();

+		SolverPackage.eINSTANCE.eClass();

+

+		// Create package meta-data objects

+		theFdPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theFdPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theFdPackage.freeze();

+

+		return theFdPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getFiniteDifference() {

+		return finiteDifferenceEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdFactory getFdFactory() {

+		return (FdFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		finiteDifferenceEClass = createEClass(FINITE_DIFFERENCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		SolverPackage theSolverPackage = (SolverPackage)EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		finiteDifferenceEClass.getESuperTypes().add(theSolverPackage.getSolver());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(finiteDifferenceEClass, FiniteDifference.class, "FiniteDifference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //FdPackageImpl

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FiniteDifferenceImpl.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FiniteDifferenceImpl.java
new file mode 100644
index 0000000..e6d1cc3
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/impl/FiniteDifferenceImpl.java
@@ -0,0 +1,290 @@
+package org.eclipse.stem.solvers.fd.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.Iterator;

+

+import org.eclipse.core.runtime.Preferences;

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.core.solver.impl.SolverImpl;

+import org.eclipse.stem.core.trigger.Trigger;

+

+import org.eclipse.stem.solvers.fd.FdPackage;

+import org.eclipse.stem.solvers.fd.FiniteDifference;

+import org.eclipse.stem.ui.Activator;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Finite Difference</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * </p>

+ *

+ * @generated

+ */

+public class FiniteDifferenceImpl extends SolverImpl implements FiniteDifference {

+	

+	// The worker jobs

+	private FdJob [] jobs;

+	// Number of threads

+	private short num_threads;

+	

+	private final static int MAX_PROGRESS_REPORTS = 5;

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public FiniteDifferenceImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	@Override

+	public boolean step(STEMTime time, long timeDelta, int cycle) {

+		

+		if(!this.isInitialized()) 

+			initialize(time);

+		Activator act = org.eclipse.stem.ui.Activator.getDefault();

+		if(act != null) {

+			final Preferences preferences = act.getPluginPreferences();

+			num_threads = (short)preferences.getInt(org.eclipse.stem.ui.preferences.PreferenceConstants.SIMULATION_THREADS);

+		} else num_threads = 2; // Just so we can run inside junit test

+		

+		// Find triggers and make sure they are invoked

+		for(Decorator decorator:this.getDecorators()) {

+			if(decorator instanceof Trigger) {

+				decorator.updateLabels(time, timeDelta, cycle);

+			}

+		}		

+		

+		// First initialize the Y and temp label values from the current

+		// label values.

+		

+		for(Decorator decorator:this.getDecorators()) {

+			EList<DynamicLabel>allLabels = decorator.getLabelsToUpdate();

+			for (final Iterator<DynamicLabel> currentStateLabelIter = allLabels

+					.iterator(); currentStateLabelIter.hasNext();) {

+				if(decorator instanceof IntegrationDecorator) {

+					// It's a standard disease model with a standard disease model label

+					final IntegrationLabel iLabel = (IntegrationLabel) currentStateLabelIter.next();

+					((IntegrationLabelValue)iLabel.getProbeValue()).set((IntegrationLabelValue)iLabel.getCurrentValue());

+					((IntegrationLabelValue)iLabel.getTempValue()).set((IntegrationLabelValue)iLabel.getCurrentValue());

+				} else currentStateLabelIter.next();

+			}

+		}

+			

+		if(jobs == null || jobs.length != num_threads) {

+			// Initialize the jobs if not done yet or of the number of threads changes

+			jobs = new FdJob[num_threads];

+	

+			for(int i=0;i<num_threads;++i) {

+				final short threadnum = (short)i;

+				jobs[i] = new FdJob("Finite Difference Worker "+i, threadnum, this);

+			} // For each job

+		} // If not initialized

+

+		// Initialize

+	

+		for(FdJob j:jobs) {

+			j.cycle = cycle;

+			j.time = time;

+			j.timeDelta = timeDelta;

+		}

+		

+		// Schedule. Jobs can be rescheduled after finished

+		for(FdJob j:jobs) 

+			j.schedule();

+		

+		// Wait until all jobs completed

+		for(FdJob j : jobs) {

+			try {

+				j.join();

+			} catch(InterruptedException ie) {

+				Activator.logError(ie.getMessage(), ie);

+			}

+		}

+		

+		// Set the common time and step size here and validate everything is right

+		//double minStep = Double.MAX_VALUE;

+		//double currentT = jobs[0].t;

+		//for(SimJob j : jobs) {

+			// The jobs have calculated new step sizes after they finished. Pick the

+			// smallest one for the next cycle

+		//	if(j.h < minStep) minStep = j.h;

+		//	if(j.t != currentT) Activator.logError("Error, one thread was in misstep with other threads, its time was "+j.t+" versus "+currentT, new Exception());

+		//}

+		

+		//this.setCurrentX(currentT);

+		//this.setStepSize(minStep); // smallest one from above.

+		return true;

+	}

+	

+	/**

+	 * _step Do the step for a single thread

+	 * 

+	 * @param time

+	 * @param timeDelta

+	 * @param cycle

+	 * @param threadnum

+	 */

+	protected void _step(STEMTime time, long timeDelta, int cycle, short threadnum) {

+		// Now give each decorator a chance to update its dynamic

+		// labels in the canonical graph, but only if it is enabled. A

+		// Decorator might not be enabled if it is the action of a Trigger

+		// and the Predicate of the trigger is false.

+		EList<IntegrationDecorator> iDecorators = new BasicEList<IntegrationDecorator>();

+		for (final Iterator<Decorator> decoratorIter = this

+				.getDecorators().iterator(); decoratorIter.hasNext();) {

+			final Decorator decorator = decoratorIter.next();

+			// Is the decorator enabled?

+			if (decorator.isEnabled() && decorator instanceof IntegrationDecorator) iDecorators.add((IntegrationDecorator)decorator);

+		}

+		

+		for(IntegrationDecorator imodel:iDecorators)

+			imodel.calculateDelta(time, timeDelta, ((Decorator)imodel).getLabelsToUpdate(threadnum, num_threads));

+		for(IntegrationDecorator imodel:iDecorators)

+			imodel.applyExternalDeltas(time, timeDelta, ((Decorator)imodel).getLabelsToUpdate(threadnum, num_threads));

+		

+		for(IntegrationDecorator imodel:iDecorators)

+			updateStandardDiseaseModelLabels((Decorator)imodel, time, timeDelta, cycle, threadnum);

+				

+	}

+	

+	

+	protected void updateStandardDiseaseModelLabels(Decorator model, STEMTime time, long timeDelta, int cycle, short threadnum) {

+		

+		EList<DynamicLabel> myLabels = model.getLabelsToUpdate(threadnum, num_threads);

+		

+		IntegrationDecorator imodel = (IntegrationDecorator)model;

+		

+		int numLabels = myLabels.size();

+		int setProgressEveryNthNode = num_threads * numLabels/(MAX_PROGRESS_REPORTS);

+		if(setProgressEveryNthNode == 0) setProgressEveryNthNode = 1;

+		int n=0;

+		// Initialize the next value from the current value and add the delta

+		for (final Iterator<DynamicLabel> currentStateLabelIter = myLabels

+				.iterator(); currentStateLabelIter.hasNext();) {

+			final IntegrationLabel iLabel = (IntegrationLabel) currentStateLabelIter.next();

+			IntegrationLabelValue nextState = (IntegrationLabelValue)iLabel.getNextValue();

+			

+			IntegrationLabelValue delta = (IntegrationLabelValue)iLabel.getDeltaValue();

+			// For finite difference, we need to make sure we don't

+			// move too many people from one state to another

+			delta.adjustDelta((IntegrationLabelValue)iLabel.getCurrentValue());

+			

+			// Set delta first. This will copy non-additive values like incidence etc.

+			nextState.set(delta);

+			

+			// Add the original value

+			nextState.add((IntegrationLabelValue)iLabel.getCurrentValue());

+

+			// Do any model specific work for instance add noise

+			imodel.doModelSpecificAdjustments((LabelValue)nextState);

+			

+			// The next value is valid now.

+			iLabel.setNextValueValid(true);

+			// Now add in the population so we can compute the reciprocal

+			// next cycle.

+//			addToTotalPopulationCount(nextState.getPopulationCount());

+		

+			double progress = (double)n/(double)numLabels;

+			jobs[threadnum].setProgress(progress);

+			if(n%setProgressEveryNthNode==0) {

+				// Get the progress for all threads

+				for(int i=0;i<num_threads;++i) if(i!=threadnum && jobs[i] != null) progress+=jobs[i].getProgress();

+				progress /= num_threads;

+				model.setProgress(progress);

+			}

+			++n;

+			

+		}

+		// Done

+//		this.setProgress(1.0);

+	}

+	

+	/**

+	 * initialize before simulation begins. Rewind/forward any population model

+	 * values to the start time of the 

+	 * @param time

+	 */

+	private void initialize(STEMTime time) {

+		EList<Decorator> redoList = new BasicEList<Decorator>();

+		

+		boolean redo = false;

+		for(Decorator d:this.getDecorators()) {

+			if(d instanceof IntegrationDecorator) {

+				EList<DynamicLabel> labels = d.getLabelsToUpdate();

+				for(DynamicLabel l:labels) {

+					if(l instanceof IntegrationLabel) {

+						IntegrationLabel il = (IntegrationLabel)l;

+						il.reset(time);

+						if(((SimpleDataExchangeLabelValue)il.getDeltaValue()).getAdditions() > 0.0 ||

+								((SimpleDataExchangeLabelValue)il.getDeltaValue()).getSubstractions() > 0.0)

+							redo = true;

+					}

+				}

+			}

+			if(!redo)redoList.add(d);

+		}

+		// Fix decorators with unapplied deltas

+		if(redo) {

+			for(Decorator d:redoList) {

+				if(d instanceof IntegrationDecorator) {

+					EList<DynamicLabel> labels = d.getLabelsToUpdate();

+					for(DynamicLabel l:labels) {

+						if(l instanceof IntegrationLabel) {

+							IntegrationLabel il = (IntegrationLabel)l;

+							il.reset(time);

+						}

+					}

+				}

+			}

+		}

+		this.setInitialized(true);

+	}

+	/**

+	 * Reset the solver

+	 * @generated NOT

+	 */

+	@Override

+	public void reset() {

+		this.setInitialized(false);

+	}

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return FdPackage.Literals.FINITE_DIFFERENCE;

+	}

+

+} //FiniteDifferenceImpl

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdEditPlugin.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdEditPlugin.java
new file mode 100644
index 0000000..57587d5
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdEditPlugin.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.solvers.fd.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+

+/**

+ * This is the central singleton for the Fd edit plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class FdEditPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final FdEditPlugin INSTANCE = new FdEditPlugin();

+

+	/**

+	 * 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 FdEditPlugin() {

+		super

+		  (new ResourceLocator [] {

+		     CoreEditPlugin.INSTANCE,

+		     EcoreEditPlugin.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/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdItemProviderAdapterFactory.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdItemProviderAdapterFactory.java
new file mode 100644
index 0000000..b6cc446
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FdItemProviderAdapterFactory.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.solvers.fd.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.solvers.fd.util.FdAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FdItemProviderAdapterFactory extends FdAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.solvers.fd.FiniteDifference} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected FiniteDifferenceItemProvider finiteDifferenceItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.solvers.fd.FiniteDifference}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createFiniteDifferenceAdapter() {

+		if (finiteDifferenceItemProvider == null) {

+			finiteDifferenceItemProvider = new FiniteDifferenceItemProvider(this);

+		}

+

+		return finiteDifferenceItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (finiteDifferenceItemProvider != null) finiteDifferenceItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FiniteDifferenceItemProvider.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FiniteDifferenceItemProvider.java
new file mode 100644
index 0000000..3121e1a
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/provider/FiniteDifferenceItemProvider.java
@@ -0,0 +1,136 @@
+package org.eclipse.stem.solvers.fd.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProvider;

+

+import org.eclipse.stem.solvers.fd.FiniteDifference;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.solvers.fd.FiniteDifference} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FiniteDifferenceItemProvider

+	extends SolverItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FiniteDifferenceItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This returns FiniteDifference.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/FiniteDifference"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((FiniteDifference)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_FiniteDifference_type") :

+			getString("_UI_FiniteDifference_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return FdEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdAdapterFactory.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdAdapterFactory.java
new file mode 100644
index 0000000..0d4baca
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdAdapterFactory.java
@@ -0,0 +1,188 @@
+package org.eclipse.stem.solvers.fd.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.Solver;

+

+import org.eclipse.stem.solvers.fd.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.fd.FdPackage

+ * @generated

+ */

+public class FdAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static FdPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = FdPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unused") 

+	protected FdSwitch<Adapter> modelSwitch =

+		new FdSwitch<Adapter>() {

+			@Override

+			public Adapter caseFiniteDifference(FiniteDifference object) {

+				return createFiniteDifferenceAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter caseSolver(Solver object) {

+				return createSolverAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.solvers.fd.FiniteDifference <em>Finite Difference</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.solvers.fd.FiniteDifference

+	 * @generated

+	 */

+	public Adapter createFiniteDifferenceAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.solver.Solver <em>Solver</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.solver.Solver

+	 * @generated

+	 */

+	public Adapter createSolverAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //FdAdapterFactory

diff --git a/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdSwitch.java b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdSwitch.java
new file mode 100644
index 0000000..fdef7d5
--- /dev/null
+++ b/org.eclipse.stem.solvers.fd/src/org/eclipse/stem/solvers/fd/util/FdSwitch.java
@@ -0,0 +1,188 @@
+package org.eclipse.stem.solvers.fd.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.Solver;

+

+import org.eclipse.stem.solvers.fd.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.fd.FdPackage

+ * @generated

+ */

+@SuppressWarnings("all")

+public class FdSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static FdPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdSwitch() {

+		if (modelPackage == null) {

+			modelPackage = FdPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case FdPackage.FINITE_DIFFERENCE: {

+				FiniteDifference finiteDifference = (FiniteDifference)theEObject;

+				T1 result = caseFiniteDifference(finiteDifference);

+				if (result == null) result = caseSolver(finiteDifference);

+				if (result == null) result = caseIdentifiable(finiteDifference);

+				if (result == null) result = caseComparable(finiteDifference);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Finite Difference</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Finite Difference</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseFiniteDifference(FiniteDifference object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSolver(Solver object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //FdSwitch

diff --git a/org.eclipse.stem.solvers.rk/.classpath b/org.eclipse.stem.solvers.rk/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.solvers.rk/.project b/org.eclipse.stem.solvers.rk/.project
new file mode 100644
index 0000000..32b6fb1
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.solvers.rk</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.solvers.rk/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.solvers.rk/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9818206
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:55:54 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.solvers.rk/META-INF/MANIFEST.MF b/org.eclipse.stem.solvers.rk/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d504810
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.solvers.rk;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.solvers.rk,

+ org.eclipse.stem.solvers.rk.impl,

+ org.eclipse.stem.solvers.rk.provider,

+ org.eclipse.stem.solvers.rk.util

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.emf.ecore;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;bundle-version="2.4.1",

+ org.eclipse.stem.ui,

+ org.eclipse.stem.diseasemodels

+Bundle-ActivationPolicy: lazy

diff --git a/org.eclipse.stem.solvers.rk/build.properties b/org.eclipse.stem.solvers.rk/build.properties
new file mode 100644
index 0000000..b922ae8
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/build.properties
@@ -0,0 +1,15 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               model/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               icons/

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.solvers.rk/icons/full/obj16/RungeKutta.gif b/org.eclipse.stem.solvers.rk/icons/full/obj16/RungeKutta.gif
new file mode 100644
index 0000000..48e3cf2
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/icons/full/obj16/RungeKutta.gif
Binary files differ
diff --git a/org.eclipse.stem.solvers.rk/model/rk.ecore b/org.eclipse.stem.solvers.rk/model/rk.ecore
new file mode 100644
index 0000000..a168063
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/model/rk.ecore
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="rk"

+    nsURI="http:///org/eclipse/stem/solvers/rk" nsPrefix="org.eclipse.stem.solvers.rk">

+  <eClassifiers xsi:type="ecore:EClass" name="RungeKutta" eSuperTypes="../../org.eclipse.stem.core/model/solver.ecore#//Solver">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="relativeTolerance" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"

+        defaultValueLiteral="1E-9"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.stem.solvers.rk/model/rk.genmodel b/org.eclipse.stem.solvers.rk/model/rk.genmodel
new file mode 100644
index 0000000..2f30c8d
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/model/rk.genmodel
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<genmodel:GenModel xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"

+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.solvers.rk/src"

+    editDirectory="/org.eclipse.stem.solvers.rk/src" editorDirectory="/org.eclipse.stem.ui.solvers.rk/src"

+    modelPluginID="org.eclipse.stem.solvers.rk" modelName="Rk" testsDirectory="/org.eclipse.stem.tests.solvers.rk/src"

+    importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"

+    usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//modifier ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer ../../org.eclipse.stem.core/model/core.genmodel#//solver platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore">

+  <foreignModel>rk.ecore</foreignModel>

+  <genPackages prefix="Rk" basePackage="org.eclipse.stem.solvers" disposableProviderFactory="true"

+      ecorePackage="rk.ecore#/">

+    <genClasses ecoreClass="rk.ecore#//RungeKutta">

+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute rk.ecore#//RungeKutta/relativeTolerance"/>

+    </genClasses>

+  </genPackages>

+</genmodel:GenModel>

diff --git a/org.eclipse.stem.solvers.rk/plugin.properties b/org.eclipse.stem.solvers.rk/plugin.properties
new file mode 100644
index 0000000..7a46bc4
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.solvers.rk/plugin.xml b/org.eclipse.stem.solvers.rk/plugin.xml
new file mode 100644
index 0000000..477ee09
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/plugin.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+

+   <extension point="org.eclipse.emf.ecore.generated_package">

+      <package

+            uri="http:///org/eclipse/stem/solvers/rk"

+            class="org.eclipse.stem.solvers.rk.RkPackage"

+            genModel="model/rk.genmodel"/>

+   </extension>

+   <extension

+         point="org.eclipse.stem.core.solver">

+      <classdef

+            class="org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl">

+      </classdef>

+      <dublin_core

+            category_id="/"

+            identifier="org.eclipse.stem.solvers.rk.dublin_core2"

+            title="org.eclipse.stem.solvers.rk.dublin_core2">

+      </dublin_core>

+   </extension>

+   <extension

+         point="org.eclipse.emf.edit.itemProviderAdapterFactories">

+      <factory

+            class="org.eclipse.stem.solvers.rk.provider.RkItemProviderAdapterFactory"

+            uri="http:///org/eclipse/stem/solvers/rk"

+            supportedTypes=

+              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider

+               org.eclipse.emf.edit.provider.IStructuredItemContentProvider

+               org.eclipse.emf.edit.provider.ITreeItemContentProvider

+               org.eclipse.emf.edit.provider.IItemLabelProvider

+               org.eclipse.emf.edit.provider.IItemPropertySource">

+      </factory>

+   </extension>

+</plugin>

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkFactory.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkFactory.java
new file mode 100644
index 0000000..37fffce
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.solvers.rk;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Factory</b> for the model.

+ * It provides a create method for each non-abstract class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.rk.RkPackage

+ * @generated

+ */

+public interface RkFactory extends EFactory {

+	/**

+	 * The singleton instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	RkFactory eINSTANCE = org.eclipse.stem.solvers.rk.impl.RkFactoryImpl.init();

+

+	/**

+	 * Returns a new object of class '<em>Runge Kutta</em>'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return a new object of class '<em>Runge Kutta</em>'.

+	 * @generated

+	 */

+	RungeKutta createRungeKutta();

+

+	/**

+	 * Returns the package supported by this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the package supported by this factory.

+	 * @generated

+	 */

+	RkPackage getRkPackage();

+

+} //RkFactory

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkPackage.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkPackage.java
new file mode 100644
index 0000000..6b2a8a4
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RkPackage.java
@@ -0,0 +1,196 @@
+package org.eclipse.stem.solvers.rk;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.stem.core.solver.SolverPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Package</b> for the model.

+ * It contains accessors for the meta objects to represent

+ * <ul>

+ *   <li>each class,</li>

+ *   <li>each feature of each class,</li>

+ *   <li>each enum,</li>

+ *   <li>and each data type</li>

+ * </ul>

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.rk.RkFactory

+ * @model kind="package"

+ * @generated

+ */

+public interface RkPackage extends EPackage {

+	/**

+	 * The package name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNAME = "rk";

+

+	/**

+	 * The package namespace URI.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_URI = "http:///org/eclipse/stem/solvers/rk";

+

+	/**

+	 * The package namespace name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	String eNS_PREFIX = "org.eclipse.stem.solvers.rk";

+

+	/**

+	 * The singleton instance of the package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	RkPackage eINSTANCE = org.eclipse.stem.solvers.rk.impl.RkPackageImpl.init();

+

+	/**

+	 * The meta object id for the '{@link org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl <em>Runge Kutta</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl

+	 * @see org.eclipse.stem.solvers.rk.impl.RkPackageImpl#getRungeKutta()

+	 * @generated

+	 */

+	int RUNGE_KUTTA = 0;

+

+	/**

+	 * The feature id for the '<em><b>URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA__URI = SolverPackage.SOLVER__URI;

+

+	/**

+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA__TYPE_URI = SolverPackage.SOLVER__TYPE_URI;

+

+	/**

+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA__DUBLIN_CORE = SolverPackage.SOLVER__DUBLIN_CORE;

+

+	/**

+	 * The feature id for the '<em><b>Decorators</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA__DECORATORS = SolverPackage.SOLVER__DECORATORS;

+

+	/**

+	 * The feature id for the '<em><b>Relative Tolerance</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA__RELATIVE_TOLERANCE = SolverPackage.SOLVER_FEATURE_COUNT + 0;

+

+	/**

+	 * The number of structural features of the '<em>Runge Kutta</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int RUNGE_KUTTA_FEATURE_COUNT = SolverPackage.SOLVER_FEATURE_COUNT + 1;

+

+

+	/**

+	 * Returns the meta object for class '{@link org.eclipse.stem.solvers.rk.RungeKutta <em>Runge Kutta</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Runge Kutta</em>'.

+	 * @see org.eclipse.stem.solvers.rk.RungeKutta

+	 * @generated

+	 */

+	EClass getRungeKutta();

+

+	/**

+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.solvers.rk.RungeKutta#getRelativeTolerance <em>Relative Tolerance</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the attribute '<em>Relative Tolerance</em>'.

+	 * @see org.eclipse.stem.solvers.rk.RungeKutta#getRelativeTolerance()

+	 * @see #getRungeKutta()

+	 * @generated

+	 */

+	EAttribute getRungeKutta_RelativeTolerance();

+

+	/**

+	 * Returns the factory that creates the instances of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the factory that creates the instances of the model.

+	 * @generated

+	 */

+	RkFactory getRkFactory();

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * Defines literals for the meta objects that represent

+	 * <ul>

+	 *   <li>each class,</li>

+	 *   <li>each feature of each class,</li>

+	 *   <li>each enum,</li>

+	 *   <li>and each data type</li>

+	 * </ul>

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	interface Literals {

+		/**

+		 * The meta object literal for the '{@link org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl <em>Runge Kutta</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl

+		 * @see org.eclipse.stem.solvers.rk.impl.RkPackageImpl#getRungeKutta()

+		 * @generated

+		 */

+		EClass RUNGE_KUTTA = eINSTANCE.getRungeKutta();

+

+		/**

+		 * The meta object literal for the '<em><b>Relative Tolerance</b></em>' attribute feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EAttribute RUNGE_KUTTA__RELATIVE_TOLERANCE = eINSTANCE.getRungeKutta_RelativeTolerance();

+

+	}

+

+} //RkPackage

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RungeKutta.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RungeKutta.java
new file mode 100644
index 0000000..8b82382
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/RungeKutta.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.solvers.rk;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.stem.core.solver.Solver;

+

+/**

+ * <!-- begin-user-doc -->

+ * A representation of the model object '<em><b>Runge Kutta</b></em>'.

+ * <!-- end-user-doc -->

+ *

+ * <p>

+ * The following features are supported:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.solvers.rk.RungeKutta#getRelativeTolerance <em>Relative Tolerance</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @see org.eclipse.stem.solvers.rk.RkPackage#getRungeKutta()

+ * @model

+ * @generated

+ */

+public interface RungeKutta extends Solver {

+	/**

+	 * Returns the value of the '<em><b>Relative Tolerance</b></em>' attribute.

+	 * The default value is <code>"1E-9"</code>.

+	 * <!-- begin-user-doc -->

+	 * <p>

+	 * If the meaning of the '<em>Relative Tolerance</em>' attribute isn't clear,

+	 * there really should be more of a description here...

+	 * </p>

+	 * <!-- end-user-doc -->

+	 * @return the value of the '<em>Relative Tolerance</em>' attribute.

+	 * @see #setRelativeTolerance(double)

+	 * @see org.eclipse.stem.solvers.rk.RkPackage#getRungeKutta_RelativeTolerance()

+	 * @model default="1E-9"

+	 * @generated

+	 */

+	double getRelativeTolerance();

+

+	/**

+	 * Sets the value of the '{@link org.eclipse.stem.solvers.rk.RungeKutta#getRelativeTolerance <em>Relative Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param value the new value of the '<em>Relative Tolerance</em>' attribute.

+	 * @see #getRelativeTolerance()

+	 * @generated

+	 */

+	void setRelativeTolerance(double value);

+

+} // RungeKutta

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkFactoryImpl.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkFactoryImpl.java
new file mode 100644
index 0000000..f5de213
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkFactoryImpl.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.solvers.rk.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+

+import org.eclipse.emf.ecore.impl.EFactoryImpl;

+

+import org.eclipse.emf.ecore.plugin.EcorePlugin;

+

+import org.eclipse.stem.solvers.rk.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Factory</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class RkFactoryImpl extends EFactoryImpl implements RkFactory {

+	/**

+	 * Creates the default factory implementation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static RkFactory init() {

+		try {

+			RkFactory theRkFactory = (RkFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/solvers/rk"); 

+			if (theRkFactory != null) {

+				return theRkFactory;

+			}

+		}

+		catch (Exception exception) {

+			EcorePlugin.INSTANCE.log(exception);

+		}

+		return new RkFactoryImpl();

+	}

+

+	/**

+	 * Creates an instance of the factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkFactoryImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public EObject create(EClass eClass) {

+		switch (eClass.getClassifierID()) {

+			case RkPackage.RUNGE_KUTTA: return createRungeKutta();

+			default:

+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RungeKutta createRungeKutta() {

+		RungeKuttaImpl rungeKutta = new RungeKuttaImpl();

+		return rungeKutta;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkPackage getRkPackage() {

+		return (RkPackage)getEPackage();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @deprecated

+	 * @generated

+	 */

+	@Deprecated

+	public static RkPackage getPackage() {

+		return RkPackage.eINSTANCE;

+	}

+

+} //RkFactoryImpl

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkJob.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkJob.java
new file mode 100644
index 0000000..3df01a5
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkJob.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.solvers.rk.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * A job for the finite difference solver
+ *
+ */
+public class RkJob extends Job {
+	
+	public RkJob(String n, short thread, RungeKuttaImpl s) {
+		super(n);
+		this.threadnum = thread;
+		this.solver = s;
+	}
+
+	protected double progress;
+	protected double h;
+	protected double t;
+	protected double maxerror;
+	protected RungeKuttaImpl solver;
+	
+	protected STEMTime time;
+	long timeDelta;
+	int cycle;
+	short threadnum;
+	
+	public double getProgress() {
+		return this.progress;
+	}
+	public void setProgress(double p) {
+		this.progress = p;
+	}
+	protected IStatus run(final IProgressMonitor monitor) {
+		solver._step(time,timeDelta,cycle,threadnum);
+		
+		return Status.OK_STATUS;
+	}
+}
diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkPackageImpl.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkPackageImpl.java
new file mode 100644
index 0000000..8340c63
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RkPackageImpl.java
@@ -0,0 +1,216 @@
+package org.eclipse.stem.solvers.rk.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EcorePackage;

+

+import org.eclipse.emf.ecore.impl.EPackageImpl;

+

+import org.eclipse.stem.core.common.CommonPackage;

+import org.eclipse.stem.core.graph.GraphPackage;

+import org.eclipse.stem.core.model.ModelPackage;

+import org.eclipse.stem.core.modifier.ModifierPackage;

+import org.eclipse.stem.core.scenario.ScenarioPackage;

+import org.eclipse.stem.core.sequencer.SequencerPackage;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+import org.eclipse.stem.solvers.rk.RkFactory;

+import org.eclipse.stem.solvers.rk.RkPackage;

+import org.eclipse.stem.solvers.rk.RungeKutta;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model <b>Package</b>.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class RkPackageImpl extends EPackageImpl implements RkPackage {

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private EClass rungeKuttaEClass = null;

+

+	/**

+	 * Creates an instance of the model <b>Package</b>, registered with

+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package

+	 * package URI value.

+	 * <p>Note: the correct way to create the package is via the static

+	 * factory method {@link #init init()}, which also performs

+	 * initialization of the package, or returns the registered package,

+	 * if one already exists.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.emf.ecore.EPackage.Registry

+	 * @see org.eclipse.stem.solvers.rk.RkPackage#eNS_URI

+	 * @see #init()

+	 * @generated

+	 */

+	private RkPackageImpl() {

+		super(eNS_URI, RkFactory.eINSTANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static boolean isInited = false;

+

+	/**

+	 * Creates, registers, and initializes the <b>Package</b> for this

+	 * model, and for any others upon which it depends.  Simple

+	 * dependencies are satisfied by calling this method on all

+	 * dependent packages before doing anything else.  This method drives

+	 * initialization for interdependent packages directly, in parallel

+	 * with this package, itself.

+	 * <p>Of this package and its interdependencies, all packages which

+	 * have not yet been registered by their URI values are first created

+	 * and registered.  The packages are then initialized in two steps:

+	 * meta-model objects for all of the packages are created before any

+	 * are initialized, since one package's meta-model objects may refer to

+	 * those of another.

+	 * <p>Invocation of this method will not affect any packages that have

+	 * already been initialized.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #eNS_URI

+	 * @see #createPackageContents()

+	 * @see #initializePackageContents()

+	 * @generated

+	 */

+	public static RkPackage init() {

+		if (isInited) return (RkPackage)EPackage.Registry.INSTANCE.getEPackage(RkPackage.eNS_URI);

+

+		// Obtain or create and register package

+		RkPackageImpl theRkPackage = (RkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof RkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new RkPackageImpl());

+

+		isInited = true;

+

+		// Initialize simple dependencies

+		CommonPackage.eINSTANCE.eClass();

+		GraphPackage.eINSTANCE.eClass();

+		ModelPackage.eINSTANCE.eClass();

+		ModifierPackage.eINSTANCE.eClass();

+		ScenarioPackage.eINSTANCE.eClass();

+		SequencerPackage.eINSTANCE.eClass();

+		SolverPackage.eINSTANCE.eClass();

+

+		// Create package meta-data objects

+		theRkPackage.createPackageContents();

+

+		// Initialize created meta-data

+		theRkPackage.initializePackageContents();

+

+		// Mark meta-data to indicate it can't be changed

+		theRkPackage.freeze();

+

+		return theRkPackage;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EClass getRungeKutta() {

+		return rungeKuttaEClass;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EAttribute getRungeKutta_RelativeTolerance() {

+		return (EAttribute)rungeKuttaEClass.getEStructuralFeatures().get(0);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkFactory getRkFactory() {

+		return (RkFactory)getEFactoryInstance();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isCreated = false;

+

+	/**

+	 * Creates the meta-model objects for the package.  This method is

+	 * guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createPackageContents() {

+		if (isCreated) return;

+		isCreated = true;

+

+		// Create classes and their features

+		rungeKuttaEClass = createEClass(RUNGE_KUTTA);

+		createEAttribute(rungeKuttaEClass, RUNGE_KUTTA__RELATIVE_TOLERANCE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private boolean isInitialized = false;

+

+	/**

+	 * Complete the initialization of the package and its meta-model.  This

+	 * method is guarded to have no affect on any invocation but its first.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void initializePackageContents() {

+		if (isInitialized) return;

+		isInitialized = true;

+

+		// Initialize package

+		setName(eNAME);

+		setNsPrefix(eNS_PREFIX);

+		setNsURI(eNS_URI);

+

+		// Obtain other dependent packages

+		SolverPackage theSolverPackage = (SolverPackage)EPackage.Registry.INSTANCE.getEPackage(SolverPackage.eNS_URI);

+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);

+

+		// Create type parameters

+

+		// Set bounds for type parameters

+

+		// Add supertypes to classes

+		rungeKuttaEClass.getESuperTypes().add(theSolverPackage.getSolver());

+

+		// Initialize classes and features; add operations and parameters

+		initEClass(rungeKuttaEClass, RungeKutta.class, "RungeKutta", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(getRungeKutta_RelativeTolerance(), theEcorePackage.getEDouble(), "relativeTolerance", "1E-9", 0, 1, RungeKutta.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+

+		// Create resource

+		createResource(eNS_URI);

+	}

+

+} //RkPackageImpl

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RungeKuttaImpl.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RungeKuttaImpl.java
new file mode 100644
index 0000000..967e863
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/impl/RungeKuttaImpl.java
@@ -0,0 +1,1091 @@
+package org.eclipse.stem.solvers.rk.impl;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.Map;

+import java.util.concurrent.BrokenBarrierException;

+import java.util.concurrent.CyclicBarrier;

+

+import org.eclipse.core.runtime.Preferences;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.impl.ENotificationImpl;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.stem.core.graph.DynamicLabel;

+import org.eclipse.stem.core.graph.IntegrationLabel;

+import org.eclipse.stem.core.graph.IntegrationLabelValue;

+import org.eclipse.stem.core.graph.LabelValue;

+import org.eclipse.stem.core.graph.SimpleDataExchangeLabelValue;

+import org.eclipse.stem.core.model.Decorator;

+import org.eclipse.stem.core.model.IntegrationDecorator;

+import org.eclipse.stem.core.model.STEMTime;

+import org.eclipse.stem.core.solver.impl.SolverImpl;

+import org.eclipse.stem.core.trigger.Trigger;

+import org.eclipse.stem.solvers.rk.RkPackage;

+import org.eclipse.stem.solvers.rk.RungeKutta;

+import org.eclipse.stem.ui.Activator;

+

+/**

+ * <!-- begin-user-doc -->

+ * An implementation of the model object '<em><b>Runge Kutta</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following features are implemented:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.solvers.rk.impl.RungeKuttaImpl#getRelativeTolerance <em>Relative Tolerance</em>}</li>

+ * </ul>

+ * </p>

+ *

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public class RungeKuttaImpl extends SolverImpl implements RungeKutta {

+	

+	// Number of threads

+	private short num_threads = 2;// Preferences will override

+	

+	// Jobs

+	private RkJob [] jobs;

+	

+	// Used to synchronize worker threads to agree on step size

+	private CyclicBarrier stepSizeBarrier;

+

+	// Used to synchronize worker threads to proceed after all threads have 

+	// updated the current temporary value to the new position

+	private CyclicBarrier updateDoneBarrier;

+	

+	// Smallest step size required by any thread to advance one step

+	

+	private double smallestH;

+	private double maximumError;

+	

+	// The step size and the current position (x)

+	private double stepSize = 1.0;

+	private double currentX;

+	

+	// Constants used in Runge Kutta Cash Karp 

+	

+	static double a2=0.2, a3=0.3, a4=0.6, a5=1.0, a6=0.875;

+	static double b21 = 0.2, b31=3.0/40, b32=9.0/40.0, b41=0.3, b42=-0.9, b43=1.2;

+	static double b51=-11.0/54.0, b52=2.5, b53=-70.0/27.0, b54=35.0/27.0, b61=1631.0/55296.0, b62=175.0/512.0, b63=575.0/13824.0, b64=44275.0/110592.0, b65=253.0/4096.0;

+	static double c1 = 37.0/378.0, c3=250.0/621.0, c4=125.0/594.0, c6=512.0/1771.0;

+	static double dc5 = -277.0/14336.0;

+	static double dc1 = c1-2825.0/27648.0, dc3=c3-18575.0/48384.0, dc4=c4-13525.0/55296.0, dc6=c6-0.25;

+	

+	static double SAFETY=0.9, PGROW=-0.2, PSHRNK=-0.25, ERRCON=1.89E-4;

+	static double TINY = 1E-30;

+

+	private static int MAX_PROGRESS_REPORTS = 5;

+	

+	/**

+	 * The default value of the '{@link #getRelativeTolerance() <em>Relative Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getRelativeTolerance()

+	 * @generated

+	 * @ordered

+	 */

+	protected static final double RELATIVE_TOLERANCE_EDEFAULT = 1.0E-9;

+

+	/**

+	 * The cached value of the '{@link #getRelativeTolerance() <em>Relative Tolerance</em>}' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getRelativeTolerance()

+	 * @generated

+	 * @ordered

+	 */

+	protected double relativeTolerance = RELATIVE_TOLERANCE_EDEFAULT;

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	public RungeKuttaImpl() {

+		super();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated NOT

+	 */

+	@Override

+	public boolean step(STEMTime time, long timeDelta, int cycle) {

+		

+		// Validate all decorators that return deltas to make sure

+		// they are of deterministic nature. The Runge Kutta integratio

+		// can only handle determininistic variants

+		

+		for(Decorator decorator:this.getDecorators()) 

+			if(decorator instanceof IntegrationDecorator) {

+				IntegrationDecorator idec = (IntegrationDecorator)decorator;

+				if(!idec.isDeterministic()) {

+					Activator.logError("Error, decorator: "+idec+" is not deterministic. The Runge Kutta Integrator can only handle deterministic models.", new Exception());

+					return false;

+				}

+			}

+		

+		if(!this.isInitialized())

+			this.initialize(time);

+		

+		Activator act = org.eclipse.stem.ui.Activator.getDefault();

+		if(act != null) {

+			final Preferences preferences = act.getPluginPreferences();

+			num_threads = (short)preferences.getInt(org.eclipse.stem.ui.preferences.PreferenceConstants.SIMULATION_THREADS);

+		} else num_threads = 2; // Just so we can run inside junit test

+			

+		final int c = cycle;

+		

+		// Initialize latches

+		stepSizeBarrier = new CyclicBarrier(num_threads, new Runnable() {

+            public void run() { 

+            	// All threads successfully advanced time by some step h.

+				// Find the smallest 			

+				smallestH = Double.MAX_VALUE;

+				maximumError = -Double.MAX_VALUE;

+				for(int i=0;i<num_threads;++i)  {

+					if(jobs[i].h <= smallestH) {

+						if(jobs[i].h == smallestH && maximumError < jobs[i].maxerror) maximumError = jobs[i].maxerror;

+						else if(jobs[i].h != smallestH) maximumError = jobs[i].maxerror;

+						smallestH = jobs[i].h; 

+					}

+				}

+              }

+            });

+		

+		updateDoneBarrier = new CyclicBarrier(num_threads);

+		

+		// Find triggers and make sure they are invoked

+		for(Decorator decorator:this.getDecorators()) {

+			if(decorator instanceof Trigger) {

+				decorator.updateLabels(time, timeDelta, cycle);

+			}

+		}		

+		

+		// First initialize the probe and temp label values from the current

+		// label values. 

+		

+		for(Decorator decorator:this.getDecorators()) {

+			EList<DynamicLabel>allLabels = decorator.getLabelsToUpdate();

+			for (final Iterator<DynamicLabel> currentStateLabelIter = allLabels

+					.iterator(); currentStateLabelIter.hasNext();) {

+				if(decorator instanceof IntegrationDecorator) {

+					// It's a standard disease model with a standard disease model label

+					final IntegrationLabel iLabel = (IntegrationLabel) currentStateLabelIter.next();

+					((IntegrationLabelValue)iLabel.getProbeValue()).set((IntegrationLabelValue)iLabel.getCurrentValue());

+					((IntegrationLabelValue)iLabel.getTempValue()).set((IntegrationLabelValue)iLabel.getCurrentValue());

+				} else currentStateLabelIter.next();

+			}

+		}

+		

+		if(jobs == null || jobs.length != num_threads) {

+			// Initialize the jobs if not done yet or of the number of threads changes

+			jobs = new RkJob[num_threads];

+	

+			for(short i=0;i<num_threads;++i) {

+				final short threadnum = i;

+				jobs[i] = new RkJob("Worker "+i, threadnum, this);

+			} // For each job

+		} // If not initialized

+

+		// Initialize

+		int thread = 0;

+		for(RkJob j:jobs) {

+			j.cycle = c;

+			j.time = time;

+			j.timeDelta = timeDelta;

+		}

+		// Schedule. Jobs can be rescheduled after finished

+		for(RkJob j:jobs) 

+			j.schedule();

+		

+		// Wait until all jobs completed

+		for(RkJob j : jobs) {

+			try {

+				j.join();

+			} catch(InterruptedException ie) {

+				Activator.logError(ie.getMessage(), ie);

+			}

+		}

+		

+		// Set the common time and step size here and validate everything is right

+		double minStep = Double.MAX_VALUE;

+		double currentT = jobs[0].t;

+		for(RkJob j : jobs) {

+			// The jobs have calculated new step sizes after they finished. Pick the

+			// smallest one for the next cycle

+			if(j.h < minStep) minStep = j.h;

+			if(j.t != currentT) Activator.logError("Error, one thread was in misstep with other threads, its time was "+j.t+" versus "+currentT, new Exception());

+		}

+		return true;

+	}

+	

+	/**

+	 * _step Do the step for a single thread

+	 * 

+	 * @param time

+	 * @param timeDelta

+	 * @param cycle

+	 * @param threadnum

+	 */

+	protected void _step(STEMTime time, long timeDelta, int cycle, short threadnum) {

+//		this.setProgress(0.0);

+		// We only deal with standard disease model decorators

+		

+		ArrayList<Decorator> iDecorators = new ArrayList<Decorator>();

+		

+		for(Decorator d:getDecorators()) {

+			if(d instanceof IntegrationDecorator)

+				iDecorators.add(d);

+		}

+		

+		

+		// First we get the step size, either the default step size

+		// (initially 1.0) or the last step size used. 

+		

+		double h = this.getStepSize();

+		

+		// x is to keep track of how far we have advanced in the solution. It is essentially

+		// a double cycle representation

+		

+		double x = this.getCurrentX();

+		

+		// Substantial performance can be gained here. Basically if the current cycle

+		// is greater than the cycle requested by the simulation, we are done. This

+		// means that the error tolerance between last step and this step is small

+		// enough so we don't need to update the labels. The error tolerance is

+		// specified in the disease model

+		

+		//*** OBSERVE: Since we limit h to max 1 below, this code is never invoked. It's kept

+		//*** around in case we want to allow time to be calculated far out in the future if

+		//*** the error is small enough

+		

+		

+		if(x >= cycle) {

+			// Just copy the next value the same as the current value for all labels

+			for(Decorator sdm:iDecorators) {

+				EList<DynamicLabel>myLabels = sdm.getLabelsToUpdate(threadnum, num_threads);

+				int numLabels = myLabels.size();

+				double n = 0.0;

+				int setProgressEveryNthNode = num_threads * numLabels/(MAX_PROGRESS_REPORTS);

+				if(setProgressEveryNthNode == 0) setProgressEveryNthNode = 1;

+				for (final Iterator<DynamicLabel> currentStateLabelIter = myLabels

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					// The estimated disease value contains the value calculated at position x

+					

+					IntegrationLabelValue nextValueAtX = (IntegrationLabelValue)EcoreUtil.copy(diseaseLabel.getProbeValue());

+					IntegrationLabelValue currentValueAtCycle = (IntegrationLabelValue)diseaseLabel.getCurrentValue();

+					IntegrationLabelValue nextState = (IntegrationLabelValue)diseaseLabel.getNextValue();

+					adjustValuesToCycle(currentValueAtCycle, nextValueAtX, x, cycle);

+					// NextValueAtX has been modified here to the correct value for this cycle.

+					nextState.set(nextValueAtX);

+					// The next value is valid now.

+					diseaseLabel.setNextValueValid(true);

+					double progress = n/numLabels;

+					jobs[threadnum].setProgress(progress);

+					if(n%setProgressEveryNthNode==0) {

+						// Get the progress for all threads

+						for(int i=0;i<num_threads;++i) if(i!=threadnum && jobs[i] != null) progress+=jobs[i].getProgress();

+						progress /= num_threads;

+						sdm.setProgress(progress);

+					}

+					n+=1.0;

+				}

+			} // For each decorator

+			// So that validation code above is happy

+			jobs[threadnum].h = h;

+			jobs[threadnum].t = x;

+			

+			return;

+		}

+

+		

+		// Make sure we actually have labels to update

+		boolean workToDo=false;

+		for(Decorator sdm:iDecorators)

+			if(sdm.getLabelsToUpdate(threadnum, num_threads).size() > 0) {workToDo=true;break;}

+		

+		if(!workToDo) {

+			// Nothing to do, just advance x and set h

+			jobs[threadnum].h = h;

+			jobs[threadnum].t = x;

+			// Be nice and walk in step with others until done

+			while(x < cycle) {

+				try {

+					// Set to a large number to make sure it's larger than any step size reported

+					// by another thread

+					do {

+						jobs[threadnum].h = Double.MAX_VALUE;

+						stepSizeBarrier.await();

+					} while(this.maximumError > 1.0);

+					updateDoneBarrier.await();

+				} catch(InterruptedException ie) {

+					// Should never happen

+					Activator.logError(ie.getMessage(), ie);

+				} catch(BrokenBarrierException bbe) {

+					// Should never happen

+					Activator.logError(bbe.getMessage(), bbe);

+				}

+				// Set to the smallest value reported by another thread

+				h = this.smallestH;

+				x += h;

+				jobs[threadnum].h = h;

+				jobs[threadnum].t = x;

+			}				

+			return; 

+		}

+		

+		// We use the Runge Kutta Kash Carp method to advance to the next

+		// step in the simulation. Two estimates of the disease deltas

+		// are calculated and compared to each other. If they differ

+		// by more than a maximum error (determined by a parameter for

+		// the disease model), we reduce the step size until an acceptable

+		// error is reached. 

+					

+		// These are used during Runge Kutta calculations:

+		Map<IntegrationLabel, IntegrationLabelValue> k1map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		Map<IntegrationLabel, IntegrationLabelValue> k2map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		Map<IntegrationLabel, IntegrationLabelValue> k3map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		Map<IntegrationLabel, IntegrationLabelValue> k4map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		Map<IntegrationLabel, IntegrationLabelValue> k5map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		Map<IntegrationLabel, IntegrationLabelValue> k6map = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		

+		// Used below as temporary place holder, one for each decorator

+		IntegrationLabelValue _k1[], _k2[], _k3[], _k4[], _k5[], _k6[];

+		int numDecorators = iDecorators.size();

+		_k1 = new IntegrationLabelValue[numDecorators];

+		_k2 = new IntegrationLabelValue[numDecorators];

+		_k3 = new IntegrationLabelValue[numDecorators];

+		_k4 = new IntegrationLabelValue[numDecorators];

+		_k5 = new IntegrationLabelValue[numDecorators];

+		_k6 = new IntegrationLabelValue[numDecorators];

+		

+		// The final estimates for label values are stored here

+		Map<IntegrationLabel, IntegrationLabelValue> finalEstimate = new HashMap<IntegrationLabel, IntegrationLabelValue>();

+		

+		// Delta is used to scale the step (h)

+		double delta = 0.0;	

+				

+		int n=0;

+		for(Decorator sdm:iDecorators) {

+			Iterator<DynamicLabel> iter = sdm.getLabelsToUpdate(threadnum, num_threads)

+					.iterator();

+			IntegrationLabel firstLabel = (IntegrationLabel)iter.next();

+			// Initialize temporary place holders just by creating dups of the first label available

+			_k1[n] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+			_k2[n] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+			_k3[n] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+			_k4[n] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+			_k5[n] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+			_k6[n++] = (IntegrationLabelValue)EcoreUtil.copy(firstLabel.getCurrentValue());

+		}

+		double end = Math.floor(this.getCurrentX())+1.0;

+		

+		// Keep track if whether anyone want to stop

+		// or pause updating labels

+		boolean interrupt=false, pause = false;

+		

+		// We keep these around to determine when to call setProgress(...) on the decorators.

+		// If we call too frequently we can too many callbacks which affects performance.

+		double nextProgressReportStep = num_threads*(end-x)/MAX_PROGRESS_REPORTS;

+		double nextProgressReport = x+nextProgressReportStep;

+		

+//		HashMap<StandardDiseaseModelLabel, StandardDiseaseModelLabelValue> validate = new 

+//			HashMap<StandardDiseaseModelLabel, StandardDiseaseModelLabelValue>(); 

+		

+		// This is the main loop we keep iterating over until we are done with the step

+		while(x < end) {

+			k1map.clear();

+			k2map.clear();

+			k3map.clear();

+			k4map.clear();

+			k5map.clear();

+			k6map.clear();

+			finalEstimate.clear();

+			

+			// Validation code kept here if needed in the future

+			

+			/*

+			

+			  HashMap<StandardDiseaseModelLabel, StandardDiseaseModelLabelValue> validate = new HashMap<StandardDiseaseModelLabel, StandardDiseaseModelLabelValue>();

+			 

+			

+			if(!redo) 	

+				for(StandardDiseaseModelImpl sdm:diseaseModelDecorators) {

+					for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+						final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) currentStateLabelIter

+						.next();

+						final StandardDiseaseModelLabelValue val = (StandardDiseaseModelLabelValue)diseaseLabel.getCurrentDiseaseModelTempLabelValue();

+						validate.put(diseaseLabel, val);

+					}

+				}

+			else {

+				for(StandardDiseaseModelImpl sdm:diseaseModelDecorators)

+					for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+							.iterator(); currentStateLabelIter.hasNext();) {

+							final StandardDiseaseModelLabel diseaseLabel = (StandardDiseaseModelLabel) currentStateLabelIter

+							.next();

+							final SIRLabelValue val = (SIRLabelValue)diseaseLabel.getCurrentDiseaseModelTempLabelValue();

+							validate.put(diseaseLabel, val);

+							final SIRLabelValue oldVal = (SIRLabelValue)validate.get(diseaseLabel);

+							

+							if(val.getI() != oldVal.getI() ||

+									val.getS() != oldVal.getS() ||

+									val.getR() != oldVal.getR() ||

+									//val.getE() != oldVal.getE() ||

+									val.getBirths() != oldVal.getBirths() ||

+									val.getDeaths() != oldVal.getDeaths() ||

+									val.getDiseaseDeaths() != oldVal.getDiseaseDeaths() 

+									)

+								Activator.logError("Error, old and new value not the same  label: "+diseaseLabel, new Exception());

+					}

+			}

+			*/

+			

+			// ToDo: We should check if a maximum number of iterations have been

+			// exceeded here and throw an error. 

+			

+			// First, get the delta values at the current state

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			

+			// Set the scaling factor for disease parameters for each decorator and location

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue scale = (IntegrationLabelValue)diseaseLabel.getErrorScale();

+					scale.set((IntegrationLabelValue)diseaseLabel.getTempValue());

+					

+					IntegrationLabelValue dt = (IntegrationLabelValue)EcoreUtil.copy(diseaseLabel.getDeltaValue());

+					dt.scale(h);

+					dt.abs();

+					dt.add(TINY);

+					scale.abs();

+					scale.add(dt);

+				}

+			}

+			

+			// Step 1 in Runge Kutta Fehlberg. 

+			// Get the delta values out of each node label and

+			// build a first estimate of the next value'

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k1map.put(diseaseLabel, (IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+					

+					deltaLabel.scale(h);

+					deltaLabel.scale(b21);

+					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(

+							deltaLabel.add((IntegrationLabelValue)

+							diseaseLabel.

+							getTempValue()));	

+				}

+			}

+			

+			// Now get the next delta values

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+

+			

+			// Step 2 in Runge Kutta Fehlberg. 

+			// Get the delta values out of each node label and

+			// build a second estimate of the next value

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k2map.put(diseaseLabel,(IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k2[n].set(deltaLabel);

+					

+					IntegrationLabelValue estDelta = 

+						_k1[n].scale(b31);

+					_k2[n].scale(b32);

+					estDelta.add(_k2[n]);

+					

+					estDelta.scale(h);

+					

+					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(estDelta.add(

+							(IntegrationLabelValue)diseaseLabel.

+							getTempValue()));

+				}

+				++n;

+			}

+			

+			// Now get the next delta values

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+

+			

+			// Step 3 in Runge Kutta Fehlberg. 

+			// Get the delta values out of each node label and

+			// build a third estimate of the next value

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k3map.put(diseaseLabel, (IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+					

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k2[n].set(k2map.get(diseaseLabel));

+					_k3[n].set(deltaLabel);

+					

+					_k1[n].scale(b41);

+					_k2[n].scale(b42);

+					_k3[n].scale(b43);

+					IntegrationLabelValue estDelta = _k1[n];

+					estDelta.add(_k2[n]);

+					estDelta.add(_k3[n]);

+					

+					estDelta.scale(h);

+					

+					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(estDelta.add(

+							(IntegrationLabelValue)diseaseLabel.

+							getTempValue()));

+				}	

+				++n;

+			}

+			

+			// Now get the next delta values

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+

+			

+			// Step 4 in Runge Kutta Fehlberg. 

+			// Get the delta values out of each node label and

+			// build a fourth estimate of the next value

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k4map.put(diseaseLabel,(IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+					

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k2[n].set(k2map.get(diseaseLabel));

+					_k3[n].set(k3map.get(diseaseLabel));

+					_k4[n].set(deltaLabel);

+					

+					_k1[n].scale(b51);

+					_k2[n].scale(b52);

+					_k3[n].scale(b53);

+					_k4[n].scale(b54);

+					

+					IntegrationLabelValue estDelta = _k1[n];

+					estDelta.add(_k2[n]);

+					estDelta.add(_k3[n]);

+					estDelta.add(_k4[n]);

+					

+					estDelta.scale(h);

+					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(estDelta.add(

+							(IntegrationLabelValue)diseaseLabel.

+							getTempValue()));

+				}

+				++n;

+			}

+		

+			// Now get the next delta values

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+

+			

+			// Step 5 in Runge Kutta Fehlberg. 

+			// Get the delta values out of each node label and

+			// build a fifth estimate of the next value

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+			

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k5map.put(diseaseLabel,(IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+					

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k2[n].set(k2map.get(diseaseLabel));

+					_k3[n].set(k3map.get(diseaseLabel));

+					_k4[n].set(k4map.get(diseaseLabel));

+					_k5[n].set(deltaLabel);

+					

+					_k1[n].scale(b61);

+					_k2[n].scale(b62);

+					_k3[n].scale(b63);

+					_k4[n].scale(b64);

+					_k5[n].scale(b65);

+					

+					IntegrationLabelValue estDelta = _k1[n];

+					estDelta.add(_k2[n]);

+					estDelta.add(_k3[n]);

+					estDelta.add(_k4[n]);

+					estDelta.add(_k5[n]);

+					

+					estDelta.scale(h);

+					

+					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(estDelta.add(

+							(IntegrationLabelValue)diseaseLabel.

+							getTempValue()));

+				}	

+				++n;

+			}

+			

+			// Now get the next delta values

+			for(Decorator sdm:iDecorators) 

+				((IntegrationDecorator)sdm).calculateDelta(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+			for(Decorator sdm:iDecorators)

+				((IntegrationDecorator)sdm).applyExternalDeltas(time, timeDelta, sdm.getLabelsToUpdate(threadnum, num_threads));

+

+			

+			// Step 6 in Runge Kutta Fehlberg. 

+			// Calculate k6

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+			

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+					

+					IntegrationLabelValue deltaLabel = (IntegrationLabelValue)diseaseLabel.getDeltaValue();

+					k6map.put(diseaseLabel,(IntegrationLabelValue)EcoreUtil.copy(deltaLabel));

+				}

+				++n;

+			}

+			

+			// Step 7 in Runge Kutta Fehlberg

+			// Calculate the two estimates from k1, .. k6 values

+			// and determine the maximum difference (error) between them.

+			

+			boolean success = true; // Were we able to update all labels without a large enough error?

+			double maxerror = 0.0;

+			n = 0;

+			for(Decorator sdm:iDecorators) {

+				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+						.iterator(); currentStateLabelIter.hasNext();) {

+			

+					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+					.next();

+			

+					IntegrationLabelValue currentValue = (IntegrationLabelValue)diseaseLabel.getTempValue();

+					

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k3[n].set(k3map.get(diseaseLabel));

+					_k4[n].set(k4map.get(diseaseLabel));

+					_k5[n].set(k5map.get(diseaseLabel));

+					_k6[n].set(k6map.get(diseaseLabel));	

+					

+					_k1[n].scale(c1);

+					_k3[n].scale(c3);

+					_k4[n].scale(c4);

+					_k6[n].scale(c6);

+					

+					// New Y

+					IntegrationLabelValue yout = (IntegrationLabelValue)

+						EcoreUtil.copy(_k1[n].add(_k3[n]).add(_k4[n]).add(_k6[n]));

+					

+					yout.scale(h);

+					yout.add(currentValue);

+								

+					

+					// Get the error

+					_k1[n].set(k1map.get(diseaseLabel));

+					_k3[n].set(k3map.get(diseaseLabel));

+					_k4[n].set(k4map.get(diseaseLabel));

+					_k5[n].set(k5map.get(diseaseLabel));

+					_k6[n].set(k6map.get(diseaseLabel));	

+					

+					_k1[n].scale(dc1);

+					_k3[n].scale(dc3);

+					_k4[n].scale(dc4);

+					_k5[n].scale(dc5);

+					_k6[n].scale(dc6);

+					

+					IntegrationLabelValue yerror = (IntegrationLabelValue) EcoreUtil.copy(_k1[n].add(_k3[n]).add(_k4[n]).add(_k5[n]).add(_k6[n]));

+					yerror.scale(h);

+					

+					yerror.divide((IntegrationLabelValue)diseaseLabel.getErrorScale());

+					double error = yerror.max();

+					error /= relativeTolerance;

+					

+					if(error > maxerror) {

+						maxerror = error;

+					}

+					

+					if(error <= 1.0) 

+						finalEstimate.put(diseaseLabel, 

+							(IntegrationLabelValue)EcoreUtil.copy(yout));

+				}

+				++n;

+			}

+			

+			jobs[threadnum].h = h;

+			jobs[threadnum].maxerror = maxerror;

+			try {

+				stepSizeBarrier.await();

+			} catch(InterruptedException ie) {

+				// Should never happen

+				Activator.logError(ie.getMessage(), ie);

+			} catch(BrokenBarrierException bbe) {

+				// Should never happen

+				Activator.logError(bbe.getMessage(), bbe);

+			}

+			

+			// At least one of the threads had to large of an error, fail

+			if(this.maximumError > 1.0)

+				success = false;

+			

+			// Are we done?

+			if(success) {			

+				// Check to make sure

+				if(this.smallestH > h)

+					Activator.logError("Error, h was less than the smallest, perhaps barrier process failed to execute? h:"+h+" vs "+this.smallestH, new Exception());

+				

+				// Yes, hurrah, advance x using the step size h

+				x+=h;

+				if(this.maximumError > ERRCON)

+					h = SAFETY*h*Math.pow(this.maximumError, PGROW);

+				else

+					h = 5.0*h;

+

+					

+				// Limit to max 1

+				if(h > 1.0)  h = 1.0;

+				

+

+					// Make sure we don't overshoot

+				if(x < end && x+h > end) h = (end-x);

+					

+					

+

+					// Update the current value to the new position

+				for(Decorator sdm:iDecorators) {

+					for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+							.iterator(); currentStateLabelIter.hasNext();) {

+						final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter.next();

+						((IntegrationLabelValue)diseaseLabel.getTempValue()).set(finalEstimate.get(diseaseLabel));

+						((IntegrationLabelValue)diseaseLabel.getProbeValue()).set(finalEstimate.get(diseaseLabel));

+					}

+				}

+					

+				// Wait until all other threads have updated the current value 

+				try {

+					updateDoneBarrier.await();

+				} catch(InterruptedException ie) {

+					// Should never happen

+					Activator.logError(ie.getMessage(), ie);

+				} catch(BrokenBarrierException bbe) {

+					// Should never happen

+					Activator.logError(bbe.getMessage(), bbe);

+				}

+					

+				double progress = (end-x < 0.0)? 1.0:1.0-(end-x);

+				jobs[threadnum].setProgress(progress);

+				if(x > nextProgressReport) {

+					// Get the progress for all threads

+					for(int i=0;i<num_threads;++i) if(i!=threadnum && jobs[i] != null) progress+=jobs[i].getProgress();

+					progress /= num_threads;

+					for(Decorator sdm:iDecorators) 						

+						sdm.setProgress(progress);

+					nextProgressReport += nextProgressReportStep;

+				}

+					

+			} else {

+				// At least one thread failed, change the step size

+	

+				// Problem, error too big, we need to reduce the step size

+				delta = SAFETY*h*Math.pow(this.maximumError,PSHRNK);

+        		if(h > 0.0)

+        			h = (delta > 0.1*h)? delta:0.1*h;

+        		else

+        			h = (delta > 0.1*h)? 0.1*h:delta;

+

+				// We didn't succeed. 

+ 

+				//Reset the estimated value back to the original, the step size

+				// has been reduced so we well try again.

+				// Set the estimated value back to the current original value

+    			for(Decorator sdm:iDecorators) {

+    				for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+    						.iterator(); currentStateLabelIter.hasNext();) {

+    					final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter.next();

+    					((IntegrationLabelValue)diseaseLabel.getProbeValue()).set((IntegrationLabelValue)diseaseLabel.getTempValue());

+    				}

+    			}

+			}

+		} // While x < end

+		

+		jobs[threadnum].t = x;

+		jobs[threadnum].h = h;

+		

+		// Remember the step size and position in the solver

+		this.setStepSize(h);

+		this.setCurrentX(x);

+		

+		// We're done

+		for(Decorator sdm:iDecorators) {

+			for (final Iterator<DynamicLabel> currentStateLabelIter = sdm.getLabelsToUpdate(threadnum, num_threads)

+					.iterator(); currentStateLabelIter.hasNext();) {

+				final IntegrationLabel diseaseLabel = (IntegrationLabel) currentStateLabelIter

+				.next();

+		

+				// This is the next state for the label

+				IntegrationLabelValue nextState = (IntegrationLabelValue)diseaseLabel.getNextValue();

+				// This is the original current state at the previous cycle

+				IntegrationLabelValue originalState = (IntegrationLabelValue)diseaseLabel.getCurrentValue();

+				// This is the final value calculated at position x.

+				IntegrationLabelValue newValue =  finalEstimate.get(diseaseLabel);

+				// x could be larger than the requested cycle, so we do a linear interpolation

+				// to fit it exactly to the requested cycle

+				// *** Not needed since we always end exactly at the requested cycle

+				//adjustValuesToCycle(originalState, newValue, x, cycle);

+				

+				// New value has been modified here to fit the requested cycle

+				nextState.set(newValue);

+				// Do any model specific work for instance add noise

+				((IntegrationDecorator)sdm).doModelSpecificAdjustments((LabelValue)nextState);

+				// The next value is valid now.

+				diseaseLabel.setNextValueValid(true);

+			}

+		}

+	}

+	

+	/**

+	 * Adjust the returned label so that it matches the exact value at the requested cycle

+	 * instead of the value at x. We do this by using the difference between x and the current

+	 * cycle to adjust the label. nextValueAtX is modified by this function

+	 * 

+	 * @param currentValue The current value

+	 * @param nextValueAtX The next value at position x

+	 * @param x Current position

+	 * @param cycle Current cycle

+	 */

+	void adjustValuesToCycle(IntegrationLabelValue currentValue, IntegrationLabelValue nextValueAtX, double x, int cycle) {

+		IntegrationLabelValue result = (IntegrationLabelValue)EcoreUtil.copy(currentValue);

+		nextValueAtX.sub(currentValue); // difference between new value and old now in nextValueAtX

+		nextValueAtX.scale(1.0/(x-cycle+1));

+		nextValueAtX.set(result.add(nextValueAtX));

+	}

+	

+	/**

+	 * initialize before simulation begins. Rewind/forward any population model

+	 * values to the start time of the 

+	 * @param time

+	 */

+	private void initialize(STEMTime time) {

+		EList<Decorator> redoList = new BasicEList<Decorator>();

+		

+		boolean redo = false;

+		for(Decorator d:this.getDecorators()) {

+			if(d instanceof IntegrationDecorator) {

+				EList<DynamicLabel> labels = d.getLabelsToUpdate();

+				for(DynamicLabel l:labels) {

+					if(l instanceof IntegrationLabel) {

+						IntegrationLabel il = (IntegrationLabel)l;

+						il.reset(time);

+						if(((SimpleDataExchangeLabelValue)il.getDeltaValue()).getAdditions() > 0.0 ||

+								((SimpleDataExchangeLabelValue)il.getDeltaValue()).getSubstractions() > 0.0)

+							redo = true;

+					}

+				}

+			}

+			if(!redo)redoList.add(d);

+		}

+		// Fix decorators with unapplied deltas

+		if(redo) {

+			for(Decorator d:redoList) {

+				if(d instanceof IntegrationDecorator) {

+					EList<DynamicLabel> labels = d.getLabelsToUpdate();

+					for(DynamicLabel l:labels) {

+						if(l instanceof IntegrationLabel) {

+							IntegrationLabel il = (IntegrationLabel)l;

+							il.reset(time);

+						}

+					}

+				}

+			}

+		}

+		this.setInitialized(true);

+	}

+	

+	/**

+	 * Reset the solver

+	 * @generated NOT

+	 */

+	@Override

+	public void reset() {

+		this.setStepSize(1.0);

+		this.setCurrentX(0.0);

+		this.setInitialized(false);

+	}

+	

+	protected double getStepSize() {

+		return stepSize;

+	}

+	

+	protected double getCurrentX() {

+		return currentX;

+	}

+	

+	protected void setStepSize(double d) {

+		stepSize = d;

+	}

+	

+	protected void setCurrentX(double d) {

+		currentX = d;

+	}

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected EClass eStaticClass() {

+		return RkPackage.Literals.RUNGE_KUTTA;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public double getRelativeTolerance() {

+		return relativeTolerance;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setRelativeTolerance(double newRelativeTolerance) {

+		double oldRelativeTolerance = relativeTolerance;

+		relativeTolerance = newRelativeTolerance;

+		if (eNotificationRequired())

+			eNotify(new ENotificationImpl(this, Notification.SET, RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE, oldRelativeTolerance, relativeTolerance));

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object eGet(int featureID, boolean resolve, boolean coreType) {

+		switch (featureID) {

+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:

+				return new Double(getRelativeTolerance());

+		}

+		return super.eGet(featureID, resolve, coreType);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eSet(int featureID, Object newValue) {

+		switch (featureID) {

+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:

+				setRelativeTolerance(((Double)newValue).doubleValue());

+				return;

+		}

+		super.eSet(featureID, newValue);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void eUnset(int featureID) {

+		switch (featureID) {

+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:

+				setRelativeTolerance(RELATIVE_TOLERANCE_EDEFAULT);

+				return;

+		}

+		super.eUnset(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean eIsSet(int featureID) {

+		switch (featureID) {

+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:

+				return relativeTolerance != RELATIVE_TOLERANCE_EDEFAULT;

+		}

+		return super.eIsSet(featureID);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String toString() {

+		if (eIsProxy()) return super.toString();

+

+		StringBuffer result = new StringBuffer(super.toString());

+		result.append(" (relativeTolerance: ");

+		result.append(relativeTolerance);

+		result.append(')');

+		return result.toString();

+	}

+

+} //RungeKuttaImpl

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkEditPlugin.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkEditPlugin.java
new file mode 100644
index 0000000..880e378
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkEditPlugin.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.solvers.rk.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+

+/**

+ * This is the central singleton for the Rk edit plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class RkEditPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final RkEditPlugin INSTANCE = new RkEditPlugin();

+

+	/**

+	 * 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 RkEditPlugin() {

+		super

+		  (new ResourceLocator [] {

+		     CoreEditPlugin.INSTANCE,

+		     EcoreEditPlugin.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/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkItemProviderAdapterFactory.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkItemProviderAdapterFactory.java
new file mode 100644
index 0000000..ee2b88d
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RkItemProviderAdapterFactory.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.solvers.rk.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notification;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.edit.provider.ChangeNotifier;

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.IChangeNotifier;

+import org.eclipse.emf.edit.provider.IDisposable;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.INotifyChangedListener;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+

+import org.eclipse.stem.solvers.rk.util.RkAdapterFactory;

+

+/**

+ * This is the factory that is used to provide the interfaces needed to support Viewers.

+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.

+ * The adapters also support Eclipse property sheets.

+ * Note that most of the adapters are shared among multiple instances.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class RkItemProviderAdapterFactory extends RkAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {

+	/**

+	 * This keeps track of the root adapter factory that delegates to this adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory parentAdapterFactory;

+

+	/**

+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IChangeNotifier changeNotifier = new ChangeNotifier();

+

+	/**

+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Object> supportedTypes = new ArrayList<Object>();

+

+	/**

+	 * This constructs an instance.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkItemProviderAdapterFactory() {

+		supportedTypes.add(IEditingDomainItemProvider.class);

+		supportedTypes.add(IStructuredItemContentProvider.class);

+		supportedTypes.add(ITreeItemContentProvider.class);

+		supportedTypes.add(IItemLabelProvider.class);

+		supportedTypes.add(IItemPropertySource.class);

+	}

+

+	/**

+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.solvers.rk.RungeKutta} instances.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected RungeKuttaItemProvider rungeKuttaItemProvider;

+

+	/**

+	 * This creates an adapter for a {@link org.eclipse.stem.solvers.rk.RungeKutta}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter createRungeKuttaAdapter() {

+		if (rungeKuttaItemProvider == null) {

+			rungeKuttaItemProvider = new RungeKuttaItemProvider(this);

+		}

+

+		return rungeKuttaItemProvider;

+	}

+

+	/**

+	 * This returns the root adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ComposeableAdapterFactory getRootAdapterFactory() {

+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();

+	}

+

+	/**

+	 * This sets the composed adapter factory that contains this factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {

+		this.parentAdapterFactory = parentAdapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object type) {

+		return supportedTypes.contains(type) || super.isFactoryForType(type);

+	}

+

+	/**

+	 * This implementation substitutes the factory itself as the key for the adapter.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Adapter adapt(Notifier notifier, Object type) {

+		return super.adapt(notifier, this);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object adapt(Object object, Object type) {

+		if (isFactoryForType(type)) {

+			Object adapter = super.adapt(object, type);

+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {

+				return adapter;

+			}

+		}

+

+		return null;

+	}

+

+	/**

+	 * This adds a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.addListener(notifyChangedListener);

+	}

+

+	/**

+	 * This removes a listener.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeListener(INotifyChangedListener notifyChangedListener) {

+		changeNotifier.removeListener(notifyChangedListener);

+	}

+

+	/**

+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void fireNotifyChanged(Notification notification) {

+		changeNotifier.fireNotifyChanged(notification);

+

+		if (parentAdapterFactory != null) {

+			parentAdapterFactory.fireNotifyChanged(notification);

+		}

+	}

+

+	/**

+	 * This disposes all of the item providers created by this factory. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void dispose() {

+		if (rungeKuttaItemProvider != null) rungeKuttaItemProvider.dispose();

+	}

+

+}

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RungeKuttaItemProvider.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RungeKuttaItemProvider.java
new file mode 100644
index 0000000..81e70a8
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/provider/RungeKuttaItemProvider.java
@@ -0,0 +1,170 @@
+package org.eclipse.stem.solvers.rk.provider;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.Collection;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

+import org.eclipse.emf.edit.provider.IItemLabelProvider;

+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.IItemPropertySource;

+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;

+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;

+import org.eclipse.emf.edit.provider.ViewerNotification;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProvider;

+

+import org.eclipse.stem.solvers.rk.RkPackage;

+import org.eclipse.stem.solvers.rk.RungeKutta;

+

+/**

+ * This is the item provider adapter for a {@link org.eclipse.stem.solvers.rk.RungeKutta} object.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class RungeKuttaItemProvider

+	extends SolverItemProvider

+	implements

+		IEditingDomainItemProvider,

+		IStructuredItemContentProvider,

+		ITreeItemContentProvider,

+		IItemLabelProvider,

+		IItemPropertySource {

+	/**

+	 * This constructs an instance from a factory and a notifier.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RungeKuttaItemProvider(AdapterFactory adapterFactory) {

+		super(adapterFactory);

+	}

+

+	/**

+	 * This returns the property descriptors for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {

+		if (itemPropertyDescriptors == null) {

+			super.getPropertyDescriptors(object);

+

+			addRelativeTolerancePropertyDescriptor(object);

+		}

+		return itemPropertyDescriptors;

+	}

+

+	/**

+	 * This adds a property descriptor for the Relative Tolerance feature.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void addRelativeTolerancePropertyDescriptor(Object object) {

+		itemPropertyDescriptors.add

+			(createItemPropertyDescriptor

+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),

+				 getResourceLocator(),

+				 getString("_UI_RungeKutta_relativeTolerance_feature"),

+				 getString("_UI_PropertyDescriptor_description", "_UI_RungeKutta_relativeTolerance_feature", "_UI_RungeKutta_type"),

+				 RkPackage.Literals.RUNGE_KUTTA__RELATIVE_TOLERANCE,

+				 true,

+				 false,

+				 false,

+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,

+				 null,

+				 null));

+	}

+

+	/**

+	 * This returns RungeKutta.gif.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public Object getImage(Object object) {

+		return overlayImage(object, getResourceLocator().getImage("full/obj16/RungeKutta"));

+	}

+

+	/**

+	 * This returns the label text for the adapted class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public String getText(Object object) {

+		URI labelValue = ((RungeKutta)object).getURI();

+		String label = labelValue == null ? null : labelValue.toString();

+		return label == null || label.length() == 0 ?

+			getString("_UI_RungeKutta_type") :

+			getString("_UI_RungeKutta_type") + " " + label;

+	}

+

+	/**

+	 * This handles model notifications by calling {@link #updateChildren} to update any cached

+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void notifyChanged(Notification notification) {

+		updateChildren(notification);

+

+		switch (notification.getFeatureID(RungeKutta.class)) {

+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:

+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));

+				return;

+		}

+		super.notifyChanged(notification);

+	}

+

+	/**

+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children

+	 * that can be created under this object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {

+		super.collectNewChildDescriptors(newChildDescriptors, object);

+	}

+

+	/**

+	 * Return the resource locator for this item provider's resources.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public ResourceLocator getResourceLocator() {

+		return RkEditPlugin.INSTANCE;

+	}

+

+}

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkAdapterFactory.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkAdapterFactory.java
new file mode 100644
index 0000000..36306ee
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkAdapterFactory.java
@@ -0,0 +1,188 @@
+package org.eclipse.stem.solvers.rk.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.notify.Adapter;

+import org.eclipse.emf.common.notify.Notifier;

+

+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.Solver;

+

+import org.eclipse.stem.solvers.rk.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Adapter Factory</b> for the model.

+ * It provides an adapter <code>createXXX</code> method for each class of the model.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.rk.RkPackage

+ * @generated

+ */

+public class RkAdapterFactory extends AdapterFactoryImpl {

+	/**

+	 * The cached model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static RkPackage modelPackage;

+

+	/**

+	 * Creates an instance of the adapter factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkAdapterFactory() {

+		if (modelPackage == null) {

+			modelPackage = RkPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Returns whether this factory is applicable for the type of the object.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.

+	 * <!-- end-user-doc -->

+	 * @return whether this factory is applicable for the type of the object.

+	 * @generated

+	 */

+	@Override

+	public boolean isFactoryForType(Object object) {

+		if (object == modelPackage) {

+			return true;

+		}

+		if (object instanceof EObject) {

+			return ((EObject)object).eClass().getEPackage() == modelPackage;

+		}

+		return false;

+	}

+

+	/**

+	 * The switch that delegates to the <code>createXXX</code> methods.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unused") 

+	protected RkSwitch<Adapter> modelSwitch =

+		new RkSwitch<Adapter>() {

+			@Override

+			public Adapter caseRungeKutta(RungeKutta object) {

+				return createRungeKuttaAdapter();

+			}

+			@Override

+			public <T> Adapter caseComparable(Comparable<T> object) {

+				return createComparableAdapter();

+			}

+			@Override

+			public Adapter caseIdentifiable(Identifiable object) {

+				return createIdentifiableAdapter();

+			}

+			@Override

+			public Adapter caseSolver(Solver object) {

+				return createSolverAdapter();

+			}

+			@Override

+			public Adapter defaultCase(EObject object) {

+				return createEObjectAdapter();

+			}

+		};

+

+	/**

+	 * Creates an adapter for the <code>target</code>.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @param target the object to adapt.

+	 * @return the adapter for the <code>target</code>.

+	 * @generated

+	 */

+	@Override

+	public Adapter createAdapter(Notifier target) {

+		return modelSwitch.doSwitch((EObject)target);

+	}

+

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.solvers.rk.RungeKutta <em>Runge Kutta</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.solvers.rk.RungeKutta

+	 * @generated

+	 */

+	public Adapter createRungeKuttaAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see java.lang.Comparable

+	 * @generated

+	 */

+	public Adapter createComparableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.common.Identifiable

+	 * @generated

+	 */

+	public Adapter createIdentifiableAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.solver.Solver <em>Solver</em>}'.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null so that we can easily ignore cases;

+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @see org.eclipse.stem.core.solver.Solver

+	 * @generated

+	 */

+	public Adapter createSolverAdapter() {

+		return null;

+	}

+

+	/**

+	 * Creates a new adapter for the default case.

+	 * <!-- begin-user-doc -->

+	 * This default implementation returns null.

+	 * <!-- end-user-doc -->

+	 * @return the new adapter.

+	 * @generated

+	 */

+	public Adapter createEObjectAdapter() {

+		return null;

+	}

+

+} //RkAdapterFactory

diff --git a/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkSwitch.java b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkSwitch.java
new file mode 100644
index 0000000..6fb87fd
--- /dev/null
+++ b/org.eclipse.stem.solvers.rk/src/org/eclipse/stem/solvers/rk/util/RkSwitch.java
@@ -0,0 +1,188 @@
+package org.eclipse.stem.solvers.rk.util;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.stem.core.common.Identifiable;

+

+import org.eclipse.stem.core.solver.Solver;

+

+import org.eclipse.stem.solvers.rk.*;

+

+/**

+ * <!-- begin-user-doc -->

+ * The <b>Switch</b> for the model's inheritance hierarchy.

+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}

+ * to invoke the <code>caseXXX</code> method for each class of the model,

+ * starting with the actual class of the object

+ * and proceeding up the inheritance hierarchy

+ * until a non-null result is returned,

+ * which is the result of the switch.

+ * <!-- end-user-doc -->

+ * @see org.eclipse.stem.solvers.rk.RkPackage

+ * @generated

+ */

+@SuppressWarnings("all")

+public class RkSwitch<T1> {

+	/**

+	 * The cached model package

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected static RkPackage modelPackage;

+

+	/**

+	 * Creates an instance of the switch.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkSwitch() {

+		if (modelPackage == null) {

+			modelPackage = RkPackage.eINSTANCE;

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	public T1 doSwitch(EObject theEObject) {

+		return doSwitch(theEObject.eClass(), theEObject);

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {

+		if (theEClass.eContainer() == modelPackage) {

+			return doSwitch(theEClass.getClassifierID(), theEObject);

+		}

+		else {

+			List<EClass> eSuperTypes = theEClass.getESuperTypes();

+			return

+				eSuperTypes.isEmpty() ?

+					defaultCase(theEObject) :

+					doSwitch(eSuperTypes.get(0), theEObject);

+		}

+	}

+

+	/**

+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the first non-null result returned by a <code>caseXXX</code> call.

+	 * @generated

+	 */

+	protected T1 doSwitch(int classifierID, EObject theEObject) {

+		switch (classifierID) {

+			case RkPackage.RUNGE_KUTTA: {

+				RungeKutta rungeKutta = (RungeKutta)theEObject;

+				T1 result = caseRungeKutta(rungeKutta);

+				if (result == null) result = caseSolver(rungeKutta);

+				if (result == null) result = caseIdentifiable(rungeKutta);

+				if (result == null) result = caseComparable(rungeKutta);

+				if (result == null) result = defaultCase(theEObject);

+				return result;

+			}

+			default: return defaultCase(theEObject);

+		}

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Runge Kutta</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Runge Kutta</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseRungeKutta(RungeKutta object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public <T> T1 caseComparable(Comparable<T> object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseIdentifiable(Identifiable object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>Solver</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)

+	 * @generated

+	 */

+	public T1 caseSolver(Solver object) {

+		return null;

+	}

+

+	/**

+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * <!-- begin-user-doc -->

+	 * This implementation returns null;

+	 * returning a non-null result will terminate the switch, but this is the last case anyway.

+	 * <!-- end-user-doc -->

+	 * @param object the target of the switch.

+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.

+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)

+	 * @generated

+	 */

+	public T1 defaultCase(EObject object) {

+		return null;

+	}

+

+} //RkSwitch

diff --git a/org.eclipse.stem.tests.automaticexperiment/.classpath b/org.eclipse.stem.tests.automaticexperiment/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.tests.automaticexperiment/.project b/org.eclipse.stem.tests.automaticexperiment/.project
new file mode 100644
index 0000000..afaff2f
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.tests.automaticexperiment</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.tests.automaticexperiment/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.automaticexperiment/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..462c0cc
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: STEM Automatic Experiment Test Suite
+Bundle-SymbolicName: org.eclipse.stem.tests.automaticexperiment
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.emf.ecore,
+ org.junit;visibility:=reexport,
+ org.eclipse.stem.analysis,
+ org.eclipse.stem.core,
+ org.eclipse.stem.tests.core,
+ org.eclipse.stem.tests.diseasemodels,
+ org.eclipse.stem.analysis.automaticexperiment
+Bundle-Vendor: Eclipse.org
diff --git a/org.eclipse.stem.tests.automaticexperiment/build.properties b/org.eclipse.stem.tests.automaticexperiment/build.properties
new file mode 100644
index 0000000..41eb6ad
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/build.properties
@@ -0,0 +1,4 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .

diff --git a/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/AutomaticExperimentTest.java b/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/AutomaticExperimentTest.java
new file mode 100644
index 0000000..e7b24f9
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/AutomaticExperimentTest.java
@@ -0,0 +1,123 @@
+package org.eclipse.stem.tests.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2008 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.io.FileNotFoundException;

+import java.io.IOException;

+

+import junit.textui.TestRunner;

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.stem.analysis.automaticexperiment.ErrorAnalysisAlgorithm;

+import org.eclipse.stem.analysis.automaticexperiment.ErrorAnalysisAlgorithmFactory;

+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;

+import org.eclipse.stem.core.common.tests.IdentifiableTest;

+

+import automaticexperiment.AutomaticExperiment;

+

+public class AutomaticExperimentTest 

+	extends IdentifiableTest {

+	

+	private final static String AUTOMATIC_EXPERIMENT_FILE = "D:/Development/Workspaces/STEM-runtime/IsrSIRflu/experiments/sample.automaticexperiment"; //$NON-NLS-1$

+

+	public static void main(String[] args) {

+		TestRunner.run(AutomaticExperimentTest.class);

+	}

+

+	public AutomaticExperimentTest(String name) {

+		super(name);

+	}

+

+	/**

+	 * Returns the fixture for this Experiment test case.

+	 * <!-- begin-user-doc

+	 * --> <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected AutomaticExperiment getFixture() {

+		return (AutomaticExperiment)fixture;

+	}

+

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @see junit.framework.TestCase#setUp()

+	 * @generated NOT

+	 */

+	@Override

+	protected void setUp() throws Exception {

+		setFixture(createFixture());

+	}

+

+	/**

+	 * <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * @see junit.framework.TestCase#tearDown()

+	 * @generated

+	 */

+	@Override

+	protected void tearDown() throws Exception {

+		setFixture(null);

+	}

+

+	/**

+	 * Tests the '{@link org.eclipse.stem.core.experiment.Experiment#updateScenario() <em>Update Scenario</em>}'

+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->

+	 * 

+	 * @see org.eclipse.stem.core.experiment.Experiment#updateScenario()

+	 * @generated NOT

+	 */

+	public void testAutomaticExperiment() 

+	{

+		AutomaticExperiment automaticExperiment = getFixture();

+		assertNotNull(automaticExperiment);

+		String algorithmName = automaticExperiment.getErrorAnalysisAlgorithm();

+		ErrorAnalysisAlgorithm algorithm = 

+			ErrorAnalysisAlgorithmFactory.INSTANCE.createErrorAnalysisAlgorithm(algorithmName);

+		assertNotNull(algorithm);

+		algorithm.init(automaticExperiment);

+		algorithm.execute();

+	}

+

+	/**

+	 * @return an {@link AutomaticExperiment} for testing.

+	 */

+	public static AutomaticExperiment createFixture() {

+		return loadAutomaticExperiment(AUTOMATIC_EXPERIMENT_FILE);

+	}

+	

+	static AutomaticExperiment loadAutomaticExperiment(final String filename) {

+		final ResourceSet resourceSet = new ResourceSetImpl();

+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", //$NON-NLS-1$

+				STEMXMIResourceFactoryImpl.INSTANCE);

+		resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put("platform", //$NON-NLS-1$

+				STEMXMIResourceFactoryImpl.INSTANCE);

+		final Resource resource = resourceSet.getResource(URI.createFileURI(filename), true);

+		try 

+		{			

+			resource.load(null);

+		} 

+		catch (FileNotFoundException e) 

+		{

+			e.printStackTrace();

+		} 

+		catch (IOException e) 

+		{

+			e.printStackTrace();

+		}

+		AutomaticExperiment toReturn = (AutomaticExperiment)resource.getContents().get(0);

+		return toReturn;

+	}

+}

diff --git a/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/NelderMeadAlgorithmTest.java b/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/NelderMeadAlgorithmTest.java
new file mode 100644
index 0000000..71cbb45
--- /dev/null
+++ b/org.eclipse.stem.tests.automaticexperiment/src/org/eclipse/stem/tests/automaticexperiment/NelderMeadAlgorithmTest.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.tests.automaticexperiment;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.Arrays;

+

+import org.eclipse.stem.analysis.automaticexperiment.NelderMeadAlgorithm;

+import org.eclipse.stem.analysis.automaticexperiment.SimplexFunction;

+

+import junit.framework.TestCase;

+

+public class NelderMeadAlgorithmTest extends TestCase {

+

+	public void testExecute() {

+		NelderMeadAlgorithm nelder = new NelderMeadAlgorithm();

+		double[] initStart = { 1.8, 1.2 };

+		double[] step = { 0.5, 0.5 };

+		nelder.execute(new SampleFunction(), initStart, step, 0.01, -1);

+		System.out.println("Results:");

+		System.out.println("Minimum Parameters - " + Arrays.toString(nelder.getMinimumParametersValues()));

+		System.out.println("Minimum Function Value - " + nelder.getMinimumFunctionValue());

+		assertTrue(Math.round(nelder.getMinimumParametersValues()[0]) == 3);

+		assertTrue(Math.round(nelder.getMinimumParametersValues()[1]) == 2);

+		assertTrue(Math.round(nelder.getMinimumFunctionValue()) == -7);

+	}

+	

+	class SampleFunction implements SimplexFunction {

+

+		public double getValue(double[] parameters) {

+			//f(x,y) = -4x + x^2 - y - xy + y^2

+			//Local minimum for this function is -7 at x=3 and y=2

+			double x = parameters[0];

+			double y = parameters[1];

+			double result = -4 * x;

+			result += Math.pow(x, 2);

+			result -= y;

+			result -= x * y;

+			result += Math.pow(y, 2);

+			System.out.println("Function value for x=" + x + ", y=" + y + " is: " + result);

+			return result;

+		}

+		

+	}

+

+}

diff --git a/org.eclipse.stem.tests.core/.classpath b/org.eclipse.stem.tests.core/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.core/.project b/org.eclipse.stem.tests.core/.project
new file mode 100644
index 0000000..30e29bb
--- /dev/null
+++ b/org.eclipse.stem.tests.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.core</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e4d0cdf
--- /dev/null
+++ b/org.eclipse.stem.tests.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:46:01 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.core/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fd90111
--- /dev/null
+++ b/org.eclipse.stem.tests.core/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.core;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.core.common.tests,
+ org.eclipse.stem.core.experiment.tests,
+ org.eclipse.stem.core.graph.tests,
+ org.eclipse.stem.core.model.tests,
+ org.eclipse.stem.core.scenario.tests,
+ org.eclipse.stem.core.sequencer.tests,
+ org.eclipse.stem.core.tests,
+ org.eclipse.stem.core.tests.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.tests.util,
+ org.junit;visibility:=reexport,
+ org.eclipse.stem.solvers.fd
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.core/build.properties b/org.eclipse.stem.tests.core/build.properties
new file mode 100644
index 0000000..6911558
--- /dev/null
+++ b/org.eclipse.stem.tests.core/build.properties
@@ -0,0 +1,14 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               temp/,\
+               epl-v10.html,\
+               notice.html,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.core/epl-v10.html b/org.eclipse.stem.tests.core/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.core/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/notice.html b/org.eclipse.stem.tests.core/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.core/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.core/plugin.properties b/org.eclipse.stem.tests.core/plugin.properties
new file mode 100644
index 0000000..0b20cb5
--- /dev/null
+++ b/org.eclipse.stem.tests.core/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Core Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryImplTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryImplTest.java
new file mode 100644
index 0000000..7fec51b
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryImplTest.java
@@ -0,0 +1,90 @@
+// HistoryProviderAdapterFactoryImplTest.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.adapters.history.HistoryProviderAdapterFactory.HistoryProviderAdapterFactoryImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This class is a JUnit test case for {@link HistoryProviderAdapterFactoryImpl}.
+ */
+@SuppressWarnings("all")
+public class HistoryProviderAdapterFactoryImplTest extends
+		HistoryProviderAdapterFactoryTest {
+
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public HistoryProviderAdapterFactory createFixture() {
+		return new HistoryProviderAdapterFactory.HistoryProviderAdapterFactoryImpl() {
+
+			@Override
+			public Object adapt(Object target, Object type) {
+				return new HistoryProviderAdapter() {
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getAllHistoricTimeValues()
+					 */
+					@Override
+					public STEMTime[] getAllHistoricTimeValues() {
+						return super.getAllHistoricTimeValues();
+					}
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getAllHistoricInstances()
+					 */
+					@Override
+					public Identifiable[] getAllHistoricInstances() {
+						return super.getAllHistoricInstances();
+					}
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getEarliestCycleNumber()
+					 */
+					@Override
+					public int getEarliestCycleNumber() {
+						return super.getEarliestCycleNumber();
+					}
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#getEarliestTimeValue()
+					 */
+					@Override
+					public STEMTime getEarliestTimeValue() {
+						return super.getEarliestTimeValue();
+					}
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.HistoryProviderAdapter#isAdapterForType(java.lang.Object)
+					 */
+					@Override
+					public boolean isAdapterForType(Object type) {
+						return super.isAdapterForType(type);
+					}
+				};
+			} // adapt
+		};
+	} // createFixture
+
+} // HistoryProviderAdapterFactoryImplTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..6d93772
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterFactoryTest.java
@@ -0,0 +1,44 @@
+// HistoryProviderAdapterFactoryTest.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for {@link HistoryProviderAdapterFactory}.
+ */
+abstract public class HistoryProviderAdapterFactoryTest extends TestCase {
+
+	/**
+	 * This is the factory under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected HistoryProviderAdapterFactory fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private HistoryProviderAdapterFactory getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final HistoryProviderAdapterFactory fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 */
+	public void testIsFactoryForTypeObject() {
+		final HistoryProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(HistoryProvider.class));
+	} // testIsFactoryForTypeObject
+
+} // HistoryProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterTest.java
new file mode 100644
index 0000000..f0ffc51
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/history/HistoryProviderAdapterTest.java
@@ -0,0 +1,45 @@
+// HistoryProviderAdapterTest.java
+package org.eclipse.stem.adapters.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for <code>HistoryProviderAdapter</code>'s. 
+ */
+abstract public class HistoryProviderAdapterTest extends TestCase {
+	/**
+	 * This is the adapter under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected HistoryProviderAdapter fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private HistoryProviderAdapter getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final HistoryProviderAdapter fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for
+	 * {@link HistoryProviderAdapter#isAdapterForType(Object)}
+	 */
+	public void testIsAdapterForType() {
+		final HistoryProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(HistoryProvider.class));
+	} // testIsAdapterForType
+
+} // HistoryProviderAdapterTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryImplTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryImplTest.java
new file mode 100644
index 0000000..1ca3344
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryImplTest.java
@@ -0,0 +1,57 @@
+// TimeProviderAdapterFactoryImplTest.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory.TimeProviderAdapterFactoryImpl;
+
+/**
+ * This class is a JUnit test case for {@link TimeProviderAdapterFactoryImpl}.
+ */
+@SuppressWarnings("all")
+public class TimeProviderAdapterFactoryImplTest extends
+		TimeProviderAdapterFactoryTest {
+
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public TimeProviderAdapterFactory createFixture() {
+		return new TimeProviderAdapterFactory.TimeProviderAdapterFactoryImpl() {
+
+			@Override
+			public Object adapt(final Object target, final Object type) {
+				return new TimeProviderAdapter() {
+
+					/**
+					 * @see org.eclipse.stem.adapters.history.
+					 * 	TimeProviderAdapter#isAdapterForType(java.lang.Object)
+					 */
+					@Override
+					public boolean isAdapterForType(final Object type) {
+						return super.isAdapterForType(type);
+					}
+				};
+			} // adapt
+		};
+	} // createFixture
+
+} // TimeProviderAdapterFactoryImplTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..3e14b23
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterFactoryTest.java
@@ -0,0 +1,43 @@
+// TimeProviderAdapterFactoryTest.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for {@link TimeProviderAdapterFactory}.
+ */
+abstract public class TimeProviderAdapterFactoryTest extends TestCase {
+
+	/**
+	 * This is the factory under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected TimeProviderAdapterFactory fixture = null;
+
+	private TimeProviderAdapterFactory getFixture() {
+		return fixture;
+	} // getFixture
+
+	protected void setFixture(final TimeProviderAdapterFactory fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 */
+	public void testIsFactoryForTypeObject() {
+		final TimeProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(TimeProvider.class));
+	} // testIsFactoryForTypeObject
+
+} // TimeProviderAdapterFactoryTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterTest.java
new file mode 100644
index 0000000..856911e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/adapters/time/TimeProviderAdapterTest.java
@@ -0,0 +1,44 @@
+// TimeProviderAdapterTest.java
+package org.eclipse.stem.adapters.time;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for {@link TimeProviderAdapter}s.
+ */
+abstract public class TimeProviderAdapterTest extends TestCase {
+	/**
+	 * This is the adapter under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected TimeProviderAdapter fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private TimeProviderAdapter getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final TimeProviderAdapter fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for {@link TimeProviderAdapter#isAdapterForType(Object)}
+	 */
+	public void testIsAdapterForType() {
+		final TimeProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(TimeProvider.class));
+	} // testIsAdapterForType
+
+} // TimeProviderAdapterTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonAllTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonAllTests.java
new file mode 100644
index 0000000..bcf186c
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonAllTests.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Common</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param args 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new CommonAllTests("Common Tests");
+		suite.addTest(CommonTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param name 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonAllTests(String name) {
+		super(name);
+	}
+
+} //CommonAllTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonTests.java
new file mode 100644
index 0000000..0d8bfab
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CommonTests.java
@@ -0,0 +1,59 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>common</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CommonTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param args 
+	 * <!-- end-user-doc --> 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public static Test suite() {
+		TestSuite suite = new CommonTests("common Tests");
+		suite.addTestSuite(DublinCoreTest.class);
+		suite.addTestSuite(IdentifiableImplTest.class);
+		return suite;
+	} // suite
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param name 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonTests(String name) {
+		super(name);
+	}
+
+} //CommonTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/ComparableTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/ComparableTest.java
new file mode 100644
index 0000000..5f4595a
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/ComparableTest.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Comparable</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class ComparableTest extends TestCase {
+
+	/**
+	 * The fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Comparable<?> fixture = null;
+
+	/**
+	 * Constructs a new Comparable test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComparableTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Comparable<?> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Comparable<?> getFixture() {
+		return fixture;
+	}
+
+} //ComparableTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CoreAllTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CoreAllTests.java
new file mode 100644
index 0000000..4b79cb5
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/CoreAllTests.java
@@ -0,0 +1,77 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.experiment.tests.ExperimentTests;
+import org.eclipse.stem.core.graph.tests.GraphTests;
+
+import org.eclipse.stem.core.model.tests.ModelTests;
+
+import org.eclipse.stem.core.modifier.tests.ModifierTests;
+import org.eclipse.stem.core.predicate.tests.PredicateTests;
+import org.eclipse.stem.core.scenario.tests.ScenarioTests;
+
+import org.eclipse.stem.core.sequencer.tests.SequencerTests;
+import org.eclipse.stem.core.solver.tests.SolverTests;
+import org.eclipse.stem.core.trigger.tests.TriggerTests;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Core</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CoreAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new CoreAllTests("Core Tests"); //$NON-NLS-1$
+		suite.addTest(CommonTests.suite());
+		suite.addTest(ExperimentTests.suite());
+		suite.addTest(GraphTests.suite());
+		suite.addTest(ModelTests.suite());
+		suite.addTest(ModifierTests.suite());
+		suite.addTest(PredicateTests.suite());
+		suite.addTest(ScenarioTests.suite());
+		suite.addTest(SequencerTests.suite());
+		suite.addTest(TriggerTests.suite());
+		suite.addTest(SolverTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreAllTests(String name) {
+		super(name);
+	}
+
+} //CoreAllTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/DublinCoreTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/DublinCoreTest.java
new file mode 100644
index 0000000..03e3210
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/DublinCoreTest.java
@@ -0,0 +1,318 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Calendar;
+import java.util.Date;
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.common.CommonFactory;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.impl.DublinCoreImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Dublin Core</b></em>'. <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.common.DublinCore#populate() <em>Populate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DublinCoreTest extends TestCase {
+	// Used when comparing Date instances for equality.
+	final long MILLISECOND_TOLERANCE = 60000;
+	
+	/**
+	 * The fixture for this Dublin Core test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected DublinCore fixture = null;
+
+	/**
+	 * @generated NOT
+	 */
+	protected static final String TEST_STRING = "Dublin Core test string";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DublinCoreTest.class);
+	}
+
+	/**
+	 * Constructs a new Dublin Core test case with the given name. <!--
+	 * begin-user-doc --> Constructs a new Dublin Core test case with the given
+	 * name.
+	 * 
+	 * @param name
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DublinCoreTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Dublin Core test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(DublinCore fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Dublin Core test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DublinCore getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(CommonFactory.eINSTANCE.createDublinCore());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.common.DublinCore#populate()
+	 * <em>Populate</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.common.DublinCore#populate()
+	 * @generated NOT
+	 */
+	public void testPopulate() {
+		final String correctDateString = DublinCoreImpl
+				.createISO8601DateString(Calendar.getInstance().getTime());
+		final DublinCore dc = getFixture();
+
+		final DublinCore tempDC = dc.populate();
+		assertTrue(tempDC == dc);
+
+		assertTrue(dc.getCreated().equals(correctDateString));
+		assertTrue(dc.getCreator().equals(System.getProperty("user.name")));
+	} // testPopulate
+
+	/**
+	 * Simple.
+	 */
+	public void testGetSetIdentifier() {
+		final DublinCore dc = getFixture();
+		assertNull(dc.getIdentifier());
+		dc.setIdentifier(TEST_STRING);
+		assertEquals(dc.getIdentifier(), TEST_STRING);
+	} // testGetSetIdentifier
+
+	/**
+	 * Test that setting the valid start date works
+	 */
+	public void testSetValidStartDate() {
+		final DublinCore dc = getFixture();
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(2006, Calendar.JUNE, 1);
+		final Date startDate = calendar.getTime();
+		dc.setValid(startDate);
+
+		final String validDatesValue = dc.getValid();
+		assertTrue(validDatesValue.equals(VALID_START_DATE));
+	} // testSetValidStartDate
+
+	public static final String VALID_START_DATE_STRING = "2006-06-01";
+
+	public static final String VALID_END_DATE_STRING = "2006-06-02";
+
+	public static final String VALID_START_DATE = DublinCoreImpl.START
+			+ VALID_START_DATE_STRING + ";";
+
+	public static final String VALID_START_AND_END_DATE = VALID_START_DATE
+			+ " " + DublinCoreImpl.END + VALID_END_DATE_STRING + ";";
+
+	public static final String VALID_START_AND_BAD_END_DATE = VALID_START_DATE
+			+ " " + DublinCoreImpl.END + "adfsf2" + ";";
+
+	/**
+	 * Test that setting the valid start and end dates works
+	 */
+	public void testSetValidStartEndDates() {
+		final DublinCore dc = getFixture();
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(2006, Calendar.JUNE, 1);
+		final Date startDate = calendar.getTime();
+		calendar.set(2006, Calendar.JUNE, 2);
+		final Date endDate = calendar.getTime();
+		dc.setValid(startDate, endDate);
+
+		final String validDatesValue = dc.getValid();
+		assertTrue(validDatesValue.equals(VALID_START_AND_END_DATE));
+	} // testSetValidStartEndDates
+
+	/**
+	 * Test that a {@link Date} can be created from the values in the valid
+	 * field.
+	 */
+	public void testGetValidStartDate() {
+		// The number of milliseconds two dates can differ by and still be
+		// considered "equal" Value: 1 minute
+		
+
+		final DublinCore dc = getFixture();
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(2006, Calendar.JUNE, 1, 0, 0, 0);
+		final Date startDate = calendar.getTime();
+		calendar.set(2006, Calendar.JUNE, 2, 0, 0, 0);
+		final Date endDate = calendar.getTime();
+
+		// Just a start date for the range
+		dc.setValid(startDate);
+		Date start = dc.getValidStartDate();
+		assertTrue(Math.abs(start.getTime() - startDate.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(dc.getValidEndDate() == null);
+
+		// A start and an end date for the range
+		dc.setValid(startDate, endDate);
+		start = dc.getValidStartDate();
+		Date end = dc.getValidEndDate();
+		assertTrue(Math.abs(start.getTime() - startDate.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(Math.abs(end.getTime() - endDate.getTime()) < MILLISECOND_TOLERANCE);
+
+		// No valid value
+		dc.setValid((String) null);
+		assertTrue(dc.getValidStartDate() == null);
+		assertTrue(dc.getValidEndDate() == null);
+
+		// Gibberish
+		dc.setValid("asdfasd23");
+		assertTrue(dc.getValidStartDate() == null);
+		assertTrue(dc.getValidEndDate() == null);
+
+		// Gibberish
+		dc.setValid(VALID_START_AND_BAD_END_DATE);
+		start = dc.getValidStartDate();
+		end = dc.getValidEndDate();
+		assertTrue(Math.abs(start.getTime() - startDate.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(dc.getValidEndDate() == null);
+	} // testGetValidStartDate
+
+	/**
+	 * Test that the valid date ranges can be compared.
+	 */
+	public void testIsValidBefore() {
+		final DublinCore dcYounger = getFixture();
+
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(2006, Calendar.JUNE, 1, 0, 0, 0); // June 1, 2006
+		final Date startDateYounger = calendar.getTime();
+		dcYounger.setValid(startDateYounger);
+
+		final DublinCore dcOlder = (DublinCore) EcoreUtil.copy(dcYounger);
+		calendar.set(2006, Calendar.JUNE, 2, 0, 0, 0); // June 2, 2006
+		final Date startDateOlder = calendar.getTime();
+		dcOlder.setValid(startDateOlder);
+
+		final DublinCore dcSameStart = (DublinCore) EcoreUtil.copy(dcYounger);
+		dcSameStart.setValid(startDateYounger);
+
+		assertTrue(dcYounger.isValidBefore(dcOlder));
+		assertFalse(dcOlder.isValidBefore(dcYounger));
+		assertFalse(dcYounger.isValidBefore(dcSameStart));
+
+	} // testIsValidBefore
+
+	/**
+	 * Test computing the overlap of valid date ranges.
+	 */
+	public void testComputeValidDateRangeOverlap() {
+		final DublinCore dc = getFixture();
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(2006, Calendar.JUNE, 1, 0, 0, 0); // June 1, 2006
+		final Date jun0106 = calendar.getTime();
+		calendar.set(2006, Calendar.JUNE, 30, 0, 0, 0); // June 30, 2006
+		final Date jun3006 = calendar.getTime();
+		dc.setValid(jun0106,jun3006);
+
+		// Only over laps start date
+		final DublinCore dcOverlapStart = (DublinCore) EcoreUtil.copy(dc);
+		calendar.set(2006, Calendar.MAY, 1, 0, 0, 0); // May 1, 2006
+		final Date may0106 = calendar.getTime();
+		calendar.set(2006, Calendar.JUNE, 15, 0, 0, 0); // June 15, 2006
+		final Date jun1506 = calendar.getTime();
+		dcOverlapStart.setValid(may0106,jun1506);
+
+		// In between...
+		final DublinCore dcBetween = (DublinCore) EcoreUtil.copy(dc);
+		calendar.set(2006, Calendar.JUNE, 2, 0, 0, 0); // June 2, 2006
+		final Date jun0206 = calendar.getTime();
+		dcBetween.setValid(jun0206,jun1506);
+
+		// Only overlaps end date
+		final DublinCore dcOverlapEnd = (DublinCore) EcoreUtil.copy(dc);
+		calendar.set(2006, Calendar.AUGUST, 1, 0, 0, 0); // August 1, 2006
+		final Date aug0106 = calendar.getTime();
+		dcOverlapEnd.setValid(jun0206,aug0106);
+
+		// No overlap
+		final DublinCore dcNoOverlap = (DublinCore) EcoreUtil.copy(dc);
+		calendar.set(2006, Calendar.AUGUST, 30, 0, 0, 0); // August 30, 2006
+		final Date aug3006 = calendar.getTime();
+		dcNoOverlap.setValid(aug3006,aug0106);
+
+		final Date[] overlapStart = dc.computeValidDateRangeOverlap(dcOverlapStart);
+		assertTrue(Math.abs(overlapStart[0].getTime() - jun0106.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(Math.abs(overlapStart[1].getTime() - jun1506.getTime()) < MILLISECOND_TOLERANCE);
+		
+		final Date[] between = dc.computeValidDateRangeOverlap(dcBetween);
+		assertTrue(Math.abs(between[0].getTime() - jun0206.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(Math.abs(between[1].getTime() - jun1506.getTime()) < MILLISECOND_TOLERANCE);
+		
+		final Date[] overlapEnd = dc.computeValidDateRangeOverlap(dcOverlapEnd);
+		assertTrue(Math.abs(overlapEnd[0].getTime() - jun0206.getTime()) < MILLISECOND_TOLERANCE);
+		assertTrue(Math.abs(overlapEnd[1].getTime() - jun3006.getTime()) < MILLISECOND_TOLERANCE);
+		
+		final Date[] noOverlapEnd = dc.computeValidDateRangeOverlap(dcNoOverlap);
+		assertNull(noOverlapEnd);
+		
+	} // testComputeValidDateRangeOverlap
+
+} // DublinCoreTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableImplTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableImplTest.java
new file mode 100644
index 0000000..09443ce
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableImplTest.java
@@ -0,0 +1,41 @@
+// IdentifiableImplTest.java
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.impl.IdentifiableImpl;
+
+/**
+ * This class represents a JUnit test for Identifiable.
+ */
+@SuppressWarnings("all")
+public class IdentifiableImplTest extends IdentifiableTest {
+
+	/**
+	 * @param name
+	 */
+	public IdentifiableImplTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final Identifiable id = new IdentifiableImpl() {/* nothing */
+		};
+		setFixture(id);
+	} // setUp
+
+} // IdentifiableImplTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableTest.java
new file mode 100644
index 0000000..38f9d68
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/common/tests/IdentifiableTest.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.core.common.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+
+import junit.framework.TestCase;
+
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Identifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.common.Identifiable#sane() <em>Sane</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class IdentifiableTest extends TestCase {
+
+	private static final URI TEST_URI = URI.createURI("http://testuri");
+
+	private static final URI TEST_TYPE_URI = URI
+			.createURI("http://testtypeuri");
+
+	/**
+	 * The fixture for this Identifiable test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected Identifiable fixture = null;
+
+	/**
+	 * Constructs a new Identifiable test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 *            <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Identifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Identifiable fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Identifiable test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Identifiable getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.common.Identifiable#sane() <em>Sane</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.common.Identifiable#sane()
+	 * @generated NOT
+	 */
+	public void testSane() {
+		final Identifiable identifiable = getFixture();
+		assertTrue(identifiable.sane());
+	} // testSane
+
+	/**
+	 * Test that when setURI is called, it also updates the Identifier of the
+	 * Identifiable's DublinCore instance.
+	 * 
+	 * @generated NOT
+	 */
+	public void testSetURI() {
+		final Identifiable id = getFixture();
+		final DublinCore dc = id.getDublinCore();
+
+		assertTrue(id.getURI().toString().equals(dc.getIdentifier()));
+		assertFalse(TEST_URI.toString().equals(dc.getIdentifier()));
+		assertFalse(id.getURI().equals(TEST_URI));
+
+		id.setURI(TEST_URI);
+
+		assertTrue(id.getURI().toString().equals(dc.getIdentifier()));
+		assertTrue(TEST_URI.toString().equals(dc.getIdentifier()));
+		assertTrue(id.getURI().equals(TEST_URI));
+	} // testSetURI
+
+	/**
+	 * Test that when setTypeURI is called, it also updates the Type of the
+	 * Identifiable's DublinCore instance.
+	 * 
+	 * @generated NOT
+	 */
+	public void testSetTypeURI() {
+		final Identifiable id = getFixture();
+		final DublinCore dc = id.getDublinCore();
+
+		assertTrue(id.getTypeURI().toString().equals(dc.getType()));
+		assertFalse(TEST_TYPE_URI.toString().equals(dc.getType()));
+		assertFalse(id.getTypeURI().equals(TEST_TYPE_URI));
+
+		id.setTypeURI(TEST_TYPE_URI);
+
+		assertTrue(id.getTypeURI().toString().equals(dc.getType()));
+		assertTrue(TEST_TYPE_URI.toString().equals(dc.getType()));
+		assertTrue(id.getTypeURI().equals(TEST_TYPE_URI));
+	} // testSetTypeURI
+} // IdentifiableTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTest.java
new file mode 100644
index 0000000..d04eda4
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTest.java
@@ -0,0 +1,380 @@
+package org.eclipse.stem.core.experiment.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.experiment.Experiment;
+import org.eclipse.stem.core.experiment.ExperimentFactory;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.RangeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+import org.eclipse.stem.core.modifier.tests.DoubleRangeModifierTest;
+import org.eclipse.stem.core.modifier.tests.IntegerRangeModifierTest;
+import org.eclipse.stem.core.modifier.tests.STEMTimeRangeModifierTest;
+import org.eclipse.stem.core.modifier.tests.StringSequenceModifierTest;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Experiment</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.experiment.Experiment#isComplete() <em>Complete</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.experiment.Experiment#updateScenario() <em>Update Scenario</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.experiment.Experiment#initScenario() <em>Init Scenario</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ExperimentTest extends IdentifiableTest {
+
+	public static final Boolean BSM_START_VALUE = Boolean.TRUE;
+	public static final Boolean BSM_END_VALUE = Boolean.FALSE;
+
+	static protected Scenario baseScenario;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ExperimentTest.class);
+	}
+
+	/**
+	 * Constructs a new Experiment test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ExperimentTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Experiment test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Experiment getFixture() {
+		return (Experiment)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		baseScenario = createBaseScenario();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test that the fixture is "sane"
+	 * 
+	 * @see SanityChecker
+	 */
+	public void testFixtureSanity() {
+		final SanityChecker fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.experiment.Experiment#getModificationSummary() <em>Modification Summary</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.experiment.Experiment#getModificationSummary()
+	 * @generated NOT
+	 */
+	public void testGetModificationSummary() {
+		final Experiment fixture = getFixture();
+		List<String> summary = fixture.getModificationSummary();
+		assertNotNull(summary);
+		assertTrue(summary.size() > 0);
+	} // testGetModificationSummary
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.experiment.Experiment#isComplete() <em>Complete</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.experiment.Experiment#isComplete()
+	 * @generated NOT
+	 */
+	public void testIsComplete() {
+		// TODO testIsComplete
+		final Experiment fixture = getFixture();
+		assertFalse(fixture.isComplete());
+	} // testIsComplete
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.experiment.Experiment#updateScenario() <em>Update Scenario</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.experiment.Experiment#updateScenario()
+	 * @generated NOT
+	 */
+	public void testUpdateScenario() {
+		final Experiment fixture = getFixture();
+		while (!fixture.isComplete()) {
+			final Scenario updatedScenario = fixture.updateScenario();
+			assertTrue(updatedScenario.sane());
+		} // while !fixture.isComplete()
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.experiment.Experiment#initScenario() <em>Init Scenario</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.experiment.Experiment#initScenario()
+	 * @generated NOT
+	 */
+	public void testInitScenario() {
+		assertTrue(true);
+	}
+
+	/**
+	 * @return an {@link Experiment} for testing.
+	 */
+	public static Experiment createFixture() {
+		final Experiment retValue = ExperimentFactory.eINSTANCE
+				.createExperiment();
+		retValue.setScenario(baseScenario);
+		retValue.getModifiers().add(createRangeModifier(baseScenario));
+		// retValue.getModifiers().add(createSequenceModifier(baseScenario));
+		retValue.getDublinCore().populate();
+
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @param baseScenario
+	 * @return a {@link Modifier} that contains {@link SequenceModifier}s.
+	 */
+	@SuppressWarnings({ "boxing", "unused" })
+	private static Modifier createSequenceModifier(Scenario baseScenario) {
+		final Modifier retValue = ModifierFactory.eINSTANCE.createModifier();
+
+		// Descend into the Scenario looking for something with a double field
+		final EList<Decorator> scenarioDecorators = baseScenario
+				.getScenarioDecorators();
+
+		for (Decorator decorator : scenarioDecorators) {
+			// Look through the attributes in the decorator
+			for (EAttribute attribute : decorator.eClass().getEAllAttributes()) {
+
+				// Is this a double?
+				if (attribute.getEAttributeType().equals(
+						EcorePackage.Literals.EDOUBLE)) {
+					// Yes
+					final DoubleSequenceModifier dsm = ModifierFactory.eINSTANCE
+							.createDoubleSequenceModifier();
+					dsm.getSequence().add(
+							DoubleRangeModifierTest.DRM_START_VALUE);
+					dsm.getSequence()
+							.add(DoubleRangeModifierTest.DRM_END_VALUE);
+					dsm.setEStructuralFeature(attribute);
+					retValue.setTargetURI(decorator.getURI());
+					retValue.getFeatureModifiers().add(dsm);
+				} // if double
+				// Is this an integer?
+				else if (attribute.getEAttributeType().equals(
+						EcorePackage.Literals.EINT)) {
+					// Yes
+					final IntegerSequenceModifier ism = ModifierFactory.eINSTANCE
+							.createIntegerSequenceModifier();
+					ism.getSequence().add(
+							IntegerRangeModifierTest.IRM_START_VALUE);
+					ism.getSequence().add(
+							IntegerRangeModifierTest.IRM_END_VALUE);
+					ism.setEStructuralFeature(attribute);
+					retValue.setTargetURI(decorator.getURI());
+					retValue.getFeatureModifiers().add(ism);
+				} // if integer
+				// Is this a boolean?
+				// else if (attribute.getEAttributeType().equals(
+				// EcorePackage.Literals.EBOOLEAN)) {
+				// // Yes
+				// final SequenceModifier bsm = ModifierFactory.eINSTANCE
+				// .createSequenceModifier();
+				// bsm.getSequence().add(BSM_START_VALUE);
+				// bsm.getSequence().add(BSM_END_VALUE);
+				// bsm.setEStructuralFeature(attribute);
+				// retValue.setTargetURI(decorator.getURI());
+				// retValue.getFeatureModifiers().add(bsm);
+				// } // if boolean
+				// Is this a String?
+				else if (attribute.getEAttributeType().equals(
+						EcorePackage.Literals.ESTRING)) {
+					// Yes
+					final StringSequenceModifier ssm = ModifierFactory.eINSTANCE
+							.createStringSequenceModifier();
+					ssm.getSequence().add(
+							StringSequenceModifierTest.STRING_START_VALUE);
+					ssm.getSequence().add(
+							StringSequenceModifierTest.STRING_END_VALUE);
+					ssm.setEStructuralFeature(attribute);
+					retValue.setTargetURI(decorator.getURI());
+					retValue.getFeatureModifiers().add(ssm);
+				} // if String
+			} // for each EAttribute
+
+			// Now look through the references
+			for (EReference reference : decorator.eClass().getEAllReferences()) {
+				if (retValue.getFeatureModifiers().size() > 0) {
+					// Is this an STEMTime?
+					if (reference.getEType().equals(
+							ModelPackage.Literals.STEM_TIME)) {
+						// Yes
+						final STEMTimeRangeModifier strm = ModifierFactory.eINSTANCE
+								.createSTEMTimeRangeModifier();
+						strm
+								.setStartValue(STEMTimeRangeModifierTest.STEM_TIME_START_VALUE);
+						strm
+								.setEndValue(STEMTimeRangeModifierTest.STEM_TIME_END_VALUE);
+						strm
+								.setIncrement(STEMTimeRangeModifierTest.STEM_TIME_INCREMENT_VALUE);
+						strm.setEStructuralFeature(reference);
+						retValue.getFeatureModifiers().add(strm);
+					} // if STEMTime
+				} // for each EReference
+				// Did we find one?
+				// Yes
+				break;
+			} // if
+		} // for each Decorator
+
+		return retValue;
+	} // createSequenceModifier
+
+	/**
+	 * @param baseScenario
+	 * @return a {@link Modifier} that contains {@link RangeModifier}s.
+	 */
+	private static Modifier createRangeModifier(final Scenario baseScenario) {
+		final Modifier retValue = ModifierFactory.eINSTANCE.createModifier();
+
+		// Descend into the Scenario looking for something with a double field
+		final EList<Decorator> scenarioDecorators = baseScenario
+				.getScenarioDecorators();
+
+		for (Decorator decorator : scenarioDecorators) {
+			// Look through the attributes in the decorator
+			for (EAttribute attribute : decorator.eClass().getEAllAttributes()) {
+
+				// Is this a double?
+				if (attribute.getEAttributeType().equals(
+						EcorePackage.Literals.EDOUBLE)) {
+					// Yes
+					final DoubleRangeModifier drm = ModifierFactory.eINSTANCE
+							.createDoubleRangeModifier();
+					drm.setStartValue(DoubleRangeModifierTest.DRM_START_VALUE);
+					drm.setEndValue(DoubleRangeModifierTest.DRM_END_VALUE);
+					drm
+							.setIncrement(DoubleRangeModifierTest.DRM_INCREMENT_VALUE);
+					drm.setEStructuralFeature(attribute);
+					retValue.getFeatureModifiers().add(drm);
+				} // if double
+				// Is this an integer?
+				else if (attribute.getEAttributeType().equals(
+						EcorePackage.Literals.EINT)) {
+					// Yes
+					final IntegerRangeModifier irm = ModifierFactory.eINSTANCE
+							.createIntegerRangeModifier();
+					irm.setStartValue(IntegerRangeModifierTest.IRM_START_VALUE);
+					irm.setEndValue(IntegerRangeModifierTest.IRM_END_VALUE);
+					irm
+							.setIncrement(IntegerRangeModifierTest.IRM_INCREMENT_VALUE);
+					irm.setEStructuralFeature(attribute);
+					retValue.getFeatureModifiers().add(irm);
+				} // if integer
+
+			} // for each EAttribute
+
+//			// Now look through the references
+//			for (EReference reference : decorator.eClass().getEAllReferences()) {
+//				// Is this an STEMTime?
+//				if (reference.getEType()
+//						.equals(ModelPackage.Literals.STEM_TIME)) {
+//					// Yes
+//					final STEMTimeRangeModifier strm = ModifierFactory.eINSTANCE
+//							.createSTEMTimeRangeModifier();
+//					strm
+//							.setStartValue(STEMTimeRangeModifierTest.STEM_TIME_START_VALUE);
+//					strm
+//							.setEndValue(STEMTimeRangeModifierTest.STEM_TIME_END_VALUE);
+//					strm
+//							.setIncrement(STEMTimeRangeModifierTest.STEM_TIME_INCREMENT_VALUE);
+//					strm.setEStructuralFeature(reference);
+//					retValue.getFeatureModifiers().add(strm);
+//				} // if STEMTime
+//			} // for each EReference
+			
+			// Anything?
+			if (retValue.getFeatureModifiers().size() > 0) {
+				// Yes
+				retValue.setTargetURI(decorator.getURI());
+				break;
+			} // if 
+		} // for each Decorator
+
+		return retValue;
+	} // createRangeModifier
+
+	/**
+	 * @return a base {@link Scenario} for testing
+	 */
+	static Scenario createBaseScenario() {
+		return ScenarioTest.createFixture();
+	}
+
+} // ExperimentTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTests.java
new file mode 100644
index 0000000..f16d299
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/experiment/tests/ExperimentTests.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.core.experiment.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>experiment</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExperimentTests("experiment Tests"); //$NON-NLS-1$
+		suite.addTestSuite(ExperimentTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentTests(String name) {
+		super(name);
+	}
+
+} //ExperimentTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicEdgeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicEdgeLabelTest.java
new file mode 100644
index 0000000..3afd982
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicEdgeLabelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Dynamic Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class DynamicEdgeLabelTest extends DynamicLabelTest {
+	/**
+	 * Constructs a new Dynamic Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DynamicEdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Dynamic Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DynamicEdgeLabel getFixture() {
+		return (DynamicEdgeLabel)fixture;
+	}
+
+} //DynamicEdgeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicLabelTest.java
new file mode 100644
index 0000000..7223c05
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicLabelTest.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Dynamic Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.DynamicLabel#reset() <em>Reset</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue() <em>Switch To Next Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public abstract class DynamicLabelTest extends LabelTest {
+
+	/**
+	 * Constructs a new Dynamic Label test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public DynamicLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Dynamic Label test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DynamicLabel getFixture() {
+		return (DynamicLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.DynamicLabel#reset() <em>Reset</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#reset()
+	 * @generated NOT
+	 */
+	public void testReset() {
+		final DynamicLabel dynamicLabel = getFixture();
+		assertFalse(dynamicLabel.isNextValueValid());
+		dynamicLabel.setNextValueValid(true);
+		dynamicLabel.reset();
+		assertFalse(dynamicLabel.isNextValueValid());
+	} // testReset
+
+	/**
+	 * @return a DynamicLabel
+	 */
+	public DynamicLabel createFixture() {
+		return TestUtil.createDynamicLabel(TestUtil
+				.createNextIdentifiableToLabelURI());
+	} // createFixture
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final DynamicLabel dynamicLabel = getFixture();
+		assertTrue(dynamicLabel.sane());
+	} // testSane
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue() <em>Switch To Next Value</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue()
+	 * @generated NOT
+	 */
+	public void testSwitchToNextValue() {
+		final DynamicLabel dynamicLabel = getFixture();
+		final LabelValue oldCurrentValue = dynamicLabel.getCurrentValue();
+		final LabelValue oldNextValue = dynamicLabel.getNextValue();
+
+		assertTrue(oldCurrentValue != oldNextValue);
+		assertTrue(dynamicLabel.getCurrentValue() == oldCurrentValue);
+		assertTrue(dynamicLabel.getNextValue() == oldNextValue);
+
+		assertFalse(dynamicLabel.isNextValueValid());
+		dynamicLabel.setNextValueValid(true);
+		assertTrue(dynamicLabel.isNextValueValid());
+
+		// Here's the big S W I T C H!
+		dynamicLabel.switchToNextValue();
+
+		assertFalse(dynamicLabel.isNextValueValid());
+
+		assertFalse(dynamicLabel.getCurrentValue() == oldCurrentValue);
+		assertFalse(dynamicLabel.getNextValue() == oldNextValue);
+		assertTrue(dynamicLabel.getCurrentValue() == oldNextValue);
+		assertTrue(dynamicLabel.getNextValue() == oldCurrentValue);
+
+	} // testSwitchToNextValue
+
+	/**
+	 * Test the Dynamic Label has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Label label = getFixture();
+		assertTrue(label.getTypeURI().equals(
+				DynamicLabel.URI_TYPE_DYNAMIC_LABEL));
+	} // testGetTypeURI
+
+} // DynamicLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicNodeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicNodeLabelTest.java
new file mode 100644
index 0000000..742adfe
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/DynamicNodeLabelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Dynamic Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class DynamicNodeLabelTest extends DynamicLabelTest {
+	/**
+	 * Constructs a new Dynamic Node Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DynamicNodeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Dynamic Node Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DynamicNodeLabel getFixture() {
+		return (DynamicNodeLabel)fixture;
+	}
+
+} //DynamicNodeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeLabelTest.java
new file mode 100644
index 0000000..ba2b65d
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeLabelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.EdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class EdgeLabelTest extends LabelTest {
+	/**
+	 * Constructs a new Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EdgeLabel getFixture() {
+		return (EdgeLabel)fixture;
+	}
+
+} //EdgeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeTest.java
new file mode 100644
index 0000000..92228d5
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/EdgeTest.java
@@ -0,0 +1,168 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.graph.Edge;
+//import org.eclipse.stem.core.graph.GraphFactory;
+
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.Edge#getOtherNode(org.eclipse.stem.core.graph.Node) <em>Get Other Node</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Edge#isDirectedAt(org.eclipse.stem.core.graph.Node) <em>Is Directed At</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class EdgeTest extends IdentifiableTest {
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(EdgeTest.class);
+	}
+
+	/**
+	 * Constructs a new Edge test case with the given name.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Edge test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Edge getFixture() {
+		return (Edge)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a statically labeled edge
+	 */
+	public Edge createFixture() {
+		final Node nodeA = TestUtil.createStaticallyLabeledNode();
+		final Node nodeB = TestUtil.createStaticallyLabeledNode();
+		final Edge edge = TestUtil.createStaticallyLabeledEdge(nodeA.getURI(),
+				nodeB.getURI());
+
+		edge.setA(nodeA);
+		edge.setB(nodeB);
+		nodeA.getEdges().add(edge);
+		nodeB.getEdges().add(edge);
+
+		assert edge.sane();
+
+		return edge;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final Edge edge = getFixture();
+		assertTrue(edge.sane());
+	} // testSane
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Edge#getOtherNode(org.eclipse.stem.core.graph.Node) <em>Get Other Node</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Edge#getOtherNode(org.eclipse.stem.core.graph.Node)
+	 * @generated NOT
+	 */
+	public void testGetOtherNode__Node() {
+		final Edge edge = getFixture();
+		final Node nodeA = edge.getA();
+		final Node nodeB = edge.getB();
+
+		assertEquals(edge.getOtherNode(nodeB), nodeA);
+		assertEquals(edge.getOtherNode(nodeA), nodeB);
+	} // testGetOtherNode__Node
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Edge#isDirectedAt(org.eclipse.stem.core.graph.Node) <em>Is Directed At</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Edge#isDirectedAt(org.eclipse.stem.core.graph.Node)
+	 * @generated NOT
+	 */
+	public void testIsDirectedAt__Node() {
+		final Edge edge = getFixture();
+		final Node nodeA = edge.getA();
+		final Node nodeB = edge.getB();
+
+		edge.setDirected(false);
+		assertFalse(edge.isDirected());
+
+		assertFalse(edge.isDirectedAt(nodeA));
+		assertFalse(edge.isDirectedAt(nodeB));
+
+		edge.setDirected(true);
+		assertTrue(edge.isDirected());
+
+		assertFalse(edge.isDirectedAt(nodeA));
+		assertTrue(edge.isDirectedAt(nodeB));
+
+	} // testIsDirectedAt__Node
+
+	/**
+	 * Test the Edge has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Edge edge = getFixture();
+		assertTrue(edge.getTypeURI().equals(STEMURI.EDGE_TYPE_URI));
+	} // testGetTypeURI
+
+} // EdgeTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphAllTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphAllTests.java
new file mode 100644
index 0000000..220f8f4
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphAllTests.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Graph</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new GraphAllTests("Graph Tests");
+		suite.addTest(GraphTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphAllTests(String name) {
+		super(name);
+	}
+
+} //GraphAllTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTest.java
new file mode 100644
index 0000000..2ee8161
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTest.java
@@ -0,0 +1,841 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Graph</b></em>'. <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNumEdges() <em>Num Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNumNodes() <em>Num Nodes</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNumGraphLabels() <em>Num Graph Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNumNodeLabels() <em>Num Node Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNumDynamicLabels() <em>Num Dynamic Labels</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNodeLabelsByTypeURI(org.eclipse.emf.common.util.URI) <em>Get Node Labels By Type URI</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#addGraph(org.eclipse.stem.core.graph.Graph) <em>Add Graph</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#putEdge(org.eclipse.stem.core.graph.Edge) <em>Put Edge</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getEdge(org.eclipse.emf.common.util.URI) <em>Get Edge</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#putNode(org.eclipse.stem.core.graph.Node) <em>Put Node</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNode(org.eclipse.emf.common.util.URI) <em>Get Node</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#putNodeLabel(org.eclipse.stem.core.graph.NodeLabel) <em>Put Node Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getNodeLabel(org.eclipse.emf.common.util.URI) <em>Get Node Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#putGraphLabel(org.eclipse.stem.core.graph.Label) <em>Put Graph Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#getGraphLabel(org.eclipse.emf.common.util.URI) <em>Get Graph Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#addDynamicLabel(org.eclipse.stem.core.graph.DynamicLabel) <em>Add Dynamic Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.Graph#switchToNextValue(org.eclipse.stem.core.model.STEMTime) <em>Switch To Next Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GraphTest extends IdentifiableTest {
+
+	private static final STEMTime SWITCH_TIME = ModelFactory.eINSTANCE
+			.createSTEMTime();
+
+	protected static final URI GRAPH1_URI = STEMURI
+			.createURI("graph/testgraph1");
+
+	protected static final URI GRAPH2_URI = STEMURI.createURI("graph/g2");
+
+	// The parameters for the graph ("main") to be added to
+	private static final int MAIN_NUM_DYNAMIC_EDGE_LABELS = 1;
+
+	private static final int MAIN_NUM_STATIC_EDGE_LABELS = 1;
+
+	private static final int MAIN_NUM_DYNAMIC_GRAPH_LABELS = 1;
+
+	private static final int MAIN_NUM_STATIC_GRAPH_LABELS = 1;
+
+	private static final int MAIN_NUM_STATIC_NODE_LABELS = 2;
+
+	private static final int MAIN_NUM_DYNAMIC_NODE_LABELS = 2 * MAIN_NUM_DYNAMIC_EDGE_LABELS;
+
+	private static final int MAIN_NUM_EDGES = MAIN_NUM_DYNAMIC_EDGE_LABELS
+			+ MAIN_NUM_STATIC_EDGE_LABELS;
+
+	private static final int MAIN_NUM_NODES = 2 * MAIN_NUM_EDGES;
+
+	private static final int MAIN_NUM_NODE_LABELS = MAIN_NUM_STATIC_NODE_LABELS
+			+ MAIN_NUM_DYNAMIC_NODE_LABELS;
+
+	private static final int MAIN_NUM_GRAPH_LABELS = MAIN_NUM_DYNAMIC_GRAPH_LABELS
+			+ MAIN_NUM_STATIC_GRAPH_LABELS;
+
+	private static final int MAIN_NUM_DYNAMIC_LABELS = MAIN_NUM_DYNAMIC_GRAPH_LABELS
+			+ MAIN_NUM_DYNAMIC_EDGE_LABELS + MAIN_NUM_DYNAMIC_NODE_LABELS;
+
+	// The parameters for the graph ("add") to be added
+	private static final int ADD_NUM_DYNAMIC_EDGE_LABELS = 2;
+
+	private static final int ADD_NUM_STATIC_EDGE_LABELS = 3;
+
+	private static final int ADD_NUM_STATIC_GRAPH_LABELS = 3;
+
+	private static final int ADD_NUM_DYNAMIC_GRAPH_LABELS = 2;
+
+	private static final int ADD_NUM_STATIC_NODE_LABELS = 2 * ADD_NUM_STATIC_EDGE_LABELS;
+
+	private static final int ADD_NUM_DYNAMIC_NODE_LABELS = 2 * ADD_NUM_DYNAMIC_EDGE_LABELS;
+
+	private static final int ADD_NUM_EDGES = ADD_NUM_DYNAMIC_EDGE_LABELS
+			+ ADD_NUM_STATIC_EDGE_LABELS;
+
+	private static final int ADD_NUM_NODES = 2 * ADD_NUM_EDGES;
+
+	private static final int ADD_NUM_NODE_LABELS = ADD_NUM_STATIC_NODE_LABELS
+			+ ADD_NUM_DYNAMIC_NODE_LABELS;
+
+	private static final int ADD_NUM_GRAPH_LABELS = ADD_NUM_DYNAMIC_GRAPH_LABELS
+			+ ADD_NUM_STATIC_GRAPH_LABELS;
+
+	private static final int ADD_NUM_DYNAMIC_LABELS = ADD_NUM_DYNAMIC_GRAPH_LABELS
+			+ ADD_NUM_DYNAMIC_EDGE_LABELS + ADD_NUM_DYNAMIC_NODE_LABELS;
+
+	// Results after the "addGraph" operation
+
+	// private static final int RESULT_NUM_STATIC_NODE_LABELS = 0;
+
+	// private static final int RESULT_NUM_DYNAMIC_NODE_LABELS =
+	// MAIN_NUM_DYNAMIC_NODE_LABELS
+	// + ADD_NUM_DYNAMIC_NODE_LABELS;
+
+	private static final int RESULT_NUM_NODES = MAIN_NUM_NODES + ADD_NUM_NODES;
+
+	private static final int RESULT_NUM_EDGES = MAIN_NUM_EDGES + ADD_NUM_EDGES;
+
+	private static final int RESULT_NUM_NODE_LABELS = MAIN_NUM_NODE_LABELS
+			+ ADD_NUM_NODE_LABELS;
+
+	private static final int RESULT_NUM_GRAPH_LABELS = MAIN_NUM_GRAPH_LABELS
+			+ ADD_NUM_GRAPH_LABELS;
+
+	private static final int RESULT_NUM_DYNAMIC_LABELS = MAIN_NUM_DYNAMIC_LABELS
+			+ ADD_NUM_DYNAMIC_LABELS;
+
+	private static final URI SERIALZATION_TEST_URI = URI
+			.createURI("temp/testgraph1.graph");
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(GraphTest.class);
+	}
+
+	/**
+	 * Constructs a new Graph test case with the given name.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Graph test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Graph getFixture() {
+		return (Graph)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		TestUtil.resetCounters();
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a test graph
+	 */
+	public static Graph createFixture() {
+		final Graph retValue = GraphFactory.eINSTANCE.createGraph();
+		retValue.setURI(GRAPH1_URI);
+
+		populateGraph(MAIN_NUM_DYNAMIC_EDGE_LABELS,
+				MAIN_NUM_STATIC_EDGE_LABELS, MAIN_NUM_DYNAMIC_GRAPH_LABELS,
+				MAIN_NUM_STATIC_GRAPH_LABELS, retValue);
+
+		return retValue;
+	} // createFixture
+
+	/**
+	 * Add edges, nodes and labels to a graph.
+	 */
+	private static void populateGraph(
+			final int numberOfDynamicallyLabeledEdges,
+			final int numberOfStaticallyLabeledEdges,
+			final int numberOfDynamicallyLabeledGraphLabels,
+			final int numberOfStaticallyLabeledGraphLabels, final Graph graph) {
+
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		final TestEdgeDecorator1 ted = DecoratorsFactory.eINSTANCE
+				.createTestEdgeDecorator1();
+		final TestGraphDecorator1 tgd = DecoratorsFactory.eINSTANCE
+				.createTestGraphDecorator1();
+
+		graph.getDecorators().add(tnd);
+		graph.getDecorators().add(ted);
+		graph.getDecorators().add(tgd);
+		
+		populateDynamicallyLabeledEdges(graph, numberOfDynamicallyLabeledEdges,
+				tnd, ted);
+		populateStaticallyLabeledEdges(graph, numberOfStaticallyLabeledEdges,
+				tnd, ted, tgd);
+		populateDynamicGraphLabels(graph,
+				numberOfDynamicallyLabeledGraphLabels, tgd);
+		populateStaticGraphLabels(graph, numberOfStaticallyLabeledGraphLabels);
+
+	} // populateGraph
+
+	/**
+	 * @param graph
+	 * @param numberOfStaticallyLabeledGraphLabels
+	 */
+	private static void populateStaticGraphLabels(Graph graph,
+			int numberOfStaticallyLabeledGraphLabels) {
+		for (int staticGraphLabelNumber = 0; staticGraphLabelNumber < numberOfStaticallyLabeledGraphLabels; staticGraphLabelNumber++) {
+			final Label graphLabel = TestUtil.createStaticLabel(graph.getURI());
+			graph.putGraphLabel(graphLabel);
+		} // for labelNumber
+	} // populateStaticGraphLabels
+
+	/**
+	 * @param graph
+	 * @param numberOfDynamicallyLabeledGraphLabels
+	 * @param graphDecorator
+	 *            TODO
+	 */
+	private static void populateDynamicGraphLabels(Graph graph,
+			final int numberOfDynamicallyLabeledGraphLabels,
+		final	GraphDecorator graphDecorator) {
+		for (int dynamicGraphLabelNumber = 0; dynamicGraphLabelNumber < numberOfDynamicallyLabeledGraphLabels; dynamicGraphLabelNumber++) {
+			final DynamicLabel dynamicLabel = TestUtil.createDynamicLabel(graph
+					.getURI(), graphDecorator);
+
+			assert dynamicLabel.sane();
+
+			graph.putGraphLabel(dynamicLabel);
+		} // for labelNumber
+	} // populateDynamicGraphLabels
+
+	/**
+	 * 
+	 * @param graph
+	 * @param numberOfDynamicallyLabeledEdges
+	 * @param nodeDecorator
+	 *            TODO
+	 * @param edgeDecorator
+	 *            TODO
+	 */
+	private static void populateDynamicallyLabeledEdges(final Graph graph,
+			final int numberOfDynamicallyLabeledEdges,
+			NodeDecorator nodeDecorator, EdgeDecorator edgeDecorator) {
+
+		for (int edgeNumber = 0; edgeNumber < numberOfDynamicallyLabeledEdges; edgeNumber++) {
+			// Each edge adds two nodes to the graph, all three have dynamic
+			// labels
+			final Node nodeA = TestUtil
+					.createDynamicalyLabeledNode(nodeDecorator);
+			final Node nodeB = TestUtil
+					.createDynamicalyLabeledNode(nodeDecorator);
+			final Edge edge = TestUtil.createDynamicallyLabeledEdge(nodeA
+					.getURI(), nodeB.getURI(), edgeDecorator);
+
+			edge.setA(nodeA);
+			edge.setB(nodeB);
+			nodeA.getEdges().add(edge);
+			nodeB.getEdges().add(edge);
+
+			assert edge.sane();
+			assert nodeA.sane();
+			assert nodeB.sane();
+
+			graph.putEdge(edge);
+			graph.putNode(nodeA);
+			graph.putNode(nodeB);
+
+		} // for edgeNumber
+
+	} // populateDynamicallyLabeledEdges
+
+	/**
+	 * @param graph
+	 * @param numberOfStaticallyLabeledEdges
+	 * @param nodeDecorator
+	 *            TODO
+	 * @param edgeDecorator
+	 *            TODO
+	 * @param graphDecorator
+	 *            TODO
+	 */
+	private static void populateStaticallyLabeledEdges(final Graph graph,
+			final int numberOfStaticallyLabeledEdges,
+			NodeDecorator nodeDecorator, EdgeDecorator edgeDecorator,
+			GraphDecorator graphDecorator) {
+		for (int edgeNumber = 0; edgeNumber < numberOfStaticallyLabeledEdges; edgeNumber++) {
+			// Each statically labeled edge adds two nodes
+			final Node nodeA = TestUtil.createStaticallyLabeledNode();
+			final Node nodeB = TestUtil.createStaticallyLabeledNode();
+			final Edge edge = TestUtil.createStaticallyLabeledEdge(nodeA
+					.getURI(), nodeB.getURI());
+
+			edge.setA(nodeA);
+			edge.setB(nodeB);
+			nodeA.getEdges().add(edge);
+			nodeB.getEdges().add(edge);
+
+			assert edge.sane();
+			assert nodeA.sane();
+			assert nodeB.sane();
+
+			graph.putEdge(edge);
+			graph.putNode(nodeA);
+			graph.putNode(nodeB);
+			// final NodeLabel nodeALabel = (NodeLabel)
+			// nodeA.getLabels().get(0);
+			// final NodeLabel nodeBLabel = (NodeLabel)
+			// nodeB.getLabels().get(0);
+			// graph.putNodeLabel(nodeALabel);
+			// graph.putNodeLabel(nodeBLabel);
+		} // for edgeNumber
+	} // populateStaticallyLabeledEdges
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Graph#getNumEdges()
+	 * <em> Edges</em>}' feature getter. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNumEdges()
+	 * @generated NOT
+	 */
+	public void testGetNumEdges() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getNumEdges() == 2);
+	} // testGetNumEdges
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Graph#getNumNodes()
+	 * <em>Num Nodes</em>}' feature getter. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNumNodes()
+	 * @generated NOT
+	 */
+	public void testGetNumNodes() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getNumNodes() == 4);
+	} // testGetNumNodes
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNumGraphLabels()
+	 * <em>Num Graph Labels</em>}' feature getter. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNumGraphLabels()
+	 * @generated NOT
+	 */
+	public void testGetNumGraphLabels() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getNumGraphLabels() == 2);
+	} // testGetNumGraphLabels
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNumNodeLabels()
+	 * <em>Num Node Labels</em>}' feature getter. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNumNodeLabels()
+	 * @generated NOT
+	 */
+	public void testGetNumNodeLabels() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getNumNodeLabels() == graph.getNumNodes());
+	} // testGetNumNodeLabels
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNumDynamicLabels()
+	 * <em>Num Dynamic Labels</em>}' feature getter. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNumDynamicLabels()
+	 * @generated NOT
+	 */
+	public void testGetNumDynamicLabels() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getNumDynamicLabels() == 4);
+	} // testGetNumDynamicLabels
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNodeLabelsByTypeURI(org.eclipse.emf.common.util.URI)
+	 * <em>Get Node Labels By Type URI</em>}' operation. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNodeLabelsByTypeURI(org.eclipse.emf.common.util.URI)
+	 * @generated NOT
+	 */
+	public void testGetNodeLabelsByTypeURI__URI() {
+		final Graph graph = getFixture();
+		final EList nodeLabels = graph
+				.getNodeLabelsByTypeURI(DynamicLabel.URI_TYPE_DYNAMIC_LABEL);
+		assertTrue(nodeLabels.size() == 2);
+	} // testGetNodeLabelsByTypeURI__URI
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	@Override
+	public void testSane() {
+		final Graph graph = getFixture();
+		assertTrue(graph.sane());
+	} // testSane
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#addGraph(org.eclipse.stem.core.graph.Graph)
+	 * <em>Add Graph</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#addGraph(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	public void testAddGraph__Graph() {
+		final Graph mainGraph = getFixture();
+
+		final Graph addGraph = GraphFactory.eINSTANCE.createGraph();
+
+		populateGraph(ADD_NUM_DYNAMIC_EDGE_LABELS, ADD_NUM_STATIC_EDGE_LABELS,
+				ADD_NUM_DYNAMIC_GRAPH_LABELS, ADD_NUM_STATIC_GRAPH_LABELS,
+				addGraph);
+
+		assertTrue(mainGraph.getNumEdges() == MAIN_NUM_EDGES);
+		assertTrue(mainGraph.getNumNodes() == MAIN_NUM_NODES);
+		assertTrue(mainGraph.getNumNodeLabels() == MAIN_NUM_NODE_LABELS);
+
+		assertTrue(addGraph.getNumEdges() == ADD_NUM_EDGES);
+		assertTrue(addGraph.getNumNodes() == ADD_NUM_NODES);
+		assertTrue(addGraph.getNumNodeLabels() == ADD_NUM_NODE_LABELS);
+
+		// Add the two graphs together
+		mainGraph.addGraph(addGraph, null);
+
+		assertTrue(mainGraph.getNumEdges() == RESULT_NUM_EDGES);
+		assertTrue(mainGraph.getNumNodes() == RESULT_NUM_NODES);
+		assertTrue(mainGraph.getNumNodeLabels() == RESULT_NUM_NODE_LABELS);
+		assertTrue(mainGraph.getNumGraphLabels() == RESULT_NUM_GRAPH_LABELS);
+		assertTrue(mainGraph.getNumDynamicLabels() == RESULT_NUM_DYNAMIC_LABELS);
+	} // testAddGraph__Graph
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#putEdge(org.eclipse.stem.core.graph.Edge)
+	 * <em>Put Edge</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#putEdge(org.eclipse.stem.core.graph.Edge)
+	 * @generated NOT
+	 */
+	public void testPutEdge__Edge() {
+		final Graph graph = getFixture();
+		final Edge edge = TestUtil.createStaticallyLabeledEdge(TestUtil
+				.createNextIdentifiableToLabelURI(), TestUtil
+				.createNextIdentifiableToLabelURI());
+		graph.putEdge(edge);
+		assertTrue(edge.equals(graph.getEdge(edge.getURI())));
+	} // testPutEdge__Edge
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getEdge(org.eclipse.emf.common.util.URI)
+	 * <em>Get Edge</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getEdge(org.eclipse.emf.common.util.URI)
+	 * @see #testPutEdge__Edge()
+	 * @generated NOT
+	 */
+	public void testGetEdge__URI() {
+		// Implemented in testPutEdge__Edge
+		assertTrue(true);
+	} // testGetEdge__URI
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#putNode(org.eclipse.stem.core.graph.Node)
+	 * <em>Put Node</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#putNode(org.eclipse.stem.core.graph.Node)
+	 * @generated NOT
+	 */
+	public void testPutNode__Node() {
+		final Graph graph = getFixture();
+		final Node node = TestUtil.createStaticallyLabeledNode();
+		graph.putNode(node);
+		assertTrue(node.equals(graph.getNode(node.getURI())));
+	} // testPutNode__Node
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNode(org.eclipse.emf.common.util.URI)
+	 * <em>Get Node</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNode(org.eclipse.emf.common.util.URI)
+	 * @see #testPutNode__Node()
+	 * @generated NOT
+	 */
+	public void testGetNode__URI() {
+		// Implemented in testPutNode__Node
+		assertTrue(true);
+	} // testGetNode__URI
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#putNodeLabel(org.eclipse.stem.core.graph.NodeLabel)
+	 * <em>Put Node Label</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#putNodeLabel(org.eclipse.stem.core.graph.NodeLabel)
+	 * @generated NOT
+	 */
+	public void testPutNodeLabel__NodeLabel() {
+		final Graph graph = getFixture();
+		final DynamicNodeLabel label = TestUtil.createDynamicNodeLabel();
+		graph.putNodeLabel(label);
+		assertTrue(label.equals(graph.getNodeLabel(label.getURI())));
+	}
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getNodeLabel(org.eclipse.emf.common.util.URI)
+	 * <em>Get Node Label</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getNodeLabel(org.eclipse.emf.common.util.URI)
+	 * @see #testPutNodeLabel__NodeLabel()
+	 * @generated NOT
+	 */
+	public void testGetNodeLabel__URI() {
+		// Implemented in testPutNodeLabel__NodeLabel
+		assertTrue(true);
+	} // testGetNodeLabel__URI
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#putGraphLabel(org.eclipse.stem.core.graph.Label)
+	 * <em>Put Graph Label</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#putGraphLabel(org.eclipse.stem.core.graph.Label)
+	 * @generated NOT
+	 */
+	public void testPutGraphLabel__Label() {
+		final Graph graph = getFixture();
+		final Label label = TestUtil.createStaticLabel();
+		graph.putGraphLabel(label);
+		assertTrue(label.equals(graph.getGraphLabel(label.getURI())));
+	} // testPutGraphLabel__Label
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#getGraphLabel(org.eclipse.emf.common.util.URI)
+	 * <em>Get Graph Label</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#getGraphLabel(org.eclipse.emf.common.util.URI)
+	 * @see #testPutGraphLabel__Label()
+	 * @generated NOT
+	 */
+	public void testGetGraphLabel__URI() {
+		// Implemented in testPutGraphLabel__Label
+		assertTrue(true);
+	} // testGetGraphLabel__URI
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#addDynamicLabel(org.eclipse.stem.core.graph.DynamicLabel)
+	 * <em>Add Dynamic Label</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#addDynamicLabel(org.eclipse.stem.core.graph.DynamicLabel)
+	 * @generated NOT
+	 */
+	public void testAddDynamicLabel__DynamicLabel() {
+		final Graph graph = getFixture();
+		final DynamicLabel label = TestUtil.createDynamicLabel(TestUtil
+				.createNextIdentifiableToLabelURI());
+		graph.addDynamicLabel(label);
+		assertTrue(graph.getDynamicLabels().contains(label));
+	} // testAddDynamicLabel__DynamicLabel
+
+	/**
+	 * Tests the '
+	 * {@link org.eclipse.stem.core.graph.Graph#switchToNextValue(org.eclipse.stem.core.model.STEMTime)
+	 * <em>Switch To Next Value</em>}' operation. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.graph.Graph#switchToNextValue(org.eclipse.stem.core.model.STEMTime)
+	 * @generated NOT
+	 */
+	public void testSwitchToNextValue__STEMTime() {
+		final Graph mainGraph = getFixture();
+
+		// All of the dynamic label current values should be 0 (zero)
+		for (final Iterator dynamicLabelIter = mainGraph.getDynamicLabels()
+				.iterator(); dynamicLabelIter.hasNext();) {
+			assertFalse(valuesSwapped((DynamicLabel) dynamicLabelIter.next()));
+		} // for each dynamic label
+
+		for (final Iterator nodeIterator = mainGraph.getNodes().values()
+				.iterator(); nodeIterator.hasNext();) {
+			final Node node = (Node) nodeIterator.next();
+			for (final Iterator labelIter = node.getLabels().iterator(); labelIter
+					.hasNext();) {
+				final Label label = (Label) labelIter.next();
+				// Is it a dynamic label?
+				if (label instanceof DynamicLabel) {
+					final DynamicLabel dynamicLabel = (DynamicLabel) label;
+					assertFalse(valuesSwapped(dynamicLabel));
+				}
+			} // for node's labels
+		} // for each node
+
+		// At this point all of the next values are considered "invalid" this is
+		// tested in switchToNextValue.
+		for (final Iterator dynamicLabelIter = mainGraph.getDynamicLabels()
+				.iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			dynamicLabel.setNextValueValid(true);
+		} // for
+
+		// DO IT!
+		mainGraph.switchToNextValue(SWITCH_TIME);
+
+		assertTrue(mainGraph.getTime().equals(SWITCH_TIME));
+
+		// After the switch
+		// All of the dynamic label current values should be swapped
+		for (final Iterator dynamicLabelIter = mainGraph.getDynamicLabels()
+				.iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(valuesSwapped(dynamicLabel));
+			assertFalse(dynamicLabel.isNextValueValid());
+		} // for each dynamic label
+
+		// There shouldn't be any other dynamic labels lying around that are 0
+		for (final Iterator graphLabelIter = mainGraph.getGraphLabels()
+				.values().iterator(); graphLabelIter.hasNext();) {
+			final Label label = (Label) graphLabelIter.next();
+			// Is it a dynamic label?
+			if (label instanceof DynamicLabel) {
+				final DynamicLabel dynamicLabel = (DynamicLabel) label;
+				assertTrue(valuesSwapped(dynamicLabel));
+			}
+		} // for graph labels
+
+		for (final Iterator nodeIterator = mainGraph.getNodes().values()
+				.iterator(); nodeIterator.hasNext();) {
+			final Node node = (Node) nodeIterator.next();
+			for (final Iterator labelIter = node.getLabels().iterator(); labelIter
+					.hasNext();) {
+				final Label label = (Label) labelIter.next();
+				// Is it a dynamic label?
+				if (label instanceof DynamicLabel) {
+					final DynamicLabel dynamicLabel = (DynamicLabel) label;
+					assertTrue(valuesSwapped(dynamicLabel));
+				}
+			} // for node's labels
+		} // for each node
+
+		for (final Iterator edgeIterator = mainGraph.getEdges().values()
+				.iterator(); edgeIterator.hasNext();) {
+			final Edge edge = (Edge) edgeIterator.next();
+			final Label label = edge.getLabel();
+			// Is it a dynamic label?
+			if (label instanceof DynamicLabel) {
+				final DynamicLabel dynamicLabel = (DynamicLabel) label;
+				assertTrue(valuesSwapped(dynamicLabel));
+			}
+		} // for each edge
+	} // testSwitchToNextValue
+
+	/**
+	 * Test the Graph has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Graph graph = getFixture();
+		assertTrue(graph.getTypeURI().equals(STEMURI.GRAPH_TYPE_URI));
+	} // testGetTypeURI
+
+	/**
+	 * Test that when the URI is set for the graph, the target URI of any
+	 * GraphLabels it has also are updated to the new URI value.
+	 * 
+	 * @generated NOT
+	 */
+	public void testSetURISetsGraphLabels() {
+		final Graph graph = getFixture();
+		final URI uriBefore = graph.getURI();
+
+		for (final Iterator labelIter = graph.getGraphLabels().values()
+				.iterator(); labelIter.hasNext();) {
+			final Label label = (Label) labelIter.next();
+			assertTrue(label.getURIOfIdentifiableToBeLabeled().equals(
+					graph.getURI()));
+			assertFalse(label.getURIOfIdentifiableToBeLabeled().equals(
+					GRAPH2_URI));
+		} // for
+
+		graph.setURI(GRAPH2_URI);
+
+		for (final Iterator labelIter = graph.getGraphLabels().values()
+				.iterator(); labelIter.hasNext();) {
+			final Label label = (Label) labelIter.next();
+			assertTrue(label.getURIOfIdentifiableToBeLabeled().equals(
+					graph.getURI()));
+			assertFalse(label.getURIOfIdentifiableToBeLabeled().equals(
+					uriBefore));
+		} // for
+	} // testSetURISetsGraphLabels
+
+	/**
+	 * Test the ability to serialize a graph and then de-serialize it.
+	 */
+	public void testSerializeDeserialize() {
+		final Graph graph = getFixture();
+
+		assert graph.sane();
+		try {
+			Utility.serializeIdentifiable(graph, SERIALZATION_TEST_URI);
+
+			final ResourceSet resourceSet = new ResourceSetImpl();
+			final Resource resource = resourceSet.getResource(
+					SERIALZATION_TEST_URI, true);
+
+			resource.load(null);
+
+			final Graph deserializedGraph = (Graph) resource.getContents().get(
+					0);
+			assertNotNull(deserializedGraph);
+			assertTrue(graph.getNumEdges() == deserializedGraph.getNumEdges());
+			assertTrue(graph.getNumNodes() == deserializedGraph.getNumNodes());
+			assertTrue(graph.getNumDynamicLabels() == deserializedGraph
+					.getNumDynamicLabels());
+			assertTrue(graph.getNumGraphLabels() == deserializedGraph
+					.getNumGraphLabels());
+			assertTrue(graph.getNumNodeLabels() == deserializedGraph
+					.getNumNodeLabels());
+		} catch (IOException e) {
+			fail(e.getMessage());
+		} // catch
+		catch (NullPointerException npe) {
+			fail(npe.getMessage());
+		} // null pointer exception
+		catch (Exception e) {
+			fail(e.getMessage());
+		}
+
+	} // testSerializeDeserialize
+
+	/**
+	 * @param label
+	 * @return true if the labels have been swapped from their original values.
+	 * @generated NOT
+	 */
+	private boolean valuesSwapped(final Label label) {
+		boolean retValue = false;
+
+		// Is it a dynamic label?
+		if (label instanceof DynamicLabel) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) label;
+			retValue = ((TestIntegerLabelValue) label.getCurrentValue()).getI() == TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE;
+			retValue = retValue
+					&& ((TestIntegerLabelValue) dynamicLabel.getNextValue())
+							.getI() == TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE;
+		} else {
+			retValue = ((TestIntegerLabelValue) label.getCurrentValue()).getI() != TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE;
+		}
+		return retValue;
+	} // valuesSwapped
+
+} // GraphTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTests.java
new file mode 100644
index 0000000..f6dcc3e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>graph</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GraphTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new GraphTests("graph Tests"); //$NON-NLS-1$
+		suite.addTestSuite(EdgeTest.class);
+		suite.addTestSuite(GraphTest.class);
+		suite.addTestSuite(NodeTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphTests(String name) {
+		super(name);
+	}
+
+} //GraphTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTimeProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTimeProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..d6930ac
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/GraphTimeProviderAdapterFactoryTest.java
@@ -0,0 +1,62 @@
+// GraphTimeProviderAdapterFactoryTest.java
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory;
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactoryImplTest;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.provider.GraphTimeProviderAdapterFactory;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This class is a JUnit test of the {@link GraphTimeProviderAdapterFactory}.
+ */
+public class GraphTimeProviderAdapterFactoryTest extends
+		TimeProviderAdapterFactoryImplTest {
+
+	private final STEMTime TEST_TIME = ModelFactory.eINSTANCE.createSTEMTime();
+	
+	/**
+	 * @see
+	 * 	org.eclipse.stem.adapters.time.TimeProviderAdapterFactoryImplTest
+	 * 	#createFixture()
+	 */
+	@Override
+	public TimeProviderAdapterFactory createFixture() {
+		return new GraphTimeProviderAdapterFactory();
+	}
+
+	private GraphTimeProviderAdapterFactory getFixture() {
+		return (GraphTimeProviderAdapterFactory) fixture;
+	} // getFixture
+
+	public void testAdaptGraph() {
+		final GraphTimeProviderAdapterFactory fixture = getFixture();
+		final Graph graph = GraphTest.createFixture();
+
+		final TimeProvider tp = (TimeProvider) fixture.adapt(graph,
+				TimeProvider.class);
+		assertNotNull(tp);
+
+		STEMTime graphTime = tp.getTime();
+		assertNull(graphTime);
+		
+		graph.switchToNextValue(TEST_TIME);
+		graphTime = tp.getTime();
+		
+		assertNotNull(graphTime);
+		assertTrue(graphTime.equals(TEST_TIME));
+	} // testAdaptGraph
+} // GraphTimeProviderAdapterFactoryTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelTest.java
new file mode 100644
index 0000000..ad0ad97
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelTest.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import junit.framework.TestCase;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.Label#getIdentifiable() <em>Identifiable</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public abstract class LabelTest extends IdentifiableTest {
+
+	/**
+	 * Constructs a new Label test case with the given name.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Label getFixture() {
+		return (Label)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Label#getIdentifiable() <em>Identifiable</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.Label#getIdentifiable()
+	 * @generated NOT
+	 */
+	public void testGetIdentifiable() {
+		final Label fixture = getFixture();
+		fixture.setIdentifiable(null);
+		assertNull(fixture.getIdentifiable());
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.Label#setIdentifiable(org.eclipse.stem.core.common.Identifiable) <em>Identifiable</em>}' feature setter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.Label#setIdentifiable(org.eclipse.stem.core.common.Identifiable)
+	 * @generated NOT
+	 */
+	public void testSetIdentifiable() {
+		final Label fixture = getFixture();
+		fixture.setIdentifiable(null);
+		assertNull(fixture.getIdentifiable());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a static label for testing
+	 */
+	public Label createFixture() {
+		return TestUtil.createStaticLabel(TestUtil
+				.createNextIdentifiableToLabelURI());
+	} // createFixture
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	@Override
+	public void testSane() {
+		final Label label = getFixture();
+		assertTrue(label.sane());
+	} // testSane
+
+	/**
+	 * Test the Label has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Label label = getFixture();
+		assertTrue(label.getTypeURI().equals(Label.URI_TYPE_LABEL));
+	} // testGetTypeURI
+
+} // LabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelValueTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelValueTest.java
new file mode 100644
index 0000000..103499e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/LabelValueTest.java
@@ -0,0 +1,82 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.LabelValue#reset() <em>Reset</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class LabelValueTest extends TestCase {
+	/**
+	 * The fixture for this Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelValue fixture = null;
+
+	/**
+	 * Constructs a new Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(LabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * Abstract since subclasses should implement
+	 * this test.
+	 * 
+	 * 
+	 * Tests the '{@link org.eclipse.stem.core.graph.LabelValue#reset() <em>Reset</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.LabelValue#reset()
+	 * @generated NOT
+	 */
+	public abstract void testReset();
+
+} //LabelValueTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeLabelTest.java
new file mode 100644
index 0000000..81c36c8
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeLabelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class NodeLabelTest extends LabelTest {
+	/**
+	 * Constructs a new Node Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Node Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected NodeLabel getFixture() {
+		return (NodeLabel)fixture;
+	}
+
+} //NodeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeTest.java
new file mode 100644
index 0000000..10668da
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/NodeTest.java
@@ -0,0 +1,98 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+//import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Node</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class NodeTest extends IdentifiableTest {
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(NodeTest.class);
+	}
+
+	/**
+	 * Constructs a new Node test case with the given name.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Node test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Node getFixture() {
+		return (Node)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(TestUtil.createStaticallyLabeledNode());
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final Node node = getFixture();
+		assertTrue(node.sane());
+	} // testSane
+
+	/**
+	 * Test the Node has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Node node = getFixture();
+		assertTrue(node.getTypeURI().equals(STEMURI.NODE_TYPE_URI));
+	} // testGetTypeURI
+
+} // NodeTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/SanityCheckerTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/SanityCheckerTest.java
new file mode 100644
index 0000000..c35a742
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/SanityCheckerTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Sanity Checker</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class SanityCheckerTest extends TestCase {
+
+	/**
+	 * The fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SanityChecker fixture = null;
+
+	/**
+	 * Constructs a new Sanity Checker test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SanityCheckerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(SanityChecker fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SanityChecker getFixture() {
+		return fixture;
+	}
+
+} //SanityCheckerTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticEdgeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticEdgeLabelTest.java
new file mode 100644
index 0000000..7b2f6b5
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticEdgeLabelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Static Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StaticEdgeLabelTest extends EdgeLabelTest {
+	/**
+	 * Constructs a new Static Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StaticEdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Static Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StaticEdgeLabel getFixture() {
+		return (StaticEdgeLabel)fixture;
+	}
+
+} //StaticEdgeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticLabelTest.java
new file mode 100644
index 0000000..1e7f31e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticLabelTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Static Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StaticLabelTest extends LabelTest {
+
+	/**
+	 * Constructs a new Static Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StaticLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Static Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StaticLabel getFixture() {
+		return (StaticLabel)fixture;
+	}
+
+} //StaticLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticNodeLabelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticNodeLabelTest.java
new file mode 100644
index 0000000..d3d44b1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/StaticNodeLabelTest.java
@@ -0,0 +1,52 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Static Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StaticNodeLabelTest extends NodeLabelTest {
+	/**
+	 * Constructs a new Static Node Label test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public StaticNodeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Static Node Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected StaticNodeLabel getFixture() {
+		return (StaticNodeLabel)fixture;
+	}
+
+	/**
+	 * test labelNode
+	 * 
+	 * @generated NOT
+	 */
+	public void testLabelNode() {
+		fail();
+	} // testLabelNode
+
+} // StaticNodeLabelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToEdgeMapEntryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToEdgeMapEntryTest.java
new file mode 100644
index 0000000..e56a64f
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToEdgeMapEntryTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>URI To Edge Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class URIToEdgeMapEntryTest extends TestCase {
+
+	/**
+	 * The fixture for this URI To Edge Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Edge> fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(URIToEdgeMapEntryTest.class);
+	}
+
+	/**
+	 * Constructs a new URI To Edge Map Entry test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URIToEdgeMapEntryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this URI To Edge Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Map.Entry<URI, Edge> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this URI To Edge Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Edge> getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void setUp() throws Exception {
+		setFixture((Map.Entry<URI, Edge>)GraphFactory.eINSTANCE.create(GraphPackage.Literals.URI_TO_EDGE_MAP_ENTRY));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet
+	 */
+	public void testNothing() {
+		assertTrue(true);
+	} // testNothing
+} //URIToEdgeMapEntryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToIdentifiableMapEntryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToIdentifiableMapEntryTest.java
new file mode 100644
index 0000000..369eab4
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToIdentifiableMapEntryTest.java
@@ -0,0 +1,112 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>URI To Identifiable Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class URIToIdentifiableMapEntryTest extends TestCase {
+
+	/**
+	 * The fixture for this URI To Identifiable Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Identifiable> fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(URIToIdentifiableMapEntryTest.class);
+	}
+
+	/**
+	 * Constructs a new URI To Identifiable Map Entry test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URIToIdentifiableMapEntryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this URI To Identifiable Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Map.Entry<URI, Identifiable> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this URI To Identifiable Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Identifiable> getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void setUp() throws Exception {
+		setFixture((Map.Entry<URI, Identifiable>)GraphFactory.eINSTANCE.create(GraphPackage.Literals.URI_TO_IDENTIFIABLE_MAP_ENTRY));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * Keeps JUnit quiet
+	 */
+	public void testNothing() {
+		assertTrue(true);
+	} // testNothing
+} //URIToIdentifiableMapEntryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToLabelMapEntryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToLabelMapEntryTest.java
new file mode 100644
index 0000000..b7ebf35
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToLabelMapEntryTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>URI To Label Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class URIToLabelMapEntryTest extends TestCase {
+
+	/**
+	 * The fixture for this URI To Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Label> fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(URIToLabelMapEntryTest.class);
+	}
+
+	/**
+	 * Constructs a new URI To Label Map Entry test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URIToLabelMapEntryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this URI To Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Map.Entry<URI, Label> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this URI To Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Label> getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void setUp() throws Exception {
+		setFixture((Map.Entry<URI, Label>)GraphFactory.eINSTANCE.create(GraphPackage.Literals.URI_TO_LABEL_MAP_ENTRY));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet
+	 */
+	public void testNothing() {
+		assertTrue(true);
+	} // testNothing
+} //URIToLabelMapEntryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeLabelMapEntryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeLabelMapEntryTest.java
new file mode 100644
index 0000000..300db68
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeLabelMapEntryTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>URI To Node Label Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class URIToNodeLabelMapEntryTest extends TestCase {
+
+	/**
+	 * The fixture for this URI To Node Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, NodeLabel> fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(URIToNodeLabelMapEntryTest.class);
+	}
+
+	/**
+	 * Constructs a new URI To Node Label Map Entry test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URIToNodeLabelMapEntryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this URI To Node Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Map.Entry<URI, NodeLabel> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this URI To Node Label Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, NodeLabel> getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void setUp() throws Exception {
+		setFixture((Map.Entry<URI, NodeLabel>)GraphFactory.eINSTANCE.create(GraphPackage.Literals.URI_TO_NODE_LABEL_MAP_ENTRY));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet
+	 */
+	public void testNothing() {
+		assertTrue(true);
+	} // testNothing
+} //URIToNodeLabelMapEntryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeMapEntryTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeMapEntryTest.java
new file mode 100644
index 0000000..22eac2f
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/URIToNodeMapEntryTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>URI To Node Map Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class URIToNodeMapEntryTest extends TestCase {
+
+	/**
+	 * The fixture for this URI To Node Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Node> fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(URIToNodeMapEntryTest.class);
+	}
+
+	/**
+	 * Constructs a new URI To Node Map Entry test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URIToNodeMapEntryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this URI To Node Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Map.Entry<URI, Node> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this URI To Node Map Entry test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map.Entry<URI, Node> getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void setUp() throws Exception {
+		setFixture((Map.Entry<URI, Node>)GraphFactory.eINSTANCE.create(GraphPackage.Literals.URI_TO_NODE_MAP_ENTRY));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet
+	 */
+	public void testNothing() {
+		assertTrue(true);
+	} // testNothing
+} //URIToNodeMapEntryTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/UnresolvedIdentifiableTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/UnresolvedIdentifiableTest.java
new file mode 100644
index 0000000..0b43b7c
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/graph/tests/UnresolvedIdentifiableTest.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.core.graph.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.UnresolvedIdentifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Unresolved Identifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class UnresolvedIdentifiableTest extends TestCase {
+	/**
+	 * The fixture for this Unresolved Identifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UnresolvedIdentifiable fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(UnresolvedIdentifiableTest.class);
+	}
+
+	/**
+	 * Constructs a new Unresolved Identifiable test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnresolvedIdentifiableTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Unresolved Identifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(UnresolvedIdentifiable fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Unresolved Identifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected UnresolvedIdentifiable getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(GraphFactory.eINSTANCE.createUnresolvedIdentifiable());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keep JUnit quiet
+	 */
+	public void testKeepJUnitQuiet() {
+		assertTrue(true);
+	}
+} //UnresolvedIdentifiableTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ComparableTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ComparableTest.java
new file mode 100644
index 0000000..03555b2
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ComparableTest.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Comparable</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class ComparableTest extends TestCase {
+
+	/**
+	 * The fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Comparable<?> fixture = null;
+
+	/**
+	 * Constructs a new Comparable test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComparableTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Comparable<?> fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Comparable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Comparable<?> getFixture() {
+		return fixture;
+	}
+
+} //ComparableTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/DecoratorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/DecoratorTest.java
new file mode 100644
index 0000000..60808dc
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/DecoratorTest.java
@@ -0,0 +1,144 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+//import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.Decorator#decorateGraph() <em>Decorate Graph</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long, int) <em>Update Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.Decorator#resetLabels() <em>Reset Labels</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.Decorator#getLabelsToUpdate(int, int) <em>Get Labels To Update</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DecoratorTest extends IdentifiableTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DecoratorTest.class);
+	}
+
+	/**
+	 * Constructs a new Decorator test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public DecoratorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Decorator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Decorator getFixture() {
+		return (Decorator)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ModelFactory.eINSTANCE.createDecorator());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Decorator#decorateGraph() <em>Decorate Graph</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.Decorator#decorateGraph()
+	 * @generated NOT
+	 */
+	public void testDecorateGraph() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long, int) <em>Update Labels</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long, int)
+	 * @generated NOT
+	 */
+	public void testUpdateLabels__STEMTime_long_int() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long) <em>Update Labels</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.Decorator#updateLabels(org.eclipse.stem.core.model.STEMTime, long)
+	 * @generated NOT
+	 */
+	public void testUpdateLabels__STEMTime_long() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Decorator#resetLabels() <em>Reset Labels</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.Decorator#resetLabels()
+	 * @generated NOT
+	 */
+	public void testResetLabels() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Decorator#getLabelsToUpdate(int, int) <em>Get Labels To Update</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.Decorator#getLabelsToUpdate(int, int)
+	 * @generated NOT
+	 */
+	public void testGetLabelsToUpdate__int_int() {
+		assertTrue(true);
+	}
+
+} // DecoratorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/EdgeDecoratorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/EdgeDecoratorTest.java
new file mode 100644
index 0000000..3f59f14
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/EdgeDecoratorTest.java
@@ -0,0 +1,84 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.ModelFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Edge Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class EdgeDecoratorTest extends DecoratorTest {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(EdgeDecoratorTest.class);
+	}
+
+	/**
+	 * Constructs a new Edge Decorator test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public EdgeDecoratorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Edge Decorator test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected EdgeDecorator getFixture() {
+		return (EdgeDecorator)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ModelFactory.eINSTANCE.createEdgeDecorator());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final EdgeDecorator edgeDecorator = getFixture();
+		assertTrue(edgeDecorator.sane());
+	} // testSane
+
+
+} // EdgeDecoratorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/GraphDecoratorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/GraphDecoratorTest.java
new file mode 100644
index 0000000..6e482b1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/GraphDecoratorTest.java
@@ -0,0 +1,83 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.ModelFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Graph Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GraphDecoratorTest extends DecoratorTest {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(GraphDecoratorTest.class);
+	}
+
+	/**
+	 * Constructs a new Graph Decorator test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public GraphDecoratorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Graph Decorator test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected GraphDecorator getFixture() {
+		return (GraphDecorator)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ModelFactory.eINSTANCE.createGraphDecorator());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final GraphDecorator graphDecorator = getFixture();
+		assertTrue(graphDecorator.sane());
+	} // testSane
+
+} // GraphDecoratorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelAllTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelAllTests.java
new file mode 100644
index 0000000..fe12418
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelAllTests.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Model</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ModelAllTests("Model Tests");
+		suite.addTest(ModelTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelAllTests(String name) {
+		super(name);
+	}
+
+} //ModelAllTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTest.java
new file mode 100644
index 0000000..b1ba5f2
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTest.java
@@ -0,0 +1,961 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.Model#getCanonicalGraph(org.eclipse.emf.common.util.URI) <em>Get Canonical Graph</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModelTest extends IdentifiableTest {
+
+	@SuppressWarnings("unused")
+	private static final URI SERIALZATION_TEST_URI = URI
+			.createURI("temp/testmodel1.model");
+
+	private static final String MODEL = "model";
+
+	private static final String GRAPH = "graph";
+
+	private static final String LABEL = "label";
+
+	private static final String NODE = "node";
+
+	private static final String NODE_DECORATOR = "nodedecorator";
+
+	// private static final String EDGE_DECORATOR = "edgedecorator";
+
+	private static final String EDGE = "edge";
+
+	// Model URI's
+	public static final URI M0_URI = STEMURI.createURI(MODEL + "/" + "m0");
+
+	private static final URI M1_URI = STEMURI.createURI(MODEL + "/" + "m1");
+
+	private static final URI M2_URI = STEMURI.createURI(MODEL + "/" + "m2");
+
+	private static final URI M3_URI = STEMURI.createURI(MODEL + "/" + "m3");
+
+	private static final URI UNRESOLVED_MODEL_URI = STEMURI.createURI(MODEL
+			+ "/" + "unresolved");
+
+	// Graph URI's
+
+	private static final URI CANONICAL_GRAPH1_URI = STEMURI.createURI(GRAPH
+			+ "/" + "canonicalGraph1");
+
+	private static final URI CANONICAL_GRAPH2_URI = STEMURI.createURI(GRAPH
+			+ "/" + "canonicalGraph2");
+
+	private static final URI G0_URI = STEMURI.createURI(GRAPH + "/" + "g0");
+
+	private static final URI G1_URI = STEMURI.createURI(GRAPH + "/" + "g1");
+
+	private static final URI G2_URI = STEMURI.createURI(GRAPH + "/" + "g2");
+
+	private static final URI G3_URI = STEMURI.createURI(GRAPH + "/" + "g3");
+
+	private static final URI G4_URI = STEMURI.createURI(GRAPH + "/" + "g4");
+
+	private static final URI G5_URI = STEMURI.createURI(GRAPH + "/" + "g5");
+
+	// private static final URI GRAPH_RETURN_URI = STEMURI.createURI(GRAPH + "/"
+	// + "graph_return");
+
+	// Graph Label URI's
+	private static final URI G_L0_URI = STEMURI.createURI(LABEL + "/" + "gl0");
+
+	private static final URI G_L1_URI = STEMURI.createURI(LABEL + "/" + "gl1");
+
+	private static final URI G_L2_URI = STEMURI.createURI(LABEL + "/" + "gl2");
+
+	private static final URI G_L3_URI = STEMURI.createURI(LABEL + "/" + "gl3");
+
+	private static final URI G_L4_URI = STEMURI.createURI(LABEL + "/" + "gl4");
+
+	private static final URI G_L5_URI = STEMURI.createURI(LABEL + "/" + "gl5");
+
+	// Static Node Label URI's
+	private static final URI NL0A0_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl0a0");
+
+	private static final URI NL0A1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl0a1");
+
+	private static final URI NL3A1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl3a1");
+
+	private static final URI NL3B1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl3b1");
+
+	private static final URI NL4A1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl4a1");
+
+	private static final URI NL4B1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl4b1");
+
+	private static final URI NL4C1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl4c1");
+
+	private static final URI NL5A1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl5a1");
+
+	private static final URI NL5B1_URI = STEMURI.createURI(LABEL + "/"
+			+ "nl5b1");
+
+	// Node URI's
+	private static final URI N0A_URI = STEMURI.createURI(NODE + "/" + "n0a");
+
+	private static final URI N5A_URI = STEMURI.createURI(NODE + "/" + "n5a");
+
+	private static final URI N5B_URI = STEMURI.createURI(NODE + "/" + "n5b");
+
+	private static final URI N3A_URI = STEMURI.createURI(NODE + "/" + "n3a");
+
+	private static final URI N3B_URI = STEMURI.createURI(NODE + "/" + "n3b");
+
+	public static final URI N4A_URI = STEMURI.createURI(NODE + "/" + "n4a");
+
+	public static final URI N4B_URI = STEMURI.createURI(NODE + "/" + "n4b");
+
+	private static final URI N4C_URI = STEMURI.createURI(NODE + "/" + "n4c");
+
+	private static final URI N4D_URI = STEMURI.createURI(NODE + "/" + "n4d");
+
+	// Decorator URI's
+	private static final URI NDEC_0A_URI = STEMURI.createURI(NODE_DECORATOR
+			+ "/" + "ndec_0a");
+
+	private static final URI NDEC_2A_URI = STEMURI.createURI(NODE_DECORATOR
+			+ "/" + "ndec_2a");
+
+	private static final URI EDEC_1A_URI = STEMURI.createURI(NODE_DECORATOR
+			+ "/" + "edec_1a");
+
+	private static final URI EDEC_3A_URI = STEMURI.createURI(NODE_DECORATOR
+			+ "/" + "edec_3a");
+
+	private static final URI GDEC_2A_URI = STEMURI.createURI(NODE_DECORATOR
+			+ "/" + "gdec_2a");
+
+	// Edge URI'S
+	private static final URI E1A_URI = STEMURI.createURI(EDGE + "/" + "e1a");
+
+	private static final URI E1B_URI = STEMURI.createURI(EDGE + "/" + "e1b");
+
+	private static final URI E2A_URI = STEMURI.createURI(EDGE + "/" + "e2a");
+
+	private static final URI E3A_URI = STEMURI.createURI(EDGE + "/" + "e3a");
+
+	private static final URI E4A_URI = STEMURI.createURI(EDGE + "/" + "e4a");
+
+	private static final URI E4B_URI = STEMURI.createURI(EDGE + "/" + "e4b");
+
+	private static final URI E5A_URI = STEMURI.createURI(EDGE + "/" + "e5a");
+
+	// Dynamic Edges
+	public static final URI DE4_URI = STEMURI.createTypeURI(EDGE + "/" + "de4");
+
+	/**
+	 * This fixture is of a model with unresolved references.
+	 * 
+	 * @generated NOT
+	 */
+	protected Model unresolvedFixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Model test case with the given name.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * @return the unresolvedFixture
+	 * @generated NOT
+	 */
+	protected final Model getUnresolvedFixture() {
+		return unresolvedFixture;
+	} // getUnresolvedFixture
+
+	/**
+	 * @param unresolvedFixture
+	 *            the unresolvedFixture to set
+	 * @generated NOT
+	 */
+	protected final void setUnresolvedFixture(final Model unresolvedFixture) {
+		this.unresolvedFixture = unresolvedFixture;
+	} // setUnresolvedFixture
+
+	/**
+	 * Returns the fixture for this Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Model getFixture() {
+		return (Model)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * 
+	 * <pre>
+	 *                                                                                  M0
+	 *                                                                                  +-NDEC_0A
+	 *                                                                                  +-G0
+	 *                                                                                  |  +-GL0a
+	 *                                                                                  |  +-N0a
+	 *                                                                                  |
+	 *                                                                                  +-G1
+	 *                                                                                  |  +-GL1a
+	 *                                                                                  |  +-E1a
+	 *                                                                                  |  +-E1b
+	 *                                                                                  |
+	 *                                                                                  +-M1
+	 *                                                                                  |  +-EDEC_1A
+	 *                                                                                  |  +-G2
+	 *                                                                                  |  |  
+	 *                                                                                  |  |  +-GL2a
+	 *                                                                                  |  |  +-E2a
+	 *                                                                                  |  |
+	 *                                                                                  |  +-M2
+	 *                                                                                  |     +-GDEC_2A
+	 *                                                                                  |     +-NDEC_2A
+	 *                                                                                  |     +-G5
+	 *                                                                                  |        +-GL5a
+	 *                                                                                  |        +-E5a
+	 *                                                                                  |        +-N5a
+	 *                                                                                  |        +-N5b
+	 *                                                                                  |
+	 *                                                                                  +-M3
+	 *                                                                                     +-EDEC_3A
+	 *                                                                                     +-G3
+	 *                                                                                     |  +-GL3a
+	 *                                                                                     |  +-E3a
+	 *                                                                                     |  +-N3a
+	 *                                                                                     |  +-N3b
+	 *                                                                                     |
+	 *                                                                                     +-G4
+	 *                                                                                       +-GL4a
+	 *                                                                                       +-GL4b
+	 *                                                                                       +-E4a
+	 *                                                                                       +-E4b
+	 *                                                                                       +-N4a
+	 *                                                                                       +-N4b
+	 *                                                                                       +-N4c
+	 *                                                                                       +-N4d
+	 *                                                                                      
+	 * </pre>
+	 * 
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		setUnresolvedFixture(createUnresolvedFixture(UNRESOLVED_MODEL_URI));
+	} // setUp
+
+	/**
+	 * Create a Model for testing
+	 */
+	public static Model createFixture() {
+		// *** Model M0 ***
+		final Model m0 = createModel(M0_URI);
+		m0.getDublinCore().setTitle("m0");
+		final NodeDecorator nodeDec0a = createNodeDecorator(NDEC_0A_URI);
+
+		// Graph G0
+		final Graph g0 = createGraph(G0_URI);
+		g0.getDublinCore().setTitle("g0");
+		final Node n0a = TestUtil.createStaticallyLabeledNode(N0A_URI);
+		final Label gl0 = TestUtil.createStaticLabel(G_L0_URI, g0.getURI());
+		final NodeLabel nl0a0 = TestUtil.createStaticNodeLabel(NL0A0_URI, n0a
+				.getURI());
+		final NodeLabel nl0a1 = TestUtil.createStaticNodeLabel(NL0A1_URI, n0a
+				.getURI());
+		final NodeLabel nl3a1 = TestUtil.createStaticNodeLabel(NL3A1_URI,
+				N3A_URI);
+		final NodeLabel nl3b1 = TestUtil.createStaticNodeLabel(NL3B1_URI,
+				N3B_URI);
+		final NodeLabel nl5a1 = TestUtil.createStaticNodeLabel(NL5A1_URI,
+				N5A_URI);
+		final NodeLabel nl5b1 = TestUtil.createStaticNodeLabel(NL5B1_URI,
+				N5B_URI);
+
+		// Graph G0
+		g0.putGraphLabel(gl0);
+		g0.putNode(n0a);
+//		g0.putNodeLabel((NodeLabel) n0a.getLabels().get(0));
+		g0.putNodeLabel(nl0a0);
+		g0.putNodeLabel(nl0a1);
+		g0.putNodeLabel(nl3a1);
+		g0.putNodeLabel(nl3b1);
+		g0.putNodeLabel(nl5a1);
+		g0.putNodeLabel(nl5b1);
+
+		// Graph G1
+		final Graph g1 = createGraph(G1_URI);
+		g1.getDublinCore().setTitle("g1");
+		final Label gl1 = TestUtil.createStaticLabel(G_L1_URI, g1.getURI());
+		final Edge e1a = TestUtil.createStaticallyLabeledEdge(E1A_URI, N5A_URI,
+				N4A_URI, false);
+		final Edge e1b = TestUtil.createStaticallyLabeledEdge(E1B_URI, N5B_URI,
+				N4B_URI, false);
+
+		// Graph G1
+		g1.putGraphLabel(gl1);
+		g1.putEdge(e1a);
+		g1.putEdge(e1b);
+
+		// *** Model M1 ***
+		final Model m1 = createModel(M1_URI);
+		m1.getDublinCore().setTitle("m1");
+		final EdgeDecorator edec1a = createEdgeDecorator(EDEC_1A_URI, "edec1a",
+				N5A_URI, N5B_URI, 0);
+
+		// Graph G2
+		final Graph g2 = createGraph(G2_URI);
+		g0.getDublinCore().setTitle("g2");
+		final Label gl2 = TestUtil.createStaticLabel(G_L2_URI, g2.getURI());
+		final Edge e2a = TestUtil.createStaticallyLabeledEdge(E2A_URI, N5A_URI,
+				N5B_URI, true);
+
+		// Graph G2
+		g2.putGraphLabel(gl2);
+		g2.putEdge(e2a);
+
+		// *** Model M2 ***
+		final Model m2 = createModel(M2_URI);
+		m1.getDublinCore().setTitle("m2");
+		final GraphDecorator gdec2a = createGraphDecorator(GDEC_2A_URI);
+		final NodeDecorator nodeDec2a = createNodeDecorator(NDEC_2A_URI);
+
+		// Graph G5
+		final Graph g5 = createGraph(G5_URI);
+		g0.getDublinCore().setTitle("g5");
+		final Label gl5 = TestUtil.createStaticLabel(G_L5_URI, g5.getURI());
+		final Node n5a = TestUtil.createStaticallyLabeledNode(N5A_URI);
+		final Node n5b = TestUtil.createStaticallyLabeledNode(N5B_URI);
+		final Edge e5a = TestUtil.createStaticallyLabeledEdge(E5A_URI, N5A_URI,
+				N5B_URI, false);
+
+		// Graph G5
+		g5.putGraphLabel(gl5);
+		g5.putNode(n5a);
+		g5.putNode(n5b);
+//		g5.putNodeLabel((NodeLabel) n5a.getLabels().get(0));
+//		g5.putNodeLabel((NodeLabel) n5b.getLabels().get(0));
+		g5.putEdge(e5a);
+
+		// *** Model M3 ***
+		final Model m3 = createModel(M3_URI);
+		m1.getDublinCore().setTitle("m3");
+		final EdgeDecorator edec3a = createEdgeDecorator(EDEC_3A_URI, "edec3a",
+				N4A_URI, N4B_URI, 0);
+
+		// Graph G3
+		final Graph g3 = createGraph(G3_URI);
+		g0.getDublinCore().setTitle("g3");
+		final Label gl3 = TestUtil.createStaticLabel(G_L3_URI, g3.getURI());
+		final Node n3a = TestUtil.createStaticallyLabeledNode(N3A_URI);
+		final Node n3b = TestUtil.createStaticallyLabeledNode(N3B_URI);
+		final Edge e3a = TestUtil.createStaticallyLabeledEdge(E3A_URI, N3A_URI,
+				N3B_URI, false);
+
+		// Graph G3
+		g3.putGraphLabel(gl3);
+		g3.putNode(n3a);
+		g3.putNode(n3b);
+//		g3.putNodeLabel((NodeLabel) n3a.getLabels().get(0));
+//		g3.putNodeLabel((NodeLabel) n3b.getLabels().get(0));
+		g3.putEdge(e3a);
+
+		// Graph G4
+		final Graph g4 = createGraph(G4_URI);
+		g0.getDublinCore().setTitle("g4");
+		// we deliberately don't label n4d
+		final Node n4a = TestUtil.createStaticallyLabeledNode(N4A_URI);
+		final Node n4b = TestUtil.createStaticallyLabeledNode(N4B_URI);
+		final Node n4c = TestUtil.createStaticallyLabeledNode(N4C_URI);
+		final Node n4d = TestUtil.createStaticallyLabeledNode(N4D_URI);
+		final Edge e4a = TestUtil.createStaticallyLabeledEdge(E4A_URI, N4A_URI,
+				N4B_URI, false);
+		final Edge e4b = TestUtil.createStaticallyLabeledEdge(E4B_URI, N4A_URI,
+				N4C_URI, false);
+		final Label gl4 = TestUtil.createStaticLabel(G_L4_URI, g4.getURI());
+		final NodeLabel nl4a1 = TestUtil.createStaticNodeLabel(NL4A1_URI, n4a
+				.getURI());
+		final NodeLabel nl4b1 = TestUtil.createStaticNodeLabel(NL4B1_URI, n4b
+				.getURI());
+		final NodeLabel nl4c1 = TestUtil.createStaticNodeLabel(NL4C1_URI, n4c
+				.getURI());
+
+		// Graph G4
+		g4.putGraphLabel(gl4);
+		g4.putNodeLabel(nl4a1);
+		g4.putNodeLabel(nl4b1);
+		g4.putNodeLabel(nl4c1);
+		// we deliberately don't label n4d
+		g4.putNode(n4a);
+		g4.putNode(n4b);
+		g4.putNode(n4c);
+		g4.putNode(n4d);
+//		g4.putNodeLabel((NodeLabel) n4a.getLabels().get(0));
+//		g4.putNodeLabel((NodeLabel) n4b.getLabels().get(0));
+//		g4.putNodeLabel((NodeLabel) n4c.getLabels().get(0));
+//		g4.putNodeLabel((NodeLabel) n4d.getLabels().get(0));
+
+		g4.putEdge(e4a);
+		g4.putEdge(e4b);
+
+		// *** Model M0 ***
+		m0.getGraphs().add(g0);
+		m0.getGraphs().add(g1);
+		m0.getModels().add(m1);
+		m0.getModels().add(m3);
+		m0.getNodeDecorators().add(nodeDec0a);
+
+		// *** Model M1 ***
+		m1.getGraphs().add(g2);
+		m1.getModels().add(m2);
+		m1.getEdgeDecorators().add(edec1a);
+
+		// *** Model M2 ***
+		m2.getGraphs().add(g5);
+		m2.getGraphDecorators().add(gdec2a);
+		m2.getNodeDecorators().add(nodeDec2a);
+
+		// *** Model M3 ***
+		m3.getGraphs().add(g3);
+		m3.getGraphs().add(g4);
+		m3.getEdgeDecorators().add(edec3a);
+
+		assertTrue(m0.sane());
+
+		return m0;
+	} // createFixture
+
+	/**
+	 * Create a model with one graph that has one edge and one label that
+	 * reference a node that doesn't exist.
+	 * 
+	 * @param modelURI
+	 * @return a fixture for testing
+	 */
+	private Model createUnresolvedFixture(final URI modelURI) {
+		final Model retValue = createModel(modelURI);
+
+		final URI NODE_ONE_URI = STEMURI.createURI(NODE + "/" + "node1");
+		final Graph g1 = createGraph(STEMURI.createURI(GRAPH + "/" + "g1"));
+		final Edge e1 = TestUtil.createStaticallyLabeledEdge(STEMURI
+				.createURI(EDGE + "/" + "e1"), NODE_ONE_URI, NODE_ONE_URI,
+				false);
+		final NodeLabel l1 = TestUtil.createStaticNodeLabel(STEMURI
+				.createURI(LABEL + "/" + "l1"), NODE_ONE_URI);
+		g1.putEdge(e1);
+		g1.putNodeLabel(l1);
+
+		retValue.getGraphs().add(g1);
+		return retValue;
+	} // createUnresolvedFixture
+
+	/**
+	 * @param uri
+	 *            the uri to use for the newly created model
+	 * @return a new model instance
+	 * @generated NOT
+	 */
+	private static Model createModel(URI uri) {
+		final Model retValue = ModelFactory.eINSTANCE.createModel();
+		retValue.setURI(uri);
+		return retValue;
+	} // createModel
+
+	/**
+	 * @param uri
+	 *            the uri to use for the newly created graph
+	 * @return a new graph instance
+	 * @generated NOT
+	 */
+	private static Graph createGraph(URI uri) {
+		final Graph retValue = GraphFactory.eINSTANCE.createGraph();
+		retValue.setURI(uri);
+		return retValue;
+	} // createGraph
+
+	/**
+	 * @param uri
+	 *            the uri to use for the newly created node decorator
+	 * @return the new node decorator instance
+	 */
+	private static NodeDecorator createNodeDecorator(final URI uri) {
+		final NodeDecorator nodeDecorator = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		nodeDecorator.setURI(uri);
+		return nodeDecorator;
+	} // createNodeDecorator
+
+	/**
+	 * @param uri
+	 *            the uri to use for the newly created edge decorator
+	 * @return the new edge decorator instance
+	 */
+	private static EdgeDecorator createEdgeDecorator(
+			final URI edgeDecoratorURI, final String uriString,
+			final URI nodeAURI, final URI nodeBURI, final int edgeIndex) {
+		final TestEdgeDecorator1 edgeDecorator = DecoratorsFactory.eINSTANCE
+				.createTestEdgeDecorator1();
+		edgeDecorator.setURI(edgeDecoratorURI);
+		edgeDecorator.setNodeAURI(nodeAURI);
+		edgeDecorator.setNodeBURI(nodeBURI);
+		edgeDecorator.setEdgeURI(createDynamicEdgeURI(uriString, edgeIndex));
+		return edgeDecorator;
+	} // createEdgeDecorator
+
+	/**
+	 * @param edgeDecoratorURI
+	 * @return a dynamic edge uri
+	 */
+	protected static URI createDynamicEdgeURI(final String uriString,
+			final int index) {
+		final URI retValue = STEMURI.createURI(EDGE + "/" + uriString + index);
+		return retValue;
+	} // createDynamicEdgeURI
+
+	/**
+	 * @param uri
+	 *            the uri to use for the newly created graph decorator
+	 * @return the new graph decorator instance
+	 */
+	private static GraphDecorator createGraphDecorator(URI uri) {
+		final GraphDecorator graphDecorator = DecoratorsFactory.eINSTANCE
+				.createTestGraphDecorator1();
+		graphDecorator.setURI(uri);
+		return graphDecorator;
+	} // createGraphDecorator
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	@Override
+	public void testSane() {
+		final Model model = getFixture();
+		assertTrue(model.sane());
+	} // testSane
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.Model#getCanonicalGraph(URI) <em>Canonical Graph</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.model.Model#getCanonicalGraph(URI)
+	 * @generated NOT
+	 */
+	public void testGetCanonicalGraph__URI() {
+		final int NUM_STATIC_NODES = 9;
+		final int NUM_STATIC_EDGES = 7;
+
+		// 1 for EDEC_1A, 1 for EDEC_3A
+		final int NUM_DYNAMIC_EDGES = 2;
+		final int NUM_STATIC_NODE_LABELS = 2 * NUM_STATIC_NODES;
+
+		// +2 for NDEC_2A on nodes N5a & N5b
+		final int NUM_DYNAMIC_NODE_LABELS = NUM_STATIC_NODES + 2;
+		final int NUM_STATIC_GRAPH_LABELS = 6;
+		final int NUM_DYNAMIC_GRAPH_LABELS = 1;
+		final int NUM_DYNAMIC_EDGE_LABELS = NUM_DYNAMIC_EDGES;
+
+		final Model model = getFixture();
+		final Graph canonicalGraph = model
+				.getCanonicalGraph(CANONICAL_GRAPH1_URI, new IdentifiableFilterImpl(model.getDublinCore().getCoverage()));
+
+		assertTrue(canonicalGraph.sane());
+
+		// The URI of the graph should be what we think it should be
+		assertTrue(canonicalGraph.getURI().equals(CANONICAL_GRAPH1_URI));
+
+		// There shouldn't be any unresolved URI references
+		assertTrue(canonicalGraph.getUnresolvedIdentifiables().size() == 0);
+
+		// The numbers should add up
+		assertTrue(canonicalGraph.getNumNodes() == NUM_STATIC_NODES);
+
+		assertTrue(canonicalGraph.getNumEdges() == NUM_STATIC_EDGES
+				+ NUM_DYNAMIC_EDGES);
+
+		assertTrue(canonicalGraph.getNumGraphLabels() == NUM_STATIC_GRAPH_LABELS
+				+ NUM_DYNAMIC_GRAPH_LABELS);
+
+		assertTrue(canonicalGraph.getNumNodeLabels() == NUM_STATIC_NODE_LABELS
+				+ NUM_DYNAMIC_NODE_LABELS);
+
+		assertTrue(canonicalGraph.getNumDynamicLabels() == +NUM_DYNAMIC_NODE_LABELS
+				+ NUM_DYNAMIC_GRAPH_LABELS + NUM_DYNAMIC_EDGE_LABELS);
+
+		// All the Edges should be hooked up to their nodes
+		final Edge e1a = canonicalGraph.getEdge(E1A_URI);
+		assertTrue(e1a.getA().getURI().equals(N5A_URI));
+		assertTrue(e1a.getB().getURI().equals(N4A_URI));
+
+		final Edge e1b = canonicalGraph.getEdge(E1B_URI);
+		assertTrue(e1b.getA().getURI().equals(N5B_URI));
+		assertTrue(e1b.getB().getURI().equals(N4B_URI));
+
+		final Edge e2a = canonicalGraph.getEdge(E2A_URI);
+		assertTrue(e2a.getA().getURI().equals(N5A_URI));
+		assertTrue(e2a.getB().getURI().equals(N5B_URI));
+
+		final Edge e3a = canonicalGraph.getEdge(E3A_URI);
+		assertTrue(e3a.getA().getURI().equals(N3A_URI));
+		assertTrue(e3a.getB().getURI().equals(N3B_URI));
+
+		final Edge e4a = canonicalGraph.getEdge(E4A_URI);
+		assertTrue(e4a.getA().getURI().equals(N4A_URI));
+		assertTrue(e4a.getB().getURI().equals(N4B_URI));
+
+		final Edge e4b = canonicalGraph.getEdge(E4B_URI);
+		assertTrue(e4b.getA().getURI().equals(N4A_URI));
+		assertTrue(e4b.getB().getURI().equals(N4C_URI));
+
+		final Edge e5a = canonicalGraph.getEdge(E5A_URI);
+		assertTrue(e5a.getA().getURI().equals(N5A_URI));
+		assertTrue(e5a.getB().getURI().equals(N5B_URI));
+
+		// The nodes should have (non-containment) references to their edges and
+		// labels
+		final Node n0a = canonicalGraph.getNode(N0A_URI);
+		final EList n0aEdges = n0a.getEdges();
+		assertTrue(n0aEdges.size() == 0);
+		final EList n0aLabels = n0a.getLabels();
+		// 1 + 2 static labels, 1 dynamic
+		assertTrue(n0aLabels.size() == 1 + 2 + 1);
+		verifyNodeLabelsReferenceNode(n0a);
+
+		final Node n3a = canonicalGraph.getNode(N3A_URI);
+		final EList n3aEdges = n3a.getEdges();
+		assertTrue(n3aEdges.size() == 1);
+		assertTrue(n3aEdges.contains(e3a));
+		final EList n3aLabels = n3a.getLabels();
+		// 1 + 1 static label, 1 dynamic
+		assertTrue(n3aLabels.size() == 1 + 1 + 1);
+		verifyNodeLabelsReferenceNode(n3a);
+
+		final Node n3b = canonicalGraph.getNode(N3B_URI);
+		final EList n3bEdges = n3b.getEdges();
+		assertTrue(n3bEdges.size() == 1);
+		assertTrue(n3bEdges.contains(e3a));
+		final EList n3bLabels = n3b.getLabels();
+		// 1+ 1 static label, 1 dynamic
+		assertTrue(n3bLabels.size() == 1 + 1 + 1);
+		verifyNodeLabelsReferenceNode(n3b);
+
+		final Node n4a = canonicalGraph.getNode(N4A_URI);
+		final EList n4aEdges = n4a.getEdges();
+		// 3 static edges, 1 dynamic
+		assertTrue(n4aEdges.size() == 3 + 1);
+		assertTrue(n4aEdges.contains(e1a));
+		assertTrue(n4aEdges.contains(e4a));
+		assertTrue(n4aEdges.contains(e4b));
+		// assertTrue(n4aEdges.contains( de4 );
+		final EList n4aLabels = n4a.getLabels();
+		// 1 + 1 static label, 1 dynamic
+		assertTrue(n4aLabels.size() == 1 + 1 + 1);
+		verifyNodeLabelsReferenceNode(n4a);
+
+		final Node n4b = canonicalGraph.getNode(N4B_URI);
+		final EList n4bEdges = n4b.getEdges();
+		// 2 static, 1 dynamic
+		assertTrue(n4bEdges.size() == 2 + 1);
+		assertTrue(n4bEdges.contains(e1b));
+		assertTrue(n4bEdges.contains(e4a));
+		// assertTrue(n4aEdges.contains( de4 );
+		final EList n4bLabels = n4b.getLabels();
+		// 1 + 1 static label, 1 dynamic
+		assertTrue(n4bLabels.size() == 1 + 1 + 1);
+		verifyNodeLabelsReferenceNode(n4b);
+
+		final Node n4c = canonicalGraph.getNode(N4C_URI);
+		final EList n4cEdges = n4c.getEdges();
+		assertTrue(n4cEdges.size() == 1);
+		assertTrue(n4cEdges.contains(e4b));
+		final EList n4cLabels = n4c.getLabels();
+		// 1+ 1 static label, 1 dynamic
+		assertTrue(n4cLabels.size() == 1 + 1 + 1);
+		verifyNodeLabelsReferenceNode(n4c);
+
+		final Node n4d = canonicalGraph.getNode(N4D_URI);
+		final EList n4dEdges = n4d.getEdges();
+		assertTrue(n4dEdges.size() == 0);
+		final EList n4dLabels = n4d.getLabels();
+		// 1 static label, 1 dynamic
+		assertTrue(n4dLabels.size() == 1 + 1);
+		verifyNodeLabelsReferenceNode(n4d);
+
+		final Node n5a = canonicalGraph.getNode(N5A_URI);
+		final EList n5aEdges = n5a.getEdges();
+		// 3 static, 1 dynamic from edec1a
+		assertTrue(n5aEdges.size() == 3 + 1);
+		assertTrue(n5aEdges.contains(e1a));
+		assertTrue(n5aEdges.contains(e2a));
+		assertTrue(n5aEdges.contains(e5a));
+		final EList n5aLabels = n5a.getLabels();
+		// 1 + 1 static label, 2 dynamic (NDEC_0A & NDEC_2A)
+		assertTrue(n5aLabels.size() == 1 + 1 + 2);
+		verifyNodeLabelsReferenceNode(n5a);
+
+		final Node n5b = canonicalGraph.getNode(N5B_URI);
+		final EList n5bEdges = n5b.getEdges();
+		// 3 static, 1 dynamic from edec1a
+		assertTrue(n5bEdges.size() == 3 + 1);
+		assertTrue(n5bEdges.contains(e1b));
+		assertTrue(n5bEdges.contains(e2a));
+		assertTrue(n5bEdges.contains(e5a));
+		final EList n5bLabels = n5b.getLabels();
+		// 1+ 1 static label, 2 dynamic (NDEC_0A & NDEC_2A)
+		assertTrue(n5bLabels.size() == 1 + 1 + 2);
+		verifyNodeLabelsReferenceNode(n5b);
+
+		// Graph labels should reference the graph
+		for (final Iterator graphLabelIter = canonicalGraph.getGraphLabels()
+				.values().iterator(); graphLabelIter.hasNext();) {
+			final Label label = (Label) graphLabelIter.next();
+			final URI graphURI = canonicalGraph.getURI();
+			assertTrue("Graph label \"" + label.getURI()
+					+ "\" does not reference graph \"" + graphURI
+					+ "\", instead, it references \""
+					+ label.getURIOfIdentifiableToBeLabeled() + "\"", label
+					.getURIOfIdentifiableToBeLabeled().equals(graphURI));
+		} // for
+	} // testGetCanonicalGraph__URI
+
+	/**
+	 * Verify that when a canonical graph is created, it does not destroy the
+	 * representation maintained in the model.
+	 * 
+	 * @generated NOT
+	 */
+	public void testNonDestructiveGetCanonicalGraph() {
+		final Model model = getFixture();
+
+		final Graph graph1 = model.getCanonicalGraph(CANONICAL_GRAPH1_URI, new IdentifiableFilterImpl(model.getDublinCore().getCoverage()));
+		final Graph graph2 = model.getCanonicalGraph(CANONICAL_GRAPH2_URI, new IdentifiableFilterImpl(model.getDublinCore().getCoverage()));
+
+		final DublinCore dc1 = graph1.getDublinCore();
+		final DublinCore dc2 = graph2.getDublinCore();
+
+		// The graphs should be different instances
+		assertTrue(graph1 != graph2);
+		assertFalse(graph1.getURI().equals(graph2.getURI()));
+
+		// ... but otherwise the same
+		assertTrue(graph1.getTypeURI().equals(graph2.getTypeURI()));
+
+		assertTrue(graph1.getURI().toString().equals(dc1.getIdentifier()));
+		assertTrue(graph1.getTypeURI().toString().equals(dc1.getType()));
+
+		assertTrue(graph2.getURI().toString().equals(dc2.getIdentifier()));
+		assertTrue(graph2.getTypeURI().toString().equals(dc2.getType()));
+
+		assertTrue(graph1.getNumEdges() == graph2.getNumEdges());
+		assertTrue(graph1.getNumNodes() == graph2.getNumNodes());
+		assertTrue(graph1.getNumNodeLabels() == graph2.getNumNodeLabels());
+		assertTrue(graph1.getNumGraphLabels() == graph2.getNumGraphLabels());
+		assertTrue(graph1.getNumDynamicLabels() == graph2.getNumDynamicLabels());
+
+		// ... and different
+		assertTrue(graph1.getEdge(E1A_URI) != graph2.getEdge(E1A_URI));
+
+	} // testNonDestructiveGetCanonicalGraph
+
+	/**
+	 * Test that unresolved identifiers were found
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetUnresolvedCanonicalGraph() {
+		final Model model = getUnresolvedFixture();
+		final Graph canonicalGraph = model
+				.getCanonicalGraph(CANONICAL_GRAPH1_URI, new IdentifiableFilterImpl(model.getDublinCore().getCoverage()));
+
+		// The URI of the graph should be what we think it should be
+		assertTrue(canonicalGraph.getURI().equals(CANONICAL_GRAPH1_URI));
+
+		// There should be unresolved URI references
+		// 1 for the edge that can't find its nodes and 1 for a Label
+		// that can't find its node.
+		assertTrue(canonicalGraph.getUnresolvedIdentifiables().size() == 1 + 1);
+		// TODO re-do this test
+	} // testGetUnresolvedCanonicalGraph
+
+	/**
+	 * Test the Model has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Model model = getFixture();
+		final URI typeURI = model.getTypeURI();
+		assertTrue(typeURI.scheme().equals(Constants.STEM_TYPE_SCHEME));
+		assertTrue(typeURI.equals(STEMURI.MODEL_TYPE_URI));
+	} // testGetTypeURI
+
+	/**
+	 * Test that everything in the Model has the correct URI scheme
+	 */
+	public void testGetURIs() {
+		final Model model = getFixture();
+		final Graph canonicalGraph = model
+				.getCanonicalGraph(CANONICAL_GRAPH1_URI, new IdentifiableFilterImpl(model.getDublinCore().getCoverage()));
+
+		assertTrue(canonicalGraph.sane());
+
+		assertTrue(canonicalGraph.getNumNodes() > 0);
+		assertTrue(canonicalGraph.getNumEdges() > 0);
+		assertTrue(canonicalGraph.getNumNodeLabels() > 0);
+		assertTrue(canonicalGraph.getNumDynamicLabels() > 0);
+
+		final EList decorators = canonicalGraph.getDecorators();
+
+		assertTrue(decorators.size() > 0);
+		// Edge Decorators
+		for (final Iterator edgeDecoratorlIter = decorators.iterator(); edgeDecoratorlIter
+				.hasNext();) {
+			final Decorator edgeDecorator = (Decorator) edgeDecoratorlIter
+					.next();
+			assertTrue(edgeDecorator.sane());
+		} // for each edge decorator
+
+	} // testGetURIs
+
+	/**
+	 * Test the ability to serialize a model and then de-serialize it.
+	 */
+	public void testSerializeDeserialize() {
+		final Model model = getFixture();
+		try {
+			// There is an issue to be resolved with serialization of
+			// non-containment references to sub-models and sub-graphs. The
+			// fixture we create above has some that do not have a resource
+			// specified so when we serialize the fixture they don't get
+			// serialized. The result is that when we de-serialize things fail.
+			// Comment out the rest of this test until we resolve how to handle
+			// this as a solution may emerge from how the editor implementations
+			// serialize the things they create. The solution may be to
+			// reflectively look for non-containment references when serializing
+			// and set the resource for those instances that do not have one so
+			// they will be properly serialized too.
+			
+			//TestUtil.serializeIdentifiable(model, SERIALZATION_TEST_URI);
+			// final ResourceSet resourceSet = new ResourceSetImpl();
+			// final Resource resource = resourceSet.getResource(
+			// SERIALZATION_TEST_URI, true);
+			//
+			// resource.load(null);
+			// final Model deserializedModel = (Model)
+			// resource.getContents().get(
+			// 0);
+			// assertNotNull(deserializedModel);
+
+		}
+//			catch (IOException e) {
+//			fail(e.getMessage());
+//		} // catch
+		catch (NullPointerException npe) {
+			fail(npe.getMessage());
+		} // null pointer exception
+		catch (Exception e) {
+			fail(e.getMessage());
+		}
+	} // testSerializeDeserialize
+
+	/**
+	 * Perform a JUnit assert ensuring that all of a Node's labels reference the
+	 * URI of the node.
+	 * 
+	 * @param node
+	 *            the node to verify
+	 */
+	private void verifyNodeLabelsReferenceNode(final Node node) {
+		final EList labels = node.getLabels();
+		final URI nodeURI = node.getURI();
+		for (final Iterator nodeLabelIter = labels.iterator(); nodeLabelIter
+				.hasNext();) {
+			final Label label = (Label) nodeLabelIter.next();
+			assertTrue("Label \"" + label.getURI()
+					+ "\" does not reference node \"" + nodeURI.toString()
+					+ "\", instead, it references \""
+					+ label.getURIOfIdentifiableToBeLabeled() + "\"", label
+					.getURIOfIdentifiableToBeLabeled().equals(nodeURI));
+		} // for each node's label
+	} // verifyLabelsReferenceNode
+
+} // ModelTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTests.java
new file mode 100644
index 0000000..3b8b4a3
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/ModelTests.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>model</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModelTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public static Test suite() {
+		TestSuite suite = new ModelTests("model Tests");
+		suite.addTestSuite(ModelTest.class);
+		suite.addTestSuite(STEMTimeTest.class);
+		return suite;
+	} // suite
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelTests(String name) {
+		super(name);
+	}
+
+} //ModelTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/NodeDecoratorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/NodeDecoratorTest.java
new file mode 100644
index 0000000..b8f6137
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/NodeDecoratorTest.java
@@ -0,0 +1,83 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.NodeDecorator;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Node Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class NodeDecoratorTest extends DecoratorTest {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(NodeDecoratorTest.class);
+	}
+
+	/**
+	 * Constructs a new Node Decorator test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NodeDecoratorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Node Decorator test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected NodeDecorator getFixture() {
+		return (NodeDecorator)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ModelFactory.eINSTANCE.createNodeDecorator());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testSane() {
+		final NodeDecorator nodeDecorator = getFixture();
+		assertTrue(nodeDecorator.sane());
+	} // testSane
+
+} // NodeDecoratorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/STEMTimeTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/STEMTimeTest.java
new file mode 100644
index 0000000..050ee84
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/model/tests/STEMTimeTest.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.core.model.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>STEM Time</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.model.STEMTime#addIncrement(long) <em>Add Increment</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.STEMTime#hashCode() <em>Hash Code</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.model.STEMTime#equals(java.lang.Object) <em>Equals</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class STEMTimeTest extends TestCase {
+
+	// One day's worth of milliseconds
+	private static final long TEST_INCREMENT = 24 * 60 * 60 * 1000;
+
+	/**
+	 * The fixture for this STEM Time test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTime fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(STEMTimeTest.class);
+	}
+
+	/**
+	 * Constructs a new STEM Time test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public STEMTimeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this STEM Time test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(STEMTime fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this STEM Time test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected STEMTime getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ModelFactory.eINSTANCE.createSTEMTime());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.STEMTime#addIncrement(long) <em>Add Increment</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.model.STEMTime#addIncrement(long)
+	 * @generated NOT
+	 */
+	public void testAddIncrement__long() {
+		final STEMTime startTime = getFixture();
+		final STEMTime newTime = startTime.addIncrement(TEST_INCREMENT);
+		assertTrue(newTime.getTime().compareTo(startTime.getTime()) > 0);
+		assertTrue(newTime.getTime().getTime() - startTime.getTime().getTime() == TEST_INCREMENT);
+	} // testAddIncrement__long
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.STEMTime#hashCode() <em>Hash Code</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.STEMTime#hashCode()
+	 * @generated NOT
+	 */
+	public void testHashCode() {
+		final STEMTime time1 = getFixture();
+		final STEMTime time1a = getFixture();
+		assertTrue(time1.hashCode() == time1a.hashCode());
+		final STEMTime time2 = time1a.addIncrement(TEST_INCREMENT);
+		assertFalse(time1.hashCode() == time2.hashCode());
+	} // testHashCode
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.model.STEMTime#equals(java.lang.Object) <em>Equals</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.STEMTime#equals(java.lang.Object)
+	 * @generated NOT
+	 */
+	public void testEquals__Object() {
+		final STEMTime time1 = getFixture();
+		final STEMTime time1a = getFixture();
+		assertTrue(time1.equals( time1a));
+	} // testEquals__Object
+
+} // STEMTimeTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleNOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleNOPModifierTest.java
new file mode 100644
index 0000000..ba03d92
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleNOPModifierTest.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.DoubleNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Double NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DoubleNOPModifierTest extends NOPModifierTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DoubleNOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Double NOP Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleNOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Double NOP Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DoubleNOPModifier getFixture() {
+		return (DoubleNOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * @return a {@link DoubleNOPModifier} ready for testing.
+	 */
+	public DoubleNOPModifier createFixture() {
+		final DoubleNOPModifier retValue = ModifierFactory.eINSTANCE.createDoubleNOPModifier();
+		EObject testObject = getTestObject();
+		EStructuralFeature feature = testObject.eClass()
+		.getEStructuralFeatures().get(0);
+		retValue.setEStructuralFeature(feature);
+		return retValue;
+	} // createFixture
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEDouble();
+	} // getTestAttributeEType
+} //DoubleNOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleRangeModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleRangeModifierTest.java
new file mode 100644
index 0000000..a28fe47
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleRangeModifierTest.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Double Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DoubleRangeModifierTest extends RangeModifierTest {
+
+	public static final double DRM_START_VALUE = 10.0;
+	public static final double DRM_END_VALUE = 12.5;
+	public static final double DRM_INCREMENT_VALUE = 1.0;
+
+	// 10, 11, 12, 12.5
+	private static final double EXPECTED_VALUES[] = new double[] {
+			DRM_START_VALUE, DRM_START_VALUE + DRM_INCREMENT_VALUE,
+			DRM_START_VALUE + 2 * DRM_INCREMENT_VALUE, DRM_END_VALUE };
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DoubleRangeModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Double Range Modifier test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleRangeModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Double Range Modifier test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected DoubleRangeModifier getFixture() {
+		return (DoubleRangeModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link DoubleRangeModifier} ready for testing.
+	 */
+	public DoubleRangeModifier createFixture() {
+		final DoubleRangeModifier retValue = ModifierFactory.eINSTANCE
+				.createDoubleRangeModifier();
+		retValue.setStartValue(DRM_START_VALUE);
+		retValue.setEndValue(DRM_END_VALUE);
+		retValue.setIncrement(DRM_INCREMENT_VALUE);
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEDouble();
+	} // getTestAttributeEType
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	} // getNumberOfModifications
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final DoubleRangeModifier fixture = getFixture();
+		Double currentValue = (Double) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+
+		return currentValue.doubleValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+
+} // DoubleRangeModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleSequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleSequenceModifierTest.java
new file mode 100644
index 0000000..206ce94
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/DoubleSequenceModifierTest.java
@@ -0,0 +1,135 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Double Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DoubleSequenceModifierTest extends SequenceModifierTest {
+
+	private static final double EXPECTED_VALUES[] = new double[] {
+			DoubleRangeModifierTest.DRM_START_VALUE,
+			DoubleRangeModifierTest.DRM_END_VALUE };
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DoubleSequenceModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Double Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DoubleSequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Double Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DoubleSequenceModifier getFixture() {
+		return (DoubleSequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.SequenceModifierTest#createFixture()
+	 */
+	@SuppressWarnings("boxing")
+	@Override
+	public SequenceModifier createFixture() {
+		final DoubleSequenceModifier retValue = ModifierFactory.eINSTANCE
+				.createDoubleSequenceModifier();
+		for (double value : EXPECTED_VALUES) {
+			 retValue.getSequence().add(value);
+		} // for each double
+
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEDouble();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final DoubleSequenceModifier fixture = getFixture();
+		Double currentValue = (Double) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.doubleValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+	
+} //DoubleSequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/FeatureModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/FeatureModifierTest.java
new file mode 100644
index 0000000..62dbb69
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/FeatureModifierTest.java
@@ -0,0 +1,218 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Arrays;
+
+import junit.framework.TestCase;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Feature Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.FeatureModifier#isComplete() <em>Complete</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.FeatureModifier#updateFeature() <em>Update Feature</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.FeatureModifier#reset() <em>Reset</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class FeatureModifierTest extends TestCase {
+
+	public static final String STRUCTURAL_FEATURE_NAME = "attribute";
+
+	/**
+	 * The fixture for this Feature Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected FeatureModifier fixture = null;
+
+	/**
+	 * The object to be modified.
+	 */
+	protected EObject testObject = null;
+
+	/**
+	 * Constructs a new Feature Modifier test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public FeatureModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		testObject = createTestObject();
+	}
+
+	/**
+	 * Sets the fixture for this Feature Modifier test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(FeatureModifier fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Feature Modifier test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected FeatureModifier getFixture() {
+		return fixture;
+	}
+
+	protected EObject getTestObject() {
+		return testObject;
+	} // getTestObject
+
+	/**
+	 * Test that the fixture is "sane"
+	 * 
+	 * @see SanityChecker
+	 */
+	public void testFixtureSanity() {
+		final SanityChecker fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.FeatureModifier#getModificationSummary() <em>Modification Summary</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#getModificationSummary()
+	 * @generated NOT
+	 */
+	public void testGetModificationSummary() {
+		final FeatureModifier fixture = getFixture();
+		final EObject testObject = getTestObject();
+		fixture.setTarget(testObject);
+		
+		final int numberOfModifications = getNumberOfModifications();
+		for (int i = 0; i < numberOfModifications; i++) {
+			assertFalse(fixture.isComplete());
+			fixture.updateFeature();
+			final String temp = fixture.getModificationSummary();
+			assertNotNull(temp);
+			assertFalse(temp.equals(""));
+		} // for i
+		assertTrue(fixture.isComplete());
+
+	} // testGetModificationSummary
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.FeatureModifier#isComplete() <em>Complete</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#isComplete()
+	 * @generated NOT
+	 */
+	public void testIsComplete() {
+		final FeatureModifier fixture = getFixture();
+		final EObject testObject = getTestObject();
+		fixture.setTarget(testObject);
+
+		final int numberOfModifications = getNumberOfModifications();
+		for (int i = 0; i < numberOfModifications; i++) {
+			assertFalse(fixture.isComplete());
+			fixture.updateFeature();
+		} // for i
+		assertTrue(fixture.isComplete());
+	} // testIsComplete
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.FeatureModifier#updateFeature() <em>Update Feature</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#updateFeature()
+	 * @generated NOT
+	 */
+	public void testUpdateFeature() {
+		final FeatureModifier fixture = getFixture();
+		final EObject testObject = getTestObject();
+		fixture.setTarget(testObject);
+
+		final int numberOfModifications = getNumberOfModifications();
+		for (int i = 0; i < numberOfModifications; i++) {
+			assertFalse(fixture.isComplete());
+			fixture.updateFeature();
+			assertTrue(validateFeatureValue(i));
+		} // for i
+		assertTrue(fixture.isComplete());
+	} // testUpdateFeature
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.FeatureModifier#reset() <em>Reset</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.FeatureModifier#reset()
+	 * @generated NOT
+	 */
+	public void testReset() {
+		final FeatureModifier fixture = getFixture();
+		final EObject testObject = getTestObject();
+		fixture.setTarget(testObject);
+		// TODO implement FeatureModifierTest.testReset()
+		assertTrue(true);
+	} // testReset
+
+	/**
+	 * @return an {@link EObject} to be modified
+	 */
+	protected EObject createTestObject() {
+		return ModifierTest.createTestObject("TestClass", Arrays
+				.asList(getTestAttributeEType()));
+	} // createTestObject
+
+	/**
+	 * @return the {@link EClassifier} of that is the type of the attribute in
+	 *         the test object.
+	 */
+	abstract protected EClassifier getTestAttributeEType();
+
+	/**
+	 * @return the number of modifications the {@link FeatureModifier} will make
+	 *         to the test object.
+	 */
+	abstract int getNumberOfModifications();
+
+	/**
+	 * @param i
+	 * @return <code>true</code> if the feature value matches the i'th
+	 *         expected value.
+	 */
+	abstract protected boolean validateFeatureValue(int i);
+
+} // FeatureModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerNOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerNOPModifierTest.java
new file mode 100644
index 0000000..b8be9b4
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerNOPModifierTest.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Integer NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class IntegerNOPModifierTest extends NOPModifierTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(IntegerNOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Integer NOP Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerNOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Integer NOP Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected IntegerNOPModifier getFixture() {
+		return (IntegerNOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * @return a {@link IntegerNOPModifier} ready for testing.
+	 */
+	public IntegerNOPModifier createFixture() {
+		final IntegerNOPModifier retValue = ModifierFactory.eINSTANCE.createIntegerNOPModifier();
+		EObject testObject = getTestObject();
+		EStructuralFeature feature = testObject.eClass()
+		.getEStructuralFeatures().get(0);
+		retValue.setEStructuralFeature(feature);
+		return retValue;
+	} // createFixture
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEInt();
+	}
+} //IntegerNOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerRangeModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerRangeModifierTest.java
new file mode 100644
index 0000000..fa13ff1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerRangeModifierTest.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Integer Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class IntegerRangeModifierTest extends RangeModifierTest {
+
+	public static final int IRM_START_VALUE = 20;
+	public static final int IRM_END_VALUE = 22;
+	public static final int IRM_INCREMENT_VALUE = 1;
+
+	private static final int EXPECTED_VALUES[] = new int[] { IRM_START_VALUE,
+			IRM_START_VALUE + IRM_INCREMENT_VALUE, IRM_END_VALUE };
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(IntegerRangeModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Integer Range Modifier test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerRangeModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Integer Range Modifier test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected IntegerRangeModifier getFixture() {
+		return (IntegerRangeModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link IntegerRangeModifier} ready for testing.
+	 */
+	public IntegerRangeModifier createFixture() {
+		final IntegerRangeModifier retValue = ModifierFactory.eINSTANCE
+				.createIntegerRangeModifier();
+		retValue.setStartValue(IRM_START_VALUE);
+		retValue.setEndValue(IRM_END_VALUE);
+		retValue.setIncrement(IRM_INCREMENT_VALUE);
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEInt();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	} // getNumberOfModifications
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final IntegerRangeModifier fixture = getFixture();
+		Integer currentValue = (Integer) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+
+		return currentValue.intValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+
+} // IntegerRangeModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerSequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerSequenceModifierTest.java
new file mode 100644
index 0000000..2457864
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/IntegerSequenceModifierTest.java
@@ -0,0 +1,135 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Integer Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class IntegerSequenceModifierTest extends SequenceModifierTest {
+
+	private static final int EXPECTED_VALUES[] = new int[] {
+		IntegerRangeModifierTest.IRM_START_VALUE,
+		IntegerRangeModifierTest.IRM_END_VALUE };
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(IntegerSequenceModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Integer Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IntegerSequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Integer Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected IntegerSequenceModifier getFixture() {
+		return (IntegerSequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.SequenceModifierTest#createFixture()
+	 */
+	@SuppressWarnings("boxing")
+	@Override
+	public SequenceModifier createFixture() {
+		final IntegerSequenceModifier retValue = ModifierFactory.eINSTANCE
+				.createIntegerSequenceModifier();
+		for (int value : EXPECTED_VALUES) {
+			 retValue.getSequence().add(value);
+		} // for each double
+
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEInt();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final IntegerSequenceModifier fixture = getFixture();
+		Integer currentValue = (Integer) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.intValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+	
+} //IntegerSequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongNOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongNOPModifierTest.java
new file mode 100644
index 0000000..03628df
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongNOPModifierTest.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.LongNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Long NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class LongNOPModifierTest extends NOPModifierTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(LongNOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Long NOP Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongNOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Long NOP Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected LongNOPModifier getFixture() {
+		return (LongNOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * @return a {@link LongNOPModifier} ready for testing.
+	 */
+	public LongNOPModifier createFixture() {
+		final LongNOPModifier retValue = ModifierFactory.eINSTANCE.createLongNOPModifier();
+		EObject testObject = getTestObject();
+		EStructuralFeature feature = testObject.eClass()
+		.getEStructuralFeatures().get(0);
+		retValue.setEStructuralFeature(feature);
+		return retValue;
+	} // createFixture
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getELong();
+	}
+} //LongNOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongRangeModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongRangeModifierTest.java
new file mode 100644
index 0000000..43010b1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongRangeModifierTest.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Long Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class LongRangeModifierTest extends RangeModifierTest {
+
+	public static final long LRM_START_VALUE = 20L;
+	public static final long LRM_END_VALUE = 22L;
+	public static final long LRM_INCREMENT_VALUE = 1L;
+
+	private static final long EXPECTED_VALUES[] = new long[] { LRM_START_VALUE,
+			LRM_START_VALUE + LRM_INCREMENT_VALUE, LRM_END_VALUE };
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(LongRangeModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Long Range Modifier test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public LongRangeModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Long Range Modifier test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected LongRangeModifier getFixture() {
+		return (LongRangeModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link IntegerRangeModifier} ready for testing.
+	 */
+	public LongRangeModifier createFixture() {
+		final LongRangeModifier retValue = ModifierFactory.eINSTANCE
+				.createLongRangeModifier();
+		retValue.setStartValue(LRM_START_VALUE);
+		retValue.setEndValue(LRM_END_VALUE);
+		retValue.setIncrement(LRM_INCREMENT_VALUE);
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getELong();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	} // getNumberOfModifications
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final LongRangeModifier fixture = getFixture();
+		Long currentValue = (Long) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+
+		return currentValue.longValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+
+} // LongRangeModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongSequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongSequenceModifierTest.java
new file mode 100644
index 0000000..7823c93
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/LongSequenceModifierTest.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Long Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class LongSequenceModifierTest extends SequenceModifierTest {
+	private static final long EXPECTED_VALUES[] = new long[] {
+		LongRangeModifierTest.LRM_START_VALUE,
+		LongRangeModifierTest.LRM_END_VALUE };
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(LongSequenceModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Long Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LongSequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Long Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected LongSequenceModifier getFixture() {
+		return (LongSequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.SequenceModifierTest#createFixture()
+	 */
+	@SuppressWarnings("boxing")
+	@Override
+	public SequenceModifier createFixture() {
+		final LongSequenceModifier retValue = ModifierFactory.eINSTANCE
+				.createLongSequenceModifier();
+		for (long value : EXPECTED_VALUES) {
+			 retValue.getSequence().add(value);
+		} // for each double
+
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getELong();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final LongSequenceModifier fixture = getFixture();
+		Long currentValue = (Long) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.longValue() == EXPECTED_VALUES[i];
+	} // validateFeatureValue
+	
+
+} //LongSequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifiableTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifiableTest.java
new file mode 100644
index 0000000..8f358a1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifiableTest.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.modifier.Modifiable;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Modifiable</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class ModifiableTest extends TestCase {
+
+	/**
+	 * The fixture for this Modifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Modifiable fixture = null;
+
+	/**
+	 * Constructs a new Modifiable test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifiableTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Modifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Modifiable fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Modifiable test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Modifiable getFixture() {
+		return fixture;
+	}
+
+} //ModifiableTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTest.java
new file mode 100644
index 0000000..7670ba9
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTest.java
@@ -0,0 +1,336 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.tests.DecoratorTest;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+//import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.experiment.tests.ExperimentTest;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.Modifier#isComplete() <em>Complete</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.Modifier#updateScenario(org.eclipse.stem.core.scenario.Scenario) <em>Update Scenario</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.Modifier#reset() <em>Reset</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModifierTest extends DecoratorTest {
+
+	public static final String TEST_PACKAGE_NAME = "testpackage";
+	public static final String TEST_PACKAGE_NSPREFIX = "test";
+	public static final String TEST_PACKAGE_NSURI = "http:///com.example.test";
+	
+	public static final String TEST_EOBJECT_CLASSNAME1 = "testobject1";
+	public static final List<EClassifier> TEST_OBJECT_FEATURES1 = Arrays
+			.asList(new EClassifier[] { EcorePackage.Literals.EINT,
+					EcorePackage.Literals.EDOUBLE,
+					ModelPackage.Literals.STEM_TIME });
+	
+	public static final String TEST_EOBJECT_CLASSNAME2 = "testobject2";
+	public static final List<EClassifier> TEST_OBJECT_FEATURES2 = Arrays
+			.asList(new EClassifier[] { EcorePackage.Literals.EINT,
+					EcorePackage.Literals.EDOUBLE,
+					ModelPackage.Literals.STEM_TIME,
+					EcorePackage.Literals.ESTRING });
+	
+	/**
+	 * This is the EPackage instance that defines {@link EClass}s to be used to
+	 * create test object instances.
+	 */
+	public static final EPackage TEST_PACKAGE;
+	
+	static {
+		final Map<String,List<EClassifier>> eClassNameTofeatureTypeMap = new HashMap<String, List<EClassifier>>();
+		eClassNameTofeatureTypeMap.put(TEST_EOBJECT_CLASSNAME1, TEST_OBJECT_FEATURES1);
+		eClassNameTofeatureTypeMap.put(TEST_EOBJECT_CLASSNAME2, TEST_OBJECT_FEATURES2);
+		TEST_PACKAGE = createTestPackage(TEST_PACKAGE_NAME, TEST_PACKAGE_NSPREFIX, TEST_PACKAGE_NSURI,
+				eClassNameTofeatureTypeMap);
+	} // static
+	
+	/**
+	 * Test object for modification
+	 */
+	protected EObject testObject1 = null;
+	/**
+	 * Test object for modification
+	 */
+//	protected EObject testObject2 = null;
+	
+
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new Modifier test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Modifier getFixture() {
+		return (Modifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		testObject1 = TEST_PACKAGE.getEFactoryInstance().create(
+				(EClass) TEST_PACKAGE.getEClassifier(TEST_EOBJECT_CLASSNAME1));
+//		testObject2 = TEST_PACKAGE.getEFactoryInstance().create(
+//				(EClass) TEST_PACKAGE.getEClassifier(TEST_EOBJECT_CLASSNAME2));
+		setFixture(createFixture(testObject1));
+	} // setUp
+
+	/**
+	 * @return a {@link Modifier} for testing
+	 */
+	static public  Modifier createFixture(final EObject testObject) {
+		final Modifier retValue = ModifierFactory.eINSTANCE.createModifier();
+		retValue.getFeatureModifiers().addAll(createFeatureModifiers(testObject));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @param testObject
+	 *            the {@link EObject} to create the {@link FeatureModifier}s
+	 *            for
+	 * @return a {@link List} of {@link FeatureModifier}s for a specific
+	 *         {@link EObject}
+	 */
+	private static List<FeatureModifier> createFeatureModifiers(
+			final EObject testObject) {
+		final List<FeatureModifier> retValue = new ArrayList<FeatureModifier>();
+		for (EStructuralFeature eStruturalFeature : testObject.eClass()
+				.getEStructuralFeatures()) {
+			// EInt?
+			if (eStruturalFeature.getEType() == EcorePackage.Literals.EINT) {
+				// Yes
+				final IntegerRangeModifier irm = ModifierFactory.eINSTANCE
+						.createIntegerRangeModifier();
+				irm.setEStructuralFeature(eStruturalFeature);
+				irm.setStartValue(IntegerRangeModifierTest.IRM_START_VALUE);
+				irm.setEndValue(IntegerRangeModifierTest.IRM_END_VALUE);
+				irm.setIncrement(IntegerRangeModifierTest.IRM_INCREMENT_VALUE);
+				retValue.add(irm);
+			} // if EInt
+			// EDouble
+			else if (eStruturalFeature.getEType() == EcorePackage.Literals.EDOUBLE) {
+				// Yes
+				final DoubleRangeModifier drm = ModifierFactory.eINSTANCE
+						.createDoubleRangeModifier();
+				drm.setEStructuralFeature(eStruturalFeature);
+				drm.setStartValue(DoubleRangeModifierTest.DRM_START_VALUE);
+				drm.setEndValue(DoubleRangeModifierTest.DRM_END_VALUE);
+				drm.setIncrement(DoubleRangeModifierTest.DRM_INCREMENT_VALUE);
+				retValue.add(drm);
+			} // if
+		} // for each eStructuralFeature
+
+		return retValue;
+	} // createFeatureModifiers
+
+	/**
+	 * Create a single EMF {@link EObject} instance for testing.
+	 * @param eClassName
+	 *            the name of the {@link EClass} for the {@link EObject}
+	 * @param featureTypes
+	 *            a list of {@link EClassifier} instances of the types of the
+	 *            attributes in the {@link EClass}
+	 * @return an {@link EObject} to be modified
+	 */
+	static public EObject createTestObject(final String eClassName,
+			List<EClassifier> featureTypes) {
+		final Map<String, List<EClassifier>> eClassNameTofeatureTypeMap = new HashMap<String, List<EClassifier>>();
+		eClassNameTofeatureTypeMap.put(eClassName, featureTypes);
+		final EPackage ePackage = createTestPackage(TEST_PACKAGE_NAME,
+				TEST_PACKAGE_NSPREFIX, TEST_PACKAGE_NSURI,
+				eClassNameTofeatureTypeMap);
+		return ePackage.getEFactoryInstance().create(
+				(EClass) ePackage.getEClassifier(eClassName));
+	} // createTestObject
+
+	/**
+	 * @param packageName
+	 *            the name of the package
+	 * @param nsPrefix
+	 *            the prefix to use for the package's name space
+	 * @param nsURI
+	 *            the {@link URI} to use for the package's name space
+	 * @param eClassNameTofeatureTypeMap
+	 *            a {@link Map} between the name of a {@link EClass} that
+	 *            defines an {@link EObject} to create and a list of
+	 *            {@link EClassifier}s that define the type the {@link EObject}'s
+	 *            {@link EStructuralFeature}s. The names of the
+	 *            {@link EStructuralFeature}s will be created from the types of
+	 *            the {@link EClassifier}s.
+	 * @return an {@link EPackage}
+	 */
+	public static EPackage createTestPackage(final String packageName,
+			final String nsPrefix, final String nsURI,
+			final Map<String, List<EClassifier>> eClassNameTofeatureTypeMap) {
+		// A little bit of dynamic EMF here...
+		final EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
+		ePackage.setName(packageName);
+		ePackage.setNsPrefix(nsPrefix);
+		ePackage.setNsURI(nsURI);
+
+		for (String eClassName : eClassNameTofeatureTypeMap.keySet()) {
+
+			final EClass testClass = EcoreFactory.eINSTANCE.createEClass();
+			testClass.setName(eClassName);
+			
+			int attributeCount = 0;
+			// Now create the structural features
+			for (EClassifier eClassifier : eClassNameTofeatureTypeMap
+					.get(eClassName)) {
+				final EAttribute attribute = EcoreFactory.eINSTANCE
+						.createEAttribute();
+				attribute.setName(eClassifier.getName() + attributeCount++);
+				attribute.setEType(eClassifier);
+				attribute.setUnsettable(false);
+				testClass.getEStructuralFeatures().add(attribute);
+			} // for each EClassifier
+			// Add the class to the package
+			ePackage.getEClassifiers().add(testClass);
+		} // for each EClass name
+		return ePackage;
+	} // createTestPackage
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		testObject1 = null;
+//		testObject2 = null;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.Modifier#getModificationSummary() <em>Modification Summary</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.Modifier#getModificationSummary()
+	 * @generated NOT
+	 */
+	public void testGetModificationSummary() {
+		final Modifier fixture = getFixture();
+		assertTrue(fixture.getFeatureModifiers().size() > 0);
+		final List<String> summary = fixture.getModificationSummary();
+		assertNotNull(summary);
+		assertTrue(summary.size() > 0);
+	} // testGetModificationSummary
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.Modifier#isComplete() <em>Complete</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.Modifier#isComplete()
+	 * @generated NOT
+	 */
+	public void testIsComplete() {
+		final Modifier fixture = getFixture();
+		assertTrue(fixture.getFeatureModifiers().size() > 0);
+		assertFalse(fixture.isComplete());
+	} // testIsComplete
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.Modifier#updateScenario(org.eclipse.stem.core.scenario.Scenario) <em>Update Scenario</em>}'
+	 * operation. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * 
+	 * This is being tested by {@link ExperimentTest#testModifyScenario__Scenario()}
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.modifier.Modifier#updateScenario(org.eclipse.stem.core.scenario.Scenario)
+	 * @generated NOT
+	 * 
+	 */
+	public void testUpdateScenario__Scenario() {
+		assertTrue(true);
+		// fail();
+		// final Modifier fixture = getFixture();
+		// final Scenario baseScenario = ExperimentTest.getBaseScenario();
+		// fixture.updateScenario(baseScenario);
+		// assertTrue(baseScenario.sane());
+	} // testUpdateScenario__Scenario
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.Modifier#reset() <em>Reset</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.Modifier#reset()
+	 * @generated NOT
+	 */
+	public void testReset() {
+		// TODO: implement ModifierTest.testReset()
+		assertTrue(true);
+	}
+
+} // ModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTests.java
new file mode 100644
index 0000000..cf0f022
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/ModifierTests.java
@@ -0,0 +1,71 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>modifier</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ModifierTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ModifierTests("modifier Tests"); //$NON-NLS-1$
+		suite.addTestSuite(DoubleNOPModifierTest.class);
+		suite.addTestSuite(DoubleRangeModifierTest.class);
+		suite.addTestSuite(DoubleSequenceModifierTest.class);
+		suite.addTestSuite(IntegerNOPModifierTest.class);
+		suite.addTestSuite(IntegerRangeModifierTest.class);
+		suite.addTestSuite(IntegerSequenceModifierTest.class);
+		suite.addTestSuite(LongNOPModifierTest.class);
+		suite.addTestSuite(LongRangeModifierTest.class);
+		suite.addTestSuite(LongSequenceModifierTest.class);
+		suite.addTestSuite(ModifierTest.class);
+		suite.addTestSuite(NOPModifierTest.class);
+		suite.addTestSuite(STEMTimeNOPModifierTest.class);
+		suite.addTestSuite(STEMTimeRangeModifierTest.class);
+		suite.addTestSuite(STEMTimeSequenceModifierTest.class);
+		suite.addTestSuite(StringNOPModifierTest.class);
+		suite.addTestSuite(StringSequenceModifierTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierTests(String name) {
+		super(name);
+	}
+
+} //ModifierTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/NOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/NOPModifierTest.java
new file mode 100644
index 0000000..e8fa326
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/NOPModifierTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.NOPModifier;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class NOPModifierTest extends FeatureModifierTest {
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(NOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new NOP Modifier test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public NOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this NOP Modifier test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected NOPModifier getFixture() {
+		return (NOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(ModifierFactory.eINSTANCE.createNOPModifier());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEInt();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#testGetModificationSummary()
+	 */
+	@Override
+	public void testGetModificationSummary() {
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return 0;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		return false;
+	}
+} // NOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/RangeModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/RangeModifierTest.java
new file mode 100644
index 0000000..7186430
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/RangeModifierTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.modifier.RangeModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class RangeModifierTest extends FeatureModifierTest {
+
+	/**
+	 * Constructs a new Range Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RangeModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Range Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected RangeModifier getFixture() {
+		return (RangeModifier)fixture;
+	}
+
+} //RangeModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeNOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeNOPModifierTest.java
new file mode 100644
index 0000000..88dc930
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeNOPModifierTest.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.STEMTimeNOPModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>STEM Time NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class STEMTimeNOPModifierTest extends NOPModifierTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(STEMTimeNOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new STEM Time NOP Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeNOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this STEM Time NOP Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected STEMTimeNOPModifier getFixture() {
+		return (STEMTimeNOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link STEMTimeNOPModifier} ready for testing.
+	 */
+	public STEMTimeNOPModifier createFixture() {
+		final STEMTimeNOPModifier retValue = ModifierFactory.eINSTANCE.createSTEMTimeNOPModifier();
+		EObject testObject = getTestObject();
+		EStructuralFeature feature = testObject.eClass()
+		.getEStructuralFeatures().get(0);
+		retValue.setEStructuralFeature(feature);
+		return retValue;
+	} // createFixture
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return ModelPackage.eINSTANCE.getSTEMTime();
+	} // getTestAttributeEType
+
+} //STEMTimeNOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeRangeModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeRangeModifierTest.java
new file mode 100644
index 0000000..82d5a6d
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeRangeModifierTest.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>STEM Time Range Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class STEMTimeRangeModifierTest extends RangeModifierTest {
+
+	public static final STEMTime STEM_TIME_START_VALUE = ModelFactory.eINSTANCE
+			.createSTEMTime();
+	public static final STEMTime STEM_TIME_END_VALUE = ModelFactory.eINSTANCE
+			.createSTEMTime();
+	public static final long STEM_TIME_INCREMENT_VALUE = STEMTime.Units.DAY
+			.getMilliseconds();
+
+	private static final STEMTime EXPECTED_VALUES[] = new STEMTime[] {
+			STEM_TIME_START_VALUE, STEM_TIME_END_VALUE };
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(STEMTimeRangeModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new STEM Time Range Modifier test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeRangeModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this STEM Time Range Modifier test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected STEMTimeRangeModifier getFixture() {
+		return (STEMTimeRangeModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link DoubleRangeModifier} ready for testing.
+	 */
+	public STEMTimeRangeModifier createFixture() {
+		final STEMTimeRangeModifier retValue = ModifierFactory.eINSTANCE
+				.createSTEMTimeRangeModifier();
+		retValue.setStartValue(STEM_TIME_START_VALUE);
+		retValue.setEndValue(STEM_TIME_END_VALUE);
+		retValue.setIncrement(STEM_TIME_INCREMENT_VALUE);
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return ModelPackage.eINSTANCE.getSTEMTime();
+	} // getTestAttributeEType
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		STEMTimeRangeModifier fixture = getFixture();
+		//$ANALYSIS-IGNORE
+		final int retValue = (int) ((fixture.getEndValue().getTime().getTime() - fixture
+						.getStartValue().getTime().getTime()) / fixture.getIncrement()) + 1;
+		return retValue;
+	} // getNumberOfModifications
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final STEMTimeRangeModifier fixture = getFixture();
+		STEMTime currentValue = (STEMTime) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.equals( EXPECTED_VALUES[i]);
+	}
+
+} // STEMTimeRangeModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeSequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeSequenceModifierTest.java
new file mode 100644
index 0000000..e495d01
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/STEMTimeSequenceModifierTest.java
@@ -0,0 +1,135 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>STEM Time Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class STEMTimeSequenceModifierTest extends SequenceModifierTest {
+
+	private static final STEMTime EXPECTED_VALUES[] = new STEMTime[] {
+		STEMTimeRangeModifierTest.STEM_TIME_START_VALUE,
+		STEMTimeRangeModifierTest.STEM_TIME_END_VALUE };
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(STEMTimeSequenceModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new STEM Time Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTimeSequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this STEM Time Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected STEMTimeSequenceModifier getFixture() {
+		return (STEMTimeSequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.SequenceModifierTest#createFixture()
+	 */
+	@Override
+	public SequenceModifier createFixture() {
+		final STEMTimeSequenceModifier retValue = ModifierFactory.eINSTANCE
+				.createSTEMTimeSequenceModifier();
+		for (STEMTime value : EXPECTED_VALUES) {
+			 retValue.getSequence().add(value);
+		} // for each double
+
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return ModelPackage.eINSTANCE.getSTEMTime();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final STEMTimeSequenceModifier fixture = getFixture();
+		STEMTime currentValue = (STEMTime) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.equals( EXPECTED_VALUES[i]);
+	} // validateFeatureValue
+	
+
+} //STEMTimeSequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/SequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/SequenceModifierTest.java
new file mode 100644
index 0000000..0a88053
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/SequenceModifierTest.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.modifier.SequenceModifier#getSequenceSize() <em>Sequence Size</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.modifier.SequenceModifier#getNextValue() <em>Next Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class SequenceModifierTest extends FeatureModifierTest {
+
+	/**
+	 * Constructs a new Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SequenceModifier getFixture() {
+		return (SequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @return a SequenceModifier ready for testing.
+	 */
+	abstract public SequenceModifier createFixture();
+	
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.SequenceModifier#getSequenceSize() <em>Sequence Size</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getSequenceSize()
+	 * @generated NOT
+	 */
+	public void testGetSequenceSize() {
+		final SequenceModifier fixture = getFixture();
+		assertTrue(fixture.getSequenceSize() == getNumberOfModifications());
+	} // testGetSequenceSize
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.SequenceModifier#getNextValue() <em>Next Value</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#getNextValue()
+	 * @generated NOT
+	 */
+	public void testGetNextValue() {
+		final SequenceModifier fixture = getFixture();
+		final EObject testObject = getTestObject();
+		fixture.setTarget(testObject);
+		assertNotNull(fixture.getNextValue() );
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.SequenceModifier#isSetNextValue() <em>isSetNextValue()</em>}' method.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#isSetNextValue()
+	 * @generated NOT
+	 */
+	public void testIsSetNextValue() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.modifier.SequenceModifier#setNextValue(java.lang.Object) <em>Next Value</em>}' feature setter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.modifier.SequenceModifier#setNextValue(java.lang.Object)
+	 * @generated NOT
+	 */
+	public void testSetNextValue() {
+		assertTrue(true);
+	}
+	
+} //SequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringNOPModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringNOPModifierTest.java
new file mode 100644
index 0000000..91ea7a0
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringNOPModifierTest.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.IntegerNOPModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.StringNOPModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>String NOP Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StringNOPModifierTest extends NOPModifierTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StringNOPModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new String NOP Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringNOPModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this String NOP Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StringNOPModifier getFixture() {
+		return (StringNOPModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a {@link IntegerNOPModifier} ready for testing.
+	 */
+	public StringNOPModifier createFixture() {
+		final StringNOPModifier retValue = ModifierFactory.eINSTANCE.createStringNOPModifier();
+		EObject testObject = getTestObject();
+		EStructuralFeature feature = testObject.eClass()
+		.getEStructuralFeatures().get(0);
+		retValue.setEStructuralFeature(feature);
+		return retValue;
+	} // createFixture
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEString();
+	}
+} //StringNOPModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringSequenceModifierTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringSequenceModifierTest.java
new file mode 100644
index 0000000..a2e252e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/modifier/tests/StringSequenceModifierTest.java
@@ -0,0 +1,137 @@
+package org.eclipse.stem.core.modifier.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+import org.eclipse.stem.core.modifier.StringSequenceModifier;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>String Sequence Modifier</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StringSequenceModifierTest extends SequenceModifierTest {
+
+public static final String STRING_START_VALUE = "start";
+	public static final String STRING_END_VALUE = "end";
+
+	private static final String EXPECTED_VALUES[] = new String[] {
+			STRING_START_VALUE, STRING_END_VALUE };
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StringSequenceModifierTest.class);
+	}
+
+	/**
+	 * Constructs a new String Sequence Modifier test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StringSequenceModifierTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this String Sequence Modifier test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StringSequenceModifier getFixture() {
+		return (StringSequenceModifier)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.SequenceModifierTest#createFixture()
+	 */
+	@Override
+	public SequenceModifier createFixture() {
+		final StringSequenceModifier retValue = ModifierFactory.eINSTANCE
+				.createStringSequenceModifier();
+		for (String value : EXPECTED_VALUES) {
+			 retValue.getSequence().add(value);
+		} // for each double
+
+		retValue.setEStructuralFeature(getTestObject().eClass()
+				.getEStructuralFeatures().get(0));
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getNumberOfModifications()
+	 */
+	@Override
+	int getNumberOfModifications() {
+		return EXPECTED_VALUES.length;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#getTestAttributeEType()
+	 */
+	@Override
+	protected EClassifier getTestAttributeEType() {
+		return EcorePackage.eINSTANCE.getEString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.tests.FeatureModifierTest#validateFeatureValue(int)
+	 */
+	@Override
+	protected boolean validateFeatureValue(int i) {
+		assertTrue(i >= 0);
+		assertTrue(i < EXPECTED_VALUES.length);
+		final StringSequenceModifier fixture = getFixture();
+		String currentValue = (String) getTestObject().eGet(
+				fixture.getEStructuralFeature());
+		return currentValue.equals( EXPECTED_VALUES[i]);
+	} // validateFeatureValue
+	
+
+} //StringSequenceModifierTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AbsoluteTimeTestTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AbsoluteTimeTestTest.java
new file mode 100644
index 0000000..20894b9
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AbsoluteTimeTestTest.java
@@ -0,0 +1,91 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.AbsoluteTimeTest;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Absolute Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AbsoluteTimeTestTest extends TimeTestTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AbsoluteTimeTestTest.class);
+	}
+
+	/**
+	 * Constructs a new Absolute Time Test test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AbsoluteTimeTestTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Absolute Time Test test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected AbsoluteTimeTest getFixture() {
+		return (AbsoluteTimeTest)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final AbsoluteTimeTest att = PredicateFactory.eINSTANCE.createAbsoluteTimeTest();
+		currentTimeToTest = att.getTime();
+		setFixture(att);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+
+	
+} //AbsoluteTimeTestTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AndTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AndTest.java
new file mode 100644
index 0000000..91c1b90
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/AndTest.java
@@ -0,0 +1,94 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.And;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.True;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>And</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AndTest extends NaryBooleanOperatorTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AndTest.class);
+	}
+
+	/**
+	 * Constructs a new And test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AndTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this And test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected And getFixture() {
+		return (And)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final And andExpression = PredicateFactory.eINSTANCE.createAnd();
+		final True true0 = PredicateFactory.eINSTANCE.createTrue();
+		final True true1 = PredicateFactory.eINSTANCE.createTrue();
+		andExpression.getOperands().add(true0);
+		andExpression.getOperands().add(true1);
+		setFixture(andExpression);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+
+} //AndTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanExpressionTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanExpressionTest.java
new file mode 100644
index 0000000..3d74c4f
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanExpressionTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.BooleanExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Boolean Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class BooleanExpressionTest extends PredicateTest {
+
+	/**
+	 * Constructs a new Boolean Expression test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BooleanExpressionTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Boolean Expression test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected BooleanExpression getFixture() {
+		return (BooleanExpression)fixture;
+	}
+
+} //BooleanExpressionTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanOperatorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanOperatorTest.java
new file mode 100644
index 0000000..60a311a
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/BooleanOperatorTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.BooleanOperator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class BooleanOperatorTest extends BooleanExpressionTest {
+
+	/**
+	 * Constructs a new Boolean Operator test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BooleanOperatorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Boolean Operator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected BooleanOperator getFixture() {
+		return (BooleanOperator)fixture;
+	}
+
+} //BooleanOperatorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/ElapsedTimeTestTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/ElapsedTimeTestTest.java
new file mode 100644
index 0000000..20daa44
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/ElapsedTimeTestTest.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Date;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.ElapsedTimeTest;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Elapsed Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ElapsedTimeTestTest extends TimeTestTest {
+
+	
+	/**
+	 * This is the number of elapsed days to test 
+	 */
+	public static final int ELASPED_DAYS_TO_TEST = 2;
+
+	
+	/**
+	 * This is the expected number of milliseconds of elapsed time.
+	 */
+	public static final long ELASPED_MS_TO_TEST = ELASPED_DAYS_TO_TEST
+			* org.eclipse.stem.core.model.STEMTime.Units.DAY
+					.getMilliseconds();
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ElapsedTimeTestTest.class);
+	}
+
+	/**
+	 * Constructs a new Elapsed Time Test test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ElapsedTimeTestTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Elapsed Time Test test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected ElapsedTimeTest getFixture() {
+		return (ElapsedTimeTest)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final ElapsedTimeTest ett = PredicateFactory.eINSTANCE
+				.createElapsedTimeTest();
+		ett.setNumberofDays(ELASPED_DAYS_TO_TEST);
+		ett.setReferenceTimeValid(true);
+
+		// The current time we'll use for comparison will be one day after the
+		// number of days in the test so the expected result is true
+		final long currentTimeMS = ett.getReferenceTime().getTime().getTime()
+				+ (ELASPED_DAYS_TO_TEST + 1)
+				* STEMTime.Units.DAY.getMilliseconds();
+		currentTimeToTest = ModelFactory.eINSTANCE.createSTEMTime();
+		currentTimeToTest.setTime(new Date(currentTimeMS));
+
+		setFixture(ett);
+	} // setUp
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.predicate.ElapsedTimeTest#getElapsedMilliseconds() <em>Elapsed Milliseconds</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.ElapsedTimeTest#getElapsedMilliseconds()
+	 * @generated NOT
+	 */
+	public void testGetElapsedMilliseconds() {
+		final ElapsedTimeTest ett = getFixture();
+		assertTrue(ett.getElapsedMilliseconds() == ELASPED_DAYS_TO_TEST
+				* STEMTime.Units.DAY.getMilliseconds());
+	} // testGetElapsedMilliseconds
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+
+} //ElapsedTimeTestTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/FalseTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/FalseTest.java
new file mode 100644
index 0000000..4155cf3
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/FalseTest.java
@@ -0,0 +1,88 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>False</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class FalseTest extends TestTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(FalseTest.class);
+	}
+
+	/**
+	 * Constructs a new False test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public FalseTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this False test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected False getFixture() {
+		return (False)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(PredicateFactory.eINSTANCE.createFalse());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return false;
+	}
+	
+} //FalseTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateExpressionTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateExpressionTest.java
new file mode 100644
index 0000000..c524083
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateExpressionTest.java
@@ -0,0 +1,93 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.IdentifiablePredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.True;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Identifiable Predicate Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class IdentifiablePredicateExpressionTest extends IdentifiablePredicateTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(IdentifiablePredicateExpressionTest.class);
+	}
+
+	/**
+	 * Constructs a new Identifiable Predicate Expression test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiablePredicateExpressionTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Identifiable Predicate Expression test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected IdentifiablePredicateExpression getFixture() {
+		return (IdentifiablePredicateExpression)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final IdentifiablePredicateExpression pExpression = PredicateFactory.eINSTANCE.createIdentifiablePredicateExpression();
+		final True true0 = PredicateFactory.eINSTANCE.createTrue();
+		pExpression.setPredicate(true0);
+		setFixture(pExpression);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.IdentifiablePredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+
+
+} //IdentifiablePredicateExpressionTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateTest.java
new file mode 100644
index 0000000..9adfcd4
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiablePredicateTest.java
@@ -0,0 +1,88 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.IdentifiablePredicate;
+import org.eclipse.stem.core.predicate.Predicate;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Identifiable Predicate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator) <em>Evaluate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class IdentifiablePredicateTest extends IdentifiableTest {
+
+	/**
+	 * Constructs a new Identifiable Predicate test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiablePredicateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Identifiable Predicate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected IdentifiablePredicate getFixture() {
+		return (IdentifiablePredicate)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator) <em>Evaluate</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 * @generated NOT
+	 */
+	public void testEvaluate__STEMTime_long_Decorator() {
+		final Predicate fixture = getFixture();
+		final STEMTime currentTime = getCurrentTimetoTest();
+		final long elapsedTime = getElapsedTimeToTest();
+		final boolean result = fixture.evaluate(currentTime, elapsedTime, null);
+		assertTrue (result == getExpectedResult());
+	}
+
+	/**
+	 * @return
+	 */
+	protected long getElapsedTimeToTest() {
+		return 0L;
+	}
+
+	/**
+	 * @return
+	 */
+	protected STEMTime getCurrentTimetoTest() {
+		return null;
+	}
+
+	/**
+	 * @return the expected result of calling getFixture.evaluate();
+	 */
+	abstract protected boolean getExpectedResult();
+	
+} //IdentifiablePredicateTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiableTestTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiableTestTest.java
new file mode 100644
index 0000000..d24caec
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/IdentifiableTestTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.IdentifiableTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Identifiable Test</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class IdentifiableTestTest extends IdentifiablePredicateTest {
+
+	/**
+	 * Constructs a new Identifiable Test test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IdentifiableTestTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Identifiable Test test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected IdentifiableTest getFixture() {
+		return (IdentifiableTest)fixture;
+	}
+
+} //IdentifiableTestTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NaryBooleanOperatorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NaryBooleanOperatorTest.java
new file mode 100644
index 0000000..ed7acb9
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NaryBooleanOperatorTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.NaryBooleanOperator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Nary Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class NaryBooleanOperatorTest extends BooleanOperatorTest {
+
+	/**
+	 * Constructs a new Nary Boolean Operator test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NaryBooleanOperatorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Nary Boolean Operator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected NaryBooleanOperator getFixture() {
+		return (NaryBooleanOperator)fixture;
+	}
+
+} //NaryBooleanOperatorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NotTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NotTest.java
new file mode 100644
index 0000000..db9a128
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/NotTest.java
@@ -0,0 +1,93 @@
+// NotTest.java
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.Not;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Not</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class NotTest extends UnaryBooleanOperatorTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(NotTest.class);
+	}
+
+	/**
+	 * Constructs a new Not test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Not test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Not getFixture() {
+		return (Not)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final Not notExpression = PredicateFactory.eINSTANCE.createNot();
+		final False false0 = PredicateFactory.eINSTANCE.createFalse();
+		notExpression.setOperand(false0);
+		setFixture(notExpression);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+	
+} // NotTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/OrTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/OrTest.java
new file mode 100644
index 0000000..5da987b
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/OrTest.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.Or;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.True;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Or</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class OrTest extends NaryBooleanOperatorTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(OrTest.class);
+	}
+
+	/**
+	 * Constructs a new Or test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OrTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Or test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Or getFixture() {
+		return (Or)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final Or orExpression = PredicateFactory.eINSTANCE.createOr();
+		final False false0 = PredicateFactory.eINSTANCE.createFalse();
+		final True true0 = PredicateFactory.eINSTANCE.createTrue();
+		orExpression.getOperands().add(false0);
+		orExpression.getOperands().add(true0);
+		setFixture(orExpression);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+
+} //OrTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateExpressionTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateExpressionTest.java
new file mode 100644
index 0000000..d24d93e
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateExpressionTest.java
@@ -0,0 +1,92 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.False;
+import org.eclipse.stem.core.predicate.PredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PredicateExpressionTest extends BooleanExpressionTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PredicateExpressionTest.class);
+	}
+
+	/**
+	 * Constructs a new Expression test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateExpressionTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Expression test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected PredicateExpression getFixture() {
+		return (PredicateExpression)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final PredicateExpression pExpression = PredicateFactory.eINSTANCE.createPredicateExpression();
+		final False false0 = PredicateFactory.eINSTANCE.createFalse();
+		pExpression.setPredicate(false0);
+		setFixture(pExpression);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return false;
+	}
+
+} //PredicateExpressionTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateReferenceTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateReferenceTest.java
new file mode 100644
index 0000000..4374877
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateReferenceTest.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicateReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Reference</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PredicateReferenceTest extends PredicateTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PredicateReferenceTest.class);
+	}
+
+	/**
+	 * Constructs a new Reference test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateReferenceTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Reference test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected PredicateReference getFixture() {
+		return (PredicateReference)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(PredicateFactory.eINSTANCE.createPredicateReference());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#testEvaluate__STEMTime_long_Decorator()
+	 */
+	@Override
+	public void testEvaluate__STEMTime_long_Decorator() {
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return false;
+	}
+	
+} //PredicateReferenceTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTest.java
new file mode 100644
index 0000000..2e2948b
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTest.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.Predicate;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Predicate</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator) <em>Evaluate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class PredicateTest extends TestCase {
+
+	/**
+	 * The fixture for this Predicate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Predicate fixture = null;
+
+	/**
+	 * Constructs a new Predicate test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Predicate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Predicate fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Predicate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	protected Predicate getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator) <em>Evaluate</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.predicate.Predicate#evaluate(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.stem.core.model.Decorator)
+	 * @generated NOT
+	 */
+	public void testEvaluate__STEMTime_long_Decorator() {
+		final Predicate fixture = getFixture();
+		final STEMTime currentTime = getCurrentTimetoTest();
+		final long elapsedTime = getElapsedTimeToTest();
+		final boolean result = fixture.evaluate(currentTime, elapsedTime, null);
+		assertTrue (result == getExpectedResult());
+	} // testEvaluate__STEMTime_long_Decorator
+
+	/**
+	 * @return
+	 */
+	protected long getElapsedTimeToTest() {
+		return 0L;
+	}
+
+	/**
+	 * @return
+	 */
+	protected STEMTime getCurrentTimetoTest() {
+		return null;
+	}
+
+	/**
+	 * @return the expected result of calling getFixture.evaluate();
+	 */
+	abstract protected boolean getExpectedResult();
+
+} //PredicateTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTests.java
new file mode 100644
index 0000000..71209b7
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/PredicateTests.java
@@ -0,0 +1,65 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>predicate</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PredicateTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new PredicateTests("predicate Tests"); //$NON-NLS-1$
+		suite.addTestSuite(AndTest.class);
+		suite.addTestSuite(FalseTest.class);
+		suite.addTestSuite(NotTest.class);
+		suite.addTestSuite(OrTest.class);
+		suite.addTestSuite(PredicateReferenceTest.class);
+		suite.addTestSuite(TrueTest.class);
+		suite.addTestSuite(PredicateExpressionTest.class);
+		suite.addTestSuite(IdentifiablePredicateExpressionTest.class);
+		suite.addTestSuite(AbsoluteTimeTestTest.class);
+		suite.addTestSuite(ElapsedTimeTestTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateTests(String name) {
+		super(name);
+	}
+
+} //PredicateTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TestTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TestTest.java
new file mode 100644
index 0000000..d0c3744
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TestTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.Test;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Test</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class TestTest extends PredicateTest {
+
+	/**
+	 * Constructs a new Test test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Test test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Test getFixture() {
+		return (Test)fixture;
+	}
+
+} //TestTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TimeTestTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TimeTestTest.java
new file mode 100644
index 0000000..15684d2
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TimeTestTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.predicate.TimeTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Time Test</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class TimeTestTest extends TestTest {
+
+	protected STEMTime currentTimeToTest = null;
+
+	/**
+	 * Constructs a new Time Test test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TimeTestTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Time Test test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected TimeTest getFixture() {
+		return (TimeTest)fixture;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getCurrentTimetoTest()
+	 */
+	@Override
+	protected STEMTime getCurrentTimetoTest() {
+		return currentTimeToTest;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getElapsedTimeToTest()
+	 */
+	@Override
+	protected long getElapsedTimeToTest() {
+		return STEMTime.Units.DAY.getMilliseconds();
+	}
+
+} // TimeTestTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TrueTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TrueTest.java
new file mode 100644
index 0000000..cc85c1d
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/TrueTest.java
@@ -0,0 +1,87 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.True;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>True</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TrueTest extends TestTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(TrueTest.class);
+	}
+
+	/**
+	 * Constructs a new True test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TrueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this True test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected True getFixture() {
+		return (True)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(PredicateFactory.eINSTANCE.createTrue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.predicate.tests.PredicateTest#getExpectedResult()
+	 */
+	@Override
+	protected boolean getExpectedResult() {
+		return true;
+	}
+} //TrueTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/UnaryBooleanOperatorTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/UnaryBooleanOperatorTest.java
new file mode 100644
index 0000000..766a565
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/predicate/tests/UnaryBooleanOperatorTest.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.core.predicate.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.predicate.UnaryBooleanOperator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Unary Boolean Operator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class UnaryBooleanOperatorTest extends BooleanOperatorTest {
+
+	/**
+	 * Constructs a new Unary Boolean Operator test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public UnaryBooleanOperatorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Unary Boolean Operator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected UnaryBooleanOperator getFixture() {
+		return (UnaryBooleanOperator)fixture;
+	}
+
+} //UnaryBooleanOperatorTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioAllTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioAllTests.java
new file mode 100644
index 0000000..8f309e8
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioAllTests.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.scenario.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Scenario</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ScenarioAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ScenarioAllTests("Scenario Tests");
+		suite.addTest(ScenarioTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioAllTests(String name) {
+		super(name);
+	}
+
+} //ScenarioAllTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTest.java
new file mode 100644
index 0000000..19516c1
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTest.java
@@ -0,0 +1,531 @@
+package org.eclipse.stem.core.scenario.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Iterator;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.tests.ModelTest;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.impl.SequencerImpl;
+import org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Scenario</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.scenario.Scenario#step() <em>Step</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.Scenario#reset() <em>Reset</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.Scenario#initialize() <em>Initialize</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.scenario.Scenario#produceTitle() <em>Produce Title</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ScenarioTest extends IdentifiableTest {
+
+	/**
+	 * This is the title of the test scenario.
+	 */
+	public static final String TEST_SCENARIO_TITLE = "Test Scenario #1";
+
+	@SuppressWarnings("unused")
+	private static final URI SCENARIO_SERIALZATION_TEST_URI = URI
+			.createURI("temp/testscenario1.scenario");
+
+	private static final URI CANONICAL_GRAPH_SERIALZATION_TEST_URI = URI
+			.createURI("temp/testcanonicalgraph1.graph");
+
+	// private static final String SCENARIO = "scenario";
+
+	/**
+	 * This is the URI that will be the Identifier of the scenario
+	 */
+	private static final URI SCENARIO_URI = URI.createURI("platform:/plugin/"
+			+ org.eclipse.stem.core.tests.Activator.PLUGIN_ID
+			+ "/data/scenarios/basic/testscenario1.scenario");
+
+	private static final URI CANONICAL_GRAPH__URI = STEMURI
+			.createURI("GRAPH/testcanonicalgraph");
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ScenarioTest.class);
+	}
+
+	/**
+	 * Constructs a new Scenario test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ScenarioTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Scenario test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Scenario getFixture() {
+		return (Scenario)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a scenario
+	 */
+	public static Scenario createFixture() {
+		final Scenario scenario = ScenarioFactory.eINSTANCE.createScenario();
+		scenario.setModel(ModelTest.createFixture());
+		scenario.setSequencer(getTestSequencer());
+		scenario.setURI(SCENARIO_URI);
+		scenario.getScenarioDecorators()
+				.add(
+						DecoratorsFactory.eINSTANCE
+								.createTestScenarioGraphDecorator1());
+		scenario.getDublinCore().populate();
+		scenario.getDublinCore().setTitle(TEST_SCENARIO_TITLE);
+		scenario.setSolver(new FiniteDifferenceImpl());
+		return scenario;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.scenario.Scenario#getCanonicalGraph() <em>Canonical Graph</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#getCanonicalGraph()
+	 * @generated NOT
+	 */
+	public void testGetCanonicalGraph() {
+		// Nothing to test
+		assertTrue(true);
+	} // testGetCanonicalGraph
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.scenario.Scenario#step() <em>Step</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#step()
+	 * @generated NOT
+	 */
+	public void testStep() {
+		final Scenario scenario = getFixture();
+
+		scenario.initialize();
+
+		// Here we should test that the initial values of the dynamic labels are
+		// correct
+		Graph canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		} // for
+
+		scenario.step();
+
+		// Here we should test that the values of the dynamic labels have
+		// changed
+		canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE);
+		} // for
+//
+//		int count = 1;
+//		for (; scenario.step() && count < 11; count++) {
+//			// nothing
+//		} // for
+//
+//		// step() should stop before count makes it to 11
+//		assertTrue(count == 10);
+	} // testStep
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.scenario.Scenario#reset() <em>Reset</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#reset()
+	 * @generated NOT
+	 */
+	public void testReset() {
+		final Scenario scenario = getFixture();
+
+		scenario.initialize();
+
+		// Here we should test that the initial values of the dynamic labels are
+		// correct
+		Graph canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		} // for
+
+		scenario.step();
+
+		// Here we should test that the values of the dynamic labels have
+		// changed
+		canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE);
+		} // for
+
+		scenario.reset();
+
+		// Here we should test that the values of the dynamic labels are back to
+		// their initial values.
+		canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		} // for
+
+		assertFalse(scenario.getSequencer().isTimeToStop());
+	} // testReset
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.scenario.Scenario#initialize() <em>Initialize</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#initialize()
+	 * @generated NOT
+	 */
+	public void testInitialize() {
+		final Scenario scenario = getFixture();
+		scenario.initialize();
+		// Here we should test that the initial values of the dynamic labels are
+		// correct
+		Graph canonicalGraph = scenario.getCanonicalGraph();
+
+		for (final Iterator dynamicLabelIter = canonicalGraph
+				.getDynamicLabels().iterator(); dynamicLabelIter.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			assertTrue(((TestIntegerLabelValue) dynamicLabel.getCurrentValue())
+					.getI() == TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		} // for
+
+		assertFalse(scenario.getSequencer().isTimeToStop());
+
+		// Look for the graph label added by the Scenario decorator
+		int count = 0;
+		for (Iterator graphLabelIter = canonicalGraph.getGraphLabels().values()
+				.iterator(); graphLabelIter.hasNext();) {
+			Label graphLabel = (Label) graphLabelIter.next();
+			if (wasAddedByScenarioDecorator(graphLabel)) {
+				count++;
+			}
+		}
+		assertTrue(count == 1);
+
+	} // testInitialize
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.scenario.Scenario#produceTitle() <em>Produce Title</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.core.scenario.Scenario#produceTitle()
+	 * @generated NOT
+	 */
+	public void testProduceTitle() {
+		final Scenario scenario = getFixture();
+		final String title = scenario.produceTitle();
+
+		assertTrue(scenario.getDublinCore().getTitle() != null);
+		assertNotNull(title);
+		assertFalse(title.equals(""));
+	} // testProduceTitle
+
+	/**
+	 * @param graphLabel
+	 * @return true if the graphLabel was added by a scenario decorator
+	 */
+	private boolean wasAddedByScenarioDecorator(Label graphLabel) {
+		boolean retValue = false;
+		if (graphLabel instanceof DynamicLabel) {
+			DynamicLabel dynamicLabel = (DynamicLabel) graphLabel;
+			retValue = dynamicLabel.getURI() == TestScenarioGraphDecorator1.LABEL_URI;
+		}
+		return retValue;
+	} // wasAddedByScenarioDecorator
+
+	/**
+	 * Test the Scenario has the right type URI.
+	 * 
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Scenario scenario = getFixture();
+		assertTrue(scenario.getTypeURI().equals(STEMURI.SCENARIO_TYPE_URI));
+	} // testGetTypeURI
+
+	/**
+	 * Test the ability to serialize a scenario and then de-serialize it.
+	 */
+	// public void testSerializeDeserializeScenario() {
+	// final Scenario scenario = getFixture();
+	// serializeDeserializeScenario(scenario, SCENARIO_SERIALZATION_TEST_URI);
+	// } // testSerializeDeserializeScenario
+	/**
+	 * Test the ability to serialize a scenario and then de-serialize it.
+	 */
+	public void testSerializeDeserializeCanonicalGraph() {
+		final Scenario scenario = getFixture();
+		final Graph canonicalGraph = scenario.getModel().getCanonicalGraph(
+				CANONICAL_GRAPH__URI, new IdentifiableFilterImpl(scenario.getModel().getDublinCore().getCoverage()));
+		try {
+			Utility.serializeIdentifiable(canonicalGraph,
+					CANONICAL_GRAPH_SERIALZATION_TEST_URI);
+
+			final ResourceSet resourceSet = new ResourceSetImpl();
+			final Resource resource = resourceSet.getResource(
+					CANONICAL_GRAPH_SERIALZATION_TEST_URI, true);
+
+			resource.load(null);
+			final Graph deserializedGraph = (Graph) resource.getContents().get(
+					0);
+			assertNotNull(deserializedGraph);
+			assertTrue(canonicalGraph.getNumEdges() == deserializedGraph
+					.getNumEdges());
+			assertTrue(canonicalGraph.getNumNodes() == deserializedGraph
+					.getNumNodes());
+			assertTrue(canonicalGraph.getNumDynamicLabels() == deserializedGraph
+					.getNumDynamicLabels());
+			assertTrue(canonicalGraph.getNumGraphLabels() == deserializedGraph
+					.getNumGraphLabels());
+			assertTrue(canonicalGraph.getNumNodeLabels() == deserializedGraph
+					.getNumNodeLabels());
+
+		} catch (IOException e) {
+			fail(e.getMessage());
+		} // catch
+		catch (NullPointerException npe) {
+			fail(npe.getMessage());
+		} // null pointer exception
+		catch (Exception e) {
+			fail(e.getMessage());
+		} finally {
+			// Remove the serialized file
+			// IFile seralizeFile =
+		}
+	} // testSerializeDeserializeCanonicalGraph
+
+	/**
+	 * Test the process of serializing and de-serializing a scenario
+	 * 
+	 * @param scenario
+	 *            the scenario to test
+	 * @param uri
+	 *            where to do the test
+	 */
+	public static void serializeDeserializeScenario(final Scenario scenario,
+			final URI uri) {
+		try {
+			Utility.serializeIdentifiable(scenario, uri);
+
+			final ResourceSet resourceSet = new ResourceSetImpl();
+			final Resource resource = resourceSet.getResource(uri, true);
+
+			resource.load(null);
+			final Scenario deserializedScenario = (Scenario) resource
+					.getContents().get(0);
+			assertNotNull(deserializedScenario);
+		} catch (IOException e) {
+			fail(e.getMessage());
+		} // catch
+		catch (NullPointerException npe) {
+			fail(npe.getMessage());
+		} // null pointer exception
+		catch (Exception e) {
+			fail(e.getMessage());
+		}
+	} // serializeDeserializeScenario
+
+	/**
+	 * @return a <code>Sequencer</code> for testing.
+	 */
+	private static Sequencer getTestSequencer() {
+		final Sequencer retValue = new SequencerImpl() { 
+
+			protected long timeIncrement = STEMTime.Units.DAY.getMilliseconds();
+
+			/**
+			 * This is an accumulator of the work increment that keeps account of 
+			 * the fraction of the work increments until they exceed 1.0
+			 */
+			private double workIncrementRunningTotal = 0.0;
+
+
+			public long getTimeIncrement() {
+				return timeIncrement;
+			}
+			
+			/**
+			 * @see org.eclipse.stem.core.scenario.impl.SequencerImpl#getNextTime()
+			 */
+			@Override
+			public STEMTime getNextTime() {
+				setCurrentTime(getCurrentTime().addIncrement(getTimeIncrement()));
+				setWorkComplete(Math.min(getWorkComplete() + getWorkIncrement(), 100));
+				return getCurrentTime();
+			}
+
+			/**
+			 * @see org.eclipse.stem.core.scenario.impl.SequencerImpl#getTimeDelta()
+			 */
+			@Override
+			public long getTimeDelta() {
+				return super.getTimeDelta();
+			}
+
+			/**
+			 * @see org.eclipse.stem.core.scenario.impl.SequencerImpl#getWorkIncrement()
+			 */
+			@Override
+			public int getWorkIncrement() {
+				int retValue = 0;
+				// Is there a work increment?
+				if (getDuration() != UNKNOWN_DURATION) {
+					// Yes
+					// The work increment could be fractional (<1.0). If so then it will
+					// not accumulate in the progress monitor. So, we keep a running sum
+					// of the work increment and when it exceeds 1.0 we return the value less
+					// the fractional part and keep that for the future.
+					workIncrementRunningTotal += 100.0 * getTimeIncrement()
+							/ getDuration();
+					
+					// Do we have more than 1.0?
+					if (workIncrementRunningTotal >= 1.0) {
+						// Yes
+						//$ANALYSIS-IGNORE
+						retValue = (int)workIncrementRunningTotal;
+						workIncrementRunningTotal -= retValue;
+					}
+				}
+
+				return retValue;
+			}
+
+			/**
+			 * @see org.eclipse.stem.core.scenario.impl.SequencerImpl#isTimeToStop()
+			 */
+			@Override
+			public boolean isTimeToStop() {
+				boolean retValue = false;
+				// Is there an end time?
+				if (getEndTime() != null) {
+					// Yes
+					retValue = getCurrentTime().getTime().after(getEndTime().getTime());
+				}
+				return retValue;
+			}
+
+			@Override
+			public int getCycle() {
+				return 0;
+			}
+
+			
+		};
+		retValue.setStartTime(createSTEMTime(2000, 01, 01));
+		retValue.getCurrentTime();
+		retValue.setEndTime(createSTEMTime(2000, 01, 10));
+		return retValue;
+	} // getTestSequencer
+	
+	/**
+	 * Create an instance of STEMTime
+	 * 
+	 * @return the instance
+	 */
+	private static STEMTime createSTEMTime(final int year, final int month,
+			final int day) {
+		final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(year, month, day);
+		retValue.setTime(calendar.getTime());
+		return retValue;
+	} // createSTEMTime
+
+} // ScenarioTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTests.java
new file mode 100644
index 0000000..d52d978
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/scenario/tests/ScenarioTests.java
@@ -0,0 +1,54 @@
+package org.eclipse.stem.core.scenario.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>scenario</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ScenarioTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ScenarioTests("scenario Tests"); //$NON-NLS-1$
+		suite.addTestSuite(ScenarioTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioTests(String name) {
+		super(name);
+	}
+
+} //ScenarioTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/RealTimeSequencerTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/RealTimeSequencerTest.java
new file mode 100644
index 0000000..07e76bc
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/RealTimeSequencerTest.java
@@ -0,0 +1,148 @@
+package org.eclipse.stem.core.sequencer.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Real Time Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class RealTimeSequencerTest extends SequentialSequencerTest {
+	
+	private static final long REAL_TIME_TIME_INCREMENT = STEMTime.Units.SECOND.getMilliseconds();
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RealTimeSequencerTest.class);
+	}
+
+	/**
+	 * Constructs a new Real Time Sequencer test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public RealTimeSequencerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Real Time Sequencer test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected RealTimeSequencer getFixture() {
+		return (RealTimeSequencer)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testGetWorkComplete()
+	 */
+	@Override
+	public void testGetWorkComplete() {
+		// final RealTimeSequencer fixture = getFixture();
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testGetWorkIncrement()
+	 */
+	@Override
+	public void testGetWorkIncrement() {
+		// final RealTimeSequencer fixture = getFixture();
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testGetDuration()
+	 */
+	@Override
+	public void testGetDuration() {
+		// final RealTimeSequencer fixture = getFixture();
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testGetNextTime()
+	 */
+	@Override
+	public void testGetNextTime() {
+		// This is a bit hard to test given that the value returned by 
+		// getNextTime() can vary.
+//		 final RealTimeSequencer fixture = getFixture();
+//		 final STEMTime nextTime = fixture.getNextTime();
+		assertTrue(true);
+	} // testGetNextTime
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testIsTimeToStop()
+	 */
+	@Override
+	public void testIsTimeToStop() {
+		// final RealTimeSequencer fixture = getFixture();
+		assertTrue(true);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest#testReset()
+	 */
+	@Override
+	public void testReset() {
+		// final RealTimeSequencer fixture = getFixture();
+		assertTrue(true);
+	} // testReset
+
+	/**
+	 * @return an instance of {@link RealTimeSequencer} for testing purposes.
+	 */
+	public static final RealTimeSequencer createFixture() {
+		final RealTimeSequencer retValue = SequencerFactory.eINSTANCE.createRealTimeSequencer();
+		
+		retValue.setTimeIncrement(REAL_TIME_TIME_INCREMENT);
+		
+		return retValue;
+	} // createFixture
+
+
+} // RealTimeSequencerTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTest.java
new file mode 100644
index 0000000..17e0d98
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTest.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.core.sequencer.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.tests.IdentifiableTest;
+
+import org.eclipse.stem.core.sequencer.Sequencer;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.sequencer.Sequencer#getNextTime() <em>Next Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.Sequencer#isTimeToStop() <em>Time To Stop</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.sequencer.Sequencer#getWorkIncrement() <em>Work Increment</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.sequencer.Sequencer#reset() <em>Reset</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class SequencerTest extends IdentifiableTest {
+	/**
+	 * Constructs a new Sequencer test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Sequencer test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Sequencer getFixture() {
+		return (Sequencer)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.sequencer.Sequencer#getNextTime() <em>Next Time</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getNextTime()
+	 * @generated NOT
+	 */
+	public void testGetNextTime() {
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.sequencer.Sequencer#isTimeToStop() <em>Time To Stop</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#isTimeToStop()
+	 * @generated NOT
+	 */
+	public void testIsTimeToStop() {
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.sequencer.Sequencer#getWorkIncrement() <em>Work Increment</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#getWorkIncrement()
+	 * @generated NOT
+	 */
+	public void testGetWorkIncrement() {
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.sequencer.Sequencer#reset() <em>Reset</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.sequencer.Sequencer#reset()
+	 * @generated
+	 */
+	public void testReset() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+} //SequencerTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTests.java
new file mode 100644
index 0000000..1da4dc0
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequencerTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.core.sequencer.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>sequencer</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new SequencerTests("sequencer Tests"); //$NON-NLS-1$
+		suite.addTestSuite(RealTimeSequencerTest.class);
+		suite.addTestSuite(SequentialSequencerTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerTests(String name) {
+		super(name);
+	}
+
+} //SequencerTests
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequentialSequencerTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequentialSequencerTest.java
new file mode 100644
index 0000000..27208c8
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/sequencer/tests/SequentialSequencerTest.java
@@ -0,0 +1,257 @@
+package org.eclipse.stem.core.sequencer.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Calendar;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Sequential Sequencer</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SequentialSequencerTest extends SequencerTest {
+
+	private static final int START_DAY = 20;
+	private static final int END_DAY = 29;
+	private static final int NUMBER_OF_DAYS =  END_DAY - START_DAY + 1;
+	
+	// The fixture sequencer sequences through 10 days
+	public static final STEMTime START_TIME = createSTEMTime(2006,
+			Calendar.NOVEMBER, START_DAY);
+
+	public static final STEMTime END_TIME = createSTEMTime(2006,
+			Calendar.NOVEMBER, END_DAY);
+
+	public static final long TIME_INCREMENT = STEMTime.Units.DAY.getMilliseconds();
+	
+
+	protected SequentialSequencer sequencerWithNoEndTime = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SequentialSequencerTest.class);
+	}
+
+	/**
+	 * Constructs a new Sequential Sequencer test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public SequentialSequencerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Sequential Sequencer test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void setFixture(SequentialSequencer fixture) {
+		super.setFixture(fixture);
+	}
+
+	/**
+	 * Returns the fixture for this Sequential Sequencer test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected SequentialSequencer getFixture() {
+		return (SequentialSequencer) super.fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+
+		sequencerWithNoEndTime = SequencerFactory.eINSTANCE
+				.createSequentialSequencer();
+		sequencerWithNoEndTime.setStartTime((STEMTime) EcoreUtil
+				.copy(START_TIME));
+		sequencerWithNoEndTime.setCurrentTime((STEMTime) EcoreUtil
+				.copy(START_TIME));
+		sequencerWithNoEndTime.setTimeIncrement(TIME_INCREMENT);
+	} // setUp
+
+	/**
+	 * @return a sequential sequencer
+	 */
+	public static SequentialSequencer createFixture() {
+		final SequentialSequencer sequencerWithEnd = SequencerFactory.eINSTANCE
+				.createSequentialSequencer();
+		sequencerWithEnd.setStartTime((STEMTime) EcoreUtil.copy(START_TIME));
+		sequencerWithEnd.setCurrentTime((STEMTime) EcoreUtil.copy(START_TIME));
+		sequencerWithEnd.setEndTime((STEMTime) EcoreUtil.copy(END_TIME));
+		sequencerWithEnd.setTimeIncrement(TIME_INCREMENT);
+		return sequencerWithEnd;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+		sequencerWithNoEndTime = null;
+	} // tearDown
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.tests.SequencerTest#testGetNextTime()
+	 */
+	@Override
+	public void testGetNextTime() {
+
+		final STEMTime nextTime = START_TIME.addIncrement(TIME_INCREMENT);
+
+		final SequentialSequencer seqWithEndTime = getFixture();
+		// The first time should be the start time
+		assertTrue(seqWithEndTime.getNextTime().equals(START_TIME));
+		
+		assertTrue(seqWithEndTime.getNextTime().equals(nextTime));
+		assertFalse(seqWithEndTime.getNextTime().equals(nextTime));
+
+		final SequentialSequencer seqWithNoEndTime = sequencerWithNoEndTime;
+		assertTrue(seqWithNoEndTime.getNextTime().equals( START_TIME));
+		assertTrue(seqWithNoEndTime.getNextTime().equals(nextTime));
+		assertFalse(seqWithNoEndTime.getNextTime().equals(nextTime));
+	} // testGetNextTime
+
+	/**
+	 * Test that the duration is computed correctly
+	 */
+	public void testGetDuration() {
+		final SequentialSequencer seqWithEndTime = getFixture();
+		assertTrue(seqWithEndTime.getDuration() == END_TIME.getTime().getTime()
+				- START_TIME.getTime().getTime());
+
+		final SequentialSequencer seqWithNoEndTime = sequencerWithNoEndTime;
+		assertTrue(seqWithNoEndTime.getDuration() == Sequencer.UNKNOWN_DURATION);
+	} // testGetDuration
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.tests.SequencerTest#testGetWorkIncrement()
+	 */
+	@Override
+	public void testGetWorkIncrement() {
+		final SequentialSequencer seqWithEndTime = getFixture();
+		assertTrue(seqWithEndTime.getWorkIncrement() == 10);
+
+		final SequentialSequencer seqWithNoEndTime = sequencerWithNoEndTime;
+		assertTrue(seqWithNoEndTime.getWorkIncrement() == 0);
+	} // testGetWorkIncrement
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.tests.SequencerTest#testIsTimeToStop()
+	 */
+	@Override
+	public void testIsTimeToStop() {
+		final SequentialSequencer seqWithEndTime = getFixture();
+		assertNotNull(seqWithEndTime.getEndTime());
+		assertFalse(seqWithEndTime.isTimeToStop());
+		for (int i = 0; i < NUMBER_OF_DAYS; i++) {
+			assertFalse(seqWithEndTime.isTimeToStop());
+			seqWithEndTime.getNextTime();
+		}
+		assertTrue(seqWithEndTime.isTimeToStop());
+
+		final SequentialSequencer seqWithNoEndTime = sequencerWithNoEndTime;
+		assertFalse(seqWithNoEndTime.isTimeToStop());
+		for (int i = 0; i < 10; i++) {
+			seqWithNoEndTime.getNextTime();
+			assertFalse(seqWithNoEndTime.isTimeToStop());
+		}
+		seqWithNoEndTime.getNextTime();
+		assertFalse(seqWithNoEndTime.isTimeToStop());
+	} // testIsTimeToStop
+
+	/**
+	 * @see org.eclipse.stem.core.tests.SequencerTest#testGetWorkComplete()
+	 */
+	public void testGetWorkComplete() {
+		final SequentialSequencer seqWithEndTime = getFixture();
+		assertFalse(seqWithEndTime.isTimeToStop());
+		for (int i = 0; i < NUMBER_OF_DAYS; i++) {
+			seqWithEndTime.getNextTime();
+			assertTrue(seqWithEndTime.getWorkComplete() == (i+1) * NUMBER_OF_DAYS);
+		}
+		assertTrue(seqWithEndTime.getWorkComplete() == 100);
+
+		final SequentialSequencer seqWithNoEndTime = sequencerWithNoEndTime;
+		assertFalse(seqWithNoEndTime.isTimeToStop());
+		for (int i = 0; i < NUMBER_OF_DAYS; i++) {
+			seqWithNoEndTime.getNextTime();
+			assertTrue(seqWithNoEndTime.getWorkComplete() == 0);
+		}
+		seqWithNoEndTime.getNextTime();
+		assertTrue(seqWithNoEndTime.getWorkComplete() == 0);
+	} // testGetWorkComplete
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.tests.SequencerTest#testReset()
+	 */
+	@Override
+	public void testReset() {
+		final SequentialSequencer seqWithEndTime = getFixture();
+		assertTrue(seqWithEndTime.getStartTime().equals(
+				seqWithEndTime.getCurrentTime()));
+		final STEMTime time1 = seqWithEndTime.getNextTime();
+		assertTrue(seqWithEndTime.getStartTime().equals(
+				seqWithEndTime.getCurrentTime()));
+		seqWithEndTime.reset();
+		assertTrue(seqWithEndTime.getStartTime().equals(
+				seqWithEndTime.getCurrentTime()));
+	} // testReset
+
+	/**
+	 * Create an instance of STEMTime
+	 * 
+	 * @return the instance
+	 */
+	private static STEMTime createSTEMTime(final int year, final int month,
+			final int day) {
+		final STEMTime retValue = getCurrentSystemTime();
+
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(year, month, day);
+		retValue.setTime(calendar.getTime());
+		return retValue;
+	} // createSTEMTime
+
+	/**
+	 * @return the current real wall clock time as returned by the system.
+	 */
+	protected static STEMTime getCurrentSystemTime() {
+		return ModelFactory.eINSTANCE.createSTEMTime();
+	} // getCurrentSystemTime
+} // SequentialSequencerTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverExample.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverExample.java
new file mode 100644
index 0000000..16fc282
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverExample.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.core.solver.tests;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.io.File;

+import java.io.IOException;

+

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.util.Diagnostician;

+

+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;

+

+import org.eclipse.stem.core.solver.Solver;

+import org.eclipse.stem.core.solver.SolverFactory;

+import org.eclipse.stem.core.solver.SolverPackage;

+

+/**

+ * <!-- begin-user-doc -->

+ * A sample utility for the '<em><b>solver</b></em>' package.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverExample {

+	/**

+	 * <!-- begin-user-doc -->

+	 * Load all the argument file paths or URIs as instances of the model.

+	 * <!-- end-user-doc -->

+	 * @param args the file paths or URIs.

+	 * @generated

+	 */

+	public static void main(String[] args) {

+		// Create a resource set to hold the resources.

+		//

+		ResourceSet resourceSet = new ResourceSetImpl();

+		

+		// Register the appropriate resource factory to handle all file extensions.

+		//

+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put

+			(Resource.Factory.Registry.DEFAULT_EXTENSION, 

+			 new XMIResourceFactoryImpl());

+

+		// Register the package to ensure it is available during loading.

+		//

+		resourceSet.getPackageRegistry().put

+			(SolverPackage.eNS_URI, 

+			 SolverPackage.eINSTANCE);

+        

+		// If there are no arguments, emit an appropriate usage message.

+		//

+		if (args.length == 0) {

+			System.out.println("Enter a list of file paths or URIs that have content like this:"); //$NON-NLS-1$

+			try {

+				Resource resource = resourceSet.createResource(URI.createURI("http:///My.solver")); //$NON-NLS-1$

+				Solver root = SolverFactory.eINSTANCE.createSolver();

+				resource.getContents().add(root);

+				resource.save(System.out, null);

+			}

+			catch (IOException exception) {

+				exception.printStackTrace();

+			}

+		}

+		else {

+			// Iterate over all the arguments.

+			//

+			for (int i = 0; i < args.length; ++i) {

+				// Construct the URI for the instance file.

+				// The argument is treated as a file path only if it denotes an existing file.

+				// Otherwise, it's directly treated as a URL.

+				//

+				File file = new File(args[i]);

+				URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[0]);

+

+				try {

+					// Demand load resource for this file.

+					//

+					Resource resource = resourceSet.getResource(uri, true);

+					System.out.println("Loaded " + uri); //$NON-NLS-1$

+

+					// Validate the contents of the loaded resource.

+					//

+					for (EObject eObject : resource.getContents()) {

+						Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);

+						if (diagnostic.getSeverity() != Diagnostic.OK) {

+							printDiagnostic(diagnostic, ""); //$NON-NLS-1$

+						}

+					}

+				}

+				catch (RuntimeException exception) {

+					System.out.println("Problem loading " + uri); //$NON-NLS-1$

+					exception.printStackTrace();

+				}

+			}

+		}

+	}

+	

+	/**

+	 * <!-- begin-user-doc -->

+	 * Prints diagnostics with indentation.

+	 * <!-- end-user-doc -->

+	 * @param diagnostic the diagnostic to print.

+	 * @param indent the indentation for printing.

+	 * @generated

+	 */

+	protected static void printDiagnostic(Diagnostic diagnostic, String indent) {

+		System.out.print(indent);

+		System.out.println(diagnostic.getMessage());

+		for (Diagnostic child : diagnostic.getChildren()) {

+			printDiagnostic(child, indent + "  "); //$NON-NLS-1$

+		}

+	}

+

+} //SolverExample

diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTest.java
new file mode 100644
index 0000000..d477cfb
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTest.java
@@ -0,0 +1,114 @@
+package org.eclipse.stem.core.solver.tests;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import junit.textui.TestRunner;

+

+import org.eclipse.stem.core.common.tests.IdentifiableTest;

+

+import org.eclipse.stem.core.solver.Solver;

+import org.eclipse.stem.core.solver.SolverFactory;

+

+/**

+ * <!-- begin-user-doc -->

+ * A test case for the model object '<em><b>Solver</b></em>'.

+ * <!-- end-user-doc -->

+ * <p>

+ * The following operations are tested:

+ * <ul>

+ *   <li>{@link org.eclipse.stem.core.solver.Solver#step(org.eclipse.stem.core.model.STEMTime, long, int) <em>Step</em>}</li>

+ *   <li>{@link org.eclipse.stem.core.solver.Solver#reset() <em>Reset</em>}</li>

+ * </ul>

+ * </p>

+ * @generated

+ */

+public class SolverTest extends IdentifiableTest {

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static void main(String[] args) {

+		TestRunner.run(SolverTest.class);

+	}

+

+	/**

+	 * Constructs a new Solver test case with the given name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverTest(String name) {

+		super(name);

+	}

+

+	/**

+	 * Returns the fixture for this Solver test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected Solver getFixture() {

+		return (Solver)fixture;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see junit.framework.TestCase#setUp()

+	 * @generated

+	 */

+	@Override

+	protected void setUp() throws Exception {

+		setFixture(SolverFactory.eINSTANCE.createSolver());

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see junit.framework.TestCase#tearDown()

+	 * @generated

+	 */

+	@Override

+	protected void tearDown() throws Exception {

+		setFixture(null);

+	}

+

+	/**

+	 * Tests the '{@link org.eclipse.stem.core.solver.Solver#step(org.eclipse.stem.core.model.STEMTime, long, int) <em>Step</em>}' operation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.solver.Solver#step(org.eclipse.stem.core.model.STEMTime, long, int)

+	 * @generated

+	 */

+	public void testStep__STEMTime_long_int() {

+		// TODO: implement this operation test method

+		// Ensure that you remove @generated or mark it @generated NOT

+		fail();

+	}

+

+	/**

+	 * Tests the '{@link org.eclipse.stem.core.solver.Solver#reset() <em>Reset</em>}' operation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.stem.core.solver.Solver#reset()

+	 * @generated

+	 */

+	public void testReset() {

+		// TODO: implement this operation test method

+		// Ensure that you remove @generated or mark it @generated NOT

+		fail();

+	}

+

+} //SolverTest

diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTests.java
new file mode 100644
index 0000000..8ec69dd
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/solver/tests/SolverTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.core.solver.tests;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import junit.framework.Test;

+import junit.framework.TestSuite;

+

+import junit.textui.TestRunner;

+

+/**

+ * <!-- begin-user-doc -->

+ * A test suite for the '<em><b>solver</b></em>' package.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverTests extends TestSuite {

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static void main(String[] args) {

+		TestRunner.run(suite());

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static Test suite() {

+		TestSuite suite = new SolverTests("solver Tests"); //$NON-NLS-1$

+		suite.addTestSuite(SolverTest.class);

+		return suite;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverTests(String name) {

+		super(name);

+	}

+

+} //SolverTests

diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/Activator.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/Activator.java
new file mode 100644
index 0000000..aa5b813
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/Activator.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.core.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+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.stem.core.test";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @param context
+	 * @throws Exception
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @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;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestConstants.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestConstants.java
new file mode 100644
index 0000000..16906a8
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestConstants.java
@@ -0,0 +1,25 @@
+// TestConstants.java
+package org.eclipse.stem.core.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains constants used by STEM's tests.
+ */
+public interface TestConstants {
+
+	/**
+	 * This is the URI string of the serialized test scenario used for JUnit
+	 * tests
+	 */
+	String JUNIT_TEST_SCENARIO_1_URI_STRING = "platform:/resource/org.eclipse.stem.core.test/data/scenarios/basic/testscenario1.scenario";
+} // TestConstants
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestLogPerformance.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestLogPerformance.java
new file mode 100644
index 0000000..98951aa
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/TestLogPerformance.java
@@ -0,0 +1,89 @@
+package org.eclipse.stem.core.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.FileWriter;
+import java.io.IOException;
+
+public class TestLogPerformance {
+	public static void main(String [] args) {
+		try {
+			TestLogPerformance test = new TestLogPerformance();
+			test.test1();
+			test.test2();
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void test1()  throws IOException{
+		// Create 100 files and write 
+		// 4 columns, 10000 rows to each file
+		
+		FileWriter [] fileWriters = new FileWriter[200];
+		
+		long now = System.currentTimeMillis();
+	
+		for(int ind = 0;ind<fileWriters.length;++ind) {
+			fileWriters[ind] = this.createFile("c:\\perftest\\test1_"+(ind)+".csv");
+		}
+		
+		String data = "COL1,COL2,COL3,COL4";
+		for(int i=0;i<10000;++i) {
+			for(int ind = 0;ind<fileWriters.length;++ind) {
+				fileWriters[ind].append(data);
+				fileWriters[ind].append("\n");
+				if(i % 50 == 0) fileWriters[ind].flush();
+			}
+		}
+		for(FileWriter fw: fileWriters) {
+			fw.flush();
+			fw.close();
+		}
+		long then = System.currentTimeMillis();
+		System.out.println("Test 1: "+(then - now));
+	}
+	
+	private void test2() throws IOException {
+		// Create 4 files and write 
+		// 100 columns, 10000 rows to each file
+		
+		FileWriter [] fileWriters = new FileWriter[4];
+		String data = "";
+		for(int col=0;col<200;++col) data = data+"COL"+col+",";
+		long now = System.currentTimeMillis();
+	
+		for(int ind = 0;ind<fileWriters.length;++ind) {
+			fileWriters[ind] = this.createFile("c:\\perftest\\test2_"+(ind)+".csv");
+		}
+		
+		
+		for(int i=0;i<10000;++i) {
+			for(int ind = 0;ind<fileWriters.length;++ind) {
+				fileWriters[ind].append(data);
+				fileWriters[ind].append("\n");
+				if(i % 50 == 0) fileWriters[ind].flush();
+			}
+		}
+		for(FileWriter fw: fileWriters) {
+			fw.flush();
+			fw.close();
+		}
+		long then = System.currentTimeMillis();
+		System.out.println("Test 2: "+(then - now));
+	}
+	
+	private FileWriter createFile(String filename) throws IOException {
+		FileWriter fw = new FileWriter(filename);
+		return fw;
+	}
+}
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/util/Util.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/util/Util.java
new file mode 100644
index 0000000..f7e822f
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/tests/util/Util.java
@@ -0,0 +1,122 @@
+// Util.java
+package org.eclipse.stem.core.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.impl.IdentifiableFilterImpl;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.tests.GraphTest;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.tests.ModelTest;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+
+/**
+ * This class holds utility methods for testing. The Main method creates
+ * instances of the the graph, model and scenario's being used for the JUnit
+ * tests and serializes them.
+ */
+public class Util {
+
+	private static final String SCENARIO_FILE_NAME = "testscenario.xml";
+
+	private static final String GRAPH_FILE_NAME = "testgraph.xml";
+
+	private static final String MODEL_FILE_NAME = "testmodel.xml";
+
+	private static final String CANONICAL_GRAPH_FILE_NAME = "testcanonicalgraph.xml";
+
+	public static void main(final String[] args) {
+		try {
+			serializeGraph(GRAPH_FILE_NAME);
+			serializeModel(MODEL_FILE_NAME);
+			serializeScenario(SCENARIO_FILE_NAME);
+			serializeCanonicalGraph(CANONICAL_GRAPH_FILE_NAME);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	} // main
+
+	/**
+	 * Serialize a graph.
+	 * 
+	 * @param fileName
+	 *            the name of the file to serialize into
+	 * @throws IOException 
+	 */
+	private static void serializeGraph(final String fileName) throws IOException {
+		final Graph graph = GraphTest.createFixture();
+		refreshDublinCore(graph);
+		Utility.serializeIdentifiable(graph, createURI(fileName));
+	} // serializeGraph
+
+	/**
+	 * Serialize a model.
+	 * 
+	 * @param fileName
+	 *            the name of the file to serialize into
+	 * @throws IOException 
+	 */
+	private static void serializeModel(final String fileName) throws IOException {
+		final Model model = ModelTest.createFixture();
+		refreshDublinCore(model);
+		Utility.serializeIdentifiable(model, createURI(fileName));
+	} // serializeModel
+
+	/**
+	 * Serialize a scenario.
+	 * @throws IOException 
+	 */
+	private static void serializeScenario(final String fileName) throws IOException {
+		final Scenario scenario = ScenarioTest.createFixture();
+		refreshDublinCore(scenario);
+		Utility.serializeIdentifiable(scenario, createURI(fileName));
+	} // serializeScenario
+
+	/**
+	 * @param canonical_graph_file_name2
+	 * @throws IOException 
+	 */
+	private static void serializeCanonicalGraph(final String fileName) throws IOException {
+		final Scenario scenario = ScenarioTest.createFixture();
+		refreshDublinCore(scenario);
+		final Graph canonicalGraph = scenario.getModel().getCanonicalGraph(
+				STEMURI.createURI("canonical"), new IdentifiableFilterImpl(scenario.getModel().getDublinCore().getCoverage()));
+		Utility.serializeIdentifiable(canonicalGraph, createURI(fileName));
+	} // serializeCanonicalGraph
+
+	/**
+	 * @param fileName
+	 * @return a uri
+	 */
+	private static URI createURI(final String filePath) {
+		final URI retValue = URI.createURI(filePath);
+
+		return retValue;
+	} // createURI
+
+	/**
+	 * @param graph
+	 */
+	private static void refreshDublinCore(final Identifiable identifiable) {
+		final DublinCore dc = identifiable.getDublinCore();
+		dc.populate();
+		dc.setFormat(identifiable.eClass().getEPackage().getNsURI());
+	} // refreshDublinCore
+} // Util
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTest.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTest.java
new file mode 100644
index 0000000..2987d16
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTest.java
@@ -0,0 +1,82 @@
+package org.eclipse.stem.core.trigger.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.tests.DecoratorTest;
+
+import org.eclipse.stem.core.trigger.Trigger;
+import org.eclipse.stem.core.trigger.TriggerFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Trigger</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TriggerTest extends DecoratorTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(TriggerTest.class);
+	}
+
+	/**
+	 * Constructs a new Trigger test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Trigger test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Trigger getFixture() {
+		return (Trigger)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(TriggerFactory.eINSTANCE.createTrigger());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */	
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //TriggerTest
diff --git a/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTests.java b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTests.java
new file mode 100644
index 0000000..9f49e53
--- /dev/null
+++ b/org.eclipse.stem.tests.core/src/org/eclipse/stem/core/trigger/tests/TriggerTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.core.trigger.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>trigger</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TriggerTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new TriggerTests("trigger Tests"); //$NON-NLS-1$
+		suite.addTestSuite(TriggerTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerTests(String name) {
+		super(name);
+	}
+
+} //TriggerTests
diff --git a/org.eclipse.stem.tests.core/temp/.cvsignore b/org.eclipse.stem.tests.core/temp/.cvsignore
new file mode 100644
index 0000000..294fcb6
--- /dev/null
+++ b/org.eclipse.stem.tests.core/temp/.cvsignore
@@ -0,0 +1,3 @@
+*.graph
+*.model
+*.scenario
diff --git a/org.eclipse.stem.tests.definitions/.classpath b/org.eclipse.stem.tests.definitions/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.definitions/.project b/org.eclipse.stem.tests.definitions/.project
new file mode 100644
index 0000000..fda38cd
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.definitions</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.definitions/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.definitions/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..854a555
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:46:23 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.definitions/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.definitions/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ba128eb
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.definitions;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.definitions.adapters.relativevalue,
+ org.eclipse.stem.definitions.adapters.relativevalue.history,
+ org.eclipse.stem.definitions.adapters.spatial,
+ org.eclipse.stem.definitions.adapters.spatial.geo,
+ org.eclipse.stem.definitions.edges.tests,
+ org.eclipse.stem.definitions.labels.tests,
+ org.eclipse.stem.definitions.nodes.tests
+Require-Bundle: org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.stem.tests.core,
+ org.eclipse.stem.tests.util
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.definitions/build.properties b/org.eclipse.stem.tests.definitions/build.properties
new file mode 100644
index 0000000..5520140
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/build.properties
@@ -0,0 +1,13 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.definitions/data/spatial/geo/test1gml.gml b/org.eclipse.stem.tests.definitions/data/spatial/geo/test1gml.gml
new file mode 100644
index 0000000..5c2e460
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/data/spatial/geo/test1gml.gml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">
+<title>USA Level 2 Map</title>
+<subTitle>Administrative Boundaries</subTitle>
+<updated>Aug 16, 2006 4:31:08 PM</updated>
+<entry>
+<georss:where>
+<gml:Polygon gml:id="US-AK-02013"/>
+
+<gml:Polygon gml:id="US-AK-02290"/>
+
+<gml:Polygon gml:id="US-AL-01001">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.916956 32.664158 -86.817344 32.660151 -86.713495 32.667382 -86.620663 32.70626 -86.524593 32.707057 -86.524593 32.707057 -86.468202 32.707856 -86.416159 32.70748 -86.415647 32.707464 -86.413116 32.707386 -86.413116 32.707386 -86.412567 32.607347 -86.412378 32.557071 -86.412342 32.503636 -86.412073 32.492934 -86.412073 32.492934 -86.411973 32.491634 -86.411973 32.491634 -86.411973 32.489355 -86.411973 32.485835 -86.411773 32.465735 -86.411172 32.409937 -86.411172 32.409937 -86.416472 32.407037 -86.444785 32.39986 -86.463564 32.377288 -86.496774 32.344438 -86.496774 32.344438 -86.535668 32.34044 -86.54216 32.361417 -86.709716 32.3604 -86.782377 32.373375 -86.784355 32.324408 -86.814912 32.340803 -86.814912 32.340803 -86.843096 32.432814 -86.866607 32.440114 -86.900519 32.556054 -86.916956 32.664158 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+<gml:Polygon gml:id="US-AL-01003">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-87.954533 30.919325 -87.954641 30.918574 -87.954641 30.918574 -87.954533 30.919325 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+<gml:Polygon gml:id="US-AL-01095">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.326987 34.599744 -86.221192 34.599851 -86.167484 34.599263 -86.148681 34.588339 -86.149806 34.533633 -86.149806 34.533633 -86.154275 34.530055 -86.152663 34.533719 -86.150966 34.533653 -86.149806 34.533633 -86.149806 34.533633 -86.145533 34.533479 -86.145602 34.520011 -86.098479 34.500087 -86.057712 34.475994 </gml:posList>
+</gml:LinearRing>
+<gml:LinearRing>
+<gml:posList>-86.149806 34.533633 -86.148681 34.588339 -86.167484 34.599263 -86.221192 34.599851 -86.326987 34.599744 -86.326987 34.599744 -86.305587 34.594122 -86.391992 34.519442 -86.487213 34.480056 -86.550166 34.545963 -86.550166 34.545963 -86.559542 34.501899 -86.565522 34.467949 -86.574595 34.412147 -86.581936 34.304694 -86.581936 34.304694 -86.52622 34.303452 -86.471865 34.289249 -86.452851 34.259456 -86.452876 34.259314 -86.452876 34.259314 -86.444327 34.256324 -86.378307 34.173792 -86.343832 34.138999 -86.303498 34.099097 -86.303498 34.099097 -86.216256 34.165024 -86.16741 34.187471 -86.110778 34.186351 -86.106086 34.200756 -86.106086 34.200756 -86.107207 34.237491 -86.108139 34.294225 -86.111316 34.392949 -86.057712 34.475994 -86.057712 34.475994 -86.098479 34.500087 -86.145602 34.520011 -86.145533 34.533479 -86.149806 34.533633 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+<gml:Polygon gml:id="US-CA-06037">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-80.625917 33.41507 -80.44755 33.500025 -80.250903 33.351658 -80.250903 33.28144 -80.375908 33.260074 -80.548577 33.375028 -80.625917 33.41507 -80.625917 33.41507 -80.44755 33.500025 -80.250903 33.351658 -80.250903 33.28144 -80.375908 33.260074 -80.548577 33.375028 -80.625917 33.41507 </gml:posList>
+</gml:LinearRing>
+<gml:LinearRing>
+<gml:posList>-80.644732 33.000033 -80.603847 32.904787 -80.436539 32.750039 -80.419864 32.750039 -80.375907 32.908688 -80.479945 33.000033 -80.625916 33.085664 -80.644732 33.000033 -80.644732 33.000033 -80.603847 32.904787 -80.436539 32.750039 -80.419864 32.750039 -80.375907 32.908688 -80.479945 33.000033 -80.625916 33.085664 -80.644732 33.000033 </gml:posList>
+</gml:LinearRing>
+<gml:LinearRing>
+<gml:posList>-80.63337 34.270546 -80.633774 34.272226 -80.647402 34.314032 -80.670346 34.360622 -80.692555 34.406348 -80.692555 34.406348 -80.764733 34.551958 -80.793886 34.611011 -80.840863 34.706505 -80.881895 34.790619 -80.881895 34.790619 -80.882402 34.791675 -80.882537 34.791992 -80.894466 34.817754 -80.881858 34.817802 -80.881858 34.817802 -80.88141 34.817802 -80.88141 34.817802 -80.681214 34.818122 -80.466731 34.817692 -80.255309 34.820155 -80.171595 34.820555 -80.171595 34.820555 -80.170571 34.820603 -80.170571 34.820603 -80.092968 34.821123 -70.987462 34.822172 -70.824737 34.822749 -70.667292 34.822526 -70.667292 34.822526 -70.667297 34.710548 -70.666871 34.602136 -70.66033 34.553337 -70.659738 34.498747 -70.659738 34.498747 -70.65977 34.498203 -70.659706 34.497515 -70.659703 34.496981 -70.659561 34.451485 -70.659561 34.451485 -70.655014 34.396947 -70.653159 34.373798 -70.652693 34.367332 -70.652601 34.366048 -70.652601 34.366048 -70.650248 34.338865 -70.64788 34.28258 -70.675334 34.176983 -70.710089 34.08161 -70.710089 34.08161 -70.710328 34.081031 -70.710689 34.08031 -70.711774 34.077844 -70.729789 34.024411 -70.729789 34.024411 -70.729889 34.024111 -70.731889 34.020512 -70.735889 34.018812 -70.745211 34.019991 -70.745211 34.019991 -70.79172 33.994098 -70.802691 33.968313 -70.793853 33.959243 -70.78329 33.946413 -70.78329 33.946413 -70.794202 33.946544 -70.79989 33.946613 -70.82901 33.946613 -70.870193 33.945513 -70.870193 33.945513 -70.925177 33.945996 -70.976361 33.926604 -80.009196 33.880914 -80.011396 33.874714 -80.011396 33.874714 -80.011396 33.874114 -80.011396 33.873314 -80.011996 33.873314 -80.041997 33.862014 -80.041997 33.862014 -80.041997 33.861614 -80.050597 33.853215 -80.050597 33.852015 -80.082297 33.805516 -80.082297 33.805516 -80.084597 33.803216 -80.084735 33.802733 -80.084846 33.802346 -80.085896 33.798638 -80.085896 33.798638 -80.086058 33.798017 -80.086738 33.79609 -80.086738 33.79609 -80.086997 33.795616 -80.087997 33.794216 -80.092297 33.787316 -80.093197 33.786016 -80.093197 33.786016 -80.098691 33.777276 -80.09879 33.77642 -80.09873 33.776305 -80.097897 33.774716 -80.097897 33.774716 -80.097597 33.774316 -80.097597 33.774316 -80.097428 33.774115 -80.097428 33.774115 -80.097265 33.77392 -80.097265 33.77392 -80.096997 33.773416 -80.096752 33.77302 -80.108193 33.750017 -80.125898 33.697136 -80.125898 33.697136 -80.243546 33.684802 -80.352008 33.666649 -80.473702 33.735714 -80.526416 33.955944 -80.628862 33.986153 -80.805372 33.947145 -80.951721 33.992858 -80.951721 33.992858 -80.917321 34.090027 -80.820852 34.148806 -80.715756 34.168322 -80.63337 34.270546 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+<gml:Polygon gml:id="US-CA-06083">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-70.49229 33.983215 -70.904811 33.939504 -80.015536 33.875006 -80.199514 33.875002 -80.298926 33.968415 -80.33982 34.124994 -80.25295 34.058095 -70.991643 34.064868 -70.947835 34.125001 -70.868804 34.125001 -70.468064 34.063139 -70.468064 34.063139 -70.486521 34.000003 -70.49229 33.983215 </gml:posList>
+</gml:LinearRing>
+<gml:LinearRing>
+<gml:posList>-80.570647 34.977537 -80.484056 34.991976 -80.347354 34.936081 -80.312909 35.005983 -80.262852 35.02554 -80.262852 35.02554 -80.259939 35.025915 -80.259986 35.025829 -80.260143 35.025544 -80.260143 35.025544 -80.26127 35.02142 -80.253282 35.027092 -80.22802 35.021543 -80.227769 35.021749 -80.227769 35.021749 -80.146227 35.083875 -80.096344 35.110231 -80.093 35.114107 -80.068006 35.097468 -80.068006 35.097468 -80.012378 35.075485 -70.959445 35.055721 -70.906972 35.037913 -70.886637 35.04039 -70.886637 35.04039 -70.78866 34.988514 -70.696837 34.975045 -70.644262 34.953575 -70.591383 34.933733 -70.591383 34.933733 -70.544058 34.903175 -70.515492 34.89775 -70.514479 34.897759 -70.505578 34.897836 -70.505578 34.897836 -70.493488 34.897547 -70.490455 34.897475 -70.477805 34.901174 -70.472754 34.901174 -70.472754 34.901174 -70.46196 34.90121 -70.449595 34.90125 -70.442352 34.901274 -70.442352 34.901274 -70.442175 34.844785 -70.442154 34.790592 -70.442154 34.788152 -70.442154 34.787094 -70.442154 34.787094 -70.441917 34.676283 -70.442386 34.574925 -70.442354 34.478292 -70.453553 34.395895 -70.453553 34.395895 -70.47683 34.374078 -70.476653 34.373195 -70.477363 34.371689 -70.500953 34.326922 -70.500953 34.326922 -70.660021 34.359518 -70.860229 34.355662 -80.022346 34.408347 -80.225491 34.418988 -80.417698 34.397553 -80.500996 34.403136 -80.588167 34.499985 -80.703836 34.624983 -80.695555 34.778559 -80.702795 34.999975 -80.702795 34.999975 -80.649103 34.974599 -80.594117 34.966586 -80.571287 34.977644 -80.570647 34.977537 </gml:posList>
+</gml:LinearRing>
+<gml:LinearRing>
+<gml:posList>-70.000932 33.535895 -70.000932 33.535895 -70.000932 33.535895 -70.000932 33.535895 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+</georss:where>
+</entry>
+</Map>
diff --git a/org.eclipse.stem.tests.definitions/data/spatial/geo/testbadformaterror.gml b/org.eclipse.stem.tests.definitions/data/spatial/geo/testbadformaterror.gml
new file mode 100644
index 0000000..8ac2012
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/data/spatial/geo/testbadformaterror.gml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">
+<title>USA Level 2 Map</title>
+<subTitle>Administrative Boundaries</subTitle>
+<updated>Aug 16, 2006 4:31:08 PM</updated>
+<entry>
+<georss:where>
+
+<-- This file has an error in that this comment is incorrectly specified -->
+
+<gml:Polygon gml:id="US-AL-01001">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.916956 32.664158 -86.817344  </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+</georss:where>
+</entry>
+</Map>
diff --git a/org.eclipse.stem.tests.definitions/data/spatial/geo/testelementerror.gml b/org.eclipse.stem.tests.definitions/data/spatial/geo/testelementerror.gml
new file mode 100644
index 0000000..72a2df7
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/data/spatial/geo/testelementerror.gml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">
+<title>USA Level 2 Map</title>
+<subTitle>Administrative Boundaries</subTitle>
+<updated>Aug 16, 2006 4:31:08 PM</updated>
+<entry>
+<georss:where>
+
+<!-- This file has an error in that it is missing polygon element -->
+
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.916956 32.664158 -86.817344  </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+</georss:where>
+</entry>
+</Map>
diff --git a/org.eclipse.stem.tests.definitions/data/spatial/geo/testlatlongerror.gml b/org.eclipse.stem.tests.definitions/data/spatial/geo/testlatlongerror.gml
new file mode 100644
index 0000000..277dcde
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/data/spatial/geo/testlatlongerror.gml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">
+<title>USA Level 2 Map</title>
+<subTitle>Administrative Boundaries</subTitle>
+<updated>Aug 16, 2006 4:31:08 PM</updated>
+<entry>
+<georss:where>
+
+<!-- This file has an error in that the number of lat/long data "pairs" is odd. -->
+
+<gml:Polygon gml:id="US-AL-01001">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.916956 32.664158 -86.817344  </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+</georss:where>
+</entry>
+</Map>
diff --git a/org.eclipse.stem.tests.definitions/data/spatial/geo/testwhitespace.gml b/org.eclipse.stem.tests.definitions/data/spatial/geo/testwhitespace.gml
new file mode 100644
index 0000000..bde82c8
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/data/spatial/geo/testwhitespace.gml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">
+<title>USA Level 2 Map</title>
+<subTitle>Administrative Boundaries</subTitle>
+<updated>Aug 16, 2006 4:31:08 PM</updated>
+<entry>
+<georss:where>
+
+<!-- This file has different kinds of white space between the lat/long data "pairs". -->
+
+<gml:Polygon gml:id="US-AL-01001">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>-86.916956 
+32.664158 -86.817344 	33.664158 </gml:posList>
+</gml:LinearRing>
+</gml:outerBoundaryIs>
+</gml:Polygon>
+
+</georss:where>
+</entry>
+</Map>
diff --git a/org.eclipse.stem.tests.definitions/epl-v10.html b/org.eclipse.stem.tests.definitions/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.definitions/notice.html b/org.eclipse.stem.tests.definitions/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.definitions/plugin.properties b/org.eclipse.stem.tests.definitions/plugin.properties
new file mode 100644
index 0000000..ec2e37f
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Definitions Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryImplTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryImplTest.java
new file mode 100644
index 0000000..e582dc7
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryImplTest.java
@@ -0,0 +1,68 @@
+// RelativeValueProviderAdapterFactoryImplTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+
+/**
+ * This class is a JUnit test case for
+ * {@link RelativeValueProviderAdapterFactoryImpl}.
+ */
+@SuppressWarnings("all")
+final public class RelativeValueProviderAdapterFactoryImplTest extends
+		RelativeValueProviderAdapterFactoryTest {
+
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public RelativeValueProviderAdapterFactory createFixture() {
+		return new RelativeValueProviderAdapterFactory.RelativeValueProviderAdapterFactoryImpl() {
+
+			@Override
+			public Object adapt(Object target, Object type) {
+				return new RelativeValueProviderAdapter() {
+					@Override
+					public List<IItemPropertyDescriptor> getProperties() {
+						return null;
+					}
+
+					@Override
+					public double getRelativeValue(EStructuralFeature feature) {
+						return 0;
+					}
+					
+					@Override
+					public double getDenominator(EStructuralFeature feature) {
+						return 0.0;
+					}
+					
+				};
+			} // adapt
+		};
+	} // createFixture
+
+} // RelativeValueProviderAdapterFactoryImplTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..68a44d9
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterFactoryTest.java
@@ -0,0 +1,47 @@
+// RelativeValueProviderAdapterFactoryTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+
+/**
+ * This class is a JUnit test case for RelativeValueProviderAdapterFactoryImpl
+ */
+abstract public class RelativeValueProviderAdapterFactoryTest extends TestCase {
+
+	/**
+	 * This is the factory under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected RelativeValueProviderAdapterFactory fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private RelativeValueProviderAdapterFactory getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final RelativeValueProviderAdapterFactory fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory.RelativeValueProviderAdapterFactoryImpl#isFactoryForType(java.lang.Object)}.
+	 */
+	public void testIsFactoryForTypeObject() {
+		final RelativeValueProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(RelativeValueProvider.class));
+	} // testIsFactoryForTypeObject
+
+} // RelativeValueProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterTest.java
new file mode 100644
index 0000000..c91a24a
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/RelativeValueProviderAdapterTest.java
@@ -0,0 +1,46 @@
+// RelativeValueProviderAdapterTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for <code>RelativeValueProviderAdapter</code>'s.
+ */
+abstract public class RelativeValueProviderAdapterTest extends TestCase {
+
+	/**
+	 * This is the adapter under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected RelativeValueProviderAdapter fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private RelativeValueProviderAdapter getFixture() {
+		return fixture;
+	} // getFixture
+
+	protected void setFixture(final RelativeValueProviderAdapter fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for
+	 * {@link RelativeValueProviderAdapter#isAdapterForType(Object)}
+	 */
+	public void testIsAdapterForType() {
+		final RelativeValueProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(RelativeValueProvider.class));
+	} // testIsAdapterForType
+
+} // RelativeValueProviderAdapterTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryImplTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryImplTest.java
new file mode 100644
index 0000000..76a5b3e
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryImplTest.java
@@ -0,0 +1,103 @@
+// RelativeValueHistoryProviderAdapterFactoryImplTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.model.STEMTime;
+
+/**
+ * This class represents
+ */
+@SuppressWarnings("all")
+public class RelativeValueHistoryProviderAdapterFactoryImplTest extends
+		RelativeValueHistoryProviderAdapterFactoryTest {
+
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public RelativeValueHistoryProviderAdapterFactory createFixture() {
+		return new RelativeValueHistoryProviderAdapterFactory.RelativeValueHistoryProviderAdapterFactoryImpl() {
+
+			@Override
+			public Object adapt(Object target, Object type) {
+				return new RelativeValueHistoryProviderAdapter() {
+					@Override
+					public List<IItemPropertyDescriptor> getProperties() {
+						return null;
+					}
+					
+
+					public double[] getHistoricInstances(
+							ItemPropertyDescriptor property,
+							STEMTime[] timeRange) {
+						// TODO Auto-generated method stub
+						return null;
+					}
+
+
+					@Override
+					public double getRelativeValue(EStructuralFeature feature) {
+						return 0;
+					}
+
+					@Override
+					public double[] getAllHistoricRelativeValues(
+							EStructuralFeature feature) {
+						return new double[0];
+					}
+
+					@Override
+					public STEMTime[] getAllHistoricTimeValues() {
+						return new STEMTime[0];
+					}
+
+					@Override
+					public STEMTime getEarliestTimeValue() {
+						return null;
+					}
+
+					@Override
+					public double getRelativeValue(EStructuralFeature feature,
+							STEMTime time) {
+						return 0;
+					}
+					
+					@Override
+					public double getDenominator(EStructuralFeature feature) {
+						return 0.0;
+					}
+					
+
+					public int getEarliestCycleNumber() {
+						return 0;
+					}
+				};
+			} // adapt
+		};
+	} // createFixture
+
+} // RelativeValueHistoryProviderAdapterFactoryImplTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..5f76188
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterFactoryTest.java
@@ -0,0 +1,46 @@
+// RelativeValueHistoryProviderAdapterFactoryTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for
+ * RelativeValueHistoryProviderAdapterFactory
+ */
+abstract public class RelativeValueHistoryProviderAdapterFactoryTest extends TestCase {
+	/**
+	 * This is the factory under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected RelativeValueHistoryProviderAdapterFactory fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private RelativeValueHistoryProviderAdapterFactory getFixture() {
+		return fixture;
+	} // getFixture
+
+	protected void setFixture(final RelativeValueHistoryProviderAdapterFactory fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory.RelativeValueProviderAdapterFactoryImpl#isFactoryForType(java.lang.Object)}.
+	 */
+	public void testIsFactoryForTypeObject() {
+		final RelativeValueHistoryProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(RelativeValueHistoryProvider.class));
+	} // testIsFactoryForTypeObject
+
+} // RelativeValueHistoryProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterTest.java
new file mode 100644
index 0000000..3adf97f
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/relativevalue/history/RelativeValueHistoryProviderAdapterTest.java
@@ -0,0 +1,46 @@
+// RelativeValueHistoryProviderAdapterTest.java
+package org.eclipse.stem.definitions.adapters.relativevalue.history;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test case for
+ * <code>RelativeValueHistoryProviderAdapter</code>'s.
+ */
+abstract public class RelativeValueHistoryProviderAdapterTest extends TestCase {
+	/**
+	 * This is the adapter under test. The value is set in the
+	 * <code>setUp</code> method of a derived class.
+	 */
+	protected RelativeValueHistoryProviderAdapter fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private RelativeValueHistoryProviderAdapter getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final RelativeValueHistoryProviderAdapter fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * Test method for
+	 * {@link RelativeValueHistoryProviderAdapter#isAdapterForType(Object)}
+	 */
+	public void testIsAdapterForType() {
+		final RelativeValueHistoryProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(RelativeValueHistoryProvider.class));
+	} // testIsAdapterForType
+
+} // RelativeValueHistoryProviderAdapterTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..b6ff788
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterFactoryTest.java
@@ -0,0 +1,34 @@
+// SpatialProviderAdapterFactoryTest.java
+package org.eclipse.stem.definitions.adapters.spatial;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+
+/**
+ * This class is a JUnit test case for SpatialProviderAdapterFactory.
+ */
+abstract public class SpatialProviderAdapterFactoryTest extends TestCase {
+
+	protected SpatialProviderAdapterFactory fixture;
+
+	@SuppressWarnings({ "unqualified-field-access" })
+	private SpatialProviderAdapterFactory getFixture() {
+		return fixture;
+	} // SpatialProviderAdapterFactory
+
+	protected void setFixture(final SpatialProviderAdapterFactory fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+} // SpatialProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterTest.java
new file mode 100644
index 0000000..50b34d3
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/SpatialProviderAdapterTest.java
@@ -0,0 +1,42 @@
+// SpatialProviderAdapterTest.java
+package org.eclipse.stem.definitions.adapters.spatial;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+
+/**
+ * This class is a JUnit test case for SpatialProviderAdapter.
+ */
+abstract public class SpatialProviderAdapterTest extends TestCase {
+
+	protected SpatialProviderAdapter fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private final SpatialProviderAdapter getFixture() {
+		return fixture;
+	}
+
+	protected final void setFixture(SpatialProviderAdapter fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Test method for isAdapterForType(java.lang.Object)
+	 */
+	public void testIsAdapterForTypeObject() {
+		final SpatialProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(SpatialProvider.class));
+	} // testIsAdapterForTypeObject
+
+} // SpatialProviderAdapterTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProviderTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProviderTest.java
new file mode 100644
index 0000000..ab3a1c7
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/InlineLatLongDataProviderTest.java
@@ -0,0 +1,184 @@
+// InlineLatLongDataProviderTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ * This class is a JUnit test for InlineLatLongDataProvider.
+ */
+@SuppressWarnings("all")
+public class InlineLatLongDataProviderTest extends LatLongDataProviderTest {
+
+	private static final String TEST_INLINE_LAT_LONG_URI_STRING_MISMATCH_ERROR1 = InlineLatLongDataProvider.INLINE_SCHEME
+			+ ":///0,0,90,90,0";
+
+	private static final String TEST_INLINE_LAT_LONG_URI_STRING_MISMATCH_ERROR2 = InlineLatLongDataProvider.INLINE_SCHEME
+			+ ":///0,0,90,90,0,";
+
+	private static final String TEST_INLINE_LAT_LONG_URI_STRING_NUMBER_FORMAT_ERROR = InlineLatLongDataProvider.INLINE_SCHEME
+			+ ":///0,abc,90,90,0,0";
+
+	/**
+	 * Test string
+	 */
+	public static String TEST_INLINE_LAT_LONG_URI_STRING1 = InlineLatLongDataProvider.INLINE_SCHEME
+			+ ":///0.00,0.00,90.00,90.00,0.00,90.00/10.00,15.00,10.00,20.00,20.00,20.00,40.00,40.00";
+
+	@SuppressWarnings("unqualified-field-access")
+	private InlineLatLongDataProvider getFixture() {
+		return (InlineLatLongDataProvider) fixture;
+	}
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(new InlineLatLongDataProvider());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.InlineLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLong1() {
+		final InlineLatLongDataProvider fixture = getFixture();
+		LatLong result = fixture.getLatLong(URI
+				.createURI(TEST_INLINE_LAT_LONG_URI_STRING1));
+		assertTrue(result.size() == 2);
+		verifyInlineLatLongResult(result);
+	} // testGetLatLong1
+
+	/**
+	 * @param result
+	 */
+	public static void verifyInlineLatLongResult(LatLong result) {
+		Segment latLong0 = null;
+		Segment latLong1 = null;
+		if (result.getSegments().get(0).size() == 3) {
+			latLong0 = result.getSegments().get(0);
+			latLong1 = result.getSegments().get(1);
+
+		} else {
+			latLong0 = result.getSegments().get(1);
+			latLong1 = result.getSegments().get(0);
+		}
+
+		// --- latLong0
+		assertTrue(latLong0.latitude(0) == 0.0);
+		assertTrue(latLong0.longitude(0) == 0.0);
+
+		assertTrue(latLong0.latitude(1) == 90.0);
+		assertTrue(latLong0.longitude(1) == 90.0);
+
+		assertTrue(latLong0.latitude(2) == 0.0);
+		assertTrue(latLong0.longitude(2) == 90.0);
+
+		// --- latLong1
+		assertTrue(latLong1.latitude(0) == 10.0);
+		assertTrue(latLong1.longitude(0) == 15.0);
+
+		assertTrue(latLong1.latitude(1) == 10.0);
+		assertTrue(latLong1.longitude(1) == 20.0);
+
+		assertTrue(latLong1.latitude(2) == 20.0);
+		assertTrue(latLong1.longitude(2) == 20.0);
+
+		assertTrue(latLong1.latitude(3) == 40.0);
+		assertTrue(latLong1.longitude(3) == 40.0);
+
+	} // verifyInlineLatLongResult
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.InlineLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongMismatchError() {
+		InlineLatLongDataProvider fixture = getFixture();
+		try {
+			LatLong result1 = fixture
+					.getLatLong(URI
+							.createURI(TEST_INLINE_LAT_LONG_URI_STRING_MISMATCH_ERROR1));
+			assertTrue(result1.size() == 0);
+		} // try
+		catch (NullPointerException npe) {
+			// expected
+		}
+		try {
+			LatLong result2 = fixture
+					.getLatLong(URI
+							.createURI(TEST_INLINE_LAT_LONG_URI_STRING_MISMATCH_ERROR2));
+			assertTrue(result2.size() == 0);
+		} // try
+		catch (NullPointerException npe) {
+			// expected
+		}
+	} // testGetLatLongMismatchError
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.InlineLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongNumberFormatError() {
+		InlineLatLongDataProvider fixture = getFixture();
+		try {
+			LatLong result1 = fixture
+					.getLatLong(URI
+							.createURI(TEST_INLINE_LAT_LONG_URI_STRING_NUMBER_FORMAT_ERROR));
+			assertTrue(result1.size() == 0);
+		} // try
+		catch (NullPointerException npe) {
+			// expected
+		}
+
+	} // testGetLatLongNumberFormatError
+
+	/**
+	 * Test that we can create the inline URI string from the segment arrays
+	 */
+	public void testCreateInlineURIString() {
+		final InlineLatLongDataProvider fixture = getFixture();
+		LatLong result = fixture.getLatLong(URI
+				.createURI(TEST_INLINE_LAT_LONG_URI_STRING1));
+		final String resultString = InlineLatLongDataProvider
+				.createInlineURIString(result);
+		assertTrue(resultString.equals(TEST_INLINE_LAT_LONG_URI_STRING1));
+	} // testCreateInlineURIString
+
+	/**
+	 * Test that we can create the spatial inline URI string from the segment
+	 * arrays
+	 */
+	public void testCreateSpatialInlineURIString() {
+		final InlineLatLongDataProvider fixture = getFixture();
+		LatLong result = fixture.getLatLong(URI
+				.createURI(TEST_INLINE_LAT_LONG_URI_STRING1));
+		final String resultString = InlineLatLongDataProvider
+				.createSpatialInlineURIString(result);
+		assertTrue(resultString
+				.startsWith(SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX));
+		assertTrue(resultString.endsWith(TEST_INLINE_LAT_LONG_URI_STRING1));
+		assertTrue(resultString.length() == (TEST_INLINE_LAT_LONG_URI_STRING1
+				.length() + SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX
+				.length()));
+	} // testCreateSpatialInlineURIString
+} // InlineLatLongDataProviderTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProviderTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProviderTest.java
new file mode 100644
index 0000000..9cf3e54
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongDataProviderTest.java
@@ -0,0 +1,32 @@
+// LatLongDataProviderTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+/**
+ * This class is a JUnit test for LatLongDataProvider.
+ */
+abstract public class LatLongDataProviderTest extends TestCase {
+
+	protected LatLongDataProvider fixture;
+
+	private final LatLongDataProvider getFixture() {
+		return fixture;
+	}
+
+	protected final void setFixture(LatLongDataProvider fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+} // LatLongDataProviderTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..12bc150
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterFactoryTest.java
@@ -0,0 +1,69 @@
+// LatLongProviderAdapterFactoryTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapterFactoryTest;
+
+/**
+ * This class is a JUnit test case for LatLongProviderAdapterFactory.
+ */
+@SuppressWarnings("all")
+public class LatLongProviderAdapterFactoryTest extends
+		SpatialProviderAdapterFactoryTest {
+
+	private LatLongProviderAdapterFactory getFixture() {
+		return (LatLongProviderAdapterFactory) fixture;
+	}
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(new LatLongProviderAdapterFactory());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.LatLongProviderAdapterFactory#isFactoryForType(java.lang.Object)}.
+	 */
+	public void testIsFactoryForTypeObject() {
+		final LatLongProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(LatLongProvider.class));
+	} // testIsFactoryForTypeObject
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.LatLongProviderAdapterFactory#createAdapter(org.eclipse.emf.common.notify.Notifier)}.
+	 */
+	public void testCreateAdapterNotifier() {
+		final Node node = GraphFactory.eINSTANCE.createNode();
+		node.getDublinCore().setSpatial(
+				LatLongProviderAdapterTest.SPATIAL_INLINE_TEST_URI_STRING);
+
+		final LatLongProvider latLongProvider = (LatLongProvider) LatLongProviderAdapterFactory.INSTANCE
+				.adapt(node, LatLongProvider.class);
+
+		final LatLong result = latLongProvider.getLatLong();
+		InlineLatLongDataProviderTest.verifyInlineLatLongResult(result);
+	} // testCreateAdapterNotifier
+
+} // LatLongProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterTest.java
new file mode 100644
index 0000000..674294d
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongProviderAdapterTest.java
@@ -0,0 +1,79 @@
+// LatLongProviderAdapterTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapterTest;
+
+/**
+ * This class is a JUnit test case for LatLongProviderAdapter.
+ */
+@SuppressWarnings("all")
+public class LatLongProviderAdapterTest extends SpatialProviderAdapterTest {
+
+	public static final String SPATIAL_INLINE_TEST_URI_STRING = SpatialProviderAdapter.STEM_SPATIAL_SCHEME
+			+ ":"
+			+ InlineLatLongDataProviderTest.TEST_INLINE_LAT_LONG_URI_STRING1;
+
+	private LatLongProviderAdapter getFixture() {
+		return (LatLongProviderAdapter) fixture;
+	} // LatLongProviderAdapter
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		final LatLongProviderAdapter temp = new LatLongProviderAdapter();
+		final Node node = GraphFactory.eINSTANCE.createNode();
+		node.getDublinCore().setSpatial(SPATIAL_INLINE_TEST_URI_STRING);
+		temp.setTarget(node);
+		setFixture(temp);
+	} // setUp
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	public void testIsAdapterForType() {
+		final LatLongProviderAdapter fixture = getFixture();
+		assertTrue(fixture.isAdapterForType(LatLongProvider.class));
+	} // testIsAdapterForType
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.LatLongProviderAdapter#getLatLong()}.
+	 */
+	public void testGetLatLong() {
+		final LatLongProviderAdapter fixture = getFixture();
+		final LatLong result = fixture.getLatLong();
+		InlineLatLongDataProviderTest.verifyInlineLatLongResult(result);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.LatLongProviderAdapter#getCenterLatLong()}.
+	 */
+	public void testGetCenter() {
+		final LatLongProviderAdapter fixture = getFixture();
+		final double[] result = fixture.getCenter();
+		assertNotNull(result);
+	} // testGetCenter
+
+} // LatLongProviderAdapterTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongTest.java
new file mode 100644
index 0000000..3f1ea33
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/LatLongTest.java
@@ -0,0 +1,133 @@
+// LatLongTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder;
+
+/**
+ * This class is a JUnit test case for LatLong.
+ */
+@SuppressWarnings("all")
+public class LatLongTest extends TestCase {
+
+	protected LatLong fixture = null;
+
+	private LatLong getFixture() {
+		return fixture;
+	}
+
+	protected void setFixture(LatLong fixture) {
+		this.fixture = fixture;
+	}
+
+	public static LatLong createFixture() {
+		LatLong retValue = new LatLong();
+		final Segment segment = SegmentTest.createFixture();
+		retValue.add(segment);
+		return retValue;
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong#add(org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment)}.
+	 */
+	public void testAddSegment() {
+		final LatLong latLong = getFixture();
+		assertTrue(latLong.size() == 1);
+		final Segment segment = SegmentTest.createFixture();
+		latLong.add(segment);
+		assertTrue(latLong.size() == 2);
+		assertTrue(latLong.getSegments().contains(segment));
+	} // testAddSegment
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong#add(java.util.List)}.
+	 */
+	public void testAddListOfSegment() {
+		final LatLong latLong = getFixture();
+		assertTrue(latLong.size() == 1);
+
+		final SegmentBuilder sb1 = new SegmentBuilder();
+		sb1.add(1.0, 2.0);
+		sb1.add(3.0, 4.0);
+		final SegmentBuilder sb2 = new SegmentBuilder();
+		sb2.add(10.0, 20.0);
+		sb2.add(30.0, 40.0);
+
+		final List<Segment> segmentList = new ArrayList<Segment>();
+		segmentList.add(sb1.toSegment());
+		segmentList.add(sb2.toSegment());
+		latLong.add(segmentList);
+
+		assertTrue(latLong.size() == 3);
+
+	} // testAddListOfSegment
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong#add(org.eclipse.stem.definitions.adapters.spatial.geo.LatLong)}.
+	 */
+	public void testAddLatLong() {
+		final LatLong latLong = getFixture();
+		assertTrue(latLong.size() == 1);
+		latLong.add(createFixture());
+		assertTrue(latLong.size() == 2);
+	} // testAddLatLong
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong#getSegments()}.
+	 */
+	public void testGetSegments() {
+		final LatLong latLong = getFixture();
+		assertTrue(latLong.size() == 1);
+		assertTrue(latLong.getSegments().size() == 1);
+	} // testGetSegments
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong#size()}.
+	 * 
+	 * Basically the same as {@link #testAddSegment()}
+	 */
+	public void testSize() {
+		final LatLong latLong = getFixture();
+		assertTrue(latLong.size() == 1);
+		final Segment segment = SegmentTest.createFixture();
+		latLong.add(segment);
+		assertTrue(latLong.size() == 2);
+		assertTrue(latLong.getSegments().contains(segment));
+	} // testSize
+
+} // LatLongTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProviderTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProviderTest.java
new file mode 100644
index 0000000..05a36cb
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/PlatformLatLongDataProviderTest.java
@@ -0,0 +1,358 @@
+// PlatformLatLongDataProviderTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * This class is a JUnit test for PlatformLatLongDataProvider.
+ * 
+ * @see PlatformLatLongDataProvider
+ * @see InlineLatLongDataProviderTest
+ * @see InlineLatLongDataProvider
+ */
+@SuppressWarnings("all")
+public class PlatformLatLongDataProviderTest extends LatLongDataProviderTest {
+
+	// This is the project that contains the test files
+	private static String PROJECT_NAME = "org.eclipse.stem.tests.definitions";
+
+	// This is the path to the test files
+	private static String PATH = "data/spatial/geo";
+
+	// This is the name of a file
+	private static String FILE_NAME1 = "test1gml.gml";
+
+	private static final String LATLONG_ERROR_FILENAME = "testlatlongerror.gml";
+
+	private static final String BAD_FORMAT_ERROR_FILENAME = "testbadformaterror.gml";
+
+	private static final String ELEMENT_ERROR_FILENAME = "testelementerror.gml";
+
+//	private static final String WHITE_SPACE_FILENAME = "testwhitespace.gml";
+	
+	/**
+	 *  This is the complete string that would be extracted from a dublin core
+	 * "spatial" attribute
+	 */
+	public static String TEST_PLATFORM_LAT_LONG_URI_STRING1 = PlatformLatLongDataProvider.PLATFORM_SCHEME
+			+ ":/plugin/" + PROJECT_NAME + "/" + PATH + "/";
+
+	// These are the node identifiers and the counts of the number of segments
+	// in their latitude/longitude data
+	public static String AK02013 = "#US-AK-02013";
+
+	public static int AK02013COUNT = 0;
+
+	public static String AK02290 = "#US-AK-02290";
+
+	public static int AK02290COUNT = 0;
+
+	public static String AL01001 = "#US-AL-01001";
+
+	public static int AL01001COUNT = 1;
+
+	public static String AL01003 = "#US-AL-01003";
+
+	public static int AL01003COUNT = 1;
+
+	public static String AL01095 = "#US-AL-01095";
+
+	public static int AL01095COUNT = 2;
+
+	public static String CA06037 = "#US-CA-06037";
+
+	public static int CA06037COUNT = 3;
+
+	public static String CA06083 = "#US-CA-06083";
+
+	public static int CA06083COUNT = 3;
+
+	public static String UNKNOWNID = "#UNKNOWNID";
+
+	public static int UNKNOWNIDCOUNT = 0;
+
+	static String[] ID_FRAGMENTS = new String[] { AK02013, AK02290, AL01001,
+			AL01003, AL01095, CA06037, CA06083, UNKNOWNID };
+
+	static int[] ID_SEGMENT_COUNTS = new int[] { AK02013COUNT, AK02290COUNT,
+			AL01001COUNT, AL01003COUNT, AL01095COUNT, CA06037COUNT,
+			CA06083COUNT, UNKNOWNIDCOUNT };
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(new PlatformLatLongDataProvider());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	private PlatformLatLongDataProvider getFixture() {
+		return (PlatformLatLongDataProvider) fixture;
+	} // getFixture
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.PlatformLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLong() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+
+		for (int i = 0; i < ID_FRAGMENTS.length; i++) {
+			LatLong result = fixture.getLatLong(URI
+					.createURI(TEST_PLATFORM_LAT_LONG_URI_STRING1 + FILE_NAME1
+							+ ID_FRAGMENTS[i]));
+
+			assertTrue(result.size() == ID_SEGMENT_COUNTS[i]);
+		} // for i
+
+	} // testGetLatLong
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.PlatformLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongError() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+
+		LatLong result = fixture.getLatLong(URI
+				.createURI(TEST_PLATFORM_LAT_LONG_URI_STRING1
+						+ LATLONG_ERROR_FILENAME + AL01001));
+		assertTrue(result.size() == 0);
+	} // testGetLatLongError
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.PlatformLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongElementError() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+
+		// This test prints on to System.err, so I've commented it out.
+		// Otherwise it works.
+		assertTrue(true);
+		// LatLong result = fixture.getLatLong(URI
+		// .createURI(TEST_PLATFORM_LAT_LONG_URI_STRING1
+		// + ELEMENT_ERROR_FILENAME + AL01001));
+		// assertTrue(result.size() == 0);
+	} // testGetLatLongError
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.PlatformLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongBadFormatError() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+
+		// This test prints on to System.err, so I've commented it out.
+		// Otherwise it works.
+		assertTrue(true);
+		// LatLong result = fixture.getLatLong(URI
+		// .createURI(TEST_PLATFORM_LAT_LONG_URI_STRING1
+		// + BAD_FORMAT_ERROR_FILENAME + AL01001));
+		// assertTrue(result.size() == 0);
+	} // testGetLatLongBadFormatError
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.PlatformLatLongDataProvider#getLatLong(org.eclipse.emf.common.util.URI)}.
+	 */
+	public void testGetLatLongWhitespaceProcessing() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+
+		// This test prints on to System.err, so I've commented it out.
+		// Otherwise it works.
+		assertTrue(true);
+		// LatLong result = fixture.getLatLong(URI
+		// .createURI(TEST_PLATFORM_LAT_LONG_URI_STRING1
+		// + WHITE_SPACE_FILENAME + AL01001));
+		// assertTrue(result.size() != 0);
+	} // testGetLatLongBadFormatError
+
+	
+	/**
+	 * This "test" does a scan of a gml data file and checks that each polygon
+	 * is closed. It reports the ones that are not.
+	 * 
+	 */
+	public void testDataSanity() {
+		final PlatformLatLongDataProvider fixture = getFixture();
+		final String URI_STRING = "platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/USA/USA_2_MAP.xml";
+		assertTrue(true);
+		// polygonCheck(fixture, URI_STRING);
+
+		// duplicateCheck(fixture, URI_STRING);
+
+	} // testDataSanity
+
+	/**
+	 * @param fixture
+	 * @param URI_STRING
+	 */
+//	private void polygonCheck(final PlatformLatLongDataProvider fixture,
+//			final String uriString) {
+//		final URI uri = URI.createURI(uriString);
+//		final Collection<String> ids = fixture.getIds(uri);
+//		System.out.println("The following Segments are not polygons");
+//		for (String id : ids) {
+//			boolean firstTime = true;
+//			boolean foundNotPolygon = false;
+//			int segmentCount = 0;
+//
+//			final LatLong result = fixture.getLatLong(URI.createURI(uriString
+//					+ "#" + id));
+//
+//			// Get each segment and test for polygoness
+//			for (Segment segment : result.getSegments()) {
+//				// Is this a polygon?
+//				if (!segment.isPolygon()) {
+//					// No
+//					foundNotPolygon = true;
+//					// Print the id?
+//					if (firstTime) {
+//						// Yes
+//						System.out.println("ID: \"" + id + "\"");
+//						firstTime = false;
+//					}
+//					System.out.println("\tSegment " + segmentCount + ": "
+//							+ segment.toString());
+//				} // if not a polygon
+//				segmentCount++;
+//
+//			} // for each segment
+//			// not a polygon?
+//			if (foundNotPolygon) {
+//				// Yes
+//				System.out.println();
+//			}
+//		} // for each id
+//	} // polygonCheck
+
+	/**
+	 * Examine the segments in the data for duplications
+	 * 
+	 * @param fixture
+	 * @param uri_string
+	 */
+//	private void duplicateCheck(PlatformLatLongDataProvider fixture,
+//			String uriString) {
+//		final URI uri = URI.createURI(uriString);
+//		final Collection<String> ids = fixture.getIds(uri);
+//
+//		// We get every segment and put it into a map keyed by its hashcode.
+//		// Before we put them into the map however, we see if something with
+//		// that hash code is already there. If so we check for equality and if
+//		// they're equal we've got duplication.
+//
+//		Map<Integer, DuplicateMapEntry> map = new HashMap<Integer, DuplicateMapEntry>();
+//		List<DuplicateMapEntry> dupList = new ArrayList<DuplicateMapEntry>();
+//
+//		for (String id : ids) {
+//
+//			final LatLong result = fixture.getLatLong(URI.createURI(uriString
+//					+ "#" + id));
+//			int segmentCount = 0;
+//
+//			// Get each segment and test for polygoness
+//			for (Segment segment : result.getSegments()) {
+//
+//				Integer hashcode = new Integer(segment.hashCode());
+//
+//				DuplicateMapEntry entry = map.get(hashcode);
+//				// Is the segment in the map already?
+//				if (entry == null) {
+//					// No
+//					map.put(hashcode, new DuplicateMapEntry(id, segmentCount,
+//							segment));
+//				} // if
+//				else {
+//					// Yes
+//					// Dup!
+//					// Are they truely EQUAL!
+//					if (entry.segment.equals(segment)) {
+//						// Yes
+//						entry.add(new DuplicateMapEntry(id, segmentCount,
+//								segment));
+//						// Add this to the dup list?
+//						if (entry.duplicates.size() == 1) {
+//							// Yes
+//							dupList.add(entry);
+//						}
+//					}
+//				} // else Dup!
+//				segmentCount++;
+//			} // for each segment
+//
+//		} // for each id
+//
+//		// Are there any duplications?
+//		if (dupList.size() > 0) {
+//			// Yes
+//			System.out.println();
+//			System.out.println("There are " + dupList.size()
+//					+ " duplicate segments.\n");
+//			System.out.println();
+//
+//			// The duplicates are on the dup list...
+//			for (DuplicateMapEntry entry : dupList) {
+//				System.out.println("Id: " + entry.id + " segment "
+//						+ entry.segmentNumber + ": \""
+//						+ entry.segment.toString() + "\"");
+//				for (DuplicateMapEntry dupEntry : entry.duplicates) {
+//					System.out.println("\tId: " + dupEntry.id + " segment "
+//							+ dupEntry.segmentNumber + ": \""
+//							+ dupEntry.segment.toString() + "\"");
+//				}
+//				System.out.println();
+//			} // for
+//		}
+//	} // duplicateCheck
+
+//	private static class DuplicateMapEntry {
+//		String id = null;
+//
+//		int segmentNumber = -1;
+//
+//		Segment segment = null;
+//
+//		List<DuplicateMapEntry> duplicates = null;
+//
+//		/**
+//		 * @param id
+//		 * @param segmentNumber
+//		 * @param segment
+//		 */
+//		protected DuplicateMapEntry(String id, int segmentNumber,
+//				Segment segment) {
+//			this.id = id;
+//			this.segmentNumber = segmentNumber;
+//			this.segment = segment;
+//		} // DuplicateMapEntry
+//
+//		public void add(DuplicateMapEntry entry) {
+//			// Any duplicates already
+//			if (duplicates == null) {
+//				// No
+//				duplicates = new ArrayList<DuplicateMapEntry>();
+//			}
+//			duplicates.add(entry);
+//		}
+//	} // DuplicateMapEntry
+
+} // PlatformLatLongDataProviderTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentBuilderTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentBuilderTest.java
new file mode 100644
index 0000000..618c136
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentBuilderTest.java
@@ -0,0 +1,182 @@
+// SegmentBuilderTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder;
+
+/**
+ * This class is a JUnit test for LatLong.SegmentBuilder
+ */
+@SuppressWarnings("all")
+public class SegmentBuilderTest extends TestCase {
+
+	protected SegmentBuilder fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private SegmentBuilder getFixture() {
+		return fixture;
+	}
+
+	protected void setFixture(SegmentBuilder fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public static SegmentBuilder createFixture() {
+		return new SegmentBuilder();
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder#add(java.lang.String, java.lang.String)}.
+	 */
+	public void testAddStringString() {
+		final SegmentBuilder sb = getFixture();
+		sb.add("1.5", "2.5");
+		final Segment segment = sb.toSegment();
+		assertTrue(segment.size() == 1);
+		assertTrue(segment.latitude(0) == 1.5);
+		assertTrue(segment.longitude(0) == 2.5);
+	} // testAddStringString
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder#add(double, double)}.
+	 */
+	public void testAddDoubleDouble() {
+		final SegmentBuilder sb = getFixture();
+		sb.add(1.5, 2.5);
+		final Segment segment = sb.toSegment();
+		assertTrue(segment.size() == 1);
+		assertTrue(segment.latitude(0) == 1.5);
+		assertTrue(segment.longitude(0) == 2.5);
+	} // testAddDoubleDouble
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder#size()}.
+	 */
+	public void testSize() {
+		final SegmentBuilder sb = getFixture();
+		assertTrue(sb.size() == 0);
+		sb.add(1.5, 2.5);
+		assertTrue(sb.size() == 1);
+		sb.add(3.5, 4.5);
+		assertTrue(sb.size() == 2);
+	} // testSize
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder#clear()}.
+	 */
+	public void testClear() {
+		final SegmentBuilder sb = getFixture();
+		assertTrue(sb.size() == 0);
+		sb.add(1.5, 2.5);
+		assertTrue(sb.size() == 1);
+		sb.add(3.5, 4.5);
+		assertTrue(sb.size() == 2);
+		sb.clear();
+		assertTrue(sb.size() == 0);
+	} // testClear
+
+	/**
+	 * Test toSegment with filtering
+	 */
+	public void testToSegment() {
+		final SegmentBuilder sb = getFixture();
+		assertTrue(sb.size() == 0);
+		sb.add(0, 0);
+		sb.add(1, 1);
+		sb.add(2, 2);
+		sb.add(3, 3);
+		sb.add(4, 4);
+		sb.add(5, 5);
+		sb.add(6, 6);
+		sb.add(7, 7);
+		assertTrue(sb.size() == 8);
+
+		final Segment filteredSegment4 = sb.toSegment(4);
+		assertTrue(filteredSegment4.size() == 3);
+		assertTrue(filteredSegment4.latitude(0) == 0);
+		assertTrue(filteredSegment4.longitude(0) == 0);
+		assertTrue(filteredSegment4.latitude(1) == 4);
+		assertTrue(filteredSegment4.longitude(1) == 4);
+		assertTrue(filteredSegment4.latitude(2) == 7);
+		assertTrue(filteredSegment4.longitude(2) == 7);
+
+		final Segment filteredSegment1 = sb.toSegment(1);
+		assertTrue(filteredSegment1.size() == sb.size());
+		assertTrue(filteredSegment1.latitude(0) == 0);
+		assertTrue(filteredSegment1.longitude(0) == 0);
+		assertTrue(filteredSegment1.latitude(1) == 1);
+		assertTrue(filteredSegment1.longitude(1) == 1);
+		assertTrue(filteredSegment1.latitude(2) == 2);
+		assertTrue(filteredSegment1.longitude(2) == 2);
+		assertTrue(filteredSegment1.latitude(3) == 3);
+		assertTrue(filteredSegment1.longitude(3) == 3);
+		assertTrue(filteredSegment1.latitude(4) == 4);
+		assertTrue(filteredSegment1.longitude(4) == 4);
+		assertTrue(filteredSegment1.latitude(5) == 5);
+		assertTrue(filteredSegment1.longitude(5) == 5);
+		assertTrue(filteredSegment1.latitude(6) == 6);
+		assertTrue(filteredSegment1.longitude(6) == 6);
+		assertTrue(filteredSegment1.latitude(7) == 7);
+		assertTrue(filteredSegment1.longitude(7) == 7);
+
+		final Segment filteredSegmentTooBig = sb.toSegment(sb.size());
+		assertTrue(filteredSegmentTooBig.size() == 3);
+		assertTrue(filteredSegmentTooBig.latitude(0) == 0);
+		assertTrue(filteredSegmentTooBig.longitude(0) == 0);
+		assertTrue(filteredSegmentTooBig.latitude(1) == 4);
+		assertTrue(filteredSegmentTooBig.longitude(1) == 4);
+		assertTrue(filteredSegmentTooBig.latitude(2) == 7);
+		assertTrue(filteredSegmentTooBig.longitude(2) == 7);
+
+		final Segment filteredSegmentSameSize = sb.toSegment(sb.size() - 1);
+		assertTrue(filteredSegmentSameSize.size() == 3);
+		assertTrue(filteredSegmentSameSize.latitude(0) == 0);
+		assertTrue(filteredSegmentSameSize.longitude(0) == 0);
+		assertTrue(filteredSegmentSameSize.latitude(1) == 4);
+		assertTrue(filteredSegmentSameSize.longitude(1) == 4);
+		assertTrue(filteredSegmentSameSize.latitude(2) == 7);
+		assertTrue(filteredSegmentSameSize.longitude(2) == 7);
+
+		try {
+			final Segment filteredSegmentTooSmall = sb.toSegment(0);
+			fail("Should have thrown IllegalArgumentException");
+		} catch (IllegalArgumentException e) {
+			// expected
+		}
+
+	} // testToSegment
+} // SegmentBuilderTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentTest.java
new file mode 100644
index 0000000..efd481d
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/adapters/spatial/geo/SegmentTest.java
@@ -0,0 +1,116 @@
+// SegmentTest.java
+package org.eclipse.stem.definitions.adapters.spatial.geo;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ * This class represents
+ */
+@SuppressWarnings("all")
+public class SegmentTest extends TestCase {
+
+	private static final double LAT_0 = 0;
+
+	private static final double LONG_0 = 1.0;
+
+	private static final double LAT_1 = 10.0;
+
+	private static final double LONG_1 = 11.0;
+
+	private static final double LAT_2 = LAT_0;
+
+	private static final double LONG_2 = LONG_0;
+
+	protected Segment fixture = null;
+
+	@SuppressWarnings("unqualified-field-access")
+	private Segment getFixture() {
+		return fixture;
+	}
+
+	protected void setFixture(Segment fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * @return the fixture for testing
+	 */
+	public static Segment createFixture() {
+		final double[][] data = new double[3][2];
+		data[0][Segment.LATITUDE_INDEX] = LAT_0;
+		data[0][Segment.LONGITUDE_INDEX] = LONG_0;
+		data[1][Segment.LATITUDE_INDEX] = LAT_1;
+		data[1][Segment.LONGITUDE_INDEX] = LONG_1;
+		data[2][Segment.LATITUDE_INDEX] = LAT_2;
+		data[2][Segment.LONGITUDE_INDEX] = LONG_2;
+		return new Segment(data);
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment#latitude(int)}.
+	 */
+	public void testLatitude() {
+		final Segment segment = getFixture();
+		assertTrue(segment.latitude(0) == LAT_0);
+		assertTrue(segment.latitude(1) == LAT_1);
+		assertTrue(segment.latitude(2) == LAT_2);
+	} // testLatitude
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment#longitude(int)}.
+	 */
+	public void testLongitude() {
+		final Segment segment = getFixture();
+		assertTrue(segment.longitude(0) == LONG_0);
+		assertTrue(segment.longitude(1) == LONG_1);
+		assertTrue(segment.longitude(2) == LONG_2);
+	} // testLongitude
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment#size()}.
+	 */
+	public void testSize() {
+		final Segment segment = getFixture();
+		assertTrue(segment.size() == 3);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment#isPolygon()}.
+	 */
+	public void testIsPolygon() {
+		final Segment segment = getFixture();
+		assertTrue(segment.isPolygon());
+	} // testIsPolygon
+
+} // SegmentTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/DefinitionsAllTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/DefinitionsAllTests.java
new file mode 100644
index 0000000..62dcf99
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/DefinitionsAllTests.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.tests.LabelsTests;
+
+import org.eclipse.stem.definitions.nodes.tests.NodesTests;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Definitions</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DefinitionsAllTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new DefinitionsAllTests("Definitions Tests"); //$NON-NLS-1$
+		suite.addTest(EdgesTests.suite());
+		suite.addTest(LabelsTests.suite());
+		suite.addTest(NodesTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DefinitionsAllTests(String name) {
+		super(name);
+	}
+
+} //DefinitionsAllTests
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/EdgesTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/EdgesTests.java
new file mode 100644
index 0000000..064cabe
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/EdgesTests.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>edges</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EdgesTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new EdgesTests("edges Tests"); //$NON-NLS-1$
+		suite.addTestSuite(MigrationEdgeTest.class);
+		suite.addTestSuite(MigrationEdgeLabelTest.class);
+		suite.addTestSuite(MigrationEdgeLabelValueTest.class);
+		suite.addTestSuite(MixingEdgeTest.class);
+		suite.addTestSuite(MixingEdgeLabelTest.class);
+		suite.addTestSuite(MixingEdgeLabelValueTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EdgesTests(String name) {
+		super(name);
+	}
+
+} //EdgesTests
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelTest.java
new file mode 100644
index 0000000..d32aff9
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelTest.java
@@ -0,0 +1,110 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.EdgeLabelTest;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Migration Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MigrationEdgeLabelTest extends EdgeLabelTest {
+
+	/**
+	 * The fixture for this Migration Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MigrationEdgeLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Migration Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Migration Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MigrationEdgeLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Migration Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(EdgesFactory.eINSTANCE.createMigrationEdgeLabel());
+	}
+
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final MigrationEdgeLabel migrationEdgeLabel = getFixture();
+		assertNotNull(migrationEdgeLabel);
+		assertTrue(migrationEdgeLabel.sane());
+		
+		assertNotNull(migrationEdgeLabel.getCurrentValue());
+	} // testFixture	
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //MigrationEdgeLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelValueTest.java
new file mode 100644
index 0000000..f37c575
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeLabelValueTest.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.LabelValueTest;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelValueImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Migration Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MigrationEdgeLabelValueTest extends LabelValueTest {
+	/**Migration rates to use in the tests*/
+	static final double MIGRATION_RATE = 0.5;
+	
+	/**
+	 * The fixture for this Migration Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MigrationEdgeLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Migration Edge Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Migration Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MigrationEdgeLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Migration Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdgeLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(EdgesFactory.eINSTANCE.createMigrationEdgeLabelValue());
+	}
+	
+
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final MigrationEdgeLabelValue migrationLabelValue = getFixture();
+		assertNotNull(migrationLabelValue);
+		assertTrue(((MigrationEdgeLabelValueImpl) migrationLabelValue).sane());
+		
+		/*Make sure we can set the value*/
+		migrationLabelValue.setMigrationRate(MIGRATION_RATE);
+		assertTrue(migrationLabelValue.getMigrationRate()==MIGRATION_RATE);
+		
+	} // testFixture
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Make sure reset reverts the label value to its default
+	 */
+	@Override
+	public void testReset() {
+		MigrationEdgeLabelValue migrationLabelValue = getFixture();
+		double oldValue = migrationLabelValue.getMigrationRate();
+		migrationLabelValue.setMigrationRate(MIGRATION_RATE);
+		assertFalse(migrationLabelValue.getMigrationRate()==oldValue);
+		migrationLabelValue.reset();
+		assertTrue(migrationLabelValue.getMigrationRate()==oldValue);
+		
+	}
+
+} //MigrationEdgeLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeTest.java
new file mode 100644
index 0000000..bc355cf
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MigrationEdgeTest.java
@@ -0,0 +1,160 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.core.graph.tests.EdgeTest;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Migration Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MigrationEdgeTest extends EdgeTest {
+	
+	/**Static label for use in tests*/
+	static MigrationEdgeLabel TEST_LABEL = EdgesFactory.eINSTANCE.createMigrationEdgeLabel();
+
+	/**
+	 * The fixture for this Migration Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdge fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MigrationEdgeTest.class);
+	}
+
+	/**
+	 * Constructs a new Migration Edge test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MigrationEdgeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Migration Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MigrationEdge fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Migration Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MigrationEdge getFixture() {
+		return fixture;
+	}
+	
+	/**
+	 * Creates the fixture. We need to have nodes on both sides in order to be sane().
+	 * 
+	 * */
+	public MigrationEdge createFixture() {
+		final Node nodeA = TestUtil.createStaticallyLabeledNode();
+		final Node nodeB = TestUtil.createStaticallyLabeledNode();
+		MigrationEdge migrationEdge = EdgesFactory.eINSTANCE.createMigrationEdge();
+		migrationEdge.setNodeAURI(nodeA.getURI());
+		migrationEdge.setNodeBURI(nodeB.getURI());	
+		
+		//Make sure the node relations are cool
+		migrationEdge.setA(nodeA);
+		migrationEdge.setB(nodeB);
+		nodeA.getEdges().add(migrationEdge);
+		nodeB.getEdges().add(migrationEdge);
+		
+		
+		return migrationEdge;
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+	
+	/**Perform basic tests on this fixture*/
+	public void testFixture() {
+		MigrationEdge migrationEdge  = getFixture();
+		assertNotNull(migrationEdge);
+		assertTrue(migrationEdge.sane());
+		assertTrue(migrationEdge.isDirected());
+		
+		assertNotNull(migrationEdge.getLabel());
+	}
+	
+	/**Test setting the label*/
+	public void testSetLabel() {
+		MigrationEdge migrationEdge = getFixture();
+		assertFalse(migrationEdge.getLabel() == TEST_LABEL);
+		migrationEdge.setLabel(TEST_LABEL);
+		assertTrue(migrationEdge.getLabel()==TEST_LABEL);
+		assertTrue(migrationEdge.sane());
+	}
+	
+	/**Test Directed*/
+	public void testIsDirectedAt__Node() {
+		final Edge edge = getFixture();
+		final Node nodeA = edge.getA();
+		final Node nodeB = edge.getB();
+		
+		edge.setDirected(true);
+		assertTrue(edge.isDirected());
+
+		assertFalse(edge.isDirectedAt(nodeA));
+		assertTrue(edge.isDirectedAt(nodeB));
+	}
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //MigrationEdgeTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelTest.java
new file mode 100644
index 0000000..9e940e8
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.EdgeLabelTest;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Mixing Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MixingEdgeLabelTest extends EdgeLabelTest {
+
+	/**
+	 * The fixture for this Mixing Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MixingEdgeLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Mixing Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Mixing Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MixingEdgeLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Mixing Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(EdgesFactory.eINSTANCE.createMixingEdgeLabel());
+	}
+
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final MixingEdgeLabel mixingEdgeLabel = getFixture();
+		assertNotNull(mixingEdgeLabel);
+		assertTrue(mixingEdgeLabel.sane());
+		
+		assertNotNull(mixingEdgeLabel.getCurrentValue());
+	} // testFixture	
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}	
+
+} //MixingEdgeLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelValueTest.java
new file mode 100644
index 0000000..a500381
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeLabelValueTest.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.LabelValueTest;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabelValue;
+import org.eclipse.stem.definitions.edges.impl.MixingEdgeLabelValueImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Mixing Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MixingEdgeLabelValueTest extends LabelValueTest {
+
+	static double MIXING_RATE = .001;
+	
+	/**
+	 * The fixture for this Mixing Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MixingEdgeLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Mixing Edge Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Mixing Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MixingEdgeLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Mixing Edge Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdgeLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(EdgesFactory.eINSTANCE.createMixingEdgeLabelValue());
+	}
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final MixingEdgeLabelValue mixingLabelValue = getFixture();
+		assertNotNull(mixingLabelValue);
+		assertTrue(((MixingEdgeLabelValueImpl) mixingLabelValue).sane());
+		
+		/*Make sure we can set the value*/
+		mixingLabelValue.setMixingRate(MIXING_RATE);
+		assertTrue(mixingLabelValue.getMixingRate()==MIXING_RATE);
+		
+	} // testFixture
+	
+	/**
+	 * Make sure reset reverts the label value to its default
+	 */
+	@Override
+	public void testReset() {
+		MixingEdgeLabelValue mixingLabelValue = getFixture();
+		double oldValue = mixingLabelValue.getMixingRate();
+		mixingLabelValue.setMixingRate(MIXING_RATE);
+		assertFalse(mixingLabelValue.getMixingRate()==oldValue);
+		mixingLabelValue.reset();
+		assertTrue(mixingLabelValue.getMixingRate()==oldValue);
+		
+	}
+
+} //MixingEdgeLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeTest.java
new file mode 100644
index 0000000..ca17640
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/edges/tests/MixingEdgeTest.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.definitions.edges.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.tests.EdgeTest;
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MixingEdge;
+import org.eclipse.stem.definitions.edges.MixingEdgeLabel;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Mixing Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class MixingEdgeTest extends EdgeTest {
+
+	static MixingEdgeLabel TEST_LABEL = EdgesFactory.eINSTANCE.createMixingEdgeLabel();
+	
+	/**
+	 * The fixture for this Mixing Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdge fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(MixingEdgeTest.class);
+	}
+
+	/**
+	 * Constructs a new Mixing Edge test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MixingEdgeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Mixing Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(MixingEdge fixture) {
+		this.fixture = fixture;
+	}
+	
+	/**
+	 * Creates the fixture. We need to have nodes on both sides in order to be sane().
+	 * 
+	 * */
+	public MixingEdge createFixture() {
+		final Node nodeA = TestUtil.createStaticallyLabeledNode();
+		final Node nodeB = TestUtil.createStaticallyLabeledNode();
+		MixingEdge mixingEdge = EdgesFactory.eINSTANCE.createMixingEdge();
+		mixingEdge.setNodeAURI(nodeA.getURI());
+		mixingEdge.setNodeBURI(nodeB.getURI());
+		
+		//Make sure the node stuff is all cool.
+		mixingEdge.setA(nodeA);
+		mixingEdge.setB(nodeB);
+		nodeA.getEdges().add(mixingEdge);
+		nodeB.getEdges().add(mixingEdge);
+		
+		return mixingEdge;
+	}
+
+	/**
+	 * Returns the fixture for this Mixing Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MixingEdge getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**Perform basic tests on this fixture*/
+	public void testFixture() {
+		MixingEdge mixingEdge  = getFixture();
+		assertNotNull(mixingEdge);
+		assertTrue(mixingEdge.sane());
+		assertFalse(mixingEdge.isDirected());
+		
+		assertNotNull(mixingEdge.getLabel());
+	}
+	
+	/**Test setting the label*/
+	public void testSetLabel() {
+		MixingEdge mixingEdge = getFixture();
+		assertFalse(mixingEdge.getLabel() == TEST_LABEL);
+		mixingEdge.setLabel(TEST_LABEL);
+		assertTrue(mixingEdge.getLabel()==TEST_LABEL);
+		assertTrue(mixingEdge.sane());
+	}
+	
+	/**
+	*override of is directed test, since these edges
+	*cannot be directed
+	 */
+	public void testIsDirectedAt__Node() {
+		final Edge edge = getFixture();
+		final Node nodeA = edge.getA();
+		final Node nodeB = edge.getB();
+
+		assertFalse(edge.isDirected());
+
+		assertFalse(edge.isDirectedAt(nodeA));
+		assertFalse(edge.isDirectedAt(nodeB));
+
+	} // testIsDirectedAt__Node
+
+} //MixingEdgeTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelTest.java
new file mode 100644
index 0000000..d56c3af
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelTest.java
@@ -0,0 +1,137 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Area Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.AreaLabel#getCurrentAreaValue() <em>Current Area Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AreaLabelTest extends TestCase {
+	/**
+	 * The fixture for this Area Label test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected AreaLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AreaLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Area Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Area Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(AreaLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Area Label test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AreaLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return an AreaLabel
+	 */
+	public static AreaLabel createFixture() {
+		final AreaLabel retValue = LabelsFactory.eINSTANCE.createAreaLabel();
+		retValue.setCurrentValue(AreaLabelValueTest.createFixture());
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.AreaLabel#getCurrentAreaValue() <em>Current Area Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.definitions.labels.AreaLabel#getCurrentAreaValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentAreaValue() {
+		final AreaLabel areaLabel = getFixture();
+		assertTrue(areaLabel.getCurrentAreaValue().getArea() == AreaLabelValueTest.TEST_AREA_VALUE);
+	} // testGetCurrentAreaValue
+
+	/**
+	 * Test the sanity of the fixture
+	 */
+	public void testFixtureSanity() {
+		final AreaLabel areaLabel = getFixture();
+		assertTrue(areaLabel.sane());
+	} // testFixtureSanity
+
+} // AreaLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelValueTest.java
new file mode 100644
index 0000000..73190f3
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/AreaLabelValueTest.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Area Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AreaLabelValueTest extends TestCase {
+
+	/**
+	 * The test area value (km^2)
+	 */
+	public static final double TEST_AREA_VALUE = 1;
+
+	/**
+	 * The fixture for this Area Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AreaLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AreaLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Area Label Value test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AreaLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Area Label Value test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(AreaLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Area Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected AreaLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @return create an initialized AreaLabelValue
+	 * @see #TEST_AREA_VALUE
+	 */
+	public static AreaLabelValue createFixture() {
+		final AreaLabelValue retValue = LabelsFactory.eINSTANCE
+				.createAreaLabelValue();
+
+		retValue.setArea(TEST_AREA_VALUE);
+
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test that the fixture is sane
+	 */
+	public void testFixtureSanity() {
+		final AreaLabelValue areaLabelValue = getFixture();
+		assertTrue(areaLabelValue.sane());
+		assertTrue(areaLabelValue.getArea() == TEST_AREA_VALUE);
+	} // testFixtureSanity
+} // AreaLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelTest.java
new file mode 100644
index 0000000..16f176f
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelTest.java
@@ -0,0 +1,83 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabel;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Common Border Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class CommonBorderRelationshipLabelTest extends PhysicalRelationshipLabelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(CommonBorderRelationshipLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Common Border Relationship Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Common Border Relationship Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected CommonBorderRelationshipLabel getFixture() {
+		return (CommonBorderRelationshipLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createCommonBorderRelationshipLabel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	public void testFixtureSanity() {
+		assertTrue(getFixture().sane());
+	}
+} //CommonBorderRelationshipLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelValueTest.java
new file mode 100644
index 0000000..29bd7e1
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/CommonBorderRelationshipLabelValueTest.java
@@ -0,0 +1,86 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.CommonBorderRelationshipLabelValue;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Common Border Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class CommonBorderRelationshipLabelValueTest extends PhysicalRelationshipLabelValueTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(CommonBorderRelationshipLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Common Border Relationship Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonBorderRelationshipLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Common Border Relationship Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected CommonBorderRelationshipLabelValue getFixture() {
+		return (CommonBorderRelationshipLabelValue)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createCommonBorderRelationshipLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture.
+	 */
+	public void testFixtureSanity() {
+		assertTrue(getFixture().sane());
+	}
+} //CommonBorderRelationshipLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/DefinitionsAllTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/DefinitionsAllTests.java
new file mode 100644
index 0000000..823db13
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/DefinitionsAllTests.java
@@ -0,0 +1,72 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.nodes.tests.NodesTests;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>Definitions</b></em>'
+ * model. <!-- end-user-doc -->
+ * @generated
+ */
+public class DefinitionsAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new DefinitionsAllTests("Definitions Tests");
+		suite.addTest(LabelsTests.suite());
+		suite.addTest(NodesTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DefinitionsAllTests(String name) {
+		super(name);
+	}
+
+} // DefinitionsAllTests
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/LabelsTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/LabelsTests.java
new file mode 100644
index 0000000..14972dd
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/LabelsTests.java
@@ -0,0 +1,75 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>labels</b></em>'
+ * package. <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new LabelsTests("labels Tests"); //$NON-NLS-1$
+		suite.addTestSuite(AreaLabelTest.class);
+		suite.addTestSuite(AreaLabelValueTest.class);
+		suite.addTestSuite(CommonBorderRelationshipLabelTest.class);
+		suite.addTestSuite(CommonBorderRelationshipLabelValueTest.class);
+		suite.addTestSuite(PopulationLabelTest.class);
+		suite.addTestSuite(PopulationLabelValueTest.class);
+		suite.addTestSuite(RelativePhysicalRelationshipLabelTest.class);
+		suite.addTestSuite(RelativePhysicalRelationshipLabelValueTest.class);
+		suite.addTestSuite(TransportRelationshipLabelTest.class);
+		suite.addTestSuite(TransportRelationshipLabelValueTest.class);
+		suite.addTestSuite(PhysicalRelationshipLabelValueTest.class);
+		suite.addTestSuite(RoadTransportRelationshipLabelTest.class);
+		suite.addTestSuite(RoadTransportRelationshipLabelValueTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsTests(String name) {
+		super(name);
+	}
+
+} // LabelsTests
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelTest.java
new file mode 100644
index 0000000..e091d18
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Physical Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class PhysicalRelationshipLabelTest extends TestCase {
+	/**
+	 * The fixture for this Physical Relationship Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabel fixture = null;
+
+	/**
+	 * Constructs a new Physical Relationship Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalRelationshipLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Physical Relationship Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PhysicalRelationshipLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Physical Relationship Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabel getFixture() {
+		return fixture;
+	}
+
+} //PhysicalRelationshipLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelValueTest.java
new file mode 100644
index 0000000..c6b39be
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PhysicalRelationshipLabelValueTest.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PhysicalRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Physical Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PhysicalRelationshipLabelValueTest extends TestCase {
+	/**
+	 * The fixture for this Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PhysicalRelationshipLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Physical Relationship Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalRelationshipLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PhysicalRelationshipLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalRelationshipLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createPhysicalRelationshipLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		assertTrue(getFixture().sane());
+	}
+} //PhysicalRelationshipLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelTest.java
new file mode 100644
index 0000000..fa896b1
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelTest.java
@@ -0,0 +1,156 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.definitions.nodes.tests.RegionTest;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Population Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.PopulationLabel#getCurrentPopulationValue() <em>Current Population Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PopulationLabelTest extends TestCase {
+	/**
+	 * The fixture for this Population Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PopulationLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PopulationLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Population Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Population Label test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PopulationLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Population Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected PopulationLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a PopulationLabel with human population
+	 */
+	public static PopulationLabel createFixture() {
+		return LabelsFactory.eINSTANCE.createPopulationLabel();
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.PopulationLabel#getCurrentPopulationValue() <em>Current Population Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.definitions.labels.PopulationLabel#getCurrentPopulationValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentPopulationValue() {
+		final PopulationLabel populationLabel = getFixture();
+
+		final PopulationLabelValue value = populationLabel
+				.getCurrentPopulationValue();
+		assertTrue(value.getCount() == 0);
+	} // testGetCurrentPopulationValue
+
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final PopulationLabel populationLabel = getFixture();
+		assertNotNull(populationLabel);
+		assertTrue(populationLabel.sane());
+		assertTrue(populationLabel.getPopulationIdentifier().equals(
+				PopulationLabel.HUMAN));
+		assertTrue(populationLabel.getName().equals(PopulationLabel.HUMAN));
+	} // testFixture
+
+	/**
+	 * Test the the static method getPopulationLabel actually gets the
+	 * population label
+	 */
+	public void testGetPopulationLabel() {
+		final Region fixture = RegionTest.createFixture();
+		final PopulationLabel populationLabel = PopulationLabelImpl
+				.getPopulationLabel(createFixture().getPopulationIdentifier(),
+						fixture);
+		assertNotNull(populationLabel);
+	} // testGetPopulationLabel
+
+} // PopulationLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelValueTest.java
new file mode 100644
index 0000000..e1a03ba
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/PopulationLabelValueTest.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.labels.impl.PopulationLabelValueImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Population Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PopulationLabelValueTest extends TestCase {
+	/**
+	 * The fixture for this Population Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected PopulationLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PopulationLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Population Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PopulationLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Population Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(PopulationLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Population Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected PopulationLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createPopulationLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Make sure the fixture makes sense.
+	 */
+	public void testFixture() {
+		final PopulationLabelValue populationLabelValue = getFixture();
+		assertNotNull(populationLabelValue);
+		assertTrue(((PopulationLabelValueImpl) populationLabelValue).sane());
+		
+	} // testFixture
+} // PopulationLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelTest.java
new file mode 100644
index 0000000..46e56a1
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelTest.java
@@ -0,0 +1,102 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Relative Physical Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel#getCurrentRelationship() <em>Current Relationship</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class RelativePhysicalRelationshipLabelTest extends
+		PhysicalRelationshipLabelTest {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RelativePhysicalRelationshipLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Relative Physical Relationship Label test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Relative Physical Relationship Label test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected RelativePhysicalRelationshipLabel getFixture() {
+		return (RelativePhysicalRelationshipLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createRelativePhysicalRelationshipLabel());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel#getCurrentRelationship() <em>Current Relationship</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel#getCurrentRelationship()
+	 * @generated NOT
+	 */
+	public void testGetCurrentRelationship() {
+		final RelativePhysicalRelationshipLabel fixture = getFixture();
+		assertTrue(fixture.getCurrentRelationship() == fixture
+				.getCurrentValue());
+	} // testGetCurrentRelationship
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		final RelativePhysicalRelationshipLabel fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+} // RelativePhysicalRelationshipLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelValueTest.java
new file mode 100644
index 0000000..25a8347
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RelativePhysicalRelationshipLabelValueTest.java
@@ -0,0 +1,99 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Relative Physical Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class RelativePhysicalRelationshipLabelValueTest extends TestCase {
+	/**
+	 * The fixture for this Relative Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelativePhysicalRelationshipLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RelativePhysicalRelationshipLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Relative Physical Relationship Label Value test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelativePhysicalRelationshipLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Relative Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(RelativePhysicalRelationshipLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Relative Physical Relationship Label Value test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelativePhysicalRelationshipLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createRelativePhysicalRelationshipLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		final RelativePhysicalRelationshipLabelValue fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+} // RelativePhysicalRelationshipLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelTest.java
new file mode 100644
index 0000000..2ccf9d6
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelTest.java
@@ -0,0 +1,85 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Road Transport Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class RoadTransportRelationshipLabelTest extends PhysicalRelationshipLabelTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RoadTransportRelationshipLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Road Transport Relationship Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Road Transport Relationship Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected RoadTransportRelationshipLabel getFixture() {
+		return (RoadTransportRelationshipLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createRoadTransportRelationshipLabel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+
+	public void testFixtureSanity() {
+		assertTrue(getFixture().sane());
+	}
+	
+} //RoadTransportRelationshipLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelValueTest.java
new file mode 100644
index 0000000..52eb3d7
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/RoadTransportRelationshipLabelValueTest.java
@@ -0,0 +1,88 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.RoadTransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Road Transport Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class RoadTransportRelationshipLabelValueTest extends PhysicalRelationshipLabelValueTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RoadTransportRelationshipLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Road Transport Relationship Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RoadTransportRelationshipLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Road Transport Relationship Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected RoadTransportRelationshipLabelValue getFixture() {
+		return (RoadTransportRelationshipLabelValue)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(LabelsFactory.eINSTANCE.createRoadTransportRelationshipLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test the sanity of the fixture.
+	 */
+	@Override
+	public void testFixtureSanity() {
+		assertTrue(getFixture().sane());
+	}
+	
+} //RoadTransportRelationshipLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelTest.java
new file mode 100644
index 0000000..d04e1a7
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelTest.java
@@ -0,0 +1,177 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Transport Relationship Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCurrentTransportRelationshipLabelValue() <em>Current Transport Relationship Label Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getDepartureCapacity() <em>Departure Capacity</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCapacity() <em>Capacity</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TransportRelationshipLabelTest extends TestCase {
+	/**
+	 * The fixture for this Transport Relationship Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TransportRelationshipLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(TransportRelationshipLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Transport Relationship Label test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportRelationshipLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Transport Relationship Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(TransportRelationshipLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Transport Relationship Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TransportRelationshipLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCurrentTransportRelationshipLabelValue() <em>Current Transport Relationship Label Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCurrentTransportRelationshipLabelValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentTransportRelationshipLabelValue() {
+		final TransportRelationshipLabel fixture = getFixture();
+		assertTrue(fixture.getCurrentTransportRelationshipLabelValue() != null);
+	} // testGetCurrentTransportRelationshipLabelValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getDepartureCapacity() <em>Departure Capacity</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getDepartureCapacity()
+	 * @generated NOT
+	 */
+	public void testGetDepartureCapacity() {
+		// TODO: implement this feature getter test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCapacity() <em>Capacity</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.labels.TransportRelationshipLabel#getCapacity()
+	 * @generated NOT
+	 */
+	public void testGetCapacity() {
+		// TODO: implement this feature getter test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		assertTrue(true);
+	}
+
+	/**
+	 * @return a fixture
+	 */
+	public static TransportRelationshipLabel createFixture() {
+		final TransportRelationshipLabel temp = LabelsFactory.eINSTANCE
+				.createTransportRelationshipLabel();
+		final TestEdgeDecorator1 ted = DecoratorsFactory.eINSTANCE
+		.createTestEdgeDecorator1();
+		temp.setDecorator(ted);
+		temp.setCurrentValue(TransportRelationshipLabelValueTest
+				.createFixture());
+		return temp;
+	} // createFixture
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		final TransportRelationshipLabel fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+	/**
+	 * test createTransportRelationship
+	 */
+	// public void testCreateTransportRelationship() {
+	// fail();
+	// } // testCreateTransportRelationship
+	//
+	// /**
+	// * test createTransportRelationship (directed)
+	// */
+	// public void testCreateTransportRelationshipDirected() {
+	// fail();
+	// } // testCreateTransportRelationshipDirected
+} // TransportRelationshipLabelTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelValueTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelValueTest.java
new file mode 100644
index 0000000..8cd6c32
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/labels/tests/TransportRelationshipLabelValueTest.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.definitions.labels.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Transport Relationship Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TransportRelationshipLabelValueTest extends TestCase {
+	/**
+	 * The fixture for this Transport Relationship Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TransportRelationshipLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(TransportRelationshipLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Transport Relationship Label Value test case with the given name.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportRelationshipLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Transport Relationship Label Value test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(TransportRelationshipLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Transport Relationship Label Value test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportRelationshipLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	public static TransportRelationshipLabelValue createFixture() {
+		final TransportRelationshipLabelValue retValue = LabelsFactory.eINSTANCE
+				.createTransportRelationshipLabelValue();
+		return retValue;
+	} // createFixture
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		final TransportRelationshipLabelValue fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+} // TransportRelationshipLabelValueTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/GeographicFeatureTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/GeographicFeatureTest.java
new file mode 100644
index 0000000..91d95b6
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/GeographicFeatureTest.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.definitions.nodes.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.nodes.GeographicFeature;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Geographic Feature</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class GeographicFeatureTest extends TestCase {
+	/**
+	 * The fixture for this Geographic Feature test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GeographicFeature fixture = null;
+
+	/**
+	 * Constructs a new Geographic Feature test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public GeographicFeatureTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Geographic Feature test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(GeographicFeature fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Geographic Feature test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected GeographicFeature getFixture() {
+		return fixture;
+	}
+
+} // GeographicFeatureTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodeTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodeTest.java
new file mode 100644
index 0000000..85c45ec
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodeTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.definitions.nodes.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Node</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class NodeTest extends TestCase {
+
+	/**
+	 * The fixture for this Node test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Node fixture = null;
+
+	/**
+	 * Constructs a new Node test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Node test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Node fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Node test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Node getFixture() {
+		return fixture;
+	}
+
+} //NodeTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodesTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodesTests.java
new file mode 100644
index 0000000..e384a90
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/NodesTests.java
@@ -0,0 +1,52 @@
+package org.eclipse.stem.definitions.nodes.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>nodes</b></em>'
+ * package. <!-- end-user-doc -->
+ * @generated
+ */
+public class NodesTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new NodesTests("nodes Tests"); //$NON-NLS-1$
+		suite.addTestSuite(RegionTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NodesTests(String name) {
+		super(name);
+	}
+
+} // NodesTests
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/RegionTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/RegionTest.java
new file mode 100644
index 0000000..c868ad0
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/nodes/tests/RegionTest.java
@@ -0,0 +1,96 @@
+package org.eclipse.stem.definitions.nodes.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.tests.PopulationLabelTest;
+import org.eclipse.stem.definitions.nodes.NodesFactory;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Region</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+@SuppressWarnings("all")
+public class RegionTest extends GeographicFeatureTest {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(RegionTest.class);
+	}
+
+	/**
+	 * Constructs a new Region test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public RegionTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Region test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected Region getFixture() {
+		return (Region)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return a region node with a population label
+	 */
+	public static Region createFixture() {
+		final Region retValue = NodesFactory.eINSTANCE.createRegion();
+		final PopulationLabel populationLabel = PopulationLabelTest
+				.createFixture();
+		retValue.getLabels().add(populationLabel);
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test that the fixture is sane.
+	 */
+	public void testFixtureSanity() {
+		final Region fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+} // RegionTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/CategorizedTypeTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/CategorizedTypeTest.java
new file mode 100644
index 0000000..5a31fdd
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/CategorizedTypeTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.definitions.types.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.types.CategorizedType;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Categorized Type</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class CategorizedTypeTest extends TestCase {
+
+	/**
+	 * The fixture for this Categorized Type test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CategorizedType fixture = null;
+
+	/**
+	 * Constructs a new Categorized Type test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CategorizedTypeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Categorized Type test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(CategorizedType fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Categorized Type test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CategorizedType getFixture() {
+		return fixture;
+	}
+
+} //CategorizedTypeTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/RateTest.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/RateTest.java
new file mode 100644
index 0000000..ff09344
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/RateTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.definitions.types.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.types.Rate;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Rate</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class RateTest extends TestCase {
+
+	/**
+	 * The fixture for this Rate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Rate fixture = null;
+
+	/**
+	 * Constructs a new Rate test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Rate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Rate fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Rate test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Rate getFixture() {
+		return fixture;
+	}
+
+} //RateTest
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesExample.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesExample.java
new file mode 100644
index 0000000..91f436d
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesExample.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.definitions.types.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.util.Diagnostician;
+
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+import org.eclipse.stem.definitions.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A sample utility for the '<em><b>types</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesExample {
+	/**
+	 * <!-- begin-user-doc -->
+	 * Load all the argument file paths or URIs as instances of the model.
+	 * <!-- end-user-doc -->
+	 * @param args the file paths or URIs.
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		// Create a resource set to hold the resources.
+		//
+		ResourceSet resourceSet = new ResourceSetImpl();
+		
+		// Register the appropriate resource factory to handle all file extensions.
+		//
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
+			(Resource.Factory.Registry.DEFAULT_EXTENSION, 
+			 new XMIResourceFactoryImpl());
+
+		// Register the package to ensure it is available during loading.
+		//
+		resourceSet.getPackageRegistry().put
+			(TypesPackage.eNS_URI, 
+			 TypesPackage.eINSTANCE);
+        
+		// If there are no arguments, emit an appropriate usage message.
+		//
+		if (args.length == 0) {
+			System.out.println("Enter a list of file paths or URIs");
+		}
+		else {
+			// Iterate over all the arguments.
+			//
+			for (int i = 0; i < args.length; ++i) {
+				// Construct the URI for the instance file.
+				// The argument is treated as a file path only if it denotes an existing file.
+				// Otherwise, it's directly treated as a URL.
+				//
+				File file = new File(args[i]);
+				URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[0]);
+
+				try {
+					// Demand load resource for this file.
+					//
+					Resource resource = resourceSet.getResource(uri, true);
+					System.out.println("Loaded " + uri); //$NON-NLS-1$
+
+					// Validate the contents of the loaded resource.
+					//
+					for (EObject eObject : resource.getContents()) {
+						Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
+						if (diagnostic.getSeverity() != Diagnostic.OK) {
+							printDiagnostic(diagnostic, ""); //$NON-NLS-1$
+						}
+					}
+				}
+				catch (RuntimeException exception) {
+					System.out.println("Problem loading " + uri); //$NON-NLS-1$
+					exception.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * Prints diagnostics with indentation.
+	 * <!-- end-user-doc -->
+	 * @param diagnostic the diagnostic to print.
+	 * @param indent the indentation for printing.
+	 * @generated
+	 */
+	protected static void printDiagnostic(Diagnostic diagnostic, String indent) {
+		System.out.print(indent);
+		System.out.println(diagnostic.getMessage());
+		for (Diagnostic child : diagnostic.getChildren()) {
+			printDiagnostic(child, indent + "  "); //$NON-NLS-1$
+		}
+	}
+
+} //TypesExample
diff --git a/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesTests.java b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesTests.java
new file mode 100644
index 0000000..a5c2835
--- /dev/null
+++ b/org.eclipse.stem.tests.definitions/src/org/eclipse/stem/definitions/types/tests/TypesTests.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.definitions.types.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>types</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TypesTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new TypesTests("types Tests"); //$NON-NLS-1$
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypesTests(String name) {
+		super(name);
+	}
+
+} //TypesTests
diff --git a/org.eclipse.stem.tests.diseasemodels.example/.classpath b/org.eclipse.stem.tests.diseasemodels.example/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.diseasemodels.example/.project b/org.eclipse.stem.tests.diseasemodels.example/.project
new file mode 100644
index 0000000..589ab99
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.diseasemodels.example</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..88007c6
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,78 @@
+#Tue Sep 23 09:36:18 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.diseasemodels.example/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.diseasemodels.example/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..41491aa
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.example.tests; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.example.tests
+Require-Bundle: org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.diseasemodels.example,
+ org.eclipse.stem.tests.diseasemodels,
+ org.junit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.tests.diseasemodels.example/build.properties b/org.eclipse.stem.tests.diseasemodels.example/build.properties
new file mode 100644
index 0000000..7b5f40a
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/build.properties
@@ -0,0 +1,13 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               notice.html,\
+               epl-v10.html,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.diseasemodels.example/epl-v10.html b/org.eclipse.stem.tests.diseasemodels.example/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.diseasemodels.example/notice.html b/org.eclipse.stem.tests.diseasemodels.example/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.diseasemodels.example/plugin.properties b/org.eclipse.stem.tests.diseasemodels.example/plugin.properties
new file mode 100644
index 0000000..dacb934
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/plugin.properties
@@ -0,0 +1,25 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Example Disease Model Test Suite
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleAllTests.java b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleAllTests.java
new file mode 100644
index 0000000..27f6007
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleAllTests.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.diseasemodels.example.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Experimental</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExampleAllTests("Example Tests"); //$NON-NLS-1$
+		suite.addTest(ExampleTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleAllTests(String name) {
+		super(name);
+	}
+
+} //ExampleAllTests
diff --git a/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleDiseaseModelTest.java
new file mode 100644
index 0000000..ad37012
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleDiseaseModelTest.java
@@ -0,0 +1,262 @@
+package org.eclipse.stem.diseasemodels.example.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel;
+import org.eclipse.stem.diseasemodels.example.ExampleFactory;
+import org.eclipse.stem.diseasemodels.example.impl.ExampleDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Example Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleDiseaseModelTest extends TestCase {
+
+	public static final long RANDOM_SEED = 1l;
+	public static final double TEST_GAIN = 0.01d;
+	
+	
+	/**
+	 * The fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExampleDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ExampleDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' operation.
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments()
+	 * @generated NOT
+	 */
+	@SuppressWarnings("synthetic-access")
+	public void testModelSpecificAdjustments(){
+		ExampleDiseaseModelTesterImpl experimentalDiseaseModel = new ExampleDiseaseModelTesterImpl();
+		SEIRLabelValueImpl currentSEIR = new SEIRLabelValueImpl(1000d, 50d, 40d, 30d, 20d, 10d);
+		doTest(experimentalDiseaseModel, currentSEIR);
+	}
+	
+	
+	/**
+	 * Do the test
+	 * @param experimentalDiseaseModel
+	 * @param currentSEIR
+	 * @param seirAdditions
+	 * @param seirDeaths
+	 * @generated NOT
+	 */
+	private void doTest(ExampleDiseaseModelTesterImpl experimentalDiseaseModel,
+			SEIRLabelValueImpl currentSEIR) {
+		
+		SEIRLabelValueImpl oldVal = (SEIRLabelValueImpl)EcoreUtil.copy(currentSEIR);
+		
+		doCalculateModelSpecificAdjustments(currentSEIR, RANDOM_SEED, TEST_GAIN);
+
+		String state = getState(currentSEIR, oldVal);
+		
+		validateModelSpecificAdjustments(currentSEIR,
+				oldVal,
+				state);
+	}
+	
+
+	private void doCalculateModelSpecificAdjustments(
+			SEIRLabelValueImpl pCurrentSEIR,
+			long pRandomSeed, double pTestGain) {
+		
+		
+		final SEIRLabelValue currentSEIR = pCurrentSEIR;
+		Random random = new Random(pRandomSeed);
+		double Inoisy = currentSEIR.getI()* computeNoise(pTestGain, random);
+		currentSEIR.setI(Inoisy);
+		return;
+				
+				
+	}
+
+	private void validateModelSpecificAdjustments(SEIRLabelValueImpl currentSEIR,
+			SEIRLabelValueImpl oldSEIR,
+			String state) {
+		
+		try{
+			currentSEIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("newSeirAdditions is insane, state is: " + state, t);
+		}
+		try{
+			oldSEIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("newSeirDeaths is insane, state is: " + state, t);
+		}
+
+		
+		
+		assertTrue(String.format("currentSEIR has insane values %s", state), mySanityCheck(currentSEIR));
+		assertTrue(String.format("oldSEIR has insane values %s", state), mySanityCheck(oldSEIR));
+
+	}
+	
+	private boolean checkEqual(SEIRLabelValueImpl pCalculatedSeirAdditions,
+			SEIRLabelValueImpl pNewSeirAdditions) {
+		if((pCalculatedSeirAdditions.getDiseaseDeaths() != pNewSeirAdditions.getDiseaseDeaths()) ||
+				(pCalculatedSeirAdditions.getE() != pNewSeirAdditions.getE()) ||
+				(pCalculatedSeirAdditions.getI() != pNewSeirAdditions.getI()) ||
+				(pCalculatedSeirAdditions.getPopulationCount() != pNewSeirAdditions.getPopulationCount()) ||
+				(pCalculatedSeirAdditions.getR() != pNewSeirAdditions.getR()) ||
+				(pCalculatedSeirAdditions.getS() != pNewSeirAdditions.getS())){
+					return false;
+				}
+		return true;
+	}
+
+	private boolean mySanityCheck(SEIRLabelValueImpl pSeir) {
+		return assertValidDouble(pSeir.getE()) && 
+			assertValidDouble(pSeir.getI()) && 
+			assertValidDouble(pSeir.getR()) && 
+			assertValidDouble(pSeir.getS());
+		
+	}
+	
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+	
+
+	private boolean assertValidDouble(double pDouble) {
+		return !(Double.isNaN(pDouble) || Double.isInfinite(pDouble));
+	}
+	
+
+	private String getState(SEIRLabelValueImpl pCurrentSEIR,
+			SEIRLabelValueImpl oldSEIR) {
+		return String.format("\npresent state is: \nCurrentSEIR[%s]\n oldSEIR[%s]\n", 
+				pCurrentSEIR, oldSEIR);
+	}
+
+	
+	
+	/**
+	 * Sets the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(ExampleDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExampleDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ExampleFactory.eINSTANCE.createExampleDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	
+	/**
+	 * created just for testings since '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' is protected.
+	 * @author kaufman
+	 *
+	 */
+	private class ExampleDiseaseModelTesterImpl extends ExampleDiseaseModelImpl{
+
+		public void doModelSpecificAdjustments(
+				StandardDiseaseModelLabelValue pCurrentState,
+				long pRandomSeed, double pTestGain) {
+			setSeed(pRandomSeed);
+			setGain(pTestGain);
+			
+			//SEIRLabelValueImpl oldCurrentState = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pCurrentState);
+			//SEIRLabelValueImpl oldStateAdditions2 = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pStateAdditions2);
+			//SEIRLabelValueImpl oldStateDeaths2 = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pStateDeaths2);
+			
+			super.doModelSpecificAdjustments(pCurrentState);
+		}
+		
+	}// ExampleDiseaseModelTesterImpl  inner class
+	
+} //ExampleDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleTests.java b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleTests.java
new file mode 100644
index 0000000..9e98db4
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/tests/ExampleTests.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.diseasemodels.example.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>experimental</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExampleTests("example Tests"); //$NON-NLS-1$
+		suite.addTestSuite(ExampleDiseaseModelTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleTests(String name) {
+		super(name);
+	}
+
+} //ExampleTests
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/.classpath b/org.eclipse.stem.tests.diseasemodels.experimental/.classpath
new file mode 100644
index 0000000..4da07d1
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.eclipse.stem.tests.diseasemodels"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/.project b/org.eclipse.stem.tests.diseasemodels.experimental/.project
new file mode 100644
index 0000000..315508f
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.diseasemodels.experimental</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.diseasemodels.experimental/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6d1da29
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.diseasemodels.experimental.tests; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.experimental.tests
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.diseasemodels.experimental;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.junit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/build.properties b/org.eclipse.stem.tests.diseasemodels.experimental/build.properties
new file mode 100644
index 0000000..065e331
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/build.properties
@@ -0,0 +1,12 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/plugin.properties b/org.eclipse.stem.tests.diseasemodels.experimental/plugin.properties
new file mode 100644
index 0000000..0cf3051
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Experimental Disease Model Test Suite
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/plugin.xml b/org.eclipse.stem.tests.diseasemodels.experimental/plugin.xml
new file mode 100644
index 0000000..c494f96
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+</plugin>
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalAllTests.java b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalAllTests.java
new file mode 100644
index 0000000..fea991a
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalAllTests.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.diseasemodels.experimental.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Experimental</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param args 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return  the test suite
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExperimentalAllTests("Experimental Tests");
+		suite.addTest(ExperimentalTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name 
+	 * @generated
+	 */
+	public ExperimentalAllTests(String name) {
+		super(name);
+	}
+
+} //ExperimentalAllTests
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalExample.java b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalExample.java
new file mode 100644
index 0000000..2ba558d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalExample.java
@@ -0,0 +1,130 @@
+package org.eclipse.stem.diseasemodels.experimental.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.util.Diagnostician;
+
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalFactory;
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalPackage;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A sample utility for the '<em><b>experimental</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalExample {
+	/**
+	 * <!-- begin-user-doc -->
+	 * Load all the argument file paths or URIs as instances of the model.
+	 * <!-- end-user-doc -->
+	 * @param args the file paths or URIs.
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		// Create a resource set to hold the resources.
+		//
+		ResourceSet resourceSet = new ResourceSetImpl();
+		
+		// Register the appropriate resource factory to handle all file extentions.
+		//
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
+			(Resource.Factory.Registry.DEFAULT_EXTENSION, 
+			 new XMIResourceFactoryImpl());
+
+		// Register the package to ensure it is available during loading.
+		//
+		resourceSet.getPackageRegistry().put
+			(ExperimentalPackage.eNS_URI, 
+			 ExperimentalPackage.eINSTANCE);
+        
+		// If there are no arguments, emit an appropriate usage message.
+		//
+		if (args.length == 0) {
+			System.out.println("Enter a list of file paths or URIs that have content like this:");
+			try {
+				Resource resource = resourceSet.createResource(URI.createURI("http:///My.experimental"));
+				PercolationDiseaseModel root = ExperimentalFactory.eINSTANCE.createPercolationDiseaseModel();
+				resource.getContents().add(root);
+				resource.save(System.out, null);
+			}
+			catch (IOException exception) {
+				exception.printStackTrace();
+			}
+		}
+		else {
+			// Iterate over all the arguments.
+			//
+			for (int i = 0; i < args.length; ++i) {
+				// Construct the URI for the instance file.
+				// The argument is treated as a file path only if it denotes an existing file.
+				// Otherwise, it's directly treated as a URL.
+				//
+				File file = new File(args[i]);
+				URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[0]);
+
+				try {
+					// Demand load resource for this file.
+					//
+					Resource resource = resourceSet.getResource(uri, true);
+					System.out.println("Loaded " + uri);
+
+					// Validate the contents of the loaded resource.
+					//
+					for (EObject eObject : resource.getContents()) {
+						Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
+						if (diagnostic.getSeverity() != Diagnostic.OK) {
+							printDiagnostic(diagnostic, "");
+						}
+					}
+				}
+				catch (RuntimeException exception) {
+					System.out.println("Problem loading " + uri);
+					exception.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * Prints diagnostics with indentation.
+	 * <!-- end-user-doc -->
+	 * @param diagnostic the diagnostic to print.
+	 * @param indent the indentation for printing.
+	 * @generated
+	 */
+	protected static void printDiagnostic(Diagnostic diagnostic, String indent) {
+		System.out.print(indent);
+		System.out.println(diagnostic.getMessage());
+		for (Diagnostic child : diagnostic.getChildren()) {
+			printDiagnostic(child, indent + "  ");
+		}
+	}
+
+} //ExperimentalExample
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalTests.java b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalTests.java
new file mode 100644
index 0000000..5f5ad51
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/ExperimentalTests.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.diseasemodels.experimental.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>experimental</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentalTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param args 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return Test Suite
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExperimentalTests("experimental Tests");
+		suite.addTestSuite(PercolationDiseaseModelTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name 
+	 * @generated
+	 */
+	public ExperimentalTests(String name) {
+		super(name);
+	}
+
+} //ExperimentalTests
diff --git a/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/PercolationDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/PercolationDiseaseModelTest.java
new file mode 100644
index 0000000..44b1265
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.experimental/src/org/eclipse/stem/diseasemodels/experimental/tests/PercolationDiseaseModelTest.java
@@ -0,0 +1,324 @@
+package org.eclipse.stem.diseasemodels.experimental.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.experimental.ExperimentalFactory;
+import org.eclipse.stem.diseasemodels.experimental.PercolationDiseaseModel;
+import org.eclipse.stem.diseasemodels.experimental.impl.PercolationDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil;
+
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Percolation Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PercolationDiseaseModelTest extends TestCase {
+
+	/**
+	 * Seed for test
+	 */
+	public static final long RANDOM_SEED = 1l;
+	
+	/**
+	 * default gain factor
+	 */
+	public static final double TEST_GAIN = 0.01d;
+	
+	
+	/**
+	 * The fixture for this Percolation Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PercolationDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param args 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PercolationDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Percolation Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name 
+	 * @generated
+	 */
+	public PercolationDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Tests the modelSpecificAdjustments operation.
+	 * 
+	 * @generated NOT
+	 */
+	public void testModelSpecificAdjustments(){
+		PercolationDiseaseModelTesterImpl percolationDiseaseModel = new PercolationDiseaseModelTesterImpl();
+		SEIRLabelValueImpl currentSEIR = new SEIRLabelValueImpl(1000d, 50d, 40d, 30d, 20d, 10d);
+		SEIRLabelValueImpl seirAdditions = new SEIRLabelValueImpl(10d, 1d, 2d, 3d, 3d, 1d);
+		SEIRLabelValueImpl seirDeaths = new SEIRLabelValueImpl(10d, 1d, 2d, 3d, 3d, 1d);
+		doTest(percolationDiseaseModel, currentSEIR, seirAdditions, seirDeaths);
+	}
+	
+	
+	/**
+	 * Do the test
+	 * @param percolationDiseaseModel
+	 * @param currentSEIR
+	 * @param seirAdditions
+	 * @param seirDeaths
+	 * @generated NOT
+	 */
+	private void doTest(PercolationDiseaseModelTesterImpl percolationDiseaseModel,
+			SEIRLabelValueImpl currentSEIR, SEIRLabelValueImpl seirAdditions,
+			SEIRLabelValueImpl seirDeaths) {
+		SEIRLabelValueImpl newSeirAdditions = SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl(seirAdditions);
+		SEIRLabelValueImpl newSeirDeaths = SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl(seirDeaths);
+		
+		percolationDiseaseModel.doModelSpecificAdjustments(currentSEIR, RANDOM_SEED, TEST_GAIN);
+		
+		SEIRLabelValueImpl calculatedSeirAdditions = SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl(seirAdditions);
+		SEIRLabelValueImpl calculatedSeirDeaths = SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl(seirDeaths);
+		
+		doCalculateModelSpecificAdjustments(currentSEIR, calculatedSeirAdditions, calculatedSeirDeaths, RANDOM_SEED, TEST_GAIN);
+
+		String state = getState(currentSEIR, seirAdditions, seirDeaths, newSeirAdditions, newSeirDeaths, calculatedSeirAdditions, calculatedSeirDeaths);
+		
+		validateModelSpecificAdjustments(newSeirAdditions,
+				newSeirDeaths,
+				calculatedSeirAdditions,
+				calculatedSeirDeaths,
+				state);
+	}
+	
+
+	private void doCalculateModelSpecificAdjustments(
+			SEIRLabelValueImpl pCurrentSEIR,
+			SEIRLabelValueImpl pCalculatedSeirAdditions,
+			SEIRLabelValueImpl pCalculatedSeirDeaths, long pRandomSeed, double pTestGain) {
+		
+		final SEIRLabelValue currentSEIR = pCurrentSEIR;
+		final SEIRLabelValue seirAdditions = pCalculatedSeirAdditions;
+		final SEIRLabelValue seirDeaths = pCalculatedSeirDeaths;
+		
+		
+		// The noise is a multiplier of (1+/-x) with x small.
+		// Compute the transitions
+		
+		Random random = new Random(pRandomSeed);
+		
+		seirAdditions.setS(Math.min(currentSEIR.getR(), (seirAdditions.getS() * computeNoise(pTestGain, random))));
+	
+		seirAdditions.setE(Math.min(currentSEIR.getS(), (seirAdditions.getE() * computeNoise(pTestGain, random))));
+	
+		seirAdditions.setR(Math.min(currentSEIR.getI(), (seirAdditions.getR() * computeNoise(pTestGain, random))));
+       
+		
+		
+		
+		
+		// Infectious case is more complicated
+		double inoisy = seirAdditions.getI()* computeNoise(pTestGain, random);
+		double deltaInoise = inoisy;
+		if (deltaInoise > currentSEIR.getE()) {
+			double rescale = currentSEIR.getE() / deltaInoise;
+			inoisy *= rescale;
+		}
+		
+		// set the change in infectious recovered
+		seirAdditions.setI(inoisy);
+		
+		//////////////////////////
+
+        /////////////////////////
+		// now handle the deaths
+		seirDeaths.setS(Math.min(currentSEIR.getS() , (seirDeaths.getS() * computeNoise(pTestGain, random))));
+
+		seirDeaths.setE(Math.min(currentSEIR.getE() , (seirDeaths.getE() * computeNoise(pTestGain, random))));
+        
+		seirDeaths.setR(Math.min(currentSEIR.getR() , (seirDeaths.getR() * computeNoise(pTestGain, random))));
+		
+				
+	}
+
+	private void validateModelSpecificAdjustments(SEIRLabelValueImpl newSeirAdditions,
+			SEIRLabelValueImpl newSeirDeaths,
+			SEIRLabelValueImpl calculatedSeirAdditions,
+			SEIRLabelValueImpl calculatedSeirDeaths,
+			String state) {
+
+		
+		try{
+			newSeirAdditions.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("newSeirAdditions is insane, state is: " + state, t);
+		}
+		try{
+			newSeirDeaths.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("newSeirDeaths is insane, state is: " + state, t);
+		}
+
+		
+		
+		assertTrue(String.format("newSeirAdditions has insane values %s", state), mySanityCheck(newSeirAdditions));
+		assertTrue(String.format("newSeirDeaths has insane values %s", state), mySanityCheck(newSeirDeaths));
+
+		assertTrue(String.format("newSeirAdditions[%s] != calculatedSeirAdditions[%s]", newSeirAdditions, calculatedSeirAdditions), checkEqual(calculatedSeirAdditions, newSeirAdditions));
+		assertTrue(String.format("newSeirDeaths[%s] != calculatedSeirDeaths[%s]", newSeirDeaths, calculatedSeirDeaths), checkEqual(calculatedSeirDeaths, newSeirDeaths));
+		
+	}
+	
+	private boolean checkEqual(SEIRLabelValueImpl pCalculatedSeirAdditions,
+			SEIRLabelValueImpl pNewSeirAdditions) {
+		if((pCalculatedSeirAdditions.getDiseaseDeaths() != pNewSeirAdditions.getDiseaseDeaths()) ||
+				(pCalculatedSeirAdditions.getE() != pNewSeirAdditions.getE()) ||
+				(pCalculatedSeirAdditions.getI() != pNewSeirAdditions.getI()) ||
+				(pCalculatedSeirAdditions.getPopulationCount() != pNewSeirAdditions.getPopulationCount()) ||
+				(pCalculatedSeirAdditions.getR() != pNewSeirAdditions.getR()) ||
+				(pCalculatedSeirAdditions.getS() != pNewSeirAdditions.getS())){
+					return false;
+				}
+		return true;
+	}
+
+	private boolean mySanityCheck(SEIRLabelValueImpl pSeir) {
+		return assertValidDouble(pSeir.getE()) && 
+			assertValidDouble(pSeir.getI()) && 
+			assertValidDouble(pSeir.getR()) && 
+			assertValidDouble(pSeir.getS());
+		
+	}
+	
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+	
+
+	private boolean assertValidDouble(double pDouble) {
+		return !(Double.isNaN(pDouble) || Double.isInfinite(pDouble));
+	}
+	
+
+	private String getState(SEIRLabelValueImpl pCurrentSEIR,
+			SEIRLabelValueImpl pSeirAdditions, SEIRLabelValueImpl pSeirDeaths,
+			SEIRLabelValueImpl pNewSeirAdditions,
+			SEIRLabelValueImpl pNewSeirDeaths, SEIRLabelValueImpl pCalculatedSeirAdditions, SEIRLabelValueImpl pCalculatedSeirDeaths) {
+		return String.format("\npresent state is: \nCurrentSEIR[%s]\n SeirAdditions[%s]\n SeirDeaths[%s]\n NewSeirAdditions[%s]\n NewSeirDeaths[%s]\n CalculatedSeirAdditions[%s]\n CalculatedSeirDeaths[%s]", 
+				pCurrentSEIR, pSeirAdditions, pSeirDeaths,pNewSeirAdditions,pNewSeirDeaths, pCalculatedSeirAdditions, pCalculatedSeirDeaths);
+	}
+
+	
+	
+	/**
+	 * Sets the fixture for this Percolation Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PercolationDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Percolation Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PercolationDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ExperimentalFactory.eINSTANCE.createPercolationDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	
+	/**
+	 * created just for testings since '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' is protected.
+	 * @author kaufman
+	 *
+	 */
+	private class PercolationDiseaseModelTesterImpl extends PercolationDiseaseModelImpl{
+
+		public void doModelSpecificAdjustments(
+				StandardDiseaseModelLabelValue pCurrentState,
+				long pRandomSeed, double pTestGain) {
+			// TODO Auto-generated method stub
+			setSeed(pRandomSeed);
+			setGain(pTestGain);
+			
+			//SEIRLabelValueImpl oldCurrentState = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pCurrentState);
+			//SEIRLabelValueImpl oldStateAdditions2 = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pStateAdditions2);
+			//SEIRLabelValueImpl oldStateDeaths2 = org.eclipse.stem.diseasemodels.standard.tests.SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pStateDeaths2);
+			
+			super.doModelSpecificAdjustments(pCurrentState);
+		}
+		
+	}// PercolationDiseaseModelTesterImpl  inner class
+	
+} //PercolationDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/.classpath b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/.project b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.project
new file mode 100644
index 0000000..a30b708
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.diseasemodels.externaldatasource</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..239715a
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,78 @@
+#Tue Sep 23 09:36:27 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..30b8ec0
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.externaldatasource.tests
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.junit;visibility:=reexport,
+ org.eclipse.stem.diseasemodels.externaldatasource,
+ org.eclipse.stem.util.loggers,
+ org.eclipse.stem.jobs
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/build.properties b/org.eclipse.stem.tests.diseasemodels.externaldatasource/build.properties
new file mode 100644
index 0000000..6583758
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/build.properties
@@ -0,0 +1,12 @@
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2008/03/18 04:50:28 jkaufman Exp $
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.properties b/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.properties
new file mode 100644
index 0000000..870a38b
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.properties
@@ -0,0 +1,25 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM External Data Source Disease Model Test Suite
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.xml b/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.xml
new file mode 100644
index 0000000..add6435
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2008/03/18 04:50:28 jkaufman Exp $
+-->
+
+<plugin>
+</plugin>
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceAllTests.java b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceAllTests.java
new file mode 100644
index 0000000..26e82b7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceAllTests.java
@@ -0,0 +1,56 @@
+// ExternalDataSourceAllTests.java
+package org.eclipse.stem.diseasemodels.externaldatasource.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>ExternalDataSource</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceAllTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExternalDataSourceAllTests("ExternalDataSource Tests");
+		suite.addTest(ExternalDataSourceTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceAllTests(String name) {
+		super(name);
+	}
+
+} //ExternalDataSourceAllTests
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceDiseaseModelTest.java
new file mode 100644
index 0000000..cf1c816
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceDiseaseModelTest.java
@@ -0,0 +1,169 @@
+// ExternalDataSourceDiseaseModelTest.java
+package org.eclipse.stem.diseasemodels.externaldatasource.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.impl.ExternalDataSourceDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceDiseaseModelTest extends TestCase {
+	
+	
+
+	
+	private static final String sep = File.separator;
+	
+	/**
+	 * This is the Default folder for Import files.
+	 * The User can change this but by default, and for testing,
+	 * data will be in sub-folders of the disease model plug-in runtime preferences
+	 */
+	private static final String TEST_SUBDIR = "testing";
+	
+	/**
+	 * This is a test scenario name.
+	 */
+	// private static final String TEST_SCENARIO = "testscenario";
+	
+	/**
+	 * This is a test location name.
+	*/
+	private static final String TEST_LOCATION = "testlocation";
+	
+	/**
+	 * The fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ExternalDataSourceDiseaseModelTest.class);
+	}
+	
+	/**
+	 * Test the logging
+	 * @generated NOT
+	 */
+	public void testLogging() {
+		// test the construction
+
+		ExternalDataSourceDiseaseModelImpl externalDataSourceDiseaseModel = new ExternalDataSourceDiseaseModelImpl();
+		
+		// test the logging
+		doTest();
+	}
+	
+	/**
+	 * Test the logging (not complete yet)
+	 * @generated NOT
+	 */
+	public void doTest() {
+		
+		final String dir = ExternalDataSourceDiseaseModel.DEFAULT_DIR+TEST_SUBDIR+sep;
+		
+		try {
+			File file = new File(dir);
+			if(!file.exists()) {
+				 boolean success = (new File(dir)).mkdirs();
+			}
+			
+		} catch(Exception e) {
+			Activator.logError("Error creating Directory ["+dir+"] for JUNIT testing", e);
+		}
+	
+	}
+	
+
+	/**
+	 * Constructs a new Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceDiseaseModelTest(String name) {
+		super(name);
+	}
+	
+
+	/**
+	 * Constructs a new Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public ExternalDataSourceDiseaseModelTest() {
+		super("test");
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(ExternalDataSourceDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ExternalDataSourceFactory.eINSTANCE.createExternalDataSourceDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //ExternalDataSourceDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceExample.java b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceExample.java
new file mode 100644
index 0000000..3d205c9
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceExample.java
@@ -0,0 +1,125 @@
+// ExternalDataSourceExample.java
+package org.eclipse.stem.diseasemodels.externaldatasource.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A sample utility for the '<em><b>externaldatasource</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceExample {
+	/**
+	 * <!-- begin-user-doc -->
+	 * Load all the argument file paths or URIs as instances of the model.
+	 * <!-- end-user-doc -->
+	 * @param args the file paths or URIs.
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		// Create a resource set to hold the resources.
+		//
+		ResourceSet resourceSet = new ResourceSetImpl();
+		
+		// Register the appropriate resource factory to handle all file extensions.
+		//
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
+			(Resource.Factory.Registry.DEFAULT_EXTENSION, 
+			 new XMIResourceFactoryImpl());
+
+		// Register the package to ensure it is available during loading.
+		//
+		resourceSet.getPackageRegistry().put
+			(ExternalDataSourcePackage.eNS_URI, 
+			 ExternalDataSourcePackage.eINSTANCE);
+        
+		// If there are no arguments, emit an appropriate usage message.
+		//
+		if (args.length == 0) {
+			System.out.println("Enter a list of file paths or URIs that have content like this:");
+			try {
+				Resource resource = resourceSet.createResource(URI.createURI("http:///My.externaldatasource"));
+				ExternalDataSourceDiseaseModel root = ExternalDataSourceFactory.eINSTANCE.createExternalDataSourceDiseaseModel();
+				resource.getContents().add(root);
+				resource.save(System.out, null);
+			}
+			catch (IOException exception) {
+				exception.printStackTrace();
+			}
+		}
+		else {
+			// Iterate over all the arguments.
+			//
+			for (int i = 0; i < args.length; ++i) {
+				// Construct the URI for the instance file.
+				// The argument is treated as a file path only if it denotes an existing file.
+				// Otherwise, it's directly treated as a URL.
+				//
+				File file = new File(args[i]);
+				URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[0]);
+
+				try {
+					// Demand load resource for this file.
+					//
+					Resource resource = resourceSet.getResource(uri, true);
+					System.out.println("Loaded " + uri);
+
+					// Validate the contents of the loaded resource.
+					//
+					for (EObject eObject : resource.getContents()) {
+						Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
+						if (diagnostic.getSeverity() != Diagnostic.OK) {
+							printDiagnostic(diagnostic, "");
+						}
+					}
+				}
+				catch (RuntimeException exception) {
+					System.out.println("Problem loading " + uri);
+					exception.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * Prints diagnostics with indentation.
+	 * <!-- end-user-doc -->
+	 * @param diagnostic the diagnostic to print.
+	 * @param indent the indentation for printing.
+	 * @generated
+	 */
+	protected static void printDiagnostic(Diagnostic diagnostic, String indent) {
+		System.out.print(indent);
+		System.out.println(diagnostic.getMessage());
+		for (Diagnostic child : diagnostic.getChildren()) {
+			printDiagnostic(child, indent + "  ");
+		}
+	}
+
+} //ExternalDataSourceExample
diff --git a/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceTests.java b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceTests.java
new file mode 100644
index 0000000..07f043d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/tests/ExternalDataSourceTests.java
@@ -0,0 +1,56 @@
+// ExternalDataSourceTests.java
+package org.eclipse.stem.diseasemodels.externaldatasource.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>externaldatasource</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ExternalDataSourceTests("externaldatasource Tests");
+		suite.addTestSuite(ExternalDataSourceDiseaseModelTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceTests(String name) {
+		super(name);
+	}
+
+} //ExternalDataSourceTests
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/.classpath b/org.eclipse.stem.tests.diseasemodels.forcing/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/.project b/org.eclipse.stem.tests.diseasemodels.forcing/.project
new file mode 100644
index 0000000..47546ce
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.diseasemodels.forcing</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..7a86bf9
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:58:48 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.diseasemodels.forcing/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..39f4928
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.diseasemodels.forcing;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.forcing.tests
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.diseasemodels.forcing;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.junit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/build.properties b/org.eclipse.stem.tests.diseasemodels.forcing/build.properties
new file mode 100644
index 0000000..6051fa9
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/build.properties
@@ -0,0 +1,12 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2009/03/13 00:06:48 sedlund Exp $
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/plugin.properties b/org.eclipse.stem.tests.diseasemodels.forcing/plugin.properties
new file mode 100644
index 0000000..b6f2539
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/plugin.properties
@@ -0,0 +1,13 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+pluginName = STEM Forcing Disease Model Test Suite
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingAllTests.java b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingAllTests.java
new file mode 100644
index 0000000..04d6b78
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingAllTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.diseasemodels.forcing.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Forcing</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingAllTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ForcingAllTests("Forcing Tests"); //$NON-NLS-1$
+		suite.addTest(ForcingTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingAllTests(String name) {
+		super(name);
+	}
+
+} //ForcingAllTests
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingDiseaseModelTest.java
new file mode 100644
index 0000000..145fefc
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingDiseaseModelTest.java
@@ -0,0 +1,128 @@
+package org.eclipse.stem.diseasemodels.forcing.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.ForcingFactory;
+import org.eclipse.stem.diseasemodels.forcing.impl.ForcingDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardFactoryImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ForcingDiseaseModelTest extends TestCase {
+
+	/**
+	 * The fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ForcingDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ForcingDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	
+	/**
+	 * Sets the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(ForcingDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ForcingDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ForcingFactory.eINSTANCE.createForcingDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	public void testForcingDiseaseModel(){
+		ForcingDiseaseModelTesterImpl forcingDiseaseModel = new ForcingDiseaseModelTesterImpl();
+		SIRLabel label = StandardFactoryImpl.eINSTANCE.createSIRLabel();
+		SIRLabelValue labelVal = label.getProbeValue();
+		labelVal.setS(1000d);
+		labelVal.setI(50d);
+		labelVal.setR(40d);
+		SIRLabelValueImpl retVal = new SIRLabelValueImpl(0d, 0d, 0d, 0d);
+		STEMTime time = ModelFactory.eINSTANCE.createSTEMTime();
+
+		forcingDiseaseModel.computeDiseaseDeltas(time, labelVal, label, 86400000, retVal);
+		assert(retVal.sane());
+		
+	}
+	
+	/**
+	 *
+	 */
+	private class ForcingDiseaseModelTesterImpl extends ForcingDiseaseModelImpl{
+
+	}// ForcingDiseaseModelTesterImpl  inner class
+	
+} //ForcingDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingTests.java b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingTests.java
new file mode 100644
index 0000000..07380fa
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/ForcingTests.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.diseasemodels.forcing.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>forcing</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new ForcingTests("forcing Tests"); //$NON-NLS-1$
+		suite.addTestSuite(ForcingDiseaseModelTest.class);
+		suite.addTestSuite(GaussianForcingDiseaseModelTest.class);
+		suite.addTestSuite(Gaussian2ForcingDiseaseModelTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingTests(String name) {
+		super(name);
+	}
+
+} //ForcingTests
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/Gaussian2ForcingDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/Gaussian2ForcingDiseaseModelTest.java
new file mode 100644
index 0000000..3ad168f
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/Gaussian2ForcingDiseaseModelTest.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.diseasemodels.forcing.tests;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.forcing.ForcingFactory;
+import org.eclipse.stem.diseasemodels.forcing.Gaussian2ForcingDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Gaussian2 Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class Gaussian2ForcingDiseaseModelTest extends TestCase {
+
+	/**
+	 * The fixture for this Gaussian2 Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Gaussian2ForcingDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(Gaussian2ForcingDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Gaussian2 Forcing Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Gaussian2ForcingDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Gaussian2 Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Gaussian2ForcingDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Gaussian2 Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Gaussian2ForcingDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ForcingFactory.eINSTANCE.createGaussian2ForcingDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //Gaussian2ForcingDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/GaussianForcingDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/GaussianForcingDiseaseModelTest.java
new file mode 100644
index 0000000..9584bb2
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/tests/GaussianForcingDiseaseModelTest.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.diseasemodels.forcing.tests;
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.forcing.ForcingFactory;
+import org.eclipse.stem.diseasemodels.forcing.GaussianForcingDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Gaussian Forcing Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GaussianForcingDiseaseModelTest extends TestCase {
+
+	/**
+	 * The fixture for this Gaussian Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GaussianForcingDiseaseModel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(GaussianForcingDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Gaussian Forcing Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GaussianForcingDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Gaussian Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(GaussianForcingDiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Gaussian Forcing Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GaussianForcingDiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(ForcingFactory.eINSTANCE.createGaussianForcingDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //GaussianForcingDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/.classpath b/org.eclipse.stem.tests.diseasemodels/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.diseasemodels/.project b/org.eclipse.stem.tests.diseasemodels/.project
new file mode 100644
index 0000000..6486545
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.diseasemodels</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a8c0455
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:46:46 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..ddfbf5d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Jul 25 14:04:11 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.tests.diseasemodels/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.diseasemodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..459ebd4
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.diseasemodels;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.diseasemodels.standard.tests,
+ org.eclipse.stem.tests.diseasemodels,
+ org.eclipse.stem.tests.diseasemodels.scenarios,
+ org.eclipse.stem.tests.diseasemodels.standard.provider.tests
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.tests.core,
+ org.eclipse.stem.tests.definitions,
+ org.eclipse.stem.tests.util
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.diseasemodels/build.properties b/org.eclipse.stem.tests.diseasemodels/build.properties
new file mode 100644
index 0000000..b930da0
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/build.properties
@@ -0,0 +1,14 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               temp/,\
+               notice.html,\
+               epl-v10.html,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.diseasemodels/epl-v10.html b/org.eclipse.stem.tests.diseasemodels/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.diseasemodels/notice.html b/org.eclipse.stem.tests.diseasemodels/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.diseasemodels/plugin.properties b/org.eclipse.stem.tests.diseasemodels/plugin.properties
new file mode 100644
index 0000000..df711f8
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/plugin.properties
@@ -0,0 +1,40 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Disease Models Test Suite
+providerName = Eclipse.org
+
+# Dublin core
+dc_creator_daford = daford
+dc_seri1x1_desc = Deterministic SEIR disease model on a single node
+dc_seri1x1_title = SEIR 1 x 1
+dc_seri1x2_desc = Deterministic SEIR disease model on a 1x2 lattice graph
+dc_seri1x2_title = SEIR 1 x 2
+dc_seri3x3_desc = Standard SEIR disease model on a 3x3 lattice graph
+dc_seri3x3_title = SEIR 3 x 3
+dc_seri100x100_desc = Deterministic SEIR disease model on a 100x100 latice graph
+dc_seri100x100_title = SEIR 100 x 100
+
+dm_cat = Disease Models
+standard_cat = Standard
+world_cat = World
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingDiseaseModelStateTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingDiseaseModelStateTest.java
new file mode 100644
index 0000000..e8a57cc
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingDiseaseModelStateTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Aggregating Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AggregatingDiseaseModelStateTest extends DiseaseModelStateTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AggregatingDiseaseModelStateTest.class);
+	}
+
+	/**
+	 * Constructs a new Aggregating Disease Model State test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingDiseaseModelStateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Aggregating Disease Model State test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected AggregatingDiseaseModelState getFixture() {
+		return (AggregatingDiseaseModelState)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(StandardFactory.eINSTANCE.createAggregatingDiseaseModelState());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //AggregatingDiseaseModelStateTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSEIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSEIRDiseaseModelTest.java
new file mode 100644
index 0000000..ab57379
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSEIRDiseaseModelTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Aggregating SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AggregatingSEIRDiseaseModelTest extends AggregatingSIRDiseaseModelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AggregatingSEIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Aggregating SEIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSEIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Aggregating SEIR Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected AggregatingSEIRDiseaseModel getFixture() {
+		return (AggregatingSEIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(StandardFactory.eINSTANCE.createAggregatingSEIRDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //AggregatingSEIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIDiseaseModelTest.java
new file mode 100644
index 0000000..78e3f3f
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIDiseaseModelTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Aggregating SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AggregatingSIDiseaseModelTest extends SITest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AggregatingSIDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Aggregating SI Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Aggregating SI Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected AggregatingSIDiseaseModel getFixture() {
+		return (AggregatingSIDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(StandardFactory.eINSTANCE.createAggregatingSIDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //AggregatingSIDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIRDiseaseModelTest.java
new file mode 100644
index 0000000..4f9bd0e7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/AggregatingSIRDiseaseModelTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Aggregating SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class AggregatingSIRDiseaseModelTest extends AggregatingSIDiseaseModelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(AggregatingSIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Aggregating SIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AggregatingSIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Aggregating SIR Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected AggregatingSIRDiseaseModel getFixture() {
+		return (AggregatingSIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(StandardFactory.eINSTANCE.createAggregatingSIRDiseaseModel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} // AggregatingSIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRDiseaseModelTest.java
new file mode 100644
index 0000000..303a410
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRDiseaseModelTest.java
@@ -0,0 +1,115 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSEIRDiseaseModel;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.impl.DeterministicSEIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Deterministic SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DeterministicSEIRDiseaseModelTest extends SEIRTest {
+	private static final String TEST_DETERMINISTIC_SEIR_DISEASE_NAME = "Deterministic SEIR Disease Model";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DeterministicSEIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Deterministic SEIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSEIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Deterministic SEIR Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DeterministicSEIRDiseaseModel getFixture() {
+		return (DeterministicSEIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * @return the label value fixture
+	 */
+	SEIRLabel getLabelFixture() {
+		return (SEIRLabel) labelFixture;
+	} // getLabelValueFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static DeterministicSEIRDiseaseModel createFixture() {
+		return DeterministicSEIRDiseaseModelImpl
+				.createDeterministicSEIRDiseaseModel(
+						TEST_DETERMINISTIC_SEIR_DISEASE_NAME, MORTALITY_RATE,
+						INFECTIOUS_MORTALITY_RATE,
+						TRANSMISSION_RATE, RECOVERY_RATE, IMMUNITY_LOSS_RATE,
+						INCUBATION_RATE, NON_LINEARITY_COEFFICIENT,
+						TEST_TIME_PERIOD, TEST_POPULATION_IDENTIFIER);
+	} // createFixture
+
+} // DeterministicSEIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRScenarioTest.java
new file mode 100644
index 0000000..a84260f
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSEIRScenarioTest.java
@@ -0,0 +1,562 @@
+// DeterministicSEIRScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Deterministic SEIR disease model
+ * scenario.
+ * 
+ * <ul>
+ * <li>&mu; = {@link DiseaseModelTest#MORTALITY_RATE} = 0.01</li>
+ * <li>&beta; = {@link SITest#TRANSMISSION_RATE} = 0.1</li>
+ * <li>&sigma; = {@link SITest#RECOVERY_RATE} = 0.01</li>
+ * <li>x = {@link SITest#INFECTIOUS_MORTALITY} = 0.1 </li>
+ * <li>&mu;<sub>i</sub> = {@link SITest#INFECTIOUS_MORTAILY_RATE} = 0.1</li>
+ * <li>&gamma; = {@link SIRTest#IMMUNITY_LOSS_RATE} = 0.1</li>
+ * <li>&phi; = {@link SEIRTest#INCUBATION_RATE} = 0.1</li>
+ * <li>Area<sub>l</sub> = 1.0</li>
+ * <li>Area = 1.0</li>
+ * <li>P = S + I = {@link DiseaseModelTestUtil#TEST_POPULATION_COUNT} = 100</li>
+ * </ul>
+ * <h2>1x1 Deterministic SIR Scenario</h2>
+ * <h3>Initial State</h3>
+ * <p>
+ * S= 99.0, I<sup>R</sup>=1.0, I<sup>F</sup>=0.0, R=0.0, B=0.0, D=0.0,
+ * DD=0.0
+ * </p>
+ * <h3>SEIR 1x1 Step 0</h3>
+ * 
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/100)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.01</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.01</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.001</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + +E +I<sup>R</sup> + I<sup>F</sup> +R)</em></li>
+ * <li><em>&Delta;B = 0.01 * (99+0+1+0) </em> </li>
+ * <li><em>&Delta;B = 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0</em> </li>
+ * <li><em>&Delta;DD= 0.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu;S + &mu;E +(&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> + &mu;R </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 99 + 0.01 * 0 + (0.01 + 0.1 ) 0 + 0.01 * 1 + 0.01 * 0</em>
+ * </li>
+ * <li><em>&Delta;D= 1</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + E +I + R) - &beta;<sup>*</sup> S I + &gamma;R - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 (99+(1+0+0)+0) - 0.001 * 99 * (1+0+0) + 0.01 * 0 - 0.01 * 99</em></li>
+ * <li><em>&Delta;S = 1.0 - 0.099 + 0.01 - 0.99</em></li>
+ * <li><em>&Delta;S = -0.089</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;E = &beta;<sup>*</sup>SI - &phi;E - &mu;E</sup></em></li>
+ * <li><em>&Delta;E = 0.001 * 99 * 1 -  0.1 * 0 - 0.01 * 0</em></li>
+ * <li><em>&Delta;E = 0.099</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&phi;E - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0  -  0.01 * 1 - 0.01 * 1</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = - 0.01 - 0.01</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = -0.02</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&phi;E  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0  - (0.01 + 0.1) * 0</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.0</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;R = &sigma; I<sup>R</sup>  - &gamma;R - &mu; R</em></li>
+ * <li><em>&Delta;R = 0.01 * 1  - 0.01 * 0 - 0.01 * 0</em></li>
+ * <li><em>&Delta;R = .01</em></li>
+ * </ul>
+ * <p>
+ * S= 98.911, E=0.099 , I<sup>R</sup>=0.98, I<sup>F</sup>=0.0, R=0.01,
+ * B=1.0, D=1.0, DD=0.0
+ * </p>
+ * 
+ * <h3>SEIR 1x1 Step 1</h3>
+ * 
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/100)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.01</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.01</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.001</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + E + I<sup>R</sup> + I<sup>F</sup> +R)</em></li>
+ * <li><em>&Delta;B = 0.01 * 100 </em> </li>
+ * <li><em>&Delta;B = 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0</em> </li>
+ * <li><em>&Delta;DD= 0.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu;S + &mu;E + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> + &mu; R </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 98.911 + 0.01 * 0.099 + (0.01 + 0.1) * 0 + 0.01 * 0.98 + 0.01 * 0.01</em>
+ * </li>
+ * <li><em>&Delta;D= 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + E +I + R) - &beta;<sup>*</sup> S I + &gamma;R - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 (99.911+ 0.988 (0.980+0)+0.01) - 0.001 * 98.911 * 0.98 + 0.1 * 0.01 - 0.01 * 98.911</em></li>
+ * <li><em>&Delta;S = 1.0 - 0.09693278 + 0.001 - 0.98911</em></li>
+ * <li><em>&Delta;S = -0.085704278</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;E = &beta;<sup>*</sup>SI - &phi;E - &mu;E</sup></em></li>
+ * <li><em>&Delta;E = 0.001 * 98.911 * 0.98 -  0.1 * 0.099 - 0.01 * 0.099</em></li>
+ * <li><em>&Delta;E = 0.09693278 -  0.0099 - 0.00099</em></li>
+ * <li><em>&Delta;E = 0.08604278</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&phi;E - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0.0099  -  0.01 * 0.98 - 0.01 * 0.98</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.00891 - 0.0098 - 0.0098</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = -0.01069</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&phi;E  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0.099  - (0.01 + 0.1) * 0.0</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.0099</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;R = &sigma; I<sup>R</sup>  - &gamma;R - &mu; R</em></li>
+ * <li><em>&Delta;R = 0.01 * 0.98  - 0.1 * 0.01 - 0.01 * 0.01</em></li>
+ * <li><em>&Delta;R = .0087</em></li>
+ * </ul>
+ *  S= 98.911, E=0.099 , I<sup>R</sup>=0.98, I<sup>F</sup>=0.0, R=0.01,
+ * B=1.0, D=1.0, DD=0.0
+ * 
+ * <p>
+ * S= 98.82505722, E=0.18504278, I<sup>R</sup>=0.96931, I<sup>F</sup>=0.0099,
+ * R=0.0187, B=2.0, D=2.0, DD=0.0
+ * </p>
+ * 
+ */
+public class DeterministicSEIRScenarioTest extends SEIRDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "DeterministicSEIR";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SEIRLabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SEIRLabelValue[][][]>();
+
+	static {
+
+		// 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SEIRLabelValueImpl(99.01, 0.0, 0.98, 0, 0.01,
+								0.0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+						new SEIRLabelValueImpl(99.02, 0.0, 0.96, 0.0, 0.02, 0) } } } // new
+				// SEIRLabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+
+		// 1x2
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x2_KEY,
+						new SEIRLabelValue[][][] {
+						// Step 0
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } },
+								// Step 2
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } } } // new
+				// SEIRLabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x3_KEY,
+						new SEIRLabelValue[][][] {
+						// Step 0
+								{ {
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+								// Step 2
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{
+								{
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 1
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1z
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 2
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{
+								{
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 1
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 2
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		retValue.add(DeterministicSEIRDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SEIRLabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SEIRLabelValue[][][] seirLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return seirLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+
+	/**
+	 * @param numRows
+	 *            the number of rows in the lattice
+	 * @param numColumns
+	 *            the number of columns in the lattice
+	 * @return a scenario with nodes in a lattice with a deterministic SEIR
+	 *         disease model and one population member infected in Node [0][0]
+	 */
+	public static Scenario createScenario(final int numRows,
+			final int numColumns) {
+		final Collection<NodeDecorator> diseaseModels = new ArrayList<NodeDecorator>();
+
+		diseaseModels.add(DeterministicSEIRDiseaseModelTest.createFixture());
+
+		final Model model = DiseaseModelTestUtil.createLatticeModel(
+				diseaseModels, numRows, numColumns,
+				DiseaseModelTestUtil.TEST_POPULATION_COUNT,
+				DiseaseModelTestUtil.TEST_AREA);
+
+		final Scenario retValue = DiseaseModelTestUtil.createLatticeScenario(
+				SIDiseaseModelScenarioTest.createInfectors(model), model);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createFixture
+
+} // DeterministicSEIRScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIDiseaseModelTest.java
new file mode 100644
index 0000000..b9f6087
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIDiseaseModelTest.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIDiseaseModel;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Deterministic SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DeterministicSIDiseaseModelTest extends SITest {
+	private static final String TEST_DETERMINISTIC_SI_DISEASE_NAME = "Deterministic SI Disease Model";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DeterministicSIDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Deterministic SI Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Deterministic SI Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DeterministicSIDiseaseModel getFixture() {
+		return (DeterministicSIDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static DeterministicSIDiseaseModel createFixture() {
+		return DeterministicSIDiseaseModelImpl
+				.createDeterministicSIDiseaseModel(
+						TEST_DETERMINISTIC_SI_DISEASE_NAME, MORTALITY_RATE,
+						INFECTIOUS_MORTALITY_RATE,
+						TRANSMISSION_RATE, RECOVERY_RATE,
+						NON_LINEARITY_COEFFICIENT, TEST_TIME_PERIOD,
+						TEST_POPULATION_IDENTIFIER);
+	} // createFixture
+} // DeterministicSIDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRDiseaseModelTest.java
new file mode 100644
index 0000000..b1ea3af
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRDiseaseModelTest.java
@@ -0,0 +1,107 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DeterministicSIRDiseaseModel;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.impl.DeterministicSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Deterministic SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DeterministicSIRDiseaseModelTest extends SIRTest {
+	private static final String TEST_DETERMINISTIC_SIR_DISEASE_NAME = "Deterministic SIR Disease Model";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DeterministicSIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Deterministic SIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeterministicSIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Deterministic SIR Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected DeterministicSIRDiseaseModel getFixture() {
+		return (DeterministicSIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static DeterministicSIRDiseaseModel createFixture() {
+		return DeterministicSIRDiseaseModelImpl
+				.createDeterministicSIRDiseaseModel(
+						TEST_DETERMINISTIC_SIR_DISEASE_NAME, MORTALITY_RATE,
+						INFECTIOUS_MORTALITY_RATE,
+						TRANSMISSION_RATE, RECOVERY_RATE, IMMUNITY_LOSS_RATE,
+						NON_LINEARITY_COEFFICIENT, TEST_TIME_PERIOD,
+						TEST_POPULATION_IDENTIFIER);
+	} // createFixture
+
+} // DeterministicSIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRScenarioTest.java
new file mode 100644
index 0000000..e9e2f85
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIRScenarioTest.java
@@ -0,0 +1,450 @@
+// DeterministicSIRScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Deterministic SIR disease model
+ * scenario. 
+ * <ul>
+ * <li>&mu; = {@link DiseaseModelTest#MORTALITY_RATE} = 0.01</li>
+ * <li>&beta; = {@link SITest#TRANSMISSION_RATE} = 0.1</li>
+ * <li>&sigma; = {@link SITest#RECOVERY_RATE} = 0.01</li>
+ * <li>x = {@link SITest#INFECTIOUS_MORTALITY} = 0.1 </li>
+ * <li>&mu;<sub>i</sub> = {@link SITest#INFECTIOUS_MORTAILY_RATE} = 0.1</li>
+ * <li>&gamma; = {@link SIRTest#IMMUNITY_LOSS_RATE} = 0.1</li>
+ * <li>Area<sub>l</sub> = 1.0</li>
+ * <li>Area = 1.0</li>
+ * <li>P = S + I = {@link DiseaseModelTestUtil#TEST_POPULATION_COUNT} = 100</li>
+ * </ul>
+ * <h2>1x1 Deterministic SIR Scenario</h2>
+ * <h3>Initial State</h3>
+ * <p>
+ * S= 99.0, I<sup>R</sup>=1.0, I<sup>F</sup>=0.0, R=0.0, B=0.0, D=0.0,
+ * DD=0.0
+ * </p>
+ * <h3>SIR 1x1 Step 0</h3>
+ * 
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/100)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.01</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.01</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.001</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + I<sup>R</sup> + I<sup>F</sup> +R)</em></li>
+ * <li><em>&Delta;B = 0.01 * (99+1+0) </em> </li>
+ * <li><em>&Delta;B = 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0</em> </li>
+ * <li><em>&Delta;DD= 0.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> + &mu; R </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 99 + (0.01 + 0.1 ) 0 + 0.01 * 1 + 0.01 * 0</em>
+ * </li>
+ * <li><em>&Delta;D= 1</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + I + R) - &beta;<sup>*</sup> S I + &gamma;R - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 (99+(1+0)+0) - 0.001 * 99 * (1+0+0) + 0.01 * 0 - 0.01 * 99</em></li>
+ * <li><em>&Delta;S = 1.0 - 0.099 + 0.01 - 0.99</em></li>
+ * <li><em>&Delta;S = -0.089</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&beta;<sup>*</sup> S I - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0.001 * 99 * 1 -  0.01 * 1 - 0.01 * 1</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.0891 - .01 - .01</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.0691</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&beta;<sup>*</sup> S I  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0.001 * 99 * 1  - (0.01 + 0.1) * 0</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = .0099</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;R = &sigma; I<sup>R</sup>  - &gamma;R - &mu; R</em></li>
+ * <li><em>&Delta;R = 0.01 * 1  - 0.01 * 0 - 0.01 * 0</em></li>
+ * <li><em>&Delta;R = .01</em></li>
+ * </ul>
+ * <p>
+ * S= 98.911, I<sup>R</sup>=1.0691, I<sup>F</sup>=0.0099, R=0.01, B=1.0,
+ * D=1.0, DD=0.0
+ * </p>
+ * 
+ * <h3>SIR 1x1 Step 1</h3>
+ * 
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/99.989)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.0100011</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.0100011</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.00100011</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + I<sup>R</sup> + I<sup>F</sup> +R)</em></li>
+ * <li><em>&Delta;B = 0.01 * 99.989 </em> </li>
+ * <li><em>&Delta;B = 0.99989</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0.0099</em> </li>
+ * <li><em>&Delta;DD= 0.00099</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> + &mu; R </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 98.911 + (0.01 + 0.1) 0.0099 + 0.01 * 1.0691 + 0.01 * 0.01</em>
+ * </li>
+ * <li><em>&Delta;D= 1.00099</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + I + R) - &beta;<sup>*</sup> S I + &gamma;R - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 * 99.989 - 0.00100011 * 98.911 * (1.0691+0.0099) + 0.01 * 0.01 - 0.01 * 98.911</em></li>
+ * <li><em>&Delta;S = 0.99989 - 0.106736709 + 0.0001 - 0.98911</em></li>
+ * <li><em>&Delta;S = -0.095856709</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&beta;<sup>*</sup> S I - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0.00100011 * 98.911 * (1.0691+0.0099) -  0.01 * 1.0691 - 0.01 * 1.0691</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.096063038 - .010691 - .010691</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.074681038</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&beta;<sup>*</sup> S I  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0.00100011 * 98.911 * (1.0691+0.0099)  - (0.01 + 0.1) * 0.0099</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.010673671  - 0.001089</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = .009584671</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;R = &sigma; I<sup>R</sup>  - &gamma;R - &mu; R</em></li>
+ * <li><em>&Delta;R = 0.01 * 1.0691  - 0.01 * 0.01 - 0.01 * 0.01</em></li>
+ * <li><em>&Delta;R = .010491</em></li>
+ * </ul>
+ * <p>
+ * S= 98.81514329, I<sup>R</sup>=1.143781038, I<sup>F</sup>=0.019484671,
+ * R=0.020491, B=1.99989, D=2.00099, DD=0.00099
+ * </p>
+ * 
+ */
+public class DeterministicSIRScenarioTest extends SIRDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "DeterministicSIR";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SIRLabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SIRLabelValue[][][]>();
+
+	static {
+
+		// 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SIRLabelValueImpl(99.01, 0.98, 0.0, 0.01,
+								0.0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+						new SIRLabelValueImpl(99.02, 0.96, 0.0, 0.02, 
+								0.00) } } } // new
+				// SIRLabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+
+		// 1x2
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x2_KEY,
+						new SIRLabelValue[][][] {
+						// Step 0
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0) } },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												) } },
+								// Step 2
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												) } } } // new
+				// SIRLabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x3_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		retValue.add(DeterministicSIRDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SIRLabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SIRLabelValue[][][] sirLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return sirLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+} // DeterministicSIRScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIScenarioTest.java
new file mode 100644
index 0000000..92cad5d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DeterministicSIScenarioTest.java
@@ -0,0 +1,477 @@
+// DeterministicSIScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Deterministic SI disease model
+ * scenario.
+ * 
+ * <ul>
+ * <li>S - The number of <code>Susceptible</code> population members. Members
+ * enter this state by being born or by "recovering" from being
+ * <code>Infectious</code>. They leave this state either by death or by
+ * entering the <code>Infectious</code> state.
+ * {@link SITest#TRANSMISSION_RATE} = 0.1, {@link SITest#RECOVERY_RATE} = 0.1
+ * 
+ * Initialized to {@link DiseaseModelTestUtil#TEST_POPULATION_COUNT} = 100 </li>
+ * <li>I - The number of <code>Infectious</code> population members.
+ * Initialized to {@link SIDiseaseModelScenarioTest#NUMBER_TO_INFECT} = 1 </li>
+ * 
+ * <li>B - The number of <code>Births</code> of new (Susceptible) population
+ * members.
+ * 
+ * 
+ * Computed as a function of the "background mortality rate"
+ * {@link DiseaseModel#getBackgroundMortalityRate()}. We use the death rate
+ * because we assume that the population was in equilibrium before the onset of
+ * the disease (i.e., neither naturally growing or shrinking much over the time
+ * period of the simulation). The value used for the test is . Initialized to 0.
+ * </li>
+ * 
+ * 
+ * <li>D - The total number of <code>Deaths</code> of all types of population
+ * members. Just like the births, this is computed as a function of the
+ * "background mortality rate" {@link DiseaseModel#getBackgroundMortalityRate()}.
+ * The rate used for the test is {@link DiseaseModelTest#MORTALITY_RATE} = 0.01.
+ * However, it also includes the additional deaths of <code>Infectious</code>
+ * population members (i.e., DD below) due to the disease. Initialized to 0.</li>
+ * <li>DD - The total number of <code>Disease Deaths</code> of
+ * <code>Infectious</code> population members. It is a function of the which
+ * is not a rate, but rather the fraction of <code>Infectious</code>
+ * population members that eventually die from the disease (i.e., it's the
+ * mortality of the disease, how many who get it die from it).
+ * {@link SIImpl#computeInfectiousMortalityRate(double, double)}. Initialized
+ * to 0. </li>
+ * </ul>
+ * <ul>
+ * <li>&mu; = {@link DiseaseModelTest#MORTALITY_RATE} = 0.01</li>
+ * <li>&beta; = {@link SITest#TRANSMISSION_RATE} = 0.1</li>
+ * <li>&sigma; = {@link SITest#RECOVERY_RATE} = 0.01</li>
+ * <li>x = {@link SITest#INFECTIOUS_MORTALITY} = 0.1 </li>
+ * <li>&mu;<sub>i</sub> = {@link SITest#INFECTIOUS_MORTAILY_RATE} = 0.1</li>
+ * <li>Area<sub>l</sub> = 1.0</li>
+ * <li>Area = 1.0</li>
+ * <li>P = S + I = {@link DiseaseModelTestUtil#TEST_POPULATION_COUNT} = 100</li>
+ * </ul>
+ * <h2>1x1 Deterministic SI Scenario</h2>
+ * <h3>Initial State</h3>
+ * <p>
+ * S= 99.0, I<sup>R</sup>=1.0, I<sup>F</sup>=0.0, B=0.0, D=0.0, DD=0.0
+ * </p>
+ * <h3>SI 1x1 Step 0</h3>
+ * 
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/100)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.01</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.01</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.001</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + I<sup>R</sup> + I<sup>F</sup>)</em></li>
+ * <li><em>&Delta;B = 0.01 * (99+1+0) </em> </li>
+ * <li><em>&Delta;B = 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0</em> </li>
+ * <li><em>&Delta;DD= 0.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 99 + (0.01 + 0.1 ) 0 + 0.01 * 1 </em> </li>
+ * <li><em>&Delta;D= 1</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + I) - &beta;<sup>*</sup> S I + &sigma; I<sup>R</sup> - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 (99+(1+0)) - 0.001 * 99 * (1+0) + 0.01 * 1 - 0.01 * 99</em></li>
+ * <li><em>&Delta;S = 1.0 - 0.099 + 0.01 - 0.99</em></li>
+ * <li><em>&Delta;S = -0.079</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&beta;<sup>*</sup> S I - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0.001 * 99 * 1 -  0.01 * 1 - 0.01 * 1</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.0891 - .01 - .01</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.0691</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&beta;<sup>*</sup> S I  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0.001 * 99 * 1  - (0.01 + 0.1) * 0</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = .0099</em></li>
+ * </ul>
+ * <p>
+ * S= 98.921, I<sup>R</sup>=1.0691, I<sup>F</sup>=0.0099, B=1.0, D=1.0,
+ * DD=0.0
+ * </p>
+ * 
+ * <h3>SI 1x1 Step 1</h3>
+ * <ul>
+ * <li><em>TSF<sub>l</sub> = (1/P)*(Area/Area<sub>l</sub>)</em></li>
+ * <li><em>TSF<sub>l</sub> = (1/100)*(1/1)</em></li>
+ * <li><em>TSF<sub>l</sub> = 0.01</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&beta;<sup>*</sup> = &beta; TSF<sub>l</sub></em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.1 * 0.01</em></li>
+ * <li><em>&beta;<sup>*</sup> = 0.001</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;B = &mu; * (S + I<sup>R</sup> + I<sup>F</sup>)</em></li>
+ * <li><em>&Delta;B = 0.01 * (100) </em> </li>
+ * <li><em>&Delta;B = 1.0</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;DD = &mu;<sub>i</sub> I<sup>F</sup>  </em> </li>
+ * <li><em>&Delta;DD= 0.1 * 0.01</em> </li>
+ * <li><em>&Delta;DD= 0.001</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;D = &mu; S + (&mu; + &mu;<sub>i</sub> )I<sup>F</sup> + &mu; I<sup>R</sup> </em>
+ * </li>
+ * <li><em>&Delta;D = 0.01 * 98.921 + (0.01 + 0.1 )0.0099 + 0.01 * 1.0691 </em>
+ * </li>
+ * <li><em>&Delta;D= 1.00099</em> </li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;S = &mu; (S + I) - &beta;<sup>*</sup> S I + &sigma; I<sup>R</sup> - &mu; S</em></li>
+ * <li><em>&Delta;S = 0.01 * 100 - 0.001 * 98.921 * (1.0691+0.0099) + 0.01 * 1.0691 - 0.01 * 98.921</em></li>
+ * <li><em>&Delta;S = 1.0 - 0.10596859 + 0.010691 - 0.98921</em></li>
+ * <li><em>&Delta;S = -0.08448759</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>R</sup> = (1-x)&beta;<sup>*</sup> S I - &sigma; I<sup>R</sup> - &mu; I<sup>R</sup></em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.9 * 0.001 * 98.921 * (1.0691+0.0099) -  0.01 * 1.0691 - 0.01 * 1.0691</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.095371731 - .010691 - .010691</em></li>
+ * <li><em>&Delta;I<sup>R</sup> = 0.073989731</em></li>
+ * </ul>
+ * <ul>
+ * <li><em>&Delta;I<sup>F</sup> = x&beta;<sup>*</sup> S I  - (&mu; + &mu;<sub>i</sub>) I<sup>F</sup></em></li>
+ * <li><em>&Delta;I<sup>F</sup> = 0.1 * 0.001 * 98.921 * (1.0691+0.0099)  - (0.01 + 0.1) * 0.0099</em></li>
+ * <li><em>&Delta;I<sup>F</sup> = .009507859</em></li>
+ * </ul>
+ * <p>
+ * S= 98.83651241, I<sup>R</sup>=1.143089731, I<sup>F</sup>=0.019407859 ,
+ * B=2.0, D=2.00099, DD=0.001
+ * </p> <
+ * 
+ * @see DiseaseModelTestUtil#TEST_POPULATION_COUNT
+ * @see SIDiseaseModelScenarioTest#NUMBER_TO_INFECT
+ * @see DiseaseModelTestUtil#TEST_AREA
+ * @see SITest#INFECTIOUS_MORTALITY
+ * @see SITest#TRANSMISSION_RATE
+ * @see SITest#NON_LINEARITY_COEFFICIENT
+ * @see SITest#RECOVERY_RATE
+ * @see SIImpl
+ */
+public class DeterministicSIScenarioTest extends SIDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "DeterministicSI";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SILabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SILabelValue[][][]>();
+
+	static {
+
+		// 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SILabelValueImpl(99.02, 0.98, 0.0, 
+								0.0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+						new SILabelValueImpl(99.04, 0.96,
+								0.0, 0.0) } } } // new
+				// SILabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+
+		// 1x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x2_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0) } },
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0) } } } // new
+				// SILabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x3_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0,0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		retValue.add(DeterministicSIDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SILabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SILabelValue[][][] siLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return siLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+} // DeterministicSIScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelTest.java
new file mode 100644
index 0000000..77451f3
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelTest.java
@@ -0,0 +1,100 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class DiseaseModelLabelTest extends TestCase {
+	/**
+	 * The fixture for this Disease Model Label test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelLabel fixture = null;
+
+	/**
+	 * Constructs a new Disease Model Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(DiseaseModelLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@SuppressWarnings("unused")
+	private DiseaseModelLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getCurrentDiseaseModelLabelValue() <em>Current Disease Model Label Value</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getCurrentDiseaseModelLabelValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentDiseaseModelLabelValue() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getNextDiseaseModelLabelValue() <em>Next Disease Model Label Value</em>}' feature getter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel#getNextDiseaseModelLabelValue()
+	 * @generated NOT
+	 */
+	public void testGetNextDiseaseModelLabelValue() {
+		assertTrue(true);
+	}
+
+	protected static void labelRegion(final DiseaseModelLabel diseaseLabel,
+			final String populationIdentifier, final Region region) {
+		diseaseLabel.setURIOfIdentifiableToBeLabeled(region.getURI());
+		final PopulationLabel populationLabel = PopulationLabelImpl
+				.getPopulationLabel(populationIdentifier, region);
+		diseaseLabel.setPopulationLabel(populationLabel);
+		region.getLabels().add(diseaseLabel);
+	} // labelRegion
+
+} // DiseaseModelLabelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelValueTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelValueTest.java
new file mode 100644
index 0000000..7029ea7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelLabelValueTest.java
@@ -0,0 +1,244 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getPopulationCount() <em>Population Count</em>}</li>
+ * </ul>
+ * </p>
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Set</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Add</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Sub</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#scale(double) <em>Scale</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#zeroOutPopulationCount() <em>Zero Out Population Count</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class DiseaseModelLabelValueTest extends TestCase {
+
+	protected static final double TEST_BIRTHS = 7;
+
+	protected static final double TEMP_TEST_BIRTHS = TEST_BIRTHS + 70;
+
+	protected static final double TEST_DEATHS = 9;
+
+	protected static final double TEMP_TEST_DEATHS = TEST_DEATHS + 90;
+
+	protected static final double TEST_DISEASE_DEATHS = 8;
+
+	protected static final double TEMP_TEST_DISEASE_DEATHS = TEST_DISEASE_DEATHS + 80;
+
+	/**
+	 * The fixture for this Disease Model Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DiseaseModelLabelValue fixture = null;
+
+	/**
+	 * This fixture is changed during tests
+	 */
+	protected DiseaseModelLabelValue tempFixture = null;
+
+	/**
+	 * Constructs a new Disease Model Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(DiseaseModelLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 */
+	protected void setTempFixture(DiseaseModelLabelValue tempFixture) {
+		this.tempFixture = tempFixture;
+	} // setTempFixture
+
+	/**
+	 * @return a fixture
+	 */
+	protected abstract DiseaseModelLabelValue createTempFixture();
+
+	/**
+	 * Returns the fixture for this Disease Model Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DiseaseModelLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * @return an instance of DiseaseModelLabelValue that can be changed
+	 */
+	private DiseaseModelLabelValue getTempFixture() {
+		return tempFixture;
+	} // getTempFixture
+
+	/**
+	 * Test the sanity of the test fixtures.
+	 */
+	public void testSanity() {
+		final DiseaseModelLabelValue labelValue = getFixture();
+		final DiseaseModelLabelValue labelValueTemp = getTempFixture();
+		assertTrue(labelValue.sane());
+		assertTrue(labelValueTemp.sane());
+	} // testSanity
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getPopulationCount() <em>Population Count</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#getPopulationCount()
+	 * @generated NOT
+	 */
+	public void testGetPopulationCount() {
+		final DiseaseModelLabelValue fixture = getFixture();
+		assertTrue(fixture.getPopulationCount() == getExpectedPopulationCount(fixture));
+	} // testGetPopulationCount
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Set</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#set(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 * @generated NOT
+	 */
+	public void testSet__DiseaseModelLabelValue() {
+		final DiseaseModelLabelValue fixture = getFixture();
+		final DiseaseModelLabelValue temp = getTempFixture();
+
+		assertFalse(EcoreUtil.equals(fixture, temp));
+		temp.set((IntegrationLabelValue)fixture);
+		assertTrue(EcoreUtil.equals(fixture, temp));
+	} // testSet__DiseaseModelLabelValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Add</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#add(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 * @generated NOT
+	 */
+	public void testAdd__DiseaseModelLabelValue() {
+		final DiseaseModelLabelValue fixture = getFixture();
+		final DiseaseModelLabelValue temp = getTempFixture();
+		final DiseaseModelLabelValue expectedResult = getExpectedFixtureAdditionResult(
+				fixture, temp);
+		assertFalse(EcoreUtil.equals(fixture, temp));
+		temp.add((IntegrationLabelValue)fixture);
+		// Disease deaths are not additive. Fix
+		temp.setDiseaseDeaths(expectedResult.getDiseaseDeaths());
+		assertTrue(EcoreUtil.equals(temp, expectedResult));
+	} // testAdd__DiseaseModelLabelValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue) <em>Sub</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#sub(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue)
+	 * @generated NOT
+	 */
+	public void testSub__DiseaseModelLabelValue() {
+		final DiseaseModelLabelValue fixture = getFixture();
+		final DiseaseModelLabelValue temp = getTempFixture();
+		final DiseaseModelLabelValue expectedResult = getExpectedFixtureSubtractionResult(
+				temp, fixture);
+		assertFalse(EcoreUtil.equals(fixture, temp));
+		temp.sub((IntegrationLabelValue)fixture);
+		// Disease deaths are not substracted. Fix
+		temp.setDiseaseDeaths(expectedResult.getDiseaseDeaths());
+		assertTrue(EcoreUtil.equals(temp, expectedResult));
+	} // testSub__DiseaseModelLabelValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#scale(double) <em>Scale</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#scale(double)
+	 * @generated NOT
+	 */
+	public void testScale__double() {
+		// TODO: implement this operation test method
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#zeroOutPopulationCount() <em>Zero Out Population Count</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue#zeroOutPopulationCount()
+	 * @generated NOT
+	 */
+	public void testZeroOutPopulationCount() {
+		final DiseaseModelLabelValue fixture = getFixture();
+		assertTrue(fixture.getPopulationCount() > 0);
+		fixture.zeroOutPopulationCount();
+		assertTrue(fixture.getPopulationCount()== 0);
+	} // testZeroOutPopulationCount
+	
+
+	/**
+	 * @return the expected population count for the disease model label value
+	 */
+	protected abstract double getExpectedPopulationCount(
+			final DiseaseModelLabelValue fixture);
+
+	/**
+	 * @return the expected result of adding fixture1 and fixture2
+	 */
+	protected abstract DiseaseModelLabelValue getExpectedFixtureAdditionResult(
+			final DiseaseModelLabelValue fixture1,
+			final DiseaseModelLabelValue fixture2);
+
+	/**
+	 * @return the expected result of subtracting fixture2 from fixture1
+	 */
+	protected abstract DiseaseModelLabelValue getExpectedFixtureSubtractionResult(
+			final DiseaseModelLabelValue fixture1,
+			final DiseaseModelLabelValue fixture2);
+
+} // DiseaseModelLabelValueTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelScenarioTest.java
new file mode 100644
index 0000000..763894a
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelScenarioTest.java
@@ -0,0 +1,402 @@
+// DiseaseModelScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import junit.framework.TestCase;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+
+/**
+ * This class is the top-level class for all test of disease models in a
+ * particular scenario.
+ */
+public abstract class DiseaseModelScenarioTest extends TestCase {
+
+	protected static final String DIRECTORY = "temp";
+
+	/**
+	 * The key for scenario 1x1
+	 */
+	public static final String TEST_SCENARIO1x1_KEY = "1x1";
+
+	/**
+	 * The key for scenario 1x2
+	 */
+	public static final String TEST_SCENARIO1x2_KEY = "1x2";
+
+	/**
+	 * The key for scenario 1x3
+	 */
+	public static final String TEST_SCENARIO1x3_KEY = "1x3";
+
+	/**
+	 * The key for scenario 2x2
+	 */
+	public static final String TEST_SCENARIO2x2_KEY = "2x2";
+
+	/**
+	 * The key for scenario 3x3
+	 */
+	public static final String TEST_SCENARIO3x3_KEY = "3x3";
+
+	// TODO implement the disease model test scenarios
+
+	// You need to un-comment the testSpecifications and then in each of the
+	// test implementations you're going to need to figure out the valid disease
+	// model label values. see StochasticSEIRScenarioTest.java etc.
+	protected static TestSpec[] testSpecifications = new TestSpec[] { new TestSpec(
+			1, 1, TEST_SCENARIO1x1_KEY)
+	/*
+	 * new TestSpec(1, 1, TEST_SCENARIO1x1_KEY), new TestSpec(1, 2,
+	 * TEST_SCENARIO1x2_KEY), new TestSpec(1, 3, TEST_SCENARIO1x3_KEY), new
+	 * TestSpec(2, 2, TEST_SCENARIO2x2_KEY), new TestSpec(3, 3,
+	 * TEST_SCENARIO3x3_KEY)
+	 */
+	};
+
+	/**
+	 * @param expectedLabelValues
+	 *            the expected label values for the test
+	 * @return how many labels are expected to be updated by a disease model for
+	 *         each test.
+	 */
+	protected static int computeExpectedNumberOfLabels(
+			final LabelValue[][][] expectedLabelValues) {
+		return expectedLabelValues[0].length * expectedLabelValues[0][0].length;
+	} // computeExpectedNumberOfLabels
+
+	/**
+	 * @param numRows
+	 *            the number of rows in the lattice
+	 * @param numColumns
+	 *            the number of columns in the lattice
+	 * @return a scenario with nodes in a lattice with a disease model.
+	 */
+	public Scenario createFixture(final int numRows, final int numColumns) {
+		final Collection<NodeDecorator> DISEASE_MODELS = new ArrayList<NodeDecorator>();
+		DISEASE_MODELS.addAll(getDiseaseModelsToTest());
+
+		final Model model = DiseaseModelTestUtil.createLatticeModel(
+				DISEASE_MODELS, numRows, numColumns,
+				DiseaseModelTestUtil.TEST_POPULATION_COUNT,
+				DiseaseModelTestUtil.TEST_AREA);
+
+		final Scenario retValue = DiseaseModelTestUtil.createLatticeScenario(
+				getScenarioDecorators(model), model);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createFixture
+
+	/**
+	 * Execute all of the tests specified in testSpecifications
+	 */
+	public void testDoAllTests() {
+		for (final TestSpec testSpec : testSpecifications) {
+			doTest(testSpec);
+		}
+	} // testDoAllTests
+
+	/**
+	 * Test serializing and de-serializing scenarios
+	 */
+	public void testSerializeDeserializeScenario() {
+
+		final int[][] rowColumns = new int[][] { { 1, 1 }, { 1, 2 }, { 3, 3 } };
+
+		for (final int[] rowColumn : rowColumns) {
+			final Scenario fixture = createFixture(rowColumn[0], rowColumn[1]);
+
+			final URI uri = createSerializationURI(fixture);
+			ScenarioTest.serializeDeserializeScenario(fixture, uri);
+		}
+	} // testSerializeDeserializeScenario
+
+	/**
+	 * @param testSpec
+	 *            a test specification
+	 */
+	private void doTest(final TestSpec testSpec) {
+		doTest(createFixture(testSpec.numRows, testSpec.numColumns),
+				testSpec.scenarioDiseaseKey);
+	} // doTest
+
+	/**
+	 * @param scenario
+	 *            the scenario to test
+	 * @param scenarioDiseaseKey
+	 *            the unique identifier of the scenario test
+	 */
+	private void doTest(final Scenario scenario, final String scenarioDiseaseKey) {
+
+		final int numSteps = getNumberOfSteps(scenarioDiseaseKey);
+
+		// Step through the disease computation by using the actual scenario
+		// step method
+		for (int step = 0; step < numSteps; step++) {
+			// Make one step...
+			scenario.step();
+			// ... and make sure everything looks ok
+			assertTrue(scenario.sane());
+
+			// Now validate the computed values for each disease model in the
+			// scenario...
+			for (final DiseaseModel diseaseModel : getDiseaseModels(scenario)) {
+				// Really only need to check this once...
+				if (step == 0) {
+					assertTrue(
+							"Disease model \""
+									+ diseaseModel.getDublinCore().getTitle()
+									+ "\" \""
+									+ scenario.getDublinCore().getTitle()
+									+ "\" \"" + scenarioDiseaseKey,
+							diseaseModel.getLabelsToUpdate().size() == getExpectedNumberOfLabelsToUpdate(scenarioDiseaseKey));
+				} // if
+
+				assertTrue(validateDiseaseModelState(scenario,
+						scenarioDiseaseKey, step, diseaseModel,
+						getExpectedDiseaseModelState(scenarioDiseaseKey, step)));
+
+			} // for each disease model
+		} // for each step
+
+	} // doTest
+
+	/**
+	 * @param scenario
+	 *            the scenario whose state is to be verified
+	 * @param scenarioDiseaseKey
+	 *            the unique identifier of the scenario test
+	 * @param step
+	 *            the step number in the test being verified
+	 * @param expectedDiseaseModelState
+	 *            the disease model label values that should be present
+	 */
+	private boolean validateDiseaseModelState(final Scenario scenario,
+			final String scenarioDiseaseKey, final int step,
+			final DiseaseModel diseaseModel,
+			final LabelValue[][] expectedDiseaseModelState) {
+		final boolean retValue = true;
+
+		final Graph canonicalGraph = scenario.getCanonicalGraph();
+
+		for (int row = 0; row < expectedDiseaseModelState.length; row++) {
+			for (int column = 0; column < expectedDiseaseModelState[row].length; column++) {
+				final Region region = DiseaseModelTestUtil.getRegion(
+						canonicalGraph, row, column);
+				final LabelValue labelValue = expectedDiseaseModelState[row][column];
+				final LabelValue dmLabelValue = getCurrentDiseaseModelLabelValue(
+						region, diseaseModel);
+				assertTrue("Disease model \""
+						+ diseaseModel.getDublinCore().getTitle() + "\" ("
+						+ scenarioDiseaseKey + ") step: " + step + " [" + row
+						+ ", " + column + "] Got \"" + dmLabelValue.toString()
+						+ "\", expected \"" + labelValue.toString() + "\"",
+						compareLabelValues(labelValue, dmLabelValue));
+			} // for column
+		} // for row
+
+		return retValue;
+	} // validateDiseaseModelState
+
+	/**
+	 * @param labelValue
+	 * @param dmLabelValue
+	 * @return <code>true</code> if the labels are "equal". We do a "fuzzy"
+	 *         compare on the double values. We declare them "equal" if they
+	 *         differ by less than a specified tolerance.
+	 */
+	protected boolean compareLabelValues(final LabelValue lableValue1,
+			final LabelValue lableValue2) {
+		boolean retValue = true;
+		final DiseaseModelLabelValue dmLV1 = (DiseaseModelLabelValue) lableValue1;
+		final DiseaseModelLabelValue dmLV2 = (DiseaseModelLabelValue) lableValue2;
+
+		retValue = retValue
+				&& DiseaseModelTestUtil.closeEnough(dmLV1.getDiseaseDeaths(),
+						dmLV2.getDiseaseDeaths());
+		return retValue;
+	} // compareLabelValues
+
+	/**
+	 * @param fixture
+	 *            the scenario to test
+	 * @return the URI to use to serialize and then de-serialize the scenario
+	 *         under test
+	 */
+	private URI createSerializationURI(final Scenario fixture) {
+		final URI uri = URI
+				.createURI(DIRECTORY + "/" + getDiseaseURIPrefix()
+						+ encodeTitle(fixture.getDublinCore().getTitle())
+						+ ".scenario");
+		return uri;
+	} // createSerializationURI
+
+	/**
+	 * @param title
+	 *            the title of a scenario
+	 * @return the title with all whitespace removed
+	 */
+	private String encodeTitle(final String title) {
+		final StringBuilder sb = new StringBuilder();
+		final StringTokenizer st = new StringTokenizer(title, ",.[] ");
+		while (st.hasMoreTokens()) {
+			sb.append(st.nextToken());
+		} // while
+		return sb.toString();
+	} // encodeTitle
+
+	/**
+	 * @param region
+	 *            the region node to search for a label updated by the disease
+	 *            model
+	 * @param diseaseModel
+	 *            the disease model
+	 * @return the current value of the label on the node updated by the disease
+	 *         model
+	 */
+	private LabelValue getCurrentDiseaseModelLabelValue(final Region region,
+			final DiseaseModel diseaseModel) {
+		LabelValue retValue = null;
+		for (final Object element : region.getLabels()) {
+			final NodeLabel nodeLabel = (NodeLabel) element;
+			if (nodeLabel instanceof DiseaseModelLabel) {
+				final DiseaseModelLabel diseaseModelLabel = (DiseaseModelLabel) nodeLabel;
+				// Is this label updated by the disease model?
+				if (diseaseModel.getLabelsToUpdate()
+						.contains(diseaseModelLabel)) {
+					// Yes
+					retValue = diseaseModelLabel.getCurrentValue();
+					break;
+				}
+			} // if
+		} // for each node label
+		return retValue;
+	} // getCurrentDiseaseModelLabelValue
+
+	/**
+	 * 
+	 * @param scenario
+	 *            a scenario
+	 * @return all of the disease models in the scenario.
+	 */
+	protected List<DiseaseModel> getDiseaseModels(final Scenario scenario) {
+		final List<DiseaseModel> retValue = new ArrayList<DiseaseModel>();
+
+		for (final Object element : scenario.getCanonicalGraph()
+				.getDecorators()) {
+			final Decorator decorator = (Decorator) element;
+			if (decorator instanceof DiseaseModel) {
+				retValue.add((DiseaseModel) decorator);
+			}
+		} // for each decorator in the canonical graph
+		return retValue;
+	} // getDiseaseModel
+
+	/**
+	 * @param diseaseScenarioKey
+	 *            the key identifying the test
+	 * @return the number of disease model computations to execute for the test.
+	 */
+	protected abstract int getNumberOfSteps(final String diseaseScenarioKey);
+
+	/**
+	 * @param diseaseScenarioKey
+	 *            the key identifying the test
+	 * @return the expected number of labels a disease model will update
+	 */
+	protected abstract int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey);
+
+	/**
+	 * @param diseaseScenarioKey
+	 *            identifier that uniquely identifies the combination of disease
+	 *            and scenario.
+	 * @param step
+	 *            the simulation step that has been completed.
+	 * @return an array of disease model label values that are the expected
+	 *         values after the given step of the simulation.
+	 */
+	protected abstract LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step);
+
+	/**
+	 * @return the disease models to be tested
+	 */
+	public abstract List<NodeDecorator> getDiseaseModelsToTest();
+
+	/**
+	 * @param model
+	 *            the model to generate scenario decorators for
+	 * @return the scenario decorators to include in a fixture
+	 */
+	public abstract Collection<Decorator> getScenarioDecorators(Model model);
+
+	/**
+	 * @return a string to be used in a URI to prefix the scenario files being
+	 *         serialized for a particular disease under test.
+	 */
+	protected abstract String getDiseaseURIPrefix();
+
+	/**
+	 * This class represents the parameters for the specification of a test
+	 */
+	protected static final class TestSpec {
+		/**
+		 * The number of rows in the lattice graph
+		 */
+		public int numRows = 0;
+
+		/**
+		 * The number of columns in the lattice graph
+		 */
+		public int numColumns = 0;
+
+		/**
+		 * The scenario/disease key of the test.
+		 */
+		public String scenarioDiseaseKey = "";
+
+		/**
+		 * @param numRows
+		 * @param numColumns
+		 * @param scenarioDiseaseKey
+		 */
+		protected TestSpec(final int numRows, final int numColumns,
+				final String scenarioDiseaseKey) {
+			super();
+			this.numRows = numRows;
+			this.numColumns = numColumns;
+			this.scenarioDiseaseKey = scenarioDiseaseKey;
+		}
+	} // TestSpec
+
+} // DiseaseModelScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelStateTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelStateTest.java
new file mode 100644
index 0000000..acc671c
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelStateTest.java
@@ -0,0 +1,73 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.impl.DiseaseModelStateImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class DiseaseModelStateTest extends TestCase {
+	/**
+	 * The fixture for this Disease Model State test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModelState fixture = null;
+
+	/**
+	 * Constructs a new Disease Model State test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelStateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model State test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(DiseaseModelState fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model State test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DiseaseModelState getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * test the sanity of the fixture
+	 */
+	public void testFixtureSanity() {
+		final DiseaseModelStateImpl fixture = (DiseaseModelStateImpl) getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+} // DiseaseModelStateTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTest.java
new file mode 100644
index 0000000..08881e5
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTest.java
@@ -0,0 +1,233 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getAdjustedBackgroundMortalityRate(long) <em>Get Adjusted Background Mortality Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabel() <em>Create Disease Model Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabelValue() <em>Create Disease Model Label Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelState() <em>Create Disease Model State</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState, org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createInfector() <em>Create Infector</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getAdjustedBackgroundBirthRate(long) <em>Get Adjusted Background Birth Rate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class DiseaseModelTest extends TestCase {
+
+	/**
+	 * The population identifier to use for testing disease models.
+	 */
+	final public static String TEST_POPULATION_IDENTIFIER = PopulationLabel.HUMAN;
+
+	/**
+	 * This is the rate at which population members (on average) transition from
+	 * all of the other states (except <em>Pre-Born</em>) to the state
+	 * <em>Dead</em>, per time period. Units: population members
+	 * 
+	 * @see StandardDiseaseModel#getBackgroundMortalityRate()
+	 */
+	public static final double MORTALITY_RATE = 0.01;
+
+	/**
+	 * The fixture for this Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModel fixture = null;
+
+	/**
+	 * Constructs a new Disease Model test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(DiseaseModel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DiseaseModel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getAdjustedBackgroundMortalityRate(long) <em>Get Adjusted Background Mortality Rate</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#getAdjustedBackgroundMortalityRate(long)
+	 * @generated NOT
+	 */
+	public void testGetAdjustedBackgroundMortalityRate__long() {
+		final DiseaseModel fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(
+				fixture.getAdjustedBackgroundMortalityRate(2 * fixture
+						.getTimePeriod()), (2 * fixture
+						.getBackgroundMortalityRate())));
+	} // testGetAdjustedBackgroundMortalityRate__long
+
+	/**
+	 * test the sanity of the fixture
+	 */
+	public void testFixtureSanity() {
+		final DiseaseModel fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabel() <em>Create Disease Model Label</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabel()
+	 * @generated NOT
+	 */
+	public void testCreateDiseaseModelLabel() {
+		final DiseaseModel diseaseModel = getFixture();
+		if (!(diseaseModel instanceof AggregatingSIDiseaseModel)) {
+		final DiseaseModelLabel dml = diseaseModel.createDiseaseModelLabel();
+		assertTrue(dml.eClass().equals(getDiseaseModelLabelClass()));
+		}
+	} // testCreateDiseaseModelLabel
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabelValue() <em>Create Disease Model Label Value</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelLabelValue()
+	 * @generated NOT
+	 */
+	public void testCreateDiseaseModelLabelValue() {
+		// TODO: implement this operation test method
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelState() <em>Create Disease Model State</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#createDiseaseModelState()
+	 * @generated NOT
+	 */
+	public void testCreateDiseaseModelState() {
+		final DiseaseModel diseaseModel = getFixture();
+		if (!(diseaseModel instanceof AggregatingSIDiseaseModel)) {
+
+			final DiseaseModelState dms = diseaseModel
+					.createDiseaseModelState();
+			assertTrue(dms.eClass().equals(getDiseaseModelStateClass()));
+		}
+	} // testCreateDiseaseModelState
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState, org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}' operation.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState, org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 * @generated
+	 */
+	public void testInitializeDiseaseState__DiseaseModelState_DiseaseModelLabel() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}' operation.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 * @generated
+	 */
+	public void testInitializeDiseaseState__DiseaseModelLabel() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#createInfector() <em>Create Infector</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#createInfector()
+	 * @generated NOT
+	 */
+	public void testCreateInfector() {
+		final DiseaseModel diseaseModel = getFixture();
+		if (!(diseaseModel instanceof AggregatingSIDiseaseModel)) {
+			final Infector infector = diseaseModel.createInfector();
+			assertNotNull(infector);
+			assertTrue(infector.getDiseaseName().equals(
+					fixture.getDiseaseName()));
+			assertTrue(infector.getPopulationIdentifier().equalsIgnoreCase(
+					fixture.getPopulationIdentifier()));
+		}
+
+	} // testCreateInfector
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#getAdjustedBackgroundBirthRate(long) <em>Get Adjusted Background Birth Rate</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#getAdjustedBackgroundBirthRate(long)
+	 * @generated
+	 */
+	public void testGetAdjustedBackgroundBirthRate__long() {
+		// TODO: implement this operation test method
+		assertTrue(true);
+	}
+
+	/**
+	 * @return the EClass of the class this disease model updates
+	 */
+	protected abstract EClass getDiseaseModelLabelClass();
+
+	/**
+	 * @return the EClass of the class this disease model uses to store
+	 *         computation state
+	 */
+	protected abstract EClass getDiseaseModelStateClass();
+
+} // DiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTestUtil.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTestUtil.java
new file mode 100644
index 0000000..73432b0
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseaseModelTestUtil.java
@@ -0,0 +1,888 @@
+// DiseaseModelTestUtil.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest;
+import org.eclipse.stem.definitions.adapters.spatial.geo.InlineLatLongDataProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.SegmentBuilder;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.RelativePhysicalRelationshipLabel;
+import org.eclipse.stem.definitions.labels.TransportMode;
+import org.eclipse.stem.definitions.labels.TransportRelationshipLabel;
+import org.eclipse.stem.definitions.labels.impl.CommonBorderRelationshipLabelImpl;
+import org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl;
+import org.eclipse.stem.definitions.nodes.NodesFactory;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+
+/**
+ * This class contains a number of utilities for creating artifacts useful for
+ * testing disease model.
+ */
+public class DiseaseModelTestUtil {
+
+	/**
+	 * The minimum latitude value of the rectangular area to which node spatial
+	 * data is mapped.
+	 */
+	public final static double MIN_LATITUDE_VALUE = 0.0;
+
+	/**
+	 * The maximum latitude value of the rectangular area to which node spatial
+	 * data is mapped.
+	 */
+	public final static double MAX_LATITUDE_VALUE = 50.0;
+
+	/**
+	 * The minimum longitude value of the rectangular area to which node spatial
+	 * data is mapped.
+	 */
+	public final static double MIN_LONGITUDE_VALUE = 0.0;
+
+	/**
+	 * The maximum longitude value of the rectangular area to which node spatial
+	 * data is mapped.
+	 */
+	public final static double MAX_LONGITUDE_VALUE = 100.0;
+
+	/**
+	 * The number of degrees of latitude of the area on the Earth's surface to
+	 * which the nodes are mapped.
+	 */
+	public final static double LATITUDE_HEIGHT = MAX_LATITUDE_VALUE
+			- MIN_LATITUDE_VALUE;
+
+	/**
+	 * The number of degrees of longitude of the area on the Earth's surface to
+	 * which the nodes are mapped.
+	 */
+	public final static double LONGITUDE_WIDTH = MAX_LONGITUDE_VALUE
+			- MIN_LONGITUDE_VALUE;
+
+	/**
+	 * The value used for the population of a node.
+	 */
+	public final static double TEST_POPULATION_COUNT = 100;
+
+	/**
+	 * The value used for area of a node.
+	 */
+	public final static double TEST_AREA = 100.0;
+
+	/**
+	 * The population used for the disease model tests.
+	 */
+	public static final String TEST_POPULATION_IDENTIFIER = PopulationLabel.HUMAN;
+
+	/**
+	 * This is the time period between successive computations of label values.
+	 */
+	public static final long TEST_TRANSPORT_RATE_TIME_PERIOD = STEMTime.Units.DAY.getMilliseconds();
+
+	/**
+	 * The number of humans that travel by air from one node to another.
+	 */
+	public static final int AIR_TRANSPORT_MAX_CAPACITY = 5;
+
+	/**
+	 * The number of humans that travel by road 1 from one node to another.
+	 */
+	public static final int ROAD1_TRANSPORT_MAX_CAPACITY = 3;
+
+	/**
+	 * The number of humans that travel by road 2 from one node to another.
+	 */
+	public static final int ROAD2_TRANSPORT_MAX_CAPACITY = 2;
+
+	/**
+	 * The name of a road connecting two nodes together in the graph.
+	 */
+	public static final String ROAD1_TRANSPORT_ID = "road1";
+
+	/**
+	 * The name of a road connecting two nodes together in the graph.
+	 */
+	public static final String ROAD2_TRANSPORT_ID = "road2";
+
+	/**
+	 * The number of kilometers of common border that two nodes share.
+	 */
+	public static final int COMMON_BORDER_LENGTH = 10;
+
+	/**
+	 * The identifier used for air transport
+	 */
+	public static final String AIR_TRANSPORT_ID = "aircanada";
+
+	/**
+	 * The difference between two double values that constitutes inequality
+	 */
+	public static final double DOUBLE_EQUALITY_TOLERANCE = 0.02;
+
+	/**
+	 * @param v1
+	 *            a double
+	 * @param v2
+	 *            a double
+	 * @return <code>true</code> if the two double values differ than by less
+	 *         than {@link #DOUBLE_EQUALITY_TOLERANCE} and so should be
+	 *         considered to be equal.
+	 */
+	public static final boolean closeEnough(final double v1, final double v2) {
+		return Math.abs(v1 - v2) < DOUBLE_EQUALITY_TOLERANCE;
+	} // closeEnough
+
+	/**
+	 * @param scenarioDecorators
+	 * @param model
+	 * @return a scenario
+	 */
+	public static Scenario createLatticeScenario(
+			final Collection<Decorator> scenarioDecorators, final Model model) {
+		final Scenario retValue = ScenarioFactory.eINSTANCE.createScenario();
+		final DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc.setTitle(model.getDublinCore().getTitle());
+
+		retValue.setModel(model);
+
+		retValue.setSequencer(SequentialSequencerTest.createFixture());
+
+		// Scenario Decorators
+		retValue.getScenarioDecorators().addAll(scenarioDecorators);
+
+		return retValue;
+	} // createLatticeScenario
+
+	/**
+	 * Create a Scenario with a lattice for a graph
+	 * 
+	 * @param nodeDecorators
+	 *            the node decorators for the model
+	 * @param numRows
+	 *            the number of rows of nodes in the lattice
+	 * @param numColumns
+	 *            the number of columns of nodes in the lattice
+	 * @param populationCount
+	 *            the (Default: human) population at each node
+	 * @param area
+	 *            the area (km^2) of each node
+	 * 
+	 * @return the scenario
+	 */
+	// public static Scenario createLatticeScenario(
+	// final Collection<NodeDecorator> nodeDecorators, final int numRows,
+	// final int numColumns, final double populationCount, final double area) {
+	// final Scenario retValue = ScenarioFactory.eINSTANCE.createScenario();
+	//
+	// // Model
+	// final Model model = createLatticeModel(nodeDecorators, numRows,
+	// numColumns, populationCount, area);
+	//		
+	// // Scenario decorators
+	// final List<Decorator> scenarioDecorators = get
+	// // Sequencer
+	// retValue.setSequencer(SequentialSequencerTest.createFixture());
+	//
+	// // Dublin Core
+	// final DublinCore dc = retValue.getDublinCore();
+	// dc.populate();
+	// dc.setTitle(createScenarioTitle(canonicalScenarioDecorators,
+	// nodeDecorators, numRows, numColumns, populationCount, area));
+	//
+	// // Scenario Decorators
+	// retValue.getDecorators().addAll(canonicalScenarioDecorators);
+	//
+	// // Model
+	// retValue.setModel(model);
+	//
+	// assert retValue.sane();
+	//
+	// return retValue;
+	// } // createLatticeScenario
+	/**
+	 * This method creates a Model where the nodes are interconnected as in a
+	 * lattice.
+	 * 
+	 * @param nodeDecorators
+	 *            the node decorators for the model
+	 * @param numRows
+	 *            the number of rows of nodes in the lattice
+	 * @param numColumns
+	 *            the number of columns of nodes in the lattice
+	 * @param populationCount
+	 *            the (Default: human) population at each node
+	 * @param area
+	 *            the area (km^2) of each node
+	 * @return the model
+	 */
+	public static Model createLatticeModel(
+			final Collection<NodeDecorator> nodeDecorators, final int numRows,
+			final int numColumns, final double populationCount,
+			final double area) {
+		final Model retValue = ModelFactory.eINSTANCE.createModel();
+		final DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc.setTitle(createModelTitle(nodeDecorators, numRows, numColumns,
+				populationCount, area));
+
+		retValue.getNodeDecorators().addAll(nodeDecorators);
+		final Graph latticeGraph = createLatticeGraph(numRows, numColumns,
+				populationCount, area);
+		retValue.getGraphs().add(latticeGraph);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createLatticeModel
+
+	/**
+	 * This method creates a graph where the nodes are interconnected as in a
+	 * lattice.
+	 * 
+	 * @param numRows
+	 *            the number of rows of nodes in the lattice
+	 * @param numColumns
+	 *            the number of columns of nodes in the lattice
+	 * @param populationCount
+	 *            the (Default: human) population at each node
+	 * @param area
+	 *            the area (km^2) of each node
+	 * @return graph that is a lattice of nodes.
+	 */
+	public static Graph createLatticeGraph(final int numRows,
+			final int numColumns, final double populationCount,
+			final double area) {
+
+		final Node nodeHolder[][] = new Node[numRows][numColumns];
+		final Graph retValue = GraphFactory.eINSTANCE.createGraph();
+
+		final DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc
+				.setTitle(createGraphTitle(numRows, numColumns,
+						populationCount, area));
+
+		// Create the nodes and put them into the graph
+		for (int row = 0; row < numRows; row++) {
+			for (int column = 0; column < numColumns; column++) {
+				final Region regionNode = createRegionNode(row, column);
+				nodeHolder[row][column] = regionNode;
+				retValue.putNode(regionNode);
+			} // for each column
+		} // for each row
+
+		// Add the Population and Area labels
+		for (int row = 0; row < numRows; row++) {
+			for (int column = 0; column < numColumns; column++) {
+				final Node node = nodeHolder[row][column];
+
+				// Population
+				retValue.putNodeLabel(createPopulationLabel(
+						TEST_POPULATION_IDENTIFIER, populationCount, node));
+
+				// Area
+				retValue.putNodeLabel(createAreaLabel(area, node));
+			} // for each column
+		} // for each row
+
+		// Now add relationships
+
+		// Do the first row by itself
+		for (int column = 1; column < numColumns; column++) {
+			addRelationEdges(nodeHolder[0][column - 1], nodeHolder[0][column],
+					retValue);
+		} // for column
+
+		// Added the physical relations
+		for (int row = 1; row < numRows; row++) {
+			for (int column = 1; column < numColumns; column++) {
+				addRelationEdges(nodeHolder[row][column - 1],
+						nodeHolder[row][column], retValue);
+				addRelationEdges(nodeHolder[row - 1][column],
+						nodeHolder[row][column], retValue);
+			} // for each column
+		} // for each row
+
+		// Do the first column by itself
+		for (int row = 1; row < numRows; row++) {
+			addRelationEdges(nodeHolder[row - 1][0], nodeHolder[row][0],
+					retValue);
+		} // for row
+
+		// Add the spatial specification to the spatial attribute of each node's
+		// dublin core instance and for each edge. The value for the nodes will
+		// be a rectangular area expressed as a set of lat/long points that
+		// layout a polygon. The position of the polygon will at position that
+		// matches the position (row, column) of the node in the lattice.
+		addSpatialSpecifications(nodeHolder);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createLatticeGraph
+
+	/**
+	 * Add the spatial specification to the spatial attribute of each node's
+	 * dublin core instance. The value will be a retangular area expressed as a
+	 * set of lat/long points that layout a polygon. The position of the polygon
+	 * will at position that matches the position (row, column) of the node in
+	 * the lattice. Node at position [0][0] will be in the upper left while the
+	 * node at positon [numrows][numcolumns] will be in the lower right of the
+	 * rectangular area.
+	 * 
+	 * @param nodeHolder
+	 *            the array that holds the nodes of the lattic
+	 */
+	private static void addSpatialSpecifications(final Node[][] nodeHolder) {
+
+		// First run through all of the nodes creating a polygon for their
+		// border and adding the data as an inline value in the spatial
+		// attribute of the node's dublin core.
+		for (int row = 0; row < nodeHolder.length; row++) {
+			for (int column = 0; column < nodeHolder[row].length; column++) {
+				final Node node = nodeHolder[row][column];
+				final LatLong nodeSegments = createNodeBorderLatLongSegments(
+						row, nodeHolder.length, column, nodeHolder[row].length);
+				final String spatialURIString = InlineLatLongDataProvider
+						.createSpatialInlineURIString(nodeSegments);
+				node.getDublinCore().setSpatial(spatialURIString);
+			} // for each column
+		} // for each row
+
+		// Now do all the edges, we'll start in the upper right and do edges
+		// between successive pairs of nodes.
+		for (int row = 0; row < nodeHolder.length - 1; row++) {
+			for (int column = 0; column < nodeHolder[row].length - 1; column++) {
+
+				// First do the edges to the right
+				final LatLong edgeSegmentsRight = createEdgeLatLongSegments(
+						row, column, row, column + 1, nodeHolder.length,
+						nodeHolder[row].length);
+
+				final String edgeSpatialAttributeRight = InlineLatLongDataProvider
+						.createSpatialInlineURIString(edgeSegmentsRight);
+
+				for (Edge edge : getEdgesBetweenNodes(nodeHolder[row][column],
+						nodeHolder[row][column + 1])) {
+					edge.getDublinCore().setSpatial(edgeSpatialAttributeRight);
+				}
+
+				// Then do the edges below
+				final LatLong edgeSegmentsBelow = createEdgeLatLongSegments(
+						row, column, row + 1, column, nodeHolder.length,
+						nodeHolder[row].length);
+
+				final String edgeSpatialAttributeBelow = InlineLatLongDataProvider
+						.createSpatialInlineURIString(edgeSegmentsBelow);
+
+				for (Edge edge : getEdgesBetweenNodes(nodeHolder[row][column],
+						nodeHolder[row + 1][column])) {
+					edge.getDublinCore().setSpatial(edgeSpatialAttributeBelow);
+				}
+			} // for each column
+		} // for each row
+
+	} // addSpatialSpecifications
+
+	/**
+	 * @param node1
+	 * @param node2
+	 * @return all the edges between the two nodes
+	 */
+	private static List<Edge> getEdgesBetweenNodes(Node node1, Node node2) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+		for (Iterator edgeIterator = node1.getEdges().iterator(); edgeIterator
+				.hasNext();) {
+			final Edge edge = (Edge) edgeIterator.next();
+			if (edge.getOtherNode(node1) == node2) {
+				retValue.add(edge);
+			}
+		}
+		return retValue;
+	} // getEdgesBetweenNodes
+
+	/**
+	 * @param row
+	 *            the row in the lattice of the node
+	 * @param numRows
+	 *            the total number of rows in the lattice
+	 * @param column
+	 *            the column in the lattice of the node
+	 * @param numColumns
+	 *            the total number of columns in the lattice
+	 * @return a list of lat/long polygons/lines for the node
+	 */
+	private static LatLong createNodeBorderLatLongSegments(final int row,
+			final int numRows, final int column, final int numColumns) {
+		final LatLong retValue = new LatLong();
+		final double nodeLatHeight = LATITUDE_HEIGHT / numRows;
+		final double nodeLongWidth = LONGITUDE_WIDTH / numColumns;
+
+		final double lowerLeftLat = MIN_LATITUDE_VALUE + (numRows - row - 1)
+				* nodeLatHeight;
+		final double lowerLeftLong = MIN_LONGITUDE_VALUE + column
+				* nodeLongWidth;
+
+		final double upperRightLat = lowerLeftLat + nodeLatHeight;
+		final double upperRightLong = lowerLeftLong + nodeLongWidth;
+
+		final SegmentBuilder sb = new SegmentBuilder();
+
+		// We just make a rectangle...
+		sb.add(lowerLeftLat, lowerLeftLong);
+		sb.add(upperRightLat, lowerLeftLong);
+		sb.add(upperRightLat, upperRightLong);
+		sb.add(lowerLeftLat, upperRightLong);
+		sb.add(lowerLeftLat, lowerLeftLong);
+		retValue.add(sb.toSegment());
+
+		return retValue;
+	} // createNodeBorderLatLongSegments
+
+	/**
+	 * @param node1Row
+	 * @param node1Column
+	 * @param node2Row
+	 * @param node2Column
+	 * @param length
+	 * @param length2
+	 * @return a list of a lat/long line between the centers of the two nodes.
+	 */
+	private static LatLong createEdgeLatLongSegments(int node1Row,
+			int node1Column, int node2Row, int node2Column, int numRows,
+			int numColumns) {
+		final LatLong retValue = new LatLong();
+		final double nodeLatHeight = LATITUDE_HEIGHT / numColumns;
+		final double nodeLongWidth = LONGITUDE_WIDTH / numRows;
+
+		final double relativeNodeCenterLat = nodeLatHeight / 2.0;
+		final double relativeNodeCenterLong = nodeLongWidth / 2.0;
+
+		final double node1LowerLeftLat = MIN_LATITUDE_VALUE
+				+ (numRows - node1Row - 1) * nodeLatHeight;
+		final double node1LowerLeftLong = MIN_LONGITUDE_VALUE + node1Column
+				* nodeLongWidth;
+
+		final double node2LowerLeftLat = MIN_LATITUDE_VALUE
+				+ (numRows - node2Row - 1) * nodeLatHeight;
+		final double node2LowerLeftLong = MIN_LONGITUDE_VALUE + node2Column
+				* nodeLongWidth;
+
+		final SegmentBuilder sb = new SegmentBuilder();
+		// We just make a straight line between the centers...
+		sb.add(node1LowerLeftLat + relativeNodeCenterLat, node1LowerLeftLong
+				+ relativeNodeCenterLong);
+		sb.add(node2LowerLeftLat + relativeNodeCenterLat, node2LowerLeftLong
+				+ relativeNodeCenterLong);
+
+		retValue.add(sb.toSegment());
+
+		return retValue;
+	} // createEdgeLatLongSegments
+
+	/**
+	 * @param node1
+	 * @param node2
+	 * @param graph
+	 *            the graph to get the edges
+	 */
+	private static void addRelationEdges(final Node node1, final Node node2,
+			final Graph graph) {
+		for (Edge edge : createRelationEdges(node1, node2)) {
+			graph.putEdge(edge);
+		}
+	} // addRelationEdges
+
+	/**
+	 * @param node1
+	 *            the first node
+	 * @param node2
+	 *            the second node
+	 * @return a list of edges that represent the relationships between two
+	 *         nodes
+	 */
+	private static List<Edge> createRelationEdges(final Node node1,
+			final Node node2) {
+		final List<Edge> retValue = new ArrayList<Edge>();
+
+		// Adjacency
+		retValue.add(createAdjacencyEdge(node1, node2));
+
+		// Common Border
+		retValue.add(CommonBorderRelationshipLabelImpl
+				.createCommonBorderRelationship(node1, node2,
+						COMMON_BORDER_LENGTH));
+
+		final TestEdgeDecorator1 ted = DecoratorsFactory.eINSTANCE
+		.createTestEdgeDecorator1();
+		// Air transport
+		retValue.add(TransportRelationshipLabelImpl
+				.createTransportRelationship(node1, node2,
+						TransportMode.AIR_LITERAL, AIR_TRANSPORT_ID,
+						TEST_POPULATION_IDENTIFIER,
+						TEST_TRANSPORT_RATE_TIME_PERIOD,
+						AIR_TRANSPORT_MAX_CAPACITY,ted));
+
+		// Road transport
+		retValue.add(TransportRelationshipLabelImpl
+				.createTransportRelationship(node1, node2,
+						TransportMode.ROAD_LITERAL, ROAD1_TRANSPORT_ID,
+						TEST_POPULATION_IDENTIFIER, STEMTime.Units.DAY.getMilliseconds(),
+						ROAD1_TRANSPORT_MAX_CAPACITY,ted));
+
+		// Road transport (one-way)
+		retValue.add(TransportRelationshipLabelImpl
+				.createTransportRelationship(node1, node2,
+						TransportMode.ROAD_LITERAL, ROAD2_TRANSPORT_ID,
+						TEST_POPULATION_IDENTIFIER,
+						TEST_TRANSPORT_RATE_TIME_PERIOD,
+						ROAD2_TRANSPORT_MAX_CAPACITY, true, ted));
+
+		return retValue;
+	} // createRelationEdges
+
+	/**
+	 * @param area
+	 *            the area of the node
+	 * @param node
+	 *            the node
+	 * @return an AreaLabel for the node
+	 */
+	private static AreaLabel createAreaLabel(final double area, final Node node) {
+		final AreaLabel retValue = LabelsFactory.eINSTANCE.createAreaLabel();
+		retValue.getCurrentAreaValue().setArea(area);
+		node.getLabels().add(retValue);
+		return retValue;
+	} // createAreaLabel
+
+	/**
+	 * @param populationCount
+	 *            number of (Default: human) population members at the node
+	 * @param node
+	 *            the node
+	 * @return a population label
+	 */
+	private static PopulationLabel createPopulationLabel(
+			final String populationIdentifier, final double populationCount,
+			final Node node) {
+		final PopulationLabel retValue = LabelsFactory.eINSTANCE
+				.createPopulationLabel();
+		retValue.setPopulationIdentifier(populationIdentifier);
+		retValue.getCurrentPopulationValue().setCount(populationCount);
+		node.getLabels().add(retValue);
+		return retValue;
+	} // createPopulationLabel
+
+	/**
+	 * Create a single populated node. This is used by the JUnit tests for
+	 * disease models which need to have a disease model label that has an
+	 * associated node.
+	 * 
+	 * 
+	 * @return a node
+	 */
+	public static Region createPopulationRegionNode() {
+		return createPopulationRegionNode(TEST_POPULATION_IDENTIFIER);
+	} // createPopulationRegionNode
+
+	/**
+	 * Create a single populated node. This is used by the JUnit tests for
+	 * disease models which need to have a disease model label that has an
+	 * associated node.
+	 * 
+	 * @param populationIdentifier
+	 *            the identifier of the population
+	 * 
+	 * 
+	 * @return a node
+	 */
+	public static Region createPopulationRegionNode(
+			final String populationIdentifier) {
+		return createPopulationRegionNode(populationIdentifier,
+				TEST_POPULATION_COUNT, TEST_AREA);
+	} // createPopulationRegionNode
+
+	/**
+	 * Create a single populated node. This is used by the JUnit tests for
+	 * disease models which need to have a disease model label that has an
+	 * associated node.
+	 * 
+	 * @param populationIdentifier
+	 *            the identifier of the population
+	 * 
+	 * @param populationCount
+	 *            the number of population members
+	 * @param area
+	 *            the area of the node (km^2)
+	 * @return a node
+	 */
+	public static Region createPopulationRegionNode(
+			final String populationIdentifier, final double populationCount,
+			final double area) {
+		return createPopulationRegionNode(0, 0, populationIdentifier,
+				populationCount, area);
+	} // createPopulationRegionNode
+
+	/**
+	 * Create a single populated node. This is used by the JUnit tests for
+	 * disease models which need to have a disease model label that has an
+	 * associated node.
+	 * 
+	 * @param row
+	 *            the row index of the node
+	 * @param column
+	 *            the column index of the node
+	 * @param populationIdentifier
+	 *            the identifier of the population
+	 * @param populationCount
+	 *            the number of population members
+	 * @param area
+	 *            the area of the node (km^2)
+	 * @return a node
+	 */
+	public static Region createPopulationRegionNode(final int row,
+			final int column, final String populationIdentifier,
+			final double populationCount, final double area) {
+		final Region retValue = createRegionNode(row, column);
+
+		// Population
+		createPopulationLabel(populationIdentifier, populationCount, retValue);
+
+		// Area
+		createAreaLabel(area, retValue);
+		return retValue;
+	} // createPopulationRegionNode
+
+	/**
+	 * @param row
+	 *            the row of the node in the lattice
+	 * @param column
+	 *            the column of the node in the lattice
+	 * @return a node
+	 */
+	private static Region createRegionNode(int row, int column) {
+		final Region retValue = NodesFactory.eINSTANCE.createRegion();
+
+		final DublinCore dc = retValue.getDublinCore();
+		dc.setTitle(createNodeTitle(row, column));
+		retValue.setURI(createRegionNodeURI(row, column));
+		return retValue;
+	} // createRegionNode
+
+	/**
+	 * @param row
+	 *            the row of the region in the lattice
+	 * @param column
+	 *            the column of the region in the lattice
+	 * @return a URI for the region node
+	 */
+	public static URI createRegionNodeURI(int row, int column) {
+		URI retValue = STEMURI.createURI(Region.URI_TYPE_REGION_NODE_SEGMENT
+				+ "/" + row + "_" + column);
+		return retValue;
+	} // createRegionNodeURI
+
+	/**
+	 * @param row
+	 *            the row of the node in the lattice
+	 * @param column
+	 *            the column of the node in the lattice
+	 * @return a title for a node
+	 */
+	public static String createNodeTitle(int row, int column) {
+		final StringBuilder sb = new StringBuilder("Node[");
+		sb.append(Integer.toString(row));
+		sb.append(", ");
+		sb.append(Integer.toString(column));
+		sb.append("]");
+		return sb.toString();
+	} // createNodeTitle
+
+	/**
+	 * @param numRows
+	 *            the number of rows of nodes in the lattice
+	 * @param numColumns
+	 *            the number of columns of nodes in the lattice
+	 * @param populationCount
+	 *            the (Default: human) population at each node
+	 * @param area
+	 *            the area (km^2) of each node
+	 * @return a title for a graph
+	 */
+	private static String createGraphTitle(int numRows, int numColumns,
+			double populationCount, double area) {
+		final StringBuilder sb = new StringBuilder("Graph");
+		sb.append(Integer.toString(numRows));
+		sb.append("x");
+		sb.append(Integer.toString(numColumns));
+		sb.append("[");
+		sb.append(Double.toString(populationCount));
+		sb.append(", ");
+		sb.append(area);
+		sb.append("]");
+		return sb.toString();
+	} // createGraphTitle
+
+	/**
+	 * @param nodeDecorators
+	 * @param numRows
+	 * @param numColumns
+	 * @param populationCount
+	 * @param area
+	 * @return the title of the model
+	 */
+	private static String createModelTitle(
+			final Collection<NodeDecorator> nodeDecorators, int numRows,
+			int numColumns, double populationCount, double area) {
+		final StringBuilder sb = new StringBuilder("Model");
+		sb.append(Integer.toString(numRows));
+		sb.append("x");
+		sb.append(Integer.toString(numColumns));
+		for (Iterator<NodeDecorator> nodeDecoratorIter = nodeDecorators
+				.iterator(); nodeDecoratorIter.hasNext();) {
+			final NodeDecorator nodeDecorator = nodeDecoratorIter.next();
+			sb.append(nodeDecorator.getDublinCore().getTitle());
+		} // for
+
+		sb.append("[");
+		sb.append(Double.toString(populationCount));
+		sb.append(", ");
+		sb.append(area);
+		sb.append("]");
+		return sb.toString();
+	} // createModelTitle
+
+	// /**
+	// * @param canonicalScenarioDecorators
+	// * @param nodeDecorators
+	// * @param numRows
+	// * @param numColumns
+	// * @param populationCount
+	// * @param area
+	// * @return the title of a scenario
+	// */
+	// private static String createScenarioTitle(@SuppressWarnings("unused")
+	// Collection<Decorator> canonicalScenarioDecorators,
+	// @SuppressWarnings("unused")
+	// Collection<NodeDecorator> nodeDecorators, int numRows,
+	// int numColumns, @SuppressWarnings("unused")
+	// double populationCount, @SuppressWarnings("unused")
+	// double area) {
+	// final StringBuilder sb = new StringBuilder("Scenario");
+	// sb.append(Integer.toString(numRows));
+	// sb.append("x");
+	// sb.append(Integer.toString(numColumns));
+	// return sb.toString();
+	// } // createScenarioTitle
+
+	/**
+	 * @param nodeA
+	 * @param nodeB
+	 * @return an Edge between the two nodes labeled with a relative physical
+	 *         relationship label of "adjacent"
+	 */
+	private static Edge createAdjacencyEdge(final Node nodeA, final Node nodeB) {
+		final Edge retValue = EdgeImpl.createEdge(nodeA, nodeB);
+
+		final RelativePhysicalRelationshipLabel label = LabelsFactory.eINSTANCE
+				.createRelativePhysicalRelationshipLabel();
+		label.setURIOfIdentifiableToBeLabeled(retValue.getURI());
+		label.getCurrentRelationship().setAdjacent(true);
+		retValue.setLabel(label);
+
+		return retValue;
+	} // createAdjacencyEdge
+
+	/**
+	 * @param graph
+	 * @param row
+	 * @param column
+	 * @return the indexed region from the graph
+	 */
+	public static Region getRegion(final Graph graph, final int row,
+			final int column) {
+		Region retValue = null;
+
+		for (Iterator nodeIter = graph.getNodes().values().iterator(); nodeIter
+				.hasNext();) {
+			final Region region = (Region) nodeIter.next();
+			final String name = region.getDublinCore().getTitle();
+			// Is this the region we're looking for?
+			if (name.equals(DiseaseModelTestUtil.createNodeTitle(row, column))) {
+				// Yes
+				retValue = region;
+				break;
+			}
+		}
+		return retValue;
+	} // getRegion
+
+	/**
+	 * Examine the transportation edges coming into nodeA from nodeB and return
+	 * the one with the specified identifier.
+	 * 
+	 * @param nodeA
+	 * @param nodeB
+	 * @param transportId
+	 * @return the transportation edge between two nodes with a specific
+	 *         transport id
+	 */
+	public static Edge getTransportEdge(final Node nodeA, final Node nodeB,
+			final String transportId) {
+		Edge retValue = null;
+
+		for (Edge transportEdge : TransportRelationshipLabelImpl
+				.getTransportEdgesToNode(nodeA,
+						DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER)) {
+			// Is this edge from nodeB?
+			if (transportEdge.getOtherNode(nodeA) == nodeB) {
+				// Yes
+				final TransportRelationshipLabel trl = (TransportRelationshipLabel) transportEdge
+						.getLabel();
+				// Does this edge have the transport id we're looking for?
+				if (trl.getTransportIdentifier().equalsIgnoreCase(transportId)) {
+					// Yes
+					retValue = transportEdge;
+					break;
+				}
+			}
+		} // for each transport edge
+		return retValue;
+	} // getTransportEdge
+
+} // DiseaseModelTestUtil
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseasemodelsAllTests.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseasemodelsAllTests.java
new file mode 100644
index 0000000..35f6a80
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/DiseasemodelsAllTests.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>Diseasemodels</b></em>'
+ * model. <!-- end-user-doc -->
+ * @generated
+ */
+public class DiseasemodelsAllTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new DiseasemodelsAllTests("Diseasemodels Tests"); //$NON-NLS-1$
+		suite.addTest(StandardTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DiseasemodelsAllTests(String name) {
+		super(name);
+	}
+
+} // DiseasemodelsAllTests
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/InfectorTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/InfectorTest.java
new file mode 100644
index 0000000..c1a696e
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/InfectorTest.java
@@ -0,0 +1,72 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.diseasemodels.standard.Infector;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class InfectorTest extends TestCase {
+	/**
+	 * The fixture for this Infector test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected Infector fixture = null;
+
+	/**
+	 * Constructs a new Infector test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InfectorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Infector test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(Infector fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Infector test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Infector getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * test the sanity of the fixture
+	 */
+	public void testFixtureSanity() {
+		final Infector fixture = getFixture();
+		assertTrue(fixture.sane());
+	} // testFixtureSanity
+} // InfectorTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationDecoratorTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationDecoratorTest.java
new file mode 100644
index 0000000..8e9c0b1
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationDecoratorTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.diseasemodels.standard.tests;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import junit.framework.TestCase;

+

+import org.eclipse.stem.core.model.IntegrationDecorator;

+

+/**

+ * <!-- begin-user-doc -->

+ * A test case for the model object '<em><b>Integration Decorator</b></em>'.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public abstract class IntegrationDecoratorTest extends TestCase {

+

+	/**

+	 * The fixture for this Integration Decorator test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IntegrationDecorator fixture = null;

+

+	/**

+	 * Constructs a new Integration Decorator test case with the given name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IntegrationDecoratorTest(String name) {

+		super(name);

+	}

+

+	/**

+	 * Sets the fixture for this Integration Decorator test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void setFixture(IntegrationDecorator fixture) {

+		this.fixture = fixture;

+	}

+

+	/**

+	 * Returns the fixture for this Integration Decorator test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IntegrationDecorator getFixture() {

+		return fixture;

+	}

+

+} //IntegrationDecoratorTest

diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationLabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationLabelTest.java
new file mode 100644
index 0000000..b7612e1
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/IntegrationLabelTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.diseasemodels.standard.tests;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import junit.framework.TestCase;

+

+import org.eclipse.stem.core.graph.IntegrationLabel;

+

+/**

+ * <!-- begin-user-doc -->

+ * A test case for the model object '<em><b>Integration Label</b></em>'.

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public abstract class IntegrationLabelTest extends TestCase {

+

+	/**

+	 * The fixture for this Integration Label test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IntegrationLabel fixture = null;

+

+	/**

+	 * Constructs a new Integration Label test case with the given name.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IntegrationLabelTest(String name) {

+		super(name);

+	}

+

+	/**

+	 * Sets the fixture for this Integration Label test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void setFixture(IntegrationLabel fixture) {

+		this.fixture = fixture;

+	}

+

+	/**

+	 * Returns the fixture for this Integration Label test case.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IntegrationLabel getFixture() {

+		return fixture;

+	}

+

+} //IntegrationLabelTest

diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRDiseaseModelScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRDiseaseModelScenarioTest.java
new file mode 100644
index 0000000..fb80eb6
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRDiseaseModelScenarioTest.java
@@ -0,0 +1,21 @@
+// SEIRDiseaseModelScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is a JUnit test case for SEIR Disease Models Scenarios
+ */
+public abstract class SEIRDiseaseModelScenarioTest extends
+		SIRDiseaseModelScenarioTest {
+	// Nothing
+} // SEIRDiseaseModelScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelTest.java
new file mode 100644
index 0000000..8010062
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelTest.java
@@ -0,0 +1,156 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SEIR Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SEIRLabelTest extends StandardDiseaseModelLabelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SEIRLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new SEIR Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SEIR Label test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SEIRLabel getFixture() {
+		return (SEIRLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return an SEIRLabel instance
+	 */
+	public static SEIRLabel createFixture() {
+		final SEIRLabel retValue = StandardFactory.eINSTANCE.createSEIRLabel();
+		final Region node = DiseaseModelTestUtil
+				.createPopulationRegionNode(DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER);
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		retValue.setDecorator(tnd);
+		DiseaseModelLabelTest.labelRegion(retValue,
+				DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER, node);
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getCurrentSEIRValue() <em>Current SEIR Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getCurrentSEIRValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentSEIRValue() {
+		final SEIRLabel seirLabel = getFixture();
+		final SEIRLabelValue value = seirLabel.getCurrentSEIRValue();
+		assertNotNull(value);
+	} // testGetCurrentSEIRValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SEIRLabel#getNextSEIRValue() <em>Next SEIR Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getNextSEIRValue()
+	 * @generated NOT
+	 */
+	public void testGetNextSEIRValue() {
+		final SEIRLabel seirLabel = getFixture();
+		final SEIRLabelValue value = seirLabel.getNextSEIRValue();
+		assertNotNull(value);
+	} // testGetNextSEIRValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#setE(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getE()
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#setNextE(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIRLabel#getNextE()
+	 */
+	public void testSetGetCurrentNextSEIRLabelE() {
+		final SEIRLabel seirLabel = getFixture();
+		assertTrue(seirLabel.getE() == 0.0);
+		assertTrue(seirLabel.getNextE() == 0.0);
+		seirLabel.setE(SEIRLabelValueTest.TEST_E);
+		seirLabel.setNextE(SEIRLabelValueTest.TEMP_TEST_E);
+		assertTrue(seirLabel.getE() == SEIRLabelValueTest.TEST_E);
+		assertTrue(seirLabel.getNextE() == SEIRLabelValueTest.TEMP_TEST_E);
+		seirLabel.setNextValueValid(true);
+		seirLabel.switchToNextValue();
+		assertTrue(seirLabel.getE() == SEIRLabelValueTest.TEMP_TEST_E);
+		assertTrue(seirLabel.getNextE() == SEIRLabelValueTest.TEST_E);
+	} // testSetGetCurrentNextSEIRLabelE
+
+	/**
+	 * test that the fixture is sane
+	 */
+	public void testFixtureSanity() {
+		final SEIRLabel seirLabel = getFixture();
+		assertTrue(seirLabel.sane());
+	} // testFixtureSanity
+
+} // SEIRLabelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTest.java
new file mode 100644
index 0000000..a45c88d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTest.java
@@ -0,0 +1,161 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SEIR Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SEIRLabelValueTest extends SIRLabelValueTest {
+	/**
+	 * Test value for exposed
+	 */
+	public static final double TEST_E = 4;
+
+	/**
+	 * Test value for exposed
+	 */
+	public static final double TEMP_TEST_E = TEST_E + 40;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SEIRLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new SEIR Label Value test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SEIR Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected SEIRLabelValue getFixture() {
+		return (SEIRLabelValue)fixture;
+	}
+
+	@SuppressWarnings("unused")
+	private SEIRLabelValue getTempFixture() {
+		return (SEIRLabelValue) tempFixture;
+	} // getTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		setTempFixture(createTempFixture());
+	} // setup
+
+	/**
+	 * @return a value for testing
+	 */
+	public static SEIRLabelValue createFixture() {
+		final SEIRLabelValueImpl retValue = new SEIRLabelValueImpl(TEST_S,
+				TEST_E, TEST_I, TEST_R,
+				TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createSEIRLabelValue
+
+	@Override
+	protected DiseaseModelLabelValue createTempFixture() {
+		final SEIRLabelValueImpl retValue = new SEIRLabelValueImpl(TEMP_TEST_S,
+				TEMP_TEST_E, TEMP_TEST_I, TEMP_TEST_R,
+				 TEMP_TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+		setTempFixture(null);
+	} // tearDown
+
+	@Override
+	protected StandardDiseaseModelLabelValue getExpectedConvertToSourceStates(
+			StandardDiseaseModelLabelValue fixture) {
+		final SEIRLabelValue seirLabel = (SEIRLabelValue) fixture;
+		return new SEIRLabelValueImpl(seirLabel.getE(), seirLabel.getI(),
+				 seirLabel.getR(), 0,seirLabel.getS(), fixture
+						.getDiseaseDeaths());
+	} // getExpectedConvertToSourceStates
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureAdditionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SEIRLabelValue seirLabel1 = (SEIRLabelValue) fixture1;
+		final SEIRLabelValue seirLabel2 = (SEIRLabelValue) fixture2;
+		return new SEIRLabelValueImpl(seirLabel1.getS() + seirLabel2.getS(),
+				seirLabel1.getE() + seirLabel2.getE(), seirLabel1.getI()
+						+ seirLabel2.getI(), seirLabel1.getR()
+						+ seirLabel2.getR(), seirLabel1.getDiseaseDeaths()
+						+ seirLabel2.getDiseaseDeaths());
+	} // getExpectedFixtureAdditionResult
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureSubtractionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SEIRLabelValue seirLabel1 = (SEIRLabelValue) fixture1;
+		final SEIRLabelValue seirLabel2 = (SEIRLabelValue) fixture2;
+		return new SEIRLabelValueImpl(seirLabel1.getS() - seirLabel2.getS(),
+				seirLabel1.getE() - seirLabel2.getE(), seirLabel1.getI()
+						- seirLabel2.getI(), seirLabel1.getR()
+						- seirLabel2.getR(), seirLabel1.getDiseaseDeaths()
+						- seirLabel2.getDiseaseDeaths());
+	} // getExpectedFixtureSubtractionResult
+
+	@Override
+	protected double getExpectedPopulationCount(DiseaseModelLabelValue fixture) {
+		final SEIRLabelValue seirLabel = (SEIRLabelValue) fixture;
+		return seirLabel.getS() + seirLabel.getE() + seirLabel.getI()
+				+ seirLabel.getR();
+	} // getExpectedPopulationCount
+
+} // SEIRLabelValueTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTestUtil.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTestUtil.java
new file mode 100644
index 0000000..99c4f4e
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRLabelValueTestUtil.java
@@ -0,0 +1,261 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.NodeImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl;
+
+public abstract class SEIRLabelValueTestUtil extends TestCase{
+	
+	/**
+	 * Number of random values to test with
+	 */
+	private static final int NUMBER_OF_RANDOMS = 0;
+
+	/**
+	 * max double value to be used in the test
+	 */
+	private static final double TEST_MAX_DOUBLE_VALUE = 1e12d;
+
+	/**
+	 * max long value to be used in the test
+	 */
+	private static final long TEST_MAX_LONG_VALUE = Long.MAX_VALUE;
+
+	/**
+	 * if there is a system property with this value then the test will be comperhensive. If not
+	 * then the test will check only few cases.
+	 */
+	private static final String COMPERHANSIVE_TEST = "comperhensive.test";
+
+	private static Boolean comperhensive = null;
+	
+	/**
+	 * This method returns a list of {@link SEIRLabelValueImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {@SEIRLabelValueImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 */
+	public static List<SEIRLabelValueImpl> createRandomSEIRLabelValueImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+	    values[2] = 1.0d;
+		for(int i = (values.length + 1); i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SEIRLabelValueImpl> modelLevelValues = new LinkedList<SEIRLabelValueImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(diseaseDeaths > deaths){
+										continue;
+									}
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SEIRLabelValueImpl modelLableValue = new SEIRLabelValueImpl(s, e, i, r, diseaseDeaths);
+									assertTrue("The SEIRLabelValueImpl: " + modelLableValue + " is insane!", modelLableValue.sane());
+									modelLevelValues.add(modelLableValue);
+									System.out.println(modelLevelValues.size());
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	return modelLevelValues;
+	}
+	
+	private static boolean skipValueSet(double iteration, double diseaseDeaths, double deaths, double s, double e, double i, double r) {
+		if(!isComperhensive()){
+			if(iteration % 500 > 1){
+				//do only one of any 500 permutations
+				System.out.print(".");
+				return true;
+			}
+		}
+		if(diseaseDeaths > deaths){
+			return true;
+		}
+		double population = s + i + r;
+		if(deaths > population){
+			return true;
+		}
+		if(diseaseDeaths > population){
+			return true;
+		}
+		return false;
+	}
+	
+	private static boolean isComperhensive() {
+		if(null != comperhensive ){
+			return comperhensive.booleanValue();
+		}
+		String comperhensiveProperty = System.getProperty(COMPERHANSIVE_TEST);
+		if(null != comperhensiveProperty){
+			comperhensiveProperty = comperhensiveProperty.trim();
+			if(comperhensiveProperty.equalsIgnoreCase("yes") || comperhensiveProperty.equalsIgnoreCase("true")){			
+				comperhensive = new Boolean(true);
+			}
+		}
+		if(null == comperhensive ){
+			comperhensive = new Boolean(false);
+		}
+		return comperhensive.booleanValue();
+	}
+	/**
+	 * Clone the SEIRLabelValueImpl
+	 * @param original will not be modefiles
+	 * @return a clone of 'original'
+	 */
+	public static SEIRLabelValueImpl cloneSEIRLabelValueImpl(SEIRLabelValueImpl original){
+		SEIRLabelValueImpl value =  new SEIRLabelValueImpl(original.getS(), original.getE(), original.getI(),  
+				original.getR(),  original.getDiseaseDeaths());
+		return value;
+	}
+
+	/**
+	 * This method returns a list of {@link SEIRLabelImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {SEIRLabelImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 * 
+	 */
+	public List<SEIRLabelImpl> createRandomSEIRLabelImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+		values[2] = 1.0d;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SEIRLabelImpl> modelLevelValues = new LinkedList<SEIRLabelImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SEIRLabelImpl modelLable = new SEIRLabelTesterImpl(s, e, i, r, births, deaths,	diseaseDeaths, 
+											new SIDiseaseModelStateTesterImpl(), new NodeTesterImpl());
+									assertTrue("The SEIRLabelImpl: " + modelLable + " is insane!", modelLable.sane());
+									modelLevelValues.add(modelLable);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	return modelLevelValues;
+	}
+	
+	
+
+	private class SIDiseaseModelStateTesterImpl extends SIDiseaseModelStateImpl{
+		public SIDiseaseModelStateTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	private class SEIRLabelTesterImpl extends SEIRLabelImpl{
+		/**
+		 * <!-- begin-user-doc -->
+		 * 
+		 * This is used to create instances for testing purposes.
+		 * 
+		 * @param s
+		 *            the number of susceptible population members
+		 * @param e
+		 *            the number of exposed population members
+		 * @param iR
+		 *            the number of recovering infectious population members
+		 * @param iF
+		 *            the number of fatally infectious population members
+		 * @param r
+		 *            the number of recovered population members
+		 * @param births
+		 *            the number of births that have occured in the population
+		 * @param deaths
+		 *            the total number of deaths that have occured in the population
+		 * @param diseaseDeaths
+		 *            the number of deaths due to the disease that have occured in
+		 *            the population
+		 * 
+		 * <!-- end-user-doc -->
+		 * @param newDiseaseModelState 
+		 * @param newNode 
+		 */
+		public SEIRLabelTesterImpl(final double s, final double e, final double i,
+				final double r, final double births, final double deaths,
+				final double diseaseDeaths, final DiseaseModelState newDiseaseModelState, Node newNode) {
+			super();
+			setS(s);
+			setE(e);
+			setI(i);
+			setR(r);
+			setDiseaseDeaths(diseaseDeaths);
+			setDiseaseModelState(newDiseaseModelState);
+			setNode(newNode);
+		} // SEIRLabelValueImpl	
+	}
+
+	private class NodeTesterImpl extends NodeImpl{
+		public NodeTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	public long[] createrandomDeltas() {
+		Random random = new Random();
+		long[] values = new long[2 + NUMBER_OF_RANDOMS];
+		values[0] = TEST_MAX_LONG_VALUE;
+		values[1] = 1l;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextLong() * TEST_MAX_LONG_VALUE;
+		}
+		return values;
+	}
+	
+}
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRTest.java
new file mode 100644
index 0000000..64e7718
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SEIRTest.java
@@ -0,0 +1,101 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SEIR</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SEIR#getAdjustedIncubationRate(long) <em>Get Adjusted Incubation Rate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class SEIRTest extends SIRTest {
+
+	/**
+	 * This coefficient determines the number of population members in the
+	 * <em>Exposed</em> state that become infected per population member in
+	 * the <em>Exposed</em> state, per time period. Units: population members
+	 * 
+	 * @see SEIR#getIncubationRate()
+	 */
+	final public static double INCUBATION_RATE = 0.1;
+
+	/**
+	 * Constructs a new SEIR test case with the given name.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SEIRTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SEIR#getAdjustedIncubationRate(long) <em>Get Adjusted Incubation Rate</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SEIR#getAdjustedIncubationRate(long)
+	 * @generated NOT
+	 */
+	public void testGetAdjustedIncubationRate__long() {
+		final SEIR fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(fixture
+				.getAdjustedIncubationRate(2 * fixture.getTimePeriod()),
+				(2 * fixture.getIncubationRate())));
+	} // testGetAdjustedIncubationRate__long
+
+	/**
+	 * Returns the fixture for this SEIR test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SEIR getFixture() {
+		return (SEIR)fixture;
+	}
+
+	/**
+	 * @return a disease model label value to be used for testing
+	 */
+	@SuppressWarnings("unused")
+	private SEIRLabel getLabelFixture() {
+		return (SEIRLabel) labelFixture;
+	} // getLabelFixture
+
+	@Override
+	protected EClass getDiseaseModelLabelClass() {
+		return StandardPackage.eINSTANCE.getSEIRLabel();
+	} // getDiseaseModelLabelClass
+
+	/**
+	 * @return a label value for testing
+	 */
+	public StandardDiseaseModelLabel createLabelFixture() {
+		return SEIRLabelTest.createFixture();
+	} // createLabelValueFixture
+
+} // SEIRTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelScenarioTest.java
new file mode 100644
index 0000000..bdab0ad
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelScenarioTest.java
@@ -0,0 +1,110 @@
+// SIDiseaseModelScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+
+/**
+ * This class is a JUnit test case for SI Disease Model Scenarios
+ */
+public abstract class SIDiseaseModelScenarioTest extends
+		StandardDiseaseModelScenarioTest {
+
+	/**
+	 * The row index of the region to be infected.
+	 */
+	public static final int INFECTION_ROW_INDEX = 0;
+
+	/**
+	 * The column index of the region to e infected.
+	 */
+	public static final int INFECTION_COLUMN_INDEX = 0;
+
+	/**
+	 * The number of population members to infect.
+	 */
+	public static final int NUMBER_TO_INFECT = 1;
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getScenarioDecorators(Model)
+	 */
+	@Override
+	public Collection<Decorator> getScenarioDecorators(final Model model) {
+		return createInfectors(model);
+	} // getScenarioDecorators
+
+	/**
+	 * Create an infector for each disease model in a model for the single node [{@link #INFECTION_ROW_INDEX}][{@link #INFECTION_COLUMN_INDEX}]
+	 * 
+	 * @param model
+	 *            the model with the disease models
+	 * @return a collection of the infectors
+	 */
+	public static Collection<Decorator> createInfectors(final Model model) {
+		List<Decorator> retValue = new ArrayList<Decorator>();
+
+		// Create an infector for each disease model in the model
+		for (Iterator nodeDecoratorIter = model.getNodeDecorators().iterator(); nodeDecoratorIter
+				.hasNext();) {
+			final NodeDecorator nodeDecorator = (NodeDecorator) nodeDecoratorIter
+					.next();
+			// Is it a disease model?
+			if (nodeDecorator instanceof SI) {
+				// Yes
+				final SI standardDiseaseModel = (SI) nodeDecorator;
+				final URI targetURI = DiseaseModelTestUtil.createRegionNodeURI(
+						INFECTION_ROW_INDEX, INFECTION_COLUMN_INDEX);
+
+				final SIInfector infector = (SIInfector) standardDiseaseModel
+						.createInfector();
+				infector.getDublinCore().setTitle("Infector");
+				infector.setTargetURI(targetURI);
+				infector.setInfectiousCount(NUMBER_TO_INFECT);
+				retValue.add(infector);
+			} // if a standard disease
+		} // for each node decorator
+
+		return retValue;
+	} // createInfectors
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#compareLabelValues(org.eclipse.stem.core.graph.LabelValue,
+	 *      org.eclipse.stem.core.graph.LabelValue)
+	 */
+	@Override
+	protected boolean compareLabelValues(LabelValue lableValue1,
+			LabelValue lableValue2) {
+		boolean retValue = super.compareLabelValues(lableValue1, lableValue2);
+		final SILabelValue siLV1 = (SILabelValue) lableValue1;
+		final SILabelValue siLV2 = (SILabelValue) lableValue2;
+
+		retValue = retValue
+				&& DiseaseModelTestUtil.closeEnough(siLV1.getS(), siLV2.getS());
+		retValue = retValue
+				&& DiseaseModelTestUtil.closeEnough(siLV1.getI(), siLV2.getI());
+		return retValue;
+	} // compareLabelValues
+
+} // SIDiseaseModelScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelStateTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelStateTest.java
new file mode 100644
index 0000000..32ea622
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIDiseaseModelStateTest.java
@@ -0,0 +1,82 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.SIDiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SI Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SIDiseaseModelStateTest extends StandardDiseaseModelStateTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SIDiseaseModelStateTest.class);
+	}
+
+	/**
+	 * Constructs a new SI Disease Model State test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIDiseaseModelStateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SI Disease Model State test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected SIDiseaseModelState getFixture() {
+		return (SIDiseaseModelState)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(StandardFactory.eINSTANCE.createSIDiseaseModelState());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} // SIDiseaseModelStateTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIInfectorTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIInfectorTest.java
new file mode 100644
index 0000000..e261fc8
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIInfectorTest.java
@@ -0,0 +1,84 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SI Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SIInfectorTest extends StandardInfectorTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SIInfectorTest.class);
+	}
+
+	/**
+	 * Constructs a new SI Infector test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIInfectorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SI Infector test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SIInfector getFixture() {
+		return (SIInfector)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		SIInfector temp = StandardFactory.eINSTANCE.createSIInfector();
+		temp.setTargetISOKey("US");
+		setFixture(temp);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} // SIInfectorTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelTest.java
new file mode 100644
index 0000000..2845014
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelTest.java
@@ -0,0 +1,143 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SI Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SILabelTest extends StandardDiseaseModelLabelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SILabelTest.class);
+	}
+
+	/**
+	 * Constructs a new SI Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SI Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SILabel getFixture() {
+		return (SILabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @return an SILabel instance
+	 */
+	public static SILabel createFixture() {
+		final SILabel retValue = StandardFactory.eINSTANCE.createSILabel();
+		final Region node = DiseaseModelTestUtil
+				.createPopulationRegionNode(DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER);
+
+		DiseaseModelLabelTest.labelRegion(retValue,
+				DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER, node);
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getCurrentSIValue() <em>Current SI Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getCurrentSIValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentSIValue() {
+		final SILabel standardLabel = getFixture();
+		final SILabelValue value = (SILabelValue)standardLabel.getCurrentValue();
+		assertNotNull(value);
+	} // testGetCurrentSIValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SILabel#getNextSIValue() <em>Next SI Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getNextSIValue()
+	 * @generated NOT
+	 */
+	public void testGetNextSIValue() {
+		final SILabel standardLabel = getFixture();
+		final SILabelValue value = (SILabelValue)standardLabel.getNextValue();
+		assertNotNull(value);
+	} // testGetNextSIValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setI(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getI()
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#setNextI(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabel#getNextI()
+	 */
+	public void testSetGetCurrentNextSILabelI() {
+		final SILabel siLabel = getFixture();
+		assertTrue(siLabel.getI() == 0.0);
+		assertTrue(siLabel.getNextI() == 0.0);
+		siLabel.setI(SILabelValueTest.TEST_I);
+		siLabel.setNextI(SILabelValueTest.TEMP_TEST_I);
+		assertTrue(siLabel.getI() == SILabelValueTest.TEST_I);
+		assertTrue(siLabel.getNextI() == SILabelValueTest.TEMP_TEST_I);
+		siLabel.setNextValueValid(true);
+		siLabel.switchToNextValue();
+		assertTrue(siLabel.getI() == SILabelValueTest.TEMP_TEST_I);
+		assertTrue(siLabel.getNextI() == SILabelValueTest.TEST_I);
+	} // testSetGetCurrentNextSILabelI
+
+} // SILabelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTest.java
new file mode 100644
index 0000000..f6ac7db
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTest.java
@@ -0,0 +1,171 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SI Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SILabelValueTest extends StandardDiseaseModelLabelValueTest {
+	/**
+	 * Test value for infectious
+	 */
+	public static final double TEST_I = 2;
+
+	/**
+	 * Test value for infectious
+	 */
+	public static final double TEMP_TEST_I = TEST_I + 20;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SILabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new SI Label Value test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SILabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SI Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected SILabelValue getFixture() {
+		return (SILabelValue)fixture;
+	}
+
+	@SuppressWarnings("unused")
+	private SILabelValue getTempFixture() {
+		return (SILabelValue) tempFixture;
+	} // getTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		setTempFixture(createTempFixture());
+	} // setUp
+
+	/**
+	 * @return a value for testing
+	 */
+	public static SILabelValue createFixture() {
+		final SILabelValueImpl retValue = new SILabelValueImpl(TEST_S, TEST_I,
+				TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createFixture
+
+	@Override
+	protected DiseaseModelLabelValue createTempFixture() {
+		final SILabelValueImpl retValue = new SILabelValueImpl(TEMP_TEST_S,
+				TEMP_TEST_I,
+				TEMP_TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+		setTempFixture(null);
+	} // tearDown
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SILabelValue#getI() <em>I</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SILabelValue#getI()
+	 * @generated NOT
+	 */
+	public void testGetI() {
+		final SILabelValue siLabelValue = getFixture();
+		assertTrue(siLabelValue.getI() == TEST_I);
+	} // testGetI
+
+	@Override
+	protected StandardDiseaseModelLabelValue getExpectedConvertToSourceStates(
+			StandardDiseaseModelLabelValue fixture) {
+		final SILabelValue siLabel = (SILabelValue) fixture;
+		return new SILabelValueImpl(siLabel.getI(), siLabel.getS(), 0.0,
+				 fixture
+						.getDiseaseDeaths());
+	} // getExpectedConvertToSourceStates
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureAdditionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SILabelValue siLabel1 = (SILabelValue) fixture1;
+		final SILabelValue siLabel2 = (SILabelValue) fixture2;
+		return new SILabelValueImpl(siLabel1.getS() + siLabel2.getS(), siLabel1
+				.getI()
+				+ siLabel2.getI(),
+				 fixture1.getDiseaseDeaths()
+						+ fixture2.getDiseaseDeaths());
+	} // getExpectedFixtureAdditionResult
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureSubtractionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SILabelValue siLabel1 = (SILabelValue) fixture1;
+		final SILabelValue siLabel2 = (SILabelValue) fixture2;
+		return new SILabelValueImpl(siLabel1.getS() - siLabel2.getS(), siLabel1
+				.getI()
+				- siLabel2.getI(), 
+				 fixture1.getDiseaseDeaths()
+						- fixture2.getDiseaseDeaths());
+	} // getExpectedFixtureSubtractionResult
+
+	@Override
+	protected double getExpectedPopulationCount(DiseaseModelLabelValue fixture) {
+		final SILabelValue siLabel = (SILabelValue) fixture;
+		return siLabel.getS() + siLabel.getI();
+	} // getExpectedPopulationCount
+
+} // SILabelValueTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTestUtil.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTestUtil.java
new file mode 100644
index 0000000..a7521e7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SILabelValueTestUtil.java
@@ -0,0 +1,255 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.NodeImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl;
+
+public abstract class SILabelValueTestUtil extends TestCase{
+	
+	/**
+	 * Number of random values to test with
+	 */
+	private static final int NUMBER_OF_RANDOMS = 0;
+
+	/**
+	 * max double value to be used in the test
+	 */
+	private static final double TEST_MAX_DOUBLE_VALUE = 1e12d;
+
+	/**
+	 * max long value to be used in the test
+	 */
+	private static final long TEST_MAX_LONG_VALUE = Long.MAX_VALUE;
+
+	/**
+	 * if there is a system property with this value then the test will be comperhensive. If not
+	 * then the test will check only few cases.
+	 */
+	private static final String COMPERHANSIVE_TEST = "comperhensive.test";
+
+	private static Boolean comperhensive = null;
+	
+	/**
+	 * This method returns a list of {@link SILabelValueImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {@SILabelValueImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 */
+	public static List<SILabelValueImpl> createRandomSILabelValueImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+	    values[2] = 1.0d;
+		for(int i = (values.length + 1); i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SILabelValueImpl> modelLevelValues = new LinkedList<SILabelValueImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(diseaseDeaths > deaths){
+										continue;
+									}
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SILabelValueImpl modelLableValue = new SILabelValueImpl(s, i,	diseaseDeaths);
+									assertTrue("The SILabelValueImpl: " + modelLableValue + " is insane!", modelLableValue.sane());
+									modelLevelValues.add(modelLableValue);
+									System.out.println(modelLevelValues.size());
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return modelLevelValues;
+	}
+	
+	private static boolean skipValueSet(double iteration, double diseaseDeaths, double deaths, double s, double e, double i,double r) {
+		if(!isComperhensive()){
+			if(iteration % 500 > 1){
+				//do only one of any 500 permutations
+				System.out.print(".");
+				return true;
+			}
+		}
+		if(diseaseDeaths > deaths){
+			return true;
+		}
+		double population = s + i + r;
+		if(deaths > population){
+			return true;
+		}
+		if(diseaseDeaths > population){
+			return true;
+		}
+		return false;
+	}
+	
+	private static boolean isComperhensive() {
+		if(null != comperhensive ){
+			return comperhensive.booleanValue();
+		}
+		String comperhensiveProperty = System.getProperty(COMPERHANSIVE_TEST);
+		if(null != comperhensiveProperty){
+			comperhensiveProperty = comperhensiveProperty.trim();
+			if(comperhensiveProperty.equalsIgnoreCase("yes") || comperhensiveProperty.equalsIgnoreCase("true")){			
+				comperhensive = new Boolean(true);
+			}
+		}
+		if(null == comperhensive ){
+			comperhensive = new Boolean(false);
+		}
+		return comperhensive.booleanValue();
+	}
+	/**
+	 * Clone the SILabelValueImpl
+	 * @param original will not be modefiles
+	 * @return a clone of 'original'
+	 */
+	public static SILabelValueImpl cloneSILabelValueImpl(SILabelValueImpl original){
+		SILabelValueImpl value =  new SILabelValueImpl(original.getS(), original.getI(), 
+				original.getDiseaseDeaths());
+		return value;
+	}
+
+	/**
+	 * This method returns a list of {@link SILabelImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {SILabelImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 * 
+	 */
+	public List<SILabelImpl> createRandomSILabelImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+		values[2] = 1.0d;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SILabelImpl> modelLevelValues = new LinkedList<SILabelImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SILabelImpl modelLable = new SILabelTesterImpl(s, i, births, deaths,	diseaseDeaths, 
+											new SIDiseaseModelStateTesterImpl(), new NodeTesterImpl());
+									assertTrue("The SILabelImpl: " + modelLable + " is insane!", modelLable.sane());
+									modelLevelValues.add(modelLable);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return modelLevelValues;
+	}
+	
+	
+
+	private class SIDiseaseModelStateTesterImpl extends SIDiseaseModelStateImpl{
+		public SIDiseaseModelStateTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	private class SILabelTesterImpl extends SILabelImpl{
+		/**
+		 * <!-- begin-user-doc -->
+		 * 
+		 * This is used to create instances for testing purposes.
+		 * 
+		 * @param s
+		 *            the number of susceptible population members
+		 * @param iR
+		 *            the number of recovering infectious population members
+		 * @param iF
+		 *            the number of fatally infectious population members
+		 * @param births
+		 *            the number of births that have occured in the population
+		 * @param deaths
+		 *            the total number of deaths that have occured in the population
+		 * @param diseaseDeaths
+		 *            the number of deaths due to the disease that have occured in
+		 *            the population
+		 * 
+		 * <!-- end-user-doc -->
+		 * @param newDiseaseModelState 
+		 * @param newNode 
+		 */
+		public SILabelTesterImpl(final double s, final double i,
+				final double births, final double deaths,
+				final double diseaseDeaths, final DiseaseModelState newDiseaseModelState, Node newNode) {
+			super();
+			setS(s);
+			setI(i);
+			setDiseaseDeaths(diseaseDeaths);
+			setDiseaseModelState(newDiseaseModelState);
+			setNode(newNode);
+		} // SILabelValueImpl	
+	}
+
+	private class NodeTesterImpl extends NodeImpl{
+		public NodeTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	public long[] createrandomDeltas() {
+		Random random = new Random();
+		long[] values = new long[2 + NUMBER_OF_RANDOMS];
+		values[0] = TEST_MAX_LONG_VALUE;
+		values[1] = 1l;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextLong() * TEST_MAX_LONG_VALUE;
+		}
+		return values;
+	}
+	
+}
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRDiseaseModelScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRDiseaseModelScenarioTest.java
new file mode 100644
index 0000000..0add625
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRDiseaseModelScenarioTest.java
@@ -0,0 +1,21 @@
+// SIRDiseaseModelScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is a JUnit test case for SIR Disease Models Scenarios
+ */
+public abstract class SIRDiseaseModelScenarioTest extends
+		SIDiseaseModelScenarioTest {
+	// Nothing
+}// SIRDiseaseModelScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRInoculatorTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRInoculatorTest.java
new file mode 100644
index 0000000..3236fef
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRInoculatorTest.java
@@ -0,0 +1,82 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.SIRInoculator;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>SIR Inoculator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SIRInoculatorTest extends SIInfectorTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SIRInoculatorTest.class);
+	}
+
+	/**
+	 * Constructs a new SIR Inoculator test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRInoculatorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SIR Inoculator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SIRInoculator getFixture() {
+		return (SIRInoculator)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		SIRInoculator temp = StandardFactory.eINSTANCE.createSIRInoculator();
+		temp.setTargetISOKey("US");
+		setFixture(temp);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //SIRInoculatorTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelTest.java
new file mode 100644
index 0000000..cca8bbf
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelTest.java
@@ -0,0 +1,157 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SIR Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SIRLabelTest extends StandardDiseaseModelLabelTest {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SIRLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new SIR Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SIR Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SIRLabel getFixture() {
+		return (SIRLabel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @return an SIRLabel instance
+	 */
+	public static SIRLabel createFixture() {
+		final SIRLabel retValue = StandardFactory.eINSTANCE.createSIRLabel();
+		final Region node = DiseaseModelTestUtil
+				.createPopulationRegionNode(DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER);
+
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		retValue.setDecorator(tnd);
+		DiseaseModelLabelTest.labelRegion(retValue,
+				DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER, node);
+		return retValue;
+	} // createFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getCurrentSIRValue() <em>Current SIR Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getCurrentSIRValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentSIRValue() {
+		final SIRLabel sirLabel = getFixture();
+		final SIRLabelValue value = sirLabel.getCurrentSIRValue();
+		assertNotNull(value);
+	} // testGetCurrentSIRValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SIRLabel#getNextSIRValue() <em>Next SIR Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getNextSIRValue()
+	 * @generated NOT
+	 */
+	public void testGetNextSIRValue() {
+		final SIRLabel sirLabel = getFixture();
+		final SIRLabelValue value = sirLabel.getNextSIRValue();
+		assertNotNull(value);
+	} // testGetNextSIRValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setR(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getR()
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#setNextR(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.SIRLabel#getNextR()
+	 */
+	public void testSetGetCurrentNextSIRLabelR() {
+		final SIRLabel sirLabel = getFixture();
+		assertTrue(sirLabel.getR() == 0.0);
+		assertTrue(sirLabel.getNextR() == 0.0);
+		sirLabel.setR(SIRLabelValueTest.TEST_R);
+		sirLabel.setNextR(SIRLabelValueTest.TEMP_TEST_R);
+		assertTrue(sirLabel.getR() == SIRLabelValueTest.TEST_R);
+		assertTrue(sirLabel.getNextR() == SIRLabelValueTest.TEMP_TEST_R);
+		sirLabel.setNextValueValid(true);
+		sirLabel.switchToNextValue();
+		assertTrue(sirLabel.getR() == SIRLabelValueTest.TEMP_TEST_R);
+		assertTrue(sirLabel.getNextR() == SIRLabelValueTest.TEST_R);
+	} // testSetGetCurrentNextSIRLabelR
+
+	/**
+	 * test that the fixture is sane
+	 */
+	public void testFixtureSane() {
+		final SIRLabel sirLabel = getFixture();
+		assertTrue(sirLabel.sane());
+	} // testFixtureSane
+
+} // SIRLabelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTest.java
new file mode 100644
index 0000000..0a58229
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTest.java
@@ -0,0 +1,157 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SIR Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SIRLabelValueTest extends SILabelValueTest {
+	/**
+	 * Test value for recovered
+	 */
+	public static final double TEST_R = 3;
+
+	/**
+	 * Test value for recovered
+	 */
+	public static final double TEMP_TEST_R = TEST_R + 30;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(SIRLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new SIR Label Value test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SIR Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected SIRLabelValue getFixture() {
+		return (SIRLabelValue)fixture;
+	}
+
+	@SuppressWarnings("unused")
+	private SIRLabelValue getTempFixture() {
+		return (SIRLabelValue) tempFixture;
+	} // getTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		setTempFixture(createTempFixture());
+	} // setUp
+
+	/**
+	 * @return a value for testing
+	 */
+	public static SIRLabelValue createFixture() {
+		final SIRLabelValueImpl retValue = new SIRLabelValueImpl(TEST_S,
+				TEST_I, TEST_R, 
+				TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createFixture
+
+	@Override
+	protected DiseaseModelLabelValue createTempFixture() {
+		final SIRLabelValueImpl retValue = new SIRLabelValueImpl(TEMP_TEST_S,
+				TEMP_TEST_I, TEMP_TEST_R, TEMP_TEST_DISEASE_DEATHS);
+		return retValue;
+	} // createTempFixture
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+		setTempFixture(null);
+	} // tearDown
+
+	@Override
+	protected StandardDiseaseModelLabelValue getExpectedConvertToSourceStates(
+			StandardDiseaseModelLabelValue fixture) {
+		final SIRLabelValue siLabel = (SIRLabelValue) fixture;
+		return new SIRLabelValueImpl(siLabel.getI(), siLabel.getR(), 0.0,
+				siLabel.getS(), 
+				fixture.getDiseaseDeaths());
+	} // getExpectedConvertToSourceStates
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureAdditionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SIRLabelValue sirLabel1 = (SIRLabelValue) fixture1;
+		final SIRLabelValue sirLabel2 = (SIRLabelValue) fixture2;
+		return new SIRLabelValueImpl(sirLabel1.getS() + sirLabel2.getS(),
+				sirLabel1.getI() + sirLabel2.getI(), sirLabel1.getR()
+						+ sirLabel2.getR(),  sirLabel1.getDiseaseDeaths()
+						+ sirLabel2.getDiseaseDeaths());
+	} // DiseaseModelLabelValue
+
+	@Override
+	protected DiseaseModelLabelValue getExpectedFixtureSubtractionResult(
+			DiseaseModelLabelValue fixture1, DiseaseModelLabelValue fixture2) {
+		final SIRLabelValue sirLabel1 = (SIRLabelValue) fixture1;
+		final SIRLabelValue sirLabel2 = (SIRLabelValue) fixture2;
+		return new SIRLabelValueImpl(sirLabel1.getS() - sirLabel2.getS(),
+				sirLabel1.getI() - sirLabel2.getI(), sirLabel1.getR()
+						- sirLabel2.getR(), sirLabel1.getDiseaseDeaths()
+						- sirLabel2.getDiseaseDeaths());
+	} // getExpectedFixtureSubtractionResult
+
+	@Override
+	protected double getExpectedPopulationCount(DiseaseModelLabelValue fixture) {
+		final SIRLabelValue sirValue = (SIRLabelValue) fixture;
+		return sirValue.getS() + sirValue.getI() + sirValue.getR();
+	} // getExpectedPopulationCount
+
+} // SIRLabelValueTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTestUtil.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTestUtil.java
new file mode 100644
index 0000000..a2618e3
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRLabelValueTestUtil.java
@@ -0,0 +1,258 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.impl.NodeImpl;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.SIDiseaseModelStateImpl;
+
+public abstract class SIRLabelValueTestUtil extends TestCase{
+	
+	/**
+	 * Number of random values to test with
+	 */
+	private static final int NUMBER_OF_RANDOMS = 0;
+
+	/**
+	 * max double value to be used in the test
+	 */
+	private static final double TEST_MAX_DOUBLE_VALUE = 1e12d;
+
+	/**
+	 * max long value to be used in the test
+	 */
+	private static final long TEST_MAX_LONG_VALUE = Long.MAX_VALUE;
+
+	/**
+	 * if there is a system property with this value then the test will be comperhensive. If not
+	 * then the test will check only few cases.
+	 */
+	private static final String COMPERHANSIVE_TEST = "comperhensive.test";
+
+	private static Boolean comperhensive = null;
+	
+	/**
+	 * This method returns a list of {@link SIRLabelValueImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {@SIRLabelValueImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 */
+	public static List<SIRLabelValueImpl> createRandomSIRLabelValueImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+	    values[2] = 1.0d;
+		for(int i = (values.length + 1); i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SIRLabelValueImpl> modelLevelValues = new LinkedList<SIRLabelValueImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(diseaseDeaths > deaths){
+										continue;
+									}
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SIRLabelValueImpl modelLableValue = new SIRLabelValueImpl(s, i, r, diseaseDeaths);
+									assertTrue("The SIRLabelValueImpl: " + modelLableValue + " is insane!", modelLableValue.sane());
+									modelLevelValues.add(modelLableValue);
+									System.out.println(modelLevelValues.size());
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return modelLevelValues;
+	}
+	
+	private static boolean skipValueSet(double iteration, double diseaseDeaths, double deaths, double s, double e, double i, double r) {
+		if(!isComperhensive()){
+			if(iteration % 500 > 1){
+				//do only one of any 500 permutations
+				System.out.print(".");
+				return true;
+			}
+		}
+		if(diseaseDeaths > deaths){
+			return true;
+		}
+		double population = s + i + r;
+		if(deaths > population){
+			return true;
+		}
+		if(diseaseDeaths > population){
+			return true;
+		}
+		return false;
+	}
+	
+	private static boolean isComperhensive() {
+		if(null != comperhensive ){
+			return comperhensive.booleanValue();
+		}
+		String comperhensiveProperty = System.getProperty(COMPERHANSIVE_TEST);
+		if(null != comperhensiveProperty){
+			comperhensiveProperty = comperhensiveProperty.trim();
+			if(comperhensiveProperty.equalsIgnoreCase("yes") || comperhensiveProperty.equalsIgnoreCase("true")){			
+				comperhensive = new Boolean(true);
+			}
+		}
+		if(null == comperhensive ){
+			comperhensive = new Boolean(false);
+		}
+		return comperhensive.booleanValue();
+	}
+	/**
+	 * Clone the SIRLabelValueImpl
+	 * @param original will not be modefiles
+	 * @return a clone of 'original'
+	 */
+	public static SIRLabelValueImpl cloneSIRLabelValueImpl(SIRLabelValueImpl original){
+		SIRLabelValueImpl value =  new SIRLabelValueImpl(original.getS(), original.getI(), 
+				original.getR(), original.getDiseaseDeaths());
+		return value;
+	}
+
+	/**
+	 * This method returns a list of {@link SIRLabelImpl} objects.
+	 * Some objects in the list are random and some not random at all.
+	 * The ones that are not random represents extreme cases.
+	 * The numeric values for the extreme cases are 0.0, MAX_DOUBLE, and I added the number 1.0. 
+	 * The number of random numbers to test with is NUMBER_OF_RANDOMS.
+	 * Note that with NUMBER_OF_RANDOMS = 0 you will have 4374 permutations of all values of {SIRLabelImpl}.
+	 * If you wish to make NUMBER_OF_RANDOMS higher then 0 then be ready for a long test :-)
+	 * 
+	 */
+	public List<SIRLabelImpl> createRandomSIRLabelImpl(){
+		Random random = new Random();
+		double[] values = new double[3 + NUMBER_OF_RANDOMS];
+		values[0] = 0.0d;
+		values[1] = TEST_MAX_DOUBLE_VALUE;
+		values[2] = 1.0d;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextDouble() * TEST_MAX_DOUBLE_VALUE;
+		}
+		List<SIRLabelImpl> modelLevelValues = new LinkedList<SIRLabelImpl>();
+		int iteration = 0;
+		for(double s : values){
+			for(double e : values){
+				for(double i : values){
+					for(double r : values){
+						for(double births : values){
+							for(double deaths : values){
+								for(double diseaseDeaths : values){
+									if(skipValueSet(iteration++, diseaseDeaths, deaths, s, e, i, r)){
+										continue;
+									}
+									SIRLabelImpl modelLable = new SIRLabelTesterImpl(s, i, r, births, deaths, diseaseDeaths, 
+											new SIDiseaseModelStateTesterImpl(), new NodeTesterImpl());
+									assertTrue("The SIRLabelImpl: " + modelLable + " is insane!", modelLable.sane());
+									modelLevelValues.add(modelLable);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	return modelLevelValues;
+	}
+	
+	
+
+	private class SIDiseaseModelStateTesterImpl extends SIDiseaseModelStateImpl{
+		public SIDiseaseModelStateTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	private class SIRLabelTesterImpl extends SIRLabelImpl{
+		/**
+		 * <!-- begin-user-doc -->
+		 * 
+		 * This is used to create instances for testing purposes.
+		 * 
+		 * @param s
+		 *            the number of susceptible population members
+		 * @param iR
+		 *            the number of recovering infectious population members
+		 * @param iF
+		 *            the number of fatally infectious population members
+		 * @param r
+		 *            the number of recovered population members
+		 * @param births
+		 *            the number of births that have occured in the population
+		 * @param deaths
+		 *            the total number of deaths that have occured in the population
+		 * @param diseaseDeaths
+		 *            the number of deaths due to the disease that have occured in
+		 *            the population
+		 * 
+		 * <!-- end-user-doc -->
+		 * @param newDiseaseModelState 
+		 * @param newNode 
+		 */
+		public SIRLabelTesterImpl(final double s, final double i,
+				final double r, final double births, final double deaths,
+				final double diseaseDeaths, final DiseaseModelState newDiseaseModelState, Node newNode) {
+			super();
+			setS(s);
+			setI(i);
+			setR(r);
+			setDiseaseDeaths(diseaseDeaths);
+			setDiseaseModelState(newDiseaseModelState);
+			setNode(newNode);
+		} // SIRLabelValueImpl	
+	}
+
+	private class NodeTesterImpl extends NodeImpl{
+		public NodeTesterImpl(){
+			super();
+		}
+	}
+	
+	
+	public long[] createrandomDeltas() {
+		Random random = new Random();
+		long[] values = new long[2 + NUMBER_OF_RANDOMS];
+		values[0] = TEST_MAX_LONG_VALUE;
+		values[1] = 1l;
+		for(int i = 3; i < values.length; i++){
+			values[i] = random.nextLong() * TEST_MAX_LONG_VALUE;
+		}
+		return values;
+	}
+	
+}
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRTest.java
new file mode 100644
index 0000000..e431f86
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SIRTest.java
@@ -0,0 +1,92 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SIR</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SIR#getAdjustedImmunityLossRate(long) <em>Get Adjusted Immunity Loss Rate</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class SIRTest extends SITest {
+
+	/**
+	 * This coefficient determines the number of population members that lose
+	 * their immunity to a disease and become Susceptible to the disease per
+	 * population member in the <em>Recovered</em> state. A value of zero
+	 * (0.0), the default, means the population members never lose their
+	 * immunity. Units: population members
+	 * 
+	 * @see SIR#getImmunityLossRate()
+	 */
+	final public static double IMMUNITY_LOSS_RATE = 0.1;
+
+	/**
+	 * Constructs a new SIR test case with the given name.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SIRTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SIR test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SIR getFixture() {
+		return (SIR)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SIR#getAdjustedImmunityLossRate <em>Get Adjusted Immunity Loss Rate</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SIR#getAdjustedImmunityLossRate
+	 * @generated NOT
+	 */
+	public void testGetAdjustedImmunityLossRate__long() {
+		final SIR fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(fixture
+				.getAdjustedImmunityLossRate(2 * fixture.getTimePeriod()),
+				(2 * fixture.getImmunityLossRate())));
+	} // testGetAdjustedImmunityLossRate__long
+
+	@Override
+	protected StandardDiseaseModelLabel createLabelFixture() {
+		return SIRLabelTest.createFixture();
+	} // createLabelValueFixture
+
+	@Override
+	protected EClass getDiseaseModelLabelClass() {
+		return StandardPackage.eINSTANCE.getSIRLabel();
+	} // getDiseaseModelLabelClass
+
+} // SIRTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SITest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SITest.java
new file mode 100644
index 0000000..24e44de
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SITest.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>SI</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedInfectiousMortalityRate(long) <em>Get Adjusted Infectious Mortality Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedTransmissionRate(long) <em>Get Adjusted Transmission Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedRecoveryRate(long) <em>Get Adjusted Recovery Rate</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SI#getEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double) <em>Get Effective Infectious</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.SI#getNormalizedEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double) <em>Get Normalized Effective Infectious</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class SITest extends StandardDiseaseModelTest {
+
+	/**
+	 * This coefficient determines the increased rate at which infectious population
+	 * members die per time period due to the disease. This is
+	 * <em>&mu;<sub>i</sub>.
+	 */
+	final public static double INFECTIOUS_MORTALITY_RATE = 0.1;
+
+	/**
+	 * This coefficient determines the number of population members that become
+	 * infected/exposed per population member in the <em>Infectious</em>
+	 * state, assuming the entire population is in the <em>Susceptible</em>
+	 * state, per time period. This is <em>&beta;</em>
+	 * 
+	 * @see SI#getTransmissionRate()
+	 */
+	final public static double TRANSMISSION_RATE = 0.1;
+
+	/**
+	 * By default this exponent is one (1.0) and the rate of infection scales as
+	 * the product of the Susceptible population and the Infectious population.
+	 * In a nonlinear model (which captures saturation of the immune system for
+	 * Susceptible population), the Infectious term is raise to this power (>=
+	 * 0.0) This exponent should never be less than zero. The default value of 1.0 basically removes it from
+	 * the computation.
+	 * 
+	 * @see SI#getNonLinearityCoefficient()
+	 */
+	final public static double NON_LINEARITY_COEFFICIENT = 1.0;
+
+	/**
+	 * This coefficient determines the number of population members that recover
+	 * from the disease per population member in the <em>Infectious</em>
+	 * state. This is <em>&sigma;</em>.
+	 * 
+	 * @see SI#getRecoveryRate()
+	 */
+	final public static double RECOVERY_RATE = 0.01;
+
+	/**
+	 * Constructs a new SI test case with the given name.
+	 * <!-- begin-user-doc
+	 * -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SITest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this SI test case.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected SI getFixture() {
+		return (SI)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedInfectiousMortalityRate(long) <em>Get Adjusted Infectious Mortality Rate</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getAdjustedInfectiousMortalityRate(long)
+	 * @generated NOT
+	 */
+	public void testGetAdjustedInfectiousMortalityRate__long() {
+		final SI fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(fixture
+				.getAdjustedInfectiousMortalityRate(2 * fixture.getTimePeriod()),
+				(2 * fixture.getInfectiousMortalityRate())));
+	} // testGetAdjustedInfectiousMortalityRate__long
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedTransmissionRate <em>Get Adjusted Transmission Rate</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getAdjustedTransmissionRate
+	 * @generated NOT
+	 */
+	public void testGetAdjustedTransmissionRate__long() {
+		final SI fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(fixture
+				.getAdjustedTransmissionRate(2 * fixture.getTimePeriod()),
+				(2 * fixture.getTransmissionRate())));
+	} // testGetAdjustedTransmissionRate__long
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getAdjustedRecoveryRate <em>Get Adjusted Recovery Rate</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getAdjustedRecoveryRate
+	 * @generated NOT
+	 */
+	public void testGetAdjustedRecoveryRate__long() {
+		final SI fixture = getFixture();
+		assertTrue(DiseaseModelTestUtil.closeEnough(fixture
+				.getAdjustedRecoveryRate(2 * fixture.getTimePeriod()),
+				(2 * fixture.getRecoveryRate())));
+	} // testGetAdjustedRecoveryRate__long
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double) <em>Get Effective Infectious</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double)
+	 * @generated NOT
+	 */
+	public void testGetEffectiveInfectious__Node_StandardDiseaseModelLabel_double() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getNormalizedEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double) <em>Get Normalized Effective Infectious</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getNormalizedEffectiveInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel, double)
+	 * @generated NOT
+	 */
+	public void testGetNormalizedEffectiveInfectious__Node_StandardDiseaseModelLabel_double() {
+		// TODO: implement testGetNormalizedEffectiveInfectious__Node_StandardDiseaseModelLabel_double
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel) <em>Get Physically Adjacent Infectious</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectious(org.eclipse.stem.core.graph.Node, org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel)
+	 * @generated NOT
+	 */
+	public void testGetPhysicallyAdjacentInfectious__Node_StandardDiseaseModelLabel() {
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectious(org.eclipse.stem.core.graph.Node) <em>Get Physically Adjacent Infectious</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.SI#getPhysicallyAdjacentInfectious(org.eclipse.stem.core.graph.Node)
+	 * @generated NOT
+	 */
+	public void testGetPhysicallyAdjacentInfectious__Node() {
+		assertTrue(true);
+	}
+
+	@Override
+	protected StandardDiseaseModelLabel createLabelFixture() {
+		return SILabelTest.createFixture();
+	} // createLabelValueFixture
+
+	@Override
+	protected EClass getDiseaseModelLabelClass() {
+		return StandardPackage.eINSTANCE.getSILabel();
+	} // getDiseaseModelLabelClass
+
+	@Override
+	protected EClass getDiseaseModelStateClass() {
+		return StandardPackage.eINSTANCE.getSIDiseaseModelState();
+	} // getDiseaseModelStateClass
+
+} // SITest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SanityCheckerTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SanityCheckerTest.java
new file mode 100644
index 0000000..fb9e507
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/SanityCheckerTest.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.common.SanityChecker;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Sanity Checker</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class SanityCheckerTest extends TestCase {
+
+	/**
+	 * The fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SanityChecker fixture = null;
+
+	/**
+	 * Constructs a new Sanity Checker test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SanityCheckerTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(SanityChecker fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Sanity Checker test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SanityChecker getFixture() {
+		return fixture;
+	}
+
+} //SanityCheckerTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelTest.java
new file mode 100644
index 0000000..b3c167d
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelTest.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StandardDiseaseModelLabelTest extends
+		DiseaseModelLabelTest {
+	/**
+	 * Constructs a new Disease Model Label test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model Label test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected StandardDiseaseModelLabel getFixture() {
+		return (StandardDiseaseModelLabel)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getCurrentStandardDiseaseModelLabelValue() <em>Current Standard Disease Model Label Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getCurrentStandardDiseaseModelLabelValue()
+	 * @generated NOT
+	 */
+	public void testGetCurrentStandardDiseaseModelLabelValue() {
+		final StandardDiseaseModelLabel standardLabel = getFixture();
+		final StandardDiseaseModelLabelValue value = (StandardDiseaseModelLabelValue)standardLabel
+				.getCurrentValue();
+		assertNotNull(value);
+	} // testGetCurrentStandardDiseaseModelLabelValue
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getNextStandardDiseaseModelLabelValue() <em>Next Standard Disease Model Label Value</em>}'
+	 * feature getter. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getNextStandardDiseaseModelLabelValue()
+	 * @generated NOT
+	 */
+	public void testGetNextStandardDiseaseModelLabelValue() {
+		final StandardDiseaseModelLabel standardLabel = getFixture();
+		final StandardDiseaseModelLabelValue value = (StandardDiseaseModelLabelValue)standardLabel
+				.getNextValue();
+		assertNotNull(value);
+	} // testGetNextStandardDiseaseModelLabelValue
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#setS(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getS()
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#setNextS(double)
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel#getNextS()
+	 */
+	public void testSetGetCurrentNextStandardDiseaseModelLabelS() {
+		final StandardDiseaseModelLabel standardLabel = getFixture();
+		assertTrue(standardLabel.getS() == 0.0);
+		assertTrue(standardLabel.getNextS() == 0.0);
+		standardLabel.setS(StandardDiseaseModelLabelValueTest.TEST_S);
+		standardLabel.setNextS(StandardDiseaseModelLabelValueTest.TEMP_TEST_S);
+		assertTrue(standardLabel.getS() == StandardDiseaseModelLabelValueTest.TEST_S);
+		assertTrue(standardLabel.getNextS() == StandardDiseaseModelLabelValueTest.TEMP_TEST_S);
+		standardLabel.setNextValueValid(true);
+		standardLabel.switchToNextValue();
+		assertTrue(standardLabel.getS() == StandardDiseaseModelLabelValueTest.TEMP_TEST_S);
+		assertTrue(standardLabel.getNextS() == StandardDiseaseModelLabelValueTest.TEST_S);
+	} // testSetGetCurrentNextStandardDiseaseModelLabelS
+
+} // StandardDiseaseModelLabelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelValueTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelValueTest.java
new file mode 100644
index 0000000..9062f89
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelLabelValueTest.java
@@ -0,0 +1,70 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StandardDiseaseModelLabelValueTest extends
+		DiseaseModelLabelValueTest {
+	/**
+	 * Test value for Susceptible
+	 */
+	public static final double TEST_S = 1;
+
+	/**
+	 * Test value for Susceptible
+	 */
+	public static final double TEMP_TEST_S = TEST_S + 10;
+
+	/**
+	 * Constructs a new Disease Model Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model Label Value test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected StandardDiseaseModelLabelValue getFixture() {
+		return (StandardDiseaseModelLabelValue)fixture;
+	}
+
+
+	/**
+	 * The disease model label value represents the additions to the states
+	 * caused by the disease. The conversion creates a different value that
+	 * represents the equivalent subtractions from the source states.
+	 * 
+	 * @param fixture
+	 *            the disease model state label value under test
+	 * @return the equivalent value of the source states
+	 */
+	protected abstract StandardDiseaseModelLabelValue getExpectedConvertToSourceStates(
+			StandardDiseaseModelLabelValue fixture);
+
+} // StandardDiseaseModelLabelValueTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelScenarioTest.java
new file mode 100644
index 0000000..0d63256
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelScenarioTest.java
@@ -0,0 +1,21 @@
+// StandardDiseaseModelScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is a JUnit test case for Standard Disease Models Scenarios
+ */
+public abstract class StandardDiseaseModelScenarioTest extends
+		DiseaseModelScenarioTest {
+	// Nothing
+} // StandardDiseaseModelScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelStateTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelStateTest.java
new file mode 100644
index 0000000..97875a8
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelStateTest.java
@@ -0,0 +1,47 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model State</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StandardDiseaseModelStateTest extends
+		DiseaseModelStateTest {
+	/**
+	 * Constructs a new Disease Model State test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelStateTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model State test case. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	protected StandardDiseaseModelState getFixture() {
+		return (StandardDiseaseModelState)fixture;
+	}
+
+} // StandardDiseaseModelStateTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelTest.java
new file mode 100644
index 0000000..03ee3b9
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardDiseaseModelTest.java
@@ -0,0 +1,310 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.impl.TransportRelationshipLabelImpl;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelState;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalPopulationCount(double) <em>Add To Total Population Count</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#computeTotalPopulationCountReciprocal() <em>Compute Total Population Count Reciprocal</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalArea(double) <em>Add To Total Area</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#calculateDelta(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.emf.common.util.EList) <em>Calculate Delta</em>}</li>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#doModelSpecificAdjustments(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue) <em>Do Model Specific Adjustments</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public abstract class StandardDiseaseModelTest extends DiseaseModelTest {
+
+	/**
+	 * This is initialized to contain a disease label,
+	 */
+	protected StandardDiseaseModelLabel labelFixture = null;
+
+	/**
+	 * This is the period of time (milliseconds) for the diease model rates.
+	 * Value: 1 day.
+	 */
+	final public static long TEST_TIME_PERIOD = STEMTime.Units.DAY.getMilliseconds();
+
+	/**
+	 * Constructs a new Disease Model test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 *            the name of the test
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Disease Model test case.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StandardDiseaseModel getFixture() {
+		return (StandardDiseaseModel)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalPopulationCount(double) <em>Add To Total Population Count</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalPopulationCount(double)
+	 * @generated NOT
+	 */
+	public void testAddToTotalPopulationCount__double() {
+		final StandardDiseaseModel sdm = getFixture();
+		final double totalPopBefore = sdm.getTotalPopulationCount();
+		sdm.addToTotalPopulationCount(1.0);
+		assertTrue(sdm.getTotalPopulationCount() == totalPopBefore + 1.0);
+	} // testAddToTotalPopulationCount__double
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#computeTotalPopulationCountReciprocal() <em>Compute Total Population Count Reciprocal</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#computeTotalPopulationCountReciprocal()
+	 * @generated NOT
+	 */
+	public void testComputeTotalPopulationCountReciprocal() {
+		final StandardDiseaseModel sdm = getFixture();
+		sdm.setTotalPopulationCount(1);
+		sdm.computeTotalPopulationCountReciprocal();
+		assertTrue(sdm.getTotalPopulationCountReciprocal() == 1.0);
+
+		sdm.setTotalPopulationCount(2.0);
+		assertTrue(sdm.getTotalPopulationCountReciprocal() == 1.0);
+
+		sdm.computeTotalPopulationCountReciprocal();
+		assertTrue(sdm.getTotalPopulationCountReciprocal() == 0.5);
+	} // testComputeTotalPopulationCountReciprocal
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalArea(double) <em>Add To Total Area</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#addToTotalArea(double)
+	 * @generated NOT
+	 */
+	public void testAddToTotalArea__double() {
+		final StandardDiseaseModel sdm = getFixture();
+		final double totalAreaBefore = sdm.getTotalArea();
+		sdm.addToTotalArea(1.0);
+		assertTrue(sdm.getTotalArea() == totalAreaBefore + 1.0);
+	} // testAddToTotalArea__double
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#calculateDelta(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.emf.common.util.EList) <em>Calculate Delta</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#calculateDelta(org.eclipse.stem.core.model.STEMTime, long, org.eclipse.emf.common.util.EList)
+	 * @generated
+	 */
+	public void testCalculateDelta__STEMTime_long_EList() {
+		// TODO: implement this operation test method
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#doModelSpecificAdjustments(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue) <em>Do Model Specific Adjustments</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel#doModelSpecificAdjustments(org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue)
+	 * @generated
+	 */
+	public void testDoModelSpecificAdjustments__StandardDiseaseModelLabelValue() {
+		// TODO: implement this operation test method
+		assertTrue(true);
+	}
+
+	/**
+	 * @return a disease model label value to be used for testing
+	 */
+	private StandardDiseaseModelLabel getLabelFixture() {
+		return labelFixture;
+	} // getLabelFixture
+
+	/**
+	 * @param labelFixture
+	 *            the disease model label value for testing
+	 */
+	protected void setLabelFixture(StandardDiseaseModelLabel labelFixture) {
+		this.labelFixture = labelFixture;
+	} // setLabelFixture
+
+	/**
+	 * Create a label value for testing.
+	 */
+	protected abstract StandardDiseaseModelLabel createLabelFixture();
+
+	/**
+	 * test getTransportEdgesToNode
+	 */
+	public void testGetTransportEdgesToNode() {
+		final Graph fixture = DiseaseModelTestUtil.createLatticeGraph(2, 2,
+				DiseaseModelTestUtil.TEST_POPULATION_COUNT,
+				DiseaseModelTestUtil.TEST_AREA);
+		final Node node = DiseaseModelTestUtil.getRegion(fixture, 1, 0);
+
+		final List<Edge> transportEdges = TransportRelationshipLabelImpl
+				.getTransportEdgesToNode(node,
+						DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER);
+		// 2 + 2 reflexive edges + 1 directed in to the node
+		assertTrue(transportEdges.size() == 5);
+	} // testGetTransportEdgesToNode
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState, org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelState,
+	 *      org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 * @generated NOT
+	 */
+	public void testInitializeDiseaseState__DiseaseModelState_DiseaseModelLabel() {
+		final StandardDiseaseModel diseaseModel = getFixture();
+
+		if (!(diseaseModel instanceof AggregatingSIDiseaseModel)) {
+
+			final DiseaseModelLabel dml = getLabelFixture();
+
+			// At this point the fixture has already initialized one disease
+			// model
+			// state so its population and area counts are not zero.
+			assertTrue(diseaseModel.getTotalPopulationCount() == DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == DiseaseModelTestUtil.TEST_AREA);
+
+			DiseaseModelLabelTest.labelRegion(dml,
+					DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER,
+					DiseaseModelTestUtil.createPopulationRegionNode());
+
+			DiseaseModelState dms = diseaseModel.createDiseaseModelState();
+			fixture.initializeDiseaseState(dms, dml);
+
+			assertTrue(diseaseModel.getTotalPopulationCount() == 2 * DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == 2 * DiseaseModelTestUtil.TEST_AREA);
+
+			// Let's do it again...should have twice the accumulated counts in
+			// the
+			// disease model
+			dms = diseaseModel.createDiseaseModelState();
+			fixture.initializeDiseaseState(dms, dml);
+
+			assertTrue(diseaseModel.getTotalPopulationCount() == 3 * DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == 3 * DiseaseModelTestUtil.TEST_AREA);
+		} // if
+	} // testInitializeDiseaseState__DiseaseModelState_DiseaseModelLabel
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel) <em>Initialize Disease State</em>}'
+	 * operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.DiseaseModel#initializeDiseaseState(org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel)
+	 * @generated NOT
+	 */
+	public void testInitializeDiseaseState__DiseaseModelLabel() {
+		final StandardDiseaseModel diseaseModel = getFixture();
+		final DiseaseModelLabel dml = getLabelFixture();
+		if (dml instanceof AggregatingSIDiseaseModel) {
+
+			// At this point the fixture has already initialized one disease
+			// model
+			// state so its population and area counts are not zero.
+			assertTrue(diseaseModel.getTotalPopulationCount() == DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == DiseaseModelTestUtil.TEST_AREA);
+
+			DiseaseModelLabelTest.labelRegion(dml,
+					DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER,
+					DiseaseModelTestUtil.createPopulationRegionNode());
+
+			fixture.initializeDiseaseState(dml);
+			StandardDiseaseModelState dms = (StandardDiseaseModelState) dml
+					.getDiseaseModelState();
+			assertTrue(dms.getAreaRatio() == diseaseModel.getTotalArea()
+					/ DiseaseModelTestUtil.TEST_AREA);
+		}
+	} // testInitializeDiseaseState__DiseaseModelLabel
+
+	/**
+	 * In this test we specify an area for the population label that should be
+	 * used instead of the area of the region.
+	 */
+	public void testInitializeDiseaseState2() {
+		final StandardDiseaseModel diseaseModel = getFixture();
+		if (!(diseaseModel instanceof AggregatingSIDiseaseModel)) {
+
+			// At this point the fixture has already initialized one disease
+			// model
+			// state so its population and area counts are not zero.
+			assertTrue(diseaseModel.getTotalPopulationCount() == DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == DiseaseModelTestUtil.TEST_AREA);
+
+			final DiseaseModelLabel dml = diseaseModel
+					.createDiseaseModelLabel();
+
+			DiseaseModelLabelTest.labelRegion(dml,
+					DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER,
+					DiseaseModelTestUtil.createPopulationRegionNode());
+
+			// Set the area of the population, this should override the area
+			// being
+			// taken from the region.
+			final PopulationLabel populationLabel = dml.getPopulationLabel();
+			populationLabel
+					.setPopulatedArea(DiseaseModelTestUtil.TEST_AREA / 2.0);
+
+			DiseaseModelState dms = diseaseModel.createDiseaseModelState();
+			fixture.initializeDiseaseState(dms, dml);
+
+			assertTrue(diseaseModel.getTotalPopulationCount() == 2 * DiseaseModelTestUtil.TEST_POPULATION_COUNT);
+			assertTrue(diseaseModel.getTotalArea() == 1.5 * DiseaseModelTestUtil.TEST_AREA);
+		}
+	} // testInitializeDiseaseState2
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		setFixture(null);
+		setLabelFixture(null);
+	} // tearDown
+
+} // StandardDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardInfectorTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardInfectorTest.java
new file mode 100644
index 0000000..371a158
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardInfectorTest.java
@@ -0,0 +1,46 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardInfector;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Infector</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StandardInfectorTest extends InfectorTest {
+	/**
+	 * Constructs a new Infector test case with the given name. <!--
+	 * begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardInfectorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Infector test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StandardInfector getFixture() {
+		return (StandardInfector)fixture;
+	}
+
+} // StandardInfectorTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardStochasticDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardStochasticDiseaseModelTest.java
new file mode 100644
index 0000000..1862be3
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardStochasticDiseaseModelTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Stochastic Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public abstract class StandardStochasticDiseaseModelTest extends StochasticDiseaseModelTest {
+	/**
+	 * Constructs a new Stochastic Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardStochasticDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Stochastic Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StandardStochasticDiseaseModel getFixture() {
+		return (StandardStochasticDiseaseModel)fixture;
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise()
+	 * @generated NOT
+	 */
+	public void testComputeNoise() {
+		StandardStochasticDiseaseModelTest.staticComputeNoiseTest();
+	}
+	
+	
+	/**
+	 * static test method. Class is abstract.
+	 */
+	public static void staticComputeNoiseTest() {
+		Random rand = new Random(0);
+		double rTest = rand.nextDouble();
+		// for testing purposes we will test at a gain of 1.0
+		StochasticDiseaseModelImpl.setMAX_GAIN(1.0);
+		double noise = StandardStochasticDiseaseModelImpl.computeNoise(1.0,rand);
+		assertTrue ((noise >= 0.0 )&&(noise <= 2.0));
+	}
+	
+
+} //StandardStochasticDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardTests.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardTests.java
new file mode 100644
index 0000000..4842fc7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StandardTests.java
@@ -0,0 +1,78 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>standard</b></em>'
+ * package. <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardTests extends TestSuite {
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @return
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new StandardTests("standard Tests"); //$NON-NLS-1$
+		suite.addTestSuite(DeterministicSEIRDiseaseModelTest.class);
+		suite.addTestSuite(DeterministicSIDiseaseModelTest.class);
+		suite.addTestSuite(DeterministicSIRDiseaseModelTest.class);
+		suite.addTestSuite(SEIRLabelTest.class);
+		suite.addTestSuite(SEIRLabelValueTest.class);
+		suite.addTestSuite(SIInfectorTest.class);
+		suite.addTestSuite(SILabelTest.class);
+		suite.addTestSuite(SILabelValueTest.class);
+		suite.addTestSuite(SIRLabelTest.class);
+		suite.addTestSuite(SIRLabelValueTest.class);
+		suite.addTestSuite(StochasticSEIRDiseaseModelTest.class);
+		suite.addTestSuite(StochasticSIDiseaseModelTest.class);
+		suite.addTestSuite(StochasticSIRDiseaseModelTest.class);
+		suite.addTestSuite(AggregatingSIDiseaseModelTest.class);
+		suite.addTestSuite(AggregatingSEIRDiseaseModelTest.class);
+		suite.addTestSuite(AggregatingSIRDiseaseModelTest.class);
+		suite.addTestSuite(SIRInoculatorTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardTests(String name) {
+		super(name);
+	}
+
+} // StandardTests
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticDiseaseModelTest.java
new file mode 100644
index 0000000..b16f995
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticDiseaseModelTest.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Stochastic Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class StochasticDiseaseModelTest extends DiseaseModelTest {
+	/**
+	 * Constructs a new Stochastic Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Stochastic Disease Model test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StochasticDiseaseModel getFixture() {
+		return (StochasticDiseaseModel)fixture;
+	}
+
+} //StochasticDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRDiseaseModelTest.java
new file mode 100644
index 0000000..14c5c9f
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRDiseaseModelTest.java
@@ -0,0 +1,305 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import junit.textui.TestRunner;
+
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StochasticSEIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSEIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Stochastic SEIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StochasticSEIRDiseaseModelTest extends SEIRTest {
+
+	public static final long RANDOM_SEED = 1l;
+	public static final double TEST_GAIN = 0.01d;
+	
+	/**
+	 * The name of the test disease (an instance of a disease model)
+	 */
+	public static final String TEST_SEIR_DISEASE_NAME = "Test Stocastic SEIR Disease";
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StochasticSEIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Stochastic SEIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSEIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Stochastic SEIR Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StochasticSEIRDiseaseModel getFixture() {
+		return (StochasticSEIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise()
+	 * @generated NOT
+	 */
+	public void testComputeNoise() {
+		StandardStochasticDiseaseModelTest.staticComputeNoiseTest();
+	}
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSEIRDiseaseModel createFixture() {
+		return createFixture(StandardStochasticDiseaseModelImpl.GAIN_EDEFAULT);
+	} // createFixture
+	
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSEIRDiseaseModel createFixture(double newGain) {
+		return StochasticSEIRDiseaseModelImpl.createStochasticSEIRDiseaseModel(
+				TEST_SEIR_DISEASE_NAME, MORTALITY_RATE,
+				INFECTIOUS_MORTALITY_RATE, TRANSMISSION_RATE, RECOVERY_RATE,
+				IMMUNITY_LOSS_RATE, INCUBATION_RATE, NON_LINEARITY_COEFFICIENT,
+				TEST_TIME_PERIOD, TEST_POPULATION_IDENTIFIER, newGain);
+		
+		
+	} // createFixture
+
+	
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' operation.
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments()
+	 * @generated NOT
+	 */
+	@SuppressWarnings("synthetic-access")
+	public void testModelSpecificAdjustments(){
+		StochasticSEIRDiseaseModelTesterImpl stochasticSEIRDiseaseModel = new StochasticSEIRDiseaseModelTesterImpl();
+		SEIRLabelValueImpl currentSEIR = new SEIRLabelValueImpl(1000d, 50d, 40d, 30d, 20d, 10d);
+		doTest(stochasticSEIRDiseaseModel, currentSEIR);
+	}
+
+//	private void doTestWithPermutations() {
+//		StochasticSEIRDiseaseModelTesterImpl stochasticSEIRDiseaseModel = new StochasticSEIRDiseaseModelTesterImpl();
+//		List<SEIRLabelValueImpl> modelLableValues = SEIRLabelValueTestUtil.createRandomSEIRLabelValueImpl();
+//		
+//		int count1 = 0;
+//		int count2 = 0;
+//		System.out.println();
+//		for(SEIRLabelValueImpl currentSEIR: modelLableValues){
+//			System.out.println(count1++);
+//			for(SEIRLabelValueImpl seirAdditions: modelLableValues){
+//				System.out.println("	" + count2++);
+//				for(SEIRLabelValueImpl seirDeaths: modelLableValues){
+//					//seirDeaths and seirAdditions will be modified my the test method, so we better clone them 
+//					doTest(stochasticSEIRDiseaseModel, currentSEIR,
+//							seirAdditions, seirDeaths);
+//			 	}
+//			}
+//		}
+//	}
+
+	private void doTest(StochasticSEIRDiseaseModelTesterImpl stochasticSEIRDiseaseModel,
+			SEIRLabelValueImpl currentSEIR) {
+		
+		SEIRLabelValueImpl oldSEIR = (SEIRLabelValueImpl)EcoreUtil.copy(currentSEIR);
+		stochasticSEIRDiseaseModel.doModelSpecificAdjustments(currentSEIR, RANDOM_SEED, TEST_GAIN);
+		
+		doCalculateModelSpecificAdjustments(currentSEIR, RANDOM_SEED, TEST_GAIN);
+
+		String state = getState(currentSEIR, oldSEIR);
+		
+		validateModelSpecificAdjustments(currentSEIR,
+				oldSEIR,
+				state);
+	}
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+	
+	
+	private void doCalculateModelSpecificAdjustments(
+			SEIRLabelValueImpl pCurrentSEIR, long pRandomSeed, double pTestGain) {
+		
+		
+		final SEIRLabelValue currentSEIR = (SEIRLabelValue) pCurrentSEIR;
+		Random random = new Random(pRandomSeed);
+		double Inoisy = currentSEIR.getI()* computeNoise(pTestGain, random);
+		currentSEIR.setI(Inoisy);
+		return;
+				
+				
+	}
+
+	private void validateModelSpecificAdjustments(SEIRLabelValueImpl currentSEIR,
+			SEIRLabelValueImpl oldSEIR,
+			String state) {
+
+		
+		try{
+			currentSEIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("currentSEIR is insane, state is: " + state, t);
+		}
+		try{
+			oldSEIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("oldSEIR is insane, state is: " + state, t);
+		}
+
+		
+		
+		assertTrue(String.format("currentSEIR has insane values %s", state), mySanityCheck(currentSEIR));
+		assertTrue(String.format("oldSEIR has insane values %s", state), mySanityCheck(oldSEIR));
+
+	}
+	
+	private boolean checkEqual(SEIRLabelValueImpl pCalculatedSeirAdditions,
+			SEIRLabelValueImpl pNewSeirAdditions) {
+		if((pCalculatedSeirAdditions.getDiseaseDeaths() != pNewSeirAdditions.getDiseaseDeaths()) ||
+				(pCalculatedSeirAdditions.getE() != pNewSeirAdditions.getE()) ||
+				(pCalculatedSeirAdditions.getI() != pNewSeirAdditions.getI()) ||
+				(pCalculatedSeirAdditions.getPopulationCount() != pNewSeirAdditions.getPopulationCount()) ||
+				(pCalculatedSeirAdditions.getR() != pNewSeirAdditions.getR()) ||
+				(pCalculatedSeirAdditions.getS() != pNewSeirAdditions.getS())){
+					return false;
+				}
+		return true;
+	}
+
+	private boolean mySanityCheck(SEIRLabelValueImpl pSeir) {
+		return assertValidDouble(pSeir.getE()) && 
+			assertValidDouble(pSeir.getI()) && 
+			assertValidDouble(pSeir.getR()) && 
+			assertValidDouble(pSeir.getS());
+		
+	}
+
+	private boolean assertValidDouble(double pDouble) {
+		return !(Double.isNaN(pDouble) || Double.isInfinite(pDouble));
+	}
+
+	private String getState(SEIRLabelValueImpl pCurrentSEIR,
+			SEIRLabelValueImpl oldSEIR) {
+		return String.format("\npresent state is: \ncurrentSEIR[%s]\n oldSEIR[%s]", 
+				pCurrentSEIR, oldSEIR);
+	}
+
+	
+	/**
+	 * created just for testings since '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' is protected.
+	 * @author eishay
+	 *
+	 */
+	private class StochasticSEIRDiseaseModelTesterImpl extends StochasticSEIRDiseaseModelImpl{
+
+		public void doModelSpecificAdjustments(
+				StandardDiseaseModelLabelValue pCurrentState,
+				long pRandomSeed, double pTestGain) {
+			setSeed(pRandomSeed);
+			setGain(pTestGain);
+			
+			SEIRLabelValueImpl oldCurrentState = SEIRLabelValueTestUtil.cloneSEIRLabelValueImpl((SEIRLabelValueImpl)pCurrentState);
+			super.doModelSpecificAdjustments(pCurrentState);
+		}
+		
+	}
+	
+} // StochasticSEIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRScenarioTest.java
new file mode 100644
index 0000000..adf7d51
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSEIRScenarioTest.java
@@ -0,0 +1,398 @@
+// StochasticSEIRScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SEIRLabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Stochastic SEIR disease model scenario
+ */
+public class StochasticSEIRScenarioTest extends SEIRDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "StochasticSEIR";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SEIRLabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SEIRLabelValue[][][]>();
+
+	static {
+
+		// These were copied from DeterministicSEIRScenarioTest
+		// 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SEIRLabelValueImpl(99.01, 0.0, 0.98, 0.0, 0.01,
+								0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+						new SEIRLabelValueImpl(99.02, 0.0,
+								0.96, 0.00, 0.02, 0) } } } // new
+				// SEIRLabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+		// 1x2
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x2_KEY,
+						new SEIRLabelValue[][][] {
+						// Step 0
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } },
+								// Step 2
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0) } } } // new
+				// SEIRLabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x3_KEY,
+						new SEIRLabelValue[][][] {
+						// Step 0
+								{ {
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+								// Step 2
+								{ {
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{
+								{
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 1
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 2
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SEIRLabelValue[][][] {
+				// Step 0
+						{
+								{
+
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								} },
+
+						// Step 1
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+											 0)
+
+								} },
+
+						// Step 2
+						{
+								{
+								// N[0,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[0,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[0,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0)
+
+								},
+								{
+
+								// N[1,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[1,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[1,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0)
+
+								},
+								{
+
+								// N[2,0]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[2,1]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0),
+										// N[2,2]
+										new SEIRLabelValueImpl(100, 0, 0, 0, 0,
+												 0)
+
+								} } } // new SEIRLabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		// this is a test with a gain of zero
+		// if MUST return the same result as the deterministic model
+		// because the noise mulitplier is 1.0 for a gain of 0.0
+		retValue.add(StochasticSEIRDiseaseModelTest.createFixture(0.0));
+		
+		// NEW TEST Needed  https://bugs.eclipse.org/bugs/show_bug.cgi?id=186043
+		//
+		// we need to add a test at a higher gain. For a gain > the fuzzy compare (double equality tollerance)
+		// 1. the results should DIFFER from the deterministic result (proves there is noise
+		// 2. the stochastic test should agree with percomputed values
+		// retValue.add(StochasticSEIRDiseaseModelTest.createFixture(0.02));
+		
+		
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SEIRLabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SEIRLabelValue[][][] seirLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return seirLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+} // StochasticSEIRScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIDiseaseModelTest.java
new file mode 100644
index 0000000..d062743
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIDiseaseModelTest.java
@@ -0,0 +1,293 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import junit.textui.TestRunner;
+
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Stochastic SI Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StochasticSIDiseaseModelTest extends SITest {
+
+	public static final long RANDOM_SEED = 1l;
+	public static final double TEST_GAIN = 0.01d;
+	
+	/**
+	 * The name of the test disease (an instance of a disease model)
+	 */
+	public static final String TEST_SI_DISEASE_NAME = "Test Stocastic SI Disease";
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StochasticSIDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Stochastic SI Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Stochastic SI Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StochasticSIDiseaseModel getFixture() {
+		return (StochasticSIDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise()
+	 * @generated NOT
+	 */
+	public void testComputeNoise() {
+		StandardStochasticDiseaseModelTest.staticComputeNoiseTest();
+	}
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSIDiseaseModel createFixture() {
+		return createFixture(StandardStochasticDiseaseModelImpl.GAIN_EDEFAULT);
+	} // createFixture
+	
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSIDiseaseModel createFixture(double newGain) {
+		return StochasticSIDiseaseModelImpl.createStochasticSIDiseaseModel(
+				TEST_SI_DISEASE_NAME, MORTALITY_RATE,
+				INFECTIOUS_MORTALITY_RATE, TRANSMISSION_RATE, RECOVERY_RATE,
+				NON_LINEARITY_COEFFICIENT,
+				TEST_TIME_PERIOD, TEST_POPULATION_IDENTIFIER, newGain);
+		
+	} // createFixture
+
+	
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' operation.
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments()
+	 * @generated NOT
+	 */
+	@SuppressWarnings("synthetic-access")
+	public void testModelSpecificAdjustments(){
+		StochasticSIDiseaseModelTesterImpl stochasticSIDiseaseModel = new StochasticSIDiseaseModelTesterImpl();
+		SILabelValueImpl currentSI = new SILabelValueImpl(1000d, 40d, 20d, 10d);
+		doTest(stochasticSIDiseaseModel, currentSI);
+	}
+
+//	private void doTestWithPermutations() {
+//		StochasticSIDiseaseModelTesterImpl stochasticSIDiseaseModel = new StochasticSIDiseaseModelTesterImpl();
+//		List<SILabelValueImpl> modelLableValues = SILabelValueTestUtil.createRandomSILabelValueImpl();
+//		
+//		int count1 = 0;
+//		int count2 = 0;
+//		System.out.println();
+//		for(SILabelValueImpl currentSI: modelLableValues){
+//			System.out.println(count1++);
+//			for(SILabelValueImpl SIAdditions: modelLableValues){
+//				System.out.println("	" + count2++);
+//				for(SILabelValueImpl SIDeaths: modelLableValues){
+//					//SIDeaths and SIAdditions will be modified my the test method, so we better clone them 
+//					doTest(stochasticSIDiseaseModel, currentSI,
+//							SIAdditions, SIDeaths);
+//			 	}
+//			}
+//		}
+//	}
+
+	private void doTest(StochasticSIDiseaseModelTesterImpl stochasticSIDiseaseModel,
+			SILabelValueImpl currentSI) {
+		stochasticSIDiseaseModel.doModelSpecificAdjustments(currentSI, RANDOM_SEED, TEST_GAIN);
+		
+		SILabelValueImpl oldVal = (SILabelValueImpl)EcoreUtil.copy(currentSI);
+		doCalculateModelSpecificAdjustments(currentSI, RANDOM_SEED, TEST_GAIN);
+
+		String state = getState(currentSI, oldVal);
+		
+		validateModelSpecificAdjustments(currentSI, oldVal,
+				state);
+	}
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+	
+	
+	private void doCalculateModelSpecificAdjustments(
+			SILabelValueImpl pCurrentSI, long pRandomSeed, double pTestGain) {
+		final SILabelValue currentSI = (SILabelValue) pCurrentSI;
+		Random random = new Random(pRandomSeed);
+		double Inoisy = currentSI.getI()* computeNoise(pTestGain, random);
+		currentSI.setI(Inoisy);
+		return;
+	}
+
+	private void validateModelSpecificAdjustments(SILabelValueImpl currentVal,
+			SILabelValueImpl oldVal,
+			String state) {
+
+		
+		try{
+			currentVal.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("currentVal is insane, state is: " + state, t);
+		}
+		try{
+			oldVal.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("oldVal is insane, state is: " + state, t);
+		}
+
+		
+		
+		assertTrue(String.format("currentVal has insane values %s", state), mySanityCheck(currentVal));
+		assertTrue(String.format("oldVal has insane values %s", state), mySanityCheck(oldVal));
+		
+	}
+	
+	private boolean checkEqual(SILabelValueImpl pCalculatedSIAdditions,
+			SILabelValueImpl pNewSIAdditions) {
+		if((pCalculatedSIAdditions.getDiseaseDeaths() != pNewSIAdditions.getDiseaseDeaths()) ||
+				(pCalculatedSIAdditions.getI() != pNewSIAdditions.getI()) ||
+				(pCalculatedSIAdditions.getPopulationCount() != pNewSIAdditions.getPopulationCount()) ||
+				(pCalculatedSIAdditions.getS() != pNewSIAdditions.getS())){
+					return false;
+				}
+		return true;
+	}
+
+	private boolean mySanityCheck(SILabelValueImpl pSI) {
+		return assertValidDouble(pSI.getI()) && 
+			assertValidDouble(pSI.getS());
+		
+	}
+
+	private boolean assertValidDouble(double pDouble) {
+		return !(Double.isNaN(pDouble) || Double.isInfinite(pDouble));
+	}
+
+	private String getState(SILabelValueImpl pCurrentSI,
+			SILabelValueImpl oldVal) {
+		return String.format("\npresent state is: \nCurrentSI[%s]\n oldSI[%s]\n", 
+				pCurrentSI, oldVal);
+	}
+
+	
+	/**
+	 * created just for testings since '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' is protected.
+	 * @author eishay
+	 *
+	 */
+	private class StochasticSIDiseaseModelTesterImpl extends StochasticSIDiseaseModelImpl{
+
+		public void doModelSpecificAdjustments(
+				StandardDiseaseModelLabelValue pCurrentState,
+				long pRandomSeed, double pTestGain) {
+			setSeed(pRandomSeed);
+			setGain(pTestGain);
+			
+			SILabelValueImpl oldCurrentState = SILabelValueTestUtil.cloneSILabelValueImpl((SILabelValueImpl)pCurrentState);
+			super.doModelSpecificAdjustments(pCurrentState);
+		}
+		
+	}
+	
+} // StochasticSIDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRDiseaseModelTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRDiseaseModelTest.java
new file mode 100644
index 0000000..b278baa
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRDiseaseModelTest.java
@@ -0,0 +1,302 @@
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Random;
+
+import junit.textui.TestRunner;
+
+//import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelState;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StochasticSIRDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardStochasticDiseaseModelImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StochasticSIRDiseaseModelImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '<em><b>Stochastic SIR Disease Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StochasticSIRDiseaseModelTest extends SIRTest {
+
+	public static final long RANDOM_SEED = 1l;
+	public static final double TEST_GAIN = 0.01d;
+	
+	/**
+	 * The name of the test disease (an instance of a disease model)
+	 */
+	public static final String TEST_SIR_DISEASE_NAME = "Test Stocastic SIR Disease";
+
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param args
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StochasticSIRDiseaseModelTest.class);
+	}
+
+	/**
+	 * Constructs a new Stochastic SIR Disease Model test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * 
+	 * @param name
+	 * 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StochasticSIRDiseaseModelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Stochastic SIR Disease Model test case.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected StochasticSIRDiseaseModel getFixture() {
+		return (StochasticSIRDiseaseModel)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		StandardDiseaseModelLabel dml = createLabelFixture();
+		DiseaseModelState dms = getFixture().createDiseaseModelState();
+		dml.setDiseaseModelState(dms);
+		setLabelFixture(dml);
+		fixture.initializeDiseaseState(dms, dml);
+	} // setUp
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated NOT
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	} // tearDown
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise() <em>Compute Noise</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel#computeNoise()
+	 * @generated NOT
+	 */
+	public void testComputeNoise() {
+		StandardStochasticDiseaseModelTest.staticComputeNoiseTest();
+	}
+
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSIRDiseaseModel createFixture() {
+		return createFixture(StandardStochasticDiseaseModelImpl.GAIN_EDEFAULT);
+	} // createFixture
+	
+	/**
+	 * Create disease model instance
+	 * 
+	 * @return a disease model instance for test purposes
+	 */
+	public static StochasticSIRDiseaseModel createFixture(double newGain) {
+		return StochasticSIRDiseaseModelImpl.createStochasticSIRDiseaseModel(
+				TEST_SIR_DISEASE_NAME, MORTALITY_RATE,
+				INFECTIOUS_MORTALITY_RATE, TRANSMISSION_RATE, RECOVERY_RATE,
+				IMMUNITY_LOSS_RATE, NON_LINEARITY_COEFFICIENT,
+				TEST_TIME_PERIOD, TEST_POPULATION_IDENTIFIER, newGain);
+		
+	} // createFixture
+
+	
+	/**
+	 * Tests the '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' operation.
+	 * @see org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments()
+	 * @generated NOT
+	 */
+	@SuppressWarnings("synthetic-access")
+	public void testModelSpecificAdjustments(){
+		StochasticSIRDiseaseModelTesterImpl stochasticSIRDiseaseModel = new StochasticSIRDiseaseModelTesterImpl();
+		SIRLabelValueImpl currentSIR = new SIRLabelValueImpl(1000d, 40d, 30d, 20d, 10d);
+		doTest(stochasticSIRDiseaseModel, currentSIR);
+	}
+
+//	@SuppressWarnings("synthetic-access")
+//	private void doTestWithPermutations() {
+//		StochasticSIRDiseaseModelTesterImpl stochasticSIRDiseaseModel = new StochasticSIRDiseaseModelTesterImpl();
+//		List<SIRLabelValueImpl> modelLableValues = SIRLabelValueTestUtil.createRandomSIRLabelValueImpl();
+//		
+//		int count1 = 0;
+//		int count2 = 0;
+//		System.out.println();
+//		for(SIRLabelValueImpl currentSIR: modelLableValues){
+//			System.out.println(count1++);
+//			for(SIRLabelValueImpl SIRAdditions: modelLableValues){
+//				System.out.println("	" + count2++);
+//				for(SIRLabelValueImpl SIRDeaths: modelLableValues){
+//					//SIRDeaths and SIRAdditions will be modified my the test method, so we better clone them 
+//					doTest(stochasticSIRDiseaseModel, currentSIR,
+//							SIRAdditions, SIRDeaths);
+//			 	}
+//			}
+//		}
+//	}
+
+	private void doTest(StochasticSIRDiseaseModelTesterImpl stochasticSIRDiseaseModel,
+			SIRLabelValueImpl currentSIR) {
+		
+		stochasticSIRDiseaseModel.doModelSpecificAdjustments(currentSIR, RANDOM_SEED, TEST_GAIN);
+		SIRLabelValueImpl oldSIR= (SIRLabelValueImpl)EcoreUtil.copy(currentSIR);
+		doCalculateModelSpecificAdjustments(currentSIR, RANDOM_SEED, TEST_GAIN);
+
+		String state = getState(currentSIR, oldSIR);
+		
+		validateModelSpecificAdjustments(currentSIR,
+				oldSIR,
+				state);
+	}
+
+	/**
+	 * This method returns a double precision random noise variable
+	 * r between (1.0+x) and (1.0-x)
+	 * where x is a product G* Math.rand(), and G is a gain factor 0<G<max noise
+	 * 
+	 * @param gain
+	 * @param rand
+	 * @return noise
+	 */
+	public static double computeNoise(final double gain, final Random rand) {
+
+		double x = (2.0*rand.nextDouble())-1.0; // +/- 1
+		x *= gain;
+		x += 1.0;
+		assert ((x>0.0)&&(x<2.0)) : "random noise should be a small perturbation Gain factor, g,  must 0.0 < g << 1.0 ";
+		return x;
+		
+	} // getNoise
+	
+	
+	private void doCalculateModelSpecificAdjustments(
+			SIRLabelValueImpl pCurrentSIR, long pRandomSeed, double pTestGain) {
+		
+		final SIRLabelValue currentSI = (SIRLabelValue) pCurrentSIR;
+		Random random = new Random(pRandomSeed);
+		double Inoisy = currentSI.getI()* computeNoise(pTestGain, random);
+		currentSI.setI(Inoisy);
+		return;
+				
+	}
+
+	private void validateModelSpecificAdjustments(SIRLabelValueImpl currentSIR,
+			SIRLabelValueImpl oldSIR,
+			String state) {
+
+		
+		try{
+			currentSIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("currentSIR is insane, state is: " + state, t);
+		}
+		try{
+			oldSIR.sane();
+		}
+		catch(Throwable t){
+			throw new IllegalStateException("oldSIR is insane, state is: " + state, t);
+		}
+
+		
+		
+		assertTrue(String.format("currentSIR has insane values %s", state), mySanityCheck(currentSIR));
+		assertTrue(String.format("oldSIR has insane values %s", state), mySanityCheck(oldSIR));
+
+		
+	}
+	
+	private boolean checkEqual(SIRLabelValueImpl pCalculatedSIRAdditions,
+			SIRLabelValueImpl pNewSIRAdditions) {
+		if((pCalculatedSIRAdditions.getDiseaseDeaths() != pNewSIRAdditions.getDiseaseDeaths()) ||
+				(pCalculatedSIRAdditions.getI() != pNewSIRAdditions.getI()) ||
+				(pCalculatedSIRAdditions.getPopulationCount() != pNewSIRAdditions.getPopulationCount()) ||
+				(pCalculatedSIRAdditions.getR() != pNewSIRAdditions.getR()) ||
+				(pCalculatedSIRAdditions.getS() != pNewSIRAdditions.getS())){
+					return false;
+				}
+		return true;
+	}
+
+	private boolean mySanityCheck(SIRLabelValueImpl pSIR) {
+		return assertValidDouble(pSIR.getI()) && 
+			assertValidDouble(pSIR.getR()) && 
+			assertValidDouble(pSIR.getS());
+		
+	}
+
+	private boolean assertValidDouble(double pDouble) {
+		return !(Double.isNaN(pDouble) || Double.isInfinite(pDouble));
+	}
+
+	private String getState(SIRLabelValueImpl pCurrentSIR,
+			SIRLabelValueImpl oldSIR) {
+		return String.format("\npresent state is: \nCurrentSIR[%s]\n OldSIR[%s]\n", 
+				pCurrentSIR, pCurrentSIR, oldSIR);
+	}
+
+	
+	/**
+	 * created just for testings since '{@link org.eclipse.stem.diseasemodels.standard.impl.StochasticDiseaseModelImpl#doModelSpecificAdjustments() <em>doModelSpecificAdjustments</em>}' is protected.
+	 * @author eishay
+	 *
+	 */
+	private class StochasticSIRDiseaseModelTesterImpl extends StochasticSIRDiseaseModelImpl{
+
+		public void doModelSpecificAdjustments(
+				StandardDiseaseModelLabelValue pCurrentState,
+				long pRandomSeed, double pTestGain) {
+			setSeed(pRandomSeed);
+			setGain(pTestGain);
+			
+			SIRLabelValueImpl oldCurrentState = SIRLabelValueTestUtil.cloneSIRLabelValueImpl((SIRLabelValueImpl)pCurrentState);
+			
+			super.doModelSpecificAdjustments(pCurrentState);
+		}
+		
+	}
+	
+} // StochasticSIRDiseaseModelTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRScenarioTest.java
new file mode 100644
index 0000000..82b37f7
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIRScenarioTest.java
@@ -0,0 +1,324 @@
+// StochasticSIRScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRLabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Stochastic SIR disease model scenario
+ */
+public class StochasticSIRScenarioTest extends SIRDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "StochasticSIR";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SIRLabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SIRLabelValue[][][]>();
+
+	static {
+
+		// These were copied from DeterministicSIRScenarioTest
+		// 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SIRLabelValueImpl(99.01, 0.98, 0.00, 0.01,
+								0.0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+						new SIRLabelValueImpl(99.02, 0.96,
+								0.0, 0.02, 
+								0.00) } } } // new
+				// SIRLabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+
+		// 1x2
+		expectedDiseaseModelStates
+				.put(TEST_SCENARIO1x2_KEY,
+						new SIRLabelValue[][][] {
+						// Step 0
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												) } },
+
+								// Step 1
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												) } },
+								// Step 2
+								{ {
+								// N[0,0]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												),
+										// N[0,1]
+										new SIRLabelValueImpl(100, 0, 0, 0, 0
+												) } } } // new
+				// SIRLabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x3_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SIRLabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[0,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[1,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,1]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0),
+								// N[2,2]
+								new SIRLabelValueImpl(100, 0, 0, 0, 0)
+
+						} } } // new SIRLabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		retValue.add(StochasticSIRDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SIRLabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SIRLabelValue[][][] sirLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return sirLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+} // StochasticSIRScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIScenarioTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIScenarioTest.java
new file mode 100644
index 0000000..97fd486
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/tests/StochasticSIScenarioTest.java
@@ -0,0 +1,319 @@
+// StochasticSIScenarioTest.java
+package org.eclipse.stem.diseasemodels.standard.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.impl.SILabelValueImpl;
+
+/**
+ * This class is a JUnit test case for a Stochastic SI disease model scenario
+ */
+public class StochasticSIScenarioTest extends SIDiseaseModelScenarioTest {
+
+	private static final String DISEASE_URI_PREFIX = "StochasticSI";
+
+	private static Map<String, Integer> expectedNumberOfLabelsToUpdate = new HashMap<String, Integer>();
+
+	private static Map<String, SILabelValue[][][]> expectedDiseaseModelStates = new HashMap<String, SILabelValue[][][]>();
+
+	static {
+
+		// 1x1
+		// These are copied from DeterministicSIScenarioTest and used because
+		// the Stochastic disease models have not been enabled and do exactly the
+		// same thing as the deterministic
+//		 1x1
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x1_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+						new SILabelValueImpl(98.99, 0.99 , 0.01,
+								0.0) } },
+								
+						// Step 1
+						{ {
+						// N[0,0]
+						new SILabelValueImpl(99.0 , 0.98 , 0.02 , 0.00) } } } // new
+				// SILabelValue
+
+				); // put(TEST_SCENARIO1x1_KEY)
+
+
+		// 1x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x2_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0) } },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0) } },
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0) } } } // new
+				// SILabelValue
+				); // put(TEST_SCENARIO1x2_KEY)
+
+		// 1x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO1x3_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO1x3_KEY)
+
+		// 2x2
+		expectedDiseaseModelStates.put(TEST_SCENARIO2x2_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO2x2_KEY)
+
+		// 3x3
+		expectedDiseaseModelStates.put(TEST_SCENARIO3x3_KEY,
+				new SILabelValue[][][] {
+				// Step 0
+						{ {
+
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 1
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0, 0)
+
+						} },
+
+						// Step 2
+						{ {
+						// N[0,0]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,1]
+								new SILabelValueImpl(100, 0, 0, 0),
+								// N[0,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						}, {
+
+						// N[1,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[1,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						}, {
+
+						// N[2,0]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[2,1]
+								new SILabelValueImpl(100, 0, 0,  0),
+								// N[2,2]
+								new SILabelValueImpl(100, 0, 0,  0)
+
+						} } } // new SILabelValue
+
+				); // put(TEST_SCENARIO3x3_KEY)
+
+		// Fill out the map that specifies how many labels should be updated by
+		// a disease model for each test.
+		for (TestSpec testSpec : testSpecifications) {
+			expectedNumberOfLabelsToUpdate
+					.put(
+							testSpec.scenarioDiseaseKey,
+							new Integer(
+									computeExpectedNumberOfLabels(expectedDiseaseModelStates
+											.get(testSpec.scenarioDiseaseKey))));
+		} // for each test specification
+
+	} // static
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelScenarioTest#getDiseaseModelsToTest()
+	 */
+	@Override
+	public List<NodeDecorator> getDiseaseModelsToTest() {
+		final List<NodeDecorator> retValue = new ArrayList<NodeDecorator>();
+		retValue.add(StochasticSIDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModelsToTest
+
+	@Override
+	protected int getNumberOfSteps(final String diseaseScenarioKey) {
+		SILabelValue[][][] temp = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return temp.length;
+	} // getNumberOfSteps
+
+	@Override
+	protected int getExpectedNumberOfLabelsToUpdate(
+			final String diseaseScenarioKey) {
+		Integer temp = expectedNumberOfLabelsToUpdate.get(diseaseScenarioKey);
+		return temp.intValue();
+	} // getExpectedNumberOfLabelsToUpdate
+
+	@Override
+	protected LabelValue[][] getExpectedDiseaseModelState(
+			final String diseaseScenarioKey, final int step) {
+		final SILabelValue[][][] siLabelValue = expectedDiseaseModelStates
+				.get(diseaseScenarioKey);
+		return siLabelValue[step];
+	} // getExpectedDiseaseModelState
+
+	protected String getDiseaseURIPrefix() {
+		return DISEASE_URI_PREFIX;
+	} // getDiseaseURIPrefix
+} // StochasticSIScenarioTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/Activator.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/Activator.java
new file mode 100644
index 0000000..92835d6
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/Activator.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.tests.diseasemodels;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+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.stem.tests.diseasemodels";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/scenarios/WorldScenarioCreator.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/scenarios/WorldScenarioCreator.java
new file mode 100644
index 0000000..5e40081
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/scenarios/WorldScenarioCreator.java
@@ -0,0 +1,436 @@
+// WorldScenarioCreator.java
+package org.eclipse.stem.tests.diseasemodels.scenarios;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.tests.SequentialSequencerTest;
+import org.eclipse.stem.definitions.nodes.NodesPackage;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.tests.DeterministicSIDiseaseModelTest;
+import org.eclipse.stem.diseasemodels.standard.tests.SIDiseaseModelScenarioTest;
+import org.eclipse.stem.tests.util.CountryGraphCreator;
+import org.eclipse.stem.tests.util.CountryModelCreator;
+import org.eclipse.stem.tests.util.CountryDirectoryUtilities.CountryCode;
+
+/**
+ * This class creates disease model scenarios.
+ */
+public class WorldScenarioCreator {
+
+	/**
+	 * The name of the directory that contains "model" sub-directories
+	 */
+	private static final String SCENARIO_DIR = "scenarios";
+
+	/**
+	 * This is the format string for the identifier of a country graph or model
+	 * file
+	 */
+	public static final String IDENTIFIER_FORMAT = "{0}/" + SCENARIO_DIR
+			+ "/{1}/{2}";
+
+	private static final String ROOT_OUTPUT_DIR = "temp";
+
+	/**
+	 * This is the path to the country models directory
+	 */
+	public static final String WORLD_SCENARIO_PATH = ROOT_OUTPUT_DIR
+			+ File.separator + SCENARIO_DIR;
+
+	private static final String SCENARIO = "Scenario";
+
+	private static final String ID_DISEASE_TEST_PLUGIN = Constants.ID_ROOT
+			+ ".diseasemodels.tests";
+
+	/**
+	 * This is the prefix of the platform URI for geography graphs and models
+	 */
+	public static final String DISEASE_TEST_FILE_URI_PREFIX = "platform:/plugin/"
+			+ ID_DISEASE_TEST_PLUGIN + "/data";
+
+	/**
+	 * The identifier used in world model record instances. It is like a
+	 * {@link CountryCode} , but for the entire world.
+	 */
+	// private static final String SCENARIO_ID = "SCENARIO";
+	private static final String ID_SCENARIO_CATEGORY = "foo";
+
+	/**
+	 * This is the id of the extension point extended by "world" models that are
+	 * plugged into STEM
+	 */
+	public static final String ID_SCENARIO_WORLD_CATEGORY = ID_SCENARIO_CATEGORY
+			+ "." + SCENARIO.toLowerCase();
+
+	public static void main(String[] args) {
+
+		final WorldScenarioCreator wsc = new WorldScenarioCreator();
+
+		final List<Model> worldModels = wsc.getWorldModels();
+		final List<StandardDiseaseModel> diseaseModels = wsc.getDiseaseModels();
+
+		final List<ScenarioRecord> worldScenarioRecords = wsc
+				.createWorldDiseaseModelScenarios(worldModels, diseaseModels);
+		try {
+			wsc.serializeScenarioModels(worldScenarioRecords,
+					WORLD_SCENARIO_PATH);
+
+			final File worldExtensionFile = new File(WORLD_SCENARIO_PATH
+					+ CountryGraphCreator.GRAPH_EXTENSION_POINT_FILE_NAME);
+			final File worldModelPluginPropertiesFile = new File(
+					WORLD_SCENARIO_PATH
+							+ CountryGraphCreator.GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME);
+
+			final BufferedWriter worldModelOut = new BufferedWriter(
+					new FileWriter(worldExtensionFile));
+
+			final BufferedWriter pluginOut = new BufferedWriter(new FileWriter(
+					worldModelPluginPropertiesFile));
+			// Create a snippet of xml that can be included in a plugin.xml file
+			// to plug into STEM the scenarios we just serialized.
+			wsc.generateModelExtensionPointXML(worldScenarioRecords,
+					worldModelOut, pluginOut);
+		} // try
+		catch (IOException e) {
+			e.printStackTrace();
+		}
+
+	} // main
+
+	/**
+	 * @return a list of the disease models for which scenarios will be created.
+	 */
+	private List<StandardDiseaseModel> getDiseaseModels() {
+		final List<StandardDiseaseModel> retValue = new ArrayList<StandardDiseaseModel>();
+		retValue.add(DeterministicSIDiseaseModelTest.createFixture());
+		// retValue.add(DeterministicSIRDiseaseModelTest.createFixture());
+		return retValue;
+	} // getDiseaseModels
+
+	/**
+	 * @return the model of the world to use for the scenarios
+	 */
+	private List<Model> getWorldModels() {
+
+		final List<Model> retValue = new ArrayList<Model>();
+
+		// This code is running "stand alone" (i.e., not within eclipse), thus
+		// the default factories for the extensions are not registered as they
+		// would from their extension of
+		// "org.eclipse.emf.ecore.extension_parser". So we need to register them
+		// here.
+
+		// This causes the model package to be registered.
+		// GraphPackage.eINSTANCE.getNsURI();
+		ModelPackage.eINSTANCE.getNsURI();
+		NodesPackage.eINSTANCE.getNsURI();
+
+		final ResourceSet resourceSet = new ResourceSetImpl();
+		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
+				.put("*", new XMIResourceFactoryImpl());
+		resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap().put(
+				"platform", new XMIResourceFactoryImpl());
+
+		final String uriStringPrefix = "../org.eclipse.stem.geography/"
+				+ "resources/data/models/world/WORLD/";
+
+		final String[] modelFileNames = new String[] { "WORLD_0_1_2.model",
+				"WORLD_0.model", "WORLD_1.model", "WORLD_2.model" };
+		for (String worldModelFileName : modelFileNames) {
+			final URI worldModelURI = URI.createFileURI(uriStringPrefix
+					+ worldModelFileName);
+
+			final Resource resource = resourceSet.getResource(resourceSet
+					.getURIConverter().normalize(worldModelURI), true);
+
+			try {
+				resource.load(null);
+				retValue.add((Model) resource.getContents().get(0));
+			} catch (IOException e) {
+				System.out.println(e.getMessage());
+			} // catch
+			catch (NullPointerException npe) {
+				System.out.println(npe.getMessage());
+			} // null pointer exception
+			catch (Exception e) {
+				System.out.println(e.getMessage());
+			}
+		} // for each model filename
+		return retValue;
+	} // getWorldModel
+
+	/**
+	 * @return a list of Scenario Records for disease models on a world model
+	 */
+	private List<ScenarioRecord> createWorldDiseaseModelScenarios(
+			List<Model> worldModels, List<StandardDiseaseModel> diseaseModels) {
+		final List<ScenarioRecord> retValue = new ArrayList<ScenarioRecord>();
+
+		int scenarioCounter = 0;
+
+		for (Model model : worldModels) {
+			for (StandardDiseaseModel diseaseModel : diseaseModels) {
+
+				final Scenario scenario = ScenarioFactory.eINSTANCE
+						.createScenario();
+				final DublinCore dc = scenario.getDublinCore();
+				dc.populate();
+				dc.setTitle("Scenario: " + model.getDublinCore().getTitle()
+						+ diseaseModel.getDublinCore().getTitle());
+				dc.setFormat(ScenarioPackage.eNS_URI);
+
+				// Add the disease model to the model
+				final Model temp = (Model)EcoreUtil.copy(model);
+				temp.getNodeDecorators().add((NodeDecorator)
+						EcoreUtil.copy(diseaseModel));
+
+				scenario.setModel(temp);
+
+				// Add the sequencer to the scenario
+				scenario.setSequencer(SequentialSequencerTest.createFixture());
+
+				// Add infector(s) for each disease model to the scenario
+				Collection<Decorator> infectors = SIDiseaseModelScenarioTest
+						.createInfectors(temp);
+				final Node nodeToInfect = pickNodeToInfect(scenario.getModel());
+				for (Decorator decorator : infectors) {
+					final Infector infector = (Infector) decorator;
+					// Did we find a node?
+					if (nodeToInfect != null) {
+						// Yes
+						infector.setTargetURI(nodeToInfect.getURI());
+					}
+
+				}
+				scenario.getScenarioDecorators().addAll(infectors);
+
+				final ScenarioRecord scenarioRecord = new ScenarioRecord(
+						scenario, "WORLD", scenarioCounter++);
+
+				final String uriString = MessageFormat.format(
+						IDENTIFIER_FORMAT, DISEASE_TEST_FILE_URI_PREFIX,
+						"WORLD", scenarioRecord.getSerializationFileName());
+				dc.setIdentifier(uriString);
+				scenario.setURI(URI.createURI(uriString));
+
+				retValue.add(scenarioRecord);
+			} // for each disease model
+		} // for each model
+
+		// for (int adminLevel = 0; adminLevel < modelsByAdminLevel.size();
+		// adminLevel++) {
+		//
+		// final Model worldModel = ModelFactory.eINSTANCE.createModel();
+		// final DublinCore dc = worldModel.getDublinCore();
+		// dc.populate();
+		// dc.setTitle("World Model (Level " + adminLevel + ", "
+		// + modelsByAdminLevel.get(adminLevel).size() + " models)");
+		//
+		// for (CountryModelRecord modelRecord : modelsByAdminLevel
+		// .get(adminLevel)) {
+		// worldModel.getModels().add(modelRecord.getModel());
+		// } // foreach ModelRecord at adminLevel
+		//
+		// final WorldModelRecord worldModelRecord = new WorldModelRecord(
+		// worldModel, WORLD_ID, adminLevel);
+		// worldModel.setURI(URI.createURI(MessageFormat.format(
+		// IDENTIFIER_FORMAT,
+		// CountryGraphCreator.GEOGRAPHY_FILE_URI_PREFIX, WORLD_ID,
+		// worldModelRecord.getSerializationFileName())));
+		//
+		// retValue.add(worldModelRecord);
+		// } // for adminLevel
+
+		return retValue;
+	} // createWorldDiseaseModelScenarios
+
+	/**
+	 * Select a Node from the model to infect
+	 * 
+	 * @param model
+	 * @return a Node
+	 */
+	private Node pickNodeToInfect(Model model) {
+		// Pick the first node with population members we find
+		Node retValue = null;
+
+		// Look in the graphs
+		for (Iterator graphIter = model.getGraphs().iterator(); graphIter
+				.hasNext();) {
+			Graph graph = (Graph) graphIter.next();
+			// Any nodes in this graph?
+			for (Iterator nodeIter = graph.getNodes().values().iterator(); nodeIter
+					.hasNext();) {
+				Node node = (Node) nodeIter.next();
+				// got one
+				return node;
+			}
+		}
+		// if we get here we didn't find one in the graphs
+		for (Iterator modelIter = model.getModels().iterator(); retValue == null
+				&& modelIter.hasNext();) {
+			Model submodel = (Model) modelIter.next();
+			retValue = pickNodeToInfect(submodel);
+		}
+
+		return retValue;
+	} // pickNodeToInfect
+
+	/**
+	 * @param worldScenarioRecords
+	 * @param worldScenarioOut
+	 * @param pluginOut
+	 */
+	private void generateModelExtensionPointXML(
+			List<ScenarioRecord> worldScenarioRecords,
+			BufferedWriter worldScenarioOut, BufferedWriter pluginOut) {
+
+		// The dublin core instances of the models likely share common
+		// attributes, we can avoid duplicate entries in the files we
+		// generate by finding the duplicate entries and only generating a
+		// single key for the generated plugins file content.
+		final Map<String, String> dcValueKeyMap = new HashMap<String, String>();
+
+		try {
+			worldScenarioOut
+					.write("<!-- Generated content.  Do not modify -->\n");
+
+			worldScenarioOut.write(MessageFormat.format(
+					CountryGraphCreator.XML_EXTENSION_POINT_OPEN,
+					new Object[] { Constants.ID_SCENARIO_EXTENSION_POINT }));
+			worldScenarioOut.write("\n");
+
+			pluginOut
+					.write("#Model NLS Keys.  Automatically generated, do not modify. "
+							+ Calendar.getInstance().getTime()
+							+ " "
+							+ System.getProperty("user.name") + "\n");
+
+			// World Model
+			CountryGraphCreator.outputCategory(ID_SCENARIO_WORLD_CATEGORY,
+					SCENARIO, CountryModelCreator.ID_MODEL_POLITICAL_CATEGORY,
+					CountryModelCreator.NLS_CATEGORY_KEY_FORMAT,
+					worldScenarioOut, pluginOut);
+
+			for (ScenarioRecord worldModelRecord : worldScenarioRecords) {
+				CountryGraphCreator.outputDublinCore(worldModelRecord,
+						ID_SCENARIO_WORLD_CATEGORY, dcValueKeyMap,
+						worldScenarioOut, pluginOut);
+			} // for each world model record
+
+			worldScenarioOut
+					.write(CountryGraphCreator.XML_EXTENSION_POINT_CLOSE);
+			worldScenarioOut.close();
+			pluginOut.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+	} // generateModelExtensionPointXML
+
+	/**
+	 * @param worldModels
+	 * @param uriPathString
+	 *            the path to the root of the folder to serialize the models to
+	 * @throws IOException
+	 */
+	private void serializeScenarioModels(
+			final List<ScenarioRecord> worldScenarios,
+			final String uriPathString) throws IOException {
+		for (ScenarioRecord scenarioRecord : worldScenarios) {
+			scenarioRecord.serialize(uriPathString);
+		} // for each model record
+	} // serializeWorldModels
+
+	/**
+	 * This class contains a world scenario and its metadata.
+	 */
+	public class ScenarioRecord extends CountryGraphCreator.Record {
+
+		/**
+		 * Constructor
+		 */
+		public ScenarioRecord() {
+			super();
+		}
+
+		/**
+		 * @param identifiable
+		 * @param id
+		 * @param adminLevel
+		 */
+		public ScenarioRecord(Identifiable identifiable, String id,
+				int adminLevel) {
+			super(identifiable, id, adminLevel);
+		}
+
+		/**
+		 * @param identifiable
+		 * @param id
+		 * @param adminLevels
+		 */
+		public ScenarioRecord(Identifiable identifiable, String id,
+				List<Integer> adminLevels) {
+			super(identifiable, id, adminLevels);
+		}
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getOutputType()
+		 */
+		@Override
+		public String getOutputType() {
+			return "scenario";
+		} // getOutputType
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getType()
+		 */
+		@Override
+		public String getType() {
+			return "scenario";
+		} // getType
+
+	} // ScenarioRecord
+
+} // WorldScenarioCreator
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/DiseaseModelLabelRelativeValueProviderTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/DiseaseModelLabelRelativeValueProviderTest.java
new file mode 100644
index 0000000..afaa8de
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/DiseaseModelLabelRelativeValueProviderTest.java
@@ -0,0 +1,58 @@
+// DiseaseModelLabelRelativeValueProviderTest.java
+package org.eclipse.stem.tests.diseasemodels.standard.provider.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterTest;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory.DiseaseModelLabelRelativeValueProvider;
+
+/**
+ * This class is a JUnit test for
+ * {@link DiseaseModelLabelRelativeValueProvider}
+ */
+@SuppressWarnings("all")
+public class DiseaseModelLabelRelativeValueProviderTest extends
+		RelativeValueProviderAdapterTest {
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @return a <code>RelativeValueProviderAdapter</code> for testing
+	 */
+	public static DiseaseModelLabelRelativeValueProvider createFixture() {
+		return new DiseaseModelLabelRelativeValueProvider();
+	} // createFixture
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory.DiseaseModelLabelRelativeValueProvider#getProperties()}.
+	 */
+	public void testGetProperties() {
+		// for someone to do
+		assertTrue(true);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory.DiseaseModelLabelRelativeValueProvider#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature)}.
+	 */
+	public void testGetRelativeValueEStructuralFeature() {
+		// for someone to do
+		assertTrue(true);
+	} // testGetRelativeValueEStructuralFeature
+
+} // DiseaseModelLabelRelativeValueProviderTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueHistoryProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueHistoryProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..bc6a7bc
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueHistoryProviderAdapterFactoryTest.java
@@ -0,0 +1,155 @@
+// StandardRelativeValueHistoryProviderAdapterFactoryTest.java
+package org.eclipse.stem.tests.diseasemodels.standard.provider.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory;
+
+/**
+ * This class is a JUnit test case for
+ * {@link StandardRelativeValueHistoryProviderAdapterFactory}.
+ */
+@SuppressWarnings("all")
+public class StandardRelativeValueHistoryProviderAdapterFactoryTest
+		extends
+		org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactoryTest {
+
+	static {
+		// Add to RelativeValueProviderAdapterFactory.INSTANCE
+		new StandardRelativeValueProviderAdapterFactory();
+
+		// Add to HistoryProviderAdapterFactory.INSTANCE
+		new StandardHistoryProviderAdapterFactory();
+	} // static
+
+	private StandardRelativeValueHistoryProviderAdapterFactory getFixture() {
+		return (StandardRelativeValueHistoryProviderAdapterFactory) fixture;
+	} // SpatialProviderAdapterFactory
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a factory instance for testing purposes.
+	 */
+	protected StandardRelativeValueHistoryProviderAdapterFactory createFixture() {
+		return new StandardRelativeValueHistoryProviderAdapterFactory();
+	} // createFixture
+
+	/**
+	 * @see org.eclipse.stem.tests.diseasemodels.standard.provider.tests.StandardRelativeValueProviderAdapterFactoryTest#testProperAdapterFactoryComposition()
+	 */
+	public void testProperAdapterFactoryComposition() {
+		final RelativeValueHistoryProviderAdapterFactory rvpaf = RelativeValueHistoryProviderAdapterFactory.INSTANCE;
+		// Make the label value to be adapted
+		final DiseaseModelLabel dml = getDiseaseModelLabelToTest();
+
+		final RelativeValueHistoryProvider relativeValueHistoryProvider = (RelativeValueHistoryProvider) rvpaf
+				.adapt(dml, RelativeValueHistoryProvider.class);
+
+		assertNotNull(relativeValueHistoryProvider);
+		assertTrue(relativeValueHistoryProvider instanceof StandardRelativeValueHistoryProviderAdapterFactory.DiseaseModelLabelRelativeValueHistoryProvider);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory.RelativeValueProviderAdapterFactoryImpl#isFactoryForType(java.lang.Object)}.
+	 */
+	@Override
+	public void testIsFactoryForTypeObject() {
+		final RelativeValueHistoryProviderAdapterFactory fixture = getFixture();
+		assertTrue(fixture.isFactoryForType(RelativeValueHistoryProvider.class));
+	} // testIsFactoryForTypeObject
+
+	public void testGetRelativeValueByTime() {
+		// TODO implement testGetRelativeValueByTime
+		final RelativeValueHistoryProvider rVHP = getAdapterToTest();
+		assertNotNull(rVHP);
+		final ItemPropertyDescriptor property = (ItemPropertyDescriptor) rVHP
+				.getProperties().get(0);
+		final double rvTime1 = rVHP.getRelativeValue(property, rVHP
+				.getEarliestTimeValue());
+		assertTrue(valueWithinRange(rvTime1));
+
+	} // testGetRelativeValueByTime
+
+	public void testGetAllHistoricRelativeValues() {
+		final RelativeValueHistoryProvider rVHP = getAdapterToTest();
+		assertNotNull(rVHP);
+		final ItemPropertyDescriptor property = (ItemPropertyDescriptor) rVHP
+				.getProperties().get(0);
+		final double[] allRelativeValues = rVHP
+				.getAllHistoricRelativeValues(property);
+//		assertTrue(allRelativeValues.length > 0);
+		for (int i = 0; i < allRelativeValues.length; i++) {
+			assertTrue(valueWithinRange(allRelativeValues[i]));
+		} // for
+	} // testGetAllHistoricRelativeValues
+
+	public void testGetEarliestTimeValue() {
+		// TODO implement testGetEarliestTimeValue
+		final RelativeValueHistoryProvider rVHP = getAdapterToTest();
+		assertNotNull(rVHP);
+		final STEMTime earliestTime = rVHP.getEarliestTimeValue();
+		assertTrue(earliestTime != null);
+	} // testGetEarliestTimeValue
+
+	/**
+	 * @return
+	 */
+	private RelativeValueHistoryProvider getAdapterToTest() {
+		final RelativeValueHistoryProviderAdapterFactory fixture = getFixture();
+		final DiseaseModelLabel dml = getDiseaseModelLabelToTest();
+
+		final RelativeValueHistoryProvider relativeValueHistoryProvider = (RelativeValueHistoryProvider) fixture
+				.adapt(dml, RelativeValueHistoryProvider.class);
+		return relativeValueHistoryProvider;
+	}
+
+	/**
+	 * @return
+	 */
+	private DiseaseModelLabel getDiseaseModelLabelToTest() {
+		return StandardRelativeValueProviderAdapterFactoryTest
+				.createSEIRLabel();
+	} // getDiseaseModelLabelToTest
+
+	/**
+	 * @param relativeValue
+	 * @return <code>true</code> if the value is between 0.0 and 1.0,
+	 *         inclusive.
+	 */
+	private boolean valueWithinRange(double relativeValue) {
+		return relativeValue >= 0.0 && relativeValue <= 1.0;
+	}
+
+} // StandardRelativeValueHistoryProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueProviderAdapterFactoryTest.java b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueProviderAdapterFactoryTest.java
new file mode 100644
index 0000000..c29126c
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/src/org/eclipse/stem/tests/diseasemodels/standard/provider/tests/StandardRelativeValueProviderAdapterFactoryTest.java
@@ -0,0 +1,412 @@
+// StandardRelativeValueProviderAdapterFactoryTest.java
+package org.eclipse.stem.tests.diseasemodels.standard.provider.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactoryTest;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModelLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SEIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.SILabel;
+import org.eclipse.stem.diseasemodels.standard.SILabelValue;
+import org.eclipse.stem.diseasemodels.standard.SIRLabel;
+import org.eclipse.stem.diseasemodels.standard.SIRLabelValue;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModelLabel;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory;
+
+/**
+ * This class is a JUnit test case for
+ * {@link StandardRelativeValueProviderAdapterFactory}.
+ */
+@SuppressWarnings("all")
+public class StandardRelativeValueProviderAdapterFactoryTest extends
+		RelativeValueProviderAdapterFactoryTest {
+
+	/**
+	 * The number of properties in a disease model label value (Births, Deaths,
+	 * Deaths from Disease are relative to total population)
+	 */
+	public static final int NUM_DISEASE_MODEL_LABEL_VALUE_PROPERTIES = 2;
+
+	/**
+	 * The number of properties in a SI disease model label value (S, I, IR, IF, incidence +
+	 * DMLVP)
+	 */
+	public static final int NUM_SI_DISEASE_MODEL_LABEL_VALUE_PROPERTIES = 5 + NUM_DISEASE_MODEL_LABEL_VALUE_PROPERTIES;
+
+	/**
+	 * The number of properties in a SIR disease model label value (S, I, IR, IF, incidence +
+	 * R + DMLVP)
+	 */
+	public static final int NUM_SIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES = NUM_SI_DISEASE_MODEL_LABEL_VALUE_PROPERTIES + 1;
+
+	/**
+	 * The number of properties in a SEIR disease model label value (S, E, I, IR,
+	 * IF, incidence + R + DMLVP)
+	 */
+	public static final int NUM_SEIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES = NUM_SIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES + 1;
+
+	/**
+	 * The initial number of births for disease model label values.
+	 */
+	public static final double NUM_DISEASE_MODEL_LABEL_VALUE_BIRTHS = 100;
+
+	/**
+	 * The initial number of (total) deaths for disease model label values.
+	 */
+	public static final double NUM_DISEASE_MODEL_LABEL_VALUE_DEATHS = 10;
+
+	/**
+	 * The initial number of deaths from disease for disease model label values.
+	 */
+	public static final double NUM_DISEASE_MODEL_LABEL_VALUE_DISEASE_DEATHS = 1;
+
+	protected static final double NUM_S_POPULATION = 64;
+
+	protected static final double NUM_E_POPULATION = 32;
+
+	protected static final double NUM_I_POPULATION = 16;
+
+	protected static final double NUM_R_POPULATION = 8;
+
+	protected static final double TOTAL_SI_POPULATION = NUM_S_POPULATION
+			+ NUM_I_POPULATION;
+
+	protected static final double TOTAL_SIR_POPULATION = TOTAL_SI_POPULATION
+			+ NUM_R_POPULATION;
+
+	protected static final double TOTAL_SEIR_POPULATION = TOTAL_SIR_POPULATION
+			+ NUM_E_POPULATION;
+
+	private StandardRelativeValueProviderAdapterFactory getFixture() {
+		return (StandardRelativeValueProviderAdapterFactory) fixture;
+	} // SpatialProviderAdapterFactory
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * @return a factory instance for testing purposes.
+	 */
+	protected StandardRelativeValueProviderAdapterFactory createFixture() {
+		return new StandardRelativeValueProviderAdapterFactory();
+	} // createFixture
+
+	/**
+	 * @param label
+	 */
+	public static final void initializeDiseaseModelLabel(
+			final StandardDiseaseModelLabel label) {
+		initializeDiseaseModelLabelValues((DiseaseModelLabelValue)label
+				.getCurrentValue());
+		initializeDiseaseModelLabelValues((DiseaseModelLabelValue)label
+				.getNextValue());
+	} // initializeDiseaseModelLabel
+
+	/**
+	 * @param labelValue
+	 */
+	public static final void initializeDiseaseModelLabelValues(
+			final DiseaseModelLabelValue dmlv) {
+		dmlv.setDiseaseDeaths(NUM_DISEASE_MODEL_LABEL_VALUE_DISEASE_DEATHS);
+	} // initializedDiseaseModelLabelValues
+
+	/**
+	 * @return
+	 */
+	public static final SEIRLabel createSEIRLabel() {
+		final SEIRLabel seirLabel = StandardFactory.eINSTANCE.createSEIRLabel();
+	
+		initializeDiseaseModelLabel(seirLabel);
+		seirLabel.getCurrentSEIRValue().setS(NUM_S_POPULATION);
+		seirLabel.getCurrentSEIRValue().setE(NUM_E_POPULATION);
+		seirLabel.getCurrentSEIRValue().setI(NUM_I_POPULATION);
+		seirLabel.getCurrentSEIRValue().setR(NUM_R_POPULATION);
+		return seirLabel;
+	} // createSEIRLabel
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSILabelAdapter()}.
+	 */
+	public void testCreateSILabelAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SILabel sILabel = StandardFactory.eINSTANCE.createSILabel();
+
+		initializeDiseaseModelLabel(sILabel);
+		sILabel.setS(NUM_S_POPULATION);
+		sILabel.setI(NUM_I_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(sILabel, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+
+		assertTrue(properties.size() == NUM_SI_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SI_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SI_POPULATION);
+
+	} // testCreateSILabelAdapter
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSIRLabelAdapter()}.
+	 */
+	public void testCreateSIRLabelAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SIRLabel sirLabel = StandardFactory.eINSTANCE.createSIRLabel();
+
+		initializeDiseaseModelLabel(sirLabel);
+		sirLabel.getCurrentSIRValue().setS(NUM_S_POPULATION);
+		sirLabel.getCurrentSIRValue().setI(NUM_I_POPULATION);
+		sirLabel.getCurrentSIRValue().setR(NUM_R_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(sirLabel, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+
+		assertTrue(properties.size() == NUM_SIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSIRLabelValue_R()) == NUM_R_POPULATION
+				/ TOTAL_SIR_POPULATION);
+	} // testCreateSIRLabelAdapter
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSEIRLabelAdapter()}.
+	 */
+	public void testCreateSEIRLabelAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SEIRLabel seirLabel = createSEIRLabel();
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(seirLabel, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+		assertTrue(properties.size() == NUM_SEIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSEIRLabelValue_E()) == NUM_E_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSIRLabelValue_R()) == NUM_R_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+	} // testCreateSEIRLabelAdapter
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSILabelValueAdapter()}.
+	 */
+	public void testCreateSILabelValueAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SILabelValue sILabelValue = StandardFactory.eINSTANCE
+				.createSILabelValue();
+
+		initializeDiseaseModelLabelValues(sILabelValue);
+		sILabelValue.setS(NUM_S_POPULATION);
+		sILabelValue.setI(NUM_I_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(sILabelValue, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+
+		assertTrue(properties.size() == NUM_SI_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SI_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SI_POPULATION);
+
+	} // testCreateSILabelValueAdapter
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSIRLabelValueAdapter()}.
+	 */
+	public void testCreateSIRLabelValueAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SIRLabelValue sIRLabelValue = StandardFactory.eINSTANCE
+				.createSIRLabelValue();
+
+		initializeDiseaseModelLabelValues(sIRLabelValue);
+		sIRLabelValue.setS(NUM_S_POPULATION);
+		sIRLabelValue.setI(NUM_I_POPULATION);
+		sIRLabelValue.setR(NUM_R_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(sIRLabelValue, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+
+		assertTrue(properties.size() == NUM_SIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSIRLabelValue_R()) == NUM_R_POPULATION
+				/ TOTAL_SIR_POPULATION);
+	} // testCreateSIRLabelValueAdapter
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.diseasemodels.standard.provider.StandardRelativeValueProviderAdapterFactory#createSEIRLabelValueAdapter()}.
+	 */
+	public void testCreateSEIRLabelValueAdapter() {
+		final StandardRelativeValueProviderAdapterFactory fixture = getFixture();
+		final SEIRLabelValue sEIRLabelValue = StandardFactory.eINSTANCE
+				.createSEIRLabelValue();
+
+		initializeDiseaseModelLabelValues(sEIRLabelValue);
+		sEIRLabelValue.setS(NUM_S_POPULATION);
+		sEIRLabelValue.setE(NUM_E_POPULATION);
+		sEIRLabelValue.setI(NUM_I_POPULATION);
+		sEIRLabelValue.setR(NUM_R_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) fixture
+				.adapt(sEIRLabelValue, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+
+		final List<IItemPropertyDescriptor> properties = relativeValueProvider
+				.getProperties();
+		assertNotNull(properties);
+		assertTrue(properties.size() == NUM_SEIR_DISEASE_MODEL_LABEL_VALUE_PROPERTIES);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getStandardDiseaseModelLabelValue_S()) == NUM_S_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSEIRLabelValue_E()) == NUM_E_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE.getSILabelValue_I()) == NUM_I_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+
+		assertTrue(relativeValueProvider
+				.getRelativeValue(StandardPackage.eINSTANCE
+						.getSIRLabelValue_R()) == NUM_R_POPULATION
+				/ TOTAL_SEIR_POPULATION);
+	} // testCreateSEIRLabelValueAdapter
+
+	/**
+	 * Test that this factory is properly added to the composed adaptor factory
+	 * <code>RelativeValueProviderAdapterFactoryImpl</code> so that the
+	 * classes in the Standard (Disease model) package will be properly adapted
+	 * to {@link RelativeValueProvider}'s.
+	 */
+	public void testProperAdapterFactoryComposition() {
+		final RelativeValueProviderAdapterFactory rvpaf = RelativeValueProviderAdapterFactory.INSTANCE;
+		// Make the label value to be adapted
+		final SEIRLabelValue sEIRLabelValue = StandardFactory.eINSTANCE
+				.createSEIRLabelValue();
+		initializeDiseaseModelLabelValues(sEIRLabelValue);
+		sEIRLabelValue.setS(NUM_S_POPULATION);
+		sEIRLabelValue.setE(NUM_E_POPULATION);
+		sEIRLabelValue.setI(NUM_I_POPULATION);
+		sEIRLabelValue.setR(NUM_R_POPULATION);
+
+		final RelativeValueProvider relativeValueProvider = (RelativeValueProvider) rvpaf
+				.adapt(sEIRLabelValue, RelativeValueProvider.class);
+
+		assertNotNull(relativeValueProvider);
+		assertTrue(relativeValueProvider instanceof StandardRelativeValueProviderAdapterFactory.DiseaseModelLabelValueRelativeValueProvider);
+	} // testProperAdapterFactoryComposition
+
+} // StandardRelativeValueProviderAdapterFactoryTest
diff --git a/org.eclipse.stem.tests.diseasemodels/temp/.cvsignore b/org.eclipse.stem.tests.diseasemodels/temp/.cvsignore
new file mode 100644
index 0000000..f116164
--- /dev/null
+++ b/org.eclipse.stem.tests.diseasemodels/temp/.cvsignore
@@ -0,0 +1 @@
+*.scenario
diff --git a/org.eclipse.stem.tests.internal.data/.classpath b/org.eclipse.stem.tests.internal.data/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.internal.data/.project b/org.eclipse.stem.tests.internal.data/.project
new file mode 100644
index 0000000..b4a9286
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.internal.data</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.internal.data/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.internal.data/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..afbb84a
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.internal.data.tests;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.internal.data;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.junit;visibility:=reexport,
+ org.eclipse.stem.core
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.tests.internal.data/build.properties b/org.eclipse.stem.tests.internal.data/build.properties
new file mode 100644
index 0000000..ff3253a
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/build.properties
@@ -0,0 +1,12 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2009/02/05 22:46:18 dford Exp $
+
+bin.includes = .,\
+               META-INF/,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.internal.data/plugin.properties b/org.eclipse.stem.tests.internal.data/plugin.properties
new file mode 100644
index 0000000..d58b46d
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/plugin.properties
@@ -0,0 +1,13 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+pluginName = STEM Data Generator Test Suite
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/DublinCoreTest.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/DublinCoreTest.java
new file mode 100644
index 0000000..c445810
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/DublinCoreTest.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.internal.data.generatedplugin.DublinCore;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Dublin Core</b></em>'. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class DublinCoreTest extends TestCase {
+
+	/**
+	 * The fixture for this Dublin Core test case. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DublinCore fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(DublinCoreTest.class);
+	}
+
+	/**
+	 * Constructs a new Dublin Core test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public DublinCoreTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Dublin Core test case. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(DublinCore fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Dublin Core test case. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected DublinCore getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(GeneratedpluginFactory.eINSTANCE.createDublinCore());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet about the lack of tests in this class.
+	 */
+	public void testFoo() {
+		assertTrue(true);
+	}
+
+} // DublinCoreTest
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/ExtensionTest.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/ExtensionTest.java
new file mode 100644
index 0000000..541563d
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/ExtensionTest.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.internal.data.generatedplugin.Extension;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Extension</b></em>'. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ExtensionTest extends TestCase {
+
+	/**
+	 * The fixture for this Extension test case. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Extension fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(ExtensionTest.class);
+	}
+
+	/**
+	 * Constructs a new Extension test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public ExtensionTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Extension test case. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(Extension fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Extension test case. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Extension getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(GeneratedpluginFactory.eINSTANCE.createExtension());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet about the lack of tests in this class.
+	 */
+	public void testFoo() {
+		assertTrue(true);
+	}
+} // ExtensionTest
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedPluginAllTests.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedPluginAllTests.java
new file mode 100644
index 0000000..2ce3cb4
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedPluginAllTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>GeneratedPlugin</b></em>
+ * ' model. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GeneratedPluginAllTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new GeneratedPluginAllTests("GeneratedPlugin Tests");
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public GeneratedPluginAllTests(String name) {
+		super(name);
+	}
+
+} // GeneratedPluginAllTests
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedpluginTests.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedpluginTests.java
new file mode 100644
index 0000000..9616515
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/GeneratedpluginTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc --> A test suite for the '<em><b>generatedplugin</b></em>
+ * ' package. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GeneratedpluginTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new GeneratedpluginTests("generatedplugin Tests");
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public GeneratedpluginTests(String name) {
+		super(name);
+	}
+
+} // GeneratedpluginTests
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/PluginTest.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/PluginTest.java
new file mode 100644
index 0000000..fb197c5
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/PluginTest.java
@@ -0,0 +1,148 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.impl.XMLMapImpl;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginPackage;
+import org.eclipse.stem.internal.data.generatedplugin.Plugin;
+import org.eclipse.stem.internal.data.generatedplugin.util.GeneratedpluginResourceFactoryImpl;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Plugin</b></em>'. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PluginTest extends TestCase {
+
+	/**
+	 * The fixture for this Plugin test case. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Plugin fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PluginTest.class);
+	}
+
+	/**
+	 * Constructs a new Plugin test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public PluginTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Plugin test case. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(Plugin fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Plugin test case. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Plugin getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(GeneratedpluginFactory.eINSTANCE.createPlugin());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * 
+	 */
+	@SuppressWarnings("unchecked")
+	public void testDeserializePluginXML() {
+
+		File file = new File("testdata/plugin.xml");
+		final URI PLUGIN_URI = URI.createFileURI(file.getAbsolutePath());
+
+		try {
+
+			GeneratedpluginResourceFactoryImpl rfi = new GeneratedpluginResourceFactoryImpl();
+
+			XMLResource.XMLMap xmlMap = new XMLMapImpl();
+			xmlMap.setNoNamespacePackage(GeneratedpluginPackage.eINSTANCE);
+			Map options = new HashMap();
+			options.put(XMLResource.OPTION_XML_MAP, xmlMap);
+
+			final Resource resource = rfi.createResource(PLUGIN_URI);
+			resource.load(options);
+			final Plugin plugin = (Plugin) resource.getContents().get(0);
+
+			assertTrue(plugin.getExtensionelement().size() == 1);
+
+			// for (Extension extension : plugin.getExtensionelement()) {
+			//				
+			// for ( StemCategory category :extension.getCategories()) {
+			// System.out.println(category.toString());
+			// }
+			//				
+			// for ( DublinCore dc :extension.getDublinCores()) {
+			// System.out.println(dc.toString());
+			// }
+			//				
+			// } // for each
+		} catch (final Exception e) {
+			System.out.println(e.toString());
+			e.printStackTrace();
+		}
+	} // testDeserializePluginXML
+} // PluginTest
diff --git a/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/StemCategoryTest.java b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/StemCategoryTest.java
new file mode 100644
index 0000000..989d28b
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/src/org/eclipse/stem/internal/data/generatedplugin/tests/StemCategoryTest.java
@@ -0,0 +1,104 @@
+package org.eclipse.stem.internal.data.generatedplugin.tests;
+
+/******************************************************************************* 
+ * Copyright (c) 2009 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.internal.data.generatedplugin.GeneratedpluginFactory;
+import org.eclipse.stem.internal.data.generatedplugin.StemCategory;
+
+/**
+ * <!-- begin-user-doc --> A test case for the model object '
+ * <em><b>Stem Category</b></em>'. <!-- end-user-doc -->
+ * 
+ * @generated
+ */
+@SuppressWarnings("all")
+public class StemCategoryTest extends TestCase {
+
+	/**
+	 * The fixture for this Stem Category test case. <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected StemCategory fixture = null;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(StemCategoryTest.class);
+	}
+
+	/**
+	 * Constructs a new Stem Category test case with the given name. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public StemCategoryTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Stem Category test case. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void setFixture(StemCategory fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Stem Category test case. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected StemCategory getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(GeneratedpluginFactory.eINSTANCE.createStemCategory());
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Keeps JUnit quiet about the lack of tests in this class.
+	 */
+	public void testFoo() {
+		assertTrue(true);
+	}
+} // StemCategoryTest
diff --git a/org.eclipse.stem.tests.internal.data/testdata/plugin.xml b/org.eclipse.stem.tests.internal.data/testdata/plugin.xml
new file mode 100644
index 0000000..f273b3b
--- /dev/null
+++ b/org.eclipse.stem.tests.internal.data/testdata/plugin.xml
@@ -0,0 +1,2862 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.3"?>
+<plugin>
+<!-- Generated Content.  Do not Edit. -->
+<!-- Generated: 2009-02-02 16:40 -->
+<!-- *********** Graphs *********** -->
+<extension point="org.eclipse.stem.core.graph">
+<stem_category id="org.eclipse.stem.core.graph" name="%_UI_Standard_Scenario_category" parent_id="/"/>
+<stem_category id="org.eclipse.stem.core.graph.geography" name="%_UI_Geography_category" parent_id="org.eclipse.stem.core.graph"/>
+<stem_category id="org.eclipse.stem.core.graph.geography.political" name="%_UI_Poltical_category" parent_id="org.eclipse.stem.core.graph.geography"/>
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries" name="%_UI_Countries_category" parent_id="org.eclipse.stem.core.graph.geography.political"/>
+
+<!-- ABW -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.abw" name="ABW" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.abw" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ABW/ABW_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ABW (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/aa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.abw" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ABW/ABW_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ABW(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ABW/ABW_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- AFG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.afg" name="AFG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/af.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AFG/AFG_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AFG/AFG_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AFG/AFG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="AFG(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AFG/AFG_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_AFG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AFG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_CHN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and CHN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and IRN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and PAK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and TJK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and TKM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AFG_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AFG and UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AFG_0_AFG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AFG level (1) by AFG (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.afg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AFG_1_AFG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AFG level (2) by AFG (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- AGO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ago" name="AGO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ao.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AGO/AGO_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AGO/AGO_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AGO/AGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="AGO(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AGO/AGO_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AGO_2_AGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AGO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AGO_2_COD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AGO and COD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AGO_2_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AGO and COG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AGO_2_NAM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AGO and NAM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AGO_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AGO and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AGO_0_AGO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AGO level (1) by AGO (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ago" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AGO_1_AGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AGO level (2) by AGO (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- AIA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.aia" name="AIA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aia" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AIA/AIA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AIA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/av.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aia" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AIA/AIA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AIA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AIA/AIA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ALA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ala" name="ALA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ala" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALA/ALA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ALA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ala" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALA/ALA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ALA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ALA/ALA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ALB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.alb" name="ALB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALB/ALB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ALB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/al.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALB/ALB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ALB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ALB/ALB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALB/ALB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ALB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ALB/ALB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ALB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ALB/ALB_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ALB_1_ALB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ALB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ALB_1_GRC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ALB and GRC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ALB_1_MKD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ALB and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ALB_1_MKD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ALB and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ALB_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ALB and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.alb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ALB_0_ALB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ALB level (1) by ALB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- AND -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.and" name="AND" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AND/AND_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AND (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/an.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AND/AND_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AND(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AND/AND_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AND/AND_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AND (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AND/AND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AND(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AND/AND_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AND_1_AND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AND_1_ESP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AND and ESP" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AND_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AND and FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.and" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AND_0_AND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AND level (1) by AND (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ANT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ant" name="ANT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ant" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ANT/ANT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ANT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ant" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ANT/ANT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ANT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ANT/ANT_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ARE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.are" name="ARE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ae.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARE/ARE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARE/ARE_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARE/ARE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ARE(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARE/ARE_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARE_2_ARE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ARE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARE_2_OMN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARE and OMN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARE_2_QAT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARE and QAT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARE_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARE and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARE_0_ARE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARE level (1) by ARE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.are" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARE_1_ARE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARE level (2) by ARE (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ARG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.arg" name="ARG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ar.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARG/ARG_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARG/ARG_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARG/ARG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ARG(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARG/ARG_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_ARG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ARG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_BOL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARG and BOL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_BRA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARG and BRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_CHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARG and CHL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARG and PRY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARG_2_URY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARG and URY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARG_0_ARG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARG level (1) by ARG (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARG_1_ARG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARG level (2) by ARG (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ARM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.arm" name="ARM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/am.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARM/ARM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARM/ARM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ARM/ARM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ARM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ARM/ARM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARM_2_ARM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ARM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARM_2_AZE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARM and AZE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARM_2_GEO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARM and GEO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARM_2_IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARM and IRN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ARM_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ARM and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARM_0_ARM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARM level (1) by ARM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.arm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ARM_1_ARM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ARM level (2) by ARM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ASM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.asm" name="ASM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.asm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ASM/ASM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ASM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/aa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.asm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ASM/ASM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ASM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ASM/ASM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ATA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ata" name="ATA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ata" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATA/ATA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ATA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ay.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ata" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATA/ATA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ATA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ATA/ATA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ATF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.atf" name="ATF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.atf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATF/ATF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ATF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fs.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.atf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATF/ATF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ATF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ATF/ATF_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ATG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.atg" name="ATG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.atg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATG/ATG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ATG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ac.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.atg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ATG/ATG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ATG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ATG/ATG_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- AUS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.aus" name="AUS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUS/AUS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AUS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/be.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUS/AUS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AUS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AUS/AUS_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUS/AUS_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AUS (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUS/AUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AUS(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AUS/AUS_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUS_1_AUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AUS_0_AUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AUS level (1) by AUS (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- AUT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.aut" name="AUT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUT/AUT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AUT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/au.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUT/AUT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AUT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AUT/AUT_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUT/AUT_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AUT (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AUT/AUT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AUT(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AUT/AUT_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_AUT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AUT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_CHE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and CHE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_CZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and CZE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and DEU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and HUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and ITA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_LIE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and LIE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AUT_1_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AUT and SVN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AUT_0_AUT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AUT level (1) by AUT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- AZE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.aze" name="AZE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/aj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AZE/AZE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AZE/AZE_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/AZE/AZE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="AZE(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/AZE/AZE_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AZE_2_AZE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country AZE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AZE_2_GEO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AZE and GEO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AZE_2_IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AZE and IRN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AZE_2_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AZE and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/AZE_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country AZE and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AZE_0_AZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AZE level (1) by AZE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.aze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/AZE_1_AZE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of AZE level (2) by AZE (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BDI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bdi" name="BDI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/by.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BDI/BDI_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BDI/BDI_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BDI/BDI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BDI(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BDI/BDI_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BDI_2_BDI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BDI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BDI_2_COD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BDI and COD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BDI_2_RWA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BDI and RWA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BDI_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BDI and TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BDI_0_BDI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BDI level (1) by BDI (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bdi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BDI_1_BDI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BDI level (2) by BDI (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BEL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bel" name="BEL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEL/BEL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BEL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/be.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEL/BEL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BEL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BEL/BEL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEL/BEL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BEL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEL/BEL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BEL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BEL/BEL_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEL_1_BEL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BEL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEL_1_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEL and DEU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEL_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEL and FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEL_1_LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEL and LUX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEL_1_NLD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEL and NLD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bel" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BEL_0_BEL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BEL level (1) by BEL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BEN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ben" name="BEN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BEN/BEN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BEN/BEN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BEN/BEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BEN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BEN/BEN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEN_2_BEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEN_2_BFA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEN and BFA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEN_2_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEN and NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEN_2_NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEN and NGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BEN_2_TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BEN and TGO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BEN_0_BEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BEN level (1) by BEN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ben" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BEN_1_BEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BEN level (2) by BEN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BFA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bfa" name="BFA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/uv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BFA/BFA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BFA/BFA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BFA/BFA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BFA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BFA/BFA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_BFA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BFA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_CIV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BFA and CIV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_GHA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BFA and GHA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_MLI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BFA and MLI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BFA and NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BFA_2_TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BFA and TGO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BFA_0_BFA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BFA level (1) by BFA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bfa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BFA_1_BFA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BFA level (2) by BFA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BGD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bgd" name="BGD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BGD/BGD_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BGD/BGD_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGD/BGD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BGD(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BGD/BGD_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGD_2_BGD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BGD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGD_2_IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGD and IND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BGD_0_BGD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BGD level (1) by BGD (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BGD_1_BGD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BGD level (2) by BGD (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BGR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bgr" name="BGR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGR/BGR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BGR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGR/BGR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BGR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BGR/BGR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGR/BGR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BGR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BGR/BGR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BGR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BGR/BGR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_BGR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BGR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_GRC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and GRC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_MKD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_MKD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and ROU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BGR_1_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BGR and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bgr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BGR_0_BGR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BGR level (1) by BGR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BHR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bhr" name="BHR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ba.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BHR/BHR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BHR/BHR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHR/BHR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BHR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BHR/BHR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BHR_2_BHR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BHR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BHR_0_BHR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BHR level (1) by BHR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BHR_1_BHR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BHR level (2) by BHR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BHS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bhs" name="BHS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhs" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHS/BHS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BHS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bhs" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BHS/BHS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BHS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BHS/BHS_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- BIH -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bih" name="BIH" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BIH/BIH_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BIH (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BIH/BIH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BIH(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BIH/BIH_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BIH/BIH_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BIH (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BIH/BIH_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BIH(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BIH/BIH_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BIH_1_BIH_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BIH" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BIH_1_HRV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BIH and HRV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BIH_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BIH and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bih" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BIH_0_BIH_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BIH level (1) by BIH (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BLR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.blr" name="BLR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BLR/BLR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BLR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bo.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BLR/BLR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BLR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BLR/BLR_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_LTU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLR and LTU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_LVA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLR and LVA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLR and POL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLR and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country BLR and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLR_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country BLR and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+
+<!-- BLZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.blz" name="BLZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BLZ/BLZ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BLZ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BLZ/BLZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BLZ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BLZ/BLZ_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLZ_0_GTM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLZ and GTM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.blz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BLZ_0_MEX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BLZ and MEX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- BMU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bmu" name="BMU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bmu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BMU/BMU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BMU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bd.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bmu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BMU/BMU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BMU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BMU/BMU_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- BOL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bol" name="BOL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BOL/BOL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BOL/BOL_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BOL/BOL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BOL(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BOL/BOL_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BOL_2_BOL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BOL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BOL_2_BRA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BOL and BRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BOL_2_CHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BOL and CHL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BOL_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BOL and PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BOL_2_PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BOL and PRY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BOL_0_BOL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BOL level (1) by BOL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BOL_1_BOL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BOL level (2) by BOL (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BRA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bra" name="BRA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/br.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRA/BRA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRA/BRA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRA/BRA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BRA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRA/BRA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_BRA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_COL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and COL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_GUF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and GUF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_GUY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and GUY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and PRY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and SUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_URY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and URY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRA_2_VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRA and VEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BRA_0_BRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BRA level (1) by BRA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BRA_1_BRA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BRA level (2) by BRA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BRB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.brb" name="BRB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRB/BRB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bb.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRB/BRB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BRB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRB/BRB_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- BRN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.brn" name="BRN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bx.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRN/BRN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRN/BRN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BRN/BRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BRN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BRN/BRN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRN_2_BRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BRN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BRN_2_MYS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BRN and MYS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BRN_0_BRN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BRN level (1) by BRN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.brn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BRN_1_BRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BRN level (2) by BRN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BTN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.btn" name="BTN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BTN/BTN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BTN/BTN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BTN/BTN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="BTN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BTN/BTN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BTN_2_BTN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country BTN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BTN_2_CHN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BTN and CHN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BTN_2_IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BTN and IND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BTN_0_BTN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BTN level (1) by BTN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.btn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BTN_1_BTN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BTN level (2) by BTN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BVT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bvt" name="BVT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bvt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BVT/BVT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BVT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bvt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BVT/BVT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BVT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BVT/BVT_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bvt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/BVT_0_BVT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of BVT level (1) by BVT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- BWA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.bwa" name="BWA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BWA/BWA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="BWA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/BWA/BWA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="BWA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/BWA/BWA_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BWA_0_NAM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BWA and NAM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BWA_0_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BWA and ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BWA_0_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BWA and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.bwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/BWA_0_ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country BWA and ZWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- CAF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.caf" name="CAF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ct.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CAF/CAF_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CAF/CAF_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAF/CAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="CAF(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CAF/CAF_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_CAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_CMR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAF and CMR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_COD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAF and COD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAF and COG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAF and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAF_2_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAF and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CAF_0_CAF_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CAF level (1) by CAF (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.caf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CAF_1_CAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CAF level (2) by CAF (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CAN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.can" name="CAN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAN/CAN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CAN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ca.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAN/CAN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CAN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CAN/CAN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAN/CAN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CAN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CAN/CAN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CAN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CAN/CAN_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAN_1_CAN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CAN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CAN_1_USA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CAN and USA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.can" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CAN_0_CAN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CAN level (1) by CAN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CCK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cck" name="CCK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cck" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CCK/CCK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CCK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ck.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cck" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CCK/CCK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CCK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CCK/CCK_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- CHE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.che" name="CHE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHE/CHE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHE/CHE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CHE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHE/CHE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHE/CHE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHE/CHE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CHE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHE/CHE_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHE_1_CHE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CHE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHE_1_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHE and DEU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHE_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHE and FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHE_1_ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHE and ITA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHE_1_LIE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHE and LIE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.che" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CHE_0_CHE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CHE level (1) by CHE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CHL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.chl" name="CHL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ci.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHL/CHL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHL/CHL_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHL/CHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="CHL(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHL/CHL_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHL_2_CHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CHL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHL_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHL and PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CHL_0_CHL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CHL level (1) by CHL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CHL_1_CHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CHL level (2) by CHL (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CHN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.chn" name="CHN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ch.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHN/CHN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHN/CHN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CHN/CHN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="CHN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHN/CHN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_CHN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CHN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_HKG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and HKG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and IND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_KAZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and KAZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_KGZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and KGZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_LAO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and LAO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_MAC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and MAC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_MNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and MNG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_NPL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and NPL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and PAK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_PRK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and PRK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and TJK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_TWN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and TWN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CHN_2_VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CHN and VNM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CHN_0_CHN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CHN level (1) by CHN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.chn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CHN_1_CHN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CHN level (2) by CHN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CIV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.civ" name="CIV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/iv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CIV/CIV_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CIV/CIV_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CIV/CIV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="CIV(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CIV/CIV_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CIV_2_CIV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CIV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CIV_2_GHA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CIV and GHA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CIV_2_GIN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CIV and GIN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CIV_2_LBR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CIV and LBR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CIV_2_MLI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CIV and MLI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CIV_0_CIV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CIV level (1) by CIV (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.civ" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CIV_1_CIV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CIV level (2) by CIV (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CMR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cmr" name="CMR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CMR/CMR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CMR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CMR/CMR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CMR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CMR/CMR_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_COD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and COD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and COG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_GAB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and GAB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_GNQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and GNQ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and NGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CMR_0_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CMR and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- COD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cod" name="COD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COD/COD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COD/COD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="COD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COD/COD_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COD_0_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COD and COG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COD_0_RWA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COD and RWA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COD_0_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COD and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COD_0_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COD and UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cod" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COD_0_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COD and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- COG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cog" name="COG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="COG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COG/COG_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COG (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="COG(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COG/COG_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COG (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COG/COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="COG(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COG/COG_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COG_2_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country COG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COG_2_GAB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COG and GAB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COG_0_COG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COG level (1) by COG (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cog" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COG_1_COG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COG level (2) by COG (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- COK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cok" name="COK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cok" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COK/COK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cw.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cok" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COK/COK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="COK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COK/COK_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cok" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COK_0_COK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COK level (1) by COK (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- COL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.col" name="COL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/co.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="COL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COL/COL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="COL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COL/COL_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COL (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COL/COL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="COL(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COL/COL_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COL_2_COL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country COL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COL_2_ECU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COL and ECU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COL_2_PAN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COL and PAN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COL_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COL and PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COL_2_VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country COL and VEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COL_0_COL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COL level (1) by COL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.col" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COL_1_COL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COL level (2) by COL (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- COM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.com" name="COM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="COM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COM/COM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="COM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COM/COM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="COM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/COM/COM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="COM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/COM/COM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/COM_2_COM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country COM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COM_0_COM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COM level (1) by COM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.com" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/COM_1_COM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of COM level (2) by COM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CPV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cpv" name="CPV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CPV/CPV_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CPV/CPV_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CPV/CPV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="CPV(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CPV/CPV_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CPV_2_CPV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CPV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CPV_0_CPV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CPV level (1) by CPV (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cpv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CPV_1_CPV_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CPV level (2) by CPV (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CRI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cri" name="CRI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CRI/CRI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CRI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cs.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CRI/CRI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CRI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CRI/CRI_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CRI_0_NIC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CRI and NIC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CRI_0_PAN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CRI and PAN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- CUB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cub" name="CUB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cub" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CUB/CUB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CUB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cub" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CUB/CUB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CUB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CUB/CUB_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cub" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CUB_0_CUB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CUB level (1) by CUB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CXR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cxr" name="CXR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cxr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CXR/CXR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CXR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/kt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cxr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CXR/CXR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CXR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CXR/CXR_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- CYM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cym" name="CYM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cym" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CYM/CYM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CYM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cym" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CYM/CYM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CYM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CYM/CYM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- CYP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cyp" name="CYP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cyp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CYP/CYP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CYP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cy.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cyp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CYP/CYP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CYP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CYP/CYP_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cyp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CYP_0_CYP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CYP level (1) by CYP (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- CZE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.cze" name="CZE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CZE/CZE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CZE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ez.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CZE/CZE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="CZE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CZE/CZE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CZE/CZE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="CZE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/CZE/CZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="CZE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CZE/CZE_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country CZE and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country CZE and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_CZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country CZE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CZE and DEU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CZE and HUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country CZE and POL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country CZE and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/CZE_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country CZE and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.cze" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/CZE_0_CZE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of CZE level (1) by CZE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- DEU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.deu" name="DEU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DEU/DEU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DEU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DEU/DEU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DEU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DEU/DEU_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DEU/DEU_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DEU (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DEU/DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="DEU(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DEU/DEU_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country DEU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_DNK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DEU and DNK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DEU and FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DEU and LUX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_NLD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DEU and NLD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DEU_1_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DEU and POL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.deu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DEU_0_DEU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DEU level (1) by DEU (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- DJI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.dji" name="DJI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DJI/DJI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DJI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/dj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DJI/DJI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DJI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DJI/DJI_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DJI_0_ERI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DJI and ERI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DJI_0_ETH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DJI and ETH" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DJI_0_SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DJI and SOM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DJI_0_DJI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DJI level (1) by DJI (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- DMA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.dma" name="DMA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dma" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DMA/DMA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DMA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/do.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dma" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DMA/DMA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DMA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DMA/DMA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- DNK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.dnk" name="DNK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DNK/DNK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DNK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/da.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DNK/DNK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DNK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DNK/DNK_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DNK/DNK_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DNK (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DNK/DNK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="DNK(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DNK/DNK_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DNK_1_DNK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country DNK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dnk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DNK_0_DNK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DNK level (1) by DNK (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- DOM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.dom" name="DOM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dom" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DOM/DOM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DOM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/dr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dom" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DOM/DOM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DOM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DOM/DOM_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dom" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DOM_0_DOM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DOM level (1) by DOM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- DZA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.dza" name="DZA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ag.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DZA/DZA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DZA/DZA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/DZA/DZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="DZA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DZA/DZA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_DZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country DZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_ESH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and ESH" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_LBY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and LBY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_MAR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and MAR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_MLI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and MLI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_MRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and MRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/DZA_2_TUN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country DZA and TUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DZA_0_DZA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DZA level (1) by DZA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.dza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/DZA_1_DZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of DZA level (2) by DZA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ECU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ecu" name="ECU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ec.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ECU/ECU_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ECU/ECU_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ECU/ECU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ECU(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ECU/ECU_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ECU_2_ECU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ECU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ECU_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ECU and PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ECU_0_ECU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ECU level (1) by ECU (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ecu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ECU_1_ECU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ECU level (2) by ECU (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- EGY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.egy" name="EGY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/eg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/EGY/EGY_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/EGY/EGY_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EGY/EGY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="EGY(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/EGY/EGY_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EGY_2_EGY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country EGY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EGY_2_ISR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country EGY and ISR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EGY_2_LBY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country EGY and LBY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EGY_2_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country EGY and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/EGY_0_EGY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of EGY level (1) by EGY (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.egy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/EGY_1_EGY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of EGY level (2) by EGY (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ERI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.eri" name="ERI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/er.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ERI/ERI_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ERI/ERI_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ERI/ERI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ERI(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ERI/ERI_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ERI_2_ERI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ERI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ERI_2_ETH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ERI and ETH" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ERI_2_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ERI and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ERI_0_ERI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ERI level (1) by ERI (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ERI_1_ERI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ERI level (2) by ERI (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ESH -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.esh" name="ESH" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esh" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESH/ESH_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ESH (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/wi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esh" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESH/ESH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ESH(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ESH/ESH_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esh" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ESH_0_MAR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ESH and MAR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esh" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ESH_0_MRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ESH and MRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- ESP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.esp" name="ESP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESP/ESP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ESP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESP/ESP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ESP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ESP/ESP_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESP/ESP_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ESP (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ESP/ESP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ESP(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ESP/ESP_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ESP_1_ESP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ESP" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ESP_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ESP and FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ESP_1_PRT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ESP and PRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.esp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ESP_0_ESP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ESP level (1) by ESP (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- EST -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.est" name="EST" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.est" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EST/EST_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="EST (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/en.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.est" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/EST/EST_0.graph" type="stemtype://org.eclipse.stem/Graph" title="EST(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/EST/EST_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.est" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EST_0_LVA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country EST and LVA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.est" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/EST_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country EST and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- ETH -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.eth" name="ETH" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eth" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ETH/ETH_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ETH (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/et.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eth" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ETH/ETH_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ETH(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ETH/ETH_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eth" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ETH_0_KEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ETH and KEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eth" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ETH_0_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ETH and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.eth" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ETH_0_SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ETH and SOM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- FIN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.fin" name="FIN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FIN/FIN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FIN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FIN/FIN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FIN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FIN/FIN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FIN/FIN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FIN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FIN/FIN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="FIN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FIN/FIN_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FIN_1_FIN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country FIN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FIN_1_NOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country FIN and NOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FIN_1_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country FIN and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FIN_1_SWE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country FIN and SWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/FIN_0_FIN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of FIN level (1) by FIN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- FJI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.fji" name="FJI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FJI/FJI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FJI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fji" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FJI/FJI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FJI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FJI/FJI_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- FLK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.flk" name="FLK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.flk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FLK/FLK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FLK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.flk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FLK/FLK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FLK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FLK/FLK_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- FRA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.fra" name="FRA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRA/FRA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FRA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRA/FRA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FRA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FRA/FRA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRA/FRA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FRA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRA/FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="FRA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FRA/FRA_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FRA_1_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country FRA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FRA_1_ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country FRA and ITA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/FRA_1_LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country FRA and LUX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fra" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/FRA_0_FRA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of FRA level (1) by FRA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- FRO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.fro" name="FRO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fro" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRO/FRO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FRO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fo.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fro" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FRO/FRO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FRO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FRO/FRO_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- FSM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.fsm" name="FSM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fsm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FSM/FSM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="FSM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.fsm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/FSM/FSM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="FSM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/FSM/FSM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GAB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gab" name="GAB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gb.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GAB/GAB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GAB/GAB_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GAB/GAB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GAB(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GAB/GAB_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GAB_2_GAB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GAB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GAB_2_GNQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GAB and GNQ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GAB_0_GAB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GAB level (1) by GAB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gab" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GAB_1_GAB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GAB level (2) by GAB (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GBR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gbr" name="GBR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GBR/GBR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GBR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/uk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GBR/GBR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GBR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GBR/GBR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GBR/GBR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GBR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GBR/GBR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GBR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GBR/GBR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GBR_1_GBR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GBR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GBR_1_IRL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GBR and IRL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GBR_0_GBR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GBR level (1) by GBR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GEO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.geo" name="GEO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.geo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GEO/GEO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GEO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.geo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GEO/GEO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GEO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GEO/GEO_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.geo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GEO_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GEO and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.geo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GEO_0_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GEO and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- GGY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ggy" name="GGY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ggy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GGY/GGY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GGY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ggy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GGY/GGY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GGY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GGY/GGY_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GHA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gha" name="GHA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GHA/GHA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GHA/GHA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GHA/GHA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GHA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GHA/GHA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GHA_2_GHA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GHA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GHA_2_TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GHA and TGO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GHA_0_GHA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GHA level (1) by GHA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GHA_1_GHA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GHA level (2) by GHA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GIB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gib" name="GIB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gib" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIB/GIB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GIB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gib" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIB/GIB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GIB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GIB/GIB_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GIN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gin" name="GIN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GIN/GIN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GIN/GIN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GIN/GIN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GIN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GIN/GIN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_GIN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GIN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_GNB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GIN and GNB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_LBR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GIN and LBR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_MLI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GIN and MLI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GIN and SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GIN_2_SLE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GIN and SLE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GIN_0_GIN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GIN level (1) by GIN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gin" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GIN_1_GIN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GIN level (2) by GIN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GLP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.glp" name="GLP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.glp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GLP/GLP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GLP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.glp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GLP/GLP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GLP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GLP/GLP_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GMB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gmb" name="GMB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ga.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GMB/GMB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GMB/GMB_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GMB/GMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GMB(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GMB/GMB_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GMB_2_GMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GMB_2_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GMB and SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GMB_0_GMB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GMB level (1) by GMB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GMB_1_GMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GMB level (2) by GMB (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GNB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gnb" name="GNB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNB/GNB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNB/GNB_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB (2) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNB/GNB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GNB(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNB/GNB_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GNB_2_GNB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GNB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GNB_2_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GNB and SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GNB_0_GNB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GNB level (1) by GNB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GNB_1_GNB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GNB level (2) by GNB (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GNQ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gnq" name="GNQ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ek.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNQ/GNQ_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNQ/GNQ_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GNQ/GNQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GNQ(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GNQ/GNQ_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GNQ_2_GNQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GNQ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GNQ_0_GNQ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GNQ level (1) by GNQ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gnq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GNQ_1_GNQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GNQ level (2) by GNQ (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GRC -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.grc" name="GRC" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRC/GRC_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GRC (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRC/GRC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GRC(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GRC/GRC_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRC/GRC_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GRC (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRC/GRC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GRC(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GRC/GRC_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GRC_1_GRC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GRC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GRC_1_MKD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GRC and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GRC_1_MKD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GRC and MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GRC_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GRC and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GRC_1_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GRC and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GRC_0_GRC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GRC level (1) by GRC (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GRD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.grd" name="GRD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRD/GRD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GRD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRD/GRD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GRD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GRD/GRD_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GRD_0_GRD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GRD level (1) by GRD (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- GRL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.grl" name="GRL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRL/GRL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GRL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.grl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GRL/GRL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GRL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GRL/GRL_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GTM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gtm" name="GTM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gtm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GTM/GTM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GTM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gtm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GTM/GTM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GTM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GTM/GTM_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gtm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GTM_0_HND_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GTM and HND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gtm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GTM_0_MEX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GTM and MEX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gtm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GTM_0_SLV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GTM and SLV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- GUF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.guf" name="GUF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUF/GUF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GUF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUF/GUF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GUF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GUF/GUF_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GUF_0_SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GUF and SUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- GUM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.gum" name="GUM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gum" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUM/GUM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GUM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gq.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.gum" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUM/GUM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GUM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GUM/GUM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- GUY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.guy" name="GUY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/gy.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GUY/GUY_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GUY/GUY_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/GUY/GUY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="GUY(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/GUY/GUY_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GUY_2_GUY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country GUY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GUY_2_SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GUY and SUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/GUY_2_VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country GUY and VEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GUY_0_GUY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GUY level (1) by GUY (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.guy" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/GUY_1_GUY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of GUY level (2) by GUY (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- HKG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hkg" name="HKG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hkg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HKG/HKG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HKG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/hk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hkg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HKG/HKG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HKG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HKG/HKG_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- HMD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hmd" name="HMD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hmd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HMD/HMD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HMD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/hm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hmd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HMD/HMD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HMD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HMD/HMD_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- HND -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hnd" name="HND" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hnd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HND/HND_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HND (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ho.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hnd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HND/HND_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HND(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HND/HND_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hnd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HND_0_NIC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HND and NIC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hnd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HND_0_SLV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HND and SLV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hnd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/HND_0_HND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of HND level (1) by HND (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- HRV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hrv" name="HRV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HRV/HRV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HRV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/hr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HRV/HRV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HRV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HRV/HRV_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HRV/HRV_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HRV (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HRV/HRV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="HRV(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HRV/HRV_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HRV_1_HRV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country HRV" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HRV_1_HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HRV and HUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HRV_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HRV and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HRV_1_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HRV and SVN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hrv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/HRV_0_HRV_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of HRV level (1) by HRV (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- HTI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hti" name="HTI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hti" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HTI/HTI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HTI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ha.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hti" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HTI/HTI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HTI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HTI/HTI_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- HUN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.hun" name="HUN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HUN/HUN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HUN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/hu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HUN/HUN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="HUN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HUN/HUN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HUN/HUN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="HUN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/HUN/HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="HUN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/HUN/HUN_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country HUN and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country HUN and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country HUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HUN and ROU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HUN and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country HUN and SVN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country HUN and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/HUN_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country HUN and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.hun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/HUN_0_HUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of HUN level (1) by HUN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- IDN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.idn" name="IDN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/id.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IDN/IDN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IDN/IDN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IDN/IDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="IDN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IDN/IDN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IDN_2_IDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country IDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IDN_2_MYS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IDN and MYS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IDN_2_PNG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IDN and PNG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IDN_2_PNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IDN and PNG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IDN_0_IDN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IDN level (1) by IDN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.idn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IDN_1_IDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IDN level (2) by IDN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- IMN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.imn" name="IMN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.imn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IMN/IMN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IMN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/im.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.imn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IMN/IMN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IMN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IMN/IMN_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- IND -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ind" name="IND" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IND (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/in.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IND(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IND/IND_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IND (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="IND(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IND/IND_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IND (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IND/IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="IND(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IND/IND_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IND_2_IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country IND" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IND_2_NPL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IND and NPL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IND_2_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IND and PAK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IND_0_IND_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IND level (1) by IND (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ind" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IND_1_IND_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IND level (2) by IND (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- IOT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.iot" name="IOT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.iot" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IOT/IOT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IOT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/io.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.iot" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IOT/IOT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IOT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IOT/IOT_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- IRL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.irl" name="IRL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRL/IRL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ei.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRL/IRL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IRL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRL/IRL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRL/IRL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRL/IRL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="IRL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRL/IRL_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRL_1_IRL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country IRL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IRL_0_IRL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IRL level (1) by IRL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- IRN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.irn" name="IRN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ir.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRN/IRN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRN/IRN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRN/IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="IRN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRN/IRN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRN_2_IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country IRN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRN_2_IRQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRN and IRQ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRN_2_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRN and PAK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRN_2_TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRN and TKM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRN_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRN and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IRN_0_IRN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IRN level (1) by IRN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IRN_1_IRN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IRN level (2) by IRN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- IRQ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.irq" name="IRQ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/iz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRQ/IRQ_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRQ/IRQ_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/IRQ/IRQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="IRQ(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/IRQ/IRQ_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_IRQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country IRQ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_JOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRQ and JOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_KWT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRQ and KWT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRQ and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRQ and SYR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/IRQ_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country IRQ and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IRQ_0_IRQ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IRQ level (1) by IRQ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.irq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/IRQ_1_IRQ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of IRQ level (2) by IRQ (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ISL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.isl" name="ISL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISL/ISL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ISL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ic.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISL/ISL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ISL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ISL/ISL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISL/ISL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ISL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISL/ISL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ISL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ISL/ISL_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISL_1_ISL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ISL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ISL_0_ISL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ISL level (1) by ISL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ISR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.isr" name="ISR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/is.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ISR/ISR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="Israel CDC bitmap (Scanned)" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ISR/ISR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="Israel CDC bitmap (Scanned)" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ISR/ISR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ISR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ISR/ISR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISR_2_ISR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ISR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISR_2_JOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ISR and JOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISR_2_LBN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ISR and LBN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISR_2_PSE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ISR and PSE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ISR_2_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ISR and SYR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ISR_0_ISR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ISR level (1) by ISR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.isr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ISR_1_ISR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ISR level (2) by ISR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ITA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ita" name="ITA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ITA/ITA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ITA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/it.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ITA/ITA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ITA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ITA/ITA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ITA/ITA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ITA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ITA/ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ITA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ITA/ITA_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ITA_1_ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ITA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ITA_1_SMR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ITA and SMR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ITA_1_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ITA and SVN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ita" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ITA_0_ITA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ITA level (1) by ITA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- JAM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.jam" name="JAM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JAM/JAM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JAM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/jm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JAM/JAM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="JAM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JAM/JAM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- JEY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.jey" name="JEY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jey" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JEY/JEY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JEY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/je.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jey" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JEY/JEY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="JEY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JEY/JEY_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- JOR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.jor" name="JOR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/jo.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JOR/JOR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JOR/JOR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JOR/JOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="JOR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JOR/JOR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/JOR_2_JOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country JOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/JOR_2_PSE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country JOR and PSE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/JOR_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country JOR and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/JOR_2_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country JOR and SYR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/JOR_0_JOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of JOR level (1) by JOR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/JOR_1_JOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of JOR level (2) by JOR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- JPN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.jpn" name="JPN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ja.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JPN/JPN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JPN/JPN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/JPN/JPN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="JPN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/JPN/JPN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/JPN_2_JPN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country JPN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/JPN_0_JPN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of JPN level (1) by JPN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.jpn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/JPN_1_JPN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of JPN level (2) by JPN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KAZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kaz" name="KAZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/kz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KAZ/KAZ_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KAZ/KAZ_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KAZ/KAZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KAZ(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KAZ/KAZ_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KAZ_2_KAZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KAZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KAZ_2_KGZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KAZ and KGZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KAZ_2_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KAZ and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KAZ_2_TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KAZ and TKM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KAZ_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KAZ and UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KAZ_0_KAZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KAZ level (1) by KAZ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kaz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KAZ_1_KAZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KAZ level (2) by KAZ (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KEN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ken" name="KEN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ke.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KEN/KEN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KEN/KEN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KEN/KEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KEN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KEN/KEN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KEN_2_KEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KEN_2_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KEN and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KEN_2_SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KEN and SOM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KEN_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KEN and TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KEN_2_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KEN and UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KEN_0_KEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KEN level (1) by KEN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ken" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KEN_1_KEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KEN level (2) by KEN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KGZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kgz" name="KGZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/kg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KGZ/KGZ_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KGZ/KGZ_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KGZ/KGZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KGZ(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KGZ/KGZ_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KGZ_2_KGZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KGZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KGZ_2_TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KGZ and TJK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KGZ_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KGZ and UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KGZ_0_KGZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KGZ level (1) by KGZ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kgz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KGZ_1_KGZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KGZ level (2) by KGZ (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KHM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.khm" name="KHM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cb.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KHM/KHM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KHM/KHM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KHM/KHM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KHM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KHM/KHM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KHM_2_KHM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KHM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KHM_2_LAO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KHM and LAO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KHM_2_THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KHM and THA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KHM_2_VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KHM and VNM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KHM_0_KHM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KHM level (1) by KHM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.khm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KHM_1_KHM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KHM level (2) by KHM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KIR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kir" name="KIR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kir" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KIR/KIR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KIR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/kr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kir" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KIR/KIR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KIR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KIR/KIR_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- KNA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kna" name="KNA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kna" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KNA/KNA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KNA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kna" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KNA/KNA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KNA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KNA/KNA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- KOR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kor" name="KOR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ks.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KOR/KOR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KOR/KOR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KOR/KOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KOR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KOR/KOR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KOR_2_KOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KOR_2_PRK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KOR and PRK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KOR_0_KOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KOR level (1) by KOR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KOR_1_KOR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KOR level (2) by KOR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- KWT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.kwt" name="KWT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ku.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KWT/KWT_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KWT/KWT_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/KWT/KWT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="KWT(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/KWT/KWT_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KWT_2_KWT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country KWT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/KWT_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country KWT and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KWT_0_KWT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KWT level (1) by KWT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.kwt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/KWT_1_KWT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of KWT level (2) by KWT (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LAO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lao" name="LAO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/la.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LAO/LAO_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LAO/LAO_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LAO/LAO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="LAO(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LAO/LAO_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LAO_2_LAO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LAO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LAO_2_THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LAO and THA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LAO_2_VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LAO and VNM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LAO_0_LAO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LAO level (1) by LAO (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lao" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LAO_1_LAO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LAO level (2) by LAO (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LBN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lbn" name="LBN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/le.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBN/LBN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBN/LBN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBN/LBN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="LBN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBN/LBN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBN_2_LBN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LBN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBN_2_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBN and SYR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LBN_0_LBN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LBN level (1) by LBN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LBN_1_LBN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LBN level (2) by LBN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LBR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lbr" name="LBR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/li.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBR/LBR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBR/LBR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBR/LBR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="LBR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBR/LBR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBR_2_LBR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LBR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBR_2_SLE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBR and SLE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LBR_0_LBR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LBR level (1) by LBR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lbr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LBR_1_LBR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LBR level (2) by LBR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LBY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lby" name="LBY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBY/LBY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ly.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBY/LBY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LBY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBY/LBY_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBY/LBY_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LBY (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LBY/LBY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LBY(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LBY/LBY_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBY_1_LBY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LBY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBY_1_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBY and NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBY_1_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBY and SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBY_1_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBY and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LBY_1_TUN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LBY and TUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lby" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LBY_0_LBY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LBY level (1) by LBY (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LCA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lca" name="LCA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lca" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LCA/LCA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LCA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/st.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lca" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LCA/LCA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LCA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LCA/LCA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- LIE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lie" name="LIE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LIE/LIE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LIE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ls.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LIE/LIE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LIE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LIE/LIE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LIE/LIE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LIE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LIE/LIE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LIE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LIE/LIE_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LIE_1_LIE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LIE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lie" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LIE_0_LIE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LIE level (1) by LIE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LKA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lka" name="LKA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lka" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LKA/LKA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LKA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ce.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lka" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LKA/LKA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LKA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LKA/LKA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- LSO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lso" name="LSO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/lt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LSO/LSO_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LSO/LSO_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LSO/LSO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="LSO(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LSO/LSO_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LSO_2_LSO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LSO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LSO_2_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LSO and ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LSO_0_LSO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LSO level (1) by LSO (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lso" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LSO_1_LSO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LSO level (2) by LSO (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LTU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ltu" name="LTU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ltu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LTU/LTU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LTU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/lh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ltu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LTU/LTU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LTU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LTU/LTU_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ltu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LTU_0_LVA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LTU and LVA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ltu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LTU_0_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LTU and POL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ltu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LTU_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LTU and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- LUX -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lux" name="LUX" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LUX/LUX_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LUX (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/lu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LUX/LUX_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LUX(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LUX/LUX_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LUX/LUX_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LUX (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LUX/LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="LUX(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LUX/LUX_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LUX_1_LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country LUX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lux" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/LUX_0_LUX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of LUX level (1) by LUX (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- LVA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.lva" name="LVA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lva" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LVA/LVA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="LVA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/lg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lva" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/LVA/LVA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="LVA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/LVA/LVA_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.lva" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/LVA_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country LVA and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- MAC -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mac" name="MAC" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAC/MAC_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAC/MAC_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAC/MAC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MAC(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAC/MAC_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MAC_2_MAC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MAC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MAC_0_MAC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MAC level (1) by MAC (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mac" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MAC_1_MAC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MAC level (2) by MAC (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MAR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mar" name="MAR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mo.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAR/MAR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAR/MAR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MAR/MAR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MAR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MAR/MAR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MAR_2_MAR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MAR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MAR_2_MRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MAR and MRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MAR_0_MAR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MAR level (1) by MAR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mar" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MAR_1_MAR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MAR level (2) by MAR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MCO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mco" name="MCO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mco" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MCO/MCO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MCO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mco" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MCO/MCO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MCO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MCO/MCO_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mco" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MCO_0_MCO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MCO level (1) by MCO (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MDA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mda" name="MDA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/md.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDA/MDA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDA/MDA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDA/MDA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MDA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDA/MDA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_2_MDA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MDA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_2_ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MDA and ROU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_2_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDA_2_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country MDA and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MDA_0_MDA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MDA level (1) by MDA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mda" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MDA_1_MDA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MDA level (2) by MDA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MDG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mdg" name="MDG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ma.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDG/MDG_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDG/MDG_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDG/MDG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MDG(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDG/MDG_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MDG_2_MDG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MDG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MDG_0_MDG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MDG level (1) by MDG (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdg" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MDG_1_MDG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MDG level (2) by MDG (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MDV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mdv" name="MDV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDV/MDV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MDV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mdv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MDV/MDV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MDV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MDV/MDV_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MEX -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mex" name="MEX" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MEX/MEX_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MEX (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mx.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MEX/MEX_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MEX(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MEX/MEX_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MEX/MEX_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MEX (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MEX/MEX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MEX(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MEX/MEX_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MEX_1_MEX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MEX" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MEX_1_USA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MEX and USA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mex" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MEX_0_MEX_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MEX level (1) by MEX (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MHL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mhl" name="MHL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mhl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MHL/MHL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MHL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/rm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mhl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MHL/MHL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MHL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MHL/MHL_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MKD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mkd" name="MKD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mkd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MKD/MKD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MKD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mkd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MKD/MKD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MKD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MKD/MKD_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mkd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MKD_0_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MKD and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mkd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MKD_2_MKD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MKD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mkd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MKD_2_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MKD and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- MLI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mli" name="MLI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mli" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MLI/MLI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MLI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ml.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mli" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MLI/MLI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MLI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MLI/MLI_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mli" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MLI_0_MRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MLI and MRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mli" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MLI_0_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MLI and NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mli" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MLI_0_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MLI and SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- MLT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mlt" name="MLT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mlt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MLT/MLT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MLT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mlt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MLT/MLT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MLT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MLT/MLT_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mlt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MLT_0_MLT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MLT level (1) by MLT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MMR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mmr" name="MMR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MMR/MMR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MMR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mmr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MMR/MMR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MMR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MMR/MMR_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MNE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mne" name="MNE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mne" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNE/MNE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MNE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mj.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mne" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNE/MNE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MNE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MNE/MNE_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MNG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mng" name="MNG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MNG/MNG_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MNG/MNG_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNG/MNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MNG(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MNG/MNG_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MNG_2_MNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MNG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MNG_2_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MNG and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MNG_0_MNG_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MNG level (1) by MNG (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mng" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MNG_1_MNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MNG level (2) by MNG (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MNP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mnp" name="MNP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mnp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNP/MNP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MNP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cq.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mnp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MNP/MNP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MNP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MNP/MNP_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MOZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.moz" name="MOZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MOZ/MOZ_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MOZ/MOZ_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MOZ/MOZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MOZ(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MOZ/MOZ_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_MOZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MOZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_MWI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and MWI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_SWZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and SWZ" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MOZ_2_ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MOZ and ZWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MOZ_0_MOZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MOZ level (1) by MOZ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.moz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MOZ_1_MOZ_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MOZ level (2) by MOZ (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MRT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mrt" name="MRT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mrt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MRT/MRT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MRT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mrt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MRT/MRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MRT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MRT/MRT_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mrt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MRT_0_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MRT and SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- MSR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.msr" name="MSR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.msr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MSR/MSR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MSR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.msr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MSR/MSR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MSR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MSR/MSR_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MTQ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mtq" name="MTQ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mtq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MTQ/MTQ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MTQ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mb.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mtq" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MTQ/MTQ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MTQ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MTQ/MTQ_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- MUS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mus" name="MUS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MUS/MUS_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MUS/MUS_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MUS/MUS_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MUS(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MUS/MUS_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MUS_2_MUS_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MUS_0_MUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MUS level (1) by MUS (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MUS_1_MUS_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MUS level (2) by MUS (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MWI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mwi" name="MWI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MWI/MWI_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MWI/MWI_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MWI/MWI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="MWI(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MWI/MWI_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MWI_2_MWI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country MWI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MWI_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MWI and TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MWI_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MWI and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MWI_0_MWI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MWI level (1) by MWI (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mwi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MWI_1_MWI_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MWI level (2) by MWI (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MYS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.mys" name="MYS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mys" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MYS/MYS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MYS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/my.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mys" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MYS/MYS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MYS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MYS/MYS_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mys" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MYS_0_SGP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MYS and SGP" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mys" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/MYS_0_THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country MYS and THA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.mys" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MYS_0_MYS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MYS level (1) by MYS (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- MYT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.myt" name="MYT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.myt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MYT/MYT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="MYT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.myt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/MYT/MYT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="MYT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/MYT/MYT_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.myt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/MYT_0_MYT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of MYT level (1) by MYT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NAM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nam" name="NAM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/wa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NAM/NAM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NAM/NAM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NAM/NAM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="NAM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NAM/NAM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NAM_2_NAM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NAM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NAM_2_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NAM and ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NAM_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NAM and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NAM_2_ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NAM and ZWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NAM_0_NAM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NAM level (1) by NAM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nam" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NAM_1_NAM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NAM level (2) by NAM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NCL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ncl" name="NCL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ncl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NCL/NCL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NCL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ncl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NCL/NCL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NCL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NCL/NCL_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- NER -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ner" name="NER" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NER (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ng.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NER(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NER/NER_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NER (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NER(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NER/NER_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NER (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NER/NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="NER(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NER/NER_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NER_2_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NER_2_NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NER and NGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NER_2_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NER and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NER_0_NER_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NER level (1) by NER (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ner" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NER_1_NER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NER level (2) by NER (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NFK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nfk" name="NFK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nfk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NFK/NFK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NFK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nfk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NFK/NFK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NFK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NFK/NFK_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- NGA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nga" name="NGA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ni.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NGA/NGA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NGA/NGA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NGA/NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="NGA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NGA/NGA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NGA_2_NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NGA_2_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NGA and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NGA_0_NGA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NGA level (1) by NGA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NGA_1_NGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NGA level (2) by NGA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NIC -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nic" name="NIC" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nic" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NIC/NIC_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NIC (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nic" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NIC/NIC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NIC(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NIC/NIC_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- NIU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.niu" name="NIU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.niu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NIU/NIU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NIU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ne.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.niu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NIU/NIU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NIU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NIU/NIU_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- NLD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nld" name="NLD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NLD/NLD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NLD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NLD/NLD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NLD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NLD/NLD_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NLD/NLD_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NLD (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NLD/NLD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NLD(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NLD/NLD_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NLD_1_NLD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NLD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nld" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NLD_0_NLD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NLD level (1) by NLD (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NOR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nor" name="NOR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NOR/NOR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NOR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/no.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NOR/NOR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NOR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NOR/NOR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NOR/NOR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NOR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NOR/NOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NOR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NOR/NOR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NOR_1_NOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NOR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NOR_1_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NOR and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NOR_1_SWE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country NOR and SWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nor" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NOR_0_NOR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NOR level (1) by NOR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NPL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.npl" name="NPL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/np.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NPL/NPL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NPL/NPL_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NPL/NPL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="NPL(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NPL/NPL_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/NPL_2_NPL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country NPL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NPL_0_NPL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NPL level (1) by NPL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.npl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/NPL_1_NPL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of NPL level (2) by NPL (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- NRU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nru" name="NRU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nru" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NRU/NRU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NRU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nru" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NRU/NRU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NRU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NRU/NRU_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- NZL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.nzl" name="NZL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nzl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NZL/NZL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="NZL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.nzl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/NZL/NZL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="NZL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/NZL/NZL_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- OMN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.omn" name="OMN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/mu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/OMN/OMN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/OMN/OMN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/OMN/OMN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="OMN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/OMN/OMN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/OMN_2_OMN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country OMN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/OMN_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country OMN and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/OMN_2_YEM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country OMN and YEM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/OMN_0_OMN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of OMN level (1) by OMN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.omn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/OMN_1_OMN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of OMN level (2) by OMN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PAK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pak" name="PAK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PAK/PAK_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PAK/PAK_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAK/PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="PAK(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PAK/PAK_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PAK_2_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PAK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PAK_0_PAK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PAK level (1) by PAK (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pak" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PAK_1_PAK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PAK level (2) by PAK (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PAN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pan" name="PAN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pan" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAN/PAN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PAN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pan" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PAN/PAN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PAN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PAN/PAN_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- PCN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pcn" name="PCN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pcn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PCN/PCN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PCN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pcn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PCN/PCN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PCN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PCN/PCN_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- PER -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.per" name="PER" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PER (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pe.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PER(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PER/PER_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PER (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PER(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PER/PER_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PER (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PER/PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="PER(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PER/PER_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PER_2_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PER" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PER_0_PER_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PER level (1) by PER (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.per" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PER_1_PER_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PER level (2) by PER (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PHL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.phl" name="PHL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/rp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PHL/PHL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PHL/PHL_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PHL/PHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="PHL(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PHL/PHL_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PHL_2_PHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PHL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PHL_0_PHL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PHL level (1) by PHL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.phl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PHL_1_PHL_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PHL level (2) by PHL (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PLW -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.plw" name="PLW" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.plw" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PLW/PLW_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PLW (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ps.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.plw" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PLW/PLW_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PLW(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PLW/PLW_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.plw" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PLW_0_PLW_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PLW level (1) by PLW (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PNG -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.png" name="PNG" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.png" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PNG/PNG_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PNG (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.png" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PNG/PNG_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PNG(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PNG/PNG_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.png" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PNG_2_PNG_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PNG" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+
+<!-- POL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pol" name="POL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/POL/POL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="POL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/POL/POL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="POL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/POL/POL_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/POL/POL_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="POL (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/POL/POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="POL(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/POL/POL_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country POL and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country POL and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_1_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country POL" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_1_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country POL and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country POL and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/POL_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country POL and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pol" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/POL_0_POL_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of POL level (1) by POL (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PRI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pri" name="PRI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRI/PRI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/rq.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRI/PRI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PRI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRI/PRI_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRI/PRI_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRI (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http%3A%2F%2Ffactfinder.census.gov%2Fservlet%2FGCTTable%3F_bm%3Dy%26-geo_id%3D04000US72%26-_box_head_nbr%3DGCT-PH1%26-ds_name%3DDEC_2000_SF1_U%26-redoLog%3Dfalse%26-mt_name%3DDEC_2000_SF1_U_GCTPH1_US9%26-format%3DST-2%26-CONTEXT%3Dgct" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRI/PRI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PRI(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRI/PRI_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PRI_1_PRI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PRI" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pri" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRI_0_PRI_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRI level (1) by PRI (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PRK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.prk" name="PRK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/kn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRK/PRK_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRK/PRK_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRK/PRK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="PRK(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRK/PRK_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PRK_2_PRK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PRK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PRK_2_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country PRK and RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRK_0_PRK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRK level (1) by PRK (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRK_1_PRK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRK level (2) by PRK (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PRT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.prt" name="PRT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRT/PRT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/po.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRT/PRT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PRT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRT/PRT_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRT/PRT_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRT (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRT/PRT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PRT(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRT/PRT_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PRT_1_PRT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PRT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.prt" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRT_0_PRT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRT level (1) by PRT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PRY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pry" name="PRY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/pa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRY/PRY_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRY/PRY_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PRY/PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="PRY(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PRY/PRY_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PRY_2_PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PRY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRY_0_PRY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRY level (1) by PRY (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pry" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PRY_1_PRY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PRY level (2) by PRY (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PSE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pse" name="PSE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PSE/PSE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PSE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/we.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PSE/PSE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PSE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PSE/PSE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PSE/PSE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PSE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="Israel CDC bitmap (scanned)" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PSE/PSE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="PSE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PSE/PSE_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/PSE_1_PSE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country PSE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pse" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/PSE_0_PSE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of PSE level (1) by PSE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- PYF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.pyf" name="PYF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pyf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PYF/PYF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="PYF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/fp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.pyf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/PYF/PYF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="PYF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/PYF/PYF_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- QAT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.qat" name="QAT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/qa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/QAT/QAT_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/QAT/QAT_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/QAT/QAT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="QAT(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/QAT/QAT_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/QAT_2_QAT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country QAT" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/QAT_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country QAT and SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/QAT_0_QAT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of QAT level (1) by QAT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.qat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/QAT_1_QAT_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of QAT level (2) by QAT (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- REU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.reu" name="REU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.reu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/REU/REU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="REU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/re.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.reu" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/REU/REU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="REU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/REU/REU_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ROU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.rou" name="ROU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ROU/ROU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ROU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ro.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ROU/ROU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ROU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ROU/ROU_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ROU/ROU_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ROU (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ROU/ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ROU(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ROU/ROU_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country ROU and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country ROU and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_1_ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ROU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ROU and SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country ROU and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ROU_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country ROU and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rou" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ROU_0_ROU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ROU level (1) by ROU (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- RUS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.rus" name="RUS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RUS/RUS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="RUS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/rs.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RUS/RUS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="RUS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/RUS/RUS_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RUS/RUS_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="RUS (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RUS/RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="RUS(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/RUS/RUS_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RUS_0_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country RUS and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RUS_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country RUS and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RUS_1_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country RUS" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RUS_1_UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country RUS and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RUS_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border between country RUS and UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rus" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/RUS_0_RUS_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of RUS level (1) by RUS (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- RWA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.rwa" name="RWA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/rw.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/RWA/RWA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/RWA/RWA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/RWA/RWA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="RWA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/RWA/RWA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RWA_2_RWA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country RWA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RWA_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country RWA and TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/RWA_2_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country RWA and UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/RWA_0_RWA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of RWA level (1) by RWA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.rwa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/RWA_1_RWA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of RWA level (2) by RWA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SAU -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sau" name="SAU" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sa.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SAU/SAU_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SAU/SAU_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SAU/SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SAU(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SAU/SAU_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SAU_2_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SAU" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SAU_2_YEM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country SAU and YEM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SAU_0_SAU_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SAU level (1) by SAU (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sau" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SAU_1_SAU_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SAU level (2) by SAU (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SDN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sdn" name="SDN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/su.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SDN/SDN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SDN/SDN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SDN/SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SDN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SDN/SDN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SDN_2_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SDN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SDN_2_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country SDN and TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SDN_2_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country SDN and UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SDN_0_SDN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SDN level (1) by SDN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sdn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SDN_1_SDN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SDN level (2) by SDN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SEN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sen" name="SEN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sg.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SEN/SEN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SEN/SEN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SEN/SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SEN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SEN/SEN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SEN_2_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SEN_0_SEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SEN level (1) by SEN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sen" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SEN_1_SEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SEN level (2) by SEN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SGP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sgp" name="SGP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SGP/SGP_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SGP/SGP_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGP/SGP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SGP(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SGP/SGP_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SGP_2_SGP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SGP" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SGP_0_SGP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SGP level (1) by SGP (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SGP_1_SGP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SGP level (2) by SGP (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SGS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sgs" name="SGS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgs" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGS/SGS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SGS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sx.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sgs" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SGS/SGS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SGS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SGS/SGS_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SHN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.shn" name="SHN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.shn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SHN/SHN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SHN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.shn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SHN/SHN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SHN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SHN/SHN_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SJM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sjm" name="SJM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sjm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SJM/SJM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SJM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sjm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SJM/SJM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SJM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SJM/SJM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SLB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.slb" name="SLB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.slb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLB/SLB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SLB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/bp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.slb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLB/SLB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SLB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SLB/SLB_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SLE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sle" name="SLE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SLE/SLE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SLE/SLE_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLE/SLE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SLE(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SLE/SLE_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SLE_2_SLE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SLE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SLE_0_SLE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SLE level (1) by SLE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sle" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SLE_1_SLE_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SLE level (2) by SLE (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SLV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.slv" name="SLV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.slv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLV/SLV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SLV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/es.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.slv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SLV/SLV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SLV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SLV/SLV_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SMR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.smr" name="SMR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SMR/SMR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SMR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SMR/SMR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SMR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SMR/SMR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SMR/SMR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SMR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SMR/SMR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SMR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SMR/SMR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SMR_1_SMR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SMR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.smr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SMR_0_SMR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SMR level (1) by SMR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SOM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.som" name="SOM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/so.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SOM/SOM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SOM/SOM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SOM/SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SOM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SOM/SOM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SOM_2_SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SOM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SOM_0_SOM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SOM level (1) by SOM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.som" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SOM_1_SOM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SOM level (2) by SOM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SPM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.spm" name="SPM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.spm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SPM/SPM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SPM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sb.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.spm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SPM/SPM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SPM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SPM/SPM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SQR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sqr" name="SQR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SQR/SQR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SQR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SQR/SQR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SQR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SQR/SQR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SQR/SQR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SQR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SQR/SQR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SQR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SQR/SQR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SQR_1_SQR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within validation region SQR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sqr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SQR_0_SQR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SQR level (1) by SQR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SRB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.srb" name="SRB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SRB/SRB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SRB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sr.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SRB/SRB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SRB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SRB/SRB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SRB/SRB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SRB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SRB/SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SRB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SRB/SRB_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SRB_1_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SRB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.srb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SRB_0_SRB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SRB level (1) by SRB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- STP -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.stp" name="STP" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="STP (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tp.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_0.graph" type="stemtype://org.eclipse.stem/Graph" title="STP(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/STP/STP_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="STP (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="STP(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/STP/STP_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="STP (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/STP/STP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="STP(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/STP/STP_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/STP_2_STP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country STP" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/STP_0_STP_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of STP level (1) by STP (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.stp" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/STP_1_STP_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of STP level (2) by STP (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SUR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.sur" name="SUR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ns.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SUR/SUR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SUR/SUR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SUR/SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SUR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SUR/SUR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SUR_2_SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SUR_0_SUR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SUR level (1) by SUR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.sur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SUR_1_SUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SUR level (2) by SUR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SVK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.svk" name="SVK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVK/SVK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SVK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/lo.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVK/SVK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SVK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SVK/SVK_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- SVN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.svn" name="SVN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVN/SVN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SVN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/si.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVN/SVN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SVN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SVN/SVN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVN/SVN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SVN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SVN/SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SVN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SVN/SVN_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SVN_1_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SVN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.svn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SVN_0_SVN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SVN level (1) by SVN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SWE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.swe" name="SWE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWE/SWE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SWE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sw.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWE/SWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SWE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SWE/SWE_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWE/SWE_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SWE (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.grid.unep.ch/data/data.php?category=human_related" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWE/SWE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SWE(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SWE/SWE_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SWE_1_SWE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SWE_0_SWE_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SWE level (1) by SWE (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SWZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.swz" name="SWZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWZ/SWZ_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SWZ (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/wz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SWZ/SWZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SWZ(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SWZ/SWZ_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SWZ_0_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country SWZ and ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.swz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SWZ_0_SWZ_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SWZ level (1) by SWZ (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SYC -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.syc" name="SYC" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/se.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYC/SYC_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYC/SYC_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYC/SYC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SYC(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYC/SYC_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SYC_2_SYC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SYC" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SYC_0_SYC_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SYC level (1) by SYC (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syc" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SYC_1_SYC_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SYC level (2) by SYC (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- SYR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.syr" name="SYR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sy.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYR/SYR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYR/SYR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/SYR/SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="SYR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/SYR/SYR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SYR_2_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country SYR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/SYR_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country SYR and TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SYR_0_SYR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SYR level (1) by SYR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.syr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/SYR_1_SYR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of SYR level (2) by SYR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TCA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tca" name="TCA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tca" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCA/TCA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TCA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tk.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tca" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCA/TCA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TCA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TCA/TCA_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TCD -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tcd" name="TCD" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/cd.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TCD/TCD_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TCD/TCD_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TCD/TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TCD(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TCD/TCD_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TCD_2_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TCD" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TCD_0_TCD_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TCD level (1) by TCD (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tcd" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TCD_1_TCD_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TCD level (2) by TCD (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TGO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tgo" name="TGO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/to.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TGO/TGO_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TGO/TGO_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TGO/TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TGO(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TGO/TGO_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TGO_2_TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TGO" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TGO_0_TGO_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TGO level (1) by TGO (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tgo" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TGO_1_TGO_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TGO level (2) by TGO (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- THA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tha" name="THA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="THA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/th.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="THA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/THA/THA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="THA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="THA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/THA/THA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="THA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/THA/THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="THA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/THA/THA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/THA_2_THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country THA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/THA_0_THA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of THA level (1) by THA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tha" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/THA_1_THA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of THA level (2) by THA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TJK -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tjk" name="TJK" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ti.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TJK/TJK_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TJK/TJK_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TJK/TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TJK(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TJK/TJK_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TJK_2_TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TJK" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TJK_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country TJK and UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TJK_0_TJK_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TJK level (1) by TJK (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tjk" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TJK_1_TJK_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TJK level (2) by TJK (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TKL -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tkl" name="TKL" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKL/TKL_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TKL (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tl.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkl" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKL/TKL_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TKL(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TKL/TKL_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TKM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tkm" name="TKM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tx.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TKM/TKM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TKM/TKM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TKM/TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TKM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TKM/TKM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TKM_2_TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TKM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TKM_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country TKM and UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TKM_0_TKM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TKM level (1) by TKM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tkm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TKM_1_TKM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TKM level (2) by TKM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TLS -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tls" name="TLS" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tls" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TLS/TLS_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TLS (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tls" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TLS/TLS_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TLS(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TLS/TLS_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TON -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ton" name="TON" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ton" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TON/TON_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TON (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tn.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ton" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TON/TON_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TON(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TON/TON_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TTO -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tto" name="TTO" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tto" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TTO/TTO_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TTO (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/td.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tto" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TTO/TTO_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TTO(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TTO/TTO_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TUN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tun" name="TUN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ts.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUN/TUN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUN/TUN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUN/TUN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TUN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUN/TUN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TUN_2_TUN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TUN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TUN_0_TUN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TUN level (1) by TUN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tun" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TUN_1_TUN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TUN level (2) by TUN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TUR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tur" name="TUR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tu.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUR/TUR_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUR/TUR_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUR/TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TUR(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUR/TUR_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TUR_2_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TUR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TUR_0_TUR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TUR level (1) by TUR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tur" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TUR_1_TUR_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TUR level (2) by TUR (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- TUV -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tuv" name="TUV" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tuv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUV/TUV_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TUV (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tv.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tuv" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TUV/TUV_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TUV(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TUV/TUV_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TWN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.twn" name="TWN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.twn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TWN/TWN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TWN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tw.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.twn" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TWN/TWN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TWN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TWN/TWN_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- TZA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.tza" name="TZA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/tz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TZA/TZA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TZA/TZA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/TZA/TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="TZA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/TZA/TZA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TZA_2_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country TZA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TZA_2_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country TZA and UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/TZA_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country TZA and ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TZA_0_TZA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TZA level (1) by TZA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.tza" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/TZA_1_TZA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of TZA level (2) by TZA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- UGA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.uga" name="UGA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ug.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UGA/UGA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UGA/UGA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UGA/UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="UGA(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UGA/UGA_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/UGA_2_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country UGA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/UGA_0_UGA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of UGA level (1) by UGA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uga" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/UGA_1_UGA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of UGA level (2) by UGA (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- UKR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ukr" name="UKR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UKR/UKR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UKR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/up.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UKR/UKR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="UKR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UKR/UKR_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UKR (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UKR/UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="All UKR (level 1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UKR/UKR_1_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/UKR_1_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country UKR" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ukr" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/UKR_0_UKR_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of UKR level (1) by UKR (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- UMI -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.umi" name="UMI" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.umi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UMI/UMI_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UMI (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/um.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.umi" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UMI/UMI_0.graph" type="stemtype://org.eclipse.stem/Graph" title="UMI(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UMI/UMI_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- URY -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ury" name="URY" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="URY (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/uy.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_0.graph" type="stemtype://org.eclipse.stem/Graph" title="URY(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/URY/URY_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="URY (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="URY(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/URY/URY_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="URY (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/URY/URY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="URY(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/URY/URY_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/URY_2_URY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country URY" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/URY_0_URY_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of URY level (1) by URY (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ury" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/URY_1_URY_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of URY level (2) by URY (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- USA -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.usa" name="USA" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="The area (km^2) for the USA (0) (except Puerto Rico)" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/us.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_0.graph" type="stemtype://org.eclipse.stem/Graph" title="The USA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/USA/USA_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="The area (km^2) for the States (1) of the USA (except Puerto Rico)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.census.gov/population/www/censusdata/density.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="All USA States (1) (except Puerto Rico)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/USA/USA_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="The area (km^2) for all USA Counties (except Puerto Rico)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.census.gov/geo/www/tiger/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="All USA Counties (2) (except Puerto Rico)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/USA/USA_2_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_3_area.graph" type="stemtype://org.eclipse.stem/Graph" title="USA (3) area" format="http:///org/eclipse/stem/core/graph.ecore" source="Census" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/USA/USA_3.graph" type="stemtype://org.eclipse.stem/Graph" title="USA (level 3, Vermont only for now)" format="http:///org/eclipse/stem/core/graph.ecore" source="census" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/USA/USA_3_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/USA_2_USA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country USA" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/USA_2_USA_3.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country USA counties in other states to towns in Vermont" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/USA_3_USA_3.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within Vermont country USA level 3" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2001-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/USA_0_USA_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of the States (1) by USA (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/USA_1_USA_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of the Counties of The United States (2) by the States of The United States (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.usa" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/USA_2_USA_3.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of the States (3) by USA (2) Vermont" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- UZB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.uzb" name="UZB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/uz.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UZB/UZB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UZB/UZB_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/UZB/UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="UZB(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/UZB/UZB_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/UZB_2_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country UZB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/UZB_0_UZB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of UZB level (1) by UZB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.uzb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/UZB_1_UZB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of UZB level (2) by UZB (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- VAT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vat" name="VAT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VAT/VAT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VAT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/vt.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vat" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VAT/VAT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VAT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VAT/VAT_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- VCT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vct" name="VCT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vct" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VCT/VCT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VCT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/vc.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vct" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VCT/VCT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VCT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VCT/VCT_0_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vct" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/VCT_0_VCT_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of VCT level (1) by VCT (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- VEN -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.ven" name="VEN" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ve.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VEN/VEN_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VEN/VEN_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VEN/VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="VEN(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VEN/VEN_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/VEN_2_VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country VEN" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/VEN_0_VEN_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of VEN level (1) by VEN (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.ven" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/VEN_1_VEN_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of VEN level (2) by VEN (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- VGB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vgb" name="VGB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vgb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VGB/VGB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VGB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/vi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vgb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VGB/VGB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VGB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VGB/VGB_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- VIR -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vir" name="VIR" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vir" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VIR/VIR_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VIR (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/vq.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vir" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VIR/VIR_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VIR(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VIR/VIR_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- VNM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vnm" name="VNM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/vm.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VNM/VNM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VNM/VNM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VNM/VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="VNM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VNM/VNM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/VNM_2_VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country VNM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/VNM_0_VNM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of VNM level (1) by VNM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vnm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/VNM_1_VNM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of VNM level (2) by VNM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- VUT -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.vut" name="VUT" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VUT/VUT_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="VUT (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/nh.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.vut" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/VUT/VUT_0.graph" type="stemtype://org.eclipse.stem/Graph" title="VUT(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/VUT/VUT_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- WLF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.wlf" name="WLF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.wlf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/WLF/WLF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="WLF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/wf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.wlf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/WLF/WLF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="WLF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/WLF/WLF_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- WSM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.wsm" name="WSM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.wsm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/WSM/WSM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="WSM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ws.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.wsm" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/WSM/WSM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="WSM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/WSM/WSM_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- YEM -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.yem" name="YEM" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/ym.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_0.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/YEM/YEM_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/YEM/YEM_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/YEM/YEM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="YEM(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/YEM/YEM_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/YEM_2_YEM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country YEM" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/YEM_0_YEM_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of YEM level (1) by YEM (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.yem" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/YEM_1_YEM_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of YEM level (2) by YEM (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ZAF -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.zaf" name="ZAF" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/sf.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZAF/ZAF_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZAF/ZAF_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZAF/ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ZAF(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZAF/ZAF_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ZAF_2_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ZAF" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ZAF_2_ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ZAF and ZWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ZAF_0_ZAF_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ZAF level (1) by ZAF (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zaf" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ZAF_1_ZAF_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ZAF level (2) by ZAF (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ZMB -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.zmb" name="ZMB" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/za.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZMB/ZMB_0_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB (1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB(1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZMB/ZMB_1_MAP.xml" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_2_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB (2) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZMB/ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="ZMB(2) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZMB/ZMB_2_MAP.xml" valid="start=1900-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ZMB_2_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship within country ZMB" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ZMB_2_ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between country ZMB and ZWE" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ZMB_0_ZMB_1.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ZMB level (1) by ZMB (0)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zmb" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ZMB_1_ZMB_2.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of ZMB level (2) by ZMB (1)" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.ibm.com" valid="start=1900-01-01;" />
+
+<!-- ZWE -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.zwe" name="ZWE" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zwe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZWE/ZWE_0_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZWE (0) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/cia/publications/factbook/geos/zi.html" valid="start=1900-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zwe" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZWE/ZWE_0.graph" type="stemtype://org.eclipse.stem/Graph" title="ZWE(0) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" spatial="platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/ZWE/ZWE_0_MAP.xml" valid="start=1900-01-01;" />
+
+<!-- ZZZ -->
+<stem_category id="org.eclipse.stem.core.graph.geography.political.countries.zzz" name="ZZZ" parent_id="org.eclipse.stem.core.graph.geography.political.countries"/>
+	<!-- Nodes and Labels -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zzz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZZZ/ZZZ_-1_area.graph" type="stemtype://org.eclipse.stem/Graph" title="ZZZ (-1) area" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1600-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zzz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/country/ZZZ/ZZZ_-1.graph" type="stemtype://org.eclipse.stem/Graph" title="ZZZ(-1) Nodes" format="http:///org/eclipse/stem/core/graph.ecore" source="http://www.iso.org/iso/home.htm" valid="start=1600-01-01;" />
+	<!-- Edges -->
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zzz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/commonborder/ZZZ_0_ZZZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Common Border relationship between all countries in the world" format="http:///org/eclipse/stem/core/graph.ecore" valid="start=2006-01-01;" />
+<dublin_core category_id="org.eclipse.stem.core.graph.geography.political.countries.zzz" identifier="platform:/plugin/org.eclipse.stem.data.geography/resources/data/relationship/relativephysical/ZZZ_-1_ZZZ_0.graph" type="stemtype://org.eclipse.stem/Graph" title="Physical containment of all Countries (0) by the Earth (-1)" format="http:///org/eclipse/stem/core/graph.ecore" source="https://www.cia.gov/library/publications/the-world-factbook/" valid="start=1900-01-01;" />
+</extension>
+
+</plugin>
diff --git a/org.eclipse.stem.tests.jobs/.classpath b/org.eclipse.stem.tests.jobs/.classpath
new file mode 100644
index 0000000..0664cb4
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
+
diff --git a/org.eclipse.stem.tests.jobs/.project b/org.eclipse.stem.tests.jobs/.project
new file mode 100644
index 0000000..1048ef6
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.jobs</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.jobs/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.jobs/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..bfba821
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,20 @@
+#Tue Sep 01 16:57:36 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.jobs/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.jobs/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1d364a4
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.jobs
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.tests.jobs.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.stem.jobs,
+ org.eclipse.stem.tests.core
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.jobs/build.properties b/org.eclipse.stem.tests.jobs/build.properties
new file mode 100644
index 0000000..d30f0ee
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               notice.html,\
+               epl-v10.html,\
+               plugin.properties
diff --git a/org.eclipse.stem.tests.jobs/epl-v10.html b/org.eclipse.stem.tests.jobs/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.jobs/notice.html b/org.eclipse.stem.tests.jobs/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.jobs/plugin.properties b/org.eclipse.stem.tests.jobs/plugin.properties
new file mode 100644
index 0000000..78f9589
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Job and Simulation Manager Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerTest.java
new file mode 100644
index 0000000..dc44acc
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchManagerTest.java
@@ -0,0 +1,76 @@
+// BatchManagerTest.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.stem.core.experiment.tests.ExperimentTest;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * This class is a JUnit4 test case for the the {@link BatchManager}.
+ */
+public class BatchManagerTest {
+
+	// The current BatchManager under test.
+	protected BatchManager fixture;
+
+	private BatchManager getFixture() {
+		return fixture;
+	} // getFixture
+
+	private void setFixture(final BatchManager fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * @return the {@link BatchManager} to be used for testing.
+	 */
+	public static BatchManager createFixture() {
+		BatchManager.resetBatchManager();
+		return BatchManager.INSTANCE;
+	} // createFixture
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	@Before
+	public void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.batch.BatchManager#getActiveBatches()}.
+	 */
+	@Test
+	public void testGetBatches() {
+		// This isn't much of a test.
+		final BatchManager fixture = getFixture();
+		assertTrue(fixture.getActiveBatches().size() == 0);
+	} // testGetBatches
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.batch.BatchManager#getSequenceNumber()}.
+	 */
+	@Test
+	public void testGetSequenceNumber() {
+		// Test that the sequence number is incremented.
+		final BatchManager fixture = getFixture();
+		assertTrue(fixture.getSequenceNumber() == 0);
+		fixture.createBatch(ExperimentTest.createFixture());
+		assertTrue(fixture.getSequenceNumber() == 1);
+	} // testGetSequenceNumber
+} // BatchManagerTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchTest.java
new file mode 100644
index 0000000..aaec7b9
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/batch/BatchTest.java
@@ -0,0 +1,139 @@
+// BatchTest.java
+package org.eclipse.stem.jobs.batch;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * This class is a JUnit4 test case for the {@link Batch} class.
+ */
+abstract public class BatchTest {
+
+	/**
+	 * An integer to be used as a sequence number for testing.
+	 */
+	public static final int BATCH_SEQUENCE_NUMBER = 3;
+
+	/**
+	 * The current {@link Batch} under test.
+	 */
+	protected Batch fixture;
+
+	private Batch getFixture() {
+		return fixture;
+	} // getFixture
+
+	void setFixture(final Batch batch) {
+		this.fixture = batch;
+	} // setFixture
+
+	/**
+	 * @return a new implementation of {@link Batch} or a subclass for testing
+	 *         purposes.
+	 */
+	abstract public Batch createFixture();
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	@Before
+	public void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	// /**
+	// * Test method for
+	// * {@link
+	// org.eclipse.stem.jobs.batch.Batch#run(org.eclipse.core.runtime.IProgressMonitor)}.
+	// */
+	// @Test
+	// public void testRunIProgressMonitor() {
+	// fail("Not yet implemented"); // TODO
+	// }
+	//
+	// /**
+	// * Test method for
+	// * {@link org.eclipse.stem.jobs.batch.Batch#getTotalWork()}.
+	// */
+	// @Test
+	// public void testGetTotalWork() {
+	// fail("Not yet implemented"); // TODO
+	// }
+	//
+	// /**
+	// * Test method for
+	// * {@link org.eclipse.stem.jobs.batch.Batch#getNextSimulationToRun()}.
+	// */
+	// @Test
+	// public void testGetNextSimulationToRun() {
+	// fail("Not yet implemented"); // TODO
+	// }
+
+	// /**
+	// * Test method for {@link org.eclipse.stem.jobs.batch.Batch#run()}.
+	// */
+	// @Test
+	// public void testRun() {
+	// fail("Not yet implemented"); // TODO
+	// }
+	//
+	// /**
+	// * Test method for {@link org.eclipse.stem.jobs.batch.Batch#stop()}.
+	// */
+	// @Test
+	// public void testStop() {
+	// fail("Not yet implemented"); // TODO
+	// }
+
+	// /**
+	// * Test method for
+	// * {@link
+	// org.eclipse.stem.jobs.batch.Batch#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)}.
+	// */
+	// @Test
+	// public void testSimulationChanged() {
+	// fail("Not yet implemented"); // TODO
+	// }
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.batch.Batch#getSequenceNumber()}.
+	 */
+	@Test
+	public void testGetSequenceNumber() {
+		final Batch fixture = getFixture();
+		assertTrue(fixture.getSequenceNumber() == BATCH_SEQUENCE_NUMBER);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.batch.Batch#getBatchState()}.
+	 */
+	@Test
+	public void testGetBatchState() {
+		assertTrue(getFixture().getBatchState() == BatchState.PAUSED);
+	} // testGetBatchState
+
+	/**
+	 * Test method for {@link org.eclipse.stem.jobs.batch.Batch#toString()}.
+	 */
+	@Test
+	public void testToString() {
+		assertNotNull(getFixture().toString());
+	} // testToString
+
+} // BatchTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEventTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEventTest.java
new file mode 100644
index 0000000..dd29c46
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationEventTest.java
@@ -0,0 +1,95 @@
+// SimulationEventTest.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+
+/**
+ * This class is a JUnit test case for the class SimulationEvent
+ */
+public class SimulationEventTest extends TestCase {
+
+	/**
+	 * The fixture for this SimulationEvent test.
+	 */
+	protected SimulationEvent fixture;
+
+	/**
+	 * Sets the fixture for this SimulationEvent test case.
+	 */
+	protected void setFixture(SimulationEvent fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this SimulationEvent test case.
+	 */
+	private SimulationEvent getFixture() {
+		return this.fixture;
+	} // getFixture
+
+	/**
+	 * @return a SimulationEvent for testing
+	 */
+	public static SimulationEvent createFixture() {
+		Scenario scenario = ScenarioTest.createFixture();
+		final ISimulation simulation = SimulationManager.getManager()
+				.createSimulation(scenario, null);
+		return new SimulationEvent(simulation, SimulationState.RUNNING);
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for the ability to get the state
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationEvent#getSimulationState()}.
+	 */
+	public void testGetSimulationState() {
+		final SimulationEvent simulationEvent = getFixture();
+		assertTrue(simulationEvent.getSimulationState().equals(
+				SimulationState.RUNNING));
+	} // testGetSimulationState
+
+	/**
+	 * Test method for the ability to get the originating Simulation
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationEvent#getSimulation()}.
+	 */
+	public void testGetSimulation() {
+		final SimulationEvent simulationEvent = getFixture();
+		assertNotNull(simulationEvent.getSimulation());
+	} // testGetSimulation
+
+}
+// SimulationEventTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEventTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEventTest.java
new file mode 100644
index 0000000..91377be
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerEventTest.java
@@ -0,0 +1,105 @@
+// SimulationManagerEventTest.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+
+/**
+ * This class is a JUnit test of SimulationManagerEvent
+ */
+public class SimulationManagerEventTest extends TestCase {
+
+	/**
+	 * The fixture for this SimulationEvent test.
+	 */
+	protected SimulationManagerEvent fixture;
+
+	/**
+	 * Sets the fixture for this SimulationEvent test case.
+	 */
+	protected void setFixture(SimulationManagerEvent fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this SimulationEvent test case.
+	 */
+	private SimulationManagerEvent getFixture() {
+		return this.fixture;
+	} // getFixture
+
+	/**
+	 * @return a SimulationEvent for testing
+	 */
+	public static SimulationManagerEvent createFixture() {
+		SimulationManager simulationManager = SimulationManager.getManager();
+		return new SimulationManagerEvent(simulationManager,
+				SimulationManager.NONE, SimulationManager.NONE);
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	} // setUp
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManagerEvent#SimulationManagerEvent(org.eclipse.stem.jobs.simulation.SimulationManager, org.eclipse.stem.jobs.simulation.ISimulation[], org.eclipse.stem.jobs.simulation.ISimulation[])}.
+	 */
+	public void testSimulationManagerEvent() {
+		final SimulationManagerEvent simulationManagerEvent = getFixture();
+		assertTrue(simulationManagerEvent.getSimulationsAdded().length == 0);
+		assertTrue(simulationManagerEvent.getSimulationsRemoved().length == 0);
+		// assertTrue(simulationManagerEvent.getSimulationsAdded().equals(
+		// SimulationManager.NONE));
+		// assertTrue(simulationManagerEvent.getSimulationsRemoved().equals(
+		// SimulationManager.NONE));
+	} // testSimulationManagerEvent
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManagerEvent#getSimulationsAdded()}.
+	 */
+	public void testGetSimulationsAdded() {
+		final SimulationManagerEvent simulationManagerEvent = getFixture();
+		assertTrue(simulationManagerEvent.getSimulationsAdded().length == 0);
+		// assertTrue(simulationManagerEvent.getSimulationsAdded().equals(
+		//				SimulationManager.NONE));
+	} // testGetSimulationsAdded
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManagerEvent#getSimulationsRemoved()}.
+	 */
+	public void testGetSimulationsRemoved() {
+		final SimulationManagerEvent simulationManagerEvent = getFixture();
+		assertTrue(simulationManagerEvent.getSimulationsRemoved().length == 0);
+		// assertTrue(simulationManagerEvent.getSimulationsRemoved().equals(
+		// SimulationManager.NONE));
+	}
+
+} // SimulationManagerEventTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerTest.java
new file mode 100644
index 0000000..94a2ce0
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationManagerTest.java
@@ -0,0 +1,194 @@
+// SimulationManagerTest.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+
+/**
+ * This class is a JUnit test for {@link SimulationManager}.
+ */
+public class SimulationManagerTest extends TestCase implements
+		ISimulationManagerListener {
+
+	/**
+	 * The fixture to be tested.
+	 */
+	protected SimulationManager fixture;
+
+	private ISimulation[] expectedRemoved;
+
+	private ISimulation[] expectedAdded;
+
+	/**
+	 * Returns the fixture for this SimulationEvent test case.
+	 */
+	private SimulationManager getFixture() {
+		return this.fixture;
+	} // getFixture
+
+	/**
+	 * @return a SimulationManager for testing
+	 */
+	public static SimulationManager createFixture() {
+		SimulationManager.resetSimulationManager();
+		final SimulationManager manager = SimulationManager.getManager();
+		manager.createSimulation(ScenarioTest.createFixture(), null);
+		return manager;
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		getFixture().addSimulationManagerListener(this);
+	} // setUp
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	} // tearDown
+
+	/**
+	 * @param fixture
+	 *            the simulation manager to test
+	 */
+	private void setFixture(SimulationManager fixture) {
+		this.fixture = fixture;
+	} // setFixture
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#getManager()}.
+	 */
+	public void testGetManager() {
+		final SimulationManager manager = getFixture();
+		assertNotNull(manager);
+	} // testGetManager
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#getActiveSimulations()}.
+	 */
+	public void testGetActiveSimulations() {
+		final SimulationManager manager = createFixture();
+		List<ISimulation> simulations = manager.getActiveSimulations();
+		assertTrue(simulations.size() > 0);
+	} // testGetActiveSimulations
+
+	// /**
+	// * {@link
+	// org.eclipse.stem.jobs.simulation.SimulationManager#createSimulation(org.eclipse.core.runtime.IConfigurationElement)}.
+	// */
+	// public void testCreateSimulationIConfigurationElement() {
+	// final SimulationManager manager = createFixture();
+	// final ISimulation simulation =
+	// manager.createSimulation(getConfigurationElement());
+	// assertNotNull(simulation);
+	// } // testCreateSimulationIConfigurationElement
+
+	// /**
+	// * @return a ConfigurationElement that specifies a Scenario
+	// */
+	// private Scenario getConfigurationElement() {
+	//		
+	// } // getConfigurationElement
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#createSimulation(org.eclipse.stem.scenario.Scenario)}.
+	 * TODO the URI isn't "mapped", need to work on this test.
+	 */
+	// public void testCreateSimulationURI() {
+	// final SimulationManager manager = createFixture();
+	// manager.createSimulation(URI
+	// .createURI(TestConstants.JUNIT_TEST_SCENARIO_1_URI_STRING));
+	// assertTrue(manager.getActiveSimulations().size() == 2);
+	// } // testCreateSimulationURI
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#createSimulation(org.eclipse.stem.core.scenario.Scenario)}.
+	 */
+	public void testCreateSimulationScenario() {
+		final SimulationManager manager = createFixture();
+		manager.createSimulation(ScenarioTest.createFixture(), null);
+		assertTrue(manager.getActiveSimulations().size() == 2);
+	} // testCreateSimulationScenario
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#createSimulation(org.eclipse.stem.core.scenario.Scenario)}.
+	 */
+	public void testSimulationSequenceNumber() {
+		final SimulationManager manager = createFixture();
+		// The manager is created with an active simulation so the sequence
+		// number of that simulation should be "0" (zero).
+		assertTrue(manager.getActiveSimulations().size() == 1);
+		ISimulation simulation = manager.getActiveSimulations().get(0);
+		assertTrue(simulation.getSequenceNumber() == 0);
+
+		// Let's create another simulation and check its number
+		manager.createSimulation(ScenarioTest.createFixture(), null);
+		assertTrue(manager.getActiveSimulations().size() == 2);
+		simulation = manager.getActiveSimulations().get(1);
+		assertTrue(simulation.getSequenceNumber() == 1);
+	} // testSimulationSequenceNumber
+
+	/**
+	 * test creating and running a simulation from a scenario
+	 * 
+	 * You can't test this. What happens is the call to simulationsChanged
+	 * occurs before the assignment to expectedAdded.
+	 */
+	// public void testCreateAndRunSimulationScenario() {
+	// final SimulationManager manager = getFixture();
+	// final ISimulation newSimulation = manager
+	// .createAndRunSimulation(ScenarioTest.createFixture());
+	// expectedAdded = new ISimulation[] { newSimulation };
+	// } // testCreateAndRunSimulationScenario
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#addSimulationManagerListener(org.eclipse.stem.jobs.simulation.ISimulationManagerListener)}.
+	 */
+	public void testAddSimulationManagerListener() {
+		final SimulationManager manager = getFixture();
+		manager.addSimulationManagerListener(this);
+	} // testAddSimulationManagerListener
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.SimulationManager#removeListener(org.eclipse.stem.jobs.simulation.ISimulationManagerListener)}.
+	 */
+	public void testRemoveListener() {
+		// Not sure what else to do here, other than to verify that there aren't
+		// any exceptions
+		testAddSimulationManagerListener();
+		final SimulationManager manager = getFixture();
+		manager.removeListener(this);
+	} // testRemoveListener
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+	 */
+	@SuppressWarnings("unqualified-field-access")
+	public void simulationsChanged(SimulationManagerEvent event) {
+		assertTrue(event.getSimulationsAdded().equals(expectedAdded));
+		assertTrue(event.getSimulationsRemoved().equals(expectedRemoved));
+	} // simulationsChanged
+
+}// SimulationManagerTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationTest.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationTest.java
new file mode 100644
index 0000000..8d57cce
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/jobs/simulation/SimulationTest.java
@@ -0,0 +1,199 @@
+// SimulationTest.java
+package org.eclipse.stem.jobs.simulation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.core.scenario.tests.ScenarioTest;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+
+/**
+ * This class is a JUnit test case for the class Simulation.java
+ */
+public class SimulationTest extends TestCase implements ISimulationListener {
+
+	/**
+	 * The simulation we test.
+	 */
+	private ISimulation fixture;
+
+	/**
+	 * This is the state that we're expecting the fixture simulation to report.
+	 */
+	private SimulationState expectedSimulationState;
+
+	/**
+	 * Returns the fixture for this SimulationEvent test case.
+	 */
+	private ISimulation getFixture() {
+		return this.fixture;
+	} // getFixture
+
+	/**
+	 * @return a Simulation for testing
+	 */
+	public static ISimulation createFixture() {
+		final ISimulation simulation = SimulationManager.getManager()
+				.createSimulation(ScenarioTest.createFixture(), null);
+		return simulation;
+	} // createFixture
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+		getFixture().addSimulationListener(this);
+	} // setUp
+
+	/**
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	} // tearDown
+
+	/**
+	 * @param object
+	 */
+	private void setFixture(ISimulation fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation#Simulation(org.eclipse.stem.core.scenario.Scenario, int)}
+	 */
+	public void testSimulationScenario() {
+		final ISimulation simulation = getFixture();
+		assertNotNull(simulation.getScenario());
+	} // testSimulationScenario
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation#getSimulationState()}.
+	 */
+	public void testGetSimulationState() {
+		final ISimulation simulation = getFixture();
+		assertTrue(simulation.getSimulationState().equals(
+				SimulationState.PAUSED));
+	} // testGetSimulationState
+
+	// These are commented out because more work needs to be done to enable the
+	// running of the tests out side of eclipse.
+
+	// /**
+	// * {@link org.eclipse.stem.jobs.simulation.Simulation#run()}.
+	// */
+	// public void testRunSimulation() {
+	// final ISimulation simulation = getFixture();
+	// expectedSimulationState = SimulationState.RUNNING;
+	// simulation.run();
+	// simulation.stop();
+	// } // testRunSimulation
+	//
+	// /**
+	// * {@link org.eclipse.stem.jobs.simulation.Simulation#pause()}.
+	// */
+	// public void testPauseSimulation() {
+	// final ISimulation simulation = getFixture();
+	// expectedSimulationState = SimulationState.RUNNING;
+	// simulation.run();
+	// expectedSimulationState = SimulationState.PAUSED;
+	// simulation.stop();
+	// } // testPauseSimulation
+	//
+	// /**
+	// * {@link org.eclipse.stem.jobs.simulation.Simulation#reset()}.
+	// */
+	// public void testResetSimulation() {
+	// final ISimulation simulation = getFixture();
+	// expectedSimulationState = SimulationState.RUNNING;
+	// simulation.run();
+	// expectedSimulationState = SimulationState.RUNNING;
+	// simulation.pause();
+	// expectedSimulationState = SimulationState.RESET;
+	// simulation.reset();
+	// simulation.stop();
+	// } // testResetSimulation
+
+//	/**
+//	 * {@link org.eclipse.stem.jobs.simulation.Simulation#step()}.
+//	 */
+//	@SuppressWarnings("unqualified-field-access")
+//	public void testStepSimulation() {
+//		final ISimulation simulation = getFixture();
+//		expectedSimulationState = SimulationState.RUNNING;
+//		simulation.pause();
+//		expectedSimulationState = SimulationState.PAUSED;
+//		simulation.pause();
+//		expectedSimulationState = SimulationState.COMPLETED_CYCLE;
+//		simulation.step();
+//		expectedSimulationState = SimulationState.STOPPED;
+//		simulation.stop();
+//	} // testStepSimulation
+
+//	/**
+//	 * {@link org.eclipse.stem.jobs.simulation.Simulation#stop()}.
+//	 */
+//	@SuppressWarnings("unqualified-field-access")
+//	public void testStopSimulation() {
+//		final ISimulation simulation = getFixture();
+//		expectedSimulationState = SimulationState.RUNNING;
+//		simulation.pause();
+//		expectedSimulationState = SimulationState.STOPPED;
+//		simulation.stop();
+//	} // testStopSimulation
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation#getScenario()}.
+	 */
+	public void testGetScenario() {
+		final ISimulation simulation = getFixture();
+		assertNotNull(simulation.getScenario());
+	} // testGetScenario
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation#addSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)}.
+	 */
+	public void testAddSimulationListener() {
+		final ISimulation simulation = getFixture();
+		simulation.addSimulationListener(this);
+	} // testAddSimulationListener
+
+	/**
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation#removeSimulationListener(org.eclipse.stem.jobs.simulation.ISimulationListener)}.
+	 */
+	public void testRemoveSimulationListener() {
+		// Not sure what else to do here, other than to verify that there aren't
+		// any exceptions
+		testAddSimulationListener();
+		final ISimulation simulation = getFixture();
+		simulation.removeSimulationListener(this);
+	} // testRemoveSimulationListener
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	@SuppressWarnings("unqualified-field-access")
+	public void simulationChanged(SimulationEvent event) {
+		assertTrue("Expected state \"" + event.getSimulationState()
+				+ "\" but received \"" + expectedSimulationState + "\"",
+		expectedSimulationState.equals(event.getSimulationState()));
+	} // simulationChanged
+
+} // SimulationTest
diff --git a/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/tests/jobs/Activator.java b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/tests/jobs/Activator.java
new file mode 100644
index 0000000..4df0c5e
--- /dev/null
+++ b/org.eclipse.stem.tests.jobs/src/org/eclipse/stem/tests/jobs/Activator.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.tests.jobs;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.tests.jobs"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.sequencers/.classpath b/org.eclipse.stem.tests.sequencers/.classpath
new file mode 100644
index 0000000..c835067
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.sequencers/.project b/org.eclipse.stem.tests.sequencers/.project
new file mode 100644
index 0000000..02dfda1
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.sequencers</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.sequencers/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.sequencers/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..09e49fa
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:48:38 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.sequencers/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.sequencers/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3f16f07
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.sequencers;singleton:=true
+Bundle-Version: 0.2.0
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.stem.tests.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.sequencers/build.properties b/org.eclipse.stem.tests.sequencers/build.properties
new file mode 100644
index 0000000..312d396
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/build.properties
@@ -0,0 +1,11 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/,\
+               notice.html,\
+               epl-v10.html
+jars.compile.order = .
+output.. = bin/
diff --git a/org.eclipse.stem.tests.sequencers/epl-v10.html b/org.eclipse.stem.tests.sequencers/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.sequencers/notice.html b/org.eclipse.stem.tests.sequencers/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.sequencers/plugin.properties b/org.eclipse.stem.tests.sequencers/plugin.properties
new file mode 100644
index 0000000..2ebbb70
--- /dev/null
+++ b/org.eclipse.stem.tests.sequencers/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Sequencers Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.transport/.classpath b/org.eclipse.stem.tests.transport/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.transport/.project b/org.eclipse.stem.tests.transport/.project
new file mode 100644
index 0000000..fe51373
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.transport</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.transport/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.transport/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9e6695c
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,73 @@
+#Mon Jan 21 12:49:15 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.transport/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.transport/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2118238
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.transport;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.definitions.transport.tests
+Require-Bundle: org.eclipse.stem.transport;visibility:=reexport,
+ org.eclipse.stem.tests.util,
+ org.eclipse.stem.tests.definitions,
+ org.eclipse.stem.tests.diseasemodels,
+ org.eclipse.stem.tests.core
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.transport/build.properties b/org.eclipse.stem.tests.transport/build.properties
new file mode 100644
index 0000000..23e1555
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/build.properties
@@ -0,0 +1,11 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               META-INF/
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.transport/epl-v10.html b/org.eclipse.stem.tests.transport/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.transport/notice.html b/org.eclipse.stem.tests.transport/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.transport/plugin.properties b/org.eclipse.stem.tests.transport/plugin.properties
new file mode 100644
index 0000000..c498489
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/plugin.properties
@@ -0,0 +1,25 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Transport Tests
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeLabelTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeLabelTest.java
new file mode 100644
index 0000000..3d82412
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeLabelTest.java
@@ -0,0 +1,173 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.edges.tests.MigrationEdgeLabelTest;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Load Unload Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.core.graph.DynamicLabel#reset() <em>Reset</em>}</li>
+ *   <li>{@link org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue() <em>Switch To Next Value</em>}</li>
+ * </ul>
+ * </p>
+ * @generated NOT
+ */
+public class LoadUnloadEdgeLabelTest extends MigrationEdgeLabelTest {
+	protected static final double TEST_RATE = 1.0;
+	
+	/**
+	 * The fixture for this Load Unload Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LoadUnloadEdgeLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(LoadUnloadEdgeLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Load Unload Edge Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LoadUnloadEdgeLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Load Unload Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(LoadUnloadEdgeLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Load Unload Edge Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LoadUnloadEdgeLabel getFixture() {
+		return fixture;
+	}
+	
+	/**
+	 * Create a LoadUnloadEdgeLabel for use in these test case.
+	 * */
+	public LoadUnloadEdgeLabel createFixture() {
+		LoadUnloadEdgeLabel lueLbl = TransportFactory.eINSTANCE.createLoadUnloadEdgeLabel();
+		
+		STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+		STEMTime endTime = startTime.addIncrement(1000);
+		lueLbl.setActivationTime(startTime);
+		lueLbl.setDeactivationTime(endTime);
+				
+		
+		return lueLbl;
+	}
+	
+	/**
+	 * Test the setting of the label
+	 **/
+	public void testActivatedRate () {
+		LoadUnloadEdgeLabel lueLabel = getFixture();
+		assertTrue(lueLabel.getActivatedRate()==0);
+		
+		lueLabel.setActivatedRate(TEST_RATE);
+		assertTrue(lueLabel.getActivatedRate()==TEST_RATE);
+		
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.DynamicLabel#reset() <em>Reset</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#reset()
+	 * @generated NOT
+	 */
+	public void testReset() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		assertTrue(true);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue() <em>Switch To Next Value</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.graph.DynamicLabel#switchToNextValue()
+	 * @generated NOT
+	 */
+	public void testSwitchToNextValue() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		assertTrue(true);
+	}
+
+	/**
+	 * Test the Label has the right type URI.
+	 * Override test of getTypeURI
+	 * @generated NOT
+	 */
+	public void testGetTypeURI() {
+		final Label label = getFixture();
+		assertTrue(label.getTypeURI().equals(LoadUnloadEdgeLabel.URI_TYPE_LOAD_UNLOAD_EDGE_LABEL));
+	} // testGetTypeURI
+
+	
+
+} //LoadUnloadEdgeLabelTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeTest.java
new file mode 100644
index 0000000..6585c46
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/LoadUnloadEdgeTest.java
@@ -0,0 +1,157 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.definitions.edges.tests.MigrationEdgeTest;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.tests.util.TestUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Load Unload Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+public class LoadUnloadEdgeTest extends MigrationEdgeTest {
+	
+	/**Label to help with some test cases*/
+	LoadUnloadEdgeLabel TEST_LABEL = TransportFactory.eINSTANCE.createLoadUnloadEdgeLabel();
+
+	/**
+	 * The fixture for this Load Unload Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LoadUnloadEdge fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(LoadUnloadEdgeTest.class);
+	}
+
+	/**
+	 * Constructs a new Load Unload Edge test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LoadUnloadEdgeTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Load Unload Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(LoadUnloadEdge fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Load Unload Edge test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LoadUnloadEdge getFixture() {
+		return fixture;
+	}
+	
+	/**
+	 * Creates the fixture. We need to have nodes on both sides in order to be sane().
+	 * 
+	 * */
+	public LoadUnloadEdge createFixture() {
+		
+		//This will be a unload edge
+		final Node nodeA = TransportFactory.eINSTANCE.createPacketStyleTransportSystem();
+		final Node nodeB = TestUtil.createStaticallyLabeledNode();
+		LoadUnloadEdge luEdge = TransportFactory.eINSTANCE.createLoadUnloadEdge();
+		luEdge.setLabel(TransportFactory.eINSTANCE.createLoadUnloadEdgeLabel());
+		luEdge.setLoadingEdge(false);
+		luEdge.setNodeAURI(nodeA.getURI());
+		luEdge.setNodeBURI(nodeB.getURI());	
+		
+		
+		//We need to set up start and end times for loading
+		STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+		STEMTime endTime = startTime.addIncrement(1000);
+		
+		luEdge.getLabel().setActivationTime(startTime);
+		luEdge.getLabel().setDeactivationTime(endTime);
+		
+		//Make sure the node relations are cool
+		luEdge.setA(nodeA);
+		luEdge.setB(nodeB);
+		nodeA.getEdges().add(luEdge);
+		nodeB.getEdges().add(luEdge);
+		
+		
+		return luEdge;
+	}
+
+
+	/**Test setting the for the LoadUnloadEdge*/
+	public void testSetLabel() {
+		LoadUnloadEdge luEdge = getFixture();
+	
+		//We need to set up start and end times for loading
+		STEMTime startTime = ModelFactory.eINSTANCE.createSTEMTime();
+		STEMTime endTime = startTime.addIncrement(2000);
+		
+		TEST_LABEL.setActivationTime(startTime);
+		TEST_LABEL.setDeactivationTime(endTime);
+		
+		assertFalse(luEdge.getLabel() == TEST_LABEL);
+		luEdge.setLabel(TEST_LABEL);
+		assertTrue(luEdge.getLabel()==TEST_LABEL);
+		assertTrue(luEdge.sane());
+	}
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //LoadUnloadEdgeTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemDecoratorTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemDecoratorTest.java
new file mode 100644
index 0000000..0371647
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemDecoratorTest.java
@@ -0,0 +1,326 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Calendar;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator;
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.tests.EdgeDecoratorTest;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+import org.eclipse.stem.diseasemodels.standard.tests.DiseaseModelTestUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Packet Style Transport System Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+public class PacketStyleTransportSystemDecoratorTest extends EdgeDecoratorTest {
+	
+	/*Constants for use in the tests*/
+	public static final double TRANSPORT_CAPACITY = 100.0;
+	public static final double LOAD_UNLOAD_RATE  = 0.5;
+	public static final double PORT_POPULATION = 100000.0;
+	
+	/*Time Stuff*/
+	private static final int START_DAY = 20;
+	private static final int END_DAY = 29;	
+	//private static final int NUMBER_OF_DAYS =  END_DAY - START_DAY + 1;
+	
+	private static final int ACTIVATION_DAY = 25;
+	private static final int DEACTIVATION_DAY = 27;
+	
+	// The fixture sequencer sequences through 10 days
+	public static final STEMTime START_TIME = createSTEMTime(2006,
+			Calendar.NOVEMBER, START_DAY);
+
+	public static final STEMTime END_TIME =  createSTEMTime(2006,
+			Calendar.NOVEMBER, END_DAY);
+
+	public static final long TIME_INCREMENT = STEMTime.Units.DAY.getMilliseconds()/4;
+	
+	public static final STEMTime ACTIVATION_TIME = 	createSTEMTime(2006,
+			Calendar.NOVEMBER, ACTIVATION_DAY);
+	public static final STEMTime DEACTIVATION_TIME = createSTEMTime(2006,
+			Calendar.NOVEMBER, DEACTIVATION_DAY);	
+	
+	/**
+	 * The fixture for this Packet Style Transport System Decorator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketStyleTransportSystemDecorator fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PacketStyleTransportSystemDecoratorTest.class);
+	}
+	
+	/**
+	 * Creates the underlying model with a decorator and load/unload edges 
+	 * 
+	 * @param loading should we set up the model for a loading edge or for an unloading edge.
+	 */
+	public Scenario createDecoratorScenario  (boolean loading) {
+		//The scenario to return
+		Scenario retValue = ScenarioFactory.eINSTANCE.createScenario();
+		DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc.setTitle("LoadUnloadScenario");
+		
+		//We need to make a model for the scenario.
+		Model scnModel = ModelFactory.eINSTANCE.createModel();
+		dc = scnModel.getDublinCore();
+		dc.populate();
+		dc.setTitle("LoadUnloadMode");
+		
+		
+		//We need to make a graph for the model.
+		Graph mdlGraph = GraphFactory.eINSTANCE.createGraph();
+		dc = mdlGraph.getDublinCore();
+		dc.populate();
+		dc.setTitle("LoadUnloadGraph");
+		
+		//Put in a packet style transport system and a random node to 
+		//unload to.
+		
+		//Create the PSTransportSystem node
+		PacketStyleTransportSystem transport = TransportFactory.eINSTANCE.createPacketStyleTransportSystem();	
+		PacketTransportLabel ptLabel = TransportFactory.eINSTANCE.createPacketTransportLabel();
+		transport.setPacketTransportLabel(ptLabel);
+		transport.getPacketTransportLabel().getCurrentValue().setCapacity(TRANSPORT_CAPACITY);
+		
+		PopulationLabel popLabel = LabelsFactory.eINSTANCE.createPopulationLabel();
+		popLabel.getCurrentPopulationValue().setCount(TRANSPORT_CAPACITY);
+		transport.getLabels().add(popLabel);
+		
+		mdlGraph.getNodeLabels().put(ptLabel.getURI(),ptLabel);
+		mdlGraph.getNodeLabels().put(popLabel.getURI(), popLabel);
+		
+		//Create the source/destination node.
+		Region region = DiseaseModelTestUtil.createPopulationRegionNode(
+				DiseaseModelTestUtil.TEST_POPULATION_IDENTIFIER,
+				PORT_POPULATION, DiseaseModelTestUtil.TEST_AREA);
+		
+		
+
+		//Create the LoadUnload edge between these and set up the 
+		//appropriate parameters
+		LoadUnloadEdge luEdge = TransportFactory.eINSTANCE.createLoadUnloadEdge();
+		LoadUnloadEdgeLabel lueLabel =TransportFactory.eINSTANCE.createLoadUnloadEdgeLabel();
+		luEdge.setLabel(lueLabel);
+		lueLabel.setURIOfIdentifiableToBeLabeled(luEdge.getURI());
+		
+		if (loading) {
+			luEdge.setLoadingEdge(true);
+			luEdge.setNodeAURI(region.getURI());
+			luEdge.setNodeBURI(transport.getURI());
+			luEdge.setA(region);
+			luEdge.setB(transport);	
+			
+		} else {
+			luEdge.setLoadingEdge(false);
+			luEdge.setNodeBURI(region.getURI());
+			luEdge.setNodeAURI(transport.getURI());
+			luEdge.setB(region);
+			luEdge.setA(transport);	
+			
+		}
+		
+		region.getEdges().add(luEdge);
+		transport.getEdges().add(luEdge);
+		
+		luEdge.getLabel().setActivatedRate(LOAD_UNLOAD_RATE);
+		luEdge.getLabel().setActivationTime(ACTIVATION_TIME);
+		luEdge.getLabel().setDeactivationTime(DEACTIVATION_TIME);
+		
+		//add the nodes and the edges to the graph
+		mdlGraph.putEdge(luEdge);
+		mdlGraph.getDynamicLabels().add(luEdge.getLabel());
+		mdlGraph.putNode(region);
+		mdlGraph.putNode(transport);
+		
+		//add the graph to the mdl.
+		scnModel.getGraphs().add(mdlGraph);
+		
+		//add the mdl to the scenario and give it a sequencer
+		retValue.setModel(scnModel);
+		
+		SequentialSequencer sequencer = SequencerFactory.eINSTANCE.createSequentialSequencer();
+		sequencer.setStartTime((STEMTime)EcoreUtil.copy(START_TIME));
+		sequencer.setCurrentTime((STEMTime)EcoreUtil.copy(START_TIME));
+		sequencer.setEndTime((STEMTime)EcoreUtil.copy(END_TIME));
+		sequencer.setTimeIncrement(TIME_INCREMENT);
+		retValue.setSequencer(sequencer);
+		
+		//create the decorator and add it to the scenario
+		PacketStyleTransportSystemDecorator decorator = this.getFixture();
+		retValue.getScenarioDecorators().add(decorator);
+		
+		//make sure everything we are returning is sane
+		assert luEdge.sane();
+		assert region.sane();
+		assert transport.sane();
+		assert mdlGraph.sane();
+		assert scnModel.sane();
+		assert retValue.sane();
+		
+		
+		
+		return retValue;
+	}
+	
+	/**Test the decorator for unloading*/
+	public void testUnload () {
+		Scenario scn = createDecoratorScenario(false);
+						
+		scn.initialize();
+		//scn.getCanonicalGraph()
+		LoadUnloadEdge luEdge = (LoadUnloadEdge)scn.getCanonicalGraph().getEdges().values().toArray()[0];	
+		assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==0);
+		
+		while (scn.step()) {
+			//System.out.println("step:"+scn.getSequencer().getCurrentTime());
+			//System.out.println("curr:"+luEdge.getLabel().getCurrentValue().getMigrationRate());
+			//System.out.println("next:"+((MigrationEdgeLabelValue)luEdge.getLabel().getNextValue()).getMigrationRate());
+			//System.out.println("checking:"+luEdge.getLabel().hashCode());			
+			
+			if (scn.getSequencer().getCurrentTime().getTime().after(ACTIVATION_TIME.getTime()) &&
+					scn.getSequencer().getCurrentTime().getTime().before(DEACTIVATION_TIME.getTime())) {
+				assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==LOAD_UNLOAD_RATE);
+			} else {
+				assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==0);	
+			}
+		}
+		
+	
+	}
+	
+	public void testLoad() {
+		Scenario scn = createDecoratorScenario(true);
+		
+		scn.initialize();
+		//scn.getCanonicalGraph()
+		LoadUnloadEdge luEdge = (LoadUnloadEdge)scn.getCanonicalGraph().getEdges().values().toArray()[0];	
+		assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==0);
+		
+		while (scn.step()) {
+			//System.out.println("step:"+scn.getSequencer().getCurrentTime());
+			//System.out.println("curr:"+luEdge.getLabel().getCurrentValue().getMigrationRate());
+			//System.out.println("next:"+((MigrationEdgeLabelValue)luEdge.getLabel().getNextValue()).getMigrationRate());
+			//System.out.println("checking:"+luEdge.getLabel().hashCode() +"va.");			
+			
+			if (scn.getSequencer().getCurrentTime().getTime().after(ACTIVATION_TIME.getTime()) &&
+					scn.getSequencer().getCurrentTime().getTime().before(DEACTIVATION_TIME.getTime())) {
+				assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==
+					LOAD_UNLOAD_RATE*TRANSPORT_CAPACITY/PORT_POPULATION);
+			} else {
+				assertTrue(luEdge.getLabel().getCurrentValue().getMigrationRate()==0);	
+			}
+		}
+	}
+
+	/**
+	 * Constructs a new Packet Style Transport System Decorator test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketStyleTransportSystemDecoratorTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Packet Style Transport System Decorator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PacketStyleTransportSystemDecorator fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Packet Style Transport System Decorator test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected PacketStyleTransportSystemDecorator getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(TransportFactory.eINSTANCE.createPacketStyleTransportSystemDecorator());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**
+	 * Create an instance of STEMTime
+	 * 
+	 * @return the instance
+	 */
+	private static STEMTime createSTEMTime(final int year, final int month,
+			final int day) {
+		final STEMTime retValue = ModelFactory.eINSTANCE.createSTEMTime();
+
+		final Calendar calendar = Calendar.getInstance();
+		calendar.set(year, month, day);
+		retValue.setTime(calendar.getTime());
+		return retValue;
+	} // createSTEMTime
+
+
+} //PacketStyleTransportSystemDecoratorTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemTest.java
new file mode 100644
index 0000000..2156dde
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketStyleTransportSystemTest.java
@@ -0,0 +1,87 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Packet Style Transport System</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PacketStyleTransportSystemTest extends TransportSystemTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PacketStyleTransportSystemTest.class);
+	}
+
+	/**
+	 * Constructs a new Packet Style Transport System test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketStyleTransportSystemTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Packet Style Transport System test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected PacketStyleTransportSystem getFixture() {
+		return (PacketStyleTransportSystem)fixture;
+	}
+	
+	/**create the fixture*/
+	private static PacketStyleTransportSystem createFixture() {
+		PacketStyleTransportSystem rc = TransportFactory.eINSTANCE.createPacketStyleTransportSystem();
+		rc.getLabels().add(LabelsFactory.eINSTANCE.createPopulationLabel());
+		return rc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //PacketStyleTransportSystemTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelTest.java
new file mode 100644
index 0000000..8f688b1
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelTest.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.LabelTest;
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Packet Transport Label</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+public class PacketTransportLabelTest extends LabelTest {
+
+	/**
+	 * The fixture for this Packet Transport Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketTransportLabel fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PacketTransportLabelTest.class);
+	}
+
+	/**
+	 * Constructs a new Packet Transport Label test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabelTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Packet Transport Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PacketTransportLabel fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Packet Transport Label test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketTransportLabel getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(TransportFactory.eINSTANCE.createPacketTransportLabel());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //PacketTransportLabelTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelValueTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelValueTest.java
new file mode 100644
index 0000000..bba84df
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PacketTransportLabelValueTest.java
@@ -0,0 +1,129 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.core.graph.tests.LabelValueTest;
+import org.eclipse.stem.definitions.transport.PacketTransportLabelValue;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Packet Transport Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+public class PacketTransportLabelValueTest extends LabelValueTest {
+	
+	public static double TEST_CAPACITY = 1234.0;
+
+	/**
+	 * The fixture for this Packet Transport Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketTransportLabelValue fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PacketTransportLabelValueTest.class);
+	}
+
+	/**
+	 * Constructs a new Packet Transport Label Value test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabelValueTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Packet Transport Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(PacketTransportLabelValue fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Packet Transport Label Value test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketTransportLabelValue getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(TransportFactory.eINSTANCE.createPacketTransportLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	/**Make sure the fixture makes sense*/
+	public void testFixture() {
+		final PacketTransportLabelValue ptlValue = getFixture();
+		assertNotNull(ptlValue);
+		assertTrue(ptlValue.sane());
+				
+		/*Make sure we can set the value*/
+		ptlValue.setCapacity(TEST_CAPACITY);
+		assertTrue(ptlValue.getCapacity()==TEST_CAPACITY);
+		
+	}
+
+	/**
+	 * Makes sure that reset sets this back to its default value*/
+	@Override
+	public void testReset() {
+		final PacketTransportLabelValue ptlValue = getFixture();
+		double defVal = ptlValue.getCapacity();
+
+		ptlValue.setCapacity(TEST_CAPACITY);
+		assertFalse(ptlValue.getCapacity()==defVal);
+		ptlValue.reset();
+		
+		assertTrue(ptlValue.getCapacity()==defVal);
+		
+		
+	}
+	
+	
+
+} //PacketTransportLabelValueTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PipeStyleTransportSystemTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PipeStyleTransportSystemTest.java
new file mode 100644
index 0000000..acc42f0
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/PipeStyleTransportSystemTest.java
@@ -0,0 +1,89 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.textui.TestRunner;
+
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.transport.PipeStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Pipe Style Transport System</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PipeStyleTransportSystemTest extends TransportSystemTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(PipeStyleTransportSystemTest.class);
+	}
+
+	/**
+	 * Constructs a new Pipe Style Transport System test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PipeStyleTransportSystemTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Pipe Style Transport System test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected PipeStyleTransportSystem getFixture() {
+		return (PipeStyleTransportSystem)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated NOT
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(createFixture());
+	}
+	
+	/**create the fixture*/
+	private static PipeStyleTransportSystem createFixture() {
+		PipeStyleTransportSystem rc = TransportFactory.eINSTANCE.createPipeStyleTransportSystem();
+		rc.getLabels().add(LabelsFactory.eINSTANCE.createPopulationLabel());
+		return rc;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+	
+	
+
+} //PipeStyleTransportSystemTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportAllTests.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportAllTests.java
new file mode 100644
index 0000000..d41b52e
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportAllTests.java
@@ -0,0 +1,56 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Transport</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportAllTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new TransportAllTests("Transport Tests");
+		suite.addTest(TransportTests.suite());
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportAllTests(String name) {
+		super(name);
+	}
+
+} //TransportAllTests
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportSystemTest.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportSystemTest.java
new file mode 100644
index 0000000..f1046f6
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportSystemTest.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.tests.NodeTest;
+import org.eclipse.stem.definitions.transport.TransportSystem;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>System</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+public abstract class TransportSystemTest extends NodeTest {
+
+	/**
+	 * The fixture for this System test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportSystem fixture = null;
+
+	/**
+	 * Constructs a new System test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportSystemTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this System test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(TransportSystem fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this System test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportSystem getFixture() {
+		return fixture;
+	}
+
+} //TransportSystemTest
diff --git a/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportTests.java b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportTests.java
new file mode 100644
index 0000000..2d734d6
--- /dev/null
+++ b/org.eclipse.stem.tests.transport/src/org/eclipse/stem/definitions/transport/tests/TransportTests.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.definitions.transport.tests;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>transport</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportTests extends TestSuite {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(suite());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static Test suite() {
+		TestSuite suite = new TransportTests("transport Tests");
+		suite.addTestSuite(LoadUnloadEdgeTest.class);
+		suite.addTestSuite(LoadUnloadEdgeLabelTest.class);
+		suite.addTestSuite(PacketStyleTransportSystemTest.class);
+		suite.addTestSuite(PacketTransportLabelTest.class);
+		suite.addTestSuite(PipeStyleTransportSystemTest.class);
+		suite.addTestSuite(PacketTransportLabelValueTest.class);
+		suite.addTestSuite(PacketStyleTransportSystemDecoratorTest.class);
+		return suite;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportTests(String name) {
+		super(name);
+	}
+
+} //TransportTests
diff --git a/org.eclipse.stem.tests.ui.ge/.classpath b/org.eclipse.stem.tests.ui.ge/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.ui.ge/.project b/org.eclipse.stem.tests.ui.ge/.project
new file mode 100644
index 0000000..7f8b4a4
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.ui.ge</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ea68f99
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Jan 21 12:50:03 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..7f0a416
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Thu Oct 05 14:28:06 PDT 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/>
diff --git a/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.ltk.core.refactoring.prefs b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..5f0598e
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Thu Oct 05 14:28:07 PDT 2006
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/org.eclipse.stem.tests.ui.ge/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.ui.ge/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..116c54b
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-SymbolicName: org.eclipse.stem.tests.ui.ge
+Bundle-Version: 1.0.0
+Require-Bundle: org.eclipse.stem.ui.ge,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.definitions,
+ org.junit,
+ org.eclipse.help.ui
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.ui.ge/build.properties b/org.eclipse.stem.tests.ui.ge/build.properties
new file mode 100644
index 0000000..748e77a
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/build.properties
@@ -0,0 +1,15 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               build.properties,\
+               notice.html,\
+               epl-v10.html,\
+               plugin.properties
+src.includes = .classpath,\
+               .project,\
+               META-INF/,\
+               bin/,\
+               src/,\
+               build.properties,\
+               plugin.properties
diff --git a/org.eclipse.stem.tests.ui.ge/epl-v10.html b/org.eclipse.stem.tests.ui.ge/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.ui.ge/notice.html b/org.eclipse.stem.tests.ui.ge/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.ui.ge/plugin.properties b/org.eclipse.stem.tests.ui.ge/plugin.properties
new file mode 100644
index 0000000..bf0aa5d
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/plugin.properties
@@ -0,0 +1,27 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Google Earth UI Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/tests/ui/ge/Activator.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/tests/ui/ge/Activator.java
new file mode 100644
index 0000000..e2721b2
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/tests/ui/ge/Activator.java
@@ -0,0 +1,77 @@
+package org.eclipse.stem.tests.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.stem.core.Constants;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The activator class controls the plug-in life cycle.
+ * It subclasses AbstractUIPlugin which takes care of 
+ * restoring and saving Preferences.
+ * 
+ * It is not clear if we need this class for the ge.tests 
+ * plugin project.  So far it has not hurt!
+ */
+public class Activator extends Plugin {
+
+	/**
+	 * The plug-in ID
+	 */ 
+	public static final String PLUGIN_ID = Constants.ID_ROOT +".ge.tests"; //$NON-NLS-1$
+
+	/** 
+	 * The shared instance
+	 * 
+	 */
+	static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+
+	/**
+	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		if (plugin == null) 
+			plugin = new Activator();
+		return plugin;
+	}
+
+	
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/AspectTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/AspectTest.java
new file mode 100644
index 0000000..9834e86
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/AspectTest.java
@@ -0,0 +1,254 @@
+package org.eclipse.stem.ui.ge;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+
+/**
+ * Test the Aspect class 
+ * 
+ * This can run as a java junit class 
+ * It does not have to run as a plugin
+ *
+ */
+public class AspectTest extends TestCase {
+	
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		// Should do just S E I R as default
+		//Properties properties = new Properties();
+		// call the setup() method for the Aspect class.
+		Aspect.setup();		
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setup()}.
+	 */
+	public void testSetup() {
+		
+		Aspect.setup();
+	}
+
+	
+	/**
+	 * Test method for org.eclipse.stem.ui.ge.Aspect#getAspects(Properties)
+	 */
+	public void testGetAspects() {
+		// we did the getAspects in setup so just check results
+		Map<String,Aspect> aspects = Aspect.getMap();
+		
+		Assert.assertEquals(4,aspects.size());
+		for(Map.Entry<String,Aspect> entry: aspects.entrySet()) {
+			Aspect aspect = entry.getValue();
+			boolean sane = aspect.isSane();
+			Assert.assertTrue(sane);
+		}
+		
+	}
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#Aspect(java.lang.String, java.lang.String)}.
+	 */
+	public void testAspect() {
+		Aspect a = new Aspect("T","Test"); //$NON-NLS-1$ //$NON-NLS-2$
+		Assert.assertNotNull("Constructor failed", a);	 //$NON-NLS-1$
+	}
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getAspect(java.lang.String)}.
+	 */
+	public void testGetAspect() {
+		
+		Aspect t = Aspect.getAspect("S");		 //$NON-NLS-1$
+		Assert.assertEquals(t.getCode(),"S"); //$NON-NLS-1$
+	}
+	/**
+	 * Test method for 
+	 */
+	public void testGetDefault() {
+		Aspect defaultA = Aspect.getDefault();
+		Assert.assertEquals("I",defaultA.getCode()); //$NON-NLS-1$
+		
+	}
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#exists(java.lang.String)}.
+	 */
+	public void testExists() {
+			
+		Assert.assertTrue(Aspect.exists("E")); //$NON-NLS-1$
+		Assert.assertFalse(Aspect.exists("X")); //$NON-NLS-1$
+	}
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getMap()}.
+	 */
+	public void testGetMap() {
+		Map<String,Aspect> map = Aspect.getMap();
+		Assert.assertNotNull("getMap failed", map); //$NON-NLS-1$
+	}
+
+	
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getCode()}.
+	 */
+	public void testGetCode() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.getCode(),"R"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setCode(java.lang.String)}.
+	 */
+	public void testSetCode() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setCode("X"); //$NON-NLS-1$
+		Assert.assertEquals(test.getCode(),"X"); //$NON-NLS-1$
+		Assert.assertTrue(Aspect.exists("X")); //$NON-NLS-1$
+	}
+
+	
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setName(java.lang.String)}.
+	 */
+	public void testSetName() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setName("NewName"); //$NON-NLS-1$
+		Assert.assertEquals(test.getName(),"NewName"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#toString()}.
+	 */
+	public void testToString() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.toString(),test.getCode());
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getDescription()}.
+	 */
+	public void testGetDescription() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertNotNull(test.getDescription());
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setDescription(java.lang.String)}.
+	 */
+	public void testSetDescription() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setDescription("New description"); //$NON-NLS-1$
+		Assert.assertEquals(test.getDescription(),"New description"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getRange()}.
+	 */
+	public void testGetRange() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertTrue(test.isSane());
+		
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setRange(java.lang.String)}.
+	 */
+	@SuppressWarnings("boxing")
+	public void testSetRangeString() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setRange("0.0,0.5,1.0"); //$NON-NLS-1$
+		Assert.assertEquals(test.getRange(1),0.5);
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getOpacity()}.
+	 */
+	public void testGetOpacity() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.getOpacity(0), 0);
+	}
+
+	
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setOpacity(java.lang.String)}.
+	 */
+	public void testSetOpacity() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setOpacity("0"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setRed(java.lang.String)}.
+	 */
+	public void testSetRed() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setRed("0"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setGreen(java.lang.String)}.
+	 */
+	public void testSetGreen() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setGreen("0,128,255"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#setBlue(java.lang.String)}.
+	 */
+	public void testSetBlue() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		test.setBlue("0,128,255"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getRed(int)}.
+	 */
+	public void testGetRed() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.getRed(0), 0);
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getGreen(int)}.
+	 */
+	public void testGetGreen() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.getGreen(0), 240);
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.Aspect#getBlue(int)}.
+	 */
+	public void testGetBlue() {
+		Aspect test = Aspect.getAspect("R"); //$NON-NLS-1$
+		Assert.assertEquals(test.getBlue(1), 0);
+	}
+
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEDataTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEDataTest.java
new file mode 100644
index 0000000..547227e
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEDataTest.java
@@ -0,0 +1,137 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+
+/**
+ * test
+ *
+ */
+public class GEDataTest extends TestCase {
+
+	String name = null;
+	
+	GEData gedata = null;
+	
+	/**
+	 * @param name
+	 */
+	public GEDataTest(String name) {
+		super(name);
+		GELog.DEBUG = true;
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		name = "Test"; //$NON-NLS-1$ 
+		double[][] d = {{0.0, 0,0},
+				{10.0, 0,0},
+				{10.0, 10,0},
+				{0.0, 10,0},
+				{0.0, 0,0} };
+		Segment s = new Segment(d);
+		LatLong polygon = new LatLong();
+		polygon.add(s);
+		double[][] d2 = {{20.0, 0,0},
+				{20.0, 20,0},
+				{40.0, 0,0},
+				{20.0, 0,0} };
+		Segment s2 = new Segment(d2);
+		polygon.add(s2);
+		gedata = new GEData(name,polygon);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * 
+	 */
+	public void testGEData() {
+		Assert.assertNotNull("setup failed.",gedata);//$NON-NLS-1$ 
+		GEData gedatax = new GEData("TestGEData",null);//$NON-NLS-1$ 
+		if (gedatax == null) 
+			fail("Failed to create a GEData instance");//$NON-NLS-1$ 
+	}
+
+	/**
+	 * 
+	 */
+	public void testGetCoordinatesAsString() {
+		String coord = gedata.getCoordinatesAsString(0);
+		if (coord == null || coord.length() <= 0)
+			fail("failed to create a KML string of Coordinates.");//$NON-NLS-1$ 
+		GELog.debug(this," coord: "+coord);//$NON-NLS-1$ 
+	}
+
+	/**
+	 * 
+	 */
+	public void testGetNumAreas() {
+		assertTrue(gedata.getNumAreas() == 2);
+	}
+
+	/**
+	 * 
+	 */
+	public void testGetName() {
+		assertTrue(gedata.getName().equals("Test"));//$NON-NLS-1$ 
+		gedata.setName("NewTest");//$NON-NLS-1$ 
+		assertTrue(gedata.getName().equals("NewTest"));//$NON-NLS-1$ 
+	}
+
+	/**
+	 * 
+	 */
+	public void testSetName() {
+		gedata.setName("Test2");//$NON-NLS-1$ 
+		assertTrue(gedata.getName().equals("Test2"));//$NON-NLS-1$ 
+	}
+
+	/**
+	 * 
+	 */
+	public void testGetId() {
+		assertTrue(gedata.getId().equals("Test"));//$NON-NLS-1$ 
+	}
+
+	/**
+	 * 
+	 */
+	public void testSetId() {
+		gedata.setId("Test3");//$NON-NLS-1$ 
+		assertTrue(gedata.getId().equals("Test3"));//$NON-NLS-1$ 
+	}
+	/** 
+	 * 
+	 */
+	@SuppressWarnings("boxing")
+	public void testSetValue() {
+		Aspect testAspect = new Aspect("T","Test");//$NON-NLS-1$ //$NON-NLS-2$ 
+		gedata.setValue(testAspect, 0.5);
+		double value = gedata.getValue(testAspect);
+		assertEquals(value,0.5);
+	}
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEInterfaceTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEInterfaceTest.java
new file mode 100644
index 0000000..603c57c
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GEInterfaceTest.java
@@ -0,0 +1,227 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import junit.framework.TestCase;
+
+/**
+ *
+ */
+public class GEInterfaceTest extends TestCase      {
+
+	/**
+	 * @param name
+	 */
+	public GEInterfaceTest(String name) {
+		super(name);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	
+//	private Scenario scenario = null;
+	
+	/**
+	 * this has the key part commented out.
+	 * To reestablish this test we need to be able to create a test scenario.
+	 * We need to know how to do this.
+	 * 
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+//		 This creates a scenario that's ready to be "stepped" (i.e.,
+		// simulated). The world is a lattice (grid) that 2x2 where each node
+		// has a population of 100 humans and has an area of 100 square
+		// kilometers. There is one disease that is modeled with a
+		// "deterministic SEIR disease model". One person in the node at
+		// position [0][0], in the upper left of the grid, is infected.
+//		scenario = DeterministicSEIRScenarioTest.createScenario(2, 2);
+
+		// This will initialize the scenario and make it ready to step through
+		// the simulation sequence. In particular, it will create the cannonical
+		// graph from the scenario's model.
+//		scenario.initialize();
+
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.ui.ge.GEInterface#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)}.
+	 *
+	 * This will test the method that gets control when a 
+	 * Simulation starts. 
+	 * 
+	 */
+	
+	public void testSimulationsChanged() {
+		// The scenario was created in the setup method.
+		 
+		// create a simulation
+//		ISimulation simulation = new Simulation(scenario);
+		// create an instance of GEInterface to test		
+//		GEInterface gei = new GEInterface(null);
+        // invoke the simulationsChanged method to		
+		// tell gei that a Simulation has been added.
+//		SimulationManager source = SimulationManager.getManager();
+//		ISimulation[] add = {simulation};
+//		ISimulation[] remove = {};
+//		SimulationManagerEvent smevent = 
+//			new SimulationManagerEvent(source,add,remove);
+//		gei.simulationsChanged(smevent);
+	}
+
+/**
+ * 
+ */
+//	public void testStartServer() {
+//		GEInterface gei = new GEInterface();
+//		boolean started = gei.startServer();
+//		assertTrue("Failed to start web server.",started);
+//	}
+	
+	public void testSetActive() {
+       //		 create a simulation
+//		ISimulation simulation = new Simulation(scenario);
+		// create an instance of GEInterface to test		
+//		GEInterface gei = new GEInterface(null);
+//		boolean ok = gei.setActive(simulation, true);
+//		assertFalse(ok);
+	}
+	
+	/**
+	 * 
+	 */
+	public void testDisplayMap() {
+		GELog.DEBUG = true;
+//		 create a simulation
+//		ISimulation simulation = new Simulation(scenario);
+		// create an instance of GEInterface to test		
+//		GEInterface gei = new GEInterface(null);
+//		boolean ok = gei.displayMap(simulation);
+//		assertTrue(ok);
+	}
+	
+	/**
+	 * 
+	 */
+	public void testDisplayMapNode() {
+		GELog.DEBUG = true;
+//		 create a simulation
+//		ISimulation simulation = new Simulation(scenario);
+		// create an instance of GEInterface to test		
+		GEInterface gei = new GEInterface(null);
+		
+		boolean ok = gei.displayArea("USA/USA_2_MAP.xml","az",false);//$NON-NLS-1$ //$NON-NLS-2$ 
+		assertTrue(ok);
+	}
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.ui.ge.GEInterface#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)}.
+	 *
+	 * This will test the method that gets control when a 
+	 * Simulation signals a change. In our case we are interested in
+	 * the  SimulationState.COMPLETED_CYCLE event.
+	 * 
+	 */
+//	
+//	public void testSimulationChanged() {
+//		
+//		// create a simulation
+//		ISimulation simulation = new Simulation(scenario);
+//		// create an instance of GEInterface to test		
+//		GEInterface gei = new GEInterface(null);
+//        
+//		// tell gei that a Simulation has been added.
+//		
+//		gei.setActive(simulation,true);
+//		
+//		// send a simulation event.
+//		SimulationState state = SimulationState.COMPLETED_CYCLE;
+//		SimulationEvent event = new SimulationEvent(simulation,state);
+//		
+//		gei.simulationChanged(event);
+//		
+//		// how should I check for sucess???
+//		
+//	}
+
+}
+
+// old stuff to save
+///**
+//* provide methods for StemMapContentProvider implmentation
+//*/
+//public int getAspect() {
+//	return 3;
+//}
+//
+//public Map<String,GEData> getSTEMMap() {
+//	String name = "US-AL-01001";
+//	ArrayList<Coordinates> coord = new ArrayList<Coordinates>();
+//	double[] points = new double[] {
+//			-86.916956,32.664158, -86.817344,32.660151,
+//			-86.713495,32.667382, -86.620663,32.70626,
+//			-86.524593,32.707057, -86.524593,32.707057,
+//			-86.468202,32.707856, -86.416159,32.70748,
+//			-86.415647,32.707464, -86.413116,32.707386,
+//			-86.413116,32.707386, -86.412567,32.607347,
+//			-86.412378,32.557071, -86.412342,32.503636,
+//			-86.412073,32.492934, -86.412073,32.492934,
+//			-86.411973,32.491634, -86.411973,32.491634,
+//			-86.411973,32.489355, -86.411973,32.485835,
+//			-86.411773,32.465735, -86.411172,32.409937,
+//			-86.411172,32.409937, -86.416472,32.407037,
+//			-86.444785,32.39986, -86.463564,32.377288,
+//			-86.496774,32.344438, -86.496774,32.344438,
+//			-86.535668,32.34044, -86.54216,32.361417,
+//			-86.709716,32.3604, -86.782377,32.373375,
+//			-86.784355,32.324408, -86.814912,32.340803,
+//			-86.814912,32.340803, -86.843096,32.432814,
+//			-86.866607,32.440114, -86.900519,32.556054,
+//			-86.916956,32.664158 };
+//	
+//	for (int i=0; i<points.length;i++) {
+//	    Coordinates c = new Coordinates(points[i],points[i+1]);
+//	    i++;
+//	    coord.add(c);
+//	}
+//	
+//	
+//	
+//	GEData loc =new GEData(name,coord);
+//	Map<String,GEData> map = new HashMap<String,GEData>(1024);
+//	map.put(name,loc);
+//	return map;
+//}
+//
+//public Map<String,Color> getColors() {
+//	String name = "US-AL-01001";
+//	Map<String,Color> colorMap = new HashMap<String,Color>(1024);
+//	Color c = Color.blue;
+//	colorMap.put(name,c);
+//	return colorMap;
+//}
+//
+//private long cycle = -1;
+//public long getCycle() {
+//	cycle++;
+//	return cycle; 
+//}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GELogTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GELogTest.java
new file mode 100644
index 0000000..5aaf13e
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/GELogTest.java
@@ -0,0 +1,92 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * testcase for GELOG
+ *
+ */
+public class GELogTest extends TestCase {
+
+	/**
+	 * @param name
+	 */
+	public GELogTest(String name) {
+		super(name);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * 
+	 */
+	public void testLogOn() {
+		GELog.DEBUG=true;
+		GELog.debug(this.getClass(),"DEBUG option turned ON");//$NON-NLS-1$ 
+		GELog.debug("test msg");//$NON-NLS-1$ 
+		Assert.assertTrue(GELog.DEBUG);
+	}
+	/**
+	 * 
+	 */
+	public void testLogDebug() {
+		GELog.DEBUG=true;
+		GELog.debug(this.getClass(),"Verify: GELogTest: ");//$NON-NLS-1$ 
+		GELog.debug(this,"Verify: GELogTest: ");//$NON-NLS-1$ 
+		GELog.debug("GELogTest.testLog","Verify: GELogTest.testLog: ");//$NON-NLS-1$//$NON-NLS-2$  
+		Assert.assertTrue(GELog.DEBUG);
+	
+	}
+	/**
+	 * 
+	 */
+	public void testLogError() {
+		GELog.DEBUG=true;
+		GELog.error("GELogTest: error ",null);//$NON-NLS-1$ 
+		
+	}
+	/**
+	 * 
+	 */
+	public void testLogInfo() {
+		GELog.DEBUG=true;
+		GELog.info("GELogTest: info ");//$NON-NLS-1$ 
+		
+	}
+
+	/**
+	 * 
+	 */
+	public void testLogOFF() {	
+		GELog.debug(this,"DEBUG option will be turned OFF");//$NON-NLS-1$ 
+		GELog.DEBUG=false;
+		GELog.debug(this,"DEBUG option turned OFF");//$NON-NLS-1$ 
+		Assert.assertFalse(GELog.DEBUG);
+	}
+	
+}
+
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/SlideShowServletTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/SlideShowServletTest.java
new file mode 100644
index 0000000..78f026c
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/SlideShowServletTest.java
@@ -0,0 +1,126 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+//import java.io.File;
+
+//import org.eclipse.stem.ui.ge.servlet.SlideShowInfo;
+//import org.eclipse.stem.ui.ge.servlet.SlideShowServlet;
+
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.stem.ui.ge.servlet.VerifyClient;
+
+/**
+ * test for the SlideShowServlet
+ * 
+ * Currently this requires that the external Tomcat webserver 
+ * is available at localhost:8080  
+ * 
+ * It could be redone to use the embedded web server support 
+ * to verify that the servlets work.
+ *
+ */
+public class SlideShowServletTest extends TestCase {
+	/**
+	 * info 
+	 */
+//	public SlideShowInfo info = null;
+	
+	VerifyClient vc = null;
+	/**
+	 * @param name
+	 */
+	public SlideShowServletTest(String name) {
+		super(name);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		
+		super.setUp();
+//		info = new SlideShowInfo("key","e:\\tmp\\ge",false,null);
+		vc = new VerifyClient();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Test method 
+	 */
+	public void testGetFiles() {
+//		File[] files = null;
+//		SlideShowServlet test = new SlideShowServlet();
+//		files = test.getFiles(info);
+//		if (files == null)
+//		   fail("getFiles returned null");
+//		for (int i=0; i<files.length; i++) {
+//			System.out.println("file: "+i+" "+files[i].getName());
+//		}
+		
+	}
+
+	/**
+	 * Verify that the webserver is active and 
+	 * the verifyServlet is deployed 
+	 */
+	public void testVerify() {
+		String url = "http://localhost:8080/SlideShow/verify";
+		
+		boolean result = vc.verify(url);
+		Assert.assertTrue(vc.getError(),result);
+	}
+
+	/**
+	 * Verify that when the webserver is active but the  
+	 * the verifyServlet is not deployed we get an error 
+	 * We will test for this by using an invalid servlet name
+	 */
+	public void testVerify1() {
+		String url = "http://localhost:8080/SlideShow/verify1";
+		boolean result = vc.verify(url);
+		
+		if (result || ! vc.getError().startsWith("EXCEPTION"))
+		   Assert.fail(vc.getError());
+	}
+	/**
+	 * Verify that when the webserver is not active we 
+	 * get an error msg
+	 * We will test this by specifing an invalid port
+	 */
+	public void testVerify2() {	
+		String url = "http://localhost:5555/SlideShow/verify";		
+		boolean result = vc.verify(url);
+		if (result || ! vc.getError().startsWith("EXCEPTION"))
+			   Assert.fail(vc.getError());
+		
+	}
+	/**
+	 * Verify that we get an error for an invalid URL
+	 */
+	public void testVerify3() {	
+		String url = "localhost:5555/SlideShow/verify";		
+		boolean result = vc.verify(url);
+		if (result || ! vc.getError().startsWith("ERROR"))
+			   Assert.fail(vc.getError());
+		
+	}
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKmlTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKmlTest.java
new file mode 100644
index 0000000..dae183f
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKmlTest.java
@@ -0,0 +1,75 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.ui.ge.GELog;
+
+/**
+ *
+ */
+public class StemKmlTest extends TestCase {
+
+	/**
+	 * @param name
+	 */
+	public StemKmlTest(String name) {
+		super(name);
+	}
+
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * test startup of embedded web server
+	 * Test must run as JUnit plugin test
+	 * This will test both the code to start the 
+	 * web server but also the deployment of the 
+	 * servlets. 
+	 * 
+	 * The result of the test should be that a 
+	 * small png image with text "Default" 
+	 * will be displayed on your browser.
+	 * 
+	 */
+   public void teststartWebServer() {
+	  GELog.DEBUG = true;
+	  
+   	  try {
+		String urlstr = StemKml.startWebServer();
+		  if (urlstr == null || urlstr.length() <= 0)
+				fail("failed to start the internal web server."); //$NON-NLS-1$
+		  urlstr = urlstr+"/"+"SlideShow"+"/"+"image"; //$NON-NLS-4$
+		  URL url = new URL(urlstr);
+		  GELog.debug(this,"URL: "+url.toString());
+		  StemKml.launch(urlstr);
+		  try {
+	            Thread.sleep(20*1000);
+	      }  catch (InterruptedException e) {
+	            // Ignored.
+	      }
+	  } catch (MalformedURLException e) {
+		e.printStackTrace();
+		fail("Exception starting embedded server");
+	  }
+   	  
+   }
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePageTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePageTest.java
new file mode 100644
index 0000000..713a154
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePageTest.java
@@ -0,0 +1,137 @@
+package org.eclipse.stem.ui.ge.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import junit.framework.TestCase;
+
+
+import org.eclipse.stem.ui.ge.GELog;
+
+/**
+ * Test of the GEPreferenc Page
+ * 
+ * This testcase must run as a JUnit PluginTest.
+ *
+ */
+public class GEPreferencePageTest extends TestCase {
+
+	/**
+	 * @param name
+	 */
+	public GEPreferencePageTest(String name) {
+		super(name);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		GELog.DEBUG = true;
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#getFolder()}.
+	 */
+	public void testGetFolder() {
+		String folder = GEPreferencePage.getFolder();
+		if (folder == null)
+		  fail("Returned null from getFolder()");//$NON-NLS-1$ 
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#setFolder(java.lang.String)}.
+	 */
+	public void testSetFolder() {
+		GEPreferencePage.setFolder("c:/tmp");//$NON-NLS-1$ 
+		String folder = GEPreferencePage.getFolder();
+		if (! "c:/tmp".equals(folder)) {//$NON-NLS-1$ 
+			fail("setFolder failed.");//$NON-NLS-1$ 
+		}
+	}
+
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#getAspect()}.
+	 */
+//	public void testGetAspect() {
+//		Aspect aspect = GEPreferencePage.getAspect();
+//      This can return null		
+//		Assert.assertNotNull("Invalid Aspect",aspect);
+//	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#getServerHost()}.
+	 */
+	
+	public void testGetServerHost() {
+		String expected = "localhost:8080";//$NON-NLS-1$ 
+		String host = GEPreferencePage.getServerHost();
+		if (! expected.equals(host)) {
+			fail("getServerHost failed.");//$NON-NLS-1$ 
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#isAutoLaunch()}.
+	 */
+	public void testgetMethod() {
+		int expected = GEPreferencePage.M_MANUAL_DISPLAY;
+		int test = GEPreferencePage.getMethod();
+		if ( expected != test ) {
+			fail("getMethod() failed.");//$NON-NLS-1$ 
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#isInternalServer()}.
+	 */
+	public void testIsInternalServer() {
+		boolean expected = true;
+		boolean test = GEPreferencePage.isInternalServer();
+		if (expected != test) {
+			fail("IsInternalServer() failed.");//$NON-NLS-1$ 
+		}
+	}
+
+	/**
+	 * Test method.
+	 */
+	public void testIsAutoNetworkLink() {
+		boolean expected = true;
+		boolean test = GEPreferencePage.isAutoLaunch();
+		if (expected != test) {
+			fail("IsAutoLaunch() failed.");//$NON-NLS-1$ 
+		}
+	}
+
+	/**
+	 * Test method for {@link org.eclipse.stem.ui.ge.views.GEPreferencePage#getWhichCycle()}.
+	 */
+	public void testGetWhichCycle() {
+		int expected = 1;
+		int test = GEPreferencePage.getWhichCycle();
+		if (expected != test) {
+			fail("GetWhichCycle() failed.");//$NON-NLS-1$ 
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewTest.java b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewTest.java
new file mode 100644
index 0000000..6b0b041
--- /dev/null
+++ b/org.eclipse.stem.tests.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewTest.java
@@ -0,0 +1,229 @@
+package org.eclipse.stem.ui.ge.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.GEInterface;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * The class <code>GEViewTest</code> contains tests 
+ * for the class   GEView.
+ *
+ * This will make a very hilevel test of the GEView class.
+ * It will invoke the viewer and verify that it starts and 
+ * will initially get nothing to list in the ListViewer.
+ * 
+ * Some of this was copied from the book 
+ * Eclipse Building commercial quality plug-ins"
+ * 
+ * @pattern JUnit Test Case
+ * 
+ * Invoke this as a JUnit Plugin Test
+ */
+public class GEViewTest extends TestCase
+{
+	
+	/** 
+	 * must match the id in the GEView class
+	 */
+   private static final String VIEW_ID = 
+	   Constants.ID_ROOT+".ui.views.ge";//$NON-NLS-1$ 
+      
+
+   /**
+    * The object that is being tested.
+    *
+    * 
+    */
+   private GEView geView;
+
+   /**
+   /**
+    * Construct new test instance.
+    *
+    * @param name the test name
+    */
+   public GEViewTest(String name) {
+      super(name);
+   }
+
+
+   /**
+    * Perform pre-test initialization.
+    *
+    * @throws Exception
+    *
+    * @see TestCase#setUp()
+    */
+   @Override
+protected void setUp() throws Exception {
+     super.setUp();
+     GELog.DEBUG = true;
+     try {
+      // Initialize the test fixture for each test 
+      // that is run.
+      waitForJobs();
+      geView = (GEView) 
+         PlatformUI
+            .getWorkbench()
+            .getActiveWorkbenchWindow()
+            .getActivePage()
+            .showView(VIEW_ID);
+
+      // Delay for 3 seconds so that 
+      // the GE view can be seen.
+      waitForJobs();
+      delay(3000);
+   } catch (RuntimeException e) {
+	   Activator.logError("Unable to run GEViewTest in this environment", e);//$NON-NLS-1$ 
+	}
+      // Add additional setup code here.
+   }
+
+   /**
+    * Perform post-test cleanup.
+    *
+    * @throws Exception
+    *
+    * @see TestCase#tearDown()
+    */
+   @Override
+protected void tearDown() throws Exception {
+      super.tearDown();
+      // Dispose of test fixture.
+      try {
+		waitForJobs();
+		  
+		  PlatformUI
+		     .getWorkbench()
+		     .getActiveWorkbenchWindow()
+		     .getActivePage()
+		     .hideView(geView);
+		  // Add additional teardown code here.
+	} catch (RuntimeException e) {
+		  Activator.logError("Unable to run GEViewTest in this environment", e);//$NON-NLS-1$ 
+	}
+   }
+
+   
+   
+   /**
+    * Run the view test.
+    */
+   public void testView() {
+	  if (geView == null) 
+		  return;
+	  
+	  GEInterface gei = new GEInterface(geView);
+      ListViewer viewer = geView.getViewer();
+      GEViewContentProvider contentProvider = new GEViewContentProvider(gei); 
+		viewer.setContentProvider(contentProvider);
+		//viewer.setLabelProvider(new GEViewLabelProvider());
+		// define the instance that will be the parent 
+		// passed to the getElements method
+		viewer.setInput(SimulationManager.getManager());
+		Object[] expectedContent = 
+	         new Object[] { };
+		
+		Object[] actualContent = contentProvider.getElements(viewer.getInput());
+		assertEquals(expectedContent,actualContent); 
+		
+   }
+
+   /**
+    * Process UI input but do not return for the 
+    * specified time interval.
+    * 
+    * @param waitTimeMillis the number of milliseconds 
+    */
+   private void delay(long waitTimeMillis) {
+      Display display = Display.getCurrent();
+      
+      // If this is the UI thread, 
+      // then process input.
+      if (display != null) {
+         long endTimeMillis = 
+            System.currentTimeMillis() + waitTimeMillis;
+         while (System.currentTimeMillis() < endTimeMillis)
+         {
+            if (!display.readAndDispatch())
+               display.sleep();
+         }
+         display.update();
+      }
+      
+      // Otherwise, perform a simple sleep.
+      else {
+         try {
+            Thread.sleep(waitTimeMillis);
+         }
+         catch (InterruptedException e) {
+            // Ignored.
+         }
+      }
+   }
+
+   /**
+    * Wait until all background tasks are complete.
+    */
+   public void waitForJobs() {
+      while (Job.getJobManager().currentJob() != null)
+         delay(10*1000);
+   }
+
+   /**
+    * Assert that the two arrays are equal.
+    * Throw an AssertionException if they are not.
+    * 
+    * @param expected first array
+    * @param actual second array
+    */
+   private void assertEquals(Object[] expected, Object[] actual) {
+      if (expected == null) {
+         if (actual == null)
+            return;
+         throw new AssertionFailedError(
+            "expected is null, but actual is not");  //$NON-NLS-1$  
+      }
+      
+      //else {
+         if (actual == null)
+            throw new AssertionFailedError(
+               "actual is null, but expected is not");//$NON-NLS-1$ 
+      //}
+      assertEquals(
+         "expected.length "//$NON-NLS-1$ 
+            + expected.length
+            + ", but actual.length "//$NON-NLS-1$ 
+            + actual.length,
+         expected.length,
+         actual.length);
+      for (int i = 0; i < actual.length; i++)
+         assertEquals(
+            "expected[" + i + //$NON-NLS-1$ 
+               "] is not equal to actual[" + //$NON-NLS-1$ 
+               i + "]",//$NON-NLS-1$ 
+            expected[i],
+            actual[i]);
+   }
+}  // GEViewTest
diff --git a/org.eclipse.stem.tests.ui/.classpath b/org.eclipse.stem.tests.ui/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.ui/.project b/org.eclipse.stem.tests.ui/.project
new file mode 100644
index 0000000..8daaa14
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3b3f76f
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,57 @@
+#Mon Jan 21 12:49:37 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..6d7ec87
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Sep 12 12:54:47 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.tests.ui/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d57cdda
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.ui
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.tests.ui.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.stem.tests.util,
+ org.eclipse.stem.tests.core,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.definitions,
+ org.eclipse.stem.geography
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.tests.ui/build.properties b/org.eclipse.stem.tests.ui/build.properties
new file mode 100644
index 0000000..d30f0ee
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               notice.html,\
+               epl-v10.html,\
+               plugin.properties
diff --git a/org.eclipse.stem.tests.ui/epl-v10.html b/org.eclipse.stem.tests.ui/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.ui/notice.html b/org.eclipse.stem.tests.ui/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.ui/plugin.properties b/org.eclipse.stem.tests.ui/plugin.properties
new file mode 100644
index 0000000..c18ac51
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Core UI Test Suite
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.tests.ui/src/org/eclipse/stem/tests/ui/Activator.java b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/tests/ui/Activator.java
new file mode 100644
index 0000000..a6ef8a1
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/tests/ui/Activator.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.tests.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */ 
+	public static final String PLUGIN_ID = "org.eclipse.stem.tests.ui";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+} // Activator
diff --git a/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/UtilityTest.java b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/UtilityTest.java
new file mode 100644
index 0000000..a2e0a4f
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/UtilityTest.java
@@ -0,0 +1,55 @@
+// UtilityTest.java
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * This class is a JUnit test case for {@link Utility}.
+ */
+public class UtilityTest extends TestCase {
+
+	@SuppressWarnings("unused")
+	private static final URI ARUBA_AREA_0_URI = URI
+			.createURI("stem://org.eclipse.stem/label/area/ABW/0/ABW");
+
+	private static final URI POPULATION_URI = URI
+			.createURI("stem://org.eclipse.stem/label/population/AFG/2/human/2006/AF-BDS-G010001");
+
+	/**
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*",
+				new XMIResourceFactoryImpl());
+		Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap().put(
+				"platform", new XMIResourceFactoryImpl());
+	} // setUp
+
+	/**
+	 * Test method for
+	 * {@link org.eclipse.stem.ui.Utility#getLabel(org.eclipse.emf.common.util.URI)}
+	 */
+	public void testGetLabel() {
+		final Label areaLabel = Utility.getLabel(POPULATION_URI);
+		assertNotNull(areaLabel);
+		assertTrue(true);
+	} // testGetLabel
+
+} // UtilityTest
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonTest.java b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonTest.java
new file mode 100644
index 0000000..abd25ae
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonTest.java
@@ -0,0 +1,99 @@
+package org.eclipse.stem.ui.views.map;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.ui.views.geographic.map.StemPolygon;
+
+/**
+ * This class is a TestCase for the StemPolygon class.
+ * 
+ */
+public class StemPolygonTest extends TestCase {
+
+	protected StemPolygon fixture = null;
+
+	protected double THRESHOLD = 0.000001;
+
+//	/**
+//	 * the default ForeGround Color Key
+//	 */
+//	private static final String DEFAULT_COLOR_KEY = VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_DEFAULT_STRING;
+
+	/**
+	 * Constructs a test case with the given name.
+	 * 
+	 * @param name
+	 */
+	public StemPolygonTest(final String name) {
+		super(name);
+	}
+
+	/**
+	 * Creates an StemPolygon object.
+	 * 
+	 * @return StemPolygon
+	 */
+	public StemPolygon createFixture() {
+		final StemPolygon poly = new StemPolygon();
+		return poly;
+	}
+
+	/**
+	 * Sets the object created to be the one held by the class.
+	 * 
+	 * @param fixture
+	 */
+	protected void setFixture(final StemPolygon fixture) {
+		this.fixture = fixture;
+	}
+
+	@SuppressWarnings("unused")
+	private StemPolygon getFixture() {
+		return fixture;
+	}
+
+	@Override
+	protected void setUp() throws Exception {
+		TestUtil.resetCounters();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * Checks that the polygon created is empty.
+	 * 
+	 */
+	public void testStemPolygon() {
+		final StemPolygon poly = createFixture();
+		assertTrue(poly.getNumberOfPoints() == 0);
+	}
+
+//	/**
+//	 * Tests the retrieval if a relative value of a polygon.
+//	 * 
+//	 */
+//	public void testGetRelativeValue() {
+//		final StemPolygon poly = createFixture();
+//
+//		poly.setRelativeValue(DEFAULT_COLOR_KEY, 0.5);
+//
+//		final Map<String, Double> relativeValueMap = poly.getRelativeValueMap();
+//
+//		final double retVal = relativeValueMap.get(DEFAULT_COLOR_KEY)
+//				.doubleValue();
+//
+//		assertTrue(Math.abs(retVal - 0.5) < THRESHOLD);
+//	}
+
+}
diff --git a/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonsListTest.java b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonsListTest.java
new file mode 100644
index 0000000..23e8312
--- /dev/null
+++ b/org.eclipse.stem.tests.ui/src/org/eclipse/stem/ui/views/map/StemPolygonsListTest.java
@@ -0,0 +1,79 @@
+package org.eclipse.stem.ui.views.map;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import junit.framework.TestCase;
+
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.ui.views.geographic.map.StemPolygonsList;
+
+/**
+ * This class is a TestCase for the StemPolygonsList class.
+ * 
+ */
+public class StemPolygonsListTest extends TestCase {
+
+	protected StemPolygonsList fixture = null;
+
+	protected double THRESHOLD = 0.000001;
+
+	/**
+	 * Constructs a test case with the given name.
+	 * 
+	 * @param name
+	 */
+	public StemPolygonsListTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Creates an StemPolygonsList object.
+	 * 
+	 * @return StemPolygonsList
+	 */
+	public StemPolygonsList createFixture() {
+		final StemPolygonsList polyList = new StemPolygonsList();
+		return polyList;
+	}
+
+	/**
+	 * Sets the test object to be the one held by the class.
+	 * 
+	 * @param fixture
+	 */
+	protected void setFixture(StemPolygonsList fixture) {
+		this.fixture = fixture;
+	}
+
+	@SuppressWarnings("unused")
+	private StemPolygonsList getFixture() {
+		return fixture;
+	}
+
+	@Override
+	protected void setUp() throws Exception {
+		TestUtil.resetCounters();
+		setFixture(createFixture());
+	}
+
+	/**
+	 * Checks that the created polygons list is empty.
+	 * 
+	 */
+	public void testStemPolygonsList() {
+
+		final StemPolygonsList polyList = createFixture();
+		assertTrue(polyList.isEmpty());
+
+	}
+
+} // StemPolygonsListTest
diff --git a/org.eclipse.stem.tests.util/.classpath b/org.eclipse.stem.tests.util/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.tests.util/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.tests.util/.project b/org.eclipse.stem.tests.util/.project
new file mode 100644
index 0000000..2aa9085
--- /dev/null
+++ b/org.eclipse.stem.tests.util/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.tests.util</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.tests.util/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.tests.util/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8e334eb
--- /dev/null
+++ b/org.eclipse.stem.tests.util/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:50:24 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.tests.util/META-INF/MANIFEST.MF b/org.eclipse.stem.tests.util/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8dd6ac4
--- /dev/null
+++ b/org.eclipse.stem.tests.util/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.tests.util; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.tests.util,
+ org.eclipse.stem.tests.util.decorators,
+ org.eclipse.stem.tests.util.decorators.impl,
+ org.eclipse.stem.tests.util.decorators.presentation,
+ org.eclipse.stem.tests.util.decorators.provider,
+ org.eclipse.stem.tests.util.decorators.util,
+ org.eclipse.stem.tests.util.labels,
+ org.eclipse.stem.tests.util.labels.impl,
+ org.eclipse.stem.tests.util.labels.presentation,
+ org.eclipse.stem.tests.util.labels.provider,
+ org.eclipse.stem.tests.util.labels.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.stem.definitions
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.eclipse.emf.ecore.provider
diff --git a/org.eclipse.stem.tests.util/build.properties b/org.eclipse.stem.tests.util/build.properties
new file mode 100644
index 0000000..07051e6
--- /dev/null
+++ b/org.eclipse.stem.tests.util/build.properties
@@ -0,0 +1,16 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               notice.html,\
+               epl-v10.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.tests.util/epl-v10.html b/org.eclipse.stem.tests.util/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.tests.util/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/icons/full/ctool16/CreateDynamicLabel_nextValue_TestIntegerLabelValue.gif b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateDynamicLabel_nextValue_TestIntegerLabelValue.gif
new file mode 100644
index 0000000..b729998
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateDynamicLabel_nextValue_TestIntegerLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
new file mode 100644
index 0000000..2f2f535
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateIdentifiable_dublinCore_DublinCore.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/ctool16/CreateLabel_currentValue_TestIntegerLabelValue.gif b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateLabel_currentValue_TestIntegerLabelValue.gif
new file mode 100644
index 0000000..b729998
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/ctool16/CreateLabel_currentValue_TestIntegerLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/DecoratorsModelFile.gif b/org.eclipse.stem.tests.util/icons/full/obj16/DecoratorsModelFile.gif
new file mode 100644
index 0000000..bf17865
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/DecoratorsModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/LabelsModelFile.gif b/org.eclipse.stem.tests.util/icons/full/obj16/LabelsModelFile.gif
new file mode 100644
index 0000000..b251792
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/LabelsModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicEdgeLabel.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicEdgeLabel.gif
new file mode 100644
index 0000000..53500da
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicEdgeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicLabel1.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicLabel1.gif
new file mode 100644
index 0000000..ea58a65
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicLabel1.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicNodeLabel.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicNodeLabel.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestDynamicNodeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestEdgeDecorator1.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestEdgeDecorator1.gif
new file mode 100644
index 0000000..5a9bc75
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestEdgeDecorator1.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestGraphDecorator1.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestGraphDecorator1.gif
new file mode 100644
index 0000000..d3dc5a9
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestGraphDecorator1.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestIntegerLabelValue.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestIntegerLabelValue.gif
new file mode 100644
index 0000000..cb1755a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestIntegerLabelValue.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestLabel.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestLabel.gif
new file mode 100644
index 0000000..30f0c48
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestNodeDecorator1.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestNodeDecorator1.gif
new file mode 100644
index 0000000..134551b
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestNodeDecorator1.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestScenarioGraphDecorator1.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestScenarioGraphDecorator1.gif
new file mode 100644
index 0000000..e4bc22d
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestScenarioGraphDecorator1.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticEdgeLabel.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticEdgeLabel.gif
new file mode 100644
index 0000000..53500da
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticEdgeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticNodeLabel.gif b/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticNodeLabel.gif
new file mode 100644
index 0000000..739ebbf
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/obj16/TestStaticNodeLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/wizban/NewDecorators.gif b/org.eclipse.stem.tests.util/icons/full/wizban/NewDecorators.gif
new file mode 100644
index 0000000..03168bd
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/wizban/NewDecorators.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/icons/full/wizban/NewLabels.gif b/org.eclipse.stem.tests.util/icons/full/wizban/NewLabels.gif
new file mode 100644
index 0000000..97fd1e1
--- /dev/null
+++ b/org.eclipse.stem.tests.util/icons/full/wizban/NewLabels.gif
Binary files differ
diff --git a/org.eclipse.stem.tests.util/model/decorators.ecore b/org.eclipse.stem.tests.util/model/decorators.ecore
new file mode 100644
index 0000000..9d9b98a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/model/decorators.ecore
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="decorators"
+    nsURI="http:///org/eclipse/stem/tests/util/decorators.ecore" nsPrefix="org.eclipse.stem.tests.util.decorators">
+  <eClassifiers xsi:type="ecore:EClass" name="TestEdgeDecorator1" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//EdgeDecorator">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeAURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeBURI" eType="#//URI"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="edgeURI" eType="#//URI"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestGraphDecorator1" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//GraphDecorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TestNodeDecorator1" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//NodeDecorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TestScenarioGraphDecorator1" eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//GraphDecorator">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="doubleValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="intValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sTEMTimeValue" eType="ecore:EClass ../../org.eclipse.stem.core/model/model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="booleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EdgeDecorator" instanceClassName="org.eclipse.stem.core.model.EdgeDecorator"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphDecorator" instanceClassName="org.eclipse.stem.core.model.GraphDecorator"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NodeDecorator" instanceClassName="org.eclipse.stem.core.model.NodeDecorator"
+      abstract="true" interface="true"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="URI" instanceClassName="org.eclipse.emf.common.util.URI"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.tests.util/model/labels.ecore b/org.eclipse.stem.tests.util/model/labels.ecore
new file mode 100644
index 0000000..8ca6510
--- /dev/null
+++ b/org.eclipse.stem.tests.util/model/labels.ecore
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="labels"
+    nsURI="http:///org/eclipse/stem/tests/util/labels.ecore" nsPrefix="org.eclipse.stem.tests.util.labels">
+  <eClassifiers xsi:type="ecore:EClass" name="TestDynamicEdgeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicEdgeLabel">
+    <eOperations name="increment"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestDynamicLabel1" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicLabel">
+    <eOperations name="increment"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestDynamicNodeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//DynamicNodeLabel">
+    <eOperations name="increment"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestIntegerLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eOperations name="increment"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="i" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TestLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Label"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TestStaticEdgeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//StaticEdgeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TestStaticNodeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//StaticNodeLabel"/>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.tests.util/model/testutility.genmodel b/org.eclipse.stem.tests.util/model/testutility.genmodel
new file mode 100644
index 0000000..6a4f556
--- /dev/null
+++ b/org.eclipse.stem.tests.util/model/testutility.genmodel
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.tests.util/src"
+    editDirectory="/org.eclipse.stem.tests.util/src" editorDirectory="/org.eclipse.stem.tests.util/src"
+    modelPluginID="org.eclipse.stem.tests.util" modelName="Testutility" nonNLSMarkers="true"
+    testsDirectory="" testSuiteClass="" importerID="org.eclipse.emf.importer.java"
+    complianceLevel="5.0" copyrightFields="false" usedGenPackages="../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Decorators" basePackage="org.eclipse.stem.tests.util" disposableProviderFactory="true"
+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="decorators.ecore#/">
+    <genDataTypes ecoreDataType="decorators.ecore#//URI"/>
+    <genClasses ecoreClass="decorators.ecore#//TestEdgeDecorator1">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestEdgeDecorator1/nodeAURI"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestEdgeDecorator1/nodeBURI"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestEdgeDecorator1/edgeURI"/>
+    </genClasses>
+    <genClasses ecoreClass="decorators.ecore#//TestGraphDecorator1"/>
+    <genClasses ecoreClass="decorators.ecore#//TestNodeDecorator1"/>
+    <genClasses ecoreClass="decorators.ecore#//TestScenarioGraphDecorator1">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestScenarioGraphDecorator1/doubleValue"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestScenarioGraphDecorator1/intValue"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestScenarioGraphDecorator1/stringValue"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference decorators.ecore#//TestScenarioGraphDecorator1/sTEMTimeValue"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute decorators.ecore#//TestScenarioGraphDecorator1/booleanValue"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="decorators.ecore#//EdgeDecorator"/>
+    <genClasses image="false" ecoreClass="decorators.ecore#//GraphDecorator"/>
+    <genClasses image="false" ecoreClass="decorators.ecore#//NodeDecorator"/>
+  </genPackages>
+  <genPackages prefix="Labels" basePackage="org.eclipse.stem.tests.util" disposableProviderFactory="true"
+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="labels.ecore#/">
+    <genClasses ecoreClass="labels.ecore#//TestDynamicEdgeLabel">
+      <genOperations ecoreOperation="labels.ecore#//TestDynamicEdgeLabel/increment"/>
+    </genClasses>
+    <genClasses ecoreClass="labels.ecore#//TestDynamicLabel1">
+      <genOperations ecoreOperation="labels.ecore#//TestDynamicLabel1/increment"/>
+    </genClasses>
+    <genClasses ecoreClass="labels.ecore#//TestDynamicNodeLabel">
+      <genOperations ecoreOperation="labels.ecore#//TestDynamicNodeLabel/increment"/>
+    </genClasses>
+    <genClasses ecoreClass="labels.ecore#//TestIntegerLabelValue">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute labels.ecore#//TestIntegerLabelValue/i"/>
+      <genOperations ecoreOperation="labels.ecore#//TestIntegerLabelValue/increment"/>
+    </genClasses>
+    <genClasses ecoreClass="labels.ecore#//TestLabel"/>
+    <genClasses ecoreClass="labels.ecore#//TestStaticEdgeLabel"/>
+    <genClasses ecoreClass="labels.ecore#//TestStaticNodeLabel"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.tests.util/notice.html b/org.eclipse.stem.tests.util/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.tests.util/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.tests.util/plugin.properties b/org.eclipse.stem.tests.util/plugin.properties
new file mode 100644
index 0000000..726d341
--- /dev/null
+++ b/org.eclipse.stem.tests.util/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.tests.util/plugin.xml b/org.eclipse.stem.tests.util/plugin.xml
new file mode 100644
index 0000000..944b326
--- /dev/null
+++ b/org.eclipse.stem.tests.util/plugin.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+    <factory 
+       uri = "http:///org/eclipse/stem/tests/util/decorators.ecore" 
+       class = "org.eclipse.stem.tests.util.decorators.provider.DecoratorsItemProviderAdapterFactory"
+       supportedTypes = 
+         "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+          org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+          org.eclipse.emf.edit.provider.ITreeItemContentProvider
+          org.eclipse.emf.edit.provider.IItemLabelProvider
+          org.eclipse.emf.edit.provider.IItemPropertySource" />
+  </extension>
+  
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri = "http:///org/eclipse/stem/tests/util/decorators.ecore"
+       class = "org.eclipse.stem.tests.util.decorators.DecoratorsPackage"
+       genModel = "model/testutility.genmodel" /> 
+  </extension>
+
+
+  <extension
+    point = "org.eclipse.ui.newWizards">
+    <category
+      id = "org.eclipse.emf.ecore.Wizard.category.ID"
+      name="%_UI_Wizard_category">
+    </category>
+    <wizard
+      id = "org.eclipse.stem.tests.util.decorators.presentation.DecoratorsModelWizardID"
+      name = "%_UI_DecoratorsModelWizard_label"
+      class = "org.eclipse.stem.tests.util.decorators.presentation.DecoratorsModelWizard"
+      category = "org.eclipse.emf.ecore.Wizard.category.ID"
+      icon = "icons/full/obj16/DecoratorsModelFile.gif">
+      <description>%_UI_DecoratorsModelWizard_description</description>
+      <selection class = "org.eclipse.core.resources.IResource" />
+    </wizard>
+  </extension>
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.tests.util.decorators.presentation.DecoratorsEditorID"
+        name = "%_UI_DecoratorsEditor_label"
+        icon = "icons/full/obj16/DecoratorsModelFile.gif"
+        extensions = "decorators"
+        class = "org.eclipse.stem.tests.util.decorators.presentation.DecoratorsEditor" 
+        contributorClass="org.eclipse.stem.tests.util.decorators.presentation.DecoratorsActionBarContributor" >
+    </editor>
+  </extension>    
+</plugin>
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/Activator.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/Activator.java
new file mode 100644
index 0000000..db22411
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/Activator.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.tests.util";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+} // Activator
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryDirectoryUtilities.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryDirectoryUtilities.java
new file mode 100644
index 0000000..7ac2565
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryDirectoryUtilities.java
@@ -0,0 +1,231 @@
+// CountryDirectoryUtilities.java
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * This class contains utility methods for extracting information such as
+ * ISO30166-1 alpha3 codes from directories and their names that contain
+ * property files defining graphs representing countries.
+ */
+public class CountryDirectoryUtilities {
+
+	final static String COUNTRY_DIR_PATH = CountryGraphCreator.RESOURCES_DIR
+			+ File.separator + CountryGraphCreator.DATA_DIR + File.separator
+			+ CountryGraphCreator.COUNTRY_DIR;
+
+	/**
+	 * @param countryCode
+	 * @return the name of the country
+	 */
+	public static String getCountryName(CountryCode countryCode) {
+		String retValue = "";
+
+		final String countryPath = COUNTRY_DIR_PATH + File.separator
+				+ countryCode + File.separator + countryCode
+				+ "_names.properties";
+
+		File countryNamesFile = new File(countryPath);
+		if (countryNamesFile.isFile() && countryNamesFile.canRead()) {
+			Properties countryNameData = new Properties();
+			FileInputStream countryNamesInputStream = null;
+			try {
+				countryNamesInputStream = new FileInputStream(countryNamesFile);
+				countryNameData.load(countryNamesInputStream);
+				retValue = countryNameData.getProperty(countryCode.toString());
+				countryNamesInputStream.close();
+			} catch (FileNotFoundException e) {
+				System.err.println(e.getMessage());
+			} catch (IOException e) {
+				System.err.println(e.getMessage());
+			}
+
+		} else {
+			// System.err.println("Trouble reading \"" + countryNamesFile +
+			// "\"");
+		}
+		return retValue;
+
+	} // getCountryName
+
+	/**
+	 * This method examines a directory consisting of subdirectories named with
+	 * IS03166-1 alpha3 codes and extracts the codes.
+	 * 
+	 * @return a list of the all of the IS03166-1 alpha3 country codes
+	 */
+	public static List<CountryCode> getAllCountryCodes() {
+		final List<CountryCode> retValue = new ArrayList<CountryCode>();
+		for (File countryDirectory : getCountryDirectories()) {
+			retValue.add(getCountryCode(countryDirectory));
+		}
+		return retValue;
+	} // getAllCountryCodes
+
+	/**
+	 * @param countryDirectory
+	 *            directory for a specific country that contains data that
+	 *            defines the geograph and features of that country.
+	 * @return the three letter code the identifies the country
+	 */
+	private static CountryCode getCountryCode(final File countryDirectory) {
+		CountryCode retValue = null;
+		try {
+			retValue = new CountryCode(countryDirectory.getCanonicalFile()
+					.getName());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return retValue;
+	} // getCountryCode
+
+	/**
+	 * @return a list of the directories that contain the country data
+	 */
+	public static List<File> getCountryDirectories() {
+		List<File> retValue = new ArrayList<File>();
+
+		final File countryDirectory = new File(COUNTRY_DIR_PATH);
+
+		if (countryDirectory.isDirectory()) {
+			final File[] countries = countryDirectory
+					.listFiles(new FileFilter() {
+						public boolean accept(File pathname) {
+							// Skip over the subversion directory
+							return !pathname.getName().endsWith(".svn");
+						}
+					});
+
+			for (int i = 0; i < countries.length; i++) {
+				retValue.add(countries[i]);
+			}
+		} else {
+			System.err.println("\"" + COUNTRY_DIR_PATH
+					+ "\" is not a directory");
+		}
+		return retValue;
+
+	} // getCountryDirectories
+
+	/**
+	 * 
+	 * @param countryCode
+	 *            the country
+	 * @param dataType
+	 *            the type of files to return
+	 * @return a list of the files for the specified country that contain data
+	 *         specified by the data type.
+	 */
+	public static List<File> getDataFiles(CountryCode countryCode,
+			String dataType) {
+		final List<File> retValue = new ArrayList<File>();
+
+		final File countryDirectory = new File(COUNTRY_DIR_PATH
+				+ File.separator + countryCode);
+
+		if (countryDirectory.isDirectory()) {
+			final String suffix = dataType + ".properties";
+			final File[] countries = countryDirectory
+					.listFiles(new FileFilter() {
+						public boolean accept(File pathname) {
+							return pathname.getName().endsWith(suffix);
+						}
+					});
+
+			for (int i = 0; i < countries.length; i++) {
+				retValue.add(countries[i]);
+			}
+		} else {
+			System.err.println("\"" + COUNTRY_DIR_PATH
+					+ "\" is not a directory");
+		}
+		return retValue;
+
+	} // getDataFiles
+
+	/**
+	 * This class represents an ISO-3166-alpha3 country code
+	 */
+	public static class CountryCode implements Comparable<CountryCode> {
+		private String code = null;
+
+		/**
+		 * @param code
+		 */
+		public CountryCode(String code) {
+			this.code = code;
+		}
+
+		/**
+		 * @return the code
+		 */
+		public final String getCode() {
+			return code;
+		}
+
+		/**
+		 * @see java.lang.Object#hashCode()
+		 */
+		@Override
+		public int hashCode() {
+			return code.hashCode();
+		}
+
+		/**
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			final CountryCode other = (CountryCode) obj;
+			if (code == null) {
+				if (other.code != null)
+					return false;
+			} else if (!code.equals(other.code))
+				return false;
+			return true;
+		}
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			return code;
+		}
+
+		/**
+		 * @param o
+		 * @return the value of string compareTo
+		 * @see java.lang.Comparable#compareTo(java.lang.Object)
+		 */
+		public int compareTo(CountryCode o) {
+			return this.code.compareTo(o.code);
+		}
+
+	} // CountryCode
+
+} // CountryDirectoryUtilities
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryGraphCreator.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryGraphCreator.java
new file mode 100644
index 0000000..d7da8ce
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryGraphCreator.java
@@ -0,0 +1,1943 @@
+// CountryGraphCreator.java
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.definitions.adapters.spatial.SpatialProviderAdapter;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.LabelsFactory;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.impl.AreaLabelImpl;
+import org.eclipse.stem.definitions.labels.impl.PopulationLabelImpl;
+import org.eclipse.stem.definitions.nodes.NodesFactory;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;
+import org.eclipse.stem.tests.util.CountryDirectoryUtilities.CountryCode;
+
+/**
+ * This class generates the plugged in Graph files for STEM from the basic
+ * properties files.
+ */
+public class CountryGraphCreator {
+
+	/**
+	 * The directory in the plugin that is the root of all resources (i.e.
+	 * files, data, etc.)
+	 */
+	public static final String RESOURCES_DIR = "resources";
+
+	/**
+	 * This is the name of the root directory containing data for the
+	 * definitions of graphs.
+	 */
+	public static final String DATA_DIR = "data";
+
+	/**
+	 * The name of the directory under {@link #DATA_DIR} that contains "country"
+	 * sub-directories named by their ISO30166-1 alpha3 codes. The country
+	 * directories contain the property files that define the details for each
+	 * country.
+	 */
+	public static final String COUNTRY_DIR = "country";
+
+	/**
+	 * The root directory for generated files.
+	 */
+	public static final String ROOT_OUTPUT_DIR = "temp";
+
+	/**
+	 * This is the name of the directory under the {@link #ROOT_OUTPUT_DIR} that
+	 * contains the directories that contain the graphs that define the
+	 * geographies and features of countries.
+	 */
+	public static final String GRAPH_OUTPUT_DIR = "graphs";
+
+	/**
+	 * This is the path to the country graphs directory
+	 */
+	public static final String COUNTRY_GRAPH_PATH = ROOT_OUTPUT_DIR
+			+ File.separator + GRAPH_OUTPUT_DIR + File.separator + COUNTRY_DIR;
+
+	/**
+	 * The name of the STEM category
+	 */
+	public static final String STEM = "STEM";
+
+	/**
+	 * 
+	 */
+	public static final String GEOGRAPHY = "Geography";
+
+	/**
+	 * 
+	 */
+	public static final String POLITICAL = "Political";
+
+	/**
+	 * 
+	 */
+	public static final String COUNTRIES = "Countries";
+
+	/**
+	 * 
+	 */
+	public static final String LEVEL = "Level";
+
+	private static final String ID_GEOGRAPHY_PLUGIN = "org.eclipse.stem."
+			+ GEOGRAPHY.toLowerCase();
+
+	/**
+	 * This is the prefix of the platform URI for geography graphs and models
+	 */
+	public static final String GEOGRAPHY_FILE_URI_PREFIX = "platform:/plugin/"
+			+ ID_GEOGRAPHY_PLUGIN + "/resources/data";
+
+	/**
+	 * This is the format string for the identifier of a country graph or model
+	 * file
+	 */
+	public static final String IDENTIFIER_FORMAT = "{0}/" + COUNTRY_DIR
+			+ "/{1}/{2}.{3}";
+
+	/**
+	 * This is the id of the top-level STEM category for graphs
+	 */
+	private static final String ID_STEM_GRAPH_CATEGORY = Constants.ID_ROOT
+			+ ".core.graph";
+
+	/**
+	 * This is the id of the extension point extended by graphs that are plugged
+	 * into STEM
+	 */
+	// private static final String ID_GRAPH_EXTENSION_POINT = Constants.ID_ROOT
+	// + ".core.graph";
+	/**
+	 * This is the id of the extension point extended by graphs with geographic
+	 * information that are plugged into STEM
+	 */
+	private static final String ID_GRAPH_GEOGRAPHY_CATEGORY = ID_STEM_GRAPH_CATEGORY
+			+ "." + GEOGRAPHY.toLowerCase();
+
+	/**
+	 * This is the id of the extension point extended by graphs with geographic
+	 * political information that are plugged into STEM
+	 */
+	private static final String ID_GRAPH_POLITICAL_CATEGORY = ID_GRAPH_GEOGRAPHY_CATEGORY
+			+ "." + POLITICAL.toLowerCase();
+
+	/**
+	 * This is the id of the extension point extended by graphs with geographic
+	 * political information that are plugged into STEM
+	 */
+	private static final String ID_GRAPH_COUNTRIES_CATEGORY = ID_GRAPH_POLITICAL_CATEGORY
+			+ "." + COUNTRIES.toLowerCase();
+
+	/**
+	 * The name of the file that the generated extension points are written to
+	 */
+	public static final String GRAPH_EXTENSION_POINT_FILE_NAME = "extension.xml";
+
+	/**
+	 * The name of the file that the generated properties are written to
+	 */
+	public static final String GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME = "plugin.properties";
+
+	/**
+	 * This is the opening xml element for a graph extension point in a
+	 * plugin.xml file
+	 */
+	public static final String XML_EXTENSION_POINT_OPEN = "<extension point=\"{0}\">";
+
+	/**
+	 * This is the closing xml element for a graph extension point in a
+	 * plugin.xml file
+	 */
+	public static final String XML_EXTENSION_POINT_CLOSE = "</extension>";
+
+	/**
+	 * This is the opening xml element for a category in a plugin.xml file
+	 */
+	public static final String XML_CATEGORY_ELEMENT_OPEN = "<category id=\"{0}\" name=\"{1}\" parent_id=\"{2}\"/>";
+
+	/**
+	 * This is the opening xml element for a category in a plugin.xml file
+	 */
+	private static final String XML_DUBLIN_CORE_ELEMENT_OPEN = "<dublin_core category_id=\"{0}\" ";
+
+	private static final String NLS_DELIMITER = "_";
+
+	/**
+	 * This is the format of the generated NLS keys for categories
+	 */
+	private static final String NLS_CATEGORY_KEY_FORMAT = "_UI_{0}_graph_category";
+
+	private static final String NLS_DC_FEATURE_KEY_FORMAT = "_UI"
+			+ NLS_DELIMITER + "{0}" + NLS_DELIMITER + "{1}" + NLS_DELIMITER
+			+ "{2}" + NLS_DELIMITER + "{3}" + NLS_DELIMITER + "{4}";
+
+	private static final EList dcFeatures = CommonPackage.Literals.DUBLIN_CORE
+			.getEStructuralFeatures();
+
+	/**
+	 * @param args
+	 */
+	public static void main(final String[] args) {
+
+		// Now create the graphs
+		final List<CountryCode> countryCodes = CountryDirectoryUtilities
+				.getAllCountryCodes();
+		Collections.sort(countryCodes);
+
+		final CountryGraphCreator cgc = new CountryGraphCreator();
+
+		final Map<CountryCode, List<GraphRecord>> nodeGraphs = cgc
+				.createGraphRecords(GEOGRAPHY_FILE_URI_PREFIX, countryCodes,
+						DataType.node);
+
+		final Map<CountryCode, List<GraphRecord>> populationGraphs = cgc
+				.createGraphRecords(GEOGRAPHY_FILE_URI_PREFIX, countryCodes,
+						DataType.population);
+
+		final Map<CountryCode, List<GraphRecord>> areaGraphs = cgc
+				.createGraphRecords(GEOGRAPHY_FILE_URI_PREFIX, countryCodes,
+						DataType.area);
+		try {
+			cgc.serializeCountryGraphs(nodeGraphs, COUNTRY_GRAPH_PATH);
+
+			cgc.serializeCountryGraphs(populationGraphs, COUNTRY_GRAPH_PATH);
+
+			cgc.serializeCountryGraphs(areaGraphs, COUNTRY_GRAPH_PATH);
+
+			final List<Map<CountryCode, List<GraphRecord>>> graphRecords = new ArrayList<Map<CountryCode, List<GraphRecord>>>();
+			graphRecords.add(nodeGraphs);
+			graphRecords.add(populationGraphs);
+			graphRecords.add(areaGraphs);
+
+			int maxAdminLevel = 0;
+			maxAdminLevel = Math.max(maxAdminLevel,
+					getMaxAdminLevel(nodeGraphs));
+			maxAdminLevel = Math.max(maxAdminLevel,
+					getMaxAdminLevel(populationGraphs));
+			maxAdminLevel = Math.max(maxAdminLevel,
+					getMaxAdminLevel(areaGraphs));
+
+			final File graphExtensionFile = new File(COUNTRY_GRAPH_PATH
+					+ GRAPH_EXTENSION_POINT_FILE_NAME);
+			final File graphPluginPropertiesFile = new File(COUNTRY_GRAPH_PATH
+					+ GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME);
+
+			final BufferedWriter graphOut = new BufferedWriter(new FileWriter(
+					graphExtensionFile));
+
+			final BufferedWriter pluginOut = new BufferedWriter(new FileWriter(
+					graphPluginPropertiesFile));
+
+			// Create a snippet of xml that can be included in a plugin.xml file
+			// to plug into STEM the graphs we just serialized.
+			cgc.generateGraphExtensionPointXML(graphRecords, countryCodes,
+					maxAdminLevel, graphOut, pluginOut);
+		} // try
+		catch (final IOException e) {
+			e.printStackTrace();
+		}
+
+		/*
+		 * 
+		 * Map<String, List<Map<String, Graph>>> countryGraphs = new
+		 * HashMap<String, List<Map<String, Graph>>>(); List<String> graphTypes
+		 * = new ArrayList<String>();
+		 * 
+		 * final CountryGraphCreator cgc = new CountryGraphCreator();
+		 * 
+		 * final List<Map<String, Graph>> countryNodeGraph = cgc
+		 * .createCountryNodeGraphs(MIN_ADMIN_LEVEL, MAX_ADMIN_LEVEL,
+		 * GEOGRAPHY_FILE_URI_PREFIX + "/graphs", countryCodes); final
+		 * List<Map<String, GraphRecord>> countryAreaGraphRecord = cgc
+		 * .createCountryAreaGraphs(MIN_ADMIN_LEVEL, MAX_ADMIN_LEVEL,
+		 * GEOGRAPHY_FILE_URI_PREFIX + "/graphs", countryCodes);
+		 * 
+		 * final Map<String, List<Map<String, GraphRecord>>>
+		 * countryPopulationGraphs = cgc
+		 * .createCountryPopulationGraphs(MIN_ADMIN_LEVEL, MAX_ADMIN_LEVEL,
+		 * GEOGRAPHY_FILE_URI_PREFIX + "/graphs", countryCodes);
+		 * 
+		 * cgc.serializeCountryGraphs(countryNodeGraph, COUNTRY_GRAPH_PATH,
+		 * COUNTRY_NODE_GRAPH);
+		 * 
+		 * cgc.serializeCountryGraphs(countryAreaGraphRecord,
+		 * COUNTRY_GRAPH_PATH, COUNTRY_AREA_GRAPH);
+		 * 
+		 * for (String populationIdentifer : countryPopulationGraphs.keySet()) {
+		 * final List<Map<String, GraphRecord>> populationGraphRecord =
+		 * countryPopulationGraphs .get(populationIdentifer);
+		 * cgc.serializeCountryGraphs(populationGraphRecord, COUNTRY_GRAPH_PATH,
+		 * COUNTRY_POPULATION_GRAPH); } // for each population
+		 * 
+		 * countryGraphs.put(COUNTRY_NODE_GRAPH, countryNodeGraph);
+		 * graphTypes.add(COUNTRY_NODE_GRAPH);
+		 * 
+		 * countryGraphs.put(COUNTRY_AREA_GRAPH, countryAreaGraphRecord);
+		 * graphTypes.add(COUNTRY_AREA_GRAPH);
+		 * 
+		 * try { final File graphExtensionFile = new File(COUNTRY_GRAPH_PATH +
+		 * GRAPH_EXTENSION_POINT_FILE_NAME); final File
+		 * graphPluginPropertiesFile = new File(COUNTRY_GRAPH_PATH +
+		 * GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME);
+		 * 
+		 * final BufferedWriter graphOut = new BufferedWriter(new FileWriter(
+		 * graphExtensionFile));
+		 * 
+		 * final BufferedWriter pluginOut = new BufferedWriter(new FileWriter(
+		 * graphPluginPropertiesFile)); // Create a snippet of xml that can be
+		 * included in a plugin.xml file // to plug the graphs we just
+		 * serialized into STEM.
+		 * cgc.generateGraphExtensionPointXML(countryGraphs, graphTypes,
+		 * graphOut, pluginOut); } // try catch (IOException e) {
+		 * e.printStackTrace(); }
+		 */
+	} // main
+
+	/**
+	 * @param nodeGraphs *
+	 * @return the maximum administration level found
+	 */
+	public static int getMaxAdminLevel(
+			final Map<CountryCode, List<GraphRecord>> nodeGraphs) {
+		int maxAdminLevel = 0;
+		for (final List<GraphRecord> list : nodeGraphs.values()) {
+			maxAdminLevel = Math.max(maxAdminLevel, getMaxAdminLevel(list));
+		} // for
+		return maxAdminLevel;
+	} // getMaxAdminLevel
+
+	/**
+	 * @param graphRecords
+	 * @return the maximum administration level found
+	 */
+	public static int getMaxAdminLevel(final List<GraphRecord> graphRecords) {
+		int maxAdminLevel = 0;
+		for (final GraphRecord graphRecord : graphRecords) {
+			maxAdminLevel = Math
+					.max(maxAdminLevel, graphRecord.getAdminLevel());
+		}
+		return maxAdminLevel;
+	} // getMaxAdminLevel
+
+	/**
+	 * @param uriPathString
+	 *            the path to the root directory to serialize the graphs in
+	 * @param countryGraphs
+	 *            a map of lists of the graph records keyed by country code
+	 * @param graphDataType
+	 *            the type of data in the graphs contained in the graph records
+	 * @throws IOException
+	 */
+	private void serializeCountryGraphs(
+			final Map<CountryCode, List<GraphRecord>> graphs,
+			final String uriPathString) throws IOException {
+
+		for (final CountryCode countryCode : graphs.keySet()) {
+			for (final GraphRecord graphRecord : graphs.get(countryCode)) {
+				graphRecord.serialize(uriPathString);
+			} // for each graph record for each country
+		} // for each country code
+
+		// for (List<GraphRecord> records: graphs.values()) {
+		// Record.serializeRecords((List<Record>)records, uriPathString);
+		// }
+	} // serializeCountryGraphs
+
+	/**
+	 * @param countryNodeGraphs
+	 *            a list of maps of graphs of nodes for countries for each
+	 *            adminstration level
+	 * @param graphOut
+	 *            the output writer for the plugin.xml file contents
+	 * @param pluginOut
+	 *            the output writer for the plugin.properties file contents
+	 */
+	private void generateGraphExtensionPointXML(
+			final List<Map<CountryCode, List<GraphRecord>>> graphRecords,
+			final List<CountryCode> countryCodes, final int maxAdminLevel,
+			final Writer graphOut, final Writer pluginOut) {
+
+		// The dublin core instances of the graphs likely share common
+		// attributes, we can avoid duplicate entries in the files we generate
+		// by finding the duplicate entries and only generating a single key for
+		// the generated plugins file content.
+		final Map<String, String> dcValueKeyMap = new HashMap<String, String>();
+
+		// We also don't want to generate duplicate country categories
+		final Map<String, String> countryCategories = new HashMap<String, String>();
+
+		try {
+			graphOut.write("<!-- Generated content.  Do not modify -->\n");
+
+			graphOut.write(MessageFormat.format(XML_EXTENSION_POINT_OPEN,
+					new Object[] { Constants.ID_GRAPH_EXTENSION_POINT }));
+			graphOut.write("\n");
+
+			pluginOut
+					.write("#Graph NLS Keys.  Automatically generated, do not modify. "
+							+ Calendar.getInstance().getTime()
+							+ " "
+							+ System.getProperty("user.name") + "\n");
+
+			// Output the categories that make up the hierarchy for the graph
+			// plugins (all except for the country categories which we output
+			// below)
+			final String[] levelCategoryId = outputCategories(
+					maxAdminLevel + 1, graphOut, pluginOut);
+
+			for (final CountryCode countryCode : countryCodes) {
+				for (final Map<CountryCode, List<GraphRecord>> graphRecordMap : graphRecords) {
+					for (final GraphRecord graphRecord : graphRecordMap
+							.get(countryCode)) {
+						// 
+						outputGraphRecord(graphRecord, dcValueKeyMap,
+								countryCategories, levelCategoryId, graphOut,
+								pluginOut);
+					}
+				} // for each type of graph Record
+			} // for each country code
+
+			graphOut.write(XML_EXTENSION_POINT_CLOSE);
+			graphOut.close();
+			pluginOut.close();
+		} catch (final IOException e) {
+			e.printStackTrace();
+		}
+
+	}// generateGraphExtensionPointXML
+
+	/**
+	 * @param graphRecord
+	 * @param dcValueKeyMap
+	 * @param countryCategories
+	 * @param levelCategoryId
+	 * @param graphOut
+	 * @param pluginOut
+	 * @throws IOException
+	 */
+	private void outputGraphRecord(final GraphRecord graphRecord,
+			final Map<String, String> dcValueKeyMap,
+			final Map<String, String> countryCategories,
+			final String[] levelCategoryId, final Writer graphOut,
+			final Writer pluginOut) throws IOException {
+		// Make everything come out in alphabetical order
+
+		final String countryCodeString = graphRecord.getId().toLowerCase();
+		final String countryCategoryId = levelCategoryId[graphRecord
+				.getAdminLevel()]
+				+ "." + countryCodeString;
+
+		// Have we seen this country category id before?
+		if (countryCategories.get(countryCategoryId) == null) {
+			// No
+			// Create a category for the country
+			graphOut.write(MessageFormat.format(XML_CATEGORY_ELEMENT_OPEN,
+					new Object[] { countryCategoryId, graphRecord.getId(),
+							levelCategoryId[graphRecord.getAdminLevel()] }));
+			graphOut.write("\n");
+			// ...and remember we did so we don't do it again
+			countryCategories.put(countryCategoryId, countryCategoryId);
+		} // if we haven't seen this category id before
+
+		// pluginOut.write("# Dublin Core for "
+		// + graphRecord.getCountryCode().toString() + "\n");
+		// // We don't NLS the ISO30166 alpha-3 codes
+
+		outputDublinCore(graphRecord, countryCategoryId, dcValueKeyMap,
+				graphOut, pluginOut);
+
+	} // outputGraphRecord
+
+	/**
+	 * @param record
+	 * @param countryCategoryId
+	 * @param dcValueKeyMap
+	 * @param graphOut
+	 * @param pluginOut
+	 * @throws IOException
+	 * 
+	 */
+	public static void outputDublinCore(final Record record,
+			final String countryCategoryId,
+			final Map<String, String> dcValueKeyMap, final Writer graphOut,
+			final Writer pluginOut) throws IOException {
+
+		final DublinCore dc = record.getDublinCore();
+		final StringBuilder sb = new StringBuilder(MessageFormat.format(
+				XML_DUBLIN_CORE_ELEMENT_OPEN,
+				new Object[] { countryCategoryId }));
+
+		for (final Iterator featuresIter = dcFeatures.iterator(); featuresIter
+				.hasNext();) {
+			final EStructuralFeature dcFeature = (EStructuralFeature) featuresIter
+					.next();
+			// Is it set?
+			if (dc.eIsSet(dcFeature)) {
+				// Yes
+				final String featureValue = (String) dc.eGet(dcFeature);
+				sb.append(dcFeature.getName());
+				sb.append("=\"");
+				// Should the dublin core attribute be NLS's or not?
+				if (isDublinCoreNLSFeature(dcFeature)) {
+					// Yes
+					// Have we output this feature value before?
+					String dcFeatureKey = dcValueKeyMap.get(featureValue);
+					if (dcFeatureKey == null) {
+						// No
+						dcFeatureKey = MessageFormat
+								.format(
+										NLS_DC_FEATURE_KEY_FORMAT,
+										new Object[] {
+												record.getId(),
+												record
+														.getAdminLevelsAsString(NLS_DELIMITER),
+												record.getType(),
+												record.getOutputType(),
+												dcFeature.getName() });
+						// Now we have
+						dcValueKeyMap.put(featureValue, dcFeatureKey);
+
+						sb.append("%");
+						sb.append(dcFeatureKey);
+						// Write the key and value out to the plugins file
+						pluginOut.write(dcFeatureKey + " = " + featureValue
+								+ "\n");
+					} // if not output this value before
+					else {
+						// Yes
+						// So we just use the key again because it's already in
+						// properties file
+						sb.append(dcFeatureKey);
+					}
+				} else {
+					// No
+					// No NLS, just use the value inline in the Dublin Core
+					// element
+					sb.append(featureValue);
+				}
+				sb.append("\" ");
+			} // if feature set
+		} // for features
+
+		sb.append("/>\n");
+		final String result = sb.toString();
+
+		graphOut.write(result);
+		graphOut.write("\n");
+	} // outputDublinCore
+
+	/**
+	 * @param dcFeature
+	 *            a {@link DublinCore} feature
+	 * @return true if the feature should be NLS's
+	 */
+	private static boolean isDublinCoreNLSFeature(
+			final EStructuralFeature dcFeature) {
+		boolean retValue = false;
+
+		switch (dcFeature.getFeatureID()) {
+		case CommonPackage.DUBLIN_CORE__CONTRIBUTOR:
+		case CommonPackage.DUBLIN_CORE__COVERAGE:
+		case CommonPackage.DUBLIN_CORE__CREATOR:
+		case CommonPackage.DUBLIN_CORE__DESCRIPTION:
+		case CommonPackage.DUBLIN_CORE__LICENSE:
+		case CommonPackage.DUBLIN_CORE__PUBLISHER:
+		case CommonPackage.DUBLIN_CORE__RELATION:
+		case CommonPackage.DUBLIN_CORE__REQUIRED:
+		case CommonPackage.DUBLIN_CORE__RIGHTS:
+			// case CommonPackage.DUBLIN_CORE__SOURCE:
+		case CommonPackage.DUBLIN_CORE__SUBJECT:
+		case CommonPackage.DUBLIN_CORE__TITLE:
+
+			retValue = true;
+
+			break;
+
+		default:
+			retValue = false;
+			break;
+		} // switch
+		return retValue;
+	} // isDublinCoreNLSFeature
+
+	/**
+	 * @param numLevels
+	 *            the number of administration levels to generate categories for
+	 * @param graphOut
+	 *            the output writer for the plugin.xml file contents
+	 * @param pluginOut
+	 *            the output writer for the plugin.properties file contents
+	 * @return an array indexed by administration level of the category ideas of
+	 *         the different administration levels
+	 * @throws IOException
+	 *             if there is a problem writing to the output writers
+	 */
+	private String[] outputCategories(final int numLevels,
+			final Writer graphOut, final Writer pluginOut) throws IOException {
+		// The categories
+		// STEM
+		outputCategory(ID_STEM_GRAPH_CATEGORY, STEM, "/",
+				NLS_CATEGORY_KEY_FORMAT, graphOut, pluginOut);
+
+		// Geography
+		outputCategory(ID_GRAPH_GEOGRAPHY_CATEGORY, GEOGRAPHY,
+				ID_STEM_GRAPH_CATEGORY, NLS_CATEGORY_KEY_FORMAT, graphOut,
+				pluginOut);
+
+		// Political
+		outputCategory(ID_GRAPH_POLITICAL_CATEGORY, POLITICAL,
+				ID_GRAPH_GEOGRAPHY_CATEGORY, NLS_CATEGORY_KEY_FORMAT, graphOut,
+				pluginOut);
+
+		// Country
+		outputCategory(ID_GRAPH_COUNTRIES_CATEGORY, COUNTRIES,
+				ID_GRAPH_POLITICAL_CATEGORY, NLS_CATEGORY_KEY_FORMAT, graphOut,
+				pluginOut);
+
+		final String[] levelCategoryId = new String[numLevels];
+
+		// Level
+		for (int adminLevel = 0; adminLevel < numLevels; adminLevel++) {
+			// Level category
+			levelCategoryId[adminLevel] = ID_GRAPH_COUNTRIES_CATEGORY + "."
+					+ LEVEL.toLowerCase() + adminLevel;
+
+			outputCategory(levelCategoryId[adminLevel], LEVEL + adminLevel,
+					ID_GRAPH_COUNTRIES_CATEGORY, NLS_CATEGORY_KEY_FORMAT,
+					graphOut, pluginOut);
+		} // for adminLevel
+
+		graphOut.write("\n");
+		pluginOut.write("\n");
+		return levelCategoryId;
+	} // outputcategories
+
+	/**
+	 * @param extensionPointId
+	 * @param categoryId
+	 * @param parentCategoryId
+	 * @param nlsKeyFormat
+	 * @param graphOut
+	 * @param pluginOut
+	 * @throws IOException
+	 */
+	public static void outputCategory(final String extensionPointId,
+			final String categoryId, final String parentCategoryId,
+			final String nlsKeyFormat, final Writer graphOut,
+			final Writer pluginOut) throws IOException {
+		final String nlsKey = createCategoryNLSKey(categoryId, nlsKeyFormat);
+		graphOut.write(MessageFormat
+				.format(XML_CATEGORY_ELEMENT_OPEN, new Object[] {
+						extensionPointId, "%" + nlsKey, parentCategoryId }));
+		graphOut.write("\n");
+
+		// Hack alert!
+		// For "levels", the categoryId looks like this "Level0", we want it to
+		// look like this "Level 0" when we put it in the plugin.properites file
+		// because this is what people will see in the application
+		final String temp = categoryId.startsWith(LEVEL) ? LEVEL + " "
+				+ categoryId.substring(LEVEL.length()) : categoryId;
+
+		pluginOut.write(nlsKey + " = " + temp + "\n");
+	} // outputCategory
+
+	/**
+	 * @param key
+	 * @param nlsKeyFormat
+	 * @return a NLS key for categories in the plugin.properites file
+	 */
+	public static String createCategoryNLSKey(final String key,
+			final String nlsKeyFormat) {
+		return MessageFormat.format(nlsKeyFormat, new Object[] { key });
+	} // createCategoryNLSKey
+
+	/**
+	 * Process all of the data that defines the graph of the population labels
+	 * for countries and create graphs of just population labels for a specified
+	 * range of administration levels.
+	 * 
+	 * @param countryCodes
+	 *            the ISO3166-1 alpha-3 codes of the countries to generate
+	 *            graphs for
+	 * @param dataType
+	 *            the type of graph to creates
+	 * @return stuff
+	 */
+	public Map<CountryCode, List<GraphRecord>> createGraphRecords(
+			final List<CountryCode> countryCodes, final DataType dataType) {
+		return createGraphRecords(GEOGRAPHY_FILE_URI_PREFIX, countryCodes,
+				dataType);
+	} // createGraphRecords
+
+	/**
+	 * Process all of the data that defines the graph of the population labels
+	 * for countries and create graphs of just population labels for a specified
+	 * range of administration levels.
+	 * 
+	 * @param dataFileURIPrefix
+	 *            the URI prefix for the country graphs being created
+	 * @param countryCodes
+	 *            the ISO3166-1 alpha-3 codes of the countries to generate
+	 *            graphs for
+	 */
+	private Map<CountryCode, List<GraphRecord>> createGraphRecords(
+			final String dataFileURIPrefix,
+			final List<CountryCode> countryCodes, final DataType dataType) {
+		final Map<CountryCode, List<GraphRecord>> retValue = new HashMap<CountryCode, List<GraphRecord>>();
+
+		// Iterate through each country
+		for (final CountryCode countryCode : countryCodes) {
+			// Get all of the data files for the country
+			final List<File> dataFiles = CountryDirectoryUtilities
+					.getDataFiles(countryCode, dataType.toString());
+			for (final File file : dataFiles) {
+				// Get the graph record for the file
+				final GraphRecord graphRecord = RecordFactory.INSTANCE
+						.createGraphRecord(dataType, countryCode,
+								dataFileURIPrefix, file);
+
+				// Did we have trouble creating the graph?
+				if (graphRecord.getGraph() != null) {
+					// No
+
+					// Have we processed this country code before?
+					List<GraphRecord> countryList = retValue.get(countryCode);
+					if (countryList == null) {
+						// No
+						countryList = new ArrayList<GraphRecord>();
+						retValue.put(countryCode, countryList);
+					}
+					countryList.add(graphRecord);
+				} // if no problem creating the graph
+			} // for file
+		} // for each country code
+		return retValue;
+	} // createGraphRecords
+
+	/**
+	 * This class represents all of the different types of data files that can
+	 * be defined for a country
+	 */
+	public enum DataType {
+		/**
+		 * 
+		 */
+		node,
+		/**
+		 * 
+		 */
+		area,
+		/**
+		 * 
+		 */
+		population;
+
+	} // DataType
+
+	/**
+	 */
+	protected static class CountryData {
+		// Nothing
+	} // CountryData
+
+	/**
+	 * This class contains the data that defines node in a country graph.
+	 */
+	private static class NodeData extends CountryData {
+		/**
+		 * The name of the node.
+		 */
+		String name = null;
+
+		/**
+		 * The identifier for the node.
+		 */
+		String identifier = null;
+
+		/**
+		 * @param name
+		 *            name of the node.
+		 * @param identifier
+		 *            identifier for the node.
+		 */
+		public NodeData(final String identifier, final String name) {
+			this.name = name;
+			this.identifier = identifier;
+
+		} // NodeData
+
+		/**
+		 * @return the code
+		 */
+		public final String getIdentifier() {
+			return identifier;
+		}
+
+		/**
+		 * @param identifier
+		 *            the identifier to set
+		 */
+		public final void setIdentifier(final String identifier) {
+			this.identifier = identifier;
+		}
+
+		/**
+		 * @return the name
+		 */
+		public final String getName() {
+			return name;
+		}
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder(name);
+			sb.append(" (");
+			sb.append(identifier);
+			return sb.toString();
+		}
+
+	} // NodeData
+
+	/**
+	 * This class represents the area in square kilometers for a specific node
+	 * in a specific adminstration level
+	 */
+	private static class AreaData extends CountryData {
+
+		// ISO-3166-1, ISO-3166-2, or ISO-3166-2 alpha's
+		// The identifier of the node
+		String identifier = "";
+
+		// Square Km's
+		String area = "";
+
+		/**
+		 * @param identifier
+		 *            The identifier of the node
+		 * @param area
+		 *            the area of the node in square kilometers
+		 */
+		public AreaData(final String identifier, final String area) {
+			this.identifier = identifier;
+			this.area = area;
+		} // AreaData
+
+		/**
+		 * @return the area of the node in square kilometers
+		 */
+		public final String getArea() {
+			return area;
+		}
+
+		/**
+		 * @return the identifier of the node
+		 */
+		public final String getIdentifier() {
+			return identifier;
+		}
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			return identifier + " = " + area;
+		} // toString
+
+	} // AreaData
+
+	/**
+	 * This class represents the number of population members of a particular
+	 * type who occupy a specific node. It also, includes an optional
+	 * specification of the area that the population lives in. This is intended
+	 * to provide better population density values when a population lives in a
+	 * small area (e.g., a city) compared to the total area of the node.
+	 */
+	private static class PopulationData extends CountryData {
+
+		// ISO-3166-1, ISO-3166-2, or ?
+		String nodeCode = "";
+
+		// Individuals
+		String count = "";
+
+		// Optional area occupied by population
+		String area = null;
+
+		/**
+		 * @param nodeCode
+		 *            the unique identifier of the node
+		 * @param dataString
+		 *            the string that contains the population count and optional
+		 *            area extent
+		 */
+		public PopulationData(final String nodeCode, final String dataString) {
+			super();
+
+			this.nodeCode = nodeCode;
+
+			// The data string contains the population count and an optional
+			// specifiation of the area in square kilometers that the population
+			// is distributed over. The optional area specification is used to
+			// facillitate more accurate computation of the population density
+			// for cases where the area of a region being labeled by the
+			// population is much larger than the area where most of the
+			// population exists. For instance, the case of a single city in an
+			// otherwise large unoccupied region. The format of the string is
+			// either a single integer for the population count, or an integer
+			// followed by a comma followed by an double for the area. e.g.
+			// "123" or "123, 45.6"
+
+			final StringTokenizer st = new StringTokenizer(dataString, ", ");
+			count = st.nextToken();
+			area = st.hasMoreTokens() ? st.nextToken() : null;
+		} // PopulationData
+
+		/**
+		 * @return the count
+		 */
+		public final String getCount() {
+			return count;
+		}
+
+		/**
+		 * @return the nodeCode
+		 */
+		public final String getNodeCode() {
+			return nodeCode;
+		}
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder(nodeCode);
+			sb.append(" (");
+			sb.append(count);
+			sb.append(area != null ? "/" + area + "km^2" : "");
+			sb.append(")");
+			return sb.toString();
+		} // toString
+
+	} // PopulationData
+
+	/**
+	 * This class is a factory for GraphRecords
+	 */
+	public static class RecordFactory {
+		/**
+		 * The singleton instance of the factory
+		 */
+		public static final RecordFactory INSTANCE = new RecordFactory();
+
+		/**
+		 * @param dataType
+		 * @param countryCode
+		 * @param dataFileURIPrefix
+		 * @param file
+		 * @return the graph record extracted from the data file
+		 */
+		public GraphRecord createGraphRecord(final DataType dataType,
+				final CountryCode countryCode, final String dataFileURIPrefix,
+				final File file) {
+			GraphRecord retValue = null;
+
+			switch (dataType) {
+			case node:
+				retValue = new NodeGraphRecord();
+				break;
+			case area:
+				retValue = new AreaGraphRecord();
+				break;
+			case population:
+				retValue = new PopulationGraphRecord();
+				break;
+
+			default:
+				throw new UnsupportedOperationException(dataType.toString()
+						+ " not a recognized data type");
+			} // switch
+
+			retValue.initialize(countryCode, dataFileURIPrefix, file);
+			return retValue;
+		} // createGraphRecord
+
+	} // RecordFactory
+
+	/**
+	 * This class contains metadata for a graph, model or scenario
+	 */
+	abstract public static class Record {
+
+		protected static final URIConverter converter = new URIConverterImpl();
+
+		/**
+		 * This is an identifier for the graph/model/scenario being created.
+		 * e.g., CountryCode
+		 */
+		protected String id = "";
+
+		protected Identifiable identifiable = null;
+
+		protected List<Integer> adminLevels = new ArrayList<Integer>();
+
+		/**
+		 * The maximum administration level in the graph/model
+		 */
+		protected int maxAdminLevel = -1;
+
+		/**
+		 * Default Constructor
+		 */
+		public Record() {
+			// nothing
+		} // Record
+
+		/**
+		 * @param identifiable
+		 *            the identifiable (graph/model/scenario) that the metadata
+		 *            describes
+		 * @param id
+		 *            a short identifier of the identifiable (e.g., country
+		 *            code)
+		 * @param adminLevel
+		 *            the administration level of the contents of the
+		 *            identifiable
+		 */
+		public Record(final Identifiable identifiable, final String id,
+				final int adminLevel) {
+			this(identifiable, id, Collections.singletonList(Integer
+					.valueOf(adminLevel)));
+		} // Record
+
+		/**
+		 * @param identifiable
+		 *            the identifiable (graph/model/scenario) that the metadata
+		 *            describes
+		 * @param id
+		 *            a short identifier of the identifiable (e.g., country
+		 *            code)
+		 * @param adminLevels
+		 *            the administration levels of the contents of the
+		 *            identifiable
+		 */
+		public Record(final Identifiable identifiable, final String id,
+				final List<Integer> adminLevels) {
+			this.identifiable = identifiable;
+			this.id = id;
+			addAdminLevels(adminLevels);
+		} // Record
+
+		/**
+		 * @return the dublin core instance of the contained Identifiable
+		 */
+		public DublinCore getDublinCore() {
+			return identifiable.getDublinCore();
+		} // getDublinCore
+
+		/**
+		 * @return e.g., "graph", "model", "scenario"
+		 */
+		abstract public String getOutputType();
+
+		/**
+		 * @return the id
+		 */
+		public final String getId() {
+			return id;
+		} // getId
+
+		/**
+		 * @param adminLevel
+		 *            the administration level to add to the record
+		 */
+		public void addAdminLevel(final int adminLevel) {
+			addAdminLevel(Integer.valueOf(adminLevel));
+		} // addAdminLevel
+
+		/**
+		 * @param adminLevel
+		 *            the administration level to add to the record
+		 */
+		public void addAdminLevel(final Integer adminLevel) {
+			// Is the admin level already in our collection?
+			if (!adminLevels.contains(adminLevel)) {
+				// No
+				adminLevels.add(adminLevel);
+				maxAdminLevel = Math.max(maxAdminLevel, adminLevel.intValue());
+				Collections.sort(adminLevels);
+			}
+		} // addAdminLevel
+
+		/**
+		 * Add a list of administration levels to the colleciton of
+		 * administration levels
+		 * 
+		 * @param adminLevels
+		 *            a list of administration levels
+		 */
+		public void addAdminLevels(final List<Integer> adminLevels) {
+			for (final Integer adminLevel : adminLevels) {
+				addAdminLevel(adminLevel);
+			}
+		} // addAdminLevels
+
+		/**
+		 * @return the administration levels
+		 */
+		public final List<Integer> getAdminLevels() {
+			return adminLevels;
+		} // getAdminLevels
+
+		/**
+		 * @return the number of administration levels represented in the
+		 *         identifiable.
+		 */
+		public int getNumAdminLevels() {
+			return adminLevels.size();
+		} // getNumAdminLevels
+
+		/**
+		 * @return the maximum administration level in teh data
+		 */
+		public final int getMaxAdminLevel() {
+			return maxAdminLevel;
+		}
+
+		/**
+		 * Serialize a list of records.
+		 * 
+		 * @param records
+		 *            a list of Records to be serialized
+		 * @param uriPathString
+		 *            the path to the root directory to serialize the graphs in
+		 * @throws IOException
+		 */
+		public static void serializeRecords(final List<Record> records,
+				final String uriPathString) throws IOException {
+			for (final Record record : records) {
+				record.serialize(uriPathString);
+			} // for each graph record for each country
+		} // serializeRecords
+
+		/**
+		 * @param uriPathString
+		 *            the path to the root serialization directory
+		 * @throws IOException
+		 */
+		public void serialize(final String uriPathString) throws IOException {
+			Utility.serializeIdentifiable(identifiable, converter.normalize(URI
+					.createFileURI(uriPathString + File.separator + id
+							+ File.separator + getSerializationFileName())));
+		} // serialize
+
+		/**
+		 * @param delmiter
+		 *            the string to place between the administration level
+		 *            integers
+		 * @return the administration level integers concatenated together with
+		 *         a "_" as a delimiter
+		 */
+		public Object getAdminLevelsAsString(final String delmiter) {
+			final StringBuilder sb = new StringBuilder();
+			for (int i = 0; i < adminLevels.size(); i++) {
+				// Is this the first one?
+				if (i != 0) {
+					// No
+					sb.append(delmiter);
+				}
+				sb.append(adminLevels.get(i));
+			}
+			return sb.toString();
+		} // getAdminLevelsAsString
+
+		/**
+		 * @return a string that specifies the type of Record (e.g., "node",
+		 *         "model")
+		 */
+		abstract public String getType();
+
+		/**
+		 * @return the serialization file name
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getSerializationFileName()
+		 */
+		public String getSerializationFileName() {
+			final StringBuilder sb = new StringBuilder(getId());
+			sb.append("_");
+			sb.append(getAdminLevelsAsString("_"));
+			sb.append(".");
+			sb.append(getOutputType());
+			return sb.toString();
+		} // getSerializationFileName
+	} // Record
+
+	/**
+	 * This class represents
+	 */
+	abstract public static class GraphRecord extends Record {
+
+		/**
+		 * This is the property in a data file that specifies the date range
+		 * that the data is valid for.
+		 */
+		public static final String VALID_PROPERTY = "VALID";
+
+		/**
+		 * This is the property in a data file that specifies the administration
+		 * level the data applies to.
+		 */
+		public static final String ADMIN_LEVEL_PROPERTY = "ADMIN_LEVEL";
+
+		/**
+		 * This is the property in a data file that specifies the source of the
+		 * data.
+		 */
+		public static final String SOURCE_PROPERTY = "SOURCE";
+
+		protected Map<String, String> nonDataProperties = new HashMap<String, String>();
+
+		/**
+		 * The file name of the properties file (?)
+		 */
+		protected String fileName = null;
+
+		/**
+		 * The dublin core source of the data that created the graph
+		 */
+		protected String source = null;
+
+		protected int year = -1;
+
+		protected GraphRecord() {
+			// nothing
+		} // GraphRecord
+
+		/**
+		 * @param graph
+		 * @param adminLevel
+		 * @param year
+		 */
+		protected GraphRecord(final CountryCode countryCode,
+				final String fileName, final Graph graph, final String source,
+				final int adminLevel, final int year) {
+			super(graph, countryCode.toString(), adminLevel);
+			this.fileName = fileName;
+			this.source = source;
+			this.year = year;
+		} // GraphRecord
+
+		/**
+		 * @return the file name
+		 */
+		public final String getFileName() {
+			return fileName;
+		}
+
+		/**
+		 * @return the graph
+		 */
+		public final Graph getGraph() {
+			return (Graph) identifiable;
+		} // getGraph
+
+		/**
+		 * @return the year
+		 */
+		public final int getYear() {
+			return year;
+		}
+
+		protected void initialize(final CountryCode countryCode,
+				final String dataFileURIPrefix, final File dataFile) {
+
+			this.id = countryCode.toString();
+
+			fileName = dataFile.getName().substring(0,
+					dataFile.getName().indexOf(".properties"));
+
+			if (dataFile.isFile() && dataFile.canRead()) {
+				final Properties dataProperties = new Properties();
+				try {
+					final FileInputStream dataFileInputStream = new FileInputStream(
+							dataFile);
+					dataProperties.load(dataFileInputStream);
+
+					collectNonDataProperties(dataProperties);
+
+					// Are all of the required properties in the file?
+					if (allNonDataPropertiesCollected()) {
+						// Yes
+						setFieldsFromNonDataProperties();
+
+						final List<CountryData> dataSet = new ArrayList<CountryData>();
+
+						for (final Entry<Object, Object> entry : dataProperties
+								.entrySet()) {
+							final String dataPropertyKey = (String) entry
+									.getKey();
+
+							// Is this a data property?
+							if (isDataProperty(dataPropertyKey)) {
+								// Yes
+								final CountryData data = createData(
+										dataPropertyKey, ((String) entry
+												.getValue()).trim());
+								dataSet.add(data);
+							} // if data property
+
+						} // for
+						identifiable = createGraph(countryCode, dataSet);
+						identifiable.setURI(URI.createURI(MessageFormat.format(
+								IDENTIFIER_FORMAT, dataFileURIPrefix,
+								countryCode, fileName, "graph")));
+						identifiable.getDublinCore().setTitle(getFileName());
+						// identifiable.getDublinCore().setIdentifier(
+						// MessageFormat.format(IDENTIFIER_FORMAT,
+						// dataFileURIPrefix, countryCode,
+						// fileName, "graph"));
+
+					} // if all properties are present
+					else {
+						// No
+						System.err.println("The file \"" + dataFile.getName()
+								+ "\" is missing the following properites: "
+								+ getMissingNonDataProperties());
+					} // else
+					dataFileInputStream.close();
+				} catch (final FileNotFoundException e) {
+					System.err.println(e.getMessage());
+				} catch (final IOException e) {
+					System.err.println(e.getMessage());
+				}
+			} else {
+				System.err.println("Trouble reading \"" + dataFile + "\"");
+			}
+		}// initialize
+
+		/**
+		 * @param dataPropertyKey
+		 * @param dataProperty
+		 */
+		abstract protected CountryData createData(String dataPropertyKey,
+				String dataProperty);
+
+		/**
+		 * @param countryCode2
+		 * @param dataSet
+		 */
+		abstract protected Graph createGraph(CountryCode countryCode2,
+				List<CountryData> dataSet);
+
+		/**
+		 * @param dataProperties
+		 */
+		protected void collectNonDataProperties(final Properties dataProperties) {
+			// Get the source
+			final String source = dataProperties.getProperty(SOURCE_PROPERTY);
+			if (source != null) {
+				nonDataProperties.put(SOURCE_PROPERTY, source);
+			}
+
+			// Get the valid date range
+			final String valid = dataProperties.getProperty(VALID_PROPERTY);
+			if (valid != null) {
+				nonDataProperties.put(VALID_PROPERTY, valid);
+			}
+
+			// Get the admin level
+			final String adminLevel = dataProperties
+					.getProperty(ADMIN_LEVEL_PROPERTY);
+			if (adminLevel != null) {
+				nonDataProperties.put(ADMIN_LEVEL_PROPERTY, adminLevel);
+			}
+
+		} // collectNonDataProperties
+
+		/**
+		 * @return true if the property is a data property
+		 */
+		protected boolean isDataProperty(final String property) {
+			return !(property.equals(VALID_PROPERTY)
+					|| property.equals(ADMIN_LEVEL_PROPERTY) || property
+					.equals(SOURCE_PROPERTY));
+		} // isDataProperty
+
+		/**
+		 * @return true if all of the non-data properties have been collected
+		 */
+		protected boolean allNonDataPropertiesCollected() {
+			return nonDataProperties.get(SOURCE_PROPERTY) != null
+					&& nonDataProperties.get(ADMIN_LEVEL_PROPERTY) != null
+					&& nonDataProperties.get(VALID_PROPERTY) != null;
+		} // allDataPropertiesCollected
+
+		/**
+		 * @return a string with the names of the properties missing from the
+		 *         non data properties
+		 */
+		protected CharSequence getMissingNonDataProperties() {
+			final StringBuilder sb = new StringBuilder();
+
+			sb
+					.append(nonDataProperties.get(SOURCE_PROPERTY) == null ? (SOURCE_PROPERTY + " ")
+							: "");
+			sb
+					.append(nonDataProperties.get(ADMIN_LEVEL_PROPERTY) == null ? (ADMIN_LEVEL_PROPERTY + " ")
+							: "");
+			sb
+					.append(nonDataProperties.get(VALID_PROPERTY) == null ? (VALID_PROPERTY + " ")
+							: "");
+			return sb.toString();
+		} // getMissingNonDataProperties
+
+		/**
+		 * 
+		 */
+		protected void setFieldsFromNonDataProperties() {
+			source = nonDataProperties.get(SOURCE_PROPERTY);
+			addAdminLevel(Integer.parseInt(nonDataProperties
+					.get(ADMIN_LEVEL_PROPERTY)));
+			year = extractYear(nonDataProperties.get(VALID_PROPERTY));
+		} // setFieldsFromNonDataProperties
+
+		/**
+		 * @param validString
+		 * @return the year of the start date
+		 */
+		private int extractYear(final String validString) {
+			// String is of format start=2006-.... we want the 2006
+			return Integer.parseInt(validString.substring(6, 10));
+		} // extractYear
+
+		/**
+		 * @return the administration level of the graph
+		 */
+		public int getAdminLevel() {
+			assert adminLevels.size() == 1;
+			return adminLevels.get(0).intValue();
+		} // getAdminLevel
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getSerializationFileName()
+		 */
+		@Override
+		public String getSerializationFileName() {
+			final StringBuilder sb = new StringBuilder(fileName);
+			sb.append(".");
+			sb.append(getOutputType());
+			return sb.toString();
+		} // getSerializationFileName
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getType()
+		 */
+		@Override
+		public String getType() {
+			return getGraphType();
+		}
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getOutputType()
+		 */
+		@Override
+		public String getOutputType() {
+			return "graph";
+		}
+
+		/**
+		 * @return a string that is the name of the graph type
+		 */
+		public abstract String getGraphType();
+
+	} // GraphRecord
+
+	/**
+	 * This class bundles a graph of geographic nodes.
+	 */
+	private static class NodeGraphRecord extends GraphRecord {
+
+		/**
+		 * This is the property in a spatial (GML) data file that specifies the
+		 * file that contains the latitude/longitude data for the nodes.
+		 */
+		public static final String SPATIAL_PROPERTY = "SPATIAL_URI";
+
+		protected String spatialURI = null;
+
+		/**
+		 * 
+		 */
+		public NodeGraphRecord() {
+			super();
+		} // NodeGraphRecord
+
+		/**
+		 * @see org.eclipse.stem.utility.geography.graph.CountryGraphCreator2.GraphRecord#createData(java.lang.String,
+		 *      java.lang.String)
+		 */
+		@Override
+		protected CountryData createData(final String dataPropertyKey,
+				final String dataProperty) {
+			return new NodeData(dataPropertyKey, dataProperty);
+		} // createData
+
+		/**
+		 * @param dataProperties
+		 */
+		@Override
+		protected void collectNonDataProperties(final Properties dataProperties) {
+			super.collectNonDataProperties(dataProperties);
+
+			// Get the population level dates
+			spatialURI = dataProperties.getProperty(SPATIAL_PROPERTY);
+			if (spatialURI != null) {
+				nonDataProperties.put(SPATIAL_PROPERTY, spatialURI);
+			}
+		} // collectNonDataProperties
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.GraphRecord#isDataProperty(java.lang.String)
+		 */
+		@Override
+		protected boolean isDataProperty(final String property) {
+			return (!property.equals(SPATIAL_PROPERTY))
+					&& super.isDataProperty(property);
+		} // isDataProperty
+
+		@Override
+		protected boolean allNonDataPropertiesCollected() {
+			// return nonDataProperties.get(SPATIAL_PROPERTY) != null
+			// && super.allNonDataPropertiesCollected();
+			return super.allNonDataPropertiesCollected();
+		} // allDataPropertiesCollected
+
+		/**
+		 */
+		@Override
+		protected String getMissingNonDataProperties() {
+			final StringBuilder sb = new StringBuilder(super
+					.getMissingNonDataProperties());
+			sb
+					.append(nonDataProperties.get(SPATIAL_PROPERTY) == null ? (SPATIAL_PROPERTY + " ")
+							: "");
+			return sb.toString();
+		} // getMissingNonDataProperties
+
+		/**
+		 * @see org.eclipse.stem.utility.geography.graph.CountryGraphCreator2.GraphRecord#createGraph(org.eclipse.stem.data.geography.graph.CountryDirectoryUtilities.CountryCode,
+		 *      java.util.List)
+		 */
+		@Override
+		protected Graph createGraph(final CountryCode countryCode,
+				final List<CountryData> dataSet) {
+			Graph retValue = null;
+
+			// Was there any data for this country at this administration level?
+			if (dataSet.size() > 0) {
+				// Yes
+				final String adminLevel = nonDataProperties
+						.get(ADMIN_LEVEL_PROPERTY);
+
+				retValue = GraphFactory.eINSTANCE.createGraph();
+				final DublinCore dc = retValue.getDublinCore();
+				dc.populate();
+				dc.setTitle(CountryDirectoryUtilities
+						.getCountryName(countryCode)
+						+ " Nodes (Level "
+						+ adminLevel
+						+ ", "
+						+ nonDataProperties.get(VALID_PROPERTY)
+						+ ", "
+						+ dataSet.size()
+						+ (dataSet.size() == 1 ? " node)" : " nodes)"));
+				dc.setSource(nonDataProperties.get(SOURCE_PROPERTY));
+				dc.setValid(nonDataProperties.get(VALID_PROPERTY));
+
+				for (final CountryData nodeData : dataSet) {
+					retValue.putNode(createNode(Integer.parseInt(adminLevel),
+							countryCode, spatialURI, nodeData));
+				} // for each node data
+
+			} // if any data
+			return retValue;
+		} // createGraph
+
+		/**
+		 * @return a node that represents a geographic place within the context
+		 *         of a specified country at a specified administration level
+		 */
+		private static Node createNode(final int adminLevel,
+				final CountryCode countryCode, final String spatialFileURI,
+				final CountryData countryData) {
+			final NodeData nodeData = (NodeData) countryData;
+			final Region retValue = NodesFactory.eINSTANCE.createRegion();
+			retValue.setURI(RegionImpl.createRegionNodeURI(nodeData
+					.getIdentifier()));
+			retValue.getDublinCore().setTitle(
+					nodeData.getName() + " " + nodeData.getIdentifier());
+
+			final String dcSpatial = (spatialFileURI == null ? null
+					: SpatialProviderAdapter.STEM_SPATIAL_SCHEME_PREFIX
+							+ spatialFileURI + "#" + nodeData.getIdentifier());
+
+			retValue.getDublinCore().setSpatial(dcSpatial);
+
+			return retValue;
+		} // createNode
+
+		/**
+		 * @return "node"
+		 */
+		@Override
+		public String getGraphType() {
+			return "node";
+		} // getGraphType
+
+	} // NodeGraphRecord
+
+	/**
+	 * This class bundles a graph of area labels together with the details of
+	 * the labels.
+	 */
+	private static class AreaGraphRecord extends GraphRecord {
+
+		/**
+		 * 
+		 */
+		public AreaGraphRecord() {
+			super();
+		}
+
+		/**
+		 * @param countryCode
+		 * @param fileName
+		 * @param graph
+		 * @param source
+		 * @param adminLevel
+		 * @param year
+		 */
+		public AreaGraphRecord(final CountryCode countryCode,
+				final String fileName, final Graph graph, final String source,
+				final int adminLevel, final int year) {
+			super(countryCode, fileName, graph, source, adminLevel, year);
+		}
+
+		/**
+		 * @see org.eclipse.stem.utility.geography.graph.CountryGraphCreator2.GraphRecord#createData(java.lang.String,
+		 *      java.lang.String)
+		 */
+		@Override
+		protected CountryData createData(final String dataPropertyKey,
+				final String dataProperty) {
+			return new AreaData(dataPropertyKey, dataProperty);
+		} // createData
+
+		/**
+		 * @see org.eclipse.stem.utility.geography.graph.CountryGraphCreator2.GraphRecord#createGraph(org.eclipse.stem.data.geography.graph.CountryDirectoryUtilities.CountryCode,
+		 *      java.util.List)
+		 */
+		@Override
+		protected Graph createGraph(final CountryCode countryCode,
+				final List<CountryData> dataSet) {
+			Graph retValue = null;
+
+			// Was there any data for this country at this administration level?
+			if (dataSet.size() > 0) {
+				// Yes
+				final String adminLevel = nonDataProperties
+						.get(ADMIN_LEVEL_PROPERTY);
+
+				retValue = GraphFactory.eINSTANCE.createGraph();
+				final DublinCore dc = retValue.getDublinCore();
+				dc.populate();
+				dc.setTitle(CountryDirectoryUtilities
+						.getCountryName(countryCode)
+						+ " Area (Level "
+						+ adminLevel
+						+ ", "
+						+ nonDataProperties.get(VALID_PROPERTY)
+						+ ", "
+						+ dataSet.size()
+						+ (dataSet.size() == 1 ? " label)" : " labels)"));
+				dc.setSource(nonDataProperties.get(SOURCE_PROPERTY));
+				dc.setValid(nonDataProperties.get(VALID_PROPERTY));
+				for (final CountryData dataInstance : dataSet) {
+					retValue.putNodeLabel(createAreaLabel(Integer
+							.parseInt(adminLevel), countryCode, dataInstance));
+				} // for each node data
+
+			} // if any data
+			return retValue;
+		} // createGraph
+
+		/**
+		 * @param adminLevel
+		 *            the level of the country node the area label labels
+		 * @param countryCode
+		 *            the identifier of the country to which the labeled node
+		 *            belongs
+		 * @param areaData
+		 *            the area data
+		 * @return an Area label
+		 */
+		protected AreaLabel createAreaLabel(final int adminLevel,
+				final CountryCode countryCode, final CountryData countryData) {
+			final AreaData areaData = (AreaData) countryData;
+			final AreaLabel retValue = LabelsFactory.eINSTANCE
+					.createAreaLabel();
+			retValue.setURI(AreaLabelImpl.createAreaLabelURI(adminLevel,
+					countryCode.toString(), areaData.getIdentifier()));
+			retValue.setURIOfIdentifiableToBeLabeled(RegionImpl
+					.createRegionNodeURI(areaData.getIdentifier()));
+			retValue.getCurrentAreaValue().setArea(
+					Double.parseDouble(areaData.getArea()));
+
+			return retValue;
+		} // createAreaLabel
+
+		/**
+		 * @return "area"
+		 */
+		@Override
+		public String getGraphType() {
+			return "area";
+		} // getGraphType
+	} // AreaGraphRecord
+
+	/**
+	 * This class bundles a graph of population labels together with the details
+	 * of the labels. For instance, the year of the data, the administration
+	 * level and the population identifier.
+	 */
+	private static class PopulationGraphRecord extends GraphRecord {
+
+		/**
+		 * This is the property in a population data file that specifies the
+		 * population identifier.
+		 */
+		public static final String POPULATION_PROPERTY = "POPULATION";
+
+		private String populationIdentifier = null;
+
+		protected PopulationGraphRecord() {
+			super();
+		}
+
+		/**
+		 * @param populationGraph
+		 * @param adminLevel
+		 * @param year
+		 * @param populationIdentifier
+		 */
+		protected PopulationGraphRecord(final CountryCode countryCode,
+				final String fileName, final Graph populationGraph,
+				final String source, final int adminLevel, final int year,
+				final String populationIdentifier) {
+			super(countryCode, fileName, populationGraph, source, adminLevel,
+					year);
+			this.populationIdentifier = populationIdentifier;
+		}
+
+		/**
+		 * 
+		 */
+		@Override
+		protected void setFieldsFromNonDataProperties() {
+			super.setFieldsFromNonDataProperties();
+			populationIdentifier = nonDataProperties.get(POPULATION_PROPERTY);
+		} // setFieldsFromNonDataProperties
+
+		/**
+		 * @param countryCode
+		 * @param dataSet
+		 */
+		@Override
+		protected Graph createGraph(final CountryCode countryCode,
+				final List<CountryData> dataSet) {
+			Graph retValue = null;
+
+			// Was there any data for this country at this administration level?
+			if (dataSet.size() > 0) {
+				// Yes
+				final String adminLevel = nonDataProperties
+						.get(ADMIN_LEVEL_PROPERTY);
+
+				retValue = GraphFactory.eINSTANCE.createGraph();
+				final DublinCore dc = retValue.getDublinCore();
+				dc.populate();
+				dc.setTitle(CountryDirectoryUtilities
+						.getCountryName(countryCode)
+						+ " Population (Level "
+						+ adminLevel
+						+ ", "
+						+ nonDataProperties.get(POPULATION_PROPERTY)
+						+ ", "
+						+ nonDataProperties.get(VALID_PROPERTY)
+						+ ", "
+						+ dataSet.size()
+						+ (dataSet.size() == 1 ? " label)" : " labels)"));
+				dc.setSource(nonDataProperties.get(SOURCE_PROPERTY));
+				dc.setValid(nonDataProperties.get(VALID_PROPERTY));
+
+				for (final CountryData populationData : dataSet) {
+					retValue.putNodeLabel(createPopulationLabel(Integer
+							.parseInt(adminLevel), countryCode,
+							nonDataProperties.get(POPULATION_PROPERTY),
+							populationData));
+				} // for each node data
+
+			} // if any data
+			return retValue;
+		} // createGraph
+
+		/**
+		 * @param adminLevel
+		 *            the level of the country node the area label labels
+		 * @param countryCode
+		 *            the identifier of the country to which the labeled node
+		 *            belongs
+		 * @param populationIdentifier
+		 *            the identifier of the population
+		 * @param populationData
+		 *            the data to use to initialize the population label
+		 * @return a population label
+		 */
+		private static PopulationLabel createPopulationLabel(
+				final int adminLevel, final CountryCode countryCode,
+				final String populationIdentifier, final CountryData dataSet) {
+			final PopulationData populationData = (PopulationData) dataSet;
+			final PopulationLabel retValue = LabelsFactory.eINSTANCE
+					.createPopulationLabel();
+			retValue.setURI(PopulationLabelImpl.createPopulationLabelURI(
+					adminLevel, countryCode.toString(), populationIdentifier,
+					"2006", populationData.getNodeCode()));
+			retValue.setURIOfIdentifiableToBeLabeled(RegionImpl
+					.createRegionNodeURI(populationData.getNodeCode()));
+			retValue.setPopulationIdentifier(populationIdentifier);
+			retValue.getCurrentPopulationValue().setCount(
+					Long.parseLong(populationData.getCount()));
+
+			// Was an area specified for the population?
+			if (populationData.area != null) {
+				// Yes
+				retValue.setPopulatedArea(Double
+						.parseDouble(populationData.area));
+			}
+
+			return retValue;
+		} // createPopulationLabel
+
+		/**
+		 * @param dataPropertyKey
+		 * @param dataProperty
+		 */
+		@Override
+		protected CountryData createData(final String dataPropertyKey,
+				final String dataProperty) {
+			return new PopulationData(dataPropertyKey, dataProperty);
+		} // createData
+
+		/**
+		 * @param dataProperties
+		 */
+		@Override
+		protected void collectNonDataProperties(final Properties dataProperties) {
+			super.collectNonDataProperties(dataProperties);
+
+			// Get the population level dates
+			final String populationIdentifier = dataProperties
+					.getProperty(POPULATION_PROPERTY);
+			if (populationIdentifier != null) {
+				nonDataProperties
+						.put(POPULATION_PROPERTY, populationIdentifier);
+			}
+		} // collectNonDataProperties
+
+		protected final String getPopulationIdentifier() {
+			return populationIdentifier;
+		}
+
+		@Override
+		protected boolean isDataProperty(final String property) {
+			return (!property.equals(POPULATION_PROPERTY))
+					&& super.isDataProperty(property);
+		}
+
+		@Override
+		protected boolean allNonDataPropertiesCollected() {
+			return nonDataProperties.get(POPULATION_PROPERTY) != null
+					&& super.allNonDataPropertiesCollected();
+		} // allDataPropertiesCollected
+
+		/**
+		 */
+		@Override
+		protected String getMissingNonDataProperties() {
+			final StringBuilder sb = new StringBuilder(super
+					.getMissingNonDataProperties());
+
+			sb
+					.append(nonDataProperties.get(POPULATION_PROPERTY) == null ? (POPULATION_PROPERTY + " ")
+							: "");
+			return sb.toString();
+		} // getMissingNonDataProperties
+
+		/**
+		 * @return "population"
+		 */
+		@Override
+		public String getGraphType() {
+			return "population";
+		} // getGraphType
+	} // PopulationGraphRecord
+
+} // CountryGraphCreator2
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryModelCreator.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryModelCreator.java
new file mode 100644
index 0000000..0fda857
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/CountryModelCreator.java
@@ -0,0 +1,597 @@
+// CountryModelCreator.java
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.tests.util.CountryDirectoryUtilities.CountryCode;
+import org.eclipse.stem.tests.util.CountryGraphCreator.DataType;
+import org.eclipse.stem.tests.util.CountryGraphCreator.GraphRecord;
+import org.eclipse.stem.tests.util.CountryGraphCreator.Record;
+
+/**
+ * This class is used to auotmate the generation of models in STEM.
+ */
+public class CountryModelCreator {
+
+	/**
+	 * This is the name of the directory under the
+	 * {@link CountryGraphCreator#ROOT_OUTPUT_DIR} that contains the directories
+	 * that contain the models that define the geographies and features of
+	 * countries.
+	 */
+	public static final String MODEL_OUTPUT_DIR = "models";
+
+	/**
+	 * This is the path to the country models directory
+	 */
+	public static final String COUNTRY_MODEL_PATH = CountryGraphCreator.ROOT_OUTPUT_DIR
+			+ File.separator
+			+ MODEL_OUTPUT_DIR
+			+ File.separator
+			+ CountryGraphCreator.COUNTRY_DIR;
+
+	/**
+	 * This is the id of the extension point extended by graphs that are plugged
+	 * into STEM
+	 */
+	// public static final String ID_MODEL_EXTENSION_POINT = Constants.ID_ROOT
+	// + ".core.model";
+	/**
+	 * This is the id of the top-level STEM category for graphs
+	 */
+	public static final String ID_STEM_MODEL_CATEGORY = Constants.ID_ROOT
+			+ ".core.model";
+
+	/**
+	 * This is the id of the extension point extended by models with geographic
+	 * information that are plugged into STEM
+	 */
+	public static final String ID_MODEL_GEOGRAPHY_CATEGORY = ID_STEM_MODEL_CATEGORY
+			+ "." + CountryGraphCreator.GEOGRAPHY.toLowerCase();
+
+	/**
+	 * This is the id of the extension point extended by models with geographic
+	 * political information that are plugged into STEM
+	 */
+	public static final String ID_MODEL_POLITICAL_CATEGORY = ID_MODEL_GEOGRAPHY_CATEGORY
+			+ "." + CountryGraphCreator.POLITICAL.toLowerCase();
+
+	/**
+	 * This is the id of the extension point extended by models with geographic
+	 * political information that are plugged into STEM
+	 */
+	public static final String ID_MODEL_COUNTRIES_CATEGORY = ID_MODEL_POLITICAL_CATEGORY
+			+ "." + CountryGraphCreator.COUNTRIES.toLowerCase();
+
+	/**
+	 * This is the format of the generated NLS keys for categories
+	 */
+	public static final String NLS_CATEGORY_KEY_FORMAT = "_UI_{0}_model_category";
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// Now create the graphs
+		final List<CountryCode> countryCodes = CountryDirectoryUtilities
+				.getAllCountryCodes();
+		Collections.sort(countryCodes);
+
+		final CountryModelCreator cmc = new CountryModelCreator();
+		final Map<CountryCode, List<CountryModelRecord>> countryModels = cmc
+				.createCountryModels();
+		try {
+			cmc.serializeCountryModels(countryModels, COUNTRY_MODEL_PATH);
+
+			List<Map<CountryCode, List<CountryModelRecord>>> modelRecords = new ArrayList<Map<CountryCode, List<CountryModelRecord>>>();
+			modelRecords.add(countryModels);
+
+			int maxAdminLevel = 0;
+			maxAdminLevel = Math.max(maxAdminLevel,
+					getMaxAdminLevel(countryModels));
+
+			final File modelExtensionFile = new File(COUNTRY_MODEL_PATH
+					+ CountryGraphCreator.GRAPH_EXTENSION_POINT_FILE_NAME);
+			final File modelPluginPropertiesFile = new File(
+					COUNTRY_MODEL_PATH
+							+ CountryGraphCreator.GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME);
+
+			final BufferedWriter modelOut = new BufferedWriter(new FileWriter(
+					modelExtensionFile));
+
+			final BufferedWriter pluginOut = new BufferedWriter(new FileWriter(
+					modelPluginPropertiesFile));
+
+			// Create a snippet of xml that can be included in a plugin.xml file
+			// to plug into STEM the graphs we just serialized.
+			cmc.generateModelExtensionPointXML(modelRecords, countryCodes,
+					maxAdminLevel, modelOut, pluginOut);
+		} // try
+		catch (IOException e) {
+			e.printStackTrace();
+		}
+	} // main
+
+	/**
+	 * @param models
+	 *            a map between country code and list of model records for the
+	 *            country
+	 * @param uriPathString
+	 *            the path to the root of the folder to serialize the models to
+	 * @throws IOException
+	 */
+	private void serializeCountryModels(
+			final Map<CountryCode, List<CountryModelRecord>> models,
+			final String uriPathString) throws IOException {
+
+		for (CountryCode countryCode : models.keySet()) {
+			for (CountryModelRecord modelRecord : models.get(countryCode)) {
+				modelRecord.serialize(uriPathString);
+			} // for each model record for each country
+		} // for each country code
+
+		//		
+		// for (CountryCode countryCode : graphs.keySet()) {
+		// for (GraphRecord graphRecord : graphs.get(countryCode)) {
+		// graphRecord.serialize(uriPathString);
+		// } // for each graph record for each country
+		// } // for each country code
+
+	} // serializeCountryModels
+
+	/**
+	 * @param countryNodeGraphs
+	 *            a list of maps of models of nodes for countries for each
+	 *            adminstration level
+	 * @param modelOut
+	 *            the output writer for the plugin.xml file contents
+	 * @param pluginOut
+	 *            the output writer for the plugin.properties file contents
+	 */
+	private void generateModelExtensionPointXML(
+			final List<Map<CountryCode, List<CountryModelRecord>>> modelRecords,
+			List<CountryCode> countryCodes, final int maxAdminLevel,
+			final Writer modelOut, final Writer pluginOut) {
+
+		// The dublin core instances of the models likely share common
+		// attributes, we can avoid duplicate entries in the files we generate
+		// by finding the duplicate entries and only generating a single key for
+		// the generated plugins file content.
+		final Map<String, String> dcValueKeyMap = new HashMap<String, String>();
+
+		// We also don't want to generate duplicate country categories
+		final Map<String, String> countryCategories = new HashMap<String, String>();
+
+		try {
+			modelOut.write("<!-- Generated content.  Do not modify -->\n");
+
+			modelOut.write(MessageFormat.format(
+					CountryGraphCreator.XML_EXTENSION_POINT_OPEN,
+					new Object[] { Constants.ID_MODEL_EXTENSION_POINT }));
+			modelOut.write("\n");
+
+			pluginOut
+					.write("#Model NLS Keys.  Automatically generated, do not modify. "
+							+ Calendar.getInstance().getTime()
+							+ " "
+							+ System.getProperty("user.name") + "\n");
+
+			// Output the categories that make up the hierarchy for the graph
+			// plugins (all except for the country categories which we output
+			// below)
+			final String[] levelCategoryId = outputCategories(
+					maxAdminLevel + 1, modelOut, pluginOut);
+
+			for (CountryCode countryCode : countryCodes) {
+				for (Map<CountryCode, List<CountryModelRecord>> modelRecordMap : modelRecords) {
+					List<CountryModelRecord> foo = modelRecordMap
+							.get(countryCode);
+					// Anything in the list?
+					if (foo != null) {
+						// Yes
+						for (CountryModelRecord modelRecord : modelRecordMap
+								.get(countryCode)) {
+							outputModelRecord(modelRecord, dcValueKeyMap,
+									countryCategories, levelCategoryId,
+									modelOut, pluginOut);
+						}
+					}
+
+				} // for each type of graph Record
+			} // for each country code
+
+			modelOut.write(CountryGraphCreator.XML_EXTENSION_POINT_CLOSE);
+			modelOut.close();
+			pluginOut.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+	}// generateModelExtensionPointXML
+
+	/**
+	 * @param numLevels
+	 *            the number of administration levels to generate categories for
+	 * @param modelOut
+	 *            the output writer for the plugin.xml file contents
+	 * @param pluginOut
+	 *            the output writer for the plugin.properties file contents
+	 * @return an array indexed by administration level of the category ideas of
+	 *         the different administration levels
+	 * @throws IOException
+	 *             if there is a problem writing to the output writers
+	 */
+	private String[] outputCategories(final int numLevels,
+			final Writer modelOut, final Writer pluginOut) throws IOException {
+		// The categories
+		// STEM
+		CountryGraphCreator.outputCategory(ID_STEM_MODEL_CATEGORY,
+				CountryGraphCreator.STEM, "/", NLS_CATEGORY_KEY_FORMAT,
+				modelOut, pluginOut);
+
+		// Geography
+		CountryGraphCreator.outputCategory(ID_MODEL_GEOGRAPHY_CATEGORY,
+				CountryGraphCreator.GEOGRAPHY, ID_STEM_MODEL_CATEGORY,
+				NLS_CATEGORY_KEY_FORMAT, modelOut, pluginOut);
+
+		// Political
+		CountryGraphCreator.outputCategory(ID_MODEL_POLITICAL_CATEGORY,
+				CountryGraphCreator.POLITICAL, ID_MODEL_GEOGRAPHY_CATEGORY,
+				NLS_CATEGORY_KEY_FORMAT, modelOut, pluginOut);
+
+		// Country
+		CountryGraphCreator.outputCategory(ID_MODEL_COUNTRIES_CATEGORY,
+				CountryGraphCreator.COUNTRIES, ID_MODEL_POLITICAL_CATEGORY,
+				NLS_CATEGORY_KEY_FORMAT, modelOut, pluginOut);
+
+		final String[] levelCategoryId = new String[numLevels];
+
+		// Level
+		for (int adminLevel = 0; adminLevel < numLevels; adminLevel++) {
+			// Level category
+			levelCategoryId[adminLevel] = ID_MODEL_COUNTRIES_CATEGORY + "."
+					+ CountryGraphCreator.LEVEL.toLowerCase() + adminLevel;
+
+			CountryGraphCreator.outputCategory(levelCategoryId[adminLevel],
+					CountryGraphCreator.LEVEL + adminLevel,
+					ID_MODEL_COUNTRIES_CATEGORY, NLS_CATEGORY_KEY_FORMAT,
+					modelOut, pluginOut);
+		} // for adminLevel
+
+		modelOut.write("\n");
+		pluginOut.write("\n");
+		return levelCategoryId;
+	} // outputCategories
+
+	/**
+	 * @param modelRecord
+	 * @param dcValueKeyMap
+	 * @param countryCategories
+	 * @param levelCategoryId
+	 * @param modelOut
+	 * @param pluginOut
+	 * @throws IOException
+	 */
+	private void outputModelRecord(ModelRecord modelRecord,
+			Map<String, String> dcValueKeyMap,
+			Map<String, String> countryCategories, String[] levelCategoryId,
+			Writer modelOut, Writer pluginOut) throws IOException {
+		// Make everything come out in alphabetical order
+
+		final String countryCodeString = modelRecord.getId().toLowerCase();
+		final String countryCategoryId = levelCategoryId[modelRecord
+				.getMaxAdminLevel()]
+				+ "." + countryCodeString;
+
+		// Have we seen this country category id before?
+		if (countryCategories.get(countryCategoryId) == null) {
+			// No
+			// Create a category for the country
+			modelOut.write(MessageFormat.format(
+					CountryGraphCreator.XML_CATEGORY_ELEMENT_OPEN,
+					new Object[] { countryCategoryId, modelRecord.getId(),
+							levelCategoryId[modelRecord.getMaxAdminLevel()] }));
+			modelOut.write("\n");
+			// ...and remember we did so we don't do it again
+			countryCategories.put(countryCategoryId, countryCategoryId);
+		} // if we haven't seen this category id before
+
+		// pluginOut.write("# Dublin Core for "
+		// + graphRecord.getCountryCode().toString() + "\n");
+		// // We don't NLS the ISO30166 alpha-3 codes
+
+		CountryGraphCreator.outputDublinCore(modelRecord, countryCategoryId,
+				dcValueKeyMap, modelOut, pluginOut);
+
+	} // outputModelRecord
+
+	/**
+	 * @return a mapping between country code and a list of the models for the
+	 *         country. The models are of mixed administration levels.
+	 */
+	public Map<CountryCode, List<CountryModelRecord>> createCountryModels() {
+		final Map<CountryCode, List<CountryModelRecord>> retValue = new HashMap<CountryCode, List<CountryModelRecord>>();
+
+		final List<CountryCode> countryCodes = CountryDirectoryUtilities
+				.getAllCountryCodes();
+		Collections.sort(countryCodes);
+
+		final CountryGraphCreator cgc = new CountryGraphCreator();
+
+		Map<CountryCode, List<GraphRecord>> nodeGraphs = cgc
+				.createGraphRecords(countryCodes, DataType.node);
+
+		Map<CountryCode, List<GraphRecord>> areaGraphs = cgc
+				.createGraphRecords(countryCodes, DataType.area);
+
+		for (CountryCode countryCode : countryCodes) {
+			List<GraphRecord> nodeGraphRecords = nodeGraphs.get(countryCode);
+			List<GraphRecord> areaGraphRecords = areaGraphs.get(countryCode);
+
+			// Find the maximum adminstration level we're working with
+			final int maxNodeAdminLevel = nodeGraphRecords != null ? CountryGraphCreator
+					.getMaxAdminLevel(nodeGraphRecords)
+					: -1;
+			final int maxAreaAdminLevel = areaGraphRecords != null ? CountryGraphCreator
+					.getMaxAdminLevel(areaGraphRecords)
+					: -1;
+			int maxAdminLevel = Math.max(maxAreaAdminLevel, maxNodeAdminLevel);
+
+			// Create one country model for each administration level
+			final List<CountryModelRecord> countryModels = new ArrayList<CountryModelRecord>();
+			for (int adminLevel = 0; adminLevel < maxAdminLevel + 1; adminLevel++) {
+
+				// Did we get nodes?
+				if (nodeGraphRecords == null) {
+					// No
+					System.out.println("Skipping country \""
+							+ countryCode.toString() + "\" at level \""
+							+ adminLevel + "\" because there are no nodes");
+					continue;
+				}
+				// Did we get area labels?
+				if (areaGraphRecords == null) {
+					// No
+					System.out.println("Skipping country \""
+							+ countryCode.toString() + "\" at level \""
+							+ adminLevel
+							+ "\" because there are no area labels");
+					continue;
+				}
+
+				final List<GraphRecord> modelRecords = new ArrayList<GraphRecord>();
+				final GraphRecord nodeGraph = getByAdminLevel(adminLevel,
+						nodeGraphRecords);
+				final GraphRecord areaGraph = getByAdminLevel(adminLevel,
+						areaGraphRecords);
+				modelRecords.add(nodeGraph);
+				modelRecords.add(areaGraph);
+				countryModels.add(new CountryModelRecord(createModel(
+						countryCode, adminLevel, modelRecords,
+						CountryGraphCreator.GEOGRAPHY_FILE_URI_PREFIX),
+						countryCode, adminLevel));
+			} // for adminLevel
+
+			// Any country models created?
+			if (countryModels.size() > 0) {
+				// Yes
+				retValue.put(countryCode, countryModels);
+			}
+
+		} // for each country code
+
+		return retValue;
+	} // createCountryModels
+
+	/**
+	 * Create the country models, but organize them by administration level
+	 * 
+	 * @return a list of lists of ModelRecord's, the 0'th element of the list
+	 *         contains a list of models at administration level 0
+	 */
+	public List<List<CountryModelRecord>> createCountryModels2() {
+		final Map<CountryCode, List<CountryModelRecord>> countryModels = createCountryModels();
+
+		// Reorganize the models by administration level
+		final int maxAdminLevel = getMaxAdminLevel(countryModels);
+		List<List<CountryModelRecord>> retValue = new ArrayList<List<CountryModelRecord>>();
+		for (int adminLevel = 0; adminLevel < maxAdminLevel + 1; adminLevel++) {
+			retValue.add(new ArrayList<CountryModelRecord>());
+		} // for adminLevel
+
+		for (Entry<CountryCode, List<CountryModelRecord>> entry : countryModels
+				.entrySet()) {
+			for (CountryModelRecord modelRecord : entry.getValue()) {
+				retValue.get(modelRecord.getMaxAdminLevel()).add(modelRecord);
+			} // foreach ModelRecord
+		} // foreach countryModels.entrySet
+
+		return retValue;
+	} // createCountryModels2
+
+	/**
+	 * @param countryCode
+	 * @param adminLevel
+	 * @param graphRecords
+	 * @param dataFileURIPrefix
+	 * @return a model with all of the graphs added
+	 */
+	@SuppressWarnings("unchecked")
+	private Model createModel(final CountryCode countryCode,
+			final int adminLevel, final List<GraphRecord> graphRecords,
+			final String dataFileURIPrefix) {
+		final Model retValue = ModelFactory.eINSTANCE.createModel();
+		final DublinCore dc = retValue.getDublinCore();
+		dc.populate();
+		dc.setTitle(CountryDirectoryUtilities.getCountryName(countryCode)
+				+ " Model (Level " + adminLevel + ", " + graphRecords.size()
+				+ " graphs)");
+		// dc.setSource(nonDataProperties.get(SOURCE_PROPERTY));
+
+		retValue.setURI(URI.createURI(MessageFormat.format(
+				CountryGraphCreator.IDENTIFIER_FORMAT, dataFileURIPrefix,
+				countryCode, countryCode.toString() + "_"
+						+ Integer.toString(adminLevel), "model")));
+
+		for (GraphRecord modelRecord : graphRecords) {
+			// A null value?
+			if (modelRecord != null) {
+				// No
+				retValue.getGraphs().add(modelRecord.getGraph());
+			}
+		} // for each node data
+
+		return retValue;
+	} // createModel
+
+	/**
+	 * @param graphRecords
+	 *            a list of GraphRecords to search
+	 * @return the first GraphRecord that matches the administration level or
+	 *         null if not found
+	 */
+	private GraphRecord getByAdminLevel(final int adminLevel,
+			List<GraphRecord> nodeGraphRecords) {
+		GraphRecord retValue = null;
+		for (GraphRecord record : nodeGraphRecords) {
+			// Is this at the right admin level?
+			if (record.getAdminLevel() == adminLevel) {
+				// Yes
+				retValue = record;
+			}
+		}
+		return retValue;
+	} // getByAdminLevel
+
+	/**
+	 * @param models
+	 * @return the maximum administration level found
+	 */
+	public static int getMaxAdminLevel(
+			Map<CountryCode, List<CountryModelRecord>> models) {
+		int maxAdminLevel = 0;
+		for (List<CountryModelRecord> list : models.values()) {
+			maxAdminLevel = Math.max(maxAdminLevel, getMaxAdminLevel(list));
+		} // for
+		return maxAdminLevel;
+	} // getMaxAdminLevel
+
+	/**
+	 * @param modelRecords
+	 * @return the maximum administration level found in all of the model
+	 *         records
+	 */
+	public static int getMaxAdminLevel(List<CountryModelRecord> modelRecords) {
+		int maxAdminLevel = 0;
+		for (CountryModelRecord modelRecord : modelRecords) {
+			maxAdminLevel = Math.max(maxAdminLevel, modelRecord
+					.getMaxAdminLevel());
+		}
+		return maxAdminLevel;
+	} // getMaxAdminLevel
+
+	/**
+	 * This class represents a model.
+	 */
+	abstract public static class ModelRecord extends Record {
+
+		/**
+		 * @param model
+		 *            the model
+		 * @param id
+		 *            the id of the the model
+		 * @param adminLevel
+		 *            the administration level of the contents of the model
+		 */
+		public ModelRecord(final Model model, final String id,
+				final int adminLevel) {
+			this(model, id, Collections.singletonList(Integer
+					.valueOf(adminLevel)));
+		} // ModelRecord
+
+		/**
+		 * @param model
+		 *            the model
+		 * @param id
+		 *            the id of the the model
+		 * @param adminLevels
+		 *            the administration level of the contents of the model
+		 */
+		public ModelRecord(final Model model, final String id,
+				final List<Integer> adminLevels) {
+			super(model, id, adminLevels);
+		} // ModelRecord
+
+		/**
+		 * @return the model
+		 */
+		public final Model getModel() {
+			return (Model) identifiable;
+		} // getModel
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getOutputType()
+		 */
+		@Override
+		public String getOutputType() {
+			return "model";
+		}
+	} // ModelRecord
+
+	/**
+	 * This class represents a model of a country and its details.
+	 */
+	public static class CountryModelRecord extends ModelRecord {
+
+		/**
+		 * @param model
+		 *            the model
+		 * @param countryCode
+		 *            the code of the country the model represents
+		 * @param adminLevel
+		 *            the administration level of the contents of the model
+		 */
+		public CountryModelRecord(final Model model,
+				final CountryCode countryCode, final int adminLevel) {
+			super(model, countryCode.toString(), adminLevel);
+		} // CountryModelRecord
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getType()
+		 */
+		@Override
+		public String getType() {
+			return "country";
+		}
+
+	} // CountryModelRecord
+
+} // CountryModelCreator
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/TestUtil.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/TestUtil.java
new file mode 100644
index 0000000..60b43fa
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/TestUtil.java
@@ -0,0 +1,481 @@
+// TestUtil.java
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+/**
+ * This class contains utility methods for testing STEM.
+ */
+public class TestUtil {
+
+	/**
+	 * This is a counter used to uniquely number the labels that are created.
+	 * 
+	 * @see #createStaticLabel(URI)
+	 */
+	private static int labelCounter = 0;
+
+	/**
+	 * This is a counter used to uniquely number the dynamic labels that are
+	 * created.
+	 * 
+	 * @see #createDynamicLabel(URI)
+	 */
+	private static int dynamicLabelCounter = 0;
+
+	/**
+	 * This is a counter used to uniquely number the edges that are created.
+	 * 
+	 * @see #createNextEdgeURI()
+	 */
+	private static int edgeCounter = 0;
+
+	/**
+	 * This is a counter used to uniquely number the nodes that are created.
+	 * 
+	 * @see #createNextNodeURI()
+	 */
+	private static int nodeCounter = 0;
+
+	/**
+	 * This is a counter used to generate unique URI's of things to label
+	 * 
+	 * @see #createFixture()
+	 */
+	private static int idCounter = 0;
+
+	/**
+	 * Reset the counters
+	 */
+	public static void resetCounters() {
+		labelCounter = 0;
+		dynamicLabelCounter = 0;
+		edgeCounter = 0;
+		nodeCounter = 0;
+		idCounter = 0;
+	}
+
+	/**
+	 * @return a static label instance
+	 */
+	public static Label createStaticLabel() {
+		return createStaticLabel(createNextIdentifiableToLabelURI());
+	} // createStaticLabel
+
+	/**
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a static label instance
+	 */
+	public static Label createStaticLabel(final URI uriOfIdentifiableToBeLabeled) {
+		return createStaticLabel(createNextLabelURI(),
+				uriOfIdentifiableToBeLabeled);
+	} // createStaticLabel
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a static label instance
+	 */
+	public static Label createStaticLabel(final URI labelURI,
+			final URI uriOfIdentifiableToBeLabeled) {
+		final TestLabel retValue = LabelsFactory.eINSTANCE.createTestLabel();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+
+		final TestIntegerLabelValue staticLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		staticLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		retValue.setCurrentValue(staticLabelCurrentValue);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createStaticLabel
+
+	/**
+	 * @return a unique URI for a label.
+	 */
+	private static URI createNextLabelURI() {
+		return STEMURI.createURI("LABEL" + "/" + labelCounter++);
+	} // createNextLabelURI
+
+	/**
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a unique dynamic label
+	 */
+	public static TestDynamicLabel1 createDynamicLabel(
+			final URI uriOfIdentifiableToBeLabeled) {
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		return createDynamicLabel(createNextDynamicLabelURI(),
+				uriOfIdentifiableToBeLabeled, tnd);
+	} // createDynamicLabel
+
+	/**
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a unique dynamic label
+	 */
+	public static TestDynamicLabel1 createDynamicLabel(
+			final URI uriOfIdentifiableToBeLabeled, final Decorator decorator) {
+		return createDynamicLabel(createNextDynamicLabelURI(),
+				uriOfIdentifiableToBeLabeled, decorator);
+	} // createDynamicLabel
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a unique dynamic label
+	 */
+	public static TestDynamicLabel1 createDynamicLabel(final URI labelURI,
+			final URI uriOfIdentifiableToBeLabeled, final Decorator decorator) {
+		final TestDynamicLabel1 retValue = LabelsFactory.eINSTANCE
+				.createTestDynamicLabel1();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+		retValue.setDecorator(decorator);
+		final TestIntegerLabelValue dynamicLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		final TestIntegerLabelValue dynamicLabelNextValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		dynamicLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		dynamicLabelNextValue
+				.setI(TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE);
+
+		retValue.setCurrentValue(dynamicLabelCurrentValue);
+		retValue.setNextValue(dynamicLabelNextValue);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createDynamicLabel
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a static node label
+	 */
+	public static StaticNodeLabel createStaticNodeLabel(final URI labelURI,
+			final URI uriOfIdentifiableToBeLabeled) {
+		final TestStaticNodeLabel retValue = LabelsFactory.eINSTANCE
+				.createTestStaticNodeLabel();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+
+		final TestIntegerLabelValue staticLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		staticLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		retValue.setCurrentValue(staticLabelCurrentValue);
+
+		assert retValue.sane();
+		return retValue;
+	} // createStaticNodeLabel
+
+	/**
+	 * @return a unique dynamic node label
+	 */
+	public static TestDynamicNodeLabel createDynamicNodeLabel() {
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+				.createTestNodeDecorator1();
+		return createDynamicNodeLabel(createNextDynamicLabelURI(),
+				createNextIdentifiableToLabelURI(), tnd);
+	} // createDynamicNodeLabel
+
+	/**
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a unique dynamic node label
+	 */
+	public static TestDynamicNodeLabel createDynamicNodeLabel(
+			final URI uriOfIdentifiableToBeLabeled,
+			final NodeDecorator nodeDecorator) {
+		return createDynamicNodeLabel(createNextDynamicLabelURI(),
+				uriOfIdentifiableToBeLabeled, nodeDecorator);
+	} // createDynamicNodeLabel
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a unique dynamic label
+	 */
+	public static TestDynamicNodeLabel createDynamicNodeLabel(
+			final URI labelURI, final URI uriOfIdentifiableToBeLabeled,
+			final NodeDecorator nodeDecorator) {
+		final TestDynamicNodeLabel retValue = LabelsFactory.eINSTANCE
+				.createTestDynamicNodeLabel();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+
+		retValue.setDecorator(nodeDecorator);
+
+		final TestIntegerLabelValue dynamicLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		final TestIntegerLabelValue dynamicLabelNextValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		dynamicLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		dynamicLabelNextValue
+				.setI(TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE);
+
+		retValue.setCurrentValue(dynamicLabelCurrentValue);
+		retValue.setNextValue(dynamicLabelNextValue);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createDynamicNodeLabel
+
+	/**
+	 * @return a unique URI for a label.
+	 */
+	private static URI createNextDynamicLabelURI() {
+		return STEMURI.createURI("DYNAMICLABEL" + "/" + dynamicLabelCounter++);
+	} // createNextDynamicLabelURI
+
+	/**
+	 * @return a unique URI for a Identifiable to label
+	 */
+	public static URI createNextIdentifiableToLabelURI() {
+		return STEMURI.createURI("FOOBAR" + "/" + idCounter++);
+	} // createNextThingToLabelURI
+
+	/**
+	 * @param nodeAURI
+	 *            the URI of the A node the edge links to
+	 * @param nodeBURI
+	 *            the URI of the B node the edge links to
+	 * @param edgeDecorator
+	 * @return a dynamically labeled edge linking nodes with the two URI's
+	 */
+	public static Edge createDynamicallyLabeledEdge(final URI nodeAURI,
+			final URI nodeBURI, EdgeDecorator edgeDecorator) {
+		return createDynamicallyLabeledEdge(nodeAURI, nodeBURI,
+				createNextEdgeURI(), edgeDecorator);
+	} // createDynamicallyLabeledEdge
+
+	/**
+	 * @param nodeAURI
+	 *            the URI of the A node the edge links to
+	 * @param nodeBURI
+	 *            the URI of the B node the edge links to
+	 * @param edgeURI
+	 *            uri to use for the edge
+	 * @param edgeDecorator
+	 * @return a dynamically labeled edge linking nodes with the two URI's
+	 */
+	public static Edge createDynamicallyLabeledEdge(final URI nodeAURI,
+			final URI nodeBURI, final URI edgeURI, EdgeDecorator edgeDecorator) {
+		final Edge edge = EdgeImpl.createEdge(nodeAURI, nodeBURI, edgeURI);
+		final DynamicEdgeLabel del = createDynamicEdgeLabel(
+				createNextDynamicLabelURI(), edge.getURI());
+		del.setDecorator(edgeDecorator);
+		edge.setLabel(del);
+		assert edge.sane();
+		return edge;
+	} // createDynamicallyLabeledEdge
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a DynamicEdgeLabel
+	 */
+	private static DynamicEdgeLabel createDynamicEdgeLabel(final URI labelURI,
+			final URI uriOfIdentifiableToBeLabeled) {
+		final TestDynamicEdgeLabel retValue = LabelsFactory.eINSTANCE
+				.createTestDynamicEdgeLabel();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+
+		final TestIntegerLabelValue dynamicLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		final TestIntegerLabelValue dynamicLabelNextValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		dynamicLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		dynamicLabelNextValue
+				.setI(TestIntegerLabelValue.NEXT_LABEL_INTEGER_VALUE);
+
+		retValue.setCurrentValue(dynamicLabelCurrentValue);
+		retValue.setNextValue(dynamicLabelNextValue);
+
+		return retValue;
+	} // createDynamicEdgeLabel
+
+	/**
+	 * @param nodeAURI
+	 *            the URI of the A node the edge links to
+	 * @param nodeBURI
+	 *            the URI of the B node the edge links to
+	 * @return a statically labeled edge linking nodes with the two URI's
+	 */
+	public static Edge createStaticallyLabeledEdge(final URI nodeAURI,
+			final URI nodeBURI) {
+		return createStaticallyLabeledEdge(createNextEdgeURI(), nodeAURI,
+				nodeBURI);
+	} // createStaticallyLabeledEdge
+
+	/**
+	 * @param edgeURI
+	 * @param nodeAURI
+	 * @param nodeBURI
+	 * @return a statically labeled edge
+	 */
+	public static Edge createStaticallyLabeledEdge(final URI edgeURI,
+			final URI nodeAURI, final URI nodeBURI) {
+		return createStaticallyLabeledEdge(edgeURI, nodeAURI, nodeBURI, false);
+	} // createStaticallyLabeledEdge
+
+	/**
+	 * @param edgeURI
+	 * @param nodeAURI
+	 * @param nodeBURI
+	 * @param directed
+	 * @return a statically labeled edge
+	 */
+	public static Edge createStaticallyLabeledEdge(final URI edgeURI,
+			final URI nodeAURI, final URI nodeBURI, final boolean directed) {
+		final Edge retValue = EdgeImpl.createEdge(nodeAURI, nodeBURI, directed,
+				edgeURI);
+		retValue.setLabel(createStaticEdgeLabel(retValue.getURI(), retValue
+				.getURI()));
+		return retValue;
+	} // createStaticallyLabeledEdge
+
+	/**
+	 * @param labelURI
+	 * @param uriOfIdentifiableToBeLabeled
+	 * @return a StaticEdgeLabel
+	 */
+	private static StaticEdgeLabel createStaticEdgeLabel(final URI labelURI,
+			final URI uriOfIdentifiableToBeLabeled) {
+		final TestStaticEdgeLabel retValue = LabelsFactory.eINSTANCE
+				.createTestStaticEdgeLabel();
+		retValue.setURI(labelURI);
+		retValue.setURIOfIdentifiableToBeLabeled(uriOfIdentifiableToBeLabeled);
+
+		final TestIntegerLabelValue staticLabelCurrentValue = LabelsFactory.eINSTANCE
+				.createTestIntegerLabelValue();
+		staticLabelCurrentValue
+				.setI(TestIntegerLabelValue.CURRENT_LABEL_INTEGER_VALUE);
+		retValue.setCurrentValue(staticLabelCurrentValue);
+
+		assert retValue.sane();
+		return retValue;
+	} // createStaticEdgeLabel
+
+	/**
+	 * @return a unique URI for an edge.
+	 */
+	private static URI createNextEdgeURI() {
+		return STEMURI.createURI("EDGE" + "/" + edgeCounter++);
+	}
+
+	/**
+	 * @param nodeDecorator
+	 *            TODO
+	 * @return a dynamically labeled node
+	 */
+	public static Node createDynamicalyLabeledNode(NodeDecorator nodeDecorator) {
+		final Node retValue = GraphFactory.eINSTANCE.createNode();
+		retValue.setURI(createNextNodeURI());
+
+		final DynamicNodeLabel dynamicNodeLabel = TestUtil
+				.createDynamicNodeLabel(retValue.getURI(), nodeDecorator);
+
+		retValue.getLabels().add(dynamicNodeLabel);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createDynamicalyLabeledNode
+
+	/**
+	 * @param nodeURI
+	 * @return a dynamically labeled node
+	 */
+	@SuppressWarnings("unchecked")
+	public static Node createStaticallyLabeledNode(final URI nodeURI) {
+		final Node retValue = GraphFactory.eINSTANCE.createNode();
+		retValue.setURI(nodeURI);
+		final StaticNodeLabel staticNodeLabel = TestUtil.createStaticNodeLabel(
+				TestUtil.createNextLabelURI(), retValue.getURI());
+		retValue.getLabels().add(staticNodeLabel);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createStaticallyLabeledNode
+
+	/**
+	 * @return a dynamically labeled node
+	 */
+	@SuppressWarnings("unchecked")
+	public static Node createStaticallyLabeledNode() {
+		final Node retValue = GraphFactory.eINSTANCE.createNode();
+
+		final StaticNodeLabel staticNodeLabel = TestUtil.createStaticNodeLabel(
+				TestUtil.createNextLabelURI(), retValue.getURI());
+		// staticNodeLabel.setNode(retValue);
+		retValue.getLabels().add(staticNodeLabel);
+
+		assert retValue.sane();
+
+		return retValue;
+	} // createStaticallyLabeledNode
+
+	/**
+	 * @return a unique URI for a node.
+	 */
+	private static URI createNextNodeURI() {
+		return STEMURI.createURI("NODE" + "/" + nodeCounter++);
+	} // createNextNodeURI
+
+	/**
+	 * @param graph
+	 */
+	@SuppressWarnings("unused")
+	private static void refreshDublinCore(final Identifiable identifiable) {
+		final DublinCore dc = identifiable.getDublinCore();
+		dc.populate();
+		dc.setFormat(identifiable.eClass().getEPackage().getNsURI());
+		// dc.setSubject("JUnit test output");
+	} // refreshDublinCore
+
+} // TestUtil
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/WorldModelCreator.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/WorldModelCreator.java
new file mode 100644
index 0000000..1775546
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/WorldModelCreator.java
@@ -0,0 +1,306 @@
+// WorldModelCreator.java
+package org.eclipse.stem.tests.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.tests.util.CountryDirectoryUtilities.CountryCode;
+import org.eclipse.stem.tests.util.CountryModelCreator.CountryModelRecord;
+import org.eclipse.stem.tests.util.CountryModelCreator.ModelRecord;
+
+/**
+ * This class creates models of the world at various resolutions.
+ */
+public class WorldModelCreator {
+
+	/**
+	 * The name of the directory that contains "model" sub-directories
+	 */
+	private static final String WORLD_DIR = "world";
+
+	/**
+	 * This is the format string for the identifier of a country graph or model
+	 * file
+	 */
+	public static final String IDENTIFIER_FORMAT = "{0}/" + WORLD_DIR
+			+ "/{1}/{2}";
+
+	/**
+	 * This is the path to the country models directory
+	 */
+	public static final String WORLD_MODEL_PATH = CountryGraphCreator.ROOT_OUTPUT_DIR
+			+ File.separator
+			+ CountryModelCreator.MODEL_OUTPUT_DIR
+			+ File.separator + WORLD_DIR;
+
+	private static final String WORLD = "World";
+
+	/**
+	 * The identifier used in world model record instances. It is like a
+	 * {@link CountryCode} , but for the entire world.
+	 */
+	private static final String WORLD_ID = "WORLD";
+
+	/**
+	 * This is the id of the extension point extended by "world" models that are
+	 * plugged into STEM
+	 */
+	public static final String ID_MODEL_WORLD_CATEGORY = CountryModelCreator.ID_MODEL_POLITICAL_CATEGORY
+			+ "." + WORLD.toLowerCase();
+
+	/**
+	 * @param args
+	 *            none
+	 */
+	public static void main(final String[] args) {
+
+		final CountryModelCreator cmc = new CountryModelCreator();
+
+		final List<List<CountryModelRecord>> modelsByAdminLevel = cmc
+				.createCountryModels2();
+
+		final WorldModelCreator wmc = new WorldModelCreator();
+
+		// Create the world models by each administration level
+		final List<WorldModelRecord> worldModelRecords = wmc
+				.createWorldModels(modelsByAdminLevel);
+		try {
+			wmc.serializeWorldModels(worldModelRecords, WORLD_MODEL_PATH);
+
+			final File worldModelExtensionFile = new File(WORLD_MODEL_PATH
+					+ CountryGraphCreator.GRAPH_EXTENSION_POINT_FILE_NAME);
+			final File worldModelPluginPropertiesFile = new File(
+					WORLD_MODEL_PATH
+							+ CountryGraphCreator.GRAPH_PLUGIN_PROPERTIES_POINT_FILE_NAME);
+
+			final BufferedWriter worldModelOut = new BufferedWriter(
+					new FileWriter(worldModelExtensionFile));
+
+			final BufferedWriter pluginOut = new BufferedWriter(new FileWriter(
+					worldModelPluginPropertiesFile));
+
+			// Create a snippet of xml that can be included in a plugin.xml file
+			// to plug into STEM the models we just serialized.
+			wmc.generateModelExtensionPointXML(worldModelRecords,
+					worldModelOut, pluginOut);
+		} // try
+		catch (final IOException e) {
+			e.printStackTrace();
+		}
+	} // main
+
+	/**
+	 * Given a collection of country models grouped by administration level,
+	 * create a higher world model for each level that contains all of the
+	 * country models for that level.
+	 * 
+	 * @param modelsByAdminLevel
+	 *            a list ordered by administration level of lists of model
+	 *            records for each administration level
+	 * @return a list of world model records, one for each administration level.
+	 */
+	@SuppressWarnings("unchecked")
+	public List<WorldModelRecord> createWorldModels(
+			final List<List<CountryModelRecord>> modelsByAdminLevel) {
+		final List<WorldModelRecord> retValue = new ArrayList<WorldModelRecord>();
+
+		for (int adminLevel = 0; adminLevel < modelsByAdminLevel.size(); adminLevel++) {
+
+			final Model worldModel = ModelFactory.eINSTANCE.createModel();
+			final DublinCore dc = worldModel.getDublinCore();
+			dc.populate();
+			dc.setTitle("World Model (Level " + adminLevel + ", "
+					+ modelsByAdminLevel.get(adminLevel).size() + " models)");
+
+			for (final CountryModelRecord modelRecord : modelsByAdminLevel
+					.get(adminLevel)) {
+				worldModel.getModels().add(modelRecord.getModel());
+			} // foreach ModelRecord at adminLevel
+
+			final WorldModelRecord worldModelRecord = new WorldModelRecord(
+					worldModel, WORLD_ID, adminLevel);
+			worldModel.setURI(URI.createURI(MessageFormat.format(
+					IDENTIFIER_FORMAT,
+					CountryGraphCreator.GEOGRAPHY_FILE_URI_PREFIX, WORLD_ID,
+					worldModelRecord.getSerializationFileName())));
+
+			retValue.add(worldModelRecord);
+		} // for adminLevel
+
+		final WorldModelRecord multiLevelWorldModel = createMultiLevelWorld(retValue);
+		retValue.add(multiLevelWorldModel);
+		return retValue;
+	} // createWorldModels
+
+	/**
+	 * Create one world model composed of the models of the world at each
+	 * administration level
+	 * 
+	 * @param worldModels
+	 *            list of models ordered by administration level
+	 * @return a model composed of the sub-models for the world at each level
+	 */
+	@SuppressWarnings("unchecked")
+	public WorldModelRecord createMultiLevelWorld(
+			final List<WorldModelRecord> worldModels) {
+
+		final Model worldModel = ModelFactory.eINSTANCE.createModel();
+
+		final WorldModelRecord retValue = new WorldModelRecord(worldModel,
+				WORLD_ID, 0);
+
+		for (final WorldModelRecord modelRecord : worldModels) {
+			worldModel.getModels().add(
+					(Model)EcoreUtil.copy(modelRecord.getModel()));
+			retValue.addAdminLevels(modelRecord.getAdminLevels());
+		}
+
+		final DublinCore dc = worldModel.getDublinCore();
+		dc.populate();
+		dc.setTitle("World Model (Levels "
+				+ retValue.getAdminLevelsAsString(", ") + ")");
+		final String uriString = MessageFormat.format(IDENTIFIER_FORMAT,
+				CountryGraphCreator.GEOGRAPHY_FILE_URI_PREFIX, WORLD_ID,
+				retValue.getSerializationFileName());
+		dc.setIdentifier(uriString);
+		worldModel.setURI(URI.createURI(uriString));
+
+		return retValue;
+	} // createMultiLevelWorld
+
+	/**
+	 * @param worldModels
+	 * @param uriPathString
+	 *            the path to the root of the folder to serialize the models to
+	 * @throws IOException
+	 */
+	private void serializeWorldModels(final List<WorldModelRecord> worldModels,
+			final String uriPathString) throws IOException {
+		for (final WorldModelRecord modelRecord : worldModels) {
+			modelRecord.serialize(uriPathString);
+		} // for each model record
+	} // serializeWorldModels
+
+	/**
+	 * @param countryNodeGraphs
+	 *            a list of maps of models of nodes for countries for each
+	 *            adminstration level
+	 * @param modelOut
+	 *            the output writer for the plugin.xml file contents
+	 * @param pluginOut
+	 *            the output writer for the plugin.properties file contents
+	 */
+	private void generateModelExtensionPointXML(
+			final List<WorldModelRecord> worldModelRecords,
+			final Writer modelOut, final Writer pluginOut) {
+
+		// The dublin core instances of the models likely share common
+		// attributes, we can avoid duplicate entries in the files we generate
+		// by finding the duplicate entries and only generating a single key for
+		// the generated plugins file content.
+		final Map<String, String> dcValueKeyMap = new HashMap<String, String>();
+
+		try {
+			modelOut.write("<!-- Generated content.  Do not modify -->\n");
+
+			modelOut.write(MessageFormat.format(
+					CountryGraphCreator.XML_EXTENSION_POINT_OPEN,
+					new Object[] { Constants.ID_MODEL_EXTENSION_POINT }));
+			modelOut.write("\n");
+
+			pluginOut
+					.write("#Model NLS Keys.  Automatically generated, do not modify. "
+							+ Calendar.getInstance().getTime()
+							+ " "
+							+ System.getProperty("user.name") + "\n");
+
+			// World Model
+			CountryGraphCreator.outputCategory(ID_MODEL_WORLD_CATEGORY, WORLD,
+					CountryModelCreator.ID_MODEL_POLITICAL_CATEGORY,
+					CountryModelCreator.NLS_CATEGORY_KEY_FORMAT, modelOut,
+					pluginOut);
+
+			for (final WorldModelRecord worldModelRecord : worldModelRecords) {
+				CountryGraphCreator.outputDublinCore(worldModelRecord,
+						ID_MODEL_WORLD_CATEGORY, dcValueKeyMap, modelOut,
+						pluginOut);
+			} // for each world model record
+
+			modelOut.write(CountryGraphCreator.XML_EXTENSION_POINT_CLOSE);
+			modelOut.close();
+			pluginOut.close();
+		} catch (final IOException e) {
+			e.printStackTrace();
+		}
+
+	} // generateModelExtensionPointXML
+
+	/**
+	 * This class contains a world model and its metadata.
+	 */
+	public static class WorldModelRecord extends ModelRecord {
+
+		/**
+		 * @param model
+		 *            the world model
+		 * @param id
+		 *            the identifier of the model
+		 * @param adminLevel
+		 *            the administration levels contained in the model
+		 */
+		public WorldModelRecord(final Model model, final String id,
+				final int adminLevel) {
+			this(model, id, Collections.singletonList(Integer
+					.valueOf(adminLevel)));
+		} // WorldModelRecord
+
+		/**
+		 * @param model
+		 *            the world model
+		 * @param id
+		 *            the identifier of the model
+		 * @param adminLevels
+		 *            the administration levels contained in the model
+		 */
+		public WorldModelRecord(final Model model, final String id,
+				final List<Integer> adminLevels) {
+			super(model, id, adminLevels);
+		} // WorldModelRecord
+
+		/**
+		 * @see org.eclipse.stem.data.geography.graph.CountryGraphCreator.Record#getType()
+		 */
+		@Override
+		public String getType() {
+			return "world";
+		} // getType
+
+	} // WorldModelRecord
+} // WorldModelCreator
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsFactory.java
new file mode 100644
index 0000000..91d6b33
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsFactory.java
@@ -0,0 +1,78 @@
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.decorators.DecoratorsPackage
+ * @generated
+ */
+public interface DecoratorsFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DecoratorsFactory eINSTANCE = org.eclipse.stem.tests.util.decorators.impl.DecoratorsFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Test Edge Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Edge Decorator1</em>'.
+	 * @generated
+	 */
+	TestEdgeDecorator1 createTestEdgeDecorator1();
+
+	/**
+	 * Returns a new object of class '<em>Test Graph Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Graph Decorator1</em>'.
+	 * @generated
+	 */
+	TestGraphDecorator1 createTestGraphDecorator1();
+
+	/**
+	 * Returns a new object of class '<em>Test Node Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Node Decorator1</em>'.
+	 * @generated
+	 */
+	TestNodeDecorator1 createTestNodeDecorator1();
+
+	/**
+	 * Returns a new object of class '<em>Test Scenario Graph Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Scenario Graph Decorator1</em>'.
+	 * @generated
+	 */
+	TestScenarioGraphDecorator1 createTestScenarioGraphDecorator1();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	DecoratorsPackage getDecoratorsPackage();
+
+} //DecoratorsFactory
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsPackage.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsPackage.java
new file mode 100644
index 0000000..3f1b846
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/DecoratorsPackage.java
@@ -0,0 +1,877 @@
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.stem.core.model.ModelPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.decorators.DecoratorsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface DecoratorsPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "decorators"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/tests/util/decorators.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.tests.util.decorators"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	DecoratorsPackage eINSTANCE = org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getEdgeDecorator()
+	 * @generated
+	 */
+	int EDGE_DECORATOR = 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl <em>Test Edge Decorator1</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestEdgeDecorator1()
+	 * @generated
+	 */
+	int TEST_EDGE_DECORATOR1 = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__URI = ModelPackage.EDGE_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__TYPE_URI = ModelPackage.EDGE_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__DUBLIN_CORE = ModelPackage.EDGE_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__LABELS_TO_UPDATE = ModelPackage.EDGE_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__GRAPH = ModelPackage.EDGE_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__ENABLED = ModelPackage.EDGE_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__GRAPH_DECORATED = ModelPackage.EDGE_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__NODE_AURI = ModelPackage.EDGE_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__NODE_BURI = ModelPackage.EDGE_DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Edge URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1__EDGE_URI = ModelPackage.EDGE_DECORATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Test Edge Decorator1</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_EDGE_DECORATOR1_FEATURE_COUNT = ModelPackage.EDGE_DECORATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getGraphDecorator()
+	 * @generated
+	 */
+	int GRAPH_DECORATOR = 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestGraphDecorator1Impl <em>Test Graph Decorator1</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.decorators.impl.TestGraphDecorator1Impl
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestGraphDecorator1()
+	 * @generated
+	 */
+	int TEST_GRAPH_DECORATOR1 = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__URI = ModelPackage.GRAPH_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__TYPE_URI = ModelPackage.GRAPH_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__DUBLIN_CORE = ModelPackage.GRAPH_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__LABELS_TO_UPDATE = ModelPackage.GRAPH_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__GRAPH = ModelPackage.GRAPH_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__ENABLED = ModelPackage.GRAPH_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1__GRAPH_DECORATED = ModelPackage.GRAPH_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The number of structural features of the '<em>Test Graph Decorator1</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_GRAPH_DECORATOR1_FEATURE_COUNT = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getNodeDecorator()
+	 * @generated
+	 */
+	int NODE_DECORATOR = 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestNodeDecorator1Impl <em>Test Node Decorator1</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.decorators.impl.TestNodeDecorator1Impl
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestNodeDecorator1()
+	 * @generated
+	 */
+	int TEST_NODE_DECORATOR1 = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__URI = ModelPackage.NODE_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__TYPE_URI = ModelPackage.NODE_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__DUBLIN_CORE = ModelPackage.NODE_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__LABELS_TO_UPDATE = ModelPackage.NODE_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__GRAPH = ModelPackage.NODE_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__ENABLED = ModelPackage.NODE_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1__GRAPH_DECORATED = ModelPackage.NODE_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The number of structural features of the '<em>Test Node Decorator1</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_NODE_DECORATOR1_FEATURE_COUNT = ModelPackage.NODE_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl <em>Test Scenario Graph Decorator1</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1 = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__URI = ModelPackage.GRAPH_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__TYPE_URI = ModelPackage.GRAPH_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__DUBLIN_CORE = ModelPackage.GRAPH_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__LABELS_TO_UPDATE = ModelPackage.GRAPH_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__GRAPH = ModelPackage.GRAPH_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__ENABLED = ModelPackage.GRAPH_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__GRAPH_DECORATED = ModelPackage.GRAPH_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Double Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Int Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>String Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>STEM Time Value</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Boolean Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 4;
+
+	/**
+	 * The number of structural features of the '<em>Test Scenario Graph Decorator1</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_SCENARIO_GRAPH_DECORATOR1_FEATURE_COUNT = ModelPackage.GRAPH_DECORATOR_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Edge Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int EDGE_DECORATOR_FEATURE_COUNT = 0;
+
+	/**
+	 * The number of structural features of the '<em>Graph Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GRAPH_DECORATOR_FEATURE_COUNT = 0;
+
+	/**
+	 * The number of structural features of the '<em>Node Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_DECORATOR_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '<em>URI</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.URI
+	 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getURI()
+	 * @generated
+	 */
+	int URI = 7;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1 <em>Test Edge Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Edge Decorator1</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1
+	 * @generated
+	 */
+	EClass getTestEdgeDecorator1();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeAURI <em>Node AURI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Node AURI</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeAURI()
+	 * @see #getTestEdgeDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestEdgeDecorator1_NodeAURI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeBURI <em>Node BURI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Node BURI</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeBURI()
+	 * @see #getTestEdgeDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestEdgeDecorator1_NodeBURI();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getEdgeURI <em>Edge URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Edge URI</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getEdgeURI()
+	 * @see #getTestEdgeDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestEdgeDecorator1_EdgeURI();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.decorators.TestGraphDecorator1 <em>Test Graph Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Graph Decorator1</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestGraphDecorator1
+	 * @generated
+	 */
+	EClass getTestGraphDecorator1();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.decorators.TestNodeDecorator1 <em>Test Node Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Node Decorator1</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestNodeDecorator1
+	 * @generated
+	 */
+	EClass getTestNodeDecorator1();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1 <em>Test Scenario Graph Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Scenario Graph Decorator1</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1
+	 * @generated
+	 */
+	EClass getTestScenarioGraphDecorator1();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getDoubleValue <em>Double Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Double Value</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getDoubleValue()
+	 * @see #getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestScenarioGraphDecorator1_DoubleValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getIntValue <em>Int Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Int Value</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getIntValue()
+	 * @see #getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestScenarioGraphDecorator1_IntValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getStringValue <em>String Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>String Value</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getStringValue()
+	 * @see #getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestScenarioGraphDecorator1_StringValue();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getSTEMTimeValue <em>STEM Time Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>STEM Time Value</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getSTEMTimeValue()
+	 * @see #getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	EReference getTestScenarioGraphDecorator1_STEMTimeValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#isBooleanValue <em>Boolean Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Boolean Value</em>'.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#isBooleanValue()
+	 * @see #getTestScenarioGraphDecorator1()
+	 * @generated
+	 */
+	EAttribute getTestScenarioGraphDecorator1_BooleanValue();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Edge Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @model instanceClass="org.eclipse.stem.core.model.EdgeDecorator"
+	 * @generated
+	 */
+	EClass getEdgeDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Graph Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @model instanceClass="org.eclipse.stem.core.model.GraphDecorator"
+	 * @generated
+	 */
+	EClass getGraphDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Node Decorator</em>'.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @model instanceClass="org.eclipse.stem.core.model.NodeDecorator"
+	 * @generated
+	 */
+	EClass getNodeDecorator();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.common.util.URI <em>URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>URI</em>'.
+	 * @see org.eclipse.emf.common.util.URI
+	 * @model instanceClass="org.eclipse.emf.common.util.URI"
+	 * @generated
+	 */
+	EDataType getURI();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	DecoratorsFactory getDecoratorsFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals  {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl <em>Test Edge Decorator1</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestEdgeDecorator1()
+		 * @generated
+		 */
+		EClass TEST_EDGE_DECORATOR1 = eINSTANCE.getTestEdgeDecorator1();
+
+		/**
+		 * The meta object literal for the '<em><b>Node AURI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_EDGE_DECORATOR1__NODE_AURI = eINSTANCE.getTestEdgeDecorator1_NodeAURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Node BURI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_EDGE_DECORATOR1__NODE_BURI = eINSTANCE.getTestEdgeDecorator1_NodeBURI();
+
+		/**
+		 * The meta object literal for the '<em><b>Edge URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_EDGE_DECORATOR1__EDGE_URI = eINSTANCE.getTestEdgeDecorator1_EdgeURI();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestGraphDecorator1Impl <em>Test Graph Decorator1</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.decorators.impl.TestGraphDecorator1Impl
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestGraphDecorator1()
+		 * @generated
+		 */
+		EClass TEST_GRAPH_DECORATOR1 = eINSTANCE.getTestGraphDecorator1();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestNodeDecorator1Impl <em>Test Node Decorator1</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.decorators.impl.TestNodeDecorator1Impl
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestNodeDecorator1()
+		 * @generated
+		 */
+		EClass TEST_NODE_DECORATOR1 = eINSTANCE.getTestNodeDecorator1();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl <em>Test Scenario Graph Decorator1</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getTestScenarioGraphDecorator1()
+		 * @generated
+		 */
+		EClass TEST_SCENARIO_GRAPH_DECORATOR1 = eINSTANCE.getTestScenarioGraphDecorator1();
+
+		/**
+		 * The meta object literal for the '<em><b>Double Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE = eINSTANCE.getTestScenarioGraphDecorator1_DoubleValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Int Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE = eINSTANCE.getTestScenarioGraphDecorator1_IntValue();
+
+		/**
+		 * The meta object literal for the '<em><b>String Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE = eINSTANCE.getTestScenarioGraphDecorator1_StringValue();
+
+		/**
+		 * The meta object literal for the '<em><b>STEM Time Value</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE = eINSTANCE.getTestScenarioGraphDecorator1_STEMTimeValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Boolean Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE = eINSTANCE.getTestScenarioGraphDecorator1_BooleanValue();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.EdgeDecorator
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getEdgeDecorator()
+		 * @generated
+		 */
+		EClass EDGE_DECORATOR = eINSTANCE.getEdgeDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.GraphDecorator
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getGraphDecorator()
+		 * @generated
+		 */
+		EClass GRAPH_DECORATOR = eINSTANCE.getGraphDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.core.model.NodeDecorator
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getNodeDecorator()
+		 * @generated
+		 */
+		EClass NODE_DECORATOR = eINSTANCE.getNodeDecorator();
+
+		/**
+		 * The meta object literal for the '<em>URI</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.common.util.URI
+		 * @see org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl#getURI()
+		 * @generated
+		 */
+		EDataType URI = eINSTANCE.getURI();
+
+	}
+
+} //DecoratorsPackage
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestEdgeDecorator1.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestEdgeDecorator1.java
new file mode 100644
index 0000000..1b8632a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestEdgeDecorator1.java
@@ -0,0 +1,74 @@
+// TestEdgeDecorator1.java
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.model.EdgeDecorator;
+
+/**
+ * This interface represents the model of an abstract class in an EMF model that
+ * is an example of a EdgeDecorator implementation used for test purposes.
+ * 
+ * @model
+ */
+public interface TestEdgeDecorator1 extends EdgeDecorator {
+	
+	/**
+	 * @return the URI for node A
+	 * @model
+	 */
+	URI getNodeAURI();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeAURI <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node AURI</em>' attribute.
+	 * @see #getNodeAURI()
+	 * @generated
+	 */
+	void setNodeAURI(URI value);
+
+	/**
+	 * @return  the URI for node B
+	 * @model
+	 */
+	URI getNodeBURI();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getNodeBURI <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Node BURI</em>' attribute.
+	 * @see #getNodeBURI()
+	 * @generated
+	 */
+	void setNodeBURI(URI value);
+
+	/**
+	 * @return the URI of the edge
+	 * @model
+	 */
+	URI getEdgeURI();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1#getEdgeURI <em>Edge URI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Edge URI</em>' attribute.
+	 * @see #getEdgeURI()
+	 * @generated
+	 */
+	void setEdgeURI(URI value);
+
+} // TestEdgeDecorator1
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestGraphDecorator1.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestGraphDecorator1.java
new file mode 100644
index 0000000..a3c9c19
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestGraphDecorator1.java
@@ -0,0 +1,25 @@
+// TestGraphDecorator1.java
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.GraphDecorator;
+
+/**
+ * This interface represents the model of an abstract class in an EMF model that
+ * is an example of a GraphDecorator implementation used for test purposes.
+ * 
+ * @model
+ */
+public interface TestGraphDecorator1 extends GraphDecorator {
+	// Nothing
+} // TestGraphDecorator1
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestNodeDecorator1.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestNodeDecorator1.java
new file mode 100644
index 0000000..c450916
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestNodeDecorator1.java
@@ -0,0 +1,25 @@
+// TestNodeDecorator1.java
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.NodeDecorator;
+
+/**
+ * This interface represents the model of an abstract class in an EMF model that
+ * is an example of a NodeDecorator implementation used for test purposes.
+ * 
+ * @model
+ */
+public interface TestNodeDecorator1 extends NodeDecorator {
+	// Nothing
+} // TestNodeDecorator1
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestScenarioGraphDecorator1.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestScenarioGraphDecorator1.java
new file mode 100644
index 0000000..5460990
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/TestScenarioGraphDecorator1.java
@@ -0,0 +1,108 @@
+// TestScenarioGraphDecorator1.java
+package org.eclipse.stem.tests.util.decorators;
+
+/*******************************************************************************
+ * Copyright (c) 2006,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.scenario.Scenario;
+
+/**
+ * This class represents a {@link Graph} decorator that decorates the canonical
+ * graph at {@link Scenario} initialization.
+ * 
+ * @model
+ */
+public interface TestScenarioGraphDecorator1 extends GraphDecorator {
+	/**
+	 * test label URI
+	 */
+	URI LABEL_URI = STEMURI.createURI("dynamiclabel/scenario");
+
+	/**
+	 * @model
+	 */
+	double getDoubleValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getDoubleValue <em>Double Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Double Value</em>' attribute.
+	 * @see #getDoubleValue()
+	 * @generated
+	 */
+	void setDoubleValue(double value);
+
+	/**
+	 * @model
+	 */
+	int getIntValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getIntValue <em>Int Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Int Value</em>' attribute.
+	 * @see #getIntValue()
+	 * @generated
+	 */
+	void setIntValue(int value);
+
+	/**
+	 * @model
+	 */
+	String getStringValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getStringValue <em>String Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>String Value</em>' attribute.
+	 * @see #getStringValue()
+	 * @generated
+	 */
+	void setStringValue(String value);
+
+	/**
+	 * @model
+	 */
+	STEMTime getSTEMTimeValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#getSTEMTimeValue <em>STEM Time Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>STEM Time Value</em>' reference.
+	 * @see #getSTEMTimeValue()
+	 * @generated
+	 */
+	void setSTEMTimeValue(STEMTime value);
+
+	/**
+	 * @model
+	 */
+	boolean isBooleanValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1#isBooleanValue <em>Boolean Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Boolean Value</em>' attribute.
+	 * @see #isBooleanValue()
+	 * @generated
+	 */
+	void setBooleanValue(boolean value);
+} // TestScenarioGraphDecorator1
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsFactoryImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsFactoryImpl.java
new file mode 100644
index 0000000..659f52a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsFactoryImpl.java
@@ -0,0 +1,190 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+//import org.eclipse.stem.tests.util.decorators.*;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsFactoryImpl extends EFactoryImpl implements DecoratorsFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static DecoratorsFactory init() {
+		try {
+			DecoratorsFactory theDecoratorsFactory = (DecoratorsFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/tests/util/decorators.ecore"); //$NON-NLS-1$ 
+			if (theDecoratorsFactory != null) {
+				return theDecoratorsFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new DecoratorsFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1: return createTestEdgeDecorator1();
+			case DecoratorsPackage.TEST_GRAPH_DECORATOR1: return createTestGraphDecorator1();
+			case DecoratorsPackage.TEST_NODE_DECORATOR1: return createTestNodeDecorator1();
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1: return createTestScenarioGraphDecorator1();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case DecoratorsPackage.URI:
+				return createURIFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case DecoratorsPackage.URI:
+				return convertURIToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestEdgeDecorator1 createTestEdgeDecorator1() {
+		TestEdgeDecorator1Impl testEdgeDecorator1 = new TestEdgeDecorator1Impl();
+		return testEdgeDecorator1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestGraphDecorator1 createTestGraphDecorator1() {
+		TestGraphDecorator1Impl testGraphDecorator1 = new TestGraphDecorator1Impl();
+		return testGraphDecorator1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestNodeDecorator1 createTestNodeDecorator1() {
+		TestNodeDecorator1Impl testNodeDecorator1 = new TestNodeDecorator1Impl();
+		return testNodeDecorator1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestScenarioGraphDecorator1 createTestScenarioGraphDecorator1() {
+		TestScenarioGraphDecorator1Impl testScenarioGraphDecorator1 = new TestScenarioGraphDecorator1Impl();
+		return testScenarioGraphDecorator1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public URI createURIFromString(EDataType eDataType, String initialValue) {
+		return URI.createURI(initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String convertURIToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsPackage getDecoratorsPackage() {
+		return (DecoratorsPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static DecoratorsPackage getPackage() {
+		return DecoratorsPackage.eINSTANCE;
+	}
+
+} //DecoratorsFactoryImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsPackageImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsPackageImpl.java
new file mode 100644
index 0000000..8300d6f
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/DecoratorsPackageImpl.java
@@ -0,0 +1,446 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.NodeDecorator;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsPackageImpl extends EPackageImpl implements DecoratorsPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testEdgeDecorator1EClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testGraphDecorator1EClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testNodeDecorator1EClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testScenarioGraphDecorator1EClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass edgeDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass graphDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass nodeDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType uriEDataType = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.tests.util.decorators.DecoratorsPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private DecoratorsPackageImpl() {
+		super(eNS_URI, DecoratorsFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static DecoratorsPackage init() {
+		if (isInited) return (DecoratorsPackage)EPackage.Registry.INSTANCE.getEPackage(DecoratorsPackage.eNS_URI);
+
+		// Obtain or create and register package
+		DecoratorsPackageImpl theDecoratorsPackage = (DecoratorsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof DecoratorsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new DecoratorsPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		ModelPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		GraphPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI) : LabelsPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theDecoratorsPackage.createPackageContents();
+		theLabelsPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theDecoratorsPackage.initializePackageContents();
+		theLabelsPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theDecoratorsPackage.freeze();
+
+		return theDecoratorsPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestEdgeDecorator1() {
+		return testEdgeDecorator1EClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestEdgeDecorator1_NodeAURI() {
+		return (EAttribute)testEdgeDecorator1EClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestEdgeDecorator1_NodeBURI() {
+		return (EAttribute)testEdgeDecorator1EClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestEdgeDecorator1_EdgeURI() {
+		return (EAttribute)testEdgeDecorator1EClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestGraphDecorator1() {
+		return testGraphDecorator1EClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestNodeDecorator1() {
+		return testNodeDecorator1EClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestScenarioGraphDecorator1() {
+		return testScenarioGraphDecorator1EClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestScenarioGraphDecorator1_DoubleValue() {
+		return (EAttribute)testScenarioGraphDecorator1EClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestScenarioGraphDecorator1_IntValue() {
+		return (EAttribute)testScenarioGraphDecorator1EClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestScenarioGraphDecorator1_StringValue() {
+		return (EAttribute)testScenarioGraphDecorator1EClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getTestScenarioGraphDecorator1_STEMTimeValue() {
+		return (EReference)testScenarioGraphDecorator1EClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestScenarioGraphDecorator1_BooleanValue() {
+		return (EAttribute)testScenarioGraphDecorator1EClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getEdgeDecorator() {
+		return edgeDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGraphDecorator() {
+		return graphDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNodeDecorator() {
+		return nodeDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getURI() {
+		return uriEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsFactory getDecoratorsFactory() {
+		return (DecoratorsFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		testEdgeDecorator1EClass = createEClass(TEST_EDGE_DECORATOR1);
+		createEAttribute(testEdgeDecorator1EClass, TEST_EDGE_DECORATOR1__NODE_AURI);
+		createEAttribute(testEdgeDecorator1EClass, TEST_EDGE_DECORATOR1__NODE_BURI);
+		createEAttribute(testEdgeDecorator1EClass, TEST_EDGE_DECORATOR1__EDGE_URI);
+
+		testGraphDecorator1EClass = createEClass(TEST_GRAPH_DECORATOR1);
+
+		testNodeDecorator1EClass = createEClass(TEST_NODE_DECORATOR1);
+
+		testScenarioGraphDecorator1EClass = createEClass(TEST_SCENARIO_GRAPH_DECORATOR1);
+		createEAttribute(testScenarioGraphDecorator1EClass, TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE);
+		createEAttribute(testScenarioGraphDecorator1EClass, TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE);
+		createEAttribute(testScenarioGraphDecorator1EClass, TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE);
+		createEReference(testScenarioGraphDecorator1EClass, TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE);
+		createEAttribute(testScenarioGraphDecorator1EClass, TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE);
+
+		edgeDecoratorEClass = createEClass(EDGE_DECORATOR);
+
+		graphDecoratorEClass = createEClass(GRAPH_DECORATOR);
+
+		nodeDecoratorEClass = createEClass(NODE_DECORATOR);
+
+		// Create data types
+		uriEDataType = createEDataType(URI);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		testEdgeDecorator1EClass.getESuperTypes().add(theModelPackage.getEdgeDecorator());
+		testGraphDecorator1EClass.getESuperTypes().add(theModelPackage.getGraphDecorator());
+		testNodeDecorator1EClass.getESuperTypes().add(theModelPackage.getNodeDecorator());
+		testScenarioGraphDecorator1EClass.getESuperTypes().add(theModelPackage.getGraphDecorator());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(testEdgeDecorator1EClass, TestEdgeDecorator1.class, "TestEdgeDecorator1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTestEdgeDecorator1_NodeAURI(), this.getURI(), "nodeAURI", null, 0, 1, TestEdgeDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTestEdgeDecorator1_NodeBURI(), this.getURI(), "nodeBURI", null, 0, 1, TestEdgeDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTestEdgeDecorator1_EdgeURI(), this.getURI(), "edgeURI", null, 0, 1, TestEdgeDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testGraphDecorator1EClass, TestGraphDecorator1.class, "TestGraphDecorator1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(testNodeDecorator1EClass, TestNodeDecorator1.class, "TestNodeDecorator1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(testScenarioGraphDecorator1EClass, TestScenarioGraphDecorator1.class, "TestScenarioGraphDecorator1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTestScenarioGraphDecorator1_DoubleValue(), ecorePackage.getEDouble(), "doubleValue", null, 0, 1, TestScenarioGraphDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTestScenarioGraphDecorator1_IntValue(), ecorePackage.getEInt(), "intValue", null, 0, 1, TestScenarioGraphDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTestScenarioGraphDecorator1_StringValue(), ecorePackage.getEString(), "stringValue", null, 0, 1, TestScenarioGraphDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEReference(getTestScenarioGraphDecorator1_STEMTimeValue(), theModelPackage.getSTEMTime(), null, "sTEMTimeValue", null, 0, 1, TestScenarioGraphDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getTestScenarioGraphDecorator1_BooleanValue(), ecorePackage.getEBoolean(), "booleanValue", null, 0, 1, TestScenarioGraphDecorator1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(edgeDecoratorEClass, EdgeDecorator.class, "EdgeDecorator", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(graphDecoratorEClass, GraphDecorator.class, "GraphDecorator", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(nodeDecoratorEClass, NodeDecorator.class, "NodeDecorator", IS_ABSTRACT, IS_INTERFACE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Initialize data types
+		initEDataType(uriEDataType, org.eclipse.emf.common.util.URI.class, "URI", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //DecoratorsPackageImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestEdgeDecorator1Impl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestEdgeDecorator1Impl.java
new file mode 100644
index 0000000..c1abd3a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestEdgeDecorator1Impl.java
@@ -0,0 +1,333 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.LabelValue;
+//import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.EdgeDecoratorImpl;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Edge Decorator1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl#getNodeAURI <em>Node AURI</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl#getNodeBURI <em>Node BURI</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestEdgeDecorator1Impl#getEdgeURI <em>Edge URI</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestEdgeDecorator1Impl extends EdgeDecoratorImpl implements
+		TestEdgeDecorator1 {
+	/**
+	 * The default value of the '{@link #getNodeAURI() <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeAURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI NODE_AURI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNodeAURI() <em>Node AURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeAURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI nodeAURI = NODE_AURI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getNodeBURI() <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeBURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI NODE_BURI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getNodeBURI() <em>Node BURI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getNodeBURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI nodeBURI = NODE_BURI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getEdgeURI() <em>Edge URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEdgeURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final URI EDGE_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getEdgeURI() <em>Edge URI</em>}' attribute.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @see #getEdgeURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected URI edgeURI = EDGE_URI_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestEdgeDecorator1Impl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DecoratorsPackage.Literals.TEST_EDGE_DECORATOR1;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getNodeAURI() {
+		return nodeAURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNodeAURI(URI newNodeAURI) {
+		URI oldNodeAURI = nodeAURI;
+		nodeAURI = newNodeAURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI, oldNodeAURI, nodeAURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getNodeBURI() {
+		return nodeBURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNodeBURI(URI newNodeBURI) {
+		URI oldNodeBURI = nodeBURI;
+		nodeBURI = newNodeBURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI, oldNodeBURI, nodeBURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public URI getEdgeURI() {
+		return edgeURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEdgeURI(URI newEdgeURI) {
+		URI oldEdgeURI = edgeURI;
+		edgeURI = newEdgeURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI, oldEdgeURI, edgeURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI:
+				return getNodeAURI();
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI:
+				return getNodeBURI();
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI:
+				return getEdgeURI();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI:
+				setNodeAURI((URI)newValue);
+				return;
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI:
+				setNodeBURI((URI)newValue);
+				return;
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI:
+				setEdgeURI((URI)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI:
+				setNodeAURI(NODE_AURI_EDEFAULT);
+				return;
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI:
+				setNodeBURI(NODE_BURI_EDEFAULT);
+				return;
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI:
+				setEdgeURI(EDGE_URI_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI:
+				return NODE_AURI_EDEFAULT == null ? nodeAURI != null : !NODE_AURI_EDEFAULT.equals(nodeAURI);
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI:
+				return NODE_BURI_EDEFAULT == null ? nodeBURI != null : !NODE_BURI_EDEFAULT.equals(nodeBURI);
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI:
+				return EDGE_URI_EDEFAULT == null ? edgeURI != null : !EDGE_URI_EDEFAULT.equals(edgeURI);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (nodeAURI: "); //$NON-NLS-1$
+		result.append(nodeAURI);
+		result.append(", nodeBURI: "); //$NON-NLS-1$
+		result.append(nodeBURI);
+		result.append(", edgeURI: "); //$NON-NLS-1$
+		result.append(edgeURI);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void decorateGraph() {
+		final Node nodeA = getGraph().getNode(getNodeAURI());
+		final Node nodeB = getGraph().getNode(getNodeBURI());
+
+		final TestEdgeDecorator1 ted = DecoratorsFactory.eINSTANCE
+		.createTestEdgeDecorator1();
+		
+		final Edge edge = TestUtil.createDynamicallyLabeledEdge(getNodeAURI(),
+				getNodeBURI(),getEdgeURI(), ted);
+		edge.setA(nodeA);
+		edge.setB(nodeB);
+		nodeA.getEdges().add(edge);
+		nodeB.getEdges().add(edge);
+
+		getLabelsToUpdate().add((DynamicLabel)edge.getLabel());
+
+//		getGraph().addDynamicLabel((DynamicLabel) edge.getLabel());
+		getGraph().putEdge(edge);
+
+		assert edge.sane();
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(Graph, STEMTime, long)
+	 * @generated NOT
+	 */
+	@Override
+	public void updateLabels(STEMTime time, final long timeDelta, int cycele) {
+		for (final Iterator dynamicLabelIter = getLabelsToUpdate().iterator(); dynamicLabelIter
+				.hasNext();) {
+			final TestDynamicEdgeLabel testLabel = (TestDynamicEdgeLabel) dynamicLabelIter
+					.next();
+			testLabel.increment();
+		} // for
+	} // updateLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void resetLabels() {
+		final TestDynamicLabel1 TEST_LABEL = TestUtil
+				.createDynamicLabel(TestUtil.createNextIdentifiableToLabelURI());
+		final TestIntegerLabelValue RESET_VALUE = (TestIntegerLabelValue) TEST_LABEL
+				.getCurrentValue();
+		for (Iterator labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final TestDynamicEdgeLabel dynamicLabel = (TestDynamicEdgeLabel) labelIter
+					.next();
+			dynamicLabel.setCurrentValue((LabelValue)EcoreUtil
+					.copy(RESET_VALUE));
+		}
+	} // resetLabels
+
+} // TestEdgeDecorator1Impl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestGraphDecorator1Impl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestGraphDecorator1Impl.java
new file mode 100644
index 0000000..d30bb9d
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestGraphDecorator1Impl.java
@@ -0,0 +1,100 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.LabelValue;
+//import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.GraphDecoratorImpl;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Graph Decorator1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestGraphDecorator1Impl extends GraphDecoratorImpl implements
+		TestGraphDecorator1 {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestGraphDecorator1Impl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DecoratorsPackage.Literals.TEST_GRAPH_DECORATOR1;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void decorateGraph() {
+		final DynamicLabel dynamicLabel = TestUtil.createDynamicLabel(getGraph().getURI());
+		getLabelsToUpdate().add(dynamicLabel);
+		getGraph().putGraphLabel(dynamicLabel);
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(Graph, STEMTime, long)
+	 * @generated NOT
+	 */
+	@Override
+	public void updateLabels(STEMTime time, final long timeDelta, int cycle) {
+		for (final Iterator dynamicLabelIter = getLabelsToUpdate().iterator(); dynamicLabelIter
+				.hasNext();) {
+			final TestDynamicLabel1 testLabel = (TestDynamicLabel1) dynamicLabelIter
+					.next();
+			testLabel.increment();
+		} // for
+	} // updateLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void resetLabels() {
+		final TestDynamicLabel1 TEST_LABEL = TestUtil
+				.createDynamicLabel(TestUtil.createNextIdentifiableToLabelURI());
+		final TestIntegerLabelValue RESET_VALUE = (TestIntegerLabelValue) TEST_LABEL
+				.getCurrentValue();
+		for (Iterator labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final TestDynamicLabel1 dynamicLabel = (TestDynamicLabel1) labelIter
+					.next();
+			dynamicLabel.setCurrentValue((LabelValue)EcoreUtil
+					.copy(RESET_VALUE));
+		}
+		assert this.sane();
+	} // resetLabels
+} // TestGraphDecorator1Impl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestNodeDecorator1Impl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestNodeDecorator1Impl.java
new file mode 100644
index 0000000..2d07d37
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestNodeDecorator1Impl.java
@@ -0,0 +1,119 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.LabelValue;
+//import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.NodeDecoratorImpl;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Node Decorator1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestNodeDecorator1Impl extends NodeDecoratorImpl implements
+		TestNodeDecorator1 {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestNodeDecorator1Impl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DecoratorsPackage.Literals.TEST_NODE_DECORATOR1;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void decorateGraph() {
+		final TestNodeDecorator1 tnd = DecoratorsFactory.eINSTANCE
+		.createTestNodeDecorator1();
+		getGraph().getDecorators().add(tnd);
+		for (final Iterator nodeIter = getGraph().getNodes().values().iterator(); nodeIter
+				.hasNext();) {
+			final Node node = (Node) nodeIter.next();
+			final DynamicNodeLabel dynamicNodeLabel = TestUtil.createDynamicNodeLabel(node.getURI(), tnd);
+			getGraph().putNodeLabel(dynamicNodeLabel);
+			getLabelsToUpdate().add(dynamicNodeLabel);
+			node.getLabels().add(dynamicNodeLabel);
+		} // for
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(Graph, STEMTime, long)
+	 * @generated NOT
+	 */
+	@Override
+	public void updateLabels(STEMTime time, final long timeDelta, int cycle) {
+		for (final Iterator dynamicLabelIter = getLabelsToUpdate().iterator(); dynamicLabelIter
+				.hasNext();) {
+			final DynamicLabel testLabel = (DynamicLabel) dynamicLabelIter
+					.next();
+			if (testLabel instanceof TestDynamicLabel1) {
+				TestDynamicLabel1 tdl1 = (TestDynamicLabel1) testLabel;
+				tdl1.increment();
+			}
+			if (testLabel instanceof TestDynamicNodeLabel) {
+				TestDynamicNodeLabel tdnl = (TestDynamicNodeLabel) testLabel;
+				tdnl.increment();
+			}
+		} // for
+	} // updateLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels(org.eclipse.stem.core.graph.Graph)
+	 * @generated NOT
+	 */
+	@Override
+	public void resetLabels() {
+		final TestDynamicLabel1 TEST_LABEL = TestUtil
+				.createDynamicLabel(TestUtil.createNextIdentifiableToLabelURI());
+		final TestIntegerLabelValue RESET_VALUE = (TestIntegerLabelValue) TEST_LABEL
+				.getCurrentValue();
+		for (Iterator labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final DynamicLabel dynamicLabel = (DynamicLabel) labelIter
+					.next();
+			dynamicLabel.setCurrentValue((LabelValue)EcoreUtil
+					.copy(RESET_VALUE));
+		}
+	} // resetLabels
+
+} // TestNodeDecorator1Impl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestScenarioGraphDecorator1Impl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestScenarioGraphDecorator1Impl.java
new file mode 100644
index 0000000..8e347e1
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/impl/TestScenarioGraphDecorator1Impl.java
@@ -0,0 +1,438 @@
+package org.eclipse.stem.tests.util.decorators.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.LabelValue;
+//import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.model.impl.GraphDecoratorImpl;
+import org.eclipse.stem.tests.util.TestUtil;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Scenario Graph Decorator1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl#getDoubleValue <em>Double Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl#getIntValue <em>Int Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl#getStringValue <em>String Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl#getSTEMTimeValue <em>STEM Time Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.tests.util.decorators.impl.TestScenarioGraphDecorator1Impl#isBooleanValue <em>Boolean Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestScenarioGraphDecorator1Impl extends GraphDecoratorImpl
+		implements TestScenarioGraphDecorator1 {
+	/**
+	 * The default value of the '{@link #getDoubleValue() <em>Double Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDoubleValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double DOUBLE_VALUE_EDEFAULT = 0.0;
+	/**
+	 * The cached value of the '{@link #getDoubleValue() <em>Double Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDoubleValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected double doubleValue = DOUBLE_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getIntValue() <em>Int Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIntValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int INT_VALUE_EDEFAULT = 0;
+	/**
+	 * The cached value of the '{@link #getIntValue() <em>Int Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIntValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int intValue = INT_VALUE_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getStringValue() <em>String Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStringValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String STRING_VALUE_EDEFAULT = null;
+	/**
+	 * The cached value of the '{@link #getStringValue() <em>String Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStringValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected String stringValue = STRING_VALUE_EDEFAULT;
+	/**
+	 * The cached value of the '{@link #getSTEMTimeValue() <em>STEM Time Value</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSTEMTimeValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime sTEMTimeValue;
+
+	/**
+	 * The default value of the '{@link #isBooleanValue() <em>Boolean Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBooleanValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean BOOLEAN_VALUE_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isBooleanValue() <em>Boolean Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isBooleanValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean booleanValue = BOOLEAN_VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestScenarioGraphDecorator1Impl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getDoubleValue() {
+		return doubleValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDoubleValue(double newDoubleValue) {
+		double oldDoubleValue = doubleValue;
+		doubleValue = newDoubleValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE, oldDoubleValue, doubleValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getIntValue() {
+		return intValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIntValue(int newIntValue) {
+		int oldIntValue = intValue;
+		intValue = newIntValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE, oldIntValue, intValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getStringValue() {
+		return stringValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStringValue(String newStringValue) {
+		String oldStringValue = stringValue;
+		stringValue = newStringValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE, oldStringValue, stringValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getSTEMTimeValue() {
+		if (sTEMTimeValue != null && sTEMTimeValue.eIsProxy()) {
+			InternalEObject oldSTEMTimeValue = (InternalEObject)sTEMTimeValue;
+			sTEMTimeValue = (STEMTime)eResolveProxy(oldSTEMTimeValue);
+			if (sTEMTimeValue != oldSTEMTimeValue) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE, oldSTEMTimeValue, sTEMTimeValue));
+			}
+		}
+		return sTEMTimeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetSTEMTimeValue() {
+		return sTEMTimeValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSTEMTimeValue(STEMTime newSTEMTimeValue) {
+		STEMTime oldSTEMTimeValue = sTEMTimeValue;
+		sTEMTimeValue = newSTEMTimeValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE, oldSTEMTimeValue, sTEMTimeValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isBooleanValue() {
+		return booleanValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBooleanValue(boolean newBooleanValue) {
+		boolean oldBooleanValue = booleanValue;
+		booleanValue = newBooleanValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE, oldBooleanValue, booleanValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE:
+				return new Double(getDoubleValue());
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE:
+				return new Integer(getIntValue());
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE:
+				return getStringValue();
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE:
+				if (resolve) return getSTEMTimeValue();
+				return basicGetSTEMTimeValue();
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE:
+				return isBooleanValue() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE:
+				setDoubleValue(((Double)newValue).doubleValue());
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE:
+				setIntValue(((Integer)newValue).intValue());
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE:
+				setStringValue((String)newValue);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE:
+				setSTEMTimeValue((STEMTime)newValue);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE:
+				setBooleanValue(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE:
+				setDoubleValue(DOUBLE_VALUE_EDEFAULT);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE:
+				setIntValue(INT_VALUE_EDEFAULT);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE:
+				setStringValue(STRING_VALUE_EDEFAULT);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE:
+				setSTEMTimeValue((STEMTime)null);
+				return;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE:
+				setBooleanValue(BOOLEAN_VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE:
+				return doubleValue != DOUBLE_VALUE_EDEFAULT;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE:
+				return intValue != INT_VALUE_EDEFAULT;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE:
+				return STRING_VALUE_EDEFAULT == null ? stringValue != null : !STRING_VALUE_EDEFAULT.equals(stringValue);
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE:
+				return sTEMTimeValue != null;
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE:
+				return booleanValue != BOOLEAN_VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (doubleValue: "); //$NON-NLS-1$
+		result.append(doubleValue);
+		result.append(", intValue: "); //$NON-NLS-1$
+		result.append(intValue);
+		result.append(", stringValue: "); //$NON-NLS-1$
+		result.append(stringValue);
+		result.append(", booleanValue: "); //$NON-NLS-1$
+		result.append(booleanValue);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#decorateGraph(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void decorateGraph() {
+		final DynamicLabel dynamicLabel = TestUtil.createDynamicLabel(getGraph()
+				.getURI());
+		dynamicLabel.setURI(LABEL_URI);
+		getLabelsToUpdate().add(dynamicLabel);
+		getGraph().putGraphLabel(dynamicLabel);
+//		getGraph().addDynamicLabel(dynamicLabel);
+	} // decorateGraph
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#updateLabels(Graph, STEMTime, long)
+	 *      org.eclipse.stem.core.model.STEMTime)
+	 */
+	@Override
+	public void updateLabels(STEMTime time, final long timeDelta, int cycle) {
+		for (final Iterator dynamicLabelIter = getLabelsToUpdate().iterator(); dynamicLabelIter
+				.hasNext();) {
+			final TestDynamicLabel1 testLabel = (TestDynamicLabel1) dynamicLabelIter
+					.next();
+			testLabel.increment();
+		} // for
+	} // updateLabels
+
+	/**
+	 * @see org.eclipse.stem.core.model.impl.DecoratorImpl#resetLabels(org.eclipse.stem.core.graph.Graph)
+	 */
+	@Override
+	public void resetLabels() {
+		final TestDynamicLabel1 TEST_LABEL = TestUtil
+				.createDynamicLabel(TestUtil.createNextIdentifiableToLabelURI());
+		final TestIntegerLabelValue RESET_VALUE = (TestIntegerLabelValue) TEST_LABEL
+				.getCurrentValue();
+		for (Iterator labelIter = getLabelsToUpdate().iterator(); labelIter
+				.hasNext();) {
+			final TestDynamicLabel1 dynamicLabel = (TestDynamicLabel1) labelIter
+					.next();
+			dynamicLabel.setCurrentValue((LabelValue)EcoreUtil
+					.copy(RESET_VALUE));
+		}
+	} // resetLabels
+
+} // TestScenarioGraphDecorator1Impl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsActionBarContributor.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsActionBarContributor.java
new file mode 100644
index 0000000..2e4a7d7
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsActionBarContributor.java
@@ -0,0 +1,430 @@
+package org.eclipse.stem.tests.util.decorators.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Decorators model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(TestutilityEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(TestutilityEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("decorators-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("decorators-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditor_menu"), "org.eclipse.stem.tests.util.decoratorsMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsEditor.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsEditor.java
new file mode 100644
index 0000000..8ff70f2
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsEditor.java
@@ -0,0 +1,1504 @@
+package org.eclipse.stem.tests.util.decorators.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.tests.util.decorators.provider.DecoratorsItemProviderAdapterFactory;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.provider.LabelsItemProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+
+/**
+ * This is an example of a Decorators model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(DecoratorsEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(DecoratorsEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == DecoratorsEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						removedResources.addAll(visitor.getRemovedResources());
+						if (!isDirty()) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 getSite().getPage().closeEditor(DecoratorsEditor.this, false);
+									 }
+								 });
+						}
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						changedResources.addAll(visitor.getChangedResources());
+						if (getSite().getPage().getActiveEditor() == DecoratorsEditor.this) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 handleActivate();
+									 }
+								 });
+						}
+					}
+				}
+				catch (CoreException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(DecoratorsEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						TestutilityEditPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new DecoratorsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			// I don't know if this should be run this deferred
+			// because we might have to give the editor a chance to process the viewer update events
+			// and hence to update the views first.
+			//
+			//
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			runnable.run();
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						DecoratorsEditor.this.setSelectionToViewer(selection);
+						DecoratorsEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			TestutilityEditPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			TestutilityEditPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return TestutilityEditPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return TestutilityEditPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsModelWizard.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsModelWizard.java
new file mode 100644
index 0000000..c126b6f
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/presentation/DecoratorsModelWizard.java
@@ -0,0 +1,597 @@
+package org.eclipse.stem.tests.util.decorators.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.tests.util.decorators.DecoratorsFactory;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsModelWizard extends Wizard implements INewWizard {
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorsPackage decoratorsPackage = DecoratorsPackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorsFactory decoratorsFactory = decoratorsPackage.getDecoratorsFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorsModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorsModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_Wizard_label")); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(TestutilityEditPlugin.INSTANCE.getImage("full/wizban/NewDecorators"))); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : decoratorsPackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass)eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, java.text.Collator.getInstance());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass)decoratorsPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = decoratorsFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation =
+				new WorkspaceModifyOperation() {
+					@Override
+					protected void execute(IProgressMonitor progressMonitor) {
+						try {
+							// Create a resource set
+							//
+							ResourceSet resourceSet = new ResourceSetImpl();
+
+							// Get the URI of the model file.
+							//
+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+							// Create a resource for this file.
+							//
+							Resource resource = resourceSet.createResource(fileURI);
+
+							// Add the initial model object to the contents.
+							//
+							EObject rootObject = createInitialModel();
+							if (rootObject != null) {
+								resource.getContents().add(rootObject);
+							}
+
+							// Save the contents of the resource to the file system.
+							//
+							Map<Object, Object> options = new HashMap<Object, Object>();
+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+							resource.save(options);
+						}
+						catch (Exception exception) {
+							TestutilityEditPlugin.INSTANCE.log(exception);
+						}
+						finally {
+							progressMonitor.done();
+						}
+					}
+				};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec
+					(new Runnable() {
+						 public void run() {
+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
+						 }
+					 });
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor
+					(new FileEditorInput(modelFile),
+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			}
+			catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(), TestutilityEditPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); //$NON-NLS-1$
+				return false;
+			}
+
+			return true;
+		}
+		catch (Exception exception) {
+			TestutilityEditPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class DecoratorsModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public DecoratorsModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				// Make sure the file ends in ".decorators".
+				//
+				String requiredExt = TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditorFilenameExtension"); //$NON-NLS-1$
+				String enteredExt = new Path(getFileName()).getFileExtension();
+				if (enteredExt == null || !enteredExt.equals(requiredExt)) {
+					setErrorMessage(TestutilityEditPlugin.INSTANCE.getString("_WARN_FilenameExtension", new Object [] { requiredExt })); //$NON-NLS-1$
+					return false;
+				}
+				else {
+					return true;
+				}
+			}
+			else {
+				return false;
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class DecoratorsModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public DecoratorsModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE); {
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(TestutilityEditPlugin.INSTANCE.getString("_UI_ModelObject")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(TestutilityEditPlugin.INSTANCE.getString("_UI_XMLEncoding")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator =
+			new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					setPageComplete(validatePage());
+				}
+			};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				}
+				else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return TestutilityEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			catch(MissingResourceException mre) {
+				TestutilityEditPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(TestutilityEditPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) //$NON-NLS-1$
+				{
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new DecoratorsModelWizardNewFileCreationPage("Whatever", selection); //$NON-NLS-1$
+		newFileCreationPage.setTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsModelWizard_label")); //$NON-NLS-1$
+		newFileCreationPage.setDescription(TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsModelWizard_description")); //$NON-NLS-1$
+		newFileCreationPage.setFileName(TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditorFilenameDefaultBase") + "." + TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditorFilenameExtension")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource)selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditorFilenameDefaultBase"); //$NON-NLS-1$
+					String defaultModelFilenameExtension = TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsEditorFilenameExtension"); //$NON-NLS-1$
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension; //$NON-NLS-1$
+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension; //$NON-NLS-1$
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new DecoratorsModelWizardInitialObjectCreationPage("Whatever2"); //$NON-NLS-1$
+		initialObjectCreationPage.setTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_DecoratorsModelWizard_label")); //$NON-NLS-1$
+		initialObjectCreationPage.setDescription(TestutilityEditPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); //$NON-NLS-1$
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/CoretestEditPlugin.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/CoretestEditPlugin.java
new file mode 100644
index 0000000..72e11db
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/CoretestEditPlugin.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the central singleton for the Coretest editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class CoretestEditPlugin extends EMFPlugin {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = ""; //$NON-NLS-1$
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final CoretestEditPlugin INSTANCE = new CoretestEditPlugin();
+
+	/**
+	 * 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 CoretestEditPlugin() {
+		super
+		  (new ResourceLocator [] {
+		     CoreEditPlugin.INSTANCE,
+		   });
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/DecoratorsItemProviderAdapterFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/DecoratorsItemProviderAdapterFactory.java
new file mode 100644
index 0000000..02c1ce1
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/DecoratorsItemProviderAdapterFactory.java
@@ -0,0 +1,278 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.tests.util.decorators.util.DecoratorsAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DecoratorsItemProviderAdapterFactory extends DecoratorsAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestEdgeDecorator1ItemProvider testEdgeDecorator1ItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestEdgeDecorator1Adapter() {
+		if (testEdgeDecorator1ItemProvider == null) {
+			testEdgeDecorator1ItemProvider = new TestEdgeDecorator1ItemProvider(this);
+		}
+
+		return testEdgeDecorator1ItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.decorators.TestGraphDecorator1} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestGraphDecorator1ItemProvider testGraphDecorator1ItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.decorators.TestGraphDecorator1}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestGraphDecorator1Adapter() {
+		if (testGraphDecorator1ItemProvider == null) {
+			testGraphDecorator1ItemProvider = new TestGraphDecorator1ItemProvider(this);
+		}
+
+		return testGraphDecorator1ItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.decorators.TestNodeDecorator1} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestNodeDecorator1ItemProvider testNodeDecorator1ItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.decorators.TestNodeDecorator1}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestNodeDecorator1Adapter() {
+		if (testNodeDecorator1ItemProvider == null) {
+			testNodeDecorator1ItemProvider = new TestNodeDecorator1ItemProvider(this);
+		}
+
+		return testNodeDecorator1ItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestScenarioGraphDecorator1ItemProvider testScenarioGraphDecorator1ItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestScenarioGraphDecorator1Adapter() {
+		if (testScenarioGraphDecorator1ItemProvider == null) {
+			testScenarioGraphDecorator1ItemProvider = new TestScenarioGraphDecorator1ItemProvider(this);
+		}
+
+		return testScenarioGraphDecorator1ItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (testEdgeDecorator1ItemProvider != null) testEdgeDecorator1ItemProvider.dispose();
+		if (testGraphDecorator1ItemProvider != null) testGraphDecorator1ItemProvider.dispose();
+		if (testNodeDecorator1ItemProvider != null) testNodeDecorator1ItemProvider.dispose();
+		if (testScenarioGraphDecorator1ItemProvider != null) testScenarioGraphDecorator1ItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestEdgeDecorator1ItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestEdgeDecorator1ItemProvider.java
new file mode 100644
index 0000000..e35bc16
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestEdgeDecorator1ItemProvider.java
@@ -0,0 +1,212 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.model.provider.EdgeDecoratorItemProvider;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestEdgeDecorator1ItemProvider
+	extends EdgeDecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestEdgeDecorator1ItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addNodeAURIPropertyDescriptor(object);
+			addNodeBURIPropertyDescriptor(object);
+			addEdgeURIPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Node AURI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodeAURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestEdgeDecorator1_nodeAURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestEdgeDecorator1_nodeAURI_feature", "_UI_TestEdgeDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_EDGE_DECORATOR1__NODE_AURI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Node BURI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNodeBURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestEdgeDecorator1_nodeBURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestEdgeDecorator1_nodeBURI_feature", "_UI_TestEdgeDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_EDGE_DECORATOR1__NODE_BURI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Edge URI feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEdgeURIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestEdgeDecorator1_edgeURI_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestEdgeDecorator1_edgeURI_feature", "_UI_TestEdgeDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_EDGE_DECORATOR1__EDGE_URI,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns TestEdgeDecorator1.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestEdgeDecorator1")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestEdgeDecorator1)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestEdgeDecorator1_type") : //$NON-NLS-1$
+			getString("_UI_TestEdgeDecorator1_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestEdgeDecorator1.class)) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_AURI:
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__NODE_BURI:
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1__EDGE_URI:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestGraphDecorator1ItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestGraphDecorator1ItemProvider.java
new file mode 100644
index 0000000..d63a6aa
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestGraphDecorator1ItemProvider.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.model.provider.GraphDecoratorItemProvider;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.decorators.TestGraphDecorator1} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestGraphDecorator1ItemProvider
+	extends GraphDecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestGraphDecorator1ItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestGraphDecorator1.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestGraphDecorator1")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestGraphDecorator1)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestGraphDecorator1_type") : //$NON-NLS-1$
+			getString("_UI_TestGraphDecorator1_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestNodeDecorator1ItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestNodeDecorator1ItemProvider.java
new file mode 100644
index 0000000..3f62973
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestNodeDecorator1ItemProvider.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.model.provider.NodeDecoratorItemProvider;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.decorators.TestNodeDecorator1} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestNodeDecorator1ItemProvider
+	extends NodeDecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestNodeDecorator1ItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestNodeDecorator1.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestNodeDecorator1")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestNodeDecorator1)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestNodeDecorator1_type") : //$NON-NLS-1$
+			getString("_UI_TestNodeDecorator1_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestScenarioGraphDecorator1ItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestScenarioGraphDecorator1ItemProvider.java
new file mode 100644
index 0000000..7ae3dd8
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestScenarioGraphDecorator1ItemProvider.java
@@ -0,0 +1,259 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.model.provider.GraphDecoratorItemProvider;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestScenarioGraphDecorator1ItemProvider
+	extends GraphDecoratorItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestScenarioGraphDecorator1ItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addDoubleValuePropertyDescriptor(object);
+			addIntValuePropertyDescriptor(object);
+			addStringValuePropertyDescriptor(object);
+			addSTEMTimeValuePropertyDescriptor(object);
+			addBooleanValuePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Double Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addDoubleValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestScenarioGraphDecorator1_doubleValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestScenarioGraphDecorator1_doubleValue_feature", "_UI_TestScenarioGraphDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.REAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Int Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIntValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestScenarioGraphDecorator1_intValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestScenarioGraphDecorator1_intValue_feature", "_UI_TestScenarioGraphDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the String Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addStringValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestScenarioGraphDecorator1_stringValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestScenarioGraphDecorator1_stringValue_feature", "_UI_TestScenarioGraphDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the STEM Time Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSTEMTimeValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestScenarioGraphDecorator1_sTEMTimeValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestScenarioGraphDecorator1_sTEMTimeValue_feature", "_UI_TestScenarioGraphDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1__STEM_TIME_VALUE,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Boolean Value feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addBooleanValuePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestScenarioGraphDecorator1_booleanValue_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestScenarioGraphDecorator1_booleanValue_feature", "_UI_TestScenarioGraphDecorator1_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 DecoratorsPackage.Literals.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns TestScenarioGraphDecorator1.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestScenarioGraphDecorator1")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestScenarioGraphDecorator1)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestScenarioGraphDecorator1_type") : //$NON-NLS-1$
+			getString("_UI_TestScenarioGraphDecorator1_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestScenarioGraphDecorator1.class)) {
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__DOUBLE_VALUE:
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__INT_VALUE:
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__STRING_VALUE:
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1__BOOLEAN_VALUE:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestutilityEditPlugin.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestutilityEditPlugin.java
new file mode 100644
index 0000000..406eba6
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/provider/TestutilityEditPlugin.java
@@ -0,0 +1,102 @@
+package org.eclipse.stem.tests.util.decorators.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+/**
+ * This is the central singleton for the Testutility editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class TestutilityEditPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final TestutilityEditPlugin INSTANCE = new TestutilityEditPlugin();
+
+	/**
+	 * 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 TestutilityEditPlugin() {
+		super
+			(new ResourceLocator [] {
+				CoreEditPlugin.INSTANCE,
+				EcoreEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsAdapterFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsAdapterFactory.java
new file mode 100644
index 0000000..3131aa2
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsAdapterFactory.java
@@ -0,0 +1,352 @@
+package org.eclipse.stem.tests.util.decorators.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+//import org.eclipse.stem.tests.util.decorators.*;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.decorators.DecoratorsPackage
+ * @generated
+ */
+public class DecoratorsAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static DecoratorsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = DecoratorsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DecoratorsSwitch<Adapter> modelSwitch =
+		new DecoratorsSwitch<Adapter>() {
+			@Override
+			public Adapter caseTestEdgeDecorator1(TestEdgeDecorator1 object) {
+				return createTestEdgeDecorator1Adapter();
+			}
+			@Override
+			public Adapter caseTestGraphDecorator1(TestGraphDecorator1 object) {
+				return createTestGraphDecorator1Adapter();
+			}
+			@Override
+			public Adapter caseTestNodeDecorator1(TestNodeDecorator1 object) {
+				return createTestNodeDecorator1Adapter();
+			}
+			@Override
+			public Adapter caseTestScenarioGraphDecorator1(TestScenarioGraphDecorator1 object) {
+				return createTestScenarioGraphDecorator1Adapter();
+			}
+			@Override
+			public Adapter caseEdgeDecorator(EdgeDecorator object) {
+				return createEdgeDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseGraphDecorator(GraphDecorator object) {
+				return createGraphDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator(NodeDecorator object) {
+				return createNodeDecoratorAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseEdgeDecorator_1(EdgeDecorator object) {
+				return createEdgeDecorator_1Adapter();
+			}
+			@Override
+			public Adapter caseGraphDecorator_1(GraphDecorator object) {
+				return createGraphDecorator_1Adapter();
+			}
+			@Override
+			public Adapter caseNodeDecorator_1(NodeDecorator object) {
+				return createNodeDecorator_1Adapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.decorators.TestNodeDecorator1 <em>Test Node Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.decorators.TestNodeDecorator1
+	 * @generated
+	 */
+	public Adapter createTestNodeDecorator1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1 <em>Test Edge Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1
+	 * @generated
+	 */
+	public Adapter createTestEdgeDecorator1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.decorators.TestGraphDecorator1 <em>Test Graph Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.decorators.TestGraphDecorator1
+	 * @generated
+	 */
+	public Adapter createTestGraphDecorator1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1 <em>Test Scenario Graph Decorator1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1
+	 * @generated
+	 */
+	public Adapter createTestScenarioGraphDecorator1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @generated
+	 */
+	public Adapter createEdgeDecorator_1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @generated
+	 */
+	public Adapter createGraphDecorator_1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.NodeDecorator <em>Node Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.NodeDecorator
+	 * @generated
+	 */
+	public Adapter createNodeDecorator_1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @generated
+	 */
+	public Adapter createEdgeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.GraphDecorator <em>Graph Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.GraphDecorator
+	 * @generated
+	 */
+	public Adapter createGraphDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //DecoratorsAdapterFactory
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsSwitch.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsSwitch.java
new file mode 100644
index 0000000..7f6dc5b
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/decorators/util/DecoratorsSwitch.java
@@ -0,0 +1,359 @@
+package org.eclipse.stem.tests.util.decorators.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.model.GraphDecorator;
+import org.eclipse.stem.core.model.NodeDecorator;
+//import org.eclipse.stem.tests.util.decorators.*;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.TestEdgeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestGraphDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestNodeDecorator1;
+import org.eclipse.stem.tests.util.decorators.TestScenarioGraphDecorator1;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.decorators.DecoratorsPackage
+ * @generated
+ */
+public class DecoratorsSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static DecoratorsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DecoratorsSwitch() {
+		if (modelPackage == null) {
+			modelPackage = DecoratorsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case DecoratorsPackage.TEST_EDGE_DECORATOR1: {
+				TestEdgeDecorator1 testEdgeDecorator1 = (TestEdgeDecorator1)theEObject;
+				T1 result = caseTestEdgeDecorator1(testEdgeDecorator1);
+				if (result == null) result = caseEdgeDecorator_1(testEdgeDecorator1);
+				if (result == null) result = caseDecorator(testEdgeDecorator1);
+				if (result == null) result = caseIdentifiable(testEdgeDecorator1);
+				if (result == null) result = caseComparable(testEdgeDecorator1);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case DecoratorsPackage.TEST_GRAPH_DECORATOR1: {
+				TestGraphDecorator1 testGraphDecorator1 = (TestGraphDecorator1)theEObject;
+				T1 result = caseTestGraphDecorator1(testGraphDecorator1);
+				if (result == null) result = caseGraphDecorator_1(testGraphDecorator1);
+				if (result == null) result = caseDecorator(testGraphDecorator1);
+				if (result == null) result = caseIdentifiable(testGraphDecorator1);
+				if (result == null) result = caseComparable(testGraphDecorator1);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case DecoratorsPackage.TEST_NODE_DECORATOR1: {
+				TestNodeDecorator1 testNodeDecorator1 = (TestNodeDecorator1)theEObject;
+				T1 result = caseTestNodeDecorator1(testNodeDecorator1);
+				if (result == null) result = caseNodeDecorator_1(testNodeDecorator1);
+				if (result == null) result = caseDecorator(testNodeDecorator1);
+				if (result == null) result = caseIdentifiable(testNodeDecorator1);
+				if (result == null) result = caseComparable(testNodeDecorator1);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case DecoratorsPackage.TEST_SCENARIO_GRAPH_DECORATOR1: {
+				TestScenarioGraphDecorator1 testScenarioGraphDecorator1 = (TestScenarioGraphDecorator1)theEObject;
+				T1 result = caseTestScenarioGraphDecorator1(testScenarioGraphDecorator1);
+				if (result == null) result = caseGraphDecorator_1(testScenarioGraphDecorator1);
+				if (result == null) result = caseDecorator(testScenarioGraphDecorator1);
+				if (result == null) result = caseIdentifiable(testScenarioGraphDecorator1);
+				if (result == null) result = caseComparable(testScenarioGraphDecorator1);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Node Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Node Decorator1</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestNodeDecorator1(TestNodeDecorator1 object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Edge Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Edge Decorator1</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestEdgeDecorator1(TestEdgeDecorator1 object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Graph Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Graph Decorator1</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestGraphDecorator1(TestGraphDecorator1 object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Scenario Graph Decorator1</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Scenario Graph Decorator1</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestScenarioGraphDecorator1(TestScenarioGraphDecorator1 object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeDecorator_1(EdgeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraphDecorator_1(GraphDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeDecorator_1(NodeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeDecorator(EdgeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Graph Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseGraphDecorator(GraphDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //DecoratorsSwitch
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsFactory.java
new file mode 100644
index 0000000..dbb6ca6
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsFactory.java
@@ -0,0 +1,105 @@
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.labels.LabelsPackage
+ * @generated
+ */
+public interface LabelsFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LabelsFactory eINSTANCE = org.eclipse.stem.tests.util.labels.impl.LabelsFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Test Dynamic Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Dynamic Edge Label</em>'.
+	 * @generated
+	 */
+	TestDynamicEdgeLabel createTestDynamicEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Test Dynamic Label1</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Dynamic Label1</em>'.
+	 * @generated
+	 */
+	TestDynamicLabel1 createTestDynamicLabel1();
+
+	/**
+	 * Returns a new object of class '<em>Test Dynamic Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Dynamic Node Label</em>'.
+	 * @generated
+	 */
+	TestDynamicNodeLabel createTestDynamicNodeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Test Integer Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Integer Label Value</em>'.
+	 * @generated
+	 */
+	TestIntegerLabelValue createTestIntegerLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Test Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Label</em>'.
+	 * @generated
+	 */
+	TestLabel createTestLabel();
+
+	/**
+	 * Returns a new object of class '<em>Test Static Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Static Edge Label</em>'.
+	 * @generated
+	 */
+	TestStaticEdgeLabel createTestStaticEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Test Static Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Test Static Node Label</em>'.
+	 * @generated
+	 */
+	TestStaticNodeLabel createTestStaticNodeLabel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	LabelsPackage getLabelsPackage();
+
+} //LabelsFactory
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsPackage.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsPackage.java
new file mode 100644
index 0000000..2dfe804
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/LabelsPackage.java
@@ -0,0 +1,834 @@
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.labels.LabelsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface LabelsPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "labels"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/tests/util/labels.ecore"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.tests.util.labels"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	LabelsPackage eINSTANCE = org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicEdgeLabelImpl <em>Test Dynamic Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicEdgeLabelImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicEdgeLabel()
+	 * @generated
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__URI = GraphPackage.DYNAMIC_EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__TYPE_URI = GraphPackage.DYNAMIC_EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__DUBLIN_CORE = GraphPackage.DYNAMIC_EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__CURRENT_VALUE = GraphPackage.DYNAMIC_EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__IDENTIFIABLE = GraphPackage.DYNAMIC_EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_EDGE_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__NEXT_VALUE = GraphPackage.DYNAMIC_EDGE_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__DECORATOR = GraphPackage.DYNAMIC_EDGE_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL__EDGE = GraphPackage.DYNAMIC_EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Test Dynamic Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_EDGE_LABEL_FEATURE_COUNT = GraphPackage.DYNAMIC_EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicLabel1Impl <em>Test Dynamic Label1</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicLabel1Impl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicLabel1()
+	 * @generated
+	 */
+	int TEST_DYNAMIC_LABEL1 = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__URI = GraphPackage.DYNAMIC_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__TYPE_URI = GraphPackage.DYNAMIC_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__DUBLIN_CORE = GraphPackage.DYNAMIC_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__CURRENT_VALUE = GraphPackage.DYNAMIC_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__IDENTIFIABLE = GraphPackage.DYNAMIC_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__NEXT_VALUE = GraphPackage.DYNAMIC_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1__DECORATOR = GraphPackage.DYNAMIC_LABEL__DECORATOR;
+
+	/**
+	 * The number of structural features of the '<em>Test Dynamic Label1</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_LABEL1_FEATURE_COUNT = GraphPackage.DYNAMIC_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicNodeLabelImpl <em>Test Dynamic Node Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicNodeLabelImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicNodeLabel()
+	 * @generated
+	 */
+	int TEST_DYNAMIC_NODE_LABEL = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__URI = GraphPackage.DYNAMIC_NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__TYPE_URI = GraphPackage.DYNAMIC_NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__DUBLIN_CORE = GraphPackage.DYNAMIC_NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.DYNAMIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__CURRENT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__IDENTIFIABLE = GraphPackage.DYNAMIC_NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__NEXT_VALUE_VALID = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE_VALID;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__NEXT_VALUE = GraphPackage.DYNAMIC_NODE_LABEL__NEXT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__DECORATOR = GraphPackage.DYNAMIC_NODE_LABEL__DECORATOR;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL__NODE = GraphPackage.DYNAMIC_NODE_LABEL__NODE;
+
+	/**
+	 * The number of structural features of the '<em>Test Dynamic Node Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_DYNAMIC_NODE_LABEL_FEATURE_COUNT = GraphPackage.DYNAMIC_NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestIntegerLabelValueImpl <em>Test Integer Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestIntegerLabelValueImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestIntegerLabelValue()
+	 * @generated
+	 */
+	int TEST_INTEGER_LABEL_VALUE = 3;
+
+	/**
+	 * The feature id for the '<em><b>I</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_INTEGER_LABEL_VALUE__I = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Test Integer Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_INTEGER_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestLabelImpl <em>Test Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestLabelImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestLabel()
+	 * @generated
+	 */
+	int TEST_LABEL = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__URI = GraphPackage.LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__TYPE_URI = GraphPackage.LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__DUBLIN_CORE = GraphPackage.LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__CURRENT_VALUE = GraphPackage.LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL__IDENTIFIABLE = GraphPackage.LABEL__IDENTIFIABLE;
+
+	/**
+	 * The number of structural features of the '<em>Test Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_LABEL_FEATURE_COUNT = GraphPackage.LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestStaticEdgeLabelImpl <em>Test Static Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestStaticEdgeLabelImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestStaticEdgeLabel()
+	 * @generated
+	 */
+	int TEST_STATIC_EDGE_LABEL = 5;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__URI = GraphPackage.STATIC_EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__TYPE_URI = GraphPackage.STATIC_EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__DUBLIN_CORE = GraphPackage.STATIC_EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.STATIC_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__CURRENT_VALUE = GraphPackage.STATIC_EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__IDENTIFIABLE = GraphPackage.STATIC_EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL__EDGE = GraphPackage.STATIC_EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Test Static Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_EDGE_LABEL_FEATURE_COUNT = GraphPackage.STATIC_EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.tests.util.labels.impl.TestStaticNodeLabelImpl <em>Test Static Node Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.tests.util.labels.impl.TestStaticNodeLabelImpl
+	 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestStaticNodeLabel()
+	 * @generated
+	 */
+	int TEST_STATIC_NODE_LABEL = 6;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__URI = GraphPackage.STATIC_NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__TYPE_URI = GraphPackage.STATIC_NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__DUBLIN_CORE = GraphPackage.STATIC_NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.STATIC_NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__CURRENT_VALUE = GraphPackage.STATIC_NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__IDENTIFIABLE = GraphPackage.STATIC_NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL__NODE = GraphPackage.STATIC_NODE_LABEL__NODE;
+
+	/**
+	 * The number of structural features of the '<em>Test Static Node Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TEST_STATIC_NODE_LABEL_FEATURE_COUNT = GraphPackage.STATIC_NODE_LABEL_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel <em>Test Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Dynamic Edge Label</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel
+	 * @generated
+	 */
+	EClass getTestDynamicEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestDynamicLabel1 <em>Test Dynamic Label1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Dynamic Label1</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicLabel1
+	 * @generated
+	 */
+	EClass getTestDynamicLabel1();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel <em>Test Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Dynamic Node Label</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel
+	 * @generated
+	 */
+	EClass getTestDynamicNodeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue <em>Test Integer Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Integer Label Value</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestIntegerLabelValue
+	 * @generated
+	 */
+	EClass getTestIntegerLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue#getI <em>I</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>I</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestIntegerLabelValue#getI()
+	 * @see #getTestIntegerLabelValue()
+	 * @generated
+	 */
+	EAttribute getTestIntegerLabelValue_I();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestLabel <em>Test Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Label</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestLabel
+	 * @generated
+	 */
+	EClass getTestLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel <em>Test Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Static Edge Label</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel
+	 * @generated
+	 */
+	EClass getTestStaticEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.tests.util.labels.TestStaticNodeLabel <em>Test Static Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Test Static Node Label</em>'.
+	 * @see org.eclipse.stem.tests.util.labels.TestStaticNodeLabel
+	 * @generated
+	 */
+	EClass getTestStaticNodeLabel();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	LabelsFactory getLabelsFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicEdgeLabelImpl <em>Test Dynamic Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicEdgeLabelImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicEdgeLabel()
+		 * @generated
+		 */
+		EClass TEST_DYNAMIC_EDGE_LABEL = eINSTANCE.getTestDynamicEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicLabel1Impl <em>Test Dynamic Label1</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicLabel1Impl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicLabel1()
+		 * @generated
+		 */
+		EClass TEST_DYNAMIC_LABEL1 = eINSTANCE.getTestDynamicLabel1();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestDynamicNodeLabelImpl <em>Test Dynamic Node Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestDynamicNodeLabelImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestDynamicNodeLabel()
+		 * @generated
+		 */
+		EClass TEST_DYNAMIC_NODE_LABEL = eINSTANCE.getTestDynamicNodeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestIntegerLabelValueImpl <em>Test Integer Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestIntegerLabelValueImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestIntegerLabelValue()
+		 * @generated
+		 */
+		EClass TEST_INTEGER_LABEL_VALUE = eINSTANCE.getTestIntegerLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>I</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute TEST_INTEGER_LABEL_VALUE__I = eINSTANCE.getTestIntegerLabelValue_I();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestLabelImpl <em>Test Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestLabelImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestLabel()
+		 * @generated
+		 */
+		EClass TEST_LABEL = eINSTANCE.getTestLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestStaticEdgeLabelImpl <em>Test Static Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestStaticEdgeLabelImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestStaticEdgeLabel()
+		 * @generated
+		 */
+		EClass TEST_STATIC_EDGE_LABEL = eINSTANCE.getTestStaticEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.tests.util.labels.impl.TestStaticNodeLabelImpl <em>Test Static Node Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.tests.util.labels.impl.TestStaticNodeLabelImpl
+		 * @see org.eclipse.stem.tests.util.labels.impl.LabelsPackageImpl#getTestStaticNodeLabel()
+		 * @generated
+		 */
+		EClass TEST_STATIC_NODE_LABEL = eINSTANCE.getTestStaticNodeLabel();
+
+	}
+
+} //LabelsPackage
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicEdgeLabel.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicEdgeLabel.java
new file mode 100644
index 0000000..676a451
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicEdgeLabel.java
@@ -0,0 +1,30 @@
+// TestDynamicEdgeLabel.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+
+/**
+ * This interface is for testing.
+ * 
+ * @model
+ */
+public interface TestDynamicEdgeLabel extends DynamicEdgeLabel {
+
+	/**
+	 * Make the next value be one more than the current value.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void increment();
+} // TestDynamicEdgeLabel
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicLabel1.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicLabel1.java
new file mode 100644
index 0000000..b7fb599
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicLabel1.java
@@ -0,0 +1,34 @@
+// TestDynamicLabel1.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicLabel;
+
+/**
+ * This interface represents the model of an abstract class in an EMF model that
+ * is an example of a DynamicLabel implementation used for test purposes.
+ * 
+ * @see TestIntegerLabelValue
+ * 
+ * @model
+ */
+public interface TestDynamicLabel1 extends DynamicLabel {
+
+	/**
+	 * Make the next value be one more than the current value.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void increment();
+
+} // TestDynamicLabel1
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicNodeLabel.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicNodeLabel.java
new file mode 100644
index 0000000..3d039a3
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestDynamicNodeLabel.java
@@ -0,0 +1,31 @@
+// TestDynamicNodeLabel.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+
+/**
+ * This interface is for testing.
+ * 
+ * @model
+ */
+public interface TestDynamicNodeLabel extends DynamicNodeLabel {
+
+	/**
+	 * Make the next value be one more than the current value.
+	 * 
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void increment();
+
+} // TestDynamicNodeLabel
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestIntegerLabelValue.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestIntegerLabelValue.java
new file mode 100644
index 0000000..4119cd7
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestIntegerLabelValue.java
@@ -0,0 +1,55 @@
+// TestIntegerLabelValue.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * /** This interface represents the model of an abstract class in an EMF model
+ * that is an example of a LabelValue implementation used for test purposes.
+ * 
+ * @model
+ */
+public interface TestIntegerLabelValue extends LabelValue {
+
+	/**
+	 * The integer value used in test cases for the initial "current" value.
+	 */
+	int CURRENT_LABEL_INTEGER_VALUE = 10;
+	
+	/**
+	 * The integer value used in test cases for the initial "next" value.
+	 */
+	int NEXT_LABEL_INTEGER_VALUE = 11;
+	
+	/**
+	 * @return the value of the field <code>i</code>
+	 * @model
+	 */
+	int getI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue#getI <em>I</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>I</em>' attribute.
+	 * @see #getI()
+	 * @generated
+	 */
+	void setI(int value);
+
+	/**
+	 * @model volatile="true" transient="true" changeable="false"
+	 */
+	void increment();
+} // TestIntegerLabelValue
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestLabel.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestLabel.java
new file mode 100644
index 0000000..81cac23
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestLabel.java
@@ -0,0 +1,26 @@
+// TestLabel.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * This interface represents the model of an abstract class in an EMF model that
+ * is an example of a Label implementation used for test purposes.
+ * 
+ * @see TestIntegerLabelValue
+ * 
+ * @model
+ */
+public interface TestLabel extends Label {
+} // TestLabel
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticEdgeLabel.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticEdgeLabel.java
new file mode 100644
index 0000000..85975a6
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticEdgeLabel.java
@@ -0,0 +1,24 @@
+// TestStaticEdgeLabel.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+
+/**
+ * This is a test class.
+ * 
+ * @model
+ */
+public interface TestStaticEdgeLabel extends StaticEdgeLabel {
+
+}  // TestStaticEdgeLabel
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticNodeLabel.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticNodeLabel.java
new file mode 100644
index 0000000..4422b04
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/TestStaticNodeLabel.java
@@ -0,0 +1,23 @@
+// TestStaticNodeLabel.java
+package org.eclipse.stem.tests.util.labels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+
+/**
+ * This is a test class.
+ * 
+ * @model
+ */
+public interface TestStaticNodeLabel extends StaticNodeLabel {
+} // TestStaticNodeLabel
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsFactoryImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsFactoryImpl.java
new file mode 100644
index 0000000..840d102
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsFactoryImpl.java
@@ -0,0 +1,176 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+//import org.eclipse.stem.tests.util.labels.*;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsFactoryImpl extends EFactoryImpl implements LabelsFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static LabelsFactory init() {
+		try {
+			LabelsFactory theLabelsFactory = (LabelsFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/tests/util/labels.ecore"); //$NON-NLS-1$ 
+			if (theLabelsFactory != null) {
+				return theLabelsFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new LabelsFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case LabelsPackage.TEST_DYNAMIC_EDGE_LABEL: return createTestDynamicEdgeLabel();
+			case LabelsPackage.TEST_DYNAMIC_LABEL1: return createTestDynamicLabel1();
+			case LabelsPackage.TEST_DYNAMIC_NODE_LABEL: return createTestDynamicNodeLabel();
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE: return createTestIntegerLabelValue();
+			case LabelsPackage.TEST_LABEL: return createTestLabel();
+			case LabelsPackage.TEST_STATIC_EDGE_LABEL: return createTestStaticEdgeLabel();
+			case LabelsPackage.TEST_STATIC_NODE_LABEL: return createTestStaticNodeLabel();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicEdgeLabel createTestDynamicEdgeLabel() {
+		TestDynamicEdgeLabelImpl testDynamicEdgeLabel = new TestDynamicEdgeLabelImpl();
+		return testDynamicEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicLabel1 createTestDynamicLabel1() {
+		TestDynamicLabel1Impl testDynamicLabel1 = new TestDynamicLabel1Impl();
+		return testDynamicLabel1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicNodeLabel createTestDynamicNodeLabel() {
+		TestDynamicNodeLabelImpl testDynamicNodeLabel = new TestDynamicNodeLabelImpl();
+		return testDynamicNodeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestIntegerLabelValue createTestIntegerLabelValue() {
+		TestIntegerLabelValueImpl testIntegerLabelValue = new TestIntegerLabelValueImpl();
+		return testIntegerLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestLabel createTestLabel() {
+		TestLabelImpl testLabel = new TestLabelImpl();
+		return testLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestStaticEdgeLabel createTestStaticEdgeLabel() {
+		TestStaticEdgeLabelImpl testStaticEdgeLabel = new TestStaticEdgeLabelImpl();
+		return testStaticEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestStaticNodeLabel createTestStaticNodeLabel() {
+		TestStaticNodeLabelImpl testStaticNodeLabel = new TestStaticNodeLabelImpl();
+		return testStaticNodeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsPackage getLabelsPackage() {
+		return (LabelsPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static LabelsPackage getPackage() {
+		return LabelsPackage.eINSTANCE;
+	}
+
+} //LabelsFactoryImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsPackageImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsPackageImpl.java
new file mode 100644
index 0000000..1072ab0
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/LabelsPackageImpl.java
@@ -0,0 +1,356 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+import org.eclipse.stem.tests.util.decorators.DecoratorsPackage;
+import org.eclipse.stem.tests.util.decorators.impl.DecoratorsPackageImpl;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsPackageImpl extends EPackageImpl implements LabelsPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testDynamicEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testDynamicLabel1EClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testDynamicNodeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testIntegerLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testStaticEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass testStaticNodeLabelEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.tests.util.labels.LabelsPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private LabelsPackageImpl() {
+		super(eNS_URI, LabelsFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static LabelsPackage init() {
+		if (isInited) return (LabelsPackage)EPackage.Registry.INSTANCE.getEPackage(LabelsPackage.eNS_URI);
+
+		// Obtain or create and register package
+		LabelsPackageImpl theLabelsPackage = (LabelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof LabelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new LabelsPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		ModelPackage.eINSTANCE.eClass();
+		CommonPackage.eINSTANCE.eClass();
+		GraphPackage.eINSTANCE.eClass();
+		ModifierPackage.eINSTANCE.eClass();
+		ScenarioPackage.eINSTANCE.eClass();
+		SequencerPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		DecoratorsPackageImpl theDecoratorsPackage = (DecoratorsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(DecoratorsPackage.eNS_URI) instanceof DecoratorsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(DecoratorsPackage.eNS_URI) : DecoratorsPackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theLabelsPackage.createPackageContents();
+		theDecoratorsPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theLabelsPackage.initializePackageContents();
+		theDecoratorsPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theLabelsPackage.freeze();
+
+		return theLabelsPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestDynamicEdgeLabel() {
+		return testDynamicEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestDynamicLabel1() {
+		return testDynamicLabel1EClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestDynamicNodeLabel() {
+		return testDynamicNodeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestIntegerLabelValue() {
+		return testIntegerLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getTestIntegerLabelValue_I() {
+		return (EAttribute)testIntegerLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestLabel() {
+		return testLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestStaticEdgeLabel() {
+		return testStaticEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTestStaticNodeLabel() {
+		return testStaticNodeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsFactory getLabelsFactory() {
+		return (LabelsFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		testDynamicEdgeLabelEClass = createEClass(TEST_DYNAMIC_EDGE_LABEL);
+
+		testDynamicLabel1EClass = createEClass(TEST_DYNAMIC_LABEL1);
+
+		testDynamicNodeLabelEClass = createEClass(TEST_DYNAMIC_NODE_LABEL);
+
+		testIntegerLabelValueEClass = createEClass(TEST_INTEGER_LABEL_VALUE);
+		createEAttribute(testIntegerLabelValueEClass, TEST_INTEGER_LABEL_VALUE__I);
+
+		testLabelEClass = createEClass(TEST_LABEL);
+
+		testStaticEdgeLabelEClass = createEClass(TEST_STATIC_EDGE_LABEL);
+
+		testStaticNodeLabelEClass = createEClass(TEST_STATIC_NODE_LABEL);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		testDynamicEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicEdgeLabel());
+		testDynamicLabel1EClass.getESuperTypes().add(theGraphPackage.getDynamicLabel());
+		testDynamicNodeLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicNodeLabel());
+		testIntegerLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		testLabelEClass.getESuperTypes().add(theGraphPackage.getLabel());
+		testStaticEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getStaticEdgeLabel());
+		testStaticNodeLabelEClass.getESuperTypes().add(theGraphPackage.getStaticNodeLabel());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(testDynamicEdgeLabelEClass, TestDynamicEdgeLabel.class, "TestDynamicEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		addEOperation(testDynamicEdgeLabelEClass, null, "increment", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testDynamicLabel1EClass, TestDynamicLabel1.class, "TestDynamicLabel1", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		addEOperation(testDynamicLabel1EClass, null, "increment", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testDynamicNodeLabelEClass, TestDynamicNodeLabel.class, "TestDynamicNodeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		addEOperation(testDynamicNodeLabelEClass, null, "increment", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testIntegerLabelValueEClass, TestIntegerLabelValue.class, "TestIntegerLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTestIntegerLabelValue_I(), ecorePackage.getEInt(), "i", null, 0, 1, TestIntegerLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+
+		addEOperation(testIntegerLabelValueEClass, null, "increment", 0, 1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(testLabelEClass, TestLabel.class, "TestLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(testStaticEdgeLabelEClass, TestStaticEdgeLabel.class, "TestStaticEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		initEClass(testStaticNodeLabelEClass, TestStaticNodeLabel.class, "TestStaticNodeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //LabelsPackageImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicEdgeLabelImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicEdgeLabelImpl.java
new file mode 100644
index 0000000..23c8662
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicEdgeLabelImpl.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.DynamicEdgeLabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Dynamic Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestDynamicEdgeLabelImpl extends DynamicEdgeLabelImpl implements TestDynamicEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestDynamicEdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_DYNAMIC_EDGE_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void increment() {
+		final TestIntegerLabelValue nextLabelValue = (TestIntegerLabelValue) getNextValue();
+		final TestIntegerLabelValue currentLabelValue = (TestIntegerLabelValue) getCurrentValue();
+		nextLabelValue.setI(currentLabelValue.getI() + 1);
+		setNextValueValid(true);
+	} // increment
+
+} //TestDynamicEdgeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicLabel1Impl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicLabel1Impl.java
new file mode 100644
index 0000000..b3a0a2b
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicLabel1Impl.java
@@ -0,0 +1,91 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.impl.DynamicLabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Dynamic Label1</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestDynamicLabel1Impl extends DynamicLabelImpl implements
+		TestDynamicLabel1 {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected TestDynamicLabel1Impl() {
+		super();
+		currentValue = LabelsFactory.eINSTANCE.createTestIntegerLabelValue();
+		nextValue = LabelsFactory.eINSTANCE.createTestIntegerLabelValue();
+	} // TestDynamicLabel1Impl
+
+	
+	@Override
+	public Identifiable getIdentifiable() {
+		return null;
+	}
+
+
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		throw new UnsupportedOperationException();
+	}
+
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_DYNAMIC_LABEL1;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void increment() {
+		final TestIntegerLabelValue nextLabelValue = (TestIntegerLabelValue) getNextValue();
+		final TestIntegerLabelValue currentLabelValue = (TestIntegerLabelValue) getCurrentValue();
+		nextLabelValue.setI(currentLabelValue.getI()+1);
+		setNextValueValid(true);
+	} // increment
+
+	/**
+	 * @see org.eclipse.stem.core.test.labels.impl.TestLabelImpl#toString()
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder("C: ");
+		sb.append(getCurrentValue().toString());
+		sb.append(", N: ");
+		sb.append(getNextValue().toString());
+		return sb.toString();
+	} // toString
+
+} // TestDynamicLabel1Impl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicNodeLabelImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicNodeLabelImpl.java
new file mode 100644
index 0000000..0411f32
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestDynamicNodeLabelImpl.java
@@ -0,0 +1,59 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.DynamicNodeLabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Dynamic Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestDynamicNodeLabelImpl extends DynamicNodeLabelImpl implements
+		TestDynamicNodeLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestDynamicNodeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_DYNAMIC_NODE_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void increment() {
+		final TestIntegerLabelValue nextLabelValue = (TestIntegerLabelValue) getNextValue();
+		final TestIntegerLabelValue currentLabelValue = (TestIntegerLabelValue) getCurrentValue();
+		nextLabelValue.setI(currentLabelValue.getI() + 1);
+		setNextValueValid(true);
+	} // increment
+
+} // TestDynamicNodeLabelImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestIntegerLabelValueImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestIntegerLabelValueImpl.java
new file mode 100644
index 0000000..f6316df
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestIntegerLabelValueImpl.java
@@ -0,0 +1,185 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Integer Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.tests.util.labels.impl.TestIntegerLabelValueImpl#getI <em>I</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TestIntegerLabelValueImpl extends LabelValueImpl implements
+		TestIntegerLabelValue {
+	/**
+	 * The default value of the '{@link #getI() <em>I</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int I_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getI() <em>I</em>}' attribute. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @see #getI()
+	 * @generated
+	 * @ordered
+	 */
+	protected int i = I_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestIntegerLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_INTEGER_LABEL_VALUE;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelValueImpl#reset()
+	 */
+	@Override
+	public void reset() {
+		setI(I_EDEFAULT);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getI() {
+		return i;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setI(int newI) {
+		int oldI = i;
+		i = newI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LabelsPackage.TEST_INTEGER_LABEL_VALUE__I, oldI, i));
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public void increment() {
+		i++;
+	} // increment
+
+	/**
+	 * @see org.eclipse.stem.core.common.SanityChecker#sane()
+	 */
+	public boolean sane() {
+		boolean retValue = true;
+
+		retValue = retValue && getI() >= 0;
+		return retValue;
+	} // sane
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE__I:
+				return new Integer(getI());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE__I:
+				setI(((Integer)newValue).intValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE__I:
+				setI(I_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE__I:
+				return i != I_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		final StringBuilder result = new StringBuilder(Integer.toString(getI()));
+		return result.toString();
+	} // toString
+
+} // TestIntegerLabelValueImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestLabelImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestLabelImpl.java
new file mode 100644
index 0000000..54de86a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestLabelImpl.java
@@ -0,0 +1,70 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.impl.LabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>Test Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestLabelImpl extends LabelImpl implements TestLabel {
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected TestLabelImpl() {
+		super();
+		currentValue = LabelsFactory.eINSTANCE.createTestIntegerLabelValue();
+	} // TestLabelImpl
+
+	@Override
+	public Identifiable getIdentifiable() {
+		return null;
+	}
+
+	@Override
+	public void setIdentifiable(Identifiable newIdentifiable) {
+		throw new UnsupportedOperationException();
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_LABEL;
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.impl.LabelImpl#toString()
+	 * @generated NOT
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder(getCurrentValue().toString());
+		return sb.toString();
+	} // toString
+
+	
+} // TestLabelImpl
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticEdgeLabelImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticEdgeLabelImpl.java
new file mode 100644
index 0000000..4ec35f9
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticEdgeLabelImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.StaticEdgeLabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Static Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestStaticEdgeLabelImpl extends StaticEdgeLabelImpl implements TestStaticEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestStaticEdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_STATIC_EDGE_LABEL;
+	}
+
+} //TestStaticEdgeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticNodeLabelImpl.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticNodeLabelImpl.java
new file mode 100644
index 0000000..89e43c8
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/impl/TestStaticNodeLabelImpl.java
@@ -0,0 +1,48 @@
+package org.eclipse.stem.tests.util.labels.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.StaticNodeLabelImpl;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Test Static Node Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class TestStaticNodeLabelImpl extends StaticNodeLabelImpl implements TestStaticNodeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestStaticNodeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return LabelsPackage.Literals.TEST_STATIC_NODE_LABEL;
+	}
+
+} //TestStaticNodeLabelImpl
\ No newline at end of file
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsActionBarContributor.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsActionBarContributor.java
new file mode 100644
index 0000000..fa9570a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsActionBarContributor.java
@@ -0,0 +1,430 @@
+package org.eclipse.stem.tests.util.labels.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Labels model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(TestutilityEditPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(TestutilityEditPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("labels-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("labels-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditor_menu"), "org.eclipse.stem.tests.util.labelsMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(TestutilityEditPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsEditor.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsEditor.java
new file mode 100644
index 0000000..cbdf662
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsEditor.java
@@ -0,0 +1,1504 @@
+package org.eclipse.stem.tests.util.labels.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.tests.util.decorators.provider.DecoratorsItemProviderAdapterFactory;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.provider.LabelsItemProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+
+/**
+ * This is an example of a Labels model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(LabelsEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(LabelsEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == LabelsEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						removedResources.addAll(visitor.getRemovedResources());
+						if (!isDirty()) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 getSite().getPage().closeEditor(LabelsEditor.this, false);
+									 }
+								 });
+						}
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						changedResources.addAll(visitor.getChangedResources());
+						if (getSite().getPage().getActiveEditor() == LabelsEditor.this) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 handleActivate();
+									 }
+								 });
+						}
+					}
+				}
+				catch (CoreException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(LabelsEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					TestutilityEditPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						TestutilityEditPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new DecoratorsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			// I don't know if this should be run this deferred
+			// because we might have to give the editor a chance to process the viewer update events
+			// and hence to update the views first.
+			//
+			//
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			runnable.run();
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.tests.util", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						LabelsEditor.this.setSelectionToViewer(selection);
+						LabelsEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			TestutilityEditPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			TestutilityEditPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return TestutilityEditPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return TestutilityEditPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsModelWizard.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsModelWizard.java
new file mode 100644
index 0000000..4baec08
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/presentation/LabelsModelWizard.java
@@ -0,0 +1,597 @@
+package org.eclipse.stem.tests.util.labels.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsModelWizard extends Wizard implements INewWizard {
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelsPackage labelsPackage = LabelsPackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelsFactory labelsFactory = labelsPackage.getLabelsFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelsModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelsModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_Wizard_label")); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(TestutilityEditPlugin.INSTANCE.getImage("full/wizban/NewLabels"))); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : labelsPackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass)eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, java.text.Collator.getInstance());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass)labelsPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = labelsFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation =
+				new WorkspaceModifyOperation() {
+					@Override
+					protected void execute(IProgressMonitor progressMonitor) {
+						try {
+							// Create a resource set
+							//
+							ResourceSet resourceSet = new ResourceSetImpl();
+
+							// Get the URI of the model file.
+							//
+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+							// Create a resource for this file.
+							//
+							Resource resource = resourceSet.createResource(fileURI);
+
+							// Add the initial model object to the contents.
+							//
+							EObject rootObject = createInitialModel();
+							if (rootObject != null) {
+								resource.getContents().add(rootObject);
+							}
+
+							// Save the contents of the resource to the file system.
+							//
+							Map<Object, Object> options = new HashMap<Object, Object>();
+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+							resource.save(options);
+						}
+						catch (Exception exception) {
+							TestutilityEditPlugin.INSTANCE.log(exception);
+						}
+						finally {
+							progressMonitor.done();
+						}
+					}
+				};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec
+					(new Runnable() {
+						 public void run() {
+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
+						 }
+					 });
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor
+					(new FileEditorInput(modelFile),
+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			}
+			catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(), TestutilityEditPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); //$NON-NLS-1$
+				return false;
+			}
+
+			return true;
+		}
+		catch (Exception exception) {
+			TestutilityEditPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class LabelsModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public LabelsModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				// Make sure the file ends in ".labels".
+				//
+				String requiredExt = TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditorFilenameExtension"); //$NON-NLS-1$
+				String enteredExt = new Path(getFileName()).getFileExtension();
+				if (enteredExt == null || !enteredExt.equals(requiredExt)) {
+					setErrorMessage(TestutilityEditPlugin.INSTANCE.getString("_WARN_FilenameExtension", new Object [] { requiredExt })); //$NON-NLS-1$
+					return false;
+				}
+				else {
+					return true;
+				}
+			}
+			else {
+				return false;
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class LabelsModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public LabelsModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE); {
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(TestutilityEditPlugin.INSTANCE.getString("_UI_ModelObject")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(TestutilityEditPlugin.INSTANCE.getString("_UI_XMLEncoding")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator =
+			new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					setPageComplete(validatePage());
+				}
+			};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				}
+				else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return TestutilityEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			catch(MissingResourceException mre) {
+				TestutilityEditPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(TestutilityEditPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) //$NON-NLS-1$
+				{
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new LabelsModelWizardNewFileCreationPage("Whatever", selection); //$NON-NLS-1$
+		newFileCreationPage.setTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsModelWizard_label")); //$NON-NLS-1$
+		newFileCreationPage.setDescription(TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsModelWizard_description")); //$NON-NLS-1$
+		newFileCreationPage.setFileName(TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditorFilenameDefaultBase") + "." + TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditorFilenameExtension")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource)selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditorFilenameDefaultBase"); //$NON-NLS-1$
+					String defaultModelFilenameExtension = TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsEditorFilenameExtension"); //$NON-NLS-1$
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension; //$NON-NLS-1$
+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension; //$NON-NLS-1$
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new LabelsModelWizardInitialObjectCreationPage("Whatever2"); //$NON-NLS-1$
+		initialObjectCreationPage.setTitle(TestutilityEditPlugin.INSTANCE.getString("_UI_LabelsModelWizard_label")); //$NON-NLS-1$
+		initialObjectCreationPage.setDescription(TestutilityEditPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); //$NON-NLS-1$
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/LabelsItemProviderAdapterFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/LabelsItemProviderAdapterFactory.java
new file mode 100644
index 0000000..a4ff35a
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/LabelsItemProviderAdapterFactory.java
@@ -0,0 +1,350 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.tests.util.labels.util.LabelsAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class LabelsItemProviderAdapterFactory extends LabelsAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+	/**
+	 * This keeps track of the root adapter factory that delegates to this adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Object> supportedTypes = new ArrayList<Object>();
+
+	/**
+	 * This constructs an instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsItemProviderAdapterFactory() {
+		supportedTypes.add(IEditingDomainItemProvider.class);
+		supportedTypes.add(IStructuredItemContentProvider.class);
+		supportedTypes.add(ITreeItemContentProvider.class);
+		supportedTypes.add(IItemLabelProvider.class);
+		supportedTypes.add(IItemPropertySource.class);
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestDynamicLabel1} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestDynamicLabel1ItemProvider testDynamicLabel1ItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicLabel1}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestDynamicLabel1Adapter() {
+		if (testDynamicLabel1ItemProvider == null) {
+			testDynamicLabel1ItemProvider = new TestDynamicLabel1ItemProvider(this);
+		}
+
+		return testDynamicLabel1ItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestDynamicNodeLabelItemProvider testDynamicNodeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestDynamicNodeLabelAdapter() {
+		if (testDynamicNodeLabelItemProvider == null) {
+			testDynamicNodeLabelItemProvider = new TestDynamicNodeLabelItemProvider(this);
+		}
+
+		return testDynamicNodeLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestIntegerLabelValueItemProvider testIntegerLabelValueItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestIntegerLabelValueAdapter() {
+		if (testIntegerLabelValueItemProvider == null) {
+			testIntegerLabelValueItemProvider = new TestIntegerLabelValueItemProvider(this);
+		}
+
+		return testIntegerLabelValueItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestLabelItemProvider testLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestLabelAdapter() {
+		if (testLabelItemProvider == null) {
+			testLabelItemProvider = new TestLabelItemProvider(this);
+		}
+
+		return testLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestStaticNodeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestStaticNodeLabelItemProvider testStaticNodeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestStaticNodeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestStaticNodeLabelAdapter() {
+		if (testStaticNodeLabelItemProvider == null) {
+			testStaticNodeLabelItemProvider = new TestStaticNodeLabelItemProvider(this);
+		}
+
+		return testStaticNodeLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestDynamicEdgeLabelItemProvider testDynamicEdgeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestDynamicEdgeLabelAdapter() {
+		if (testDynamicEdgeLabelItemProvider == null) {
+			testDynamicEdgeLabelItemProvider = new TestDynamicEdgeLabelItemProvider(this);
+		}
+
+		return testDynamicEdgeLabelItemProvider;
+	}
+
+	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TestStaticEdgeLabelItemProvider testStaticEdgeLabelItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createTestStaticEdgeLabelAdapter() {
+		if (testStaticEdgeLabelItemProvider == null) {
+			testStaticEdgeLabelItemProvider = new TestStaticEdgeLabelItemProvider(this);
+		}
+
+		return testStaticEdgeLabelItemProvider;
+	}
+
+	/**
+	 * This returns the root adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+	}
+
+	/**
+	 * This sets the composed adapter factory that contains this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return supportedTypes.contains(type) || super.isFactoryForType(type);
+	}
+
+	/**
+	 * This implementation substitutes the factory itself as the key for the adapter.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter adapt(Notifier notifier, Object type) {
+		return super.adapt(notifier, this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object adapt(Object object, Object type) {
+		if (isFactoryForType(type)) {
+			Object adapter = super.adapt(object, type);
+			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
+				return adapter;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * This adds a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	}
+
+	/**
+	 * This removes a listener.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	}
+
+	/**
+	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	}
+
+	/**
+	 * This disposes all of the item providers created by this factory. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void dispose() {
+		if (testDynamicEdgeLabelItemProvider != null) testDynamicEdgeLabelItemProvider.dispose();
+		if (testDynamicLabel1ItemProvider != null) testDynamicLabel1ItemProvider.dispose();
+		if (testDynamicNodeLabelItemProvider != null) testDynamicNodeLabelItemProvider.dispose();
+		if (testIntegerLabelValueItemProvider != null) testIntegerLabelValueItemProvider.dispose();
+		if (testLabelItemProvider != null) testLabelItemProvider.dispose();
+		if (testStaticEdgeLabelItemProvider != null) testStaticEdgeLabelItemProvider.dispose();
+		if (testStaticNodeLabelItemProvider != null) testStaticNodeLabelItemProvider.dispose();
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicEdgeLabelItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicEdgeLabelItemProvider.java
new file mode 100644
index 0000000..75c8e57
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicEdgeLabelItemProvider.java
@@ -0,0 +1,133 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.DynamicEdgeLabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestDynamicEdgeLabelItemProvider
+	extends DynamicEdgeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestDynamicEdgeLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestDynamicEdgeLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestDynamicEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestDynamicEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_TestDynamicEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicLabel1ItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicLabel1ItemProvider.java
new file mode 100644
index 0000000..851f227
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicLabel1ItemProvider.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.DynamicLabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+//import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicLabel1} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestDynamicLabel1ItemProvider
+	extends DynamicLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicLabel1ItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestDynamicLabel1.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestDynamicLabel1")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestDynamicLabel1)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestDynamicLabel1_type") : //$NON-NLS-1$
+			getString("_UI_TestDynamicLabel1_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicNodeLabelItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicNodeLabelItemProvider.java
new file mode 100644
index 0000000..9a4aea5
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestDynamicNodeLabelItemProvider.java
@@ -0,0 +1,133 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.DynamicNodeLabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestDynamicNodeLabelItemProvider
+	extends DynamicNodeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestDynamicNodeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestDynamicNodeLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestDynamicNodeLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestDynamicNodeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestDynamicNodeLabel_type") : //$NON-NLS-1$
+			getString("_UI_TestDynamicNodeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestIntegerLabelValueItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestIntegerLabelValueItemProvider.java
new file mode 100644
index 0000000..2b173a3
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestIntegerLabelValueItemProvider.java
@@ -0,0 +1,161 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.stem.core.graph.provider.LabelValueItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestIntegerLabelValueItemProvider
+	extends LabelValueItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestIntegerLabelValueItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addIPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the I feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_TestIntegerLabelValue_i_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_TestIntegerLabelValue_i_feature", "_UI_TestIntegerLabelValue_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LabelsPackage.Literals.TEST_INTEGER_LABEL_VALUE__I,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This returns TestIntegerLabelValue.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestIntegerLabelValue")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		TestIntegerLabelValue testIntegerLabelValue = (TestIntegerLabelValue)object;
+		return getString("_UI_TestIntegerLabelValue_type") + " " + testIntegerLabelValue.getI(); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TestIntegerLabelValue.class)) {
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE__I:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestLabelItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestLabelItemProvider.java
new file mode 100644
index 0000000..908eda8
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestLabelItemProvider.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+//import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.provider.LabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+//import org.eclipse.stem.tests.util.labels.LabelsFactory;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestLabelItemProvider
+	extends LabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestLabel_type") : //$NON-NLS-1$
+			getString("_UI_TestLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticEdgeLabelItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticEdgeLabelItemProvider.java
new file mode 100644
index 0000000..50e0549
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticEdgeLabelItemProvider.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.provider.StaticEdgeLabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestStaticEdgeLabelItemProvider
+	extends StaticEdgeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestStaticEdgeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestStaticEdgeLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestStaticEdgeLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestStaticEdgeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestStaticEdgeLabel_type") : //$NON-NLS-1$
+			getString("_UI_TestStaticEdgeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticNodeLabelItemProvider.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticNodeLabelItemProvider.java
new file mode 100644
index 0000000..a00d543
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/provider/TestStaticNodeLabelItemProvider.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.tests.util.labels.provider;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.stem.core.graph.provider.StaticNodeLabelItemProvider;
+import org.eclipse.stem.tests.util.decorators.provider.TestutilityEditPlugin;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.stem.tests.util.labels.TestStaticNodeLabel} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TestStaticNodeLabelItemProvider
+	extends StaticNodeLabelItemProvider
+	implements	
+		IEditingDomainItemProvider,	
+		IStructuredItemContentProvider,	
+		ITreeItemContentProvider,	
+		IItemLabelProvider,	
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TestStaticNodeLabelItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns TestStaticNodeLabel.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TestStaticNodeLabel")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		URI labelValue = ((TestStaticNodeLabel)object).getURI();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_TestStaticNodeLabel_type") : //$NON-NLS-1$
+			getString("_UI_TestStaticNodeLabel_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return TestutilityEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsAdapterFactory.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsAdapterFactory.java
new file mode 100644
index 0000000..14d8926
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsAdapterFactory.java
@@ -0,0 +1,509 @@
+package org.eclipse.stem.tests.util.labels.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+//import org.eclipse.stem.tests.util.labels.*;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.labels.LabelsPackage
+ * @generated
+ */
+public class LabelsAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static LabelsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = LabelsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected LabelsSwitch<Adapter> modelSwitch =
+		new LabelsSwitch<Adapter>() {
+			@Override
+			public Adapter caseTestDynamicEdgeLabel(TestDynamicEdgeLabel object) {
+				return createTestDynamicEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseTestDynamicLabel1(TestDynamicLabel1 object) {
+				return createTestDynamicLabel1Adapter();
+			}
+			@Override
+			public Adapter caseTestDynamicNodeLabel(TestDynamicNodeLabel object) {
+				return createTestDynamicNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseTestIntegerLabelValue(TestIntegerLabelValue object) {
+				return createTestIntegerLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseTestLabel(TestLabel object) {
+				return createTestLabelAdapter();
+			}
+			@Override
+			public Adapter caseTestStaticEdgeLabel(TestStaticEdgeLabel object) {
+				return createTestStaticEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseTestStaticNodeLabel(TestStaticNodeLabel object) {
+				return createTestStaticNodeLabelAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicLabel(DynamicLabel object) {
+				return createDynamicLabelAdapter();
+			}
+			@Override
+			public Adapter caseEdgeLabel(EdgeLabel object) {
+				return createEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+				return createDynamicEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseNodeLabel(NodeLabel object) {
+				return createNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicNodeLabel(DynamicNodeLabel object) {
+				return createDynamicNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseStaticLabel(StaticLabel object) {
+				return createStaticLabelAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseStaticEdgeLabel(StaticEdgeLabel object) {
+				return createStaticEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseStaticNodeLabel(StaticNodeLabel object) {
+				return createStaticNodeLabelAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestDynamicLabel1 <em>Test Dynamic Label1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicLabel1
+	 * @generated
+	 */
+	public Adapter createTestDynamicLabel1Adapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestIntegerLabelValue <em>Test Integer Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestIntegerLabelValue
+	 * @generated
+	 */
+	public Adapter createTestIntegerLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestLabel <em>Test Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestLabel
+	 * @generated
+	 */
+	public Adapter createTestLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestStaticNodeLabel <em>Test Static Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestStaticNodeLabel
+	 * @generated
+	 */
+	public Adapter createTestStaticNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel <em>Test Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel
+	 * @generated
+	 */
+	public Adapter createTestDynamicEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel <em>Test Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel
+	 * @generated
+	 */
+	public Adapter createTestStaticEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel <em>Test Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel
+	 * @generated
+	 */
+	public Adapter createTestDynamicNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	public Adapter createDynamicLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticLabel <em>Static Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticLabel
+	 * @generated
+	 */
+	public Adapter createStaticLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	public Adapter createNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticNodeLabel <em>Static Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticNodeLabel
+	 * @generated
+	 */
+	public Adapter createStaticNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	public Adapter createEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicEdgeLabel <em>Dynamic Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicEdgeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.StaticEdgeLabel <em>Static Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.StaticEdgeLabel
+	 * @generated
+	 */
+	public Adapter createStaticEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicNodeLabel <em>Dynamic Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicNodeLabel
+	 * @generated
+	 */
+	public Adapter createDynamicNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //LabelsAdapterFactory
diff --git a/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsSwitch.java b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsSwitch.java
new file mode 100644
index 0000000..cad7568
--- /dev/null
+++ b/org.eclipse.stem.tests.util/src/org/eclipse/stem/tests/util/labels/util/LabelsSwitch.java
@@ -0,0 +1,532 @@
+package org.eclipse.stem.tests.util.labels.util;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicEdgeLabel;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.graph.StaticEdgeLabel;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.graph.StaticNodeLabel;
+//import org.eclipse.stem.tests.util.labels.*;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.tests.util.labels.LabelsPackage;
+import org.eclipse.stem.tests.util.labels.TestDynamicEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestDynamicLabel1;
+import org.eclipse.stem.tests.util.labels.TestDynamicNodeLabel;
+import org.eclipse.stem.tests.util.labels.TestIntegerLabelValue;
+import org.eclipse.stem.tests.util.labels.TestLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticEdgeLabel;
+import org.eclipse.stem.tests.util.labels.TestStaticNodeLabel;
+
+
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.tests.util.labels.LabelsPackage
+ * @generated
+ */
+public class LabelsSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static LabelsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelsSwitch() {
+		if (modelPackage == null) {
+			modelPackage = LabelsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 *
+	 * @param theEObject 
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * 
+	 *  <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case LabelsPackage.TEST_DYNAMIC_EDGE_LABEL: {
+				TestDynamicEdgeLabel testDynamicEdgeLabel = (TestDynamicEdgeLabel)theEObject;
+				T1 result = caseTestDynamicEdgeLabel(testDynamicEdgeLabel);
+				if (result == null) result = caseDynamicEdgeLabel(testDynamicEdgeLabel);
+				if (result == null) result = caseDynamicLabel(testDynamicEdgeLabel);
+				if (result == null) result = caseEdgeLabel(testDynamicEdgeLabel);
+				if (result == null) result = caseLabel(testDynamicEdgeLabel);
+				if (result == null) result = caseIdentifiable(testDynamicEdgeLabel);
+				if (result == null) result = caseComparable(testDynamicEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_DYNAMIC_LABEL1: {
+				TestDynamicLabel1 testDynamicLabel1 = (TestDynamicLabel1)theEObject;
+				T1 result = caseTestDynamicLabel1(testDynamicLabel1);
+				if (result == null) result = caseDynamicLabel(testDynamicLabel1);
+				if (result == null) result = caseLabel(testDynamicLabel1);
+				if (result == null) result = caseIdentifiable(testDynamicLabel1);
+				if (result == null) result = caseComparable(testDynamicLabel1);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_DYNAMIC_NODE_LABEL: {
+				TestDynamicNodeLabel testDynamicNodeLabel = (TestDynamicNodeLabel)theEObject;
+				T1 result = caseTestDynamicNodeLabel(testDynamicNodeLabel);
+				if (result == null) result = caseDynamicNodeLabel(testDynamicNodeLabel);
+				if (result == null) result = caseDynamicLabel(testDynamicNodeLabel);
+				if (result == null) result = caseNodeLabel(testDynamicNodeLabel);
+				if (result == null) result = caseLabel(testDynamicNodeLabel);
+				if (result == null) result = caseIdentifiable(testDynamicNodeLabel);
+				if (result == null) result = caseComparable(testDynamicNodeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_INTEGER_LABEL_VALUE: {
+				TestIntegerLabelValue testIntegerLabelValue = (TestIntegerLabelValue)theEObject;
+				T1 result = caseTestIntegerLabelValue(testIntegerLabelValue);
+				if (result == null) result = caseLabelValue(testIntegerLabelValue);
+				if (result == null) result = caseSanityChecker(testIntegerLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_LABEL: {
+				TestLabel testLabel = (TestLabel)theEObject;
+				T1 result = caseTestLabel(testLabel);
+				if (result == null) result = caseLabel(testLabel);
+				if (result == null) result = caseIdentifiable(testLabel);
+				if (result == null) result = caseComparable(testLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_STATIC_EDGE_LABEL: {
+				TestStaticEdgeLabel testStaticEdgeLabel = (TestStaticEdgeLabel)theEObject;
+				T1 result = caseTestStaticEdgeLabel(testStaticEdgeLabel);
+				if (result == null) result = caseStaticEdgeLabel(testStaticEdgeLabel);
+				if (result == null) result = caseEdgeLabel(testStaticEdgeLabel);
+				if (result == null) result = caseStaticLabel(testStaticEdgeLabel);
+				if (result == null) result = caseModifiable(testStaticEdgeLabel);
+				if (result == null) result = caseLabel(testStaticEdgeLabel);
+				if (result == null) result = caseIdentifiable(testStaticEdgeLabel);
+				if (result == null) result = caseComparable(testStaticEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case LabelsPackage.TEST_STATIC_NODE_LABEL: {
+				TestStaticNodeLabel testStaticNodeLabel = (TestStaticNodeLabel)theEObject;
+				T1 result = caseTestStaticNodeLabel(testStaticNodeLabel);
+				if (result == null) result = caseStaticNodeLabel(testStaticNodeLabel);
+				if (result == null) result = caseNodeLabel(testStaticNodeLabel);
+				if (result == null) result = caseStaticLabel(testStaticNodeLabel);
+				if (result == null) result = caseModifiable(testStaticNodeLabel);
+				if (result == null) result = caseLabel(testStaticNodeLabel);
+				if (result == null) result = caseIdentifiable(testStaticNodeLabel);
+				if (result == null) result = caseComparable(testStaticNodeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Dynamic Label1</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Dynamic Label1</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestDynamicLabel1(TestDynamicLabel1 object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Integer Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Integer Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestIntegerLabelValue(TestIntegerLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestLabel(TestLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Static Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Static Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestStaticNodeLabel(TestStaticNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Dynamic Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Dynamic Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestDynamicEdgeLabel(TestDynamicEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Static Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Static Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestStaticEdgeLabel(TestStaticEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Test Dynamic Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Test Dynamic Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTestDynamicNodeLabel(TestDynamicNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicLabel(DynamicLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticLabel(StaticLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeLabel(NodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticNodeLabel(StaticNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeLabel(EdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicEdgeLabel(DynamicEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Static Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseStaticEdgeLabel(StaticEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicNodeLabel(DynamicNodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //LabelsSwitch
diff --git a/org.eclipse.stem.transport/.classpath b/org.eclipse.stem.transport/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.transport/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.transport/.project b/org.eclipse.stem.transport/.project
new file mode 100644
index 0000000..b0ef63d
--- /dev/null
+++ b/org.eclipse.stem.transport/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.transport</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.transport/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.transport/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..caaf8a1
--- /dev/null
+++ b/org.eclipse.stem.transport/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,78 @@
+#Tue Dec 04 17:31:06 EST 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.transport/META-INF/MANIFEST.MF b/org.eclipse.stem.transport/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..185528c
--- /dev/null
+++ b/org.eclipse.stem.transport/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.transport; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.definitions.transport,
+ org.eclipse.stem.definitions.transport.impl,
+ org.eclipse.stem.definitions.transport.util
+Require-Bundle: org.eclipse.stem.definitions;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.transport/build.properties b/org.eclipse.stem.transport/build.properties
new file mode 100644
index 0000000..66d9c2d
--- /dev/null
+++ b/org.eclipse.stem.transport/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.transport/epl-v10.html b/org.eclipse.stem.transport/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.transport/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.transport/model/transport.ecore b/org.eclipse.stem.transport/model/transport.ecore
new file mode 100644
index 0000000..50ef9ff
--- /dev/null
+++ b/org.eclipse.stem.transport/model/transport.ecore
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="transport"
+    nsURI="http:///org/eclipse/stem/definitions/transport.ecore" nsPrefix="org.eclipse.stem.definitions.transport">
+  <eClassifiers xsi:type="ecore:EClass" name="LoadUnloadEdge" eSuperTypes="../../org.eclipse.stem.definitions/model/edges.ecore#//MigrationEdge">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="loadingEdge" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LoadUnloadEdgeLabel" eSuperTypes="../../org.eclipse.stem.definitions/model/edges.ecore#//MigrationEdgeLabel ../../org.eclipse.stem.core/model/graph.ecore#//DynamicLabel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="activationTime" eType="ecore:EClass ../../org.eclipse.stem.core/model/model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deactivationTime" eType="ecore:EClass ../../org.eclipse.stem.core/model/model.ecore#//STEMTime"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activatedRate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PacketStyleTransportSystem" eSuperTypes="#//TransportSystem">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="packetTransportLabel" eType="#//PacketTransportLabel"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="loadingEdges" upperBound="-1"
+        eType="#//LoadUnloadEdge"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="unloadingEdges" upperBound="-1"
+        eType="#//LoadUnloadEdge"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PacketTransportLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//NodeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PipeStyleTransportSystem" eSuperTypes="#//TransportSystem">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inTransportEdges" upperBound="-1"
+        eType="#//PipeTransportEdge"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="outTransportEdges" upperBound="-1"
+        eType="#//PipeTransportEdge"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxCapacity" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransportSystem" abstract="true" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Node"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PacketTransportLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="capacity" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PacketStyleTransportSystemDecorator"
+      eSuperTypes="../../org.eclipse.stem.core/model/model.ecore#//EdgeDecorator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PipeTransportEdge" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//Edge"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PipeTransportEdgeLabel" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//EdgeLabel"/>
+  <eClassifiers xsi:type="ecore:EClass" name="PipeTransportEdgeLabelValue" eSuperTypes="../../org.eclipse.stem.core/model/graph.ecore#//LabelValue">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxFlow" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EDouble"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="timePeriod" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ELong"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.stem.transport/model/transport.genmodel b/org.eclipse.stem.transport/model/transport.genmodel
new file mode 100644
index 0000000..aed4ef6
--- /dev/null
+++ b/org.eclipse.stem.transport/model/transport.genmodel
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.stem.transport/src"
+    modelPluginID="org.eclipse.stem.transport" modelName="Transport" testsDirectory="/org.eclipse.stem.tests.transport/src"
+    importerID="org.eclipse.emf.importer.java" complianceLevel="5.0" copyrightFields="false"
+    usedGenPackages="../../org.eclipse.stem.definitions/model/definitions.genmodel#//edges ../../org.eclipse.stem.core/model/core.genmodel#//graph ../../org.eclipse.stem.core/model/core.genmodel#//common ../../org.eclipse.stem.core/model/core.genmodel#//model ../../org.eclipse.stem.core/model/core.genmodel#//modifier platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.stem.core/model/core.genmodel#//scenario ../../org.eclipse.stem.core/model/core.genmodel#//sequencer">
+  <foreignModel>@model</foreignModel>
+  <genPackages prefix="Transport" basePackage="org.eclipse.stem.definitions" disposableProviderFactory="true"
+      generateExampleClass="false" multipleEditorPages="false" generateModelWizard="false"
+      ecorePackage="transport.ecore#/">
+    <genClasses ecoreClass="transport.ecore#//LoadUnloadEdge">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute transport.ecore#//LoadUnloadEdge/loadingEdge"/>
+    </genClasses>
+    <genClasses ecoreClass="transport.ecore#//LoadUnloadEdgeLabel">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//LoadUnloadEdgeLabel/activationTime"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//LoadUnloadEdgeLabel/deactivationTime"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute transport.ecore#//LoadUnloadEdgeLabel/activatedRate"/>
+    </genClasses>
+    <genClasses ecoreClass="transport.ecore#//PacketStyleTransportSystem">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//PacketStyleTransportSystem/packetTransportLabel"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//PacketStyleTransportSystem/loadingEdges"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//PacketStyleTransportSystem/unloadingEdges"/>
+    </genClasses>
+    <genClasses ecoreClass="transport.ecore#//PacketTransportLabel"/>
+    <genClasses ecoreClass="transport.ecore#//PipeStyleTransportSystem">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//PipeStyleTransportSystem/inMigrationEdges"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference transport.ecore#//PipeStyleTransportSystem/outMigrationEdges"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="transport.ecore#//TransportSystem"/>
+    <genClasses ecoreClass="transport.ecore#//PacketTransportLabelValue">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute transport.ecore#//PacketTransportLabelValue/capacity"/>
+    </genClasses>
+    <genClasses ecoreClass="transport.ecore#//PacketStyleTransportSystemDecorator"/>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.stem.transport/notice.html b/org.eclipse.stem.transport/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.transport/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.transport/plugin.properties b/org.eclipse.stem.transport/plugin.properties
new file mode 100644
index 0000000..75b57d2
--- /dev/null
+++ b/org.eclipse.stem.transport/plugin.properties
@@ -0,0 +1,26 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM Transport Model Tests
+providerName = Eclipse.org
diff --git a/org.eclipse.stem.transport/plugin.xml b/org.eclipse.stem.transport/plugin.xml
new file mode 100644
index 0000000..47a87a0
--- /dev/null
+++ b/org.eclipse.stem.transport/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http:///org/eclipse/stem/definitions/transport.ecore" 
+       class = "org.eclipse.stem.definitions.transport.TransportPackage"
+       genModel = "model/transport.genmodel" /> 
+  </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdge.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdge.java
new file mode 100644
index 0000000..86fdb7a
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdge.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+
+/**
+ * Represents an edge for the loading and unloading of a packet style transport 
+ * network. 
+ * 
+ * @author jlessler
+ * @model
+ */
+public interface LoadUnloadEdge extends MigrationEdge {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * migration edge URI.
+	 */
+	String URI_TYPE_LOADUNLOADEDGE_SEGMENT = URI_TYPE_MIGRATION_EDGE_SEGMENT + "/load-unload";
+	
+	
+	/**
+	 * @return <code>true</code> if this is a loading edge, <code>false</code>, otherwise.
+	 * 
+	 * @model default="false"
+	 * */
+	boolean isLoadingEdge();
+	
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdge#isLoadingEdge <em>Loading Edge</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Loading Edge</em>' attribute.
+	 * @see #isLoadingEdge()
+	 * @generated
+	 */
+	void setLoadingEdge(boolean value);
+
+
+	/**
+	 * Get the label for this edge...must be a load/unload edge label
+	 * 
+	 * @return an edge label specifying connection times, etc.
+	 * 
+	 */
+	LoadUnloadEdgeLabel getLabel();
+	
+	/**
+	 * @param lbl
+	 */
+	void setLabel(LoadUnloadEdgeLabel lbl);
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdgeLabel.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdgeLabel.java
new file mode 100644
index 0000000..271bb60
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/LoadUnloadEdgeLabel.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+/**
+ * Label for loading and unloading edges. Has information about connection times, disconnection times, etc.
+ * 
+ * @author jlessler
+ *
+ *@model
+ */
+public interface LoadUnloadEdgeLabel extends MigrationEdgeLabel, DynamicLabel {
+		
+	
+	/** Give these labels a special URI */	
+	String URI_TYPE_LOAD_UNLOAD_EDGE_LABEL_SEGMENT = URI_TYPE_MIGRATION_RELATIONSHIP_LABEL_SEGMENT + "/loadUnload";
+	
+	/**
+	 * 
+	 */
+	URI URI_TYPE_LOAD_UNLOAD_EDGE_LABEL = STEMURI.createTypeURI(URI_TYPE_LOAD_UNLOAD_EDGE_LABEL_SEGMENT);
+	
+	/**
+	 * get the activation time for this edge, that is when loading/unloading starts
+	 * @return time of activation
+	 * 
+	 * @model*/
+	STEMTime getActivationTime();
+	
+	/**
+	 * Get the activated rate. The rate of this edge when not active is 0. This
+	 * rate is based on the capacity of the PacketTransportSystem being loaded
+	 * or unloaded, so it needs to be normalized before being passed on to the
+	 * disease models.
+	 * 
+	 * @return the rate of load or unload compared to the packet transport
+	 *         system when activated.
+	 * 
+	 * @model
+	 */
+	double getActivatedRate();
+	
+	/**
+	 * Gets the activated rate normalized for the size of the population being
+	 * loaded/unloaded.
+	 * 
+	 * @return the normalized rate.
+	 */
+	double getNormalizedActivatedRate();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivatedRate <em>Activated Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activated Rate</em>' attribute.
+	 * @see #getActivatedRate()
+	 * @generated
+	 */
+	void setActivatedRate(double value);
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivationTime <em>Activation Time</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Activation Time</em>' reference.
+	 * @see #getActivationTime()
+	 * @generated
+	 */
+	void setActivationTime(STEMTime value);
+
+
+	/**
+	 * Get the deactivation time for this edge, that is when loading/unloading
+	 * ends.
+	 * 
+	 * @return the time of deactivation
+	 * 
+	 * @model
+	 */
+	STEMTime getDeactivationTime();
+
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getDeactivationTime <em>Deactivation Time</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Deactivation Time</em>' reference.
+	 * @see #getDeactivationTime()
+	 * @generated
+	 */
+	void setDeactivationTime(STEMTime value);
+	
+	
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystem.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystem.java
new file mode 100644
index 0000000..2151dea
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystem.java
@@ -0,0 +1,80 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ * Packet style transport systems have dynamic edges connecting
+ * them to different areas. They remain connected for a while, having 
+ * only an influx of population (the loading phase), then are
+ * disconnected for a small period (the transport phase), and finally
+ * are connected to a destination for a defined period (the unloading phase)
+ * 
+ * @author jlessler
+ *
+ * @model
+ */
+public interface PacketStyleTransportSystem extends TransportSystem {
+
+	/**
+	 * 
+	 */
+	String URI_TYPE_PACKET_STYLE_TRANSPORT_SYSTEM = URI_TYPE_TRANSPORT_SYSTEM_NODE_SEGMENT 
+	+ "/packet";
+	
+	/**
+	 * This give a label that describes the behavior of this transport system
+	 * 
+	 * @return a label describing this system
+	 * 
+	 * @model
+	 */
+	PacketTransportLabel getPacketTransportLabel ();
+	
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getPacketTransportLabel <em>Packet Transport Label</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Packet Transport Label</em>' reference.
+	 * @see #getPacketTransportLabel()
+	 * @generated
+	 */
+	void setPacketTransportLabel(PacketTransportLabel value);
+
+	/**
+	 * Gets the series of edges that the packet transport system will use to
+	 * load the system. This is a list of migration edges that will be made
+	 * active at the specified times in that edge.
+	 * 
+	 * @return a list of migration edges
+	 * 
+	 * @model
+	 */
+	EList<LoadUnloadEdge> getLoadingEdges();
+			
+	
+	/**
+	 * Gets the series of edges that the packet transport system will use to
+	 * unload the system. This is a list of migration edges that will be made
+	 * active at the specified times in that edge.
+	 * 
+	 * @return a list of migration edges
+	 * 
+	 * @model
+	 */
+	EList<LoadUnloadEdge> getUnloadingEdges();
+		
+	
+}
+	
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystemDecorator.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystemDecorator.java
new file mode 100644
index 0000000..4032856
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketStyleTransportSystemDecorator.java
@@ -0,0 +1,30 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.EdgeDecorator;
+
+/**
+ * 
+ * Decorator for packet style transport systems. Responsible for setting their 
+ * edge connections, etc., based upon the current time. The meant that the
+ * decorator will make sure the correct load/unload edges are zeroed out or
+ * active at the correct times.
+ *
+ * 
+ * @author jlessler
+ *
+ * @model
+ */
+public interface PacketStyleTransportSystemDecorator extends EdgeDecorator {
+	// Empty	
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabel.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabel.java
new file mode 100644
index 0000000..b5f2b64
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabel.java
@@ -0,0 +1,35 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.NodeLabel;
+
+/**
+ * Label for a packet transport. Right now only provides a capacity.
+ * 
+ * @author jlessler
+ * 
+ * @model
+ */
+public interface PacketTransportLabel extends NodeLabel {
+
+	/**
+	 * Make the current value stuff have to be PacketTransportLabelValues
+	 * @return TODO
+	 */
+	PacketTransportLabelValue getCurrentValue();
+
+	/**
+	 * @param val
+	 */
+	void setCurrentValue(PacketTransportLabelValue val);
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabelValue.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabelValue.java
new file mode 100644
index 0000000..2607ef8
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PacketTransportLabelValue.java
@@ -0,0 +1,43 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * The value for the packet transport label. This has a capacity, indicating how big the system is.
+ * 
+ * @author jlessler
+ *
+ *@model
+ */
+public interface PacketTransportLabelValue extends LabelValue {
+
+	/**
+	 * Get the capacity for the network
+	 * 
+	 * @return the capacity of the network (units?)
+	 * @model default=100.0
+	 */
+	double getCapacity();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PacketTransportLabelValue#getCapacity <em>Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Capacity</em>' attribute.
+	 * @see #getCapacity()
+	 * @generated
+	 */
+	void setCapacity(double value);
+	
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeStyleTransportSystem.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeStyleTransportSystem.java
new file mode 100644
index 0000000..dbeac57
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeStyleTransportSystem.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * A pipe style transport system is much like a geographical region. Disease
+ * processes work within the system based on its on population density, etc. It
+ * is connected to the geographical areas it links by a series of both in
+ * migration and out migration edges. The sum of the rates of out migration on
+ * the out migration edges should some to the average time that an individual
+ * spends within the transport system.
+ * 
+ * @author jlessler
+ * 
+ * @model
+ * 
+ */
+public interface PipeStyleTransportSystem extends TransportSystem {
+
+	/**
+	 * Returns the value of the '<em><b>In Transport Edges</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.stem.definitions.transport.PipeTransportEdge}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>In Transport Edges</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>In Transport Edges</em>' reference list.
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeStyleTransportSystem_InTransportEdges()
+	 * @model
+	 * @generated
+	 */
+	EList<PipeTransportEdge> getInTransportEdges();
+
+	/**
+	 * Returns the value of the '<em><b>Out Transport Edges</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.stem.definitions.transport.PipeTransportEdge}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Out Transport Edges</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Out Transport Edges</em>' reference list.
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeStyleTransportSystem_OutTransportEdges()
+	 * @model
+	 * @generated
+	 */
+	EList<PipeTransportEdge> getOutTransportEdges();
+
+	/**
+	 * Returns the value of the '<em><b>Max Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Max Capacity</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Max Capacity</em>' attribute.
+	 * @see #setMaxCapacity(double)
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeStyleTransportSystem_MaxCapacity()
+	 * @model
+	 * @generated
+	 */
+	double getMaxCapacity();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getMaxCapacity <em>Max Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Max Capacity</em>' attribute.
+	 * @see #getMaxCapacity()
+	 * @generated
+	 */
+	void setMaxCapacity(double value);
+
+	/**
+	 * 
+	 */
+	String URI_TYPE_PIPE_STYLE_TRANSPORT_SYSTEM = URI_TYPE_TRANSPORT_SYSTEM_NODE_SEGMENT
+			+ "/pipe";
+
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdge.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdge.java
new file mode 100644
index 0000000..9eac3e9
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdge.java
@@ -0,0 +1,33 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Edge;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Pipe Transport Edge</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeTransportEdge()
+ * @model
+ * @generated
+ */
+public interface PipeTransportEdge extends Edge {
+	/**
+	 * This is the segment of the type URI that prefixes all other segments in a
+	 * pipe transport edge URI.
+	 */
+	public String URI_TYPE_PIPE_TRANSPORT_EDGE_SEGMENT = URI_TYPE_EDGE_SEGMENT + "/pipetransport";
+
+} // PipeTransportEdge
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabel.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabel.java
new file mode 100644
index 0000000..54ca3d3
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabel.java
@@ -0,0 +1,28 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.EdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Pipe Transport Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeTransportEdgeLabel()
+ * @model
+ * @generated
+ */
+public interface PipeTransportEdgeLabel extends EdgeLabel {
+	// Nothing
+} // PipeTransportEdgeLabel
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelValue.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelValue.java
new file mode 100644
index 0000000..d69d367
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelValue.java
@@ -0,0 +1,86 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Pipe Transport Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getMaxFlow <em>Max Flow</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getTimePeriod <em>Time Period</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeTransportEdgeLabelValue()
+ * @model
+ * @generated
+ */
+public interface PipeTransportEdgeLabelValue extends LabelValue {
+	/**
+	 * Returns the value of the '<em><b>Max Flow</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Max Flow</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Max Flow</em>' attribute.
+	 * @see #setMaxFlow(double)
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeTransportEdgeLabelValue_MaxFlow()
+	 * @model
+	 * @generated
+	 */
+	double getMaxFlow();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getMaxFlow <em>Max Flow</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Max Flow</em>' attribute.
+	 * @see #getMaxFlow()
+	 * @generated
+	 */
+	void setMaxFlow(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Time Period</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Time Period</em>' attribute.
+	 * @see #setTimePeriod(long)
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#getPipeTransportEdgeLabelValue_TimePeriod()
+	 * @model
+	 * @generated
+	 */
+	long getTimePeriod();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getTimePeriod <em>Time Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Time Period</em>' attribute.
+	 * @see #getTimePeriod()
+	 * @generated
+	 */
+	void setTimePeriod(long value);
+
+} // PipeTransportEdgeLabelValue
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelVaue.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelVaue.java
new file mode 100644
index 0000000..0e45674
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/PipeTransportEdgeLabelVaue.java
@@ -0,0 +1,57 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.LabelValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Pipe Transport Edge Label Vaue</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelVaue#getMaxFlow <em>Max Flow</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @model
+ * @generated
+ */
+public interface PipeTransportEdgeLabelVaue extends LabelValue {
+	/**
+	 * Returns the value of the '<em><b>Max Flow</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Max Flow</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Max Flow</em>' attribute.
+	 * @see #setMaxFlow(double)
+	 * @model
+	 * @generated
+	 */
+	double getMaxFlow();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelVaue#getMaxFlow <em>Max Flow</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Max Flow</em>' attribute.
+	 * @see #getMaxFlow()
+	 * @generated
+	 */
+	void setMaxFlow(double value);
+
+} // PipeTransportEdgeLabelVaue
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportFactory.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportFactory.java
new file mode 100644
index 0000000..0fbad90
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportFactory.java
@@ -0,0 +1,132 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.transport.TransportPackage
+ * @generated
+ */
+public interface TransportFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TransportFactory eINSTANCE = org.eclipse.stem.definitions.transport.impl.TransportFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Load Unload Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Load Unload Edge</em>'.
+	 * @generated
+	 */
+	LoadUnloadEdge createLoadUnloadEdge();
+
+	/**
+	 * Returns a new object of class '<em>Load Unload Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Load Unload Edge Label</em>'.
+	 * @generated
+	 */
+	LoadUnloadEdgeLabel createLoadUnloadEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Packet Style Transport System</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Packet Style Transport System</em>'.
+	 * @generated
+	 */
+	PacketStyleTransportSystem createPacketStyleTransportSystem();
+
+	/**
+	 * Returns a new object of class '<em>Packet Transport Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Packet Transport Label</em>'.
+	 * @generated
+	 */
+	PacketTransportLabel createPacketTransportLabel();
+
+	/**
+	 * Returns a new object of class '<em>Pipe Style Transport System</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Pipe Style Transport System</em>'.
+	 * @generated
+	 */
+	PipeStyleTransportSystem createPipeStyleTransportSystem();
+
+	/**
+	 * Returns a new object of class '<em>Packet Transport Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Packet Transport Label Value</em>'.
+	 * @generated
+	 */
+	PacketTransportLabelValue createPacketTransportLabelValue();
+
+	/**
+	 * Returns a new object of class '<em>Packet Style Transport System Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Packet Style Transport System Decorator</em>'.
+	 * @generated
+	 */
+	PacketStyleTransportSystemDecorator createPacketStyleTransportSystemDecorator();
+
+	/**
+	 * Returns a new object of class '<em>Pipe Transport Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Pipe Transport Edge</em>'.
+	 * @generated
+	 */
+	PipeTransportEdge createPipeTransportEdge();
+
+	/**
+	 * Returns a new object of class '<em>Pipe Transport Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Pipe Transport Edge Label</em>'.
+	 * @generated
+	 */
+	PipeTransportEdgeLabel createPipeTransportEdgeLabel();
+
+	/**
+	 * Returns a new object of class '<em>Pipe Transport Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Pipe Transport Edge Label Value</em>'.
+	 * @generated
+	 */
+	PipeTransportEdgeLabelValue createPipeTransportEdgeLabelValue();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	TransportPackage getTransportPackage();
+
+} //TransportFactory
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportPackage.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportPackage.java
new file mode 100644
index 0000000..184aeda
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportPackage.java
@@ -0,0 +1,1478 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.transport.TransportFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface TransportPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "transport";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///org/eclipse/stem/definitions/transport.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "org.eclipse.stem.definitions.transport";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TransportPackage eINSTANCE = org.eclipse.stem.definitions.transport.impl.TransportPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeImpl <em>Load Unload Edge</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getLoadUnloadEdge()
+	 * @generated
+	 */
+	int LOAD_UNLOAD_EDGE = 0;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__URI = EdgesPackage.MIGRATION_EDGE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__TYPE_URI = EdgesPackage.MIGRATION_EDGE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__DUBLIN_CORE = EdgesPackage.MIGRATION_EDGE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>A</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__A = EdgesPackage.MIGRATION_EDGE__A;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__NODE_AURI = EdgesPackage.MIGRATION_EDGE__NODE_AURI;
+
+	/**
+	 * The feature id for the '<em><b>B</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__B = EdgesPackage.MIGRATION_EDGE__B;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__NODE_BURI = EdgesPackage.MIGRATION_EDGE__NODE_BURI;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__LABEL = EdgesPackage.MIGRATION_EDGE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Directed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__DIRECTED = EdgesPackage.MIGRATION_EDGE__DIRECTED;
+
+	/**
+	 * The feature id for the '<em><b>Loading Edge</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE__LOADING_EDGE = EdgesPackage.MIGRATION_EDGE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Load Unload Edge</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_FEATURE_COUNT = EdgesPackage.MIGRATION_EDGE_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl <em>Load Unload Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getLoadUnloadEdgeLabel()
+	 * @generated
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__URI = EdgesPackage.MIGRATION_EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__TYPE_URI = EdgesPackage.MIGRATION_EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__DUBLIN_CORE = EdgesPackage.MIGRATION_EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = EdgesPackage.MIGRATION_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__CURRENT_VALUE = EdgesPackage.MIGRATION_EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__IDENTIFIABLE = EdgesPackage.MIGRATION_EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__EDGE = EdgesPackage.MIGRATION_EDGE_LABEL__EDGE;
+
+	/**
+	 * The feature id for the '<em><b>Next Value Valid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Next Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Decorator</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__DECORATOR = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Activation Time</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 3;
+
+	/**
+	 * The feature id for the '<em><b>Deactivation Time</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 4;
+
+	/**
+	 * The feature id for the '<em><b>Activated Rate</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 5;
+
+	/**
+	 * The number of structural features of the '<em>Load Unload Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOAD_UNLOAD_EDGE_LABEL_FEATURE_COUNT = EdgesPackage.MIGRATION_EDGE_LABEL_FEATURE_COUNT + 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.TransportSystemImpl <em>System</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportSystemImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getTransportSystem()
+	 * @generated
+	 */
+	int TRANSPORT_SYSTEM = 5;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM__URI = GraphPackage.NODE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM__TYPE_URI = GraphPackage.NODE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM__DUBLIN_CORE = GraphPackage.NODE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM__EDGES = GraphPackage.NODE__EDGES;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM__LABELS = GraphPackage.NODE__LABELS;
+
+	/**
+	 * The number of structural features of the '<em>System</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TRANSPORT_SYSTEM_FEATURE_COUNT = GraphPackage.NODE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl <em>Packet Style Transport System</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketStyleTransportSystem()
+	 * @generated
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM = 2;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__URI = TRANSPORT_SYSTEM__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__TYPE_URI = TRANSPORT_SYSTEM__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__DUBLIN_CORE = TRANSPORT_SYSTEM__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__EDGES = TRANSPORT_SYSTEM__EDGES;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__LABELS = TRANSPORT_SYSTEM__LABELS;
+
+	/**
+	 * The feature id for the '<em><b>Packet Transport Label</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL = TRANSPORT_SYSTEM_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Loading Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES = TRANSPORT_SYSTEM_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Unloading Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES = TRANSPORT_SYSTEM_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Packet Style Transport System</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_FEATURE_COUNT = TRANSPORT_SYSTEM_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PacketTransportLabelImpl <em>Packet Transport Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PacketTransportLabelImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketTransportLabel()
+	 * @generated
+	 */
+	int PACKET_TRANSPORT_LABEL = 3;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__URI = GraphPackage.NODE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__TYPE_URI = GraphPackage.NODE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__DUBLIN_CORE = GraphPackage.NODE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.NODE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__CURRENT_VALUE = GraphPackage.NODE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__IDENTIFIABLE = GraphPackage.NODE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Node</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL__NODE = GraphPackage.NODE_LABEL__NODE;
+
+	/**
+	 * The number of structural features of the '<em>Packet Transport Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL_FEATURE_COUNT = GraphPackage.NODE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl <em>Pipe Style Transport System</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeStyleTransportSystem()
+	 * @generated
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM = 4;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__URI = TRANSPORT_SYSTEM__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__TYPE_URI = TRANSPORT_SYSTEM__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__DUBLIN_CORE = TRANSPORT_SYSTEM__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__EDGES = TRANSPORT_SYSTEM__EDGES;
+
+	/**
+	 * The feature id for the '<em><b>Labels</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__LABELS = TRANSPORT_SYSTEM__LABELS;
+
+	/**
+	 * The feature id for the '<em><b>In Transport Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES = TRANSPORT_SYSTEM_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Out Transport Edges</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES = TRANSPORT_SYSTEM_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Max Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY = TRANSPORT_SYSTEM_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Pipe Style Transport System</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_STYLE_TRANSPORT_SYSTEM_FEATURE_COUNT = TRANSPORT_SYSTEM_FEATURE_COUNT + 3;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PacketTransportLabelValueImpl <em>Packet Transport Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PacketTransportLabelValueImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketTransportLabelValue()
+	 * @generated
+	 */
+	int PACKET_TRANSPORT_LABEL_VALUE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Capacity</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL_VALUE__CAPACITY = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Packet Transport Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_TRANSPORT_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemDecoratorImpl <em>Packet Style Transport System Decorator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemDecoratorImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketStyleTransportSystemDecorator()
+	 * @generated
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR = 7;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__URI = ModelPackage.EDGE_DECORATOR__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__TYPE_URI = ModelPackage.EDGE_DECORATOR__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__DUBLIN_CORE = ModelPackage.EDGE_DECORATOR__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>Labels To Update</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__LABELS_TO_UPDATE = ModelPackage.EDGE_DECORATOR__LABELS_TO_UPDATE;
+
+	/**
+	 * The feature id for the '<em><b>Graph</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__GRAPH = ModelPackage.EDGE_DECORATOR__GRAPH;
+
+	/**
+	 * The feature id for the '<em><b>Enabled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__ENABLED = ModelPackage.EDGE_DECORATOR__ENABLED;
+
+	/**
+	 * The feature id for the '<em><b>Graph Decorated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__GRAPH_DECORATED = ModelPackage.EDGE_DECORATOR__GRAPH_DECORATED;
+
+	/**
+	 * The feature id for the '<em><b>Progress</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR__PROGRESS = ModelPackage.EDGE_DECORATOR__PROGRESS;
+
+	/**
+	 * The number of structural features of the '<em>Packet Style Transport System Decorator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR_FEATURE_COUNT = ModelPackage.EDGE_DECORATOR_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeImpl <em>Pipe Transport Edge</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdge()
+	 * @generated
+	 */
+	int PIPE_TRANSPORT_EDGE = 8;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__URI = GraphPackage.EDGE__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__TYPE_URI = GraphPackage.EDGE__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__DUBLIN_CORE = GraphPackage.EDGE__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>A</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__A = GraphPackage.EDGE__A;
+
+	/**
+	 * The feature id for the '<em><b>Node AURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__NODE_AURI = GraphPackage.EDGE__NODE_AURI;
+
+	/**
+	 * The feature id for the '<em><b>B</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__B = GraphPackage.EDGE__B;
+
+	/**
+	 * The feature id for the '<em><b>Node BURI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__NODE_BURI = GraphPackage.EDGE__NODE_BURI;
+
+	/**
+	 * The feature id for the '<em><b>Label</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__LABEL = GraphPackage.EDGE__LABEL;
+
+	/**
+	 * The feature id for the '<em><b>Directed</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE__DIRECTED = GraphPackage.EDGE__DIRECTED;
+
+	/**
+	 * The number of structural features of the '<em>Pipe Transport Edge</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_FEATURE_COUNT = GraphPackage.EDGE_FEATURE_COUNT + 0;
+
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelImpl <em>Pipe Transport Edge Label</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdgeLabel()
+	 * @generated
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL = 9;
+
+	/**
+	 * The feature id for the '<em><b>URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__URI = GraphPackage.EDGE_LABEL__URI;
+
+	/**
+	 * The feature id for the '<em><b>Type URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__TYPE_URI = GraphPackage.EDGE_LABEL__TYPE_URI;
+
+	/**
+	 * The feature id for the '<em><b>Dublin Core</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__DUBLIN_CORE = GraphPackage.EDGE_LABEL__DUBLIN_CORE;
+
+	/**
+	 * The feature id for the '<em><b>URI Of Identifiable To Be Labeled</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED = GraphPackage.EDGE_LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED;
+
+	/**
+	 * The feature id for the '<em><b>Current Value</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__CURRENT_VALUE = GraphPackage.EDGE_LABEL__CURRENT_VALUE;
+
+	/**
+	 * The feature id for the '<em><b>Identifiable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__IDENTIFIABLE = GraphPackage.EDGE_LABEL__IDENTIFIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Edge</b></em>' container reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL__EDGE = GraphPackage.EDGE_LABEL__EDGE;
+
+	/**
+	 * The number of structural features of the '<em>Pipe Transport Edge Label</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL_FEATURE_COUNT = GraphPackage.EDGE_LABEL_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl <em>Pipe Transport Edge Label Value</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl
+	 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdgeLabelValue()
+	 * @generated
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL_VALUE = 10;
+
+	/**
+	 * The feature id for the '<em><b>Max Flow</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Time Period</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Pipe Transport Edge Label Value</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PIPE_TRANSPORT_EDGE_LABEL_VALUE_FEATURE_COUNT = GraphPackage.LABEL_VALUE_FEATURE_COUNT + 2;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdge <em>Load Unload Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Load Unload Edge</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdge
+	 * @generated
+	 */
+	EClass getLoadUnloadEdge();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdge#isLoadingEdge <em>Loading Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Loading Edge</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdge#isLoadingEdge()
+	 * @see #getLoadUnloadEdge()
+	 * @generated
+	 */
+	EAttribute getLoadUnloadEdge_LoadingEdge();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel <em>Load Unload Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Load Unload Edge Label</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel
+	 * @generated
+	 */
+	EClass getLoadUnloadEdgeLabel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivationTime <em>Activation Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Activation Time</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivationTime()
+	 * @see #getLoadUnloadEdgeLabel()
+	 * @generated
+	 */
+	EReference getLoadUnloadEdgeLabel_ActivationTime();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getDeactivationTime <em>Deactivation Time</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Deactivation Time</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getDeactivationTime()
+	 * @see #getLoadUnloadEdgeLabel()
+	 * @generated
+	 */
+	EReference getLoadUnloadEdgeLabel_DeactivationTime();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivatedRate <em>Activated Rate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Activated Rate</em>'.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel#getActivatedRate()
+	 * @see #getLoadUnloadEdgeLabel()
+	 * @generated
+	 */
+	EAttribute getLoadUnloadEdgeLabel_ActivatedRate();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem <em>Packet Style Transport System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Packet Style Transport System</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystem
+	 * @generated
+	 */
+	EClass getPacketStyleTransportSystem();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getPacketTransportLabel <em>Packet Transport Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Packet Transport Label</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getPacketTransportLabel()
+	 * @see #getPacketStyleTransportSystem()
+	 * @generated
+	 */
+	EReference getPacketStyleTransportSystem_PacketTransportLabel();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getLoadingEdges <em>Loading Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Loading Edges</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getLoadingEdges()
+	 * @see #getPacketStyleTransportSystem()
+	 * @generated
+	 */
+	EReference getPacketStyleTransportSystem_LoadingEdges();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getUnloadingEdges <em>Unloading Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Unloading Edges</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystem#getUnloadingEdges()
+	 * @see #getPacketStyleTransportSystem()
+	 * @generated
+	 */
+	EReference getPacketStyleTransportSystem_UnloadingEdges();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PacketTransportLabel <em>Packet Transport Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Packet Transport Label</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketTransportLabel
+	 * @generated
+	 */
+	EClass getPacketTransportLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem <em>Pipe Style Transport System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Pipe Style Transport System</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeStyleTransportSystem
+	 * @generated
+	 */
+	EClass getPipeStyleTransportSystem();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getInTransportEdges <em>In Transport Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>In Transport Edges</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getInTransportEdges()
+	 * @see #getPipeStyleTransportSystem()
+	 * @generated
+	 */
+	EReference getPipeStyleTransportSystem_InTransportEdges();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getOutTransportEdges <em>Out Transport Edges</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Out Transport Edges</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getOutTransportEdges()
+	 * @see #getPipeStyleTransportSystem()
+	 * @generated
+	 */
+	EReference getPipeStyleTransportSystem_OutTransportEdges();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getMaxCapacity <em>Max Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Max Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeStyleTransportSystem#getMaxCapacity()
+	 * @see #getPipeStyleTransportSystem()
+	 * @generated
+	 */
+	EAttribute getPipeStyleTransportSystem_MaxCapacity();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.TransportSystem <em>System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>System</em>'.
+	 * @see org.eclipse.stem.definitions.transport.TransportSystem
+	 * @generated
+	 */
+	EClass getTransportSystem();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PacketTransportLabelValue <em>Packet Transport Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Packet Transport Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketTransportLabelValue
+	 * @generated
+	 */
+	EClass getPacketTransportLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.PacketTransportLabelValue#getCapacity <em>Capacity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Capacity</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketTransportLabelValue#getCapacity()
+	 * @see #getPacketTransportLabelValue()
+	 * @generated
+	 */
+	EAttribute getPacketTransportLabelValue_Capacity();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator <em>Packet Style Transport System Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Packet Style Transport System Decorator</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator
+	 * @generated
+	 */
+	EClass getPacketStyleTransportSystemDecorator();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdge <em>Pipe Transport Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Pipe Transport Edge</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdge
+	 * @generated
+	 */
+	EClass getPipeTransportEdge();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel <em>Pipe Transport Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Pipe Transport Edge Label</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel
+	 * @generated
+	 */
+	EClass getPipeTransportEdgeLabel();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue <em>Pipe Transport Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Pipe Transport Edge Label Value</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue
+	 * @generated
+	 */
+	EClass getPipeTransportEdgeLabelValue();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getMaxFlow <em>Max Flow</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Max Flow</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getMaxFlow()
+	 * @see #getPipeTransportEdgeLabelValue()
+	 * @generated
+	 */
+	EAttribute getPipeTransportEdgeLabelValue_MaxFlow();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getTimePeriod <em>Time Period</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Time Period</em>'.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue#getTimePeriod()
+	 * @see #getPipeTransportEdgeLabelValue()
+	 * @generated
+	 */
+	EAttribute getPipeTransportEdgeLabelValue_TimePeriod();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	TransportFactory getTransportFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeImpl <em>Load Unload Edge</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getLoadUnloadEdge()
+		 * @generated
+		 */
+		EClass LOAD_UNLOAD_EDGE = eINSTANCE.getLoadUnloadEdge();
+
+		/**
+		 * The meta object literal for the '<em><b>Loading Edge</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LOAD_UNLOAD_EDGE__LOADING_EDGE = eINSTANCE.getLoadUnloadEdge_LoadingEdge();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl <em>Load Unload Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getLoadUnloadEdgeLabel()
+		 * @generated
+		 */
+		EClass LOAD_UNLOAD_EDGE_LABEL = eINSTANCE.getLoadUnloadEdgeLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Activation Time</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME = eINSTANCE.getLoadUnloadEdgeLabel_ActivationTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Deactivation Time</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME = eINSTANCE.getLoadUnloadEdgeLabel_DeactivationTime();
+
+		/**
+		 * The meta object literal for the '<em><b>Activated Rate</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE = eINSTANCE.getLoadUnloadEdgeLabel_ActivatedRate();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl <em>Packet Style Transport System</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketStyleTransportSystem()
+		 * @generated
+		 */
+		EClass PACKET_STYLE_TRANSPORT_SYSTEM = eINSTANCE.getPacketStyleTransportSystem();
+
+		/**
+		 * The meta object literal for the '<em><b>Packet Transport Label</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL = eINSTANCE.getPacketStyleTransportSystem_PacketTransportLabel();
+
+		/**
+		 * The meta object literal for the '<em><b>Loading Edges</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES = eINSTANCE.getPacketStyleTransportSystem_LoadingEdges();
+
+		/**
+		 * The meta object literal for the '<em><b>Unloading Edges</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES = eINSTANCE.getPacketStyleTransportSystem_UnloadingEdges();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PacketTransportLabelImpl <em>Packet Transport Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PacketTransportLabelImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketTransportLabel()
+		 * @generated
+		 */
+		EClass PACKET_TRANSPORT_LABEL = eINSTANCE.getPacketTransportLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl <em>Pipe Style Transport System</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeStyleTransportSystem()
+		 * @generated
+		 */
+		EClass PIPE_STYLE_TRANSPORT_SYSTEM = eINSTANCE.getPipeStyleTransportSystem();
+
+		/**
+		 * The meta object literal for the '<em><b>In Transport Edges</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES = eINSTANCE.getPipeStyleTransportSystem_InTransportEdges();
+
+		/**
+		 * The meta object literal for the '<em><b>Out Transport Edges</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES = eINSTANCE.getPipeStyleTransportSystem_OutTransportEdges();
+
+		/**
+		 * The meta object literal for the '<em><b>Max Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY = eINSTANCE.getPipeStyleTransportSystem_MaxCapacity();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.TransportSystemImpl <em>System</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportSystemImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getTransportSystem()
+		 * @generated
+		 */
+		EClass TRANSPORT_SYSTEM = eINSTANCE.getTransportSystem();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PacketTransportLabelValueImpl <em>Packet Transport Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PacketTransportLabelValueImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketTransportLabelValue()
+		 * @generated
+		 */
+		EClass PACKET_TRANSPORT_LABEL_VALUE = eINSTANCE.getPacketTransportLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Capacity</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PACKET_TRANSPORT_LABEL_VALUE__CAPACITY = eINSTANCE.getPacketTransportLabelValue_Capacity();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemDecoratorImpl <em>Packet Style Transport System Decorator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemDecoratorImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPacketStyleTransportSystemDecorator()
+		 * @generated
+		 */
+		EClass PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR = eINSTANCE.getPacketStyleTransportSystemDecorator();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeImpl <em>Pipe Transport Edge</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdge()
+		 * @generated
+		 */
+		EClass PIPE_TRANSPORT_EDGE = eINSTANCE.getPipeTransportEdge();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelImpl <em>Pipe Transport Edge Label</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdgeLabel()
+		 * @generated
+		 */
+		EClass PIPE_TRANSPORT_EDGE_LABEL = eINSTANCE.getPipeTransportEdgeLabel();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl <em>Pipe Transport Edge Label Value</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl
+		 * @see org.eclipse.stem.definitions.transport.impl.TransportPackageImpl#getPipeTransportEdgeLabelValue()
+		 * @generated
+		 */
+		EClass PIPE_TRANSPORT_EDGE_LABEL_VALUE = eINSTANCE.getPipeTransportEdgeLabelValue();
+
+		/**
+		 * The meta object literal for the '<em><b>Max Flow</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW = eINSTANCE.getPipeTransportEdgeLabelValue_MaxFlow();
+
+		/**
+		 * The meta object literal for the '<em><b>Time Period</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD = eINSTANCE.getPipeTransportEdgeLabelValue_TimePeriod();
+
+	}
+
+} //TransportPackage
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportSystem.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportSystem.java
new file mode 100644
index 0000000..6a70a8e
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/TransportSystem.java
@@ -0,0 +1,30 @@
+package org.eclipse.stem.definitions.transport;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.Node;
+
+/**
+ * Node representing the transport system.
+ * 
+ * @author jlessler
+ *
+ * @model abstract="true"
+ */
+public interface TransportSystem extends Node {
+	
+	/**
+	 * 
+	 */
+	String URI_TYPE_TRANSPORT_SYSTEM_NODE_SEGMENT = URI_TYPE_NODE_SEGMENT
+		+ "/transport";
+}
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeImpl.java
new file mode 100644
index 0000000..a2fa0d0
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeImpl.java
@@ -0,0 +1,215 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeImpl;
+
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Load Unload Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeImpl#isLoadingEdge <em>Loading Edge</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LoadUnloadEdgeImpl extends MigrationEdgeImpl implements LoadUnloadEdge {
+	
+	/**
+	 * The default value of the '{@link #isLoadingEdge() <em>Loading Edge</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLoadingEdge()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean LOADING_EDGE_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isLoadingEdge() <em>Loading Edge</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isLoadingEdge()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean loadingEdge = LOADING_EDGE_EDEFAULT;
+	/**
+	 * This is used to generate unique URI's for each LoadUnloadEdgeEdge generated
+	 */
+	static int loadUnloadEdgeCounter = 0;
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected LoadUnloadEdgeImpl() {
+		super();
+		
+		//We need to set the URI
+		setURI(STEMURI.createURI(URI_TYPE_LOADUNLOADEDGE_SEGMENT + "/"
+						+Integer.toString(loadUnloadEdgeCounter++)));
+		
+		//Make a label
+		//setLabel(TransportFactory.eINSTANCE.createLoadUnloadEdgeLabel());
+		
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.LOAD_UNLOAD_EDGE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLoadingEdge() {
+		return loadingEdge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLoadingEdge(boolean newLoadingEdge) {
+		boolean oldLoadingEdge = loadingEdge;
+		loadingEdge = newLoadingEdge;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE__LOADING_EDGE, oldLoadingEdge, loadingEdge));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE__LOADING_EDGE:
+				return isLoadingEdge() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE__LOADING_EDGE:
+				setLoadingEdge(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE__LOADING_EDGE:
+				setLoadingEdge(LOADING_EDGE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE__LOADING_EDGE:
+				return loadingEdge != LOADING_EDGE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (loadingEdge: ");
+		result.append(loadingEdge);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**Implementation of methods to resolve
+	 * return type conflicts.*/
+	public LoadUnloadEdgeLabel getLabel() {
+		return (LoadUnloadEdgeLabel)super.getLabel();
+	}
+	public void setLabel(LoadUnloadEdgeLabel lbl) {
+		super.setLabel(lbl);
+	}
+	
+	
+	/**Perform sanity checks necessary for this type of edge.*/
+	public boolean sane() {
+		boolean rc = super.sane();
+		
+		if (this.isLoadingEdge()) {
+			rc = rc && this.getB() instanceof PacketStyleTransportSystem;
+		} else {
+			rc = rc && this.getA() instanceof PacketStyleTransportSystem;
+		}
+		
+		assert rc;
+		
+		return rc;
+	}
+	
+	
+} //LoadUnloadEdgeImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeLabelImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeLabelImpl.java
new file mode 100644
index 0000000..91802e9
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/LoadUnloadEdgeLabelImpl.java
@@ -0,0 +1,672 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.definitions.edges.EdgesFactory;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+import org.eclipse.stem.definitions.edges.impl.MigrationEdgeLabelImpl;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Load Unload Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#isNextValueValid <em>Next Value Valid</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#getNextValue <em>Next Value</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#getDecorator <em>Decorator</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#getActivationTime <em>Activation Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#getDeactivationTime <em>Deactivation Time</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.LoadUnloadEdgeLabelImpl#getActivatedRate <em>Activated Rate</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class LoadUnloadEdgeLabelImpl extends MigrationEdgeLabelImpl implements LoadUnloadEdgeLabel {
+	
+	
+	/**
+	 * The default value of the '{@link #isNextValueValid() <em>Next Value Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNextValueValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean NEXT_VALUE_VALID_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isNextValueValid() <em>Next Value Valid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isNextValueValid()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean nextValueValid = NEXT_VALUE_VALID_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getNextValue() <em>Next Value</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getNextValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected LabelValue nextValue;
+
+	/**
+	 * The cached value of the '{@link #getDecorator() <em>Decorator</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDecorator()
+	 * @generated
+	 * @ordered
+	 */
+	protected Decorator decorator;
+
+	/**
+	 * The cached value of the '{@link #getActivationTime() <em>Activation Time</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getActivationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime activationTime;
+
+	/**
+	 * The cached value of the '{@link #getDeactivationTime() <em>Deactivation Time</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeactivationTime()
+	 * @generated
+	 * @ordered
+	 */
+	protected STEMTime deactivationTime;
+
+	/**
+	 * The default value of the '{@link #getActivatedRate() <em>Activated Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getActivatedRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double ACTIVATED_RATE_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getActivatedRate() <em>Activated Rate</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getActivatedRate()
+	 * @generated
+	 * @ordered
+	 */
+	protected double activatedRate = ACTIVATED_RATE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected LoadUnloadEdgeLabelImpl() {
+		super();
+		
+		//make sure the type URI is set
+		this.setTypeURI(URI_TYPE_LOAD_UNLOAD_EDGE_LABEL);
+		
+		//give a value for the next value
+		setNextValue(EdgesFactory.eINSTANCE.createMigrationEdgeLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.LOAD_UNLOAD_EDGE_LABEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isNextValueValid() {
+		return nextValueValid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValueValid(boolean newNextValueValid) {
+		boolean oldNextValueValid = nextValueValid;
+		nextValueValid = newNextValueValid;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID, oldNextValueValid, nextValueValid));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LabelValue getNextValue() {
+		return nextValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetNextValue(LabelValue newNextValue, NotificationChain msgs) {
+		LabelValue oldNextValue = nextValue;
+		nextValue = newNextValue;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE, oldNextValue, newNextValue);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	
+	/**Migration edge version*/
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setNextValue(LabelValue newNextValue) {
+		if (newNextValue != nextValue) {
+			NotificationChain msgs = null;
+			if (nextValue != null)
+				msgs = ((InternalEObject)nextValue).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE, null, msgs);
+			if (newNextValue != null)
+				msgs = ((InternalEObject)newNextValue).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE, null, msgs);
+			msgs = basicSetNextValue(newNextValue, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE, newNextValue, newNextValue));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator getDecorator() {
+		if (decorator != null && decorator.eIsProxy()) {
+			InternalEObject oldDecorator = (InternalEObject)decorator;
+			decorator = (Decorator)eResolveProxy(oldDecorator);
+			if (decorator != oldDecorator) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR, oldDecorator, decorator));
+			}
+		}
+		return decorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Decorator basicGetDecorator() {
+		return decorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetDecorator(Decorator newDecorator, NotificationChain msgs) {
+		Decorator oldDecorator = decorator;
+		decorator = newDecorator;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR, oldDecorator, newDecorator);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDecorator(Decorator newDecorator) {
+		if (newDecorator != decorator) {
+			NotificationChain msgs = null;
+			if (decorator != null)
+				msgs = ((InternalEObject)decorator).eInverseRemove(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+			if (newDecorator != null)
+				msgs = ((InternalEObject)newDecorator).eInverseAdd(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+			msgs = basicSetDecorator(newDecorator, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR, newDecorator, newDecorator));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getActivationTime() {
+		if (activationTime != null && activationTime.eIsProxy()) {
+			InternalEObject oldActivationTime = (InternalEObject)activationTime;
+			activationTime = (STEMTime)eResolveProxy(oldActivationTime);
+			if (activationTime != oldActivationTime) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME, oldActivationTime, activationTime));
+			}
+		}
+		return activationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetActivationTime() {
+		return activationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivationTime(STEMTime newActivationTime) {
+		STEMTime oldActivationTime = activationTime;
+		activationTime = newActivationTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME, oldActivationTime, activationTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime getDeactivationTime() {
+		if (deactivationTime != null && deactivationTime.eIsProxy()) {
+			InternalEObject oldDeactivationTime = (InternalEObject)deactivationTime;
+			deactivationTime = (STEMTime)eResolveProxy(oldDeactivationTime);
+			if (deactivationTime != oldDeactivationTime) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME, oldDeactivationTime, deactivationTime));
+			}
+		}
+		return deactivationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public STEMTime basicGetDeactivationTime() {
+		return deactivationTime;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeactivationTime(STEMTime newDeactivationTime) {
+		STEMTime oldDeactivationTime = deactivationTime;
+		deactivationTime = newDeactivationTime;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME, oldDeactivationTime, deactivationTime));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public double getActivatedRate() {
+		return activatedRate;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setActivatedRate(double newActivatedRate) {
+		double oldActivatedRate = activatedRate;
+		activatedRate = newActivatedRate;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE, oldActivatedRate, activatedRate));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void reset() {
+		//set the migration rate to 0
+		this.getCurrentValue().setMigrationRate(0.0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void switchToNextValue() {
+		MigrationEdgeLabelValue tmp = this.getCurrentValue();
+		setCurrentValue(this.getNextValue());
+		setNextValue(tmp);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				if (decorator != null)
+					msgs = ((InternalEObject)decorator).eInverseRemove(this, ModelPackage.DECORATOR__LABELS_TO_UPDATE, Decorator.class, msgs);
+				return basicSetDecorator((Decorator)otherEnd, msgs);
+		}
+		return super.eInverseAdd(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE:
+				return basicSetNextValue(null, msgs);
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				return basicSetDecorator(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID:
+				return isNextValueValid() ? Boolean.TRUE : Boolean.FALSE;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE:
+				return getNextValue();
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				if (resolve) return getDecorator();
+				return basicGetDecorator();
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME:
+				if (resolve) return getActivationTime();
+				return basicGetActivationTime();
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME:
+				if (resolve) return getDeactivationTime();
+				return basicGetDeactivationTime();
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE:
+				return new Double(getActivatedRate());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID:
+				setNextValueValid(((Boolean)newValue).booleanValue());
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE:
+				setNextValue((LabelValue)newValue);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				setDecorator((Decorator)newValue);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME:
+				setActivationTime((STEMTime)newValue);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME:
+				setDeactivationTime((STEMTime)newValue);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE:
+				setActivatedRate(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID:
+				setNextValueValid(NEXT_VALUE_VALID_EDEFAULT);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE:
+				setNextValue((LabelValue)null);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				setDecorator((Decorator)null);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME:
+				setActivationTime((STEMTime)null);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME:
+				setDeactivationTime((STEMTime)null);
+				return;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE:
+				setActivatedRate(ACTIVATED_RATE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID:
+				return nextValueValid != NEXT_VALUE_VALID_EDEFAULT;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE:
+				return nextValue != null;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR:
+				return decorator != null;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME:
+				return activationTime != null;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME:
+				return deactivationTime != null;
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE:
+				return activatedRate != ACTIVATED_RATE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+	
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == DynamicLabel.class) {
+			switch (derivedFeatureID) {
+				case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID: return GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID;
+				case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE: return GraphPackage.DYNAMIC_LABEL__NEXT_VALUE;
+				case TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR: return GraphPackage.DYNAMIC_LABEL__DECORATOR;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == DynamicLabel.class) {
+			switch (baseFeatureID) {
+				case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE_VALID: return TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE_VALID;
+				case GraphPackage.DYNAMIC_LABEL__NEXT_VALUE: return TransportPackage.LOAD_UNLOAD_EDGE_LABEL__NEXT_VALUE;
+				case GraphPackage.DYNAMIC_LABEL__DECORATOR: return TransportPackage.LOAD_UNLOAD_EDGE_LABEL__DECORATOR;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (nextValueValid: ");
+		result.append(nextValueValid);
+		result.append(", activatedRate: ");
+		result.append(activatedRate);
+		result.append(')');
+		return result.toString();
+	}
+
+	/**Do the stuff for testing if a load/unload edge label is "sane"*/
+	@Override
+	public boolean sane() {
+		boolean rc = super.sane();
+		
+		//are activation and deactivation times set.
+		rc = rc && (getActivationTime()!=null);
+		assert(rc);
+		
+		rc = rc && (getDeactivationTime()!=null);
+		assert(rc);
+		
+		//make sure the activation time is before the deactivation time.
+		rc = rc && getActivationTime().getTime().before(getDeactivationTime().getTime());
+		assert(rc);
+		
+		return rc;
+	}
+
+	
+	public double getNormalizedActivatedRate() {
+		LoadUnloadEdge labeledEdge = (LoadUnloadEdge)this.getEdge();
+		
+		Node source = labeledEdge.getA();
+		PacketStyleTransportSystem transSystem = 
+			(PacketStyleTransportSystem) ((labeledEdge.isLoadingEdge())?(labeledEdge.getB()):(labeledEdge.getA()));						
+		
+		Collection <NodeLabel> lbls=source.getLabels();
+		double sourcePop = 0;
+		
+		//Get the population size of the source node
+		for(Iterator<NodeLabel> it = lbls.iterator(); it.hasNext();) {
+			NodeLabel lbl = it.next();
+			if (lbl instanceof PopulationLabel) {
+				sourcePop = ((PopulationLabelValue)((PopulationLabel)lbl).getCurrentValue()).getCount();
+				break;
+			}
+		}
+		assert sourcePop > 0;
+		
+		
+		lbls=transSystem.getLabels();
+		double transCapacity  = 0;
+		
+		
+		//Get the capacity of the packet transport label
+		for(Iterator<NodeLabel> it = lbls.iterator(); it.hasNext();) {
+			NodeLabel lbl = it.next();
+			if (lbl instanceof PacketTransportLabel) {
+				transCapacity = ((PacketTransportLabel)lbl).getCurrentValue().getCapacity();
+				break;
+			}
+		}
+
+		return getActivatedRate()*transCapacity/sourcePop;
+	}
+
+} //LoadUnloadEdgeLabelImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemDecoratorImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemDecoratorImpl.java
new file mode 100644
index 0000000..4fe6435
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemDecoratorImpl.java
@@ -0,0 +1,117 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.model.impl.EdgeDecoratorImpl;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.STEMTime;
+
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabelValue;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Packet Style Transport System Decorator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PacketStyleTransportSystemDecoratorImpl extends EdgeDecoratorImpl implements PacketStyleTransportSystemDecorator {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketStyleTransportSystemDecoratorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR;
+	}
+
+	/**
+	 * Utility method for getting all of the LoadUnloadEdgeLabels in the graph
+	 * */
+	protected Collection<LoadUnloadEdgeLabel> getLoadUnloadLabels (final Graph graph){
+		//List we will return
+		final List<LoadUnloadEdgeLabel> rc = new ArrayList<LoadUnloadEdgeLabel>();
+	
+		//get all of the LoadUnloadEdgeLabels
+			for (Iterator<DynamicLabel> luLabelIterator = graph.getDynamicLabels().iterator();
+		luLabelIterator.hasNext();) {			
+			DynamicLabel tmp = luLabelIterator.next();
+			if (tmp.getTypeURI().equals(LoadUnloadEdgeLabel.URI_TYPE_LOAD_UNLOAD_EDGE_LABEL)) {
+				rc.add((LoadUnloadEdgeLabel)tmp);
+			}
+		}
+	
+		return rc;
+	}
+	
+	/**
+	 * Initialize the graph. Makes sure all of the rates for the edges are zeroed out.
+	 */
+	public void decorateGraph() {
+		//There is nothing to do except reset the labels.		
+		resetLabels();
+	}
+	
+	/**
+	 * Update labels. Make sure all of the labels for the graph are in the appropriate state for this tim
+	 * interval.
+	 */
+	public void updateLabels(final STEMTime time, final long timerPeriod, int cycle) {
+		for (Iterator<LoadUnloadEdgeLabel> it = getLoadUnloadLabels(getGraph()).iterator(); it.hasNext();) {			
+			LoadUnloadEdgeLabel toUpdate = it.next();			
+			
+			if(time.getTime().after(toUpdate.getActivationTime().getTime()) &&
+					time.getTime().before(toUpdate.getDeactivationTime().getTime())) {
+				//Edge should be active...the rate of active edges needs to be normalized
+				// to the population that is coming in				
+				((MigrationEdgeLabelValue)toUpdate.getNextValue()).setMigrationRate(toUpdate.getNormalizedActivatedRate());				
+			} else {
+				//Edge should be inactive
+				((MigrationEdgeLabelValue)toUpdate.getNextValue()).setMigrationRate(0.0);
+			}
+		}
+	}
+	
+	/**
+	 * reset the labels to their initial state in the graph
+	 */
+	public void resetLabels() {
+		for (Iterator<LoadUnloadEdgeLabel> it = getLoadUnloadLabels(getGraph()).iterator(); it.hasNext();) {			
+			LoadUnloadEdgeLabel toUpdate = it.next();
+			toUpdate.reset();
+		}
+	}
+	
+} //PacketStyleTransportSystemDecoratorImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemImpl.java
new file mode 100644
index 0000000..572a6cf
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketStyleTransportSystemImpl.java
@@ -0,0 +1,245 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Packet Style Transport System</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl#getPacketTransportLabel <em>Packet Transport Label</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl#getLoadingEdges <em>Loading Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PacketStyleTransportSystemImpl#getUnloadingEdges <em>Unloading Edges</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PacketStyleTransportSystemImpl extends TransportSystemImpl implements PacketStyleTransportSystem {
+	/**
+	 * The cached value of the '{@link #getPacketTransportLabel() <em>Packet Transport Label</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPacketTransportLabel()
+	 * @generated
+	 * @ordered
+	 */
+	protected PacketTransportLabel packetTransportLabel;
+
+	/**
+	 * The cached value of the '{@link #getLoadingEdges() <em>Loading Edges</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLoadingEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<LoadUnloadEdge> loadingEdges;
+
+	/**
+	 * The cached value of the '{@link #getUnloadingEdges() <em>Unloading Edges</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUnloadingEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<LoadUnloadEdge> unloadingEdges;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected PacketStyleTransportSystemImpl() {
+		super();
+				
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PACKET_STYLE_TRANSPORT_SYSTEM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabel getPacketTransportLabel() {
+		if (packetTransportLabel != null && packetTransportLabel.eIsProxy()) {
+			InternalEObject oldPacketTransportLabel = (InternalEObject)packetTransportLabel;
+			packetTransportLabel = (PacketTransportLabel)eResolveProxy(oldPacketTransportLabel);
+			if (packetTransportLabel != oldPacketTransportLabel) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL, oldPacketTransportLabel, packetTransportLabel));
+			}
+		}
+		return packetTransportLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabel basicGetPacketTransportLabel() {
+		return packetTransportLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void setPacketTransportLabel(PacketTransportLabel newPacketTransportLabel) {
+		PacketTransportLabel oldPacketTransportLabel = packetTransportLabel;
+		packetTransportLabel = newPacketTransportLabel;
+		newPacketTransportLabel.setURIOfIdentifiableToBeLabeled(this.getURI());
+		this.getLabels().add(newPacketTransportLabel);
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL, oldPacketTransportLabel, packetTransportLabel));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<LoadUnloadEdge> getLoadingEdges() {
+		if (loadingEdges == null) {
+			loadingEdges = new EObjectResolvingEList<LoadUnloadEdge>(LoadUnloadEdge.class, this, TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES);
+		}
+		return loadingEdges;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<LoadUnloadEdge> getUnloadingEdges() {
+		if (unloadingEdges == null) {
+			unloadingEdges = new EObjectResolvingEList<LoadUnloadEdge>(LoadUnloadEdge.class, this, TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES);
+		}
+		return unloadingEdges;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL:
+				if (resolve) return getPacketTransportLabel();
+				return basicGetPacketTransportLabel();
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES:
+				return getLoadingEdges();
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES:
+				return getUnloadingEdges();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL:
+				setPacketTransportLabel((PacketTransportLabel)newValue);
+				return;
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES:
+				getLoadingEdges().clear();
+				getLoadingEdges().addAll((Collection<? extends LoadUnloadEdge>)newValue);
+				return;
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES:
+				getUnloadingEdges().clear();
+				getUnloadingEdges().addAll((Collection<? extends LoadUnloadEdge>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL:
+				setPacketTransportLabel((PacketTransportLabel)null);
+				return;
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES:
+				getLoadingEdges().clear();
+				return;
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES:
+				getUnloadingEdges().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL:
+				return packetTransportLabel != null;
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES:
+				return loadingEdges != null && !loadingEdges.isEmpty();
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES:
+				return unloadingEdges != null && !unloadingEdges.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+	
+	
+} //PacketStyleTransportSystemImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelImpl.java
new file mode 100644
index 0000000..634cc2b
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelImpl.java
@@ -0,0 +1,68 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.impl.NodeLabelImpl;
+
+
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.PacketTransportLabelValue;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Packet Transport Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PacketTransportLabelImpl extends NodeLabelImpl implements PacketTransportLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected PacketTransportLabelImpl() {
+		super();		
+		
+		//Set the label value
+		this.setCurrentValue(TransportFactory.eINSTANCE.createPacketTransportLabelValue());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PACKET_TRANSPORT_LABEL;
+	}
+	
+	
+
+	/**Make the current  value stuff have to be PacketTransportLabelValues
+	 * */
+	public PacketTransportLabelValue getCurrentValue() {
+		return (PacketTransportLabelValue)super.getCurrentValue();
+	}
+	public void setCurrentValue(PacketTransportLabelValue val) {
+		super.setCurrentValue(val);
+	}
+	
+	
+} //PacketTransportLabelImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelValueImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelValueImpl.java
new file mode 100644
index 0000000..1546bb8
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PacketTransportLabelValueImpl.java
@@ -0,0 +1,180 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+
+import org.eclipse.stem.definitions.transport.PacketTransportLabelValue;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Packet Transport Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PacketTransportLabelValueImpl#getCapacity <em>Capacity</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PacketTransportLabelValueImpl extends LabelValueImpl implements PacketTransportLabelValue {
+	/**
+	 * The default value of the '{@link #getCapacity() <em>Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double CAPACITY_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getCapacity() <em>Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected double capacity = CAPACITY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PacketTransportLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PACKET_TRANSPORT_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getCapacity() {
+		return capacity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCapacity(double newCapacity) {
+		double oldCapacity = capacity;
+		capacity = newCapacity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.PACKET_TRANSPORT_LABEL_VALUE__CAPACITY, oldCapacity, capacity));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE__CAPACITY:
+				return new Double(getCapacity());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE__CAPACITY:
+				setCapacity(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE__CAPACITY:
+				setCapacity(CAPACITY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE__CAPACITY:
+				return capacity != CAPACITY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (capacity: ");
+		result.append(capacity);
+		result.append(')');
+		return result.toString();
+	}
+	
+	/**Reset to the default value*/
+	public void reset() {
+		super.reset();
+		setCapacity(CAPACITY_EDEFAULT);	
+	}
+
+
+} //PacketTransportLabelValueImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeStyleTransportSystemImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeStyleTransportSystemImpl.java
new file mode 100644
index 0000000..54a230a
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeStyleTransportSystemImpl.java
@@ -0,0 +1,245 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.stem.definitions.transport.PipeStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PipeTransportEdge;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Pipe Style Transport System</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl#getInTransportEdges <em>In Transport Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl#getOutTransportEdges <em>Out Transport Edges</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PipeStyleTransportSystemImpl#getMaxCapacity <em>Max Capacity</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PipeStyleTransportSystemImpl extends TransportSystemImpl implements PipeStyleTransportSystem {
+	/**
+	 * The cached value of the '{@link #getInTransportEdges() <em>In Transport Edges</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInTransportEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<PipeTransportEdge> inTransportEdges;
+
+	/**
+	 * The cached value of the '{@link #getOutTransportEdges() <em>Out Transport Edges</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOutTransportEdges()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<PipeTransportEdge> outTransportEdges;
+
+	/**
+	 * The default value of the '{@link #getMaxCapacity() <em>Max Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MAX_CAPACITY_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMaxCapacity() <em>Max Capacity</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxCapacity()
+	 * @generated
+	 * @ordered
+	 */
+	protected double maxCapacity = MAX_CAPACITY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PipeStyleTransportSystemImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PIPE_STYLE_TRANSPORT_SYSTEM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<PipeTransportEdge> getInTransportEdges() {
+		if (inTransportEdges == null) {
+			inTransportEdges = new EObjectResolvingEList<PipeTransportEdge>(PipeTransportEdge.class, this, TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES);
+		}
+		return inTransportEdges;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<PipeTransportEdge> getOutTransportEdges() {
+		if (outTransportEdges == null) {
+			outTransportEdges = new EObjectResolvingEList<PipeTransportEdge>(PipeTransportEdge.class, this, TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES);
+		}
+		return outTransportEdges;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMaxCapacity() {
+		return maxCapacity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaxCapacity(double newMaxCapacity) {
+		double oldMaxCapacity = maxCapacity;
+		maxCapacity = newMaxCapacity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY, oldMaxCapacity, maxCapacity));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES:
+				return getInTransportEdges();
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES:
+				return getOutTransportEdges();
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY:
+				return new Double(getMaxCapacity());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES:
+				getInTransportEdges().clear();
+				getInTransportEdges().addAll((Collection<? extends PipeTransportEdge>)newValue);
+				return;
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES:
+				getOutTransportEdges().clear();
+				getOutTransportEdges().addAll((Collection<? extends PipeTransportEdge>)newValue);
+				return;
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY:
+				setMaxCapacity(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES:
+				getInTransportEdges().clear();
+				return;
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES:
+				getOutTransportEdges().clear();
+				return;
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY:
+				setMaxCapacity(MAX_CAPACITY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES:
+				return inTransportEdges != null && !inTransportEdges.isEmpty();
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES:
+				return outTransportEdges != null && !outTransportEdges.isEmpty();
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY:
+				return maxCapacity != MAX_CAPACITY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (maxCapacity: ");
+		result.append(maxCapacity);
+		result.append(')');
+		return result.toString();
+	}
+
+} //PipeStyleTransportSystemImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeImpl.java
new file mode 100644
index 0000000..7f01eb3
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeImpl.java
@@ -0,0 +1,67 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.impl.EdgeImpl;
+
+import org.eclipse.stem.definitions.transport.PipeTransportEdge;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Pipe Transport Edge</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PipeTransportEdgeImpl extends EdgeImpl implements PipeTransportEdge {
+	
+	/**
+	 * This is used to generate unique URI's for each pipe transport edge generated
+	 */
+	static int pipeTransportEdgeCounter = 0;
+	
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected PipeTransportEdgeImpl() {
+		super();
+		//set the URI
+		setURI(STEMURI.createURI(URI_TYPE_PIPE_TRANSPORT_EDGE_SEGMENT + "/"
+				+ Integer.toString(pipeTransportEdgeCounter++)));
+			
+		//Make a label
+		setLabel(TransportFactory.eINSTANCE.createPipeTransportEdgeLabel());				
+		
+		//this edge must be directed
+		setDirected(true);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PIPE_TRANSPORT_EDGE;
+	}
+
+} //PipeTransportEdgeImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelImpl.java
new file mode 100644
index 0000000..a750d4a
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelImpl.java
@@ -0,0 +1,50 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.stem.core.graph.impl.EdgeLabelImpl;
+
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Pipe Transport Edge Label</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class PipeTransportEdgeLabelImpl extends EdgeLabelImpl implements PipeTransportEdgeLabel {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PipeTransportEdgeLabelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PIPE_TRANSPORT_EDGE_LABEL;
+	}
+
+} //PipeTransportEdgeLabelImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelValueImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelValueImpl.java
new file mode 100644
index 0000000..bd1df52
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/PipeTransportEdgeLabelValueImpl.java
@@ -0,0 +1,227 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.stem.core.graph.impl.LabelValueImpl;
+
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Pipe Transport Edge Label Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl#getMaxFlow <em>Max Flow</em>}</li>
+ *   <li>{@link org.eclipse.stem.definitions.transport.impl.PipeTransportEdgeLabelValueImpl#getTimePeriod <em>Time Period</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PipeTransportEdgeLabelValueImpl extends LabelValueImpl implements PipeTransportEdgeLabelValue {
+	/**
+	 * The default value of the '{@link #getMaxFlow() <em>Max Flow</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxFlow()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double MAX_FLOW_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getMaxFlow() <em>Max Flow</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMaxFlow()
+	 * @generated
+	 * @ordered
+	 */
+	protected double maxFlow = MAX_FLOW_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getTimePeriod() <em>Time Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTimePeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final long TIME_PERIOD_EDEFAULT = 0L;
+
+	/**
+	 * The cached value of the '{@link #getTimePeriod() <em>Time Period</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTimePeriod()
+	 * @generated
+	 * @ordered
+	 */
+	protected long timePeriod = TIME_PERIOD_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PipeTransportEdgeLabelValueImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.PIPE_TRANSPORT_EDGE_LABEL_VALUE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getMaxFlow() {
+		return maxFlow;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMaxFlow(double newMaxFlow) {
+		double oldMaxFlow = maxFlow;
+		maxFlow = newMaxFlow;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW, oldMaxFlow, maxFlow));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public long getTimePeriod() {
+		return timePeriod;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTimePeriod(long newTimePeriod) {
+		long oldTimePeriod = timePeriod;
+		timePeriod = newTimePeriod;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD, oldTimePeriod, timePeriod));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW:
+				return new Double(getMaxFlow());
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD:
+				return new Long(getTimePeriod());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW:
+				setMaxFlow(((Double)newValue).doubleValue());
+				return;
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD:
+				setTimePeriod(((Long)newValue).longValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW:
+				setMaxFlow(MAX_FLOW_EDEFAULT);
+				return;
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD:
+				setTimePeriod(TIME_PERIOD_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW:
+				return maxFlow != MAX_FLOW_EDEFAULT;
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD:
+				return timePeriod != TIME_PERIOD_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (maxFlow: ");
+		result.append(maxFlow);
+		result.append(", timePeriod: ");
+		result.append(timePeriod);
+		result.append(')');
+		return result.toString();
+	}
+
+} //PipeTransportEdgeLabelValueImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportFactoryImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportFactoryImpl.java
new file mode 100644
index 0000000..49ca651
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportFactoryImpl.java
@@ -0,0 +1,203 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.stem.definitions.transport.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportFactoryImpl extends EFactoryImpl implements TransportFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TransportFactory init() {
+		try {
+			TransportFactory theTransportFactory = (TransportFactory)EPackage.Registry.INSTANCE.getEFactory("http:///org/eclipse/stem/definitions/transport.ecore"); 
+			if (theTransportFactory != null) {
+				return theTransportFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new TransportFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case TransportPackage.LOAD_UNLOAD_EDGE: return createLoadUnloadEdge();
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL: return createLoadUnloadEdgeLabel();
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM: return createPacketStyleTransportSystem();
+			case TransportPackage.PACKET_TRANSPORT_LABEL: return createPacketTransportLabel();
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM: return createPipeStyleTransportSystem();
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE: return createPacketTransportLabelValue();
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR: return createPacketStyleTransportSystemDecorator();
+			case TransportPackage.PIPE_TRANSPORT_EDGE: return createPipeTransportEdge();
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL: return createPipeTransportEdgeLabel();
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE: return createPipeTransportEdgeLabelValue();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LoadUnloadEdge createLoadUnloadEdge() {
+		LoadUnloadEdgeImpl loadUnloadEdge = new LoadUnloadEdgeImpl();
+		return loadUnloadEdge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LoadUnloadEdgeLabel createLoadUnloadEdgeLabel() {
+		LoadUnloadEdgeLabelImpl loadUnloadEdgeLabel = new LoadUnloadEdgeLabelImpl();
+		return loadUnloadEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketStyleTransportSystem createPacketStyleTransportSystem() {
+		PacketStyleTransportSystemImpl packetStyleTransportSystem = new PacketStyleTransportSystemImpl();
+		return packetStyleTransportSystem;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabel createPacketTransportLabel() {
+		PacketTransportLabelImpl packetTransportLabel = new PacketTransportLabelImpl();
+		return packetTransportLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PipeStyleTransportSystem createPipeStyleTransportSystem() {
+		PipeStyleTransportSystemImpl pipeStyleTransportSystem = new PipeStyleTransportSystemImpl();
+		return pipeStyleTransportSystem;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketTransportLabelValue createPacketTransportLabelValue() {
+		PacketTransportLabelValueImpl packetTransportLabelValue = new PacketTransportLabelValueImpl();
+		return packetTransportLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PacketStyleTransportSystemDecorator createPacketStyleTransportSystemDecorator() {
+		PacketStyleTransportSystemDecoratorImpl packetStyleTransportSystemDecorator = new PacketStyleTransportSystemDecoratorImpl();
+		return packetStyleTransportSystemDecorator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PipeTransportEdge createPipeTransportEdge() {
+		PipeTransportEdgeImpl pipeTransportEdge = new PipeTransportEdgeImpl();
+		return pipeTransportEdge;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PipeTransportEdgeLabel createPipeTransportEdgeLabel() {
+		PipeTransportEdgeLabelImpl pipeTransportEdgeLabel = new PipeTransportEdgeLabelImpl();
+		return pipeTransportEdgeLabel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PipeTransportEdgeLabelValue createPipeTransportEdgeLabelValue() {
+		PipeTransportEdgeLabelValueImpl pipeTransportEdgeLabelValue = new PipeTransportEdgeLabelValueImpl();
+		return pipeTransportEdgeLabelValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportPackage getTransportPackage() {
+		return (TransportPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static TransportPackage getPackage() {
+		return TransportPackage.eINSTANCE;
+	}
+
+} //TransportFactoryImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportPackageImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportPackageImpl.java
new file mode 100644
index 0000000..70e2239
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportPackageImpl.java
@@ -0,0 +1,566 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+//import org.eclipse.stem.core.common.CommonPackage;
+
+import org.eclipse.stem.core.graph.GraphPackage;
+
+import org.eclipse.stem.core.model.ModelPackage;
+
+import org.eclipse.stem.definitions.edges.EdgesPackage;
+
+import org.eclipse.stem.definitions.transport.LoadUnloadEdge;
+import org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator;
+import org.eclipse.stem.definitions.transport.PacketTransportLabel;
+import org.eclipse.stem.definitions.transport.PacketTransportLabelValue;
+import org.eclipse.stem.definitions.transport.PipeStyleTransportSystem;
+import org.eclipse.stem.definitions.transport.PipeTransportEdge;
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel;
+import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue;
+import org.eclipse.stem.definitions.transport.TransportFactory;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+import org.eclipse.stem.definitions.transport.TransportSystem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TransportPackageImpl extends EPackageImpl implements TransportPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass loadUnloadEdgeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass loadUnloadEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass packetStyleTransportSystemEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass packetTransportLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass pipeStyleTransportSystemEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass transportSystemEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass packetTransportLabelValueEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass packetStyleTransportSystemDecoratorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass pipeTransportEdgeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass pipeTransportEdgeLabelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass pipeTransportEdgeLabelValueEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.stem.definitions.transport.TransportPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private TransportPackageImpl() {
+		super(eNS_URI, TransportFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static TransportPackage init() {
+		if (isInited) return (TransportPackage)EPackage.Registry.INSTANCE.getEPackage(TransportPackage.eNS_URI);
+
+		// Obtain or create and register package
+		TransportPackageImpl theTransportPackage = (TransportPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof TransportPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new TransportPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EdgesPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theTransportPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theTransportPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theTransportPackage.freeze();
+
+		return theTransportPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLoadUnloadEdge() {
+		return loadUnloadEdgeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLoadUnloadEdge_LoadingEdge() {
+		return (EAttribute)loadUnloadEdgeEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLoadUnloadEdgeLabel() {
+		return loadUnloadEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLoadUnloadEdgeLabel_ActivationTime() {
+		return (EReference)loadUnloadEdgeLabelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLoadUnloadEdgeLabel_DeactivationTime() {
+		return (EReference)loadUnloadEdgeLabelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLoadUnloadEdgeLabel_ActivatedRate() {
+		return (EAttribute)loadUnloadEdgeLabelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPacketStyleTransportSystem() {
+		return packetStyleTransportSystemEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPacketStyleTransportSystem_PacketTransportLabel() {
+		return (EReference)packetStyleTransportSystemEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPacketStyleTransportSystem_LoadingEdges() {
+		return (EReference)packetStyleTransportSystemEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPacketStyleTransportSystem_UnloadingEdges() {
+		return (EReference)packetStyleTransportSystemEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPacketTransportLabel() {
+		return packetTransportLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPipeStyleTransportSystem() {
+		return pipeStyleTransportSystemEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPipeStyleTransportSystem_InTransportEdges() {
+		return (EReference)pipeStyleTransportSystemEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPipeStyleTransportSystem_OutTransportEdges() {
+		return (EReference)pipeStyleTransportSystemEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPipeStyleTransportSystem_MaxCapacity() {
+		return (EAttribute)pipeStyleTransportSystemEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTransportSystem() {
+		return transportSystemEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPacketTransportLabelValue() {
+		return packetTransportLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPacketTransportLabelValue_Capacity() {
+		return (EAttribute)packetTransportLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPacketStyleTransportSystemDecorator() {
+		return packetStyleTransportSystemDecoratorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPipeTransportEdge() {
+		return pipeTransportEdgeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPipeTransportEdgeLabel() {
+		return pipeTransportEdgeLabelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPipeTransportEdgeLabelValue() {
+		return pipeTransportEdgeLabelValueEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPipeTransportEdgeLabelValue_MaxFlow() {
+		return (EAttribute)pipeTransportEdgeLabelValueEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPipeTransportEdgeLabelValue_TimePeriod() {
+		return (EAttribute)pipeTransportEdgeLabelValueEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportFactory getTransportFactory() {
+		return (TransportFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		loadUnloadEdgeEClass = createEClass(LOAD_UNLOAD_EDGE);
+		createEAttribute(loadUnloadEdgeEClass, LOAD_UNLOAD_EDGE__LOADING_EDGE);
+
+		loadUnloadEdgeLabelEClass = createEClass(LOAD_UNLOAD_EDGE_LABEL);
+		createEReference(loadUnloadEdgeLabelEClass, LOAD_UNLOAD_EDGE_LABEL__ACTIVATION_TIME);
+		createEReference(loadUnloadEdgeLabelEClass, LOAD_UNLOAD_EDGE_LABEL__DEACTIVATION_TIME);
+		createEAttribute(loadUnloadEdgeLabelEClass, LOAD_UNLOAD_EDGE_LABEL__ACTIVATED_RATE);
+
+		packetStyleTransportSystemEClass = createEClass(PACKET_STYLE_TRANSPORT_SYSTEM);
+		createEReference(packetStyleTransportSystemEClass, PACKET_STYLE_TRANSPORT_SYSTEM__PACKET_TRANSPORT_LABEL);
+		createEReference(packetStyleTransportSystemEClass, PACKET_STYLE_TRANSPORT_SYSTEM__LOADING_EDGES);
+		createEReference(packetStyleTransportSystemEClass, PACKET_STYLE_TRANSPORT_SYSTEM__UNLOADING_EDGES);
+
+		packetTransportLabelEClass = createEClass(PACKET_TRANSPORT_LABEL);
+
+		pipeStyleTransportSystemEClass = createEClass(PIPE_STYLE_TRANSPORT_SYSTEM);
+		createEReference(pipeStyleTransportSystemEClass, PIPE_STYLE_TRANSPORT_SYSTEM__IN_TRANSPORT_EDGES);
+		createEReference(pipeStyleTransportSystemEClass, PIPE_STYLE_TRANSPORT_SYSTEM__OUT_TRANSPORT_EDGES);
+		createEAttribute(pipeStyleTransportSystemEClass, PIPE_STYLE_TRANSPORT_SYSTEM__MAX_CAPACITY);
+
+		transportSystemEClass = createEClass(TRANSPORT_SYSTEM);
+
+		packetTransportLabelValueEClass = createEClass(PACKET_TRANSPORT_LABEL_VALUE);
+		createEAttribute(packetTransportLabelValueEClass, PACKET_TRANSPORT_LABEL_VALUE__CAPACITY);
+
+		packetStyleTransportSystemDecoratorEClass = createEClass(PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR);
+
+		pipeTransportEdgeEClass = createEClass(PIPE_TRANSPORT_EDGE);
+
+		pipeTransportEdgeLabelEClass = createEClass(PIPE_TRANSPORT_EDGE_LABEL);
+
+		pipeTransportEdgeLabelValueEClass = createEClass(PIPE_TRANSPORT_EDGE_LABEL_VALUE);
+		createEAttribute(pipeTransportEdgeLabelValueEClass, PIPE_TRANSPORT_EDGE_LABEL_VALUE__MAX_FLOW);
+		createEAttribute(pipeTransportEdgeLabelValueEClass, PIPE_TRANSPORT_EDGE_LABEL_VALUE__TIME_PERIOD);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		EdgesPackage theEdgesPackage = (EdgesPackage)EPackage.Registry.INSTANCE.getEPackage(EdgesPackage.eNS_URI);
+		GraphPackage theGraphPackage = (GraphPackage)EPackage.Registry.INSTANCE.getEPackage(GraphPackage.eNS_URI);
+		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+		loadUnloadEdgeEClass.getESuperTypes().add(theEdgesPackage.getMigrationEdge());
+		loadUnloadEdgeLabelEClass.getESuperTypes().add(theEdgesPackage.getMigrationEdgeLabel());
+		loadUnloadEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getDynamicLabel());
+		packetStyleTransportSystemEClass.getESuperTypes().add(this.getTransportSystem());
+		packetTransportLabelEClass.getESuperTypes().add(theGraphPackage.getNodeLabel());
+		pipeStyleTransportSystemEClass.getESuperTypes().add(this.getTransportSystem());
+		transportSystemEClass.getESuperTypes().add(theGraphPackage.getNode());
+		packetTransportLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+		packetStyleTransportSystemDecoratorEClass.getESuperTypes().add(theModelPackage.getEdgeDecorator());
+		pipeTransportEdgeEClass.getESuperTypes().add(theGraphPackage.getEdge());
+		pipeTransportEdgeLabelEClass.getESuperTypes().add(theGraphPackage.getEdgeLabel());
+		pipeTransportEdgeLabelValueEClass.getESuperTypes().add(theGraphPackage.getLabelValue());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(loadUnloadEdgeEClass, LoadUnloadEdge.class, "LoadUnloadEdge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getLoadUnloadEdge_LoadingEdge(), ecorePackage.getEBoolean(), "loadingEdge", "false", 0, 1, LoadUnloadEdge.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(loadUnloadEdgeLabelEClass, LoadUnloadEdgeLabel.class, "LoadUnloadEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getLoadUnloadEdgeLabel_ActivationTime(), theModelPackage.getSTEMTime(), null, "activationTime", null, 0, 1, LoadUnloadEdgeLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getLoadUnloadEdgeLabel_DeactivationTime(), theModelPackage.getSTEMTime(), null, "deactivationTime", null, 0, 1, LoadUnloadEdgeLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getLoadUnloadEdgeLabel_ActivatedRate(), ecorePackage.getEDouble(), "activatedRate", null, 0, 1, LoadUnloadEdgeLabel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(packetStyleTransportSystemEClass, PacketStyleTransportSystem.class, "PacketStyleTransportSystem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPacketStyleTransportSystem_PacketTransportLabel(), this.getPacketTransportLabel(), null, "packetTransportLabel", null, 0, 1, PacketStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPacketStyleTransportSystem_LoadingEdges(), this.getLoadUnloadEdge(), null, "loadingEdges", null, 0, -1, PacketStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPacketStyleTransportSystem_UnloadingEdges(), this.getLoadUnloadEdge(), null, "unloadingEdges", null, 0, -1, PacketStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(packetTransportLabelEClass, PacketTransportLabel.class, "PacketTransportLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(pipeStyleTransportSystemEClass, PipeStyleTransportSystem.class, "PipeStyleTransportSystem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPipeStyleTransportSystem_InTransportEdges(), this.getPipeTransportEdge(), null, "inTransportEdges", null, 0, -1, PipeStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPipeStyleTransportSystem_OutTransportEdges(), this.getPipeTransportEdge(), null, "outTransportEdges", null, 0, -1, PipeStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPipeStyleTransportSystem_MaxCapacity(), theEcorePackage.getEDouble(), "maxCapacity", null, 0, 1, PipeStyleTransportSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(transportSystemEClass, TransportSystem.class, "TransportSystem", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(packetTransportLabelValueEClass, PacketTransportLabelValue.class, "PacketTransportLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getPacketTransportLabelValue_Capacity(), ecorePackage.getEDouble(), "capacity", null, 0, 1, PacketTransportLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(packetStyleTransportSystemDecoratorEClass, PacketStyleTransportSystemDecorator.class, "PacketStyleTransportSystemDecorator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(pipeTransportEdgeEClass, PipeTransportEdge.class, "PipeTransportEdge", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(pipeTransportEdgeLabelEClass, PipeTransportEdgeLabel.class, "PipeTransportEdgeLabel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(pipeTransportEdgeLabelValueEClass, PipeTransportEdgeLabelValue.class, "PipeTransportEdgeLabelValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getPipeTransportEdgeLabelValue_MaxFlow(), theEcorePackage.getEDouble(), "maxFlow", null, 0, 1, PipeTransportEdgeLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPipeTransportEdgeLabelValue_TimePeriod(), theEcorePackage.getELong(), "timePeriod", null, 0, 1, PipeTransportEdgeLabelValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //TransportPackageImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportSystemImpl.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportSystemImpl.java
new file mode 100644
index 0000000..f593743
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/impl/TransportSystemImpl.java
@@ -0,0 +1,71 @@
+package org.eclipse.stem.definitions.transport.impl;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.stem.core.graph.impl.NodeImpl;
+import org.eclipse.stem.definitions.transport.TransportPackage;
+import org.eclipse.stem.definitions.transport.TransportSystem;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>System</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class TransportSystemImpl extends NodeImpl implements TransportSystem {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected TransportSystemImpl() {
+		super();				
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TransportPackage.Literals.TRANSPORT_SYSTEM;
+	}
+	
+	/**
+	 * Make sure that this transport system is sane(). That is that it has all of the properties that
+	 * a transport system must have...namely some population label.
+	 */
+	@Override
+	public boolean sane() {
+		boolean retValue = super.sane();
+		
+//		// A Transportation System should have a population label
+		// Not clear that this is true
+//		retValue = false;
+//		for (NodeLabel l:this.getLabels()) {
+//			// Found a population label?
+//			if (l instanceof PopulationLabel) {
+//				// Yes
+//				retValue = true;
+//				break;
+//			} // if PopulationLabel
+//		}
+//		assert retValue;
+		return retValue;
+	} // sane
+
+} //TransportSystemImpl
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportAdapterFactory.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportAdapterFactory.java
new file mode 100644
index 0000000..ed5d904
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportAdapterFactory.java
@@ -0,0 +1,596 @@
+package org.eclipse.stem.definitions.transport.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+import org.eclipse.stem.definitions.transport.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.transport.TransportPackage
+ * @generated
+ */
+public class TransportAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TransportPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = TransportPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TransportSwitch<Adapter> modelSwitch =
+		new TransportSwitch<Adapter>() {
+			@Override
+			public Adapter caseLoadUnloadEdge(LoadUnloadEdge object) {
+				return createLoadUnloadEdgeAdapter();
+			}
+			@Override
+			public Adapter caseLoadUnloadEdgeLabel(LoadUnloadEdgeLabel object) {
+				return createLoadUnloadEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter casePacketStyleTransportSystem(PacketStyleTransportSystem object) {
+				return createPacketStyleTransportSystemAdapter();
+			}
+			@Override
+			public Adapter casePacketTransportLabel(PacketTransportLabel object) {
+				return createPacketTransportLabelAdapter();
+			}
+			@Override
+			public Adapter casePipeStyleTransportSystem(PipeStyleTransportSystem object) {
+				return createPipeStyleTransportSystemAdapter();
+			}
+			@Override
+			public Adapter caseTransportSystem(TransportSystem object) {
+				return createTransportSystemAdapter();
+			}
+			@Override
+			public Adapter casePacketTransportLabelValue(PacketTransportLabelValue object) {
+				return createPacketTransportLabelValueAdapter();
+			}
+			@Override
+			public Adapter casePacketStyleTransportSystemDecorator(PacketStyleTransportSystemDecorator object) {
+				return createPacketStyleTransportSystemDecoratorAdapter();
+			}
+			@Override
+			public Adapter casePipeTransportEdge(PipeTransportEdge object) {
+				return createPipeTransportEdgeAdapter();
+			}
+			@Override
+			public Adapter casePipeTransportEdgeLabel(PipeTransportEdgeLabel object) {
+				return createPipeTransportEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter casePipeTransportEdgeLabelValue(PipeTransportEdgeLabelValue object) {
+				return createPipeTransportEdgeLabelValueAdapter();
+			}
+			@Override
+			public <T> Adapter caseComparable(Comparable<T> object) {
+				return createComparableAdapter();
+			}
+			@Override
+			public Adapter caseIdentifiable(Identifiable object) {
+				return createIdentifiableAdapter();
+			}
+			@Override
+			public Adapter caseModifiable(Modifiable object) {
+				return createModifiableAdapter();
+			}
+			@Override
+			public Adapter caseEdge(Edge object) {
+				return createEdgeAdapter();
+			}
+			@Override
+			public Adapter caseMigrationEdge(MigrationEdge object) {
+				return createMigrationEdgeAdapter();
+			}
+			@Override
+			public Adapter caseLabel(Label object) {
+				return createLabelAdapter();
+			}
+			@Override
+			public Adapter caseEdgeLabel(EdgeLabel object) {
+				return createEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseMigrationEdgeLabel(MigrationEdgeLabel object) {
+				return createMigrationEdgeLabelAdapter();
+			}
+			@Override
+			public Adapter caseDynamicLabel(DynamicLabel object) {
+				return createDynamicLabelAdapter();
+			}
+			@Override
+			public Adapter caseNode(Node object) {
+				return createNodeAdapter();
+			}
+			@Override
+			public Adapter caseNodeLabel(NodeLabel object) {
+				return createNodeLabelAdapter();
+			}
+			@Override
+			public Adapter caseSanityChecker(SanityChecker object) {
+				return createSanityCheckerAdapter();
+			}
+			@Override
+			public Adapter caseLabelValue(LabelValue object) {
+				return createLabelValueAdapter();
+			}
+			@Override
+			public Adapter caseDecorator(Decorator object) {
+				return createDecoratorAdapter();
+			}
+			@Override
+			public Adapter caseEdgeDecorator(EdgeDecorator object) {
+				return createEdgeDecoratorAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdge <em>Load Unload Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdge
+	 * @generated
+	 */
+	public Adapter createLoadUnloadEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel <em>Load Unload Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.LoadUnloadEdgeLabel
+	 * @generated
+	 */
+	public Adapter createLoadUnloadEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystem <em>Packet Style Transport System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystem
+	 * @generated
+	 */
+	public Adapter createPacketStyleTransportSystemAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PacketTransportLabel <em>Packet Transport Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PacketTransportLabel
+	 * @generated
+	 */
+	public Adapter createPacketTransportLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PipeStyleTransportSystem <em>Pipe Style Transport System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PipeStyleTransportSystem
+	 * @generated
+	 */
+	public Adapter createPipeStyleTransportSystemAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.TransportSystem <em>System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.TransportSystem
+	 * @generated
+	 */
+	public Adapter createTransportSystemAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PacketTransportLabelValue <em>Packet Transport Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PacketTransportLabelValue
+	 * @generated
+	 */
+	public Adapter createPacketTransportLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator <em>Packet Style Transport System Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PacketStyleTransportSystemDecorator
+	 * @generated
+	 */
+	public Adapter createPacketStyleTransportSystemDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdge <em>Pipe Transport Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdge
+	 * @generated
+	 */
+	public Adapter createPipeTransportEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel <em>Pipe Transport Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabel
+	 * @generated
+	 */
+	public Adapter createPipeTransportEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue <em>Pipe Transport Edge Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue
+	 * @generated
+	 */
+	public Adapter createPipeTransportEdgeLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.lang.Comparable <em>Comparable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.lang.Comparable
+	 * @generated
+	 */
+	public Adapter createComparableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.Identifiable <em>Identifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.Identifiable
+	 * @generated
+	 */
+	public Adapter createIdentifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.modifier.Modifiable <em>Modifiable</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.modifier.Modifiable
+	 * @generated
+	 */
+	public Adapter createModifiableAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Edge <em>Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Edge
+	 * @generated
+	 */
+	public Adapter createEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MigrationEdge <em>Migration Edge</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdge
+	 * @generated
+	 */
+	public Adapter createMigrationEdgeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Label <em>Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Label
+	 * @generated
+	 */
+	public Adapter createLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.EdgeLabel <em>Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.EdgeLabel
+	 * @generated
+	 */
+	public Adapter createEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.definitions.edges.MigrationEdgeLabel <em>Migration Edge Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.definitions.edges.MigrationEdgeLabel
+	 * @generated
+	 */
+	public Adapter createMigrationEdgeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.DynamicLabel <em>Dynamic Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.DynamicLabel
+	 * @generated
+	 */
+	public Adapter createDynamicLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.Node <em>Node</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.Node
+	 * @generated
+	 */
+	public Adapter createNodeAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.NodeLabel <em>Node Label</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.NodeLabel
+	 * @generated
+	 */
+	public Adapter createNodeLabelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.common.SanityChecker <em>Sanity Checker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.common.SanityChecker
+	 * @generated
+	 */
+	public Adapter createSanityCheckerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.graph.LabelValue <em>Label Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.graph.LabelValue
+	 * @generated
+	 */
+	public Adapter createLabelValueAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.Decorator <em>Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.Decorator
+	 * @generated
+	 */
+	public Adapter createDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.stem.core.model.EdgeDecorator <em>Edge Decorator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.stem.core.model.EdgeDecorator
+	 * @generated
+	 */
+	public Adapter createEdgeDecoratorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //TransportAdapterFactory
diff --git a/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportSwitch.java b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportSwitch.java
new file mode 100644
index 0000000..30e8559
--- /dev/null
+++ b/org.eclipse.stem.transport/src/org/eclipse/stem/definitions/transport/util/TransportSwitch.java
@@ -0,0 +1,629 @@
+package org.eclipse.stem.definitions.transport.util;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.stem.core.common.Identifiable;
+
+import org.eclipse.stem.core.common.SanityChecker;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.Label;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.Node;
+
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.EdgeDecorator;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.definitions.edges.MigrationEdge;
+import org.eclipse.stem.definitions.edges.MigrationEdgeLabel;
+
+import org.eclipse.stem.definitions.transport.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.stem.definitions.transport.TransportPackage
+ * @generated
+ */
+public class TransportSwitch<T1> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TransportPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TransportSwitch() {
+		if (modelPackage == null) {
+			modelPackage = TransportPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T1 doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List<EClass> eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch(eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T1 doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case TransportPackage.LOAD_UNLOAD_EDGE: {
+				LoadUnloadEdge loadUnloadEdge = (LoadUnloadEdge)theEObject;
+				T1 result = caseLoadUnloadEdge(loadUnloadEdge);
+				if (result == null) result = caseMigrationEdge(loadUnloadEdge);
+				if (result == null) result = caseEdge(loadUnloadEdge);
+				if (result == null) result = caseIdentifiable(loadUnloadEdge);
+				if (result == null) result = caseModifiable(loadUnloadEdge);
+				if (result == null) result = caseComparable(loadUnloadEdge);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.LOAD_UNLOAD_EDGE_LABEL: {
+				LoadUnloadEdgeLabel loadUnloadEdgeLabel = (LoadUnloadEdgeLabel)theEObject;
+				T1 result = caseLoadUnloadEdgeLabel(loadUnloadEdgeLabel);
+				if (result == null) result = caseMigrationEdgeLabel(loadUnloadEdgeLabel);
+				if (result == null) result = caseDynamicLabel(loadUnloadEdgeLabel);
+				if (result == null) result = caseEdgeLabel(loadUnloadEdgeLabel);
+				if (result == null) result = caseLabel(loadUnloadEdgeLabel);
+				if (result == null) result = caseIdentifiable(loadUnloadEdgeLabel);
+				if (result == null) result = caseComparable(loadUnloadEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM: {
+				PacketStyleTransportSystem packetStyleTransportSystem = (PacketStyleTransportSystem)theEObject;
+				T1 result = casePacketStyleTransportSystem(packetStyleTransportSystem);
+				if (result == null) result = caseTransportSystem(packetStyleTransportSystem);
+				if (result == null) result = caseNode(packetStyleTransportSystem);
+				if (result == null) result = caseIdentifiable(packetStyleTransportSystem);
+				if (result == null) result = caseComparable(packetStyleTransportSystem);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PACKET_TRANSPORT_LABEL: {
+				PacketTransportLabel packetTransportLabel = (PacketTransportLabel)theEObject;
+				T1 result = casePacketTransportLabel(packetTransportLabel);
+				if (result == null) result = caseNodeLabel(packetTransportLabel);
+				if (result == null) result = caseLabel(packetTransportLabel);
+				if (result == null) result = caseIdentifiable(packetTransportLabel);
+				if (result == null) result = caseComparable(packetTransportLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PIPE_STYLE_TRANSPORT_SYSTEM: {
+				PipeStyleTransportSystem pipeStyleTransportSystem = (PipeStyleTransportSystem)theEObject;
+				T1 result = casePipeStyleTransportSystem(pipeStyleTransportSystem);
+				if (result == null) result = caseTransportSystem(pipeStyleTransportSystem);
+				if (result == null) result = caseNode(pipeStyleTransportSystem);
+				if (result == null) result = caseIdentifiable(pipeStyleTransportSystem);
+				if (result == null) result = caseComparable(pipeStyleTransportSystem);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.TRANSPORT_SYSTEM: {
+				TransportSystem transportSystem = (TransportSystem)theEObject;
+				T1 result = caseTransportSystem(transportSystem);
+				if (result == null) result = caseNode(transportSystem);
+				if (result == null) result = caseIdentifiable(transportSystem);
+				if (result == null) result = caseComparable(transportSystem);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PACKET_TRANSPORT_LABEL_VALUE: {
+				PacketTransportLabelValue packetTransportLabelValue = (PacketTransportLabelValue)theEObject;
+				T1 result = casePacketTransportLabelValue(packetTransportLabelValue);
+				if (result == null) result = caseLabelValue(packetTransportLabelValue);
+				if (result == null) result = caseSanityChecker(packetTransportLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PACKET_STYLE_TRANSPORT_SYSTEM_DECORATOR: {
+				PacketStyleTransportSystemDecorator packetStyleTransportSystemDecorator = (PacketStyleTransportSystemDecorator)theEObject;
+				T1 result = casePacketStyleTransportSystemDecorator(packetStyleTransportSystemDecorator);
+				if (result == null) result = caseEdgeDecorator(packetStyleTransportSystemDecorator);
+				if (result == null) result = caseDecorator(packetStyleTransportSystemDecorator);
+				if (result == null) result = caseIdentifiable(packetStyleTransportSystemDecorator);
+				if (result == null) result = caseComparable(packetStyleTransportSystemDecorator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PIPE_TRANSPORT_EDGE: {
+				PipeTransportEdge pipeTransportEdge = (PipeTransportEdge)theEObject;
+				T1 result = casePipeTransportEdge(pipeTransportEdge);
+				if (result == null) result = caseEdge(pipeTransportEdge);
+				if (result == null) result = caseIdentifiable(pipeTransportEdge);
+				if (result == null) result = caseModifiable(pipeTransportEdge);
+				if (result == null) result = caseComparable(pipeTransportEdge);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL: {
+				PipeTransportEdgeLabel pipeTransportEdgeLabel = (PipeTransportEdgeLabel)theEObject;
+				T1 result = casePipeTransportEdgeLabel(pipeTransportEdgeLabel);
+				if (result == null) result = caseEdgeLabel(pipeTransportEdgeLabel);
+				if (result == null) result = caseLabel(pipeTransportEdgeLabel);
+				if (result == null) result = caseIdentifiable(pipeTransportEdgeLabel);
+				if (result == null) result = caseComparable(pipeTransportEdgeLabel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TransportPackage.PIPE_TRANSPORT_EDGE_LABEL_VALUE: {
+				PipeTransportEdgeLabelValue pipeTransportEdgeLabelValue = (PipeTransportEdgeLabelValue)theEObject;
+				T1 result = casePipeTransportEdgeLabelValue(pipeTransportEdgeLabelValue);
+				if (result == null) result = caseLabelValue(pipeTransportEdgeLabelValue);
+				if (result == null) result = caseSanityChecker(pipeTransportEdgeLabelValue);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Load Unload Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Load Unload Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLoadUnloadEdge(LoadUnloadEdge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Load Unload Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Load Unload Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLoadUnloadEdgeLabel(LoadUnloadEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Packet Style Transport System</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Packet Style Transport System</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePacketStyleTransportSystem(PacketStyleTransportSystem object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Packet Transport Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Packet Transport Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePacketTransportLabel(PacketTransportLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Pipe Style Transport System</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Pipe Style Transport System</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePipeStyleTransportSystem(PipeStyleTransportSystem object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>System</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>System</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseTransportSystem(TransportSystem object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Packet Transport Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Packet Transport Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePacketTransportLabelValue(PacketTransportLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Packet Style Transport System Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Packet Style Transport System Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePacketStyleTransportSystemDecorator(PacketStyleTransportSystemDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Pipe Transport Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Pipe Transport Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePipeTransportEdge(PipeTransportEdge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Pipe Transport Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Pipe Transport Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePipeTransportEdgeLabel(PipeTransportEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Pipe Transport Edge Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Pipe Transport Edge Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 casePipeTransportEdgeLabelValue(PipeTransportEdgeLabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Comparable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public <T> T1 caseComparable(Comparable<T> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Identifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseIdentifiable(Identifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Modifiable</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseModifiable(Modifiable object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdge(Edge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Migration Edge</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Migration Edge</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMigrationEdge(MigrationEdge object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabel(Label object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeLabel(EdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Migration Edge Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Migration Edge Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseMigrationEdgeLabel(MigrationEdgeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Dynamic Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDynamicLabel(DynamicLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNode(Node object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Node Label</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseNodeLabel(NodeLabel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Sanity Checker</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseSanityChecker(SanityChecker object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Label Value</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseLabelValue(LabelValue object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseDecorator(Decorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Edge Decorator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T1 caseEdgeDecorator(EdgeDecorator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T1 defaultCase(EObject object) {
+		return null;
+	}
+
+} //TransportSwitch
diff --git a/org.eclipse.stem.ui.diseasemodels.example/.classpath b/org.eclipse.stem.ui.diseasemodels.example/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.diseasemodels.example/.project b/org.eclipse.stem.ui.diseasemodels.example/.project
new file mode 100644
index 0000000..9a103b2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.diseasemodels.example</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.diseasemodels.example/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.diseasemodels.example/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3ce809a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.diseasemodels.example;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.ui.diseasemodels.example.presentation.ExampleEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.ui.diseasemodels.example.presentation
+Require-Bundle: org.eclipse.stem.diseasemodels.example;visibility:=reexport,
+ org.eclipse.emf.ecore.edit;visibility:=reexport,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.ui.diseasemodels
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.ui.diseasemodels.example/build.properties b/org.eclipse.stem.ui.diseasemodels.example/build.properties
new file mode 100644
index 0000000..8e41ab5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2008/12/15 21:49:56 jkaufman Exp $
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.ui.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif b/org.eclipse.stem.ui.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif
new file mode 100644
index 0000000..cc04dae
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/icons/full/obj16/ExampleModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.example/plugin.properties b/org.eclipse.stem.ui.diseasemodels.example/plugin.properties
new file mode 100644
index 0000000..b3ca1cb
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/plugin.properties
@@ -0,0 +1,47 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.3 2009/03/11 03:45:26 sedlund Exp $
+
+pluginName = STEM Example Disease Model UI
+providerName = Eclipse.org
+
+_UI_ExampleEditor_menu = &Example Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ExampleEditor_label = Example Model Editor
+
+_UI_ExampleEditorFilenameDefaultBase = My
+_UI_ExampleEditorFilenameExtensions = example
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
diff --git a/org.eclipse.stem.ui.diseasemodels.example/plugin.xml b/org.eclipse.stem.ui.diseasemodels.example/plugin.xml
new file mode 100644
index 0000000..1bb0b32
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/plugin.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.4 2009/03/11 03:45:26 sedlund Exp $
+-->
+
+<plugin>
+
+
+  <extension
+    point = "org.eclipse.ui.newWizards">
+    <category
+      id = "org.eclipse.emf.ecore.Wizard.category.ID"
+      name="%_UI_Wizard_category">
+    </category>
+    <wizard
+      id = "org.eclipse.stem.diseasemodels.example.presentation.ExampleModelWizardID"
+      name = "%_UI_ExampleModelWizard_label"
+      class = "org.eclipse.stem.diseasemodels.example.presentation.ExampleModelWizard"
+      category = "org.eclipse.emf.ecore.Wizard.category.ID"
+      icon = "icons/full/obj16/ExampleModelFile.gif">
+      <description>%_UI_ExampleModelWizard_description</description>
+      <selection class = "org.eclipse.core.resources.IResource" />
+    </wizard>
+  </extension>
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.diseasemodels.example.presentation.ExampleEditorID"
+        name = "%_UI_ExampleEditor_label"
+        icon = "icons/full/obj16/ExampleModelFile.gif"
+        extensions = "example"
+        class = "org.eclipse.stem.diseasemodels.example.presentation.ExampleEditor" 
+        contributorClass="org.eclipse.stem.diseasemodels.example.presentation.ExampleActionBarContributor" >
+    </editor>
+  </extension>
+  <extension
+        point="org.eclipse.ui.startup">
+     <startup
+           class="org.eclipse.stem.ui.diseasemodels.example.presentation.ExamplePropertyStringProviderAdapterFactory">
+     </startup>
+  </extension>
+</plugin>
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleActionBarContributor.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleActionBarContributor.java
new file mode 100644
index 0000000..35f9417
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.diseasemodels.example.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.ui.diseasemodels.example.presentation.ExampleEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Example model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(ExampleEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					ExampleEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(ExampleEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("example-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("example-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(ExampleEditorPlugin.INSTANCE.getString("_UI_ExampleEditor_menu"), "org.eclipse.stem.diseasemodels.exampleMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(ExampleEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(ExampleEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * @param event 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(ExampleEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(ExampleEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleEditor.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleEditor.java
new file mode 100644
index 0000000..26907c3
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/diseasemodels/example/presentation/ExampleEditor.java
@@ -0,0 +1,1602 @@
+package org.eclipse.stem.diseasemodels.example.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.diseasemodels.example.provider.ExampleItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;
+
+import org.eclipse.stem.ui.diseasemodels.example.presentation.ExampleEditorPlugin;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Example model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExampleEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ExampleEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ExampleEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ExampleEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						removedResources.addAll(visitor.getRemovedResources());
+						if (!isDirty()) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 getSite().getPage().closeEditor(ExampleEditor.this, false);
+									 }
+								 });
+						}
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						changedResources.addAll(visitor.getChangedResources());
+						if (getSite().getPage().getActiveEditor() == ExampleEditor.this) {
+							getSite().getShell().getDisplay().asyncExec
+								(new Runnable() {
+									 public void run() {
+										 handleActivate();
+									 }
+								 });
+						}
+					}
+				}
+				catch (CoreException exception) {
+					ExampleEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ExampleEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.ui.diseasemodels.example.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					ExampleEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						ExampleEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExampleEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExampleItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * @param collection 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			// I don't know if this should be run this deferred
+			// because we might have to give the editor a chance to process the viewer update events
+			// and hence to update the views first.
+			//
+			//
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			runnable.run();
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * @param adapterFactory 
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * @param viewer 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * @param resource 
+	 * @param exception 
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.ui.diseasemodels.example.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.ui.diseasemodels.example.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ExampleEditor.this.setSelectionToViewer(selection);
+						ExampleEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			ExampleEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param marker 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			ExampleEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * @param listener 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * @param listener 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * @return
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 * <!-- end-user-doc --> 
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return ExampleEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return ExampleEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * @param menuManager 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc --> 
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelAdapter.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelAdapter.java
new file mode 100644
index 0000000..fff97e4
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ *  
+ * Adapter for Property Editor
+ *
+ */
+public class ExampleDiseaseModelAdapter extends
+		DiseaseModelPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new ExampleDiseaseModelPropertyEditor(
+				diseaseModelPropertyComposite, style,
+				(DiseaseModel) getTarget(), projectValidator);
+	} // createDiseaseModelPropertyEditor
+
+} // ExampleDiseaseModelAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditor.java
new file mode 100644
index 0000000..a8f0171
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditor.java
@@ -0,0 +1,221 @@
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.diseasemodels.example.ExampleDiseaseModel;
+import org.eclipse.stem.diseasemodels.example.ExamplePackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ */
+public class ExampleDiseaseModelPropertyEditor extends
+		DiseaseModelPropertyEditor {
+	
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public ExampleDiseaseModelPropertyEditor(Composite parent,
+			int style, DiseaseModel diseaseModel,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(diseaseModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(diseaseModel, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(diseaseModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedDiseaseModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+					final Composite buttons = new Composite(this, SWT.NONE);
+					final RowLayout buttonsLayout = new RowLayout();
+					buttonsLayout.marginTop = 0;
+					buttonsLayout.marginBottom = 0;
+					buttons.setLayout(buttonsLayout);
+					final Shell shell = this.getShell();
+
+					final Button dirChooserButton = new Button(buttons,
+							SWT.NONE);
+					dirChooserButton.setText(DiseaseWizardMessages
+							.getString("dirChooserButtonText")); //$NON-NLS-1$
+					dirChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("dirChooserButtonTooltipText")); //$NON-NLS-1$
+					dirChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final DirectoryDialog dd = new DirectoryDialog(
+											shell, SWT.OPEN);
+									dd
+											.setText(DiseaseWizardMessages
+													.getString("dirChooserDialogTitle")); //$NON-NLS-1$
+									final String selected = dd.open();
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final GridData fileBtnGD = new GridData(GridData.END);
+					// fileChooserButton.setLayoutData(fileBtnGD);
+					buttons.setLayoutData(fileBtnGD);
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(DiseaseWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // ExampleDiseaseModelPropertyEditor
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(DiseaseModel diseaseModel) {
+		super.populate(diseaseModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			double dVal = 0.0;
+		
+			switch (entry.getKey().getFeatureID()) {
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ExampleDiseaseModel) diseaseModel).setSeasonalModulationFloor(dVal);
+				break;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ExampleDiseaseModel) diseaseModel).setSeasonalModulationExponent(dVal);
+				break;	
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ExampleDiseaseModel) diseaseModel)
+						.setModulationPeriod(dVal);
+				break;
+			case ExamplePackage.EXAMPLE_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ExampleDiseaseModel) diseaseModel)
+						.setModulationPhaseShift(dVal);
+				break;
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+		
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#validate()
+	 */
+	@Override
+	public boolean validate() {
+		boolean retValue = super.validate();
+		// Disease Data Directory or File
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(ExamplePackage.Literals.EXAMPLE_DISEASE_MODEL__MODULATION_PERIOD);
+			String sVal = text.getText();
+			try {
+				// TODO check if all three params are a valid number
+				new Double(sVal);
+			} catch(Exception e) {
+				retValue = false;
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr20"); //$NON-NLS-1$
+			} // if
+		} // if
+		
+		return retValue;
+	}
+	
+} // ExampleDiseaseModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..ee24697
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.diseasemodels.example.util.ExampleAdapterFactory;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+
+/**
+ * @author james
+ * 
+ */
+public class ExampleDiseaseModelPropertyEditorAdapterFactory extends
+		ExampleAdapterFactory implements
+		DiseaseModelPropertyEditorAdapterFactory {
+
+	/**
+	 * 
+	 */
+	public ExampleDiseaseModelPropertyEditorAdapterFactory() {
+		super();
+		DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createExampleDiseaseModelAdapter() {
+		return new ExampleDiseaseModelAdapter();
+	}
+
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.example.util.ExampleAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == DiseaseModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} // ExampleDiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseWizardMessages.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseWizardMessages.java
new file mode 100644
index 0000000..6a9f3d8
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleDiseaseWizardMessages.java
@@ -0,0 +1,46 @@
+// ExampleDiseaseWizardMessages.java
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class ExampleDiseaseWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.diseasemodels.example.presentation.examplediseasemessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * 
+	 */
+	public ExampleDiseaseWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 * @throws MissingResourceException if the key cannot be found
+	 */
+	public static String getString(final String key) throws MissingResourceException{
+			return RESOURCE_BUNDLE.getString(key);
+	} // getString
+} // ExampleDiseaseWizardMessages
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleEditorPlugin.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleEditorPlugin.java
new file mode 100644
index 0000000..3bbf7ef
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExampleEditorPlugin.java
@@ -0,0 +1,119 @@
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This is the central singleton for the Example editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("synthetic-access")
+public final class ExampleEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ExampleEditorPlugin INSTANCE = new ExampleEditorPlugin();
+	
+	/**
+	 * 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 ExampleEditorPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				EcoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+		
+		/**
+		 * 
+		 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+		 */
+		@Override
+		public void start(BundleContext context) throws Exception {
+			super.start(context);
+//			new ExamplePropertyStringProviderAdapterFactory();
+			new ExampleDiseaseModelPropertyEditorAdapterFactory();
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExamplePropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExamplePropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..0bbb5b2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/ExamplePropertyStringProviderAdapterFactory.java
@@ -0,0 +1,125 @@
+// ExamplePropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.diseasemodels.example.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.example.util.ExampleAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class represents
+ */
+public class ExamplePropertyStringProviderAdapterFactory extends
+		ExampleAdapterFactory implements
+		PropertyStringProviderAdapterFactory, IStartup {
+
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public ExamplePropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return super.isFactoryForType(type)
+				|| type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.example.util.ExampleAdapterFactory#createExampleDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createExampleDiseaseModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new  StandardPropertyStringProviderAdapterFactory.StandardPropertyStringProviderAdapter() {
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd name of the property to display to the user
+				 */
+				public String getPropertyName(IItemPropertyDescriptor descriptor) {
+					try {
+						return ExampleDiseaseWizardMessages
+								.getString(((EStructuralFeature) descriptor
+										.getFeature(null)).getName());
+					} catch (MissingResourceException e) {
+						return super.getPropertyName(descriptor);
+					}
+				} // getPropertyName
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd tool tip text that describes the property
+				 */
+				public String getPropertyToolTip(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ExampleDiseaseWizardMessages.getString(feature
+								.getName()
+								+ TT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyToolTip(descriptor);
+					}
+				} // getPropertyToolTip
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd text that represents the units of the
+				 *         property
+				 */
+				public String getPropertyUnits(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ExampleDiseaseWizardMessages.getString(feature
+								.getName()
+								+ UNIT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyUnits(descriptor);
+					}
+				} // getPropertyUnits
+			};
+		} // if we didn't create one before
+		return adapter;
+	}// createExampleDiseaseModelAdapter()
+
+} // ExamplePropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/examplediseasemessages.properties b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/examplediseasemessages.properties
new file mode 100644
index 0000000..0558c8f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.example/src/org/eclipse/stem/ui/diseasemodels/example/presentation/examplediseasemessages.properties
@@ -0,0 +1,26 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+seasonalModulation = Seasonal Modulation
+seasonalModulationTT = Seasonal Modulation
+seasonalModulationUNIT = Days
+
+modulationPeriod = Modulation Period
+modulationPeriodTT = Modulation Period
+modulationPeriodUNIT = Days
+
+modulationPhaseShift = Modulation Phase Shift
+modulationPhaseShiftTT = Modulation Phase Shift
+modulationPhaseShiftUNIT = Days
+
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/.classpath b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/.project b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.project
new file mode 100644
index 0000000..359b030
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.diseasemodels.externaldatasource</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..4be1026
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Sep 23 09:36:38 EDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9086471
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.diseasemodels.externaldatasource;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.externaldatasource.presentation
+Require-Bundle: org.eclipse.stem.diseasemodels.externaldatasource;visibility:=reexport,
+ org.eclipse.stem.util.loggers,
+ org.eclipse.stem.ui.diseasemodels,
+ org.eclipse.stem.ui
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/build.properties b/org.eclipse.stem.ui.diseasemodels.externaldatasource/build.properties
new file mode 100644
index 0000000..911dcb8
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2008/03/18 04:51:57 jkaufman Exp $
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif b/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif
new file mode 100644
index 0000000..8a94410
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/obj16/ExternalDataSourceModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif b/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif
new file mode 100644
index 0000000..92c8b75
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/icons/full/wizban/NewExternalDataSource.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.properties b/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.properties
new file mode 100644
index 0000000..9de13df
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.properties
@@ -0,0 +1,68 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.1 2008/03/18 04:51:57 jkaufman Exp $
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM External Data Source Disease Model UI
+providerName = Eclipse.org
+
+_UI_ExternalDataSourceEditor_menu = &ExternalDataSource Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ExternalDataSourceModelWizard_label = ExternalDataSource Model
+_UI_ExternalDataSourceModelWizard_description = Create a new ExternalDataSource model
+
+_UI_ExternalDataSourceEditor_label = ExternalDataSource Model Editor
+
+_UI_ExternalDataSourceEditorFilenameDefaultBase = My
+_UI_ExternalDataSourceEditorFilenameExtension = externaldatasource
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ".{0}"
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.xml b/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.xml
new file mode 100644
index 0000000..33bbbb5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/plugin.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2008/03/18 04:51:57 jkaufman Exp $
+-->
+
+<plugin>
+
+
+  <extension
+    point = "org.eclipse.ui.newWizards">
+    <category
+      id = "org.eclipse.emf.ecore.Wizard.category.ID"
+      name="%_UI_Wizard_category">
+    </category>
+    <wizard
+      id = "org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceModelWizardID"
+      name = "%_UI_ExternalDataSourceModelWizard_label"
+      class = "org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceModelWizard"
+      category = "org.eclipse.emf.ecore.Wizard.category.ID"
+      icon = "icons/full/obj16/ExternalDataSourceModelFile.gif">
+      <description>%_UI_ExternalDataSourceModelWizard_description</description>
+      <selection class = "org.eclipse.core.resources.IResource" />
+    </wizard>
+  </extension>
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceEditorID"
+        name = "%_UI_ExternalDataSourceEditor_label"
+        icon = "icons/full/obj16/ExternalDataSourceModelFile.gif"
+        extensions = "externaldatasource"
+        class = "org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceEditor" 
+        contributorClass="org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourceActionBarContributor" >
+    </editor>
+  </extension>
+  <extension
+        point="org.eclipse.ui.startup">
+     <startup
+           class="org.eclipse.stem.diseasemodels.externaldatasource.presentation.ExternalDataSourcePropertyStringProviderAdapterFactory"></startup>
+  </extension>    
+</plugin>
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceActionBarContributor.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceActionBarContributor.java
new file mode 100644
index 0000000..fd91dad
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceActionBarContributor.java
@@ -0,0 +1,429 @@
+// ExternalDataSourceActionBarContributor.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the ExternalDataSource model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet");
+				}
+				catch (PartInitException exception) {
+					ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("externaldatasource-settings"));
+		toolBarManager.add(new Separator("externaldatasource-additions"));
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditor_menu"), "org.eclipse.stem.diseasemodels.externaldatasourceMenuID");
+		menuManager.insertAfter("additions", submenuManager);
+		submenuManager.add(new Separator("settings"));
+		submenuManager.add(new Separator("actions"));
+		submenuManager.add(new Separator("additions"));
+		submenuManager.add(new Separator("additions-end"));
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		submenuManager.insertBefore("additions", createChildMenuManager);
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param event 
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+
+		submenuManager = new MenuManager(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager);
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelAdapter.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelAdapter.java
new file mode 100644
index 0000000..2ff202c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ * 
+ * Adapter for Property Editor
+ *
+ */
+public class ExternalDataSourceDiseaseModelAdapter extends
+		DiseaseModelPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new ExternalDataSourceDiseaseModelPropertyEditor(
+				diseaseModelPropertyComposite, style,
+				(DiseaseModel) getTarget(), projectValidator);
+	} // createDiseaseModelPropertyEditor
+
+} // ExternalDataSourceDiseaseModelAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditor.java
new file mode 100644
index 0000000..542e7dc
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditor.java
@@ -0,0 +1,211 @@
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceDiseaseModel;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ */
+public class ExternalDataSourceDiseaseModelPropertyEditor extends
+		DiseaseModelPropertyEditor {
+	
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public ExternalDataSourceDiseaseModelPropertyEditor(Composite parent,
+			int style, DiseaseModel diseaseModel,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(diseaseModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(diseaseModel, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(diseaseModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedDiseaseModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+					final Composite buttons = new Composite(this, SWT.NONE);
+					final RowLayout buttonsLayout = new RowLayout();
+					buttonsLayout.marginTop = 0;
+					buttonsLayout.marginBottom = 0;
+					buttons.setLayout(buttonsLayout);
+					final Shell shell = this.getShell();
+
+					final Button dirChooserButton = new Button(buttons,
+							SWT.NONE);
+					dirChooserButton.setText(DiseaseWizardMessages
+							.getString("dirChooserButtonText")); //$NON-NLS-1$
+					dirChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("dirChooserButtonTooltipText")); //$NON-NLS-1$
+					dirChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final DirectoryDialog dd = new DirectoryDialog(
+											shell, SWT.OPEN);
+									dd
+											.setText(DiseaseWizardMessages
+													.getString("dirChooserDialogTitle")); //$NON-NLS-1$
+									final String selected = dd.open();
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final GridData fileBtnGD = new GridData(GridData.END);
+					// fileChooserButton.setLayoutData(fileBtnGD);
+					buttons.setLayoutData(fileBtnGD);
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(DiseaseWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // ExternalDataSourceDiseaseModelPropertyEditor
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(DiseaseModel diseaseModel) {
+		super.populate(diseaseModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			switch (entry.getKey().getFeatureID()) {
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH:
+				((ExternalDataSourceDiseaseModel) diseaseModel)
+						.setDataPath(entry
+								.getValue().getText());
+				break;
+			case ExternalDataSourcePackage.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DISEASE_TYPE:
+				((ExternalDataSourceDiseaseModel) diseaseModel)
+						.setDiseaseType(entry
+								.getValue().getText());
+				break;
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+		
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#validate()
+	 */
+	@Override
+	public boolean validate() {
+		boolean retValue = super.validate();
+		// Disease Data Directory or File
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(ExternalDataSourcePackage.Literals.EXTERNAL_DATA_SOURCE_DISEASE_MODEL__DATA_PATH);
+			File f = new File(text.getText());
+			retValue = f.exists();
+			// exists?
+			if (!retValue) {
+				// Yes
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr20"); //$NON-NLS-1$
+			} // if
+		} // if
+		
+		return retValue;
+	}
+	
+} // ExternalDataSourceDiseaseModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..c1f008d
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.diseasemodels.externaldatasource.util.ExternalDataSourceAdapterFactory;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+
+/**
+ * @author james
+ * 
+ */
+public class ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory extends
+		ExternalDataSourceAdapterFactory implements
+		DiseaseModelPropertyEditorAdapterFactory {
+
+	/**
+	 * 
+	 */
+	public ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory() {
+		super();
+		DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createExternalDataSourceDiseaseModelAdapter() {
+		return new ExternalDataSourceDiseaseModelAdapter();
+	}
+
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.util.ExternalDataSourceAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == DiseaseModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} // ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditor.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditor.java
new file mode 100644
index 0000000..e6f389a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditor.java
@@ -0,0 +1,1819 @@
+// ExternalDataSourceEditor.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.provider.ExternalDataSourceItemProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+
+/**
+ * This is an example of a ExternalDataSource model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer parentViewer;
+
+	/**
+	 * This shows how a tree view works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewer;
+
+	/**
+	 * This shows how a list view works.
+	 * A list viewer doesn't support icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ListViewer listViewer;
+
+	/**
+	 * This shows how a table view works.
+	 * A table can be used as a list with icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableViewer tableViewer;
+
+	/**
+	 * This shows how a tree view with columns works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewerWithColumns;
+
+	/**
+	 * This keeps track of the active viewer pane, in the book.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ViewerPane currentViewerPane;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ExternalDataSourceEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ExternalDataSourceEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ExternalDataSourceEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				// Only listening to these.
+				// if (event.getType() == IResourceDelta.POST_CHANGE)
+				{
+					IResourceDelta delta = event.getDelta();
+					try {
+						class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+							protected ResourceSet resourceSet = editingDomain.getResourceSet();
+							protected Collection<Resource> changedResources = new ArrayList<Resource>();
+							protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+							public boolean visit(IResourceDelta delta) {
+								if (delta.getFlags() != IResourceDelta.MARKERS &&
+								    delta.getResource().getType() == IResource.FILE) {
+									if ((delta.getKind() & (IResourceDelta.CHANGED | IResourceDelta.REMOVED)) != 0) {
+										Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
+										if (resource != null) {
+											if ((delta.getKind() & IResourceDelta.REMOVED) != 0) {
+												removedResources.add(resource);
+											}
+											else if (!savedResources.remove(resource)) {
+												changedResources.add(resource);
+											}
+										}
+									}
+								}
+
+								return true;
+							}
+
+							public Collection<Resource> getChangedResources() {
+								return changedResources;
+							}
+
+							public Collection<Resource> getRemovedResources() {
+								return removedResources;
+							}
+						}
+
+						ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+						delta.accept(visitor);
+
+						if (!visitor.getRemovedResources().isEmpty()) {
+							removedResources.addAll(visitor.getRemovedResources());
+							if (!isDirty()) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 getSite().getPage().closeEditor(ExternalDataSourceEditor.this, false);
+											 ExternalDataSourceEditor.this.dispose();
+										 }
+									 });
+							}
+						}
+
+						if (!visitor.getChangedResources().isEmpty()) {
+							changedResources.addAll(visitor.getChangedResources());
+							if (getSite().getPage().getActiveEditor() == ExternalDataSourceEditor.this) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 handleActivate();
+										 }
+									 });
+							}
+						}
+					}
+					catch (CoreException exception) {
+						ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ExternalDataSourceEditor.this, false);
+				ExternalDataSourceEditor.this.dispose();
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.diseasemodels.externaldatasource.editor",
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"),
+				 getString("_WARN_FileConflict"));
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExternalDataSourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 @SuppressWarnings("synthetic-access")
+				public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param collection 
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			// I don't know if this should be run this deferred
+			// because we might have to give the editor a chance to process the viewer update events
+			// and hence to update the views first.
+			//
+			//
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			runnable.run();
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return editingDomain
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @param adapterFactory 
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param viewerPane 
+	 * @generated
+	 */
+	public void setCurrentViewerPane(ViewerPane viewerPane) {
+		if (currentViewerPane != viewerPane) {
+			if (currentViewerPane != null) {
+				currentViewerPane.showFocus(false);
+			}
+			currentViewerPane = viewerPane;
+		}
+		setCurrentViewer(currentViewerPane.getViewer());
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param viewer 
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return currentViewer
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp");
+		contextMenu.add(new Separator("additions"));
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param resource 
+	 * @param exception 
+	 * @return a diagnostic describing errors and warnings 
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.diseasemodels.externaldatasource.editor",
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()),
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.diseasemodels.externaldatasource.editor",
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()),
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty() &&
+		    !(getEditingDomain().getResourceSet().getResources().get(0)).getContents().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							Tree tree = new Tree(composite, SWT.MULTI);
+							TreeViewer newTreeViewer = new TreeViewer(tree);
+							return newTreeViewer;
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				selectionViewer = (TreeViewer)viewerPane.getViewer();
+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+				selectionViewer.setInput(editingDomain.getResourceSet());
+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+				viewerPane.setTitle(editingDomain.getResourceSet());
+
+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(selectionViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+			}
+
+			// Create a page for the parent tree view.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							Tree tree = new Tree(composite, SWT.MULTI);
+							TreeViewer newTreeViewer = new TreeViewer(tree);
+							return newTreeViewer;
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				parentViewer = (TreeViewer)viewerPane.getViewer();
+				parentViewer.setAutoExpandLevel(30);
+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(parentViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ParentPage_label"));
+			}
+
+			// This is the page for the list viewer
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new ListViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				listViewer = (ListViewer)viewerPane.getViewer();
+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(listViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ListPage_label"));
+			}
+
+			// This is the page for the tree viewer
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TreeViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				treeViewer = (TreeViewer)viewerPane.getViewer();
+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(treeViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreePage_label"));
+			}
+
+			// This is the page for the table viewer.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TableViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				tableViewer = (TableViewer)viewerPane.getViewer();
+
+				Table table = tableViewer.getTable();
+				TableLayout layout = new TableLayout();
+				table.setLayout(layout);
+				table.setHeaderVisible(true);
+				table.setLinesVisible(true);
+
+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(3, 100, true));
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+
+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(2, 100, true));
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+
+				tableViewer.setColumnProperties(new String [] {"a", "b"});
+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(tableViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TablePage_label"));
+			}
+
+			// This is the page for the table tree viewer.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), ExternalDataSourceEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TreeViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
+
+				Tree tree = treeViewerWithColumns.getTree();
+				tree.setLayoutData(new FillLayout());
+				tree.setHeaderVisible(true);
+				tree.setLinesVisible(true);
+
+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+				objectColumn.setText(getString("_UI_ObjectColumn_label"));
+				objectColumn.setResizable(true);
+				objectColumn.setWidth(250);
+
+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+				selfColumn.setText(getString("_UI_SelfColumn_label"));
+				selfColumn.setResizable(true);
+				selfColumn.setWidth(200);
+
+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});
+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(treeViewerWithColumns);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+			}
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 @SuppressWarnings("synthetic-access")
+					public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, "");
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label"));
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a cached version of the content outliner.
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a cached version of the property sheet.
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ExternalDataSourceEditor.this.setSelectionToViewer(selection);
+						ExternalDataSourceEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param selection 
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				// If it's the selection viewer, then we want it to select the same selection as this selection.
+				//
+				if (currentViewerPane.getViewer() == selectionViewer) {
+					ArrayList<Object> selectionList = new ArrayList<Object>();
+					selectionList.add(selectedElement);
+					while (selectedElements.hasNext()) {
+						selectionList.add(selectedElements.next());
+					}
+
+					// Set the selection to the widget.
+					//
+					selectionViewer.setSelection(new StructuredSelection(selectionList));
+				}
+				else {
+					// Set the input to the widget.
+					//
+					if (currentViewerPane.getViewer().getInput() != selectedElement) {
+						currentViewerPane.getViewer().setInput(selectedElement);
+						currentViewerPane.setTitle(selectedElement);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								savedResources.add(resource);
+								resource.save(saveOptions);
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param marker 
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		if (currentViewerPane != null) {
+			currentViewerPane.setFocus();
+		}
+		else {
+			getControl(getActivePage()).setFocus();
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param listener 
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param listener 
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return editorSelection
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param selection 
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param selection 
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage("");
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return ExternalDataSourceEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return ExternalDataSourceEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param menuManager 
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return actionBarContributor
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the actionBars
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the adapter factory
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return true;
+	}
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditorPlugin.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditorPlugin.java
new file mode 100644
index 0000000..40e7586
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceEditorPlugin.java
@@ -0,0 +1,127 @@
+// ExternalDataSourceEditorPlugin.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This is the central singleton for the ExternalDataSource editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ExternalDataSourceEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ExternalDataSourceEditorPlugin INSTANCE = new ExternalDataSourceEditorPlugin();
+	
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExternalDataSourceEditorPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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 NOT
+	 */
+	public static class Implementation extends EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated NOT
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+
+		/**
+		 * 
+		 */
+		@Override
+		public void start(BundleContext context) throws Exception {
+			super.start(context);
+			new ExternalDataSourceDiseaseModelPropertyEditorAdapterFactory();
+		}
+
+		/**
+		 * 
+		 */
+		@Override
+		public void stop(BundleContext context) throws Exception {
+			// TODO Auto-generated method stub
+			super.stop(context);
+		}
+
+		
+		
+	} // Implementation
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceModelWizard.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceModelWizard.java
new file mode 100644
index 0000000..f92a85b
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourceModelWizard.java
@@ -0,0 +1,603 @@
+// ExternalDataSourceModelWizard.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourceFactory;
+import org.eclipse.stem.diseasemodels.externaldatasource.ExternalDataSourcePackage;
+import org.eclipse.stem.diseasemodels.externaldatasource.provider.ExternalDataSourceEditPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExternalDataSourceModelWizard extends Wizard implements INewWizard {
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourcePackage externalDataSourcePackage = ExternalDataSourcePackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceFactory externalDataSourceFactory = externalDataSourcePackage.getExternalDataSourceFactory();
+
+	/**
+	 * This is the file creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceModelWizardNewFileCreationPage newFileCreationPage;
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ExternalDataSourceModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param workbench 
+	 * @param selection 
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ExternalDataSourceEditorPlugin.INSTANCE.getImage("full/wizban/NewExternalDataSource")));
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : externalDataSourcePackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass)eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass)externalDataSourcePackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = externalDataSourceFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Remember the file.
+			//
+			final IFile modelFile = getModelFile();
+
+			// Do the work within an operation.
+			//
+			WorkspaceModifyOperation operation =
+				new WorkspaceModifyOperation() {
+					@Override
+					protected void execute(IProgressMonitor progressMonitor) {
+						try {
+							// Create a resource set
+							//
+							ResourceSet resourceSet = new ResourceSetImpl();
+
+							// Get the URI of the model file.
+							//
+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+							// Create a resource for this file.
+							//
+							Resource resource = resourceSet.createResource(fileURI);
+
+							// Add the initial model object to the contents.
+							//
+							EObject rootObject = createInitialModel();
+							if (rootObject != null) {
+								resource.getContents().add(rootObject);
+							}
+
+							// Save the contents of the resource to the file system.
+							//
+							Map<Object, Object> options = new HashMap<Object, Object>();
+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+							resource.save(options);
+						}
+						catch (Exception exception) {
+							ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+						}
+						finally {
+							progressMonitor.done();
+						}
+					}
+				};
+
+			getContainer().run(false, false, operation);
+
+			// Select the new file resource in the current view.
+			//
+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+			IWorkbenchPage page = workbenchWindow.getActivePage();
+			final IWorkbenchPart activePart = page.getActivePart();
+			if (activePart instanceof ISetSelectionTarget) {
+				final ISelection targetSelection = new StructuredSelection(modelFile);
+				getShell().getDisplay().asyncExec
+					(new Runnable() {
+						 public void run() {
+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
+						 }
+					 });
+			}
+
+			// Open an editor on the new file.
+			//
+			try {
+				page.openEditor
+					(new FileEditorInput(modelFile),
+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+			}
+			catch (PartInitException exception) {
+				MessageDialog.openError(workbenchWindow.getShell(), ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+				return false;
+			}
+
+			return true;
+		}
+		catch (Exception exception) {
+			ExternalDataSourceEditorPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the one page of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ExternalDataSourceModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @param pageId 
+		 * @param selection 
+		 * @generated
+		 */
+		public ExternalDataSourceModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+			super(pageId, selection);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+	@Override
+		protected boolean validatePage() {
+			if (super.validatePage()) {
+				// Make sure the file ends in ".externaldatasource".
+				//
+				String requiredExt = ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditorFilenameExtension");
+				String enteredExt = new Path(getFileName()).getFileExtension();
+				if (enteredExt == null || !enteredExt.equals(requiredExt)) {
+					setErrorMessage(ExternalDataSourceEditorPlugin.INSTANCE.getString("_WARN_FilenameExtension", new Object [] { requiredExt }));
+					return false;
+				}
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @return modelFile
+		 * @generated
+		 */
+		public IFile getModelFile() {
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ExternalDataSourceModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @param pageId 
+		 * @generated
+		 */
+		public ExternalDataSourceModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @param parent 
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE); {
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator =
+			new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					setPageComplete(validatePage());
+				}
+			};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				if (initialObjectField.getItemCount() == 1) {
+					initialObjectField.clearSelection();
+					encodingField.setFocus();
+				}
+				else {
+					encodingField.clearSelection();
+					initialObjectField.setFocus();
+				}
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @return initialObjectName
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @return encodingField.getText()
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return ExternalDataSourceEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+			}
+			catch(MissingResourceException mre) {
+				ExternalDataSourceEditorPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+		@Override
+	public void addPages() {
+		// Create a page, set the title, and the initial model file name.
+		//
+		newFileCreationPage = new ExternalDataSourceModelWizardNewFileCreationPage("Whatever", selection);
+		newFileCreationPage.setTitle(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceModelWizard_label"));
+		newFileCreationPage.setDescription(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceModelWizard_description"));
+		newFileCreationPage.setFileName(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditorFilenameDefaultBase") + "." + ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditorFilenameExtension"));
+		addPage(newFileCreationPage);
+
+		// Try and get the resource selection to determine a current directory for the file dialog.
+		//
+		if (selection != null && !selection.isEmpty()) {
+			// Get the resource...
+			//
+			Object selectedElement = selection.iterator().next();
+			if (selectedElement instanceof IResource) {
+				// Get the resource parent, if its a file.
+				//
+				IResource selectedResource = (IResource)selectedElement;
+				if (selectedResource.getType() == IResource.FILE) {
+					selectedResource = selectedResource.getParent();
+				}
+
+				// This gives us a directory...
+				//
+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+					// Set this for the container.
+					//
+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+					// Make up a unique new name here.
+					//
+					String defaultModelBaseFilename = ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditorFilenameDefaultBase");
+					String defaultModelFilenameExtension = ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceEditorFilenameExtension");
+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {
+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+					}
+					newFileCreationPage.setFileName(modelFilename);
+				}
+			}
+		}
+		initialObjectCreationPage = new ExternalDataSourceModelWizardInitialObjectCreationPage("Whatever2");
+		initialObjectCreationPage.setTitle(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_ExternalDataSourceModelWizard_label"));
+		initialObjectCreationPage.setDescription(ExternalDataSourceEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+		addPage(initialObjectCreationPage);
+	}
+
+	/**
+	 * Get the file from the page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the modelFile
+	 * @generated
+	 */
+	public IFile getModelFile() {
+		return newFileCreationPage.getModelFile();
+	}
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourcePropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourcePropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..867ddb6
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDataSourcePropertyStringProviderAdapterFactory.java
@@ -0,0 +1,125 @@
+// ExternalDataSourcePropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.externaldatasource.util.ExternalDataSourceAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class represents
+ */
+public class ExternalDataSourcePropertyStringProviderAdapterFactory extends
+		ExternalDataSourceAdapterFactory implements
+		PropertyStringProviderAdapterFactory, IStartup {
+
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public ExternalDataSourcePropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return super.isFactoryForType(type)
+				|| type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.externaldatasource.util.ExternalDataSourceAdapterFactory#createExternalDataSourceDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createExternalDataSourceDiseaseModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new  StandardPropertyStringProviderAdapterFactory.StandardPropertyStringProviderAdapter() {
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd name of the property to display to the user
+				 */
+				public String getPropertyName(IItemPropertyDescriptor descriptor) {
+					try {
+						return ExternalDiseaseWizardMessages
+								.getString(((EStructuralFeature) descriptor
+										.getFeature(null)).getName());
+					} catch (MissingResourceException e) {
+						return super.getPropertyName(descriptor);
+					}
+				} // getPropertyName
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd tool tip text that describes the property
+				 */
+				public String getPropertyToolTip(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ExternalDiseaseWizardMessages.getString(feature
+								.getName()
+								+ TT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyToolTip(descriptor);
+					}
+				} // getPropertyToolTip
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd text that represents the units of the
+				 *         property
+				 */
+				public String getPropertyUnits(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ExternalDiseaseWizardMessages.getString(feature
+								.getName()
+								+ UNIT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyUnits(descriptor);
+					}
+				} // getPropertyUnits
+			};
+		} // if we didn't create one before
+		return adapter;
+	}// createExternalDataSourceDiseaseModelAdapter()
+
+} // ExternalDataSourcePropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDiseaseWizardMessages.java b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDiseaseWizardMessages.java
new file mode 100644
index 0000000..1bda60d
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/ExternalDiseaseWizardMessages.java
@@ -0,0 +1,43 @@
+// ExternalDiseaseWizardMessages.java
+package org.eclipse.stem.diseasemodels.externaldatasource.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class ExternalDiseaseWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".diseasemodels.externaldatasource.presentation.externaldiseasemessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private ExternalDiseaseWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 * @throws MissingResourceException if the key cannot be found
+	 */
+	public static String getString(final String key) throws MissingResourceException{
+			return RESOURCE_BUNDLE.getString(key);
+	} // getString
+} // ExternalDiseaseWizardMessages
diff --git a/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/externaldiseasemessages.properties b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/externaldiseasemessages.properties
new file mode 100644
index 0000000..c4c1dc9
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.externaldatasource/src/org/eclipse/stem/diseasemodels/externaldatasource/presentation/externaldiseasemessages.properties
@@ -0,0 +1,34 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+
+dataFile = Data File
+dataFileTT = The file containing historic disease data to read in.
+dataFileUNIT = Not Used
+
+dataDirectory = Data Directory
+dataDirectoryTT = The folder containing the external data files for a scenario to be imported.
+dataDirectoryUNIT = Scenario Folder
+
+dataPath = Data Path
+dataPathTT = The file or folder of files, containing historic scenario disease data to be imported.
+dataPathUNIT = Not Used
+
+diseaseType = Disease Type
+diseaseTypeTT = Type of Disease being imported. Must be SI, SIR, SEIR.
+diseaseTypeUNIT = SI SIR or SEIR
+
+diseaseDirectory = Disease Directory
+diseaseDirectoryTT = Disease Directory
+diseaseDirectoryUNIT = Disease Directory 
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/.classpath b/org.eclipse.stem.ui.diseasemodels.forcing/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/.project b/org.eclipse.stem.ui.diseasemodels.forcing/.project
new file mode 100644
index 0000000..abf2f38
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.diseasemodels.forcing</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..34e7d2e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:53:30 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.diseasemodels.forcing/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..42c9df5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.diseasemodels.forcing.editor;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.ui.diseasemodels.forcing.presentation.ForcingEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.stem.diseasemodels.forcing.presentation,
+ org.eclipse.stem.ui.diseasemodels.forcing.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ org.eclipse.stem.diseasemodels.forcing;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.ui.ide;visibility:=reexport,
+ org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.core;visibility:=reexport,
+ org.eclipse.emf.ecore.edit;visibility:=reexport,
+ org.eclipse.stem.definitions;visibility:=reexport,
+ org.eclipse.stem.ui.diseasemodels,
+ org.eclipse.stem.ui
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/build.properties b/org.eclipse.stem.ui.diseasemodels.forcing/build.properties
new file mode 100644
index 0000000..c051ccb
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/build.properties
@@ -0,0 +1,14 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: build.properties,v 1.1 2009/03/13 00:07:48 sedlund Exp $
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/icons/full/obj16/ForcingModelFile.gif b/org.eclipse.stem.ui.diseasemodels.forcing/icons/full/obj16/ForcingModelFile.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/icons/full/obj16/ForcingModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/plugin.properties b/org.eclipse.stem.ui.diseasemodels.forcing/plugin.properties
new file mode 100644
index 0000000..5213cf9
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/plugin.properties
@@ -0,0 +1,51 @@
+
+# <copyright>
+# </copyright>
+#
+# $Id: plugin.properties,v 1.1 2009/03/13 00:07:48 sedlund Exp $
+
+pluginName = STEM Forcing Disease Model UI
+providerName = Eclipse.org
+
+_UI_ExampleEditor_menu = &Example Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ExampleEditor_label = Example Model Editor
+
+_UI_ExampleEditorFilenameDefaultBase = My
+_UI_ExampleEditorFilenameExtensions = example
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?
+
+_UI_ForcingEditor_menu = &Forcing Editor
+_UI_ForcingEditor_label = Forcing Model Editor
+_UI_ForcingEditorFilenameDefaultBase = My
+_UI_ForcingEditorFilenameExtensions = forcing
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/plugin.xml b/org.eclipse.stem.ui.diseasemodels.forcing/plugin.xml
new file mode 100644
index 0000000..f646243
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/plugin.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.1 2009/03/13 00:07:48 sedlund Exp $
+-->
+
+<plugin>
+
+
+  <extension
+    point = "org.eclipse.ui.newWizards">
+    <category
+      id = "org.eclipse.emf.ecore.Wizard.category.ID"
+      name="%_UI_Wizard_category">
+    </category>
+    <wizard
+      id = "org.eclipse.stem.diseasemodels.forcing.presentation.ForcingModelWizardID"
+      name = "%_UI_ForcingModelWizard_label"
+      class = "org.eclipse.stem.diseasemodels.forcing.presentation.ForcingModelWizard"
+      category = "org.eclipse.emf.ecore.Wizard.category.ID"
+      icon = "icons/full/obj16/ForcingModelFile.gif">
+      <description>%_UI_ExampleModelWizard_description</description>
+      <selection class = "org.eclipse.core.resources.IResource" />
+    </wizard>
+  </extension>
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.diseasemodels.forcing.presentation.ForcingEditorID"
+        name = "%_UI_ForcingEditor_label"
+        icon = "icons/full/obj16/ForcingModelFile.gif"
+        extensions = "forcing"
+        class = "org.eclipse.stem.diseasemodels.forcing.presentation.ForcingEditor" 
+        contributorClass="org.eclipse.stem.diseasemodels.forcing.presentation.ForcingActionBarContributor" >
+    </editor>
+  </extension>
+  <extension
+        point="org.eclipse.ui.startup">
+     <startup
+           class="org.eclipse.stem.ui.diseasemodels.forcing.presentation.ForcingPropertyStringProviderAdapterFactory">
+     </startup>
+  </extension>
+</plugin>
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingActionBarContributor.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingActionBarContributor.java
new file mode 100644
index 0000000..f08cc5e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingActionBarContributor.java
@@ -0,0 +1,436 @@
+package org.eclipse.stem.diseasemodels.forcing.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.ui.diseasemodels.forcing.presentation.ForcingEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Forcing model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ForcingActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(ForcingEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					ForcingEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(ForcingEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("forcing-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("forcing-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(ForcingEditorPlugin.INSTANCE.getString("_UI_ForcingEditor_menu"), "org.eclipse.stem.diseasemodels.forcingMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(ForcingEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(ForcingEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(ForcingEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(ForcingEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingEditor.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingEditor.java
new file mode 100644
index 0000000..2a042a3
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/diseasemodels/forcing/presentation/ForcingEditor.java
@@ -0,0 +1,1577 @@
+package org.eclipse.stem.diseasemodels.forcing.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.diseasemodels.forcing.provider.ForcingItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;
+
+import org.eclipse.stem.ui.diseasemodels.forcing.presentation.ForcingEditorPlugin;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Forcing model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all") 
+public class ForcingEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ForcingEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ForcingEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ForcingEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(ForcingEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == ForcingEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					ForcingEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ForcingEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.ui.diseasemodels.forcing.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					ForcingEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						ForcingEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ForcingEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ForcingItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.ui.diseasemodels.forcing.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.ui.diseasemodels.forcing.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ForcingEditor.this.setSelectionToViewer(selection);
+						ForcingEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			ForcingEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			ForcingEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return ForcingEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return ForcingEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelAdapter.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelAdapter.java
new file mode 100644
index 0000000..37e8d4e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ *  
+ * Adapter for Property Editor
+ *
+ */
+public class ForcingDiseaseModelAdapter extends
+		DiseaseModelPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new ForcingDiseaseModelPropertyEditor(
+				diseaseModelPropertyComposite, style,
+				(DiseaseModel) getTarget(), projectValidator);
+	} // createDiseaseModelPropertyEditor
+
+} // ForcingDiseaseModelAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditor.java
new file mode 100644
index 0000000..2c62e9b
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditor.java
@@ -0,0 +1,221 @@
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.diseasemodels.forcing.ForcingDiseaseModel;
+import org.eclipse.stem.diseasemodels.forcing.ForcingPackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ */
+public class ForcingDiseaseModelPropertyEditor extends
+		DiseaseModelPropertyEditor {
+	
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public ForcingDiseaseModelPropertyEditor(Composite parent,
+			int style, DiseaseModel diseaseModel,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(diseaseModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(diseaseModel, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(diseaseModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedDiseaseModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+					final Composite buttons = new Composite(this, SWT.NONE);
+					final RowLayout buttonsLayout = new RowLayout();
+					buttonsLayout.marginTop = 0;
+					buttonsLayout.marginBottom = 0;
+					buttons.setLayout(buttonsLayout);
+					final Shell shell = this.getShell();
+
+					final Button dirChooserButton = new Button(buttons,
+							SWT.NONE);
+					dirChooserButton.setText(DiseaseWizardMessages
+							.getString("dirChooserButtonText")); //$NON-NLS-1$
+					dirChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("dirChooserButtonTooltipText")); //$NON-NLS-1$
+					dirChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final DirectoryDialog dd = new DirectoryDialog(
+											shell, SWT.OPEN);
+									dd
+											.setText(DiseaseWizardMessages
+													.getString("dirChooserDialogTitle")); //$NON-NLS-1$
+									final String selected = dd.open();
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final GridData fileBtnGD = new GridData(GridData.END);
+					// fileChooserButton.setLayoutData(fileBtnGD);
+					buttons.setLayoutData(fileBtnGD);
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(DiseaseWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // ForcingDiseaseModelPropertyEditor
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(DiseaseModel diseaseModel) {
+		super.populate(diseaseModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			double dVal = 0.0;
+			int iVal = 0;
+			switch (entry.getKey().getFeatureID()) {
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_FLOOR:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ForcingDiseaseModel) diseaseModel).setSeasonalModulationFloor(dVal);
+				break;
+			case ForcingPackage.FORCING_DISEASE_MODEL__SEASONAL_MODULATION_EXPONENT:
+				iVal = (new Integer(entry.getValue().getText())).intValue();
+				((ForcingDiseaseModel) diseaseModel).setSeasonalModulationExponent(iVal);
+				break;	
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PERIOD:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ForcingDiseaseModel) diseaseModel)
+						.setModulationPeriod(dVal);
+				break;
+			case ForcingPackage.FORCING_DISEASE_MODEL__MODULATION_PHASE_SHIFT:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((ForcingDiseaseModel) diseaseModel)
+						.setModulationPhaseShift(dVal);
+				break;
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+		
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#validate()
+	 */
+	@Override
+	public boolean validate() {
+		boolean retValue = super.validate();
+		// Disease Data Directory or File
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(ForcingPackage.Literals.FORCING_DISEASE_MODEL__MODULATION_PERIOD);
+			String sVal = text.getText();
+			try {
+				// TODO check if all three params are a valid number
+				new Double(sVal);
+			} catch(Exception e) {
+				retValue = false;
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr20"); //$NON-NLS-1$
+			} // if
+		} // if
+		
+		return retValue;
+	}
+	
+} // ForcingDiseaseModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..87d39a1
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.diseasemodels.forcing.util.ForcingAdapterFactory;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+
+/**
+ * @author james
+ * 
+ */
+public class ForcingDiseaseModelPropertyEditorAdapterFactory extends
+		ForcingAdapterFactory implements
+		DiseaseModelPropertyEditorAdapterFactory {
+
+	/**
+	 * 
+	 */
+	public ForcingDiseaseModelPropertyEditorAdapterFactory() {
+		super();
+		DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createForcingDiseaseModelAdapter() {
+		return new ForcingDiseaseModelAdapter();
+	}
+
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.forcing.util.ForcingAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == DiseaseModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} // ForcingDiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseWizardMessages.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseWizardMessages.java
new file mode 100644
index 0000000..a69e87a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingDiseaseWizardMessages.java
@@ -0,0 +1,46 @@
+// ExampleDiseaseWizardMessages.java
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class ForcingDiseaseWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.diseasemodels.forcing.presentation.forcingdiseasemessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * 
+	 */
+	public ForcingDiseaseWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 * @throws MissingResourceException if the key cannot be found
+	 */
+	public static String getString(final String key) throws MissingResourceException{
+			return RESOURCE_BUNDLE.getString(key);
+	} // getString
+} // ForcingDiseaseWizardMessages
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingEditorPlugin.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingEditorPlugin.java
new file mode 100644
index 0000000..ed5aef3
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingEditorPlugin.java
@@ -0,0 +1,113 @@
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+/**
+ * This is the central singleton for the Forcing editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("synthetic-access")
+public final class ForcingEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ForcingEditorPlugin INSTANCE = new ForcingEditorPlugin();
+	
+	/**
+	 * 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 ForcingEditorPlugin() {
+		super
+			(new ResourceLocator [] {
+				DiseasemodelsEditPlugin.INSTANCE,
+				CoreEditPlugin.INSTANCE,
+				EcoreEditPlugin.INSTANCE,
+				DefinitionsEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..35979c2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/ForcingPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,136 @@
+// ExamplePropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.diseasemodels.forcing.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.forcing.util.ForcingAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class represents
+ */
+public class ForcingPropertyStringProviderAdapterFactory extends
+		ForcingAdapterFactory implements
+		PropertyStringProviderAdapterFactory, IStartup {
+
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public ForcingPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return super.isFactoryForType(type)
+				|| type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.forcing.util.ForcngAdapterFactory#createExampleDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createForcingDiseaseModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new  StandardPropertyStringProviderAdapterFactory.StandardPropertyStringProviderAdapter() {
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd name of the property to display to the user
+				 */
+				public String getPropertyName(IItemPropertyDescriptor descriptor) {
+					try {
+						return ForcingDiseaseWizardMessages
+								.getString(((EStructuralFeature) descriptor
+										.getFeature(null)).getName());
+					} catch (MissingResourceException e) {
+						return super.getPropertyName(descriptor);
+					}
+				} // getPropertyName
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd tool tip text that describes the property
+				 */
+				public String getPropertyToolTip(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ForcingDiseaseWizardMessages.getString(feature
+								.getName()
+								+ TT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyToolTip(descriptor);
+					}
+				} // getPropertyToolTip
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd text that represents the units of the
+				 *         property
+				 */
+				public String getPropertyUnits(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return ForcingDiseaseWizardMessages.getString(feature
+								.getName()
+								+ UNIT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyUnits(descriptor);
+					}
+				} // getPropertyUnits
+			};
+		} // if we didn't create one before
+		return adapter;
+	}// createForcingDiseaseModelAdapter()
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.forcing.util.ForcngAdapterFactory#createExampleDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createGaussianForcingDiseaseModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			adapter = (StandardPropertyStringProviderAdapterFactory.StandardPropertyStringProviderAdapter)createForcingDiseaseModelAdapter();
+		} // if we didn't create one before
+		return adapter;
+	}// createForcingDiseaseModelAdapter()
+} // ForcingPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/forcingdiseasemessages.properties b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/forcingdiseasemessages.properties
new file mode 100644
index 0000000..d68142a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.forcing/src/org/eclipse/stem/ui/diseasemodels/forcing/presentation/forcingdiseasemessages.properties
@@ -0,0 +1,41 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+seasonalModulation = Seasonal Modulation
+seasonalModulationTT = Seasonal Modulation
+seasonalModulationUNIT = Days
+
+modulationPeriod = Modulation Period
+modulationPeriodTT = Modulation Period
+modulationPeriodUNIT = Days
+
+modulationPhaseShift = Modulation Phase Shift
+modulationPhaseShiftTT = Modulation Phase Shift
+modulationPhaseShiftUNIT = Days
+
+seasonalModulationExponent = Seasonal Modulation Exponent
+seasonalModulationExponentTT = Exponent used for seasonal modulation forcing
+seasonalModulationExponentUNIT = 
+
+seasonalModulationFloor = Seasonal Modulation Floor
+seasonalModulationFloorTT = Floor or minimum transmission level without seasonal modulation
+seasonalModulationFloorUNIT = 
+
+sigma2 = Sigma^2
+sigma2TT = Sigma squared
+sigma2UNIT = 
+
+modulationFloor = Seasonal Modulation Floor
+modulationFloorTT = Floor or minimum transmission level without seasonal modulation
+modulationFloorUNIT = 
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.classpath b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.project b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.project
new file mode 100644
index 0000000..bd573a4
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a3b2bfb
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 15 12:07:11 PDT 2009

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..02e9d74
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.editor;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Activator: org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorPlugin$Implementation

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation,

+ org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.core.resources;visibility:=reexport,

+ org.eclipse.stem.diseasemodels.globalinfluenzamodel;visibility:=reexport,

+ org.eclipse.emf.ecore.xmi;visibility:=reexport,

+ org.eclipse.emf.edit.ui;visibility:=reexport,

+ org.eclipse.ui.ide;visibility:=reexport,

+ org.eclipse.stem.diseasemodels;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;visibility:=reexport,

+ org.eclipse.stem.definitions;visibility:=reexport,

+ org.eclipse.stem.ui.diseasemodels,

+ org.eclipse.stem.ui

+Bundle-ActivationPolicy: lazy

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/build.properties b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/build.properties
new file mode 100644
index 0000000..400b20a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/build.properties
@@ -0,0 +1,14 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               icons/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/GlobalinfluenzamodelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db
new file mode 100644
index 0000000..577d614
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/obj16/Thumbs.db
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif
new file mode 100644
index 0000000..35743ce
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/icons/full/wizban/NewGlobalinfluenzamodel.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.properties b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.properties
new file mode 100644
index 0000000..5e31836
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.properties
@@ -0,0 +1,57 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+pluginName = STEM Global Influenza Disease Model UI

+providerName = Eclipse.org

+

+_UI_GlobalinfluenzamodelEditor_menu = &Globalinfluenzamodel Editor

+

+_UI_CreateChild_menu_item = &New Child

+_UI_CreateSibling_menu_item = N&ew Sibling

+

+_UI_ShowPropertiesView_menu_item = Show &Properties View

+_UI_RefreshViewer_menu_item = &Refresh

+

+_UI_SelectionPage_label = Selection

+_UI_ParentPage_label = Parent

+_UI_ListPage_label = List

+_UI_TreePage_label = Tree

+_UI_TablePage_label = Table

+_UI_TreeWithColumnsPage_label = Tree with Columns

+_UI_ObjectColumn_label = Object

+_UI_SelfColumn_label = Self

+

+_UI_NoObjectSelected = Selected Nothing

+_UI_SingleObjectSelected = Selected Object: {0}

+_UI_MultiObjectSelected = Selected {0} Objects

+

+_UI_OpenEditorError_label = Open Editor

+

+_UI_Wizard_category = Example EMF Model Creation Wizards

+

+_UI_CreateModelError_message = Problems encountered in file "{0}"

+

+_UI_GlobalinfluenzamodelModelWizard_label = Globalinfluenzamodel Model

+_UI_GlobalinfluenzamodelModelWizard_description = Create a new Globalinfluenzamodel model

+

+_UI_GlobalinfluenzamodelEditor_label = Globalinfluenzamodel Model Editor

+

+_UI_GlobalinfluenzamodelEditorFilenameDefaultBase = My

+_UI_GlobalinfluenzamodelEditorFilenameExtensions = globalinfluenzamodel

+

+_UI_Wizard_label = New

+

+_WARN_FilenameExtension = The file name must end in ''.{0}''

+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}

+

+_UI_ModelObject = &Model Object

+_UI_XMLEncoding = &XML Encoding

+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1

+_UI_Wizard_initial_object_description = Select a model object to create

+

+_UI_FileConflict_label = File Conflict

+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?

+

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.xml b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.xml
new file mode 100644
index 0000000..abba5c2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+

+   <extension point="org.eclipse.ui.newWizards">

+      <category

+            id="org.eclipse.emf.ecore.Wizard.category.ID"

+            name="%_UI_Wizard_category"/>

+      <wizard

+            id="org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelModelWizardID"

+            name="%_UI_GlobalinfluenzamodelModelWizard_label"

+            class="org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelModelWizard"

+            category="org.eclipse.emf.ecore.Wizard.category.ID"

+            icon="icons/full/obj16/GlobalinfluenzamodelModelFile.gif">

+         <description>%_UI_GlobalinfluenzamodelModelWizard_description</description>

+         <selection class="org.eclipse.core.resources.IResource"/>

+      </wizard>

+   </extension>

+

+   <extension point="org.eclipse.ui.editors">

+      <editor

+            id="org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorID"

+            name="%_UI_GlobalinfluenzamodelEditor_label"

+            icon="icons/full/obj16/GlobalinfluenzamodelModelFile.gif"

+            extensions="globalinfluenzamodel"

+            class="org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditor"

+            contributorClass="org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelActionBarContributor">

+      </editor>

+   </extension>

+   <extension

+        point="org.eclipse.ui.startup">

+     <startup

+           class="org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelPropertyStringProviderAdapterFactory">

+     </startup>

+  </extension>

+

+</plugin>

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelActionBarContributor.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelActionBarContributor.java
new file mode 100644
index 0000000..e44b76b
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelActionBarContributor.java
@@ -0,0 +1,434 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorPlugin;

+

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+/**

+ * This is the action bar contributor for the Globalinfluenzamodel model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet");

+				}

+				catch (PartInitException exception) {

+					GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("globalinfluenzamodel-settings"));

+		toolBarManager.add(new Separator("globalinfluenzamodel-additions"));

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelEditor_menu"), "org.eclipse.stem.diseasemodels.globalinfluenzamodelMenuID");

+		menuManager.insertAfter("additions", submenuManager);

+		submenuManager.add(new Separator("settings"));

+		submenuManager.add(new Separator("actions"));

+		submenuManager.add(new Separator("additions"));

+		submenuManager.add(new Separator("additions-end"));

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		submenuManager.insertBefore("additions", createChildMenuManager);

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		submenuManager.insertBefore("additions", createSiblingMenuManager);

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+

+		submenuManager = new MenuManager(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction);

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditor.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditor.java
new file mode 100644
index 0000000..70f03ce
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditor.java
@@ -0,0 +1,1843 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+

+import org.eclipse.jface.viewers.ColumnWeightData;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.ListViewer;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TableLayout;

+import org.eclipse.jface.viewers.TableViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.custom.CTabFolder;

+

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+

+import org.eclipse.swt.graphics.Point;

+

+import org.eclipse.swt.layout.FillLayout;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Table;

+import org.eclipse.swt.widgets.TableColumn;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.swt.widgets.TreeColumn;

+

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+

+import org.eclipse.ui.dialogs.SaveAsDialog;

+

+import org.eclipse.ui.ide.IGotoMarker;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.ViewerPane;

+

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider.GlobalinfluenzamodelItemProviderAdapterFactory;

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;

+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;

+import org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorPlugin;

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+

+/**

+ * This is an example of a Globalinfluenzamodel model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer parentViewer;

+

+	/**

+	 * This shows how a tree view works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewer;

+

+	/**

+	 * This shows how a list view works.

+	 * A list viewer doesn't support icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ListViewer listViewer;

+

+	/**

+	 * This shows how a table view works.

+	 * A table can be used as a list with icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TableViewer tableViewer;

+

+	/**

+	 * This shows how a tree view with columns works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewerWithColumns;

+

+	/**

+	 * This keeps track of the active viewer pane, in the book.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ViewerPane currentViewerPane;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(GlobalinfluenzamodelEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(GlobalinfluenzamodelEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == GlobalinfluenzamodelEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						removedResources.addAll(visitor.getRemovedResources());

+						if (!isDirty()) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 getSite().getPage().closeEditor(GlobalinfluenzamodelEditor.this, false);

+									 }

+								 });

+						}

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						changedResources.addAll(visitor.getChangedResources());

+						if (getSite().getPage().getActiveEditor() == GlobalinfluenzamodelEditor.this) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 handleActivate();

+									 }

+								 });

+						}

+					}

+				}

+				catch (CoreException exception) {

+					GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(GlobalinfluenzamodelEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.editor",

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"),

+				 getString("_WARN_FileConflict"));

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public GlobalinfluenzamodelEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GlobalinfluenzamodelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			// I don't know if this should be run this deferred

+			// because we might have to give the editor a chance to process the viewer update events

+			// and hence to update the views first.

+			//

+			//

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			runnable.run();

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewerPane(ViewerPane viewerPane) {

+		if (currentViewerPane != viewerPane) {

+			if (currentViewerPane != null) {

+				currentViewerPane.showFocus(false);

+			}

+			currentViewerPane = viewerPane;

+		}

+		setCurrentViewer(currentViewerPane.getViewer());

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp");

+		contextMenu.add(new Separator("additions"));

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				selectionViewer = (TreeViewer)viewerPane.getViewer();

+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+

+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+				selectionViewer.setInput(editingDomain.getResourceSet());

+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+				viewerPane.setTitle(editingDomain.getResourceSet());

+

+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(selectionViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));

+			}

+

+			// Create a page for the parent tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				parentViewer = (TreeViewer)viewerPane.getViewer();

+				parentViewer.setAutoExpandLevel(30);

+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));

+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(parentViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ParentPage_label"));

+			}

+

+			// This is the page for the list viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new ListViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				listViewer = (ListViewer)viewerPane.getViewer();

+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(listViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ListPage_label"));

+			}

+

+			// This is the page for the tree viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				treeViewer = (TreeViewer)viewerPane.getViewer();

+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(treeViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreePage_label"));

+			}

+

+			// This is the page for the table viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TableViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				tableViewer = (TableViewer)viewerPane.getViewer();

+

+				Table table = tableViewer.getTable();

+				TableLayout layout = new TableLayout();

+				table.setLayout(layout);

+				table.setHeaderVisible(true);

+				table.setLinesVisible(true);

+

+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(3, 100, true));

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+

+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(2, 100, true));

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+

+				tableViewer.setColumnProperties(new String [] {"a", "b"});

+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(tableViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TablePage_label"));

+			}

+

+			// This is the page for the table tree viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), GlobalinfluenzamodelEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();

+

+				Tree tree = treeViewerWithColumns.getTree();

+				tree.setLayoutData(new FillLayout());

+				tree.setHeaderVisible(true);

+				tree.setLinesVisible(true);

+

+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+				objectColumn.setWidth(250);

+

+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+				selfColumn.setWidth(200);

+

+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});

+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(treeViewerWithColumns);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));

+			}

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, "");

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label"));

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						GlobalinfluenzamodelEditor.this.setSelectionToViewer(selection);

+						GlobalinfluenzamodelEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				// If it's the selection viewer, then we want it to select the same selection as this selection.

+				//

+				if (currentViewerPane.getViewer() == selectionViewer) {

+					ArrayList<Object> selectionList = new ArrayList<Object>();

+					selectionList.add(selectedElement);

+					while (selectedElements.hasNext()) {

+						selectionList.add(selectedElements.next());

+					}

+

+					// Set the selection to the widget.

+					//

+					selectionViewer.setSelection(new StructuredSelection(selectionList));

+				}

+				else {

+					// Set the input to the widget.

+					//

+					if (currentViewerPane.getViewer().getInput() != selectedElement) {

+						currentViewerPane.getViewer().setInput(selectedElement);

+						currentViewerPane.setTitle(selectedElement);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		if (currentViewerPane != null) {

+			currentViewerPane.setFocus();

+		}

+		else {

+			getControl(getActivePage()).setFocus();

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage("");

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return GlobalinfluenzamodelEditorPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return GlobalinfluenzamodelEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return true;

+	}

+}

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelModelWizard.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelModelWizard.java
new file mode 100644
index 0000000..8d5dbaa
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelModelWizard.java
@@ -0,0 +1,639 @@
+package org.eclipse.stem.diseasemodels.globalinfluenzamodel.presentation;

+

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.emf.common.CommonPlugin;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.xmi.XMLResource;

+

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+

+import org.eclipse.jface.viewers.IStructuredSelection;

+

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.ModifyEvent;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelFactory;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage;

+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.provider.GlobalinfluenzamodelEditPlugin;

+

+

+import org.eclipse.core.runtime.Path;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+

+import org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation.GlobalinfluenzamodelEditorPlugin;

+

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class GlobalinfluenzamodelModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelEditorFilenameExtensions").split("\\s*,\\s*")));

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalinfluenzamodelPackage globalinfluenzamodelPackage = GlobalinfluenzamodelPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalinfluenzamodelFactory globalinfluenzamodelFactory = globalinfluenzamodelPackage.getGlobalinfluenzamodelFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalinfluenzamodelModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected GlobalinfluenzamodelModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(GlobalinfluenzamodelEditorPlugin.INSTANCE.getImage("full/wizban/NewGlobalinfluenzamodel")));

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : globalinfluenzamodelPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)globalinfluenzamodelPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = globalinfluenzamodelFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			GlobalinfluenzamodelEditorPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class GlobalinfluenzamodelModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public GlobalinfluenzamodelModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";

+					setErrorMessage(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class GlobalinfluenzamodelModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public GlobalinfluenzamodelModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE);

+			{

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_ModelObject"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return GlobalinfluenzamodelEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");

+			}

+			catch(MissingResourceException mre) {

+				GlobalinfluenzamodelEditorPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new GlobalinfluenzamodelModelWizardNewFileCreationPage("Whatever", selection);

+		newFileCreationPage.setTitle(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelModelWizard_label"));

+		newFileCreationPage.setDescription(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelModelWizard_description"));

+		newFileCreationPage.setFileName(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelEditorFilenameDefaultBase");

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new GlobalinfluenzamodelModelWizardInitialObjectCreationPage("Whatever2");

+		initialObjectCreationPage.setTitle(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_GlobalinfluenzamodelModelWizard_label"));

+		initialObjectCreationPage.setDescription(GlobalinfluenzamodelEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelAdapter.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelAdapter.java
new file mode 100644
index 0000000..a9ce4b5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ *  
+ * Adapter for Property Editor
+ *
+ */
+public class GlobalinfluenzamodelAdapter extends
+		DiseaseModelPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new GlobalinfluenzamodelPropertyEditor(
+				diseaseModelPropertyComposite, style,
+				(DiseaseModel) getTarget(), projectValidator);
+	} // createDiseaseModelPropertyEditor
+
+} // ForcingDiseaseModelAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditorPlugin.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditorPlugin.java
new file mode 100644
index 0000000..926c03a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelEditorPlugin.java
@@ -0,0 +1,112 @@
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;

+

+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;

+

+/**

+ * This is the central singleton for the Globalinfluenzamodel editor plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public final class GlobalinfluenzamodelEditorPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final GlobalinfluenzamodelEditorPlugin INSTANCE = new GlobalinfluenzamodelEditorPlugin();

+	

+	/**

+	 * 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 GlobalinfluenzamodelEditorPlugin() {

+		super

+			(new ResourceLocator [] {

+				DiseasemodelsEditPlugin.INSTANCE,

+				CoreEditPlugin.INSTANCE,

+				EcoreEditPlugin.INSTANCE,

+				DefinitionsEditPlugin.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 EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public Implementation() {

+			super();

+	

+			// Remember the static instance.

+			//

+			plugin = this;

+		}

+	}

+

+}

diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditor.java
new file mode 100644
index 0000000..1469527
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditor.java
@@ -0,0 +1,227 @@
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalInfluenzaModel;
+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.GlobalinfluenzamodelPackage;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ */
+public class GlobalinfluenzamodelPropertyEditor extends
+		DiseaseModelPropertyEditor {
+	
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public GlobalinfluenzamodelPropertyEditor(Composite parent,
+			int style, DiseaseModel diseaseModel,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(diseaseModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(diseaseModel, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(diseaseModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedDiseaseModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+					final Composite buttons = new Composite(this, SWT.NONE);
+					final RowLayout buttonsLayout = new RowLayout();
+					buttonsLayout.marginTop = 0;
+					buttonsLayout.marginBottom = 0;
+					buttons.setLayout(buttonsLayout);
+					final Shell shell = this.getShell();
+
+					final Button dirChooserButton = new Button(buttons,
+							SWT.NONE);
+					dirChooserButton.setText(DiseaseWizardMessages
+							.getString("dirChooserButtonText")); //$NON-NLS-1$
+					dirChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("dirChooserButtonTooltipText")); //$NON-NLS-1$
+					dirChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final DirectoryDialog dd = new DirectoryDialog(
+											shell, SWT.OPEN);
+									dd
+											.setText(DiseaseWizardMessages
+													.getString("dirChooserDialogTitle")); //$NON-NLS-1$
+									final String selected = dd.open();
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final GridData fileBtnGD = new GridData(GridData.END);
+					// fileChooserButton.setLayoutData(fileBtnGD);
+					buttons.setLayoutData(fileBtnGD);
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(DiseaseWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // GlobalinfluenzaModelPropertyEditor
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(DiseaseModel diseaseModel) {
+		super.populate(diseaseModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			double dVal = 0.0;
+			int iVal = 0;
+			switch (entry.getKey().getFeatureID()) {
+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_FLOOR:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((GlobalInfluenzaModel) diseaseModel).setSeasonalModulationFloor(dVal);
+				break;
+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__SEASONAL_MODULATION_EXPONENT:
+				iVal = (new Integer(entry.getValue().getText())).intValue();
+				((GlobalInfluenzaModel) diseaseModel).setSeasonalModulationExponent(iVal);
+				break;	
+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((GlobalInfluenzaModel) diseaseModel)
+						.setModulationPeriod(dVal);
+				break;
+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__MODULATION_PHASE_SHIFT:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((GlobalInfluenzaModel) diseaseModel)
+						.setModulationPhaseShift(dVal);
+				break;
+			case GlobalinfluenzamodelPackage.GLOBAL_INFLUENZA_MODEL__LATITUDE_SIGMOID_WIDTH:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((GlobalInfluenzaModel) diseaseModel)
+						.setLatitudeSigmoidWidth(dVal);
+				break;
+			
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+		
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#validate()
+	 */
+	@Override
+	public boolean validate() {
+		boolean retValue = super.validate();
+		// Disease Data Directory or File
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(GlobalinfluenzamodelPackage.Literals.GLOBAL_INFLUENZA_MODEL__MODULATION_PERIOD);
+			String sVal = text.getText();
+			try {
+				// TODO check if all three params are a valid number
+				new Double(sVal);
+			} catch(Exception e) {
+				retValue = false;
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr20"); //$NON-NLS-1$
+			} // if
+		} // if
+		
+		return retValue;
+	}
+	
+} // GlobalinfluenzaModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..09d8aed
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyEditorAdapterFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.util.GlobalinfluenzamodelAdapterFactory;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+
+/**
+ * @author james
+ * 
+ */
+public class GlobalinfluenzamodelPropertyEditorAdapterFactory extends
+		GlobalinfluenzamodelAdapterFactory implements
+		DiseaseModelPropertyEditorAdapterFactory {
+
+	/**
+	 * 
+	 */
+	public GlobalinfluenzamodelPropertyEditorAdapterFactory() {
+		super();
+		DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createGlobalInfluenzaModelAdapter() {
+		return new GlobalinfluenzamodelAdapter();
+	}
+
+	/**
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.util.ForcingAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == DiseaseModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} // ForcingDiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..a3dfbba
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,125 @@
+// ExamplePropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.globalinfluenzamodel.util.GlobalinfluenzamodelAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class represents
+ */
+public class GlobalinfluenzamodelPropertyStringProviderAdapterFactory extends
+	    GlobalinfluenzamodelAdapterFactory implements
+		PropertyStringProviderAdapterFactory, IStartup {
+
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public GlobalinfluenzamodelPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return super.isFactoryForType(type)
+				|| type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.globalinfluenzamodel.util.ForcngAdapterFactory#createExampleDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createGlobalInfluenzaModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new  StandardPropertyStringProviderAdapterFactory.StandardPropertyStringProviderAdapter() {
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd name of the property to display to the user
+				 */
+				public String getPropertyName(IItemPropertyDescriptor descriptor) {
+					try {
+						return GlobalinfluenzamodelWizardMessages
+								.getString(((EStructuralFeature) descriptor
+										.getFeature(null)).getName());
+					} catch (MissingResourceException e) {
+						return super.getPropertyName(descriptor);
+					}
+				} // getPropertyName
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd tool tip text that describes the property
+				 */
+				public String getPropertyToolTip(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return GlobalinfluenzamodelWizardMessages.getString(feature
+								.getName()
+								+ TT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyToolTip(descriptor);
+					}
+				} // getPropertyToolTip
+
+				/**
+				 * @param descriptor
+				 * @return the NLS'd text that represents the units of the
+				 *         property
+				 */
+				public String getPropertyUnits(
+						IItemPropertyDescriptor descriptor) {
+					try {
+						final EStructuralFeature feature = (EStructuralFeature) descriptor
+								.getFeature(null);
+						return GlobalinfluenzamodelWizardMessages.getString(feature
+								.getName()
+								+ UNIT_SUFFIX);
+					} catch (MissingResourceException e) {
+						return super.getPropertyUnits(descriptor);
+					}
+				} // getPropertyUnits
+			};
+		} // if we didn't create one before
+		return adapter;
+	}// createForcingDiseaseModelAdapter()
+
+} // ForcingPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelWizardMessages.java b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelWizardMessages.java
new file mode 100644
index 0000000..e2fa36f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/GlobalinfluenzamodelWizardMessages.java
@@ -0,0 +1,46 @@
+// ExampleDiseaseWizardMessages.java
+package org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class GlobalinfluenzamodelWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.diseasemodels.globalinfluenzamodel.presentation.globalinfluenzamodelmessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	/**
+	 * 
+	 */
+	public GlobalinfluenzamodelWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 * @throws MissingResourceException if the key cannot be found
+	 */
+	public static String getString(final String key) throws MissingResourceException{
+			return RESOURCE_BUNDLE.getString(key);
+	} // getString
+} // GlobalinfluenzamodelWizardMessages
diff --git a/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/globalinfluenzamodelmessages.properties b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/globalinfluenzamodelmessages.properties
new file mode 100644
index 0000000..62984c2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels.globalinfluenzamodel/src/org/eclipse/stem/ui/diseasemodels/globalinfluenzamodel/presentation/globalinfluenzamodelmessages.properties
@@ -0,0 +1,37 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+seasonalModulation = Seasonal Modulation
+seasonalModulationTT = Seasonal Modulation
+seasonalModulationUNIT = Days
+
+modulationPeriod = Modulation Period
+modulationPeriodTT = Modulation Period
+modulationPeriodUNIT = Days
+
+modulationPhaseShift = Modulation Phase Shift
+modulationPhaseShiftTT = Modulation Phase Shift
+modulationPhaseShiftUNIT = Days
+
+seasonalModulationExponent = SeasonalModulationExponent
+seasonalModulationExponentTT = Exponent used for seasonal modulation forcing
+seasonalModulationExponentUNIT = 
+
+seasonalModulationFloor = SeasonalModulationFloor
+seasonalModulationFloorTT = Floor or minimum transmission level without seasonal modulation
+seasonalModulationFloorUNIT = 
+
+latitudeSigmoidWidth = Lat. Width
+latitudeSigmoidWidthTT = Latitude Sigmoid Function Width
+latitudeSigmoidWidthUNIT = Degrees
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/.classpath b/org.eclipse.stem.ui.diseasemodels/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.diseasemodels/.project b/org.eclipse.stem.ui.diseasemodels/.project
new file mode 100644
index 0000000..1af7aeb
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.diseasemodels</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..06c49ce
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,69 @@
+#Mon Jan 21 12:51:33 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..86caa50
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Wed Oct 24 14:14:55 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.ui.diseasemodels/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.diseasemodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d84d2877
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.diseasemodels;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.stem.diseasemodels.standard.presentation,
+ org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor,
+ org.eclipse.stem.ui.adapters.newmodifierpage,
+ org.eclipse.stem.ui.wizards
+Require-Bundle: org.eclipse.stem.diseasemodels;visibility:=reexport,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.data.geography,
+ org.eclipse.ui.navigator,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.emf.ecore.edit
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.ui.diseasemodels/build.properties b/org.eclipse.stem.ui.diseasemodels/build.properties
new file mode 100644
index 0000000..07051e6
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/build.properties
@@ -0,0 +1,16 @@
+# <copyright>
+# </copyright>
+#
+# $Id$
+
+bin.includes = .,\
+               icons/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               notice.html,\
+               epl-v10.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.stem.ui.diseasemodels/epl-v10.html b/org.eclipse.stem.ui.diseasemodels/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/disease.gif b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/disease.gif
new file mode 100644
index 0000000..4e404e4
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/disease.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/infector.gif b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/infector.gif
new file mode 100644
index 0000000..91bb686
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/infector.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/recordedcsv.gif b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/recordedcsv.gif
new file mode 100644
index 0000000..9b16244
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/icons/full/custom16/recordedcsv.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/icons/full/obj16/StandardModelFile.gif b/org.eclipse.stem.ui.diseasemodels/icons/full/obj16/StandardModelFile.gif
new file mode 100644
index 0000000..0ae2f8c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/icons/full/obj16/StandardModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/icons/full/wizban/NewStandard.gif b/org.eclipse.stem.ui.diseasemodels/icons/full/wizban/NewStandard.gif
new file mode 100644
index 0000000..25f312d
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/icons/full/wizban/NewStandard.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/notice.html b/org.eclipse.stem.ui.diseasemodels/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.ui.diseasemodels/plugin.properties b/org.eclipse.stem.ui.diseasemodels/plugin.properties
new file mode 100644
index 0000000..947ef4f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.ui.diseasemodels/plugin.xml b/org.eclipse.stem.ui.diseasemodels/plugin.xml
new file mode 100644
index 0000000..bb25fda
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/plugin.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id$
+-->
+
+<plugin>
+
+
+  <extension
+    point = "org.eclipse.ui.newWizards">
+    <wizard
+      id = "org.eclipse.stem.diseasemodels.standard.presentation.StandardModelWizardID"
+      name = "%_UI_StandardModelWizard_label"
+      class = "org.eclipse.stem.diseasemodels.standard.presentation.StandardModelWizard"
+      category = "org.eclipse.emf.ecore.Wizard.category.ID"
+      icon = "icons/full/obj16/StandardModelFile.gif">
+      <description>%_UI_StandardModelWizard_description</description>
+      <selection class = "org.eclipse.core.resources.IResource" />
+    </wizard>
+    <wizard
+          category="org.eclipse.stem.ui.wizards.stemcategory"
+          class="org.eclipse.stem.ui.wizards.NewDiseaseWizard"
+          hasPages="true"
+          icon="icons/full/obj16/StandardModelFile.gif"
+          id="org.eclipse.stem.diseasemodels.standard.presentation.StandardModelWizardID"
+          name="%_UI_Disease"/>
+    <wizard
+          category="org.eclipse.stem.ui.wizards.stemcategory"
+          class="org.eclipse.stem.ui.wizards.NewInfectorWizard"
+          hasPages="true"
+          icon="icons/full/obj16/StandardModelFile.gif"
+          id="org.eclipse.stem.diseasemodels.standard.presentation.StandardModelInfectorID"
+          name="%_UI_Infector"/>
+  </extension>
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.diseasemodels.standard.presentation.StandardEditorID"
+        name = "%_UI_StandardEditor_label"
+        icon = "icons/full/obj16/StandardModelFile.gif"
+        extensions = "standard"
+        class = "org.eclipse.stem.diseasemodels.standard.presentation.StandardEditor" 
+        contributorClass="org.eclipse.stem.diseasemodels.standard.presentation.StandardActionBarContributor" >
+    </editor>
+  </extension>
+  <extension
+        point="org.eclipse.ui.views">
+     <view
+           category="org.eclipse.stem.ui.views"
+           class="org.eclipse.stem.ui.views.disease.DiseaseView"
+           icon="icons/full/custom16/disease.gif"
+           id="org.eclipse.stem.ui.views.diseases"
+           name="%_UI_DView_Name"/>
+  </extension>
+  <extension
+        point="org.eclipse.ui.perspectiveExtensions">
+     <perspectiveExtension targetID="org.eclipse.stem.ui.STEMDesignerPerspective">
+        <view
+              closeable="true"
+              id="org.eclipse.stem.ui.views.diseases"
+              moveable="true"
+              relationship="stack"
+              relative="org.eclipse.stem.ui.views.decorators"
+              showTitle="true"
+              standalone="true"
+              visible="true"/>
+        <viewShortcut id="org.eclipse.stem.ui.views.diseases"/>
+     </perspectiveExtension>
+  </extension>
+  <extension
+        point="org.eclipse.ui.startup">
+     <startup
+           class="org.eclipse.stem.ui.adapters.newmodifierpage.DiseaseNewModifierPageAdapterFactory"></startup>
+  </extension>
+  <extension
+        point="org.eclipse.ui.menus">
+     <menuContribution
+           locationURI="menu:org.eclipse.stem.ui.menu.newwizards?after=additions">
+        <command
+              commandId="org.eclipse.stem.ui.diseasemodels.command.wiz.disease"
+              icon="icons/full/custom16/disease.gif"
+              label="%_UI_DiseaseModelWizard_label"
+              style="push"
+              tooltip="%_UI_ModelModelWizard_description">
+        </command>
+        <command
+              commandId="org.eclipse.stem.ui.diseasemodels.command.wiz.infector"
+              icon="icons/full/custom16/infector.gif"
+              label="%_UI_InfectorWizard_label"
+              style="push"
+              tooltip="%_UI_InfectorWizard_description">
+        </command>
+     </menuContribution>
+     <menuContribution
+           locationURI="toolbar:org.eclipse.stem.ui.toolbar.newwizards?after=additions">
+        <command
+              commandId="org.eclipse.stem.ui.diseasemodels.command.wiz.disease"
+              icon="icons/full/custom16/disease.gif"
+              label="%_UI_DiseaseModelWizard_label"
+              style="push"
+              tooltip="%_UI_ModelModelWizard_description">
+        </command>
+        <command
+              commandId="org.eclipse.stem.ui.diseasemodels.command.wiz.infector"
+              icon="icons/full/custom16/infector.gif"
+              label="%_UI_InfectorWizard_label"
+              style="push"
+              tooltip="%_UI_InfectorWizard_description">
+        </command>
+     </menuContribution>
+  </extension>
+  <extension
+        point="org.eclipse.ui.commands">
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewDiseaseWizard$NewDiseaseWizardCommandHandler"
+           description="%_UI_ModelModelWizard_description"
+           id="org.eclipse.stem.ui.diseasemodels.command.wiz.disease"
+           name="%_UI_DiseaseModelWizard_label">
+     </command>
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewInfectorWizard$NewInfectorWizardCommandHandler"
+           description="%_UI_InfectorWizard_description"
+           id="org.eclipse.stem.ui.diseasemodels.command.wiz.infector"
+           name="%_UI_InfectorWizard_label">
+     </command>
+  </extension>
+  <extension
+        point="org.eclipse.stem.ui.colorproviders">
+     <coloprovider
+           factory="org.eclipse.stem.ui.adapters.color.IntensityColorsLabelsMappingColorProviderAdapterFactory"
+           name="Labels Colors Mapping"
+           provider="org.eclipse.stem.ui.adapters.color.IntensityColorsLabelsMappingColorProvider">
+     </coloprovider>
+     <coloprovider
+           factory="org.eclipse.stem.ui.adapters.color.SEIRRelativeValueColorProviderAdapterFactory"
+           name="&quot;Rainbow&quot; Relative Values"
+           provider="org.eclipse.stem.ui.adapters.color.SEIRRelativeValueColorProvider">
+     </coloprovider>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.viewer">
+     <viewerContentBinding
+           viewerId="org.eclipse.stem.ui.views.STEMProjectExplorer2">
+        <includes>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.diseasemodels">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.diseasemodelsinstances">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.recordedcsvinstances">
+           </contentExtension>
+        </includes>
+     </viewerContentBinding>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.navigatorContent">
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.DiseaseModelTreeNodeContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.diseasemodels"
+           labelProvider="org.eclipse.stem.ui.views.explorer.DiseaseModelTreeNodeLabelProvider"
+           name="%_UI_Disease_Models">
+        <triggerPoints>
+           <adapt
+                 type="org.eclipse.core.resources.IProject">
+           </adapt>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.DiseaseModelInstanceTreeNodeContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.diseasemodelsinstances"
+           labelProvider="org.eclipse.stem.ui.views.explorer.DiseaseModelInstanceTreeNodeLabelProvider"
+           name="%_UI_DM_Instances">
+        <triggerPoints>
+           <adapt
+                 type="org.eclipse.stem.ui.views.explorer.DiseaseModelTreeNode">
+           </adapt>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.RecordedCSVInstanceTreeNodeContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.recordedcsvinstances"
+           labelProvider="org.eclipse.stem.ui.views.explorer.RecordedCSVInstanceTreeNodeLabelProvider"
+           name="%_UI_Recorded_CSV ">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.RecordedTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.RecordedCSVInstanceTreeNode">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+  </extension>    
+</plugin>
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorAdvisor.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorAdvisor.java
new file mode 100644
index 0000000..c6ef5e2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorAdvisor.java
@@ -0,0 +1,592 @@
+package org.eclipse.stem.diseasemodels.standard.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+
+import java.util.Arrays;
+import java.util.List;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.UniqueEList;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin;
+import org.eclipse.stem.core.common.presentation.CommonEditor;
+import org.eclipse.stem.core.graph.presentation.GraphEditor;
+import org.eclipse.stem.core.model.presentation.ModelEditor;
+import org.eclipse.stem.core.scenario.presentation.ScenarioEditor;
+import org.eclipse.stem.definitions.labels.presentation.LabelsEditor;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+//import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ContributionItemFactory;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+
+/**
+ * Customized {@link WorkbenchAdvisor} for the RCP application.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DiseasemodelsEditorAdvisor extends WorkbenchAdvisor {
+	/**
+	 * The default file extension filters for use in dialogs.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final String[] FILE_EXTENSION_FILTERS = getFileExtensionFilters();
+
+	/**
+	 * Returns the default file extension filters. This method should only be used to initialize {@link #FILE_EXTENSION_FILTERS}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	private static String[] getFileExtensionFilters() {
+		List<String> result = new UniqueEList<String>();
+		result.addAll(StandardEditor.FILE_EXTENSION_FILTERS);
+		return result.toArray(new String[0]);
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return DiseasemodelsEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * RCP's application
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Application implements IApplication {
+		/**
+		 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Object start(IApplicationContext context) throws Exception {
+			WorkbenchAdvisor workbenchAdvisor = new DiseasemodelsEditorAdvisor();
+			Display display = PlatformUI.createDisplay();
+			try {
+				int returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
+				if (returnCode == PlatformUI.RETURN_RESTART) {
+					return IApplication.EXIT_RESTART;
+				}
+				else {
+					return IApplication.EXIT_OK;
+				}
+			}
+			finally {
+				display.dispose();
+			}
+		}
+
+		/**
+		 * @see org.eclipse.equinox.app.IApplication#stop()
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void stop() {
+			// Do nothing.
+		}
+	}
+
+	/**
+	 * RCP's perspective
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Perspective implements IPerspectiveFactory {
+		/**
+		 * Perspective ID
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final String ID_PERSPECTIVE = "org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorAdvisorPerspective"; //$NON-NLS-1$
+
+		/**
+		 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createInitialLayout(IPageLayout layout) {
+			layout.setEditorAreaVisible(true);
+			layout.addPerspectiveShortcut(ID_PERSPECTIVE);
+
+			IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, (float)0.66, layout.getEditorArea()); //$NON-NLS-1$
+			right.addView(IPageLayout.ID_OUTLINE);
+
+			IFolderLayout bottonRight = layout.createFolder("bottonRight", IPageLayout.BOTTOM, (float)0.60, "right"); //$NON-NLS-1$ //$NON-NLS-2$
+			bottonRight.addView(IPageLayout.ID_PROP_SHEET);
+		}
+	}
+	
+	/**
+	 * RCP's window advisor
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class WindowAdvisor extends WorkbenchWindowAdvisor {
+		/**
+		 * @see WorkbenchWindowAdvisor#WorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchWindowConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public WindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+			super(configurer);
+		}
+		
+		/**
+		 * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowOpen()
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void preWindowOpen() {
+			IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+			configurer.setInitialSize(new Point(600, 450));
+			configurer.setShowCoolBar(false);
+			configurer.setShowStatusLine(true);
+			configurer.setTitle(getString("_UI_Application_title")); //$NON-NLS-1$
+		}
+		
+		/**
+		 * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#createActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
+			return new WindowActionBarAdvisor(configurer);
+		}
+	}
+
+	/**
+	 * RCP's action bar advisor
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class WindowActionBarAdvisor extends ActionBarAdvisor {
+		/**
+		 * @see ActionBarAdvisor#ActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public WindowActionBarAdvisor(IActionBarConfigurer configurer) {
+			super(configurer);
+		}
+		
+		/**
+		 * @see org.eclipse.ui.application.ActionBarAdvisor#fillMenuBar(org.eclipse.jface.action.IMenuManager)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected void fillMenuBar(IMenuManager menuBar) {
+			IWorkbenchWindow window = getActionBarConfigurer().getWindowConfigurer().getWindow();
+			menuBar.add(createFileMenu(window));
+			menuBar.add(createEditMenu(window));
+			menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			menuBar.add(createWindowMenu(window));
+			menuBar.add(createHelpMenu(window));					
+		}
+		
+		/**
+		 * Creates the 'File' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected IMenuManager createFileMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_File_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_FILE);    
+			menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START));
+	
+			IMenuManager newMenu = new MenuManager(getString("_UI_Menu_New_label"), "new"); //$NON-NLS-1$ //$NON-NLS-2$
+			newMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+	
+			menu.add(newMenu);
+			menu.add(new Separator());
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.CLOSE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.CLOSE_ALL.create(window));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.SAVE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SAVE_AS.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SAVE_ALL.create(window));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.QUIT.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END));
+			return menu;
+		}
+
+		/**
+		 * Creates the 'Edit' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected IMenuManager createEditMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Edit_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_EDIT);
+			menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START));
+	
+			addToMenuAndRegister(menu, ActionFactory.UNDO.create(window));
+			addToMenuAndRegister(menu, ActionFactory.REDO.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.UNDO_EXT));
+			menu.add(new Separator());
+	
+			addToMenuAndRegister(menu, ActionFactory.CUT.create(window));
+			addToMenuAndRegister(menu, ActionFactory.COPY.create(window));
+			addToMenuAndRegister(menu, ActionFactory.PASTE.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.CUT_EXT));
+			menu.add(new Separator());
+	
+			addToMenuAndRegister(menu, ActionFactory.DELETE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SELECT_ALL.create(window));
+			menu.add(new Separator());
+	
+			menu.add(new GroupMarker(IWorkbenchActionConstants.ADD_EXT));
+	
+			menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END));
+			menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+			return menu;
+		}
+	
+		/**
+		 * Creates the 'Window' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected IMenuManager createWindowMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Window_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_WINDOW);
+	
+			addToMenuAndRegister(menu, ActionFactory.OPEN_NEW_WINDOW.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			menu.add(ContributionItemFactory.OPEN_WINDOWS.create(window));
+	
+			return menu;
+		}
+	
+		/**
+		 * Creates the 'Help' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected IMenuManager createHelpMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Help_label"), IWorkbenchActionConstants.M_HELP); //$NON-NLS-1$
+			// Welcome or intro page would go here
+			// Help contents would go here
+			// Tips and tricks page would go here
+			menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			return menu;
+		}
+		
+		/**
+		 * Adds the specified action to the given menu and also registers the action with the
+		 * action bar configurer, in order to activate its key binding.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected void addToMenuAndRegister(IMenuManager menuManager, IAction action) {
+			menuManager.add(action);
+			getActionBarConfigurer().registerGlobalAction(action);
+		}		
+	}
+
+	/**
+	 * About action for the RCP application.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class AboutAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			MessageDialog.openInformation(getWindow().getShell(), getString("_UI_About_title"), //$NON-NLS-1$
+			getString("_UI_About_text")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Open action for the objects from the Diseasemodels model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class OpenAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * Opens the editors for the files selected using the file dialog.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			String[] filePaths = openFilePathDialog(getWindow().getShell(), SWT.OPEN, null);
+			if (filePaths.length > 0) {
+				openEditor(getWindow().getWorkbench(), URI.createFileURI(filePaths[0]));
+			}
+		}
+	}
+
+	/**
+	 * Open URI action for the objects from the Diseasemodels model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class OpenURIAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * Opens the editors for the files selected using the LoadResourceDialog.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			LoadResourceAction.LoadResourceDialog loadResourceDialog = new LoadResourceAction.LoadResourceDialog(getWindow().getShell());
+			if (Window.OK == loadResourceDialog.open()) {
+				for (URI uri : loadResourceDialog.getURIs()) {
+					openEditor(getWindow().getWorkbench(), uri);
+				}
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static String[] openFilePathDialog(Shell shell, int style, String[] fileExtensionFilters) {
+		return openFilePathDialog(shell, style, fileExtensionFilters, (style & SWT.OPEN) != 0, (style & SWT.OPEN) != 0, (style & SWT.SAVE) != 0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static String[] openFilePathDialog(Shell shell, int style, String[] fileExtensionFilters, boolean includeGroupFilter, boolean includeAllFilter, boolean addExtension) {
+		FileDialog fileDialog = new FileDialog(shell, style);
+		if (fileExtensionFilters == null) {
+			fileExtensionFilters = FILE_EXTENSION_FILTERS;
+		}
+		
+		// If requested, augment the file extension filters by adding a group of all the other filters (*.ext1;*.ext2;...)
+		// at the beginning and/or an all files wildcard (*.*) at the end.
+		//
+		includeGroupFilter &= fileExtensionFilters.length > 1;
+		int offset = includeGroupFilter ? 1 : 0;
+		
+		if (includeGroupFilter || includeAllFilter) {
+			int size = fileExtensionFilters.length + offset + (includeAllFilter ? 1 : 0);
+			String[] allFilters = new String[size];
+			StringBuilder group = includeGroupFilter ? new StringBuilder() : null;
+			
+			for (int i = 0; i < fileExtensionFilters.length; i++) {
+				if (includeGroupFilter) {
+					if (i != 0) {
+						group.append(';');
+					}
+					group.append(fileExtensionFilters[i]);
+				}
+				allFilters[i + offset] = fileExtensionFilters[i];
+			}
+			
+			if (includeGroupFilter) {
+				allFilters[0] = group.toString();
+			}
+			if (includeAllFilter) {
+				allFilters[allFilters.length - 1] = "*.*"; //$NON-NLS-1$
+			}
+			
+			fileDialog.setFilterExtensions(allFilters);
+		}
+		else {
+			fileDialog.setFilterExtensions(fileExtensionFilters);
+		}
+		fileDialog.open();
+		
+		String[] filenames = fileDialog.getFileNames();
+		String[] result = new String[filenames.length];
+		String path = fileDialog.getFilterPath() + File.separator;
+		String extension = null;
+		
+		// If extension adding requested, get the dotted extension corresponding to the selected filter.
+		//
+		if (addExtension) {
+			int i = fileDialog.getFilterIndex();
+			if (i != -1 && (!includeAllFilter || i != fileExtensionFilters.length)) {
+				i = includeGroupFilter && i == 0 ? 0 : i - offset;
+				String filter = fileExtensionFilters[i];
+				int dot = filter.lastIndexOf('.');
+				if (dot == 1 && filter.charAt(0) == '*') {
+					extension = filter.substring(dot);
+				}
+			}
+		}
+		
+		// Build the result by adding the selected path and, if needed, auto-appending the extension.
+		//
+		for (int i = 0; i < filenames.length; i++) {
+			String filename = path + filenames[i];
+			if (extension != null) {
+				int dot = filename.lastIndexOf('.');
+				if (dot == -1 || !Arrays.asList(fileExtensionFilters).contains("*" + filename.substring(dot))) //$NON-NLS-1$
+				{
+					filename += extension;
+				}
+			}
+			result[i] = filename;
+		}
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static boolean openEditor(IWorkbench workbench, URI uri) {
+		IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+		IWorkbenchPage page = workbenchWindow.getActivePage();
+		
+		IEditorDescriptor editorDescriptor = EditUIUtil.getDefaultEditor(uri, null);
+		if (editorDescriptor == null) {
+			MessageDialog.openError(
+				workbenchWindow.getShell(),
+				getString("_UI_Error_title"), //$NON-NLS-1$
+				getString("_WARN_No_Editor", uri.lastSegment())); //$NON-NLS-1$
+			return false;
+		}
+		else {
+			try {
+				page.openEditor(new URIEditorInput(uri), editorDescriptor.getId());
+			}
+			catch (PartInitException exception) {
+				MessageDialog.openError(
+					workbenchWindow.getShell(),
+					getString("_UI_OpenEditorError_label"), //$NON-NLS-1$
+					exception.getMessage());
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#getInitialWindowPerspectiveId()
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getInitialWindowPerspectiveId() {
+		return Perspective.ID_PERSPECTIVE;
+	}
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#initialize(org.eclipse.ui.application.IWorkbenchConfigurer)
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void initialize(IWorkbenchConfigurer configurer) {
+		super.initialize(configurer);
+		configurer.setSaveAndRestore(true);
+	}
+	
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#createWorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchWindowConfigurer)
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+		return new WindowAdvisor(configurer);
+	}	
+}
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorPlugin.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorPlugin.java
new file mode 100644
index 0000000..70b317e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/DiseasemodelsEditorPlugin.java
@@ -0,0 +1,151 @@
+package org.eclipse.stem.diseasemodels.standard.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+//import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.stem.core.common.provider.CoreEditPlugin;
+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;
+//import org.eclipse.stem.definitions.labels.provider.DefinitionsEditPlugin;
+import org.eclipse.stem.ui.adapters.newmodifierpage.DiseaseNewModifierPageAdapterFactory;
+import org.eclipse.stem.ui.diseasemodels.ISharedImages;
+import org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditorAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This is the central singleton for the Diseasemodels editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class DiseasemodelsEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final DiseasemodelsEditorPlugin INSTANCE = new DiseasemodelsEditorPlugin();
+
+	/**
+	 * 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 NOT
+	 */
+	public DiseasemodelsEditorPlugin() {
+		super
+			(new ResourceLocator [] {
+				CoreEditPlugin.INSTANCE,
+				/*EcoreEditPlugin.INSTANCE,*/
+				DefinitionsEditPlugin.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 EclipseUIPlugin {
+		
+		/**
+		 * The symbolic identifier for this plug-in
+		 */
+		public static final String PLUGIN_ID = "org.eclipse.stem.ui.diseasemodels"; //$NON-NLS-1$
+		
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+
+		/**
+		 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+		 */
+		@Override
+		public void start(BundleContext context) throws Exception {
+			super.start(context);
+			new StandardPropertyStringProviderAdapterFactory();
+			new StandardDiseaseModelPropertyEditorAdapterFactory();
+		}
+
+		/**
+		 * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+		 */
+		@Override
+		protected void initializeImageRegistry(ImageRegistry registry) {
+			super.initializeImageRegistry(registry);
+			
+			final String ICON_PATH_PREFIX = "icons/full/obj16/"; //$NON-NLS-1$
+			final String CUSTOM_ICON_PATH_PREFIX = "icons/full/custom16/"; //$NON-NLS-1$C
+			
+			registry.put(ISharedImages.DISEASE_ICON, imageDescriptorFromPlugin(
+					PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX + "disease.gif")); //$NON-NLS-1$
+
+			registry.put(ISharedImages.INFECTOR_ICON, imageDescriptorFromPlugin(
+					PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX + "infector.gif")); //$NON-NLS-1$
+
+			registry.put(ISharedImages.RECORDED_CSV_ICON, imageDescriptorFromPlugin(
+					PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX + "recordedcsv.gif")); //$NON-NLS-1$
+
+			
+		} // initializeImageRegistry
+
+	} // Implementation
+
+} // DiseasemodelsEditorPlugin
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardActionBarContributor.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardActionBarContributor.java
new file mode 100644
index 0000000..12a6e89
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardActionBarContributor.java
@@ -0,0 +1,461 @@
+package org.eclipse.stem.diseasemodels.standard.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Standard model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * Action to create objects from the Standard model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class NewAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			StandardModelWizard wizard = new StandardModelWizard();
+			wizard.init(getWindow().getWorkbench(), StructuredSelection.EMPTY);
+			WizardDialog wizardDialog = new WizardDialog(getWindow().getShell(), wizard);
+			wizardDialog.open();
+		}
+	}
+
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					DiseasemodelsEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("standard-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("standard-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_StandardEditor_menu"), "org.eclipse.stem.diseasemodels.standardMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardEditor.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardEditor.java
new file mode 100644
index 0000000..ea6e442
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardEditor.java
@@ -0,0 +1,1708 @@
+package org.eclipse.stem.diseasemodels.standard.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+//import org.eclipse.core.resources.IFile;
+//import org.eclipse.core.resources.IMarker;
+//import org.eclipse.core.resources.IResource;
+//import org.eclipse.core.resources.IResourceChangeEvent;
+//import org.eclipse.core.resources.IResourceChangeListener;
+//import org.eclipse.core.resources.IResourceDelta;
+//import org.eclipse.core.resources.IResourceDeltaVisitor;
+//import org.eclipse.core.resources.ResourcesPlugin;
+
+//import org.eclipse.core.runtime.CoreException;
+//import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+//import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+//import org.eclipse.ui.dialogs.SaveAsDialog;
+//
+//import org.eclipse.ui.ide.IGotoMarker;
+//
+//import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+//import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+//import org.eclipse.emf.ecore.EObject;
+//import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+//import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+//import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;
+
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;
+
+//import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Standard model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider {
+	/**
+	 * The filters for file extensions supported by the editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<String> FILE_EXTENSION_FILTERS = prefixExtensions(StandardModelWizard.FILE_EXTENSIONS, "*.");
+
+	/**
+	 * Returns a new unmodifiable list containing prefixed versions of the extensions in the given list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static List<String> prefixExtensions(List<String> extensions, String prefix) {
+		List<String> result = new ArrayList<String>();
+		for (String extension : extensions) {
+			result.add(prefix + extension);
+		}
+		return Collections.unmodifiableList(result);
+	}
+
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer parentViewer;
+
+	/**
+	 * This shows how a tree view works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewer;
+
+	/**
+	 * This shows how a list view works.
+	 * A list viewer doesn't support icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ListViewer listViewer;
+
+	/**
+	 * This shows how a table view works.
+	 * A table can be used as a list with icons.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TableViewer tableViewer;
+
+	/**
+	 * This shows how a tree view with columns works.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer treeViewerWithColumns;
+
+	/**
+	 * This keeps track of the active viewer pane, in the book.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ViewerPane currentViewerPane;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(StandardEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(StandardEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == StandardEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(StandardEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.diseasemodels.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					DiseasemodelsEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StandardEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomain() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewerPane(ViewerPane viewerPane) {
+		if (currentViewerPane != viewerPane) {
+			if (currentViewerPane != null) {
+				currentViewerPane.showFocus(false);
+			}
+			currentViewerPane = viewerPane;
+		}
+		setCurrentViewer(currentViewerPane.getViewer());
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.diseasemodels.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.diseasemodels.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							Tree tree = new Tree(composite, SWT.MULTI);
+							TreeViewer newTreeViewer = new TreeViewer(tree);
+							return newTreeViewer;
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				selectionViewer = (TreeViewer)viewerPane.getViewer();
+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+				selectionViewer.setInput(editingDomain.getResourceSet());
+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+				viewerPane.setTitle(editingDomain.getResourceSet());
+
+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(selectionViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			}
+
+			// Create a page for the parent tree view.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							Tree tree = new Tree(composite, SWT.MULTI);
+							TreeViewer newTreeViewer = new TreeViewer(tree);
+							return newTreeViewer;
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				parentViewer = (TreeViewer)viewerPane.getViewer();
+				parentViewer.setAutoExpandLevel(30);
+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(parentViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ParentPage_label")); //$NON-NLS-1$
+			}
+
+			// This is the page for the list viewer
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new ListViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				listViewer = (ListViewer)viewerPane.getViewer();
+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(listViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_ListPage_label")); //$NON-NLS-1$
+			}
+
+			// This is the page for the tree viewer
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TreeViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				treeViewer = (TreeViewer)viewerPane.getViewer();
+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+				createContextMenuFor(treeViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreePage_label")); //$NON-NLS-1$
+			}
+
+			// This is the page for the table viewer.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TableViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+				tableViewer = (TableViewer)viewerPane.getViewer();
+
+				Table table = tableViewer.getTable();
+				TableLayout layout = new TableLayout();
+				table.setLayout(layout);
+				table.setHeaderVisible(true);
+				table.setLinesVisible(true);
+
+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(3, 100, true));
+				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
+				objectColumn.setResizable(true);
+
+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+				layout.addColumnData(new ColumnWeightData(2, 100, true));
+				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
+				selfColumn.setResizable(true);
+
+				tableViewer.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(tableViewer);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TablePage_label")); //$NON-NLS-1$
+			}
+
+			// This is the page for the table tree viewer.
+			//
+			{
+				ViewerPane viewerPane =
+					new ViewerPane(getSite().getPage(), StandardEditor.this) {
+						@Override
+						public Viewer createViewer(Composite composite) {
+							return new TreeViewer(composite);
+						}
+						@Override
+						public void requestActivation() {
+							super.requestActivation();
+							setCurrentViewerPane(this);
+						}
+					};
+				viewerPane.createControl(getContainer());
+
+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
+
+				Tree tree = treeViewerWithColumns.getTree();
+				tree.setLayoutData(new FillLayout());
+				tree.setHeaderVisible(true);
+				tree.setLinesVisible(true);
+
+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
+				objectColumn.setResizable(true);
+				objectColumn.setWidth(250);
+
+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
+				selfColumn.setResizable(true);
+				selfColumn.setWidth(200);
+
+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+				createContextMenuFor(treeViewerWithColumns);
+				int pageIndex = addPage(viewerPane.getControl());
+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label")); //$NON-NLS-1$
+			}
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						StandardEditor.this.setSelectionToViewer(selection);
+						StandardEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				// If it's the selection viewer, then we want it to select the same selection as this selection.
+				//
+				if (currentViewerPane.getViewer() == selectionViewer) {
+					ArrayList<Object> selectionList = new ArrayList<Object>();
+					selectionList.add(selectedElement);
+					while (selectedElements.hasNext()) {
+						selectionList.add(selectedElements.next());
+					}
+
+					// Set the selection to the widget.
+					//
+					selectionViewer.setSelection(new StructuredSelection(selectionList));
+				}
+				else {
+					// Set the input to the widget.
+					//
+					if (currentViewerPane.getViewer().getInput() != selectedElement) {
+						currentViewerPane.getViewer().setInput(selectedElement);
+						currentViewerPane.setTitle(selectedElement);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		IRunnableWithProgress operation =
+			new IRunnableWithProgress() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				public void run(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			DiseasemodelsEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		String[] filters = FILE_EXTENSION_FILTERS.toArray(new String[FILE_EXTENSION_FILTERS.size()]);
+		String[] files = DiseasemodelsEditorAdvisor.openFilePathDialog(getSite().getShell(), SWT.SAVE, filters);
+		if (files.length > 0) {
+			URI uri = URI.createFileURI(files[0]);
+			doSaveAs(uri, new URIEditorInput(uri));
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		if (currentViewerPane != null) {
+			currentViewerPane.setFocus();
+		}
+		else {
+			getControl(getActivePage()).setFocus();
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return DiseasemodelsEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return DiseasemodelsEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return true;
+	}
+}
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardModelWizard.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardModelWizard.java
new file mode 100644
index 0000000..d275b29
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/diseasemodels/standard/presentation/StandardModelWizard.java
@@ -0,0 +1,607 @@
+package org.eclipse.stem.diseasemodels.standard.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+//import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+//import org.eclipse.core.resources.IContainer;
+//import org.eclipse.core.resources.IFile;
+//import org.eclipse.core.resources.IFolder;
+//import org.eclipse.core.resources.IProject;
+//import org.eclipse.core.resources.IResource;
+//import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+//import org.eclipse.ui.actions.WorkspaceModifyOperation;
+//
+//import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+//
+//import org.eclipse.ui.part.FileEditorInput;
+//import org.eclipse.ui.part.ISetSelectionTarget;
+
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.provider.DiseasemodelsEditPlugin;
+
+
+import java.io.File;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StandardModelWizard extends Wizard implements INewWizard {
+	/**
+	 * The supported extensions for created files.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<String> FILE_EXTENSIONS =
+		Collections.unmodifiableList(Arrays.asList(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameExtensions").split("\\s*,\\s*"))); //$NON-NLS-1$ //$NON-NLS-2$
+
+	/**
+	 * A formatted list of supported file extensions, suitable for display.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String FORMATTED_FILE_EXTENSIONS =
+		DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+	/**
+	 * This caches an instance of the model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardPackage standardPackage = StandardPackage.eINSTANCE;
+
+	/**
+	 * This caches an instance of the model factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardFactory standardFactory = standardPackage.getStandardFactory();
+
+	/**
+	 * This is the initial object creation page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StandardModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+	/**
+	 * Remember the selection during initialization for populating the default container.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStructuredSelection selection;
+
+	/**
+	 * Remember the workbench during initialization.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IWorkbench workbench;
+
+	/**
+	 * Caches the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected List<String> initialObjectNames;
+
+	/**
+	 * This just records the information.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_Wizard_label")); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(DiseasemodelsEditorPlugin.INSTANCE.getImage("full/wizban/NewStandard"))); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns the names of the types that can be created as the root object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<String> getInitialObjectNames() {
+		if (initialObjectNames == null) {
+			initialObjectNames = new ArrayList<String>();
+			for (EClassifier eClassifier : standardPackage.getEClassifiers()) {
+				if (eClassifier instanceof EClass) {
+					EClass eClass = (EClass)eClassifier;
+					if (!eClass.isAbstract()) {
+						initialObjectNames.add(eClass.getName());
+					}
+				}
+			}
+			Collections.sort(initialObjectNames, java.text.Collator.getInstance());
+		}
+		return initialObjectNames;
+	}
+
+	/**
+	 * Create a new model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EObject createInitialModel() {
+		EClass eClass = (EClass)standardPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+		EObject rootObject = standardFactory.create(eClass);
+		return rootObject;
+	}
+
+	/**
+	 * Do the work after everything is specified.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean performFinish() {
+		try {
+			// Get the URI of the model file.
+			//
+			final URI fileURI = getModelURI();
+			if (new File(fileURI.toFileString()).exists()) {
+				if (!MessageDialog.openQuestion
+						(getShell(),
+						 DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_Question_title"), //$NON-NLS-1$
+						 DiseasemodelsEditorPlugin.INSTANCE.getString("_WARN_FileConflict", new String []{ fileURI.toFileString() }))) //$NON-NLS-1$
+				{
+					initialObjectCreationPage.selectFileField();
+					return false;
+				}
+			}
+			
+			// Do the work within an operation.
+			//
+			IRunnableWithProgress operation = new IRunnableWithProgress() {
+				public void run(IProgressMonitor progressMonitor) {
+						try {
+							// Create a resource set
+							//
+							ResourceSet resourceSet = new ResourceSetImpl();
+
+							// Create a resource for this file.
+							//
+							Resource resource = resourceSet.createResource(fileURI);
+
+							// Add the initial model object to the contents.
+							//
+							EObject rootObject = createInitialModel();
+							if (rootObject != null) {
+								resource.getContents().add(rootObject);
+							}
+
+							// Save the contents of the resource to the file system.
+							//
+							Map<Object, Object> options = new HashMap<Object, Object>();
+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+							resource.save(options);
+						}
+						catch (Exception exception) {
+							DiseasemodelsEditorPlugin.INSTANCE.log(exception);
+						}
+						finally {
+							progressMonitor.done();
+						}
+					}
+				};
+
+			getContainer().run(false, false, operation);
+
+			return DiseasemodelsEditorAdvisor.openEditor(workbench, fileURI);			
+		}
+		catch (Exception exception) {
+			DiseasemodelsEditorPlugin.INSTANCE.log(exception);
+			return false;
+		}
+	}
+
+	/**
+	 * This is the page where the type of object to create is selected.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class StandardModelWizardInitialObjectCreationPage extends WizardPage {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Text fileField;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo initialObjectField;
+
+		/**
+		 * @generated
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 */
+		protected List<String> encodings;
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Combo encodingField;
+
+		/**
+		 * Pass in the selection.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public StandardModelWizardInitialObjectCreationPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE); {
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+			
+			Label resourceURILabel = new Label(composite, SWT.LEFT);
+			{
+				resourceURILabel.setText(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_File_label")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				resourceURILabel.setLayoutData(data);
+			}
+
+			Composite fileComposite = new Composite(composite, SWT.NONE);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.END;
+				fileComposite.setLayoutData(data);
+
+				GridLayout layout = new GridLayout();
+				data.horizontalAlignment = GridData.FILL;
+				layout.marginHeight = 0;
+				layout.marginWidth = 0;
+				layout.numColumns = 2;
+				fileComposite.setLayout(layout);
+			}
+
+			fileField = new Text(fileComposite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				data.horizontalSpan = 1;
+				fileField.setLayoutData(data);
+			}
+
+			fileField.addModifyListener(validator);
+
+			Button resourceURIBrowseFileSystemButton = new Button(fileComposite, SWT.PUSH);
+			resourceURIBrowseFileSystemButton.setText(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_Browse_label")); //$NON-NLS-1$
+
+			resourceURIBrowseFileSystemButton.addSelectionListener
+				(new SelectionAdapter() {
+					 @Override
+					 public void widgetSelected(SelectionEvent event) {
+						 String[] filters = StandardEditor.FILE_EXTENSION_FILTERS.toArray(new String[StandardEditor.FILE_EXTENSION_FILTERS.size()]);
+						 String[] files = DiseasemodelsEditorAdvisor.openFilePathDialog(getShell(), SWT.SAVE, filters);
+						 if (files.length > 0) {
+							 fileField.setText(files[0]);
+						 }
+					 }
+				 });
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_ModelObject")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+
+			initialObjectField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				initialObjectField.setLayoutData(data);
+			}
+
+			for (String objectName : getInitialObjectNames()) {
+				initialObjectField.add(getLabel(objectName));
+			}
+
+			if (initialObjectField.getItemCount() == 1) {
+				initialObjectField.select(0);
+			}
+			initialObjectField.addModifyListener(validator);
+
+			Label encodingLabel = new Label(composite, SWT.LEFT);
+			{
+				encodingLabel.setText(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_XMLEncoding")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				encodingLabel.setLayoutData(data);
+			}
+			encodingField = new Combo(composite, SWT.BORDER);
+			{
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				encodingField.setLayoutData(data);
+			}
+
+			for (String encoding : getEncodings()) {
+				encodingField.add(encoding);
+			}
+
+			encodingField.select(0);
+			encodingField.addModifyListener(validator);
+
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected ModifyListener validator =
+			new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					setPageComplete(validatePage());
+				}
+			};
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			URI fileURI = getFileURI();
+			if (fileURI == null || fileURI.isEmpty()) {
+				setErrorMessage(null);
+				return false;
+			}
+
+			String extension = fileURI.fileExtension();
+			if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+				String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension"; //$NON-NLS-1$ //$NON-NLS-2$
+				setErrorMessage(DiseasemodelsEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));
+				return false;
+			}
+
+			setErrorMessage(null);
+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public void setVisible(boolean visible) {
+			super.setVisible(visible);
+			if (visible) {
+				initialObjectField.clearSelection();
+				encodingField.clearSelection();
+				fileField.setFocus();
+			}
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getInitialObjectName() {
+			String label = initialObjectField.getText();
+
+			for (String name : getInitialObjectNames()) {
+				if (getLabel(name).equals(label)) {
+					return name;
+				}
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public String getEncoding() {
+			return encodingField.getText();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public URI getFileURI() {
+			try {
+				return URI.createFileURI(fileField.getText());
+			}
+			catch (Exception exception) {
+				// Ignore
+			}
+			return null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void selectFileField() {
+				initialObjectField.clearSelection();
+				encodingField.clearSelection();
+				fileField.selectAll();
+				fileField.setFocus();
+		}		
+
+		/**
+		 * Returns the label for the specified type name.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected String getLabel(String typeName) {
+			try {
+				return DiseasemodelsEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			catch(MissingResourceException mre) {
+				DiseasemodelsEditorPlugin.INSTANCE.log(mre);
+			}
+			return typeName;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected Collection<String> getEncodings() {
+			if (encodings == null) {
+				encodings = new ArrayList<String>();
+				for (StringTokenizer stringTokenizer = new StringTokenizer(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) //$NON-NLS-1$
+				{
+					encodings.add(stringTokenizer.nextToken());
+				}
+			}
+			return encodings;
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void addPages() {
+		initialObjectCreationPage = new StandardModelWizardInitialObjectCreationPage("Whatever2"); //$NON-NLS-1$
+		initialObjectCreationPage.setTitle(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_StandardModelWizard_label")); //$NON-NLS-1$
+		initialObjectCreationPage.setDescription(DiseasemodelsEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); //$NON-NLS-1$
+		addPage(initialObjectCreationPage);
+	}
+
+		/**
+	 * Get the URI from the page.
+	 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+	 * @generated
+	 */
+		public URI getModelURI() {
+		return initialObjectCreationPage.getFileURI();
+	}
+
+}
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProvider.java
new file mode 100644
index 0000000..f73597c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProvider.java
@@ -0,0 +1,23 @@
+// IntensityColorsLabelsMappingColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that will provide an SEIR relative
+ * value for a specific adapted object (usually
+ * {@link org.eclipse.stem.core.graph.Node}).
+ */
+public interface IntensityColorsLabelsMappingColorProvider extends
+		RelativeValueColorProvider {
+	// Marker interface
+}// IntensityColorsLabelsMappingColorProvider
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapter.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapter.java
new file mode 100644
index 0000000..3e9fdb8
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapter.java
@@ -0,0 +1,144 @@
+// IntensityColorsLabelsMappingColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Map;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory.PropertySelectionListener;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+
+/**
+ * This class adapts {@link Node} objects to
+ * {@link IntensityColorsLabelsMappingColorProvider} object.
+ */
+public class IntensityColorsLabelsMappingColorProviderAdapter extends
+		AbstractRelativeValueColorProviderAdapter implements PropertySelectionListener{
+	/**
+	 * default {@link AlphaComposite}
+	 */
+	//private static final AlphaComposite ONE_COMPOSITE = makeComposite(1);
+	private final Map<String, Color> colorMap = VisualizationPreferencePage.getColorMapping();
+	private ItemPropertyDescriptor selectedProperty;
+
+	/**
+	 *  Constructor
+	 */
+	public IntensityColorsLabelsMappingColorProviderAdapter() {
+		super();
+	} // IntensityColorsLabelsMappingColorProviderAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#getRelativeValue()
+	 */
+	@Override
+	public float getRelativeValue() {
+		
+		final Node node = (Node) getTarget();
+		
+		for (final NodeLabel label : node.getLabels()) {
+			if (label instanceof DynamicNodeLabel) {
+				DynamicNodeLabel nodeLabel = (DynamicNodeLabel)label;
+				if (nodeLabel.getDecorator() == selectedDecorator) {
+					setRVPTarget(nodeLabel);
+					return (float) rvp.getRelativeValue(selectedProperty);
+				}
+			}
+		}
+
+		return 0; // We shouldn't reach this point
+	} // getRelativeValue
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#updateGC(GC, float, boolean)
+	 */
+	@Override
+	public void updateGC(final GC gcToUpdate,
+			final float gainFactor, final boolean useLogScaling) {
+
+		final String selectedPropertyName = selectedProperty.getDisplayName(null);
+
+		// Get the color for the selected property (label)
+		if (colorMap.containsKey(selectedPropertyName)) {
+			foregroundFillColor = colorMap.get(selectedPropertyName);
+		}
+
+		// Update the G2D object with the appropriate intensity of the color
+		float alpha = getRelativeValue();
+		alpha *= gainFactor;
+		// SED 8/4/2009. Make sure alpha is between 0 and 1
+		if(alpha > 1.0) alpha = 1.0f;
+		if(alpha < 0.0) alpha = 0.0f; // should never happen
+		if (alpha < ZERO_RELATIVE_VALUE_THRESHOLD) {
+			gcToUpdate.setAlpha(255);
+			// NOTE: this allows a background color different from the ocean color (JHK)
+			gcToUpdate.setBackground(zero_FillColor);
+			//gcToUpdate.setBackground(backgroundFillColor);
+
+		} else {
+			if (useLogScaling == true) {
+				alpha = performLogScaling(alpha);
+			} 
+			//TODO Take care of gain factor
+			gcToUpdate.setAlpha((int)(alpha * 255));
+			gcToUpdate.setBackground(foregroundFillColor);
+		}
+	} // setG2DColor
+
+//	/**
+//	 * @param alpha
+//	 * @return
+//	 */
+//	private static AlphaComposite makeComposite(final float alpha) {
+//		return (AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
+//	} // makeComposite
+
+	/**
+	 * @param v
+	 * @return
+	 */
+	private float performLogScaling(final float v) {
+		double vDouble = v;
+		// make sure our linear scale is a fraction between 0.0 and 1.0
+		if (vDouble > 1.0) {
+			vDouble = 1.0; // saturation
+		} else if (v < 0.0) {
+			vDouble = 0.0; // should not happen
+		}
+
+		// logarithmic color display
+		// set scale 1.0 to 100.0
+		double vScaled100 = vDouble * 99.0;
+		// add 1.0 so we have no zeros
+		vScaled100 += 1.0;
+		// take the log base 10.0
+		double newV = Math.log10(vScaled100);
+		// we now have a number between 1 and 2 so divide by 2
+		newV /= 2.0;
+
+		return (float) newV;
+	} // performLogScaling
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IntensityColorsLabelsMappingColorProviderAdapterFactory.PropertySelectionListener#propertySelected(org.eclipse.emf.edit.provider.ItemPropertyDescriptor)
+	 */
+	public void propertySelected(ItemPropertyDescriptor selectedProperty) {
+		this.selectedProperty = selectedProperty;		
+	}
+
+} // IntensityColorsLabelsMappingColorProviderAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapterFactory.java
new file mode 100644
index 0000000..ef17594
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/IntensityColorsLabelsMappingColorProviderAdapterFactory.java
@@ -0,0 +1,102 @@
+// IntensityColorsLabelsMappingColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.ui.preferences.PreferenceConstants;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.stem.ui.widgets.ColorProviderPropertiesComposite;
+import org.eclipse.stem.ui.widgets.ColorProviderPropertiesComposite.PropertySelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This factory create adapters that adapt
+ * {@link  org.eclipse.stem.core.graph.Node}s to
+ * {@link IntensityColorsLabelsMappingColorProvider}s.
+ */
+public class IntensityColorsLabelsMappingColorProviderAdapterFactory extends
+		AbstractRelativeValueColorProviderAdapterFactory {
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createNodeAdapter()
+	 */
+	@Override
+	public Adapter createNodeAdapter() {
+		final IntensityColorsLabelsMappingColorProviderAdapter adapter = 
+			new IntensityColorsLabelsMappingColorProviderAdapter();
+		addPropertySelectionListener(adapter);
+		adapter.propertySelected(selectedProperty);
+		return adapter;
+	} // createNodeAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == IntensityColorsLabelsMappingColorProvider.class;
+	} // isFactoryForType
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createPropertiesComposite(org.eclipse.swt.widgets.Composite, int, org.eclipse.stem.core.model.Decorator)
+	 */
+	public Composite createPropertiesComposite(final Composite parent, final int style, final Decorator selectedDecorator)
+	{	
+		final ColorProviderPropertiesComposite propertiesComposite = new ColorProviderPropertiesComposite(
+				parent, style);
+		propertiesComposite.setInitialPropertyName(getPreferenceValue(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE));
+		propertiesComposite.initialize(selectedDecorator);
+		selectedProperty = propertiesComposite.getSelectedProperty();
+		propertiesComposite
+				.addPropertySelectionListener(new ColorProviderPropertiesComposite.PropertySelectionListener() {
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						firePropertySelectionListener(propertySelectionEvent.getProperty());
+					}
+				});
+		this.propertiesComposite = propertiesComposite;
+		return propertiesComposite;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#createColorsLegendComposite(org.eclipse.swt.widgets.Composite,
+	 *      int)
+	 */
+	@Override
+	public Composite createColorsLegendComposite(final Composite parent,
+			final int style) {
+		final ColorsLegendComposite colorsLegendComposite = new ColorsLegendComposite(
+				parent, style);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_1,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_1_STRING);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_2,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_2_STRING);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_3,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_3_STRING);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_4,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_4_STRING);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_5,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_5_STRING);
+		colorsLegendComposite.addColorEntry(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_6,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_6_STRING);
+		return colorsLegendComposite;
+	} // createColorsLegendComposite
+
+} // IntensityColorsLabelsMappingColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProvider.java
new file mode 100644
index 0000000..f7f153e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProvider.java
@@ -0,0 +1,23 @@
+// SEIRRelativeValueColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that will provide an SEIR relative
+ * value for a specific adapted object (usually
+ * {@link org.eclipse.stem.core.graph.Node}).
+ */
+public interface SEIRRelativeValueColorProvider extends
+		RelativeValueColorProvider {
+	// Marker interface
+}// SEIRRelativeValueColorProvider
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapter.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapter.java
new file mode 100644
index 0000000..9668cb3
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapter.java
@@ -0,0 +1,81 @@
+// SEIRRelativeValueColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory.PropertySelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+
+/**
+ * This class adapts {@link Node} objects to
+ * {@link SEIRRelativeValueColorProvider} object.
+ */
+public class SEIRRelativeValueColorProviderAdapter extends
+		AbstractRelativeValueColorProviderAdapter  implements PropertySelectionListener{
+	
+	private ItemPropertyDescriptor selectedProperty;
+
+	/**
+	 * Constructor
+	 * @param selectedProperty
+	 */
+	public SEIRRelativeValueColorProviderAdapter(ItemPropertyDescriptor selectedProperty) {
+		super();
+		this.selectedProperty = selectedProperty;
+	} // SEIRRelativeValueColorProviderAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#getRelativeValue()
+	 */
+	@Override
+	public float getRelativeValue() {
+
+		final Node node = (Node) getTarget();
+		
+		for (final NodeLabel label : node.getLabels()) {
+			if (label instanceof DynamicNodeLabel) {
+				DynamicNodeLabel nodeLabel = (DynamicNodeLabel)label;
+				if (nodeLabel.getDecorator() == selectedDecorator) {
+					setRVPTarget(nodeLabel);
+					return (float) rvp.getRelativeValue(selectedProperty);
+				}
+			}
+		}
+
+		return 0; // We shouldn't reach this point
+	} // getRelativeValue
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#updateGC(org.eclipse.swt.graphics.GC, float, boolean)
+	 */
+	@Override
+	public void updateGC(GC gcToUpdate, float gainFactor, boolean useLogScaling) {
+		device = gcToUpdate.getDevice();
+		double relativeValue = getRelativeValue();
+		double gainedRelativeValue = gainFactor * relativeValue;
+		Color foreground = getColorForRelativeValue(gainedRelativeValue);
+		gcToUpdate.setBackground(foreground);
+	}
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IntensityColorsLabelsMappingColorProviderAdapterFactory.PropertySelectionListener#propertySelected(org.eclipse.emf.edit.provider.ItemPropertyDescriptor)
+	 */
+	public void propertySelected(ItemPropertyDescriptor selectedProperty) {
+		this.selectedProperty = selectedProperty;		
+	}
+
+} // SEIRRelativeValueColorProviderAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapterFactory.java
new file mode 100644
index 0000000..c8b2932
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/color/SEIRRelativeValueColorProviderAdapterFactory.java
@@ -0,0 +1,106 @@
+// SEIRRelativeValueColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.ui.preferences.PreferenceConstants;
+import org.eclipse.stem.ui.widgets.ColorProviderPropertiesComposite;
+import org.eclipse.stem.ui.widgets.ColorProviderPropertiesComposite.PropertySelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This factory create adapters that adapt {@link  Node}s to
+ * {@link SEIRRelativeValueColorProvider}s.
+ */
+public class SEIRRelativeValueColorProviderAdapterFactory extends
+		AbstractRelativeValueColorProviderAdapterFactory { 
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createNodeAdapter()
+	 */
+	@Override
+	public Adapter createNodeAdapter() {
+		final SEIRRelativeValueColorProviderAdapter adapter = 
+			new SEIRRelativeValueColorProviderAdapter(selectedProperty);
+		addPropertySelectionListener(adapter);
+		adapter.propertySelected(selectedProperty);
+		return adapter;
+	} // createNodeAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == SEIRRelativeValueColorProvider.class;
+	} // isFactoryForType
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createPropertiesComposite(org.eclipse.swt.widgets.Composite, int, org.eclipse.stem.core.model.Decorator)
+	 */
+	public Composite createPropertiesComposite(final Composite parent, final int style, final Decorator selectedDecorator)
+	{	
+		final ColorProviderPropertiesComposite propertiesComposite = new ColorProviderPropertiesComposite(
+				parent, style);
+		propertiesComposite.setInitialPropertyName(getPreferenceValue(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE));
+		propertiesComposite.initialize(selectedDecorator);
+		selectedProperty = propertiesComposite.getSelectedProperty();
+		propertiesComposite
+				.addPropertySelectionListener(new ColorProviderPropertiesComposite.PropertySelectionListener() {
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						firePropertySelectionListener(propertySelectionEvent.getProperty());
+					}
+				});
+		this.propertiesComposite = propertiesComposite;
+		return propertiesComposite;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#createColorsLegendComposite(org.eclipse.swt.widgets.Composite,
+	 *      int)
+	 */
+	@Override
+	public Composite createColorsLegendComposite(final Composite parent,
+			final int style) {
+		final ColorsLegendComposite colorsLegendComposite = new ColorsLegendComposite(
+				parent, style);
+		colorsLegendComposite
+				.addColorEntry(
+						RelativeValueColorPreferences.FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_ID,
+						"Relative value is 0");
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_1_ID,
+				"Relative value between 0 and 0.2");
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_2_ID,
+				"Relative value between 0.2 and 0.4");
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_3_ID,
+				"Relative value between 0.4 and 0.6");
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_4_ID,
+				"Relative value between 0.6 and 0.8");
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_5_ID,
+				"Relative value between 0.8 and 1");
+		colorsLegendComposite
+				.addColorEntry(
+						RelativeValueColorPreferences.FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_ID,
+						"Relative value is 1 (maximum)");
+		return colorsLegendComposite;
+	} // createColorsLegendComposite
+
+} // SEIRRelativeValueColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditor.java
new file mode 100644
index 0000000..eb32058
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditor.java
@@ -0,0 +1,305 @@
+package org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+abstract public class DiseaseModelPropertyEditor extends Composite {
+
+	/**
+	 * @param feature
+	 * @return <code>true</code> if the feature is a dublin core feature that
+	 *         is specified by a user.
+	 */
+	public static boolean isUserSpecifiedDiseaseModelProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		final EClass containingClass = feature.getEContainingClass();
+		// Is it a disease model property?
+		if (containingClass.equals(StandardPackage.eINSTANCE.getDiseaseModel())
+				|| containingClass.getEAllSuperTypes().contains(
+						StandardPackage.eINSTANCE.getDiseaseModel())) {
+			// Deprecated, don't use!
+			if(feature.getName().equals("finiteDifference")
+					|| feature.getName().equals("relativeTolerance")) return false;
+			// Yes
+			retValue = true;
+		} // if a disease model property
+		return retValue;
+	} // isUserSpecifiedDiseaseModelProperty
+
+	protected final Map<EStructuralFeature, Text> map = new HashMap<EStructuralFeature, Text>();
+	protected String errorMessage;
+
+	public DiseaseModelPropertyEditor(Composite parent, int style) {
+		super(parent,style);
+	}
+
+	public void populate(DiseaseModel diseaseModel) {
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			switch (entry.getKey().getFeatureID()) {
+			case StandardPackage.DISEASE_MODEL__DISEASE_NAME:
+				diseaseModel.setDiseaseName(entry.getValue().getText());
+				break;
+			case StandardPackage.DISEASE_MODEL__POPULATION_IDENTIFIER:
+				diseaseModel
+						.setPopulationIdentifier(entry.getValue().getText());
+				break;
+			case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+				diseaseModel.setTimePeriod(Long.parseLong(entry.getValue()
+						.getText()));
+				break;
+			case StandardPackage.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE:
+				diseaseModel.setBackgroundMortalityRate(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+	}
+
+	public boolean validate() {
+		boolean retValue = true;
+		// Disease name?
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.DISEASE_MODEL__DISEASE_NAME);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr0"); //$NON-NLS-1$
+			} // if
+		} // if
+
+		// Population?
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.DISEASE_MODEL__POPULATION_IDENTIFIER);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr1"); //$NON-NLS-1$
+			} // if
+		} // if
+
+		// Time Period
+		// Right now it is specified in milliseconds
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.DISEASE_MODEL__TIME_PERIOD);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr2"); //$NON-NLS-1$
+			} // if
+			else {
+				// No
+				// Is it a valid value?
+				retValue = isValidLongValue(text.getText(), 1);
+				if (!retValue) {
+					// No
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr3"); //$NON-NLS-1$
+				} // if
+			}
+		} // if time period
+
+		/**
+		 * These fields has been moved to Population Model
+		 */
+		
+		// Background mortality rate?
+/*		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.DISEASE_MODEL__BACKGROUND_MORTALITY_RATE);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = DiseaseWizardMessages.getString("NDizWizErr4"); //$NON-NLS-1$
+			} // if
+			else {
+				// No
+				// Is it a valid value > 0?
+				retValue = isValidValue(text.getText(), 0.0);
+				if (!retValue) {
+					// No
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr5"); //$NON-NLS-1$
+				} // if
+			}
+		} // if Background mortality rate
+*/		
+		
+		/**
+		 * MAD 7/15/2009
+		 * Relative tolerance is no longer needed in the disease model editor
+		 */
+//		// Relative tolerance
+//		if (retValue) {
+//			// Yes
+//			final Text text = map
+//					.get(StandardPackage.Literals.DISEASE_MODEL__RELATIVE_TOLERANCE);
+//			retValue = !text.getText().equals(""); //$NON-NLS-1$
+//			// nothing?
+//			if (!retValue) {
+//				// Yes
+//				errorMessage = DiseaseWizardMessages.getString("NDizWizErr22"); //$NON-NLS-1$
+//			} // if
+//			else {
+//				// No
+//				// Is it a valid value < 0.1 and > 0?
+//				retValue = isValidRelativeTolerance(text.getText(), 0.1);
+//				if (!retValue) {
+//					// No
+//					errorMessage = DiseaseWizardMessages
+//							.getString("NDizWizErr23"); //$NON-NLS-1$
+//				} // if
+//			}
+//		} // if Background mortality rate
+		
+		/**
+		 * End remove relative tolerance from disease model editor
+		 */
+		return retValue;
+	} // validate
+
+	/**
+	 * @param text
+	 * @param minValue
+	 * @return
+	 */
+	private boolean isValidLongValue(final String text, final int minValue) {
+		boolean retValue = true;
+		try {
+			final double value = Long.parseLong(text);
+			retValue = value >= minValue;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	}
+
+	/**
+	 * @param text
+	 * @return
+	 */
+	protected boolean isValidPercentage(final String text) {
+		boolean retValue = true;
+		try {
+			final double value = Double.parseDouble(text);
+			retValue = value >= 0.0 && value <= 100.;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	}
+
+	/**
+	 * @param text
+	 * @param minValue
+	 * @return
+	 */
+	protected boolean isValidValue(final String text, final double minValue) {
+		boolean retValue = true;
+		try {
+			final double value = Double.parseDouble(text);
+			retValue = value >= minValue;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	} // isValidRate
+
+	/**
+	 * @param text
+	 * @param minValue
+	 * @return
+	 */
+	protected boolean isValidRelativeTolerance(final String text, final double maxValue) {
+		boolean retValue = true;
+		try {
+			final double value = Double.parseDouble(text);
+			retValue = value <= maxValue && value > 0.0;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	} // isValidRate
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @param descriptor
+	 * @return the string that represents the default value of the property
+	 */
+	protected String getPropertyDefaultValueString(final IItemPropertyDescriptor descriptor) {
+		String retValue = ""; //$NON-NLS-1$
+	
+		final EStructuralFeature feature = (EStructuralFeature) descriptor
+				.getFeature(null);
+	
+		switch (feature.getFeatureID()) {
+		case StandardPackage.DISEASE_MODEL__TIME_PERIOD:
+			feature.getDefaultValue();
+			retValue = feature.getDefaultValueLiteral();
+			break;
+	
+		default:
+			retValue = feature.getDefaultValueLiteral();
+			retValue = retValue == null ? "" : retValue; //$NON-NLS-1$
+			break;
+		} // switch
+	
+		return retValue;
+	} // getPropertyDefaultValueString
+
+	/**
+	 * @return the error message that describes the problem with the contents
+	 */
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+
+} // DiseaseModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapter.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapter.java
new file mode 100644
index 0000000..76eef4f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapter.java
@@ -0,0 +1,23 @@
+package org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor;
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+abstract public class DiseaseModelPropertyEditorAdapter extends AdapterImpl
+		implements Adapter {
+
+	abstract public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator);
+} // DiseaseModelPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..fb3590a
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/diseasemodelpropertyeditor/DiseaseModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,37 @@
+// DiseaseModelPropertyEditorAdapterFactory.java
+package org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor;
+
+/******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditorAdapter;
+
+/**
+ * This class represents
+ */
+public interface DiseaseModelPropertyEditorAdapterFactory {
+
+	DiseaseModelPropertyEditorAdapterFactoryImpl INSTANCE = new DiseaseModelPropertyEditorAdapterFactoryImpl();
+
+	public class DiseaseModelPropertyEditorAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			DiseaseModelPropertyEditorAdapterFactory {
+
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == DiseaseModelPropertyEditorAdapter.class;
+		}
+
+	} // DiseaseModelPropertyEditorAdapterFactoryImpl
+} // DiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/newmodifierpage/DiseaseNewModifierPageAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/newmodifierpage/DiseaseNewModifierPageAdapterFactory.java
new file mode 100644
index 0000000..eecaff0
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/adapters/newmodifierpage/DiseaseNewModifierPageAdapterFactory.java
@@ -0,0 +1,156 @@
+// DiseaseNewModifierPageAdapterFactory.java
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.wizards.DiseaseWizardMessages;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class is an {@link NewModifierPageAdapterFactory} that adapts
+ * {@link DiseaseModel}s to {@link NewModifierPage}s.
+ */
+public class DiseaseNewModifierPageAdapterFactory extends
+		StandardAdapterFactory implements NewModifierPageAdapterFactory, IStartup {
+
+	/**
+	 * Default constructor.
+	 */
+	public DiseaseNewModifierPageAdapterFactory() {
+		super();
+		NewModifierPageAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do the constructor will do everything.		
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == NewModifierPageAdapter.class || super.isFactoryForType(type);
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelAdapter() {
+		return new DiseaseNewModifierPageAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createSIInfectorAdapter() {
+		return new SIInfectorNewModifierPageAdapter();
+	}
+
+	/**
+	 * This class adapts {@link DiseaseModel}s to {@link NewModifierPage}s
+	 */
+	private static class DiseaseNewModifierPageAdapter extends
+			NewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new NewModifierPage((Identifiable) getTarget()) {
+				@Override
+				protected boolean isUserSpecifiedProperty(
+						final EStructuralFeature feature) {
+					return StandardDiseaseModelPropertyEditor
+							.isUserSpecifiedDiseaseModelProperty(feature);
+				} // isUserSpecifiedProperty
+
+				@Override
+				protected String getBottomText() {
+					return DiseaseWizardMessages.getString("PMTP_Def");
+				}
+
+				@Override
+				protected boolean isModifiableProperty(
+						final EStructuralFeature feature) {
+					boolean retValue = super.isModifiableProperty(feature);
+
+					retValue = retValue
+							&& !feature.equals(StandardPackage.eINSTANCE
+									.getDiseaseModel_DiseaseName());
+					retValue = retValue
+							&& !feature.equals(StandardPackage.eINSTANCE
+									.getDiseaseModel_PopulationIdentifier());
+
+					return retValue;
+				} // isModifiableProperty
+			};
+		} // createNewModifierPage
+
+	} // DiseaseNewModifierPageAdapter
+
+	/**
+	 * This class adapts {@link SIInfector}s to {@link NewModifierPage}s
+	 */
+	private static class SIInfectorNewModifierPageAdapter extends
+			NewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new NewModifierPage((Identifiable) getTarget()) {
+				@Override
+				protected boolean isUserSpecifiedProperty(
+						final EStructuralFeature feature) {
+					boolean retValue = super.isUserSpecifiedProperty(feature);
+					
+					retValue = retValue && !feature.equals(StandardPackage.eINSTANCE.getInfector_TargetURI());
+					
+					return retValue;
+				} // isUserSpecifiedProperty
+
+				@Override
+				protected String getBottomText() {
+					return "";
+				}
+
+				@Override
+				protected boolean isModifiableProperty(
+						final EStructuralFeature feature) {
+					boolean retValue = super.isModifiableProperty(feature);
+
+					retValue = retValue
+							&& !feature.equals(StandardPackage.eINSTANCE.getInfector_PopulationIdentifier());
+
+					return retValue;
+				} // isModifiableProperty
+			};
+		} // createNewModifierPage
+
+	} // DiseaseNewModifierPageAdapter
+} // DiseaseNewModifierPageAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/diseasemodels/ISharedImages.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/diseasemodels/ISharedImages.java
new file mode 100644
index 0000000..b172411
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/diseasemodels/ISharedImages.java
@@ -0,0 +1,42 @@
+// ISharedImages.java
+package org.eclipse.stem.ui.diseasemodels;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.ui.views.explorer.RecordedCSVInstanceTreeNode;
+
+/**
+ * This interface contains identifiers used to mark images added to this
+ * plug-in's image registry. This images are intended to be shared by
+ * referencing the registry and using the identifiers defined here to select the
+ * appropriate image.
+ */
+public interface ISharedImages {
+
+	/**
+	 * This image is the icon to represent a {@link DiseaseModel}
+	 */
+	String DISEASE_ICON = "disease_icon.image";
+
+	/**
+	 * This image is the icon to represent a {@link Infector}
+	 */
+	String INFECTOR_ICON = "infector_icon.image";
+
+	/**
+	 * This image is the icon to represent a {@link RecordedCSVInstanceTreeNode}
+	 */
+	String RECORDED_CSV_ICON = "recorded_cvs_icon.image";
+
+} // ISharedImages
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/disease/DiseaseView.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/disease/DiseaseView.java
new file mode 100644
index 0000000..f934d3c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/disease/DiseaseView.java
@@ -0,0 +1,130 @@
+// DiseaseModelView.java
+package org.eclipse.stem.ui.views.disease;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.stem.diseasemodels.Constants;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+import org.eclipse.stem.ui.views.IdentifiablePluginView;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * This class implements a view of the plugged in Diseases.
+ */
+public class DiseaseView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Sequencers View
+	 */
+	public static final String ID_DISEASE_MODEL_VIEW = "org.eclipse.stem.ui.views.diseases"; //$NON-NLS-1$
+
+	/**
+	 * Default Constructor
+	 */
+	public DiseaseView() {
+		super();
+	} // DiseaseView
+
+	/**
+	 * @see org.eclipse.stem.ui.views.ExecutablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return DiseaseViewModel.getModel();
+	} // getInput
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new DiseaseViewTreeContentProvider();
+	} // getIdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class is the model of the plugged in <code>DiseaseModel</code>
+	 */
+	public static class DiseaseViewModel extends IdentifiableViewModel {
+
+		private static DiseaseViewModel model = null;
+
+		/**
+		 * @param extensionPointID
+		 */
+		private DiseaseViewModel(String extensionPointID) {
+			super(extensionPointID);
+		} // DiseaseModelViewModel
+
+		/**
+		 * @return the singleton instance of the model
+		 */
+		public static DiseaseViewModel getModel() {
+			// Do we need to make the model?
+			if (model == null) {
+				// Yes
+				model = new DiseaseViewModel(
+						Constants.ID_DISEASE_EXTENSION_POINT);
+			}
+			return model;
+		} // getModel
+
+	} // DiseaseViewModel
+
+	/**
+	 * This class is the content provider of the disease view.
+	 */
+	private static class DiseaseViewTreeContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent diseases in the disease view
+		static ImageDescriptor diseaseIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean diseaseIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getDiseaseIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent diseases, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getDiseaseIcon() {
+			// Should we try to load the icon?
+			if (diseaseIconFirstTime && diseaseIcon == null) {
+				// Yes
+				diseaseIconFirstTime = false;
+				diseaseIcon = 
+				AbstractUIPlugin.imageDescriptorFromPlugin(
+					"org.eclipse.stem.ui.diseasemodels"	, "icons/full/custom16/" + "disease.gif");
+			} // if we should load the icon
+			return diseaseIcon.createImage();
+		} // getdiseaseIcon
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#dispose()
+		 */
+		@Override
+		public void dispose() {
+			super.dispose();
+			// TODO dispose of the image
+		}
+
+	} // DiseaseModelViewTreeContentProvider
+} // DiseaseView
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNode.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNode.java
new file mode 100644
index 0000000..9a7867b
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNode.java
@@ -0,0 +1,33 @@
+// DiseaseModelInstanceTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+
+/**
+ * This class represents an instance of a serialized {@link DiseaseModel}.
+ */
+public class DiseaseModelInstanceTreeNode extends IdentifiableInstanceTreeNode {
+
+	/**
+	 * @param itn
+	 * @param name
+	 * @param extension
+	 * 		the file name extension of the serialized file.
+	 */
+	public DiseaseModelInstanceTreeNode(final IdentifiableTreeNode itn,
+			final String name, final String extension) {
+		super(itn, name, extension);
+	}
+
+} // DiseaseModelInstanceTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeContentProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeContentProvider.java
new file mode 100644
index 0000000..09ef46d
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeContentProvider.java
@@ -0,0 +1,93 @@
+// DiseaseModelInstanceTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link IdentifiableInstanceTreeNodeContentProvider} for
+ * {@link DiseaseModelInstanceTreeNode}s which appear in the {@link
+ * CommonNavigator} framework that is used to explore STEM Projects.
+ * 
+ * @see DiseaseModelInstanceTreeNodeLabelProvider
+ */
+public class DiseaseModelInstanceTreeNodeContentProvider extends
+		IdentifiableInstanceTreeNodeContentProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	IdentifiableInstanceTreeNodeContentProvider
+	 * 	#getChildren(java.lang.Object)
+	 */
+	@Override
+	public Object[] getChildren(final Object parentElement) {
+		Object[] retValue = null;
+		// Right kind of parent?
+		if (parentElement instanceof IdentifiableTreeNode) {
+			// Yes
+			final IdentifiableTreeNode itn = (IdentifiableTreeNode) parentElement;
+
+			final IFolder folder = itn.getProject().getFolder(
+					itn.getFolderName());
+
+			final List<IdentifiableInstanceTreeNode> temp = new ArrayList<IdentifiableInstanceTreeNode>();
+
+			try {
+				for (final IResource identifiableFile : folder.members()) {
+					// A disease model?
+					if (isDiseaseModel(identifiableFile)) {
+						// Yes
+						final String identifiableName = identifiableFile
+								.getName();
+						final String extension = identifiableFile
+								.getFileExtension();
+						final String nameWithoutExtension = identifiableName
+								.substring(0, identifiableName
+										.indexOf(extension) - 1);
+						temp.add(new IdentifiableInstanceTreeNode(itn,
+								nameWithoutExtension, extension));
+					} // if disease model
+				} // for
+			} catch (final CoreException e) {
+				Activator.logError("", e);
+			} // for each IResource folder.members()
+
+			retValue = temp.toArray();
+
+		} // if IdentifiableTreeNode
+
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @param identifiableFile
+	 * 		a file holding a serialized {@link Identifiable}.
+	 * @return <code>true</code> if the file holds a serialized {@link
+	 * 	DiseaseModel}
+	 */
+	protected boolean isDiseaseModel(final IResource identifiableFile) {
+		return identifiableFile.getFileExtension().endsWith(
+				StandardPackage.eNAME);
+	} // isDiseaseModel
+
+} // DiseaseModelInstanceTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeLabelProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeLabelProvider.java
new file mode 100644
index 0000000..99d2eae
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelInstanceTreeNodeLabelProvider.java
@@ -0,0 +1,48 @@
+// DiseaseModelInstanceTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ILabelProvider} for {@link
+ * DiseaseModelInstanceTreeNode}s which appear in the {@link CommonNavigator}
+ * framework that is used to explore STEM Projects.
+ * 
+ * @see DiseaseModelInstanceTreeNodeContentProvider
+ */
+public class DiseaseModelInstanceTreeNodeLabelProvider extends
+		IdentifiableInstanceTreeNodeLabelProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	IdentifiableInstanceTreeNodeLabelProvider#getImage(java.lang.Object)
+	 */
+	@Override
+	public Image getImage(final Object element) {
+		Image retValue = null;
+		if (element instanceof IdentifiableInstanceTreeNode) {
+			// Yes
+			final IdentifiableInstanceTreeNode iitn = (IdentifiableInstanceTreeNode) element;
+
+			retValue = DiseasemodelsEditorPlugin.getPlugin().getImageRegistry()
+					.get(iitn.getParent().getImageKey());
+
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+} // DiseaseModelInstanceTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNode.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNode.java
new file mode 100644
index 0000000..729c1ac
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNode.java
@@ -0,0 +1,37 @@
+// DiseaseModelTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.diseasemodels.ISharedImages;
+import org.eclipse.stem.ui.wizards.NewSTEMProjectWizard;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is used in the {@link CommonNavigator} based STEM Project Explorer
+ * view to represent a group of {@link DiseaseModel}s that belong to a
+ * particular STEM Project instance.
+ */
+public class DiseaseModelTreeNode extends IdentifiableTreeNode {
+
+	/**
+	 * @param project
+	 */
+	public DiseaseModelTreeNode(final IProject project) {
+		super(project, "Disease Models",
+				NewSTEMProjectWizard.DECORATORS_FOLDER_NAME,
+				ISharedImages.DISEASE_ICON);
+	} // DiseaseModelTreeNode
+
+} // DiseaseModelTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeContentProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeContentProvider.java
new file mode 100644
index 0000000..164329c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeContentProvider.java
@@ -0,0 +1,44 @@
+// DiseaseModelTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link IdentifiableTreeNodeContentProvider} for {@link
+ * DiseaseModelTreeNode}s which appear in the {@link CommonNavigator} framework
+ * that is used to explore STEM Projects.
+ * 
+ * @see DiseaseModelTreeNodeLabelProvider
+ */
+public class DiseaseModelTreeNodeContentProvider extends
+		IdentifiableTreeNodeContentProvider implements ITreeContentProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	IdentifiableTreeNodeContentProvider#getChildren(java.lang.Object)
+	 */
+	@Override
+	public Object[] getChildren(final Object parentElement) {
+		Object[] retValue = null;
+		if (parentElement instanceof IProject) {
+			// Yes
+			retValue = new Object[] { new DiseaseModelTreeNode(
+					(IProject) parentElement) }; // new Object
+		} // if IProject
+		return retValue;
+	}
+
+} // DiseaseModelTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeLabelProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeLabelProvider.java
new file mode 100644
index 0000000..f0e4059
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/DiseaseModelTreeNodeLabelProvider.java
@@ -0,0 +1,47 @@
+// DiseaseModelTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ILabelProvider} for {@link DiseaseModelTreeNode}s
+ * which appear in the {@link CommonNavigator} framework that is used to explore
+ * STEM Projects.
+ * 
+ * @see DiseaseModelTreeNodeContentProvider
+ */
+public class DiseaseModelTreeNodeLabelProvider extends
+		IdentifiableTreeNodeLabelProvider implements ILabelProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	IdentifiableInstanceTreeNodeLabelProvider#getImage(java.lang.Object)
+	 */
+	@Override
+	public Image getImage(final Object element) {
+		Image retValue = null;
+		if (element instanceof DiseaseModelTreeNode) {
+			// Yes
+			final DiseaseModelTreeNode dmtn = (DiseaseModelTreeNode) element;
+
+			retValue = DiseasemodelsEditorPlugin.getPlugin().getImageRegistry()
+					.get(dmtn.getImageKey());
+
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+} // DiseaseModelTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNode.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNode.java
new file mode 100644
index 0000000..990565b
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNode.java
@@ -0,0 +1,42 @@
+// RecordedCSVInstanceTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+
+/**
+ * This class represents simulation runs serialized using comma separated values
+ * (CSV).
+ */
+public class RecordedCSVInstanceTreeNode extends RecordedInstanceTreeNode {
+
+	private final File file;
+
+	/**
+	 * @param parent
+	 * @param file
+	 */
+	public RecordedCSVInstanceTreeNode(final RecordedTreeNode parent,
+			final File file) {
+		super(parent, file.getName());
+		this.file = file;
+	}
+
+	/**
+	 * @return the file
+	 */
+	public File getFile() {
+		return file;
+	}
+
+} // RecordedCSVInstanceTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeContentProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeContentProvider.java
new file mode 100644
index 0000000..b111ca5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeContentProvider.java
@@ -0,0 +1,82 @@
+// RecordedCSVInstanceTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link RecordedInstanceTreeNodeContentProvider} for {@link
+ * RecordedCSVInstanceTreeNode}s which appear in the {@link CommonNavigator}
+ * framework that is used to explore STEM Projects.
+ * 
+ * @see RecordedCSVInstanceTreeNodeLabelProvider
+ */
+public class RecordedCSVInstanceTreeNodeContentProvider extends
+		RecordedInstanceTreeNodeContentProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	RecordedInstanceTreeNodeContentProvider#getChildren(java.lang.Object)
+	 */
+	@Override
+	public Object[] getChildren(final Object parentElement) {
+		Object[] retValue = null;
+		// Right parent?
+		if (parentElement instanceof RecordedTreeNode) {
+			// Yes
+			final RecordedTreeNode parent = (RecordedTreeNode) parentElement;
+			final File csvFolder = DiseasemodelsEditorPlugin.getPlugin()
+					.getStateLocation().append("csv").toFile();
+
+			// Is the csvFolder a readable directory?
+			if (csvFolder.isDirectory() && csvFolder.canRead()) {
+				// Yes
+				final File[] csvSubFolders = csvFolder
+						.listFiles(new FileFilter() {
+							public boolean accept(File file) {
+								return file.isDirectory();
+							}
+						});
+
+				// Create the nodes that will represent the files in the common
+				// navigator framework
+				final List<Object> temp = new ArrayList<Object>();
+				for (File file : csvSubFolders) {
+					temp.add(new RecordedCSVInstanceTreeNode(parent, file));
+				} // for each File
+				retValue = temp.toArray();
+			} // if readable directory
+		} // if RecordedTreeNode
+
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	RecordedInstanceTreeNodeContentProvider#hasChildren(java.lang.Object)
+	 */
+	@Override
+	public boolean hasChildren(final Object element) {
+		return false;
+	}
+
+} // RecordedCSVInstanceTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeLabelProvider.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeLabelProvider.java
new file mode 100644
index 0000000..5b10b2e
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/views/explorer/RecordedCSVInstanceTreeNodeLabelProvider.java
@@ -0,0 +1,64 @@
+// RecordedCSVInstanceTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.stem.diseasemodels.standard.presentation.DiseasemodelsEditorPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ILabelProvider} for {@link RecordedCSVInstanceTreeNode
+ * }s which appear in the {@link CommonNavigator} framework that is used to
+ * explore STEM Projects.
+ * 
+ * @see RecordedCSVInstanceTreeNodeContentProvider
+ */
+public class RecordedCSVInstanceTreeNodeLabelProvider extends
+		RecordedInstanceTreeNodeLabelProvider {
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	RecordedInstanceTreeNodeLabelProvider#getImage(java.lang.Object)
+	 */
+	@Override
+	public Image getImage(final Object element) {
+		Image retValue = null;
+		if (element instanceof RecordedCSVInstanceTreeNode) {
+			// Yes
+			retValue = DiseasemodelsEditorPlugin
+					.getPlugin()
+					.getImageRegistry()
+					.get(
+							org.eclipse.stem.ui.diseasemodels.ISharedImages.RECORDED_CSV_ICON);
+
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.explorer.
+	 * 	RecordedInstanceTreeNodeLabelProvider#getText(java.lang.Object)
+	 */
+	@Override
+	public String getText(final Object element) {
+		String retValue = "nothing";
+		if (element instanceof RecordedCSVInstanceTreeNode) {
+			// Yes
+			final RecordedCSVInstanceTreeNode node = (RecordedCSVInstanceTreeNode) element;
+			retValue = node.getName();
+		} // if RecordedCSVInstanceTreeNode
+		return retValue;
+	}
+
+} // RecordedCSVInstanceTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseDefinitionControl.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseDefinitionControl.java
new file mode 100644
index 0000000..6e4a6f8
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseDefinitionControl.java
@@ -0,0 +1,189 @@
+// DiseaseDefinitionControl.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.diseasemodels.Constants;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.wizards.DiseaseModelPropertyComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class represents the SWT control for defining a disease.
+ */
+public class DiseaseDefinitionControl extends Composite {
+
+	private static DiseaseModel[] diseaseModels = null;
+
+	private final Combo combo;
+
+	private final DiseaseModelPropertyComposite diseaseModelPropertyComposite;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public DiseaseDefinitionControl(final Composite parent, final int style,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginWidth = 0;
+		gridLayout.numColumns = 2;
+		setLayout(gridLayout);
+
+		final Label diseaseModelLabel = new Label(this, SWT.NONE);
+		final GridData gd_diseaseModelLabel = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		gd_diseaseModelLabel.widthHint = 100;
+		diseaseModelLabel.setLayoutData(gd_diseaseModelLabel);
+		diseaseModelLabel.setText(DiseaseWizardMessages.getString("DDC.0")); //$NON-NLS-1$
+
+		combo = new Combo(this, SWT.READ_ONLY);
+		combo.setTextLimit(30);
+		final GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, true,
+				false);
+		gd_combo.widthHint = 303;
+		combo.setLayoutData(gd_combo);
+
+		combo.setToolTipText(DiseaseWizardMessages.getString("DDC.1")); //$NON-NLS-1$
+		// Initialize the list of disease models available
+		combo.setItems(getDiseaseModelNames(getDiseaseModels()));
+		combo.select(0);
+		combo.addModifyListener(projectValidator);
+
+		
+		diseaseModelPropertyComposite = new DiseaseModelPropertyComposite(this,
+				SWT.NONE, getDiseaseModels(), projectValidator);
+		final GridData gd_diseaseModelPropertyControl = new GridData(SWT.FILL,
+				SWT.CENTER, true, false, 2, 1);
+		diseaseModelPropertyComposite
+				.setLayoutData(gd_diseaseModelPropertyControl);
+
+		combo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				diseaseModelPropertyComposite
+						.displayDiseaseModel(getDiseaseModels()[combo
+								.getSelectionIndex()]);
+				// layout();
+			} // widgetSelected
+
+		});
+		final DiseaseDefinitionControl self = this;
+
+	} // DiseaseDefinitionControl
+
+	/**
+	 * @return an array of the {@link DiseaseModels}s defined in the system.
+	 */
+	private DiseaseModel[] getDiseaseModels() {
+		if (diseaseModels == null) {
+			final IExtensionRegistry registry = Platform.getExtensionRegistry();
+			final IConfigurationElement[] diseaseModelConfigElements = registry
+					.getConfigurationElementsFor(org.eclipse.stem.diseasemodels.Constants.ID_DISEASE_MODEL_EXTENSION_POINT);
+
+			final List<DiseaseModel> temp = new ArrayList<DiseaseModel>();
+
+			diseaseModels = new DiseaseModel[diseaseModelConfigElements.length];
+
+			for (int i = 0; i < diseaseModelConfigElements.length; i++) {
+				final IConfigurationElement element = diseaseModelConfigElements[i];
+				// Does the element specify the class of the disease model?
+				if (element.getName().equals(Constants.DISEASE_MODEL_ELEMENT)) {
+					// Yes
+					try {
+						temp.add((DiseaseModel) element
+								.createExecutableExtension(DiseaseWizardMessages.getString("DDC.2"))); //$NON-NLS-1$
+					} catch (final CoreException e) {
+						Activator.logError(
+								DiseaseWizardMessages.getString("DDC.3"), e); //$NON-NLS-1$
+					}
+				} // if
+			} // for each configuration element
+
+			diseaseModels = temp.toArray(new DiseaseModel[] {});
+		} // if disesaeModels not created
+
+		return diseaseModels;
+	} // getDiseaseModels
+
+	/**
+	 * @return the names of the disease models
+	 */
+	private String[] getDiseaseModelNames(final DiseaseModel[] diseaseModels) {
+		final String[] retValue = new String[diseaseModels.length];
+		for (int i = 0; i < diseaseModels.length; i++) {
+			String name = diseaseModels[i].getDublinCore().getTitle();
+			// Was a name specified?
+			if ((name == null) || name.equals("")) { //$NON-NLS-1$
+				// No
+				name = diseaseModels[i].getClass().getSimpleName();
+			} // if
+
+			retValue[i] = name;
+		} // for i
+		return retValue;
+	} // getDiseaseModelNames
+
+	
+	DiseaseModel getSelectedDiseaseModel() {
+		final DiseaseModel retValue = (DiseaseModel)EcoreUtil
+				.copy(getDiseaseModels()[combo.getSelectionIndex()]);
+		diseaseModelPropertyComposite.populateDiseaseModel(retValue);
+		return retValue;
+	} // getSelectedDiseaseModel
+
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return <code>true</code> if the contents of the control are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		return diseaseModelPropertyComposite.validate();
+	} // validate
+
+	/**
+	 * @return the error message set by {@link #validate()}
+	 */
+	public String getErrorMessage() {
+		return diseaseModelPropertyComposite.getErrorMessage();
+	}
+
+} // DiseaseDefinitionControl
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseModelPropertyComposite.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseModelPropertyComposite.java
new file mode 100644
index 0000000..0209eba
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseModelPropertyComposite.java
@@ -0,0 +1,128 @@
+// DiseaseModelPropertyComposite.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class represents
+ */
+public class DiseaseModelPropertyComposite extends Composite {
+
+	private Map<DiseaseModel, DiseaseModelPropertyEditor> modelMap = new HashMap<DiseaseModel, DiseaseModelPropertyEditor>();
+
+	private StackLayout stackLayout = null;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public DiseaseModelPropertyComposite(final Composite parent,
+			final int style, final DiseaseModel[] diseaseModels,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		stackLayout = new StackLayout();
+		setLayout(stackLayout);
+
+		Label label;
+		label = new Label(this, SWT.NONE);
+		label.setText(DiseaseWizardMessages.getString("DMPC1")); //$NON-NLS-1$
+		DiseaseModelPropertyEditor firstOne = null;
+		// Any disease models?
+		if (diseaseModels != null) {
+			// Yes
+			for (int i = 0; i < diseaseModels.length; i++) {
+
+				DiseaseModelPropertyEditorAdapter dmpea = (DiseaseModelPropertyEditorAdapter) DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+						.adapt(diseaseModels[i],
+								DiseaseModelPropertyEditorAdapter.class);
+
+				final DiseaseModelPropertyEditor dmpe = dmpea
+						.createDiseaseModelPropertyEditor(this, SWT.NONE,
+								projectValidator);
+
+				modelMap.put(diseaseModels[i], dmpe);
+				if (firstOne == null) {
+					// Yes
+					firstOne = dmpe;
+				} // if
+			} // for i
+		} // if any disease models?
+
+		stackLayout.topControl = firstOne;
+	} // DiseaseModelPropertyComposite
+
+	void displayDiseaseModel(final DiseaseModel diseaseModel) {
+		final DiseaseModelPropertyEditor dmpe = modelMap.get(diseaseModel);
+		// Did we find it?
+		if (dmpe != null) {
+			// Yes
+			stackLayout.topControl = dmpe;
+			layout();
+		} // if
+		else {
+			Activator.logError(DiseaseWizardMessages.getString("DMPC2") //$NON-NLS-1$
+					+ diseaseModel.getClass().getName() + "\"", null); //$NON-NLS-1$
+		}
+	} // displayDiseaseModel
+	
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return <code>true</code> if the contents of the composite are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		return ((DiseaseModelPropertyEditor) (stackLayout.topControl))
+				.validate();
+	} // validate
+
+	/**
+	 * @return
+	 */
+	public String getErrorMessage() {
+		return ((DiseaseModelPropertyEditor) (stackLayout.topControl))
+				.getErrorMessage();
+	}
+
+	/**
+	 * @param diseaseModel
+	 */
+	public void populateDiseaseModel(DiseaseModel diseaseModel) {
+		((DiseaseModelPropertyEditor) (stackLayout.topControl))
+				.populate(diseaseModel);
+	} // populateDiseaseModel
+
+} // DiseaseModelPropertyComposite
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseWizardMessages.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseWizardMessages.java
new file mode 100644
index 0000000..e85566c
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/DiseaseWizardMessages.java
@@ -0,0 +1,46 @@
+// DiseaseWizardMessages.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class DiseaseWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.wizards.diseasewizardmessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private DiseaseWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // DiseaseWizardMessages
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEvent.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEvent.java
new file mode 100644
index 0000000..6ad270f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEvent.java
@@ -0,0 +1,41 @@
+// ISOKeyPickedEvent.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.EventObject;
+
+/**
+ * This class represents the event of an ISOkey being selected using an
+ * {@link ISOKeyPicker}.
+ */
+public class ISOKeyPickedEvent extends EventObject {
+	private static final long serialVersionUID = 1L;
+	private String isoKey;
+
+	/**
+	 * @param source
+	 * @param isoKey
+	 */
+	public ISOKeyPickedEvent(Object source, String isoKey) {
+		super(source);
+		this.isoKey = isoKey;
+	}
+
+	/**
+	 * @return the isoKey
+	 */
+	public final String getIsoKey() {
+		return isoKey;
+	}
+
+} // ISOKeyPickedEvent
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEventListener.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEventListener.java
new file mode 100644
index 0000000..4a7a0c5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPickedEventListener.java
@@ -0,0 +1,22 @@
+package org.eclipse.stem.ui.wizards;
+import java.util.EventListener;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface is implemented by classes that want to be informed when an ISO
+ * key is selected from the {@link ISOKeyPicker};
+ */
+public interface ISOKeyPickedEventListener extends EventListener {
+	void isoKeyPicked(ISOKeyPickedEvent ikpe);
+} // ISOKeyPickedEventListener
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPicker.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPicker.java
new file mode 100644
index 0000000..e5e06a7
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/ISOKeyPicker.java
@@ -0,0 +1,157 @@
+// ISOKeyPicker.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.FilteredList;
+
+/**
+ * This class is a SWT Composite that allows a user to specify an ISO key by
+ * picking from an expandable hierarchy of country names and their
+ * sub-divisions.
+ */
+public class ISOKeyPicker extends Composite {
+
+	private final List<ISOKeyPickedEventListener> listeners = new CopyOnWriteArrayList<ISOKeyPickedEventListener>();
+
+	private final Label isoKeyLevelDescription;
+	private final FilteredList filteredList;
+	private final Text text;
+	private int isoKeyLevel;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 */
+	public ISOKeyPicker(final Composite parent, final int style,
+			final int isoKeyLevel) {
+		super(parent, style);
+		this.isoKeyLevel = isoKeyLevel;
+		setLayout(new FormLayout());
+
+		text = new Text(this, SWT.BORDER);
+		final FormData fd_text = new FormData();
+		fd_text.top = new FormAttachment(0, 0);
+		fd_text.left = new FormAttachment(25, 0);
+		fd_text.right = new FormAttachment(100, 0);
+		text.setLayoutData(fd_text);
+		text.addListener(SWT.Modify, new Listener() {
+			public void handleEvent(final Event event) {
+				filteredList.setFilter(text.getText());
+			}
+		});
+		isoKeyLevelDescription = new Label(this, SWT.NONE);
+		isoKeyLevelDescription.setText("Label");
+		FormData fd_isoKeyLevelDescription;
+		fd_isoKeyLevelDescription = new FormData();
+		fd_isoKeyLevelDescription.top = new FormAttachment(text, 2, SWT.TOP);
+		fd_isoKeyLevelDescription.right = new FormAttachment(25, 0);
+		fd_isoKeyLevelDescription.left = new FormAttachment(0, 0);
+		this.isoKeyLevelDescription.setLayoutData(fd_isoKeyLevelDescription);
+
+		filteredList = new FilteredList(this, SWT.BORDER, null, false, false,
+				true);
+		final FormData fd_filteredList = new FormData();
+		fd_filteredList.top = new FormAttachment(text, 5, SWT.DEFAULT);
+		fd_filteredList.bottom = new FormAttachment(100, 0);
+		fd_filteredList.left = new FormAttachment(text, 0, SWT.LEFT);
+		fd_filteredList.right = new FormAttachment(text, 0, SWT.RIGHT);
+		filteredList.setLayoutData(fd_filteredList);
+		filteredList.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(final SelectionEvent e) {
+				final Object[] selected = filteredList.getSelection();
+				// Anything selected?
+				if (selected.length == 1) {
+					final String isoKey = (String) selected[0];
+					fireISOKeyPicked(isoKey);
+				}
+			}
+
+			@Override
+			public void widgetDefaultSelected(final SelectionEvent e) {
+				widgetSelected(e);
+			}
+		});
+
+		filteredList.setIgnoreCase(true);
+		filteredList.setFilter("");
+		filteredList.setLabelProvider(new LabelProvider() {
+			@Override
+			public String getText(final Object element) {
+				return getName((String) element, isoKeyLevel);
+			}
+		});
+		filteredList.setElements(new Object[] {});
+
+		pack();
+	} // ISOKeyPicker
+
+	public void setISOKeys(final Object[] isoKeys) {
+		filteredList.setElements(isoKeys);
+		text.setText("");
+	} // setISOKeys
+
+	public void setISOKeyLevelDescription(final String isoKeyLevelDescription) {
+		this.isoKeyLevelDescription.setText(isoKeyLevelDescription);
+	} // setISOKeyLevelDescription
+
+	/**
+	 * @return the iso key level
+	 */
+	public int getISOKeyLevel() {
+		return isoKeyLevel;
+	}
+
+	public void setISOKeyLevel(final int isoKeyLevel) {
+		this.isoKeyLevel = isoKeyLevel;
+	} // setLevel
+
+	private String getName(final String isoKey, final int level) {
+		return GeographicNames.getName(isoKey, level);
+	} // getName
+
+	public void addISOKeyPickedListener(final ISOKeyPickedEventListener listener) {
+		listeners.add(listener);
+	} // addISOKeyPickedListener
+
+	public void removeISOKeyPickedListener(
+			final ISOKeyPickedEventListener listener) {
+		listeners.remove(listener);
+	} // removeISOKeyPickedListener
+
+	private void fireISOKeyPicked(final String isoKey) {
+		final ISOKeyPickedEvent isoKeyPickedEvent = new ISOKeyPickedEvent(this,
+				isoKey);
+		for (final ISOKeyPickedEventListener listener : listeners) {
+			listener.isoKeyPicked(isoKeyPickedEvent);
+		} // for each ISOKeyPickedEventListener
+	}
+} // ISOKeyPicker
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/InfectorDefinitionComposite.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/InfectorDefinitionComposite.java
new file mode 100644
index 0000000..9b64bd0
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/InfectorDefinitionComposite.java
@@ -0,0 +1,487 @@
+// InfectorDefinitionControl.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.data.geography.GeographicMapper;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class represents the SWT composite that provides the GUI for defining an
+ * {@link org.eclipse.stem.diseasemodels.standard.Infector} in the
+ * {@link NewInfectorWizard}.
+ */
+public class InfectorDefinitionComposite extends Composite {
+
+	// private static final URI LEVEL_0_ISO_NAME_FILE_URI = URI
+	// .createURI("platform:/plugin/org.eclipse.stem.geography/resources/data/country/ZZZ/level0ISONames.properties");
+
+	private final ISOKeyPicker isoKeyPicker2;
+	private final ISOKeyPicker isoKeyPicker1;
+	private final ISOKeyPicker isoKeyPicker0;
+	private final ISOKeyPicker isoKeyPicker3;
+	private String isoKey = ""; //$NON-NLS-1$
+
+	private String tempISOKey = null;
+
+	private final Text numberOfInfectionsText;
+
+	private final Text populationText;
+
+	private final Text diseaseNameText;
+	
+	private Label numberOfInfectionsLabel;
+
+	private String errorMessage;
+	
+	/**
+	 * Radio buttons to specify if the wizard will create an infector
+	 * or an inoculator.
+	 */
+	private Button[] infectorModeRadioButtons = new Button[2];
+	
+	/** 
+	 * keep track of the mode.
+	 * infector by default
+	 */
+	private boolean infectorMode = true;
+	
+
+
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public InfectorDefinitionComposite(final Composite parent, final int style,
+			final ModifyListener projectValidator) {
+		super(parent, style);
+		
+		setLayout(new FormLayout());
+		
+		final int margin1 = 35;
+		final int margin2 = 25;
+		
+		// radio buttons to set the mode
+		Composite infectorModeComposite = createInfectorModeRadioButtonsComposite(this);
+		final FormData fd_infectorMode = new FormData();
+		fd_infectorMode.top = new FormAttachment(0, 0);
+		fd_infectorMode.bottom = new FormAttachment(5, 0);
+		fd_infectorMode.left = new FormAttachment(0, 0);
+		fd_infectorMode.right = new FormAttachment(100, 0);
+		infectorModeComposite.setLayoutData(fd_infectorMode);
+		
+		// Disease Name
+		final Label diseaseNameLabel = new Label(this, SWT.NONE);
+		final FormData fd_diseaseNameLabel = new FormData();
+		fd_diseaseNameLabel.left = new FormAttachment(0, 0);
+		fd_diseaseNameLabel.right = new FormAttachment(margin1, 0);
+		fd_diseaseNameLabel.top = new FormAttachment(infectorModeComposite, 5, SWT.BOTTOM);
+		diseaseNameLabel.setLayoutData(fd_diseaseNameLabel);
+		diseaseNameLabel.setText(DiseaseWizardMessages.getString("NInfWizDN")); //$NON-NLS-1$
+
+		diseaseNameText = new Text(this, SWT.BORDER);
+		diseaseNameText.setToolTipText(DiseaseWizardMessages.getString("NInfWizDNTT")); //$NON-NLS-1$
+		diseaseNameText.addModifyListener(projectValidator);
+		
+		final FormData fd_diseaseNameText = new FormData();
+		fd_diseaseNameText.left = new FormAttachment(diseaseNameLabel, 0);
+		fd_diseaseNameText.right = new FormAttachment(100, 0);
+		fd_diseaseNameText.top = new FormAttachment(infectorModeComposite, 5, SWT.BOTTOM);
+		diseaseNameText.setLayoutData(fd_diseaseNameText);
+		
+
+		// Population
+		final Label populationLabel = new Label(this, SWT.NONE);
+		final FormData fd_populationLabel = new FormData();
+		fd_populationLabel.left = new FormAttachment(0, 0);
+		fd_populationLabel.right = new FormAttachment(margin1, 0);
+		fd_populationLabel.top = new FormAttachment(diseaseNameLabel, 5, SWT.BOTTOM);
+		populationLabel.setLayoutData(fd_populationLabel);
+		populationLabel.setText(DiseaseWizardMessages.getString("NInfWizPOP")); //$NON-NLS-1$
+
+		populationText = new Text(this, SWT.BORDER);
+		populationText.setText(StandardPackage.Literals.DISEASE_MODEL__POPULATION_IDENTIFIER.getDefaultValueLiteral());
+		populationText.setToolTipText(DiseaseWizardMessages.getString("NInfWizPOPTT")); //$NON-NLS-1$
+		populationText.addModifyListener(projectValidator);
+		
+		final FormData fd_populationText = new FormData();
+		fd_populationText.top = new FormAttachment(diseaseNameLabel, 5, SWT.BOTTOM);
+		fd_populationText.left = new FormAttachment(populationLabel, 0);
+		fd_populationText.right = new FormAttachment(100, 0);
+		populationText.setLayoutData(fd_populationText);
+		
+
+		// Number of Infections
+		numberOfInfectionsLabel = new Label(this, SWT.NONE);
+		numberOfInfectionsLabel.setText(DiseaseWizardMessages.getString("NInfWizNI")); //$NON-NLS-1$
+
+		final FormData fd_numberOfInfectionsLabel = new FormData();
+		fd_numberOfInfectionsLabel.top = new FormAttachment(populationLabel,5, SWT.BOTTOM);
+		fd_numberOfInfectionsLabel.left = new FormAttachment(0, 0);
+		fd_numberOfInfectionsLabel.right = new FormAttachment(margin1, 0);
+		numberOfInfectionsLabel.setLayoutData(fd_numberOfInfectionsLabel);
+		
+		numberOfInfectionsText = new Text(this, SWT.BORDER);
+		numberOfInfectionsText.setText(StandardPackage.Literals.SI_INFECTOR__INFECTIOUS_COUNT.getDefaultValueLiteral());
+		numberOfInfectionsText.setToolTipText(DiseaseWizardMessages.getString("NInfWizNITT")); //$NON-NLS-1$
+		numberOfInfectionsText.addModifyListener(projectValidator);
+		
+		final FormData fd_numberOfInfectionsText = new FormData();
+		fd_numberOfInfectionsText.left = new FormAttachment(numberOfInfectionsLabel, 0);
+		fd_numberOfInfectionsText.right = new FormAttachment(100, 0);
+		fd_numberOfInfectionsText.top = new FormAttachment(populationLabel, 5, SWT.BOTTOM);
+		numberOfInfectionsText.setLayoutData(fd_numberOfInfectionsText);
+		
+
+		// ISO Key
+		final Label isoKeyLabel = new Label(this, SWT.NONE);
+		isoKeyLabel.setText(DiseaseWizardMessages.getString("NInfWizISOK")); //$NON-NLS-1$
+		
+		final FormData fd_isoKeyLabel = new FormData();
+		fd_isoKeyLabel.top = new FormAttachment(numberOfInfectionsLabel, 5, SWT.BOTTOM);
+		fd_isoKeyLabel.left = new FormAttachment(0, 0);
+		fd_isoKeyLabel.right = new FormAttachment(margin2, 0);
+		isoKeyLabel.setLayoutData(fd_isoKeyLabel);
+		
+
+		final Label isokeyValueLabel = new Label(this, SWT.NONE);
+		isokeyValueLabel.setText(isoKey);
+
+		final FormData fd_isokeyValueLabel = new FormData();
+		fd_isokeyValueLabel.top = new FormAttachment(numberOfInfectionsLabel, 5, SWT.BOTTOM);
+		fd_isokeyValueLabel.left = new FormAttachment(isoKeyLabel, 0);
+		fd_isokeyValueLabel.right = new FormAttachment(100, 0);
+		isokeyValueLabel.setLayoutData(fd_isokeyValueLabel);
+		
+		// ISOKeyPicker 0
+		isoKeyPicker0 = new ISOKeyPicker(this, SWT.NONE, 0);
+		isoKeyPicker0.setISOKeyLevel(0);
+		isoKeyPicker0.setISOKeyLevelDescription(DiseaseWizardMessages.getString("NInfWizCNTRY"));
+		isoKeyPicker0.addISOKeyPickedListener(new ISOKeyPickedEventListener() {
+			public void isoKeyPicked(final ISOKeyPickedEvent ikpe) {
+				final Object[] isoKeys = GeographicNames.getSubISOKeys(
+						GeographicNames.getAlpha2(ikpe.getIsoKey()),
+						isoKeyPicker1.getISOKeyLevel());
+				isoKeyPicker1.setISOKeys(isoKeys);
+				isoKeyPicker2.setISOKeys(new Object[] {});
+				isoKeyPicker3.setISOKeys(new Object[] {});
+				isoKey = ikpe.getIsoKey();
+				tempISOKey = isoKey;
+				isokeyValueLabel.setText(isoKey);
+			}
+		});
+		
+		// ISOKeyPicker 1
+		isoKeyPicker1 = new ISOKeyPicker(this, SWT.NONE, 1);
+		isoKeyPicker1.setISOKeyLevelDescription(DiseaseWizardMessages
+				.getString("NInfWizL1"));
+		isoKeyPicker1.addISOKeyPickedListener(new ISOKeyPickedEventListener() {
+			public void isoKeyPicked(final ISOKeyPickedEvent ikpe) {
+				final Object[] isoKeys = GeographicNames.getSubISOKeys(ikpe
+						.getIsoKey(), isoKeyPicker2.getISOKeyLevel());
+				isoKeyPicker2.setISOKeys(isoKeys);
+				isoKey = ikpe.getIsoKey();
+				tempISOKey = tempISOKey == null ? isoKey : tempISOKey;
+				// Were there any ISO keys to set?
+				if (isoKeys.length == 0) {
+					// No
+					isoKey = tempISOKey;
+					isokeyValueLabel.setText(isoKey);
+					tempISOKey = null;
+				} // if
+			}
+		});
+		
+		// ISOKeyPicker 2
+		isoKeyPicker2 = new ISOKeyPicker(this, SWT.NONE, 2);
+		isoKeyPicker2.setISOKeyLevelDescription(DiseaseWizardMessages
+				.getString("NInfWizL2"));
+		isoKeyPicker2.addISOKeyPickedListener(new ISOKeyPickedEventListener() {
+			public void isoKeyPicked(final ISOKeyPickedEvent ikpe) {
+				final Object[] isoKeys = GeographicNames.getSubISOKeys(ikpe
+						.getIsoKey(), isoKeyPicker3.getISOKeyLevel());
+				isoKeyPicker3.setISOKeys(isoKeys);
+				isoKey = ikpe.getIsoKey();
+				tempISOKey = tempISOKey == null ? isoKey : tempISOKey;
+				// Were there any ISO keys to set?
+				if (isoKeys.length == 0) {
+					// No
+					isoKey = tempISOKey;
+					isokeyValueLabel.setText(isoKey);
+					tempISOKey = null;
+				} // if
+			}
+		});
+		
+		// ISOKeyPicker 3
+		isoKeyPicker3 = new ISOKeyPicker(this, SWT.NONE, 3);
+		isoKeyPicker3.setISOKeyLevelDescription(DiseaseWizardMessages
+				.getString("NInfWizL3"));
+		isoKeyPicker3.addISOKeyPickedListener(new ISOKeyPickedEventListener() {
+			public void isoKeyPicked(final ISOKeyPickedEvent ikpe) {
+				isoKey = tempISOKey == null ? ikpe.getIsoKey() : tempISOKey;
+				isokeyValueLabel.setText(isoKey);
+				tempISOKey = null;
+			}
+		});
+		
+		
+		//   FORM DATA   //
+		
+		// ISO Picker0
+		final FormData fd_isoKeyPicker0 = new FormData();
+		fd_isoKeyPicker0.top = new FormAttachment(isoKeyLabel, 5, SWT.BOTTOM);
+		fd_isoKeyPicker0.right = new FormAttachment(100, 0);
+		fd_isoKeyPicker0.left = new FormAttachment(0, 0);
+		isoKeyPicker0.setLayoutData(fd_isoKeyPicker0);
+		isoKeyPicker0.setISOKeys(GeographicNames.getSubISOKeys(
+				GeographicMapper.EARTH_ALPHA3_ISO_KEY, -1));
+
+		// ISOKeyPicker 1		
+		final FormData fd_isoKeyPicker1 = new FormData();
+		fd_isoKeyPicker1.top = new FormAttachment(isoKeyPicker0, 5, SWT.BOTTOM);
+		fd_isoKeyPicker1.left = new FormAttachment(isoKeyPicker0, 0, SWT.LEFT);
+		fd_isoKeyPicker1.right = new FormAttachment(isoKeyPicker0, 0, SWT.RIGHT);
+		isoKeyPicker1.setLayoutData(fd_isoKeyPicker1);
+		
+		// ISOKeyPicker 2
+		final FormData fd_isoKeyPicker2 = new FormData();
+		fd_isoKeyPicker2.top = new FormAttachment(isoKeyPicker1, 5, SWT.BOTTOM);
+		fd_isoKeyPicker2.left = new FormAttachment(isoKeyPicker0, 0, SWT.LEFT);
+		fd_isoKeyPicker2.right = new FormAttachment(isoKeyPicker0, 0, SWT.RIGHT);
+		isoKeyPicker2.setLayoutData(fd_isoKeyPicker2);
+	
+		// ISOKeyPicker 3
+		final FormData fd_isoKeyPicker3 = new FormData();
+		fd_isoKeyPicker3.top = new FormAttachment(isoKeyPicker2, 5, SWT.BOTTOM);
+		fd_isoKeyPicker3.left = new FormAttachment(isoKeyPicker0, 0, SWT.LEFT);
+		fd_isoKeyPicker3.right = new FormAttachment(isoKeyPicker0, 0, SWT.RIGHT);
+		//fd_isoKeyPicker3.bottom = new FormAttachment(100, -5);
+		isoKeyPicker3.setLayoutData(fd_isoKeyPicker3);
+		// getShell().pack();
+	}// InfectorDefinitionControl
+
+	
+	/**
+	 * creates a set of radio buttons and their composite container for the user to specify
+	 * the creation of an infector OR an inoculator
+	 * @param parent
+	 * @return the composite
+	 */
+	Composite createInfectorModeRadioButtonsComposite(final Composite parent) {
+		Composite radioComposite = new Composite(parent, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.VERTICAL;
+	    radioComposite.setLayout(fillLayout);
+	    
+	    infectorModeRadioButtons[0] = new Button(radioComposite, SWT.RADIO);
+	    infectorModeRadioButtons[0].setSelection(true);
+	    infectorModeRadioButtons[0].setText(DiseaseWizardMessages.getString("NInfectorWiz.infect"));//$NON-NLS-1$
+	    
+	    infectorModeRadioButtons[1] = new Button(radioComposite, SWT.RADIO);
+	    infectorModeRadioButtons[1].setText(DiseaseWizardMessages.getString("NInfectorWiz.inoculate"));//$NON-NLS-1$
+	    
+	    Listener listener = new Listener() {
+	        public void handleEvent(Event event) {
+	          if (event.widget == infectorModeRadioButtons[0]) {
+	        	infectorMode = infectorModeRadioButtons[0].getSelection();
+	          }
+	          // toggle the wizard
+	          if(infectorMode) {
+	        	  numberOfInfectionsLabel.setText(DiseaseWizardMessages.getString("NInfWizNI")); //$NON-NLS-1$
+	          } else {
+	        	  numberOfInfectionsLabel.setText(DiseaseWizardMessages.getString("NInfWizPI")); //$NON-NLS-1$
+	          }
+	          // clear the text because we need to revalidate
+	          numberOfInfectionsText.setText("");
+	        }
+	      };
+	      // these are radio buttons so we only need to add the listener to one of them.
+	      infectorModeRadioButtons[0].addListener(SWT.Selection, listener);
+	      
+	    return radioComposite;
+	}//getinfectorModeRadioButtonsComposite
+	
+
+
+	/**
+	 * @return <code>true</code> if the contents of the control are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		boolean retValue = true;
+		// Disease Name?
+		if (getDiseaseName() == null || getDiseaseName().equals("")) { //$NON-NLS-1$
+			// Yes
+			errorMessage = DiseaseWizardMessages.getString("NInfWizError.1"); //$NON-NLS-1$
+			retValue = false;
+		} // if
+
+		// Population
+		if (retValue) {
+			// Yes
+			if (getPopulation() == null || getPopulation().equals("")) { //$NON-NLS-1$
+				// Yes
+				errorMessage = DiseaseWizardMessages
+						.getString("NInfWizError.2"); //$NON-NLS-1$
+				retValue = false;
+			} // if
+		} // if
+
+		// Number of infections
+		if (retValue) {
+			// Yes
+			if (numberOfInfectionsText.getText() == null
+					|| numberOfInfectionsText.getText().equals("")) { //$NON-NLS-1$
+				// Yes
+				errorMessage = DiseaseWizardMessages
+						.getString("NInfWizError.3"); //$NON-NLS-1$
+				retValue = false;
+			} // if
+			else {
+				// No
+				try {
+					final double temp = Double
+							.parseDouble(numberOfInfectionsText.getText());
+					// > 0?
+					if (temp <= 0.0) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NInfWizError.4"); //$NON-NLS-1$
+						retValue = false;
+					} // if
+					
+					// is this an innoculation wizard
+					if(!isInfectorMode()) {
+						// yes, then this must be a percentage
+						if(temp > 100.0) {
+							errorMessage = DiseaseWizardMessages.getString("NInfWizError.8"); //$NON-NLS-1$
+							retValue = false;
+						}
+						
+					}
+				} catch (final NumberFormatException e) {
+					errorMessage = DiseaseWizardMessages
+							.getString("NInfWizError.5"); //$NON-NLS-1$
+					retValue = false;
+				} // catch NumberFormatException
+			}
+		} // if numberOfInfections
+
+		// ISO Key
+		if (retValue) {
+			// Yes
+			if (getIsoKey() == null || getIsoKey().equals("")) { //$NON-NLS-1$
+				// Yes
+				errorMessage = DiseaseWizardMessages
+						.getString("NInfWizError.6"); //$NON-NLS-1$
+				retValue = false;
+			} // if
+		} // if
+
+		return retValue;
+	} // validate
+
+	/**
+	 * @return the error message set by {@link #validate()}
+	 */
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+
+	// private String getName(String isoKey, int level) {
+	// return GeographicNames.getName(isoKey, level);
+	// } // getName
+
+	
+
+	/**
+	 * access the infectorMode
+	 * if true create and infector
+	 * if false creates and inoculator
+	 */
+	public boolean isInfectorMode() {
+		return infectorMode;
+	}
+	
+	/**
+	 * @return the isoKey that specifies the location to be infected.
+	 */
+	public final String getIsoKey() {
+		return isoKey;
+	}
+
+	/**
+	 * @return the NLS'd name of the location selected as the point of infection
+	 */
+	public final String getLocationName() {
+		// TODO need to return the NLS string here.
+		return getIsoKey();
+	}
+
+	/**
+	 * @return the name of the disease
+	 */
+	public final String getDiseaseName() {
+		return diseaseNameText.getText();
+	}
+
+	/**
+	 * @return the name of the population being infected
+	 */
+	public final String getPopulation() {
+		return populationText.getText();
+	}
+
+	/**
+	 * @return the number of infections
+	 */
+	public double getNumberOfInfections() {
+		try {
+			return Double.parseDouble(numberOfInfectionsText.getText());
+		} catch (final NumberFormatException e) {
+			Activator.logError(DiseaseWizardMessages
+					.getString("NInfWizError.7"), e); //$NON-NLS-1$
+			return 0.0;
+		} // catch NumberFormatException
+	}
+	
+	/**
+	 * @return the percent to Inoculate
+	 */
+	public double getPercentToInoculate() {
+		try {
+			return Double.parseDouble(numberOfInfectionsText.getText());
+		} catch (final NumberFormatException e) {
+			Activator.logError(DiseaseWizardMessages
+					.getString("NInfWizError.7"), e); //$NON-NLS-1$
+			return 0.0;
+		} // catch NumberFormatException
+	}
+
+} // InfectorDefinitionComposite
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewDiseaseWizard.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewDiseaseWizard.java
new file mode 100644
index 0000000..9ab036f
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewDiseaseWizard.java
@@ -0,0 +1,179 @@
+// NewDiseaseWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a Wizard for making new STEM {@link DiseaseModel} instances.
+ */
+public class NewDiseaseWizard extends NewIdentifiableWizard {
+
+	private NewDiseasePage ndp = null;
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return DiseaseWizardMessages.getString("NDiseaseWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		ndp = new NewDiseasePage(DiseaseWizardMessages
+				.getString("NDiseaseWiz.page_title")); //$NON-NLS-1$
+		ndp.setTitle(DiseaseWizardMessages.getString("NDiseaseWiz.page_title")); //$NON-NLS-1$
+		ndp.setDescription(DiseaseWizardMessages
+				.getString("NDiseaseWiz.page_description")); //$NON-NLS-1$
+
+		return ndp;
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()
+			 */
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(StandardPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.createTypeURI(
+						DiseaseModel.URI_TYPE_DISEASEMODEL_SEGMENT).toString());
+				type.setEnabled(false);
+			}
+		}; // DublinCorePage
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final DiseaseModel retValue = ndp.getSelectedDiseaseModel();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.DECORATORS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return StandardPackage.eNAME;
+	} // getIdentifiableSerializationFileExtension
+
+	protected static class NewDiseasePage extends NewIdentifiablePage {
+
+		DiseaseDefinitionControl ddc = null;
+
+		/**
+		 * @param pageName
+		 */
+		protected NewDiseasePage(final String pageName) {
+			super(pageName);
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(DiseaseWizardMessages
+					.getString("NDiseaseWiz.DC_DESCRIPTION"), //$NON-NLS-1$
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+		@Override
+		protected Composite createSpecificComposite(final Composite parent) {
+			ddc = new DiseaseDefinitionControl(parent, SWT.NONE,
+					projectValidator);
+			return ddc;
+		} // createSpecificComposite
+
+		@Override
+		protected boolean validatePage() {
+			boolean retValue = super.validatePage();
+			if (retValue) {
+				setErrorMessage(null);
+				retValue = ddc.validate();
+				// Error?
+				if (!retValue) {
+					// Yes
+					setErrorMessage(ddc.getErrorMessage());
+				} // if
+			}
+			return retValue;
+		} // validatePage
+
+		DiseaseModel getSelectedDiseaseModel() {
+			return ddc.getSelectedDiseaseModel();
+		} // getSelectedDiseaseModel
+
+	} // NewDiseasePage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewDiseaseWizard}
+	 */
+	public static class NewDiseaseWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewDiseaseWizard wizard = new NewDiseaseWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewDiseaseWizardCommandHandler
+} // NewDiseaseWizard
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewInfectorWizard.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewInfectorWizard.java
new file mode 100644
index 0000000..89f02d5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/NewInfectorWizard.java
@@ -0,0 +1,219 @@
+// NewInfectorWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.diseasemodels.standard.Infector;
+import org.eclipse.stem.diseasemodels.standard.SIInfector;
+import org.eclipse.stem.diseasemodels.standard.StandardFactory;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.impl.SIRInoculatorImpl;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class represents
+ */
+public class NewInfectorWizard extends NewIdentifiableWizard {
+
+	private NewInfectorPage nip = null;
+
+	/**
+	 * Constructor
+	 */
+	public NewInfectorWizard() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return DiseaseWizardMessages.getString("NInfectorWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		nip = new NewInfectorPage(DiseaseWizardMessages.getString("NInfectorWiz.page_title")); //$NON-NLS-1$
+		nip.setTitle(DiseaseWizardMessages.getString("NInfectorWiz.page_title")); //$NON-NLS-1$
+		nip.setDescription(DiseaseWizardMessages.getString("NInfectorWiz.page_description")); //$NON-NLS-1$
+
+		return nip;
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()
+			 */
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(StandardPackage.eNS_URI);
+				format.setEnabled(false);
+				// type.setText("undefined");
+				// type.setText(STEMURI.SCENARIO_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		}; // DublinCorePage
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Infector retValue = nip.getInfector();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.DECORATORS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return StandardPackage.eNAME;
+	}
+
+	protected static class NewInfectorPage extends NewIdentifiablePage {
+
+		private InfectorDefinitionComposite idc;
+
+		/**
+		 * @param pageName
+		 */
+		protected NewInfectorPage(String pageName) {
+			super(pageName);
+		}
+
+		/**
+		 * @return
+		 */
+		public Infector getInfector() {
+			SIInfector retValue = null;
+			if(idc.isInfectorMode()) {
+				retValue = StandardFactory.eINSTANCE.createSIInfector();
+			} else {
+				retValue = StandardFactory.eINSTANCE.createSIRInoculator();
+			}
+			retValue.setDiseaseName(idc.getDiseaseName());
+			retValue.setPopulationIdentifier(idc.getPopulation());
+			retValue.setTargetISOKey(idc.getIsoKey());
+			if(idc.isInfectorMode()) {
+				retValue.setInfectiousCount(idc.getNumberOfInfections());
+			} else {
+				((SIRInoculatorImpl) retValue).setInoculatedPercentage(idc.getPercentToInoculate());
+				// just to be sure - since this is NOT and Infector
+				retValue.setInfectiousCount(0.0);
+			}
+			return retValue;
+		} // getInfector
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			if(idc.isInfectorMode()) {
+				return MessageFormat.format(DiseaseWizardMessages.getString("NInfectorWiz.DC_DESCRIPTION"), //$NON-NLS-1$
+						new Object[] { Double.valueOf(idc.getNumberOfInfections()),
+										idc.getPopulation(), 
+										idc.getDiseaseName(),
+										GeographicNames.getReverseHierarchyName(idc.getIsoKey()), idc.getIsoKey() 
+										});
+			} 
+			// else inoculator
+			return MessageFormat.format(DiseaseWizardMessages.getString("NInfectorWiz.DC_DESCRIPTION2"), //$NON-NLS-1$
+					new Object[] { Double.valueOf(idc.getPercentToInoculate()),
+									idc.getPopulation(), 
+									idc.getDiseaseName(),
+									GeographicNames.getReverseHierarchyName(idc.getIsoKey()), idc.getIsoKey() 
+									});
+			
+		} // getDCDescription
+
+		@Override
+		protected Composite createSpecificComposite(final Composite parent) {
+			idc = new InfectorDefinitionComposite(parent, SWT.NONE,
+					projectValidator);
+			return idc;
+		} // createSpecificComposite
+
+		@Override
+		protected boolean validatePage() {
+			boolean retValue = super.validatePage();
+			if (retValue) {
+				setErrorMessage(null);
+				retValue = idc.validate();
+				// Error?
+				if (!retValue) {
+					// Yes
+					setErrorMessage(idc.getErrorMessage());
+				} // if
+			}
+			return retValue;
+		} // validatePage
+	} // NewInfectorPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewInfectorWizard}
+	 */
+	public static class NewInfectorWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewInfectorWizard wizard = new NewInfectorWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewInfectorWizardCommandHandler
+} // NewInfectorWizard
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditor.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditor.java
new file mode 100644
index 0000000..e2efaf3
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditor.java
@@ -0,0 +1,453 @@
+// StandardDiseaseModelPropertyEditor.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.SEIR;
+import org.eclipse.stem.diseasemodels.standard.SI;
+import org.eclipse.stem.diseasemodels.standard.SIR;
+import org.eclipse.stem.diseasemodels.standard.StandardDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StandardPackage;
+import org.eclipse.stem.diseasemodels.standard.StandardStochasticDiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.StochasticDiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a {@link Composite} that presents the properties of a
+ * {@link DiseaseModel} for editing.
+ */
+public class StandardDiseaseModelPropertyEditor extends DiseaseModelPropertyEditor {
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public StandardDiseaseModelPropertyEditor(final Composite parent, final int style,
+			final DiseaseModel diseaseModel,
+			final ModifyListener projectValidator) {
+		super(parent, style);
+
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(diseaseModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(diseaseModel, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(diseaseModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedDiseaseModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+					final Composite buttons = new Composite(this, SWT.NONE);
+					final RowLayout buttonsLayout = new RowLayout();
+					buttonsLayout.marginTop = 0;
+					buttonsLayout.marginBottom = 0;
+					buttons.setLayout(buttonsLayout);
+					final Shell shell = this.getShell();
+
+					final Button fileChooserButton = new Button(buttons,
+							SWT.NONE);
+					fileChooserButton.setText(DiseaseWizardMessages
+							.getString("fileChooserButtonText")); //$NON-NLS-1$
+					fileChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("fileChooserButtonTooltipText")); //$NON-NLS-1$
+					fileChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final FileDialog fd = new FileDialog(shell,
+											SWT.OPEN | SWT.MULTI);
+									fd
+											.setText(DiseaseWizardMessages
+													.getString("fileChooserDialogTitle")); //$NON-NLS-1$
+									final String[] extensionsFilter = {
+											"*.txt", "*.csv" };
+									fd.setFilterExtensions(extensionsFilter);
+
+									// String format for single selected file
+									// will be:
+									// "path/file_name"
+									// For multi-files the format will be:
+									// "path/file_name1" "file_name2"
+									// "file_name3"...
+
+									String selected = "\"" + fd.open() + "\"";
+									final String[] selectedFiles = fd
+											.getFileNames();
+									if (selectedFiles.length > 1) { // if
+										// multi-files
+										// selected
+										for (int i = 1; i < selectedFiles.length; i++) {
+											selected += " \""
+													+ selectedFiles[i] + "\"";
+										}
+									}
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final Button dirChooserButton = new Button(buttons,
+							SWT.NONE);
+					dirChooserButton.setText(DiseaseWizardMessages
+							.getString("dirChooserButtonText")); //$NON-NLS-1$
+					dirChooserButton.setToolTipText(DiseaseWizardMessages
+							.getString("dirChooserButtonTooltipText")); //$NON-NLS-1$
+					dirChooserButton
+							.addSelectionListener(new SelectionAdapter() {
+								@Override
+								public void widgetSelected(
+										final SelectionEvent e) {
+									final DirectoryDialog dd = new DirectoryDialog(
+											shell, SWT.OPEN);
+									dd
+											.setText(DiseaseWizardMessages
+													.getString("dirChooserDialogTitle")); //$NON-NLS-1$
+									final String selected = dd.open();
+									text.setText(selected);
+								} // widgetSelected
+							} // SelectionAdapter
+							);
+
+					final GridData fileBtnGD = new GridData(GridData.END);
+					// fileChooserButton.setLayoutData(fileBtnGD);
+					buttons.setLayoutData(fileBtnGD);
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(DiseaseWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // StandardDiseaseModelPropertyEditor
+
+	/**
+	 * @param diseaseModel
+	 *            the {@link DiseaseModel} instance to populate.
+	 */
+	public void populate(final DiseaseModel diseaseModel) {
+		super.populate(diseaseModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			switch (entry.getKey().getFeatureID()) {
+			case StandardPackage.STANDARD_DISEASE_MODEL__REFERENCE_POPULATION_DENSITY:
+				((StandardDiseaseModel) diseaseModel)
+						.setReferencePopulationDensity(Double.parseDouble(entry
+								.getValue().getText()));
+				break;
+			case StandardPackage.STOCHASTIC_DISEASE_MODEL__SEED:
+				((StochasticDiseaseModel) diseaseModel).setSeed(Long
+						.parseLong(entry.getValue().getText()));
+				break;
+			case StandardPackage.STANDARD_STOCHASTIC_DISEASE_MODEL__GAIN:
+				((StandardStochasticDiseaseModel) diseaseModel).setGain(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SI__TRANSMISSION_RATE:
+				((SI) diseaseModel).setTransmissionRate(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SI__NON_LINEARITY_COEFFICIENT:
+				((SI) diseaseModel).setNonLinearityCoefficient(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SI__RECOVERY_RATE:
+				((SI) diseaseModel).setRecoveryRate(Double.parseDouble(entry
+						.getValue().getText()));
+				break;
+			case StandardPackage.SI__INFECTIOUS_MORTALITY_RATE:
+				((SI) diseaseModel).setInfectiousMortalityRate(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SI__PHYSICALLY_ADJACENT_INFECTIOUS_PROPORTION:
+				((SI) diseaseModel)
+						.setPhysicallyAdjacentInfectiousProportion(Double
+								.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SI__ROAD_NETWORK_INFECTIOUS_PROPORTION:
+				((SI) diseaseModel)
+						.setRoadNetworkInfectiousProportion(Double
+								.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SIR__IMMUNITY_LOSS_RATE:
+				((SIR) diseaseModel).setImmunityLossRate(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+			case StandardPackage.SEIR__INCUBATION_RATE:
+				((SEIR) diseaseModel).setIncubationRate(Double
+						.parseDouble(entry.getValue().getText()));
+				break;
+
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+	} // populate
+
+	/**
+	 * @return <code>true</code> if the contents are valid, <code>false</code>
+	 *         otherwise.
+	 */
+	public boolean validate() {
+		boolean retValue = super.validate();
+
+		
+
+		// Transmission Rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SI__TRANSMISSION_RATE);
+			if (text != null) {
+				// Yes
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr6"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr7"); //$NON-NLS-1$
+					} // if
+				}
+			} // if text != null
+		} // if Transmission Rate
+
+		// Non-Linearity Coefficient
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SI__NON_LINEARITY_COEFFICIENT);
+			if (text != null) {
+				// Yes
+
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr8"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr9"); //$NON-NLS-1$
+					} // if
+				}
+			} // if text != null
+		} // if Non-Linearity Coefficient
+
+		// Infectious Recovery Rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SI__RECOVERY_RATE);
+			if (text != null) {
+				// Yes
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr10"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr11"); //$NON-NLS-1$
+					} // if
+				}
+			} // if
+		} // if Infectious Recovery Rate
+
+		// Infectious Mortality Rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SI__INFECTIOUS_MORTALITY_RATE);
+			if (text != null) {
+				// Yes
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr12"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr13"); //$NON-NLS-1$
+					} // if
+				}
+			} // if
+		} // if Infectious Mortality Rate
+
+		// Immunity Loss Rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SIR__IMMUNITY_LOSS_RATE);
+			// specified?
+			if (text != null) {
+				// Yes
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr16"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr17"); //$NON-NLS-1$
+					} // if
+				}
+			} // if
+		} // if Immunity Loss Rate
+
+		// Incubation Rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.SEIR__INCUBATION_RATE);
+			if (text != null) {
+				// Yes
+
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = DiseaseWizardMessages
+							.getString("NDizWizErr18"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = DiseaseWizardMessages
+								.getString("NDizWizErr19"); //$NON-NLS-1$
+					} // if
+				}
+			} // if
+		} // if Incubation Rate
+
+		return retValue;
+	} // validate
+
+} // StandardDiseaseModelPropertyEditor
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapter.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapter.java
new file mode 100644
index 0000000..cd33fc2
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapter.java
@@ -0,0 +1,31 @@
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditor;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+
+public class StandardDiseaseModelPropertyEditorAdapter extends
+		DiseaseModelPropertyEditorAdapter {
+
+	@Override
+	public DiseaseModelPropertyEditor createDiseaseModelPropertyEditor(
+			final DiseaseModelPropertyComposite diseaseModelPropertyComposite,
+			final int style, final ModifyListener projectValidator) {
+		return new StandardDiseaseModelPropertyEditor(
+				diseaseModelPropertyComposite, style,
+				(DiseaseModel) getTarget(), projectValidator);
+	} // createDiseaseModelPropertyEditor
+
+} // StandardDiseaseModelPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..25a4c33
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardDiseaseModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.diseasemodels.standard.impl.StandardFactoryImpl;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.adapters.diseasemodelpropertyeditor.DiseaseModelPropertyEditorAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+
+public class StandardDiseaseModelPropertyEditorAdapterFactory extends
+		StandardAdapterFactory implements
+		DiseaseModelPropertyEditorAdapterFactory {
+
+	public StandardDiseaseModelPropertyEditorAdapterFactory() {
+		super();
+		DiseaseModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	@Override
+	public Adapter createStandardDiseaseModelAdapter() {
+		return new StandardDiseaseModelPropertyEditorAdapter();
+	}
+
+	public boolean isFactoryForType(Object type) {
+		return type == DiseaseModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+
+} // StandardDiseaseModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..66067e5
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/StandardPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,119 @@
+// StandardPropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.wizards;
+
+/******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+
+/**
+ * This class is used to NLS'd strings for {@link DiseaseModel} properties. 
+ */
+public class StandardPropertyStringProviderAdapterFactory extends
+		StandardAdapterFactory implements PropertyStringProviderAdapterFactory {
+
+	
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public StandardPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return  super.isFactoryForType(type) || type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createDiseaseModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new StandardPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createDiseaseModelAdapter
+	
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createInfectorAdapter()
+	 */
+	@Override
+	public Adapter createInfectorAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new StandardPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createDiseaseModelAdapter
+
+	/**
+	 * This class represents 
+	 */
+	public static class StandardPropertyStringProviderAdapter extends
+			PropertyStringProviderAdapter {
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd name of the property to display to the user
+		 */
+		public String getPropertyName(IItemPropertyDescriptor descriptor) {
+			return DiseaseWizardMessages
+					.getString(((EStructuralFeature) descriptor
+							.getFeature(null)).getName());
+		} // getPropertyName
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd tool tip text that describes the property
+		 */
+		public String getPropertyToolTip(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return DiseaseWizardMessages.getString(feature.getName()
+					+ TT_SUFFIX);
+		} // getPropertyToolTip
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd text that represents the units of the
+		 *         property
+		 */
+		public String getPropertyUnits(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return DiseaseWizardMessages.getString(feature.getName()
+					+ UNIT_SUFFIX);
+		} // getPropertyUnits
+
+	} // StandardPropertyStringProviderAdapter
+} // StandardPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/diseasewizardmessages.properties b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/diseasewizardmessages.properties
new file mode 100644
index 0000000..2a9ec96
--- /dev/null
+++ b/org.eclipse.stem.ui.diseasemodels/src/org/eclipse/stem/ui/wizards/diseasewizardmessages.properties
@@ -0,0 +1,184 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# New Disease Wizard
+
+NDiseaseWiz.wizard_title = New Disease
+NDiseaseWiz.page_title = Disease
+NDiseaseWiz.page_description = Define a new disease in a project.
+NDiseaseWiz.DC_DESCRIPTION = Disease "{0}"
+
+# New Infector Wizard
+NInfectorWiz.wizard_title = New Infection/Inoculation Point
+NInfectorWiz.page_title = Infector/Inoculator
+NInfectorWiz.page_description = Define a new infection or inoculation point in a project.
+NInfectorWiz.DC_DESCRIPTION = Infect {0} "{1}" population members with the disease "{2}" at the location "{3}" ({4}).
+NInfectorWiz.DC_DESCRIPTION2 = Inoculate {0} "{1}" percent of population against the disease "{2}" at the location "{3}" ({4}).
+NInfectorWiz.infect = Create a New Infector
+NInfectorWiz.inoculate = Create a New Inoculator
+
+NDiseaseWiz.disease_folder = Diseases
+
+PMTP_Def = *PM/TP = Population Member/Time Period
+
+populationIdentifier = Population
+populationIdentifierTT = The name of the population infected by this disease. (e.g., human)
+populationIdentifierUNIT = 
+
+physicallyAdjacentInfectiousProportion = Phys.Adj.Inf.Proportion
+physicallyAdjacentInfectiousProportionTT = Physically Adjacent Infectious Proportion referenced to 45 km range
+physicallyAdjacentInfectiousProportionUNIT = scaled by 45km / avg. linear extent [km]
+
+roadNetworkInfectiousProportion = Road.Net.Inf.Proportion
+roadNetworkInfectiousProportionTT = The Road Network Infectious Proportion
+roadNetworkInfectiousProportionUNIT = fraction per Road
+
+timePeriod = Time Period (TP)
+timePeriodTT = The time period for the rates (e.g., 86400000ms = 1 day).
+#timePeriodUNIT = Day(s)
+timePeriodUNIT = ms
+
+diseaseName = Disease Name
+diseaseNameTT = The name of the disease. (e.g., Spanish Flu)
+diseaseNameUNIT =
+
+seed = Random Seed
+seedTT = Seed for the Random Number Generator
+seedUNIT =
+
+randomGenerator = Random Generator
+randomGeneratorTT = 
+randomGeneratorUNIT = 
+
+gain = Random Noise Gain
+gainTT = Noise amplitude (should be <~ .01)
+gainUNIT = 
+
+infectiousMortality = Infectious Mortality (x)
+infectiousMortalityTT = The fraction of population members in the Infectious state that will ultimately die. (e.g., 2)
+infectiousMortalityUNIT = fraction
+
+transmissionRate = Transmission Rate (\u03b2)
+transmissionRateTT = The number of population members in the Susceptible state that become exposed per population member in the Infectious state.
+transmissionRateUNIT =  
+
+
+referencePopulationDensity = Reference Pop Density
+referencePopulationDensityTT = Pop Density where transmission rate measured
+referencePopulationDensityUNIT = PM/SQ KM
+
+nonLinearityCoefficient = Non-Linearity Coefficient
+nonLinearityCoefficientTT = In a nonlinear model, usually > 1.0 (which captures saturation of the immune system for Susceptible population members), the Infectious term is raised to this power.  
+nonLinearityCoefficientUNIT = \u2265 0.0 
+
+recoveryRate = Infectious Recovery Rate (\u03b3)
+recoveryRateTT = The rate at which population members in the Infectious state, who do not die, will recover.
+recoveryRateUNIT = PM/TP*
+
+infectiousMortalityRate = Infectious Mortality Rate (\u03bc i)
+infectiousMortalityRateTT = The rate at which population members in the Infectious state, who will eventually die, do die.
+infectiousMortalityRateUNIT = PM/TP*
+
+immunityLossRate = Immunity Loss Rate (\u03c3)
+immunityLossRateTT = That rate at which population members in the Recovered state lose their immunity and enter the Susceptible state.
+immunityLossRateUNIT = PM/TP*
+
+incubationRate = Incubation Rate (\u03c6)
+incubationRateTT = The rate at which population members in the Exposed state enter the Infectious state.
+incubationRateUNIT = PM/TP*
+
+
+relativeTolerance = Relative Tolerance
+relativeToleranceTT = The relative tolerance used by the Runge Kutta adaptive stepsize algorithm.
+relativeToleranceUNIT = 
+
+finiteDifference = Finite Difference
+finiteDifferenceTT = Use a simplified method (finite difference) solving the differential equations instead of Runge Kutta  
+finiteDifferenceUNIT = 
+
+frequencyDependent = Frequency Dependent
+frequencyDependentTT = If set, a frequency dependent disease model is used instead of a density dependent  
+frequencyDependentUNIT = 
+
+targetISOKey = Target key
+targetISOKeyTT = The target ISO key
+targetISOUNIT = 
+
+infectiousCount = Infectious count
+infectiousCountTT = Infectious count tooltip
+infectiousCountUNIT = 
+
+inoculatedPercentage = Inoculated percentage
+inoculatedPercentageTT = The inoculated percentage
+inoculatedPercentageUNIT = %
+
+NDizWizErr0=Missing Disease Name.
+NDizWizErr1=Missing Population identifier.
+NDizWizErr2=Missing Time Period.
+NDizWizErr3=The Time Period is invalid.
+NDizWizErr4=Missing Background Mortality Rate.
+NDizWizErr5=Background mortality rate is invalid.
+NDizWizErr6=Missing Transmission Rate.
+NDizWizErr7=The Transmission Rate is invalid.
+NDizWizErr8=Missing Non-Linearity Coefficient.
+NDizWizErr9=The Non-Linearity Coefficient is invalid.
+NDizWizErr10=Missing Infectious Recovery Rate.
+NDizWizErr11=The Infectious Recovery Rate is invalid.
+NDizWizErr12=Missing Infectious Mortality Rate.
+NDizWizErr13=The Infectious Mortality Rate is invalid.
+NDizWizErr16=Missing Immunity Loss Rate.
+NDizWizErr17=The Immunity Loss Rate is invalid.
+NDizWizErr18=Missing Incubation Rate.
+NDizWizErr19=The Incubation Rate Rate is invalid.
+NDizWizErr20=Directory or File does not exist.
+NDizWizErr21=Invalid Data Type.
+NDizWizErr22=Missing relative tolerance
+NDizWizErr23=Relative tolerance is less or equal to 0 or too large
+DMPC1=Disease Model Property Control
+DMPC2=Missing Disease Property Editor for "
+DDC.0=Disease Model:
+DDC.1=Underlying Mathematical Disease Model
+DDC.2=class
+DDC.3=Problem creating Disease Model instance
+NInfWizError.1=Missing the name of the disease causing the infection.
+NInfWizError.2=Missing the name of the population to infect.
+NInfWizError.3=The number of infections is missing.
+NInfWizError.4=The number of infections must be greater than zero.
+NInfWizError.5=The number of infections is invalid.
+NInfWizError.6=Missing the location specification
+NInfWizError.7=The number of infections was not a valid number
+NInfWizError.8=Percentage not Valid. Must be < 100.0%
+NInfWizDN=Disease Name:
+NInfWizDNTT=The name of the Disease to that infects (e.g., Spanish Flu).
+NInfWizPOP=Population:
+NInfWizPOPTT=The name of the population infected (e.g., human).
+NInfWizNI=Number of Infections:
+NInfWizPI=Percent to Inoculate:
+NInfWizNITT=The number of population members to be infected.
+NInfWizISOK=ISO Key:
+NInfWizCNTRY=Country:
+NInfWizL1=Level 1:
+NInfWizL2=Level 2:
+NInfWizL3=Level 3:
+
+ALG.0=Solver algorithm:
+ALG.1=Underlying differential equation solver algorithm
+ALG.2=Finite Difference
+ALG.3=Runge Kutta Adaptive Step Size
+
+fileChooserButtonText=Select File...
+dirChooserButtonText=Select Directory...
+fileChooserButtonTooltipText=A file is being used for loading data for one specific node
+dirChooserButtonTooltipText=A directory is being used for loading a collection of files (usually for more than one node)
+fileChooserDialogTitle=Select CSV File
+dirChooserDialogTitle=Select Directory
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/.classpath b/org.eclipse.stem.ui.ge/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.ge/.project b/org.eclipse.stem.ui.ge/.project
new file mode 100644
index 0000000..2b282a6
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.ge</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.ge/.settings/org.eclipse.core.resources.prefs b/org.eclipse.stem.ui.ge/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..784c07d
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Oct 16 12:56:32 PDT 2006
+eclipse.preferences.version=1
+encoding//src/org/eclipse/stem/ui/ge/views/messages.properties=8859_1
diff --git a/org.eclipse.stem.ui.ge/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.ge/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e2ba091
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Tue Sep 19 15:43:47 PDT 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=optimize out
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.ge/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.ge/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5db948a
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/META-INF/MANIFEST.MF
@@ -0,0 +1,39 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.ge;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.ui.ge.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.help.appserver;visibility:=reexport,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.data.geography
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.ui.ge;
+  uses:="org.eclipse.stem.ui.views.geographic.map,
+   org.eclipse.stem.ui.ge.kml,
+   org.osgi.framework,
+   org.eclipse.stem.ui.ge.views,
+   org.eclipse.stem.definitions.adapters.spatial.geo,
+   org.eclipse.ui.plugin,
+   org.eclipse.stem.jobs.simulation,
+   org.eclipse.stem.definitions.nodes.impl,
+   org.eclipse.stem.core.graph,
+   org.eclipse.jface.resource",
+ org.eclipse.stem.ui.ge.kml;uses:="org.w3c.dom,org.eclipse.stem.ui.ge",
+ org.eclipse.stem.ui.ge.servlet;uses:="javax.servlet.http,javax.servlet",
+ org.eclipse.stem.ui.ge.views;
+  uses:="org.eclipse.jface.dialogs,
+   org.eclipse.stem.ui.ge,
+   org.eclipse.swt.widgets,
+   org.eclipse.swt.graphics,
+   org.eclipse.jface.viewers,
+   org.eclipse.jface.preference,
+   org.eclipse.swt.layout,
+   org.eclipse.core.runtime.preferences,
+   org.eclipse.ui.part,
+   org.eclipse.stem.jobs.simulation,
+   org.eclipse.ui"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.ui.ge/WEB-INF/.cvsignore b/org.eclipse.stem.ui.ge/WEB-INF/.cvsignore
new file mode 100644
index 0000000..90b07e9
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/WEB-INF/.cvsignore
@@ -0,0 +1 @@
+classes
diff --git a/org.eclipse.stem.ui.ge/WEB-INF/start.html b/org.eclipse.stem.ui.ge/WEB-INF/start.html
new file mode 100644
index 0000000..41716cf
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/WEB-INF/start.html
@@ -0,0 +1,37 @@
+<html>
+<head>
+<title>Start STEM - GoogleEarth Display</title>
+</head>
+<body>
+<h2><center>STEM - GoogleEarth Display</center></h2>
+<hr><br>
+This will cause a request to be sent to GoogleEarth to read 
+the next KML file from the specified folder once 
+every N seconds.  If no more KML files exist, it will either
+wait or start over from the beginning.
+<hr><br>  
+<form method=POST action="/STEM/start">
+KML Folder: 
+<input type=text name=folder value="/tmp/ge"  
+       size=30 maxlength=40 > <br>
+<p>
+Options:<br>
+Wait for new files: 
+<input type=text name=wait value="y" size=1 maxlength=1>
+<p>
+
+Wait interval (seconds): 
+<input type=text name=interval value="2" size=1 maxlength=2>
+<p>
+<input type=submit value="Start" >
+</form>
+<br>
+<hr>
+<p>Specify the folder that contains the KML files generated 
+by STEM. The folder must be accessable from the Web server.
+<p>
+You must have previously installed GoogleEarth on your Windows XP system.
+ <a href="http://earth.google.com/">http://earth.google.com/</a>
+
+</body>
+</html>
diff --git a/org.eclipse.stem.ui.ge/WEB-INF/web.xml b/org.eclipse.stem.ui.ge/WEB-INF/web.xml
new file mode 100644
index 0000000..5122e1a
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/WEB-INF/web.xml
@@ -0,0 +1,63 @@
+ <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//
+DTD WebApplication 2.2//EN"
+"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
+
+
+<web-app>
+  <display-name>STEM-GoogleEarth</display-name>
+  <description>STEM-GoogleEarth Servlets</description>
+  
+  
+  <!-- Primary servlet to send KML to GE -->  
+  <servlet>
+	<servlet-name>SlideShow</servlet-name>
+	<servlet-class>org.eclipse.stem.ui.ge.servlet.SlideShowServlet</servlet-class>	
+  </servlet>
+  <!-- Servlet to send a networklink KML to GE -->
+  <servlet>
+	<servlet-name>Start</servlet-name>
+	<servlet-class>org.eclipse.stem.ui.ge.servlet.StartServlet</servlet-class>	
+  </servlet>
+  <!-- Servlet to create an image with desired text -->
+  <servlet>
+	<servlet-name>Image</servlet-name>
+	<servlet-class>org.eclipse.stem.ui.ge.servlet.ImageServlet</servlet-class>
+  </servlet>
+  <!-- Servlet to verify that the webserver is up and servlets deployed -->
+ <servlet>
+	<servlet-name>Verify</servlet-name>
+	<servlet-class>org.eclipse.stem.ui.ge.servlet.VerifyServlet</servlet-class>
+	</servlet>
+  <!-- Servlet to handle GE BBOX feedback -->
+  <servlet>  
+   <servlet-name>BBox</servlet-name>
+	<servlet-class>org.eclipse.stem.ui.ge.servlet.BBoxServlet</servlet-class>	
+  </servlet>
+  
+  <!-- servlet instances must go before all of the servlet=mapping -->
+  <servlet-mapping>
+      <servlet-name>SlideShow</servlet-name>
+      <url-pattern>/slideshow</url-pattern>
+  </servlet-mapping>  
+    
+  <servlet-mapping>
+      <servlet-name>Start</servlet-name>
+      <url-pattern>/start</url-pattern>
+  </servlet-mapping>  
+  
+  <servlet-mapping>
+      <servlet-name>Image</servlet-name>
+      <url-pattern>/image</url-pattern>
+  </servlet-mapping>  
+  
+  <servlet-mapping>
+      <servlet-name>Verify</servlet-name>
+      <url-pattern>/verify</url-pattern>
+  </servlet-mapping>  
+  
+  <servlet-mapping>
+      <servlet-name>BBox</servlet-name>
+      <url-pattern>/bbox</url-pattern>
+  </servlet-mapping>
+  
+</web-app>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/about.html b/org.eclipse.stem.ui.ge/about.html
new file mode 100644
index 0000000..4602330
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 2, 2006</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/build.properties b/org.eclipse.stem.ui.ge/build.properties
new file mode 100644
index 0000000..3d5bae6
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/build.properties
@@ -0,0 +1,20 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/,\
+               WEB-INF/,\
+               extlib/,\
+               plugin.properties,\
+               epl-v10.html,\
+               notice.html
+jars.compile.order = .,\
+                     extlib/servlet-api.jar
+src.includes = icons/,\
+               doc/,\
+               extlib/
+jars.extra.classpath = extlib/servlet-api.jar
+
+               
+
diff --git a/org.eclipse.stem.ui.ge/doc/example.kml b/org.eclipse.stem.ui.ge/doc/example.kml
new file mode 100644
index 0000000..6393722
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/doc/example.kml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://earth.google.com/kml/2.0">
+<Document>
+<Style id="Style0">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>0</fill>
+</PolyStyle>
+</Style>
+<Style id="Style1">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>1</fill>
+<color>80000033</color>
+</PolyStyle>
+</Style>
+<Style id="Style2">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>1</fill>
+<color>80000066</color>
+</PolyStyle>
+</Style>
+<Style id="Style3">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>1</fill>
+<color>80000099</color>
+</PolyStyle>
+</Style>
+<Style id="Style4">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>1</fill>
+<color>800000cc</color>
+</PolyStyle>
+</Style>
+<Style id="Style5">
+<LineStyle>
+<width>1.0</width>
+</LineStyle>
+<PolyStyle>
+<fill>1</fill>
+<color>c00000ff</color>
+</PolyStyle>
+</Style>
+<Placemark>
+<description>STEM map</description>
+<name>STEM0</name>
+<styleUrl>#Style0</styleUrl>
+<MultiGeometry/>
+</Placemark>
+<Placemark>
+<description>STEM map</description>
+<name>STEM1</name>
+<styleUrl>#Style1</styleUrl>
+<MultiGeometry>
+<Polygon>
+<name>Norfolk County</name>
+<outerBoundaryIs>
+<LinearRing>
+<coordinates>-71.381301,41.984998,25 -71.326999,41.999698,25 -71.283398,42.016199,25 -71.262297,42.024399,25 -71.260797,42.024899,25 -71.260797,42.024899,25 -71.255897,42.026899,25 -71.255611,42.027021,25 -71.255294,42.027157,25 -71.254497,42.027499,25 -71.254497,42.027499,25 -71.240236,42.033418,25 -71.237569,42.034503,25 -71.23684,42.034799,25 -71.235566,42.035318,25 -71.235566,42.035318,25 -71.190085,42.053126,25 -71.138181,42.073245,25 -71.092892,42.090599,25 -71.080192,42.095699,25 -71.080192,42.095699,25 -71.067691,42.101199,25 -71.064291,42.102499,25 -71.061991,42.103399,25 -71.058791,42.104599,25 -71.058791,42.104599,25 -70.95439,42.145801,25 -70.931015,42.246981,25 -70.914091,42.2888,25 -70.960192,42.299498,25 -70.960192,42.299498,25 -71.009793,42.305198,25 -71.037894,42.284898,25 -71.042794,42.276998,25 -71.048794,42.277698,25 -71.048794,42.277698,25 -71.052994,42.277198,25 -71.093795,42.266898,25 -71.145354,42.249599,25 -71.191198,42.282697,25 -71.191198,42.282697,25 -71.194198,42.287997,25 -71.196198,42.286097,25 -71.208098,42.297097,25 -71.249101,42.323498,25 -71.249101,42.323498,25 -71.304401,42.319396,25 -71.305902,42.262498,25 -71.375303,42.193735,25 -71.477879,42.15669,25 -71.477879,42.15669,25 -71.477896,42.15391,25 -71.477925,42.149435,25 -71.477941,42.146881,25 -71.477894,42.133442,25 -71.477894,42.133442,25 -71.477963,42.131864,25 -71.495411,42.121401,25 -71.498206,42.064697,25 -71.498005,42.017198,25 -71.498005,42.017198,25 -71.441303,42.018098,25 -71.387301,42.018798,25 -71.381401,42.018798,25 -71.381301,41.984998,25 -71.106796,42.348997,25 -71.106696,42.349297,25 -71.106596,42.349697,25 -71.106896,42.349797,25 -71.109623,42.350084,25 -71.109623,42.350084,25 -71.110696,42.350197,25 -71.110696,42.350197,25 -71.111096,42.350197,25 -71.111228,42.350263,25 -71.111296,42.350297,25 -71.111296,42.350297,25 -71.114096,42.350497,25 -71.116096,42.350897,25 -71.118596,42.351197,25 -71.156997,42.330097,25 -71.156997,42.330097,25 -71.162197,42.326497,25 -71.162597,42.326097,25 -71.163497,42.325497,25 -71.164697,42.303697,25 -71.164697,42.303697,25 -71.114796,42.328397,25 -71.106896,42.348497,25 -71.106896,42.348797,25 -71.106796,42.348997,25 -70.67569,42.375098,25 -70.749487,42.295362,25 -70.832911,42.205932,25 -70.844798,42.259782,25 -70.729212,42.373848,25 -70.729212,42.373848,25 -70.67569,42.375098,25 </coordinates>
+</LinearRing>
+</outerBoundaryIs>
+</Polygon>
+<Polygon>
+<name>Plymouth County</name>
+<outerBoundaryIs>
+<LinearRing>
+<coordinates>-70.729212,42.373848,25 -70.749487,42.373349,25 -70.851191,42.372499,25 -70.905692,42.316999,25 -70.960192,42.299498,25 -70.960192,42.299498,25 -70.914091,42.2888,25 -70.931015,42.246981,25 -70.95439,42.145801,25 -71.058791,42.104599,25 -71.058791,42.104599,25 -71.061991,42.103399,25 -71.064291,42.102499,25 -71.067691,42.101199,25 -71.080192,42.095699,25 -71.080192,42.095699,25 -71.06769,42.0411,25 -71.055489,41.9855,25 -71.042688,41.9594,25 -71.034788,41.9546,25 -71.034788,41.9546,25 -71.026188,41.9494,25 -71.024788,41.9486,25 -71.024788,41.9486,25 -71.023887,41.948,25 -71.023887,41.948,25 -71.021587,41.9465,25 -71.021587,41.9465,25 -71.019787,41.9453,25 -71.019787,41.9453,25 -71.003887,41.933101,25 -70.999987,41.929601,25 -70.999948,41.929562,25 -70.996654,41.923973,25 -70.996654,41.923973,25 -70.99651,41.921765,25 -70.994576,41.906667,25 -70.973629,41.861397,25 -70.97627,41.859077,25 -70.97627,41.859077,25 -71.017886,41.793462,25 -70.91462,41.77727,25 -70.87081,41.715895,25 -70.851945,41.664264,25 -70.851945,41.664264,25 -70.829508,41.612238,25 -70.813274,41.60796,25 -70.7525,41.565898,25 -70.752424,41.565851,25 -70.752424,41.565851,25 -70.709172,41.625106,25 -70.652915,41.709103,25 -70.632532,41.76284,25 -70.591945,41.778203,25 -70.591945,41.778203,25 -70.499473,41.844117,25 -70.355005,42.000103,25 -70.332369,42.070625,25 -70.322522,42.117915,25 -70.322522,42.117915,25 -70.374474,42.12155,25 -70.624481,42.157248,25 -70.676057,42.250101,25 -70.658723,42.375098,25 -70.658723,42.375098,25 -70.67569,42.375098,25 -70.960192,42.299498,25 -70.905692,42.316999,25 -70.851191,42.372499,25 -70.749487,42.373349,25 -70.729212,42.373848,25 -70.729212,42.373848,25 -70.844798,42.259782,25 -70.832911,42.205932,25 -70.749487,42.295362,25 -70.67569,42.375098,25 -70.960192,42.299498,25 -70.905692,42.316999,25 -70.851191,42.372499,25 -70.749487,42.373349,25 -70.729212,42.373848,25 -70.729212,42.373848,25 -70.67569,42.375098,25 -70.67569,42.375098,25 -70.749487,42.295362,25 -70.832911,42.205932,25 -70.844798,42.259782,25 -70.729212,42.373848,25 -70.729212,42.373848,25 -70.67569,42.375098,25 -70.729212,42.373848,25 -70.844798,42.259782,25 -70.832911,42.205932,25 -70.749487,42.295362,25 -70.67569,42.375098,25 -70.67569,42.375098,25 -70.658723,42.375098,25 -70.729212,42.373848,25 -70.67569,42.375098,25 -70.67569,42.375098,25 -70.658723,42.375098,25 </coordinates>
+</LinearRing>
+</outerBoundaryIs>
+</Polygon>
+<Polygon>
+<name>Middlesex County</name>
+<outerBoundaryIs>
+<LinearRing>
+<coordinates>-71.255954,42.736102,25 -71.241937,42.685875,25 -71.239076,42.649015,25 -71.235803,42.647391,25 -71.228902,42.643991,25 -71.228902,42.643991,25 -71.183801,42.622392,25 -71.182701,42.621792,25 -71.182538,42.621714,25 -71.175601,42.618392,25 -71.175601,42.618392,25 -71.174201,42.617692,25 -71.171401,42.616192,25 -71.172901,42.614692,25 -71.174381,42.61478,25 -71.174381,42.61478,25 -71.175005,42.614956,25 -71.178602,42.606497,25 -71.177201,42.605692,25 -71.170301,42.601592,25 -71.170301,42.601592,25 -71.165017,42.597965,25 -71.154336,42.615277,25 -71.13529,42.599061,25 -71.131507,42.599372,25 -71.131507,42.599372,25 -71.075961,42.604092,25 -71.071035,42.555714,25 -71.070386,42.52696,25 -71.069849,42.526504,25 -71.069849,42.526504,25 -71.066798,42.524595,25 -71.065898,42.524395,25 -71.065235,42.524395,25 -71.062098,42.524395,25 -71.062098,42.524395,25 -71.055497,42.524294,25 -71.044698,42.525595,25 -71.041197,42.525895,25 -71.037397,42.512796,25 -71.037397,42.512796,25 -71.036797,42.511596,25 -71.043996,42.500695,25 -71.042096,42.497995,25 -71.025295,42.444896,25 -71.025295,42.444896,25 -71.024695,42.443796,25 -71.023295,42.442096,25 -71.030796,42.418697,25 -71.077196,42.386296,25 -71.077196,42.386296,25 -71.077996,42.380597,25 -71.077596,42.380597,25 -71.077596,42.380497,25 -71.077296,42.380497,25 -71.077296,42.380497,25 -71.076396,42.380297,25 -71.074397,42.377298,25 -71.074396,42.377097,25 -71.074196,42.376397,25 -71.074196,42.376397,25 -71.116929,42.358716,25 -71.167998,42.360196,25 -71.169698,42.358396,25 -71.169698,42.358096,25 -71.169698,42.358096,25 -71.169999,42.357397,25 -71.171198,42.356396,25 -71.172798,42.354696,25 -71.156997,42.330097,25 -71.156997,42.330097,25 -71.162197,42.326497,25 -71.162597,42.326097,25 -71.163497,42.325497,25 -71.164697,42.303697,25 -71.164697,42.303697,25 -71.164997,42.303297,25 -71.165997,42.302497,25 -71.166797,42.302097,25 -71.191198,42.282697,25 -71.191198,42.282697,25 -71.194198,42.287997,25 -71.196198,42.286097,25 -71.208098,42.297097,25 -71.249101,42.323498,25 -71.249101,42.323498,25 -71.304401,42.319396,25 -71.305902,42.262498,25 -71.375303,42.193735,25 -71.477879,42.15669,25 -71.477879,42.15669,25 -71.477859,42.158444,25 -71.479635,42.165794,25 -71.502418,42.191289,25 -71.5337,42.189215,25 -71.5337,42.189215,25 -71.551668,42.183887,25 -71.556836,42.191871,25 -71.572789,42.192239,25 -71.59343,42.243134,25 -71.59343,42.243134,25 -71.571893,42.26451,25 -71.571653,42.264558,25 -71.569269,42.265374,25 -71.564917,42.266894,25 -71.564917,42.266894,25 -71.563573,42.267262,25 -71.563573,42.267262,25 -71.563029,42.267502,25 -71.563029,42.267502,25 -71.536788,42.264558,25 -71.53186,42.266158,25 -71.525402,42.265955,25 -71.52216,42.266342,25 -71.52216,42.266342,25 -71.501953,42.279864,25 -71.50096,42.281758,25 -71.499954,42.283604,25 -71.499327,42.284922,25 -71.499327,42.284922,25 -71.498798,42.286034,25 -71.496833,42.289841,25 -71.518287,42.330143,25 -71.57071,42.319678,25 -71.57071,42.319678,25 -71.578006,42.31555,25 -71.578518,42.315246,25 -71.58207,42.313166,25 -71.623175,42.347309,25 -71.623175,42.347309,25 -71.624199,42.348189,25 -71.624855,42.348749,25 -71.625639,42.349485,25 -71.598295,42.375997,25 -71.598295,42.375997,25 -71.593846,42.378685,25 -71.589782,42.381261,25 -71.555734,42.423116,25 -71.555847,42.472318,25 -71.555847,42.472318,25 -71.556619,42.472685,25 -71.556619,42.472685,25 -71.558077,42.473379,25 -71.560056,42.474381,25 -71.550768,42.489085,25 -71.533852,42.527688,25 -71.533852,42.527688,25 -71.635812,42.524091,25 -71.694015,42.620289,25 -71.830118,42.637588,25 -71.898716,42.711418,25 -71.898716,42.711418,25 -71.699216,42.706288,25 -71.48791,42.701389,25 -71.383667,42.698809,25 -71.255954,42.736102,25 </coordinates>
+</LinearRing>
+</outerBoundaryIs>
+</Polygon>
+<Polygon>
+<name>Essex County</name>
+<outerBoundaryIs>
+<LinearRing>
+<coordinates>-71.228902,42.643991,25 -71.183801,42.622392,25 -71.182701,42.621792,25 -71.182538,42.621714,25 -71.175601,42.618392,25 -71.175601,42.618392,25 -71.174201,42.617692,25 -71.171401,42.616192,25 -71.172901,42.614692,25 -71.174381,42.61478,25 -71.174381,42.61478,25 -71.175005,42.614956,25 -71.178602,42.606497,25 -71.177201,42.605692,25 -71.170301,42.601592,25 -71.170301,42.601592,25 -71.165017,42.597965,25 -71.154336,42.615277,25 -71.13529,42.599061,25 -71.131507,42.599372,25 -71.131507,42.599372,25 -71.075961,42.604092,25 -71.071035,42.555714,25 -71.070386,42.52696,25 -71.069849,42.526504,25 -71.069849,42.526504,25 -71.066798,42.524595,25 -71.065898,42.524395,25 -71.065235,42.524395,25 -71.062098,42.524395,25 -71.062098,42.524395,25 -71.055497,42.524294,25 -71.044698,42.525595,25 -71.041197,42.525895,25 -71.037397,42.512796,25 -71.037397,42.512796,25 -71.036797,42.511596,25 -71.043996,42.500695,25 -71.042096,42.497995,25 -71.025295,42.444896,25 -71.025295,42.444896,25 -70.959494,42.407498,25 -70.851436,42.393209,25 -70.749488,42.40082,25 -70.648072,42.405628,25 -70.648072,42.405628,25 -70.617339,42.500096,25 -70.719272,42.750093,25 -70.735005,42.874685,25 -70.735005,42.874685,25 -70.747266,42.874698,25 -70.792495,42.873291,25 -70.832844,42.867788,25 -70.883698,42.88129,25 -70.883698,42.88129,25 -70.947999,42.876689,25 -71.047501,42.844089,25 -71.143503,42.817689,25 -71.208604,42.74339,25 -71.208604,42.74339,25 -71.210204,42.74369,25 -71.216204,42.744989,25 -71.226501,42.746361,25 -71.245504,42.742589,25 -71.245504,42.742589,25 -71.248704,42.740589,25 -71.25152,42.739129,25 -71.255605,42.736389,25 -71.255954,42.736102,25 -71.255954,42.736102,25 -71.241937,42.685875,25 -71.239076,42.649015,25 -71.235803,42.647391,25 -71.228902,42.643991,25 </coordinates>
+</LinearRing>
+</outerBoundaryIs>
+</Polygon>
+</MultiGeometry>
+</Placemark>
+<Placemark>
+<description>STEM map</description>
+<name>STEM2</name>
+<styleUrl>#Style2</styleUrl>
+<MultiGeometry/>
+</Placemark>
+<Placemark>
+<description>STEM map</description>
+<name>STEM3</name>
+<styleUrl>#Style3</styleUrl>
+<MultiGeometry>
+<Polygon>
+<name>Suffolk County</name>
+<outerBoundaryIs>
+<LinearRing>
+<coordinates>-71.048794,42.277698,25 -71.042794,42.276998,25 -71.037894,42.284898,25 -71.009793,42.305198,25 -70.960192,42.299498,25 -70.960192,42.299498,25 -70.905692,42.316999,25 -70.851191,42.372499,25 -70.749487,42.373349,25 -70.729212,42.373848,25 -70.729212,42.373848,25 -70.67569,42.375098,25 -70.67569,42.375098,25 -70.658723,42.375098,25 -70.658723,42.375098,25 -70.648072,42.405628,25 -70.648072,42.405628,25 -70.749488,42.40082,25 -70.851436,42.393209,25 -70.959494,42.407498,25 -71.025295,42.444896,25 -71.025295,42.444896,25 -71.024695,42.443796,25 -71.023295,42.442096,25 -71.030796,42.418697,25 -71.077196,42.386296,25 -71.077196,42.386296,25 -71.077996,42.380597,25 -71.077596,42.380597,25 -71.077596,42.380497,25 -71.077296,42.380497,25 -71.077296,42.380497,25 -71.076396,42.380297,25 -71.074397,42.377298,25 -71.074396,42.377097,25 -71.074196,42.376397,25 -71.074196,42.376397,25 -71.116929,42.358716,25 -71.167998,42.360196,25 -71.169698,42.358396,25 -71.169698,42.358096,25 -71.169698,42.358096,25 -71.169999,42.357397,25 -71.171198,42.356396,25 -71.172798,42.354696,25 -71.156997,42.330097,25 -71.156997,42.330097,25 -71.118596,42.351197,25 -71.116096,42.350897,25 -71.114096,42.350497,25 -71.111296,42.350297,25 -71.111296,42.350297,25 -71.111228,42.350263,25 -71.111096,42.350197,25 -71.110696,42.350197,25 -71.110696,42.350197,25 -71.109623,42.350084,25 -71.109623,42.350084,25 -71.106896,42.349797,25 -71.106596,42.349697,25 -71.106696,42.349297,25 -71.106796,42.348997,25 -71.106796,42.348997,25 -71.106896,42.348797,25 -71.106896,42.348497,25 -71.114796,42.328397,25 -71.164697,42.303697,25 -71.164697,42.303697,25 -71.164997,42.303297,25 -71.165997,42.302497,25 -71.166797,42.302097,25 -71.191198,42.282697,25 -71.191198,42.282697,25 -71.145354,42.249599,25 -71.093795,42.266898,25 -71.052994,42.277198,25 -71.048794,42.277698,25 </coordinates>
+</LinearRing>
+</outerBoundaryIs>
+</Polygon>
+</MultiGeometry>
+</Placemark>
+<Placemark>
+<description>STEM map</description>
+<name>STEM4</name>
+<styleUrl>#Style4</styleUrl>
+<MultiGeometry/>
+</Placemark>
+<Placemark>
+<description>STEM map</description>
+<name>STEM5</name>
+<styleUrl>#Style5</styleUrl>
+<MultiGeometry/>
+</Placemark>
+</Document>
+</kml>
diff --git a/org.eclipse.stem.ui.ge/doc/readme.txt b/org.eclipse.stem.ui.ge/doc/readme.txt
new file mode 100644
index 0000000..997ba96
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/doc/readme.txt
@@ -0,0 +1,118 @@
+Notes about the STEM - GoogleEarth interface
+  org.eclipse.stem.ge
+  
+This file has notes that document interesting things relating to the STEM GoogleEarth interface code that should be preserved for future generation.
+-----------------------------------------------------------
+ Creating ANT build.xml  (in progress)
+   rightclick plugin.xml ->PDE Tools -> Create Ant Build file
+
+Change 
+    <property name="javacSource" value="1.5"/>
+	<property name="javacTarget" value="1.5"/>
+	
+ cd  C:\stem\org.eclipse.stem.ge
+ ant zip.plugin 	
+ 
+ Note the above is incomplete....
+----------------------------------------------------------- 
+
+Running the GoogleEarth interface under STEM 
+ 
+- Install and test GoogleEarth 
+- update to the latest code and ensure it is refreshed and rebuilt
+- Update the launch script to specify VM arguments   -Xmx512M 
+- From Eclipse, Run Stem using stem.product
+  
+  In the new STEM workspace window   
+   - Windows->Open Perspective->Simulation 
+   - Windows->Show View->Other->Stem->GoogleEarth 
+   - Windows->Preferences->GoogleEarth
+      Specify any preferences that you want to use
+   - Scenarios: select STEM->Spanish Flu
+   - From the toolbar STEM icons, select "Advance"
+   - Select GoogleEarth View window
+   - Select the Simulation then right click for popup menu
+   - select DisplayMap to send a map to GoogleEarth 
+    
+  
+   
+--------------------------------------------------------------------
+
+Using SWT Program.launch(fn) 
+
+This uses  the SWT Program utility class to launch the KML file to the GoogleEarth application.  
+For some reason, although it compiles with no problem, at runtime it fails because it needs platform dependent JNI methods.  
+On Windows it needs the dll file  
+   swt-win32-3232.dll
+   
+After many fruitless attempts to get this to work I used the following hack to bypass the problem.
+   Go to:
+    http://download.eclipse.org/eclipse/downloads/drops/R-3.2-200606291905/index.php
+   Download:    
+    swt-3.2-win32-win32-x86.zip
+   extract  
+    swt-win32-3232.dll 
+   put it in the root directory of the ge project. 
+   It is then checked into SVN
+   
+This seems to work but would have to be slightly redone to support other platforms.
+
+If someone figures out a better way to handle crossplatform support for SWT, please document it here.
+ 
+ -------------------------------------------------------------------
+ Embeded Web Server
+ -------------------------------------------------------------------
+ See the following URL for information about using the web server 
+ that is embeded in Eclipse.
+   http://www.eclipsezone.com/eclipse/forums/t62852.html?start=0
+ 
+ We use this and it is started in StemKml.java
+ 
+ There are special consideration to make the embedded web server run
+ in a standalone Eclipse RCP.  The basic problem is that the embedded Tomcat server 
+ cannot read from jar files and the default when exporting plugins from
+ Eclipse is to package it in a jar.  
+ A hack to bypass this is to do the following:
+   - Modify build.properties so that "bin/" is included in
+     the bin.includes statement.
+   - Modify manifest.mf to include
+      Bundle-ClassPath: bin/
+Then run the export wizard from org.eclipse.stem.ui/stem.product
+
+ There must be better ways to do this but at least 
+ in 3.2.1, the above works.
+      
+ -------------------------------------------------------------------
+ example.kml
+ ------------------------------------------------------------------- 
+ 
+ File example.kml is an example of the KML that is generated by the Stem to GoogleEarth interface (actually this was from Stem 1 but should be the same of similar for Stem 2)  
+ 
+ --------------------------------------------------------------------    
+ 
+ Running on 2 processors with network attached files
+ 
+   System1 
+      STEM 
+        Folder  netlink \\system1\c.tmp\ge
+           
+           
+   System2 
+         Folder c:/tmp/ge 
+           Share c:\tmp as c.tmp
+        Tomcat 
+           
+        GoogleEarth
+        
+        http://system1:8080/slideshow.html 
+        
+        cd %CATALINA_HOME%
+        bin\tomcat5.exe
+        
+    An XP service cannot read network files so you have 
+    to start Tomcat as a normal application if Tomcat is on the system
+    that reads the network file.  Probably best thing to do is 
+    run Tomcat and GE on the system that has the native files and let 
+    STEM write to the network attached directory.
+ 
+ ----------------------------------------------------------------------                  
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/doc/readme_servlet.txt b/org.eclipse.stem.ui.ge/doc/readme_servlet.txt
new file mode 100644
index 0000000..afcb137
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/doc/readme_servlet.txt
@@ -0,0 +1,165 @@
+org.eclipse.stem.ge.servlet
+
+Overview:
+
+This plugin provides a servlet based interface for displaying the 
+STEM map as an overlay on GoogleEarth.
+
+There are 2 parts.  Using the STEM GoogleEarth interface View, 
+STEM can be instructed on each cycle (or on every Nth 
+cycle) to write the map data to a specified directory as a KML file.
+
+As STEM is producing KML files or as a later step, one starts the 
+process to display the STEM results on GoogleEarth.
+The Servlet interface includes a HTML file and StartServlet that will
+send a NetworkLink file to GoogleEarth that tells it to every N seconds
+to issue a request to SlideShowServlet to get the KML file for the next cycle.
+
+SlideShowServlet.java
+  This is a Java Servlet to interface to GoogleEarth 
+  to display KML files generated by STEM.
+
+StartServlet.java 
+  This is a Servlet that based on user input will send a 
+  NetworkLink.kml file to GoogleEarth.
+
+ImageServlet.java 
+  This is a Servlet that based on user input will create an image 
+  file that can be sent to GoogleEarth.  The image will have 
+  whatever text is specified.
+  This is used to display text messages on the GoogleEarth screen.  
+ 
+VerifyServlet.java 
+  This is a servlet that is used by VerifyClient to provide 
+  a way for the client to verify that the web server is active 
+  and that the servlet interface is deployed correctly.
+  
+VerifyClient 
+  This utility class holds a verify method that will try to 
+  access the VerifyServlet to check that it is up and running.
+     String url = "http://localhost:8080/SlideShow/verify"
+     VerifyClient vc = new VerifyClient();
+     boolean ok = vc.verify(url)
+     if (! ok) {
+        System.out.println(vc.getError());
+        return;
+     }  
+     
+     
+        
+The installation of this interface involves the following:
+  - Installing the TomCat web server.
+  - Installing the servlets on Tomcat
+  - Installing Google Earth
+  - Installing and running STEM
+  - Invoking the SlideShow.html 
+  
+These steps are described in detail below.
+
+ 
+
+  To install this servlet so it will run on your own Windows PC,
+  do the following with:
+   <path>=your stem workspace folder.
+   <project>=<path>.org.eclipse.stem.ge.servlet
+   This is for Windows systems only at the current time.
+   Linux instatallation will be documented when it is available.
+  
+  - Checkout the org.eclipse.stem projects from
+      svn.opensource.ibm.com/svn/stem/trunk
+      
+  - Install Tomcat (version 5) on your Windows PC.
+      http://tomcat.apache.org
+      
+     - download current 5.5 executable and invoke it.
+     - Take the defaults and assign a user and password for admin.
+     - After it starts, click on the Tomcat tray icon and
+       specify "start service" 
+     - From your browser goto http://localhost:8080 
+       and select "Tomcat Manager" from Administration.
+  -  Alternative is to use the Tomcat server embedded in Eclipse.
+  
+     The preferences for gE have a checkbox that can be set
+     to use the embedded server.  This works fine for running 
+     GoogleEarth and STEM together but can not be used for 
+     offline display of STEM data.
+              
+  -  Run ant to generate a WAR file.
+       cd <project>
+       ant war
+     This builds the war file in 
+       <project>/WEB-INF/SlideShow.war
+       
+  -  Use the Tomcat Manager to deploy SlideShow.war
+      URL http://localhost:8080/manager/html/upload  
+       - click "undeploy" for existing slideshow (if present)
+       - Under "WAR file to deploy"
+         - browse to <project>/build/war/SlideShow.war
+         - click "deploy"
+  
+  - To verify the installation, enter the following URL in your browser"
+       http://localhost:8080/SlideShow/image
+    You should get a small image with text "default" displayed in your browser 
+    
+  -  Copy <project>slideshow.html to <Tomcat>\webapps\ROOT     
+         
+       
+  To run this servlet you need to do the following:
+  
+  - Install GoogleEarth   http://earth.google.com/ 
+     Insure that GoogleEarth runs on your system.  There may be issues with 
+     firewalls or 3D video drivers that will prevent GoogleEarth from
+     running.  The current version of GESlideShow runs with 
+     GoogleEarth V4 beta. 
+  
+  - To run the existing STEM demo on HII003.almaden.ibm.com, 
+    select the following url.
+     http://hii003.almaden.ibm.com:8080/slideshow.html
+     Then press "start"
+     This will run a previously generated script of the spread of 
+     a flu virus in the United States showing "Infectious" individuals.
+     
+  
+  -  To create a new set of STEM/KML file you must run STEM and 
+     use the GoogleEarth Viewer to enable the logging of KML files 
+     and then run a simulation.  This will be documented elsewhere.  
+     
+      
+  -   Use the following URL to run the above slideshow eiter concurrently 
+      or afterwards.
+       http://localhost:8080/slideshow.html
+       When prompted: specify the folder that you created above.
+     
+    - An alternative is to update the <project>slideshow.kml file with  
+      the folder that you created above.
+       http://localhost:8080/SlideShow/slideshow?folder=e:/tmp/ge
+    
+      and then launch the slideshow.kml file by doubleclicking 
+      on the file in FileExplorer.
+  
+  
+  At this point, the slideshow.kml file will be read by GoogleEarth(GE) 
+  and it will tell GE that it should read KML files from the specified 
+  URL at the specified interval.  
+  The URL will invoke the doGet() method of SlideShowServlet which 
+  will send the KML files from the specified folder one by one 
+  based on a counter keyed by the id= parameter.  
+  
+  If the "wait" option is specified as "y" then when the last KML file 
+  is read, rather than starting over, it will wait for more files to 
+  appear in the folder and show each new file as it appears.
+  
+  The above instruction assume that you are doing everything on your local system. 
+  Obviously, this could all run on another system by replacing the use of 
+  localhost with the external system name. However the folder containing 
+  the KML files must be accessable from the webserver perhaps via network
+  sharing.  However there is a restriction.  With XP, a system service cannot
+  network attached files so you need to run Tomcat as an application and not 
+  as a service.
+   
+Please let me know if any of the above instructions are wrong or confusing!
+
+John 
+
+jthomas@seabrightbeach.com
+   
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/doc/slideshow.kml b/org.eclipse.stem.ui.ge/doc/slideshow.kml
new file mode 100644
index 0000000..ae0d996
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/doc/slideshow.kml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://earth.google.com/kml/2.0">
+<Folder>
+   <description>SlideShow NetworkLink</description>
+   <name>Network Links</name>
+<NetworkLink>
+<Url>
+<href>http://localhost:8080/SlideShow/slideshow?id=jthomas2&amp;folder=c:/tmp/ge1</href>
+<refreshInterval>2</refreshInterval>
+<refreshMode>onInterval</refreshMode>
+</Url>
+<flyToView>0</flyToView>
+</NetworkLink>
+</Folder>
+</kml>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/epl-v10.html b/org.eclipse.stem.ui.ge/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/extlib/servlet-api.jar b/org.eclipse.stem.ui.ge/extlib/servlet-api.jar
new file mode 100644
index 0000000..93186f6
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/extlib/servlet-api.jar
Binary files differ
diff --git a/org.eclipse.stem.ui.ge/icons/ge.gif b/org.eclipse.stem.ui.ge/icons/ge.gif
new file mode 100644
index 0000000..141fa51
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/icons/ge.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.ge/notice.html b/org.eclipse.stem.ui.ge/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.ui.ge/plugin.properties b/org.eclipse.stem.ui.ge/plugin.properties
new file mode 100644
index 0000000..e122758
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/plugin.properties
@@ -0,0 +1,19 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+pluginName = STEM Google Earth UI
+providerName = Eclipse.org
+
+gePPage = Google Earth
+geAdvPPage = Advanced
+geUnusedPPage = GoogleEarthInterface
+geView = GoogleEarth_View
diff --git a/org.eclipse.stem.ui.ge/plugin.xml b/org.eclipse.stem.ui.ge/plugin.xml
new file mode 100644
index 0000000..707675d
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/plugin.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            name="%geView"
+            icon="icons/ge.gif"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.ge.views.GEView"
+            id="org.eclipse.stem.ui.views.ge">
+      </view>
+      
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.stem.ui.preferences.VisualizationPreferencePage"
+            class="org.eclipse.stem.ui.ge.views.GEPreferencePage"
+            id="org.eclipse.stem.ui.ge.views.GEPreferencePage"
+            name="%gePPage"/>
+      <page
+            category="org.eclipse.stem.ui.ge.views.GEPreferencePage"
+            class="org.eclipse.stem.ui.ge.views.GEAdvancedPreferencePage"
+            id="org.eclipse.stem.ui.ge.views.GEAdvancedPreferencePage"
+            name="%geAdvPPage"/>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer class="org.eclipse.stem.ui.ge.views.PreferenceInitializer"/>
+   </extension>
+   <extension
+         id="org.eclipse.stem.ge"
+         name="%geUnusedPPage"
+         point="org.eclipse.ui.preferencePages">
+   </extension>
+   
+
+</plugin>
diff --git a/org.eclipse.stem.ui.ge/servlet.xml b/org.eclipse.stem.ui.ge/servlet.xml
new file mode 100644
index 0000000..8306924
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/servlet.xml
@@ -0,0 +1,76 @@
+<!-- ******************************************************* -->
+<!-- Ant build script to build the GE servlet war file       -->
+<!-- ******************************************************* -->
+<project name="STEM" default="war" >
+
+	
+	<!-- Configure the directory into which the web application is built -->
+	<property name="build.dir"    value="${basedir}"/>
+        <property name="war.name"    value="STEM"/>
+        <property name="lib.servlet"    value="extlib/servlet-api.jar"/>
+	<!-- Get the environment variables -->
+		<property environment="env" />
+
+		<property name="catalina" value="${env.CATALINA_HOME}" />
+
+
+ 	
+	<!-- Executable Targets -->
+		
+	<target name="clean" description="removes previous build">		
+		<delete dir="${basedir}/WEB-INF/classes/**/*" />	
+	</target>
+
+	<target name="init" description="makes build structure" >		
+		<mkdir dir="${basedir}/WEB-INF/classes" />
+	</target>
+
+	<target name="compile" depends="clean,init" description="Compile web application">
+		<!-- ... 
+			compile the servlets into WEB-INF/classes
+			            ... -->
+		
+		<javac debug="on" srcdir="src/org/eclipse/stem/ui/ge" 
+			includes="servlet/*.java"
+			excludes="servlet/VerifyClient.java"
+			destdir="${build.dir}/WEB-INF/classes" >
+			<classpath refid="classpath" />			  	     
+		</javac>
+		
+	</target>
+	
+	<target name="html" description="Copy start.html to server">		
+		<copy todir="${catalina}/webapps/STEM/" overwrite="true">
+					<fileset dir="${basedir}/WEB-INF/">
+						<include name="*.html" />
+					</fileset>
+		</copy>
+	</target>
+	
+	
+	
+	<!-- 
+		* Build the war file  STEM.war
+		*   contains
+		*     
+		*     WEB-INF/
+		*       web.xml		*       
+		*       /classes/... 
+		*       lib/servlet-api.jar
+		* 
+		-->
+	<target name="war" depends="compile" description="creates the war file">
+
+		<path id="classpath">
+			<path location="${lib.servlet}" />
+		</path>
+
+				
+		<war destfile="${basedir}/WEB-INF/${war.name}.war" webxml="${basedir}/WEB-INF/web.xml">
+			<classes dir="${basedir}/WEB-INF/classes"  />           
+			<lib dir="${basedir}/extlib/" includes="servlet-api.jar" />
+		</war>
+	</target>
+
+
+</project>
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Activator.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Activator.java
new file mode 100644
index 0000000..1b8dbbb
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Activator.java
@@ -0,0 +1,111 @@
+package org.eclipse.stem.ui.ge;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */ 
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui.ge";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	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;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+	
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		if (plugin != null) {
+			plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	    }
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInfo(String message, Throwable exception) {
+		if (plugin != null) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+		}
+	} // logInformation
+
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Aspect.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Aspect.java
new file mode 100644
index 0000000..c238af9
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/Aspect.java
@@ -0,0 +1,636 @@
+package org.eclipse.stem.ui.ge;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.Assert;
+/**
+ * Aspect 
+ * 
+ * This class is used to describe the Aspects of a disease that 
+ * we are interested in.  The common ones are: S, E I,and R for 
+ * Susceptible, Exposed, Infectious, and Recoverable.  However 
+ * there could be others or some diseases may have less.
+ * 
+ * The valid Aspects are described by a property file.  
+ * The default is aspects.properties which would be found in the 
+ * org.eclipse.stem.ui.ge package. The default if no properties
+ * file is found is S,E,I,R with default values for each aspect.
+ * 
+ * Each valid Aspect is described by an instance of this class and 
+ * the set of Aspects are stored in a HashMap that can be accessed 
+ * as a static value for Aspect. 
+ * <pre>
+ * Each Aspect has the following attributes:
+ *
+ *    code     - the String code by which it is accessed (e.g "S")
+ *    name     - The String that the user would understand
+ *               (e.g "Susceptiple"
+ *    description - The text description of the aspect.
+ *    range    - A list of double values that describe the range 
+ *               of values that the aspect might have. 
+ *               For a relative aspect, these would range from 0.0 to 1.0
+ *               (e.g  0.1, 0.33, 0.66, 0.9)
+ *    red        The value (0 to 255) for the color "Red" if the value 
+ *               is in the specified range. 
+ *               (e.g  0,255,255,255 would cause an aspect with a value of 0
+ *               to have red=0; with a value greater than 0 then red=255
+ *               Assuming the green and blue values were 0,0,0,0 then the
+ *               aspect would be shown as red. Equal values for red and green
+ *               would result in yellow etc. 
+ *    green      Same as above but for the color green.
+ *    blue       Same as above but for the color blue.
+ *    opacity    The value (0 to 255) that descripes the tranparency 
+ *     			 used by GoogleEarth when drawing a polygon to 
+ *               represent the value of the aspect.  
+ *               (e.g 0,128,160,192 with the range above would cause an area
+ *                with a aspect value of 0 to 0.1 to not be filled in at all, 
+ *                with a value less or equal to 0.33 to have an opacity
+ *                of 128 and values greater thatn 0.9 an opacity of 192) 
+ * 
+ * </pre>
+ */
+public class Aspect {
+    /**
+     * Aspect code 
+     *   Example "E"
+     */
+	private String code = null;
+	
+	/**
+	 * Aspect Name
+	 *   Example "Exposed"
+	 *   
+	 *   
+	 */
+	private String name = null;
+	
+	
+	/**
+	 * Description of the value.  
+	 * 
+	 */
+	// TODO  how do we make this translatable?
+	private String description = null;
+	/**
+	 * filename for properties file
+	 */
+	public static final String PROPERTIES_NAME = "aspect.properties";
+	/** default range */
+	public static final double[] DEFAULT_RANGE = {0.0, 0.33, 0.66, 1.0};
+	/** default opacity */
+	public static final int[] DEFAULT_OPACITY = {0,128,160,192};
+	
+	/**
+	 * range of values that will be shown.  
+	 * This range will be used to select the value
+	 * of opacity,red,green and blue in the display.
+	 * For Example, if the Exposed relative value is 0.5 then 
+	 * this is the less than or equal to the 3rd entry in range (0.66) 
+	 * so the 3rd entry in the list of Opacity(160) will be used and 
+	 * the 3rd entry in the  red,green and blue lists would be used.
+	 * 
+	 */
+	private double[] range = DEFAULT_RANGE;
+	
+	
+	private int[] opacity = DEFAULT_OPACITY;
+	/**
+	 * The array of color entries.  
+	 * For example, the aspect Exposed is displayed as yellow.
+	 * so the blue array is all 0 and the red and green arrays
+	 * are all 255.  But this could be otherwise specified in 
+	 * the properties file.    
+	 *   
+	 */
+	private int[] red = null ;
+	private int[] green = null;
+	private int[] blue = null;
+	/**
+	 * relative or absolute
+	 */
+	private String type = "relative";
+	
+	/**
+	 * If specified could be something like "population/sq km"
+	 * Currently not used.
+	 */
+	private String unit = null;
+	
+	/**
+	 * Map of Aspects that are used 
+	 * 
+	 * The Key is a String cdode value (like "S") 
+	 * The entries are Aspect instances.
+	 */
+	private static Map<String,Aspect> map = null;
+	/**
+	 * default Aspect to be displayed 
+	 */
+	private static String defaultAspect = "";
+	/**
+	 * Class that is called to generate the KML file 
+	 * to display the aspects.  
+	 * See IKMLDisplay.java for requirements of the class.
+	 */
+	private static String kmlDisplayClass = 
+		"org.eclipse.stem.ui.ge.kml.KmlDisplay";
+	
+	/**
+	 * Reference to the properties instance used 
+	 * to determine the Aspects used in this implementation
+	 */
+	private static Properties properties = new Properties ();
+	/**
+	 * Initialization code.
+	 * It reads the property file and creates the Aspects 
+	 * and then stores each one in a hashmap.
+	 * 
+	 */
+	public static void setup() {
+		
+		
+		try {
+			InputStream in = Aspect.class.getResourceAsStream (PROPERTIES_NAME);
+			 if (in != null) {				
+				 properties.load (in); // Can throw IOException
+				 Aspect.map = null;
+				 getAspects(properties);
+			 } else {
+				 GELog.error("Failed reading Aspect properties. "+
+						 PROPERTIES_NAME , null);
+				// use the map that that was constructed 
+				 // during class initialization
+				 if (Aspect.map == null) {
+						map = new HashMap<String,Aspect>(5);	
+				}
+				
+			 }
+		} catch (IOException e) {
+			
+			e.printStackTrace();
+		}
+	}
+	/**
+	 * Read the Properties from the Properties instance that
+	 * was read from the aspect.properties file and create a
+	 *  Map of Aspects.
+	 * 
+	 * @param properties  colletion of properties
+	 */
+	private static void getAspects(Properties properties) {
+		String list = properties.getProperty("Aspects","S,E,I,R");
+		StringTokenizer tokens = new StringTokenizer(list,",");
+		while (tokens.hasMoreTokens()) {
+			String token = tokens.nextToken();
+			if (defaultAspect == null || defaultAspect.length()==0) {
+				// make 1st Aspect the default default
+				defaultAspect = token;
+			}
+			String name = properties.getProperty(token+".name",null);
+			Aspect aspect = new Aspect(token,name);
+			
+			String description = 
+				properties.getProperty(token+".description",null);			
+			aspect.setDescription(description);
+			String range = properties.getProperty(token+".range",null);
+			aspect.setRange(range);
+			String opacity = properties.getProperty(token+".opacity",null);
+			aspect.setOpacity(opacity);
+			String color = properties.getProperty(token+".red","0");
+			aspect.setRed(color);
+			color = properties.getProperty(token+".green","0");
+			aspect.setGreen(color);
+			color = properties.getProperty(token+".blue","0");
+			aspect.setBlue(color);
+//			GELog.debug(Aspect.class,token+":"+
+//					" "+aspect.getCode()+" "+aspect.getName()+
+//					" "+aspect.getRange()+" "+aspect.getOpacity());
+		}
+		defaultAspect = properties.getProperty("Default",defaultAspect);
+		kmlDisplayClass = 
+			properties.getProperty("kmlDisplay",kmlDisplayClass);
+	}
+	/**
+	 * Create an instance of Aspect and place it into the Hashmap.
+	 * 
+	 * @param code
+	 * @param name
+	 * @param id 
+	 */
+	public Aspect(String code, String name) {
+		this.code = code;
+		this.name = name;		
+		// set some defaults
+		if (red == null)
+			setRed("0");
+		if (green == null)
+			setGreen("0");
+		if (blue == null)
+			setBlue("0");
+		if (Aspect.map == null) {
+			map = new HashMap<String,Aspect>(5);	
+		}
+		Aspect.map.put(code,this);
+	}
+
+	/**
+	 * Verify that this instance of Aspect makes good sense
+	 * and follows all of the rules. 
+	 * 
+	 * @return true if no problems found
+	 *         false if not  
+	 *         
+	 */
+	public boolean isSane() {
+		
+		try {
+			Assert.isNotNull(range);
+			int n = range.length;
+			Assert.isTrue(opacity.length == n,"Invalid Opacity dimension");
+			Assert.isTrue(red.length == n,"Invalid Color Red dimension");
+			Assert.isTrue(green.length == n,"Invalid Color Blue dimension");
+			Assert.isTrue(blue.length == n,"Invalid Color Green dimension");
+			
+		} catch (RuntimeException e) {			
+			e.printStackTrace();
+			return false;
+		}
+		return true;
+	}
+	/**
+	 * Return the Aspect that is associated with the specified
+	 * code.  Reurn defaultAspect if unknown.
+	 * 
+	 * @param code
+	 * @return specified aspect
+	 */
+	public static Aspect getAspect(String code) {
+		Aspect aspect = null;
+		if (map == null) {
+			setup();
+		}
+		if (map != null) {
+			aspect = map.get(code);
+			if (aspect == null) {
+				aspect = map.get(defaultAspect);
+			}
+		} else {			
+			GELog.error("Invalid condition. Aspect map is null",null);
+		}
+		return aspect;
+	}
+	/**
+	 * Test if specified aspect code is in the map of aspects.
+	 *
+	 * 
+	 * @param aspectCode  
+	 * @return true if the specified aspect code is in the map
+	 */
+	public static boolean exists(String aspectCode) {
+		return map.containsKey(aspectCode);
+	}
+	/**
+	 * @return the map
+	 */
+	public static Map<String, Aspect> getMap() {
+		return map;
+	}
+	/**
+	 * @param map the map to set
+	 */
+	public static void setMap(Map<String, Aspect> map) {
+		Aspect.map = map;
+	}
+
+	
+	/**
+	 * @return the code
+	 */
+	public String getCode() {
+		return code;
+	}
+
+	/**
+	 * @param newcode the code to set
+	 */
+	public void setCode(String newcode) {
+		map.remove(this.code);
+		this.code = newcode;
+		map.put(newcode, this);
+	}
+
+	
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	/**
+	 * Return the code that this Aspect represents.
+	 *   For Example "E" for Exposed.
+	 */
+	public String toString() {
+		return code;
+	}
+
+	
+
+	/**
+	 * @return the description
+	 */
+	public String getDescription() {
+		if (description == null) 
+			return name;
+		return description;
+	}
+
+	/**
+	 * @param description the description to set
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	/**
+	 * @return the range
+	 */
+	public double[] getRange() {
+		return range;
+	}
+	/**
+	 * Get a specific entry in the array of range values
+	 * @param n  entry within the array 
+	 * @return the range entry in list
+	 */
+	public double getRange(int n) {
+		return range[n];
+	}
+	/**
+	 * Set the range of values used to display value.
+	 * It is given as a String of , separated values
+	 * and converted to an array of doubles
+	 * 
+	 * @param range the range to set
+	 */
+	public void setRange(String range) {
+		if (range == null) {
+			this.range = DEFAULT_RANGE;
+			return;
+		}
+		StringTokenizer tokens = new StringTokenizer(range,",");
+		
+		int n = tokens.countTokens();
+		this.range = new double[n];
+		for (int i=0; i<n; i++) {
+			double value = Double.parseDouble(tokens.nextToken().trim());
+			this.range[i] = value;
+			
+		}
+		
+	}
+	
+	/**
+	 * @return the opacity array
+	 */
+	public int[] getOpacity() {
+		return opacity;
+	}
+	/**
+	 * @param n entry the list to get
+	 * @return the opacity
+	 */
+	public int getOpacity(int n) {
+		return opacity[n];
+	}
+	/**
+	 * Set the Opacity of the displayed polygons
+	 * based on the range of values.  
+	 * It is given as a String and converted to 
+	 * an array of ints that is the same size as 
+	 * range.  If Less values specified, then last 
+	 * value will be repeated.
+	 * @param opacity comma separated list
+	 */
+	public void setOpacity(String opacity) {
+		int n = getRange().length;
+		this.opacity = new int[n];
+		if (opacity == null) {	
+			this.opacity[0] = 0;
+			for (int i=1;i<n;i++) {
+				this.opacity[i] = DEFAULT_OPACITY[i];
+			}
+			return;
+		} 
+		StringTokenizer tokens = new StringTokenizer(opacity,",");		
+		
+		int value = 0;
+		for (int i=0; i<n; i++) {
+			if (tokens.hasMoreTokens()) {
+			  value = Integer.parseInt(tokens.nextToken().trim());
+			}
+			this.opacity[i] = value;			
+		}
+		
+	}
+
+
+	/**
+	 * Set the Color of the displayed polygons
+	 * based on the range of values.  
+	 * It is given as a String and converted to 
+	 * an array of ints that is the same size as 
+	 * range.  If Less values specified, then last 
+	 * value will be repeated.
+	 * @param color range of colors 
+	 */
+	public void setRed(String color) {
+		int n = getRange().length;
+		this.red = new int[n];
+		if (color == null) {			
+			for (int i=0;i<n;i++) {
+				this.red[i] = 0;
+			}
+			return;
+		} 
+		StringTokenizer tokens = new StringTokenizer(color,",");		
+		int value = 0;
+		for (int i=0; i<n; i++) {
+			if (tokens.hasMoreTokens()) {
+			  value = Integer.parseInt(tokens.nextToken().trim());
+			}
+			this.red[i] = value;			
+		}		
+	}
+	/**
+	 * Set the Color of the displayed polygons
+	 * based on the range of values.  
+	 * It is given as a String and converted to 
+	 * an array of ints that is the same size as 
+	 * range.  If Less values specified, then last 
+	 * value will be repeated.
+	 * @param color range of colors 
+	 */
+	public void setGreen(String color) {
+		int n = getRange().length;
+		this.green = new int[n];
+		if (color == null) {			
+			for (int i=0;i<n;i++) {
+				this.green[i] = 0;
+			}
+			return;
+		} 
+		StringTokenizer tokens = new StringTokenizer(color,",");		
+		int value = 0;
+		for (int i=0; i<n; i++) {
+			if (tokens.hasMoreTokens()) {
+			  value = Integer.parseInt(tokens.nextToken().trim());
+			}
+			this.green[i] = value;			
+		}		
+	}
+	
+	/**
+	 * Set the Color of the displayed polygons
+	 * based on the range of values.  
+	 * It is given as a String and converted to 
+	 * an array of ints that is the same size as 
+	 * range.  If Less values specified, then last 
+	 * value will be repeated.
+	 * @param color range of colors 
+	 */
+	public void setBlue(String color) {
+		int n = getRange().length;
+		this.blue = new int[n];
+		if (color == null) {			
+			for (int i=0;i<n;i++) {
+				this.blue[i] = 0;
+			}
+			return;
+		} 
+		StringTokenizer tokens = new StringTokenizer(color,",");		
+		int value = 0;
+		for (int i=0; i<n; i++) {
+			if (tokens.hasMoreTokens()) {
+			  value = Integer.parseInt(tokens.nextToken());
+			}
+			this.blue[i] = value;			
+		}		
+	}
+	
+	/**
+	 * @param n list entry
+	 * @return the color entry
+	 */
+	
+	public int getRed(int n) {
+		return red[n];
+	}
+	
+	/**
+	 * @param n list entry
+	 * @return the color entry
+	 */
+	
+	public int getGreen(int n) {
+		return green[n];
+	}
+	
+	/**
+	 * @param n list entry
+	 * @return the color entry
+	 */
+	
+	public int getBlue(int n) {
+		return blue[n];
+	}
+	/**
+	 * @param range the range to set
+	 */
+	public void setRange(double[] range) {
+		this.range = range;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public String getType() {
+		return type;
+	}
+
+	/**
+	 * @param type the type to set
+	 */
+	public void setType(String type) {
+		this.type = type;
+	}
+	/**
+	 * @return the default Aspect
+	 */
+	public static Aspect getDefault() {
+		String code = getDefaultCode();		
+		return getAspect(code);
+	}
+	/**
+	 * @return the default Aspect code
+	 */
+	public static String getDefaultCode() {
+		return defaultAspect;
+	}
+	/**
+	 * @param defaultAspectCode the aspect to set
+	 */
+	public static void setDefaultCode(String defaultAspectCode) {
+		defaultAspect = defaultAspectCode;
+	}
+	/**
+	 * @return the unit
+	 */
+	public String getUnit() {
+		return unit;
+	}
+
+	/**
+	 * @param unit the unit to set
+	 */
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	/**
+	 * @return the kmlDisplayClass
+	 */
+	public static String getKmlDisplayClass() {
+		return kmlDisplayClass;
+	}
+	/**
+	 * @return the properties
+	 */
+	public static Properties getProperties() {
+		return properties;
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEData.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEData.java
new file mode 100644
index 0000000..7861cc2
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEData.java
@@ -0,0 +1,352 @@
+package org.eclipse.stem.ui.ge;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.awt.Polygon;
+import java.awt.Rectangle;
+import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+
+
+
+/**
+ * Store info about a geographic location and SEIR status in STEM.
+ * It would represent an area such as a US county and
+ * contains an id and the border expressed as one or more
+ * list of points.  The points are Longitude and latitude.
+ * 
+ * Note that (perhaps for an island group) there may be 
+ * more than 1 list of points.
+ * 
+ * It also contains the values for various aspects relative to Population
+ * For SEIR diceases, these aspects would be Susceptible,Exposed,
+ * Infectious, and Recovered  There may be more or less aspects.
+ * These are stored in a Map keyed by aspect code.
+ *
+ */
+public class GEData {
+    /**
+     * Name of the Admin area involved
+     */
+	private String name = "";
+	/**
+	 * Can be set by the creater with setDescription.
+	 * Usually used for the list of relative values
+	 */
+	private String description = "";
+	
+	/**
+	 * used to set the kml id
+	 */
+	private String id = "";
+	/** 
+	 * used to format the longitude/latitude values
+	 * default of DecimalFormat() would result in 3 digit precision 
+	 */
+	
+	private static final DecimalFormat df = new DecimalFormat("####.##");
+	
+    /**
+     * A LatLong instance is a collection of latitude/longitude data pairs partititioned
+     * into one or more "segments". Each segment is a sequence of latitude/longitude
+     * data pairs. A segment could form a closed polygon or it could be a path.
+     * In our case this should always be a closed polygon.
+     * <pre>
+     * Each LatLong describes 1 or more polygon border. There may be 
+     *   more than one polygon in the case of an island or ...
+     * 
+     *  </pre>
+     */	
+    private LatLong polygons = null;
+    
+    /**
+     * Contains the aspect values for the area
+     * Keyed by the aspect code. 
+     * For Example. with an SEIR disease you would have
+     * keyed entries for "S", "E", "I" and "R"   
+     */
+    private final Map<String,Double> valueMap = new HashMap<String,Double>(8); 
+    /**
+     * Bounding Box for this LatLong polygon.  
+     * If LatLong contains more than 1 polygon this is the 
+     * union of the BoundingBox for each polygon
+     */
+    private Rectangle bBox = null;
+    
+    private double[] placemark = null;
+    
+	/**
+	 * Create an instance of GEData with LatLong
+	 * @param name
+	 * @param areas
+	 */
+	public GEData(String name, LatLong areas) {
+		super();
+		this.name = name;
+		this.id = name;
+		this.polygons = areas;
+		//if (areas.size() > 1) {
+		//	GELog.debug(this,name+": "+areas.size());
+		//}
+		if (GEPreferencePage.isBBOX()) {
+			this.bBox = getBBox(areas);
+		}
+		
+	} 
+	/**
+	 * Create an instance of GEData with LatLong
+	 * @param id    admin area id
+	 * @param name  admin area name
+	 * @param areas lat/long border of 1 of more polygons
+	 */
+	public GEData(String id, String name, LatLong areas) {
+		super();
+		this.name = name;
+		this.id = id;
+		this.polygons = areas;
+		//if (areas.size() > 1) {
+		//	GELog.debug(this,name+": "+areas.size());
+		//}
+		if (GEPreferencePage.isBBOX()) {
+			this.bBox = getBBox(areas);
+		}
+		
+	} 
+	/**
+	 * 
+	 * format needed by KML 
+	 *    long,lat long,lat ...
+	 *    
+	 * By default DecimalFormat will return 
+	 * doubles as nnnn.ddd 
+	 *    
+	 * @param numArea Normally 0 if just 1 contagious area 
+	 *                but it could be a set of islands or
+	 *                other multiple areas. 
+	 * @return the coordinates as a String in the form
+	 *   long1,lat1 long2,lat2 ...
+	 */
+	public String getCoordinatesAsString(int numArea) {
+		Segment segment = polygons.getSegments().get(numArea);		
+		// we don't care about altitude 
+		
+		StringBuffer strbuf = new StringBuffer(400);	
+		final int size = segment.size();
+		for (int i=0; i< size; i++) {			
+			strbuf.append(df.format(segment.longitude(i)));
+			strbuf.append(",");
+			strbuf.append(df.format(segment.latitude(i) ));
+			strbuf.append(" ");
+		}
+		return strbuf.toString();
+	}
+	/**
+	 * 
+	 *Get the aspect values as a String
+	 *        
+	 * 
+	 * @return the values as a String in the form
+	 *   a1: v1 a2:v2 ...
+	 */
+	public String getValuesAsString() {
+				
+		StringBuffer strbuf = new StringBuffer(64);
+		for(Map.Entry<String, Double> entry: valueMap.entrySet() ) {
+		    strbuf.append(entry.getKey());
+			strbuf.append(":");
+			strbuf.append(df.format(entry.getValue()));
+			strbuf.append(" ");
+		}
+		
+		
+		return strbuf.toString();
+	}
+
+	/**
+	 * get the number of areas described by the geographic points.
+	 * 
+	 * @return number of polygons described
+	 */
+    public int getNumAreas() {
+    	if (polygons != null)
+    	  return polygons.size();
+    	else 
+    	  return 0;
+    }
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+	/**
+	 * @return the bBox rectangle
+	 */
+	public Rectangle getBBox() {
+		return bBox;
+	}
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the id
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * @param id the id to set
+	 */
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	/**
+	 * set the coordinates of a point within a polygon
+	 * @param latitude
+	 * @param longitude
+	 */
+	public void setPoint(double latitude, double longitude) {
+		placemark = new double[2];
+		placemark[0] = latitude;
+		placemark[1] = longitude;
+	}
+	/**
+	 * Return the coordiantes of a point 
+	 * 
+	 * @return Double[] or null
+	 */
+	public double[] getPoint() {
+		return placemark;
+	}
+	
+	/**
+	 * Given a LatLong, generate the overall BoundingBoxes.
+	 * 
+	 * @param latLong
+	 * @return Rectangle
+	 */
+	private static Rectangle getBBox(LatLong latLong) {
+		
+		List<Segment> list = latLong.getSegments();
+		int numareas = list.size();
+		Rectangle bBox = null;
+		for (int i=0; i<numareas; i++) {
+			final Polygon polygon = new Polygon();
+			final Segment segment = list.get(i);
+			final int size = segment.size();
+			for (int p=0; p< size; p++) {
+				double x = segment.longitude(p);
+				double y = segment.latitude(p);
+				int xint = (int)((x+180)*1000);
+				int yint = (int)((y+90)*1000);
+				polygon.addPoint(xint, yint);
+			} // for
+			
+			if (bBox == null)
+				bBox = polygon.getBounds();
+			else 
+				bBox = bBox.union(polygon.getBounds());
+		}
+		   
+		return bBox;
+	}
+	
+	
+	/**
+	 * debug helper
+	 */
+	@Override
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("GEData: ");
+		sb.append(this.getValuesAsString());
+		sb.append(" BBox:"+bBox);
+		sb.append(" : ");
+		for (int i=0; i< polygons.size(); i++) {			
+			sb.append(this.getCoordinatesAsString(i));
+		}
+				
+		return sb.toString();
+	}
+
+	/**
+	 * @return the valueMap for the specified area so 
+	 * we can store values into it.
+	 */
+	public Map<String,Double> getValueMap() {
+		return valueMap;
+	}
+	/**
+	 * @param aspect 
+	 * @return the value for the specified alpect
+	 */
+	public double getValue(Aspect aspect) {
+		return valueMap.get(aspect.getCode());
+	}
+	
+	/**
+	 * Store the value in the data store for the area.
+	 * 
+	 * @param aspect  The aspect that this value is for. 
+	 * @param value the value for the specified aspect
+	 */
+	public void setValue(Aspect aspect, double value) {
+		valueMap.put(aspect.getCode(),value);
+	}
+
+	/**
+	 * @return the center of the BBox as longitude and latitude.
+	 */
+	public double[] getBBoxCenter() {
+		
+		if (bBox == null) {
+			bBox = getBBox(polygons);
+		}
+		if (bBox != null ) {
+    		// convert back to double value.
+    		double longitude = bBox.getCenterX();
+    		longitude = (longitude-180000)/1000;
+    		double latitude  = bBox.getCenterY();
+    		latitude = (latitude-90000)/1000;
+    		
+    		double[] center = new double[] {longitude,latitude};
+    		return center;
+    	} 
+		return null;
+	}
+
+	/**
+	 * @return the description
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * @param description the description to set
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEInterface.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEInterface.java
new file mode 100644
index 0000000..182d089
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEInterface.java
@@ -0,0 +1,1867 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.PlatformLatLongDataProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.stem.jobs.preferences.PreferenceConstants;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.ui.ge.kml.KmlDisplaySelection;
+import org.eclipse.stem.ui.ge.kml.StemKml;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+import org.eclipse.stem.ui.ge.views.GEView;
+import org.eclipse.stem.ui.views.geographic.map.GeographicSelectionElements;
+
+
+
+/**
+ * This is the STEM half of the interface between 
+ * STEM and GoogleEarth.
+ * 
+ * It listens for Simulations to be added or deleted and maintains a 
+ * list of simulations.  When a simulation becomes active it then 
+ * listens for Simulation events.   
+ * <p>
+ * When a simulation cycle completes, we are notified and 
+ * it will take the STEM data and call StemKml to convert 
+ * it to KML and either log it to a set of files for later display 
+ * or send it directly to GoogleEarth.
+ * <p>
+ * The overall process flow is the following:
+ * <pre>
+ *   <b>simulationsChanged:</b> Notified when a new Simulation is added
+ *   or removed.  If added then setActive() is called to add it to 
+ *   the list of Simulations being handled.
+ *   
+ *   <b>simulationChanged:</b> Notified when a cycle ends. It calls 
+ *   the processCycle method.
+ *   
+ *   <b>processCycle</b>Main process when a processing cycle ends.
+ *     
+ *     <b>buildMap()</b> called on 1st cycle to build a map of  
+ *     GEData instances that contains the geographic description 
+ *     of each county/areaid
+ *     
+ *     It then uses the PreferencePage option to decide how to 
+ *     comunicate with GoogleEarth.  
+ *     
+ *      <b>storeSEIR()</b> This updates the GEData instances with the 
+ *      relative disease statistics.
+ *      
+ *      <b>generateKML()</b> This sends all the information to the 
+ *      GEJob instance where a KML file for this cydle is written.
+ *      
+ * </pre>
+ *    
+ */
+
+public class GEInterface 
+           implements ISimulationListener, ISimulationManagerListener{
+		
+	 /**
+     * template for the KML filename written on the 
+     * Nth cycle for type T
+     */
+    private static final String controlTemplate = "control_&N_&T.kml";
+    
+    
+	/**
+	 * List of active simulations keyed by Name
+	 * 
+	 * The list is updated by SimulationManager events
+	 * that add or remove simulations.
+	 */
+	private Map<String,GESimEntry> activeSimulations = null;
+	
+	
+	/**
+	 * map of geographic data keyed by area id
+	 */
+	private Map<String, GEData> stemMap = null;
+	
+	/**
+	 * GEView handles all the gui ui for us
+	 */
+	private GEView geView = null;
+	
+	/**
+	 * This will contain the simulation id when that simulation 
+	 * is sending its KML to GoogleEarth.  When it is filled
+	 * in any subsequent requests to log and view will only do logging.
+	 * It is cleared when the simulation is removed.
+	 */
+	private String activeView = null;
+	
+	/**
+	 * when set to a node name then the displayMap method
+	 * will only display that node.
+	 */
+	private String displayNode = null;
+	/**
+	 * Cycle being processed.
+	 */
+	//private int cycle = 0;
+	/**
+	 * This map is used to collect nodes that have been 
+	 * displayed by previous requests so that this can 
+	 * be an accumulative display.  
+	 */
+	private Map<String,GEData> stemMapNode = null;
+	/**
+	 * default Aspect to be displayed for simulations.
+	 * Set by GEView context menu to override 
+	 * the defaultAspect specified in Aspect.properties
+	 */
+	private Aspect defaultAspect = null;
+	
+	/** 
+	 * place to store an error message so the caller can get it.
+	 */
+	private String errorMessage = null;
+	/**
+	 * when user requests a manual display of map
+	 * set this true 
+	 */
+	private boolean manualRequest = false;
+	
+	/**
+	 * Reference to the display module that 
+	 * displays the info based on a selection by
+	 * the mapview view 
+	 */
+	private final KmlDisplaySelection displaySelection = 
+		new KmlDisplaySelection();
+	/**
+	 * remember if we have isssued a displayArea cmd
+	 * so we can clean it up.
+	 */
+	private boolean didDisplayArea = false;
+	/**
+	 * 
+	 * Constructor. 
+	 * 
+	 * - setup to listen for SimulationManager events
+	 * - check if existing simulations.
+	 * @param geView  GUI class that is invoking us.
+	 */
+	public GEInterface(GEView geView) {
+		
+		GELog.debug(this,"constructor: ");
+		
+		this.geView = geView;
+		Aspect.setup();
+		activeSimulations = new HashMap<String,GESimEntry>(1);
+		
+		
+		
+	}
+
+	/**
+	 * called by GEView to do any initialization 
+	 * after we have setup the GUI environment
+	 *
+	 * It will startup the servlet web server if possible
+	 * 
+	 * @return true if initialization is successful
+	 * 
+	 */
+    public boolean init() {
+    	boolean ok = true;
+    	boolean okKML = true;
+    	SimulationManager simulationManager = SimulationManager.getManager();
+		simulationManager.addSimulationManagerListener(this);
+		List<ISimulation>list = simulationManager.getActiveSimulations();
+		boolean autolog = GEPreferencePage.isAutoLogging();
+		for (ISimulation sim: list) {
+			String name = getSimulationId(sim);
+		    GELog.debug(this,"simulationAdded: "+name+" "+sim);			
+			setActive(sim,autolog);			
+		}
+    	// check for valid web server
+		String url = StemKml.initWebServer();
+		GELog.debug(this,"Web server URL: "+url);
+		if (url == null ) {
+			setErrorMessage("Unable to access WebServer");
+			ok = false;
+		} else {
+			okKML = StemKml.verifyGE();			
+			// handle undefined KML
+			if (! okKML) {	
+				setErrorMessage("GoogleEarth KML files are not defined");
+				
+			}
+		}
+		if (!ok || !okKML) {
+			// check if preferences will work with no web 
+			// server or no KNL file definition
+			ok = checkPreferences(url,okKML);
+			if (!ok) {
+				GELog.debug(getErrorMessage());
+			}
+		}
+		
+		return ok;
+		
+	}
+
+    /**
+     * verify (and change) the preferences based on the 
+     * environment.  
+     * 
+     * If a webserver is not available or if googleearth 
+     * has not been installed then it will limit the 
+     * communication methods to not use a webserve or 
+     * not try to launch the kml file.
+     * 
+     * @param url URL for web server or null
+     * @param okGE false if googleEarth not installed
+     * @return false if not OK and changes had to be made
+     */
+    private boolean checkPreferences(String url,boolean okGE) {
+    	boolean result = false;
+    	int method = GEPreferencePage.getMethod();
+    	int newMethod = -1;
+		switch (method) {				
+			case GEPreferencePage.M_LOG_ONLY:
+				// this method alway works
+				result = true;
+		        break;
+			case GEPreferencePage.M_LOG_SERVLET:
+				// this method will not work if no server
+				result = false; 
+				
+				if ( url == null && okGE) {
+					newMethod = GEPreferencePage.M_AUTO_LAUNCH;
+					errorMessage = "No WebServer: Changed to directly launch KML";
+					
+				} else {
+					newMethod = GEPreferencePage.M_LOG_ONLY;
+					errorMessage = "KML is not recognized, Changed to only Log files";
+				}					
+				
+		        break;
+			case GEPreferencePage.M_ASYNC_SERVLET:
+//				 this method will not work if no server
+								
+				if ( url == null && okGE) {
+					newMethod = GEPreferencePage.M_AUTO_LAUNCH;
+					errorMessage = "No WebServer: Changed to directly launch KML";
+					
+				} else {
+					newMethod = GEPreferencePage.M_LOG_ONLY;
+					errorMessage = "KML is not recognized, Changed to only Log files";
+				}					
+				
+		        break;
+			case GEPreferencePage.M_AUTO_LAUNCH:
+                 //	 this method will not work if KML is unknown
+				  if (! okGE) {
+					  newMethod = GEPreferencePage.M_LOG_ONLY;
+						errorMessage = "KML is not recognized, Changed to only Log files";
+				  }
+		  		break;	
+			case GEPreferencePage.M_MANUAL_DISPLAY:
+				// this method is always OK
+				break;
+
+		    default:
+		        	
+		}
+		if (newMethod != -1) {
+			GEPreferencePage.setMethod(newMethod);
+			result = false;  // tell about change
+		}
+    	return result;
+    }
+	/**
+	 * We get here because we are listening for SimulationsChanged 
+	 * events from the Simulation Manager and one occured. 
+	 * We will check for a Simulation being removed and if so check if 
+	 * it is one of our active simulation and if so remove it.
+	 * If a simulation is being added, it will be added to the list of
+	 * active simulations.
+	 * 	 
+	 */
+	public void simulationsChanged(SimulationManagerEvent event) {
+		GELog.debug(this.getClass(), "simulationsChanged: ");
+		// GELog.memory();
+		if (event.getSimulationsRemoved().length > 0) {
+			for (ISimulation sim : event.getSimulationsRemoved()) {
+
+				String id = getSimulationId(sim);
+				GELog.debug(this.getClass(), "simulationRemoved: " + id + " "
+						+ sim);
+
+				GESimEntry existing = activeSimulations.get(id);
+				if (existing != null) {
+					boolean active = isActiveView(sim);
+					setActive(sim, false);
+					activeSimulations.remove(id);
+					if (active) {
+						stopGE();
+					}
+					GELog.debug(this, "Active simulation removed: " + id);
+				}
+			}
+		} else if (event.getSimulationsAdded().length > 0) {
+			boolean autolog = GEPreferencePage.isAutoLogging();
+			for (ISimulation sim : event.getSimulationsAdded()) {
+				String name = getSimulationId(sim);
+				GELog.debug(this, "simulationAdded: " + name + " " + sim);
+				GESimEntry existing = activeSimulations.get(name);
+				if (existing == null) {
+					boolean ok = setActive(sim, autolog);
+					if (!ok) {
+						if (!autolog) {
+							geView.showMessage(errorMessage);
+						} 
+					}
+				}
+
+			}
+		}
+	} // simulationsChanged
+    
+	/**
+	 * Called by GEView.dispose()
+	 * 
+	 * 
+	 */
+	public void dispose() {
+		SimulationManager simulationManager = SimulationManager.getManager();
+		List<ISimulation> list =simulationManager.getActiveSimulations();
+		for (ISimulation sim:list) {
+			sim.removeSimulationListener(this);
+		}
+		simulationManager.removeListener(this);
+		if (activeView != null) {
+			// GE is talking to us
+			stopGE();
+			// wait a bit before we continue 
+			// because this will kill the webserver 
+			// that GoogleEarth is talking to.
+			try {
+				Thread.sleep(5000);
+			} catch (Exception e) {
+				// ignore
+			}
+		}
+	}
+    /**
+	 * Listener for events that happen in a specific Simulation.
+	 * 
+	 * <code>
+	 * This gets called for the following event states
+	 *    SimulationState: RUNNING
+	 *                     COMPLETED_CYCLE
+	 *                     PAUSED  
+	 * We are interested in Completed_Cycle 
+	 * 
+	 * @param event
+	 *            the event that records what happened to the manager.
+	 */
+	
+	public void simulationChanged(SimulationEvent event) {
+		
+		
+		try {
+			ISimulation simulation = event.getSimulation();
+			SimulationState state = event.getSimulationState();
+			String id = getSimulationId(simulation);
+			GESimEntry existing = activeSimulations.get(id);
+            Sequencer seq = simulation.getScenario().getSequencer();
+			          
+            
+			if (state == SimulationState.COMPLETED_CYCLE) {				
+				if (existing == null ) {
+					GELog.debug(this,"Simulation "+id+" not active for GE.");
+					return;
+				}
+				//existing.cycle++;
+				int cycle = seq.getCycle();
+				GELog.debug(this,id+" State="+state+" cycle="+cycle); 
+				processCycle(simulation,state);
+				geView.refresh();
+			} else {
+				GELog.debug(this,id+" State="+state); 
+			}
+
+		} catch (Exception e) {
+			GELog.error("simulationChanged: Failure ", e);
+		}
+	}
+	
+	/**
+	 * Handle the simulation event that just occured
+	 * This is where the real processing starts.
+	 * If we haven't already, we build a map of the 
+	 * geographical information.
+	 * Then determine if we want to do anything on this cycle and 
+	 * determine how we want to comunicate with GE.  
+	 * Next we run thru the scenario nodes and pick up
+	 * the current disease state for each node.  
+	 * Finally all of the information is sent to a 
+	 * background method that builds the KML file that is
+	 * sent to GoogleEarth.   
+	 *  
+	 * @param simulation that event is for
+	 * @param state  Current state being processed
+	 * 
+	 */
+	private void processCycle(ISimulation simulation, SimulationState state ) {
+		
+		String kmlfn = null;		
+		boolean doit = false;
+		int nth = GEPreferencePage.getWhichCycle();
+		
+		
+			
+		String id = getSimulationId(simulation);
+		GESimEntry existing = activeSimulations.get(id);
+		if (existing == null) {
+			GELog.debug(this,"Simulation "+id+" not active for GE.");
+			return;
+		}
+		
+		
+		int method = existing.getMethod();
+		String entryFolder = existing.getLogFolder();
+		Scenario scenario = simulation.getScenario();
+		Sequencer seq = scenario.getSequencer();
+//		 get cycle from simulation
+		int cycle = seq.getCycle();
+		if (GELog.memoryCheck(0.8) ) {
+			GELog.debug(this,"Process for cycle "+
+					cycle+" skipped. Memory low");
+			return;
+		}		
+		//if we haven't yet, then build geo map
+		if ((stemMap = existing.getStemMap()) == null ) {
+			if (! GELog.memoryCheck(0.8) ) {
+				stemMap = buildMap(simulation);
+			}
+			if (stemMap == null) {
+				GELog.debug(this.getClass(),"Unable to build stemMap");
+				return;
+			}
+			doit = true;
+			existing.setStemMap(stemMap);			
+		}
+		
+		StemKml stemKml = existing.getStemKml();
+		if (stemKml == null) {
+			stemKml = new StemKml();
+			existing.setStemKml(stemKml);			
+			stemKml.init();
+		}
+	    // if ManualDisplay and no user request
+		if (method == GEPreferencePage.M_MANUAL_DISPLAY &&
+				! manualRequest ) {
+			return;
+		}
+        
+		if (cycle == 0 || nth == 1 ) {
+			doit = true;
+		} else if (nth > 1 && cycle%nth == 0 ) {
+			doit = true;
+		}
+
+		// Get aspect that we want view of
+		Aspect aspect = getAspectToDisplay(simulation);
+		if (manualRequest) 
+			doit = true;
+		// decide how we want to process it
+		if (doit) {	
+			try {				
+				boolean launch = false;	
+				boolean rename = false;
+				switch (method) {				
+					case GEPreferencePage.M_LOG_ONLY:
+						// log the file but no launch or netlink						
+						if (entryFolder != null) {
+							kmlfn = StemKml.getControlFN(entryFolder,
+									controlTemplate,aspect, cycle);
+						} else {
+							doit = false;
+						}
+				        break;
+					case GEPreferencePage.M_LOG_SERVLET:
+						// log file and launch a netlink to display
+						if ( manualRequest ) {
+							doit = true;							
+							if (activeView == null) {									
+								launch = true;
+								kmlfn = StemKml.getControlFile();
+							} else {
+								kmlfn = StemKml.getControlFN(entryFolder,
+										controlTemplate,aspect, cycle);	
+							}
+						} else if (! id.equals(activeView)) { 
+							doit = false;
+							GELog.debug(this,"Unable to display id "+id);
+						} else if (entryFolder != null) {
+							kmlfn = StemKml.getControlFN(entryFolder,
+									controlTemplate,aspect, cycle);							
+						} else {
+							doit = false;
+							GELog.debug(this,"Unable to display. Invalid folder");
+						}
+				        break;
+					case GEPreferencePage.M_ASYNC_SERVLET:						
+
+						if ( manualRequest ) {
+							if (activeView != null) {
+								doit = false;
+								GELog.debug(this,"Unable to do manual display");
+							} else {
+								launch = true;
+								kmlfn = StemKml.getControlFile();
+							}
+						} else {
+							if (! id.equals(activeView)) { 						
+							   doit = false;
+							   GELog.debug(this,"Not an active Simulation id: "+id+" activeView: "+
+									   activeView);
+							} else {
+								kmlfn = StemKml.getControlFile();
+								rename = true;
+							}
+						}
+				        break;
+					case GEPreferencePage.M_AUTO_LAUNCH:
+				  		// build control.kml and launch it
+						launch = true;
+						kmlfn = StemKml.getControlFile();
+						if ( ! manualRequest && (! id.equals(activeView)) ) {							
+							doit = false;
+							GELog.debug(this,"Invalid. id: "+id+
+									          " activeView: "+activeView);
+						} 
+				  		break;	
+					case GEPreferencePage.M_MANUAL_DISPLAY:
+						if (manualRequest) {
+							GELog.debug(this,"Do manual display");
+							launch = true;
+							kmlfn = StemKml.getControlFile();
+							doit = true;
+							
+						} else {
+							doit = false;
+						}
+						break;
+	
+				    default:
+				        	
+				}
+				manualRequest = false;
+				if (doit) {
+					//	 store the current SEIR data into GEData
+					storeAspects(simulation, stemMap);
+					
+					// generate the KML file
+					GELog.debug(this.getClass(),"GenerateKML for id: "+
+							id + " aspect "+aspect.toString());
+				
+					generateKML(kmlfn, stemKml,stemMap, aspect, cycle,launch,rename);
+					
+					
+				}
+			} catch (Exception e) {				
+				GELog.error("processCycle(): Failure creating KML ",e);
+				activeSimulations.remove(id);
+			}
+		}
+		
+		//GELog.debug(this.getClass(),"Done. cycle="+cycle);
+	}
+	
+	
+	/**
+	 *  called by GEView to display the current map for 
+	 *  a specific admin area.
+	 * 
+	 * @param adminFile  File that contains desired data
+	 * @param search   String that is matched against area id
+	 * @param clear    If true then clear the existing map
+	 * @return  true if able to display map or false if could not.
+	 */	
+	public boolean displayArea( String adminFile,String search, boolean clear) {
+		displayNode = search;
+		didDisplayArea = true;
+		errorMessage = null;
+		boolean result = true;
+		try {
+            if (clear) 
+            	stemMapNode = null;
+            
+			GELog.debug(this,"displayMap() "+adminFile+" search: "+search);
+			if (adminFile == null) {				
+				errorMessage = "AdminFile argument is null";
+				GELog.debug(this,errorMessage);
+				return false;
+			}
+			String fn = StemKml.getDisplayAreaFile();
+			
+			StemKml stemKml = new StemKml();				
+			stemKml.init();				
+			// this will create GEData instances with LatLong data
+            // The LatLong comes from file rather than simulation
+			Map<String,GEData> stemMap = buildMap(adminFile,search);
+            if (stemMap.size() == 0) {
+            	errorMessage = "Search argument "+search+
+            	       " did not match any admin area name.";
+            	return false;
+            }
+			if (stemMapNode == null) {
+				stemMapNode = stemMap;
+			} else {
+				stemMapNode.putAll(stemMap);
+			}
+
+//			 Get aspect that we want view of
+			Aspect aspect = Aspect.getAspect("S");  
+			// generate the KML file	
+			boolean rename = false;
+            int cycle = 0;
+			boolean launch = true;				
+			generateKML(fn,stemKml,stemMapNode, aspect,
+					cycle,launch,rename);
+
+		} catch (RuntimeException e) {
+			result = false;
+			GELog.error("DisplayArea failure", e);
+		}
+
+		displayNode = null;
+		return result;
+	}
+	/**
+	 *  called by GEView to display the specified area
+	 *  when a Selection event is received from mapview
+	 * 
+	 * @param region The Identifiable describing the admin area that 
+	 *               was selected.
+	 * @param gse  reference to the data about the selection
+	 * 
+	 * @return  true if able to display map or false if could not.
+	 */	
+	public boolean displaySelection( RegionImpl region,GeographicSelectionElements gse) {
+        didDisplayArea = true;
+		errorMessage = null;
+		boolean result = true;
+		try {           
+			
+			String fn = StemKml.getDisplayAreaFile();
+			
+			StemKml stemKml = new StemKml();				
+			stemKml.init();				
+			
+			Map<String,GEData> stemMap = buildSelectionMap(region,gse);
+            if (stemMap == null | stemMap.size() == 0) {
+            	
+            	return false;
+            }
+			if (stemMapNode == null) {
+				stemMapNode = stemMap;
+			} else {
+				//stemMapNode.putAll(stemMap);
+				stemMapNode = stemMap; // clear???
+			}
+
+//			 Aspect not used
+			Aspect aspect = null;  
+			// generate the KML file
+			displaySelection.generatePolygons(fn, stemMapNode,aspect);
+
+//			 launch the file for GoogleEarth			  
+			StemKml.launch(fn);
+			GELog.debug(this,"GoogleEarth Map  submitted");
+            
+		} catch (RuntimeException e) {
+			result = false;
+			GELog.error("DisplayArea failure", e);
+		}
+
+		displayNode = null;
+		return result;
+	}
+	/**
+	 *  called by GEView to display the current map 
+	 * This version sets a switch to cause 
+	 * a display on the next cycle if simulation or
+	 * now if paused. 
+	 * 
+	 * 
+	 * @param simulation The currently selected Simulation
+	 * @return  true if able to display map or false if could not.
+	 */
+	public boolean displayMap(ISimulation simulation) {
+		boolean result = true;
+		SimulationState state =   simulation.getSimulationState();
+		GELog.debug(this,"DisplayMap request");
+		manualRequest = true;
+		if (state != SimulationState.RUNNING) {	
+			// process it if not running.
+			processCycle(simulation,simulation.getSimulationState());
+		}
+	    // if it was running it will do it at end of cycle
+		return result;
+	}
+	
+
+	/**
+	 *  called by GEView to display the KML files on GE
+	 *  via the Servlet API
+	 *  
+	 * @param folder 
+	 * @return  true if able to display map or false if could not.
+	 */
+	public boolean runGE(String folder) {
+		boolean result = true;
+		GELog.debug(this,"GoogleEarth run request");
+		if (activeView == null) {	
+	        
+	        activeView = "runGE";
+	        
+	        StemKml.setWaitForKML(false);
+	        StemKml.launchNetworkLink(folder, null);
+		} else {
+			errorMessage = "GoogleEarth is busy";
+			GELog.debug(this,errorMessage);
+			result = false;
+			
+		}
+		return result;
+	}
+	/**
+	 *  called by GEView to start the GoogleEarth 
+	 *  application if not already started
+	 * 
+	 * 
+	 * 
+	 * @return  true if able to display map or false if could not.
+	 */
+	public boolean startGE() {
+		boolean result = true;	
+		GELog.debug(this,"GoogleEarth Start request");
+	    StemKml.launchGE();
+		
+		return result;
+	}
+	/**
+	 *  called by GEView when the GoogleEarth 
+	 *  application is being restarted.
+	 * 
+	 * 
+	 * 
+	 * @return  true if able to reset or false if could not.
+	 */
+	public boolean restartGE() {
+		boolean result = true;	
+		GELog.debug(this,"GoogleEarth Restart request");
+	    StemKml.launchGE();
+	    int method = 0;
+		
+		// TODO 
+	    // reestablish the communication environment.
+	    // If a networklink was active, reestablish it.
+	    if (activeView != null)  {
+	    	GESimEntry existing = activeSimulations.get(activeView);
+			if (existing != null) {
+				method = existing.getMethod();
+				ISimulation sim = existing.getSimulation();
+				if (sim.getSimulationState() == SimulationState.RUNNING){
+					errorMessage = 
+						"Simulation should be paused while restarting GoogleEarth";
+					return false;
+						
+				}
+				String folder = existing.getLogFolder();
+			    if (method == GEPreferencePage.M_ASYNC_SERVLET ||
+			    	method == GEPreferencePage.M_LOG_SERVLET)	{        
+			    	StemKml.launchNetworkLink(folder, null);
+			    }
+	        }
+		}
+		return result;
+	}
+	/**
+	 *  called by GEView to stop the current
+	 *  display the KML files on GE
+	 *  via the Servlet API
+	 * 
+	 * 
+	 * @return  true 
+	 */
+	public boolean stopGE() {
+		boolean result = true;	
+		GELog.debug(this,"GoogleEarth Stop request");
+		//StemKml.launchGE();
+		if (didDisplayArea) {
+			StemKml.clearDisplayArea();
+		}
+		activeView = null;
+		// for some reason it appears that sometimes 
+		// it takes to writing of an empty control file
+		// to stop the current NetworkLink so do it again
+		StemKml.launchGE();
+		return result;
+	}
+	/**
+	 * Schedule the background job that will build the .kml file 
+	 * that will be sent to GoogleEarth 
+	 * 
+	 * @param fn       Fully qualified Filename where we write the kml
+	 * @param stemKml  Object containing info about where and
+	 *                 how to generate the KML.
+	 * @param stemMap  Map of Polygons with SEIR data and PopDensity
+	 * 
+	 * @param aspect   SEIR Type to be displayed
+	 * @param cycle    current cycle number
+	 * @param launch   true if file should be sent to GoogleEarth
+	 * @param rename   true if file should be written then renamed
+	 * @return reference to the file containing the KML
+	 */	
+	
+	private StemKml generateKML(String fn,StemKml stemKml, Map<String,GEData> stemMap,
+			Aspect aspect,long cycle,boolean launch,boolean rename) {	
+		try {
+			GEJob job = new GEJob("Generate KML");
+			job.generateKML(fn,stemKml, stemMap, aspect, cycle,launch,rename);
+			
+		} catch (Exception e) {			
+			e.printStackTrace();
+		}
+		return stemKml;
+	}
+	
+	
+	/**
+	 * obtain the current aspect values and store them in the 
+	 * GEData instance
+	 * 
+	 * @param sim
+	 * @param stemMap
+	 */
+	
+	private void storeAspects(ISimulation sim,Map<String,GEData> stemMap) {
+		
+		Scenario scenario = sim.getScenario();		
+		//		 We get the decorators from the scenario ...			
+		Graph g = scenario.getCanonicalGraph();
+		Decorator[] decorators = (Decorator[]) (g.getDecorators().toArray());
+		int err1ctr = 0;  // no latlong data
+		int err2ctr = 0;  // no aspect data
+		for (Decorator decorator : decorators) {
+	
+			Object[] labels = decorator.getLabelsToUpdate().toArray();
+			for (Object element: labels){
+				
+				if ( element instanceof NodeLabel) {
+					NodeLabel nodeLabel = (NodeLabel)element;
+					Node node = nodeLabel.getNode();
+					
+					String key = node.getDublinCore().getTitle();
+					
+					GEData data = stemMap.get(key);
+					
+					if (data == null) {	  // filtered previously	
+						continue;
+					}
+					boolean keep = filter(node,key,data);
+					if (!keep) 
+						continue;
+					//if (nodeLabel instanceof SEIRLabelImpl) {
+						// TODO we need a way to get PopDensity
+						//SEIRLabelImpl label = (SEIRLabelImpl)nodeLabel;
+						//DiseaseModelState state = (DiseaseModelState)label.getDiseaseModelState();							
+					//	popDensity =50*Math.random(); //state.getPopulationDensity();
+					//	data.setPopDensity(popDensity);
+					//}
+					RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(element, RelativeValueProvider.class);
+					rvp.setTarget((Notifier)element);
+					
+					// Does the label have relative values?
+					
+					if (rvp != null) {	
+						Map<String,Double> map = data.getValueMap();
+						for (Iterator propertyIter = 
+							rvp.getProperties().iterator(); propertyIter.hasNext();) {
+							ItemPropertyDescriptor property = 
+								(ItemPropertyDescriptor) propertyIter.next();
+
+							String p = property.getDisplayName(property);
+							double v = rvp.getRelativeValue(property);
+							// TODO debug insert of Infectious value
+//							if (key.startsWith("M") && p.equals("I")) {
+//								v = Math.random();
+//							}
+							// if we are keeping track of this aspect
+							if (Aspect.exists(p)) {
+								map.put(p,v);
+							}
+						} // for each property
+						//  remove debug code
+						// To debug this then make the infectious value random
+//						if (key.startsWith("Middlesex") && key.contains("MA")) {							
+//							GELog.debug(this,key+" Aspects: "+data.getValuesAsString());
+//							//GELog.debug(this,"BBox:"+data.getBBox());
+//						}
+//						if (key.contains("G220010") ) {							
+//							GELog.debug(this,key+" Aspects: "+data.getValuesAsString());
+//							//GELog.debug(this,"BBox:"+data.getBBox());
+//						}
+					} else {
+						//if (err2ctr == 0) 
+						//GELog.debug(this,"Node: "+key+" has no aspect data");
+						err2ctr++;
+					}
+
+				}
+			}  // for
+		}
+		
+		if (err1ctr > 0) 
+			GELog.debug(this,"Nodes with no LatLong data. count="+err1ctr);
+		if (err2ctr > 0)
+		    GELog.debug(this,"Nodes with no aspect values. count="+err2ctr);
+	}
+	
+	/**
+	 * Build a StemMap instance for the specified Simulation
+	 * 
+	 * The StemMap is a HashMap containing GEData objects 
+	 * keyed by areaid.  The location object contains the 
+	 * geographic borders for the areaid.
+	 * 
+	 * @param simulation that will be shown
+	 * @return Map Key is node, element is GEData instance
+	 * 
+	 */
+	
+	private Map<String,GEData> buildMap(ISimulation simulation) {
+		try {
+			stemMap = new HashMap<String,GEData>();
+			
+			
+			Scenario scenario = simulation.getScenario();
+			//String title = scenario.produceTitle();
+			//DublinCore dc = scenario.getDublinCore();
+			//GELog.debug(this,"buildMap(): title="+title);
+			//GELog.debug(this,"buildMap(): DublinCore="+dc);
+			
+			
+			//		 We get the graph...
+			final Graph canonicalGraph = scenario.getCanonicalGraph();
+			//GELog.debug(this,"buildMap(): canonicalGraph="+canonicalGraph);
+			if (canonicalGraph == null) {
+				GELog.debug(this,"buildMap(): canonicalGraph is null");
+				return null;
+			}
+			// ...and can now iterate through the nodes. Note that the method
+			// "getNodes" returns a map indexed by the URI of each of the nodes,
+			// thus we need to get the values of the map to have an actual list to
+			// iterator over.				
+			int errctr = 0;
+			for (final Iterator nodeIter = canonicalGraph.getNodes().values()
+					.iterator(); nodeIter.hasNext();) {
+				final Node node = (Node) nodeIter.next();
+			    String nodeTitle = node.getDublinCore().getTitle();
+			    //GELog.debug(this, node+" : "+ nodeTitle);
+			    boolean keep = filter(node,nodeTitle,null);
+			    if (! keep) 
+			    	continue;
+			   
+                // The node may or may not have lat/long data associated with
+				// it, if it doesn't the LatLong that's returned will be empty.
+				final LatLong latLongData = getLatLong(node);
+				if (latLongData != null && latLongData.size() > 0) {
+
+				    GEData data = new GEData(nodeTitle,latLongData);
+				    stemMap.put(nodeTitle,data);
+							  
+				} else {					
+//					if (errctr <= 2) {
+//					  GELog.debug(this,"buildMap(): No spacial data\n"+
+//							  "Name="+nodeTitle+" Node="+node);
+//					}
+					errctr++;
+				}
+				
+			} // for each node
+			
+			if (errctr > 0)
+				   GELog.debug(this,"Total buildmap errors = "+errctr);	
+			
+		} catch (Throwable e) {
+			
+			GELog.error("Failure building area map", e);
+			stemMap = null;
+		}
+		
+		
+		return stemMap;	
+	}
+	/**
+	 * Filter out nodes that we are not interested in 
+	 * Note: The important filtering is done in the 
+	 * filter method in StemKml.  This just affects gathering of 
+	 * aspect data .
+	 * 	
+	 * @param node
+	 * @param nodeTitle
+	 * @paran data GEData instance for the node
+	 * @return true if we should keep the node, false to ignore it
+	 */
+	boolean filter(Node node,String nodeTitle, GEData data) {
+//		 if (GEPreferencePage.isTest()) {
+//				if (nodeTitle.indexOf(" US-")< 0 ) {					
+//					return false;
+//				}
+//		 }
+//				// ignore alaska
+//		if (nodeTitle.indexOf(" US-AK")> 0 ) {					
+//					return false;
+//		}
+////				 ignore hawaii
+//		if (nodeTitle.indexOf(" US-HI")> 0 ) {					
+//					return false;
+//		
+		// filter out AdminArea 0 because they "may" be container entries
+		int adminarea = getAreaType(node);
+		if (adminarea <= 0) {
+			GELog.debug(this,"Skip AdminArea 0: "+node);
+			return false;
+		}
+		// debug stuff
+		if (displayNode != null) {
+			displayNode = displayNode.toLowerCase();			
+			if (nodeTitle.toLowerCase().contains(displayNode) ) {
+				GELog.debug(this,"Display: "+nodeTitle);
+				return true;
+			} else {
+				//GELog.debug(this,"Do not Display: "+nodeTitle);
+				return false;
+			}
+			
+		}
+		return true;
+	}
+
+	/**
+	 * Get the id of the area from the DublinCore instance
+	 * @param region Node representing an AdminArea
+	 * @return 3 Char ISO id of Country
+	 */
+
+	private String getAreaID(Node region) {
+		final DublinCore dc = region.getDublinCore();
+		final String dcIdentifier = dc.getIdentifier();
+
+		final String isoKey = dcIdentifier.substring(dcIdentifier
+				.lastIndexOf("/")+1);
+	    return isoKey;
+	}
+	/**
+	 * Get the name of the area from the DublinCore instance
+	 * @param region Node representing an AdminArea
+	 * @return Name of the AdminArea
+	 */
+
+	private String getAreaName(Node region) {
+		final DublinCore dc = region.getDublinCore();
+		final String dcIdentifier = dc.getIdentifier();
+
+		final String isoKey = dcIdentifier.substring(dcIdentifier
+				.lastIndexOf("/")+1);
+		// Did we get it?
+		if (isoKey != null && isoKey != "") {
+			// Yes
+			final String geographicName = 
+				GeographicNames.getName(isoKey);
+			return geographicName;
+//			final StringBuilder sb= new StringBuilder(geographicName);
+//			sb.append(" (");
+//			sb.append(isoKey);
+//			sb.append(")");
+//			return sb.toString();
+		} else {
+			return dc.getTitle();
+		}
+	}
+	
+	/**
+	 * Get the type of the Admin area from the DublinCore instance
+	 * @param region
+	 * @return 0 1 or 2 (-1 if problem)
+	 */
+
+	private int getAreaType(Node node) {
+		int areatype = -1;
+		final DublinCore dc = node.getDublinCore();
+		final String spatial = dc.getSpatial();
+    
+		if (spatial != null) {
+			String mapid = spatial.substring(spatial.lastIndexOf("/") + 1);
+			// Did we get it?
+			if (mapid != null && mapid != "") {
+				//   XXX_0_MAP.xml#XXX
+				mapid = mapid.substring(0, mapid.indexOf("#"));
+				mapid = mapid.substring(4, 5);
+				areatype = Integer.parseInt(mapid);
+			}
+		}
+		return areatype;
+	}
+	/**
+	 * Build a StemMap instance for a specified Spatial location
+	 * based on a Selection event from MapView
+	 * 
+	 * The StemMap is a HashMap containing GEData objects 
+	 * keyed by areaid.  The location object contains the 
+	 * geographic borders for the areaid.
+	 * 
+	 * @param region The Identifiable describing the admin area that 
+	 *               was selected.
+	 * @param gse  Instace of GeographicSelectionElements that was
+	 *             passed from MapView when mouseup occurred.
+	 * 
+	 * @return Map Key is node, element is GEData instance
+	 * 
+	 */
+	
+	private Map<String, GEData> buildSelectionMap(RegionImpl region,
+			                         GeographicSelectionElements gse) {
+		
+		try {
+			
+			DublinCore dc = region.getDublinCore();
+			String spatial = dc.getSpatial();
+			
+            String uriString = spatial.replace("stemspatial:","");
+            
+			stemMap = new HashMap<String, GEData>();
+			PlatformLatLongDataProvider provider = new PlatformLatLongDataProvider();
+
+			URI uriNode = URI.createURI(uriString);                
+		    LatLong latLong = provider.getLatLong(uriNode);
+		 // get id of the area
+			String id = getAreaID(region);
+			String name = getAreaName(region);
+	    	GEData data = new GEData(id,name, latLong);	    	// Use S just to get it to work
+	    	data.setValue(Aspect.getAspect("S"), 01.0);
+	    	String description = formatDescription(region,gse);
+	    	data.setDescription(description);
+	    	double longitude = gse.getLongitude();
+	    	double latitude = gse.getLatitude();
+	    	GELog.debug(longitude+":"+latitude);
+	    	//double[] center = data.getBBoxCenter();
+	    	//GELog.debug(center[0]+":"+center[1]);
+	    	// set the thumbtack on the point clicked by user
+	    	data.setPoint(longitude, latitude);
+	    	
+	    	stemMap.put(id, data);
+			
+		} catch (Throwable e) {
+			GELog.error("Failure building area map", e);
+			stemMap = null;
+			errorMessage = "Exception while building Map";
+		}
+
+		return stemMap;
+	}
+	/**
+	 * Build a StemMap instance for the specified Simulation
+	 * 
+	 * The StemMap is a HashMap containing GEData objects 
+	 * keyed by areaid.  The location object contains the 
+	 * geographic borders for the areaid.
+	 * 
+	 * @param adminFile file name to use in search
+	 * @param search string to look for 
+	 * @return Map Key is node, element is GEData instance
+	 * 
+	 */
+	
+	private Map<String, GEData> buildMap(String adminFile, String search) {
+		
+		String baseURI = 
+			"platform:/plugin/org.eclipse.stem.geography/" + 
+			"resources/data/geo/country/";
+		
+		try {
+            String uriString = baseURI+adminFile;
+			stemMap = new HashMap<String, GEData>();
+			PlatformLatLongDataProvider provider = new PlatformLatLongDataProvider();
+
+			final URI uri = URI.createURI(uriString);
+			final Collection<String> ids = provider.getIds(uri);
+			if (ids.size() == 0) {
+				errorMessage = "Invalid Country code specified";
+				return stemMap;
+			}
+			String match = search.toLowerCase();
+			for (String id : ids) {
+				if (id.toLowerCase().contains(match)) {
+                    URI uriNode = URI.createURI(uriString + "#" + id);                
+				    LatLong latLong = provider.getLatLong(uriNode);
+				    if (latLong != null && latLong.size() > 0) {
+
+				    	GEData data = new GEData(id, latLong);
+				    	// Use S just to get it to work
+				    	data.setValue(Aspect.getAspect("S"), 1.0);
+				    	stemMap.put(id, data);
+				    } else {
+				    	GELog.debug(this, "No spacial data" + " Name=" + id);
+				    }
+				}
+
+			} // for each id
+			if (ids.size() == 0) {
+				errorMessage = "No Matching internal Administration area found";
+			}
+		} catch (Throwable e) {
+
+			GELog.error("Failure building area map", e);
+			stemMap = null;
+			errorMessage = "Exception while building Map";
+		}
+
+		return stemMap;
+	}
+	
+	/**
+	 * Create a formated display to use for description 
+	 * <pre>
+	 *   S:   25.3% 
+	 *   I:   10.2%
+	 *   ..
+	 *   R:    0.0%
+	 * </pre>
+	 * @return formatted description
+	 */
+	private String formatDescription(RegionImpl region,
+                             GeographicSelectionElements gse) {
+		StringBuffer sb = new StringBuffer(128);
+		Map<String,Double> relValues = getRelValues(region);
+		Set<String> aspects = relValues.keySet();
+		sb.append("&lt;pre&gt;");
+		sb.append(getAreaID(region));
+		sb.append(" &lt;br&gt;");
+		for(String aspect:aspects) {			
+			Double relValue = relValues.get(aspect)*100;
+			// format as "     S: 15.1%"
+			String result= String.format("%8s: %5.1f%%",aspect,relValue);
+			sb.append(result);
+			// add the html formatting 
+			sb.append(" &lt;br&gt;");
+		}
+		sb.append("&lt;pre&gt;");
+		return sb.toString();
+	}
+	
+	/**
+	 * Get relative values from the Graph.
+	 * We are given the RegionImpl for the Admin Area.
+	 * We will get the lable from it that contains 
+	 * relative values and put then in a Map with 
+	 * the value name as the key.
+	 * 
+	 * @param region
+	 * @return Map containing <name:Value>
+	 */
+	private Map<String,Double> getRelValues(RegionImpl region) {
+		Map<String,Double> map = new HashMap<String, Double>();
+		
+		List<NodeLabel> nodes = region.getLabels();
+		for(NodeLabel node:nodes) {		 
+			RelativeValueProvider rvp = 
+				(RelativeValueProvider) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(node, RelativeValueProvider.class);
+			// Does the label have relative values?
+			if (rvp != null) {					
+				for (Iterator propertyIter = 
+					  rvp.getProperties().iterator(); propertyIter.hasNext();) {
+					ItemPropertyDescriptor property = 
+						(ItemPropertyDescriptor) propertyIter.next();			
+					String name = property.getDisplayName(property);					
+					Double value = rvp.getRelativeValue(property);
+				    map.put(name, value);								
+			    } // for				
+			}			
+		} // for
+        return map;
+	}
+	/**
+	 * Get geographical border of the node. We'd like to have access to lat/long
+	 * data of the node if there is any, to do that we use a factory to create
+	 * an adapter that knows about the inner details of nodes (it really knows
+	 * about all Identifiables) and implements the LatLongProvider interface.
+	 * 
+	 * @param node
+	 * @return border of the node espressed as an array of long/latitude points.
+	 */
+	LatLong getLatLong(final Node node) {		
+
+		// The node may or may not have lat/long data associated with
+		// it, if it doesn't the list that's returned will be empty.
+
+		try {
+			final LatLongProviderAdapter latLongProvider = 
+				(LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE
+			    .adapt(node, LatLongProvider.class);
+			latLongProvider.setTarget(node);
+			return latLongProvider.getLatLong();
+		} catch (RuntimeException e) {
+			GELog.debug(this,e.getMessage());
+			return null;
+		}
+	}
+	
+	
+    /**
+	 * Check if the specified simulation is actively 
+	 * being listened to. A simulation is active if
+	 * it is listed in the map of active simulations
+	 * and can therefore be manually displayed.
+	 * 
+	 * @param sim
+	 * @return <code>true</code> if active, <code>false</code> in not active or non existent
+	 */
+    public boolean  isActive(ISimulation sim) {
+    	
+        String name = getSimulationId(sim);		
+		GESimEntry existing = activeSimulations.get(name);
+		return (existing == null) ? false : existing.active;
+    }
+    
+    /**
+	 * Check if the specified simulation is the simulation
+	 * being viewed by GoogleEarth
+	 * 
+	 * @param sim
+	 * @return true if activeView
+	 */
+    public boolean  isActiveView(ISimulation sim) {
+    	
+        String name = getSimulationId(sim);		
+		return name.equals(activeView);
+    }
+	/**
+	 * Set the logging for the specified simulation.
+	 * This creates the GESimEntry which is used to collect 
+	 * information about the ISimulation instance to used 
+	 * to build KML files.
+	 * 
+	 * @param sim  Simulation instance being activated 
+	 *             (or deactivated) 
+	 * @param active  set true to write file, 
+	 *                set false to bypass write
+	 * @return true if ok, false in failed with
+	 *           errorMessage
+	 */
+	public boolean setActive(ISimulation sim, boolean active) {
+		
+		String name = getSimulationId(sim);		
+		GESimEntry existing = activeSimulations.get(name);
+		GELog.debug(this.getClass(),"setActive: "+name+"  "+active);
+		if (existing != null) {
+			// if already known about
+			if (existing.active == active) {
+				// no change in state do nothing
+				return true;
+			} else 	{
+				existing.active = active;
+				if (!existing.active) {	
+//					 do anything if deactivated????
+					if (name.equals(activeView))
+						activeView = null;				  
+				}  
+			}			
+		} else {
+			// new entry			
+			existing = new GESimEntry(name,sim);
+			existing.active = active;
+			activeSimulations.put(name, existing);
+			existing.setAspectToDisplay(GEPreferencePage.getAspect());
+			
+			//Handl this based on communication method
+			if (active) {
+				String entryFolder = existing.getLogFolder();
+				int method = GEPreferencePage.getMethod();
+				
+				switch (method) {				
+				case GEPreferencePage.M_LOG_ONLY:
+					// log the file but no launch or netlink
+					if (geView != null) {
+						entryFolder = GEPreferencePage.getFolder();
+						entryFolder = geView.verifyFolder(entryFolder);
+						existing.setLogFolder(entryFolder);
+						existing.setMethod(method);
+					} 
+					sim.addSimulationListener(this);
+					break;
+				case GEPreferencePage.M_LOG_SERVLET:
+					// log file and launch a netlink to display				
+					if (geView != null) {
+						entryFolder = GEPreferencePage.getFolder();
+						entryFolder = geView.verifyFolder(entryFolder);
+						existing.setLogFolder(entryFolder);
+					} 
+					if (entryFolder != null) {					
+						if (activeView == null) {
+							StemKml.setWaitForKML(true);
+							StemKml.launchNetworkLink(entryFolder,null);
+							activeView = name;
+							sim.addSimulationListener(this);
+							existing.setMethod(method);
+						} else {
+							errorMessage ="Simulation "+
+								activeView+
+								" already active on GoogleEarth.";
+							GELog.debug(this,errorMessage);
+							existing.active = false;
+							return false;
+						}
+					} 
+					break;
+				case GEPreferencePage.M_ASYNC_SERVLET:
+
+					// write control.kml and 
+					// launch netlink to display control.kml
+					// every n seconds
+					String kmlfn = StemKml.getControlFile();
+					File f = new File(kmlfn);
+					String parent = f.getParent()+File.separator;
+					kmlfn = f.getName();
+					kmlfn = parent+ kmlfn.replace(".","_Current.");
+					if (activeView == null) {
+						StemKml.setWaitForKML(true);
+						StemKml.launchNetworkLink(entryFolder,kmlfn);
+						activeView = name;
+						sim.addSimulationListener(this);
+						existing.setMethod(method);
+					} else {
+						errorMessage ="Simulation "+
+							activeView+
+							" already active on GoogleEarth.";
+						GELog.debug(this,errorMessage);
+						existing.active = false;
+						return false;
+					}
+
+					break;
+				case GEPreferencePage.M_AUTO_LAUNCH:
+					if (activeView == null ) {					
+						activeView = name;
+						sim.addSimulationListener(this);
+						existing.setMethod(method);
+					} else {
+						errorMessage ="Simulation "+
+								activeView+
+						" already active on GoogleEarth.";
+						GELog.debug(this,errorMessage);
+						existing.active = false;
+						sim.addSimulationListener(this);
+						return false;
+					}
+					
+					break;	
+				case GEPreferencePage.M_MANUAL_DISPLAY:
+					sim.addSimulationListener(this);
+					existing.setMethod(method);
+					break;
+
+				default:
+
+				}// switch
+			}
+		}
+		return true;		
+	}
+	/**
+	 * Set the SEIR value that wwe want displayed.
+	 * 
+	 * @param sim  Simulation instance
+	 * @param aspect the sEIRValue to set
+	 */
+	public void setAspectToDisplay(ISimulation sim, Aspect aspect) {
+		if (sim == null) {
+			setDefaultAspect(aspect);
+		} else {
+			String name = getSimulationId(sim);
+			GESimEntry existing = activeSimulations.get(name);
+
+			if (existing != null) {
+				// if already known about
+				existing.setAspectToDisplay(aspect);
+			} else {
+				setDefaultAspect(aspect);
+			}
+		}
+	}
+	/**
+	 * Get the SEIR value to be displayed from user.
+	 * 
+	 * @param sim
+	 *            Simulation instance
+	 * @return the sEIRValue to display
+	 */
+	public Aspect getAspectToDisplay(ISimulation sim) {
+        String name = getSimulationId(sim);		
+		GESimEntry existing = activeSimulations.get(name);
+		Aspect value = null;
+		if (existing != null) {
+			// if already known about
+			value = existing.getAspectToDisplay();
+			
+		} else {
+			value = getDefaultAspect();
+		}
+		return value;
+	}
+	/**
+	 * display status.
+	 * 
+	 * This will display on the console a lot of 
+	 * information about the environment. 
+	 * Currently it displays the status on the console.
+	 * At some point the important status may be 
+	 * placed into a dialog box and displayed.
+	 *The main purpose of this is to have a way to 
+	 *display interesting stuff. 
+	 * It can be used as a problem reporting aid 
+	 * since one can take the output and use it in the 
+	 * problem description.  So it is important that information
+	 * that is needed in diagnosing problems with the 
+	 * STEM-GE interface be displayed here.
+	 *
+	 *
+	 *	 
+	 */
+	public void displayStatus() {
+		boolean saveDebug = GELog.DEBUG;
+		GELog.DEBUG = true;
+		// display Preferences
+		GELog.debug(this,GEPreferencePage.display());
+		final Preferences preferences = 
+			org.eclipse.stem.jobs.Activator.getDefault()
+				.getPluginPreferences();
+		boolean simulationSleep = preferences
+				.getBoolean(PreferenceConstants.SIMULATION_SLEEP_BOOLEAN);
+	    // display an important delay value.  GE needs it   
+		int simulationSleepSeconds = preferences
+				.getInt(PreferenceConstants.SIMULATION_SLEEP_MILLISECONDS_INTEGER) * 1000;
+		GELog.debug(this,"SIMULATION_SLEEP: "
+				            +simulationSleep);
+		GELog.debug(this,"SIMULATION_SLEEP_SECONDS: "
+				            +simulationSleepSeconds);
+		GELog.debug(this,"activeView: "+activeView);
+		if (activeSimulations.size() == 0) {
+			GELog.debug(this,"No active Simulations");
+
+		} else {
+			GELog.debug(this,"Active Simulations: "+activeSimulations.size());
+			for (Map.Entry entry : activeSimulations.entrySet()) {
+				GESimEntry geSim = (GESimEntry)entry.getValue();
+				String name = (String)entry.getKey();
+				ISimulation sim = geSim.getSimulation();
+				try {
+					GELog.debug(this,"  Simulation: "+							
+							" "+geSim.toString());
+					
+					GELog.debug(this,"  State: "+sim.getSimulationState());
+							
+					GESimEntry existing = activeSimulations.get(name);
+					GELog.debug(this,"  GESimEntry: "+existing);		
+					Scenario scenario = sim.getScenario();
+					GELog.debug(this,"  Scenario: "+scenario);
+					DublinCore dc = scenario.getDublinCore();
+					GELog.debug(this,"  Scenario DublinCore: "+dc);
+					Sequencer sequencer = scenario.getSequencer();
+					GELog.debug(this,"  Sequencer: "+sequencer);
+					Model model = scenario.getModel();
+					GELog.debug(this,"  Model: "+model);
+					//GELog.debug(this,"  LongLat: "+displayLatLong(sim));
+					//GELog.debug(this,"  Aspect: "+displayAspect(sim));
+					
+				} catch (Throwable t) {
+					GELog.error("Display Status failure", t);
+
+				}
+			}
+		}
+		GELog.DEBUG = saveDebug;
+	}
+	/**
+	 * display the LatLong data.
+	 * This is mostly for debug usage.
+	 * 
+	 * 
+	 * @param simulation that will be shown
+	 * @return display string of latlong data
+	 * 
+	 */
+	
+	@SuppressWarnings("unused")
+	private String displayLatLong(ISimulation simulation) {
+		final StringBuilder sb = new StringBuilder();
+		int counter = 0;
+		try {
+			sb.append("LatLong data: ");			
+			Scenario scenario = simulation.getScenario();
+			
+			//		 We get the graph...
+			final Graph canonicalGraph = scenario.getCanonicalGraph();
+			GELog.debug(this,"displayLatLong(): canonicalGraph="+canonicalGraph);
+			if (canonicalGraph == null) {
+				GELog.debug(this,"displayLatLong(): canonicalGraph is null");
+				return null;
+			}
+			// ...and can now iterate through the nodes. Note that the method
+			// "getNodes" returns a map indexed by the URI of each of the nodes,
+			// thus we need to get the values of the map to have an actual list to
+			// iterator over.				
+			for (final Iterator nodeIter = canonicalGraph.getNodes().values()
+					.iterator(); nodeIter.hasNext();) {
+				counter++;
+				if (counter>100) {
+					sb.append("\n Limit of 100 reached");
+					break;
+				}
+				final Node node = (Node) nodeIter.next();
+			    String nodeTitle = node.getDublinCore().getTitle();
+			    sb.append("\n"+"Node: "+nodeTitle);
+			    final LatLongProviderAdapter latLongProvider = (LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE
+				             .adapt(node, LatLongProvider.class);
+			   latLongProvider.setTarget(node);
+			   
+                // The node may or may not have lat/long data associated with
+				// it, if it doesn't the list that's returned will be empty.
+				final LatLong latLongData = latLongProvider.getLatLong();
+				if (latLongData != null && latLongData.size() > 0) {
+					//GELog.debug(this,"displayLatLong(): Node="+nodeTitle);
+                    //	Now we just go through each segment and create a string.
+					for (Segment segment : latLongData.getSegments()) {
+						String data = createStringOfLatLongData(segment);
+						sb.append("LatLong: "+data);
+					} // for
+				    							  
+				} else {
+					GELog.debug(this,"buildMap()(): No spacial data for Node="+nodeTitle);
+				}
+				
+			} // for each node
+			
+				
+			
+		} catch (Throwable e) {
+			
+			GELog.error("Failure building area map", e);
+			
+		}
+		return sb.toString();	
+	}
+	
+	/**
+	 * display the Aspect data.
+	 * This is mostly for debug
+	 * 
+	 * @param simulation that will be shown
+	 * @return Display string containing info about SEIR valued
+	 * 
+	 */
+
+	@SuppressWarnings("unused")
+	private String displayAspect(ISimulation simulation) {
+		final StringBuilder sb = new StringBuilder();
+		try {
+            int counter = 0;
+			Scenario scenario = simulation.getScenario();		
+					
+			//		 We get the decorators from the scenario ...			
+
+			Decorator[] decorators = (Decorator[]) (scenario.getCanonicalGraph()
+					.getDecorators().toArray());
+			for (Decorator decorator : decorators) {
+				GELog.debug(this,"decorator: "+decorator.toString());
+				
+				Object[] labels = decorator.getLabelsToUpdate().toArray();
+				for (Object element: labels){
+					counter++;
+					if (counter>100) {
+						sb.append("\n Limit of 100 reached");
+						break;
+					}
+					if ( element instanceof NodeLabel) {
+						NodeLabel nodeLabel = (NodeLabel)element;
+						Node node = nodeLabel.getNode();
+						String title = node.getDublinCore().getTitle();
+                        sb.append("\nNode: "+title+" ");
+						RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+						.adapt(element, RelativeValueProvider.class);
+						rvp.setTarget((Notifier)element);
+						
+						// Does the label have relative values?
+						if (rvp != null) {							
+							for (Iterator propertyIter = rvp.getProperties().iterator(); propertyIter
+							.hasNext();) {
+								ItemPropertyDescriptor property = (ItemPropertyDescriptor) propertyIter
+								.next();
+								sb.append(property.getDisplayName(property));
+								sb.append(": ");
+
+								sb.append(String.format("%.2f", rvp.getRelativeValue(property)));
+
+								if (propertyIter.hasNext()) {
+									sb.append(", ");
+								}
+							} // for each property
+                            
+						} // if
+						
+					}
+				}  // for
+			}
+
+
+		} catch (Throwable e) {
+			GELog.error("Failure getting SEIR data", e);
+		}
+		return sb.toString();	
+
+	}
+	/** 
+	 * Get the ID to use for getting the GESimEntry instance
+	 * @param simulation
+	 * @return "SIM[sequenceNumber"]"
+	 */
+	public static String getSimulationId(ISimulation simulation) {
+		if (simulation != null)
+		  return "SIM["+
+		      Integer.toString(simulation.getSequenceNumber())+
+		    		  "]";
+		else 
+		  return null;
+	}
+	
+	/**
+	 * Display the latlong data from a LatLong segment
+	 * A segment is a line or polygon.
+	 * 
+	 * @param segment
+	 * @return a string of the lat/long points
+	 */
+	private static String createStringOfLatLongData(final Segment segment) {
+		final StringBuilder sb = new StringBuilder();
+		final int size = segment.size();
+		for (int i = 0; i < size; i++) {
+			sb.append("(");
+			sb.append(segment.latitude(i));
+			sb.append(", ");
+			sb.append(segment.longitude(i));
+			sb.append(")");
+		} // for each lat/long pair
+		return sb.toString();
+	} // createStringOfLatLongData
+
+
+
+
+	/**
+	 * @return the defaultAspect
+	 */
+	public Aspect getDefaultAspect() {
+		if (defaultAspect == null) 
+			defaultAspect = Aspect.getDefault();
+		return defaultAspect;
+	}
+
+
+
+
+	/**
+	 * @param defaultAspect the defaultAspect to set
+	 */
+	public void setDefaultAspect(Aspect defaultAspect) {
+		this.defaultAspect = defaultAspect;
+	}
+
+
+
+	/**
+	 * Set an error message to display
+	 * @param msg 
+	 * 
+	 */
+	public void setErrorMessage(String msg) {
+		errorMessage = msg;
+	}
+	/**
+	 * @return the errorMessage
+	 */
+	public String getErrorMessage() {
+		if (errorMessage == null) 
+			return "";
+		else 
+			return errorMessage;
+	}
+
+	/**
+	 * @param sim Simulation that is being processed.
+	 * @return the cycle
+	 */
+	public int getCycle(ISimulation sim) {
+		Scenario scenario = sim.getScenario();		
+		Sequencer seq = scenario.getSequencer();
+		int cycle = seq.getCycle();
+		return cycle;
+	}
+	
+	
+} // class GEInterface
+	
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEJob.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEJob.java
new file mode 100644
index 0000000..e35c315
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GEJob.java
@@ -0,0 +1,197 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Preferences;
+//import org.eclipse.stem.jobs.Activator;
+import org.eclipse.stem.jobs.preferences.PreferenceConstants;
+import org.eclipse.stem.ui.ge.kml.StemKml;
+
+
+
+/**
+ * Do some of the work in the background
+ * 
+ * This is called by GEInterface to take 
+ * the collected information about the Simulation 
+ * and write it as a KML file. 
+ */
+public class GEJob extends Thread {
+
+	private String  fn = null;
+	private StemKml stemKml = null;
+	/**
+	 * this is a copy of the map passed to me
+	 */
+	private Map<String,GEData> stemMap = null;
+	
+	private Aspect aspect = null; 
+	private long cycle = 0;
+	private boolean launch = false;
+	private boolean rename = false;
+		
+	private static Thread work = null;
+	
+	/**
+	 * Construct a subclass of Job that will do 
+	 * the longrunning part of the interface in
+	 * the background.
+	 * 
+	 * @param name Name associated with job
+	 */
+	public GEJob(String name) {
+		super(name);
+		
+	}
+
+	/** 
+	 * run method for the new Thread
+	 * It will write the KML file for GoogleEarth 
+	 * and perhaps launch it to GE. 
+	 * 
+	 *  Although it has no parameters in the call
+	 *  the following are assumed to be set by 
+	 *  previous call to this.generateKML()
+	 *  
+	 *  fn - File name that contains the kml
+	 *  stemMap
+	 *  aspect
+	 *  cycle
+	 */
+	@Override
+	public void run() {
+		
+		GELog.debug(this,fn+" "+aspect+" "
+				+cycle+" "+launch+" "+rename);
+		try {
+			if (rename) {
+				File f = new File(fn);
+				String parent = f.getParent()+File.separator;
+				fn = f.getName();
+				String newFile = parent+ fn.replace(".","_New.");
+				String currentFile = parent+ fn.replace(".","_Current.");
+				String oldFile = parent+fn.replace(".","._Old");
+				try {
+					
+					File fileN = new File(newFile);					
+					File fileO = new File(oldFile);
+					File fileC = new File(currentFile);
+					stemKml.generatePolygons(newFile, stemMap, aspect, cycle);
+					
+					if (fileO.exists()) {
+						fileO.delete();
+					} 
+					if (fileC.exists())
+					  fileC.renameTo(fileO);
+					fileN.renameTo(fileC);
+					
+					//GELog.debug(this,"Current file: "+fileC+" "+fileC.exists());
+				} catch (RuntimeException e) {
+					
+					GELog.error("Failure creating KML files. "+
+							    " newFile: "+ newFile	,e);
+				}
+				
+			} else {
+				stemKml.generatePolygons(fn, stemMap, aspect, cycle);		
+			                  
+				if (launch) {
+					//	 launch the file for GoogleEarth			  
+					StemKml.launch(fn);
+					GELog.debug(this,"GoogleEarth Map  submitted");
+				}
+			}
+		} catch (Throwable e) {
+			
+			GELog.error("Failure in interface to GoogleEarth. ",e);
+		}
+		
+		return;
+	}
+	/**
+	 * Build the .kml file than will be sent to GoogleEarth 
+	 * We will recieve the information from GEInterface and then 
+	 * schedule the job to be run.
+	 * 
+	 * @param fn File where we write the kml
+	 * @param stemKml  Object containing info about where and
+	 *                 how to generate the KML.
+	 * @param stemMap  Map of Polygons
+	 * 
+	 * @param aspect   SEIR Type to be displayed
+	 * @param cycle    current cycle number
+	 * @param launch   true if file should be sent to GoogleEarth
+	 * @param rename   true if file should be written then renamed
+	 */	
+	
+	public void generateKML(String fn, StemKml stemKml, Map<String,GEData> stemMap,
+			Aspect aspect,long cycle, boolean launch,boolean rename) {
+		
+		this.fn = fn;
+		this.stemKml = stemKml;
+		this.aspect = aspect;
+		this.cycle = cycle;
+		this.launch = launch;
+		this.rename = rename;
+		
+		if (cycle == 0)
+		    checkPreferences();
+		
+		// copy stemMap 
+		// TODO are there ways to avoid this copy 
+		// maybe we could synchronize on it...
+		int n = stemMap.size();
+		this.stemMap = new HashMap<String,GEData>(n);
+		this.stemMap.putAll(stemMap);		
+				
+		//GELog.debug(this,"Scheduling generation of KML file "+fn);
+		try {
+			// if processing backlog
+			if (work != null && 
+				work.getState() != Thread.State.TERMINATED) {			
+				// TODO skip processing if backlogged ?
+				GELog.debug(this,"Skip KML generation for cycle "+cycle);
+				return;								
+			}
+			work = new Thread(this,"Job_"+cycle);
+			work.start();
+		} catch (Exception e) {
+			
+			GELog.error("Failure scheduling KML File generation",e);
+		}
+	}
+		/**
+		 * Check the STEM system delay and warn if not set.
+		 * 	
+		 */
+		protected void checkPreferences() {
+			final Preferences preferences = 
+				org.eclipse.stem.jobs.Activator.getDefault()
+					.getPluginPreferences();
+			boolean simulationSleep = preferences
+					.getBoolean(PreferenceConstants.SIMULATION_SLEEP_BOOLEAN);
+		       
+			int sleepMilliseconds = preferences
+					.getInt(PreferenceConstants.SIMULATION_SLEEP_MILLISECONDS_INTEGER);
+
+			if (! simulationSleep || sleepMilliseconds <= 1) {
+				GELog.info("GEJob: Specified Sleep interval not specified \n"+        
+				           "or may be too short for GoogleEarth operation.\n"+
+				           "Check preferences.");
+			}
+		} // setPerferences	
+		
+	
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GELog.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GELog.java
new file mode 100644
index 0000000..80185f0
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GELog.java
@@ -0,0 +1,252 @@
+package org.eclipse.stem.ui.ge;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.util.Date;
+
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+
+
+/**
+ * debug Utility methods for GoogleEarth Interface
+ *  <p>
+ *   * The main use of this class is to provide additional 
+	 * debugging output when in debug mode on the primary 
+	 * eclipse console and still provide logging of exceptions 
+	 * to the eclipse ILog error log facility.  
+	 * Although Eclipse provides an Error log facility in the 
+	 * application workbench being tested,  it is more convienent
+	 * to get your debug messages and unexpected exception in the
+	 * Eclipse Console that is controling the test environment.
+ * <p>
+ * Typical use of this class:
+ * <pre>
+ *   // early in startup. 
+ *   // in view constructor or junit test class
+ *   GELog.DEBUG = true; 
+ *   ...
+ *   GELog.debug(this,"Current simulation: "+simulation);
+ *   try {
+ *     ...
+ *   } catch (Exception e) {
+ *      GELOG.error("strange failure",e);
+ *   }
+ *   </pre>
+ *   When DEBUG is true then both the Eclipse console and 
+ *   the Eclipse log will get the debug msg and the exception
+ *   stacktrace but if DEBUG is false then the debug message 
+ *   will not appear anywhere and the Exception stacktrace 
+ *   will only appear in the eclipse log.
+ *     
+ *   
+ */
+public class GELog {
+	/**
+	 * if true then GElog methods produces output
+	 * 
+	 * It would be set true normally in the GEView constructor 
+	 * based on the PrefereencePage setting. 
+	 * It could be also set in any junit tests where we 
+	 * want to have additional debug output.
+	 * This could be changed to "static final" to compile 
+	 * out the execution of the if (DEBUG) statement.	
+	 */
+	public static boolean DEBUG = false;
+
+    private static final long start = new Date().getTime();
+
+	/**
+	 * temporary debug statements.
+	 * Calls to this method are intended for debugging and 
+	 * could be removed before publishing the code.
+	 * They are displayed on the Eclipse Console only if
+	 * the DEBUG variable is true.
+	 * @param msg The string to be displayed.
+	 */
+	public static void debug(String msg) {
+		if (GELog.DEBUG) {
+		  System.out.println("GE: "+msg);
+		  System.out.flush();
+		}
+	}
+	/**
+	 * temporary debug statements.
+	 * Calls to this method are intended for debugging and 
+	 * could be removed before publishing the code.
+	 * They are displayed on the Eclipse Console only if
+	 * the DEBUG variable is true.
+	 * <code>
+	 * Example:
+	 *    GELog.debug(this,"a msg to help debugging");
+	 *  -->>
+	 *     System.out.println("AclassName: a msg to help debugging"); 
+	 *       
+	 * </code>   
+	 * @param where - Indicator of class where msg generated
+	 *     Can be String, class or instance
+	 * @param msg The string to be displayed.
+	 */
+	public static void debug(Object where,String msg) {
+		if (GELog.DEBUG) {
+			
+			String classname = "";
+			if (where instanceof String) {
+				classname = (String)where;
+			} else if (where instanceof Class) {
+				classname = ((Class)where).getSimpleName();
+			} else {
+				classname = where.getClass().getSimpleName();
+				// handle GELog.debug(this,msg)
+				Thread t = Thread.currentThread();
+				StackTraceElement[] st = t.getStackTrace();
+				if (st[3].getClassName().contains(classname)) {
+					classname = classname+"."+
+				            st[3].getMethodName();
+				}
+			}
+			String prefix = classname+": ";
+			// add extra debug info is P_TEST
+			if (Activator.getDefault() != null) {
+				if (GEPreferencePage.isTest()) {
+					String t = getThread();
+					String clock = getClock();
+					prefix = clock+" "+t+"-"+prefix;
+				}
+			}
+		  
+		  System.out.println(prefix + msg);
+		  System.out.flush();
+		}
+	}
+	
+	private static String getThread() {
+		return Thread.currentThread().getName();
+	}
+	
+	private static String getClock() {
+		long now = new Date().getTime()-start;
+		return Long.toString(now);
+	}
+	/**
+	 * handler for exceptions that occur
+	 * 
+	 * @param current Class that produced msg
+	 * @param msg Messsage to be displayed (if not null)
+	 * 
+	 */
+	public static void info(Class current,String msg) {
+		info(current.getSimpleName()+": "+msg);
+	}
+	/**
+	 * Handler for info messages.  
+	 * Will be produced even if debug option not on
+	 * 
+	 * @param msg
+	 */
+	public static void info(String msg) {
+		if (GELog.DEBUG) {
+		  System.err.println(msg);
+		}  
+		// now do the correct OSGI thing
+		
+		Activator.logInfo(msg,null);
+		return;
+		
+	}
+	/**
+	 * handler for exceptions that occur
+	 * 
+	 * @param msg Messsage to be displayed (if not null)
+	 * @param t  Exception that caused this if not null
+	 */
+	public static void error(String msg,Throwable t) {
+		if (GELog.DEBUG) {
+		  System.err.println(msg);
+		  if (t != null)
+		    t.printStackTrace();
+		}
+		System.err.flush();
+		// now do the correct OSGI thing
+		
+		Activator.logError(msg, t);
+		return;
+	}
+
+	
+	
+	/**
+	 * Call garbage collect and display memory stats
+	 */
+	public static void memory(){
+	
+		Runtime rt = Runtime.getRuntime();
+		rt.gc();
+		try {
+			Thread.sleep(2000);
+		} catch (InterruptedException e) {			
+		}
+		GELog.debug("Memory Total: "+rt.totalMemory()/1024+"K");
+		GELog.debug("Memory Free:  "+rt.freeMemory()/1024+"K");
+		GELog.debug("Memory Max:   "+rt.maxMemory()/1024+"K");
+	}
+	
+	/**
+	 * test if percent of used memory is greater than specified
+	 * percent.  
+	 * 
+	 *  @param percent to check against.
+	 *     Example: 0.9 = 90%
+	 *  
+	 *  @return true if % memeory used is greater 
+	 *    than specified percent.
+	 */
+	public static boolean memoryCheck(double percent){
+	   
+		Runtime rt = Runtime.getRuntime();
+		
+		GELog.debug("Memory Max:   "+rt.maxMemory()/1024+"K");
+		long used = rt.totalMemory()-rt.freeMemory();		
+		double currentPercent = ((double)used)/((double)rt.maxMemory());
+		GELog.debug("Memory Used:  "+used/1024+"K");		
+		GELog.debug("Percent Used: "+currentPercent);
+		if (currentPercent > percent ) {
+			rt.gc();   // Check after Garbage collector runs
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {			
+			}			
+			
+			used = rt.totalMemory()-rt.freeMemory();
+			currentPercent = ((double)used)/((double)rt.maxMemory());
+			GELog.debug("Memory used after GC:  "+used/1024+"K");	
+			GELog.debug("Percent Used: "+currentPercent);
+			return (currentPercent > percent ) ;
+		}
+		return false;
+	}
+	/**
+	 * main() method for testing.
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		GELog.DEBUG = true;
+		
+		GELog.debug("msg with no class.");
+		
+		GELog.debug(GELog.class,"msg with class specified");
+		try {
+			Object a = null;
+			a.getClass();
+		} catch (Throwable t) {
+			GELog.error("Expected NullPointerException",t);
+		}
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GESimEntry.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GESimEntry.java
new file mode 100644
index 0000000..c8f6376
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/GESimEntry.java
@@ -0,0 +1,180 @@
+package org.eclipse.stem.ui.ge;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.util.Map;
+
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.kml.StemKml;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+
+
+//-----------------------------------------------------------------
+//SimEntry
+//-----------------------------------------------------------------
+/**
+* SimEntry is special entry to describe a Simulation that we 
+* are or were actively logging.
+* 
+* It holds information that is unique to the generation 
+* of KML files for a specific simulation.
+* 
+* 
+*/
+public class GESimEntry {
+	
+	/**
+	 * Name assigned to this Simulation entry 
+	 *   SIMn where n is the simulation.getSequenceNumber()
+	 */
+	private String name = null;
+	
+	/**
+	 * Simulation being watched
+	 */
+	private ISimulation simulation = null;
+	
+	/**
+	 * SEIR value being mapped
+	 */
+	private Aspect aspectValue;
+	/** 
+	 * will GE files be written
+	 */
+	boolean active = false;
+	
+	/**
+	 * StemKml control instance
+	 */
+	private StemKml stemKml = null;
+	
+	/**
+	 * map of geographic data keyed by area id
+	 */
+	private Map<String, GEData> stemMap = null;
+	/**
+	 * directory where KML files are written.
+	 * Note: there could be different log files being used 
+	 * for simulations that run concurently.  
+	 */	
+	private String logFolder = null;
+	
+	/**
+	 * Method used to display on GE
+	 *   Defaults to Manual
+	 */
+	private int method = GEPreferencePage.M_MANUAL_DISPLAY;
+	
+	//int cycle = -1;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name  Unique name for a Simulation
+	 * @param simulation  Instance of Simulation implementation
+	 */
+	public GESimEntry(String name,ISimulation simulation) {
+		this.name = name;
+		this.simulation = simulation;
+		this.active = false;
+	}
+	/**
+	 * @return the active
+	 */
+	public boolean isActive() {
+		return active;
+	}
+	/**
+	 * @return the stemKml
+	 */
+	public StemKml getStemKml() {
+		return stemKml;
+	}
+	/**
+	 * @param stemKml the stemKml to set
+	 */
+	public void setStemKml(StemKml stemKml) {
+		this.stemKml = stemKml;
+	}
+	/**
+	 * @return the stemMap
+	 */
+	public Map<String, GEData> getStemMap() {
+		return stemMap;
+	}
+	/**
+	 * @param stemMap the stemMap to set
+	 */
+	public void setStemMap(Map<String, GEData> stemMap) {
+		this.stemMap = stemMap;
+	} 
+	
+	/**
+	 * @return the logFolder
+	 */
+	public String getLogFolder() {
+		return logFolder;
+	}
+	/**
+	 * @param logFolder the logFolder to set
+	 */
+	public void setLogFolder(String logFolder) {
+		this.logFolder = logFolder;
+	}
+	
+	/**
+	 * for debug info
+	 */
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("GESimEntry: ");
+		sb.append(name);
+		sb.append(" active: "+active);
+		sb.append(" to: "+logFolder);
+		sb.append(" method: "+method);
+		//sb.append(" Name: "+simulation.getName());
+		return sb.toString();
+	}
+	/**
+	 * Get the aspect that we want to display
+	 * 
+	 * @return the sEIRValue
+	 */
+	public Aspect getAspectToDisplay() {
+		//GELog.debug(this.getClass(),"getAspectToDisplay: "+aspectValue);
+		return aspectValue;
+	}
+	/**
+	 * @param value the aspect that we want displayed
+	 */
+	public void setAspectToDisplay(Aspect value) {
+		aspectValue = value;
+	}
+	/**
+	 * @return the simulation
+	 */
+	public ISimulation getSimulation() {
+		return simulation;
+	}
+	/**
+	 * @return the method
+	 */
+	public int getMethod() {
+		return method;
+	}
+	/**
+	 * @param method the method to set
+	 */
+	public void setMethod(int method) {
+		this.method = method;
+	}
+}  // class SimEntry
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/aspect.properties b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/aspect.properties
new file mode 100644
index 0000000..85c97af
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/aspect.properties
@@ -0,0 +1,72 @@
+# Aspects for SEIR Diseases
+#
+# "Aspects" is a comma separated list of Aspect codes.
+# All of the valid aspects have to be listed.
+# The Default Aspect displayed if not otherwise specified 
+# is specified by the Default statement.
+Aspects = S,E,I,R
+Default = I
+#
+# The KMLDisplayClass property names the class that is 
+# called to generate the KML file use to display STEM 
+# aspects on the GoogleEarth map. 
+# The default class KmlDisplay specified below uses the Aspect properties 
+# to generate the KML and new Disease aspects can be added
+# simply by adding them to this properties file.
+# KmlDisplayCustom is customized to only work with SEIR diseases.
+# New Display implementations may be created easily.
+# 
+KmlDisplay = org.eclipse.stem.ui.ge.kml.KmlDisplay
+#kmlDisplay = org.eclipse.stem.ui.ge.kml.KmlDisplayCustom
+#
+# Following the Aspects statements are groups of 
+# specifications for each of the aspects listed above.
+# each specification is the aspect code + "." + the
+# specification name + "=" + the value. 
+# The following are required:
+#   aspect.name =
+#   aspect.description =
+#   aspect.color =  ( where color is [red blue or green] ) 
+#   
+# The following are optional and the defaults are used
+# if not specified.
+#    aspect.range = Comma separated list of double values
+#        DEFAULT_RANGE = {0.0, 0.33, 0.66, 1.0};
+#    aspect.opacity = Comma separated list of values 0-255
+#        DEFAULT_OPACITY = {0,128,160,192};
+#    aspect.red =  Comma separated list of values 0-255
+#    aspect.green =  Comma separated list of values 0-255
+#    aspect.blue =  Comma separated list of values 0-255
+# See Aspect javadoc for more information.
+#####################################################################
+# S is Susceptible
+S.name = Susceptible
+S.description = Percentage of people who are suseptible to the disease.
+S.range = 0.001,0.2,0.4,0.6,0.8,1.0
+S.opacity = 0,96,128,128,160,160
+S.blue = 0,240,240,240,240,240
+S.red = 0
+S.green = 0
+#
+# E is exposed
+E.name = Exposed
+E.Description = Percentage of people who are exposed to the disease.
+E.range = 0.0001,0.01,0.1,0.3,0.6,1.0
+E.opacity = 0,     96,128,144,160,176
+E.red = 240
+E.green = 240
+#
+# I is Infectious
+I.name = Infectious
+I.Description = Percentage of people who are infected by the disease.
+I.range = 0.00001,0.01,0.1,0.3,0.6,1.0
+I.opacity = 0,      96,128,144,160,176
+I.red = 240
+
+#
+# R is Recovered
+R.name = Recovered
+R.Description = Percentage of people who are recovered from the disease.
+R.range = 0.0001,0.01,0.1,0.3,0.6,1.0
+R.opacity = 0,     96,128,128,160,160
+R.green = 240
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/BBoxInfo.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/BBoxInfo.java
new file mode 100644
index 0000000..2d7a9b7
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/BBoxInfo.java
@@ -0,0 +1,267 @@
+package org.eclipse.stem.ui.ge.kml;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import java.awt.Polygon;
+import java.awt.Rectangle;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.ui.ge.GELog;
+
+/**
+ * Obtain the BoundingBox info for GoogleEarth 
+ * from the Servlet.  
+ * GoogleEarth sends the current Screen viewing area to the servlet 
+ * as a BBOX parameter.  The SlideShowServlet saves this BBOX string
+ * each time it is sent.  
+ * 
+ * This class runs as a thread and every N seconds makes a request to the
+ *  BBoxServlet to access the latest BBOX string and return it.
+ *  We then convert it to a bounding box rectangle and make it available 
+ *  for access.  KMLDisplay will access it and use it to filter out 
+ *  display of Admin areas that are not within the screen Bounding box.
+ * 
+ *
+ */
+public class BBoxInfo implements Runnable {
+    
+	private static final long SLEEPTIME = 10*1000;
+	
+	/**
+	 * id used to access the session data in servlet
+	 */
+	private String servletId = null;
+	/**
+	 * url to access the servlet
+	 */
+	private String servletUrl = null;
+	
+	/**
+	 * BoundingBox last gotten from servlet
+	 */
+	private static Rectangle bBox = null;
+	
+	private String bboxOld = null;
+	/**
+	 * constructor
+	 * @param url  URL for the servlet server
+	 * @param id Id to identify the servlet session.
+	 */
+	public BBoxInfo(String url,String id) {
+		servletId = id;
+		servletUrl = url;
+	}
+	
+	
+	/**
+	 * This thread will sit in a loop and every N seconds it 
+	 * will send a request to the SlideShowServlet to give it
+	 * the latest BBox info that was sent from GoogleEarth
+	 */
+	public void run() {
+		
+		while (true) {
+			try {
+				Rectangle bbox = readBBox();
+				if (bbox != null) 
+					setBBox(bbox);
+				Thread.sleep(SLEEPTIME);
+			} catch (InterruptedException e) {
+				
+			}
+		}
+
+	}
+	/**
+	 * readBBox 
+	 *   read the GoogleEarth BBox info from the servlet.
+	 *   GoogleEarth sends the viewport bounding box to the 
+	 *   servlet which stores it.  This will request the servelet
+	 *   to forward it to us.
+	 *   
+	 *
+	 * @return BBox Rectangle 
+	 */
+	public  Rectangle  readBBox() {
+		Rectangle bbox = null;
+		
+		try {
+			URL url = new URL(servletUrl);
+			URLConnection connect = url.openConnection();
+			connect.setUseCaches(false);
+			connect.setDoInput(true);
+			connect.setDoOutput(true);
+			connect.setRequestProperty("Content-type", "application/octet-stream");
+			
+			  // use ByteArray output
+			ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+			DataOutputStream output =
+				new DataOutputStream(byteOutput);
+			// tell it what we want and give key to info
+			output.writeUTF("BBOX "+servletId);
+			
+			output.flush();
+			byte[] buf = byteOutput.toByteArray();
+			
+			connect.setRequestProperty("Content-length", ""+buf.length);
+			DataOutputStream dataOutput =
+				new DataOutputStream(connect.getOutputStream());
+			dataOutput.write(buf);
+			dataOutput.flush();
+			dataOutput.close();
+			
+			DataInputStream in = 
+				new DataInputStream(connect.getInputStream());
+			String stringValue = in.readUTF();
+			
+			in.close();
+			
+			
+			// TODO convert string to rectangle
+			String bboxstr = stringValue.substring(5);
+			if (! bboxstr.equals(bboxOld)) {
+			   GELog.debug(this,"BBOX: "+bboxstr);
+			   // convert to Bounding box rectangle
+			   bbox = getBBox(bboxstr);
+			   GELog.debug(this,"bbox: "+bbox);
+			   bboxOld = bboxstr;
+			}
+			
+			
+		} catch (MalformedURLException e) {	
+			
+			GELog.debug(e.getMessage());
+		
+			//error ="ERROR Invalid URL "+urlstr;
+			
+		} catch (IOException e) {			
+			GELog.debug(e.getMessage());
+			
+		}
+		
+		return bbox;
+	}
+	/**
+	 * Given a BBOX string returned from GoogleEarth 
+	 * generate the BoundingBox rectangle.
+	 * GoogleEarth returns the BBOX in the following format.
+	 *  BBOX x1,y1,x2,y2
+	 *  where x1,y1 are latitude/longitude of bottom left point 
+	 *  and x2,y2 are latitude/longitude of top right point
+	 *  Values are doubles like -114.14578934
+	 *   
+	 * Note that the Rectangle coordinate system uses the origin  
+	 * (0,0) as the top left of the screen, 
+	 *  with the x and y values increasing as they move to the right 
+	 *  and down respectively.
+	 *  
+	 * @param String containing BBOX info from GE
+	 * @return Rectangle
+	 */
+	private static Rectangle getBBox(String bboxString) {
+
+		Rectangle bBox = null;
+
+		Polygon polygon = new Polygon();
+		//GELog.debug(BBoxInfo.class, "BBOX: " + bboxString);
+
+		StringTokenizer st = new StringTokenizer(bboxString, ",");
+		if (st.countTokens() == 4) {
+			// GE returns the BBox as bottom left, top right coordinates
+			// we have to translate to top left + width+height
+			double x1 = Double.parseDouble(st.nextToken());
+			double y1 = Double.parseDouble(st.nextToken());
+			double x2 = Double.parseDouble(st.nextToken());
+			double y2 = Double.parseDouble(st.nextToken());
+			double[] longitudes = { x1, x1, x2, x2, x1 };
+			double[] latitudes = { y1, y2, y2, y2, y1 };
+            // ignore if entire globe
+			if (x1 == -180 && x2 == 180) {
+				x1 = -180;
+				x2 = 0;
+				GELog.debug(BBoxInfo.class,"****** modify BBOX to 180,0 ******");
+			}
+				
+			
+			for (int p = 0; p < longitudes.length; p++) {
+				double x = longitudes[p];
+				double y = latitudes[p];
+				int xint = (int) ((x + 180) * 1000);
+				int yint = (int) ((y + 90) * 1000);
+
+				polygon.addPoint(xint, yint);
+			}
+		}
+	
+		
+		bBox = polygon.getBounds();
+		
+		return bBox;
+	}
+
+	/**
+	 * @return the bBox
+	 */
+	public synchronized static Rectangle getBBox() {
+		return bBox;
+	}
+
+
+	/**
+	 * @param box the bBox to set
+	 */
+	public synchronized static void setBBox(Rectangle box) {
+		bBox = box;
+	}
+	
+	/**
+	 * Test  containment of bounding box 1 in Bounding box 2
+	 * If any corner of BBox 1 is contained in BBox 2 or any corner
+	 * of BBox 2 is contained in BBox 1 then they are adjacent.
+	 * 
+	 * @param r1  bounding box 1
+	 * @param r2  bounding box 2
+	 * @return true if adjacent or containment true
+	 */
+	public static boolean testContainment (Rectangle r1, Rectangle r2) {
+		
+		// coords of corners of first bounding box
+		int xMin1 = r1.x;
+		int  xMax1 = r1.x+r1.width;
+		int  yMin1 = r1.y-r1.height;
+		int  yMax1 = r1.y;
+		// test overlap
+		if (r2.contains(xMin1,yMin1)) return true;
+		if (r2.contains(xMin1,yMax1)) return true;
+		if (r2.contains(xMax1,yMax1)) return true;
+		if (r2.contains(xMax1,yMin1)) return true;
+		
+        // coords of corners of second bounding box
+		int  xMin2 = r2.x;
+		int  xMax2 = r2.x+r2.width;
+		int  yMin2 = r2.y-r2.height;
+		int  yMax2 = r2.y;
+        // test overlap
+		if (r1.contains(xMin2,yMin2)) return true;
+		if (r1.contains(xMin2,yMax2)) return true;
+		if (r1.contains(xMax2,yMax2)) return true;
+		if (r1.contains(xMax2,yMin2)) return true;
+		 
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Coordinates.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Coordinates.java
new file mode 100644
index 0000000..6405790
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Coordinates.java
@@ -0,0 +1,170 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+/**
+ * Build a coordinates attribute for a KML document.
+ * <pre>
+ *    
+ * </pre>
+ * 
+ *
+ */
+  
+  
+/*
+<coordinates>
+    32.567,-122.098,50 
+  </coordinates>
+
+*/   
+public class Coordinates {
+   
+    private double _longitude;
+    
+    private double _latitude;
+    
+    private double _altitude;
+    
+    private boolean _isAltitudeSpecified;
+    /**
+     * Coordinates constructor without altitude.
+     *    
+     * Create a coordinate.
+     * 
+     * @param longitude
+     * @param latitude
+     */
+    public Coordinates(double longitude,
+            double latitude) {
+        _longitude = longitude;
+        _latitude = latitude;             
+    }
+    
+    /**
+     * Coordinates constructor with altitude.
+     *    
+     * Create a coordinate.
+     * 
+     * @param longitude
+     * @param latitude
+     * @param altitude
+     */
+    public Coordinates(double longitude,
+            double latitude,
+            double altitude) {
+        this(longitude,latitude);        
+        _isAltitudeSpecified = true;
+        _altitude = altitude;
+    }
+    /**
+     * 
+     * @return String with longitude,latitude[,altitude] ) 
+     */
+    
+    public String getCoordinates() {
+        StringBuffer str = new StringBuffer();
+        str.append(Double.toString(_longitude));
+        str.append(",");
+        str.append(Double.toString(_latitude));
+        if (_isAltitudeSpecified) {
+            str.append(",");
+            str.append(Double.toString(_altitude));
+        }
+        return str.toString();
+    }
+    
+    /**
+     * 
+     * @return longitude 
+     */
+    
+    public double getLongitude() {
+        return _longitude;
+    }
+    /**
+     * 
+     * @return latitude 
+     */
+    
+    public double getLatitude() {
+        return _latitude;
+    }
+    /**
+     * 
+     * @return altitude 
+     */
+    
+    public double getAltitude () {
+        return _altitude;
+    }
+    /**
+     * Add coordinates to the Coordinates section
+     *      
+     * @param longitude
+     * @param latitude
+     */
+    public void setCoordinates(double longitude,double latitude) {
+        _longitude = longitude;
+        _latitude = latitude;    
+    }
+    /**
+     * Add coordinates to the Coordinates section (with altitude)
+     *      
+     * @param longitude
+     * @param latitude
+     * @param alt
+     */
+    public void setCoordinates(double longitude,
+                               double latitude,int alt) {
+        _longitude = longitude;
+        _latitude = latitude;   
+        _altitude = alt;
+    }
+    /**
+     * return a set of coordinates as a String.
+     * 
+     *  This is needed to build a polygon from a
+     *  list of points.
+     *  
+     *   long1,lat1,alt1 long2,lat2,alt2 ...
+     * @param corners
+     * @return String value
+     */
+    public static String toString(Coordinates[] corners) {
+        
+        StringBuffer strbuf = new StringBuffer(100);
+        for (int i=0; i<corners.length; i++) {
+            if (i!=0)
+                strbuf.append(",");
+            String v = Double.toString(corners[i].getLongitude());
+            strbuf.append(v);
+            strbuf.append(",");
+            v = Double.toString(corners[i].getLatitude());
+            strbuf.append(v);
+            strbuf.append(",");
+            if (corners[i]._isAltitudeSpecified) {
+                v = Double.toString(corners[i].getLatitude());
+                strbuf.append(v); 
+            }
+        }
+        return strbuf.toString();
+    }
+
+	/**
+	 * @return the _isAltitudeSpecified
+	 */
+	public boolean isAltitudeSpecified() {
+		return _isAltitudeSpecified;
+	}
+    
+    
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/IKmlDisplay.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/IKmlDisplay.java
new file mode 100644
index 0000000..0168f78
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/IKmlDisplay.java
@@ -0,0 +1,60 @@
+package org.eclipse.stem.ui.ge.kml;
+
+import java.util.Map;
+
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEData;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * IKMLDisplay defines the interface for classes that implement
+ * the generation of KML files that will display the STEM
+ * disease aspect on the GoogleEarth map.  
+ * 
+ * Implementations of IKmlDisplay have a single method 
+ * "generatePolygons" which is passed all of the information 
+ * needed to write the desired KML. 
+ *
+ */
+public interface IKmlDisplay {
+	
+
+	 /**
+     * Create the KML control file to display all of the 
+     * polygon (county) areas
+     *
+     * <pre>
+     * Information passed:
+     * 
+     * controlFilename:  The filename where the resulting KML is to be written.
+     *    
+     * geData:  A HashMap containing an entry for each geographical
+     *          area being mapped by this simulation. It contains the 
+     *          geographical borders (latlong) and values for 
+     *          each Aspect. 
+     *          
+     * aspect:  The Aspect that the user wants displayed. 
+     * 
+     * 
+     * </pre>
+     * 
+     * @param controlFileName File where KML will be written 
+     * @param geData Map of GEData objects 
+     * @param aspect  which type of map (population,susceptiple...
+     * 
+     */
+    
+	public void generatePolygons(String controlFileName, 
+			Map<String,GEData> geData, Aspect aspect);
+	
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplay.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplay.java
new file mode 100644
index 0000000..c7e181a
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplay.java
@@ -0,0 +1,284 @@
+package org.eclipse.stem.ui.ge.kml;
+
+import java.awt.Rectangle;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEData;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Standard DISPLAY OF SEIR aspects. 
+ *
+ */
+public class KmlDisplay implements IKmlDisplay   {
+
+	/**
+     * initialization
+     * 
+     * currently we have nothing to do
+     * 
+     * 
+     */
+    public void init() {
+    	        
+    }
+    /**
+     * Create the KML control file to display all of the 
+     * polygon (county) areas
+     *
+     * We will have N PlaceMarks, each of which will 
+     * be associated with a differnt Style (for color) 
+     * The polygons will be placed in a placemark based
+     * on the color selection.
+     * 
+     * @param controlFileName File where KML will be written 
+     * @param geData Map of GEData objects 
+     * @param aspect  which type of map (population,susceptiple...
+     * @param cycle current number of cycle being displayed
+     */
+    
+	public void generatePolygons(String controlFileName, 
+			Map<String,GEData> geData, Aspect aspect) {
+        int written = 0;
+		//GELog.debug(this,"aspect="+aspect+" number="+geData.size());
+		
+		KmlDoc kml = new KmlDoc();
+		Document doc = kml.getDocument();
+		Element root = kml.setRoot(null);
+		Element document = kml.appendElement(root,"Document");
+		Style[] styles = setupStyles(kml,document,aspect);
+		int max = aspect.getRange().length;
+		
+		//Setup the placemarks for polygons with same attribute
+		PlaceMark[] placeMark = new PlaceMark[max];
+		Element[] multiGeometry = new Element[max];
+		for (int j=0;j<max;j++) {
+			placeMark[j] = new PlaceMark(doc);
+			document.appendChild(placeMark[j].getElement());
+			placeMark[j].setDescription("STEM map");
+
+			placeMark[j].setName("STEM"+j);
+			placeMark[j].setStyleUrl(styles[j]);   
+			multiGeometry[j] = doc.createElement("MultiGeometry");
+			placeMark[j].appendChild(multiGeometry[j]);
+		} 
+		
+		// now we generate a polygon for each county
+//		int debugcounter =0;
+		// Get latest BBox info from GoogleEarth
+		Rectangle bboxView = BBoxInfo.getBBox();
+		Iterator it = geData.entrySet().iterator();
+		boolean bboxFilter = GEPreferencePage.isBBOX(); 
+		while(it.hasNext()) {
+			int type = 0;
+			Map.Entry e = (Map.Entry)it.next();
+			GEData data = (GEData)e.getValue();
+
+			String county = data.getName();	
+			// check if we are filtering out some areas
+			if (bboxFilter && filter(data,bboxView))  {
+				type = 0;	
+			} else {				
+				type = selectByValue(aspect,data);
+			}
+			
+//			 DEBUG temp
+//			String locid = loc.getId().toString();	
+//			if (county.startsWith("Middlesex")) {								 
+//				GELog.debug(this,"generatePolygons: "+i+": "+county+":"+locid+
+//						": "+type+": "+coord);                          
+//			}
+			if (type > 0) {
+				//GELog.debug(this,county); 
+				int n = data.getNumAreas();
+				for (int i = 0; i < n; i++) {
+					
+					String coord = data.getCoordinatesAsString(i);
+					//if (i > 0)
+					//   GELog.debug(this,i+": "+county+" "+coord);
+					Polygon polygon = new Polygon(doc);
+					kml.appendText(polygon.getElement(), "name", county);
+					polygon.setCoordinates(coord);
+					multiGeometry[type].appendChild(polygon.getElement());
+				}
+				written++;
+			}
+
+		}
+
+		GELog.debug(this,"write "+controlFileName+
+				" with "+written+" entries.");
+		kml.writeFile(controlFileName);
+		//GELog.debug(this,"end write of "+controlFileName); 
+		return;
+	}
+
+	/**
+	 * check if this entry should be filtered out 
+	 * 
+	 * @param data  Instance that contains info for this admin area
+	 * @param bboxView Screen boundary box from GoogleEarth 
+	 * @return true if it should be filtered out.
+	 */
+	private boolean filter(GEData data,Rectangle bboxView) {
+		boolean filtered = false;  // default - not filtered
+		if (bboxView != null ) {				
+			Rectangle bbox = data.getBBox();
+			filtered = ! BBoxInfo.testContainment(bbox,bboxView);
+			return filtered;
+		} 
+//				if (county.indexOf(" MA ")>=0  ||
+//				    county.indexOf(" MT ")>=0    ) {                                
+//			        filtered = ! testContainment(bbox,bboxView);			    	
+//			    	GELog.debug(this," bbox:    "+bbox);
+//			    	GELog.debug(this," bboxView:"+bboxView);
+//				}
+//		if (GEPreferencePage.isTest()) {		
+//			String county = data.getName();	
+//			if (county.indexOf(" US-")>= 0 ) {					
+//				filtered = false;
+//			
+//			} else if (county.indexOf(" MEX")>= 0 ) {					
+//				filtered = false;
+//			} else {
+//				filtered = true;
+//			}
+//			
+//			//GELog.debug(this,county+" "+filtered);
+//		}
+		return filtered;
+	}
+	
+	
+//	<Style id="Style1">
+//	  <LineStyle>
+//	     <width>0.3</width>
+//	  </LineStyle>
+//	  <PolyStyle>
+//	    <outline>0</outline>
+//	    <fill>1</fill>
+//	    <color>800000f0</color>
+//	  </PolyStyle>
+//	</Style>
+  /**
+   * Build the Style statements that will be refereded to 
+   * by the polygons listed later.  
+   * 
+   * @param kml
+   * @param document
+   * @param aspect
+   * @return Style[] array of KML Style instances
+   */
+  private Style[] setupStyles(KmlDoc kml,Element document, Aspect aspect) {
+	Document doc = kml.getDocument();	
+	int max = aspect.getRange().length;
+	// define the Style sections
+	Style[] styles = new Style[max];
+	for (int k=0;k<max;k++) { 
+		styles[k] = new Style(doc,"Style"+k);
+		styles[k].setLineStyle(0.3);
+		document.appendChild(styles[k].getElement());
+		/* set the PolyStyle value with color in hex format:
+		 *          oobbggbb  
+		 *            00 Opacity (00 to ff)
+		 *            bb Blue (00 to ff)
+		 *            gg green (00 to ff)
+		 *            rr red  (00 to ff)
+		 */ 
+		int oo = 0;
+		int blue = 0;
+		int red = 0;
+		int green = 0;
+		/**
+		 * Use our preference to outline the borders
+		 */ 
+		boolean outline = GEPreferencePage.isShowBorder();				
+		
+		if (k==0) {
+			// Style0 does not show the polygon			
+			styles[0].setPolyStyle("0", outline);
+		} else {
+			blue = aspect.getBlue(k);
+			red = aspect.getRed(k);
+			green = aspect.getGreen(k);
+			oo = aspect.getOpacity(k);
+			
+			String hex = StemKml.getHex(oo)+
+			             StemKml.getHex(blue)+
+			             StemKml.getHex(green)+
+			             StemKml.getHex(red);
+			styles[k].setPolyStyle(hex,outline);
+		}
+	}
+	return styles;
+  }
+  
+  
+  /**
+   * Select the color to be used by the GoogleEarth Polygon
+   * based on the relative value for the property
+   * 
+   * @param aspect  enum value specifing which type of
+   *                display is shown (population, susceptible, 
+   *                exposed,infectious,recovered)
+   * @param geData
+   * 
+   * @return  value 0 to MAX that determines which grouping
+   *   of polygons this area will be displayed with.
+   */
+  
+  public int selectByValue(Aspect aspect, GEData geData) {
+ 
+  	int type = 0;
+
+  	try {
+  		String code = aspect.getCode();
+  		Assert.isNotNull(code, "Aspect code is null");
+  		if (code == null)
+  			return 0;
+  		Map<String,Double> map = geData.getValueMap();
+  		Assert.isNotNull(map, "Aspect map is null");  					
+  		double value = 0.0;
+  		if (map != null) {
+  			Double d = map.get(code);
+  			if (d != null)
+  			    value = d;
+  		} else { 
+  			return 0;
+  		}
+  		
+  		double[] range = aspect.getRange();	
+  		for (int i=0; i<range.length; i++) {
+  			if (value <= range[i]) {
+  				type = i;
+  				break;
+  			}
+  		}
+  		
+  		
+  		
+  	} catch (RuntimeException e1) {
+
+  		GELog.error("selectByValue",e1);
+  	}
+  	return type;  
+  }
+  
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplayCustom.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplayCustom.java
new file mode 100644
index 0000000..252626f
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplayCustom.java
@@ -0,0 +1,300 @@
+package org.eclipse.stem.ui.ge.kml;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEData;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Custom display OF SEIR aspects. 
+ *   
+ */
+public class KmlDisplayCustom implements IKmlDisplay   {
+
+	
+    /**
+     * Create the KML control file to display all of the 
+     * polygon (county) areas
+     *
+     * We will have N PlaceMarks, each of which will 
+     * be associated with a differnt Style (for color) 
+     * The polygons will be placed in a placemark based
+     * on the color selection.
+     * 
+     * @param controlFileName File where KML will be written 
+     * @param geData Map of GEData objects 
+     * @param aspect  which type of map (population,susceptiple...
+     * 
+     */
+    
+	public void generatePolygons(String controlFileName, 
+			Map<String,GEData> geData, Aspect aspect) {
+        
+		GELog.debug(this,"generatePolygons: aspect="+
+				aspect +" number="+geData.size());
+		
+		KmlDoc kml = new KmlDoc();
+		Document doc = kml.getDocument();
+		Element root = kml.setRoot(null);
+		Element document = kml.appendElement(root,"Document");
+		Style[] styles = setupStyles(kml,document,aspect);
+		int max = styles.length;
+		
+		//Setup the placemarks for polygons with same attribute
+		PlaceMark[] placeMark = new PlaceMark[max];
+		Element[] multiGeometry = new Element[max];
+		for (int j=0;j<max;j++) {
+			placeMark[j] = new PlaceMark(doc);
+			document.appendChild(placeMark[j].getElement());
+			placeMark[j].setDescription("STEM map");
+
+			placeMark[j].setName("STEM"+j);
+			placeMark[j].setStyleUrl(styles[j]);   
+			multiGeometry[j] = doc.createElement("MultiGeometry");
+			placeMark[j].appendChild(multiGeometry[j]);
+		} 
+		
+		// now we generate a polygon for each county
+//		int debugcounter =0;
+		Iterator it = geData.entrySet().iterator();
+		while(it.hasNext()) {
+			int type = 0;
+			Map.Entry e = (Map.Entry)it.next();
+			GEData data = (GEData)e.getValue();
+			String county = data.getName();	
+//			 check if we are filtering out some areas
+			if (filter(data))  {
+				type = 0;	
+			} else {
+				type = selectByValue(data);
+			}
+
+			// ignore return type -1
+            
+			if (type >=0) {
+				for (int i = 0; i < data.getNumAreas(); i++) {
+					String coord = data.getCoordinatesAsString(i);
+					
+					Polygon polygon = new Polygon(doc);
+					kml.appendText(polygon.getElement(), "name", county);
+					polygon.setCoordinates(coord);
+					multiGeometry[type].appendChild(polygon.getElement());
+				}
+			}
+
+		}
+
+		//GELog.debug(this,"start write of "+controlFileName);
+		kml.writeFile(controlFileName);
+		//GELog.debug(this,"end write of "+controlFileName); 
+		return;
+	}
+	
+	/**
+	 * check if this entry should be filtered out 
+	 * 
+	 * @param data  Instance that contains info for this admin area
+	 * 
+	 * @return true if it should be filtered out.
+	 */
+	private boolean filter(GEData data) {
+		boolean filtered = false;
+		if (GEPreferencePage.isTest()) {			
+			String county = data.getName();	
+			if (county.indexOf(" US-")>= 0 ) {					
+				filtered = false;
+			
+			} else if (county.indexOf(" MEX")>= 0 ) {					
+				filtered = false;
+			} else {
+				filtered = true;
+			}
+		}
+		return filtered;
+	}
+
+//	<Style id="Style1">
+//	  <LineStyle>
+//	     <width>0.3</width>
+//	  </LineStyle>
+//	  <PolyStyle>
+//	    <outline>0</outline>
+//	    <fill>1</fill>
+//	    <color>800000f0</color>
+//	  </PolyStyle>
+//	</Style>
+  /**
+   * Build the Style statements that will be refereded to 
+   * by the polygons listed later.  
+   * 
+   * @param kml
+   * @param document
+   * @param aspect
+   * @return Style[] array of KML Style instances
+   */
+  private Style[] setupStyles(KmlDoc kml,Element document, Aspect aspect) {
+	Document doc = kml.getDocument();	
+	/**
+	 * Do not outline the borders
+	 */ 		
+	boolean outline = false;
+	int max = 9;
+	// define the Style sections
+	Style[] styles = new Style[max];
+	for (int k=0;k<max;k++) { 
+		styles[k] = new Style(doc,"Style"+k);
+		styles[k].setLineStyle(0.3);
+		document.appendChild(styles[k].getElement());
+		/* set the PolyStyle value with color in hex format:
+		 *          oobbggbb  
+		 *            00 Opacity (00 to ff)
+		 *            bb Blue (00 to ff)
+		 *            gg green (00 to ff)
+		 *            rr red  (00 to ff)
+		 */ 
+		int oo = 160;
+		int blue = 0;
+		int red = 0;
+		int green = 0;		
+		
+		switch (k) {
+		case 0:  //red
+			red = 0xf0;
+			break;
+		case 1:  // orange
+			red = 0xf0;
+			green = 0xa0;
+			break;	
+		case 2:   // lt green
+			red = 0xd0;
+			green = 0xf0;
+			break;
+		case 3:  //orange
+			red = 0xd0;
+			green = 0xb0;
+			break;
+		case 4:  // lt green
+			red = 0xb0;
+			green = 0xf0;
+			break;
+		case 5:   //orange
+			red = 0xf0;
+			green = 0xc0;
+			break;
+		case 6:  // lt green
+			red = 0xc0;
+			green = 0xf0;
+			break;
+		case 7:  // yellow
+			red = 0xf0;
+			green = 0xf0;
+			break;
+		case 8: // green
+			red = 0x00;
+			green = 0xf0;
+			break;
+		default:
+			break;
+		}
+			
+		String hex = StemKml.getHex(oo)+
+			             StemKml.getHex(blue)+
+			             StemKml.getHex(green)+
+			             StemKml.getHex(red);
+		styles[k].setPolyStyle(hex,outline);
+		
+	}
+	return styles;
+  }
+  
+  
+  /**
+   * Select the color to be used by the GoogleEarth Polygon
+   * based on the relative value for the property
+   * <pre>
+   *  S    E    I     R   Red Green Blue   Type 
+   *   1   0    0     0                      -1
+   *   -   -   >.8    -    F0   00            0
+   *   -  >R   >.6    -    F0   A0            1
+   *   -   -   >.6   >I    D0   F0            2 
+   *   -  >R   >.4    -    D0   B0            3
+   *   -   0   >.4   >I    B0   F0            4
+   *   -  >R   >.2    -    F0   C0            5
+   *   -   -   >.2   >I    C0   F0            6
+   *   -  >R   <.2    -    F0   F0            7
+   *   -   -   <.2   >I    00   F0            8
+   *         
+   * </pre>
+   * 
+   * @param geData Instance that hods info about area including 
+   *               the latest disease state.
+   * 
+   * @return  value 0 to MAX that determines which grouping
+   *   of polygons this area will be displayed with.
+   *   -1 will indicate not to display the polygon
+   */
+  
+    public int selectByValue(GEData geData) {
+
+		int type = 0;
+
+		double s = geData.getValueMap().get("S");
+		double e = geData.getValueMap().get("E");
+		double i = geData.getValueMap().get("I");
+		double r = geData.getValueMap().get("R");
+
+		if (s == 1.0 && e == 0.0 && i == 0.0 && r == 0.0) {
+			type = -1; // uninitialized
+		} else if (i >= 0.2) {
+			type = 0; // red
+		} else if (i >= 0.1 ) {
+			if ( e >= r) {
+				type = 1;  // orange
+			} else {
+				if (r > 0.9)
+				    type = 8;  // lt green
+				else 
+					type = 0;  // red
+			}
+//		} else if (i >= 0.4 ) {
+//			if ( e >= r) {
+//				type = 3;  //  red green  
+//			} else {
+//				type = 4;  // green red
+//			}
+		} else if (i > 0.01 ) {
+			if ( e >= r) {
+				type = 1;  // orange
+			} else {
+				type = 8;  // green red
+			}
+		} else if (e >= r) {			
+			type = 7; //   // yellow
+		} else {
+			type = 8;      // green
+			
+		}
+		if (geData.getName().contains(" 25017")) {
+			GELog.debug(this, geData.getName() + " "
+					+ geData.getValuesAsString() + " " + type);
+		}
+		return type;
+	}
+  
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplaySelection.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplaySelection.java
new file mode 100644
index 0000000..9ebc03e
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDisplaySelection.java
@@ -0,0 +1,244 @@
+package org.eclipse.stem.ui.ge.kml;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEData;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Display the polygon and placemark as the result of a 
+ * Selection event from a MapView mouse click. 
+ *
+ */
+public class KmlDisplaySelection implements IKmlDisplay   {
+
+	/**
+     * initialization
+     * 
+     * currently we have nothing to do
+     * 
+     * 
+     */
+    public void init() {
+    	        
+    }
+    /**
+     * Create the KML control file to display a
+     * selected admin area and placemark icon.
+     * The GEData objects in the Map that is passed 
+     * contains the information about the polygon and 
+     * the points where the placemark icons are to be 
+     * placed.
+     *      * 
+     * @param controlFileName File where KML will be written 
+     * @param geData Map of GEData objects 
+     * 
+     */
+    
+	public void generatePolygons(String controlFileName,
+			Map<String, GEData> geData, Aspect unused) {
+		
+		GELog.debug(this, "file=" + controlFileName + " number="
+				+ geData.size());
+
+		KmlDoc kml = new KmlDoc();
+		Document doc = kml.getDocument();
+		Element root = kml.setRoot(null);
+		Element document = kml.appendElement(root, "Document");
+		
+		// generate the KML Style info that will be used by 
+		// the followig placemarks
+		Style styles = setupStyles(kml, document);
+		
+		
+        // There is normally only one entry in geData
+		// but handle more
+		
+		Iterator it = geData.entrySet().iterator();
+
+		while (it.hasNext()) {
+			Map.Entry e = (Map.Entry) it.next();
+			GEData data = (GEData) e.getValue();
+			// generate placmark for point
+			PlaceMark placeMark = new PlaceMark(doc);
+			
+			placeMark.setDescription(data.getDescription());
+
+			placeMark.setName(data.getName());
+		
+			placeMark.setStyleUrl(styles);
+			Point point = new Point(doc);
+			double[] pts = data.getPoint();
+			point.setCoordinates(pts[0],pts[1]);
+			placeMark.appendChild(point.getElement());
+			document.appendChild(placeMark.getElement());
+			// Setup the placemarks for polygon	
+			placeMark = new PlaceMark(doc);
+			Element multiGeometry = null;
+			placeMark.setDescription("polygon description");
+
+			placeMark.setName(data.getName());
+		
+			placeMark.setStyleUrl(styles);
+			
+			document.appendChild(placeMark.getElement());
+			
+			multiGeometry = doc.createElement("MultiGeometry");
+			placeMark.appendChild(multiGeometry);
+
+			int n = data.getNumAreas();
+			for (int i = 0; i < n; i++) {
+
+				String coord = data.getCoordinatesAsString(i);
+				String county = data.getName();
+				// if (i > 0)
+				GELog.debug(this,i+": "+county+" "+coord);
+				Polygon polygon = new Polygon(doc);
+				kml.appendText(polygon.getElement(), "name",county );
+				polygon.setCoordinates(coord);
+				multiGeometry.appendChild(polygon.getElement());
+			}
+			
+		}
+
+		kml.writeFile(controlFileName);
+		// GELog.debug(this,"end write of "+controlFileName);
+		kml.display();
+		return;
+	}
+
+	
+	
+	
+//	<Style id="Style">
+//	  <LineStyle>
+//	     <width>0.3</width>
+//	  </LineStyle>
+//	  <PolyStyle>
+//	    <outline>0</outline>
+//	    <fill>1</fill>
+//	    <color>800000f0</color>
+//	  </PolyStyle>
+//	
+//    <BalloonStyle>      
+//      <bgColor>ffffffbb</bgColor>      
+//      <text><![CDATA[
+//      <b><font color="#CC0000" size="+3">$[name]</font></b>
+//      <br/><br/>
+//      <font face="Courier">$[description]</font>
+//      <br/><br/>    
+//      ]]></text>
+//    </BalloonStyle>
+//  </Style>
+  /**
+   * Build the Style statements that will be refereded to 
+   * by the polygons listed later.  
+   * 
+   * @param kml
+   * @param document
+   * 
+   * @return Style  KML Style instances
+   */
+	private Style setupStyles(KmlDoc kml,Element document) {
+		Document doc = kml.getDocument();	
+
+		Style styles = new Style(doc,"StyleSelect");
+		styles.setLineStyle(0.3);
+		document.appendChild(styles.getElement());
+		/* set the PolyStyle value with color in hex format:
+		 *          oobbggbb  
+		 *            00 Opacity (00 to ff)
+		 *            bb Blue (00 to ff)
+		 *            gg green (00 to ff)
+		 *            rr red  (00 to ff)
+		 */ 
+		int oo = 128;
+		int blue = 128;
+		int red = 0;
+		int green = 128;
+		/**
+		 * Use our preference to outline the borders
+		 */ 
+		boolean outline = GEPreferencePage.isShowBorder();				
+
+
+		String hex = StemKml.getHex(oo)+
+		StemKml.getHex(blue)+
+		StemKml.getHex(green)+
+		StemKml.getHex(red);
+		styles.setPolyStyle(hex,outline);
+        
+		styles.setBalloonStyle();
+
+		return styles;
+	}
+
+  
+  /**
+   * Select the color to be used by the GoogleEarth Polygon
+   * based on the relative value for the property
+   * 
+   * @param aspect  enum value specifing which type of
+   *                display is shown (population, susceptible, 
+   *                exposed,infectious,recovered)
+   * @param geData
+   * 
+   * @return  value 0 to MAX that determines which grouping
+   *   of polygons this area will be displayed with.
+   */
+  
+  public int selectByValue(Aspect aspect, GEData geData) {
+ 
+  	int type = 0;
+
+  	try {
+  		String code = aspect.getCode();
+  		Assert.isNotNull(code, "Aspect code is null");
+  		if (code == null)
+  			return 0;
+  		Map<String,Double> map = geData.getValueMap();
+  		Assert.isNotNull(map, "Aspect map is null");  					
+  		double value = 0.0;
+  		if (map != null) {
+  			Double d = map.get(code);
+  			if (d != null)
+  			    value = d;
+  		} else { 
+  			return 0;
+  		}
+  		
+  		double[] range = aspect.getRange();	
+  		for (int i=0; i<range.length; i++) {
+  			if (value <= range[i]) {
+  				type = i;
+  				break;
+  			}
+  		}
+  		
+  		
+  		
+  	} catch (RuntimeException e1) {
+
+  		GELog.error("selectByValue",e1);
+  	}
+  	return type;  
+  }
+  
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDoc.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDoc.java
new file mode 100644
index 0000000..90344d8
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/KmlDoc.java
@@ -0,0 +1,455 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.stem.ui.ge.GELog;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+
+
+/**
+ * Utility class used for Google Earth KML support.
+ * 
+ *  This class is used to build a KML file to be passed to
+ *  Google Earth.  
+ *  
+ *  It basically creates an XML file using KML related arguments.
+ *  
+ *  See the example in the "main()" method for an example of 
+ *  how to use the class.
+ * 
+ *
+ *
+ */
+public class KmlDoc {
+
+    
+
+    /**
+     * This class name
+     */
+    private static final String _className = "KmlDoc";
+
+    
+
+    /**
+     * 
+     * A KML document
+     */
+    private Document _doc;
+    
+    //private Element _root = null;
+   
+    /**
+     * Construct an instance of KmlDoc.
+     * 
+     * The Document object is created but nothing is put
+     * into it.
+     * 
+     */
+    public KmlDoc() {
+        String methodName = _className + ".KmlUtil(constructor) ";
+        // Create a new parser using the JAXP API (javax.xml.parser)
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder docBuilder = null;
+        try {
+            docBuilder = factory.newDocumentBuilder();
+            if (docBuilder != null)
+              _doc = docBuilder.newDocument();
+        } catch (ParserConfigurationException pce) {
+            debug(methodName+ " Error configuring xml document builder"
+                    + pce.getMessage());
+        }// try
+
+                
+
+    } // constructor
+
+    /**
+     * Setup the root of the KML document.
+     * 
+     * 
+     * @param xmlns Value for xmlns 
+     * (if null,  use default "http://earth.google.com/kml/2.0")
+     * @return xml element
+     */
+    
+    public Element setRoot(String xmlns) {
+        //String methodName = _className + ".setRoot ";
+        if (xmlns == null)
+          xmlns="http://earth.google.com/kml/2.1";     
+        
+        Element root = _doc.createElement("kml");
+        root.setAttribute("xmlns",xmlns);
+        _doc.appendChild(root);
+        return root;
+    } // 
+
+    
+    /**
+     * 
+     * Write an Xml document to an outputStream
+     * 
+     *
+     * @param xmlFileName_
+     */
+
+    public  void writeFile(String xmlFileName_) {
+
+        try { 
+
+            FileOutputStream outputStream = new FileOutputStream(xmlFileName_);  
+            write(outputStream);
+            
+        } catch (Exception e) {
+        	debug(e);
+        }
+   }
+    /**
+     * 
+     * Write an Xml document to an outputStream
+     * 
+     *
+     * @param os Allocated output Stream
+     */
+
+    public  void write(OutputStream os) {
+        try {
+            // Use a Transformer for output
+            TransformerFactory tFactory = TransformerFactory.newInstance();
+            Transformer transformer = tFactory.newTransformer();
+            // turn on indentations
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+          
+            // the document source
+            DOMSource docSource = new DOMSource(_doc);
+            
+            StreamResult result = new StreamResult(os);
+
+            // output the doc
+            transformer.transform(docSource, result);
+
+            os.flush();
+
+            os.close();
+
+        } catch (Exception e) {
+            debug(e);
+        }
+    } // end write
+    
+    
+    /**
+     * Display the current Kml document on stdOut.
+     *   <br>
+     *      * 
+     * 
+     */
+
+    public void display() {
+
+        try {
+            
+            // Use a Transformer for output
+            TransformerFactory tFactory = TransformerFactory.newInstance();
+            Transformer transformer = tFactory.newTransformer();
+            // turn on indentations
+            transformer.setOutputProperty("indent", "yes");
+
+          
+            // the document source
+            DOMSource docSource = new DOMSource(_doc);
+
+            // the stream
+            
+            StreamResult result = new StreamResult(System.out);
+
+            // output the doc
+            transformer.transform(docSource, result);
+
+            
+           
+
+        } catch (Exception e) {
+            debug(e);
+        }
+    } // end display
+    
+    /**
+     * debug output method 
+     * @param msg 
+     */
+    public void debug(String msg) {
+        GELog.debug(this,msg);
+        
+    }
+    
+
+    /**
+     * debug output method 
+     * @param method 
+     * @param msg 
+     */
+    public void debug(String method,String msg) {
+        GELog.debug(this,method+msg);
+        
+    }
+
+    /**
+     * debug output method 
+     * @param t 
+     */
+    public void debug(Throwable t) {
+        GELog.error("KmlDoc failure",t);
+        
+    }
+    /**
+     * debug output method 
+     * @param msg 
+     * @param t 
+     */
+    public void debug(String msg,Throwable t) {
+    	GELog.error("KmlDoc: "+msg,t);
+        
+    }
+
+    /**
+     * @return Returns the _doc.
+     */
+    public Document getDocument() {
+        return _doc;
+    }
+
+    /**
+     * @param _doc The _doc to set.
+     */
+    public void setDocument(Document _doc) {
+        this._doc = _doc;
+    }
+    /**
+     * Utility method to Create an element that has 
+     * a name and value only. 
+     * <pre>
+     * There is probably a better way to do this but ...
+     *  
+     *   
+     *   
+     * * @param doc Document
+     * @param tag  xml tag
+     * @param value  string value of tag
+     * @return XML element
+     */
+    
+    public static Element createAttr(Document doc,String tag,String value) {
+       
+        Element nm = doc.createElement(tag);
+        Text t = doc.createTextNode(value);
+        nm.appendChild(t);        
+        return nm;
+    }
+    /**
+     * Utility method to Create an element that has 
+     * a name and CData value only. 
+     * <pre>
+     * There is probably a better way to do this but ...
+     *  
+     *   
+     *   
+     * * @param doc Document
+     * @param tag  xml tag
+     * @param value  string value of tag
+     * @return XML element
+     */
+    
+    public static Element createCDataAttr(Document doc,String tag,String value) {
+       
+        Element nm = doc.createElement(tag);
+        Text t = doc.createCDATASection(value);
+        nm.appendChild(t);        
+        return nm;
+    }
+    /**
+     * Utility method to append an element that has 
+     * no values. 
+     * <pre>     
+     *  Creates an XML tag and
+     *  places it in the document as a child of the 
+     *  specified element.
+     *  
+     *   Creates <tag>value</tag> 
+     * </pre>
+     * 
+     * 
+     * @param element existing element where new tag is to go
+     * @param tag XML tag
+     * 
+     * @return XML element
+     */
+     
+    public Element appendElement(Element element,String tag) {
+        
+        Element newtag = _doc.createElement(tag);       
+        element.appendChild(newtag);
+        return newtag;
+    }
+    
+    /**
+     * Utility method to Create an element that has 
+     * a name and Text value only. 
+     * <pre>     
+     *  Creates an XML tag with a text value  and
+     *  places it in the document as a child of the 
+     *  specified element.
+     *   Creates <tag>value</tag> 
+     * </pre>
+     * 
+     * 
+     * @param element existing element where new tag is to go
+     * @param tag XML tag
+     * @param value value of tag
+     * @return XML element
+     */
+     
+    public Element appendText(Element element,String tag,String value) {
+        // if obvious XML tag then treat it special
+        if (value.indexOf("<")>=0 || 
+            value.indexOf(">")>=0 ) {
+            return appendCDATA(element,tag,value);
+        }
+        Element nm = _doc.createElement(tag);
+        Text t = _doc.createTextNode(value);
+        nm.appendChild(t);        
+        element.appendChild(nm);
+        return nm;
+    }
+    
+    /**
+     * Utility method to append an element that has 
+     * a name and CData value only. 
+     * <pre>
+     * 
+     *  
+     *   <tag>value of tag with  html in it</tag>
+     * </pre>
+     * 
+     * 
+     * @param element existing element where new tag is to go
+     * @param tag XML tag
+     * @param value value of tag
+     * @return XML element
+     */
+    public Element appendCDATA(Element element,String tag,String value) {
+       
+        Element nm = _doc.createElement(tag);
+        CDATASection cdata = _doc.createCDATASection(value);
+        nm.appendChild(cdata);        
+        element.appendChild(nm);
+        return nm;
+    }
+    
+    /**
+     * Utility method to Create an element that has 
+     * a name and boolean value only. 
+     * <pre> 
+     *  <tag>1</tag> or <tag>0</tag>
+     *   
+     * </pre>
+     * 
+     * @param doc root document
+     * @param element existing element where new tag is to go
+     * @param tag XML tag
+     * @param value true or false
+     * @return XML element
+     */
+    
+    public Element appendAttr(Element element,String tag,boolean value) {
+       
+        Element nm = _doc.createElement(tag);
+        String strValue = (value)? "1" : "0";
+         
+        Text t = _doc.createTextNode(strValue);
+        nm.appendChild(t);        
+        element.appendChild(nm);
+        return nm;
+    }
+    /**
+     * main class used for debug
+     * @param args
+     */
+    
+    public static void main(String[] args) {
+       KmlDoc kml = new KmlDoc();
+       Document doc = kml.getDocument();
+       Element root = kml.setRoot(null);
+       Element folderA = doc.createElement("Folder");
+       root.appendChild(folderA);
+       Element folderA1 = doc.createElement("Folder");
+       folderA.appendChild(folderA1);
+       PlaceMark placeMark = new PlaceMark(doc);
+       folderA1.appendChild(placeMark.getElement());
+       //placeMark.setDescription("Homebase");
+       kml.appendText(placeMark.getElement(),"description",
+               "Home at<br>119 Third");
+       placeMark.setName("Home");
+       
+       LookAt lookat = new LookAt(doc);
+       lookat.setCoordinates(-122.0059,36.9639);
+       lookat.setRange(305.8880792294568);
+       lookat.setTilt(46.72425699662645);
+       lookat.setHeading(49.06133439171233);
+       placeMark.appendChild(lookat.getElement());
+       
+       //placeMark.setVisibility("0");
+       kml.appendAttr(placeMark.getElement(),"visibility",false);
+       Point point = new Point(doc);
+       point.setCoordinates(-122.0059,36.9639);
+       placeMark.appendChild(point.getElement());
+       
+       Element folderA2 = doc.createElement("Folder");
+       folderA.appendChild(folderA2);
+       
+       Polygon polygon = new Polygon(doc);
+       Coordinates[] corners = new Coordinates[4];
+       corners[0] = new Coordinates(-122.0059,36.9639);
+       corners[1] = new Coordinates(-122.0049,36.9639);
+       corners[2] = new Coordinates(-122.0049,36.99);
+       corners[2] = new Coordinates(-122.0059,36.9639);
+       polygon.setCoordinates(corners);
+       folderA2.appendChild(polygon.getElement());
+       
+       Element folderA3 = doc.createElement("Folder");
+       folderA.appendChild(folderA3);
+       
+       NetworkLink netLink = new NetworkLink(doc);
+       String urlfile = "c:/tmp/test.kml";
+       int interval = 6;
+       netLink.setUrl(urlfile, interval,null);
+       folderA3.appendChild(netLink.getElement());
+       
+       kml.display();
+       kml.writeFile("test1.kml");
+    }
+    
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/LookAt.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/LookAt.java
new file mode 100644
index 0000000..b446473
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/LookAt.java
@@ -0,0 +1,120 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Build the LookAt section of a KML document.
+ * <pre>
+ *    
+ * </pre>
+ * 
+ *
+ */
+/*    
+<LookAt>
+<longitude>-122.0856375356631</longitude>
+<latitude>37.42240551227282</latitude>
+<range>305.8880792294568</range>
+<tilt>46.72425699662645</tilt>
+<heading>49.06133439171233</heading>
+</LookAt>
+
+*/   
+public class LookAt {
+   
+    private Element _lookat = null;
+    
+    private Document _doc = null;
+    /**
+     * LookAt constructor
+     * 
+     * @param doc Document being built
+     */
+    public LookAt(Document doc) {
+        _doc = doc;
+        _lookat = _doc.createElement("LookAt");
+          
+        
+    }
+    
+    /**
+     * @return LookAt Element 
+     */
+    public Element getElement() {
+        return _lookat;
+    }
+
+    /**
+     * Add coordinates to the LookAt section
+     * @param longitude
+     * @param latitude 
+     */
+    public void setCoordinates(double longitude,
+            double latitude) {
+           
+        Element e = KmlDoc.createAttr(_doc,"longitude",Double.toString(longitude));             
+        _lookat.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"latitude",Double.toString(latitude));             
+        _lookat.appendChild(e);
+
+    }
+    /**
+     * Add a attributes to the LookAt section
+     * @param coords as "longitude,latitude,altitude"
+     *  
+     */
+    public void setCoordinates(String coords) {
+        int i1 = coords.indexOf(",");
+        int i2 = coords.lastIndexOf(",");
+        String longitude = coords.substring(0,i1);
+        String latitude = coords.substring(i1+1,i2);   
+        Element e = KmlDoc.createAttr(_doc,"longitude",longitude);             
+        _lookat.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"latitude",latitude);             
+        _lookat.appendChild(e);
+
+    }
+    /**
+     * Add a attributes to the LookAt section
+     * @param range  Altitude of the eye
+     */
+    public void setRange(double range) {
+           
+        Element e = KmlDoc.createAttr(_doc,"range",Double.toString(range));             
+        _lookat.appendChild(e);
+
+    }
+    
+    /**
+     * Add a attributes to the LookAt section
+     * @param tilt
+     */
+    public void setTilt(double tilt) {
+           
+        Element e = KmlDoc.createAttr(_doc,"tilt",Double.toString(tilt));             
+        _lookat.appendChild(e);
+
+    } 
+    
+    /**
+     * Add a attributes to the LookAt section
+     * @param heading
+     */
+    public void setHeading(double heading) {
+           
+        Element e = KmlDoc.createAttr(_doc,"heading",Double.toString(heading));             
+        _lookat.appendChild(e);
+    }
+
+    
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/NetworkLink.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/NetworkLink.java
new file mode 100644
index 0000000..be3221f
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/NetworkLink.java
@@ -0,0 +1,95 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Build the NetworkLink section of a KML document.
+ * <pre>
+ *    
+ * </pre>
+ * 
+ *
+ */
+/*    
+<NetworkLink>
+  <name>NetworkLink </name>
+ <flyToView>1</flyToView> 
+  <Url>
+     <href>E:/tmp/test1.kml</href>  
+     <refreshInterval>10</refreshInterval>   
+     <refreshMode>onInterval</refreshMode>          
+  </Url>
+</NetworkLink>
+*/   
+public class NetworkLink {
+   
+    private Element _networkLink = null;
+    
+    
+    
+    private Document _doc = null;
+    /**
+     * NetworkLink constructor
+     * 
+     * @param doc Document
+     */
+    public NetworkLink(Document doc) {
+        _doc = doc;
+        _networkLink = _doc.createElement("NetworkLink");          
+        
+    }
+    
+    /**
+     * @return  Element 
+     */
+    public Element getElement() {
+        return _networkLink;
+    }
+
+    /**
+     * Add an Url with href attribute
+     * 
+     * <pre>
+     * Note: The url can have one of the the forms:
+     *   http://node:port/address
+     *   c:/path/file.kml
+     *  
+     * The valid URL of "file:///c:/path/file.kml 
+     * does not work with GoogleEarth NetworkLink.   
+     * </pre>
+     * @param url URL to be downloaded
+     * @param interval seconds between refresh
+     * @param mode 
+     * @param refresh mode 
+     *         If null then "onInterval"
+     * @return XML element
+     */
+    public Element setUrl(String url,int interval,String mode) {
+    	Element link = null;
+        link = _doc.createElement("Link");             
+        _networkLink.appendChild(link);   
+        Element e = KmlDoc.createAttr(_doc,"href",url);             
+        link.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"refreshInterval",Integer.toString(interval));             
+        link.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"refreshMode",mode);             
+        link.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"viewRefreshMode","onStop");             
+        link.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"viewRefreshTime","2");             
+        link.appendChild(e);
+        return link;
+    }
+   
+    
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/PlaceMark.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/PlaceMark.java
new file mode 100644
index 0000000..d501921
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/PlaceMark.java
@@ -0,0 +1,94 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * Build the PlaceMark section of a KML document.
+ */
+public class PlaceMark {
+   
+    private Element _placemark = null;
+    
+    private Document _doc = null;
+    /**
+     * PlaceMark constructor
+     * @param doc 
+     */
+    public PlaceMark(Document doc) {
+        _doc = doc;
+        _placemark = _doc.createElement("Placemark");
+       
+        
+    }
+    
+    /**
+     * @return PlaceMark Element 
+     */
+    public Element getElement() {
+        return _placemark;
+    }
+    
+    /**
+     * Add a description tag to the PlaceMark
+     * @param description
+     */
+    public void setDescription(String description) {
+       
+        Element desc = _doc.createElement("description");
+        Text t = _doc.createTextNode(description);
+        desc.appendChild(t);        
+        _placemark.appendChild(desc);
+    }
+    
+    /**
+     * Add a description tag to the PlaceMark
+     * @param name
+     */
+    public void setName(String name) {
+       
+        Element nm = _doc.createElement("name");
+        Text t = _doc.createTextNode(name);
+        nm.appendChild(t);        
+        _placemark.appendChild(nm);
+    }
+    
+    /**
+     * Add a visibility tag to the PlaceMark
+     * @param value   Usually "0"
+     */
+    public void setVisibility(String value) {
+        
+        Element v = KmlDoc.createAttr(_doc,"visibility","0");     
+        _placemark.appendChild(v);
+          
+    }
+    
+    /**
+     * Add a styleUrl pointing to an existing Style 
+     * @param style Style object
+     */
+    public void setStyleUrl(Style style) {
+       String id = style.getId();
+       Element url = KmlDoc.createAttr(_doc,"styleUrl","#"+id);            
+       _placemark.appendChild(url);
+       
+    }
+    /**
+     * Add a section (i.e. LookAt) to the PlaceMark
+     * @param element
+     */
+    public void appendChild(Element element) {            
+        _placemark.appendChild(element);
+    }
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Point.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Point.java
new file mode 100644
index 0000000..04f55a5
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Point.java
@@ -0,0 +1,90 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Build the point section of a KML document.
+ */
+  
+  
+/*
+<Point>    
+    <coordinates>-122.0856204541786,37.42244015321688,50</coordinates>
+  </Point>
+
+*/   
+public class Point {
+   
+    private Element _point = null;
+    
+    private Document _doc = null;
+    /**
+     * Point constructor
+     * @param doc 
+     */
+    public Point(Document doc) {
+        _doc = doc;
+        _point = _doc.createElement("Point");
+          
+        
+    }
+    
+    /**
+     * @return Point Element 
+     */
+    public Element getElement() {
+        return _point;
+    }
+
+    /**
+     * Add coordinates to the Point section
+     *      
+     * @param longitude
+     * @param latitude
+     */
+    public void setCoordinates(double longitude,double latitude) {
+        String coord =  Double.toString(longitude)+","+
+                        Double.toString(latitude);
+        Element e = KmlDoc.createAttr(_doc,"coordinates",coord);             
+        _point.appendChild(e);
+       
+    }
+    /**
+     * Add coordinates to the Point section (with altitude)
+     *      
+     * @param longitude
+     * @param latitude
+     * @param alt
+     */
+    public void setCoordinates(double longitude,double latitude,int alt) {
+        String coord =  Double.toString(longitude)+","+
+                        Double.toString(latitude)+","+Integer.toString(alt);
+        Element e = KmlDoc.createAttr(_doc,"coordinates",coord);             
+        _point.appendChild(e);
+       
+    }
+    
+    /**
+     * Add coordinates as a String to the Point section 
+     *      
+     * @param coord LatLong coordinates
+     * 
+     */
+    public void setCoordinates(String coord) {
+       
+        Element e = KmlDoc.createAttr(_doc,"coordinates",coord);             
+        _point.appendChild(e);
+       
+    }
+    
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Polygon.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Polygon.java
new file mode 100644
index 0000000..920a6b7
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Polygon.java
@@ -0,0 +1,113 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/*
+ * <Polygon>
+ * 
+ *   <outerBoundaryIs>
+ * 
+ *     <LinearRing>
+ * 
+ *        <coordinates>
+ * 
+ * -88.306534, 30.227852, 0.000000
+ * 
+ * ...
+ * 
+ * 88.306534, 30.227852, 0.000000
+ * 
+ *        </coordinates>
+ * 
+ *    </LinearRing>
+ * 
+ *   </outerBoundaryIs>
+ * 
+ * </Polygon>
+ * 
+ */   
+/**
+ * Build the Polygon section of a KML document.
+ */
+  
+  
+
+
+public class Polygon {
+   
+    private Element _polygon = null;
+    
+    private Element _outerBoundaryIs = null;
+    
+    
+    private Document _doc = null;
+    /**
+     * Polygon constructor
+     * @param doc 
+     */
+    public Polygon(Document doc) {
+        _doc = doc;
+        _polygon = _doc.createElement("Polygon");          
+        
+    }
+    
+    /**
+     * @return Polygon Element 
+     */
+    public Element getElement() {
+        return _polygon;
+    }
+
+    /**
+     * Add coordinates to the Polygon section.
+     * 
+     * This is a shortcut for creating a LinearRing 
+     * inside of an outerBoundaryIs.
+     *      
+     * @param corners  coordinates of the corners 
+     *    for the outerRing 
+     * @return xml element
+     * 
+     */
+    public Element setCoordinates(Coordinates[] corners) {
+        
+        String coords = Coordinates.toString(corners);
+        
+        return setCoordinates(coords);
+    }
+    
+    /**
+     * Add coordinates to the Polygon section.
+     * 
+     * This is a shortcut for creating a LinearRing 
+     * inside of an outerBoundaryIs.
+     *      
+     * @param coords  coordinates of the corners 
+     *    for the outerRing 
+     * @return xml element
+     * 
+     */
+    public Element setCoordinates(String coords) {        
+        
+        Element e = KmlDoc.createAttr(_doc,"coordinates",coords);
+        Element linearRing = _doc.createElement("LinearRing");        
+        linearRing.appendChild(e);
+        _outerBoundaryIs = _doc.createElement("outerBoundaryIs");
+        _outerBoundaryIs.appendChild(linearRing);
+        _polygon.appendChild(_outerBoundaryIs);
+        return _outerBoundaryIs;
+    }
+    
+
+    
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKml.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKml.java
new file mode 100644
index 0000000..d71fd76
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/StemKml.java
@@ -0,0 +1,630 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+
+import java.io.*;
+import java.util.*;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.help.internal.appserver.*;
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.GEData;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.ge.Aspect;
+
+import org.eclipse.stem.ui.ge.servlet.VerifyClient;
+import org.eclipse.stem.ui.ge.views.GEPreferencePage;
+import org.eclipse.swt.program.Program;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+
+
+
+/**
+ * StemKML works with GEInterface to handle the 
+ * KML side of the interface between STEM and GoogleEarth.
+ * Refer to GEInterface for more information.
+ * <pre>
+ *     
+ *  
+ *  - PolygonMap  Map<String,GEData> 
+ *       Map of info to generate a set of Polygons
+ *       The key is the area 
+ *       
+ *  - aspect   SEIR value
+ *  - cycle    Nth time interval
+ *  
+ * 
+ * During operation, when appropriate The "controlxxxx.kml" file 
+ * will be rewriten with new instructions.
+ * StemView will call generatePolygons() to generate a control file
+ * that will display all of the county/areas of the map with the 
+ * appropriate color fill to match the corresponding Stem map.
+ * 
+ * When the user selects a specific county/area on the map,
+ * then StemView will call the generatePolygon method.
+ * 
+ *
+ */
+@SuppressWarnings("restriction")
+public class StemKml {
+	/**
+     * Servlet context.  
+     * 
+     */
+    public static final String CONTEXT = "STEM";
+       
+    /**
+     * If internal web server started then this is set true
+     */
+    private static boolean _started = false;
+    /** 
+     * If internal server fails to start then this is set true
+     */
+    private static boolean _failed = false;
+    
+    /**
+     * URL for either the embeded web server or 
+     * an assigned web server.  
+     * If this webserver was inoperative then this
+     * is null.
+     */
+    private static String _baseurl = null;
+    /**
+     * System temp directory. 
+     * calculated once and saved
+     */
+    private static String tmpFolder = null;
+    /**
+     * Number of intensities of color
+     */
+    static final int MAX = 5;
+    static final int MIN = 0;
+    
+    /**
+     *   unique id used for servlet communication
+     */
+    static String servletId = null;
+    /**
+     * FileName for KML control file.
+     */
+    static final String CONTROL_FN = "control.kml";
+    /**
+     * FileName for KML control file used to display
+     * a named admin area.
+     */
+    static final String DISPLAYAREA_FN = "displayarea.kml";
+    /**
+     * if true then servlet will wait when 
+     * sending files to GE and it has run 
+     * out of files to send.  
+     * 
+     */
+    private static boolean waitForKML = true;
+    
+    /**
+     * Interval in seconds between requests
+     * for refresh.  Filled into the 
+     * NetworkLink request.
+     */
+	static int interval = 2;
+    
+	/**
+	 * Indicate if KML is a valid filetype.
+	 * If not then GoogleEarth has probably 
+	 * not been installed and we cannot 
+	 * simply launch a .kml file.
+	 */
+	static boolean validKML = true;
+	/**
+	 * implementation of IKmlDisplay that will create and write
+	 * the KML file that is sent to GoogleEarth.
+	 */
+	private IKmlDisplay display = null;
+	
+
+    /**
+     * Constructor  
+     *
+     */
+    public StemKml() {
+    	
+    	
+       try {
+		   String kmlDisplayClass = Aspect.getKmlDisplayClass();
+
+		   display = (IKmlDisplay)Class.forName(kmlDisplayClass).newInstance();
+	   } catch (Throwable t) {		
+		   GELog.error("Failed to create instance for KmlDisplay", t);
+	   }
+		  	
+      
+    }
+        
+    /**
+     * initialization
+     * 
+     * currently we have nothing to do
+     * 
+     * 
+     */
+    public void init() {
+    	        
+    }
+
+    /**
+     * Verify that GoogleEarth is installed by 
+     * checking that the KML filetype is known.
+     * 
+     * @return true if the KML file type is known.
+     */
+    public static boolean verifyGE() {
+    	
+    	String extension = ".kml";
+    	Program p = Program.findProgram(extension);
+    	if (p != null) {
+    		GELog.debug("StemKml.verifyGE","KML handler: "+p.getName());
+    		   			
+    	} else {
+    		validKML = false;
+    	}
+    	
+    	return validKML;
+    	
+    }
+	/**
+	 * 
+     * Create a GoogleEarth empty control files and launch it 
+     * so that googleEarth starts up.
+     *
+	 * @throws DOMException
+	 */
+	public static void launchGE() throws DOMException {
+		
+		try {
+			
+			String fn = getControlFile();
+			
+		
+			// write an empty control file so that 
+			// to begin with, nothing happens but 
+			// GoogleEarth gets a headstart on initialization
+			
+			KmlDoc kml = new KmlDoc();
+			kml.setRoot(null);
+			kml.getDocument();
+			kml.writeFile(fn);
+			GELog.debug("StemKml.launchGE",fn);
+			// launch the file
+			// 
+			launch(fn);
+			Thread.sleep(1*1000);
+		} catch (Exception e) {
+			String msg = "Error launching initial GoogleEarth control file.";
+			GELog.error(msg,e);
+		}
+	}
+	
+	
+	/**
+	 * Generate the name used for KML Control.
+	 * 
+	 * @return Fully qualified filename (e.g. c:/tmp/control.kml)
+	 */
+	public static String getControlFile() {	
+		String fn = null;
+		if (tmpFolder == null) {
+			tmpFolder = getTmpFolder();
+		}
+		if (tmpFolder == null) {
+			GELog.error("Unable to generate KML Control file.",null);
+		} else {
+		
+		    fn = tmpFolder+File.separator+CONTROL_FN;
+		}
+		
+		return fn;
+	}
+	/**
+	 * obtain the system temporary folder.
+	 * 
+	 * @return Fully qualified path (e.g. c:/tmp or /tmp)
+	 */
+	public static String getTmpFolder() {	
+		String tmp = null;
+		String slash = File.separator;		
+		try {
+			File tmpFile = File.createTempFile("control",".kml",null);
+			tmp = tmpFile.getParent();
+			tmpFile.delete();		
+			
+		} catch (IOException e) {			
+			GELog.error("System Temporary Directory not defined: ",null);
+			// if no system temp folder, use our log folder
+			tmp = getLogFolder();
+			tmp = tmp+slash+"tmp";
+			File tmpFile = new File(tmp);
+			tmpFile.mkdirs();
+			
+		} catch (Exception e) {			
+			GELog.error("Failure getting TMP folder.",e);
+			
+		}
+		return tmp;
+	}
+	/**
+	 * obtain the users preference for the folder
+	 * used to generate KML files.
+	 * 
+	 * @return Fully qualified path (e.g. c:/tmp or /tmp)
+	 */
+	public static String getLogFolder() {	
+		String log = null;
+				
+		try {
+			log = GEPreferencePage.getFolder();
+			File logFolder = new File(log);
+			if (logFolder.exists()) {
+				if (logFolder.isDirectory()) {
+					return log;
+				} else {
+					throw new RuntimeException("Log Folder "+
+							log+ " is not valid");
+				}
+			}  else {
+				boolean ok = logFolder.mkdirs();
+				if (ok)
+					return log; 
+				else 
+					throw new RuntimeException("Log Folder "+
+							log+ " cannot be created ");
+			}
+			
+			
+		} catch (Exception e) {			
+			GELog.error("Failed to get LOG folder: "+log,e);
+			log = null;
+		} 
+		return log;
+	}
+	/**
+	 * Generate the name used for KML when using
+	 * the DisplayArea utility function
+	 * 
+	 * @return Fully qualified filename (e.g. c:/tmp/control.kml)
+	 */
+	public static String getDisplayAreaFile() {	
+		String fn = null;
+		try {
+			if (tmpFolder == null) {
+				File tmpFile = File.createTempFile("displayarea",".kml");
+				tmpFolder = tmpFile.getParent();
+				tmpFile.delete();
+			}
+			fn = tmpFolder+"/"+DISPLAYAREA_FN;
+		} catch (IOException e) {			
+			GELog.error("Unable to generate KML DisplayArea file.",e);
+		}
+		return fn;
+	}
+	/**
+	 *  write an empty control file so that 
+	 *  it clears the current display
+	 */
+	public static void clearDisplayArea() {
+		String fn = tmpFolder+"/"+DISPLAYAREA_FN;	
+		
+		KmlDoc kml = new KmlDoc();
+		kml.setRoot(null);
+		kml.getDocument();
+		kml.writeFile(fn);
+		
+		// launch the file
+		// 
+		launch(fn);
+	}
+    /**
+	 * create and launch a network link file that will read the 
+	 * kml files that we will be generating.
+     *
+     * @param folder Folder that contains KML files
+     * @param file   If not null then pass this name to the servlet.  
+     * @return URL used
+	 *
+	 */
+	public static String launchNetworkLink(	String folder, String file) {
+					
+		String url = null;
+		// clear if needed
+		StemKml.launchGE();
+
+		try {
+			
+			String fn = getControlFile();
+			
+			long time = new Date().getTime();
+			servletId = Long.toHexString(time);
+			String wait = "n";
+			if (waitForKML) 
+				wait = "y";
+            
+			url = _baseurl+
+				"/"+CONTEXT+"/slideshow?id="+servletId+
+				"&folder="+folder+
+				"&wait="+wait;
+			if (file != null) {
+				url = url+"&file="+file;
+			}
+			GELog.debug(StemKml.class,"launchNetworkLink url="+url);
+			
+			StemKml.writeNetLink(fn, interval, url);
+			
+			String bboxurl = _baseurl+
+			       "/"+CONTEXT+"/bbox?id="+servletId;
+			
+			// start Thread to access BBox info from GE
+			if (GEPreferencePage.isBBOX()) {
+				BBoxInfo bbox = new BBoxInfo(bboxurl,servletId);
+				Thread t = (new Thread(bbox));
+				t.start();
+			}
+			try {
+				Program.launch(fn);
+				GELog.debug(StemKml.class,"Launched networkLink file "+fn);
+				Thread.sleep(5*1000);
+			} catch (InterruptedException ie) {
+			} catch (Throwable e) {
+				GELog.error("Launch failure", e);
+			}
+		} catch (Exception e) {
+			GELog.error("Failure launching NetworkLink.kml file",e);
+			
+		}
+		return url;
+    }
+	/**
+	 * 
+	 * Write the network Link file that will tell GoogleEarth how 
+	 * to make callbacks to the servlet.
+	 * 
+	 * @param fn  folder + fn to write  
+	 * @param interval  How often to call back (seconds)
+	 * @param url     Where to call back + parms
+	 * @throws DOMException
+	 */
+	public static void writeNetLink(String fn, int interval, String url) 
+	  throws DOMException {
+		KmlDoc kml;
+		// write a file using networklink that tells 
+		// google earth to read the control file 
+		// every N seconds and do whatever it says.
+		kml = new KmlDoc();        
+		Document doc = kml.getDocument();
+		Element root = kml.setRoot(null);
+		NetworkLink netLink = new NetworkLink(doc);        
+
+		String mode = "onInterval";
+		netLink.setUrl(url, interval,mode);
+		// add <flyToView>1</flyToView> 
+		kml.appendAttr(netLink.getElement(),"flyToView",false);
+		root.appendChild(netLink.getElement());
+
+		//kml.display();  // debug
+		kml.writeFile(fn);
+	}
+	
+	
+  /**
+  * Create the KML control file to display all of the 
+  * polygon (county) areas
+  *
+  * Call the implementation of IKmlDisplay to create and 
+  * write the kml file.
+  * 
+  * @param controlFileName File where KML will be written 
+  * @param geData Map of GEData objects 
+  * @param aspect  which type of map (population,susceptiple...
+  * @param cycle current number of cycle being displayed
+  */
+    
+	public void generatePolygons(String controlFileName, 
+			Map<String,GEData> geData, Aspect aspect,long cycle) {
+ 	
+	    
+	    display.generatePolygons(controlFileName, geData, aspect);
+	}
+		
+ 
+
+      
+
+    /**
+	 * get the Hex value corresponding to an int value. 
+	 * This has leading zeros.
+	 * 
+	 * @param v      value to translate.
+	 * @return Hex String
+	 */
+	public static String getHex(int v) {
+		String hex = Integer.toHexString(v);
+		if ((hex.length() % 2) != 0) {
+			hex = "0" + hex;
+		}
+		return hex;
+	}
+
+/**
+ * Launch the KML file to GoogleEarth
+ * 
+ * @param controlFileName
+ *            absolute file path or a url
+ * 
+ */
+public static void launch(String controlFileName) {
+	try {
+		if (!validKML) {
+			GELog.debug("launch: KML is unknown filetype");
+			return;
+		}
+		File controlFile = new File(controlFileName);
+		
+		
+		Program.launch(controlFile.getAbsolutePath());
+		GELog.debug("StemKml.launch","Launched file "+controlFileName);
+	} catch (Throwable e) {
+		GELog.error("StemKml: Launch failure", e);
+	}
+}
+
+/** 
+ * Startup and verify a web server to run the 
+ * GEServlet servlets.
+ * 
+ * If specified it will try to start the embedded web server
+ * If not or it failed then it will check if an 
+ * external server was specified and try to access it.
+ * 
+ * @return url for host and port 
+ *       example: http://127.0.0.1:54345/
+ *       It will return null if unable to start server or 
+ *       if server does not support our servlets
+ */	 
+public static String initWebServer() {
+	
+	if (GEPreferencePage.isInternalServer()){		
+		_baseurl = startWebServer();		
+	}
+	
+	if (_baseurl == null ) {
+		String host =GEPreferencePage.getServerHost();
+		if (host != null && host.length() > 0)
+			_baseurl = "http://"+host;
+	} 
+	if (_baseurl != null) {
+		GELog.debug(StemKml.class,"VerifyClient "+_baseurl);
+		// verify that we have a working web server
+		VerifyClient vc = new VerifyClient();
+		boolean test = vc.verify(_baseurl+
+			            	"/"+CONTEXT+"/verify");
+		if (! test) {
+			GELog.info(vc.getError());
+			GELog.error("StemKml: Unable to communicate with web server @ "
+					+_baseurl,null);
+			if (GEPreferencePage.isInternalServer()){
+				_failed = true;
+			}
+			_baseurl = null;
+		} 
+	}
+	if (_baseurl == null) {
+		GELog.error("GoogleEarth Servlet support disabled",null);
+	}
+	return _baseurl;
+}
+
+/** 
+ * Startup an internal web server to run the 
+ * GEServlet servlets.
+ * @return url for host and port 
+ *       example: http://127.0.0.1:54345/
+ *       It will return null if unable to start server
+ */	
+@SuppressWarnings({ "deprecation" }) 
+public static String startWebServer() {
+	String url = null;
+	if (!_started && !_failed)	  {
+	    try {
+	    	GELog.debug(StemKml.class,"Start webServer");
+			WebappManager.start(CONTEXT, Activator.PLUGIN_ID, Path.EMPTY);
+			
+			String internalHost = WebappManager.getHost() + ":" + WebappManager.getPort();
+			 url = "http://" +  internalHost;
+			 GELog.debug(StemKml.class,"Started webServer "+url);
+			 
+		} catch (CoreException e) {
+			GELog.error(e.getMessage(), e);
+			_failed = true;
+			url = null;
+		}
+	  } else if (!_failed ) {
+		  String internalHost = WebappManager.getHost() + ":" + WebappManager.getPort();
+			 url = "http://" +  internalHost; 
+	  }
+	GELog.debug(StemKml.class,"embedded web server at: "+url);
+	if (! _failed) 
+		_started = true;
+	return url;
+}
+
+/**
+ * obtain the URL used to access the GE Servlets.
+ * 
+ * @return The URL as a string, null if unable to 
+ *   access a valid web server.
+ */
+static public String getServerUrl() {
+	return _baseurl;
+}
+
+/**
+ * Set the filename based on the Template and 
+ * the current aspect and cycle number.
+ * 
+ * @param folder Folder where kml files are written
+ * @param template 
+ * @param aspect aspect to be displayed
+ * @param cycle
+ * 
+ * @return resulting absolute filename
+ */
+	public static String getControlFN(String folder, String template,
+			Aspect aspect, long cycle) {
+        String controlFN = "";
+		String seq = "0000" + cycle;
+		if (cycle > 9)
+			seq = "000" + cycle;
+		if (cycle > 99)
+			seq = "00" + cycle;
+		if (cycle > 999)
+			seq = "0" + cycle;
+		if (cycle > 9999)
+			seq = "" + cycle;
+		// we won't worry about cycle > 99,999
+		
+		controlFN = folder + "/" + template;
+		controlFN = controlFN.replaceAll("&T", aspect.toString());
+		controlFN = controlFN.replaceAll("&N", seq);
+		GELog.debug(StemKml.class,"Output file="+controlFN);
+		return controlFN;
+
+	}
+/**
+ * 
+ * @return true if servlet should wait when it has
+ *  sent all of the available kml files to GE
+ */
+public static boolean isWaitForKML() {
+	return waitForKML;
+}
+/**
+ * Set true if servlet should wait
+ * @param waitForKML
+ */
+public static void setWaitForKML(boolean waitForKML) {
+	StemKml.waitForKML = waitForKML;
+}
+ 
+}// class
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Style.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Style.java
new file mode 100644
index 0000000..33818a6
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/kml/Style.java
@@ -0,0 +1,169 @@
+package org.eclipse.stem.ui.ge.kml;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Build the Style section of a KML document.
+ * <pre>
+ *    
+ * </pre>
+ * 
+ *
+ */
+  
+  
+/*
+    <Style> 
+          <LineStyle >
+            <width>3.0</width>
+            <color>7d00ffff</color>
+          </LineStyle>
+          <PolyStyle>
+           <fill>0</fill>
+           <outline>0</outline>
+          </PolyStyle>
+       
+     </Style>
+*/   
+public class Style {
+   
+    private Element _style = null;
+    
+    private Document _doc = null;
+    
+    private String  _id = "StyleURL";
+    /**
+     * Style constructor
+     * @param doc 
+     */
+    public Style(Document doc) {
+        _doc = doc;
+        _style = _doc.createElement("Style");
+          
+        
+    }
+    /**
+     * Style constructor
+     * @param doc 
+     * @param id 
+     */
+    public Style(Document doc,String id) {
+        _doc = doc;
+        _id = id;
+        _style = _doc.createElement("Style");
+        _style.setAttribute("id",_id);  
+        
+    }
+    /**
+     * @return Style Element 
+     */
+    public Element getElement() {
+        return _style;
+    }
+    /**
+     * @return id 
+     */
+    public String getId() {
+        return _id;
+    }
+    /**
+     * Add LineStyle to the Style section
+     *      
+     * Color is of hexidecimal form oobbggrr where:
+     *   oo is 00-ff opacity value
+     *   bb is 00-ff blue
+     *   gg is 00-ff green
+     *   rr is 00-ff red 
+     *  so 7fff0000 is Blue with 50%  opacity
+     *       
+     * @param width line width (e.g. 3.0) 
+     * @param color line color (e.g. 7d00ffff)
+     */
+    public void setLineStyle(float width,String color) {
+        Element lineStyle = _doc.createElement("LineStyle");                     
+        _style.appendChild(lineStyle);
+        Element e = KmlDoc.createAttr(_doc,"width",Float.toString(width)); 
+        lineStyle.appendChild(e);
+        e = KmlDoc.createAttr(_doc,"color",color); 
+        lineStyle.appendChild(e);
+    }
+   
+    /**
+     * Add LineStyle to the Style section
+     *      
+     * @param width line width (e.g. 3.0) 
+     * 
+     */
+    public void setLineStyle(double width) {
+        Element lineStyle = _doc.createElement("LineStyle");                     
+        _style.appendChild(lineStyle);
+        Element e = KmlDoc.createAttr(_doc,"width",Double.toString(width)); 
+        lineStyle.appendChild(e);
+        
+    }
+    /**
+     * Add PolyStyle to the Style section
+     * @param color  KML color
+     * @param outline true if outline option to be added
+     */
+    public void setPolyStyle(String color, boolean outline) {
+        Element polyStyle = _doc.createElement("PolyStyle");                     
+        _style.appendChild(polyStyle);
+        Element e = null;
+        if (! outline) { // default is true
+            e = KmlDoc.createAttr(_doc,"outline","0");
+            polyStyle.appendChild(e); 
+        } 
+        if (color.equals("0")) {
+            e = KmlDoc.createAttr(_doc,"fill","0");
+            polyStyle.appendChild(e);
+        } else {
+            e = KmlDoc.createAttr(_doc,"fill","1");
+            polyStyle.appendChild(e);
+            e = KmlDoc.createAttr(_doc,"color",color);        
+            polyStyle.appendChild(e);
+        }
+        
+    }
+    
+    /**
+     * Add BaloonStyle to the Style section
+     * <pre>
+     *    <BalloonStyle>      
+            <bgColor>ffffffbb</bgColor>      
+            <text><![CDATA[
+               <b><font color="#CC0000" size="+3">$[name]</font></b>
+               <br/><br/>
+               <font face="Courier">$[description]</font>
+               <br/><br/>    
+               ]]>
+             </text>
+         </BalloonStyle>
+     * </pre>
+     * @param color  KML color
+     * @param outline true if outline option to be added
+     */
+    public void setBalloonStyle() {
+        Element balloonStyle = _doc.createElement("BalloonStyle");                     
+        _style.appendChild(balloonStyle);
+        Element e = null;
+ 
+        String text = "<b><font color=\"#CC0000\" size=\"+3\">$[name]</font></b> \n" +
+                      "<br/><br/> \n" +
+                      "<font face=\"Courier\">$[description]</font> \n" +
+                      "<br/><br/> "; 
+
+       e = KmlDoc.createCDataAttr(_doc,"text",text);
+       balloonStyle.appendChild(e);
+    }
+} // end class
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/BBoxServlet.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/BBoxServlet.java
new file mode 100644
index 0000000..1f7c394
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/BBoxServlet.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Servlet that provides a service interface allows the client to 
+ * get the BBox info that was sent to SlideShowServlet by GoogleEarth. 
+ * 
+ * 
+ * 
+ * 
+ * 
+ */
+public class BBoxServlet extends HttpServlet {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private final String DEFAULT_BBOX = 
+		    "-75.20637865775808,40.19453859682661," +
+			"-68.769920795513,43.94930914694464";	
+  /**
+  * Service interface. 
+  * - BBox - Send back the GE BBox info
+  * 
+  * 
+  * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
+  */
+ protected void service(HttpServletRequest request,HttpServletResponse response) 
+         throws ServletException, IOException {
+ 	
+		DataInputStream in = 
+			new DataInputStream(request.getInputStream());
+		response.setContentType("application/octer-stream");
+		// use ByteArray output
+		ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+		
+		DataOutputStream output =
+			new DataOutputStream(byteOutput);
+		//
+		// read the input from the client
+		//
+		String command = in.readUTF();
+		// BBOX servletID 
+		
+		if (command.startsWith("BBOX ")) {
+			String id = command.substring(5).trim();
+			SlideShowInfo info = SlideShowServlet.getInfo(id);
+			//SlideShowServlet.debug("id: "+id+" info: "+info);
+			
+			if (info != null)
+			    output.writeUTF("BBOX: "+info.getBBOX());
+			else 
+				output.writeUTF("BBOX: "+DEFAULT_BBOX);
+		
+		} else {
+			String errmsg = "Error: Received: "+command;
+			//SlideShowServlet.debug(errmsg);
+			output.writeUTF(errmsg);
+		}
+		output.flush();
+		byte[] buf = byteOutput.toByteArray();
+		response.setContentLength(buf.length);
+		ServletOutputStream servletOutput = response.getOutputStream();
+		servletOutput.write(buf);
+		servletOutput.close();
+		
+	}
+	
+    
+	
+	@SuppressWarnings("unused")
+	private void errHtml(HttpServletResponse response, String msg)
+			throws IOException {
+		response.setContentType("text/html");
+		PrintWriter out = new PrintWriter(response.getOutputStream());
+		out.println("<html>");
+		out.println("<head><title>BBoxServlet Error</title></head>");
+		out.println("<body>");
+		out.println("<p>" + msg + "</p>");
+		out.println("</body></html>");
+		out.flush();
+	}
+	
+
+
+}
+
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/ImageServlet.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/ImageServlet.java
new file mode 100644
index 0000000..1d44b34
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/ImageServlet.java
@@ -0,0 +1,193 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import javax.imageio.ImageIO;
+import javax.servlet.http.*;
+import javax.servlet.*;
+
+import java.io.*;
+import java.util.Enumeration;
+
+/**
+ * Servlet that returns a png image containing the 
+ * specified text string. 
+ * This builds a PNG image based on specified parameters:
+ *   text=
+ *   
+ * Works for Tomcat on Windows but on other platforms
+ * It may require the following for the webserver
+ *  -Djava.awt.headless=true
+ *
+ *
+ */
+public class ImageServlet extends HttpServlet {
+	
+	private static final long serialVersionUID = 1L;
+	
+	
+    //	 get the parms from the URL parameters.
+	// http://localhost:8080/image?text=string
+	private String text="DEFAULT";
+	private int textsize = 14;
+	private String fc = "#ffffff";
+	private String bc = "#000000";
+	private int h = 32;
+    int w = 0;
+    private String fontName = "Sans-serif";
+    
+    /** 
+     * handle doPost same as doGet
+     */
+    protected void doPost(HttpServletRequest request,HttpServletResponse response) 
+            throws ServletException, IOException {
+    	doGet(request,response);
+    }
+	/**
+	 *  Process the URL command 
+	 *  
+	 *  The following are picked up from the URL
+	 *   http://system/SlideShow/image?text=A%20String&h=height&w=width
+	 *  
+	 *  text  The String to be shown in resulting image
+	 *  h     Height of image in pixels
+	 *  w     Width of image in pixels
+	 *  bc     Background color   (black)
+	 *  fc     Foreground (text) color (white)
+	 *  
+	 *  - could be enhanced to also do the following
+	 
+	 *  font   Font name ( San-Sarif )
+	 *  size   TextSise for font (14) 
+	 *  type   Image Type (png)
+	 *  
+	 *  
+	 */
+	protected void doGet(HttpServletRequest request,
+			HttpServletResponse response) throws IOException, ServletException {
+ 
+		Enumeration e = request.getParameterNames();
+		while (e.hasMoreElements()) {
+			String name = (String)e.nextElement();
+			String value = (String)request.getParameter(name);
+			//debug(name+"="+value);
+			if (name.equals("text")) {
+				text = value;
+			} else if (name.equals("w")) {
+				w = Integer.parseInt(value);				
+			} else if (name.equals("h")) {
+				h = Integer.parseInt(value);
+				
+			} else if (name.equals("bc")) {
+				bc = value;
+			} else if (name.equals("fc")) {
+				fc = value;
+			}
+		}
+		BufferedImage image = getImage();
+		if (image == null) {
+			errHtml(response, "Unable to create image.");
+		}
+		response.setContentType("image/png");
+		OutputStream outputStream = response.getOutputStream();
+		ImageIO.write(image, "png", outputStream);
+		outputStream.close();
+	}
+	
+	/**
+	 * create a Buffered Image based on the 
+	 * parameters gathered from the request.
+	 * 
+	 * @return  png image
+	 */
+	public BufferedImage getImage() {	
+		BufferedImage image = null;
+		// set defaults
+		Font font = new Font(fontName, Font.BOLD, textsize);
+        //	 default width is 8 pixels per char + margin
+		if (w == 0)
+		    w = (text.length()+2)*8;
+		
+		int textColor = 0;
+		int imageColor = 0;
+		try { 
+	         if (fc.startsWith("#")) 
+	        	 fc = fc.substring(1);
+	         textColor = (int)(Long.parseLong(fc, 16) & 0x0fffffff);
+	         if (bc.startsWith("#")) 
+	        	 bc = bc.substring(1);
+	         imageColor = (int)(Long.parseLong(bc, 16) & 0x0fffffff);
+	    } catch (Exception excep) { 
+	    	debug("textColor="+textColor);
+		    debug("imageColor="+imageColor);
+	    	debug("Invalid text or image color.",excep);
+	    	return null;
+	    }
+	    
+		try {
+			image = new BufferedImage(w, h,
+					BufferedImage.TYPE_INT_RGB);
+			for (int i=0;i<w;i++) {
+				for (int j=0;j<h;j++) {
+					image.setRGB(i,j,imageColor);
+				}
+			}
+			Graphics2D g = image.createGraphics();
+			// add text string
+			Color c = new Color(textColor, (((textColor >> 24) & 0xff) != 0));
+			g.setColor(c);		
+			g.setFont(font);
+			g.drawString(text, textsize / 2, (textsize * 5) / 4);
+
+			g.dispose();
+		} catch (RuntimeException e) {
+			
+			e.printStackTrace();
+			return null;
+		}
+		return image;
+	}
+	
+	private void errHtml(HttpServletResponse response, String msg)
+			throws IOException {
+		response.setContentType("text/html");
+		PrintWriter out = new PrintWriter(response.getOutputStream());
+		out.println("<html>");
+		out.println("<head><title>KML SlideShow Error</title></head>");
+		out.println("<body>");
+		out.println("<p>" + msg + "</p>");
+		out.println("</body></html>");
+		out.flush();
+	}
+	
+    /**
+     * print debug messages to the server log.
+     * @param msg
+     */
+	private void debug(String msg) {
+		if (SlideShowServlet.DEBUG) {
+		  
+		  System.out.println("ImageServlet: "+msg);
+		}
+	}
+	
+	private void debug(String msg,Throwable e) {
+		
+		System.out.println(msg);
+		e.printStackTrace();
+		
+	}
+}
+
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowInfo.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowInfo.java
new file mode 100644
index 0000000..465a67f
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowInfo.java
@@ -0,0 +1,219 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.File;
+import java.util.Date;
+
+/**
+ * Class to hold information required by a 
+ * SlideShowServlet session
+ *
+ */
+public class SlideShowInfo {
+   
+	private String _key = "Key";
+	
+	private int _counter = 0;
+	
+	/**
+	 * built in delay on requests
+	 */
+	private long _delay = 2000;
+	
+	private File[] _files = null;
+	
+	private boolean _waitForKML = false;
+	
+	private String _folderName = "";
+	
+	private boolean pause = false;
+	
+	private String[] insert = null;
+	
+	private String   _fileName = null;
+	
+	private String   _BBOX = null;
+	/**
+	 * use for cleanup - future
+	 */
+	private long timeLastUsed = 0;
+	/**
+	 * create an instance with the values pulled from URL
+	 * 
+	 * @param key  pseudo session key
+	 * @param folder folder name containing KML files
+	 * @param wait if true then wait for new KML when 
+	 *        no more files in list.
+	 * @param file Single file to be repeatably processed
+	 * @param delay in seconds between request processing
+	 */
+	public SlideShowInfo(String key, String folder, boolean wait, 
+			             String file, String delay) {
+		_key = key;
+		_counter = -1;  // so first file will be 0
+		_files = null;
+		_folderName = folder;
+		_waitForKML = wait;
+		_fileName = file;
+		_delay = Long.parseLong(delay)*1000;
+		timeLastUsed = new Date().getTime();
+	}
+
+	/**
+	 * called to check if it should be expired and deleted
+	 * from the map of outstanding entries
+	 * 
+	 * @return true if session should be expired
+	 */
+	public boolean isExpired() {
+		long now = new Date().getTime();
+		long timeToLive = 24*60*60*1000;  // 24 hours
+		if ((now-timeLastUsed)>timeToLive) {
+			return true;			
+		}
+		return false;		
+	}
+	/**
+	 * @return the key used to store this info.
+	 */
+	public String getKey() {
+		timeLastUsed = new Date().getTime();
+		return _key;
+	}
+	/**
+	 * @return the _counter
+	 */
+	public int getCounter() {
+		
+		timeLastUsed = new Date().getTime();
+		
+		return _counter;
+	}
+	/**
+	 * Do a built in delay if needed
+	 */
+	public void delay() {
+		long now = new Date().getTime();
+		if (now < timeLastUsed+_delay) {
+			try {
+				Thread.sleep(_delay);
+			} catch (InterruptedException e) {
+				
+			}			
+		}
+		timeLastUsed = new Date().getTime();		
+		return ;
+	}
+	/**
+	 * @param _counter the _counter to set
+	 */
+	public void setCounter(int _counter) {
+		this._counter = _counter;
+	}
+
+	/**
+	 * @return the _files
+	 */
+	public File[] getFiles() {
+		return _files;
+	}
+
+	/**
+	 * @param _files the _files to set
+	 */
+	public void setFiles(File[] _files) {
+		this._files = _files;
+	}
+
+	/**
+	 * @return the _folderName
+	 */
+	public String getFolderName() {
+		return _folderName;
+	}
+
+	/**
+	 * @param name the _folderName to set
+	 */
+	public void setFolderName(String name) {
+		_folderName = name;
+	}
+
+	/**
+	 * @return the _waitForKML
+	 */
+	public boolean isWaitForKML() {
+		return _waitForKML;
+	}
+
+	/**
+	 * @param forKML the _waitForKML to set
+	 */
+	public void setWaitForKML(boolean forKML) {
+		_waitForKML = forKML;
+	}
+
+	/**
+	 * @return the pause
+	 */
+	public boolean isPause() {
+		return pause;
+	}
+
+	/**
+	 * @param pause the pause to set
+	 */
+	public void setPause(boolean pause) {
+		this.pause = pause;
+	}
+
+	/**
+	 * @return the insert
+	 */
+	public String[] getInsert() {
+		return insert;
+	}
+
+	/**
+	 * @param insert the insert to set
+	 */
+	public void setInsert(String[] insert) {
+		this.insert = insert;
+	}
+
+	/**
+	 * @return the _fileName
+	 */
+	public String getFileName() {
+		return _fileName;
+	}
+
+	/**
+	 * @param name the _fileName to set
+	 */
+	public void setFileName(String name) {
+		_fileName = name;
+	}
+
+	/**
+	 * @return the _BBOX
+	 */
+	public String getBBOX() {
+		return _BBOX;
+	}
+
+	/**
+	 * @param bbox the _BBOX to set
+	 */
+	public void setBBOX(String bbox) {
+		_BBOX = bbox;
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowServlet.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowServlet.java
new file mode 100644
index 0000000..aaad6bd
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/SlideShowServlet.java
@@ -0,0 +1,760 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.URLEncoder;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * SlideShowServlet sends back a valid KML file for a GET or POST
+ * action
+ * <pre>
+ * The way that it works is this:
+ *  
+ *    A KML file is launched to GoogleEarth that 
+ *    has a network link with the following URL
+ *    http://localhost:8080/SlideShow/slideshow?id=<id>&amp;folder=<path>
+ *    where <id> is a unique id
+ *          <path> is the directory containing the 
+ *            kml files generated by STEM.
+ *    
+ *     GoogleEarth will then issue http GET requests with 
+ *     the specified URL which will cause this servlet's 
+ *     doGet() method to be invoked.  
+ *     
+ *     It retrieves the correct file in one of 2 ways:
+ *     
+ *     The servlet keeps a map of info keyed by the <id> that
+ *     has a list of files that was found in the folder 
+ *     and a counter that is used to send back the N'th file.
+ *     and increment N.
+ *     
+ *     If a filename was specified in the URL 
+ *       http://localhost:8080/STEM/slideshow?...file=<filename>
+ *     then that file will be read and returned to GE.
+ *     This file will always be the most recently generated 
+ *     KML file.  This will help ensure that GE does not fall
+ *     behind the STEM simulation.  
+ * </pre>      
+ *             
+ */
+public class SlideShowServlet extends HttpServlet {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+   
+	/**
+	 * Used by this and other servlets to control debug output
+	 */
+    public static boolean DEBUG = false;
+    
+    //public static boolean DEBUG = true;
+    /**
+     * change to true to cause output to be sent to console instead 
+     * of GE
+     */
+    private static final boolean TEST = false;
+    
+    private static final long start = new Date().getTime();
+    /**
+     * Servlet context.  
+     * 
+     */
+    public static final String CONTEXT = "STEM";
+    /**
+     * default folder for KML files.
+     */
+    static final String STEM_FOLDER = "c:\\tmp\\ge";
+    
+    /**
+     * collection of information about a session
+     * Key = id passed to servlet 
+     * 
+     */       
+    
+    private static HashMap<String,SlideShowInfo> _infoMap = null;
+    
+    /**
+     * set true when we get a request that only sets the BBox info
+     */
+    private boolean bboxSet = false;    
+    /**
+     *  Handle the initial setup 
+     */
+	public void init(ServletConfig config) throws ServletException {
+		    super.init(config);
+		    //debug("init: Default folder="+STEM_FOLDER);		 
+		   
+		    _infoMap = new HashMap<String,SlideShowInfo>();		    
+		    
+	 }
+    
+	/* (non-Javadoc)
+	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doGet(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+		
+		doPost(request, response);
+}
+
+    /* (non-Javadoc)
+     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
+     */
+    protected void doPost(HttpServletRequest request,HttpServletResponse response) 
+            throws ServletException, IOException {
+    			
+		int counter = 0;
+			    
+	    String fileName = null;
+		SlideShowInfo info = null;
+		
+		File[] files = null;
+		
+		try {
+			// get info from url
+			info = getParameters(request);
+			String key = info.getKey();
+			if (bboxSet) {
+				// This was a request to return BBOX only
+				processNoOp(request,response);
+			}
+			// make sure there is some delay between requests
+			info.delay();			
+			fileName = info.getFileName();
+			if (fileName != null) {	
+				// get a specific file
+				
+				processFile(request,response,info,fileName); 
+				return;
+			} else {
+			  // get saved list of files	
+			  files = info.getFiles();
+			  // if never filled in
+			  if (files == null) {
+				  // get updated list of files
+				 files = getFiles(info);
+			  }
+			
+			} 
+			counter = getCounter(request,response,info);
+			// getCounter will have updated info.getFiles
+			files = info.getFiles(); // added files			
+			if (files.length == 0) {
+				// if no .kml files in folder
+				if (info.isWaitForKML()) {
+					sendScreenOverlay(request, response, "Waiting to Start");
+
+				} else {
+					response.sendError(HttpServletResponse.SC_BAD_REQUEST,
+					"No KML files in specified folder.");
+				}
+				return;
+			}	
+			File kmlFile = files[counter];
+//			String print = "key: "+key+" Counter: " + counter +
+//			" addr: " + request.getServerName() + ":"+request.getServerPort()+
+//			" #files: "+files.length +
+//			" kmlFile: "+kmlFile.getAbsolutePath();
+			//debug(print);
+			debug("Send to GE: "+kmlFile);
+			
+			FileInputStream fis = new FileInputStream(kmlFile);
+			// insert is additioal KML to be sent with output
+			String[] insert = info.getInsert();
+			
+			sendOutput(request,response, fis,insert );
+			info.setCounter(counter);
+			_infoMap.put(key, info);
+		} catch (Throwable e) {			
+			e.printStackTrace();
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+					e.getMessage());
+		}
+	}
+
+	
+    /**
+     * Get the counter that keeps track of which file
+     * is to be processed next.
+     * 
+     * It does more thatn just get the next value for the counter,
+     * it will check if there are more files to process and if not
+     * do the handling of this case.  
+     * 
+     * @param request  ServletRequest
+     * @param response ServletResponse
+     * @param info   instance of information saved from step to step
+     * @return N where we want to display the Nth file
+     *           from the specified folder.  
+     *           0 if starting over 
+     *           
+     * @throws Exception
+     */
+    synchronized 
+    private int getCounter(HttpServletRequest request,
+    		               HttpServletResponse response,
+    		               SlideShowInfo info) 
+                               throws Exception{
+		
+		int counter = info.getCounter();
+		counter++;
+		
+		// if done all of files currently in list
+		int waits = 10; // wait for 10 seconds
+		int max = info.getFiles().length;
+		while (true) {
+		  
+		  if (counter >= max) {
+ 			 // reached end of filelist
+			
+			if (info.isWaitForKML()) {
+				Thread.sleep(1*1000);
+			    info.setFiles(null);
+			    getFiles(info);
+			    max = info.getFiles().length;
+			    
+			    waits--;
+			    if (waits > 0) 
+			    	continue;
+			    // waited and still no more files
+			    // indicate to user we are paused
+			    counter = max-1;
+			    if (! info.isPause()) {
+					// if we have not yet claimed to be pausing
+			        //debug("pause: ");									
+                    info.setPause(true);	        
+			        // send pause as icon to GE
+                    String host = getHost(request);			
+    		    	String url = "http://"+host+"/"+
+    				    CONTEXT+"/image?text="+
+    				    URLEncoder.encode("Paused","UTF-8");
+    				String[] insert = buildScreenOverlay(url);
+    				info.setInsert(insert);
+			    }
+			    break;
+			} else {
+				// pause before restarting
+				// TODO remove debug
+				debug("Pause 10 seconds before restarting");
+				Thread.sleep(10*1000);
+				counter = 0;
+				break;
+			}
+		  } else {
+			if (info.isPause()) {
+				//debug("Change pause to active");
+				// we were paused so change image to active
+				info.setPause(false);
+				Thread.sleep(2*1000);
+				String host = getHost(request);			
+		    	String url = "http://"+host+"/"+
+				    CONTEXT+"/image?text="+
+				    URLEncoder.encode("Active","UTF-8");
+		    	
+				String[] insert = buildScreenOverlay(url);
+				info.setInsert(insert);
+			    
+			} 
+			break;
+		  } 
+		} // while(true)
+		
+		return counter;	
+		
+    }
+    /**
+     * send back an empty response
+     * 
+     * @param request
+     * @param response
+     *
+     * @throws ServletException
+     * @throws IOException
+     */
+	
+	private void processNoOp(HttpServletRequest request,
+			HttpServletResponse response) 
+	               throws ServletException, IOException{
+		try {
+			
+			PrintWriter os = new PrintWriter(response.getOutputStream());
+			//PrintStream os = System.out;
+			response.setContentType("application/keyhole");
+
+			os.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+			os.println("<kml xmlns=\"http://earth.google.com/kml/2.0\">");
+			os.println("<Document>");			
+			os.println("</Document>");
+			os.println("</kml>");
+
+			os.flush(); 
+		} catch (Throwable e) {			
+			e.printStackTrace();
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,e.getMessage());
+		}
+	}
+    /**
+     * Process a request to serve up a specific file
+     * 
+     * @param request
+     * @param response
+     * @param fileName
+     * @throws ServletException
+     * @throws IOException
+     */
+	
+	private void processFile(HttpServletRequest request,
+			HttpServletResponse response,
+			SlideShowInfo info, String fileName) 
+	               throws ServletException, IOException{
+		try {
+			
+			File kmlFile = new File(fileName);	
+			String oldFileName = fileName.replace("_Current","_Old");
+			File oldFile = new File(oldFileName);
+			String[] insert = info.getInsert();	
+			FileInputStream fis  = null;
+			int counter = 0;
+            while (true) {            
+			    try {
+			    	if (! kmlFile.exists() ) {			    		
+			    		Thread.sleep(2*1000);
+			    		counter++;
+			    		// after 20 seconds use old file
+			    		if (counter > 10) {
+			    			rename(oldFile,kmlFile);			    			
+			    		} 
+			    		continue;
+			    	}
+					fis = new FileInputStream(kmlFile);	
+					//debug(" kmlFile: "+kmlFile.getAbsolutePath());
+					break;
+				} catch (Exception e) {					
+					error("processFile failed",e);
+					return;
+				}				
+            }
+            debug("Send to GE: "+kmlFile);
+            sendOutput(request,response, fis,insert );
+           
+            rename(kmlFile,oldFile);
+            
+		} catch (Throwable e) {			
+			e.printStackTrace();
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,e.getMessage());
+		}
+	}  
+	
+	
+	/**
+	 * switch files by renaming
+	 */
+	private boolean rename(File oldFile, File newFile) {
+		try {
+			if (newFile.exists()) 
+				newFile.delete();
+   
+			oldFile.renameTo(newFile);
+		} catch (RuntimeException e) {
+			return false;
+		}
+		return true;
+	}
+	/**
+	 * @param request
+	 */
+	private String getHost(HttpServletRequest request) {
+		int port = request.getServerPort();		    	
+		String host = request.getServerName()+":"+port;
+		return host;
+	}
+	
+    /**
+     * Get the list of files in the folder
+     *      
+     *  
+     * @param info  instance that holds misc info about session
+     * @return array of Files in the specified folder
+     */
+    
+    public File[] getFiles(SlideShowInfo info) {
+		File[] files = null;
+		File folder = null;
+		try {
+			files = info.getFiles();
+			
+			if (files == null || files.length == 0) {
+				folder = new File(info.getFolderName());				
+			    files = fileList(folder);
+			    if (files == null)
+					files = new File[0];
+			    info.setFiles(files);
+			}
+		} catch (RuntimeException e) {
+			
+			error("getFiles() failed. ",e);
+			files = new File[0];
+		} 	
+		
+		return files;			
+    }
+    
+/**
+ * get the list of files in the specified folder.
+ * The files will only be files with the ".kml" 
+ * extension and will be sorted by filename.
+ * Also netlink files will be filtered out
+ * 
+ * @param folder Directory that contains KML files to display
+ * @return array of sorted filenames
+ */
+   
+  private File[] fileList(File folder) {
+    
+    FileFilter ff = new FileFilter() {
+		public boolean accept(File f){
+			if (f.getName().toLowerCase().startsWith("net")) {
+				return false;
+			}
+			if (f.getName().toLowerCase().endsWith(".kml")) {
+				return true;
+			}
+			return false;
+		}
+	};	
+	
+	Comparator<? super File> compare = new Comparator<File>() {
+		public int compare(File o1, File o2) {
+			File f1 = (File)o1;
+			File f2 = (File)o2;
+			int answer = f1.getName().compareTo(f2.getName());
+			return answer;
+		}
+
+	};
+	
+	try {						
+		File[] files = folder.listFiles(ff);
+		if (files == null) {
+			return new File[0];
+		}		
+		Arrays.sort(files,0,files.length,compare);
+		return files;
+	} catch (Exception e) {		
+		e.printStackTrace();
+		return null;
+	}
+  }
+  /**
+	 * Obtain the following parameters from the URL.
+	 * <pre>
+	 *  id:  A key that makes this session unique
+	 *    Because GoogleEarth sets up a new session for each 
+     *   request, we cannot use the normal Servlet session 
+     *   protocol.  
+     *   We keep a hashmap of session info keyed by an ID that 
+     *   is passed in the URL 
+     *  
+     *  folder:  Where to find the KML files
+     *  
+     *  delay:   Time to delay between returning data
+     *  
+     *  wait:    If "y" them if now new files send a "pause" icon
+     *  
+     *  file:    If spcified then return the specified file
+     *   
+	 *  BBOX:    If found then GE has return the current view coordinates
+	 *  
+	 *  BBoxSet: If found then GE has returned BBOX and no answer is 
+	 *           required. 
+	 *           
+	 *  id is then used to access infoMap and
+	 *  and return an instance of SlideShowInfo which contains current 
+	 *  cycle counter, array of files and boolean wait indicator.
+	 *  If there is no existing entry then it builds a new 
+	 *  SlideShowInfo instance from the url parameters and stores 
+	 *  it in the infoMap.
+	 *  
+	 * @param request  Servlet request instance.
+	 * @return instance of SlideShowInfo 
+	 */
+	private SlideShowInfo getParameters(HttpServletRequest request) {
+		// get the id from the URL parameters.
+		// http://localhost:8080/slideshow?id=useridkey
+		String mykey="DEFAULT";
+	    String folderName = STEM_FOLDER;
+	    boolean waitForKML = false;
+	    String fileName = null;
+	    String delay = "2";
+	    String bbox = null;
+	    bboxSet = false;
+		Enumeration e = request.getParameterNames();
+		StringBuffer sb = new StringBuffer();
+		while (e.hasMoreElements()) {
+			String name = (String)e.nextElement();
+			String value = (String)request.getParameter(name);
+			sb.append(name+": "+value+" ");
+			if (name.equals("id")) {
+				mykey = value;
+			} else if (name.equals("folder")) {
+				folderName = value;	
+			} else if (name.equals("delay")) {
+				delay = value;
+				
+			} else if (name.equals("wait")) {
+				if (value.equals("y")) {
+					waitForKML = true;
+				}
+			} else if (name.equals("file")) {
+				fileName = value;
+			} else if (name.equals("BBOX")) {
+				bbox = value;
+			} else if (name.equals("bboxSet")) {
+				bboxSet = true;
+			}
+		}
+		//debug("getParameters: "+sb.toString());
+		SlideShowInfo info = _infoMap.get(mykey);
+		if (info == null) {
+			info = new SlideShowInfo(mykey,folderName,waitForKML,
+					                 fileName,delay);			
+		} 
+		if (bbox != null)
+			info.setBBOX(bbox);
+		_infoMap.put(mykey,info);
+		return info;
+		
+	}
+	/**
+	 * Send the KML file to the caller (GoogleEarth)
+	 * 
+	 * If TEST=true then it will be written to the browser 
+	 * for testing.
+	 * 	
+     * @param request   
+     * @param response
+     * @param kml  InputStream holding file contents
+     * @param insert  KML to be inserted in output
+     * @throws IOException
+     */
+    synchronized 
+    private void sendOutput(HttpServletRequest request,
+			                HttpServletResponse response, 
+			                InputStream  kml, String[] insert) 
+	            throws IOException {
+    	// set TEST=true to get readable output instead of 
+    	// launching a KML file
+    	      
+		response.setContentType("application/keyhole");
+    	
+				
+		try {
+			OutputStream os = response.getOutputStream();			
+			if (TEST) {
+				os = System.out;
+			}
+			copy(kml,os,insert);
+		} catch (Exception e) {
+			String msg = "SlideShowServlet.sendOutput() failed while sending kmlFile";
+			error(msg+"\n"+e.getMessage(),null);
+			
+		}
+		
+	}
+    /**
+     * build a segment of KML to be inserted into the 
+     * output written to GoogleEarth.
+     * 
+     * @param url
+     * @return KML to be inserted 
+     */
+    private String[] buildScreenOverlay( String url) {
+		String[] insert = new String[] 
+			{"<ScreenOverlay id=\"Status\">",
+			 "   <description>STEM status</description>",
+			 "   <name>Status</name>\n",
+			 "<icon>",
+			 "<href>",			
+			 url,
+			 "</href>",
+			 "</icon>\n",
+			 // following positions image to loop left
+			 "<overlayXY x=\"0\" y=\"1\" xunits=\"fraction\" yunits=\"fraction\"/>\n",
+			 "<screenXY x=\"0\" y=\"1\" xunits=\"fraction\" yunits=\"fraction\"/>\n",
+			 // use actual size of image
+			 "<size x=\"0\" y=\"0\" xunits=\"fraction\" yunits=\"fraction\"/>\n",
+			 "</ScreenOverlay>\n"			
+			 };
+		
+		return insert;
+	}
+	/**
+	 * Send the KML file to the caller (GoogleEarth)
+	 * 
+	 * 
+	 * @param response
+	 * @param info
+	 * @param msg A string that will be converted 
+	 *      to an image and displayed by GoogleEarth
+	 * @throws IOException
+	 */
+    
+    private void sendScreenOverlay(HttpServletRequest request,
+			                HttpServletResponse response, 
+			                String msg) 
+	            throws IOException {
+    	    	      
+		response.setContentType("application/keyhole");
+    	
+				
+		try {
+			String host = getHost(request);			
+			String url = "http://"+host+"/"+
+			     CONTEXT+"/image?text="+
+			URLEncoder.encode(msg,"UTF-8");
+
+			String[] insert = buildScreenOverlay(url);
+
+			PrintWriter os = new PrintWriter(response.getOutputStream());
+			//PrintStream os = System.out;
+			response.setContentType("application/keyhole");
+
+			os.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+			os.println("<kml xmlns=\"http://earth.google.com/kml/2.0\">");
+			os.println("<Document>");
+			for (int i=0; i<insert.length; i++) {					
+				os.println(insert[i]);
+			}
+			os.println("</Document>");
+			os.println("</kml>");
+
+			os.flush(); 
+		} catch (Exception e) {
+			String emsg = "SlideShowServlet.sendScreenOverlay() failed while writing kmlFile";
+			error(emsg+"\n"+e.getMessage(),null);
+
+		}
+		
+	}
+  
+
+	private static String getClock() {
+		long now = new Date().getTime()-start;
+		return Long.toString(now);
+	}
+
+	/**
+	 * return the info instance associated with the specified key
+	 * @param key 
+	 * @return instance of SlideShowInfo
+	 */
+	public static SlideShowInfo getInfo(String key) {
+		SlideShowInfo info = _infoMap.get(key);
+		return info;
+	}
+	/**
+	 * copy a KML file to the servlet response output stream
+	 * and perhaps insert additional KML statements
+	 * 
+	 * @param is KML file input
+	 * @param os Servlet response output stream
+	 * @param insert optional statements to be inserted
+	 *               after the <document> statement.
+	 */
+	private void copy(InputStream is, OutputStream os, String[] insert) 
+	       throws IOException {
+		
+		InputStreamReader isr = new InputStreamReader(is);
+        BufferedReader br = new BufferedReader(isr); 
+		String line = null;
+		
+        
+		try {
+			
+			while (true) {
+				line = br.readLine();
+				if (line == null)
+					break;
+				
+				byte[] buffer = line.getBytes();
+				os.write(buffer, 0, buffer.length);
+				if (insert!=null && 
+						line.toLowerCase().startsWith("<document>")) {
+					for (int i=0; i<insert.length; i++) {						
+						buffer = insert[i].getBytes();
+						os.write(buffer, 0, buffer.length);
+					}
+				}
+			}
+			os.flush();
+			os.close();
+			is.close();
+		} catch (Throwable e) {
+			
+			error("SlideShowServlet.copy(): Error while copying KML file. "
+					+e.toString(),null);
+			try {
+				is.close();
+				os.close();
+			} catch (Exception e2) {
+				// already reported it
+			}
+		}
+
+    }
+	
+	  /**
+     * print debug messages to the server log.
+     * @param msg
+     */
+	public static void debug(String msg) {
+		if (DEBUG) {		 
+		  System.out.println(getClock()+" GEServlet: "+msg);
+		}
+	}
+	 
+	/**
+	 * debug output for exceptions
+	 * @param msg
+	 * @param e
+	 */
+	public static void error(String msg,Throwable e) {
+		//log(msg,e);
+		System.out.println(msg);
+		if (e != null)
+			if (DEBUG)				
+				e.printStackTrace();
+			else 
+				System.out.println(e.toString());
+		
+	}
+}  // class
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/StartServlet.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/StartServlet.java
new file mode 100644
index 0000000..bccb947
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/StartServlet.java
@@ -0,0 +1,251 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Enumeration;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+
+/**
+ * StartServlet sends back a valid KML file for a GET or POST
+ * action that will give GoogleEarth the NetworkLink to 
+ * start up the STEM SlideShow
+ * <pre>
+ * The way that it works is this:
+ *    The invoking HTML will invoke this Servlet with the following
+ *    parameters:
+ *      folder <path>
+ *      wait   <y/n>
+ *       
+ *    The servlet builds a KML file that is launched to GoogleEarth that 
+ *    has a networklink with the following URL
+ *    http://localhost:8080/STEM/slideshow?id=<id>&folder=<path>&wait=<wait>
+ *    where <id> is a unique id
+ *          <path> is the directory containing the 
+ *            kml files generated by STEM.
+ *          <wait> is "y" if it should wait for new files 
+ *          to be generated    
+ *     GoogleEarth will then issue http GET requests with 
+ *     the specified URL 
+ *     
+ *             
+ */
+public class StartServlet extends HttpServlet {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+     * Servlet context.  
+     * 
+     */
+    public static final String CONTEXT = "/STEM";
+	
+    private static String debug = "n";
+    /**
+     * if set true, this will create readable output
+     */
+    private static boolean TEST = false;
+    
+    static final String STEM_FOLDER = "c:\\tmp\\ge";
+    
+    static final String VERSION = "1.0.1";
+    /**
+     *  Handle the initial setup 
+     */
+	public void init(ServletConfig config) throws ServletException {
+		    super.init(config);
+		    debug("init: "+VERSION+" invoked at startup or deploy");	
+		    
+	 }
+    
+	protected void doGet(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException {
+		debug("doGet");
+		doPost(request, response);
+}
+
+    protected void doPost(HttpServletRequest request,HttpServletResponse response) 
+            throws ServletException, IOException {
+    	debug("doPost");		
+		
+		String folderName = STEM_FOLDER;
+		String waitForKML = "n";
+		String interval = "2";  // every 2 seconds
+		File folder = null;
+		
+		try {
+			// get the folder from the URL parameters.
+			// http://localhost:8080/slideshow?folder=path
+			Enumeration e = request.getParameterNames();
+			while (e.hasMoreElements()) {
+				String name = (String)e.nextElement();
+				String value = (String)request.getParameter(name);
+				debug(name+"="+value);
+				if (name.equals("folder")) {
+					folderName = value;				
+				} else if (name.equals("wait")) {
+					waitForKML = value;					
+				} else if (name.equals("interval")) {
+					interval = value;					
+				} else if (name.equals("debug")) {
+					debug = value;					
+				}
+				
+			}
+			if (debug.toLowerCase().startsWith("y")) {
+				SlideShowServlet.DEBUG = true;
+			} else {
+				SlideShowServlet.DEBUG = false;
+			}
+			folder = new File(folderName);
+			debug("folder: "+folder.getAbsolutePath());
+			
+			
+			long time = 0;
+			String info = "IPaddr: " + request.getRemoteAddr() + 
+	        " folder: "+folder.getAbsolutePath() +
+	        " time: " + time;
+	        debug(info);
+			sendOutput(request,response, folderName, 
+					waitForKML,interval);
+		} catch (Throwable e) {
+			
+			e.printStackTrace();
+		}
+	}
+   
+
+	/**
+	 * Send the KML file to the caller (GoogleEarth)
+	 * 
+	 * If TEST=true then it will be written to the browser 
+	 * for testing. Note that becasuse it is XML the output 
+	 * will be garbled and you need to use the browser to 
+	 * look at the page source.
+	 * 
+	 * @param request
+	 * @param response
+	 * @param folderName
+	 * @throws IOException
+	 */
+    synchronized 
+    private void sendOutput(HttpServletRequest request,
+			HttpServletResponse response, 
+			String folderName, String waitForKML, String interval) 
+	            throws IOException {
+    	
+    	
+    	int port = request.getServerPort();
+    	
+    	String host = request.getServerName()+":"+port;
+		
+		long time = new Date().getTime();
+		String id = Long.toHexString(time);
+		PrintWriter os = new PrintWriter(response.getOutputStream());
+    	// set TEST=true to get readable output instead of 
+    	// launching a KML file
+    	
+    	if (TEST) {
+    		String msg = " KML NetworkLink file: ";
+    		response.setContentType("text/html");
+    		
+    		os.println("<html>");
+    		os.println("<head><title>Start Slideshow</title></head>");
+    		os.println("<body>");
+    		os.println("<p>"+msg+"</p>");
+    		    		    		
+    	}  else {        
+		    response.setContentType("application/keyhole");
+    	}
+				
+		try {
+			
+			os.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+			os.println("<kml xmlns=\"http://earth.google.com/kml/2.0\">");
+			os.println("<Folder>");
+			os.println("   <description>SlideShow NetworkLink</description>");
+			os.println("   <name>Network Links</name>");
+			os.println("<NetworkLink>");
+			os.println("<Url>");
+			// The import info goes here
+			String url = "<href>http://"+host+
+					CONTEXT+"/slideshow?id="+id+
+					"&amp;folder="+folderName+
+					"&amp;wait="+waitForKML+
+					"</href>";
+			os.println(url);
+			debug(url);
+			
+			os.println("<refreshInterval>"+interval+"</refreshInterval>");
+			os.println("<refreshMode>onInterval</refreshMode>");
+			os.println("</Url>");
+			os.println("<flyToView>0</flyToView>");
+			os.println("</NetworkLink>");
+			os.println("</Folder>");
+			os.println("</kml>");
+		} catch (Exception e) {
+			String msg = "SlideShow startup failure";
+			debug(msg,e);
+			errHtml(response,msg+e.getMessage());
+		}
+		if (TEST) {    		
+    		 		
+    		os.println("</body></html>");
+    		   		    		
+    	} 
+		os.flush(); 
+	}
+    
+    /**
+     * print debug messages to the sever log.
+     * @param msg
+     */
+	private void debug(String msg) {
+		if (SlideShowServlet.DEBUG) {
+		  //getServletContext().log(msg);
+		  //log("log: "+msg);
+		  System.out.println("StartServlet: "+msg);
+		}
+	}
+	
+	private void debug(String msg,Throwable e) {
+		System.err.println(msg);
+		e.printStackTrace();
+	}
+	/**
+	 * put out an error message as html
+	 * 
+	 * @param response
+	 * @param msg
+	 * @throws IOException
+	 */
+	private void errHtml(HttpServletResponse response,String msg) 
+	                       throws IOException {
+		response.setContentType("text/html");
+		PrintWriter out = new PrintWriter(response.getOutputStream());
+		out.println("<html>");
+		out.println("<head><title>KML SlideShow Error</title></head>");
+		out.println("<body>");
+		out.println("<p>"+msg+"</p>");
+		out.println("</body></html>");
+		out.flush();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyClient.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyClient.java
new file mode 100644
index 0000000..b722798
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyClient.java
@@ -0,0 +1,152 @@
+package org.eclipse.stem.ui.ge.servlet;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.GELog;
+
+
+/**
+ * Holder for the verify method that
+ * will verify that the specified webserver 
+ * is available and that the Stem-GoogleEarth servlets
+ * are deployed.
+ * 
+ * It will also send the setting of the DEBUG flag
+ * to the servlet codebase so it can be used there.
+ * 
+ * <code>
+ *    String url = "http://localhost:8080/STEM/verify"
+ *    VerifyClient vc = new VerifyClient();
+ *    boolean ok = vc.verify(url)
+ *    if (! ok) {
+ *       System.out.println(vc.getError());
+ *       return;
+ *    }
+ *    ...
+ * </code>
+ *
+ */
+public class VerifyClient {
+
+	;
+	/**
+     * String that we will send the client
+     */
+ 	public static String outputText="VerifyClient "+
+ 			Version.version;
+ 	/**
+ 	 * String that client should send us.
+ 	 */
+ 	public static String expectedText="VerifyServlet "+
+ 			Version.version;	
+    private String error = "";
+	/**
+	 * Verify: 
+	 *   (1) that the web server is active 
+	 *   (2) that the servlets are deployed
+	 *   
+	 * @param urlstr  URL like //localhost:8080/STEM/verify
+	 * @return OK" or an error message
+	 */
+	public  boolean verify(String urlstr) {
+		boolean result = true;
+		error = "";
+		try {
+			//GELog.DEBUG=true;
+			URL url = new URL(urlstr);
+			URLConnection connect = url.openConnection();
+			connect.setUseCaches(false);
+			connect.setDoInput(true);
+			connect.setDoOutput(true);
+			connect.setRequestProperty("Content-type", "application/octet-stream");
+			
+			  // use ByteArray output
+			ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+			DataOutputStream output =
+				new DataOutputStream(byteOutput);
+			String outputString = outputText;
+			if (GELog.DEBUG) {
+				outputString = outputText+" DEBUG ";
+			}
+			GELog.debug(this,"Sending: "+outputString);
+			output.writeUTF(outputString);
+			
+			output.flush();
+			byte[] buf = byteOutput.toByteArray();
+			
+			connect.setRequestProperty("Content-length", ""+buf.length);
+			DataOutputStream dataOutput =
+				new DataOutputStream(connect.getOutputStream());
+			dataOutput.write(buf);
+			dataOutput.flush();
+			dataOutput.close();
+			
+			DataInputStream in = 
+				new DataInputStream(connect.getInputStream());
+			String stringValue = in.readUTF();
+			
+			in.close();
+			
+			if (stringValue.equals(expectedText)) {
+				String msg = "OK: "+              
+	            " Received: "+stringValue;
+	            GELog.debug(this,msg);
+			} else {
+				error = "ERROR "+
+					                "Expected: "+expectedText+
+					                " Received: "+stringValue;
+				GELog.debug(this,error);
+				result=false;	
+			}
+		} catch (MalformedURLException e) {	
+			
+			GELog.debug(e.getMessage());
+		
+			error ="ERROR Invalid URL "+urlstr;
+			result = false;
+		} catch (IOException e) {			
+			GELog.debug(e+": "+e.getMessage());
+			
+			error="EXCEPTION  "+e+": "+e.getMessage();
+			result = false;
+		}
+		Activator.logError(error, null);
+		return result;
+	}
+	
+	
+	/**
+	 * Return the error message from the last check.
+	 * 
+	 * @return Error message from the previous call 
+	 * to VerifyClient.
+	 */
+	public String getError() {
+		return error;
+	}
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		
+
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyServlet.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyServlet.java
new file mode 100644
index 0000000..f34d4c6
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/VerifyServlet.java
@@ -0,0 +1,123 @@
+package org.eclipse.stem.ui.ge.servlet;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Servlet that allows the client to verify that the 
+ * web server is started and the STEM-GoogleEarth servlets 
+ * are deployed.
+ * 
+ * If it gets a String "VerifyClient v.v.v"
+ * It returns a String "VerifyServlet v.v.v"
+ * 
+ */
+public class VerifyServlet extends HttpServlet {
+	
+	private static final long serialVersionUID = 1L;
+	
+	
+	  /**
+     * String that we will send the client
+     */
+ 	private static String outputText="VerifyServlet "+
+ 			Version.version;
+ 	/**
+ 	 * String that client should send us.
+ 	 */
+ 	private static String expectedText="VerifyClient "+
+ 	 		Version.version;
+    /**
+     * 
+     * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
+     */
+    protected void service(HttpServletRequest request,HttpServletResponse response) 
+            throws ServletException, IOException {
+    	
+		DataInputStream in = 
+			new DataInputStream(request.getInputStream());
+		response.setContentType("application/octer-stream");
+		// use ByteArray output
+		ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
+		DataOutputStream output =
+			new DataOutputStream(byteOutput);
+		//
+		// read the input from the client
+		//
+		String stringValue = in.readUTF();
+		if (stringValue.startsWith(expectedText)) {
+			output.writeUTF(outputText);
+			if (stringValue.contains("DEBUG")) {
+				SlideShowServlet.DEBUG = true;
+			}
+		} else {
+			String errmsg = "Error: "+
+			                "Expected: "+expectedText+
+			                " Received: "+stringValue;
+			debug(errmsg);
+			output.writeUTF(errmsg);
+		}
+		output.flush();
+		byte[] buf = byteOutput.toByteArray();
+		response.setContentLength(buf.length);
+		ServletOutputStream servletOutput = response.getOutputStream();
+		servletOutput.write(buf);
+		servletOutput.close();
+		
+	}
+	
+	
+	@SuppressWarnings("unused")
+	private void errHtml(HttpServletResponse response, String msg)
+			throws IOException {
+		response.setContentType("text/html");
+		PrintWriter out = new PrintWriter(response.getOutputStream());
+		out.println("<html>");
+		out.println("<head><title>VerifyServlet Error</title></head>");
+		out.println("<body>");
+		out.println("<p>" + msg + "</p>");
+		out.println("</body></html>");
+		out.flush();
+	}
+	
+
+
+    /**
+     * print debug messages to the server log.
+     * @param msg
+     */
+	private static void debug(String msg) {
+		if (SlideShowServlet.DEBUG) {		  
+		  System.out.println("VerifyServlet: "+msg);
+		}
+	}
+	
+	@SuppressWarnings("unused")
+	private static void debug(String msg,Throwable e) {
+		//log(msg,e);
+		System.out.println(msg);
+		e.printStackTrace();
+		
+	}
+}
+
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/Version.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/Version.java
new file mode 100644
index 0000000..0f84706
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/servlet/Version.java
@@ -0,0 +1,23 @@
+package org.eclipse.stem.ui.ge.servlet;
+
+/*******************************************************************************
+ * Copyright (c) 20067 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Supply a Version number for the sevlets 
+ * Must be a separate class for compile reasons
+ */
+public class Version {
+  /**
+   * Version
+   */
+  public static final String version = "0.1.1";
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/DisplayAreaDialog.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/DisplayAreaDialog.java
new file mode 100644
index 0000000..2fdac62
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/DisplayAreaDialog.java
@@ -0,0 +1,191 @@
+package org.eclipse.stem.ui.ge.views;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ *  Let the user enter the info needed to display 
+ *  on GoogleEarth the selected Admin area.
+ *
+ */
+public class DisplayAreaDialog extends TitleAreaDialog {
+
+	private Combo country = null;
+	private Combo level = null;
+	private Text  search = null;
+	Button clearButton = null;;
+	
+	
+	boolean rClear = false;
+	
+	/**
+	 * @param parentShell
+	 */
+	public DisplayAreaDialog(Shell parentShell) {
+		super(parentShell);
+		
+	}
+    
+	/**
+	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createContents(org.eclipse.swt.widgets.Composite)
+	 * 
+	 * @param parent  parent
+	 */	
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		setMessage("Enter Admin Area info.");
+		setTitle("DisplayArea");
+		return contents;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+		Composite composite = (Composite)super.createDialogArea(parent);
+		//composite.setLayout(new GridLayout(6,false));
+		Group group1 = new Group(composite,SWT.SHADOW_IN);
+		group1.setLayout(new RowLayout(SWT.HORIZONTAL));
+		Label countryLabel = new Label(group1,SWT.NONE);
+		countryLabel.setText("Country: ");
+		country = new Combo(group1,SWT.DROP_DOWN);		
+		country.setTextLimit(3);		
+		String[] items = new String[] {"USA","CAN","MEX"};
+		country.setItems(items);
+		
+		if (DisplayAreaData.rCountry != null) {
+			country.setText(DisplayAreaData.rCountry);
+		} else {
+			country.select(0);
+		}
+		Label levelLabel = new Label(group1,SWT.NONE);
+		levelLabel.setText("Level: ");
+		level = new Combo(group1,SWT.DROP_DOWN+SWT.READ_ONLY);		
+		items = new String[] {"0","1","2"};
+		level.setTextLimit(1);		
+		level.setItems(items);
+		
+		level.select(Integer.parseInt(DisplayAreaData.rLevel));
+		
+		Label searchLabel = new Label(composite,SWT.NONE);
+		searchLabel.setText("Search text: ");
+		search = new Text(composite,SWT.BORDER);
+		search.setTextLimit(48);
+	
+		if (DisplayAreaData.rSearch != null) {
+			String searcharg = DisplayAreaData.rSearch;
+			if (searcharg.length() <10) 
+				searcharg = searcharg+"         ";
+			search.setText(searcharg);
+		}			
+		
+		Group group2 = new Group(composite,SWT.SHADOW_IN);
+		group2.setLayout(new RowLayout(SWT.HORIZONTAL));
+		clearButton = new Button(group2,SWT.CHECK);
+		clearButton.setText("Clear Map");
+		return composite;
+	}
+	
+	/**
+	 * creates Apply, OK and Cancel buttons.
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createButtonsForButtonBar(Composite parent) {
+		createButton(parent,IDialogConstants.PROCEED_ID,
+				"Apply",false);
+		createButton(parent,IDialogConstants.OK_ID,
+				IDialogConstants.OK_LABEL,true);
+		createButton(parent,IDialogConstants.CANCEL_ID,
+				IDialogConstants.CANCEL_LABEL,false);
+	}
+	
+	/**
+	 * gets control when user presses Apply, OK or Cancel.
+	 * It sets the rc to button id, calls close and returns.
+	 * 
+	 *  
+	 * 
+	 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+	 * @param id for the button that was pressed
+	 */
+	protected void buttonPressed(int id) {
+		setReturnCode(id);
+		GELog.debug(this,""+id);
+		//if ( id != IDialogConstants.PROCEED_ID)
+		close();
+		return;
+	}
+	/**
+	 * This gets the values from the dialog and saves them 
+	 * so that the caller of this dialog can get them later.
+	 * 
+	 * @return true if close dialog is OK
+	 */
+	public boolean close() {
+		
+		DisplayAreaData.rCountry = country.getText();
+		DisplayAreaData.rLevel = level.getText();
+		DisplayAreaData.rSearch = search.getText();
+		rClear = clearButton.getSelection();
+		return super.close();
+	}
+	/**
+	 * @return name of file containing GML for area border
+	 */
+	public String getAdminFile() {
+		String rCountry = DisplayAreaData.rCountry;
+		GELog.debug(this,rCountry);
+		String adminFile =rCountry+"/"+rCountry+"_"+
+		   DisplayAreaData.rLevel+"_MAP.xml";
+		return  adminFile;
+	}
+	
+	/**
+	 * 
+	 * @return Search argument
+	 */
+	public String getSearch() {
+		return DisplayAreaData.rSearch;
+	}
+	/**
+	 * @return true if user wants to clear the existing map display
+	 */
+	public boolean isClear() {
+		return rClear;
+	}
+	/**
+	 * Simple class to store the dialogs last used values
+	 *
+	 */
+	public static class DisplayAreaData {
+		/** save admin level */
+		public static String rLevel = "2";
+		/** save country */
+		public static String rCountry = "USA";
+		/** save search text for admin area */
+		public static String rSearch = null;
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEAdvancedPreferencePage.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEAdvancedPreferencePage.java
new file mode 100644
index 0000000..c0fae0a
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEAdvancedPreferencePage.java
@@ -0,0 +1,152 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.IOException;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+
+/**
+ * Handle Advanced Preferences for the 
+ * STEM - GoogleEarth interface.
+ * 
+ * This class was copied from GEPreferencePage.java
+ * This class represents a preference page that
+ * is contributed to the Preferences dialog. By 
+ * subclassing <samp>FieldEditorPreferencePage</samp>, we
+ * can use the field support built into JFace that allows
+ * us to create a page that is small and knows how to 
+ * save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They
+ * are stored in the preference store that belongs to
+ * the main plug-in class. That way, preferences can
+ * be accessed directly via the preference store.
+ * 
+ * This uses the jface Preferences API rather than
+ *  the new SWT Preferences API  because it is simpler 
+ *  to implement. 
+ *  
+ *  The static values used to access the preferences 
+ *  and the methods used to access them are 
+ *  found in GEPreferencePage so that we can move the 
+ *  GUI interface from page to page without changing the 
+ *  code that uses the preference. 
+ *  For Example, the P_SHOW_BORDER variable and the 
+ *  isShowBorder() method is found in GEPerformancePage 
+ *  even though the code to set it is found in 
+ *  GEAdvancedPerformancePage.
+ */
+
+public class GEAdvancedPreferencePage
+	extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+    
+	
+	
+	
+	
+	
+	
+	/**
+	 * 
+	 */
+	public static final IPreferenceStore preferences = 
+		Activator.getDefault().getPreferenceStore();
+	    
+	
+	/**
+	 * construct the Preference page for GoogleEarth interface.
+	 * 
+	 */
+	public GEAdvancedPreferencePage() {
+		super(GRID);
+		setPreferenceStore(preferences);
+		setDescription("Advanced Preferences for the STEM - GoogleEarth interface\n ");
+	}
+	
+	/**
+	 * Creates the field editors. Field editors are abstractions of
+	 * the common GUI blocks needed to manipulate various types
+	 * of preferences. Each field editor knows how to save and
+	 * restore itself.
+	 */
+	public void createFieldEditors() {
+		
+		// Turn the debug option on or off
+		addField(
+				new BooleanFieldEditor(
+					GEPreferencePage.P_DEBUG,
+					"&Allow debug output on Console",
+					getFieldEditorParent()));
+		
+		// enable feature to use bounding box to only 
+		// generate polygons within the users view
+		addField(
+				new BooleanFieldEditor(
+					GEPreferencePage.P_BBOX,
+					"Use GoogleEarth Bounding Box to filter output", 
+					getFieldEditorParent()));
+        // See GEPerformancePage isShowBorder() method
+		addField(
+				new BooleanFieldEditor(
+					GEPreferencePage.P_SHOW_BORDER,
+					"Show Admin Area Borders",
+					getFieldEditorParent()));
+		
+
+        // See GEPerformancePage isTest() method
+		addField(
+				new BooleanFieldEditor(
+					GEPreferencePage.P_TEST,
+					"Experimental Option",
+					getFieldEditorParent()));
+	}
+    
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+	}
+	
+	public boolean performOk() {
+		try {
+			if (preferences instanceof ScopedPreferenceStore) {
+			    ScopedPreferenceStore p = (ScopedPreferenceStore)preferences;
+			    p.save();
+			}
+		} catch (IOException e) {			
+		    GELog.error("Failure saving Preferences",e);	
+		}
+		GELog.debug(this,"saved preferences");
+		
+		//GELog.debug(this,"P_TEST="+GEPreferencePage.isTest());
+		
+		
+		return super.performOk();
+	}
+	
+//public static boolean isTest() {
+//		
+//		if (preferences != null)
+//			return preferences.getBoolean(GEPreferencePage.P_TEST);
+//		else 
+//			return true;
+//	}
+} // class
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePage.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePage.java
new file mode 100644
index 0000000..a8005f9
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEPreferencePage.java
@@ -0,0 +1,679 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.IOException;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.preferences.PreferenceConstants;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+
+/**
+ * Handle Preferences for the STEM - GoogleEarth interface.
+ * <pre>
+ * This class contains the following:
+ *   - code to present the setting of the preferences 
+ *     by the user.  The gui for some preferences are 
+ *     handled by GEAdvancedPreferencePage
+ *     
+ *   - getter/setter code for all of the preferences. 
+ *     mostly getter.
+ *   
+ *   - code to pick up the aspect preference from the 
+ *     visualization page.
+ * 
+ * This class was initialy generated by the PreferencePage wizard and 
+ * then modified as described in 
+ * "Building Comercial-Quality Plugins" 
+ * 
+ * This class represents a preference page that
+ * is contributed to the Preferences dialog. By 
+ * subclassing <samp>FieldEditorPreferencePage</samp>, we
+ * can use the field support built into JFace that allows
+ * us to create a page that is small and knows how to 
+ * save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They
+ * are stored in the preference store that belongs to
+ * the main plug-in class. That way, preferences can
+ * be accessed directly via the preference store.
+ * 
+ * This uses the jface Preferences API rather than
+ *  the new SWT Preferences API  because it is simpler 
+ *  to implement. 
+ *  </pre>
+ */
+
+public class GEPreferencePage
+	extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+    
+	/**
+	 * Folder used to store KML files
+	 */
+	static final String P_FOLDER = "folderPreference";
+	/**
+	 * Server:port used for Web server that will feed the 
+	 * KML files to GoogleEarth.
+	 */
+	static final String P_SERVER_HOST = "ServerHostPreference";
+	/**
+	 * Launch GoogleEarth at startup flag.
+	 *   If true then automatically launch an empty file 
+	 *   to GE at startup
+	 *   
+	 */
+	
+	static final String P_AUTO_LAUNCH = "AutoLaunchPreference";
+	
+	/**
+	 * Use InternalServer flag
+	 * if true then start the Eclpse built in web server
+	 */
+	static final String P_INTERNAL_SERVER = "InternalServer";
+	/**
+	 * Automatically launch NetworkLink.KML file
+	 * 
+	 */
+	//static final String P_AUTO_NETLINK = "AutoNetLink";
+	
+	/**
+	 * Write KML files every Nth cycle.
+	 * 
+	 * For example 1 would write every cycle and
+	 * 3 would write every 3rd cycle. 
+	 * This is useful when there is not much change 
+	 * between cycles and saves the overhead of both
+	 * writing the file and more importantly having 
+	 * GoogleEarth read and process it.
+	 * Note <- 0 would only write the first and last.
+	 */
+	static final String P_WHICH_CYCLE = "whichCycle";
+	
+	
+	/**
+	 * Debug display option
+	 */
+	static final String P_DEBUG = "DebugPreference";
+	
+	
+	/**
+	 * Use GoogleEarth BBox info to filter KML 
+	 * Access via the isBBOX() method
+	 */
+	static final String P_BBOX = "BBOXPreference";
+	/**
+	 * Aspect (SEIR) to be displayed  (or Logged)
+	 * 
+	 */
+	static final String P_ASPECT = "AspectPreference";
+	
+	/**
+	 * if true then this will do autologging of every simulation 
+	 * assuming that the GoogleEarth interface is active.
+	 */
+	static final String P_AUTO_LOGGING = "AutoLoggingPreference";
+	
+	/**
+	 * Test option
+	 * The Test option is used arbitrarily to 
+	 * test newly implemented features or setup
+	 * a temporary test environment.  It is a tool
+	 * for the developer and would not normaly be
+	 * specified by the user except on request of 
+	 * a developer.  
+	 * An example of use would be to turn on some 
+	 * additional debug code to help find a bug.
+	 */
+	static final String P_TEST = "TestPreference";
+	
+	/**
+	 * Option to control the display of borders on the map
+	 */
+	static final String P_SHOW_BORDER = "ShowBorderPreference";
+	
+	/**
+	 * Method used to display STEM results on GoogleEarth
+	 * <pre>
+	 * 
+	 * 1=LogOnly    - KML files will be logged for later display via Servlet
+	 * 
+	 * 2=Log+Servlet - KML files logged and Netlink file launched to cause 
+	 *              GE to request logged files via Servlet.  
+	 * 
+	 * 3=ASynch-Servlet - KML written to Control.kml every Nth cycle
+	 *              and Netlink file launched to cause GE to reread 
+	 *              control.kml every N seconds             
+	 * 4=AutoLaunch - At each Nth cycle, directly launch the file to GE             
+	 */
+	static final String P_METHOD = "MethodPreference";
+	/** 
+	 * Only Log KML for later display 
+	 */
+	public static final int M_LOG_ONLY = 1;
+	/** 
+	 * Log the KML files and 
+	 * start the networkLink process 
+	 */
+	public static final int M_LOG_SERVLET = 2;
+	/** 
+	 * always write the control.kml file and 
+	 * start a servlet to read the latest version.
+	 * Advantage is that GoogleEarth is always reading
+	 * the latest version and will not fall behind.  
+	 */
+	public static final int M_ASYNC_SERVLET = 3;
+	
+	/** 
+	 * Build a KML file and launch it directly 
+	 * to GoogleEarth
+	 */
+	public static final int M_AUTO_LAUNCH = 4;
+	/** 
+	 * Do not do anything automatically.
+	 * Only generate a KML file at request of user.
+	 * 
+	 */
+	public static final int M_MANUAL_DISPLAY = 5;
+	/**
+	 * 
+	 */
+	public static final IPreferenceStore preferences = 
+		Activator.getDefault().getPreferenceStore();
+	
+	
+	/**
+	 * construct the Preference page for GoogleEarth interface.
+	 * 
+	 */
+	public GEPreferencePage() {
+		super(GRID);
+		//super(FLAT);
+		// To use GELog In preferences you have to manually
+		// turn it on before the preference is used to set it.
+		// obviously! :-)   Uncomment the following 
+		//GELog.DEBUG = true;
+		//preferences = Activator.getDefault().getPreferenceStore();
+		setPreferenceStore(preferences);
+		setDescription("Preferences for the STEM - GoogleEarth interface\n ");
+		//getVisualizationPreferences();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+	}
+	
+	
+	/**
+	 * Creates the field editors. Field editors are abstractions of
+	 * the common GUI blocks needed to manipulate various types
+	 * of preferences. Each field editor knows how to save and
+	 * restore itself.
+	 */
+	public void createFieldEditors() {
+		
+		
+		
+		addField(new RadioGroupFieldEditor(
+				P_METHOD,
+			"&Choose the method used to display STEM results.",
+			1,new String[][] { 
+				{"LogOnly    - KML files will be logged for later display", "1" }, 
+				{"Log+Servlet - KML files logged and displayed by GoogleEarth", "2" },
+				{"AsyncServlet - KML written to Control.kml and Async read by Servlet ", "3" },
+				{"DirectLaunch - At each Nth cycle, directly launch the file to GE ", "4" },
+				{"ManualDisplay - Use DisplayMap command to display", "5"}
+			 }, getFieldEditorParent()));
+		
+		addField(new DirectoryFieldEditor(P_FOLDER, 
+				"&Folder for KML logging:", getFieldEditorParent()));
+		
+		addField(
+				new BooleanFieldEditor(
+					P_INTERNAL_SERVER,
+					"&Use internal webserver",
+					getFieldEditorParent()));
+		
+		addField(
+				new StringFieldEditor(P_SERVER_HOST,
+						"Hostname:port for external webserver:", getFieldEditorParent()));
+			
+		addField(
+				new BooleanFieldEditor(
+					P_AUTO_LAUNCH,
+					"&Automatically startup GoogleEarth", 
+					getFieldEditorParent()));
+		addField(
+				new BooleanFieldEditor(
+					P_AUTO_LOGGING,
+					"&Automatically process every simulation", 
+					getFieldEditorParent()));
+		
+		addField(
+				new IntegerFieldEditor(
+					P_WHICH_CYCLE,
+					"Write KML files only every N th cycle", 
+					getFieldEditorParent(),2));
+		// if aspect uninitialized, then get from Visualization page
+		String a = preferences.getString(P_ASPECT); 
+		if ("".equals(a)) {
+			getVisualizationPreferences();
+			a = preferences.getString(P_ASPECT);
+		}
+		
+		//GELog.debug(this,"Initial visualizationAspect="+a);
+	    // if we have initialized the aspects - show selection
+		String[][] aspectList = aspects();
+		if (aspectList != null) {
+			
+			addField(
+				new RadioGroupFieldEditor(
+					P_ASPECT,
+					"&Choose the STEM Aspect to be Logged.",
+					2,aspects(),
+					getFieldEditorParent()));
+		}
+				
+
+
+	}
+    
+	/**
+	 * Get the list of supported Aspects
+	 * 
+	 * @return Array of Aspects. Each entry in array 
+	 *   consists of the Aspect Name and Code
+	 */
+	private String[][] aspects() {
+		
+		Map<String,Aspect> aspectMap = Aspect.getMap();
+		if (aspectMap == null || aspectMap.size() == 0) {
+			return null;
+		}
+		int n = aspectMap.size();
+		String[][] result = new String[n][2];
+		int i = 0;
+		for(Map.Entry entry: aspectMap.entrySet()) {
+			String code = (String)entry.getKey();
+			Aspect aspect  = (Aspect)entry.getValue();
+			result[i][0] = aspect.getName();
+			result[i][1] = code;
+			i++;
+		}			
+		
+		return result;
+	}
+	
+	
+	public boolean performOk() {
+		update();
+		try {
+			if (preferences instanceof ScopedPreferenceStore) {
+			    ScopedPreferenceStore p = (ScopedPreferenceStore)preferences;
+			    p.save();
+			}
+		} catch (IOException e) {			
+		    GELog.error("Failure saving Preferences",e);	
+		}
+		GELog.debug(this,"saved preferences");
+		return super.performOk();
+	}
+	
+	/**
+	 * Make any needed application updates
+	 *
+	 */
+	private void update() {
+		if (isDebug() != GELog.DEBUG) {
+			GELog.DEBUG = isDebug();
+			if (isDebug() ) {
+				GELog.debug("Set DEBUG to "+isDebug());
+			}
+		}
+	}
+	
+
+	/**
+	 * Get the aspect to display from the Visualization 
+	 * preference page. 
+	 * We only use the visualization value if we don't 
+	 * have any value specifified so that we can specify 
+	 * a different value from the internal map if we want.
+	 * 
+	 *
+	 */
+	private void getVisualizationPreferences() {
+		org.eclipse.stem.ui.Activator uiPlugin = null;
+		try {
+			
+			// IPreferenceStore
+			uiPlugin = org.eclipse.stem.ui.Activator.getDefault();
+			final Preferences preferences = uiPlugin.getPluginPreferences();
+			String visualizationAspect = preferences
+					.getString(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE);
+            if (preferences.getString(P_ASPECT) == "") {
+            	// TODO temp fix for bad visualization default
+            	GELog.debug(this,"Use visualizationAspect="+visualizationAspect);
+            	if (visualizationAspect.equals("S"))
+            		visualizationAspect = "I";
+            	setAspect(visualizationAspect);
+            } else {
+			  GELog.debug(this,"Ignore visualizationAspect="+visualizationAspect);
+            }
+		} catch (Exception e) {
+			GELog.error("Failure getting Visualization preferences",e);
+		} 
+		// listen for changes in the Visualization preferences
+		try {
+			// Listen for changes to the preferences and change the value we
+			// use if the user changes the value on the preference page.
+			uiPlugin.getPluginPreferences().addPropertyChangeListener(new IPropertyChangeListener() {
+						public void propertyChange(PropertyChangeEvent event) {
+							setVisulizationPreferences(event);
+						} // propertyChange
+					} // IPropertyChangeListener
+					);
+		} catch (Exception e) {
+			// Ignore
+		} // catch Exception
+	}
+	/**
+	 * Check if the aspect was changed on the visualization preferences
+	 * and if so then use it for us also.
+	 * @param event
+	 */
+	private void setVisulizationPreferences(PropertyChangeEvent event) {
+		
+		String property = event.getProperty();
+		if (PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE == property) {
+			String visualizationAspect = (String)event.getNewValue();
+			GELog.debug(this,"Changed visualizationAspect="+visualizationAspect);
+			setAspect(visualizationAspect);	
+			performOk();
+		}
+	}
+	
+	/**
+	 * @return the logFolder
+	 */
+	public static  String getFolder() {
+		
+		return preferences.getString(P_FOLDER);
+	}
+	/**
+	 * @param logFolder the logFolder to set
+	 */
+	public static void setFolder(String logFolder) {
+		preferences.setValue(P_FOLDER, logFolder);
+	}
+	/**
+	 * @return the serverHost
+	 */
+	public static  String getServerHost() {
+		
+		return preferences.getString(P_SERVER_HOST);
+	}
+
+	/**
+	 * This will return a code 1 to 5 indicating the 
+	 * method used to display KML.  
+	 * 
+	 *  M_LOG_ONLY = 1;
+	 *  M_LOG_SERVLET = 2;
+	 *  M_ASYNC_SERVLET = 3;
+	 *  M_AUTO_LAUNCH = 4;
+	 *  M_MANUAL_DISPLAY = 5;
+	 * 
+	 * If there is no Servlet support, it will modify what
+	 * is returned to avoid being dependent on a servlet.
+	 * 
+	 * @return the method code to be used to display KML 
+	 *    
+	 */
+	public static int getMethod() {
+		String s =  preferences.getString(P_METHOD);
+		int type = Integer.parseInt(s);
+// The test is now made in StemKML
+//		if (StemKml.getServerUrl() == null) {
+//			if (type == M_LOG_SERVLET) 
+//				type = M_LOG_ONLY;
+//			else if (type == M_ASYNC_SERVLET)
+//				type = M_AUTO_LAUNCH;
+//		}
+		return type;
+	}
+
+
+
+	/**
+	 * Set the Method that STEM coummicates with GE
+	 *
+	 * @param newMethod  New method to set
+	 */
+	public static void setMethod(int newMethod) {
+		String m = ""+newMethod;
+		preferences.setValue(P_METHOD, m);
+	}
+
+	/**
+	 * @return the internalServer flag
+	 * 
+	 * If true then the info about the status of 
+	 * the server is handled by the StemKML code.
+	 */
+	public static boolean isInternalServer() {
+		return preferences.getBoolean(P_INTERNAL_SERVER);
+	}
+
+
+
+	/**
+	 * @return the autoLaunch flag
+	 */
+	public static boolean isAutoLaunch() {
+		return preferences.getBoolean(P_AUTO_LAUNCH);
+	}
+
+	/**
+	 * @return the autoLogging
+	 */
+	public static boolean isAutoLogging() {
+		return preferences.getBoolean(P_AUTO_LOGGING);
+	}
+
+
+	/**
+	 * @return the whichCycle
+	 */
+	public static int getWhichCycle() {
+		return preferences.getInt(P_WHICH_CYCLE);
+	}
+    
+	/**
+	 * get the specified Aspect that will be logged or displayed
+	 * @return Aspect instance or null
+	 */
+	public static Aspect getAspect() {
+		Aspect aspect = null;		
+		String a = preferences.getString(P_ASPECT);
+		if (a.length() == 0) 
+			aspect = Aspect.getDefault();
+		else
+			aspect = Aspect.getAspect(a);
+		if (aspect == null) {
+		    GELog.debug("GEPreferencePage.getAspect: ",a+" returned null, use default aspect");
+		    aspect = Aspect.getDefault();
+		}
+		return aspect;
+	}
+	/**
+	 * set the Aspect that will be displayed
+	 * @param aspectStr Name of the desired Aspect.
+	 */
+	public static void setAspect(String aspectStr) {
+		Map<String,Aspect> aspectMap = Aspect.getMap();
+		if (aspectMap != null && aspectMap.size() > 0) {
+			
+			Aspect aspect = null;	
+			aspect = Aspect.getAspect(aspectStr);
+			if (aspect == null ) {
+				GELog.debug(GEPreferencePage.class,
+					"Invalid aspect ignored: "+aspectStr);
+				return;
+			}
+		}
+		preferences.setValue(P_ASPECT,aspectStr);
+		
+		GELog.debug(GEPreferencePage.class,
+				"Aspect set: "+aspectStr);
+		return;
+	}
+	
+	/**
+	 * @return the BBox filter flag
+	 */
+	public static boolean isBBOX() {
+		if (preferences != null)
+			return preferences.getBoolean(P_BBOX);
+		else 
+			return false;
+	}
+	/**
+	 * @return the Debug flag
+	 */
+	public static boolean isDebug() {
+		if (preferences != null)
+			return preferences.getBoolean(P_DEBUG);
+		else 
+			return true;
+	}
+	/**
+	 * @return the Test flag
+	 * <pre>
+	 * Uses:
+	 *  - Enhanced Debug output (time and thread)
+	 *  - Filter out nodes
+	 *    - KmlDisplay - if not BBox filter then not US or Mexico
+	 *    - KmlDisplayCustom - not US
+	 * To see where else this is used ask to see call hierarchy
+	 */
+	public static boolean isTest() {
+		
+		if (preferences != null)
+			return preferences.getBoolean(P_TEST);
+		else 
+			return true;
+	}
+	
+	/**
+	 * @return the ShowBorder flag
+	 * <pre>
+	 * With KML you can either show the polygon borders or not.
+	 * This flag will control whether they are shown or not.
+	 * The default is to not show them
+	 */
+	public static boolean isShowBorder() {
+		
+		if (preferences != null)
+			return preferences.getBoolean(P_SHOW_BORDER);
+		else 
+			return true;
+	}
+	// TODO keep this up to date
+	/**
+	 * To display all of the Preferences.
+	 * 
+	 * Please keep this up to date. 
+	 * 
+	 * @return string describing the current preferences.
+	 */
+	public static String display() {
+		StringBuffer sb = new  StringBuffer(200);
+		
+		sb.append("STEM-GoogleEarth Preferences:\n");
+		
+		sb.append("P_METHOD: ");
+		switch (getMethod()) {
+		case M_LOG_ONLY:
+			sb.append("M_LOG_ONLY ");
+			break;
+		case M_LOG_SERVLET:
+			sb.append("M_LOG_SERVLET ");
+			break;
+		case M_ASYNC_SERVLET:
+			sb.append("M_ASYNC_SERVLET ");
+			break;
+		case M_AUTO_LAUNCH:
+			sb.append("M_AUTO_LAUNCH ");
+			break;
+		case M_MANUAL_DISPLAY:
+			sb.append("M_MANUAL_DISPLAY ");
+			break;
+		default:
+			sb.append("Unknown ");
+		}
+		sb.append("\n");
+		
+		
+		sb.append("P_FOLDER: ");
+		sb.append(getFolder()+"\n");
+
+		sb.append("P_SERVER_HOST: ");
+		sb.append(getServerHost()+"\n");		
+
+		sb.append("P_INTERNAL_SERVER: ");
+		sb.append(isInternalServer()+"\n");
+		
+		sb.append("P_AUTO_LAUNCH: ");
+		sb.append(isAutoLaunch()+"\n");
+
+		sb.append("P_AUTO_LOGGING: ");
+		sb.append(isAutoLogging()+"\n");
+
+		sb.append("P_WHICH_CYCLE: ");
+		sb.append(getWhichCycle()+"\n");
+		
+		sb.append("P_ASPECT: ");
+		sb.append(getAspect().toString()+"\n");
+		
+		sb.append("P_BBOX: ");
+		sb.append(isBBOX()+"\n");
+
+		sb.append("P_DEBUG: ");
+		sb.append(isDebug()+"\n");
+  // 
+  //  The following are found in GEAdvancedPreferencePage
+  //
+		sb.append("P_TEST: ");
+		sb.append(isTest()+"\n");
+		
+		sb.append("P_SHOW_BORDER: ");
+		sb.append(isShowBorder()+"\n");
+		return sb.toString();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEView.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEView.java
new file mode 100644
index 0000000..c71669c
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEView.java
@@ -0,0 +1,732 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.File;
+import java.io.FileFilter;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ColorRegistry;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEInterface;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.ge.kml.StemKml;
+import org.eclipse.stem.ui.ge.views.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.part.ViewPart;
+
+
+/**
+ * GEView: Opens a view of STEM that controls the 
+ * interface to GoogleEarth. <p> 
+ * The actual interface to GoogleEarth is handled by GEInterface class
+ * This GUI view only handles the direct User interface.  
+ * <p> 
+ * It displays a window with a list of active simulations and 
+ * supports a popup context window that allows a set of actions 
+ * either global actions or actions on a specific simulation
+ *   
+ * 
+ * <p>
+ */
+
+public class GEView extends ViewPart  {
+	
+	/**
+	 * The identifier of the GoogleEarth View
+	 */
+	public static final String ID_GE_VIEW = Constants.ID_ROOT
+			+ ".ui.views.ge"; //$NON-NLS-1$
+
+	/**
+	 * A ListViewer that will list simulations that we 
+	 * can watch. 
+	 */
+	private ListViewer viewer = null;
+	
+	
+
+	/**
+	 * Activator for the ui project.
+	 * This is here to make it clear which Activator we 
+	 * are refering to.
+	 */
+	private org.eclipse.stem.ui.Activator uiActivator = null;
+	/**
+	 * The color registry manages SWT colors, creates them on-demand, and takes
+	 * care of disposal.
+	 */
+	private static ColorRegistry colorRegistry = null;
+	/**
+	 * reference to contentprovider for the ListViewer
+	 */
+	private GEViewContentProvider contentProvider = null;
+	/**
+	 * reference to the interface class
+	 */
+	private GEInterface gei = null;
+
+	
+
+	
+	/**
+	 * set to true wen GoogleEarth view starts
+	 * Used to prevent more than one instance.
+	 */
+	private static boolean active = false;
+	
+	/**
+	 * Some constants we need to set preferred sizes of SWT controls and
+	 * containers.
+	 */
+
+	private static final int STANDARD_LENGTH = 370;
+
+	private static final int STANDARD_HEIGHT = 15;
+
+	
+	/* *************************************************** 
+	 * Constructor
+	 *****************************************************/
+	/**
+	 * The GEView constructor gets control when the user opens 
+	 * the "View" in the current perspective.
+	 * 
+	 * In the GEView constructor we will create an
+	 * instance of GEInterface which does all the work.
+	 * 
+	 * 
+	 */
+	public GEView() {
+		if (active) {
+			GELog.error("STEM - GoogleEarth interface already active",null);
+			throw new RuntimeException("Duplicate");
+		}
+		active = true;
+		gei = new GEInterface(this);			
+		GELog.debug(GEView.class,"gei="+gei);	
+//		 Set the color registry
+		if (colorRegistry == null) {
+			uiActivator = org.eclipse.stem.ui.Activator.getDefault();
+			colorRegistry = uiActivator.getColorRegistry();
+		}
+		
+					
+	}
+
+
+	
+	/**
+	 * This is a callback that will allow us
+	 * to create the viewer and initialize it.
+	 * We also add some useful buttons to the view
+	 * 
+	 * @param parent Composite to work with
+	 */
+	public void createPartControl(Composite parent) {
+
+		//	 get our preferences 
+        
+		boolean debug = GEPreferencePage.isDebug();
+		if (debug) {
+			GELog.DEBUG = true;
+			GELog.debug(this,"Debug option turned on.");
+		} else {
+			GELog.debug(this,"Debug option being turned off.");
+			GELog.DEBUG = false;
+		}
+		GELog.debug("GEView.createPartControl:");
+		
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 1;
+	    
+        //	 setup the aspect display buttons  
+
+		parent.setLayout(gridLayout);
+		String aspect = Aspect.getDefaultCode();
+		createControlButtons(parent,aspect);
+		
+		
+        // setup the List of Simulations		
+		GridData gridData = new GridData();
+	    gridData.horizontalAlignment = GridData.FILL;
+	    gridData.grabExcessHorizontalSpace = true;
+	    Composite control = getScrollable(parent,gridData);
+		control.setLayout(new FillLayout());
+
+		viewer = new ListViewer(control);
+		// we provide the ContentProvider and LabelProvider classes
+		
+		contentProvider = new GEViewContentProvider(gei); 
+		viewer.setContentProvider(contentProvider);
+		GEViewLabelProvider lp = new GEViewLabelProvider();
+		viewer.setLabelProvider(lp );
+		lp.setGEI(gei);
+		// define the instance that will be the parent 
+		// passed to the getElements method
+		viewer.setInput(SimulationManager.getManager());
+        //We also want to be able to have a user select a simluation from our
+		// view and have that been seen by others. So we register the ListViewer
+		// instance as the view's selection provider. When you click on the GUI
+		// it finds the underlying Object (i.e., ISimulation) you selected and
+		// passes it to the selection service.
+		getSite().setSelectionProvider(viewer);
+		
+		
+		// if we wanted to listen to all selection events 
+		IWorkbenchWindow ww = getSite().getWorkbenchWindow();
+		ISelectionService ss = ww.getSelectionService();
+		ss.addSelectionListener(contentProvider);
+		// (getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(contentProvider);
+		
+		
+		boolean ok = gei.init(); 
+		if ( ! ok ) {
+			GELog.debug(this,gei.getErrorMessage());
+			showMessage(gei.getErrorMessage());
+		    gei.setErrorMessage(null);
+		}
+		// make the popup menu actions
+		GEViewActions actions = new GEViewActions(this,gei);
+		if (actions == null) {
+			GELog.error("Unable to setup context menu",null);
+		}
+		
+		boolean autoLaunch = GEPreferencePage.isAutoLaunch();
+		if (autoLaunch) {
+			StemKml.launchGE();
+		}		
+	}
+	/**
+	 * call the refresh method for the viewer
+	 *
+	 */
+	public void refresh() {
+		viewer.refresh();
+	}
+	/**
+	 * Put up a dialog box with an informational msg
+	 * 
+	 * @param message
+	 */
+	public void showMessage(String message) {
+		MessageDialog.openInformation(
+			viewer.getControl().getShell(),
+			Messages.getString("GEView.27"), //$NON-NLS-1$
+			message);
+	}
+	/**
+	 * Put up a dialog box with a warning msg
+	 * 
+	 * @param message
+	 */
+	
+//	private void showWarning(String message) {
+//		MessageDialog.openWarning(
+//			viewer.getControl().getShell(),
+//			"GEView: GoogleEarth View",
+//			message);
+//	}
+	
+	
+	/**
+	 * Verify that we can use the folder to store KML
+	 * @param folder
+	 * @return verified folder
+	 */
+	public String verifyFolder(String folder) {
+		folder = folderDialog(folder);
+		GELog.debug(this,"verifyFolder="+folder);
+		if (folder != null)
+		    GEPreferencePage.setFolder(folder);
+		return folder;
+	}
+	
+
+
+	
+	
+	/**
+	 * dialog to choose a folder to store files into.
+	 * 
+	 * If Default folder exist, it will be used.
+	 * if default folder is null or does not exist,
+	 * then system temporary folder will be used as default
+	 * and a dialog will be shown.
+	 * <p>
+	 * If there are existing KML files in the folder
+	 * a prompt will be produced asking if they should be removed.
+	 * 
+	 * @param deflt Default folder.
+	 * @return folder path.
+	 */
+	private String folderDialog(String deflt) {
+		String folder = null;
+		try {
+			if (deflt != null) {
+				File defaultf = new File(deflt);
+				if (defaultf.exists() && defaultf.isDirectory()) {
+					folder = deflt;
+				} else {
+					folder = null;
+				}
+			}
+			while (true) {
+				if (folder == null) {
+					// get tmp file folder
+					File tmpFile = File.createTempFile("XXX","tmp"); //$NON-NLS-1$ //$NON-NLS-2$
+					folder = tmpFile.getParent();
+					Shell shell = viewer.getControl().getShell();
+					int style = SWT.APPLICATION_MODAL;
+					DirectoryDialog fd = new DirectoryDialog(shell,style);
+					fd.setFilterPath(folder);
+					fd.setText(Messages.getString("GEView.30")); //$NON-NLS-1$
+					fd.setMessage(Messages.getString("GEView.31")); //$NON-NLS-1$
+
+					while (true) {
+						folder = fd.open();
+						if (folder == null) {
+							// user pressed cancel
+							return null;
+						} else {		    
+							File dir = new File(folder);
+							if (dir.exists() && dir.isDirectory()) {
+								boolean ok = checkContents(folder);
+								if (ok) 
+									break;
+							} if (!dir.exists()) {
+								dir.mkdirs();
+							}
+						}
+					}  // while(true)
+					break;
+				} else { 
+					// using the specified folder.  
+					// check if KML filies to be deleted.
+					boolean ok = checkContents(folder);
+					if (ok) 
+						break;
+					else 
+						folder = null;
+				}
+			}
+			
+		} catch (Exception t) {
+			
+			GELog.error("Folder Dialog", t);
+		}
+		return folder;
+	}
+
+
+	/**
+	 * dialog to choose a folder to display files from.
+	 * 
+	 * It is expected to have KML files in it already
+	 * 
+	 * @param folder Default folder.
+	 * @return folder path or null if no display desired
+	 */
+	public String displayFolderDialog(String folder) {
+		String displayFolder = null;
+		try {
+			if (folder != null) {
+				File defaultf = new File(folder);
+				if (defaultf.exists() && defaultf.isDirectory()) {
+					displayFolder = folder;
+				} else {
+					displayFolder = null;
+				}
+			}
+			while (true) {
+
+				Shell shell = viewer.getControl().getShell();
+				int style = SWT.APPLICATION_MODAL;
+				DirectoryDialog fd = new DirectoryDialog(shell,style);
+				fd.setFilterPath(displayFolder);
+				fd.setText(Messages.getString("GEView.30")); //$NON-NLS-1$
+				fd.setMessage(Messages.getString("GEView.34")); //$NON-NLS-1$
+
+				displayFolder = fd.open();
+				if (displayFolder !=  null) {
+					if (validFolder(displayFolder)) {
+						break;
+					}
+				} else {
+					// user canceled  out
+					displayFolder = null;
+					break;
+				}
+			}  // while(true)
+		} catch (Exception t) {
+			GELog.error("GEView: displayFolderDialog", t);
+			displayFolder = null;
+		}
+		return displayFolder;
+	}
+
+	
+	/**
+	 * Verify if folder contains KML files
+	 * 
+	 * @param folder
+	 * @return true if contains KML files or user oks it
+	 */
+	private boolean validFolder(String folder) {
+		boolean ok = false;
+		File dir = new File(folder);
+		if (dir.exists() && dir.isDirectory()) {
+
+			File[] contents = fileList(dir);
+			if (contents.length > 0) {
+				ok =true;
+			} else {
+				// if no existing files ask
+				Shell shell = viewer.getControl().getShell();
+				int style = SWT.APPLICATION_MODAL|
+				SWT.ICON_QUESTION|SWT.YES|SWT.NO;
+				MessageBox question = new MessageBox(shell,style);
+
+				String template = Messages.getString("GEView.33");	  //$NON-NLS-1$
+				String output = String.format(template,dir.getAbsolutePath());
+				question.setMessage(output);
+
+				int ans = question.open();
+				if (ans==SWT.YES) {
+					ok = true;				
+				}
+			}							
+		}
+
+		return ok;
+	}
+    
+	/**
+	 * Check the specified folder for existing KML files
+	 * and if so ask if they should be removed.
+	 * 
+	 * @param folder
+	 * @return true if the folder can be used.
+	 *   false if a new folder should be chosen.
+	 */
+	private boolean checkContents(String folder) {
+		boolean ok = false;
+		File dir = new File(folder);
+		File[] contents = fileList(dir);
+		if (contents.length == 0) {
+			ok =true;
+		} else {
+			// if existing files ask
+			Shell shell = viewer.getControl().getShell();
+			int style = SWT.APPLICATION_MODAL|
+			SWT.ICON_QUESTION|SWT.YES|SWT.NO|SWT.CANCEL;
+			MessageBox question = new MessageBox(shell,style);
+
+			String template = Messages.getString("GEView.32");					   //$NON-NLS-1$
+			String output = String.format(template,dir.getAbsolutePath());
+			question.setMessage(output);
+
+			int ans = question.open();
+			if (ans==SWT.YES) {
+
+				try {
+					for (File f:contents) {							
+						f.delete();
+					}
+					ok = true;;
+				} catch (Exception e) {
+					GELog.error("Unable to delete KML files", e);
+
+				}
+			} else if (ans==SWT.NO) {
+				// user said it was ok to not delete files
+				ok = true;
+			} 
+		}		
+		return ok;
+	}
+		
+	/**
+	 * get the list of files in the specified folder.
+	 * The files will only be files with the .kml 
+	 * extension and will be sorted by filename.
+	 * Also netlink files will be filtered out
+	 * 
+	 * @param folder Directory that contains KML files to display
+	 * @return array of filenames
+	 */
+
+	private File[] fileList(File folder) {
+
+		FileFilter ff = new FileFilter() {
+			public boolean accept(File f){
+				if (f.getName().toLowerCase().startsWith("net")) { //$NON-NLS-1$
+					return false;
+				}
+				if (f.getName().toLowerCase().endsWith(".kml")) { //$NON-NLS-1$
+					return true;
+				}
+				return false;
+			}
+		};			
+
+		try {						
+			File[] files = folder.listFiles(ff);
+			if (files == null) {
+				return new File[0];
+			}			
+			return files;
+		} catch (Exception e) {		
+			GELog.error(e.getMessage(), e);
+			return null;
+		}
+	}
+
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		//log("setFocus(): ");
+		viewer.getControl().setFocus();
+	}
+
+	/**
+	 * @return the viewer
+	 */
+	public ListViewer getViewer() {
+		return viewer;
+	}
+
+	public void dispose() {
+		GELog.debug(this,"Dispose()");
+		gei.dispose();
+		active = false;
+	}
+
+
+
+	/**
+	 * @return the contentProvider
+	 */
+	public GEViewContentProvider getContentProvider() {
+		return contentProvider;
+	}
+	
+ /**
+   * setup the Composite that will allow scrolling 
+   * 
+   * @param parent  Composite to use as parent
+   * @return the composite that holds scrollable stuff.
+   */
+	private Composite getScrollable(Composite parent,GridData gridData) {
+		
+		/**
+		 * Some constants we need to set preferred sizes of SWT controls
+		 */	 
+		final int SCROLL_MIN_LENGTH = 3000;
+
+		final int SCROLL_MIN_HEIGTH = 10000;
+		
+		ScrolledComposite scrollComposite =
+			new ScrolledComposite(parent, SWT.V_SCROLL
+				| SWT.H_SCROLL);
+		scrollComposite.setExpandHorizontal(true);
+		scrollComposite.setExpandVertical(true);
+		scrollComposite.setLayoutData(gridData);
+		scrollComposite.setMinSize(SCROLL_MIN_LENGTH, SCROLL_MIN_HEIGTH);
+		Composite control = new Composite(scrollComposite, SWT.NONE);
+		
+		scrollComposite.setContent(control);
+		return control;
+		
+	}
+			
+	// TODO modify this to create puttons based on Aspect class
+	// instead of hardcoding SEIR   
+	/**
+	 * Creates the array of SWT push buttons for choosing 
+	 * the aspect to display. 
+	 * 
+	 * @param parent Parent Composite
+	 * @param current  current value of Aspect
+	 * @return Composit that holds the buttons.
+	 */
+	protected Composite createControlButtons(Composite parent, String current) {
+        
+		Button display = new Button(parent,SWT.PUSH);
+        display.setText("Display");
+        display.setToolTipText("Display current map");
+        display.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					ISimulation sim = contentProvider.getCurrentSimulation();
+					if (sim != null) {
+						boolean ok = gei.displayMap(sim);
+						if (!ok) {
+							showMessage(Messages.getString("GEView.15")); //$NON-NLS-1$
+						}
+					} else {
+						showMessage("No active Simulation");
+					}
+					break;
+				}
+			}
+		});
+        
+		Group btnContainer = null;
+		final int OFFSET = 16;
+		btnContainer = new Group(parent, SWT.SHADOW_IN);
+        btnContainer.setText("Select Aspect to be displayed");
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 4;
+		gridLayout.makeColumnsEqualWidth = true;
+		btnContainer.setLayout(gridLayout);
+
+		GridData gridData = new GridData();
+		gridData.grabExcessHorizontalSpace = false;
+		gridData.grabExcessVerticalSpace = false;
+		gridData.heightHint = STANDARD_HEIGHT + OFFSET;
+		gridData.minimumHeight = STANDARD_HEIGHT + OFFSET;
+		gridData.widthHint = STANDARD_LENGTH;
+		gridData.minimumWidth = STANDARD_LENGTH;
+		btnContainer.setLayoutData(gridData);
+
+		// create the simulation control buttons
+		// Note: these are Radio buttons even thou Push Buttons would be better
+		// but stupid eclipse does not allow setting of background color 
+		// for pushbuttons.
+		Button b_s = new Button(btnContainer, SWT.RADIO);
+		Button b_e = new Button(btnContainer, SWT.RADIO);
+		Button b_i = new Button(btnContainer, SWT.RADIO);
+		Button b_r = new Button(btnContainer, SWT.RADIO);
+		
+		
+		// set alignment and background color
+        b_s.setText("S");        
+        b_s.setSelection( "S".equals(current) );
+        b_s.setBackground(parent.getDisplay().getSystemColor(
+				SWT.COLOR_BLUE));
+        b_s.setForeground(parent.getDisplay().getSystemColor(
+				SWT.COLOR_WHITE));				
+		b_s.setToolTipText("Suceptiple"); //$NON-NLS-1$
+		b_s.setLayoutData(getButtonGridData());
+
+		b_e.setText("E");
+		b_e.setSelection( "E".equals(current) );
+		b_e.setBackground(parent.getDisplay().getSystemColor(
+						SWT.COLOR_YELLOW));	
+		b_e.setToolTipText("Exposed"); //$NON-NLS-1$
+		b_e.setLayoutData(getButtonGridData());
+
+		b_i.setText("I");
+		b_i.setSelection( "I".equals(current) );
+		b_i.setBackground(parent.getDisplay().getSystemColor(
+						SWT.COLOR_RED));
+		b_i.setToolTipText("Infectious"); //$NON-NLS-1$
+		b_i.setLayoutData(getButtonGridData());
+
+		b_r.setText("R");
+		b_r.setSelection( "R".equals(current) );
+		b_r.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GREEN));
+		b_r.setToolTipText("Recovered"); //$NON-NLS-1$
+		b_r.setLayoutData(getButtonGridData());
+        
+		
+		
+		// set event listeners for buttons
+		b_s.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:					
+					GEView.this.setAspect("S");					
+					break;
+				}
+			}
+		});
+		b_e.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					GEView.this.setAspect("E");	
+					break;
+				}
+			}
+		});
+		b_i.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					GEView.this.setAspect("I");	
+					break;
+				}
+			}
+		});
+		b_r.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					GEView.this.setAspect("R");	
+					break;
+				}
+			}
+		});
+		GridData btngridData = new GridData();
+		btngridData.horizontalAlignment = GridData.FILL;
+		btngridData.grabExcessHorizontalSpace = true;
+	    btnContainer.setLayoutData(btngridData);
+		return btnContainer;
+	}
+	/**
+	 * User selected an Aspect radio button
+	 * 
+	 * @param aspectCode
+	 */
+	private void setAspect(String aspectCode) {
+		GELog.debug(this,aspectCode);
+		Aspect aspect = Aspect.getAspect(aspectCode);
+		ISimulation sim = contentProvider.getCurrentSimulation();
+		// OK if sim is null
+		gei.setAspectToDisplay(sim,aspect);
+		
+	}
+	
+	/**
+	 * Create a new grid data customized for the push buttons.
+	 * 
+	 * @return gridData the new grid data object
+	 */
+	protected GridData getButtonGridData() {
+		GridData gridData = new GridData();
+		gridData.grabExcessVerticalSpace = false;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.horizontalAlignment = SWT.FILL;
+		gridData.verticalAlignment = SWT.CENTER;
+		return gridData;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewActions.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewActions.java
new file mode 100644
index 0000000..3fc4d12
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewActions.java
@@ -0,0 +1,467 @@
+package org.eclipse.stem.ui.ge.views;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.ge.Aspect;
+import org.eclipse.stem.ui.ge.GEInterface;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * GEViewActions: Defines and handles the actions.
+ *  
+ * <p> 
+ * It supports a popup context window that allows 
+ * a set of actions 
+ * either global actions or actions on a specific simulation
+ *   
+ * 
+ */
+
+public class GEViewActions  {
+	
+	/**
+	 * reference to the caller GEView class
+	 */
+	private GEView geView = null;
+	
+	/**
+	 * reference to the interface class
+	 */
+	private GEInterface gei = null;
+	/**
+	 * A ListViewer that will list simulations that we 
+	 * can watch. 
+	 */
+	private ListViewer viewer = null;
+	/**
+	 * reference to contentprovider for the ListViewer
+	 */
+	private GEViewContentProvider contentProvider = null;
+	/** 
+	 * actions that we can take on selected
+	 * elements in the list.
+	 */
+	
+	private Action actionStop;
+	private Action actionStart;
+	private Action actionMap;
+	private Action actionMapNode;
+	private Action actionStatus;
+	/**
+	 * actions that are not for a selected
+	 * simulation.
+	 */
+	private Action actionGEStart;
+	private Action actionGERestart;
+	private Action actionGERun;
+	private Action actionGEStop;
+	
+	
+	private Action actionDebug;
+	/**
+	 * action invoked on double click
+	 */
+	private final Action doubleClickAction= null;
+
+		
+	/* *************************************************** 
+	 * Constructor
+	 *****************************************************/
+	/**
+	 * The GEView constructor gets control when the user opens 
+	 * the "View" in the current perspective.
+	 * 
+	 * In the GEView constructor we will create an
+	 * instance of GEInterface which does all the work.
+	 * @param geView reference to caller
+	 * @param gei reference to GE interface 
+	 * 
+	 * 
+	 */
+	public GEViewActions(GEView geView, GEInterface gei) {
+		this.geView = geView;
+		this.gei = gei;			
+		this.viewer = geView.getViewer();		
+	    this.contentProvider = geView.getContentProvider();
+	
+	
+		// make the popup menu actions
+		//makeActions();	
+		// activate the context menu 
+		hookContextMenu();
+		// activate doubleclick action
+		//hookDoubleClickAction();
+		
+		
+	}
+
+	 /**
+     * Make all of the popup actions.
+     * 
+     * actionStop - turn off logging for current simulation
+     * actionStart - turn off logging for current simulation
+     * actionMap - Send the KML to display the map for the
+     *           current simulation.
+     * actionStatus - display status
+     */
+	private void makeActions() {
+		// ------------------------------------
+		// actionStop - turn OFF logging
+        // ------------------------------------
+		actionStop = new Action() {
+			@Override
+			public void run() {				
+				gei.setActive(contentProvider.getCurrentSimulation(),false);
+				geView.showMessage(Messages.getString("GEView.4")); //$NON-NLS-1$
+			}
+		};
+		actionStop.setText(Messages.getString("GEView.5")); //$NON-NLS-1$
+		actionStop.setToolTipText(Messages.getString("GEView.6")); //$NON-NLS-1$
+		actionStop.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+//		 ------------------------------------
+        //	actionStart - turn ON logging
+//		 ------------------------------------
+		actionStart = new Action() {
+			@Override
+			public void run() {								
+				String logFolder = geView.verifyFolder(GEPreferencePage.getFolder());
+				if (logFolder  == null) 
+					return;
+				else 
+					GEPreferencePage.setFolder(logFolder);
+				
+				//showMessage(String.format("GoogleEarth logging ON. To: %s",fn);
+				boolean ok = gei.setActive(contentProvider.getCurrentSimulation(),true);
+				if (!ok) {
+					geView.showMessage(gei.getErrorMessage());
+				} else {
+					geView.showMessage(String.format("GoogleEarth logging ON. To: %s",logFolder));
+				}
+			}
+		};
+		actionStart.setText(Messages.getString("GEView.7")); //$NON-NLS-1$
+		actionStart.setToolTipText(Messages.getString("GEView.8")); //$NON-NLS-1$
+		actionStart.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+// **************************************************************************
+//		 ------------------------------------
+//		actionGEStart - launch an empty control.kml to start GE
+//		 ------------------------------------
+		actionGEStart = new Action() {
+			@Override
+			public void run() {
+				gei.startGE();
+				
+			}
+		};
+		actionGEStart.setText(Messages.getString("GEView.9")); //$NON-NLS-1$
+		actionGEStart.setToolTipText(Messages.getString("GEView.10")); //$NON-NLS-1$
+		actionGEStart.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+//		 ------------------------------------
+//		actionGERestart - process a restart of the GE app
+//		 ------------------------------------
+		actionGERestart = new Action() {
+			@Override
+			public void run() {
+				gei.restartGE();
+				
+			}
+		};
+		actionGERestart.setText(Messages.getString("GEView.9a")); //$NON-NLS-1$
+		actionGERestart.setToolTipText(Messages.getString("GEView.10a")); //$NON-NLS-1$
+		actionGERestart.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+
+//		 ------------------------------------
+//		actionGERun - launch control.kml to start GE reading KML
+//		 ------------------------------------
+		actionGERun = new Action() {
+			@Override
+			public void run() {
+				String folder = GEPreferencePage.getFolder();
+				folder = geView.displayFolderDialog(folder);
+				if (folder != null) {
+					boolean ok = gei.runGE(folder);
+					if (!ok) {						
+						geView.showMessage(gei.getErrorMessage());
+					}
+				}
+				
+			}
+		};
+		actionGERun.setText(Messages.getString("GEView.11")); //$NON-NLS-1$
+		actionGERun.setToolTipText(Messages.getString("GEView.12")); //$NON-NLS-1$
+		actionGERun.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+//		 ------------------------------------
+        //	actionGEStop - stop any active GoogleEarth networklink
+		//  It will not actually stop GE 
+//		 ------------------------------------
+		actionGEStop = new Action() {
+			@Override
+			public void run() {
+				gei.stopGE();
+				
+			}
+		};
+		actionGEStop.setText(Messages.getString("GEView.13")); //$NON-NLS-1$
+		actionGEStop.setToolTipText(Messages.getString("GEView.14")); //$NON-NLS-1$
+		actionGEStop.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));		
+		
+        //------------------------------------
+		// actionMap - display current map in GoogleEarth 
+        //------------------------------------
+		actionMap = new Action() {
+			@Override
+			public void run() {
+
+				boolean ok = gei.displayMap(contentProvider.getCurrentSimulation());
+				if (!ok) {
+					geView.showMessage(Messages.getString("GEView.15")); //$NON-NLS-1$
+				}
+			}
+		};
+		
+		actionMap.setText(Messages.getString("GEView.16")); //$NON-NLS-1$
+		actionMap.setToolTipText(Messages.getString("GEView.17")); //$NON-NLS-1$
+		actionMap.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+
+//		 ------------------------------------
+//		 actionMapNode - display Node in current map in GoogleEarth
+//		 ------------------------------------
+		actionMapNode = new Action() {
+			@Override
+			public void run() {
+				String area = null;
+				String adminFile = null;
+				String search = null;
+
+				DisplayAreaDialog input = new DisplayAreaDialog(
+						Display.getCurrent().getActiveShell());
+                
+				
+                boolean done = false;
+                while (!done) {
+                	int rc = input.open();
+                	if (rc == IDialogConstants.OK_ID ||
+                		  rc == IDialogConstants.PROCEED_ID	) {
+                		adminFile = input.getAdminFile();
+                		search = input.getSearch().trim();
+                		boolean clear = input.isClear();
+                		Aspect a = gei.getAspectToDisplay(contentProvider.getCurrentSimulation());
+        				GELog.debug(this,"Display: "+area+ " aspect: "+a.toString());
+        				boolean ok = gei.displayArea(adminFile,search,clear);
+        				if (!ok) {
+        					geView.showMessage(Messages.getString("GEView.15n")+"\n"+
+        							gei.getErrorMessage()); 
+        					
+        				} else if (rc == IDialogConstants.OK_ID) {                 		
+                    		done = true;
+                    	}
+                	} else if (rc == IDialogConstants.CANCEL_ID) {
+                		done = true;
+                    }
+                }
+				
+			}
+		};
+			
+		actionMapNode.setText(Messages.getString("GEView.16n")); //$NON-NLS-1$
+		actionMapNode.setToolTipText(Messages.getString("GEView.17n")); //$NON-NLS-1$
+		actionMapNode.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+		
+//		 ------------------------------------
+//		 actionStatus - display status
+//		 ------------------------------------
+		actionStatus = new Action() {
+			@Override
+			public void run() {
+				boolean save = GELog.DEBUG;
+				GELog.DEBUG = true;
+				gei.displayStatus();
+				GELog.DEBUG = save;
+			}
+		};
+		actionStatus.setText(Messages.getString("GEView.18")); //$NON-NLS-1$
+		actionStatus.setToolTipText(Messages.getString("GEView.19") ); //$NON-NLS-1$
+		actionStatus.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+				getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+//		 ------------------------------------
+		//		 actionDebug - Flip DEBUG status 
+//		 ------------------------------------
+		actionDebug = new Action() {
+			@Override
+			public void run() {
+		      if (GELog.DEBUG) {				
+				  GELog.debug(this, "Turning DEBUG off");
+				  GELog.DEBUG = false; // flip status
+		      } else {
+		    	  GELog.DEBUG = true; // flip status  
+		    	  GELog.debug(this, "Turned DEBUG on");
+		      }
+			}
+		};
+		// show what it will be changed to.
+		if (GELog.DEBUG) {
+		    actionDebug.setText(Messages.getString("GEView.20Off")); //$NON-NLS-1$
+		} else {
+			actionDebug.setText(Messages.getString("GEView.20On")); //$NON-NLS-1$
+		}
+		actionDebug.setToolTipText(Messages.getString("GEView.21") ); //$NON-NLS-1$
+		actionDebug.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+				getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+        // actionDisplay* - specify if we should display S E I R
+        //        (susceptible , Exposed, Infectious, Recovered  
+
+	}
+	
+	
+	
+	/**
+	 * The following sets up a popup menu that can 
+	 * be used to turn on and off the generation of
+	 * KML files and display the status  
+	 * In the future, other commands could be implemented.
+	 * 
+	 *
+	 */
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("GoogleEarth"); //$NON-NLS-1$
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				makeActions();
+				fillContextMenu(manager);
+			}
+		});
+		//Shell shell = viewer.getControl().getShell();
+		
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+		viewer.getControl().setMenu(menu);
+		geView.getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+
+    /**
+     * setup the Popup actions 
+     * This is called at the time the popup is requested
+     * so the resulting popup is customized based on the status. 
+     * For example, if the Logging option is ON then the 
+     * action generated will turn it OFF. 
+     * 
+     * @param manager
+     */
+	private void fillContextMenu(IMenuManager manager) {
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+		ISimulation sim = contentProvider.getCurrentSimulation();
+		if ( sim != null) {
+			if (gei.isActive(sim)) {
+				actionStop.setEnabled(true);
+		        manager.add(actionStop);  // stop
+		        actionStart.setEnabled(false);
+		        manager.add(actionStart);
+		        
+		       
+			} else { 
+				actionStop.setEnabled(false);
+		        manager.add(actionStop);  // stop
+		        actionStart.setEnabled(true);
+		        manager.add(actionStart);  // start
+			}
+			manager.add(actionMap);  // map
+			
+		}
+		manager.add(actionMapNode);  // map
+		manager.add(actionStatus);  // status
+		manager.add(new Separator());
+		manager.add(actionDebug);  // Display Debug
+		manager.add(new Separator());
+		manager.add(actionGEStart);  // Start GE
+		manager.add(actionGERestart);  // ReStart GE
+		manager.add(actionGERun);  // Display KML in GE
+		manager.add(actionGEStop);  // Stop GE display
+//		manager.add(new Separator());
+//		MenuManager displayMenu = new MenuManager(Messages.getString("GEView.2"),
+//				Messages.getString("GEView.3")); //$NON-NLS-1$ //$NON-NLS-2$
+//		Map<String,Aspect> mapAspects = Aspect.getMap();
+//		for (Map.Entry<String,Aspect> entry : mapAspects.entrySet() ) {
+//			displayMenu.add(actionAspectDisplay(sim,entry.getValue()) );
+//		}
+//
+//
+//		manager.add(displayMenu);
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+	
+//	/**
+//	 * 
+//	 * @param aspect
+//	 * @return Action to be added to popup menu
+//	 */
+//private Action actionAspectDisplay(ISimulation sim,final Aspect aspect) {
+//	 
+//	  Action action = new Action() {
+//			public void run() {								
+//				gei.setAspectToDisplay(contentProvider.getCurrentSimulation(),aspect);				
+//			}
+//		};
+//		String template = Messages.getString("GEView.22");//$NON-NLS-1$
+//		action.setText(String.format(template, aspect.getName() )); 
+//		action.setChecked(false);
+//		if (sim != null) {
+//			if ( gei.getAspectToDisplay(sim)==aspect)
+//				action.setChecked(true);
+//		} else {
+//			if (gei.getDefaultAspect()==aspect) 		
+//				action.setChecked(true);
+//		}
+//			
+//	  return action;
+//	}	
+   
+	
+	@SuppressWarnings("unused") //$NON-NLS-1$
+	private void hookDoubleClickAction() {
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				doubleClickAction.run();
+			}
+		});
+	}
+	
+
+
+
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewContentProvider.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewContentProvider.java
new file mode 100644
index 0000000..9ea28c3
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewContentProvider.java
@@ -0,0 +1,256 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.definitions.nodes.impl.RegionImpl;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.ui.ge.GEInterface;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.stem.ui.views.geographic.map.GeographicSelectionElements;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+
+/************ GEViewContentProvider ***********/
+/*
+ * The content provider class is responsible for
+ * providing objects to the view. It can wrap
+ * existing objects in adapters or simply return
+ * objects as-is. These objects may be sensitive
+ * to the current input of the view, or ignore
+ * it and always show the same content 
+ * (like Task List, for example).
+ */
+ 
+public class GEViewContentProvider 
+      implements IStructuredContentProvider, 
+      ISimulationManagerListener, ISelectionChangedListener,
+      ISelectionListener {
+	
+	/**
+	 * A ListViewer that will list simulations that we 
+	 * can watch. 
+	 */
+	private ListViewer viewer;
+	/**
+	 * This is the selected Simulation which will be used 
+	 * for actions in the context menu.
+	 */
+	private ISimulation currentSimulation = null;
+	private SimulationManager simulationManager = null;
+	/**
+	 * the interface to the rest of GE interface code
+	 */
+	private GEInterface gei = null;
+	/** 
+	 *  constructor
+	 *
+	 * @param gei  Reference to the GE Interface object.
+	 */
+	public GEViewContentProvider(GEInterface gei) {
+		this.gei = gei;
+	}
+	
+	/**
+	 * This is given control when the input parent changes.
+	 * In our case, SimulationManager is the parent(Model) 
+	 * and it never changes after the initial startup. 
+	 * @param v  Viewer reporting change
+	 * @param oldInput  old SimulationManager or null
+	 * @param newInput  new input source(new SimulationManager)
+	 */
+	
+	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		GELog.debug(this,"inputChanged: old="+oldInput+" new="+newInput);
+        this.viewer = (ListViewer)v;
+		if (oldInput != null) {
+			// Yes
+			((SimulationManager)oldInput).removeListener(this);
+		}
+		simulationManager = (SimulationManager) newInput;
+
+		// Do we have a new simulation manager to listen to?
+		if (simulationManager != null) {
+			// Yes
+			simulationManager.addSimulationManagerListener(this);
+		}
+		viewer.addSelectionChangedListener(this);
+		
+		//  register new input model
+	}
+	
+	/**
+	 * Cleanup when user wants to terminate the view
+	 */
+	public void dispose() {
+		GELog.debug(this.getClass(),"dispose(): ");
+		if (simulationManager != null)
+		  simulationManager.removeListener(this);
+		if (viewer != null)
+		  viewer.removeSelectionChangedListener(this);
+	}
+	/**
+	 * Provide the data that will be displayed in a list
+	 * 
+	 * @param parent  Set to refer to the SimulationManager singleton
+	 */
+	public Object[] getElements(Object parent) {
+		//GELog.debug(this,"parent="+parent);
+		SimulationManager sm = (SimulationManager)parent;
+		List<ISimulation> simulations = sm.getActiveSimulations();
+		int n = simulations.size();
+		Object[] returnArray = new Object[n];
+		for (int i=0;i<n;i++) {
+			ISimulation simulation = simulations.get(i);
+			//String name =simulation.getName();
+			//Scenario scenario = simulation.getScenario();
+			
+			//GELog.debug(this,""+i+" "+name);
+			returnArray[i] = simulation;				
+		}
+		// if only one simulation - assume selected
+		if (n==1 && currentSimulation == null)
+			currentSimulation = simulations.get(0);
+		
+		return returnArray;
+	}
+	
+	/**
+	 * We get here because we are listening for SimulationChanged 
+	 * events and one occured. 
+	 * 
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+	 */
+	public void simulationsChanged(SimulationManagerEvent event) {
+		GELog.debug(this.getClass(),"simulationsChange: ");
+
+
+		viewer.remove(event.getSimulationsRemoved());
+		viewer.add(event.getSimulationsAdded());
+		if (this.currentSimulation == null && 
+				event.getSimulationsAdded().length > 0)  {
+			currentSimulation = event.getSimulationsAdded()[0];
+			GELog.debug(this,"currentSimulation: "+
+					currentSimulation.getName());
+		} 
+		if (this.currentSimulation != null &&  
+				event.getSimulationsRemoved().length > 0)  {
+			for(ISimulation sim:event.getSimulationsRemoved()) {
+			    if (currentSimulation == sim) {
+			    	currentSimulation = null;
+			        GELog.debug(this,"currentSimulation is now null ");
+			    }
+	    	}			
+		} 
+	}	 // simulationsChanged
+	/**
+	 * This method is called whenever ANYTHING is selected in the Eclipse
+	 * workbench. It's job is to filter out selections of ISimulation
+	 * instances see if it is one we are waiting for
+	 * 
+     * required method for ISelectionListener  
+	 * 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IWorkbenchPart part, ISelection select) {
+		if (! (select instanceof StructuredSelection) ) 
+			return;	
+		// Verify if we are interested in this selection event
+		Object[] elements = ((StructuredSelection)select).toArray();
+		if ( (elements.length != 2) || 
+		   (! (elements[1] instanceof GeographicSelectionElements))) {  
+				return;
+		}
+		RegionImpl region = (RegionImpl)elements[0];
+		GeographicSelectionElements gse = 
+			(GeographicSelectionElements)elements[1];		
+		
+		// if we get here it is a map selection by somebody
+		GELog.debug(this,"MapView Selection: "+region);
+		gei.displaySelection(region,gse);
+	}
+	
+	/**
+	 * This method is called whenever ANYTHING is selected in the viewer.
+	 * It's job is to filter out selections of ISimulation
+	 * instances and mark the Simulation that we want to interface to.
+	 * 
+	 * 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		GELog.debug(this,"selectionChange: "+event);
+		// Is this selection changed event coming from our view?
+		if (event.getSource() == viewer) {
+			ISelection selection = event.getSelection();
+			// This will hold the new simulations that have been selected
+			final List<ISimulation> temp = new ArrayList<ISimulation>();
+
+			// Is it a structured selection?
+			if (event.getSelection() instanceof IStructuredSelection) {
+				// Yes
+				final List list = ((IStructuredSelection) selection)
+						.toList();
+
+				// Go through everything in the list of things that were
+				// selected and pick out the ones that are ISimulations.
+				for (final Iterator selectionIter = list.iterator(); selectionIter
+						.hasNext();) {
+					final Object obj = selectionIter.next();
+					if (obj instanceof ISimulation) {
+						temp.add((ISimulation) obj);
+						//GEView.log(this.getClass(),obj.toString());
+					}
+				} // for each selected item
+			} // if structured selection
+
+			// Did we find any new simulations that were selected?
+			if (temp.size() > 0) {
+				// Yes Use the 1st one 
+				//ISimulation old = currentSimulation;
+				currentSimulation = temp.get(0);
+				//GELog.debug(this.getClass(),"Selected="+currentSimulation.toString());
+				GEViewLabelProvider lp =(GEViewLabelProvider)viewer.getLabelProvider();
+				
+				lp.setSelected(currentSimulation);
+			} // if any new simulations selected
+		} // if selection changed event coming from our view?
+	} // selectionChanged
+
+	/**
+	 * supply the currently selected simulation  (if any)
+	 * GEView does not save the current Simulation that 
+	 * was selected by the user.  This method is used to get it.
+	 * 
+	 * @return the currentSimulation
+	 */
+	public ISimulation getCurrentSimulation() {
+		return currentSimulation;
+	}
+
+	
+
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewLabelProvider.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewLabelProvider.java
new file mode 100644
index 0000000..50ca1cc
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/GEViewLabelProvider.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.ge.GEInterface;
+import org.eclipse.stem.ui.ge.GELog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * provide text and image labels for the list 
+ * 
+ * We insert some information about the simulation id 
+ * and whether it is slected
+ * we could change the getImage to return a 
+ * different image if GoogleEarth is active or inactive 
+ * for the specified simulation 
+ *
+ */
+public class GEViewLabelProvider extends LabelProvider implements IBaseLabelProvider {
+	
+	/**
+	 * This is the class that handles the interface
+	 *  between our view and GoogleEarth
+	 */
+	
+	
+	private GEInterface gei = null;
+	
+		
+	
+	/**
+     * Get text to be displayed
+     * 
+     * @param obj instance being displayed
+     */
+	public String getText(Object obj) {
+        //GELog.debug(this,"getText: obj="+obj);
+        String flag = "";
+        String template = "%s %s %s %s";
+        String text = null;
+        try {
+			if (obj != null) {
+				if (obj instanceof ISimulation) {
+					ISimulation sim = (ISimulation)obj;
+					
+					String  cycle = "";
+					String name = GEInterface.getSimulationId(sim);
+					if (gei.isActive(sim)) {
+						cycle = "["+Integer.toString(gei.getCycle(sim))+"]";
+						flag = "*";
+					}
+					if (gei.isActiveView(sim)) {
+					
+						flag = "*GE";
+					}
+					text = String.format(template,
+							flag, name, cycle, sim.toString());
+				} else {
+					text = ""+obj;  // so null will display
+				}
+			} else {
+				text = "null";  // for debug
+			}
+		} catch (RuntimeException e) {			
+			GELog.error("Failure",e);
+		}
+        //GELog.debug(this,"text="+text); 
+       return text;
+	}
+	/**
+     * Get Image to be displayed
+     * This apppears to not be called.  Perhaps it is not 
+     * supported for ListViewer
+     * 
+     * @param obj instance being displayed
+     */
+	public Image getImage(Object obj) {
+        GELog.debug(this.getClass(),"getImage: obj="+obj.toString());
+		return PlatformUI.getWorkbench().
+				getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+	}
+	/**
+	 * @param gei reference to GE interface class
+	 */
+	public void setGEI(GEInterface gei) {
+		this.gei = gei;
+	}
+	/**
+	 * Set the selected simulation 
+	 * Called by GEInterface to provide this needed info
+	 * 
+	 * @param selection
+	 */
+	public void setSelected(ISimulation selection) {
+		GELog.debug(this.getClass(),"setSelected");
+				
+		LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
+		this.fireLabelProviderChanged(event);
+	}
+}
+
+
+
+
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/Messages.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/Messages.java
new file mode 100644
index 0000000..56c8320
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/Messages.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.ui.ge.views;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+/**
+ * Class generated by the externalizeStrings option.
+ * 
+ * 
+ *
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.ge.views.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+	}
+
+	/**
+	 * @param key
+	 * @return String assigned to the specified key in properties file
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/PreferenceInitializer.java b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/PreferenceInitializer.java
new file mode 100644
index 0000000..aec8c85
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/PreferenceInitializer.java
@@ -0,0 +1,77 @@
+package org.eclipse.stem.ui.ge.views;
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/ 
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.stem.ui.ge.Activator;
+import org.eclipse.stem.ui.ge.GELog;
+
+
+
+/**
+ * Class used to initialize default preference values.
+ * 
+ * Be sure to update whatever documentation there is 
+ * to match what we specify below.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		Preferences store = Activator.getDefault()
+				.getPluginPreferences();
+		// set default to Manual mode
+		store.setDefault(GEPreferencePage.P_METHOD,
+				GEPreferencePage.M_MANUAL_DISPLAY);
+
+		String defaultFolder = getDefaultFolder();
+		store.setDefault(GEPreferencePage.P_FOLDER,defaultFolder);
+		store.setDefault(GEPreferencePage.P_INTERNAL_SERVER,true);
+		store.setDefault(GEPreferencePage.P_SERVER_HOST,"localhost:8080");
+		store.setDefault(GEPreferencePage.P_ASPECT, "");
+		store.setDefault(GEPreferencePage.P_WHICH_CYCLE,1);
+		store.setDefault(GEPreferencePage.P_AUTO_LAUNCH,true);
+		store.setDefault(GEPreferencePage.P_AUTO_LOGGING,true);
+		store.setDefault(GEPreferencePage.P_BBOX,false);
+		store.setDefault(GEPreferencePage.P_DEBUG, false);
+		store.setDefault(GEPreferencePage.P_SHOW_BORDER, false);
+		store.setDefault(GEPreferencePage.P_TEST, false);
+	}
+
+	/**
+	 * determine the default folder
+	 * 
+	 */
+	private String getDefaultFolder() {
+		String folder = "/tmp/ge";
+		File file = new File(folder);
+		if (file.exists() && file.isDirectory()) {
+			return folder;
+		}		
+		try {
+			File tmpFile = File.createTempFile("test", ".kml");
+			folder = tmpFile.getParent();
+			tmpFile.delete();
+		} catch (IOException e) {
+			GELog.error("Unable to generate KML DisplayArea file.", e);
+			folder = null;
+		}
+		
+		return folder;
+	}
+}
diff --git a/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/messages.properties b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/messages.properties
new file mode 100644
index 0000000..b53bda0
--- /dev/null
+++ b/org.eclipse.stem.ui.ge/src/org/eclipse/stem/ui/ge/views/messages.properties
@@ -0,0 +1,33 @@
+GEView.2=Select Aspect Display
+GEView.3=Aspect Display
+GEView.4=Simulation Processing OFF
+GEView.5=Set Processing OFF
+GEView.6=This will stop processing of STEM cycle results so results are sent to GoogleEarth
+GEView.7=Set Processing ON
+GEView.8=This will start processing of STEM cycle results so results are sent to GoogleEarth
+GEView.9=GoogleEarth Start
+GEView.10=Start GoogleEarth if not already started
+GEView.9a=GoogleEarth Restart
+GEView.10a=Restart GoogleEarth with current status
+GEView.11=GoogleEarth Run
+GEView.12=Run GoogleEarth with existing KML files
+GEView.13=GoogleEarth Stop
+GEView.14=Deactivate the current GoogleEarth display of STEM results
+GEView.15=Unable to Display Map
+GEView.16=Display Map
+GEView.17=This will write KML for the current simulation so it can be displayed by GoogleEarth
+GEView.15n=Unable to Display Map for Administration Area
+GEView.16n=Display Admin Area
+GEView.17n=This will write KML for a specific Administration area so it can be displayed by GoogleEarth
+GEView.18=Display Status
+GEView.19=Display status of this application
+GEView.20Off=Debug off
+GEView.20On=Debug on
+GEView.21=Display debug info on Eclipse console
+GEView.22=Display %s Status
+GEView.27=GEView: GoogleEarth View
+GEView.30=GoogleEarth control Folder
+GEView.31=Select a folder to store GoogleEarth KML control files
+GEView.32=Remove existing KML files in %s
+GEView.33=There are no existing KML files in %s, \n Continue:
+GEView.34=Select a folder containing GoogleEarth KML control files
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.nl1/.classpath b/org.eclipse.stem.ui.nl1/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.nl1/.project b/org.eclipse.stem.ui.nl1/.project
new file mode 100644
index 0000000..352b106
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.nl1</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.nl1/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.nl1/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a41bad1
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Mon Jan 21 12:52:38 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.nl1/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.nl1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0b65372
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.nl1
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: %providerName
+Fragment-Host: org.eclipse.stem.ui
+Bundle-Localization: plugin
+Bundle-ClassPath: .,
+ bin/
+Export-Package: org.eclipse.stem.ui.views,
+ org.eclipse.stem.ui.views.map,
+ org.eclipse.stem.ui.wizards
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.ui.nl1/build.properties b/org.eclipse.stem.ui.nl1/build.properties
new file mode 100644
index 0000000..2e8503c
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/build.properties
@@ -0,0 +1,13 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin_en_CA.properties,\
+               plugin_en_US_CA.properties,\
+               plugin_es.properties,\
+               plugin_he.properties,\
+               plugin_ta.properties,\
+               plugin_zh.properties,\
+               bin/,\
+               notice.html,\
+               epl-v10.html
diff --git a/org.eclipse.stem.ui.nl1/epl-v10.html b/org.eclipse.stem.ui.nl1/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.nl1/notice.html b/org.eclipse.stem.ui.nl1/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.ui.nl1/plugin.properties b/org.eclipse.stem.ui.nl1/plugin.properties
new file mode 100644
index 0000000..4eea904
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin.properties
@@ -0,0 +1,15 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+pluginName = STEM UI Nl1 Fragment
+providerName = Eclipse.org
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_en_CA.properties b/org.eclipse.stem.ui.nl1/plugin_en_CA.properties
new file mode 100644
index 0000000..ba6be22
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_en_CA.properties
@@ -0,0 +1,59 @@
+# Canadian English
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEM
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = STEM Project
+
+# Views
+_UI_Graphs_View = Graphs
+_UI_Models_View = Models
+_UI_Scenarios_View = Scenarios eh?
+_UI_Observers_View = Observers
+_UI_Sequencers_View = Sequencers
+_UI_Decorators_View = Decorators
+_UI_STEM_Project_Explorer = STEM Project Explorer
+_UI_Active_Simulations_View = Active Simulations
+
+# Menu
+_UI_STEM_WorkBench_Menu = STEM
+_UI_STEM_Action_Run = Run
+_UI_STEM_Action_Run_TT = Start execution of the simulation
+_UI_STEM_Action_Stop = Stop
+_UI_STEM_Action_Stop_TT = Stop the simulation and make it inactive
+_UI_STEM_Action_Pause = Pause
+_UI_STEM_Action_Pause_TT = Pause the simulation
+_UI_STEM_Action_Step = Step 
+_UI_STEM_Action_Step_TT = Advance the simulation by one time step
+_UI_STEM_Action_Reset = Reset
+_UI_STEM_Action_Reset_TT = Restore the simulation to its starting state
+
+
+
+
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_en_US_CA.properties b/org.eclipse.stem.ui.nl1/plugin_en_US_CA.properties
new file mode 100644
index 0000000..3c18cc9
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_en_US_CA.properties
@@ -0,0 +1,59 @@
+# Californian English
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEM
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = STEM Project
+
+# Views
+_UI_Graphs_View = Graphs
+_UI_Models_View = Models
+_UI_Scenarios_View = Scenarios
+_UI_Observers_View = Observers
+_UI_Sequencers_View = Sequencers
+_UI_Decorators_View = Decorators
+_UI_STEM_Project_Explorer = STEM Project Explorer
+_UI_Active_Simulations_View = Totally Stoked Simulations
+
+# Menu
+_UI_STEM_WorkBench_Menu = STEM
+_UI_STEM_Action_Run = Run
+_UI_STEM_Action_Run_TT = Dude, start the simulation
+_UI_STEM_Action_Stop = Stop
+_UI_STEM_Action_Stop_TT = Wipe out!
+_UI_STEM_Action_Pause = Pause
+_UI_STEM_Action_Pause_TT = Chill
+_UI_STEM_Action_Step = Step 
+_UI_STEM_Action_Step_TT = Like, slooow motion, you know.
+_UI_STEM_Action_Reset = Reset
+_UI_STEM_Action_Reset_TT = Like, Reset, you know.
+
+
+
+
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_es.properties b/org.eclipse.stem.ui.nl1/plugin_es.properties
new file mode 100644
index 0000000..4e34608
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_es.properties
@@ -0,0 +1,55 @@
+# Spanish
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEM
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = Proyecto STEM
+
+# Views
+_UI_Graphs_View = Grafos
+_UI_Models_View = Modelos
+_UI_Scenarios_View = Escenarios
+_UI_Observers_View = Espectadores (Observers)
+_UI_Sequencers_View = Secuenciadores
+_UI_Decorators_View = Modificadores de Grafos (Decorators)
+_UI_STEM_Project_Explorer = Explorador de Proyectos
+_UI_Active_Simulations_View = Simulaciones Activas
+
+# Menu
+_UI_STEM_WorkBench_Menu = STEM
+_UI_STEM_Action_Run = Correr
+_UI_STEM_Action_Run_TT = Correr simulación
+_UI_STEM_Action_Stop = Detener
+_UI_STEM_Action_Stop_TT = Detener simulación
+_UI_STEM_Action_Pause = Pausa
+_UI_STEM_Action_Pause_TT = Poner simulación en pausa
+_UI_STEM_Action_Step = Correr por unidad 
+_UI_STEM_Action_Step_TT = Avanzar simulación una unidad de tiempo
+_UI_STEM_Action_Reset = Reiniciar
+_UI_STEM_Action_Reset_TT = Restaurar simulación a su estado inicial
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_he.properties b/org.eclipse.stem.ui.nl1/plugin_he.properties
new file mode 100644
index 0000000..ca6fbca
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_he.properties
@@ -0,0 +1,59 @@
+# Hebrew
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEM
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = STEM Project
+
+# Views
+_UI_Graphs_View = Graphs
+_UI_Models_View = Models
+_UI_Scenarios_View = Scenarios
+_UI_Observers_View = Observers
+_UI_Sequencers_View = Sequencers
+_UI_Decorators_View = Decorators
+_UI_STEM_Project_Explorer = STEM Project Explorer
+_UI_Active_Simulations_View = Active Simulations
+
+# Menu
+_UI_STEM_WorkBench_Menu = STEM
+_UI_STEM_Action_Run = Run
+_UI_STEM_Action_Run_TT = Start execution of the simulation
+_UI_STEM_Action_Stop = Stop
+_UI_STEM_Action_Stop_TT = Stop the simulation and make it inactive
+_UI_STEM_Action_Pause = Pause
+_UI_STEM_Action_Pause_TT = Pause the simulation
+_UI_STEM_Action_Step = Step 
+_UI_STEM_Action_Step_TT = Advance the simulation by one time step
+_UI_STEM_Action_Reset = Reset
+_UI_STEM_Action_Reset_TT = Restore the simulation to its starting state
+
+
+
+
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_ta.properties b/org.eclipse.stem.ui.nl1/plugin_ta.properties
new file mode 100644
index 0000000..62ee6e6
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_ta.properties
@@ -0,0 +1,58 @@
+# Tamil
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEMŠ§¼õ
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = Š§¼õ ¾¢ð¼õ
+
+# Views
+_UI_Graphs_View = ŨÃôÀ¼í¸û
+_UI_Models_View = Á¡¾¡¢¸û
+_UI_Scenarios_View = §¸¡½í¸û
+_UI_Observers_View = ¸ñ¸¡É¢ôÀÅ÷¸û
+_UI_Sequencers_View = Å¡¢¨ºôÀÎòÐÀÅ÷¸û
+_UI_Decorators_View = «Äí¸¡¢ôÀÅ÷¸û
+_UI_STEM_Project_Explorer = Š§¼õ ¾¢ð¼ ¬Ã¡öÅ¡ý
+_UI_Active_Simulations_View = ®ÎÀðÎûª §À¡Ä¢¸û
+
+# Menu
+_UI_STEM_WorkBench_Menu = Š§¼õ
+_UI_STEM_Action_Run = µðÎ
+_UI_STEM_Action_Run_TT = §À¡Ä¢ ¦ºöŨ¾ ¬ÃõÀ¢
+_UI_STEM_Action_Stop = ¿¢ÚòÐ 
+_UI_STEM_Action_Stop_TT = §À¡Ä¢ ¦ºöŨ¾ ¿¢Úò¾¢ «¨¾ ¦ºÂÄ¢Æì¸î ¦ºö
+_UI_STEM_Action_Pause = ¾¡Á¾ï ¦ºö
+_UI_STEM_Action_Pause_TT = §À¡Ä¢ ¦ºöŨ¾ ¾¡Á¾ï ¦ºö
+_UI_STEM_Action_Step = «Îò¾ ÀÊ
+_UI_STEM_Action_Step_TT = §À¡Ä¢ ¦ºöŨ¾ ´ ÀÊ Óý§ÉüÚ
+_UI_STEM_Action_Reset = Ò¾¢¾¡¸ «¨Á
+_UI_STEM_Action_Reset_TT = §À¡Ä¢¨Â ¬ÃõÀ ¿¢¨ÄìÌ ÒÐôÀ¢
+
+
+
+
diff --git a/org.eclipse.stem.ui.nl1/plugin_zh.properties b/org.eclipse.stem.ui.nl1/plugin_zh.properties
new file mode 100644
index 0000000..6b9fb6a
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/plugin_zh.properties
@@ -0,0 +1,59 @@
+# Chinese
+#
+# /*******************************************************************
+#  * Copyright (c) 2006 IBM Corporation 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:
+#  *     IBM Corporation - initial API and implementation
+#  ******************************************************************/
+
+# ====================================================================
+# To code developer:
+#   Do NOT change the properties between this line and the
+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
+#   Make a new property name, append to the end of the file and change
+#   the code to use the new property.
+# ====================================================================
+# ====================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# ====================================================================
+
+pluginName = STEM UI
+
+# Common Keys
+_UI_Common_STEM = STEM
+
+# STEM New Project Wizard
+_UI_New_STEM_Project_Wizard = STEM Project
+
+# Views
+_UI_Graphs_View = Graphs
+_UI_Models_View = Models
+_UI_Scenarios_View = Scenarios
+_UI_Observers_View = Observers
+_UI_Sequencers_View = Sequencers
+_UI_Decorators_View = Decorators
+_UI_STEM_Project_Explorer = STEM Project Explorer
+_UI_Active_Simulations_View = Active Simulations
+
+# Menu
+_UI_STEM_WorkBench_Menu = STEM
+_UI_STEM_Action_Run = Run
+_UI_STEM_Action_Run_TT = Start execution of the simulation
+_UI_STEM_Action_Stop = Stop
+_UI_STEM_Action_Stop_TT = Stop the simulation and make it inactive
+_UI_STEM_Action_Pause = Pause
+_UI_STEM_Action_Pause_TT = Pause the simulation
+_UI_STEM_Action_Step = Step 
+_UI_STEM_Action_Step_TT = Advance the simulation by one time step
+_UI_STEM_Action_Reset = Reset
+_UI_STEM_Action_Reset_TT = Restore the simulation to its starting state
+
+
+
+
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_en_US_CA.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_en_US_CA.properties
new file mode 100644
index 0000000..314bcb8
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_en_US_CA.properties
@@ -0,0 +1,48 @@
+# messages_en_US_CA.properties
+# Californian
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+Common.AITOFF=Aitoff
+Common.SANSON_FLAMSTEED=Sanson-Flamsteed
+Common.Choose_Projection=< Choose Projection >
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.Choose_Property=< Choose Property >
+IMView.Choose_Decorator=< Choose Decorator >
+IMView.Gain_Factor=< Gain Factor > 
+
+IMView.Polygon_Borders=Draw Polygons Borders
+IMView.Polygon_Centers=Connect Polygons Centers
+
+IMView.Logrithmic_Scaling=Logarithmic Scaling
+IMView.ONE_THOUSAND=0.001
+IMView.ONE_HUNDREDTH=0.01
+IMView.ONE_TENTH=0.1
+IMView.ONE=1
+IMView.TEN=10
+IMView.ONE_HUNDRED=100
+IMView.ONE_THOUSAND=1000
+
+IMView.FGColor=Foreground Color
+IMView.BGColor=Background Color
+
+IMView.ProProp=Projection Properties
+IMView.GProp=General Properties
+IMView.PProp=Polygons Properties
+IMView.MProp=Model Properties
+
+
+IMView.Center_Map=Center Map
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_es.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_es.properties
new file mode 100644
index 0000000..22ac7d4
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_es.properties
@@ -0,0 +1,48 @@
+# messages_es.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+Common.AITOFF=Aitoff
+Common.SANSON_FLAMSTEED=Sanson-Flamsteed
+Common.Choose_Projection=< Seleccionar Método de Proyección >
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.Choose_Property=< Seleccionar Atributo >
+IMView.Choose_Decorator=< Seleccionar Decorador >
+IMView.Gain_Factor=< Factor de Ganancia > 
+
+IMView.Polygon_Borders=Mostrar Bordes de Polígonos
+IMView.Polygon_Centers=Conectar Centros de Polígonos
+
+IMView.Logrithmic_Scaling=Escala Logarítmica
+IMView.ONE_THOUSAND=0.001
+IMView.ONE_HUNDREDTH=0.01
+IMView.ONE_TENTH=0.1
+IMView.ONE=1
+IMView.TEN=10
+IMView.ONE_HUNDRED=100
+IMView.ONE_THOUSAND=1000
+
+IMView.FGColor=Color de Primer Plano
+IMView.BGColor=Color de Fondo
+
+IMView.ProProp=Atributos de Proyección
+IMView.GProp=Atributos Generales
+IMView.PProp=Atributos de Polígonos
+IMView.MProp=Atributos de Modelos
+
+
+IMView.Center_Map=Mostrar Centro
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_he.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_he.properties
new file mode 100644
index 0000000..0105251
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_he.properties
@@ -0,0 +1,48 @@
+# messages_he.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+Common.AITOFF=Aitoff
+Common.SANSON_FLAMSTEED=Sanson-Flamsteed
+Common.Choose_Projection=< Choose Projection >
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.Choose_Property=< Choose Property >
+IMView.Choose_Decorator=< Choose Decorator >
+IMView.Gain_Factor=< Gain Factor > 
+
+IMView.Polygon_Borders=Draw Polygons Borders
+IMView.Polygon_Centers=Connect Polygons Centers
+
+IMView.Logrithmic_Scaling=Logarithmic Scaling
+IMView.ONE_THOUSAND=0.001
+IMView.ONE_HUNDREDTH=0.01
+IMView.ONE_TENTH=0.1
+IMView.ONE=1
+IMView.TEN=10
+IMView.ONE_HUNDRED=100
+IMView.ONE_THOUSAND=1000
+
+IMView.FGColor=Foreground Color
+IMView.BGColor=Background Color
+
+IMView.ProProp=Projection Properties
+IMView.GProp=General Properties
+IMView.PProp=Polygons Properties
+IMView.MProp=Model Properties
+
+
+IMView.Center_Map=Center Map
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_ta.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_ta.properties
new file mode 100644
index 0000000..92610bc
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_ta.properties
@@ -0,0 +1,48 @@
+# messages_ta.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+Common.AITOFF=Aitoff
+Common.SANSON_FLAMSTEED=Sanson-Flamsteed
+Common.Choose_Projection=< Choose Projection >
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.Choose_Property=< Choose Property >
+IMView.Choose_Decorator=< Choose Decorator >
+IMView.Gain_Factor=< Gain Factor > 
+
+IMView.Polygon_Borders=Draw Polygons Borders
+IMView.Polygon_Centers=Connect Polygons Centers
+
+IMView.Logrithmic_Scaling=Logarithmic Scaling
+IMView.ONE_THOUSAND=0.001
+IMView.ONE_HUNDREDTH=0.01
+IMView.ONE_TENTH=0.1
+IMView.ONE=1
+IMView.TEN=10
+IMView.ONE_HUNDRED=100
+IMView.ONE_THOUSAND=1000
+
+IMView.FGColor=Foreground Color
+IMView.BGColor=Background Color
+
+IMView.ProProp=Projection Properties
+IMView.GProp=General Properties
+IMView.PProp=Polygons Properties
+IMView.MProp=Model Properties
+
+
+IMView.Center_Map=Center Map
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_zh.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_zh.properties
new file mode 100644
index 0000000..e7e3c0f
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/map/messages_zh.properties
@@ -0,0 +1,48 @@
+# messages_zh.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+Common.AITOFF=Aitoff
+Common.SANSON_FLAMSTEED=Sanson-Flamsteed
+Common.Choose_Projection=< Choose Projection >
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.Choose_Property=< Choose Property >
+IMView.Choose_Decorator=< Choose Decorator >
+IMView.Gain_Factor=< Gain Factor > 
+
+IMView.Polygon_Borders=Draw Polygons Borders
+IMView.Polygon_Centers=Connect Polygons Centers
+
+IMView.Logrithmic_Scaling=Logarithmic Scaling
+IMView.ONE_THOUSAND=0.001
+IMView.ONE_HUNDREDTH=0.01
+IMView.ONE_TENTH=0.1
+IMView.ONE=1
+IMView.TEN=10
+IMView.ONE_HUNDRED=100
+IMView.ONE_THOUSAND=1000
+
+IMView.FGColor=Foreground Color
+IMView.BGColor=Background Color
+
+IMView.ProProp=Projection Properties
+IMView.GProp=General Properties
+IMView.PProp=Polygons Properties
+IMView.MProp=Model Properties
+
+
+IMView.Center_Map=Center Map
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_en_US_CA.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_en_US_CA.properties
new file mode 100644
index 0000000..3726194
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_en_US_CA.properties
@@ -0,0 +1,23 @@
+# messages_en_US_CA.properties
+# Californian English
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_es.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_es.properties
new file mode 100644
index 0000000..bcd1dd7
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_es.properties
@@ -0,0 +1,23 @@
+# messages_es.properties
+# Spanish
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Como crear directorios de proyecto
+NSTEMProWiz.creating_project = Como crear un nuevo proyecto
+NSTEMProWiz.page_title = Nombre del proyecto
+NSTEMProWiz.title = Crear un nuevo proyecto
+NSTEMProWiz.page_description = Crear un proyecto nuevo en el área de trabajo o en otra ubicación 
+
+NSTEMProWiz.graph_folder = Grafos
+NSTEMProWiz.model_folder = Modelos
+NSTEMProWiz.scenario_folder = Escenarios
+NSTEMProWiz.decorator_folder = Modificadores de Grafos
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_he.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_he.properties
new file mode 100644
index 0000000..a0439ce
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_he.properties
@@ -0,0 +1,23 @@
+# messages_he.properties
+# Hebrew
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_ta.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_ta.properties
new file mode 100644
index 0000000..cc7198b
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_ta.properties
@@ -0,0 +1,23 @@
+# messages_ta.properties
+# Tamil
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_zh.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_zh.properties
new file mode 100644
index 0000000..8acc554
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/views/messages_zh.properties
@@ -0,0 +1,23 @@
+# messages.properties
+# Chinese
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_CA.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_CA.properties
new file mode 100644
index 0000000..213ad46
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_CA.properties
@@ -0,0 +1,24 @@
+# WizardMessages_en_CA.properties
+# Canadian English
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_US_CA.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_US_CA.properties
new file mode 100644
index 0000000..d07905b
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_en_US_CA.properties
@@ -0,0 +1,23 @@
+# WizardMessages_en_US_CA.properties
+# Californian
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating some knarley project directories, Dude!
+NSTEMProWiz.creating_project = Creating a totally awesome STEM project, Dude!
+NSTEMProWiz.page_title = Like, what's the name of the new STEM Project
+NSTEMProWiz.title = Create one totally awesome STEM project!
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_es.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_es.properties
new file mode 100644
index 0000000..737aee7
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_es.properties
@@ -0,0 +1,24 @@
+# WizardMessages_es.properties
+# Spanish
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Como crear directorios de proyecto
+NSTEMProWiz.creating_project = Como crear un nuevo proyecto
+NSTEMProWiz.page_title = Nombre del proyecto
+NSTEMProWiz.title = Crear un nuevo proyecto
+NSTEMProWiz.page_description = Crear un proyecto nuevo en el área de trabajo o en otra ubicación
+
+NSTEMProWiz.graph_folder = Grafos
+NSTEMProWiz.model_folder = Modelos
+NSTEMProWiz.scenario_folder = Escenarios
+NSTEMProWiz.decorator_folder = Modificadores de Grafos
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_he.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_he.properties
new file mode 100644
index 0000000..8d5ff31
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_he.properties
@@ -0,0 +1,23 @@
+# WizardMessages_he.properties
+# Hebrew
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_ta.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_ta.properties
new file mode 100644
index 0000000..f5f80b7
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_ta.properties
@@ -0,0 +1,24 @@
+# messages_ta.properties
+# Tamil
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = ¾¢ð¼ò¾¢ý «¨¼×¸û ¯ÕÅ¡ì¸ôÀθ¢ÈÐ
+NSTEMProWiz.creating_project = Ò¾¢Â Š§¼õ ¾¢ð¼õ ¯ÕÅ¡ì¸ôÀθ¢ÈÐ
+NSTEMProWiz.page_title = Ò¾¢Â Š§¼õ ¾¢ð¼ò¾¢ý ¦À¨à ÌÈ¢ôÀ¢Î
+NSTEMProWiz.title = Ò¾¢Â Š§¼õ ¾¢ð¼ò¨¾ ¯ÕÅ¡ìÌ
+NSTEMProWiz.page_description = Ò¾¢Â Š§¼õ ¾¢ð¼ò¨¾ À½¢Â¢ô ÀÃôÀ¢ø «øÄÐ ÒÈÅ¢¼ò¾¢ø ¯ÕÅ¡ìÌ
+
+NSTEMProWiz.graph_folder = ŨÃÀ¼í¸û
+NSTEMProWiz.model_folder = Á¡¾¡¢¸û
+NSTEMProWiz.scenario_folder = §¸¡½í¸û
+NSTEMProWiz.decorator_folder = «Äí¸¡¢ôÀÅ÷¸û
+
diff --git a/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_zh.properties b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_zh.properties
new file mode 100644
index 0000000..b68f83e
--- /dev/null
+++ b/org.eclipse.stem.ui.nl1/src/org/eclipse/stem/ui/wizards/messages_zh.properties
@@ -0,0 +1,24 @@
+# WizardMessages_zh.properties
+# Chinese
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
+
diff --git a/org.eclipse.stem.ui.populationmodels/.classpath b/org.eclipse.stem.ui.populationmodels/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.populationmodels/.project b/org.eclipse.stem.ui.populationmodels/.project
new file mode 100644
index 0000000..f5d88f7
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.ui.populationmodels</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.ui.populationmodels/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.populationmodels/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2ad58f7
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+#Tue Sep 01 16:55:15 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
diff --git a/org.eclipse.stem.ui.populationmodels/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.populationmodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d559485
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.ui.populationmodels;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Activator: org.eclipse.stem.ui.populationmodels.Activator

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.populationmodels.standard.presentation

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.core.resources;visibility:=reexport,

+ org.eclipse.stem.populationmodels;visibility:=reexport,

+ org.eclipse.emf.ecore.xmi;visibility:=reexport,

+ org.eclipse.emf.edit.ui;visibility:=reexport,

+ org.eclipse.ui.ide;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;visibility:=reexport,

+ org.eclipse.stem.ui,

+ org.eclipse.stem.definitions

+Bundle-ActivationPolicy: lazy

diff --git a/org.eclipse.stem.ui.populationmodels/build.properties b/org.eclipse.stem.ui.populationmodels/build.properties
new file mode 100644
index 0000000..ac494ce
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/build.properties
@@ -0,0 +1,15 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               icons/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties,\

+               bin/

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.gif b/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.gif
new file mode 100644
index 0000000..346f932
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.psd b/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.psd
new file mode 100644
index 0000000..87fccf0
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/custom16/populationmodel.psd
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/obj16/LabelsModelFile.gif b/org.eclipse.stem.ui.populationmodels/icons/full/obj16/LabelsModelFile.gif
new file mode 100644
index 0000000..b251792
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/obj16/LabelsModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/obj16/StandardModelFile.gif b/org.eclipse.stem.ui.populationmodels/icons/full/obj16/StandardModelFile.gif
new file mode 100644
index 0000000..0ae2f8c
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/obj16/StandardModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewLabels.gif b/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewLabels.gif
new file mode 100644
index 0000000..97fd1e1
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewLabels.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewStandard.gif b/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewStandard.gif
new file mode 100644
index 0000000..25f312d
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/icons/full/wizban/NewStandard.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/plugin.properties b/org.eclipse.stem.ui.populationmodels/plugin.properties
new file mode 100644
index 0000000..343a41b
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.ui.populationmodels/plugin.xml b/org.eclipse.stem.ui.populationmodels/plugin.xml
new file mode 100644
index 0000000..505c52a
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/plugin.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+

+   <extension point="org.eclipse.ui.newWizards">

+      <category

+            id="org.eclipse.emf.ecore.Wizard.category.ID"

+            name="%_UI_Wizard_category"/>

+      <wizard

+            id="org.eclipse.stem.populationmodels.standard.presentation.StandardModelWizardID"

+            name="%_UI_StandardModelWizard_label"

+            class="org.eclipse.stem.populationmodels.standard.presentation.StandardModelWizard"

+            category="org.eclipse.emf.ecore.Wizard.category.ID"

+            icon="icons/full/custom16/populationmodel.gif">

+         <description>%_UI_StandardModelWizard_description</description>

+         <selection class="org.eclipse.core.resources.IResource"/>

+      </wizard>

+    <wizard

+          category="org.eclipse.stem.ui.wizards.stemcategory"

+          class="org.eclipse.stem.ui.populationmodels.standard.wizards.NewPopulationModelWizard"

+          hasPages="true"

+          icon="icons/full/custom16/populationmodel.gif"

+          id="org.eclipse.stem.populationmodels.standard.presentation.StandardModelWizardID"

+          name="%_UI_New_Population_Model"/>

+   </extension>

+

+	<extension

+        point="org.eclipse.ui.views">

+     <view

+           category="org.eclipse.stem.ui.views"

+           class="org.eclipse.stem.ui.views.populationmodel.PopulationModelView"

+           icon="icons/full/custom16/populationmodel.gif"

+           id="org.eclipse.stem.ui.views.populationmodels"

+           name="%_UI_PView_Name"/>

+  </extension>

+  

+   <extension point="org.eclipse.ui.editors">

+      <editor

+            id="org.eclipse.stem.populationmodels.standard.presentation.StandardEditorID"

+            name="%_UI_StandardEditor_label"

+            icon="icons/full/custom16/populationmodel.gif"

+            extensions="standard"

+            class="org.eclipse.stem.populationmodels.standard.presentation.StandardEditor"

+            contributorClass="org.eclipse.stem.populationmodels.standard.presentation.StandardActionBarContributor">

+      </editor>

+   </extension>

+

+	<extension

+        point="org.eclipse.ui.menus">

+     <menuContribution

+           locationURI="menu:org.eclipse.stem.ui.menu.newwizards?after=additions">

+        <command

+              commandId="org.eclipse.stem.ui.populationmodels.command.wiz.populationmodel"

+              icon="icons/full/custom16/populationmodel.gif"

+              label="%_UI_PopulationModelWizard_label"

+              style="push"

+              tooltip="%_UI_PopulationModel_description">

+        </command>

+     </menuContribution>

+     <menuContribution

+           locationURI="toolbar:org.eclipse.stem.ui.toolbar.newwizards?after=additions">

+        <command

+              commandId="org.eclipse.stem.ui.populationmodels.command.wiz.populationmodel"

+              icon="icons/full/custom16/populationmodel.gif"

+              label="%_UI_PopulationModelWizard_label"

+              style="push"

+              tooltip="%_UI_PopulationModel_description">

+        </command>

+     </menuContribution>

+  </extension>

+  

+  <extension

+        point="org.eclipse.ui.commands">

+     <command

+           defaultHandler="org.eclipse.stem.ui.populationmodels.standard.wizards.NewPopulationModelWizard$NewPopulationModelWizardCommandHandler"

+           description="%_UI_PopulationModel_description"

+           id="org.eclipse.stem.ui.populationmodels.command.wiz.populationmodel"

+           name="%_UI_PopulationModelWizard_label">

+     </command>

+  </extension>

+  

+  <extension

+         point="org.eclipse.ui.preferencePages">

+      <page

+      	    category="org.eclipse.stem.ui.preferences.VisualizationPreferencePage"

+            class="org.eclipse.stem.ui.populationmodels.preferences.PopulationPreferencePage"

+            id="org.eclipse.stem.ui.preferences.PopulationPreferencePage"

+            name="%_UI_PopulationPPage"/>

+   </extension>

+   <extension

+         point="org.eclipse.core.runtime.preferences">

+      <initializer class="org.eclipse.stem.ui.populationmodels.preferences.PreferenceInitializer"/>

+   </extension>

+   

+   <extension

+        point="org.eclipse.ui.startup">

+     <startup

+           class="org.eclipse.stem.ui.populationmodels.adapters.StandardRelativeValueProviderAdapterFactory"></startup>

+  </extension>

+</plugin>

diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardActionBarContributor.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardActionBarContributor.java
new file mode 100644
index 0000000..4c0f99c
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardActionBarContributor.java
@@ -0,0 +1,432 @@
+package org.eclipse.stem.populationmodels.standard.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+/**

+ * This is the action bar contributor for the Standard model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class StandardActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(StandardEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet");

+				}

+				catch (PartInitException exception) {

+					StandardEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(StandardEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("standard-settings"));

+		toolBarManager.add(new Separator("standard-additions"));

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(StandardEditorPlugin.INSTANCE.getString("_UI_StandardEditor_menu"), "org.eclipse.stem.populationmodels.standardMenuID");

+		menuManager.insertAfter("additions", submenuManager);

+		submenuManager.add(new Separator("settings"));

+		submenuManager.add(new Separator("actions"));

+		submenuManager.add(new Separator("additions"));

+		submenuManager.add(new Separator("additions-end"));

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(StandardEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		submenuManager.insertBefore("additions", createChildMenuManager);

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(StandardEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		submenuManager.insertBefore("additions", createSiblingMenuManager);

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(StandardEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+

+		submenuManager = new MenuManager(StandardEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction);

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditor.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditor.java
new file mode 100644
index 0000000..a76a121
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditor.java
@@ -0,0 +1,1853 @@
+package org.eclipse.stem.populationmodels.standard.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+

+import org.eclipse.jface.viewers.ColumnWeightData;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.ListViewer;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TableLayout;

+import org.eclipse.jface.viewers.TableViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.custom.CTabFolder;

+

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+

+import org.eclipse.swt.graphics.Point;

+

+import org.eclipse.swt.layout.FillLayout;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Table;

+import org.eclipse.swt.widgets.TableColumn;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.swt.widgets.TreeColumn;

+

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+

+import org.eclipse.ui.dialogs.SaveAsDialog;

+

+import org.eclipse.ui.ide.IGotoMarker;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.ViewerPane;

+

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+

+import org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory;

+

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+

+import org.eclipse.stem.definitions.labels.provider.LabelsItemProviderAdapterFactory;

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+

+/**

+ * This is an example of a Standard model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("all") 

+public class StandardEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer parentViewer;

+

+	/**

+	 * This shows how a tree view works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewer;

+

+	/**

+	 * This shows how a list view works.

+	 * A list viewer doesn't support icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ListViewer listViewer;

+

+	/**

+	 * This shows how a table view works.

+	 * A table can be used as a list with icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TableViewer tableViewer;

+

+	/**

+	 * This shows how a tree view with columns works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewerWithColumns;

+

+	/**

+	 * This keeps track of the active viewer pane, in the book.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ViewerPane currentViewerPane;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(StandardEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(StandardEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == StandardEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						removedResources.addAll(visitor.getRemovedResources());

+						if (!isDirty()) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 getSite().getPage().closeEditor(StandardEditor.this, false);

+									 }

+								 });

+						}

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						changedResources.addAll(visitor.getChangedResources());

+						if (getSite().getPage().getActiveEditor() == StandardEditor.this) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 handleActivate();

+									 }

+								 });

+						}

+					}

+				}

+				catch (CoreException exception) {

+					StandardEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(StandardEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.ui.populationmodels",

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					StandardEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						StandardEditorPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"),

+				 getString("_WARN_FileConflict"));

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public StandardEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new StandardItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new LabelsItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			// I don't know if this should be run this deferred

+			// because we might have to give the editor a chance to process the viewer update events

+			// and hence to update the views first.

+			//

+			//

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			runnable.run();

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewerPane(ViewerPane viewerPane) {

+		if (currentViewerPane != viewerPane) {

+			if (currentViewerPane != null) {

+				currentViewerPane.showFocus(false);

+			}

+			currentViewerPane = viewerPane;

+		}

+		setCurrentViewer(currentViewerPane.getViewer());

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp");

+		contextMenu.add(new Separator("additions"));

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.ui.populationmodels",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.ui.populationmodels",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				selectionViewer = (TreeViewer)viewerPane.getViewer();

+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+

+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+				selectionViewer.setInput(editingDomain.getResourceSet());

+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+				viewerPane.setTitle(editingDomain.getResourceSet());

+

+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(selectionViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));

+			}

+

+			// Create a page for the parent tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				parentViewer = (TreeViewer)viewerPane.getViewer();

+				parentViewer.setAutoExpandLevel(30);

+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));

+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(parentViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ParentPage_label"));

+			}

+

+			// This is the page for the list viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new ListViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				listViewer = (ListViewer)viewerPane.getViewer();

+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(listViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ListPage_label"));

+			}

+

+			// This is the page for the tree viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				treeViewer = (TreeViewer)viewerPane.getViewer();

+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(treeViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreePage_label"));

+			}

+

+			// This is the page for the table viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TableViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				tableViewer = (TableViewer)viewerPane.getViewer();

+

+				Table table = tableViewer.getTable();

+				TableLayout layout = new TableLayout();

+				table.setLayout(layout);

+				table.setHeaderVisible(true);

+				table.setLinesVisible(true);

+

+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(3, 100, true));

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+

+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(2, 100, true));

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+

+				tableViewer.setColumnProperties(new String [] {"a", "b"});

+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(tableViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TablePage_label"));

+			}

+

+			// This is the page for the table tree viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), StandardEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();

+

+				Tree tree = treeViewerWithColumns.getTree();

+				tree.setLayoutData(new FillLayout());

+				tree.setHeaderVisible(true);

+				tree.setLinesVisible(true);

+

+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+				objectColumn.setWidth(250);

+

+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+				selfColumn.setWidth(200);

+

+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});

+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(treeViewerWithColumns);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));

+			}

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, "");

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label"));

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						StandardEditor.this.setSelectionToViewer(selection);

+						StandardEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				// If it's the selection viewer, then we want it to select the same selection as this selection.

+				//

+				if (currentViewerPane.getViewer() == selectionViewer) {

+					ArrayList<Object> selectionList = new ArrayList<Object>();

+					selectionList.add(selectedElement);

+					while (selectedElements.hasNext()) {

+						selectionList.add(selectedElements.next());

+					}

+

+					// Set the selection to the widget.

+					//

+					selectionViewer.setSelection(new StructuredSelection(selectionList));

+				}

+				else {

+					// Set the input to the widget.

+					//

+					if (currentViewerPane.getViewer().getInput() != selectedElement) {

+						currentViewerPane.getViewer().setInput(selectedElement);

+						currentViewerPane.setTitle(selectedElement);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			StandardEditorPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			StandardEditorPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		if (currentViewerPane != null) {

+			currentViewerPane.setFocus();

+		}

+		else {

+			getControl(getActivePage()).setFocus();

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage("");

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return StandardEditorPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return StandardEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return true;

+	}

+}

diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditorPlugin.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditorPlugin.java
new file mode 100644
index 0000000..189070d
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardEditorPlugin.java
@@ -0,0 +1,117 @@
+package org.eclipse.stem.populationmodels.standard.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+import org.eclipse.stem.definitions.edges.provider.DefinitionsEditPlugin;

+import org.eclipse.stem.ui.populationmodels.adapters.StandardRelativeValueProviderAdapterFactory;

+import org.eclipse.stem.ui.populationmodels.standard.wizards.StandardPopulationModelPropertyEditorAdapterFactory;

+import org.eclipse.stem.ui.populationmodels.standard.wizards.StandardPropertyStringProviderAdapterFactory;

+

+/**

+ * This is the central singleton for the Standard editor plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class StandardEditorPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final StandardEditorPlugin INSTANCE = new StandardEditorPlugin();

+	

+	/**

+	 * 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 StandardEditorPlugin() {

+		super

+			(new ResourceLocator [] {

+				CoreEditPlugin.INSTANCE,

+				DefinitionsEditPlugin.INSTANCE,

+				EcoreEditPlugin.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 EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated NOT

+		 */

+		public Implementation() {

+			super();

+	

+			// Remember the static instance.

+			//

+			plugin = this;

+			new StandardPropertyStringProviderAdapterFactory();

+			new StandardPopulationModelPropertyEditorAdapterFactory();

+			new StandardEditor();

+			// Add to RelativeValueProviderAdapterFactory.INSTANCE

+			new StandardRelativeValueProviderAdapterFactory();

+		}

+	}

+

+}

diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardModelWizard.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardModelWizard.java
new file mode 100644
index 0000000..c60c7d7
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/populationmodels/standard/presentation/StandardModelWizard.java
@@ -0,0 +1,636 @@
+package org.eclipse.stem.populationmodels.standard.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.emf.common.CommonPlugin;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.xmi.XMLResource;

+

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+

+import org.eclipse.jface.viewers.IStructuredSelection;

+

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.ModifyEvent;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import org.eclipse.stem.populationmodels.standard.StandardFactory;

+import org.eclipse.stem.populationmodels.standard.StandardPackage;

+import org.eclipse.stem.populationmodels.standard.provider.StandardEditPlugin;

+

+

+import org.eclipse.core.runtime.Path;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class StandardModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(StandardEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameExtensions").split("\\s*,\\s*")));

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		StandardEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardPackage standardPackage = StandardPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardFactory standardFactory = standardPackage.getStandardFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected StandardModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(StandardEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(StandardEditorPlugin.INSTANCE.getImage("full/wizban/NewStandard")));

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : standardPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)standardPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = standardFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							StandardEditorPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), StandardEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			StandardEditorPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class StandardModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public StandardModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";

+					setErrorMessage(StandardEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class StandardModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public StandardModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE); {

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(StandardEditorPlugin.INSTANCE.getString("_UI_ModelObject"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(StandardEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return StandardEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");

+			}

+			catch(MissingResourceException mre) {

+				StandardEditorPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(StandardEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new StandardModelWizardNewFileCreationPage("Whatever", selection);

+		newFileCreationPage.setTitle(StandardEditorPlugin.INSTANCE.getString("_UI_StandardModelWizard_label"));

+		newFileCreationPage.setDescription(StandardEditorPlugin.INSTANCE.getString("_UI_StandardModelWizard_description"));

+		newFileCreationPage.setFileName(StandardEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = StandardEditorPlugin.INSTANCE.getString("_UI_StandardEditorFilenameDefaultBase");

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new StandardModelWizardInitialObjectCreationPage("Whatever2");

+		initialObjectCreationPage.setTitle(StandardEditorPlugin.INSTANCE.getString("_UI_StandardModelWizard_label"));

+		initialObjectCreationPage.setDescription(StandardEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/Activator.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/Activator.java
new file mode 100644
index 0000000..fa39eb5
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/Activator.java
@@ -0,0 +1,112 @@
+package org.eclipse.stem.ui.populationmodels;
+
+/*******************************************************************************
+ * Copyright (c) 2006 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.populationmodels.standard.presentation.StandardEditor;
+import org.eclipse.stem.ui.populationmodels.adapters.StandardRelativeValueProviderAdapterFactory;
+import org.eclipse.stem.ui.populationmodels.standard.wizards.StandardPopulationModelPropertyEditorAdapterFactory;
+import org.eclipse.stem.ui.populationmodels.standard.wizards.StandardPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The symbolic identifier for this plug-in
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui.populationmodels"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new StandardPropertyStringProviderAdapterFactory();
+		new StandardPopulationModelPropertyEditorAdapterFactory();
+		new StandardEditor();
+		// Add to RelativeValueProviderAdapterFactory.INSTANCE
+		new StandardRelativeValueProviderAdapterFactory();
+
+		
+	} // start
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+
+} // Activator
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditor.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditor.java
new file mode 100644
index 0000000..35dcf80
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditor.java
@@ -0,0 +1,144 @@
+package org.eclipse.stem.ui.populationmodels.adapters;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.populationmodels.standard.StandardPackage;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+@SuppressWarnings("all")
+abstract public class PopulationModelPropertyEditor extends Composite {
+
+	/**
+	 * @param feature
+	 * @return <code>true</code> if the feature is a dublin core feature that
+	 *         is specified by a user.
+	 */
+	public static boolean isUserSpecifiedPopulationModelProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		final EClass containingClass = feature.getEContainingClass();
+		// Is it a disease model property?
+		if (containingClass.equals(StandardPackage.eINSTANCE.getPopulationModel())
+				|| containingClass.getEAllSuperTypes().contains(
+						StandardPackage.eINSTANCE.getPopulationModel())) {
+			// Yes
+			retValue = true;
+		} // if a disease model property
+		return retValue;
+	} // isUserSpecifiedDiseaseModelProperty
+
+	protected final Map<EStructuralFeature, Text> map = new HashMap<EStructuralFeature, Text>();
+	protected String errorMessage;
+
+	public PopulationModelPropertyEditor(Composite parent, int style) {
+		super(parent,style);
+	}
+
+	public void populate(PopulationModel populationModel) {
+		
+	}
+
+	public boolean validate() {
+		
+		
+		return true;
+	} // validate
+
+	
+	/**
+	 * @param text
+	 * @return
+	 */
+	protected boolean isValidPercentage(final String text) {
+		boolean retValue = true;
+		try {
+			final double value = Double.parseDouble(text);
+			retValue = value >= 0.0 && value <= 100.;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	}
+
+	/**
+	 * @param text
+	 * @param minValue
+	 * @return
+	 */
+	protected boolean isValidValue(final String text, final double minValue) {
+		boolean retValue = true;
+		try {
+			final double value = Double.parseDouble(text);
+			retValue = value >= minValue;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	} // isValidRate
+
+	/**
+	 * @param text
+	 * @param minValue
+	 * @return
+	 */
+	protected boolean isValidLong(final String text, final long minValue) {
+		boolean retValue = true;
+		try {
+			final double value = Long.parseLong(text);
+			retValue = value >= minValue;
+		} catch (final NumberFormatException nfe) {
+			retValue = false;
+		} // catch ParseException
+		return retValue;
+	} // isValidLong
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @param descriptor
+	 * @return the string that represents the default value of the property
+	 */
+	protected String getPropertyDefaultValueString(final IItemPropertyDescriptor descriptor) {
+		String retValue = ""; //$NON-NLS-1$
+	
+		final EStructuralFeature feature = (EStructuralFeature) descriptor
+				.getFeature(null);
+	
+		retValue = feature.getDefaultValueLiteral();
+		retValue = retValue == null ? "" : retValue; //$NON-NLS-1$
+	
+		return retValue;
+	} // getPropertyDefaultValueString
+
+	/**
+	 * @return the error message that describes the problem with the contents
+	 */
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+
+} // PopulationModelPropertyEditor
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapter.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapter.java
new file mode 100644
index 0000000..8a9ed0d
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapter.java
@@ -0,0 +1,23 @@
+package org.eclipse.stem.ui.populationmodels.adapters;
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.ui.populationmodels.standard.wizards.PopulationModelPropertyComposite;
+import org.eclipse.swt.events.ModifyListener;
+
+abstract public class PopulationModelPropertyEditorAdapter extends AdapterImpl
+		implements Adapter {
+
+	abstract public PopulationModelPropertyEditor createPopulationModelPropertyEditor(
+			PopulationModelPropertyComposite diseaseModelPropertyComposite,
+			int style, ModifyListener projectValidator);
+} // PopulationModelPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..0200866
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/PopulationModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,34 @@
+// DiseaseModelPropertyEditorAdapterFactory.java
+package org.eclipse.stem.ui.populationmodels.adapters;
+
+/******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ * This class represents
+ */
+public interface PopulationModelPropertyEditorAdapterFactory {
+
+	PopulationModelPropertyEditorAdapterFactoryImpl INSTANCE = new PopulationModelPropertyEditorAdapterFactoryImpl();
+
+	public class PopulationModelPropertyEditorAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			PopulationModelPropertyEditorAdapterFactory {
+
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == PopulationModelPropertyEditorAdapter.class;
+		}
+
+	} // PopulationModelPropertyEditorAdapterFactoryImpl
+} // PopulationModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/StandardRelativeValueProviderAdapterFactory.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/StandardRelativeValueProviderAdapterFactory.java
new file mode 100644
index 0000000..49e0c4c
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/adapters/StandardRelativeValueProviderAdapterFactory.java
@@ -0,0 +1,339 @@
+// StandardRelativeValueProviderAdapterFactory.java
+package org.eclipse.stem.ui.populationmodels.adapters;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.ui.provider.PropertySource;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.populationmodels.standard.PopulationModelLabel;
+import org.eclipse.stem.populationmodels.standard.PopulationModelLabelValue;
+import org.eclipse.stem.populationmodels.standard.StandardPackage;
+import org.eclipse.stem.populationmodels.standard.StandardPopulationModelLabelValue;
+import org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory;
+import org.eclipse.stem.populationmodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.populationmodels.Activator;
+import org.eclipse.stem.ui.populationmodels.preferences.PreferenceConstants;
+import org.eclipse.stem.ui.populationmodels.preferences.PreferenceInitializer;
+import org.eclipse.ui.IStartup;
+
+/**
+ * This class is a factory for this model that creates
+ * {@link RelativeValueProvider}'s for classes in the model.
+ */
+public class StandardRelativeValueProviderAdapterFactory extends
+		StandardAdapterFactory implements RelativeValueProviderAdapterFactory, IStartup {
+	
+	/**
+	 * This keeps track of the root adapter factory that delegates to this
+	 * adapter factory.
+	 */
+	protected ComposedAdapterFactory parentAdapterFactory;
+
+	/**
+	 * This is used to implement
+	 * {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+	 */
+	protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+	/**
+	 * This factory is used to create item providers for the adapted classes.
+	 * The item providers are used as property sources to get the properties
+	 * that can have relative values.
+	 */
+	private static StandardItemProviderAdapterFactory itemProviderFactory;
+
+	/**
+	 * Constructor
+	 */
+	public StandardRelativeValueProviderAdapterFactory() {
+		super();
+		RelativeValueProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	} // StandardRelativeValueProviderAdapterFactory
+
+	/**
+	 * This method is called by the {@link StandardSwitch} instance in the
+	 * parent {@link StandardAdapterFactory} for all cases for classes derived
+	 * from {@link DiseaseModelLabel} (e.g., {@link SILabel}, {@link SIRLabel},
+	 * {@link SEIRLabel}).
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelAdapter()
+	 */
+	@Override
+	public Adapter createStandardPopulationModelLabelAdapter() {
+		// It seems that you can't have singleton adapters that provide
+		// behavioral extensions without explicitly setting the target
+		// each time it is adapted
+		return new StandardPopulationModelLabelRelativeValueProvider();
+	} // createDiseaseModelLabelAdapter
+
+	/**
+	 * This method is called by the {@link StandardSwitch} instance in the
+	 * parent {@link StandardAdapterFactory} for all cases for classes derived
+	 * from {@link DiseaseModelLabelValue} (e.g., {@link SILabelValue},
+	 * {@link SIRLabelValue}, {@link SEIRLabelValue}).
+	 * 
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelLabelValueAdapter()
+	 */
+	@Override
+	public Adapter createStandardPopulationModelLabelValueAdapter() {
+		// It seems that you can't have singleton adapters that provide
+		// behavioral extensions without explicitly setting the target
+		// each time it is adapted
+		return new PopulationModelLabelValueRelativeValueProvider();
+	} // createDiseaseModelLabelValueAdapter
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void addListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.addListener(notifyChangedListener);
+	} // addListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.eclipse.emf.common.notify.Notification)
+	 */
+	public void fireNotifyChanged(Notification notification) {
+		changeNotifier.fireNotifyChanged(notification);
+		if (parentAdapterFactory != null) {
+			parentAdapterFactory.fireNotifyChanged(notification);
+		}
+	} // fireNotifyChanged
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse.emf.edit.provider.INotifyChangedListener)
+	 */
+	public void removeListener(INotifyChangedListener notifyChangedListener) {
+		changeNotifier.removeListener(notifyChangedListener);
+	} // removeListener
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		return parentAdapterFactory == null ? this : parentAdapterFactory
+				.getRootAdapterFactory();
+	} // getRootAdapterFactory
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#setParentAdapterFactory(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(
+			ComposedAdapterFactory parentAdapterFactory) {
+		this.parentAdapterFactory = parentAdapterFactory;
+	} // setParentAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == RelativeValueProvider.class
+				|| super.isFactoryForType(type);
+	} // isFactoryForType
+
+	/**
+	 * This disposes all of the item providers created by this factory.
+	 * 
+	 * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	} // dispose
+
+	/**
+	 * @return the instance of the Relative Value Provider Adapter Factory
+	 */
+	private static RelativeValueProviderAdapterFactory getRelativeValueProviderAdapterFactory() {
+		return RelativeValueProviderAdapterFactory.INSTANCE;
+	} // getRelativeValueProviderAdapterFactory
+
+	/**
+	 * @return the instance of the Standard Item Provider factory.
+	 */
+	private static StandardItemProviderAdapterFactory getItemProviderFactory() {
+		if (itemProviderFactory == null) {
+			itemProviderFactory = new StandardItemProviderAdapterFactory();
+		}
+		return itemProviderFactory;
+	} // getItemProviderFactory
+
+	/**
+	 * 
+	 * 
+	 * @see DiseaseModelLabelValueRelativeValueProvider
+	 */
+	public static class StandardPopulationModelLabelRelativeValueProvider extends
+			RelativeValueProviderAdapter implements RelativeValueProvider {
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getProperties()
+		 */
+		@Override
+		public List<IItemPropertyDescriptor> getProperties() {
+			final PopulationModelLabel pop = (PopulationModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(pop.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getProperties();
+		} // getProperties
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getRelativeValue(org.eclipse.emf.ecore.EStructuralFeature)
+		 */
+		@Override
+		public double getRelativeValue(EStructuralFeature feature) {
+			final PopulationModelLabel pop = (PopulationModelLabel) getTarget();
+			final RelativeValueProvider rvp = (RelativeValueProvider) getRelativeValueProviderAdapterFactory()
+					.adapt(pop.getCurrentValue(), RelativeValueProvider.class);
+			return rvp.getRelativeValue(feature);
+		} // getRelativeValue
+		
+		/**
+		 * this helper method returns the absolute total population.
+		 * It is required whenever we need to switch between relative and absolute values
+		 * @return the total current population count (absolute)
+		 */
+		@Override
+		public double getDenominator(final EStructuralFeature feature) {
+			long popRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_POPULATION);
+			long densRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_DENSITY);
+	
+			if(popRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_POPULATION;
+			if(densRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_DENSITY;
+		
+			if(feature.getFeatureID() == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY)
+				return densRef;
+			else
+				return popRef;
+		}
+		
+		
+		
+
+	} // DiseaseModelLabelRelativeValueProvider
+
+	/**
+	 *
+	 */
+	public static class PopulationModelLabelValueRelativeValueProvider extends
+			RelativeValueProviderAdapter implements RelativeValueProvider {
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter#getProperties()
+		 */
+		@Override
+		public List<IItemPropertyDescriptor> getProperties() {
+			final List<IItemPropertyDescriptor> retValue = new ArrayList<IItemPropertyDescriptor>();
+			final StandardItemProviderAdapterFactory itemProviderFactory = getItemProviderFactory();
+			final PopulationModelLabelValue popv = (PopulationModelLabelValue) getTarget();
+			final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+					.adapt(popv, PropertySource.class);
+			final List<IItemPropertyDescriptor> properties = propertySource
+					.getPropertyDescriptors(null);
+			// The list of property descriptors includes ones that do not have
+			// relative values. We filter those out here and return the rest.
+			for (IItemPropertyDescriptor descriptor : properties) {
+				// Does this property have a relative value?
+				final EStructuralFeature feature = (EStructuralFeature) descriptor
+						.getFeature(null);
+				final int featureId = feature.getFeatureID();
+				
+				
+				// new
+				if (!(featureId == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__BIRTHS 
+						|| featureId == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DEATHS 
+						|| featureId == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__INCIDENCE)) {
+					// Yes
+				
+					retValue.add(descriptor);
+				
+				} // if has relative value
+				// Old
+				/*
+				if (!(featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__BIRTHS
+						|| featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__DEATHS
+						|| featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__DISEASE_DEATHS || featureId == StandardPackage.DISEASE_MODEL_LABEL_VALUE__POPULATION_COUNT)) {
+					// Yes
+					retValue.add(descriptor);
+				} // if has relative value
+				*/
+				
+			} // for
+			return retValue;
+		} // getProperties
+
+		/**
+		 * @see org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider#getRelativeValue(EStructuralFeature)
+		 */
+		@Override
+		public double getRelativeValue(final EStructuralFeature feature) {
+			final StandardPopulationModelLabelValue popv = (StandardPopulationModelLabelValue) getTarget();
+			final double count = ((Double) popv.eGet(feature))
+					.doubleValue();
+			
+			long popRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_POPULATION);
+			long densRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_DENSITY);
+	
+			if(popRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_POPULATION;
+			if(densRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_DENSITY;
+			
+			double retValue;
+			if(feature.getFeatureID() == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY)
+				retValue = (count / densRef);
+			else
+				retValue = (count / popRef);
+			return (retValue >1.0) ? 1.0:retValue;
+		} // getRelativeValue
+		
+		/**
+		 * This method returns the denominator or scale used to convert to relative
+		 * values in the range 0-1. For example, in an Epidemic Compartment model
+		 * the state values are normalized by population.
+		 * It is required whenever we need to switch between relative and absolute values
+		 * or can be used to create a label showing the maximum scale for any relative value.
+		 * @return the denominator or scale used to normalize the relative value
+		 */
+		@Override
+		public double getDenominator(final EStructuralFeature feature) {
+			long popRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_POPULATION);
+			long densRef = Activator.getDefault().getPluginPreferences().getLong(PreferenceConstants.REFERENCE_DENSITY);
+	
+			if(popRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_POPULATION;
+			if(densRef == 0) popRef = PreferenceInitializer.DEFAULT_REFERENCE_DENSITY;
+	
+			if(feature.getFeatureID() == StandardPackage.STANDARD_POPULATION_MODEL_LABEL_VALUE__DENSITY)
+				return densRef;
+			else
+				return popRef;
+		
+		}
+		
+	} // PopulationModelLabelValueRelativeValueProvider
+
+	public void earlyStartup() {
+		// Done
+	}
+} // StandardRelativeValueProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PopulationPreferencePage.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PopulationPreferencePage.java
new file mode 100644
index 0000000..7dfe4bc
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PopulationPreferencePage.java
@@ -0,0 +1,80 @@
+package org.eclipse.stem.ui.populationmodels.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.stem.ui.populationmodels.Activator;
+import org.eclipse.stem.ui.populationmodels.standard.wizards.PopulationModelWizardMessages;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <samp>FieldEditorPreferencePage</samp>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class PopulationPreferencePage extends
+		FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	
+	/**
+	 * Constructor
+	 */
+	public PopulationPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(PopulationModelWizardMessages.getString("PopulationPPageTITLE")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	@Override
+	public void createFieldEditors() {
+
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		long refPop = store.getLong(PreferenceConstants.REFERENCE_POPULATION);
+		long refDens = store.getLong(PreferenceConstants.REFERENCE_DENSITY);
+		
+		final IntegerFieldEditor referencePopulationThreadsFieldEditor = new IntegerFieldEditor(
+				PreferenceConstants.REFERENCE_POPULATION,
+				PopulationModelWizardMessages.getString("ReferencePopulation"), getFieldEditorParent()); //$NON-NLS-1$
+		
+		referencePopulationThreadsFieldEditor.setStringValue(""+refPop);
+		addField(referencePopulationThreadsFieldEditor);
+		
+		final IntegerFieldEditor referenceDensityThreadsFieldEditor = new IntegerFieldEditor(
+				PreferenceConstants.REFERENCE_DENSITY,
+				PopulationModelWizardMessages.getString("ReferenceDensity"), getFieldEditorParent()); //$NON-NLS-1$
+		referencePopulationThreadsFieldEditor.setStringValue(""+refDens);
+		addField(referenceDensityThreadsFieldEditor);
+		
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+		// Nothing
+	}
+
+} // PopulationPreferencePage
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceConstants.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..37f4235
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceConstants.java
@@ -0,0 +1,29 @@
+package org.eclipse.stem.ui.populationmodels.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public class PreferenceConstants {
+
+	/**
+	 * This is the preference for the reference population
+	 */
+	public static final String REFERENCE_POPULATION = "referencePopulation"; //$NON-NLS-1$
+
+	/**
+	 * This is the preference for the reference density
+	 */
+	public static final String REFERENCE_DENSITY = "referenceDensity"; //$NON-NLS-1$
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceInitializer.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..3205528
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/preferences/PreferenceInitializer.java
@@ -0,0 +1,36 @@
+package org.eclipse.stem.ui.populationmodels.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.ui.populationmodels.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	public static long DEFAULT_REFERENCE_POPULATION = 16000000;
+	public static long DEFAULT_REFERENCE_DENSITY = 25000;
+	
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		store.setDefault(PreferenceConstants.REFERENCE_POPULATION,
+						DEFAULT_REFERENCE_POPULATION);
+		store.setDefault(PreferenceConstants.REFERENCE_DENSITY,
+				DEFAULT_REFERENCE_DENSITY);
+	}	
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/NewPopulationModelWizard.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/NewPopulationModelWizard.java
new file mode 100644
index 0000000..77aae16
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/NewPopulationModelWizard.java
@@ -0,0 +1,183 @@
+// NewDiseaseWizard.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.populationmodels.standard.StandardPackage;
+import org.eclipse.stem.ui.wizards.DublinCorePage;
+import org.eclipse.stem.ui.wizards.NewIdentifiablePage;
+import org.eclipse.stem.ui.wizards.NewIdentifiableWizard;
+import org.eclipse.stem.ui.wizards.NewSTEMProjectWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a Wizard for making new STEM {@link DiseaseModel} instances.
+ */
+public class NewPopulationModelWizard extends NewIdentifiableWizard {
+
+	private NewPopulationModelPage ndp = null;
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return PopulationModelWizardMessages.getString("NPopulationModelWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		ndp = new NewPopulationModelPage(PopulationModelWizardMessages
+				.getString("NPopulationModelWiz.page_title")); //$NON-NLS-1$
+		ndp.setTitle(PopulationModelWizardMessages.getString("NPopulationModelWiz.page_title")); //$NON-NLS-1$
+		ndp.setDescription(PopulationModelWizardMessages
+				.getString("NPopulationModelWiz.page_description")); //$NON-NLS-1$
+
+		return ndp;
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()
+			 */
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(StandardPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.createTypeURI(
+						PopulationModel.URI_TYPE_POPULATIONMODEL_SEGMENT).toString());
+				type.setEnabled(false);
+			}
+		}; // DublinCorePage
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final PopulationModel retValue = ndp.getSelectedPopulationModel();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.DECORATORS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return StandardPackage.eNAME;
+	} // getIdentifiableSerializationFileExtension
+
+	protected static class NewPopulationModelPage extends NewIdentifiablePage {
+
+		PopulationModelDefinitionControl ddc = null;
+
+		/**
+		 * @param pageName
+		 */
+		protected NewPopulationModelPage(final String pageName) {
+			super(pageName);
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(PopulationModelWizardMessages
+					.getString("NPopulationWiz.DC_DESCRIPTION"), //$NON-NLS-1$
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+		@Override
+		protected Composite createSpecificComposite(final Composite parent) {
+			ddc = new PopulationModelDefinitionControl(parent, SWT.NONE,
+					projectValidator);
+			return ddc;
+		} // createSpecificComposite
+
+		@Override
+		protected boolean validatePage() {
+			boolean retValue = super.validatePage();
+			if (retValue) {
+				setErrorMessage(null);
+				retValue = ddc.validate();
+				// Error?
+				if (!retValue) {
+					// Yes
+					setErrorMessage(ddc.getErrorMessage());
+				} // if
+			}
+			return retValue;
+		} // validatePage
+
+		PopulationModel getSelectedPopulationModel() {
+			return ddc.getSelectedPopulationModel();
+		} // getSelectedDiseaseModel
+
+	} // NewDiseasePage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewPopulationModelWizard}
+	 */
+	public static class NewPopulationModelWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewPopulationModelWizard wizard = new NewPopulationModelWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewDiseaseWizardCommandHandler
+} // NewDiseaseWizard
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelDefinitionControl.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelDefinitionControl.java
new file mode 100644
index 0000000..166e840
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelDefinitionControl.java
@@ -0,0 +1,187 @@
+// DiseaseDefinitionControl.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class represents the SWT control for defining a disease.
+ */
+public class PopulationModelDefinitionControl extends Composite {
+
+	private static PopulationModel[] populationModels = null;
+
+	private final Combo combo;
+
+	private final PopulationModelPropertyComposite populationModelPropertyComposite;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public PopulationModelDefinitionControl(final Composite parent, final int style,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.marginWidth = 0;
+		gridLayout.numColumns = 2;
+		setLayout(gridLayout);
+
+		final Label populationModelLabel = new Label(this, SWT.NONE);
+		final GridData gd_populationModelLabel = new GridData(SWT.FILL, SWT.CENTER, true, false);
+		gd_populationModelLabel.widthHint = 100;
+		populationModelLabel.setLayoutData(gd_populationModelLabel);
+		populationModelLabel.setText(PopulationModelWizardMessages.getString("DDC.0")); //$NON-NLS-1$
+
+		combo = new Combo(this, SWT.READ_ONLY);
+		combo.setTextLimit(30);
+		final GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, true,
+				false);
+		gd_combo.widthHint = 303;
+		combo.setLayoutData(gd_combo);
+
+		combo.setToolTipText(PopulationModelWizardMessages.getString("DDC.1")); //$NON-NLS-1$
+		// Initialize the list of disease models available
+		combo.setItems(getPopulationModelNames(getPopulationModels()));
+		combo.select(0);
+		combo.addModifyListener(projectValidator);
+
+		
+		populationModelPropertyComposite = new PopulationModelPropertyComposite(this,
+				SWT.NONE, getPopulationModels(), projectValidator);
+		final GridData gd_populationModelPropertyControl = new GridData(SWT.FILL,
+				SWT.CENTER, true, false, 2, 1);
+		populationModelPropertyComposite
+				.setLayoutData(gd_populationModelPropertyControl);
+
+		combo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				populationModelPropertyComposite
+						.displayDiseaseModel(getPopulationModels()[combo
+								.getSelectionIndex()]);
+				// layout();
+			} // widgetSelected
+
+		});
+		final PopulationModelDefinitionControl self = this;
+
+	} // DiseaseDefinitionControl
+
+	/**
+	 * @return an array of the {@link DiseaseModels}s defined in the system.
+	 */
+	private PopulationModel[] getPopulationModels() {
+		if (populationModels == null) {
+			final IExtensionRegistry registry = Platform.getExtensionRegistry();
+			final IConfigurationElement[] populationModelConfigElements = registry
+					.getConfigurationElementsFor(org.eclipse.stem.populationmodels.Constants.ID_POPULATION_MODEL_EXTENSION_POINT);
+
+			final List<PopulationModel> temp = new ArrayList<PopulationModel>();
+
+			populationModels = new PopulationModel[populationModelConfigElements.length];
+
+			for (int i = 0; i < populationModelConfigElements.length; i++) {
+				final IConfigurationElement element = populationModelConfigElements[i];
+				// Does the element specify the class of the population model?
+				if (element.getName().equals(org.eclipse.stem.populationmodels.Constants.POPULATION_MODEL_ELEMENT)) {
+					// Yes
+					try {
+						temp.add((PopulationModel) element
+								.createExecutableExtension(PopulationModelWizardMessages.getString("DDC.2"))); //$NON-NLS-1$
+					} catch (final CoreException e) {
+						Activator.logError(
+								PopulationModelWizardMessages.getString("DDC.3"), e); //$NON-NLS-1$
+					}
+				} // if
+			} // for each configuration element
+
+			populationModels = temp.toArray(new PopulationModel[] {});
+		} // if populationModels not created
+
+		return populationModels;
+	} // getPopulationModels
+
+	/**
+	 * @return the names of the disease models
+	 */
+	private String[] getPopulationModelNames(final PopulationModel[] populationModels) {
+		final String[] retValue = new String[populationModels.length];
+		for (int i = 0; i < populationModels.length; i++) {
+			String name = populationModels[i].getDublinCore().getTitle();
+			// Was a name specified?
+			if ((name == null) || name.equals("")) { //$NON-NLS-1$
+				// No
+				name = populationModels[i].getClass().getSimpleName();
+			} // if
+
+			retValue[i] = name;
+		} // for i
+		return retValue;
+	} // getPopulationModelNames
+
+	
+	PopulationModel getSelectedPopulationModel() {
+		final PopulationModel retValue = (PopulationModel)EcoreUtil
+				.copy(getPopulationModels()[combo.getSelectionIndex()]);
+		populationModelPropertyComposite.populatePopulationModel(retValue);
+		return retValue;
+	} // getSelectedPopulationModel
+
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return <code>true</code> if the contents of the control are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		return populationModelPropertyComposite.validate();
+	} // validate
+
+	/**
+	 * @return the error message set by {@link #validate()}
+	 */
+	public String getErrorMessage() {
+		return populationModelPropertyComposite.getErrorMessage();
+	}
+
+} // PopulationDefinitionControl
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelPropertyComposite.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelPropertyComposite.java
new file mode 100644
index 0000000..1e199c2
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelPropertyComposite.java
@@ -0,0 +1,129 @@
+// DiseaseModelPropertyComposite.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditor;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditorAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class represents
+ */
+public class PopulationModelPropertyComposite extends Composite {
+
+	private final Map<PopulationModel, PopulationModelPropertyEditor> modelMap = new HashMap<PopulationModel, PopulationModelPropertyEditor>();
+
+	private StackLayout stackLayout = null;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public PopulationModelPropertyComposite(final Composite parent,
+			final int style, final PopulationModel[] populationModels,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		stackLayout = new StackLayout();
+		setLayout(stackLayout);
+
+		Label label;
+		label = new Label(this, SWT.NONE);
+		label.setText(PopulationModelWizardMessages.getString("DMPC1")); //$NON-NLS-1$
+		PopulationModelPropertyEditor firstOne = null;
+		// Any disease models?
+		if (populationModels != null) {
+			// Yes
+			for (int i = 0; i < populationModels.length; i++) {
+
+				PopulationModelPropertyEditorAdapter dmpea = (PopulationModelPropertyEditorAdapter) PopulationModelPropertyEditorAdapterFactory.INSTANCE
+						.adapt(populationModels[i],
+								PopulationModelPropertyEditorAdapter.class);
+
+				final PopulationModelPropertyEditor dmpe = dmpea
+						.createPopulationModelPropertyEditor(this, SWT.NONE,
+								projectValidator);
+
+				modelMap.put(populationModels[i], dmpe);
+				if (firstOne == null) {
+					// Yes
+					firstOne = dmpe;
+				} // if
+			} // for i
+		} // if any disease models?
+
+		stackLayout.topControl = firstOne;
+	} // DiseaseModelPropertyComposite
+
+	void displayDiseaseModel(final PopulationModel diseaseModel) {
+		final PopulationModelPropertyEditor dmpe = modelMap.get(diseaseModel);
+		// Did we find it?
+		if (dmpe != null) {
+			// Yes
+			stackLayout.topControl = dmpe;
+			layout();
+		} // if
+		else {
+			Activator.logError(PopulationModelWizardMessages.getString("DMPC2") //$NON-NLS-1$
+					+ diseaseModel.getClass().getName() + "\"", null); //$NON-NLS-1$
+		}
+	} // displayDiseaseModel
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return <code>true</code> if the contents of the composite are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		return ((PopulationModelPropertyEditor) (stackLayout.topControl))
+				.validate();
+	} // validate
+
+	/**
+	 * @return
+	 */
+	public String getErrorMessage() {
+		return ((PopulationModelPropertyEditor) (stackLayout.topControl))
+				.getErrorMessage();
+	}
+
+	/**
+	 * @param diseaseModel
+	 */
+	public void populatePopulationModel(PopulationModel populationModel) {
+		((PopulationModelPropertyEditor) (stackLayout.topControl))
+				.populate(populationModel);
+	} // populatePopulationModel
+
+} // PopulationModelPropertyComposite
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelWizardMessages.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelWizardMessages.java
new file mode 100644
index 0000000..7e87ec2
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/PopulationModelWizardMessages.java
@@ -0,0 +1,46 @@
+// DiseaseWizardMessages.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class PopulationModelWizardMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.populationmodels.standard.wizards.populationmodelwizardmessages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private PopulationModelWizardMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // DiseaseWizardMessages
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditor.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditor.java
new file mode 100644
index 0000000..9f23f56
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditor.java
@@ -0,0 +1,278 @@
+// StandardDiseaseModelPropertyEditor.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.populationmodels.standard.StandardPackage;
+import org.eclipse.stem.populationmodels.standard.StandardPopulationModel;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a {@link Composite} that presents the properties of a
+ * {@link DiseaseModel} for editing.
+ */
+public class StandardPopulationModelPropertyEditor extends PopulationModelPropertyEditor {
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public StandardPopulationModelPropertyEditor(final Composite parent, final int style,
+			final PopulationModel populationModel,
+			final ModifyListener projectValidator) {
+		super(parent, style);
+
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(populationModel, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(populationModel, IItemPropertySource.class);
+		
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(populationModel);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedPopulationModelProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				boolean isDataPath = false;
+				if (feature.getName().equals("dataPath")) { //$NON-NLS-1$
+					isDataPath = true;
+				}
+				if (!isDataPath) {
+					final Label unitLabel = new Label(this, SWT.NONE);
+					unitLabel.setText(pspa.getPropertyUnits(descriptor));
+					final GridData unitLabelGD = new GridData(GridData.END);
+					unitLabelGD.verticalAlignment = GridData.CENTER;
+					unitLabel.setLayoutData(unitLabelGD);
+				}
+
+			} // if user specified
+		} // for each disease model property
+
+		final Label pmtpDefLabel = new Label(this, SWT.NONE);
+		pmtpDefLabel.setText(PopulationModelWizardMessages.getString("PMTP_Def")); //$NON-NLS-1$
+		final GridData pmtpDefGD = new GridData(GridData.END);
+		pmtpDefGD.grabExcessHorizontalSpace = true;
+		pmtpDefGD.horizontalSpan = 3;
+		pmtpDefLabel.setLayoutData(pmtpDefGD);
+	} // StandardDiseaseModelPropertyEditor
+
+	/**
+	 * @param diseaseModel
+	 *            the {@link DiseaseModel} instance to populate.
+	 */
+	@Override
+	public void populate(final PopulationModel populationModel) {
+		super.populate(populationModel);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			switch (entry.getKey().getFeatureID()) {
+			case StandardPackage.STANDARD_POPULATION_MODEL__POPULATION_IDENTIFIER:
+				((StandardPopulationModel)populationModel).setPopulationIdentifier(entry.getValue().getText());
+				break;
+			case StandardPackage.STANDARD_POPULATION_MODEL__BIRTH_RATE:
+				((StandardPopulationModel)populationModel)
+						.setBirthRate(Double.parseDouble(entry.getValue().getText().trim()));
+				break;
+			case StandardPackage.STANDARD_POPULATION_MODEL__DEATH_RATE:
+				((StandardPopulationModel)populationModel)
+				.setDeathRate(Double.parseDouble(entry.getValue().getText().trim()));
+				break;
+			case StandardPackage.STANDARD_POPULATION_MODEL__TIME_PERIOD:
+				((StandardPopulationModel)populationModel)
+				.setTimePeriod(Long.parseLong(entry.getValue().getText().trim()));
+				break;
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+	} // populate
+
+	/**
+	 * @return <code>true</code> if the contents are valid, <code>false</code>
+	 *         otherwise.
+	 */
+	@Override
+	public boolean validate() {
+		boolean retValue = super.validate();
+
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.POPULATION_MODEL__POPULATION_IDENTIFIER);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = PopulationModelWizardMessages.getString("NDizWizErr0"); //$NON-NLS-1$
+			} // if
+		} // if
+
+		// 
+		// Background mortality rate?
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.STANDARD_POPULATION_MODEL__DEATH_RATE);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = PopulationModelWizardMessages.getString("NDizWizErr4"); //$NON-NLS-1$
+			} // if
+			else {
+				// No
+				// Is it a valid value > 0?
+				retValue = isValidValue(text.getText(), 0.0);
+				if (!retValue) {
+					// No
+					errorMessage = PopulationModelWizardMessages
+							.getString("NDizWizErr5"); //$NON-NLS-1$
+				} // if
+			}
+		} // if Background mortality rate
+		
+		// 
+		// birth rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.STANDARD_POPULATION_MODEL__BIRTH_RATE);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = PopulationModelWizardMessages.getString("NDizWizErr6"); //$NON-NLS-1$
+			} // if
+			else {
+				// No
+				// Is it a valid value > 0?
+				retValue = isValidValue(text.getText(), 0.0);
+				if (!retValue) {
+					// No
+					errorMessage = PopulationModelWizardMessages
+							.getString("NDizWizErr7"); //$NON-NLS-1$
+				} // if
+			}
+		} // if Background mortality rate
+
+		// 
+		// birth rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.STANDARD_POPULATION_MODEL__TIME_PERIOD);
+			retValue = !text.getText().equals(""); //$NON-NLS-1$
+			// nothing?
+			if (!retValue) {
+				// Yes
+				errorMessage = PopulationModelWizardMessages.getString("NDizWizErr8"); //$NON-NLS-1$
+			} // if
+			else {
+				// No
+				// Is it a valid value > 0?
+				retValue = isValidLong(text.getText(), 0L);
+				if (!retValue) {
+					// No
+					errorMessage = PopulationModelWizardMessages
+							.getString("NDizWizErr9"); //$NON-NLS-1$
+				} // if
+			}
+		} // if Background mortality rate
+		
+		// birth rate
+		if (retValue) {
+			// Yes
+			final Text text = map
+					.get(StandardPackage.Literals.STOCHASTIC_STANDARD_POPULATION_MODEL__GAIN);
+			if(text != null) {
+				retValue = !text.getText().equals(""); //$NON-NLS-1$
+				// nothing?
+				if (!retValue) {
+					// Yes
+					errorMessage = PopulationModelWizardMessages.getString("NDizWizErr10"); //$NON-NLS-1$
+				} // if
+				else {
+					// No
+					// Is it a valid value > 0?
+					retValue = isValidValue(text.getText(), 0.0);
+					if (!retValue) {
+						// No
+						errorMessage = PopulationModelWizardMessages
+								.getString("NDizWizErr10"); //$NON-NLS-1$
+					} // if
+				}
+			}
+		} // if gain
+		
+		return retValue;
+	} // validate
+
+} // StandardPropertyModelPropertyEditor
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapter.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapter.java
new file mode 100644
index 0000000..5a533d9
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapter.java
@@ -0,0 +1,30 @@
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditor;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditorAdapter;
+import org.eclipse.swt.events.ModifyListener;
+
+public class StandardPopulationModelPropertyEditorAdapter extends
+		PopulationModelPropertyEditorAdapter {
+
+	@Override
+	public PopulationModelPropertyEditor createPopulationModelPropertyEditor(
+			final PopulationModelPropertyComposite populationModelPropertyComposite,
+			final int style, final ModifyListener projectValidator) {
+		return new StandardPopulationModelPropertyEditor(
+				populationModelPropertyComposite, style,
+				(PopulationModel) getTarget(), projectValidator);
+	} // createPopulationModelPropertyEditor
+
+} // StandardPopulationModelPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..adf3e14
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPopulationModelPropertyEditorAdapterFactory.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.populationmodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditorAdapter;
+import org.eclipse.stem.ui.populationmodels.adapters.PopulationModelPropertyEditorAdapterFactory;
+
+public class StandardPopulationModelPropertyEditorAdapterFactory extends
+		StandardAdapterFactory implements
+		PopulationModelPropertyEditorAdapterFactory {
+
+	public StandardPopulationModelPropertyEditorAdapterFactory() {
+		super();
+		PopulationModelPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	@Override
+	public Adapter createStandardPopulationModelAdapter() {
+		return new StandardPopulationModelPropertyEditorAdapter();
+	}
+
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == PopulationModelPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+
+} // StandardPopulationModelPropertyEditorAdapterFactory
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..6aa92f5
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/StandardPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,103 @@
+// StandardPropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.populationmodels.standard.wizards;
+
+/******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.populationmodels.standard.util.StandardAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+
+/**
+ * This class is used to NLS'd strings for {@link DiseaseModel} properties. 
+ */
+public class StandardPropertyStringProviderAdapterFactory extends
+		StandardAdapterFactory implements PropertyStringProviderAdapterFactory {
+
+	
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public StandardPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return  super.isFactoryForType(type) || type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createPopulationModelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new StandardPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createDiseaseModelAdapter
+
+	/**
+	 * This class represents 
+	 */
+	public static class StandardPropertyStringProviderAdapter extends
+			PropertyStringProviderAdapter {
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd name of the property to display to the user
+		 */
+		public String getPropertyName(IItemPropertyDescriptor descriptor) {
+			return PopulationModelWizardMessages
+					.getString(((EStructuralFeature) descriptor
+							.getFeature(null)).getName());
+		} // getPropertyName
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd tool tip text that describes the property
+		 */
+		public String getPropertyToolTip(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return PopulationModelWizardMessages.getString(feature.getName()
+					+ TT_SUFFIX);
+		} // getPropertyToolTip
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd text that represents the units of the
+		 *         property
+		 */
+		public String getPropertyUnits(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return PopulationModelWizardMessages.getString(feature.getName()
+					+ UNIT_SUFFIX);
+		} // getPropertyUnits
+
+	} // StandardPropertyStringProviderAdapter
+} // StandardPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/populationmodelwizardmessages.properties b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/populationmodelwizardmessages.properties
new file mode 100644
index 0000000..c5eb9b9
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/populationmodels/standard/wizards/populationmodelwizardmessages.properties
@@ -0,0 +1,74 @@
+# diseasewizardmessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# New Disease Wizard
+
+NPopulationModelWiz.wizard_title = New PopulationModel
+NPopulationModelWiz.page_title = PopulationModel
+NPopulationModelWiz.page_description = Define a new population model in a project
+
+NPopulationWiz.DC_DESCRIPTION = Standard Population Model
+
+PMTP_Def = *PM/TP = Population Member/Time Period
+
+deathRate = Background Mortality Rate (\u03bc)
+deathRateTT = The rate at which population members die from causes other than the disease.
+deathRateUNIT = PM/TP*
+
+birthRate = Background Birth Rate
+birthRateTT = The rate at which population members are born.
+birthRateUNIT = PM/TP*
+
+populationIdentifier = Population
+populationIdentifierTT = The name of the population infected by this disease. (e.g., human)
+populationIdentifierUNIT = 
+
+timePeriod = Time Period (TP)
+timePeriodTT = The time period for the rates (e.g., 86400000ms = 1 day).
+timePeriodUNIT = ms
+
+name = Model name
+nameTT = Specify a name for the population model
+nameUNIT = 
+
+gain = Random noise gain
+gainTT = Specify the random noise gain for the population model
+gainUNIT = 
+
+NDizWizErr0=Missing Population Identifier
+NDizWizErr4=Missing Background Mortality Rate.
+NDizWizErr5=Background mortality rate is invalid.
+NDizWizErr6=Missing Background Birth Rate.
+NDizWizErr7=Background birth rate is invalid.
+NDizWizErr8=Missing Time Period
+NDizWizErr9=Time period is invalid
+NDizWizErr10=Gain is invalid
+
+DMPC1=Population Model Property Control
+DMPC2=Missing Population Property Editor for "
+DDC.0=Population Model:
+DDC.1=Underlying Mathematical Population Model
+DDC.2=class
+DDC.3=Problem creating Population Model instance
+
+fileChooserButtonText=Select File...
+dirChooserButtonText=Select Directory...
+fileChooserButtonTooltipText=A file is being used for loading data for one specific node
+dirChooserButtonTooltipText=A directory is being used for loading a collection of files (usually for more than one node)
+fileChooserDialogTitle=Select CSV File
+dirChooserDialogTitle=Select Directory
+
+# Preferences
+PopulationPPageTITLE=Population Modeling
+ReferencePopulation=Reference population (individuals)
+ReferenceDensity=Reference population density (individuals/sq km)
diff --git a/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/views/populationmodel/PopulationModelView.java b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/views/populationmodel/PopulationModelView.java
new file mode 100644
index 0000000..0297e6b
--- /dev/null
+++ b/org.eclipse.stem.ui.populationmodels/src/org/eclipse/stem/ui/views/populationmodel/PopulationModelView.java
@@ -0,0 +1,130 @@
+// PopulationModelView.java
+package org.eclipse.stem.ui.views.populationmodel;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.stem.populationmodels.Constants;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+import org.eclipse.stem.ui.views.IdentifiablePluginView;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * This class implements a view of the plugged in populaiton model.
+ */
+public class PopulationModelView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Sequencers View
+	 */
+	public static final String ID_POPULATION_MODEL_VIEW = "org.eclipse.stem.ui.views.populationmodels"; //$NON-NLS-1$
+
+	/**
+	 * Default Constructor
+	 */
+	public PopulationModelView() {
+		super();
+	} // PopulationView
+
+	/**
+	 * @see org.eclipse.stem.ui.views.ExecutablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return PopulationViewModel.getModel();
+	} // getInput
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new PopulationViewTreeContentProvider();
+	} // getIdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class is the model of the plugged in <code>PopulationModel</code>
+	 */
+	public static class PopulationViewModel extends IdentifiableViewModel {
+
+		private static PopulationViewModel model = null;
+
+		/**
+		 * @param extensionPointID
+		 */
+		private PopulationViewModel(String extensionPointID) {
+			super(extensionPointID);
+		} // PopulationModelViewModel
+
+		/**
+		 * @return the singleton instance of the model
+		 */
+		public static PopulationViewModel getModel() {
+			// Do we need to make the model?
+			if (model == null) {
+				// Yes
+				model = new PopulationViewModel(
+						Constants.ID_POPULATION_MODEL_EXTENSION_POINT);
+			}
+			return model;
+		} // getModel
+
+	} // PopulaitonViewModel
+
+	/**
+	 * This class is the content provider of the population view.
+	 */
+	private static class PopulationViewTreeContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent population models in the population view
+		static ImageDescriptor populationIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean populationIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getPopulationIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent population models, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getPopulationIcon() {
+			// Should we try to load the icon?
+			if (populationIconFirstTime && populationIcon == null) {
+				// Yes
+				populationIconFirstTime = false;
+				populationIcon = 
+				AbstractUIPlugin.imageDescriptorFromPlugin(
+					"org.eclipse.stem.ui.populationmodels"	, "icons/full/custom16/" + "populationmodel.gif");
+			} // if we should load the icon
+			return populationIcon.createImage();
+		} // getPopulationIcon
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#dispose()
+		 */
+		@Override
+		public void dispose() {
+			super.dispose();
+			// TODO dispose of the image
+		}
+
+	} // PopulationModelViewTreeContentProvider
+} // PopulationView
diff --git a/org.eclipse.stem.ui.reports/.cdtproject b/org.eclipse.stem.ui.reports/.cdtproject
new file mode 100644
index 0000000..1b2ea83
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.cdtproject
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject/>
diff --git a/org.eclipse.stem.ui.reports/.classpath b/org.eclipse.stem.ui.reports/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui.reports/.cproject b/org.eclipse.stem.ui.reports/.cproject
new file mode 100644
index 0000000..2619c56
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.cproject
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="converted.config.907845264">
+<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.907845264" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
+<externalSettings/>
+<extensions/>
+</storageModule>
+</cconfiguration>
+</storageModule>
+</cproject>
diff --git a/org.eclipse.stem.ui.reports/.project b/org.eclipse.stem.ui.reports/.project
new file mode 100644
index 0000000..0a48469
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui.reports</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6e2ae96
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Mon Jan 21 12:53:05 EST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..e4c9487
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Thu Nov 01 14:50:53 EDT 2007
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.ui.reports/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.reports/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8185701
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui.reports;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.ui.reports.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.birt.chart.engine;visibility:=reexport,
+ org.eclipse.birt.chart.engine.extension,
+ org.eclipse.birt.core.ui,
+ org.eclipse.birt.chart.device.swt,
+ org.eclipse.stem.definitions,
+ org.eclipse.stem.ui
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.ui.reports,
+ org.eclipse.stem.ui.reports.views
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.ui.reports/build.properties b/org.eclipse.stem.ui.reports/build.properties
new file mode 100644
index 0000000..757ba15
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/,\
+               plugin.properties,\
+               notice.html,\
+               epl-v10.html
diff --git a/org.eclipse.stem.ui.reports/epl-v10.html b/org.eclipse.stem.ui.reports/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.reports/icons/sample.gif b/org.eclipse.stem.ui.reports/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.reports/notice.html b/org.eclipse.stem.ui.reports/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.ui.reports/plugin.properties b/org.eclipse.stem.ui.reports/plugin.properties
new file mode 100644
index 0000000..db6302b
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/plugin.properties
@@ -0,0 +1,18 @@
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+
+pluginName = STEM Charts and Reports UI
+providerName = Eclipse.org
+
+TS_View = Time Series
+PS_View = Phase Space
+AS_View = Aggregate Time Series
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.reports/plugin.xml b/org.eclipse.stem.ui.reports/plugin.xml
new file mode 100644
index 0000000..d3ff3f0
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/plugin.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="org.eclipse.stem.ui.STEMPerspective"
+         point="org.eclipse.ui.perspectives">
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.reports.views.TimeSeriesView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.ui.views.reports"
+            name="%TS_View">
+         Reports
+      </view>
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.reports.views.PhaseSpaceView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.ui.views.reports.phaseSpace"
+            name="%PS_View">
+      </view>
+      <view
+      		allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.reports.views.AggregateTimeSeriesView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.ui.views.reports.aggregate"
+            name="%AS_View">
+      </view>
+   </extension>
+   
+   <extension point="org.eclipse.ui.popupMenus">
+		<viewerContribution
+        	id="org.eclipse.stem.ui.reports.views"
+        	targetID="org.eclipse.stem.ui.views.geographic.map.context">
+	    	<action 
+		    	id="TimeSeries"
+		    	state="true"
+	       		label="%TS_View"	       		
+	       		menubarPath="reports/additions"
+	       		class="org.eclipse.stem.ui.reports.views.ReportsContextMenuAction">	
+	    	</action>
+	    	<action 
+		    	id="PhaseSpace"
+		    	state="true"
+	       		label="%PS_View"
+	       		menubarPath="reports/additions"
+	       		class="org.eclipse.stem.ui.reports.views.ReportsContextMenuAction">	
+	    	</action>
+	    	<action 
+		    	id="AggregateTimeSeries"
+		    	state="true"
+	       		label="%AS_View"
+	       		menubarPath="reports/additions"
+	       		class="org.eclipse.stem.ui.reports.views.ReportsContextMenuAction">	
+	    	</action>
+       </viewerContribution>
+  </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/Activator.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/Activator.java
new file mode 100644
index 0000000..0b641ca
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/Activator.java
@@ -0,0 +1,127 @@
+package org.eclipse.stem.ui.reports;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui.reports"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/MonitorPreferences.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/MonitorPreferences.java
new file mode 100644
index 0000000..78925ac
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/MonitorPreferences.java
@@ -0,0 +1,176 @@
+package org.eclipse.stem.ui.reports;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * This class represents
+ */
+public class MonitorPreferences {
+
+	Plugin plugin = Activator.getDefault();
+
+	/**
+	 * the users preferences
+	 */
+	Preferences prefs = plugin.getPluginPreferences();
+
+	/**
+	 * This is a list of location IDs from the user runtime preferences that
+	 * remember what locations the user wants to monitor. If no preferences
+	 * exist it will create one for the aggregated data at the world level
+	 */
+	private Set<String> monitorLocationPreferences = new HashSet<String>();
+
+	/**
+	 * the ID of the default location the location ID for the aggregated data at
+	 * the world level
+	 */
+	private static final String DEFAULT_LOCATION_ID = "stem://org.eclipse.stem/node/geo/region/ZZZ";
+
+	/**
+	 * Prefix to all node URI's
+	 */
+	private static final String URI_PREFIX = "stem://org.eclipse.stem/node/geo/region/";
+
+	/**
+	 * any preference location key must contain this substring
+	 * 
+	 */
+	private static final String LOCATION_KEY_SUBSTRING = "location.";
+
+	/**
+	 * the key to the default location should always be defined and should point
+	 * to the location ID for the aggregated data at the world level
+	 */
+	private static final String DEFAULT_LOCATION_KEY = "default.locationID";
+
+	/**
+	 * The key to the reference file name for the aggregate view report
+	 */
+	
+	public static final String REFERENCE_FILE_KEY = "reference.file";
+	
+	/**
+	 * 
+	 */
+	public MonitorPreferences() {
+
+		if (prefs.contains(DEFAULT_LOCATION_KEY)) {
+			String uri = prefs.getString(DEFAULT_LOCATION_KEY);
+			if (uri != DEFAULT_LOCATION_ID) {
+				setDefaultLocation();
+			} else {
+				monitorLocationPreferences.add(uri);
+			}
+		} else {
+			// set the default ID
+			setDefaultLocation();
+		}
+
+		// now check the other URI's
+		String[] allKeys = prefs.propertyNames();
+		for (int i = 0; i < allKeys.length; i++) {
+			if (allKeys[i].contains(LOCATION_KEY_SUBSTRING)
+					|| allKeys[i].contains(DEFAULT_LOCATION_KEY)) {
+				String nextID = prefs.getString(allKeys[i]);
+				monitorLocationPreferences.add(nextID);
+			}
+		} // for all keys
+
+	} // constructor
+
+	/**
+	 * 
+	 */
+	public void setDefaultLocation() {
+		prefs.setValue(DEFAULT_LOCATION_KEY, DEFAULT_LOCATION_ID);
+		monitorLocationPreferences.add(DEFAULT_LOCATION_ID);
+		plugin.savePluginPreferences();
+	}
+
+	/**
+	 * 
+	 * @return a set of preferred locations to monitor
+	 */
+	public Set<String> getMonitorLocationPreferences() {
+		return monitorLocationPreferences;
+	}
+
+	/**
+	 * @param monitorLocationPreferences
+	 */
+	public void setMonitorLocationPreferences(
+			Set<String> monitorLocationPreferences) {
+		this.monitorLocationPreferences = monitorLocationPreferences;
+	}
+
+	/**
+	 * @param newID
+	 */
+	public void addLocationPref(String newID) {
+		if (prefs != null) {
+			// is it really new?
+
+			if (!monitorLocationPreferences.contains(newID)) {
+				// we use the uri being added to generate a unique key
+				// by concatenating "location."+newURI
+				// preferences keys must be unique
+				// this also guarantees we never duplicate the same location
+				prefs.setValue(LOCATION_KEY_SUBSTRING + newID, newID);
+				this.monitorLocationPreferences.add(newID);
+				plugin.savePluginPreferences();
+			} // it ID is really new
+		} // if prefs not null
+	} // addLocationPref
+
+	/**
+	 * @param oldID
+	 */
+	public void removeLocationPref(String oldID) {
+		if (prefs != null) {
+			// is it really new?
+			if (!monitorLocationPreferences.contains(oldID))
+				this.monitorLocationPreferences.remove(oldID);
+
+			// does not work. No remove method?
+			// prefs.setToDefault(oldID);
+			// prefs.setValue(oldID, "");
+			plugin.savePluginPreferences();
+		} // if prefs not null
+	} // removeLocationPref
+
+	/**
+	 * removes the uri prefix from an string ID
+	 * 
+	 * @param uri
+	 * @return URIsuffix - the geographic code part of the uri
+	 */
+	public static String getURIsuffix(String uri) {
+		String retVal = uri.replaceAll(URI_PREFIX, "");
+		return retVal;
+	}// get uri suffix
+
+	/**
+	 * returns the default location ID as a URI
+	 * 
+	 * @return the URI
+	 */
+	public static URI getDefaultURI() {
+		return URI.createURI(DEFAULT_LOCATION_ID);
+	}
+}
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateFileInitializationException.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateFileInitializationException.java
new file mode 100644
index 0000000..66ca773
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateFileInitializationException.java
@@ -0,0 +1,35 @@
+package org.eclipse.stem.ui.reports.views;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Thrown when we fail to load a scenario for any reason
+ */
+
+public class AggregateFileInitializationException extends Exception {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param message
+	 */
+	public AggregateFileInitializationException(String message) {super(message);}
+	
+
+	/**
+	 * Constructor
+	 * 
+	 * @param t
+	 */
+	public AggregateFileInitializationException(Throwable t) {super(t);}
+
+}
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateReferenceFileLoader.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateReferenceFileLoader.java
new file mode 100644
index 0000000..5e8fcd6
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateReferenceFileLoader.java
@@ -0,0 +1,304 @@
+/**
+ * 
+ */
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.ui.reports.Activator;
+
+
+/**
+ * @author james
+ *
+ */
+public class AggregateReferenceFileLoader {
+	
+	private String dataFile="";
+	
+	
+	private static final String CSV_EXTENSION = ".csv";
+	private static final String TXT_EXTENSION = ".txt";
+	private List<Double> aggregateData = new ArrayList<Double>();
+	private Set<String> idSet = new HashSet<String>();
+	private File scenarioData = null;
+	private static final String[] ignoreKeys = {"time","iteration"};
+	
+	
+	/**
+	 * This class loads data from a folder containing a saved scenario run data.
+	 * The data in the folder is a set of csv files, one per location.
+	 * @param scenarioFile 
+	 * @throws AggregateFileInitializationException 
+	 * 
+	 */
+	public AggregateReferenceFileLoader(String scenarioFile) throws  AggregateFileInitializationException {
+		dataFile = scenarioFile;
+		scenarioData = new File(dataFile);
+		if(!isDataFile(scenarioData)) {
+			throw new AggregateFileInitializationException("Not a valid data file, must be .csv or .txt "+dataFile);
+		} 
+		aggregateData = processFile();
+	}
+
+	
+
+	
+	
+	/**
+	 * test file name to see if it is a data file. Must have extension .txt or .csv
+	 * 
+	 * @param file
+	 * @return true if data file
+	 */
+	private boolean isDataFile(File file) {
+		boolean retVal = true;
+		String name = file.getName();
+		if((name.indexOf(TXT_EXTENSION) < 0) && (name.indexOf(CSV_EXTENSION) < 0)) retVal = false;
+		return retVal;
+	}
+
+	
+	
+	/**
+	 * process the input file
+	 * @return a map of scenario data keyed by location ID
+	 * @throws AggregateFileInitializationException 
+	 */
+	  public List<Double> processFile() throws AggregateFileInitializationException {
+		  
+		int maxTime = 0;
+		HashMap<String, List<Double>> data = new HashMap<String,List<Double>>();
+		try {
+	      String record;  
+	      String header;
+	      int recCount = 0;
+	      List<String> headerElements = new ArrayList<String>();
+	      FileInputStream fis = new FileInputStream(scenarioData); 
+	      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+	         
+	      //
+	      // Read the file header
+	      //
+	      if ( (header=d.readLine()) != null ) { 
+	          	
+		      StringTokenizer st = new StringTokenizer(header );
+		            
+		      while (st.hasMoreTokens()) {
+		    	  String val = st.nextToken(",");
+		    	  headerElements.add(val.trim());
+		      }
+	      } // read the header
+	      /////////////////////
+	          
+	      // set up the empty lists
+	      int numColumns = headerElements.size();
+	      for (int i = 0; i < numColumns; i ++) {
+	      	String key = headerElements.get(i);
+	      	 if(validate(key)) {
+	      		data.put(key, new ArrayList<Double>());
+		      }
+	      	
+	      }
+	          
+	      // Here we check the type of the data file
+	      // by checking the header elements
+	          
+	          
+	          
+	      //////////////////////
+          // Read the data
+          //
+          while ( (record=d.readLine()) != null ) { 
+             recCount++; 
+            
+             StringTokenizer st = new StringTokenizer(record );
+             int tcount = 0;
+				while (st.hasMoreTokens()) {
+					String val = st.nextToken(",");
+					String key = headerElements.get(tcount);
+					if(validate(key)) {
+						idSet.add(key);
+						List<Double> dataList = data.get(key);
+						try {
+							Double dVal = new Double(val.trim());
+							dataList.add(dVal);
+							if (dataList.size() >= maxTime) maxTime = dataList.size();
+							data.put(key,dataList);
+						} catch(NumberFormatException nfe) {
+							data.remove(key);
+							idSet.remove(key);
+							Activator.logInformation("Not a valid number ("+val+") ... Removing key "+key, null);
+						}
+					}			
+					tcount ++;
+				}
+			} // while file has data
+       } catch (IOException e) { 
+          // catch io errors from FileInputStream or readLine()
+      	 Activator.logError(" IOException error!", e);
+      	 throw new AggregateFileInitializationException(e);
+       }
+       
+       List<Double> aggregate = new ArrayList<Double>();
+       for (int i = 0; i < maxTime; i ++) {
+    	   aggregate.add(i, new Double(0.0));
+       }
+       // loop over all location ids
+       Iterator<String> iter = idSet.iterator();
+       while((iter!=null)&&(iter.hasNext())) {
+    	   String key = iter.next();
+    	   List<Double> dataList = data.get(key);
+    	   for (int i = 0; i < maxTime; i ++) {
+    		   double val = aggregate.get(i).doubleValue();
+    		   val += dataList.get(i).doubleValue();
+        	   aggregate.set(i,new Double(val));
+           }
+       }
+     
+       return aggregate;
+	  } // process file
+	  
+	  
+	  /**
+		 * process an incidence file
+		 * An incidence file does not contain SI data so it can not return 
+		 * a ReferenceScenarioDataInstance (it is not used to estimate parameters).
+		 * Instead this method returns the raw data in a map
+		 * 
+		 * @param fileName
+		 * @return a map of scenario data keyed by location ID
+		 * @throws AggregateFileInitializationException 
+		 */
+		  public Map<String, List<String>> processIncidenceFile(String fileName) throws AggregateFileInitializationException {
+			File file = new File(fileName);
+			HashMap<String, List<String>> data = new HashMap<String,List<String>>();
+			
+			try {
+		      String record;  
+		      String header;
+		      int recCount = 0;
+		      List<String> headerElements = new ArrayList<String>();
+		      FileInputStream fis = new FileInputStream(file); 
+		      BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+		         
+		      //
+		      // Read the file header
+		      //
+		      if ( (header=d.readLine()) != null ) { 
+		          	
+			      StringTokenizer st = new StringTokenizer(header );
+			            
+			      while (st.hasMoreTokens()) {
+			    	  String val = st.nextToken(",");
+			    	  headerElements.add(val.trim());
+			      }
+		      } // read the header
+		      /////////////////////
+		          
+		      // set up the empty lists
+		      int numColumns = headerElements.size();
+		      for (int i = 0; i < numColumns; i ++) {
+		      	String key = headerElements.get(i);
+		      	data.put(key, new ArrayList<String>());
+		      }
+		          
+		      // Here we check the type of the data file
+		      // by checking the header elements
+		          
+		          
+		          
+		      
+	          //////////////////////
+	          // Read the data
+	          //
+	          while ( (record=d.readLine()) != null ) { 
+	             recCount++; 
+	             
+	             StringTokenizer st = new StringTokenizer(record );
+	             int tcount = 0;
+					while (st.hasMoreTokens()) {
+						String val = st.nextToken(",");
+						String key = headerElements.get(tcount);
+						(data.get(key)).add(val.trim());
+						tcount ++;
+					}
+				} // while file has data
+	       } catch (IOException e) { 
+	          // catch io errors from FileInputStream or readLine()
+	      	 Activator.logError(" IOException error!", e);
+	      	 throw new AggregateFileInitializationException(e);
+	       }
+	       return data;
+		  }
+		  
+		  /**
+		   * certain keys we must ignore
+		   * @param key
+		   * @return
+		   */
+		  private boolean validate(String key) {
+			  for (int i = 0; i < ignoreKeys.length; i ++) {
+				  String test = key.trim();
+				  if(test.equalsIgnoreCase(ignoreKeys[i])) return false;
+			  }
+			  return true;
+		  }
+		  
+	
+	/**
+	 * Indicate End-Of-File
+	 * 
+	 * @param buffer
+	 *            A buffer of diva data
+	 * 
+	 * @return True if we have reached End-Of-File
+	 */
+	static protected boolean EOF(String buffer) {
+		if (buffer == null || buffer.length() == 0)
+			return true;
+		return false;
+	}
+	
+	/**
+	 * 
+	 * @return aggregate data as array
+	 */
+	public List<Double> getAggregateData() {
+		return aggregateData;
+	}
+
+	/**
+	 * 
+	 * @return ids of locations that were aggregated
+	 */
+	public Set<String> getIdSet() {
+		return idSet;
+	}
+
+	
+
+} // AggregateReferenceFile
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateSeriesFactory.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateSeriesFactory.java
new file mode 100644
index 0000000..c459f1e
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateSeriesFactory.java
@@ -0,0 +1,55 @@
+// TimeSeriesFactory.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link ReportControl} instances.
+ */
+public class AggregateSeriesFactory implements ReportControlFactory {
+
+	static AggregateSeriesFactory INSTANCE = new AggregateSeriesFactory();
+
+	/**
+	 * Constants for saving ReportViewPreferences
+	 */
+	public static final String AGGREGATE_SERIES_TYPE = "AggregateTimeSeries";
+
+	/**
+	 * @param parent
+	 *            the parent of the {@link RelativeValueHistoryPlotter}
+	 * @return a {@link RelativeValueHistoryPlotter}
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicControlFactory#create(org.eclipse.swt.widgets.Composite)
+	 */
+	public ReportControl create(final Composite parent) {
+		return new AggregateValueHistoryPlotter(parent);
+	}
+
+	/**
+	 * @return TODO JFK
+	 * 
+	 */
+	public String getUniqueControlName() {
+		return AGGREGATE_SERIES_TYPE;
+	}
+	
+	/**
+	 * This Factory creates a control associated with an Simulation
+	 * @return type of factory
+	 */
+	public String getFactoryType() {
+		return SIMULATION_TYPE;
+	}
+
+} // TimeSeriesFactory
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesCanvas.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesCanvas.java
new file mode 100644
index 0000000..3b13e94
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesCanvas.java
@@ -0,0 +1,1096 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.Anchor;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.LineAttributes;
+import org.eclipse.birt.chart.model.attribute.LineStyle;
+import org.eclipse.birt.chart.model.attribute.Marker;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.LineSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * AggregateTimeSeriesCanvas is a subclass of {@link Canvas} suitable for chart drawings.
+ */
+public class AggregateTimeSeriesCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The provider of relative values.
+	 */
+	//private RelativeValueHistoryProvider rvhp;
+
+	private AggregateValueHistoryPlotter control = null;
+	
+    // TODO get rid of this
+	private static final String defaultKey = AggregateValueHistoryPlotter.REFERENCE_PROPERTY;
+
+	/**
+	 * Start with this visible
+	 */
+	private static final String DEFAULT_PROPERTY = "I";
+	/**
+	 * used if we need to overlay traces in different colors
+	 */
+	private boolean overlayMode = false;
+		
+
+	/**
+	 * A context menu for this view
+	 */
+	Menu popUpMenu = null;
+	
+	/**
+	 * set y axis to a linear scale
+	 */
+	private LinearScaleAction linearTimeAction;
+	/**
+	 * set y axis to a log scale
+	 */
+	private LogScaleAction logTimeAction;
+	protected boolean useLinearTimeScale = true;
+	
+
+	/**
+	 * show the legend (true by default)
+	 */
+	private LegendViewAction viewLegend;
+
+	/**
+	 * hide the legend 
+	 */
+	private LegendHideAction hideLegend;
+	protected boolean showLegend = true;
+
+	protected Legend legend = null;
+	
+
+	/**
+	 * this is a map of the DataSeries object (keyed by property name)
+	 */
+	protected final Map<String,DataSeries> dataSeriesMap = new HashMap<String,DataSeries>();
+	
+
+	/**
+	 * These are the cycle numbers that match the relative values that will be
+	 * plotted
+	 * 
+	 * @see #relativeValues
+	 */
+	private final List<Integer> cycleNumbers = new ArrayList<Integer>();
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	Axis yAxisPrimary;
+	Axis xAxisPrimary;
+	/**
+	 * the maxY value for scaling
+	 */
+	double maxY = -1.0;
+
+	/**
+	 * Log of zero is negative infinity so for each location we will cut off the minimum 
+	 * at the min NONZERO Y value
+	 */
+	private double minYscale = 0.0000001;
+	
+	
+
+
+	/**
+	 * Label for line series LEGEND
+	 */
+	public String Ordinate_LEGEND = "Y";
+	
+	/**
+	 * Label for line series Y axis label
+	 **/
+	public String Ordinate_AXIS = "Y";
+	
+	/** 
+	 * customizable color definitions
+	 */
+	private ColorDefinition foreGround = ColorDefinitionImpl.WHITE();
+	private ColorDefinition backgroundGround = ColorDefinitionImpl.BLACK();
+	private ColorDefinition frameColor = ColorDefinitionImpl.create(180, 180, 200);
+
+	Image imgChart = null;
+	
+	
+	/**
+	 * This Constructor is used when we want to place the time series in a container
+	 * which is a sub component of the actual ReportControl
+	 * @param reportControl 
+	 */
+	public AggregateTimeSeriesCanvas(final AggregateValueHistoryPlotter reportControl) {
+		
+		super(reportControl, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		Ordinate_LEGEND = "Time"; // TODO NLS
+		Ordinate_AXIS = "";
+		foreGround 			= ColorDefinitionImpl.WHITE();
+		backgroundGround 	= ColorDefinitionImpl.BLACK();
+		frameColor 			= ColorDefinitionImpl.GREY();
+		this.overlayMode = false;
+		
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = reportControl;	
+		cm = createSimpleLineChart(dataSeriesMap, cycleNumbers, Messages
+				.getString("CC.title")); //$NON-NLS-1$
+		
+		resetData();
+		
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+			} // paintControl
+		} // PaintListener
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+	} // constructor 1
+	
+	
+	
+	
+	/**
+	 * The method which gets the {@link AggregateTimeSeriesCanvas}' reports list, and
+	 * draws it on the {@link AggregateTimeSeriesCanvas}.
+	 * 
+	 */
+	public void draw() {
+		
+		int maxLines = control.getNumProperties();
+		
+		// add all the rest of the line series now
+		for (int i = 0; i < maxLines; i ++) {
+			String property = control.getProperty(i);
+			
+			if(!dataSeriesMap.containsKey(property)) {
+				// new property
+				DataSeries series = new DataSeries(property, overlayMode);
+				dataSeriesMap.put(property, series);
+			}
+			DataSeries series = dataSeriesMap.get(property);
+			if(series.isVisible()) {
+				series.show();
+			} else {
+				series.hide();
+			}
+		}
+		resetData();
+		// update the context menu with the new properties to plot
+		updateContextMenu(this);
+		maxY = -1.0;
+			boolean setCycles = false;
+			// Get the values for the property to be plotted
+			int maxPoints = 0;
+			
+			for (int i = 0; i < maxLines; i++) {
+				String property = control.getProperty(i);
+			
+				final double[] doubleValues = control.getValues(property);
+				
+				DataSeries series = dataSeriesMap.get(property);
+				
+				for (int j = 0; j < doubleValues.length; j++) {
+					
+					if(doubleValues[j] <= minYscale) {
+						if(doubleValues[j] > 0.0) minYscale = doubleValues[j];
+					}
+					
+					if(doubleValues[j] >= maxY) {
+						if(series.isVisible()) maxY = doubleValues[j];
+						double log = Math.floor(Math.log10(maxY));
+						double adjustedMax = (Math.ceil(maxY/Math.pow(10, log)))*Math.pow(10, log);
+					  //  if(adjustedMax <= 1.0) adjustedMax = 1.0;
+						if (useLinearTimeScale) {
+							yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(adjustedMax));
+							double step = adjustedMax / 10.0;
+							yAxisPrimary.getScale().setStep(step);
+						} else {
+							// keep 2 significant figures on scale axis
+							double ymax = Math.log(adjustedMax);
+							if(adjustedMax > 1.0) {
+								ymax += 0.499;
+								long imax = Math.round(ymax);
+								ymax = imax;
+							}
+							yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(ymax));
+							double step = ymax/10.0;
+							if (step > 0.0) yAxisPrimary.getScale().setStep(step);
+						}
+						
+						
+					}
+				}
+			
+					// Any values?
+					if (doubleValues.length > 0) {
+						if (maxPoints < doubleValues.length) {
+							maxPoints = doubleValues.length;
+						}
+						
+						for (int cycleNumber = 0; cycleNumber < maxPoints; cycleNumber++) {
+							
+							Double value;
+							double displayValue = doubleValues[cycleNumber];
+							if (displayValue <= minYscale) {
+								// Log(0.0) is negative infinity so for display purposes only
+								// we set the minimum axis value at 0.1/POPULATION
+								displayValue = minYscale;
+							}
+							if (useLinearTimeScale) {
+								value = new Double(displayValue);
+							} else {
+								value = new Double(Math.log(displayValue));
+							}
+							
+
+							series.addValue(value);
+							
+							// only do once for first line series
+							if (!setCycles) {
+								cycleNumbers.add(new Integer(cycleNumber));	
+								}
+						} // for cycleNumber
+						
+						
+						
+						setCycles = true; // we set them only once
+						
+					} else {
+						//resetData();
+					}
+			} // for i properties
+
+
+		if (!this.isDisposed()) {
+			redraw();
+		}
+		
+		return ;
+	} // paintControl
+
+	/**
+	 * @param dataSeriesMap
+	 *            the {@link List} that will contain the relative values
+	 *            (0.0-1.0) to plot
+	 * @param cycleNumbers
+	 *            the {@link List} of simulation cycle numbers that match the
+	 *            relative values
+	 * @param seriesIdentifier
+	 *            the title of the chart
+	 * @return a <code>Chart</code>
+	 */
+	public final Chart createSimpleLineChart(
+			final Map<String, DataSeries> dataSeriesMap,
+			final List<Integer> cycleNumbers, final String seriesIdentifier) {
+		
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+		
+		// Plot
+		retValue.getBlock().setBackground(frameColor);
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(backgroundGround);
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		legend = retValue.getLegend();
+		final LineAttributes lia = legend.getOutline();
+		legend.getText().getFont().setSize(8);
+		lia.setStyle(LineStyle.SOLID_LITERAL);
+		legend.getInsets().set(10, 5, 0, 0);
+		legend.getOutline().setVisible(false);
+		legend.setAnchor(Anchor.NORTH_LITERAL);
+		legend.setPosition(Position.BELOW_LITERAL);
+		legend.getText().setColor(foreGround);
+		legend.getOutline().setColor(foreGround);
+		
+		// cwaLine.getLegend( ).getText().getFont().setSize(16);;
+		// cwaLine.getLegend( ).setVisible( true );
+
+		// /////////
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+		xAxisPrimary.getTitle().setVisible(false);
+		xAxisPrimary.getTitle().getCaption().getFont().setSize(9);
+		xAxisPrimary.getTitle().getCaption().setColor(foreGround);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+
+		final Series xAxisSeries = SeriesImpl.create();
+
+		// new colors
+		xAxisSeries.getLabel().getCaption().setColor(foreGround);
+		xAxisSeries.getLabel().getOutline().setColor(foreGround);
+		//	
+
+		final NumberDataSet xValues = NumberDataSetImpl.create(cycleNumbers);
+		xAxisSeries.setDataSet(xValues);
+		final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+
+		xAxisPrimary.getSeriesDefinitions().add(sdX);
+		sdX.getSeries().add(xAxisSeries);
+
+		// ////////
+		// Y-Axis
+		yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+
+		// NumberDataSet[] orthoValues = new NumberDataSet[MAX_LINES];
+		// SeriesDefinition[] sdY = new SeriesDefinition[MAX_LINES];
+
+		// end Y-Series
+
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		// xAxisPrimary.getScale( ).setMax( NumberDataElementImpl.create( 10.0 )
+		// );
+		// xAxisPrimary.getScale( ).setStep( 1 );
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		xAxisPrimary.getTitle().setVisible(true);
+		xAxisPrimary.getTitle().getCaption().setValue(Messages.getString("TS.TIMELABEL"));
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.25);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		yAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		yAxisPrimary.getTitle( ).getCaption( ).setValue( Ordinate_AXIS );
+		yAxisPrimary.getTitle( ).setVisible(true);
+		// yAxisPrimary.getMajorGrid().getLineAttributes().setColor(foreGround);
+		
+		// for now get ready to create only one line - we have no data yet.
+		// we will add more lines as we need them
+		// handle null
+		if(!dataSeriesMap.containsKey(defaultKey)) {
+			DataSeries series = new DataSeries(defaultKey, overlayMode);
+			dataSeriesMap.put(defaultKey, series);
+		}
+
+		return retValue;
+	} // createSimpleLineChart
+
+	
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	protected void createContextMenu(final Composite parent) {
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+
+
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+	
+	/**
+	 * Update the view's context menu and add the action handlers to it.
+	 */
+	private void updateContextMenu(final Composite parent) {
+
+		if (popUpMenu != null) {
+			popUpMenu.dispose();
+		} else {
+			return;
+		}
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+		
+		// ---------------------------------------------------------------------
+
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		
+		// ---------------------------------------------------------------------
+		// add the displayable properties
+		for (int i = 0; i < control.getNumProperties(); i ++) {
+			
+			String nextProp = control.getProperty(i);
+			DataSeries series = dataSeriesMap.get(nextProp);
+			DisplayableProperty property = new DisplayableProperty(nextProp, series.isVisible());
+			contextMenuManager.add(property);
+		}
+
+		// ---------------------------------------------------------------------
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+
+	} // updateContextMenu
+
+
+	
+	/**
+	 * Sets the colors for a n array of LineSeries given the property to Plot
+	 * for each. Try to set color from the preferences (if specified for that
+	 * property) otherwise sets line color to white.
+	 * 
+	 * @param propertiesToPlot
+	 * @param lsList
+	 */
+	public static void setColorDefs(
+			final List<String> propertiesToPlot,
+			final List<LineSeries> lsList) {
+		// the default line color
+
+		// if possible get color from preferences
+		final Map<String, Color> colorMap = VisualizationPreferencePage
+				.getColorMapping();
+		for (int i = 0; i < lsList.size(); i++) {
+			ColorDefinition color = ColorDefinitionImpl.WHITE();
+
+			if ((propertiesToPlot != null) && (propertiesToPlot.size() > i)) {
+				final String key = propertiesToPlot.get(i);
+				// look or the preference color by name
+				if (colorMap.containsKey(key)) {
+					final Color c = colorMap.get(key);
+					color = ColorDefinitionImpl.create(c.getRed(),
+							c.getGreen(), c.getBlue());
+				}
+				lsList.get(i).setSeriesIdentifier(key);
+				lsList.get(i).getLineAttributes().setColor(color);
+			} else {
+
+				if (lsList.get(i) != null) {
+					lsList.get(i).setSeriesIdentifier(" ");
+					lsList.get(i).getLineAttributes().setColor(color);
+				}
+			}
+		}
+		return;
+	}// getColorDef
+
+
+	
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		redraw();
+	}
+
+	protected void resetData() {
+		clearData();
+	
+		cycleNumbers.add(new Integer(0));
+	}
+
+	private void clearData() {
+		
+		Iterator<String> iter = dataSeriesMap.keySet().iterator();
+		while((iter!=null)&&(iter.hasNext())) {
+			String key = iter.next();
+			DataSeries series = dataSeriesMap.get(key);
+			series.relativeValues.clear();
+			series.addValue(new Double(0.0));
+		}
+		cycleNumbers.clear();
+	}
+
+	
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleAxisScale() {
+		if (useLinearTimeScale) { //Switch to logarithmic scale
+			logTimeAction.setChecked(true);
+			linearTimeAction.setChecked(false);
+			//Just using the following axis type, to move to log scale, didn't work
+			//yAxisPrimary.setType(AxisType.LOGARITHMIC_LITERAL);
+			yAxisPrimary.getScale().setMin(null);
+			yAxisPrimary.getScale().setMax(null);
+			yAxisPrimary.getScale().unsetStep();
+			yAxisPrimary.getScale().unsetStepNumber();
+		}
+		else { //Switch to linear scale
+			logTimeAction.setChecked(false);
+			linearTimeAction.setChecked(true);
+			//yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+			yAxisPrimary.getScale().setStep(0.25);
+		}
+		useLinearTimeScale = !useLinearTimeScale;
+		draw();
+	}
+	
+
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleLegend() {
+		if (showLegend) { //Switch to hide
+			viewLegend.setChecked(false);
+			hideLegend.setChecked(true);
+			legend.setVisible(false);
+		}
+		else { //Switch to view
+			viewLegend.setChecked(true);
+			hideLegend.setChecked(false);
+			legend.setVisible(true);
+		}
+		showLegend = !showLegend;
+		draw();
+	}
+	
+	/**
+	 * 
+	 * @param minYscale
+	 */
+	public void setMinYscale(double minYscale) {
+		this.minYscale = minYscale;
+	}
+
+
+	/**
+	 * Action to show the legend
+	 */
+	protected class LegendViewAction extends Action {
+		public LegendViewAction()
+		{
+			super(Messages.getString("ContextMenu.ShowLegend"), IAction.AS_CHECK_BOX);
+			setChecked(showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.ShowLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	} //LegendViewAction
+	
+	/**
+	 * Action to hide the legend
+	 */
+	class LegendHideAction extends Action 	{
+		public LegendHideAction()
+		{
+			super(Messages.getString("ContextMenu.HideLegend"), IAction.AS_CHECK_BOX);
+			setChecked(!showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.HideLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	}//LegendHideAction
+
+	
+	/**
+	 * switch to linear plot 
+	 * 
+	 */
+	protected class LinearScaleAction extends Action {
+		public LinearScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LinearTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LinearTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	} //LinearScaleAction
+
+	/**
+	 * switch to semi-log plot (log scale on y axis)
+	 * 
+	 */
+	class LogScaleAction extends Action 	{
+		public LogScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LogTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(!useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LogTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	}//LogScaleAction
+	
+	/**
+	 * DisplayableProperty
+	 *
+	 */
+	protected class DisplayableProperty extends Action
+	{
+		String property = null;
+		public DisplayableProperty(String property, boolean visibility)
+		{
+					super(property, IAction.AS_CHECK_BOX);
+					this.property = property;
+					setChecked(visibility);
+		}
+		
+	
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return property;
+		}
+
+		/**
+		 * Toggle the state
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+				DataSeries series = dataSeriesMap.get(property);
+				series.toggleVisible();
+				dataSeriesMap.put(property,series);
+				setChecked(series.isVisible());
+				draw();
+		}
+	}// DisplayableProperty
+	
+	
+	/**
+	 * Inner class DataSeries
+	 * all the data objects for a plot
+	 *
+	 */
+	protected class DataSeries 
+	{
+		public String propertyName = "";
+		
+		public List<Double> relativeValues = new ArrayList<Double>();
+		public Series lineSeries = null;
+		private boolean visible = true;
+		private SeriesDefinition sdY = null;
+		private boolean overlayMode = false;
+		
+		
+		public boolean isVisible() {
+			return visible;
+		}
+		public void setVisible(boolean state) {
+			visible = state;
+		}
+		
+		public void toggleVisible() {
+			visible = !visible;
+		}
+
+		/**
+		 * 
+		 * @param propertyName
+		 * @param overlay 
+		 */
+		public DataSeries(String propertyName, boolean overlay) {
+			this.propertyName = propertyName;
+			this.overlayMode = overlay;
+			relativeValues = new ArrayList<Double>();
+			relativeValues.add(new Double(0.0));
+			addLineSeries(propertyName);
+			// for the AggregateTimeSeries Canvas, by default
+			// we will start with only the reference series and the I series visible
+			if((!(this.propertyName.equalsIgnoreCase(AggregateValueHistoryPlotter.REFERENCE_PROPERTY)))&&(!this.propertyName.equalsIgnoreCase(DEFAULT_PROPERTY))) {
+				visible = false;
+			}
+		}
+		
+		public void addValue(Double val) {
+			if(relativeValues==null) relativeValues = new ArrayList<Double>();
+			relativeValues.add(val);
+		}
+		
+		
+		public void addValue(int time, Double val) {
+			if(relativeValues==null) relativeValues = new ArrayList<Double>();
+			relativeValues.add(time, val);
+		}
+		
+		/**
+		 * @param propertyName
+		 * 
+		 */
+		@SuppressWarnings("deprecation")
+		public void addLineSeries(final String propertyName) {
+			
+			final NumberDataSet orthoValues = NumberDataSetImpl
+					.create(relativeValues);
+			if(lineSeries == null) {
+				lineSeries = ScatterSeriesImpl.create();
+				/*
+				 * 
+				 * Bar chart style is too slow for generation of a fill
+				 * if we want a fill we can try using the difference plot
+				 * to a straight line at y=0
+				 * 
+				
+				if(propertyName.indexOf("*")>=1) {
+					// barseries methods
+					lineSeries = (BarSeries) BarSeriesImpl.create();
+				} else {
+					lineSeries = (ScatterSeries) ScatterSeriesImpl.create();
+				}
+				
+				*
+				*/
+			} // if lineSeries==null
+			lineSeries.setDataSet(orthoValues);
+			((LineSeries) lineSeries).getLineAttributes().setVisible(true);
+			
+			// replaces deprecated code: lineSeries.getMarker().setVisible(false);
+			if (!((LineSeries) lineSeries).getMarkers().isEmpty()) {
+				Marker marker = ((LineSeries) lineSeries).getMarkers().get(0);
+				marker.setVisible(false);
+			}
+			
+			// Assign the line color
+			// based on selected property. Default is Blue
+			setColorDefs(propertyName);
+			// If this is the "selected" region of a graph set the marker type
+		
+			// the series def
+			sdY = SeriesDefinitionImpl.create();
+			sdY.getSeriesPalette().update(-2);
+			sdY.getSeries().add(lineSeries);
+			yAxisPrimary.getSeriesDefinitions().add(sdY);
+			
+			return;
+		}// addLineSeries
+		
+		/** 
+		 * in response to user action temporarily remove the line series from the graph
+		 */
+		public void hide() {
+			lineSeries.setVisible(false);
+			visible = false;
+		}// hide
+		
+		/** 
+		 * in response to user action add back the line series to the graph
+		 */
+		public void show() {
+			lineSeries.setVisible(true);
+			visible = true;
+		}// show
+		
+
+		/**
+		 * Sets the colors for a n array of LineSeries given the property to Plot
+		 * for each. Try to set color from the preferences (if specified for that
+		 * property) otherwise sets line color to blue.
+		 * @param propertyName 
+		 *
+		 */
+		public void setColorDefs(String propertyName) {
+			// the default line color
+
+			// if possible get color from preferences
+			final Map<String, Color> colorMap = VisualizationPreferencePage.getColorMapping();
+
+			// default color
+			ColorDefinition color = ColorDefinitionImpl.WHITE();
+
+			// preferred color by name
+			String key = propertyName.substring(0,1);
+			
+			if (colorMap.containsKey(key)) {
+				final Color c = colorMap.get(key);
+				color = ColorDefinitionImpl.create(c.getRed(), c.getGreen(), c.getBlue());
+			}
+			
+			this.lineSeries.setSeriesIdentifier(propertyName);
+			if (overlayMode) {
+				if(propertyName.indexOf("*")>=1) {
+					// barseries methods
+					((LineSeries)this.lineSeries).getLineAttributes().setColor(color);
+				} else {
+					((LineSeries)this.lineSeries).getLineAttributes().setColor(ColorDefinitionImpl.GREY());
+					((LineSeries)this.lineSeries).getLineAttributes().setStyle(LineStyle.DOTTED_LITERAL);
+				}
+			} else {
+				((LineSeries)this.lineSeries).getLineAttributes().setColor(color);
+			}
+			
+			
+		}// getColorDefs
+
+		/**
+		 * length of the series
+		 * @return number of data points
+		 */
+		public int getDataSize() {
+			return relativeValues.size();
+		}
+		// Accessors
+		public String getPropertyName() {
+			return propertyName;
+		}
+
+		public void setPropertyName(String propertyName) {
+			this.propertyName = propertyName;
+		}
+
+		public List<Double> getRelativeValues() {
+			return relativeValues;
+		}
+
+		public void setRelativeValues(List<Double> relativeValues) {
+			this.relativeValues = relativeValues;
+		}
+
+		
+
+		public void setLineSeries(LineSeries lineSeries) {
+			this.lineSeries = lineSeries;
+		}
+	}// DataSeries
+	////////////////////////////////////////////////////////
+	
+} // AggregateTimeSeriesCanvas
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesView.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesView.java
new file mode 100644
index 0000000..09fe1fe
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateTimeSeriesView.java
@@ -0,0 +1,99 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view contains BIRT output that plots values of variables in STEM
+ * simulations.
+ */
+
+public class AggregateTimeSeriesView extends ViewPart implements ISelectionListener {
+
+	/**
+	 * The identifier of the Time Series View
+	 */
+	public static final String ID_AGGREGATE_VIEW = "org.eclipse.stem.ui.reports.views.AggregateTimeSeriesView"; //$NON-NLS-1$
+	
+	@SuppressWarnings("unused")
+	private List<Identifiable> selectedIdentifiables = null;
+
+	/**
+	 * This is the decorator that has been selected by the combo box.
+	 */
+	protected Decorator selectedDecorator;
+
+	private ReportViewer reportViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		reportViewer = new ReportViewer(parent, AggregateSeriesFactory.INSTANCE);
+		reportViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(reportViewer);
+
+		// Register with the SelectionService
+		getSite().getWorkbenchWindow().getSelectionService()
+				.addSelectionListener(this);
+
+	} // createPartControl
+
+	/**
+	 * This method is called whenever ANYTHING is selected in the Eclipse
+	 * workbench. It's job is to filter out selections of ISimulation instances
+	 * and update the chart in the TimeSeriesCanvas
+	 * 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(@SuppressWarnings("unused") final IWorkbenchPart part,
+			@SuppressWarnings("unused") final ISelection selection) {
+		// Nothing
+	} // selectionChanged
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		getSite().getWorkbenchWindow().getSelectionService()
+				.removeSelectionListener(this);
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // TimeSeriesView
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateValueHistoryPlotter.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateValueHistoryPlotter.java
new file mode 100644
index 0000000..ea3627e
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/AggregateValueHistoryPlotter.java
@@ -0,0 +1,738 @@
+// RelativeValueHistoryPlotter.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListenerSync;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.stem.ui.reports.MonitorPreferences;
+import org.eclipse.stem.ui.widgets.PropertySelector;
+import org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * This class is a SWT GUI component that uses BIRT to plot
+ */
+public class AggregateValueHistoryPlotter extends ReportControl implements ISimulationListenerSync {
+
+	AggregateTimeSeriesCanvas aggregateSeriesCanvas;
+	PropertySelector propertySelector;
+	List<ItemPropertyDescriptor> selectedProperties;
+	Set<ItemPropertyDescriptor> allProperties = new HashSet<ItemPropertyDescriptor>();
+	Map<String,List<Double>> dataMap = new HashMap<String,List<Double>>();
+	
+	List<Double> aggregateReference = new ArrayList<Double>();
+	Set<String> referenceIDs = new HashSet<String>();
+	
+	String selectedReferenceFile;
+	
+	Set<RelativeValueProviderAdapter> relativeValueProviderSet = new HashSet<RelativeValueProviderAdapter>();
+	double totalPopulation = 1.0;
+	/**
+	 * this simulations graph
+	 */
+	Graph graph = null;
+	int timeCount = 0;
+	
+	protected static final String REFERENCE_PROPERTY ="ref";
+	Set<ISimulation> activeSimulations = new HashSet<ISimulation>();
+	
+
+	/**
+	 * This interface is implemented by classes that select out the properties
+	 * to be displayed.
+	 */
+	public interface PropertySieve {
+		/**
+		 * @param dynamicLabel
+		 *            the label that contains the candidate properties to be
+		 *            displayed.
+		 * @return a <code>List</code> of the properties that should be
+		 *         displayed in the order that they should be displayed.
+		 */
+		List<ItemPropertyDescriptor> sieve(final DynamicLabel dynamicLabel);
+	} // PropertySieve
+
+	/**
+	 * This sieve selects all of those properties that have relative values.
+	 */
+	private final PropertySieve propertySieve = new PropertySieve() {
+		/**
+		 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySieve#sieve(org.eclipse.stem.core.graph.DynamicLabel)
+		 */
+		public List<ItemPropertyDescriptor> sieve(
+				final DynamicLabel dynamicLabel) {
+			final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dynamicLabel, RelativeValueProvider.class);
+
+			// Does the label have relative values?
+			if (rvp != null) {
+				// Yes
+				rvp.setTarget(dynamicLabel);
+
+				for (final Object element : rvp.getProperties()) {
+					final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+					retValue.add(property);
+				} // for each property
+			} // if the label has relative values
+			return retValue;
+		} // sieve
+	};
+
+	/**
+	 * @param parent
+	 */
+	public AggregateValueHistoryPlotter(final Composite parent) {
+		super(parent, SWT.None);
+		simulation = null;
+		dataMap.put(REFERENCE_PROPERTY, aggregateReference); // put zeros for now
+		createContents();
+	} // RelativeValueHistoryPlotter
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	private void createContents() {
+		setLayout(new FormLayout());
+		timeCount = 0;
+		identifiableTitle = new Label(this, SWT.NONE);
+		aggregateSeriesCanvas = new AggregateTimeSeriesCanvas(this);
+		aggregateSeriesCanvas.reset();
+		propertySelector = new PropertySelector(this, SWT.NONE, true);
+
+		removeButton = new Button(this, SWT.NONE);
+		removeButton.setText(REMOVE_TEXT);
+		
+		addReferenceLabel = new Label(this,SWT.BORDER);
+		String refFile = Activator.getDefault().getPreferenceStore().getString(MonitorPreferences.REFERENCE_FILE_KEY);
+		if(refFile == null) refFile = "";
+		this.selectedReferenceFile = refFile;
+		addReferenceLabel.setText(refFile);
+		
+		addReferenceButton = new Button(this, SWT.NONE);
+		addReferenceButton.setText(ADD_REFERENCE_TEXT);
+		final Shell shell = this.getShell();
+		final AggregateValueHistoryPlotter self = this;
+	    addReferenceButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final FileDialog dd = new FileDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("REPORTVIEW.SELECTREFENCEFOLDER")); //$NON-NLS-1$
+					dd.setFilterPath(addReferenceLabel.getText());
+					final String selected = dd.open();
+					self.selectedReferenceFile = selected;
+					addReferenceLabel.setText(selected);
+					Activator.getDefault().getPreferenceStore().setValue(MonitorPreferences.REFERENCE_FILE_KEY, selected);
+					try {
+						AggregateReferenceFileLoader refLoader = new AggregateReferenceFileLoader(selected);
+						aggregateReference = refLoader.getAggregateData();
+						dataMap.put(REFERENCE_PROPERTY, aggregateReference);
+						referenceIDs = refLoader.getIdSet();
+						
+					} catch (Exception ex) {
+						System.out.println("error "+ex);
+						ex.printStackTrace();
+						Activator.logError(ex.getMessage(), ex);
+					}	
+			}
+		});
+		
+		
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		final FormData chartFormData = new FormData();
+		aggregateSeriesCanvas.setLayoutData(chartFormData);
+		chartFormData.top = new FormAttachment(identifiableTitle, 0);
+		chartFormData.bottom = new FormAttachment(propertySelector, 0);
+		chartFormData.left = new FormAttachment(0, 0);
+		chartFormData.right = new FormAttachment(100, 0);
+
+		// Property Selector
+		final FormData propertySelectorFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(aggregateSeriesCanvas,
+		// 0);
+		propertySelectorFormData.bottom = new FormAttachment(100, 0);
+		propertySelectorFormData.left = new FormAttachment(0, 0);
+		propertySelectorFormData.right = new FormAttachment(30, 0);
+		propertySelector.setLayoutData(propertySelectorFormData);
+
+		// RemoveButton
+		final FormData removeButtonFormData = new FormData();
+		removeButtonFormData.bottom = new FormAttachment(100, 0);
+		removeButtonFormData.left = new FormAttachment(propertySelector, 0);
+		removeButtonFormData.right = new FormAttachment(60, 0);
+		removeButton.setLayoutData(removeButtonFormData);
+		
+		// AddReferenceButton
+		final FormData addReferenceButtonFormData = new FormData();
+		addReferenceButtonFormData.bottom = new FormAttachment(removeButton, 0);
+		addReferenceButtonFormData.left = new FormAttachment(removeButton, 0);
+		addReferenceButtonFormData.right = new FormAttachment(100, 0);
+		addReferenceButton.setLayoutData(addReferenceButtonFormData);
+		
+		// AddReferenceLabel
+		final FormData addReferenceLabelFormData = new FormData();
+		addReferenceLabelFormData.top = new FormAttachment(addReferenceButton, 0);
+		addReferenceLabelFormData.left = new FormAttachment(removeButton, 0);
+		addReferenceLabelFormData.right = new FormAttachment(100, 0);
+		addReferenceLabel.setLayoutData(addReferenceLabelFormData);
+
+		propertySelector
+				.addPropertySelectionListener(new PropertySelector.PropertySelectionListener() {
+
+					/**
+					 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionListener#propertySelected(org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent)
+					 */
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						selectedDecorator = propertySelectionEvent
+								.getDecorator();
+
+						selectedProperties = getPropertiesToDisplay(selectedDecorator);
+						selectedDynamicLabel = decoratorToLabelMap
+								.get(selectedDecorator);
+						switchToRVHP((RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+								.adapt(selectedDynamicLabel,
+										RelativeValueHistoryProvider.class));
+					}
+				});
+
+		removeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				fireRemoveEvent(identifiable);
+				remove();
+			}
+		});
+
+	} // createContents
+
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	@SuppressWarnings("cast")
+	public void remove() {
+		removeListeners.clear();
+		switchToRVHP(null);
+		relativeValueHistoryExtended(null);
+		identifiableTitle.setText("");
+		propertySelector
+				.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+		dispose();
+	}
+
+	/**
+	 * Setting the {@link Simulation} has the side-effect of causing the control
+	 * to remove itself as a listener from any previously set {@link Simulation}
+	 * and adding itself as a listener to the new one. It will also cause the
+	 * image to be initialized from the contents of the new {@link Simulation}
+	 * as appropriate.
+	 * 
+	 * @param simulation the simulation whose aggregate we will plot.
+	 */
+	public final void setSimulation(final ISimulation simulation) {
+		// Any need to switch?
+		if (this.simulation == simulation) {
+			// No
+			return;
+		} // if no need to switch?
+
+		// Should we remove ourselves as listeners from the current simulation?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.removeSimulationListenerSync(this);
+		}
+
+		this.simulation = simulation;
+
+		selection = null;
+		// Was there a new simulation to switch to?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.addSimulationListenerSync(this);
+			initializeFromSimulation(this.simulation);
+
+			// collect the set of relativeValueProviderAdapters from this
+			// simulation
+			// 1. get the nodes
+			Map<Node, Integer> nodeLevelsMap = getNodeLevels(simulation);
+
+			// 2. get the level to sum
+			int level = getHighestResolution(nodeLevelsMap);
+			
+			// 3. iterate over all the nodes at this level in the map and get a
+			// set of relative value providers
+			Iterator<Node> iter = getNodeIterator(level, nodeLevelsMap);
+			totalPopulation = 0.0;
+			while ((iter != null) && (iter.hasNext())) {
+				Node node = iter.next();
+				EList<NodeLabel> labels = node.getLabels();
+				for (int i = 0; i < labels.size(); ++i) {
+					NodeLabel label = labels.get(i);
+
+					if (label instanceof DynamicLabel) {
+						DynamicLabel dynamicLabel = (DynamicLabel) label;
+						final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+								.adapt(dynamicLabel,
+										RelativeValueProvider.class);
+						// Does the label have relative values?
+						if (rvp != null) {
+							// Yes
+							rvp.setTarget(dynamicLabel);
+							totalPopulation += rvp.getDenominator(null);
+							// remember this rvp to use for aggregation later
+							relativeValueProviderSet.add(rvp);
+
+							for (final Object element : rvp.getProperties()) {
+								final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+								allProperties.add(property);
+							} // for each property
+
+						}// if rvp !null
+
+					} // if dyanmicLabel
+				}// For each node label
+			} // while have nodes
+			
+			
+			if(totalPopulation <= 0.0) {
+				totalPopulation = 1.0;
+			}
+		} else {
+			// No
+			// Just display a blank screen
+			initializeFromSimulation(null);
+			relativeValueProviderSet.clear();
+			allProperties.clear();
+		}
+
+	} // setSimulation
+
+	
+	/**
+	 * @param identifiable
+	 *            the {@link Identifiable} to be the source of the data to be
+	 *            plotted.
+	 */
+	@Override
+	public void setIdentifiable(final Identifiable identifiable) {
+
+		//  do nothing. Aggregate values aggregate over a set of identifiables.
+		//  See simulationChangedSync
+	} // setIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener#relativeValueHistoryExtended(org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter)
+	 */
+	public void relativeValueHistoryExtended(
+			@SuppressWarnings("unused") final RelativeValueHistoryProviderAdapter rvhp) {
+		//not used
+	} // relativeValueHistoryExtended
+
+	/**
+	 * Initialize the control from a
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 *            whose state will be visualized in the control.
+	 */
+	@Override
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		graph = simulation.getScenario().getCanonicalGraph();
+		//timeProvider = (TimeProvider) TimeProviderAdapterFactory.INSTANCE.adapt(graph, TimeProvider.class);
+		timeCount = 0;
+		redraw();
+	} // initializeFromSimulation
+
+	/**
+	 * 
+	 */
+	@Override
+	public void refresh2() {
+		// nothing
+	} // refresh2
+	
+	/**
+	 * The number of properties to plot
+	 * @return the number of properties
+	 */
+	public int getNumProperties() {
+		return dataMap.keySet().size();
+	}
+
+	/**
+	 * TODO implement this
+	 * @param index 
+	 * @return the property to plot
+	 */
+	public String getProperty(int index) {
+		Object[] keys = dataMap.keySet().toArray();
+		Arrays.sort(keys);
+		return (String) keys[index];
+	}
+	
+	/**
+	 * TODO implement this
+	 * @param property 
+	 * @return the aggregate values to plot as an array of double
+	 */
+	public double[] getValues(String property) {
+		
+		List<Double> valList = dataMap.get(property);
+		double[] data = new double[timeCount];
+		for (int i = 0; i < timeCount; i ++) {
+			if ((valList!=null)&&(i < valList.size()) ){
+				data[i] = valList.get(i).doubleValue();
+				if(property.equalsIgnoreCase(REFERENCE_PROPERTY)) {	
+					data[i] /= totalPopulation;
+				}
+			} else {
+				// never add zero (need min nonzero value for log display)
+				data[i] = 1.0/totalPopulation;
+			}
+		}
+		return data;
+	}
+
+	
+	/**
+	 * @param decorator
+	 *            a {@link Decorator} that modifies the state of the canonical
+	 *            {@link Graph} in the
+	 *            {@link org.eclipse.stem.jobs.simulation.Simulation}.
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 * @return a {@link List} of the properties of the {@link Decorator} that
+	 *         can should be displayed.
+	 */
+	List<ItemPropertyDescriptor> getPropertiesToDisplay(
+			final Decorator decorator) {
+		final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+		// Got Decorator?
+		if (decorator != null) {
+			// Yes
+			// Are there any labels to update?
+			if (!decorator.getLabelsToUpdate().isEmpty()) {
+				// Yes
+				// The first one is good enough
+				retValue.addAll(propertySieve.sieve(decorator
+						.getLabelsToUpdate().get(0)));
+			} // if labels to update
+		} // if got decorator
+		return retValue;
+	} // getPropertiesToDisplay
+
+	/**
+	 * 
+	 * @param node
+	 * @return
+	 */
+	@SuppressWarnings("unused")
+	private Graph getGraph(final Node node) {
+		return (Graph) node.eContainer().eContainer();
+	} // getGraph
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListenerSync#simulationChangedSync(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChangedSync(final SimulationEvent event) {
+		// Data to log ?
+		
+		if (event.getSimulationState() == SimulationState.RUNNING) {
+			// The simulation just started. Make sure we have data. If not, reload again
+			if(this.selectedReferenceFile == null)
+				this.selectedReferenceFile = Activator.getDefault().getPreferenceStore().getString(MonitorPreferences.REFERENCE_FILE_KEY);
+			if(aggregateReference == null || aggregateReference.size() == 0) { 
+				try { 
+					AggregateReferenceFileLoader refLoader = new AggregateReferenceFileLoader(this.selectedReferenceFile);
+					aggregateReference = refLoader.getAggregateData();
+					dataMap.put(REFERENCE_PROPERTY, aggregateReference);
+					referenceIDs = refLoader.getIdSet();
+				} catch(Exception e) {
+					Activator.logError(e.getMessage(), e);
+				}
+			}
+//			if ((logWriter != null) && (logWriter.needsHeader)) {
+//				// This will write the headers and the first line of data before first cycle
+//				logWriter.logHeader(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider);
+//			}
+		} else if(event.getSimulationState() == SimulationState.COMPLETED_CYCLE) {
+			// cycle complete
+			sumData();
+			aggregateSeriesCanvas.draw();
+			redraw();
+			timeCount ++;
+		} else 
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			if(simulation==event.getSimulation()) {
+				activeSimulations.remove(simulation);
+				simulation.removeSimulationListener(this);
+				simulation.removeSimulationListenerSync(this);
+				simulation = null;
+				identifiableTitle.setText("");
+				propertySelector.setDecorators(Collections.EMPTY_LIST);
+				timeCount = 0;
+			}
+//			dispose();
+		} else if ((simulation == event.getSimulation())&&(event.getSimulationState() == SimulationState.RESET)) {
+			// Yes
+			aggregateSeriesCanvas.resetData();
+			timeCount = 0;
+		} // if
+
+	} // simulationChangedSync
+	
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	@SuppressWarnings("cast")
+	public void simulationChanged(final SimulationEvent event) {
+		if ((simulation == event.getSimulation())&&(event.getSimulationState() == SimulationState.RESET)) {
+			// Yes
+			aggregateSeriesCanvas.resetData();
+			timeCount = 0;
+		} // if
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			if(simulation==event.getSimulation()) {
+				activeSimulations.remove(simulation);
+				simulation.removeSimulationListener(this);
+				simulation.removeSimulationListenerSync(this);
+				simulation = null;
+				identifiableTitle.setText("");
+				propertySelector.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+				timeCount = 0;
+			}
+			
+		} // if
+		
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			if(simulation==event.getSimulation()) {
+				activeSimulations.remove(simulation);
+				simulation.removeSimulationListener(this);
+				simulation.removeSimulationListenerSync(this);
+				simulation = null;
+				identifiableTitle.setText("");
+				propertySelector.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+				timeCount = 0;
+			}
+			
+		} // if
+
+	} // simulationChanged
+
+
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (this.rvhp != null) {
+			// Yes
+			rvhp.removeExtensionListener(this);
+		} // if
+		if (simulation != null) {
+			// Yes
+			simulation.removeSimulationListener(this);
+		} // if
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		// This report control is linked to a simulation NOT to an identifiable
+		return null;
+	}
+
+	/**
+	 * This Control is associated with a Simulation
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getControlType()
+	 */
+	public String getControlType() {
+		return ReportControlFactory.SIMULATION_TYPE;
+	}
+	
+	
+
+	/**
+	 * Must implement this method to aggregate data in run thread
+	 * 
+	 */
+	public void sumData() {
+		
+		Iterator<ItemPropertyDescriptor> iter = allProperties.iterator();
+		while((iter!=null)&&(iter.hasNext())) {
+			ItemPropertyDescriptor property = iter.next();
+			String propertyKey = property.getDisplayName(property);
+			if(!dataMap.containsKey(propertyKey)) {
+				List<Double> newData = new ArrayList<Double>();
+				// just in case, populate the data list
+				for (int i = 0; i < timeCount; i ++) {
+					newData.add(i,new Double(0.0));
+				}
+				dataMap.put(propertyKey,newData);
+			}
+			
+			// now loop through all nodes and integrate the data for this property
+			double totPop = 0.0;
+			double sum = 0.0;
+			Iterator<RelativeValueProviderAdapter> iter2 = relativeValueProviderSet.iterator();
+			while((iter2 !=null) && (iter2.hasNext())) {
+				RelativeValueProviderAdapter rvp = iter2.next();
+				double nodePopulation = rvp.getDenominator(null);
+				totPop += nodePopulation;
+				sum += (nodePopulation * rvp.getRelativeValue(property));
+			}
+			if(totPop<= 0.0) totPop = 1.0; // avoid divide by zeros
+			totalPopulation = totPop;
+			aggregateSeriesCanvas.setMinYscale(1.0/totalPopulation);
+			sum /= totPop;
+			List<Double> aggregateList = dataMap.get(propertyKey);
+			// add the new data point
+			aggregateList.add(timeCount,new Double(sum));
+			dataMap.put(propertyKey, aggregateList);
+		}
+	}// sumdata
+	
+	
+	
+	/**
+	 * 
+	 * @param nodeLevels
+	 * @return highest resolution level in map
+	 */
+	private int getHighestResolution(Map<Node, Integer>nodeLevels) {
+		int retVal = -1;
+		Collection<Integer>vals = nodeLevels.values();
+		for(int level:vals) {
+			if(level >= retVal) retVal = level;
+		}
+		return retVal;
+	}
+	
+
+	
+	/*
+	 * Return all nodes at the same level
+	 */
+	@SuppressWarnings("boxing")
+	private Iterator<Node> getNodeIterator(int level, Map<Node, Integer>nodeLevels) {
+		ArrayList<Node> list = new ArrayList();
+		Set<Node>ns = nodeLevels.keySet();
+		for(Node n:ns) {
+			if(nodeLevels.get(n) == level) list.add(n);
+		}
+		return list.iterator();
+	}
+	
+	
+	
+	/**
+	 * Return all nodes and their corresponding level. We use this to log data using 
+	 * different resolutions.
+	 * 
+	 * @param simulation
+	 * @return Map with node and level
+	 */
+	@SuppressWarnings("boxing")
+	public Map<Node, Integer> getNodeLevels(ISimulation simulation) {
+		Map<Node, Integer> result = new HashMap<Node, Integer>();
+		final Graph graph = simulation.getScenario().getCanonicalGraph();
+		if (graph != null) {
+			final EMap<URI,Node> allNodes = graph.getNodes();
+			final Set<URI> allGraphURIs = allNodes.keySet();
+		    Iterator<URI> graphIter2 = allGraphURIs.iterator();
+		  
+		    while((graphIter2!=null)&&(graphIter2.hasNext())) {
+		    	URI uri = graphIter2.next();
+		    	Node node = allNodes.get(uri);
+		    	String id =  node.getURI().toString();
+		    	int level = getAdminLevel(id);
+		    	result.put(node, level);
+		    }
+		} // graph not null
+		return result;
+	}
+	
+
+	private int getAdminLevel(String uriKey) {
+		int retVal = 0;
+		String test = uriKey;
+		while(test.contains("-")) {
+			retVal ++;
+			int idx1 = test.indexOf("-");
+			String test2 = test.substring(idx1+1, test.length());
+			test = test2;
+		}
+		return retVal;
+	}
+	
+} // RelativeValueHistoryPlotter
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/IRemoveListener.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/IRemoveListener.java
new file mode 100644
index 0000000..37c8cd1
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/IRemoveListener.java
@@ -0,0 +1,29 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * When the remove button is pressed by the user
+ * @author James
+ *
+ */
+public interface IRemoveListener {
+	/**
+	 * 
+	 * @param identifiable
+	 */
+	void identifiableRemoved(Identifiable identifiable) ;
+	
+
+}
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/Messages.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/Messages.java
new file mode 100644
index 0000000..690b150
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.reports.views.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceCanvas.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceCanvas.java
new file mode 100644
index 0000000..8d62b5b
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceCanvas.java
@@ -0,0 +1,630 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.Marker;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.ScatterSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * TimeSeriesCanvas is a subclass of Canvas suitable for chart drawings.
+ */
+public class PhaseSpaceCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the <code>Chart</code> that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The provider of relative values.
+	 */
+	private RelativeValueHistoryProvider rvhp;
+
+	/**
+	 * This is the property of the label updated by the selected decorator whose
+	 * relative value will be plotted along X
+	 */
+	private ItemPropertyDescriptor propertyToPlotX;
+
+	/**
+	 * This is the property of the label updated by the selected decorator whose
+	 * relative value will be plotted along Y
+	 */
+	private ItemPropertyDescriptor propertyToPlotY;
+
+	/**
+	 * These are the values that will be plotted in X
+	 * 
+	 */
+	private final List<Double> relativeValuesX = new ArrayList<Double>();
+
+	/**
+	 * These are the values that will be plotted in Y
+	 * 
+	 */
+	private final List<Double> relativeValuesY = new ArrayList<Double>();
+	
+	/**
+	 * Log of zero is negative infinity so for each location we will cut off the minimum value
+	 * of log(y) or log(x) at 0.5/POPULATION for display purposes only
+	 */
+	private double minLogScaleValue = 1.0;
+
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+	
+	/**
+	 * The xAxis in the Phase Space Plot
+	 */
+	private Axis xAxisPrimary;
+	
+	/**
+	 * The yAxis in the Phase Space Plot
+	 */
+	private Axis yAxisPrimary;
+	
+	/**
+	 * default y axis label. This value is read from
+	 * messages.properties (NLS)
+	 */
+	private static String defaultAxisLabel_Y="Y Axis";
+	
+	/**
+	 * default x axis label. This value is read from
+	 * messages.properties (NLS)
+	 */
+	private static String defaultAxisLabel_X="X Axis";
+	
+	boolean useLinearScales = true;
+
+	private LinearScalesAction linearScalesAction;
+
+	private LogarithmicScalesAction logTimeScalesAction;
+
+	private String xAxisLabel;
+
+	private String yAxisLabel;
+	
+	Image imgChart = null;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param parent
+	 *            the SWT parent of the Widget
+	 */
+	public PhaseSpaceCanvas(final Composite parent) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		resetData();
+		cm = createPhaseSpaceLineChart(relativeValuesX, relativeValuesY,
+				Messages.getString("PH.title")); //$NON-NLS-1$
+
+		
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+
+			} // paintControl
+		} // PaintListener
+
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+
+	} // TimeSeriesCanvas
+
+	/**
+	 * The method which gets the TimeSeriesCanvas' reports list, and draws it on
+	 * the TimeSeriesCanvas.
+	 * 
+	 */
+	public void draw() {
+		// Has a relative value provider been provided?
+		if (rvhp != null) {
+			// Yes
+			
+			/////////////////////////////////////////////////////////////
+			// Log(0.0) is negative infinity so for display purposes only
+			// we set the minimum axis value at 0.5/POPULATION
+			double denom = rvhp.getDenominator(null);
+			if(denom <=0.0) denom = 1.0;
+			minLogScaleValue = 0.5/denom;
+			/////////////////////////////////////////////////////////////
+			
+			if(propertyToPlotX == null || propertyToPlotY==null) return;
+			// time
+			STEMTime[] time = rvhp.getAllHistoricTimeValues();
+			// Get the values for the property to be plotted
+			final double[] relativeValuesX = rvhp
+					.getHistoricInstances(propertyToPlotX,time);
+			final double[] relativeValuesY = rvhp
+					.getHistoricInstances(propertyToPlotY,time);
+			// Any values?
+			if ((relativeValuesX.length > 0) && ((relativeValuesY.length > 0))) {
+				// Yes
+				clearData();
+				for (int cycleNumber = 0; cycleNumber < relativeValuesX.length; cycleNumber++) {
+					Double valueX = null, valueY = null;
+					double displayValueX = relativeValuesX[cycleNumber];
+					double displayValueY = relativeValuesY[cycleNumber];
+					
+					if (displayValueX <= minLogScaleValue) {
+						// Log(0.0) is negative infinity so for display purposes only
+						// we set the minimum axis value at 0.5/POPULATION
+						displayValueX = minLogScaleValue;
+					}
+					
+					if (displayValueY <= minLogScaleValue) {
+						// Log(0.0) is negative infinity so for display purposes only
+						// we set the minimum axis value at 0.5/POPULATION
+						displayValueY = minLogScaleValue;
+					}
+					
+					
+					if (useLinearScales) {
+						valueX = new Double(displayValueX);
+						valueY = new Double(displayValueY);
+					}
+					else { 
+							valueX = new Double(Math.log(displayValueX));
+							valueY = new Double(Math.log(displayValueY));
+					}
+					this.relativeValuesX.add(valueX);
+					this.relativeValuesY.add(valueY);
+				} // for
+			} // if
+			else {
+				resetData();
+			}
+			if (!this.isDisposed()) redraw();
+		} // if a relative value provider has been provided
+
+	} // paintControl
+	
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	private void createContextMenu(final Composite parent) {
+
+		// Context Menu
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearScalesAction = new LinearScalesAction();
+		logTimeScalesAction = new LogarithmicScalesAction();
+		contextMenuManager.add(linearScalesAction);
+		contextMenuManager.add(logTimeScalesAction);
+		
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+
+	/**
+	 * @param relativeValuesX
+	 *            the <code>List</code> that will contain the relative X axis
+	 *            values (0.0-1.0) to plot
+	 * @param relativeValuesY
+	 *            that will contain the relative Y axis values (0.0-1.0) to plot
+	 * @param seriesIdentifier
+	 *            the title of the graph
+	 * @return a <code>Chart</code>
+	 */
+	@SuppressWarnings("deprecation")
+	public final Chart createPhaseSpaceLineChart(
+			final List<Double> relativeValuesX,
+			final List<Double> relativeValuesY, final String seriesIdentifier) {
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+        // get the NLS default labels
+		defaultAxisLabel_X = Messages.getString("XAXISDEF.title");
+		defaultAxisLabel_Y = Messages.getString("YAXISDEF.title");
+		// Plot
+		retValue.getBlock().setBackground(ColorDefinitionImpl.WHITE());
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(
+				ColorDefinitionImpl.create(255, 255, 225));
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		final Legend lg = retValue.getLegend();
+		lg.setVisible(false);
+		/*
+		final LineAttributes lia = lg.getOutline();
+		lg.getText().getFont().setSize(8);
+		lia.setStyle(LineStyle.SOLID_LITERAL);
+		lg.getInsets().set(10, 5, 0, 0);
+		lg.getOutline().setVisible(false);
+		lg.setAnchor(Anchor.NORTH_LITERAL);
+		lg.setPosition(Position.BELOW_LITERAL);
+		*/
+		// cwaLine.getLegend( ).getText().getFont().setSize(16);;
+		// cwaLine.getLegend( ).setVisible( true );
+
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+		// Y-Axis
+		yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+
+		// xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+
+
+		xAxisPrimary.getTitle( ).getCaption( ).getFont( ).setSize( 8 );
+		xAxisLabel = defaultAxisLabel_X;
+		if (propertyToPlotX!= null) {
+			xAxisLabel = this.propertyToPlotX.getDisplayName(propertyToPlotX);
+		}
+		xAxisPrimary.getTitle( ).getCaption( ).setValue( xAxisLabel );
+		xAxisPrimary.getTitle( ).setVisible(true);
+		
+
+		yAxisPrimary.getTitle( ).getCaption( ).getFont( ).setSize( 8 );
+		yAxisLabel = defaultAxisLabel_Y;
+		if (propertyToPlotY!= null) {
+			yAxisLabel = this.propertyToPlotY.getDisplayName(propertyToPlotY);
+		}
+		yAxisPrimary.getTitle( ).getCaption( ).setValue( yAxisLabel );
+		yAxisPrimary.getTitle( ).setVisible(true);
+
+		final NumberDataSet orthoValuesX = NumberDataSetImpl
+				.create(relativeValuesX);
+		final NumberDataSet orthoValuesY = NumberDataSetImpl
+				.create(relativeValuesY);
+
+		// X-Series
+		final Series lsx = SeriesImpl.create();
+		// final LineSeries lsx = (ScatterSeries) ScatterSeriesImpl.create();
+		// seCategory.setDataSet(orthoValuesX);
+		lsx.setDataSet(orthoValuesX);
+
+		// Y-Series
+		final ScatterSeries lsy = (ScatterSeries) ScatterSeriesImpl.create();
+		lsy.setDataSet(orthoValuesY);
+		lsy.getLineAttributes().setVisible(true);
+		lsy.getLineAttributes().setColor(ColorDefinitionImpl.BLUE());
+		lsy.setSeriesIdentifier(seriesIdentifier);
+		
+		//lsy.getMarker().setVisible(false);
+		// replaces deprecated code: lineSeries.getMarker().setVisible(false);
+		if (!lsy.getMarkers().isEmpty()) {
+			Marker marker = lsy.getMarkers().get(0);
+			marker.setVisible(false);
+		}
+		
+		final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+		final SeriesDefinition sdY = SeriesDefinitionImpl.create();
+
+		sdY.getSeriesPalette().update(-2);
+
+		xAxisPrimary.getSeriesDefinitions().add(sdX);
+		yAxisPrimary.getSeriesDefinitions().add(sdY);
+
+		// sdX.getSeries().add(seCategory);
+		sdX.getSeries().add(lsx);
+		sdY.getSeries().add(lsy);
+
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		xAxisPrimary.getScale().setStep(0.25);
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.25);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+
+		return retValue;
+	} // createPhaseSpaceLineChart
+
+	/**
+	 * @param rvhp
+	 * @param propertyToPlotX
+	 * @param propertyToPlotY
+	 */
+	public void setDataSourceAndRedraw(
+			final RelativeValueHistoryProviderAdapter rvhp,
+			final ItemPropertyDescriptor propertyToPlotX,
+			final ItemPropertyDescriptor propertyToPlotY) {
+		this.rvhp = rvhp;
+		this.propertyToPlotX = propertyToPlotX;
+		this.propertyToPlotY = propertyToPlotY;
+		
+		xAxisLabel = defaultAxisLabel_X;
+		if (propertyToPlotX!= null) {
+			xAxisLabel = this.propertyToPlotX.getDisplayName(propertyToPlotX);
+			if(!useLinearScales) xAxisLabel = "Log("+xAxisLabel+")";
+		}
+		xAxisPrimary.getTitle( ).getCaption( ).setValue( xAxisLabel );
+		xAxisPrimary.getTitle( ).setVisible(true);
+			
+		yAxisPrimary.getTitle( ).getCaption( ).getFont( ).setSize( 8 );
+		yAxisLabel = defaultAxisLabel_Y;
+		if (propertyToPlotY!= null) {
+			yAxisLabel = this.propertyToPlotY.getDisplayName(propertyToPlotY);
+			if(!useLinearScales) yAxisLabel = "Log("+yAxisLabel+")";
+		}
+		yAxisPrimary.getTitle( ).getCaption( ).setValue( yAxisLabel );
+		yAxisPrimary.getTitle( ).setVisible(true);
+		
+		draw();
+	} // setDataSourceAndRedraw
+
+	/**
+	 * Set the provider of relative values. It will be consulted to produce a
+	 * sequence of relative values (0.0 to 1.0) that will be plotted.
+	 * 
+	 * @param rvhp
+	 *            the provider of relative values.
+	 */
+	public void setRelativeValueHistoryProvider(
+			final RelativeValueHistoryProvider rvhp) {
+		this.rvhp = rvhp;
+	} // setRelativeValueHistoryProvider
+
+	/**
+	 * @return the propertyToPlotX
+	 */
+	public final ItemPropertyDescriptor getPropertyToPlotX() {
+		return propertyToPlotX;
+	}
+
+	/**
+	 * @return the propertyToPlotY
+	 */
+	public final ItemPropertyDescriptor getPropertyToPlotY() {
+		return propertyToPlotY;
+	}
+
+	/**
+	 * @param propertyToPlotX
+	 *            the propertyToPlotX to set
+	 */
+	public final void setPropertyToPlotX(
+			final ItemPropertyDescriptor propertyToPlotX) {
+		this.propertyToPlotX = propertyToPlotX;
+	}
+
+	/**
+	 * @param propertyToPlotY
+	 *            the propertyToPlotY to set
+	 */
+	public final void setPropertyToPlotY(
+			final ItemPropertyDescriptor propertyToPlotY) {
+		this.propertyToPlotY = propertyToPlotY;
+	}
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		rvhp = null;
+		redraw();
+	}
+
+	protected void resetData() {
+		clearData();
+		relativeValuesX.add(new Double(1.0));
+		relativeValuesY.add(new Double(0.0));
+	}
+
+	private void clearData() {
+		relativeValuesX.clear();
+		relativeValuesY.clear();
+	}
+	
+	void toggleScales() {
+		if (useLinearScales) { //Switch to logarithmic scale
+			logTimeScalesAction.setChecked(true);
+			linearScalesAction.setChecked(false);
+			
+			xAxisPrimary.getScale().setMin(null);
+			xAxisPrimary.getScale().setMax(null);
+			xAxisPrimary.getScale().unsetStep();
+			xAxisPrimary.getScale().unsetStepNumber();			
+			xAxisPrimary.getTitle().getCaption().setValue("Log(" + xAxisLabel + ")");			
+			
+			yAxisPrimary.getScale().setMin(null);
+			yAxisPrimary.getScale().setMax(null);
+			yAxisPrimary.getScale().unsetStep();
+			yAxisPrimary.getScale().unsetStepNumber();
+			yAxisPrimary.getTitle().getCaption().setValue("Log(" + yAxisLabel + ")");
+		}
+		else { //Switch to linear scale			
+			logTimeScalesAction.setChecked(false);
+			linearScalesAction.setChecked(true);
+			
+			xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+			xAxisPrimary.getScale().setStep(0.25);
+			xAxisPrimary.getTitle().getCaption().setValue(xAxisLabel);
+
+			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+			yAxisPrimary.getScale().setStep(0.25);
+			yAxisPrimary.getTitle().getCaption().setValue(yAxisLabel);			
+		}		
+		useLinearScales = !useLinearScales;
+		redraw();
+	}
+	
+	protected class LinearScalesAction extends Action
+	{
+		public LinearScalesAction()
+		{
+			super(Messages.getString("ContextMenu.LinearScaling"), IAction.AS_CHECK_BOX);
+			setChecked(useLinearScales);
+		}
+		
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {			
+			return Messages.getString("ContextMenu.LinearScaling");
+		}
+		
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (useLinearScales) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleScales();
+			}
+		}
+	}
+	
+	class LogarithmicScalesAction extends Action
+	{
+		public LogarithmicScalesAction()
+		{
+			super(Messages.getString("ContextMenu.LogScaling"), IAction.AS_CHECK_BOX);
+			setChecked(!useLinearScales);
+		}
+		
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {			
+			return Messages.getString("ContextMenu.LogScaling");
+		}
+		
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!useLinearScales) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleScales();
+			}
+		}
+	}
+} // PhaseSpaceCanvas
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceFactory.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceFactory.java
new file mode 100644
index 0000000..0754c8c
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceFactory.java
@@ -0,0 +1,55 @@
+// PhaseSpaceFactory.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link ReportControl} instances.
+ */
+public class PhaseSpaceFactory implements ReportControlFactory {
+
+	static PhaseSpaceFactory INSTANCE = new PhaseSpaceFactory();
+
+	/**
+	 * Constants for saving ReportViewPreferences
+	 */
+	public static final String PHASE_SPACE_TYPE = "PhaseSpace";
+
+	/**
+	 * @param parent
+	 *            the parent of the {@link PhaseSpaceHistoryPlotter}
+	 * @return a {@link PhaseSpaceHistoryPlotter}
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicControlFactory#create(org.eclipse.swt.widgets.Composite)
+	 */
+	public ReportControl create(final Composite parent) {
+		return new PhaseSpaceHistoryPlotter(parent);
+	}
+
+	/**
+	 * @return TODO JFK
+	 * 
+	 */
+	public String getUniqueControlName() {
+		return PHASE_SPACE_TYPE;
+	}
+	
+	/**
+	 * This Factory creates a control associated with an Idenfiable
+	 * @return type of factory
+	 */
+	public String getFactoryType() {
+		return IDENTIFABLE_TYPE;
+	}
+
+} // PhaseSpaceFactory
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceHistoryPlotter.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceHistoryPlotter.java
new file mode 100644
index 0000000..9a0c67c
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceHistoryPlotter.java
@@ -0,0 +1,400 @@
+// RelativeValueHistoryPlotter.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.ui.preferences.PreferenceConstants;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.stem.ui.widgets.PropertySelector;
+import org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class represents
+ */
+public class PhaseSpaceHistoryPlotter extends ReportControl implements
+		RelativeValueHistoryExtendedListener, ISimulationListener {
+
+	PhaseSpaceCanvas phaseSpaceCanvas;
+	PropertySelector propertySelectorX;
+	PropertySelector propertySelectorY;
+
+	ItemPropertyDescriptor selectedProperty1;
+	ItemPropertyDescriptor selectedProperty2;
+
+	private static final String X_AXIS_LABEL = "X Axis";
+
+	private static final String Y_AXIS_LABEL = "Y Axis";
+
+	/**
+	 * @param parent
+	 */
+	public PhaseSpaceHistoryPlotter(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // RelativeValueHistoryPlotter
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	private void createContents() {
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		phaseSpaceCanvas = new PhaseSpaceCanvas(this);
+		propertySelectorX = new PropertySelector(this, SWT.NONE, true);
+		propertySelectorX.setDisplayLabel(X_AXIS_LABEL);
+		propertySelectorY = new PropertySelector(this, SWT.NONE, true);
+		propertySelectorY.setDisplayLabel(Y_AXIS_LABEL);
+
+		removeButton = new Button(this, SWT.NONE);
+		removeButton.setText(REMOVE_TEXT);
+
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		final FormData chartFormData = new FormData();
+		phaseSpaceCanvas.setLayoutData(chartFormData);
+		chartFormData.top = new FormAttachment(identifiableTitle, 0);
+		chartFormData.bottom = new FormAttachment(propertySelectorY, 0);
+		chartFormData.left = new FormAttachment(0, 0);
+		chartFormData.right = new FormAttachment(100, 0);
+
+		// Property Selector
+		final FormData propertySelectorFormDataY = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(timeSeriesCanvas,
+		// 0);
+		propertySelectorFormDataY.bottom = new FormAttachment(100, 0);
+		propertySelectorFormDataY.left = new FormAttachment(0, 0);
+		propertySelectorFormDataY.right = new FormAttachment(30, 0);
+		propertySelectorY.setLayoutData(propertySelectorFormDataY);
+
+		// Property Selector
+		final FormData propertySelectorFormDataX = new FormData();
+		// propertySelectorFormDataX.top = new FormAttachment(propertySelectorY,
+		// 0);
+		propertySelectorFormDataX.bottom = new FormAttachment(100, 0);
+		propertySelectorFormDataX.left = new FormAttachment(propertySelectorY,
+				0);
+		propertySelectorFormDataX.right = new FormAttachment(60, 0);
+		propertySelectorX.setLayoutData(propertySelectorFormDataX);
+
+		// RemoveButton
+		final FormData removeButtonFormData = new FormData();
+		// propertySelectorFormDataX.top = new FormAttachment(propertySelectorY,
+		// 0);
+		removeButtonFormData.bottom = new FormAttachment(100, 0);
+		removeButtonFormData.left = new FormAttachment(propertySelectorX, 0);
+		removeButtonFormData.right = new FormAttachment(90, 0);
+		removeButton.setLayoutData(removeButtonFormData);
+
+		final PhaseSpaceHistoryPlotter self = this;
+		
+		// X listener
+		propertySelectorX
+				.addPropertySelectionListener(new PropertySelector.PropertySelectionListener() {
+
+					/**
+					 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionListener#propertySelected(org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent)
+					 */
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						selectedDecorator = propertySelectionEvent
+								.getDecorator();
+
+						// get the X property from the event
+						selectedProperty2 = propertySelectionEvent
+								.getProperty();
+
+						selectedDynamicLabel = decoratorToLabelMap
+								.get(selectedDecorator);
+						RelativeValueHistoryProviderAdapter rhvp = (RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+						.adapt(selectedDynamicLabel,
+								RelativeValueHistoryProvider.class);
+						switchToRVHP(rhvp);
+						self.phaseSpaceCanvas.setDataSourceAndRedraw(rhvp, selectedProperty2, selectedProperty1);
+					}
+				});
+
+		// Y listener
+		propertySelectorY
+				.addPropertySelectionListener(new PropertySelector.PropertySelectionListener() {
+
+					/**
+					 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionListener#propertySelected(org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent)
+					 */
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						selectedDecorator = propertySelectionEvent
+								.getDecorator();
+
+						// get the Y property from the event
+						selectedProperty1 = propertySelectionEvent
+								.getProperty();
+
+						selectedDynamicLabel = decoratorToLabelMap
+								.get(selectedDecorator);
+						RelativeValueHistoryProviderAdapter rhvp = (RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+						.adapt(selectedDynamicLabel,
+								RelativeValueHistoryProvider.class);
+						switchToRVHP(rhvp);
+						self.phaseSpaceCanvas.setDataSourceAndRedraw(rhvp, selectedProperty2, selectedProperty1);
+					}
+				});
+
+		removeButton.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+
+				fireRemoveEvent(identifiable);
+				remove();
+			}
+		});
+
+	} // createContents
+
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	@SuppressWarnings("cast")
+	public void remove() {
+		removeListeners.clear();
+		switchToRVHP(null);
+		relativeValueHistoryExtended(null);
+		identifiableTitle.setText("");
+		propertySelectorX
+				.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+		propertySelectorY
+				.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+		dispose();
+	}
+
+	/**
+	 * @param identifiable
+	 *            the {@link Identifiable} to be the source of the data to be
+	 *            plotted.
+	 */
+	@Override
+	public void setIdentifiable(final Identifiable identifiable) {
+
+		// Same Identifiable?
+		if (this.identifiable == identifiable) {
+			// Yes
+			return;
+		} // if
+
+		this.identifiable = identifiable;
+
+		final List<Decorator> decorators = new ArrayList<Decorator>();
+		decoratorToLabelMap = new HashMap<Decorator, DynamicLabel>();
+
+		identifiableTitle.setText(identifiable.getDublinCore().getTitle());
+		// Get the dynamic labels associated with this Identifiable
+		// A node?
+		if (identifiable instanceof Node) {
+			// Yes
+			final Node node = (Node) identifiable;
+			for (final NodeLabel nodeLabel : node.getLabels()) {
+				// Updated by a decorator?
+				if (nodeLabel instanceof DynamicNodeLabel) {
+					// Yes
+					final DynamicNodeLabel dynamicNodeLabel = (DynamicNodeLabel) nodeLabel;
+					// Can it provide relative values?
+					final RelativeValueHistoryProviderAdapter rvhp = (RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+							.adapt(nodeLabel,
+									RelativeValueHistoryProvider.class);
+					if (rvhp != null) {
+						// Yes
+						final Decorator decorator = dynamicNodeLabel
+								.getDecorator();
+						if (decorator != null) {
+							decoratorToLabelMap
+									.put(decorator, dynamicNodeLabel);
+							decorators.add(decorator);
+						} else {
+							Activator.logError("DynamicLabel \""
+									+ dynamicNodeLabel.getDublinCore()
+											.getTitle()
+									+ "\" does not have a Decorator", null);
+						}
+
+					} // if RelativeValueHistoryProviderAdapter
+				} // if DynamicNodeLabel
+			} // for each NodeLabel
+		} // if Node
+
+		// new node... update the decorators
+		propertySelectorX.setDecorators(decorators);
+		propertySelectorY.setDecorators(decorators);
+
+		try {
+			// try to set the displayed decorator by the users ui label
+			// preferences
+			final Preferences preferences = org.eclipse.stem.ui.Activator
+					.getDefault().getPluginPreferences();
+			final String yPreference = preferences
+					.getString(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE);
+			final String xPreference = preferences
+					.getString(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE2);
+
+			// we do not care about the return value, it's ok if the preference
+			// is not there.
+			propertySelectorY.setDisplayedProperty(yPreference);
+			propertySelectorX.setDisplayedProperty(xPreference);
+
+		} catch (final Exception e) {
+			// if it fails do nothing
+		}
+
+	} // setIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener#relativeValueHistoryExtended(org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter)
+	 */
+	public void relativeValueHistoryExtended(
+			final RelativeValueHistoryProviderAdapter rvhp) {
+		// The event notification doesn't come from the UI thread so we need to
+		// add a Runnable to the UI thread's execution queue to give the new
+		// source to the chart
+		final Display display = Display.getDefault();
+		if (!display.isDisposed()) {
+			// Yes
+			try {
+				display.asyncExec(new Runnable() {
+					public void run() {
+						phaseSpaceCanvas.setDataSourceAndRedraw(rvhp,
+								selectedProperty2, selectedProperty1);
+					} // run
+				}); // display.asyncExec
+			} // try
+			catch (final Exception e) {
+				// Ignore there could be a race condition with the display being
+				// disposed when the system is shut down with a running
+				// simulation.
+			} // catch Exception
+		} // if
+	}// relativeValueHistoryExtended
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	@SuppressWarnings("cast")
+	public void simulationChanged(final SimulationEvent event) {
+		// reset event
+		if (event.getSimulationState() == SimulationState.RESET) {
+			// Yes
+			phaseSpaceCanvas.resetData();
+		} // if
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			simulation.removeSimulationListener(this);
+			simulation = null;
+			switchToRVHP(null);
+			relativeValueHistoryExtended(null);
+			identifiableTitle.setText("");
+			propertySelectorX
+					.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+			propertySelectorY
+					.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+
+		} // if
+	} // simulationChanged
+
+	/**
+	 * Initialize the control from a
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 *            whose state will be visualized in the control.
+	 */
+	@Override
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		simulationNameLabel.setText(simulation.getName());
+		propertySelectorX.setSimulation(simulation);
+		propertySelectorY.setSimulation(simulation);
+	} // initializeFromSimulation
+
+	/**
+	 * 
+	 */
+	@Override
+	public void refresh2() {
+		// nothing
+	} // refresh2
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (this.rvhp != null) {
+			// Yes
+			rvhp.removeExtensionListener(this);
+		} // if
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return identifiable;
+	}
+
+	/**
+	 * This Control is associated with an Identifiable
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getControlType()
+	 */
+	public String getControlType() {
+		return ReportControlFactory.IDENTIFABLE_TYPE;
+	}
+	
+} // RelativeValueHistoryPlotter
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceView.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceView.java
new file mode 100644
index 0000000..1f65cc4
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/PhaseSpaceView.java
@@ -0,0 +1,151 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.ui.views.geographic.map.SelectedReportsManager;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view contains BIRT output that plots values of variables in STEM
+ * simulations.
+ */
+
+public class PhaseSpaceView extends ViewPart implements ISelectionListener {
+
+	/**
+	 * The identifier of the Phase Space View
+	 */
+	public static final String ID_PHASE_SPACE_VIEW = "org.eclipse.stem.ui.reports.views.PhaseSpace"; //$NON-NLS-1$
+
+	private List<Identifiable> selectedIdentifiables = null;
+
+	/**
+	 * This is the decorator that has been selected by the combo box.
+	 */
+	protected Decorator selectedDecorator;
+
+	/**
+	 * This is the combo box that displays the Decorators that can be selected
+	 */
+	protected Combo decoratorCombo;
+
+	/**
+	 * This is the combo box that displays the X axis properties of the selected
+	 * Decorator
+	 */
+	protected Combo propertiesComboX;
+
+	/**
+	 * This is the combo box that displays the Y axis properties of the selected
+	 * Decorator
+	 */
+	protected Combo propertiesComboY;
+
+	private ReportViewer reportViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		// phaseSpaceHistoryPlotter = new PhaseSpaceHistoryPlotter(parent);
+
+		reportViewer = new ReportViewer(parent, PhaseSpaceFactory.INSTANCE);
+		reportViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(reportViewer);
+
+		// Register with the SelectionService
+		getSite().getWorkbenchWindow().getSelectionService()
+				.addSelectionListener(this);
+
+	} // createPartControl
+
+	/**
+	 * This method is called whenever ANYTHING is selected in the Eclipse
+	 * workbench. It's job is to filter out selections of ISimulation instances
+	 * and update the chart in the TimeSeriesCanvas
+	 * 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(final IWorkbenchPart part,
+			final ISelection selection) {
+
+		// Is this selection changed event coming from our view?
+		if (part != PhaseSpaceView.this) {
+			// No
+			if (selectedIdentifiables == null) {
+				// Yes
+				selectedIdentifiables = new ArrayList<Identifiable>();
+			} // if
+			selectedIdentifiables.clear();
+
+			// Is it a structured selection?
+			if (selection instanceof IStructuredSelection) {
+				// Yes
+				final List list = ((IStructuredSelection) selection).toList();
+
+				// Go through everything in the list of things that were
+				// selected and pick out the ones that are ISimulations.
+				for (final Iterator selectionIter = list.iterator(); selectionIter
+						.hasNext();) {
+					final Object obj = selectionIter.next();
+
+					if (obj instanceof Identifiable) {
+						// Make sure that the report is indeed enabled in the context menu						
+						if (SelectedReportsManager.getInstance().isReportEnabled(PhaseSpaceFactory.PHASE_SPACE_TYPE)) {
+							reportViewer.addMonitor((Identifiable)obj);
+						}
+					} // if
+				} // for each selected item
+			} // if structured selection
+
+		} // if selection changed event coming from our view?
+	} // selectionChanged
+
+	
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		getSite().getWorkbenchWindow().getSelectionService()
+				.removeSelectionListener(this);
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // PhaseSpaceView
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/RelativeValueHistoryPlotter.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/RelativeValueHistoryPlotter.java
new file mode 100644
index 0000000..4e25914
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/RelativeValueHistoryPlotter.java
@@ -0,0 +1,419 @@
+// RelativeValueHistoryPlotter.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.ui.widgets.PropertySelector;
+import org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class is a SWT GUI component that uses BIRT to plot
+ */
+public class RelativeValueHistoryPlotter extends ReportControl implements
+		RelativeValueHistoryExtendedListener, ISimulationListener {
+
+	TimeSeriesCanvas timeSeriesCanvas;
+	PropertySelector propertySelector;
+	List<ItemPropertyDescriptor> selectedProperties;
+
+	/**
+	 * This interface is implemented by classes that select out the properties
+	 * to be displayed.
+	 */
+	public interface PropertySieve {
+		/**
+		 * @param dynamicLabel
+		 *            the label that contains the candidate properties to be
+		 *            displayed.
+		 * @return a <code>List</code> of the properties that should be
+		 *         displayed in the order that they should be displayed.
+		 */
+		List<ItemPropertyDescriptor> sieve(final DynamicLabel dynamicLabel);
+	} // PropertySieve
+
+	/**
+	 * This sieve selects all of those properties that have relative values.
+	 */
+	private final PropertySieve propertySieve = new PropertySieve() {
+		/**
+		 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySieve#sieve(org.eclipse.stem.core.graph.DynamicLabel)
+		 */
+		public List<ItemPropertyDescriptor> sieve(
+				final DynamicLabel dynamicLabel) {
+			final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dynamicLabel, RelativeValueProvider.class);
+
+			// Does the label have relative values?
+			if (rvp != null) {
+				// Yes
+				rvp.setTarget(dynamicLabel);
+
+				for (final Object element : rvp.getProperties()) {
+					final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+					retValue.add(property);
+				} // for each property
+			} // if the label has relative values
+			return retValue;
+		} // sieve
+	};
+
+	/**
+	 * @param parent
+	 */
+	public RelativeValueHistoryPlotter(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // RelativeValueHistoryPlotter
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	private void createContents() {
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		timeSeriesCanvas = new TimeSeriesCanvas(this);
+		propertySelector = new PropertySelector(this, SWT.NONE, false);
+
+		removeButton = new Button(this, SWT.NONE);
+		removeButton.setText(REMOVE_TEXT);
+
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		final FormData chartFormData = new FormData();
+		timeSeriesCanvas.setLayoutData(chartFormData);
+		chartFormData.top = new FormAttachment(identifiableTitle, 0);
+		chartFormData.bottom = new FormAttachment(propertySelector, 0);
+		chartFormData.left = new FormAttachment(0, 0);
+		chartFormData.right = new FormAttachment(100, 0);
+
+		// Property Selector
+		final FormData propertySelectorFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(timeSeriesCanvas,
+		// 0);
+		propertySelectorFormData.bottom = new FormAttachment(100, 0);
+		propertySelectorFormData.left = new FormAttachment(0, 0);
+		propertySelectorFormData.right = new FormAttachment(30, 0);
+		propertySelector.setLayoutData(propertySelectorFormData);
+
+		// RemoveButton
+		final FormData removeButtonFormData = new FormData();
+		// propertySelectorFormDataX.top = new FormAttachment(propertySelectorY,
+		// 0);
+		removeButtonFormData.bottom = new FormAttachment(100, 0);
+		removeButtonFormData.left = new FormAttachment(propertySelector, 0);
+		removeButtonFormData.right = new FormAttachment(60, 0);
+		removeButton.setLayoutData(removeButtonFormData);
+
+		propertySelector
+				.addPropertySelectionListener(new PropertySelector.PropertySelectionListener() {
+
+					/**
+					 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionListener#propertySelected(org.eclipse.stem.ui.widgets.PropertySelector.PropertySelectionEvent)
+					 */
+					public void propertySelected(
+							final PropertySelectionEvent propertySelectionEvent) {
+						selectedDecorator = propertySelectionEvent
+								.getDecorator();
+
+						selectedProperties = getPropertiesToDisplay(selectedDecorator);
+						selectedDynamicLabel = decoratorToLabelMap
+								.get(selectedDecorator);
+						switchToRVHP((RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+								.adapt(selectedDynamicLabel,
+										RelativeValueHistoryProvider.class));
+					}
+				});
+
+		removeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				fireRemoveEvent(identifiable);
+				remove();
+			}
+		});
+
+	} // createContents
+
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	@SuppressWarnings("cast")
+	public void remove() {
+		removeListeners.clear();
+		switchToRVHP(null);
+		relativeValueHistoryExtended(null);
+		identifiableTitle.setText("");
+		propertySelector
+				.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+		dispose();
+	}
+
+	/**
+	 * @param identifiable
+	 *            the {@link Identifiable} to be the source of the data to be
+	 *            plotted.
+	 */
+	@Override
+	public void setIdentifiable(final Identifiable identifiable) {
+
+		// Same Identifiable?
+		if (this.identifiable == identifiable) {
+			// Yes
+			return;
+		} // if
+
+		this.identifiable = identifiable;
+
+		final List<Decorator> decorators = new ArrayList<Decorator>();
+		decoratorToLabelMap = new HashMap<Decorator, DynamicLabel>();
+
+		identifiableTitle.setText(identifiable.getDublinCore().getTitle());
+		// Get the dynamic labels associated with this Identifiable
+		// A node?
+		if (identifiable instanceof Node) {
+			// Yes
+			final Node node = (Node) identifiable;
+			for (final NodeLabel nodeLabel : node.getLabels()) {
+				// Updated by a decorator?
+				if (nodeLabel instanceof DynamicNodeLabel) {
+					// Yes
+					final DynamicNodeLabel dynamicNodeLabel = (DynamicNodeLabel) nodeLabel;
+					// Can it provide relative values?
+					final RelativeValueHistoryProviderAdapter rvhp = (RelativeValueHistoryProviderAdapter) RelativeValueHistoryProviderAdapterFactory.INSTANCE
+							.adapt(nodeLabel,
+									RelativeValueHistoryProvider.class);
+					if (rvhp != null) {
+						// Yes
+						final Decorator decorator = dynamicNodeLabel
+								.getDecorator();
+						if(decorator != null) {
+							decoratorToLabelMap.put(decorator, dynamicNodeLabel);
+							decorators.add(decorator);
+						}
+					} // if
+				} // if DynamicNodeLabel
+			} // for each NodeLabel
+
+			// Are there any Decorators that we'll plot?
+			if (decorators.size() > 0) {
+				// Yes
+				// We need to listen to the life-cycle of the Simulation
+				// associated with the Graph that contains the Identifable that
+				// was passed in. When it disappears, we need to "un-hook"
+				// ourselves from the RelativeValueHistoryProviderAdapter
+				// instance so that the Graph that it is attached to can be
+				// garbage collected and we need to reset ourselves so that we
+				// don't display a plot for a Simulation that doesn't exist any
+				// more.
+				final ISimulation newSimulation = SimulationManager
+						.getManager().mapGraphToSimulation(getGraph(node));
+
+				// Stop listening to the old one?
+				if (simulation != null) {
+					// Yes
+					simulation.removeSimulationListener(this);
+				} // if
+				simulation = newSimulation;
+
+				// Listen to the new one?
+				if (simulation != null) {
+					// Yes
+					simulation.addSimulationListener(this);
+				} // if
+			} // if any Decorators to plot
+
+		} // if Node
+		propertySelector.setDecorators(decorators);
+	} // setIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener#relativeValueHistoryExtended(org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter)
+	 */
+	public void relativeValueHistoryExtended(
+			final RelativeValueHistoryProviderAdapter rvhp) {
+		// The event notification doesn't come from the UI thread so we need to
+		// add a Runnable to the UI thread's execution queue to give the new
+		// source to the chart
+		final Display display = Display.getDefault();
+		if (!display.isDisposed()) {
+			// Yes
+			try {
+				display.asyncExec(new Runnable() {
+					public void run() {
+						if (!timeSeriesCanvas.isDisposed()) {
+							timeSeriesCanvas.setDataSourceAndRedraw(rvhp,
+									selectedProperties);
+						}
+					} // run
+				}); // display.asyncExec
+			} // try
+			catch (final Exception e) {
+				// Ignore there could be a race condition with the display being
+				// disposed when the system is shut down with a running
+				// simulation.
+			} // catch Exception
+		} // if
+	} // relativeValueHistoryExtended
+
+	/**
+	 * Initialize the control from a
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 *            whose state will be visualized in the control.
+	 */
+	@Override
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		simulationNameLabel.setText(simulation.getName());
+		propertySelector.setSimulation(simulation);
+
+	} // initializeFromSimulation
+
+	/**
+	 * 
+	 */
+	@Override
+	public void refresh2() {
+		// nothing
+	} // refresh2
+
+	/**
+	 * @param decorator
+	 *            a {@link Decorator} that modifies the state of the canonical
+	 *            {@link Graph} in the
+	 *            {@link org.eclipse.stem.jobs.simulation.Simulation}.
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 * @return a {@link List} of the properties of the {@link Decorator} that
+	 *         can should be displayed.
+	 */
+	List<ItemPropertyDescriptor> getPropertiesToDisplay(
+			final Decorator decorator) {
+		final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+		// Got Decorator?
+		if (decorator != null) {
+			// Yes
+			// Are there any labels to update?
+			if (!decorator.getLabelsToUpdate().isEmpty()) {
+				// Yes
+				// The first one is good enough
+				retValue.addAll(propertySieve.sieve(decorator
+						.getLabelsToUpdate().get(0)));
+			} // if labels to update
+		} // if got decorator
+		return retValue;
+	} // getPropertiesToDisplay
+
+	private Graph getGraph(final Node node) {
+		return (Graph) node.eContainer().eContainer();
+	} // getGraph
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	@SuppressWarnings("cast")
+	public void simulationChanged(final SimulationEvent event) {
+		if (event.getSimulationState() == SimulationState.RESET) {
+			// Yes
+			timeSeriesCanvas.resetData();
+		} // if
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			simulation.removeSimulationListener(this);
+			simulation = null;
+			switchToRVHP(null);
+			relativeValueHistoryExtended(null);
+			identifiableTitle.setText("");
+			propertySelector
+					.setDecorators((List<Decorator>) Collections.EMPTY_LIST);
+		} // if
+
+	} // simulationChanged
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		if (this.rvhp != null) {
+			// Yes
+			rvhp.removeExtensionListener(this);
+		} // if
+		if (simulation != null) {
+			// Yes
+			simulation.removeSimulationListener(this);
+		} // if
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getIdentifiable()
+	 */
+	@Override
+	public Identifiable getIdentifiable() {
+		return identifiable;
+	}
+	
+	/**
+	 * This Control is associated with an Identifiable
+	 * @see org.eclipse.stem.ui.reports.views.ReportControl#getControlType()
+	 */
+	public String getControlType() {
+		return ReportControlFactory.IDENTIFABLE_TYPE;
+	}
+
+} // RelativeValueHistoryPlotter
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControl.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControl.java
new file mode 100644
index 0000000..b7c2b81
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControl.java
@@ -0,0 +1,323 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryExtendedListener;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * ReportControl is a subclass of Canvas suitable for chart drawings.
+ */
+abstract public class ReportControl extends Composite implements
+		RelativeValueHistoryExtendedListener, ISimulationListener,
+		ISelectionProvider {
+
+	protected RelativeValueHistoryProviderAdapter rvhp;
+
+	protected static final String REMOVE_TEXT = "remove";
+	
+	protected static final String ADD_REFERENCE_TEXT = "Add Reference";
+
+	protected Label simulationNameLabel;
+
+	/**
+	 * The {@link org.eclipse.stem.jobs.simulation.Simulation} associated
+	 * with the values being plotted.
+	 */
+	protected ISimulation simulation = null;
+
+	/**
+	 * The {@link Identifiable} that we're plotting.
+	 */
+	protected Identifiable identifiable;
+	protected Decorator selectedDecorator;
+	protected DynamicLabel selectedDynamicLabel;
+	protected Map<Decorator, DynamicLabel> decoratorToLabelMap;
+
+	/**
+	 * button to remove this controller and view
+	 */
+	protected Button removeButton = null;
+	
+	/**
+	 * button to add a reference data set to this view
+	 */
+	protected Button addReferenceButton = null;
+	
+	/**
+	 * button to add a reference data set to this view
+	 */
+	protected Label addReferenceLabel = null;
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<ISelectionChangedListener> listeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<IRemoveListener> removeListeners = new CopyOnWriteArrayList<IRemoveListener>();
+
+	/**
+	 * The <code>Identifiable</code> that was most recently selected, or
+	 * <code>null</code> if none has been selected.
+	 */
+	ISelection selection = null;
+
+	protected Label identifiableTitle;
+
+	/**
+	 * The width of the layout margin.
+	 */
+	protected static final int MARGIN_WIDTH = 5;
+
+	/**
+	 * The height of the layout margin.
+	 */
+	protected static final int MARGIN_HEIGHT = 5;
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public ReportControl(final Composite parent, final int style) {
+		super(parent, style);
+
+		this.addDisposeListener(new DisposeListener() {
+			/**
+			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+			 */
+			public void widgetDisposed(@SuppressWarnings("unused")
+			final DisposeEvent e) {
+				dispose();
+			}
+		});
+
+		final FormLayout layout = new FormLayout();
+		layout.marginHeight = MARGIN_HEIGHT;
+		layout.marginWidth = MARGIN_WIDTH;
+		setLayout(layout);
+
+	} // ReportControl
+
+	/**
+	 * @param parent
+	 *            the parent SWT control that this composite will be a child of
+	 * @return the SWT Composite to be displayed above the MapCanvas in the
+	 *         control
+	 */
+	protected Composite createTopComposite(final Composite parent) {
+		final Composite topComposite = new Composite(parent, SWT.NONE);
+
+		final FillLayout topCompositeLayout = new FillLayout(SWT.VERTICAL);
+		topComposite.setLayout(topCompositeLayout);
+
+		simulationNameLabel = new Label(topComposite, SWT.CENTER);
+		simulationNameLabel.setText("");
+
+		return topComposite;
+	} // createTopComposite
+
+	protected void switchToRVHP(final RelativeValueHistoryProviderAdapter rvhp) {
+		// Is there an existing RVHP to stop listening to?
+		if (this.rvhp != null && this.rvhp != rvhp) {
+			// Yes
+			this.rvhp.removeExtensionListener(this);
+		} // if
+
+		// Should we start listening to the new one?
+		if (this.rvhp != rvhp && rvhp != null) {
+			// Yes
+			rvhp.addExtensionListener(this);
+		} // if
+
+		this.rvhp = rvhp;
+	} // switchToRVHP
+
+	/**
+	 * All controllers must implement this to remove the control e.g. by a
+	 * remove button event
+	 */
+	public abstract void remove();
+
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void addIRemoveListener(final IRemoveListener listener) {
+		removeListeners.add(listener);
+	}
+
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void removeIRemoveListener(final IRemoveListener listener) {
+		removeListeners.remove(listener);
+	}
+
+	/**
+	 * 
+	 * @param ident
+	 */
+	public void fireRemoveEvent(final Identifiable ident) {
+		for (final IRemoveListener listener : removeListeners) {
+			listener.identifiableRemoved(ident);
+		} // for each ISelectionChangedListener
+	}
+
+	/**
+	 * Setting the {@link org.eclipse.stem.jobs.simulation.Simulation} has
+	 * the side-effect of causing the control to remove itself as a listener
+	 * from any previously set
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} and adding itself
+	 * as a listener to the new one. It will also cause the image to be
+	 * initialized from the contents of the new
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} as appropriate.
+	 * 
+	 * @param simulation
+	 *            the simulation whose Lat/Long data will be rendered.
+	 */
+	public void setSimulation(final ISimulation simulation) {
+		// Any need to switch?
+		if (this.simulation == simulation) {
+			// No
+			return;
+		} // if no need to switch?
+
+		// Should we remove ourselves as listeners from the current simulation?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.removeSimulationListener(this);
+		}
+
+		this.simulation = simulation;
+		selection = null;
+		// Was there a new simulation to switch to?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.addSimulationListener(this);
+			initializeFromSimulation(this.simulation);
+		} else {
+			// No
+			// Just display a blank screen
+			initializeFromSimulation(null);
+		}
+
+		refresh2();
+	} // setSimulation
+
+	/**
+	 * 
+	 * @param simulation
+	 */
+	protected abstract void initializeFromSimulation(
+			final ISimulation simulation);
+
+	/**
+	 * 
+	 */
+	protected abstract void refresh2();
+
+	/**
+	 * @return the selection
+	 */
+	public final ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(final ISelection selection) {
+		this.selection = selection;
+		fireSelection(selection);
+	}
+
+	/**
+	 * 
+	 * @param identifiable
+	 */
+	public abstract void setIdentifiable(Identifiable identifiable);
+
+	/**
+	 * Returns the Identifiable being displayed
+	 * 
+	 * @return The identifiable to be monitored
+	 * 
+	 */
+	public abstract Identifiable getIdentifiable();
+
+	/**
+	 * Pass a {@link SelectionChangedEvent} along to listeners.
+	 * 
+	 * @param selection
+	 *            the {@link ISelection} to be giving to the listeners.
+	 */
+	public void fireSelection(final ISelection selection) {
+
+		final SelectionChangedEvent event = new SelectionChangedEvent(this,
+				selection);
+		for (final ISelectionChangedListener listener : listeners) {
+			listener.selectionChanged(event);
+		} // for each ISelectionChangedListener
+
+	} // fireSelection
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+	
+	/**
+	 * One of two Control types. Controls are associated with either an individual
+	 * Identifiable or a Simulation
+	 * @return the control type
+	 */
+	public abstract String getControlType() ;
+
+} // ReportControl
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControlFactory.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControlFactory.java
new file mode 100644
index 0000000..3f10a67
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportControlFactory.java
@@ -0,0 +1,53 @@
+// ReportControlFactory.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This interface is implemented by factories that create instances of
+ * {@link ReportControl}.
+ */
+public interface ReportControlFactory {
+	
+	/**
+	 * One of two factory types. This factory type creates a control associated with an individual
+	 * identifiable
+	 */
+	public static final String IDENTIFABLE_TYPE = "IDENTIFIABLE_CONTROL_FACTORY";
+	/**
+	 * One of two factory types. This factory type creates a control associated with an individual
+	 * Simulation
+	 */
+	public static final String SIMULATION_TYPE = "SIMULATION_CONTROL_FACTORY";
+	
+	
+	/**
+	 * @param parent
+	 *            the parent of the control
+	 * @return a new {@link ReportControl} instance.
+	 */
+	ReportControl create(final Composite parent);
+
+	/**
+	 * @return the unique type of control
+	 */
+	public String getUniqueControlName();
+	
+	/**
+	 * @return the unique factory type
+	 */
+	public String getFactoryType();
+
+} // ReportControlFactory
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportViewer.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportViewer.java
new file mode 100644
index 0000000..1a48fc6
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportViewer.java
@@ -0,0 +1,964 @@
+// ReportViewer.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.dialogs.DialogSettings;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.stem.ui.views.geographic.map.MapControl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * This class presents "views" of the running simulations.
+ */
+public class ReportViewer extends Viewer implements ISelectionChangedListener,
+		ISimulationManagerListener {
+
+	/**
+	 * This is the collection of {@link Identifiable}s to display (
+	 * {@link Node}s for now)
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s that should be
+	 * displayed.
+	 */
+	private final Set<Identifiable> identifiablesToDisplay = new LinkedHashSet<Identifiable>();
+
+	/**
+	 * This is the {@link SimulationManager} that is the input to the viewer. It
+	 * maintains a collection of active
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s in the system.
+	 * This viewer listens to it to discover when new
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s are created and
+	 * old ones disappear.
+	 * 
+	 * @see #simulationsChanged(SimulationManagerEvent)
+	 */
+	private SimulationManager simulationManager;
+
+	/**
+	 * The {@link Identifiable} that was most recently selected by a user
+	 * clicking on one of the
+	 * {@link org.eclipse.stem.ui.views.geographic.map.MapControl}s, or
+	 * <code>null</code> if none has been selected.
+	 */
+	private ISelection selection = null;
+
+	/**
+	 * This is the top-level control of the viewer. It contains the
+	 * {@link org.eclipse.stem.ui.views.geographic.map.MapControl}s that
+	 * display the current state of the
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+	 */
+	final Composite composite;
+
+	/**
+	 * the user's preferences are stored in {@link DialogSettings}
+	 */
+	private DialogSettings masterSettings = null;
+
+	/**
+	 * Set of preferred Locations to monitor read from the
+	 * {@link DialogSettings}
+	 */
+	private final Set<String> monitorSet = new HashSet<String>();
+
+	/**
+	 * root key element for the {@link DialogSettings} xml file
+	 */
+	private static final String ROOT_KEY = "root";
+
+	/**
+	 * Constants for saving ReportViewPreferences
+	 */
+	public static final String REPORTVIEWPREFERENCES_FILENAME = "Preferences.txt";
+
+	/**
+	 * TODO JFK
+	 */
+	public static final String LOCATION_PREFERENCE_KEY = "location.ids";
+
+	// get the path
+	private static final IPath PATH = Activator.getDefault().getStateLocation();
+
+	/**
+	 * This factory is used to create instances of {@link ReportControl} in the
+	 * method {@link #populateView()}
+	 */
+	private final ReportControlFactory rcf;
+
+	/**
+	 * @param parent
+	 *            the SWT parent of the control that makes up the viewer
+	 * @param rcf
+	 *            the factory that creates instance of {@link ReportControl}
+	 */
+	public ReportViewer(final Composite parent, final ReportControlFactory rcf) {
+
+		composite = new Composite(parent, SWT.NONE);
+		final FillLayout compositeLayout = new FillLayout(SWT.HORIZONTAL);
+		composite.setLayout(compositeLayout);
+
+		// Remember the factory that we'll use to create instances of
+		// ReportControl
+		this.rcf = rcf;
+		refresh();
+		composite.pack();
+
+	} // ReportViewer
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getControl()
+	 */
+	@Override
+	public Control getControl() {
+		return composite;
+	} // getControl
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getSelection()
+	 */
+	@Override
+	public ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#refresh()
+	 */
+	@Override
+	public void refresh() {
+		if (simulationManager != null) {
+			// Yes
+			List<ISimulation> allSimulations = null;
+			List<ISimulation> activeSimulations = simulationManager.getActiveSimulations();
+			if((activeSimulations!=null)&&(activeSimulations.size()>=1)) {
+				for (int i=0 ; i < activeSimulations.size(); i ++) {
+					ISimulation sim = activeSimulations.get(i);
+					updatePreferenceState(sim);
+				}
+			}
+			
+			if (simulationManager != null) {
+				allSimulations = simulationManager.getActiveSimulations();
+				addToDisplayedIdentifiableSet(allSimulations);
+			}
+
+			identifiablesToDisplay.clear();
+			identifiablesToDisplay.addAll(getIdentifiablesInSimulation(simulationManager.getActiveSimulations()));
+		} // if
+		// calling with null means this is a new identifiable for an 
+		// active simulation but not a new simulation
+		if(rcf.getFactoryType().equals(ReportControlFactory.IDENTIFABLE_TYPE)){
+			populateView();
+		} else {
+			populateView(null);
+		}
+		
+	} // refresh
+
+	/**
+	 * 
+	 * @param ident
+	 */
+	public void addMonitor(final Identifiable ident) {
+
+		// this fixes a bug where clicks in the
+		// Designer perspective were creating new ReportViews
+		if (!(ident instanceof Node)) {
+			return;
+		}
+		identifiablesToDisplay.add(ident);
+		populateView();
+		// preference state has changed
+		savePreferenceState();
+	} // addMonitor
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getInput()
+	 */
+	@Override
+	public Object getInput() {
+		return simulationManager;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
+	 */
+	@Override
+	public void setInput(final Object input) {
+		final Object oldInput = simulationManager;
+		simulationManager = (SimulationManager) input;
+		inputChanged(input, oldInput);
+	} // setInput
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	@Override
+	protected void inputChanged(final Object input, final Object oldInput) {
+		// Is there already a simulation manager?
+		if (oldInput != null) {
+			// Yes
+			((SimulationManager) oldInput).removeListener(this);
+		} // if
+
+		// Register with the SimulationManager to listen for changes in the set
+		// of active Simulations.
+		// Got input?
+		if (input != null) {
+			// Yes
+			((SimulationManager) input).addSimulationManagerListener(this);
+		} // if
+
+		// Update the viewer with the contents of the new input source
+		refresh();
+	} // inputChanged
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers.ISelection,
+	 *      boolean)
+	 */
+	@Override
+	public void setSelection(final ISelection selection,
+			@SuppressWarnings("unused") final boolean reveal) {
+		this.selection = selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(final SelectionChangedEvent event) {
+
+		// Did the event come from a ReportControl?
+		if (event.getSelectionProvider() instanceof ReportControl) {
+			// Yes
+			// Just pass it along
+			selection = event.getSelection();
+			fireSelectionChanged(event);
+		} // if
+	} // selectionChanged
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+	 */
+	public void simulationsChanged(final SimulationManagerEvent event) {
+		
+		// Init the preference
+		removeFromDisplayedSimulationSet(Arrays.asList(event.getSimulationsRemoved()));
+		List<ISimulation> newSimulationList = Arrays.asList(event.getSimulationsAdded());
+		if((newSimulationList!=null)&&(newSimulationList.size() >=1)) {
+			for (int i = 0;  i < newSimulationList.size(); i ++) {
+				ISimulation sim = newSimulationList.get(i);
+				updatePreferenceState(sim);
+				addToDisplayedIdentifiableSet(sim);
+				populateView(); // the time series charts
+				// new simulation !!
+				populateView(sim);// the aggregate charts
+			}
+		}
+		
+	} // simulationsChanged
+
+	/**
+	 * @param simulations
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}s
+	 *            to add to the set being displayed.
+	 */
+	private void addToDisplayedIdentifiableSet(
+			final List<ISimulation> simulations) {
+		// Any simulations to add?
+		if (!simulations.isEmpty()) {
+			// Yes
+			identifiablesToDisplay
+					.addAll(getIdentifiablesInSimulation(simulations));
+		} // if any simulations
+	} // addToDisplayedSimulationSet
+
+	/**
+	 * @param simulations
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}s
+	 *            to add to the set being displayed.
+	 */
+	private void addToDisplayedIdentifiableSet(ISimulation sim) {		
+			identifiablesToDisplay.addAll(getIdentifiablesInSimulation(sim));
+	} // addToDisplayedSimulationSet
+
+	
+	/**
+	 * @param simulations
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}s
+	 *            to remove from the set being displayed.
+	 */
+	private void removeFromDisplayedSimulationSet(
+			final List<ISimulation> simulations) {
+		// Any simulations to remove?
+		if (!simulations.isEmpty()) {
+			// Yes
+			final Set<Identifiable> defunctIdentifiables = getIdentifiablesInSimulation(simulations);
+			identifiablesToDisplay.removeAll(defunctIdentifiables);
+			cleanup(defunctIdentifiables);
+		} // if
+	} // removeFromDisplayedSimulationSet
+
+	/**
+	 * cleans up old displays
+	 * 
+	 * @param defunctIdentifiables
+	 */
+	private void cleanup(final Set<Identifiable> defunctIdentifiables) {
+		if (defunctIdentifiables != null) {
+			final Iterator<Identifiable> iter = defunctIdentifiables.iterator();
+			while ((iter != null) && (iter.hasNext())) {
+				final Identifiable ident = iter.next();
+				monitorSet.remove(ident.getURI().toString());
+			} // while
+
+			final Control[] allControls = composite.getChildren();
+			
+			for (final Control element : allControls) {
+				final ReportControl reportControl = (ReportControl) element;
+				try {
+					final Identifiable testIdentifiable = reportControl
+							.getIdentifiable();
+					if ((testIdentifiable == null)
+							|| (!identifiablesToDisplay
+									.contains(testIdentifiable))) {
+						// dispose if we know it is defunct
+						reportControl.remove();
+					} // if
+				} catch (org.eclipse.swt.SWTException swte) {
+					// if Widget is already disposed just do nothing
+					// System.out.println("swte: "+swte.getMessage());
+				}
+
+			} // for each ReportControl
+
+		}// if set not null
+	}// cleanup
+
+	protected void removeIdentifiable(final Identifiable ident) {
+		// Any simulations to remove?
+		if (ident != null) {
+			// Yes
+			identifiablesToDisplay.remove(ident);
+
+			// preference state has changed
+			savePreferenceState();
+
+		} // if
+	} // removeFromDisplayedSimulationSet
+
+	/**
+	 * Create and dispose of {@link MapControl}s as necessary to display the
+	 * selected {@link Simulation}s.
+	 */
+	private void populateView(ISimulation sim) {
+		// THE Aggregate control is a special case. All others handled by the other populateView method
+		if( ! (this.rcf.getFactoryType().equals(ReportControlFactory.SIMULATION_TYPE))) return;
+		boolean foundControl = false;
+		// problem here when we start up
+		// Are we done?
+		if (composite.isDisposed()) {
+			// Yes
+			return;
+		} // if
+
+		selection = null;
+		
+		List<ISimulation> activeSimList = SimulationManager.getManager().getActiveSimulations();
+		Set<ISimulation> activeSimSet = new HashSet<ISimulation>();
+		activeSimSet.addAll(activeSimList);
+
+		if(sim != null) {
+			// Go through the current set of Controls looking for ones that
+			// we can reassign
+			final Control[] controls = composite.getChildren();
+			for (final Control element : controls) {
+				// Does this ReportControl have a simulation that is still valid
+				// to display?
+				final ReportControl reportControl = (ReportControl) element;
+				// THE Aggregate control is a special case
+				if(reportControl.getControlType().equals(ReportControlFactory.SIMULATION_TYPE)) {
+					if(reportControl.simulation==null) {
+						reportControl.setSimulation(sim);
+						reportControl.redraw();
+						foundControl = true;
+					}
+				} 
+			} // for each MapControl
+
+			// At this point we still could have map controls with invalid
+			// identifiables, let's get rid of them
+			for (final Control element : controls) {
+				final ReportControl reportControl = (ReportControl) element;
+				
+				if(reportControl.getControlType().equals(ReportControlFactory.SIMULATION_TYPE)) {
+					// Does this MapControl have a simulation that is still valid to
+					// display?
+					// THE Aggregate control is a special case
+					if(reportControl.simulation!=null) {
+						if(!activeSimSet.contains(reportControl.simulation)) {
+							reportControl.removeSelectionChangedListener(this);
+							reportControl.dispose();
+						}
+					}	
+				} 
+			}// for each MapControl
+			
+			if(!foundControl) {
+				// We need a new control for this simulation
+				final ReportControl reportControl = rcf.create(composite);
+				reportControl.addSelectionChangedListener(this);
+				reportControl.setSimulation(sim);
+				
+				// must listen - when the children go away we no longer want to
+				// monitor them
+
+				/**
+				 * called when a remove widget is pressed
+				 */
+				reportControl.addIRemoveListener(new IRemoveListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void identifiableRemoved(final Identifiable ident) {
+						removeIdentifiable(ident);
+					}
+				});
+				reportControl.addDisposeListener(new DisposeListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void widgetDisposed(
+							@SuppressWarnings("unused") final DisposeEvent e) {
+						composite.layout(true, true);
+						composite.redraw();
+					}
+				});
+			} // not found control
+		} // sim not null
+		else {
+			// If there are no simulations to display, we just put up a "blank"
+			// ReportControl
+			if (composite.getChildren().length == 0) {
+				// Yes
+				final ReportControl reportControl = rcf.create(composite);
+				reportControl.addSelectionChangedListener(this);
+
+				/**
+				 * called when a remove widget is pressed
+				 */
+				reportControl.addIRemoveListener(new IRemoveListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void identifiableRemoved(final Identifiable ident) {
+						removeIdentifiable(ident);
+					}
+				});
+				reportControl.addDisposeListener(new DisposeListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void widgetDisposed(
+							@SuppressWarnings("unused") final DisposeEvent e) {
+						composite.layout(true, true);
+						composite.redraw();
+					}
+				});
+			} // if
+		}
+		
+		
+		composite.layout(true, true);
+		composite.redraw();
+	} // populateView(ISimulation)
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * Create and dispose of {@link MapControl}s as necessary to display the
+	 * selected {@link Simulation}s.
+	 */
+	private void populateView() {
+		// THE Aggregate control is a special case handled by the other populateView method
+		
+		if(this.rcf.getFactoryType().equals(ReportControlFactory.SIMULATION_TYPE) ) return;
+		
+		// problem here when we start up
+		// Are we done?
+		if (composite.isDisposed()) {
+			// Yes
+			return;
+		} // if
+
+		selection = null;
+		
+		// Find the Simulations that are not currently being displayed and put
+		// them into the Set undisplayedSimulations.
+		final Set<Identifiable> undisplayedIdentifiables = new HashSet<Identifiable>();
+		for (final Identifiable node : identifiablesToDisplay) {
+			// Is this one associated with a ReportControl already?
+			if (!isDisplayed(node)) {
+				// No
+				undisplayedIdentifiables.add(node);
+			} // if not displayed
+		} // for each ISimulation
+
+		// Go through the current set of Controls looking for ones that
+		// we can reassign
+		final Control[] controls = composite.getChildren();
+		for (final Control element : controls) {
+			// Does this ReportControl have a simulation that is still valid
+			// to display?
+			final ReportControl reportControl = (ReportControl) element;
+			if(reportControl.getControlType().equals(ReportControlFactory.IDENTIFABLE_TYPE)) {
+				// all other controls
+				if (!undisplayedIdentifiables.isEmpty()
+						&& !identifiablesToDisplay.contains(reportControl
+								.getIdentifiable())) {
+					// No
+					// Reassign it to one that is valid
+					final Identifiable ident = (Identifiable) undisplayedIdentifiables
+							.toArray()[0];
+					reportControl.setIdentifiable(ident);
+					undisplayedIdentifiables.remove(ident);
+				}
+			}
+		} // for each MapControl
+
+
+		// At this point we still could have map controls with invalid
+		// identifiables, let's get rid of them
+		for (final Control element : controls) {
+			final ReportControl reportControl = (ReportControl) element;
+			if(reportControl.getControlType().equals(ReportControlFactory.IDENTIFABLE_TYPE)) {
+				// Does this MapControl have a identifiable that is still valid to
+				// display?
+				final Identifiable ident = reportControl.getIdentifiable();
+				if (ident != null && !identifiablesToDisplay.contains(ident)) {
+					// No
+					reportControl.removeSelectionChangedListener(this);
+					reportControl.dispose();
+				}
+			}
+		}// for each MapControl
+		
+		// If there're any Nodes not assigned to a ReportControl,
+		// let's take care of that now.
+	
+		for (final Identifiable ident : undisplayedIdentifiables) {
+			if(ident!= null) {
+				final ReportControl reportControl = rcf.create(composite);
+				reportControl.addSelectionChangedListener(this);
+				reportControl.setIdentifiable(ident);
+				// must listen - when the children go away we no longer want to
+				// monitor them
+
+				/**
+				 * called when a remove widget is pressed
+				 */
+				reportControl.addIRemoveListener(new IRemoveListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void identifiableRemoved(final Identifiable ident) {
+						removeIdentifiable(ident);
+					}
+				});
+				reportControl.addDisposeListener(new DisposeListener() {
+					/**
+					 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+					 */
+					public void widgetDisposed(
+							@SuppressWarnings("unused") final DisposeEvent e) {
+						composite.layout(true, true);
+						composite.redraw();
+					}
+				});
+			}// not null
+		} // for each Identifiable
+
+		// If there are no simulations to display, we just put up a "blank"
+		// ReportControl
+		if (composite.getChildren().length == 0) {
+			// Yes
+			final ReportControl reportControl = rcf.create(composite);
+			reportControl.addSelectionChangedListener(this);
+
+			/**
+			 * called when a remove widget is pressed
+			 */
+			reportControl.addIRemoveListener(new IRemoveListener() {
+				/**
+				 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+				 */
+				public void identifiableRemoved(final Identifiable ident) {
+					removeIdentifiable(ident);
+				}
+			});
+			reportControl.addDisposeListener(new DisposeListener() {
+				/**
+				 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+				 */
+				public void widgetDisposed(
+						@SuppressWarnings("unused") final DisposeEvent e) {
+					composite.layout(true, true);
+					composite.redraw();
+				}
+			});
+
+		} // if
+		composite.layout(true, true);
+		composite.redraw();
+		
+	} // populateView()
+	
+	
+	
+
+	/**
+	 * 
+	 * @param simulations
+	 * @return
+	 */
+	private Set<Identifiable> getIdentifiablesInSimulation(
+			final List<ISimulation> simulationList) {
+		final Set<Identifiable> retVal = new LinkedHashSet<Identifiable>();
+		for (int i = 0; i < simulationList.size(); i++) {
+			final ISimulation simulation = simulationList.get(i);
+			/*
+			 * The default monitor locations always contains the works
+			 * (URIsuffix = ZZZ, or MonitorPreferences.DEFAULT_LOCATION_ID
+			 * However, if a scenario contains only one country then the ZZZ
+			 * nodes does not exist and the top level node will be the country
+			 * code. So here we check that the ZZZ node exists. If it does not
+			 * exist we look for three letter country code(s) and add that
+			 * (those - but there should be only one) to the list.
+			 */
+			final Graph graph = simulation.getScenario().getCanonicalGraph();
+			/*
+			 * this code was used to avoid a bug that should now be fixed
+			 * 
+			 * if (graph == null) { System.out.println("graph is null"); // try
+			 * several times for (int ii = 0 ; ii < 50; ii ++) { try {
+			 * Thread.sleep(100); } catch (Exception e) { // nothing } graph =
+			 * simulation.getScenario().getCanonicalGraph(); if (graph != null)
+			 * break; }// for 10 tries } //if graph null
+			 */
+
+			if (graph != null) {
+				// final EMap<URI, Node> allNodes = graph.getNodes();
+				// final Set<URI> allGraphURIs = allNodes.keySet();
+				// final URI defaultURI = MonitorPreferences.getDefaultURI();
+
+				/*
+				 * We won't use the following code. It creates too many
+				 * countries when scenario includes an entire continent
+				 *  // if the world URI=..ZZZ does NOT exist if
+				 * (!allGraphURIs.contains(defaultURI)) { final Iterator<URI>
+				 * iter = allGraphURIs.iterator(); while ((iter != null) &&
+				 * (iter.hasNext())) { final String uriString =
+				 * (iter.next()).toString(); final String suf =
+				 * MonitorPreferences .getURIsuffix(uriString); if
+				 * ((suf.length() == 3) && (suf.indexOf("-") == -1)) { // add
+				 * the node monitorSet.add(uriString); } // if admin0=country
+				 * level 3 letter uri } // all uri's in Graph } // if world uri
+				 * does not exist
+				 */
+
+				final Iterator<String> iter = monitorSet.iterator();
+				while ((iter != null) && (iter.hasNext())) {
+					final String key = iter.next();
+					Identifiable node = null;
+					URI locURI = null;
+					try {
+						locURI = URI.createURI(key);
+						node = graph.getNode(locURI);
+						if (node != null) {
+							retVal.add(node);
+						}
+					} catch (final Exception e) {
+						org.eclipse.stem.ui.reports.Activator.logError(
+								"ReportViewer.getIdentifiablesInSimulation() Error setting Identifiable to "
+										+ key + " ", e);
+					}
+				}// while locations to monitor
+
+			}// graph not null
+
+		} // for all simulations
+
+		return retVal;
+	}
+	
+	/**
+	 * 
+	 * @param simulation one simulation
+	 * @return
+	 */
+	private Set<Identifiable> getIdentifiablesInSimulation(ISimulation simulation) {
+		final Set<Identifiable> retVal = new LinkedHashSet<Identifiable>();
+			/*
+			 * The default monitor locations always contains the works
+			 * (URIsuffix = ZZZ, or MonitorPreferences.DEFAULT_LOCATION_ID
+			 * However, if a scenario contains only one country then the ZZZ
+			 * nodes does not exist and the top level node will be the country
+			 * code. So here we check that the ZZZ node exists. If it does not
+			 * exist we look for three letter country code(s) and add that
+			 * (those - but there should be only one) to the list.
+			 */
+			final Graph graph = simulation.getScenario().getCanonicalGraph();
+			/*
+			 * this code was used to avoid a bug that should now be fixed
+			 * 
+			 * if (graph == null) { System.out.println("graph is null"); // try
+			 * several times for (int ii = 0 ; ii < 50; ii ++) { try {
+			 * Thread.sleep(100); } catch (Exception e) { // nothing } graph =
+			 * simulation.getScenario().getCanonicalGraph(); if (graph != null)
+			 * break; }// for 10 tries } //if graph null
+			 */
+
+			if (graph != null) {
+				// final EMap<URI, Node> allNodes = graph.getNodes();
+				// final Set<URI> allGraphURIs = allNodes.keySet();
+				// final URI defaultURI = MonitorPreferences.getDefaultURI();
+
+				/*
+				 * We won't use the following code. It creates too many
+				 * countries when scenario includes an entire continent
+				 *  // if the world URI=..ZZZ does NOT exist if
+				 * (!allGraphURIs.contains(defaultURI)) { final Iterator<URI>
+				 * iter = allGraphURIs.iterator(); while ((iter != null) &&
+				 * (iter.hasNext())) { final String uriString =
+				 * (iter.next()).toString(); final String suf =
+				 * MonitorPreferences .getURIsuffix(uriString); if
+				 * ((suf.length() == 3) && (suf.indexOf("-") == -1)) { // add
+				 * the node monitorSet.add(uriString); } // if admin0=country
+				 * level 3 letter uri } // all uri's in Graph } // if world uri
+				 * does not exist
+				 */
+
+				final Iterator<String> iter = monitorSet.iterator();
+				while ((iter != null) && (iter.hasNext())) {
+					final String key = iter.next();
+					Identifiable node = null;
+					URI locURI = null;
+					try {
+						locURI = URI.createURI(key);
+						node = graph.getNode(locURI);
+						if (node != null) {
+							retVal.add(node);
+						}
+					} catch (final Exception e) {
+						org.eclipse.stem.ui.reports.Activator.logError(
+								"ReportViewer.getIdentifiablesInSimulation() Error setting Identifiable to "
+										+ key + " ", e);
+					}
+				}// while locations to monitor
+			}// graph not null
+		return retVal;
+	}
+
+	/**
+	 * @param simulation
+	 * @return
+	 */
+	private boolean isDisplayed(final Identifiable identifiable) {
+		boolean retValue = false;
+		final Control[] allControls = composite.getChildren();
+		for (final Control element : allControls) {
+			final ReportControl reportControl = (ReportControl) element;
+			final Identifiable testIdentifiable = reportControl
+					.getIdentifiable();
+			if (testIdentifiable != null
+					&& testIdentifiable.equals(identifiable)) {
+				retValue = true;
+				break;
+			} // if
+		} // for each ReportControl
+		return retValue;
+	} // isDisplayed
+
+	/**
+	 * save the state of preferred locations to monitor
+	 */
+	private void savePreferenceState() {
+
+		// we need to write preferences by active simulation
+		List<ISimulation> allSimulations = null;
+		final Set<String> nodesInSimulation = new HashSet<String>();
+		if (simulationManager != null) {
+			allSimulations = simulationManager.getActiveSimulations();
+		}
+		if ((allSimulations != null) && (allSimulations.size() >= 1)) {
+			for (int i = 0; i < allSimulations.size(); i++) {
+				nodesInSimulation.clear();
+				final ISimulation sim = allSimulations.get(i);
+				final String scenarioName = sim.getScenario().getURI()
+						.toString();
+
+				// recreate the subsection for this scenario using the locations
+				// now being monitored
+				final IDialogSettings section = new DialogSettings(scenarioName);
+
+				final Graph graph = sim.getScenario().getCanonicalGraph();
+				final Iterator<Identifiable> iter = identifiablesToDisplay
+						.iterator();
+				while ((iter != null) && (iter.hasNext())) {
+					final Identifiable ident = iter.next();
+					if (ident != null) {
+						// is this node in this simulation?
+						final Identifiable node = graph.getNode(ident.getURI());
+						if (node != null) {
+							final String id = ident.getURI().toString();
+							if (id != null) {
+								nodesInSimulation.add(id);
+							}
+						} // if node in simulation
+					}
+
+				}// all currently displayed nodes
+
+				final String[] newPrefs = new String[nodesInSimulation.size()];
+				final Iterator<String> iter2 = nodesInSimulation.iterator();
+				int icount = 0;
+				while ((iter2 != null) && (iter2.hasNext())) {
+					newPrefs[icount] = iter2.next();
+					icount++;
+				}
+
+				section.put(LOCATION_PREFERENCE_KEY, newPrefs);
+				if (masterSettings == null) {
+					masterSettings = new DialogSettings(ROOT_KEY);
+				}
+				masterSettings.addSection(section);
+				try {
+					masterSettings.save(getPrefFileName());
+				} catch (final IOException ioe) {
+					org.eclipse.stem.ui.reports.Activator
+							.logError("exception writing file ["
+									+ ioe.getMessage() + "]", ioe);
+				}
+
+			} // for all simulations
+		}// if not null
+
+	}// savePreferenceState
+
+	/**
+	 * This method uses {@link DialogSettings} to load and update the monitorSet
+	 * which contains (filters) the valid list of preferred {@link Identifiable}s
+	 * to display from the the state of the previously saved preference state.
+	 * for {@link Simulation}s that are running
+	 * 
+	 * @param runningSimulations
+	 */
+	private void updatePreferenceState(ISimulation sim) {
+		// what type of viewer? TimeSeries, PhaseSpace etc
+		if (masterSettings == null) {
+			readMasterSettingsFromFile();
+		}
+		final String scenarioName = sim.getScenario().getURI().toString();
+		IDialogSettings section = masterSettings.getSection(scenarioName);
+		if (section == null) {
+			section = new DialogSettings(scenarioName);
+			masterSettings.addSection(section);
+		}
+		// now add the preferences to the monitorSet
+		final String[] allIDs = section.getArray(LOCATION_PREFERENCE_KEY);
+		if (allIDs != null) {
+			for (final String element : allIDs) {
+				monitorSet.add(element);
+			}// for allIDs
+
+		}// not null
+	}// updatePreferenceState
+
+	/**
+	 * get the {@link DialogSettings} from the file
+	 */
+	public void readMasterSettingsFromFile() {
+		masterSettings = new DialogSettings(ROOT_KEY);
+
+		final String filename = getPrefFileName();
+		final File f = new File(filename);
+		if (f.exists()) {
+			try {
+				masterSettings.load(filename);
+			} catch (final IOException ioe) {
+				org.eclipse.stem.ui.reports.Activator.logError(
+						"exception loading file [" + ioe.getMessage() + "]",
+						ioe);
+			}
+		} else {
+			// else create it
+			try {
+				masterSettings.save(filename);
+			} catch (final IOException ioe) {
+				org.eclipse.stem.ui.reports.Activator.logError(
+						"exception creating file [" + ioe.getMessage() + "]",
+						ioe);
+			}
+		} // else if f !exists
+	}// read master setttings
+
+	/**
+	 * gets the preferences file name
+	 * 
+	 * @return file name containing the users preferences
+	 */
+	public String getPrefFileName() {
+		final String controlCategory = rcf.getUniqueControlName();
+		// Get the right preference file
+		final String filename = PATH.append(
+				controlCategory + "_" + REPORTVIEWPREFERENCES_FILENAME)
+				.toOSString();
+		return filename;
+	}
+
+} // ReportViewer
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportsContextMenuAction.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportsContextMenuAction.java
new file mode 100644
index 0000000..2f6a445
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/ReportsContextMenuAction.java
@@ -0,0 +1,63 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.ui.views.geographic.map.SelectedReportsManager;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * The class is a delegation for the popup menu of the
+ * <code>GeographicRenderer</code>. The purpose of this class is to handle
+ * the activity in the reports context menu and keep the current state of all
+ * enabled/disabled reports from that menu. The report's <code>ViewPart</code>
+ * object will use this class for checking whether to generate a report or not.
+ */
+public class ReportsContextMenuAction 
+	implements IViewActionDelegate {
+	
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(org.eclipse.jface.action.IAction action) {
+		String reportId = action.getId();
+		
+		if (SelectedReportsManager.getInstance().isReportEnabled(reportId)) { // The report was previously enabled so disable it
+			SelectedReportsManager.getInstance().disableReportForIdentifiable(reportId);
+			action.setChecked(false);
+		}
+		else
+		{
+			SelectedReportsManager.getInstance().enableReportForIdentifiable(reportId);
+			action.setChecked(true);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(@SuppressWarnings("unused")
+	org.eclipse.jface.action.IAction action,
+			@SuppressWarnings("unused")
+			org.eclipse.jface.viewers.ISelection selection) {
+		// Do Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(@SuppressWarnings("unused")
+	IViewPart arg0) {
+		// Do Nothing
+	}
+}
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesCanvas.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesCanvas.java
new file mode 100644
index 0000000..c0597d0
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesCanvas.java
@@ -0,0 +1,1215 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.Anchor;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.LineAttributes;
+import org.eclipse.birt.chart.model.attribute.LineStyle;
+import org.eclipse.birt.chart.model.attribute.Marker;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.LineSeries;
+import org.eclipse.birt.chart.model.type.ScatterSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.history.RelativeValueHistoryProviderAdapter;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.stem.ui.reports.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * TimeSeriesCanvas is a subclass of {@link Canvas} suitable for chart drawings.
+ */
+public class TimeSeriesCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The provider of relative values.
+	 */
+	private RelativeValueHistoryProvider rvhp;
+
+	private ReportControl control = null;
+	
+	/**
+	 * some extra colors
+	 */
+	protected static final ColorDefinition[] colorDefault = {
+															ColorDefinitionImpl.BLUE(), 
+															ColorDefinitionImpl.BLACK(), 
+															ColorDefinitionImpl.GREY(),
+															ColorDefinitionImpl.CYAN(),
+															ColorDefinitionImpl.ORANGE() 
+															};
+	
+	/**
+	 * used to index the line series so we can step through default colors
+	 * when a user custom color is not yet assigned
+	 */
+	protected int seriesCount  = 0;
+
+	/**
+	 * Log of zero is negative infinity so for each location we will cut off the minimum value
+	 * of log(y) at 0.1/POPULATION for display purposes only
+	 */
+	private double minLogScaleValue = 1.0;
+	
+	/**
+	 * once time > DEFAULT_AUTOAXIS_THRESHOLD we start to autoreset the time axis 
+	 * tick marks and scale so we don't have too many tick marks
+	 */
+	private static final int DEFAULT_AUTOAXIS_THRESHOLD = 5;
+	
+	/**
+	 * the max value for the time (x) axis
+	 */
+	private int maxTimeAxisValue = DEFAULT_AUTOAXIS_THRESHOLD;
+	
+	/**
+	 * the minimum number of time axis ticks 
+	 */
+	private static final int MIN_TICKS = 5;
+	
+	/**
+	 * the maximum number of time axis ticks  after time=DEFAULT_AUTOAXIS_THRESHOLD;
+	 */
+	private static final int MAX_TICKS = 10;
+	
+	/**
+	 * used to set the autoaxis tick
+	 */
+	private static final int TICK_TRIGGER = MAX_TICKS/MIN_TICKS;
+
+	/**
+	 * This is a map of properties of the label updated by the selected
+	 * {@link Decorator} whose relative value might be plotted (context menu allows us to toggle the individual
+	 * properties to plot
+	 */
+	protected Map<ItemPropertyDescriptor,Boolean> propertiesToPlot = new HashMap<ItemPropertyDescriptor,Boolean>();
+
+	/**
+	 * TODO this is temporary code and should be in user preferences
+	 * we want to hide a few of the possible line-series on start up
+	 */
+	private static final String[] HIDE_ON_STARTUP = {"IR","IF","Incidence","Births","Deaths"};
+	private static final Set<String> defaultHideSet = new HashSet<String>();
+
+	/**
+	 * this is a map of the DataSeries object (keyed by property name)
+	 */
+	protected final Map<String,DataSeries> dataSeriesMap = new HashMap<String,DataSeries>();
+	
+	
+	/**
+	 * These are the cycle numbers that match the relative values that will be
+	 * plotted
+	 *
+	 * @see #relativeValues
+	 */
+	private final List<Integer> cycleNumbers = new ArrayList<Integer>();
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	
+	Axis yAxisPrimary;
+	Axis xAxisPrimary;
+
+	
+	/**
+	 * A context menu for this view
+	 */
+	Menu popUpMenu = null;
+
+	/**
+	 * set y axis to a linear scale
+	 */
+	private LinearScaleAction linearTimeAction;
+	/**
+	 * set y axis to a log scale
+	 */
+	private LogScaleAction logTimeAction;
+	protected boolean useLinearTimeScale = true;
+	
+	/**
+	 * show the legend (true by default)
+	 */
+	private LegendViewAction viewLegend;
+
+	/**
+	 * hide the legend 
+	 */
+	private LegendHideAction hideLegend;
+	protected boolean showLegend = true;
+	
+	protected Legend legend = null;
+	
+	private static final String defaultKey = "S";
+
+	Image imgChart = null;
+	
+	/**
+	 * Constructor.
+	 *
+	 * @param parent
+	 *            the SWT parent of the {@link Widget}
+	 */
+	public TimeSeriesCanvas(final Composite parent) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		
+		// init
+		for (int i = 0; i < HIDE_ON_STARTUP.length; i ++) {
+			defaultHideSet.add(HIDE_ON_STARTUP[i]);
+		}
+	
+
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = (ReportControl) parent;
+		rvhp = control.rvhp;
+		
+		cm = createSimpleLineChart(dataSeriesMap, cycleNumbers, Messages
+				.getString("CC.title")); //$NON-NLS-1$
+		resetData();
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+				
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+
+			} // paintControl
+		} // PaintListener
+
+		);
+
+		//Create a context menu for the canvas
+		createContextMenu(this);
+
+	} // TimeSeriesCanvas
+
+	/**
+	 * The method which gets the {@link TimeSeriesCanvas}' reports list, and
+	 * draws it on the {@link TimeSeriesCanvas}.
+	 *
+	 */
+	public void draw() {
+
+		// Has a relative value provider been provided?
+		if (rvhp != null) {
+			// Yes
+			// build up the set of properties to plot
+			
+			// First we disable all series so that we only turn on the ones that are enabled.
+			for(DataSeries d: dataSeriesMap.values())
+				d.hide();
+				
+			Iterator<ItemPropertyDescriptor> iter = propertiesToPlot.keySet().iterator();
+			List<ItemPropertyDescriptor> displayedPropertyList = new ArrayList<ItemPropertyDescriptor>();
+			while((iter!=null)&&(iter.hasNext()) ){
+				ItemPropertyDescriptor property = iter.next();
+				boolean visible = propertiesToPlot.get(property).booleanValue();
+				displayedPropertyList.add(property);
+				if(visible) {
+					if(dataSeriesMap.containsKey(property.getDisplayName(property))) {
+						DataSeries series = dataSeriesMap.get(property.getDisplayName(property));
+						// remove it
+						if(!series.isVisible()) {
+							series.show();
+						}
+					}
+				} else {
+					if(dataSeriesMap.containsKey(property.getDisplayName(property))) {
+						DataSeries series = dataSeriesMap.get(property.getDisplayName(property));
+						// remove it
+						if(series.isVisible()) {
+							series.hide();
+						}
+					}
+				}// visible?
+			}// all displayedProperties
+
+
+			/////////////////////////////////////////////////////////////
+			// Log(0.0) is negative infinity so for display purposes only
+			// we set the minimum axis value at 0.1/POPULATION
+			double denom = rvhp.getDenominator(null);
+			if(denom <=0.0) denom = 1.0;
+			minLogScaleValue = 0.1/denom;
+			/////////////////////////////////////////////////////////////
+
+			// clear
+			resetData();
+			
+			
+			
+			boolean setCycles = false;
+			// Get the values for the property to be plotted
+			int maxPoints = 0;
+			STEMTime[] time = rvhp.getAllHistoricTimeValues();
+			cycleNumbers.clear();
+			cycleNumbers.add(new Integer(0));
+			
+			for (int i = 0; i < displayedPropertyList.size(); i++) {
+				ItemPropertyDescriptor property = displayedPropertyList.get(i);
+				String propertyName = property.getDisplayName(property);
+				
+				final double[] doubleValues = rvhp.getHistoricInstances(property,time);
+
+
+				// Any values?
+				if (doubleValues.length > 0) {
+					if (maxPoints < doubleValues.length) {
+						maxPoints = doubleValues.length;
+					}
+
+					// this might be a new display
+					// so we have to fill any empty data set
+					if (!dataSeriesMap.containsKey(property.getDisplayName(property))) {
+						
+						DataSeries series = new DataSeries(propertyName, seriesCount);
+						// we are out of data (properties) so we need to fill in
+						// zeros for any unused lines
+						// fill in the empty arrays
+						if(doubleValues.length < maxPoints) {
+							for(int ii = doubleValues.length; ii < maxPoints-1; ii ++) {
+								// pad with zeros
+								series.addValue(new Double(0.0));
+							}
+						}
+						
+						
+						
+						dataSeriesMap.put(propertyName, series);
+					}
+
+					final int earliestCycleNumber = rvhp.getEarliestCycleNumber();
+					DataSeries series = dataSeriesMap.get(property.getDisplayName(property));
+					series.setColorDefs(property.getDisplayName(property));
+					
+					
+					for (int cycleNumber = 0; cycleNumber < doubleValues.length; cycleNumber++) {
+						Double value;
+						double displayValue = doubleValues[cycleNumber];
+						if (displayValue <= minLogScaleValue) {
+							// Log(0.0) is negative infinity so for display purposes only
+							// we set the minimum axis value at 0.1/POPULATION
+							displayValue = minLogScaleValue;
+						}
+						if (useLinearTimeScale) {
+							value = new Double(displayValue);
+						} else {
+							value = new Double(Math.log(displayValue));
+						}
+						
+					
+						series.addValue(value);
+						
+						if (!setCycles) {
+							this.cycleNumbers.add(new Integer(
+									earliestCycleNumber + cycleNumber + 1));
+							
+							/*
+							 * We don't want to add x (time) axis ticks ad infinitum so we we need to dynamically
+							 * change the scale. This will toggle between 5-10 ticks every time the max time doubles
+							 * past an initial value of maxTimeAxisValue = DEFAULT_AUTOAXIS_THRESHOLD (= 25)
+							 */
+							if(this.cycleNumbers.size()>TICK_TRIGGER*maxTimeAxisValue) {
+								maxTimeAxisValue = this.cycleNumbers.size()+1 ;
+								int stepX = maxTimeAxisValue / MIN_TICKS;
+								xAxisPrimary.getScale().setStep(stepX);
+							}
+						}
+						
+						
+					} // for cycleNumber
+					//System.out.println("  "+series.propertyName+"cycles = "+this.cycleNumbers.size()+" datasize = "+series.getDataSize());
+					setCycles = true; // we set them only once
+				} else {
+					resetData();
+				}
+
+				
+			} // for i properties
+
+		} // if a relative value provider has been provided
+		else {
+			// No
+			// Need to clear everything
+			resetData();
+		}
+
+		// Check each data series in the map to make sure they have enough Y values in them 
+		for(DataSeries ds:this.dataSeriesMap.values()) {
+			if(ds.relativeValues.size() < this.cycleNumbers.size()) {
+				ds.relativeValues.clear();
+				for(int n=0;n<this.cycleNumbers.size();++n) ds.addValue(new Double(0.0));
+			}
+		}
+		if (!this.isDisposed()) {
+			redraw();
+		}
+	} // paintControl
+
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	private void createContextMenu(final Composite parent) {
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+
+
+	/**
+	 * Update the view's context menu and add the action handlers to it.
+	 */
+	private void updateContextMenu(final Composite parent) {
+
+		popUpMenu.dispose();
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+		
+		// ---------------------------------------------------------------------
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		
+		// ---------------------------------------------------------------------
+		// add the displayable properties
+		if(rvhp!= null) {
+					List<IItemPropertyDescriptor>  properties = rvhp.getProperties();
+					for(int i = 0; i < properties.size(); i ++) {
+						ItemPropertyDescriptor nextProp = (ItemPropertyDescriptor)properties.get(i);
+						DisplayableProperty property = new DisplayableProperty(nextProp);
+						contextMenuManager.add(property);
+					}// for all properties
+				}// rvhp not null
+		
+		// ---------------------------------------------------------------------
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+
+	} // updateContextMenu
+
+
+	/**
+	 * @param dataSeriesMap the {@link Map} that will contain the relative values
+	 *            (0.0-1.0) to plot
+	 * @param cycleNumbers
+	 *            the {@link List} of simulation cycle numbers that match the
+	 *            relative values
+	 * @param seriesIdentifier
+	 *            the title of the chart
+	 * @return a <code>Chart</code>
+	 */
+	public final Chart createSimpleLineChart(
+			final Map<String, DataSeries> dataSeriesMap,
+			final List<Integer> cycleNumbers, final String seriesIdentifier) {
+		
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+		final ColorDefinition foreGround = ColorDefinitionImpl.WHITE();
+		final ColorDefinition backgroundGround = ColorDefinitionImpl.BLACK();
+		final ColorDefinition frameColor = ColorDefinitionImpl.create(50, 50,
+				50);
+
+		
+		
+
+		// Plot
+		retValue.getBlock().setBackground(frameColor);
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(backgroundGround);
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		legend = retValue.getLegend();
+		final LineAttributes lia = legend.getOutline();
+		legend.getText().getFont().setSize(8);
+		lia.setStyle(LineStyle.SOLID_LITERAL);
+		legend.getInsets().set(10, 5, 0, 0);
+		legend.getOutline().setVisible(false);
+		legend.setAnchor(Anchor.NORTH_LITERAL);
+		legend.setPosition(Position.BELOW_LITERAL);
+		legend.getText().setColor(foreGround);
+		legend.getOutline().setColor(foreGround);
+
+		// /////////
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+		xAxisPrimary.getTitle().setVisible(false);
+		xAxisPrimary.getTitle().getCaption().getFont().setSize(9);
+		xAxisPrimary.getTitle().getCaption().setColor(foreGround);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		xAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+
+		final Series seCategory = SeriesImpl.create();
+
+		// new colors
+		seCategory.getLabel().getCaption().setColor(foreGround);
+		seCategory.getLabel().getOutline().setColor(foreGround);
+		//
+
+		final NumberDataSet categoryValues = NumberDataSetImpl
+				.create(cycleNumbers);
+		seCategory.setDataSet(categoryValues);
+		final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+
+		xAxisPrimary.getSeriesDefinitions().add(sdX);
+		sdX.getSeries().add(seCategory);
+
+		// ////////
+		// Y-Axis
+		this.yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+		// end Y-Series
+
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		xAxisPrimary.getScale().setStep(1);
+		
+		//xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(TICK_TRIGGER*DEFAULT_AUTOAXIS_THRESHOLD));
+		//int numTicks = TICK_TRIGGER*DEFAULT_AUTOAXIS_THRESHOLD/MIN_TICKS;
+		//
+		
+		
+		
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		setTimeLabel();
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.25);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		yAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		// yAxisPrimary.getMajorGrid().getLineAttributes().setColor(foreGround);
+		
+		// for now get ready to create only one line - we have no data yet.
+		// we will add more lines as we need them
+		// handle null
+		if(!dataSeriesMap.containsKey(defaultKey)) {
+			DataSeries series = new DataSeries(defaultKey, seriesCount);
+			dataSeriesMap.put(defaultKey, series);
+		}
+
+		return retValue;
+	} // createSimpleLineChart
+
+	void setTimeLabel() {
+		String val = "";
+		if (control != null) {
+			final ISimulation sim = control.simulation;
+			if (sim != null) {
+				final long timeDelta = sim.getScenario().getSequencer()
+						.getTimeDelta();
+
+				if (timeDelta < STEMTime.Units.MINUTE.getMilliseconds()) {
+					val = "secs";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+				} else if (timeDelta < STEMTime.Units.HOUR.getMilliseconds()) {
+					val = "mins";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+				} else if (timeDelta < STEMTime.Units.DAY.getMilliseconds()) {
+					val = "hrs";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+
+				} else if (timeDelta <= STEMTime.Units.WEEK.getMilliseconds()) {
+					val = "days";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+
+				} else if (timeDelta < 4 * STEMTime.Units.WEEK
+						.getMilliseconds()) {
+					val = "weeks";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+				} else if (timeDelta < STEMTime.Units.YEAR.getMilliseconds()) {
+					val = "months";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+				} else {
+					val = "years";
+					xAxisPrimary.getTitle().setVisible(true);
+					xAxisPrimary.getTitle().getCaption().setValue(val);
+					return;
+				}
+
+			} // sim ! null
+		}// control ! null
+
+	} // setTimeLabel()
+
+	
+
+	/**
+	 * @param rvhp
+	 * @param propertiesToPlotList
+	 */
+	public void setDataSourceAndRedraw(
+			final RelativeValueHistoryProviderAdapter rvhp,
+			final List<ItemPropertyDescriptor> propertiesToPlotList) {
+
+		this.propertiesToPlot = addProperties(propertiesToPlotList);
+		if(rvhp!=this.rvhp) {
+			propertiesToPlot.clear();
+			this.propertiesToPlot = addProperties(propertiesToPlotList);
+			this.rvhp= rvhp;
+			//this.propertiesToPlot = filterPreferredProperties(propertiesToPlot);
+			updateContextMenu(this);
+		}
+
+		draw();
+	} // setDataSourceAndRedraw
+
+	/**
+	 * Filters a list of ItemPropertyDescriptors to show preferred properties if
+	 * at least one exists. If not, just returns the entire list.
+	 *
+	 * @return filteredList<ItemPropertyDescriptor>
+	 */
+	protected List<ItemPropertyDescriptor> filterPreferredProperties(
+			final List<ItemPropertyDescriptor> fullList) {
+		final List<ItemPropertyDescriptor> propertyList = new ArrayList<ItemPropertyDescriptor>();
+		// Are any of the labels in the preference set?
+		final Set<String> prefSet = VisualizationPreferencePage
+				.getPreferenceSet();
+
+		for (int i = 0; i < fullList.size(); i++) {
+			final ItemPropertyDescriptor property = fullList.get(i);
+			if (prefSet.contains(property.getDisplayName(property))) {
+				propertyList.add(property);
+			}
+		}
+		// if we didn't find any in the preferences then just add them all
+		if (propertyList.size() == 0) {
+			propertyList.addAll(fullList);
+		}
+		return propertyList;
+	}
+
+
+	/**
+	 * Filters a list of ItemPropertyDescriptors to show preferred properties if
+	 * at least one exists. If not, just returns the entire list.
+	 *
+	 * @return filteredList<ItemPropertyDescriptor>
+	 */
+	protected Map<ItemPropertyDescriptor,Boolean> addProperties(final List<ItemPropertyDescriptor> propertiesToPlotList) {
+
+		
+
+		for (int i = 0; i < propertiesToPlotList.size(); i++) {
+			final ItemPropertyDescriptor property = propertiesToPlotList.get(i);
+			if(!propertiesToPlot.containsKey(property)) {
+				boolean visible = true;
+				if(defaultHideSet.contains(property.getDisplayName(property))) visible = false;
+				Boolean bObj = new Boolean(visible); //default visibility
+				this.propertiesToPlot.put(property,bObj);
+			}
+		}
+
+		return this.propertiesToPlot;
+	}
+
+
+	/**
+	 * Set the provider of relative values. It will be consulted to produce a
+	 * sequence of relative values (0.0 to 1.0) that will be plotted.
+	 *
+	 * @param rvhp
+	 *            the provider of relative values.
+	 */
+	public void setRelativeValueHistoryProvider(
+			final RelativeValueHistoryProvider rvhp) {
+		this.rvhp = rvhp;
+	} // setRelativeValueHistoryProvider
+
+
+
+
+
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		rvhp = null;
+		redraw();
+	}
+
+	protected void resetData() {
+		clearData();
+		// for now get ready to create only one line - we have no data yet.
+		// we will add more lines as we need them
+		
+		if(!dataSeriesMap.containsKey(defaultKey)) {
+			DataSeries series = new DataSeries(defaultKey, seriesCount);
+			
+			dataSeriesMap.put(defaultKey, series);
+		} 
+		// handle null
+		
+		cycleNumbers.add(new Integer(0));
+	}
+
+	private void clearData() {
+		
+		Iterator<String> iter = dataSeriesMap.keySet().iterator();
+		while((iter!=null)&&(iter.hasNext())) {
+			String key = iter.next();
+			DataSeries series = dataSeriesMap.get(key);
+			series.relativeValues.clear();
+			series.addValue(new Double(0.0));
+			xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			maxTimeAxisValue = DEFAULT_AUTOAXIS_THRESHOLD;
+			//xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(TICK_TRIGGER*DEFAULT_AUTOAXIS_THRESHOLD));
+			//int numTicks = TICK_TRIGGER*DEFAULT_AUTOAXIS_THRESHOLD/MIN_TICKS;
+			xAxisPrimary.getScale().setStep(1);
+		}
+		cycleNumbers.clear();
+	}
+
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleAxisScale() {
+		if (useLinearTimeScale) { //Switch to logarithmic scale
+			logTimeAction.setChecked(true);
+			linearTimeAction.setChecked(false);
+			//Just using the following axis type, to move to log scale, didn't work
+			//yAxisPrimary.setType(AxisType.LOGARITHMIC_LITERAL);
+			yAxisPrimary.getScale().setMin(null);
+			yAxisPrimary.getScale().setMax(null);
+			yAxisPrimary.getScale().unsetStep();
+			yAxisPrimary.getScale().unsetStepNumber();
+		}
+		else { //Switch to linear scale
+			logTimeAction.setChecked(false);
+			linearTimeAction.setChecked(true);
+			//yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+			yAxisPrimary.getScale().setStep(0.25);
+		}
+		useLinearTimeScale = !useLinearTimeScale;
+		this.draw();
+	}
+	
+	
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleLegend() {
+		if (showLegend) { //Switch to hide
+			viewLegend.setChecked(false);
+			hideLegend.setChecked(true);
+			legend.setVisible(false);
+		}
+		else { //Switch to view
+			viewLegend.setChecked(true);
+			hideLegend.setChecked(false);
+			legend.setVisible(true);
+		}
+		showLegend = !showLegend;
+		this.draw();
+	}
+
+	/**
+	 * switch to linear plot 
+	 * 
+	 */
+	protected class LinearScaleAction extends Action {
+		public LinearScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LinearTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LinearTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+		}
+	} //LinearScaleAction
+
+	/**
+	 * switch to semi-log plot (log scale on y axis)
+	 * 
+	 */
+	class LogScaleAction extends Action 	{
+		public LogScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LogTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(!useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LogTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+		}
+	}//LogScaleAction
+
+	/**
+	 * Action to show the legend
+	 */
+	protected class LegendViewAction extends Action {
+		public LegendViewAction()
+		{
+			super(Messages.getString("ContextMenu.ShowLegend"), IAction.AS_CHECK_BOX);
+			setChecked(showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.ShowLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleLegend();
+			}
+		}
+	} //LegendViewAction
+	
+	/**
+	 * Action to hide the legend
+	 */
+	class LegendHideAction extends Action 	{
+		public LegendHideAction()
+		{
+			super(Messages.getString("ContextMenu.HideLegend"), IAction.AS_CHECK_BOX);
+			setChecked(!showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.HideLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleLegend();
+			}
+		}
+	}//LegendHideAction
+
+
+	/**
+	 * DisplayableProperty
+	 *
+	 */
+	protected class DisplayableProperty extends Action
+	{
+		ItemPropertyDescriptor property = null;
+		public DisplayableProperty(ItemPropertyDescriptor property)
+		{
+					super(property.getDisplayName(property), IAction.AS_CHECK_BOX);
+					this.property = property;
+					setChecked(propertiesToPlot.get(property).booleanValue());
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return property.getDisplayName(property);
+		}
+
+		/**
+		 * Toggle the state
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			    boolean state = !propertiesToPlot.get(property).booleanValue();
+			    propertiesToPlot.put(property, new Boolean(state));
+				setChecked(state);
+				draw();
+		}
+	}// DisplayableProperty
+	
+
+
+	protected class DataSeries 
+	{
+		public String propertyName = "";
+		
+
+		public List<Double> relativeValues = new ArrayList<Double>();
+		public LineSeries lineSeries = null;
+		private boolean visible = true;
+		private SeriesDefinition sdY = null;
+		
+		private int seriesIndex = 0;
+		
+		
+		public boolean isVisible() {
+			return visible;
+		}
+
+		/**
+		 * 
+		 * @param propertyName
+		 * @param index
+		 */
+		public DataSeries(String propertyName, int index) {
+			this.propertyName = propertyName;
+			this.seriesIndex = index;
+			seriesCount ++;
+			relativeValues = new ArrayList<Double>();
+			relativeValues.add(new Double(0.0));
+			addLineSeries(propertyName);
+		}
+		
+		public void addValue(Double val) {
+			if(relativeValues==null) relativeValues = new ArrayList<Double>();
+			relativeValues.add(val);
+		}
+		
+		/**
+		 * @param propertyName
+		 * 
+		 */
+		@SuppressWarnings("cast")
+		public void addLineSeries(final String propertyName) {
+			final NumberDataSet orthoValues = NumberDataSetImpl
+					.create(relativeValues);
+			if(lineSeries == null) lineSeries = (ScatterSeries) ScatterSeriesImpl.create();
+			lineSeries.setDataSet(orthoValues);
+
+			lineSeries.getLineAttributes().setVisible(true);
+			
+			// Assign the line color
+			// based on selected property. Default is Blue
+			setColorDefs(propertyName);
+			
+			// replaces deprecated code: lineSeries.getMarker().setVisible(false);
+			if (!lineSeries.getMarkers().isEmpty()) {
+				Marker marker = (Marker)lineSeries.getMarkers().get(0);
+				marker.setVisible(false);
+			}
+			
+			// the series def
+			sdY = SeriesDefinitionImpl.create();
+			//sdY.getSeriesPalette().update(-2);
+			sdY.getSeries().add(lineSeries);
+			yAxisPrimary.getSeriesDefinitions().add(sdY);
+			setTimeLabel();
+			return;
+		}
+		
+		/** 
+		 * in response to user action temporarily remove the line series from the graph
+		 */
+		public void hide() {
+			lineSeries.setVisible(false);
+			visible = false;
+		}// hide
+		
+		/** 
+		 * in response to user action add back the line series to the graph
+		 */
+		public void show() {
+			lineSeries.setVisible(true);
+			visible = true;
+		}// show
+		
+
+		/**
+		 * Sets the colors for a n array of LineSeries given the property to Plot
+		 * for each. Try to set color from the preferences (if specified for that
+		 * property) otherwise sets line color to blue.
+		 * @param propertyName 
+		 *
+		 */
+		public void setColorDefs(String propertyName) {
+			// the default line color
+
+			// if possible get color from preferences
+			final Map<String, Color> colorMap = VisualizationPreferencePage.getColorMapping();
+			// pick a default color
+			int colorIndex = seriesIndex % colorDefault.length;
+			ColorDefinition color = colorDefault[colorIndex];
+
+			// preferred color by name
+			if (colorMap.containsKey(propertyName)) {
+				final Color c = colorMap.get(propertyName);
+				color = ColorDefinitionImpl.create(c.getRed(), c.getGreen(), c.getBlue());
+			}
+			this.lineSeries.setSeriesIdentifier(propertyName);
+			this.lineSeries.getLineAttributes().setColor(color);
+			return;
+		}// getColorDef
+
+		/**
+		 * length of the series
+		 * @return number of data points
+		 */
+		public int getDataSize() {
+			return relativeValues.size();
+		}
+		// Accessors
+		public String getPropertyName() {
+			return propertyName;
+		}
+
+		public void setPropertyName(String propertyName) {
+			this.propertyName = propertyName;
+		}
+
+		public List<Double> getRelativeValues() {
+			return relativeValues;
+		}
+
+		public void setRelativeValues(List<Double> relativeValues) {
+			this.relativeValues = relativeValues;
+		}
+
+		public LineSeries getLineSeries() {
+			return lineSeries;
+		}
+
+		public void setLineSeries(LineSeries lineSeries) {
+			this.lineSeries = lineSeries;
+		}
+
+	
+	}// DataSeries
+	
+} // TimeSeriesCanvas
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesFactory.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesFactory.java
new file mode 100644
index 0000000..2af6b6c
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesFactory.java
@@ -0,0 +1,55 @@
+// TimeSeriesFactory.java
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link ReportControl} instances.
+ */
+public class TimeSeriesFactory implements ReportControlFactory {
+
+	static TimeSeriesFactory INSTANCE = new TimeSeriesFactory();
+
+	/**
+	 * Constants for saving ReportViewPreferences
+	 */
+	public static final String TIME_SERIES_TYPE = "TimeSeries";
+
+	/**
+	 * @param parent
+	 *            the parent of the {@link RelativeValueHistoryPlotter} 
+	 * @return a {@link RelativeValueHistoryPlotter}
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicControlFactory#create(org.eclipse.swt.widgets.Composite)
+	 */
+	public ReportControl create(final Composite parent) {
+		return new RelativeValueHistoryPlotter(parent);
+	}
+
+	/**
+	 * @return TODO JFK
+	 * 
+	 */
+	public String getUniqueControlName() {
+		return TIME_SERIES_TYPE;
+	}
+	
+	/**
+	 * This Factory creates a control associated with an Idenfiable
+	 * @return type of factory
+	 */
+	public String getFactoryType() {
+		return IDENTIFABLE_TYPE;
+	}
+
+} // TimeSeriesFactory
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesView.java b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesView.java
new file mode 100644
index 0000000..08d404f
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/TimeSeriesView.java
@@ -0,0 +1,139 @@
+package org.eclipse.stem.ui.reports.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.ui.views.geographic.map.SelectedReportsManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view contains BIRT output that plots values of variables in STEM
+ * simulations.
+ */
+
+public class TimeSeriesView extends ViewPart implements ISelectionListener {
+
+	/**
+	 * The identifier of the Time Series View
+	 */
+	public static final String ID_TIME_SERIES_VIEW = "org.eclipse.stem.ui.reports.views.TimeSeries"; //$NON-NLS-1$
+	
+	private List<Identifiable> selectedIdentifiables = null;
+
+	/**
+	 * This is the set of decorators extracted from the current
+	 * Scenario/Simulation update labels that can be adapted to produce a
+	 * history of relative values that can be plotted.
+	 */
+	// private final List<Decorator> decoratorsWithHistoryOfRelativeValues = new
+	// ArrayList<Decorator>();
+	/**
+	 * This is the decorator that has been selected by the combo box.
+	 */
+	protected Decorator selectedDecorator;
+
+	private ReportViewer reportViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		reportViewer = new ReportViewer(parent, TimeSeriesFactory.INSTANCE);
+		reportViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(reportViewer);
+
+		// Register with the SelectionService
+		getSite().getWorkbenchWindow().getSelectionService()
+				.addSelectionListener(this);
+
+	} // createPartControl
+
+	/**
+	 * This method is called whenever ANYTHING is selected in the Eclipse
+	 * workbench. It's job is to filter out selections of ISimulation instances
+	 * and update the chart in the TimeSeriesCanvas
+	 * 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(final IWorkbenchPart part,
+			final ISelection selection) {
+
+		// Is this selection changed event coming from our view?
+		if (part != TimeSeriesView.this) {
+			// No
+			if (selectedIdentifiables == null) {
+				// Yes
+				selectedIdentifiables = new ArrayList<Identifiable>();
+			} // if
+			selectedIdentifiables.clear();
+
+			// Is it a structured selection?
+			if (selection instanceof IStructuredSelection) {
+				// Yes
+				final List list = ((IStructuredSelection) selection).toList();
+
+				// Go through everything in the list of things that were
+				// selected and pick out the ones that are ISimulations.
+				for (final Iterator selectionIter = list.iterator(); selectionIter
+						.hasNext();) {
+					final Object obj = selectionIter.next();
+
+					if (obj instanceof Identifiable) {
+						// Make sure that the report is indeed enabled in the context menu						
+						if (SelectedReportsManager.getInstance().isReportEnabled(TimeSeriesFactory.TIME_SERIES_TYPE)) {
+							reportViewer.addMonitor((Identifiable)obj);
+						}
+					} // if
+				} // for each selected item
+			} // if structured selection
+
+		} // if selection changed event coming from our view?
+	} // selectionChanged
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		getSite().getWorkbenchWindow().getSelectionService()
+				.removeSelectionListener(this);
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // TimeSeriesView
diff --git a/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/messages.properties b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/messages.properties
new file mode 100644
index 0000000..a2f72b6
--- /dev/null
+++ b/org.eclipse.stem.ui.reports/src/org/eclipse/stem/ui/reports/views/messages.properties
@@ -0,0 +1,36 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Chart Canvas
+CC.title=Relative Value
+
+# Phase Space
+PH.title=Phase Space
+
+# Time Series and Aggregate Time Series
+TS.TIMELABEL=time
+
+# Axis labels
+XAXISDEF.title=X Axis
+YAXISDEF.title=Y Axis
+
+# Context menu entries
+ContextMenu.LinearTimeScale=Linear Scale
+ContextMenu.LogTimeScale=Log Scale
+ContextMenu.LinearScaling=Linear Scale
+ContextMenu.LogScaling=Log Scale
+ContextMenu.ShowLegend=Show Legend
+ContextMenu.HideLegend=Hide Legend
+# labels
+REPORTVIEW.SELECTREFENCEFOLDER=Select Reference Folder
+
diff --git a/org.eclipse.stem.ui.solvers.fd/.classpath b/org.eclipse.stem.ui.solvers.fd/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.ui.solvers.fd/.project b/org.eclipse.stem.ui.solvers.fd/.project
new file mode 100644
index 0000000..22d7894
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.ui.solvers.fd</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.ui.solvers.fd/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.solvers.fd/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..28f5395
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:55:35 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.solvers.fd/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.solvers.fd/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..6b5d7eb
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: %pluginName

+Bundle-SymbolicName: org.eclipse.stem.ui.solvers.fd;singleton:=true

+Bundle-Version: 1.0.0

+Bundle-ClassPath: .

+Bundle-Activator: org.eclipse.stem.ui.solvers.fd.Activator

+Bundle-Vendor: %providerName

+Bundle-Localization: plugin

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.solvers.fd.presentation

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.core.resources;visibility:=reexport,

+ org.eclipse.stem.solvers.fd;visibility:=reexport,

+ org.eclipse.emf.ecore.xmi;visibility:=reexport,

+ org.eclipse.emf.edit.ui;visibility:=reexport,

+ org.eclipse.ui.ide;visibility:=reexport,

+ org.eclipse.stem.core;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;visibility:=reexport,

+ org.eclipse.stem.ui

+Bundle-ActivationPolicy: lazy

diff --git a/org.eclipse.stem.ui.solvers.fd/build.properties b/org.eclipse.stem.ui.solvers.fd/build.properties
new file mode 100644
index 0000000..400b20a
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/build.properties
@@ -0,0 +1,14 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               icons/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.ui.solvers.fd/icons/full/obj16/FdModelFile.gif b/org.eclipse.stem.ui.solvers.fd/icons/full/obj16/FdModelFile.gif
new file mode 100644
index 0000000..96a88f8
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/icons/full/obj16/FdModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.solvers.fd/icons/full/wizban/NewFd.gif b/org.eclipse.stem.ui.solvers.fd/icons/full/wizban/NewFd.gif
new file mode 100644
index 0000000..4260106
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/icons/full/wizban/NewFd.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.solvers.fd/plugin.properties b/org.eclipse.stem.ui.solvers.fd/plugin.properties
new file mode 100644
index 0000000..2113384
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/plugin.properties
@@ -0,0 +1,76 @@
+

+#/*******************************************************************************

+# * Copyright (c) 2009 IBM Corporation 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:

+# *     IBM Corporation - initial API and implementation

+# *******************************************************************************/

+

+# ====================================================================

+# To code developer:

+#   Do NOT change the properties between this line and the

+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.

+#   Make a new property name, append to the end of the file and change

+#   the code to use the new property.

+# ====================================================================

+

+# ====================================================================

+# %%% END OF TRANSLATED PROPERTIES %%%

+# ====================================================================

+

+

+pluginName = STEM Finite Difference Solver UI

+providerName = Eclipse.org

+

+_UI_FdEditor_menu = &Fd Editor

+

+_UI_CreateChild_menu_item = &New Child

+_UI_CreateSibling_menu_item = N&ew Sibling

+

+_UI_ShowPropertiesView_menu_item = Show &Properties View

+_UI_RefreshViewer_menu_item = &Refresh

+

+_UI_SelectionPage_label = Selection

+_UI_ParentPage_label = Parent

+_UI_ListPage_label = List

+_UI_TreePage_label = Tree

+_UI_TablePage_label = Table

+_UI_TreeWithColumnsPage_label = Tree with Columns

+_UI_ObjectColumn_label = Object

+_UI_SelfColumn_label = Self

+

+_UI_NoObjectSelected = Selected Nothing

+_UI_SingleObjectSelected = Selected Object: {0}

+_UI_MultiObjectSelected = Selected {0} Objects

+

+_UI_OpenEditorError_label = Open Editor

+

+_UI_Wizard_category = Example EMF Model Creation Wizards

+

+_UI_CreateModelError_message = Problems encountered in file "{0}"

+

+_UI_FdModelWizard_label = Fd Model

+_UI_FdModelWizard_description = Create a new Fd model

+

+_UI_FdEditor_label = Fd Model Editor

+

+_UI_FdEditorFilenameDefaultBase = My

+_UI_FdEditorFilenameExtensions = fd

+

+_UI_Wizard_label = New

+

+_WARN_FilenameExtension = The file name must end in ''.{0}''

+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}

+

+_UI_ModelObject = &Model Object

+_UI_XMLEncoding = &XML Encoding

+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1

+_UI_Wizard_initial_object_description = Select a model object to create

+

+_UI_FileConflict_label = File Conflict

+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?

+

diff --git a/org.eclipse.stem.ui.solvers.fd/plugin.xml b/org.eclipse.stem.ui.solvers.fd/plugin.xml
new file mode 100644
index 0000000..095dbd4
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/plugin.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.0"?>

+

+<!--

+ <copyright>

+ </copyright>

+

+ $Id$

+-->

+

+<plugin>

+

+   <extension point="org.eclipse.ui.newWizards">

+      <category

+            id="org.eclipse.emf.ecore.Wizard.category.ID"

+            name="%_UI_Wizard_category"/>

+      <wizard

+            id="org.eclipse.stem.solvers.fd.presentation.FdModelWizardID"

+            name="%_UI_FdModelWizard_label"

+            class="org.eclipse.stem.solvers.fd.presentation.FdModelWizard"

+            category="org.eclipse.emf.ecore.Wizard.category.ID"

+            icon="icons/full/obj16/FdModelFile.gif">

+         <description>%_UI_FdModelWizard_description</description>

+         <selection class="org.eclipse.core.resources.IResource"/>

+      </wizard>

+   </extension>

+

+   <extension point="org.eclipse.ui.editors">

+      <editor

+            id="org.eclipse.stem.solvers.fd.presentation.FdEditorID"

+            name="%_UI_FdEditor_label"

+            icon="icons/full/obj16/FdModelFile.gif"

+            extensions="fd"

+            class="org.eclipse.stem.solvers.fd.presentation.FdEditor"

+            contributorClass="org.eclipse.stem.solvers.fd.presentation.FdActionBarContributor">

+      </editor>

+   </extension>

+ <extension

+        point="org.eclipse.ui.startup">

+     <startup

+           class="org.eclipse.stem.solvers.fd.presentation.FdSolverPropertyEditorAdapterFactory">

+     </startup>

+  </extension>

+</plugin>

diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdActionBarContributor.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdActionBarContributor.java
new file mode 100644
index 0000000..0c5ea3f
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdActionBarContributor.java
@@ -0,0 +1,432 @@
+package org.eclipse.stem.solvers.fd.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+/**

+ * This is the action bar contributor for the Fd model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FdActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(FdEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet");

+				}

+				catch (PartInitException exception) {

+					FdEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(FdEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("fd-settings"));

+		toolBarManager.add(new Separator("fd-additions"));

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(FdEditorPlugin.INSTANCE.getString("_UI_FdEditor_menu"), "org.eclipse.stem.solvers.fdMenuID");

+		menuManager.insertAfter("additions", submenuManager);

+		submenuManager.add(new Separator("settings"));

+		submenuManager.add(new Separator("actions"));

+		submenuManager.add(new Separator("additions"));

+		submenuManager.add(new Separator("additions-end"));

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(FdEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		submenuManager.insertBefore("additions", createChildMenuManager);

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(FdEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		submenuManager.insertBefore("additions", createSiblingMenuManager);

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(FdEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+

+		submenuManager = new MenuManager(FdEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction);

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditor.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditor.java
new file mode 100644
index 0000000..a4555cf
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditor.java
@@ -0,0 +1,1851 @@
+package org.eclipse.stem.solvers.fd.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+

+import org.eclipse.jface.viewers.ColumnWeightData;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.ListViewer;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TableLayout;

+import org.eclipse.jface.viewers.TableViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.custom.CTabFolder;

+

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+

+import org.eclipse.swt.graphics.Point;

+

+import org.eclipse.swt.layout.FillLayout;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Table;

+import org.eclipse.swt.widgets.TableColumn;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.swt.widgets.TreeColumn;

+

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+

+import org.eclipse.ui.dialogs.SaveAsDialog;

+

+import org.eclipse.ui.ide.IGotoMarker;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.ViewerPane;

+

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+

+import org.eclipse.stem.solvers.fd.provider.FdItemProviderAdapterFactory;

+

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+

+/**

+ * This is an example of a Fd model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class FdEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer parentViewer;

+

+	/**

+	 * This shows how a tree view works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewer;

+

+	/**

+	 * This shows how a list view works.

+	 * A list viewer doesn't support icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ListViewer listViewer;

+

+	/**

+	 * This shows how a table view works.

+	 * A table can be used as a list with icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TableViewer tableViewer;

+

+	/**

+	 * This shows how a tree view with columns works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewerWithColumns;

+

+	/**

+	 * This keeps track of the active viewer pane, in the book.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ViewerPane currentViewerPane;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(FdEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(FdEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == FdEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						removedResources.addAll(visitor.getRemovedResources());

+						if (!isDirty()) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 getSite().getPage().closeEditor(FdEditor.this, false);

+									 }

+								 });

+						}

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						changedResources.addAll(visitor.getChangedResources());

+						if (getSite().getPage().getActiveEditor() == FdEditor.this) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 handleActivate();

+									 }

+								 });

+						}

+					}

+				}

+				catch (CoreException exception) {

+					FdEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(FdEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.solvers.fd.editor",

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					FdEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						FdEditorPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"),

+				 getString("_WARN_FileConflict"));

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public FdEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new FdItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			// I don't know if this should be run this deferred

+			// because we might have to give the editor a chance to process the viewer update events

+			// and hence to update the views first.

+			//

+			//

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			runnable.run();

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewerPane(ViewerPane viewerPane) {

+		if (currentViewerPane != viewerPane) {

+			if (currentViewerPane != null) {

+				currentViewerPane.showFocus(false);

+			}

+			currentViewerPane = viewerPane;

+		}

+		setCurrentViewer(currentViewerPane.getViewer());

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp");

+		contextMenu.add(new Separator("additions"));

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.solvers.fd.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.solvers.fd.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				selectionViewer = (TreeViewer)viewerPane.getViewer();

+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+

+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+				selectionViewer.setInput(editingDomain.getResourceSet());

+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+				viewerPane.setTitle(editingDomain.getResourceSet());

+

+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(selectionViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));

+			}

+

+			// Create a page for the parent tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				parentViewer = (TreeViewer)viewerPane.getViewer();

+				parentViewer.setAutoExpandLevel(30);

+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));

+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(parentViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ParentPage_label"));

+			}

+

+			// This is the page for the list viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new ListViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				listViewer = (ListViewer)viewerPane.getViewer();

+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(listViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ListPage_label"));

+			}

+

+			// This is the page for the tree viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				treeViewer = (TreeViewer)viewerPane.getViewer();

+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(treeViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreePage_label"));

+			}

+

+			// This is the page for the table viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TableViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				tableViewer = (TableViewer)viewerPane.getViewer();

+

+				Table table = tableViewer.getTable();

+				TableLayout layout = new TableLayout();

+				table.setLayout(layout);

+				table.setHeaderVisible(true);

+				table.setLinesVisible(true);

+

+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(3, 100, true));

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+

+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(2, 100, true));

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+

+				tableViewer.setColumnProperties(new String [] {"a", "b"});

+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(tableViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TablePage_label"));

+			}

+

+			// This is the page for the table tree viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), FdEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();

+

+				Tree tree = treeViewerWithColumns.getTree();

+				tree.setLayoutData(new FillLayout());

+				tree.setHeaderVisible(true);

+				tree.setLinesVisible(true);

+

+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+				objectColumn.setWidth(250);

+

+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+				selfColumn.setWidth(200);

+

+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});

+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(treeViewerWithColumns);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));

+			}

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, "");

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label"));

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						FdEditor.this.setSelectionToViewer(selection);

+						FdEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				// If it's the selection viewer, then we want it to select the same selection as this selection.

+				//

+				if (currentViewerPane.getViewer() == selectionViewer) {

+					ArrayList<Object> selectionList = new ArrayList<Object>();

+					selectionList.add(selectedElement);

+					while (selectedElements.hasNext()) {

+						selectionList.add(selectedElements.next());

+					}

+

+					// Set the selection to the widget.

+					//

+					selectionViewer.setSelection(new StructuredSelection(selectionList));

+				}

+				else {

+					// Set the input to the widget.

+					//

+					if (currentViewerPane.getViewer().getInput() != selectedElement) {

+						currentViewerPane.getViewer().setInput(selectedElement);

+						currentViewerPane.setTitle(selectedElement);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			FdEditorPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			FdEditorPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		if (currentViewerPane != null) {

+			currentViewerPane.setFocus();

+		}

+		else {

+			getControl(getActivePage()).setFocus();

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage("");

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return FdEditorPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return FdEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return true;

+	}

+}

diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditorPlugin.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditorPlugin.java
new file mode 100644
index 0000000..861b191
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdEditorPlugin.java
@@ -0,0 +1,108 @@
+package org.eclipse.stem.solvers.fd.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+

+/**

+ * This is the central singleton for the Fd editor plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class FdEditorPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final FdEditorPlugin INSTANCE = new FdEditorPlugin();

+	

+	/**

+	 * 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 FdEditorPlugin() {

+		super

+			(new ResourceLocator [] {

+				CoreEditPlugin.INSTANCE,

+				EcoreEditPlugin.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 EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public Implementation() {

+			super();

+	

+			// Remember the static instance.

+			//

+			plugin = this;

+		}

+	}

+

+}

diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdModelWizard.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdModelWizard.java
new file mode 100644
index 0000000..1357733
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdModelWizard.java
@@ -0,0 +1,636 @@
+package org.eclipse.stem.solvers.fd.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.emf.common.CommonPlugin;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.xmi.XMLResource;

+

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+

+import org.eclipse.jface.viewers.IStructuredSelection;

+

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.ModifyEvent;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import org.eclipse.stem.solvers.fd.FdFactory;

+import org.eclipse.stem.solvers.fd.FdPackage;

+import org.eclipse.stem.solvers.fd.provider.FdEditPlugin;

+

+

+import org.eclipse.core.runtime.Path;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class FdModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(FdEditorPlugin.INSTANCE.getString("_UI_FdEditorFilenameExtensions").split("\\s*,\\s*")));

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		FdEditorPlugin.INSTANCE.getString("_UI_FdEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected FdPackage fdPackage = FdPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected FdFactory fdFactory = fdPackage.getFdFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected FdModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected FdModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(FdEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(FdEditorPlugin.INSTANCE.getImage("full/wizban/NewFd")));

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : fdPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)fdPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = fdFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							FdEditorPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), FdEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			FdEditorPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class FdModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public FdModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";

+					setErrorMessage(FdEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class FdModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public FdModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE); {

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(FdEditorPlugin.INSTANCE.getString("_UI_ModelObject"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(FdEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return FdEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");

+			}

+			catch(MissingResourceException mre) {

+				FdEditorPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(FdEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new FdModelWizardNewFileCreationPage("Whatever", selection);

+		newFileCreationPage.setTitle(FdEditorPlugin.INSTANCE.getString("_UI_FdModelWizard_label"));

+		newFileCreationPage.setDescription(FdEditorPlugin.INSTANCE.getString("_UI_FdModelWizard_description"));

+		newFileCreationPage.setFileName(FdEditorPlugin.INSTANCE.getString("_UI_FdEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = FdEditorPlugin.INSTANCE.getString("_UI_FdEditorFilenameDefaultBase");

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new FdModelWizardInitialObjectCreationPage("Whatever2");

+		initialObjectCreationPage.setTitle(FdEditorPlugin.INSTANCE.getString("_UI_FdModelWizard_label"));

+		initialObjectCreationPage.setDescription(FdEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverAdapter.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverAdapter.java
new file mode 100644
index 0000000..9d248e2
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.solvers.fd.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.core.solver.SolverPropertyComposite;
+import org.eclipse.stem.core.solver.SolverPropertyEditor;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapter;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ *  
+ * Adapter for Property Editor
+ *
+ */
+public class FdSolverAdapter extends
+		SolverPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public SolverPropertyEditor createSolverPropertyEditor(
+			SolverPropertyComposite solverPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new FdSolverPropertyEditor(
+				solverPropertyComposite, style,
+				(Solver) getTarget(), projectValidator);
+	} // createSolverPropertyEditor
+
+} // FdSolverAdapter
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditor.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditor.java
new file mode 100644
index 0000000..097851e
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditor.java
@@ -0,0 +1,170 @@
+package org.eclipse.stem.solvers.fd.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.solvers.fd.FdFactory;
+import org.eclipse.stem.solvers.fd.FdPackage;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class FdSolverPropertyEditor extends org.eclipse.stem.core.solver.SolverPropertyEditor {
+
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public FdSolverPropertyEditor(Composite parent,
+			int style, Solver solver,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(solver, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+		
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(solver, IItemPropertySource.class);
+		
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(solver);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedSolverProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				final Label unitLabel = new Label(this, SWT.NONE);
+				unitLabel.setText(pspa.getPropertyUnits(descriptor));
+				final GridData unitLabelGD = new GridData(GridData.END);
+				unitLabelGD.verticalAlignment = GridData.CENTER;
+				unitLabel.setLayoutData(unitLabelGD);
+
+			} // if user specified
+		} // for each solver property
+	}
+	
+	/**
+	 * @param feature
+	 * @return <code>true</code> if the feature is a dublin core feature 
+	 * that is specified by a user.
+	 */
+	public static boolean isUserSpecifiedSolverProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		final EClass containingClass = feature.getEContainingClass();
+		// Is it a disease model property?
+		if (containingClass.equals(FdPackage.eINSTANCE.getFiniteDifference())) {
+			retValue = true;
+		} // if a disease model property
+		return retValue;
+	} // isUserSpecifiedDiseaseModelProperty
+
+	protected final Map<EStructuralFeature, Text> map = new HashMap<EStructuralFeature, Text>();
+	protected String errorMessage;
+
+	public FdSolverPropertyEditor(Composite parent, int style) {
+		super(parent,style);
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(Solver solver) {
+		super.populate(solver);
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+		
+			switch (entry.getKey().getFeatureID()) {
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+	}
+
+	@Override
+	public boolean validate() {
+		boolean retValue = true;
+		return retValue;
+	} // validate
+
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	@Override
+	public Solver createAndPopulateSolver() {
+		Solver retValue = FdFactory.eINSTANCE.createFiniteDifference();
+		this.populate(retValue);
+		return retValue;
+	}
+
+
+} // RkSolverPropertyEditor
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapter.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapter.java
new file mode 100644
index 0000000..31db135
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapter.java
@@ -0,0 +1,33 @@
+package org.eclipse.stem.solvers.fd.presentation;
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.core.solver.SolverPropertyComposite;
+import org.eclipse.stem.core.solver.SolverPropertyEditor;
+import org.eclipse.swt.events.ModifyListener;
+
+public class FdSolverPropertyEditorAdapter extends org.eclipse.stem.core.solver.SolverPropertyEditorAdapter
+		implements Adapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public SolverPropertyEditor createSolverPropertyEditor(
+			SolverPropertyComposite solverPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new FdSolverPropertyEditor(
+				solverPropertyComposite, style,
+				(Solver) getTarget(), projectValidator);
+	} // createSolverPropertyEditor
+
+} // SolverPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..afdf8c7
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyEditorAdapterFactory.java
@@ -0,0 +1,60 @@
+// DiseaseModelPropertyEditorAdapterFactory.java
+package org.eclipse.stem.solvers.fd.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapter;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapterFactory;
+import org.eclipse.stem.solvers.fd.util.FdAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ *
+ */
+public class FdSolverPropertyEditorAdapterFactory extends FdAdapterFactory 
+	implements SolverPropertyEditorAdapterFactory, IStartup {
+
+	/**
+	 * 
+	 */
+	public FdSolverPropertyEditorAdapterFactory() {
+		super();
+		SolverPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createFiniteDifferenceAdapter() {
+		return new FdSolverAdapter();
+	}
+
+	/**
+	 * 
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == SolverPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} 
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..8b56359
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/solvers/fd/presentation/FdSolverPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,106 @@
+// StandardPropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.solvers.fd.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.core.solver.util.SolverAdapterFactory;
+import org.eclipse.stem.solvers.fd.FdPackage;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.solvers.fd.SolverMessages;
+
+/**
+ * This class is used to NLS'd strings for {@link DiseaseModel} properties. 
+ */
+public class FdSolverPropertyStringProviderAdapterFactory extends
+	 SolverAdapterFactory implements PropertyStringProviderAdapterFactory {
+
+	
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public FdSolverPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		if(type == FdPackage.eINSTANCE) return true;
+		return  super.isFactoryForType(type) || type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createSolverAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new SolverPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createDiseaseModelAdapter
+
+	/**
+	 * This class represents 
+	 */
+	public static class SolverPropertyStringProviderAdapter extends
+			PropertyStringProviderAdapter {
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd name of the property to display to the user
+		 */
+		public String getPropertyName(IItemPropertyDescriptor descriptor) {	
+			return SolverMessages
+					.getString(((EStructuralFeature) descriptor
+							.getFeature(null)).getName());
+		} // getPropertyName
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd tool tip text that describes the property
+		 */
+		public String getPropertyToolTip(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return SolverMessages.getString(feature.getName()
+					+ TT_SUFFIX);
+		} // getPropertyToolTip
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd text that represents the units of the
+		 *         property
+		 */
+		public String getPropertyUnits(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return SolverMessages.getString(feature.getName()
+					+ UNIT_SUFFIX);
+		} // getPropertyUnits
+
+	} // StandardPropertyStringProviderAdapter
+} // StandardPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/Activator.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/Activator.java
new file mode 100644
index 0000000..8bcf06d
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/Activator.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.ui.solvers.fd;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.solvers.fd.presentation.FdEditor;
+import org.eclipse.stem.solvers.fd.presentation.FdSolverPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/*******************************************************************************
+ * Copyright (c) 2006 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The symbolic identifier for this plug-in
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui.solver.fd"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new FdSolverPropertyStringProviderAdapterFactory();
+		new FdEditor();
+	} // start
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+
+} // Activator
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/SolverMessages.java b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/SolverMessages.java
new file mode 100644
index 0000000..209a5af
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/SolverMessages.java
@@ -0,0 +1,46 @@
+// DiseaseWizardMessages.java
+package org.eclipse.stem.ui.solvers.fd;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class SolverMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.solvers.fd.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private SolverMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // SolverMessages
diff --git a/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/messages.properties b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/messages.properties
new file mode 100644
index 0000000..6d60cdf
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.fd/src/org/eclipse/stem/ui/solvers/fd/messages.properties
@@ -0,0 +1,10 @@
+#/*******************************************************************************

+# * Copyright (c) 2009 IBM Corporation 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:

+# *     IBM Corporation - initial API and implementation

+# *******************************************************************************/

diff --git a/org.eclipse.stem.ui.solvers.rk/.classpath b/org.eclipse.stem.ui.solvers.rk/.classpath
new file mode 100644
index 0000000..45f024e
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.stem.ui.solvers.rk/.project b/org.eclipse.stem.ui.solvers.rk/.project
new file mode 100644
index 0000000..3a7296c
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.stem.ui.solvers.rk</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.stem.ui.solvers.rk/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui.solvers.rk/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ee47df4
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,21 @@
+#Tue Sep 01 16:52:58 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui.solvers.rk/META-INF/MANIFEST.MF b/org.eclipse.stem.ui.solvers.rk/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..644e240
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: org.eclipse.stem.ui.solvers.rk Plug-in

+Bundle-SymbolicName: org.eclipse.stem.ui.solvers.rk;singleton:=true

+Bundle-Version: 1.0.0

+Require-Bundle: org.eclipse.emf.ecore,

+ org.eclipse.stem.core,

+ org.eclipse.stem.solvers.rk;visibility:=reexport,

+ org.eclipse.emf.ecore.edit;bundle-version="2.4.1",

+ org.eclipse.osgi;bundle-version="3.4.3",

+ org.eclipse.core.runtime;bundle-version="3.4.0",

+ org.eclipse.core.resources;bundle-version="3.4.2",

+ org.eclipse.ui.ide;bundle-version="3.4.2",

+ org.eclipse.stem.ui

+Bundle-ActivationPolicy: lazy

+Bundle-Activator: org.eclipse.stem.ui.solvers.rk.Activator

+Bundle-RequiredExecutionEnvironment: J2SE-1.5

+Export-Package: org.eclipse.stem.solvers.rk.presentation

diff --git a/org.eclipse.stem.ui.solvers.rk/build.properties b/org.eclipse.stem.ui.solvers.rk/build.properties
new file mode 100644
index 0000000..400b20a
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/build.properties
@@ -0,0 +1,14 @@
+

+# <copyright>

+# </copyright>

+#

+# $Id$

+

+bin.includes = .,\

+               icons/,\

+               META-INF/,\

+               plugin.xml,\

+               plugin.properties

+jars.compile.order = .

+source.. = src/

+output.. = bin/

diff --git a/org.eclipse.stem.ui.solvers.rk/icons/full/obj16/RkModelFile.gif b/org.eclipse.stem.ui.solvers.rk/icons/full/obj16/RkModelFile.gif
new file mode 100644
index 0000000..dd4fa0a
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/icons/full/obj16/RkModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.solvers.rk/icons/full/wizban/NewRk.gif b/org.eclipse.stem.ui.solvers.rk/icons/full/wizban/NewRk.gif
new file mode 100644
index 0000000..e52cb90
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/icons/full/wizban/NewRk.gif
Binary files differ
diff --git a/org.eclipse.stem.ui.solvers.rk/plugin.properties b/org.eclipse.stem.ui.solvers.rk/plugin.properties
new file mode 100644
index 0000000..01fa385
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/plugin.properties
@@ -0,0 +1,76 @@
+

+#/*******************************************************************************

+# * Copyright (c) 2009 IBM Corporation 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:

+# *     IBM Corporation - initial API and implementation

+# *******************************************************************************/

+

+# ====================================================================

+# To code developer:

+#   Do NOT change the properties between this line and the

+#   "%%% END OF TRANSLATED PROPERTIES %%%" line.

+#   Make a new property name, append to the end of the file and change

+#   the code to use the new property.

+# ====================================================================

+

+# ====================================================================

+# %%% END OF TRANSLATED PROPERTIES %%%

+# ====================================================================

+

+

+pluginName = STEM Runge Kutta Solver UI

+providerName = Eclipse.org

+

+_UI_RkEditor_menu = &Rk Editor

+

+_UI_CreateChild_menu_item = &New Child

+_UI_CreateSibling_menu_item = N&ew Sibling

+

+_UI_ShowPropertiesView_menu_item = Show &Properties View

+_UI_RefreshViewer_menu_item = &Refresh

+

+_UI_SelectionPage_label = Selection

+_UI_ParentPage_label = Parent

+_UI_ListPage_label = List

+_UI_TreePage_label = Tree

+_UI_TablePage_label = Table

+_UI_TreeWithColumnsPage_label = Tree with Columns

+_UI_ObjectColumn_label = Object

+_UI_SelfColumn_label = Self

+

+_UI_NoObjectSelected = Selected Nothing

+_UI_SingleObjectSelected = Selected Object: {0}

+_UI_MultiObjectSelected = Selected {0} Objects

+

+_UI_OpenEditorError_label = Open Editor

+

+_UI_Wizard_category = Example EMF Model Creation Wizards

+

+_UI_CreateModelError_message = Problems encountered in file "{0}"

+

+_UI_RkModelWizard_label = Rk Model

+_UI_RkModelWizard_description = Create a new Rk model

+

+_UI_RkEditor_label = Rk Model Editor

+

+_UI_RkEditorFilenameDefaultBase = My

+_UI_RkEditorFilenameExtensions = rk

+

+_UI_Wizard_label = New

+

+_WARN_FilenameExtension = The file name must end in ''.{0}''

+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}

+

+_UI_ModelObject = &Model Object

+_UI_XMLEncoding = &XML Encoding

+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1

+_UI_Wizard_initial_object_description = Select a model object to create

+

+_UI_FileConflict_label = File Conflict

+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor.  Do you wish to discard this editor's changes?

+

diff --git a/org.eclipse.stem.ui.solvers.rk/plugin.xml b/org.eclipse.stem.ui.solvers.rk/plugin.xml
new file mode 100644
index 0000000..21aa655
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ <copyright>
+ </copyright>
+
+ $Id: plugin.xml,v 1.4 2009/03/11 03:45:26 sedlund Exp $
+-->
+
+<plugin>
+    <extension
+        point="org.eclipse.ui.startup">
+     <startup
+           class="org.eclipse.stem.solvers.rk.presentation.RkSolverPropertyEditorAdapterFactory">
+     </startup>
+  </extension>
+</plugin>
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkActionBarContributor.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkActionBarContributor.java
new file mode 100644
index 0000000..d82bd04
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkActionBarContributor.java
@@ -0,0 +1,432 @@
+package org.eclipse.stem.solvers.rk.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+/**

+ * This is the action bar contributor for the Rk model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class RkActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(RkEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet");

+				}

+				catch (PartInitException exception) {

+					RkEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(RkEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("rk-settings"));

+		toolBarManager.add(new Separator("rk-additions"));

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(RkEditorPlugin.INSTANCE.getString("_UI_RkEditor_menu"), "org.eclipse.stem.solvers.rkMenuID");

+		menuManager.insertAfter("additions", submenuManager);

+		submenuManager.add(new Separator("settings"));

+		submenuManager.add(new Separator("actions"));

+		submenuManager.add(new Separator("additions"));

+		submenuManager.add(new Separator("additions-end"));

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(RkEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		submenuManager.insertBefore("additions", createChildMenuManager);

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(RkEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		submenuManager.insertBefore("additions", createSiblingMenuManager);

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(RkEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+

+		submenuManager = new MenuManager(RkEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager);

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions"));

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction);

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction);

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditor.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditor.java
new file mode 100644
index 0000000..b6accae
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditor.java
@@ -0,0 +1,1851 @@
+package org.eclipse.stem.solvers.rk.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+

+import org.eclipse.jface.viewers.ColumnWeightData;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.ListViewer;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TableLayout;

+import org.eclipse.jface.viewers.TableViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.custom.CTabFolder;

+

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+

+import org.eclipse.swt.graphics.Point;

+

+import org.eclipse.swt.layout.FillLayout;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Table;

+import org.eclipse.swt.widgets.TableColumn;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.swt.widgets.TreeColumn;

+

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+

+import org.eclipse.ui.dialogs.SaveAsDialog;

+

+import org.eclipse.ui.ide.IGotoMarker;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.ViewerPane;

+

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+

+import org.eclipse.stem.solvers.rk.provider.RkItemProviderAdapterFactory;

+

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+

+/**

+ * This is an example of a Rk model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class RkEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer parentViewer;

+

+	/**

+	 * This shows how a tree view works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewer;

+

+	/**

+	 * This shows how a list view works.

+	 * A list viewer doesn't support icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ListViewer listViewer;

+

+	/**

+	 * This shows how a table view works.

+	 * A table can be used as a list with icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TableViewer tableViewer;

+

+	/**

+	 * This shows how a tree view with columns works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewerWithColumns;

+

+	/**

+	 * This keeps track of the active viewer pane, in the book.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ViewerPane currentViewerPane;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(RkEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(RkEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == RkEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						removedResources.addAll(visitor.getRemovedResources());

+						if (!isDirty()) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 getSite().getPage().closeEditor(RkEditor.this, false);

+									 }

+								 });

+						}

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						changedResources.addAll(visitor.getChangedResources());

+						if (getSite().getPage().getActiveEditor() == RkEditor.this) {

+							getSite().getShell().getDisplay().asyncExec

+								(new Runnable() {

+									 public void run() {

+										 handleActivate();

+									 }

+								 });

+						}

+					}

+				}

+				catch (CoreException exception) {

+					RkEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(RkEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.solvers.rk.editor",

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					RkEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						RkEditorPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"),

+				 getString("_WARN_FileConflict"));

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public RkEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new RkItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			// I don't know if this should be run this deferred

+			// because we might have to give the editor a chance to process the viewer update events

+			// and hence to update the views first.

+			//

+			//

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			runnable.run();

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewerPane(ViewerPane viewerPane) {

+		if (currentViewerPane != viewerPane) {

+			if (currentViewerPane != null) {

+				currentViewerPane.showFocus(false);

+			}

+			currentViewerPane = viewerPane;

+		}

+		setCurrentViewer(currentViewerPane.getViewer());

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp");

+		contextMenu.add(new Separator("additions"));

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.solvers.rk.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.solvers.rk.editor",

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()),

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				selectionViewer = (TreeViewer)viewerPane.getViewer();

+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+

+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+				selectionViewer.setInput(editingDomain.getResourceSet());

+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+				viewerPane.setTitle(editingDomain.getResourceSet());

+

+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(selectionViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_SelectionPage_label"));

+			}

+

+			// Create a page for the parent tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				parentViewer = (TreeViewer)viewerPane.getViewer();

+				parentViewer.setAutoExpandLevel(30);

+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));

+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(parentViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ParentPage_label"));

+			}

+

+			// This is the page for the list viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new ListViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				listViewer = (ListViewer)viewerPane.getViewer();

+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(listViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ListPage_label"));

+			}

+

+			// This is the page for the tree viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				treeViewer = (TreeViewer)viewerPane.getViewer();

+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(treeViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreePage_label"));

+			}

+

+			// This is the page for the table viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TableViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				tableViewer = (TableViewer)viewerPane.getViewer();

+

+				Table table = tableViewer.getTable();

+				TableLayout layout = new TableLayout();

+				table.setLayout(layout);

+				table.setHeaderVisible(true);

+				table.setLinesVisible(true);

+

+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(3, 100, true));

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+

+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(2, 100, true));

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+

+				tableViewer.setColumnProperties(new String [] {"a", "b"});

+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(tableViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TablePage_label"));

+			}

+

+			// This is the page for the table tree viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), RkEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();

+

+				Tree tree = treeViewerWithColumns.getTree();

+				tree.setLayoutData(new FillLayout());

+				tree.setHeaderVisible(true);

+				tree.setLinesVisible(true);

+

+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);

+				objectColumn.setText(getString("_UI_ObjectColumn_label"));

+				objectColumn.setResizable(true);

+				objectColumn.setWidth(250);

+

+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);

+				selfColumn.setText(getString("_UI_SelfColumn_label"));

+				selfColumn.setResizable(true);

+				selfColumn.setWidth(200);

+

+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});

+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(treeViewerWithColumns);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));

+			}

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, "");

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label"));

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						RkEditor.this.setSelectionToViewer(selection);

+						RkEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				// If it's the selection viewer, then we want it to select the same selection as this selection.

+				//

+				if (currentViewerPane.getViewer() == selectionViewer) {

+					ArrayList<Object> selectionList = new ArrayList<Object>();

+					selectionList.add(selectedElement);

+					while (selectedElements.hasNext()) {

+						selectionList.add(selectedElements.next());

+					}

+

+					// Set the selection to the widget.

+					//

+					selectionViewer.setSelection(new StructuredSelection(selectionList));

+				}

+				else {

+					// Set the input to the widget.

+					//

+					if (currentViewerPane.getViewer().getInput() != selectedElement) {

+						currentViewerPane.getViewer().setInput(selectedElement);

+						currentViewerPane.setTitle(selectedElement);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			RkEditorPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			RkEditorPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		if (currentViewerPane != null) {

+			currentViewerPane.setFocus();

+		}

+		else {

+			getControl(getActivePage()).setFocus();

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected"));

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage("");

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return RkEditorPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return RkEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return true;

+	}

+}

diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditorPlugin.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditorPlugin.java
new file mode 100644
index 0000000..295f8f6
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkEditorPlugin.java
@@ -0,0 +1,119 @@
+package org.eclipse.stem.solvers.rk.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import org.eclipse.emf.common.EMFPlugin;

+

+import org.eclipse.emf.common.ui.EclipseUIPlugin;

+

+import org.eclipse.emf.common.util.ResourceLocator;

+

+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;

+

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+import org.osgi.framework.BundleContext;

+

+/**

+ * This is the central singleton for the Rk editor plugin.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("synthetic-access")

+public final class RkEditorPlugin extends EMFPlugin {

+	/**

+	 * Keep track of the singleton.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final RkEditorPlugin INSTANCE = new RkEditorPlugin();

+	

+	/**

+	 * 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 RkEditorPlugin() {

+		super

+			(new ResourceLocator [] {

+				CoreEditPlugin.INSTANCE,

+				EcoreEditPlugin.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 EclipseUIPlugin {

+		/**

+		 * Creates an instance.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public Implementation() {

+			super();

+	

+			// Remember the static instance.

+			//

+			plugin = this;

+		}

+		

+		/**

+		 * 

+		 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+		 */

+		@Override

+		public void start(BundleContext context) throws Exception {

+			super.start(context);

+			new RkSolverPropertyEditorAdapterFactory();

+		}

+	}

+

+}

diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkModelWizard.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkModelWizard.java
new file mode 100644
index 0000000..ca900ab
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkModelWizard.java
@@ -0,0 +1,636 @@
+package org.eclipse.stem.solvers.rk.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.emf.common.CommonPlugin;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.xmi.XMLResource;

+

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+

+import org.eclipse.jface.viewers.IStructuredSelection;

+

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.ModifyEvent;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import org.eclipse.stem.solvers.rk.RkFactory;

+import org.eclipse.stem.solvers.rk.RkPackage;

+import org.eclipse.stem.solvers.rk.provider.RkEditPlugin;

+

+

+import org.eclipse.core.runtime.Path;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class RkModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(RkEditorPlugin.INSTANCE.getString("_UI_RkEditorFilenameExtensions").split("\\s*,\\s*")));

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		RkEditorPlugin.INSTANCE.getString("_UI_RkEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected RkPackage rkPackage = RkPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected RkFactory rkFactory = rkPackage.getRkFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected RkModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected RkModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(RkEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(RkEditorPlugin.INSTANCE.getImage("full/wizban/NewRk")));

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : rkPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)rkPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = rkFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							RkEditorPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), RkEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			RkEditorPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class RkModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public RkModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";

+					setErrorMessage(RkEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class RkModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public RkModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE); {

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(RkEditorPlugin.INSTANCE.getString("_UI_ModelObject"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(RkEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return RkEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");

+			}

+			catch(MissingResourceException mre) {

+				RkEditorPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(RkEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new RkModelWizardNewFileCreationPage("Whatever", selection);

+		newFileCreationPage.setTitle(RkEditorPlugin.INSTANCE.getString("_UI_RkModelWizard_label"));

+		newFileCreationPage.setDescription(RkEditorPlugin.INSTANCE.getString("_UI_RkModelWizard_description"));

+		newFileCreationPage.setFileName(RkEditorPlugin.INSTANCE.getString("_UI_RkEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = RkEditorPlugin.INSTANCE.getString("_UI_RkEditorFilenameDefaultBase");

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new RkModelWizardInitialObjectCreationPage("Whatever2");

+		initialObjectCreationPage.setTitle(RkEditorPlugin.INSTANCE.getString("_UI_RkModelWizard_label"));

+		initialObjectCreationPage.setDescription(RkEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverAdapter.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverAdapter.java
new file mode 100644
index 0000000..6da5e33
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.stem.solvers.rk.presentation;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.core.solver.SolverPropertyComposite;
+import org.eclipse.stem.core.solver.SolverPropertyEditor;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapter;
+import org.eclipse.swt.events.ModifyListener;
+
+/**
+ *  
+ * Adapter for Property Editor
+ *
+ */
+public class RkSolverAdapter extends
+		SolverPropertyEditorAdapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public SolverPropertyEditor createSolverPropertyEditor(
+			SolverPropertyComposite solverPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new RkSolverPropertyEditor(
+				solverPropertyComposite, style,
+				(Solver) getTarget(), projectValidator);
+	} // createSolverPropertyEditor
+
+} // RkSolverAdapter
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditor.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditor.java
new file mode 100644
index 0000000..6475de3
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditor.java
@@ -0,0 +1,174 @@
+package org.eclipse.stem.solvers.rk.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.solvers.rk.RkFactory;
+import org.eclipse.stem.solvers.rk.RkPackage;
+import org.eclipse.stem.solvers.rk.RungeKutta;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class RkSolverPropertyEditor extends org.eclipse.stem.core.solver.SolverPropertyEditor {
+
+	/**
+	 * @param parent
+	 * @param style
+	 * @param diseaseModel
+	 * @param projectValidator
+	 */
+	public RkSolverPropertyEditor(Composite parent,
+			int style, Solver solver,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 3;
+		setLayout(gridLayout);
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the disease model
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(solver, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+		
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(solver, IItemPropertySource.class);
+		
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(solver);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a disease model property that the user should specify?
+			if (isUserSpecifiedSolverProperty(feature)) {
+				// Yes
+				final Label label = new Label(this, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+
+				final GridData labelGD = new GridData(GridData.BEGINNING);
+				labelGD.grabExcessHorizontalSpace = true;
+				labelGD.horizontalAlignment = SWT.FILL;
+				labelGD.horizontalIndent = 0;
+				label.setLayoutData(labelGD);
+
+				// Get a string value for the default value of the feature
+
+				final String defaultValueString = getPropertyDefaultValueString(descriptor);
+
+				final Text text = new Text(this, SWT.BORDER | SWT.TRAIL);
+				text.setText(defaultValueString);
+				text.setToolTipText(pspa.getPropertyToolTip(descriptor));
+				map.put(feature, text);
+
+				final GridData textGD = new GridData(GridData.END);
+				textGD.grabExcessHorizontalSpace = true;
+				textGD.horizontalAlignment = SWT.FILL;
+				text.setLayoutData(textGD);
+
+				text.addModifyListener(projectValidator);
+
+				final Label unitLabel = new Label(this, SWT.NONE);
+				unitLabel.setText(pspa.getPropertyUnits(descriptor));
+				final GridData unitLabelGD = new GridData(GridData.END);
+				unitLabelGD.verticalAlignment = GridData.CENTER;
+				unitLabel.setLayoutData(unitLabelGD);
+
+			} // if user specified
+		} // for each solver property
+	}
+	
+	/**
+	 * @param feature
+	 * @return <code>true</code> if the feature is a dublin core feature 
+	 * that is specified by a user.
+	 */
+	public static boolean isUserSpecifiedSolverProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		final EClass containingClass = feature.getEContainingClass();
+		// Is it a disease model property?
+		if (containingClass.equals(RkPackage.eINSTANCE.getRungeKutta())) {
+			retValue = true;
+		} // if a disease model property
+		return retValue;
+	} // isUserSpecifiedDiseaseModelProperty
+
+	protected final Map<EStructuralFeature, Text> map = new HashMap<EStructuralFeature, Text>();
+	protected String errorMessage;
+
+	public RkSolverPropertyEditor(Composite parent, int style) {
+		super(parent,style);
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.StandardDiseaseModelPropertyEditor#populate(org.eclipse.stem.diseasemodels.standard.DiseaseModel)
+	 */
+	@Override
+	public void populate(Solver solver) {
+		super.populate(solver);
+		
+		for (final Map.Entry<EStructuralFeature, Text> entry : map.entrySet()) {
+			double dVal = 0.0;
+		
+			switch (entry.getKey().getFeatureID()) {
+			case RkPackage.RUNGE_KUTTA__RELATIVE_TOLERANCE:
+				dVal = (new Double(entry.getValue().getText())).doubleValue();
+				((RungeKutta) solver).setRelativeTolerance(dVal);
+				break;
+			default:
+				break;
+			} // switch
+		} // for each Map.entry
+	}
+
+	public boolean validate() {
+		boolean retValue = true;
+		return retValue;
+	} // validate
+
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	@Override
+	public Solver createAndPopulateSolver() {
+		Solver retValue = RkFactory.eINSTANCE.createRungeKutta();
+		populate(retValue);
+		return retValue;
+	}
+} // RkSolverPropertyEditor
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapter.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapter.java
new file mode 100644
index 0000000..1821029
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapter.java
@@ -0,0 +1,33 @@
+package org.eclipse.stem.solvers.rk.presentation;
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.core.solver.SolverPropertyComposite;
+import org.eclipse.stem.core.solver.SolverPropertyEditor;
+import org.eclipse.swt.events.ModifyListener;
+
+public class RkSolverPropertyEditorAdapter extends org.eclipse.stem.core.solver.SolverPropertyEditorAdapter
+		implements Adapter {
+
+	/**
+	 * 
+	 */
+	@Override
+	public SolverPropertyEditor createSolverPropertyEditor(
+			SolverPropertyComposite solverPropertyComposite,
+			int style, ModifyListener projectValidator) {
+		return new RkSolverPropertyEditor(
+				solverPropertyComposite, style,
+				(Solver) getTarget(), projectValidator);
+	} // createSolverPropertyEditor
+
+} // SolverPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..f93b59c
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyEditorAdapterFactory.java
@@ -0,0 +1,60 @@
+// DiseaseModelPropertyEditorAdapterFactory.java
+package org.eclipse.stem.solvers.rk.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapter;
+import org.eclipse.stem.core.solver.SolverPropertyEditorAdapterFactory;
+import org.eclipse.stem.solvers.rk.util.RkAdapterFactory;
+import org.eclipse.ui.IStartup;
+
+/**
+ *
+ */
+public class RkSolverPropertyEditorAdapterFactory extends RkAdapterFactory 
+	implements SolverPropertyEditorAdapterFactory, IStartup {
+
+	/**
+	 * 
+	 */
+	public RkSolverPropertyEditorAdapterFactory() {
+		super();
+		SolverPropertyEditorAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.ui.IStartup#earlyStartup()
+	 */
+	public void earlyStartup() {
+		// Nothing to do here. This method is called after the constructor has
+		// run which is the entire point of early activation which causes the
+		// factory to be added to the PropertyStringProviderAdapterFactory.INSTANCE
+	}
+
+	/**
+	 * 
+	 */
+	@Override
+	public Adapter createRungeKuttaAdapter() {
+		return new RkSolverAdapter();
+	}
+
+	/**
+	 * 
+	 */
+	public boolean isFactoryForType(Object type) {
+		return type == SolverPropertyEditorAdapter.class
+				|| super.isFactoryForType(type);
+	}
+} 
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..d5c28ed
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/solvers/rk/presentation/RkSolverPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,106 @@
+// StandardPropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.solvers.rk.presentation;
+
+/******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.core.solver.util.SolverAdapterFactory;
+import org.eclipse.stem.solvers.rk.RkPackage;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.solvers.rk.SolverMessages;
+
+/**
+ * This class is used to NLS'd strings for {@link DiseaseModel} properties. 
+ */
+public class RkSolverPropertyStringProviderAdapterFactory extends
+	 SolverAdapterFactory implements PropertyStringProviderAdapterFactory {
+
+	
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public RkSolverPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+	
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		if(type == RkPackage.eINSTANCE) return true;
+		return  super.isFactoryForType(type) || type == PropertyStringProvider.class;
+	}
+
+	/**
+	 * @see org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory#createDiseaseModelAdapter()
+	 */
+	@Override
+	public Adapter createSolverAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new SolverPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createDiseaseModelAdapter
+
+	/**
+	 * This class represents 
+	 */
+	public static class SolverPropertyStringProviderAdapter extends
+			PropertyStringProviderAdapter {
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd name of the property to display to the user
+		 */
+		public String getPropertyName(IItemPropertyDescriptor descriptor) {	
+			return SolverMessages
+					.getString(((EStructuralFeature) descriptor
+							.getFeature(null)).getName());
+		} // getPropertyName
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd tool tip text that describes the property
+		 */
+		public String getPropertyToolTip(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return SolverMessages.getString(feature.getName()
+					+ TT_SUFFIX);
+		} // getPropertyToolTip
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd text that represents the units of the
+		 *         property
+		 */
+		public String getPropertyUnits(
+				IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return SolverMessages.getString(feature.getName()
+					+ UNIT_SUFFIX);
+		} // getPropertyUnits
+
+	} // StandardPropertyStringProviderAdapter
+} // StandardPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/Activator.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/Activator.java
new file mode 100644
index 0000000..822ec25
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/Activator.java
@@ -0,0 +1,106 @@
+package org.eclipse.stem.ui.solvers.rk;
+
+/*******************************************************************************
+ * Copyright (c) 2006 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.stem.solvers.rk.presentation.RkEditor;
+import org.eclipse.stem.solvers.rk.presentation.RkSolverPropertyStringProviderAdapterFactory;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The symbolic identifier for this plug-in
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui.solver.rk"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static Activator plugin;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new RkSolverPropertyStringProviderAdapterFactory();
+		new RkEditor();
+	} // start
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+
+} // Activator
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/SolverMessages.java b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/SolverMessages.java
new file mode 100644
index 0000000..a259f65
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/SolverMessages.java
@@ -0,0 +1,46 @@
+// DiseaseWizardMessages.java
+package org.eclipse.stem.ui.solvers.rk;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class SolverMessages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.solvers.rk.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private SolverMessages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // SolverMessages
diff --git a/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/messages.properties b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/messages.properties
new file mode 100644
index 0000000..0f467f9
--- /dev/null
+++ b/org.eclipse.stem.ui.solvers.rk/src/org/eclipse/stem/ui/solvers/rk/messages.properties
@@ -0,0 +1,14 @@
+#/*******************************************************************************

+# * Copyright (c) 2009 IBM Corporation 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:

+# *     IBM Corporation - initial API and implementation

+# *******************************************************************************/

+

+relativeTolerance=Relative Tolerance

+relativeToleranceUNIT=

+relativeToleranceTT=Specify the relative tolerance for the Runge Kutta solver

diff --git a/org.eclipse.stem.ui/.classpath b/org.eclipse.stem.ui/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.ui/.cvsignore b/org.eclipse.stem.ui/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.ui/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.ui/.fbprefs b/org.eclipse.stem.ui/.fbprefs
new file mode 100644
index 0000000..dca99cf
--- /dev/null
+++ b/org.eclipse.stem.ui/.fbprefs
@@ -0,0 +1,147 @@
+#FindBugs User Preferences
+#Tue May 27 16:10:58 EDT 2008
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
+detectorBCPMethodReturnCheck=BCPMethodReturnCheck|false
+detectorBadAppletConstructor=BadAppletConstructor|false
+detectorBadResultSetAccess=BadResultSetAccess|true
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
+detectorBooleanReturnNull=BooleanReturnNull|true
+detectorCalledMethods=CalledMethods|true
+detectorCheckCalls=CheckCalls|false
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true
+detectorCloneIdiom=CloneIdiom|true
+detectorComparatorIdiom=ComparatorIdiom|true
+detectorConfusedInheritance=ConfusedInheritance|true
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorCrossSiteScripting=CrossSiteScripting|true
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
+detectorDontUseEnum=DontUseEnum|true
+detectorDroppedException=DroppedException|true
+detectorDumbMethodInvocations=DumbMethodInvocations|true
+detectorDumbMethods=DumbMethods|true
+detectorDuplicateBranches=DuplicateBranches|true
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true
+detectorEqStringTest=EqStringTest|false
+detectorFieldItemSummary=FieldItemSummary|true
+detectorFinalizerNullsFields=FinalizerNullsFields|true
+detectorFindBadCast=FindBadCast|false
+detectorFindBadCast2=FindBadCast2|true
+detectorFindBadEqualsImplementation=FindBadEqualsImplementation|false
+detectorFindBadForLoop=FindBadForLoop|true
+detectorFindBugsSummaryStats=FindBugsSummaryStats|true
+detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindDeadLocalStores=FindDeadLocalStores|true
+detectorFindDoubleCheck=FindDoubleCheck|true
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true
+detectorFindFloatEquality=FindFloatEquality|true
+detectorFindFloatMath=FindFloatMath|false
+detectorFindHEmismatch=FindHEmismatch|true
+detectorFindInconsistentSync2=FindInconsistentSync2|true
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
+detectorFindMaskedFields=FindMaskedFields|true
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
+detectorFindNakedNotify=FindNakedNotify|true
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
+detectorFindNonShortCircuit=FindNonShortCircuit|true
+detectorFindNullDeref=FindNullDeref|true
+detectorFindOpenStream=FindOpenStream|true
+detectorFindPuzzlers=FindPuzzlers|true
+detectorFindRefComparison=FindRefComparison|true
+detectorFindReturnRef=FindReturnRef|true
+detectorFindRunInvocations=FindRunInvocations|true
+detectorFindSelfComparison=FindSelfComparison|true
+detectorFindSelfComparison2=FindSelfComparison2|true
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
+detectorFindSpinLoop=FindSpinLoop|true
+detectorFindSqlInjection=FindSqlInjection|true
+detectorFindTwoLockWait=FindTwoLockWait|true
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
+detectorFindUnconditionalWait=FindUnconditionalWait|true
+detectorFindUninitializedGet=FindUninitializedGet|true
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
+detectorFindUnreleasedLock=FindUnreleasedLock|true
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|false
+detectorFindUnsyncGet=FindUnsyncGet|true
+detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true
+detectorIncompatMask=IncompatMask|true
+detectorInefficientMemberAccess=InefficientMemberAccess|false
+detectorInefficientToArray=InefficientToArray|true
+detectorInfiniteLoop=InfiniteLoop|true
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
+detectorInitializationChain=InitializationChain|false
+detectorInstantiateStaticClass=InstantiateStaticClass|true
+detectorInvalidJUnitTest=InvalidJUnitTest|true
+detectorIteratorIdioms=IteratorIdioms|true
+detectorLazyInit=LazyInit|true
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
+detectorLockedFields=LockedFields|false
+detectorMethodReturnCheck=MethodReturnCheck|true
+detectorMethods=Methods|true
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableLock=MutableLock|true
+detectorMutableStaticFields=MutableStaticFields|true
+detectorNaming=Naming|true
+detectorNoteAnnotationRetention=NoteAnnotationRetention|true
+detectorNoteCheckReturnValue=NoteCheckReturnValue|true
+detectorNoteCheckReturnValueAnnotations=NoteCheckReturnValueAnnotations|true
+detectorNoteDirectlyRelevantTypeQualifiers=NoteDirectlyRelevantTypeQualifiers|true
+detectorNoteJCIPAnnotation=NoteJCIPAnnotation|true
+detectorNoteNonNullAnnotations=NoteNonNullAnnotations|true
+detectorNoteNonnullReturnValues=NoteNonnullReturnValues|true
+detectorNoteSuppressedWarnings=NoteSuppressedWarnings|true
+detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
+detectorNumberConstructor=NumberConstructor|true
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
+detectorPublicSemaphores=PublicSemaphores|false
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantInterfaces=RedundantInterfaces|true
+detectorReflectiveClasses=ReflectiveClasses|true
+detectorResolveAllReferences=ResolveAllReferences|false
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
+detectorSerializableIdiom=SerializableIdiom|true
+detectorStartInConstructor=StartInConstructor|true
+detectorStaticCalendarDetector=StaticCalendarDetector|true
+detectorStringConcatenation=StringConcatenation|true
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
+detectorSwitchFallthrough=SwitchFallthrough|true
+detectorSynchronizationOnSharedBuiltinConstant=SynchronizationOnSharedBuiltinConstant|true
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
+detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
+detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
+detectorTestASM=TestASM|false
+detectorTestDataflowAnalysis=TestDataflowAnalysis|false
+detectorTestingGround=TestingGround|false
+detectorTrainFieldStoreTypes=TrainFieldStoreTypes|true
+detectorTrainNonNullAnnotations=TrainNonNullAnnotations|true
+detectorTrainUnconditionalDerefParams=TrainUnconditionalDerefParams|true
+detectorURLProblems=URLProblems|true
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
+detectorUnnecessaryMath=UnnecessaryMath|true
+detectorUnreadFields=UnreadFields|true
+detectorUseObjectEquals=UseObjectEquals|false
+detectorUselessSubclassMethod=UselessSubclassMethod|false
+detectorVarArgsProblems=VarArgsProblems|true
+detectorVolatileUsage=VolatileUsage|true
+detectorWaitInLoop=WaitInLoop|true
+detectorWrongMapIterator=WrongMapIterator|true
+detectorXMLFactoryBypass=XMLFactoryBypass|true
+detector_threshold=2
+effort=default
+excludefilter0=.settings/findbugs.exclude.xml
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false
+filter_settings_neg=|
diff --git a/org.eclipse.stem.ui/.project b/org.eclipse.stem.ui/.project
new file mode 100644
index 0000000..c5327f0
--- /dev/null
+++ b/org.eclipse.stem.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.ui/.settings/findbugs.exclude.xml b/org.eclipse.stem.ui/.settings/findbugs.exclude.xml
new file mode 100644
index 0000000..5741993
--- /dev/null
+++ b/org.eclipse.stem.ui/.settings/findbugs.exclude.xml
@@ -0,0 +1,18 @@
+<FindBugsFilter>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.ui.*" />
+        <Bug code="ST" />
+    </Match>
+    <Match>
+        <Package name="~org\.eclipse\.stem\.core.*" />
+        <Bug code="SIC" />
+    </Match>
+    <Match>
+        <Class name="org.eclipse.stem.ui.Activator" />
+        <Bug code="LI" />
+    </Match>
+     <Match>
+        <Class name="org.eclipse.stem.ui.editors.IdentifiableEditor" />
+        <Bug code="DLS" />
+    </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/.settings/org.eclipse.core.resources.prefs b/org.eclipse.stem.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..6377a9e
--- /dev/null
+++ b/org.eclipse.stem.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+#Fri Sep 07 07:21:41 EDT 2007
+eclipse.preferences.version=1
+encoding//src/org/eclipse/stem/ui/preferences/messages.properties=8859_1
+encoding//src/org/eclipse/stem/ui/views/geographic/map/messages.properties=8859_1
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
diff --git a/org.eclipse.stem.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0519f86
--- /dev/null
+++ b/org.eclipse.stem.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,82 @@
+#Tue Sep 01 16:52:03 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.ui/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..70bfeab
--- /dev/null
+++ b/org.eclipse.stem.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,54 @@
+#Thu Jan 31 13:38:21 EST 2008
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
diff --git a/org.eclipse.stem.ui/META-INF/MANIFEST.MF b/org.eclipse.stem.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0376041
--- /dev/null
+++ b/org.eclipse.stem.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,43 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.ui.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.stem.jobs;visibility:=reexport,
+ org.eclipse.stem.definitions,
+ org.eclipse.stem.data.geography,
+ org.eclipse.stem.data.geography.population.human,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.emf.ecore.edit,
+ org.eclipse.ui.views.log,
+ org.eclipse.core.expressions,
+ org.eclipse.ui.navigator,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.ui.intro,
+ org.eclipse.ui.intro.universal
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.core.common.presentation,
+ org.eclipse.stem.core.graph.presentation,
+ org.eclipse.stem.core.model.presentation,
+ org.eclipse.stem.core.scenario.presentation,
+ org.eclipse.stem.core.solver,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.ui.adapters.color,
+ org.eclipse.stem.ui.adapters.newmodifierpage,
+ org.eclipse.stem.ui.adapters.propertystrings,
+ org.eclipse.stem.ui.perspectives,
+ org.eclipse.stem.ui.preferences,
+ org.eclipse.stem.ui.views,
+ org.eclipse.stem.ui.views.explorer,
+ org.eclipse.stem.ui.views.geographic,
+ org.eclipse.stem.ui.views.geographic.map,
+ org.eclipse.stem.ui.views.geographic.map.preferences,
+ org.eclipse.stem.ui.views.geographic.preferences,
+ org.eclipse.stem.ui.widgets,
+ org.eclipse.stem.ui.wizards
+Bundle-ClassPath: .,
+ bin/
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.ui/branding/ohf128_128_32.gif b/org.eclipse.stem.ui/branding/ohf128_128_32.gif
new file mode 100644
index 0000000..0c75d2d
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf128_128_32.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf16_16_32.gif b/org.eclipse.stem.ui/branding/ohf16_16_32.gif
new file mode 100644
index 0000000..9af9f03
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf16_16_32.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf16_16_8.bmp b/org.eclipse.stem.ui/branding/ohf16_16_8.bmp
new file mode 100644
index 0000000..cbb43af
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf16_16_8.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf24_24_8.bmp b/org.eclipse.stem.ui/branding/ohf24_24_8.bmp
new file mode 100644
index 0000000..2656024
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf24_24_8.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf32_32_32.gif b/org.eclipse.stem.ui/branding/ohf32_32_32.gif
new file mode 100644
index 0000000..574bbfb
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf32_32_32.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf32_32_8.bmp b/org.eclipse.stem.ui/branding/ohf32_32_8.bmp
new file mode 100644
index 0000000..7f0a9be
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf32_32_8.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf48_48_32.bmp b/org.eclipse.stem.ui/branding/ohf48_48_32.bmp
new file mode 100644
index 0000000..db0993d
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf48_48_32.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf48_48_32.gif b/org.eclipse.stem.ui/branding/ohf48_48_32.gif
new file mode 100644
index 0000000..caa1e9a
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf48_48_32.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf48_48_8.bmp b/org.eclipse.stem.ui/branding/ohf48_48_8.bmp
new file mode 100644
index 0000000..d54011f
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf48_48_8.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/ohf64_64_32.gif b/org.eclipse.stem.ui/branding/ohf64_64_32.gif
new file mode 100644
index 0000000..f2b8cc0
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/ohf64_64_32.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/splash.bmp b/org.eclipse.stem.ui/branding/splash.bmp
new file mode 100644
index 0000000..7b931fd
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/splash.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/branding/splash.xpm b/org.eclipse.stem.ui/branding/splash.xpm
new file mode 100644
index 0000000..e6f7e91
--- /dev/null
+++ b/org.eclipse.stem.ui/branding/splash.xpm
@@ -0,0 +1,390 @@
+/* XPM */
+static char *splash[] = {
+/* columns rows colors chars-per-pixel */
+"128 128 256 2",
+"   c #0C5788",
+".  c #0C6295",
+"X  c #115079",
+"o  c #141516",
+"O  c #145788",
+"+  c #161919",
+"@  c #17588A",
+"#  c #191B1D",
+"$  c #194848",
+"%  c #194976",
+"&  c #1A1C24",
+"*  c #1B2529",
+"=  c #1B436C",
+"-  c #1C3538",
+";  c #1C613C",
+":  c #1C6496",
+">  c #1D1D2B",
+",  c #1D2A32",
+"<  c #1D3348",
+"1  c #1D3A2C",
+"2  c #1E2232",
+"3  c #1F2B3A",
+"4  c #1F3B65",
+"5  c #201F30",
+"6  c #20333F",
+"7  c #211E38",
+"8  c #222436",
+"9  c #233965",
+"0  c #24233D",
+"q  c #24679D",
+"w  c #251D46",
+"e  c #253459",
+"r  c #256DA3",
+"t  c #262648",
+"y  c #26484C",
+"u  c #272A57",
+"i  c #2774A7",
+"p  c #283646",
+"a  c #2A75AA",
+"s  c #2B3D83",
+"d  c #2C1E59",
+"f  c #2C2668",
+"g  c #2D2975",
+"h  c #2E1E72",
+"j  c #2E506E",
+"k  c #2F1D69",
+"l  c #301D63",
+"z  c #304951",
+"x  c #311C6A",
+"c  c #313771",
+"v  c #322276",
+"b  c #322477",
+"n  c #326083",
+"m  c #332778",
+"M  c #332779",
+"N  c #332879",
+"B  c #33287A",
+"V  c #33297A",
+"C  c #332B7B",
+"Z  c #332D7D",
+"A  c #33307E",
+"S  c #333481",
+"D  c #3381AF",
+"F  c #342A7B",
+"G  c #342B7B",
+"H  c #342C7C",
+"J  c #343C55",
+"K  c #347AAC",
+"L  c #35297A",
+"P  c #352A7B",
+"I  c #352C7C",
+"U  c #352D7C",
+"Y  c #352D7D",
+"T  c #352E7D",
+"R  c #35317F",
+"E  c #353F88",
+"W  c #354456",
+"Q  c #362C7C",
+"!  c #362D7D",
+"~  c #362F7E",
+"^  c #36307E",
+"/  c #36317F",
+"(  c #363984",
+")  c #3679AF",
+"_  c #372D7C",
+"`  c #372F7E",
+"'  c #37317F",
+"]  c #373280",
+"[  c #373581",
+"{  c #383380",
+"}  c #38488E",
+"|  c #392C7C",
+" . c #392E7D",
+".. c #39307F",
+"X. c #393481",
+"o. c #393682",
+"O. c #3A317F",
+"+. c #3A3481",
+"@. c #3A3682",
+"#. c #3A3984",
+"$. c #3B3380",
+"%. c #3B3481",
+"&. c #3B3682",
+"*. c #3B3A85",
+"=. c #3B599B",
+"-. c #3B83B6",
+";. c #3C438B",
+":. c #3D3380",
+">. c #3D3682",
+",. c #3D3984",
+"<. c #3D3F88",
+"1. c #3D4D92",
+"2. c #3E3D87",
+"3. c #3E5295",
+"4. c #3F3A85",
+"5. c #413A85",
+"6. c #413D87",
+"7. c #415699",
+"8. c #423F88",
+"9. c #424289",
+"0. c #425396",
+"q. c #433D71",
+"w. c #43458C",
+"e. c #434D92",
+"r. c #443A85",
+"t. c #445B9C",
+"y. c #45428A",
+"u. c #45488C",
+"i. c #455799",
+"p. c #46448B",
+"a. c #46515C",
+"s. c #4684B9",
+"d. c #485368",
+"f. c #485FA0",
+"g. c #4866A5",
+"h. c #4878B5",
+"j. c #4A458B",
+"k. c #4B498E",
+"l. c #4B4D91",
+"z. c #4B83BA",
+"x. c #4B90C3",
+"c. c #4C5698",
+"v. c #4C5C9D",
+"b. c #4C62A2",
+"n. c #4D5395",
+"m. c #4D7488",
+"M. c #4F5C84",
+"N. c #4F6973",
+"B. c #524D91",
+"V. c #525395",
+"C. c #536790",
+"Z. c #5371AD",
+"A. c #538EC2",
+"S. c #545799",
+"D. c #545C9C",
+"F. c #5464A2",
+"G. c #54778C",
+"H. c #5487BD",
+"J. c #55468D",
+"K. c #557C93",
+"L. c #5779B4",
+"P. c #5797C7",
+"I. c #5869A7",
+"U. c #5B5396",
+"Y. c #5B5C9C",
+"T. c #5C697B",
+"R. c #5C6DA9",
+"E. c #5C72AD",
+"W. c #5F6A72",
+"Q. c #60A1CC",
+"!. c #615C9C",
+"~. c #6365A2",
+"^. c #636EA9",
+"/. c #646AA6",
+"(. c #6473AE",
+"). c #647BB5",
+"_. c #657379",
+"`. c #66639C",
+"'. c #6682BA",
+"]. c #669858",
+"[. c #669CCC",
+"{. c #6778B1",
+"}. c #677A8F",
+"|. c #678398",
+" X c #6A72AC",
+".X c #6A85BC",
+"XX c #6B6BA7",
+"oX c #6E8790",
+"OX c #6E8EAC",
+"+X c #7090C4",
+"@X c #7373AB",
+"#X c #75A8D5",
+"$X c #75ACD7",
+"%X c #7694C7",
+"&X c #777CB2",
+"*X c #7985BA",
+"=X c #7997AC",
+"-X c #7DBBE4",
+";X c #84827E",
+":X c #848FC1",
+">X c #85A8D6",
+",X c #8788BA",
+"<X c #8795C5",
+"1X c #88B3DD",
+"2X c #897F99",
+"3X c #89BBE2",
+"4X c #8AA5B7",
+"5X c #8B9393",
+"6X c #8D92AF",
+"7X c #8DC0E5",
+"8X c #91A2AE",
+"9X c #92BCE2",
+"0X c #96B0D4",
+"qX c #97A197",
+"wX c #97A7B7",
+"eX c #97AAD4",
+"rX c #989AC7",
+"tX c #98C3E6",
+"yX c #99A3CC",
+"uX c #9AB4C4",
+"iX c #A3BDE1",
+"pX c #A4C8E7",
+"aX c #A68DBB",
+"sX c #A797C3",
+"dX c #A7AEB5",
+"fX c #A8A3CB",
+"gX c #A9ACD2",
+"hX c #AAB5D6",
+"jX c #ABC7D4",
+"kX c #AED2EA",
+"lX c #B1B1CA",
+"zX c #B4B5D9",
+"xX c #B8D8EA",
+"cX c #B8DCAA",
+"vX c #B9CADC",
+"bX c #BBBCDC",
+"nX c #BBC3E2",
+"mX c #C4BCDA",
+"MX c #C4C6DC",
+"NX c #C5CEDD",
+"BX c #C5DAE9",
+"VX c #C6C8E2",
+"CX c #CBE0DA",
+"ZX c #D2E5EB",
+"AX c #D3CDE3",
+"SX c #D9DBE7",
+"DX c #DAE5EB",
+"FX c #E3E9EC",
+"GX c #E7ECF1",
+"HX c #EAF3EE",
+"JX c #EDF4F3",
+"KX c #F2F4F5",
+"LX c #F5F9F9",
+"PX c #F9FCFC",
+"IX c #FEFEFE",
+"UX c gray100",
+/* pixels */
+"Y Y Y Y Y Y Y Y ~ ..H Y Y Y Y Z _ _ Y ! Y _ ! Y Y Y Y U U U U U U U U U U U U U I I I I I I I U H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y U ~ ..H Y Y Y Y U _ _ Y  .Y _ ! Y Y Y Y Y U U U U U U U U U U U U U U I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y U ~ ] H Y Y Y Y ! Q Y  . .Y _ _ Y Y Y Y Y Y U U U U U U U U U U U U U U I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y U ~ ] H Y Y Y ! ! Y ..`  .! Q _ Y Y Y Y Y Y Y U U U U U U U U U U U U U U I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Z ~ ] H Y ! ! ! Y ..`  .` ..Y ! Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y ! ! ! Q X.Q ! ! ! ! _ ` `  .`  .Y ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"! ! ! ! ! ! ! ! Q { I ! ! ! Y  .`  . .`  .H ! ! Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U U I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"! ! ! ! ! ! ! U ' ' U ! ! Y  .` `  . .` ` Q { ! ! Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U G ] ` I U I  .` ` !  . .` ` ] Q ! ! Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"^ ^ ^ ^ ^ ^ ^ ~ ] ` ~ ` ] / R O. . . .`  .{ I ! ! ! Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"~ ~ ` ` ` ` `  .X.{ / / / / ` ....O...` ' ' I ! ! ! ! ! Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / R $.] / / / ` ............{ / ~ Q ! ! ! ! ! ! Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / ^ O.] ^ / ` ....` :.......+.R { ~ ^ U ! ! ! ! ! Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / { ~ O.] ' / ] ` ....:.......+.R / / ~ ~ ! U ! ! ! ! U / / Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"' ' ' ' ' ' { / &.] ' ' ] ..` O.:...` %.O.R / / / ` ~ ^ ! U ! ! U ] H Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"' ' ' ' ' ' ] ^ @.^ ' ' ` ....:.:...` X./ / / / / / ` ~ ~ ^ U U { U ! Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"' ' / / / ] { / >./ ......` O.%.:.....X.' ' / / / / / / ` ~ ~ ` ` U ! ! ! Y Y Y Y Y Y Y Y Y Y U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"{ { { +.%.X.+.+.,.+.X.@.O.O.%.$.:. .$.O.' ' ' ' / / / / / / ` { ~ U ! ! ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"+.+.+.+.%.X.%.] ,.{ ......%.$.$.$.O.>. ./ ' ' ' ' / / / / / X.` ~ ^ U ! ! ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"+.+.+.%.%.+.&.O.4.$.%.+.$.$.$.$.&.>.%.X.{ / ' ' ' ' ' / ^ { / / ` ~ ^ ! ! ! ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"%.%.%.%.+.%.&...4.O.%.%.O.$.>.>.>.%.%.+.X.+.{ ] ' ' ' ' ] { / / / ` ~ ^ U ! ! ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"$.$.$.%.&.&.&.+.2.$.%.%.$.O.5.>.O.,.%...+.+.+.+.{ / ' ' +.' / / / / ` ~ ~ ! ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"&.&.&.&.&.&.&.$.6.+.&.&.o.,.5.>.>.&.$.%.%.+.+.+.X.{ R +./ ' ' / / / / / ~ ^ U ! ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"&.&.&.&.&.&.4.@.2.X.&.X.>.r.r.,.2.@.%.$.%.%.%.+.+.+.%.+./ ' ' ' / / / / ` ~ ^ U ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"&.&.&.@.X.>.,.X.4.{ ,.>.,.r.r.,.4.+.&.&.%.$.%.%.%.%.&.+.{ / ' ' ' / / / / ` ~ ^ U ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"X.X.&.>.4.4.4.,.y.4.4.4.5.r.5.4.,.@.&.&.&.&.+.$.$.@.X.+.X.{ / ' ' ' / / / / ` ~ ! ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"4.4.6.4.4.4.2.,.6.,.4.,.r.r.r.2.,.%.@.&.&.&.&.+.&.%.%.+.+.X.{ / ' ' ' / / / / ~ ~ ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"4.4.4.4.,.6.6.5.8.4.5.4.r.r.6.y.4.4.@.@.&.&.%.&.4.O.%.%.%.+.X.{ / ' ' ' / / / / ~ ^ U ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+",.5.5.8.8.8.p.8.p.6.8.6.j.y.6.6.,.4.4.4.X.@.@.2.+.&.+.%.%.%.+.X.{ / ' ' / / / / ` ~ ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"6.6.6.6.8.y.y.6.w.8.8.y.j.p.w.6.4.5.4.4.4.>.4.&.&.&.&.%.%.%.+.+.X.{ ' ' ' / / / / ~ ~ U ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"j.2.6.y.y.w.p.y.k.9.y.y.J.j.p.8.8.6.5.4.4.8.4.X.&.&.&.&.%.%.%.+.+.X.] ' ' ' / / / / ~ ^ U ! ! Y Y Y Y Y Y Y Y U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"B.k.y.p.p.p.k.k.k.y.p.B.J.p.y.8.8.6.8.5.,.8.4.4.X.&.&.&.&.+.%.%.+.+.+./ ' ' ' / / / ` ~ ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"n.V.p.y.y.u.j.k.u.y.k.J.B.l.y.w.w.6.6.6.y.5.4.4.4.%.&.&.&.&.$.%.%.+.+.{ ' ' ' / / / ` ~ ^ U ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"l.n.l.k.k.l.k.k.B.k.k.J.B.k.y.p.p.p.9.y.8.8.5.4.4.4.X.&.&.&.&.$.%.+.+.+.] ' ' ' / / / ` ~ U ! ! ! Y Y Y Y Y Y Y U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"l.B.U.l.l.l.n.V.B.k.V.U.B.B.k.p.j.j.j.p.6.6.8.5.4.4.4.X.&.&.&.%.%.%.+.+.{ / ' ' / / / / ~ ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I Y H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"B.U.U.U.n.c.U.V.V.B.U.U.S.l.k.k.y.y.k.p.w.8.6.8.5.4.4.4.@.&.&.&.+.%.%.+.+.] ' ' ' / / / ~ ^ U ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U.Y.Y.Y.B.V.Y.!.!.U.!.!.V.l.l.l.B.l.y.j.p.w.8.6.8.,.4.4.+.&.&.&.&.$.%.+.+.{ / ' ' / / / ` ~ ! ! ! ! Y Y Y Y Y Y Y U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F ",
+"Y.Y.Y.`.!.S.!.~.Y.Y.XX`.U.U.n.n.B.n.k.y.j.y.p.6.6.8.5.4.4.o.&.&.&.$.%.%.+.+.] ' ' / / / / ~ ^ U ! ! Y Y Y Y Y Y Y Y U U U U U U U I I I I I I H H H H H H H H H H H H H H H H H H H G G G G G G G G G G G G G G G G G G G G G G F F F F F F F F F F F F F F F F ",
+"`.`.XX@X/.Y./.XX~.`.`.~.Y.Y.U.U.S.l.B.l.u.p.w.y.9.8.5.,.4.>.@.&.&.&.$.%.+.+.{ ' ' ' / / / ` ^ U ! ! Y Y Y Y Y Y Y Y U U U U U U U U I I I I I I H H H H H H H H H H H H H H H H H H G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F F F F F F F F ",
+"XX@X^.^.^./.^.{.^.XX@X/.!.Y.Y.Y.S.n.n.l.k.k.p.w.w.9.w.8.4.,.@.@.&.&.+.%.+.+.+./ ' ' / / / ` ~ U ! ! ! Y Y Y Y Y Y Y Y U U U U U U U I I I I I I I I H H H H H H H H H H H H H H H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F ",
+"XX^.^.,XsXaXaXsXaXaXaX@X^./.^.Y.Y.S.n.n.V.B.l.y.p.p.w.y.8.4.,.4.X.&.%.$.%.+.X.] ' ' / / / / ~ ^ ! ! ! ! Y Y Y Y Y Y Y Y U U U U U U I I I I I I I I I I H Y H H H H H H H H H H H H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G ",
+"^.&XsXsXrX,X*X*X&X,XsXaXaX X^./.~.Y.!.c.n.n.l.l.e.y.w.9.9.w.6.6.,.&.&.%.%.+.+.{ ' ' ' / / / / ~ U ! U U Q H ^ ~ Y Y Y Y Y Y U U U U I I I I I I I I I I I I I I Y Y H H H H H H H H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G ",
+"aXfX,X*X<X:X<XrX<XsX:X*X,XsX@X/.XXI.Y.Y.c.n.n.l.l.u.y.p.w.9.y.<.,.,.&.&.{ $.+.+./ ' ' ' R R R  .G Q ' { ] ] ..~ Y Y Y Y Y Y Y Y U U U I I I I I I I I I I I I I I I I I H H Y Y H H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G ",
+"aX*X<XrXzXhXgXbXgXbXyX<X:X,XaX&X/. XR.Y.Y.D.n.n.B.l.l.w.p.w.9.w.<.8.,.4.@.%.X.+.../ / / O.$.&.&.%.' U _ I U U ! Q Z Y Y Y Y Y Y Y Y T Q I I I I I I I I I I I I I I I I I I I I I I H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G ",
+"*X<XzXbXVXVXnXNXVXAXzXgXyX:X:XsX&X X XR.~.Y.D.c.c.V.e.e.e.y.w.9.y.8.,.,.,.&.@.,.&.$.X.X.$.O.` ^ R  .U ! Y Y ! _ _ _ _ U U Z Y Y Y Y T Q Q Q Q Q Q I I I I I I I I I I I I I I I I I I G G G G G P G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F ",
+"rXgXVXVXSXDXFXHXLXFXVXnXzXrX:XrXsX(. XXXR.Y.Y.D.n.c.B.l.e.e.w.w.y.y.w.<.6.<.4.&.%... .~ ........` ` `  . ...! ! _ _ _ _ _ _ _ ! ! ! U Q Q Q Q Q Q Q Q Q Q Q Q Q Q I I I I I I I I I I G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F ",
+"lXbXNXDXIXUXUXUXUXUXJXSXnXbXyX:XfX&X(.XX^.I.Y.D.c.n.n.B.l.c.l.k.l.u.w.9.,.,.,.[ %.%.O.` .......... .` ` ` ` ` ! ! ! Y ! ! _ _ _ _ _ _ _ _  .Q Q Q Q Q Q Q Q Q I I I I I I I I I I I H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F F F ",
+"bXAXGXIXUXUXUXUXUXUXUXJXSXnXgX<XrXsX(. XXXR.R.!.F.F.D.S.c.n.k.j.9.w.9.y.6.,.4.4.&.%.%.O.O.O.....O. . . . . .`  . .` ! ! ! ! _ _ _ _ _ _ Q Q Q Q Q Q I I I I I I I I I I I I I Y Y H H G G G G G G G G G G G G G G G G G G G G G G G G G G G F F F F F F F F F F ",
+"hXVXIXUXUXUXUXUXUXUXUXUXGXVXbXrX<XfX{.&X X@XXX~.Y.Y.U.B.B.l.k.l.j.j.y.j.8.r.>.5.4.>.O. .O.O. . .`  .| | |  . .G P Q | | | | | Y P Z Q P P Q Q Q I I I I I I I I I I I I H Y H H H H H G G G G G G G G G G G G G G G G G G G G G G G G F F F F F F F F F F F F F ",
+"bXSXUXUXUXUXUXUXUXUXUXUXPXSXVXbXrXzXrX:X&X{.&X@X@XXXXX/.~.~.!.S.n.l.B.n.l.e.k.p.w.8.,.,.@.o.o.@.+./ / ] ' ' ' ] ^ T / / ~ ^ Y T T T T G P P F F F L L P P P L P P P I F F F F G G G G P G G G G G G G G G G G G G G G G G G G G F F F F F F F F F F F F F F F F ",
+"bXDXUXUXUXUXUXUXUXUXUXUXUXHXAXVXfXbXrX:X*X(./.^. X X^.(.(.(.(.^.D.v.D.D.n.0.0.0.0.e.u.*.<.;.} 1.e.e.e.e.w.w.w.;.;.2.*.*.*.#./ R 2.<.<.<.<.9.9.<.;.*.*.S H S ( ( ( ( [ [ [ [ / / T U U U N N N N N m m N V H G G G G G G G F F F F F F F F F F F F F F F F F F F ",
+"bXDXUXUXUXUXUXUXUXUXUXUXUXFXVXnXrXzX*X X{.:XeX<X&X~.c.l.l.n.n.D.I.I.F.b.S.e.e.0.i.i.9.D.c.Q .. .! L L m b L P Q b 2.2.2.2.X.F.6.k x v x l l l x x x d m /.d t w t w w w 0 7 7 7 5 5 > > > & # # # # + # v ` G G G G G F F F F F F F F F F F F F F F F F F F F F ",
+"zXDXUXUXUXUXUXUXUXUXUXUXUXDXMXzX,XsX<XSXPXSXrX,XyXzXiXiXeX<X).n.<.8.U.D.e.e.e.e.u.w.o.gXzXXXzXzXSXVXmXmXVXMXfXrXf P #.%.>.U MX2X}.&X,XrX:X:X*X,X&X}.N.J FX8 N.j m.N.j j j $ $ $ - * * * & & # + # o o + x ' G G G V F F F F F F F F F F F F F F F F F F F F F F ",
+"gXvXKXUXUXUXUXUXUXUXUXUXKXNXzXfXrXPXIXIXwX0XKXPXHXDXBXpXtX3X1X#XH.n 9 ( B.w.9.8.<.2.#.k.XXt c d.oXPXIXIXGXp 8 0 x ~ ~ ~ T ! j.l.5 J z T.vXjXjXoX5 > > m @Xt 5 W 6 G.K.G.y + & & > > > > # # 5 # o # o + h V F C V V V V V V V V V V C C V V V V V V V V V V V V ",
+"IXIXUXUXUXUXUXUXUXUXUXUXUXIXJXkXDXIXrXdXIXIXUXUXZXBXkXkX3X$X[.P.A.A.K = s ).).).).).).L.Z.).h.KXW MXIXPXT.E {.).).).{.E.E.E.g.g.g.h.JXz uXjXhX3 } F.b.g.=.b.1.vXqXp K.m.3 g b.f.b.b.b.f.t.7.Z.AX6 o o o E v.t.7.7.7.7.7.7.7.7.7.7.7.7.7.7.0.0.0.0.0.0.0.0.0.1.} ",
+"KXIXIXIXUXUXUXUXUXUXUXIXPXHXUXUXIX<XKXIXUXUXUXUXLXZXkXxX7X1X#XQ.H.s.D ) % 9 (.E.E.E.E.E.E.E.i.BX_.=XIXPXj.=.^.Z.I.Z.Z.I.g.b.g.g.g.1.KXW.=XjXuX8 v.b.b.f.t.f.} rXFX6 }.G., g b.t.t.t.t.t.i.7.E gXNXo + o S i.3.3.3.3.3.3.3.3.3.3.3.3.1.1.1.1.;.;.;.;.;.;.;.;.;.} ",
+"aXfXhXbXMXFXKXPXLXIXDXbXyXUXUXUXUXUXUXUXUXUXUXUXLXDXBXBXpX3X$XQ.H.z.) i r X u ,.2.*.#.o.{ ' ! gXqXoXIXLXq.N A T T T A R T G G G C L VX_.=XvXwX> m F F F C V N ~.FXp |.G., d C F C C C C V V M B.JX+ o + h N V V V V V V V V V V V V V V V V V V V V V V V V V V ",
+"*X:XgXgXhXbXbXMXVXMXAXyXSXUXUXUXUXUXUXUXUXUXUXUXLXZXkXxX7X3X$X[.A.z.K r : . = f j.,.&.X.] ` I gX8X=XIXLXq.m Z H H H H Z Z C Z Z F L MXW.=XvXwX& b B B B B B m /.FXp |.G., d ` B B B B N M M m >.JX, o + h P m m m m m m m m m m m m m m m m m m m m M M M M M M ",
+"fXyXyXyXzXnXnXnXVXMXAXeXIXIXIXFXUXUXUXUXUXUXUXUXJXDXxXkX9X3X#XQ.A.z.D a : @   < R i.w.;.;.<.*.zX6X6XIXLXq.R 2.*.*.*.*.2.;.<.2.2.*.[ AXW.=XvXwX> / o.o.o.o.o.] {.FXp |.G., k &.[ [ ] ] ] / ] / ] SXW.o + v R R R R R R A A A ^ ^ ^ ^ ^ ^ ^ A A A A A T T T T T T ",
+"KXPXHXDXHXLXLXLXLXHXLXFXBXFX<XIXUXUXUXUXUXUXUXLXJXZXxXpX9X3X#XQ.H.z.K i : @   X u ).'.'.'.'.h.BX5X5XIXLXq.E.'.).).'.'.'.'.'.).).).L.KX;X4XvXwX2 R.E.E.E.R.R.=.eXFXp |.G., s R.R.R.R.g.t.t.v.F.=.g. Xf g b.b.b.f.f.f.f.v.v.v.v.v.v.v.v.v.v.v.t.i.i.i.i.i.i.i.i.7.",
+">XeXzXmXzXhXyXyXhXyXgXIXUXKXhXIXUXUXUXUXUXUXUXLXGXBXBXtXtX1X[.Q.H.s.K r : O X % 3 S v.e.e.e.;.bX5X8XIXLXq.( ;.;.;.;.;.} 1.;.;.;.1.l.FX;XlXNXuX> [ #.#.#.#.#.[ &XFXp |.K., h <.( ( o.2.rXt + 5 [ [ R <.9.+.[ [ [ [ [ [ [ [ [ [ R R ] ] ] R R R R R R R R R R / R ",
+"~.~./.@X,XsXsXfXgX,XmXUXIXMXIXUXUXUXUXUXUXUXLXJXDXxXkX9XtX$XQ.P.x.s.a i : O X % e 0 6.o.[ +.! gX5XwXIXLXq.m Z H H H H A A Z Z Z o.4.AX;XlXCXcX> b B B B B B m /.FXp @XK., d ! B B M 4.GX, * # m M M m m m m m m m m m m m m m m N F H F N m m m m m m m m m m m ",
+"Y.Y.`.~./.^. X X@X XSXIXIX8XIXUXUXUXUXUXUXLXJXFXBXxXpX9X3X#XQ.A.z.D i q :   % 4 4 7 A o.[ ] T gXqXwXIXPXr.N A Z Z A A A A R R A A >.SX;XwXNXuX> b V V V V V N ~.GXq.&X&X3 d P V V M l.JX& - # m N N M M M M M m M m m m m M V +.y.k.k.k.p.O.V M m m m m m m m N ",
+">X>XeXeXeX0X0XeX0X>XxXFXnXuXIXUXUXUXUXIXLXJXFXxXxXkX7XtX$X[.Q.A.s.K i : @   % = 4 2 s ^.F.F.0.nX5XwXIXPXy.( 7.3.3.3.1.} E E } } } S MXW.4XvXuX5 0.7.7.7.3.7.E %XKXq.&X&X3 g D.i.c.E gX8X& , > 1.} } } } } ;.1.7.;.*.;.;.E ;.I.R.D.D.c.c.D.R.F.<.( <.<.<.<.<.<.#.",
+"iXiXiXiXtXtXtXtXpXpX7X-X*XvXKXJXLXKXFXGXFXZXxXxXkX9XtX1X#XQ.P.z.-.a r : O O = 4 9 2 s '.'.'.g.BX5XwXIXPX_.q.j.k.j.q.J p J p p p p p p p uXvXuX2 I.R.R.R.I.I.7.yXGXq.&X&X3 > f f 3.f W * ; * 2 F.f.f.f.f.t.^.(.(.(.R.t.t.=.{.{.R.R.R.R.R.R.R. X(.1.0.7.7.7.7.7.3.",
+"S.S.D.Y.F.I.I././. XSXFX6XvXDXZXDXFXDXBXkXkXBXpX9XtX3X#X[.Q.A.s.K a q @   % = 4 u 8 t 8.*.#.{ zXqXwXIXPXDXdXdXdXdXdXwX8X8X8X5X5X5XoX}.|.jXvXuX> V T T T T T C XXFXp @XK.j - - - - * 2 ; ].1 # G U H H F %.5.>.>.>.8.X.C 4.k.6.4.,.&.&.,.,.4.6.l.>.F V V V V V V ",
+"k.l.V.n.U.S.F.F.D./.VXSX,XvXZXxXxXBXBXxXBXBXpX9X7X3X#X[.Q.A.z.-.a r : O   % 4 e u 5 5 6.{ ' I gX5X8XIXPXJ 5 0 0 0 0 0 0 0 0 0 0 0 8 C.p wXvXuX& m P V V V P m ^.FXp |.K., # > > > 5 W & $ * # m N M M N 8.:... ...>.>.F B.6.>.%.O.....O.O.%.&.8.n.V m N N m V V ",
+"l.n.c.S.S.D.D.Y.Y./.MXAX&X0XBXkXxXkXpXkXtXtX3X7X1X$X[.Q.P.z.-.D r q :   X = 9 u t > 0 6.*.o./ hX5X8XIXLXW m R R A A A A A A A A A _ AX_.4XvXuX> V T T T T T V XXFXp |.K., l A T H U gX8X# - # G F F F H r.>.%.+.$.4.4.X.k.6.,.&.+.X.{ X.+.,.6.6.k.{ T ' ' T H V ",
+">X>X1X1X1X1X1X1X1X1X$X1XZ.[.kXtX3X9X3X7X3X3X-X$X#XQ.Q.P.z.s.K a q : O   % 4 4 u t * c '.).).g.BX5X6XIXLXW F.).{.(.(.(.(.(.(.(.(.E.i.GXW.=XvXwX2 I.R.R.I.I.I.3.yXFXp |.G., A I.F.F.3.).JX& - 8 v.f.f.v.t.(.(.I.F.I.(.F.I.).I.I.F.b.F.b.f.F. X&X@X(.b.f.).).Z.3.7.",
+".X+X+X+X%X%X+X+X+X+X>XiX&XK.9XtX-X1X-X-X$X$X#X[.Q.P.A.z.s.K a q : O   % = 9 e t 0 # A (.Z.b.3.nX5X=XIXLXW } b.f.t.f.t.t.f.f.t.t.t.1.SXW.=XvXwX5 7.7.7.7.3.0.;.:XFXp |.G., g i.1.3.;.n.JX, * & 3.1.} } } } I.F.F.F.b.<.i.^.v.i.7.0.3.e.1.D.~.I. X^.i.L.>X>XL.b.} ",
+"8.9.w.j.k.k.l.l.l.n.,XAXbXM.>X1X$X#X#X[.[.Q.Q.P.A.H.z.-.K a r : O   X % 4 e u 0 > # C [ ] ~ Q gXqXOXPXLXJ v F F C C C C C C C C V L MXW.=XvXwX& b V V V V V m ~.FXp |.G., d P V V N ! zXJ + > m M M M M M F ` O. .V m ~ k.4.&.O...` ` ` 4.J.j.B.J.<.Z.yXyXL.3.S ",
+"6.6.6.y.w.p.u.k.k.l.Y.mXAXC.x.#X#XQ.Q.Q.P.A.H.H.z.-.) K a q : @   X = 4 9 u t 0 # # $.{ ^ T P gXqXoXPXLXJ v V V V V V V V V V V V L MXW.=XjXwX& b B B B B B m /.FXp }.G., d ! B B N V m m v m m m m m m m m m m m m m V k.r.>.O.O.' ' ' O.6.k.k.p.#.I.%X%XL.} R ",
+"v.v.D.F.D.F.F.I.I.F.I.eXbX&Xn [.P.A.A.A.z.z.z.-.-.K i r : : O   X % = 4 e t 0 & + g 0.} ;.;.<.zXqXoXPXLXJ R <.2.2.2.2.2.2.2.*.*.*.#.SXW.=XjXwX> [ *.#.#.#.#.[ {.FXp }.G., k <.( ( o.o.[ [ [ [ [ [ [ [ [ [ [ [ ] ] ] ] ] 9.D.u.p.9.9.<.<.9.9.w.c.2.#.1.L.L.f.1.o.",
+">X>X>X>X>X>X>X>X>X>X>X[.Q.[.j -.H.H.-.-.-.D K K a i r : : @   X % 4 9 e t 0 > # & (..X'.'.'.h.BX5X}.PXLXJ R.).).).).).).).).).).).g.JXW.=XjXwX2 R.E.E.E.R.R.=.eXFXp K.m., s R.R.R.I.I.I.I.F.F.b.b.b.b.b.b.b.F.f.f.v.f.f.=.{.'.(.(.(.^.^.^.(.{.^.3.7.f.g.b.t.f.v.",
+"e.e.n.c.c.c.c.c.v.v.v.c.:XzX,Xj -.s.) a a a r r q : : @ O O % = = 4 e t 0 5 # + f i.;.;.<.<.#.zXqX}.PXLXp R *.#.#.#.*.#.#.#.#.#.o.X.AXW.OXjX4X> R o.o.o.o.[ ]  XFX6 G.m., k #.o.X.] ] ] ] ] ] / / / / / / / / R R R R R R R w.S.l.u.u.w.l.S.;.R T T T ^ ^ T A [ ",
+"{ %.4.4.4.2.6.6.9.w.w.w.l.gXMXM.n K K r q : : : @ @     X % = 9 9 e t 0 8 # # & &.+./ T T H V gXqX_.PXLXJ v V V V V V V V V V V V L MXW.OXjX4X& b B B B B B m /.FX6 G.m., d ` B M M M M M M m m m m m m m m m m m m m m m m M Y 6.j.k.j.4.Y M m M M M m m m m m ",
+"+.+.,.4.2.2.6.8.8.9.u.w.w.S.zXzXd.% a : @ O O @ O   X % % = 4 4 e u 0 5 & + + T [ { / ~ ~ T P gXqX_.PXLXJ v F F F F G G G P P P F L VXW.OXjX4X> m F F C C V N ~.FX6 m.m., d C F C V V V V V V V V V V V V V V V V V V V V V V M N V F V N M V V V V V V V V V V ",
+".X'..X.X.X.X.X.X.X.X+X'.'.h.P.>X<X9 % .   O   X % % = = 4 9 e u t 0 5 # + & t.E.R.R.R.R.Z.E.0.SXW.|.IXPXJ E R.I.F.b.b.b.b.b.b.b.b.1.KXd.=XuXwX2 i.b.f.f.t.v.} yXAX6 m.m.3 g D.t.t.0.0.7.0.0.3.3.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.} } } ;.;.;.;.;.;.;.} ",
+"%X%X%X%X%X%X%X%X%X%X%X%X%X%X+X+X%X%Xj e % % % = = = 4 4 e u t t 0 > # + 5 I.).{.{.{.).Z.Z.Z.t.zXW DXIXIX}.u =.g.E.(.(.R.R.Z.g.g.f.f.lXp uXuXuXp g t.f.g.=.t.} eXa.z N.N.y & 1.3.f.b.b.b.v.f.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.7.7.i.i.i.i.i.7.7.0.0.0.0.3.3.3.3.1.1.",
+"&.,.,.,.,.4.4.2.2.8.9.w.w.w.w.w.p.@XfX&Xe < 9 = 9 9 e u t t 0 8 & + # d >.*.#.o.{ { / V.~.0 W d.vXLXPXLXJX5XW J 5 G T U H U XX9.8 p W 4XuXuXwX4Xz 3 8 u *X> 5 3 z G.m.N.N.< & # # v H G G F F C C C C C C C C C C C C C C C C C C C C C V V V V V V V V V V V V ",
+" .O.O.O.+.+.>.4.2.,.;.6.2.8.8.w.8.6.p.&X,X`.e 8 8 3 8 8 5 * & # # t A w.2.@.[ { ' / N rX8Xy }._.d.d.d.d.d.N._._.> v T G I m bX;Xy N.a.p p p p p y a.y p AX& y 6 , 2 2 * 2 * * * # x ` P G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"%.+.%.%.X.@.@.&.,.>.8.9.<.8.9.p.w.y.9.6.y.V.!.*.v t 7 0 7 t f m >.u.<.#.#.o.X.X.[ ] T +.4.d l l x h h h h x k d h T Y I U F %.{ d l x h h h h h x l d m ;.h l k x h h h h x k l k V Y G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"+.%.+.%.+.X.@.&.,.,.4.8.,.2.<.<.8.y.9.w.p.w.4.u.u.l.k.u.u.e.e.u.2.( #.#.o.{ X.[ / ] A F F ] o.[ [ X.X.X.[ [ [ [ { T I I I P V V ] [ [ [ { { { { [ [ [ H m A [ [ { { { { { [ { / ] Y G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"+.%.+.+.+.+.X.@.@.@.#.2.,.,.6.8.<.<.9.8.y.p.y.<.<.<.<.<.2.,.*.o.#.#.o.{ { +.' ~ ] ~ U Y Y Y Y Y I U U U U U U U U U I I I I Y H H G G H H H H H G G H H H H G G H H H H H P G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"O.+.O.+.+.+.%.X.X.#.&.<.( ,.,.,.4.4.8.2.4.8.w.<.8.4.*.*.,.#.#.#.o.[ { X.X.R / ^ ~ U Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"] ] / / / ] / / ' ] @.4.+.@.*.#.( ,.%.4.4.4.9.,.$.,.#.#.#.#.o.[ { X.X.] / ] ^ ^ U Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"] ' ' ' ' ' ' ' ' ' ~ ,.+.+.@.&.,.*.#.&.@.>.4.4.X.,.#.#.o.o.{ X.X.' ' R A R H U Y Y Y Y Y U U U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"' ' ' ' ' ' ' ' ' ' / { ] { X.X.] @.@.X.$.@.&.4.&.+.[ [ { X.] ' ' ' R ^ ^ U Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / / / / ^ O.] A ' ' / ' O.+.%.%.&.&.#.X.{ ] ' ' { ` ~ R ~ I U Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / / / / R O.] ` / / ' ' ' ] R O.O.] &.] ] ` ` ~ I U H U U Y Y Y Y Y Y Y Y U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / / / / R $.{ / / / / / / / ] `  .| ..`  .I U ! ! Y Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U I I I I H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"~ ~ ~ ` ` ` ` ` ` ` ` ] ] T ~ ~ ~ ` ` ] ]  . . . .`  .Y ! ! Y Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ~ ` { ~ ^ ! U U U Q  .` `  . .`  .Y ! ! Y Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U G ] G U ! ! ! ! ! Y  .` `  .` ..Y ! ! Y Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"! ! ! ! ! ! ! ! ! ! ! Q ] Q ! ! ! ! ! ! ! Y  .` !  .` ! ! ! Y Y Y Y Y Y Y U U U U U U U U U U U U I I I I I U H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"! ! ! ! ! ! ! ! ! ! ! U { U ! ! ! ! ! ! ! ! ! ..` ` ` ! Q ! Y Y Y Y Y Y U U U U U U U U U U U U I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y ! ! ! Y Y H ..H Y Y Y Y Y ! ! ! ! ! .. . .Y _ ! Y Y Y Y Y U U U U U U U U U U U U I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y H ..H Y Y Y Y Y Y Y ! ! Q Y |  .Y _ ! Y Y Y Y U U U U U U U U U U U I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y H ` ` Y Y Y Y Y Y Y Y ! _ _ Y  .Y _ _ Y Y Y Y U U U U U U U U U U I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y U ` ` U Y Y Y Y Y Y Y Y ! _ _ ! ! _ _ Y Y Y Y U U U U U U U U U I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y Y ~ ~ U Y Y Y Y Y Y Y Y Y _ _ ! ! _ _ Y Y Y U U U U U U U U U I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y Y U O.Y Y Y Y Y Y Y Y Y Y Z _ _ ! _ _ Y Y Y U U U U U U U I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U _ ! ! _ Z Y Y U U U U U U I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U Y Y Y Y Y U U U U U U U U U U U Y Y Y Y Y U _ ! _ U Y Y U U U U I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U Y Y Y Y _ _ _ U Y Y U U I I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U U Y Y Y Z _ _ _ Z U I I I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U U U Y Y Y U _ _ Q Q I I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U U U U T U T _ _ Q Q I I I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U U U U I Q Q Q _ Q Q Q I I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U U U U U I I I I I Q Q Q Q Q Q I I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U U U U U U U U U U U U U U U U U U I I I I I I I I I Q Q Q Q Q Q I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"I I I I I I I U I I I I I I I I I I I I I I I I I I I I I Q Q Q Q Q I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Q Q Q Q I I I I I Y H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Q Q Q I I I I I H H H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I Q Q Q Q I I I I H H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"U U Y H H H H H H H H H Y U U Y H H H H H H H Y H I I I I I I I Q Q Q I I I I H H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H Y I I I I I I I Q Q I I I I H H H H H H H H H H H H H H H H H H H H H H G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H Y I I I I I Q Q I I I I Y H H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I Q I I I I U H H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I Q I I I Y H H H H H H H H H H H H H H H H H H G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I I I I H H H H H H H H H H H H H H H H H G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I I I I H H H H H H H H H H H H H H H H G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I I I H H H H H H H H H H H H H H G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I I I H H H H H H H H H H H H G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I I H H H H H H H H H H G G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I I I I I Y H H H H H H H G G G G G G G G G G G G G F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ",
+"/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / R ' ' ' ` ] ` / / / / / ` ` ` ` ` ` ` ` ` ` ` ` T T T ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ",
+"h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h "
+};
diff --git a/org.eclipse.stem.ui/build.properties b/org.eclipse.stem.ui/build.properties
new file mode 100644
index 0000000..3ff5d0b
--- /dev/null
+++ b/org.eclipse.stem.ui/build.properties
@@ -0,0 +1,16 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties,\
+               bin/,\
+               branding/,\
+               splash.bmp,\
+               plugin_customization.ini,\
+               icons/,\
+               notice.html,\
+               epl-v10.html,\
+               images/,\
+               intro/
+               
diff --git a/org.eclipse.stem.ui/epl-v10.html b/org.eclipse.stem.ui/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.ui/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/feature.product b/org.eclipse.stem.ui/feature.product
new file mode 100644
index 0000000..54e68a2
--- /dev/null
+++ b/org.eclipse.stem.ui/feature.product
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="STEM" id="org.eclipse.stem.ui.product" application="org.eclipse.stem.ui.CoreEditorAdvisorApplication" useFeatures="true" includeLaunchers="true">
+
+   <aboutInfo>
+      <image path="/org.eclipse.stem.ui/branding/ohf64_64_32.gif"/>
+      <text>
+         Spatio-Temporal Epidemological/Event Modeler (STEM)
+      </text>
+   </aboutInfo>
+
+   <configIni use="default" path="plugin_customization.ini">
+   </configIni>
+
+   <launcherArgs>
+      <vmArgs>-Xms400M -Xmx600M</vmArgs>
+   </launcherArgs>
+
+   <windowImages i16="/org.eclipse.stem.ui/branding/ohf16_16_32.gif" i32="/org.eclipse.stem.ui/branding/ohf32_32_32.gif" i48="/org.eclipse.stem.ui/branding/ohf48_48_32.gif" i64="/org.eclipse.stem.ui/branding/ohf64_64_32.gif" i128="/org.eclipse.stem.ui/branding/ohf128_128_32.gif"/>
+
+   <splash
+      location="org.eclipse.stem.ui"
+      startupProgressRect="0,413,431,15"
+      startupMessageRect="10,380,431,20"
+      startupForegroundColor="FFFFFF" />
+   <launcher name="STEM">
+      <solaris/>
+      <win useIco="false">
+         <bmp
+            winSmallLow="/org.eclipse.stem.ui/branding/ohf16_16_8.bmp"
+            winMediumLow="/org.eclipse.stem.ui/branding/ohf32_32_8.bmp"
+            winLargeLow="/org.eclipse.stem.ui/branding/ohf48_48_8.bmp"/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+   </plugins>
+
+   <features>
+      <feature id="org.eclipse.stem.feature" version="0.2.1.qualifer"/>
+   </features>
+
+
+</product>
diff --git a/org.eclipse.stem.ui/icons/full/actions16/disabledPause.gif b/org.eclipse.stem.ui/icons/full/actions16/disabledPause.gif
new file mode 100644
index 0000000..685593e
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/disabledPause.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/disabledReset.gif b/org.eclipse.stem.ui/icons/full/actions16/disabledReset.gif
new file mode 100644
index 0000000..3a73b73
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/disabledReset.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/disabledRun.gif b/org.eclipse.stem.ui/icons/full/actions16/disabledRun.gif
new file mode 100644
index 0000000..060e43a
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/disabledRun.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/disabledStep.gif b/org.eclipse.stem.ui/icons/full/actions16/disabledStep.gif
new file mode 100644
index 0000000..b337c9f
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/disabledStep.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/disabledStop.gif b/org.eclipse.stem.ui/icons/full/actions16/disabledStop.gif
new file mode 100644
index 0000000..658b254
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/disabledStop.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/pause.gif b/org.eclipse.stem.ui/icons/full/actions16/pause.gif
new file mode 100644
index 0000000..e2ee9d7
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/pause.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/reset.gif b/org.eclipse.stem.ui/icons/full/actions16/reset.gif
new file mode 100644
index 0000000..82128f9
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/reset.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/run.gif b/org.eclipse.stem.ui/icons/full/actions16/run.gif
new file mode 100644
index 0000000..698b789
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/run.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/step.gif b/org.eclipse.stem.ui/icons/full/actions16/step.gif
new file mode 100644
index 0000000..3653ecb
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/step.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/actions16/stop.gif b/org.eclipse.stem.ui/icons/full/actions16/stop.gif
new file mode 100644
index 0000000..8b7ce3e
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/actions16/stop.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/.cvsignore b/org.eclipse.stem.ui/icons/full/customobj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Analysis.gif b/org.eclipse.stem.ui/icons/full/customobj16/Analysis.gif
new file mode 100644
index 0000000..56aeebb
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Analysis.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Batch.gif b/org.eclipse.stem.ui/icons/full/customobj16/Batch.gif
new file mode 100644
index 0000000..8fade4c
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Batch.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Decorator.gif b/org.eclipse.stem.ui/icons/full/customobj16/Decorator.gif
new file mode 100644
index 0000000..3c376ad
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Decorator.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/DynamicLabel.gif b/org.eclipse.stem.ui/icons/full/customobj16/DynamicLabel.gif
new file mode 100644
index 0000000..1b9e353
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/DynamicLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Edge.gif b/org.eclipse.stem.ui/icons/full/customobj16/Edge.gif
new file mode 100644
index 0000000..6addb9e
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Edge.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Experiment.gif b/org.eclipse.stem.ui/icons/full/customobj16/Experiment.gif
new file mode 100644
index 0000000..d6de3b1
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Experiment.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Graph.gif b/org.eclipse.stem.ui/icons/full/customobj16/Graph.gif
new file mode 100644
index 0000000..570b355
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Graph.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/GraphModelFile.gif b/org.eclipse.stem.ui/icons/full/customobj16/GraphModelFile.gif
new file mode 100644
index 0000000..d5216ba
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Label.gif b/org.eclipse.stem.ui/icons/full/customobj16/Label.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Label.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Model.gif b/org.eclipse.stem.ui/icons/full/customobj16/Model.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Model.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/ModelModelFile.gif b/org.eclipse.stem.ui/icons/full/customobj16/ModelModelFile.gif
new file mode 100644
index 0000000..0a0133b
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Modifier.gif b/org.eclipse.stem.ui/icons/full/customobj16/Modifier.gif
new file mode 100644
index 0000000..7038cd8
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Modifier.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Node.gif b/org.eclipse.stem.ui/icons/full/customobj16/Node.gif
new file mode 100644
index 0000000..76148f8
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Node.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Predicate.gif b/org.eclipse.stem.ui/icons/full/customobj16/Predicate.gif
new file mode 100644
index 0000000..46b758d
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Predicate.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/RealTimeSequencer.gif b/org.eclipse.stem.ui/icons/full/customobj16/RealTimeSequencer.gif
new file mode 100644
index 0000000..bbc4fca
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/RealTimeSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/RecordedSimulations.gif b/org.eclipse.stem.ui/icons/full/customobj16/RecordedSimulations.gif
new file mode 100644
index 0000000..910ca4e
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/RecordedSimulations.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/STEM.gif b/org.eclipse.stem.ui/icons/full/customobj16/STEM.gif
new file mode 100644
index 0000000..49d167f
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/STEM.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Scenario.gif b/org.eclipse.stem.ui/icons/full/customobj16/Scenario.gif
new file mode 100644
index 0000000..72888d5
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Scenario.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/ScenarioModelFile.gif b/org.eclipse.stem.ui/icons/full/customobj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..272daff
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Sequencer.gif b/org.eclipse.stem.ui/icons/full/customobj16/Sequencer.gif
new file mode 100644
index 0000000..ea7ed9b
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Sequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/SimulationControlView.gif b/org.eclipse.stem.ui/icons/full/customobj16/SimulationControlView.gif
new file mode 100644
index 0000000..c628d90
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/SimulationControlView.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/StaticLabel.gif b/org.eclipse.stem.ui/icons/full/customobj16/StaticLabel.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/StaticLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/StemExplorer.gif b/org.eclipse.stem.ui/icons/full/customobj16/StemExplorer.gif
new file mode 100644
index 0000000..19f337f
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/StemExplorer.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/Trigger.gif b/org.eclipse.stem.ui/icons/full/customobj16/Trigger.gif
new file mode 100644
index 0000000..a316038
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/Trigger.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/error_log.gif b/org.eclipse.stem.ui/icons/full/customobj16/error_log.gif
new file mode 100644
index 0000000..58873a1
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/error_log.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/customobj16/map.gif b/org.eclipse.stem.ui/icons/full/customobj16/map.gif
new file mode 100644
index 0000000..2984c30
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/customobj16/map.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/.cvsignore b/org.eclipse.stem.ui/icons/full/obj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.ui/icons/full/obj16/CommonModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/CommonModelFile.gif
new file mode 100644
index 0000000..22ec75b
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/CommonModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/ExperimentModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/ExperimentModelFile.gif
new file mode 100644
index 0000000..8315589
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/ExperimentModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/GraphModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/GraphModelFile.gif
new file mode 100644
index 0000000..6984fd4
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/ModelModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/ModelModelFile.gif
new file mode 100644
index 0000000..9d55bb2
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/ModifierModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/ModifierModelFile.gif
new file mode 100644
index 0000000..e5c6e17
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/ModifierModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/PredicateModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/PredicateModelFile.gif
new file mode 100644
index 0000000..366f9ff
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/PredicateModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/ScenarioModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..366f9ff
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/SequencerModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/SequencerModelFile.gif
new file mode 100644
index 0000000..3097cf4
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/SequencerModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/SolverModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/SolverModelFile.gif
new file mode 100644
index 0000000..8a7eeb2
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/SolverModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/obj16/TriggerModelFile.gif b/org.eclipse.stem.ui/icons/full/obj16/TriggerModelFile.gif
new file mode 100644
index 0000000..0ae2f8c
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/obj16/TriggerModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewCommon.gif b/org.eclipse.stem.ui/icons/full/wizban/NewCommon.gif
new file mode 100644
index 0000000..259704c
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewCommon.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewExperiment.gif b/org.eclipse.stem.ui/icons/full/wizban/NewExperiment.gif
new file mode 100644
index 0000000..a6b42e7
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewExperiment.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewGraph.gif b/org.eclipse.stem.ui/icons/full/wizban/NewGraph.gif
new file mode 100644
index 0000000..f3829ed
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewGraph.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewModel.gif b/org.eclipse.stem.ui/icons/full/wizban/NewModel.gif
new file mode 100644
index 0000000..dcf7f89
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewModel.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewModifier.gif b/org.eclipse.stem.ui/icons/full/wizban/NewModifier.gif
new file mode 100644
index 0000000..caab214
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewModifier.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewScenario.gif b/org.eclipse.stem.ui/icons/full/wizban/NewScenario.gif
new file mode 100644
index 0000000..e85f1da
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewScenario.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewSequencer.gif b/org.eclipse.stem.ui/icons/full/wizban/NewSequencer.gif
new file mode 100644
index 0000000..f9e80f0
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/icons/full/wizban/NewSolver.gif b/org.eclipse.stem.ui/icons/full/wizban/NewSolver.gif
new file mode 100644
index 0000000..eab53a9
--- /dev/null
+++ b/org.eclipse.stem.ui/icons/full/wizban/NewSolver.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/images/introtopiclabels/sample.gif b/org.eclipse.stem.ui/images/introtopiclabels/sample.gif
new file mode 100644
index 0000000..5ff1ffc
--- /dev/null
+++ b/org.eclipse.stem.ui/images/introtopiclabels/sample.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/images/introtopiclabels/sample_hov.gif b/org.eclipse.stem.ui/images/introtopiclabels/sample_hov.gif
new file mode 100644
index 0000000..6874164
--- /dev/null
+++ b/org.eclipse.stem.ui/images/introtopiclabels/sample_hov.gif
Binary files differ
diff --git a/org.eclipse.stem.ui/intro/css/overview.css b/org.eclipse.stem.ui/intro/css/overview.css
new file mode 100644
index 0000000..3e97030
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/overview.css
@@ -0,0 +1,17 @@
+a#stem-overview img {
+    background-image: url(../../images/introtopiclabels/sample.gif);
+}
+
+a#stem-overview:hover img {
+    background-image: url(../../images/introtopiclabels/sample_hov.gif);
+}
+
+a#stem-overview-faq img {
+    background-image: url(../../images/introtopiclabels/sample.gif);
+}
+
+a#stem-overview-faq:hover img {
+    background-image: url(../../images/introtopiclabels/sample_hov.gif);
+}
+
+
diff --git a/org.eclipse.stem.ui/intro/css/overview.properties b/org.eclipse.stem.ui/intro/css/overview.properties
new file mode 100644
index 0000000..57c1de3
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/overview.properties
@@ -0,0 +1,4 @@
+overview.stem-overview.link-icon = images/introtopiclabels/sample.gif
+overview.stem-overview.hover-icon = images/introtopiclabels/sample_hov.gif
+overview.stem-overview-faq.link-icon = images/introtopiclabels/sample.gif
+overview.stem-overview-faq.hover-icon = images/introtopiclabels/sample_hov.gif
diff --git a/org.eclipse.stem.ui/intro/css/tutorials.css b/org.eclipse.stem.ui/intro/css/tutorials.css
new file mode 100644
index 0000000..35049f4
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/tutorials.css
@@ -0,0 +1,8 @@
+a#stem-tutorials-main img {
+    background-image: url(../../images/introtopiclabels/sample.gif);
+}
+
+a#stem-tutorials-main:hover img {
+    background-image: url(../../images/introtopiclabels/sample_hov.gif);
+}
+
diff --git a/org.eclipse.stem.ui/intro/css/tutorials.properties b/org.eclipse.stem.ui/intro/css/tutorials.properties
new file mode 100644
index 0000000..d10365d
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/tutorials.properties
@@ -0,0 +1,6 @@
+tutorials.stem-tutorials-main.link-icon = images/introtopiclabels/sample.gif
+tutorials.stem-tutorials-main.hover-icon = images/introtopiclabels/sample_hov.gif
+#tutorials.stem-tutorial-youtube-english.link-icon = images/introtopiclabels/sample.gif
+#tutorials.stem-tutorial-youtube-english.hover-icon = images/introtopiclabels/sample_hov.gif
+#tutorials.stem-tutorial-youtube-spanish.link-icon = images/introtopiclabels/sample.gif
+#tutorials.stem-tutorial-youtube-spanish.hover-icon = images/introtopiclabels/sample_hov.gif
diff --git a/org.eclipse.stem.ui/intro/css/whatsnew.css b/org.eclipse.stem.ui/intro/css/whatsnew.css
new file mode 100644
index 0000000..82b81ad
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/whatsnew.css
@@ -0,0 +1,8 @@
+a#stem-noteworthy img {
+    background-image: url(../../images/introtopiclabels/sample.gif);
+}
+
+a#stem-noteworthy:hover img {
+    background-image: url(../../images/introtopiclabels/sample_hov.gif);
+}
+
diff --git a/org.eclipse.stem.ui/intro/css/whatsnew.properties b/org.eclipse.stem.ui/intro/css/whatsnew.properties
new file mode 100644
index 0000000..b33b903
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/css/whatsnew.properties
@@ -0,0 +1,2 @@
+tutorials.stem-noteworthy.link-icon = images/introtopiclabels/sample.gif
+tutorials.stem-noteworthy.hover-icon = images/introtopiclabels/sample_hov.gif
diff --git a/org.eclipse.stem.ui/intro/overviewExtensionContent.xml b/org.eclipse.stem.ui/intro/overviewExtensionContent.xml
new file mode 100644
index 0000000..4177b5c
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/overviewExtensionContent.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<introContent>
+	<extensionContent id="org.eclipse.stem.overview" name="STEM"
+		style="css/overview.css" alt-style="css/overview.properties" path="overview/@">
+		<group id="content-group" style-id="content-group">
+			<link  
+			    url="http://www.eclipse.org/stem" 
+			    label="Main STEM Project web page"
+			    id="stem-overview"
+				style-id="content-link">
+			</link>
+			<link  
+                url="http://wiki.eclipse.org/STEM_FAQ" 
+                label="FAQ"
+                id="stem-overview-faq"
+                style-id="content-link">
+            </link>
+		</group>
+	</extensionContent>
+</introContent>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/intro/tutorialsExtensionContent.xml b/org.eclipse.stem.ui/intro/tutorialsExtensionContent.xml
new file mode 100644
index 0000000..52b6967
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/tutorialsExtensionContent.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+ <introContent>
+    <extensionContent id="org.eclipse.stem.tutorials" name="STEM Tutorials"
+        style="css/tutorials.css" alt-style="css/tutorials.properties" path="tutorials/@">
+        <group label="STEM Tutorials" id="content-group" style-id="content-group">
+            <link
+                url="http://wiki.eclipse.org/Tutorials_for_Developers"
+                label="STEM Tutorial web page" 
+                id="stem-tutorials-main" style-id="content-link">
+                <text>The main STEM Tutorial Web Page.</text>
+            </link>
+            <!-- 
+            <link
+                url="http://www.youtube.com/watch?v=LfiibQX4IFE"
+                label="STEM Video English" 
+                id="stem-tutorial-youtube-english" style-id="content-link">
+                <text>STEM Video Tutorial (English)</text>
+            </link> 
+            -->
+        </group>    
+    </extensionContent>
+</introContent>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/intro/whatsnewExtensionContent.xml b/org.eclipse.stem.ui/intro/whatsnewExtensionContent.xml
new file mode 100644
index 0000000..77d06d8
--- /dev/null
+++ b/org.eclipse.stem.ui/intro/whatsnewExtensionContent.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+ 
+ <introContent>
+    <extensionContent id="org.eclipse.stem.noteworthy" name="STEM"
+        style="css/whatsnew.css" alt-style="css/whatsnew.properties" path="whatsnew/@">
+        <group id="content-group" style-id="content-group">
+            <link label="STEM"
+                url="http://www.eclipse.org/stem"
+                id="stem-noteworthy" style-id="content-link">
+                <text>STEM Project page</text>    
+            </link>        
+        </group>           
+    </extensionContent>
+ </introContent>
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/logo.png b/org.eclipse.stem.ui/logo.png
new file mode 100644
index 0000000..7b11c59
--- /dev/null
+++ b/org.eclipse.stem.ui/logo.png
Binary files differ
diff --git a/org.eclipse.stem.ui/notice.html b/org.eclipse.stem.ui/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.ui/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.ui/plugin.properties b/org.eclipse.stem.ui/plugin.properties
new file mode 100644
index 0000000..2da8e50
--- /dev/null
+++ b/org.eclipse.stem.ui/plugin.properties
Binary files differ
diff --git a/org.eclipse.stem.ui/plugin.xml b/org.eclipse.stem.ui/plugin.xml
new file mode 100644
index 0000000..3e8b02f
--- /dev/null
+++ b/org.eclipse.stem.ui/plugin.xml
@@ -0,0 +1,1521 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension-point id="org.eclipse.stem.ui.colorproviders" name="UI Color Providers" schema="schema/ui.coloproviders.exsd"/>
+
+  <extension
+    point="org.eclipse.core.runtime.applications"
+    id="CoreEditorAdvisorApplication">
+    <application>
+      <run
+        class="org.eclipse.stem.core.common.presentation.CoreEditorAdvisor$Application">
+      </run>
+    </application>
+  </extension>
+  <extension
+        id="org.eclipse.stem.ui.product"
+        point="org.eclipse.core.runtime.products">
+     <product
+           application="org.eclipse.stem.ui.CoreEditorAdvisorApplication"
+           name="STEM">
+        <property
+              name="preferenceCustomization"
+              value="plugin_customization.ini"/>
+        <property
+              name="aboutText"
+              value="Spatio-Temporal Epidemological/Event Modeler (STEM)"/>
+        <property
+              name="startupForegroundColor"
+              value="FFFFFF"/>
+        <property
+              name="startupMessageRect"
+              value="10,380,431,20"/>
+        <property
+              name="startupProgressRect"
+              value="0,413,431,15"/>
+        <property
+              name="windowImages"
+              value="branding/ohf16_16_32.gif,branding/ohf32_32_32.gif,branding/ohf48_48_32.gif,branding/ohf64_64_32.gif,branding/ohf128_128_32.gif"/>
+        <property
+              name="aboutImage"
+              value="branding/ohf64_64_32.gif"/>
+        <property
+              name="appName"
+              value="STEM">
+        </property>
+        
+        <!-- These are for the Welcome/intro.  See plugin.properties -->
+          <property
+            name="introTitle"
+            value="%introTitle">
+         </property>
+         
+         <property
+            name="introBrandingImage"
+            value="product:branding/ohf64_64_32.gif">
+         </property>
+
+         <property
+            name="introBrandingImageText"
+            value="%introBrandingImageText">
+         </property>
+         
+         <property
+            name="introDescription-overview"
+            value="%introDescription-overview">
+         </property>
+         <property
+            name="introDescription-firststeps"
+            value="%introDescription-firststeps">
+         </property>
+         <property
+            name="introDescription-tutorials"
+            value="%introDescription-tutorials">
+         </property>
+         <property
+            name="introDescription-samples"
+            value="%introDescription-samples">
+         </property>
+         <property
+            name="introDescription-whatsnew"
+            value="%introDescription-whatsnew">
+         </property>
+         <property
+            name="introDescription-migrate"
+            value="%introDescription-migrate">
+         </property>
+         <property
+            name="introDescription-webresources"
+            value="%introDescription-webresources">
+         </property>         
+            
+     </product>
+  </extension>
+   <extension
+         point="org.eclipse.ui.newWizards">
+      <category 
+            id="org.eclipse.stem.ui.wizards.stemcategory"
+            name="%_UI_STEM"
+            parentCategory="/"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewSTEMProjectWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/STEM.gif"
+            id="org.eclipse.stem.ui.wizards.newstemproject"
+            name="%_UI_New_STEM_Project_Wizard"
+            project="true"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewModelWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Model.gif"
+            id="org.eclipse.stem.ui.wizards.newmodel"
+            name="%_UI_ModelModelWizard_label"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewGraphWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Graph.gif"
+            id="org.eclipse.stem.ui.wizards.newgraph"
+            name="%_UI_GraphModelWizard_label"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard$NewFixedSequentialSequencerWizard"
+            icon="icons/full/customobj16/Sequencer.gif"
+            id="org.eclipse.stem.ui.wizards.newsequencer"
+            name="%_UI_SequencerModelWizard_label"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard$NewRealTimeSequencerWizard"
+            icon="icons/full/customobj16/Sequencer.gif"
+            id="org.eclipse.stem.ui.wizards.newrtsequencer"
+            name="%_UI_RealTimeSequencerModelWizard_label"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewScenarioWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Scenario.gif"
+            id="org.eclipse.stem.ui.wizards.newscenario"
+            name="%_UI_ScenarioModelWizard_label"/>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewExperimentWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Experiment.gif"
+            id="org.eclipse.stem.ui.wizards.newexperiment"
+            name="%_UI_ExperimentModelWizard_label">
+      </wizard>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewTriggerWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Trigger.gif"
+            id="org.eclipse.stem.ui.wizards.newtrigger"
+            name="%_UI_TriggerModelWizard_label">
+      </wizard>
+      <wizard
+            category="org.eclipse.stem.ui.wizards.stemcategory"
+            class="org.eclipse.stem.ui.wizards.NewPredicateWizard"
+            hasPages="true"
+            icon="icons/full/customobj16/Predicate.gif"
+            id="org.eclipse.stem.ui.wizards.newpredicate"
+            name="%_UI_PredicateModelWizard_label">
+      </wizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.stem.ui.views"
+            name="%_UI_STEM"
+            parentCategory="/"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.GraphsView"
+            icon="icons/full/customobj16/Graph.gif"
+            id="org.eclipse.stem.ui.views.graphs"
+            name="%_UI_Graphs"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.ModelsView"
+            icon="icons/full/customobj16/Model.gif"
+            id="org.eclipse.stem.ui.views.models"
+            name="%_UI_Models"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.ScenariosView"
+            icon="icons/full/customobj16/Scenario.gif"
+            id="org.eclipse.stem.ui.views.scenarios"
+            name="%_UI_Scenarios"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.SequencersView"
+            icon="icons/full/customobj16/Sequencer.gif"
+            id="org.eclipse.stem.ui.views.sequencers"
+            name="%_UI_Sequencers"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.DecoratorsView"
+            icon="icons/full/customobj16/Decorator.gif"
+            id="org.eclipse.stem.ui.views.decorators"
+            name="%_UI_Decorators"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.ActiveSimulationsView"
+            icon="icons/full/customobj16/STEM.gif"
+            id="org.eclipse.stem.ui.views.activesimulations"
+            name="%_UI_Active_Simulations_View"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.SimulationControlView"
+            icon="icons/full/customobj16/SimulationControlView.gif"
+            id="org.eclipse.stem.ui.views.simulationcontrolview"
+            name="%_UI_Simulation_Control_View"/>
+      <view
+            name="%_UI_Error_Log_View"
+            icon="icons/full/customobj16/error_log.gif"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.ui.internal.views.log.LogView"
+            id="org.eclipse.pde.runtime.LogView">
+      </view>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.geographic.map.MapView"
+            icon="icons/full/customobj16/map.gif"
+            id="org.eclipse.stem.ui.views.geographic.map"
+            name="%_UI_Map_View"/>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.ActiveBatchesView"
+            icon="icons/full/customobj16/Batch.gif"
+            id="org.eclipse.stem.ui.views.activebatches"
+            name="%_UI_Active_Batches_View">
+      </view>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.ExperimentsView"
+            icon="icons/full/customobj16/Experiment.gif"
+            id="org.eclipse.stem.ui.views.experiments"
+            name="%_UI_Experiments">
+      </view>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.TriggersView"
+            icon="icons/full/customobj16/Trigger.gif"
+            id="org.eclipse.stem.ui.views.triggers"
+            name="%_UI_Triggers">
+      </view>
+      <view
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.ui.views.PredicatesView"
+            icon="icons/full/customobj16/Predicate.gif"
+            id="org.eclipse.stem.ui.views.predicates"
+            name="%_UI_Predicates">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="org.eclipse.stem.ui.perspectives.Designer"
+            icon="icons/full/customobj16/STEM.gif"
+            id="org.eclipse.stem.ui.STEMDesignerPerspective"
+            name="%_UI_Designer_Perspective"/>
+      <perspective
+            class="org.eclipse.stem.ui.perspectives.Simulation"
+            icon="branding/ohf16_16_8.bmp"
+            id="org.eclipse.stem.ui.STEMSimulationPerspective"
+            name="%_UI_Simulation_Perspective"/>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            class="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            id="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            name="%_UI_STEM"/>
+      <page
+            category="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            class="org.eclipse.stem.ui.preferences.VisualizationPreferencePage"
+            id="org.eclipse.stem.ui.preferences.VisualizationPreferencePage"
+            name="%_UI_VizPPage"/>
+      <page
+            category="org.eclipse.stem.ui.preferences.VisualizationPreferencePage"
+            class="org.eclipse.stem.ui.preferences.MapsColorsPreferencePage"
+            id="org.eclipse.stem.ui.preferences.MapsColorsPreferencePage"
+            name="%_UI_ColorsPPage">
+      </page>
+       <page
+            category="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            class="org.eclipse.stem.ui.preferences.SolverPreferencePage"
+            id="org.eclipse.stem.ui.preferences.SolverPreferencePage"
+            name="%_UI_SolverPPage">
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer class="org.eclipse.stem.ui.preferences.PreferenceInitializer"/>
+      <initializer class="org.eclipse.stem.ui.views.geographic.map.preferences.PreferenceInitializer"/>
+      <initializer
+            class="org.eclipse.stem.ui.preferences.MapsColorsPreferenceInitializer">
+      </initializer>
+   </extension>
+
+<!--
+  <extension
+    point="org.eclipse.ui.commands">
+    <command
+      name="%_UI_Menu_OpenURI_label"
+      description="%_UI_Menu_OpenURI_description"
+      categoryId="org.eclipse.ui.category.file"
+      id="org.eclipse.stem.core.common.presentation.CoreEditorAdvisorOpenURICommand" />
+    <command
+      name="%_UI_Menu_Open_label"
+      description="%_UI_Menu_Open_description"
+      categoryId="org.eclipse.ui.category.file"
+      id="org.eclipse.stem.core.common.presentation.CoreEditorAdvisorOpenCommand" />
+  </extension>
+-->
+<!--
+  <extension
+    point="org.eclipse.ui.bindings">
+    <key
+      commandId="org.eclipse.stem.core.common.presentation.CoreEditorAdvisorOpenURICommand"
+      sequence="M1+U"
+      schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
+    <key
+      commandId="org.eclipse.stem.core.common.presentation.CoreEditorAdvisorOpenCommand"
+      sequence="M1+O"
+      schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
+  </extension>
+-->
+
+
+
+
+
+
+
+
+
+
+  <extension point = "org.eclipse.ui.editors">
+    <editor
+        id = "org.eclipse.stem.core.model.presentation.ModelEditorID"
+        name = "%_UI_ModelEditor_label"
+        icon = "icons/full/obj16/ModelModelFile.gif"
+        extensions = "model"
+        class = "org.eclipse.stem.core.model.presentation.ModelEditor"
+        contributorClass="org.eclipse.stem.core.model.presentation.ModelActionBarContributor" >
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.graph.presentation.GraphEditor"
+          contributorClass="org.eclipse.stem.core.graph.presentation.GraphActionBarContributor"
+          extensions="graph"
+          icon="icons/full/obj16/GraphModelFile.gif"
+          id="org.eclipse.stem.core.graph.presentation.GraphEditorID"
+          name="%_UI_GraphEditor_label"/>
+    <editor
+          class="org.eclipse.stem.core.sequencer.presentation.SequencerEditor"
+          contributorClass="org.eclipse.stem.core.sequencer.presentation.SequencerActionBarContributor"
+          extensions="sequencer"
+          icon="icons/full/obj16/SequencerModelFile.gif"
+          id="org.eclipse.stem.sequencer.presentation.SequencerEditorID"
+          name="%_UI_SequencerEditor_label">
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.scenario.presentation.ScenarioEditor"
+          contributorClass="org.eclipse.stem.core.scenario.presentation.ScenarioActionBarContributor"
+          extensions="scenario"
+          icon="icons/full/obj16/ScenarioModelFile.gif"
+          id="org.eclipse.stem.core.scenario.presentation.ScenarioEditorID"
+          name="%_UI_ScenarioEditor_label">
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.experiment.presentation.ExperimentEditor"
+          contributorClass="org.eclipse.stem.core.experiment.presentation.ExperimentActionBarContributor"
+          default="false"
+          extensions="experiment"
+          icon="icons/full/obj16/ExperimentModelFile.gif"
+          id="org.eclipse.stem.core.experiment.presentation.ExperimentEditorID"
+          name="%_UI_ExperimentEditor_label">
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.trigger.presentation.TriggerEditor"
+          contributorClass="org.eclipse.stem.core.trigger.presentation.TriggerActionBarContributor"
+          default="false"
+          extensions="trigger"
+          icon="icons/full/obj16/TriggerModelFile.gif"
+          id="org.eclipse.stem.core.trigger.presentation.TriggerEditorID"
+          name="%_UI_TriggerEditor_label">
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.predicate.presentation.PredicateEditor"
+          contributorClass="org.eclipse.stem.core.predicate.presentation.PredicateActionBarContributor"
+          default="false"
+          extensions="predicate"
+          icon="icons/full/obj16/PredicateModelFile.gif"
+          id="org.eclipse.stem.core.predicate.presentation.PredicateEditorID"
+          name="%_UI_PredicateEditor_label">
+    </editor>
+    <editor
+          class="org.eclipse.stem.core.modifier.presentation.ModifierEditor"
+          contributorClass="org.eclipse.stem.core.modifier.presentation.ModifierActionBarContributor"
+          default="false"
+          extensions="modifier"
+          icon="icons/full/obj16/ModifierModelFile.gif"
+          id="org.eclipse.stem.core.modifier.presentation.ModifierEditorID"
+          name="%_UI_ModifierEditor_label">
+    </editor>
+  </extension>
+
+  
+  <extension
+        point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu?after=edit">
+         <menu
+               id="org.eclipse.stem.ui.menu.newwizards"
+               label="%_UI_STEM_NewActionSet_Menu">
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.experiment"
+                  icon="icons/full/customobj16/Experiment.gif"
+                  label="%_UI_ExperimentModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ExperimentModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.trigger"
+                  icon="icons/full/customobj16/Trigger.gif"
+                  label="%_UI_TriggerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_TriggerModelWizard_description ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.predicate"
+                  icon="icons/full/customobj16/Predicate.gif"
+                  label="%_UI_PredicateModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_PredicateModelWizard_description ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.rtsequencer"
+                  icon="icons/full/customobj16/RealTimeSequencer.gif"
+                  label="%_UI_RealTimeSequencerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_RealTimeSequencerModelWizard_description">
+            </command>     
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.seqsequencer"
+                  icon="icons/full/customobj16/Sequencer.gif"
+                  label="%_UI_SequencerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_SequencerModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.scenario"
+                  icon="icons/full/customobj16/Scenario.gif"
+                  label="%_UI_ScenarioModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ScenarioModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.model"
+                  icon="icons/full/customobj16/Model.gif"
+                  label="%_UI_ModelModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ModelModelWizard_description ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.graph"
+                  icon="icons/full/customobj16/Graph.gif"
+                  label="%_UI_GraphModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_GraphModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.project"
+                  icon="icons/full/customobj16/StemExplorer.gif"
+                  label="%_UI_New_STEM_Project_Wizard"
+                  style="push"
+                  tooltip="%_UI_New_STEM_Project_Wizard_TT ">
+            </command>
+            <separator
+                  name="additions">
+            </separator>
+         </menu>
+      </menuContribution>
+      <menuContribution
+            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+         <toolbar
+               id="org.eclipse.stem.ui.toolbar.newwizards">
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.project"
+                  icon="icons/full/customobj16/StemExplorer.gif"
+                  label="%_UI_New_STEM_Project_Wizard"
+                  style="push"
+                  tooltip="%_UI_New_STEM_Project_Wizard_TT ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.scenario"
+                  icon="icons/full/customobj16/Scenario.gif"
+                  label="%_UI_ScenarioModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ScenarioModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.model"
+                  icon="icons/full/customobj16/Model.gif"
+                  label="%_UI_ModelModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ModelModelWizard_description ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.graph"
+                  icon="icons/full/customobj16/Graph.gif"
+                  label="%_UI_GraphModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_GraphModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.seqsequencer"
+                  icon="icons/full/customobj16/Sequencer.gif"
+                  label="%_UI_SequencerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_SequencerModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.experiment"
+                  icon="icons/full/customobj16/Experiment.gif"
+                  label="%_UI_ExperimentModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_ExperimentModelWizard_description">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.trigger"
+                  icon="icons/full/customobj16/Trigger.gif"
+                  label="%_UI_TriggerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_TriggerModelWizard_description ">
+            </command>
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.predicate"
+                  icon="icons/full/customobj16/Predicate.gif"
+                  label="%_UI_PredicateModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_PredicateModelWizard_description ">
+            </command>
+<!--          
+            <command
+                  commandId="org.eclipse.stem.ui.command.wiz.rtsequencer"
+                  icon="icons/full/customobj16/RealTimeSequencer.gif"
+                  label="%_UI_RealTimeSequencerModelWizard_label"
+                  style="push"
+                  tooltip="%_UI_RealTimeSequencerModelWizard_description">
+            </command>
+-->           
+            <separator
+                  name="additions">
+            </separator>
+         </toolbar>
+      </menuContribution>
+     <menuContribution
+           locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+        <toolbar
+              id="org.eclipse.stem.ui.toolbar">
+           <command
+                 commandId="org.eclipse.stem.ui.command.run"
+                 disabledIcon="icons/full/actions16/disabledRun.gif"
+                 icon="icons/full/actions16/run.gif"
+                 label="%_UI_STEM_Command_Run"
+                 mnemonic="%_UI_STEM_Command_RunMne"
+                 style="push"
+                 tooltip="%_UI_STEM_Command_RunTT">
+           </command>
+           <command
+                 commandId="org.eclipse.stem.ui.command.pause"
+                 disabledIcon="icons/full/actions16/disabledPause.gif"
+                 icon="icons/full/actions16/pause.gif"
+                 label="%_UI_STEM_Command_Pause"
+                 mnemonic="%_UI_STEM_Command_PauseMne"
+                 style="push"
+                 tooltip="%_UI_STEM_Command_PauseTT">
+           </command>
+           <command
+                 commandId="org.eclipse.stem.ui.command.step"
+                 disabledIcon="icons/full/actions16/disabledStep.gif"
+                 icon="icons/full/actions16/step.gif"
+                 label="%_UI_STEM_Command_Step"
+                 mnemonic="%_UI_STEM_Command_StepMne"
+                 style="push"
+                 tooltip="%_UI_STEM_Command_StepTT">
+           </command>
+           <command
+                 commandId="org.eclipse.stem.ui.command.reset"
+                 disabledIcon="icons/full/actions16/disabledReset.gif"
+                 icon="icons/full/actions16/reset.gif"
+                 label="%_UI_STEM_Command_Reset"
+                 mnemonic="%_UI_STEM_Command_ResetMne"
+                 style="push"
+                 tooltip="%_UI_STEM_Command_ResetTT">
+           </command>
+           <command
+                 commandId="org.eclipse.stem.ui.command.stop"
+                 disabledIcon="icons/full/actions16/disabledStop.gif"
+                 icon="icons/full/actions16/stop.gif"
+                 label="%_UI_STEM_Command_Stop"
+                 mnemonic="%_UI_STEM_Command_StopMne"
+                 style="push"
+                 tooltip="%_UI_STEM_Command_StopTT">
+           </command>
+           <separator
+                 name="additions">
+           </separator>
+        </toolbar>
+     </menuContribution>
+     <menuContribution
+           locationURI="popup:org.eclipse.ui.popup.any?after=additions">
+        <command
+              commandId="org.eclipse.stem.ui.command.run"
+              disabledIcon="icons/full/actions16/disabledRun.gif"
+              icon="icons/full/actions16/run.gif"
+              label="%_UI_STEM_Command_Run"
+              mnemonic="%_UI_STEM_Command_RunMne"
+              style="push"
+              tooltip="%_UI_STEM_Command_RunTT">
+           <visibleWhen
+                 checkEnabled="false">
+              <reference
+                    definitionId="org.eclipse.stem.ui.isexecutable">
+              </reference>
+           </visibleWhen>
+        </command>
+        <command
+              commandId="org.eclipse.stem.ui.command.step"
+              disabledIcon="icons/full/actions16/disabledStep.gif"
+              icon="icons/full/actions16/step.gif"
+              label="%_UI_STEM_Command_Step"
+              mnemonic="%_UI_STEM_Command_StepMne"
+              style="push"
+              tooltip="%_UI_STEM_Command_StepTT">
+           <visibleWhen
+                 checkEnabled="false">
+              <reference
+                    definitionId="org.eclipse.stem.ui.isexecutable">
+              </reference>
+           </visibleWhen>
+        </command>
+     </menuContribution>
+      <menuContribution
+           locationURI="popup:org.eclipse.ui.popup.any?after=additions">
+        <command
+              commandId="org.eclipse.stem.ui.command.newmodifierwizard"
+              icon="icons/full/customobj16/Modifier.gif"
+              label="%_UI_STEM_Command_NewModWiz"
+              style="push"
+              tooltip="%_UI_STEM_Command_NewModWizTT">
+           <visibleWhen
+                 checkEnabled="false">
+              <reference
+                    definitionId="org.eclipse.stem.ui.isModifiableIdentifiable">
+              </reference>
+           </visibleWhen>
+        </command>
+     </menuContribution>
+  </extension>
+  <extension
+        point="org.eclipse.ui.commands">
+     <category
+           description="%_UI_STEM_WizCmd_Cat_Desc"
+           id="org.eclipse.stem.ui.wizards"
+           name="%_UI_STEM_WizCmd_Cat_Name">
+     </category>
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewSTEMProjectWizard$NewSTEMProjectWizardCommandHandler"
+           description="%_UI_New_STEM_Project_Wizard_TT "
+           id="org.eclipse.stem.ui.command.wiz.project"
+           name="%_UI_New_STEM_Project_Wizard">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.wizards"
+           defaultHandler="org.eclipse.stem.ui.wizards.NewScenarioWizard$NewScenarioWizardCommandHandler"
+           description="%_UI_ScenarioModelWizard_description"
+           id="org.eclipse.stem.ui.command.wiz.scenario"
+           name="%_UI_ScenarioModelWizard_label">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.wizards"
+           defaultHandler="org.eclipse.stem.ui.wizards.NewModelWizard$NewModelWizardCommandHandler"
+           description="%_UI_ModelModelWizard_description "
+           id="org.eclipse.stem.ui.command.wiz.model"
+           name="%_UI_ModelModelWizard_label">
+     </command>
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard$NewFixedSequentialSequencerWizard$NewSequentialSequencerWizardCommandHandler"
+           description="%_UI_SequencerModelWizard_description"
+           id="org.eclipse.stem.ui.command.wiz.seqsequencer"
+           name="%_UI_SequencerModelWizard_label">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.wizards"
+           defaultHandler="org.eclipse.stem.ui.wizards.NewGraphWizard$NewGraphWizardCommandHandler"
+           description="%_UI_GraphModelWizard_description"
+           id="org.eclipse.stem.ui.command.wiz.graph"
+           name="%_UI_GraphModelWizard_label">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.wizards"
+           defaultHandler="org.eclipse.stem.ui.wizards.NewPredicateWizard$NewPredicateWizardCommandHandler"
+           description="%_UI_PredicateModelWizard_description "
+           id="org.eclipse.stem.ui.command.wiz.predicate"
+           name="%_UI_PredicateModelWizard_label">
+     </command>
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard$NewRealTimeSequencerWizard$NewRealTimeSequencerWizardCommandHandler"
+           description="%_UI_RealTimeSequencerModelWizard_description"
+           id="org.eclipse.stem.ui.command.wiz.rtsequencer"
+           name="%_UI_RealTimeSequencerModelWizard_label">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.wizards"
+           defaultHandler="org.eclipse.stem.ui.wizards.NewTriggerWizard$NewTriggerWizardCommandHandler"
+           description="%_UI_TriggerModelWizard_description "
+           id="org.eclipse.stem.ui.command.wiz.trigger"
+           name="%_UI_TriggerModelWizard_label">
+     </command>
+     <command
+           defaultHandler="org.eclipse.stem.ui.wizards.NewExperimentWizard$NewExperimentWizardCommandHandler"
+           description="%_UI_ExperimentModelWizard_description"
+           id="org.eclipse.stem.ui.command.wiz.experiment"
+           name="%_UI_ExperimentModelWizard_label">
+     </command>
+  </extension>
+  
+  <extension
+        point="org.eclipse.ui.commands">
+     <category
+           description="%_UI_STEM_Execution_Command_Cat_Desc"
+           id="org.eclipse.stem.ui.execution"
+           name="%_UI_STEM_Execution_Command_Cat">
+     </category>
+     <command
+           categoryId="org.eclipse.stem.ui.execution"
+           description="%_UI_STEM_Command_Run_Desc"
+           id="org.eclipse.stem.ui.command.run"
+           name="%_UI_STEM_Command_Run">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.execution"
+           description="%_UI_STEM_Command_Step_Desc"
+           id="org.eclipse.stem.ui.command.step"
+           name="%_UI_STEM_Command_Step">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.execution"
+           description="%_UI_STEM_Command_Reset_Desc"
+           id="org.eclipse.stem.ui.command.reset"
+           name="%_UI_STEM_Command_Reset">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.execution"
+           description="%_UI_STEM_Command_Stop_Desc"
+           id="org.eclipse.stem.ui.command.stop"
+           name="%_UI_STEM_Command_Stop">
+     </command>
+     <command
+           categoryId="org.eclipse.stem.ui.execution"
+           description="%_UI_STEM_Command_Pause_Desc"
+           id="org.eclipse.stem.ui.command.pause"
+           name="%_UI_STEM_Command_Pause">
+     </command>
+  </extension>
+  <extension
+        point="org.eclipse.ui.handlers">
+     <handler
+           class="org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler$RunCommandHandler"
+           commandId="org.eclipse.stem.ui.command.run">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.executableNotRunning">
+           </reference>
+        </activeWhen>
+     </handler>
+     <handler
+           class="org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler$PauseCommandHandler"
+           commandId="org.eclipse.stem.ui.command.pause">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.executableRunning">
+           </reference>
+        </activeWhen>
+     </handler>
+     <handler
+           class="org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler$StepCommandHandler"
+           commandId="org.eclipse.stem.ui.command.step">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.executableNotRunning">
+           </reference>
+        </activeWhen>
+     </handler>
+     <handler
+           class="org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler$ResetCommandHandler"
+           commandId="org.eclipse.stem.ui.command.reset">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.executableStoppable">
+           </reference>
+        </activeWhen>
+     </handler>
+     <handler
+           class="org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler$StopCommandHandler"
+           commandId="org.eclipse.stem.ui.command.stop">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.executableStoppable">
+           </reference>
+        </activeWhen>
+     </handler>
+  </extension>
+  <extension
+        point="org.eclipse.ui.commands">
+     <category
+           description="%_UI_STEM_Experiment_Command_Cat_Desc"
+           id="org.eclipse.stem.ui.experiment"
+           name="%_UI_STEM_Experiment_Command_Cat">
+     </category>
+     <command
+           categoryId="org.eclipse.stem.ui.experiment"
+           description="%_UI_STEM_Command_NewModWiz_Desc"
+           id="org.eclipse.stem.ui.command.newmodifierwizard"
+           name="%_UI_STEM_Command_NewModWiz">
+     </command>
+  </extension>
+  <extension
+        point="org.eclipse.ui.handlers">
+     <handler
+           class="org.eclipse.stem.ui.wizards.NewModifierWizard$NewModifierWizardCommandHandler"
+           commandId="org.eclipse.stem.ui.command.newmodifierwizard">
+        <activeWhen>
+           <reference
+                 definitionId="org.eclipse.stem.ui.isModifiableIdentifiable">
+           </reference>
+        </activeWhen>
+     </handler>
+  </extension>
+  <extension
+        point="org.eclipse.core.expressions.propertyTesters">
+     <propertyTester
+           class="org.eclipse.stem.ui.handlers.IdentifiableDelegatePropertyTester"
+           id="org.eclipse.stem.ui.identifiabledelegatepropertytester"
+           namespace="org.eclipse.stem.identifabledelegate"
+           properties="runnable"
+           type="org.eclipse.stem.ui.views.IdentifiableDelegate">
+     </propertyTester>
+     <propertyTester
+           class="org.eclipse.stem.ui.handlers.ExecutablePropertyTester"
+           id="org.eclipse.stem.ui.executablepropertytester"
+           namespace="org.eclipse.stem.jobs.executable"
+           properties="running, stoppable"
+           type="org.eclipse.stem.jobs.execution.IExecutable">
+     </propertyTester>
+  </extension>
+  <extension
+        point="org.eclipse.core.runtime.adapters">
+         <factory 
+            class="org.eclipse.stem.ui.adapters.executable.IdentifiableDelegateExecutableAdapterFactory" 
+            adaptableType="org.eclipse.stem.ui.views.IdentifiableDelegate">
+            <adapter type="org.eclipse.stem.jobs.execution.IExecutable"/>
+         </factory>
+         <factory
+               adaptableType="org.eclipse.stem.ui.views.IdentifiableDelegate"
+               class="org.eclipse.stem.ui.adapters.identifiable.IdentifiableDelegateIdentifiableAdapterFactory">
+            <adapter
+                  type="org.eclipse.stem.core.common.Identifiable">
+            </adapter>
+         </factory>
+         <factory
+               adaptableType="org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider"
+               class="org.eclipse.stem.ui.adapters.identifiable.DelegatingWrapperItemProviderIdentifiableAdapterFactory">
+            <adapter
+                  type="org.eclipse.stem.core.common.Identifiable">
+            </adapter>
+         </factory>
+         <factory
+               adaptableType="org.eclipse.stem.ui.views.IdentifiableDelegate"
+               class="org.eclipse.stem.ui.adapters.modifiable.IdentifiableDelegateModifiableAdapterFactory">
+            <adapter
+                  type="org.eclipse.stem.core.modifier.Modifiable">
+            </adapter>
+         </factory>
+         <factory
+               adaptableType="org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider"
+               class="org.eclipse.stem.ui.adapters.modifiable.DelegatingWrapperItemProviderModifiableAdapterFactory">
+            <adapter
+                  type="org.eclipse.stem.core.modifier.Modifiable">
+            </adapter>
+         </factory>
+  </extension>
+  <extension
+        point="org.eclipse.core.expressions.definitions">
+     <definition
+           id="org.eclipse.stem.ui.executableRunning">
+        <with
+              variable="selection">
+           <iterate
+                 ifEmpty="false"
+                 operator="and">
+              <adapt
+                    type="org.eclipse.stem.jobs.execution.IExecutable">
+                 <test
+                       property="org.eclipse.stem.jobs.executable.running">
+                 </test>
+              </adapt>
+           </iterate>
+        </with>
+     </definition>
+     <definition
+           id="org.eclipse.stem.ui.executableNotRunning">
+        <with
+              variable="selection">
+           <iterate
+                 ifEmpty="false"
+                 operator="and">
+              <adapt
+                    type="org.eclipse.stem.jobs.execution.IExecutable">
+                 <not>
+                    <test
+                          property="org.eclipse.stem.jobs.executable.running">
+                    </test>
+                 </not>
+              </adapt>
+           </iterate>
+        </with>
+     </definition>
+     <definition
+           id="org.eclipse.stem.ui.executableStoppable">
+        <with
+              variable="selection">
+           <iterate
+                 ifEmpty="false"
+                 operator="and">
+              <adapt
+                    type="org.eclipse.stem.jobs.execution.IExecutable">
+                 <test
+                       property="org.eclipse.stem.jobs.executable.stoppable">
+                 </test>
+              </adapt>
+           </iterate>
+        </with>
+     </definition>
+     <definition
+           id="org.eclipse.stem.ui.isexecutable">
+        <with
+              variable="selection">
+           <iterate
+                 ifEmpty="false"
+                 operator="and">
+              <adapt
+                    type="org.eclipse.stem.jobs.execution.IExecutable">
+              </adapt>
+           </iterate>
+        </with>
+     </definition>
+     <definition
+           id="org.eclipse.stem.ui.isIdentifiableDelegate">
+        <with
+              variable="selection">
+           <iterate
+                 operator="and">
+              <adapt
+                    type="org.eclipse.stem.ui.views.IdentifiableDelegate">
+              </adapt>
+           </iterate>
+        </with>
+     </definition>
+     <definition
+           id="org.eclipse.stem.ui.isModifiableIdentifiable">
+        <with
+              variable="selection">
+           <iterate
+                 operator="and">
+              <and>
+                 <adapt
+                       type="org.eclipse.stem.core.common.Identifiable">
+                 </adapt>
+                 <adapt
+                       type="org.eclipse.stem.core.modifier.Modifiable">
+                 </adapt>
+                 <not>
+                    <reference
+                          definitionId="org.eclipse.stem.ui.isexecutable">
+                    </reference>
+                 </not>
+                 <not>
+                    <adapt
+                          type="org.eclipse.stem.core.modifier.Modifier">
+                    </adapt>
+                 </not>
+              </and>
+           </iterate>
+        </with>
+     </definition>
+  </extension>
+  <extension
+        point="org.eclipse.ui.menus">
+     <menuContribution
+           locationURI="popup:org.eclipse.stem.ui.views.STEMProjectExplorer?after=additions">
+        <command
+              commandId="org.eclipse.ui.file.refresh"
+              label="%_UI_Refresh "
+              style="push"
+              tooltip="%_UI_RefreshTT">
+        </command>
+     </menuContribution>
+     <menuContribution
+           locationURI="popup:org.eclipse.stem.ui.views.STEMProjectExplorer?after=additions">
+        <command
+              commandId="org.eclipse.ui.edit.delete"
+              label="%_UI_Delete"
+              style="push"
+              tooltip="%_UI_DeleteTT">
+        </command>
+     </menuContribution>
+  </extension>
+  <extension
+        point="org.eclipse.core.expressions.definitions">
+     <definition
+           id="org.eclipse.stem.ui.isDeleteable">
+        <with
+              variable="selection">
+           <iterate
+                 operator="and">
+              <or>
+                 <adapt
+                       type="org.eclipse.core.resources.IFile">
+                 </adapt>
+                 <adapt
+                       type="org.eclipse.core.resources.IProject">
+                 </adapt>
+              </or>
+           </iterate>
+        </with>
+     </definition>
+  </extension>
+  <extension
+        point="org.eclipse.ui.views">
+     <view
+           allowMultiple="false"
+           category="org.eclipse.stem.ui.views"
+           class="org.eclipse.ui.navigator.CommonNavigator"
+           icon="icons/full/customobj16/StemExplorer.gif"
+           id="org.eclipse.ui.navigator.ProjectExplorer"
+           name="%_UI_Project_Explorer"
+           restorable="true">
+     </view>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.viewer">
+     <viewer
+           viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+     </viewer>
+     <viewerContentBinding
+           viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+        <includes>
+           <contentExtension
+                 isRoot="true"
+                 pattern="org.eclipse.ui.navigator.resourceContent">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.ui.navigator.resources.filters.*">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.identifiabletreenodes">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.decorators">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.scenarios">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.sequencers">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.experiments">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.models">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.modifiers">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.graphs">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.recorded">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.triggers">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.predicates">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.identifiables2">
+           </contentExtension>
+           <contentExtension
+                 pattern="org.eclipse.stem.ui.views.explorer.delegatingwrapperitemprovider">
+           </contentExtension>
+        </includes>
+     </viewerContentBinding>
+     <viewerActionBinding
+           viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+        <includes>
+           <actionExtension
+                 pattern="org.eclipse.ui.navigator.resources.*">
+           </actionExtension>
+        </includes>
+     </viewerActionBinding>
+     <viewerActionBinding
+           viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+        <includes>
+           <actionExtension
+                 pattern="org.eclipse.stem.ui.action.*">
+           </actionExtension>
+        </includes>
+     </viewerActionBinding>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.navigatorContent">
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNodeContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.identifiabletreenodes"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNodeLabelProvider"
+           name="IdentifiableTreeNodes">
+        <triggerPoints>
+           <adapt
+                 type="org.eclipse.core.resources.IProject">
+           </adapt>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.RecordedTreeNodeContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.recorded"
+           labelProvider="org.eclipse.stem.ui.views.explorer.RecordedTreeNodeLabelProvider"
+           name="%_UI_Recorded_Sims ">
+        <triggerPoints>
+           <adapt
+                 type="org.eclipse.core.resources.IProject">
+           </adapt>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.RecordedTreeNode">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.navigatorContent">
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           id="org.eclipse.stem.ui.views.explorer.identifiables2"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Identifiables">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.core.common.Identifiable">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <instanceof
+                 value="org.eclipse.stem.core.common.Identifiable">
+           </instanceof>
+        </possibleChildren>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.graphs"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Graphs">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$GraphsTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.graph.Graph">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$GraphsTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.scenarios"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Scenarios">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ScenariosTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.scenario.Scenario">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ScenariosTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.sequencers"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Sequencers">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$SequencersTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.sequencer.Sequencer">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$SequencersTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.triggers"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Triggers">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$TriggersTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.trigger.Trigger">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$TriggersTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.experiments"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Experiments">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ExperimentsTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.experiment.Experiment">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ExperimentsTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.modifiers"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Modifiers">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ModifiersTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.modifier.Modifier">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ModifiersTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.models"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Models">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ModelsTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.model.Model">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$ModelsTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.predicates"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Predicates">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$PredicatesTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.predicate.Predicate">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$PredicatesTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+     <navigatorContent
+           contentProvider="org.eclipse.stem.ui.views.explorer.IdentifiableContentProvider"
+           id="org.eclipse.stem.ui.views.explorer.decorators"
+           labelProvider="org.eclipse.stem.ui.views.explorer.IdentifiableProvider"
+           name="%_UI_Decorators">
+        <triggerPoints>
+           <instanceof
+                 value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$DecoratorsTreeNode">
+           </instanceof>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.String">
+              </instanceof>
+              <instanceof
+                    value="org.eclipse.stem.core.model.Decorator">
+              </instanceof>
+           </or>
+        </possibleChildren>
+        <dropAssistant
+              class="org.eclipse.stem.ui.views.explorer.IdentifiableDropAdapterAssistant"
+              id="org.eclipse.stem.ui.views.explorer.identifabledropassistant">
+           <possibleDropTargets>
+              <instanceof
+                    value="org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode$DecoratorsTreeNode">
+              </instanceof>
+           </possibleDropTargets>
+        </dropAssistant>
+     </navigatorContent>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.navigatorContent">
+     <actionProvider
+           class="org.eclipse.stem.ui.handlers.EditorActionProvider"
+           id="org.eclipse.stem.ui.action.editor.open">
+        <enablement>
+           <instanceof
+                 value="org.eclipse.stem.core.common.Identifiable">
+           </instanceof>
+        </enablement>
+     </actionProvider>
+  </extension>
+  
+  <extension
+    point="org.eclipse.ui.intro">
+    <introProductBinding
+        introId="org.eclipse.ui.intro.universal"
+        productId="org.eclipse.stem.ui.product">
+    </introProductBinding>
+  </extension>
+  
+  <extension
+    point="org.eclipse.ui.intro.configExtension">
+    <configExtension
+        configId="org.eclipse.ui.intro.universalConfig"
+        content="$nl$/intro/overviewExtensionContent.xml">
+    </configExtension>
+    <configExtension
+        configId="org.eclipse.ui.intro.universalConfig"
+        content="$nl$/intro/whatsnewExtensionContent.xml">
+    </configExtension>
+    <configExtension
+        configId="org.eclipse.ui.intro.universalConfig"
+        content="$nl$/intro/tutorialsExtensionContent.xml">
+    </configExtension>
+  </extension>
+
+
+  <extension
+         point="org.eclipse.ui.splashHandlers">
+      <splashHandler
+            class="org.eclipse.stem.ui.splashhandler.SplashHandler"
+            id="org.eclipse.stem.ui.splashhandler">
+      </splashHandler>
+      <splashHandlerProductBinding
+            productId="org.eclipse.stem.ui.product"
+            splashId="org.eclipse.stem.ui.splashhandler">
+      </splashHandlerProductBinding>
+   </extension>  
+
+  <!--
+  <extension
+    point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="menu:org.eclipse.ui.main.menu">
+         <menu
+               label="Help2"
+               tooltip="Help2">
+
+           <command
+                   commandId="org.eclipse.ui.help.quickStartAction"
+                   id="quickStartAction"
+                   style="push">
+           </command>
+         </menu>
+     </menuContribution>
+  </extension>
+  -->
+  
+</plugin>
diff --git a/org.eclipse.stem.ui/plugin_customization.ini b/org.eclipse.stem.ui/plugin_customization.ini
new file mode 100644
index 0000000..ef410a7
--- /dev/null
+++ b/org.eclipse.stem.ui/plugin_customization.ini
@@ -0,0 +1,6 @@
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
+org.eclipse.ui.intro.universal/INTRO_ROOT_PAGES = root,overview,tutorials,whatsnew
+#org.eclipse.ui.intro.universal/INTRO_ROOT_PAGES = root,overview,firststeps,tutorials,samples,whatsnew,migrate,webresources
+#org.eclipse.ui.intro.universal/INTRO_DATA = product:$nl$/introContent.xml
+org.eclipse.ui.intro/INTRO_THEME = org.eclipse.ui.intro.universal.slate
+
diff --git a/org.eclipse.stem.ui/schema/ui.coloproviders.exsd b/org.eclipse.stem.ui/schema/ui.coloproviders.exsd
new file mode 100644
index 0000000..59044da
--- /dev/null
+++ b/org.eclipse.stem.ui/schema/ui.coloproviders.exsd
@@ -0,0 +1,114 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.stem.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.stem.ui" id="org.eclipse.stem.ui.colorproviders" name="UI Color Providers"/>
+      </appinfo>
+      <documentation>
+         This extension point allows adding Color Providers to the UI.
+Color providers are responsible for providing the colors to be used when drawing the map.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="coloprovider" minOccurs="1" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="coloprovider">
+      <complexType>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  A display name to be used in the combo box of selecting the color providers.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="factory" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The factory class of color provider adapters.
+Factory classes must implement the &lt;code&gt;org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory&lt;/code&gt; interface.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+         <attribute name="provider" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The color provider interface.
+This interface must extend the &lt;code&gt;org.eclipse.stem.ui.adapters.color.ColorProvider&lt;/code&gt; interface.
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.stem.ui.adapters.color.ColorProvider"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         The following is a sample usage of the color provider extension point:
+         
+&lt;extension
+        point=&quot;org.eclipse.stem.ui.colorproviders&quot;&gt;
+     &lt;coloprovider
+           factory=&quot;org.eclipse.stem.ui.adapters.color.SEIRRelativeValueColorProviderAdapterFactory&quot;
+           name=&quot;&amp;quot;Rainbow&amp;quot; Relative Values&quot;
+           provider=&quot;org.eclipse.stem.ui.adapters.color.SEIRRelativeValueColorProvider&quot;&gt;
+     &lt;/coloprovider&gt;
+&lt;/extension&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         The supplied factory class must implement the &lt;code&gt;org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory&lt;/code&gt; interface.
+
+The supplied color provider interface must extend the &lt;code&gt;org.eclipse.stem.ui.adapters.color.ColorProvider&lt;/code&gt; interface.
+      </documentation>
+   </annotation>
+
+
+
+</schema>
diff --git a/org.eclipse.stem.ui/splash.bmp b/org.eclipse.stem.ui/splash.bmp
new file mode 100644
index 0000000..115efb2
--- /dev/null
+++ b/org.eclipse.stem.ui/splash.bmp
Binary files differ
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonActionBarContributor.java
new file mode 100644
index 0000000..6fb217a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonActionBarContributor.java
@@ -0,0 +1,441 @@
+package org.eclipse.stem.core.common.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Common model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class CommonActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("common-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("common-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CommonEditor_menu"), "org.eclipse.stem.core.commonMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonEditor.java
new file mode 100644
index 0000000..ebdaa79
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CommonEditor.java
@@ -0,0 +1,1558 @@
+package org.eclipse.stem.core.common.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Common model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class CommonEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(CommonEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(CommonEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == CommonEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(CommonEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == CommonEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(CommonEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CommonEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						CommonEditor.this.setSelectionToViewer(selection);
+						CommonEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorAdvisor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorAdvisor.java
new file mode 100644
index 0000000..4069cc3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorAdvisor.java
@@ -0,0 +1,843 @@
+package org.eclipse.stem.core.common.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.net.URL;
+
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.perspectives.Simulation;
+import org.eclipse.stem.ui.preferences.STEMPreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IElementFactory;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ContributionItemFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.ide.model.WorkbenchAdapterBuilder;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.osgi.framework.Bundle;
+
+
+/**
+ * Customized {@link WorkbenchAdvisor} for the RCP application.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public final class CoreEditorAdvisor extends WorkbenchAdvisor {
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return org.eclipse.stem.core.common.presentation.CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#initialize(org.eclipse.ui.application.IWorkbenchConfigurer)
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void initialize(IWorkbenchConfigurer configurer) {
+		super.initialize(configurer);
+		configurer.setSaveAndRestore(true);
+		declareWorkbenchImages();
+	}
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#getDefaultPageInput()
+	 * 	See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=145233">bug
+	 * 	145233</a>
+	 */
+	@Override
+	public IAdaptable getDefaultPageInput() {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		return root;
+	}
+
+	
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#preStartup()
+	 */
+	@Override
+	public void preStartup() {
+		WorkbenchAdapterBuilder.registerAdapters();
+	}
+
+
+//	/**
+//	 * This class is used to enable using the Common Navigator Framework in an
+//	 * RCP application. See <a
+//	 * href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=145233">bug
+//	 * 145233</a>
+//	 */
+//	public static class NavigatorRoot implements IAdaptable,
+//			IPersistableElement, IElementFactory {
+//	
+//		/**
+//		 * Constructor
+//		 */
+//		public NavigatorRoot() {
+//		}
+//
+//		/**
+//		 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+//		 */
+//		public Object getAdapter(Class adapter) {
+//			Object retValue = null;
+//			if (adapter == IPersistableElement.class) {
+//				// Yes
+//				retValue = this;
+//			} // if 
+//			else if (adapter == IWorkbenchAdapter.class) {
+//				retValue = ResourcesPlugin.getWorkspace().getRoot().getAdapter(adapter);
+//			} // if 
+//			return retValue;
+//		} // getAdapter
+//	
+//		/**
+//		 * @see org.eclipse.ui.IPersistableElement#getFactoryId()
+//		 */
+//		public String getFactoryId() {
+//			return "org.eclipse.stem.ui.commonNavigatorFactory";
+////			return this.getClass().getCanonicalName();
+//		}
+//	
+//		/**
+//		 * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
+//		 */
+//		public void saveState(IMemento memento) {
+//			// I think what is happening here is that we don't actually save the
+//			// state that the "createElement" method (below) would read, instead
+//			// in createElement we just return the root of the workspace which
+//			// is what we want anyway.
+//			return;
+//		}
+//	
+//		/**
+//		 * @see org.eclipse.ui.IElementFactory#createElement(org.eclipse.ui.IMemento)
+//		 */
+//		public IAdaptable createElement(IMemento memento) {
+//			return ResourcesPlugin.getWorkspace().getRoot();
+//		}
+//	
+//	} // NavigatorRoot
+
+	
+	/**
+	 * Declares all IDE-specific workbench images. This includes both "shared"
+	 * images (named in {@link IDE.SharedImages}) and internal images (named in
+	 * {@link org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages}).
+	 * 
+	 * @see IWorkbenchConfigurer#declareImage
+	 */
+	private void declareWorkbenchImages() {
+
+		final String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
+		final String PATH_ELOCALTOOL = ICONS_PATH + "elcl16/"; // Enabled //$NON-NLS-1$
+
+		// toolbar
+		// icons.
+		final String PATH_DLOCALTOOL = ICONS_PATH + "dlcl16/"; // Disabled //$NON-NLS-1$
+		// //$NON-NLS-1$
+		// toolbar
+		// icons.
+		final String PATH_ETOOL = ICONS_PATH + "etool16/"; // Enabled toolbar //$NON-NLS-1$
+		// //$NON-NLS-1$
+		// icons.
+		final String PATH_DTOOL = ICONS_PATH + "dtool16/"; // Disabled toolbar //$NON-NLS-1$
+		// //$NON-NLS-1$
+		// icons.
+		final String PATH_OBJECT = ICONS_PATH + "obj16/"; // Model object //$NON-NLS-1$
+		// //$NON-NLS-1$
+		// icons
+		final String PATH_WIZBAN = ICONS_PATH + "wizban/"; // Wizard //$NON-NLS-1$
+		// //$NON-NLS-1$
+		// icons
+
+		Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC, PATH_ETOOL
+						+ "build_exec.gif", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER,
+				PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED,
+				PATH_DTOOL + "build_exec.gif", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC, PATH_ETOOL
+						+ "search_src.gif", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER,
+				PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED,
+				PATH_DTOOL + "search_src.gif", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL
+						+ "next_nav.gif", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV, PATH_ETOOL
+						+ "prev_nav.gif", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ, PATH_WIZBAN
+						+ "newprj_wiz.png", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ,
+				PATH_WIZBAN + "newfolder_wiz.png", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ, PATH_WIZBAN
+						+ "newfile_wiz.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ,
+				PATH_WIZBAN + "importdir_wiz.png", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ,
+				PATH_WIZBAN + "importzip_wiz.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ,
+				PATH_WIZBAN + "exportdir_wiz.png", false); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ,
+				PATH_WIZBAN + "exportzip_wiz.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ,
+				PATH_WIZBAN + "workset_wiz.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG, PATH_WIZBAN
+						+ "saveas_wiz.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG, PATH_WIZBAN
+						+ "quick_fix.png", false); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT,
+				PATH_OBJECT + "prj_obj.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
+						+ "cprj_obj.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER,
+				PATH_ELOCALTOOL + "gotoobj_tsk.gif", true); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED,
+				PATH_ELOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_DLCL_QUICK_FIX_DISABLED,
+				PATH_DLOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
+
+		// task objects
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_HPRIO_TSK,
+		// PATH_OBJECT+"hprio_tsk.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_MPRIO_TSK,
+		// PATH_OBJECT+"mprio_tsk.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LPRIO_TSK,
+		// PATH_OBJECT+"lprio_tsk.gif");
+
+		declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK,
+				PATH_OBJECT + "taskmrk_tsk.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK,
+				PATH_OBJECT + "bkmrk_tsk.gif", true); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK, PATH_OBJECT
+						+ "complete_tsk.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK, PATH_OBJECT
+						+ "incomplete_tsk.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM, PATH_OBJECT
+						+ "welcome_item.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER, PATH_OBJECT
+						+ "welcome_banner.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH, PATH_OBJECT
+						+ "error_tsk.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH, PATH_OBJECT
+						+ "warn_tsk.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH, PATH_OBJECT
+						+ "info_tsk.gif", true); //$NON-NLS-1$
+
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_LCL_FLAT_LAYOUT, PATH_ELOCALTOOL
+						+ "flatLayout.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_LCL_HIERARCHICAL_LAYOUT,
+				PATH_ELOCALTOOL + "hierarchicalLayout.gif", true); //$NON-NLS-1$
+		declareWorkbenchImage(ideBundle,
+				IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY,
+				PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$
+	
+		// synchronization indicator objects
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_WBET_STAT,
+		// PATH_OVERLAY+"wbet_stat.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_SBET_STAT,
+		// PATH_OVERLAY+"sbet_stat.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_CONFLICT_STAT,
+		// PATH_OVERLAY+"conflict_stat.gif");
+
+		// content locality indicator objects
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_NOTLOCAL_STAT,
+		// PATH_STAT+"notlocal_stat.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LOCAL_STAT,
+		// PATH_STAT+"local_stat.gif");
+		// declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_FILLLOCAL_STAT,
+		// PATH_STAT+"filllocal_stat.gif");
+	}
+
+	/**
+	 * Declares an IDE-specific workbench image.
+	 * 
+	 * @param symbolicName
+	 *            the symbolic name of the image
+	 * @param path
+	 *            the path of the image file; this path is relative to the base
+	 *            of the IDE plug-in
+	 * @param shared
+	 *            <code>true</code> if this is a shared image, and
+	 *            <code>false</code> if this is not a shared image
+	 * @see IWorkbenchConfigurer#declareImage
+	 */
+	private void declareWorkbenchImage(Bundle ideBundle, String symbolicName,
+			String path, boolean shared) {
+		URL url = FileLocator.find(ideBundle, new Path(path), null);
+		ImageDescriptor desc = ImageDescriptor.createFromURL(url);
+		getWorkbenchConfigurer().declareImage(symbolicName, desc, shared);
+	}
+	
+	
+	/**
+	 * RCP's application
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Application implements IApplication {
+		/**
+		 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Object start(IApplicationContext context) throws Exception {
+			WorkbenchAdvisor workbenchAdvisor = new CoreEditorAdvisor();
+			Display display = PlatformUI.createDisplay();
+			try {
+				int returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
+				if (returnCode == PlatformUI.RETURN_RESTART) {
+					return IApplication.EXIT_RESTART;
+				}
+				else {
+					return IApplication.EXIT_OK;
+				}
+			}
+			finally {
+				display.dispose();
+			}
+		}
+
+		/**
+		 * @see org.eclipse.equinox.app.IApplication#stop()
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void stop() {
+			// Do nothing.
+		}
+	}
+
+	/**
+	 * RCP's perspective
+	 * <!-- begin-user-doc -->
+	 * NOT USED
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Perspective implements IPerspectiveFactory {
+		/**
+		 * Perspective ID
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public static final String ID_PERSPECTIVE = "org.eclipse.stem.core.common.presentation.CoreEditorAdvisorPerspective"; //$NON-NLS-1$
+
+		/**
+		 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void createInitialLayout(IPageLayout layout) {
+			layout.setEditorAreaVisible(true);
+			layout.addPerspectiveShortcut(ID_PERSPECTIVE);
+
+			IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, (float)0.66, layout.getEditorArea()); //$NON-NLS-1$
+			right.addView(IPageLayout.ID_OUTLINE);
+
+			IFolderLayout bottonRight = layout.createFolder("bottonRight", IPageLayout.BOTTOM, (float)0.60, "right"); //$NON-NLS-1$ //$NON-NLS-2$
+			bottonRight.addView(IPageLayout.ID_PROP_SHEET);
+		}
+	}
+	
+	/**
+	 * RCP's window advisor
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class WindowAdvisor extends WorkbenchWindowAdvisor {
+		/**
+		 * @see WorkbenchWindowAdvisor#WorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchWindowConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public WindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+			super(configurer);
+		}
+		
+		/**
+		 * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowOpen()
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated NOT
+		 */
+		public void preWindowOpen() {
+			IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+			configurer.setInitialSize(new Point(1024, 768));
+			configurer.setShowCoolBar(true);
+			configurer.setShowStatusLine(true);
+			configurer.setShowFastViewBars(true);
+			configurer.setShowProgressIndicator(true);
+			configurer.setShowPerspectiveBar(true);
+		} // preWindowOpen
+		
+		/**
+		 * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowShellClose()
+		 */
+		@Override
+		public boolean preWindowShellClose() {
+			try {
+				//save the full workspace before quit
+				ResourcesPlugin.getWorkspace().save(true, null);
+			} catch (final CoreException e) {
+				Activator.logError("Failed to save workspace before quitting", e);
+			}
+			return true;
+		}
+
+		/**
+		 * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#createActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
+			return new WindowActionBarAdvisor(configurer);
+		}
+	}
+
+	/**
+	 * RCP's action bar advisor
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class WindowActionBarAdvisor extends ActionBarAdvisor {
+		/**
+		 * @see ActionBarAdvisor#ActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public WindowActionBarAdvisor(IActionBarConfigurer configurer) {
+			super(configurer);
+		}
+		
+		/**
+		 * @see org.eclipse.ui.application.ActionBarAdvisor#fillMenuBar(org.eclipse.jface.action.IMenuManager)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		protected void fillMenuBar(IMenuManager menuBar) {
+			IWorkbenchWindow window = getActionBarConfigurer().getWindowConfigurer().getWindow();
+			menuBar.add(createFileMenu(window));
+			menuBar.add(createEditMenu(window));
+			menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			menuBar.add(createWindowMenu(window));
+			menuBar.add(createHelpMenu(window));					
+		}
+		
+		/**
+		 * Creates the 'File' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated NOT
+		 */
+		protected IMenuManager createFileMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_File_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_FILE);    
+			menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_START));
+	
+			IMenuManager newMenu = new MenuManager(getString("_UI_Menu_New_label"), "new"); //$NON-NLS-1$  //$NON-NLS-2$
+			newMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+	
+			menu.add(newMenu);
+			menu.add(new Separator());
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.CLOSE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.CLOSE_ALL.create(window));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.SAVE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SAVE_AS.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SAVE_ALL.create(window));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.IMPORT.create(window));
+			addToMenuAndRegister(menu, ActionFactory.EXPORT.create(window));
+			menu.add(new Separator());
+			addToMenuAndRegister(menu, ActionFactory.QUIT.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.FILE_END));
+			return menu;
+		}
+
+		/**
+		 * Creates the 'Edit' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected IMenuManager createEditMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Edit_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_EDIT);
+			menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_START));
+	
+			addToMenuAndRegister(menu, ActionFactory.UNDO.create(window));
+			addToMenuAndRegister(menu, ActionFactory.REDO.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.UNDO_EXT));
+			menu.add(new Separator());
+	
+			addToMenuAndRegister(menu, ActionFactory.CUT.create(window));
+			addToMenuAndRegister(menu, ActionFactory.COPY.create(window));
+			addToMenuAndRegister(menu, ActionFactory.PASTE.create(window));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.CUT_EXT));
+			menu.add(new Separator());
+	
+			addToMenuAndRegister(menu, ActionFactory.DELETE.create(window));
+			addToMenuAndRegister(menu, ActionFactory.SELECT_ALL.create(window));
+			menu.add(new Separator());
+	
+			menu.add(new GroupMarker(IWorkbenchActionConstants.ADD_EXT));
+	
+			menu.add(new GroupMarker(IWorkbenchActionConstants.EDIT_END));
+			menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+			return menu;
+		}
+	
+		/**
+		 * Creates the 'Window' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated NOT
+		 */
+		protected IMenuManager createWindowMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Window_label"), //$NON-NLS-1$
+			IWorkbenchActionConstants.M_WINDOW);
+			addToMenuAndRegister(menu, ActionFactory.OPEN_PERSPECTIVE_DIALOG.create(window));
+			addToMenuAndRegister(menu, ActionFactory.OPEN_NEW_WINDOW.create(window));
+		
+			menu.add(ContributionItemFactory.OPEN_WINDOWS.create(window));
+			menu.add(ContributionItemFactory.VIEWS_SHORTLIST.create(window));
+			addToMenuAndRegister(menu, ActionFactory.PREFERENCES.create(window));
+			
+			menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+			
+			IWorkbenchAction resetPerspective = ActionFactory.RESET_PERSPECTIVE.create(window);
+			addToMenuAndRegister(menu,resetPerspective);
+			
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			
+			return menu;
+		} // createWindowMenu
+	
+		/**
+		 * Creates the 'Help' menu.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated NOT
+		 */
+		protected IMenuManager createHelpMenu(IWorkbenchWindow window) {
+			IMenuManager menu = new MenuManager(getString("_UI_Menu_Help_label"), IWorkbenchActionConstants.M_HELP); //$NON-NLS-1$
+			// Welcome or intro page would go here
+			// Help contents would go here
+			// Tips and tricks page would go here
+			IWorkbenchAction helpIntro = ActionFactory.INTRO.create(window);
+			IWorkbenchAction aboutAction = ActionFactory.ABOUT.create(window);			
+			IWorkbenchAction contentsAction = ActionFactory.HELP_CONTENTS.create(window);
+			
+			menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_START));
+			addToMenuAndRegister(menu,helpIntro);
+			addToMenuAndRegister(menu,contentsAction);
+			addToMenuAndRegister(menu,aboutAction);
+			menu.add(new GroupMarker(IWorkbenchActionConstants.HELP_END));
+			menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			return menu;
+		}
+		
+		/**
+		 * Adds the specified action to the given menu and also registers the action with the
+		 * action bar configurer, in order to activate its key binding.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		protected void addToMenuAndRegister(IMenuManager menuManager, IAction action) {
+			menuManager.add(action);
+			getActionBarConfigurer().registerGlobalAction(action);
+		}		
+	}
+
+	/**
+	 * About action for the RCP application.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class AboutAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			MessageDialog.openInformation(getWindow().getShell(), getString("_UI_About_title"), //$NON-NLS-1$
+			getString("_UI_About_text")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Open action for the objects from the Core model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class OpenAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * Opens the editors for the files selected using the file dialog.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			String filePath = openFilePathDialog(getWindow().getShell(), null, SWT.OPEN);
+			if (filePath != null) {
+				openEditor(getWindow().getWorkbench(), URI.createFileURI(filePath));
+			}
+		}
+	}
+
+	/**
+	 * Open URI action for the objects from the Core model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class OpenURIAction extends WorkbenchWindowActionDelegate {
+		/**
+		 * Opens the editors for the files selected using the LoadResourceDialog.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public void run(IAction action) {
+			LoadResourceAction.LoadResourceDialog loadResourceDialog = new LoadResourceAction.LoadResourceDialog(getWindow().getShell());
+			if (Dialog.OK == loadResourceDialog.open()) {
+				for (URI uri : loadResourceDialog.getURIs()) {
+					openEditor(getWindow().getWorkbench(), uri);
+				}
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static String openFilePathDialog(Shell shell, String fileExtensionFilter, int style) {
+		FileDialog fileDialog = new FileDialog(shell, style);
+		if (fileExtensionFilter == null) {
+			fileExtensionFilter =
+				"*." + getString("_UI_CommonEditorFilenameExtension") + ";" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"*." + getString("_UI_GraphEditorFilenameExtension") + ";" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"*." + getString("_UI_ModelEditorFilenameExtension") + ";" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"*." + getString("_UI_ScenarioEditorFilenameExtension") + ";" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				"*." + getString("_UI_SequencerEditorFilenameExtension"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		fileDialog.setFilterExtensions(new String[]{fileExtensionFilter});
+	
+		fileDialog.open();
+		if (fileDialog.getFileName() != null && fileDialog.getFileName().length() > 0) {
+			return fileDialog.getFilterPath() + File.separator + fileDialog.getFileName();
+		}
+		else {
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static boolean openEditor(IWorkbench workbench, URI fileURI) {
+		IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+		IWorkbenchPage page = workbenchWindow.getActivePage();
+	
+		IEditorDescriptor editorDescriptor = workbench.getEditorRegistry().getDefaultEditor(fileURI.toFileString());
+		if (editorDescriptor == null) {
+			MessageDialog.openError(
+			workbenchWindow.getShell(),
+			getString("_UI_Error_title"),  //$NON-NLS-1$
+			getString("_WARN_No_Editor", fileURI.toFileString()));  //$NON-NLS-1$
+			return false;
+		}
+		else {
+			try {
+				page.openEditor(new URIEditorInput(fileURI), editorDescriptor.getId());
+			}
+			catch (PartInitException exception) {
+				MessageDialog.openError(
+				workbenchWindow.getShell(),
+				getString("_UI_OpenEditorError_label"),  //$NON-NLS-1$
+				exception.getMessage());
+				return false;
+			}
+		}
+	
+		return true;
+	}
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#getInitialWindowPerspectiveId()
+	 * <!-- begin-user-doc -->
+	 * set the initial Perspective 
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public String getInitialWindowPerspectiveId() {
+		//return Designer.ID_STEM_DESIGNER_PERSPECTIVE;
+		return Simulation.ID_STEM_SIMULATION_PERSPECTIVE;
+	}
+
+	
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#getMainPreferencePageId()
+	 */
+	@Override
+	public String getMainPreferencePageId() {
+		return STEMPreferencePage.ID_STEM_PREFERENCE_PAGE;
+	} // getMainPreferencePageId
+	
+
+	/**
+	 * @see org.eclipse.ui.application.WorkbenchAdvisor#createWorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchConfigurer)
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+		return new WindowAdvisor(configurer);
+	}	
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorPlugin.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorPlugin.java
new file mode 100644
index 0000000..9cab126
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/common/presentation/CoreEditorPlugin.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.core.common.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the Core editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public final class CoreEditorPlugin extends EMFPlugin {
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final CoreEditorPlugin INSTANCE = new CoreEditorPlugin();
+
+	/**
+	 * 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 CoreEditorPlugin() {
+		super
+			(new ResourceLocator [] {
+				EcoreEditPlugin.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 EclipseUIPlugin {
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+	
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentActionBarContributor.java
new file mode 100644
index 0000000..46e7323
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.core.experiment.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Experiment model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ExperimentActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("experiment-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("experiment-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_ExperimentEditor_menu"), "org.eclipse.stem.core.experimentMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * @param event 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentEditor.java
new file mode 100644
index 0000000..0830b46
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/experiment/presentation/ExperimentEditor.java
@@ -0,0 +1,1702 @@
+package org.eclipse.stem.core.experiment.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Experiment model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ExperimentEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ExperimentEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ExperimentEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ExperimentEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(ExperimentEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == ExperimentEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ExperimentEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ExperimentEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * @param collection 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * @return the EditingDomain 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * @param adapterFactory 
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * @param viewer 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well
+	 * registering the menu for extension. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance(),
+				TextTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(
+				viewer));
+		viewer.addDropSupport(dndOperations, transfers,
+				new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+
+	/**
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * @param resource 
+	 * @param exception 
+	 * @return
+	 *  <!-- end-user-doc --> 
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * @return
+	 * <!-- end-user-doc --> 
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ExperimentEditor.this.setSelectionToViewer(selection);
+						ExperimentEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param marker 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * @param listener 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * @param listener 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @param selection 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * @param menuManager 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * @return 
+	 *  <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphActionBarContributor.java
new file mode 100644
index 0000000..5c1fb8f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphActionBarContributor.java
@@ -0,0 +1,443 @@
+package org.eclipse.stem.core.graph.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Graph model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GraphActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("graph-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("graph-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_GraphEditor_menu"), "org.eclipse.stem.core.graphMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphEditor.java
new file mode 100644
index 0000000..1f88513
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/graph/presentation/GraphEditor.java
@@ -0,0 +1,1658 @@
+package org.eclipse.stem.core.graph.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+//import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+//import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+//import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+//import org.eclipse.swt.widgets.Table;
+//import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+//import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Graph model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class GraphEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(GraphEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(GraphEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == GraphEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(GraphEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == GraphEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(GraphEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GraphEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+	
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+	
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+	
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						GraphEditor.this.setSelectionToViewer(selection);
+						GraphEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelActionBarContributor.java
new file mode 100644
index 0000000..4b72c3a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelActionBarContributor.java
@@ -0,0 +1,443 @@
+package org.eclipse.stem.core.model.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Model model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModelActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("model-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("model-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_ModelEditor_menu"), "org.eclipse.stem.core.modelMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelEditor.java
new file mode 100644
index 0000000..3633cc4
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/model/presentation/ModelEditor.java
@@ -0,0 +1,1659 @@
+package org.eclipse.stem.core.model.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+//import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+//import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+//import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+//import org.eclipse.swt.widgets.Table;
+//import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+//import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Model model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModelEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ModelEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ModelEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ModelEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(ModelEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == ModelEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ModelEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModelEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+	
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+	
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+	
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ModelEditor.this.setSelectionToViewer(selection);
+						ModelEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierActionBarContributor.java
new file mode 100644
index 0000000..d4eea33
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.core.modifier.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Modifier model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModifierActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("modifier-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("modifier-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_ModifierEditor_menu"), "org.eclipse.stem.core.modifierMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierEditor.java
new file mode 100644
index 0000000..e77951c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/modifier/presentation/ModifierEditor.java
@@ -0,0 +1,1690 @@
+package org.eclipse.stem.core.modifier.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Modifier model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ModifierEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ModifierEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ModifierEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ModifierEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(ModifierEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == ModifierEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ModifierEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ModifierEditor() {
+		super();
+		initializeEditingDomain();
+	}
+	
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+	
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ModifierEditor.this.setSelectionToViewer(selection);
+						ModifierEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateActionBarContributor.java
new file mode 100644
index 0000000..0ec4550
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.core.predicate.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Predicate model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PredicateActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("predicate-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("predicate-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_PredicateEditor_menu"), "org.eclipse.stem.core.predicateMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateEditor.java
new file mode 100644
index 0000000..89dc777
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/predicate/presentation/PredicateEditor.java
@@ -0,0 +1,1686 @@
+package org.eclipse.stem.core.predicate.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Predicate model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class PredicateEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(PredicateEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(PredicateEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == PredicateEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(PredicateEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == PredicateEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(PredicateEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PredicateEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well
+	 * registering the menu for extension. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance(),
+				TextTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(
+				viewer));
+		viewer.addDropSupport(dndOperations, transfers,
+				new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+	
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+	
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						PredicateEditor.this.setSelectionToViewer(selection);
+						PredicateEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioActionBarContributor.java
new file mode 100644
index 0000000..df1decf
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioActionBarContributor.java
@@ -0,0 +1,443 @@
+package org.eclipse.stem.core.scenario.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Scenario model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ScenarioActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ScenarioActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("scenario-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("scenario-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_ScenarioEditor_menu"), "org.eclipse.stem.core.scenarioMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioEditor.java
new file mode 100644
index 0000000..0491658
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/scenario/presentation/ScenarioEditor.java
@@ -0,0 +1,1603 @@
+package org.eclipse.stem.core.scenario.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.ui.ViewerPane;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+//import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+//import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.graphics.Point;
+//import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+//import org.eclipse.swt.widgets.Table;
+//import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+//import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+/**
+ * This is an example of a Scenario model editor.
+ * <!-- begin-user-doc --> <!--
+ * end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class ScenarioEditor extends MultiPageEditorPart implements
+		IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	
+	public static final String ID_SCENARIO_EDITOR = "org.eclipse.stem.core.scenario.presentation.ScenarioEditorID";
+	
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline. The
+	 * parent relation must be correctly defined for this to work. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of
+	 * the viewers in the pages or the content outline viewer. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(ScenarioEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(ScenarioEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == ScenarioEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(ScenarioEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == ScenarioEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(ScenarioEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @generated
+	 */
+	public ScenarioEditor() {
+		super();
+		initializeEditingDomain();
+	}
+	
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends
+			AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(
+				AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object[] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections
+					.singleton(parent)).toArray();
+		}
+
+		public Object[] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections
+					.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or
+	 * the outline view, if it has focus, is the current one. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well
+	 * registering the menu for extension. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance(),
+				TextTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(
+				viewer));
+		viewer.addDropSupport(dndOperations, transfers,
+				new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+
+	/**
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+	
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+
+
+	/**
+	 * @generated NOT
+	 */
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+//			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+	
+	/**
+	 * @generated
+	 */
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+	
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						ScenarioEditor.this.setSelectionToViewer(selection);
+						ScenarioEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup. <!-- begin-user-doc --> <!-- end-user-doc
+	 * -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help
+	 * fill the context menus with contributions from the Edit menu. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerActionBarContributor.java
new file mode 100644
index 0000000..1310eec
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerActionBarContributor.java
@@ -0,0 +1,443 @@
+package org.eclipse.stem.core.sequencer.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+//import java.util.Iterator;
+
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.jface.wizard.WizardDialog;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Sequencer model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class SequencerActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("sequencer-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("sequencer-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_SequencerEditor_menu"), "org.eclipse.stem.core.sequencerMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerEditor.java
new file mode 100644
index 0000000..a0956de
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/sequencer/presentation/SequencerEditor.java
@@ -0,0 +1,1670 @@
+package org.eclipse.stem.core.sequencer.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EValidator;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+import org.eclipse.jface.operation.IRunnableWithProgress;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+@SuppressWarnings("all")
+/**
+ * This is an example of a Sequencer model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SequencerEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(SequencerEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(SequencerEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == SequencerEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(SequencerEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == SequencerEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(SequencerEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SequencerEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+	
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+
+	
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+		@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						SequencerEditor.this.setSelectionToViewer(selection);
+						SequencerEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	protected boolean isPersisted(Resource resource) {
+		return isPersistedGen(resource);
+//		boolean result = false;
+//		try {
+//			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+//			if (stream != null) {
+//				result = true;
+//				stream.close();
+//			}
+//		}
+//		catch (IOException e) {
+//			// nothing
+//		}
+//		return result;
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersistedGen(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+	
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyComposite.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyComposite.java
new file mode 100644
index 0000000..1014f8c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyComposite.java
@@ -0,0 +1,129 @@
+// DiseaseModelPropertyComposite.java
+package org.eclipse.stem.core.solver;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.wizards.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * 
+ */
+public class SolverPropertyComposite extends Composite {
+
+	private Map<Solver, SolverPropertyEditor> modelMap = new HashMap<Solver, SolverPropertyEditor>();
+
+	private StackLayout stackLayout = null;
+
+	/**
+	 * Create the composite
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param projectValidator
+	 */
+	public SolverPropertyComposite(final Composite parent,
+			final int style, final Solver[] solvers,
+			ModifyListener projectValidator) {
+		super(parent, style);
+		stackLayout = new StackLayout();
+		setLayout(stackLayout);
+
+		Label label;
+		label = new Label(this, SWT.NONE);
+		label.setText(Messages.getString("SPC1")); //$NON-NLS-1$
+		SolverPropertyEditor firstOne = null;
+		// Any disease models?
+		if (solvers != null) {
+			// Yes
+			for (int i = 0; i < solvers.length; i++) {
+				SolverPropertyEditorAdapter spea = (SolverPropertyEditorAdapter) SolverPropertyEditorAdapterFactory.INSTANCE
+						.adapt(solvers[i],
+								SolverPropertyEditorAdapter.class);
+
+				final SolverPropertyEditor spe = spea
+						.createSolverPropertyEditor(this, SWT.NONE,
+								projectValidator);
+
+				modelMap.put(solvers[i], spe);
+				if (firstOne == null) {
+					// Yes
+					firstOne = spe;
+				} // if
+			} // for i
+		} // if any disease models?
+
+		stackLayout.topControl = firstOne;
+	} // DiseaseModelPropertyComposite
+
+	public void displaySolver(final Solver solver) {
+		final SolverPropertyEditor spe = modelMap.get(solver);
+		// Did we find it?
+		if (spe != null) {
+			// Yes
+			stackLayout.topControl = spe;
+			layout();
+		} // if
+		else {
+			Activator.logError(Messages.getString("SPC2") //$NON-NLS-1$
+					+ solver.getClass().getName() + "\"", null); //$NON-NLS-1$
+		}
+	} // displaySolver
+	
+	public Solver createSolver() {
+		SolverPropertyEditor spe = (SolverPropertyEditor)stackLayout.topControl;
+		return spe.createAndPopulateSolver();
+	}
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return <code>true</code> if the contents of the composite are valid,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean validate() {
+		return ((SolverPropertyEditor) (stackLayout.topControl))
+				.validate();
+	} // validate
+
+	/**
+	 * @return
+	 */
+	public String getErrorMessage() {
+		return ((SolverPropertyEditor) (stackLayout.topControl))
+				.getErrorMessage();
+	}
+
+	/**
+	 * @param solver
+	 */
+	public void populateSolver(Solver solver) {
+		((SolverPropertyEditor) (stackLayout.topControl))
+				.populate(solver);
+	} // populateSolver
+
+} // SolverPropertyComposite
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditor.java
new file mode 100644
index 0000000..c3719af
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditor.java
@@ -0,0 +1,103 @@
+package org.eclipse.stem.core.solver;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+abstract public class SolverPropertyEditor extends Composite {
+
+	/**
+	 * @param feature
+	 * @return <code>true</code> if the feature is a dublin core feature 
+	 * that is specified by a user.
+	 */
+	public static boolean isUserSpecifiedSolverProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		final EClass containingClass = feature.getEContainingClass();
+		// Is it a disease model property?
+		if (containingClass.equals(SolverPackage.eINSTANCE.getSolver())
+				|| containingClass.getEAllSuperTypes().contains(
+						SolverPackage.eINSTANCE.getSolver())) {
+			retValue = true;
+		} // if a disease model property
+		return retValue;
+	} // isUserSpecifiedDiseaseModelProperty
+
+	/**
+	 * @param descriptor
+	 * @return the string that represents the default value of the property
+	 */
+	protected String getPropertyDefaultValueString(final IItemPropertyDescriptor descriptor) {
+		String retValue = ""; //$NON-NLS-1$
+	
+		final EStructuralFeature feature = (EStructuralFeature) descriptor
+				.getFeature(null);
+	
+		switch (feature.getFeatureID()) {
+		// Any special handling here...
+			default:
+				retValue = feature.getDefaultValueLiteral();
+				retValue = retValue == null ? "" : retValue; //$NON-NLS-1$
+				break;
+		} // switch
+	
+		return retValue;
+	} // getPropertyDefaultValueString
+	
+	protected final Map<EStructuralFeature, Text> map = new HashMap<EStructuralFeature, Text>();
+	protected String errorMessage;
+
+	public SolverPropertyEditor(Composite parent, int style) {
+		super(parent,style);
+	}
+
+	public void populate(Solver solver) {
+		// Nothing to do here since there are no common solver attributes right now
+	}
+
+	/**
+	 * Create the solver instance from form data
+	 * @return Solver
+	 */
+	public abstract Solver createAndPopulateSolver();
+	
+	
+	public boolean validate() {
+		boolean retValue = true;
+		return retValue;
+	} // validate
+
+	
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents sub-classing of SWT components
+	}
+
+	/**
+	 * @return the error message that describes the problem with the contents
+	 */
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+} // SolverPropertyEditor
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapter.java
new file mode 100644
index 0000000..95701f6
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapter.java
@@ -0,0 +1,22 @@
+package org.eclipse.stem.core.solver;
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.swt.events.ModifyListener;
+
+abstract public class SolverPropertyEditorAdapter extends AdapterImpl
+		implements Adapter {
+
+	abstract public SolverPropertyEditor createSolverPropertyEditor(
+			SolverPropertyComposite solverPropertyComposite,
+			int style, ModifyListener projectValidator);
+} // SolverPropertyEditorAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapterFactory.java
new file mode 100644
index 0000000..7b81216
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/SolverPropertyEditorAdapterFactory.java
@@ -0,0 +1,34 @@
+// DiseaseModelPropertyEditorAdapterFactory.java
+package org.eclipse.stem.core.solver;
+
+/******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ *
+ */
+public interface SolverPropertyEditorAdapterFactory {
+
+	SolverPropertyEditorAdapterFactoryImpl INSTANCE = new SolverPropertyEditorAdapterFactoryImpl();
+
+	public class SolverPropertyEditorAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			SolverPropertyEditorAdapterFactory {
+
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == SolverPropertyEditorAdapter.class;
+		}
+
+	} 
+} 
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverActionBarContributor.java
new file mode 100644
index 0000000..4a70fcc
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverActionBarContributor.java
@@ -0,0 +1,436 @@
+package org.eclipse.stem.core.solver.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.ui.action.ControlAction;

+import org.eclipse.emf.edit.ui.action.CreateChildAction;

+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+import org.eclipse.emf.edit.ui.action.LoadResourceAction;

+import org.eclipse.emf.edit.ui.action.ValidateAction;

+

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.ActionContributionItem;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.action.IContributionItem;

+import org.eclipse.jface.action.IContributionManager;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+import org.eclipse.jface.action.SubContributionItem;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;

+

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.PartInitException;

+

+/**

+ * This is the action bar contributor for the Solver model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverActionBarContributor

+	extends EditingDomainActionBarContributor

+	implements ISelectionChangedListener {

+	/**

+	 * This keeps track of the active editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IEditorPart activeEditorPart;

+

+	/**

+	 * This keeps track of the current selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionProvider selectionProvider;

+

+	/**

+	 * This action opens the Properties view.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction showPropertiesViewAction =

+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$

+		{

+			@Override

+			public void run() {

+				try {

+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$

+				}

+				catch (PartInitException exception) {

+					CoreEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * This action refreshes the viewer of the current editor if the editor

+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IAction refreshViewerAction =

+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$

+		{

+			@Override

+			public boolean isEnabled() {

+				return activeEditorPart instanceof IViewerProvider;

+			}

+

+			@Override

+			public void run() {

+				if (activeEditorPart instanceof IViewerProvider) {

+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();

+					if (viewer != null) {

+						viewer.refresh();

+					}

+				}

+			}

+		};

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createChildActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createChildMenuManager;

+

+	/**

+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor

+	 * generated for the current selection by the item provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> createSiblingActions;

+

+	/**

+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IMenuManager createSiblingMenuManager;

+

+	/**

+	 * This creates an instance of the contributor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverActionBarContributor() {

+		super(ADDITIONS_LAST_STYLE);

+		loadResourceAction = new LoadResourceAction();

+		validateAction = new ValidateAction();

+		controlAction = new ControlAction();

+	}

+

+	/**

+	 * This adds Separators for editor additions to the tool bar.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToToolBar(IToolBarManager toolBarManager) {

+		toolBarManager.add(new Separator("solver-settings")); //$NON-NLS-1$

+		toolBarManager.add(new Separator("solver-additions")); //$NON-NLS-1$

+	}

+

+	/**

+	 * This adds to the menu bar a menu and some separators for editor additions,

+	 * as well as the sub-menus for object creation items.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void contributeToMenu(IMenuManager menuManager) {

+		super.contributeToMenu(menuManager);

+

+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_SolverEditor_menu"), "org.eclipse.stem.core.solverMenuID"); //$NON-NLS-1$ //$NON-NLS-2$

+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$

+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$

+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$

+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$

+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$

+

+		// Prepare for CreateChild item addition or removal.

+		//

+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$

+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$

+

+		// Prepare for CreateSibling item addition or removal.

+		//

+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$

+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$

+

+		// Force an update because Eclipse hides empty menus now.

+		//

+		submenuManager.addMenuListener

+			(new IMenuListener() {

+				 public void menuAboutToShow(IMenuManager menuManager) {

+					 menuManager.updateAll(true);

+				 }

+			 });

+

+		addGlobalActions(submenuManager);

+	}

+

+	/**

+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setActiveEditor(IEditorPart part) {

+		super.setActiveEditor(part);

+		activeEditorPart = part;

+

+		// Switch to the new selection provider.

+		//

+		if (selectionProvider != null) {

+			selectionProvider.removeSelectionChangedListener(this);

+		}

+		if (part == null) {

+			selectionProvider = null;

+		}

+		else {

+			selectionProvider = part.getSite().getSelectionProvider();

+			selectionProvider.addSelectionChangedListener(this);

+

+			// Fake a selection changed event to update the menus.

+			//

+			if (selectionProvider.getSelection() != null) {

+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));

+			}

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},

+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings

+	 * that can be added to the selected object and updating the menus accordingly.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void selectionChanged(SelectionChangedEvent event) {

+		// Remove any menu items for old selection.

+		//

+		if (createChildMenuManager != null) {

+			depopulateManager(createChildMenuManager, createChildActions);

+		}

+		if (createSiblingMenuManager != null) {

+			depopulateManager(createSiblingMenuManager, createSiblingActions);

+		}

+

+		// Query the new selection for appropriate new child/sibling descriptors

+		//

+		Collection<?> newChildDescriptors = null;

+		Collection<?> newSiblingDescriptors = null;

+

+		ISelection selection = event.getSelection();

+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {

+			Object object = ((IStructuredSelection)selection).getFirstElement();

+

+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();

+

+			newChildDescriptors = domain.getNewChildDescriptors(object, null);

+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);

+		}

+

+		// Generate actions for selection; populate and redraw the menus.

+		//

+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);

+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);

+

+		if (createChildMenuManager != null) {

+			populateManager(createChildMenuManager, createChildActions, null);

+			createChildMenuManager.update(true);

+		}

+		if (createSiblingMenuManager != null) {

+			populateManager(createSiblingMenuManager, createSiblingActions, null);

+			createSiblingMenuManager.update(true);

+		}

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,

+	 * and returns the collection of these actions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {

+		Collection<IAction> actions = new ArrayList<IAction>();

+		if (descriptors != null) {

+			for (Object descriptor : descriptors) {

+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));

+			}

+		}

+		return actions;

+	}

+

+	/**

+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,

+	 * by inserting them before the specified contribution item <code>contributionID</code>.

+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {

+		if (actions != null) {

+			for (IAction action : actions) {

+				if (contributionID != null) {

+					manager.insertBefore(contributionID, action);

+				}

+				else {

+					manager.add(action);

+				}

+			}

+		}

+	}

+		

+	/**

+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s

+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {

+		if (actions != null) {

+			IContributionItem[] items = manager.getItems();

+			for (int i = 0; i < items.length; i++) {

+				// Look into SubContributionItems

+				//

+				IContributionItem contributionItem = items[i];

+				while (contributionItem instanceof SubContributionItem) {

+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();

+				}

+

+				// Delete the ActionContributionItems with matching action.

+				//

+				if (contributionItem instanceof ActionContributionItem) {

+					IAction action = ((ActionContributionItem)contributionItem).getAction();

+					if (actions.contains(action)) {

+						manager.remove(contributionItem);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This populates the pop-up menu before it appears.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void menuAboutToShow(IMenuManager menuManager) {

+		super.menuAboutToShow(menuManager);

+		MenuManager submenuManager = null;

+

+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$

+		populateManager(submenuManager, createChildActions, null);

+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$

+

+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$

+		populateManager(submenuManager, createSiblingActions, null);

+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$

+	}

+

+	/**

+	 * This inserts global actions before the "additions-end" separator.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void addGlobalActions(IMenuManager menuManager) {

+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$

+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$

+

+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		

+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$

+

+		super.addGlobalActions(menuManager);

+	}

+

+	/**

+	 * This ensures that a delete action will clean up all references to deleted objects.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected boolean removeAllReferencesOnDelete() {

+		return true;

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverEditor.java
new file mode 100644
index 0000000..e46a616
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverEditor.java
@@ -0,0 +1,1854 @@
+package org.eclipse.stem.core.solver.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.io.IOException;

+import java.io.InputStream;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.EventObject;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IPath;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.IStatusLineManager;

+import org.eclipse.jface.action.IToolBarManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.dialogs.ProgressMonitorDialog;

+

+import org.eclipse.jface.viewers.ColumnWeightData;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.ISelectionProvider;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.ListViewer;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.viewers.StructuredSelection;

+import org.eclipse.jface.viewers.StructuredViewer;

+import org.eclipse.jface.viewers.TableLayout;

+import org.eclipse.jface.viewers.TableViewer;

+import org.eclipse.jface.viewers.TreeViewer;

+import org.eclipse.jface.viewers.Viewer;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.custom.CTabFolder;

+

+import org.eclipse.swt.dnd.DND;

+import org.eclipse.swt.dnd.Transfer;

+

+import org.eclipse.swt.events.ControlAdapter;

+import org.eclipse.swt.events.ControlEvent;

+

+import org.eclipse.swt.graphics.Point;

+

+import org.eclipse.swt.layout.FillLayout;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Menu;

+import org.eclipse.swt.widgets.Table;

+import org.eclipse.swt.widgets.TableColumn;

+import org.eclipse.swt.widgets.Tree;

+import org.eclipse.swt.widgets.TreeColumn;

+

+import org.eclipse.ui.IActionBars;

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorSite;

+import org.eclipse.ui.IPartListener;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.PartInitException;

+

+import org.eclipse.ui.dialogs.SaveAsDialog;

+

+import org.eclipse.ui.ide.IGotoMarker;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.MultiPageEditorPart;

+

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

+

+import org.eclipse.ui.views.properties.IPropertySheetPage;

+import org.eclipse.ui.views.properties.PropertySheet;

+import org.eclipse.ui.views.properties.PropertySheetPage;

+

+import org.eclipse.emf.common.command.BasicCommandStack;

+import org.eclipse.emf.common.command.Command;

+import org.eclipse.emf.common.command.CommandStack;

+import org.eclipse.emf.common.command.CommandStackListener;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.common.notify.Notification;

+

+import org.eclipse.emf.common.ui.MarkerHelper;

+import org.eclipse.emf.common.ui.ViewerPane;

+

+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;

+

+import org.eclipse.emf.common.ui.viewer.IViewerProvider;

+

+import org.eclipse.emf.common.util.BasicDiagnostic;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.util.EContentAdapter;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.EditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+

+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;

+

+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;

+

+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;

+

+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;

+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;

+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;

+

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;

+

+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

+import org.eclipse.emf.edit.ui.util.EditUIUtil;

+

+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;

+

+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;

+

+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;

+

+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;

+

+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+

+/**

+ * This is an example of a Solver model editor.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+@SuppressWarnings("unused") 

+public class SolverEditor

+	extends MultiPageEditorPart

+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {

+	/**

+	 * This keeps track of the editing domain that is used to track all changes to the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected AdapterFactoryEditingDomain editingDomain;

+

+	/**

+	 * This is the one adapter factory used for providing views of the model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ComposedAdapterFactory adapterFactory;

+

+	/**

+	 * This is the content outline page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IContentOutlinePage contentOutlinePage;

+

+	/**

+	 * This is a kludge...

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStatusLineManager contentOutlineStatusLineManager;

+

+	/**

+	 * This is the content outline page's viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer contentOutlineViewer;

+

+	/**

+	 * This is the property sheet page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected PropertySheetPage propertySheetPage;

+

+	/**

+	 * This is the viewer that shadows the selection in the content outline.

+	 * The parent relation must be correctly defined for this to work.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer selectionViewer;

+

+	/**

+	 * This inverts the roll of parent and child in the content provider and show parents as a tree.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer parentViewer;

+

+	/**

+	 * This shows how a tree view works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewer;

+

+	/**

+	 * This shows how a list view works.

+	 * A list viewer doesn't support icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ListViewer listViewer;

+

+	/**

+	 * This shows how a table view works.

+	 * A table can be used as a list with icons.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TableViewer tableViewer;

+

+	/**

+	 * This shows how a tree view with columns works.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected TreeViewer treeViewerWithColumns;

+

+	/**

+	 * This keeps track of the active viewer pane, in the book.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ViewerPane currentViewerPane;

+

+	/**

+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Viewer currentViewer;

+

+	/**

+	 * This listens to which ever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelectionChangedListener selectionChangedListener;

+

+	/**

+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();

+

+	/**

+	 * This keeps track of the selection of the editor as a whole.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected ISelection editorSelection = StructuredSelection.EMPTY;

+

+	/**

+	 * The MarkerHelper is responsible for creating workspace resource markers presented

+	 * in Eclipse's Problems View.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();

+

+	/**

+	 * This listens for when the outline becomes active

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IPartListener partListener =

+		new IPartListener() {

+			public void partActivated(IWorkbenchPart p) {

+				if (p instanceof ContentOutline) {

+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {

+						getActionBarContributor().setActiveEditor(SolverEditor.this);

+

+						setCurrentViewer(contentOutlineViewer);

+					}

+				}

+				else if (p instanceof PropertySheet) {

+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {

+						getActionBarContributor().setActiveEditor(SolverEditor.this);

+						handleActivate();

+					}

+				}

+				else if (p == SolverEditor.this) {

+					handleActivate();

+				}

+			}

+			public void partBroughtToTop(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partClosed(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partDeactivated(IWorkbenchPart p) {

+				// Ignore.

+			}

+			public void partOpened(IWorkbenchPart p) {

+				// Ignore.

+			}

+		};

+

+	/**

+	 * Resources that have been removed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been changed since last activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> changedResources = new ArrayList<Resource>();

+

+	/**

+	 * Resources that have been saved.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<Resource> savedResources = new ArrayList<Resource>();

+

+	/**

+	 * Map to store the diagnostic associated with a resource.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();

+

+	/**

+	 * Controls whether the problem indication should be updated.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean updateProblemIndication = true;

+

+	/**

+	 * Adapter used to update the problem indication when resources are demanded loaded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EContentAdapter problemIndicationAdapter = 

+		new EContentAdapter() {

+			@Override

+			public void notifyChanged(Notification notification) {

+				if (notification.getNotifier() instanceof Resource) {

+					switch (notification.getFeatureID(Resource.class)) {

+						case Resource.RESOURCE__IS_LOADED:

+						case Resource.RESOURCE__ERRORS:

+						case Resource.RESOURCE__WARNINGS: {

+							Resource resource = (Resource)notification.getNotifier();

+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);

+							if (diagnostic.getSeverity() != Diagnostic.OK) {

+								resourceToDiagnosticMap.put(resource, diagnostic);

+							}

+							else {

+								resourceToDiagnosticMap.remove(resource);

+							}

+

+							if (updateProblemIndication) {

+								getSite().getShell().getDisplay().asyncExec

+									(new Runnable() {

+										 public void run() {

+											 updateProblemIndication();

+										 }

+									 });

+							}

+							break;

+						}

+					}

+				}

+				else {

+					super.notifyChanged(notification);

+				}

+			}

+

+			@Override

+			protected void setTarget(Resource target) {

+				basicSetTarget(target);

+			}

+

+			@Override

+			protected void unsetTarget(Resource target) {

+				basicUnsetTarget(target);

+			}

+		};

+

+	/**

+	 * This listens for workspace changes.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IResourceChangeListener resourceChangeListener =

+		new IResourceChangeListener() {

+			public void resourceChanged(IResourceChangeEvent event) {

+				IResourceDelta delta = event.getDelta();

+				try {

+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {

+						protected ResourceSet resourceSet = editingDomain.getResourceSet();

+						protected Collection<Resource> changedResources = new ArrayList<Resource>();

+						protected Collection<Resource> removedResources = new ArrayList<Resource>();

+

+						public boolean visit(IResourceDelta delta) {

+							if (delta.getResource().getType() == IResource.FILE) {

+								if (delta.getKind() == IResourceDelta.REMOVED ||

+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {

+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);

+									if (resource != null) {

+										if (delta.getKind() == IResourceDelta.REMOVED) {

+											removedResources.add(resource);

+										}

+										else if (!savedResources.remove(resource)) {

+											changedResources.add(resource);

+										}

+									}

+								}

+							}

+

+							return true;

+						}

+

+						public Collection<Resource> getChangedResources() {

+							return changedResources;

+						}

+

+						public Collection<Resource> getRemovedResources() {

+							return removedResources;

+						}

+					}

+

+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();

+					delta.accept(visitor);

+

+					if (!visitor.getRemovedResources().isEmpty()) {

+						getSite().getShell().getDisplay().asyncExec

+							(new Runnable() {

+								 public void run() {

+									 removedResources.addAll(visitor.getRemovedResources());

+									 if (!isDirty()) {

+										 getSite().getPage().closeEditor(SolverEditor.this, false);

+									 }

+								 }

+							 });

+					}

+

+					if (!visitor.getChangedResources().isEmpty()) {

+						getSite().getShell().getDisplay().asyncExec

+							(new Runnable() {

+								 public void run() {

+									 changedResources.addAll(visitor.getChangedResources());

+									 if (getSite().getPage().getActiveEditor() == SolverEditor.this) {

+										 handleActivate();

+									 }

+								 }

+							 });

+					}

+				}

+				catch (CoreException exception) {

+					CoreEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+		};

+

+	/**

+	 * Handles activation of the editor or it's associated views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleActivate() {

+		// Recompute the read only state.

+		//

+		if (editingDomain.getResourceToReadOnlyMap() != null) {

+		  editingDomain.getResourceToReadOnlyMap().clear();

+

+		  // Refresh any actions that may become enabled or disabled.

+		  //

+		  setSelection(getSelection());

+		}

+

+		if (!removedResources.isEmpty()) {

+			if (handleDirtyConflict()) {

+				getSite().getPage().closeEditor(SolverEditor.this, false);

+			}

+			else {

+				removedResources.clear();

+				changedResources.clear();

+				savedResources.clear();

+			}

+		}

+		else if (!changedResources.isEmpty()) {

+			changedResources.removeAll(savedResources);

+			handleChangedResources();

+			changedResources.clear();

+			savedResources.clear();

+		}

+	}

+

+	/**

+	 * Handles what to do with changed resources on activation.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void handleChangedResources() {

+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {

+			if (isDirty()) {

+				changedResources.addAll(editingDomain.getResourceSet().getResources());

+			}

+			editingDomain.getCommandStack().flush();

+

+			updateProblemIndication = false;

+			for (Resource resource : changedResources) {

+				if (resource.isLoaded()) {

+					resource.unload();

+					try {

+						resource.load(Collections.EMPTY_MAP);

+					}

+					catch (IOException exception) {

+						if (!resourceToDiagnosticMap.containsKey(resource)) {

+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+						}

+					}

+				}

+			}

+

+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {

+				setSelection(StructuredSelection.EMPTY);

+			}

+

+			updateProblemIndication = true;

+			updateProblemIndication();

+		}

+	}

+  

+	/**

+	 * Updates the problems indication with the information described in the specified diagnostic.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void updateProblemIndication() {

+		if (updateProblemIndication) {

+			BasicDiagnostic diagnostic =

+				new BasicDiagnostic

+					(Diagnostic.OK,

+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$

+					 0,

+					 null,

+					 new Object [] { editingDomain.getResourceSet() });

+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {

+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {

+					diagnostic.add(childDiagnostic);

+				}

+			}

+

+			int lastEditorPage = getPageCount() - 1;

+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {

+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					setActivePage(lastEditorPage);

+				}

+			}

+			else if (diagnostic.getSeverity() != Diagnostic.OK) {

+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();

+				problemEditorPart.setDiagnostic(diagnostic);

+				problemEditorPart.setMarkerHelper(markerHelper);

+				try {

+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());

+					setPageText(lastEditorPage, problemEditorPart.getPartName());

+					setActivePage(lastEditorPage);

+					showTabs();

+				}

+				catch (PartInitException exception) {

+					CoreEditorPlugin.INSTANCE.log(exception);

+				}

+			}

+

+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {

+				markerHelper.deleteMarkers(editingDomain.getResourceSet());

+				if (diagnostic.getSeverity() != Diagnostic.OK) {

+					try {

+						markerHelper.createMarkers(diagnostic);

+					}

+					catch (CoreException exception) {

+						CoreEditorPlugin.INSTANCE.log(exception);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * Shows a dialog that asks if conflicting changes should be discarded.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean handleDirtyConflict() {

+		return

+			MessageDialog.openQuestion

+				(getSite().getShell(),

+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$

+				 getString("_WARN_FileConflict")); //$NON-NLS-1$

+	}

+

+	/**

+	 * This creates a model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public SolverEditor() {

+		super();

+		initializeEditingDomain();

+	}

+

+	/**

+	 * This sets up the editing domain for the model editor.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void initializeEditingDomain() {

+		// Create an adapter factory that yields item providers.

+		//

+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+

+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());

+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());

+

+		// Create the command stack that will notify this editor as commands are executed.

+		//

+		BasicCommandStack commandStack = new BasicCommandStack();

+

+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.

+		//

+		commandStack.addCommandStackListener

+			(new CommandStackListener() {

+				 public void commandStackChanged(final EventObject event) {

+					 getContainer().getDisplay().asyncExec

+						 (new Runnable() {

+							  public void run() {

+								  firePropertyChange(IEditorPart.PROP_DIRTY);

+

+								  // Try to select the affected objects.

+								  //

+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();

+								  if (mostRecentCommand != null) {

+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());

+								  }

+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {

+									  propertySheetPage.refresh();

+								  }

+							  }

+						  });

+				 }

+			 });

+

+		// Create the editing domain with a special command stack.

+		//

+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());

+	}

+

+	/**

+	 * This is here for the listener to be able to call it.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+			@Override

+	protected void firePropertyChange(int action) {

+		super.firePropertyChange(action);

+	}

+

+	/**

+	 * This sets the selection into whichever viewer is active.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelectionToViewer(Collection<?> collection) {

+		final Collection<?> theSelection = collection;

+		// Make sure it's okay.

+		//

+		if (theSelection != null && !theSelection.isEmpty()) {

+			Runnable runnable =

+				new Runnable() {

+					public void run() {

+						// Try to select the items in the current content viewer of the editor.

+						//

+						if (currentViewer != null) {

+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);

+						}

+					}

+				};

+			getSite().getShell().getDisplay().asyncExec(runnable);

+		}

+	}

+

+	/**

+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.

+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}

+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomain getEditingDomain() {

+		return editingDomain;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {

+			super(adapterFactory);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getElements(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object [] getChildren(Object object) {

+			Object parent = super.getParent(object);

+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public boolean hasChildren(Object object) {

+			Object parent = super.getParent(object);

+			return parent != null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public Object getParent(Object object) {

+			return null;

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewerPane(ViewerPane viewerPane) {

+		if (currentViewerPane != viewerPane) {

+			if (currentViewerPane != null) {

+				currentViewerPane.showFocus(false);

+			}

+			currentViewerPane = viewerPane;

+		}

+		setCurrentViewer(currentViewerPane.getViewer());

+	}

+

+	/**

+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,

+	 * is the current one.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setCurrentViewer(Viewer viewer) {

+		// If it is changing...

+		//

+		if (currentViewer != viewer) {

+			if (selectionChangedListener == null) {

+				// Create the listener on demand.

+				//

+				selectionChangedListener =

+					new ISelectionChangedListener() {

+						// This just notifies those things that are affected by the section.

+						//

+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {

+							setSelection(selectionChangedEvent.getSelection());

+						}

+					};

+			}

+

+			// Stop listening to the old one.

+			//

+			if (currentViewer != null) {

+				currentViewer.removeSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Start listening to the new one.

+			//

+			if (viewer != null) {

+				viewer.addSelectionChangedListener(selectionChangedListener);

+			}

+

+			// Remember it.

+			//

+			currentViewer = viewer;

+

+			// Set the editors selection based on the current viewer's selection.

+			//

+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());

+		}

+	}

+

+	/**

+	 * This returns the viewer as required by the {@link IViewerProvider} interface.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Viewer getViewer() {

+		return currentViewer;

+	}

+

+	/**

+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void createContextMenuFor(StructuredViewer viewer) {

+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$

+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$

+		contextMenu.setRemoveAllWhenShown(true);

+		contextMenu.addMenuListener(this);

+		Menu menu= contextMenu.createContextMenu(viewer.getControl());

+		viewer.getControl().setMenu(menu);

+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));

+

+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;

+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };

+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));

+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));

+	}

+

+	/**

+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void createModel() {

+		URI resourceURI = EditUIUtil.getURI(getEditorInput());

+		Exception exception = null;

+		Resource resource = null;

+		try {

+			// Load the resource through the editing domain.

+			//

+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);

+		}

+		catch (Exception e) {

+			exception = e;

+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);

+		}

+

+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);

+		if (diagnostic.getSeverity() != Diagnostic.OK) {

+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));

+		}

+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);

+	}

+

+	/**

+	 * Returns a diagnostic describing the errors and warnings listed in the resource

+	 * and the specified exception (if any).

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {

+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {

+			BasicDiagnostic basicDiagnostic =

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$

+					 new Object [] { exception == null ? (Object)resource : exception });

+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));

+			return basicDiagnostic;

+		}

+		else if (exception != null) {

+			return

+				new BasicDiagnostic

+					(Diagnostic.ERROR,

+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$

+					 0,

+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$

+					 new Object[] { exception });

+		}

+		else {

+			return Diagnostic.OK_INSTANCE;

+		}

+	}

+

+	/**

+	 * This is the method used by the framework to install your own controls.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void createPages() {

+		// Creates the model from the editor input

+		//

+		createModel();

+

+		// Only creates the other pages if there is something that can be edited

+		//

+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {

+			// Create a page for the selection tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				selectionViewer = (TreeViewer)viewerPane.getViewer();

+				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+

+				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+				selectionViewer.setInput(editingDomain.getResourceSet());

+				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+				viewerPane.setTitle(editingDomain.getResourceSet());

+

+				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(selectionViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$

+			}

+

+			// Create a page for the parent tree view.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							Tree tree = new Tree(composite, SWT.MULTI);

+							TreeViewer newTreeViewer = new TreeViewer(tree);

+							return newTreeViewer;

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				parentViewer = (TreeViewer)viewerPane.getViewer();

+				parentViewer.setAutoExpandLevel(30);

+				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));

+				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(parentViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ParentPage_label")); //$NON-NLS-1$

+			}

+

+			// This is the page for the list viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new ListViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				listViewer = (ListViewer)viewerPane.getViewer();

+				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(listViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_ListPage_label")); //$NON-NLS-1$

+			}

+

+			// This is the page for the tree viewer

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				treeViewer = (TreeViewer)viewerPane.getViewer();

+				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);

+

+				createContextMenuFor(treeViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreePage_label")); //$NON-NLS-1$

+			}

+

+			// This is the page for the table viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TableViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+				tableViewer = (TableViewer)viewerPane.getViewer();

+

+				Table table = tableViewer.getTable();

+				TableLayout layout = new TableLayout();

+				table.setLayout(layout);

+				table.setHeaderVisible(true);

+				table.setLinesVisible(true);

+

+				TableColumn objectColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(3, 100, true));

+				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$

+				objectColumn.setResizable(true);

+

+				TableColumn selfColumn = new TableColumn(table, SWT.NONE);

+				layout.addColumnData(new ColumnWeightData(2, 100, true));

+				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$

+				selfColumn.setResizable(true);

+

+				tableViewer.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$

+				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(tableViewer);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TablePage_label")); //$NON-NLS-1$

+			}

+

+			// This is the page for the table tree viewer.

+			//

+			{

+				ViewerPane viewerPane =

+					new ViewerPane(getSite().getPage(), SolverEditor.this) {

+						@Override

+						public Viewer createViewer(Composite composite) {

+							return new TreeViewer(composite);

+						}

+						@Override

+						public void requestActivation() {

+							super.requestActivation();

+							setCurrentViewerPane(this);

+						}

+					};

+				viewerPane.createControl(getContainer());

+

+				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();

+

+				Tree tree = treeViewerWithColumns.getTree();

+				tree.setLayoutData(new FillLayout());

+				tree.setHeaderVisible(true);

+				tree.setLinesVisible(true);

+

+				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);

+				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$

+				objectColumn.setResizable(true);

+				objectColumn.setWidth(250);

+

+				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);

+				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$

+				selfColumn.setResizable(true);

+				selfColumn.setWidth(200);

+

+				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$

+				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+

+				createContextMenuFor(treeViewerWithColumns);

+				int pageIndex = addPage(viewerPane.getControl());

+				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label")); //$NON-NLS-1$

+			}

+

+			getSite().getShell().getDisplay().asyncExec

+				(new Runnable() {

+					 public void run() {

+						 setActivePage(0);

+					 }

+				 });

+		}

+

+		// Ensures that this editor will only display the page's tab

+		// area if there are more than one page

+		//

+		getContainer().addControlListener

+			(new ControlAdapter() {

+				boolean guard = false;

+				@Override

+				public void controlResized(ControlEvent event) {

+					if (!guard) {

+						guard = true;

+						hideTabs();

+						guard = false;

+					}

+				}

+			 });

+

+		getSite().getShell().getDisplay().asyncExec

+			(new Runnable() {

+				 public void run() {

+					 updateProblemIndication();

+				 }

+			 });

+	}

+

+	/**

+	 * If there is just one page in the multi-page editor part,

+	 * this hides the single tab at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void hideTabs() {

+		if (getPageCount() <= 1) {

+			setPageText(0, ""); //$NON-NLS-1$

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(1);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y + 6);

+			}

+		}

+	}

+

+	/**

+	 * If there is more than one page in the multi-page editor part,

+	 * this shows the tabs at the bottom.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void showTabs() {

+		if (getPageCount() > 1) {

+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$

+			if (getContainer() instanceof CTabFolder) {

+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);

+				Point point = getContainer().getSize();

+				getContainer().setSize(point.x, point.y - 6);

+			}

+		}

+	}

+

+	/**

+	 * This is used to track the active viewer.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	protected void pageChange(int pageIndex) {

+		super.pageChange(pageIndex);

+

+		if (contentOutlinePage != null) {

+			handleContentOutlineSelection(contentOutlinePage.getSelection());

+		}

+	}

+

+	/**

+	 * This is how the framework determines which interfaces we implement.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@SuppressWarnings("unchecked")

+	@Override

+	public Object getAdapter(Class key) {

+		if (key.equals(IContentOutlinePage.class)) {

+			return showOutlineView() ? getContentOutlinePage() : null;

+		}

+		else if (key.equals(IPropertySheetPage.class)) {

+			return getPropertySheetPage();

+		}

+		else if (key.equals(IGotoMarker.class)) {

+			return this;

+		}

+		else {

+			return super.getAdapter(key);

+		}

+	}

+

+	/**

+	 * This accesses a cached version of the content outliner.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IContentOutlinePage getContentOutlinePage() {

+		if (contentOutlinePage == null) {

+			// The content outline is just a tree.

+			//

+			class MyContentOutlinePage extends ContentOutlinePage {

+				@Override

+				public void createControl(Composite parent) {

+					super.createControl(parent);

+					contentOutlineViewer = getTreeViewer();

+					contentOutlineViewer.addSelectionChangedListener(this);

+

+					// Set up the tree viewer.

+					//

+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));

+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));

+					contentOutlineViewer.setInput(editingDomain.getResourceSet());

+

+					// Make sure our popups work.

+					//

+					createContextMenuFor(contentOutlineViewer);

+

+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {

+					  // Select the root object in the view.

+					  //

+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);

+					}

+				}

+

+				@Override

+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {

+					super.makeContributions(menuManager, toolBarManager, statusLineManager);

+					contentOutlineStatusLineManager = statusLineManager;

+				}

+

+				@Override

+				public void setActionBars(IActionBars actionBars) {

+					super.setActionBars(actionBars);

+					getActionBarContributor().shareGlobalActions(this, actionBars);

+				}

+			}

+

+			contentOutlinePage = new MyContentOutlinePage();

+

+			// Listen to selection so that we can handle it is a special way.

+			//

+			contentOutlinePage.addSelectionChangedListener

+				(new ISelectionChangedListener() {

+					 // This ensures that we handle selections correctly.

+					 //

+					 public void selectionChanged(SelectionChangedEvent event) {

+						 handleContentOutlineSelection(event.getSelection());

+					 }

+				 });

+		}

+

+		return contentOutlinePage;

+	}

+

+	/**

+	 * This accesses a cached version of the property sheet.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IPropertySheetPage getPropertySheetPage() {

+		if (propertySheetPage == null) {

+			propertySheetPage =

+				new ExtendedPropertySheetPage(editingDomain) {

+					@Override

+					public void setSelectionToViewer(List<?> selection) {

+						SolverEditor.this.setSelectionToViewer(selection);

+						SolverEditor.this.setFocus();

+					}

+

+					@Override

+					public void setActionBars(IActionBars actionBars) {

+						super.setActionBars(actionBars);

+						getActionBarContributor().shareGlobalActions(this, actionBars);

+					}

+				};

+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));

+		}

+

+		return propertySheetPage;

+	}

+

+	/**

+	 * This deals with how we want selection in the outliner to affect the other views.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void handleContentOutlineSelection(ISelection selection) {

+		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {

+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();

+			if (selectedElements.hasNext()) {

+				// Get the first selected element.

+				//

+				Object selectedElement = selectedElements.next();

+

+				// If it's the selection viewer, then we want it to select the same selection as this selection.

+				//

+				if (currentViewerPane.getViewer() == selectionViewer) {

+					ArrayList<Object> selectionList = new ArrayList<Object>();

+					selectionList.add(selectedElement);

+					while (selectedElements.hasNext()) {

+						selectionList.add(selectedElements.next());

+					}

+

+					// Set the selection to the widget.

+					//

+					selectionViewer.setSelection(new StructuredSelection(selectionList));

+				}

+				else {

+					// Set the input to the widget.

+					//

+					if (currentViewerPane.getViewer().getInput() != selectedElement) {

+						currentViewerPane.getViewer().setInput(selectedElement);

+						currentViewerPane.setTitle(selectedElement);

+					}

+				}

+			}

+		}

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isDirty() {

+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();

+	}

+

+	/**

+	 * This is for implementing {@link IEditorPart} and simply saves the model file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSave(IProgressMonitor progressMonitor) {

+		// Save only resources that have actually changed.

+		//

+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();

+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);

+

+		// Do the work within an operation because this is a long running activity that modifies the workbench.

+		//

+		WorkspaceModifyOperation operation =

+			new WorkspaceModifyOperation() {

+				// This is the method that gets invoked when the operation runs.

+				//

+				@Override

+				public void execute(IProgressMonitor monitor) {

+					// Save the resources to the file system.

+					//

+					boolean first = true;

+					for (Resource resource : editingDomain.getResourceSet().getResources()) {

+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {

+							try {

+								long timeStamp = resource.getTimeStamp();

+								resource.save(saveOptions);

+								if (resource.getTimeStamp() != timeStamp) {

+									savedResources.add(resource);

+								}

+							}

+							catch (Exception exception) {

+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));

+							}

+							first = false;

+						}

+					}

+				}

+			};

+

+		updateProblemIndication = false;

+		try {

+			// This runs the options, and shows progress.

+			//

+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);

+

+			// Refresh the necessary state.

+			//

+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();

+			firePropertyChange(IEditorPart.PROP_DIRTY);

+		}

+		catch (Exception exception) {

+			// Something went wrong that shouldn't.

+			//

+			CoreEditorPlugin.INSTANCE.log(exception);

+		}

+		updateProblemIndication = true;

+		updateProblemIndication();

+	}

+

+	/**

+	 * This returns whether something has been persisted to the URI of the specified resource.

+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean isPersisted(Resource resource) {

+		boolean result = false;

+		try {

+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());

+			if (stream != null) {

+				result = true;

+				stream.close();

+			}

+		}

+		catch (IOException e) {

+			// Ignore

+		}

+		return result;

+	}

+

+	/**

+	 * This always returns true because it is not currently supported.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean isSaveAsAllowed() {

+		return true;

+	}

+

+	/**

+	 * This also changes the editor's input.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void doSaveAs() {

+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());

+		saveAsDialog.open();

+		IPath path = saveAsDialog.getResult();

+		if (path != null) {

+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);

+			if (file != null) {

+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));

+			}

+		}

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected void doSaveAs(URI uri, IEditorInput editorInput) {

+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		IProgressMonitor progressMonitor =

+			getActionBars().getStatusLineManager() != null ?

+				getActionBars().getStatusLineManager().getProgressMonitor() :

+				new NullProgressMonitor();

+		doSave(progressMonitor);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void gotoMarker(IMarker marker) {

+		try {

+			if (marker.getType().equals(EValidator.MARKER)) {

+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);

+				if (uriAttribute != null) {

+					URI uri = URI.createURI(uriAttribute);

+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);

+					if (eObject != null) {

+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));

+					}

+				}

+			}

+		}

+		catch (CoreException exception) {

+			CoreEditorPlugin.INSTANCE.log(exception);

+		}

+	}

+

+	/**

+	 * This is called during startup.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void init(IEditorSite site, IEditorInput editorInput) {

+		setSite(site);

+		setInputWithNotify(editorInput);

+		setPartName(editorInput.getName());

+		site.setSelectionProvider(this);

+		site.getPage().addPartListener(partListener);

+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void setFocus() {

+		if (currentViewerPane != null) {

+			currentViewerPane.setFocus();

+		}

+		else {

+			getControl(getActivePage()).setFocus();

+		}

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void addSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.add(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {

+		selectionChangedListeners.remove(listener);

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public ISelection getSelection() {

+		return editorSelection;

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.

+	 * Calling this result will notify the listeners.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setSelection(ISelection selection) {

+		editorSelection = selection;

+

+		for (ISelectionChangedListener listener : selectionChangedListeners) {

+			listener.selectionChanged(new SelectionChangedEvent(this, selection));

+		}

+		setStatusLineManager(selection);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void setStatusLineManager(ISelection selection) {

+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?

+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();

+

+		if (statusLineManager != null) {

+			if (selection instanceof IStructuredSelection) {

+				Collection<?> collection = ((IStructuredSelection)selection).toList();

+				switch (collection.size()) {

+					case 0: {

+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$

+						break;

+					}

+					case 1: {

+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());

+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$

+						break;

+					}

+					default: {

+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$

+						break;

+					}

+				}

+			}

+			else {

+				statusLineManager.setMessage(""); //$NON-NLS-1$

+			}

+		}

+	}

+

+	/**

+	 * This looks up a string in the plugin's plugin.properties file.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key) {

+		return CoreEditorPlugin.INSTANCE.getString(key);

+	}

+

+	/**

+	 * This looks up a string in plugin.properties, making a substitution.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	private static String getString(String key, Object s1) {

+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });

+	}

+

+	/**

+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void menuAboutToShow(IMenuManager menuManager) {

+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public EditingDomainActionBarContributor getActionBarContributor() {

+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IActionBars getActionBars() {

+		return getActionBarContributor().getActionBars();

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public AdapterFactory getAdapterFactory() {

+		return adapterFactory;

+	}

+

+	/**

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public void dispose() {

+		updateProblemIndication = false;

+

+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);

+

+		getSite().getPage().removePartListener(partListener);

+

+		adapterFactory.dispose();

+

+		if (getActionBarContributor().getActiveEditor() == this) {

+			getActionBarContributor().setActiveEditor(null);

+		}

+

+		if (propertySheetPage != null) {

+			propertySheetPage.dispose();

+		}

+

+		if (contentOutlinePage != null) {

+			contentOutlinePage.dispose();

+		}

+

+		super.dispose();

+	}

+

+	/**

+	 * Returns whether the outline view should be presented to the user.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected boolean showOutlineView() {

+		return true;

+	}

+}

diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverModelWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverModelWizard.java
new file mode 100644
index 0000000..0624a58
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/solver/presentation/SolverModelWizard.java
@@ -0,0 +1,639 @@
+package org.eclipse.stem.core.solver.presentation;

+

+/*******************************************************************************

+ * Copyright (c) 2009 IBM Corporation 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:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.MissingResourceException;

+import java.util.StringTokenizer;

+

+import org.eclipse.emf.common.CommonPlugin;

+

+import org.eclipse.emf.common.util.URI;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+

+import org.eclipse.emf.ecore.EObject;

+

+import org.eclipse.emf.ecore.xmi.XMLResource;

+

+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;

+

+import org.eclipse.core.resources.IContainer;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IFolder;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.ResourcesPlugin;

+

+import org.eclipse.core.runtime.IProgressMonitor;

+

+import org.eclipse.jface.dialogs.MessageDialog;

+

+import org.eclipse.jface.viewers.IStructuredSelection;

+

+import org.eclipse.jface.wizard.Wizard;

+import org.eclipse.jface.wizard.WizardPage;

+

+import org.eclipse.swt.SWT;

+

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.ModifyEvent;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+

+import org.eclipse.swt.widgets.Combo;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+

+import org.eclipse.ui.INewWizard;

+import org.eclipse.ui.IWorkbench;

+

+import org.eclipse.ui.actions.WorkspaceModifyOperation;

+

+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

+

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.part.ISetSelectionTarget;

+

+import org.eclipse.stem.core.solver.SolverFactory;

+import org.eclipse.stem.core.solver.SolverPackage;

+import org.eclipse.stem.core.common.provider.CoreEditPlugin;

+

+

+import org.eclipse.core.runtime.Path;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.StructuredSelection;

+

+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;

+

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+

+

+/**

+ * This is a simple wizard for creating a new model file.

+ * <!-- begin-user-doc -->

+ * <!-- end-user-doc -->

+ * @generated

+ */

+public class SolverModelWizard extends Wizard implements INewWizard {

+	/**

+	 * The supported extensions for created files.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final List<String> FILE_EXTENSIONS =

+		Collections.unmodifiableList(Arrays.asList(CoreEditorPlugin.INSTANCE.getString("_UI_SolverEditorFilenameExtensions").split("\\s*,\\s*"))); //$NON-NLS-1$ //$NON-NLS-2$

+

+	/**

+	 * A formatted list of supported file extensions, suitable for display.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public static final String FORMATTED_FILE_EXTENSIONS =

+		CoreEditorPlugin.INSTANCE.getString("_UI_SolverEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");

+

+	/**

+	 * This caches an instance of the model package.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverPackage solverPackage = SolverPackage.eINSTANCE;

+

+	/**

+	 * This caches an instance of the model factory.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverFactory solverFactory = solverPackage.getSolverFactory();

+

+	/**

+	 * This is the file creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverModelWizardNewFileCreationPage newFileCreationPage;

+

+	/**

+	 * This is the initial object creation page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected SolverModelWizardInitialObjectCreationPage initialObjectCreationPage;

+

+	/**

+	 * Remember the selection during initialization for populating the default container.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IStructuredSelection selection;

+

+	/**

+	 * Remember the workbench during initialization.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected IWorkbench workbench;

+

+	/**

+	 * Caches the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected List<String> initialObjectNames;

+

+	/**

+	 * This just records the information.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public void init(IWorkbench workbench, IStructuredSelection selection) {

+		this.workbench = workbench;

+		this.selection = selection;

+		setWindowTitle(CoreEditorPlugin.INSTANCE.getString("_UI_Wizard_label")); //$NON-NLS-1$

+		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(CoreEditorPlugin.INSTANCE.getImage("full/wizban/NewSolver"))); //$NON-NLS-1$

+	}

+

+	/**

+	 * Returns the names of the types that can be created as the root object.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected Collection<String> getInitialObjectNames() {

+		if (initialObjectNames == null) {

+			initialObjectNames = new ArrayList<String>();

+			for (EClassifier eClassifier : solverPackage.getEClassifiers()) {

+				if (eClassifier instanceof EClass) {

+					EClass eClass = (EClass)eClassifier;

+					if (!eClass.isAbstract()) {

+						initialObjectNames.add(eClass.getName());

+					}

+				}

+			}

+			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());

+		}

+		return initialObjectNames;

+	}

+

+	/**

+	 * Create a new model.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	protected EObject createInitialModel() {

+		EClass eClass = (EClass)solverPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());

+		EObject rootObject = solverFactory.create(eClass);

+		return rootObject;

+	}

+

+	/**

+	 * Do the work after everything is specified.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	@Override

+	public boolean performFinish() {

+		try {

+			// Remember the file.

+			//

+			final IFile modelFile = getModelFile();

+

+			// Do the work within an operation.

+			//

+			WorkspaceModifyOperation operation =

+				new WorkspaceModifyOperation() {

+					@Override

+					protected void execute(IProgressMonitor progressMonitor) {

+						try {

+							// Create a resource set

+							//

+							ResourceSet resourceSet = new ResourceSetImpl();

+

+							// Get the URI of the model file.

+							//

+							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);

+

+							// Create a resource for this file.

+							//

+							Resource resource = resourceSet.createResource(fileURI);

+

+							// Add the initial model object to the contents.

+							//

+							EObject rootObject = createInitialModel();

+							if (rootObject != null) {

+								resource.getContents().add(rootObject);

+							}

+

+							// Save the contents of the resource to the file system.

+							//

+							Map<Object, Object> options = new HashMap<Object, Object>();

+							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());

+							resource.save(options);

+						}

+						catch (Exception exception) {

+							CoreEditorPlugin.INSTANCE.log(exception);

+						}

+						finally {

+							progressMonitor.done();

+						}

+					}

+				};

+

+			getContainer().run(false, false, operation);

+

+			// Select the new file resource in the current view.

+			//

+			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();

+			IWorkbenchPage page = workbenchWindow.getActivePage();

+			final IWorkbenchPart activePart = page.getActivePart();

+			if (activePart instanceof ISetSelectionTarget) {

+				final ISelection targetSelection = new StructuredSelection(modelFile);

+				getShell().getDisplay().asyncExec

+					(new Runnable() {

+						 public void run() {

+							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);

+						 }

+					 });

+			}

+

+			// Open an editor on the new file.

+			//

+			try {

+				page.openEditor

+					(new FileEditorInput(modelFile),

+					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());

+			}

+			catch (PartInitException exception) {

+				MessageDialog.openError(workbenchWindow.getShell(), CoreEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); //$NON-NLS-1$

+				return false;

+			}

+

+			return true;

+		}

+		catch (Exception exception) {

+			CoreEditorPlugin.INSTANCE.log(exception);

+			return false;

+		}

+	}

+

+	/**

+	 * This is the one page of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class SolverModelWizardNewFileCreationPage extends WizardNewFileCreationPage {

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public SolverModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {

+			super(pageId, selection);

+		}

+

+		/**

+		 * The framework calls this to see if the file is correct.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		protected boolean validatePage() {

+			if (super.validatePage()) {

+				String extension = new Path(getFileName()).getFileExtension();

+				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {

+					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension"; //$NON-NLS-1$ //$NON-NLS-2$

+					setErrorMessage(CoreEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));

+					return false;

+				}

+				return true;

+			}

+			return false;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public IFile getModelFile() {

+			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));

+		}

+	}

+

+	/**

+	 * This is the page where the type of object to create is selected.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public class SolverModelWizardInitialObjectCreationPage extends WizardPage {

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo initialObjectField;

+

+		/**

+		 * @generated

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 */

+		protected List<String> encodings;

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Combo encodingField;

+

+		/**

+		 * Pass in the selection.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public SolverModelWizardInitialObjectCreationPage(String pageId) {

+			super(pageId);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public void createControl(Composite parent) {

+			Composite composite = new Composite(parent, SWT.NONE); {

+				GridLayout layout = new GridLayout();

+				layout.numColumns = 1;

+				layout.verticalSpacing = 12;

+				composite.setLayout(layout);

+

+				GridData data = new GridData();

+				data.verticalAlignment = GridData.FILL;

+				data.grabExcessVerticalSpace = true;

+				data.horizontalAlignment = GridData.FILL;

+				composite.setLayoutData(data);

+			}

+

+			Label containerLabel = new Label(composite, SWT.LEFT);

+			{

+				containerLabel.setText(CoreEditorPlugin.INSTANCE.getString("_UI_ModelObject")); //$NON-NLS-1$

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				containerLabel.setLayoutData(data);

+			}

+

+			initialObjectField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				initialObjectField.setLayoutData(data);

+			}

+

+			for (String objectName : getInitialObjectNames()) {

+				initialObjectField.add(getLabel(objectName));

+			}

+

+			if (initialObjectField.getItemCount() == 1) {

+				initialObjectField.select(0);

+			}

+			initialObjectField.addModifyListener(validator);

+

+			Label encodingLabel = new Label(composite, SWT.LEFT);

+			{

+				encodingLabel.setText(CoreEditorPlugin.INSTANCE.getString("_UI_XMLEncoding")); //$NON-NLS-1$

+

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				encodingLabel.setLayoutData(data);

+			}

+			encodingField = new Combo(composite, SWT.BORDER);

+			{

+				GridData data = new GridData();

+				data.horizontalAlignment = GridData.FILL;

+				data.grabExcessHorizontalSpace = true;

+				encodingField.setLayoutData(data);

+			}

+

+			for (String encoding : getEncodings()) {

+				encodingField.add(encoding);

+			}

+

+			encodingField.select(0);

+			encodingField.addModifyListener(validator);

+

+			setPageComplete(validatePage());

+			setControl(composite);

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected ModifyListener validator =

+			new ModifyListener() {

+				public void modifyText(ModifyEvent e) {

+					setPageComplete(validatePage());

+				}

+			};

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected boolean validatePage() {

+			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		@Override

+		public void setVisible(boolean visible) {

+			super.setVisible(visible);

+			if (visible) {

+				if (initialObjectField.getItemCount() == 1) {

+					initialObjectField.clearSelection();

+					encodingField.setFocus();

+				}

+				else {

+					encodingField.clearSelection();

+					initialObjectField.setFocus();

+				}

+			}

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getInitialObjectName() {

+			String label = initialObjectField.getText();

+

+			for (String name : getInitialObjectNames()) {

+				if (getLabel(name).equals(label)) {

+					return name;

+				}

+			}

+			return null;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		public String getEncoding() {

+			return encodingField.getText();

+		}

+

+		/**

+		 * Returns the label for the specified type name.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected String getLabel(String typeName) {

+			try {

+				return CoreEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); //$NON-NLS-1$ //$NON-NLS-2$

+			}

+			catch(MissingResourceException mre) {

+				CoreEditorPlugin.INSTANCE.log(mre);

+			}

+			return typeName;

+		}

+

+		/**

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		protected Collection<String> getEncodings() {

+			if (encodings == null) {

+				encodings = new ArrayList<String>();

+				for (StringTokenizer stringTokenizer = new StringTokenizer(CoreEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) //$NON-NLS-1$

+				{

+					encodings.add(stringTokenizer.nextToken());

+				}

+			}

+			return encodings;

+		}

+	}

+

+	/**

+	 * The framework calls this to create the contents of the wizard.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+		@Override

+	public void addPages() {

+		// Create a page, set the title, and the initial model file name.

+		//

+		newFileCreationPage = new SolverModelWizardNewFileCreationPage("Whatever", selection); //$NON-NLS-1$

+		newFileCreationPage.setTitle(CoreEditorPlugin.INSTANCE.getString("_UI_SolverModelWizard_label")); //$NON-NLS-1$

+		newFileCreationPage.setDescription(CoreEditorPlugin.INSTANCE.getString("_UI_SolverModelWizard_description")); //$NON-NLS-1$

+		newFileCreationPage.setFileName(CoreEditorPlugin.INSTANCE.getString("_UI_SolverEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0)); //$NON-NLS-1$ //$NON-NLS-2$

+		addPage(newFileCreationPage);

+

+		// Try and get the resource selection to determine a current directory for the file dialog.

+		//

+		if (selection != null && !selection.isEmpty()) {

+			// Get the resource...

+			//

+			Object selectedElement = selection.iterator().next();

+			if (selectedElement instanceof IResource) {

+				// Get the resource parent, if its a file.

+				//

+				IResource selectedResource = (IResource)selectedElement;

+				if (selectedResource.getType() == IResource.FILE) {

+					selectedResource = selectedResource.getParent();

+				}

+

+				// This gives us a directory...

+				//

+				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {

+					// Set this for the container.

+					//

+					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());

+

+					// Make up a unique new name here.

+					//

+					String defaultModelBaseFilename = CoreEditorPlugin.INSTANCE.getString("_UI_SolverEditorFilenameDefaultBase"); //$NON-NLS-1$

+					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);

+					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension; //$NON-NLS-1$

+					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {

+						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension; //$NON-NLS-1$

+					}

+					newFileCreationPage.setFileName(modelFilename);

+				}

+			}

+		}

+		initialObjectCreationPage = new SolverModelWizardInitialObjectCreationPage("Whatever2"); //$NON-NLS-1$

+		initialObjectCreationPage.setTitle(CoreEditorPlugin.INSTANCE.getString("_UI_SolverModelWizard_label")); //$NON-NLS-1$

+		initialObjectCreationPage.setDescription(CoreEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); //$NON-NLS-1$

+		addPage(initialObjectCreationPage);

+	}

+

+	/**

+	 * Get the file from the page.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 */

+	public IFile getModelFile() {

+		return newFileCreationPage.getModelFile();

+	}

+

+}

diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerActionBarContributor.java
new file mode 100644
index 0000000..84c99d5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerActionBarContributor.java
@@ -0,0 +1,437 @@
+package org.eclipse.stem.core.trigger.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Trigger model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TriggerActionBarContributor
+	extends EditingDomainActionBarContributor
+	implements ISelectionChangedListener {
+	/**
+	 * This keeps track of the active editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction showPropertiesViewAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public void run() {
+				try {
+					getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IAction refreshViewerAction =
+		new Action(CoreEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) //$NON-NLS-1$
+		{
+			@Override
+			public boolean isEnabled() {
+				return activeEditorPart instanceof IViewerProvider;
+			}
+
+			@Override
+			public void run() {
+				if (activeEditorPart instanceof IViewerProvider) {
+					Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+					if (viewer != null) {
+						viewer.refresh();
+					}
+				}
+			}
+		};
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+	 * generated for the current selection by the item provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	}
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("trigger-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("trigger-additions")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor additions,
+	 * as well as the sub-menus for object creation items.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_TriggerEditor_menu"), "org.eclipse.stem.core.triggerMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		//
+		createChildMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		//
+		createSiblingMenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		//
+		submenuManager.addMenuListener
+			(new IMenuListener() {
+				 public void menuAboutToShow(IMenuManager menuManager) {
+					 menuManager.updateAll(true);
+				 }
+			 });
+
+		addGlobalActions(submenuManager);
+	}
+
+	/**
+	 * When the active editor changes, this remembers the change and registers with it as a selection provider.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		}
+		else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+	 * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+	 * that can be added to the selected object and updating the menus accordingly.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		//
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+			Object object = ((IStructuredSelection)selection).getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		//
+		createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+		createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions, null);
+			createSiblingMenuManager.update(true);
+		}
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+	 * and returns the collection of these actions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+	 * by inserting them before the specified contribution item <code>contributionID</code>.
+	 * If <code>contributionID</code> is <code>null</code>, they are simply added.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				}
+				else {
+					manager.add(action);
+				}
+			}
+		}
+	}
+		
+	/**
+	 * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+	 * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				//
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				//
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)contributionItem).getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager(CoreEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item")); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	}
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());		
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		super.addGlobalActions(menuManager);
+	}
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted objects.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerEditor.java
new file mode 100644
index 0000000..8526eca
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/core/trigger/presentation/TriggerEditor.java
@@ -0,0 +1,1685 @@
+package org.eclipse.stem.core.trigger.presentation;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.stem.core.STEMXMIResourceFactoryImpl;
+import org.eclipse.stem.core.trigger.provider.TriggerItemProviderAdapterFactory;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.common.presentation.CoreEditorPlugin;
+
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.modifier.provider.ModifierItemProviderAdapterFactory;
+import org.eclipse.stem.core.predicate.provider.PredicateItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+
+import org.eclipse.stem.core.solver.provider.SolverItemProviderAdapterFactory;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Trigger model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+@SuppressWarnings("all")
+public class TriggerEditor
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	/**
+	 * This keeps track of the editing domain that is used to track all changes to the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This is the one adapter factory used for providing views of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * This is the content outline page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IContentOutlinePage contentOutlinePage;
+
+	/**
+	 * This is a kludge...
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IStatusLineManager contentOutlineStatusLineManager;
+
+	/**
+	 * This is the content outline page's viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer contentOutlineViewer;
+
+	/**
+	 * This is the property sheet page.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertySheetPage propertySheetPage;
+
+	/**
+	 * This is the viewer that shadows the selection in the content outline.
+	 * The parent relation must be correctly defined for this to work.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TreeViewer selectionViewer;
+
+	/**
+	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This listens to which ever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelectionChangedListener selectionChangedListener;
+
+	/**
+	 * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * This keeps track of the selection of the editor as a whole.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * The MarkerHelper is responsible for creating workspace resource markers presented
+	 * in Eclipse's Problems View.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+	/**
+	 * This listens for when the outline becomes active
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IPartListener partListener =
+		new IPartListener() {
+			public void partActivated(IWorkbenchPart p) {
+				if (p instanceof ContentOutline) {
+					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+						getActionBarContributor().setActiveEditor(TriggerEditor.this);
+
+						setCurrentViewer(contentOutlineViewer);
+					}
+				}
+				else if (p instanceof PropertySheet) {
+					if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+						getActionBarContributor().setActiveEditor(TriggerEditor.this);
+						handleActivate();
+					}
+				}
+				else if (p == TriggerEditor.this) {
+					handleActivate();
+				}
+			}
+			public void partBroughtToTop(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partClosed(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partDeactivated(IWorkbenchPart p) {
+				// Ignore.
+			}
+			public void partOpened(IWorkbenchPart p) {
+				// Ignore.
+			}
+		};
+
+	/**
+	 * Resources that have been removed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been changed since last activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+	/**
+	 * Resources that have been saved.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+	/**
+	 * Map to store the diagnostic associated with a resource.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+	/**
+	 * Controls whether the problem indication should be updated.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean updateProblemIndication = true;
+
+	/**
+	 * Adapter used to update the problem indication when resources are demanded loaded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EContentAdapter problemIndicationAdapter = 
+		new EContentAdapter() {
+			@Override
+			public void notifyChanged(Notification notification) {
+				if (notification.getNotifier() instanceof Resource) {
+					switch (notification.getFeatureID(Resource.class)) {
+						case Resource.RESOURCE__IS_LOADED:
+						case Resource.RESOURCE__ERRORS:
+						case Resource.RESOURCE__WARNINGS: {
+							Resource resource = (Resource)notification.getNotifier();
+							Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+							if (diagnostic.getSeverity() != Diagnostic.OK) {
+								resourceToDiagnosticMap.put(resource, diagnostic);
+							}
+							else {
+								resourceToDiagnosticMap.remove(resource);
+							}
+
+							if (updateProblemIndication) {
+								getSite().getShell().getDisplay().asyncExec
+									(new Runnable() {
+										 public void run() {
+											 updateProblemIndication();
+										 }
+									 });
+							}
+							break;
+						}
+					}
+				}
+				else {
+					super.notifyChanged(notification);
+				}
+			}
+
+			@Override
+			protected void setTarget(Resource target) {
+				basicSetTarget(target);
+			}
+
+			@Override
+			protected void unsetTarget(Resource target) {
+				basicUnsetTarget(target);
+			}
+		};
+
+	/**
+	 * This listens for workspace changes.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				IResourceDelta delta = event.getDelta();
+				try {
+					class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+						protected ResourceSet resourceSet = editingDomain.getResourceSet();
+						protected Collection<Resource> changedResources = new ArrayList<Resource>();
+						protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+						public boolean visit(IResourceDelta delta) {
+							if (delta.getResource().getType() == IResource.FILE) {
+								if (delta.getKind() == IResourceDelta.REMOVED ||
+								    delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+									Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+									if (resource != null) {
+										if (delta.getKind() == IResourceDelta.REMOVED) {
+											removedResources.add(resource);
+										}
+										else if (!savedResources.remove(resource)) {
+											changedResources.add(resource);
+										}
+									}
+								}
+							}
+
+							return true;
+						}
+
+						public Collection<Resource> getChangedResources() {
+							return changedResources;
+						}
+
+						public Collection<Resource> getRemovedResources() {
+							return removedResources;
+						}
+					}
+
+					final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+					delta.accept(visitor);
+
+					if (!visitor.getRemovedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 removedResources.addAll(visitor.getRemovedResources());
+									 if (!isDirty()) {
+										 getSite().getPage().closeEditor(TriggerEditor.this, false);
+									 }
+								 }
+							 });
+					}
+
+					if (!visitor.getChangedResources().isEmpty()) {
+						getSite().getShell().getDisplay().asyncExec
+							(new Runnable() {
+								 public void run() {
+									 changedResources.addAll(visitor.getChangedResources());
+									 if (getSite().getPage().getActiveEditor() == TriggerEditor.this) {
+										 handleActivate();
+									 }
+								 }
+							 });
+					}
+				}
+				catch (CoreException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+		};
+
+	/**
+	 * Handles activation of the editor or it's associated views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state.
+		//
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+		  editingDomain.getResourceToReadOnlyMap().clear();
+
+		  // Refresh any actions that may become enabled or disabled.
+		  //
+		  setSelection(getSelection());
+		}
+
+		if (!removedResources.isEmpty()) {
+			if (handleDirtyConflict()) {
+				getSite().getPage().closeEditor(TriggerEditor.this, false);
+			}
+			else {
+				removedResources.clear();
+				changedResources.clear();
+				savedResources.clear();
+			}
+		}
+		else if (!changedResources.isEmpty()) {
+			changedResources.removeAll(savedResources);
+			handleChangedResources();
+			changedResources.clear();
+			savedResources.clear();
+		}
+	}
+
+	/**
+	 * Handles what to do with changed resources on activation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void handleChangedResources() {
+		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			if (isDirty()) {
+				changedResources.addAll(editingDomain.getResourceSet().getResources());
+			}
+			editingDomain.getCommandStack().flush();
+
+			updateProblemIndication = false;
+			for (Resource resource : changedResources) {
+				if (resource.isLoaded()) {
+					resource.unload();
+					try {
+						resource.load(Collections.EMPTY_MAP);
+					}
+					catch (IOException exception) {
+						if (!resourceToDiagnosticMap.containsKey(resource)) {
+							resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+						}
+					}
+				}
+			}
+
+			if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+				setSelection(StructuredSelection.EMPTY);
+			}
+
+			updateProblemIndication = true;
+			updateProblemIndication();
+		}
+	}
+  
+	/**
+	 * Updates the problems indication with the information described in the specified diagnostic.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void updateProblemIndication() {
+		if (updateProblemIndication) {
+			BasicDiagnostic diagnostic =
+				new BasicDiagnostic
+					(Diagnostic.OK,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 null,
+					 new Object [] { editingDomain.getResourceSet() });
+			for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+				if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+					diagnostic.add(childDiagnostic);
+				}
+			}
+
+			int lastEditorPage = getPageCount() - 1;
+			if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+				((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					setActivePage(lastEditorPage);
+				}
+			}
+			else if (diagnostic.getSeverity() != Diagnostic.OK) {
+				ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+				problemEditorPart.setDiagnostic(diagnostic);
+				problemEditorPart.setMarkerHelper(markerHelper);
+				try {
+					addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+					setPageText(lastEditorPage, problemEditorPart.getPartName());
+					setActivePage(lastEditorPage);
+					showTabs();
+				}
+				catch (PartInitException exception) {
+					CoreEditorPlugin.INSTANCE.log(exception);
+				}
+			}
+
+			if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+				markerHelper.deleteMarkers(editingDomain.getResourceSet());
+				if (diagnostic.getSeverity() != Diagnostic.OK) {
+					try {
+						markerHelper.createMarkers(diagnostic);
+					}
+					catch (CoreException exception) {
+						CoreEditorPlugin.INSTANCE.log(exception);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Shows a dialog that asks if conflicting changes should be discarded.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean handleDirtyConflict() {
+		return
+			MessageDialog.openQuestion
+				(getSite().getShell(),
+				 getString("_UI_FileConflict_label"), //$NON-NLS-1$
+				 getString("_WARN_FileConflict")); //$NON-NLS-1$
+	}
+
+	/**
+	 * This creates a model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TriggerEditor() {
+		super();
+		initializeEditingDomain();
+	}
+
+	/**
+	 * This sets up the editing domain for the model editor. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void initializeEditingDomain() {
+		initializeEditingDomainGen();
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getExtensionToFactoryMap().put("*",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+
+		editingDomain.getResourceSet().getResourceFactoryRegistry()
+				.getProtocolToFactoryMap().put("platform",
+						STEMXMIResourceFactoryImpl.INSTANCE);
+	} // initializeEditingDomain
+	
+	/**
+	 * This sets up the editing domain for the model editor.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void initializeEditingDomainGen() {
+		// Create an adapter factory that yields item providers.
+		//
+		adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ModifierItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new PredicateItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new TriggerItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new SolverItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+		// Create the command stack that will notify this editor as commands are executed.
+		//
+		BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+		//
+		commandStack.addCommandStackListener
+			(new CommandStackListener() {
+				 public void commandStackChanged(final EventObject event) {
+					 getContainer().getDisplay().asyncExec
+						 (new Runnable() {
+							  public void run() {
+								  firePropertyChange(IEditorPart.PROP_DIRTY);
+
+								  // Try to select the affected objects.
+								  //
+								  Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+								  if (mostRecentCommand != null) {
+									  setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+								  }
+								  if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+									  propertySheetPage.refresh();
+								  }
+							  }
+						  });
+				 }
+			 });
+
+		// Create the editing domain with a special command stack.
+		//
+		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+	}
+
+	/**
+	 * This is here for the listener to be able to call it.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+			@Override
+	protected void firePropertyChange(int action) {
+		super.firePropertyChange(action);
+	}
+
+	/**
+	 * This sets the selection into whichever viewer is active.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelectionToViewer(Collection<?> collection) {
+		final Collection<?> theSelection = collection;
+		// Make sure it's okay.
+		//
+		if (theSelection != null && !theSelection.isEmpty()) {
+			Runnable runnable =
+				new Runnable() {
+					public void run() {
+						// Try to select the items in the current content viewer of the editor.
+						//
+						if (currentViewer != null) {
+							currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+						}
+					}
+				};
+			getSite().getShell().getDisplay().asyncExec(runnable);
+		}
+	}
+
+	/**
+	 * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+	 * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+	 * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+			super(adapterFactory);
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getElements(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object [] getChildren(Object object) {
+			Object parent = super.getParent(object);
+			return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public boolean hasChildren(Object object) {
+			Object parent = super.getParent(object);
+			return parent != null;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Object getParent(Object object) {
+			return null;
+		}
+	}
+
+	/**
+	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+	 * is the current one.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setCurrentViewer(Viewer viewer) {
+		// If it is changing...
+		//
+		if (currentViewer != viewer) {
+			if (selectionChangedListener == null) {
+				// Create the listener on demand.
+				//
+				selectionChangedListener =
+					new ISelectionChangedListener() {
+						// This just notifies those things that are affected by the section.
+						//
+						public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+							setSelection(selectionChangedEvent.getSelection());
+						}
+					};
+			}
+
+			// Stop listening to the old one.
+			//
+			if (currentViewer != null) {
+				currentViewer.removeSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Start listening to the new one.
+			//
+			if (viewer != null) {
+				viewer.addSelectionChangedListener(selectionChangedListener);
+			}
+
+			// Remember it.
+			//
+			currentViewer = viewer;
+
+			// Set the editors selection based on the current viewer's selection.
+			//
+			setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+		}
+	}
+
+	/**
+	 * This returns the viewer as required by the {@link IViewerProvider} interface.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Viewer getViewer() {
+		return currentViewer;
+	}
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well
+	 * registering the menu for extension. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(), LocalTransfer.getInstance(),
+				TextTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(
+				viewer));
+		viewer.addDropSupport(dndOperations, transfers,
+				new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	} // createContextMenuFor
+	
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createContextMenuForGen(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+
+	/**
+	 * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createModel() {
+		URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		Exception exception = null;
+		Resource resource = null;
+		try {
+			// Load the resource through the editing domain.
+			//
+			resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+		}
+		catch (Exception e) {
+			exception = e;
+			resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+		}
+
+		Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+		if (diagnostic.getSeverity() != Diagnostic.OK) {
+			resourceToDiagnosticMap.put(resource,  analyzeResourceProblems(resource, exception));
+		}
+		editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+	}
+
+	/**
+	 * Returns a diagnostic describing the errors and warnings listed in the resource
+	 * and the specified exception (if any).
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+		if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+			BasicDiagnostic basicDiagnostic =
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object [] { exception == null ? (Object)resource : exception });
+			basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+			return basicDiagnostic;
+		}
+		else if (exception != null) {
+			return
+				new BasicDiagnostic
+					(Diagnostic.ERROR,
+					 "org.eclipse.stem.core.editor", //$NON-NLS-1$
+					 0,
+					 getString("_UI_CreateModelError_message", resource.getURI()), //$NON-NLS-1$
+					 new Object[] { exception });
+		}
+		else {
+			return Diagnostic.OK_INSTANCE;
+		}
+	}
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	@Override
+	public void createPages() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			//selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setInput(editingDomain.getResourceSet().getResources().get(0));
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	} // createPages
+
+	/**
+	 * This is the method used by the framework to install your own controls.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	//@Override
+	public void createPagesGen() {
+		// Creates the model from the editor input
+		//
+		createModel();
+
+		// Only creates the other pages if there is something that can be edited
+		//
+		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+			// Create a page for the selection tree view.
+			//
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
+
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+
+			getSite().getShell().getDisplay().asyncExec
+				(new Runnable() {
+					 public void run() {
+						 setActivePage(0);
+					 }
+				 });
+		}
+
+		// Ensures that this editor will only display the page's tab
+		// area if there are more than one page
+		//
+		getContainer().addControlListener
+			(new ControlAdapter() {
+				boolean guard = false;
+				@Override
+				public void controlResized(ControlEvent event) {
+					if (!guard) {
+						guard = true;
+						hideTabs();
+						guard = false;
+					}
+				}
+			 });
+
+		getSite().getShell().getDisplay().asyncExec
+			(new Runnable() {
+				 public void run() {
+					 updateProblemIndication();
+				 }
+			 });
+	}
+	
+	/**
+	 * If there is just one page in the multi-page editor part,
+	 * this hides the single tab at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void hideTabs() {
+		if (getPageCount() <= 1) {
+			setPageText(0, ""); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(1);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y + 6);
+			}
+		}
+	}
+
+	/**
+	 * If there is more than one page in the multi-page editor part,
+	 * this shows the tabs at the bottom.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void showTabs() {
+		if (getPageCount() > 1) {
+			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
+			if (getContainer() instanceof CTabFolder) {
+				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+				Point point = getContainer().getSize();
+				getContainer().setSize(point.x, point.y - 6);
+			}
+		}
+	}
+
+	/**
+	 * This is used to track the active viewer.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void pageChange(int pageIndex) {
+		super.pageChange(pageIndex);
+
+		if (contentOutlinePage != null) {
+			handleContentOutlineSelection(contentOutlinePage.getSelection());
+		}
+	}
+
+	/**
+	 * This is how the framework determines which interfaces we implement.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Object getAdapter(Class key) {
+		if (key.equals(IContentOutlinePage.class)) {
+			return showOutlineView() ? getContentOutlinePage() : null;
+		}
+		else if (key.equals(IPropertySheetPage.class)) {
+			return getPropertySheetPage();
+		}
+		else if (key.equals(IGotoMarker.class)) {
+			return this;
+		}
+		else {
+			return super.getAdapter(key);
+		}
+	}
+
+	/**
+	 * This accesses a cached version of the content outliner.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IContentOutlinePage getContentOutlinePage() {
+		if (contentOutlinePage == null) {
+			// The content outline is just a tree.
+			//
+			class MyContentOutlinePage extends ContentOutlinePage {
+				@Override
+				public void createControl(Composite parent) {
+					super.createControl(parent);
+					contentOutlineViewer = getTreeViewer();
+					contentOutlineViewer.addSelectionChangedListener(this);
+
+					// Set up the tree viewer.
+					//
+					contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+					contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+					contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+					// Make sure our popups work.
+					//
+					createContextMenuFor(contentOutlineViewer);
+
+					if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+					  // Select the root object in the view.
+					  //
+					  contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+					}
+				}
+
+				@Override
+				public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+					super.makeContributions(menuManager, toolBarManager, statusLineManager);
+					contentOutlineStatusLineManager = statusLineManager;
+				}
+
+				@Override
+				public void setActionBars(IActionBars actionBars) {
+					super.setActionBars(actionBars);
+					getActionBarContributor().shareGlobalActions(this, actionBars);
+				}
+			}
+
+			contentOutlinePage = new MyContentOutlinePage();
+
+			// Listen to selection so that we can handle it is a special way.
+			//
+			contentOutlinePage.addSelectionChangedListener
+				(new ISelectionChangedListener() {
+					 // This ensures that we handle selections correctly.
+					 //
+					 public void selectionChanged(SelectionChangedEvent event) {
+						 handleContentOutlineSelection(event.getSelection());
+					 }
+				 });
+		}
+
+		return contentOutlinePage;
+	}
+
+	/**
+	 * This accesses a cached version of the property sheet.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IPropertySheetPage getPropertySheetPage() {
+		if (propertySheetPage == null) {
+			propertySheetPage =
+				new ExtendedPropertySheetPage(editingDomain) {
+					@Override
+					public void setSelectionToViewer(List<?> selection) {
+						TriggerEditor.this.setSelectionToViewer(selection);
+						TriggerEditor.this.setFocus();
+					}
+
+					@Override
+					public void setActionBars(IActionBars actionBars) {
+						super.setActionBars(actionBars);
+						getActionBarContributor().shareGlobalActions(this, actionBars);
+					}
+				};
+			propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+		}
+
+		return propertySheetPage;
+	}
+
+	/**
+	 * This deals with how we want selection in the outliner to affect the other views.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void handleContentOutlineSelection(ISelection selection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+			if (selectedElements.hasNext()) {
+				// Get the first selected element.
+				//
+				Object selectedElement = selectedElements.next();
+
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
+
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
+			}
+		}
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply tests the command stack.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isDirty() {
+		return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+	}
+
+	/**
+	 * This is for implementing {@link IEditorPart} and simply saves the model file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		// Save only resources that have actually changed.
+		//
+		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+		// Do the work within an operation because this is a long running activity that modifies the workbench.
+		//
+		WorkspaceModifyOperation operation =
+			new WorkspaceModifyOperation() {
+				// This is the method that gets invoked when the operation runs.
+				//
+				@Override
+				public void execute(IProgressMonitor monitor) {
+					// Save the resources to the file system.
+					//
+					boolean first = true;
+					for (Resource resource : editingDomain.getResourceSet().getResources()) {
+						if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+							try {
+								long timeStamp = resource.getTimeStamp();
+								resource.save(saveOptions);
+								if (resource.getTimeStamp() != timeStamp) {
+									savedResources.add(resource);
+								}
+							}
+							catch (Exception exception) {
+								resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+							}
+							first = false;
+						}
+					}
+				}
+			};
+
+		updateProblemIndication = false;
+		try {
+			// This runs the options, and shows progress.
+			//
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+			// Refresh the necessary state.
+			//
+			((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		}
+		catch (Exception exception) {
+			// Something went wrong that shouldn't.
+			//
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+		updateProblemIndication = true;
+		updateProblemIndication();
+	}
+
+	/**
+	 * This returns whether something has been persisted to the URI of the specified resource.
+	 * The implementation uses the URI converter from the editor's resource set to try to open an input stream. 
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean isPersisted(Resource resource) {
+		boolean result = false;
+		try {
+			InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+			if (stream != null) {
+				result = true;
+				stream.close();
+			}
+		}
+		catch (IOException e) {
+			// Ignore
+		}
+		return result;
+	}
+
+	/**
+	 * This always returns true because it is not currently supported.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	}
+
+	/**
+	 * This also changes the editor's input.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void doSaveAs() {
+		SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		IPath path = saveAsDialog.getResult();
+		if (path != null) {
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void doSaveAs(URI uri, IEditorInput editorInput) {
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		IProgressMonitor progressMonitor =
+			getActionBars().getStatusLineManager() != null ?
+				getActionBars().getStatusLineManager().getProgressMonitor() :
+				new NullProgressMonitor();
+		doSave(progressMonitor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void gotoMarker(IMarker marker) {
+		try {
+			if (marker.getType().equals(EValidator.MARKER)) {
+				String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+				if (uriAttribute != null) {
+					URI uri = URI.createURI(uriAttribute);
+					EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+					if (eObject != null) {
+					  setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+					}
+				}
+			}
+		}
+		catch (CoreException exception) {
+			CoreEditorPlugin.INSTANCE.log(exception);
+		}
+	}
+
+	/**
+	 * This is called during startup.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) {
+		setSite(site);
+		setInputWithNotify(editorInput);
+		setPartName(editorInput.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setFocus() {
+		getControl(getActivePage()).setFocus();
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+	 * Calling this result will notify the listeners.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(new SelectionChangedEvent(this, selection));
+		}
+		setStatusLineManager(selection);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStatusLineManager(ISelection selection) {
+		IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+			contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+		if (statusLineManager != null) {
+			if (selection instanceof IStructuredSelection) {
+				Collection<?> collection = ((IStructuredSelection)selection).toList();
+				switch (collection.size()) {
+					case 0: {
+						statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
+						break;
+					}
+					case 1: {
+						String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+						statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
+						break;
+					}
+					default: {
+						statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
+						break;
+					}
+				}
+			}
+			else {
+				statusLineManager.setMessage(""); //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * This looks up a string in the plugin's plugin.properties file.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key) {
+		return CoreEditorPlugin.INSTANCE.getString(key);
+	}
+
+	/**
+	 * This looks up a string in plugin.properties, making a substitution.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static String getString(String key, Object s1) {
+		return CoreEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public IActionBars getActionBars() {
+		return getActionBarContributor().getActionBars();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdapterFactory getAdapterFactory() {
+		return adapterFactory;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void dispose() {
+		updateProblemIndication = false;
+
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+		getSite().getPage().removePartListener(partListener);
+
+		adapterFactory.dispose();
+
+		if (getActionBarContributor().getActiveEditor() == this) {
+			getActionBarContributor().setActiveEditor(null);
+		}
+
+		if (propertySheetPage != null) {
+			propertySheetPage.dispose();
+		}
+
+		if (contentOutlinePage != null) {
+			contentOutlinePage.dispose();
+		}
+
+		super.dispose();
+	}
+
+	/**
+	 * Returns whether the outline view should be presented to the user.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean showOutlineView() {
+		return false;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Activator.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Activator.java
new file mode 100644
index 0000000..8f0d733
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Activator.java
@@ -0,0 +1,364 @@
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2006 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.jface.resource.ColorRegistry;
+import org.eclipse.jface.resource.FontRegistry;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.ExperimentFeatureModifierEditCompositeFactory;
+import org.eclipse.stem.ui.adapters.newmodifierpage.GraphNewModifierPageAdapterFactory;
+import org.eclipse.stem.ui.adapters.newmodifierpage.LabelsNewModifierPageAdapterFactory;
+import org.eclipse.stem.ui.adapters.newmodifierpage.SequencerNewModifierPageAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.LabelsPropertyStringProviderAdapterFactory;
+import org.eclipse.stem.ui.perspectives.Simulation;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The symbolic identifier for this plug-in
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.ui"; //$NON-NLS-1$
+
+	// The shared instance.
+	private static Activator plugin;
+
+	// The SWT color registry
+	private static ColorRegistry colorRegistry = null;
+
+	// The SWT font registry
+	private static FontRegistry fontRegistry = null;
+
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		super();
+		plugin = this;
+	}
+
+	/**
+	 * This method is called upon plug-in activation
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		new SequencerNewModifierPageAdapterFactory();
+		new GraphNewModifierPageAdapterFactory();
+		new LabelsNewModifierPageAdapterFactory();
+		new ExperimentFeatureModifierEditCompositeFactory();
+		new LabelsPropertyStringProviderAdapterFactory();
+		
+		//Get the extension color providers and add them to the composed factory
+		IConfigurationElement[] elements = 
+			Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.stem.ui.colorproviders");
+		for (IConfigurationElement element : elements) {
+			if (!element.isValid()) {
+				Activator.logError("Invalid color provider extension", null);
+				continue;
+			}
+			//Get the bundle that extended the extension point
+			Bundle bundle = Platform.getBundle(element.getContributor().getName());
+			String name = element.getAttribute("name");
+			String factory = element.getAttribute("factory");
+			String provider = element.getAttribute("provider");
+			//Use the bundle's class loader to load the classes
+			Class factoryClass = bundle.loadClass(factory);
+			Object factoryInstance = factoryClass.newInstance();
+			Class providerClass = bundle.loadClass(provider);
+			//Register the specific factory in the general factory
+			ColorProviderAdapterFactory.INSTANCE.addAdapterFactory(
+					(AdapterFactory)factoryInstance, providerClass, name);
+		}
+	} // start
+
+	/**
+	 * This method is called when the plug-in is stopped
+	 * 
+	 * @param context
+	 * @throws Exception
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance.
+	 * 
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the color registry
+	 * 
+	 * @return a reference to the color registry
+	 */
+	public ColorRegistry getColorRegistry() {
+		if (colorRegistry == null) {
+			colorRegistry = new ColorRegistry();
+			initializeColorRegistry(colorRegistry);
+		}
+		return colorRegistry;
+	} // getColorRegistry
+
+	/**
+	 * Returns the font registry
+	 * 
+	 * @return a reference to the font registry
+	 */
+	public FontRegistry getFontRegistry() {
+		if (fontRegistry == null) {
+			fontRegistry = new FontRegistry();
+			initializeFontRegistry(fontRegistry);
+		}
+		return fontRegistry;
+	} // getColorRegistry
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
+	 */
+	@Override
+	protected void initializeImageRegistry(ImageRegistry registry) {
+//		final String ICON_PATH_PREFIX = "icons/full/customobj16/"; //$NON-NLS-1$
+		final String ICON_ACTION_PATH_PREFIX = "icons/full/actions16/"; //$NON-NLS-1$
+
+		final String CUSTOM_ICON_PATH_PREFIX2 = "icons/full/customobj16/"; //$NON-NLS-1$C
+		
+		registry.put(ISharedImages.GRAPH_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Graph.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.GRAPH_MODEL_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "GraphModelFile.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.EDGE_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Edge.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DYNAMIC_LABEL_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "DynamicLabel.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STATIC_LABEL_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "StaticLabel.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.NODE_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Node.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.MODEL_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Model.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.MODEL_MODEL_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "Model.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.SCENARIO_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Scenario.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.SCENARIO_MODEL_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "ScenarioModelFile.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.SEQUENCER_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Sequencer.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.EXPERIMENT_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Experiment.gif")); //$NON-NLS-1$
+		
+		registry.put(ISharedImages.TRIGGER_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Trigger.gif")); //$NON-NLS-1$
+		
+		registry.put(ISharedImages.PREDICATE_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Predicate.gif")); //$NON-NLS-1$
+		
+		registry.put(ISharedImages.MODIFIER_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Modifier.gif")); //$NON-NLS-1$
+		
+		registry.put(ISharedImages.DECORATOR_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "Decorator.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_PROJECT_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "stem.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_EXPLORER_PROJECT_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "StemProject.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_EXPLORER_VIEW_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "stemExplorer.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.SIMULATION_CONTROL_VIEW_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "simulationControlView.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.SIMULATION_CONTROL_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "simulationControl.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DELETE_FILE_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "delete.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_GRAPH_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "genericFile.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_MODEL_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "ScenarioModelFile.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEM_SCENARIO_FILE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2
+						+ "ScenarioModelFile.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.RUN_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, ICON_ACTION_PATH_PREFIX + "run.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.PAUSE_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, ICON_ACTION_PATH_PREFIX + "pause.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.RESET_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, ICON_ACTION_PATH_PREFIX + "reset.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STEP_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, ICON_ACTION_PATH_PREFIX + "step.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.STOP_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, ICON_ACTION_PATH_PREFIX + "stop.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DISABLED_RUN_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, ICON_ACTION_PATH_PREFIX
+						+ "disabledRun.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DISABLED_PAUSE_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, ICON_ACTION_PATH_PREFIX
+						+ "disabledPause.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DISABLED_RESET_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, ICON_ACTION_PATH_PREFIX
+						+ "disabledReset.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DISABLED_STEP_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, ICON_ACTION_PATH_PREFIX
+						+ "disabledStep.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.DISABLED_STOP_ICON,
+				imageDescriptorFromPlugin(PLUGIN_ID, ICON_ACTION_PATH_PREFIX
+						+ "disabledStop.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.MAP_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "map.gif")); //$NON-NLS-1$
+
+		registry.put(ISharedImages.RECORDED_SIMULATION_ICON, imageDescriptorFromPlugin(
+				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "RecordedSimulations.gif")); //$NON-NLS-1$
+		
+//		registry.put(ISharedImages.RECORDED_SIMULATION_ICON, imageDescriptorFromPlugin(
+//				PLUGIN_ID, CUSTOM_ICON_PATH_PREFIX2 + "RecordedSimulations.gif")); //$NON-NLS-1$
+	} // initializeImageRegistry
+
+	/**
+	 * Add SWT colors to color registry
+	 */
+	protected void initializeColorRegistry(ColorRegistry colorRegistry) {
+		// Register colors in registry
+		colorRegistry.put(ISharedColors.GREEN, new RGB(55, 255, 50));
+		colorRegistry.put(ISharedColors.YELLOW, new RGB(255, 255, 0));
+		colorRegistry.put(ISharedColors.ORANGE, new RGB(255, 170, 30));
+		colorRegistry.put(ISharedColors.GRAY, new RGB(217, 217, 217));
+		// Add more colors here
+	} // initializeColorRegistry
+
+	/**
+	 * Add SWT fonts to font registry
+	 */
+	protected void initializeFontRegistry(FontRegistry fontRegistry) {
+		int fontHeight = JFaceResources.getDefaultFont().getFontData()[0]
+				.getHeight();
+
+		FontData fontData = new FontData("Courier New", fontHeight, //$NON-NLS-1$
+				SWT.NORMAL);
+		// Register colors in registry
+		fontRegistry.put(ISharedFonts.DEFAULT, new FontData[] { fontData });
+		// Add more colors here
+	} // initializeColorRegistry
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		plugin.getLog().log(
+				new Status(IStatus.INFO, plugin.getBundle().getSymbolicName(),
+						0, message, exception));
+	} // logInformation
+
+	/**
+	 * @param perspectiveId
+	 *            the id of the perspective to switch to
+	 */
+	public static void switchToPerspective(String perspectiveId) {
+		final IWorkbench workbench = PlatformUI.getWorkbench();
+		try {
+			workbench.showPerspective(
+					Simulation.ID_STEM_SIMULATION_PERSPECTIVE, workbench
+							.getActiveWorkbenchWindow());
+		} catch (WorkbenchException e) {
+			Activator.logError("Problem switching to Perspective with ID=\""
+					+ perspectiveId + "\"", e);
+		}
+	} // switchToPerspective
+} // Activator
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedColors.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedColors.java
new file mode 100644
index 0000000..63608b9
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedColors.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains identifiers used to mark SWT colors added to this
+ * plug-in's color registry. These colors are intended to be shared by
+ * referencing the color registry and using the identifiers defined here to
+ * select the appropriate color.
+ */
+public interface ISharedColors {
+
+	/**
+	 * Color green -- used as background when simulation is running
+	 */
+	String GREEN = "green"; //$NON-NLS-1$
+
+	/**
+	 * Color orange -- used as background when simulation is reset
+	 */
+	String ORANGE = "orange"; //$NON-NLS-1$
+
+	/**
+	 * Color yellow -- used as background when simulation is paused
+	 */
+	String YELLOW = "yellow"; //$NON-NLS-1$
+
+	/**
+	 * Color yellow -- used as background for text
+	 */
+	String GRAY = "gray"; //$NON-NLS-1$
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedFonts.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedFonts.java
new file mode 100644
index 0000000..5b24a05
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedFonts.java
@@ -0,0 +1,28 @@
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains identifiers used to mark SWT fonts added to this
+ * plug-in's font registry. These fonts are intended to be shared by referencing
+ * the fonts registry and using the identifiers defined here to select the
+ * appropriate image.
+ */
+
+public interface ISharedFonts {
+
+	/**
+	 * Default font used in simulation control
+	 */
+	String DEFAULT = "default"; //$NON-NLS-1$
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedImages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedImages.java
new file mode 100644
index 0000000..8983905
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/ISharedImages.java
@@ -0,0 +1,239 @@
+// ISharedImages.java
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface contains identifiers used to mark images added to this
+ * plug-in's image registry. This images are intended to be shared by
+ * referencing the registry and using the identifiers defined here to select the
+ * appropriate image.
+ */
+public interface ISharedImages {
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String GRAPH_ICON = "graph.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a file that contains a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String GRAPH_MODEL_FILE_ICON = "graph_model_file.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents an
+	 * {@link org.eclipse.stem.core.graph.Edge} in a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String EDGE_ICON = "edge.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.graph.DynamicLabel} in a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String DYNAMIC_LABEL_ICON = "dynamic_label.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a static
+	 * {@link org.eclipse.stem.core.graph.Label} in a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String STATIC_LABEL_ICON = "static_label.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.graph.Node} in a
+	 * {@link org.eclipse.stem.core.graph.Graph}.
+	 */
+	String NODE_ICON = "node.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.model.Model}.
+	 */
+	String MODEL_ICON = "model.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a file that contains a
+	 * {@link org.eclipse.stem.core.model.Model}.
+	 */
+	String MODEL_MODEL_FILE_ICON = "model_model_file.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.scenario.Scenario}.
+	 */
+	String SCENARIO_ICON = "scenario.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a file that contains a
+	 * {@link org.eclipse.stem.core.scenario.Scenario}.
+	 */
+	String SCENARIO_MODEL_FILE_ICON = "scenario_model_file.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a {@link Sequencer}.
+	 */
+	String SEQUENCER_ICON = "sequencer.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents an
+	 * {@link org.eclipse.stem.core.experiment.Experiment}.
+	 */
+	String EXPERIMENT_ICON = "experiment.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents an
+	 * {@link org.eclipse.stem.core.trigger.Trigger}.
+	 */
+	String TRIGGER_ICON = "trigger.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents an
+	 * {@link org.eclipse.stem.core.predicate.Predicate}.
+	 */
+	String PREDICATE_ICON = "predicate.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents a
+	 * {@link org.eclipse.stem.core.modifier.Modifier}.
+	 */
+	String MODIFIER_ICON = "modifier.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that represents an
+	 * {@link org.eclipse.stem.core.model.Decorator}.
+	 */
+	String DECORATOR_ICON = "decorator.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon used to represent a STEM project.
+	 */
+	String STEM_PROJECT_ICON = "stem_project.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a RUN simulation event
+	 */
+	String RUN_ICON = "run.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a PAUSE simulation event
+	 */
+	String PAUSE_ICON = "pause.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a STEP simulation event
+	 */
+	String STEP_ICON = "step.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a RESET simulation event
+	 */
+	String RESET_ICON = "reset.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a STOP simulation event
+	 */
+	String STOP_ICON = "stop.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a disabled RUN simulation event
+	 */
+	String DISABLED_RUN_ICON = "disabled_run.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a disabled PAUSE simulation event
+	 */
+	String DISABLED_PAUSE_ICON = "disabled_pause.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a disabled STEP simulation event
+	 */
+	String DISABLED_STEP_ICON = "disabled_step.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a disabled RESET simulation event
+	 */
+	String DISABLED_RESET_ICON = "disabled_reset.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a disabled STOP simulation event
+	 */
+	String DISABLED_STOP_ICON = "disabled_stop.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent the STEM Project Explorer View
+	 */
+	String STEM_EXPLORER_VIEW_ICON = "stem_explorer.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a STEM project in the STEM Project
+	 * Explorer
+	 */
+	String STEM_EXPLORER_PROJECT_ICON = "stem_project.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon to represent a delete file/folder operation in
+	 * STEM Project Explorer
+	 */
+	String DELETE_FILE_ICON = "delete.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon that identifies the simulation control view
+	 */
+	String SIMULATION_CONTROL_VIEW_ICON = "simulation_control_view.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with a simulation control
+	 */
+	String SIMULATION_CONTROL_ICON = "simulation_control.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with
+	 * {@link org.eclipse.stem.core.scenario.Scenario} files.
+	 */
+	String STEM_SCENARIO_FILE_ICON = "scenario_file.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with
+	 * {@link org.eclipse.stem.core.graph.Graph} files.
+	 */
+	String STEM_GRAPH_FILE_ICON = "generic_file.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with
+	 * {@link org.eclipse.stem.core.model.Model} files.
+	 */
+	String STEM_MODEL_FILE_ICON = "scenario_File.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with
+	 * {@link org.eclipse.stem.core.model.Model} files.
+	 */
+	String MAP_ICON = "map.image"; //$NON-NLS-1$
+
+	// /**
+	// * This image is the icon associated with files that store recorded {@link
+	// * org.eclipse.stem.jobs.simulation.Simulation}s.
+	// */
+	//	String RECORDED_SIMULATION_FILE_ICON = "recorded_simulation_File.image"; //$NON-NLS-1$
+
+	/**
+	 * This image is the icon associated with recorded
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+	 */
+	String RECORDED_SIMULATION_ICON = "recorded_simulation.image"; //$NON-NLS-1$
+
+} // ISharedImages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Utility.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Utility.java
new file mode 100644
index 0000000..295b831
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/Utility.java
@@ -0,0 +1,296 @@
+// Utility.java
+package org.eclipse.stem.ui;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Label;
+
+/**
+ * This class contains common utility methods used in the STEM UI.
+ */
+public class Utility {
+
+	// private static ResourceSet resourceSet = null;
+
+	/**
+	 * @return a List of the projects in the workspace that have STEM Project
+	 *         "nature"
+	 * 
+	 * @see Constants#ID_STEM_PROJECT_NATURE
+	 */
+	public static List<IProject> getSTEMProjectsFromWorkspace() {
+		return getSTEMProjectsFromWorkspace(ResourcesPlugin.getWorkspace());
+	} // getSTEMProjectsFromWorkspace
+
+	/**
+	 * @param workspace
+	 *            the workspace to search for STEM Projects
+	 * @return a List of the projects in the workspace that have STEM Project
+	 *         "nature"
+	 * 
+	 * @see Constants#ID_STEM_PROJECT_NATURE
+	 */
+	public static List<IProject> getSTEMProjectsFromWorkspace(
+			final IWorkspace workspace) {
+		final List<IProject> retValue = new ArrayList<IProject>();
+		final IProject[] projects = workspace.getRoot().getProjects();
+		for (final IProject project : projects) {
+			// Is it a STEM project?
+			if (isSTEMProject(project)) {
+				// Yes
+				retValue.add(project);
+			}
+		} // for each project
+		return retValue;
+	} // getSTEMProjectsFromWorkspace
+
+	/**
+	 * @param project
+	 *            an Eclipse project
+	 * @return <code>true</code> if the project has STEM project nature
+	 * 
+	 * @see Constants#ID_STEM_PROJECT_NATURE
+	 */
+	public static boolean isSTEMProject(final IProject project) {
+		boolean retValue = false;
+		try {
+			for (final String nature : project.getDescription().getNatureIds()) {
+				// STEM Nature?
+				if (nature.equals(Constants.ID_STEM_PROJECT_NATURE)) {
+					// Yes
+					retValue = true;
+					break;
+				}
+			} // for each nature
+		} catch (final CoreException e) {
+			// Not this project
+			retValue = false;
+		} // for each nature
+		return retValue;
+	} // isSTEMProject
+
+	/**
+	 * @param file
+	 *            a file with an <code>Identifiable</code>
+	 * @return the <code>Identifiable</code> de-serialized from the file, or
+	 *         <code>null</code> if an error occurred.
+	 */
+	public static Identifiable getIdentifiable(final IFile file) {
+		final URI fileURI = URI.createFileURI(file.getLocation().toString());
+		return getIdentifiable(fileURI);
+	} // getIdentifiable
+
+	/**
+	 * @param identifableURI
+	 *            the {@link URI} of file with a serialized
+	 *            <code>Identifiable</code>.
+	 * @return the {@link Identifiable} de-serialized from the file, or
+	 *         <code>null</code> if an error occurred.
+	 */
+	public static Identifiable getIdentifiable(final URI identifableURI) {
+		Identifiable retValue = null;
+
+		try {
+			final ResourceSet resourceSet = new ResourceSetImpl();
+
+			resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
+					.put("*", new XMIResourceFactoryImpl());
+			resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap()
+					.put("platform", new XMIResourceFactoryImpl());
+
+			final Resource resource = resourceSet.getResource(identifableURI,
+					true);
+			retValue = (Identifiable) resource.getContents().get(0);
+		} catch (final Exception e) {
+			Activator.logError("The file \"" + identifableURI.toString()
+					+ "\" was not found or was of the wrong format", e);
+			retValue = null;
+		}
+		return retValue;
+	} // getIdentifiable
+
+	/**
+	 * @param labelURI
+	 *            the {@link URI} of a {@link Label}
+	 * @return the {@link Label} instance, or null if not found
+	 * 
+	 * stem://org.eclipse.stem/label/population/AFG/2/human/2006/AF-BDS-G010001
+	 *        
+	 * 
+	 */
+	public static Label getLabel(final URI labelURI) {
+		Label retValue = null;
+
+		// Is it an area label?
+		if (isAreaLabel(labelURI)) {
+			// Yes
+			final URI areaGraphURI = createAreaGraphURI(labelURI);
+			final Graph areaGraph = (Graph) getIdentifiable(areaGraphURI);
+			retValue = areaGraph.getNodeLabel(labelURI);
+		} // if area
+		// Is it a population label?
+		else if (isPopulationLabel(labelURI)) {
+			final URI populationGraphURI = createPopulationGraphURI(labelURI);
+			final Graph populationGraph = (Graph) getIdentifiable(populationGraphURI);
+			retValue = populationGraph.getNodeLabel(labelURI);
+		} // if population
+
+		return retValue;
+	} // getLabel
+
+	/**
+	 * @param labelURI
+	 * @return <code>true</code> if the {@link URI} is for an area label
+	 */
+	private static boolean isAreaLabel(final URI labelURI) {
+		return extractLabelName(labelURI.toString()).equals("area");
+	}
+
+	/**
+	 * @param labelURI
+	 * @return <code>true</code> if the {@link URI} is for an population label
+	 */
+	private static boolean isPopulationLabel(final URI labelURI) {
+		return extractLabelName(labelURI.toString()).equals("population");
+	}
+
+	/**
+	 * @param labelURI
+	 * @return the {@link URI} of the file that the graph containing the
+	 *         {@link Label} with the labelURI would be serialized in
+	 */
+	private static URI createAreaGraphURI(final URI labelURI) {
+		
+		final String prefix = URI.createPlatformPluginURI(org.eclipse.stem.data.geography.Activator.PLUGIN_ID, false).toString();
+		//final StringBuilder sb = new StringBuilder("platform:/plugin/" + org.eclipse.stem.data.geography.Activator.PLUGIN_ID + "/resources/data");
+		final StringBuilder sb = new StringBuilder(prefix + "/resources/data");
+
+		sb.append("/country/");
+		// Extract the label name. Currently this only works for area
+		final String uriString = labelURI.toString();
+		final String labelName = extractLabelName(uriString);
+		final String isoKey = extractISOKey(uriString, labelName);
+		final String level = extractISOLevel(uriString, isoKey);
+		sb.append(isoKey);
+		sb.append("/");
+		final String fileName = createAreaGraphFileName(isoKey, level, labelName);
+		sb.append(fileName);
+		return URI.createURI(sb.toString());
+	} // createGraphURI
+
+	private static URI createPopulationGraphURI(final URI labelURI) {
+		
+		final String prefix = URI.createPlatformPluginURI(org.eclipse.stem.data.geography.population.human.Activator.PLUGIN_ID, false).toString();
+		//final StringBuilder sb = new StringBuilder("platform:/plugin/" + org.eclipse.stem.data.geography.population.human.Activator.PLUGIN_ID + "/resources/data");
+		final StringBuilder sb = new StringBuilder(prefix + "/resources/data");
+
+		sb.append("/country/");
+		// Extract the label name. Currently this only works for area
+		final String uriString = labelURI.toString();
+		final String labelName = extractLabelName(uriString);
+		final String isoKey = extractISOKey(uriString, labelName);
+		final String level = extractISOLevel(uriString, isoKey);
+		final String populationName = extractPopulationName(uriString, level);
+		final String date = extractPopulationDate(uriString, populationName);
+		sb.append(isoKey);
+		sb.append("/");
+		sb.append(createPopulationGraphFileName(isoKey, level, labelName,
+				populationName, date));
+		return URI.createURI(sb.toString());
+	} // createPopulationGraphURI
+
+	/**
+	 * @param uriString
+	 * @param populationName
+	 * @return
+	 */
+	private static String extractPopulationDate(String uriString,
+			String populationName) {
+		final int index =uriString.indexOf(populationName);
+		final String temp = uriString.substring(index+populationName.length()+1);
+		final int index2 = temp.indexOf("/");
+		return temp.substring(0, index2);
+	} // extractPopulationDate
+
+	private static String createPopulationGraphFileName(final String isoKey,
+			final String level, @SuppressWarnings ("unused") final String labelName,
+			final String populationName, final String date) {
+		final StringBuilder sb = new StringBuilder(isoKey);
+		sb.append("_");
+		sb.append(level);
+		sb.append("_");
+		sb.append(populationName);
+		sb.append("_");
+		sb.append(date);
+		sb.append("_");
+		sb.append("population.graph");
+
+		return sb.toString();
+	} // createPopulationGraphFileName
+
+	private static String extractPopulationName(final String uriString, String level) {
+		final int index = uriString.indexOf(level);
+		final String temp = uriString.substring(index+level.length()+1);
+		final int index2 = temp.indexOf("/");
+		return temp.substring(0,index2);
+	} // extractPopulationName
+
+	private static String extractISOLevel(final String uriString,
+			final String isoKey) {
+		final int index = uriString.indexOf(isoKey) + isoKey.length() + 1;
+		return uriString.substring(index, index + 1);
+	} // extractISOLevel
+
+	private static String createAreaGraphFileName(final String isoKey,
+			final String level, final String labelName) {
+		final StringBuilder sb = new StringBuilder(isoKey);
+		sb.append("_");
+		sb.append(level);
+		sb.append("_");
+		sb.append(labelName);
+		sb.append(".graph");
+		return sb.toString();
+	} // createFileName
+
+	private static String extractISOKey(final String uriString,
+			final String labelName) {
+		final int startIndex = uriString.indexOf(labelName) + 1
+				+ labelName.length();
+		final int endIndex = startIndex + 3;
+
+		return uriString.substring(startIndex, endIndex);
+	} // extractISOKey
+
+	private static String extractLabelName(final String uriString) {
+		final String uriSuffix = uriString.substring(uriString
+				.indexOf(Label.URI_TYPE_LABEL_SEGMENT)
+				+ Label.URI_TYPE_LABEL_SEGMENT.length() + 1);
+		return uriSuffix.substring(0, uriSuffix.indexOf("/"));
+	} // extractLabelName
+
+} // Utility
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractColorProviderAdapterFactory.java
new file mode 100644
index 0000000..daa41d9
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractColorProviderAdapterFactory.java
@@ -0,0 +1,30 @@
+// AbstractColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.stem.core.graph.util.GraphAdapterFactory;
+
+/**
+ * This is an abstract class that ColorProviderAdapterFactory should extend.
+ * It holds the common information for all color providers and has few abstract methods
+ * that the concrete class should override.
+ */
+public abstract class AbstractColorProviderAdapterFactory extends GraphAdapterFactory
+	implements IColorProviderAdapterFactory, ComposeableAdapterFactory {
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	public abstract boolean isFactoryForType(Object type);	
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapter.java
new file mode 100644
index 0000000..ffe49e3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapter.java
@@ -0,0 +1,224 @@
+// AbstractRelativeValueColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.preferences.MapsColorsPreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * This is an abstract class that Relative Value Color Provider Adapter should extend.
+ * It holds the common information for all color providers and has few abstract methods
+ * that the concrete class should override.
+ */
+public abstract class AbstractRelativeValueColorProviderAdapter extends ColorProviderAdapter
+		implements RelativeValueColorProvider {
+	
+	/**
+	 * Holds the {@link Color} for relative value of 1
+	 */
+	private Color max_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values between 0.8 and 1
+	 */
+	private Color range_08_1_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values between 0.6 and 0.8
+	 */
+	private Color range_06_08_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values between 0.4 and 0.6
+	 */
+	private Color range_04_06_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values between 0.2 and 0.4
+	 */
+	private Color range_02_04_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values between 0 and 0.2
+	 */
+	private Color range_0_02_FillColor;
+	/**
+	 * Holds the {@link Color} for relative values of 0
+	 */
+	protected Color zero_FillColor;
+	/**
+	 * Holds the default foreground {@link Color} (the base color for AlphaComposite)
+	 */
+	protected Color foregroundFillColor;	
+	
+	/**
+	 * Holds the default background {@link Color} (the base color for AlphaComposite)
+	 */
+	public Color backgroundFillColor;	
+	/**
+	 * The threshold under which values are considered zero
+	 */
+	protected final float ZERO_RELATIVE_VALUE_THRESHOLD = 0.000000001f;
+	/**
+	 * Reference to the selected {@link Decorator}
+	 */
+	protected Decorator selectedDecorator = null;
+	/**
+	 * Instance of a relative value provider
+	 */
+	protected RelativeValueProviderAdapter rvp = null;
+	/**
+	 * Current device
+	 */
+	protected Device device = null;
+	
+	/**
+	 * Constructor
+	 */
+	public AbstractRelativeValueColorProviderAdapter() {
+		updateColorsFromPreferences();
+	} // AbstractRelativeValueColorProviderAdapter
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.ColorProvider#getColor(Device)
+	 */
+	public Color getColor(Device device) {
+		double relativeValue = getRelativeValue();
+		this.device = device;
+		return getColorForRelativeValue(relativeValue);
+	} // getColor
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.ColorProvider#updateGC(GC)
+	 */
+	public void updateGC(GC gcToUpdate) {
+		this.updateGC(gcToUpdate, 1.0f, false);
+	} // setG2DColor
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.ColorProvider#updateGC(GC, float, boolean)
+	 */
+	public void updateGC(GC gcToUpdate, 
+			@SuppressWarnings("unused")float gainFactor, 
+			@SuppressWarnings("unused")boolean useLogScaling) {
+		//If the concrete color provider uses the gainFactor and/or useLogScaling parameters
+		//then it should override this method with its implementation
+		Color foreground = getColor(gcToUpdate.getDevice());
+		gcToUpdate.setBackground(foreground);
+	} // setG2DColor
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.RelativeValueColorProvider#getRelativeValue()
+	 */
+	abstract public float getRelativeValue();
+	
+	/**
+	 * The method returns the {@link Color} that matches the specified relative value.
+	 * 
+	 * @param relativeValue the relative value
+	 * @return the matching {@link Color}
+	 */
+	protected Color getColorForRelativeValue(final double relativeValue) {
+		Color retValue = device.getSystemColor(SWT.COLOR_BLACK);
+		updateColorsFromPreferences();
+		if (relativeValue == 1) {
+			retValue = max_FillColor;
+		}
+		else if (relativeValue > 0.8) {
+			retValue = range_08_1_FillColor;
+		} 
+		else if (relativeValue > 0.6) {
+			// Yes
+			retValue = range_06_08_FillColor;
+		} // if
+		else if (relativeValue > 0.4) {
+			retValue = range_04_06_FillColor;
+		}
+		else if (relativeValue > 0.2) {
+			retValue = range_02_04_FillColor;
+		}
+		else if (relativeValue > ZERO_RELATIVE_VALUE_THRESHOLD) {
+			retValue = range_0_02_FillColor;
+		}
+		else if (relativeValue <= ZERO_RELATIVE_VALUE_THRESHOLD) {
+			retValue = zero_FillColor;
+		}
+
+		return retValue;
+	} // getColorForRelativeValue
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.ColorProviderAdapter#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == RelativeValueColorProvider.class;
+	} // isAdapterForType
+	
+	/**
+	 * The method will convert the RGB string into {@link Color}
+	 * @param rgbString the RGB string
+	 * @return the matching {@link Color}
+	 */
+	private Color getColorFromString(final String rgbString) {
+		if (rgbString.equals("")) {
+			return device.getSystemColor(SWT.COLOR_BLACK);
+		}
+		RGB rgb = StringConverter.asRGB(rgbString);
+		return new Color(device, rgb.red, rgb.green, rgb.blue);
+	} // getColorFromString
+	
+	/**
+	 * The method will update the colors fields for the value ranges from the preferences page.
+	 */
+	private void updateColorsFromPreferences() {
+		final Preferences prefs = Activator.getDefault().getPluginPreferences();
+		max_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_ID));
+		range_08_1_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_5_ID));
+		range_06_08_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_4_ID));
+		range_04_06_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_3_ID));
+		range_02_04_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_2_ID));
+		range_0_02_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_1_ID));
+		zero_FillColor = getColorFromString(prefs.getString(RelativeValueColorPreferences.FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_ID));
+		foregroundFillColor = getColorFromString(prefs.getString(MapsColorsPreferencePage.FOREGROUND_COLOR_ID));
+		backgroundFillColor = getColorFromString(prefs.getString(MapsColorsPreferencePage.BACKGROUND_COLOR_ID));
+	} // updateColorsFromPreferences
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.ColorProvider#setSelectedDecorator(org.eclipse.stem.core.model.Decorator)
+	 */
+	public void setSelectedDecorator(Decorator selectedDecorator) {
+		this.selectedDecorator = selectedDecorator;
+	} // setSelectedDecorator
+	
+	/**
+	 * Method will set the target object at the instance of {@link RelativeValueProvider}.
+	 * @param target The new target object
+	 */
+	protected void setRVPTarget(Notifier target) {
+		if (rvp == null) {
+			rvp = (RelativeValueProviderAdapter)RelativeValueProviderAdapterFactory.INSTANCE.adapt(target, RelativeValueProvider.class);
+		}
+		else {
+			rvp.setTarget(target);
+		}
+	} // setRVPTarget
+	
+} // AbstractRelativeValueColorProviderAdapter
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapterFactory.java
new file mode 100644
index 0000000..ef1f0a5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AbstractRelativeValueColorProviderAdapterFactory.java
@@ -0,0 +1,139 @@
+// AbstractRelativeValueColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This is an abstract class that Relative Value Color Provider Adapter Factories should extend.
+ * It holds the common information for all color providers and has few abstract methods
+ * that the concrete class should override.
+ */
+public abstract class AbstractRelativeValueColorProviderAdapterFactory 
+	extends AbstractColorProviderAdapterFactory {
+	
+	/**
+	 * This is the properties composite that will be contributed to the view
+	 */
+	protected Composite propertiesComposite;
+	/**
+	 * A list of {@link PropertySelectionListener}s to be notified about
+	 * property selection events
+	 */
+	private final List<PropertySelectionListener> propertySelectionListeners = new CopyOnWriteArrayList<PropertySelectionListener>();
+	/**
+	 * The currently selected {@link ItemPropertyDescriptor}
+	 */
+	protected ItemPropertyDescriptor selectedProperty = null;
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractColorProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == RelativeValueColorProvider.class;
+	} // isFactoryForType
+	
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createGraphAdapter()
+	 */
+	@Override
+	public Adapter createGraphAdapter() {		
+		return createNodeAdapter();
+	} // createGraphAdapter
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#getRootAdapterFactory()
+	 */
+	public ComposeableAdapterFactory getRootAdapterFactory() {
+		// TODO Auto-generated method stub
+		return null;
+	} // getRootAdapterFactory
+
+	/**
+	 * @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#setParentAdapterFactory(org.eclipse.emf.edit.provider.ComposedAdapterFactory)
+	 */
+	public void setParentAdapterFactory(@SuppressWarnings("unused")
+	ComposedAdapterFactory parent) {
+		// TODO Auto-generated method stub
+	} // setParentAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createPropertiesComposite(org.eclipse.swt.widgets.Composite, int, org.eclipse.stem.core.model.Decorator)
+	 */
+	public abstract Composite createPropertiesComposite(final Composite parent, final int style, final Decorator selectedDecorator);
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createColorsLegendComposite(org.eclipse.swt.widgets.Composite, int)
+	 */
+	public abstract Composite createColorsLegendComposite(Composite parent, int style);
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#getPropertiesComposite()
+	 */
+	public Composite getPropertiesComposite() {
+		return propertiesComposite;
+	} // getPropertiesComposite
+	
+	protected String getPreferenceValue(final String prefId) {
+		final Preferences prefs = Activator.getDefault().getPluginPreferences();
+		return prefs.getString(prefId);
+	} // getPreferenceValue
+	
+	/**
+	 * This interface is implemented by classes that wish to be notified
+	 * whenever a property is selected in this widget.
+	 */
+	public interface PropertySelectionListener {
+		/**
+		 * @param selectedProperty
+		 */
+		void propertySelected(ItemPropertyDescriptor selectedProperty);
+	} // PropertySelectionListener
+	
+	/**
+	 * @param listener
+	 */
+	public void addPropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.add(listener);
+	} // addPropertySelectionListener
+
+	/**
+	 * @param listener
+	 */
+	public void removePropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.remove(listener);
+	} // removePropertySelectionListener
+
+	/**
+	 * @param selectedProperty
+	 */
+	public void firePropertySelectionListener(ItemPropertyDescriptor selectedProperty) {
+		for (final PropertySelectionListener listener : propertySelectionListeners) {
+			listener.propertySelected(selectedProperty);
+		} // for each PropertySelectionListener
+	} // firePropertySelectionEvent
+	
+} // AbstractRelativeValueColorProviderAdapterFactory
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProvider.java
new file mode 100644
index 0000000..e618468
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProvider.java
@@ -0,0 +1,22 @@
+// AreaRelativeValueColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface is implemented by classes that will provide an area value for a
+ * specific adapted object.
+ */
+public interface AreaRelativeValueColorProvider extends RelativeValueColorProvider {
+	//Marker interface	
+}// AreaRelativeValueColorProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapter.java
new file mode 100644
index 0000000..3b23664
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapter.java
@@ -0,0 +1,88 @@
+// AreaRelativeValueColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * This class adapts {@link org.eclipse.stem.core.graph.Node} objects to
+ * <code>AreaRelativeValueColorProvider</code> object.
+ */
+public class AreaRelativeValueColorProviderAdapter 
+	extends AbstractRelativeValueColorProviderAdapter {
+	
+	@SuppressWarnings("unused")
+	private static Map<String, Double> areaValueMap = new HashMap<String, Double>();
+	
+	/**
+	 * Constructor
+	 */
+	public AreaRelativeValueColorProviderAdapter() {
+		super();
+	} // AreaRelativeValueColorProviderAdapter
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#getRelativeValue()
+	 */
+	@Override
+	public float getRelativeValue() {
+		
+		//double nodeArea = getArea();
+		
+		Graph graph = selectedDecorator.getGraph();
+		final URI areaLabelURI = STEMURI.createURI(AreaLabel.URI_TYPE_AREA_LABEL_SEGMENT);
+		Map<String, Double> tempAreaValueMap = new HashMap<String, Double>();
+		for (URI labelUri : graph.getNodeLabels().keySet()) {
+			if (labelUri.toString().startsWith(areaLabelURI.toString())) {
+				String indexUri = labelUri.segment(2) + "/" + labelUri.segment(3);
+				if (tempAreaValueMap.containsKey(indexUri)) {
+					Double prevValue = tempAreaValueMap.remove(indexUri);
+					AreaLabel areaLabel = (AreaLabel)graph.getNodeLabel(labelUri);
+					Double newValue = new Double(prevValue.doubleValue() + areaLabel.getCurrentAreaValue().getArea());
+					tempAreaValueMap.put(indexUri, newValue);
+				}
+			}
+		}
+				
+		return 0.7f;
+		
+	} // getRelativeValue
+	
+	@SuppressWarnings("unused")
+	private double getArea() {
+		if (!(getTarget() instanceof Region)) {
+			return -1;
+		}
+		
+		double retVal = -1;
+		Region region = (Region)getTarget();
+		for (NodeLabel nodeLabel : region.getLabels()) {
+			if (nodeLabel instanceof AreaLabel) {
+				AreaLabel label = (AreaLabel)nodeLabel;
+				AreaLabelValue value = (AreaLabelValue)label.getCurrentValue();
+				retVal = value.getArea();
+			}
+		}
+		return retVal;
+	} // getPopulation
+	
+} // AreaRelativeValueColorProviderAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapterFactory.java
new file mode 100644
index 0000000..fcb0dbb
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/AreaRelativeValueColorProviderAdapterFactory.java
@@ -0,0 +1,84 @@
+// AreaRelativeValueColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Layout;
+
+/**
+ * This factory create adapters that adapt
+ * {@link org.eclipse.stem.core.graph.Node}s to
+ * {@link AreaRelativeValueColorProvider}s.
+ */
+public class AreaRelativeValueColorProviderAdapterFactory extends
+		AbstractRelativeValueColorProviderAdapterFactory {
+
+	/**
+	 * Constructor
+	 */
+	public AreaRelativeValueColorProviderAdapterFactory() {
+		super();
+	} // AreaRelativeValueColorProviderAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createNodeAdapter()
+	 */
+	@Override
+	public Adapter createNodeAdapter() {
+		final AreaRelativeValueColorProviderAdapter adapter = new AreaRelativeValueColorProviderAdapter();
+		return adapter;
+	} // createNodeAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == AreaRelativeValueColorProvider.class;
+	} // isFactoryForType
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createPropertiesComposite(org.eclipse.swt.widgets.Composite, int, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public Composite createPropertiesComposite(final Composite parent, @SuppressWarnings("unused") final int style, @SuppressWarnings("unused") final Decorator selectedDecorator)
+	{
+		final Composite composite = new Composite(parent, SWT.NONE);
+		final Layout layout = new RowLayout();
+		composite.setLayout(layout);
+		final Label label = new Label(composite, SWT.NONE);
+		label.setText("This color provider is not implemented yet");
+		return composite;
+	} // createPropertiesComposite
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#createColorsLegendComposite(org.eclipse.swt.widgets.Composite,
+	 *      int)
+	 */
+	@Override
+	public Composite createColorsLegendComposite(final Composite parent,
+			final int style) {
+		final ColorsLegendComposite colorsLegendComposite = new ColorsLegendComposite(
+				parent, style);
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_4_ID,
+				"Area relative value");
+		return colorsLegendComposite;
+	} // createColorsLegendComposite
+
+} // AreaRelativeValueColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProvider.java
new file mode 100644
index 0000000..877b23a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProvider.java
@@ -0,0 +1,53 @@
+// ColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.GC;
+
+/**
+ * The interface will be extended by more specific interfaces that provides colors
+ * methods.
+ */
+public interface ColorProvider {
+	/**
+	 * The method will return a {@link Color} object that matches some adapted object
+	 * @param device A device for created colors
+	 * @return a {@link Color} object
+	 */
+	public Color getColor(Device device);
+	/**
+	 * The method will update the specified {@link GC} object with values
+	 * that matches the adapted object (like fill color).
+	 * 
+	 * @param gcToUpdate {@link GC} object to update
+	 */
+	public void updateGC(GC gcToUpdate);
+	/**
+	 * The method will update the specified {@link GC} object with values
+	 * that matches the adapted object (like fill color).
+	 * 
+	 * @param gcToUpdate {@link GC} object to update
+	 * @param gainFactor Gain factor
+	 * @param useLogScaling Use logarithmic scaling?
+	 */
+	public void updateGC(GC gcToUpdate, float gainFactor, boolean useLogScaling);
+	/**
+	 * The method will set the selected {@link Decorator}.
+	 * @param selectedDecorator The selected decorator
+	 */
+	public void setSelectedDecorator(final Decorator selectedDecorator);
+}
+// ColorProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapter.java
new file mode 100644
index 0000000..65c8022
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapter.java
@@ -0,0 +1,32 @@
+// ColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+
+/**
+ * This is an abstract class that any {@link ColorProvider} adapter should extend.
+ */
+public abstract class ColorProviderAdapter 
+	extends AdapterImpl 
+	implements ColorProvider {
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == ColorProvider.class;
+	} // isAdapterForType
+	
+} // ColorProviderAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapterFactory.java
new file mode 100644
index 0000000..b9f132f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorProviderAdapterFactory.java
@@ -0,0 +1,97 @@
+// ColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ * This is the interface of the adapter factory that will be used for providing
+ * colors. The {@link ColorProviderAdapterFactory} is implemented by the
+ * {@link ColorProviderAdapterFactoryImpl} class and is the parent adapter
+ * factory ({@link ComposedAdapterFactory}) for all the other adapter
+ * factories.
+ * 
+ * Factories will be added to this composed object by using the Eclipse
+ * extension points mechanism for extending plug-ins.
+ */
+public interface ColorProviderAdapterFactory {
+	/**
+	 * This is the singleton instance of the factory
+	 */
+	public ColorProviderAdapterFactoryImpl INSTANCE = new ColorProviderAdapterFactoryImpl();
+	
+	/**
+	 * This class is the implementation of the
+	 * {@link ColorProviderAdapterFactory} interface.
+	 * 
+	 * @see ColorProviderAdapterFactory
+	 */
+	public class ColorProviderAdapterFactoryImpl 
+		extends ComposedAdapterFactory
+		implements ColorProviderAdapterFactory {
+		
+		/**
+		 * List of supported color providers
+		 */
+		protected final List<Class> supportedColorProviders = new ArrayList<Class>();
+		/**
+		 * List of supported color providers names
+		 */
+		protected final List<String> supportedColorProvidersNames = new ArrayList<String>();
+		
+		/**
+		 * Constructor
+		 */
+		protected ColorProviderAdapterFactoryImpl() {
+			//Nothing
+		}
+
+		/**
+		 * Add a {@link ComposeableAdapterFactory} to this composed factory.
+		 * @param adapterFactory The adapter factory to be added
+		 * @param colorProvider The {@link ColorProvider} class 
+		 * @param displayName A display name for the adapter (to be added to the UI)
+		 */
+		public void addAdapterFactory(AdapterFactory adapterFactory, Class colorProvider, String displayName) {
+			supportedColorProviders.add(colorProvider);
+			supportedColorProvidersNames.add(displayName);
+			super.addAdapterFactory(adapterFactory);
+		}
+
+		/**
+		 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(final Object type) {
+			return type == ColorProvider.class;
+		} // isFactoryForType
+
+		/**
+		 * @return the supportedColorProviders
+		 */
+		public List<Class> getSupportedColorProviders() {
+			return supportedColorProviders;
+		}
+
+		/**
+		 * @return the supportedColorProvidersNames
+		 */
+		public List<String> getSupportedColorProvidersNames() {
+			return supportedColorProvidersNames;
+		}
+	} // ColorProviderAdapterFactoryImpl
+} // ColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorsLegendComposite.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorsLegendComposite.java
new file mode 100644
index 0000000..d49f342
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/ColorsLegendComposite.java
@@ -0,0 +1,70 @@
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class is used to display a "legend" that maps colors to values.
+ */
+public class ColorsLegendComposite extends Composite {
+
+	Group legendGroup = new Group(this, SWT.NONE);
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public ColorsLegendComposite(final Composite parent, final int style) {
+		super(parent, style);
+
+		legendGroup.setText("Colors Legend");
+		final GridLayout legendLayout = new GridLayout();
+		legendLayout.numColumns = 4;
+		legendLayout.horizontalSpacing = 10;
+		legendLayout.verticalSpacing = 2;
+		legendLayout.makeColumnsEqualWidth = false;
+		legendLayout.marginBottom = 15;
+		legendGroup.setLayout(legendLayout);
+	}
+
+	/**
+	 * @param colorID
+	 * @param text
+	 */
+	public void addColorEntry(final String colorID, final String text) {
+		final Color color = getPreferencesColor(colorID);
+		final Label colorLabel = new Label(legendGroup, SWT.BORDER);
+		colorLabel.setBackground(color);
+		colorLabel.setText("            ");
+		final Label colorText = new Label(legendGroup, SWT.NONE);
+		colorText.setText(text);
+		legendGroup.pack();
+		this.layout();
+	}
+
+	private Color getPreferencesColor(final String colorId) {
+		final Preferences prefs = Activator.getDefault().getPluginPreferences();
+		final String color = prefs.getString(colorId);
+		final RGB rgb = StringConverter.asRGB(color);
+		return new Color(getDisplay(), rgb.red, rgb.green, rgb.blue);
+	}
+} // ColorsLegendComposite
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderAdapterFactory.java
new file mode 100644
index 0000000..859de22
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderAdapterFactory.java
@@ -0,0 +1,55 @@
+// IColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Interface to be used my any ColorProviderAdapterFactory class.
+ * Provides methods that are common to all types of ColorProviderAdapterFactory.
+ */
+public interface IColorProviderAdapterFactory {	
+	/**
+	 * The method will return a boolean value about whether the factory supports the specified type
+	 * @param type The color provider type to check
+	 * @return true if the factory supports it
+	 */
+	public boolean isFactoryForType(Object type);
+	
+	/**
+	 * The method will return a {@link Composite} widget that will be added to the GUI and holds
+	 * the information that can be configured for the specific factory.
+	 * @param parent The parent of the {@link Composite}
+	 * @param style the style for the generated {@link Composite}
+	 * @param selectedDecorator the selected {@link Decorator}
+	 * @return the generated {@link Composite}
+	 */
+	public Composite createPropertiesComposite(final Composite parent, final int style, final Decorator selectedDecorator);
+	
+	/**
+	 * The method will return a {@link Composite} widget that will be added to the GUI and holds
+	 * the a legend of the colors that this color provider provides.
+	 * @param parent The parent of the {@link Composite}
+	 * @param style the style for the generated {@link Composite}
+	 * @return the generated {@link Composite}
+	 */
+	public Composite createColorsLegendComposite(final Composite parent, final int style);
+	
+	/**
+	 * The method will return the {@link Composite} widget that will be added to the GUI and holds
+	 * the information that can be configured for the specific factory.
+	 * @return the {@link Composite}
+	 */
+	public Composite getPropertiesComposite();
+} // IColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderChangedListener.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderChangedListener.java
new file mode 100644
index 0000000..3051016
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IColorProviderChangedListener.java
@@ -0,0 +1,29 @@
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * The interface is for listeners that wish to get notified about events of
+ * change in the selected color provider.
+ * 
+ * @author Yossi Mesika (IBM)
+ */
+public interface IColorProviderChangedListener {
+
+	/**
+	 * Listeners will implement this method and it will be called upon
+	 * changes of the selected color provider.
+	 * 
+	 * @param selectedColorProvider The recently selected color provider
+	 */
+	public void colorProviderChanged(Class selectedColorProvider);
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IPreferencesContributer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IPreferencesContributer.java
new file mode 100644
index 0000000..951bbea
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/IPreferencesContributer.java
@@ -0,0 +1,47 @@
+// IPreferencesContributer.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.stem.ui.preferences.MapsColorsPreferencePage;
+
+/**
+ * This interface should be implemented by those entities that wish to contribute
+ * preferences fields to the Maps Colors preferences page.
+ */
+public interface IPreferencesContributer {
+
+	/**
+	 * Sets the {@link MapsColorsPreferencePage}
+	 * @param preferencePage the {@link MapsColorsPreferencePage}
+	 */
+	public void setPreferencePage(MapsColorsPreferencePage preferencePage);
+	/**
+	 * Creates the preferences fields and add them to the preferences page
+	 */
+	public void createFieldEditors();
+	/**
+	 * Initialize the preferences fields
+	 */
+	public void initialize();
+	/**
+	 * Being called whenever a property in the preferences page has been changed.
+	 * @param event Event object about the changed property
+	 */
+	public void propertyChange(PropertyChangeEvent event);
+	/**
+	 * Loads the preferences fields with default values
+	 */
+	public void performDefaults();
+	
+} // IPreferencesContributer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProvider.java
new file mode 100644
index 0000000..d885dbc
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProvider.java
@@ -0,0 +1,22 @@
+// PopulationRelativeValueColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * This interface is implemented by classes that will provide population value for a
+ * specific adapted object.
+ */
+public interface PopulationRelativeValueColorProvider extends RelativeValueColorProvider {
+	//Marker interface
+}// PopulationRelativeValueColorProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapter.java
new file mode 100644
index 0000000..d8fdbe5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapter.java
@@ -0,0 +1,92 @@
+// PopulationRelativeValueColorProviderAdapter.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.AreaLabelValue;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabelValue;
+import org.eclipse.stem.definitions.nodes.Region;
+
+/**
+ * This class adapts {@link org.eclipse.stem.core.graph.Node} objects to
+ * {@link PopulationRelativeValueColorProvider} object.
+ */
+public class PopulationRelativeValueColorProviderAdapter extends
+		AbstractRelativeValueColorProviderAdapter {
+
+	/**
+	 * Constructor
+	 */
+	public PopulationRelativeValueColorProviderAdapter() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapter#getRelativeValue()
+	 */
+	@Override
+	public float getRelativeValue() {
+		getPopulation();
+		return 0.5f;
+		
+		// // Is there a decorator and a currently selected property?
+		// if (displayData != null) {
+		// // Yes
+		// // Get the display data for this decorator
+		//			
+		//			
+		// Node node = (Node)getTarget();
+		//			
+		// RelativeValueProviderAdapter rvp =
+		// displayData.getRelativeValueProviderAdapter();
+		// for (final DecoratorDisplayData.LabelData labelData :
+		// displayData.getLabelData()) {
+		// rvp.setTarget(labelData.getLabel());
+		// if (labelData.getLabel().getNode() == node) {
+		// return (float)rvp.getRelativeValue(decorationHelper.getSelectedProperty());
+		// }
+		// } // for each LabelData
+		// } // if there a decorator and a currently selected property
+
+		// return 0; // We shouldn't reach this point
+	} // getRelativeValue
+	
+	/**
+	 * @return
+	 */
+	private double getPopulation() {
+		if (!(getTarget() instanceof Region)) {
+			return -1;
+		}
+		
+		double retVal = -1;
+		Region region = (Region)getTarget();
+		for (NodeLabel nodeLabel : region.getLabels()) {
+			if (nodeLabel instanceof PopulationLabel) {
+				PopulationLabel label = (PopulationLabel)nodeLabel;
+				//if (label.getPopulationIdentifier().equals(PopulationLabel.HUMAN))
+				PopulationLabelValue value = (PopulationLabelValue)label.getCurrentValue();
+				retVal = value.getCount();
+			}
+			if (nodeLabel instanceof AreaLabel) {
+				AreaLabel label = (AreaLabel)nodeLabel;
+				AreaLabelValue value = (AreaLabelValue)label.getCurrentValue();
+				retVal = value.getArea();
+			}
+		}
+		return retVal;
+	} // getPopulation
+
+} // PopulationRelativeValueColorProviderAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapterFactory.java
new file mode 100644
index 0000000..14ee46d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/PopulationRelativeValueColorProviderAdapterFactory.java
@@ -0,0 +1,84 @@
+// PopulationRelativeValueColorProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Layout;
+
+/**
+ * This factory create adapters that adapt
+ * {@link org.eclipse.stem.core.graph.Node}s to
+ * {@link PopulationRelativeValueColorProvider}s.
+ */
+public class PopulationRelativeValueColorProviderAdapterFactory extends
+		AbstractRelativeValueColorProviderAdapterFactory {
+
+	/**
+	 * Constructor
+	 */
+	public PopulationRelativeValueColorProviderAdapterFactory() {
+		super();
+	} // PopulationRelativeValueColorProviderAdapterFactory
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createNodeAdapter()
+	 */
+	@Override
+	public Adapter createNodeAdapter() {
+		final PopulationRelativeValueColorProviderAdapter adapter = new PopulationRelativeValueColorProviderAdapter();
+		return adapter;
+	} // createNodeAdapter
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == PopulationRelativeValueColorProvider.class;
+	} // isFactoryForType
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory#createPropertiesComposite(org.eclipse.swt.widgets.Composite, int, org.eclipse.stem.core.model.Decorator)
+	 */
+	@Override
+	public Composite createPropertiesComposite(final Composite parent, @SuppressWarnings("unused") final int style, @SuppressWarnings("unused") final Decorator selectedDecorator)
+	{
+		final Composite composite = new Composite(parent, SWT.NONE);
+		final Layout layout = new RowLayout();
+		composite.setLayout(layout);
+		final Label label = new Label(composite, SWT.NONE);
+		label.setText("This color provider is not implemented yet");
+		return composite;
+	} // createPropertiesComposite
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.AbstractRelativeValueColorProviderAdapterFactory#createColorsLegendComposite(org.eclipse.swt.widgets.Composite,
+	 *      int)
+	 */
+	@Override
+	public Composite createColorsLegendComposite(final Composite parent,
+			final int style) {
+		final ColorsLegendComposite colorsLegendComposite = new ColorsLegendComposite(
+				parent, style);
+		colorsLegendComposite.addColorEntry(
+				RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_3_ID,
+				"Population relative value");
+		return colorsLegendComposite;
+	} // createColorsLegendComposite
+
+} // PopulationRelativeValueColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorPreferences.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorPreferences.java
new file mode 100644
index 0000000..6e3923c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorPreferences.java
@@ -0,0 +1,249 @@
+// RelativeValueColorPreferences.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.stem.ui.preferences.MapsColorsPreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Group;
+
+/**
+ * This class holds the preferences contribution to the main preferences page for all relative
+ * value color providers.
+ */
+public class RelativeValueColorPreferences 
+	implements IPreferencesContributer {
+	
+	/**
+	 * The {@link MapsColorsPreferencePage} the this preferences have been added to
+	 */
+	protected MapsColorsPreferencePage preferencesPage;
+	
+	/**
+	 * The preferences field editor for foreground color of zero relative value
+	 */
+	public static final String FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorzero";
+
+	/**
+	 * The preferences field editor for foreground color of range 1
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_1_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange1";
+
+	/**
+	 * The preferences field editor for foreground color of range 2
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_2_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange2";
+
+	/**
+	 * The preferences field editor for foreground color of range 3
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_3_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange3";
+
+	/**
+	 * The preferences field editor for foreground color of range 4
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_4_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange4";
+	/**
+	 * The preferences field editor for foreground color of range 5
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_5_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange5";
+	/**
+	 * The preferences field editor for foreground color of range 6
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_6_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange6";
+	/**
+	 * The preferences field editor for foreground color of range 7
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_7_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorrange7";
+	
+	/**
+	 * The preferences field editor for foreground color of maximum relative value
+	 */
+	public static final String FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolormaximum";
+
+	/**
+	 * The preferences field editor for alpha composite
+	 */
+	public static final String USE_ALPHA_COMPOSITE_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.usealphacomposite";
+
+	/**
+	 * The default color for preferences field editor for zero relative value (0.0)
+	 */
+	public static final String FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_DEFAULT_RGB_STRING = "0,0,0"; 			//Black
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 1
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_1_DEFAULT_RGB_STRING = "165,42,42";					//Brown
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 2
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_2_DEFAULT_RGB_STRING = "255,0,0"; 					//Red
+
+	/**	
+	 * The default color for preferences field editor for foreground color of range 3
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_3_DEFAULT_RGB_STRING = "255,165,0"; 					//Orange
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 4
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_4_DEFAULT_RGB_STRING = "0,255,0"; 					//Green
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 5
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_5_DEFAULT_RGB_STRING = "0,0,255";						//Blue
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 5
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_6_DEFAULT_RGB_STRING = "0,255,255";					//Cyan
+
+	/**
+	 * The default color for preferences field editor for foreground color of range 5
+	 */
+	public static final String FOREGROUND_COLOR_RANGE_7_DEFAULT_RGB_STRING = "255,0,255";					//Magenta
+	
+	/**
+	 * The default color for preferences field editor for maximum relative value (1.0)
+	 */
+	public static final String FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_DEFAULT_RGB_STRING = "255,255,255";	//White
+
+	/**
+	 * The group that groups field editors from this preferences contributer
+	 */
+	private Group relativeValuesPrefGroup;	
+
+	/**
+	 * The alpha composite boolean field editor
+	 */
+	 static BooleanFieldEditor useAlphaCompositeBooleanFieldEditor;
+
+	 /**
+	 * The color field editor for zero relative value
+	 */
+	 static ColorFieldEditor zeroColorFieldEditor;
+
+	 /**
+	 * The color field editor for range 1
+	 */
+	 static ColorFieldEditor range1ColorFieldEditor;
+
+	 /**
+	 * The color field editor for range 2
+	 */
+	 static ColorFieldEditor range2ColorFieldEditor;
+
+	 /**
+	 * The color field editor for range 3
+	 */
+	 static ColorFieldEditor range3ColorFieldEditor;
+
+	 /**
+	 * The color field editor for range 4
+	 */
+	 static ColorFieldEditor range4ColorFieldEditor;
+
+	 /**
+	 * The color field editor for range 5
+	 */
+	 static ColorFieldEditor range5ColorFieldEditor;
+
+	 /**
+	 * The color field editor for maximum relative value
+	 */
+	 static ColorFieldEditor maxColorFieldEditor;
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IPreferencesContributer#createFieldEditors()
+	 */
+	public void createFieldEditors() {
+		relativeValuesPrefGroup = new Group(preferencesPage.getFieldEditorParent(), SWT.SHADOW_ETCHED_IN);
+		relativeValuesPrefGroup.setText("Relative Values");
+		useAlphaCompositeBooleanFieldEditor = new BooleanFieldEditor(USE_ALPHA_COMPOSITE_ID, "Use 'Alpha Composite' for relative colors", relativeValuesPrefGroup);
+		zeroColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_ID, "Color for zero relative value (0)", relativeValuesPrefGroup);
+		range1ColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_RANGE_1_ID, "Color for relative values (0 - 0.2)", relativeValuesPrefGroup);
+		range2ColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_RANGE_2_ID, "Color for relative values (0.2 - 0.4)", relativeValuesPrefGroup);
+		range3ColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_RANGE_3_ID, "Color for relative values (0.4 - 0.6)", relativeValuesPrefGroup);
+		range4ColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_RANGE_4_ID, "Color for relative values (0.6 - 0.8)", relativeValuesPrefGroup);
+		range5ColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_RANGE_5_ID, "Color for relative values (0.8 - 1)", relativeValuesPrefGroup);
+		maxColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_ID, "Color for maximum relative value (1.0)", relativeValuesPrefGroup);
+
+		preferencesPage.addField(useAlphaCompositeBooleanFieldEditor);
+		preferencesPage.addField(zeroColorFieldEditor);
+		preferencesPage.addField(range1ColorFieldEditor);
+		preferencesPage.addField(range2ColorFieldEditor);
+		preferencesPage.addField(range3ColorFieldEditor);
+		preferencesPage.addField(range4ColorFieldEditor);
+		preferencesPage.addField(range5ColorFieldEditor);
+		preferencesPage.addField(maxColorFieldEditor);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IPreferencesContributer#initialize()
+	 */
+	public void initialize() {
+		boolean rangesEnabled = !useAlphaCompositeBooleanFieldEditor.getBooleanValue();
+		toggleEnabledRangeColorFileds(rangesEnabled);
+	} // initialize
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IPreferencesContributer#performDefaults()
+	 */
+	public void performDefaults() {
+		zeroColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_DEFAULT_RGB_STRING));
+		range1ColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_RANGE_1_DEFAULT_RGB_STRING));
+		range2ColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_RANGE_2_DEFAULT_RGB_STRING));
+		range3ColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_RANGE_3_DEFAULT_RGB_STRING));
+		range4ColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_RANGE_4_DEFAULT_RGB_STRING));
+		range5ColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_RANGE_5_DEFAULT_RGB_STRING));
+		maxColorFieldEditor.getColorSelector().setColorValue(StringConverter.asRGB(FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_DEFAULT_RGB_STRING));
+	} // performDefaults
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IPreferencesContributer#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent event) {
+		if (event.getSource() == useAlphaCompositeBooleanFieldEditor) {
+			boolean rangesEnabled = !useAlphaCompositeBooleanFieldEditor.getBooleanValue();
+			toggleEnabledRangeColorFileds(rangesEnabled);
+		}
+	} // propertyChange
+	
+	/**
+	 * Toggles between enabled and disabled mode of the range color field editors.
+	 * @param isEnabled to enable or disable the fields
+	 */
+	private void toggleEnabledRangeColorFileds(boolean isEnabled) {
+		zeroColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		range1ColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		range2ColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		range3ColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		range4ColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		range5ColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+		maxColorFieldEditor.setEnabled(isEnabled, relativeValuesPrefGroup);
+	} // toggleEnabledRangeColorFileds
+	
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IPreferencesContributer#setPreferencePage(org.eclipse.stem.ui.preferences.MapsColorsPreferencePage)
+	 */
+	public void setPreferencePage(MapsColorsPreferencePage preferencePage) {
+		this.preferencesPage = preferencePage;
+	} // setPreferencePage
+
+} // RelativeValueColorPreferences
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProvider.java
new file mode 100644
index 0000000..caa6e19
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProvider.java
@@ -0,0 +1,28 @@
+// RelativeValueColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This interface is implemented by classes that will provide an relative value for a
+ * specific adapted object.
+ */
+public interface RelativeValueColorProvider extends ColorProvider {
+
+	/**
+	 * The relative value for the adapted object.
+	 * @return the relative value
+	 */
+	public float getRelativeValue();
+	
+}// RelativeValueColorProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProviderAdapterFactory.java
new file mode 100644
index 0000000..bed6d31
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/RelativeValueColorProviderAdapterFactory.java
@@ -0,0 +1,72 @@
+// RelativeValueProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ * This interface is implemented by classes that create adapters that adapt
+ * {@link org.eclipse.emf.ecore.EObject}s to {@link RelativeValueColorProvider}
+ * s.
+ */
+public interface RelativeValueColorProviderAdapterFactory extends
+		ComposeableAdapterFactory {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link RelativeValueColorProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements
+	 * {@link RelativeValueColorProviderAdapterFactory} needs to add itself to this
+	 * instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a
+	 * {@link RelativeValueColorProviderAdapterFactory} for it so that the classes in
+	 * that model can be adapted, you need to hook that factory into this one so
+	 * that later when an attempt is made to adapt a class from that model is
+	 * made the associated factory will be found. You can do that by adding the
+	 * line: <code>
+	 * RelativeValueColorProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the <code>start</code> method of
+	 * the <code>Activator</code> of the plug-in that defines the factory.
+	 */
+	RelativeValueColorProviderAdapterFactoryImpl INSTANCE = new RelativeValueColorProviderAdapterFactoryImpl();
+
+	/**
+	 * This class is the implementation of the factory that creates
+	 * {@link RelativeValueColorProvider}'s
+	 */
+	public static class RelativeValueColorProviderAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			RelativeValueColorProviderAdapterFactory {
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == RelativeValueColorProvider.class;
+		} // isFactoryForType
+	} // RelativeValueColorProviderAdapterFactoryImpl
+
+} // RelativeValueColorProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/StandardColorProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/StandardColorProvider.java
new file mode 100644
index 0000000..4e80605
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/color/StandardColorProvider.java
@@ -0,0 +1,130 @@
+// StandardColorProvider.java
+package org.eclipse.stem.ui.adapters.color;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.preferences.MapsColorsPreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * This class provides standard colors for rendered maps.
+ * The colors are based on the colors from the preferences page. This class is being used because
+ * taking the values directly from the preferences is time consuming and this is being done many
+ * times and the cumulative time may be large.
+ */
+public class StandardColorProvider 
+	implements IPropertyChangeListener {
+	
+	/**
+	 * A map for holding the values of color IDs
+	 */
+	private Map<String, Color> colorIdToColor = new HashMap<String, Color>();
+	
+	private Device device = null;
+	
+	/**
+	 * The constructor will update the current colors from the preferences and register
+	 * this object as a listener to preferences changes.
+	 * @param device A {@link Device} that will be used when creating {@link Color} objects.
+	 */
+	public StandardColorProvider(Device device) {
+		this.device = device;
+		final Preferences prefs = Activator.getDefault().getPluginPreferences();
+		prefs.addPropertyChangeListener(this);
+		updateColorsFromPreferences();
+	} // StandardColorProvider
+	
+	/**
+	 * The method will return the background {@link Color}.
+	 * @return the background {@link Color}
+	 */
+	public Color getBackgroundColor() {
+		return colorIdToColor.get(MapsColorsPreferencePage.BACKGROUND_COLOR_ID);
+	} // getBackgroundColor
+
+	/**
+	 * The method will return the borders {@link Color}.
+	 * @return the borders {@link Color}
+	 */
+	public Color getBordersColor() {
+		return colorIdToColor.get(MapsColorsPreferencePage.BORDERS_COLOR_ID);
+	} // getBordersColor
+	
+	/**
+	 * The method will return the edges {@link Color}.
+	 * @return the edges {@link Color}
+	 */
+	public Color getEdgesColor() {
+		return colorIdToColor.get(MapsColorsPreferencePage.EDGES_COLOR_ID);
+	} // getEdgesColor
+
+	/**
+	 * The method will return the foreground {@link Color}.
+	 * @return the foreground {@link Color}
+	 */
+	public Color getForegroundColor() {
+		return colorIdToColor.get(MapsColorsPreferencePage.FOREGROUND_COLOR_ID);
+	} // getForegroundColor
+	
+	/**
+	 * The method is used to convert RGB as string to {@link Color}. 
+	 * @param rgbString the RGB string
+	 * @return the matching {@link Color}
+	 */
+	public Color getColorFromString(final String rgbString) {
+		if (rgbString.equals("")) {
+			return device.getSystemColor(SWT.COLOR_BLACK);
+		}
+		RGB rgb = StringConverter.asRGB(rgbString);
+		//return new Color(rgb.red, rgb.green, rgb.blue);
+		return new Color(device, rgb.red, rgb.green, rgb.blue);
+	} // getColorFromString
+	
+	/**
+	 * The method will update the colors from the preferences page.
+	 */
+	private void updateColorsFromPreferences() {
+		final Preferences prefs = Activator.getDefault().getPluginPreferences();
+		String colorId = MapsColorsPreferencePage.FOREGROUND_COLOR_ID;
+		colorIdToColor.put(colorId, getColorFromString(prefs.getString(colorId)));
+		colorId = MapsColorsPreferencePage.BACKGROUND_COLOR_ID;
+		colorIdToColor.put(colorId, getColorFromString(prefs.getString(colorId)));
+		colorId = MapsColorsPreferencePage.BORDERS_COLOR_ID;
+		colorIdToColor.put(colorId, getColorFromString(prefs.getString(colorId)));
+		colorId = MapsColorsPreferencePage.EDGES_COLOR_ID;
+		colorIdToColor.put(colorId, getColorFromString(prefs.getString(colorId)));
+	} // updateColorsFromPreferences
+
+	/**
+	 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
+	 */
+	public void propertyChange(PropertyChangeEvent event) {
+		String colorId = event.getProperty();
+		if (!colorIdToColor.containsKey(colorId)) {
+			return;
+		}
+		Color color = getColorFromString((String)event.getNewValue());
+		colorIdToColor.put(colorId, color);
+	} // propertyChange
+	
+} // StandardColorProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/executable/IdentifiableDelegateExecutableAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/executable/IdentifiableDelegateExecutableAdapterFactory.java
new file mode 100644
index 0000000..1ce589f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/executable/IdentifiableDelegateExecutableAdapterFactory.java
@@ -0,0 +1,46 @@
+// IdentifiableDelegateExecutableAdapterFactory.java
+package org.eclipse.stem.ui.adapters.executable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.stem.jobs.adapters.executable.ExecutableAdapterFactory;
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+
+/**
+ * This class is an {@link ExecutableAdapterFactory} that adapts {@link
+ * IdentifiableDelegate}s to {@link IExecutable}s.
+ */
+public class IdentifiableDelegateExecutableAdapterFactory extends
+		ExecutableAdapterFactory {
+
+	/**
+	 * @see
+	 * 	org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 * 	java.lang.Class)
+	 */
+	public Object getAdapter(final Object adaptableObject,
+			final Class adapterType) {
+		IExecutable retValue = null;
+		// It it what we're looking for?
+		if (adaptableObject instanceof IdentifiableDelegate
+				&& adapterType.equals(IExecutable.class)) {
+			// Yes
+			retValue = (IExecutable) Platform.getAdapterManager().getAdapter(
+					((IdentifiableDelegate) adaptableObject).getIdentifiable(),
+					IExecutable.class);
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // IdentifiableDelegateExecutableAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifier/EStructuralFeatureFeatureModifierAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifier/EStructuralFeatureFeatureModifierAdapterFactory.java
new file mode 100644
index 0000000..167995d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifier/EStructuralFeatureFeatureModifierAdapterFactory.java
@@ -0,0 +1,274 @@
+// EStructuralFeatureFeatureModifierAdapterFactory.java
+package org.eclipse.stem.ui.adapters.featuremodifier;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.NOPModifier;
+import org.eclipse.stem.core.modifier.RangeModifier;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+import org.eclipse.stem.core.modifier.SingleValueModifier;
+import org.eclipse.stem.data.geography.Activator;
+
+/**
+ * This interface defines an adapter factory that adapts
+ * {@link EStructuralFeature}s to {@link FeatureModifier}s.
+ */
+public interface EStructuralFeatureFeatureModifierAdapterFactory {
+
+	/**
+	 * Singleton instance of the factory.
+	 */
+	IdentifiableFeatureModifierAdapterFactoryImpl INSTANCE = new IdentifiableFeatureModifierAdapterFactoryImpl();
+
+	/**
+	 * This class is an implementation of
+	 * {@link EStructuralFeatureFeatureModifierAdapterFactory} that adapts
+	 * {@link EStructuralFeature}s of
+	 * {@link org.eclipse.stem.core.common.Identifiable}s to
+	 * {@link FeatureModifier}s.
+	 * <p>
+	 * This implementation isn't quite complete as it doesn't allow the factory
+	 * to be extended by adding another implementations of
+	 * {@link EStructuralFeatureFeatureModifierAdapterFactory}. Doing so would
+	 * allow different types provided by other plugins to be adapted.
+	 */
+	public class IdentifiableFeatureModifierAdapterFactoryImpl implements
+			EStructuralFeatureFeatureModifierAdapterFactory {
+
+		/**
+		 * @param obj
+		 *            the {@link EStructuralFeature} to be adapted
+		 * @param target
+		 *            the class to adapt to
+		 * @return a {@link FeatureModifier} for the obj, or <code>null</code>
+		 *         if that's not possible.
+		 */
+		public FeatureModifier adapt(final Object obj, final Object target) {
+			FeatureModifier retValue = null;
+			if (obj instanceof EStructuralFeature) {
+				// Yes
+				final EStructuralFeature feature = (EStructuralFeature) obj;
+				if (target == NOPModifier.class) {
+					// Yes
+					// Integer NOP?
+					if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createIntegerNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if integer NOP
+					// Long NOP?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getELong()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createLongNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if Long NOP
+					// Double NOP?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEDouble()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createDoubleNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if double NOP
+					// STEMTime NOP?
+					else if (feature.getEType() == ModelPackage.eINSTANCE
+							.getSTEMTime()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createSTEMTimeNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if STEMTime NOP
+					// String NOP?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEString()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createStringNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if String NOP
+					else {
+						// No
+						// Not implemented
+//						Activator.logError("FeatureModifierAdapter for type \""
+//								+ feature.getEType().getName()
+//								+ "\" is not implemented.", null);
+						retValue = ModifierFactory.eINSTANCE
+								.createNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					} // else
+				} // if NOPModifier
+				else if (target == SingleValueModifier.class) {
+					// Yes
+					// Integer range?
+					if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createIntegerModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if integer range
+					// Long range?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getELong()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createLongModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if Long range
+					// Double range?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEDouble()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createDoubleModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if double range
+					// STEMTime range?
+					else if (feature.getEType() == ModelPackage.eINSTANCE
+							.getSTEMTime()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createSTEMTimeModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if STEMTime range
+					else {
+						// No
+						// Not implemented
+						Activator.logError("FeatureModifierAdapter for type \""
+								+ feature.getEType().getName()
+								+ "\" is not implemented.", null);
+						retValue = ModifierFactory.eINSTANCE
+								.createNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					}
+				} // if Range Modifier
+				else if (target == RangeModifier.class) {
+					// Yes
+					// Integer range?
+					if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createIntegerRangeModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if integer range
+					// Long range?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getELong()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createLongRangeModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if Long range
+					// Double range?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEDouble()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createDoubleRangeModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if double range
+					// STEMTime range?
+					else if (feature.getEType() == ModelPackage.eINSTANCE
+							.getSTEMTime()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createSTEMTimeRangeModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if STEMTime range
+					else {
+						// No
+						// Not implemented
+						Activator.logError("FeatureModifierAdapter for type \""
+								+ feature.getEType().getName()
+								+ "\" is not implemented.", null);
+						retValue = ModifierFactory.eINSTANCE
+								.createNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					}
+				} // if Range Modifier
+				// Sequence?
+				else if (target == SequenceModifier.class) {
+					// Yes
+					// Integer Sequence?
+					if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createIntegerSequenceModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if integer Sequence
+					// Long Sequence?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getELong()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createLongSequenceModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if Long Sequence
+					// Double Sequence?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEDouble()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createDoubleSequenceModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if double Sequence
+					// STEMTime Sequence?
+					else if (feature.getEType() == ModelPackage.eINSTANCE
+							.getSTEMTime()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createSTEMTimeSequenceModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if STEMTime Sequence
+					// String Sequence?
+					else if (feature.getEType() == EcorePackage.eINSTANCE
+							.getEString()) {
+						// Yes
+						retValue = ModifierFactory.eINSTANCE
+								.createStringSequenceModifier();
+						retValue.setEStructuralFeature(feature);
+					} // if String Sequence
+					else {
+						// No
+						// Not implemented
+						Activator.logError("FeatureModifierAdapter for type \""
+								+ feature.getEType().getName()
+								+ "\" is not implemented.", null);
+						retValue = ModifierFactory.eINSTANCE
+								.createNOPModifier();
+						retValue.setEStructuralFeature(feature);
+					}
+				} // if Sequence Modifier
+				else {
+					// No
+					// Not implemented
+					Activator.logError("FeatureModifierAdapter for type \""
+							+ feature.getEType().getName()
+							+ "\" is not implemented.", null);
+					retValue = ModifierFactory.eINSTANCE
+							.createNOPModifier();
+					retValue.setEStructuralFeature(feature);
+				}
+			} // if EStructuralFeature
+			return retValue;
+		} // adapt
+
+	} // IdentifiableFeatureModifierAdapterFactoryImpl
+
+} // EStructuralFeatureFeatureModifierAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/ExperimentFeatureModifierEditCompositeFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/ExperimentFeatureModifierEditCompositeFactory.java
new file mode 100644
index 0000000..bf0a38e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/ExperimentFeatureModifierEditCompositeFactory.java
@@ -0,0 +1,206 @@
+// ExperimentFeatureModifierEditCompositeFactory.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.stem.core.modifier.util.ModifierAdapterFactory;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.DoubleRangeFeatureModifierEditCompositeAdapter;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.IntegerRangeFeatureModifierEditCompositeAdapter;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.LongRangeFeatureModifierEditCompositeAdapter;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.STEMTimeRangeFeatureModifierEditCompositeAdapter;
+
+/**
+ * This class is an {@link org.eclipse.emf.common.notify.AdapterFactory} that
+ * adapts {@link org.eclipse.stem.core.modifier.FeatureModifier}s to
+ * {@link org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite}
+ * s.
+ */
+public class ExperimentFeatureModifierEditCompositeFactory extends
+		ModifierAdapterFactory {
+
+	/**
+	 * Default Constructor.
+	 * 
+	 * It adds an instance of the this factory to
+	 * {@link FeatureModifierFeatureModifierEditCompositeAdapterFactory#INSTANCE}.
+	 */
+	public ExperimentFeatureModifierEditCompositeFactory() {
+		super();
+		FeatureModifierFeatureModifierEditCompositeAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	} // IntegerRangeFeatureModifierEditCompositeAdapter
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createDoubleNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createDoubleNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter.NumericNOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createDoubleRangeModifierAdapter()
+	 */
+	@Override
+	public Adapter createDoubleRangeModifierAdapter() {
+		return new DoubleRangeFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createIntegerNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createIntegerNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter.NumericNOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createIntegerRangeModifierAdapter()
+	 */
+	@Override
+	public Adapter createIntegerRangeModifierAdapter() {
+		return new IntegerRangeFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createLongNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createLongNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter.NumericNOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createLongRangeModifierAdapter()
+	 */
+	@Override
+	public Adapter createLongRangeModifierAdapter() {
+		return new LongRangeFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createStringNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createStringNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter.StringNOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createDoubleModifierAdapter()
+	 */
+	@Override
+	public Adapter createDoubleModifierAdapter() {
+		return new SingleValueFeatureModifierEditCompositeAdapter.DoubleFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createIntegerModifierAdapter()
+	 */
+	@Override
+	public Adapter createIntegerModifierAdapter() {
+		return new SingleValueFeatureModifierEditCompositeAdapter.IntegerFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createLongModifierAdapter()
+	 */
+	@Override
+	public Adapter createLongModifierAdapter() {
+		return new SingleValueFeatureModifierEditCompositeAdapter.LongFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createSTEMTimeModifierAdapter()
+	 */
+	@Override
+	public Adapter createSTEMTimeModifierAdapter() {
+		return new SingleValueFeatureModifierEditCompositeAdapter.STEMTimeFeatureModifierEditCompositeAdapter();
+	}
+	
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createDoubleSequenceModifierAdapter()
+	 */
+	@Override
+	public Adapter createDoubleSequenceModifierAdapter() {
+		return new SequenceFeatureModifierEditCompositeAdapter.DoubleSequenceFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createIntegerSequenceModifierAdapter()
+	 */
+	@Override
+	public Adapter createIntegerSequenceModifierAdapter() {
+		return new SequenceFeatureModifierEditCompositeAdapter.IntegerSequenceFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createLongSequenceModifierAdapter()
+	 */
+	@Override
+	public Adapter createLongSequenceModifierAdapter() {
+		return new SequenceFeatureModifierEditCompositeAdapter.LongSequenceFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createSTEMTimeSequenceModifierAdapter()
+	 */
+	@Override
+	public Adapter createSTEMTimeSequenceModifierAdapter() {
+		return new SequenceFeatureModifierEditCompositeAdapter.STEMTimeSequenceFeatureModifierEditCompositeAdapter();
+	}
+	
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createStringSequenceModifierAdapter()
+	 */
+	@Override
+	public Adapter createStringSequenceModifierAdapter() {
+		// TODO Auto-generated method stub
+		return super.createStringSequenceModifierAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createSTEMTimeNOPModifierAdapter()
+	 */
+	@Override
+	public Adapter createSTEMTimeNOPModifierAdapter() {
+		return new NOPFeatureModifierEditCompositeAdapter.STEMTimeNOPFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#createSTEMTimeRangeModifierAdapter()
+	 */
+	@Override
+	public Adapter createSTEMTimeRangeModifierAdapter() {
+		return new STEMTimeRangeFeatureModifierEditCompositeAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.modifier.util.ModifierAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object object) {
+		return object == FeatureModifierEditCompositeAdapter.class
+				|| super.isFactoryForType(object);
+	}
+
+} // ExperimentFeatureModifierEditCompositeFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierEditCompositeAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierEditCompositeAdapter.java
new file mode 100644
index 0000000..7dd3ca2
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierEditCompositeAdapter.java
@@ -0,0 +1,80 @@
+// FeatureModifierEditCompositeAdapter.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class adapts {@link FeatureModifier}s to
+ * {@link FeatureModifierEditComposite}s.
+ */
+abstract public class FeatureModifierEditCompositeAdapter extends AdapterImpl
+		implements Adapter {
+
+	/**
+	 * @param parent
+	 *            the parent {@link Composite}
+	 * @param identifiable
+	 *            the {@link Identifiable}
+	 * @param parentNewModifierPage
+	 *            the parent {@link NewModifierPage}
+	 * @return the {@link FeatureModifierEditComposite} appropriate for the
+	 *         {@link FeatureModifier} be adapted.
+	 */
+	abstract public FeatureModifierEditComposite createEditComposite(
+			Composite parent, Identifiable identifiable,
+			NewModifierPage parentNewModifierPage);
+
+	/**
+	 * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(final Object type) {
+		return type == FeatureModifierEditCompositeAdapter.class;
+	}
+
+	/**
+	 * @return the {@link FeatureModifier}
+	 */
+	public FeatureModifier getFeatureModifier() {
+		return (FeatureModifier) getTarget();
+	} // getFeatureModifier
+
+	/**
+	 * This method selects the button that is appropriate for the
+	 * {@link FeatureModifier} that is the target. and un-selects all the other
+	 * buttons. Thus, if the {@link FeatureModifier} is an instance of
+	 * {@link RangeModifier} the <code>rangeButton</code> will be selected. By
+	 * default the <code>noneButton</code> is selected.
+	 * 
+	 * @param noneButton
+	 * @param singleValueButton
+	 * @param rangeButton
+	 * @param sequenceButton
+	 */
+	public void setSelectedButton(final Button noneButton, final Button singleValueButton,
+			final Button rangeButton, final Button sequenceButton) {
+		noneButton.setSelection(true);
+		singleValueButton.setSelection(false);
+		rangeButton.setSelection(false);
+		sequenceButton.setSelection(false);
+	} // setSelectedButton
+
+} // FeatureModifierEditCompositeAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierFeatureModifierEditCompositeAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierFeatureModifierEditCompositeAdapterFactory.java
new file mode 100644
index 0000000..fc70936
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/FeatureModifierFeatureModifierEditCompositeAdapterFactory.java
@@ -0,0 +1,46 @@
+// FeatureModifierFeatureModifierEditCompositeAdapterFactory.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ * This class is an adapter factory that adapts {@link org.eclipse.stem.core.modifier.FeatureModifier}s to
+ * {@link org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite}s.
+ */
+public interface FeatureModifierFeatureModifierEditCompositeAdapterFactory {
+
+	/**
+	 * Singleton instance of the adapter factory.
+	 */
+	FeatureModifierEditCompositeAdapterFactoryImpl INSTANCE = new FeatureModifierEditCompositeAdapterFactoryImpl();
+
+	/**
+	 * This class is the {@link ComposedAdapterFactory} that other
+	 * {@link FeatureModifierFeatureModifierEditCompositeAdapterFactory}s add
+	 * themselves to.
+	 */
+	class FeatureModifierEditCompositeAdapterFactoryImpl extends
+			ComposedAdapterFactory implements
+			FeatureModifierFeatureModifierEditCompositeAdapterFactory {
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(final Object type) {
+			return type == FeatureModifierEditCompositeAdapter.class;
+		}
+	} // FeatureModifierEditCompositeAdapterFactoryImpl
+
+} // FeatureModifierFeatureModifierEditCompositeAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/NOPFeatureModifierEditCompositeAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/NOPFeatureModifierEditCompositeAdapter.java
new file mode 100644
index 0000000..095cc38
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/NOPFeatureModifierEditCompositeAdapter.java
@@ -0,0 +1,178 @@
+// NOPFeatureModifierEditCompositeAdapter.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class is a {@link FeatureModifierEditCompositeAdapter} for
+ * {@link org.eclipse.stem.core.modifier.NOPModifier}s.
+ */
+public class NOPFeatureModifierEditCompositeAdapter extends
+		FeatureModifierEditCompositeAdapter {
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.stem.core.common.Identifiable,
+	 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+	 */
+	@Override
+	public FeatureModifierEditComposite createEditComposite(
+			final Composite parent,
+			@SuppressWarnings("unused") final Identifiable identifiable,
+			final NewModifierPage parentNewModifierPage) {
+		final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+				parent, parentNewModifierPage, (FeatureModifier) getTarget()) {
+			@Override
+			protected boolean validate() {
+				return true;
+			}
+		};
+		retValue.setLayout(new RowLayout());
+
+		final Label label = new Label(retValue, SWT.NONE);
+		label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+		label.setText(getFeatureModifier().getTarget().eGet(
+				getFeatureModifier().getEStructuralFeature()).toString());
+
+		return retValue;
+	} // createEditComposite
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier}s.
+	 * 
+	 * @see ExperimentFeatureModifierEditCompositeFactory#createSTEMTimeNOPModifierAdapter()
+	 */
+	public static class STEMTimeNOPFeatureModifierEditCompositeAdapter extends
+			NOPFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      org.eclipse.stem.core.common.Identifiable,
+		 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent,
+				@SuppressWarnings("unused") final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					return true;
+				}
+			};
+			retValue.setLayout(new RowLayout());
+
+			final Label label = new Label(retValue, SWT.NONE);
+			label.setText(getFeatureModifier().getTarget().eGet(
+					getFeatureModifier().getEStructuralFeature()).toString());
+
+			return retValue;
+		} // createEditComposite
+
+	} // STEMTimeNOPFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link org.eclipse.stem.core.modifier.NOPModifier}s that are numeric like
+	 * {@link org.eclipse.stem.core.modifier.IntegerNOPModifier},
+	 * {@link org.eclipse.stem.core.modifier.LongNOPModifier} and
+	 * {@link org.eclipse.stem.core.modifier.DoubleNOPModifier}.
+	 * 
+	 * @see ExperimentFeatureModifierEditCompositeFactory#createIntegerNOPModifierAdapter()
+	 * @see ExperimentFeatureModifierEditCompositeFactory#createLongNOPModifierAdapter()
+	 * @see ExperimentFeatureModifierEditCompositeFactory#createDoubleNOPModifierAdapter()
+	 */
+	public static class NumericNOPFeatureModifierEditCompositeAdapter extends
+			NOPFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      org.eclipse.stem.core.common.Identifiable,
+		 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent,
+				@SuppressWarnings("unused") final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					return true;
+				}
+			};
+			retValue.setLayout(new RowLayout());
+
+			final Label toLabel = new Label(retValue, SWT.NONE);
+			toLabel.setText(getFeatureModifier().getTarget().eGet(
+					getFeatureModifier().getEStructuralFeature()).toString());
+
+			return retValue;
+		} // createEditComposite
+
+	} // NumericNOPFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link org.eclipse.stem.core.modifier.STEMTimeNOPModifier}s.
+	 * 
+	 * @see ExperimentFeatureModifierEditCompositeFactory#createSTEMTimeNOPModifierAdapter()
+	 */
+	public static class StringNOPFeatureModifierEditCompositeAdapter extends
+			NOPFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      org.eclipse.stem.core.common.Identifiable,
+		 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent,
+				@SuppressWarnings("unused") final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					return true;
+				}
+			};
+			retValue.setLayout(new RowLayout());
+
+			final Label label = new Label(retValue, SWT.NONE);
+			label.setText(getFeatureModifier().getTarget().eGet(
+					getFeatureModifier().getEStructuralFeature()).toString());
+
+			return retValue;
+		} // createEditComposite
+
+	} // StringNOPFeatureModifierEditCompositeAdapter
+
+} // NOPFeatureModifierEditCompositeAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/RangeFeatureModifierEditCompositeAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/RangeFeatureModifierEditCompositeAdapter.java
new file mode 100644
index 0000000..7a5ca9a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/RangeFeatureModifierEditCompositeAdapter.java
@@ -0,0 +1,686 @@
+// RangeFeatureModifierEditCompositeAdapter.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.DoubleRangeModifier;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.IntegerRangeModifier;
+import org.eclipse.stem.core.modifier.LongRangeModifier;
+import org.eclipse.stem.core.modifier.STEMTimeRangeModifier;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a {@link FeatureModifierEditCompositeAdapter} for
+ * {@link org.eclipse.stem.core.modifier.RangeModifier}s.
+ */
+abstract public class RangeFeatureModifierEditCompositeAdapter extends
+		FeatureModifierEditCompositeAdapter {
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#setSelectedButton(org.eclipse.swt.widgets.Button,
+	 *      org.eclipse.swt.widgets.Button, org.eclipse.swt.widgets.Button)
+	 */
+	@Override
+	public void setSelectedButton(final Button noneButton, final Button singleValueButton,
+			final Button rangeButton, final Button sequenceButton) {
+		noneButton.setSelection(false);
+		singleValueButton.setSelection(false);
+		rangeButton.setSelection(true);
+		sequenceButton.setSelection(false);
+	} // setSelectedButton
+
+	// -------------------------------------------------------------------------
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link RangeModifier}s that have a range of numeric values.
+	 */
+	protected static abstract class NumericRangeFeatureModifierEditCompositeAdapter
+			extends RangeFeatureModifierEditCompositeAdapter {
+
+		private static final int TEXT_WIDTH = 30;
+
+		protected Text startText;
+		protected Text endText;
+		protected Text incText;
+
+		abstract protected void initializeFeatureModifier(
+				Identifiable identifiable);
+
+		abstract protected String getInitialStartText();
+
+		abstract protected String getInitialEndText();
+
+		abstract protected String getInitialIncrementText();
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      Identifiable, NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent, final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+
+			initializeFeatureModifier(identifiable);
+
+			final FeatureModifierEditComposite retValue = getFeatureModifierEditComposite(
+					parent, parentNewModifierPage);
+
+			final FormLayout layout = new FormLayout();
+			layout.marginHeight = 0;
+			layout.marginWidth = 0;
+			retValue.setLayout(layout);
+
+			startText = new Text(retValue, SWT.BORDER | SWT.TRAIL);
+			startText.setText(getInitialStartText());
+			startText.setToolTipText("Starting value");
+			startText.addModifyListener(retValue.getModifyListener());
+			final Label toLabel = new Label(retValue, SWT.NONE);
+			toLabel.setText(" to ");
+
+			endText = new Text(retValue, SWT.BORDER | SWT.TRAIL);
+			endText.setText(getInitialEndText());
+			endText.setToolTipText("Ending value");
+			endText.addModifyListener(retValue.getModifyListener());
+
+			final Label byLabel = new Label(retValue, SWT.NONE);
+			byLabel.setText(" by ");
+
+			incText = new Text(retValue, SWT.BORDER | SWT.TRAIL);
+			incText.setText(getInitialIncrementText());
+			incText.setToolTipText("Increment");
+			incText.addModifyListener(retValue.getModifyListener());
+
+			org.eclipse.swt.layout.FormData formData = null;
+
+			// start
+			formData = new FormData();
+			formData.width = TEXT_WIDTH;
+			formData.left = new FormAttachment(0, 0);
+			formData.bottom = new FormAttachment(100, 0);
+			startText.setLayoutData(formData);
+
+			// "to"
+			formData = new FormData();
+			formData.left = new FormAttachment(startText, 0, SWT.RIGHT);
+			formData.bottom = new FormAttachment(startText, 0, SWT.BOTTOM);
+			toLabel.setLayoutData(formData);
+
+			// end
+			formData = new FormData();
+			formData.width = TEXT_WIDTH;
+			formData.left = new FormAttachment(toLabel, 0, SWT.RIGHT);
+			formData.bottom = new FormAttachment(toLabel, 0, SWT.BOTTOM);
+			endText.setLayoutData(formData);
+
+			// "by"
+			formData = new FormData();
+			formData.left = new FormAttachment(endText, 0, SWT.RIGHT);
+			formData.bottom = new FormAttachment(endText, 0, SWT.BOTTOM);
+			byLabel.setLayoutData(formData);
+
+			// inc
+			formData = new FormData();
+			formData.width = TEXT_WIDTH;
+			formData.left = new FormAttachment(byLabel, 0, SWT.RIGHT);
+			formData.right = new FormAttachment(100, 0);
+			formData.bottom = new FormAttachment(byLabel, 0, SWT.BOTTOM);
+			incText.setLayoutData(formData);
+
+			return retValue;
+		} // createEditComposite
+
+		/**
+		 * @param parent
+		 *            the parent composite
+		 * @param parentNewModifierPage
+		 *            the {@link NewModifierPage} that is the parent to parent
+		 * @return a new {@link FeatureModifierEditComposite}
+		 */
+		protected abstract FeatureModifierEditComposite getFeatureModifierEditComposite(
+				Composite parent, NewModifierPage parentNewModifierPage);
+
+	} // NumericRangeFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link IntegerRangeModifier}s.
+	 */
+	public static class IntegerRangeFeatureModifierEditCompositeAdapter extends
+			NumericRangeFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final IntegerRangeModifier rangeModifier = (IntegerRangeModifier) getFeatureModifier();
+			rangeModifier.setStartValue(((Integer) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).intValue());
+			rangeModifier.setEndValue(rangeModifier.getStartValue());
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getInitialEndText() {
+			return Integer
+					.toString(((IntegerRangeModifier) getFeatureModifier())
+							.getEndValue());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialIncrementText()
+		 */
+		@Override
+		protected String getInitialIncrementText() {
+			return Integer
+					.toString(((IntegerRangeModifier) getFeatureModifier())
+							.getIncrement());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialStartText()
+		 */
+		@Override
+		protected String getInitialStartText() {
+			return Integer
+					.toString(((IntegerRangeModifier) getFeatureModifier())
+							.getStartValue());
+		} // getInitialStartText
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getFeatureModifierEditComposite(Composite,
+		 *      NewModifierPage)
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+
+				/**
+				 * @see org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite#validate()
+				 */
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+
+					int startValue = 0;
+					int endValue = 0;
+					int incValue = 0;
+
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							startValue = Integer.parseInt(startText.getText());
+							((IntegerRangeModifier) featureModifier)
+									.setStartValue(startValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Start value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// End text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid end value?
+							endValue = Integer.parseInt(endText.getText());
+							((IntegerRangeModifier) featureModifier)
+									.setEndValue(endValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "End value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Inc text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid inc value?
+							incValue = Integer.parseInt(incText.getText());
+							((IntegerRangeModifier) featureModifier)
+									.setIncrement(incValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Increment value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Consistent
+					// Still valid?
+					if (retValue) {
+						// Yes
+						// Are the relative values consistent?
+						// if (!(startValue <= endValue && incValue >= 0L)) {
+						if (startValue <= endValue && incValue < 0L) {
+							// No
+							retValue = false;
+							message = "If the start is <= the end, then the increment cannont be < 0.0";
+						} // if
+						else if (startValue > endValue && incValue >= 0L) {
+							// No
+							retValue = false;
+							message = "If the start is > the end, then the increment cannont be >= 0.0";
+						} // if
+					} // if
+
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+			};
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	} // IntegerRangeFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link IntegerRangeModifier}s.
+	 */
+	public static class LongRangeFeatureModifierEditCompositeAdapter extends
+			NumericRangeFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final LongRangeModifier rangeModifier = (LongRangeModifier) getFeatureModifier();
+			rangeModifier.setStartValue(((Long) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).longValue());
+			rangeModifier.setEndValue(rangeModifier.getStartValue());
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getInitialEndText() {
+			return Long.toString(((LongRangeModifier) getFeatureModifier())
+					.getEndValue());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialIncrementText()
+		 */
+		@Override
+		protected String getInitialIncrementText() {
+			return Long.toString(((LongRangeModifier) getFeatureModifier())
+					.getIncrement());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialStartText()
+		 */
+		@Override
+		protected String getInitialStartText() {
+			return Long.toString(((LongRangeModifier) getFeatureModifier())
+					.getStartValue());
+		} // getInitialStartText
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getFeatureModifierEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+
+				/**
+				 * @see org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite#validate()
+				 */
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+
+					long startValue = 0L;
+					long endValue = 0L;
+					long incValue = 0L;
+
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							startValue = Long.parseLong(startText.getText());
+							((LongRangeModifier) featureModifier)
+									.setStartValue(startValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Start value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// End text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid end value?
+							endValue = Long.parseLong(endText.getText());
+							((LongRangeModifier) featureModifier)
+									.setEndValue(endValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "End value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Inc text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid inc value?
+							incValue = Long.parseLong(incText.getText());
+							((LongRangeModifier) featureModifier)
+									.setIncrement(incValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Increment value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Consistent
+					// Still valid?
+					if (retValue) {
+						// Yes
+						// Are the relative values consistent?
+						// if (!(startValue <= endValue && incValue >= 0L)) {
+						if (startValue <= endValue && incValue < 0L) {
+							// No
+							retValue = false;
+							message = "If the start is <= the end, then the increment cannont be < 0.0";
+						} // if
+						else if (startValue > endValue && incValue >= 0L) {
+							// No
+							retValue = false;
+							message = "If the start is > the end, then the increment cannont be >= 0.0";
+						} // if
+					} // if
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+
+			};
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	} // LongRangeFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link DoubleRangeModifier}s.
+	 */
+	public static class DoubleRangeFeatureModifierEditCompositeAdapter extends
+			NumericRangeFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final DoubleRangeModifier rangeModifier = (DoubleRangeModifier) getFeatureModifier();
+			rangeModifier.setStartValue(((Double) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).doubleValue());
+			rangeModifier.setEndValue(rangeModifier.getStartValue());
+			// rangeModifier.setIncrement(new Double(0.0));
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getInitialEndText() {
+			return Double.toString(((DoubleRangeModifier) getFeatureModifier())
+					.getEndValue());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialIncrementText()
+		 */
+		@Override
+		protected String getInitialIncrementText() {
+			return Double.toString(((DoubleRangeModifier) getFeatureModifier())
+					.getIncrement());
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialStartText()
+		 */
+		@Override
+		protected String getInitialStartText() {
+			return Double.toString(((DoubleRangeModifier) getFeatureModifier())
+					.getStartValue());
+		} // getInitialStartText
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getFeatureModifierEditComposite(Composite,
+		 *      NewModifierPage)
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+					double startValue = 0.0;
+					double endValue = 0.0;
+					double incValue = 0.0;
+
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							startValue = Double
+									.parseDouble(startText.getText());
+							((DoubleRangeModifier) featureModifier)
+									.setStartValue(startValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Start value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// End text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid end value?
+							endValue = Double.parseDouble(endText.getText());
+							((DoubleRangeModifier) featureModifier)
+									.setEndValue(endValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "End value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Inc text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid inc value?
+							incValue = Double.parseDouble(incText.getText());
+							((DoubleRangeModifier) featureModifier)
+									.setIncrement(incValue);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Increment value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Consistent
+					// Still valid?
+					if (retValue) {
+						// Yes
+						// Are the relative values consistent?
+						// if (!(startValue <= endValue && incValue >= 0.0)) {
+						if (startValue <= endValue && incValue < 0.0) {
+							// No
+							retValue = false;
+							message = "If the start is <= the end, then the increment cannont be < 0.0";
+						} // if
+						else if (startValue > endValue && incValue >= 0.0) {
+							// No
+							retValue = false;
+							message = "If the start is > the end, then the increment cannont be >= 0.0";
+						} // if
+					} // if
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+			};
+
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	} // DoubleRangeFeatureModifierEditCompositeAdapter
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link STEMTimeRangeModifier}s.
+	 */
+	public static class STEMTimeRangeFeatureModifierEditCompositeAdapter extends
+			RangeFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      Identifiable, NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent,
+				@SuppressWarnings("unused") final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					final boolean retValue = parentNewModifierPage
+							.validatePage();
+
+					// String message = null;
+					return retValue;
+				} // validate
+			};
+			retValue.setLayout(new RowLayout());
+			final Label label = new Label(retValue, SWT.NONE);
+
+			final STEMTimeRangeModifier rangeModifier = (STEMTimeRangeModifier) getFeatureModifier();
+			rangeModifier.setStartValue((STEMTime) getFeatureModifier()
+					.getTarget().eGet(
+							getFeatureModifier().getEStructuralFeature()));
+			rangeModifier.setEndValue(rangeModifier.getStartValue());
+			final StringBuilder sb = new StringBuilder(rangeModifier
+					.getStartValue().toString());
+			sb.append(" to ");
+			sb.append(rangeModifier.getEndValue().toString());
+			sb.append(" by ");
+			sb.append(rangeModifier.getIncrement());
+
+			label.setText(sb.toString());
+			return retValue;
+		} // createEditComposite
+
+	} // STEMTimeRangeFeatureModifierEditCompositeAdapter
+
+} // RangeFeatureModifierEditCompositeAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SequenceFeatureModifierEditCompositeAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SequenceFeatureModifierEditCompositeAdapter.java
new file mode 100644
index 0000000..b06781c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SequenceFeatureModifierEditCompositeAdapter.java
@@ -0,0 +1,260 @@
+// SequenceFeatureModifierEditCompositeAdapter.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.DoubleSequenceModifier;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.IntegerSequenceModifier;
+import org.eclipse.stem.core.modifier.LongSequenceModifier;
+import org.eclipse.stem.core.modifier.STEMTimeSequenceModifier;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class is a {@link FeatureModifierEditCompositeAdapter} for
+ * {@link  org.eclipse.stem.core.modifier.SequenceModifier}s.
+ */
+abstract public class SequenceFeatureModifierEditCompositeAdapter extends
+		FeatureModifierEditCompositeAdapter {
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#setSelectedButton(org.eclipse.swt.widgets.Button,
+	 *      org.eclipse.swt.widgets.Button, org.eclipse.swt.widgets.Button)
+	 */
+	@Override
+	public void setSelectedButton(final Button noneButton, final Button singleValueButton,
+			final Button rangeButton, final Button sequenceButton) {
+		noneButton.setSelection(false);
+		singleValueButton.setSelection(false);
+		rangeButton.setSelection(false);
+		sequenceButton.setSelection(true);
+	} // setSelectedButton
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+	 *      Identifiable, NewModifierPage)
+	 */
+	@Override
+	abstract public FeatureModifierEditComposite createEditComposite(
+			final Composite parent, final Identifiable identifiable,
+			final NewModifierPage parentNewModifierPage);
+
+	abstract protected static class NumericSequenceFeatureModifierEditCompositeAdapter
+			extends SequenceFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      org.eclipse.stem.core.common.Identifiable,
+		 *      org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				Composite parent, Identifiable identifiable,
+				NewModifierPage parentNewModifierPage) {
+			initializeFeatureModifier(identifiable);
+
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					// TODO createEditComposite.validate()
+					return true;
+				}
+			};
+
+			retValue.setLayout(new RowLayout());
+			final Label label = new Label(retValue, SWT.BORDER);
+
+			label.setText(getSequenceSummaryText());
+
+			final Button editButton = new Button(retValue, SWT.PUSH);
+			editButton.setText("Edit");
+			editButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {
+					// TODO implement widgetSelected
+				}
+			});
+			return retValue;
+		} // createEditComposite
+
+		/**
+		 * @param identifiable
+		 */
+		abstract protected void initializeFeatureModifier(
+				Identifiable identifiable);
+
+		/**
+		 * @return
+		 */
+		abstract protected String getSequenceSummaryText();
+
+	} // NumericSequenceFeatureModifierEditCompositeAdapter
+
+	protected static class IntegerSequenceFeatureModifierEditCompositeAdapter
+			extends NumericSequenceFeatureModifierEditCompositeAdapter {
+
+		@Override
+		protected void initializeFeatureModifier(Identifiable identifiable) {
+			final IntegerSequenceModifier sequenceModifier = (IntegerSequenceModifier) getFeatureModifier();
+			sequenceModifier.getSequence().add(
+					((Integer) (identifiable.eGet(getFeatureModifier()
+							.getEStructuralFeature()))));
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter.NumericSequenceFeatureModifierEditCompositeAdapter#getSequenceSummaryText()
+		 */
+		@Override
+		protected String getSequenceSummaryText() {
+			final IntegerSequenceModifier sequenceModifier = (IntegerSequenceModifier) getFeatureModifier();
+			final StringBuilder sb = new StringBuilder();
+			int i = sequenceModifier.getSequenceSize();
+			for (Integer integer : sequenceModifier.getSequence()) {
+				sb.append(integer.toString());
+				sb.append(--i > 0 ? ", " : "");
+			} // for each
+			return sb.toString();
+		} // getSequenceSummaryText
+
+	} // IntegerSequenceFeatureModifierEditCompositeAdapter
+
+	protected static class DoubleSequenceFeatureModifierEditCompositeAdapter
+			extends NumericSequenceFeatureModifierEditCompositeAdapter {
+
+		@Override
+		protected void initializeFeatureModifier(Identifiable identifiable) {
+			final DoubleSequenceModifier sequenceModifier = (DoubleSequenceModifier) getFeatureModifier();
+			sequenceModifier.getSequence().add(
+					((Double) (identifiable.eGet(getFeatureModifier()
+							.getEStructuralFeature()))));
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter.NumericSequenceFeatureModifierEditCompositeAdapter#getSequenceSummaryText()
+		 */
+		@Override
+		protected String getSequenceSummaryText() {
+			final DoubleSequenceModifier sequenceModifier = (DoubleSequenceModifier) getFeatureModifier();
+			final StringBuilder sb = new StringBuilder();
+			int i = sequenceModifier.getSequenceSize();
+			for (Double db : sequenceModifier.getSequence()) {
+				sb.append(db.toString());
+				sb.append(--i > 0 ? ", " : "");
+			} // for each
+			return sb.toString();
+		} // getSequenceSummaryText
+
+	} // DoubleSequenceFeatureModifierEditCompositeAdapter
+
+	protected static class LongSequenceFeatureModifierEditCompositeAdapter
+			extends NumericSequenceFeatureModifierEditCompositeAdapter {
+
+		@Override
+		protected void initializeFeatureModifier(Identifiable identifiable) {
+			final LongSequenceModifier sequenceModifier = (LongSequenceModifier) getFeatureModifier();
+			sequenceModifier.getSequence().add(
+					((Long) (identifiable.eGet(getFeatureModifier()
+							.getEStructuralFeature()))));
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter.NumericSequenceFeatureModifierEditCompositeAdapter#getSequenceSummaryText()
+		 */
+		@Override
+		protected String getSequenceSummaryText() {
+			final LongSequenceModifier sequenceModifier = (LongSequenceModifier) getFeatureModifier();
+			final StringBuilder sb = new StringBuilder();
+			int i = sequenceModifier.getSequenceSize();
+			for (Long lng : sequenceModifier.getSequence()) {
+				sb.append(lng.toString());
+				sb.append(--i > 0 ? ", " : "");
+			} // for each
+			return sb.toString();
+		} // getSequenceSummaryText
+	} // LongSequenceFeatureModifierEditCompositeAdapter
+
+	protected static class STEMTimeSequenceFeatureModifierEditCompositeAdapter
+			extends SequenceFeatureModifierEditCompositeAdapter {
+
+		
+		
+		
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite, org.eclipse.stem.core.common.Identifiable, org.eclipse.stem.ui.wizards.NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				Composite parent, Identifiable identifiable,
+				NewModifierPage parentNewModifierPage) {
+			initializeFeatureModifier(identifiable);
+
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					// TODO createEditComposite.validate()
+					return true;
+				}
+			};
+
+			retValue.setLayout(new RowLayout());
+			final Label label = new Label(retValue, SWT.BORDER);
+
+			label.setText(getSequenceSummaryText());
+
+			final Button editButton = new Button(retValue, SWT.PUSH);
+			editButton.setText("Edit");
+			editButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {
+					// TODO implement widgetSelected
+				}
+			});
+			return retValue;
+		} // createEditComposite
+
+		protected void initializeFeatureModifier(Identifiable identifiable) {
+			final LongSequenceModifier sequenceModifier = (LongSequenceModifier) getFeatureModifier();
+			sequenceModifier.getSequence().add(
+					((Long) (identifiable.eGet(getFeatureModifier()
+							.getEStructuralFeature()))));
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.SequenceFeatureModifierEditCompositeAdapter.NumericSequenceFeatureModifierEditCompositeAdapter#getSequenceSummaryText()
+		 */
+		protected String getSequenceSummaryText() {
+			final STEMTimeSequenceModifier sequenceModifier = (STEMTimeSequenceModifier) getFeatureModifier();
+			final StringBuilder sb = new StringBuilder();
+			int i = sequenceModifier.getSequenceSize();
+			for (STEMTime time : sequenceModifier.getSequence()) {
+				sb.append(time.toString());
+				sb.append(--i > 0 ? ", " : "");
+			} // for each
+			return sb.toString();
+		} // getSequenceSummaryText
+	} // STEMTimeSequenceFeatureModifierEditCompositeAdapter
+
+} // SequenceFeatureModifierEditCompositeAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SingleValueFeatureModifierEditCompositeAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SingleValueFeatureModifierEditCompositeAdapter.java
new file mode 100644
index 0000000..acf6e43
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/featuremodifiereditcomposite/SingleValueFeatureModifierEditCompositeAdapter.java
@@ -0,0 +1,425 @@
+// RangeFeatureModifierEditCompositeAdapter.java
+package org.eclipse.stem.ui.adapters.featuremodifiereditcomposite;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.modifier.DoubleModifier;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.IntegerModifier;
+import org.eclipse.stem.core.modifier.LongModifier;
+import org.eclipse.stem.core.modifier.STEMTimeModifier;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+import org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a {@link FeatureModifierEditCompositeAdapter} for
+ * {@link SingleValueModifier}s.
+ */
+abstract public class SingleValueFeatureModifierEditCompositeAdapter extends
+		FeatureModifierEditCompositeAdapter {
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#setSelectedButton(org.eclipse.swt.widgets.Button,
+	 *      org.eclipse.swt.widgets.Button, org.eclipse.swt.widgets.Button)
+	 */
+	@Override
+	public void setSelectedButton(final Button noneButton, final Button singleValueButton,
+			final Button rangeButton, final Button sequenceButton) {
+		noneButton.setSelection(false);
+		singleValueButton.setSelection(true);
+		rangeButton.setSelection(false);
+		sequenceButton.setSelection(false);
+	} // setSelectedButton
+
+	// -------------------------------------------------------------------------
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link SingleValueModifier}s that have a range of numeric values.
+	 */
+	protected static abstract class NumericSingleValueFeatureModifierEditCompositeAdapter
+			extends SingleValueFeatureModifierEditCompositeAdapter {
+
+		private static final int TEXT_WIDTH = 60;
+
+		protected Text valueText;
+		
+		abstract protected void initializeFeatureModifier(
+				Identifiable identifiable);
+
+		abstract protected String getValueText();
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      Identifiable, NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent, final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+
+			initializeFeatureModifier(identifiable);
+
+			final FeatureModifierEditComposite retValue = getFeatureModifierEditComposite(
+					parent, parentNewModifierPage);
+
+			final FormLayout layout = new FormLayout();
+			layout.marginHeight = 0;
+			layout.marginWidth = 0;
+			retValue.setLayout(layout);
+
+			valueText = new Text(retValue, SWT.BORDER | SWT.TRAIL);
+			valueText.setText(getValueText());
+			valueText.setToolTipText("Value");
+			valueText.addModifyListener(retValue.getModifyListener());
+	
+			org.eclipse.swt.layout.FormData formData = null;
+
+			// start
+			formData = new FormData();
+			formData.width = TEXT_WIDTH;
+			formData.left = new FormAttachment(0, 0);
+			formData.bottom = new FormAttachment(100, 0);
+			valueText.setLayoutData(formData);
+
+			return retValue;
+		} // createEditComposite
+
+		/**
+		 * @param parent
+		 *            the parent composite
+		 * @param parentNewModifierPage
+		 *            the {@link NewModifierPage} that is the parent to parent
+		 * @return a new {@link FeatureModifierEditComposite}
+		 */
+		protected abstract FeatureModifierEditComposite getFeatureModifierEditComposite(
+				Composite parent, NewModifierPage parentNewModifierPage);
+
+	} 
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link IntegerModifier}s.
+	 */
+	public static class IntegerFeatureModifierEditCompositeAdapter extends
+			NumericSingleValueFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final IntegerModifier modifier = (IntegerModifier) getFeatureModifier();
+			modifier.setValue(((Integer) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).intValue());
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getValueText() {
+			return Integer
+					.toString(((IntegerModifier) getFeatureModifier())
+							.getValue());
+		}
+
+
+		/**
+		 * 
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+
+				/**
+				 * @see org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite#validate()
+				 */
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+
+					int value = 0;
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							value = Integer.parseInt(valueText.getText());
+							((IntegerModifier) featureModifier)
+									.setValue(value);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+			};
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	} //
+	
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link LongModifier}s.
+	 */
+	public static class LongFeatureModifierEditCompositeAdapter extends
+			NumericSingleValueFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final LongModifier modifier = (LongModifier) getFeatureModifier();
+			modifier.setValue(((Long) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).intValue());
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getValueText() {
+			return Long
+					.toString(((LongModifier) getFeatureModifier())
+							.getValue());
+		}
+
+
+		/**
+		 * 
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+
+				/**
+				 * @see org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite#validate()
+				 */
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+
+					long value = 0;
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							value = Long.parseLong(valueText.getText());
+							((LongModifier) featureModifier)
+									.setValue(value);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+			};
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	}
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link DoubleModifier}s.
+	 */
+	public static class DoubleFeatureModifierEditCompositeAdapter extends
+			NumericSingleValueFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#initializeFeatureModifier(Identifiable)
+		 */
+		@Override
+		protected void initializeFeatureModifier(
+				@SuppressWarnings("unused") final Identifiable identifiable) {
+			final DoubleModifier modifier = (DoubleModifier) getFeatureModifier();
+			modifier.setValue(((Double) (getFeatureModifier()
+					.getTarget().eGet(getFeatureModifier()
+					.getEStructuralFeature()))).intValue());
+		} // initializeFeatureModifier
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.RangeFeatureModifierEditCompositeAdapter.NumericRangeFeatureModifierEditCompositeAdapter#getInitialEndText()
+		 */
+		@Override
+		protected String getValueText() {
+			return Double
+					.toString(((DoubleModifier) getFeatureModifier())
+							.getValue());
+		}
+
+
+		/**
+		 * 
+		 */
+		@Override
+		protected FeatureModifierEditComposite getFeatureModifierEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+
+				/**
+				 * @see org.eclipse.stem.ui.wizards.NewModifierPage.FeatureModifierEditComposite#validate()
+				 */
+				@Override
+				protected boolean validate() {
+					boolean retValue = true;
+
+					String message = null;
+
+					double value = 0;
+					// Start text
+					// Still valid?
+					if (retValue) {
+						// Yes
+						try {
+							// Valid start value?
+							value = Double.parseDouble(valueText.getText());
+							((DoubleModifier) featureModifier)
+									.setValue(value);
+						} catch (final NumberFormatException e) {
+							retValue = false;
+							message = "Value not valid";
+						} // catch NumberFormatException
+					} // if
+
+					// Any error message to report?
+					if (message != null) {
+						// Yes
+						parentNewModifierPage.setErrorMessage(message);
+					} // if
+
+					// Everything Ok?
+					if (retValue) {
+						// Yes
+						// Check out the parent then
+						retValue = parentNewModifierPage.validatePage();
+					} // if
+
+					return retValue;
+				} // validate
+			};
+			return retValue;
+		} // getFeatureModifierEditComposite
+
+	}
+
+	/**
+	 * This class is a {@link FeatureModifierEditCompositeAdapter} for
+	 * {@link STEMTimeModifier}s.
+	 */
+	public static class STEMTimeFeatureModifierEditCompositeAdapter extends
+			SingleValueFeatureModifierEditCompositeAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter#createEditComposite(org.eclipse.swt.widgets.Composite,
+		 *      Identifiable, NewModifierPage)
+		 */
+		@Override
+		public FeatureModifierEditComposite createEditComposite(
+				final Composite parent,
+				@SuppressWarnings("unused") final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage,
+					(FeatureModifier) getTarget()) {
+				@Override
+				protected boolean validate() {
+					final boolean retValue = parentNewModifierPage
+							.validatePage();
+
+					// String message = null;
+					return retValue;
+				} // validate
+			};
+			retValue.setLayout(new RowLayout());
+			final Label label = new Label(retValue, SWT.NONE);
+
+			final STEMTimeModifier modifier = (STEMTimeModifier) getFeatureModifier();
+			modifier.setValue((STEMTime) getFeatureModifier()
+					.getTarget().eGet(
+							getFeatureModifier().getEStructuralFeature()));
+	
+			final StringBuilder sb = new StringBuilder(modifier
+					.getValue().toString());
+
+			label.setText(sb.toString());
+			return retValue;
+		} // createEditComposite
+
+	} // STEMTimeFeatureModifierEditCompositeAdapter
+
+} // SingleValueFeatureModifierEditCompositeAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/DelegatingWrapperItemProviderIdentifiableAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/DelegatingWrapperItemProviderIdentifiableAdapterFactory.java
new file mode 100644
index 0000000..99e783f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/DelegatingWrapperItemProviderIdentifiableAdapterFactory.java
@@ -0,0 +1,55 @@
+package org.eclipse.stem.ui.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.adapters.identifiable.IdentifiableAdapterFactory;
+
+/**
+ * This class is an
+ * {@link org.eclipse.stem.jobs.adapters.executable.ExecutableAdapterFactory}
+ * that adapts {@link org.eclipse.stem.ui.views.IdentifiableDelegate}s to
+ * {@link Identifiable}s.
+ */
+public class DelegatingWrapperItemProviderIdentifiableAdapterFactory extends
+		IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		Identifiable retValue = null;
+
+		// It it what we're looking for?
+		if (adaptableObject instanceof DelegatingWrapperItemProvider
+				&& adapterType.equals(Identifiable.class)) {
+			// Yes
+			final DelegatingWrapperItemProvider dwip = (DelegatingWrapperItemProvider) adaptableObject;
+			// Is this an Identifiable?
+			if (dwip.getValue() instanceof Identifiable) {
+				// Yes
+				retValue = (Identifiable) dwip.getValue();
+			} // if Identifiable
+			else {
+				// No
+				// Keep adapting...
+				retValue = (Identifiable) Platform.getAdapterManager()
+						.getAdapter(dwip.getValue(), Identifiable.class);
+			}
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // DelegatingWrapperItemProviderIdentifiableAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/IdentifiableDelegateIdentifiableAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/IdentifiableDelegateIdentifiableAdapterFactory.java
new file mode 100644
index 0000000..a41f1dc
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/identifiable/IdentifiableDelegateIdentifiableAdapterFactory.java
@@ -0,0 +1,41 @@
+// IdentifiableDelegateModifiableAdapterFactory.java
+package org.eclipse.stem.ui.adapters.identifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.jobs.adapters.identifiable.IdentifiableAdapterFactory;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+
+/**
+ * This class is an {@link IdentifiableAdapterFactory} that adapts
+ * {@link IdentifiableDelegate}s to {@link Identifiable}s.
+ */
+public class IdentifiableDelegateIdentifiableAdapterFactory extends
+		IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		Identifiable retValue = null;
+		// It it what we're looking for?
+		if (adaptableObject instanceof IdentifiableDelegate
+				&& adapterType.equals(Identifiable.class)) {
+			// Yes
+			retValue = ((IdentifiableDelegate) adaptableObject).getIdentifiable();
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // IdentifiableDelegateModifiableAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/DelegatingWrapperItemProviderModifiableAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/DelegatingWrapperItemProviderModifiableAdapterFactory.java
new file mode 100644
index 0000000..715e64c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/DelegatingWrapperItemProviderModifiableAdapterFactory.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.ui.adapters.modifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.jobs.adapters.identifiable.IdentifiableAdapterFactory;
+
+/**
+ * This class is an {@link IdentifiableAdapterFactory} that adapts
+ * {@link DelegatingWrapperItemProvider}s to {@link Modifiable}s.
+ */
+public class DelegatingWrapperItemProviderModifiableAdapterFactory extends
+		IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		Modifiable retValue = null;
+
+		// It it what we're looking for?
+		if (adaptableObject instanceof DelegatingWrapperItemProvider
+				&& adapterType.equals(Modifiable.class)) {
+			// Yes
+			final DelegatingWrapperItemProvider dwip = (DelegatingWrapperItemProvider) adaptableObject;
+			// Is this an Identifiable?
+			if (dwip.getValue() instanceof Identifiable) {
+				// Yes
+				// ...and is it Modifiable?
+				if (dwip.getValue() instanceof Modifiable) {
+					// Yes
+					retValue = (Modifiable) dwip.getValue();
+				}
+				// else NO
+			} // if Identifiable 
+			else {
+				// No
+				// Keep adapting...
+				retValue = (Modifiable) Platform.getAdapterManager()
+						.getAdapter(dwip.getValue(), Modifiable.class);
+			}
+		} // if
+		return retValue;
+	} // getAdapter
+} // DelegatingWrapperItemProviderModifiableAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/IdentifiableDelegateModifiableAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/IdentifiableDelegateModifiableAdapterFactory.java
new file mode 100644
index 0000000..6a1f113
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/modifiable/IdentifiableDelegateModifiableAdapterFactory.java
@@ -0,0 +1,44 @@
+// IdentifiableDelegateModifiableAdapterFactory.java
+package org.eclipse.stem.ui.adapters.modifiable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.modifier.Modifiable;
+import org.eclipse.stem.jobs.adapters.identifiable.IdentifiableAdapterFactory;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+
+/**
+ * This class is an {@link IdentifiableAdapterFactory} that adapts
+ * {@link IdentifiableDelegate}s to {@link Identifiable}s.
+ */
+public class IdentifiableDelegateModifiableAdapterFactory extends
+		IdentifiableAdapterFactory {
+
+	/**
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
+	 *      java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		Identifiable retValue = null;
+		// It it what we're looking for?
+		if (adaptableObject instanceof IdentifiableDelegate
+				&& adapterType.equals(Modifiable.class)) {
+			// Yes
+			final Identifiable temp = ((IdentifiableDelegate) adaptableObject).getIdentifiable();
+			
+			retValue = temp != null && temp instanceof Modifiable ? temp : null;
+		} // if
+		return retValue;
+	} // getAdapter
+
+} // IdentifiableDelegateModifiableAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/GraphNewModifierPageAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/GraphNewModifierPageAdapterFactory.java
new file mode 100644
index 0000000..bc45353
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/GraphNewModifierPageAdapterFactory.java
@@ -0,0 +1,144 @@
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.EdgeLabel;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.util.GraphAdapterFactory;
+import org.eclipse.stem.data.geography.Activator;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+
+/**
+ * This class is an {@link NewModifierPageAdapterFactory} that adapts members of
+ * the {@link org.eclipse.stem.core.graph.Graph} model to {@link NewModifierPage}s.
+ */
+public class GraphNewModifierPageAdapterFactory extends GraphAdapterFactory
+		implements NewModifierPageAdapterFactory {
+
+	/**
+	 * Default constructor
+	 */
+	public GraphNewModifierPageAdapterFactory() {
+		super();
+		NewModifierPageAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == NewModifierPageAdapter.class
+				|| super.isFactoryForType(type);
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory#createStaticLabelAdapter()
+	 */
+	@Override
+	public Adapter createStaticLabelAdapter() {
+		return new StaticLabelNewModifierPageAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#createEdgeAdapter()
+	 */
+	@Override
+	public Adapter createEdgeAdapter() {
+		return new EdgeNewModifierPageAdapter();
+	}
+
+	/**
+	 * This class is extended by classes that adapt {@link org.eclipse.stem.core.graph.StaticLabel}s to
+	 * {@link NewModifierPage}s.
+	 */
+	static public class StaticLabelNewModifierPageAdapter extends
+			NewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new StaticLabelNewModifierPage((Identifiable) getTarget());
+		} // createNewModifierPage
+
+	} // StaticLabelNewModifierPageAdapter
+
+	/**
+	 * {@link NewModifierPage} for {@link org.eclipse.stem.core.graph.StaticLabel}s.
+	 */
+	static public class StaticLabelNewModifierPage extends NewModifierPage {
+		/**
+		 * @param target
+		 */
+		public StaticLabelNewModifierPage(Identifiable target) {
+			super(target);
+		}
+
+		@Override
+		protected boolean isUserSpecifiedProperty(
+				final EStructuralFeature feature) {
+			boolean retValue = super.isUserSpecifiedProperty(feature);
+			retValue = retValue
+					&& !feature.equals(GraphPackage.Literals.EDGE_LABEL__EDGE);
+			retValue = retValue
+					&& !feature.equals(GraphPackage.Literals.NODE_LABEL__NODE);
+			retValue = retValue
+					&& !feature
+							.equals(GraphPackage.Literals.LABEL__URI_OF_IDENTIFIABLE_TO_BE_LABELED);
+
+			return retValue;
+		} // isUserSpecifiedProperty
+
+	} // StaticLabelNewModifierPage
+
+	/**
+	 * This class is extended by classes that adapt {@link Edge}s to
+	 * {@link NewModifierPage}s. In reality the {@link Edge} is not adapted,
+	 * instead it adapts its label to a
+	 * {@link StaticLabelNewModifierPageAdapter} and delegates to the adapter.
+	 */
+	static public class EdgeNewModifierPageAdapter extends NewModifierPageAdapter {
+
+		StaticLabelNewModifierPageAdapter labelAdapter = null;
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter
+		 *      #createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			NewModifierPage retValue = null;
+			try {
+				return getLabelAdapter().createNewModifierPage();
+			} catch (NullPointerException npe) {
+				Activator.logError("Can't create modifer for \"" + (((Edge) getTarget()).getLabel()).eClass().getName()+ "\"", null);
+			}
+			return retValue;
+		} // createNewModifierPage
+
+		private NewModifierPageAdapter getLabelAdapter() {
+			if (labelAdapter == null) {
+				final EdgeLabel edgeLabel = ((Edge) getTarget()).getLabel();
+				labelAdapter = (StaticLabelNewModifierPageAdapter) NewModifierPageAdapterFactory.INSTANCE
+						.adapt(edgeLabel, NewModifierPageAdapter.class);
+			}
+			return labelAdapter;
+		}
+
+	} // EdgeNewModifierPageAdapter
+} // GraphNewModifierPageAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/LabelsNewModifierPageAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/LabelsNewModifierPageAdapterFactory.java
new file mode 100644
index 0000000..a64f4f3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/LabelsNewModifierPageAdapterFactory.java
@@ -0,0 +1,88 @@
+// LabelsNewModifierPageAdapterFactory.java
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.definitions.labels.LabelsPackage;
+import org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory;
+import org.eclipse.stem.ui.adapters.newmodifierpage.GraphNewModifierPageAdapterFactory.StaticLabelNewModifierPageAdapter;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+
+/**
+ * This class is an {@link NewModifierPageAdapterFactory} that adapts members of
+ * the Label model to {@link NewModifierPage}s.
+ */
+public class LabelsNewModifierPageAdapterFactory extends LabelsAdapterFactory
+		implements NewModifierPageAdapterFactory {
+
+	/**
+	 * Default constructor
+	 */
+	public LabelsNewModifierPageAdapterFactory() {
+		super();
+		NewModifierPageAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == NewModifierPageAdapter.class
+				|| super.isFactoryForType(type);
+	}
+
+	/**
+	 * @see org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory#createPhysicalRelationshipLabelAdapter()
+	 */
+	@Override
+	public Adapter createPhysicalRelationshipLabelAdapter() {
+		return new PhysicalRelationshipLabelNewModifierPageAdapter();
+	}
+
+	/**
+	 * This class is extended by classes that adapt
+	 * {@link org.eclipse.stem.definitions.labels.PhysicalRelationshipLabel}s to {@link NewModifierPage}s.
+	 */
+	public class PhysicalRelationshipLabelNewModifierPageAdapter extends
+			StaticLabelNewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.GraphNewModifierPageAdapterFactory.StaticLabelNewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new GraphNewModifierPageAdapterFactory.StaticLabelNewModifierPage(
+					(Identifiable) getTarget()) {
+				@Override
+				protected boolean isUserSpecifiedProperty(
+						EStructuralFeature feature) {
+					boolean retValue = super.isUserSpecifiedProperty(feature);
+
+					retValue = retValue
+							&& !(feature
+									.equals(LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__ADJACENT));
+
+					retValue = retValue
+							&& !(feature
+									.equals(LabelsPackage.Literals.RELATIVE_PHYSICAL_RELATIONSHIP_LABEL_VALUE__RELATIONSHIP));
+
+					return retValue;
+				} // isUserSpecifiedProperty
+			};
+		} // createNewModifierPage
+		
+	} // PhysicalRelationshipNewModifierPageAdapter
+} // LabelsNewModifierPageAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapter.java
new file mode 100644
index 0000000..d5437f1
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapter.java
@@ -0,0 +1,39 @@
+// NewModifierPageAdapter.java
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+
+/**
+ * This class is extended by classes that adapt {@link Object}s to
+ * {@link NewModifierPage}s.
+ */
+abstract public class NewModifierPageAdapter extends AdapterImpl implements
+		Adapter {
+
+	/**
+	 * @return a {@link NewModifierPage}
+	 */
+	abstract public NewModifierPage createNewModifierPage();
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(Object type) {
+		return type == NewModifierPageAdapter.class;
+	}
+
+} // NewModifierPageAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapterFactory.java
new file mode 100644
index 0000000..fa14f9e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/NewModifierPageAdapterFactory.java
@@ -0,0 +1,47 @@
+// NewModifierPageAdapterFactory.java
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+/**
+ * This class is an adapter factory that adapts
+ * {@link org.eclipse.stem.core.common.Identifiable}s to
+ * {@link org.eclipse.stem.ui.wizards.NewModifierPage}s.
+ */
+public interface NewModifierPageAdapterFactory {
+
+	/**
+	 * Singleton instance of the adapter factory.
+	 */
+	NewModifierPageAdatperFactoryImpl INSTANCE = new NewModifierPageAdatperFactoryImpl();
+
+	/**
+	 * This class is the {@link ComposedAdapterFactory} that other
+	 * {@link NewModifierPageAdapterFactory}s add themselves to.
+	 */
+	class NewModifierPageAdatperFactoryImpl extends ComposedAdapterFactory
+			implements NewModifierPageAdapterFactory {
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(Object type) {
+			return type == NewModifierPageAdapter.class
+					|| super.isFactoryForType(type);
+		}
+
+	} // IdentifiableNewModifierPageAdatperFactoryImpl
+
+} // NewModifierPageAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/SequencerNewModifierPageAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/SequencerNewModifierPageAdapterFactory.java
new file mode 100644
index 0000000..4a91d2b
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/newmodifierpage/SequencerNewModifierPageAdapterFactory.java
@@ -0,0 +1,109 @@
+// SequencerNewModifierPageAdapterFactory.java
+package org.eclipse.stem.ui.adapters.newmodifierpage;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.sequencer.util.SequencerAdapterFactory;
+import org.eclipse.stem.ui.wizards.NewModifierPage;
+
+/**
+ * This class is an {@link NewModifierPageAdapterFactory} that
+ * adapts {@link org.eclipse.stem.core.sequencer.SequentialSequencer}s to {@link NewModifierPage}s.
+ */
+public class SequencerNewModifierPageAdapterFactory extends
+		SequencerAdapterFactory implements
+		NewModifierPageAdapterFactory {
+
+	/**
+	 * Default Constructor
+	 */
+	public SequencerNewModifierPageAdapterFactory() {
+		super();
+		NewModifierPageAdapterFactory.INSTANCE
+				.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.scenario.util.ScenarioAdapterFactory#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(final Object type) {
+		return type == NewModifierPage.class || super.isFactoryForType(type);
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.util.SequencerAdapterFactory#createSequentialSequencerAdapter()
+	 */
+	@Override
+	public Adapter createSequentialSequencerAdapter() {
+		return new SequentialSequencerNewModifierPageAdapter();
+	}
+
+	/**
+	 * @see org.eclipse.stem.core.sequencer.util.SequencerAdapterFactory#createRealTimeSequencerAdapter()
+	 */
+	@Override
+	public Adapter createRealTimeSequencerAdapter() {
+		return new RealTimeSequencerNewModifierPageAdapter();
+	}
+
+	/**
+	 * This class adapts {@link SequentialSequencer}s to
+	 * {@link NewModifierPage}s
+	 */
+	public static class SequentialSequencerNewModifierPageAdapter extends
+			NewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new NewModifierPage((Identifiable) getTarget()) {
+				@Override
+				protected boolean isUserSpecifiedProperty(
+						@SuppressWarnings("unused") final EStructuralFeature feature) {
+					// TODO isUserSpecifiedProperty
+					return true;
+				}
+			};
+		} // createNewModifierPage
+
+	} // SequentialSequencerNewModifierPageAdapter
+
+	/**
+	 * This class adapts {@link org.eclipse.stem.core.sequencer.RealTimeSequencer}s to {@link NewModifierPage}s
+	 */
+	public static class RealTimeSequencerNewModifierPageAdapter extends
+			NewModifierPageAdapter {
+
+		/**
+		 * @see org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter#createNewModifierPage()
+		 */
+		@Override
+		public NewModifierPage createNewModifierPage() {
+			return new NewModifierPage((Identifiable) getTarget()) {
+				@Override
+				protected boolean isUserSpecifiedProperty(
+						@SuppressWarnings("unused") final EStructuralFeature feature) {
+					// TODO isUserSpecifiedProperty
+					return true;
+				}
+			};
+		} // createNewModifierPage
+
+	} // RealTimeSequencerNewModifierPageAdapter
+
+} // SequencerNewModifierPageAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/DefaultPropertyStringProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/DefaultPropertyStringProviderAdapter.java
new file mode 100644
index 0000000..c4a5379
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/DefaultPropertyStringProviderAdapter.java
@@ -0,0 +1,54 @@
+// DefaultPropertyStringProviderAdapter.java
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This class is the PropertyStringProviderAdapter that is returned by the
+ * {@link PropertyStringProviderAdapterFactory} when no other
+ * {@link PropertyStringProviderAdapter} is found.
+ */
+public class DefaultPropertyStringProviderAdapter extends
+		PropertyStringProviderAdapter {
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider#getPropertyName(org.eclipse.emf.edit.provider.IItemPropertyDescriptor)
+	 */
+	public String getPropertyName(final IItemPropertyDescriptor descriptor) {
+		return "!"
+				+ ((EStructuralFeature) descriptor.getFeature(null)).getName()
+				+ "!";
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider#getPropertyToolTip(org.eclipse.emf.edit.provider.IItemPropertyDescriptor)
+	 */
+	public String getPropertyToolTip(final IItemPropertyDescriptor descriptor) {
+		return "!"
+				+ ((EStructuralFeature) descriptor.getFeature(null)).getName()
+				+ TT_SUFFIX + "!";
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider#getPropertyUnits(org.eclipse.emf.edit.provider.IItemPropertyDescriptor)
+	 */
+	public String getPropertyUnits(final IItemPropertyDescriptor descriptor) {
+		return "!"
+				+ ((EStructuralFeature) descriptor.getFeature(null)).getName()
+				+ UNIT_SUFFIX + "!";
+	}
+
+} // DefaultPropertyStringProviderAdapter
+
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/LabelsPropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/LabelsPropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..39e71ac
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/LabelsPropertyStringProviderAdapterFactory.java
@@ -0,0 +1,109 @@
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory;
+
+/**
+ * This class is used to NLS'd strings for Label properties.
+ */
+public class LabelsPropertyStringProviderAdapterFactory extends
+		LabelsAdapterFactory implements PropertyStringProviderAdapterFactory {
+
+	PropertyStringProviderAdapter adapter = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public LabelsPropertyStringProviderAdapterFactory() {
+		super();
+		PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	}
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isFactoryForType(Object type) {
+		return type == PropertyStringProvider.class
+				|| super.isFactoryForType(type);
+	}
+
+//	/**
+//	 * @see org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory#createAreaLabelAdapter()
+//	 */
+//	@Override
+//	public Adapter createAreaLabelAdapter() {
+//		// Have we created one before?
+//		if (adapter == null) {
+//			// No
+//			adapter = new LabelsPropertyStringProviderAdapter();
+//		} // if we didn't create one before
+//		return adapter;
+//	}
+
+	
+	/**
+	 * @see org.eclipse.stem.definitions.labels.util.LabelsAdapterFactory#createStaticLabelAdapter()
+	 */
+	@Override
+	public Adapter createStaticLabelAdapter() {
+		// Have we created one before?
+		if (adapter == null) {
+			// No
+			adapter = new LabelsPropertyStringProviderAdapter();
+		} // if we didn't create one before
+		return adapter;
+	} // createStaticLabelAdapter
+	
+
+
+	/**
+	 * This class represents
+	 */
+	public static class LabelsPropertyStringProviderAdapter extends
+			PropertyStringProviderAdapter {
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd name of the property to display to the user
+		 */
+		public String getPropertyName(IItemPropertyDescriptor descriptor) {
+			return Messages.getString(((EStructuralFeature) descriptor
+					.getFeature(null)).getName());
+		} // getPropertyName
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd tool tip text that describes the property
+		 */
+		public String getPropertyToolTip(IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return Messages.getString(feature.getName() + TT_SUFFIX);
+		} // getPropertyToolTip
+
+		/**
+		 * @param descriptor
+		 * @return the NLS'd text that represents the units of the property
+		 */
+		public String getPropertyUnits(IItemPropertyDescriptor descriptor) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			return Messages.getString(feature.getName() + UNIT_SUFFIX);
+		} // getPropertyUnits
+
+	} // LabelsPropertyStringProviderAdapter
+} // LabelsPropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/Messages.java
new file mode 100644
index 0000000..dd264bf
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/Messages.java
@@ -0,0 +1,47 @@
+// Messages.java
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.adapters.propertystrings.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProvider.java
new file mode 100644
index 0000000..4f7abf2
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProvider.java
@@ -0,0 +1,53 @@
+// PropertyStringProvider.java
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This interface is implemented by classes that provide NLS'd strings for
+ * {@link org.eclipse.stem.core.common.Identifiable} properties.
+ */
+public interface PropertyStringProvider {
+
+	/**
+	 * This is the suffix appended to the name of a property to create the key
+	 * to extract the tool tip text from the message property file.
+	 */
+	String TT_SUFFIX = "TT"; //$NON-NLS-1$
+
+	/**
+	 * This is the suffix appended to the name of a property to create the key
+	 * to extract the text from the message property file that represents the
+	 * units of a property.
+	 */
+	String UNIT_SUFFIX = "UNIT"; //$NON-NLS-1$
+
+	/**
+	 * @param descriptor
+	 * @return the NLS'd name of the property to display to the user
+	 */
+	String getPropertyName(IItemPropertyDescriptor descriptor);
+
+	/**
+	 * @param descriptor
+	 * @return the NLS'd tool tip text that describes the property
+	 */
+	String getPropertyToolTip(IItemPropertyDescriptor descriptor);
+
+	/**
+	 * @param descriptor
+	 * @return the NLS'd text that represents the units of the property
+	 */
+	String getPropertyUnits(IItemPropertyDescriptor descriptor);
+} // PropertyStringProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapter.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapter.java
new file mode 100644
index 0000000..6119012
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapter.java
@@ -0,0 +1,32 @@
+// PropertyStringProviderAdapter.java
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+
+/**
+ * This class is extended by classes that provide NLS'd string for disease model
+ * properties.
+ */
+public abstract class PropertyStringProviderAdapter extends AdapterImpl
+		implements PropertyStringProvider {
+
+	/**
+	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+	 */
+	@Override
+	public boolean isAdapterForType(final Object type) {
+		return type == PropertyStringProvider.class;
+	}
+
+} // PropertyStringProviderAdapter
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapterFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapterFactory.java
new file mode 100644
index 0000000..60e13b3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/PropertyStringProviderAdapterFactory.java
@@ -0,0 +1,101 @@
+// PropertyStringProviderAdapterFactory.java
+package org.eclipse.stem.ui.adapters.propertystrings;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+
+/**
+ * This interface is implemented by classes that create {@link Adapter}s that
+ * adapt the properties of {@link  org.eclipse.stem.core.common.Identifiable}s to NLS'd {@link String}s.
+ */
+public interface PropertyStringProviderAdapterFactory {
+
+	/**
+	 * This is the singleton instance of the factory that creates
+	 * {@link PropertyStringProvider} instances.
+	 * <p>
+	 * This instance is a {@link ComposedAdapterFactory} which means that it
+	 * collects together other {@link ComposeableAdapterFactory} adapter
+	 * factories. Each class that implements
+	 * {@link PropertyStringProviderAdapterFactory} needs to add itself to this
+	 * instance with a call to
+	 * {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
+	 * This will then allow adapters created by that factory to be found when
+	 * adapting class instances handled by the new factory.
+	 * <p>
+	 * Basically, if you create an EMF model and define a
+	 * {@link PropertyStringProviderAdapterFactory} for it so that the classes
+	 * in that model can be adapted, you need to hook that factory into this one
+	 * so that later when an attempt is made to adapt a class from that model is
+	 * made the associated factory will be found. You can do that by adding the
+	 * line: <code>
+	 * PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
+	 * </code>
+	 * to the default constructor of the new factory after the super call.
+	 * You're not done however, you also have to "force" an instance of the
+	 * class to be created so that the constructor is run. This is typically
+	 * achieved by allocating an instance in the <code>start</code> method of
+	 * the <code>Activator</code> of the plug-in that defines the factory.
+	 */
+	PropertyStringProviderAdapterFactoryImpl INSTANCE = new PropertyStringProviderAdapterFactoryImpl();
+
+	/**
+	 * This class is the implementation of the factory that creates
+	 * {@link PropertyStringProvider}'s
+	 */
+	public static class PropertyStringProviderAdapterFactoryImpl extends
+			ComposedAdapterFactory implements ComposeableAdapterFactory,
+			IChangeNotifier, IDisposable, PropertyStringProviderAdapterFactory {
+
+		private static DefaultPropertyStringProviderAdapter DEFAULT_PROPERTY_STRING_PROVIDER = new DefaultPropertyStringProviderAdapter();
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#adapt(org.eclipse.emf.common.notify.Notifier,
+		 *      java.lang.Object)
+		 */
+		@Override
+		public Adapter adapt(final Notifier target, final Object type) {
+			return returnDefaultIfNeeded(super.adapt(target, type));
+		}
+
+		/**
+		 * @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#adaptNew(org.eclipse.emf.common.notify.Notifier,
+		 *      java.lang.Object)
+		 */
+		@Override
+		public Adapter adaptNew(final Notifier target, final Object type) {
+			return returnDefaultIfNeeded(super.adaptNew(target, type));
+		}
+
+		private Adapter returnDefaultIfNeeded(final Adapter adapter) {
+			if (adapter == null) {
+				// Yes
+				return DEFAULT_PROPERTY_STRING_PROVIDER;
+			} // if
+			return adapter;
+		} // returnDefaultIfNeeded
+
+		/**
+		 * @see org.eclipse.emf.common.notify.AdapterFactory#isFactoryForType(java.lang.Object)
+		 */
+		@Override
+		public boolean isFactoryForType(final Object type) {
+			return type == PropertyStringProvider.class;
+		}
+	} // PropertyStringProviderAdapterFactoryImpl
+} // PropertyStringProviderAdapterFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/messages.properties
new file mode 100644
index 0000000..259c8f9
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/adapters/propertystrings/messages.properties
@@ -0,0 +1,53 @@
+# messages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Area Labels
+area = area
+areaUNIT = km^2
+areaTT = area
+
+# Road Labels
+roadName = Road Name
+roadNameUNIT =
+roadNameTT = The name of the road. 
+roadClass = Class
+roadClassUNIT = 
+roadClassTT = The type of road.
+numberCrossings = Number of Crossings
+numberCrossingsUNIT = crossings
+numberCorssingsTT = The number of crossings.
+
+# Population Labels
+count = Count
+countUNIT = PM
+countTT = The number of population members
+populationIdentifier = Population
+populationIdentifierUNIT = 
+populationIdentifierTT = The name of the population.
+name = Name
+nameUNIT = 
+nameTT = The name
+populatedArea = Area
+populatedAreaUNIT = km^2
+populatedAreaTT = The value to use when computing the population density (overrides region area).
+
+# Relationships
+borderLength = Border Length
+borderLengthUNIT = km
+borderLengthTT = The length of the border between two geographic regions.
+adjacent = Adjacent
+adjacentUNIT = 
+adjacentTT = If True then the two nodes are adjacent
+relationship = Relationship
+relationshipUNIT = 
+relationshipTT = The type of relationship
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableActionBarContributor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableActionBarContributor.java
new file mode 100644
index 0000000..03a1839
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableActionBarContributor.java
@@ -0,0 +1,396 @@
+// IdentifiableActionBarContributor.java
+package org.eclipse.stem.ui.editors;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This class the action bar contributor for the Identifiable model editor. It
+ * is basically a copy of the EMF generated version of this code. It has been
+ * slightly modified by making some strings more generic.
+ */
+public class IdentifiableActionBarContributor extends
+		EditingDomainActionBarContributor implements ISelectionChangedListener {
+
+	/**
+	 * This keeps track of the active editor.
+	 */
+	protected IEditorPart activeEditorPart;
+
+	/**
+	 * This keeps track of the current selection provider.
+	 */
+	protected ISelectionProvider selectionProvider;
+
+	/**
+	 * This action opens the Properties view.
+	 */
+	protected IAction showPropertiesViewAction = new Action(
+			"Show &Properties View") //$NON-NLS-1$
+	{
+		@Override
+		public void run() {
+			try {
+				getPage().showView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
+			} catch (PartInitException exception) {
+				Activator.logError("Problem showing property view", exception);
+			}
+		}
+	};
+
+	/**
+	 * This action refreshes the viewer of the current editor if the editor
+	 * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+	 */
+	protected IAction refreshViewerAction = new Action("&Refresh") //$NON-NLS-1$
+	{
+		@Override
+		public boolean isEnabled() {
+			return activeEditorPart instanceof IViewerProvider;
+		}
+
+		@Override
+		public void run() {
+			if (activeEditorPart instanceof IViewerProvider) {
+				Viewer viewer = ((IViewerProvider) activeEditorPart)
+						.getViewer();
+				if (viewer != null) {
+					viewer.refresh();
+				}
+			}
+		}
+	};
+
+	/**
+	 * This will contain one
+	 * {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to
+	 * each descriptor generated for the current selection by the item provider.
+	 */
+	protected Collection<IAction> createChildActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be
+	 * added for CreateChild actions.
+	 */
+	protected IMenuManager createChildMenuManager;
+
+	/**
+	 * This will contain one
+	 * {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding
+	 * to each descriptor generated for the current selection by the item
+	 * provider.
+	 */
+	protected Collection<IAction> createSiblingActions;
+
+	/**
+	 * This is the menu manager into which menu contribution items should be
+	 * added for CreateSibling actions.
+	 */
+	protected IMenuManager createSiblingMenuManager;
+
+	/**
+	 * This creates an instance of the contributor.
+	 */
+	public IdentifiableActionBarContributor() {
+		super(ADDITIONS_LAST_STYLE);
+		loadResourceAction = new LoadResourceAction();
+		validateAction = new ValidateAction();
+		controlAction = new ControlAction();
+	} // IdentifiableActionBarContributor
+
+	/**
+	 * This adds Separators for editor additions to the tool bar.
+	 */
+	@Override
+	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		toolBarManager.add(new Separator("identifiable-settings")); //$NON-NLS-1$
+		toolBarManager.add(new Separator("identifiable-additions")); //$NON-NLS-1$
+	} // contributeToToolBar
+
+	/**
+	 * This adds to the menu bar a menu and some separators for editor
+	 * additions, as well as the sub-menus for object creation items.
+	 */
+	@Override
+	public void contributeToMenu(IMenuManager menuManager) {
+		super.contributeToMenu(menuManager);
+
+		IMenuManager submenuManager = new MenuManager(
+				"Identifiable Editor", "org.eclipse.stem.ui.identifiableMenuID"); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("additions", submenuManager); //$NON-NLS-1$
+		submenuManager.add(new Separator("settings")); //$NON-NLS-1$
+		submenuManager.add(new Separator("actions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions")); //$NON-NLS-1$
+		submenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
+
+		// Prepare for CreateChild item addition or removal.
+		createChildMenuManager = new MenuManager("&New Child"); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createChildMenuManager); //$NON-NLS-1$
+
+		// Prepare for CreateSibling item addition or removal.
+		createSiblingMenuManager = new MenuManager("&New Sibling"); //$NON-NLS-1$
+		submenuManager.insertBefore("additions", createSiblingMenuManager); //$NON-NLS-1$
+
+		// Force an update because Eclipse hides empty menus now.
+		submenuManager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager menuManager) {
+				menuManager.updateAll(true);
+			}
+		});
+
+		addGlobalActions(submenuManager);
+	} // contributeToMenu
+
+	/**
+	 * When the active editor changes, this remembers the change and registers
+	 * with it as a selection provider.
+	 */
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		activeEditorPart = part;
+
+		// Switch to the new selection provider.
+		//
+		if (selectionProvider != null) {
+			selectionProvider.removeSelectionChangedListener(this);
+		}
+		if (part == null) {
+			selectionProvider = null;
+		} else {
+			selectionProvider = part.getSite().getSelectionProvider();
+			selectionProvider.addSelectionChangedListener(this);
+
+			// Fake a selection changed event to update the menus.
+			//
+			if (selectionProvider.getSelection() != null) {
+				selectionChanged(new SelectionChangedEvent(selectionProvider,
+						selectionProvider.getSelection()));
+			}
+		}
+	}
+
+	/**
+	 * This implements
+	 * {@link org.eclipse.jface.viewers.ISelectionChangedListener}, handling
+	 * {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for
+	 * the children and siblings that can be added to the selected object and
+	 * updating the menus accordingly.
+	 * 
+	 * @param event
+	 *            the {@link SelectionChangedEvent}
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		// Remove any menu items for old selection.
+		//
+		if (createChildMenuManager != null) {
+			depopulateManager(createChildMenuManager, createChildActions);
+		}
+		if (createSiblingMenuManager != null) {
+			depopulateManager(createSiblingMenuManager, createSiblingActions);
+		}
+
+		// Query the new selection for appropriate new child/sibling descriptors
+		Collection<?> newChildDescriptors = null;
+		Collection<?> newSiblingDescriptors = null;
+
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection
+				&& ((IStructuredSelection) selection).size() == 1) {
+			Object object = ((IStructuredSelection) selection)
+					.getFirstElement();
+
+			EditingDomain domain = ((IEditingDomainProvider) activeEditorPart)
+					.getEditingDomain();
+
+			newChildDescriptors = domain.getNewChildDescriptors(object, null);
+			newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+		}
+
+		// Generate actions for selection; populate and redraw the menus.
+		createChildActions = generateCreateChildActions(newChildDescriptors,
+				selection);
+		createSiblingActions = generateCreateSiblingActions(
+				newSiblingDescriptors, selection);
+
+		if (createChildMenuManager != null) {
+			populateManager(createChildMenuManager, createChildActions, null);
+			createChildMenuManager.update(true);
+		}
+		if (createSiblingMenuManager != null) {
+			populateManager(createSiblingMenuManager, createSiblingActions,
+					null);
+			createSiblingMenuManager.update(true);
+		}
+	} // selectionChanged
+
+	/**
+	 * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction}
+	 * for each object in <code>descriptors</code>, and returns the
+	 * collection of these actions.
+	 */
+	protected Collection<IAction> generateCreateChildActions(
+			Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateChildAction(activeEditorPart, selection,
+						descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This generates a
+	 * {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each
+	 * object in <code>descriptors</code>, and returns the collection of
+	 * these actions.
+	 */
+	protected Collection<IAction> generateCreateSiblingActions(
+			Collection<?> descriptors, ISelection selection) {
+		Collection<IAction> actions = new ArrayList<IAction>();
+		if (descriptors != null) {
+			for (Object descriptor : descriptors) {
+				actions.add(new CreateSiblingAction(activeEditorPart,
+						selection, descriptor));
+			}
+		}
+		return actions;
+	}
+
+	/**
+	 * This populates the specified <code>manager</code> with
+	 * {@link org.eclipse.jface.action.ActionContributionItem}s based on the
+	 * {@link org.eclipse.jface.action.IAction}s contained in the
+	 * <code>actions</code> collection, by inserting them before the specified
+	 * contribution item <code>contributionID</code>. If
+	 * <code>contributionID</code> is <code>null</code>, they are simply
+	 * added.
+	 */
+	protected void populateManager(IContributionManager manager,
+			Collection<? extends IAction> actions, String contributionID) {
+		if (actions != null) {
+			for (IAction action : actions) {
+				if (contributionID != null) {
+					manager.insertBefore(contributionID, action);
+				} else {
+					manager.add(action);
+				}
+			}
+		}
+	} // populateManager
+
+	/**
+	 * This removes from the specified <code>manager</code> all
+	 * {@link org.eclipse.jface.action.ActionContributionItem}s based on the
+	 * {@link org.eclipse.jface.action.IAction}s contained in the
+	 * <code>actions</code> collection.
+	 */
+	protected void depopulateManager(IContributionManager manager,
+			Collection<? extends IAction> actions) {
+		if (actions != null) {
+			IContributionItem[] items = manager.getItems();
+			for (int i = 0; i < items.length; i++) {
+				// Look into SubContributionItems
+				IContributionItem contributionItem = items[i];
+				while (contributionItem instanceof SubContributionItem) {
+					contributionItem = ((SubContributionItem) contributionItem)
+							.getInnerItem();
+				}
+
+				// Delete the ActionContributionItems with matching action.
+				if (contributionItem instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem) contributionItem)
+							.getAction();
+					if (actions.contains(action)) {
+						manager.remove(contributionItem);
+					}
+				}
+			}
+		}
+	} // depopulateManager
+
+	/**
+	 * This populates the pop-up menu before it appears.
+	 */
+	@Override
+	public void menuAboutToShow(IMenuManager menuManager) {
+		super.menuAboutToShow(menuManager);
+		MenuManager submenuManager = null;
+
+		submenuManager = new MenuManager("New Child"); //$NON-NLS-1$
+		populateManager(submenuManager, createChildActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+
+		submenuManager = new MenuManager("New Sibling"); //$NON-NLS-1$
+		populateManager(submenuManager, createSiblingActions, null);
+		menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
+	} // menuAboutToShow
+
+	/**
+	 * This inserts global actions before the "additions-end" separator.
+	 */
+	@Override
+	protected void addGlobalActions(IMenuManager menuManager) {
+		menuManager.insertAfter("additions-end", new Separator("ui-actions")); //$NON-NLS-1$ //$NON-NLS-2$
+		menuManager.insertAfter("ui-actions", showPropertiesViewAction); //$NON-NLS-1$
+
+		refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+		menuManager.insertAfter("ui-actions", refreshViewerAction); //$NON-NLS-1$
+
+		// The actions added are Validate and Load Resource
+		// super.addGlobalActions(menuManager);
+	} // addGlobalActions
+
+	/**
+	 * This ensures that a delete action will clean up all references to deleted
+	 * objects.
+	 */
+	@Override
+	protected boolean removeAllReferencesOnDelete() {
+		return true;
+	} // removeAllReferencesOnDelete
+
+} // IdentifiableActionBarContributor
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableEditor.java
new file mode 100644
index 0000000..89b9a2f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/IdentifiableEditor.java
@@ -0,0 +1,693 @@
+// IdentifiableEditor.java
+package org.eclipse.stem.ui.editors;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.command.DeleteCommand;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.provider.CommonItemProviderAdapterFactory;
+import org.eclipse.stem.core.experiment.provider.ExperimentItemProviderAdapterFactory;
+import org.eclipse.stem.core.graph.provider.GraphItemProviderAdapterFactory;
+import org.eclipse.stem.core.model.provider.ModelItemProviderAdapterFactory;
+import org.eclipse.stem.core.scenario.provider.ScenarioItemProviderAdapterFactory;
+import org.eclipse.stem.core.sequencer.provider.SequencerItemProviderAdapterFactory;
+import org.eclipse.stem.data.geography.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.properties.PropertySheet;
+
+/**
+ * This class is the super-class of all editors that edit {@link org.eclipse.stem.core.common.Identifiable}s.
+ */
+abstract public class IdentifiableEditor extends MultiPageEditorPart implements
+		IMenuListener, ISelectionProvider, IEditingDomainProvider {
+
+	/**
+	 * This map holds the options for saving resources.
+	 */
+	final protected static Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+	static {
+		// Only save things that have changed.
+		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,
+				Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+	} // static
+
+	/**
+	 * This is the editor's {@link EditingDomain} which is basically the
+	 * combination of a {@link ResourceSet} and a {@link CommandStack}. It
+	 * keeps track of what is being edited and the stack of {@link Command}s
+	 * that made the changes.
+	 */
+	protected AdapterFactoryEditingDomain editingDomain;
+
+	/**
+	 * This adapter factory will be composed of the Identifiable item provider
+	 * factories.
+	 * 
+	 * @see #createAdapterFactory()
+	 */
+	protected ComposedAdapterFactory adapterFactory;
+
+	/**
+	 * The {@link Viewer} currently displayed
+	 */
+	protected Viewer currentViewer;
+
+	/**
+	 * This is the {@link WorkspaceModifyOperation} that saves the modified
+	 * {@link Resource}s.
+	 */
+	final private WorkspaceModifyOperation saveOperation = new WorkspaceModifyOperation() {
+		/**
+		 * @param monitor
+		 */
+		@Override
+		protected void execute(final IProgressMonitor monitor) {
+
+			for (final Resource resource : editingDomain.getResourceSet()
+					.getResources()) {
+				// Should this Resource be saved?
+				if (resource.getContents().isEmpty() == false
+						&& editingDomain.isReadOnly(resource) == false) {
+					// Yes
+					try {
+						resource.save(saveOptions);
+					} // try
+					catch (final Exception e) {
+						Activator.logError("Problem saving", e);
+					} // catch Exception
+				} // if save resource
+			} // for each Resource
+
+		} // execute
+	}; // saveOperation
+
+	/**
+	 * This listens for when the outline becomes active.
+	 */
+	@SuppressWarnings("unused")
+	protected IPartListener partListener = new IPartListener() {
+
+		public void partActivated(IWorkbenchPart part) {
+			// Basically there are three ways the editor gets "activated",
+			// either the Content Outline view or the Property Sheet views are
+			// activated with "our" page being displayed, or the editor itself
+			// is activated. We skim through the possibilities below, ignoring
+			// any other possibilities.
+
+			// Is the content outline view being activated?
+			if (part instanceof ContentOutline) {
+				// Yes
+				// Is the current page in the Content Outline view our page?
+				// if (((ContentOutline) part).getCurrentPage() ==
+				// contentOutlinePage) {
+				// // Yes
+				// getActionBarContributor().setActiveEditor(
+				// IdentifiableEditor.this);
+				// setCurrentViewer(contentOutlineViewer);
+				// } // if our outline page
+
+			} // if content outline view activated
+			// Is the current property sheet view being activated?
+			else if (part instanceof PropertySheet) {
+				// Yes
+				// Is the current page in the property view our page?
+				// if (((PropertySheet) part).getCurrentPage() ==
+				// propertySheetPage) {
+				// // Yes
+				// getActionBarContributor().setActiveEditor(
+				// IdentifableEditor.this);
+				// handleActivate();
+				// } // if our property page
+			} // if property sheet view
+			// Is this editor being activated?
+			else if (part == IdentifiableEditor.this) {
+				// Yes
+				handleActivate();
+			} // if
+
+		} // partActivated
+
+		public void partBroughtToTop(IWorkbenchPart part) {
+			// Ignore
+		}
+
+		public void partClosed(IWorkbenchPart part) {
+			// Ignore
+		}
+
+		public void partDeactivated(IWorkbenchPart part) {
+			// Ignore
+		}
+
+		public void partOpened(IWorkbenchPart part) {
+			// Ignore
+		}
+	}; // partListener
+
+	/**
+	 * This is the {@link ISelectionChangedListener} for the editor. It is
+	 * always listening to the {@link Viewer} referenced by
+	 * {@link #currentViewer}. The method {@link #setCurrentViewer(Viewer)}
+	 * maintains the association.
+	 */
+	private final ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {
+		public void selectionChanged(SelectionChangedEvent event) {
+			setSelection(event.getSelection());
+		}
+	}; // selectionChangedListener
+
+	/**
+	 * This keeps track of all the
+	 * {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are
+	 * listening to this editor.
+	 */
+	protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
+
+	/**
+	 * The editor's current selection.
+	 * 
+	 * @se {@link #setSelection(ISelection)}
+	 * @see #getSelection()
+	 */
+	protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+	/**
+	 * Default Constructor
+	 */
+	public IdentifiableEditor() {
+		super();
+		adapterFactory = createAdapterFactory();
+		editingDomain = createEditingDomain(adapterFactory);
+	} // IdentifiableEditor
+
+	/**
+	 * @return the {@link AdapterFactory} that will provide the
+	 *         {@link ItemProvider}s needed to adapt the {@link Identifiable}s
+	 *         for the editor.
+	 */
+	protected ComposedAdapterFactory createAdapterFactory() {
+		final ComposedAdapterFactory retValue = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+		retValue.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new CommonItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new ExperimentItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new GraphItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new ModelItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new ScenarioItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new SequencerItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+		retValue.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+		return retValue;
+	} // createAdapterFactory
+
+	/**
+	 * @param adapterFactory
+	 *            the {@link AdapterFactory} that will be used to create the
+	 *            {@link EditingDomain}.
+	 * @return an {@link EditingDomain}
+	 */
+	private AdapterFactoryEditingDomain createEditingDomain(
+			final AdapterFactory adapterFactory) {
+
+		// Create the command stack for the edit commands
+		final BasicCommandStack commandStack = new BasicCommandStack();
+
+		// Add a listener to the command stack so we can track which objects are
+		// changed by the command and then use them as the selection.
+
+		commandStack.addCommandStackListener(new CommandStackListener() {
+			@SuppressWarnings("synthetic-access")
+			public void commandStackChanged(final EventObject event) {
+				getContainer().getDisplay().asyncExec(new Runnable() {
+					public void run() {
+						// Tell any listeners that the editor is now "dirty"
+						firePropertyChange(IEditorPart.PROP_DIRTY);
+
+						final Command mostRecentCommand = ((CommandStack) event
+								.getSource()).getMostRecentCommand();
+						// Was there a command?
+						if (mostRecentCommand != null) {
+							// Yes
+							setSelectionToViewer(mostRecentCommand
+									.getAffectedObjects());
+						} // if command
+
+						// Refresh the property sheet
+						// if (propertySheetPage != null) {
+						// // Yes
+						//							
+						// } // if
+					} // run
+
+					private void setSelectionToViewer(
+							final Collection<?> selection) {
+						// Anything there?
+						if (selection != null && selection.isEmpty() == false) {
+							// Yes
+							new Runnable() {
+								public void run() {
+									if (currentViewer != null) {
+										// Yes
+										currentViewer
+												.setSelection(new StructuredSelection(
+														selection));
+									} // if
+								} // run
+							}.run();
+						} // if
+					} // setSelectionToViewer
+				});
+			}
+		});
+
+		return new AdapterFactoryEditingDomain(adapterFactory, commandStack,
+				new HashMap<Resource, Boolean>()) {
+					@Override
+					public Command createCommand(
+							Class<? extends Command> commandClass,
+							CommandParameter commandParameter) {
+						if (commandClass == DeleteCommand.class) {
+							// Yes
+//							IStructuredSelection ss= (IStructuredSelection) currentViewer.getSelection();
+//							
+//							ITreeSelection obj = (ITreeSelection)  editorSelection;
+//							TreePath[] paths = obj.getPaths();
+							return super.createCommand(commandClass, commandParameter);
+						} // if 
+						return super.createCommand(commandClass, commandParameter);
+					}};
+	} // createEditingDomain
+
+	/**
+	 * @see org.eclipse.ui.part.MultiPageEditorPart#init(org.eclipse.ui.IEditorSite,
+	 *      org.eclipse.ui.IEditorInput)
+	 */
+	@Override
+	public void init(IEditorSite site, IEditorInput input) {
+		setSite(site);
+		setInput(input);
+		setPartName(input.getName());
+		site.setSelectionProvider(this);
+		site.getPage().addPartListener(partListener);
+		// ResourcesPlugin.getWorkspace().addResourceChangeListener(
+		// resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+	} // init
+
+	/**
+	 * @see org.eclipse.ui.part.MultiPageEditorPart#createPages()
+	 */
+	@Override
+	protected void createPages() {
+		// Load the Identifiable to be edited
+		loadIdentifiable();
+
+		// Did anything actually get loaded?
+		if (editingDomain.getResourceSet().getResources().isEmpty() == false
+				&& editingDomain.getResourceSet().getResources().get(0)
+						.getContents().isEmpty() == false) {
+			// Yes
+			// We create a page that is a tree view of the Identifiable
+			final Tree tree = new Tree(getContainer(), SWT.MULTI);
+			final TreeViewer treeViewer = new TreeViewer(tree);
+			setCurrentViewer(treeViewer);
+
+			treeViewer.setContentProvider(new AdapterFactoryContentProvider(
+					adapterFactory));
+			treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(
+					adapterFactory));
+			treeViewer.setInput(editingDomain.getResourceSet().getResources()
+					.get(0));
+			// treeViewer.setSelection(selection);
+
+			new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+			createContextMenu(treeViewer);
+
+			// Support for dragging and dropping Identifiables
+			addDragNDropSupport(treeViewer);
+			
+			final int pageIndex = addPage(tree);
+			setPageText(pageIndex, "tree editor");
+
+			// Ok now it's time to create and add any pages that are specific to
+			// the Identifiable .
+			createIdentifiableSpecificPages();
+
+			// Switch to the active page.
+			getSite().getShell().getDisplay().asyncExec(new Runnable() {
+				@SuppressWarnings("synthetic-access")
+				public void run() {
+					setActivePage(0);
+				}
+			});
+		} // if
+	} // createPages
+
+	/**
+	 * This method loads a resource into the editor's {@link EditingDomain}
+	 * {@link ResourceSet}.
+	 * <p>
+	 * This is basically the same as method "createModel" the generated code
+	 */
+	private void loadIdentifiable() {
+		final URI resourceURI = EditUIUtil.getURI(getEditorInput());
+		@SuppressWarnings("unused")
+		Exception exception = null;
+		@SuppressWarnings("unused")
+		Resource resource = null;
+
+		try {
+			// First we try to demand load the resource -> true
+			resource = editingDomain.getResourceSet().getResource(resourceURI,
+					true);
+		} catch (final Exception e) {
+			// Remember the exception
+			exception = e;
+			// That didn't work, so don't demand load the resource -> false
+			resource = editingDomain.getResourceSet().getResource(resourceURI,
+					false);
+		} // catch Exception
+		// Need code here to analyze the exception if there was one. see
+		// createModel()
+	} // loadIdentifiable
+
+	/**
+	 * This makes sure that one content {@link Viewer}, either the one for the
+	 * current page in the editor, or the one in the outline view, if it has
+	 * focus, is the current one. Basically, this code maintains which
+	 * {@link Viewer} {@link #selectionChangedListener} is listening to.
+	 * 
+	 * @param newViewer
+	 *            the new {@link Viewer}
+	 */
+	private void setCurrentViewer(Viewer newViewer) {
+		// Is the new viewer different from the current one?
+		if (newViewer != currentViewer) {
+			// Yes
+			// Is there a current (i.e. old) viewer?
+			if (currentViewer != null) {
+				// Yes
+				// We're not listening to it any more
+				currentViewer
+						.removeSelectionChangedListener(selectionChangedListener);
+			} // if
+
+			// Is there a new viewer?
+			if (newViewer != null) {
+				// Yes
+				// We're listening to it now
+				newViewer.addSelectionChangedListener(selectionChangedListener);
+			} // if
+
+			currentViewer = newViewer;
+
+			// Now we need to set the selection in the editor based on the new
+			// viewer's current selection.
+			setSelection(newViewer == null ? StructuredSelection.EMPTY
+					: newViewer.getSelection());
+		} // if different viewer
+	} // setCurrentViewer
+
+	private void createContextMenu(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp");
+		contextMenu.add(new Separator("additions"));
+
+		// I think this is clearing the menu in preparation for being recreated
+		// just before it is displayed.
+		contextMenu.setRemoveAllWhenShown(true);
+
+		// Register to have our menuAboutToShow() method be called just before
+		// the context menu is displayed.
+		contextMenu.addMenuListener(this);
+
+		final Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(contextMenu, viewer);
+
+
+	} // createContextMenu
+
+	private void addDragNDropSupport(StructuredViewer viewer) {
+		final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		final Transfer[] transfers = new Transfer[] {
+				LocalTransfer.getInstance(), TextTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(
+				viewer));
+		viewer.addDropSupport(dndOperations, transfers,
+
+		new EditingDomainViewerDropAdapter(editingDomain, viewer) {
+			@Override
+			public void dragEnter(DropTargetEvent event) {
+				// We make all operations a drop link
+				event.detail = DND.DROP_LINK;
+				super.dragEnter(event);
+			}
+
+			/**
+			 * We override the super method because the IdentifiablePluginView
+			 * provides a Collections of Identifiables, rather than an
+			 * IStructureSelction of IdentifiableDelegates.
+			 */
+			@Override
+			protected Collection<?> extractDragSource(Object object) {
+				if (object instanceof Collection) {
+					// Yes
+					return (Collection<?>) object;
+				} // if
+				return super.extractDragSource(object);
+			}
+		});
+	} // addDragNDropSupport
+
+	/**
+	 * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager)
+	 */
+	public void menuAboutToShow(IMenuManager menuManager) {
+		((IMenuListener) getEditorSite().getActionBarContributor())
+				.menuAboutToShow(menuManager);
+	} // menuAboutToShow
+
+	protected EditingDomainActionBarContributor getActionBarContributor() {
+		return (EditingDomainActionBarContributor) getEditorSite()
+				.getActionBarContributor();
+	} // getActionBarContributor
+
+	/**
+	 * This handles the activation of the editor or it's associated content
+	 * outline or property sheet view.
+	 */
+	protected void handleActivate() {
+		// Recompute the read only state?
+		if (editingDomain.getResourceToReadOnlyMap() != null) {
+			// Yes
+			editingDomain.getResourceToReadOnlyMap().clear();
+
+			// Refresh any actions that may become enabled or disabled
+			setSelection(getSelection());
+		} // if
+
+		// This is not finished yet, the removed and changed resources are not
+		// initialized.
+	} // handleActivate
+
+	/**
+	 * This method is overridden by extending classes so that they can provide a
+	 * page to the editor that is specific to the type of {@link Identifiable}
+	 * they are editing.
+	 */
+	protected void createIdentifiableSpecificPages() {
+		// Nothing
+	} // createIdentifiableSpecificPages
+
+	
+	/**
+	 * @see org.eclipse.emf.edit.domain.IEditingDomainProvider#getEditingDomain()
+	 */
+	public EditingDomain getEditingDomain() {
+		return editingDomain;
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	@Override
+	public void doSave(
+			@SuppressWarnings("unused") final IProgressMonitor monitor) {
+		try {
+			// First "true" -> fork, second "false" -> cancelable
+			new ProgressMonitorDialog(getSite().getShell()).run(true, false,
+					saveOperation);
+			((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+			firePropertyChange(IEditorPart.PROP_DIRTY);
+		} catch (final Exception e) {
+			Activator.logError("Problem saving", e);
+		} // catch Exception
+	} // doSave
+
+	/**
+	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+	 */
+	@Override
+	public void doSaveAs() {
+		final SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+		saveAsDialog.open();
+		final IPath path = saveAsDialog.getResult();
+		// Did we get a path?
+		if (path != null) {
+			// Yes
+			final IFile file = ResourcesPlugin.getWorkspace().getRoot()
+					.getFile(path);
+			// Did we get a valid file?
+			if (file != null) {
+				// Yes
+				doSaveAs(URI.createPlatformResourceURI(file.getFullPath()
+						.toString(), true), new FileEditorInput(file));
+			} // if
+		} // if
+
+	} // doSaveAs
+
+	private void doSaveAs(final URI uri, final FileEditorInput fileEditorInput) {
+		// The URI of the resource has changed, update
+		(editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+		// Set the editor's input to the new FileEditorInput
+		setInputWithNotify(fileEditorInput);
+		setPartName(fileEditorInput.getName());
+
+		final EditingDomainActionBarContributor edac = (EditingDomainActionBarContributor) getEditorSite()
+				.getActionBarContributor();
+
+		final IStatusLineManager islm = edac.getActionBars()
+				.getStatusLineManager();
+
+		// Get a progress bar for the save....
+		final IProgressMonitor progressMonitor = islm != null ? islm
+				.getProgressMonitor() : new NullProgressMonitor();
+
+		// Now save...
+		doSave(progressMonitor);
+	} // doSaveAs
+
+	/**
+	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+	 */
+	@Override
+	public boolean isSaveAsAllowed() {
+		return true;
+	} // isSaveAsAllowed
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to
+	 * return this editor's overall selection.
+	 * 
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
+	 */
+	public ISelection getSelection() {
+		return editorSelection;
+	} // getSelection
+
+	/**
+	 * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to
+	 * set this editor's overall selection. Calling this result will notify the
+	 * listeners.
+	 * 
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(ISelection selection) {
+		editorSelection = selection;
+
+		for (ISelectionChangedListener listener : selectionChangedListeners) {
+			listener
+					.selectionChanged(new SelectionChangedEvent(this, selection));
+		} // for each ISelectionChangedListener
+		// setStatusLineManager(selection);
+	} // setSelection
+
+} // IdentifiableEditor
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/ScenarioEditor.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/ScenarioEditor.java
new file mode 100644
index 0000000..15840dd
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/editors/ScenarioEditor.java
@@ -0,0 +1,30 @@
+// ScenarioEditor.java
+package org.eclipse.stem.ui.editors;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is an {@link org.eclipse.ui.part.EditorPart} that edits
+ * {@link org.eclipse.stem.core.scenario.Scenario}s.
+ */
+public class ScenarioEditor extends IdentifiableEditor {
+
+	/**
+	 * @see org.eclipse.stem.ui.editors.IdentifiableEditor#createIdentifiableSpecificPages()
+	 */
+	@Override
+	protected void createIdentifiableSpecificPages() {
+		// TODO Auto-generated method stub
+		super.createIdentifiableSpecificPages();
+	}
+
+} // ScenarioEditor
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/EditorActionProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/EditorActionProvider.java
new file mode 100644
index 0000000..f61b5da
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/EditorActionProvider.java
@@ -0,0 +1,351 @@
+package org.eclipse.stem.ui.handlers;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.action.AbstractAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.events.HelpListener;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerSite;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * {@link Action} that opens the editor when an {@link Identifiable} is
+ * double-clicked in the project explorer.
+ */
+@SuppressWarnings("unused")
+public class EditorActionProvider extends CommonActionProvider {
+
+	IAction openAction = null;
+
+	/**
+	 * Default Constructor
+	 */
+	public EditorActionProvider() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.ICommonActionExtensionSite)
+	 */
+	@Override
+	public void init(ICommonActionExtensionSite site) {
+		ICommonViewerSite aSite = site.getViewSite();
+		if (aSite instanceof ICommonViewerWorkbenchSite) {
+			ICommonViewerWorkbenchSite cvws = (ICommonViewerWorkbenchSite) aSite;
+			openAction = new OpenIdentifiableAction(cvws.getPage(), cvws
+					.getSelectionProvider());
+		} // if
+	} // init
+
+	/**
+	 * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+	 */
+	@Override
+	public void fillActionBars(IActionBars actionBars) {
+		if (openAction.isEnabled()) {
+			actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN,
+					openAction);
+		}
+	}
+
+	/**
+	 * The {@link Action} that opens an editor on the selected
+	 * {@link Identifiable}.
+	 */
+	public static class OpenIdentifiableAction extends AbstractAction implements
+			IAction {
+
+		private final IWorkbenchPage page;
+		private final ISelectionProvider selectionProvider;
+		private Identifiable selectedIdentifiable;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param page
+		 * @param selectionProvider
+		 */
+		public OpenIdentifiableAction(IWorkbenchPage page,
+				ISelectionProvider selectionProvider) {
+			this.page = page;
+			this.selectionProvider = selectionProvider;
+		} // OpenIdentifiableAction
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#run()
+		 */
+		public void run() {
+			final IPath path = new Path(selectedIdentifiable.getURI()
+					.toPlatformString(true));
+			final IFile file = ResourcesPlugin.getWorkspace().getRoot()
+					.getFile(path);
+
+			// Found the file?
+			if (file != null) {
+				// Yes
+				try {
+					IDE.openEditor(page, file, true);
+				} catch (PartInitException e) {
+					Activator.logError("Problem opening editor", e);
+				}
+			} // if file found
+			else {
+				Activator.logError("Could not find file \"" + path.toString()
+						+ "\"", null);
+			}
+
+		} // run
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#isEnabled()
+		 */
+		public boolean isEnabled() {
+			boolean retValue = false;
+			ISelection selection = selectionProvider.getSelection();
+			// Anything selected?
+			if (!selection.isEmpty()) {
+				IStructuredSelection sSelection = (IStructuredSelection) selection;
+				if (sSelection.size() == 1
+						&& sSelection.getFirstElement() instanceof Identifiable) {
+					// Yes
+					selectedIdentifiable = (Identifiable) sSelection
+							.getFirstElement();
+					retValue = true;
+				}
+			}
+			return retValue;
+		} // isEnabled
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getAccelerator()
+		 */
+		public int getAccelerator() {
+			return 0;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getActionDefinitionId()
+		 */
+		public String getActionDefinitionId() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getDescription()
+		 */
+		public String getDescription() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getDisabledImageDescriptor()
+		 */
+		public ImageDescriptor getDisabledImageDescriptor() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getHelpListener()
+		 */
+		public HelpListener getHelpListener() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getHoverImageDescriptor()
+		 */
+		public ImageDescriptor getHoverImageDescriptor() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getId()
+		 */
+		public String getId() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getImageDescriptor()
+		 */
+		public ImageDescriptor getImageDescriptor() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getMenuCreator()
+		 */
+		public IMenuCreator getMenuCreator() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getStyle()
+		 */
+		public int getStyle() {
+			return 0;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getText()
+		 */
+		public String getText() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#getToolTipText()
+		 */
+		public String getToolTipText() {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#isChecked()
+		 */
+		public boolean isChecked() {
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#isHandled()
+		 */
+		public boolean isHandled() {
+			// TODO Auto-generated method stub
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#runWithEvent(org.eclipse.swt.widgets.Event)
+		 */
+		public void runWithEvent(Event event) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setAccelerator(int)
+		 */
+		public void setAccelerator(int keycode) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setActionDefinitionId(java.lang.
+		 *      String)
+		 */
+		public void setActionDefinitionId(String id) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setChecked(boolean)
+		 */
+		public void setChecked(boolean checked) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setDescription(java.lang.String)
+		 */
+		public void setDescription(String text) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setDisabledImageDescriptor(org.eclipse
+		 *      .jface.resource.ImageDescriptor)
+		 */
+		public void setDisabledImageDescriptor(ImageDescriptor newImage) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setEnabled(boolean)
+		 */
+		public void setEnabled(boolean enabled) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setHelpListener(org.eclipse.swt.
+		 *      events.HelpListener)
+		 */
+		public void setHelpListener(HelpListener listener) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setHoverImageDescriptor(org.eclipse.jface.resource.ImageDescriptor)
+		 */
+		public void setHoverImageDescriptor(ImageDescriptor newImage) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setId(java.lang.String)
+		 */
+		public void setId(String id) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setImageDescriptor(org.eclipse.jface.resource.ImageDescriptor)
+		 */
+		public void setImageDescriptor(ImageDescriptor newImage) {
+			// Nothing
+		}
+
+		/**
+		 * @param creator
+		 * @see org.eclipse.jface.action.IAction#setMenuCreator(org.eclipse.jface.action.IMenuCreator)
+		 */
+		public void setMenuCreator(IMenuCreator creator) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setText(java.lang.String)
+		 */
+		public void setText(String text) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.IAction#setToolTipText(java.lang.String)
+		 */
+		public void setToolTipText(String text) {
+			// Nothing
+		}
+
+	} // OpenIdentifiableAction
+
+} // EditorActionProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/ExecutablePropertyTester.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/ExecutablePropertyTester.java
new file mode 100644
index 0000000..23b706f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/ExecutablePropertyTester.java
@@ -0,0 +1,56 @@
+// ExecutablePropertyTester.java
+package org.eclipse.stem.ui.handlers;
+
+import org.eclipse.core.expressions.IPropertyTester;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.stem.jobs.execution.IExecutable;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is a {@link PropertyTester} for {@link IExecutable}s in "core
+ * expressions".
+ */
+public class ExecutablePropertyTester extends PropertyTester implements
+		IPropertyTester {
+
+	private static final String PROPERTY_IS_RUNNING = "running";
+	private static final String PROPERTY_IS_STOPPABLE = "stoppable";
+
+	/**
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object,
+	 *      java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(final Object receiver, final String property,
+			@SuppressWarnings("unused")
+			final Object[] args, @SuppressWarnings("unused")
+			final Object expectedValue) {
+		
+		boolean retValue = false;
+		if (receiver instanceof IExecutable) {
+			// Yes
+			// Runnable?
+			if (PROPERTY_IS_RUNNING.equals(property)) {
+				// Yes
+				retValue = ((IExecutable) receiver).isRunning();
+			} // if runnable
+			// Stoppable?
+			else if (PROPERTY_IS_STOPPABLE.equals(property)) {
+				// Yes
+				retValue = ((IExecutable) receiver).isStoppable();
+			} // if 
+		} // if
+
+		return retValue;
+	} // test
+
+} // ExecutablePropertyTester
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/IdentifiableDelegatePropertyTester.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/IdentifiableDelegatePropertyTester.java
new file mode 100644
index 0000000..e4806fc
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/IdentifiableDelegatePropertyTester.java
@@ -0,0 +1,73 @@
+// RunnableIdentifiablePropertyTester.java
+package org.eclipse.stem.ui.handlers;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.ui.views.IdentifiableDelegate;
+
+/**
+ * This class is a {@link PropertyTester} for {@link IdentifiableDelegate}s in
+ * "core expressions".
+ */
+public class IdentifiableDelegatePropertyTester extends PropertyTester {
+
+	// This code isn't being used right now, but it is being retained because we
+	// many want to test properties of IdentifiableDelegates in the future.
+	private static final String PROPERTY_IS_RUNNABLE = "runnable";
+
+	/**
+	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object,
+	 * 	java.lang.String, java.lang.Object[], java.lang.Object)
+	 */
+	public boolean test(final Object receiver, final String property,
+			@SuppressWarnings("unused") final Object[] args,
+			@SuppressWarnings("unused") final Object expectedValue) {
+		boolean retValue = false;
+		if (IdentifiableDelegate.class.equals(receiver)) {
+			// Yes
+			final IdentifiableDelegate id = (IdentifiableDelegate) receiver;
+
+			// Runnable?
+			if (PROPERTY_IS_RUNNABLE.equals(property)) {
+				// Yes
+				// Is the configuration element for a Scenario?
+				retValue = isScenarioConfigurationElement(id.getFormat())
+						|| isExperimentConfigurationElement(id.getFormat());
+			} // if runnable
+		} // if
+
+		return retValue;
+	} // test
+
+	/**
+	 * @param configElement
+	 * 		a configuration element for a plug-in
+	 * @return <code>true</code> if the configuration element is for a {@link
+	 * 	org.eclipse.stem.core.experiment.Experiment}.
+	 */
+	private boolean isExperimentConfigurationElement(final String format) {
+		return format != null && format.equals(ExperimentPackage.eNS_URI);
+	} // isExperimentConfigurationElement
+
+	/**
+	 * @param configElement
+	 * 		a configuration element for a plug-in
+	 * @return <code>true</code> if the configuration element is for a {@link
+	 * 	org.eclipse.stem.core.scenario.Scenario}.
+	 */
+	private boolean isScenarioConfigurationElement(final String format) {
+		return format != null && format.equals(ScenarioPackage.eNS_URI);
+	} // isScenarioConfigurationElement
+} // IdentifiablePropertyTester
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/STEMExecutionCommandHandler.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/STEMExecutionCommandHandler.java
new file mode 100644
index 0000000..2629e45
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/handlers/STEMExecutionCommandHandler.java
@@ -0,0 +1,171 @@
+// STEMExecutionCommandHandler.java
+package org.eclipse.stem.ui.handlers;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.perspectives.Simulation;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is the top-level {@link IHandler} for the STEM "execution" command
+ * handlers that begin and control the execution of
+ * {@link org.eclipse.stem.core.experiment.Experiment}s and
+ * {@link org.eclipse.stem.core.scenario.Scenario}s.
+ * 
+ * @see org.eclipse.stem.jobs.batch.BatchManager
+ * @see org.eclipse.stem.jobs.simulation.SimulationManager
+ */
+abstract public class STEMExecutionCommandHandler extends AbstractHandler
+		implements IHandler {
+
+	/**
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	public Object execute(final ExecutionEvent executionEvent)
+			throws ExecutionException {
+
+		boolean switchPerspective = false;
+
+		final ISelection selection = HandlerUtil
+				.getCurrentSelectionChecked(executionEvent);
+
+		// Structured Selection?
+		if (selection instanceof StructuredSelection) {
+			// Yes
+			// Iterate through everything that's in the selection and put each
+			// object into the appropriate collection.
+			for (final Object obj : ((StructuredSelection) selection).toList()) {
+				// IExecutable executable = (IExecutable) ExecutableAdapterFactory.INSTANCE
+				// .adapt(obj, IExecutable.class);
+				IExecutable executable = (IExecutable) Platform
+						.getAdapterManager().getAdapter(obj, IExecutable.class); 
+				 
+				// Were we successful in adapting?
+				if (executable != null) {
+					// Yes
+					switchPerspective = true;
+					doit(executable);
+				} // if
+				else {
+					// Internal error
+					Activator.logError(
+							"STEM Internal error execution command applied to \""
+									+ obj.getClass().getName() + "\"", null);
+				}
+			} // for each selection
+		} // if StructuredSelection
+
+		// Flip to Simulation Perspective?
+		if (switchPerspective) {
+			// Yes
+			Activator
+					.switchToPerspective(Simulation.ID_STEM_SIMULATION_PERSPECTIVE);
+		} // if flip
+
+		return null;
+	} // execute
+
+	/**
+	 * This method is implemented by subclasses to invoke the specific method of
+	 * the {@link IExecutable} that implements their command for the
+	 * {@link IExecutable}.
+	 * 
+	 * @param executable
+	 *            the {@link IExecutable}
+	 */
+	abstract protected void doit(IExecutable executable);
+
+	/**
+	 * This class is a {@link STEMExecutionCommandHandler} that invokes
+	 * {@link IExecutable#run()}.
+	 */
+	public static class RunCommandHandler extends STEMExecutionCommandHandler {
+
+		/**
+		 * @see org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler#doit(org.eclipse.stem.jobs.execution.IExecutable)
+		 */
+		@Override
+		protected void doit(IExecutable executable) {
+			executable.run();
+		}
+	} // RunCommandHandler
+
+	/**
+	 * This class is a {@link STEMExecutionCommandHandler} that invokes
+	 * {@link IExecutable#pause()}.
+	 */
+	public static class PauseCommandHandler extends STEMExecutionCommandHandler {
+
+		/**
+		 * @see org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler#doit(org.eclipse.stem.jobs.execution.IExecutable)
+		 */
+		@Override
+		protected void doit(IExecutable executable) {
+			executable.pause();
+		}
+	} // PauseCommandHandler
+
+	/**
+	 * This class is a {@link STEMExecutionCommandHandler} that invokes
+	 * {@link IExecutable#step()}.
+	 */
+	public static class StepCommandHandler extends STEMExecutionCommandHandler {
+
+		/**
+		 * @see org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler#doit(org.eclipse.stem.jobs.execution.IExecutable)
+		 */
+		@Override
+		protected void doit(IExecutable executable) {
+			executable.step();
+		}
+	} // StepCommandHandler
+
+	/**
+	 * This class is a {@link STEMExecutionCommandHandler} that invokes
+	 * {@link IExecutable#reset()}.
+	 */
+	public static class ResetCommandHandler extends STEMExecutionCommandHandler {
+
+		/**
+		 * @see org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler#doit(org.eclipse.stem.jobs.execution.IExecutable)
+		 */
+		@Override
+		protected void doit(IExecutable executable) {
+			executable.reset();
+		}
+	} // ResetCommandHandler
+
+	/**
+	 * This class is a {@link STEMExecutionCommandHandler} that invokes
+	 * {@link IExecutable#stop()}.
+	 */
+	public static class StopCommandHandler extends STEMExecutionCommandHandler {
+
+		/**
+		 * @see org.eclipse.stem.ui.handlers.STEMExecutionCommandHandler#doit(org.eclipse.stem.jobs.execution.IExecutable)
+		 */
+		@Override
+		protected void doit(IExecutable executable) {
+			executable.stop();
+		}
+	} // StopCommandHandler
+
+} // STEMExecutionCommandHandler
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Designer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Designer.java
new file mode 100644
index 0000000..fb9838b
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Designer.java
@@ -0,0 +1,97 @@
+// Designer.java
+package org.eclipse.stem.ui.perspectives;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.views.DecoratorsView;
+import org.eclipse.stem.ui.views.GraphsView;
+import org.eclipse.stem.ui.views.ModelsView;
+import org.eclipse.stem.ui.views.PredicatesView;
+import org.eclipse.stem.ui.views.ScenariosView;
+import org.eclipse.stem.ui.views.SequencersView;
+import org.eclipse.stem.ui.views.SimulationControlView;
+import org.eclipse.stem.ui.views.TriggersView;
+import org.eclipse.stem.ui.wizards.NewSTEMProjectWizard;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.eclipse.ui.navigator.resources.ProjectExplorer;
+
+/**
+ * This class implements the "Designer" perspective of STEM. This Perspective is
+ * used to create or "design" simulations.
+ */
+public class Designer implements IPerspectiveFactory {
+
+	/**
+	 * The identifier of the Designer Perspective
+	 */
+	public static final String ID_STEM_DESIGNER_PERSPECTIVE = Constants.ID_ROOT
+			+ ".ui.STEMDesignerPerspective"; //$NON-NLS-1$
+
+	/**
+	 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+	 */
+	public void createInitialLayout(final IPageLayout layout) {
+		final String editorArea = layout.getEditorArea();
+
+		// Put the STEM Project Explorer view on the left side
+		final IFolderLayout left = layout.createFolder(
+				"left", IPageLayout.LEFT, //$NON-NLS-1$
+				0.25f, editorArea);
+		left.addView(ProjectExplorer.VIEW_ID);
+
+		// Put the Graphs View on the bottom with the Tasks View
+		final IFolderLayout bottom = layout.createFolder("bottom", //$NON-NLS-1$
+				IPageLayout.BOTTOM, 0.66f, editorArea);
+
+		bottom.addView(ScenariosView.ID_SCENARIOS_VIEW);
+		bottom.addView(ModelsView.ID_MODELS_VIEW);
+		bottom.addView(GraphsView.ID_GRAPHS_VIEW);
+
+		bottom.addView(TriggersView.ID_TRIGGERS_VIEW);
+		bottom.addView(PredicatesView.ID_PREDICATES_VIEW);
+		bottom.addView(SequencersView.ID_SEQUENCERS_VIEW);
+		bottom.addView(DecoratorsView.ID_DECORATORS_VIEW);
+
+		bottom.addView(IPageLayout.ID_PROP_SHEET);
+		bottom.addView(IPageLayout.ID_TASK_LIST);
+		bottom.addPlaceholder(IPageLayout.ID_PROBLEM_VIEW);
+		// add Error Log view
+		bottom.addView("org.eclipse.pde.runtime.LogView"); //$NON-NLS-1$
+		// Put the Outline view on the right
+		layout.addView(IPageLayout.ID_OUTLINE, IPageLayout.RIGHT, .75f,
+				editorArea);
+
+		// Add the Views to "Show View" menu
+		layout
+				.addShowViewShortcut(SimulationControlView.ID_SIMULATION_CONTROL_VIEW);
+		layout.addShowViewShortcut(GraphsView.ID_GRAPHS_VIEW);
+		layout.addShowViewShortcut(ModelsView.ID_MODELS_VIEW);
+		layout.addShowViewShortcut(ScenariosView.ID_SCENARIOS_VIEW);
+		layout.addShowViewShortcut(SequencersView.ID_SEQUENCERS_VIEW);
+		layout.addShowViewShortcut(DecoratorsView.ID_DECORATORS_VIEW);
+		layout.addShowViewShortcut(TriggersView.ID_TRIGGERS_VIEW);
+		layout.addShowViewShortcut(PredicatesView.ID_PREDICATES_VIEW);
+		layout.addShowViewShortcut(ProjectExplorer.VIEW_ID);
+
+		// Add the Wizards to the "New..." menu
+		layout
+				.addNewWizardShortcut(NewSTEMProjectWizard.ID_STEM_PROJECT_WIZARD);
+
+		// Add the Designer perspective to the "Open Perspective" menu
+		layout.addPerspectiveShortcut(ID_STEM_DESIGNER_PERSPECTIVE);
+
+	} // createInitialLayout
+
+} // Designer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Simulation.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Simulation.java
new file mode 100644
index 0000000..4517300
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/perspectives/Simulation.java
@@ -0,0 +1,99 @@
+// Simulation.java
+package org.eclipse.stem.ui.perspectives;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.views.ActiveBatchesView;
+import org.eclipse.stem.ui.views.ActiveSimulationsView;
+import org.eclipse.stem.ui.views.ScenariosView;
+import org.eclipse.stem.ui.views.SimulationControlView;
+import org.eclipse.stem.ui.views.geographic.map.MapView;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.eclipse.ui.navigator.resources.ProjectExplorer;
+
+/**
+ * This class implements the "Simulation" perspective of STEM. This Perspective
+ * is used to control and visualize simulations.
+ */
+public class Simulation implements IPerspectiveFactory {
+
+	/**
+	 * The identifier of the Simulation Perspective
+	 */
+	public static final String ID_STEM_SIMULATION_PERSPECTIVE = Constants.ID_ROOT
+			+ ".ui.STEMSimulationPerspective"; //$NON-NLS-1$
+
+	/**
+	 * Create the initial layout. After the initial invocation, the last window
+	 * setup will be used so this is probably a one time setup but it is
+	 * important to get the user started on the right foot.
+	 * 
+	 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
+	 */
+	public void createInitialLayout(final IPageLayout layout) {
+		final String editorArea = layout.getEditorArea();
+
+		// Put the Map by itself on the top
+		layout.addStandaloneView(MapView.ID_MAP_VIEW, true, IPageLayout.RIGHT,
+				0.0f, editorArea);
+
+		// Put the Simulation Control view below the map on the left
+		final IFolderLayout left = layout.createFolder(
+				"left", IPageLayout.BOTTOM, //$NON-NLS-1$
+				0.60f, MapView.ID_MAP_VIEW);
+		left.addView(SimulationControlView.ID_SIMULATION_CONTROL_VIEW);
+		left.addView(ProjectExplorer.VIEW_ID);
+		left.addView(ScenariosView.ID_SCENARIOS_VIEW);
+		
+		// Put the Scenario View on the bottom right
+		// and add all the shortcuts there also.
+		final IFolderLayout bottom = layout.createFolder("bottom", //$NON-NLS-1$
+				IPageLayout.RIGHT, 0.30f, "left");
+
+		bottom.addView(ScenariosView.ID_SCENARIOS_VIEW);
+
+		// Add time series view
+		bottom.addView("org.eclipse.stem.ui.views.reports");
+		// Add phase plot view
+		bottom.addView("org.eclipse.stem.ui.views.reports.phaseSpace");
+		// Add CSV logger view
+		bottom.addView("org.eclipse.stem.ui.views.reports.phaseSpace");
+		// add Error Log view
+		bottom.addView("org.eclipse.stem.util.loggers"); //$NON-NLS-1$
+
+		// Add the Views to "Show View" menu
+		layout
+				.addShowViewShortcut(SimulationControlView.ID_SIMULATION_CONTROL_VIEW);
+		layout.addShowViewShortcut(IPageLayout.ID_PROGRESS_VIEW);
+		layout.addShowViewShortcut(ScenariosView.ID_SCENARIOS_VIEW);
+		layout
+				.addShowViewShortcut(ActiveSimulationsView.ID_ACTIVE_SIMULATIONS_VIEW);
+		layout.addShowViewShortcut(ActiveBatchesView.ID_ACTIVE_BATCHES_VIEW);
+		layout.addShowViewShortcut(MapView.ID_MAP_VIEW);
+
+		// TODO fix hard coded for GEView.GE_VIEW_ID
+		layout.addShowViewShortcut("org.eclipse.stem.ui.views.ge");
+		layout.addShowViewShortcut("org.eclipse.stem.ui.views.reports");
+		layout
+				.addShowViewShortcut("org.eclipse.stem.ui.views.reports.phaseSpace");
+		// We don't want to see the editor
+		layout.setEditorAreaVisible(false);
+
+		// Add the Simulation perspective to the "Open Perspective" menu
+		layout.addPerspectiveShortcut(ID_STEM_SIMULATION_PERSPECTIVE);
+
+	} // createInitialLayout
+
+} // Simulation
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferenceInitializer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferenceInitializer.java
new file mode 100644
index 0000000..0bd06a8
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferenceInitializer.java
@@ -0,0 +1,44 @@
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.color.RelativeValueColorPreferences;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class MapsColorsPreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		store.setDefault(MapsColorsPreferencePage.FOREGROUND_COLOR_ID, MapsColorsPreferencePage.FOREGROUND_COLOR_DEFAULT_RGB_STRING);
+		store.setDefault(MapsColorsPreferencePage.BACKGROUND_COLOR_ID, MapsColorsPreferencePage.BACKGROUND_COLOR_DEFAULT_RGB_STRING);
+		store.setDefault(MapsColorsPreferencePage.BORDERS_COLOR_ID, MapsColorsPreferencePage.BORDERS_COLOR_DEFAULT_RGB_STRING);
+		store.setDefault(MapsColorsPreferencePage.EDGES_COLOR_ID, MapsColorsPreferencePage.EDGES_COLOR_DEFAULT_RGB_STRING);
+		
+		//This too should be done by using the extension-points mechanism. The color providers are unknown.
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_ZERO_RELATIVE_VALUE_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_1_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_1_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_2_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_2_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_3_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_3_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_4_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_4_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_5_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_RANGE_5_DEFAULT_RGB_STRING);
+		store.setDefault(RelativeValueColorPreferences.FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_ID, RelativeValueColorPreferences.FOREGROUND_COLOR_MAXIMUM_RELATIVE_VALUE_DEFAULT_RGB_STRING);
+	} // initializeDefaultPreferences
+
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferencePage.java
new file mode 100644
index 0000000..2291c1a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/MapsColorsPreferencePage.java
@@ -0,0 +1,213 @@
+// MapsColorsPreferencePage.java
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.color.ColorProvider;
+import org.eclipse.stem.ui.adapters.color.IPreferencesContributer;
+import org.eclipse.stem.ui.adapters.color.RelativeValueColorPreferences;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class is a preference page for Maps Colors. It holds common maps colors
+ * preferences and an extension point where other preferences contributers (
+ * {@link org.eclipse.stem.ui.adapters.color.ColorProvider}s) can add their own
+ * preferences.
+ */
+public class MapsColorsPreferencePage extends FieldEditorPreferencePage
+		implements IWorkbenchPreferencePage {
+
+	/**
+	 * ID for the this preference page
+	 */
+	public static final String ID_STEM_MAPS_COLORS_PAGE = "org.eclipse.stem.ui.preferences.MapsColorsPreferencePage";
+	/**
+	 * ID for the foreground color field
+	 */
+	public static final String FOREGROUND_COLOR_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolor";
+	/**
+	 * ID for the background color field
+	 */
+	public static final String BACKGROUND_COLOR_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.backgroundcolor";
+	/**
+	 * ID for the borders color field
+	 */
+	public static final String BORDERS_COLOR_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.borderscolor";
+	/**
+	 * ID for the edges color field
+	 */
+	public static final String EDGES_COLOR_ID = "org.eclipse.stem.ui.views.geographic.map.preferences.edgescolor";
+	/**
+	 * Default foreground color
+	 */
+	public static final String FOREGROUND_COLOR_DEFAULT_RGB_STRING = "255,0,0"; // Default
+	// is
+	// Red
+	/**
+	 * Default background color
+	 */
+	public static final String BACKGROUND_COLOR_DEFAULT_RGB_STRING = "0,0,0"; // Default
+	// is
+	// Black
+	/**
+	 * Default borders color
+	 */
+	public static final String BORDERS_COLOR_DEFAULT_RGB_STRING = "0,80,80"; // Default
+	// is
+	// Dark blue green
+	/**
+	 * Default borders color
+	 */
+	public static final String EDGES_COLOR_DEFAULT_RGB_STRING = "255,0,255"; // Default
+	// is
+	// Magenta
+	/**
+	 * The color field editor for the background color
+	 */
+	private static ColorFieldEditor backgroundColorFieldEditor;
+	/**
+	 * The color field editor for the foreground color
+	 */
+	private static ColorFieldEditor foregroundColorFieldEditor;
+	/**
+	 * The color field editor for the borders color
+	 */
+	private static ColorFieldEditor bordersColorFieldEditor;
+	/**
+	 * The color field editor for the edges color
+	 */
+	private static ColorFieldEditor edgesColorFieldEditor;
+	/**
+	 * The list of {@link IPreferencesContributer}s
+	 */
+	private final List<IPreferencesContributer> preferencesExtenders = new CopyOnWriteArrayList<IPreferencesContributer>();
+
+	/**
+	 * Constructor
+	 */
+	public MapsColorsPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription("Choose the colors to be used for drawing maps");
+
+		// TODO support extension-points mechanism
+		final IPreferencesContributer preferencesExtender = new RelativeValueColorPreferences();
+		preferencesExtender.setPreferencePage(this);
+
+		preferencesExtenders.add(preferencesExtender);
+	} // MapsColorsPreferencePage
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
+	 */
+	@Override
+	protected void createFieldEditors() {
+		backgroundColorFieldEditor = new ColorFieldEditor(BACKGROUND_COLOR_ID,
+				"Background Color", getFieldEditorParent());
+		foregroundColorFieldEditor = new ColorFieldEditor(FOREGROUND_COLOR_ID,
+				"Foreground Color", getFieldEditorParent());
+		bordersColorFieldEditor = new ColorFieldEditor(BORDERS_COLOR_ID,
+				"Borders Color", getFieldEditorParent());
+		edgesColorFieldEditor = new ColorFieldEditor(EDGES_COLOR_ID,
+				"Edges Color", getFieldEditorParent());
+
+		addField(backgroundColorFieldEditor);
+		addField(foregroundColorFieldEditor);
+		addField(bordersColorFieldEditor);
+		addField(edgesColorFieldEditor);
+
+		for (final IPreferencesContributer preferencesExtender : preferencesExtenders) {
+			preferencesExtender.createFieldEditors();
+		}
+	} // createFieldEditors
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#initialize()
+	 */
+	@Override
+	protected void initialize() {
+		for (final IPreferencesContributer preferencesExtender : preferencesExtenders) {
+			preferencesExtender.initialize();
+		}
+		super.initialize();
+	} // initialize
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+	 */
+	@Override
+	public void propertyChange(final PropertyChangeEvent event) {
+		for (final IPreferencesContributer preferencesExtender : preferencesExtenders) {
+			preferencesExtender.propertyChange(event);
+		}
+		super.propertyChange(event);
+	} // propertyChange
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performDefaults()
+	 */
+	@Override
+	protected void performDefaults() {
+		foregroundColorFieldEditor.getColorSelector().setColorValue(
+				StringConverter.asRGB(FOREGROUND_COLOR_DEFAULT_RGB_STRING));
+		backgroundColorFieldEditor.getColorSelector().setColorValue(
+				StringConverter.asRGB(BACKGROUND_COLOR_DEFAULT_RGB_STRING));
+		bordersColorFieldEditor.getColorSelector().setColorValue(
+				StringConverter.asRGB(BORDERS_COLOR_DEFAULT_RGB_STRING));
+		edgesColorFieldEditor.getColorSelector().setColorValue(
+				StringConverter.asRGB(EDGES_COLOR_DEFAULT_RGB_STRING));
+
+		for (final IPreferencesContributer preferencesExtender : preferencesExtenders) {
+			preferencesExtender.performDefaults();
+		}
+	} // performDefaults
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")
+	final IWorkbench arg0) {
+		// Do nothing
+	} // init
+
+	/**
+	 * This makes addField public
+	 */
+	@Override
+	public void addField(final FieldEditor editor) {
+		super.addField(editor);
+	} // addField
+
+	/**
+	 * This makes getFieldEditorParent public
+	 */
+	@Override
+	public Composite getFieldEditorParent() {
+		return super.getFieldEditorParent();
+	} // getFieldEditorParent
+
+} // MapsColorsPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/Messages.java
new file mode 100644
index 0000000..c38eb47
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class retrieves messages for STEM preferences.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.preferences.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceConstants.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..9a04e76
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceConstants.java
@@ -0,0 +1,113 @@
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public class PreferenceConstants {
+
+	/**
+	 * The preference id for the name of the attribute to display when a
+	 * visualization is first displayed. Used for Data Display Y axis.
+	 */
+	public static final String INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE = "org.eclipse.stem.ui.initialattributename";
+
+
+	/**
+	 * The preference id for the name of the attribute to display when a
+	 * visualization is first displayed. Used for Phase Space Display X axis.
+	 */
+	public static final String INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE2 = "org.eclipse.stem.ui.initialattributename2";
+
+	
+	/**
+	 * The preference id for different foreground colors for various labels. If
+	 * a label is not on the list, foreground color uses the default.
+	 */
+	public static final String FOREGROUND_COLOR_DEFAULT = "org.eclipse.stem.ui.views.geographic.map.preferences.foregrounddefaultcolor";
+	/**
+	 * The preference ID for a first user selectable color that can be chosen and assigned to a property (e.g., S) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_1 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorone";
+	/**
+	 *  The preference ID for a second user selectable color that can be chosen and assigned to a property (e.g., E) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_2 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolortwo";
+	/**
+	 *  The preference ID for a third user selectable color that can be chosen and assigned to a property (e.g., I) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_3 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorthee";
+	/**
+	 *  The preference ID for a fourth user selectable color that can be chosen and assigned to a property (e.g., R) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_4 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorfour";
+	/**
+	 *  The preference ID for a fifth user selectable color that can be chosen and assigned to a property (e.g., P) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_5 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorfive";
+	/**
+	 *  The preference ID for a sixth user selectable color that can be chosen and assigned to a property (e.g., IR) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_6 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorsix";
+	/**
+	 *  The preference ID for a seventh user selectable color that can be chosen and assigned to a property (e.g., ) being visualized (eg in a time series plot)
+	 */
+	public static final String FOREGROUND_COLOR_LABEL_7 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorseven";
+
+	
+	/**
+	 * The preference id for different strings representing various labels. If a
+	 * label is not on the list, foreground color uses the default.
+	 */
+	public static final String FOREGROUND_STRING_LABEL_DEFAULT = "org.eclipse.stem.ui.views.geographic.map.preferences.foregrounddefaultstring";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_1 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringone";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_2 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringtwo";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_3 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringthee";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_4 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringfour";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_5 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringfive";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_6 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringsix";
+	/**
+	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
+	 */
+	public static final String FOREGROUND_STRING_LABEL_7 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringseven";
+
+	/**
+	 * This is the preference for how many threads to use when running
+	 * a simulation
+	 */
+	public static final String SIMULATION_THREADS = "simulationThreads"; //$NON-NLS-1$
+
+	/**
+	 * This is the preference for which default solver to use 
+	 */
+	public static final String DEFAULT_SOLVER = "defaultSolver"; //$NON-NLS-1$
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceInitializer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..56102db
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/PreferenceInitializer.java
@@ -0,0 +1,147 @@
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.ui.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	private static String [] UNIX_OS = {"Linux", "Unix"};
+	
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		// for map and y-axis data display
+		store.setDefault(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE,
+						VisualizationPreferencePage.DEFAULT_INITIAL_ATTRIBUTE_NAME_STRING);
+		
+		// for phase space display only (x-axis initial)
+		store.setDefault(PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE2,
+				VisualizationPreferencePage.DEFAULT_INITIAL_ATTRIBUTE_NAME_STRING2);
+
+		
+		// Set up the default color values which we will assign to labels
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_DEFAULT,
+				VisualizationPreferencePage.FOREGROUND_COLOR_DEFAULT_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_1,
+				VisualizationPreferencePage.FOREGROUND_COLOR_1_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_2,
+				VisualizationPreferencePage.FOREGROUND_COLOR_2_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_3,
+				VisualizationPreferencePage.FOREGROUND_COLOR_3_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_4,
+				VisualizationPreferencePage.FOREGROUND_COLOR_4_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_5,
+				VisualizationPreferencePage.FOREGROUND_COLOR_5_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_6,
+				VisualizationPreferencePage.FOREGROUND_COLOR_6_RGB_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_COLOR_LABEL_7,
+				VisualizationPreferencePage.FOREGROUND_COLOR_7_RGB_STRING);
+		
+		// Set up the default string values which we will assign to labels
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_DEFAULT,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_DEFAULT_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_1,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_1_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_2,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_2_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_3,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_3_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_4,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_4_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_5,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_5_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_6,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_6_STRING);
+		store.setDefault(PreferenceConstants.FOREGROUND_STRING_LABEL_7,
+				VisualizationPreferencePage.FOREGROUND_ATTRIBUTE_NAME_7_STRING);
+
+		
+		// store.setDefault(PreferenceConstants.P_BOOLEAN, true);
+		// store.setDefault(PreferenceConstants.P_CHOICE, "choice2");
+		// store.setDefault(PreferenceConstants.P_STRING,
+		// "Default value");
+		
+		// Get # of processors from OS here if possible
+		
+		String osName = System.getProperty("os.name");
+		short numThreads = this.getNumCPUs(osName);
+		if(numThreads == 0) numThreads = SolverPreferencePage.DEFAULT_SIMULATION_THREADS;
+		store
+		.setDefault(
+				PreferenceConstants.SIMULATION_THREADS,
+				SolverPreferencePage.DEFAULT_SIMULATION_THREADS);
+		
+		// Set the default solver to Finite Difference
+		store
+		.setDefault(
+				PreferenceConstants.DEFAULT_SOLVER,
+				SolverPreferencePage.DEFAULT_SOLVER);
+		
+	}
+
+	/**
+	 * Return the number of CPUs available on the hardware (if possible)
+	 * 
+	 * @param os
+	 * @return short Number of CPUs, or 0 if not found
+	 */
+	private short getNumCPUs(String os) {
+		// Only for unix os for now
+		boolean unix = false;
+		for(String o : UNIX_OS) if(os.equalsIgnoreCase(o)) unix = true;
+		if(!unix) return 0; 
+		// For unix, get the CPU's from /proc/cpuinfo
+
+		short numCPUs = 0;
+		try {
+			BufferedReader fileReader = new BufferedReader(new FileReader("/proc/cpuinfo"));
+
+			if (fileReader != null) {
+				String buffer = null;
+				while (EOF(buffer = fileReader.readLine()) != true) {
+					if(buffer.startsWith("processor")) ++numCPUs;
+				}
+			}
+		} catch (FileNotFoundException fnfe) {
+			// Ignore, unable to determine number of processors
+		} catch (IOException ioe) {
+			// Ignore, unable to determine number of processors
+		}
+		return numCPUs;
+	}
+	
+	/**
+	 @param buffer
+	 *            A buffer of diva data
+	 * 
+	 * @return True if we have reached End-Of-File
+	 */
+	static protected boolean EOF(String buffer) {
+		if (buffer == null)
+			return true;
+		return false;
+	}
+	
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/STEMPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/STEMPreferencePage.java
new file mode 100644
index 0000000..59a0dd3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/STEMPreferencePage.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <samp>FieldEditorPreferencePage</samp>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class STEMPreferencePage extends FieldEditorPreferencePage implements
+		IWorkbenchPreferencePage {
+
+	/**
+	 * The ID of the STEM Preference page.
+	 */
+	public static final String ID_STEM_PREFERENCE_PAGE = "org.eclipse.stem.ui.preferences.STEMPreferencePage";
+
+	/**
+	 * Constructor
+	 */
+	public STEMPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("STEMPPage.STEM")); //$NON-NLS-1$
+	} // STEMPreferencePage
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	public void createFieldEditors() {
+		// Nothing
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")//$NON-NLS-1$
+			IWorkbench workbench) {
+		// Nothing
+	} // init
+
+} // STEMPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/SolverPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/SolverPreferencePage.java
new file mode 100644
index 0000000..13d08f5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/SolverPreferencePage.java
@@ -0,0 +1,143 @@
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.preference.ComboFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <samp>FieldEditorPreferencePage</samp>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class SolverPreferencePage extends
+		FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	/**
+	 * This is the default number of threads to use when running
+	 * a simulation. The default is used if the number of CPUs cannot
+	 * be detected
+	 */
+	
+	public static final int DEFAULT_SIMULATION_THREADS = 2;
+	
+	/**
+	 * The default solver. Finite difference solver is
+	 * always assumed to be available.
+	 */
+	
+	public static final String DEFAULT_SOLVER = "org.eclipse.stem.solvers.fd.impl.FiniteDifferenceImpl";
+	
+	/**
+	 * Constructor
+	 */
+	public SolverPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("DMPPageTITLE")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	@Override
+	public void createFieldEditors() {
+
+		final IntegerFieldEditor simulationThreadsFieldEditor = new IntegerFieldEditor(
+				PreferenceConstants.SIMULATION_THREADS,
+				Messages.getString("DMPPageSimThreads"), getFieldEditorParent()); //$NON-NLS-1$
+		
+		addField(simulationThreadsFieldEditor);
+		
+		
+		Solver [] solvers = getSolvers();
+		String [][] namesAndValues = new String[solvers.length][solvers.length];
+		
+		for(int i=0;i<solvers.length;++i) {
+			namesAndValues[i][0] = solvers[i].getClass().getSimpleName();
+			namesAndValues[i][1] = solvers[i].getClass().getName();
+		}
+		
+		final ComboFieldEditor comboFieldEditor = new ComboFieldEditor(
+				PreferenceConstants.DEFAULT_SOLVER,
+				Messages.getString("DMPPageDefaultSolver"),
+				namesAndValues, getFieldEditorParent());
+		
+		addField(comboFieldEditor);
+		
+	} // createFieldEditors
+
+	/**
+	 * getSolvers Return registered solvers
+	 * 
+	 * @return Solver [] Available solvers
+	 */
+	
+	public static org.eclipse.stem.core.solver.Solver [] getSolvers() {
+		Solver [] solvers;
+		final IExtensionRegistry registry = Platform.getExtensionRegistry();
+		final IConfigurationElement[] solverConfigElements = registry
+				.getConfigurationElementsFor(org.eclipse.stem.core.Constants.ID_SOLVER_EXTENSION_POINT);
+
+		final List<Solver> temp = new ArrayList<Solver>();
+
+		solvers = new Solver[solverConfigElements.length];
+
+		for (int i = 0; i < solverConfigElements.length; i++) {
+			final IConfigurationElement element = solverConfigElements[i];
+			// Does the element specify the class of the disease model?
+				if (element.getName().equals(Constants.SOLVER_ELEMENT)) {
+					// Yes
+					try {
+						temp.add((Solver) element
+								.createExecutableExtension("class")); //$NON-NLS-1$
+					} catch (final CoreException e) {
+						Activator.logError(
+								"Can't create solver", e); //$NON-NLS-1$
+					}
+				} // if
+			} // for each configuration element
+
+			solvers = temp.toArray(new Solver[] {});
+
+		return solvers;
+	}
+	
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+		// Nothing
+	}
+
+} // SimulationManagementPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/VisualizationPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/VisualizationPreferencePage.java
new file mode 100644
index 0000000..c642e7e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/VisualizationPreferencePage.java
@@ -0,0 +1,428 @@
+// VisualizationPreferencePage.java
+package org.eclipse.stem.ui.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents the preferences for visualization of a simulation.
+ */
+public class VisualizationPreferencePage extends FieldEditorPreferencePage
+		implements IWorkbenchPreferencePage {
+
+	/**
+	 * The ID of the STEM Preference page.
+	 */
+	public static final String ID_STEM_VISUALIZATION_PAGE = "org.eclipse.stem.ui.preferences.VisualizationPreferencePage";
+
+	/**
+	 * The default name of the attribute to display first in a visualization.
+	 */
+	public static final String DEFAULT_INITIAL_ATTRIBUTE_NAME_STRING = "I";
+
+	/**
+	 * The default name of the attribute to display first in a visualization.
+	 */
+	public static final String DEFAULT_INITIAL_ATTRIBUTE_NAME_STRING2 = "S";
+
+	
+	private static final int ATTRIBUTE_NAME_FIELD_WIDTH = 11;
+
+	/**
+	 * A mapping between attribute names and attribute colors is maintained in
+	 * this color preference map.
+	 */
+	private static Map<String, Color> colorPreferenceMap = new HashMap<String, Color>();
+
+	/**
+	 * Define several label names (strings) that might need unique foreground
+	 * color assignments.
+	 * 
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_DEFAULT_STRING = "DEFAULT";
+
+	/**
+	 * Susceptible
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_1_STRING = "S";
+	/**
+	 * Exposed
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_2_STRING = "E";
+	/**
+	 * Infectious
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_3_STRING = "I";
+	/**
+	 * Recovered
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_4_STRING = "R";
+	/**
+	 * Total Population
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_5_STRING = "Count";
+	
+	/**
+	 * Population Density
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_6_STRING = "Density";
+	/**
+	 * Infectious that Die of the disease
+	 */
+	public static final String FOREGROUND_ATTRIBUTE_NAME_7_STRING = "IF";
+
+	/**
+	 * Default color 
+	 */
+	public static final String FOREGROUND_COLOR_DEFAULT_RGB_STRING = "0,0,172";
+
+	/**
+	 * S color = blue
+	 */
+	public static final String FOREGROUND_COLOR_1_RGB_STRING = "0,0,255";
+
+	/**
+	 * E color = yellow
+	 */
+	public static final String FOREGROUND_COLOR_2_RGB_STRING = "255,255,0";
+
+	/**
+	 * I color = red
+	 */
+	public static final String FOREGROUND_COLOR_3_RGB_STRING = "255,0,0";
+
+	/**
+	 * R color = green
+	 */
+	public static final String FOREGROUND_COLOR_4_RGB_STRING = "0,255,0";
+
+	/**
+	 * P (Population) color = white
+	 */
+	public static final String FOREGROUND_COLOR_5_RGB_STRING = "255,255,255";
+	
+
+	/**
+	 * Density (Cyan)
+	 */
+	public static final String FOREGROUND_COLOR_6_RGB_STRING = "0,255,255";
+	
+
+	/**
+	 * IF (Infectious that Die) color = magenta
+	 */
+	public static final String FOREGROUND_COLOR_7_RGB_STRING = "255,0,255";
+
+	/**
+	 * define several primary foreground colors each can be associated with a different label
+	 * (e.g., S,E,I,R, P, IR, IF) If the Label is not found, use the default foreground
+	 * color field editor
+	 */
+	private static ColorFieldEditor foregroundColorFieldEditorDefault;
+	private static ColorFieldEditor foregroundColorFieldEditor1;
+	private static ColorFieldEditor foregroundColorFieldEditor2;
+	private static ColorFieldEditor foregroundColorFieldEditor3;
+	private static ColorFieldEditor foregroundColorFieldEditor4;
+	private static ColorFieldEditor foregroundColorFieldEditor5;
+	private static ColorFieldEditor foregroundColorFieldEditor6;
+	private static ColorFieldEditor foregroundColorFieldEditor7;
+
+	/**
+	 * Define several string field editors to assign string values to the labels
+	 * that require color assignments
+	 */
+	// private StringFieldEditor foregroundLabelFieldEditorDefault;
+	private static StringFieldEditor foregroundLabelFieldEditor1;
+	private static StringFieldEditor foregroundLabelFieldEditor2;
+	private static StringFieldEditor foregroundLabelFieldEditor3;
+	private static StringFieldEditor foregroundLabelFieldEditor4;
+	private static StringFieldEditor foregroundLabelFieldEditor5;
+	private static StringFieldEditor foregroundLabelFieldEditor6;
+	private static StringFieldEditor foregroundLabelFieldEditor7;
+
+	private StringFieldEditor initialAttributeNameFieldEditor1;
+	private StringFieldEditor initialAttributeNameFieldEditor2;
+
+	/**
+	 * Constructor
+	 */
+	public VisualizationPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("STEMVPage.Viz"));
+
+	} // VisualizationPreferencePage
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
+	 */
+	@Override
+	protected void createFieldEditors() {
+		initialAttributeNameFieldEditor1 = new StringFieldEditor(
+				PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE,
+				Messages.getString("VizPPage.InitialName1"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+
+		initialAttributeNameFieldEditor2 = new StringFieldEditor(
+				PreferenceConstants.INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE2,
+				Messages.getString("VizPPage.InitialName2"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+
+		// For Color Assignment
+		foregroundColorFieldEditorDefault = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_DEFAULT, Messages
+						.getString("VizPPage.fgcd"), getFieldEditorParent());
+		foregroundColorFieldEditor1 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_1, Messages
+						.getString("VizPPage.fgc1"), getFieldEditorParent());
+		foregroundColorFieldEditor2 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_2, Messages
+						.getString("VizPPage.fgc2"), getFieldEditorParent());
+		foregroundColorFieldEditor3 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_3, Messages
+						.getString("VizPPage.fgc3"), getFieldEditorParent());
+		foregroundColorFieldEditor4 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_4, Messages
+						.getString("VizPPage.fgc4"), getFieldEditorParent());
+		foregroundColorFieldEditor5 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_5, Messages
+						.getString("VizPPage.fgc5"), getFieldEditorParent());
+		foregroundColorFieldEditor6 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_6, Messages
+						.getString("VizPPage.fgc6"), getFieldEditorParent());
+		foregroundColorFieldEditor7 = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_COLOR_LABEL_7, Messages
+						.getString("VizPPage.fgc7"), getFieldEditorParent());
+
+		// Do NOT add the label field editor for name DEFAULT
+		// This must be hard coded and not exposed
+		/*
+		 * foregroundLabelFieldEditorDefault = new StringFieldEditor(
+		 * PreferenceConstants.FOREGROUND_STRING_LABEL_DEFAULT,
+		 * Messages.getString("VizPPage.BGdefaultName"),
+		 * ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		 */
+		// For label name BG1Name = S (see messages.properties)
+		foregroundLabelFieldEditor1 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_1, Messages
+						.getString("VizPPage.BG1Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG2Name = E (see messages.properties)
+		foregroundLabelFieldEditor2 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_2, Messages
+						.getString("VizPPage.BG2Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG3Name = I (see messages.properties)
+		foregroundLabelFieldEditor3 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_3, Messages
+						.getString("VizPPage.BG3Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG4Name = R (see messages.properties)
+		foregroundLabelFieldEditor4 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_4, Messages
+						.getString("VizPPage.BG4Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG5Name = P (see messages.properties)
+		foregroundLabelFieldEditor5 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_5, Messages
+						.getString("VizPPage.BG5Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG6Name = IR (see messages.properties)
+		foregroundLabelFieldEditor6 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_6, Messages
+						.getString("VizPPage.BG6Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+		// For label name BG7Name = IF (see messages.properties)
+		foregroundLabelFieldEditor7 = new StringFieldEditor(
+				PreferenceConstants.FOREGROUND_STRING_LABEL_7, Messages
+						.getString("VizPPage.BG7Name"),
+				ATTRIBUTE_NAME_FIELD_WIDTH, getFieldEditorParent());
+
+		// add all components
+		addField(initialAttributeNameFieldEditor1);
+		addField(initialAttributeNameFieldEditor2);
+		// Add the color field editors
+		addField(foregroundColorFieldEditorDefault);
+		// Do NOT add the label field editor for name DEFAULT
+		// This must be hard coded and not exposed
+		// addField(foregroundLabelFieldEditorDefault);
+
+		addField(foregroundColorFieldEditor1);
+		addField(foregroundLabelFieldEditor1);
+
+		addField(foregroundColorFieldEditor2);
+		addField(foregroundLabelFieldEditor2);
+
+		addField(foregroundColorFieldEditor3);
+		addField(foregroundLabelFieldEditor3);
+
+		addField(foregroundColorFieldEditor4);
+		addField(foregroundLabelFieldEditor4);
+
+		addField(foregroundColorFieldEditor5);
+		addField(foregroundLabelFieldEditor5);
+
+
+		addField(foregroundColorFieldEditor6);
+		addField(foregroundLabelFieldEditor6);
+
+
+		addField(foregroundColorFieldEditor7);
+		addField(foregroundLabelFieldEditor7);
+
+	}// createFieldEditors
+
+	/**
+	 * @return the mapping between the display name of an attribute and the
+	 *         color to be used to display its value.
+	 */
+	public static Map<String, Color> getColorMapping() {
+
+		//
+		final Preferences preferences = Activator.getDefault()
+				.getPluginPreferences();
+
+		Device device = Activator.getDefault().getWorkbench().getDisplay();
+		
+		// Add the default color (always the same key)
+		final RGB defaultRGB = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_DEFAULT));
+		
+		final Color colorDef = new Color(device, defaultRGB.red,
+				defaultRGB.green, defaultRGB.blue);
+		colorPreferenceMap.put(FOREGROUND_ATTRIBUTE_NAME_DEFAULT_STRING,
+				colorDef);
+
+		// Add the attribute labels as keys and the preferred colors
+		final RGB rgb1 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_1));
+		final Color color1 = new Color(device, rgb1.red, rgb1.green,
+				rgb1.blue);
+
+		final RGB rgb2 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_2));
+		final Color color2 = new Color(device, rgb2.red, rgb2.green,
+				rgb2.blue);
+
+		final RGB rgb3 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_3));
+		final Color color3 = new Color(device, rgb3.red, rgb3.green,
+				rgb3.blue);
+
+		final RGB rgb4 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_4));
+		final Color color4 = new Color(device, rgb4.red, rgb4.green,
+				rgb4.blue);
+
+		final RGB rgb5 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_5));
+		final Color color5 = new Color(device, rgb5.red, rgb5.green,
+				rgb5.blue);
+	
+		final RGB rgb6 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_6));
+		final Color color6 = new Color(device, rgb6.red, rgb6.green,
+				rgb6.blue);
+
+		final RGB rgb7 = StringConverter.asRGB(preferences
+				.getString(PreferenceConstants.FOREGROUND_COLOR_LABEL_7));
+		final Color color7 = new Color(device, rgb7.red, rgb7.green,
+				rgb7.blue);
+		
+
+
+		final String key1 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_1);
+		final String key2 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_2);
+		final String key3 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_3);
+		final String key4 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_4);
+		final String key5 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_5);
+		final String key6 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_6);
+		final String key7 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_7);
+
+		colorPreferenceMap.put(key1, color1);
+		colorPreferenceMap.put(key2, color2);
+		colorPreferenceMap.put(key3, color3);
+		colorPreferenceMap.put(key4, color4);
+		colorPreferenceMap.put(key5, color5);
+		colorPreferenceMap.put(key6, color6);
+		colorPreferenceMap.put(key7, color7);
+		
+		return colorPreferenceMap;
+	} // getColorMapping
+	
+	/**
+	 * @return a set of Strings (labels) for which the user has
+	 * defined color preferences.
+	 */
+	public static Set<String> getPreferenceSet() {
+		
+		HashSet<String> prefSet = new HashSet<String>();
+		final Preferences preferences = Activator.getDefault()
+				.getPluginPreferences();
+		final String key1 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_1);
+		final String key2 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_2);
+		final String key3 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_3);
+		final String key4 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_4);
+		final String key5 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_5);
+		final String key6 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_6);
+		final String key7 = preferences
+				.getString(PreferenceConstants.FOREGROUND_STRING_LABEL_7);
+
+		prefSet.add(key1);
+		prefSet.add(key2);
+		prefSet.add(key3);
+		prefSet.add(key4);
+		prefSet.add(key5);
+		prefSet.add(key6);
+		prefSet.add(key7);
+		
+		return prefSet;
+	}// get prefSet
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")
+	final IWorkbench workbench) {
+		// Nothing
+	} // init
+
+} // VisualizationPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/messages.properties
new file mode 100644
index 0000000..e390d40
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/preferences/messages.properties
@@ -0,0 +1,52 @@
+# PreferenceMessages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+STEMPPage.STEM=STEM
+STEMVPage.Viz=Visualization
+
+VizPPage.InitialName1 = &Initial Y-axis attribute:
+VizPPage.InitialName2 = &Initial X-axis attribute:
+
+VizPPage.fgcd = &Default Foreground Color
+VizPPage.fgc1 = &Foreground Color1
+VizPPage.fgc2 = &Foreground Color2
+VizPPage.fgc3 = &Foreground Color3
+VizPPage.fgc4 = &Foreground Color4
+VizPPage.fgc5 = &Foreground Color5
+VizPPage.fgc6 = &Foreground Color6
+VizPPage.fgc7 = &Foreground Color7
+
+VizPPage.BGdefaultName = &Default Foreground
+VizPPage.BG1Name = &Foreground Property1
+VizPPage.BG2Name = &Foreground Property2
+VizPPage.BG3Name = &Foreground Property3
+VizPPage.BG4Name = &Foreground Property4
+VizPPage.BG5Name = &Foreground Property5
+VizPPage.BG6Name = &Foreground Property6
+VizPPage.BG7Name = &Foreground Property7
+
+DMPPageSimThreads=&Number of concurrent worker threads 
+DMPPageTITLE=&Solver Preferences
+DMPPageDefaultSolver=&Default solver
+
+stem\://org.eclipse.stem/edge/migration = Human Migration
+stem\://org.eclipse.stem/edge/pipetransport = Air Transport
+stem\://org.eclipse.stem/edge/relationship/commonborder = Common Borders
+stem\://org.eclipse.stem/edge/relationship/relativephysical = Relative Physicals
+stem\://org.eclipse.stem/edge/relationship/road = Roads
+stem\://org.eclipse.stem/edge/relationship/air = Air
+stem\://org.eclipse.stem/edge/relationship/roadtransport2001 = Road Transport 2001
+stem\://org.eclipse.stem/edge/relationship/roadtransport2004 = Road Transport 2004
+stem\://org.eclipse.stem/edge/relationship/roadtransport2007 = Road Transport 2007
+stem\://org.eclipse.stem/edge/relationship/airtransport2006 = Air Transport 2006
+ 
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/splashhandler/SplashHandler.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/splashhandler/SplashHandler.java
new file mode 100644
index 0000000..5d8d4ee
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/splashhandler/SplashHandler.java
@@ -0,0 +1,75 @@
+// SplashHandler.java
+package org.eclipse.stem.ui.splashhandler;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.resource.StringConverter;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.splash.BasicSplashHandler;
+
+/**
+ * This is based on EclipseSplashHandler
+ */
+public class SplashHandler extends BasicSplashHandler {
+
+	@Override
+	public void init(Shell splash) {
+		super.init(splash);
+		String progressRectString = "0,386,697,15"; //$NON-NLS-1$
+		String messageRectString = "10,350,697,20"; //$NON-NLS-1$
+		String buildIdLocString = "500,325"; //$NON-NLS-1$
+
+		String foregroundColorString = null;
+
+		Rectangle progressRect = StringConverter.asRectangle(
+				progressRectString, new Rectangle(0, 165, 400, 15));
+		setProgressRect(progressRect);
+
+		Rectangle messageRect = StringConverter.asRectangle(messageRectString,
+				new Rectangle(10, 150, 390, 50));
+		setMessageRect(messageRect);
+
+		final Point buildIdPoint = StringConverter.asPoint(buildIdLocString,
+				new Point(322, 190));
+
+		int foregroundColorInteger;
+		try {
+			foregroundColorInteger = Integer
+					.parseInt(foregroundColorString, 16);
+		} catch (Exception ex) {
+			foregroundColorInteger = 0xD2D7FF; // off white
+		}
+
+		setForeground(new RGB((foregroundColorInteger & 0xFF0000) >> 16,
+				(foregroundColorInteger & 0xFF00) >> 8,
+				foregroundColorInteger & 0xFF));
+
+		final String buildId = getBuildId();
+
+		getContent().addPaintListener(new PaintListener() {
+			@SuppressWarnings("synthetic-access")
+			public void paintControl(PaintEvent e) {
+				e.gc.setForeground(getForeground());
+				e.gc.drawText(buildId, buildIdPoint.x, buildIdPoint.y, true);
+			}
+		});
+	} // init
+
+	private String getBuildId() {
+		return System.getProperty("stem.buildId", "Unknown Build"); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+} // SplashHandler
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveBatchesView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveBatchesView.java
new file mode 100644
index 0000000..6237b24
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveBatchesView.java
@@ -0,0 +1,186 @@
+// ActiveBatchesView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.jobs.batch.BatchManager;
+import org.eclipse.stem.jobs.batch.BatchManagerEvent;
+import org.eclipse.stem.jobs.batch.IBatch;
+import org.eclipse.stem.jobs.batch.IBatchManagerListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is an Eclipse {@link ViewPart} that displays the currently active
+ * {@link IBatch}s and their status.
+ * 
+ * @see BatchManager
+ */
+public class ActiveBatchesView extends ViewPart {
+
+	/**
+	 * The identifier of the Active Batches View
+	 */
+	public static final String ID_ACTIVE_BATCHES_VIEW = "org.eclipse.stem.ui.views.activebatches"; //$NON-NLS-1$
+
+	private ListViewer lv = null;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+		lv = new ListViewer(parent);
+		lv.setContentProvider(new ActiveBatchesContentProvider());
+		lv.setLabelProvider(new ActiveBatchesLabelProvider());
+		lv.setInput(BatchManager.INSTANCE);
+
+		// Provide our selection listener
+		getSite().setSelectionProvider(lv);
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		getSite().setSelectionProvider(null);
+		lv = null;
+	} // dispose
+
+	protected static class ActiveBatchesContentProvider implements
+			IStructuredContentProvider, IBatchManagerListener {
+
+		private ListViewer viewer = null;
+
+		private BatchManager batchManager = null;
+
+		/**
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(final Object inputElement) {
+			return ((BatchManager) inputElement).getActiveBatches().toArray();
+		} // getElements
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			viewer = null;
+			batchManager = null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(final Viewer viewer,
+				@SuppressWarnings("unused")
+				final Object oldInput, final Object newInput) {
+			this.viewer = (ListViewer) viewer;
+			// Is our batch manager changing?
+			if (batchManager != null) {
+				// Yes
+				batchManager.removeListener(this);
+			}
+			batchManager = (BatchManager) newInput;
+
+			// Do we have a new batch manager to listen to?
+			if (batchManager != null) {
+				// Yes
+				batchManager.addBatchManagerListener(this);
+			}
+		} // inputChanged
+
+		/**
+		 * @see org.eclipse.stem.jobs.batch.IBatchManagerListener#batchesChanged(org.eclipse.stem.jobs.batch.BatchManagerEvent)
+		 */
+		public void batchesChanged(final BatchManagerEvent event) {
+			viewer.getList().setRedraw(false);
+			try {
+				viewer.remove(event.getBatchesRemoved());
+				viewer.add(event.getBatchesAdded());
+			} finally {
+				viewer.getList().setRedraw(true);
+			}
+
+		} // batchesChanged
+
+	} // ActiveBatchesContentProvider
+
+	protected static class ActiveBatchesLabelProvider implements ILabelProvider {
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused")
+		final Object element) {
+			return null;
+		} // getImage
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(final Object element) {
+			final IBatch batch = (IBatch) element;
+			return batch.getNameWithSequenceNumber();
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(@SuppressWarnings("unused")
+		final ILabelProviderListener listener) {
+			// nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(@SuppressWarnings("unused")
+		final Object element, @SuppressWarnings("unused")
+		final String property) {
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(@SuppressWarnings("unused")
+		final ILabelProviderListener listener) {
+			// nothing
+		}
+	} // ActiveBatchesLabelProvider
+} // ActiveBatchesView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveSimulationsView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveSimulationsView.java
new file mode 100644
index 0000000..9c681d1
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ActiveSimulationsView.java
@@ -0,0 +1,188 @@
+// ActiveSimulationsView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is an Eclipse {@link ViewPart} that displays the currently active
+ * {@link org.eclipse.stem.jobs.simulation.Simulation}s and their status.
+ * 
+ * @see SimulationManager
+ */
+public class ActiveSimulationsView extends ViewPart {
+
+	/**
+	 * The identifier of the Active Simulations View
+	 */
+	public static final String ID_ACTIVE_SIMULATIONS_VIEW = "org.eclipse.stem.ui.views.activesimulations"; //$NON-NLS-1$
+
+	private ListViewer lv = null;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+		lv = new ListViewer(parent);
+		lv.setContentProvider(new ActiveSimulationsContentProvider());
+		lv.setLabelProvider(new ActiveSimulationsLabelProvider());
+		lv.setInput(SimulationManager.getManager());
+
+		// Provide our selection listener
+		getSite().setSelectionProvider(lv);
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		getSite().setSelectionProvider(null);
+		lv = null;
+	} // dispose
+
+	protected static class ActiveSimulationsContentProvider implements
+			IStructuredContentProvider, ISimulationManagerListener {
+
+		private ListViewer viewer = null;
+
+		private SimulationManager simulationManager = null;
+
+		/**
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(final Object inputElement) {
+			return ((SimulationManager) inputElement).getActiveSimulations()
+					.toArray();
+		} // getElements
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			viewer = null;
+			simulationManager = null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(final Viewer viewer,
+				@SuppressWarnings("unused")
+				final Object oldInput, final Object newInput) {
+			this.viewer = (ListViewer) viewer;
+			// Is our simulation manager changing?
+			if (simulationManager != null) {
+				// Yes
+				simulationManager.removeListener(this);
+			}
+			simulationManager = (SimulationManager) newInput;
+
+			// Do we have a new simulation manager to listen to?
+			if (simulationManager != null) {
+				// Yes
+				simulationManager.addSimulationManagerListener(this);
+			}
+		} // inputChanged
+
+		/**
+		 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+		 */
+		public void simulationsChanged(final SimulationManagerEvent event) {
+			viewer.getList().setRedraw(false);
+			try {
+				viewer.remove(event.getSimulationsRemoved());
+				viewer.add(event.getSimulationsAdded());
+			} finally {
+				viewer.getList().setRedraw(true);
+			}
+
+		} // simulationsChanged
+
+	} // ActiveSimulationsContentProvider
+
+	protected static class ActiveSimulationsLabelProvider implements
+			ILabelProvider {
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused")
+		final Object element) {
+			return null;
+		} // getImage
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(final Object element) {
+			final ISimulation simulation = (ISimulation) element;
+			return simulation.getNameWithSequenceNumber();
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(@SuppressWarnings("unused")
+		final ILabelProviderListener listener) {
+			// nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(@SuppressWarnings("unused")
+		final Object element, @SuppressWarnings("unused")
+		final String property) {
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(@SuppressWarnings("unused")
+		final ILabelProviderListener listener) {
+			// nothing
+		}
+	} // ActiveSimulationsLabelProvider
+} // ActiveSimulationsView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/DecoratorsView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/DecoratorsView.java
new file mode 100644
index 0000000..f02b666
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/DecoratorsView.java
@@ -0,0 +1,122 @@
+// DecoratorsView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the {@link org.eclipse.stem.core.model.Decorator}s that have
+ * been imported into eclipse as plug-ins.
+ *
+ * @see SequencersView
+ */
+public class DecoratorsView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Decorators View
+	 */
+	public static final String ID_DECORATORS_VIEW = "org.eclipse.stem.ui.views.decorators"; //$NON-NLS-1$
+
+	/**
+	 * Default Constructor
+	 */
+	public DecoratorsView() {
+		super();
+	} // DecoratorsView
+
+	/**
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return DecoratorModel.getModel();
+	} // getInput
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new DecoratorViewTreeContentProvider();
+	} // getIdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class represents the model of the {@link Decorator}s that extend a
+	 * org.eclipse.stem.core.decorators extension point.
+	 */
+	protected static class DecoratorModel extends IdentifiableViewModel {
+
+		// The singleton instance
+		private static DecoratorModel decModel;
+
+		/**
+		 * Constructor
+		 */
+		private DecoratorModel(final String extensionPointID) {
+			super(extensionPointID);
+		} // DecoratorModel
+
+		/**
+		 * @return the singleton instance of the model
+		 */
+		public static DecoratorModel getModel() {
+			// Do we need to make the model?
+			if (decModel == null) {
+				// Yes
+				decModel = new DecoratorModel(
+						Constants.ID_DECORATOR_EXTENSION_POINT);
+			}
+			return decModel;
+		} // getModel
+	} // DecoratorModel
+
+	/**
+	 * This class is the content provider of the decorators view.
+	 */
+	protected static class DecoratorViewTreeContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent decorators in the decorators view
+		static ImageDescriptor diseaseIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean diseaseIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(final Object element) {
+			return (element instanceof IdentifiableDelegate) ? getDiseaseIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent decorators, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getDiseaseIcon() {
+			return null;
+			// // Should we try to load the icon?
+			// if (diseaseIconFirstTime && diseaseIcon == null) {
+			// // Yes
+			// diseaseIconFirstTime = false;
+			// diseaseIcon = AbstractUIPlugin.imageDescriptorFromPlugin(
+			// "org.eclipse.stem.ui.diseasemodels",
+			// "icons/full/custom16/" + "disease.gif");
+			// } // if we should load the icon
+			// return diseaseIcon.createImage();
+		} // getdiseaseIcon
+	} // DecoratorViewTreeContentProvider
+} // DecoratorsView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExecutablePluginView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExecutablePluginView.java
new file mode 100644
index 0000000..5b6a443
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExecutablePluginView.java
@@ -0,0 +1,217 @@
+// ExecutablePluginView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class represents an eclipse view of the executable plug-in resources of
+ * a particular type that have been imported into eclipse as plug-ins.
+ */
+public abstract class ExecutablePluginView extends ViewPart {
+
+	/**
+	 * The List of things to be shown in the view.
+	 */
+	private ListViewer lv;
+
+	/**
+	 * @return the input model specific to this view
+	 */
+	protected abstract ExecutableViewModel getInput();
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		lv = new ListViewer(parent);
+		lv.setContentProvider(new ExecutableContentProvider());
+		lv.setLabelProvider(new ExecutableLabelProvider());
+		lv.setInput(getInput());
+
+		// Provide our selection
+		getSite().setSelectionProvider(lv);
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		// TODO implement dispose see selection service doc
+		// getSite().setSelectionProvider(null);
+		super.dispose();
+	}
+
+	/**
+	 * This class represents the model of the executable plug-ins that extend a
+	 * STEM extension point.
+	 */
+	public abstract static class ExecutableViewModel {
+
+		private List<IConfigurationElement> executables;
+
+		/**
+		 * Constructor
+		 */
+		protected ExecutableViewModel(final String extensionPointID,
+				final String executableElementName) {
+			executables = new ArrayList<IConfigurationElement>();
+			// Get the configuration elements for this extension point
+			final IExtensionRegistry registry = Platform.getExtensionRegistry();
+			final IConfigurationElement[] configElements = registry
+					.getConfigurationElementsFor(extensionPointID);
+
+			// Iterate through the elements.
+			for (int i = 0; i < configElements.length; i++) {
+				final IConfigurationElement element = configElements[i];
+				// Is this an Observer?
+				if (executableElementName.equals(element.getName())) {
+					// Yes
+					executables.add(element);
+				} else {
+					Activator.logError(MessageFormat.format(Messages
+							.getString("IPView.Unexpected_Element"), element //$NON-NLS-1$
+							.getName(), extensionPointID), null);
+				} // else
+			} // for each configuration element
+
+		} // ExecutableViewModel
+
+		/**
+		 * @return the executables
+		 */
+		protected final List<IConfigurationElement> getExecutables() {
+			return executables;
+		}
+
+	} // ExecutableViewModel
+
+	/**
+	 * This class provides content for the list view of the executables that are
+	 * available as parts of plug-ins.
+	 */
+	public static class ExecutableContentProvider implements
+			IStructuredContentProvider {
+
+		/**
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(Object inputElement) {
+			return ((ExecutableViewModel) inputElement).getExecutables()
+					.toArray();
+		} // getElements
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing to do
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(@SuppressWarnings("unused") //$NON-NLS-1$
+		Viewer viewer, @SuppressWarnings("unused") //$NON-NLS-1$
+		Object oldInput, @SuppressWarnings("unused") //$NON-NLS-1$
+		Object newInput) {
+			// Nothing to do
+		}
+	} // ExecutableContentProvider
+
+	/**
+	 * This class provides labels the describe the executables available as part
+	 * of plug-ins.
+	 */
+	protected static class ExecutableLabelProvider implements ILabelProvider {
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(@SuppressWarnings("unused") //$NON-NLS-1$
+		Object element) {
+			return null;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(Object element) {
+			IConfigurationElement configElement = (IConfigurationElement) element;
+			String retValue = configElement
+					.getAttribute(Constants.EXECUTABLE_NAME_ATTRIBUTE);
+			return retValue;
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(@SuppressWarnings("unused") //$NON-NLS-1$
+		ILabelProviderListener listener) {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(@SuppressWarnings("unused") //$NON-NLS-1$
+		Object element, @SuppressWarnings("unused") //$NON-NLS-1$
+		String property) {
+			return false;
+		}
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(@SuppressWarnings("unused") //$NON-NLS-1$
+		ILabelProviderListener listener) {
+			// Nothing
+		}
+	} // ExecutableLabelProvider
+
+} // ExecutablePluginView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExperimentsView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExperimentsView.java
new file mode 100644
index 0000000..c160d26
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ExperimentsView.java
@@ -0,0 +1,106 @@
+// ExperimentsView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.experiment.Experiment}s that have been imported
+ * into eclipse as plug-ins.
+ */
+public class ExperimentsView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Experiments View {@value}
+	 */
+	public static final String ID_EXPERIMENTS_VIEW = Constants.ID_ROOT
+			+ ".ui.views.experiments"; //$NON-NLS-1$
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new ExperimentPluginViewLabelContentProvider();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return ExperimentsViewModel.getModel();
+	}
+
+	/**
+	 * This class represents a singleton instance of a model of the STEM
+	 * {@link Experiment}s that are plugged into the system.
+	 */
+	protected static class ExperimentsViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static ExperimentsViewModel evModel;
+
+		private ExperimentsViewModel() {
+			super(Constants.ID_EXPERIMENT_EXTENSION_POINT);
+		}
+
+		/**
+		 * @return the singleton instance of the ModelViewModel
+		 */
+		public static ExperimentsViewModel getModel() {
+			if (evModel == null) {
+				evModel = new ExperimentsViewModel();
+			}
+			return evModel;
+		} // getModel
+	} // ExperimentsViewModel
+
+	protected static class ExperimentPluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent experiments in the Experiments view
+		static Image experimentIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean experimentIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getExperimentIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent experiments, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getExperimentIcon() {
+			// Should we try to load the icon?
+			if (experimentIconFirstTime && experimentIcon == null) {
+				// Yes
+				experimentIconFirstTime = false;
+				experimentIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.EXPERIMENT_ICON);
+			} // if we should load the icon
+			return experimentIcon;
+		} // getExperimentIcon
+
+	} // ExperimentPluginViewLabelContentProvider
+} // ExperimentsView
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/GraphsView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/GraphsView.java
new file mode 100644
index 0000000..3f996ac
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/GraphsView.java
@@ -0,0 +1,118 @@
+// GraphsView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.graph.Graph}s that have been imported into
+ * eclipse as plug-ins.
+ */
+public class GraphsView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Graph View
+	 */
+	public static final String ID_GRAPHS_VIEW = "org.eclipse.stem.ui.views.graphs"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public GraphsView() {
+		super();
+	} // GraphsView
+
+	/**
+	 * @return the input model specific to this view
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return GraphViewModel.getModel();
+	} // getInput
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new GraphPluginViewLabelContentProvider();
+	} // getIdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class represents a singleton instance of a model of the
+	 * {@link Graph}s that are plugged-in to the system.
+	 */
+	protected static class GraphViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static GraphViewModel gvModel;
+
+		/**
+		 * Constructor
+		 */
+		private GraphViewModel() {
+			super(Constants.ID_GRAPH_EXTENSION_POINT);
+		} // GraphViewModel
+
+		/**
+		 * @return the single instance of the GraphViewModel
+		 */
+		public static GraphViewModel getModel() {
+			// Do we need to make the model?
+			if (gvModel == null) {
+				// Yes
+				gvModel = new GraphViewModel();
+			}
+			return gvModel;
+		} // getModel
+
+	} // GraphViewModel
+
+	protected static class GraphPluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent graphs in the graph view
+		static Image graphIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean graphIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(final Object element) {
+			return (element instanceof IdentifiableDelegate) ? getGraphIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent graphs, or null if it can't
+		 *         be loaded.
+		 */
+		private Image getGraphIcon() {
+			// Should we try to load the icon?
+			if (graphIconFirstTime && graphIcon == null) {
+				// Yes
+				graphIconFirstTime = false;
+				graphIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.GRAPH_ICON);
+			} // if we should load the icon
+			return graphIcon;
+		} // getGraphIcon
+
+	} // GraphPluginViewLabelContentProvider
+} // GraphsView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IContextMenuUpdatesListener.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IContextMenuUpdatesListener.java
new file mode 100644
index 0000000..cc81626
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IContextMenuUpdatesListener.java
@@ -0,0 +1,31 @@
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+
+/**
+ * The interface defines a listener that get notifications about newly generated context
+ * menus. Usually the listener will be a <code>ViewPart</code> that needs to register
+ * the context menu so that externally defined additions to the menu will be added.
+ */
+public interface IContextMenuUpdatesListener {
+	
+	/**
+	 * The method is being called when new context menu has been created.
+	 * @param menuManager The new MenuManager
+	 * @param selectionProvider The ISelectionProvider for the MenuManager
+	 */
+	public void onContextMenuUpdate(MenuManager menuManager, ISelectionProvider selectionProvider);
+
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiableDelegate.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiableDelegate.java
new file mode 100644
index 0000000..740f0df
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiableDelegate.java
@@ -0,0 +1,150 @@
+// IdentifiableDelegate
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.impl.DublinCoreImpl;
+import org.eclipse.stem.jobs.Activator;
+
+/**
+ * This class represents a serialized {@link org.eclipse.stem.core.common.Identifiable}.
+ */
+public class IdentifiableDelegate extends PlatformObject implements
+		Comparable<IdentifiableDelegate> {
+
+	// The Category this Identifiable belongs to
+	// I think this can be deleted
+	private Object parent;
+
+	// The URI of the Identifiable
+	private URI uri;
+
+	// The Dublin Core instance that was initialized from the configuration
+	// element
+	private final DublinCoreImpl dublinCore;
+
+	/**
+	 * Create an {@link IdentifiableDelegate} from the {@link
+	 * IConfigurationElement} obtained from an extension point. The {@link
+	 * DublinCore} instance will be initialize from the {@link
+	 * IConfigurationElement}
+	 * 
+	 * @param configElement
+	 * 		the {@link IConfigurationElement} that defines an {@link
+	 * 		Identifiable} that has been plugged in.
+	 */
+	public IdentifiableDelegate(final IConfigurationElement configElement) {
+		this.dublinCore = new DublinCoreImpl(configElement);
+	} // IdentifiableDelegate
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		final String retValue = dublinCore != null ? dublinCore.getTitle() : ""; //$NON-NLS-1$
+		return retValue != null ? retValue : "";
+	}
+
+	/**
+	 * @return the {@link Identifiable} instance
+	 */
+	public Identifiable getIdentifiable() {
+		Identifiable retValue = null;
+		try {
+			retValue = Utility.getIdentifiable(getURI());
+		} catch (final Exception e) {
+			Activator.logError("The resource \"" + getURI().toString()
+					+ "\" was not found or was of the wrong format", e);
+			retValue = null;
+		}
+		return retValue;
+	} // getIdentifiable
+
+	/**
+	 * @return the value of the {@link Identifiable}'s eNS_URI. This is recorded
+	 * 	as the {@link DublinCore#getFormat()} of the {@link Identifiable}.
+	 * @see GraphPackage#eNS_URI
+	 * @see ModelPackage#eNS_URI
+	 * @see ScenarioPackage#eNS_URI
+	 * @see SequencerPackage#eNS_URI
+	 * @see ExperimentPackage#eNS_URI
+	 */
+	public String getFormat() {
+		return getDublinCore().getFormat();
+	} // getFormat
+
+	/**
+	 * @return the {@link URI} to the serialized {@link Identifiable}.
+	 */
+	private final URI getURI() {
+		// Already have the URI?
+		if (uri == null) {
+			// No
+			uri = URI.createURI(dublinCore.getIdentifier());
+		} // if
+		return uri;
+	} // getURI
+
+	/**
+	 * @return the {@link DublinCore}
+	 */
+	public final DublinCoreImpl getDublinCore() {
+		return dublinCore;
+	}
+
+	/**
+	 * @param o
+	 * @return the value of the compare
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(final IdentifiableDelegate o) {
+		return toString().compareTo(o.toString());
+	}
+
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(final Object o) {
+		boolean retValue = false;
+		if (o != null) {
+			// Yes
+			retValue = toString().equals(o.toString());
+		} // if
+		return retValue;
+	}
+
+	/**
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		return toString().hashCode();
+	}
+
+	/**
+	 * I don't think this is ever called, there is a reference to it, but I
+	 * don't think it ever gets invoked.
+	 * 
+	 * @return the parent
+	 */
+	public Object getParent() {
+		return parent;
+	}
+
+} // IdentifiableDelegate
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiablePluginView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiablePluginView.java
new file mode 100644
index 0000000..d6eb9d1
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/IdentifiablePluginView.java
@@ -0,0 +1,1033 @@
+// IdentifiablePluginView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.perspectives.Simulation;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class represents an eclipse view of the {@link Identifiable} resources
+ * of a particular type that have been imported into eclipse as plug-ins.
+ * 
+ * @see Identifiable
+ * @see GraphsView
+ * @see ModelsView
+ * @see ScenariosView
+ */
+public abstract class IdentifiablePluginView extends ViewPart {
+
+	protected TreeViewer treeViewer;
+
+	private DublinCoreToolTipHandler dcTTipHandler;
+
+	/**
+	 * This is the selection that is in effect at the start of a drag operation
+	 */
+	protected ISelection selection;
+
+	/**
+	 * This map keeps track of the {@link Identifiable} that we've deserialized
+	 * so we don't need to do that more than once.
+	 * 
+	 * @see #getIdentifiable(URI)
+	 */
+	protected Map<URI, Identifiable> deserializedIdentifiablesMap = new HashMap<URI, Identifiable>();
+
+	/**
+	 * Constructor
+	 */
+	public IdentifiablePluginView() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+		dcTTipHandler = new DublinCoreToolTipHandler(parent.getShell());
+
+		treeViewer = new TreeViewer(parent);
+		treeViewer
+				.setContentProvider(new IdentifiablePluginViewTreeContentProvider());
+		treeViewer
+				.setLabelProvider(getIdentifiablePluginViewLabelContentProvider());
+		treeViewer.setUseHashlookup(true);
+		treeViewer.setInput(getInput());
+
+		// Hook up the dublin core tool tip handler
+		dcTTipHandler.addDCToolTipHelp(treeViewer.getTree());
+
+		// We become a selection provider too
+		getSite().setSelectionProvider(treeViewer);
+
+		// Context Menu
+		final MenuManager contextMenuManager = new MenuManager();
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator("execution"));
+
+		// Set the context menu for the viewer
+		treeViewer.getControl().setMenu(
+				contextMenuManager.createContextMenu(treeViewer.getControl()));
+		getSite().registerContextMenu(contextMenuManager, treeViewer);
+
+		// Listen for double-clicks on Executables
+		treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(final DoubleClickEvent event) {
+				final IExecutable executable = (IExecutable) Platform
+						.getAdapterManager().getAdapter(
+								((StructuredSelection) event.getSelection())
+										.toList().get(0), IExecutable.class);
+
+				// Were we successful in adapting?
+				if (executable != null) {
+					// Yes
+					executable.run();
+					Activator
+							.switchToPerspective(Simulation.ID_STEM_SIMULATION_PERSPECTIVE);
+				} // if
+			} // doubleClick
+		});
+
+		// Set up drag support
+		final int ops = DND.DROP_LINK | DND.DROP_COPY | DND.DROP_MOVE;
+		final Transfer[] transfers = new Transfer[] {
+				LocalSelectionTransfer.getTransfer(),
+				LocalTransfer.getInstance() };
+		treeViewer.addDragSupport(ops, transfers, new DragSourceListener() {
+
+			/**
+			 * @see org.eclipse.swt.dnd.DragSourceListener#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
+			 */
+			public void dragStart(final DragSourceEvent event) {
+				// We need to figure out when the drag can start here
+				// Just say "yes" right now
+				event.doit = true;
+				selection = treeViewer.getSelection();
+				// LocalSelectionTransfer.getTransfer().setSelection(selection);
+			} // dragStart
+
+			/**
+			 * @see org.eclipse.swt.dnd.DragSourceListener#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
+			 */
+			public void dragSetData(final DragSourceEvent event) {
+
+				if (LocalSelectionTransfer.getTransfer().isSupportedType(
+						event.dataType)) {
+					// Yes
+					event.data = extractURIStringsFromIdentifiableDelegates((IStructuredSelection) selection);
+					LocalSelectionTransfer.getTransfer().setSelection(
+							(IStructuredSelection) event.data);
+				} // if
+				else if (LocalTransfer.getInstance().isSupportedType(
+						event.dataType)) {
+					// Yes
+					event.data = extractURIStringsFromIdentifiableDelegates((IStructuredSelection) selection);
+				} // if
+
+			} // dragSetData
+
+			private IStructuredSelection extractURIStringsFromIdentifiableDelegates(
+					final IStructuredSelection selectedDelegates) {
+				final List<String> collection = new ArrayList<String>();
+				for (final Iterator selectionIter = selectedDelegates
+						.iterator(); selectionIter.hasNext();) {
+					final Object element = selectionIter.next();
+					// Was an Identifiable Delegate selected?
+					if (element instanceof IdentifiableDelegate) {
+						// Yes
+						// It has a URI that specifies the serialized
+						// representation of the Identifiable
+						final String uriString = ((IdentifiableDelegate) element)
+								.getDublinCore().getIdentifier();
+						// Were we successful in getting the uri string?
+						if (uriString != null) {
+							// Yes
+							collection.add(uriString);
+						}
+					} // if
+				} // for each selection
+
+				return new IStructuredSelection() {
+
+					final List<String> list;
+					{
+						list = collection;
+					}
+
+					public Object getFirstElement() {
+						return list.get(0);
+					}
+
+					public Iterator<String> iterator() {
+						return list.iterator();
+					}
+
+					public int size() {
+						return list.size();
+					}
+
+					public Object[] toArray() {
+						return list.toArray();
+					}
+
+					public List<String> toList() {
+						return list;
+					}
+
+					public boolean isEmpty() {
+						return list.isEmpty();
+					}
+				};
+			} // extractURIStrings
+
+			/**
+			 * @see org.eclipse.swt.dnd.DragSourceListener#dragFinished(org.eclipse.swt.dnd.DragSourceEvent)
+			 */
+			public void dragFinished(
+					@SuppressWarnings("unused") final DragSourceEvent event) {
+				selection = null;
+				LocalTransfer.getInstance().javaToNative(null, null);
+			} // dragFinished
+
+		});
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @return the input model specific to this view
+	 */
+	protected abstract IdentifiableViewModel getInput();
+
+	/**
+	 * @return the {@link IdentifiablePluginViewLabelContentProvider}
+	 *         appropriate for the model
+	 */
+	protected abstract IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider();
+
+	/**
+	 * This class represents the model of the {@link Identifiable}'s that extend
+	 * a particular extension point.
+	 */
+	protected abstract static class IdentifiableViewModel {
+		// The root of the tree of categories and identifiables
+		private final Category root;
+
+		// Mapping between a category id and a category
+		private final Map<String, Category> categoryMap;
+
+		/**
+		 * @param extensionPointID
+		 *            the identifier of the extension point that Identifiables
+		 *            use to plug-in.
+		 */
+		public IdentifiableViewModel(final String extensionPointID) {
+			root = new Category(Constants.IDENTIFIABLE_ROOT_CATEGORY_NAME,
+					Constants.IDENTIFIABLE_ROOT_CATEGORY_ID, ""); //$NON-NLS-1$
+			categoryMap = new HashMap<String, Category>();
+			categoryMap.put(root.getCategoryId(), root);
+
+			// Get the configuration elements for this extension point
+			final IExtensionRegistry registry = Platform.getExtensionRegistry();
+			final IConfigurationElement[] configElements = registry
+					.getConfigurationElementsFor(extensionPointID);
+
+			// Make a first pass through the elements looking for categories
+			for (final IConfigurationElement element : configElements) {
+				// Is this a Category?
+				if (Constants.CATEGORY_ELEMENT.equals(element.getName())) {
+					// Yes
+					addCategory(element);
+				}
+			} // for each configuration element
+
+			// Resolve the connections between parent and child categories
+			resolveCategories();
+
+			// Iterate through the elements. Processing the identifiables
+			for (final IConfigurationElement element : configElements) {
+				// Is this a Category?
+				if (Constants.CATEGORY_ELEMENT.equals(element.getName())) {
+					// Yes
+					continue;
+				}
+				// Is this a dublin core element?
+				else if (Constants.DUBLIN_CORE_ELEMENT
+						.equals(element.getName())) {
+					// Yes
+					// Was a category id specified in the element?
+					Category category = root;
+					final String categoryId = element
+							.getAttribute("category_id"); //$NON-NLS-1$
+					if (categoryId != null) {
+						// Yes
+						category = categoryMap.get(categoryId);
+						// Did we find the category?
+						if (category == null) {
+							// No
+							Activator.logError(MessageFormat.format(Messages
+									.getString("IPView.No_Category"), //$NON-NLS-1$
+									categoryId), null);
+							category = root;
+						}
+
+						category = category == null ? root : category;
+					}
+					addIdentifiableDelegate(category, element);
+				} // if dublin core
+				// Is it an element with a "name" attribute?
+				else if (element.getAttribute("name") != null) {
+					// Yes
+					addIdentifiableDelegate(root, element);
+				} // if
+				else {
+					Activator.logError(MessageFormat.format(Messages
+							.getString("IPView.Unexpected_Element"), element
+							.getName(), extensionPointID), null);
+				} // else
+			} // for each configuration element
+
+		} // IdentifiableViewModel
+
+		/**
+		 * Add an {@link IdentifiableDelegate} to the model.
+		 * 
+		 * @param category
+		 *            the {@link Category} to add the delegate to
+		 * 
+		 * @param element
+		 *            the {@link DublinCore} element that defines the delegate
+		 */
+		private void addIdentifiableDelegate(final Category category,
+				final IConfigurationElement element) {
+			final IdentifiableDelegate identifiableDelegate = new IdentifiableDelegate(
+					element);
+			category.addIdentifiableDelegate(identifiableDelegate);
+		} // addIdentifiableDelegate
+
+		/**
+		 * Add a {@link Category} to the model.
+		 * 
+		 * @param element
+		 *            the category element that defines the category
+		 */
+		private Category addCategory(final IConfigurationElement element) {
+			final Category category = new Category(element);
+			// Does the category already exist?
+			Category retValue = categoryMap.get(category.getCategoryId());
+
+			if (retValue == null) {
+				// No
+				// It's new
+				retValue = category;
+				categoryMap.put(category.getCategoryId(), category);
+			}
+
+			return retValue;
+		} // addCategory
+
+		/**
+		 * Hook up parent and child categories.
+		 */
+		private void resolveCategories() {
+			// Go through each of the categories hooking up parent with child
+			for (final Category category : categoryMap.values()) {
+				// Is this the root category?
+				if (category == root) {
+					// Yes
+					continue;
+				}
+
+				// Does it's parent exist?
+				Category parentCategory = categoryMap.get(category
+						.getParentId());
+				if (parentCategory == null) {
+					// No
+					Activator
+							.logInformation(
+									"When organizing categories, the specified parent category \"" //$NON-NLS-1$
+											+ category.getParentId()
+											+ "\" for the category \"" //$NON-NLS-1$
+											+ category.getCategoryId()
+											+ "\" could not be found.  Using \"/\" instead.", //$NON-NLS-1$
+									null);
+					parentCategory = root;
+				} // if parent exists
+
+				category.setParent(parentCategory);
+				parentCategory.addChildCategory(category);
+
+			} // for each category
+		} // resolveCategories
+
+		/**
+		 * @return the root
+		 */
+		protected final Category getRoot() {
+			return root;
+		}
+
+	} // IdentifiableViewModel
+
+	/**
+	 * This class represents an element in the tree that is the model of the
+	 * plugged in graphs.
+	 */
+	protected static class Category implements Comparable<Object> {
+		Category parent;
+
+		String parentId;
+
+		String categoryId;
+
+		String categoryName;
+
+		List<Category> childCategories;
+
+		List<IdentifiableDelegate> childIdentifiables;
+
+		protected Category(final String categoryName, final String categoryId,
+				final String parentId) {
+			this.categoryName = categoryName;
+			this.categoryId = categoryId;
+			this.parentId = parentId;
+			this.parent = null;
+			this.childCategories = new ArrayList<Category>();
+			this.childIdentifiables = new ArrayList<IdentifiableDelegate>();
+		}
+
+		protected Category(final IConfigurationElement element) {
+			this(getNLSCatagoryName(element
+					.getAttribute(Constants.CATEGORY_NAME_ATTRIBUTE)), element
+					.getAttribute(Constants.CATEGORY_ID_ATTRIBUTE), element
+					.getAttribute(Constants.PARENT_ID_ATTRIBUTE));
+		}
+
+		/**
+		 * @param category
+		 *            a child {@link Category} to add to this parent
+		 */
+		public void addChildCategory(final Category category) {
+			childCategories.add(category);
+		}
+
+		/**
+		 * @param identifiableDelegate
+		 *            the {@link IdentifiableDelegate} to add to the category
+		 */
+		public void addIdentifiableDelegate(
+				final IdentifiableDelegate identifiableDelegate) {
+			childIdentifiables.add(identifiableDelegate);
+		}
+
+		/**
+		 * @param attribute
+		 *            the value of {@link Constants#CATEGORY_NAME_ATTRIBUTE}
+		 * @return the NLS'd version of the category name
+		 */
+		private static String getNLSCatagoryName(final String attribute) {
+			final String name = GeographicNames.getName(attribute);
+			return name.startsWith("!") ? attribute : name;
+		} // getNLSCatagoryName
+
+		/**
+		 * @return the categoryId of this {@link Category}
+		 */
+		protected final String getCategoryId() {
+			return categoryId;
+		}
+
+		/**
+		 * @return the parentId
+		 */
+		protected final String getParentId() {
+			return parentId;
+		}
+
+		/**
+		 * @return the parent
+		 */
+		protected final Category getParent() {
+			return parent;
+		}
+
+		/**
+		 * @param parent
+		 *            the parent to set
+		 */
+		protected final void setParent(final Category parent) {
+			this.parent = parent;
+		}
+
+		/**
+		 * @return the children of the {@link Category}
+		 */
+		public Object[] getChildren() {
+			final List<Object> kidList = new ArrayList<Object>();
+			Collections.sort(childCategories);
+			Collections.sort(childIdentifiables);
+			kidList.addAll(childCategories);
+			kidList.addAll(childIdentifiables);
+			return kidList.toArray();
+		} // getChildren
+
+		/**
+		 * @see java.lang.Object#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder retValue = new StringBuilder(categoryName);
+			retValue.append(", "); //$NON-NLS-1$
+			retValue.append(categoryId);
+			retValue.append(", "); //$NON-NLS-1$
+			retValue.append(parentId);
+			return retValue.toString();
+		}
+
+		/**
+		 * @see java.lang.Object#hashCode()
+		 */
+		@Override
+		public int hashCode() {
+			final int PRIME = 31;
+			int result = 1;
+			result = PRIME * result
+					+ ((categoryId == null) ? 0 : categoryId.hashCode());
+			return result;
+		}
+
+		/**
+		 * @see java.lang.Object#equals(java.lang.Object)
+		 */
+		@Override
+		public boolean equals(final Object obj) {
+			if (this == obj) {
+				return true;
+			}
+			if (obj == null) {
+				return false;
+			}
+			if (getClass() != obj.getClass()) {
+				return false;
+			}
+			final Category other = (Category) obj;
+			if (categoryId == null) {
+				if (other.categoryId != null) {
+					return false;
+				}
+			} else if (!categoryId.equals(other.categoryId)) {
+				return false;
+			}
+			return true;
+		}
+
+		/**
+		 * @param o
+		 * @return the value of the compare
+		 * @see java.lang.Comparable#compareTo(java.lang.Object)
+		 */
+		public int compareTo(final Object o) {
+			int retValue = 0;
+			if (o instanceof Category) {
+				// Yes
+				final Category category = (Category) o;
+				retValue = categoryName.compareTo(category.categoryName);
+			} // if Category
+			else if (o instanceof IdentifiableDelegate) {
+				// Yes
+				// In a tree listing that mixes categories and
+				// IdentifiableDelegates we want the categories to appear first,
+				// so we always return the same value.
+				retValue = 1;
+			} // if IdentifiableDelegate
+			return retValue;
+		} // compareTo
+
+	} // Category
+
+	/**
+	 * This class provides content for the tree view of the {@link Identifiable}
+	 * s that are available as parts of plug-ins.
+	 */
+	protected static class IdentifiablePluginViewTreeContentProvider implements
+			ITreeContentProvider {
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+		 */
+		public Object[] getChildren(final Object parentElement) {
+			Object[] retValue = null;
+			if (parentElement instanceof Category) {
+				final Category category = (Category) parentElement;
+				final List<Object> kidList = new ArrayList<Object>();
+				Collections.sort(category.childCategories);
+				Collections.sort(category.childIdentifiables);
+				kidList.addAll(category.childCategories);
+				kidList.addAll(category.childIdentifiables);
+				retValue = kidList.toArray();
+			}
+			return retValue;
+		} // getChildren
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+		 */
+		public Object getParent(final Object element) {
+			Object retValue = null;
+			if (element instanceof Category) {
+				retValue = ((Category) element).parent;
+			} else {
+				retValue = ((IdentifiableDelegate) element).getParent();
+			}
+			return retValue;
+		} // getParent
+
+		/**
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+		 */
+		public boolean hasChildren(final Object element) {
+			boolean retValue = false;
+			if (element instanceof Category) {
+				final Category cagatory = (Category) element;
+				retValue = cagatory.childCategories.size() > 0
+						|| cagatory.childIdentifiables.size() > 0;
+			}
+			return retValue;
+		} // hasChildren
+
+		/**
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+		 */
+		public Object[] getElements(final Object inputElement) {
+			final IdentifiableViewModel model = (IdentifiableViewModel) inputElement;
+			// return new Object[] { model.getRoot() };
+			Arrays.sort(model.getRoot().getChildren());
+			return model.getRoot().getChildren();
+		} // getElements
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing to dispose
+		} // dispose
+
+		/**
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+		 *      java.lang.Object, java.lang.Object)
+		 */
+		public void inputChanged(
+				@SuppressWarnings("unused") final Viewer viewer,
+				@SuppressWarnings("unused") final Object oldInput,
+				@SuppressWarnings("unused") final Object newInput) {
+			// Nothing to do right now
+		} // inputChanged
+
+	} // IdentifiablePluginViewTreeContentProvider
+
+	/**
+	 * This class provides labels the describe the {@link Identifiable}s
+	 * available as part of plug-ins.
+	 */
+	protected static abstract class IdentifiablePluginViewLabelContentProvider
+			implements ILabelProvider {
+
+		private static Image categoryIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean categoryIconFirstTime = true;
+
+		private final List<ILabelProviderListener> listeners;
+
+		/**
+		 * Constructor
+		 */
+		public IdentifiablePluginViewLabelContentProvider() {
+			listeners = new ArrayList<ILabelProviderListener>();
+		} // IdentifiablePluginViewLabelContentProvider
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+		 */
+		public Image getImage(final Object element) {
+			Image retValue = null;
+			if (element instanceof Category) {
+				retValue = getCategoryIcon();
+			}
+			return retValue;
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent {@link Category}s, or
+		 *         <code>null</code> if it can't be loaded.
+		 */
+		protected Image getCategoryIcon() {
+			// Should we try to load the icon?
+			if (categoryIconFirstTime && categoryIcon == null) {
+				// Yes
+				categoryIconFirstTime = false;
+				categoryIcon = PlatformUI.getWorkbench().getSharedImages()
+						.getImage(ISharedImages.IMG_OBJ_FOLDER);
+			} // if we should load the icon
+			return categoryIcon;
+		} // getCategoryIcon
+
+		/**
+		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+		 */
+		public String getText(final Object element) {
+			String retValue = ""; //$NON-NLS-1$
+			if (element instanceof Category) {
+				final Category category = (Category) element;
+				retValue = category.categoryName;
+			} else if (element instanceof IdentifiableDelegate) {
+				final IdentifiableDelegate identifiableDelegate = (IdentifiableDelegate) element;
+				retValue = identifiableDelegate.toString();
+			}
+			return retValue;
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void addListener(final ILabelProviderListener listener) {
+			listeners.add(listener);
+		} // addListener
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+		 */
+		public void dispose() {
+			// Nothing to do. The images are disposed of elsewhere,
+		} // dispose
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
+		 *      java.lang.String)
+		 */
+		public boolean isLabelProperty(
+				@SuppressWarnings("unused") final Object element,
+				@SuppressWarnings("unused") final String property) {
+			return false;
+		} // isLabelProperty
+
+		/**
+		 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+		 */
+		public void removeListener(final ILabelProviderListener listener) {
+			listeners.remove(listener);
+		} // removeListener
+
+	} // IdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class displays the {@link DublinCore} metadata of
+	 * {@link Identifiable}s when the mouse hovers over it.
+	 */
+	private static class DublinCoreToolTipHandler {
+		// This is the number of pixels below the current mouse position at
+		// which to position the dublin core
+		protected static final int Y_OFFSET = 16;
+
+		protected Shell dcTipShell;
+
+		Label dcDescriptionText;
+
+		Label dcCreatorText;
+
+		Label dcValidText;
+
+		Label dcSourceText;
+
+		DublinCoreToolTipHandler(final Shell parent) {
+			final Display display = parent.getDisplay();
+
+			dcTipShell = new Shell(parent, SWT.ON_TOP | SWT.TOOL);
+			final GridLayout gridLayout = new GridLayout();
+			gridLayout.numColumns = 1;
+			dcTipShell.setLayout(gridLayout);
+
+			final Color backgroundColor = display
+					.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
+			final Color foregroundColor = display
+					.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
+
+			dcTipShell.setBackground(backgroundColor);
+
+			dcDescriptionText = createDCAttributeLabel(dcTipShell,
+					backgroundColor, foregroundColor);
+
+			dcCreatorText = createDCAttributeLabel(dcTipShell, backgroundColor,
+					foregroundColor);
+
+			dcValidText = createDCAttributeLabel(dcTipShell, backgroundColor,
+					foregroundColor);
+			dcSourceText = createDCAttributeLabel(dcTipShell, backgroundColor,
+					foregroundColor);
+
+			dcTipShell.pack();
+		} // DublinCoreToolTipHandler
+
+		private Label createDCAttributeLabel(final Shell parent,
+				final Color backgroundColor, final Color foregroundColor) {
+			final Label retValue = new Label(parent, SWT.NONE);
+			retValue.setBackground(backgroundColor);
+			retValue.setForeground(foregroundColor);
+			retValue.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
+					| GridData.VERTICAL_ALIGN_CENTER));
+			return retValue;
+		} // createDCAttributeLabel
+
+		/**
+		 * Add the necessary listeners to the {@link Control} to catch the mouse
+		 * events and pop the tool tip up.
+		 * 
+		 * @param control
+		 */
+		public void addDCToolTipHelp(final Control control) {
+			// If the user clicks with the mouse we want to get rid of the
+			// dublin core
+			control.addMouseListener(new MouseAdapter() {
+
+				/**
+				 * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
+				 */
+				@Override
+				public void mouseDown(
+						@SuppressWarnings("unused") final MouseEvent e) {
+					// Is the dublin core visible?
+					if (dcTipShell.isVisible()) {
+						// Yes
+						// Not any more
+						dcTipShell.setVisible(false);
+					} // if visible
+				} // mouseDown
+
+			});
+
+			// If the mouse hovers we want to pop up the dublin core, but if it
+			// exits we want to get right of it.
+			control.addMouseTrackListener(new MouseTrackAdapter() {
+
+				/**
+				 * @see org.eclipse.swt.events.MouseTrackAdapter#mouseHover(org.eclipse.swt.events.MouseEvent)
+				 */
+				@Override
+				public void mouseHover(final MouseEvent e) {
+					final Point pt = new Point(e.x, e.y);
+					// Is the event's Widget a Tree (it should be)?
+					if (e.widget instanceof Tree) {
+						// Yes
+						final Tree tree = (Tree) e.widget;
+						final TreeItem treeItem = tree.getItem(pt);
+						// Are we over anything?
+						if (treeItem != null) {
+							// Yes
+							final Object obj = treeItem.getData();
+
+							// Does it have DC meta data?
+							if (obj instanceof IdentifiableDelegate) {
+								// Yes
+								final IdentifiableDelegate id = (IdentifiableDelegate) obj;
+								final DublinCore dc = id.getDublinCore();
+
+								final String description = dc.getDescription();
+								final String creator = dc.getCreator();
+								final String valid = dc.getValid();
+								final String source = dc.getSource();
+
+								// Is there a description?
+								if (description != null
+										&& !description.equals("")) {
+									// Yes
+									dcDescriptionText.setText(description);
+									dcDescriptionText.setVisible(true);
+								} // if
+								else {
+									// No
+									dcDescriptionText.setVisible(false);
+								}
+
+								// Is there a creator?
+								if (creator != null && !creator.equals("")) {
+									// Yes
+									dcCreatorText.setText(creator);
+									dcCreatorText.setVisible(true);
+								} // if
+								else {
+									// No
+									dcCreatorText.setVisible(false);
+								}
+								// Is there a valid range?
+								if (valid != null && !valid.equals("")) {
+									// Yes
+									dcValidText.setText(valid);
+									dcValidText.setVisible(true);
+								} // if
+								else {
+									// No
+									dcValidText.setVisible(false);
+								}
+
+								// Is there a source?
+								if (source != null && !source.equals("")) {
+									// Yes
+									dcSourceText.setText(source);
+									dcSourceText.setVisible(true);
+								} // if
+								else {
+									// No
+									dcSourceText.setVisible(false);
+								}
+
+								dcTipShell.pack();
+
+								// Now we need to figure out where to position
+								// the shell containing the dublin core tool tip
+								// given the size of the tool tip and the bounds
+								// of the Display.
+								dcTipShell.setBounds(computeHoverLocation(
+										dcTipShell, control.toDisplay(pt)));
+
+								// Make the Dublin Core tool tip visible
+								dcTipShell.setVisible(true);
+							} // if IConfigurationElement
+
+							else {
+								// No
+								dcTipShell.setVisible(false);
+							}
+						} // if display DC
+						else {
+							// No
+							dcTipShell.setVisible(false);
+						}
+
+					} // if Tree
+
+				} // mouseHover
+
+				/**
+				 * Figure out where to position the tool tip
+				 * 
+				 * @param dcTipShell
+				 *            the {@link Shell} that contains the dublin core
+				 * @param mousePosition
+				 *            the current position of the Mouse relative to the
+				 *            Display
+				 */
+				private Rectangle computeHoverLocation(final Shell dcTipShell,
+						final Point mousePosition) {
+					// Get the current bounds of the toolTip
+					final Rectangle retValue = dcTipShell.getBounds();
+
+					final Rectangle displayBounds = dcTipShell.getDisplay()
+							.getBounds();
+					// The x position is either the current mouse position if
+					// the dublin core can be displayed entirely to the right of
+					// that, or a value to the left of that that allows it to be
+					// displayed, with 0 being the limit.
+					retValue.x = Math.max(Math.min(mousePosition.x,
+							displayBounds.width - retValue.width), 0);
+
+					// The y position is Y_OFFSET pixels below the current mouse
+					// position, or if the entire dublin core won't fit in the
+					// window at that position, then the lowest position above
+					// that where it can, with 0 (the top of the Display) being
+					// the limit
+					retValue.y = Math.max(Math.min(mousePosition.y + Y_OFFSET,
+							displayBounds.height - retValue.height), 0);
+
+					return retValue;
+				} // computeHoverLocation
+
+				/**
+				 * @see org.eclipse.swt.events.MouseTrackAdapter#mouseExit(org.eclipse.swt.events.MouseEvent)
+				 */
+				@Override
+				public void mouseExit(
+						@SuppressWarnings("unused") final MouseEvent e) {
+					// Is the dublin core visible?
+					if (dcTipShell.isVisible()) {
+						// Yes
+						// Not any more
+						dcTipShell.setVisible(false);
+					} // if visible
+				} // mouseExit
+			});
+		} // addDCToolTipHelp
+	} // DublinCoreToolTipHandler
+} // IdentifiablePluginView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/Messages.java
new file mode 100644
index 0000000..a01ae73
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.views.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ModelsView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ModelsView.java
new file mode 100644
index 0000000..1f13b84
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ModelsView.java
@@ -0,0 +1,112 @@
+// ModelsView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the {@link org.eclipse.stem.core.model.Model}s that have been
+ * imported into eclipse as plug-ins.
+ */
+public class ModelsView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Model View
+	 */
+	public static final String ID_MODELS_VIEW = "org.eclipse.stem.ui.views.models"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public ModelsView() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new ModelPluginViewLabelContentProvider();
+	}
+
+	/**
+	 * @return the input model specific to this view
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return ModelViewModel.getModel();
+	} // getInput
+
+	/**
+	 * This class represents a singleton instance of a model of the STEM
+	 * {@link Model} that are plugged into the system.
+	 */
+	protected static class ModelViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static ModelViewModel mvModel;
+
+		private ModelViewModel() {
+			super(Constants.ID_MODEL_EXTENSION_POINT);
+		}
+
+		/**
+		 * @return the singleton instance of the ModelViewModel
+		 */
+		public static ModelViewModel getModel() {
+			if (mvModel == null) {
+				mvModel = new ModelViewModel();
+			}
+			return mvModel;
+		} // getModel
+
+	} // ModelViewsModel
+
+	protected static class ModelPluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent models in the model view
+		static Image modelIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean modelIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(final Object element) {
+			return (element instanceof IdentifiableDelegate) ? getModelIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent models, or null if it can't
+		 *         be loaded.
+		 */
+		private Image getModelIcon() {
+			// Should we try to load the icon?
+			if (modelIconFirstTime && modelIcon == null) {
+				// Yes
+				modelIconFirstTime = false;
+				modelIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.MODEL_ICON);
+			} // if we should load the icon
+			return modelIcon;
+		} // getModelIcon
+
+	} // ModelPluginViewLabelContentProvider
+} // ModelsView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/PredicatesView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/PredicatesView.java
new file mode 100644
index 0000000..b6e4bfd
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/PredicatesView.java
@@ -0,0 +1,112 @@
+// PredicatesView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.predicate.Predicate}s that have been imported
+ * into eclipse as plug-ins.
+ */
+public class PredicatesView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Predicates View {@value}
+	 */
+	public static final String ID_PREDICATES_VIEW = "org.eclipse.stem.ui.views.predicates"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public PredicatesView() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new PredicatePluginViewLabelContentProvider();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return PredicateViewModel.getModel();
+	} // getInput
+
+	/**
+	 * This class represents a singleton instance of a model of the STEM
+	 * {@link Predicate}s that are plugged into the system.
+	 */
+	protected static class PredicateViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static PredicateViewModel pvModel;
+
+		private PredicateViewModel() {
+			super(Constants.ID_PREDICATE_EXTENSION_POINT);
+		}
+
+		/**
+		 * @return the singleton instance of the ModelViewModel
+		 */
+		public static PredicateViewModel getModel() {
+			if (pvModel == null) {
+				pvModel = new PredicateViewModel();
+			}
+			return pvModel;
+		} // getModel
+	} // PredicateViewModel
+
+	protected static class PredicatePluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent predicates in the predicate view
+		static Image predicateIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean predicateIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getPredicateIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent predicates, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getPredicateIcon() {
+			// Should we try to load the icon?
+			if (predicateIconFirstTime && predicateIcon == null) {
+				// Yes
+				predicateIconFirstTime = false;
+				predicateIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.PREDICATE_ICON);
+			} // if we should load the icon
+			return predicateIcon;
+		} // getPredicateIcon
+
+	} // PredicatePluginViewLabelContentProvider
+} // PredicatesView
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ScenariosView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ScenariosView.java
new file mode 100644
index 0000000..11f1a81
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/ScenariosView.java
@@ -0,0 +1,112 @@
+// ScenariosView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.scenario.Scenario}s that have been imported into
+ * eclipse as plug-ins.
+ */
+public class ScenariosView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Scenarios View {@value}
+	 */
+	public static final String ID_SCENARIOS_VIEW = "org.eclipse.stem.ui.views.scenarios"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public ScenariosView() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new ScenarioPluginViewLabelContentProvider();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return ScenarioViewModel.getModel();
+	} // getInput
+
+	/**
+	 * This class represents a singleton instance of a model of the STEM
+	 * {@link Scenario}s that are plugged into the system.
+	 */
+	protected static class ScenarioViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static ScenarioViewModel svModel;
+
+		private ScenarioViewModel() {
+			super(Constants.ID_SCENARIO_EXTENSION_POINT);
+		}
+
+		/**
+		 * @return the singleton instance of the ModelViewModel
+		 */
+		public static ScenarioViewModel getModel() {
+			if (svModel == null) {
+				svModel = new ScenarioViewModel();
+			}
+			return svModel;
+		} // getModel
+	} // ScenarioViewModel
+
+	protected static class ScenarioPluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent scenarios in the scenario view
+		static Image scenarioIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean scenarioIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getScenarioIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent scenarios, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getScenarioIcon() {
+			// Should we try to load the icon?
+			if (scenarioIconFirstTime && scenarioIcon == null) {
+				// Yes
+				scenarioIconFirstTime = false;
+				scenarioIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.SCENARIO_ICON);
+			} // if we should load the icon
+			return scenarioIcon;
+		} // getScenarioIcon
+
+	} // ScenarioPluginViewLabelContentProvider
+}// ScenariosView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SequencersView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SequencersView.java
new file mode 100644
index 0000000..239918d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SequencersView.java
@@ -0,0 +1,114 @@
+// SequencersView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.sequencer.Sequencer}s that have been
+ * imported into eclipse as plug-ins.
+ *
+ */
+public class SequencersView extends IdentifiablePluginView {
+	/**
+	 * The identifier of the Sequencers View
+	 */
+	public static final String ID_SEQUENCERS_VIEW = "org.eclipse.stem.ui.views.sequencers"; //$NON-NLS-1$
+
+	/**
+	 * @see org.eclipse.stem.ui.views.ExecutablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return SequencerModel.getModel();
+	} // ExecutableViewModel
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new SequencerViewTreeContentProvider();
+	} // getIdentifiablePluginViewLabelContentProvider
+
+	/**
+	 * This class represents the model of the Sequencers that extend a
+	 * org.eclipse.stem.core.sequencers extension point.
+	 */
+	private static class SequencerModel extends IdentifiableViewModel {
+
+		// The singleton instance
+		private static SequencerModel seqModel;
+
+		/**
+		 * Constructor
+		 */
+		public SequencerModel() {
+			super(Constants.ID_SEQUENCER_EXTENSION_POINT);
+		} // SequencerModel
+
+		/**
+		 * @return the singleton instance of the model
+		 */
+		public static SequencerModel getModel() {
+			// Do we need to make the model?
+			if (seqModel == null) {
+				// Yes
+				seqModel = new SequencerModel();
+			}
+			return seqModel;
+		} // getModel
+	} // SequencerModel
+
+	/**
+	 * This class is the content provider of the sequencers view.
+	 */
+	protected static class SequencerViewTreeContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent sequencers in the sequencers view
+		static Image sequencerIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean sequencerIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(final Object element) {
+			return (element instanceof IdentifiableDelegate) ? getDiseaseIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent sequencers, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getDiseaseIcon() {
+			// Should we try to load the icon?
+			if (sequencerIconFirstTime && sequencerIcon == null) {
+				// Yes
+				sequencerIconFirstTime = false;
+
+				sequencerIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.SEQUENCER_ICON);
+			} // if we should load the icon
+			return sequencerIcon;
+		} // getdiseaseIcon
+	} // SequencerViewTreeContentProvider
+} // SequencersView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControl.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControl.java
new file mode 100644
index 0000000..b70535b
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControl.java
@@ -0,0 +1,769 @@
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+import org.eclipse.jface.resource.ColorRegistry;
+import org.eclipse.jface.resource.FontRegistry;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.Sequencer;
+import org.eclipse.stem.jobs.execution.IExecutable;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedColors;
+import org.eclipse.stem.ui.ISharedFonts;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is an SWT control that displays the status/state of an ISimulation
+ * and allows the ISimulation to be managed.
+ * 
+ */
+public class SimulationControl extends Composite implements
+		ISimulationListener, ControlListener {
+
+	/**
+	 * This is the active simulation job to which this class is attached & has
+	 * control upon.
+	 */
+	protected ISimulation simulation = null;
+
+	
+	/**
+	 * Boolean used to keep track of resettings : We need this variable because
+	 * sometimes after a reset there is still one or two complete_cycles from
+	 * old simulation run (before resetting) that should not be processed.
+	 * 
+	 */
+	private boolean reset = false;
+
+	/**
+	 * The Image registry manages images, creates them on-demand, and disposes
+	 * them when the associated display is disposed.
+	 */
+	private static ImageRegistry imageRegistry = null;
+
+	/**
+	 * The color registry manages SWT colors, creates them on-demand, and takes
+	 * care of disposal.
+	 */
+	private static ColorRegistry colorRegistry = null;
+
+	/**
+	 * JFace font registry
+	 */
+	private static FontRegistry fontRegistry = null;
+
+	/**
+	 * WIDGETS for simulation control
+	 */
+
+	/**
+	 * The top level container for the simulation control
+	 */
+	private Composite mainContainer = null;
+
+	private Composite btnContainer = null;
+
+	private Text simulationProgressText;
+	private Text  simulationStateText;
+	private Text  simulationTimeText;
+
+	private ProgressBar pb = null;
+	
+	private Text simulationTitleText = null;
+
+	/**
+	 * Symbolic constant indicating no work has been done
+	 */
+	private static int BEGIN_WORK = 0;
+
+	/**
+	 * Boolean variable used to indicate whether we should build a progress bar
+	 * using SWT.INDETERMINATE
+	 */
+	private boolean UNKNOWN_DURATION = false;
+
+	/**
+	 * Some constants we need to set preferred sizes of SWT controls and
+	 * containers.
+	 */
+
+	private static final int STANDARD_LENGTH = 100;
+
+	private static final int STANDARD_HEIGHT = 18;
+
+	private static final int CONTAINER_HEIGHT = 225;
+	
+	private static final int MARGIN = 10;
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 * @param simulation
+	 * 
+	 */
+	public SimulationControl(Composite parent, ISimulation simulation) {
+		super(parent, SWT.NONE);
+
+		// First, register as a listener of simulation manager events
+		simulation.addSimulationListener(this);
+
+		// Sets the active simulation we are going to control
+		this.simulation = simulation;
+
+		
+		Sequencer sequencer = simulation.getScenario().getSequencer();
+		// Check to see if we have to create an indeterminate progress bar.
+		UNKNOWN_DURATION = 
+			(sequencer.getDuration() == Sequencer.UNKNOWN_DURATION) 
+			? true : false;
+
+		// Set the image registry
+		if (imageRegistry == null) {
+			Activator activator = Activator.getDefault();
+			imageRegistry = activator.getImageRegistry();
+		}
+		// Set the color registry
+		if (colorRegistry == null) {
+			Activator activator = Activator.getDefault();
+			colorRegistry = activator.getColorRegistry();
+		}
+		// Set the font registry
+		if (fontRegistry == null) {
+			Activator activator = Activator.getDefault();
+			fontRegistry = activator.getFontRegistry();
+		}
+
+		// Set the layout data for the simulation control
+		// The parent has been set to GridLayout() previously.
+		this.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+		
+		// Now create all the widgets
+		createContents(this);
+		parent.redraw();
+	}
+
+	/**
+	 * Compute the new bounds for the simulation control after resizing.
+	 * 
+	 * @param event
+	 */
+	public void controlResized(ControlEvent event) {
+      
+		
+		final int MULTIPLIER = 5;
+
+	
+		// Get the client area boundaries.
+		Rectangle clientBounds = null;
+		if (this.getParent() != null) {
+			if (this.getParent().getParent() != null) {
+				clientBounds = this.getParent().getParent().getClientArea();
+			}
+		}
+
+		// Make sure we don't get an NPE
+		if (clientBounds == null) {
+			return;
+		}
+        
+        int width = clientBounds.width- (MARGIN * MULTIPLIER);
+        int height = STANDARD_HEIGHT;
+		// Compute the new displaying bounds.
+		Rectangle pbBounds = this.computeTrim(pb.getBounds().x,
+				pb.getBounds().y, width,height);
+		Rectangle titleBounds = this.computeTrim(
+				        simulationTitleText.getBounds().x, 
+				        simulationTitleText.getBounds().y, width, height);
+		Rectangle stateBounds = this.computeTrim(
+				        simulationStateText.getBounds().x, 
+				        simulationStateText.getBounds().y, width, height);
+		Rectangle timeBounds = this.computeTrim(
+		        simulationTimeText.getBounds().x, 
+		        simulationTimeText.getBounds().y, width, height);
+		Rectangle progressBounds = this.computeTrim(
+		        simulationProgressText.getBounds().x, 
+		        simulationProgressText.getBounds().y, width, height);
+		Rectangle mainBounds = this.computeTrim(clientBounds.x, clientBounds.y,
+				clientBounds.width - MARGIN, CONTAINER_HEIGHT);
+		Rectangle btnBounds = this.computeTrim(btnContainer.getBounds().x, 
+				btnContainer.getBounds().y,width,height+2*MARGIN);
+		// Set the new boundaries.
+		pb.setBounds(pbBounds);
+		
+		simulationTitleText.setBounds(titleBounds);
+		
+		simulationStateText.setBounds(stateBounds);
+		simulationTimeText.setBounds(timeBounds);
+		simulationProgressText.setBounds(progressBounds);
+		
+		btnContainer.setBounds(btnBounds);
+		mainContainer.setBounds(mainBounds);
+		// Redraw the widgets.
+		
+		mainContainer.redraw();
+		
+	}
+
+	/**
+	 * Event handler method for moved window events.
+	 * 
+	 * @param event
+	 */
+	public void controlMoved(ControlEvent event) {
+		// DO NOTHING
+	}
+
+	/**
+	 * Reset the progress bar to initial state
+	 * 
+	 */
+	protected void resetProgressBar() {
+
+		if (null == pb || pb.isDisposed() ) {
+			return;
+		}
+//		if (UNKNOWN_DURATION) {
+//			return;
+//		}
+		pb.setMinimum(BEGIN_WORK);
+		pb.setMaximum(IExecutable.TOTAL_WORK);
+		pb.setSelection(BEGIN_WORK);
+		pb.redraw();
+	}
+
+	/**
+	 * Update simulation state label whenever simulation changes state
+	 * 
+	 * @param state
+	 *            of simulation
+	 */
+	protected void updateStateLabel(SimulationState state) {
+
+		if (null == simulationStateText || simulationStateText.isDisposed()) {
+			return;
+		}
+        Rectangle bounds = simulationStateText.getBounds();
+		if (state.equals(SimulationState.RUNNING) ||
+				state.equals(SimulationState.COMPLETED_CYCLE) ) {
+			simulationStateText.setText(Messages.getString("SCtrl.Running")); //$NON-NLS-1$
+			simulationStateText.setBackground(colorRegistry
+					.get(ISharedColors.GREEN));
+			
+		} else if (state.equals(SimulationState.PAUSED)) {
+			simulationStateText.setText(Messages.getString("SCtrl.Paused")); //$NON-NLS-1$
+			simulationStateText.setBackground(colorRegistry
+					.get(ISharedColors.YELLOW));
+		} else if (state.equals(SimulationState.RESET)) {
+			simulationStateText.setText(Messages.getString("SCtrl.Reset")); //$NON-NLS-1$
+			simulationStateText.setBackground(colorRegistry
+					.get(ISharedColors.ORANGE));
+			pb.setSelection(0);
+		}
+		
+        simulationStateText.setBounds(bounds);
+		simulationStateText.redraw();
+	}
+
+	/**
+	 * Update progress bar and progress Label
+	 * If no duration then use sequencer cycle count to 
+	 * (modulo 100) to reflect the progress.
+	 * If there is a duration then use the work completed 
+	 * value.
+	 * 
+	 * @param workCompleted
+	 * @param state  Simulation state (running, paused ...)
+	 */
+
+	protected void updateProgressLabel(int workCompleted, SimulationState state) {
+		Rectangle bounds = simulationProgressText.getBounds();
+		Sequencer sequencer = simulation.getScenario().getSequencer();
+		int current = sequencer.getCycle() ;
+			
+		
+		if (UNKNOWN_DURATION == true) {
+			// WE HAVE UNKNOWN DURATION
+			simulationProgressText.setText(
+					Messages.getString("SCtrl.Progress") + 
+					" : unknown duration"); //$NON-NLS-1$ //$NON-NLS-2$
+			current = current%100;
+			
+		} else if (workCompleted <= IExecutable.TOTAL_WORK) {
+			simulationProgressText.setText(
+					Messages.getString("SCtrl.Progress") +
+					" : " + workCompleted + "%"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+
+
+		simulationProgressText.setBounds(bounds);
+		simulationProgressText.redraw();
+		pb.setSelection(current);
+	}
+
+	/**
+	 * Update simulation time label
+	 * 	 
+	 * @param state Simulation state
+	 */
+	protected void updateTimeLabel(SimulationState state) {
+		Rectangle bounds = simulationTimeText.getBounds();
+		// Get the current time :
+		Sequencer sequencer = simulation.getScenario().getSequencer();
+		STEMTime time = sequencer.getCurrentTime();
+
+		if ((state.name().equals("RUNNING") == false) //$NON-NLS-1$
+				&& (state.name().equals("COMPLETED_CYCLE") == false)) { //$NON-NLS-1$
+			// DONT UPDATE UNLESS STATE IS RUNNING OR COMPLETED_CYCLE
+			//return;
+		}
+
+		if (sequencer.getCycle() > 0 && reset == true) {
+			// DO NOTHING : ignore spurious completed cycles after a reset.
+			reset = false;
+			return;
+		}
+        String timeLabel= "[" + sequencer.getCycle() + "] " + 
+                        Messages.getString("SCtrl.Time") + 
+                        " : " + time.toString(); 
+        //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$	
+		simulationTimeText.setText(timeLabel);	
+		simulationTimeText.setToolTipText(timeLabel);
+		
+		simulationTimeText.setBounds(bounds);
+		simulationTimeText.redraw();
+
+	}
+
+	/**
+	 * @return the simulation to which this control is attached or associated
+	 */
+	public ISimulation getSimulation() {
+		return simulation;
+	}
+
+	/**
+	 * This is where we create & initialize the components that go into the
+	 * simulation control.
+	 * 
+	 * <pre>
+	 * - Title of Simulation
+	 * - Progress status
+	 * - State (Running Paused)
+	 * - progress bar
+	 * - Control buttons
+	 * 
+	 * @param parent  SimulationControl Composite (ourselves)
+	 * 
+	 */
+	private void createContents(Composite parent) {
+
+		// Create the top level container for the SWT Widgets of the simulation
+		// control
+		mainContainer = new Composite(parent, SWT.SMOOTH | SWT.BORDER);
+		// Set Layout data for MainContainer within SimulationControl
+		mainContainer.setLayoutData(getMainContainerGridData());
+		// Set the layout manager for the top level container
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 1;
+		mainContainer.setLayout(gridLayout);
+		
+
+		simulationTitleText = new Text(mainContainer, SWT.MULTI | SWT.WRAP);
+		simulationTitleText.setText(simulation.getNameWithSequenceNumber());
+		simulationTitleText.setToolTipText(simulation.getName());
+		simulationTitleText
+				.setBackground(colorRegistry.get(ISharedColors.GRAY));
+		simulationTitleText.setFont(fontRegistry.get(ISharedFonts.DEFAULT));
+		simulationTitleText.setEditable(false);
+		simulationTitleText.setLayoutData(getTextGridData());
+
+		simulationProgressText = new Text(mainContainer, SWT.SMOOTH
+				| SWT.BORDER);
+		simulationProgressText.setBackground(colorRegistry
+				.get(ISharedColors.GREEN));
+		simulationProgressText.setEditable(false);
+		simulationProgressText.setFont(fontRegistry.get(ISharedFonts.DEFAULT));
+		simulationProgressText.setLayoutData(getTextGridData());
+
+		simulationStateText = new Text(mainContainer, SWT.SMOOTH | SWT.BORDER);
+		simulationStateText.setBackground(colorRegistry
+				.get(ISharedColors.GREEN));
+		simulationStateText.setEditable(false);
+		simulationStateText.setFont(fontRegistry.get(ISharedFonts.DEFAULT));
+		simulationStateText.setLayoutData(getTextGridData());
+
+
+		pb = new ProgressBar(mainContainer, SWT.SMOOTH | SWT.BORDER);
+		pb.setFont(fontRegistry.get(ISharedFonts.DEFAULT));
+		pb.setLayoutData(getProgressBarGridData());
+
+		simulationTimeText = new Text(mainContainer, SWT.SMOOTH | SWT.BORDER);
+		simulationTimeText.setBackground(colorRegistry
+				.get(ISharedColors.GREEN));
+		simulationTimeText.setEditable(false);
+		simulationTimeText.setFont(fontRegistry.get(ISharedFonts.DEFAULT));
+		simulationTimeText.setLayoutData(getTextGridData());
+
+		createControlButtons(mainContainer);
+		
+		resetProgressBar(); // Set and display progress bar's initial value
+		updateStateLabel(simulation.getSimulationState());
+		updateProgressLabel(BEGIN_WORK, simulation.getSimulationState());
+        updateTimeLabel(simulation.getSimulationState());
+		//mainContainer.redraw();
+	}
+
+	/**
+	 * Create a new grid data object with default values.
+	 * 
+	 * @return the new grid data object
+	 */
+	protected GridData getDefaultGridData() {
+		GridData gridData = new GridData();
+		gridData.grabExcessHorizontalSpace = false;
+		gridData.grabExcessVerticalSpace = false;
+		gridData.heightHint = STANDARD_HEIGHT;
+		gridData.minimumHeight = STANDARD_HEIGHT;
+		gridData.widthHint = STANDARD_LENGTH;
+		gridData.minimumWidth = STANDARD_LENGTH;
+		gridData.horizontalAlignment = SWT.LEFT;
+		return gridData;
+	}
+
+	/**
+	 * Create a new grid data customized for a text field.
+	 * 
+	 * @return gridData the new grid data object
+	 */
+	protected GridData getTextGridData() {
+		GridData gridData = new GridData(SWT.FILL, SWT.NONE, true, false);
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = false;
+		gridData.heightHint = STANDARD_HEIGHT;
+		gridData.minimumHeight = STANDARD_HEIGHT-2;
+		gridData.widthHint = STANDARD_LENGTH;
+		gridData.minimumWidth = STANDARD_LENGTH;
+		gridData.horizontalAlignment = SWT.FILL;
+		return gridData;
+	}
+
+	/**
+	 * Create a new grid data customized for a progress bar.
+	 * 
+	 * @return gridData the new grid data object
+	 */
+	protected GridData getProgressBarGridData() {
+		GridData gridData = new GridData(SWT.FILL, SWT.NONE, true, false);
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.grabExcessVerticalSpace = false;
+		gridData.horizontalAlignment = SWT.FILL;
+		return gridData;
+	}
+
+	/**
+	 * Create a new grid data customized for the main container of the
+	 * simulation control.
+	 * 
+	 * @return gridData the new grid data object
+	 */
+	protected GridData getMainContainerGridData() {
+		GridData gridData = new GridData();
+		gridData.grabExcessVerticalSpace = false;
+		gridData.grabExcessHorizontalSpace = true;
+		// Set the preferred size.
+		gridData.widthHint = STANDARD_LENGTH;
+		gridData.minimumWidth = STANDARD_LENGTH;
+		//gridData.heightHint = STANDARD_HEIGHT;
+		//gridData.minimumHeight = STANDARD_HEIGHT;
+		gridData.heightHint = CONTAINER_HEIGHT;
+		gridData.minimumHeight = CONTAINER_HEIGHT;
+		return gridData;
+	}
+
+	/**
+	 * Create a new grid data customized for the push buttons.
+	 * 
+	 * @return gridData the new grid data object
+	 */
+	protected GridData getButtonGridData() {
+		
+		GridData gridData = new GridData();
+		gridData.grabExcessVerticalSpace = false;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.horizontalAlignment = SWT.FILL;
+		gridData.verticalAlignment = SWT.CENTER;
+		gridData.heightHint = STANDARD_HEIGHT-2+MARGIN;
+		gridData.minimumHeight = STANDARD_HEIGHT-2;
+		return gridData;
+	}
+
+	/**
+	 * Creates the array of SWT push buttons.
+	 * btnContainer is a new Composite that will contain
+	 * a row of 5 buttons.
+	 * @param parent mainContainer
+	 */
+	protected void createControlButtons(Composite parent) {
+		
+		final int OFFSET = 16;
+		btnContainer = new Composite(parent,0);
+        //btnContainer.setSize(STANDARD_LENGTH, STANDARD_HEIGHT+OFFSET);
+        
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 5;
+		gridLayout.makeColumnsEqualWidth = true;
+		btnContainer.setLayout(gridLayout);
+        // set gridData for btnContainer within mainContainer
+		GridData gridData = new GridData();
+		gridData.grabExcessHorizontalSpace = false;
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.verticalAlignment = GridData.FILL;
+		gridData.grabExcessVerticalSpace = true;
+		gridData.heightHint = STANDARD_HEIGHT + OFFSET+MARGIN;
+		gridData.minimumHeight = STANDARD_HEIGHT+ OFFSET+MARGIN;
+		gridData.widthHint = STANDARD_LENGTH;
+		gridData.minimumWidth = STANDARD_LENGTH;
+		btnContainer.setLayoutData(gridData);
+
+		// create the simulation control buttons
+		Button run = new Button(btnContainer, SWT.PUSH);
+		Button pause = new Button(btnContainer, SWT.PUSH);
+		Button reset = new Button(btnContainer, SWT.PUSH);
+		Button step = new Button(btnContainer, SWT.PUSH);
+		Button stop = new Button(btnContainer, SWT.PUSH);
+
+		// set alignment and background color
+		run.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
+		run.setToolTipText(Messages.getString("SCtrl.StartSim")); //$NON-NLS-1$
+		run.setLayoutData(getButtonGridData());
+
+		pause
+				.setBackground(parent.getDisplay().getSystemColor(
+						SWT.COLOR_GRAY));
+		pause.setToolTipText(Messages.getString("SCtrl.PauseSim")); //$NON-NLS-1$
+		pause.setLayoutData(getButtonGridData());
+
+		reset
+				.setBackground(parent.getDisplay().getSystemColor(
+						SWT.COLOR_GRAY));
+		reset.setToolTipText(Messages.getString("SCtrl.RestoreSim")); //$NON-NLS-1$
+		reset.setLayoutData(getButtonGridData());
+
+		step.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
+		step.setToolTipText(Messages.getString("SCtrl.StepSim")); //$NON-NLS-1$
+		step.setLayoutData(getButtonGridData());
+
+		stop.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GRAY));
+		stop.setToolTipText(Messages.getString("SCtrl.StopSim")); //$NON-NLS-1$
+		stop.setLayoutData(getButtonGridData());
+
+		run.setImage(imageRegistry.get(ISharedImages.RUN_ICON));
+		pause.setImage(imageRegistry.get(ISharedImages.PAUSE_ICON));
+		reset.setImage(imageRegistry.get(ISharedImages.RESET_ICON));
+		step.setImage(imageRegistry.get(ISharedImages.STEP_ICON));
+		stop.setImage(imageRegistry.get(ISharedImages.STOP_ICON));
+        
+
+		// set event listeners for buttons
+		run.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					run();
+					break;
+				}
+			}
+		});
+		pause.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					pause();
+					break;
+				}
+			}
+		});
+		reset.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					reset();
+					break;
+				}
+			}
+		});
+		step.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					step();
+					break;
+				}
+			}
+		});
+		stop.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				switch (e.type) {
+				case SWT.Selection:
+					stop();
+					break;
+				}
+			}
+		});
+
+	}
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+        
+		// Nullify all our references.
+		if (simulation != null) {
+			simulation.removeSimulationListener(this);
+			simulation = null;
+		}
+
+		
+		// Force disposal of the main widget for the simulation control.
+		if (mainContainer != null) {
+			mainContainer.dispose();
+		}
+
+	} // dispose
+
+	/**
+	 * This is where the simulation control hears about changes in the
+	 * simulation it is managing. It is really only interested in all events
+	 * generated by the active simulation
+	 * 
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChanged(SimulationEvent event) {
+
+		// Get the current simulation state
+		final SimulationState simulationState = event.getSimulationState();
+        Sequencer sequencer = simulation.getScenario().getSequencer();
+		// If sequencer is null, then we have disposed the widget.
+		if (sequencer == null) {
+			// Widget disposed, do nothing.
+			return;
+		}
+
+		switch (simulationState) {
+		case STOPPED:
+			// We're done, we'll get an event from the SimulationManager telling
+			// us that the Simulation is no longer around.
+			return;
+
+		case COMPLETED_CYCLE:
+			final int workComplete = (int) sequencer.getWorkComplete();
+
+			if (workComplete < IExecutable.TOTAL_WORK) {
+				// Has the widget been disposed ?
+				if (pb.isDisposed() == true) {
+					// Yes, do nothing.
+					return;
+				}
+				pb.setSelection(workComplete);
+				updateProgressLabel(workComplete, simulationState);
+			}
+			break;
+		case RUNNING:
+			break;	
+		case COMPLETED_SEQUENCE:
+		case PAUSED:
+		case RESET:
+			// Nothing
+			break;
+
+		} // switch simulation state
+		updateStateLabel(simulationState);
+		updateTimeLabel(simulationState);
+	} // simulationChanged
+
+	/**
+	 * Reset the time label
+	 * 
+	 */
+	protected void resetTimeLabel() {
+		final int ZERO = 0;
+
+		simulationTimeText
+				.setText("[ " + ZERO + " ] " + Messages.getString("SCtrl.Time") + " : " + ZERO); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$  //$NON-NLS-4$
+		
+		simulationTimeText.redraw();
+	}
+
+	/**
+	 * Run the simulation
+	 * 
+	 */
+	public void run() {
+		simulation.run();
+	}
+
+	/**
+	 * Pause the simulation
+	 * 
+	 */
+	public void pause() {
+		simulation.pause();
+	}
+
+	/**
+	 * Reset the simulation and the controls.
+	 * 
+	 */
+	public void reset() {
+		// Reset the simulation
+		simulation.reset();
+
+		// Turn flag for resets ON :
+		reset = true;
+		// Now reset the widget :
+		resetTimeLabel();
+	}
+
+	/**
+	 * Step the simulation
+	 * 
+	 */
+	public void step() {
+		simulation.step();
+	}
+
+	/**
+	 * Stop the simulation
+	 */
+	public void stop() {
+		simulation.stop();
+	}
+
+} // SimulationControl
+
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControlView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControlView.java
new file mode 100644
index 0000000..a443947
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/SimulationControlView.java
@@ -0,0 +1,440 @@
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class implements an eclipse view that displays the state of the
+ * currently active simulations and GUI controls that allow the simulations to
+ * be managed.
+ * 
+ */
+public class SimulationControlView extends ViewPart implements
+		ISimulationManagerListener {
+
+	/**
+	 * Our reference to the simulation manager
+	 */
+	private SimulationManager simulationManager = null;
+
+	/**
+	 * The collection of simulation controls
+	 */
+	private List<SimulationControl> controlList = new ArrayList<SimulationControl>();
+
+	/**
+	 * The identifier of the Simulation Control View
+	 */
+	public static final String ID_SIMULATION_CONTROL_VIEW = "org.eclipse.stem.ui.views.simulationcontrolview"; //$NON-NLS-1$
+
+	// The scrolled composite -- allows control composite to scroll
+	private ScrolledComposite scrollComposite = null;
+
+	// The control composite -- holds the controls
+	private Composite controlComposite = null;
+
+	// Actions for master simulation control
+	Action runAction, resetAction, pauseAction, stepAction, stopAction;
+
+	// Used by a part to access its menu, tool bar, and status line managers.
+	IActionBars actionBars = null;
+
+	// Menu manager for this view
+	IMenuManager dropDownMenu = null;
+
+	// Tool bar manager for this view
+	IToolBarManager toolBar = null;
+
+	// Some constants we need to set preferred sizes of SWT controls
+	private static final int SCROLL_MIN_LENGTH = 100;
+
+	private static final int SCROLL_MIN_HEIGTH = 1600;
+
+	/**
+	 * Constructor
+	 * 
+	 */
+	public SimulationControlView() {
+		super();
+		// Set our reference to the simulation manager
+		simulationManager = SimulationManager.getManager();
+		simulationManager.addSimulationManagerListener(this);
+	}
+
+	/**
+	 * This is the method where the view is put together piece by piece
+	 * 
+	 * @param parent
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+
+		final int COLUMNS = 1;
+
+		scrollComposite = new ScrolledComposite(parent, SWT.V_SCROLL
+				| SWT.BORDER);
+		scrollComposite.setExpandHorizontal(true);
+		scrollComposite.setExpandVertical(true);
+		scrollComposite.setMinSize(SCROLL_MIN_LENGTH, SCROLL_MIN_HEIGTH);
+		scrollComposite.setLayout(new GridLayout());
+		controlComposite = new Composite(scrollComposite, SWT.NONE);
+		scrollComposite.setContent(controlComposite);
+		// setup the layout
+		GridData data = new GridData(GridData.FILL_BOTH);
+		controlComposite.setLayoutData(data);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = COLUMNS;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		controlComposite.setLayout(layout);
+		
+
+		// Create the actions for master simulation control
+		runAction = new Action(
+				Messages.getString("SCView.Run"), ImageDescriptor.createFromImage(Activator //$NON-NLS-1$
+								.getDefault().getImageRegistry().get(
+										ISharedImages.RUN_ICON))) {
+			public void run() {
+				masterRunAction();
+			}
+		};
+
+		pauseAction = new Action(
+				Messages.getString("SCView.Pause"), ImageDescriptor //$NON-NLS-1$
+						.createFromImage(Activator.getDefault()
+								.getImageRegistry().get(
+										ISharedImages.PAUSE_ICON))) {
+			public void run() {
+				masterPauseAction();
+			}
+		};
+
+		resetAction = new Action(
+				Messages.getString("SCView.Reset"), ImageDescriptor //$NON-NLS-1$
+						.createFromImage(Activator.getDefault()
+								.getImageRegistry().get(
+										ISharedImages.RESET_ICON))) {
+			public void run() {
+				masterResetAction();
+			}
+		};
+
+		stepAction = new Action(
+				Messages.getString("SCView.Step"), ImageDescriptor //$NON-NLS-1$
+						.createFromImage(Activator.getDefault()
+								.getImageRegistry()
+								.get(ISharedImages.STEP_ICON))) {
+			public void run() {
+				masterStepAction();
+			}
+		};
+
+		stopAction = new Action(
+				Messages.getString("SCView.Stop"), ImageDescriptor //$NON-NLS-1$
+						.createFromImage(Activator.getDefault()
+								.getImageRegistry()
+								.get(ISharedImages.STOP_ICON))) {
+			public void run() {
+				masterStopAction();
+			}
+		};
+
+		// Set disabled icons for our master control
+
+		runAction.setDisabledImageDescriptor(ImageDescriptor
+				.createFromImage(Activator.getDefault().getImageRegistry().get(
+						ISharedImages.DISABLED_RUN_ICON)));
+
+		pauseAction.setDisabledImageDescriptor(ImageDescriptor
+				.createFromImage(Activator.getDefault().getImageRegistry().get(
+						ISharedImages.DISABLED_PAUSE_ICON)));
+
+		resetAction.setDisabledImageDescriptor(ImageDescriptor
+				.createFromImage(Activator.getDefault().getImageRegistry().get(
+						ISharedImages.DISABLED_RESET_ICON)));
+
+		stepAction.setDisabledImageDescriptor(ImageDescriptor
+				.createFromImage(Activator.getDefault().getImageRegistry().get(
+						ISharedImages.DISABLED_STEP_ICON)));
+
+		stopAction.setDisabledImageDescriptor(ImageDescriptor
+				.createFromImage(Activator.getDefault().getImageRegistry().get(
+						ISharedImages.DISABLED_STOP_ICON)));
+
+		// Initial state if master control should be DISABLED
+		runAction.setEnabled(false);
+		pauseAction.setEnabled(false);
+		resetAction.setEnabled(false);
+		stepAction.setEnabled(false);
+		stopAction.setEnabled(false);
+
+		// get the action manager for this view
+		actionBars = getViewSite().getActionBars();
+
+		// get the drop down menu manager for this view
+		dropDownMenu = actionBars.getMenuManager();
+
+		// get the tool bar manager for this view
+		toolBar = actionBars.getToolBarManager();
+
+		// Add all actions to drop down menu on the right corner of this view
+		dropDownMenu.add(runAction);
+		dropDownMenu.add(pauseAction);
+		dropDownMenu.add(resetAction);
+		dropDownMenu.add(stepAction);
+		dropDownMenu.add(stopAction);
+
+		// Add all actions to the tool bar of this view
+		toolBar.add(runAction);
+		toolBar.add(pauseAction);
+		toolBar.add(resetAction);
+		toolBar.add(stepAction);
+		toolBar.add(stopAction);
+
+		// if any active Simulations, use them
+		List<ISimulation>list = simulationManager.getActiveSimulations();
+		
+		for (ISimulation sim: list) {
+			addSimulation(sim);		
+		}
+	}
+
+	/**
+	 * Enable use of master control for active simulations
+	 * 
+	 * @param enabled
+	 */
+	protected void enableMasterControl(boolean enabled) {
+		// Initial state if master control should be DISABLED
+		runAction.setEnabled(enabled);
+		pauseAction.setEnabled(enabled);
+		resetAction.setEnabled(enabled);
+		stepAction.setEnabled(enabled);
+		stopAction.setEnabled(enabled);
+	}
+
+	// Run all simulations -- set state of all simulations to RUNNING
+	protected void masterRunAction() {
+		Iterator iter = controlList.iterator();
+		while (iter.hasNext()) {
+			SimulationControl simulationControl = (SimulationControl) iter
+					.next();
+			simulationControl.run();
+		}
+	}
+
+	// Pause all simulations -- set state of all simulations to PAUSED
+	protected void masterPauseAction() {
+		Iterator iter = controlList.iterator();
+		while (iter.hasNext()) {
+			SimulationControl simulationControl = (SimulationControl) iter
+					.next();
+			simulationControl.pause();
+		}
+	}
+
+	// Reset all simulations -- set state of all simulations to RESET
+	protected void masterResetAction() {
+		Iterator iter = controlList.iterator();
+		while (iter.hasNext()) {
+			SimulationControl simulationControl = (SimulationControl) iter
+					.next();
+			simulationControl.reset();
+		}
+	}
+
+	// Step all simulations -- step in all simulations
+	protected void masterStepAction() {
+		Iterator iter = controlList.iterator();
+		while (iter.hasNext()) {
+			SimulationControl simulationControl = (SimulationControl) iter
+					.next();
+			simulationControl.step();
+		}
+	}
+
+	// Stop all simulations
+	protected void masterStopAction() {
+		Iterator iter = controlList.iterator();
+		while (iter.hasNext()) {
+			SimulationControl simulationControl = (SimulationControl) iter
+					.next();
+			simulationControl.stop();
+		}
+	}
+
+	/**
+	 * 
+	 * @return the list of simulation controls
+	 */
+	public List<SimulationControl> getSimulationControlList() {
+		return controlList;
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+
+		// Are we listening to the simulation manager?
+		if (simulationManager != null) {
+			// Yes
+			// Not any more
+			simulationManager.removeListener(this);
+		}
+
+		if (controlList.isEmpty() == false) {
+			Iterator iter = controlList.listIterator();
+			while (iter.hasNext()) {
+				SimulationControl sctrl = (SimulationControl)iter.next();
+				sctrl.dispose();
+				iter.remove();
+			}
+		}
+
+	} // dispose
+
+	/**
+	 * A simulation has been started or stopped.
+	 * We have registered for SimulationManager.addListener() and 
+	 * so we are informed when a simulation is started and when
+	 * one is stopped. 
+	 * 
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+	 */
+	public void simulationsChanged(SimulationManagerEvent event) {
+
+		ISimulation[] simulations = null;
+
+		// add a simulation control for each new simulation...
+		simulations = event.getSimulationsAdded();
+		for (int i = 0; i < simulations.length; i++) {
+			addSimulation(simulations[i]);		
+		}
+
+		// remove the corresponding simulation control for all stopped
+		// simulations...
+		simulations = event.getSimulationsRemoved();
+		for (int i = 0; i < simulations.length; i++) {
+			removeSimulation(simulations[i]);			
+		}
+
+		
+		scrollComposite.setContent(controlComposite);
+		controlComposite.layout(true);
+		scrollComposite.layout(true);
+
+		
+		//controlComposite.redraw();
+		scrollComposite.redraw();
+		
+		// Refresh our reference to the simulation manager
+//		simulationManager = SimulationManager.getManager();
+//		simulationManager.addSimulationManagerListener(this);
+
+	}
+
+	/**
+	 * add a simulation control panel 
+	 * for an added or existing ISimulation 
+	 * 
+	 * @param sim  Instance of ISimulation
+	 */
+	private void addSimulation(ISimulation sim) {
+		controlComposite.setRedraw(true);
+		scrollComposite.setRedraw(true);
+		SimulationControl simulationControl = 
+			new SimulationControl(controlComposite, sim);
+		controlComposite.addControlListener(simulationControl);
+		controlList.add(simulationControl);
+		if (controlList.size() > 0) {
+			enableMasterControl(true);
+		} 
+		
+		controlComposite.layout(true);
+		scrollComposite.layout(true);
+		
+		scrollComposite.redraw();		
+	}
+	
+	/**
+	 * remove a simulation control panel 
+	 * for an added or existing ISimulation 
+	 * 
+	 * @param sim  Instance of ISimulation
+	 */
+	private void removeSimulation(ISimulation simulation) {
+		controlComposite.setRedraw(true);
+		scrollComposite.setRedraw(true);
+				
+		Control[] ctrls = controlComposite.getChildren();
+
+		for (int j = 0; j < ctrls.length; j++) {
+			SimulationControl simulationControl = (SimulationControl) ctrls[j];
+			if (simulation.equals(simulationControl.getSimulation())) {
+				controlComposite.removeControlListener(simulationControl);
+				controlList.remove(simulationControl);
+				// Create a temporary composite
+				Composite tempComposite = new Composite(scrollComposite,
+						SWT.NONE);
+				// Set the temporary composite to be the parent of the
+				// control we want to remove :
+				simulationControl.setParent(tempComposite);
+				// Now get rid of the temporary composite and its children
+				tempComposite.dispose();
+				simulationControl.dispose();
+				break;
+			}
+		}
+
+		if (controlList.size() == 0) {			
+			enableMasterControl(false);
+		}
+		
+		controlComposite.layout(true);
+		scrollComposite.layout(true);
+		
+		scrollComposite.redraw();		
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/TriggersView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/TriggersView.java
new file mode 100644
index 0000000..4fca176
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/TriggersView.java
@@ -0,0 +1,113 @@
+// TriggersView.java
+package org.eclipse.stem.ui.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class represents the eclipse view of the
+ * {@link org.eclipse.stem.core.trigger.Trigger}s that have been imported into
+ * eclipse as plug-ins.
+ */
+public class TriggersView extends IdentifiablePluginView {
+
+	/**
+	 * The identifier of the Triggers View {@value}
+	 */
+	public static final String ID_TRIGGERS_VIEW = "org.eclipse.stem.ui.views.triggers"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 */
+	public TriggersView() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getIdentifiablePluginViewLabelContentProvider()
+	 */
+	@Override
+	protected IdentifiablePluginViewLabelContentProvider getIdentifiablePluginViewLabelContentProvider() {
+		return new TriggerPluginViewLabelContentProvider();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IdentifiablePluginView#getInput()
+	 */
+	@Override
+	protected IdentifiableViewModel getInput() {
+		return TriggerViewModel.getModel();
+	} // getInput
+
+	/**
+	 * This class represents a singleton instance of a model of the STEM
+	 * {@link Trigger}s that are plugged into the system.
+	 */
+	protected static class TriggerViewModel extends IdentifiableViewModel {
+		// The singleton instance
+		private static TriggerViewModel tvModel;
+
+		private TriggerViewModel() {
+			super(Constants.ID_TRIGGER_EXTENSION_POINT);
+		}
+
+		/**
+		 * @return the singleton instance of the ModelViewModel
+		 */
+		public static TriggerViewModel getModel() {
+			if (tvModel == null) {
+				tvModel = new TriggerViewModel();
+			}
+			return tvModel;
+		} // getModel
+	} // TriggerViewModel
+
+	protected static class TriggerPluginViewLabelContentProvider extends
+			IdentifiablePluginViewLabelContentProvider {
+
+		// This is the image used to represent triggers in the trigger view
+		static Image triggerIcon = null;
+
+		// If true then we've never tried to get the icon
+		static boolean triggerIconFirstTime = true;
+
+		/**
+		 * @see org.eclipse.stem.ui.views.IdentifiablePluginView.IdentifiablePluginViewLabelContentProvider#getImage(java.lang.Object)
+		 */
+		@Override
+		public Image getImage(Object element) {
+			return (element instanceof IdentifiableDelegate) ? getTriggerIcon()
+					: super.getImage(element);
+		} // getImage
+
+		/**
+		 * @return the icon to be used to represent triggers, or null if it
+		 *         can't be loaded.
+		 */
+		private Image getTriggerIcon() {
+			// Should we try to load the icon?
+			if (triggerIconFirstTime && triggerIcon == null) {
+				// Yes
+				triggerIconFirstTime = false;
+				triggerIcon = Activator.getDefault().getImageRegistry().get(
+						ISharedImages.TRIGGER_ICON);
+			} // if we should load the icon
+			return triggerIcon;
+		} // getTriggerIcon
+
+	} // TriggerPluginViewLabelContentProvider
+
+} // TriggersView
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableContentProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableContentProvider.java
new file mode 100644
index 0000000..4666ac3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableContentProvider.java
@@ -0,0 +1,163 @@
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.Utility;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ITreeContentProvider} for
+ * {@link IdentifiableInstanceTreeNode}s which appear in the
+ * {@link CommonNavigator} framework that is used to explore STEM Projects.
+ */
+@SuppressWarnings("unused")
+public class IdentifiableContentProvider implements ITreeContentProvider,
+		IResourceChangeListener, IResourceDeltaVisitor {
+
+	Viewer viewer;
+
+	/**
+	 * Default Constructor
+	 */
+	public IdentifiableContentProvider() {
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
+				IResourceChangeEvent.POST_CHANGE);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object[] retValue = null;
+		// Right kind of parent?
+		if (parentElement instanceof IdentifiableTreeNode) {
+			// Yes
+			// if IdentifiableTreeNode
+			final List<Identifiable> temp = new ArrayList<Identifiable>();
+
+			final IdentifiableTreeNode itn = (IdentifiableTreeNode) parentElement;
+
+			final IFolder folder = itn.getProject().getFolder(
+					itn.getFolderName());
+
+			// Does the folder exist?
+			if (folder.exists()) {
+				// Yes
+				try {
+					for (final IResource identifiableFile : folder.members()) {
+						final Identifiable identifiable = Utility
+								.getIdentifiable((IFile) identifiableFile);
+						temp.add(identifiable);
+					}
+				} catch (final CoreException e) {
+					Activator.logError("", e);
+				} // for each IResource folder.members()
+			} // if folder exists
+
+			retValue = temp.toArray();
+
+		} else {
+			retValue = new Object[0];
+		}
+
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		Object retValue = null;
+		if (element instanceof IdentifiableInstanceTreeNode) {
+			retValue = ((IdentifiableInstanceTreeNode) element).getParent();
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		Object[] children = getChildren(element);
+		return children != null && children.length > 0;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
+	 *      java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		this.viewer = viewer;
+	}
+
+	/**
+	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org
+	 *      .eclipse.core.resources.IResourceChangeEvent)
+	 */
+	public void resourceChanged(final IResourceChangeEvent event) {
+		try {
+			event.getDelta().accept(this);
+		} catch (final CoreException e) {
+			Activator.logError("", e);
+		}
+	} // resourceChanged
+
+	/**
+	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core
+	 *      .resources.IResourceDelta)
+	 */
+	public boolean visit(final IResourceDelta delta) throws CoreException {
+		final Display display = Display.getDefault();
+		// Is the display valid?
+		if (display != null) {
+			// Yes
+			display.asyncExec(new Runnable() {
+				public void run() {
+					viewer.refresh();
+				}
+			});
+		} // if
+
+		return true;
+	} // visit
+} // IdentifiableContentProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableDropAdapterAssistant.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableDropAdapterAssistant.java
new file mode 100644
index 0000000..09ca320
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableDropAdapterAssistant.java
@@ -0,0 +1,124 @@
+// IdentifiableDropAdapterAssistant.java
+package org.eclipse.stem.ui.views.explorer;
+
+/******************************************************************************* 
+ * Copyright (c) 2008 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.data.geography.Activator;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
+
+/**
+ * This class represents
+ */
+public class IdentifiableDropAdapterAssistant extends CommonDropAdapterAssistant {
+
+	/**
+	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#isSupportedType(org.eclipse.swt.dnd.TransferData)
+	 */
+	@Override
+	public boolean isSupportedType(TransferData transferType) {
+		final boolean retValue = LocalSelectionTransfer.getTransfer()
+				.isSupportedType(transferType);
+		return retValue;
+	}
+
+	/**
+	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter,
+	 *      org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)
+	 */
+	@Override
+	public IStatus handleDrop(@SuppressWarnings("unused") CommonDropAdapter dropAdapter,
+			DropTargetEvent event, Object target) {
+		IStatus retValue = Status.CANCEL_STATUS;
+		// Structured Selection?
+		if (event.data instanceof IStructuredSelection) {
+			// Yes
+			for (Object obj : ((IStructuredSelection) event.data).toList()) {
+				if (obj instanceof String) {
+					// Yes
+					// These are URI's from IdentifablePluginView
+					final String uriString = (String) obj;
+					try {
+						// We're going to deserialized the Identifiable, change
+						// it's URI and then serialize it again in the new
+						// location.
+						final URI uri = URI.createURI(uriString);
+						final Identifiable identifable = Utility
+								.getIdentifiable(uri);
+						final DublinCore dc = identifable.getDublinCore();
+						final URI serializationURI = createSerializationURI(
+								uri, (IdentifiableTreeNode) target);
+						identifable.setURI(serializationURI);
+						dc.setTitle("Copy of \"" + dc.getTitle() + "\"");
+						dc.setDescription("Copy of \"" + dc.getDescription()
+								+ "\"");
+						dc.populate();
+						Utility.serializeIdentifiable(identifable,
+								serializationURI);
+						retValue = Status.OK_STATUS;
+					} catch (Exception e) {
+						Activator.logError(
+								"Problem deserializing Identifiable from \""
+										+ uriString + "\"", e);
+					}
+				} // if
+			} // for each Object
+		} // if IStructuredSelection
+
+		// LocalSelectionTransfer.getTransfer().setSelection(null);
+		return retValue;
+	} // handleDrop
+
+	private URI createSerializationURI(URI uri, IdentifiableTreeNode treeNode) {
+		final StringBuilder sb = new StringBuilder(treeNode.getProject()
+				.getName());
+		sb.append("/");
+		sb.append(treeNode.getFolderName());
+		sb.append("/");
+		sb.append(uri.segment(uri.segmentCount() - 1));
+		return URI.createPlatformResourceURI(sb.toString(), false);
+	} // createSerializationURI
+
+	/**
+	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#validateDrop(java.lang.Object,
+	 *      int, org.eclipse.swt.dnd.TransferData)
+	 */
+	@SuppressWarnings("unused") 
+	@Override
+	public IStatus validateDrop(Object target, int operation,
+			TransferData transferType) {
+		// IStatus retValue = Status.CANCEL_STATUS;
+		//
+		// if (LocalSelectionTransfer.getTransfer().equals(transferType)) {
+		// // Yes
+		// retValue = Status.OK_STATUS;
+		// } // if
+		// else if (LocalTransfer.getInstance().equals(transferType)) {
+		// // Yes
+		// retValue = Status.OK_STATUS;
+		// } // if
+		//
+		// return retValue;
+		return Status.OK_STATUS;
+	} // validateDrop
+
+} // IdentifiableDropAdapterAssistant
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNode.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNode.java
new file mode 100644
index 0000000..b420a47
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNode.java
@@ -0,0 +1,73 @@
+// IdentifiableInstanceTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class represents {@link org.eclipse.stem.core.common.Identifiable}s in
+ * the STEM Project Explorer view that is implemented using the
+ * {@link org.eclipse.ui.navigator.CommonNavigator} framework. An instance
+ * typically serves as a proxy for the file that serializes the
+ * {@link Identifiable}.
+ * 
+ * @see IdentifiableInstanceTreeNodeContentProvider
+ * @see IdentifiableInstanceTreeNodeLabelProvider
+ */
+public class IdentifiableInstanceTreeNode {
+
+	private final IdentifiableTreeNode parent;
+	private final String name;
+	private final String extension;
+
+	/**
+	 * @param itn
+	 * @param name
+	 * @param extension
+	 * 		the file name extension of the serialized file.
+	 */
+	public IdentifiableInstanceTreeNode(IdentifiableTreeNode itn, String name,
+			String extension) {
+		this.parent = itn;
+		this.name = name;
+		this.extension = extension;
+	}
+
+	/**
+	 * @return the {@link IdentifiableTreeNode} that is the parent of this node.
+	 */
+	public final IdentifiableTreeNode getParent() {
+		return parent;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public final String getName() {
+		return name;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return name;
+	}
+
+	/**
+	 * @return the extension
+	 */
+	public final String getExtension() {
+		return extension;
+	}
+
+} // IdentifiableInstanceTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeContentProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeContentProvider.java
new file mode 100644
index 0000000..3bcae9d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeContentProvider.java
@@ -0,0 +1,170 @@
+// IdentifiableInstanceTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ITreeContentProvider} for
+ * {@link IdentifiableInstanceTreeNode}s which appear in the
+ * {@link CommonNavigator} framework that is used to explore STEM Projects.
+ */
+@SuppressWarnings("unused")
+public class IdentifiableInstanceTreeNodeContentProvider implements
+		ITreeContentProvider, IResourceChangeListener, IResourceDeltaVisitor {
+
+	Viewer viewer;
+
+	/**
+	 * Default Constructor
+	 */
+	public IdentifiableInstanceTreeNodeContentProvider() {
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
+				IResourceChangeEvent.POST_CHANGE);
+	} // IdentifiableInstanceTreeNodeContentProvider
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.
+	 *      Object)
+	 */
+	public Object[] getChildren(final Object parentElement) {
+		Object[] retValue = null;
+		// Right kind of parent?
+		if (parentElement instanceof IdentifiableTreeNode) {
+			// Yes
+			final List<IdentifiableInstanceTreeNode> temp = new ArrayList<IdentifiableInstanceTreeNode>();
+			
+			final IdentifiableTreeNode itn = (IdentifiableTreeNode) parentElement;
+
+			final IFolder folder = itn.getProject().getFolder(
+					itn.getFolderName());
+			
+			// Does the folder exist?
+			if (folder.exists()) {
+				// Yes
+				try {
+					for (final IResource identifiableFile : folder.members()) {
+						final String identifiableName = identifiableFile
+								.getName();
+						final String extension = identifiableFile
+								.getFileExtension();
+						final String nameWithoutExtension = identifiableName
+								.substring(0, identifiableName
+										.lastIndexOf(extension) - 1);
+						temp.add(new IdentifiableInstanceTreeNode(itn,
+								nameWithoutExtension, extension));
+					}
+				} catch (final CoreException e) {
+					Activator.logError("", e);
+				} // for each IResource folder.members()
+			} // if folder exists
+			
+			retValue = temp.toArray();
+
+		} // if IdentifiableTreeNode
+
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.
+	 *      Object)
+	 */
+	public Object getParent(final Object element) {
+		Object retValue = null;
+		if (element instanceof IdentifiableInstanceTreeNode) {
+			retValue = ((IdentifiableInstanceTreeNode) element).getParent();
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	} // getParent
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.
+	 *      Object)
+	 */
+	public boolean hasChildren(final Object parentElement) {
+		Object[] children = getChildren(parentElement);
+		return children != null && children.length > 0;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java
+	 *      .lang.Object)
+	 */
+	public Object[] getElements(final Object inputElement) {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.
+	 *      jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(final Viewer viewer, final Object oldInput,
+			final Object newInput) {
+		this.viewer = viewer;
+	}
+
+	/**
+	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org
+	 *      .eclipse.core.resources.IResourceChangeEvent)
+	 */
+	public void resourceChanged(final IResourceChangeEvent event) {
+		try {
+			event.getDelta().accept(this);
+		} catch (final CoreException e) {
+			Activator.logError("", e);
+		}
+	} // resourceChanged
+
+	/**
+	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core
+	 *      .resources.IResourceDelta)
+	 */
+	public boolean visit(final IResourceDelta delta) throws CoreException {
+		final Display display = Display.getDefault();
+		// Is the display valid?
+		if (display != null) {
+			// Yes
+			display.asyncExec(new Runnable() {
+				public void run() {
+					viewer.refresh();
+				}
+			});
+		} // if
+
+		return true;
+	} // visit
+
+} // IdentifiableInstanceTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeLabelProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeLabelProvider.java
new file mode 100644
index 0000000..3f21cfc
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableInstanceTreeNodeLabelProvider.java
@@ -0,0 +1,97 @@
+// IdentifiableInstanceTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class is a {@link ILabelProvider} for
+ * {@link IdentifiableInstanceTreeNode}s which appear in the
+ * {@link org.eclipse.ui.navigator.CommonNavigator} framework that is used to
+ * explore STEM Projects.
+ * 
+ * @see IdentifiableInstanceTreeNodeContentProvider
+ */
+public class IdentifiableInstanceTreeNodeLabelProvider implements
+		ILabelProvider {
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		Image retValue = null;
+		if (element instanceof IdentifiableInstanceTreeNode) {
+			// Yes
+			final IdentifiableInstanceTreeNode iitn = (IdentifiableInstanceTreeNode) element;
+
+			retValue = Activator.getDefault().getImageRegistry().get(
+					iitn.getParent().getImageKey());
+
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	} // getImage
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		String retValue = null;
+		if (element instanceof IdentifiableInstanceTreeNode) {
+			// Yes
+			final IdentifiableInstanceTreeNode iitn = (IdentifiableInstanceTreeNode) element;
+			retValue = iitn.getName();
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
+	 * 	jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
+	 * 	.Object, java.lang.String)
+	 */
+	public boolean isLabelProperty(@SuppressWarnings("unused") Object element,
+			@SuppressWarnings("unused") String property) {
+		return false;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
+	 * 	.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+} // IdentifiableInstanceTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableProvider.java
new file mode 100644
index 0000000..97b97ef
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableProvider.java
@@ -0,0 +1,167 @@
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.Collection;
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * 
+ */
+public class IdentifiableProvider implements ILabelProvider,
+		ITreeContentProvider {
+
+	/**
+	 * Default Constructor
+	 */
+	public IdentifiableProvider() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object object) {
+		// Tree Selection?
+		if (object instanceof ITreeSelection) {
+			ITreeSelection selection = (ITreeSelection) object;
+			object = selection.getFirstElement();
+		}
+		IItemLabelProvider  it = getLabelProvider(object);
+		
+		// Did we find the provider?
+		if (it != null) {
+			// Yes
+			Object temp = it.getImage(object);
+			return (temp instanceof Image) ? (Image)temp : getImageFromObject(temp);
+		}
+		return null;
+		
+	} // getImage
+
+	 protected Image getImageFromObject(Object object)
+	  {
+	    return ExtendedImageRegistry.getInstance().getImage(object);
+	  }
+	 
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		// Tree Selection?
+		if (element instanceof ITreeSelection) {
+			ITreeSelection selection = (ITreeSelection) element;
+			element = selection.getFirstElement();
+		}
+		Object obj = getLabelProvider(element);
+		String temp = ((IItemLabelProvider)obj).getText(element);
+		return temp;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		final Collection<?> children = getTreeContentProvider(parentElement).getChildren(parentElement);
+		return children.toArray();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+	 */
+	public Object getParent(Object element) {
+		return getTreeContentProvider(element).getParent(element);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+	 */
+	public boolean hasChildren(Object element) {
+		return getTreeContentProvider(element).hasChildren(element);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		final Collection<?> elements = getTreeContentProvider(inputElement).getElements(inputElement);
+		return elements.toArray();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface
+	 *      .viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	@SuppressWarnings("unused")
+	public void inputChanged(Viewer viewer, Object oldInput,  Object newInput) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
+	 *      jface.viewers.ILabelProviderListener)
+	 */
+	@SuppressWarnings("unused")
+	public void addListener(ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
+	 *      .Object, java.lang.String)
+	 */
+	@SuppressWarnings("unused")
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	@SuppressWarnings("unused")
+	public void removeListener(ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	private ComposedAdapterFactory getAdapterFactory() {
+		ComposedAdapterFactory retValue = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+		return retValue;
+	}
+
+	private IItemLabelProvider getLabelProvider(final Object element) {
+		return (IItemLabelProvider) getAdapterFactory().adapt(element,
+				IItemLabelProvider.class);
+	}
+
+	private ITreeItemContentProvider getTreeContentProvider(final Object element) {
+		return (ITreeItemContentProvider) getAdapterFactory().adapt(element,
+				ITreeItemContentProvider.class);
+	}
+} // IdentifiableProvider
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNode.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNode.java
new file mode 100644
index 0000000..998d78e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNode.java
@@ -0,0 +1,264 @@
+// IdentifiableTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.stem.ui.wizards.NewSTEMProjectWizard;
+
+/**
+ * This class is used in the {@link org.eclipse.ui.navigator.CommonNavigator}
+ * based STEM Project Explorer view to represent a group of one type of
+ * {@link org.eclipse.stem.core.common.Identifiable} component (e.g.,
+ * {@link org.eclipse.stem.core.model.Model},
+ * {@link org.eclipse.stem.core.graph.Graph},
+ * {@link org.eclipse.stem.core.model.Decorator},
+ * {@link org.eclipse.stem.core.scenario.Scenario},
+ * {@link org.eclipse.stem.core.sequencer.Sequencer} ,
+ * {@link org.eclipse.stem.core.experiment.Experiment},
+ * {@link org.eclipse.stem.core.trigger.Trigger},
+ * {@link org.eclipse.stem.core.modifier.Modifier},
+ * {@link org.eclipse.stem.core.predicate.Predicate}) that belong to a
+ * particular STEM Project instance.
+ */
+abstract public class IdentifiableTreeNode {
+
+	private final String componentName;
+	private final String folderName;
+	private final IProject project;
+	private final String imageKey;
+
+	/**
+	 * @param project
+	 *            the {@link IProject} that is the parent of this
+	 *            {@link IdentifiableTreeNode}.
+	 * @param componentName
+	 *            the name of the component (e.g., "Scenarios")
+	 * @param folderName
+	 *            the non-NLS'd name of the folder in the project that
+	 *            {@link org.eclipse.stem.core.common.Identifiable}s that correspond to this node are
+	 *            serialized in.
+	 * @param imageKey
+	 *            the string that is used as a key into the
+	 *            {@link org.eclipse.jface.resource.ImageRegistry} of the plug-in.
+	 */
+	public IdentifiableTreeNode(final IProject project,
+			final String componentName, String folderName, String imageKey) {
+		this.project = project;
+		this.componentName = componentName;
+		this.folderName = folderName;
+		this.imageKey = imageKey;
+	} // IdentifiableTreeNode
+
+	/**
+	 * @return the {@link IProject} associated with the
+	 *         {@link IdentifiableTreeNode} instance. *
+	 */
+	public IProject getProject() {
+		return project;
+	}
+
+	/**
+	 * @return the name of the component
+	 */
+	public String getComponentName() {
+		return componentName;
+	}
+
+	/**
+	 * @return the non-NLS'd name of the folder in the project that
+	 *         {@link org.eclipse.stem.core.common.Identifiable}s that correspond to this node are serialized
+	 *         in.
+	 */
+	public String getFolderName() {
+		return folderName;
+	}
+
+	/**
+	 * @return the key used to find an image for the component in the shared
+	 *         image registry
+	 */
+	public String getImageKey() {
+		return imageKey;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		final StringBuilder sb = new StringBuilder(componentName);
+		return sb.toString();
+	} // toString
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.model.Decorator}s.
+	 */
+	public static class DecoratorsTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public DecoratorsTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.DECORATOR_FOLDER"),
+					NewSTEMProjectWizard.DECORATORS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.DECORATOR_ICON);
+		}
+	} // DecoratorsTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.scenario.Scenario}s.
+	 */
+	public static class ScenariosTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public ScenariosTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.SCENARIO_FOLDER"),
+					NewSTEMProjectWizard.SCEANARIOS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.SCENARIO_ICON);
+		}
+	} // ScenariosTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.experiment.Experiment}s.
+	 */
+	public static class ExperimentsTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public ExperimentsTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.EXPERIMENT_FOLDER"),
+					NewSTEMProjectWizard.EXPERIMENTS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.EXPERIMENT_ICON);
+		}
+	} // ExperimentsTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.sequencer.Sequencer}s.
+	 */
+	public static class SequencersTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public SequencersTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.SEQUENCER_FOLDER"),
+					NewSTEMProjectWizard.SEQUENCERS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.SEQUENCER_ICON);
+		}
+	} // SequencersTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.model.Model}s.
+	 */
+	public static class ModelsTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public ModelsTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.MODEL_FOLDER"), 
+					NewSTEMProjectWizard.MODELS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.MODEL_ICON);
+		}
+	} // ModelsTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.graph.Graph}s.
+	 */
+	public static class GraphsTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public GraphsTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.GRAPH_FOLDER"), 
+					NewSTEMProjectWizard.GRAPHS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.GRAPH_ICON);
+		}
+	} // GraphsTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.trigger.Trigger}s.
+	 */
+	public static class TriggersTreeNode extends IdentifiableTreeNode {
+
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public TriggersTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.TRIGGER_FOLDER"), 
+					NewSTEMProjectWizard.TRIGGERS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.TRIGGER_ICON);
+		}
+	} // TriggersTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.predicate.Predicate}s.
+	 */
+	public static class PredicatesTreeNode extends IdentifiableTreeNode {
+	
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public PredicatesTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.PREDICATE_FOLDER"), 
+					NewSTEMProjectWizard.PREDICATES_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.PREDICATE_ICON);
+		}
+	} // PredicatesTreeNode
+
+	/**
+	 * This class is a {@link IdentifiableTreeNode} that represents
+	 * {@link org.eclipse.stem.core.modifier.Modifier}s.
+	 */
+	public static class ModifiersTreeNode extends IdentifiableTreeNode {
+		/**
+		 * @param project
+		 *            the {@link IProject} that is the parent of this
+		 *            {@link IdentifiableTreeNode}.
+		 */
+		public ModifiersTreeNode(IProject project) {
+			super(project, Messages.getString("EXPLORER.MODIFIER_FOLDER"), 
+					NewSTEMProjectWizard.MODIFIERS_FOLDER_NAME,
+					org.eclipse.stem.ui.ISharedImages.MODIFIER_ICON);
+		}
+	} // ModifiersTreeNode
+
+} // IdentifiableTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeContentProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeContentProvider.java
new file mode 100644
index 0000000..3603254
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeContentProvider.java
@@ -0,0 +1,128 @@
+// IdentifiableTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * This class is a {@link IContentProvider} for the contributions to the
+ * org.eclipse.ui,navigator.navigatorContents extension point that represent the
+ * components of the STEM modeling framework. These contributions are instances
+ * of {@link IdentifiableTreeNode} which are used to aggregate instances of a
+ * single type of component in a STEM project. For instance, all of the
+ * serialized {@link org.eclipse.stem.core.model.Decorator} instances, or all of
+ * the {@link org.eclipse.stem.core.scenario.Scenario} instances.
+ */
+public class IdentifiableTreeNodeContentProvider implements
+		ITreeContentProvider {
+
+	protected Object input = null;
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.
+	 *      Object)
+	 */
+	public Object[] getChildren(Object parentElement) {
+		Object[] retValue = null;
+		if (parentElement instanceof IProject) {
+			// Yes
+			retValue = new Object[] {
+					new IdentifiableTreeNode.ScenariosTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.ExperimentsTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.SequencersTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.ModelsTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.GraphsTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.DecoratorsTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.TriggersTreeNode(
+							(IProject) parentElement),
+
+					new IdentifiableTreeNode.PredicatesTreeNode(
+							(IProject) parentElement),
+							
+					new IdentifiableTreeNode.ModifiersTreeNode(
+									(IProject) parentElement)
+
+			}; // new Object
+		} // if IProject
+		else if (parentElement instanceof IdentifiableTreeNode) {
+			// Yes
+			// final IdentifiableTreeNode ctn = (IdentifiableTreeNode)
+			// parentElement;
+			retValue = new Object[0]; // never null
+
+		} // if IdentifiableTreeNode
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.
+	 *      Object)
+	 */
+	public Object getParent(Object element) {
+		Object retValue = null;
+		if (element instanceof IdentifiableTreeNode) {
+			// Yes
+			final IdentifiableTreeNode ctn = (IdentifiableTreeNode) element;
+			retValue = ctn.getProject();
+		} // if IdentifiableTreeNode
+
+		return retValue;
+	} // getParent
+
+	/**
+	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java
+	 *      .lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.
+	 *      Object)
+	 */
+	public boolean hasChildren(@SuppressWarnings("unused") Object element) {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.
+	 *      jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(@SuppressWarnings("unused") Viewer viewer,
+			@SuppressWarnings("unused") Object oldInput, Object newInput) {
+		input = newInput;
+	}
+
+} // IdentifiableTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeLabelProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeLabelProvider.java
new file mode 100644
index 0000000..287b40f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/IdentifiableTreeNodeLabelProvider.java
@@ -0,0 +1,89 @@
+// IdentifiableTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class is an {@link ILabelProvider} for the contributions to the
+ * org.eclipse.ui,navigator.navigatorContents extension point that represent the
+ * components of the STEM modeling framework. These contributions are instances
+ * of {@link IdentifiableTreeNode} which are used to aggregate instances of a
+ * single type of component in a STEM project. For instance, all of the
+ * serialized {@link org.eclipse.stem.core.model.Decorator} instances, or all of
+ * the {@link org.eclipse.stem.core.scenario.Scenario} instances.
+ */
+public class IdentifiableTreeNodeLabelProvider implements ILabelProvider {
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage(Object element) {
+		Image retValue = null;
+		if (element instanceof IdentifiableTreeNode) {
+			// Yes
+			final IdentifiableTreeNode ctn = (IdentifiableTreeNode) element;
+			retValue = Activator.getDefault().getImageRegistry().get(
+					ctn.getImageKey());
+		} // if IdentifiableTreeNode
+		return retValue;
+	} // getImage
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(Object element) {
+		return ((IdentifiableTreeNode) element).getComponentName();
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
+	 * 	jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
+	 * 	.Object, java.lang.String)
+	 */
+	public boolean isLabelProperty(@SuppressWarnings("unused") Object element,
+			@SuppressWarnings("unused") String property) {
+		return false;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
+	 * 	.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+} // IdentifiableTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/Messages.java
new file mode 100644
index 0000000..f0131c7
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/Messages.java
@@ -0,0 +1,44 @@
+// Messages.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import org.eclipse.stem.core.Constants;
+
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT + ".ui.views.explorer.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // WizardMessages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNode.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNode.java
new file mode 100644
index 0000000..c6733d3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNode.java
@@ -0,0 +1,57 @@
+// RecordedInstanceTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class represents an instance of a recorded
+ * {@link org.eclipse.stem.jobs.simulation.Simulation}.
+ */
+public class RecordedInstanceTreeNode {
+
+	private final RecordedTreeNode parent;
+	private final String name;
+
+	/**
+	 * @param parent
+	 * @param name
+	 */
+	public RecordedInstanceTreeNode(final RecordedTreeNode parent,
+			final String name) {
+		super();
+		this.parent = parent;
+		this.name = name;
+	}
+
+	/**
+	 * @return the parent
+	 */
+	public Object getParent() {
+		return parent;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public final String getName() {
+		return name;
+	}
+
+	/**
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return getName();
+	}
+
+} // RecordedInstanceTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeContentProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeContentProvider.java
new file mode 100644
index 0000000..42c280b
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeContentProvider.java
@@ -0,0 +1,80 @@
+// RecordedInstanceTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ITreeContentProvider} for {@link
+ * RecordedInstanceTreeNode}s which appear in the {@link CommonNavigator}
+ * framework that is used to explore STEM Projects.
+ * 
+ * @see RecordedInstanceTreeNodeLabelProvider
+ */
+@SuppressWarnings("unused")
+public abstract class RecordedInstanceTreeNodeContentProvider implements
+		ITreeContentProvider {
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.
+	 * 	Object)
+	 */
+	abstract public Object[] getChildren(Object parentElement);
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.
+	 * 	Object)
+	 */
+	public Object getParent(Object element) {
+		Object retValue = null;
+		if (element instanceof RecordedInstanceTreeNode) {
+			retValue = ((RecordedInstanceTreeNode) element).getParent();
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.
+	 * 	Object)
+	 */
+	abstract public boolean hasChildren(Object element);
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java
+	 * 	.lang.Object)
+	 */
+	public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.
+	 * 	jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// Nothing
+	}
+
+} // RecordedInstanceTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeLabelProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeLabelProvider.java
new file mode 100644
index 0000000..3c5b806
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedInstanceTreeNodeLabelProvider.java
@@ -0,0 +1,75 @@
+// RecordedInstanceTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * This class is a {@link ILabelProvider} for {@link RecordedInstanceTreeNode}s
+ * which appear in the {@link CommonNavigator} framework that is used to explore
+ * STEM Projects.
+ * 
+ * @see RecordedInstanceTreeNodeContentProvider
+ */
+@SuppressWarnings("unused")
+public abstract class RecordedInstanceTreeNodeLabelProvider implements
+		ILabelProvider {
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	abstract public Image getImage(final Object element);
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	abstract public String getText(final Object element);
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
+	 * 	jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(final ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
+	 * 	.Object, java.lang.String)
+	 */
+	public boolean isLabelProperty(final Object element, final String property) {
+		return false;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
+	 * 	.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(final ILabelProviderListener listener) {
+		// Nothing
+	}
+
+} // RecordedInstanceTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNode.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNode.java
new file mode 100644
index 0000000..5238a07
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNode.java
@@ -0,0 +1,40 @@
+// RecordedTreeNode.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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: IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * This class is used in the {@link org.eclipse.ui.navigator.CommonNavigator}
+ * based STEM Project Explorer view to represent a group recorded
+ * {@link org.eclipse.stem.jobs.simulation.Simulation} runs that belong to a
+ * particular STEM Project instance.
+ */
+public class RecordedTreeNode {
+
+	private final IProject project;
+
+	/**
+	 *@param project
+	 *            the {@link IProject} that is the parent of this
+	 *            {@link RecordedTreeNode}.
+	 */
+	public RecordedTreeNode(IProject project) {
+		this.project = project;
+	} // RecordedTreeNode
+
+	/**
+	 * @return the {@link IProject}.
+	 */
+	public IProject getProject() {
+		return project;
+	}
+} // RecordedTreeNode
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeContentProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeContentProvider.java
new file mode 100644
index 0000000..574680e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeContentProvider.java
@@ -0,0 +1,93 @@
+// RecordedTreeNodeContentProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.jobs.simulation.Simulation;
+
+/**
+ * This class is a {@link IContentProvider} for the contributions to the
+ * org.eclipse.ui,navigator.navigatorContents extension point that represent
+ * recorded {@link Simulation} runs.
+ */
+@SuppressWarnings("unused")
+public class RecordedTreeNodeContentProvider implements ITreeContentProvider {
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.
+	 * 	Object)
+	 */
+	public Object[] getChildren(final Object parentElement) {
+		Object[] retValue = null;
+		if (parentElement instanceof IProject) {
+			// Yes
+			retValue = new Object[] { new RecordedTreeNode(
+					(IProject) parentElement) }; // new Object
+		} // if IProject
+
+		return retValue;
+	} // getChildren
+
+	/**
+	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.
+	 * 	Object)
+	 */
+	public Object getParent(final Object element) {
+		Object retValue = null;
+		if (element instanceof RecordedTreeNode) {
+			// Yes
+			retValue = ((RecordedTreeNode) element).getProject();
+		} // if IdentifiableTreeNode
+
+		return retValue;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.
+	 * 	Object)
+	 */
+	public boolean hasChildren(final Object element) {
+		return false;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java
+	 * 	.lang.Object)
+	 */
+	public Object[] getElements(final Object inputElement) {
+		return getChildren(inputElement);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.
+	 * 	jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public void inputChanged(final Viewer viewer, final Object oldInput,
+			final Object newInput) {
+		// Nothing
+	}
+
+} // RecordedTreeNodeContentProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeLabelProvider.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeLabelProvider.java
new file mode 100644
index 0000000..ba7d609
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/RecordedTreeNodeLabelProvider.java
@@ -0,0 +1,85 @@
+// RecordedTreeNodeLabelProvider.java
+package org.eclipse.stem.ui.views.explorer;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.ISharedImages;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * This class is an {@link ILabelProvider} for the contributions to the
+ * org.eclipse.ui,navigator.navigatorContents extension point that represent
+ * recorded {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+ */
+public class RecordedTreeNodeLabelProvider implements ILabelProvider {
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+	 */
+	public Image getImage( Object element) {
+		Image retValue = null;
+		if (element instanceof RecordedTreeNode) {
+			retValue = Activator.getDefault().getImageRegistry().get(
+					ISharedImages.RECORDED_SIMULATION_ICON);
+
+		} // if IdentifiableInstanceTreeNode
+		return retValue;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+	 */
+	public String getText(@SuppressWarnings("unused") Object element) {
+		return Messages.getString("EXPLORER.RECORDED_SIMULATIONS_FOLDER");
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.
+	 * 	jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// Nothing
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang
+	 * 	.Object, java.lang.String)
+	 */
+	public boolean isLabelProperty(@SuppressWarnings("unused") Object element,
+			@SuppressWarnings("unused") String property) {
+		return false;
+	}
+
+	/**
+	 * @see
+	 * 	org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse
+	 * 	.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(
+			@SuppressWarnings("unused") ILabelProviderListener listener) {
+		// Nothing
+	}
+
+} // RecordedTreeNodeLabelProvider
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/messages.properties
new file mode 100644
index 0000000..9bd67d2
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/explorer/messages.properties
@@ -0,0 +1,25 @@
+# Explorer messages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Explorer
+EXPLORER.DECORATOR_FOLDER=Decorators
+EXPLORER.EXPERIMENT_FOLDER=Experiments
+EXPLORER.GRAPH_FOLDER=Graphs
+EXPLORER.MODEL_FOLDER=Models
+EXPLORER.MODIFIER_FOLDER=Modifiers
+EXPLORER.PREDICATE_FOLDER=Predicate
+EXPLORER.SCENARIO_FOLDER=Scenarios
+EXPLORER.SEQUENCER_FOLDER=Sequencers
+EXPLORER.TRIGGER_FOLDER=Triggers
+EXPLORER.RECORDED_SIMULATIONS_FOLDER=Recorded Simulations
+
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControl.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControl.java
new file mode 100644
index 0000000..2e757e3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControl.java
@@ -0,0 +1,1100 @@
+// GeographicControl.java
+package org.eclipse.stem.ui.views.geographic;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.DynamicNodeLabel;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProvider;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapter;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLongProviderAdapterFactory;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.data.geography.centers.GeographicCenters;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListener;import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapter;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory;
+import org.eclipse.stem.ui.adapters.color.IColorProviderChangedListener;
+import org.eclipse.stem.ui.views.geographic.map.Messages;
+import org.eclipse.stem.ui.views.geographic.map.StemPolygon;
+import org.eclipse.stem.ui.views.geographic.map.StemPolygonsList;
+import org.eclipse.stem.ui.widgets.GeoViewOptionsBar;
+import org.eclipse.stem.ui.widgets.GeoViewOptionsBar.PropertySelectionEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * This class represents a visualization of the geographic attributes of a
+ * {@link org.eclipse.stem.jobs.simulation.org.eclipse.stem.jobs.simulation.Simulation}.
+ */
+abstract public class GeographicControl extends Composite implements
+		ISimulationListener, ISelectionProvider, IColorProviderChangedListener,
+		IPropertyChangeListener, ISelectionChangedListener,
+		GeoViewOptionsBar.PropertySelectionListener {
+
+	/**
+	 * The width of the layout margin.
+	 */
+	protected static final int MARGIN_WIDTH = 5;
+
+	/**
+	 * The height of the layout margin.
+	 */
+	protected static final int MARGIN_HEIGHT = 5;
+
+	/**
+	 * This is the {@link org.eclipse.stem.jobs.simulation.Simulation} that this control is listening to and
+	 * visualizing by rendering Lat/Long data on the {@link #mapCanvas}.
+	 */
+	private ISimulation simulation = null;
+
+	/**
+	 * The {@link Identifiable} that was most recently selected, or
+	 * <code>null</code>, if none has been selected.
+	 */
+	ISelection selection = null;
+
+	/**
+	 * The collection of {@link ISelectionChangedListener} waiting to be told
+	 * about selections.
+	 */
+	protected final List<ISelectionChangedListener> listeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+
+	protected GeographicRenderer geographicRenderer;
+
+	protected String selectedEdge = "";
+
+	/**
+	 * If <code>true</code> then there is a map refresh request pending.
+	 */
+	boolean refreshPending = false;
+
+	/**
+	 * This is the <code>Job</code> that computes the polygon values in the
+	 * background.
+	 */
+	Job refreshJob;
+	/**
+	 * Adapter instance of the selected color provider (to be reused by only
+	 * setting the target)
+	 */
+	protected ColorProviderAdapter colorProviderAdapter = null;
+
+	private Label simulationNameLabel;
+
+	private GeoViewOptionsBar optionsBar;
+
+	/**
+	 * This contains a mapping between the {@link Decorator}s we display and the
+	 * data we need to display them. Not used yet.
+	 */
+	protected final Map<Decorator, DecoratorDisplayData> decoratorToDecoratorDisplayDataMap = new HashMap<Decorator, DecoratorDisplayData>();
+
+	// Cache of generated StemPolygonsList instances
+	private final Map<LatLong, StemPolygonsList> polygonListMap = new HashMap<LatLong, StemPolygonsList>();
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public GeographicControl(final Composite parent, final int style) {
+		super(parent, style);
+
+		Activator.getDefault().getPluginPreferences()
+				.addPropertyChangeListener(this);
+
+		setPreferences();
+
+		createContextMenu(this);
+
+		final FormLayout layout = new FormLayout();
+		layout.marginHeight = MARGIN_HEIGHT;
+		layout.marginWidth = MARGIN_WIDTH;
+		setLayout(layout);
+
+		final Composite topComposite = createTopComposite(this);
+
+		geographicRenderer = createGeographicRenderer();
+		geographicRenderer.setColorProviderAdapter(colorProviderAdapter);
+		geographicRenderer.addSelectionChangedListener(this);
+
+		final Composite bottomComposite = createBottomComposite(this);
+
+		final FormData topCompositeFormData = new FormData();
+		topComposite.setLayoutData(topCompositeFormData);
+		topCompositeFormData.top = new FormAttachment(0, 0);
+		topCompositeFormData.left = new FormAttachment(0, 0);
+		topCompositeFormData.right = new FormAttachment(100, 0);
+
+		final FormData geoRendererFormData = new FormData();
+		geographicRenderer.setLayoutData(geoRendererFormData);
+		geoRendererFormData.top = new FormAttachment(topComposite, 0);
+		geoRendererFormData.bottom = new FormAttachment(bottomComposite, 0);
+		geoRendererFormData.left = new FormAttachment(0, 0);
+		geoRendererFormData.right = new FormAttachment(100, 0);
+
+		// Bottom Composite
+		final FormData bottomCompositeFormData = new FormData();
+		bottomComposite.setLayoutData(bottomCompositeFormData);
+		bottomCompositeFormData.bottom = new FormAttachment(100, 0);
+		bottomCompositeFormData.left = new FormAttachment(0, 0);
+		bottomCompositeFormData.right = new FormAttachment(100, 0);
+
+		pack();
+	} // GeographicControl
+
+	/**
+	 * @return
+	 */
+	abstract protected GeographicRenderer createGeographicRenderer();
+
+	/**
+	 * Set visualization preferences
+	 */
+	protected void setPreferences() {
+		// Nothing yet
+		// try {
+		// // IPreferenceStore
+		// final Preferences preferences = Activator.getDefault()
+		// .getPluginPreferences();
+		//
+		// initialScaleRulerSelection = preferences
+		// .getInt(org.eclipse.stem.ui.views.geographic.map.preferences.
+		// PreferenceConstants.INITIAL_SCALE_SELECTION_PREFERENCE);
+		// } catch (final NullPointerException e) {
+		// // Ignore
+		// } // catch NullPointerException
+	} // setPreferences
+
+	/**
+	 * @return the {@link org.eclipse.stem.jobs.simulation.org.eclipse.stem.jobs.simulation.Simulation}
+	 */
+	public final ISimulation getSimulation() {
+		return simulation;
+	} // getSimulation
+
+	/**
+	 * Setting the {@link org.eclipse.stem.jobs.simulation.Simulation} has
+	 * the side-effect of causing the control to remove itself as a listener
+	 * from any previously set
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} and adding itself
+	 * as a listener to the new one. It will also cause the image to be
+	 * initialized from the contents of the new
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} as appropriate.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 *            whose Lat/Long data will be rendered.
+	 */
+	public final void setSimulation(final ISimulation simulation) {
+		// Any need to switch?
+		if (this.simulation == simulation) {
+			// No
+			return;
+		} // if no need to switch?
+
+		// Should we remove ourselves as listeners from the current simulation?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.removeSimulationListener(this);
+		}
+
+		this.simulation = simulation;
+		selection = null;
+		// Was there a new simulation to switch to?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.addSimulationListener(this);
+			initializeFromSimulation(this.simulation);
+		}
+
+		refresh();
+	} // setSimulation
+
+	/**
+	 * Initialize the control from a
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 *            whose state will be visualized in the control.
+	 */
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		simulationNameLabel.setText(simulation.getName());
+		optionsBar.setSimulation(simulation);
+	} // initializeFromSimulation
+
+	/**
+	 * Update the contents of {@link #geographicRenderer} from the contents of
+	 * the {@link #simulation}. This method should only be called by the UI
+	 * thread otherwise it contains a race condition that can lock up the
+	 * refreshing of the map canvas.
+	 */
+	void refresh() {
+		// This is complex and potential confusing code. The basic idea is that
+		// we want to determine what to draw on the mapCanvas in a thread
+		// separate from the UI thread, but we also want to capture a request to
+		// refresh the mapCanvas that comes while a background Job is already
+		// running. This request could have been generated because something
+		// significant like a decorator or a property has changed and
+		// we don't want to lose that switch.
+		// We have two fields that capture the state of the refresh. The first
+		// is the flag refreshPending which if true indicates that a call to
+		// refreshMapCanvas was processed while a background Job was executing.
+		// This flag is set instead of creating another background Job. The
+		// second is the field refreshJob which is set to the background Job if
+		// it is present and running.
+		//
+		// If we enter the method and refreshPending is true then we immediately
+		// exit because a refresh job will be created and there's nothing more
+		// for us to request. If, instead, refreshPending is false, then we
+		// check to see if a refreshJob is already running. If so, we set
+		// refreshPending to true, and exit. If not, we create the background
+		// refresh job and assign it to the field refreshJob.
+		//
+		// In the background refreshing job we process the Lat/Long data and
+		// then when done we add a Runnable on to the UI thread to redraw the
+		// mapCanvas. That Runnable also checks to see if the refresh pending
+		// flag is set and if so, resets the flag and then adds another Runnable
+		// to the UI thread to re-enter the refreshMapCanvas method.
+		//
+		// There is a race condition in the method if called by other than the
+		// UI thread. If a thread different from the UI thread were to call this
+		// method then it could reach position "RC #2" in the code below and
+		// then be preempted. The UI thread could then execute the test at "RC
+		// #1" below and find that there is no refresh pending. It would exit
+		// and then the other thread would resume at "RC #2" and set the
+		// refreshPending flag. This would cause all subsequent method
+		// invocations to immediately exit and the map canvas would never be
+		// refreshed again.
+
+		// Is there a refresh pending?
+		if (!refreshPending) {
+			// No
+			// Is there already a refresh job?
+			if (refreshJob == null) {
+				// No
+				// Refresh the map canvas in the background
+				refreshJob = new Job(Messages.getString("IMView.MRefresh")) {
+					/**
+					 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+					 */
+					@Override
+					protected IStatus run(final IProgressMonitor monitor) {
+
+						final StemPolygonsList polygonsToDraw = createPolygonsToDraw(monitor);
+						// Still ok to run?
+						if(polygonsToDraw == null) return Status.OK_STATUS;
+						final Display display = Display.getDefault();
+						if (!display.isDisposed()) {
+							// Yes
+							try {
+								display.asyncExec(new Runnable() {
+									public void run() {
+										// This runs in the UI thread
+										// Is the renderer still around?
+										if (!geographicRenderer.isDisposed()) {
+											// Yes
+											geographicRenderer
+													.render(polygonsToDraw);
+
+											refreshJob = null;
+											// RC #1
+											// Is there a refresh pending?
+											if (refreshPending) {
+												// Yes
+												refreshPending = false;
+												// We create a new Runnable to
+												// avoid recursion
+												// Ok to run?
+												final Display display2 = Display
+														.getDefault();
+												if (!display2.isDisposed()) {
+													// Yes
+													display2
+															.asyncExec(new Runnable() {
+																public void run() {
+																	// This runs
+																	// in the UI
+																	// thread
+																	refresh();
+																} // asyncExec
+															});
+												} // if ok to run
+											} // if refresh pending
+										} // if the mapCanvas still around?
+									} // run (UI thread mapCanvas.redraw())
+								});
+							} // try
+							catch (final NullPointerException npe) {
+								// see 177966
+								// We ignore the exception, there's nothing to
+								// do
+							} // catch NullPointerException
+						} // if ok to run
+						monitor.done();
+						return Status.OK_STATUS;
+					} // run (background polygon processing Job)
+
+				};
+				refreshPending = false;
+				refreshJob.schedule();
+			} // if not already a refresh job
+			else {
+				// Yes
+				// There is already a refresh job so remember that a refresh is
+				// pending
+				// RC #2
+				refreshPending = true;
+			} // else
+		} // if no refresh is pending
+
+	} // refresh
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		// Is there a simulation we're listening to?
+		if (simulation != null) {
+			// Yes
+			// Not any more
+			simulation.removeSimulationListener(this);
+		}
+
+		optionsBar.removeColorProviderChangedListener(this);
+		optionsBar.removePropertySelectionListener(this);
+
+		geographicRenderer.removeSelectionChangedListener(this);
+
+		// Shouldn't be any selection changed listeners
+		assert listeners.size() == 0;
+
+		Activator.getDefault().getPluginPreferences()
+				.removePropertyChangeListener(this);
+
+	} // dispose
+
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	private void createContextMenu(final Composite parent) {
+
+		// Context Menu
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		contextMenuManager.add(new ResetRenderer());
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+
+	/**
+	 * @param event
+	 */
+	public void propertyChange(final PropertyChangeEvent event) {
+		setPreferences();
+	} // propertyChange
+
+	/**
+	 * @param event
+	 */
+	public void selectionChanged(final SelectionChangedEvent event) {
+		fireSelection(event.getSelection());
+	}
+
+	protected class ResetRenderer extends Action {
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("MapMenu.Reset");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			geographicRenderer.reset();
+
+			// setTranslation(DEFAULT_INITIAL_X_TRANSLATION,
+			// DEFAULT_INITIAL_Y_TRANSLATION);
+			// zoomFactor = INITIAL_ZOOM_FACTOR;
+			//
+			// // Reset the gain factor and update the checks in the context
+			// menu
+			// lastGainFactorAction.setChecked(false);
+			// defaultGainFactorAction.run();
+			// defaultGainFactorAction.setChecked(true);
+			//
+			// useLogScaling = DEFAULT_USE_LOGSCALING;
+			// logarithmicAction.setChecked(useLogScaling);
+			//
+			// drawPolygonBorders = DEFAULT_DRAW_POLYGON_BORDERS;
+			// drawPolygonBordersAction.setChecked(drawPolygonBorders);
+			//
+			// drawPolygonCenterConnections =
+			// DEFAULT_DRAW_POLYGON_CENTER_CONNECTIONS;
+			// connectPolygonCentersAction
+			// .setChecked(drawPolygonCenterConnections);
+
+			geographicRenderer.redraw();
+		}
+	} // ResetMapCanvasAction
+
+	/**
+	 * This class is used to hold data used to display the relative values of a
+	 * {@link Decorator}. Instances of this class are created when the label
+	 * values of a {@link Decorator} are first drawn and then subsequently
+	 * cached in {@link #decoratorToDecoratorDisplayDataMap} for future
+	 * retrieval.
+	 */
+	protected static class DecoratorDisplayData {
+
+		private RelativeValueProviderAdapter rvp;
+
+		private LatLongProviderAdapter latLongProvider;
+
+		private final List<LabelData> labelDatas = new ArrayList<LabelData>();
+
+		private final List<LabelData> labelsWithUnresolvedLatLong = new ArrayList<LabelData>();
+
+		/**
+		 * Default constructor
+		 */
+		public DecoratorDisplayData() {
+			// nothing
+		}
+
+		/**
+		 * @return <code>true</code> if all of the labels have valid
+		 *         latitude/longitude data retrieved.
+		 */
+		public boolean hasAllLatLong() {
+			return labelsWithUnresolvedLatLong.size() == 0;
+		}
+
+		/**
+		 * @return the label data for the decorator
+		 */
+		public List<LabelData> getLabelData() {
+			return labelDatas;
+		}
+
+		/**
+		 * @return the {@link RelativeValueProviderAdapter}
+		 */
+		public RelativeValueProviderAdapter getRelativeValueProviderAdapter() {
+			return rvp;
+		} // getRelativeValueProviderAdapter
+
+		/**
+		 * Go through each of the label data entries and try to retrieve the
+		 * ones that do not have lat/long data yet.
+		 * 
+		 * @param monitor
+		 *            progress monitor
+		 */
+		void updateLatLong(final IProgressMonitor monitor) {
+			for (final Iterator<LabelData> iter = labelsWithUnresolvedLatLong
+					.iterator(); iter.hasNext();) {
+				final LabelData ld = iter.next();
+
+				latLongProvider.setTarget(ld.getLabel().getNode());
+				ld.setLatLongData(latLongProvider.getLatLongNoWait());
+				// Did we get some data?
+				if (ld.getLatLongData().size() != 0) {
+					// Yes
+					// No need to keep this one on the list
+					iter.remove();
+				} // if we got some data
+			} // for each DynamicNodeLabelImpl
+		} // updateLatLong
+
+		/**
+		 * @param label
+		 *            a {@link DynamicNodeLabel} to add to the set.
+		 */
+		public void addLabel(final DynamicNodeLabel label) {
+			final LabelData ld = new LabelData(label);
+			labelDatas.add(ld);
+			labelsWithUnresolvedLatLong.add(ld);
+		} // addLabel
+
+		/**
+		 * @param latLongProvider
+		 *            the {@link LatLongProviderAdapter} that will provide the
+		 *            latitude/longitude data for the labels.
+		 */
+		public void setLatLongProviderAdapter(
+				final LatLongProviderAdapter latLongProvider) {
+			this.latLongProvider = latLongProvider;
+		}
+
+		/**
+		 * @param rvp
+		 *            the {@link RelativeValueProviderAdapter} that will provide
+		 *            the relative values for the labels.
+		 */
+		public void setRelativeValueProviderAdapter(
+				final RelativeValueProviderAdapter rvp) {
+			this.rvp = rvp;
+		} // setRelativeValueProviderAdapter
+
+		/**
+		 * This class maintains a relationship between a
+		 * {@link org.eclipse.stem.core.graph.Label} and its
+		 * latitude/longitude data.
+		 */
+		public static class LabelData {
+
+			private final DynamicNodeLabel label;
+
+			private LatLong latLongData;
+
+			/**
+			 * @param label
+			 */
+			public LabelData(final DynamicNodeLabel label) {
+				this.label = label;
+			}
+
+			/**
+			 * @return the label
+			 */
+			public DynamicNodeLabel getLabel() {
+				return label;
+			}
+
+			/**
+			 * @return the latitude/longitude data
+			 */
+			public LatLong getLatLongData() {
+				return latLongData;
+			}
+
+			/**
+			 * @param latLongData
+			 */
+			public void setLatLongData(final LatLong latLongData) {
+				this.latLongData = latLongData;
+			}
+
+		} // LabelData
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * @return the selection
+	 */
+	public final ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(final ISelection selection) {
+		this.selection = selection;
+		fireSelection(selection);
+	}
+
+	/**
+	 * Pass a {@link SelectionChangedEvent} along to listeners.
+	 * 
+	 * @param selection
+	 *            the {@link ISelection} to be giving to the listeners.
+	 */
+	public void fireSelection(final ISelection selection) {
+
+		final SelectionChangedEvent event = new SelectionChangedEvent(this,
+				selection);
+		for (final ISelectionChangedListener listener : listeners) {
+			listener.selectionChanged(event);
+		} // for each ISelectionChangedListener
+
+	} // fireSelection
+
+	/**
+	 * @param parent
+	 * @return
+	 */
+	protected Composite createBottomComposite(final Composite parent) {
+		optionsBar = new GeoViewOptionsBar(parent, SWT.NONE);
+		optionsBar.addColorProviderChangedListener(this);
+		optionsBar.addPropertySelectionListener(this);
+		return optionsBar;
+	} // createBottomComposite
+
+	/**
+	 * @param propertySelectionEvent
+	 */
+	public void propertySelected(
+			final PropertySelectionEvent propertySelectionEvent) {
+		if (propertySelectionEvent == null) {
+			selectedEdge = "";
+		}
+		// Hack
+		else if (propertySelectionEvent.getSource() instanceof String) {
+			selectedEdge = (String) propertySelectionEvent.getSource();
+		}
+		refresh();
+	}
+
+	/**
+	 * @param parent
+	 *            the parent SWT control that this {@link Composite} will be a
+	 *            child of
+	 * @return the SWT {@link Composite} to be displayed above the
+	 *         {@link org.eclipse.stem.ui.views.geographic.map.MapCanvas} in the
+	 *         control
+	 */
+	protected Composite createTopComposite(final Composite parent) {
+		final Composite topComposite = new Composite(parent, SWT.NONE);
+
+		final FillLayout topCompositeLayout = new FillLayout(SWT.VERTICAL);
+		topComposite.setLayout(topCompositeLayout);
+
+		simulationNameLabel = new Label(topComposite, SWT.CENTER);
+		simulationNameLabel.setText("");
+
+		return topComposite;
+	} // createTopComposite
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListener#simulationChanged(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChanged(final SimulationEvent event) {
+
+		switch (event.getSimulationState()) {
+		case COMPLETED_CYCLE:
+			// It could be that the propertySelector is not initialized
+			// yet. This could happen if, when the simulation is first set, its
+			// scenario was not completely initialized, and so didn't have a
+			// canonical graph. If this is the case, we need to try again.
+
+			// Is the control initialized?
+			if (!optionsBar.isInitialized()) {
+				// No
+				optionsBar.setSimulation(getSimulation());
+			} // if
+
+			refresh();
+			break;
+
+		case RESET:
+			refresh();
+			break;
+		default:
+			// Ignore
+			break;
+		} // switch
+	} // simulationChanged
+
+	/**
+	 * This runs in the background {@link Job} created in {@link #refresh()}
+	 * 
+	 * @param decorator
+	 *            the {@link Decorator} for whom that data is being retrieved.
+	 * @param monitor
+	 *            the progress monitor to use to report the progress of
+	 *            obtaining the data
+	 * @return the {@link DecoratorDisplayData} for the {@link Decorator}.
+	 */
+	protected DecoratorDisplayData getDecoratorDisplayData(
+			final Decorator decorator, final IProgressMonitor monitor) {
+		DecoratorDisplayData retValue = decoratorToDecoratorDisplayDataMap
+				.get(decorator);
+		// Is there already an instance for this decorator?
+		if (retValue == null) {
+			// No
+			// Create one then
+			retValue = new DecoratorDisplayData();
+			decoratorToDecoratorDisplayDataMap.put(decorator, retValue);
+
+			if (decorator.getLabelsToUpdate() == null
+					|| decorator.getLabelsToUpdate().isEmpty()) {
+				return retValue;
+			}
+
+			// Get the relative value provider adapter that we'll use for all of
+			// the decorator's labels. We only get it once because it is
+			// implemented using the singleton pattern so we'll always get the
+			// same one.
+			final DynamicNodeLabel firstNodeLabel = (DynamicNodeLabel) decorator
+					.getLabelsToUpdate().get(0);
+			// Was there a label to update?
+			if (firstNodeLabel != null) {
+				// Yes
+				// Get the relative value from the dynamic label
+				final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+						.adapt(firstNodeLabel, RelativeValueProvider.class);
+				if(rvp == null) return null;
+				retValue.setRelativeValueProviderAdapter(rvp);
+
+				final Node node = firstNodeLabel.getNode();
+				// String nodeTitle = node.getDublinCore().getTitle();
+
+				final LatLongProviderAdapter latLongProvider = (LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE
+						.adapt(node, LatLongProvider.class);
+				retValue.setLatLongProviderAdapter(latLongProvider);
+			} // if there is a label
+
+			for (final Object element : decorator.getLabelsToUpdate()) {
+				final DynamicNodeLabel nodeLabel = (DynamicNodeLabel) element;
+				retValue.addLabel(nodeLabel);
+			} // for
+
+		} // if no instance
+
+		// Does the instance have all of it's lat/long data retrieved yet?
+		if (!retValue.hasAllLatLong()) {
+			// No
+			// Try to get it
+			monitor.subTask(decorator.getDublinCore().getTitle());
+			retValue.updateLatLong(monitor);
+		} // if missing lat/long
+
+		return retValue;
+	} // getDecoratorDisplayData
+
+	protected StemPolygonsList createPolygonsToDraw(
+			final IProgressMonitor monitor) {
+		return createPolygonsToDraw(optionsBar.getSelectedDecorator(), monitor);
+	} // createPolygonsToDraw
+
+	/**
+	 * This runs in the background {@link Job} created in
+	 * {@link #refreshMapCanvas()}.
+	 * 
+	 * @param selectedDecorator
+	 *            the {@link Decorator} that contains the selected property.
+	 * @param selectedProperty
+	 *            the property of the selected {@link Decorator} to visualize
+	 * @param monitor
+	 *            progress monitor for obtaining the polygons
+	 * @return a collection of polygon values to render in the
+	 *         {@link #mapCanvas}
+	 */
+	StemPolygonsList createPolygonsToDraw(final Decorator selectedDecorator,
+			final IProgressMonitor monitor) {
+		final StemPolygonsList retValue = new StemPolygonsList();
+
+		// Is there a decorator selected?
+		if (selectedDecorator != null) {
+			// Yes
+			// Get the display data for this decorator
+			final DecoratorDisplayData displayData = getDecoratorDisplayData(
+					selectedDecorator, monitor);
+			
+			if(displayData == null) return null;
+			final RelativeValueProviderAdapter rvp = displayData
+					.getRelativeValueProviderAdapter();
+			if(rvp == null) return null;
+			
+			monitor.beginTask(selectedDecorator.getDublinCore().getTitle(),
+					displayData.getLabelData().size());
+
+			for (final DecoratorDisplayData.LabelData labelData : displayData
+					.getLabelData()) {
+
+				// This is the Identifiable that will produce the lat/long data
+				// (if available).
+				final Identifiable identifiable = labelData.getLabel()
+						.getIdentifiable();
+
+				monitor.subTask(identifiable.getDublinCore().getTitle());
+
+				final LatLong latLong = labelData.getLatLongData();
+				// Any lat/long data for this label?
+				if (latLong.size() > 0) {
+					// Yes
+					final StemPolygonsList stemPolygonsList = getStemPolygonsList(
+							latLong, identifiable, rvp, labelData);
+
+					// adding it to the list of polygons to be drawn
+					retValue.addAll(stemPolygonsList);
+				} // if Any lat/long data for this label
+				monitor.worked(1);
+
+			} // for each LabelData
+
+			if (selectedEdge != null && !selectedEdge.equals("")) {
+
+				final List<URI> edgeTypes = new LinkedList<URI>();
+
+				final Graph graph = selectedDecorator.getGraph();
+				final EMap<URI, Edge> allEdges = graph.getEdges();
+				final Iterator<URI> iter = allEdges.keySet().iterator();
+				final List<Edge> edges = new ArrayList<Edge>();
+				while (iter.hasNext()) {
+					final URI uri = iter.next();
+					if (edgeTypes.contains(uri)) {
+						edgeTypes.add(uri);
+					}
+					if (uri.toString().startsWith(selectedEdge)) {
+						edges.add(allEdges.get(uri));
+					}
+				}
+
+				if (!edges.isEmpty()) {
+					final Iterator<Edge> edgesIter = edges.iterator();
+					final List<URI> addedEdges = new ArrayList<URI>();
+					while (edgesIter.hasNext()) {
+						final Edge nextEdge = edgesIter.next();
+
+						final Node nodeA = nextEdge.getA();
+						final Node nodeB = nextEdge.getB();
+						if (nodeA == null || nodeB == null) {
+							// Commented out 4/2/2009 since it is possible 
+							// that edges for air transport has a missing node if 
+							// a sub model is not included in the scenario
+							/*final StringBuffer missingEdgeReport = new StringBuffer();
+							missingEdgeReport
+									.append("The following edge has a missing node:\n");
+							missingEdgeReport.append(" Edge URI: "
+									+ nextEdge.getURI() + "\n");
+							if (nodeA == null && nodeB == null) {
+								missingEdgeReport.append(" Missing Node: Both");
+							} else {
+								missingEdgeReport.append(" Missing Node: "
+										+ (nodeA == null ? "A" : "B"));
+								missingEdgeReport.append(" Non-missing Node: "
+										+ (nodeA == null ? "B" : "A"));
+							}
+							Activator.logError(missingEdgeReport.toString(),
+									null);
+							*/
+							continue;
+						}
+
+						final String nodeAISOKey = nodeA.getURI().lastSegment();
+						double[] centerA = GeographicCenters
+								.getCenter(nodeAISOKey);
+
+						// Did we get it?
+						if (centerA == null) {
+							// No
+							// Compute the lat/long of the center of the node
+							final LatLongProviderAdapter latLongProviderA = (LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE
+									.adapt(nodeA, LatLongProvider.class);
+							latLongProviderA.setTarget(nodeA);
+							centerA = latLongProviderA.getCenter();
+						} // if
+
+						final String nodeBISOKey = nodeB.getURI().lastSegment();
+						double[] centerB = GeographicCenters
+								.getCenter(nodeBISOKey);
+						// Did we get it?
+						if (centerB == null) {
+							// No
+
+							// Get the lat/long of the center of the node
+							final LatLongProviderAdapter latLongProviderB = (LatLongProviderAdapter) LatLongProviderAdapterFactory.INSTANCE
+									.adapt(nodeB, LatLongProvider.class);
+							latLongProviderB.setTarget(nodeB);
+							centerB = latLongProviderB.getCenter();
+						} // if centerB
+
+						if (centerA == null || centerB == null) {
+							continue;
+						}
+
+						final double[][] data = new double[2][2];
+
+						data[0][0] = centerA[0];
+						data[0][1] = centerA[1];
+						data[1][0] = centerB[0];
+						data[1][1] = centerB[1];
+
+						if (!addedEdges.contains(nextEdge.getURI())) {
+							final Segment edgeSegment = new Segment(data);
+							final StemPolygon stemPolygon = new StemPolygon(
+									edgeSegment, nextEdge);
+							retValue.add(stemPolygon);
+							addedEdges.add(nextEdge.getURI());
+						}
+					}
+				}
+			}
+		} // if there a decorator and a currently selected property
+
+		return retValue;
+	}// createPolygonsToDraw
+
+	/**
+	 * @param latLong
+	 * @param rvp
+	 * @return
+	 */
+	private StemPolygonsList getStemPolygonsList(final LatLong latLong,
+			final Identifiable identifiable,
+			final RelativeValueProviderAdapter rvp,
+			final DecoratorDisplayData.LabelData labelData) {
+
+		StemPolygonsList retValue = polygonListMap.get(latLong);
+		rvp.setTarget(labelData.getLabel());
+		// final ItemPropertyDescriptor selectedProperty =
+		// null;//bottomComposite.get
+		// Did we find a previously generated polygon list?
+		if (retValue == null) {
+			// // No
+			// // Allocate a mapping between the property names and their
+			// // relative values.
+			// final Map<String, Double> relativeValueMap = new HashMap<String,
+			// Double>();
+			//
+			// // First put the Selected property in the valueMap to
+			// // display
+			// relativeValueMap.put(selectedProperty
+			// .getDisplayName(selectedProperty), new Double(rvp
+			// .getRelativeValue(selectedProperty)));
+
+			// Are we in multicolor display mode?
+			// if (false /* mapCanvas.enableMultiColorMode */) {
+			// // Yes
+			// // Add all relative values by property attribute key
+			// final List<IItemPropertyDescriptor> properties = rvp
+			// .getProperties();
+			// // JHK we don't need to add the selected one separately
+			// // above as the code below should get it as well - check
+			// // this...
+			// assert (properties.contains(selectedProperty));
+			// // Add ALL the properties for MultiColor Display Mode
+			// for (int i = 0; i < properties.size(); i++) {
+			// final ItemPropertyDescriptor itemKey = (ItemPropertyDescriptor)
+			// properties
+			// .get(i);
+			// key = itemKey.getDisplayName(itemKey);
+			// relativeValue = new Double(rvp.getRelativeValue(itemKey));
+			// valueMap.put(key, relativeValue);
+			// } // for all properties
+			// } // if multi color mode
+
+			// creating the polygon from that label
+			retValue = new StemPolygonsList(latLong, // relativeValueMap,
+					identifiable);
+			polygonListMap.put(latLong, retValue);
+		} // if didn't find generated instance
+		// else {
+		// // Update the relative values of the properties in the value map
+		// retValue.clearRelativeValues();
+		// retValue.addRelativeValue(selectedProperty
+		// .getDisplayName(selectedProperty), new Double(rvp
+		// .getRelativeValue(selectedProperty)));
+		// } // else
+		return retValue;
+	} // getStemPolygonsList
+
+	/**
+	 * The method will return the {@link GeographicRenderer} used by this
+	 * object.
+	 * 
+	 * @return The GeographicRenderer used by this object
+	 * @see GeographicRenderer
+	 */
+	public GeographicRenderer getGeographicRenderer() {
+		return geographicRenderer;
+	} // getGeographicRenderer
+
+	/**
+	 * @see org.eclipse.stem.ui.adapters.color.IColorProviderChangedListener#colorProviderChanged(java.lang.Class)
+	 */
+	public void colorProviderChanged(final Class selectedColorProvider) {
+		final Decorator decorator = optionsBar.getSelectedDecorator();
+		if(decorator == null) return;
+		final AdapterFactory adapterFactory = ColorProviderAdapterFactory.INSTANCE
+				.getFactoryForType(selectedColorProvider);
+		final Adapter adapter = adapterFactory.adapt(decorator.getGraph(),
+				selectedColorProvider);
+		if (adapter instanceof ColorProviderAdapter) {
+			colorProviderAdapter = (ColorProviderAdapter) adapter;
+			colorProviderAdapter.setSelectedDecorator(optionsBar
+					.getSelectedDecorator());
+			geographicRenderer.setColorProviderAdapter(colorProviderAdapter);
+			layout();
+		}
+	} // colorProviderChanged
+} // GeographicControl
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControlFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControlFactory.java
new file mode 100644
index 0000000..37d69e8
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicControlFactory.java
@@ -0,0 +1,30 @@
+// GeographicControlFactory.java
+package org.eclipse.stem.ui.views.geographic;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This interface is implemented by factories that create instances of
+ * {@link GeographicControl}.
+ */
+public interface GeographicControlFactory {
+
+	/**
+	 * @param parent
+	 *            the parent of the control
+	 * @return a new {@link GeographicControl} instance.
+	 */
+	GeographicControl create(final Composite parent);
+
+} // GeographicControlFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicRenderer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicRenderer.java
new file mode 100644
index 0000000..155a749
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicRenderer.java
@@ -0,0 +1,435 @@
+// GeographicRenderer.java
+package org.eclipse.stem.ui.views.geographic;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.awt.BasicStroke;
+import java.awt.Stroke;
+import java.text.ParseException;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.swing.text.NumberFormatter;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapter;
+import org.eclipse.stem.ui.views.geographic.map.Messages;
+import org.eclipse.stem.ui.views.geographic.map.StemPolygonsList;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * This class is extended by classes that render geographic (lat/long) data into
+ * a visual representation.
+ */
+public abstract class GeographicRenderer extends Composite implements
+		ISelectionProvider {
+	protected static final float INITIAL_GAIN_FACTOR = 1.0f;
+	protected static final boolean INITIAL_DRAW_POLYGON_BORDERS = true;
+	protected static final boolean INITIAL_USE_LOG_SCALING = true;
+	protected static final int MARGIN_HEIGHT = 5;
+	protected static final int MARGIN_WIDTH = 5;
+
+	private static NumberFormatter formatter = new NumberFormatter();
+
+	protected boolean drawPolygonBorders = INITIAL_DRAW_POLYGON_BORDERS;
+	protected Stroke polygonStroke = new BasicStroke(1f);
+	protected boolean useLogScaling = INITIAL_USE_LOG_SCALING;
+	protected float gainFactor = INITIAL_GAIN_FACTOR;
+
+	private GainFactorAction defaultGainFactorAction;
+	GainFactorAction lastGainFactorAction;
+	private LogarithmicAction logarithmicAction;
+	private DrawPolygonBordersAction drawPolygonBordersAction;
+	
+	protected ColorProviderAdapter colorProviderAdapter = null;
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<ISelectionChangedListener> listeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+
+	private ISelection selection;
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public GeographicRenderer(final Composite parent, final int style) {
+		super(parent, style);
+		this.addDisposeListener(new DisposeListener() {
+			/**
+			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+			 */
+			public void widgetDisposed(
+					@SuppressWarnings("unused") final DisposeEvent e) {
+				if (!isDisposed()) {
+					dispose();
+				}
+			}
+		});
+	} // GeographicRenderer
+
+	/**
+	 * @param polygonsToRender
+	 */
+	abstract public void render(StemPolygonsList polygonsToRender);
+
+	protected java.awt.Color getColorForRelativeValue(
+			@SuppressWarnings("unused")
+			final double relativeValue) {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		//Nothing to do
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * @return the selection
+	 */
+	public final ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(final ISelection selection) {
+		this.selection = selection;
+		fireSelection(selection);
+	}
+
+	/**
+	 * Pass a {@link SelectionChangedEvent} along to listeners.
+	 * 
+	 * @param selection
+	 *            the {@link ISelection} to be giving to the listeners.
+	 */
+	public void fireSelection(final ISelection selection) {
+
+		final SelectionChangedEvent event = new SelectionChangedEvent(this,
+				selection);
+		for (final ISelectionChangedListener listener : listeners) {
+			listener.selectionChanged(event);
+		} // for each ISelectionChangedListener
+	} // fireSelection
+
+	/**
+	 * Reset the renderer.
+	 */
+	public void reset() {
+		// Reset the gain factor and update the checks in the context menu
+		lastGainFactorAction.setChecked(false);
+		defaultGainFactorAction.run();
+		defaultGainFactorAction.setChecked(true);
+
+		useLogScaling = INITIAL_USE_LOG_SCALING;
+		logarithmicAction.setChecked(useLogScaling);
+
+		drawPolygonBorders = INITIAL_DRAW_POLYGON_BORDERS;
+		drawPolygonBordersAction.setChecked(drawPolygonBorders);
+
+		// drawPolygonCenterConnections =
+		// DEFAULT_DRAW_POLYGON_CENTER_CONNECTIONS;
+		// connectPolygonCentersAction.setChecked(drawPolygonCenterConnections);
+	} // reset
+
+	protected void setGainFactor(final float gainFactor) {
+		this.gainFactor = gainFactor;
+	} // setGainFactor
+
+	/**
+	 * Switch the option of drawing the borders of polygons on the map.
+	 */
+	protected void toggleDrawPolygonBordersChoice() {
+		drawPolygonBorders = !drawPolygonBorders;
+		redraw();
+	} // toggleDrawPolygonBordersChoice
+
+	/**
+	 * Switch the option of scaling the display values logrithmically.
+	 */
+	protected void toggleUseLogScaling() {
+		useLogScaling = !useLogScaling;
+		redraw();
+	} // toggleUseLogScaling
+
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 * @return the MenuManager
+	 */
+	public MenuManager createContextMenuManager() {
+
+		// Context Menu
+		final MenuManager contextMenuManager = new org.eclipse.jface.action.MenuManager();
+
+		contextMenuManager.add(createGainFactorMenu());
+
+		logarithmicAction = new LogarithmicAction();
+		contextMenuManager.add(logarithmicAction);
+
+		contextMenuManager.add(new Separator());
+		drawPolygonBordersAction = new DrawPolygonBordersAction();
+		contextMenuManager.add(drawPolygonBordersAction);
+
+		// connectPolygonCentersAction = new ConnectPolygonCentersAction();
+		// contextMenuManager.add(connectPolygonCentersAction);
+
+		contextMenuManager.add(new Separator());
+		
+		contextMenuManager.add(createReportsSelectionMenu());
+		
+		contextMenuManager.add(new Separator());
+
+		// ---------------------------------------------------------------------
+
+		contextMenuManager.add(new ResetMapCanvasAction());
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		return contextMenuManager;
+		
+	} // createContextMenu
+
+	/**
+	 * @return
+	 */
+	private MenuManager createGainFactorMenu() {
+		final MenuManager gainFactorMenu = new MenuManager(Messages
+				.getString("MapMenu.GainFactor"));
+		gainFactorMenu.add(new GainFactorAction(0.001));
+		gainFactorMenu.add(new GainFactorAction(0.01));
+		gainFactorMenu.add(new GainFactorAction(0.1));
+
+		defaultGainFactorAction = new GainFactorAction(1.0); // Default
+		lastGainFactorAction = defaultGainFactorAction;
+		gainFactorMenu.add(defaultGainFactorAction);
+
+		gainFactorMenu.add(new GainFactorAction(10.0));
+		gainFactorMenu.add(new GainFactorAction(100.0));
+		gainFactorMenu.add(new GainFactorAction(1000.0));
+		gainFactorMenu.add(new GainFactorAction(10000.0));
+		gainFactorMenu.add(new GainFactorAction(100000.0));
+		gainFactorMenu.add(new GainFactorAction(1000000.0));
+		gainFactorMenu.add(new GainFactorAction(10000000.0));
+		return gainFactorMenu;
+	}
+	
+	/**
+	 * @return
+	 */
+	private MenuManager createReportsSelectionMenu() {
+		final MenuManager reportsSelectionMenu = new MenuManager(Messages
+				.getString("MapMenu.Reports_Select"), "reports");
+		reportsSelectionMenu.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+		return reportsSelectionMenu;
+	} // createReportsSelectionMenu
+
+	protected class GainFactorAction extends Action {
+
+		private final double factor;
+
+		GainFactorAction(final double factor) {
+			super(GeographicRenderer.this.getText(factor),
+					IAction.AS_RADIO_BUTTON);
+			this.factor = factor;
+			setChecked(factor == INITIAL_GAIN_FACTOR);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return GeographicRenderer.this.getText(factor);
+		} // getText
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			setGainFactor((float)factor);
+			lastGainFactorAction = this;
+			Composite parent = GeographicRenderer.this.getParent();
+			((GeographicControl)parent).refresh(); 
+		}
+
+	} // GainFactorAction
+
+	String getText(final double factor) {
+		String retValue = "";
+		try {
+			retValue = formatter.valueToString(new Double(factor));
+		} catch (final ParseException e) {
+			Activator.logError("Problem parsing gain factor value \"" + factor
+					+ "\"", e);
+		}
+		return retValue;
+	} // getText
+
+	protected class LogarithmicAction extends Action {
+
+		/**
+		 * Default Constructor
+		 */
+		public LogarithmicAction() {
+			super(Messages.getString("MapMenu.Logrithmic_Scaling"),
+					IAction.AS_CHECK_BOX);
+			setChecked(useLogScaling);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("MapMenu.Logrithmic_Scaling");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			toggleUseLogScaling();
+			Composite parent = GeographicRenderer.this.getParent();
+			((GeographicControl)parent).refresh(); 
+		}
+	} // LogarighmicAction
+
+	protected class DrawPolygonBordersAction extends Action {
+
+		/**
+		 * Default Constructor
+		 */
+		public DrawPolygonBordersAction() {
+			super(Messages.getString("MapMenu.Polygon_Borders"),
+					IAction.AS_CHECK_BOX);
+			// Checked in the menu?
+			if (drawPolygonBorders) {
+				// Yes
+				setChecked(true);
+			} // if
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("MapMenu.Polygon_Borders");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			toggleDrawPolygonBordersChoice();
+			Composite parent = GeographicRenderer.this.getParent();
+			((GeographicControl)parent).refresh(); 
+		}
+	} // DrawPolygonBordersAction
+
+	// protected class ConnectPolygonCentersAction extends Action {
+	//
+	// /**
+	// * Default Constructor
+	// */
+	// public ConnectPolygonCentersAction() {
+	// super(Messages.getString("MapMenu.Polygon_Centers"),
+	// IAction.AS_CHECK_BOX);
+	// setEnabled(false);
+	// setChecked(drawPolygonCenterConnections);
+	// }
+	//
+	// /**
+	// * @see org.eclipse.jface.action.Action#getText()
+	// */
+	// @Override
+	// public String getText() {
+	// return Messages.getString("MapMenu.Polygon_Centers");
+	// }
+	//
+	// /**
+	// * @see org.eclipse.jface.action.Action#run()
+	// */
+	// @Override
+	// public void run() {
+	// toggleDrawPolygonsCentersConnections();
+	// }
+	// } // ConnectPolygonCentersAction
+
+	protected class ResetMapCanvasAction extends Action {
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("MapMenu.Reset");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			reset();
+		}
+	} // ResetMapCanvasAction
+
+	/**
+	 * @param colorProvider the colorProvider to set
+	 */
+	public void setColorProviderAdapter(ColorProviderAdapter colorProvider) {
+		this.colorProviderAdapter = colorProvider;
+	}
+} // GeographicRenderer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicViewer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicViewer.java
new file mode 100644
index 0000000..2dd8d3d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/GeographicViewer.java
@@ -0,0 +1,402 @@
+// GeographicViewer.java
+package org.eclipse.stem.ui.views.geographic;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListener;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.ui.views.IContextMenuUpdatesListener;
+import org.eclipse.stem.ui.views.geographic.map.MapRenderer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * This class presents "views" of the running simulations.
+ */
+public class GeographicViewer extends Viewer implements
+		ISelectionChangedListener, ISimulationManagerListener {
+
+	/**
+	 * This is the collection of
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s that should be
+	 * displayed.
+	 */
+	private final Set<ISimulation> simulationsToDisplay = new LinkedHashSet<ISimulation>();
+
+	/**
+	 * This is the {@link SimulationManager} that is the input to the viewer. It
+	 * maintains a collection of active
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s in the system.
+	 * This viewer listens to it to discover when new
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s are created and
+	 * old ones disappear.
+	 * 
+	 * @see #simulationsChanged(SimulationManagerEvent)
+	 */
+	private SimulationManager simulationManager;
+
+	/**
+	 * The <code>Identifiable</code> that was most recently selected by a user
+	 * clicking on one of the
+	 * {@link org.eclipse.stem.ui.views.geographic.map.MapControl}s, or
+	 * <code>null</code> if none has been selected.
+	 */
+	private ISelection selection = null;
+
+	/**
+	 * This is the top-level control of the viewer. It contains the
+	 * {@link org.eclipse.stem.ui.views.geographic.map.MapControl}s that
+	 * display the current state of the
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+	 */
+	private Composite composite;
+
+	/**
+	 * This factory is used to create instances of {@link GeographicControl} in
+	 * the method {@link #populateView()}
+	 */
+	private GeographicControlFactory gcf;
+
+	/**
+	 * This is a list of listeners to get notifications about newly generated
+	 * context menus.
+	 */
+	private List<IContextMenuUpdatesListener> contextMenuUpdateListeners = new ArrayList<IContextMenuUpdatesListener>();
+
+	/**
+	 * @param parent
+	 *            the SWT parent of the control that makes up the viewer
+	 * @param gcf
+	 *            the factory that creates instance of {@link GeographicControl}
+	 */
+	public GeographicViewer(Composite parent, GeographicControlFactory gcf) {
+		composite = new Composite(parent, SWT.NONE);
+		final FillLayout compositeLayout = new FillLayout(SWT.HORIZONTAL);
+		composite.setLayout(compositeLayout);
+
+		// Remember the factory that we'll use to create instances of
+		// GeographicControl
+		this.gcf = gcf;
+
+		refresh();
+
+		composite.pack();
+	} // GeographicViewer
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getControl()
+	 */
+	@Override
+	public Control getControl() {
+		return composite;
+	} // getControl
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getSelection()
+	 */
+	@Override
+	public ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#refresh()
+	 */
+	@Override
+	public void refresh() {
+		if (simulationManager != null) {
+			// Yes
+			simulationsToDisplay.clear();
+			simulationsToDisplay.addAll(simulationManager
+					.getActiveSimulations());
+		} // if
+		populateView();
+	} // refresh
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getInput()
+	 */
+	@Override
+	public Object getInput() {
+		return simulationManager;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
+	 */
+	@Override
+	public void setInput(Object input) {
+		final Object oldInput = simulationManager;
+		simulationManager = (SimulationManager) input;
+		inputChanged(input, oldInput);
+	} // setInput
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	@Override
+	protected void inputChanged(Object input, Object oldInput) {
+		// Is there already a simulation manager?
+		if (oldInput != null) {
+			// Yes
+			((SimulationManager) oldInput).removeListener(this);
+		} // if
+
+		// Register with the SimulationManager to listen for changes in the set
+		// of active Simulations.
+		// Got input?
+		if (input != null) {
+			// Yes
+			((SimulationManager) input).addSimulationManagerListener(this);
+		} // if
+
+		// Update the viewer with the contents of the new input source
+		refresh();
+	} // inputChanged
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers.ISelection,
+	 *      boolean)
+	 */
+	@Override
+	public void setSelection(ISelection selection, @SuppressWarnings("unused")
+	boolean reveal) {
+		this.selection = selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(final SelectionChangedEvent event) {
+		// Did the event come from a GeographicControl?
+		if (event.getSelectionProvider() instanceof GeographicControl) {
+			// Yes
+			// Just pass it along
+			selection = event.getSelection();
+			fireSelectionChanged(event);
+		} // if
+	} // selectionChanged
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(org.eclipse.stem.jobs.simulation.SimulationManagerEvent)
+	 */
+	public void simulationsChanged(final SimulationManagerEvent event) {
+		addToDisplayedSimulationSet(Arrays.asList(event.getSimulationsAdded()));
+
+		removeFromDisplayedSimulationSet(Arrays.asList(event
+				.getSimulationsRemoved()));
+
+		populateView();
+	} // simulationsChanged
+
+	/**
+	 * @param simulations
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}s
+	 *            to add to the set being displayed.
+	 */
+	private void addToDisplayedSimulationSet(final List<ISimulation> simulations) {
+		// Any simulations to add?
+		if (!simulations.isEmpty()) {
+			// Yes
+			simulationsToDisplay.addAll(simulations);
+		} // if any simulations
+	} // addToDisplayedSimulationSet
+
+	/**
+	 * @param simulations
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}s
+	 *            to remove from the set being displayed.
+	 */
+	private void removeFromDisplayedSimulationSet(
+			final List<ISimulation> simulations) {
+		// Any simulations to remove?
+		if (!simulations.isEmpty()) {
+			// Yes
+			simulationsToDisplay.removeAll(simulations);
+		} // if
+	} // removeFromDisplayedSimulationSet
+
+	/**
+	 * Create and dispose of MapControls as necessary to display the selected
+	 * Simulations.
+	 */
+	private void populateView() {
+
+		// Are we done?
+		if (composite.isDisposed()) {
+			// Yes
+			return;
+		} // if
+
+		selection = null;
+
+		// Find the Simulations that are not currently being displayed and put
+		// them into the Set undisplayedSimulations.
+		final Set<ISimulation> undisplayedSimulations = new HashSet<ISimulation>();
+		for (final ISimulation simulation : simulationsToDisplay) {
+			// Is this one associated with a GeographicControl already?
+			if (!isDisplayed(simulation)) {
+				// No
+				undisplayedSimulations.add(simulation);
+			} // if not displayed
+		} // for each ISimulation
+
+		// Go through the current set of Controls looking for ones that
+		// we can reassign
+		final Control[] controls = composite.getChildren();
+		for (final Control element : controls) {
+			// Does this GeographicControl have a simulation that is still valid
+			// to display?
+			final GeographicControl geoControl = (GeographicControl) element;
+			if (!simulationsToDisplay.contains(geoControl.getSimulation())
+					&& !undisplayedSimulations.isEmpty()) {
+				// No
+				// Reassign it to one that is valid
+				final ISimulation simulation = (ISimulation) undisplayedSimulations
+						.toArray()[0];
+				geoControl.setSimulation(simulation);
+				// Notify ViewPart that a new context menu has been generated
+				notifyContextMenuUpdateListeners(geoControl);
+				undisplayedSimulations.remove(simulation);
+			} // if
+		} // for each MapControl
+
+		// At this point we still could have map controls with invalid
+		// Simulations, let's get rid of them
+		for (final Control element : controls) {
+			final GeographicControl geoControl = (GeographicControl) element;
+			// Does this MapControl have a simulation that is still valid to
+			// display?
+			ISimulation simulation = geoControl.getSimulation();
+			if (simulation != null
+					&& !simulationsToDisplay.contains(simulation)) {
+				// No
+				geoControl.removeSelectionChangedListener(this);								
+				geoControl.dispose();
+			}
+		}// for each MapControl
+
+		// If there're any Simulations not assigned to a GeographicControl,
+		// let's take care of that now.
+		for (final ISimulation simulation2 : undisplayedSimulations) {
+			final GeographicControl geoControl = gcf.create(composite);
+			// Notify ViewPart that a new context menu has been generated
+			notifyContextMenuUpdateListeners(geoControl);
+			geoControl.addSelectionChangedListener(this);
+			geoControl.setSimulation(simulation2);
+		} // for each ISimulation
+
+		// If there are no simulations to display, we just put up a "blank"
+		// GeographicControl
+		if (composite.getChildren().length == 0) {
+			// Yes
+			final GeographicControl geoControl = gcf.create(composite);
+			geoControl.addSelectionChangedListener(this);
+		} // if
+		composite.layout(true, true);
+		composite.redraw();
+	} // populateView
+
+	/**
+	 * @param simulation
+	 * @return
+	 */
+	private boolean isDisplayed(final ISimulation simulation) {
+		boolean retValue = false;
+		final Control[] foo = composite.getChildren();
+		for (final Control element : foo) {
+			final GeographicControl geoControl = (GeographicControl) element;
+			final ISimulation testSimulation = geoControl.getSimulation();
+			if (testSimulation != null && testSimulation.equals(simulation)) {
+				retValue = true;
+				break;
+			} // if
+		} // for each MapControl
+		return retValue;
+	} // isDisplayed
+
+	/**
+	 * The method adds the specified listener to the list of listeners
+	 * 
+	 * @param newListener
+	 *            A listener to be added
+	 */
+	public void addContextMenuUpdateListener(
+			IContextMenuUpdatesListener newListener) {
+		if (!contextMenuUpdateListeners.contains(newListener)) {
+			contextMenuUpdateListeners.add(newListener);
+		} // if
+	} // addContextMenuUpdateListener
+	
+	/**
+	 * The method removes the specified listener to the list of listeners
+	 * 
+	 * @param newListener
+	 *            A listener to be added
+	 */
+	public void removeContextMenuUpdateListener(
+			IContextMenuUpdatesListener newListener) {
+		contextMenuUpdateListeners.remove(newListener);
+	} // addContextMenuUpdateListener
+
+	/**
+	 * The method will send notification to all listeners about new menu that
+	 * has been created.
+	 * 
+	 * @param geoControl
+	 *            The <code>GeographicControl</code> that has the new
+	 *            <code>MenuManager</code> as a field.
+	 */
+	private void notifyContextMenuUpdateListeners(GeographicControl geoControl) {
+		GeographicRenderer geoRenderer = geoControl.getGeographicRenderer();
+		if (geoRenderer instanceof MapRenderer) {
+			MapRenderer mapRenderer = (MapRenderer) geoRenderer;
+			notifyContextMenuUpdateListeners(mapRenderer.getMenuManager(),
+					mapRenderer);
+		} // if
+	} // notifyContextMenuUpdateListeners
+
+	/**
+	 * The method will send notification to all listeners about new menu that
+	 * has been created.
+	 * 
+	 * @param menuManager
+	 *            The newly added <code>MenuManager</code>
+	 * @param selectionProvider
+	 *            A <code>ISelectionProvider</code> for the menu
+	 */
+	private void notifyContextMenuUpdateListeners(MenuManager menuManager,
+			ISelectionProvider selectionProvider) {
+		for (final IContextMenuUpdatesListener listener : contextMenuUpdateListeners) {
+			listener.onContextMenuUpdate(menuManager, selectionProvider);
+		} // for each IContextMenuUpdatesListener
+	} // notifyContextMenuUpdateListeners
+	
+} // GeographicViewer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/GeographicSelectionElements.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/GeographicSelectionElements.java
new file mode 100644
index 0000000..f4dddc0
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/GeographicSelectionElements.java
@@ -0,0 +1,75 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Specify the information that is passed in the StructuredSelection event that
+ * is created by MapView on a mouse click on the map.
+ * 
+ * <pre>
+ * The instance of this class is passed as the 2nd element in the
+ * StructuredSelection instance. 
+ * 
+ * The information passed is the following: 
+ * - Identifiable that describes the map polygon (in the 1st element)
+ * - GeographicSelectionElement (in the 2nd element)
+ *   - Point (longitude/latitude) of the actual click 
+ *   - Map of relative values at the instance of the click.
+ * 
+ * Note: One might think that the StructuredSelection should have been subclassed
+ * but it is specificly forbidden.
+ * 
+ * </pre>
+ */
+public class GeographicSelectionElements {
+
+	/**
+	 * Longitude of selection point
+	 */
+	private double longitude = 0.0;
+	/**
+	 * latitude of selection point
+	 */
+	private double latitude = 0.0;
+
+	/**
+	 * default constructor
+	 */
+	public GeographicSelectionElements() {
+		// default constructor
+	}
+
+	/**
+	 * @return the point
+	 */
+	public double getLongitude() {
+		return longitude;
+	}
+
+	/**
+	 * @return the point
+	 */
+	public double getLatitude() {
+		return latitude;
+	}
+
+	/**
+	 * set the longitude and latitude of the selected point
+	 * 
+	 * @param longitude
+	 * @param latitude
+	 */
+	public void setPoint(final double longitude, final double latitude) {
+		this.longitude = longitude;
+		this.latitude = latitude;
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Graphics2DRenderer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Graphics2DRenderer.java
new file mode 100644
index 0000000..e5ed18f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Graphics2DRenderer.java
@@ -0,0 +1,159 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Helper class allowing the use of Java 2D on SWT or Draw2D graphical context.
+ * See:
+ * http://www-128.ibm.com/developerworks/java/library/j-2dswt/?ca=dgr-jw17j-2dswt
+ * 
+ * @author Yannick Saillet / IBM
+ */
+
+public class Graphics2DRenderer {
+	private static final PaletteData PALETTE_DATA = new PaletteData(0xFF0000,
+			0xFF00, 0xFF);
+
+	private BufferedImage awtImage;
+
+	private Image swtImage;
+
+	private ImageData swtImageData;
+
+	private int[] awtPixels;
+
+	/** RGB value to use as transparent color */
+	private static final int TRANSPARENT_COLOR = 0x123456;
+
+	/**
+	 * Prepare to render on a SWT graphics context.
+	 * 
+	 * @param gc
+	 */
+	public void prepareRendering(GC gc) {
+		org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
+		prepareRendering(clip.x, clip.y, clip.width, clip.height);
+	}
+
+	/**
+	 * Prepare the AWT off screen image for the rendering of the rectangular
+	 * region given as parameter.
+	 * 
+	 * @param clipX
+	 * @param clipY
+	 * @param clipW
+	 * @param clipH
+	 */
+	public void prepareRendering(int clipX, int clipY, int clipW, int clipH) {
+		// check that the off screen images are initialized and large enough
+		checkOffScreenImages(clipW, clipH);
+		// fill the region in the AWT image with the transparent color
+		java.awt.Graphics awtGraphics = awtImage.getGraphics();
+		awtGraphics.setColor(new java.awt.Color(TRANSPARENT_COLOR));
+		awtGraphics.fillRect(clipX, clipY, clipW, clipH);
+	}
+
+	/**
+	 * Returns the Graphics2D context to use.
+	 * 
+	 * @return Graphics2D
+	 */
+	public Graphics2D getGraphics2D() {
+		if (awtImage == null)
+			return null;
+		return (Graphics2D) awtImage.getGraphics();
+	}
+
+	/**
+	 * Complete the rendering by flushing the 2D renderer on a SWT graphical
+	 * context.
+	 * 
+	 * @param gc
+	 */
+	public void render(GC gc) {
+		if (awtImage == null)
+			return;
+
+		org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
+		transferPixels(clip.x, clip.y, clip.width, clip.height);
+		gc.drawImage(swtImage, clip.x, clip.y, clip.width, clip.height, clip.x,
+				clip.y, clip.width, clip.height);
+	}
+
+	/**
+	 * Transfer a rectangular region from the AWT image to the SWT image.
+	 */
+	private void transferPixels(int clipX, int clipY, int clipW, int clipH) {
+		int step = swtImageData.depth / 8;
+		byte[] data = swtImageData.data;
+		awtImage.getRGB(clipX, clipY, clipW, clipH, awtPixels, 0, clipW);
+		for (int i = 0; i < clipH; i++) {
+			int idx = (clipY + i) * swtImageData.bytesPerLine + clipX * step;
+			for (int j = 0; j < clipW; j++) {
+				int rgb = awtPixels[j + i * clipW];
+				for (int k = swtImageData.depth - 8; k >= 0; k -= 8) {
+					data[idx++] = (byte) ((rgb >> k) & 0xFF);
+				}
+			}
+		}
+		if (swtImage != null)
+			swtImage.dispose();
+		swtImage = new Image(Display.getDefault(), swtImageData);
+	}
+
+	/**
+	 * Dispose the resources attached to this 2D renderer.
+	 */
+	public void dispose() {
+		if (awtImage != null)
+			awtImage.flush();
+		if (swtImage != null)
+			swtImage.dispose();
+		awtImage = null;
+		swtImageData = null;
+		awtPixels = null;
+	}
+
+	/**
+	 * Ensure that the off screen images are initialized and are at least as
+	 * large as the size given as parameter.
+	 */
+	private void checkOffScreenImages(int width, int height) {
+		int currentImageWidth = 0;
+		int currentImageHeight = 0;
+		if (swtImage != null) {
+			currentImageWidth = swtImage.getImageData().width;
+			currentImageHeight = swtImage.getImageData().height;
+		}
+
+		// if the off screen images are too small, recreate them
+		if (width > currentImageWidth || height > currentImageHeight) {
+			dispose();
+			width = Math.max(width, currentImageWidth);
+			height = Math.max(height, currentImageHeight);
+			awtImage = new BufferedImage(width, height,
+					BufferedImage.TYPE_INT_ARGB);
+			swtImageData = new ImageData(width, height, 24, PALETTE_DATA);
+			swtImageData.transparentPixel = TRANSPARENT_COLOR;
+			awtPixels = new int[width * height];
+		}
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapCanvas.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapCanvas.java
new file mode 100644
index 0000000..a16f99c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapCanvas.java
@@ -0,0 +1,648 @@
+// MapCanvas.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.stem.data.geography.GeographicNames;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapter;
+import org.eclipse.stem.ui.adapters.color.StandardColorProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.events.MouseWheelListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * This class is a SWT Widget that displays a "map" view of the geographic
+ * features of a {@link org.eclipse.stem.jobs.simulation.Simulation}.
+ */
+public class MapCanvas 
+	extends Canvas 
+	implements ISelectionProvider, PaintListener, MouseWheelListener, MouseMoveListener, DisposeListener 
+{
+
+	private static final double INITIAL_ZOOM_FACTOR = 1;
+	private static final double INITIAL_X_TRANSLATION = 0;
+	private static final double INITIAL_Y_TRANSLATION = 0;
+
+	protected static final double ZOOMING_FACTOR = 1.1;
+	protected static final double UNZOOMING_FACTOR = 1 / ZOOMING_FACTOR;
+
+	/**
+	 * This is the list of polygons that are rendered.
+	 */
+	private StemPolygonsList polygonsToRender;
+
+	double zoomFactor = INITIAL_ZOOM_FACTOR;
+	private float gainFactor = 1.0f;
+	private double xTranslation = INITIAL_X_TRANSLATION;
+	private double yTranslation = INITIAL_Y_TRANSLATION;
+	boolean drawPolygonBorders = true;
+	StemPolygonTransform pointsTransformer = new StemPolygonTransform();
+	boolean toUpdateTranform = true;
+	
+	private final StandardColorProvider stdColorProvider = new StandardColorProvider(this.getDisplay());
+	private ColorProviderAdapter colorProvider = null;
+
+	private boolean useLogScaling = true;
+	
+	boolean leftMouseButtonPressed = false;
+	int lastOffsetX;
+	int lastOffsetY;
+
+	private ISelection selection;
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<ISelectionChangedListener> selectionChangedListeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+	private Rectangle polygonsBoundsRect = null;
+	private static final int MARGIN = 10;
+	
+	private final MouseTrackHandler mouseTrackHandler = new MouseTrackHandler();
+	private final MouseButtonHandler mouseButtonHandler = new MouseButtonHandler();
+	private final MouseHoverHandler mouseHoverHandler = new MouseHoverHandler();
+	private final KeyHandler keyHandler = new KeyHandler();
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public MapCanvas(final Composite parent, final int style) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.NO_BACKGROUND);
+
+		addPaintListener(this);
+		addMouseWheelListener(this);
+		addMouseTrackListener(mouseTrackHandler);
+		addMouseMoveListener(this);
+		addKeyListener(keyHandler);		
+		addDisposeListener(this);
+		addMouseListener(mouseButtonHandler);
+		addMouseTrackListener(mouseHoverHandler);
+	} // MapCanvas
+	
+	/**
+	 * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent)
+	 */
+	public void paintControl(final PaintEvent e) {
+		final GC gc = e.gc;
+		final Point controlSize = ((Control) e.getSource()).getSize();
+		toUpdateTranform = true;
+		draw(gc, 0, 0, controlSize.x, controlSize.y);
+	}
+	
+	/**
+	 * @param e
+	 */
+	public void mouseScrolled(final MouseEvent e) {
+		// Zoom Out?
+		if (e.count >= 0) {
+			// Yes
+			zoomIn();
+		} else {
+			zoomOut();
+		}
+	}
+	
+	/**
+	 * @param e
+	 */
+	public void mouseMove(MouseEvent e) {
+		//Remove the tooltip text when the mouse is move to avoid showing a wrong
+		//tooltip text before the right text is being calculated
+		setToolTipText(null);
+		
+		if (leftMouseButtonPressed) {
+			// Yes
+			// new x and y are defined by current mouse location subtracted
+			// by previously processed mouse location
+			final int newX = e.x - lastOffsetX;
+			final int newY = e.y - lastOffsetY;
+			lastOffsetX = e.x;
+			lastOffsetY = e.y;
+
+			// Did we move from the spot where the mouse went down?
+			if (newX != 0 || newY != 0) {
+				// Yes
+				// This is a translation of the map then
+				// update the canvas translation
+				addTranslation(newX, newY);
+			} // if moved
+		}
+	}
+	
+	/**
+	 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+	 */
+	public void widgetDisposed(@SuppressWarnings("unused") final DisposeEvent e) {
+		if (!isDisposed()) {
+			dispose();
+		}
+	}
+
+	/**
+	 * @param polygonsToRender
+	 */
+	public void render(final StemPolygonsList polygonsToRender) {
+		this.polygonsToRender = polygonsToRender;
+		redraw();
+	} // render
+
+	/**
+	 * @param drawPolygonBorders
+	 */
+	public final void setDrawPolygonBorders(final boolean drawPolygonBorders) {
+		this.drawPolygonBorders = drawPolygonBorders;
+	}
+
+	/**
+	 * @param gainFactor
+	 */
+	public final void setGainFactor(final float gainFactor) {
+		this.gainFactor = gainFactor;
+	}
+
+	/**
+	 * @param useLogScaling
+	 */
+	public final void setUseLogScaling(final boolean useLogScaling) {
+		this.useLogScaling = useLogScaling;
+	}
+
+	/**
+	 * Reset
+	 */
+	public void reset() {
+		xTranslation = INITIAL_X_TRANSLATION;
+		yTranslation = INITIAL_Y_TRANSLATION;
+		zoomFactor = INITIAL_ZOOM_FACTOR;
+	} // reset
+
+	/**
+	 * The method which gets the MapCanvas' polygons list, and draws it on the
+	 * MapCanvas.
+	 * 
+	 * @param gc
+	 * @param x
+	 * @param y
+	 * @param width
+	 * @param height
+	 */
+	void draw(final GC gc, final int x, final int y, final int width,
+			final int height) {
+		
+		gc.setBackground(stdColorProvider.getBackgroundColor());
+		drawBackground(gc, x, y, width, height);
+		gc.setLineWidth(0); //Zero means the fastest possible line drawing algorithm
+		
+		if (polygonsToRender == null || polygonsToRender.isEmpty()) {
+			return;
+		}
+		
+		//Do we need to recalculate the transform?
+		if (toUpdateTranform) {
+			//Yes, compute it
+			computeTransform(polygonsToRender);
+			//Update all polygons about the changes in the transform
+			for (StemPolygon stempoly : polygonsToRender) {
+				stempoly.setPointsTransformer(pointsTransformer);
+			}
+			toUpdateTranform = false;
+		}
+		
+		Color bordersColor = stdColorProvider.getBordersColor();
+
+		for (final StemPolygon stempoly : polygonsToRender) {
+			
+			Identifiable identifiable = stempoly.getIdentifiable();
+			
+			if (identifiable instanceof Node) {
+				colorProvider.setTarget(identifiable);
+				
+				//Update the G2D with the appropriate color before filling the polygon
+				colorProvider.updateGC(gc, gainFactor, useLogScaling);
+				gc.fillPolygon(stempoly.transformedPoints);
+	
+				if (drawPolygonBorders) {
+					gc.setForeground(bordersColor);
+					gc.setAlpha(255);
+					gc.drawPolygon(stempoly.transformedPoints);
+				}
+			}
+			
+			if (identifiable instanceof Edge) {
+				
+				gc.setForeground(stdColorProvider.getEdgesColor());
+				if (stempoly.transformedPoints == null) {
+					stempoly.setPointsTransformer(pointsTransformer);
+				}
+				gc.drawLine(
+						stempoly.transformedPoints[0], 
+						stempoly.transformedPoints[1], 
+						stempoly.transformedPoints[2], 
+						stempoly.transformedPoints[3]);
+			}
+		} // for each StemPolygon
+
+		gc.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK));
+	} // draw
+
+	/**
+	 * @param polygonList
+	 */
+	private void computeTransform(final StemPolygonsList polygonList) {
+		if (polygonsBoundsRect == null) {
+			polygonsBoundsRect = polygonList.getBounds();
+			if (polygonsBoundsRect == null) {
+				return;
+			}
+		}
+		
+		final Rectangle canvasBounds = getBounds();
+
+		final int effectiveCanvasWidth = canvasBounds.width - 2 * MARGIN;
+		final int effectiveCanvasHeight = canvasBounds.height - 2 * MARGIN;
+		final double width = polygonsBoundsRect.width;
+		final double height = polygonsBoundsRect.height;
+		final double WIDTH_RATIO = effectiveCanvasWidth / width;
+		final double HEIGHT_RATIO = effectiveCanvasHeight / height;
+		final double SCALE_FACTOR = Math.min(WIDTH_RATIO, HEIGHT_RATIO)
+				* zoomFactor;
+
+		// Figure out the extra translation needed to center the image either
+		// vertically or horizontally in the canvas
+		int xCenteringTranslation = 0;
+		int yCenteringTranslation = 0;
+		// Anything to center?
+		if (width > 0 && height > 0) {
+			// Yes
+			xCenteringTranslation = (effectiveCanvasWidth - (int) (width * SCALE_FACTOR)) / 2;
+			yCenteringTranslation = (effectiveCanvasHeight - (int) (height * SCALE_FACTOR)) / 2;
+		} // if anything to center
+		int boundsMinX = polygonsBoundsRect.x;
+		int boundsMinY = polygonsBoundsRect.y;
+		
+		pointsTransformer.setOffsetX(-boundsMinX * SCALE_FACTOR + MARGIN + xCenteringTranslation + xTranslation * zoomFactor);
+		pointsTransformer.setOffsetY(-boundsMinY * SCALE_FACTOR + MARGIN + yCenteringTranslation + yTranslation * zoomFactor);
+		pointsTransformer.setScale(SCALE_FACTOR);
+	} // computeTransform
+
+	void zoomIn() {
+		zoomFactor *= ZOOMING_FACTOR;
+		toUpdateTranform = true;
+		redraw();
+	}
+
+	void zoomOut() {
+		zoomFactor *= UNZOOMING_FACTOR;
+		toUpdateTranform = true;
+		redraw();
+	}
+	
+	/**
+	 *
+	 */
+	protected class MouseTrackHandler extends MouseTrackAdapter {
+		@Override
+		public void mouseEnter(@SuppressWarnings("unused")
+		final MouseEvent e) {
+			forceFocus();
+		}
+	}
+	
+	/**
+	 * 
+	 */
+	protected class KeyHandler extends KeyAdapter {
+		@Override
+		public void keyReleased(final KeyEvent e) {
+			switch (e.keyCode) {
+			case SWT.ARROW_UP:
+				zoomIn();
+				break;
+			case SWT.ARROW_DOWN:
+				zoomOut();
+				break;
+			default:
+				break;
+			} // switch
+		}
+	}
+
+	/**
+	 * A helper class that defines a mouse-listener that will provide the user
+	 * the ability to move the map inside the view.
+	 * 
+	 */
+	protected class MouseButtonHandler extends MouseAdapter {
+		/**
+		 * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent)
+		 */
+		@Override
+		public void mouseDown(final MouseEvent e) {
+			// Is the left mouse button?
+			if (e.button == 1) {
+				// Yes
+				// Capture the starting point
+				lastOffsetX = e.x;
+				lastOffsetY = e.y;
+				leftMouseButtonPressed = true;
+			} // if
+		} // mouseDown
+
+		/**
+		 * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
+		 */
+		@Override
+		public void mouseUp(final MouseEvent e) {
+			// Is it the left mouse button?
+			if (e.button == 1) {
+				// Yes
+				// new x and y are defined by current mouse location subtracted
+				// by previously processed mouse location
+				final int newX = e.x - lastOffsetX;
+				final int newY = e.y - lastOffsetY;
+
+				// Did we move from the spot where the mouse went down?
+				if (newX != 0 || newY != 0) {
+					// Yes
+					// This is a translation of the map then
+					// update the canvas translation
+					addTranslation(newX, newY);
+				} // if moved
+				else {
+					// No
+					// This is a potential selection of a polygon
+					final StemPolygon polygon = getPolygon(e);
+					// Are we clicking on a polygon?
+					if (polygon != null) {
+						// Yes
+						// Get the Identifiable associated with the polygon and
+						// make it the current selection.
+						// Build the GeographicSelectionElements
+						// and pass it via the StructuredSelection as the 2nd
+						// element
+						final GeographicSelectionElements gse = new GeographicSelectionElements();
+
+						// Convert from canvas space coordinates to lat/long by
+						// the inverse
+						// transform.
+						final Point latLongPosition = pointsTransformer.getInversedPoint(e.x, e.y);//inverseMap(new Point(e.x, e.y));
+						final double longitude = polygon
+								.unScaleLongitude(latLongPosition.x);
+						final double latitude = polygon
+								.unScaleLatitude(latLongPosition.y);
+						gse.setPoint(longitude, latitude);
+						final Identifiable regnImpl = polygon.getIdentifiable();
+						final Object[] elements = new Object[] { regnImpl, gse };
+						final IStructuredSelection selection = new StructuredSelection(
+								elements);
+						fireSelection(selection);
+					}
+				} // else didn't move
+				leftMouseButtonPressed = false;
+			} // if left mouse button
+			//Remember the map canvas that has been clicked on
+			SelectedReportsManager.getInstance().setRecentClickedMapCanvas((MapCanvas)e.getSource());
+		} // mouseUp		
+	} // MouseButtonHandler
+
+	protected class MouseHoverHandler extends MouseTrackAdapter {
+
+//		@Override
+//		public void mouseEnter(MouseEvent e) {
+//			final Cursor cursor = new Cursor(getDisplay(), SWT.CURSOR_SIZEALL);
+//			Canvas mapCanvas = (Canvas)e.getSource();
+//			mapCanvas.setCursor(cursor);
+//			super.mouseEnter(e);
+//		}
+//
+//		@Override
+//		public void mouseExit(MouseEvent e) {
+//			final Cursor cursor = new Cursor(getDisplay(), SWT.CURSOR_ARROW);
+//			Canvas mapCanvas = (Canvas)e.getSource();
+//			mapCanvas.setCursor(cursor);
+//			super.mouseExit(e);
+//		}
+
+		/**
+		 * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(org.eclipse.swt.events.MouseEvent)
+		 */
+		@Override
+		public void mouseHover(final MouseEvent e) {			
+			// Convert from canvas space coordinates to lat/long by the inverse
+			// transform.
+			final Point latLongPosition = pointsTransformer.getInversedPoint(e.x, e.y);//inverseMap(new Point(e.x, e.y));
+			
+			// Try to get the polygon that matches the position of the mouse
+			final StemPolygon polygon = getPolygon(latLongPosition);
+
+			// Did we find an enclosing polygon?
+			if (polygon != null) {
+				// Yes
+				// We want to get the ISO-key for the identifiable, it will be
+				// at the end of the value of the dublin core "identifier"
+				// attribute
+				Identifiable identifiable = polygon.getIdentifiable();
+				final DublinCore dc = identifiable.getDublinCore();
+				final String dcIdentifier = dc.getIdentifier();
+
+				final String isoKey = dcIdentifier.substring(dcIdentifier
+						.lastIndexOf("/") + 1);				
+				// Did we get it?
+				if (isoKey != null && !isoKey.equals("")) {
+					// Yes
+					final String geographicName = GeographicNames
+							.getName(isoKey);
+					final StringBuilder sb = new StringBuilder(geographicName);
+					sb.append(" (");
+					sb.append(isoKey);
+					sb.append(")");
+					
+					Region region = (Region)identifiable;
+					for (NodeLabel nextLabel : region.getLabels()) {
+						if (nextLabel instanceof PopulationLabel) {
+							sb.append("\nPopulation: " + nextLabel);
+						}
+						if (nextLabel instanceof AreaLabel) {
+							sb.append("\nArea: " + nextLabel);
+						}
+					}
+
+					if (latLongPosition != null) {
+						double latitude = -1 * StemPolygon.getUnscaledLatitude(latLongPosition.y);
+						double longitude = -1 * StemPolygon.getUnscaledLongitude(latLongPosition.x);
+						sb.append("\nLatitude: " + latitude  + ", Longitude: " + longitude);
+					}
+					
+					setToolTipText(sb.toString());
+				} // if
+				else {
+					setToolTipText(polygon.getTitle());
+				}
+				/*
+				 * // Yes //mapCanvas.setToolTipText(polygon.getTitle() + "\n"
+				 * +polygon.getRelativeValue());
+				 * 
+				 * String key =
+				 * propertySelectionControl.getSelectedPropertyString();
+				 * mapCanvas.setToolTipText("Name: " + polygon.getTitle() + "\n" +
+				 * "Relative Value: " + polygon.getRelativeValue(key));
+				 */
+			} // if
+			else {
+				// No
+				setToolTipText(null);
+			}
+		} // mouseHover
+
+	} // MouseHoverHandler
+
+	/**
+	 * @param e
+	 *            a mouse event
+	 * @return the polygon the matches the position of the mouse, or
+	 *         <code>null</code> if there is no such polygon.
+	 */
+	StemPolygon getPolygon(final MouseEvent e) {
+		// Convert from canvas space coordinates to lat/long by the inverse
+		// transform.
+		//final Point latLongPosition = inverseMap(new Point(e.x, e.y));
+		final Point latLongPosition = pointsTransformer.getInversedPoint(e.x, e.y);
+		return getPolygon(latLongPosition);
+		
+	} // getPolygon
+	
+	/**
+	 * @param point a point (probably within the polygon)
+	 * @return the polygon the matches the position of the point, or
+	 *         <code>null</code> if there is no such polygon.
+	 */
+	StemPolygon getPolygon(final Point point) {
+		StemPolygon retValue = null;
+		
+		if (point != null && polygonsToRender != null) {
+			// Find the Polygon that contains the lat/long coordinates
+			retValue = polygonsToRender.getContainingRegionPolygon(point);
+		} // if
+		return retValue;
+	} // getPolygon
+
+	/**
+	 * Adds offsets to the current translation.
+	 * 
+	 * @param xTranslationAddition
+	 * @param yTranslationAddition
+	 */
+	protected void addTranslation(final double xTranslationAddition,
+			final double yTranslationAddition) {
+		this.xTranslation += (xTranslationAddition / zoomFactor);
+		this.yTranslation += (yTranslationAddition / zoomFactor);
+		toUpdateTranform = true;
+		redraw();
+	} // addTranslation
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		selectionChangedListeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		selectionChangedListeners.remove(listener);
+	}
+
+	/**
+	 * @return the selection
+	 */
+	public final ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(final ISelection selection) {
+		this.selection = selection;
+		fireSelection(selection);
+	}
+
+	void fireSelection(final ISelection selection) {
+
+		final SelectionChangedEvent event = new SelectionChangedEvent(this,
+				selection);
+		for (final ISelectionChangedListener listener : selectionChangedListeners) {
+			listener.selectionChanged(event);
+		} // for each ISelectionChangedListener
+
+	} // fireSelection
+
+	/**
+	 * @param colorProvider the colorProvider to set
+	 */
+	public void setColorProvider(ColorProviderAdapter colorProvider) {
+		this.colorProvider = colorProvider;
+	}
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {		
+		removePaintListener(this);
+		removeMouseWheelListener(this);
+		removeMouseTrackListener(mouseTrackHandler);
+		removeMouseMoveListener(this);
+		removeKeyListener(keyHandler);		
+		removeDisposeListener(this);
+		removeMouseListener(mouseButtonHandler);
+		removeMouseTrackListener(mouseHoverHandler);
+	}
+
+} // MapCanvas
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControl.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControl.java
new file mode 100644
index 0000000..c370c7a
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControl.java
@@ -0,0 +1,44 @@
+// MapControl.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.ui.views.geographic.GeographicControl;
+import org.eclipse.stem.ui.views.geographic.GeographicRenderer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a SWT {@link Composite} that displays Lat/Long data adapted
+ * from the contents of the canonical graph in a
+ * {@link org.eclipse.stem.core.scenario.Scenario} being simulated. It
+ * listens for changes in the
+ * {@link org.eclipse.stem.jobs.simulation.Simulation} and then redraws its
+ * view as appropriate.
+ */
+public class MapControl extends GeographicControl {
+
+	/**
+	 * @param parent
+	 *            the parent {@link Composite} of the <code>MapControl</code>
+	 */
+	public MapControl(final Composite parent) {
+		super(parent, SWT.NONE);
+	} // MapControl
+
+	/**
+	 * @return the {@link GeographicRenderer} to use.
+	 */
+	protected GeographicRenderer createGeographicRenderer() {
+		return new MapRenderer(this, SWT.NONE);
+	}
+} // MapControl
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControlFactory.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControlFactory.java
new file mode 100644
index 0000000..31e7b2f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapControlFactory.java
@@ -0,0 +1,33 @@
+// MapControlFactory.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+import org.eclipse.stem.ui.views.geographic.GeographicControl;
+import org.eclipse.stem.ui.views.geographic.GeographicControlFactory;
+import org.eclipse.swt.widgets.Composite;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class represents
+ */
+class MapControlFactory implements GeographicControlFactory {
+
+	static MapControlFactory INSTANCE = new MapControlFactory();
+
+	/**
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicControlFactory#create(Composite)
+	 */
+	public GeographicControl create(final Composite parent) {
+		return new MapControl(parent);
+	}
+
+} // MapControlFactory
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapRenderer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapRenderer.java
new file mode 100644
index 0000000..e71d49c
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapRenderer.java
@@ -0,0 +1,126 @@
+// MapRenderer.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapter;
+import org.eclipse.stem.ui.views.geographic.GeographicRenderer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class renders geographic data (lat/long) into a "flat map" visual
+ * representation.
+ */
+public class MapRenderer extends GeographicRenderer implements ISelectionChangedListener {
+
+	private MapCanvas mapCanvas;
+	private MenuManager menuManager;
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public MapRenderer(Composite parent, int style) {
+		super(parent, style);
+		setSize(SWT.DEFAULT, 100);
+		
+		final FillLayout layout = new FillLayout();
+		layout.marginHeight = MARGIN_HEIGHT;
+		layout.marginWidth = MARGIN_WIDTH;
+		setLayout(layout);
+
+		
+		mapCanvas = new MapCanvas(this, SWT.NONE);
+		mapCanvas.setGainFactor(gainFactor);
+		mapCanvas.setDrawPolygonBorders(drawPolygonBorders);
+//		mapCanvas.setPolygonStroke(polygonStroke);
+		mapCanvas.setColorProvider(colorProviderAdapter);
+		
+		pack();
+
+		mapCanvas.addSelectionChangedListener(this);
+
+		menuManager = createContextMenuManager();
+		mapCanvas.setMenu(menuManager.createContextMenu(this));
+	} // MapRenderer
+
+	/**
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicRenderer#render(org.eclipse.stem.ui.views.geographic.map.StemPolygonsList)
+	 */
+	@Override
+	public void render(StemPolygonsList polygonsToRender) {
+		mapCanvas.setGainFactor(this.gainFactor);
+		mapCanvas.setUseLogScaling(this.useLogScaling);
+		mapCanvas.render(polygonsToRender);
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicRenderer#reset()
+	 */
+	@Override
+	public void reset() {
+		super.reset();
+		mapCanvas.reset();
+		mapCanvas.setDrawPolygonBorders(drawPolygonBorders);
+		mapCanvas.setGainFactor(gainFactor);
+		mapCanvas.setUseLogScaling(useLogScaling);
+	} // reset
+
+	protected void toggleDrawPolygonBordersChoice() {
+		super.toggleDrawPolygonBordersChoice();
+		mapCanvas.setDrawPolygonBorders(drawPolygonBorders);
+		redraw();
+	} // toggleDrawPolygonBordersChoice
+
+	protected void toggleUseLogScaling() {
+		super.toggleUseLogScaling();
+		mapCanvas.setUseLogScaling(useLogScaling);
+	} // toggleUseLogScaling
+
+	/**
+	 * @return the MenuManager
+	 */
+	public MenuManager getMenuManager() {
+		return menuManager;
+	} // getMenuManager
+
+	/**
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicRenderer#setColorProviderAdapter(org.eclipse.stem.ui.adapters.color.ColorProviderAdapter)
+	 */
+	@Override
+	public void setColorProviderAdapter(ColorProviderAdapter colorProvider) {
+		super.setColorProviderAdapter(colorProvider);
+		mapCanvas.setColorProvider(colorProvider);
+	}
+	
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(SelectionChangedEvent event) {
+		fireSelection(event.getSelection());
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.views.geographic.GeographicRenderer#dispose()
+	 */
+	@Override
+	public void dispose() {		
+		super.dispose();
+		mapCanvas.removeSelectionChangedListener(this);
+	}
+
+} // MapRenderer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapView.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapView.java
new file mode 100644
index 0000000..64c1169
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/MapView.java
@@ -0,0 +1,112 @@
+// MapView.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.views.IContextMenuUpdatesListener;
+import org.eclipse.stem.ui.views.geographic.GeographicViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class is a {@link ViewPart} that renders Lat/Long data for active
+ * Simulations.
+ */
+public class MapView extends ViewPart implements IContextMenuUpdatesListener {
+
+	/**
+	 * The ID of the Map View.
+	 */
+	public static final String ID_MAP_VIEW = "org.eclipse.stem.ui.views.geographic.map";
+
+	/**
+	 * The viewer that displays the geographic state of the simulations.
+	 */
+	private GeographicViewer geographicViewer;
+
+	/**
+	 * Default Constructor
+	 */
+	public MapView() {
+		super();
+		// Set the values of various visualization preferences
+		setPreferences();
+
+		try {
+			// Listen for changes to the preferences and change the value we
+			// use if the user changes the value on the preference page.
+			Activator.getDefault().getPluginPreferences()
+					.addPropertyChangeListener(new IPropertyChangeListener() {
+						public void propertyChange(@SuppressWarnings("unused")
+						final PropertyChangeEvent event) {
+							setPreferences();
+						} // propertyChange
+					} // IPropertyChangeListener
+					);
+		} catch (final Exception e) {
+			// Ignore
+		} // catch Exception
+
+	} // MapView
+
+	/**
+	 * Set preferences
+	 */
+	void setPreferences() {
+		// Nothing yet
+	} // setPreferences
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+		geographicViewer = new GeographicViewer(parent,
+				MapControlFactory.INSTANCE);
+		//Set this instance to be a listener for context menu updates
+		geographicViewer.addContextMenuUpdateListener(this);
+		geographicViewer.setInput(SimulationManager.getManager());
+		getSite().setSelectionProvider(geographicViewer);
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		getSite().setSelectionProvider(null);
+		geographicViewer.removeContextMenuUpdateListener(this);
+		geographicViewer.setInput(null);		
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.ui.views.IContextMenuUpdatesListener#onContextMenuUpdate(org.eclipse.jface.action.MenuManager, org.eclipse.jface.viewers.ISelectionProvider)
+	 */
+	public void onContextMenuUpdate(MenuManager menuManager, ISelectionProvider selectionProvider) {
+		getSite().registerContextMenu("org.eclipse.stem.ui.views.geographic.map.context", menuManager, selectionProvider);
+	}
+
+} // MapView
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Messages.java
new file mode 100644
index 0000000..6d79ce3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class gets NLS values.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.views.geographic.map.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/SelectedReportsManager.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/SelectedReportsManager.java
new file mode 100644
index 0000000..727728e
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/SelectedReportsManager.java
@@ -0,0 +1,166 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+//$ANALYSIS-IGNORE
+/**
+ * The purpose of this <i>Singleton</i> class it to keep the current status of
+ * all enabled/disabled reports for the specific MapControl. Each MapControl has
+ * a context menu with a list of reports that can be generated once the user
+ * left-clicks on an area in the map. The user can disable/enable some or all of
+ * the reports using this context menu. This class keeps current status for each
+ * one of these menus.
+ */
+public class SelectedReportsManager {
+	/**
+	 * The single instance of this class
+	 */
+	private static SelectedReportsManager instance;
+	/**
+	 * List of reports IDs that has been enabled for the specific MapCanvas
+	 */
+	private final Map<MapCanvas, List<String>> enabledReportsMap = new HashMap<MapCanvas, List<String>>();
+	/**
+	 * List of reports that has been clicked before. Init state is that all
+	 * reports are enabled.
+	 */
+	private final Map<MapCanvas, List<String>> alreadySelectedReports = new HashMap<MapCanvas, List<String>>();
+	/**
+	 * The recent MapCanvas that the user clicked on with the mouse (any mouse
+	 * button)
+	 */
+	private MapCanvas recentClickedMapCanvas = null;
+
+	/**
+	 * Private constructor as it is Singleton class
+	 */
+	private SelectedReportsManager() {
+		// Do nothing
+	}
+
+	/**
+	 * The method will return the single instance of this class
+	 * 
+	 * @return The single instance of this class
+	 */
+	public static SelectedReportsManager getInstance() {
+		if (instance == null) {
+			instance = new SelectedReportsManager();
+		}
+		return instance;
+	}
+
+	/**
+	 * The method will mark the specific report as enabled.
+	 * 
+	 * @param reportID
+	 *            The report ID to be enabled
+	 */
+	public void enableReportForIdentifiable(final String reportID) {
+		List<String> enabledReports = null;
+		if (enabledReportsMap.containsKey(recentClickedMapCanvas)) {
+			enabledReports = enabledReportsMap.get(recentClickedMapCanvas);
+			enabledReportsMap.remove(recentClickedMapCanvas);
+		}
+		if (null == enabledReports) {
+			enabledReports = new ArrayList<String>();
+		}
+		enabledReports.add(reportID);
+		enabledReportsMap.put(recentClickedMapCanvas, enabledReports);
+	}
+
+	/**
+	 * The method will mark the specific report as disabled.
+	 * 
+	 * @param reportID
+	 *            The report ID to be disabled
+	 */
+	public void disableReportForIdentifiable(final String reportID) {
+		List<String> enabledReports = null;
+		if (enabledReportsMap.containsKey(recentClickedMapCanvas)) {
+			enabledReports = enabledReportsMap.get(recentClickedMapCanvas);
+			enabledReportsMap.remove(recentClickedMapCanvas);
+		}
+		if (null != enabledReports) {
+			enabledReports.remove(reportID);
+		}
+		List<String> initializedReports = alreadySelectedReports
+				.get(recentClickedMapCanvas);
+		if (initializedReports == null) {
+			initializedReports = new ArrayList<String>();
+		}
+		initializedReports.add(reportID);
+		if (alreadySelectedReports.containsKey(recentClickedMapCanvas)) {
+			alreadySelectedReports.remove(recentClickedMapCanvas);
+		}
+		alreadySelectedReports.put(recentClickedMapCanvas, initializedReports);
+	}
+
+	/**
+	 * The method will check whether the specific report is enabled or disabled
+	 * for the current MapCanvas.
+	 * 
+	 * @param reportID
+	 *            Report ID to be checked
+	 * @return <code>true</code> if the report is enabled and
+	 *         <code>false</code> if not
+	 */
+	public boolean isReportEnabled(final String reportID) {
+		final List<String> initializedReports = alreadySelectedReports
+				.get(recentClickedMapCanvas);
+		if (initializedReports == null
+				|| !initializedReports.contains(reportID)) {
+			return true;
+		}
+
+		if (!enabledReportsMap.containsKey(recentClickedMapCanvas)) {
+			return false;
+		}
+		final List<String> enabledReports = enabledReportsMap
+				.get(recentClickedMapCanvas);
+		if (enabledReports == null || !enabledReports.contains(reportID)) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Get the MapCanvas that the user clicked on
+	 * 
+	 * @return the MapCanvas that the user clicked on
+	 */
+	public MapCanvas getRecentClickedMapCanvas() {
+		return recentClickedMapCanvas;
+	}
+
+	/**
+	 * Set the MapCanvas that the user clicked on
+	 * 
+	 * @param recentClickedMapCanvas
+	 *            the MapCanvas that the user clicked on
+	 */
+	public void setRecentClickedMapCanvas(final MapCanvas recentClickedMapCanvas) {
+		this.recentClickedMapCanvas = recentClickedMapCanvas;
+	}
+
+	/**
+	 */
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		throw new CloneNotSupportedException();
+	}
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygon.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygon.java
new file mode 100644
index 0000000..b6274ef
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygon.java
@@ -0,0 +1,269 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * A sub-class of java.awt.Polygon that has an extra field saving the relative
+ * value of the polygon. The relative values could be used for intensity values
+ * of the labels.
+ */
+public class StemPolygon {
+
+	private static final int LATITUDE_DIRECTION = -1;
+
+	private static final long serialVersionUID = 1L;
+	
+	/**
+	 * This value is selected to convert lat/long values to integers with six
+	 * digits of precision extracted from the original double values.
+	 */
+	private final static int scalingFactorForData = 1000000;
+
+	/**
+	 * This is the {@link Identifiable} instance associated with the polygon.
+	 */
+	private transient Identifiable identifiable;
+	
+	/**
+	 * An array of all points (better used by SWT drawing)
+	 */
+	public int[] points = null;
+	/**
+	 * An array of all points, transformed to scale and offsets
+	 */
+	public int[] transformedPoints = null;
+	private int minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE, maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
+
+	/**
+	 * Empty constructor.
+	 * 
+	 */
+	public StemPolygon() {
+		super();
+	}
+
+	/**
+	 * Gets a list of a latLongData arrays, and transforms it into a Polygon.
+	 * 
+	 * @param latLongSegment
+	 * @param identifiable
+	 *            the {@link Identifiable} associated with the polygon.
+	 */
+	public StemPolygon(final Segment latLongSegment, final Identifiable identifiable) {
+		super();
+		this.identifiable = identifiable;
+
+		final int size = latLongSegment.size();
+		points = new int[2*size];
+
+		for (int i = 0, pointsIndex = 0; i < size; i++, pointsIndex+=2) {
+			addPoint(latLongSegment.longitude(i), latLongSegment.latitude(i), pointsIndex);
+		}
+		// }
+	} // StemPolygon
+
+//	/**
+//	 * Add latLong coordinates to a polygon.
+//	 * 
+//	 * @param latLongData
+//	 */
+//	public void addLatLongData(final LatLong latLongData) {
+//		final List<Segment> latLongSegmentsList = latLongData.getSegments();
+//
+//		for (final Segment latLongSegment : latLongSegmentsList) {
+//			if (latLongSegment.isPolygon()) {
+//				final int size = latLongSegment.size();
+//				for (int i = 0, pointsIndex = 0; i < size; i++, pointsIndex+=2) {
+//					addPoint(latLongSegment.longitude(i), latLongSegment
+//							.latitude(i), pointsIndex);
+//				}
+//			}
+//		} // for
+//	} // addLatLongData
+
+	/**
+	 * 
+	 * @param longitude
+	 *            longitude value
+	 * @param latitude
+	 *            latitude value
+	 * @param pointsIndex 
+	 */
+	private void addPoint(final double longitude, final double latitude, final int pointsIndex) {
+		int x = (int)(longitude * scalingFactorForData);
+		int y = (int)(latitude * scalingFactorForData * LATITUDE_DIRECTION);
+		points[pointsIndex] = x;
+		points[pointsIndex+1] = y;
+		
+		maxX = Math.max(x, maxX);
+		maxY = Math.max(y, maxY);
+		minX = Math.min(x, minX);
+		minY = Math.min(y, minY); 
+	} // addPoint
+	
+	/**
+	 * @param pointsTransformer the pointsTransformer to set
+	 */
+	public void setPointsTransformer(StemPolygonTransform pointsTransformer) {
+		transformedPoints = new int[getNumberOfPoints()*2];		
+		for (int i=0; i<getNumberOfPoints(); i++) {
+			int xBefore = points[2*i];
+			int yBefore = points[2*i+1];
+			int xAfter = (int) ((xBefore * pointsTransformer.getScale()) + pointsTransformer.getOffsetX());
+			int yAfter = (int)((yBefore * pointsTransformer.getScale()) + pointsTransformer.getOffsetY());
+			transformedPoints[2*i] = xAfter;
+			transformedPoints[2*i+1] = yAfter;
+		}
+	}
+
+	/**
+	 * method to unscale the value that had been scaled by the above addPoint
+	 * method.
+	 * 
+	 * @param longitude
+	 * @return unscaled value
+	 */
+	public double unScaleLongitude(final double longitude) {
+		return longitude / scalingFactorForData;
+	}
+
+	/**
+	 * method to unscale the value that had been scaled by the above addPoint
+	 * method.
+	 * 
+	 * @param latitude
+	 * @return unscaled value
+	 */
+	public double unScaleLatitude(final double latitude) {
+		return latitude / scalingFactorForData * LATITUDE_DIRECTION;
+	}
+
+	/**
+	 * Returns the title of the polygon.
+	 * 
+	 * @return String
+	 */
+	public String getTitle() {
+		return identifiable.getDublinCore().getTitle();
+	} // getTitle
+
+	/**
+	 * @return the <code>Identifiable</code>
+	 */
+	public final Identifiable getIdentifiable() {
+		return identifiable;
+	}
+
+	/**
+	 * @param identifiable
+	 *            the <code>Identifiable</code> to set
+	 */
+	public final void setIdentifiable(final Identifiable identifiable) {
+		this.identifiable = identifiable;
+	}
+	
+	/**
+	 * The method returns the smallest {@link Rectangle} that bounds of the polygon.
+	 * @return {@link Rectangle} of the bounds of the polygon
+	 */
+	public Rectangle getBounds() {
+		if (minX == Integer.MAX_VALUE && maxY == Integer.MIN_VALUE) {
+			return null;
+		}
+		Rectangle bounds = new Rectangle(minX, minY, (maxX - minX), (maxY - minY));
+		return bounds;
+	}
+	
+	/**
+	 * Returns whether the point (x,y) is contained inside this polygon. 
+	 * @param point the X and Y coordinates
+	 * @return whether the point (x,y) is contained in this polygon
+	 */
+	public boolean containsPoint(Point point) {
+		return containsPoint(point.x, point.y);
+	}
+	
+	/**
+	 * Returns whether the point (x,y) is contained inside this polygon. 
+	 * @param x The X value of the point
+	 * @param y The Y value of the point
+	 * @return whether the point (x,y) is contained in this polygon
+	 */
+	public boolean containsPoint(int x, int y) {
+		int i, j;
+		boolean isInside = false;
+		int numOfPoints = points.length / 2;
+        
+		for (i = 0, j = (numOfPoints-1)*2; i < points.length-1; ) {
+			if ((((points[i+1]<=y) && (y<points[j+1])) ||
+				((points[j+1]<=y) && (y<points[i+1]))) &&
+				(x < (points[j] -  points[i]) * (y - points[i+1]) / (points[j+1] - points[i+1]) + points[i])) {
+				isInside = !isInside;
+			}
+			j = i;
+			i += 2;			
+		}
+		return isInside;
+	}
+
+	/**
+	 * Returns the number of lat/long points that this polygon has
+	 * @return the number of lat/long points
+	 */
+	public int getNumberOfPoints() {
+		if (points == null)
+			return 0;
+		return points.length / 2;
+	}
+
+	/**
+	 * Returns the non-scaled value of the latitude of the specific point
+	 * @param i Point index
+	 * @return the non-scaled value of the latitude of the specific point
+	 */
+	public double getNonScaledLatitude(final int i) {
+		return (double)points[2*i+1] / (double)scalingFactorForData;
+	}
+
+	/**
+	 * Returns the non-scaled value of the longitude of the specific point
+	 * @param i Point index
+	 * @return the non-scaled value of the longitude of the specific point
+	 */
+	public double getNonScaledLongitude(final int i) {
+		return (double)points[2*i] / scalingFactorForData * LATITUDE_DIRECTION;
+	}
+	
+	/**
+	 * Returns the unscaled value of the provided latitude
+	 * @param latValue the scaled latitude value
+	 * @return the unscaled value of the provided latitude
+	 */
+	public static double getUnscaledLatitude(final int latValue) {
+		return (double)latValue / (double)scalingFactorForData;
+	}
+	
+	/**
+	 * Returns the unscaled value of the provided longitude
+	 * @param longValue the scaled latitude value
+	 * @return the unscaled value of the provided longitude
+	 */
+	public static double getUnscaledLongitude(final int longValue) {
+		return (double)longValue / scalingFactorForData * LATITUDE_DIRECTION;
+	}
+
+} // StemPolygon
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonTransform.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonTransform.java
new file mode 100644
index 0000000..345a908
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonTransform.java
@@ -0,0 +1,100 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.awt.Point;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+
+import org.eclipse.stem.data.geography.Activator;
+
+/**
+ * Transform class to transform points from one coordinates space to another.
+ * Offset and scale values are the values that will affect the transformation.
+ * @author Yossi Mesika (IBM)
+ */
+public class StemPolygonTransform {
+	
+	private double offsetX = 0.0d;
+	private double offsetY = 0.0d;
+	private double scale = 1.0d;
+	
+	private Point2D getInversedPoint(Point toInverse) {
+		AffineTransform transform = new AffineTransform();
+		transform.setToTranslation(offsetX, offsetY);
+		transform.scale(scale, scale);
+		Point2D toReturn = new Point2D.Double(0, 0);
+		try {
+			toReturn = transform.inverseTransform(toInverse, toReturn);
+		} catch (NoninvertibleTransformException e) {
+			Activator.logError("Problem inverting point " + toInverse, e);
+			return new Point();
+		}
+		return toReturn;
+	}
+	
+	/**
+	 * The method will return the inverted point of the specified coordinates.
+	 * I.e. it will do reversed transformation.
+	 * @param x X value of the point to be inverted
+	 * @param y Y value of the point to be inverted
+	 * @return the inverted point as an SWT {@link org.eclipse.swt.graphics.Point}
+	 */
+	public org.eclipse.swt.graphics.Point getInversedPoint(final int x, final int y) {
+		Point2D transformed = getInversedPoint(new Point(x, y));
+		return new org.eclipse.swt.graphics.Point((int)transformed.getX(), (int)transformed.getY());		
+	}
+
+	/**
+	 * @return the offsetX
+	 */
+	public double getOffsetX() {
+		return offsetX;
+	}
+
+	/**
+	 * @param offsetX the offsetX to set
+	 */
+	public void setOffsetX(double offsetX) {
+		this.offsetX = offsetX;
+	}
+
+	/**
+	 * @return the offsetY
+	 */
+	public double getOffsetY() {
+		return offsetY;
+	}
+
+	/**
+	 * @param offsetY the offsetY to set
+	 */
+	public void setOffsetY(double offsetY) {
+		this.offsetY = offsetY;
+	}
+
+	/**
+	 * @return the scale
+	 */
+	public double getScale() {
+		return scale;
+	}
+
+	/**
+	 * @param scale the scale to set
+	 */
+	public void setScale(double scale) {
+		this.scale = scale;
+	}
+	
+}
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonsList.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonsList.java
new file mode 100644
index 0000000..a1b8b44
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/StemPolygonsList.java
@@ -0,0 +1,114 @@
+package org.eclipse.stem.ui.views.geographic.map;
+
+/******************************************************************************* 
+ * Copyright (c) 2006 IBM Corporation 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: 
+ *     IBM Corporation - initial API and implementation 
+ *******************************************************************************/
+
+import java.util.LinkedList;
+
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong;
+import org.eclipse.stem.definitions.adapters.spatial.geo.LatLong.Segment;
+import org.eclipse.stem.definitions.nodes.Region;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+/**
+ * A class that extends the LinkedList<stemPolygon> class. It has some fields
+ * that help in managing the polygons list of a map, such as the offset needed
+ * to be made in order to centralize the map, the optimum values of the map
+ * coordinates, etc.
+ * 
+ */
+public class StemPolygonsList extends LinkedList<StemPolygon> {
+
+	private static final long serialVersionUID = 1L;
+
+	private transient Rectangle bounds = null;
+
+	/**
+	 * Empty Constructor
+	 * 
+	 */
+	public StemPolygonsList() {
+		super();
+	}
+
+	/**
+	 * Constructor which gets a LatLong object and constructs a list of polygons
+	 * 
+	 * @param latLongData
+	 * @param identifiable
+	 *            the <code>Identifiable</code> that is associated with the
+	 *            polygon data.
+	 */
+	public StemPolygonsList(final LatLong latLongData,
+			final Identifiable identifiable) {
+		super();
+		for (final Segment latLongSegment : latLongData.getSegments()) {
+			add(new StemPolygon(latLongSegment, identifiable));
+		}
+	} // StemPolygonsList
+
+	/**
+	 * Compare the boundaries of a polygon to those of the list and update if
+	 * necessary.
+	 * 
+	 * @param polygon
+	 *            the polygon to use to update the minimum/maximum values
+	 */
+	private void updateBounds(final StemPolygon polygon) {
+		//Only update the bounds for polygon of nodes
+		if (polygon.getIdentifiable() instanceof Edge)
+			return;
+		// Bounds yet?
+		if (bounds != null) {
+			// Yes			
+			bounds = bounds.union(polygon.getBounds());
+		} // if
+		else { 
+			bounds = polygon.getBounds();
+		}
+	} // updateBounds
+
+	/**
+	 * @return the bounding box that contains all of the polygons in the list.
+	 */
+	public final Rectangle getBounds() {
+		for (StemPolygon polygon : this) {
+			updateBounds(polygon);
+		}
+		return bounds;
+	} // getBounds
+
+	/**
+	 * @param latLongPosition
+	 *            the position contained by a polygon (or not)
+	 * @return the polygon that contains the point, or <code>null</code> if
+	 *         the point lies outside of a polygon.
+	 */
+	public StemPolygon getContainingRegionPolygon(final Point latLongPosition) {
+		StemPolygon retValue = null;
+		for (final StemPolygon polygon : this) {
+			// Does the polygon contain the point?
+			if (polygon.containsPoint(latLongPosition)) {
+				// Yes
+				//Is this polygon a region?
+				if (polygon.getIdentifiable() instanceof Region) {
+					//Yes
+					retValue = polygon;
+					break;
+				}
+			} // if
+		} // for each StemPolygon
+		return retValue;
+	} // getContainingPolygon
+} // StemPolygonsList
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/messages.properties
new file mode 100644
index 0000000..60d48c4
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/messages.properties
@@ -0,0 +1,28 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Stem Polygon
+# Nothing, all common
+
+# Internal Map View
+IMView.MRefresh = Polygon Refresh
+IMView.MProp=Now Displaying
+IMView.Edges = Edges
+
+# Map Canvas context menu messages
+MapMenu.Reset=Reset Map
+MapMenu.GainFactor=Gain Factor
+MapMenu.Logrithmic_Scaling=Logarithmic Scaling
+MapMenu.Polygon_Borders=Draw Polygon Borders
+MapMenu.Polygon_Centers=Connect Polygon Centers
+MapMenu.Reports_Select=Select Reports
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/MapViewPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/MapViewPreferencePage.java
new file mode 100644
index 0000000..79715f3
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/MapViewPreferencePage.java
@@ -0,0 +1,168 @@
+// GeographicPreferencePage.java
+package org.eclipse.stem.ui.views.geographic.map.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents the preferences for the Map view of a simulation.
+ */
+public class MapViewPreferencePage extends FieldEditorPreferencePage implements
+		IWorkbenchPreferencePage {
+
+	/**
+	 * The ID of the STEM Preference page.
+	 */
+	public static final String ID_STEM_MAP_VIEW_PAGE = "org.eclipse.stem.ui.views.geographic.map.preferences.MapViewPreferencePage";
+
+	private static final int FIELD_WIDTH = 11;
+
+	private ColorFieldEditor backgroundColorFieldEditor;
+
+	private ColorFieldEditor foregroundColorRelativeValueZeroFieldEditor;
+
+	private BooleanFieldEditor enableMultiColorDisplayFieldEditor;
+	private StringFieldEditor sFactorFieldEditor;
+	private StringFieldEditor eFactorFieldEditor;
+	private StringFieldEditor iFactorFieldEditor;
+	private StringFieldEditor rFactorFieldEditor;
+
+	private StringFieldEditor guiScalingFactorFieldEditor;
+
+	/**
+	 * Constructor
+	 */
+	public MapViewPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("MapVPPage.Viz"));
+	} // GeographicPreferencePage
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
+	 */
+	@Override
+	protected void createFieldEditors() {
+		backgroundColorFieldEditor = new ColorFieldEditor(
+				PreferenceConstants.BACKGROUND_COLOR_PREFERENCE, Messages
+						.getString("MapVPPage.bgc"), getFieldEditorParent());
+
+		foregroundColorRelativeValueZeroFieldEditor = new ColorFieldEditor(
+				PreferenceConstants.FOREGROUND_RELATIVE_VALUE_ZERO_COLOR_PREFERENCE,
+				Messages.getString("MapVPPage.fgrvzeroc"),
+				getFieldEditorParent());
+
+		enableMultiColorDisplayFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.MULTI_COLOR_DISPLAY_BOOLEAN_PREFERENCE,
+				Messages.getString("MapVPPage.multicolordisplay"),
+				getFieldEditorParent());
+
+		sFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.S_COLOR_WEIGHT_PREFERENCE, Messages
+						.getString("MapVPPage.ScolorWeight"), FIELD_WIDTH,
+				getFieldEditorParent());
+		sFactorFieldEditor.setEmptyStringAllowed(false);
+
+		eFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.E_COLOR_WEIGHT_PREFERENCE, Messages
+						.getString("MapVPPage.EcolorWeight"), FIELD_WIDTH,
+				getFieldEditorParent());
+		eFactorFieldEditor.setEmptyStringAllowed(false);
+
+		iFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.I_COLOR_WEIGHT_PREFERENCE, Messages
+						.getString("MapVPPage.IcolorWeight"), FIELD_WIDTH,
+				getFieldEditorParent());
+		iFactorFieldEditor.setEmptyStringAllowed(false);
+
+		rFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.R_COLOR_WEIGHT_PREFERENCE, Messages
+						.getString("MapVPPage.RcolorWeight"), FIELD_WIDTH,
+				getFieldEditorParent());
+		rFactorFieldEditor.setEmptyStringAllowed(false);
+
+		guiScalingFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.GUI_SCALING_FACTOR_DOUBLE_PREFERENCE,
+				Messages.getString("MapVPPage.gsf"), FIELD_WIDTH,
+				getFieldEditorParent());
+		guiScalingFactorFieldEditor.setEmptyStringAllowed(false);
+
+		addField(backgroundColorFieldEditor);
+		addField(foregroundColorRelativeValueZeroFieldEditor);
+		addField(enableMultiColorDisplayFieldEditor);
+		addField(sFactorFieldEditor);
+		addField(eFactorFieldEditor);
+		addField(iFactorFieldEditor);
+		addField(rFactorFieldEditor);
+		addField(guiScalingFactorFieldEditor);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#checkState()
+	 */
+	@Override
+	protected void checkState() {
+		super.checkState();
+
+		// TODO for some reason only the GUI scaling factor is validated on
+		// field change
+		// Check GUI Scaling factor?
+		if (isValid()) {
+			// Yes
+			// Is the GUI scale factor ok?
+			try {
+				final double factor = Double
+						.parseDouble(guiScalingFactorFieldEditor
+								.getStringValue());
+				if (factor <= 0.0) {
+					setErrorMessage(Messages.getString("GUIScale.negErr"));
+					setValid(false);
+				} // if
+			} catch (Exception e) {
+				setErrorMessage(Messages.getString("MapVPPage.numErr"));
+				setValid(false);
+			} // catch Exception
+		} // Check gui Scaling factor
+
+	} // checkState
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
+	 */
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		super.propertyChange(event);
+		if (event.getProperty().equals(FieldEditor.VALUE)) {
+			if (event.getSource() == guiScalingFactorFieldEditor) {
+				checkState();
+			} // if
+		} // if
+	} // propertyChange
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")
+	IWorkbench workbench) {
+		// Nothing
+	} // init
+
+} // GeographicPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/Messages.java
new file mode 100644
index 0000000..9450f82
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.views.geographic.map.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class gets NLS values.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.views.geographic.map.preferences.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceConstants.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..0bffe33
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceConstants.java
@@ -0,0 +1,66 @@
+// PreferenceConstants.java
+package org.eclipse.stem.ui.views.geographic.map.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public interface PreferenceConstants {
+
+	/**
+	 * The preference id for the map's background color
+	 */
+	public static final String BACKGROUND_COLOR_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.backgroundcolor";
+
+	/**
+	 * The preference id for the map's foreground color
+	 */
+	public static final String FOREGROUND_COLOR_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolor";
+
+	/**
+	 * The preference id for the map's foreground color when the relative value =
+	 * 0
+	 */
+	public static final String FOREGROUND_RELATIVE_VALUE_ZERO_COLOR_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundrelativevaluezerocolor";
+
+	/**
+	 * The preference id for the multicolor/multi-variable map display mode.
+	 */
+	public static final String MULTI_COLOR_DISPLAY_BOOLEAN_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.multicolordisplay";
+
+	/**
+	 * Multicolor Display Intensity weighting for variable S
+	 */
+	public static final String S_COLOR_WEIGHT_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.scolorweight";
+
+	/**
+	 * Multicolor Display Intensity weighting for variable E
+	 */
+	public static final String E_COLOR_WEIGHT_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.ecolorweight";
+
+	/**
+	 * Multicolor Display Intensity weighting for variable I
+	 */
+	public static final String I_COLOR_WEIGHT_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.icolorweight";
+
+	/**
+	 * Multicolor Display Intensity weighting for variable R
+	 */
+	public static final String R_COLOR_WEIGHT_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.rcolorweight";
+
+	/**
+	 * The preference id for the map's initial scaling
+	 */
+	public static final String GUI_SCALING_FACTOR_DOUBLE_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.guiscaling";
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceInitializer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..2228ba9
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/PreferenceInitializer.java
@@ -0,0 +1,72 @@
+// PreferenceInitializer.java
+package org.eclipse.stem.ui.views.geographic.map.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	@Override
+	public void initializeDefaultPreferences() {
+//		@SuppressWarnings("unused")//$NON-NLS-1$
+//		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		// store.setDefault(PreferenceConstants.BACKGROUND_COLOR_PREFERENCE,
+		// MapCanvas.DEFAULT_BACKGROUND_COLOR_RGB_STRING);
+		// store
+		// .setDefault(
+		// PreferenceConstants.FOREGROUND_RELATIVE_VALUE_ZERO_COLOR_PREFERENCE,
+		// MapCanvas.DEFAULT_ZERO_POLYGON_COLOR_RGB_STRING);
+		// store
+		// .setDefault(
+		// org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.BORDER_COLOR_PREFERENCE,
+		// MapCanvas.DEFAULT_POLYGON_BORDER_COLOR_RGB_STRING);
+
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.DRAW_POLYGON_BORDERS_BOOLEAN_PREFERENCE,
+//						MapCanvas.DEFAULT_DRAW_POLYGON_BORDERS);
+		//
+		// store.setDefault(
+		// PreferenceConstants.MULTI_COLOR_DISPLAY_BOOLEAN_PREFERENCE,
+		// MapCanvas.DEFAULT_MULTI_COLOR_MODE);
+		//
+		// store.setDefault(PreferenceConstants.S_COLOR_WEIGHT_PREFERENCE,
+		// MapCanvas.DEFAULT_S_WEIGHTING);
+		//
+		// store.setDefault(PreferenceConstants.E_COLOR_WEIGHT_PREFERENCE,
+		// MapCanvas.DEFAULT_E_WEIGHTING);
+		//
+		// store.setDefault(PreferenceConstants.I_COLOR_WEIGHT_PREFERENCE,
+		// MapCanvas.DEFAULT_I_WEIGHTING);
+		//
+		// store.setDefault(PreferenceConstants.R_COLOR_WEIGHT_PREFERENCE,
+		// MapCanvas.DEFAULT_R_WEIGHTING);
+
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.LOGSCALE_BOOLEAN_PREFERENCE,
+//						MapCanvas.DEFAULT_USE_LOGSCALING);
+//
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.GAIN_FACTOR_PREFERENCE,
+//						MapCanvas.DEFAULT_GAIN_FACTOR);
+
+	} // initializeDefaultPreferences
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/messages.properties
new file mode 100644
index 0000000..80c16d4
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/map/preferences/messages.properties
@@ -0,0 +1,38 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+MapVPPage.Viz = Map Preferences
+
+
+MapVPPage.bgc = &Background Color
+MapVPPage.fgc = &Foreground Color
+MapVPPage.fgrvzeroc = &Zero Relative Value Color
+MapVPPage.bc = &Borders Color
+MapVPPage.drawpolyborders = Draw &Polygon Borders
+MapVPPage.multicolordisplay = Enable &Multicolor Display
+MapVPPage.ScolorWeight = &S Color Weight
+MapVPPage.EcolorWeight = &E Color Weight
+MapVPPage.IcolorWeight = &I Color Weight
+MapVPPage.RcolorWeight = &R Color Weight
+MapVPPage.logscale = Use Logarithmic Scale
+MapVPPage.gainf = Gain &Factor
+MapVPPage.gsf = &GUI Scaling Factor
+MapVPPage.xt = 	Initial &X Translation
+MapVPPage.yt = 	Initial &Y Translation
+MapVPPage.zrsf = &Zoom Ruler Scaling Factor
+MapVPPage.iss = Initial &Scale Selection ({0}-{1})
+
+MapVPPage.numErr = The field is not a valid number.
+GFactor.negErr = The Gain Factor must be greater than 0.0
+GUIScale.negErr = The GUI Scaling Factor must be greater than 0.0
+ZRScale.negErr = The Zoom Ruler Scaling factor must be greater than 0.0
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/GeographicPreferencePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/GeographicPreferencePage.java
new file mode 100644
index 0000000..13890c9
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/GeographicPreferencePage.java
@@ -0,0 +1,118 @@
+// GeographicPreferencePage.java
+package org.eclipse.stem.ui.views.geographic.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.ColorFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents the preferences for the Map view of a simulation.
+ */
+public class GeographicPreferencePage extends FieldEditorPreferencePage
+		implements IWorkbenchPreferencePage {
+
+	/**
+	 * The ID of the STEM Geographic view Preference page.
+	 */
+	public static final String ID_STEM_GEOGRAPHIC_VIEW_PREFERENCE_PAGE = "org.eclipse.stem.ui.views.geographic.preferences.GeographicViewPreferencePage";
+
+	private static final int FIELD_WIDTH = 11;
+
+	private BooleanFieldEditor drawPolygonBordersFieldEditor;
+
+	private ColorFieldEditor borderColorFieldEditor;
+
+	private BooleanFieldEditor logScaleFieldEditor;
+
+	private StringFieldEditor gainFactorFieldEditor;
+
+	/**
+	 * Constructor
+	 */
+	public GeographicPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("GeoPPage.Viz"));
+	} // GeographicPreferencePage
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#createFieldEditors()
+	 */
+	@Override
+	protected void createFieldEditors() {
+
+		drawPolygonBordersFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.DRAW_POLYGON_BORDERS_BOOLEAN_PREFERENCE,
+				Messages.getString("GeoPPage.drawpolyborders"),
+				getFieldEditorParent());
+
+		borderColorFieldEditor = new ColorFieldEditor(
+				PreferenceConstants.BORDER_COLOR_PREFERENCE, Messages
+						.getString("GeoPPage.bc"), getFieldEditorParent());
+
+		logScaleFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.LOGSCALE_BOOLEAN_PREFERENCE, Messages
+						.getString("GeoPPage.logscale"), getFieldEditorParent());
+
+		gainFactorFieldEditor = new StringFieldEditor(
+				PreferenceConstants.GAIN_FACTOR_PREFERENCE, Messages
+						.getString("GeoPPage.gainf"), FIELD_WIDTH,
+				getFieldEditorParent());
+		gainFactorFieldEditor.setEmptyStringAllowed(false);
+
+		addField(drawPolygonBordersFieldEditor);
+		addField(borderColorFieldEditor);
+		addField(logScaleFieldEditor);
+		addField(gainFactorFieldEditor);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#checkState()
+	 */
+	@Override
+	protected void checkState() {
+		super.checkState();
+
+		// Check Gain factor?
+		if (isValid()) {
+			// Yes
+			// Is the Gain factor ok?
+			try {
+				final double factor = Double.parseDouble(gainFactorFieldEditor
+						.getStringValue());
+				if (factor <= 0.0) {
+					setErrorMessage(Messages.getString("GFactor.negErr"));
+					setValid(false);
+				} // if
+			} catch (Exception e) {
+				setErrorMessage(Messages.getString("GeoPPage.numErr"));
+				setValid(false);
+			} // catch Exception
+		} // Check gui Scaling factor
+
+	} // checkState
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")
+	IWorkbench workbench) {
+		// Nothing
+	} // init
+
+} // GeographicPreferencePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/Messages.java
new file mode 100644
index 0000000..7f0ccef
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.ui.views.geographic.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class gets NLS values.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.ui.views.geographic.preferences.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceConstants.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..fe66266
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceConstants.java
@@ -0,0 +1,38 @@
+// PreferenceConstants.java
+package org.eclipse.stem.ui.views.geographic.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public interface PreferenceConstants {
+
+	/**
+	 * The preference id for the drawing polygon borders.
+	 */
+	public static final String DRAW_POLYGON_BORDERS_BOOLEAN_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.polygonborders";
+	/**
+	 * The preference id for using a logarithmic scale of the values in the
+	 * display.
+	 */
+	public static final String LOGSCALE_BOOLEAN_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.logscale";
+	/**
+	 * The preference id for the map gain factor
+	 */
+	public static final String GAIN_FACTOR_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.gainfactor";
+	/**
+	 * The preference id for the map's border color
+	 */
+	public static final String BORDER_COLOR_PREFERENCE = "org.eclipse.stem.ui.views.geographic.map.preferences.bordercolor";
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceInitializer.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..0c2a4ed
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/PreferenceInitializer.java
@@ -0,0 +1,54 @@
+// PreferenceInitializer.java
+package org.eclipse.stem.ui.views.geographic.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+//import org.eclipse.jface.preference.IPreferenceStore;
+//import org.eclipse.stem.ui.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+//		@SuppressWarnings("unused")//$NON-NLS-1$
+//		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+//		store.setDefault(PreferenceConstants.BACKGROUND_COLOR_PREFERENCE,
+//				MapCanvas.DEFAULT_BACKGROUND_COLOR_RGB_STRING);
+//
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.BORDER_COLOR_PREFERENCE,
+//						MapCanvas.DEFAULT_POLYGON_BORDER_COLOR_RGB_STRING);
+//
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.DRAW_POLYGON_BORDERS_BOOLEAN_PREFERENCE,
+//						MapCanvas.DEFAULT_DRAW_POLYGON_BORDERS);
+//
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.LOGSCALE_BOOLEAN_PREFERENCE,
+//						MapCanvas.DEFAULT_USE_LOGSCALING);
+//
+//		store
+//				.setDefault(
+//						org.eclipse.stem.ui.views.geographic.preferences.PreferenceConstants.GAIN_FACTOR_PREFERENCE,
+//						MapCanvas.DEFAULT_GAIN_FACTOR);
+
+	} // initializeDefaultPreferences
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/messages.properties
new file mode 100644
index 0000000..82fd4a5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/geographic/preferences/messages.properties
@@ -0,0 +1,23 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+GeoPPage.Viz = Geographic Visualization Preferences
+
+
+GeoPPage.bc = &Borders Color
+GeoPPage.drawpolyborders = Draw &Polygon Borders
+GeoPPage.logscale = Use Logarithmic Scale
+GeoPPage.gainf = Gain &Factor
+
+GeoPPage.numErr = The field is not a valid number.
+GFactor.negErr = The Gain Factor must be greater than 0.0
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/messages.properties
new file mode 100644
index 0000000..221f470
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/views/messages.properties
@@ -0,0 +1,44 @@
+# ViewsMessages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Identifiable Plugin View
+IPView.No_Category=Category \"{0}\" does not exist.  Using \"/\" instead.
+IPView.Unexpected_Element=Unexpected element \"{0}\" found for extension point \"{1}\"
+
+# Simulation Control View
+SCView.Run=Run
+
+SCView.Pause=Pause
+SCView.Reset=Reset
+SCView.Step=Step
+SCView.Stop=Stop
+
+# Simulation Control
+# The strings with ":" should have the ":" extracted DAF
+SCtrl.Running=Status : Running
+SCtrl.Reset=Status : Reset
+SCtrl.Paused=Status : Paused
+SCtrl.Time=Time
+SCtrl.Progress=Progress
+SCtrl.StartSim=Start the simulation
+SCtrl.PauseSim=Pause the simulation
+SCtrl.RestoreSim=Restore the simulation to its starting state
+SCtrl.StepSim=Advance the simulation by one time step
+SCtrl.StopSim=Stop the simulation
+SCtrl.VisualizeSim=Show on MapViewer
+
+# STEM Project Explorer
+STEMPEx.CD_Title=Confirm Delete
+STEMPEx.CD=Are you sure you want to delete "
+STEMPEx.CD_Prob=Problem deleting "
+STEMPEx.ReFresh_Prob=Problem refreshing "
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/ColorProviderPropertiesComposite.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/ColorProviderPropertiesComposite.java
new file mode 100644
index 0000000..0ee6801
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/ColorProviderPropertiesComposite.java
@@ -0,0 +1,475 @@
+// ColorProviderPropertiesComposite.java
+package org.eclipse.stem.ui.widgets;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a compound SWT {@link org.eclipse.swt.widgets.Widget} that allows for the selection of
+ * a properties of a {@link Decorator}.
+ */
+public class ColorProviderPropertiesComposite extends Composite {
+
+	/**
+	 * A list of {@link PropertySelectionListener}s to be notified about
+	 * property selection events
+	 */
+	private final List<PropertySelectionListener> propertySelectionListeners = new CopyOnWriteArrayList<PropertySelectionListener>();
+	/**
+	 * The initial property name to be selected when the composite is being
+	 * initialized
+	 */
+	private String initialPropertyName;
+	/**
+	 * The {@link Combo} of available properties
+	 */
+	Combo propertiesCombo;
+	/**
+	 * The properties
+	 */
+	List<ItemPropertyDescriptor> properties;
+	/**
+	 * The selected property
+	 */
+	ItemPropertyDescriptor selectedProperty;
+
+	// /**
+	// * The selected decorator
+	// */
+	// Decorator selectedDecorator;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 *            the parent {@link Composite}
+	 * @param style
+	 *            an SWT style
+	 */
+	public ColorProviderPropertiesComposite(final Composite parent,
+			final int style) {
+		super(parent, style);
+		final FormLayout retValueLayout = new FormLayout();
+		this.setLayout(retValueLayout);
+
+		// Combo Box of the Decorator Properties
+		propertiesCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY
+				| SWT.CENTER);
+
+		final FormData propertiesComboFormData = new FormData();
+		propertiesComboFormData.top = new FormAttachment(0, 0);
+		propertiesComboFormData.left = new FormAttachment(0, 0);
+		propertiesComboFormData.right = new FormAttachment(100, 0);
+		propertiesCombo.setLayoutData(propertiesComboFormData);
+		propertiesCombo.setEnabled(false);
+
+		this.pack();
+
+		propertiesCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				// Any Decorator properties?
+				if (!properties.isEmpty()) {
+					// Yes
+					// Is it different?
+					final ItemPropertyDescriptor temp = properties
+							.get(propertiesCombo.getSelectionIndex());
+					if (selectedProperty != temp) {
+						// Yes
+						selectedProperty = temp;
+						notifyPropertySelection(selectedProperty);
+					} // if
+				} // if
+			} // widgetSelected
+		} // SelectionAdapter
+				);
+	} // ColorProviderPropertiesComposite
+
+	/**
+	 * Notify listeners about a property that has been selected
+	 * 
+	 * @param selectedProperty
+	 *            the selected property
+	 */
+	void notifyPropertySelection(final ItemPropertyDescriptor selectedProperty) {
+		// Is there a property?
+		if (selectedProperty != null) {
+			// Yes
+			firePropertySelectionEvent(new PropertySelectionEvent(
+					selectedProperty, this));
+		} // if
+	} // notifyPropertySelection
+
+	/**
+	 * Return a list of {@link ItemPropertyDescriptor}s for the specific
+	 * {@link Decorator}.
+	 * 
+	 * @param decorator
+	 *            a {@link Decorator} that modifies the state of the canonical
+	 *            {@link org.eclipse.stem.core.graph.Graph} in the
+	 *            {@link org.eclipse.stem.jobs.simulation.Simulation}.
+	 * @return a {@link List} of the properties of the {@link Decorator} that
+	 *         can be displayed.
+	 */
+	List<ItemPropertyDescriptor> getPropertiesToDisplay(
+			final Decorator decorator) {
+		final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+		// Got Decorator?
+		if (decorator != null) {
+			// Yes
+			// Are there any labels to update?
+			if (!decorator.getLabelsToUpdate().isEmpty()) {
+				// Yes
+				// The first one is good enough
+				retValue.addAll(propertySieve.sieve(decorator
+						.getLabelsToUpdate().get(0)));
+			} // if labels to update
+		} // if got decorator
+		return retValue;
+	} // getPropertiesToDisplay
+
+	/**
+	 * Returns the default selected {@link ItemPropertyDescriptor}.
+	 * 
+	 * @return the property of the decorator that should be the one to be
+	 *         displayed or <code>null</code> if decoratorProperties is empty
+	 */
+	public ItemPropertyDescriptor getDefaultSelectedProperty() {
+		// Look for a property with a name that matches the one specified in
+		// the preferences.
+		for (final ItemPropertyDescriptor property : properties) {
+			// name match?
+			if (property.getDisplayName(property).equals(initialPropertyName)) {
+				// Yes
+				return property;
+			} // if
+		} // for each ItemPropertyDescriptor
+		// Didn't find a match, just use the first one.
+		// Any to use?
+		if (!properties.isEmpty()) {
+			// Yes
+			return properties.get(0);
+		} // if
+		return null;
+	} // selectCurrentDecoratorProperty
+
+	/**
+	 * Initializes the {@link Composite} with the specific {@link Decorator}.
+	 * 
+	 * @param decorator
+	 *            the {@link Decorator} to initialize with
+	 */
+	public void initialize(final Decorator decorator) {
+		properties = getPropertiesToDisplay(decorator);
+		selectedProperty = getDefaultSelectedProperty();
+		final boolean comboIsEnabled = (decorator != null ? true : false);
+		initializeCombo(this.propertiesCombo, getPropertyNames(properties),
+				getPropertyIndex(selectedProperty, properties), comboIsEnabled);
+
+		// notifyPropertySelection(selectedProperty);
+		ColorProviderPropertiesComposite.this
+				.notifyPropertySelection(selectedProperty);
+	} // initialize
+
+	/**
+	 * Initializes the properties {@link Combo} box
+	 * 
+	 * @param combo
+	 *            the properties {@link Combo}
+	 * @param names
+	 *            the values to be added to the {@link Combo}
+	 * @param selectionIndex
+	 *            index of the selected item
+	 * @param isEnabled
+	 *            is the {@link Combo} enabled/disabled
+	 */
+	void initializeCombo(final Combo combo, final String[] names,
+			final int selectionIndex, final boolean isEnabled) {
+		combo.setItems(names);
+		combo.select(selectionIndex);
+		propertiesCombo.setEnabled(isEnabled);
+	} // initializeCombo
+
+	/**
+	 * Get the properties names.
+	 * 
+	 * @param properties
+	 *            a list of {@link Decorator} properties.
+	 * @return the names of the properties.
+	 */
+	String[] getPropertyNames(final List<ItemPropertyDescriptor> properties) {
+		final List<String> retValue = new ArrayList<String>();
+		if (properties != null) {
+			// Yes
+			for (final ItemPropertyDescriptor property : properties) {
+				retValue.add(property.getDisplayName(property));
+			} // for each ItemPropertyDescriptor
+		} // if
+		return retValue.toArray(new String[] {});
+	} // getPropertyNames
+
+	/**
+	 * Get the index of the selected property.
+	 * 
+	 * @param selectedDecoratorProperty
+	 *            the selected property
+	 * @param decoratorProperties
+	 *            the list of all properties
+	 * @return the index of the selectedDecoratorProperty in the
+	 *         decoratorProperites list, or 0 if selectedDecoratorProperty is
+	 *         <code>null</code>
+	 */
+	int getPropertyIndex(
+			final ItemPropertyDescriptor selectedDecoratorProperty,
+			final List<ItemPropertyDescriptor> decoratorProperties) {
+		if (selectedDecoratorProperty != null) {
+			// Yes
+			return decoratorProperties.indexOf(selectedDecoratorProperty);
+		} // if
+		return 0;
+	} // getPropertyIndex
+
+	/**
+	 * Add a {@link PropertySelectionListener} to the list of listeners.
+	 * 
+	 * @param listener
+	 *            the {@link PropertySelectionListener} to be added
+	 */
+	public void addPropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.add(listener);
+	} // addPropertySelectionListener
+
+	/**
+	 * Remove the {@link PropertySelectionListener} from the list of listeners.
+	 * 
+	 * @param listener
+	 *            the {@link PropertySelectionListener} to be removed
+	 */
+	public void removePropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.remove(listener);
+	} // removePropertySelectionListener
+
+	/**
+	 * Notify {@link PropertySelectionListener}s about a
+	 * {@link PropertySelectionEvent}.
+	 * 
+	 * @param pse
+	 *            the event to notify about
+	 */
+	private void firePropertySelectionEvent(final PropertySelectionEvent pse) {
+		for (final PropertySelectionListener listener : propertySelectionListeners) {
+			listener.propertySelected(pse);
+		} // for each PropertySelectionListener
+	} // firePropertySelectionEvent
+
+	/**
+	 * This interface is implemented by classes that wish to be notified
+	 * whenever a property is selected in this widget.
+	 */
+	public interface PropertySelectionListener {
+		/**
+		 * @param propertySelectionEvent
+		 */
+		void propertySelected(PropertySelectionEvent propertySelectionEvent);
+	} // PropertySelectionListener
+
+	/**
+	 * This class represents the event of a property being selected in the
+	 * {@link Widget}.
+	 */
+	public static class PropertySelectionEvent extends EventObject {
+		private static final long serialVersionUID = 1L;
+		//$ANALYSIS-IGNORE
+		private transient final ItemPropertyDescriptor property;
+
+		/**
+		 * @param property
+		 *            the property that was selected.
+		 * @param source
+		 */
+		public PropertySelectionEvent(final ItemPropertyDescriptor property,
+				final Object source) {
+			super(source);
+			this.property = property;
+		}
+
+		/**
+		 * @return the property
+		 */
+		public final ItemPropertyDescriptor getProperty() {
+			return property;
+		}
+
+		/**
+		 * @see java.util.EventObject#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder();
+			sb.append(property == null ? "null" : property
+					.getDisplayName(property));
+			return sb.toString();
+		}
+	} // PropertySelectionEvent
+
+	// /**
+	// * This method may be used to initialize a properties combo to display
+	// * (select) a particular property
+	// *
+	// * @param preferredProperty
+	// * the name of the property to display.
+	// * @return <code>true</code> if the preferredProperty was found,
+	// * <code>false</code> otherwise.
+	// */
+	// public boolean setDisplayedProperty(final String preferredProperty) {
+	// final int index = propertiesCombo.indexOf(preferredProperty);
+	// if (index >= 0) {
+	// propertiesCombo.select(index);
+	// initialPropertyName = preferredProperty;
+	// properties = getPropertiesToDisplay(selectedDecorator);
+	// for (final ItemPropertyDescriptor property : properties) {
+	// // name match?
+	// if (property.getDisplayName(property).equals(
+	// initialPropertyName)) {
+	// // Yes
+	// selectedProperty = property;
+	// break;
+	// } // if
+	// } // for each ItemPropertyDescriptor
+	// firePropertySelectionEvent(new PropertySelectionEvent(selectedProperty,
+	// propertiesCombo));
+	// return true;
+	// }// if selector has items
+	// return false;
+	// }// setDisplayedPropperty()
+	//	
+	// public void setSelectedDecorator(final Decorator decorator) {
+	// this.selectedDecorator = decorator;
+	// properties = getPropertiesToDisplay(selectedDecorator);
+	// selectedProperty = selectCurrentDecoratorProperty(properties);
+	//
+	// initializeCombo(propertiesCombo,
+	// getPropertyNames(properties), getPropertyIndex(
+	// selectedProperty, properties), true);
+	//
+	// ColorProviderPropertiesComposite.this.notifyPropertySelection(selectedProperty);
+	// }
+	//	
+	// /**
+	// * This interface is implemented by classes that determine if a
+	// * {@link Decorator} meets some specified criteria.
+	// */
+	// public interface DecoratorFilter {
+	// /**
+	// * @param decorator
+	// * @return <code>true</code> if the {@link Decorator} is acceptable.
+	// */
+	// boolean accept(final Decorator decorator);
+	// } // DecoratorFilter
+	//
+	/**
+	 * This interface is implemented by classes that select out the properties
+	 * to be displayed.
+	 */
+	public interface PropertySieve {
+		/**
+		 * @param dynamicLabel
+		 *            the label that contains the candidate properties to be
+		 *            displayed.
+		 * @return a <code>List</code> of the properties that should be
+		 *         displayed in the order that they should be displayed.
+		 */
+		List<ItemPropertyDescriptor> sieve(final DynamicLabel dynamicLabel);
+	} // PropertySieve
+
+	/**
+	 * @param propertySieve
+	 *            the sieve that selects the properties of a {@link Decorator}
+	 *            that should be displayed.
+	 */
+	public void setPropertySieve(final PropertySieve propertySieve) {
+		this.propertySieve = propertySieve;
+	} // setPropertySieve
+
+	/**
+	 * The default sieve selects those properties that have relative values.
+	 */
+	private PropertySieve propertySieve = new PropertySieve() {
+		/**
+		 * @see ColorProviderPropertiesComposite.PropertySieve#sieve(org.eclipse.stem.core.graph.DynamicLabel)
+		 */
+		public List<ItemPropertyDescriptor> sieve(
+				final DynamicLabel dynamicLabel) {
+			final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dynamicLabel, RelativeValueProvider.class);
+
+			// Does the label have relative values?
+			if (rvp != null) {
+				// Yes
+				rvp.setTarget(dynamicLabel);
+
+				for (final Object element : rvp.getProperties()) {
+					final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+					retValue.add(property);
+				} // for each property
+			} // if the label has relative values
+			return retValue;
+		} // sieve
+	};
+
+	/**
+	 * The method returns the initial property to be selected
+	 * @return the initialPropertyName
+	 */
+	public String getInitialPropertyName() {
+		return initialPropertyName;
+	} // getInitialPropertyName
+
+	/**
+	 * The method sets the initial property to be selected
+	 * @param initialPropertyName the initialPropertyName to set
+	 */
+	public void setInitialPropertyName(String initialPropertyName) {
+		this.initialPropertyName = initialPropertyName;
+	} // setInitialPropertyName
+
+	/**
+	 * @return the selectedProperty
+	 */
+	public ItemPropertyDescriptor getSelectedProperty() {
+		return selectedProperty;
+	}
+
+} // ColorProviderPropertiesComposite
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/GeoViewOptionsBar.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/GeoViewOptionsBar.java
new file mode 100644
index 0000000..2c9d3e0
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/GeoViewOptionsBar.java
@@ -0,0 +1,642 @@
+// GeoViewOptionsBar.java
+package org.eclipse.stem.ui.widgets;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.adapters.color.ColorProviderAdapterFactory;
+import org.eclipse.stem.ui.adapters.color.IColorProviderAdapterFactory;
+import org.eclipse.stem.ui.adapters.color.IColorProviderChangedListener;
+import org.eclipse.stem.ui.views.geographic.map.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+/**
+ * This class is a compound SWT {@link org.eclipse.swt.widgets.Widget} that allows for the selection of
+ * a {@link Decorator}s and {@link org.eclipse.stem.ui.adapters.color.ColorProvider}s.
+ */
+public class GeoViewOptionsBar extends Composite {
+
+	/**
+	 * A list of {@link PropertySelectionListener}s to be notified about
+	 * property selection events
+	 */
+	private final List<PropertySelectionListener> selectionListeners = new CopyOnWriteArrayList<PropertySelectionListener>();
+	/**
+	 * The collection of {@link IColorProviderChangedListener} waiting to be told change of a color provider.
+	 */
+	protected final List<IColorProviderChangedListener> colorProviderChangedListeners = new CopyOnWriteArrayList<IColorProviderChangedListener>();
+	/**
+	 * Combo for selecting decorators
+	 */
+	Combo decoratorsCombo;
+	/**
+	 * Combo for selecting the color provider
+	 */
+	Combo colorProvidersCombo;
+	
+	/**
+	 * A constant to set the width of the decorators combo
+	 */
+	static final int DECORATORS_WIDTH = 55;
+	
+	/**
+	 * A constant to set the width of the color providers combo
+	 */
+	static final int PROVIDERS_WIDTH  = 65;
+	
+	/**
+	 * Combo for selecting edges
+	 */
+	Combo edgesCombo;
+	/**
+	 * The composite that the selected color provider contributed
+	 */
+	Composite colorProviderComposite;
+	/**
+	 * The composite with the colors legend (provided by the selected color
+	 * provider)
+	 */
+	Composite colorsLegendComposite;
+	/**
+	 * The group composite that gathers the widgets
+	 */
+	Group geoViewOptionsGroup;
+	/**
+	 * The group composite that gathers the widgets
+	 */
+	Group edgesGroup;	
+	/**
+	 * List of available decorators
+	 */
+	List<Decorator> decorators;
+	/**
+	 * List of available color providers
+	 */
+	List<Class> supportedColorProviders = null;
+	/**
+	 * List of available color providers names
+	 */
+	List<String> supportedColorProvidersNames = null;
+	/**
+	 * Mapping between edge type and its URI prefix
+	 */
+	Map<String, String> edgeTypeToUriPrefixMap = new HashMap<String, String>();
+	/**
+	 * The selected color provider
+	 */
+	Class selectedColorProvider = null;
+	/**
+	 * The selected decorator
+	 */
+	Decorator selectedDecorator;
+	/**
+	 * Decorator filter to be used
+	 */
+	private DecoratorFilter decoratorFilter = new DecoratorFilter() {
+		/**
+		 * Currently only accepts decorators that are able to provide a relative value
+		 * TODO: Fix so we can view other types of decorators
+		 * 
+		 * @see GeoViewOptionsBar.DecoratorFilter#accept(org.eclipse.stem.core.model.Decorator)
+		 */
+		public boolean accept(
+				final Decorator decorator) {
+			
+			EList<DynamicLabel>labels = decorator.getLabelsToUpdate();
+			if(labels == null) return false;
+			for(DynamicLabel l:labels) {
+				RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+				.adapt(l, RelativeValueProvider.class);
+				if(rvp != null) return true;
+			}
+	
+			return false;
+		}
+	};
+
+	/**
+	 * Constructor
+	 * 
+	 * @param parent
+	 *            the parent {@link Composite}
+	 * @param style
+	 *            an SWT style
+	 */
+	public GeoViewOptionsBar(final Composite parent, final int style) {
+		super(parent, style);
+
+		final RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
+		rowLayout.fill = true;
+		this.setLayout(rowLayout);
+
+		geoViewOptionsGroup = new Group(this, SWT.NONE);
+		final FormLayout formLayout = new FormLayout();
+		geoViewOptionsGroup.setLayout(formLayout);
+
+		// //$NON-NLS-1$ //$NON-NLS-2$
+		geoViewOptionsGroup.setText(Messages.getString("IMView.MProp"));
+		geoViewOptionsGroup.setVisible(false);
+
+		// Combo Box of Decorators
+		decoratorsCombo = new Combo(geoViewOptionsGroup, SWT.DROP_DOWN
+				| SWT.READ_ONLY | SWT.CENTER);
+
+		// Combo Box of the color providers
+		colorProvidersCombo = new Combo(geoViewOptionsGroup, SWT.DROP_DOWN
+				| SWT.READ_ONLY | SWT.CENTER);
+
+
+		final FormData decoratorsComboFormData = new FormData();
+		decoratorsComboFormData.left = new FormAttachment(0, 0);
+		decoratorsComboFormData.right = new FormAttachment(DECORATORS_WIDTH, 0);
+		decoratorsCombo.setLayoutData(decoratorsComboFormData);
+				
+		final FormData colorProvidersComboFormData = new FormData();
+		colorProvidersComboFormData.top = new FormAttachment(decoratorsCombo, 5);
+		colorProvidersComboFormData.left = new FormAttachment(0, 0);
+		colorProvidersComboFormData.right = new FormAttachment(PROVIDERS_WIDTH, 0);
+		colorProvidersCombo.setLayoutData(colorProvidersComboFormData);
+			
+		supportedColorProviders = ColorProviderAdapterFactory.INSTANCE.getSupportedColorProviders();
+		supportedColorProvidersNames = ColorProviderAdapterFactory.INSTANCE.getSupportedColorProvidersNames();
+
+		this.pack();
+
+		decoratorsCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				// Any decorators?
+				if (!decorators.isEmpty()) {
+					// Yes
+					final Decorator tempDecorator = decorators
+							.get(decoratorsCombo.getSelectionIndex());
+					// Was there a change in selected Decorators?
+					if (selectedDecorator != tempDecorator) {
+						// Yes
+						selectedDecorator = tempDecorator;
+						updateColorProviderComposites();
+						firePropertySelectionEvent(new PropertySelectionEvent(
+								selectedDecorator, null, colorProvidersCombo));
+					} // if Decorators changed
+
+				} // if any decorators
+			}
+		} // SelectionAdapter
+				);
+
+		colorProvidersCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				selectedColorProvider = 
+					supportedColorProviders.get(colorProvidersCombo.getSelectionIndex());
+				updateColorProviderComposites();
+			}
+		} // SelectionAdapter
+				);
+		
+		edgesGroup = new Group(this, SWT.NONE);
+		edgesCombo = new Combo(edgesGroup, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.CENTER);
+		edgesCombo.add("");		
+		edgesGroup.setLayout(new FormLayout());
+		edgesGroup.setVisible(false);
+		edgesGroup.setText(Messages.getString("IMView.Edges"));
+		
+		edgesCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				String selectedEdges = edgesCombo.getText();
+				if (selectedEdges == null || selectedEdges.equals("")) {
+					firePropertySelectionEvent(null);
+				}
+				else {
+					String edgePrefix = edgeTypeToUriPrefixMap.get(selectedEdges);
+					firePropertySelectionEvent(new PropertySelectionEvent(null,
+							null, edgePrefix));
+				}
+			}
+		} // SelectionAdapter
+				);
+
+		setSimulation(null);
+	} // PropertySelector
+
+	/**
+	 * @return <code>true</code> if the control has been initialized.
+	 */
+	public boolean isInitialized() {
+		return !(decorators == null || decorators.isEmpty());
+	} // isInitialized
+
+	/**
+	 * Sets the {@link Decorator}s
+	 * 
+	 * @param decorators
+	 *            {@link Decorator}s to set
+	 */
+	public void setDecorators(final List<Decorator> decorators) {
+		this.decorators = decorators;
+		selectedDecorator = decorators.isEmpty() ? null : decorators.get(0);
+		
+		// If we have BOTH a population decorator and a disease decorator
+		// try to initially select the disease by default
+		if ((decorators!=null)&&(decorators.size()>=2)) {
+			if(!(selectedDecorator instanceof DiseaseModel)) {
+				for(int i = 0; i < decorators.size(); i ++) {
+					if(decorators.get(i) instanceof DiseaseModel) {
+						selectedDecorator = decorators.get(i);
+						break;
+					}
+				}
+			}
+		}
+
+		initializeCombo(decoratorsCombo, getDecoratorNames(decorators),
+				getDecoratorIndex(selectedDecorator, decorators));
+	} // setDecorators
+
+	/**
+	 * @param decorators
+	 */
+	public void setColorProviders(final List<Decorator> decorators) {
+		
+		if (supportedColorProviders.isEmpty()) {
+			//No color providers available
+			return;
+		}
+		
+		for (String providerName : supportedColorProvidersNames) {
+			colorProvidersCombo.add(providerName);
+		}
+		colorProvidersCombo.select(0);
+		selectedColorProvider = supportedColorProviders.get(0);
+
+		updateColorProviderComposites();
+	}
+	
+	private void setEdges() {
+		if (selectedDecorator == null)
+			return;
+		
+		Set<URI> edgesURIs = selectedDecorator.getGraph().getEdges().keySet();
+		Iterator<URI> iter = edgesURIs.iterator();
+		while(iter.hasNext()) {
+			URI nextUri = iter.next();
+			String edgePrefix = nextUri.trimSegments(1).toString();
+			String edgeType = org.eclipse.stem.ui.preferences.Messages.getString(edgePrefix);
+			if (edgeType.startsWith("!") && edgeType.endsWith("!")) {
+				edgePrefix = nextUri.trimSegments(2).toString();
+				edgeType = org.eclipse.stem.ui.preferences.Messages.getString(edgePrefix);
+			}
+			
+			if (!edgeTypeToUriPrefixMap.containsKey(edgeType)) {
+				edgeTypeToUriPrefixMap.put(edgeType, edgePrefix);
+				edgesCombo.add(edgeType);
+			}
+		}
+	}
+
+	/**
+	 * Initialize the control from a {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 */
+	public void setSimulation(final ISimulation simulation) {
+		if (simulation == null)
+			return;
+		
+		setDecorators(getDecoratorsToDisplay(simulation));
+		if(decorators != null) {
+			setColorProviders(decorators);
+			geoViewOptionsGroup.setVisible(true);
+			setEdges();
+			edgesGroup.setVisible(true);
+			getInformation(simulation);
+		}
+	} // setSimulation
+
+	/**
+	 * @param decoratorFilter
+	 *            the filter that determines which {@link Decorator}s will be
+	 *            displayed.
+	 */
+	public void setDecoratorFilter(final DecoratorFilter decoratorFilter) {
+		this.decoratorFilter = decoratorFilter;
+	} // setDecoratorFilter
+
+	/**
+	 * 
+	 */
+	protected void updateColorProviderComposites() {
+		if (colorProviderComposite != null) {
+			colorProviderComposite.dispose();
+		}
+		if (colorsLegendComposite != null) {
+			colorsLegendComposite.dispose();
+		}
+		AdapterFactory adapterFactory = ColorProviderAdapterFactory.INSTANCE.getFactoryForType(selectedColorProvider);
+		if (adapterFactory instanceof IColorProviderAdapterFactory) {
+			IColorProviderAdapterFactory selectedColorProviderAdapterFactory = (IColorProviderAdapterFactory)adapterFactory;
+			
+			colorProviderComposite = selectedColorProviderAdapterFactory
+					.createPropertiesComposite(geoViewOptionsGroup, SWT.NONE, selectedDecorator);
+			// if there is no composite contribution from the selected color
+			// provider then return
+			if (colorProviderComposite == null) {
+				return;
+			}
+			if (colorProviderComposite instanceof ColorProviderPropertiesComposite) {
+				((ColorProviderPropertiesComposite) colorProviderComposite)
+						.addPropertySelectionListener(new ColorProviderPropertiesComposite.PropertySelectionListener() {
+							public void propertySelected(
+									final ColorProviderPropertiesComposite.PropertySelectionEvent propertySelectionEvent) {
+								firePropertySelectionEvent(new PropertySelectionEvent(
+										null, null, propertySelectionEvent
+												.getSource()));
+							}
+						});
+			}
+
+			final FormData colorProviderCompositeFormData = new FormData();
+			colorProviderCompositeFormData.top = new FormAttachment(0,0);
+			colorProviderCompositeFormData.left = new FormAttachment(DECORATORS_WIDTH, 0);
+			colorProviderCompositeFormData.right = new FormAttachment(PROVIDERS_WIDTH, 0);
+			colorProviderComposite.setLayoutData(colorProviderCompositeFormData);
+			
+			geoViewOptionsGroup.layout();
+			
+			colorsLegendComposite = selectedColorProviderAdapterFactory
+					.createColorsLegendComposite(this, SWT.NONE);
+			if (colorsLegendComposite != null) {
+				colorsLegendComposite.pack();
+				colorsLegendComposite.layout();
+			}
+			
+			this.layout();
+		}
+		
+		fireColorProviderChangedEvent();
+	}
+
+	/**
+	 * @param simulation
+	 *            the simulation that contains {@link Decorator}s
+	 * @return a {@link List} of the {@link Decorator}s whose properties
+	 */
+	private List<Decorator> getDecoratorsToDisplay(final ISimulation simulation) {
+		final List<Decorator> retValue = new ArrayList<Decorator>();
+
+		// Got Simulation?
+		if (simulation != null) {
+			// Yes
+			final Graph canonicalGraph = simulation.getScenario()
+					.getCanonicalGraph();
+			// Is the canonicalGraph initialized yet?
+			if (canonicalGraph != null) {
+				// Yes
+				// Go through the Decorators keeping the ones that the filter
+				// says are ok.
+				for (final Object element : canonicalGraph.getDecorators()) {
+					final Decorator decorator = (Decorator) element;
+					// Acceptable?
+					if (decoratorFilter.accept(decorator)) {
+						retValue.add(decorator);
+					} // if has a title
+				} // for each decorator
+			} // if got graph
+		} // if got simulation
+		return retValue;
+	} // getDecoratorsToDisplay
+
+	/**
+	 * @param simulation
+	 *            the simulation that contains {@link Decorator}s
+	 */
+	private void getInformation(final ISimulation simulation) {
+		// Got Simulation?
+		if (simulation != null) {
+			// Yes
+			final Graph canonicalGraph = simulation.getScenario()
+					.getCanonicalGraph();
+			// Is the canonicalGraph initialized yet?
+			if (canonicalGraph != null) {
+				canonicalGraph.getGraphLabels();
+				canonicalGraph
+						.getNodeLabelsByTypeURI(URI
+								.createURI("stemtype://org.eclipse.stem/label/population"));
+			} // if got graph
+		} // if got simulation
+	} // getDecoratorsToDisplay
+
+	/**
+	 * @param combo
+	 * @param names
+	 * @param selectionIndex
+	 */
+	private void initializeCombo(final Combo combo, final String[] names,
+			final int selectionIndex) {
+		combo.setItems(names);
+		combo.select(selectionIndex);
+	} // initializeCombo
+
+	/**
+	 * @param decorators
+	 *            a list of {@link Decorator}s
+	 * @return an array of the names of the {@link Decorators}.
+	 */
+	private String[] getDecoratorNames(final List<Decorator> decorators) {
+		final List<String> retValue = new ArrayList<String>();
+		if (decorators != null) {
+			// Yes
+			for (final Decorator decorator : decorators) {
+				String title = decorator.getDublinCore().getTitle();
+				title = title == null ? "null" : title;
+				retValue.add(title);
+			} // for each decorator
+		} // if
+		return retValue.toArray(new String[] {});
+	} // getDecoratorNames
+
+	/**
+	 * @param selectedDecorator
+	 * @param decorators
+	 *            a list of {@link Decorator}s.
+	 * @return the position (0 origin) of the selectedDecorator in decorators,
+	 *         or 0, if the decorators list is empty.
+	 */
+	private int getDecoratorIndex(final Decorator selectedDecorator,
+			final List<Decorator> decorators) {
+		if (selectedDecorator != null && decorators != null
+				&& !decorators.isEmpty()) {
+			// Yes
+			return decorators.indexOf(selectedDecorator);
+		} // if
+		return 0;
+	} // getDecoratorIndex
+
+	/**
+	 * @param listener
+	 */
+	public void addPropertySelectionListener(
+			final PropertySelectionListener listener) {
+		selectionListeners.add(listener);
+	}
+	
+	/**
+	 * @param listener
+	 */
+	public void removePropertySelectionListener(
+			final PropertySelectionListener listener) {
+		selectionListeners.remove(listener);
+	}
+
+	protected void firePropertySelectionEvent(final PropertySelectionEvent pse) {
+		for (final PropertySelectionListener listener : selectionListeners) {
+			listener.propertySelected(pse);
+		} // for each PropertySelectionListener
+	} // firePropertySelectionEvent
+	
+	/**
+	 * @param listener
+	 */
+	public void addColorProviderChangedListener(
+			final IColorProviderChangedListener listener) {
+		colorProviderChangedListeners.add(listener);
+	}
+	
+	/**
+	 * @param listener
+	 */
+	public void removeColorProviderChangedListener(
+			final IColorProviderChangedListener listener) {
+		colorProviderChangedListeners.remove(listener);
+	}
+
+	protected void fireColorProviderChangedEvent() {
+		for (final IColorProviderChangedListener listener : colorProviderChangedListeners) {
+			listener.colorProviderChanged(selectedColorProvider);
+		} // for each PropertySelectionListener
+	} // firePropertySelectionEvent
+
+	/**
+	 * This interface is implemented by classes that determine if a
+	 * {@link Decorator} meets some specified criteria.
+	 */
+	public interface DecoratorFilter {
+		/**
+		 * @param decorator
+		 * @return <code>true</code> if the {@link Decorator} is acceptable.
+		 */
+		boolean accept(final Decorator decorator);
+	} // DecoratorFilter
+
+	/**
+	 * This interface is implemented by classes that wish to be notified
+	 * whenever a property is selected in this widget.
+	 */
+	public interface PropertySelectionListener {
+		/**
+		 * @param propertySelectionEvent
+		 */
+		void propertySelected(PropertySelectionEvent propertySelectionEvent);
+	} // PropertySelectionListener
+
+	/**
+	 * This class represents the event of a property being selected in the
+	 * widget.
+	 */
+	public static class PropertySelectionEvent extends EventObject {
+		private static final long serialVersionUID = 1L;
+		private transient final ItemPropertyDescriptor property;
+		private transient final Decorator decorator;
+
+		/**
+		 * @param decorator
+		 *            the {@link Decorator}
+		 * @param property
+		 *            the property that was selected.
+		 * @param source
+		 */
+		public PropertySelectionEvent(final Decorator decorator,
+				final ItemPropertyDescriptor property, final Object source) {
+			super(source);
+			this.decorator = decorator;
+			this.property = property;
+		}
+
+		/**
+		 * @return the decorator
+		 */
+		public final Decorator getDecorator() {
+			return decorator;
+		}
+
+		/**
+		 * @return the property
+		 */
+		public final ItemPropertyDescriptor getProperty() {
+			return property;
+		}
+
+		/**
+		 * @see java.util.EventObject#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder(
+					decorator == null ? "null," : decorator.getDublinCore()
+							.getTitle());
+			sb.append(property == null ? "null" : property
+					.getDisplayName(property));
+			return sb.toString();
+		}
+	} // PropertySelectionEvent
+
+	/**
+	 * @return the selectedDecorator
+	 */
+	public Decorator getSelectedDecorator() {
+		return selectedDecorator;
+	}
+} // PropertySelector
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/PropertySelector.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/PropertySelector.java
new file mode 100644
index 0000000..755bc56
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/widgets/PropertySelector.java
@@ -0,0 +1,623 @@
+// PropertySelector.java
+package org.eclipse.stem.ui.widgets;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.ui.views.geographic.map.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class is a compound SWT widget that allows for the selection of a
+ * property or properties of one or more {@link Decorator}s.
+ */
+public class PropertySelector extends Composite {
+
+	private final List<PropertySelectionListener> propertySelectionListeners = new CopyOnWriteArrayList<PropertySelectionListener>();
+
+	private ISimulation simulation = null;
+
+	/**
+	 * This is the name of the property that should be displayed first (if
+	 * possible).
+	 * 
+	 * @see #setPreferences()
+	 */
+	private String initialPropertyName;
+
+	private final Label displayLabel;
+
+	Combo decoratorsCombo;
+
+	Combo propertiesCombo;
+
+	List<Decorator> decorators;
+
+	Decorator selectedDecorator;
+
+	List<ItemPropertyDescriptor> properties;
+
+	ItemPropertyDescriptor selectedProperty;
+	private DecoratorFilter decoratorFilter = new DecoratorFilter() {
+		/**
+		 * @see org.eclipse.stem.ui.widgets.PropertySelector.DecoratorFilter#accept(org.eclipse.stem.core.model.Decorator)
+		 */
+		public boolean accept(@SuppressWarnings("unused")
+		Decorator decorator) {
+			return true;
+		}
+	};
+
+	/**
+	 * The default sieve selects those properties that have relative values.
+	 */
+	private PropertySieve propertySieve = new PropertySieve() {
+		/**
+		 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySieve#sieve(org.eclipse.stem.core.graph.DynamicLabel)
+		 */
+		public List<ItemPropertyDescriptor> sieve(DynamicLabel dynamicLabel) {
+			final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dynamicLabel, RelativeValueProvider.class);
+
+			// Does the label have relative values?
+			if (rvp != null) {
+				// Yes
+				rvp.setTarget(dynamicLabel);
+
+				for (final Object element : rvp.getProperties()) {
+					final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+					retValue.add(property);
+				} // for each property
+			} // if the label has relative values
+			return retValue;
+		} // sieve
+	};
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public PropertySelector(final Composite parent, final int style, boolean allowPropertySelection) {
+		super(parent, style);
+		final FormLayout retValueLayout = new FormLayout();
+		this.setLayout(retValueLayout);
+
+		displayLabel = new Label(this, SWT.CENTER);
+		displayLabel.setText(Messages.getString("IMView.MProp") + " :"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Combo Box of Decorators
+		decoratorsCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY
+				| SWT.CENTER);
+
+		// Combo Box of the Decorator Properties
+		propertiesCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY
+				| SWT.CENTER);
+
+		final FormData decoratorsComboFormData = new FormData();
+		decoratorsComboFormData.top = new FormAttachment(displayLabel, 0);
+		decoratorsComboFormData.left = new FormAttachment(0, 0);
+		decoratorsComboFormData.right = new FormAttachment(100, 0);
+		decoratorsCombo.setLayoutData(decoratorsComboFormData);
+
+		final FormData propertiesComboFormData = new FormData();
+		propertiesComboFormData.top = new FormAttachment(decoratorsCombo, 0);
+		propertiesComboFormData.left = new FormAttachment(0, 0);
+		propertiesComboFormData.right = new FormAttachment(100, 0);
+		propertiesCombo.setLayoutData(propertiesComboFormData);
+
+		this.pack();
+
+		decoratorsCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				// Any decorators?
+				if (!decorators.isEmpty()) {
+					// Yes
+					final Decorator tempDecorator = decorators
+							.get(decoratorsCombo.getSelectionIndex());
+					// Was there a change in selected Decorators?
+					if (selectedDecorator != tempDecorator) {
+						// Yes
+						selectedDecorator = tempDecorator;
+						properties = getPropertiesToDisplay(selectedDecorator);
+						selectedProperty = selectCurrentDecoratorProperty(properties);
+
+						initializeCombo(propertiesCombo,
+								getPropertyNames(properties), getPropertyIndex(
+										selectedProperty, properties));
+
+						PropertySelector.this
+								.notifyPropertySelection(selectedProperty);
+					} // if Decorators changed
+
+				} // if any decorators
+			}
+		} // SelectionAdapter
+		);
+
+		propertiesCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				// Any Decorator properties?
+				if (!properties.isEmpty()) {
+					// Yes
+					// Is it different?
+					final ItemPropertyDescriptor temp = properties
+							.get(propertiesCombo.getSelectionIndex());
+					if (selectedProperty != temp) {
+						// Yes
+						selectedProperty = temp;
+						PropertySelector.this
+								.notifyPropertySelection(selectedProperty);
+					} // if
+
+				} // if
+			} // widgetSelected
+
+		} // SelectionAdapter
+				);
+		if(!allowPropertySelection)propertiesCombo.setEnabled(false);
+		setSimulation(null);
+	} // PropertySelector
+
+	void notifyPropertySelection(final ItemPropertyDescriptor selectedProperty) {
+		// Is there a property?
+		if (selectedProperty != null) {
+			// Yes
+			firePropertySelectionEvent(new PropertySelectionEvent(
+					selectedDecorator, selectedProperty, this));
+		} // if
+	} // notifyPropertySelection
+
+	/**
+	 * @return <code>true</code> if the control has been initialized.
+	 */
+	public boolean isInitialized() {
+		return !(decorators == null || decorators.isEmpty());
+	} // isInitialized
+
+	/**
+	 * @param decorators
+	 */
+	public void setDecorators(final List<Decorator> decorators) {
+		this.decorators = decorators;
+		selectedDecorator = decorators.isEmpty() ? null : decorators.get(0);
+		properties = getPropertiesToDisplay(selectedDecorator);
+		selectedProperty = selectCurrentDecoratorProperty(properties);
+
+		initializeCombo(decoratorsCombo, getDecoratorNames(decorators),
+				getDecoratorIndex(selectedDecorator, decorators));
+
+		initializeCombo(propertiesCombo, getPropertyNames(properties),
+				getPropertyIndex(selectedProperty, properties));
+
+		notifyPropertySelection(selectedProperty);
+	} // setDecorators
+
+	/**
+	 * Initialize the control from a
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 */
+	public void setSimulation(final ISimulation simulation) {
+		this.simulation = simulation;
+		setDecorators(getDecoratorsToDisplay(simulation));
+	} // setSimulation
+
+	/**
+	 * @return the simulation
+	 */
+	public final ISimulation getSimulation() {
+		return simulation;
+	}
+
+	/**
+	 * @param decoratorFilter
+	 *            the filter that determines which {@link Decorator}s will be
+	 *            displayed.
+	 */
+	public void setDecoratorFilter(final DecoratorFilter decoratorFilter) {
+		this.decoratorFilter = decoratorFilter;
+	} // setDecoratorFilter
+
+	/**
+	 * @param propertySieve
+	 *            the sieve that selects the properties of a {@link Decorator}
+	 *            that should be displayed.
+	 */
+	public void setPropertySieve(final PropertySieve propertySieve) {
+		this.propertySieve = propertySieve;
+	} // setPropertySieve
+
+	/**
+	 * @param simulation
+	 *            the simulation that contains {@link Decorator}s
+	 * @return a {@link List} of the {@link Decorator}s whose properties
+	 */
+	private List<Decorator> getDecoratorsToDisplay(final ISimulation simulation) {
+		final List<Decorator> retValue = new ArrayList<Decorator>();
+
+		// Got Simulation?
+		if (simulation != null) {
+			// Yes
+			final Graph canonicalGraph = simulation.getScenario()
+					.getCanonicalGraph();
+			// Is the canonicalGraph initialized yet?
+			if (canonicalGraph != null) {
+				// Yes
+				// Go through the Decorators keeping the ones that the filter
+				// says are ok.
+				for (final Object element : canonicalGraph.getDecorators()) {
+					final Decorator decorator = (Decorator) element;
+					// Acceptable?
+					if (decoratorFilter.accept(decorator)) {
+						retValue.add(decorator);
+					} // if has a title
+				} // for each decorator
+			} // if got graph
+		} // if got simulation
+		return retValue;
+	} // getDecoratorsToDisplay
+
+	/**
+	 * @param decorator
+	 *            a {@link Decorator} that modifies the state of the canonical
+	 *            {@link Graph} in the
+	 *            {@link org.eclipse.stem.jobs.simulation.Simulation}.
+	 * @param simulation
+	 *            the {@link org.eclipse.stem.jobs.simulation.Simulation}
+	 * @return a {@link List} of the properties of the {@link Decorator} that
+	 *         can should be displayed.
+	 */
+	List<ItemPropertyDescriptor> getPropertiesToDisplay(
+			final Decorator decorator) {
+		final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+		// Got Decorator?
+		if (decorator != null) {
+			// Yes
+			// Are there any labels to update?
+			if (!decorator.getLabelsToUpdate().isEmpty()) {
+				// Yes
+				// The first one is good enough
+				retValue.addAll(propertySieve.sieve(decorator
+						.getLabelsToUpdate().get(0)));
+			} // if labels to update
+		} // if got decorator
+		return retValue;
+	} // getPropertiesToDisplay
+
+	// /**
+	// * @param decorators
+	// * the {@link Decorators} in the simulation that whose state
+	// * values can be visualized.
+	// * @return one of the {@link Decorators}
+	// */
+	// private Decorator selectCurrentDecorator(final List<Decorator>
+	// decorators) {
+	// return decorators.get(0);
+	// } // selectCurrentDecorator
+
+	/**
+	 * @param decoratorProperties
+	 *            a list of properties
+	 * @return the property of the decorator that should be the one to be
+	 *         displayed or <code>null</code> if decoratorProperties is empty
+	 */
+	ItemPropertyDescriptor selectCurrentDecoratorProperty(
+			final List<ItemPropertyDescriptor> decoratorProperties) {
+		// Look for a property with a name that matches the one specified in
+		// the preferences.
+		for (final ItemPropertyDescriptor property : decoratorProperties) {
+			// name match?
+			if (property.getDisplayName(property).equals(initialPropertyName)) {
+				// Yes
+				return property;
+			} // if
+		} // for each ItemPropertyDescriptor
+		// Didn't find a match, just use the first one.
+		// Any to use?
+		if (!decoratorProperties.isEmpty()) {
+			// Yes
+			return decoratorProperties.get(0);
+		} // if
+		return null;
+	} // selectCurrentDecoratorProperty
+
+	/**
+	 * @return the {@link Decorator} selected in the control, or
+	 *         <code>null</code> if one is not currently selected.
+	 */
+	// public Decorator getSelectedDecorator() {
+	// return selectedDecorator;
+	// } // getSelectedDecorator
+	//
+	// /**
+	// * @return the {@link ItemPropertyDescriptor} selected in the control, or
+	// * <code>null</code> if one is not currently selected.
+	// */
+	// public ItemPropertyDescriptor getSelectedProperty() {
+	// return selectedDecoratorProperty;
+	// } // getSelectedProperty
+	//
+	// /**
+	// * @return a display name of the selected property. This is the key to the
+	// * selected relative Value
+	// *
+	// */
+	// public String getSelectedPropertyString() {
+	// String retVal = "no property selected";
+	// if (selectedDecoratorProperty != null) {
+	// retVal = selectedDecoratorProperty
+	// .getDisplayName(selectedDecoratorProperty);
+	// }
+	// return retVal;
+	// } // getSelectedProperty
+	/**
+	 * @param combo
+	 * @param names
+	 * @param selectionIndex
+	 */
+	void initializeCombo(final Combo combo, final String[] names,
+			final int selectionIndex) {
+		combo.setItems(names);
+		combo.select(selectionIndex);
+	} // initializeCombo
+
+	/**
+	 * @param decorators
+	 *            a list of {@link Decorator}s
+	 * @return an array of the names of the {@link Decorators}.
+	 */
+	private String[] getDecoratorNames(final List<Decorator> decorators) {
+		final List<String> retValue = new ArrayList<String>();
+		if (decorators != null) {
+			// Yes
+			for (final Decorator decorator : decorators) {
+				retValue.add(decorator.getDublinCore().getTitle());
+			} // for each decorator
+		} // if
+		return retValue.toArray(new String[] {});
+	} // getDecoratorNames
+
+	/**
+	 * @param selectedDecorator
+	 * @param decorators
+	 *            a list of {@link Decorator}s.
+	 * @return the position (0 origin) of the selectedDecorator in decorators,
+	 *         or 0, if the decorators list is empty.
+	 */
+	private int getDecoratorIndex(final Decorator selectedDecorator,
+			final List<Decorator> decorators) {
+		if (selectedDecorator != null && decorators != null
+				&& !decorators.isEmpty()) {
+			// Yes
+			return decorators.indexOf(selectedDecorator);
+		} // if
+		return 0;
+	} // getDecoratorIndex
+
+	/**
+	 * @param properties
+	 *            a list of {@link Decorator} properties.
+	 * @return the names of the properties.
+	 */
+	String[] getPropertyNames(final List<ItemPropertyDescriptor> properties) {
+		final List<String> retValue = new ArrayList<String>();
+		if (properties != null) {
+			// Yes
+			for (final ItemPropertyDescriptor property : properties) {
+				retValue.add(property.getDisplayName(property));
+			} // for each ItemPropertyDescriptor
+		} // if
+		return retValue.toArray(new String[] {});
+	} // getPropertyNames
+
+	/**
+	 * @param selectedDecoratorProperty
+	 * @param decoratorProperties
+	 * @return the index of the selectedDecoratorProperty in the
+	 *         decoratorProperites list, or 0 if selectedDecoratorProperty is
+	 *         <code>null</code>
+	 */
+	int getPropertyIndex(
+			final ItemPropertyDescriptor selectedDecoratorProperty,
+			final List<ItemPropertyDescriptor> decoratorProperties) {
+		if (selectedDecoratorProperty != null) {
+			// Yes
+			return decoratorProperties.indexOf(selectedDecoratorProperty);
+		} // if
+		return 0;
+	} // getPropertyIndex
+
+	/**
+	 * This method may be used to initialize a properties combo to display
+	 * (select) a particular property
+	 * 
+	 * @param preferredProperty
+	 *            the name of the property to display.
+	 * @return <code>true</code> if the preferredProperty was found,
+	 *         <code>false</code> otherwise.
+	 */
+	public boolean setDisplayedProperty(final String preferredProperty) {
+		final int index = propertiesCombo.indexOf(preferredProperty);
+		if (index >= 0) {
+			propertiesCombo.select(index);
+			initialPropertyName = preferredProperty;
+			properties = getPropertiesToDisplay(selectedDecorator);
+			for (final ItemPropertyDescriptor property : properties) {
+				// name match?
+				if (property.getDisplayName(property).equals(
+						initialPropertyName)) {
+					// Yes
+					selectedProperty = property;
+					break;
+				} // if
+			} // for each ItemPropertyDescriptor
+			firePropertySelectionEvent(new PropertySelectionEvent(
+					selectedDecorator, selectedProperty, propertiesCombo));
+			return true;
+		}// if selector has items
+		return false;
+	}// setDisplayedPropperty()
+
+	/**
+	 * @param listener
+	 */
+	public void addPropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.add(listener);
+	}
+
+	/**
+	 * @param listener
+	 */
+	public void removePropertySelectionListener(
+			final PropertySelectionListener listener) {
+		propertySelectionListeners.remove(listener);
+	}
+
+	private void firePropertySelectionEvent(final PropertySelectionEvent pse) {
+		for (final PropertySelectionListener listener : propertySelectionListeners) {
+			listener.propertySelected(pse);
+		} // for each PropertySelectionListener
+	} // firePropertySelectionEvent
+
+	/**
+	 * This interface is implemented by classes that determine if a
+	 * {@link Decorator} meets some specified criteria.
+	 */
+	public interface DecoratorFilter {
+		/**
+		 * @param decorator
+		 * @return <code>true</code> if the {@link Decorator} is acceptable.
+		 */
+		boolean accept(final Decorator decorator);
+	} // DecoratorFilter
+
+	/**
+	 * This interface is implemented by classes that select out the properties
+	 * to be displayed.
+	 */
+	public interface PropertySieve {
+		/**
+		 * @param dynamicLabel
+		 *            the label that contains the candidate properties to be
+		 *            displayed.
+		 * @return a <code>List</code> of the properties that should be
+		 *         displayed in the order that they should be displayed.
+		 */
+		List<ItemPropertyDescriptor> sieve(final DynamicLabel dynamicLabel);
+	} // PropertySieve
+
+	/**
+	 * This interface is implemented by classes that wish to be notified
+	 * whenever a property is selected in this widget.
+	 */
+	public interface PropertySelectionListener {
+		/**
+		 * @param propertySelectionEvent
+		 */
+		void propertySelected(PropertySelectionEvent propertySelectionEvent);
+	} // PropertySelectionListener
+
+	/**
+	 * This class represents the event of a property being selected in the
+	 * widget.
+	 */
+	public static class PropertySelectionEvent extends EventObject {
+		private static final long serialVersionUID = 1L;
+		private transient final ItemPropertyDescriptor property;
+		private transient final Decorator decorator;
+
+		/**
+		 * @param decorator
+		 *            the {@link Decorator}
+		 * @param property
+		 *            the property that was selected.
+		 * @param source
+		 */
+		public PropertySelectionEvent(final Decorator decorator,
+				final ItemPropertyDescriptor property, final Object source) {
+			super(source);
+			this.decorator = decorator;
+			this.property = property;
+		}
+
+		/**
+		 * @return the decorator
+		 */
+		public final Decorator getDecorator() {
+			return decorator;
+		}
+
+		/**
+		 * @return the property
+		 */
+		public final ItemPropertyDescriptor getProperty() {
+			return property;
+		}
+
+		/**
+		 * @see java.util.EventObject#toString()
+		 */
+		@Override
+		public String toString() {
+			final StringBuilder sb = new StringBuilder(
+					decorator == null ? "null," : decorator.getDublinCore()
+							.getTitle());
+			sb.append(property == null ? "null" : property
+					.getDisplayName(property));
+			return sb.toString();
+		}
+	} // PropertySelectionEvent
+
+	/**
+	 * @return the display label
+	 */
+	public String getDisplayLabel() {
+		return displayLabel.getText();
+	}
+
+	/**
+	 * @param displayLabel
+	 *            the label to display above the property selector
+	 */
+	public void setDisplayLabel(final String displayLabel) {
+		this.displayLabel.setText(displayLabel);
+	}
+
+} // PropertySelector
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/DublinCorePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/DublinCorePage.java
new file mode 100644
index 0000000..4e59446
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/DublinCorePage.java
@@ -0,0 +1,568 @@
+// DublinCorePage.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.core.common.CommonFactory;
+import org.eclipse.stem.core.common.DublinCore;
+import org.eclipse.stem.core.common.impl.DublinCoreImpl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is the {@link WizardPage} that all {@link NewIdentifiableWizard}s
+ * use to specify the details of a {@link DublinCore} instance. Each
+ * {@link NewIdentifiableWizard} contains a {@link NewIdentifiablePage} and one
+ * of these pages.
+ * 
+ * @see NewIdentifiablePage
+ * @see NewIdentifiableWizard
+ */
+public class DublinCorePage extends WizardPage {
+
+	/**
+	 * This is the character displayed next to attribute names for those
+	 * attributes that are required. It is applied to the attribute name in
+	 * #createDCAttribute(Composite, String, String, boolean, boolean) if the
+	 * appropriate flag is <code>true</code>.
+	 */
+	private static final String REQUIRED_FIELD_CHAR = "*"; //$NON-NLS-1$
+
+	/**
+	 * This {@link ModifyListener} is attached to those attributes whose
+	 * contents need to be verified for correctness. Whenever one of those
+	 * attributes changes, a call to {@link #validateDublinCorePage()} is made
+	 * which then returns <code>true</code> or <code>false</code>. This
+	 * value is passed to {@link #setPageComplete(boolean)} which then enables
+	 * or disables the buttons at the bottom of the {@link DublinCorePage}. The
+	 * attachment is done in the method
+	 * {@link #createDCAttribute(Composite, String, String, boolean, boolean)}
+	 * if the appropriate flag is <code>true</code>.
+	 */
+	private final ModifyListener dcValidator = new ModifyListener() {
+		public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+			setPageComplete(validateDublinCorePage());
+		}
+	};
+
+	/**
+	 * Required, Validated
+	 * 
+	 * @see DublinCore#getTitle()
+	 * @see #REQUIRED_FIELD_CHAR
+	 * @see #dcValidator
+	 * @see #validateDublinCorePage()
+	 */
+	protected Text title;
+
+	/**
+	 * @see DublinCore#getDescription()
+	 */
+	protected Text description;
+
+	/**
+	 * @see DublinCore#getCreator()
+	 */
+	protected Text creator;
+
+	/**
+	 * Validated
+	 * 
+	 * @see DublinCore#getDate()
+	 * @see #dcValidator
+	 * @see #validateDublinCorePage()
+	 */
+	protected Text date;
+
+	/**
+	 * Required
+	 * 
+	 * @see DublinCore#getFormat()
+	 * @see #REQUIRED_FIELD_CHAR
+	 */
+	protected Text format;
+
+	/**
+	 * @see DublinCore#getPublisher()
+	 */
+	protected Text publisher;
+
+	/**
+	 * @see DublinCore#getCoverage()
+	 */
+	protected Text coverage;
+
+	/**
+	 * @see DublinCore#getContributor()
+	 */
+	protected Text contributor;
+
+	/**
+	 * @see DublinCore#getRelation()
+	 */
+	protected Text relation;
+
+	/**
+	 * @see DublinCore#getRights()
+	 */
+	protected Text rights;
+
+	/**
+	 * @see DublinCore#getSource()
+	 */
+	protected Text source;
+
+	/**
+	 * @see DublinCore#getSubject()
+	 */
+	protected Text subject;
+
+	/**
+	 * Required
+	 * 
+	 * @see DublinCore#getType()
+	 * @see #REQUIRED_FIELD_CHAR
+	 */
+	protected Text type;
+
+	/**
+	 * @see DublinCore#getLanguage()
+	 */
+	protected Text language;
+
+	/**
+	 * @see DublinCore#getBibliographicCitation()
+	 */
+	protected Text bibliographicCitation;
+
+	/**
+	 * Validated
+	 * 
+	 * @see DublinCore#getCreated()
+	 * @see #dcValidator
+	 * @see #validateDublinCorePage()
+	 */
+	protected Text created;
+
+	/**
+	 * @see DublinCore#getLicense()
+	 */
+	protected Text license;
+
+	/**
+	 * @see DublinCore#getRequired()
+	 */
+	protected Text required;
+
+	/**
+	 * @see DublinCore#getSpatial()
+	 */
+	protected Text spatial;
+
+	/**
+	 * Validated
+	 * 
+	 * @see DublinCore#getValid()
+	 * @see #dcValidator
+	 * @see #validateDublinCorePage()
+	 */
+	protected Text valid;
+
+	/**
+	 * Default Constructor
+	 */
+	protected DublinCorePage() {
+		super(Messages.getString("NDublinCore.page_title")); //$NON-NLS-1$
+		setTitle(Messages.getString("NDublinCore.page_title")); //$NON-NLS-1$
+		setDescription(Messages.getString("NDublinCore.page_description")); //$NON-NLS-1$
+	} // DublinCorePage
+
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(final Composite parent) {
+		// Creates a {@link Composite} and calls {@link
+		// #setControl(org.eclipse.swt.widgets.Control)}
+
+		// Page Composite
+		final Composite pageComposite = new Composite(parent, SWT.None);
+		final GridLayout pageCompositeLayout = new GridLayout();
+		pageCompositeLayout.verticalSpacing = 12;
+		pageCompositeLayout.numColumns = 2;
+		pageCompositeLayout.marginHeight = 0;
+		pageCompositeLayout.marginWidth = 0;
+		pageComposite.setLayout(pageCompositeLayout);
+
+		final GridData pageCompositeLayoutData = new GridData();
+		pageCompositeLayoutData.grabExcessVerticalSpace = true;
+		pageCompositeLayoutData.verticalAlignment = GridData.FILL;
+		pageCompositeLayoutData.horizontalAlignment = GridData.FILL;
+		pageCompositeLayoutData.horizontalSpan = 1;
+		pageComposite.setLayoutData(pageCompositeLayoutData);
+
+		title = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.title"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.titleDesc"), //$NON-NLS-1$
+				true, true);
+		description = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.desc"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.descDesc"), //$NON-NLS-1$
+				false, false);
+		creator = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.creator"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.creatorDesc"), //$NON-NLS-1$
+				false, false);
+		date = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.date"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.dateDesc"), //$NON-NLS-1$
+				false, true);
+		valid = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.valid"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.validDesc"), //$NON-NLS-1$
+				false, true);
+		created = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.created"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.createdDesc"), //$NON-NLS-1$
+				false, true);
+		source = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.source"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.sourceDesc"), //$NON-NLS-1$
+				false, false);
+
+		publisher = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.publisher"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.publisherDesc"), //$NON-NLS-1$
+				false, false);
+		coverage = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.coverage"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.coverageDesc"), //$NON-NLS-1$
+				false, false);
+		contributor = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.contributor"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.contributorDesc"), //$NON-NLS-1$
+				false, false);
+		relation = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.relation"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.relationDesc"), false, //$NON-NLS-1$
+				false);
+		rights = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.rights"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.rightsDesc"), //$NON-NLS-1$
+				false, false);
+
+		subject = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.subject"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.subjectDesc"), //$NON-NLS-1$
+				false, false);
+		language = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.language"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.languageDesc"), //$NON-NLS-1$
+				false, false);
+		bibliographicCitation = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.citation"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.citationDesc"), false, false); //$NON-NLS-1$
+
+		license = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.license"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.licensDesc"), //$NON-NLS-1$
+				false, false);
+		required = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.required"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.requiredDesc"), //$NON-NLS-1$
+				false, false);
+		spatial = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.spatial"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.spatialDesc"), //$NON-NLS-1$
+				false, false);
+
+		format = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.format"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.formatDesc"), //$NON-NLS-1$
+				true, false);
+		type = createDCAttribute(pageComposite, Messages
+				.getString("NDublinCore.type"), //$NON-NLS-1$
+				Messages.getString("NDublinCore.typeDesc"), //$NON-NLS-1$
+				true, false);
+
+		final Label requiredFieldLabel = new Label(pageComposite, SWT.NONE);
+		requiredFieldLabel.setText(REQUIRED_FIELD_CHAR
+				+ Messages.getString("NDublinCore.requiredField")); //$NON-NLS-1$
+		final GridData requiredLabelLayoutData = new GridData();
+		requiredLabelLayoutData.horizontalSpan = 2;
+		requiredFieldLabel.setLayoutData(requiredLabelLayoutData);
+
+		initializeDCAttributes();
+
+		setPageComplete(validateDublinCorePage());
+		setControl(pageComposite);
+	} // createControl
+
+	/**
+	 * Set the {@link #created} attribute to have the current date string and
+	 * the {@link #creator} to be the value of the "user.name" system property.
+	 */
+	protected void initializeDCAttributes() {
+		created.setText(DublinCoreImpl.createISO8601DateString(Calendar
+				.getInstance().getTime()));
+		creator.setText(System.getProperty("user.name")); //$NON-NLS-1$
+	} // initializeDCFields
+
+	/**
+	 * @param attributeName
+	 *            the name of the {@link DublinCore} attribute that will be seen
+	 *            by the user.
+	 * @param toolTip
+	 *            the tool tip text for the attribute
+	 * @param requiredField
+	 *            if <code>true</code> then the attribute is visually marked
+	 *            with the {@link #REQUIRED_FIELD_CHAR} as being "required"
+	 * @param validatingField
+	 *            if <code>true</code> the value of the attribute is examined
+	 *            by {@link #validateDublinCorePage()} to validate the page
+	 * @return a labeled text attribute
+	 */
+	private Text createDCAttribute(final Composite parent,
+			final String attributeName, final String toolTip,
+			final boolean requiredField, final boolean validatingField) {
+		final Label attributeLabel = new Label(parent, SWT.NONE);
+		attributeLabel.setText(attributeName + ":" //$NON-NLS-1$
+				+ (requiredField ? REQUIRED_FIELD_CHAR : "")); //$NON-NLS-1$
+		final GridData labelLayoutData = new GridData();
+		labelLayoutData.horizontalSpan = 1;
+		attributeLabel.setLayoutData(labelLayoutData);
+
+		final Text retValue = new Text(parent, SWT.BORDER);
+		retValue.setToolTipText(toolTip);
+		final GridData layoutData = new GridData();
+		layoutData.horizontalAlignment = GridData.FILL;
+		layoutData.grabExcessHorizontalSpace = true;
+		labelLayoutData.horizontalSpan = 1;
+		retValue.setLayoutData(layoutData);
+
+		// Is this attribute to be watched for validity?
+		if (validatingField) {
+			// Yes
+			retValue.addModifyListener(dcValidator);
+		}
+
+		return retValue;
+	} // createDCAttribute
+
+	/**
+	 * @return <code>true</code> if the values of the attributes of the
+	 *         {@link DublinCorePage} are valid.
+	 */
+	protected boolean validateDublinCorePage() {
+		boolean retValue = true;
+
+		setErrorMessage(null);
+
+		// Is there a title?
+		if (title.getText() == null || title.getText().equals("")) { //$NON-NLS-1$
+			setErrorMessage(Messages.getString("NDublinCore.titleErr")); //$NON-NLS-1$
+			retValue = false;
+		} // if title
+
+		// Is there a created date?
+		if (retValue == true
+				&& (created.getText() != null && !created.getText().equals(""))) { //$NON-NLS-1$
+			// Yes
+			// Is the format valid?
+			if (!isValidDateString(created.getText())) {
+				// No
+				setErrorMessage(Messages.getString("NDublinCore.createdErr")); //$NON-NLS-1$
+				retValue = false;
+			}
+		} // if created date
+
+		// Is there a date?
+		if (retValue == true
+				&& (date.getText() != null && !date.getText().equals(""))) { //$NON-NLS-1$
+			// Yes
+			// Is the format valid?
+			if (!isValidDateString(date.getText())) {
+				// No
+				setErrorMessage(Messages.getString("NDublinCore.dateErr")); //$NON-NLS-1$
+				retValue = false;
+			}
+		} // if date
+
+		// Is there a valid range
+		if (retValue == true
+				&& (valid.getText() != null && !valid.getText().equals(""))) { //$NON-NLS-1$
+			// Yes
+			// Is the format valid?
+			if (!isValidValidDateString(valid.getText())) {
+				// No
+				setErrorMessage(Messages.getString("NDublinCore.validErr")); //$NON-NLS-1$
+				retValue = false;
+			}
+		} // if date
+
+		return retValue;
+	} // validateDublinCorePage
+
+	/**
+	 * @param validDataRangeString
+	 *            a date string that conforms to ISO&nbsp;8601 <a
+	 *            href="http://www.w3.org/TR/NOTE-datetime">
+	 *            http://www.w3.org/TR/NOTE-datetime</a>
+	 * @return <code>true</code> if the valid date range string is properly
+	 *         formatted, <code>false</code> otherwise.
+	 */
+	protected static boolean isValidValidDateString(
+			final String validDataRangeString) {
+		// TODO should probably test isEndBeforeStart as well
+		return DublinCoreImpl.isValidStartDateValid(validDataRangeString)
+				&& DublinCoreImpl.isValidEndDateValid(validDataRangeString);
+	} // isValidValidDateString
+
+	protected static boolean isValidDateString(final String dateString) {
+		boolean retValue = false;
+		final String trimedDateString = dateString.trim();
+		try {
+			// Is it the right length?
+			if (trimedDateString.length() != "yyyy-dd-mm".length()) { //$NON-NLS-1$
+				// No
+				return false;
+			}
+
+			DublinCoreImpl.createDateFromISO8601DateString(dateString);
+			// If there's no parse exception, the string is valid
+			retValue = true;
+		} catch (final ParseException e) {
+			retValue = false;
+		}
+		return retValue;
+	} // isValidDateString
+
+	/**
+	 * @param startDateString
+	 *            a date string that conforms to ISO&nbsp;8601 <a
+	 *            href="http://www.w3.org/TR/NOTE-datetime">
+	 *            http://www.w3.org/TR/NOTE-datetime</a>
+	 * @param endDateString
+	 *            a date string that conforms to ISO&nbsp;8601 <a
+	 *            href="http://www.w3.org/TR/NOTE-datetime">
+	 *            http://www.w3.org/TR/NOTE-datetime</a>
+	 * @return <code>true</code> if the date represented by
+	 *         <code>endDateString</code> is before the date represented by
+	 *         <code>startDateString</code>
+	 */
+	public static boolean isEndBeforeStart(final String startDateString,
+			final String endDateString) {
+		boolean retValue = false;
+		try {
+			final Date startDate = DublinCoreImpl
+					.createDateFromISO8601DateString(startDateString);
+			final Date endDate = DublinCoreImpl
+					.createDateFromISO8601DateString(endDateString);
+			retValue = endDate.before(startDate);
+		} catch (final ParseException e) {
+			retValue = true;
+		} // catch
+		return retValue;
+	} // isEndBeforeStart
+
+	/**
+	 * @return a {@link DublinCore} instance initialized from the contents of
+	 *         this {@link DublinCorePage}
+	 */
+	public DublinCore createDublinCore() {
+		final DublinCore retValue = CommonFactory.eINSTANCE.createDublinCore();
+
+		if (isSet(title.getText())) {
+			retValue.setTitle(title.getText());
+		}
+		if (isSet(description.getText())) {
+			retValue.setDescription(description.getText());
+		}
+		if (isSet(creator.getText())) {
+			retValue.setCreator(creator.getText());
+		}
+		if (isSet(date.getText())) {
+			retValue.setDate(date.getText());
+		}
+		if (isSet(format.getText())) {
+			retValue.setFormat(format.getText());
+		}
+		if (isSet(publisher.getText())) {
+			retValue.setPublisher(publisher.getText());
+		}
+		if (isSet(coverage.getText())) {
+			retValue.setCoverage(coverage.getText());
+		}
+		if (isSet(contributor.getText())) {
+			retValue.setContributor(contributor.getText());
+		}
+		if (isSet(relation.getText())) {
+			retValue.setRelation(relation.getText());
+		}
+		if (isSet(rights.getText())) {
+			retValue.setRights(rights.getText());
+		}
+		if (isSet(source.getText())) {
+			retValue.setSource(source.getText());
+		}
+		if (isSet(subject.getText())) {
+			retValue.setSubject(subject.getText());
+		}
+		if (isSet(type.getText())) {
+			retValue.setType(type.getText());
+		}
+		if (isSet(language.getText())) {
+			retValue.setBibliographicCitation(language.getText());
+		}
+		if (isSet(bibliographicCitation.getText())) {
+			retValue.setBibliographicCitation(bibliographicCitation.getText());
+		}
+		if (isSet(created.getText())) {
+			retValue.setCreated(created.getText());
+		}
+		if (isSet(license.getText())) {
+			retValue.setLicense(license.getText());
+		}
+		if (isSet(required.getText())) {
+			retValue.setRequired(required.getText());
+		}
+		if (isSet(spatial.getText())) {
+			retValue.setSpatial(spatial.getText());
+		}
+		if (isSet(valid.getText())) {
+			retValue.setValid(valid.getText());
+		}
+
+		return retValue;
+	} // createDublinCore
+
+	/**
+	 * @param text
+	 *            a String
+	 * @return <code>true</code> if the string is not null nor the empty
+	 *         string
+	 * @see #createDublinCore()
+	 */
+	private boolean isSet(final String text) {
+		return !(text == null || text.equals("")); //$NON-NLS-1$
+	}
+} // DublinCorePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/Messages.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/Messages.java
new file mode 100644
index 0000000..976b6b0
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/Messages.java
@@ -0,0 +1,47 @@
+// Messages.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.stem.core.Constants;
+
+
+/**
+ * This class is the Resource Bundle for this package.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = Constants.ID_ROOT
+			+ ".ui.wizards.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// empty
+	}
+
+	/**
+	 * @param key
+	 *            the key for the message
+	 * @return the string that matches the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	} // getString
+} // WizardMessages
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewExperimentWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewExperimentWizard.java
new file mode 100644
index 0000000..c8f8932
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewExperimentWizard.java
@@ -0,0 +1,150 @@
+// NewExperimentWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.experiment.ExperimentFactory;
+import org.eclipse.stem.core.experiment.ExperimentPackage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a Wizard for making new STEM
+ * {@link org.eclipse.stem.core.experiment.Experiment}s.
+ * 
+ * @see org.eclipse.stem.core.model.Model
+ * @see org.eclipse.stem.ui.wizards.NewGraphWizard
+ */
+public class NewExperimentWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NExperimentWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		final NewExperimentPage retValue = new NewExperimentPage(Messages
+				.getString("NExperimentWiz.page_title")); //$NON-NLS-1$
+		retValue.setTitle(Messages.getString("NExperimentWiz.page_title")); //$NON-NLS-1$
+		retValue.setDescription(Messages
+				.getString("NExperimentWiz.page_description")); //$NON-NLS-1$
+
+		return retValue;
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()
+			 */
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(ExperimentPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.EXPERIMENT_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		Identifiable retValue = ExperimentFactory.eINSTANCE.createExperiment();
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.EXPERIMENTS_FOLDER_NAME;
+	} // getFolderName
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return ExperimentPackage.eNAME;
+	}
+
+	protected static class NewExperimentPage extends NewIdentifiablePage {
+
+		/**
+		 * @param pageName
+		 */
+		protected NewExperimentPage(final String pageName) {
+			super(pageName);
+		}
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NExperimentWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+	} // NewExperimentPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewExperimentWizard}
+	 */
+	public static class NewExperimentWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewExperimentWizard wizard = new NewExperimentWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewExperimentWizardCommandHandler
+
+} // NewExperimentWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewGraphWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewGraphWizard.java
new file mode 100644
index 0000000..fa2d4f5
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewGraphWizard.java
@@ -0,0 +1,146 @@
+// NewGraphWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.GraphFactory;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link Graph}s.
+ */
+public class NewGraphWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NGraphWiz.wizard_title"); //$NON-NLS-1$
+	} // getWizardTitle
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		return new NewGraphPage();
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(GraphPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.GRAPH_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Graph retValue = GraphFactory.eINSTANCE.createGraph();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.GRAPHS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return GraphPackage.eNAME;
+	} // getSerializationFileNameExtension
+
+	/**
+	 * This class is a {@link NewIdentifiablePage} that contains the interface
+	 * components needed to define a new {@link Graph}.
+	 */
+	protected static class NewGraphPage extends NewIdentifiablePage {
+
+		/**
+		 * Default Constructor
+		 */
+		protected NewGraphPage() {
+			super(Messages.getString("NGraphWiz.page_title")); //$NON-NLS-1$
+			setTitle(Messages.getString("NGraphWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages.getString("NGraphWiz.page_description")); //$NON-NLS-1$
+		} // NewGraphPage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NGraphWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+	} // NewGraphPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewGraphWizard}
+	 */
+	public static class NewGraphWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewGraphWizard wizard = new NewGraphWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewGraphWizardCommandHandler
+
+} // NewGraphWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiablePage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiablePage.java
new file mode 100644
index 0000000..38a459f
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiablePage.java
@@ -0,0 +1,433 @@
+// NewIdentifiablePage.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.Utility;
+import org.eclipse.stem.ui.views.explorer.IdentifiableTreeNode;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is the {@link WizardPage} that is the super class of all wizard
+ * pages used to specify the details of an {@link Identifiable}.
+ * 
+ * @see DublinCorePage
+ * @see NewIdentifiableWizard
+ */
+abstract public class NewIdentifiablePage extends WizardPage {
+
+	/**
+	 * This {@link Combo} will be populated with the names of the projects in
+	 * the workspace that the {@link Identifiable} can be created in.
+	 */
+	protected Combo projectNamesCombo;
+
+	/**
+	 * The name of the file in which the {@link Identifiable} will be
+	 * serialized.
+	 * 
+	 * @see NewIdentifiableWizard#createIdentifiable(org.eclipse.core.runtime.IProgressMonitor,
+	 *      org.eclipse.emf.common.util.URI)
+	 */
+	protected Text serializationFileNameField;
+
+	/**
+	 * This {@link Composite} is created by the subclasses with the call to
+	 * {@link #createSpecificComposite(Composite)}. This {@link Composite}
+	 * contains all of the interface features for defining the details of the
+	 * {@link Identifiable} to be created.
+	 */
+	private Composite specificComposite;
+
+	/**
+	 * The collection of STEM projects in the current workspace. This will be
+	 * used to populate {@link #projectNamesCombo}.
+	 */
+	protected List<IProject> stemProjects = null;
+
+	/**
+	 * This {@link ModifyListener} is attached to those widgets whose contents
+	 * need to be verified for correctness. Whenever one of those is modified, a
+	 * call to {@link #validatePage()} is made which then returns
+	 * <code>true</code> or <code>false</code>. This value is passed to
+	 * {@link #setPageComplete(boolean)} which then enables or disables the
+	 * buttons at the bottom of the page. The attachment is done in the method
+	 * {@link #createProjectComposite(Composite)} and in
+	 * {@link #createSerializationComposite(Composite)}
+	 */
+	protected ModifyListener projectValidator = new ModifyListener() {
+		public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+			setPageComplete(validatePage());
+		}
+	};
+
+	/**
+	 * @param pageName
+	 *            the name of the page, this is passed up by a subclass.
+	 */
+	protected NewIdentifiablePage(final String pageName) {
+		super(pageName);
+	} // NewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(final Composite parent) {
+		/*
+		 * Creates a {@link Composite} and calls {@link  #setControl(org.eclipse.swt.widgets.Control)}. Basically, it adds
+		 * three things to the Composite it creates, a "project composite" an
+		 * "identifiable composite" and a "specific composite". The first is
+		 * common to all pages and is used to specify which project the
+		 * Identifiable will be serialized in. The second, also common to all
+		 * pages, is used to specify the name of the serialization file for the
+		 * Identifiable. The third is for the specific details for defining the
+		 * Identifiable.
+		 */
+		// Page Composite
+		final Composite pageComposite = new Composite(parent, SWT.NONE);
+		final GridLayout pageLayout = new GridLayout();
+		pageLayout.numColumns = 1;
+		pageLayout.verticalSpacing = 12;
+		pageComposite.setLayout(pageLayout);
+
+		final GridData pageLayoutData = new GridData();
+		pageLayoutData.verticalAlignment = GridData.FILL;
+		pageLayoutData.grabExcessVerticalSpace = true;
+		pageLayoutData.horizontalAlignment = GridData.FILL;
+		pageComposite.setLayout(pageLayout);
+
+		createProjectComposite(pageComposite);
+
+		// Horizontal Separator
+		final Label seperator = new Label(pageComposite, SWT.HORIZONTAL
+				| SWT.SEPARATOR);
+		seperator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+		final Composite identifiableComposite = createSerializationComposite(pageComposite);
+		identifiableComposite.setLayoutData(new GridData(
+				GridData.FILL_HORIZONTAL));
+
+		// Add anything that is specific to the type of wizard
+		specificComposite = createSpecificComposite(pageComposite);
+		// Was there anything?
+		if (specificComposite != null) {
+			// Yes
+			final GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+			gd.grabExcessHorizontalSpace = true;
+			specificComposite.setLayoutData(gd);
+		} // if
+
+		setPageComplete(validatePage());
+		parent.pack();
+		setControl(pageComposite);
+	} // createControl
+
+	/**
+	 * @param parent
+	 *            the parent {@link Composite}
+	 */
+	private void createProjectComposite(final Composite parent) {
+		final Composite projectComposite = new Composite(parent, SWT.None);
+		final GridLayout projectCompositeLayout = new GridLayout();
+		projectCompositeLayout.numColumns = 3;
+		projectCompositeLayout.verticalSpacing = 12;
+		projectCompositeLayout.marginHeight = 0;
+		projectCompositeLayout.marginWidth = 0;
+		projectComposite.setLayout(projectCompositeLayout);
+
+		final GridData projectCompositeLayoutData = new GridData();
+		projectCompositeLayoutData.horizontalAlignment = GridData.FILL;
+		projectComposite.setLayoutData(projectCompositeLayoutData);
+
+		// Project Label
+		final Label projectLabel = new Label(projectComposite, SWT.LEFT);
+		projectLabel.setText(Messages.getString("NIdWiz.project") + ":"); //$NON-NLS-1$ //$NON-NLS-2$
+		final GridData projectLabelLayoutData = new GridData();
+		projectLabelLayoutData.horizontalSpan = 1;
+		projectLabelLayoutData.horizontalAlignment = GridData.FILL;
+		projectLabel.setLayoutData(projectLabelLayoutData);
+
+		// Project Combo
+		projectNamesCombo = new Combo(projectComposite, SWT.BORDER
+				| SWT.READ_ONLY);
+		final GridData projectFieldLayoutData = new GridData();
+		projectFieldLayoutData.horizontalAlignment = GridData.FILL;
+		projectFieldLayoutData.grabExcessHorizontalSpace = true;
+		projectFieldLayoutData.horizontalSpan = 1;
+		projectNamesCombo.setLayoutData(projectFieldLayoutData);
+
+		// initialize the project field to point to the selected project
+		initializeProjectCombo(projectNamesCombo);
+
+		// The projectValidator will look at the contents of the field and
+		// determine if it refers to a valid project.
+		projectNamesCombo.addModifyListener(projectValidator);
+
+		// Project Browse Button
+		final Button projectFieldBrowseButton = new Button(projectComposite,
+				SWT.PUSH);
+		projectFieldBrowseButton.setText(Messages.getString("NIdWiz.browse")); //$NON-NLS-1$
+
+		projectFieldBrowseButton.addSelectionListener(new SelectionAdapter() {
+
+			/**
+			 * The browse button will pop-up a file search dialog and allow the
+			 * user to specify the project
+			 * 
+			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+			 */
+			@Override
+			public void widgetSelected(
+					@SuppressWarnings("unused") final SelectionEvent e) {
+				final String filePath = CoreEditorAdvisor.openFilePathDialog(
+						getShell(), "*", SWT.OPEN); //$NON-NLS-1$
+				if (filePath != null) {
+					projectNamesCombo.setText(filePath);
+				}
+			}
+		});
+	} // createProjectComposite
+
+	/**
+	 * @param parent
+	 *            the parent {@link Composite}
+	 * @return a {@link Composite} in which the user can specify the name of the
+	 *         file in which the {@link Identifiable} should be serialized.
+	 */
+	private Composite createSerializationComposite(final Composite parent) {
+		final Composite retValue = new Composite(parent, SWT.NONE);
+		GridData gridData;
+
+		final GridLayout identifableCompositeLayout = new GridLayout();
+		identifableCompositeLayout.numColumns = 3;
+		identifableCompositeLayout.verticalSpacing = 12;
+		identifableCompositeLayout.marginHeight = 0;
+		identifableCompositeLayout.marginWidth = 0;
+		retValue.setLayout(identifableCompositeLayout);
+		gridData = new GridData();
+		// identifiableCompositeLayoutData.horizontalSpan=1;
+		gridData.horizontalAlignment = GridData.FILL;
+		// identifiableCompositeLayoutData.grabExcessHorizontalSpace = true;
+		retValue.setLayoutData(gridData);
+
+		// Serialization file name label
+		final Label serializationFileNameLabel = new Label(retValue, SWT.NONE);
+		serializationFileNameLabel
+				.setText(Messages.getString("NIdWiz.name") + ":"); //$NON-NLS-1$ //$NON-NLS-2$
+		gridData = new GridData();
+		gridData.horizontalSpan = 1;
+		gridData.horizontalAlignment = SWT.LEAD;
+		serializationFileNameLabel.setLayoutData(gridData);
+
+		serializationFileNameField = new Text(retValue, SWT.BORDER);
+		gridData = new GridData();
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.horizontalSpan = 1;
+		serializationFileNameField.setLayoutData(gridData);
+
+		serializationFileNameField.addModifyListener(projectValidator);
+
+		return retValue;
+	} // createSerializationComposite
+
+	/**
+	 * @param parent
+	 *            the parent {@link Composite}, typically the one created in
+	 *            {@link #createControl(Composite)}.
+	 */
+	protected Composite createSpecificComposite(final Composite parent) {
+		// The NewModelWizard doesn't provide a "specific composite" so we don't
+		// make this method abstract.
+		return null;
+	} // createSpecificComposite
+
+	/**
+	 * @return the project selected by the user.
+	 */
+	public IProject getSelectedProject() {
+		return stemProjects.get(projectNamesCombo.getSelectionIndex());
+	} // getSelectedProject
+
+	/**
+	 * @param projectCombo
+	 *            the {@link Combo} to be initialized with the names of the
+	 *            projects.
+	 */
+	private void initializeProjectCombo(final Combo projectCombo) {
+
+		IProject selectedProject = getWorkSpaceSelectedProject();
+
+		// Get the Projects that are STEM projects
+		int index = 0;
+		int i = 0;
+		for (final IProject project : getSTEMProjects()) {
+			// Is the STEM project selected?
+			if (project.equals(selectedProject)) {
+				// Yes
+				index = i;
+			}
+
+			final String projectName = project.getName();
+			projectCombo.add(projectName);
+			i++;
+		} // for each STEM project
+
+		projectCombo.setFocus();
+		projectCombo.select(index);
+	} // initializeProjectField
+
+	private IProject getWorkSpaceSelectedProject() {
+		IProject retValue = null;
+		// Find the name of the currently selected project, if there is one
+		final ISelection selection = Activator.getDefault().getWorkbench()
+				.getActiveWorkbenchWindow().getSelectionService()
+				.getSelection();
+		// Structured Selection that might have a project?
+		if (selection instanceof IStructuredSelection) {
+			for (Object obj : ((IStructuredSelection) selection).toList()) {
+				// Project?
+				if (obj instanceof IProject) {
+					retValue = (IProject) obj;
+					break;
+				}
+				// File or Folder? (in a Project)
+				else if (obj instanceof IResource) {
+					// Yes
+					retValue = ((IResource) obj).getProject();
+					break;
+				} // else if File or Folder
+				// Identifiable?
+				else if (obj instanceof Identifiable) {
+					final IPath path = new Path(((Identifiable) obj).getURI()
+							.toPlatformString(true));
+					retValue = ResourcesPlugin.getWorkspace().getRoot()
+							.getFile(path).getProject();
+					break;
+				} // else if Identifiable
+				// IdentifiableTreeNode?
+				else if (obj instanceof IdentifiableTreeNode) {
+					retValue = ((IdentifiableTreeNode) obj).getProject();
+					break;
+				} // else if IdentifiableTreeNode
+
+			} // for each selected object
+		} // if structured selection
+
+		return retValue;
+	} // getWorkSpaceSelectedProject
+
+	/**
+	 * @return a List of the projects in the workspace that have STEM Project
+	 *         "nature"
+	 * 
+	 * @see org.eclipse.stem.core.Constants#ID_STEM_PROJECT_NATURE
+	 */
+	private List<IProject> getSTEMProjects() {
+		// Refresh
+		stemProjects = Utility.getSTEMProjectsFromWorkspace();
+		return stemProjects;
+	} // getSTEMProjects
+
+	/**
+	 * @return <code>true</code> if the page is complete and ready to go
+	 */
+	protected boolean validatePage() {
+		boolean retValue = true;
+		setErrorMessage(null);
+
+		// Are there any projects?
+		if (getSTEMProjects().size() == 0) {
+			// No
+			setErrorMessage(Messages.getString("NIdWiz.noProjErr"));
+			retValue = false;
+		} // if no projects
+
+		// Is the serialization file name missing?
+		if (retValue && serializationFileNameField.getText() == null
+				|| "".equals(serializationFileNameField.getText().trim())) {
+			// Yes
+			setErrorMessage(Messages.getString("NIdWiz.nameMissingErr")); //$NON-NLS-1$
+			retValue = false;
+		}
+
+		// Is the serialization file name valid?
+		if (retValue && !serializationFileNameIsValid()) {
+			// No
+			setErrorMessage(Messages.getString("NIdWiz.nameErr")); //$NON-NLS-1$
+			retValue = false;
+		}
+
+		return retValue;
+	} // validatePage
+
+	/**
+	 * @return <code>true</code> if the serialization file name specified for
+	 *         the {@link Identifiable} to be created is a valid name.
+	 */
+	private boolean serializationFileNameIsValid() {
+		final String name = serializationFileNameField.getText();
+
+		if (name == null) {
+			return false;
+		}
+
+		final String trimedName = name.trim();
+
+		return !(trimedName.equals("") || trimedName.contains(" ")); //$NON-NLS-1$ //$NON-NLS-2$
+	} // serializationFileNameIsValid
+
+	/**
+	 * @return the value for the {@link DublinCore#getTitle()} attribute on the
+	 *         {@link DublinCorePage}.
+	 */
+	protected String getDCTitle() {
+		return getDCDescription();
+	} // getDCTitle
+
+	/**
+	 * @return the value for a {@link DublinCore#getDescription()} attribute on
+	 *         the {@link DublinCorePage}.
+	 */
+	abstract protected String getDCDescription();
+
+	/**
+	 * @return a value suitable for {@link DublinCore#setValid(String)}
+	 */
+	protected String getDCValidDateRange() {
+		return "";
+	} // getDCValidDateRange
+} // NewIdentifiablePage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiableWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiableWizard.java
new file mode 100644
index 0000000..637893d
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewIdentifiableWizard.java
@@ -0,0 +1,337 @@
+// NewIdentifiableWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.ui.action.WorkbenchWindowActionDelegate;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.Utility;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.presentation.CoreEditorAdvisor;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * This class is the super class for the {@link Wizard}s that create
+ * {@link Identifiable}s. The basic {@link Identifiable} wizard contains two
+ * {@link WizardPage}s. The first is a subclass instance of the abstract class
+ * {@link NewIdentifiablePage} and the second is an instance of
+ * {@link DublinCorePage}. The {@link NewIdentifiablePage} implements the
+ * template pattern by creating an overall structure for the page that is filled
+ * in by the results of calls to abstract methods implemented by the subclasses.
+ * 
+ * @see org.eclipse.stem.core.common.Identifiable
+ * @see org.eclipse.stem.core.graph.Graph
+ * @see org.eclipse.stem.core.model.Model
+ * @see org.eclipse.stem.core.scenario.Scenario
+ */
+abstract public class NewIdentifiableWizard extends Wizard implements
+		INewWizard {
+
+	/**
+	 * The wizard's link to the {@link IWorkbench}.
+	 */
+	private IWorkbench workbench;
+
+	/**
+	 * The first page in the wizard that a user uses to specify the details of a
+	 * new {@link Identifiable} to be created.
+	 * 
+	 * @see #newDublinCorePage
+	 */
+	protected NewIdentifiablePage newIdentifiablePage = null;
+
+	/**
+	 * The second page in the wizard that a user uses to specify the details of
+	 * the {@link org.eclipse.stem.core.common.DublinCore} metadata associated with the {@link Identifiable}
+	 * being created.
+	 * 
+	 * @see #newIdentifiablePage
+	 */
+	protected DublinCorePage newDublinCorePage;
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+	 *      org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public void init(final IWorkbench workbench,
+			@SuppressWarnings("unused") final IStructuredSelection selection) {
+		this.workbench = workbench;
+		setWindowTitle(getWizardTitle());
+	} // init
+
+	/**
+	 * Create the {@link Wizard}'s pages.
+	 * 
+	 * @see org.eclipse.jface.wizard.Wizard#addPages()
+	 */
+	@Override
+	public void addPages() {
+		super.addPages();
+		setForcePreviousAndNextButtons(false);
+		newIdentifiablePage = createNewIdentifiablePage();
+		// Were we successful in creating the page?
+		if (newIdentifiablePage == null) {
+			// No
+			return;
+		}
+		newDublinCorePage = createDublinCorePage();
+		// Were we successful in creating the page?
+		if (newDublinCorePage == null) {
+			// No
+			return;
+		}
+		addPage(newIdentifiablePage);
+		addPage(newDublinCorePage);
+	} // addPages
+
+	/**
+	 * @param page
+	 *            the {@link IWizardPage} page currently being displayed.
+	 * @return the next {@link IWizardPage} to be displayed to the user.
+	 */
+	@Override
+	public IWizardPage getNextPage(final IWizardPage page) {
+		final IWizardPage nextPage = super.getNextPage(page);
+		// Dublin Core next?
+		if (nextPage instanceof DublinCorePage) {
+			// Yes
+			// We pre-populate some of the fields in the DublinCore page with
+			// values obtained from the newIdentifaiblePage that the user has
+			// just completed. The exact details are specific to the type of
+			// Identifiable being created.
+			final DublinCorePage dcPage = (DublinCorePage) nextPage;
+			dcPage.title.setText(newIdentifiablePage.getDCTitle());
+			dcPage.description.setText(newIdentifiablePage.getDCDescription());
+			dcPage.valid.setText(newIdentifiablePage.getDCValidDateRange());
+		} // if DublinCorePage
+
+		return nextPage;
+	} // getNextPage
+
+	/**
+	 * @see org.eclipse.jface.wizard.Wizard#performFinish()
+	 */
+	@Override
+	public boolean performFinish() {
+		// This is executed when the user clicks on the "Finish" button of the
+		// wizard. It uses the details in the two pages (newIdentifiablePage and
+		// newDublinCorePage) to create the Identifiable. It serializes the
+		// Identifiable in a file in the project that was selected on the
+		// newIdentifablePage.
+		final boolean retValue = true;
+		try {
+			// The fileURI specifies where the Identifiable will be serialized
+			final URI serializationURI = createSerializationURI();
+
+			// Creating the Identifiable can potentially take a while so we
+			// wrap the call to createIdentifable in an "operation" so that it
+			// can be run in the background.
+			final WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+				@Override
+				protected void execute(final IProgressMonitor monitor) {
+					createIdentifiable(
+							monitor == null ? new NullProgressMonitor()
+									: monitor, serializationURI);
+				} // execute
+			}; // WorkspaceModifyOperation
+
+			// The container is a IRunnableContext, we use it to execute the
+			// operation we created above. The first argument of false indicates
+			// not to "fork", the second of "true" indicates that the operation
+			// is cancelable.
+			getContainer().run(false, true, op);
+
+			// Refresh the project so that the new serialized file will display
+			try {
+				newIdentifiablePage.getSelectedProject().refreshLocal(
+						IResource.DEPTH_INFINITE, null);
+			} catch (final CoreException e) {
+				// Ignore
+			}
+			// Now open up the appropriate editor for the new Identifiable.
+			return CoreEditorAdvisor.openEditor(workbench, CommonPlugin
+					.asLocalURI(serializationURI));
+		} // try
+		catch (final InvocationTargetException e) {
+			Activator.logError(Activator.PLUGIN_ID, e);
+		} catch (final InterruptedException e) {
+			// This gets thrown if the operation is canceled
+			Activator.logInformation(Activator.PLUGIN_ID, e);
+		}
+		return retValue;
+
+	} // performFinish
+
+	/**
+	 * Create the specific {@link Identifiable} as specified by the contents of
+	 * the wizard pages and serialize it in the file specified by the
+	 * {@link URI} returned by {@link #createSerializationURI()}.
+	 * 
+	 * @param monitor
+	 *            a {@link IProgressMonitor} to use to report our progress
+	 * @param serializationURI
+	 *            the {@link URI} of the serialization file
+	 * @see #performFinish()
+	 */
+	void createIdentifiable(IProgressMonitor monitor, final URI serializationURI) {
+		// Was a progress monitor specified?
+		if (monitor == null) {
+			// No
+			monitor = new NullProgressMonitor();
+		}
+
+		monitor.beginTask(Messages.getString("NIdWiz.creating"), 100); //$NON-NLS-1$
+		try {
+			// Create the Identifiable from the contents of the Wizard
+			// Pages.
+			final Identifiable identifiable = createIdentifiable();
+			identifiable.setURI(serializationURI);
+			assert identifiable.sane();
+
+			Utility.serializeIdentifiable(identifiable, serializationURI);
+		} catch (final IOException e) {
+			Activator.logError(Messages.getString("NIdWiz.saveErr"), e); //$NON-NLS-1$
+		} catch (final Exception e) {
+			Activator.logError(Messages.getString("NIdWiz.saveErr"), e); //$NON-NLS-1$
+		} finally {
+			monitor.done();
+		}
+	} // createIdentifiable
+
+	/**
+	 * Create the {@link URI} to be used to serialize the {@link Identifiable}
+	 * created in {@link #performFinish()}. The path in the {@link URI} will
+	 * place the serialization file into the project returned by
+	 * {@link #getSelectedProject()}. The name of the folder in the project is
+	 * supplied by {@link #getSerializationFolderName()} which is overridden by
+	 * a subclass. The name of the file and the file extension are provided by
+	 * the methods {@link #getSerializationFileName()} and
+	 * {@link #getSerializationFileNameExtension()}, both of which are
+	 * implemented by a subclass.
+	 * 
+	 * @return the {@link URI} that will be used to serialize the
+	 *         {@link Identifiable} created in {@link #performFinish()}.
+	 * 
+	 * @see #createIdentifiable(IProgressMonitor, URI)
+	 */
+	private URI createSerializationURI() {
+
+		final StringBuilder sb = new StringBuilder(newIdentifiablePage
+				.getSelectedProject().getName());
+		sb.append("/"); //$NON-NLS-1$
+		sb.append(getSerializationFolderName());
+		sb.append("/"); //$NON-NLS-1$
+		sb.append(getSerializationFileName());
+		sb.append("."); //$NON-NLS-1$
+		sb.append(getSerializationFileNameExtension());
+
+		return URI.createPlatformResourceURI(sb.toString(), true);
+	} // createSerializationURI
+
+	/**
+	 * @return the name of the serialization file for the {@link Identifiable}
+	 *         entered by the user on {@link #newIdentifiablePage}.
+	 */
+	private String getSerializationFileName() {
+		return newIdentifiablePage.serializationFileNameField.getText();
+	} // getSerializationFileName
+
+	/**
+	 * @return the title of the Wizard for use as the title of the window.
+	 */
+	abstract protected String getWizardTitle();
+
+	/**
+	 * This method is implemented by subclasses to create a {@link WizardPage}
+	 * that is specific to the type of {@link Identifiable} that is being
+	 * created.
+	 * 
+	 * @return the page used to specify the new {@link Identifiable} to create.
+	 * @see #createDublinCorePage()
+	 */
+	abstract protected NewIdentifiablePage createNewIdentifiablePage();
+
+	/**
+	 * This method is implemented by subclasses to create a
+	 * {@link DublinCorePage} that is specific to the type of
+	 * {@link Identifiable} that is being created. Typically, the method will
+	 * create a {@link DublinCorePage} with some of the fields pre-populated
+	 * with values specific to the {@link Identifiable}.
+	 * 
+	 * @return a pre-populated {@link DublinCorePage}.
+	 * @see #createNewIdentifiablePage()
+	 */
+	abstract protected DublinCorePage createDublinCorePage();
+
+	/**
+	 * This method is implemented by subclasses to create the specific type of
+	 * {@link Identifiable} that the {@link #newIdentifiablePage} that they
+	 * returned from {@link #createNewIdentifiablePage()} specifies.
+	 * 
+	 * @return the specific type of {@link Identifiable} created by a subclasses
+	 *         of this class.
+	 */
+	abstract protected Identifiable createIdentifiable();
+
+	/**
+	 * @return the name of the folder under the selected project that the
+	 *         {@link Identifiable} created by
+	 *         {@link #createIdentifiable(IProgressMonitor, URI)} should be
+	 *         serialized in.
+	 * @see #getSelectedProject()
+	 * @see #createSerializationURI()
+	 */
+	abstract protected String getSerializationFolderName();
+
+	/**
+	 * @return the file extension of the serialization file of the
+	 *         {@link Identifiable} created by
+	 *         {@link #createIdentifiable(IProgressMonitor, URI)}. Typically,
+	 *         this is the EMF "eNAME" of the model in which the
+	 *         {@link Identifiable} is defined.
+	 * @see org.eclipse.stem.core.graph.GraphPackage#eNAME
+	 * @see org.eclipse.stem.core.model.ModelPackage#eNAME
+	 * @see org.eclipse.stem.core.scenario.ScenarioPackage#eNAME
+	 * @see  org.eclipse.stem.core.experiment.ExperimentPackage#eNAME
+	 */
+	abstract protected String getSerializationFileNameExtension();
+
+	/**
+	 * Run the Wizard from an Action
+	 */
+	abstract protected static class NewIdentifiableWizardAction extends
+			WorkbenchWindowActionDelegate {
+		protected void run(final NewIdentifiableWizard wizard) {
+			wizard.init(getWindow().getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(getWindow()
+					.getShell(), wizard);
+			wizardDialog.open();
+		} // run
+	} // NewIdentifiableWizardAction
+
+} // NewIdentifiableWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModelWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModelWizard.java
new file mode 100644
index 0000000..0cbe5f7
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModelWizard.java
@@ -0,0 +1,142 @@
+// NewModelWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.model.Model;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.ModelPackage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link Model}s.
+ */
+public class NewModelWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NModelWiz.wizard_title"); //$NON-NLS-1$
+	} // getWizardTitle
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		return new NewModelPage();
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(ModelPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.MODEL_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Model retValue = ModelFactory.eINSTANCE.createModel();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.MODELS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return ModelPackage.eNAME;
+	}
+
+	protected static class NewModelPage extends NewIdentifiablePage {
+
+		/**
+		 * Default Constructor
+		 */
+		protected NewModelPage() {
+			super(Messages.getString("NModelWiz.page_title")); //$NON-NLS-1$
+			setTitle(Messages.getString("NModelWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages.getString("NModelWiz.page_description")); //$NON-NLS-1$
+		} // NewModelPage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NModelWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+	} // NewModelPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewModelWizard}
+	 */
+	public static class NewModelWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewModelWizard wizard = new NewModelWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewModelWizardCommandHandler
+
+} // NewModelWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierPage.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierPage.java
new file mode 100644
index 0000000..76047ff
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierPage.java
@@ -0,0 +1,676 @@
+// NewModifierPage.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.GraphPackage;
+import org.eclipse.stem.core.graph.LabelValue;
+import org.eclipse.stem.core.graph.StaticLabel;
+import org.eclipse.stem.core.modifier.FeatureModifier;
+import org.eclipse.stem.core.modifier.NOPModifier;
+import org.eclipse.stem.core.modifier.RangeModifier;
+import org.eclipse.stem.core.modifier.SequenceModifier;
+import org.eclipse.stem.core.modifier.SingleValueModifier;
+import org.eclipse.stem.ui.adapters.featuremodifier.EStructuralFeatureFeatureModifierAdapterFactory;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierEditCompositeAdapter;
+import org.eclipse.stem.ui.adapters.featuremodifiereditcomposite.FeatureModifierFeatureModifierEditCompositeAdapterFactory;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProvider;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapter;
+import org.eclipse.stem.ui.adapters.propertystrings.PropertyStringProviderAdapterFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+
+/**
+ * This class is a {@link NewIdentifiablePage} that is customized to contain a
+ * list of the {@link EStructuralFeature}s of an {@link Identifiable} that can
+ * be modified by a {@link FeatureModifier}. It is extended for each type of
+ * {@link Identifiable} which can be modified. Instances of subclasses of this
+ * class are created by an composable adapter factory. This approach allows new
+ * types of {@link Identifiable}s to be added to the system and have the
+ * {@link NewModifierWizard} be able to handle them, complete with NLS
+ * translations, etc.
+ */
+abstract public class NewModifierPage extends NewIdentifiablePage {
+
+	/**
+	 * This is the {@link Identifiable} for which the page is creating a
+	 * {@link org.eclipse.stem.core.modifier.Modifier}.
+	 */
+	protected Identifiable identifiable;
+
+	private final List<FeatureModifierComposite> featureModifierComposites = new ArrayList<FeatureModifierComposite>();
+
+	/**
+	 * Constructor
+	 * 
+	 * @param identifiable
+	 *            the {@link Identifiable} for which the page is creating a
+	 *            {@link org.eclipse.stem.core.modifier.Modifier}.
+	 */
+	protected NewModifierPage(final Identifiable identifiable) {
+		super(Messages.getString("NModifierWiz.page_title"));
+		setTitle(Messages.getString("NModifierWiz.page_title")); //$NON-NLS-1$
+		setDescription(Messages.getString("NModifierWiz.page_description")); //$NON-NLS-1$
+		this.identifiable = identifiable;
+	} // NewModifierPage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#createSpecificComposite(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	protected Composite createSpecificComposite(final Composite parent) {
+		
+		  //Display display = parent.getDisplay();
+	      //Color blue = display.getSystemColor(SWT.COLOR_BLUE);
+	      
+	      final Composite outerComposite = new Composite(parent,SWT.BORDER);
+	      outerComposite.setLayout(new FillLayout());
+	      
+	      // set the minimum width and height of the scrolled content - method 2
+	      final ScrolledComposite scrolledComposite = new ScrolledComposite(outerComposite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+	      scrolledComposite.setExpandHorizontal(true);
+	      scrolledComposite.setExpandVertical(true);
+	      final Composite innerComposite = new Composite(scrolledComposite, SWT.NONE);
+	      scrolledComposite.setContent(innerComposite);
+	      //innerComposite.setBackground(blue);
+	      GridLayout layout = new GridLayout();
+	      layout.numColumns = 2;
+	      innerComposite.setLayout(layout);
+	      
+	      scrolledComposite.setMinSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+	      innerComposite.setSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+          innerComposite.layout();
+          Point innerSize = innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+          scrolledComposite.setSize(innerSize);
+    	  outerComposite.setSize(innerSize);
+    	  innerComposite.layout();
+          outerComposite.layout();
+          parent.layout();
+          Label testLabel = new Label(innerComposite, SWT.BORDER);
+          testLabel.setText("press to scroll");
+	      Button add = new Button (innerComposite, SWT.PUSH);
+	      add.setText("force scroll");
+	      final int[] index = new int[]{0};
+	      add.addListener(SWT.Selection, new Listener() {
+	          public void handleEvent(@SuppressWarnings("unused") Event e) {
+	              index[0]++;
+	              Label emptyLabel = new Label(innerComposite, SWT.NONE);
+	              emptyLabel.setText("bottom");
+	              // reset size of content so children can be seen - method 1
+	              innerComposite.setSize(innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+	              innerComposite.layout();
+	              
+	              // reset the minimum width and height so children can be seen - method 2
+	              Point innerSize = innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+	              innerSize.y*=3;
+	              innerSize.y/=2;
+	              scrolledComposite.setMinSize(innerSize);
+	              	
+	          }
+	      });
+
+		// Get the adapter that will provide NLS'd names for the
+		// properties of the Identifiable
+		final PropertyStringProviderAdapter pspa = (PropertyStringProviderAdapter) PropertyStringProviderAdapterFactory.INSTANCE
+				.adapt(identifiable, PropertyStringProvider.class);
+
+		final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+		final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(identifiable, IItemPropertySource.class);
+		final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(identifiable);
+
+		for (final IItemPropertyDescriptor descriptor : properties) {
+			final EStructuralFeature feature = (EStructuralFeature) descriptor
+					.getFeature(null);
+			// Is this a property that the user specifies?
+			if (isUserSpecifiedProperty(feature)) {
+				// Yes
+				// Label for the name of the property
+				final Label label = new Label(innerComposite, SWT.NONE);
+				label.setText(pspa.getPropertyName(descriptor));
+				// label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_CYAN));
+				GridData gridData1 = new GridData(GridData.BEGINNING);
+				gridData1.horizontalAlignment = SWT.BEGINNING;
+				gridData1.horizontalIndent = 0;
+				label.setLayoutData(gridData1);
+
+				// Composite for the editor
+				final FeatureModifierComposite featureModifierComposite = new FeatureModifierComposite(
+						innerComposite, identifiable, feature, pspa, descriptor,
+						isModifiableProperty(feature), this);
+				GridData gridData2 = new GridData(GridData.BEGINNING);
+				gridData2.grabExcessHorizontalSpace = true;
+				gridData2.horizontalAlignment = SWT.FILL;
+				gridData2.horizontalIndent = 0;
+				featureModifierComposite.setLayoutData(gridData2);
+
+				featureModifierComposites.add(featureModifierComposite);
+
+			} // if user specified
+		} // for each property
+
+		// Any text for the bottom?
+		final String bottomText = getBottomText();
+		if (bottomText != null) {
+			// Yes
+			final Label bottomTextLabel = new Label(innerComposite, SWT.NONE);
+			bottomTextLabel.setText(bottomText);
+			final GridData bottomTextGD = new GridData(GridData.END);
+			bottomTextGD.grabExcessHorizontalSpace = true;
+			bottomTextGD.horizontalSpan = 2;
+			bottomTextLabel.setLayoutData(bottomTextGD);
+		} // if
+	
+		
+		// reset the minimum width and height so children can be seen - method 2
+		// TODO why does the following not make the scrollbar show up at the start ??
+        innerSize = innerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+        innerComposite.setSize(innerSize);
+        innerComposite.layout();
+       // scrolledComposite.setSize(innerSize);
+       // innerSize.y*=3;
+       // innerSize.y/=2;
+        scrolledComposite.setMinSize(innerSize);
+        	            
+       
+
+		return outerComposite;
+	} // createSpecificComposite
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+	 */
+	@Override
+	protected String getDCDescription() {
+		return MessageFormat.format(Messages
+				.getString("NModifierWiz.DC_DESCRIPTION"),
+				new Object[] { serializationFileNameField.getText() });
+	} // getDCDescription
+
+	/**
+	 * @param feature
+	 *            a {@link EStructuralFeature} of an {@link Identifiable}.
+	 * @return <code>true</code> if the {@link EStructuralFeature} represents
+	 *         a property that is specified by a user, <code>false</code>
+	 *         otherwise.
+	 */
+	protected boolean isUserSpecifiedProperty(final EStructuralFeature feature) {
+		boolean retValue = !feature.getEContainingClass().equals(
+				CommonPackage.Literals.DUBLIN_CORE);
+		retValue = retValue && !(feature instanceof EReference);
+		return retValue;
+	} // isUserSpecifiedProperty
+
+	/**
+	 * @return a line of text to appear below the properties, or
+	 *         <code>null</code> if no text is to appear.
+	 */
+	protected String getBottomText() {
+		return null;
+	}
+
+	/**
+	 * @param feature
+	 *            the {@link EStructuralFeature} to test for modifiability
+	 * @return <code>true</code> (Default) if the feature represents a property
+	 *         that the user should be able to modify for an
+	 *         {@link org.eclipse.stem.core.experiment.Experiment} or a
+	 *         {@link org.eclipse.stem.core.trigger.Trigger}.
+	 */
+	protected boolean isModifiableProperty(final EStructuralFeature feature) {
+		boolean retValue = false;
+		retValue |= (feature.getEType().equals(EcorePackage.Literals.EINT));
+		retValue |= (feature.getEType().equals(EcorePackage.Literals.ELONG));
+		retValue |= (feature.getEType().equals(EcorePackage.Literals.EDOUBLE));
+		return retValue;
+	} // isModifiableProperty
+
+	/**
+	 * @return the {@link FeatureModifier}s on the page that the user has
+	 *         specified.
+	 */
+	public final List<FeatureModifier> getFeatureModifiers() {
+		final List<FeatureModifier> retValue = new ArrayList<FeatureModifier>();
+		for (final FeatureModifierComposite featureModifierComposite : featureModifierComposites) {
+			final FeatureModifier featureModifier = featureModifierComposite
+					.getFeatureModifier();
+			// Is this FeatureModifier something other than a NOP?
+			if (!(featureModifier instanceof NOPModifier)) {
+				// Yes
+				featureModifier.setTarget(identifiable);
+				retValue.add(featureModifier);
+			} // if
+		} // for each FeatureModifierComposite
+		return retValue;
+	} // getFeatureModifiers
+
+	/**
+	 * see org.eclipse.stem.ui.wizards.NewIdentifiablePage#validatePage()
+	 */
+	@Override
+	public boolean validatePage() {
+		return super.validatePage();
+	} // validatePage
+
+	/**
+	 * This class is a {@link Composite} that displays the details of a
+	 * {@link FeatureModifier}.
+	 */
+	protected static class FeatureModifierComposite extends Composite {
+
+		/**
+		 * This is a place holder for the current
+		 * {@link FeatureModifierEditComposite} to which a reference is
+		 * maintained by {@link #editComposite}. When the user selects one of
+		 * the radio buttons ({@link #noneButton}, {@link #rangeButton}, or
+		 * {@link #sequenceButton}) the child of this {@link Composite} is
+		 * changed by {@link #setEditComposite(Composite)}.
+		 */
+		final Composite editCompositeHolder;
+
+		/**
+		 * This is the current {@link FeatureModifierEditComposite} being
+		 * displayed to the user and is the child of
+		 * {@link #editCompositeHolder}.
+		 */
+		private FeatureModifierEditComposite editComposite;
+
+		/**
+		 * This is the {@link FeatureModifier}, if it exists, created by the
+		 * user for the {@link EStructuralFeature} referenced by
+		 * {@link #feature}.
+		 */
+		FeatureModifier featureModifier = null;
+
+		/**
+		 * These buttons are grouped together as "radio buttons" and allow the
+		 * user to specify which type of {@link FeatureModifier} to create.
+		 * Initially, {@link #noneButton} is selected and the
+		 * {@link FeatureModifierEditComposite} returned by
+		 * {@link #createDefaultEditComposite(Composite, NewModifierPage, Identifiable, EStructuralFeature)}
+		 * is displayed, which simply shows the current value of the feature.
+		 */
+		Button noneButton = null;
+		Button singleButton = null;
+		Button rangeButton = null;
+		Button sequenceButton = null;
+
+		/**
+		 * @param parent
+		 *            the parent {@link Composite}
+		 * @param identifiable
+		 *            the {@link Identifiable} that contains the
+		 *            {@link EStructuralFeature}
+		 * @param feature
+		 *            the feature to be modified
+		 * @param psp
+		 *            the provider of NLS'd strings to label the properties of
+		 *            the {@link Identifiable}
+		 * @param descriptor
+		 * @param modifiable
+		 *            if <code>true</code> then the {@link EStructuralFeature}
+		 *            can be modified.
+		 * @param parentNewModifierPage
+		 *            the {@link NewModifierPage} that contains the parent
+		 *            {@link Composite}.
+		 */
+		public FeatureModifierComposite(final Composite parent,
+				final Identifiable identifiable,
+				final EStructuralFeature feature,
+				final PropertyStringProvider psp,
+				final IItemPropertyDescriptor descriptor,
+				final boolean modifiable,
+				final NewModifierPage parentNewModifierPage) {
+			super(parent, SWT.NONE);
+			final FormLayout layout = new FormLayout();
+			layout.spacing = 2;
+			setLayout(layout);
+
+			// Edit Composite Holder
+			editCompositeHolder = new Composite(this, SWT.NONE);
+			final FillLayout fillLayout = new FillLayout();
+			fillLayout.marginHeight = 0;
+			fillLayout.marginWidth = 0;
+			editCompositeHolder.setLayout(fillLayout);
+			editCompositeHolder.setToolTipText(psp
+					.getPropertyToolTip(descriptor));
+
+			// Units Label
+			final Label unitLabel = new Label(this, SWT.NONE);
+			unitLabel.setText(psp.getPropertyUnits(descriptor));
+			
+			// Radio button group
+			final Group group = new Group(this, SWT.SHADOW_ETCHED_IN);
+			group.setText("Select Modifier Type");
+			group.setLayout(new RowLayout(SWT.HORIZONTAL));
+			group.setEnabled(modifiable);
+			noneButton = new Button(group, SWT.RADIO);
+			noneButton.setText("None");
+			noneButton.setEnabled(modifiable);
+
+
+			// range button
+			singleButton = new Button(group, SWT.RADIO);
+			singleButton.setText(Messages.getString("Single.type"));
+			singleButton.setEnabled(modifiable);
+			
+			// range button
+			rangeButton = new Button(group, SWT.RADIO);
+			rangeButton.setText(Messages.getString("Range.type"));
+			rangeButton.setEnabled(modifiable);
+			
+			// sequence button
+			sequenceButton = new Button(group, SWT.RADIO);
+			sequenceButton.setText(Messages.getString("Sequence.type"));
+			sequenceButton.setEnabled(modifiable);
+
+			final int offset = 10;
+
+			// The left of the editCompositeHolder is attached to the left of
+			// the parent composite
+			FormData formData = new FormData();
+			formData.left = new FormAttachment(0, 0);
+			formData.top = new FormAttachment(0, offset);
+			editCompositeHolder.setLayoutData(formData);
+
+			// left->holder.right
+			// right->group
+			formData = new FormData();
+			formData.left = new FormAttachment(editCompositeHolder, 0,
+					SWT.RIGHT);
+			formData.right = new FormAttachment(group, 0, SWT.LEFT);
+			formData.bottom = new FormAttachment(editCompositeHolder, -3,
+					SWT.BOTTOM);
+			unitLabel.setLayoutData(formData);
+
+			// The right of the radio button composite is attached to the right
+			// of the parent composite.
+			formData = new FormData();
+			formData.right = new FormAttachment(100, 0);
+			group.setLayoutData(formData);
+
+			// This call takes the feature and adapts it to a modifier that does
+			// nothing. When we call setFeatureModifier that modifier is adapted
+			// to a FeatureModifierEditComposite (and assigned to
+			// editComposite). That composite doesn't allow editing, but,
+			// instead, displays a "default" representation of the feature's
+			// value. For a String, it would just display the value of the
+			// String, for a number it just displays a string representing the
+			// value of the number
+			setFeatureModifier(EStructuralFeatureFeatureModifierAdapterFactory.INSTANCE
+					.adapt(feature, NOPModifier.class));
+			switchToFeatureModifier(identifiable, parentNewModifierPage);
+
+			noneButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(
+						@SuppressWarnings("unused") final SelectionEvent e) {
+					// Put up the default?
+					if (noneButton.getSelection()
+							&& !(featureModifier instanceof NOPModifier)) {
+						// Yes
+						final FeatureModifier fm = EStructuralFeatureFeatureModifierAdapterFactory.INSTANCE
+						.adapt(feature, NOPModifier.class);
+						fm.setTarget(feature);
+						setFeatureModifier(fm);
+						switchToFeatureModifier(identifiable,
+								parentNewModifierPage);
+					} // if
+				}
+			});
+			
+			singleButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(
+						@SuppressWarnings("unused") final SelectionEvent e) {
+					// Put up the single value modifier?
+					if (singleButton.getSelection()
+							&& !(featureModifier instanceof SingleValueModifier)) {
+						// Yes
+						setFeatureModifier(EStructuralFeatureFeatureModifierAdapterFactory.INSTANCE
+								.adapt(feature, SingleValueModifier.class));
+						switchToFeatureModifier(identifiable,
+								parentNewModifierPage);
+						// selectRangeButton();
+					} // if
+				}
+			});
+			
+			rangeButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(
+						@SuppressWarnings("unused") final SelectionEvent e) {
+					// Put up the range modifier?
+					if (rangeButton.getSelection()
+							&& !(featureModifier instanceof RangeModifier)) {
+						// Yes
+						setFeatureModifier(EStructuralFeatureFeatureModifierAdapterFactory.INSTANCE
+								.adapt(feature, RangeModifier.class));
+						switchToFeatureModifier(identifiable,
+								parentNewModifierPage);
+						// selectRangeButton();
+					} // if
+				}
+			});
+			sequenceButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(
+						@SuppressWarnings("unused") final SelectionEvent e) {
+					// Put up the sequence modifier?
+					if (sequenceButton.getSelection()
+							&& !(featureModifier instanceof SequenceModifier)) {
+						// Yes
+						setFeatureModifier(EStructuralFeatureFeatureModifierAdapterFactory.INSTANCE
+								.adapt(feature, SequenceModifier.class));
+						switchToFeatureModifier(identifiable,
+								parentNewModifierPage);
+						// selectSequenceButton();
+					} // if
+				}
+			});
+			
+			// The Feature Modifier Composite must have 
+			// fixed size to put these in a scroll pane
+			setSize(500,150);
+
+		} // FeatureModifierComposite
+
+		void selectNoneButton() {
+			noneButton.setSelection(true);
+			singleButton.setSelection(false);
+			rangeButton.setSelection(false);
+			sequenceButton.setSelection(false);
+		} // selectNoneButton
+
+		FeatureModifierEditComposite createDefaultEditComposite(
+				final Composite parent,
+				final NewModifierPage parentNewModifierPage,
+				final Identifiable identifiable,
+				final EStructuralFeature feature) {
+			final FeatureModifierEditComposite retValue = new FeatureModifierEditComposite(
+					parent, parentNewModifierPage, null) {
+				@Override
+				protected boolean validate() {
+					return true;
+				}
+			};
+			retValue.setLayout(new GridLayout());
+			final Label label = new Label(retValue, SWT.BORDER | SWT.TRAIL);
+			label.setText(identifiable.eGet(feature).toString());
+			final GridData gridData = new GridData();
+			gridData.horizontalAlignment = SWT.END;
+			label.setLayoutData(gridData);
+			return retValue;
+		} // createDefaultEditComposite
+
+		void switchToFeatureModifier(final Identifiable identifiable,
+				final NewModifierPage parentNewModifierPage) {
+			// The target of the featureModifier needs to be adjusted here. It
+			// would typically be identifiable, but if identifiable is an
+			// instance of a StaticNodeLabel or StaticEdgeLabel then the
+			// features of the value of the current value feature of the
+			// identifiable have been included as features. The problem is that
+			// when that happens the target of the FeatureModifier needs to be
+			// the label value and not the identifiable.
+			// A static label?
+			if (identifiable instanceof StaticLabel
+					&& (identifiable.eClass() != featureModifier
+							.getEStructuralFeature().getEContainingClass())) {
+				// Yes
+				final StaticLabel staticLabel = (StaticLabel) identifiable;
+				final LabelValue lv = (LabelValue) staticLabel
+						.eGet(GraphPackage.Literals.LABEL__CURRENT_VALUE);
+				featureModifier.setTarget(lv);
+			} // if static label
+			else {
+				featureModifier.setTarget(identifiable);
+			}
+
+			final FeatureModifierEditCompositeAdapter fmecAdapter = (FeatureModifierEditCompositeAdapter) FeatureModifierFeatureModifierEditCompositeAdapterFactory.INSTANCE
+					.adapt(featureModifier,
+							FeatureModifierEditCompositeAdapter.class);
+			fmecAdapter.setTarget(featureModifier);
+			setEditComposite(fmecAdapter.createEditComposite(
+					editCompositeHolder, identifiable, parentNewModifierPage));
+			fmecAdapter.setSelectedButton(noneButton, singleButton, rangeButton,
+					sequenceButton);
+		} // switchToFeatureModifier
+
+		void setEditComposite(final FeatureModifierEditComposite editComposite) {
+			// Get rid of the old one?
+			if (this.editComposite != null) {
+				// Yes
+				this.editComposite.dispose();
+			} // if
+			this.editComposite = editComposite;
+			getShell().pack();
+			// getShell().layout();
+			getShell().layout(true, true);
+		} // setEditComposite
+
+		/**
+		 * @return the {@link FeatureModifier}, possibly <code>null</code>
+		 */
+		public final FeatureModifier getFeatureModifier() {
+			return featureModifier;
+		}
+
+		/**
+		 * @param featureModifier
+		 *            the {@link FeatureModifier} to set
+		 */
+		protected final void setFeatureModifier(
+				final FeatureModifier featureModifier) {
+			this.featureModifier = featureModifier;
+		}
+	} // FeatureModifierComposite
+
+	/**
+	 * This class is a {@link Composite} that allows a user to specify the
+	 * details of a {@link FeatureModifier}.
+	 */
+	abstract public static class FeatureModifierEditComposite extends Composite {
+
+		/**
+		 * This is the {@link FeatureModifier} that this {@link Composite} is
+		 * editing.
+		 */
+		protected FeatureModifier featureModifier = null;
+
+		/**
+		 * This is the {@link NewModifierPage} that is the ultimate parent of
+		 * the parent {@link Composite}
+		 */
+		protected NewModifierPage parentNewModifierPage;
+
+		protected ModifyListener modifyListener = new ModifyListener() {
+			public void modifyText(
+					@SuppressWarnings("unused") final ModifyEvent e) {
+				parentNewModifierPage.setPageComplete(validate());
+			}
+		};
+
+		/**
+		 * @param parent
+		 *            the parent {@link Composite}
+		 * @param parentNewModifierPage
+		 *            the ultimate parent {@link NewModifierPage} of the parent
+		 *            {@link Composite}
+		 * @param featureModifier
+		 *            the {@link FeatureModifier} being edited.
+		 */
+		public FeatureModifierEditComposite(final Composite parent,
+				final NewModifierPage parentNewModifierPage,
+				final FeatureModifier featureModifier) {
+			super(parent, SWT.NONE);
+			this.parentNewModifierPage = parentNewModifierPage;
+			this.featureModifier = featureModifier;
+		} // FeatureModifierEditComposite
+
+		/**
+		 * @return the {@link FeatureModifier}
+		 */
+		public final FeatureModifier getFeatureModifier() {
+			return featureModifier;
+		}
+
+		/**
+		 * @return the modifyListener
+		 */
+		public final ModifyListener getModifyListener() {
+			return modifyListener;
+		}
+
+		/**
+		 * As a side-effect this method sets the error message of the
+		 * {@link #parentNewModifierPage} if it returns <code>false</code>.
+		 * 
+		 * @return <code>true</code> if the
+		 *         {@link FeatureModifierEditComposite} is valid.
+		 */
+		abstract protected boolean validate();
+
+	} // FeatureModifierEditComposite
+} // NewModifierPage
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierWizard.java
new file mode 100644
index 0000000..bf61b89
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewModifierWizard.java
@@ -0,0 +1,220 @@
+// NewModifierWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Edge;
+import org.eclipse.stem.core.modifier.Modifier;
+import org.eclipse.stem.core.modifier.ModifierFactory;
+import org.eclipse.stem.core.modifier.ModifierPackage;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapter;
+import org.eclipse.stem.ui.adapters.newmodifierpage.NewModifierPageAdapterFactory;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link Modifier}s.
+ */
+public class NewModifierWizard extends NewIdentifiableWizard {
+
+	/**
+	 * This is the {@link Identifiable} for which the wizard is creating a
+	 * {@link Modifier}.
+	 */
+	private Identifiable identifiable;
+	private NewModifierPage newModifierPage;
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NModifierWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+
+		// We use an adapter factory to adapt the Identifiable into a
+		// NewModifierPage. We do this because the universe of Identifiables is
+		// unlimited. The number and types of fields can vary widely. The
+		// adapter factory is Composable which means that it maintains an
+		// extensible collection of other factories that can be used to perform
+		// the adaption. For instance, a new Decorator (a type of Identifiable)
+		// that implements a disease model computation can be adapted by the
+		// addition of a factory that recognizes it.
+		final NewModifierPageAdapter adapter = (NewModifierPageAdapter) NewModifierPageAdapterFactory.INSTANCE
+				.adapt(identifiable, NewModifierPageAdapter.class);
+		// Were we successful in adapting?
+		if (adapter != null) {
+			// Yes
+			adapter.setTarget(identifiable);
+			newModifierPage = adapter.createNewModifierPage();
+		} // if
+		else {
+			// No
+			Activator.logError(
+					"Internal Error: could not create NewModifierPage for \""
+							+ identifiable.getClass().getName() + "\"", null);
+			newModifierPage = new NewModifierPage(identifiable) {
+				@Override
+				protected Composite createSpecificComposite(
+						@SuppressWarnings("unused") final Composite parent) {
+					return null;
+				}
+			};
+		} // else
+
+		return newModifierPage;
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(ModifierPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.MODIFIER_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Modifier retValue = ModifierFactory.eINSTANCE.createModifier();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		// We allow Edges to be considered to be "modifiable", but we really
+		// mean that their labels can be modified. This is a convenience for the
+		// user so that they can right-click on an Edge and create a modifier
+		// for their label. The problem is that we've got to get the right
+		// target URI, if we just get the URI of the Identifiable (which could
+		// be an EdgeLabel) then we'd get the URI of the Edge and not its Label.
+
+		// Is this an Edge?
+		if (identifiable instanceof Edge) {
+			// Yes
+			final Edge edge = (Edge) identifiable;
+			retValue.setTargetURI(edge.getLabel().getURI());
+		} else {
+			retValue.setTargetURI(identifiable.getURI());
+		}
+		retValue.getFeatureModifiers().addAll(
+				newModifierPage.getFeatureModifiers());
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.MODIFIERS_FOLDER_NAME;
+	} // getSerializationFolderName
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return ModifierPackage.eNAME;
+	} // getIdentifiableSerializationFileExtension
+
+	/**
+	 * @param identifiable
+	 *            the {@link Identifiable} that the {@link Modifier} will
+	 *            modify.
+	 */
+	final public void setIdentifiable(final Identifiable identifiable) {
+		this.identifiable = identifiable;
+	}
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a new
+	 * ModifierWizard.
+	 */
+	public static class NewModifierWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+
+			final ISelection selection = HandlerUtil
+					.getCurrentSelectionChecked(executionEvent);
+
+			// Structured Selection?
+			if (selection instanceof StructuredSelection) {
+				// Yes
+				try {
+					final Object obj = ((StructuredSelection) selection).toArray()[0];
+					// We should be able to adapt this an Identifiable. The "core
+					// expressions" that define when the wizard can be created
+					// should prevent anything other an Identifiable, but we'll
+					// check to make sure.
+					final Identifiable identifiable = (Identifiable) Platform
+							.getAdapterManager()
+							.getAdapter(obj, Identifiable.class);
+					// Were we successful in adapting it?
+					if (identifiable != null) {
+						// Yes
+						final IWorkbenchWindow window = HandlerUtil
+								.getActiveWorkbenchWindowChecked(executionEvent);
+						final NewModifierWizard wizard = new NewModifierWizard();
+						wizard.setIdentifiable(identifiable);
+						wizard.init(window.getWorkbench(),
+								StructuredSelection.EMPTY);
+						final WizardDialog wizardDialog = new WizardDialog(window
+								.getShell(), wizard);
+						wizardDialog.open();
+					} // if
+					else {
+						// No
+						Activator.logError(
+								"Internal error: attempting to create Modifier Wizard for \""
+										+ obj.getClass().getName() + "\"", null);
+					} // else
+				} catch (ArrayIndexOutOfBoundsException ioobe) {
+					// Ignore, it just means there wasn't anything really selected.
+				}
+			} // if StructuredSelection
+
+			return null;
+		} // execute
+	} // NewModifierWizardCommandHandler
+} // NewModifierWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewPredicateWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewPredicateWizard.java
new file mode 100644
index 0000000..5e27ce2
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewPredicateWizard.java
@@ -0,0 +1,141 @@
+// NewPredicateWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.predicate.IdentifiablePredicateExpression;
+import org.eclipse.stem.core.predicate.PredicateFactory;
+import org.eclipse.stem.core.predicate.PredicatePackage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link org.eclipse.stem.core.predicate.Predicate}s
+ */
+public class NewPredicateWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NPredicateWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		return new NewPredicatePage();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(PredicatePackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.PREDICATE_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final IdentifiablePredicateExpression retValue = PredicateFactory.eINSTANCE
+				.createIdentifiablePredicateExpression();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.PREDICATES_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return PredicatePackage.eNAME;
+	}
+
+	protected static class NewPredicatePage extends NewIdentifiablePage {
+
+		/**
+		 * Default Constructor
+		 */
+		protected NewPredicatePage() {
+			super(Messages.getString("NPredicateWiz.page_title")); //$NON-NLS-1$
+			setTitle(Messages.getString("NPredicateWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages.getString("NPredicateWiz.page_description")); //$NON-NLS-1$
+		} // NewPredicatePage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NPredicateWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+	} // NewPredicatePage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewPredicateWizard}
+	 */
+	public static class NewPredicateWizardCommandHandler extends
+			AbstractHandler implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewPredicateWizard wizard = new NewPredicateWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewPredicateWizardCommandHandler
+} // NewPredicateWizard
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSTEMProjectWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSTEMProjectWizard.java
new file mode 100644
index 0000000..f907541
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSTEMProjectWizard.java
@@ -0,0 +1,322 @@
+// ProjectWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2006,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is an Eclipse {@link Wizard} for creating new STEM projects.
+ */
+public class NewSTEMProjectWizard extends Wizard implements INewWizard,
+		IExecutableExtension {
+
+	/**
+	 * This is the identifier of the {@link Wizard} that creates a STEM project.
+	 * * {@value}
+	 */
+	public static final String ID_STEM_PROJECT_WIZARD = Constants.ID_ROOT
+			+ ".ui.wizards.newstemproject"; //$NON-NLS-1$
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.graph.Graph} in a project.
+	 */
+	public static final String GRAPHS_FOLDER_NAME = "graphs";
+
+	/**
+	 * The name of the folder used to serialize Recorded Simulations in a project.
+	 */
+	public static final String RECORDED_SIMULATIONS_FOLDER_NAME = "Recorded Simulations";
+
+	
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.model.Model}s in a project.
+	 */
+	public static final String MODELS_FOLDER_NAME = "models";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.scenario.Scenario}s in a project.
+	 */
+	public static final String SCEANARIOS_FOLDER_NAME = "scenarios";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.model.Decorator}s in a project.
+	 */
+	public static final String DECORATORS_FOLDER_NAME = "decorators";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.sequencer.Sequencer}s in a project.
+	 */
+	public static final String SEQUENCERS_FOLDER_NAME = "sequencers";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.experiment.Experiment}s in a
+	 * project.
+	 */
+	public static final String EXPERIMENTS_FOLDER_NAME = "experiments";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.modifier.Modifier}s in a project.
+	 */
+	public static final String MODIFIERS_FOLDER_NAME = "modifiers";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.trigger.Trigger}s in a project.
+	 */
+	public static final String TRIGGERS_FOLDER_NAME = "triggers";
+
+	/**
+	 * The name of the folder used to serialize {@link org.eclipse.stem.core.predicate.Predicate}s in a project.
+	 */
+	public static final String PREDICATES_FOLDER_NAME = "predicates";
+
+	/**
+	 * This is the Wizard page presented to the user to get the information
+	 * necessary to create the new project.
+	 */
+	WizardNewProjectCreationPage newProjectPage = null;
+
+	/**
+	 * The names of the folders in each STEM project by default.
+	 */
+	private final String[] defaultFolders = { GRAPHS_FOLDER_NAME,
+			MODELS_FOLDER_NAME, SCEANARIOS_FOLDER_NAME, DECORATORS_FOLDER_NAME,
+			SEQUENCERS_FOLDER_NAME, EXPERIMENTS_FOLDER_NAME,
+			MODIFIERS_FOLDER_NAME, TRIGGERS_FOLDER_NAME, PREDICATES_FOLDER_NAME, RECORDED_SIMULATIONS_FOLDER_NAME};
+
+	/**
+	 * @inheritDoc
+	 */
+	public void init(@SuppressWarnings("unused") final IWorkbench workbench,
+			@SuppressWarnings("unused") final IStructuredSelection selection) {
+		setNeedsProgressMonitor(true);
+	} // init
+
+	/**
+	 * @inheritDoc
+	 */
+	@Override
+	public void addPages() {
+		super.addPages();
+		setWindowTitle(Messages.getString("NSTEMProWiz.title")); //$NON-NLS-1$
+		newProjectPage = new WizardNewProjectCreationPage(Messages
+				.getString("NSTEMProWiz.title")); //$NON-NLS-1$
+		newProjectPage.setTitle(Messages.getString("NSTEMProWiz.page_title")); //$NON-NLS-1$
+		newProjectPage.setDescription(Messages
+				.getString("NSTEMProWiz.page_description")); //$NON-NLS-1$
+		// TODO set icon for new STEM project wizard
+		// newProjectPage.setImageDescriptor(image);
+		addPage(newProjectPage);
+	} // addPages
+
+	/**
+	 * @inheritDoc
+	 */
+	@Override
+	public boolean performFinish() {
+		final boolean retValue = true;
+		try {
+			final WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+				@Override
+				protected void execute(final IProgressMonitor monitor) {
+					createProject(monitor == null ? new NullProgressMonitor()
+							: monitor);
+				} // execute
+			}; // WorkspaceModifyOperation
+
+			// The container is a IRunnableContext, we use it to run the
+			// potentially long operation of creating the project.
+			// The first argument of false indicates not to "fork", the second
+			// of "true" indicates that the operation is cancelable.
+			getContainer().run(false, true, op);
+		} // try
+		catch (final InvocationTargetException e) {
+			Activator.logError(ID_STEM_PROJECT_WIZARD, e);
+		} catch (final InterruptedException e) {
+			// This gets thrown if the operation is canceled
+			Activator.logInformation(ID_STEM_PROJECT_WIZARD, e);
+		}
+		return retValue;
+	} // performFinish
+
+	/**
+	 * Create the project.
+	 * 
+	 * @param monitor
+	 *            a progress monitor to report the progress in creating the
+	 *            project
+	 */
+	void createProject(IProgressMonitor monitor) {
+		// Was a progress monitor specified?
+		if (monitor == null) {
+			// No
+			monitor = new NullProgressMonitor();
+		}
+
+		monitor
+				.beginTask(
+						Messages.getString("NSTEMProWiz.title"), 1 + defaultFolders.length); //$NON-NLS-1$
+
+		try {
+			final IWorkspaceRoot root = ResourcesPlugin.getWorkspace()
+					.getRoot();
+
+			monitor.subTask(Messages.getString("NSTEMProWiz.creating_project")); //$NON-NLS-1$
+
+			final IProject project = root.getProject(newProjectPage
+					.getProjectName());
+			final IProjectDescription projectDescription = ResourcesPlugin
+					.getWorkspace().newProjectDescription(project.getName());
+
+			// Did the user change the location of the project?
+			if (!Platform.getLocation()
+					.equals(newProjectPage.getLocationPath())) {
+				// Yes
+				// ...new location then
+				projectDescription
+						.setLocation(newProjectPage.getLocationPath());
+			} // if new locations
+
+			// This project has a "STEM" nature
+			projectDescription
+					.setNatureIds(new String[] { Constants.ID_STEM_PROJECT_NATURE });
+
+			// Create the project
+			project.create(projectDescription, monitor);
+			monitor.worked(1);
+
+			monitor.subTask(Messages
+					.getString("NSTEMProWiz.creating_directories")); //$NON-NLS-1$
+
+			project.open(monitor);
+
+			final IPath projectPath = project.getFullPath();
+
+			// Create the default folders
+			for (final String folderName : defaultFolders) {
+				final IPath fullFolderPath = projectPath.append(folderName);
+
+				final IFolder folder = root.getFolder(fullFolderPath);
+				createFolder(folder, monitor);
+
+				monitor.worked(1);
+			} // for each default folder name
+			// monitor.subTask("stem.creating_files");
+
+			// Populate the new project with default files.
+			// final IPath
+		} // try
+		catch (final CoreException ce) {
+			Activator.logError(
+					Messages.getString("NSTEMProWiz.Create_Problem"), ce); //$NON-NLS-1$
+		} finally {
+			monitor.done();
+		}
+	} // createProject
+
+	/**
+	 * Create a folder in the project. All folders along the path will be
+	 * created as necessary.
+	 * 
+	 * @param folder
+	 *            the folder to create
+	 * @param monitor
+	 *            the monitor watching our progress
+	 * @throws CoreException
+	 */
+	private void createFolder(final IFolder folder,
+			final IProgressMonitor monitor) throws CoreException {
+		// Does the folder already exist?
+		if (!folder.exists()) {
+			// No
+			// Ok, get the would be parent of this folder.
+			final IContainer parent = folder.getParent();
+			// Is the parent also a folder?
+			if (parent instanceof IFolder) {
+				// Yes
+				// Does it exist?
+				if (!((IFolder) parent).exists()) {
+					// No
+					// Create it then
+					createFolder((IFolder) parent, monitor);
+				} // if parent doesn't exist
+			} // if parent a folder
+
+			// Now create this folder
+			folder.create(false, true, monitor);
+		} // if the folder doesn't already exist
+
+	} // createFolder
+
+	/**
+	 * @inheritDoc
+	 */
+	@SuppressWarnings("unused")
+	public void setInitializationData(final IConfigurationElement config,
+			final String propertyName, final Object data) throws CoreException {
+		// configElement = config;
+	} // setInitializationData
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewSTEMProjectWizard}
+	 */
+	public static class NewSTEMProjectWizardCommandHandler extends
+			AbstractHandler implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewSTEMProjectWizard wizard = new NewSTEMProjectWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewSTEMProjectWizardWizardCommandHandler
+
+} // ProjectWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewScenarioWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewScenarioWizard.java
new file mode 100644
index 0000000..05b7433
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewScenarioWizard.java
@@ -0,0 +1,297 @@
+// NewScenarioWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.core.scenario.ScenarioFactory;
+import org.eclipse.stem.core.scenario.ScenarioPackage;
+import org.eclipse.stem.core.solver.Solver;
+import org.eclipse.stem.core.solver.SolverPropertyComposite;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link Scenario}s.
+ */
+public class NewScenarioWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NScenarioWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		return new NewScenarioPage();
+	} // createNewIdentifiablePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.DublinCorePage#initializeDCFields()
+			 */
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(ScenarioPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.SCENARIO_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Scenario retValue = ScenarioFactory.eINSTANCE.createScenario();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		SolverPropertyComposite spc = ((NewScenarioPage)newIdentifiablePage).solverPC;
+		Solver s = spc.createSolver();
+		retValue.setSolver(s);
+		return retValue;
+	} // createSpecificIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.SCEANARIOS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return ScenarioPackage.eNAME;
+	}
+
+	protected static class NewScenarioPage extends NewIdentifiablePage {
+
+		private Solver [] solvers = null;
+		
+		SolverPropertyComposite solverPC;
+		
+		private Combo combo;
+		/**
+		 * Default Constructor
+		 */
+		protected NewScenarioPage() {
+			super(Messages.getString("NScenarioWiz.page_title")); //$NON-NLS-1$
+			setTitle(Messages.getString("NScenarioWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages.getString("NScenarioWiz.page_description")); //$NON-NLS-1$
+		} // NewScenarioPage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#createSpecificComposite(org.eclipse.swt.widgets.Composite)
+		 */
+		@Override
+		protected Composite createSpecificComposite(final Composite parent) {
+
+			Solver [] solvers = getSolvers();
+			
+			final Composite composite = new Composite(parent, SWT.NONE);
+
+			
+			final GridLayout gridLayout = new GridLayout();
+			gridLayout.marginWidth = 0;
+			gridLayout.numColumns = 1;
+			composite.setLayout(gridLayout);
+
+			final Label solverLabel = new Label(composite, SWT.NONE);
+			final GridData gd_solverLabel = new GridData(SWT.FILL, SWT.CENTER, true, false);
+			gd_solverLabel.widthHint = 100;
+			solverLabel.setLayoutData(gd_solverLabel);
+			solverLabel.setText(Messages.getString("NScenarioWiz.solver")); //$NON-NLS-1$
+
+			combo = new Combo(composite, SWT.READ_ONLY);
+			combo.setTextLimit(30);
+			final GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, true,
+					false);
+			gd_combo.widthHint = 303;
+			combo.setLayoutData(gd_combo);
+
+			combo.setToolTipText(Messages.getString("NScenarioWiz.solver")); //$NON-NLS-1$
+			// Initialize the list of disease models available
+			combo.setItems(getSolverNames(solvers));
+			// Set the one from preferences
+			
+			final NewScenarioPage self = this;
+			combo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					self.displaySolver(getSolvers()[combo
+									.getSelectionIndex()]);
+					// layout();
+				} // widgetSelected
+			});
+			
+			combo.select(0);
+			combo.addModifyListener(projectValidator);
+
+			solverPC = new SolverPropertyComposite(composite, 1, solvers, projectValidator);
+	
+			return composite;
+		} // createSpecificComposite
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NScenarioWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+		/**
+		 * 
+		 */
+		
+		private org.eclipse.stem.core.solver.Solver [] getSolvers() {
+			final Preferences preferences = org.eclipse.stem.ui.Activator.getDefault().getPluginPreferences();
+			String prefSolver = preferences.getString(org.eclipse.stem.ui.preferences.PreferenceConstants.DEFAULT_SOLVER);
+			
+			if (solvers == null) {
+				final IExtensionRegistry registry = Platform.getExtensionRegistry();
+				final IConfigurationElement[] solverConfigElements = registry
+						.getConfigurationElementsFor(org.eclipse.stem.core.Constants.ID_SOLVER_EXTENSION_POINT);
+
+				final List<Solver> temp = new ArrayList<Solver>();
+
+				solvers = new Solver[solverConfigElements.length];
+
+				for (int i = 0; i < solverConfigElements.length; i++) {
+					final IConfigurationElement element = solverConfigElements[i];
+					// Does the element specify the class of the disease model?
+					if (element.getName().equals(Constants.SOLVER_ELEMENT)) {
+						// Yes
+						try {
+							Solver s = (Solver) element.createExecutableExtension("class");
+								
+							if(s.getClass().getName().equals(prefSolver)&& i > 0) {
+									// Set the preference one on top
+									Solver tmp = temp.get(0);
+									temp.set(0, s);
+									temp.add(tmp);
+							} else
+							temp.add(s); //$NON-NLS-1$
+						} catch (final CoreException e) {
+							Activator.logError(
+									"Can't create solver", e); //$NON-NLS-1$
+						}
+					} // if
+				} // for each configuration element
+
+				solvers = temp.toArray(new Solver[] {});
+			} // if disesaeModels not created
+
+			return solvers;
+		}
+
+		/**
+		 * @return the names of the solvers
+		 */
+		private String[] getSolverNames(final Solver[] solvers) {
+			final Preferences preferences = org.eclipse.stem.ui.Activator.getDefault().getPluginPreferences();
+			String prefSolver = preferences.getString(org.eclipse.stem.ui.preferences.PreferenceConstants.DEFAULT_SOLVER);
+			
+			final String[] retValue = new String[solvers.length];
+			String firstOne = null;
+			for (int i = 0; i < solvers.length; i++) {
+				String name = solvers[i].getDublinCore().getTitle();
+				// Was a name specified?
+				if ((name == null) || name.equals("")) { //$NON-NLS-1$
+					// No
+					name = solvers[i].getClass().getSimpleName();
+				} // if
+				if(solvers[i].getClass().getName().equals(prefSolver)&& i > 0) {
+					// Set the preference one on top
+					String tmp = retValue[0];
+					retValue[0] = name;
+					retValue[i] = tmp;
+				}
+				else retValue[i] = name;
+			} // for i
+			return retValue;
+		} // getDiseaseModelNames
+		
+		void displaySolver(final Solver solver) {
+			solverPC.displaySolver(solver);
+		} // displaySolver
+	} // NewScenarioPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewScenarioWizard}
+	 */
+	public static class NewScenarioWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewScenarioWizard wizard = new NewScenarioWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewScenarioWizardCommandHandler
+} // NewScenarioWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequencerWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequencerWizard.java
new file mode 100644
index 0000000..8fe9bfb
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequencerWizard.java
@@ -0,0 +1,72 @@
+// NewSequencerWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.sequencer.SequencerPackage;
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link org.eclipse.stem.core.sequencer.Sequencer}s
+ */
+abstract public class NewSequencerWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(SequencerPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.SEQUENCER_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.SEQUENCERS_FOLDER_NAME;
+	} // getFolderName
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return SequencerPackage.eNAME;
+	}
+
+	/**
+	 * This class represents a Wizard page for specifying a
+	 * {@link org.eclipse.stem.core.sequencer.Sequencer}
+	 */
+	abstract protected static class SequencerPage extends NewIdentifiablePage {
+		/**
+		 * @param pageName
+		 *            the name of the page
+		 */
+		protected SequencerPage(final String pageName) {
+			super(pageName);
+		}
+
+	} // SequencerPage
+
+} // NewSequencerWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequentialSequencerWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequentialSequencerWizard.java
new file mode 100644
index 0000000..3b188c0
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewSequentialSequencerWizard.java
@@ -0,0 +1,657 @@
+// NewSequentialSequencerWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.text.MessageFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.common.impl.DublinCoreImpl;
+import org.eclipse.stem.core.model.ModelFactory;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.core.sequencer.RealTimeSequencer;
+import org.eclipse.stem.core.sequencer.SequencerFactory;
+import org.eclipse.stem.core.sequencer.SequentialSequencer;
+import org.eclipse.stem.ui.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DateTime;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * This class is a Wizard for making new STEM {@link SequentialSequencer}s.
+ */
+abstract public class NewSequentialSequencerWizard extends NewSequencerWizard {
+
+	abstract protected static class SequentialSequencerPage extends
+			SequencerPage {
+
+		/**
+		 * This is the initial value of the cycle time text field.
+		 */
+		protected static final String DEFAULT_CYCLE_PERIOD_TIME_VALUE = "1";
+
+		private static final STEMTime.Units DEFAULT_CYCLE_PERIOD_TIME_UNIT = STEMTime.Units.DAY;
+
+		private static final String[] cyclePeriodTimeUnitStringsPlural = {
+				Messages.getString("NSequencerWiz.milliseconds"),
+				Messages.getString("NSequencerWiz.seconds"),
+				Messages.getString("NSequencerWiz.minutes"),
+				Messages.getString("NSequencerWiz.hours"),
+				Messages.getString("NSequencerWiz.days") };
+
+		private static final String[] cyclePeriodTimeUnitStringsSingular = {
+				Messages.getString("NSequencerWiz.millisecond"),
+				Messages.getString("NSequencerWiz.second"),
+				Messages.getString("NSequencerWiz.minute"),
+				Messages.getString("NSequencerWiz.hour"),
+				Messages.getString("NSequencerWiz.day") };
+
+		// This is the (simulated) time period between successive simulation
+		// cycles.
+		private Text cyclePeriodTimeValueField;
+
+		private Combo cyclePeriodTimeComboBox;
+
+		/**
+		 * Constructor
+		 */
+		public SequentialSequencerPage() {
+			super(Messages.getString("NSeqSequencerWiz.page_title"));
+			setTitle(Messages.getString("NSeqSequencerWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages
+					.getString("NSeqSequencerWiz.page_description")); //$NON-NLS-1$
+		} // SequencerPage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#createSpecificComposite(org.eclipse.swt.widgets.Composite)
+		 */
+		@Override
+		protected Composite createSpecificComposite(final Composite parent) {
+
+			final Composite composite = new Composite(parent, SWT.NONE);
+
+			final GridLayout layout = new GridLayout();
+			layout.numColumns = 3;
+			layout.verticalSpacing = 12;
+			layout.marginHeight = 0;
+			layout.marginWidth = 0;
+			composite.setLayout(layout);
+
+			final GridData compositeGridLayoutData = new GridData();
+			compositeGridLayoutData.horizontalAlignment = GridData.FILL;
+			composite.setLayoutData(compositeGridLayoutData);
+
+			// Cycle Period Time label
+			final Label cycleTimeLabel = new Label(composite, SWT.NONE);
+			cycleTimeLabel.setText(Messages
+					.getString("NSequencerWiz.cycleTime") + ":"); //$NON-NLS-1$ //$NON-NLS-2$
+			final GridData cycleTimeLabelLayoutData = new GridData();
+			cycleTimeLabelLayoutData.horizontalSpan = 1;
+			cycleTimeLabelLayoutData.horizontalAlignment = SWT.LEAD;
+			cycleTimeLabel.setLayoutData(cycleTimeLabelLayoutData);
+
+			cyclePeriodTimeValueField = new Text(composite, SWT.BORDER);
+			cyclePeriodTimeValueField.setText(DEFAULT_CYCLE_PERIOD_TIME_VALUE);
+			final GridData cycleTimeValueLayoutData = new GridData();
+			cycleTimeValueLayoutData.horizontalAlignment = GridData.FILL;
+			cycleTimeValueLayoutData.grabExcessHorizontalSpace = true;
+			cycleTimeValueLayoutData.horizontalSpan = 1;
+			cyclePeriodTimeValueField.setLayoutData(cycleTimeValueLayoutData);
+
+			cyclePeriodTimeValueField.addModifyListener(projectValidator);
+
+			cyclePeriodTimeComboBox = new Combo(composite, SWT.DROP_DOWN
+					| SWT.READ_ONLY);
+			cyclePeriodTimeComboBox.setItems(cyclePeriodTimeUnitStringsPlural);
+			cyclePeriodTimeComboBox.select(DEFAULT_CYCLE_PERIOD_TIME_UNIT
+					.ordinal());
+			final GridData cycleTimeComboBoxLayoutData = new GridData();
+			cycleTimeComboBoxLayoutData.horizontalAlignment = SWT.TRAIL;
+			cycleTimeComboBoxLayoutData.horizontalSpan = 1;
+			cyclePeriodTimeComboBox.setLayoutData(cycleTimeComboBoxLayoutData);
+
+			final Composite sequencerSpecificControl = createSequentialSequencerSpecificComposite(composite);
+			final GridData sequencerSpecificControlLayoutData = new GridData();
+			sequencerSpecificControlLayoutData.horizontalAlignment = GridData.FILL;
+			sequencerSpecificControlLayoutData.grabExcessHorizontalSpace = true;
+			sequencerSpecificControlLayoutData.horizontalSpan = 2;
+			sequencerSpecificControl
+					.setLayoutData(sequencerSpecificControlLayoutData);
+
+			return composite;
+
+		} // createSpecificComposite
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#validatePage()
+		 */
+		@Override
+		protected boolean validatePage() {
+			boolean retValue = super.validatePage();
+
+			// Cycle value?
+			if (retValue) {
+				try {
+					// Yes
+					final int cycleTimeValue = Integer
+							.parseInt(cyclePeriodTimeValueField.getText());
+					// Is the cycle time non-zero and positive?
+					if (cycleTimeValue < 1) {
+						// No
+						retValue = false;
+						setErrorMessage(Messages
+								.getString("NSeqSequencerWiz.cycleTimeErr"));
+					} // if
+				} catch (final NumberFormatException e) {
+					retValue = false;
+					setErrorMessage(Messages
+							.getString("NSeqSequencerWiz.cycleTimeFormatErr"));
+				} // catch NumberFormatException
+			} // if
+
+			return retValue;
+		} // validatePage
+
+		/**
+		 * @return the duration in milliseconds of one cycle
+		 */
+		protected long getCycleDuration() {
+			long retValue = 1;
+			final String cyclePeriodTimeString = cyclePeriodTimeValueField
+					.getText();
+
+			final long cycleDuration = STEMTime.Units.values()[cyclePeriodTimeComboBox
+					.getSelectionIndex()].getMilliseconds();
+
+			try {
+				final int cycleTimeValue = Integer
+						.parseInt(cyclePeriodTimeString);
+				retValue = cycleTimeValue * cycleDuration;
+			} catch (final Exception e) {
+				Activator.logError("NewRealTimeSequentialSequencer", e);
+			}
+			return retValue;
+		} // getCycleDuration
+
+		/**
+		 * @return a locale specific string that describes the duration
+		 */
+		protected String getCycleDurationDescription() {
+			final String cyclePeriodTimeString = cyclePeriodTimeValueField
+					.getText();
+			final StringBuilder sb = new StringBuilder(cyclePeriodTimeString);
+			sb.append(" ");
+			sb
+					.append("1".equals(cyclePeriodTimeString) ? cyclePeriodTimeUnitStringsSingular[cyclePeriodTimeComboBox
+							.getSelectionIndex()]
+							: cyclePeriodTimeUnitStringsPlural[cyclePeriodTimeComboBox
+									.getSelectionIndex()]);
+			return sb.toString();
+		} // getCycleDurationDescription
+
+		/**
+		 * @param parent
+		 * @return TODO
+		 */
+		abstract protected Composite createSequentialSequencerSpecificComposite(
+				Composite parent);
+
+	} // SequentialSequencerPage
+
+	/**
+	 * This class is a {@link NewSequentialSequencerWizard} for creating
+	 * {@link SequentialSequencer}s with fixed cycle times.
+	 */
+	public static class NewFixedSequentialSequencerWizard extends
+			NewSequentialSequencerWizard {
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+		 */
+		@Override
+		protected String getWizardTitle() {
+			return Messages.getString("NSeqSequencerWiz.wizard_title"); //$NON-NLS-1$
+		} // getWizardTitle
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+		 */
+		@Override
+		protected NewIdentifiablePage createNewIdentifiablePage() {
+			return new FixedSequentialSequencerPage();
+		} // createNewIdentifiablePage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+		 */
+		@Override
+		protected Identifiable createIdentifiable() {
+			final SequentialSequencer retValue = SequencerFactory.eINSTANCE
+					.createSequentialSequencer();
+			retValue.setDublinCore(newDublinCorePage.createDublinCore());
+
+			final Date startDate = ((FixedSequentialSequencerPage) newIdentifiablePage)
+					.getStartDate();
+			
+			final Date endDate = ((FixedSequentialSequencerPage) newIdentifiablePage)
+					.getEndDate();
+
+			try {
+				retValue
+						.setTimeIncrement(((FixedSequentialSequencerPage) newIdentifiablePage)
+								.getCycleDuration());
+
+				final STEMTime startTime = ModelFactory.eINSTANCE
+						.createSTEMTime();
+				startTime.setTime(startDate);
+				
+				retValue.setStartTime(startTime);
+
+				// Was an end date specified?
+				if (endDate != null) {
+					// Yes
+					final STEMTime endTime = ModelFactory.eINSTANCE
+							.createSTEMTime();
+					endTime.setTime(endDate);
+					retValue.setEndTime(endTime);
+				} // if end date
+			} catch (final Exception e) {
+				Activator.logError("NewSequentialSequencer", e);
+			}
+			return retValue;
+		} // createSpecificIdentifiable
+
+		/**
+		 * This class represents a {@link SequentialSequencerPage} for fixed
+		 * dates.
+		 */
+		protected static class FixedSequentialSequencerPage extends
+				SequentialSequencerPage {
+
+			private static final boolean END_DATE_INITIALLY_ENABLED = false;
+
+			// This is the start date of the sequencer
+			Button endDateEnabledButton;
+			private DateTime startDate;
+			DateTime endDate;
+
+			/**
+			 * @return the starting {@link Date}
+			 */
+			public Date getStartDate() {
+				final Calendar startCalendar = Calendar.getInstance();
+				// use a time of day set to noon so on daylight savings time
+				//the actual date changes ok.
+				startCalendar.set(startDate.getYear(), startDate.getMonth(),
+						startDate.getDay(), 12, 0, 0);
+				return startCalendar.getTime();
+			} // getStartDate
+
+			/**
+			 * @return the ending {@link Date}, or <code>null</code> if no
+			 *         end date was specified.
+			 */
+			public Date getEndDate() {
+				Date retValue = null;
+				// Is the end date enabled?
+				if (endDateEnabledButton.getSelection()) {
+					// Yes
+					final Calendar endCalendar = Calendar.getInstance();
+					// use a time of day set to noon so on daylight savings time
+					//the actual date changes ok.
+					endCalendar.set(endDate.getYear(), endDate.getMonth(),
+							endDate.getDay(), 11, 59, 59);
+					retValue = endCalendar.getTime();
+				} // if
+				return retValue;
+			} // getEndDate
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#validatePage()
+			 */
+			@Override
+			protected boolean validatePage() {
+				boolean retValue = super.validatePage();
+
+				// Does the super class have any problems?
+				if (retValue) {
+					// No
+					// Is the end date enabled?
+					if (endDateEnabledButton.getSelection()) {
+						// Yes
+						
+						// end year before start?
+						if (endDate.getYear() < startDate.getYear()) {
+							retValue = false;
+						} else
+						// is same year but month before current month ?
+						if ((endDate.getYear() == startDate.getYear()) && (endDate.getMonth() < startDate.getMonth())) {
+							// yes - problem
+							retValue = false;
+						} else
+						// is same year and same month bud day before current day ?
+						if ((endDate.getYear() == startDate.getYear()) && (endDate.getMonth() == startDate.getMonth()) && (endDate.getDay() <= startDate.getDay())) {
+							// yes - problem
+							retValue = false;
+						}
+								
+						if(!retValue) setErrorMessage(Messages.getString("NSeqSequencerWiz.endBeforeErr"));
+							
+					} // if end date
+				} // if super page ok
+				return retValue;
+			} // validatePage
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard.SequentialSequencerPage#createSequentialSequencerSpecificComposite(org.eclipse.swt.widgets.Composite)
+			 */
+			@Override
+			protected Composite createSequentialSequencerSpecificComposite(
+					final Composite parent) {
+				final Composite composite = new Composite(parent, SWT.NONE);
+
+				final GridLayout layout = new GridLayout();
+				layout.numColumns = 2;
+				layout.verticalSpacing = 12;
+				layout.marginHeight = 0;
+				layout.marginWidth = 0;
+				composite.setLayout(layout);
+
+				final GridData compositeGridLayoutData = new GridData();
+				compositeGridLayoutData.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(compositeGridLayoutData);
+
+				new Label(composite, SWT.NONE);
+
+				final Label startDateLabel = new Label(composite, SWT.CENTER);
+				startDateLabel.setLayoutData(new GridData());
+				startDateLabel.setText(Messages
+						.getString("NSeqSequencerWiz.startTime")
+						+ ":");
+				new Label(composite, SWT.NONE);
+
+				startDate = new DateTime(composite, SWT.CALENDAR);
+				startDate.setLayoutData(new GridData());
+				startDate.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(
+							@SuppressWarnings("unused") final SelectionEvent e) {
+						setPageComplete(validatePage());
+					}
+				});
+				new Label(composite, SWT.NONE);
+
+				endDateEnabledButton = new Button(composite, SWT.CHECK);
+				endDateEnabledButton.setText(Messages
+						.getString("NSeqSequencerWiz.endTime")
+						+ ":");
+				endDateEnabledButton.setLayoutData(new GridData());
+				endDateEnabledButton
+						.addSelectionListener(new SelectionAdapter() {
+							@Override
+							public void widgetSelected(
+									@SuppressWarnings("unused") final SelectionEvent e) {
+								endDate.setEnabled(endDateEnabledButton
+										.getSelection());
+								setPageComplete(validatePage());
+							}
+						});
+				new Label(composite, SWT.NONE);
+
+				endDate = new DateTime(composite, SWT.CALENDAR);
+				endDate.setEnabled(END_DATE_INITIALLY_ENABLED);
+				endDate.setLayoutData(new GridData());
+				endDate.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(
+							@SuppressWarnings("unused") final SelectionEvent e) {
+						setPageComplete(validatePage());
+					}
+				});
+				return composite;
+			} // createSequentialSequencerSpecificComposite
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard.SequentialSequencerPage#getDCTitle()
+			 */
+			@Override
+			protected String getDCTitle() {
+				String retValue = null;
+				final String startDateString = DublinCoreImpl
+						.createISO8601DateString(getStartDate());
+				final Date endDate = getEndDate();
+				final String endDateString = endDate != null ? DublinCoreImpl
+						.createISO8601DateString(endDate) : null;
+
+				// Was an end date specified?
+				if (endDateString != null && !endDateString.equals("")) {
+					// Yes
+					retValue = MessageFormat.format(Messages
+							.getString("NSeqSequencerWiz.DC_TITLE1"),
+							new Object[] { startDateString, endDateString,
+									getCycleDurationDescription() });
+				} // if end date
+				else {
+					// No
+					retValue = MessageFormat.format(Messages
+							.getString("NSeqSequencerWiz.DC_TITLE2"),
+							new Object[] { startDateString,
+									getCycleDurationDescription() });
+				} // else
+				return retValue;
+			} // getDCTitle
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+			 */
+			@Override
+			protected String getDCDescription() {
+				String retValue = null;
+				final String startDateString = DublinCoreImpl
+						.createISO8601DateString(getStartDate());
+				final Date endDate = getEndDate();
+				final String endDateString = endDate != null ? DublinCoreImpl
+						.createISO8601DateString(endDate) : null;
+
+				// Was an end date specified?
+				if (endDateString != null && !endDateString.equals("")) {
+					// Yes
+					retValue = MessageFormat.format(Messages
+							.getString("NSeqSequencerWiz.DC_DESCRIPTION1"),
+							new Object[] { startDateString, endDateString,
+									getCycleDurationDescription() });
+				} // if end date
+				else {
+					// No
+					retValue = MessageFormat.format(Messages
+							.getString("NSeqSequencerWiz.DC_DESCRIPTION2"),
+							new Object[] { startDateString,
+									getCycleDurationDescription() });
+				} // else
+
+				return retValue;
+			} // getDCDescription
+
+			/**
+			 * @return a string suitable for
+			 *         {@link org.eclipse.stem.core.common.DublinCore#setValid(String)}
+			 */
+			@Override
+			protected String getDCValidDateRange() {
+				final StringBuilder sb = new StringBuilder("start=");
+
+				sb.append(DublinCoreImpl
+						.createISO8601DateString(getStartDate()));
+
+				sb.append(";");
+
+				// End date?
+				final Date endDate = getEndDate();
+				if (endDate != null) {
+					// Yes
+					sb.append(" end=");
+					sb.append(DublinCoreImpl.createISO8601DateString(endDate));
+					sb.append(";");
+				} // if
+				return sb.toString();
+			} // getValidDateRange
+		} // FixedSequentialSequencerPage
+
+		/**
+		 * This class is a {@link IHandler} for the command that creates a
+		 * {@link NewSequentialSequencerWizard}
+		 */
+		public static class NewSequentialSequencerWizardCommandHandler extends
+				AbstractHandler implements IHandler {
+
+			/**
+			 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+			 */
+			public Object execute(final ExecutionEvent executionEvent)
+					throws ExecutionException {
+				final IWorkbenchWindow window = HandlerUtil
+						.getActiveWorkbenchWindowChecked(executionEvent);
+				final NewFixedSequentialSequencerWizard wizard = new NewFixedSequentialSequencerWizard();
+				wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+				final WizardDialog wizardDialog = new WizardDialog(window
+						.getShell(), wizard);
+				wizardDialog.open();
+				return null;
+			} // execute
+		} // NewSequentialSequencerWizardCommandHandler
+	} // NewFixedSequentialSequencerWizard
+
+	/**
+	 * This class is a Wizard for making new STEM {@link RealTimeSequencer}s.
+	 */
+	public static class NewRealTimeSequencerWizard extends
+			NewSequentialSequencerWizard {
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+		 */
+		@Override
+		protected String getWizardTitle() {
+			return Messages.getString("NRTSequencerWiz.wizard_title"); //$NON-NLS-1$
+		} // getWizardTitle
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+		 */
+		@Override
+		protected NewIdentifiablePage createNewIdentifiablePage() {
+			return new RealTimeSequentialSequencerPage();
+		} // createNewIdentifiablePage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+		 */
+		@Override
+		protected Identifiable createIdentifiable() {
+			final RealTimeSequencer retValue = SequencerFactory.eINSTANCE
+					.createRealTimeSequencer();
+			retValue.setDublinCore(newDublinCorePage.createDublinCore());
+			retValue
+					.setTimeIncrement(((RealTimeSequentialSequencerPage) newIdentifiablePage)
+							.getCycleDuration());
+			return retValue;
+		} // createSpecificIdentifiable
+
+		/**
+		 * This class represents a {@link SequentialSequencerPage} for a
+		 * {@link RealTimeSequencer}s.
+		 */
+		protected static class RealTimeSequentialSequencerPage extends
+				SequentialSequencerPage {
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard.SequentialSequencerPage#createSequentialSequencerSpecificComposite(org.eclipse.swt.widgets.Composite)
+			 */
+			@Override
+			protected Composite createSequentialSequencerSpecificComposite(
+					final Composite parent) {
+				final Composite composite = new Composite(parent, SWT.NONE);
+				return composite;
+			} // createSequentialSequencerSpecificComposite
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard.SequentialSequencerPage#getDCTitle()
+			 */
+			@Override
+			protected String getDCTitle() {
+				return MessageFormat.format(Messages
+						.getString("NSRTSequencerWiz.DC_TITLE"),
+						new Object[] { getCycleDurationDescription() });
+			} // getDCTitle
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+			 */
+			@Override
+			protected String getDCDescription() {
+				return MessageFormat.format(Messages
+						.getString("NSRTSequencerWiz.DC_DESCRIPTION1"),
+						new Object[] { getCycleDurationDescription() });
+			} // getDCDescription
+
+			/**
+			 * @see org.eclipse.stem.ui.wizards.NewSequentialSequencerWizard.SequentialSequencerPage#getDCValidDateRange()
+			 */
+			@Override
+			protected String getDCValidDateRange() {
+				return "";
+			} // getValidDateRange
+
+		} // RealTimeSequentialSequencerPage
+
+		/**
+		 * This class is a {@link IHandler} for the command that creates a
+		 * {@link NewSequentialSequencerWizard}
+		 */
+		public static class NewRealTimeSequencerWizardCommandHandler extends
+				AbstractHandler implements IHandler {
+
+			/**
+			 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+			 */
+			public Object execute(final ExecutionEvent executionEvent)
+					throws ExecutionException {
+				final IWorkbenchWindow window = HandlerUtil
+						.getActiveWorkbenchWindowChecked(executionEvent);
+				final NewRealTimeSequencerWizard wizard = new NewRealTimeSequencerWizard();
+				wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+				final WizardDialog wizardDialog = new WizardDialog(window
+						.getShell(), wizard);
+				wizardDialog.open();
+				return null;
+			} // execute
+		} // NewRealTimeSequencerWizardCommandHandler
+	} // NewRealTimeSequencerWizard
+} // NewSequentialSequencerWizard
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewTriggerWizard.java b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewTriggerWizard.java
new file mode 100644
index 0000000..49481c2
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/NewTriggerWizard.java
@@ -0,0 +1,142 @@
+// NewTriggerWizard.java
+package org.eclipse.stem.ui.wizards;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.core.STEMURI;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.trigger.Trigger;
+import org.eclipse.stem.core.trigger.TriggerFactory;
+import org.eclipse.stem.core.trigger.TriggerPackage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+
+/**
+ * This class is a {@link NewIdentifiableWizard} for that creates new STEM
+ * {@link Trigger}s
+ */
+public class NewTriggerWizard extends NewIdentifiableWizard {
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getWizardTitle()
+	 */
+	@Override
+	protected String getWizardTitle() {
+		return Messages.getString("NTriggerWiz.wizard_title"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createNewIdentifiablePage()
+	 */
+	@Override
+	protected NewIdentifiablePage createNewIdentifiablePage() {
+		return new NewTriggerPage();
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createDublinCorePage()
+	 */
+	@Override
+	protected DublinCorePage createDublinCorePage() {
+		return new DublinCorePage() {
+			@Override
+			protected void initializeDCAttributes() {
+				super.initializeDCAttributes();
+				format.setText(TriggerPackage.eNS_URI);
+				format.setEnabled(false);
+				type.setText(STEMURI.TRIGGER_TYPE_URI.toString());
+				type.setEnabled(false);
+			}
+		};
+	} // createDublinCorePage
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#createIdentifiable()
+	 */
+	@Override
+	protected Identifiable createIdentifiable() {
+		final Trigger retValue = TriggerFactory.eINSTANCE.createTrigger();
+		retValue.setDublinCore(newDublinCorePage.createDublinCore());
+		return retValue;
+	} // createIdentifiable
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFolderName()
+	 */
+	@Override
+	protected String getSerializationFolderName() {
+		return NewSTEMProjectWizard.TRIGGERS_FOLDER_NAME;
+	}
+
+	/**
+	 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard#getSerializationFileNameExtension()
+	 */
+	@Override
+	protected String getSerializationFileNameExtension() {
+		return TriggerPackage.eNAME;
+	}
+
+	protected static class NewTriggerPage extends NewIdentifiablePage {
+
+		/**
+		 * Default Constructor
+		 */
+		protected NewTriggerPage() {
+			super(Messages.getString("NTriggerWiz.page_title")); //$NON-NLS-1$
+			setTitle(Messages.getString("NTriggerWiz.page_title")); //$NON-NLS-1$
+			setDescription(Messages.getString("NTriggerWiz.page_description")); //$NON-NLS-1$
+		} // NewTriggerPage
+
+		/**
+		 * @see org.eclipse.stem.ui.wizards.NewIdentifiableWizard.NewIdentifiablePage#getDCDescription()
+		 */
+		@Override
+		protected String getDCDescription() {
+			return MessageFormat.format(Messages
+					.getString("NTriggerWiz.DC_DESCRIPTION"),
+					new Object[] { serializationFileNameField.getText() });
+		} // getDCDescription
+
+	} // NewTriggerPage
+
+	/**
+	 * This class is a {@link IHandler} for the command that creates a
+	 * {@link NewTriggerWizard}
+	 */
+	public static class NewTriggerWizardCommandHandler extends AbstractHandler
+			implements IHandler {
+
+		/**
+		 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+		 */
+		public Object execute(final ExecutionEvent executionEvent)
+				throws ExecutionException {
+			final IWorkbenchWindow window = HandlerUtil
+					.getActiveWorkbenchWindowChecked(executionEvent);
+			final NewTriggerWizard wizard = new NewTriggerWizard();
+			wizard.init(window.getWorkbench(), StructuredSelection.EMPTY);
+			final WizardDialog wizardDialog = new WizardDialog(window
+					.getShell(), wizard);
+			wizardDialog.open();
+			return null;
+		} // execute
+	} // NewTriggerWizardCommandHandler
+	
+} // NewTriggerWizard
\ No newline at end of file
diff --git a/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/messages.properties b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/messages.properties
new file mode 100644
index 0000000..f3eb162
--- /dev/null
+++ b/org.eclipse.stem.ui/src/org/eclipse/stem/ui/wizards/messages.properties
@@ -0,0 +1,170 @@
+# WizardMessages.properties
+#
+#/*******************************************************************************
+# * Copyright (c) 2006 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# New Project Wizard
+NSTEMProWiz.page_title = Specify the name of the new STEM Project
+NSTEMProWiz.title = Create a STEM project
+NSTEMProWiz.page_description = Create a new STEM project in the workspace or in an external location.
+NSTEMProWiz.creating_directories = Creating project directories
+NSTEMProWiz.creating_project = Creating new STEM project
+
+NSTEMProWiz.graph_folder = Graphs
+NSTEMProWiz.model_folder = Models
+NSTEMProWiz.scenario_folder = Scenarios
+NSTEMProWiz.decorator_folder = Decorators
+NSTEMProWiz.Create_Problem=Problem creating project
+
+# New Identifier Wizard (super class to Graph/Model/Scenario wizards
+NIdWiz.creating=Creating
+NIdWiz.browse=Browse
+NIdWiz.project=Project
+NIdWiz.name=Name
+NIdWiz.noProjErr=No projects exist
+NIdWiz.nameMissingErr=Name is missing
+NIdWiz.nameErr=Invalid Name
+NIdWiz.saveErr=Problem Saving
+
+# Dublin Core Page
+NDublinCore.page_title = Dublin Core
+NDublinCore.page_description = Initialize the Dublin Core Metadata.
+
+NDublinCore.title=Title
+NDublinCore.titleDesc=A name given to the resource.  Usually the formal name of the resource.
+NDublinCore.desc=Description
+NDublinCore.descDesc=An account of the content of the resource.  Typically a short abstract.
+NDublinCore.creator=Creator
+NDublinCore.creatorDesc=An entity primarily responsible for making the content of the resource.  Typically the name of a person or organization.
+NDublinCore.date=Date
+NDublinCore.dateDesc=A date associated with an event in the life cycle of the resource.  Typically YYYY-MM-DD. e.g. 2007-01-18
+NDublinCore.valid=Valid
+NDublinCore.validDesc=Date (often a range) of validity of a resource. e.g. start=2006-03-29; end=2006-03-30; or simply start=2006-03-29; if there is no end to the validity.
+NDublinCore.created=Created
+NDublinCore.createdDesc=The creation date of the resource.  Typically YYYY-MM-DD. e.g. 2007-01-18
+NDublinCore.source=Source
+NDublinCore.sourceDesc=A reference to a resource from which the present resource is derived. The original source of the contents of the resource. e.g. a URL.
+NDublinCore.publisher=Publisher
+NDublinCore.publisherDesc=An entity responsible for making the resource available.  Typically the name of a person, organization or service.
+NDublinCore.coverage=Coverage
+NDublinCore.coverageDesc=The extent or scope of the content of the resource.  Could include spatial location, temporal period (date or date range), jurisdiction, etc.
+NDublinCore.contributor=Contributor
+NDublinCore.contributorDesc=An entity responsible for making contributions to the resource.  Typically the name of a person, organization or service.
+NDublinCore.relation=Relation
+NDublinCore.relationDesc=A reference to a related resource. e.g. a URL
+NDublinCore.rights=Rights
+NDublinCore.rightsDesc=Information about rights held in and over the resource.  Typically, a rights management statement. e.g. Copyright FooBar 2006
+NDublinCore.subject=Subject
+NDublinCore.subjectDesc=The topic of the content of the resource.  Typically keywords or classification codes.
+NDublinCore.language=Language
+NDublinCore.languageDesc=A language of the intellectual content of the resource. e.g. en-GB
+NDublinCore.citation=Citation
+NDublinCore.citationDesc=A bibliographic reference for the resource.
+NDublinCore.license=License
+NDublinCore.licensDesc=A legal document giving official permission to do something with the resource.
+NDublinCore.required=Required
+NDublinCore.requiredDesc=The described resource requires the referenced resource to support its function, delivery, or coherence of content.
+NDublinCore.spatial=Spatial
+NDublinCore.spatialDesc=Spatial characteristics of the intellectual content of the resource.
+NDublinCore.format=Format
+NDublinCore.formatDesc=A predefined, STEM specific, URI that uniquely specifies the format of the resource. Not user defined.
+NDublinCore.type=Type
+NDublinCore.typeDesc=A predefined, STEM specific, URI that uniquely specifies the type of the resource. Not user defined.
+NDublinCore.requiredField=required field
+
+NDublinCore.titleErr=The Title is empty.
+NDublinCore.createdErr=Created date not formatted correctly: YYYY-MM-DD
+NDublinCore.dateErr=Date not formatted correctly: YYYY-MM-DD
+NDublinCore.validErr=Valid date range not formatted correctly: start=YYYY-MM-DD; or start=YYYY-MM-DD; end=YYYY-MM-DD;
+
+# Graph Wizard
+NGraphWiz.wizard_title = New Graph
+NGraphWiz.page_title = Graph
+NGraphWiz.page_description = Create a new STEM Graph in a project.
+NGraphWiz.DC_DESCRIPTION = Graph "{0}"
+
+# Model Wizard
+NModelWiz.wizard_title = New Model
+NModelWiz.page_title = Model
+NModelWiz.page_description = Create a new STEM Model in a project.
+NModelWiz.DC_DESCRIPTION = Model "{0}"
+
+# Model Scenario
+
+NScenarioWiz.wizard_title = New Scenario
+NScenarioWiz.page_title = Scenario
+NScenarioWiz.page_description = Create a new STEM Scenario in a project.
+NScenarioWiz.DC_DESCRIPTION = Scenario "{0}"
+NScenarioWiz.solver = Pick a solver
+
+# Model Sequencer
+NSequencerWiz.cycleTime = Cycle period
+NSequencerWiz.milliseconds = milliseconds
+NSequencerWiz.millisecond = millisecond
+NSequencerWiz.seconds = seconds
+NSequencerWiz.second = second
+NSequencerWiz.minutes = minutes
+NSequencerWiz.minute = minute
+NSequencerWiz.hours = hours
+NSequencerWiz.hour = hour
+NSequencerWiz.days = days
+NSequencerWiz.day = day
+
+# Model Sequential Sequencer
+NSeqSequencerWiz.cycleTimeErr = The cycle time must be 1 or greater.
+NSeqSequencerWiz.cycleTimeFormatErr = The cycle time is not a valid integer.
+NSeqSequencerWiz.wizard_title = New Sequential Sequencer
+NSeqSequencerWiz.page_title = Sequential Sequencer
+NSeqSequencerWiz.page_description = Create a new STEM Sequential Sequencer in a project.
+NSeqSequencerWiz.startTime = Start Date
+NSeqSequencerWiz.endTime = Specify End Date
+NSeqSequencerWiz.startDateErr = Start Date not formatted correctly: YYYY-MM-DD
+NSeqSequencerWiz.missingStartDateErr = The Start date is missing.
+NSeqSequencerWiz.endDateErr = End Date not formatted correctly: YYYY-MM-DD
+NSeqSequencerWiz.endBeforeErr = The end date occurs before the start date.
+NSeqSequencerWiz.DC_TITLE1 = Sequential Sequencer (Start: {0}, End: {1}, Cycle Period: {2}).
+NSeqSequencerWiz.DC_TITLE2 = Sequential Sequencer (Start: {0}, Cycle Period: {1}).
+NSeqSequencerWiz.DC_DESCRIPTION1 = Sequential Sequencer starting from {0} to {1} with a cycle period of {2}.
+NSeqSequencerWiz.DC_DESCRIPTION2 = Sequential Sequencer starting from {0}, with no end and a cycle period of {1}.
+
+# Model Real-Time Sequencer
+NRTSequencerWiz.wizard_title = New Real-Time Sequencer
+NSRTSequencerWiz.DC_TITLE = Real-Time Sequencer (Cycle Period: {0}).
+NSRTSequencerWiz.DC_DESCRIPTION1 = Real-Time Sequencer starting from the current date/time, with a cycle period of {0}.
+
+# Model Experiment
+NExperimentWiz.wizard_title = New Experiment
+NExperimentWiz.page_title = Experiment
+NExperimentWiz.page_description = Create a new STEM Experiment in a project
+NExperimentWiz.DC_DESCRIPTION = Experiment "{0}"
+
+# Modifier
+NModifierWiz.wizard_title = New Modifier
+NModifierWiz.page_title = Modifier
+NModifierWiz.page_description = Create a new STEM Modifier in a project
+NModifierWiz.DC_DESCRIPTION = Modifier "{0}"
+
+# Trigger
+NTriggerWiz.wizard_title = New Trigger
+NTriggerWiz.page_title = Trigger
+NTriggerWiz.page_description = Create a new STEM Trigger in a project
+NTriggerWiz.DC_DESCRIPTION = Trigger "{0}"
+
+# Predicate
+NPredicateWiz.wizard_title = New Predicate
+NPredicateWiz.page_title = Predicate
+NPredicateWiz.page_description = Create a new STEM Predicate in a project
+NPredicateWiz.DC_DESCRIPTION = Predicate "{0}"
+
+# Modifiers
+Range.type = Range
+Sequence.type = Sequence
+Single.type = Single
diff --git a/org.eclipse.stem.ui/stem.product b/org.eclipse.stem.ui/stem.product
new file mode 100644
index 0000000..247ab02
--- /dev/null
+++ b/org.eclipse.stem.ui/stem.product
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="STEM" uid="org.eclipse.stem.ui.product" id="org.eclipse.stem.ui.product" application="org.eclipse.stem.ui.CoreEditorAdvisorApplication" version="1.0.0" useFeatures="false" includeLaunchers="true">
+
+   <aboutInfo>
+      <image path="/org.eclipse.stem.ui/branding/ohf64_64_32.gif"/>
+      <text>
+         Spatio-Temporal Epidemological/Event Modeler (STEM)
+      </text>
+   </aboutInfo>
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <vmArgs>-Xms400M -Xmx600M</vmArgs>
+   </launcherArgs>
+
+   <windowImages i16="/org.eclipse.stem.ui/branding/ohf16_16_32.gif" i32="/org.eclipse.stem.ui/branding/ohf32_32_32.gif" i48="/org.eclipse.stem.ui/branding/ohf48_48_32.gif" i64="/org.eclipse.stem.ui/branding/ohf64_64_32.gif" i128="/org.eclipse.stem.ui/branding/ohf128_128_32.gif"/>
+
+   <splash
+      location="org.eclipse.stem.ui"
+      startupProgressRect="0,413,431,15"
+      startupMessageRect="10,380,431,20"
+      startupForegroundColor="FFFFFF" />
+   <launcher name="STEM">
+      <solaris/>
+      <win useIco="false">
+         <bmp
+            winSmallLow="/org.eclipse.stem.ui/branding/ohf16_16_8.bmp"
+            winMediumLow="/org.eclipse.stem.ui/branding/ohf32_32_8.bmp"
+            winLargeLow="/org.eclipse.stem.ui/branding/ohf48_48_8.bmp"/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="org.apache.commons.codec"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.birt.chart.device.swt"/>
+      <plugin id="org.eclipse.birt.chart.engine"/>
+      <plugin id="org.eclipse.birt.chart.engine.extension"/>
+      <plugin id="org.eclipse.birt.core"/>
+      <plugin id="org.eclipse.birt.core.ui"/>
+      <plugin id="org.eclipse.compare.core"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.net.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.ecf"/>
+      <plugin id="org.eclipse.ecf.filetransfer"/>
+      <plugin id="org.eclipse.ecf.identity"/>
+      <plugin id="org.eclipse.ecf.ssl" fragment="true"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.edit"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.registry"/>
+      <plugin id="org.eclipse.equinox.http.servlet"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.registry"/>
+      <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
+      <plugin id="org.eclipse.equinox.p2.core"/>
+      <plugin id="org.eclipse.equinox.p2.engine"/>
+      <plugin id="org.eclipse.equinox.p2.jarprocessor"/>
+      <plugin id="org.eclipse.equinox.p2.metadata"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.repository"/>
+      <plugin id="org.eclipse.equinox.p2.repository"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.security"/>
+      <plugin id="org.eclipse.equinox.security.macosx" fragment="true"/>
+      <plugin id="org.eclipse.equinox.security.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.appserver"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.help.webapp"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.stem.analysis"/>
+      <plugin id="org.eclipse.stem.analysis.automaticexperiment"/>
+      <plugin id="org.eclipse.stem.core"/>
+      <plugin id="org.eclipse.stem.data.diseasemodels.models"/>
+      <plugin id="org.eclipse.stem.data.diseasemodels.scenarios"/>
+      <plugin id="org.eclipse.stem.data.geography"/>
+      <plugin id="org.eclipse.stem.data.geography.infrastructure.transportation"/>
+      <plugin id="org.eclipse.stem.data.geography.models"/>
+      <plugin id="org.eclipse.stem.data.geography.population.human"/>
+      <plugin id="org.eclipse.stem.data.geography.population.human.models"/>
+      <plugin id="org.eclipse.stem.definitions"/>
+      <plugin id="org.eclipse.stem.diseasemodels"/>
+      <plugin id="org.eclipse.stem.diseasemodels.example"/>
+      <plugin id="org.eclipse.stem.diseasemodels.externaldatasource"/>
+      <plugin id="org.eclipse.stem.diseasemodels.forcing"/>
+      <plugin id="org.eclipse.stem.diseases"/>
+      <plugin id="org.eclipse.stem.doc"/>
+      <plugin id="org.eclipse.stem.geography"/>
+      <plugin id="org.eclipse.stem.internal.data"/>
+      <plugin id="org.eclipse.stem.internal.data.geography"/>
+      <plugin id="org.eclipse.stem.internal.data.geography.infrastructure.transportation"/>
+      <plugin id="org.eclipse.stem.internal.data.geography.models"/>
+      <plugin id="org.eclipse.stem.internal.data.geography.population"/>
+      <plugin id="org.eclipse.stem.internal.data.geography.population.human"/>
+      <plugin id="org.eclipse.stem.internal.data.geography.population.human.models"/>
+      <plugin id="org.eclipse.stem.internal.diseasemodels.models"/>
+      <plugin id="org.eclipse.stem.internal.diseasemodels.scenarios"/>
+      <plugin id="org.eclipse.stem.jobs"/>
+      <plugin id="org.eclipse.stem.jobs.nl1" fragment="true"/>
+      <plugin id="org.eclipse.stem.populationmodels"/>
+      <plugin id="org.eclipse.stem.sequencers"/>
+      <plugin id="org.eclipse.stem.solvers.fd"/>
+      <plugin id="org.eclipse.stem.solvers.rk"/>
+      <plugin id="org.eclipse.stem.transport"/>
+      <plugin id="org.eclipse.stem.ui"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels.example"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels.externaldatasource"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels.forcing.editor"/>
+      <plugin id="org.eclipse.stem.ui.ge"/>
+      <plugin id="org.eclipse.stem.ui.nl1" fragment="true"/>
+      <plugin id="org.eclipse.stem.ui.populationmodels"/>
+      <plugin id="org.eclipse.stem.ui.reports"/>
+      <plugin id="org.eclipse.stem.ui.solvers.fd"/>
+      <plugin id="org.eclipse.stem.ui.solvers.rk"/>
+      <plugin id="org.eclipse.stem.util.analysis"/>
+      <plugin id="org.eclipse.stem.util.loggers"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
+      <plugin id="org.eclipse.swt.cocoa.macosx" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.carbon" fragment="true"/>
+      <plugin id="org.eclipse.ui.cocoa" fragment="true"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.intro"/>
+      <plugin id="org.eclipse.ui.intro.universal"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.log"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.win32" fragment="true"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.eclipse.update.configurator"/>
+      <plugin id="org.eclipse.update.core"/>
+      <plugin id="org.eclipse.update.core.linux" fragment="true"/>
+      <plugin id="org.eclipse.update.core.win32" fragment="true"/>
+      <plugin id="org.junit"/>
+      <plugin id="org.mortbay.jetty.server"/>
+      <plugin id="org.mortbay.jetty.util"/>
+      <plugin id="org.mozilla.rhino"/>
+   </plugins>
+
+
+</product>
diff --git a/org.eclipse.stem.ui/stemLinux.product b/org.eclipse.stem.ui/stemLinux.product
new file mode 100644
index 0000000..625ff6d
--- /dev/null
+++ b/org.eclipse.stem.ui/stemLinux.product
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.4"?>
+
+<product name="STEM" id="org.eclipse.stem.ui.product" application="org.eclipse.stem.ui.CoreEditorAdvisorApplication" useFeatures="false">
+
+   <aboutInfo>
+      <image path="/org.eclipse.stem.ui/branding/stemAbout.gif"/>
+      <text>
+         This is all about STEM
+      </text>
+   </aboutInfo>
+
+   <configIni use="default" path="plugin_customization.ini"/>
+
+   <launcherArgs>
+      <vmArgs>-Xms768M -Xmx768M</vmArgs>
+   </launcherArgs>
+
+   <windowImages i16="/org.eclipse.stem.ui/branding/ohf16_16_32.gif" i32="/org.eclipse.stem.ui/branding/ohf32_32_32.gif" i48="/org.eclipse.stem.ui/branding/ohf48_48_32.gif" i64="/org.eclipse.stem.ui/branding/ohf64_64_32.gif" i128="/org.eclipse.stem.ui/branding/ohf128_128_32.gif"/>
+
+   <splash
+      location="org.eclipse.stem.ui"
+      startupProgressRect="0,413,431,15"
+      startupMessageRect="10,380,431,20"
+      startupForegroundColor="FFFFFF" />
+   <launcher name="STEM">
+      <linux icon="/org.eclipse.stem.ui/branding/splash.xpm"/>
+      <solaris/>
+      <win useIco="false">
+         <bmp
+            winSmallLow="/org.eclipse.stem.ui/branding/ohf16_16_8.bmp"
+            winMediumLow="/org.eclipse.stem.ui/branding/ohf32_32_8.bmp"
+            winLargeLow="/org.eclipse.stem.ui/branding/ohf48_48_8.bmp"/>
+      </win>
+   </launcher>
+
+   <plugins>
+      <plugin id="com.ibm.etools.emf.event"/>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="com.ibm.icu.source"/>
+      <plugin id="com.jcraft.jsch"/>
+      <plugin id="com.lowagie.itext"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="javax.xml"/>
+      <plugin id="net.sourceforge.lpg.lpgjavaruntime"/>
+      <plugin id="org.apache.ant"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.apache.xerces"/>
+      <plugin id="org.apache.xml.resolver"/>
+      <plugin id="org.apache.xml.serializer"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.edit"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.http.registry"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.registry"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.security"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.appserver"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.help.webapp"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.stem.core"/>
+      <plugin id="org.eclipse.stem.data"/>
+      <plugin id="org.eclipse.stem.definitions"/>
+      <plugin id="org.eclipse.stem.diseasemodels"/>
+      <plugin id="org.eclipse.stem.geography"/>
+      <plugin id="org.eclipse.stem.internal.data"/>
+      <plugin id="org.eclipse.stem.jobs"/>
+      <plugin id="org.eclipse.stem.jobs.nl1" fragment="true"/>
+      <plugin id="org.eclipse.stem.sequencers"/>
+      <plugin id="org.eclipse.stem.tests.util"/>
+      <plugin id="org.eclipse.stem.transport"/>
+      <plugin id="org.eclipse.stem.ui"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels"/>
+      <plugin id="org.eclipse.stem.ui.ge"/>
+      <plugin id="org.eclipse.stem.ui.nl1" fragment="true"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.pde.runtime"/>
+      <plugin id="org.eclipse.platform.source.linux.gtk.x86"/>
+      <plugin id="org.eclipse.rcp.source"/>
+      <plugin id="org.eclipse.rcp.source.linux.gtk.x86"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.tomcat"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.log"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.eclipse.update.configurator"/>
+      <plugin id="org.eclipse.update.core"/>
+      <plugin id="org.eclipse.update.core.linux" fragment="true"/>
+      <plugin id="org.eclipse.update.ui"/>
+      <plugin id="org.junit"/>
+   </plugins>
+
+</product>
diff --git a/org.eclipse.stem.ui/stemMacOS.product b/org.eclipse.stem.ui/stemMacOS.product
new file mode 100644
index 0000000..0aeb8e4
--- /dev/null
+++ b/org.eclipse.stem.ui/stemMacOS.product
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="STEM" id="org.eclipse.stem.ui.product" application="org.eclipse.stem.ui.CoreEditorAdvisorApplication" useFeatures="false" includeLaunchers="true">
+
+   <aboutInfo>
+      <image path="/org.eclipse.stem.ui/branding/ohf64_64_32.gif"/>
+      <text>
+         Spatio-Temporal Epidemological/Event Modeler (STEM)
+      </text>
+   </aboutInfo>
+
+   <configIni use="default">
+      <linux>plugin_customization.ini</linux>
+      <macosx>plugin_customization.ini</macosx>
+      <solaris>plugin_customization.ini</solaris>
+      <win32>plugin_customization.ini</win32>
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-debug -consoleLog</programArgs>
+      <vmArgs>-Xms512M -Xmx512M</vmArgs>
+   </launcherArgs>
+
+   <windowImages i16="/org.eclipse.stem.ui/branding/ohf16_16_32.gif" i32="/org.eclipse.stem.ui/branding/ohf32_32_32.gif" i48="/org.eclipse.stem.ui/branding/ohf48_48_32.gif" i64="/org.eclipse.stem.ui/branding/ohf64_64_32.gif" i128="/org.eclipse.stem.ui/branding/ohf128_128_32.gif"/>
+
+   <splash
+      location="org.eclipse.stem.ui"
+      startupProgressRect="0,413,431,15"
+      startupMessageRect="10,380,431,20"
+      startupForegroundColor="FFFFFF" />
+   <launcher name="STEM">
+      <solaris/>
+      <win useIco="false">
+         <bmp
+            winSmallLow="/org.eclipse.stem.ui/branding/ohf16_16_8.bmp"
+            winMediumLow="/org.eclipse.stem.ui/branding/ohf32_32_8.bmp"
+            winLargeLow="/org.eclipse.stem.ui/branding/ohf48_48_8.bmp"/>
+      </win>
+   </launcher>
+
+   <vm>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="com.lowagie.itext"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="org.apache.ant"/>
+      <plugin id="org.apache.batik.pdf"/>
+      <plugin id="org.apache.commons.codec"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.apache.xerces"/>
+      <plugin id="org.apache.xml.resolver"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.birt.chart.device.extension"/>
+      <plugin id="org.eclipse.birt.chart.device.svg"/>
+      <plugin id="org.eclipse.birt.chart.device.swt"/>
+      <plugin id="org.eclipse.birt.chart.engine"/>
+      <plugin id="org.eclipse.birt.chart.engine.extension"/>
+      <plugin id="org.eclipse.birt.chart.ui"/>
+      <plugin id="org.eclipse.birt.chart.ui.extension"/>
+      <plugin id="org.eclipse.birt.core"/>
+      <plugin id="org.eclipse.birt.core.ui"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment=""/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.compatibility" fragment="true"/>
+      <plugin id="org.eclipse.core.resources.win32" fragment=""/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.registry"/>
+      <plugin id="org.eclipse.equinox.http.servlet"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.registry"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.appserver"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.help.webapp"/>
+      <plugin id="org.eclipse.jdt.compiler.apt" fragment="true"/>
+      <plugin id="org.eclipse.jdt.compiler.tool" fragment="true"/>
+      <plugin id="org.eclipse.jdt.core"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.osgi.util"/>
+      <plugin id="org.eclipse.pde.runtime"/>
+      <plugin id="org.eclipse.stem.core"/>
+      <plugin id="org.eclipse.stem.definitions"/>
+      <plugin id="org.eclipse.stem.diseasemodels"/>
+      <plugin id="org.eclipse.stem.diseases"/>
+      <plugin id="org.eclipse.stem.geography"/>
+      <plugin id="org.eclipse.stem.jobs"/>
+      <plugin id="org.eclipse.stem.jobs.nl1" fragment="true"/>
+      <plugin id="org.eclipse.stem.sequencers"/>
+      <plugin id="org.eclipse.stem.ui"/>
+      <plugin id="org.eclipse.stem.ui.diseasemodels"/>
+      <plugin id="org.eclipse.stem.ui.ge"/>
+      <plugin id="org.eclipse.stem.ui.nl1" fragment="true"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.carbon.macosx" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.swt.win32.win32.x86" fragment=""/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.tomcat" fragment=""/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.carbon" fragment="true"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.win32" fragment=""/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.update.configurator"/>
+      <plugin id="org.eclipse.update.core"/>
+      <plugin id="org.eclipse.update.core.win32" fragment=""/>
+      <plugin id="org.eclipse.update.ui"/>
+      <plugin id="org.eclipse.xsd"/>
+      <plugin id="org.junit"/>
+      <plugin id="org.mortbay.jetty" fragment=""/>
+      <plugin id="org.mozilla.rhino"/>
+      <plugin id="org.w3c.dom" fragment=""/>
+   </plugins>
+
+
+</product>
diff --git a/org.eclipse.stem.util.analysis/.cdtproject b/org.eclipse.stem.util.analysis/.cdtproject
new file mode 100644
index 0000000..1b2ea83
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.cdtproject
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject/>
diff --git a/org.eclipse.stem.util.analysis/.classpath b/org.eclipse.stem.util.analysis/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.util.analysis/.cproject b/org.eclipse.stem.util.analysis/.cproject
new file mode 100644
index 0000000..2619c56
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.cproject
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="converted.config.907845264">
+<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.907845264" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
+<externalSettings/>
+<extensions/>
+</storageModule>
+</cconfiguration>
+</storageModule>
+</cproject>
diff --git a/org.eclipse.stem.util.analysis/.project b/org.eclipse.stem.util.analysis/.project
new file mode 100644
index 0000000..f66d1d9
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.util.analysis</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sourceforge.metrics.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sourceforge.metrics.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2929785
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Thu Nov 01 14:50:38 EDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..881db7a
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Mon Feb 25 12:29:23 PST 2008
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_releng code cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.util.analysis/META-INF/MANIFEST.MF b/org.eclipse.stem.util.analysis/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a2f4e9e
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.util.analysis;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.util.analysis.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.birt.chart.engine;visibility:=reexport,
+ org.eclipse.birt.core.ui,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.definitions,
+ org.eclipse.stem.data.geography,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.analysis
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.util.analysis,
+ org.eclipse.stem.util.analysis.views
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ClassPath: .
diff --git a/org.eclipse.stem.util.analysis/build.properties b/org.eclipse.stem.util.analysis/build.properties
new file mode 100644
index 0000000..c88359b
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/,\
+               plugin.properties
diff --git a/org.eclipse.stem.util.analysis/icons/full/customobj16/.cvsignore b/org.eclipse.stem.util.analysis/icons/full/customobj16/.cvsignore
new file mode 100644
index 0000000..085e8ba
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/customobj16/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db
diff --git a/org.eclipse.stem.util.analysis/icons/full/customobj16/Analysis.gif b/org.eclipse.stem.util.analysis/icons/full/customobj16/Analysis.gif
new file mode 100644
index 0000000..56aeebb
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/customobj16/Analysis.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/customobj16/StaticLabel.gif b/org.eclipse.stem.util.analysis/icons/full/customobj16/StaticLabel.gif
new file mode 100644
index 0000000..f3142b5
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/customobj16/StaticLabel.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/customobj16/Trigger.gif b/org.eclipse.stem.util.analysis/icons/full/customobj16/Trigger.gif
new file mode 100644
index 0000000..3632468
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/customobj16/Trigger.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/CommonModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/CommonModelFile.gif
new file mode 100644
index 0000000..22ec75b
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/CommonModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/ExperimentModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/ExperimentModelFile.gif
new file mode 100644
index 0000000..8315589
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/ExperimentModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/GraphModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/GraphModelFile.gif
new file mode 100644
index 0000000..6984fd4
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/GraphModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/ModelModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/ModelModelFile.gif
new file mode 100644
index 0000000..9d55bb2
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/ModelModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/PredicateModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/PredicateModelFile.gif
new file mode 100644
index 0000000..366f9ff
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/PredicateModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/ScenarioModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/ScenarioModelFile.gif
new file mode 100644
index 0000000..366f9ff
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/ScenarioModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/SequencerModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/SequencerModelFile.gif
new file mode 100644
index 0000000..3097cf4
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/SequencerModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/obj16/TriggerModelFile.gif b/org.eclipse.stem.util.analysis/icons/full/obj16/TriggerModelFile.gif
new file mode 100644
index 0000000..0ae2f8c
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/obj16/TriggerModelFile.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewCommon.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewCommon.gif
new file mode 100644
index 0000000..259704c
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewCommon.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewExperiment.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewExperiment.gif
new file mode 100644
index 0000000..a6b42e7
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewExperiment.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewGraph.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewGraph.gif
new file mode 100644
index 0000000..f3829ed
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewGraph.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewModel.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewModel.gif
new file mode 100644
index 0000000..dcf7f89
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewModel.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewScenario.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewScenario.gif
new file mode 100644
index 0000000..e85f1da
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewScenario.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/full/wizban/NewSequencer.gif b/org.eclipse.stem.util.analysis/icons/full/wizban/NewSequencer.gif
new file mode 100644
index 0000000..f9e80f0
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/full/wizban/NewSequencer.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/icons/sample.gif b/org.eclipse.stem.util.analysis/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.stem.util.analysis/plugin.properties b/org.eclipse.stem.util.analysis/plugin.properties
new file mode 100644
index 0000000..143b393
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/plugin.properties
@@ -0,0 +1,6 @@
+
+pluginName = STEM Chart and Analysis Utilities
+providerName = Eclipse.org
+
+# Perspectives
+_UTIL_Analysis_Perspective = Analysis
diff --git a/org.eclipse.stem.util.analysis/plugin.xml b/org.eclipse.stem.util.analysis/plugin.xml
new file mode 100644
index 0000000..7c45c43
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/plugin.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="org.eclipse.stem.ui.STEMPerspective"
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="org.eclipse.stem.util.analysis.perspectives.Analysis"
+            icon="icons/full/customobj16/Analysis.gif"
+            id="org.eclipse.stem.util.analysis.perspectives.STEMAnalysisPerspective"
+            name="%_UTIL_Analysis_Perspective">
+      </perspective>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.analysis.views.EstimatorView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.analysis.views.estimator"
+            name="Estimator">
+         Reports
+      </view>
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.analysis.views.ScenarioComparisonView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.analysis.views.comparison"
+            name="ScenarioComparison"
+            restorable="true">
+      </view>
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.analysis.views.LyapunovView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.analysis.views.lyapunov"
+            name="Lyapunov"
+            restorable="true">
+      </view>
+       <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.analysis.views.EpidemicView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.analysis.views.aggregate"
+            name="Epidemic"
+            restorable="true">
+      </view>
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.analysis.views.ProcessorView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.analysis.views.processor"
+            name="Processor"
+            restorable="true">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <viewerContribution
+            id="org.eclipse.stem.util.analysis.views"
+            targetID="org.eclipse.stem.ui.views.geographic.map.context">
+         <action
+               class="org.eclipse.stem.util.analysis.views.ReportsContextMenuAction"
+               id="Analysis"
+               label="Analysis"
+               menubarPath="reports/additions"
+               state="true">
+         </action>
+      </viewerContribution>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Activator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Activator.java
new file mode 100644
index 0000000..a0a7991
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Activator.java
@@ -0,0 +1,127 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.util.analysis"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/AggregateDataWriter.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/AggregateDataWriter.java
new file mode 100644
index 0000000..02a3605
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/AggregateDataWriter.java
@@ -0,0 +1,572 @@
+// AggregateDataWriter
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+import org.eclipse.stem.diseasemodels.Activator;
+
+/**
+ * writes CSV Files
+ * 
+ */
+public class AggregateDataWriter {
+
+	// private static final DateFormat df =
+	// DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.MEDIUM);
+
+	/**
+	 * 
+	 */
+	private final String aggregateFileName;
+	private final String incidenceFileName;
+	
+	private static final String keyS = "S";
+	private static final String keyE = "E";
+	
+	
+
+
+	private static final String keyI = "I";
+	private static final String keyR = "R";
+	private static final String keyBirths = "Births";
+	private static final String keyDeaths = "Deaths";
+	private static final String keyDeltaBirths = "deltaBirths";
+	private static final String keyDeltaDeaths = "deltaDeaths";
+	private static final String keyIncidence = "Incidence";
+	private static List<String> birthsList=null;
+	private static List<String> deathsList=null;
+	private static List<String> deltaBirthsList=new ArrayList<String>();
+	private static List<String> deltaDeathsList=new ArrayList<String>();
+	
+	/**
+	 * indicates if birth counts exist in data set
+	 */
+	private boolean haveBirths = false;
+	/**
+	 * indicates if death counts exist in data set
+	 */
+	private boolean haveDeaths = false;
+	/** 
+	 * Births are stored cumulatively but we want to log the derivative
+	 * so we will store the previous value and subtract it to get the instantaneous value
+	 */
+	private static double pastBirths = 0.0;
+	/** 
+	 * Deaths are stored cumulatively but we want to log the derivative
+	 * so we will store the previous value and subtract it to get the instantaneous value
+	 */
+	private static double pastDeaths = 0.0;
+	
+	String[] preferredKeyOrder = {
+									ReferenceScenarioDataMapImpl.ITERATION_KEY, 
+									ReferenceScenarioDataMapImpl.TIME_KEY, 
+									keyS, 
+									keyE, 
+									keyI, 
+									keyR,
+									keyBirths,
+									keyDeaths
+									};
+	
+	
+	private static final IPath PATH = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+	private static final String sep = File.separator;
+	
+	/**
+	 * Directory containing scenario folders
+	 */
+	public static final String ANALYSISFOLDER = PATH.toOSString();
+
+	/**
+	 * Folder name for files containing aggregate data
+	 */
+	public static final String AGGREGATE_FOLDERNAME = "aggregate";
+	private static final String aggregatePathSuffix = AGGREGATE_FOLDERNAME+sep;
+	// TODO for now all aggregate data will be in one folder called csv/aggregate
+	private String aggregateDirectoryName = PATH.append(sep + aggregatePathSuffix).toOSString();
+	
+	/**
+	 * Folder name for files containing incidence data
+	 */
+	public static final String INCIDENCE_FOLDERNAME = "incidence";
+	private static final String incidencePathSuffix = INCIDENCE_FOLDERNAME+sep;
+	// TODO for now all aggregate data will be in one folder called csv/aggregate
+	private String incidenceDirectoryName = PATH.append(sep + incidencePathSuffix).toOSString();
+	
+	private FileWriter fw1;
+	private FileWriter fw2;
+
+	/**
+	 * 
+	 * @param dataFolder
+	 * @param aggregateDataFileName
+	 */
+	public AggregateDataWriter(final String dataFolder, final String aggregateDataFileName) {
+		// Determine the aggregate folder name from the data folder
+		IPath p = new Path(dataFolder);
+		p = p.removeLastSegments(1); // get rid of disease folder
+		p = p.append(AGGREGATE_FOLDERNAME);
+		this.aggregateDirectoryName = p.toOSString();
+		// check that the directory exists	
+		final File dir = new File(this.aggregateDirectoryName);
+		if ((!dir.exists()) || (!dir.isDirectory())) {
+			// create it.
+			boolean success = dir.mkdirs();
+			if (!success) {
+				Activator.logError(
+						"Failed to Create Directory" + aggregateDirectoryName,
+						new IOException("Failed to Create Driectory"
+								+ aggregateDirectoryName));
+			}
+		}
+		
+		p = new Path(dataFolder);
+		p = p.removeLastSegments(1); // get rid of disease folder
+		p = p.append(INCIDENCE_FOLDERNAME);
+		this.incidenceDirectoryName = p.toOSString();
+		final File dir2 = new File(this.incidenceDirectoryName);
+		if ((!dir2.exists()) || (!dir2.isDirectory())) {
+			// create it.
+			boolean success = dir2.mkdirs();
+			if (!success) {
+				Activator.logError(
+						"Failed to Create Indicence Directory" + incidenceDirectoryName,
+						new IOException("Failed to Create Directory"
+								+ incidenceDirectoryName));
+			}
+		}
+		
+		
+		aggregateFileName = aggregateDirectoryName+sep+aggregateDataFileName;
+		try {
+			fw1 = new FileWriter(aggregateFileName);
+		} catch (final IOException e) {
+			Activator.logError("Error opening data file"  + aggregateDirectoryName + " "+ aggregateFileName, e);
+		}
+		
+		incidenceFileName = incidenceDirectoryName+sep+aggregateDataFileName;
+		try {
+			fw2 = new FileWriter(incidenceFileName);
+		} catch (final IOException e) {
+			Activator.logError("Error opening data file"  + incidenceDirectoryName + " "+ incidenceFileName, e);
+		}
+		
+	} // AggregateDataWriter
+
+	
+
+	
+	
+
+	/**
+	 * log the data for an instance
+	 * @param data
+	 * @param alpha the immunity Loss Rate
+	 * @return Filename (including path) of log file
+	 */
+	public String[] logDataInstance(final ReferenceScenarioDataInstance data, double alpha) {
+		    
+		    String[] retVal = new String[2];
+			Map<String,List<String>> instance = data.getInstance();	
+			Set<String> keySet = instance.keySet();
+			String[] keys = sortKeys(keySet);
+			
+			List<String> dataList = instance.get(keys[0]);
+			
+			String str = keys[0]+""; // this is the ITERATION_KEY = "iteration"; column
+			for (int i = 1; i < keys.length; i ++) {
+				// log the header
+				str += "," + keys[i].toString().trim();
+			}
+			str += "\n";
+			try {
+				fw1.append(str);
+			} catch (final IOException e) {
+				Activator.logError("Error writing aggregate data file"  + aggregateDirectoryName + " "+ aggregateFileName, e);
+			}
+			
+			// get the births 
+			birthsList = data.getInstance().get(keyBirths);
+			data.getInstance().put(keyBirths, birthsList);
+			
+			// get the deaths list
+			deathsList = data.getInstance().get(keyDeaths);
+			data.getInstance().put(keyDeaths, deathsList);
+			
+			
+			int dataSize = dataList.size();
+			// write the data
+			for(int i = 0; i < dataSize; i ++) {
+				// get the first column ("iterations")
+				String key = keys[0].toString();
+				List<String> valueList = data.getInstance().get(key);
+				str = valueList.get(i) + " ";
+				
+				for (int j = 1; j < keys.length; j++) {
+					key = keys[j].toString();
+					valueList = data.getInstance().get(key);	
+					str += ", "+valueList.get(i);
+				}// for all keys
+				str += "\n";
+				try {
+					fw1.append(str);
+				} catch (final IOException e) {
+					Activator.logError("Error writing aggregate data file"  + aggregateDirectoryName + aggregateFileName, e);
+				}
+			}// for all points
+			
+			str = "";
+			try {
+				if (fw1 != null) {
+					fw1.flush();
+					fw1.close();
+				}
+			} catch (final IOException e) {
+				// do nothing
+			}
+			
+			haveBirths = false;
+			if(birthsList!=null) {
+				haveBirths = true;
+				// get the derivative for the births list
+				for (int i = 0;i < birthsList.size(); i ++) {
+					deltaBirthsList.add(i,birthsList.get(i));
+				}
+				if (deltaBirthsList != null) {
+					pastBirths = 0;
+					for (int ii = 0; ii < deltaBirthsList.size(); ii++) {
+						final double births = (new Double(deltaBirthsList.get(ii))).doubleValue();
+						deltaBirthsList.set(ii, "" + (births - pastBirths));
+						pastBirths = births;
+					}
+				}
+			}
+			
+			haveDeaths = false;
+			if(deathsList!=null) {
+				haveDeaths = true;
+				// get the derivative for the deaths list
+				for (int i = 0;i < deathsList.size(); i ++) {
+					deltaDeathsList.add(i,deathsList.get(i));
+				}
+				if (deltaDeathsList != null) {
+					pastDeaths = 0;
+					for (int ii = 0; ii < deltaDeathsList.size(); ii++) {
+						final double deaths = (new Double(deltaDeathsList.get(ii))).doubleValue();
+						deltaDeathsList.set(ii, "" + (deaths - pastDeaths));
+						pastDeaths = deaths;
+					}
+				}
+			}
+			
+			data.getInstance().put(keyDeltaBirths, deltaBirthsList);
+			data.getInstance().put(keyDeltaDeaths, deltaDeathsList);
+			
+			
+			retVal[0] = this.aggregateFileName;
+			
+			// next compute the incidence and log it too...
+			retVal[1] = logIncidence(data, alpha);
+			
+			return retVal;
+	}// log the data
+
+	
+
+	/**
+	 * log the data for an instance
+	 * @param data
+	 * @param alpha the immunity loss rate
+	 * @return the incidence data file name
+	 */
+	public String logIncidence(final ReferenceScenarioDataInstance data, double alpha) {
+		    
+			Map<String,List<String>> instance = data.getInstance();	
+			Set<String> keySet = instance.keySet();
+			
+			
+			String[] keys = sortKeys(keySet);
+			List<String> dataList = instance.get(keys[0]);
+			int size = dataList.size();
+			
+			// get the total population as a function of time
+			List<Double> popList = new ArrayList<Double>();
+			for (int j = 0; j < size; j ++) {
+				double pop = 0.0;
+		
+				if(keySet.contains(keyS)) {
+					dataList = instance.get(keyS);
+					Double dObj = new Double(dataList.get(j));
+					pop+= dObj.doubleValue();
+				}
+				if(keySet.contains(keyE)) {
+					dataList = instance.get(keyE);
+					Double dObj = new Double(dataList.get(j));
+					pop+= dObj.doubleValue();
+				}
+				if(keySet.contains(keyI)) {
+					dataList = instance.get(keyI);
+					Double dObj = new Double(dataList.get(j));
+					pop+= dObj.doubleValue();
+				}
+				if(keySet.contains(keyR)) {
+					dataList = instance.get(keyR);
+					Double dObj = new Double(dataList.get(j));
+					pop+= dObj.doubleValue();
+				}
+				
+				popList.add(new Double(pop));
+			}
+			
+			//incidence = deltaI - deltaR + muI - muR  (deaths in infectious and recovered)
+			List<Double> incidenceList = new ArrayList<Double>();
+			List<String> sList = instance.get(keyS);
+			List<String> iList = instance.get(keyI);
+			List<String> rList = instance.get(keyR); // ok if this is null
+			
+			/////////////////////////////////////////////////////////
+			//   get the Incidence
+			//
+			List<String> exactIncidence = instance.get(keyIncidence);
+			if(exactIncidence != null) {
+				// read the incidence
+				for(int i = 0; i < exactIncidence.size(); i ++) {
+					incidenceList.add(i,new Double(exactIncidence.get(i)));
+				}
+			} else {
+				
+				// compute the incidence
+				incidenceList = computeIncidence(iList, rList, alpha, size) ;
+			}// find the incidence from file else compute it
+			//	
+            /////////////////////////////////////////////////////////
+			
+			
+			// header info
+			String str = keys[0]+","+keys[1]+","+"Incidence,S,P";
+			if(haveBirths) str +=","+keyDeltaBirths;
+			if(haveDeaths) str +=","+keyDeltaDeaths;
+			
+			str += "\n";
+			try {
+				fw2.append(str);
+			} catch (final IOException e) {
+				Activator.logError("Error writing aggregate data file"  + aggregateDirectoryName + " "+ aggregateFileName, e);
+			}
+			
+			// write the data
+			str = "";
+			for(int i = 0; i < size; i ++) {
+				str = "";
+				// get the first column ("iterations")
+				String key = keys[0].toString();
+				List<String> valueList = data.getInstance().get(key);
+				str = valueList.get(i) + " ";
+				// time
+				key = keys[1].toString();
+				valueList = data.getInstance().get(key);
+				str += ", "+valueList.get(i);
+				// incidence
+				str += ", "+incidenceList.get(i).doubleValue();
+				// S
+				str += ", "+sList.get(i);
+				// P
+				str += ", "+popList.get(i).doubleValue();
+				
+				if(haveBirths) {
+					// deltaBirths
+					key = keyDeltaBirths;
+					valueList = data.getInstance().get(key);
+					if(valueList!= null && valueList.size() > 0 ) {
+						str += ", "+valueList.get(i);
+					} else {
+						str += ", "+0;
+					}
+				}
+				
+				if(haveDeaths) {
+					// deltaDeaths
+					key = keyDeltaDeaths;
+					valueList = data.getInstance().get(key);
+					if(valueList!= null && valueList.size() > 0 ) {
+						str += ", "+valueList.get(i);
+					} else {
+						str += ", "+0;
+					}
+				}
+			
+				
+				str += " \n";
+				try {
+					fw2.append(str);
+				} catch (final IOException e) {
+					Activator.logError("Error writing aggregate data file"  + incidenceDirectoryName + incidenceFileName, e);
+				}
+			}// for all points
+			
+			str = "";
+			try {
+				if (fw2 != null) {
+					fw2.flush();
+					fw2.close();
+				}
+			} catch (final IOException e) {
+				// do nothing
+			}
+			
+			return incidenceFileName;
+			
+			
+	}// log the data
+	
+	/**
+	 * 
+	 * compute the incidence - return as list of Double
+	 * 
+	 * @param iList
+	 * @param rList
+	 * @param alpha
+	 * @param size
+	 * @return
+	 */
+	private List<Double> computeIncidence(List<String> iList, List<String> rList, double alpha, int size) {
+		List<Double> incidenceList = new ArrayList<Double>();
+		// time zero point
+		double deltaI = (new Double(iList.get(0))).doubleValue();
+		double deltaR = (new Double(rList.get(0))).doubleValue();
+		double births = 0.0;
+		double deaths = 0.0;
+		if((birthsList!=null)&&(birthsList.size()>=1)) births = (new Double(birthsList.get(0))).doubleValue();
+		if((deathsList!=null)&&(deathsList.size()>=1)) deaths = (new Double(deathsList.get(0))).doubleValue();
+		// 1. First compute the incidence from the difference in deltaI - deltaR
+		// ignoring the rate of immunity loss.
+		Double incidence = new Double((deltaI + deltaR) + (deaths-births) );
+	    // we can't use this one point correct for alpha because it depends on R
+		// at t-1 (where we have no data for t= -1 )			
+	 
+		incidenceList.add(incidence);
+
+		for (int j = 1; j < size; j ++) {
+			
+			// get deltaI and deltaR from previous value
+			deltaI = (new Double(iList.get(j))).doubleValue();
+			deltaI -= (new Double(iList.get(j-1))).doubleValue();
+			
+			if(rList!=null) {
+				deltaR = (new Double(rList.get(j))).doubleValue();
+				deltaR -= (new Double(rList.get(j-1))).doubleValue();
+			}
+			births = 0.0;
+			deaths = 0.0;
+			if((birthsList!=null)&&(birthsList.size()>=j)) births = (new Double(birthsList.get(j))).doubleValue();
+			if((deathsList!=null)&&(deathsList.size()>=j)) deaths = (new Double(deathsList.get(j))).doubleValue();
+			
+			// Compute the incidence from the difference in deltaI - deltaR
+			// correcting for the rate of immunity loss.
+			double rValue = (new Double(rList.get(j-1))).doubleValue();
+			double incValue = (deltaI + deltaR) + (deaths-births) +(alpha*rValue);
+			incidence = new Double(incValue);
+			incidenceList.add(incidence);
+		}	
+		return incidenceList;
+	}
+
+
+	/**
+	 * If the keySet contains the preferred keys, return the preferred ones in the preferred order,
+	 * otherwise just returns them.
+	 * @param keySet
+	 * @return the sorted keys
+	 */
+	private String[] sortKeys(Set<String> keySet) {
+		String[] keys = new String[keySet.size()];
+		int icount = 0;
+		// first add the preferred keys (if they exist) in the correct order
+	    Set<String> doneSet = new HashSet<String>();
+		for (int i = 0; i < preferredKeyOrder.length; i ++) {
+			if(keySet.contains(preferredKeyOrder[i])) {
+				keys[icount] = preferredKeyOrder[i].trim();
+				icount ++;
+				doneSet.add(preferredKeyOrder[i]);
+			}
+		}
+  
+		// then add any other keys
+		Iterator<String> iter = keySet.iterator();
+		while((iter!=null)&&(iter.hasNext())){
+			String nextKey = iter.next();
+			if(!doneSet.contains(nextKey)) {
+				keys[icount] = nextKey;
+			    icount ++;
+			}
+		}
+		
+		return keys;
+	}
+	
+	/**
+	 * get the key use for Susceptible data
+	 * @return 'S'
+	 */
+	public static String getKeyS() {
+		return keyS;
+	}
+
+	/**
+	 * 
+	 * @return E
+	 */
+	public static String getKeyE() {
+		return keyE;
+	}
+
+	/**
+	 * 
+	 * @return I
+	 */
+	public static String getKeyI() {
+		return keyI;
+	}
+
+	/**
+	 * 
+	 * @return R
+	 */
+	public static String getKeyR() {
+		return keyR;
+	}
+
+	/**
+	 * get the key use for Incidence data
+	 * @return 'Incidence'
+	 */
+	public static String getKeyIncidence() {
+		return keyIncidence;
+	}
+
+
+}// AggregateDataWriter
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CSVAnalysisWriter.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CSVAnalysisWriter.java
new file mode 100644
index 0000000..dcba2ad
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CSVAnalysisWriter.java
@@ -0,0 +1,378 @@
+// CSVAnalysisWriter
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.stem.analysis.ErrorResult;
+
+
+/**
+ * writes CSV Files
+ * 
+ */
+public class CSVAnalysisWriter  {
+
+	// private static final DateFormat df =
+	// DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.MEDIUM);
+
+	/**
+	 * 
+	 */
+	private String outputFileName = "";
+	
+
+	/**
+	 * TODO need to get disease parameters for the scenario and write them to a
+	 * file
+	 */
+	protected String paramFileName;
+	
+	//private static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE d MMM yy", Locale.getDefault());
+
+	private static final IPath PATH = org.eclipse.stem.util.analysis.Activator.getDefault().getStateLocation();
+
+	private static final String sep = File.separator;
+	
+	protected static final String CSV = "csv";
+	
+	private static final String PATH_SUFFIX = CSV+sep;
+	
+	private  static String adir = PATH.append(sep + PATH_SUFFIX).toOSString();
+
+	private FileWriter fw;
+
+	/**
+	 * decimal format
+	 */
+	// private static final DecimalFormat df1 = new DecimalFormat( "0.0" );
+	// private static final DecimalFormat df2 = new DecimalFormat( "0.00" );
+	// private static final DecimalFormat df3 = new DecimalFormat( "0.000" );
+	// private static final DecimalFormat df4 = new DecimalFormat( "0.0000" );
+	// private static final DecimalFormat df5 = new DecimalFormat( "0.00000" );
+	
+	
+
+
+	/**
+	 * 
+	 * @param fileName
+	 */
+	public CSVAnalysisWriter(final String fileName) {
+		
+		outputFileName = adir+fileName+"."+CSV;
+		final File dir = new File(adir);
+		if ((!dir.exists()) || (!dir.isDirectory())) {
+			// create it.
+			boolean success = dir.mkdirs();
+			if (!success) {
+				Activator.logError(
+						"Failed to Create Driectory" + outputFileName,
+						new IOException("Failed to Create Driectory"
+								+ outputFileName));
+			}
+			
+		}
+		
+		try {
+			fw = new FileWriter(outputFileName);
+		} catch (final IOException e) {
+			Activator.logError(
+					"Error closing CSV analysis file"
+							+ outputFileName + outputFileName, e);
+		}
+		
+	} // CSVAnalysisWriter
+	
+	/**
+	 * 
+	 * @param directory
+	 * @param fileName
+	 */
+	public CSVAnalysisWriter(final String directory, final String fileName) {
+		
+		
+		adir = directory;
+		outputFileName = adir+fileName+"."+CSV;
+				
+		final File dir = new File(adir);
+		if ((!dir.exists()) || (!dir.isDirectory())) {
+			// create it.
+			boolean success = dir.mkdirs();
+			if (!success) {
+				Activator.logError(
+						"Failed to Create Driectory" + outputFileName,
+						new IOException("Failed to Create Driectory"
+								+ outputFileName));
+			}
+			
+		}
+		
+		try {
+			fw = new FileWriter(outputFileName);
+		} catch (final IOException e) {
+			Activator.logError(
+					"Error closing CSV analysis file"
+							+ outputFileName + outputFileName, e);
+		}
+		
+	} // CSVAnalysisWriter
+
+
+	
+	/**
+	 * Log the data from a simple list
+	 * @param dataList 
+	 */
+	public void logData(List<EList<Double>> dataList) {
+		
+			 
+		    // get the size of the longest array
+			int maxRows = 0;
+			int numArrays = dataList.size();
+			for(int i = 0; i < numArrays; i ++) {
+				EList<Double> data = dataList.get(i);
+				if(data.size() >= maxRows) maxRows = data.size();
+			}
+			
+			
+			// rows
+			for(int y = 0; y < maxRows; y ++) {
+				String str = "";
+				// columns
+				for(int x = 0; x < numArrays; x ++) {
+					EList<Double> data = dataList.get(x);
+					if(data.size()>= maxRows) {
+						str += data.get(y);
+						if(x < numArrays-1) str += ", ";
+					}
+				}
+				
+				str += "\n";
+				try {
+					fw.write(str);
+				} catch (final IOException e) {
+					Activator.logError("Error writing data to CSV Analysis file"
+									+ outputFileName + outputFileName, e);
+				}
+			}
+			
+			try {
+				fw.flush();
+				fw.close();
+			} catch (final IOException e) {
+				Activator.logError(
+						"Error closing CSV analysis file"
+								+ outputFileName + outputFileName, e);
+			}
+	}// log data
+	
+	/**
+	 * Log the data from a simple list
+	 * @param header 
+	 * @param dataList 
+	 */
+	public void logData(List<String> header, List<double[]> dataList) {
+		
+		    // header columns
+		    String strHeader = "iteration";
+		    for(int x = 0; x < header.size(); x ++) {
+		    	strHeader += ", "+header.get(x);
+		    }
+		    strHeader += "\n";
+		    try {
+				fw.write(strHeader);
+			} catch (final IOException e) {
+				Activator.logError("Error writing HEADER to CSV Analysis file"
+								+ outputFileName + outputFileName, e);
+			}
+			
+		    // get the size of the longest array
+			int maxRows = 0;
+			int numArrays = dataList.size();
+			for(int i = 0; i < numArrays; i ++) {
+				double[] data = dataList.get(i);
+				if(data.length >= maxRows) maxRows = data.length;
+			}
+			
+			
+			// rows
+			for(int y = 0; y < maxRows; y ++) {
+				String str = y+" ";
+				// columns
+				for(int x = 0; x < numArrays; x ++) {
+					double[] data = dataList.get(x);
+					if(data.length>= maxRows) {
+						str += ", "+data[y];
+					}
+				}
+				
+				str += "\n";
+				try {
+					fw.write(str);
+				} catch (final IOException e) {
+					Activator.logError("Error writing data to CSV Analysis file"
+									+ outputFileName + outputFileName, e);
+				}
+			}
+			
+			try {
+				fw.flush();
+				fw.close();
+			} catch (final IOException e) {
+				Activator.logError(
+						"Error closing CSV analysis file"
+								+ outputFileName + outputFileName, e);
+			}
+	}// log data
+	
+	
+	/**
+	 * Log the data for a list of trajectories
+	 * @param dimension of the space (always 2 for now)
+	 * @param dataList 
+	 */
+	public void logData(int dimension, List<PhaseSpaceCoordinate[]> dataList) {
+		
+			
+		    // get the size of the longest array
+			int maxRows = 0;
+			int numArrays = dataList.size();
+			for(int i = 0; i < numArrays; i ++) {
+				PhaseSpaceCoordinate[] data = dataList.get(i);
+				if(data.length >= maxRows) maxRows = data.length;
+			}
+			
+		
+			// rows
+			for(int y = 0; y < maxRows; y ++) {
+				// columns
+				String str = "";
+				for(int x = 0; x < numArrays; x ++) {
+					PhaseSpaceCoordinate[] data = dataList.get(x);
+					if(data.length>= maxRows) {
+						str += data[y].xValue+", "+data[y].yValue+"  ";
+						if(x < numArrays-1) str += ", ";
+					}
+				}
+				str += "\n";
+				try {
+					fw.write(str);
+				} catch (final IOException e) {
+					Activator.logError("Error writing data to CSV Analysis file"
+									+ outputFileName + outputFileName, e);
+				}
+			}
+			
+			try {
+				fw.flush();
+				fw.close();
+			} catch (final IOException e) {
+				Activator.logError(
+						"Error closing CSV analysis file"
+								+ outputFileName + outputFileName, e);
+			}
+			
+			
+
+
+	}// log data
+	
+	
+	/**
+	 * Log the data for a comparison of multiple scenarios versus a reference
+	 * scenario
+	 * @param data 
+	 */
+	public void logData(Map<Map<String, String>, ErrorResult> data) {
+		// write the header param names plus the header for the RMS difference
+		// Just get the first key and use the param names from it
+		try {
+			Map<String, String> firstResult = data.keySet().iterator().next();
+			Set<String> parms = firstResult.keySet();
+			for(String p : parms) {
+				fw.write(p);
+				fw.write(",");
+			}
+			fw.write("RMS");
+			fw.write("\n");
+	
+			// Now write the result
+			
+ 			for(Map<String, String> entry : data.keySet()) {
+				ErrorResult res = data.get(entry);
+				// Compute average
+				Collection<String> pvalues = entry.values();
+				for(String pval : pvalues) {fw.write(pval);fw.write(",");}
+				double error = 0;
+				if(res!=null){
+					error = res.getError();
+				}
+				fw.write(error+"");
+				fw.write("\n");
+				
+			}
+		} catch(IOException ioe) {
+			Activator.logError(
+					"Error closing CSV analysis file"
+							+ outputFileName + outputFileName, ioe);
+		}	
+		
+	}
+	
+
+	/*
+	 * private Graph getGraph(final Node node) { return (Graph)
+	 * node.eContainer().eContainer(); } // getGraph
+	 */
+
+	/**
+	 * Flush and Close the file
+	 */
+	public void flushLoggerData() {
+		try {
+			if (fw != null) fw.flush();
+		} catch (final IOException e) {
+			// do nothing
+		}
+		
+	} // flush All Data
+	
+	/**
+	 * Flush and Close the file
+	 */
+	public void closeLoggerData() {
+		flushLoggerData();
+		
+		if (fw == null) {
+			return;
+		}
+		
+		try {
+			fw.close();
+		} catch (final IOException e) {
+			Activator.logError("Error CLOSING CSV Logger file" + outputFileName
+					+ outputFileName, e);
+		}
+		// for testing
+	} // logAll Data
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CycleCompressor.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CycleCompressor.java
new file mode 100644
index 0000000..5cfd59e
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/CycleCompressor.java
@@ -0,0 +1,270 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * This class is designed to take a time series with multiple epidemic waves. It collapses the data into
+ * a single "averaged" cycle aligning the peaks of each epidemic using a smoothing and peak finding algorithm
+*/
+public class CycleCompressor {
+	
+	org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance data;
+	
+	/**
+	 * this phase shift maximizes the correlation between the two vectors
+	 */
+	static final int WINDOW = 365;
+	
+	/**
+	 * by default we will try to find max correlation for a shift of +/- 30 days
+	 * if the vectors are shorter than this we reduce the window
+	 */
+	static final int INITIAL_PHASE_SHIFT = 30;
+	
+	/**
+	 * the peak positions
+	 */
+	public static List<Integer> peakPositions = new ArrayList<Integer>();
+	
+	static List<Double> compressedCycles = new ArrayList<Double>();
+	
+	protected static final int[] DAY_OF_CHANNUKA = { 347, 702, 1086, 1430, 1794, 2179,
+										   2533, 2916, 3271, 3625, 4008 };
+
+	
+	
+	/**
+	 * This class is designed to take a ReferenceScenarioDataInstance(s) and to reconstruct a single "averaged" or 
+	 * typical epidemic wave from a time series containing many such waves.
+	 * Note that the peak finder algorithm operates on smoothed data but once the peaks are located
+	 * the integration and normalization is done with the raw data.
+	 * @param dataInstance
+	 * 
+	 */
+	public CycleCompressor(ReferenceScenarioDataInstance dataInstance) {
+		data = dataInstance;
+		String key = "Incidence"; // this only works for incidence data right now
+		peakPositions = this.getDelayAfterChannuka(data, key );
+		//peakPositions = this.getPeakPositions(data, key );
+		
+		
+		for (int i = 0; i < peakPositions.size(); i ++) {
+			int peak = peakPositions.get(i).intValue();
+			System.out.print(""+peak+",");
+		}
+		System.out.println("-1");
+		
+		compressedCycles = this.compressData(data, peakPositions, key);
+	}
+	
+	/**
+	 * Finds index of peaks, returns as list
+	 * @param instance
+	 * @param key 
+	 * @parameter key (must be I, E, or incidence - they have peaks)
+	 * @return list of peak positions
+	 */
+	public List<Integer> getPeakPositions(ReferenceScenarioDataInstance instance, String key) {
+		List<Integer> peaks = new ArrayList<Integer>();
+		
+		List<Double> vector = instance.getData().get(key);
+		List<Double> smoothedOnce = smooth3(vector);
+		List<Double> smoothed = smooth3(smoothedOnce);
+		int istart = 0;
+		int istop = INITIAL_PHASE_SHIFT;
+		int peakPos = findPeak(smoothed,istart,istop);
+		if(peakPos!=istart) peaks.add(new Integer(peakPos));
+		int maxStartIndex = smoothed.size() - WINDOW/2;
+		while(peakPos < maxStartIndex ) {
+			istart = peakPos+(WINDOW/2);
+			istop = istart + WINDOW;
+			peakPos= findPeak(smoothed,istart,istop);
+			peaks.add(new Integer(peakPos));
+		}
+		return peaks;
+	}
+	
+	
+	
+
+	/**
+	 * Finds index of peaks, returns as list
+	 * @param instance
+	 * @param key 
+	 * @parameter key (must be I, E, or incidence - they have peaks)
+	 * @return list of peak positions
+	 */
+	public List<Integer> getDelayAfterChannuka(ReferenceScenarioDataInstance instance, String key) {
+		List<Integer> peaks = new ArrayList<Integer>();
+		
+		List<Double> vector = instance.getData().get(key);
+		List<Double> smoothedOnce = smooth3(vector);
+		List<Double> smoothed = smooth3(smoothedOnce);
+		
+		for (int i = 0; i < DAY_OF_CHANNUKA.length; i ++) {
+			int istart = DAY_OF_CHANNUKA[i]-30;
+			int istop = istart + 90;
+			//int peakPos = findFirstPeak(smoothed,istart,istop);
+			int peakPos = findPeak(smoothed,istart,istop);
+			peaks.add(new Integer(peakPos));
+		}
+		
+		return peaks;
+	}
+	
+	
+	/**
+	 * Created and "averaged" cycle from several periods of data
+	 * @param instance
+	 * @param peaks
+	 * @param key
+	 * @return the compressed data
+	 */
+	public List<Double> compressData(ReferenceScenarioDataInstance instance, List<Integer> peaks, String key) {
+		
+		List<Double> data = instance.getData().get(key);
+		double[] sum = new double[WINDOW];
+		double[] denom = new double[WINDOW];
+		//1.  init
+		for(int i = 0; i < WINDOW; i ++) {
+			sum[i] = 0.0;
+			denom[i] = 0.0;
+		}
+	    //2.  integrate all cycles
+		for (int iPeak = 0; iPeak < peaks.size(); iPeak ++) {
+			int nextPeak = peaks.get(iPeak).intValue();
+			int istart = nextPeak-WINDOW/2;
+			
+			int index = istart;	
+			for(int i = 0; i < WINDOW; i ++) {
+				if((index >=0)&&(index < data.size())) {
+					double val = data.get(index).doubleValue();
+					sum[i] += val;
+					denom[i] += 1.0;
+				}// if in bounds
+				index ++;
+			}// all data in window
+			
+		}// all peaks
+		//3.  normalize the result 
+		List<Double> compressed = new ArrayList<Double>();
+		for(int i = 0; i < WINDOW; i ++) {
+				if(denom[i] <= 0.0) denom[i] = 1.0; // always
+				double val = sum[i] / denom[i];
+				compressed.add(i,new Double(val));
+		}// all data in window
+		
+		return compressed;
+	}
+	
+
+	/**
+	 * @param dataList
+	 * @param istart
+	 * @param istop
+	 * @return index of peak position within window
+	 */
+	public static int findPeak(List<Double> dataList, int istart, int istop) {
+		int peakIndex = istart;
+		double peakVal = 0.0;
+		for (int i = istart; i < istop; i ++) {
+			if(i < dataList.size() ) {
+				double val = dataList.get(i).doubleValue();
+				if(val>peakVal) {
+					peakVal = val;
+					peakIndex = i;
+				}// if peak
+			}// if not end of data
+		}// for all data
+		//System.out.println("found peak at "+peakIndex+" val="+peakVal);
+		return peakIndex;
+	}// findPeak
+
+
+	/**
+	 * @param dataList
+	 * @param istart
+	 * @param istop
+	 * @return index of peak position within window
+	 */
+	public static int findFirstPeak(List<Double> dataList, int istart, int istop) {
+		int peakIndex = istart;
+		double peakVal = 0.0;
+		for (int i = istart; i < istop; i ++) {
+			if(i < dataList.size() ) {
+				double val = dataList.get(i).doubleValue();
+				if(val>=peakVal) {
+					peakVal = val;
+					peakIndex = i;
+				}// if peak
+				else {
+					return peakIndex;
+				}
+			}// if not end of data
+		}// for all data
+		//System.out.println("found peak at "+peakIndex+" val="+peakVal);
+		return peakIndex;
+	}// findPeak
+	
+	
+	
+	/** 
+	 * do a three point smooth
+	 * @param dataList
+	 * @return the smoothed data
+	 */
+	public static List<Double> smooth3(List<Double> dataList) {
+		List<Double> smooth = new ArrayList<Double>();
+		double v0 = dataList.get(0).doubleValue();
+		double v1 = dataList.get(1).doubleValue();
+		// add the first endpoint
+		smooth.add( new Double( (v0+v1)/2.0) );
+		
+		// add the others
+		for (int i = 1; i < dataList.size()-1; i ++) {
+			double d1 = dataList.get(i-1).doubleValue();
+			double d2 = dataList.get(i).doubleValue();
+			double d3 = dataList.get(i+1).doubleValue();
+			smooth.add(i, new Double( (d1+d2+d3)/3.0) );
+		}
+		int iLast = dataList.size() -1;
+		// add the last end point
+		v0 = dataList.get(iLast).doubleValue();
+		v1 = dataList.get(iLast-1).doubleValue();
+		smooth.add( new Double( (v0+v1)/2.0) );
+		
+		return smooth;
+	}// smooth
+	
+
+
+	/**
+	 * get the result
+	 * @return cycle compressed data
+	 */
+	public double[] getCompressedData() {
+		double[] values = new double[compressedCycles.size()];
+		for (int i = 0; i < compressedCycles.size(); i ++) {
+			values[i] = compressedCycles.get(i).doubleValue();
+		}
+		return values;
+	}
+ 
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/DataProcessor.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/DataProcessor.java
new file mode 100644
index 0000000..407b369
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/DataProcessor.java
@@ -0,0 +1,748 @@
+// DataProcessor.java
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.definitions.Activator;
+
+/**
+ * This class reads incidence data from files (file names keyed by location) and 
+ * creates the new format CSV files for STEM.
+ * It rewrites the incidence.
+ * It computes and writes the SIR approximations from the incidence and the 
+ * population data.
+ */
+public class DataProcessor {
+
+	/** 
+	 * Name of the result files
+	 */
+	private static final String INCIDENCE_FILE_NAME = "Incidence_2.csv";
+	private static final String SUSCEPTIBLE_FILE_NAME = "S_2.csv";
+	private static final String INFECTIOUS_FILE_NAME = "I_2.csv";
+	private static final String RECOVERED_FILE_NAME = "R_2.csv";
+	private static final String POPULATION_FILE_NAME = "P_2.csv";
+	private static final String REPORTING_FRACTION_FILE_NAME = "reportingFraction.csv";
+
+	/**
+	 * Incidences per location id
+	 */
+	private Map<String,List<Data>> incidenceMap = new HashMap<String,List<Data>>();
+	
+	/**
+	 * Population size per location id
+	 */
+	private Map<String,Double> populationMap = new HashMap<String,Double>();
+
+	/**
+	 * Maximum number of iterations (days) for a specific location 
+	 */
+	private int maxIteration = 0;
+	
+	/**
+	 * Reference population day (day of population data versus the start date 
+	 * of the data)
+	 */
+	private long referencePopulationDay;
+	
+	/**
+	 * Population change per day (population size at the start date of the data 
+	 * versus the size at the end date of the data)
+	 */
+	private double fractChangePopulationPerDay;
+	
+	/**
+	 * Computes and writes the SIR approximations from the incidence and the 
+	 * population data.
+	 * 
+	 * @param sourceFolder The folder of the source data
+	 * @param targetFolder The target folder of the results
+	 * @param startDate The date in which the data starts
+	 * @param endDate The date in which the data ends
+	 * @param populationDataFile The population data file
+	 * @param populationSizeStartYear Population size in the first year of the data
+	 * @param populationSizeEndYear Population size in the last year of the data
+	 * @param recoveryRate Average time it takes an infectious person to recover
+	 * @param susceptibleRate Rate of initial susceptible to disease
+	 * @param immunityLossRate Immunity loss rate to disease
+	 * 
+	 * @throws ScenarioInitializationException Thrown when the process fails
+	 */
+	public void process(
+			String sourceFolder,
+			String targetFolder,
+			Date startDate,
+			Date endDate,
+			String populationDataFile,
+			long populationSizeStartYear,
+			long populationSizeEndYear,
+			double recoveryRate,
+			double susceptibleRate,
+			double immunityLossRate) throws ScenarioInitializationException {
+
+		readPopulationData(
+				populationDataFile, 
+				startDate, 
+				endDate, 
+				populationSizeStartYear, 
+				populationSizeEndYear);
+		
+		readSourceData(sourceFolder);
+		
+		modelDiseaseState(recoveryRate, susceptibleRate, immunityLossRate);
+		
+		writeResults(targetFolder);
+		
+	} // process
+
+	/**
+	 * Read the population data.
+	 * 
+	 * @param populationDataFile The population data files
+	 * @param startDate The date in which the data starts
+	 * @param endDate The date in which the data ends
+	 * @param populationSizeStartYear Population size in the first year of the data
+	 * @param populationSizeEndYear Population size in the last year of the data
+	 * 
+	 * @exception ScenarioInitializationException 
+	 * 			  Thrown when failed to load the population data
+	 */
+	private void readPopulationData(
+			String populationDataFile,
+			Date startDate,
+			Date endDate,
+			long populationSizeStartYear,
+			long populationSizeEndYear) throws ScenarioInitializationException {
+
+		final String POPULATION_YEAR = "YEAR";
+
+		File file = new File(populationDataFile);
+		
+		BufferedReader fileReader = openReader(file);
+		if (fileReader == null) {
+			throw new ScenarioInitializationException(
+					"Failed to open population data file " + populationDataFile);
+		}
+		
+		// initialize the population data year to the first year of the data  
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(startDate);
+		int populationDataYear = cal.get(Calendar.YEAR);
+		
+		try {
+			String buffer = null;
+			while (EOF(buffer = fileReader.readLine()) != true) {
+				int idx = buffer.indexOf("=");
+				if(idx >= 0) {
+					String id = (buffer.substring(0,idx)).trim();
+					String value = (buffer.substring(idx+1,buffer.length())).trim();
+					if(id.equals(POPULATION_YEAR)) {
+						// extracts the population data year from the file
+						try {
+							populationDataYear = Integer.parseInt(value);
+						} catch (NumberFormatException ex) {
+							// ignore
+							Activator.logInformation("Failed to read population year", ex);
+						}
+					} else if(id.indexOf("-") >= 0){
+						try {
+							populationMap.put(id,new Double(value));
+						} catch (NumberFormatException ex) {
+							// ignore
+							Activator.logInformation("Failed to read population for " + id, ex);
+						}
+					}
+				}
+			}
+
+			if(populationMap.isEmpty()) {
+				throw new ScenarioInitializationException("Failed to read population data from " + file.getName());
+			}
+
+			// computation of reference population day
+			cal = Calendar.getInstance();
+			cal.set(Calendar.DAY_OF_YEAR, 1);
+			cal.set(Calendar.YEAR, populationDataYear); // population data year
+			long offset = cal.getTimeInMillis()-startDate.getTime(); // in milliseconds
+			referencePopulationDay = offset/(1000*60*60*24);
+			
+			// computation of population change per day
+			offset = endDate.getTime()-startDate.getTime(); // in milliseconds
+			long offsetDays = offset/(1000*60*60*24);
+			double changePopulationPerDay = 
+				((double)populationSizeEndYear - (double)populationSizeStartYear)/(offsetDays+1);
+			
+			fractChangePopulationPerDay = changePopulationPerDay/populationSizeStartYear;
+
+		} catch(IOException ex) {
+			throw new ScenarioInitializationException(ex);
+		}
+		
+	} // readPopulationData
+	
+	/**
+	 * Read the source data.
+	 * 
+	 * @param sourceFolder The folder of the source data
+	 * 
+	 * @exception ScenarioInitializationException 
+	 * 			  Thrown when failed to load the source data files
+	 */
+	private void readSourceData(
+			String sourceFolder) throws ScenarioInitializationException {
+		
+		File file = new File(sourceFolder);
+			
+		int numFiles = 0;
+		File[] allFiles = file.listFiles();
+		for (int i = 0; i < allFiles.length; i++) {
+			try {
+				readDataFromSourceFile(allFiles[i]);
+				numFiles ++;
+			} catch(ScenarioInitializationException ex) {
+				Activator.logInformation("Failed to read data from " + allFiles[i].getName(), ex);
+			}
+		}
+		
+		if(numFiles == 0) {
+			throw new ScenarioInitializationException("Failed to read source data from " + sourceFolder);
+		}
+		
+	} // readSourceData
+	
+	/**
+	 * Read data from a source file.
+	 * 
+	 * @param file A source file
+	 * 
+	 * @exception ScenarioInitializationException 
+	 * 			  Thrown when failed to load a source file
+	 */
+	private void readDataFromSourceFile(
+			File file) throws ScenarioInitializationException {
+		
+		String fileName = file.getName();
+		if (fileName.indexOf(".txt") < 0) {
+			return; // ignore
+		}
+
+		BufferedReader fileReader = openReader(file);
+		if (fileReader == null) {
+			throw new ScenarioInitializationException("Failed to open file " + fileName);
+		}
+		
+		int idx = fileName.indexOf(".txt");
+		String idInput = fileName.substring(0,idx);
+		String id = convertID(idInput);
+		if (id == null) {
+			throw new ScenarioInitializationException("Failed to convert " + idInput + " to STEM ID");
+		}
+		
+		Double population = populationMap.get(id);
+		if (population == null) {
+			throw new ScenarioInitializationException("No population found for " + id + " from " + idInput);
+		}
+
+		if(!incidenceMap.containsKey(id)) {
+			List<Data> incList = new ArrayList<Data>();
+			incidenceMap.put(id, incList);
+		}
+		List<Data> incList = incidenceMap.get(id);
+
+		try {
+			String buffer = null;
+			fileReader.readLine(); // skip the header
+			while (EOF(buffer = fileReader.readLine()) != true) {
+
+				StringTokenizer tokenizer = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+		        String iteration = tokenizer.nextToken(",");
+		        String time = tokenizer.nextToken(",");
+		        String inc = tokenizer.nextToken(",");
+			    
+		        Integer count = new Integer(iteration.trim());
+			    double reports = (new Double(inc)).doubleValue();
+			    double pop = getPopulation(count.intValue(), population.doubleValue());
+			    Data data = new Data(count, time, reports, pop);
+			    incList.add(data);
+			    if(incList.size() > maxIteration) {
+			    	maxIteration = incList.size();
+			    }
+			}
+		} catch(IOException ex) {
+			throw new ScenarioInitializationException(ex);
+		}
+		
+	} // readDataFromSourceFile
+
+	/**
+	 * Model the S,I,R disease parameters from incidence data, population, and 
+	 * modeled parameters for reporting fraction and recovery rate.
+	 * 
+	 * @param recoveryRate Average time it takes an infectious person to recover
+	 * @param susceptibleRate Rate of initial susceptible to disease
+	 * @param immunityLossRate Immunity loss rate to disease
+	 */
+	private void modelDiseaseState(
+			double recoveryRate,
+			double susceptibleRate,
+			double immunityLossRate) {
+		
+		// for all locations
+		Iterator<String> iter = populationMap.keySet().iterator();
+		while(iter.hasNext()) {
+			String id = iter.next();
+			
+			if(!incidenceMap.containsKey(id)) {
+				// ignore - no incidences for this location id
+				continue;
+			}
+
+			List<Data> dataList = incidenceMap.get(id);
+				
+			double minFraction = 10.0;
+			double bestFraction = 1.0;
+			double minSlope = Double.MAX_VALUE;
+			
+			// drop the reporting fraction until we hit negative S 
+			// this sets the MIN reporting fraction
+			boolean valid = true;
+			boolean pointOK = true;
+			final int maxdelta = 1000;
+			int idelta = maxdelta;
+		    double scale = 100000;
+			for (int ifraction = (int)scale; ((ifraction > 1)&&valid); ifraction -= idelta) {
+				pointOK = true;
+				if((ifraction<= idelta)&&(idelta >=10)){
+					idelta /= 10;
+				}
+				double fraction = ifraction/scale;
+				
+				// for all iterations
+				// re-scale the incidence and integrate it over time
+				// and subtracting from the susceptible at each time step
+				double integratedInfectious = 0.0;
+				double integratedRecoveries = 0.0;
+				double[] ydataS = new double[maxIteration];
+				double[] ydataR = new double[maxIteration];
+				double[] xdata = new double[maxIteration];
+				for(int i=0; i<maxIteration; i++) {
+					ydataS[i] = 0.0;
+					ydataR[i] = 0.0;
+					xdata[i] = 0.0;
+				}
+				
+				for (int i = 0; ((i < dataList.size())&&valid); i ++) {
+					Data data = dataList.get(i);
+					double incidence = data.reports/fraction;
+					double population = data.population;
+					integratedInfectious += incidence;
+					double recoveries = integratedInfectious * recoveryRate; 
+					integratedRecoveries += recoveries;
+					// set the initial recovered
+					if(i==0){ 
+						integratedRecoveries += (1.0-susceptibleRate) * population;
+					}
+					integratedInfectious -= recoveries;
+					double infectious = integratedInfectious;
+					integratedRecoveries *= (1.0 - immunityLossRate);
+					double recovered = integratedRecoveries;
+					double susceptible = population - (infectious + recovered);
+					ydataS[i] = susceptible/population;
+					ydataR[i] = recovered/population;
+					xdata[i] = i;
+					if((susceptible >= 0.0) &&(recovered>=0.0)&&(infectious>= 0.0)){
+						minFraction = fraction;
+						data.reportingFraction = minFraction;
+					} else {
+						pointOK = false;
+						if(idelta > 1) {
+							// back up and take smaller steps
+							ifraction += idelta;
+							idelta /= 10;
+						} else {
+							valid = false;
+							idelta = maxdelta;
+						}
+						break;
+					}
+					if(!(valid&&pointOK)) break;
+				} // for i time steps
+				
+				if(valid&&pointOK) {
+					double slope = getSlopeLinear(xdata,ydataS);
+					if (Math.abs(slope) <= minSlope) {
+						minSlope = Math.abs(slope);
+						bestFraction = fraction;
+					}
+				}
+				
+			} // for all reporting fractions
+
+			// set the fractions
+			for (int i = 0; ((i < dataList.size())&&valid); i ++) {
+				Data data = dataList.get(i);
+				if((bestFraction< 0.9)&&(bestFraction >= data.reportingFraction)){
+					data.reportingFraction = bestFraction;
+				}
+			} // for all times
+		} // for all locations
+		
+		// for all locations
+		iter = populationMap.keySet().iterator();
+		while(iter.hasNext()) {
+			String id = iter.next();
+			if(!incidenceMap.containsKey(id)) {
+				// ignore - no incidences for this location id
+				continue;
+			}
+			List<Data> dataList = incidenceMap.get(id);
+
+			// for all iterations
+			// re-scale the incidence and integrate it over time
+			// and subtracting from the susceptible at each time step
+			double integratedInfectious = 0.0;
+			double integratedRecoveries = 0.0;
+
+			// set the data
+			for (int i = 0; (i < dataList.size()); i ++) {
+				Data data = dataList.get(i);
+				double fraction = data.reportingFraction;
+				double incidence = data.reports/fraction;
+				double population = data.population;
+				integratedInfectious += incidence;
+				double recoveries = integratedInfectious * recoveryRate;
+				integratedRecoveries += recoveries;
+				// set the initial recovered
+				if(i==0){
+					integratedRecoveries += (1.0-susceptibleRate) * population;
+				}
+				integratedInfectious -= recoveries;
+				data.infectious = integratedInfectious;
+				integratedRecoveries *= (1.0 - immunityLossRate);
+				data.recovered = integratedRecoveries;
+				data.susceptible = population - (data.infectious + data.recovered);
+				
+			} // for i time steps
+			
+		} // for all locations
+		
+	} // modelDiseaseState
+
+	/**
+	 * Write the results to the target folder.
+	 * 
+	 * @param targetFolder The target folder of the results
+	 * 
+	 * @exception ScenarioInitializationException 
+	 * 			  Thrown when failed to write results
+	 */
+	private void writeResults(
+			String targetFolder) throws ScenarioInitializationException {
+
+		try {
+			if(!targetFolder.endsWith(File.separator)) {
+				targetFolder += File.separator;
+			}
+			
+			Writer fw1 = new FileWriter(targetFolder + INCIDENCE_FILE_NAME);
+			Writer fw2 = new FileWriter(targetFolder + SUSCEPTIBLE_FILE_NAME);
+			Writer fw3 = new FileWriter(targetFolder + INFECTIOUS_FILE_NAME);
+			Writer fw4 = new FileWriter(targetFolder + RECOVERED_FILE_NAME);
+			Writer fw5 = new FileWriter(targetFolder + POPULATION_FILE_NAME);
+			Writer fw6 = new FileWriter(targetFolder + REPORTING_FRACTION_FILE_NAME);
+			
+			String[] keys = new String[populationMap.keySet().size()];
+			Iterator<String> iter = populationMap.keySet().iterator();
+			int counter=0;
+			while(iter.hasNext()) {
+				keys[counter++] = iter.next();
+			}
+			
+			Arrays.sort(keys);
+			String header = "iteration,time";
+			for (int i = 0; i < keys.length; i ++) {
+				if (incidenceMap.containsKey(keys[i])) {
+					header += ","+keys[i];
+				}
+				
+			}
+			header += "\n";
+			fw1.write(header);
+			fw2.write(header);
+			fw3.write(header);
+			fw4.write(header);
+			fw5.write(header);
+			fw6.write(header);
+			
+			// for all iterations
+			for (int i = 0; i < maxIteration; i ++) {
+				// for all id (columns)
+				String line1 = "";
+				String line2 = "";
+				String line3 = "";
+				String line4 = "";
+				String line5 = "";
+				String line6 = "0,0";
+				
+				for (int j = 0; j < keys.length; j ++) {
+					String id = keys[j];
+					if (incidenceMap.containsKey(id)) {
+						List<Data> dataList = incidenceMap.get(id);
+						if(i >= dataList.size()) {
+							break;
+						}
+						Data data = dataList.get(i);
+						if(i==0) {
+							line6 += ","+data.reportingFraction;
+						}
+						if(j == 0) {
+							line1 += data.iteration.intValue()+","+data.time;
+							line2 += data.iteration.intValue()+","+data.time;
+							line3 += data.iteration.intValue()+","+data.time;
+							line4 += data.iteration.intValue()+","+data.time;
+							line5 += data.iteration.intValue()+","+data.time;
+						}
+						line1 += ","+data.reports;
+						line2 += ","+data.susceptible;
+						line3 += ","+data.infectious;
+						line4 += ","+data.recovered;
+						line5 += ","+data.population;
+					}
+				}
+				line1 += "\n";
+				line2 += "\n";
+				line3 += "\n";
+				line4 += "\n";
+				line5 += "\n";
+				if (i==0) line6 += "\n";
+				fw1.write(line1);
+				fw2.write(line2);
+				fw3.write(line3);
+				fw4.write(line4);
+				fw5.write(line5);
+				if (i==0) fw6.write(line6);
+			}
+			fw1.flush();
+			fw1.close();
+			fw2.flush();
+			fw2.close();
+			fw3.flush();
+			fw3.close();
+			fw4.flush();
+			fw4.close();
+			fw5.flush();
+			fw5.close();
+			fw6.flush();
+			fw6.close();
+		} catch (IOException ex) {
+			throw new ScenarioInitializationException(ex);
+		}
+		
+	} // writeResults
+	
+	/**
+	 * Returns the STEM ID corresponding to the input ID
+	 * 
+	 * @param inputID The location id as extracted from the file name
+	 * 
+	 * @return The STEM ID as extracted from the population file
+	 */
+	public String convertID(String inputID) {
+		
+		String inputCode2 = getAdmin2Code(inputID);
+		Iterator<String> iter = populationMap.keySet().iterator();
+		while(iter.hasNext()) {
+			String id = iter.next();
+			if(getAdmin2Code(id).equalsIgnoreCase(inputCode2)) return id;
+		}
+		return null;
+		
+	} // convertID
+	
+	/**
+	 * Find the STEM ID by matching region2 code part
+	 * 
+	 * @param id The location id as extracted from the file name
+	 * 
+	 * @return The STEM ID as extracted from the population file
+	 */
+	public static String getAdmin2Code(String id) {
+		
+		int idx = id.lastIndexOf("-");
+		return id.substring(idx+1,id.length());
+		
+	} // getAdmin2Code
+	
+	/**
+	 * Do the linear fitting.
+	 * 
+	 * @param xData
+	 * @param yData
+	 * 
+	 * @return slope
+	 */
+	private double getSlopeLinear(double[] xData, double[] yData) {
+		
+		LinearLeastSquaresFit linFit = new LinearLeastSquaresFit(xData, yData);
+		
+		return linFit.getSlope();
+		
+	} // getSlopeLinear
+	
+	/**
+	 * Returns the population size for a given iteration.
+	 * computation is based on
+	 * pj(t) = pj0 + fractChangePopulationPerDay*(iteration-referencePopulationDay)
+     * 
+	 * @param iteration The iteration count (day number)
+	 * @param refPop The size of the population as extracted from the file
+	 * 
+	 * @return The population size for a given iteration
+	 */
+	private double getPopulation(int iteration, double refPop) {
+		
+		double increase = (iteration-referencePopulationDay) * fractChangePopulationPerDay;
+		return refPop*(1 + increase);
+		
+	} // getPopulation
+	
+	/**
+	 * Create a new BufferedReader
+	 * 
+	 * @param f The file we want to open for reading
+	 * 
+	 * @return a reader to a given file
+	 */
+	public static BufferedReader openReader(File f) {
+
+		try {
+			if (f.exists() == false) {
+				return null;
+			}
+			return new BufferedReader(new FileReader(f));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+		
+	} // openReader
+	
+	/**
+	 * Indicate End-Of-File
+	 * 
+	 * @param buffer A buffer of data
+	 * 
+	 * @return True if we have reached End-Of-File
+	 */
+	public static boolean EOF(String buffer) {
+		
+		if (buffer == null || buffer.length() == 0)
+			return true;
+		return false;
+		
+	} // EOF
+	
+	/**
+	 * Class for each row in the input files
+	 */
+	public class Data {
+		
+		/**
+		 * Reported incidence
+		 */
+		public double reports; 
+		
+		/**
+		 * Reporting fraction
+		 */
+		public double reportingFraction = -1.0;
+		
+		/**
+		 * S
+		 */
+		public double susceptible = 0.0;
+		
+		/**
+		 * I
+		 */
+		public double infectious = 0.0;
+		
+		/**
+		 * R
+		 */
+		public double recovered = 0.0;
+		
+		/**
+		 * Population size
+		 */
+		public double population = 0.0;
+		
+		/**
+		 * Iteration count (day number)
+		 */
+		public Integer iteration;
+
+		/**
+		 * Time associated with this row
+		 */
+		public String time;
+		
+		/**
+		 * @param iter Iteration count (day number)
+		 * @param time The date of the report
+		 * @param reported Number of reported incidence
+		 * @param pop Population size
+		 */
+		public Data(Integer iter, String time, double reported, double pop) {
+			this.iteration = iter;
+			this.time = time;
+			this.reports = reported;
+			this.population = pop;
+		}
+		
+		/**
+		 * @return The reference population size
+		 */
+		public double getReferencePopulation() {
+			return population;
+		}
+
+		/**
+		 * Set the reference population size
+		 * 
+		 * @param localPopulation The reference population size
+		 */
+		public void setLocalPopulation(double localPopulation) {
+			this.population = localPopulation;
+			this.susceptible = localPopulation; // initially
+		}
+
+	} // Data
+
+} // DataProcessor
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Error.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Error.java
new file mode 100644
index 0000000..74f5068
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Error.java
@@ -0,0 +1,17 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008, 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+public interface Error {
+ // Empty
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LinearLeastSquaresFit.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LinearLeastSquaresFit.java
new file mode 100644
index 0000000..b41aec1
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LinearLeastSquaresFit.java
@@ -0,0 +1,211 @@
+
+package org.eclipse.stem.util.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+
+/**
+ * Do a least squared fit for a set of x,y data 
+ * Data is passed as separate lists in the constructor
+ *
+ */
+public class LinearLeastSquaresFit {
+	
+	/**
+	 * best fit slope
+	 */
+	private double slope = 0;
+	/**
+	 * best fit intercept
+	 */
+	private double intercept = 0;
+	/**
+	 * variance of slope fit
+	 */
+	private double slopeVariance = 0;
+	
+
+
+	/**
+	 * variance of intercept fit
+	 */
+	private double interceptVariance = 0;
+	/**
+	 * standard deviation of slope fit
+	 */
+	private double slopeStdDev = 0;
+	/**
+	 * standard deviation of intercept fit
+	 */
+	private double interceptStdDev = 0;
+	
+	
+	/**
+	 * constructor
+	 * @param xList
+	 * @param yList
+	 */
+	public LinearLeastSquaresFit(List<Double> xList, List<Double> yList) {
+		
+		int npts = xList.size();
+		assert(npts == yList.size());
+		
+		//x, y for least squares fitting to line y = alpha*x - beta
+		double[] x = new double[npts];
+		double[] y = new double[npts];
+		
+		for(int j = 0; j < npts; j++){
+			x[j] = xList.get(j).doubleValue();
+			y[j] = yList.get(j).doubleValue();
+		}
+	
+		// do the fit
+		double sumx  = 0;
+		double sumy = 0;
+		double sumxy = 0;
+		double sumx2 = 0;
+		double sumy2 = 0;
+		double sum = 0;
+		
+		for(int j = 0; j < npts; j++){
+			sumx += x[j];
+			sumy += y[j];
+			sumxy += x[j] * y[j];
+			sumx2 += x[j] * x[j];
+			sumy2 += y[j] * y[j];
+			sum += 1;
+		}
+		
+		double delta = -(sum * sumx2 - sumx * sumx);
+		// get the intercept
+		intercept = (sumx * sumxy - sumy * sumx2)/delta;
+		
+		// get the slope
+		slope = (sumx * sumy - sum * sumxy )/delta;
+		
+		//variance and std
+		double variance = (sumy2+intercept*intercept*sum+slope*slope*sumx2
+				-2*(-intercept*sumy+slope*sumxy+intercept*slope*sumx))/(npts-2);
+		
+		interceptVariance = Math.abs((variance/delta)*sumx2);
+		slopeVariance = Math.abs((variance/delta)*sum);
+		
+		interceptStdDev = Math.sqrt(interceptVariance);
+		slopeStdDev = Math.sqrt(slopeVariance);
+		
+	}
+	
+	/**
+	 * constructor using simple arrays
+	 * @param xList
+	 * @param yList
+	 */
+	public LinearLeastSquaresFit(double[] xList, double[] yList) {
+		
+		int npts = xList.length;
+		assert(npts == yList.length);
+		
+		//x, y for least squares fitting to line y = alpha*x - beta
+		double[] x = xList;
+		double[] y = yList;
+		
+	
+		// do the fit
+		double sumx  = 0;
+		double sumy = 0;
+		double sumxy = 0;
+		double sumx2 = 0;
+		double sumy2 = 0;
+		double sum = 0;
+		
+		for(int j = 0; j < npts; j++){
+			sumx += x[j];
+			sumy += y[j];
+			sumxy += x[j] * y[j];
+			sumx2 += x[j] * x[j];
+			sumy2 += y[j] * y[j];
+			sum += 1;
+		}
+		
+		double delta = -(sum * sumx2 - sumx * sumx);
+		// get the intercept
+		intercept = (sumx * sumxy - sumy * sumx2)/delta;
+		
+		// get the slope
+		slope = (sumx * sumy - sum * sumxy )/delta;
+		
+		//variance and std
+		double variance = (sumy2+intercept*intercept*sum+slope*slope*sumx2
+				-2*(-intercept*sumy+slope*sumxy+intercept*slope*sumx))/(npts-2);
+		
+		interceptVariance = Math.abs((variance/delta)*sumx2);
+		slopeVariance = Math.abs((variance/delta)*sum);
+		
+		interceptStdDev = Math.sqrt(interceptVariance);
+		slopeStdDev = Math.sqrt(slopeVariance);
+		
+	}
+	
+	/**
+	 * 
+	 * @return the slope
+	 */
+	public double getSlope() {
+		return slope;
+	}
+
+
+	/**
+	 * 
+	 * @return the intercept
+	 */
+	public double getIntercept() {
+		return intercept;
+	}
+
+
+	/**
+	 * 
+	 * @return slopeVariance
+	 */
+	public double getSlopeVariance() {
+		return slopeVariance;
+	}
+
+
+	/**
+	 * 
+	 * @return interceptVariance
+	 */
+	public double getInterceptVariance() {
+		return interceptVariance;
+	}
+
+
+	/**
+	 * 
+	 * @return slopeStdDev
+	 */
+	public double getSlopeStdDev() {
+		return slopeStdDev;
+	}
+
+
+	/**
+	 * 
+	 * @return interceptStdDev
+	 */
+	public double getInterceptStdDev() {
+		return interceptStdDev;
+	}
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LyapunovAnalysis.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LyapunovAnalysis.java
new file mode 100644
index 0000000..d30d60f
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/LyapunovAnalysis.java
@@ -0,0 +1,365 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+
+   
+
+/** 
+ * this class computes the mean square difference between two scenarios as a function of time
+ * 1. It only looks at locations which are COMMON to both scenarios
+ * 2. The time series should be the same length. If they are not this will compare of a period equal to
+ *    the SHORTEST of all the time series. 
+ * 3. It only considers locations where infectious count is nonzero in one or the other - not interested in weighting regions with no disease.
+ *
+ *
+ */
+public class LyapunovAnalysis {
+	
+	/**
+	 * input
+	 */
+	Map<String,List<PhaseSpaceCoordinate>> commonPhaseSpaceA = new HashMap<String,List<PhaseSpaceCoordinate>>();
+	Map<String,List<PhaseSpaceCoordinate>> commonPhaseSpaceB = new HashMap<String,List<PhaseSpaceCoordinate>>();
+	
+	Map<String,List<Double>> totalPopulation = new HashMap<String,List<Double>>();
+	
+	
+	/**
+	 * number common locations with nonzero Inf count at time t
+	 */
+	public double[] locationCount;
+	
+	/**
+	 * Scenario A
+	 */
+	public PhaseSpaceCoordinate[] trajectoryA;
+	
+	/**
+	 * Scenario B
+	 */
+	public PhaseSpaceCoordinate[] trajectoryB;
+	
+	
+	/**
+	 * time
+	 */
+	public double[] time;
+	
+	/**
+	 * Determines the MeanSquare difference between two scenario data sets over time each stored in a map
+	 * @param scenarioMapA 
+	 * @param scenarioMapB 
+	 * @param runnableContext For progress indicator
+	 */
+	public LyapunovAnalysis(ReferenceScenarioDataMapImpl scenarioMapA, ReferenceScenarioDataMapImpl scenarioMapB, IRunnableContext runnableContext) {
+		final ReferenceScenarioDataMapImpl mapA = scenarioMapA;
+		final ReferenceScenarioDataMapImpl mapB = scenarioMapB;
+		
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Calculating common locations...", mapA.getNumLocations());
+    
+				Iterator<String> iteratorA = mapA.getLocations().iterator();
+				int maxTime = -1;
+				while(iteratorA.hasNext()) {
+					progress.worked(1);
+					if(progress.isCanceled()) throw new OperationCanceledException();
+					String id = iteratorA.next();
+					
+					if(mapB.containsLocation(id)) {
+						
+						// get the lists of data only for those locations that are common to both maps
+						ReferenceScenarioDataInstance dataMapA = mapA.getLocation(id);
+						List<PhaseSpaceCoordinate> aData = getNormalizedTrajectory(dataMapA);
+					
+						commonPhaseSpaceA.put(id,aData);
+						
+						// get the total population from Map A (same as map B for now
+						totalPopulation.put(id, getTotalPopulation(dataMapA));
+						
+						// Map B
+						ReferenceScenarioDataInstance dataMapB = mapB.getLocation(id);
+						List<PhaseSpaceCoordinate> bData = getNormalizedTrajectory(dataMapB);
+						
+						commonPhaseSpaceB.put(id,bData);
+					
+										
+						// init the arrays
+						if (maxTime == -1) maxTime = aData.size();
+						if(aData.size() < maxTime) maxTime = aData.size();
+						if(bData.size() < maxTime) maxTime = bData.size();
+					}// if
+				}// while
+				progress.done();
+				if(time==null) {
+					time = new double[maxTime];
+					trajectoryA = new PhaseSpaceCoordinate[maxTime];
+					trajectoryB = new PhaseSpaceCoordinate[maxTime];
+		
+					locationCount = new double[maxTime];
+					for(int i = 0; i < maxTime; i ++) {
+						time[i] = i;
+						trajectoryA[i] = new PhaseSpaceCoordinate(0.0,0.0);
+						trajectoryB[i] = new PhaseSpaceCoordinate(0.0,0.0);
+						locationCount[i] = 0.0;
+					}
+				}
+            } // run
+		};
+		try {
+			runnableContext.run(true, false, task);
+		} catch(InterruptedException ie) {
+			// This task is not interruptable
+		} catch(InvocationTargetException ive) {
+			// This task is not interruptable
+		}
+	}// constructor MeanSquareDifference
+	
+	
+	/**
+	 * From the dataMap extract a list of normalize infectious (fraction of total population)
+	 * @param dataMap
+	 * @return normalize list of infectious people
+	 */
+	public List<PhaseSpaceCoordinate> getNormalizedTrajectory(ReferenceScenarioDataInstance dataMap) {
+		final String SUSCEPTIBLE = States.statesToFit[States.SUSCEPTIBLE];
+		final String EXPOSED = States.statesToFit[States.EXPOSED];
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		final String RECOVERED = States.statesToFit[States.RECOVERED];
+		
+		// may or may not exist
+		List<String> exposedList = null;
+		List<String> recoveredList = null;
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		List<String> susceptibleList = dataMap.getData(SUSCEPTIBLE);	
+		assert(infectiousList!=null);
+		assert(susceptibleList!=null);
+		if(dataMap.containsParameter(EXPOSED)) {
+			exposedList = dataMap.getData(EXPOSED);	
+		}
+		if(dataMap.containsParameter(RECOVERED)) {
+			recoveredList = dataMap.getData(RECOVERED);	
+		}
+		
+		List<PhaseSpaceCoordinate> normalizedTrajectory = new ArrayList<PhaseSpaceCoordinate>();
+	
+		double[] totalPop = new double[infectiousList.size()];
+		for (int i = 0; i < infectiousList.size(); i ++) {
+			
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			double susc = (new Double(susceptibleList.get(i))).doubleValue();
+			double exposed = 0.0;
+			double recovered = 0.0;
+			if(exposedList!=null) {
+				exposed = (new Double(exposedList.get(i))).doubleValue();
+			}
+			if(recoveredList!=null) {
+				recovered = (new Double(recoveredList.get(i))).doubleValue();
+			}
+			totalPop[i] = inf+susc+exposed+recovered;
+			inf /= totalPop[i];
+			susc /= totalPop[i];
+			
+			PhaseSpaceCoordinate point = new PhaseSpaceCoordinate(susc,inf);
+			normalizedTrajectory.add(point);
+		}
+		return normalizedTrajectory;
+	}
+	
+	
+	
+	/**
+	 * From the dataMap extract a list of the total population)
+	 * @param dataMap
+	 * @return total population
+	 */
+	public List<Double> getTotalPopulation(org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance dataMap) {
+		final String SUSCEPTIBLE = States.statesToFit[States.SUSCEPTIBLE];
+		final String EXPOSED = States.statesToFit[States.EXPOSED];
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		final String RECOVERED = States.statesToFit[States.RECOVERED];
+		
+		// may or may not exist
+		List<String> exposedList = null;
+		List<String> recoveredList = null;
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		List<String> susceptibleList = dataMap.getData(SUSCEPTIBLE);	
+		assert(infectiousList!=null);
+		assert(susceptibleList!=null);
+		if(dataMap.containsParameter(EXPOSED)) {
+			exposedList = dataMap.getData(EXPOSED);	
+		}
+		if(dataMap.containsParameter(RECOVERED)) {
+			recoveredList = dataMap.getData(RECOVERED);	
+		}
+		
+		List<Double> population = new ArrayList<Double>();
+	
+		for (int i = 0; i < infectiousList.size(); i ++) {
+			double totalPop = 0.0;
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			double susc = (new Double(susceptibleList.get(i))).doubleValue();
+			double exposed = 0.0;
+			double recovered = 0.0;
+			if(exposedList!=null) {
+				exposed = (new Double(exposedList.get(i))).doubleValue();
+			}
+			if(recoveredList!=null) {
+				recovered = (new Double(recoveredList.get(i))).doubleValue();
+			}
+			totalPop = inf+susc+exposed+recovered;
+			population.add(new Double(totalPop));
+		}
+		return population;
+	}
+	
+	/**
+	 * solves for the Root MeanSquareDifference vs time
+	 * using infectious data only for now
+	 * 
+	 * @param runnableContext Runnable context for progress indicator
+	 * @return comparison time series as double[]
+	 */
+	
+	public List<PhaseSpaceCoordinate[]> getLyapunovTrajectory(IRunnableContext runnableContext) {
+		final List<PhaseSpaceCoordinate[]> retVal = new ArrayList<PhaseSpaceCoordinate[]>();
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Getting Lyapunov trajectory", time.length);
+    
+				double[] maxPopulation = new double[time.length];
+				for(int icount =0; icount < time.length; icount ++) {
+					progress.worked(1);
+					if(progress.isCanceled()) throw new OperationCanceledException();
+					
+					maxPopulation[icount] = 0.0;
+					Iterator<String> iter = commonPhaseSpaceA.keySet().iterator();
+					////////////////////////
+					// all locations
+					while(iter.hasNext()) {
+						String id = iter.next();
+						
+						List<PhaseSpaceCoordinate> aData = commonPhaseSpaceA.get(id);
+						List<PhaseSpaceCoordinate> bData = commonPhaseSpaceB.get(id);
+										
+						List<Double> population = totalPopulation.get(id);
+						// y axis is Infectious
+						double iA = aData.get(icount).getYValue();
+						double iB = bData.get(icount).getYValue();
+						
+						// x axis is Susceptible
+						double sA = aData.get(icount).getXValue();
+						double sB = bData.get(icount).getXValue();
+						
+						double pop = population.get(icount).doubleValue();
+						
+						//double denom = (iA+iB)/2.0;
+						// square of the average fraction of infectious people
+						//denom *= denom; 
+						if((iA>0.0)||(iB>0.0)) {
+							// we have a location with nonzero data
+							// weight by the total population
+							locationCount[icount] += 1.0;
+							maxPopulation[icount] += pop;
+							trajectoryA[icount].integratePath(sA*pop, iA*pop) ;
+							trajectoryB[icount].integratePath(sB*pop, iB*pop) ;
+						}
+					}// all locations
+		            ////////////////////////
+					
+					// normalize 
+					if(locationCount[icount] >= 1.0) {
+						trajectoryA[icount].normalize(maxPopulation[icount]);
+						trajectoryB[icount].normalize(maxPopulation[icount]);
+					}
+				}// for all time
+		
+				retVal.add(trajectoryA);
+				retVal.add(trajectoryB);
+				progress.done();
+            } // run
+		};
+		
+		try {
+			runnableContext.run(true, true, task);
+		} catch(InterruptedException ie) {
+			return null;
+		} catch(InvocationTargetException ive) {
+			return null;
+		}
+		
+		return retVal;	
+	}// getLyapunovTrajectory()
+	
+	/**
+	 * 
+	 * @param trajectoryList
+	 * @return the cumulative distance between the trajectories
+	 */
+	@SuppressWarnings("boxing")
+	public static List<EList<Double>> getCumulativePhaseSpaceDeviation(List<PhaseSpaceCoordinate[]> trajectoryList) {
+		List<EList<Double>> deviationList = new ArrayList<EList<Double>>();
+		PhaseSpaceCoordinate[] referenceTrajectory = trajectoryList.get(0);
+		
+		if(trajectoryList.size()>=2) {
+			for (int i = 1; i < trajectoryList.size(); i ++ ) {
+				PhaseSpaceCoordinate[] comparisonTrajectory = trajectoryList.get(i);
+				
+				EList<Double> deviation = new BasicEList<Double>(referenceTrajectory.length);
+				
+				//double minDeviation = 999999.0;
+				for (int j = 0; j < deviation.size(); j ++) {
+					deviation.set(j, 0.0);
+					if(comparisonTrajectory.length>= j) {
+						PhaseSpaceCoordinate ref = referenceTrajectory[j];
+						PhaseSpaceCoordinate comp = comparisonTrajectory[j];
+						deviation.set(j, deviation.get(j)+ref.getDistance(comp));
+						if (j >= 1) deviation.set(j, deviation.get(j-1) + deviation.get(j));
+					}
+				}
+				/**
+				 * take the log
+				 */
+				for (int j = 0; j < deviation.size(); j ++) {
+					if(deviation.get(j) > 0.0) deviation.set(j, Math.log(deviation.get(j)));
+				}
+				deviationList.add(deviation);
+			}
+		}
+		
+		return deviationList;
+	}
+} // class MeanSquareDifference
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MeanSquareDifference.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MeanSquareDifference.java
new file mode 100644
index 0000000..1928949
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MeanSquareDifference.java
@@ -0,0 +1,360 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/** 
+ * this class computes the mean square difference between two scenarios as a function of time
+ * 1. It only looks at locations which are COMMON to both scenarios
+ * 2. The time series should be the same length. If they are not this will compare of a period equal to
+ *    the SHORTEST of all the time series. 
+ * 3. It only considers locations where infectious count is nonzero in one or the other - not interested in weighting regions with no disease.
+ * @author james
+ *
+ */
+public class MeanSquareDifference {
+	
+	/**
+	 * input
+	 */
+	Map<String,List<Double>> commonInfectiousLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonInfectiousLocationsB = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonSusceptibleLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonSusceptibleLocationsB = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> totalPopulation = new HashMap<String,List<Double>>();
+	
+	
+	/**
+	 * number common locations with nonzero Inf count at time t
+	 */
+	public double[] locationCount;
+	/**
+	 * The Result
+	 */
+	public double[] meanSqDiff;
+	/**
+	 * time
+	 */
+	public double[] time;
+	
+	/**
+	 * Determines the MeanSquare difference between two scenario data sets over time each stored in a map
+	 * @param scenarioMapA 
+	 * @param scenarioMapB 
+	 * @param runnableContext Runnable context for progress indicator
+	 */
+	public MeanSquareDifference(ReferenceScenarioDataMapImpl scenarioMapA, ReferenceScenarioDataMapImpl scenarioMapB, IRunnableContext runnableContext) {
+		final ReferenceScenarioDataMapImpl mapA = scenarioMapA;
+		final ReferenceScenarioDataMapImpl mapB = scenarioMapB;
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Calculating common locations...", mapA.getNumLocations());
+     
+				Iterator<String> iteratorA = mapA.getLocations().iterator();
+				int maxTime = -1;
+				while(iteratorA.hasNext()) {
+					progress.worked(1);
+					if(progress.isCanceled()) throw new OperationCanceledException();
+					String id = iteratorA.next();
+					
+					if(mapB.containsLocation(id)) {
+						
+						// get the lists of data only for those locations that are common to both maps
+						ReferenceScenarioDataInstance dataMapA = mapA.getLocation(id);
+						List<Double> dataAI = getNormalizedInfectious(dataMapA);
+						commonInfectiousLocationsA.put(id,dataAI);
+						
+						List<Double> dataAS = getNormalizedSusceptible(dataMapA);
+						commonSusceptibleLocationsA.put(id,dataAS);
+						
+						
+						// get the total population from Map A (same as map B for now
+						totalPopulation.put(id, getTotalPopulation(dataMapA));
+						
+						// Map B
+						ReferenceScenarioDataInstance dataMapB = mapB.getLocation(id);
+						List<Double> dataBI = getNormalizedInfectious(dataMapB);
+						commonInfectiousLocationsB.put(id,dataBI);
+						
+						List<Double> dataBS = getNormalizedSusceptible(dataMapB);
+						commonSusceptibleLocationsB.put(id,dataBS);
+						
+						// init the array size
+						if (maxTime == -1) maxTime = dataAI.size();
+						
+						// dimension the arrays to the length of the SMALLEST array for which we have data
+						if(maxTime >= dataBI.size() ) maxTime = dataBI.size();
+						if(maxTime >= dataAI.size() ) maxTime = dataAI.size();
+					}// if
+				}// while
+				progress.done();
+				if(maxTime<=0) maxTime = 0;
+				if(time==null) {
+					time = new double[maxTime];
+					meanSqDiff = new double[maxTime];
+					locationCount = new double[maxTime];
+					for(int i = 0; i < maxTime; i ++) {
+						time[i] = i;
+						meanSqDiff[i] = 0.0;
+						locationCount[i] = 0.0;
+					}
+				}
+            }
+		};
+		try {
+			runnableContext.run(true, false, task);
+		} catch(InterruptedException ie) {
+			// Task is not interruptable
+		} catch(InvocationTargetException ite) {
+			// Task is not interruptable
+		}
+	}// constructor MeanSquareDifference
+	
+	
+	/**
+	 * From the dataMap extract a list of normalize infectious (fraction of total population)
+	 * @param dataMap
+	 * @return normalize list of infectious people
+	 */
+	public List<Double> getNormalizedInfectious(ReferenceScenarioDataInstance dataMap) {
+		final String SUSCEPTIBLE = States.statesToFit[States.SUSCEPTIBLE];
+		final String EXPOSED = States.statesToFit[States.EXPOSED];
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		final String RECOVERED = States.statesToFit[States.RECOVERED];
+		
+		// may or may not exist
+		List<String> exposedList = null;
+		List<String> recoveredList = null;
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		List<String> susceptibleList = dataMap.getData(SUSCEPTIBLE);	
+		assert(infectiousList!=null);
+		assert(susceptibleList!=null);
+		if(dataMap.containsParameter(EXPOSED)) {
+			exposedList = dataMap.getData(EXPOSED);	
+		}
+		if(dataMap.containsParameter(RECOVERED)) {
+			recoveredList = dataMap.getData(RECOVERED);	
+		}
+		
+		List<Double> normalizedInfectious = new ArrayList<Double>();
+		double[] totalPop = new double[infectiousList.size()];
+		for (int i = 0; i < infectiousList.size(); i ++) {
+			
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			double susc = (new Double(susceptibleList.get(i))).doubleValue();
+			double exposed = 0.0;
+			double recovered = 0.0;
+			if(exposedList!=null) {
+				exposed = (new Double(exposedList.get(i))).doubleValue();
+			}
+			if(recoveredList!=null) {
+				recovered = (new Double(recoveredList.get(i))).doubleValue();
+			}
+			totalPop[i] = inf+susc+exposed+recovered;
+			inf /= totalPop[i];
+			normalizedInfectious.add(new Double(inf));
+		}
+		return normalizedInfectious;
+	}
+	
+	
+	/**
+	 * From the dataMap extract a list of normalize infectious (fraction of total population)
+	 * @param dataMap
+	 * @return normalize list of infectious people
+	 */
+	public List<Double> getNormalizedSusceptible(ReferenceScenarioDataInstance dataMap) {
+		final String SUSCEPTIBLE = States.statesToFit[States.SUSCEPTIBLE];
+		final String EXPOSED = States.statesToFit[States.EXPOSED];
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		final String RECOVERED = States.statesToFit[States.RECOVERED];
+		
+		// may or may not exist
+		List<String> exposedList = null;
+		List<String> recoveredList = null;
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		List<String> susceptibleList = dataMap.getData(SUSCEPTIBLE);	
+		assert(infectiousList!=null);
+		assert(susceptibleList!=null);
+		if(dataMap.containsParameter(EXPOSED)) {
+			exposedList = dataMap.getData(EXPOSED);	
+		}
+		if(dataMap.containsParameter(RECOVERED)) {
+			recoveredList = dataMap.getData(RECOVERED);	
+		}
+		
+		List<Double> normalizedSusceptible = new ArrayList<Double>();
+		double[] totalPop = new double[susceptibleList.size()];
+		for (int i = 0; i < susceptibleList.size(); i ++) {
+			
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			double susc = (new Double(susceptibleList.get(i))).doubleValue();
+			double exposed = 0.0;
+			double recovered = 0.0;
+			if(exposedList!=null) {
+				exposed = (new Double(exposedList.get(i))).doubleValue();
+			}
+			if(recoveredList!=null) {
+				recovered = (new Double(recoveredList.get(i))).doubleValue();
+			}
+			totalPop[i] = inf+susc+exposed+recovered;
+			if(totalPop[i] != 0.0) susc /= totalPop[i];
+			else susc = 0; // some problem for air transporation nodes so added this fix
+			normalizedSusceptible.add(new Double(susc));
+		}
+		return normalizedSusceptible;
+	}
+	
+	/**
+	 * From the dataMap extract a list of the total population)
+	 * @param dataMap
+	 * @return total population
+	 */
+	public List<Double> getTotalPopulation(ReferenceScenarioDataInstance dataMap) {
+		final String SUSCEPTIBLE = States.statesToFit[States.SUSCEPTIBLE];
+		final String EXPOSED = States.statesToFit[States.EXPOSED];
+		final String INFECTIOUS = States.statesToFit[States.INFECTIOUS];
+		final String RECOVERED = States.statesToFit[States.RECOVERED];
+		
+		// may or may not exist
+		List<String> exposedList = null;
+		List<String> recoveredList = null;
+		 
+		// MUST exist
+		List<String> infectiousList = dataMap.getData(INFECTIOUS);
+		List<String> susceptibleList = dataMap.getData(SUSCEPTIBLE);	
+		assert(infectiousList!=null);
+		assert(susceptibleList!=null);
+		if(dataMap.containsParameter(EXPOSED)) {
+			exposedList = dataMap.getData(EXPOSED);	
+		}
+		if(dataMap.containsParameter(RECOVERED)) {
+			recoveredList = dataMap.getData(RECOVERED);	
+		}
+		
+		List<Double> population = new ArrayList<Double>();
+	
+		for (int i = 0; i < infectiousList.size(); i ++) {
+			double totalPop = 0.0;
+			double inf = (new Double(infectiousList.get(i))).doubleValue();
+			double susc = (new Double(susceptibleList.get(i))).doubleValue();
+			double exposed = 0.0;
+			double recovered = 0.0;
+			if(exposedList!=null) {
+				exposed = (new Double(exposedList.get(i))).doubleValue();
+			}
+			if(recoveredList!=null) {
+				recovered = (new Double(recoveredList.get(i))).doubleValue();
+			}
+			totalPop = inf+susc+exposed+recovered;
+			population.add(new Double(totalPop));
+		}
+		return population;
+	}
+	
+	/**
+	 * solves for the Root MeanSquareDifference vs time
+	 * using infectious data only for now
+	 * 
+	 * @param runnableContext Runnable context for progress indicator
+	 * @return comparison time series as double[]
+	 */
+	public double[] solve(IRunnableContext runnableContext) {
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Solving...", time.length);
+				double[] maxPopulation = new double[time.length];
+				for(int icount =0; icount < time.length; icount ++) {
+					progress.worked(1);
+					if(progress.isCanceled()) throw new OperationCanceledException();
+					maxPopulation[icount] = 0.0;
+					Iterator<String> iter = commonInfectiousLocationsA.keySet().iterator();
+					////////////////////////
+					// all locations
+					while(iter.hasNext()) {
+						String id = iter.next();
+						List<Double> dataAI = commonInfectiousLocationsA.get(id);
+						List<Double> dataBI = commonInfectiousLocationsB.get(id);
+						
+						List<Double> population = totalPopulation.get(id);
+						
+						double iA = dataAI.get(icount).doubleValue();
+						double iB = dataBI.get(icount).doubleValue();
+						double pop = population.get(icount).doubleValue();
+		
+						// double denom = (iA+iB)/2.0;
+						// square of the average fraction of infectious people
+						// denom *= denom;
+						if ((iA > 0.0) || (iB > 0.0)) {
+							// we have a location with nonzero data
+							locationCount[icount] += 1.0;
+							maxPopulation[icount] += pop;
+							// square of the DIFFERENCE
+							
+							// Changed 2/4/09. Drop the S data comparison
+							//double term = ((iA - iB) * (iA - iB))
+							//		+ ((sA - sB) * (sA - sB));
+							
+							double term = ((iA - iB) * (iA - iB));
+					
+							double numer = pop * Math.sqrt(term);
+							// normalize
+							meanSqDiff[icount] += numer;
+						}
+						
+					
+					}// all locations
+					
+            ////////////////////////
+			
+					// normalize 
+					if(locationCount[icount] >= 1.0) {
+						meanSqDiff[icount] /= maxPopulation[icount];
+					}
+				}// for all time
+				progress.done();
+            } // run
+		};
+		
+		try {
+			runnableContext.run(true, true, task);
+		} catch(InterruptedException ie) {
+			return null;
+		} catch(InvocationTargetException ive) {
+			return null;
+		}
+		return meanSqDiff;	
+	}// solve()
+
+	
+	
+} // class MeanSquareDifference
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ModelParameters.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ModelParameters.java
new file mode 100644
index 0000000..6b6edaa
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ModelParameters.java
@@ -0,0 +1,358 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+   
+
+/**
+ * This class holds all the parameters that we might want to estimate
+ * and their standard deviations and variances.
+ */
+public class ModelParameters {
+	
+	/**
+	 * All model parameters are stored in this map
+	 */
+	private final HashMap<String, Parameter> parameters = new HashMap<String, Parameter>();
+			
+	
+	/**
+	 * All selected data as a List<double[][]> keyed by location
+	 * for display. The double indices are data[state][chartIndex][time]
+	 * where state indicates either raw data (state=0) or the selected time region of the data (state=1) 
+	 * chart index selected for each of the state variables S,E,I,R (chartIndex 0-3)
+	 */
+	private final HashMap<String, List<double[][]> > selectedData = new HashMap<String, List<double[][]>>();
+	
+	/**
+	 * All selected regression as a List<double[][]> keyed by location
+	 * for display. The double indices are data[state][time]
+	 * where state indicates either x axis (state=0) or y axis (state=1) 
+	 * chart index selected for each of the state equations (chartIndex 0-3)
+	 */
+	private final HashMap<String, List<double[][]> > regressionData = new HashMap<String, List<double[][]>>();
+			
+
+	/**
+	 * All selected fits to the regression as a List<double[][]> keyed by location
+	 * for display. The double indices are data[state][time]
+	 * where state indicates either x axis (state=0) or y axis (state=1) 
+	 * chart index selected for each of the state equations (chartIndex 0-3)
+	 */
+	private final HashMap<String, List<double[][]> > fittedData = new HashMap<String, List<double[][]>>();
+			
+
+	
+	
+	/**
+	 * the reference population density
+	 * required to do an average across locations with varying density
+	 */
+	public static final double REFERENCE_POPULATION_DENSITY = 100.0;
+	
+	
+	/**
+	 * empty constructor
+	 */
+	public ModelParameters() {
+		// Nothing here
+	}
+
+	
+	/**
+	 * average the data in a map of model parameters
+	 * @param parameterIdMap
+	 * @return the averaged modelParameters
+	 */
+	public ModelParameters average(Map<String,ModelParameters> parameterIdMap) {
+		
+		
+		Iterator<String> iter = parameterIdMap.keySet().iterator();
+		
+		while((iter!=null)&&(iter.hasNext())) {
+			String key = iter.next();
+			ModelParameters parms = parameterIdMap.get(key);
+			this.accumulateNumerator(parms);
+			this.accumulateDenominator(parms);
+			
+			// and for display purposes save the data, by location, that went into the fit
+			Iterator<String> iter2 = parms.selectedData.keySet().iterator();
+			while((iter2!=null)&&(iter2.hasNext())) {
+				String id = iter2.next();
+				List<double[][]> data = parms.selectedData.get(id);
+				this.selectedData.put(id, data);
+			}	
+			// and for display purposes save the regression, by location, that went into the fit
+			Iterator<String> iter3 = parms.regressionData.keySet().iterator();
+			while((iter3!=null)&&(iter3.hasNext())) {
+				String id = iter3.next();
+				List<double[][]> data = parms.regressionData.get(id);
+				this.regressionData.put(id, data);
+			}	
+			
+			// and for display purposes save the fitted data, by location, that went into the fit
+			Iterator<String> iter4 = parms.fittedData.keySet().iterator();
+			while((iter4!=null)&&(iter4.hasNext())) {
+				String id = iter4.next();
+				List<double[][]> data = parms.fittedData.get(id);
+				this.fittedData.put(id, data);
+			}	
+		}// all locations
+		this.average();
+		this.calculateStdAvg();
+		return this;
+	}
+	
+
+	HashMap <String, Double> numerators = new HashMap<String, Double>();
+	
+	/**
+	 * accumulate numerator values from another ModelParameters instance for calculating average
+	 * @param other
+	 */
+	@SuppressWarnings("boxing")
+	private void accumulateNumerator(ModelParameters other) {
+		
+		for(Parameter parm : other.getParameters().values()) {
+			if(numerators.containsKey(parm.name))
+				numerators.put(parm.name, 
+						numerators.get(parm.name) + (parm.value / parm.variance));
+			else
+				numerators.put(parm.name, 
+						parm.value / parm.variance);
+		}
+	}
+	
+	HashMap <String, Double> denominators = new HashMap<String, Double>();
+	
+	/**
+	 * accumulate denominator values from another ModelParameters instance for calculating average
+	 * @param other
+	 */
+	@SuppressWarnings("boxing")
+	private void accumulateDenominator(ModelParameters other) {
+		
+		for(Parameter parm : other.getParameters().values()) {
+			if(denominators.containsKey(parm.name))
+				denominators.put(parm.name, 
+						denominators.get(parm.name) + (1.0 / parm.variance));
+			else
+				denominators.put(parm.name, 
+						(1.0 / parm.variance));
+		}
+	}
+	
+	/**
+	 * divide to get average
+	 */
+	private void average() {
+		for(String parm : this.numerators.keySet()) {
+			double num = numerators.get(parm).doubleValue();
+			double denom = denominators.get(parm).doubleValue();
+			this.addParameter(parm, new Parameter(parm, num / denom  ));
+		}// for
+	}// average
+	
+	/**
+	 * find std of each parameter average
+	 */
+	@SuppressWarnings("boxing")
+	private void calculateStdAvg() {
+		for(String parm : this.numerators.keySet()) {
+			Parameter p = this.getParameter(parm);
+			p.stddev = Math.sqrt(1.0 / denominators.get(parm));
+		}
+		
+		// I assume the += below was a bug? - SED
+/*		stdBeta += Math.sqrt(1/denominatorBeta);
+		stdAlpha += Math.sqrt(1/denominatorAlpha);
+		stdGamma += Math.sqrt(1/denominatorGamma);
+		stdEpsilon += Math.sqrt(1/denominatorEpsilon);
+		stdBeta2 += Math.sqrt(1/denominatorBeta2);
+		stdAlpha2 += Math.sqrt(1/denominatorAlpha2);
+		stdGamma2 += Math.sqrt(1/denominatorGamma2);
+		stdEpsilon2 += Math.sqrt(1/denominatorEpsilon2);
+		stdLambda += Math.sqrt(1/denominatorLambda);
+	*/
+	}
+
+	
+	/**
+	 * add a new parameter to the map
+	 * @param name Parameter name
+	 * @param parm Parameter instance
+	 */
+	public void addParameter(String name, Parameter parm) {
+		this.parameters.put(name, parm);
+	}
+	
+	/**
+	 * add selected data for display
+	 * @param name location name
+	 * @param data the selected data
+	 */
+	public void addSelectedData(String name, List<double[][]> data) {
+		this.selectedData.put(name, data);
+	}
+	
+	/**
+	 * add selected regression for display
+	 * @param name location name
+	 * @param data the selected data
+	 */
+	public void addRegressionData(String name, List<double[][]> data) {
+		this.regressionData.put(name, data);
+	}
+	
+	
+	/**
+	 * add fitted data for display
+	 * @param name location name
+	 * @param data the selected data
+	 */
+	public void addFittedData(String name, List<double[][]> data) {
+		this.fittedData.put(name, data);
+	}
+	
+
+	/**
+	 * Returns the raw data (state 0) and the selected data (state 1) 
+	 * for each of the state variables S,E,I,R (chartIndex 0-3)
+	 * @param id 
+	 * @param chartIndex 
+	 * @param state
+	 * @return the data to plot
+	 */
+	public double[] getDataValues(String id, int chartIndex, int state) {
+		List<double[][]> dataList = selectedData.get(id);
+		double[][] data = dataList.get(chartIndex);
+		// pick the right data for the right chart
+		return data[state];
+	}
+	
+	/**
+	 * Returns the regression data (x = state 0, y = state 1) 
+	 * for each of the state equations (chartIndex 0-3)
+	 * @param id 
+	 * @param chartIndex 
+	 * @param state
+	 * @return the data to plot
+	 */
+	public double[] getRegressionValues(String id, int chartIndex, int state) {
+		List<double[][]> dataList = regressionData.get(id);
+		double[][] data = dataList.get(chartIndex);
+		// pick the right data for the right chart
+		return data[state];
+	}
+	
+	/**
+	 * Returns the fitted data (x = state 0, y = state 1) 
+	 * for each of the state equations (chartIndex 0-3)
+	 * @param id 
+	 * @param chartIndex 
+	 * @param state
+	 * @return the data to plot
+	 */
+	public double[] getFittedValues(String id, int chartIndex, int state) {
+		List<double[][]> dataList = fittedData.get(id);
+		double[][] data = dataList.get(chartIndex);
+		// pick the right data for the right chart
+		return data[state];
+	}
+	
+	/**
+	 * validate the key
+	 * @param id
+	 * @return true if valid
+	 */
+	public boolean validDataID(String id) {
+		boolean retVal = false;
+		if ((id != null)&&(selectedData.containsKey(id))) retVal = true;
+		return retVal;
+	}
+	
+	/**
+	 * Returns the location IDs for which we analyzed data and
+	 * stored the lists of selected data
+	 * @return the location keys
+	 */
+	public String[] getDataLocations() {
+		Set<String> keys = selectedData.keySet();
+		// pick the right data for the right chart
+		String[] ids = new String[keys.size()];
+		Iterator<String> iter = keys.iterator();
+		int i = 0;
+		while(iter!=null&&iter.hasNext()) {
+			ids[i] = iter.next();
+			i++;
+		}
+		Arrays.sort(ids);
+		return ids;
+	}
+	
+	
+	
+	/**
+	 * Return the parameters
+	 * @return Map<String, Parameter> The parameters
+	 */
+	
+	public Map<String, Parameter> getParameters() {
+		return this.parameters;
+	}
+	
+	/**
+	 * Returns the specified parameter
+	 * @param p The parameter name
+	 * @return Parameter 
+	 */
+	
+	public Parameter getParameter(String p) {
+		return this.parameters.get(p);
+	}
+	/**
+	 * containsParameter Check if the given parameter is in this model
+	 * 
+	 * @param p The parameter
+	 * @return boolean True if p is in the model
+	 */
+	
+	public boolean containsParameter(String p) {
+		return this.parameters.containsKey(p);
+	}
+	/**
+	 * return values as a string
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		
+		for(Parameter parm:this.parameters.values()) {
+			buffer.append(parm.name).append("=").append(parm.value).append("\n");
+			buffer.append("deviation(").append(parm.name).append(")").append("=").append(parm.stddev).append("\n");
+			buffer.append("variance(").append(parm.name).append(")").append("=").append(parm.variance).append("\n");	
+		}		
+		return buffer.toString();
+	} 
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MonitorPreferences.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MonitorPreferences.java
new file mode 100644
index 0000000..955dda0
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/MonitorPreferences.java
@@ -0,0 +1,131 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Preferences;
+
+/**
+ * This class represents
+ */
+public class MonitorPreferences {
+
+	Plugin plugin = Activator.getDefault();
+
+	/**
+	 * the users preferences
+	 */
+	Preferences prefs = plugin.getPluginPreferences();
+
+	/**
+	 * the ID of the default location the location ID for the aggregated data at
+	 * the world level
+	 */
+	private static final String DEFAULT_PREFERENCE = "PREVIOUS_FOLDER";
+	
+	/**
+	 * the ID of the estimator method
+	 */
+	private static final String ESTIMATOR_PREFERENCE = "ESTIMATOR_METHOD";
+
+	
+	/**
+	 * the default folder location
+	 */
+	private static final String DEFAULT_PREF_VALUE = "";
+    
+	String recentFolder = null;
+	
+	String recentEstimationMethod = null;
+	
+
+	/**
+	 * 
+	 */
+	public MonitorPreferences() {
+		if (prefs.contains(DEFAULT_PREFERENCE)) {
+			recentFolder = prefs.getString(DEFAULT_PREFERENCE);
+		}  else {
+			// first time only
+			recentFolder = DEFAULT_PREF_VALUE;
+			setPreferences();
+		}
+		
+		if (prefs.contains(ESTIMATOR_PREFERENCE)) {
+			recentEstimationMethod = prefs.getString(ESTIMATOR_PREFERENCE);
+		}  else {
+			recentEstimationMethod = null;
+			setPreferences();
+		}
+	} // constructor
+
+	/**
+	 *  set the preferences
+	 */
+	public void setPreferences() {
+		prefs.setValue(DEFAULT_PREFERENCE, recentFolder);
+		if(recentEstimationMethod != null) prefs.setValue(ESTIMATOR_PREFERENCE, recentEstimationMethod);
+		plugin.savePluginPreferences();
+	}
+	
+	
+
+	
+
+	/**
+	 *  set the preferences based on user action
+	 * @param consumer specific class that sets or gets this folder preference
+	 * @param recent 
+	 */
+	public void setRecentFolder(String consumer, String recent) {
+		recentFolder=recent;
+		prefs.setValue(consumer+"_"+DEFAULT_PREFERENCE, recentFolder);
+		plugin.savePluginPreferences();
+	}
+
+	/**
+	 *  set the preferences based on user action
+	 * @param method 
+	 */
+	public void setEstimatorMethod(String method) {
+		recentEstimationMethod=method;
+		prefs.setValue(ESTIMATOR_PREFERENCE, recentEstimationMethod);
+		plugin.savePluginPreferences();
+	}
+	
+	
+	
+	/**
+	 * 
+	 * @param consumer 
+	 * @return recently used folder
+	 */
+	public String getRecentFolder(String consumer) {
+		recentFolder = prefs.getString(consumer+"_"+DEFAULT_PREFERENCE);
+		if((recentFolder==null)||(recentFolder.length()==0)) {
+			recentFolder = DEFAULT_PREF_VALUE;
+			setRecentFolder(consumer, recentFolder);
+			}
+		return recentFolder;
+	}
+	
+	
+	
+	
+	/**
+	 * 
+	 * @return recently used estimation method
+	 */
+	public String getRecentEstimatorMethod() {
+		return recentEstimationMethod;
+	}
+}// class
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/NonLinearSEIRParameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/NonLinearSEIRParameterEstimator.java
new file mode 100644
index 0000000..d797d30
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/NonLinearSEIRParameterEstimator.java
@@ -0,0 +1,249 @@
+
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * Estimate parameters for an SI, SIR or SEIR model
+ * 
+ *
+ */
+public class NonLinearSEIRParameterEstimator extends SEIRparameterEstimator {
+
+	// Unique states for this estimator
+	double [] e;
+	double [] r;
+	
+	/**
+	 * @param data
+	 */
+	public NonLinearSEIRParameterEstimator(ReferenceScenarioDataInstance data) {
+		super(data);
+		List<Double> sToFit = new ArrayList<Double>();
+		List<Double> eToFit = new ArrayList<Double>();
+		List<Double> iToFit = new ArrayList<Double>();
+		List<Double> rToFit = new ArrayList<Double>();
+		
+		List<Double> iList = data.getData().get(States.statesToFit[States.INFECTIOUS]);
+		List<Double> sList = data.getData().get(States.statesToFit[States.SUSCEPTIBLE]);
+		List<Double> rList = data.getData().get(States.statesToFit[States.RECOVERED]);
+		List<Double> eList = data.getData().get(States.statesToFit[States.EXPOSED]);
+		
+		// ToDo: Why are we skipping the first value?
+		for (int icount = 1; icount < iList.size(); icount ++) {
+				iToFit.add(iList.get(icount));
+				eToFit.add(eList.get(icount));
+				sToFit.add(sList.get(icount));
+				rToFit.add(rList.get(icount));
+		}
+		
+		this.numDataPoints = iToFit.size();
+		if(numDataPoints < MINSIZE) return;
+		dataValid = true;
+		this.s = new double[this.numDataPoints];
+		this.e = new double[this.numDataPoints];
+		this.i = new double[this.numDataPoints];
+		this.r = new double[this.numDataPoints];
+		this.t = new double[this.numDataPoints];
+		int npts = this.numDataPoints;
+		double[][] dataS = new double[2][npts - 1];
+		double[][] dataE = new double[2][npts - 1];
+		double[][] dataI = new double[2][npts - 1];
+		double[][] dataR = new double[2][npts - 1];
+		
+		for (int icount = 0; icount < this.numDataPoints; icount ++) {
+			s[icount] = sToFit.get(icount).doubleValue();
+			e[icount] = eToFit.get(icount).doubleValue();
+			i[icount] = iToFit.get(icount).doubleValue();
+			r[icount] = rToFit.get(icount).doubleValue();
+			t[icount] = icount;
+
+			// init the raw data for plotting
+			// *****************************************************************************************
+			// TODO need to fill the selected array in the code for this class *************************
+			// *****************************************************************************************
+			if(icount < this.numDataPoints-1) {
+				dataS[0][icount] = (s[icount]+s[icount+1])/2.0;
+				dataE[0][icount] = (e[icount]+e[icount+1])/2.0;
+				dataI[0][icount] = (i[icount]+i[icount+1])/2.0;
+				dataR[0][icount] = (r[icount]+r[icount+1])/2.0;
+				dataS[1][icount] = (s[icount]+s[icount+1])/2.0;
+				dataE[1][icount] = (e[icount]+e[icount+1])/2.0;
+				dataI[1][icount] = (i[icount]+i[icount+1])/2.0;
+				dataR[1][icount] = (r[icount]+r[icount+1])/2.0;
+				// init the selected data array
+				for (int chartIndex = 0; chartIndex < 4; chartIndex ++ ) {
+					// THIS IS WRONG
+					dataS[1][icount] = 0.0;
+					dataE[1][icount] = 0.0;
+					dataI[1][icount] = 0.0;
+					dataR[1][icount] = 0.0;
+				}// init selected
+			}// init the date
+
+		}// for icount
+	}// constructor
+
+	/**
+	 * Estimate the parameters
+	 * @param localDensity 
+	 * @param localPopulation 
+	 * @param locationID 
+	 * @return the ModelParameters estimate
+	 */
+	public ModelParameters estimate(double localDensity, double localPopulation, String locationID) {
+		
+		ModelParameters fittedParms = null;
+		final double CRITICAL_SUSCEPTIBLE = 0.3;
+		
+		int npts = s.length;
+		assert(npts == e.length);
+		assert(npts==i.length);
+		assert(npts==r.length);
+		
+		/*
+		 * Begin SEIR fitting to find parameters including beta function
+		 */
+		
+		//first find alpha and epsilon
+		double[] dS = new double[npts];
+		double[] lnE = new double[npts];
+		double[] dlnE = new double[npts];
+		
+		for(int j = 0; j < npts; j++){
+			lnE[j] = Math.log(e[j]);
+		}
+		
+		
+		//derivatives of endpoints
+		dS[0] = s[1] - s[0];
+		dS[npts-1] = s[npts-1] - s[npts-2];
+		dlnE[0] = lnE[1] - lnE[0]; 
+		dlnE[npts-1] = lnE[npts-1] - lnE[npts-2];
+
+		//derivatives of all other points
+		for(int j = 1;j < npts-1;j++)
+		{
+			dS[j] = (s[j+1] - s[j-1])/2;
+			dlnE[j] = (lnE[j+1] - lnE[j-1])/2;
+		}
+		
+	
+		//x and y for least squares fitting
+		double[] x = new double[npts];
+		double[] y = new double[npts];
+		
+		for(int j = 0; j < npts; j++){
+			x[j] = r[j]/e[j];
+			y[j] = (1/e[j])*dS[j]+dlnE[j];
+		}
+		
+		//sums for least squares fitting
+		double sumx  = 0;
+		double sumy = 0;
+		double sumxy = 0;
+		double sumx2 = 0;
+		double sumy2 = 0;
+		double sum = 0;
+		
+		for(int j = 0; j < npts; j++){
+			sumx += x[j];
+			sumy += y[j];
+			sumxy += x[j] * y[j];
+			sumx2 += x[j] * x[j];
+			sumy2 += y[j] * y[j];
+			sum += 1;
+		}
+		
+		//delta for Cramer's Rule
+		double delta = -(sum*sumx2 - sumx*sumx);
+		double alpha = -(sum*sumxy - sumx*sumy)/delta;
+		double epsilon = (sumx2*sumy - sumx*sumxy)/delta;
+		
+		//variance and std
+		double variance = (sumy2 + sum*epsilon*epsilon + alpha*alpha*sumx2
+				-2*(alpha*sumxy - epsilon*sumy + epsilon*alpha*sumx))/(npts-2);
+		
+		double varAlpha = -(variance/delta)*sum;
+		double varEpsilon = -(variance/delta)*sumx2;
+		
+		double stdAlpha = Math.sqrt(varAlpha);
+		double stdEpsilon = Math.sqrt(varEpsilon);
+		
+		//now find beta and lambda
+		
+		//x and y for least squares fitting
+		
+		// TODO Question for Barbara Jone
+		// PROBLEM: what does it mean when 
+		// (alpha*r - dS) is negative  ??
+		//  this gives NaN for log
+		for(int j = 0; j < npts; j++){
+			x[j] = Math.log(((s[j]+e[j]+i[j])-CRITICAL_SUSCEPTIBLE)/(1-CRITICAL_SUSCEPTIBLE));
+			y[j] = Math.log((alpha*r[j] - dS[j])/(s[j]*i[j]));
+		}
+		
+		//sums for least squares fitting, set back to zero
+	    sumx  = 0;
+	    sumy = 0;
+		sumxy = 0;
+		sumx2 = 0;
+		sumy2 = 0;
+		sum = 0;
+		
+		for(int j = 0; j < npts; j++){
+			sumx += x[j];
+			sumy += y[j];
+			sumxy += x[j] * y[j];
+			sumx2 += x[j] * x[j];
+			sumy2 += y[j] * y[j];
+			sum += 1;
+		}
+		
+		delta = sum*sumx2 - sumx*sumx;
+		double lnBeta = (sumy*sumx2 - sumx*sumxy)/delta;
+		double lambda = (sum*sumxy - sumx*sumy)/delta;
+		
+		double beta = Math.exp(lnBeta);
+		
+		//variance and std
+		variance = (sumy2 + lnBeta*lnBeta*sum + lambda*lambda*sumx2
+				-2*(lnBeta*sumy + lambda*sumxy + lnBeta*lambda*sumx))/(npts-2);
+		
+		double varLnBeta = (variance/delta)*sumx2;
+		double varLambda = (variance/delta)*sum;
+		
+		double stdLnBeta = Math.sqrt(varLnBeta);
+		double stdLambda = Math.sqrt(varLambda);
+		
+		//TODO How to find std and variance of Beta rather than lnBeta
+		
+		fittedParms = new ModelParameters();
+		double newbeta = beta;
+		if(!useFreqDependantBeta) newbeta *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+		fittedParms.addParameter(Parameter.BETA, new Parameter(Parameter.BETA, newbeta));
+		fittedParms.addParameter(Parameter.LNBETA, new Parameter(Parameter.LNBETA, lnBeta, stdLnBeta, varLnBeta));
+		fittedParms.addParameter(Parameter.ALPHA, new Parameter(Parameter.ALPHA, alpha, stdAlpha, varAlpha));
+		fittedParms.addParameter(Parameter.EPSILON, new Parameter(Parameter.EPSILON, epsilon, stdEpsilon, varEpsilon));
+		fittedParms.addParameter(Parameter.LAMBDA, new Parameter(Parameter.LAMBDA, lambda, stdLambda, varLambda));
+	       
+		return fittedParms;
+	} // estimate
+	
+	
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Parameter.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Parameter.java
new file mode 100644
index 0000000..177d241
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/Parameter.java
@@ -0,0 +1,177 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A fitted parameter
+ */
+public class Parameter {
+	
+	/*
+	 * These are common parameters used for estimation.
+	 * Observe that not all parameters are used in a given
+	 * scenario
+	 */
+	
+	/**
+	 * beta is the disease transmission rate
+	 */
+	public static String REJECT = "rejected";
+	
+	/**
+	 * beta is the disease transmission rate
+	 */
+	public static String BETA = "beta";
+	
+	/**
+	 * beta2 is the second fitted disease transmission rate in method two
+	 */
+	public static String BETA2 = "beta2";
+	
+	/**
+	 * lnBeta for nonlinear fit
+	 */
+	public static String LNBETA = "lnbeta";
+	
+	/**
+	 * alpha is the immunity loss rate
+	 */
+	
+	public static String ALPHA = "alpha";
+	
+	/**
+	 * alpha2 is the second fitted immunity loss rate in method two
+	 */
+	public static String ALPHA2 = "alpha2";
+
+	/**
+	 * epsilon is the incubation rate
+	 */
+	public static String EPSILON = "epsilon";
+
+	/**
+	 * epsilon2 is the second fitted incubation rate found in method two
+	 */
+	public static String EPSILON2 = "epsilon2";
+		
+	/**
+	 *gamma is the infectious recovery rate 
+	 */
+	public static String GAMMA = "gamma";
+	
+	/**
+	 * gamma2 is the second fitted infectious recovery rate in method two
+	 */
+	public static String GAMMA2 = "gamma2";
+	
+	/**
+	 * lambda is the infectious recovery rate 
+	 */
+	public static String LAMBDA = "lambda";
+	
+	/**
+	 * RdR
+	 */
+	public static String RdR = "RdR";
+	
+	/**
+	 * RdS
+	 */
+	public static String RdS = "RdS";
+	
+	/**
+	 * RdI
+	 */
+	public static String RdI = "RdI";
+	
+	/**
+	 * BETAVAR
+	 */
+	
+	public static String BETAVAR = "BETAVAR";
+	
+	/**
+	 * GAMMAVAR
+	 */
+	
+	public static String GAMMAVAR = "GAMMAVAR";
+	
+	
+	/** END PARAMETER DECLARATION */
+	
+	/**
+	 * Parameter name (for map keys etc.)
+	 */
+	public String name;
+	/**
+	 * The parameter value
+	 */
+	public double value = 0.0;
+	/**
+	 * The parameter standard deviation
+	 */
+	public double stddev = 1.0;
+	/**
+	 * The parameter variance
+	 */
+	public double variance= 1.0;
+	
+	/**
+	 * Private null constructor (force a name)
+	 * 
+	 */
+	
+	private Parameter() {
+		// Nothing here
+	}
+	
+	/**
+	 * Constructor 1
+	 * 
+	 * @param name String
+	 */
+	
+	public Parameter(String name) {
+		this();
+		this.name = name;
+	}
+	
+	/**
+	 * Constructor 2
+	 * 
+	 * @param name String
+	 * @param value Set value
+	 * @param dev Set standard deviation
+	 * @param var Set variation
+	 */
+	
+	public Parameter(String name, double value, double dev, double var) {
+		this();
+		this.name = name;
+		this.stddev = dev;
+		this.value = value;
+		this.variance = var;
+	}
+	
+	/**
+	 * Constructor 3 Set only value
+	 * 
+	 * @param name String
+	 * @param value Set value
+	 */
+	
+	public Parameter(String name, double value) {
+		this();
+		this.name = name;
+		this.value = value;
+	}
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimator.java
new file mode 100644
index 0000000..573d1fc
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimator.java
@@ -0,0 +1,273 @@
+
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+import org.eclipse.stem.util.analysis.views.EstimatorControl;
+
+/**
+ * Estimate parameters for an SI, SIR or SEIR model
+ * 
+ */
+
+public abstract class ParameterEstimator {
+	
+	protected static final String keyS = "S";
+	protected static final String keyE = "E";
+	protected static final String keyI = "I";
+	protected static final String keyR = "R";
+	protected static final String keySelectedS = "S*";
+	protected static final String keySelectedE = "E*";
+	protected static final String keySelectedI = "I*";
+	protected static final String keySelectedR = "R*";
+	
+	protected static final String keyXY1 = "X1vsY1";
+	protected static final String keyXY2 = "X2vsY2";
+	protected static final String keyXY3 = "X3vsY3";
+	protected static final String keyXY4 = "X4vsY4";
+	
+	protected static final String keyFit1 = "Fit XY1";
+	protected static final String keyFit2 = "Fit XY2";
+	protected static final String keyFit3 = "Fit XY3";
+	protected static final String keyFit4 = "Fit XY4";
+	
+	
+	protected static double minSthreshold = 0.01;
+	protected static double minEthreshold = 0.01;
+	protected static double minIthreshold = 0.01;
+	protected static double minRthreshold = 0.01;
+	
+	protected static double maxSthreshold = 0.99;
+	protected static double maxEthreshold = 0.99;
+	protected static double maxIthreshold = 0.99;
+	protected static double maxRthreshold = 0.99;
+	
+	protected static boolean useFreqDependantBeta = true;
+	
+
+	/**
+	 * rejected data where fit failed
+	 */
+	protected double rejectCount = 0.0;
+	
+	/*
+	 * the SELECTED data to plot
+	 */
+	List<double[][]>  dataToPlot = new ArrayList<double[][]>();
+	
+	
+	List<double[][]> regressionValues = new ArrayList<double[][]>();
+	
+
+	List<double[][]> fittedValues = new ArrayList<double[][]>();
+	
+	
+	protected ReferenceScenarioDataInstance data;
+	
+	/**
+	 * Sets the minimum number of points needed to do a reasonable fit
+	 * TODO should not be hard coded
+	 */
+	protected static final int MINSIZE = 7;
+	
+	/**
+	 * If derivativeMethod = LINEAR_DERIVATIVE  then a linear algorithm
+	 * is used to compute derivatives
+	 */
+	public static final int LINEAR_DERIVATIVE = 1;
+	
+	
+	/**
+	 * If derivativeMethod = POLYNOMIAL_DERIVATIVE  then a polynomial algorithm
+	 * is used to compute derivatives
+	 */
+	public static final int POLYNOMIAL_DERIVATIVE = 2;
+	
+	// All models have these vectors
+	double[] p;
+	double[] s;
+	double[] i;
+	double[] t;
+		
+	/**
+	 * set to true only if there are enough points to do a reasonable fit
+	 */
+	public boolean dataValid = false;
+	
+	int numDataPoints;
+	
+
+	/**
+	 * construct a new estimator for the input data[] SIR
+	 * @param data
+	 */
+	public ParameterEstimator(ReferenceScenarioDataInstance data) {
+		this.data = data;
+		// Always Prepare the data for analysis
+		this.data.findMaxValues();
+	}
+	
+	/**
+	 * The control needs this information but must get it through the analyzer from the Estimator
+	 * created by the factory
+	 * the number of differential equations in the solution
+	 * @return number of equations determines the number of graphs
+	 */
+	public abstract int getNumProperties();
+	
+	/**
+	 * The control needs this information but must get it through the analyzer from the Estimator
+	 * created by the factory
+	 * @param equationIndex , one chart per state S, E, I, and R.
+	 * @param state 0 or 1 representing S and Sselected, I and I selected,etc.
+	 * @return property name
+	 */
+	public String getProperty(int equationIndex, int state) {
+		 switch (equationIndex) {
+         case 0:  
+        	 if(state==0) {
+        		 return keyS;
+        	 } else if (state==1) {
+        		 return keySelectedS;
+        	 } else if ((state==2)||(state==3)) {
+        		 return keyXY1;
+        	 }else  {
+        		 return keyFit1;
+        	 }
+        	 
+         case 1:  
+        	 if(state==0) {
+        		 return keyI;
+        	 } else if (state==1) {
+        		 return keySelectedI;
+        	 } else if ((state==2)||(state==3)) {
+        		 return keyXY2;
+        	 }else  {
+        		 return keyFit2;
+        	 }
+        	 
+         case 2:  
+        	 if(state==0) {
+        		 return keyR;
+        	 } else if (state==1) {
+        		 return keySelectedR;
+        	 } else if ((state==2)||(state==3)) {
+        		 return keyXY3;
+        	 }else  {
+        		 return keyFit3;
+        	 }
+        	 
+         case 3:   
+        	 if(state==0) {
+        		 return keyE;
+        	 } else if (state==1) {
+        		 return keySelectedE;
+        	 } else if ((state==2)||(state==3)) {
+        		 return keyXY4;
+        	 }else  {
+        		 return keyFit4;
+        	 }
+        	 
+         default: return null;
+		 }// switch	
+	}// getProperty
+	
+	/**
+	 * update the min and max thresholds from the
+	 * EstimatorControl UI spinners
+	 * @param controlParametersMap 
+	 */
+	public void setAllParameters(Map<String,Object> controlParametersMap) {
+		if(controlParametersMap  !=null) {
+			maxSthreshold = ((Double)controlParametersMap.get(EstimatorControl.MAX_S_KEY)).doubleValue();
+			minSthreshold = ((Double)controlParametersMap.get(EstimatorControl.MIN_S_KEY)).doubleValue();
+		
+			maxEthreshold = ((Double)controlParametersMap.get(EstimatorControl.MAX_E_KEY)).doubleValue();
+			minEthreshold = ((Double)controlParametersMap.get(EstimatorControl.MIN_E_KEY)).doubleValue();
+			
+			maxIthreshold = ((Double)controlParametersMap.get(EstimatorControl.MAX_I_KEY)).doubleValue();
+			minIthreshold = ((Double)controlParametersMap.get(EstimatorControl.MIN_I_KEY)).doubleValue();
+		
+			maxRthreshold = ((Double)controlParametersMap.get(EstimatorControl.MAX_R_KEY)).doubleValue();
+			minRthreshold = ((Double)controlParametersMap.get(EstimatorControl.MIN_R_KEY)).doubleValue();
+			
+			useFreqDependantBeta = ((Boolean) controlParametersMap.get(EstimatorControl.FREQ_MODE_KEY) ).booleanValue();
+			
+		}
+		return;
+	}// update Thresholds
+	
+	
+	
+	/**
+	 * Estimate the parameters
+	 * @param localDensity 
+	 * @param localPopulation  
+	 * @param locationID 
+	 * @return the ModelParameters estimate
+	 */
+	public abstract ModelParameters estimate(double localDensity, double localPopulation, String locationID) ;
+	
+	
+	/**
+	 * Returns the raw data (state 0) and the selected data (state 1) 
+	 * for each of the state variables S,E,I,R (chartIndex 0-3)
+	 * @param chartIndex 
+	 * @param state
+	 * @return the data to plot
+	 */
+	public double[] getValues(int chartIndex, int state) {
+		// pick the right data for the right chart
+		if(state <= 1) {
+			double[][] data = dataToPlot.get(chartIndex);
+			return data[state];
+		} 
+		// regression data
+		double[][] regression = regressionValues.get(chartIndex);
+		return regression[state-2];
+	}// getValues
+	
+	
+	/**
+	 * create a sorted regression (ordered by the x coordinate)
+	 * @param xList
+	 * @param yList
+	 * @return the regression
+	 */
+	public double[][] getSortedRegression(List<Double> xList, List<Double> yList) {
+		double[][] regression = new double[2][xList.size()];
+		if(yList.size() != xList.size()) return regression;
+		List<PhaseSpaceCoordinate> coords = new ArrayList<PhaseSpaceCoordinate>();
+		for (int i = 0; i < xList.size(); i ++) {
+			double x = xList.get(i).doubleValue();
+			double y = yList.get(i).doubleValue();
+			PhaseSpaceCoordinate coord = new PhaseSpaceCoordinate(x,y);
+			coords.add(coord);
+		}
+		Object[] coordArray = coords.toArray();
+		Arrays.sort(coordArray);
+		for (int i = 0; i < xList.size(); i ++) {
+			PhaseSpaceCoordinate coord = (PhaseSpaceCoordinate)coordArray[i];
+			regression[0][i] = coord.xValue;
+			regression[1][i] = coord.yValue;
+		}
+		return regression;
+	}//getSortedRegression
+	
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorFactory.java
new file mode 100644
index 0000000..9a4f8e9
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorFactory.java
@@ -0,0 +1,53 @@
+package org.eclipse.stem.util.analysis;
+
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Factory that creates ParameterEsimator instances
+ */
+public class ParameterEstimatorFactory {
+
+	/**
+	 * Create new ParameterEstimator
+	 * 
+	 * @param method Method used to estimate parameters
+	 * @param data Estimator data
+	 * @return ParameterEstimator
+	 */
+	public static ParameterEstimator createEstimator(
+			ParameterEstimatorMethod method, 
+			ReferenceScenarioDataInstance data) {
+		ParameterEstimator result = null;
+		
+		switch(method) {
+			case SEIR:
+				result = new SEIRparameterEstimator(data);
+				break;
+			case SIR:
+				 result = new SIRparameterEstimator(data);
+				 break;
+			case SI:
+				 result = new SIparameterEstimator(data);
+				 break;	
+			case NONLINEARSEIR:
+				 result = new NonLinearSEIRParameterEstimator(data);
+				 break;	
+			default:
+				Activator.logError("Unknown method: "+method, null);
+		}
+		return result;
+	}
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorMethod.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorMethod.java
new file mode 100644
index 0000000..1daf220
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ParameterEstimatorMethod.java
@@ -0,0 +1,74 @@
+package org.eclipse.stem.util.analysis;
+
+import org.eclipse.stem.analysis.DiseaseType;
+
+
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Add any new parameter estimation method you create to the list in this enumeration
+ * to ensure it becomes available from the parameter estimator selection
+ * wizard. Also provide a brief description of the method.
+ * 
+ * You also need to modify the factory method to ensure it can create
+ * an instance of the parameter estimator implementing the method.
+ */
+public enum ParameterEstimatorMethod {	
+	/**
+	 * If method = SEIR_METHOD, then SEIR model used
+	 */
+	SEIR("SEIR", "An SEIR parameter estimator", DiseaseType.SEIR),
+	/**
+	 * If method = SIR_METHOD, then SIR model used
+	 */
+	SIR("SIR", "An SIR parameter estimator", DiseaseType.SIR),
+	/**
+	 * If method = SI_METHOD, then SI model used
+	 */
+	SI("SI", "An SI parameter estimator", DiseaseType.SI),
+	/**
+	 * If method = NONLINEAR_SEIR_METHOD, then SEIR method for beta function used
+	 */
+	NONLINEARSEIR("NonLinear SEIR", "A non-linear SEIR parameter estimator", DiseaseType.SEIR);
+	
+	String name;
+	String descripton;
+	DiseaseType type;
+	
+	private ParameterEstimatorMethod(String name, String description, DiseaseType type) {
+		this.name = name;
+		this.descripton = description;
+		this.type = type;
+	}
+	
+	/**
+	 * Name (as it shows up in the wizard)
+	 * @return String The name
+	 */
+	public String getName() {return this.name;}
+	
+	/**
+	 * Description (as it shows up in the Wizard)
+	 * @return String Description
+	 */
+	public String getDescription() {return this.descripton;}
+	
+	/**
+	 * getType. Return the type of the method (determines
+	 * which input data can be used)
+	 * @return DiseaseType The type
+	 */
+	public DiseaseType getType() {return this.type;}
+	
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSpaceCoordinate.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSpaceCoordinate.java
new file mode 100644
index 0000000..319955f
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSpaceCoordinate.java
@@ -0,0 +1,118 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * An x-y coordinate in Phase Space 
+ * Used, for example,  to compute trajectory and Lyapunov Exponent
+ *
+ */
+public class PhaseSpaceCoordinate implements Comparable {
+	
+		
+		double xValue;
+		double yValue;
+		
+		/**
+		 * constructor
+		 * @param x
+		 * @param y
+		 */
+		public PhaseSpaceCoordinate(double x,double y) {
+			xValue = x;
+			yValue = y;
+		}
+		
+		/**
+		 * getX
+		 * @return xValue
+		 */
+		public double getXValue() {
+			return xValue;
+		}
+
+		/**
+		 * set xValue
+		 * @param value 
+		 */
+		public void setXValue(double value) {
+			xValue = value;
+		}
+
+		/**
+		 * getY
+		 * @return YValue
+		 */
+		public double getYValue() {
+			return yValue;
+		}
+
+		/**
+		 * set yValue
+		 * @param value 
+		 */
+		public void setYValue(double value) {
+			yValue = value;
+		}
+	
+		/**
+		 * integrate (sum) path values
+		 * @param deltaXvalue 
+		 * @param deltaYvalue 
+		 */
+		public void integratePath(double deltaXvalue, double deltaYvalue) {
+			xValue += deltaXvalue;
+			yValue += deltaYvalue;
+		}
+		
+		/**
+		 * normalize the coordinates
+		 * @param normalization
+		 * 
+		 */
+		public void normalize(double normalization) {
+			xValue /= normalization;
+			yValue /= normalization;
+		}
+		
+		/**
+		 * 
+		 * @param otherPoint
+		 * @return the distance between this point and other point in phase space
+		 */
+		public double getDistance(PhaseSpaceCoordinate otherPoint) {
+			double dist2 = ((this.xValue - otherPoint.xValue)*(this.xValue - otherPoint.xValue))+
+						   ((this.yValue - otherPoint.yValue)*(this.yValue - otherPoint.yValue))	;
+			double dist = Math.sqrt(dist2);
+			
+			return dist;
+		}
+		
+		/**
+		 * for sorting coordinates by their x value
+		 * @see java.lang.Comparable#compareTo(java.lang.Object)
+		 */
+		 public int compareTo(Object otherCoord) throws ClassCastException {
+			    if (!(otherCoord instanceof PhaseSpaceCoordinate)) throw new ClassCastException("A Person object expected.");
+			    double otherX = ((PhaseSpaceCoordinate)otherCoord).xValue;
+			    if (this.xValue < otherX) return -1;
+			    if (this.xValue > otherX) return 1;
+			    return 0;
+		 }
+
+	
+		
+		
+	
+
+}//PhaseSpaceCoordinate class
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSynchronizer.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSynchronizer.java
new file mode 100644
index 0000000..05a07ac
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/PhaseSynchronizer.java
@@ -0,0 +1,113 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+  * This class is designed to take a pair of time series each involving multiple epidemic waves. It uses one 
+  * series as a reference an then phase shifts the peaks within the second data series so that the epidemics
+  * are "synchronized". This is necessary in order to accurately fit model parameters of many locations without imposing a
+  * transportation model. As the epidemic "moves", peaks occur at different times. Synchronizing allows us to estimate the epidemic
+  * parameters without a transportation model. This class is used when the fitting is done by adding synchronized data over all locations.
+  * This is not necessary if we can fit each location independantly, but is necessary when the amount of data is scarce (eg for real
+  * epidemic incidence data).
+ */
+public class PhaseSynchronizer {
+	
+	ReferenceScenarioDataInstance reference;
+	ReferenceScenarioDataInstance data;
+	
+	/**
+	 * this phase shift maximizes the correlation between the two vectors
+	 */
+	int phaseShift;
+	
+	/**
+	 * by default we will try to find max correlation for a shift of +/- 30 days
+	 * if the vectors are shorter than this we reduce the window
+	 */
+	int defaultShiftWindow = 30;
+	
+	/**
+	 * This class is designed to take a pair of ReferenceScenarioDataInstance(s) each involving multiple epidemic waves. It uses one 
+	 * series as a reference an then phase shifts the peaks within the second incidence data series so that the epidemics
+	 * are "synchronized". This is necessary in order to accurately fit model parameters of many locations without imposing a
+	 * transportation model. As the epidemic "moves", peaks occur at different times. Synchronizing allows us to estimate the epidemic
+	 * parameters without a transportation model. This class is used when the fitting is done by adding synchronized data over all locations.
+	 * This is not necessary if we can fit each location independently, but is necessary when the amount of data is scarce (eg for real
+	 * epidemic incidence data).
+	 * @param refInstance
+	 * 
+	 */
+	public PhaseSynchronizer(ReferenceScenarioDataInstance refInstance) {
+		reference = refInstance;
+		this.getPeakPositions(reference, "Incidence");
+	}
+	
+	/**
+	 * Finds index of peaks, returns as list
+	 * @param instance
+	 * @param key 
+	 * @parameter key (must be I, E, or incidence - they have peaks)
+	 * @return list of peak positions
+	 */
+	public List<Integer> getPeakPositions(ReferenceScenarioDataInstance instance, String key) {
+		List<Double> vector = instance.getData().get(key);
+		List<Integer> peaks = new ArrayList<Integer>();
+		for (int i = 0; i < vector.size(); i ++) {
+			double value = vector.get(i).doubleValue();
+			double next = 0.0;
+			double last = 0.0;
+			if (i<(vector.size()-1)) next = vector.get(i+1).doubleValue();
+			if (i>0) last = vector.get(i-1).doubleValue();
+			if((value > next)&&(value>last)) {
+				peaks.add(new Integer(i));
+				// DEBUG
+				//System.out.println("found peak at i="+i+", value="+value);
+			}
+		}
+		return peaks;
+	}
+	
+	/**
+	 * Rotates the vector (List) by Shift - wrapping values from beginning to end or vice versa as necessary
+	 * This should work for quasi periodic time series
+	 * @param shift
+	 * @param vector
+	 * @return shifted vector
+	 */
+	public List<Double> getShiftedVector(int shift, List<Double> vector){
+		List shifted = new ArrayList<Double>();
+		int max = vector.size();
+		for (int i = 0; i < max; i ++) {
+			int j = i - shift;
+			if (j >= max) {
+				j = j - max;
+			}
+			if (j < 0) {
+				j = max+j;
+			}
+			shifted.add(i,vector.get(j));
+		}
+		
+		return shifted;
+	}
+ 
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SEIRparameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SEIRparameterEstimator.java
new file mode 100644
index 0000000..44b03f8
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SEIRparameterEstimator.java
@@ -0,0 +1,422 @@
+
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * Estimate parameters for an SEIR model
+ * 
+ *
+ */
+public class SEIRparameterEstimator extends ParameterEstimator {
+	
+	// Unique states for SEIR estimator
+	double[] e;
+	double[] r;
+	
+	/**
+	 * @param data Data 
+	 */
+	public SEIRparameterEstimator(ReferenceScenarioDataInstance data) {
+		super(data);
+		List<Double> sToFit = new ArrayList<Double>();
+		List<Double> eToFit = new ArrayList<Double>();
+		List<Double> iToFit = new ArrayList<Double>();
+		List<Double> rToFit = new ArrayList<Double>();
+		
+		List<Double> iList = data.getData().get(States.statesToFit[States.INFECTIOUS]);
+		List<Double> sList = data.getData().get(States.statesToFit[States.SUSCEPTIBLE]);
+		List<Double> rList = data.getData().get(States.statesToFit[States.RECOVERED]);
+		List<Double> eList = data.getData().get(States.statesToFit[States.EXPOSED]);
+		
+		// ToDo: Why are we skipping the first value?
+		for (int icount = 1; icount < iList.size(); icount ++) {
+				iToFit.add(iList.get(icount));
+				eToFit.add(eList.get(icount));
+				sToFit.add(sList.get(icount));
+				rToFit.add(rList.get(icount));
+		}
+		
+		
+		this.numDataPoints = iToFit.size();
+		if(numDataPoints < MINSIZE) return;
+		dataValid = true;
+		this.p = new double[this.numDataPoints];
+		this.s = new double[this.numDataPoints];
+		this.e = new double[this.numDataPoints];
+		this.i = new double[this.numDataPoints];
+		this.r = new double[this.numDataPoints];
+		this.t = new double[this.numDataPoints];
+		 
+		
+		for (int icount = 0; icount < this.numDataPoints; icount ++) {
+			s[icount] = sToFit.get(icount).doubleValue();
+			e[icount] = eToFit.get(icount).doubleValue();
+			i[icount] = iToFit.get(icount).doubleValue();
+			r[icount] = rToFit.get(icount).doubleValue();
+			p[icount] = s[icount]+e[icount]+i[icount]+r[icount];
+			t[icount] = icount;		
+		}// for icount
+	}// contsructor
+
+	/**
+	 * Estimate the parameters
+	 * @param localDensity 
+	 * @param localPopulation 
+	 * @param locationID 
+	 * @return the ModelParameters estimate
+	 */
+	public ModelParameters estimate(double localDensity, double localPopulation, String locationID) {
+		
+		ModelParameters fittedParms = new ModelParameters();
+		
+		int npts = s.length;
+		assert(npts == e.length);
+		assert(npts==i.length);
+		assert(npts==r.length);
+		
+	
+			
+			double[] lnS = new double[npts];
+			double[] dlnS = new double[npts-1];
+			double[] lnE = new double[npts];
+			double[] dlnE = new double[npts-1];
+			double[] lnI = new double[npts];
+			double[] dlnI = new double[npts-1];
+			double[] lnR = new double[npts];
+			double[] dlnR = new double[npts-1];
+			                           
+			
+			
+			// average values about derivative
+			double[] sAvg = new double[npts-1];
+			double[] eAvg = new double[npts-1];
+			double[] iAvg = new double[npts-1];
+			double[] rAvg = new double[npts-1];
+			double[] pAvg = new double[npts-1];
+			double[][] dataS = new double[2][npts - 1];
+			double[][] dataE = new double[2][npts - 1];
+			double[][] dataI = new double[2][npts - 1];
+			double[][] dataR = new double[2][npts - 1];
+			        
+			// get the logarithms
+			double cutoff = 0.0000000005;
+
+			for(int j = 0; j < npts; j++){
+				if(s[j] >= cutoff) {
+					lnS[j] = Math.log(s[j]);
+				} else {
+					lnS[j] = Math.log(cutoff);  // TODO fix this
+				}
+				if(e[j] >= cutoff) {
+					lnE[j] = Math.log(e[j]);
+				} else {
+					lnE[j] = Math.log(cutoff);  // TODO fix this
+				}
+				if(i[j] >= cutoff) {
+					lnI[j] = Math.log(i[j]);
+				} else {
+					lnI[j] = Math.log(cutoff);  // TODO fix this
+				}
+				if(r[j] >= cutoff) {
+					lnR[j] = Math.log(r[j]);
+				} else {
+					lnR[j] = Math.log(cutoff);  // TODO fix this
+				}
+			}
+
+			double sMax = 0.0;
+			double eMax = 0.0;
+			double iMax = 0.0;
+			double rMax = 0.0;
+			//derivatives of logarithms and averages of other points
+			for(int j = 1;j < npts-1;j++)
+			{
+				dlnS[j-1] = (lnS[j]-lnS[j-1]); // dt = 1
+				dlnE[j-1] = (lnE[j]-lnE[j-1]); // dt = 1
+				dlnI[j-1] = (lnI[j]-lnI[j-1]); // dt = 1
+				dlnR[j-1] = (lnR[j]-lnR[j-1]); // dt = 1
+				
+				sAvg[j-1] = (s[j] + s[j-1])/2.0;
+				eAvg[j-1] = (e[j] + e[j-1])/2.0;
+				iAvg[j-1] = (i[j] + i[j-1])/2.0;
+				rAvg[j-1] = (r[j] + r[j-1])/2.0;
+					
+				
+				if(sAvg[j-1] >= sMax) sMax = sAvg[j-1];
+				if(eAvg[j-1] >= eMax) eMax = eAvg[j-1];
+				if(iAvg[j-1] >= iMax) iMax = iAvg[j-1];
+				if(rAvg[j-1] >= rMax) rMax = rAvg[j-1];
+				
+				pAvg[j-1] = (p[j] + p[j-1])/2.0;
+			}
+	
+			///////////////////////////////////////////////////////////////			
+			// dS/dt-> equation 1.
+			//x, y for least squares fitting to line y = alpha*x - beta
+			///////////////////////////////////////////////////////////////
+			//
+			List<Double> xList1 = new ArrayList<Double>();
+			List<Double> yList1 = new ArrayList<Double>();
+			List<Double> fitList1 = new ArrayList<Double>();
+			
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				double iNorm = iAvg[j]/iMax;
+				double rNorm = rAvg[j]/rMax;
+				double eNorm = eAvg[j]/eMax;
+				dataS[0][j] = sNorm;
+				dataI[0][j] = iNorm;
+				dataR[0][j] = rNorm;
+				dataE[0][j] = eNorm;
+				// by default, selected data is the SAME
+				dataS[1][j] = sNorm;
+				dataI[1][j] = iNorm;
+				dataR[1][j] = rNorm;
+				dataE[1][j] = eNorm;
+				
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(iNorm>=minIthreshold)&&(rNorm<=maxRthreshold)) {
+						double numer = (pAvg[j]*rAvg[j]) / sAvg[j];
+						double xValue =  numer/ iAvg[j];
+						double yValue = (pAvg[j]* dlnS[j]) / iAvg[j];
+						xList1.add(new Double(xValue) );
+						yList1.add(new Double(yValue));
+				} else {
+					// **** for plotting ******
+					// here we define S*, I*, R*
+					// NOT Selected = 0.0
+					dataS[1][j] = 0.0;
+					dataI[1][j] = 0.0;
+					dataR[1][j] = 0.0;
+					////******************/////
+				}
+			}// for j
+			
+			LinearLeastSquaresFit lineFit1  = null;
+			if(xList1.size() > 2) {
+				lineFit1 = new LinearLeastSquaresFit(xList1,yList1);
+				// incpt
+				double beta 	= -1.0*lineFit1.getIntercept(); 
+				double varBeta 	= lineFit1.getInterceptVariance();
+				double stdBeta 	= lineFit1.getInterceptStdDev();
+				// slope
+				double alpha 	= lineFit1.getSlope();
+				double varAlpha = lineFit1.getSlopeVariance();
+				double stdAlpha = lineFit1.getSlopeStdDev();
+				double newbeta = beta;
+				if(!useFreqDependantBeta) newbeta *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA, new Parameter(Parameter.BETA, newbeta, stdBeta, varBeta));
+				fittedParms.addParameter(Parameter.ALPHA, new Parameter(Parameter.ALPHA, alpha, stdAlpha, varAlpha));
+				// fit
+				for (int i = 0; i< xList1.size(); i ++) {
+					double val = (lineFit1.getSlope()*xList1.get(i).doubleValue()) + lineFit1.getIntercept(); 
+					fitList1.add(new Double(val));
+				}
+			} // if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+	
+			//////////////////////////////////////////////////////
+			//Equation 2 +> dE/dt second fit for beta and epsilon
+			List<Double> xList2 = new ArrayList<Double>();
+			List<Double> yList2 = new ArrayList<Double>();
+			List<Double> fitList2 = new ArrayList<Double>();
+			
+			//x, y for least squares fitting to line y = beta*x - epsilon
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				//double iNorm = iAvg[j]/iMax;
+				double eNorm = eAvg[j]/eMax;
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(eNorm>=minEthreshold) ) {
+					// if data in range
+					double xValue = (sAvg[j] * iAvg[j]) / (pAvg[j]*eAvg[j]);
+					double yValue = dlnE[j];
+					xList2.add(new Double(xValue));
+					yList2.add(new Double(yValue));
+				} else {
+					// **** for plotting ******
+					// here we define E*
+					// NOT Selected = 0.0
+					dataE[1][j] = 0.0;
+					////******************/////
+				}
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit2  = null;
+			if(xList2.size() > 2) {
+				lineFit2 = new LinearLeastSquaresFit(xList2,yList2);
+				// incpt
+				double epsilon		= -1.0*lineFit2.getIntercept(); 
+				double varEpsilon 	= lineFit2.getInterceptVariance();
+				double stdEpsilon 	= lineFit2.getInterceptStdDev();
+				// slope
+				double beta2 		= lineFit2.getSlope();
+				double varBeta2		= lineFit2.getSlopeVariance();
+				double stdBeta2 	= lineFit2.getSlopeStdDev();
+				double newbeta2 = beta2 ;
+				if(!useFreqDependantBeta) newbeta2 *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA2, new Parameter(Parameter.BETA2, newbeta2, stdBeta2, varBeta2));
+				fittedParms.addParameter(Parameter.EPSILON, new Parameter(Parameter.EPSILON, epsilon, stdEpsilon, varEpsilon));
+				// fit 2
+				for (int i = 0; i< xList2.size(); i ++) {
+					double val = (lineFit2.getSlope()*xList2.get(i).doubleValue()) + lineFit2.getIntercept(); 
+					fitList2.add(new Double(val));
+				}
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+			
+			
+			///////////////////////////////////////////////////////
+			//Equation 3. third find epsilon and gamma
+			List<Double> xList3 = new ArrayList<Double>();
+			List<Double> yList3 = new ArrayList<Double>();
+			List<Double> fitList3 = new ArrayList<Double>();
+			
+			//derivatives of all other points
+			for(int j = 0;j < npts-1;j++)
+			{
+				double iNorm = iAvg[j]/iMax;
+				double eNorm = eAvg[j]/eMax;
+				if((iNorm>=minIthreshold)&&(eNorm>=minEthreshold) ) {
+					xList3.add(new Double(eAvg[j] / iAvg[j] ) );
+					yList3.add(new Double(dlnI[j]));
+				}
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit3 = null;
+			if(xList3.size() > 2) {
+				lineFit3 = new LinearLeastSquaresFit(xList3,yList3);
+				// incpt
+				double gamma		= -1.0*lineFit3.getIntercept(); 
+				double varGamma 	= lineFit3.getInterceptVariance();
+				double stdGamma 	= lineFit3.getInterceptStdDev();
+				// slope
+				double epsilon2 		= lineFit3.getSlope();
+				double varEpsilon2		= lineFit3.getSlopeVariance();
+				double stdEpsilon2 		= lineFit3.getSlopeStdDev();
+				fittedParms.addParameter(Parameter.GAMMA, new Parameter(Parameter.GAMMA, gamma, stdGamma, varGamma));
+				fittedParms.addParameter(Parameter.EPSILON2, new Parameter(Parameter.EPSILON2, epsilon2, stdEpsilon2, varEpsilon2));		
+				// fit 3
+				for (int i = 0; i< xList3.size(); i ++) {
+					double val = (lineFit3.getSlope()*xList3.get(i).doubleValue()) + lineFit3.getIntercept(); 
+					fitList3.add(new Double(val));
+				}
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+		
+			///////////////////////////////////////////////////////
+			// Equation 4.  find gamma and alpha
+			// least squares fitting to line y = gamma*x - alpha
+			List<Double> xList4 = new ArrayList<Double>();
+			List<Double> yList4 = new ArrayList<Double>();
+			List<Double> fitList4 = new ArrayList<Double>();
+			
+			//derivatives of all other points
+			for(int j = 0;j < npts-1;j++) {
+				double iNorm = iAvg[j]/iMax;
+				double rNorm = rAvg[j]/rMax;
+				if((iNorm>=minIthreshold)&&(rNorm>=minRthreshold)&&(rNorm<=maxRthreshold) ) {
+					xList4.add(new Double(iAvg[j] / rAvg[j] ) );
+					yList4.add(new Double(dlnR[j]));
+				}
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit4 = null;
+			if(xList4.size() > 2) {
+				lineFit4 = new LinearLeastSquaresFit(xList4,yList4);
+				// incpt
+				// TODO why is this coming out negative sometimes?
+				double alpha2 		= Math.abs(-1.0*lineFit4.getIntercept());
+				double varAlpha2	= lineFit4.getInterceptVariance();
+				double stdAlpha2	= lineFit4.getInterceptStdDev();
+				// slope
+				double gamma2			= lineFit4.getSlope();
+				double varGamma2		= lineFit4.getSlopeVariance();
+				double stdGamma2 		= lineFit4.getSlopeStdDev();
+				fittedParms.addParameter(Parameter.ALPHA2, new Parameter(Parameter.ALPHA2, alpha2, stdAlpha2, varAlpha2));
+				fittedParms.addParameter(Parameter.GAMMA2, new Parameter(Parameter.GAMMA2, gamma2, stdGamma2, varGamma2));
+				// fit 4
+				for (int i = 0; i< xList4.size(); i ++) {
+					double val = (lineFit4.getSlope()*xList4.get(i).doubleValue()) + lineFit4.getIntercept(); 
+					fitList4.add(new Double(val));
+				}
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+				
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			// DONE
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			fittedParms.addParameter(Parameter.REJECT, new Parameter(Parameter.REJECT, rejectCount));	
+			dataToPlot.add(dataS);
+			dataToPlot.add(dataI);
+			dataToPlot.add(dataR);
+			dataToPlot.add(dataE);
+			fittedParms.addSelectedData(locationID, dataToPlot);
+			
+			
+			double[][] regression1 = getSortedRegression(xList1, yList1); 
+			double[][] regression2 = getSortedRegression(xList2, yList2); 
+			double[][] regression3 = getSortedRegression(xList3, yList3); 
+			double[][] regression4 = getSortedRegression(xList4, yList4); 
+			
+			double[][] fit1 = getSortedRegression(xList1, fitList1); 
+			double[][] fit2 = getSortedRegression(xList2, fitList2); 
+			double[][] fit3 = getSortedRegression(xList3, fitList3); 
+			double[][] fit4 = getSortedRegression(xList4, fitList4); 
+			
+			regressionValues.add(regression1);
+			regressionValues.add(regression2);
+			regressionValues.add(regression3);
+			regressionValues.add(regression4);
+			
+			
+			fittedValues.add(fit1);
+			fittedValues.add(fit2);
+			fittedValues.add(fit3);
+			fittedValues.add(fit4);
+			
+			fittedParms.addRegressionData(locationID, regressionValues);
+			fittedParms.addFittedData(locationID, fittedValues);
+			
+			
+		return fittedParms;
+	} // estimate
+	
+	
+
+	
+	
+	/**
+	 * SEIR models have 4 properties
+	 * @see org.eclipse.stem.util.analysis.ParameterEstimator#getNumProperties()
+	 */
+	public int getNumProperties() {
+		return 4;
+	}
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIRparameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIRparameterEstimator.java
new file mode 100644
index 0000000..9ef04ee
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIRparameterEstimator.java
@@ -0,0 +1,350 @@
+
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * Estimate parameters for an SIR model
+ * 
+ *
+ */
+public class SIRparameterEstimator extends ParameterEstimator{
+
+	// Unique state for this estimator
+	double [] r;
+	
+	static final double MINCUTOFF = 0.005;
+	
+	/**
+	 * @param data
+	 */
+	public SIRparameterEstimator(ReferenceScenarioDataInstance data) {
+		
+		super(data);
+		
+		List<Double> sToFit = new ArrayList<Double>();
+		List<Double> iToFit = new ArrayList<Double>();
+		List<Double> rToFit = new ArrayList<Double>();
+		
+		List<Double> iList = data.getData().get(States.statesToFit[States.INFECTIOUS]);
+		List<Double> sList = data.getData().get(States.statesToFit[States.SUSCEPTIBLE]);
+		List<Double> rList = data.getData().get(States.statesToFit[States.RECOVERED]);
+		
+		// ToDo: Why are we skipping the first value?
+		for (int icount = 1; icount < iList.size(); icount ++) {
+				iToFit.add(iList.get(icount));
+				sToFit.add(sList.get(icount));
+				rToFit.add(rList.get(icount));
+		}
+		
+		this.numDataPoints = iToFit.size();
+		if(numDataPoints < MINSIZE) return;
+		dataValid = true;
+		this.p = new double[this.numDataPoints];
+		this.s = new double[this.numDataPoints];
+		this.i = new double[this.numDataPoints];
+		this.r = new double[this.numDataPoints];
+		this.t = new double[this.numDataPoints];
+		 
+		for (int icount = 0; icount < this.numDataPoints; icount ++) {
+			s[icount] = sToFit.get(icount).doubleValue();
+			i[icount] = iToFit.get(icount).doubleValue();
+			r[icount] = rToFit.get(icount).doubleValue();
+			p[icount] = s[icount]+i[icount]+r[icount];
+			t[icount] = icount;
+		}// for icount
+	}// constructor
+
+
+	/**
+	 * Estimate the parameters
+	 * @param localDensity 
+	 * @param localPopulation 
+	 * @param locationID 
+	 * @return the ModelParameters estimate
+	 */
+	public ModelParameters estimate(double localDensity, double localPopulation, String locationID) {
+
+		ModelParameters fittedParms = new ModelParameters();
+		
+		//double reportBeta1 = 0;
+		//double reportBeta2 = 0;
+		
+				
+		int npts = s.length;
+		assert(npts==i.length);
+		assert(npts==r.length);
+		
+			double[] lnS = new double[npts];
+			double[] dlnS = new double[npts-1];
+			double[] lnI = new double[npts];
+			double[] dlnI = new double[npts-1];
+			double[] lnR = new double[npts];
+			double[] dlnR = new double[npts-1];
+			                           
+			
+			
+			// average values about derivative
+			double[] sAvg = new double[npts-1];
+			double[] iAvg = new double[npts-1];
+			double[] rAvg = new double[npts-1];
+			double[] pAvg = new double[npts-1];
+			double[][] dataS = new double[2][npts - 1];
+			double[][] dataI = new double[2][npts - 1];
+			double[][] dataR = new double[2][npts - 1];
+			        
+			// get the logarithms
+			double cutoff = 0.0000000005;
+
+			for(int j = 0; j < npts; j++){
+				if(s[j] >= cutoff) {
+					lnS[j] = Math.log(s[j]);
+				} else {
+					lnS[j] = Math.log(cutoff);  // TODO fix this
+				}
+				if(i[j] >= cutoff) {
+					lnI[j] = Math.log(i[j]);
+				} else {
+					lnI[j] = Math.log(cutoff);  // TODO fix this
+				}
+				if(r[j] >= cutoff) {
+					lnR[j] = Math.log(r[j]);
+				} else {
+					lnR[j] = Math.log(cutoff);  // TODO fix this
+				}
+			}
+			
+			//derivatives of logarithms and averages of other points
+			double sMax = 0.0;
+			double iMax = 0.0;
+			double rMax = 0.0;
+			for(int j = 1;j < npts-1;j++)
+			{
+				dlnS[j-1] = (lnS[j]-lnS[j-1]); // dt = 1
+				
+				dlnI[j-1] = (lnI[j]-lnI[j-1]); // dt = 1
+				dlnR[j-1] = (lnR[j]-lnR[j-1]); // dt = 1
+				
+				sAvg[j-1] = (s[j] + s[j-1])/2.0;
+				iAvg[j-1] = (i[j] + i[j-1])/2.0;
+				rAvg[j-1] = (r[j] + r[j-1])/2.0;
+								
+				if(sAvg[j-1] >= sMax) sMax = sAvg[j-1];
+				if(iAvg[j-1] >= iMax) iMax = iAvg[j-1];
+				if(rAvg[j-1] >= rMax) rMax = rAvg[j-1];
+				
+				pAvg[j-1] = (p[j] + p[j-1])/2.0;
+			}
+			
+			///////////////////////////////////////////////////////////////			
+			// dS/dt-> equation 1.
+			//x, y for least squares fitting to line y = alpha*x - beta
+			///////////////////////////////////////////////////////////////
+			//
+			List<Double> xList1 = new ArrayList<Double>();
+			List<Double> yList1 = new ArrayList<Double>();
+			List<Double> fitList1 = new ArrayList<Double>();
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				double iNorm = iAvg[j]/iMax;
+				double rNorm = rAvg[j]/rMax;
+				
+				dataS[0][j] = sNorm;
+				dataI[0][j] = iNorm;
+				dataR[0][j] = rNorm;
+				// by default, selected data is the SAME
+				dataS[1][j] = sNorm;
+				dataI[1][j] = iNorm;
+				dataR[1][j] = rNorm;
+				
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(iNorm>=minIthreshold)&&(rNorm<=maxRthreshold)) {
+					double numer = (pAvg[j]*rAvg[j]) / sAvg[j];
+					xList1.add(new Double( numer/ iAvg[j] ) );
+					yList1.add(new Double( dlnS[j] * (pAvg[j]/iAvg[j])  ));
+					
+				}else {
+					// **** for plotting ******
+					// here we define S*, I*, R*
+					// NOT Selected = 0.0
+					dataS[1][j] = 0.0;
+					dataI[1][j] = 0.0;
+					dataR[1][j] = 0.0;
+					////******************/////
+				}
+			}
+			LinearLeastSquaresFit lineFit1 = null;
+			if(xList1.size() >2) {
+				lineFit1 = new LinearLeastSquaresFit(xList1,yList1);
+				// incpt
+				double beta 	= -1.0*lineFit1.getIntercept();
+				double varBeta 	= lineFit1.getInterceptVariance();
+				double stdBeta 	= lineFit1.getInterceptStdDev();
+				// slope
+				double alpha 	= lineFit1.getSlope();
+				double varAlpha = lineFit1.getSlopeVariance();
+				double stdAlpha = lineFit1.getSlopeStdDev();
+				double newbeta = beta;
+				//reportBeta1 = beta;
+				if(!useFreqDependantBeta) newbeta *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA, new Parameter(Parameter.BETA, newbeta, stdBeta, varBeta));
+				fittedParms.addParameter(Parameter.ALPHA, new Parameter(Parameter.ALPHA, alpha, stdAlpha, varAlpha));
+				//System.out.println("beta1 = "+newbeta+", alpha1 = "+alpha);
+				
+				// fit 1
+				for (int i = 0; i< xList1.size(); i ++) {
+					double val = (-lineFit1.getSlope()*xList1.get(i).doubleValue()) + lineFit1.getIntercept(); 
+					fitList1.add(new Double(val));
+				}
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+			//////////////////////////////////////////////////////
+			//Equation 2 +> dI/dt second fit for beta and epsilon
+			List<Double> xList2 = new ArrayList<Double>();
+			List<Double> yList2 = new ArrayList<Double>();
+			List<Double> fitList2 = new ArrayList<Double>();
+			//x, y for least squares fitting to line y = beta*x - epsilon
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				double iNorm = iAvg[j]/iMax;
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(iNorm>=minIthreshold) ) {
+					double ratio = pAvg[j] / sAvg[j];
+					xList2.add(new Double( ratio ));
+					yList2.add(new Double(ratio*dlnI[j]));
+				}// if data in range
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit2 = null;
+			if(xList2.size() > 2) {
+				lineFit2 = new LinearLeastSquaresFit(xList2,yList2);
+				// slope
+				double gamma		= -1.0* lineFit2.getSlope(); 
+				double varGamma 	= lineFit2.getSlopeVariance();
+				double stdGamma 	= lineFit2.getSlopeStdDev();
+				// incpt
+				double beta2 		= lineFit2.getIntercept();
+				double varBeta2		= lineFit2.getInterceptVariance();
+				double stdBeta2 	= lineFit2.getInterceptStdDev();
+				double newbeta2 = beta2;
+				//reportBeta2 = beta2;
+				if(!useFreqDependantBeta) newbeta2 *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA2, new Parameter(Parameter.BETA2, newbeta2, stdBeta2, varBeta2));
+				fittedParms.addParameter(Parameter.GAMMA, new Parameter(Parameter.GAMMA, gamma, stdGamma, varGamma));
+				
+				// fit 2
+				for (int i = 0; i< xList2.size(); i ++) {
+					double val = (lineFit2.getSlope()*xList2.get(i).doubleValue()) + lineFit2.getIntercept(); 
+					fitList2.add(new Double(val));
+				}
+				
+				//System.out.println("beta2 = "+newbeta2+", gamma1 = "+gamma);
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+			
+			///////////////////////////////////////////////////////
+			///////////////////////////////////////////////////////
+			// Equation 3.  find gamma and alpha
+			// least squares fitting to line y = gamma*x - alpha
+			List<Double> xList3 = new ArrayList<Double>();
+			List<Double> yList3 = new ArrayList<Double>();
+			List<Double> fitList3 = new ArrayList<Double>();
+			//derivatives of all other points
+			for(int j = 0;j < npts-1;j++) {
+				double iNorm = iAvg[j]/iMax;
+				double rNorm = rAvg[j]/rMax;
+				if((iNorm>=minIthreshold)&&(rNorm>=minRthreshold)&&(rNorm<=maxRthreshold) ) {
+					xList3.add(new Double(iAvg[j] / rAvg[j] ) );
+					yList3.add(new Double(dlnR[j]));
+				}
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit3 = null;
+			if(xList3.size() > 2) {
+				lineFit3 = new LinearLeastSquaresFit(xList3,yList3);
+				// incpt
+				// TODO why is this coming out negative sometimes?
+				double alpha2 		= Math.abs(-1.0*lineFit3.getIntercept()); 
+				double varAlpha2	= lineFit3.getInterceptVariance();
+				double stdAlpha2	= lineFit3.getInterceptStdDev();
+				// slope
+				double gamma2			= lineFit3.getSlope();
+				double varGamma2		= lineFit3.getSlopeVariance();
+				double stdGamma2 		= lineFit3.getSlopeStdDev();
+				fittedParms.addParameter(Parameter.ALPHA2, new Parameter(Parameter.ALPHA2, alpha2, stdAlpha2, varAlpha2));
+				fittedParms.addParameter(Parameter.GAMMA2, new Parameter(Parameter.GAMMA2, gamma2, stdGamma2, varGamma2));
+				//System.out.println("alpha2 = "+alpha2+", gamma2 = "+gamma2);
+				
+				// fit 3
+				for (int i = 0; i< xList3.size(); i ++) {
+					double val = (lineFit3.getSlope()*xList3.get(i).doubleValue()) + lineFit3.getIntercept(); 
+					fitList3.add(new Double(val));
+				}
+			} else {
+				rejectCount += 1.0;
+			}
+			
+			fittedParms.addParameter(Parameter.REJECT, new Parameter(Parameter.REJECT, rejectCount));	
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			// DONE
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			dataToPlot.add(dataS);
+			dataToPlot.add(dataI);
+			dataToPlot.add(dataR);
+			fittedParms.addSelectedData(locationID, dataToPlot);
+			
+			double[][] regression1 = getSortedRegression(xList1, yList1); 
+			double[][] regression2 = getSortedRegression(xList2, yList2); 
+			double[][] regression3 = getSortedRegression(xList3, yList3);
+			
+			double[][] fit1 = getSortedRegression(xList1, fitList1); 
+			double[][] fit2 = getSortedRegression(xList2, fitList2); 
+			double[][] fit3 = getSortedRegression(xList3, fitList3); 
+			
+			regressionValues.add(regression1);
+			regressionValues.add(regression2);
+			regressionValues.add(regression3);
+			
+			fittedValues.add(fit1);
+			fittedValues.add(fit2);
+			fittedValues.add(fit3);
+	
+			fittedParms.addRegressionData(locationID, regressionValues);
+			fittedParms.addFittedData(locationID, fittedValues);
+			//System.out.println(""+localPopulation+", "+reportBeta1+", "+reportBeta2);
+			
+		return fittedParms;
+	} // estimate
+	
+	/**
+	 * The control needs this information but must get it through the analyzer from the Estimator
+	 * created by the factory
+	 * SIR models have 3 properties
+	 * @see org.eclipse.stem.util.analysis.ParameterEstimator#getNumProperties()
+	 */
+	public int getNumProperties() {
+		return 3;
+	}
+	
+	
+	
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIparameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIparameterEstimator.java
new file mode 100644
index 0000000..7773039
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SIparameterEstimator.java
@@ -0,0 +1,249 @@
+
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+
+/**
+ * Estimate parameters for an SIR model
+ * 
+ *
+ */
+public class SIparameterEstimator extends ParameterEstimator{
+
+	/**
+	 * @param data 
+	 */
+	public SIparameterEstimator(ReferenceScenarioDataInstance data) {
+		super(data);
+		
+		List<Double> sToFit = new ArrayList<Double>();
+		List<Double> iToFit = new ArrayList<Double>();
+		
+		List<Double> iList = data.getData().get(States.statesToFit[States.INFECTIOUS]);
+		List<Double> sList = data.getData().get(States.statesToFit[States.SUSCEPTIBLE]);
+		
+		// ToDo: Why are we skipping the first value?
+		for (int icount = 1; icount < iList.size(); icount ++) {
+				iToFit.add(iList.get(icount));
+				sToFit.add(sList.get(icount));
+		}
+		
+		this.numDataPoints = iToFit.size();
+		if(numDataPoints < MINSIZE) return;
+		dataValid = true;
+		this.s = new double[this.numDataPoints];
+		this.i = new double[this.numDataPoints];
+		this.t = new double[this.numDataPoints];
+
+		for (int icount = 0; icount < this.numDataPoints; icount ++) {
+			s[icount] = sToFit.get(icount).doubleValue();
+			i[icount] = iToFit.get(icount).doubleValue();
+			t[icount] = icount;
+		}// for icount
+	}
+
+	/**
+	 * Estimate the parameters
+	 * @param localDensity 
+	 * @param localPopulation 
+	 * @param locationID 
+	 * @return the ModelParameters estimate
+	 */
+	public ModelParameters estimate(double localDensity, double localPopulation, String locationID) {
+		
+		ModelParameters fittedParms = new ModelParameters();
+		
+		int npts = s.length;
+		assert(npts==i.length);
+		
+			double[] lnS = new double[npts];
+			double[] dlnS = new double[npts-1];
+			double[] lnI = new double[npts];
+			double[] dlnI = new double[npts-1];
+			
+			// average values about derivative
+			double[] sAvg = new double[npts-1];
+			double[] iAvg = new double[npts-1];
+			double[] pAvg = new double[npts-1];
+			double[][] dataS = new double[2][npts - 1];
+			double[][] dataI = new double[2][npts - 1];
+			
+			// get the logarithms
+			for(int j = 0; j < npts; j++){
+				if(s[j] >= 0.0) {
+					lnS[j] = Math.log(s[j]);
+				} else {
+					lnS[j] = -1.0;  // TODO fix this
+				}
+				if(i[j] >= 0.0) {
+					lnI[j] = Math.log(i[j]);
+				} else {
+					lnI[j] = -1.0;  // TODO fix this
+				}
+			}
+			
+			//derivatives of logarithms and averages of other points
+			for(int j = 1;j < npts-1;j++)
+			{
+				dlnS[j-1] = (lnS[j]-lnS[j-1]); // dt = 1
+				dlnI[j-1] = (lnI[j]-lnI[j-1]); // dt = 1
+				
+				sAvg[j-1] = (s[j] + s[j-1])/2.0;
+				iAvg[j-1] = (i[j] + i[j-1])/2.0;
+				pAvg[j-1] = (p[j] + p[j-1])/2.0;
+			}
+			
+			double sMax = data.getMaxS();
+			double iMax = data.getMaxI();
+			
+			
+			///////////////////////////////////////////////////////////////			
+			// dS/dt-> equation 1.
+			//x, y for least squares fitting to line y = alpha*x - beta
+			///////////////////////////////////////////////////////////////
+			//
+			List<Double> xList1 = new ArrayList<Double>();
+			List<Double> yList1 = new ArrayList<Double>();
+			List<Double> fitList1 = new ArrayList<Double>();
+			
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				double iNorm = iAvg[j]/iMax;
+				dataS[0][j] = sNorm;
+				dataI[0][j] = iNorm;
+				// by default, selected data is the SAME
+				dataS[1][j] = sNorm;
+				dataI[1][j] = iNorm;
+				
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(iNorm>=minIthreshold) ) {
+					double numer = (pAvg[j] / sAvg[j]);
+					xList1.add(new Double( numer ) );
+					yList1.add(new Double( (pAvg[j]/iAvg[j]) * dlnS[j]  ));
+				}else {
+					// **** for plotting ******
+					// here we define S*, I*, R*
+					// NOT Selected = 0.0
+					dataS[1][j] = 0.0;
+					dataI[1][j] = 0.0;
+					////******************/////
+				}
+			}
+			LinearLeastSquaresFit lineFit1 = null;
+			if(xList1.size() > 2) {
+				lineFit1 = new LinearLeastSquaresFit(xList1,yList1);
+				// incpt
+				double beta 	= lineFit1.getIntercept(); 
+				double varBeta 	= lineFit1.getInterceptVariance();
+				double stdBeta 	= lineFit1.getInterceptStdDev();
+				// slope
+				double alpha 	= lineFit1.getSlope();
+				double varAlpha = lineFit1.getSlopeVariance();
+				double stdAlpha = lineFit1.getSlopeStdDev();
+				double newbeta = beta;
+				if(!useFreqDependantBeta) newbeta *= ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA, new Parameter(Parameter.BETA, newbeta, stdBeta, varBeta));
+				fittedParms.addParameter(Parameter.ALPHA, new Parameter(Parameter.ALPHA, alpha, stdAlpha, varAlpha));
+				// fit
+				for (int i = 0; i< xList1.size(); i ++) {
+					double val = (lineFit1.getSlope()*xList1.get(i).doubleValue()) + lineFit1.getIntercept(); 
+					fitList1.add(new Double(val));
+				}
+			}// if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			//////////////////////////////////////////////////////
+			//Equation 2 +> dI/dt second fit for beta and epsilon
+			List<Double> xList2 = new ArrayList<Double>();
+			List<Double> yList2 = new ArrayList<Double>();
+			List<Double> fitList2 = new ArrayList<Double>();
+			
+			//x, y for least squares fitting to line y = beta*x - epsilon
+			for(int j = 0; j < npts-1; j++){
+				double sNorm = sAvg[j]/sMax;
+				double iNorm = iAvg[j]/iMax;
+				if((sNorm<=maxSthreshold)&&(sNorm>=minSthreshold)&&(iNorm>=minIthreshold) ) {
+					xList2.add(new Double( ( pAvg[j] / sAvg[j]) ));
+					yList2.add(new Double((pAvg[j]/sAvg[j]) *dlnI[j]));
+				}// if data in range
+			}
+			// TODO:  Plot restricted data
+			LinearLeastSquaresFit lineFit2 = null;
+			if(xList2.size() > 2) {
+				lineFit2 = new LinearLeastSquaresFit(xList2,yList2);
+				// incpt
+				double beta2		= lineFit2.getIntercept(); 
+				double varBeta2 	= lineFit2.getInterceptVariance();
+				double stdBeta2 	= lineFit2.getInterceptStdDev();
+				// slope
+				double alpha2 		= lineFit2.getSlope();
+				double varAlpha2	= lineFit2.getSlopeVariance();
+				double stdAlpha2 	= lineFit2.getSlopeStdDev();
+				double newbeta2 = beta2 * ((ModelParameters.REFERENCE_POPULATION_DENSITY)/localDensity);
+				fittedParms.addParameter(Parameter.BETA2, new Parameter(Parameter.BETA2, newbeta2, stdBeta2, varBeta2));
+				fittedParms.addParameter(Parameter.ALPHA2, new Parameter(Parameter.ALPHA2, alpha2, stdAlpha2, varAlpha2));
+		
+				// fit
+				for (int i = 0; i< xList2.size(); i ++) {
+					double val = (lineFit2.getSlope()*xList2.get(i).doubleValue()) + lineFit2.getIntercept(); 
+					fitList2.add(new Double(val));
+				}		
+			} // if fit valid
+			else {
+				rejectCount += 1.0;
+			}
+			
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			// DONE
+			////////////////////////////////////////////////////////////////////////////////////////////////////
+			fittedParms.addParameter(Parameter.REJECT, new Parameter(Parameter.REJECT, rejectCount));
+			
+			dataToPlot.add(dataS);
+			dataToPlot.add(dataI);
+			fittedParms.addSelectedData(locationID, dataToPlot);
+			
+			double[][] regression1 = getSortedRegression(xList1, yList1); 
+			double[][] regression2 = getSortedRegression(xList2, yList2);
+			
+			double[][] fit1 = getSortedRegression(xList1, fitList1); 
+			double[][] fit2 = getSortedRegression(xList2, fitList2); 
+			
+			regressionValues.add(regression1);
+			regressionValues.add(regression2);
+
+			fittedValues.add(fit1);
+			fittedValues.add(fit2);
+			
+			fittedParms.addRegressionData(locationID, regressionValues);
+			fittedParms.addFittedData(locationID, fittedValues);
+			
+			
+			
+		return fittedParms;
+	} // estimate
+	
+	/**
+	 * SI models have 2 properties
+	 * @see org.eclipse.stem.util.analysis.ParameterEstimator#getNumProperties()
+	 */
+	public int getNumProperties() {
+		return 2;
+	}
+	
+	
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioAnalysisSuite.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioAnalysisSuite.java
new file mode 100644
index 0000000..5baf628
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioAnalysisSuite.java
@@ -0,0 +1,368 @@
+package org.eclipse.stem.util.analysis;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+import org.eclipse.stem.analysis.util.CSVscenarioLoader;
+import org.eclipse.stem.core.scenario.Scenario;
+import org.eclipse.stem.util.analysis.views.AnalysisControl;
+import org.eclipse.stem.util.analysis.views.EstimatorControl;
+import org.eclipse.stem.util.analysis.views.Messages;
+
+/**
+ * Analyzes a {@link Scenario} and compares scenarios
+ */
+public class ScenarioAnalysisSuite {
+	/**
+	 * For testing
+	 */
+	public static final String REFERENCE_ROOT_DIRECTORY = AggregateDataWriter.ANALYSISFOLDER;
+
+	/**
+	 * Where we start looking for recorded scenario files
+	 */
+	public static String REFERENCE_TESTING_DIRECTORY = REFERENCE_ROOT_DIRECTORY;
+
+	/**
+	 * Set to an actual folder below (if found)
+	 */
+	public static String REFERENCE_TESTING_AGGREGATE_FILE = REFERENCE_ROOT_DIRECTORY+File.separator+AggregateDataWriter.AGGREGATE_FOLDERNAME+File.separator+"aggregate.csv";
+
+	/**
+	 * Set to an actual folder below (if found)
+	 */
+	public static String REFERENCE_TESTING_INCIDENCE_FILE = REFERENCE_ROOT_DIRECTORY+File.separator+AggregateDataWriter.INCIDENCE_FOLDERNAME+File.separator+"incidence.csv";
+
+	
+	private static String DEFAULT_AGGREGATE_FILENAME = "aggregate";
+	
+	private static String COMPARISON_FILE_NAME = "RMSComparisonResults";
+		
+	/**
+	 * Message if directory not found
+	 */
+	public static final String NOT_FOUND_MSG = Messages.getString("COMMON.NOTFOUND");
+	
+	/**
+	 * Message if data not valid
+	 */
+	public static final String INVALID_DATA_MSG = Messages.getString("COMMON.NOTDATA");
+	
+	/**
+	 * Message if done
+	 */
+	public static final String DONE_MSG = Messages.getString("COMMON.DONE");
+	
+	/**
+	 * Message if Ready
+	 */
+	public static final String READY_MSG = Messages.getString("COMMON.READY");
+	
+	/**
+	 * Message if Working
+	 */
+	public static final String WORKING_MSG = Messages.getString("COMMON.WORKING");
+	
+	
+	/**
+	 * Contains all reference scenario data
+	 */
+	ReferenceScenarioDataMapImpl referenceScenarioDataMap = null;
+	
+	/**
+	 * Contains all reference scenario data (for comparison)
+	 */
+	ReferenceScenarioDataMapImpl comparisonScenarioDataMap = null;
+	
+	/** 
+	 * the Estimator instance
+	 */
+	ScenarioParameterEstimator estimator = null;
+	
+	AnalysisControl control = null;
+	
+	
+	/**
+	 * @param ctrl 
+	 * 
+	 */
+	public ScenarioAnalysisSuite(AnalysisControl ctrl) {
+		control = ctrl;
+		// Nothing
+	}
+
+	/**
+	 * Aggregate data
+	 * 
+	 * @param folder Scenario folder
+	 * @param runnableContext Runnable context
+	 * @param alpha the Immunity Loss Rate. This is needed to compute the incidence
+	 * @return String[] filename where filename[0] = aggregate data file and filename[1] = incidence data file
+	 * @throws ScenarioInitializationException Thrown if problem reading data
+	 */
+	
+	public String[] aggregateData(String folder, IRunnableContext runnableContext, double alpha) throws ScenarioInitializationException{	
+		String[] retVal = new String[2];
+		CSVscenarioLoader loader = new CSVscenarioLoader(folder);
+		int maxResolution = loader.getMaxResolution();
+        ReferenceScenarioDataMapImpl map = loader.parseAllFiles(maxResolution);
+        String aggregateFileName = getAggregateFileName(folder);
+        ReferenceScenarioDataInstance aggregatedData = map.aggregateScenarioData(runnableContext);
+        AggregateDataWriter writer = new AggregateDataWriter(folder, aggregateFileName);
+     
+        retVal = writer.logDataInstance(aggregatedData, alpha);     
+		return retVal;
+	}
+	
+	
+	/**
+	 * Aggregate data but filter the locations that get aggregate to match the locations
+	 * in the referenceFolder
+	 * @param referenceFolder 
+	 * @param folder Scenario folder
+	 * @param runnableContext Runnable context
+	 * @param alpha the Immunity Loss Rate. This is needed to compute the incidence
+	 * @return String[] filename where filename[0] = aggregate data file and filename[1] = incidence data file
+	 * @throws ScenarioInitializationException Thrown if problem reading data
+	 */
+	
+	public String[] aggregateByFilter(String referenceFolder, String folder, IRunnableContext runnableContext, double alpha) throws ScenarioInitializationException{	
+		String[] retVal = new String[2];
+		
+		CSVscenarioLoader refLoader = new CSVscenarioLoader(referenceFolder);
+		int maxRes = refLoader.getMaxResolution();
+		Set<String> locationsToAggregate = refLoader.getLocations(maxRes);	
+		CSVscenarioLoader loader = new CSVscenarioLoader(folder);
+		int maxResolution = loader.getMaxResolution();
+        ReferenceScenarioDataMapImpl map = loader.parseAllFiles(locationsToAggregate, maxResolution);
+        String aggregateFileName = getAggregateFileName(folder);
+        ReferenceScenarioDataInstance aggregatedData = map.aggregateScenarioData(runnableContext);
+        AggregateDataWriter writer = new AggregateDataWriter(folder, aggregateFileName);
+        retVal = writer.logDataInstance(aggregatedData, alpha);     
+		return retVal;
+	}
+	
+	/**
+	 * Estimates the model parameters for scenario data located in the referenceDirectory
+	 * @param dataMap Data
+	 * @param parameterEstimatorMethod Which method do we use to estimate
+	 * @param runnableContext Context used for long running tasks
+	 * @return a set of fitted model parameters
+	 */
+	public ModelParameters estimateParameters(ReferenceScenarioDataMapImpl dataMap, ParameterEstimatorMethod parameterEstimatorMethod, IRunnableContext runnableContext) {	
+			this.referenceScenarioDataMap = dataMap;
+			estimator = new ScenarioParameterEstimator(this.referenceScenarioDataMap, parameterEstimatorMethod);
+			
+			ModelParameters bestEstimate = new ModelParameters();
+			
+			// The user can set this
+			boolean sumAllLocations = false;
+			Map<String,Object> controlParametersMap = control.getControlParametersMap();
+			if(controlParametersMap != null) {
+				sumAllLocations = ((Boolean) controlParametersMap.get(EstimatorControl.SUM_LOCATIONS_KEY)).booleanValue();
+			}
+			
+			if(sumAllLocations) {
+				bestEstimate = estimator.averageThenEstimateParameters(controlParametersMap, runnableContext);
+			} else {
+				Map<String,ModelParameters> fittedParameters = estimator.estimateParameters(controlParametersMap, runnableContext);		
+				bestEstimate.average(fittedParameters);
+			}
+			
+			
+		    return bestEstimate;
+	}
+	
+	/**
+	 * The aggregate file is named after the data directory under csv
+	 * @param dir
+	 * @return
+	 */
+	private static String getAggregateFileName(String dir) {
+		int start = dir.lastIndexOf(File.separatorChar);
+		
+		String filename = DEFAULT_AGGREGATE_FILENAME;
+		if(start >=0) {
+			filename = dir.substring(start+1,dir.length());
+		}
+		filename = filename +".csv";
+		return filename;
+	}
+	
+	/**
+	 * Root Mean Square Difference Comparison
+	 * Compares data from two scenarios: the referenceDirectory and the comparisonDirectory
+	 * The comparison directory will recursively traverse directories to search for log files.
+	 * When found, a comparison is done and the results is written to the comparison directory
+	 * including the parameters used for the simulation
+	 * 
+	 * @param referenceDirectory
+	 * @param comparisonDirectory
+	 * @param runnableContext Context for long running task
+	 * @return ErrorResult
+	 * @throws ScenarioInitializationException 
+	 */
+	
+	public ErrorResult compare(String referenceDirectory, String comparisonDirectory, IRunnableContext runnableContext) throws ScenarioInitializationException {
+		CSVscenarioLoader referenceLoader = new CSVscenarioLoader(referenceDirectory);
+		// We will write the result to a file in the comparison directory folder
+		String resultFile = COMPARISON_FILE_NAME;
+		
+		CSVAnalysisWriter resultWriter = new CSVAnalysisWriter(resultFile);	
+		Map<Map<String, String>, ErrorResult> result = new HashMap<Map<String, String>, ErrorResult>();
+		compareRecursive(referenceLoader, comparisonDirectory, result, runnableContext);
+		resultWriter.logData(result);
+		resultWriter.flushLoggerData();
+		resultWriter.closeLoggerData();
+		// Find the smallest RMS difference and return its double list
+		double smallestError = Double.MAX_VALUE;
+		ErrorResult returnError=null;
+		for(Map<String, String> entry : result.keySet()) {
+			ErrorResult res = result.get(entry);
+			// Compute average
+			double error = 0.0;
+			if(res !=null) {
+				error = res.getError();
+			}
+			if(error < smallestError) {smallestError = error;returnError = res;}
+		}
+		return returnError;
+	}
+	
+	/**
+	 * Root Mean Square Difference Comparison
+	 * Compares data from two scenarios: the referenceDirectory and the comparisonDirectory
+	 * The comparison directory will recursively traverse directories to search for log files.
+	 * When found, a comparison is done and the results is written to the comparison directory
+	 * including the parameters used for the simulation
+	 * 
+	 * @param referenceLoader
+	 * @param comparisonDirectory
+	 * @param result
+	 * @param runnableContext Context for long running task
+	 * @throws ScenarioInitializationException 
+	 */
+	public void compareRecursive(CSVscenarioLoader referenceLoader, String comparisonDirectory, Map<Map<String, String>, ErrorResult> result, IRunnableContext runnableContext) throws ScenarioInitializationException {		
+		try {
+			CSVscenarioLoader comparisonLoader = new CSVscenarioLoader(comparisonDirectory);
+			// A valid scenario folder was found. Do the comparison
+			ErrorResult res = _compare(referenceLoader, comparisonLoader, runnableContext);
+			Map<String, String>runParms = comparisonLoader.getRunParameters();
+			result.put(runParms, res);
+		} catch(ScenarioInitializationException sie) {
+			// The folder did not contain valid log files. Recurse down subdirectories
+			// looking for log files
+			File f = new File(comparisonDirectory);
+			String [] dirs = f.list();
+			if(dirs != null) 
+				for(String dir : dirs) compareRecursive(referenceLoader, comparisonDirectory+File.separator+dir, result, runnableContext);
+		}
+	}
+
+		
+	/**
+	 * Root Mean Square Difference Comparison
+	 * Compares data from two scenarios: the referenceDirectory and the comparisonDirectory
+	 * @param refLoader
+	 * @param compLoader
+	 * @param runnableContext Context for long running task
+	 * @return the mean square diff
+	 * @throws ScenarioInitializationException 
+	 */
+	private ErrorResult _compare(CSVscenarioLoader refLoader, CSVscenarioLoader compLoader, IRunnableContext runnableContext) throws ScenarioInitializationException {
+			int maxRef = refLoader.getMaxResolution();		
+			int maxComp = compLoader.getMaxResolution();				
+			// Find the highest resolution common two both locations and 
+			// use it for comparison.
+			int actualRes = (maxRef > maxComp)?maxComp:maxRef;
+				
+			this.referenceScenarioDataMap = refLoader.parseAllFiles(actualRes);
+					
+			this.comparisonScenarioDataMap = compLoader.parseAllFiles(actualRes);
+					
+			SimplifiedMeanSquareDifference msd = new SimplifiedMeanSquareDifference(referenceScenarioDataMap, comparisonScenarioDataMap);
+					
+			ErrorResult result = 	msd.solve(runnableContext);	
+			return result;
+	}
+	
+	/**
+	 * 
+	 * @param directory
+	 * @return true is a data directory exists
+	 */
+	public boolean validate(String directory) {
+		return CSVscenarioLoader.validate(directory);
+	}
+	
+	/**
+	 * Root Mean Square Difference Comparison
+	 * Compares data from two scenarios: the referenceDirectory and the comparisonDirectory
+	 * @param referenceDirectory
+	 * @param comparisonDirectory
+	 * @param runnableContext Context for long running tasks
+	 * @return the mean square diff
+	 * @throws ScenarioInitializationException Thrown if problems encountered reading data
+	 */
+	
+	public List<PhaseSpaceCoordinate[]> getLyapunovTrajectory(String referenceDirectory, String comparisonDirectory, IRunnableContext runnableContext) throws ScenarioInitializationException {
+		   
+			// for reference and for single scenario analysis
+			CSVscenarioLoader refLoader = new CSVscenarioLoader(referenceDirectory);
+			int maxRef = refLoader.getMaxResolution();
+			// for testing comparison functions
+			CSVscenarioLoader compLoader = new CSVscenarioLoader(comparisonDirectory);
+			int maxComp = compLoader.getMaxResolution();
+			
+			int actualRes = (maxRef > maxComp)?maxComp:maxRef;
+			this.referenceScenarioDataMap = refLoader.parseAllFiles(actualRes);
+			this.comparisonScenarioDataMap = compLoader.parseAllFiles(actualRes);
+			
+			LyapunovAnalysis lyap = new LyapunovAnalysis(referenceScenarioDataMap, comparisonScenarioDataMap, runnableContext);
+			
+			List<PhaseSpaceCoordinate[]> retVal = lyap.getLyapunovTrajectory(runnableContext);	
+			return retVal;
+	}
+	
+	/**
+	 * 
+	 * @param trajectoryList
+	 * @return the deviation as List(double[])
+	 */
+	public static List<EList<Double>> getCumulativePhaseSpaceDeviation(List<PhaseSpaceCoordinate[]> trajectoryList) {
+		List<EList<Double>> deviation = LyapunovAnalysis.getCumulativePhaseSpaceDeviation(trajectoryList);
+		return deviation;
+		
+	}
+	
+	/**
+	 * 
+	 * @return the current estimator
+	 */
+	public ParameterEstimator getEstimator() {
+		return estimator.getEstimator();
+	}
+
+
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioParameterEstimator.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioParameterEstimator.java
new file mode 100644
index 0000000..86dcbca
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ScenarioParameterEstimator.java
@@ -0,0 +1,567 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.stem.analysis.States;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+import org.eclipse.stem.definitions.labels.AreaLabel;
+import org.eclipse.stem.definitions.labels.PopulationLabel;
+import org.eclipse.stem.util.analysis.views.EstimatorControl;
+import org.eclipse.stem.util.analysis.views.Messages;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+/**
+ * Estimates rate constants for a scenario
+ */
+public class ScenarioParameterEstimator {
+	
+	/**
+	 * The scenario data used for estimation
+	 */
+	
+	ReferenceScenarioDataMapImpl referenceScenarioDataMap = null;
+	
+	/**
+	 * The Parameter Estimator method we use
+	 */
+	
+	ParameterEstimatorMethod parameterEstimatorMethod = null;
+	
+	/**
+	 * This Set will contain locations with "good" data. Good data implies that at least
+	 * the "I" state is defined and that maximum number of poeple in the "I" state at some time
+	 * is large enough for the estimator to return an approximate beta coefficient 
+	 */
+	Set<String> referenceLocations;
+	
+	/**
+	 * areas of the reference locations
+	 * loaded from the scenario graph by ID
+	 */
+	Map<String,Double> referenceAreaDataMap;
+	
+	/**
+	 * populations of the reference locations
+	 * loaded from the scenario graph by ID
+	 */
+	Map<String,Double> referencePopulationDataMap;
+	
+	/**
+	 * remember the max Infectious at each location
+	 */
+	Map<String,Double> maxInfectiousMap = new HashMap<String,Double>();
+	
+	ParameterEstimator estimator;
+	
+	/**
+	 * Prefix for area. Format is
+	 *   stem://org.eclipse.stem/label/area/USA/2/US-GA-13307
+	 */
+	private static final String AREA_URI_PREFIX = org.eclipse.stem.definitions.labels.AreaLabel.URI_TYPE_AREA_LABEL_SEGMENT;
+	
+	/**
+	 * prefix for population. Format is
+	 * stem://org.eclipse.stem/label/population/USA/2/US-GA-13307/human
+	 *    
+	 */
+	private static final String POPULATION_URI_PREFIX = org.eclipse.stem.definitions.labels.PopulationLabel.URI_TYPE_POPULATION_LABEL_SEGMENT;
+	
+	/**
+	 * TODO make gui item
+	 * syntax is  
+	 * stem://org.eclipse.stem/label/population/ISR/2/human/2006/IL-05-623
+	 * Human only for now
+	 */
+	private static final String SPECIES = "human";
+	
+	/**
+	 * TODO make gui item
+	 * syntax is 
+	 *  stem://org.eclipse.stem/label/population/ISR/2/human/2006/IL-05-623
+	 */
+	private static final String YEAR = "2006";
+	
+	/**
+	 * analysis mode using ALL data including zeros
+	 */
+	public static final int ALL_MODE = 0;
+	
+	/**
+	 * analysis mode analyzing data only when S,E,I,R are all > 0.0;
+	 */
+	public static final int NON_ZERO_DATA_MODE = 1;
+	
+	
+	/**
+	 * constant
+	 */
+	public static final String LEVEL_STRING = "level"; 	
+	
+	// fit all locations with max infectious populations >= FITTING_FRACTION * LARGEST Infectious Population
+	private static final double FITTING_FRACTION = 0.05;
+	
+	/**
+	 * The parent control
+	 */
+	protected EstimatorControl control = null;
+	
+	/**
+	 * 
+	 * @param scenarioDataMap
+	 * @param parameterEstimatorMethod 
+	 */
+	public ScenarioParameterEstimator(ReferenceScenarioDataMapImpl scenarioDataMap, ParameterEstimatorMethod parameterEstimatorMethod) {
+		referenceScenarioDataMap = scenarioDataMap;
+		this.parameterEstimatorMethod = parameterEstimatorMethod;
+		referenceLocations = getReferenceLocations();
+		getAreaDataMap();
+		getPopulationDataMap();
+	}
+	
+	/**
+	 * Estimate the rate parameters from the existing scenario data
+	 * @param controlParamtersMap 
+     * @param runnableContext Context for long running tasks
+	 * @return map of parameters
+	 */
+	public Map<String,ModelParameters> estimateParameters(Map<String,Object> controlParamtersMap, IRunnableContext runnableContext) { 		
+		final Map<String,Object> finalParameterMap = controlParamtersMap;
+		
+		final ParameterEstimatorMethod method = this.parameterEstimatorMethod;
+		
+		IScenarioParameterEstimatorRunnableWithProgress analysisTask = new IScenarioParameterEstimatorRunnableWithProgress() {
+			public Map<String,ModelParameters> fittedParameters = new HashMap<String,ModelParameters>();
+            public void run(IProgressMonitor progress) {
+            	Iterator<String> iter = referenceLocations.iterator();
+            	int icount = 0;
+                progress.beginTask("Estimating parameters", referenceLocations.size());
+                // TODO START this code exists only to TEST the CycleCompressor class
+        		// TODO START this code exists only to TEST the CycleCompressor class
+                // TODO SHOULD EVENTUALLY BE PART OF RONI's new VIEW
+        		//List<String> allIDs = new ArrayList<String>();
+        		//List<double[]> allCompressedIncidence = new ArrayList<double[]>();
+        		// TODO END this code exists only to TEST the CycleCompressor class
+        		// TODO END this code exists only to TEST the CycleCompressor class
+                
+                
+                while(iter.hasNext()) {	
+                	icount ++;
+            		//if (icount%100==0) System.out.println(".");
+            			
+            		String id = iter.next();
+            			
+            		ReferenceScenarioDataInstance locationDataMap = referenceScenarioDataMap.getLocation(id);
+            	
+            		// TODO START this code exists only to TEST the CycleCompressor class
+            		// TODO START this code exists only to TEST the CycleCompressor class
+            		// TODO SHOULD EVENTUALLY BE PART OF RONI's new VIEW
+            		//allIDs.add(id);
+            		//CycleCompressor compressor = new CycleCompressor(locationDataMap);
+            		//double[] result = compressor.getCompressedData();
+            		//allCompressedIncidence.add(result);
+            		// TODO END this code exists only to TEST the CycleCompressor class
+            		// TODO END this code exists only to TEST the CycleCompressor class
+            		
+            		
+           			estimator = ParameterEstimatorFactory.createEstimator(method, locationDataMap);
+           			estimator.setAllParameters(finalParameterMap);
+           			
+           			double localArea = getArea(id).doubleValue();
+           			assert(localArea > 0.0);
+           			if(localArea == 0) localArea = 1.0; // should never happen
+           			final double localPopulation = getPopulation(id).doubleValue();
+           			final double localDensity = localPopulation/localArea;
+           			ModelParameters parameters = estimator.estimate(localDensity, localPopulation,id);
+           			//System.out.println("got parameters "+parameters.toString());
+           			fittedParameters.put(id, parameters);
+            		if (progress.isCanceled())
+                        throw new OperationCanceledException();
+            		progress.worked(1);
+            	} // while
+                
+                // TODO START this code exists only to TEST the CycleCompressor class
+        		// TODO START this code exists only to TEST the CycleCompressor class
+                // TODO SHOULD EVENTUALLY BE PART OF RONI's new VIEW
+                //CSVAnalysisWriter writer = new CSVAnalysisWriter("C:/runtime-stem.product/Mecids/recordedsimulations/Influenza/cycleCompressed/","Incidence");
+        		//writer.logData(allIDs, allCompressedIncidence);
+        		// TODO END this code exists only to TEST the CycleCompressor class
+        		// TODO END this code exists only to TEST the CycleCompressor class
+        		
+                
+                
+                
+                progress.done();
+            }
+            
+            /**
+             * Return the fitted parameters
+             * @return Map<String, ModelParameters> result
+             */
+            public Map<String, ModelParameters> getFittedParameters() {
+            	return this.fittedParameters;
+            }
+         };
+         try {
+        	 runnableContext.run(true, true, analysisTask);
+         } catch(InterruptedException ie) {
+        	 Activator.logError("", ie);
+        	 return null;
+         } catch(InvocationTargetException ite) {
+        	 Activator.logError("", ite);
+        	 return null;
+         }
+         return analysisTask.getFittedParameters();
+	}//estimateParameters() 
+	
+	/**
+	 * Average All data THEN Estimate the rate parameters from the averaged scenario data
+	 * @param controlParamtersMap 
+	 * @param runnableContext Context for long running tasks
+	 * @return map of parameters
+	 */
+	public ModelParameters averageThenEstimateParameters(Map<String,Object> controlParamtersMap, IRunnableContext runnableContext) { 		 		
+		final Map<String,Object> finalParameterMap = controlParamtersMap;
+		final ParameterEstimatorMethod method = this.parameterEstimatorMethod;
+		
+		IAveragedParameterEstimatorRunnableWithProgress analysisTask = new IAveragedParameterEstimatorRunnableWithProgress() {
+			ModelParameters modelParameters = null;
+            public void run(IProgressMonitor progress) {
+            	Iterator<String> iter = referenceLocations.iterator();
+    
+                progress.beginTask("Averaging data", referenceLocations.size());
+                ReferenceScenarioDataInstance averagedDataMap = null;
+                double localArea = 0.0;
+                double localPopulation = 0.0;
+                referenceScenarioDataMap.findMaxIncidence();
+                String idMax = referenceScenarioDataMap.getMaxIncidenceLocation();
+                //double max = referenceScenarioDataMap.getMaxIncidence();
+                //System.out.println(" max incidence is "+max+" at "+idMax);
+              	localArea += getArea(idMax).doubleValue();
+                localPopulation += getPopulation(idMax).doubleValue();
+                ReferenceScenarioDataInstance maxlocationDataMap = referenceScenarioDataMap.getLocation(idMax);
+                averagedDataMap = maxlocationDataMap.clone();
+               // PhaseSynchronizer synchronizer = new PhaseSynchronizer(averagedDataMap);
+                	
+                while(iter.hasNext()) {	
+            		String id = iter.next();
+            		if(!id.equalsIgnoreCase(idMax)) {
+            			localArea += getArea(id).doubleValue();
+                		localPopulation += getPopulation(id).doubleValue();
+                		ReferenceScenarioDataInstance locationDataMap = referenceScenarioDataMap.getLocation(id);
+                		averagedDataMap.integrateData(locationDataMap.instance);
+            		}
+                }
+                
+       			estimator = ParameterEstimatorFactory.createEstimator(method, averagedDataMap);
+       			estimator.setAllParameters(finalParameterMap);
+       			assert(localArea > 0.0);
+       			if(localArea == 0) localArea = 1.0; // should never happen
+       			final double localDensity = localPopulation/localArea;
+        					
+       			modelParameters = estimator.estimate(localDensity, localPopulation, Messages.getString("EST.AVERAGE"));
+       			
+        		if (progress.isCanceled())
+                    throw new OperationCanceledException();
+            		progress.worked(1);
+            
+                progress.done();
+            }
+            
+            /**
+             * Return the fitted parameters
+             * @return Map<String, ModelParameters> result
+             */
+            public ModelParameters getModelParameters() {
+            	return this.modelParameters;
+            }
+         };
+         try {
+        	 runnableContext.run(true, true, analysisTask);
+         } catch(InterruptedException ie) {
+        	 Activator.logError("", ie);
+        	 return null;
+         } catch(InvocationTargetException ite) {
+        	 Activator.logError("", ite);
+        	 return null;
+         }
+         return analysisTask.getModelParameters();
+	}//averageThenEstimateParameters() 
+	
+	/**
+	 * Returns a set of locations where the max Infectious population satisfies the criterion:
+	 * localMaxI >= FITTING_FRACTION*globalMaxI
+	 * There is not point in analyzing locations where no-one gets sick
+	 * @return set of referenceLocations
+	 */
+	private Set<String> getReferenceLocations() {
+		Set<String> locationsToFit = new HashSet<String>();
+		Set<String> allLocations = referenceScenarioDataMap.getLocations();
+		
+		double globalMaxI = 0.0;
+		
+		// 1. get the local max infectious count by region id for all regions
+		Iterator<String> iter = allLocations.iterator();
+		while((iter!=null)&&(iter.hasNext()))  {
+			String id = iter.next();
+			ReferenceScenarioDataInstance locationDataMap = referenceScenarioDataMap.getLocation(id);
+			
+			if(locationDataMap.containsParameter(States.statesToFit[States.INFECTIOUS])) {
+				List<String> data = locationDataMap.getData(States.statesToFit[States.INFECTIOUS]);
+				double localMax = 0.0;
+				
+				for(int i = 0; i < data.size(); i ++) {
+					double infectious = (new Double(data.get(i))).doubleValue();
+					if (localMax < infectious) localMax = infectious;
+					if (globalMaxI < localMax) globalMaxI = localMax;
+					
+				}
+				maxInfectiousMap.put(id,new Double(localMax));
+			}
+		}
+		
+		// 2. Select those regions with  max infectious count  >= FITTING_FRACTION * LARGEST Infectious Population
+		Iterator<String> iter2 = maxInfectiousMap.keySet().iterator();
+		while((iter2!=null)&&(iter2.hasNext()))  {
+			String id = iter2.next();
+			double localMaxI = 	maxInfectiousMap.get(id).doubleValue();
+			if (localMaxI >= FITTING_FRACTION*globalMaxI) {
+				locationsToFit.add(id);
+			}
+			
+		}
+		
+	  	return locationsToFit;
+	}
+	
+	/**
+	 * 
+	 * @param ID
+	 * @return
+	 */
+	Double getArea(String id) {
+		double area = 0.0;
+		URI uri = getAreaURI(id); 
+		// New utility method
+		AreaLabel areaLabel = (AreaLabel)org.eclipse.stem.ui.Utility.getLabel(uri);
+		if(areaLabel==null) Activator.logError("area label is null", new NumberFormatException("null area"));
+		area = areaLabel.getCurrentAreaValue().getArea();
+		return new Double(area);
+	}
+	
+	/**
+	 * 
+	 * @param ID
+	 * @return
+	 */
+	Double getPopulation(String id) {
+		double pop = 0.0;
+		URI uri = getPopulationURI(id); 
+		// New utility method
+		PopulationLabel popLabel = (PopulationLabel)org.eclipse.stem.ui.Utility.getLabel(uri);
+		if(popLabel==null) Activator.logError("Population label is null", new NumberFormatException("null population"));
+		pop = popLabel.getCurrentPopulationValue().getCount();
+		return new Double(pop);
+	}
+	
+	/**
+	 * 
+	 * @return the area map
+	 */
+	Map<String,Double> getAreaDataMap() {
+		Map<String,Double> areaMap = new HashMap<String,Double>();
+		Iterator<String> iter = referenceLocations.iterator();
+		while(iter.hasNext()) {
+			String id = iter.next();
+			Double area = getArea(id);
+			areaMap.put(id, area);
+		}
+		return areaMap;
+	}
+	
+	/**
+	 * 
+	 * @return the population map
+	 */
+	Map<String,Double> getPopulationDataMap() {
+		Map<String,Double> popMap = new HashMap<String,Double>();
+		Iterator<String> iter = referenceLocations.iterator();
+		while(iter.hasNext()) {
+			String id = iter.next();
+			Double population = getPopulation(id);
+			popMap.put(id, population);
+		}	
+		return popMap;
+	}
+	
+	/**
+	 * convert a List of String into and array of double
+	 * @param dataList
+	 * @return double[] of values
+	 */
+	public static double[] getDoubleValues(List<String> dataList) {
+		double[] retValue = new double[dataList.size()];
+		try {
+			for (int i = 0; i < dataList.size(); i ++) {
+				Double dbleObj = new Double(dataList.get(i));
+				retValue[i] = dbleObj.doubleValue();
+			}
+		} catch(Exception e) {
+			Activator.logError("String Data not valid. Expecting Double values", e);
+		}
+		
+		return retValue;
+	}
+	
+
+
+    /**
+     * @return the Estimator
+     */
+    public ParameterEstimator getEstimator() {
+		return estimator;
+	}
+	
+	
+	/**
+	 * 
+	 * @param id
+	 * @return
+	 */
+	URI getAreaURI(String id) {
+		int level = getLevel(id);
+		String countryCode;
+		// need uri of form:   stem://org.eclipse.stem/label/area/USA/2/US-GA-13307
+		if (level == 0)  {
+			countryCode = id;
+		} else {
+			String twoLetterCode = id.substring(0,2);
+			countryCode = org.eclipse.stem.data.geography.GeographicMapper.getAlpha3(twoLetterCode);
+		}
+		String composite = "stem://org.eclipse.stem/"+AREA_URI_PREFIX + "/" + countryCode +"/"+getLevel(id)+"/"+id;
+		URI uri = URI.createURI(composite);	
+		return uri;
+	}// getAreaURI
+	
+	
+	/**
+	 * 
+	 * @param id
+	 * @return
+	 */
+	URI getPopulationURI(String id) {
+		int level = getLevel(id);
+		String countryCode;
+		// compose the input string
+		if (level == 0)  {
+			countryCode = id;
+		} else {
+			String twoLetterCode = id.substring(0,2);
+			countryCode = org.eclipse.stem.data.geography.GeographicMapper.getAlpha3(twoLetterCode);
+		}
+		// syntax is
+		// stem://org.eclipse.stem/label/population/ISR/2/human/2006/IL-05-623
+		String composite = "stem://org.eclipse.stem/"+POPULATION_URI_PREFIX + "/" + countryCode +"/"+getLevel(id)+"/"+SPECIES+"/"+YEAR+"/"+id;	
+		URI uri = URI.createURI(composite);	
+		return uri;
+	}// getPopulationURI
+	
+	/**
+	 * finds the admin level of the id by counting '-' characters
+	 * @param id
+	 * @return
+	 */
+	private int getLevel(String id) {
+		
+		if(id.indexOf("-") ==-1) return 0;
+		
+		int idx1 = id.indexOf("-");
+		String firstPart = id.substring(idx1+1,id.length());
+		if(firstPart.indexOf("-") ==-1) return 1;
+		
+		int idx2 = firstPart.indexOf("-");
+		String secondPart = firstPart.substring(idx2+1,firstPart.length());
+		if(secondPart.indexOf("-") ==-1) return 2;
+		
+
+		int idx3 = secondPart.indexOf("-");
+		String thirdPart = secondPart.substring(idx3+1,secondPart.length());
+		if(thirdPart.indexOf("-") ==-1) {
+			return 3;
+		} 
+		// TODO should generalize this.
+		return 4; // two levels past where we now have data....
+		
+	}
+	
+	
+	/**
+	 * 
+	 * @return an array of the states to fit by name
+	 */
+	public static String[] getStatesToFit() {
+		return States.statesToFit;
+	}
+	
+	
+	
+	/**
+	 * Internal interface for long running task
+	 */
+	private interface IScenarioParameterEstimatorRunnableWithProgress extends IRunnableWithProgress {
+		 /**
+         * Return the fitted parameters
+         * @return Map<String, ModelParameters> result
+         */
+        public Map<String, ModelParameters> getFittedParameters();
+	}
+	
+
+	
+	/**
+	 * Internal interface for long running task
+	 */
+	private interface IAveragedParameterEstimatorRunnableWithProgress extends IRunnableWithProgress {
+		 /**
+         * Return the fitted parameters
+         * @return ModelParameters  result
+         */
+        public ModelParameters getModelParameters();
+	}
+	
+	/**
+	 * Get the values to plot from the estimator
+	 * @param chartIndex
+	 * @param state
+	 * @return the array of data to plot
+	 */
+	public double[] getValues(int chartIndex, int state) {
+		return estimator.getValues(chartIndex, state);
+	}
+	
+}// getLevel
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SimplifiedMeanSquareDifference.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SimplifiedMeanSquareDifference.java
new file mode 100644
index 0000000..daa20f0
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/SimplifiedMeanSquareDifference.java
@@ -0,0 +1,105 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.SimpleErrorFunction;
+import org.eclipse.stem.analysis.impl.AnalysisFactoryImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+
+
+   
+
+/** 
+ * this class computes the mean square difference between two scenarios as a function of time
+ * 1. It only looks at locations which are COMMON to both scenarios
+ * 2. The time series should be the same length. If they are not this will compare of a period equal to
+ *    the SHORTEST of all the time series. 
+ * 3. It only considers locations where infectious count is nonzero in one or the other - not interested in weighting regions with no disease.
+ * 
+ * The simplified version only deals with absolute I comparison
+ *
+ */
+
+public class SimplifiedMeanSquareDifference {
+	
+	ReferenceScenarioDataMapImpl ref;
+	ReferenceScenarioDataMapImpl data;
+	ErrorResult result;
+	
+	static AnalysisFactory aFactory = new AnalysisFactoryImpl();
+	static SimpleErrorFunction errorFunction = aFactory.createSimpleErrorFunction();
+	
+	/**
+	 * input
+	 */
+	Map<String,List<Double>> commonInfectiousLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonInfectiousLocationsB = new HashMap<String,List<Double>>();
+	
+	
+	
+	
+	/**
+	 * Determines the MeanSquare difference between two scenario data sets over time each stored in a map
+	 * @param scenarioMapA 
+	 * @param scenarioMapB 
+	 */
+	public SimplifiedMeanSquareDifference(ReferenceScenarioDataMapImpl scenarioMapA, ReferenceScenarioDataMapImpl scenarioMapB) {
+		ref = scenarioMapA;
+		data = scenarioMapB;
+	}// constructor MeanSquareDifference
+	
+	
+	
+	
+	/**
+	 * solves for the Root MeanSquareDifference vs time
+	 * using infectious data only for now
+	 * 
+	 * @param runnableContext Runnable context for progress indicator
+	 * @return comparison time series as double[]
+	 */
+	public ErrorResult solve(IRunnableContext runnableContext) {
+		final SimplifiedMeanSquareDifference self = this;
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Solving...", 100);
+            	
+            	self.result = errorFunction.calculateError(self.ref, self.data);
+            	progress.done();
+            }
+		};
+		
+		try {
+			runnableContext.run(true, false, task);
+		} catch(InterruptedException ie) {
+			// Task is not interruptable
+		} catch(InvocationTargetException ite) {
+			// Task is not interruptable
+		}
+		return this.result;
+	}// solve()
+
+	
+	
+} // class SimpleMeanSquareDifference
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ThresholdMeanSquareDifference.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ThresholdMeanSquareDifference.java
new file mode 100644
index 0000000..8475c1c
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/ThresholdMeanSquareDifference.java
@@ -0,0 +1,107 @@
+/**
+ * 
+ */
+package org.eclipse.stem.util.analysis;
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.stem.analysis.AnalysisFactory;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ThresholdErrorFunction;
+import org.eclipse.stem.analysis.impl.AnalysisFactoryImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+
+
+   
+
+/** 
+ * this class computes the mean square difference between two scenarios as a function of time
+ * 1. It only looks at locations which are COMMON to both scenarios
+ * 2. The time series should be the same length. If they are not this will compare of a period equal to
+ *    the SHORTEST of all the time series. 
+ * 3. It only considers locations where infectious count is nonzero in one or the other - not interested in weighting regions with no disease.
+ * 4. There is a threshold where we  ignore error if it's below the threshold. 
+ * 
+ * 
+ * The simplified version only deals with absolute I comparison
+ *
+ */
+
+public class ThresholdMeanSquareDifference {
+	
+	ReferenceScenarioDataMapImpl ref;
+	ReferenceScenarioDataMapImpl data;
+	ErrorResult result;
+	
+	static AnalysisFactory aFactory = new AnalysisFactoryImpl();
+	static ThresholdErrorFunction errorFunction = aFactory.createThresholdErrorFunction();
+	
+	/**
+	 * input
+	 */
+	Map<String,List<Double>> commonInfectiousLocationsA = new HashMap<String,List<Double>>();
+	Map<String,List<Double>> commonInfectiousLocationsB = new HashMap<String,List<Double>>();
+	
+	
+	
+	
+	/**
+	 * Determines the MeanSquare difference between two scenario data sets over time each stored in a map
+	 * @param scenarioMapA 
+	 * @param scenarioMapB 
+	 */
+	public ThresholdMeanSquareDifference(ReferenceScenarioDataMapImpl scenarioMapA, ReferenceScenarioDataMapImpl scenarioMapB) {
+		ref = scenarioMapA;
+		data = scenarioMapB;
+	}// constructor MeanSquareDifference
+	
+	
+	
+	
+	/**
+	 * solves for the Root MeanSquareDifference vs time
+	 * using infectious data only for now
+	 * 
+	 * @param runnableContext Runnable context for progress indicator
+	 * @return comparison time series as double[]
+	 */
+	public ErrorResult solve(IRunnableContext runnableContext) {
+		final ThresholdMeanSquareDifference self = this;
+		IRunnableWithProgress task = new IRunnableWithProgress() {
+            public void run(IProgressMonitor progress) {
+            	progress.beginTask("Solving...", 100);
+            	
+            	self.result = errorFunction.calculateError(self.ref, self.data);
+            	progress.done();
+            }
+		};
+		
+		try {
+			runnableContext.run(true, false, task);
+		} catch(InterruptedException ie) {
+			// Task is not interruptable
+		} catch(InvocationTargetException ite) {
+			// Task is not interruptable
+		}
+		return this.result;
+	}// solve()
+
+	
+	
+} // class ThresholdMeanSquareDifference
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/perspectives/Analysis.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/perspectives/Analysis.java
new file mode 100644
index 0000000..5ecae38
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/perspectives/Analysis.java
@@ -0,0 +1,81 @@
+// Analysis.java
+package org.eclipse.stem.util.analysis.perspectives;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.Constants;
+import org.eclipse.stem.util.analysis.views.EpidemicView;
+import org.eclipse.stem.util.analysis.views.EstimatorView;
+import org.eclipse.stem.util.analysis.views.LyapunovView;
+import org.eclipse.stem.util.analysis.views.ProcessorView;
+import org.eclipse.stem.util.analysis.views.ScenarioComparisonView;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+
+/**
+ * This class implements the "Analysis" perspective of STEM. This perspective is
+ * used to review and compare the results of different runs.
+ */
+public class Analysis implements IPerspectiveFactory {
+
+	/**
+	 * The identifier of the Designer Perspective
+	 */
+	public static final String ID_STEM_ANALYSIS_PERSPECTIVE = Constants.ID_ROOT
+			+ ".util.analysis.perspectives.STEMAnalysisPerspective"; //$NON-NLS-1$
+
+	/**
+	 * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui
+	 *      .IPageLayout)
+	 */
+	public void createInitialLayout(final IPageLayout layout) {
+		final String editorArea = layout.getEditorArea();
+
+		// We don't want to see the editor
+		layout.setEditorAreaVisible(false);
+		
+		// Put the STEM Analysis Views on top
+		final IFolderLayout top = layout.createFolder(
+				"top", IPageLayout.TOP, //$NON-NLS-1$
+				1.00f, editorArea);
+		
+		top.addView(ProcessorView.ID_Processor_VIEW);
+		top.addView(EstimatorView.ID_Estimator_VIEW);
+		top.addView(ScenarioComparisonView.ID_Comparison_VIEW);
+		top.addView(LyapunovView.ID_Lyapunov_VIEW);
+		top.addView(EpidemicView.ID_Aggregate_VIEW);
+		
+		// TODO fix hard coded ids
+		layout.addShowViewShortcut(ProcessorView.ID_Processor_VIEW);
+		layout.addShowViewShortcut(EstimatorView.ID_Estimator_VIEW);
+		layout.addShowViewShortcut(ScenarioComparisonView.ID_Comparison_VIEW);
+		layout.addShowViewShortcut(LyapunovView.ID_Lyapunov_VIEW);
+		layout.addShowViewShortcut(EpidemicView.ID_Aggregate_VIEW);
+		
+		//top.addView(ProjectExplorer.VIEW_ID);
+
+		// Put the Graphs View on the bottom with the Tasks View
+		// @SuppressWarnings("unused")
+		//		IFolderLayout bottom = layout.createFolder("bottom", //$NON-NLS-1$
+		// IPageLayout.BOTTOM, 0.66f, editorArea);
+
+		// We don't want to see the editor
+		layout.setEditorAreaVisible(false);
+
+		// Add the Analysis perspective to the "Open Perspective" menu
+		layout.addPerspectiveShortcut(ID_STEM_ANALYSIS_PERSPECTIVE);
+
+	} // createInitialLayout
+
+} // Analysis
\ No newline at end of file
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/utils/AggregateCSVFile.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/utils/AggregateCSVFile.java
new file mode 100644
index 0000000..7b473f5
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/utils/AggregateCSVFile.java
@@ -0,0 +1,97 @@
+package org.eclipse.stem.util.analysis.utils;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Utility that reads a STEM CSV file and generates another csv file containing 
+ * an aggregate column for all locations in the original file
+ */
+public class AggregateCSVFile {
+
+	/**
+	 * @param args
+	 */
+	@SuppressWarnings("boxing")
+	public static void main(String[] args) {
+		if(args.length == 0) {
+			System.err.println("Usage: AggregateCSVFile <csv file> <output file>\nOutput file is optional and if not specified the name will be generated from the input file.");
+			System.exit(-1);
+		}
+		
+		String cvsfilename = args[0];
+		String outfilename = null;
+		if(args.length == 1) outfilename = args[0]+"_aggregate.csv";
+		else outfilename= args[1];
+		
+		Map<Integer, Double>aggregate = new HashMap<Integer, Double>();
+		List<Integer> iteration = new ArrayList<Integer>();
+		List<String> time = new ArrayList<String>();
+		try {
+			 FileInputStream fis = new FileInputStream(cvsfilename); 
+		     BufferedReader d = new BufferedReader(new InputStreamReader(fis));
+		     String header = null;
+		     header=d.readLine();
+		     if(header == null) {
+		    	 System.err.println("Error, file is empty!");
+		    	 System.exit(-2);
+		     }
+		    String data = null; 
+		    while ( (data=d.readLine()) != null ) { 
+		    	StringTokenizer st = new StringTokenizer(data, ",");
+		    	int column = 0;
+		    	int it=0;
+				while (st.hasMoreTokens()) {
+					String val = st.nextToken().trim();
+					if(column == 0) {
+						it = Integer.parseInt(val);
+						iteration.add(it);
+					}
+					else if(column == 1) time.add(val);
+					else { // column > 1, location column
+						if(aggregate.containsKey(it)) 
+							aggregate.put(it, aggregate.get(it)+Double.parseDouble(val));
+						else aggregate.put(it, Double.parseDouble(val));
+					}
+				    ++ column;
+			     } // read tokens
+		    } //read iteration line
+		    
+		    d.close();
+		    // Write
+		    FileWriter fw = new FileWriter(outfilename);
+		    fw.write("iteration,time,aggregate\n"); // header
+		    int row = 0;
+		    for(int it:iteration) {
+		    	fw.write(it+",");
+		    	fw.write(time.get(row)+",");
+		    	fw.write(aggregate.get(it)+"\n");
+		    	++row;
+		    }
+		    fw.flush();
+		    fw.close();
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControl.java
new file mode 100644
index 0000000..73cb6d2
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControl.java
@@ -0,0 +1,261 @@
+// AnalysisControl
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.util.analysis.MonitorPreferences;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * AnalysisControl is a subclass of Canvas suitable for chart drawings.
+ */
+abstract public class AnalysisControl extends Composite  {
+	
+	/**
+	 * user preferences
+	 */
+	MonitorPreferences prefs = new MonitorPreferences();
+
+	protected static final String CLEAR_TEXT = "clear monitors";
+
+	protected Label simulationNameLabel;
+	
+	/**
+	 * Status text
+	 */
+	public static final String STATUS_TEXT = "status";
+	
+	protected static Map<String,Object> controlParametersMap = new HashMap<String,Object>();
+	
+	/** 
+	 * a string for setting user feedback messages
+	 */
+	protected String userMessage = "";
+	
+	/**
+	 * a label to display messages
+	 */
+	protected Label userMessageLabel = null;
+	
+
+
+	/**
+	 * button to trigger the analysis
+	 */
+	protected Button analyzeButton = null;
+
+	protected Button selectEstimatorButton = null;
+
+	
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<ISelectionChangedListener> listeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<IRemoveListener> removeListeners = new CopyOnWriteArrayList<IRemoveListener>();
+
+	
+
+	protected Label identifiableTitle;
+
+	/**
+	 * The width of the layout margin.
+	 */
+	protected static final int MARGIN_WIDTH = 5;
+
+	/**
+	 * The height of the layout margin.
+	 */
+	protected static final int MARGIN_HEIGHT = 5;
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public AnalysisControl(final Composite parent, final int style) {
+		super(parent, style);
+
+		this.addDisposeListener(new DisposeListener() {
+			/**
+			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+			 */
+			public void widgetDisposed(@SuppressWarnings("unused")
+			final DisposeEvent e) {
+				dispose();
+			}
+		});
+
+		final FormLayout layout = new FormLayout();
+		layout.marginHeight = MARGIN_HEIGHT;
+		layout.marginWidth = MARGIN_WIDTH;
+		setLayout(layout);
+
+	} // AnalysisControl
+
+	/**
+	 * @param parent
+	 *            the parent SWT control that this composite will be a child of
+	 * @return the SWT Composite to be displayed above the MapCanvas in the
+	 *         control
+	 */
+	protected Composite createTopComposite(final Composite parent) {
+		final Composite topComposite = new Composite(parent, SWT.NONE);
+
+		final FillLayout topCompositeLayout = new FillLayout(SWT.VERTICAL);
+		topComposite.setLayout(topCompositeLayout);
+
+		simulationNameLabel = new Label(topComposite, SWT.CENTER);
+		simulationNameLabel.setText("");
+
+		return topComposite;
+	} // createTopComposite
+	
+	/**
+	 * creates the AnalyzeButtonComposite and its composite container
+	 * @param control
+	 * @param the button label
+	 * @return the composite
+	 */
+	Composite getAnalyzeButtonComposite(AnalysisControl control, String label) {
+		Composite analyzeComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.HORIZONTAL;
+	    analyzeComposite.setLayout(fillLayout);
+	    Label leftLabel = new Label(analyzeComposite, SWT.NONE);
+	    leftLabel.setText(" ");// just a spacer
+	    analyzeButton = new Button(analyzeComposite, SWT.NONE);
+		analyzeButton.setText(label);
+		Label rightLabel = new Label(analyzeComposite, SWT.NONE);
+		rightLabel.setText(" ");// just a spacer
+	   
+	    return analyzeComposite;
+	}//getAnalyzeButtonComposite
+	
+
+
+	/**
+	 * 
+	 * @param folderName
+	 */
+	protected abstract void initializeHeader(String folderName);
+
+	
+	/**
+	 * All controllers must implement this 
+	 * to remove the control e.g. by a remove button event
+	 */
+	public abstract void remove() ;
+	
+	
+	
+	
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void addIRemoveListener(IRemoveListener listener) {
+		removeListeners.add(listener);
+	}
+	
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void removeIRemoveListener(IRemoveListener listener) {
+		removeListeners.remove(listener);
+	}
+	
+	/**
+	 * set of identifiablesToFit
+	 * @param identifiablesToFit
+	 */
+	public void fireRemoveEvent(Set<Identifiable> identifiablesToFit) {
+		for (final IRemoveListener listener : removeListeners) {
+			Iterator<Identifiable> iter = identifiablesToFit.iterator();
+			while((iter!=null)&&(iter.hasNext())) {
+				Identifiable ident = iter.next();
+				listener.identifiableRemoved(ident);
+			}
+			
+		} // for each ISelectionChangedListener
+	}
+
+	/**
+	 * get values for graphs as double array
+	 * @param chartIndex allows multiple charts in a view. Default is index=0 (one chart)
+	 * @param state
+	 * @return value array
+	 */
+	public abstract double[] getValues(int chartIndex, int state);
+	
+	/**
+	 * update the message text
+	 */
+	public void updateMessage() {
+		if(userMessageLabel!=null)	userMessageLabel.setText(userMessage);
+	}
+	
+	/**
+	 * update the message text
+	 * @param message 
+	 */
+	public void updateMessage(String message) {
+		userMessage = message;
+		if(userMessageLabel!=null)	userMessageLabel.setText(userMessage);
+	}
+	
+	/**
+	 * get the name of the time series for a given state
+	 * @param chartIndex  allows multiple charts in a view. Default is index=0 (one chart)
+	 * @param state
+	 * @return property name
+	 */
+    public abstract String getProperty(int chartIndex, int state);
+    
+
+    /**
+     * 
+     * @param chartIndex  allows multiple charts in a view. Default is index=0 (one chart)
+     * @return number of properties to plot
+     */
+    public abstract int getNumProperties(int chartIndex);
+    
+    /**
+	 * Each Control class may add objects to this map
+	 * @return the control parameters maps
+	 */
+	public abstract Map<String, Object> getControlParametersMap() ;
+	
+
+
+} // AnalysisControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControlFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControlFactory.java
new file mode 100644
index 0000000..4135647
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisControlFactory.java
@@ -0,0 +1,36 @@
+// AnalysisControlFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This interface is implemented by factories that create instances of
+ * {@link AnalysisControl}.
+ */
+public interface AnalysisControlFactory {
+
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName 
+	 * @return the AnalysisControl
+	 */
+	AnalysisControl create(final Composite parent, String dirName);
+
+	/**
+	 * @return TODO JFK
+	 */
+	public String getControlType();
+
+} // AnalysisControlFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisViewer.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisViewer.java
new file mode 100644
index 0000000..db7d649
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/AnalysisViewer.java
@@ -0,0 +1,221 @@
+// AnalysisViewer.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.ui.views.geographic.map.MapControl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * This class presents "views" of the running simulations.
+ */
+public class AnalysisViewer extends Viewer  {
+
+	
+	
+	private static final String URI_PREFIX = "/resources/data/scenario/disease/";
+	
+	
+
+	/**
+	 * This is the top-level control of the viewer. It contains the
+	 * {@link MapControl}s that display the current state of the
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+	 */
+	final Composite composite;
+
+	
+
+
+	
+
+	
+
+	// get the path
+	//private static final IPath PATH = Activator.getDefault().getStateLocation();
+
+	//private static final String sep = File.separator;
+	
+	//private static final String pathSuffix = "analysis"+sep;
+	
+	
+
+	/**
+	 * This factory is used to create instances of {@link AnalysisControl} in the
+	 * method {@link #populateView()}
+	 */
+	private final AnalysisControlFactory acf;
+
+	/**
+	 * @param parent
+	 *            the SWT parent of the control that makes up the viewer
+	 * @param acf
+	 *            the factory that creates instance of {@link AnalysisControl}
+	 */
+	public AnalysisViewer(final Composite parent, final AnalysisControlFactory acf) {
+
+		composite = new Composite(parent, SWT.NONE);
+		final FillLayout compositeLayout = new FillLayout(SWT.HORIZONTAL);
+		composite.setLayout(compositeLayout);
+
+		// Remember the factory that we'll use to create instances of
+		// AnalysisControl
+		this.acf = acf;
+		refresh();
+		composite.pack();
+		
+	} // AnalysisViewer
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getControl()
+	 */
+	@Override
+	public Control getControl() {
+		return composite;
+	} // getControl
+
+
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#refresh()
+	 */
+	@Override
+	public void refresh() {
+		populateView();
+	} // refresh
+
+	
+	
+	
+	/**
+	 * Create and dispose of MapControls as necessary to display the selected
+	 * Simulations.
+	 */
+	private void populateView() {
+		
+		
+		// problem here when we start up
+		// Are we done?
+		if (composite.isDisposed()) {
+			// Yes
+			return;
+		} // if
+
+	    String directory = "data directory here";
+		final AnalysisControl analysisControl = acf.create(
+				composite,
+				directory);
+	
+		analysisControl.addDisposeListener(new DisposeListener() {
+			/**
+			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+			 */
+			public void widgetDisposed(@SuppressWarnings("unused")
+			final DisposeEvent e) {
+				composite.layout(true, true);
+				composite.redraw();
+			}
+		});
+
+		composite.layout(true, true);
+		composite.redraw();
+	} // populateView
+	
+	
+	
+
+	
+
+	
+
+	
+	/**
+	 * Removes whitespace, ',', '.', etc.
+	 * @param s
+	 * @return a filtered string
+	 */
+	public static String nameFilter (String s) {
+		String s1 = s.trim();
+		s1 = s1.replace('"',' ');
+		s1 = s1.replaceAll(" ","");
+		s1 = s1.replace(',','_');
+		s1 = s1.replace('.','_');
+		s1 = s1.replaceAll("_","");
+		s = s1;
+		
+		return s;
+	}
+
+	
+	
+	
+
+	/**
+	 * filters the location id prefix from the beginning of
+	 *  a nodes ID for generation of a file name
+	 * @param unfiltered
+	 * @return the filtered file name using location id.
+	 */
+	public static String filterFilename(String unfiltered) {
+		int last = unfiltered.indexOf(URI_PREFIX);
+		if (last >=0) {
+			last += URI_PREFIX.length();
+			return unfiltered.substring(last, unfiltered.length());
+		} 
+		return unfiltered;
+
+	
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getInput()
+	 */
+	@Override
+	public Object getInput() {
+		// not used
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
+	 */
+	@Override
+	public void setInput(@SuppressWarnings("unused") Object input) {
+		// not used
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers.ISelection, boolean)
+	 */
+	@Override
+	public void setSelection(@SuppressWarnings("unused") ISelection selection, @SuppressWarnings("unused") boolean reveal) {
+		// not used
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getSelection()
+	 */
+	@Override
+	public ISelection getSelection() {
+		// not used
+		return null;
+	}
+
+	
+} // AnalysisViewer
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicControl.java
new file mode 100644
index 0000000..d6fa21e
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicControl.java
@@ -0,0 +1,835 @@
+// EstimatorControl.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl.ReferenceScenarioDataInstance;
+import org.eclipse.stem.analysis.util.CSVscenarioLoader;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.util.analysis.AggregateDataWriter;
+import org.eclipse.stem.util.analysis.ScenarioAnalysisSuite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * GUI for aggregate view
+ */
+public class EpidemicControl extends AnalysisControl {
+
+	
+	/**
+	 * used to identify user preferences for this class
+	 */
+	private static final String CONSUMER = "EPIDEMIC_CONTROL";
+	
+	/**
+	 * used to remember the aggregate directory in the user preferences
+	 */
+	private static final String AGGREGATE_FOLDER_KEY = CONSUMER+"_AGGREGATE";
+	
+	/**
+	 * used to remember the reference directory in the user preferences
+	 */
+	private static final String REFERENCE_FOLDER_KEY = CONSUMER+"_REFERENCE";
+	
+	/**
+	 * used to remember the incidence directory in the user preferences
+	 */
+	private static final String INCIDENCE_FOLDER_KEY = CONSUMER+"_INCIDENCE";
+
+	
+	/**
+	 * A label to report status (not yet used)
+	 */
+	static Label statusLabel;
+	
+	/**
+	 *  Label for current scenario folder
+	 */
+	static Label scenarioFolderLabel;
+	
+	
+	
+	/**
+	 * Label for aggregate file
+	 */
+	
+	static Label aggregateFileLabel;
+	
+	/**
+	 * Label for incidence file
+	 */
+	
+	static Label incidenceFileLabel;
+	
+	/**
+	 * Input text field for the scenario folder of data to aggregate
+	 */
+	public static Text aggregateDirtext;
+	
+	/**
+	 * Input text field for the reference scenario folder that filters the locations to aggregate
+	 */
+	public static Text referenceDirtext;
+	
+	
+	/**
+	 * Input text field for the aggregate data file
+	 */
+	public static Text filetextAggregate;
+	
+	/**
+	 * Input text field for the Incidence data file
+	 */
+	public static Text filetextIncidence;
+	
+	/**
+	 * alpha is the Immunity Loss Rate
+	 * TODO this needs to be set in the GUI
+	 */
+	protected static double alpha = 0.003;
+	/**
+	 * Time series canvas
+	 */
+	TimeSeriesCanvas aggregateDataCanvas;
+	
+	/**
+	 * New Incidence canvas
+	 */
+	TimeSeriesCanvas newIncidenceCanvas;
+	
+	/**
+     * possible states with parameters to fit
+     */
+	protected static final String[] incidenceStates = {"Incidence","deltaBirths","deltaDeaths"};
+	
+	// these are not y axis numeric data and should not be plotted in the aggregate plot
+	private static final String[] OMIT_LIST = {"time","#iteration","Incidence"};
+	
+	/**
+	 * Colors for the time series chart
+	 */
+	static final ColorDefinition foreGround = ColorDefinitionImpl.create(180, 0, 0);
+	static final ColorDefinition backgroundGround = ColorDefinitionImpl.create(255, 255, 225);
+	static final ColorDefinition frameColor = ColorDefinitionImpl.WHITE();
+	final Color white= this.getDisplay().getSystemColor(SWT.COLOR_WHITE);
+	final Color grey= this.getDisplay().getSystemColor(SWT.COLOR_GRAY);
+	
+	
+	
+	ScenarioAnalysisSuite analyzer = new ScenarioAnalysisSuite(this);
+	
+	private static String TITLE_TEXT = "Aggregate data view";
+	
+	/**
+	 * Store the aggregate data for the states
+	 */
+	public List<List<Double>> aggregateData = new ArrayList<List<Double>>();
+	
+	/**
+	 * Store the aggregate data for the states
+	 */
+	public List<List<Double>> incidenceData = new ArrayList<List<Double>>();
+	
+	/**
+	 * The identifier of each data List<Double> in the primary time series
+	 */
+	public List<String> primaryPropertiesToPlot = new ArrayList<String>();
+	
+	/**
+	 * The identifier of each data List<Double> in the secondary time series
+	 */
+	public List<String> secondaryPropertiesToPlot = new ArrayList<String>();
+	
+	/**
+	 * button to aggregate data
+	 */
+	private Button aggregateButton;
+	
+
+	
+	/**
+	 * checkbox to use a reference data set for filtering locations to aggregate
+	 */
+	protected Button useReferenceCheckbox;
+	
+	protected Button pickRefButton;
+	
+	
+	/**
+	 * button to plot the data
+	 */
+	private Button plotButton;
+	
+	/**
+	 * 
+	 * @param parent
+	 */
+	public EpidemicControl(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // EstimatorControl
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	void createContents() {
+		// Use form layout
+		setLayout(new FormLayout());
+
+		Display display = this.getDisplay();
+		
+		identifiableTitle = new Label(this, SWT.NONE);
+		identifiableTitle.setText(TITLE_TEXT);
+		//propertySelector = new PropertySelector(this, SWT.NONE);
+		
+		int bottom = 5;
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.bottom = new FormAttachment(bottom, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+		
+		Color labelBackground = new Color(display, new RGB(180, 180, 200));
+		
+		bottom += 5;
+		scenarioFolderLabel = new Label(this, SWT.BORDER);
+		scenarioFolderLabel.setBackground(labelBackground);
+		
+		scenarioFolderLabel.setText(Messages.getString("EPIVIEW.SCENARIOFOLDERLABEL"));
+
+		final FormData scenarioLabelFormData = new FormData();
+		scenarioFolderLabel.setLayoutData(scenarioLabelFormData);
+		scenarioLabelFormData.top = new FormAttachment(identifiableTitle, 0);
+		scenarioLabelFormData.bottom = new FormAttachment(bottom, 0);
+		scenarioLabelFormData.left = new FormAttachment(0, 0);
+		scenarioLabelFormData.right = new FormAttachment(15, 0);
+		
+		aggregateDirtext = new Text(this, SWT.BORDER);
+	    aggregateDirtext.setBounds(10, 10, 100, 20);
+	    String recentFolder = prefs.getRecentFolder(CONSUMER);
+	    if(recentFolder== null) {
+	    	recentFolder = ScenarioAnalysisSuite.REFERENCE_TESTING_DIRECTORY;
+	    }
+	    aggregateDirtext.setText(recentFolder);
+	    final FormData dirTextFormData = new FormData();
+	    aggregateDirtext.setLayoutData(dirTextFormData);
+	    dirTextFormData.top = new FormAttachment(identifiableTitle, 0);
+	    dirTextFormData.bottom = new FormAttachment(bottom, 0);
+	    dirTextFormData.left = new FormAttachment(scenarioFolderLabel, 0);
+	    dirTextFormData.right = new FormAttachment(80, 0);
+		
+	    Button pickDirButton = new Button(this, SWT.NONE);
+	    pickDirButton.setText(Messages.getString("EPIVIEW.SELECTDIR"));
+	    final FormData pickDirButtonFormData = new FormData();
+	    pickDirButtonFormData.top = new FormAttachment(identifiableTitle, 0);
+	    pickDirButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    pickDirButtonFormData.left = new FormAttachment(aggregateDirtext, 0);
+	    pickDirButtonFormData.right = new FormAttachment(100, 0);
+	    pickDirButton.setLayoutData(pickDirButtonFormData);
+	    pickDirButton.setEnabled(true);
+		
+	    final Shell shell = this.getShell();
+	    pickDirButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("EPIVIEW.SELECTSCENARIOFOLDER")); //$NON-NLS-1$
+					dd.setFilterPath(aggregateDirtext.getText());
+					final String selected = dd.open();
+					aggregateDirtext.setText(selected);
+			}
+		});
+	   
+	    
+	    //////////// REFERENCE FOLDER//////////
+	    /////////////////////
+	    
+	    bottom += 5;
+	    useReferenceCheckbox= new Button(this, SWT.CHECK);
+	    useReferenceCheckbox.setText(Messages.getString("EPIVIEW.REFERENCEFOLDERLABEL"));
+	    useReferenceCheckbox.setBackground(labelBackground);
+	    useReferenceCheckbox.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				if(useReferenceCheckbox.getSelection()) {
+					referenceDirtext.setBackground(white);
+					 String refFolder = prefs.getRecentFolder(REFERENCE_FOLDER_KEY);
+					    if(refFolder== null) {
+					    	refFolder = aggregateDirtext.getText();
+					    }
+					referenceDirtext.setText(refFolder);
+					pickRefButton.setEnabled(true);
+				} else {
+					referenceDirtext.setBackground(grey);
+					pickRefButton.setEnabled(false);
+				}
+			}
+		});
+
+		final FormData referenceLabelFormData = new FormData();
+		useReferenceCheckbox.setLayoutData(referenceLabelFormData);
+		referenceLabelFormData.top = new FormAttachment(scenarioFolderLabel, 0);
+		referenceLabelFormData.bottom = new FormAttachment(bottom, 0);
+		referenceLabelFormData.left = new FormAttachment(0, 0);
+		referenceLabelFormData.right = new FormAttachment(15, 0);
+		
+		referenceDirtext = new Text(this, SWT.BORDER);
+	    referenceDirtext.setBounds(10, 10, 100, 20);
+	    String refFolder = prefs.getRecentFolder(REFERENCE_FOLDER_KEY);
+	    if(refFolder== null) {
+	    	refFolder = recentFolder;
+	    }
+	 
+	    referenceDirtext.setText(refFolder);
+	    final FormData refDirTextFormData = new FormData();
+	    referenceDirtext.setLayoutData(refDirTextFormData);
+	    refDirTextFormData.top = new FormAttachment(scenarioFolderLabel, 0);
+	    refDirTextFormData.bottom = new FormAttachment(bottom, 0);
+	    refDirTextFormData.left = new FormAttachment(useReferenceCheckbox, 0);
+	    refDirTextFormData.right = new FormAttachment(80, 0);
+		
+	    pickRefButton = new Button(this, SWT.NONE);
+	    pickRefButton.setText(Messages.getString("EPIVIEW.SELECTDIR"));
+	    final FormData pickRefButtonFormData = new FormData();
+	    pickRefButtonFormData.top = new FormAttachment(scenarioFolderLabel, 0);
+	    pickRefButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    pickRefButtonFormData.left = new FormAttachment(referenceDirtext, 0);
+	    pickRefButtonFormData.right = new FormAttachment(100, 0);
+	    pickRefButton.setLayoutData(pickRefButtonFormData);
+	    pickRefButton.setEnabled(true);
+		
+	    pickRefButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("EPIVIEW.SELECTREFERENCEFOLDER")); //$NON-NLS-1$
+					dd.setFilterPath(referenceDirtext.getText());
+					final String selected = dd.open();
+					referenceDirtext.setText(selected);
+			}
+		});
+	  
+	    // default not selected
+	    useReferenceCheckbox.setSelection(false);
+	    referenceDirtext.setBackground(grey);
+		pickRefButton.setEnabled(false);
+		
+	    //////////// END REFERENCE FOLDER ////////
+	    
+	    bottom += 5;
+	    Composite aggregateComposite = getAggregateButtonComposite(this, Messages.getString("EPIVIEW.AGGREGATEDATA"));
+
+
+	    final FormData aggregateButtonFormData = new FormData();
+	    aggregateButtonFormData.top = new FormAttachment(useReferenceCheckbox, 0);
+	    aggregateButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    aggregateButtonFormData.left = new FormAttachment(0, 0);
+	    aggregateButtonFormData.right = new FormAttachment(100, 0);
+	    aggregateComposite.setLayoutData(aggregateButtonFormData);
+	    
+	    final ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(this.getShell());
+	    
+	    aggregateButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				String referenceDirectory = aggregateDirtext.getText();
+				
+				if(!analyzer.validate(referenceDirectory)) {
+					identifiableTitle.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+					updateMessage(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+					return;
+				}
+				updateMessage(ScenarioAnalysisSuite.WORKING_MSG);
+				String aggregateFilename = null;
+				String incidenceFilename = null;
+				try {
+					String[] dataFiles;
+					if(useReferenceCheckbox.getSelection()) {
+						dataFiles = analyzer.aggregateByFilter(referenceDirtext.getText(),aggregateDirtext.getText(), progressDialog, alpha);
+					} else {
+						dataFiles = analyzer.aggregateData(aggregateDirtext.getText(), progressDialog, alpha);
+					}
+					aggregateFilename = dataFiles[0];
+				    incidenceFilename = dataFiles[1];
+				    // valid so remember the preferences
+					prefs.setRecentFolder(CONSUMER,aggregateDirtext.getText());
+					prefs.setRecentFolder(REFERENCE_FOLDER_KEY,referenceDirtext.getText());
+					// remember the output files as well
+					prefs.setRecentFolder(AGGREGATE_FOLDER_KEY,aggregateFilename);
+					prefs.setRecentFolder(INCIDENCE_FOLDER_KEY,incidenceFilename);
+				} catch(ScenarioInitializationException sie) {
+					updateMessage(ScenarioAnalysisSuite.INVALID_DATA_MSG);
+					Activator.logError(sie.getMessage(), sie);
+				}
+				
+				filetextAggregate.setText(aggregateFilename);
+				filetextIncidence.setText(incidenceFilename);
+				updateMessage(ScenarioAnalysisSuite.READY_MSG);
+			}
+		});
+	    
+	    
+	    bottom += 5;
+		aggregateFileLabel = new Label(this, SWT.BORDER);
+		aggregateFileLabel.setBackground(labelBackground);
+		aggregateFileLabel.setText(Messages.getString("EPIVIEW.AGGFILELABEL"));
+		final FormData aggregateFileLabelFormData = new FormData();
+		aggregateFileLabel.setLayoutData(aggregateFileLabelFormData);
+		aggregateFileLabelFormData.top = new FormAttachment(aggregateComposite, 0);
+		aggregateFileLabelFormData.bottom = new FormAttachment(bottom, 0);
+		aggregateFileLabelFormData.left = new FormAttachment(0, 0);
+		aggregateFileLabelFormData.right = new FormAttachment(15, 0);
+		
+		filetextAggregate = new Text(this, SWT.BORDER);
+		filetextAggregate.setBounds(10, 10, 100, 20);
+		String aggregateDir=prefs.getRecentFolder(AGGREGATE_FOLDER_KEY);
+		filetextAggregate.setText(aggregateDir);
+	    final FormData fileTextAggregateFormData = new FormData();
+	    filetextAggregate.setLayoutData(fileTextAggregateFormData);
+	    fileTextAggregateFormData.top = new FormAttachment(aggregateComposite, 0);
+	    fileTextAggregateFormData.bottom = new FormAttachment(bottom, 0);
+	    fileTextAggregateFormData.left = new FormAttachment(aggregateFileLabel, 0);
+	    fileTextAggregateFormData.right = new FormAttachment(80, 0);
+	    
+	    //bottom += 5;
+	    incidenceFileLabel = new Label(this, SWT.BORDER);
+		incidenceFileLabel.setBackground(labelBackground);
+		incidenceFileLabel.setText(Messages.getString("EPIVIEW.INCFILELABEL"));
+		final FormData incidenceFileLabelFormData = new FormData();
+		incidenceFileLabel.setLayoutData(incidenceFileLabelFormData);
+		incidenceFileLabelFormData.top = new FormAttachment(aggregateFileLabel, 0);
+		incidenceFileLabelFormData.bottom = new FormAttachment(bottom+5, 0);
+		incidenceFileLabelFormData.left = new FormAttachment(0, 0);
+		incidenceFileLabelFormData.right = new FormAttachment(15, 0);
+	    
+	    filetextIncidence = new Text(this, SWT.BORDER);
+		filetextIncidence.setBounds(10, 10, 100, 20);
+		String incidenceDir=prefs.getRecentFolder(INCIDENCE_FOLDER_KEY);
+		filetextIncidence.setText(incidenceDir);
+	    final FormData fileTextIncidenceFormData = new FormData();
+	    filetextIncidence.setLayoutData(fileTextIncidenceFormData);
+	    fileTextIncidenceFormData.top = new FormAttachment(filetextAggregate, 0);
+	    fileTextIncidenceFormData.bottom = new FormAttachment(bottom+5, 0);
+	    fileTextIncidenceFormData.left = new FormAttachment(incidenceFileLabel, 0);
+	    fileTextIncidenceFormData.right = new FormAttachment(80, 0);
+		
+		
+	    Button pickAggregateFileButton = new Button(this, SWT.NONE);
+	    
+	    pickAggregateFileButton.setText(Messages.getString("EPIVIEW.SELECTAGGFILE"));
+	    final FormData pickAggregateFileButtonFormData = new FormData();
+	    pickAggregateFileButtonFormData.top = new FormAttachment(aggregateComposite, 0);
+	    pickAggregateFileButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    pickAggregateFileButtonFormData.left = new FormAttachment(filetextAggregate, 0);
+	    pickAggregateFileButtonFormData.right = new FormAttachment(100, 0);
+	    pickAggregateFileButton.setLayoutData(pickAggregateFileButtonFormData);
+	    pickAggregateFileButton.setEnabled(true);
+	    pickAggregateFileButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final FileDialog dd = new FileDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("EPIVIEW.SELECTAGGFILE"));
+					dd.setFilterPath(filetextAggregate.getText());
+					final String selected = dd.open();
+					filetextAggregate.setText(selected);
+			}
+		});
+	    
+	    bottom += 5;
+
+	    Button pickIncidenceFileButton = new Button(this, SWT.NONE);
+	    pickIncidenceFileButton.setText(Messages.getString("EPIVIEW.SELECTINCFILE"));
+	    final FormData pickIncidenceFileButtonFormData = new FormData();
+	    pickIncidenceFileButtonFormData.top = new FormAttachment(pickAggregateFileButton, 0);
+	    pickIncidenceFileButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    pickIncidenceFileButtonFormData.left = new FormAttachment(filetextIncidence, 0);
+	    pickIncidenceFileButtonFormData.right = new FormAttachment(100, 0);
+	    pickIncidenceFileButton.setLayoutData(pickIncidenceFileButtonFormData);
+	    pickIncidenceFileButton.setEnabled(true);
+	    pickIncidenceFileButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final FileDialog dd = new FileDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("EPIVIEW.SELECTINCFILE"));
+					dd.setFilterPath(filetextIncidence.getText());
+					final String selected = dd.open();
+					filetextIncidence.setText(selected);
+			}
+		});
+	    
+	    bottom += 5;
+	    Composite plotButtonComposite = getPlotButtonComposite(this, Messages.getString("EPIVIEW.PLOTTEXT"));
+	    
+	    final FormData plotButtonFormData = new FormData();
+	    plotButtonFormData.top = new FormAttachment(incidenceFileLabel, 0);
+	    plotButtonFormData.bottom = new FormAttachment(bottom, 0);
+	    plotButtonFormData.left = new FormAttachment(0, 0);
+	    plotButtonFormData.right = new FormAttachment(100, 0);
+	    plotButtonComposite.setLayoutData(plotButtonFormData);
+	 
+	    final EpidemicControl aCtrl = this;
+	    plotButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				
+				
+				/*
+				 * reinitialize the graph
+				 */
+				aggregateData.clear();
+				incidenceData.clear();
+				primaryPropertiesToPlot.clear();
+				secondaryPropertiesToPlot.clear();
+				aggregateDataCanvas.reset();
+				newIncidenceCanvas.reset();
+				
+				
+				// and plot again
+				CSVscenarioLoader loader = new CSVscenarioLoader();
+				ReferenceScenarioDataMapImpl aggregateMap = null;
+				try {
+					aggregateMap = loader.parseAggregateFile(filetextAggregate.getText());
+				} catch (ScenarioInitializationException e1) {
+					Activator.logError(e1.getMessage(), e1);
+				}
+				
+				for(String location : aggregateMap.getLocations()) {
+					ReferenceScenarioDataInstance instance = aggregateMap.getLocation(location);
+					Map<String, List<Double>> rawdata = instance.getData();
+			
+					String[] states = filterDisplayableStates(rawdata.keySet());
+					
+					Arrays.sort(states);
+					//TODO add selection method for states
+					for (int i = 0; i < states.length; i ++ ) {
+						if(rawdata.get(states[i])!=null) {
+							aggregateData.add(rawdata.get(states[i]));
+							primaryPropertiesToPlot.add(states[i]);
+						}
+					}
+					
+					aCtrl.aggregateDataCanvas.draw();
+				}// for all locations in aggregateMap (only one for aggregate data)
+				
+				
+				
+				
+				// and now plot the incidence data
+				
+				Map<String, List<String>> dataMap = null;
+				try {
+					dataMap = loader.processIncidenceFile(filetextIncidence.getText());
+				} catch (ScenarioInitializationException e1) {
+					Activator.logError(e1.getMessage(), e1);
+				}
+				
+					incidenceData = new ArrayList<List<Double>>();
+					
+					
+					
+					// validate and add data
+					for (int i = 0; i < incidenceStates.length; i ++ ) {
+						if(dataMap.get(incidenceStates[i])!=null) {
+							
+							List<Double> nextData = new ArrayList<Double>();
+							List<String> dataList = dataMap.get(incidenceStates[i]);
+							
+							for (int j = 0; j < dataList.size(); j ++) {
+								try {
+									Double dbl = new Double(dataList.get(j));
+									if (dbl!=null) nextData.add(dbl);
+								} catch(Exception eIgnore) {
+									// nothing if not double data we just don't use it.
+								}
+							}
+							if(nextData.size() >=1) incidenceData.add(nextData);
+							secondaryPropertiesToPlot.add(incidenceStates[i]);
+						}
+					}	
+					aCtrl.newIncidenceCanvas.draw();
+				
+			}
+		});
+	    
+		statusLabel = new Label(this, SWT.BORDER);
+		statusLabel.setBackground(labelBackground);
+		statusLabel.setText("");
+		
+		bottom += 5;
+		// Plot
+		
+		// aggregate time series data
+		aggregateDataCanvas = new TimeSeriesCanvas(this,
+				Messages.getString("EPIVIEW.AGGREGATELEGEND"),
+				Messages.getString("EPIVIEW.YAXIS"),
+				AggregateDataWriter.getKeyS(),
+				foreGround,
+				backgroundGround,
+				frameColor, 0);
+		
+		final FormData analysisChartFormData = new FormData();
+		aggregateDataCanvas.setLayoutData(analysisChartFormData);
+		analysisChartFormData.top = new FormAttachment(bottom, 0);
+		analysisChartFormData.bottom = new FormAttachment(100, 0);
+		analysisChartFormData.left = new FormAttachment(0, 0);
+		analysisChartFormData.right = new FormAttachment(50, 0);
+		
+		// new Incidence Canvas series data
+		newIncidenceCanvas = new TimeSeriesCanvas(this,
+				Messages.getString("INCVIEW.INCIDENCELEGEND"),
+				Messages.getString("INCVIEW.YAXIS"),
+				incidenceStates[0],
+				foreGround,
+				backgroundGround,
+				frameColor, 1);
+		
+		final FormData incidenceChartFormData = new FormData();
+		newIncidenceCanvas.setLayoutData(incidenceChartFormData);
+		incidenceChartFormData.top = new FormAttachment(bottom, 0);
+		incidenceChartFormData.bottom = new FormAttachment(100, 0);
+		incidenceChartFormData.left = new FormAttachment(50, 0);
+		incidenceChartFormData.right = new FormAttachment(100, 0);
+	
+	} // createContents
+	
+	/**
+	 * creates a Aggregate Button composite and its composite container
+	 * @param control
+	 * @param the Aggregate button label
+	 * @return the Aggregate composite
+	 */
+	Composite getAggregateButtonComposite(AnalysisControl control, String label) {
+		Composite aggregateComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.HORIZONTAL;
+	    aggregateComposite.setLayout(fillLayout);
+	    Label leftLabel = new Label(aggregateComposite, SWT.NONE);
+	    leftLabel.setText(" ");// just a spacer
+	    aggregateButton = new Button(aggregateComposite, SWT.NONE);
+	    aggregateButton .setText(label);
+		Label rightLabel = new Label(aggregateComposite, SWT.NONE);
+		rightLabel.setText(" ");// just a spacer
+		aggregateButton.setEnabled(true);
+	    return aggregateComposite;
+	}//getAggregateButtonComposite
+	
+	
+	
+	
+	/**
+	 * creates a PlotButton composite and its composite container
+	 * @param control
+	 * @param the plot button label
+	 * @return the composite
+	 */
+	Composite getPlotButtonComposite(AnalysisControl control, String label) {
+		Composite plotComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.HORIZONTAL;
+	    plotComposite.setLayout(fillLayout);
+	    userMessageLabel = new Label(plotComposite, SWT.NONE);
+	    userMessageLabel.setText(userMessage);// just a spacer
+	    plotButton = new Button(plotComposite, SWT.NONE);
+	    plotButton .setText(label);
+		Label rightLabel = new Label(plotComposite, SWT.NONE);
+		rightLabel.setText(" ");// just a spacer
+		plotButton.setEnabled(true);
+	    return plotComposite;
+	}//getPlotButtonComposite
+	
+	
+	/**
+	 * Enable or disable the analysis button
+	 * 
+	 * @param b
+	 */
+	
+	public void enableAnalysis(boolean b) {
+		if(b) this.analyzeButton.setEnabled(true);
+		else this.analyzeButton.setEnabled(false);
+	}
+	
+	
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	public void remove() {
+		
+		updateStatusLabel();
+	}
+
+	
+	
+
+	protected void updateStatusLabel() {
+		statusLabel.setText(AnalysisControl.STATUS_TEXT);
+	}
+	
+
+	/**
+	 * Initialize the header label
+	 * 
+	 * @param folderName
+	 */
+	@Override
+	protected void initializeHeader(String folderName) {
+		simulationNameLabel.setText("analyzing "+folderName);
+
+	} // initializeFromSimulation
+
+
+	
+	
+	
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+						
+		super.dispose();
+		
+	} // dispose
+
+	
+	/**
+	 * not used
+	 * @return null
+	 */
+	public Identifiable getIdentifiable() {
+		return null;
+	}
+
+	
+
+	/**
+	 * Returns the aggregate data
+	 * @param chartIndex 
+	 * @param state
+	 * @return Cumulative deviation from reference trajectory
+	 */
+	@Override
+	public double[] getValues(int chartIndex, int state) {
+		// pick the right data for the right chart
+		List<List<Double>> data = aggregateData;
+		if(chartIndex >= 1) data = incidenceData;
+		
+		double [] result = new double[data.get(state).size()];
+		int i=0;
+		for(double d:data.get(state))
+			result[i++]=d;
+		return result;
+	}
+	
+	/**
+	 * get the name of the data time series
+	 * @param chartIndex 
+	 * @param state
+	 * @return property name
+	 */
+	@Override
+	public String getProperty(int chartIndex,int state) {
+		// return the right property for the requested chart
+		if(chartIndex==0) {
+			return primaryPropertiesToPlot.get(state);
+		}
+		return secondaryPropertiesToPlot.get(state);			
+	}
+	
+	/**
+	 * returns the number of properties to plot
+	 * @param chartIndex 
+	 * @return the number of properties
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getNumProperties(int chartIndex)
+	 */
+	@Override
+	public int getNumProperties(int chartIndex) {
+		// return the right number of properties for the requested chart
+		if(chartIndex==0) {
+			return primaryPropertiesToPlot.size();
+		}
+		return secondaryPropertiesToPlot.size();	
+	}
+	
+	protected String[] filterDisplayableStates(Set<String> inputSet) {
+		
+		// remove non y-axis data items
+		for (int i = 0; i < OMIT_LIST.length; i ++) {
+			inputSet.remove(OMIT_LIST[i]);
+		}
+		
+		String[] retVal = new String[inputSet.size()];
+		int icount = 0;
+		Iterator<String> iter = inputSet.iterator();
+		while((iter!=null)&&(iter.hasNext())) {
+			String key = iter.next();
+			retVal[icount] = key;
+		    icount ++;	
+		}
+		Arrays.sort(retVal);
+		
+		return retVal;
+	}
+	
+	 /**
+	 * Each Control class may add objects to this map
+	 * @return the control parameters maps
+	 */
+	public Map<String, Object> getControlParametersMap() {
+		// add nothing for now
+		return controlParametersMap;
+	}
+	
+} // EstimatorControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicFactory.java
new file mode 100644
index 0000000..af7831b
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicFactory.java
@@ -0,0 +1,52 @@
+// EstimatorFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link AnalysisControl} instances.
+ */
+public class EpidemicFactory implements AnalysisControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static EpidemicFactory INSTANCE = new EpidemicFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String ANALYSIS_TYPE = "Aggregate";
+	
+
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @return new EstimatorControl()
+	 */
+	public AnalysisControl create(final Composite parent, String dirName) {
+				
+		return new EpidemicControl(parent);
+	}
+
+	/**
+	 * @return type of analysis
+	 * 
+	 */
+	public String getControlType() {
+		return ANALYSIS_TYPE;
+	}
+
+} // EstimatorFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicView.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicView.java
new file mode 100644
index 0000000..fed9c56
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EpidemicView.java
@@ -0,0 +1,65 @@
+// EstimatorView 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * The view provides a tool for analyzing aggregate data
+ */
+
+public class EpidemicView extends ViewPart {
+
+	/**
+	 * The identifier of the Aggregate View {@value}
+	 */
+	public static final String ID_Aggregate_VIEW = "org.eclipse.stem.util.analysis.views.aggregate"; //$NON-NLS-1$
+
+
+	private AnalysisViewer analysisViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+		analysisViewer = new AnalysisViewer(parent, EpidemicFactory.INSTANCE);
+		analysisViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(analysisViewer);
+	} // createPartControl
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // EstimatorView
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorCanvas.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorCanvas.java
new file mode 100644
index 0000000..ce19495
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorCanvas.java
@@ -0,0 +1,370 @@
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.Anchor;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ChartDimension;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.TextDataSet;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.BarSeries;
+import org.eclipse.birt.chart.model.type.impl.BarSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.stem.util.analysis.Activator;
+import org.eclipse.stem.util.analysis.Parameter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * TimeSeriesCanvas is a subclass of {@link Canvas} suitable for chart drawings.
+ */
+public class EstimatorCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	//private EstimatorControl control = null;
+	
+	static ColorDefinition[] barColors = {ColorDefinitionImpl.RED(),
+			ColorDefinitionImpl.BLUE(),
+			ColorDefinitionImpl.ORANGE(),
+			ColorDefinitionImpl.YELLOW(),
+			ColorDefinitionImpl.GREEN(),
+			ColorDefinitionImpl.PINK(),
+			ColorDefinitionImpl.BLACK() };
+
+	
+	/**
+	 * the chart title
+	 */
+	private static final String TITLE = "Estimated Parameters";
+	
+	/**
+	 * the legend
+	 */
+	private static final String VALUES = "Parameter Values";
+	private static final String VALUES_LOWER = "Value - Std.Dev.";
+	private static final String VALUES_HIGHER = "Value + Std.Dev.";
+	
+	private static final boolean SHOW_STD_DEV = false;
+	
+	
+	/**
+	 * Collection of values for the X-SERIES bar labels
+	 **/
+	private static Vector<String> xAxisParameterNames = new Vector<String>();
+	
+	/**
+	 * Collection of values for the Y-SERIES bars
+	 **/
+	private static ArrayList<Double> barValues = new ArrayList<Double>();
+	private static NumberDataSet barOrthoValues;
+
+	
+	/**
+	 * Collection of values for the Y-SERIES2 standard deviation lower and higher bars
+	 **/
+	private static ArrayList<Double> barStdDevLower = new ArrayList<Double>();
+	private static ArrayList<Double> barStdDevHigher = new ArrayList<Double>();
+	private static NumberDataSet barOrthoStdDevLower;
+	private static NumberDataSet barOrthoStdDevHigher
+	;
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	Image imgChart = null;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param parent
+	 *            the SWT parent of the {@link Widget}
+	 */
+	public EstimatorCanvas(final Composite parent) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		//control = (EstimatorControl) parent;
+
+		Vector<String> xAxisParameters = new Vector<String>();
+		xAxisParameters.add("beta");
+		xAxisParameters.add("alpha");
+		xAxisParameters.add("epsilon");
+		xAxisParameters.add("gamma");
+		
+		//Map<String,Double> initMap = ModelParameters;
+		//cm = createBarChart(initMap); 
+
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+				if(cm == null) return;
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+
+			} // paintControl
+		} // PaintListener
+
+		);
+
+	} // EstimatorCanvas constructor
+
+	/**
+	 * * creates the chart
+	 * @param barDataMap
+	 * @return a bar chart
+	 */
+	@SuppressWarnings("deprecation")
+	public static Chart createBarChart(Map<String,Parameter> barDataMap) {
+		// Reset everything
+		xAxisParameterNames.clear();
+		barValues.clear();
+		barStdDevLower.clear();
+		barStdDevHigher.clear();
+		
+		// BAR CHARTS ARE BASED ON CHARTS THAT CONTAIN AXES
+		ChartWithAxes cwaBar = ChartWithAxesImpl.create();
+		cwaBar.getBlock().setBackground(ColorDefinitionImpl.WHITE());
+		cwaBar.getBlock().getOutline().setVisible(true);
+		cwaBar.setDimension(ChartDimension.TWO_DIMENSIONAL_WITH_DEPTH_LITERAL);
+
+		// CUSTOMIZE THE PLOT
+		Plot p = cwaBar.getPlot();
+		p.getClientArea().setBackground(ColorDefinitionImpl.create(255, 255, 225));
+		p.getOutline().setVisible(false);
+		cwaBar.getTitle().getLabel().getCaption().setValue(TITLE);
+
+		// CUSTOMIZE THE LEGEND
+		Legend lg = cwaBar.getLegend();
+		lg.getText().getFont().setSize(16);
+		lg.getInsets().set(10, 5, 0, 0);
+		lg.setAnchor(Anchor.NORTH_LITERAL);
+
+		// CUSTOMIZE THE X-AXIS
+		Axis xAxisPrimary = cwaBar.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+		xAxisPrimary.getTitle().setVisible(false);
+
+		// CUSTOMIZE THE Y-AXIS
+		Axis yAxisPrimary = cwaBar.getPrimaryOrthogonalAxis(xAxisPrimary);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+		yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+		yAxisPrimary.getLabel().getCaption().getFont().setRotation(90);
+
+				
+		// populate from the map
+		Set<String> keySet = barDataMap.keySet();
+		String[] keys = new String[keySet.size()];
+		Iterator<String> iter = keySet.iterator();
+		int icount = 0;
+		while(iter.hasNext()) {
+			keys[icount] = iter.next();
+			icount ++;
+		}
+		Arrays.sort(keys);
+		for (int i = 0; i < keys.length; i++) {
+			String paramName = keys[i];
+			xAxisParameterNames.add(paramName);
+			Double dValue = new Double(barDataMap.get(paramName).value);
+			
+			barStdDevLower.add(dValue);
+			barValues.add(dValue);
+			barStdDevHigher.add(dValue);
+		}
+		
+		TextDataSet categoryValues = TextDataSetImpl.create(xAxisParameterNames);
+
+		barOrthoValues = NumberDataSetImpl.create(barValues);
+		barOrthoStdDevLower = NumberDataSetImpl.create(barStdDevLower);
+		barOrthoStdDevHigher = NumberDataSetImpl.create(barStdDevHigher);
+
+		// CREATE THE CATEGORY BASE SERIES
+		Series seCategory = SeriesImpl.create();
+		seCategory.setDataSet(categoryValues);
+		
+		// Create the first series of dataValues the ORTHOGONAL Value-Statndard deviations LOWER SERIES
+		BarSeries bsLower = (BarSeries) BarSeriesImpl.create();
+		bsLower.setSeriesIdentifier(VALUES_LOWER);
+		bsLower.setDataSet(barOrthoStdDevLower);
+		bsLower.setRiserOutline(null);
+		bsLower.getLabel().setVisible(true);
+		bsLower.setLabelPosition(Position.INSIDE_LITERAL);
+
+		// Create the Values series of dataValues the ORTHOGONAL SERIES
+		BarSeries bsValues = (BarSeries) BarSeriesImpl.create();
+		bsValues.setSeriesIdentifier(VALUES);
+		bsValues.setDataSet(barOrthoValues);
+		bsValues.setRiserOutline(null);
+		bsValues.getLabel().setVisible(true);
+		bsValues.setLabelPosition(Position.INSIDE_LITERAL);
+		
+		// Create the THIRD series of dataValues the ORTHOGONAL Value+StdDev HIGHER SERIES
+		BarSeries bsHigher = (BarSeries) BarSeriesImpl.create();
+		bsHigher.setSeriesIdentifier(VALUES_HIGHER);
+		bsHigher.setDataSet(barOrthoStdDevHigher);
+		bsHigher.setRiserOutline(null);
+		bsHigher.getLabel().setVisible(true);
+		bsHigher.setLabelPosition(Position.INSIDE_LITERAL);
+
+		// WRAP THE BASE SERIES IN THE X-AXIS SERIES DEFINITION
+		SeriesDefinition sdX = SeriesDefinitionImpl.create();
+		sdX.getSeriesPalette().update(0); // SET THE COLORS IN THE PALETTE
+		xAxisPrimary.getSeriesDefinitions().add(sdX);
+		sdX.getSeries().add(seCategory);
+
+		if (SHOW_STD_DEV) {
+			// One THE ORTHOGONAL VALUES-STD-DEV lower SERIES For the Y-AXIS SERIES DEFINITION
+			SeriesDefinition sdYlower = SeriesDefinitionImpl.create();
+			sdYlower.getSeriesPalette().update(1); // SET THE COLOR IN THE PALETTE
+			yAxisPrimary.getSeriesDefinitions().add(sdYlower);
+			sdYlower.getSeries().add(bsLower);
+		}
+		
+		
+		// Two THE ORTHOGONAL VALUES SERIES For the Y-AXIS SERIES DEFINITION
+		SeriesDefinition sdY1 = SeriesDefinitionImpl.create();
+		sdY1.getSeriesPalette().update(1); // SET THE COLOR IN THE PALETTE
+		yAxisPrimary.getSeriesDefinitions().add(sdY1);
+		sdY1.getSeries().add(bsValues);
+		
+		if (SHOW_STD_DEV) {
+			// Three THE ORTHOGONAL VALUES+STDDEV Higher SERIES For the Y-AXIS SERIES DEFINITION
+			SeriesDefinition sdYHigher = SeriesDefinitionImpl.create();
+			sdYHigher.getSeriesPalette().update(1); // SET THE COLOR IN THE PALETTE
+			yAxisPrimary.getSeriesDefinitions().add(sdYHigher);
+			sdYHigher.getSeries().add(bsHigher);
+		}
+		
+		
+		return cwaBar;
+
+	}// createBarChart
+	
+	/**
+	 * refreshes (some of) the data in the bar chart by key values
+	 * @param barDataMap All parameters
+	 */
+	public static void refresh(Map<String,Parameter> barDataMap) {
+		Iterator<String> iter = barDataMap.keySet().iterator();
+		while(iter.hasNext()) {
+			String key = iter.next();
+			int icount = xAxisParameterNames.indexOf(key);
+			if (icount >= 0) {
+				double value = barDataMap.get(key).value;
+				
+				// and the higher/lower values
+				double deviation = barDataMap.get(key).stddev;
+				Double lower = new Double(value-deviation);
+				Double higher = new Double(value + deviation);
+				
+				barValues.set(icount,new Double(value));
+				barStdDevLower.set(icount,lower);
+				barStdDevHigher.set(icount,higher);
+			}
+			
+		}// while have keys
+	}// refresh
+	
+	/**
+	 * The method which gets the {@link EstimatorCanvas}' reports list, and
+	 * draws it on the {@link EstimatorCanvas}.
+	 * @param barDataMap Parameter map
+	 * 
+	 */
+	public void draw(Map<String,Parameter> barDataMap) {
+		cm = EstimatorCanvas.createBarChart(barDataMap);
+		//refresh(barDataMap);
+
+		if (!this.isDisposed()) {
+			redraw();
+		}
+	} // paintControl
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	
+} // TimeSeriesCanvas
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorControl.java
new file mode 100644
index 0000000..182b3fb
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorControl.java
@@ -0,0 +1,1098 @@
+// EstimatorControl.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.util.CSVscenarioLoader;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.definitions.Activator;
+import org.eclipse.stem.util.analysis.AggregateDataWriter;
+import org.eclipse.stem.util.analysis.ModelParameters;
+import org.eclipse.stem.util.analysis.ParameterEstimatorMethod;
+import org.eclipse.stem.util.analysis.ScenarioAnalysisSuite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a SWT GUI component that uses BIRT to plot
+ */
+public class EstimatorControl extends AnalysisControl {
+	
+	
+	
+	/**
+	 * keep the recent folder name
+	 */
+	String recentFolder;
+	
+	/**
+	 * used to identify user preferences for this class
+	 */
+	private static final String CONSUMER = "ESTIMATOR_CONTROL";
+
+	
+	/**
+	 *  Label for current scenario folder
+	 */
+	static Label scenarioFolderLabel;
+	
+	/**
+	 *  Label for current parameter estimator
+	 */
+	
+	static Label estimatorFolderLabel;
+	/**
+	 * Input text field for the scenario folder of data to use in making the estimation
+	 */
+	public static Text text1;
+	
+	/**
+	 * Text displaying the currently selected parameter estimator
+	 */
+	
+	public static Text estimatorText;
+	
+	/**
+	 * A label to report status (not yet used)
+	 */
+	static Label statusLabel;
+	
+	/**
+	 * Radio buttons for fit then average or sum over location then
+	 */
+	public static Button[] dataAverageRadioButtons = new Button[2];
+		
+	/**
+	 * Radio buttons for frequency vs density dependent beta
+	 */
+	public static Button[] betaModeRadioButtons = new Button[2];
+	
+	/**
+	 * three decimal places
+	 */
+	private static final int SPINNER_RESOLUTION = 1000;
+	
+	/**
+	 * 0.001
+	 */
+	private static final int SPINNER_INCREMENT = 1;
+	
+	
+	/** min S threshold for analysis */
+	protected static Spinner minThresholdSpinnerS;
+	/** max S threshold for analysis */
+	protected static Spinner maxThresholdSpinnerS;
+	/** S spinner label */
+	static Label minSpinnerLabelS;
+	/** S spinner label */
+	static Label maxSpinnerLabelS;
+	
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MIN_S_KEY = "MINS";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MIN_E_KEY = "MINE";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MIN_I_KEY = "MINI";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MIN_R_KEY = "MINR";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MAX_S_KEY = "MAXS";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MAX_E_KEY = "MAXE";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MAX_I_KEY = "MAXI";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String MAX_R_KEY = "MAXR";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String SUM_LOCATIONS_KEY = "SUM_LOCATIONS";
+	/**
+	 * keys for finding control parameters from the map
+	 */
+	public static final String FREQ_MODE_KEY = "FREQ_MODE";
+	
+	/** Region Selector Combo box **/
+	protected static Combo displayRegionCombo;
+	protected static String regionToDisplay = "";
+	
+	/** min E threshold for analysis */
+	protected static Spinner minThresholdSpinnerE;
+	/** max E threshold for analysis */
+	protected static Spinner maxThresholdSpinnerE;
+	/** E spinner label */
+	static Label minSpinnerLabelE;
+	/** E spinner label */
+	static Label maxSpinnerLabelE;
+	
+	/** min I threshold for analysis */
+	protected static Spinner minThresholdSpinnerI;
+	/** max I threshold for analysis */
+	protected static Spinner maxThresholdSpinnerI;
+	/** I spinner label */
+	static Label minSpinnerLabelI;
+	/** ( spinner label */
+	static Label maxSpinnerLabelI;
+	
+	/** min R threshold for analysis */
+	protected static Spinner minThresholdSpinnerR;
+	/** max R threshold for analysis */
+	protected static Spinner maxThresholdSpinnerR;	
+	/** R spinner label */
+	static Label minSpinnerLabelR;
+	/** R spinner label */
+	static Label maxSpinnerLabelR;
+	
+	
+	
+	/**
+	 * The results and data that go into making an estimate
+	 */
+	static ModelParameters averageParms;
+	
+
+	/**
+	 * Folder to contain the analysis graphs
+	 * 
+	 */
+	static TabFolder tabFolder;
+
+	/**
+	 * the chart of results
+	 */
+	static EstimatorCanvas estimatorCanvas;
+	
+	/**
+	 * Colors for the time series chart
+	 */
+	static final ColorDefinition foreGround = ColorDefinitionImpl.create(180, 0, 0);
+	static final ColorDefinition backgroundGround = ColorDefinitionImpl.create(255, 255, 225);
+	static final ColorDefinition frameColor = ColorDefinitionImpl.WHITE();
+	
+	/**
+	 * For now we will always set up for four of these
+	 * we will use 2-4 depending on the type of model (SI,SIR, SEIR, etc).
+	 */
+	protected static TimeSeriesCanvas[] equationSeries = new TimeSeriesCanvas[4];
+	
+	/**
+	 * For now we will always set up for four of these
+	 * we will use 2-4 depending on the type of model (SI,SIR, SEIR, etc).
+	 */
+	protected static XYSeriesCanvas[] regressionSeries = new XYSeriesCanvas[4];
+	
+	/**
+	 * Wizard for selecting a new parameter estimator
+	 */
+	
+	static ParameterEstimatorWizard parameterEstimatorWizard;
+	
+	/**
+	 * The dialog for the wizard
+	 */
+	static WizardDialog wizardDialog;	
+	protected static ScenarioAnalysisSuite analyzer;
+	
+	//PropertySelector propertySelector;
+	List<ItemPropertyDescriptor> selectedProperties;
+
+	/**
+	 * 
+	 * @param parent
+	 */
+	public EstimatorControl(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // EstimatorControl
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	void createContents() {
+		
+		analyzer = new ScenarioAnalysisSuite(this);
+		
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		identifiableTitle.setText(Messages.getString("EST.TITLE"));
+		//propertySelector = new PropertySelector(this, SWT.NONE);
+		Display display = this.getDisplay();
+		
+		Color labelBackground = new Color(display, new RGB(180, 180, 200));
+		
+		statusLabel = new Label(this, SWT.BORDER);
+		statusLabel.setBackground(labelBackground);
+		statusLabel.setText("");
+		
+		scenarioFolderLabel = new Label(this, SWT.BORDER);
+		scenarioFolderLabel.setBackground(labelBackground);
+		scenarioFolderLabel.setText(Messages.getString("EST.SCFOLDER"));
+		
+		estimatorFolderLabel = new Label(this, SWT.BORDER);
+		estimatorFolderLabel.setBackground(labelBackground);
+		estimatorFolderLabel.setText(Messages.getString("EST.PARAMESTIMATOR"));
+		
+		text1 = new Text(this, SWT.BORDER);
+	    text1.setBounds(10, 10, 100, 20);
+	    
+	    recentFolder = prefs.getRecentFolder(CONSUMER);
+	    if(recentFolder== null) {
+	    	recentFolder = ScenarioAnalysisSuite.REFERENCE_TESTING_DIRECTORY;
+	    }
+	    text1.setText(recentFolder);
+		  
+	    String estimatorMethod = prefs.getRecentEstimatorMethod();
+	    estimatorText = new Text(this, SWT.BORDER);
+	    estimatorText.setBounds(10, 10, 100, 20);
+	    if(estimatorMethod != null) estimatorText.setText(estimatorMethod);
+	    else estimatorText.setText("");
+	    
+	    selectEstimatorButton = new Button(this, SWT.NONE);
+	    selectEstimatorButton.setText(Messages.getString("EST.SELECTESTIMATOR"));
+	    
+	    ///////////////////////////////////////////////////////////////
+	    //
+	    //  components for user interaction with fitting algorithm
+	    //
+	    //////////////////////////////////////////////////////////////
+	    Composite displayComposite = getRegionSelectorComboComposite(this);
+	    Composite radioComposite = getDataAvgRadioButtonsComposite(this);
+	    Composite spinnerComposite = getSpinnerComposite(this);
+	    Composite betaModeComposite = getbetaModeRadioButtonsComposite(this);
+	    Composite doEstimationComposite = getAnalyzeButtonComposite(this,Messages.getString("EST.ESTIMATE"));
+		
+		
+		tabFolder = new TabFolder (this, SWT.NONE);
+		// results	
+		TabItem item0 = new TabItem(tabFolder, SWT.BORDER);
+		item0.setText(Messages.getString("EST.RESULTS"));
+		estimatorCanvas = new EstimatorCanvas(tabFolder);
+		item0.setControl(estimatorCanvas);
+		
+		// data
+		TabItem item1 = new TabItem (tabFolder, SWT.NULL);
+		item1.setText (Messages.getString("EST.INPUTDATA"));
+		Composite dataComposite = new Composite(tabFolder, SWT.BORDER);
+    	GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 2;
+ 		dataComposite.setLayout(new FormLayout());
+ 		item1.setControl(dataComposite);
+ 		// set up the four data time series inside the dataComposite
+ 		getEquationSeriesCharts(dataComposite); 
+ 		
+		// regression Charts go *** here ***
+		TabItem item2 = new TabItem (tabFolder, SWT.NULL);
+		item2.setText (Messages.getString("EST.REGRESSION"));
+		Composite regressionComposite = new Composite(tabFolder, SWT.BORDER);
+    	regressionComposite.setLayout(new FormLayout());
+ 		item2.setControl(regressionComposite);
+ 	    // set up the four regression XY series plots inside the dataComposite
+ 		getRegressionSeriesCharts(regressionComposite); 
+		
+		
+		// FOrm data
+		int bottom = 5;
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.bottom = new FormAttachment(bottom, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		// TextField folder label
+		bottom += 5;
+		final FormData scenarioFolderLabelFormData = new FormData();
+		scenarioFolderLabelFormData.top = new FormAttachment(identifiableTitle, 0);
+		scenarioFolderLabelFormData.bottom = new FormAttachment(bottom, 0);
+		scenarioFolderLabelFormData.left = new FormAttachment(0, 0);
+		scenarioFolderLabelFormData.right = new FormAttachment(15, 0);
+		scenarioFolderLabel.setLayoutData(scenarioFolderLabelFormData);
+		
+		
+		// first text field for parameter Estimator
+		final FormData text1FormData = new FormData();
+		text1FormData.top = new FormAttachment(identifiableTitle, 0);
+		text1FormData.bottom = new FormAttachment(bottom, 0);
+		text1FormData.left = new FormAttachment(scenarioFolderLabel, 0);
+		text1FormData.right = new FormAttachment(80, 0);
+		text1.setLayoutData(text1FormData);
+		text1.setEditable(false); // Can only be selected through wizard
+			
+		final FormData selectEstimatorButtonFormData = new FormData();		
+		selectEstimatorButtonFormData.top = new FormAttachment(identifiableTitle, 0);
+		selectEstimatorButtonFormData.bottom = new FormAttachment(bottom, 0);
+		selectEstimatorButtonFormData.left = new FormAttachment(text1, 0);
+		selectEstimatorButtonFormData.right = new FormAttachment(100, 0);
+		selectEstimatorButton.setLayoutData(selectEstimatorButtonFormData);
+
+		bottom += 5;
+		final FormData estimatorLabelFormData = new FormData();
+		estimatorLabelFormData.top = new FormAttachment(scenarioFolderLabel, 0);
+		estimatorLabelFormData.bottom = new FormAttachment(bottom, 0);
+		estimatorLabelFormData.left = new FormAttachment(0, 0);
+		estimatorLabelFormData.right = new FormAttachment(15, 0);
+		estimatorFolderLabel.setLayoutData(estimatorLabelFormData);
+		
+		
+		// first text field for parameter Estimator
+		final FormData estimatorTextFormData = new FormData();
+		estimatorTextFormData.top = new FormAttachment(scenarioFolderLabel, 0);
+		estimatorTextFormData.bottom = new FormAttachment(bottom, 0);
+		estimatorTextFormData.left = new FormAttachment(scenarioFolderLabel, 0);
+		estimatorTextFormData.right = new FormAttachment(100, 0);
+		estimatorText.setLayoutData(estimatorTextFormData);
+		estimatorText.setEditable(false); // Can only be selected through wizard
+		
+		int top = bottom;
+		bottom += 10;
+		
+		// Display regionSelectorCombo
+		final FormData displayComboCompositeFormData = new FormData();
+		displayComboCompositeFormData.top = new FormAttachment(estimatorText, 0);
+		displayComboCompositeFormData.bottom = new FormAttachment(bottom, 0);
+		displayComboCompositeFormData.left = new FormAttachment(5,0);
+		displayComboCompositeFormData.right = new FormAttachment(24, 0);
+		displayComposite.setLayoutData(displayComboCompositeFormData);
+		
+		
+		// beta mode Composite
+		final FormData betaModeRadioCompositeFormData = new FormData();
+		betaModeRadioCompositeFormData.top = new FormAttachment(estimatorText, 0);
+		betaModeRadioCompositeFormData.bottom = new FormAttachment(bottom, 0);
+		betaModeRadioCompositeFormData.left = new FormAttachment(25,0);
+		betaModeRadioCompositeFormData.right = new FormAttachment(39, 0);
+		betaModeComposite.setLayoutData(betaModeRadioCompositeFormData);
+		
+		// radio buttons Composite
+		final FormData radioCompositeFormData = new FormData();
+		radioCompositeFormData.top = new FormAttachment(estimatorText, 0);
+		radioCompositeFormData.bottom = new FormAttachment(bottom, 0);
+		radioCompositeFormData.left = new FormAttachment(40, 0);
+		radioCompositeFormData.right = new FormAttachment(61,0);
+		radioComposite.setLayoutData(radioCompositeFormData);
+		
+		// Spinner Composite 
+		final FormData spinnerFormData = new FormData();
+		spinnerFormData.top = new FormAttachment(top, 0);
+		spinnerFormData.bottom = new FormAttachment(bottom, 0);
+		spinnerFormData.left = new FormAttachment(62, 0);
+		spinnerFormData.right = new FormAttachment(100, 0);
+		spinnerComposite.setLayoutData(spinnerFormData);
+		
+		top = bottom;
+		// Analyze button
+		bottom += 5;
+		final FormData analysisButtonFormData = new FormData();
+		analysisButtonFormData.top = new FormAttachment(radioComposite, 0);
+		analysisButtonFormData.bottom = new FormAttachment(bottom, 0);
+		analysisButtonFormData.left = new FormAttachment(0, 0);
+		analysisButtonFormData.right = new FormAttachment(100, 0);
+		doEstimationComposite.setLayoutData(analysisButtonFormData);
+		if(recentFolder != null && estimatorMethod != null)
+			analyzeButton.setEnabled(true);
+		else analyzeButton.setEnabled(false);
+		
+		// Results Graph
+		bottom += 40;
+		
+		final FormData tabFormData = new FormData();
+		tabFolder.setLayoutData(tabFormData);
+		tabFormData.top = new FormAttachment(doEstimationComposite, 0);
+		tabFormData.bottom = new FormAttachment(100, 0);
+		tabFormData.left = new FormAttachment(0, 0);
+		tabFormData.right = new FormAttachment(100, 0);
+		
+		final Shell shell = this.getShell();
+		final EstimatorControl eControl = this;
+		selectEstimatorButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(@SuppressWarnings("unused")
+					final SelectionEvent e) {
+				String dir = null;
+				if(parameterEstimatorWizard != null)
+					dir = parameterEstimatorWizard.selectFolderPage.getDirName();
+				else dir = recentFolder;
+				parameterEstimatorWizard = new ParameterEstimatorWizard(eControl, dir);
+				
+				//parameterEstimatorWizard.init(selectEstimatorButton.);
+			    //this.
+				// Instantiates the wizard container with the wizard and opens it
+				wizardDialog = new WizardDialog(shell, parameterEstimatorWizard);
+				wizardDialog.create();
+				eControl.analyzeButton.setEnabled(false);
+				EstimatorControl.estimatorText.setText("");
+			    wizardDialog.open();				
+			}
+		});
+		final ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(this.getShell());
+		
+		analyzeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+
+				recentFolder = text1.getText();
+				String methodtxt = estimatorText.getText();
+				identifiableTitle.setText(Messages.getString("EST.TITLE"));
+				
+				/*
+				 * VALIDATE the text input Fields
+				 */
+				if(!analyzer.validate(recentFolder)) {
+					identifiableTitle.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+					text1.setText("");
+					return;
+				} 
+				// else valid so remember the preferences
+				prefs.setRecentFolder(CONSUMER,recentFolder);
+				prefs.setEstimatorMethod(methodtxt);
+				
+				ReferenceScenarioDataMapImpl dataMap;
+				ParameterEstimatorMethod method;
+			
+				if(parameterEstimatorWizard != null) {
+					dataMap = parameterEstimatorWizard.getReferenceScenarioDataMap();
+					method = parameterEstimatorWizard.getParameterEstimatorMethod();
+				} else {
+					// We haven't gone through the wizard and loaded data yet, but
+					// assuming the folder and the method is set we can load the data here
+					try {
+						CSVscenarioLoader loader = new CSVscenarioLoader(recentFolder);
+						// Pick the highest resolution available
+						int maxResolution = loader.getMaxResolution();
+						dataMap = loader.parseAllFiles(maxResolution);
+						method = ParameterEstimatorMethod.valueOf(methodtxt);
+					} catch(Exception ex) {
+						Activator.logError(ex.getMessage(), ex);
+						return;
+					}
+				}
+				
+				//String comparisonDirectory = ScenarioAnalysisSuite.COMPARISON_TESTING_DIRECTORY;
+				averageParms = analyzer.estimateParameters(
+						dataMap,
+						method, 
+						progressDialog
+						);
+				
+				String[] displayableRegions = averageParms.getDataLocations();
+				
+				displayRegionCombo.setItems (displayableRegions);
+				displayRegionCombo.select(0);
+				regionToDisplay = displayableRegions[0];
+						
+				
+			
+				updateCharts();
+			
+			}
+		});
+		
+		
+		maxThresholdSpinnerS.addSelectionListener(new SelectionAdapter() {
+		      public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {
+		        int max = maxThresholdSpinnerS.getSelection();
+		        int min = minThresholdSpinnerS.getSelection();
+		        int minThresh = max-SPINNER_INCREMENT;
+		        int maxThresh = min+SPINNER_INCREMENT;
+		       
+		        maxThresholdSpinnerS.setMinimum(maxThresh);
+		        minThresholdSpinnerS.setMaximum(minThresh);  
+		      }
+		    });// maxThresholdSpinnerS
+		
+		minThresholdSpinnerS.addSelectionListener(new SelectionAdapter() {
+		      public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {  
+		        int max = maxThresholdSpinnerS.getSelection();
+		        int min = minThresholdSpinnerS.getSelection();
+		        int minThresh = max-SPINNER_INCREMENT;
+		        int maxThresh = min+SPINNER_INCREMENT;
+		      
+		        maxThresholdSpinnerS.setMinimum(maxThresh);
+		        minThresholdSpinnerS.setMaximum(minThresh);  
+		      }
+		    });// maxThresholdSpinnerS
+		
+	} // createContents
+	
+	/**
+	 * creates the dataAverageRadioButtons and their composite container
+	 * @param control
+	 * @return the composite
+	 */
+	Composite getDataAvgRadioButtonsComposite(EstimatorControl control) {
+		Composite radioComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.VERTICAL;
+	    radioComposite.setLayout(fillLayout);
+	    
+	    dataAverageRadioButtons[0] = new Button(radioComposite, SWT.RADIO);
+	    dataAverageRadioButtons[0].setSelection(true);
+	    dataAverageRadioButtons[0].setText(Messages.getString("EST.CHOICE1"));
+	    dataAverageRadioButtons[0].setBounds(10, 5, 75, 30);
+
+	    dataAverageRadioButtons[1] = new Button(radioComposite, SWT.RADIO);
+	    dataAverageRadioButtons[1].setText(Messages.getString("EST.CHOICE2"));
+	    dataAverageRadioButtons[1].setBounds(10, 30, 75, 30);
+	    	    
+	    return radioComposite;
+	}//getDataAvgRadioButtonsComposite
+	
+
+	/**
+	 * creates the betaModeRadioButtons and their composite container
+	 * @param control
+	 * @return the composite
+	 */
+	Composite getbetaModeRadioButtonsComposite(EstimatorControl control) {
+		Composite radioComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.VERTICAL;
+	    radioComposite.setLayout(fillLayout);
+	    
+	    betaModeRadioButtons[0] = new Button(radioComposite, SWT.RADIO);
+	    betaModeRadioButtons[0].setSelection(true);
+	    betaModeRadioButtons[0].setText(Messages.getString("EST.FREQBETA"));
+	    betaModeRadioButtons[0].setBounds(10, 5, 75, 30);
+
+	    betaModeRadioButtons[1] = new Button(radioComposite, SWT.RADIO);
+	    betaModeRadioButtons[1].setText(Messages.getString("EST.DENSITYBETA"));
+	    betaModeRadioButtons[1].setBounds(10, 30, 75, 30);
+	    return radioComposite;
+	}//getbetaModeRadioButtonsComposite
+	
+	
+	
+	/**
+	 * creates the regionSelector combo box and its composite container
+	 * @param control
+	 * @return the composite
+	 */
+	Composite getRegionSelectorComboComposite(EstimatorControl control) {
+		Composite comboComposite = new Composite(control, SWT.BORDER);
+	    FillLayout fillLayout = new FillLayout();
+	    fillLayout.type = SWT.VERTICAL;
+	    comboComposite.setLayout(fillLayout);
+	    
+		displayRegionCombo = new Combo (comboComposite, SWT.READ_ONLY);
+		displayRegionCombo.setItems (new String [] { Messages.getString("EST.AVERAGE") });
+		displayRegionCombo.setSize (200, 200);
+		displayRegionCombo.pack();
+	   
+		Label comboLabel = new Label(comboComposite, SWT.NONE);
+	    comboLabel.setText(Messages.getString("EST.DISPLAY"));
+	    
+	    displayRegionCombo.addSelectionListener(new SelectionAdapter() {
+	    	      public void widgetSelected(@SuppressWarnings("unused") SelectionEvent e) {
+	    	    	  regionToDisplay = displayRegionCombo.getText();
+	    	    	  updateCharts();
+	    	      }
+	    	    });
+	
+
+		
+	    return comboComposite;
+	}//getbetaModeRadioButtonsComposite
+	
+	
+	/**
+	 * update the graphs
+	 */
+	protected static void updateCharts() {
+		statusLabel.setText(Messages.getString("EST.COMPLETE"));
+		estimatorCanvas.draw(averageParms.getParameters());
+		
+		int numDataCharts = analyzer.getEstimator().getNumProperties();
+		for (int i = 0; i < numDataCharts; i++) {
+			// tell the canvas to the the data from this control
+			// the control gets it from the analyzer which gets it form the
+			// estimators
+			equationSeries[i].draw();
+			regressionSeries[i].draw();
+		}
+		
+	}
+	
+	
+	
+
+	
+	/**
+	 * creates the spinners for the min and max threshold settings and their composite container
+	 * @param control
+	 * @return the composite
+	 */
+	Composite getSpinnerComposite(EstimatorControl control) {
+		Composite spinnerComposite = new Composite(control, SWT.BORDER);
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 8;
+	    spinnerComposite.setLayout(gridLayout);
+	    
+	    // max S
+	    maxThresholdSpinnerS = new Spinner(spinnerComposite, SWT.NONE);
+	    maxThresholdSpinnerS.setDigits(3); 		// allow 3 decimal places
+	    maxThresholdSpinnerS.setMinimum(1);		// set the minimum value to 0.001
+	    maxThresholdSpinnerS.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    maxThresholdSpinnerS.setIncrement(1);	// set the increment value to 0.001
+	    maxThresholdSpinnerS.setSelection(990);	// set the initial value 0.990
+	    maxSpinnerLabelS = new Label(spinnerComposite, SWT.NONE);
+	    maxSpinnerLabelS.setText(Messages.getString("EST.MAXTHRESHOLDS"));
+	    // max E
+	    maxThresholdSpinnerE = new Spinner(spinnerComposite, SWT.NONE);
+	    maxThresholdSpinnerE.setDigits(3); 		// allow 3 decimal places
+	    maxThresholdSpinnerE.setMinimum(1);		// set the minimum value to 0.001
+	    maxThresholdSpinnerE.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    maxThresholdSpinnerE.setIncrement(1);	// set the increment value to 0.001
+	    maxThresholdSpinnerE.setSelection(SPINNER_RESOLUTION);	// set the initial value 0.990
+	    maxSpinnerLabelE = new Label(spinnerComposite, SWT.NONE);
+	    maxSpinnerLabelE.setText(Messages.getString("EST.MAXTHRESHOLDE"));
+	    // max I
+	    maxThresholdSpinnerI = new Spinner(spinnerComposite, SWT.NONE);
+	    maxThresholdSpinnerI.setDigits(3); 		// allow 3 decimal places
+	    maxThresholdSpinnerI.setMinimum(1);		// set the minimum value to 0.001
+	    maxThresholdSpinnerI.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    maxThresholdSpinnerI.setIncrement(1);	// set the increment value to 0.001
+	    maxThresholdSpinnerI.setSelection(SPINNER_RESOLUTION);	// set the initial value 0.990
+	    maxSpinnerLabelI = new Label(spinnerComposite, SWT.NONE);
+	    maxSpinnerLabelI.setText(Messages.getString("EST.MAXTHRESHOLDI"));
+	    // max R
+	    maxThresholdSpinnerR = new Spinner(spinnerComposite, SWT.NONE);
+	    maxThresholdSpinnerR.setDigits(3); 		// allow 3 decimal places
+	    maxThresholdSpinnerR.setMinimum(1);		// set the minimum value to 0.001
+	    maxThresholdSpinnerR.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    maxThresholdSpinnerR.setIncrement(1);	// set the increment value to 0.001
+	    maxThresholdSpinnerR.setSelection(990);	// set the initial value 0.990
+	    maxSpinnerLabelR = new Label(spinnerComposite, SWT.NONE);
+	    maxSpinnerLabelR.setText(Messages.getString("EST.MAXTHRESHOLDR"));
+	    
+	    // min S
+	    minThresholdSpinnerS = new Spinner(spinnerComposite, SWT.NONE);
+	    minThresholdSpinnerS.setDigits(3); 		// allow 3 decimal places
+	    minThresholdSpinnerS.setMinimum(1);		// set the minimum value to 0.001
+	    minThresholdSpinnerS.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    minThresholdSpinnerS.setIncrement(SPINNER_INCREMENT);	// set the increment value to 0.001
+	    minThresholdSpinnerS.setSelection(10);	// set the initial value 0.001
+	    minSpinnerLabelS = new Label(spinnerComposite, SWT.NONE);
+	    minSpinnerLabelS.setText(Messages.getString("EST.MINTHRESHOLDS"));
+	    // min E
+	    minThresholdSpinnerE = new Spinner(spinnerComposite, SWT.NONE);
+	    minThresholdSpinnerE.setDigits(3); 		// allow 3 decimal places
+	    minThresholdSpinnerE.setMinimum(1);		// set the minimum value to 0.001
+	    minThresholdSpinnerE.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    minThresholdSpinnerE.setIncrement(SPINNER_INCREMENT);	// set the increment value to 0.001
+	    minThresholdSpinnerE.setSelection(100);	// set the initial value 0.001
+	    minSpinnerLabelE = new Label(spinnerComposite, SWT.NONE);
+	    minSpinnerLabelE.setText(Messages.getString("EST.MINTHRESHOLDE"));  
+	    // min I
+	    minThresholdSpinnerI = new Spinner(spinnerComposite, SWT.NONE);
+	    minThresholdSpinnerI.setDigits(3); 		// allow 3 decimal places
+	    minThresholdSpinnerI.setMinimum(1);		// set the minimum value to 0.001
+	    minThresholdSpinnerI.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    minThresholdSpinnerI.setIncrement(SPINNER_INCREMENT);	// set the increment value to 0.001
+	    minThresholdSpinnerI.setSelection(100);	// set the initial value 0.001
+	    minSpinnerLabelI = new Label(spinnerComposite, SWT.NONE);
+	    minSpinnerLabelI.setText(Messages.getString("EST.MINTHRESHOLDI"));
+	    // min R
+	    minThresholdSpinnerR = new Spinner(spinnerComposite, SWT.NONE);
+	    minThresholdSpinnerR.setDigits(3); 		// allow 3 decimal places
+	    minThresholdSpinnerR.setMinimum(1);		// set the minimum value to 0.001
+	    minThresholdSpinnerR.setMaximum(SPINNER_RESOLUTION);	// set the maximum value to 1.0
+	    minThresholdSpinnerR.setIncrement(SPINNER_INCREMENT);	// set the increment value to 0.001
+	    minThresholdSpinnerR.setSelection(1);	// set the initial value 0.001
+	    minSpinnerLabelR = new Label(spinnerComposite, SWT.NONE);
+	    minSpinnerLabelR.setText(Messages.getString("EST.MINTHRESHOLDR"));
+	    
+	    spinnerComposite.pack();
+	    
+	    return spinnerComposite;
+	}//getSpinnerCompositer
+	
+	
+	/**
+	 * set up the four data time series charts
+	 * @param dataComposite
+	 */
+	private void getEquationSeriesCharts(Composite dataComposite) {
+		// S
+ 		equationSeries[0] = new TimeSeriesCanvas(this,dataComposite,
+				Messages.getString("EST.EQUATION1"),
+				Messages.getString("EST.AXISLABEL1"),
+				AggregateDataWriter.getKeyS(),// equation 1 always has S
+				foreGround,
+				backgroundGround,
+				frameColor, 0, true);
+		final FormData eqOneFormData = new FormData();
+		equationSeries[0].setLayoutData(eqOneFormData);
+		eqOneFormData.top = new FormAttachment(dataComposite, 0);
+		eqOneFormData.bottom = new FormAttachment(50, 0);
+		eqOneFormData.left = new FormAttachment(0, 0);
+		eqOneFormData.right = new FormAttachment(50, 0);
+		
+		// I
+		equationSeries[1] = new TimeSeriesCanvas(this,dataComposite,
+				Messages.getString("EST.EQUATION3"),
+				Messages.getString("EST.AXISLABEL3"),
+				AggregateDataWriter.getKeyI(),// equation 3 always has I
+				foreGround,
+				backgroundGround,
+				frameColor, 1, true);
+		final FormData eqThreeFormData = new FormData();
+		equationSeries[1].setLayoutData(eqThreeFormData);
+		eqThreeFormData.top = new FormAttachment(51, 0);
+		eqThreeFormData.bottom = new FormAttachment(100, 0);
+		eqThreeFormData.left = new FormAttachment(0, 0);
+		eqThreeFormData.right = new FormAttachment(50, 0);
+		
+		// R
+		equationSeries[2] = new TimeSeriesCanvas(this,dataComposite,
+				Messages.getString("EST.EQUATION4"),
+				Messages.getString("EST.AXISLABEL4"),
+				AggregateDataWriter.getKeyR(),// equation 4 always has R
+				foreGround,
+				backgroundGround,
+				frameColor, 2, true);
+		final FormData eqFourFormData = new FormData();
+		equationSeries[2].setLayoutData(eqFourFormData);
+		eqFourFormData.top = new FormAttachment(51, 0);
+		eqFourFormData.bottom = new FormAttachment(100, 0);
+		eqFourFormData.left = new FormAttachment(51, 0);
+		eqFourFormData.right = new FormAttachment(100, 0);
+		
+		// E
+		equationSeries[3] = new TimeSeriesCanvas(this,dataComposite,
+				Messages.getString("EST.EQUATION2"),
+				Messages.getString("EST.AXISLABEL2"),
+				AggregateDataWriter.getKeyE(),// equation 2 always has E
+				foreGround,
+				backgroundGround,
+				frameColor, 3, true);
+		final FormData eqTwoFormData = new FormData();
+		equationSeries[3].setLayoutData(eqTwoFormData);
+		eqTwoFormData.top = new FormAttachment(dataComposite, 0);
+		eqTwoFormData.bottom = new FormAttachment(50, 0);
+		eqTwoFormData.left = new FormAttachment(51, 0);
+		eqTwoFormData.right = new FormAttachment(100, 0);
+	}// getEquationSeries
+	
+	
+	
+	
+	
+	/**
+	 * set up the four regression XYseries charts
+	 * @param regressionComposite
+	 */
+	private void getRegressionSeriesCharts(Composite regressionComposite) {
+		// Equation 1 from dS/dT
+ 		regressionSeries[0] = new XYSeriesCanvas(this,regressionComposite,
+				Messages.getString("EST.EQUATION1"),
+				Messages.getString("EST.RAXISLABEL1"),
+				foreGround,
+				backgroundGround,
+				frameColor, 0);
+		final FormData eqOneFormData = new FormData();
+		regressionSeries[0].setLayoutData(eqOneFormData);
+		eqOneFormData.top = new FormAttachment(regressionComposite, 0);
+		eqOneFormData.bottom = new FormAttachment(50, 0);
+		eqOneFormData.left = new FormAttachment(0, 0);
+		eqOneFormData.right = new FormAttachment(50, 0);
+		
+		// Equation 2 from dI/dT
+		regressionSeries[1] = new XYSeriesCanvas(this,regressionComposite,
+				Messages.getString("EST.EQUATION3"),
+				Messages.getString("EST.RAXISLABEL3"),
+				foreGround,
+				backgroundGround,
+				frameColor, 1);
+		final FormData eqThreeFormData = new FormData();
+		regressionSeries[1].setLayoutData(eqThreeFormData);
+		eqThreeFormData.top = new FormAttachment(51, 0);
+		eqThreeFormData.bottom = new FormAttachment(100, 0);
+		eqThreeFormData.left = new FormAttachment(0, 0);
+		eqThreeFormData.right = new FormAttachment(50, 0);
+		
+		// Equation 3 from dR/dT
+		regressionSeries[2] = new XYSeriesCanvas(this,regressionComposite,
+				Messages.getString("EST.EQUATION4"),
+				Messages.getString("EST.RAXISLABEL4"),
+				foreGround,
+				backgroundGround,
+				frameColor, 2);
+		final FormData eqFourFormData = new FormData();
+		regressionSeries[2].setLayoutData(eqFourFormData);
+		eqFourFormData.top = new FormAttachment(51, 0);
+		eqFourFormData.bottom = new FormAttachment(100, 0);
+		eqFourFormData.left = new FormAttachment(51, 0);
+		eqFourFormData.right = new FormAttachment(100, 0);
+		
+		// Equation 4 from dE/dT
+		regressionSeries[3] = new XYSeriesCanvas(this,regressionComposite,
+				Messages.getString("EST.EQUATION2"),
+				Messages.getString("EST.RAXISLABEL2"),
+				foreGround,
+				backgroundGround,
+				frameColor, 3);
+		final FormData eqTwoFormData = new FormData();
+		regressionSeries[3].setLayoutData(eqTwoFormData);
+		eqTwoFormData.top = new FormAttachment(regressionComposite, 0);
+		eqTwoFormData.bottom = new FormAttachment(50, 0);
+		eqTwoFormData.left = new FormAttachment(51, 0);
+		eqTwoFormData.right = new FormAttachment(100, 0);
+	}// get regression series composite
+	
+	
+	/**
+	 * Enable or disable the analysis button
+	 * 
+	 * @param b
+	 */
+	public void enableAnalysis(boolean b) {
+		if(b) this.analyzeButton.setEnabled(true);
+		else this.analyzeButton.setEnabled(false);
+	}
+	
+	
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	public void remove() {
+		
+		updateStatusLabel();
+	}
+
+	
+	
+
+	protected void updateStatusLabel() {
+		statusLabel.setText(AnalysisControl.STATUS_TEXT);
+	}
+	
+
+	/**
+	 * Initialize the header label
+	 * 
+	 * @param folderName
+	 */
+	protected void initializeHeader(String folderName) {
+		simulationNameLabel.setText("analyzing "+folderName);
+
+	} // initializeFromSimulation
+
+
+	
+	
+	
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+						
+		super.dispose();
+		
+	} // dispose
+
+	
+	/**
+	 * not used
+	 * @return null
+	 */
+	public Identifiable getIdentifiable() {
+		return null;
+	}
+
+	
+
+	/**
+	 * get the value for plotting
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getValues(int, int)
+	 */
+	public double[] getValues(int chartIndex, int state) {
+		if (state <= 1) {
+			return averageParms.getDataValues(regionToDisplay, chartIndex, state);
+		} else if (state <=3) {
+			return averageParms.getRegressionValues(regionToDisplay, chartIndex, state-2);
+		} else {
+			return averageParms.getFittedValues(regionToDisplay, chartIndex, state-4);
+		}
+		
+		
+		//return analyzer.getEstimator().getValues(chartIndex, state);
+	}
+	
+	/**
+	 * Not used
+	 * @param chartIndex not used (only one chart)
+	 * @param state
+	 * @return property name
+	 */
+	public String getProperty(int chartIndex, int state) {
+		return analyzer.getEstimator().getProperty(chartIndex, state);
+	}
+	
+	/**
+	 * @return the max  S value threshold from the spinner as a double
+	 */
+	public double getMaxThresholdS() {
+		double selection = maxThresholdSpinnerS.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	/**
+	 * @return the min S value threshold from the spinner as a double
+	 */
+	public double getMinThresholdS() {
+		double selection = minThresholdSpinnerS.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	
+	/**
+	 * @return the max  E value threshold from the spinner as a double
+	 */
+	public double getMaxThresholdE() {
+		double selection = maxThresholdSpinnerE.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	/**
+	 * @return the min E value threshold from the spinner as a double
+	 */
+	public double getMinThresholdE() {
+		double selection = minThresholdSpinnerE.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	
+	/**
+	 * @return the max  I value threshold from the spinner as a double
+	 */
+	public double getMaxThresholdI() {
+		double selection = maxThresholdSpinnerI.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	/**
+	 * @return the min I value threshold from the spinner as a double
+	 */
+	public double getMinThresholdI() {
+		double selection = minThresholdSpinnerI.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	
+	/**
+	 * @return the max  R value threshold from the spinner as a double
+	 */
+	public double getMaxThresholdR() {
+		double selection = maxThresholdSpinnerR.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	/**
+	 * @return the min R value threshold from the spinner as a double
+	 */
+	public double getMinThresholdR() {
+		double selection = minThresholdSpinnerR.getSelection();// really an int
+		double res = SPINNER_RESOLUTION; // 1000 means 3 decimal places
+		return selection/res;
+	}
+	
+	/**
+	 * Not used
+	 * @param chartIndex not used (only one chart)
+	 * @return the number of properties, only one
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getNumProperties(int chartIndex)
+	 */
+	public int getNumProperties(int chartIndex) {
+		if(analyzer!=null) {
+			// we always return 2 because we chart the variable along with the selected range...
+			// so 2 per chart S, Sselected, or I, Iselected, etc.
+			return 2;
+		}
+		return 0;
+	}
+	
+	/**
+	 * Each Control class may add objects to this map
+	 * @return the control parameters maps
+	 */
+	public Map<String, Object> getControlParametersMap() {
+		// add nothing for now
+		controlParametersMap.put(MIN_S_KEY, new Double(getMinThresholdS()));
+		controlParametersMap.put(MIN_E_KEY, new Double(getMinThresholdE()));
+		controlParametersMap.put(MIN_I_KEY, new Double(getMinThresholdI()));
+		controlParametersMap.put(MIN_R_KEY, new Double(getMinThresholdR()));
+		
+		controlParametersMap.put(MAX_S_KEY, new Double(getMaxThresholdS()));
+		controlParametersMap.put(MAX_E_KEY, new Double(getMaxThresholdE()));
+		controlParametersMap.put(MAX_I_KEY, new Double(getMaxThresholdI()));
+		controlParametersMap.put(MAX_R_KEY, new Double(getMaxThresholdR()));
+		
+		boolean sumAllLocations = dataAverageRadioButtons[1].getSelection();
+		boolean freqDependantBetaMode = betaModeRadioButtons[0].getSelection();
+		
+		controlParametersMap.put(SUM_LOCATIONS_KEY, new Boolean(sumAllLocations));
+		controlParametersMap.put(FREQ_MODE_KEY, new Boolean(freqDependantBetaMode));
+		
+		
+		
+		return controlParametersMap;
+	}
+
+	
+
+} // EstimatorControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorFactory.java
new file mode 100644
index 0000000..8693fa1
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorFactory.java
@@ -0,0 +1,52 @@
+// EstimatorFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link AnalysisControl} instances.
+ */
+public class EstimatorFactory implements AnalysisControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static EstimatorFactory INSTANCE = new EstimatorFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String ANALYSIS_TYPE = "Estimator";
+	
+
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @return new EstimatorControl()
+	 */
+	public AnalysisControl create(final Composite parent, String dirName) {
+				
+		return new EstimatorControl(parent);
+	}
+
+	/**
+	 * @return type of analysis
+	 * 
+	 */
+	public String getControlType() {
+		return ANALYSIS_TYPE;
+	}
+
+} // EstimatorFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorView.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorView.java
new file mode 100644
index 0000000..974cbf1
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/EstimatorView.java
@@ -0,0 +1,68 @@
+// EstimatorView 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view provides a tool to estimate model parameters for a model that might fit a set of reference data.
+ */
+
+public class EstimatorView extends ViewPart {
+
+	/**
+	 * The identifier of the Estimator View {@value}
+	 */
+	public static final String ID_Estimator_VIEW = "org.eclipse.stem.util.analysis.views.estimator"; //$NON-NLS-1$
+
+
+	private AnalysisViewer analysisViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		analysisViewer = new AnalysisViewer(parent, EstimatorFactory.INSTANCE);
+		analysisViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(analysisViewer);
+
+
+	} // createPartControl
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // EstimatorView
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/IRemoveListener.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/IRemoveListener.java
new file mode 100644
index 0000000..2c6923f
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/IRemoveListener.java
@@ -0,0 +1,30 @@
+// IRemoveListener
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * When the remove button is pressed by the user
+ * @author James
+ *
+ */
+public interface IRemoveListener {
+	/**
+	 * 
+	 * @param identifiable
+	 */
+	void identifiableRemoved(Identifiable identifiable) ;
+	
+
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovControl.java
new file mode 100644
index 0000000..d5e39fb
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovControl.java
@@ -0,0 +1,523 @@
+// EstimatorControl.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.util.analysis.CSVAnalysisWriter;
+import org.eclipse.stem.util.analysis.PhaseSpaceCoordinate;
+import org.eclipse.stem.util.analysis.ScenarioAnalysisSuite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a SWT GUI component that uses BIRT to plot
+ */
+public class LyapunovControl extends AnalysisControl {
+	
+	/**
+	 * used to identify user preferences for this class
+	 */
+	private static final String CONSUMER = "LYAPUNOV_CONTROL";
+	
+	/**
+	 * used to remember the primary directory in the user preferences
+	 */
+	private static final String PRIMARY_FOLDER_KEY = CONSUMER+"_PRIMARY";
+	/**
+	 * used to remember the secondary directory in the user preferences
+	 */
+	private static final String SECONDARY_FOLDER_KEY = CONSUMER+"_SECONDARY";
+
+	/**
+	 *  First Scenario Label - indicates number of regions being watched for analysis.
+	 *  There are locations with relative value history providers attached
+	 */
+	Label firstScenarioFolderLabel;
+	
+	/**
+	 *  Second Scenario Label - indicates number of regions being watched for analysis.
+	 *  There are locations with relative value history providers attached
+	 */
+	Label secondScenarioFolderLabel;
+	
+	/**
+	 * First input text field for the scenario folder of data to use in making the estimation
+	 */
+	Text text1;
+	
+
+	/**
+	 * Second Input text field for the scenario folder of data to be compared
+	 **/
+	Text text2;
+	
+	/**
+	 * A label to report status (not yet used)
+	 */
+	Label statusLabel;
+	
+	
+	/**
+	 * Results of analysis
+	 */
+	Label resultsLabel;
+	
+	/**
+	 * the chart of two (or more) trajectories in phase space
+	 */
+	LyapunovTrajectoryCanvas lyapunovTrajectoryCanvas;
+	
+	/**
+	 * the time series chart of the divergence of the Lyapunov trajectory(ies) from the reference trajectory
+	 */
+	TimeSeriesCanvas timeSeriesCanvas;
+	/**
+	 * Colors for the time series chart
+	 */
+	static final ColorDefinition foreGround = ColorDefinitionImpl.create(180, 0, 0);
+	static final ColorDefinition backgroundGround = ColorDefinitionImpl.create(255, 255, 225);
+	static final ColorDefinition frameColor = ColorDefinitionImpl.WHITE();
+	
+	/**
+	 * Label for line series Data (legend)
+	 */
+
+	
+	/**
+	 * the results of various scenario comparisons
+	 * TODO: eventually this might be a map keyed by comparison id
+	 * for now there is only one comparison, the mean square difference.
+	 */
+	List<PhaseSpaceCoordinate[]> comparisonValues = new ArrayList<PhaseSpaceCoordinate[]>();
+	
+	/**
+	 * this is the cumulative deviation between the trajectories (relative to the reference
+	 * trajectory
+	 */
+	List<EList<Double>> cumulativeDeviation = new ArrayList<EList<Double>>();
+	
+	private static final String LYAPUNOV_FILE_PREFIX = "LyapunovAnalysis";
+	private static final String LYAPUNOV_DEVIATION_FILE_PREFIX = "LyapunovDeviation";
+	private static final String SELECT_FOLDER_DIALOG_TEXT = "Pick a scenario folder";
+	
+	ScenarioAnalysisSuite analyzer = new ScenarioAnalysisSuite(this);
+	
+	/**
+	 * 
+	 * @param parent
+	 */
+	public LyapunovControl(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // EstimatorControl
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	private void createContents() {
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		identifiableTitle.setText(Messages.getString("LYA.TITLE"));
+		//propertySelector = new PropertySelector(this, SWT.NONE);
+		Display display = this.getDisplay();
+		
+		Color labelBackground = new Color(display, new RGB(180, 180, 200));
+		
+		statusLabel = new Label(this, SWT.BORDER);
+		statusLabel.setBackground(labelBackground);
+		statusLabel.setText("");
+		
+		firstScenarioFolderLabel = new Label(this, SWT.BORDER);
+		firstScenarioFolderLabel.setBackground(labelBackground);
+		firstScenarioFolderLabel.setText(Messages.getString("LYA.FOLDER1LABEL"));
+		
+		text1 = new Text(this, SWT.BORDER);
+	    text1.setBounds(10, 10, 100, 20);
+	    String primaryDir=prefs.getRecentFolder(PRIMARY_FOLDER_KEY);
+	    text1.setText(primaryDir);
+	    
+	    secondScenarioFolderLabel = new Label(this, SWT.BORDER);
+	    secondScenarioFolderLabel.setBackground(labelBackground);
+	    secondScenarioFolderLabel.setText(Messages.getString("LYA.FOLDER2LABEL"));
+		
+		text2 = new Text(this, SWT.BORDER);
+	    text2.setBounds(10, 10, 100, 20);
+	    String secondaryDir=prefs.getRecentFolder(SECONDARY_FOLDER_KEY);
+	    text2.setText(secondaryDir);
+		  
+	    Composite analyzeButtonComposite = getAnalyzeButtonComposite(this,Messages.getString("LYA.COMPARISON"));
+
+		resultsLabel = new Label(this, SWT.SHADOW_OUT);
+		resultsLabel.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
+		resultsLabel.setText(Messages.getString("LYA.RESULTS"));
+		
+		int deltaBottom = 5;
+        int bottom = deltaBottom;
+		
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.bottom = new FormAttachment(bottom, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		bottom += deltaBottom;
+        /////////////////////////////////////////////////////////////////////////
+		// TextField folder label
+		final FormData firstScenarioFolderLabelFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(cSVLoggerCanvas,
+		// 0);
+		firstScenarioFolderLabelFormData.top = new FormAttachment(identifiableTitle, 0);
+		firstScenarioFolderLabelFormData.bottom = new FormAttachment(bottom, 0);
+		firstScenarioFolderLabelFormData.left = new FormAttachment(0, 0);
+		firstScenarioFolderLabelFormData.right = new FormAttachment(15, 0);
+		firstScenarioFolderLabel.setLayoutData(firstScenarioFolderLabelFormData);
+		// first text field for parameter Estimator
+		final FormData text1FormData = new FormData();
+		text1FormData.top = new FormAttachment(identifiableTitle, 0);
+		text1FormData.bottom = new FormAttachment(bottom, 0);
+		text1FormData.left = new FormAttachment(firstScenarioFolderLabel, 0);
+		text1FormData.right = new FormAttachment(75, 0);
+		text1.setLayoutData(text1FormData);
+		
+		Button selectFolder1Button = new Button(this, SWT.NONE);
+		selectFolder1Button.setText(Messages.getString("LYA.SELECTFOLDER"));
+		final FormData selectFolder1FormData = new FormData();
+		selectFolder1FormData.top = new FormAttachment(identifiableTitle, 0);
+		selectFolder1FormData.bottom = new FormAttachment(bottom, 0);
+		selectFolder1FormData.left = new FormAttachment(text1, 0);
+		selectFolder1FormData.right = new FormAttachment(100, 0);
+		selectFolder1Button.setLayoutData(selectFolder1FormData);
+		
+		final Shell shell = this.getShell();
+		
+		selectFolder1Button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("LYA.SELECTFOLDERDIALOG")); //$NON-NLS-1$
+					dd.setFilterPath(text1.getText());
+					final String selected = dd.open();
+					text1.setText(selected);
+			}
+		});
+        /////////////////////////////////////////////////////////////////////////
+		
+		bottom += deltaBottom;
+		
+        /////////////////////////////////////////////////////////////////////////
+		// TextField folder label
+		final FormData secondScenarioFolderLabelFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(cSVLoggerCanvas,
+		// 0);
+		secondScenarioFolderLabelFormData.top = new FormAttachment(firstScenarioFolderLabel, 0);
+		secondScenarioFolderLabelFormData.bottom = new FormAttachment(bottom, 0);
+		secondScenarioFolderLabelFormData.left = new FormAttachment(0, 0);
+		secondScenarioFolderLabelFormData.right = new FormAttachment(15, 0);
+		secondScenarioFolderLabel.setLayoutData(secondScenarioFolderLabelFormData);
+		// first text field for parameter Estimator
+		final FormData text2FormData = new FormData();
+		text2FormData.top = new FormAttachment(text1, 0);
+		text2FormData.bottom = new FormAttachment(bottom, 0);
+		text2FormData.left = new FormAttachment(secondScenarioFolderLabel, 0);
+		text2FormData.right = new FormAttachment(75, 0);
+		text2.setLayoutData(text2FormData);
+		
+		Button selectFolder2Button = new Button(this, SWT.NONE);
+		selectFolder2Button.setText(Messages.getString("LYA.SELECTFOLDER"));
+		final FormData selectFolder2FormData = new FormData();
+		selectFolder2FormData.top = new FormAttachment(text1, 0);
+		selectFolder2FormData.bottom = new FormAttachment(bottom, 0);
+		selectFolder2FormData.left = new FormAttachment(text2, 0);
+		selectFolder2FormData.right = new FormAttachment(100, 0);
+		selectFolder2Button.setLayoutData(selectFolder2FormData);
+		
+		selectFolder2Button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(SELECT_FOLDER_DIALOG_TEXT); //$NON-NLS-1$
+					dd.setFilterPath(text2.getText());
+					final String selected = dd.open();
+					text2.setText(selected);
+			}
+		});
+		
+		/////////////////////////////////////////////////////////////////////////
+		
+		bottom += deltaBottom;
+		// AnalyzeButton
+		final FormData analysisButtonFormData = new FormData();
+		// propertySelectorFormDataX.top = new FormAttachment(propertySelectorY,
+		// 0);
+		analysisButtonFormData.top = new FormAttachment(text2, 0);
+		analysisButtonFormData.bottom = new FormAttachment(bottom, 0);
+		analysisButtonFormData.left = new FormAttachment(0, 0);
+		analysisButtonFormData.right = new FormAttachment(100, 0);
+		analyzeButtonComposite.setLayoutData(analysisButtonFormData);
+		
+		
+		
+		// Trajectories
+		lyapunovTrajectoryCanvas = new LyapunovTrajectoryCanvas(this);
+		final FormData trajectoryChartFormData = new FormData();
+		lyapunovTrajectoryCanvas.setLayoutData(trajectoryChartFormData);
+		trajectoryChartFormData.top = new FormAttachment(bottom, 0);
+		trajectoryChartFormData.bottom = new FormAttachment(100, 0);
+		trajectoryChartFormData.left = new FormAttachment(0, 0);
+		trajectoryChartFormData.right = new FormAttachment(50, 0);
+		
+		// divergence graph
+		timeSeriesCanvas = new TimeSeriesCanvas(this,
+													Messages.getString("LYA.DIVERGENCELEGEND"),
+													Messages.getString("LYA.DIVERGENCEYAXIS"),
+													Messages.getString("LYA.DIVERGENCEYAXIS"),
+													foreGround,
+													backgroundGround,
+													frameColor, 0);
+		
+		
+		
+		final FormData analysisChartFormData = new FormData();
+		timeSeriesCanvas.setLayoutData(analysisChartFormData);
+		analysisChartFormData.top = new FormAttachment(bottom, 0);
+		analysisChartFormData.bottom = new FormAttachment(100, 0);
+		analysisChartFormData.left = new FormAttachment(50, 0);
+		analysisChartFormData.right = new FormAttachment(100, 0);
+		
+		
+		final ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(this.getShell());
+
+		analyzeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				
+				String referenceDirectory  = text1.getText();
+				String comparisonDirectory = text2.getText();
+				
+				/*
+				 * reset the label text
+				 */
+			    identifiableTitle.setText(Messages.getString("LYA.TITLE"));
+			    /*
+				 * reinitialize the graph
+				 */
+				comparisonValues.clear();
+				cumulativeDeviation.clear();
+				lyapunovTrajectoryCanvas.reset();
+			    
+				/*
+				 * VALIDATE the text input Fields
+				 */
+				if(!analyzer.validate(referenceDirectory)) {
+					identifiableTitle.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+					text1.setText("");
+				}
+                if(!analyzer.validate(comparisonDirectory)) {
+                	identifiableTitle.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+                	text2.setText("");
+				}
+                if((!analyzer.validate(referenceDirectory)) || (!analyzer.validate(comparisonDirectory))) {
+                	return;
+                }
+                
+				try {
+					comparisonValues.addAll( analyzer.getLyapunovTrajectory(referenceDirectory, comparisonDirectory, progressDialog) );
+					//success... remember the users prefs
+					prefs.setRecentFolder(PRIMARY_FOLDER_KEY,referenceDirectory);
+					prefs.setRecentFolder(SECONDARY_FOLDER_KEY,comparisonDirectory);
+				} catch(ScenarioInitializationException sie) {
+					Activator.logError("", sie);
+				}
+				
+				cumulativeDeviation.addAll(ScenarioAnalysisSuite.getCumulativePhaseSpaceDeviation(comparisonValues));
+				
+				statusLabel.setText(Messages.getString("LYA.COMPLETE"));
+				lyapunovTrajectoryCanvas.draw();
+				
+				// Log the trajectory data
+				String outFileName = LYAPUNOV_FILE_PREFIX+"_"+
+				 getScenarioNameFromDirectoryName(referenceDirectory)+
+				 "_"+
+				 getScenarioNameFromDirectoryName(comparisonDirectory);
+				
+				CSVAnalysisWriter writer = new CSVAnalysisWriter(outFileName);
+				writer.logData(2,comparisonValues);
+
+				// Log the cumulative deviation data
+				outFileName = LYAPUNOV_DEVIATION_FILE_PREFIX+"_"+
+				 getScenarioNameFromDirectoryName(referenceDirectory)+
+				 "_"+
+				 getScenarioNameFromDirectoryName(comparisonDirectory);
+				 CSVAnalysisWriter writer2 = new CSVAnalysisWriter(outFileName);
+				 writer2.logData(cumulativeDeviation);
+				 timeSeriesCanvas.draw();
+			}
+		});
+		
+	} // createContents
+	
+	
+	
+
+
+	/**
+	 * @param dirName
+	 * @return short name of scenario
+	 */
+	public static String getScenarioNameFromDirectoryName(String dirName) {
+		int last = dirName.lastIndexOf("/");
+		int last2 = dirName.lastIndexOf("\\");
+		if (last2 > last)
+			last = last2;
+		if (last <= 0)
+			last = 0;
+		String retVal = dirName.substring(last + 1, dirName.length());
+		return retVal;
+	}
+	
+	/**
+	 * This returns the results of a comparison of type comparisonType
+	 * as an array of double. 
+	 * 
+	 * @param trajectory the trajectory to return
+	 * @return comparison
+	 */
+	public PhaseSpaceCoordinate[] getPointValues(int trajectory) {
+		
+		return comparisonValues.get(trajectory);
+	}
+	
+	/**
+	 * returns the analysis of lyapunov tractory(ies) relative to reference.
+	 * @param chartIndex not used (only one chart)
+	 * @param trajectory 
+	 * @return Cumulative deviation from reference trajectory
+	 */
+	@SuppressWarnings("boxing")
+	@Override
+	public double[] getValues(int chartIndex, int trajectory) {
+		
+		EList<Double> l = cumulativeDeviation.get(trajectory);
+		double [] res = new double[l.size()];
+		for(int i=0;i<res.length;++i) res[i] = l.get(i);
+		return res;
+	}
+
+	/**
+	 * Not used
+	 * @param chartIndex not used (only one chart)
+	 * @param state
+	 * @return property name
+	 */
+	@Override
+	public String getProperty(int chartIndex, int state) {
+		return Messages.getString("LYA.DIVERGENCEYAXIS");
+	}
+	
+	/**
+	 * Only one property to plot = the RMS difference
+	 * @param chartIndex not used (only one chart)
+	 * @return the number of properties
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getNumProperties(int chartIndex)
+	 */
+	@Override
+	public int getNumProperties(int chartIndex) {
+		return 1;
+	}
+
+
+	
+	
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	public void remove() {
+		updateStatusLabel();
+	}
+
+	
+	
+
+	protected void updateStatusLabel() {
+		statusLabel.setText(AnalysisControl.STATUS_TEXT);
+	}
+	
+	
+
+	/**
+	 * Initialize the header label
+	 * 
+	 * @param folderName
+	 */
+	@Override
+	protected void initializeHeader(String folderName) {
+		simulationNameLabel.setText("analyzing "+folderName);
+
+	} // initializeFromSimulation
+
+
+	
+	
+	
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+						
+		super.dispose();
+		
+	} // dispose
+
+	/**
+	 * Each Control class may add objects to this map
+	 * @return the control parameters maps
+	 */
+	public Map<String, Object> getControlParametersMap() {
+		// add nothing for now
+		return controlParametersMap;
+	}
+	
+
+} // EstimatorControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovFactory.java
new file mode 100644
index 0000000..f30faa4
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovFactory.java
@@ -0,0 +1,53 @@
+// EstimatorFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link AnalysisControl} instances.
+ */
+public class LyapunovFactory implements AnalysisControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static LyapunovFactory INSTANCE = new LyapunovFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String ANALYSIS_TYPE = "Lyapunov";
+	
+
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @return new LyapunovControl()
+	 */
+	public AnalysisControl create(final Composite parent, String dirName) {
+				
+		return new LyapunovControl(parent);
+	}
+	
+
+	/**
+	 * @return type of analysis
+	 * 
+	 */
+	public String getControlType() {
+		return ANALYSIS_TYPE;
+	}
+
+} // EstimatorFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovTrajectoryCanvas.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovTrajectoryCanvas.java
new file mode 100644
index 0000000..77060d9
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovTrajectoryCanvas.java
@@ -0,0 +1,400 @@
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.LineSeries;
+import org.eclipse.birt.chart.model.type.ScatterSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.stem.util.analysis.Activator;
+import org.eclipse.stem.util.analysis.PhaseSpaceCoordinate;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * LyapunovComparisonCanvas is a subclass of {@link Canvas} suitable for chart
+ * drawings.
+ */
+public class LyapunovTrajectoryCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The control for this canvas
+	 */
+	private LyapunovControl control = null;
+
+	/**
+	 * These are the values that will be plotted in X
+	 * 
+	 */
+	private final List<List<Double>> relativeValuesX = new ArrayList<List<Double>>();
+
+	/**
+	 * These are the values that will be plotted in Y
+	 * 
+	 */
+	private final List<List<Double>> relativeValuesY = new ArrayList<List<Double>>();
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	private final List<LineSeries> lineSeriesList = new ArrayList<LineSeries>();
+	Axis yAxisPrimary;
+	Axis xAxisPrimary;
+	double maxX = -1.0;
+	double maxY = -1.0;
+
+	ColorDefinition[] lineColors = { ColorDefinitionImpl.RED(),
+			ColorDefinitionImpl.BLUE(), ColorDefinitionImpl.ORANGE(),
+			ColorDefinitionImpl.YELLOW(), ColorDefinitionImpl.GREEN(),
+			ColorDefinitionImpl.PINK(), ColorDefinitionImpl.BLACK() };
+
+	/**
+	 * TODO eventually this should not be hard coded but should be based on the
+	 * number of files being read in in the GUI
+	 */
+	private static final int NUM_TRAJECTORIES = 2;
+
+	/**
+	 * Label for Time access (TODO need to nls this)
+	 */
+	public static final String TIME_LABEL = "time";
+
+	/**
+	 * Label for line series Identifier (legend)
+	 */
+	public static final String RMS_LABEL = "I[A] vs I[B]";
+
+	Image imgChart = null;
+	
+	/**
+	 * Constructor.
+	 * 
+	 * @param parent
+	 *            the SWT parent of the {@link Widget}
+	 */
+	public LyapunovTrajectoryCanvas(final Composite parent) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		while (relativeValuesX.size() < NUM_TRAJECTORIES) {
+			relativeValuesX.add(new ArrayList<Double>());
+		}
+		while (relativeValuesY.size() < NUM_TRAJECTORIES) {
+			relativeValuesY.add(new ArrayList<Double>());
+		}
+		resetData();
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = (LyapunovControl) parent;
+
+		cm = createLyapunovTrajectoryChart(relativeValuesX, relativeValuesY,
+				Messages.getString("PH.title")); //$NON-NLS-1$
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+
+			} // paintControl
+		} // PaintListener
+
+		);
+
+	} // LyapunovComparisonCanvas
+
+	/**
+	 * The method which gets the {@link LyapunovTrajectoryCanvas}' reports list,
+	 * and draws it on the {@link LyapunovTrajectoryCanvas}.
+	 * 
+	 */
+	public void draw() {
+		// Has a relative value provider been provided?
+		clearData();
+		setColorDefs(lineSeriesList);
+
+		// set up to autoscale
+		maxX = -1.0;
+		maxY = -1.0;
+
+		for (int i = 0; i < NUM_TRAJECTORIES; i++) {
+
+			final PhaseSpaceCoordinate[] trajectory = control.getPointValues(i);
+
+			if (trajectory.length > 0) {
+
+				for (int j = 0; j < trajectory.length; j++) {
+
+					if (trajectory[j].getXValue() >= maxX) {
+						maxX = trajectory[j].getXValue();
+						xAxisPrimary.getScale().setMax(
+								NumberDataElementImpl.create(maxX));
+					}
+
+					if (trajectory[j].getYValue() >= maxY) {
+						maxY = trajectory[j].getYValue();
+						yAxisPrimary.getScale().setMax(
+								NumberDataElementImpl.create(maxY));
+					}
+				}
+
+				for (int cycleNumber = 0; cycleNumber < trajectory.length; cycleNumber++) {
+					this.relativeValuesX.get(i).add(
+							new Double(trajectory[cycleNumber].getXValue()));
+					this.relativeValuesY.get(i).add(
+							new Double(trajectory[cycleNumber].getYValue()));
+				} // for cycleNumber
+			} else {
+				resetData();
+			}
+		}// for NUM_TRAJECTORIES
+		if (!this.isDisposed()) {
+			redraw();
+		}
+	} // paintControl
+
+	/**
+	 * @param relativeValuesX
+	 *            the <code>List</code> that will contain the relative X axis
+	 *            values (0.0-1.0) to plot
+	 * @param relativeValuesY
+	 *            that will contain the relative Y axis values (0.0-1.0) to plot
+	 * @param seriesIdentifier
+	 *            the title of the graph
+	 * @return a <code>Chart</code>
+	 */
+	@SuppressWarnings("deprecation")
+	public final Chart createLyapunovTrajectoryChart(
+			final List<List<Double>> relativeValuesX,
+			final List<List<Double>> relativeValuesY,
+			final String seriesIdentifier) {
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+		// get the NLS default labels
+		// defaultAxisLabel_X = Messages.getString("XAXISDEF.title");
+		// defaultAxisLabel_Y = Messages.getString("YAXISDEF.title");
+		String defaultAxisLabel_X = "S";
+		String defaultAxisLabel_Y = "I";
+
+		// Plot
+		retValue.getBlock().setBackground(ColorDefinitionImpl.WHITE());
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(
+				ColorDefinitionImpl.create(255, 255, 225));
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		final Legend lg = retValue.getLegend();
+		lg.setVisible(false);
+		/*
+		 * final LineAttributes lia = lg.getOutline();
+		 * lg.getText().getFont().setSize(8);
+		 * lia.setStyle(LineStyle.SOLID_LITERAL); lg.getInsets().set(10, 5, 0,
+		 * 0); lg.getOutline().setVisible(false);
+		 * lg.setAnchor(Anchor.NORTH_LITERAL);
+		 * lg.setPosition(Position.BELOW_LITERAL);
+		 */
+		// cwaLine.getLegend( ).getText().getFont().setSize(16);;
+		// cwaLine.getLegend( ).setVisible( true );
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+		// Y-Axis
+		yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+
+		// xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+
+		xAxisPrimary.getTitle().getCaption().getFont().setSize(8);
+		String xAxisLabel = defaultAxisLabel_X;
+		xAxisPrimary.getTitle().getCaption().setValue(xAxisLabel);
+		xAxisPrimary.getTitle().setVisible(true);
+
+		yAxisPrimary.getTitle().getCaption().getFont().setSize(8);
+		String yAxisLabel = defaultAxisLabel_Y;
+		yAxisPrimary.getTitle().getCaption().setValue(yAxisLabel);
+		yAxisPrimary.getTitle().setVisible(true);
+
+		final int MAXCOLORS = lineColors.length;
+		// for all relative values lists
+		// X must be same size as Y
+		for (int i = 0; i < relativeValuesX.size(); i++) {
+			final NumberDataSet orthoValuesX = NumberDataSetImpl
+					.create(relativeValuesX.get(i));
+			final NumberDataSet orthoValuesY = NumberDataSetImpl
+					.create(relativeValuesY.get(i));
+
+			// X-Series
+			final Series lsx = SeriesImpl.create();
+			// final LineSeries lsx = (ScatterSeries)
+			// ScatterSeriesImpl.create();
+			// seCategory.setDataSet(orthoValuesX);
+			lsx.setDataSet(orthoValuesX);
+
+			// Y-Series
+			final ScatterSeries lsy = (ScatterSeries) ScatterSeriesImpl
+					.create();
+			lsy.setDataSet(orthoValuesY);
+			lsy.getLineAttributes().setVisible(true);
+
+			int colorIndex = i % MAXCOLORS;
+			lsy.getLineAttributes().setColor(lineColors[colorIndex]);
+			lsy.setSeriesIdentifier(seriesIdentifier);
+			
+			lsy.getMarkers().clear();
+
+			final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+			final SeriesDefinition sdY = SeriesDefinitionImpl.create();
+
+			sdY.getSeriesPalette().update(-2);
+
+			xAxisPrimary.getSeriesDefinitions().add(sdX);
+			yAxisPrimary.getSeriesDefinitions().add(sdY);
+
+			// sdX.getSeries().add(seCategory);
+			sdX.getSeries().add(lsx);
+			sdY.getSeries().add(lsy);
+
+		}// FOR ALL DATA SETS
+
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		xAxisPrimary.getScale().setStep(0.25);
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.25);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+
+		return retValue;
+	} // createPhaseSpaceLineChart
+
+	/**
+	 * Sets the colors for a n array of LineSeries all to blue TODO: eventually
+	 * we need to pick some better colors and connect to a legend...
+	 * 
+	 * @param lsList
+	 */
+	public static void setColorDefs(final List<LineSeries> lsList) {
+		// the default line color
+		for (int i = 0; i < lsList.size(); i++) {
+			ColorDefinition color = ColorDefinitionImpl.BLUE();
+			lsList.get(i).getLineAttributes().setColor(color);
+		}
+		return;
+	}// getColorDef
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		redraw();
+	}
+
+	protected void resetData() {
+
+		clearData();
+		for (int i = 0; i < relativeValuesX.size(); i++) {
+			relativeValuesX.get(i).add(new Double(1.0));
+			relativeValuesY.get(i).add(new Double(0.0));
+		}
+	}
+
+	private void clearData() {
+		for (int i = 0; i < relativeValuesX.size(); i++) {
+			relativeValuesX.get(i).clear();
+			relativeValuesY.get(i).clear();
+		}
+	}
+} // LyapunovComparisonCanvas
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovView.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovView.java
new file mode 100644
index 0000000..f01ec44
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/LyapunovView.java
@@ -0,0 +1,68 @@
+// EstimatorView 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view provides for a Lyapunov analysis, comparing two scenarios
+ */
+
+public class LyapunovView extends ViewPart {
+
+	/**
+	 * The identifier of the Lyapunov View {@value}
+	 */
+	public static final String ID_Lyapunov_VIEW = "org.eclipse.stem.util.analysis.views.lyapunov"; //$NON-NLS-1$
+
+
+	private AnalysisViewer analysisViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		analysisViewer = new AnalysisViewer(parent, LyapunovFactory.INSTANCE);
+		analysisViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(analysisViewer);
+
+
+	} // createPartControl
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // EstimatorView
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/Messages.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/Messages.java
new file mode 100644
index 0000000..b868c26
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.util.analysis.views.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ParameterEstimatorWizard.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ParameterEstimatorWizard.java
new file mode 100644
index 0000000..0279d75
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ParameterEstimatorWizard.java
@@ -0,0 +1,420 @@
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.stem.analysis.DiseaseType;
+import org.eclipse.stem.analysis.impl.ReferenceScenarioDataMapImpl;
+import org.eclipse.stem.analysis.util.CSVscenarioLoader;
+import org.eclipse.stem.util.analysis.ParameterEstimatorMethod;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * A wizard for selecting a scenario folder and a parameter estimator
+ * 
+ */
+public class ParameterEstimatorWizard extends Wizard {
+	/**
+	 * This page is for selecting scenario folder
+	 */
+	protected ParameterEstimatorWizardSelectFolderPage selectFolderPage;
+
+	/**
+	 * This page is for selecting which parameter estimator to apply
+	 */
+	protected ParameterEstimatorWizardSelectEstimatorPage selectEstimatorPage;
+
+	/**
+	 * Remember the workbench during initialization.
+	 */
+	protected IWorkbench workbench;
+	
+	/**
+	 * Selection, i.e. the selected widget that opened the wizard
+	 */
+	
+	IStructuredSelection selection;
+	
+	/**
+	 * The Estimator Control. We use it to update fields indicating
+	 * the current folder/estimator
+	 * 
+	 */
+	
+	EstimatorControl estimatorControl;
+	
+	/**
+	 * When the wizard is complete, we have loaded data into
+	 * this map 
+	 */
+	
+	ReferenceScenarioDataMapImpl referenceScenarioDataMap;
+	
+	/**
+	 * When the wizard is complete, we have selected a
+	 * parameter estimator method
+	 */
+	
+	public ParameterEstimatorMethod parameterEstimatorMethod;
+	
+	private String initDir = null;
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param ctrl EstimatorControl
+	 * @param initDir Initial directory
+	 */
+	
+	public ParameterEstimatorWizard(EstimatorControl ctrl, String initDir) {
+		this.estimatorControl = ctrl;
+		this.initDir = initDir;
+		this.setForcePreviousAndNextButtons(true);
+	}
+	
+	/**
+	 * Initialize
+	 * 
+	 * @param workbench
+	 * @param selection Selection 
+	 */
+	
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.workbench = workbench;
+		this.selection = selection;
+		setWindowTitle("Create Parameter Estimator"); //$NON-NLS-1$
+	}
+
+	/**
+	 * Done selecting parameter estimator
+	 * 
+	 * @return boolean
+	 */
+
+	public boolean performFinish() {
+		EstimatorControl.text1.setText(selectFolderPage.getDirName());
+		EstimatorControl.estimatorText.setText(this.parameterEstimatorMethod.getName());
+		estimatorControl.enableAnalysis(true);
+		return true;
+	}
+
+	/**
+	 * getReferenceScenarioDataMap. Return the reference scenario data map
+	 *  
+	 * @return ReferenceScenarioDataMap
+	 */
+	
+	public ReferenceScenarioDataMapImpl getReferenceScenarioDataMap() {return this.referenceScenarioDataMap;}
+	
+	/**
+	 * getParameterEstimator. Return the parameter estimator method selected
+	 *  
+	 * @return ParameterEstimator
+	 */
+	
+	public ParameterEstimatorMethod getParameterEstimatorMethod() {return this.parameterEstimatorMethod;}
+	
+	
+	/**
+     * We override createPageControls to avoid creating the controls
+     * for the second page until we are ready.
+     * 
+     * @param pageContainer
+     */
+    public void createPageControls(Composite pageContainer) {
+    	//IWizardPage page = selectFolderPage;
+        //page.createControl(pageContainer);
+    }
+    
+	/**
+	 * Page for selecting scenario folder
+	 */
+	public class ParameterEstimatorWizardSelectFolderPage extends WizardPage {
+		Text folderText = null;
+		private String directory;
+		
+		/**
+		 * Pass in the selection.
+		 * 
+		 * @param pageId
+		 */
+		public ParameterEstimatorWizardSelectFolderPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 */
+		protected boolean validatePage() {
+			return true;
+		}
+
+		/**
+		 * Create layout
+		 * 
+		 * @param parent
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 2;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(Messages.getString("EST.SCFOLDER")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+			folderText = new Text(composite, SWT.LEFT);
+			{
+				folderText.setText(this.getDirName());
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				data.grabExcessHorizontalSpace = true;
+				data.minimumWidth = 100;
+				folderText.setLayoutData(data);
+			}
+			Button selectFolderButton = new Button(composite, SWT.LEFT);
+			{
+				selectFolderButton.setText(Messages.getString("EST.SELECTFOLDEBUTTON"));
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				selectFolderButton.setLayoutData(data);
+			}
+			
+			final Shell shell = this.getShell();
+			
+			selectFolderButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(@SuppressWarnings("unused")
+						final SelectionEvent e) {
+					final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("EST.SELECTFOLDEDIALOGTITLE")); //$NON-NLS-1$
+					dd.setFilterPath(folderText.getText());
+					final String selected = dd.open();
+					folderText.setText(selected);
+				}
+			});
+			setPageComplete(validatePage());
+			setControl(composite);
+		}
+		
+		/**
+		 * Set the current directory name
+		 * 
+		 * @param dir Directory
+		 */
+		
+		public void setDirName(String dir) {
+			this.directory = dir;
+		}
+
+		/**
+		 * Get the directory
+		 * 
+		 * @return String Directory
+		 */
+		public String getDirName() {
+			return this.directory;
+		}
+		
+		/**
+		 * canFlipToNextPage. Figure out whether folder is set. 
+		 * 
+		 * @return boolean True if page is valid
+		 */
+		
+		public boolean canFlipToNextPage(){
+			  return this.validatePage();
+		}
+		
+		/**
+		 * isPageComplete.
+		 * 
+		 * @return boolean True if complete
+		 */
+		public boolean isPageComplete() {
+			return this.validatePage();
+		}
+		
+		/**
+		 * Override to load folder data and validate
+		 * 
+		 * @return IWizardPage
+		 */
+		
+		public IWizardPage getNextPage() {
+			try {
+				selectEstimatorPage = new ParameterEstimatorWizardSelectEstimatorPage("Estimator"); //$NON-NLS-1$
+				selectEstimatorPage.setTitle(Messages.getString("EST.PARAMESTTITLE"));
+				selectEstimatorPage.setDescription(""); //$NON-NLS-1$
+				selectEstimatorPage.setWizard(this.getWizard());
+				CSVscenarioLoader loader = new CSVscenarioLoader(this.folderText.getText());
+				// Pick the highest resolution available
+				int maxResolution = loader.getMaxResolution();
+				ReferenceScenarioDataMapImpl map = loader.parseAllFiles(maxResolution);
+				((ParameterEstimatorWizard)this.getWizard()).referenceScenarioDataMap = map;
+				this.setDirName(this.folderText.getText());
+			} catch(Exception e) {
+				this.setErrorMessage(e.getMessage());
+				return this;
+			}
+	        return selectEstimatorPage;
+		}
+	}
+
+	/**
+	 * Page for selecting estimator
+	 */
+	public class ParameterEstimatorWizardSelectEstimatorPage extends WizardPage {
+
+		/**
+		 * Pass in the selection.
+		 * 
+		 * @param pageId
+		 */
+		public ParameterEstimatorWizardSelectEstimatorPage(String pageId) {
+			super(pageId);
+		}
+
+		/**
+		 * The framework calls this to see if the file is correct.
+		 */
+		protected boolean validatePage() {
+			return (((ParameterEstimatorWizard)this.getWizard()).parameterEstimatorMethod != null);
+		}
+
+		/**
+		 * Create layout
+		 * 
+		 * @param parent
+		 */
+		public void createControl(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
+				GridLayout layout = new GridLayout();
+				layout.numColumns = 1;
+				layout.verticalSpacing = 12;
+				composite.setLayout(layout);
+
+				GridData data = new GridData();
+				data.verticalAlignment = GridData.FILL;
+				data.grabExcessVerticalSpace = true;
+				data.horizontalAlignment = GridData.FILL;
+				composite.setLayoutData(data);
+			}
+
+			Label containerLabel = new Label(composite, SWT.LEFT);
+			{
+				containerLabel.setText(Messages.getString("EST.PARAMESTLABEL")); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				containerLabel.setLayoutData(data);
+			}
+			
+			Label descriptionLabel = new Label(composite, SWT.LEFT);
+			{
+				descriptionLabel.setText(""); //$NON-NLS-1$
+
+				GridData data = new GridData();
+				data.horizontalAlignment = GridData.FILL;
+				descriptionLabel.setLayoutData(data);
+			}
+			
+			boolean first = true;
+			for(ParameterEstimatorMethod method : ParameterEstimatorMethod.values()) {
+				DiseaseType dataType = ((ParameterEstimatorWizard)this.getWizard()).referenceScenarioDataMap.getType();
+				if(method.getType() != dataType) continue;
+				Button button = new Button(composite, SWT.RADIO);
+			    button.setText(method.getName());
+			    if(first) {
+			    	button.setSelection(true);
+			    	((ParameterEstimatorWizard)this.getWizard()).parameterEstimatorMethod = method;
+			    	descriptionLabel.setText(method.getDescription());
+			    	first = false;
+			    }
+			    final ParameterEstimatorWizard wizard = (ParameterEstimatorWizard)this.getWizard();
+			    final ParameterEstimatorMethod currentMethod = method;
+			    final Label descLabel = descriptionLabel;
+			    button.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(@SuppressWarnings("unused")
+							final SelectionEvent e) {
+						wizard.parameterEstimatorMethod = currentMethod;
+						descLabel.setText(currentMethod.getDescription());
+						wizard.getContainer().updateButtons();
+					}
+			    });
+			}
+			
+			setPageComplete(validatePage());
+			setControl(composite);
+			
+		}
+		
+		/**
+		 * canFlipToNextPage. False since there is no next page
+		 * 
+		 * @return boolean True if can flip
+		 */
+		
+		public boolean canFlipToNextPage(){
+			  return false; // There is no next pager
+		}
+	
+		/**
+		 * isPageComplete.
+		 * 
+		 * @return boolean True if complete
+		 */
+		public boolean isPageComplete() {
+			return this.validatePage();
+		}
+	}
+
+	/**
+	 * The framework calls this to create the contents of the wizard.
+	 */
+	public void addPages() {
+		selectFolderPage = new ParameterEstimatorWizardSelectFolderPage("Folder"); //$NON-NLS-1$
+		selectFolderPage.setTitle(Messages.getString("EST.WIZARDPAGE1TITLE"));
+		selectFolderPage.setDescription(""); //$NON-NLS-1$
+		selectFolderPage.setDirName(this.initDir);
+		addPage(selectFolderPage);
+	}
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorControl.java
new file mode 100644
index 0000000..7d6f9b2
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorControl.java
@@ -0,0 +1,583 @@
+// ProcessorControl.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.util.analysis.DataProcessor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * GUI for processing data - reading incidence data from files (file names 
+ * keyed by location) and creating the new format CSV files for STEM 
+ */
+public class ProcessorControl extends AnalysisControl {
+
+	/**
+	 * The format of the time in the input files
+	 */
+	private static final String TIME_FORMAT = "yyyy-MM-dd";
+	
+	/**
+	 * Input text field for the source folder of the raw data
+	 */
+	protected static Text sourceFolder;
+
+	/**
+	 * Input text field for the target folder of the processed data
+	 */
+	protected static Text targetFolder;
+
+	/**
+	 * Input text field for the population data file
+	 */
+	protected static Text populationDataFile;
+
+	/**
+	 * Recovery rate
+	 */
+	protected static Spinner recoveryRate; 
+
+	/**
+	 * Susceptible rate
+	 */
+	protected static Spinner susceptibleRate;
+
+	/**
+	 * Immunity loss rate
+	 */
+	protected static Spinner immunityLossRate;
+
+	/**
+	 * Population size in the start year
+	 */
+	protected static Spinner populationSizeStartYear;
+
+	/**
+	 * Population size in the end year
+	 */
+	protected static Spinner populationSizeEndYear;
+	
+	/**
+	 * Button to trigger the data processing
+	 */
+	protected Button processButton;
+	
+	/**
+	 * A label to report status
+	 */
+	protected static Label statusLabel;
+
+	/**
+	 * Start date of the data
+	 */
+	protected static Date startDate; 
+
+	/**
+	 * End date of the data
+	 */
+	protected static Date endDate;
+
+	/**
+	 * @param parent
+	 */
+	public ProcessorControl(final Composite parent) {
+
+		super(parent, SWT.None);
+		createContents();
+	
+	} // ProcessorControl
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	void createContents() {
+	
+		final Shell shell = this.getShell();
+
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		identifiableTitle.setText(Messages.getString("PROCESSOR.TITLE"));
+		Display display = this.getDisplay();
+		
+		Color labelBackground = new Color(display, new RGB(180, 180, 200));
+
+		// status label
+		statusLabel = new Label(this, SWT.BORDER);
+		statusLabel.setText("");
+		
+		// source folder
+		Label sourceFolderLabel = new Label(this, SWT.BORDER);
+		sourceFolderLabel.setBackground(labelBackground);
+		sourceFolderLabel.setText(Messages.getString("PROCESSOR.SOURCEFOLDER"));
+
+		sourceFolder = new Text(this, SWT.BORDER);
+		sourceFolder.setBounds(10, 10, 100, 20);
+		sourceFolder.setText("");
+		sourceFolder.setEditable(false); // can only be selected through dialog
+		
+	    Button selectSourceFolderButton = new Button(this, SWT.NONE);
+	    selectSourceFolderButton.setText(Messages.getString("PROCESSOR.SELECTSOURCEFOLDER"));
+		selectSourceFolderButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(shell, SWT.OPEN);
+				dd.setText(Messages.getString("PROCESSOR.SELECTSOURCEFOLDEDIALOGTITLE"));
+				dd.setFilterPath(sourceFolder.getText());
+				final String selected = dd.open();
+				sourceFolder.setText(selected);
+				if(selected != null && selected.length() != 0) {
+					statusLabel.setText(Messages.getString("PROCESSOR.READINGDATA"));
+					populationSizeStartYear.setEnabled(false);
+					populationSizeEndYear.setEnabled(false);
+					initializeDates();
+					if(startDate != null && endDate != null) {
+						DateFormat format = new SimpleDateFormat(TIME_FORMAT);
+						statusLabel.setText("Processing data from " + format.format(startDate) + " to " + format.format(endDate));
+						
+						// initialize target folder to the source folder
+						if (targetFolder.getText() == null || targetFolder.getText().length() == 0) {
+							targetFolder.setText(selected);
+						}
+						
+						Calendar startCal = Calendar.getInstance();
+						startCal.setTime(startDate);
+						Calendar endCal = Calendar.getInstance();
+						endCal.setTime(endDate);
+						populationSizeStartYear.setEnabled(true);
+						if(startCal.get(Calendar.YEAR) < endCal.get(Calendar.YEAR)) {
+							populationSizeEndYear.setEnabled(true);
+						}
+					} else {
+						// failed to read data - invalid data
+						statusLabel.setText(Messages.getString("PROCESSOR.FAILEDREADDATA"));
+						sourceFolder.setText("");
+					}
+				}
+				enableProcessButton();
+			}
+		});
+
+	    // target folder
+		Label targetFolderLabel = new Label(this, SWT.BORDER);
+		targetFolderLabel.setBackground(labelBackground);
+		targetFolderLabel.setText(Messages.getString("PROCESSOR.TARGETFOLDER"));
+
+		targetFolder = new Text(this, SWT.BORDER);
+		targetFolder.setBounds(10, 10, 100, 20);
+		targetFolder.setText("");
+		targetFolder.setEditable(false); // can only be selected through dialog
+
+		Button selectTargetFolderButton = new Button(this, SWT.NONE);
+	    selectTargetFolderButton.setText(Messages.getString("PROCESSOR.SELECTTARGETFOLDER"));
+		selectTargetFolderButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(shell, SWT.OPEN);
+				dd.setText(Messages.getString("PROCESSOR.SELECTTARGETFOLDEDIALOGTITLE"));
+				dd.setFilterPath(targetFolder.getText());
+				final String selected = dd.open();
+				targetFolder.setText(selected);
+				enableProcessButton();
+			}
+		});
+
+	    // population data file
+		Label populationDataFileLabel = new Label(this, SWT.BORDER);
+		populationDataFileLabel.setBackground(labelBackground);
+		populationDataFileLabel.setText(Messages.getString("PROCESSOR.POPULATIONDATAFILE"));
+
+		populationDataFile = new Text(this, SWT.BORDER);
+		populationDataFile.setBounds(10, 10, 100, 20);
+		populationDataFile.setText("");
+		populationDataFile.setEditable(false); // can only be selected through dialog
+
+		Button selectPopulationDataFileButton = new Button(this, SWT.NONE);
+		selectPopulationDataFileButton.setText(Messages.getString("PROCESSOR.SELECTPOPULATIONDATAFILE"));
+		selectPopulationDataFileButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
+				final FileDialog fd = new FileDialog(shell, SWT.OPEN);
+				fd.setText(Messages.getString("PROCESSOR.SELECTPOPULATIONDATAFILEDIALOGTITLE"));
+				fd.setFilterPath(populationDataFile.getText());
+				final String selected = fd.open();
+				populationDataFile.setText(selected);
+				enableProcessButton();
+			}
+		});
+
+		// parameters
+		Label parametersLabel = new Label(this, SWT.BORDER);
+		parametersLabel.setBackground(labelBackground);
+		parametersLabel.setText(Messages.getString("PROCESSOR.PARAMETERS"));
+
+		Composite spinnerComposite = new Composite(this, SWT.BORDER);
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = 6;
+	    spinnerComposite.setLayout(gridLayout);
+		
+		// recovery rate
+		Label recoveryRateLabel = new Label(spinnerComposite, SWT.NONE);
+		recoveryRateLabel.setText(Messages.getString("PROCESSOR.RECOVERYRATE"));
+
+		recoveryRate = new Spinner(spinnerComposite, SWT.NONE);
+		recoveryRate.setDigits(2); // allow 2 decimal places
+		recoveryRate.setMinimum(0);	// set the minimum value to 0
+		recoveryRate.setMaximum(100); // set the maximum value to 1.0
+		recoveryRate.setIncrement(1); // set the increment value to 0.01
+		recoveryRate.setSelection(20);	// set the initial value 0.2
+		recoveryRate.addModifyListener(new ModifyListener() {
+			public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+				enableProcessButton();
+			}
+		});
+
+		// susceptible rate
+		Label susceptibleRateLabel = new Label(spinnerComposite, SWT.NONE);
+		susceptibleRateLabel.setText(Messages.getString("PROCESSOR.SUSCEPTIBLERATE"));
+
+		susceptibleRate = new Spinner(spinnerComposite, SWT.NONE);
+		susceptibleRate.setDigits(3); // allow 3 decimal places
+		susceptibleRate.setMinimum(0);	// set the minimum value to 0
+		susceptibleRate.setMaximum(1000); // set the maximum value to 1.0
+		susceptibleRate.setIncrement(1); // set the increment value to 0.001
+		susceptibleRate.setSelection(333);	// set the initial value 0.001
+		susceptibleRate.addModifyListener(new ModifyListener() {
+			public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+				enableProcessButton();
+			}
+		});
+
+		// immunity loss rate
+		Label immunityLossRateLabel = new Label(spinnerComposite, SWT.NONE);
+		immunityLossRateLabel.setText(Messages.getString("PROCESSOR.IMMUNITYLOSSRATE"));
+
+		immunityLossRate = new Spinner(spinnerComposite, SWT.NONE);
+		immunityLossRate.setDigits(4); // allow 4 decimal places
+		immunityLossRate.setMinimum(0);	// set the minimum value to 0
+		immunityLossRate.setMaximum(10000); // set the maximum value to 1.0
+		immunityLossRate.setIncrement(1); // set the increment value to 0.0001
+		immunityLossRate.setSelection(9);	// set the initial value 0.0009
+		immunityLossRate.addModifyListener(new ModifyListener() {
+			public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+				enableProcessButton();
+			}
+		});
+
+		spinnerComposite.pack();
+
+		// population size
+		Label populationSizeLabel = new Label(this, SWT.BORDER);
+		populationSizeLabel.setBackground(labelBackground);
+		populationSizeLabel.setText(Messages.getString("PROCESSOR.POPULATIONSIZE"));
+
+		Composite sizeComposite = new Composite(this, SWT.BORDER);
+		gridLayout = new GridLayout();
+		gridLayout.numColumns = 4;
+	    sizeComposite.setLayout(gridLayout);
+
+		// start year
+		Label populationSizeStartYearLabel = new Label(sizeComposite, SWT.NONE);
+		populationSizeStartYearLabel.setText(Messages.getString("PROCESSOR.STARTYEAR"));
+
+		populationSizeStartYear = new Spinner(sizeComposite, SWT.NONE);
+		populationSizeStartYear.setDigits(0); // allow 0 decimal places
+		populationSizeStartYear.setMinimum(0);	// set the minimum value to 0
+		populationSizeStartYear.setMaximum(100000000); // set the maximum value to 100,000,000
+		populationSizeStartYear.setIncrement(1000); // set the increment value to 1000
+		populationSizeStartYear.setSelection(10000000);	// set the initial value 10,000,000
+		populationSizeStartYear.setEnabled(false);
+		populationSizeStartYear.addModifyListener(new ModifyListener() {
+			public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+				enableProcessButton();
+			}
+		});
+
+		// end year
+		Label populationSizeEndYearLabel = new Label(sizeComposite, SWT.NONE);
+		populationSizeEndYearLabel.setText(Messages.getString("PROCESSOR.ENDYEAR"));
+
+		populationSizeEndYear = new Spinner(sizeComposite, SWT.NONE);
+		populationSizeEndYear.setDigits(0); // allow 0 decimal places
+		populationSizeEndYear.setMinimum(0);	// set the minimum value to 0
+		populationSizeEndYear.setMaximum(100000000); // set the maximum value to 100,000,000
+		populationSizeEndYear.setIncrement(1000); // set the increment value to 1000
+		populationSizeEndYear.setSelection(10000000);	// set the initial value 10,000,000
+		populationSizeEndYear.setEnabled(false);
+		populationSizeEndYear.addModifyListener(new ModifyListener() {
+			public void modifyText(@SuppressWarnings("unused") final ModifyEvent e) {
+				enableProcessButton();
+			}
+		});
+
+		sizeComposite.pack();
+	    
+		// process button
+		processButton = new Button(this, SWT.NONE);
+		processButton.setText(Messages.getString("PROCESSOR.PROCESS"));
+		processButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(@SuppressWarnings("unused") final SelectionEvent e) {
+				try {
+					DataProcessor processor = new DataProcessor();
+					processor.process(
+							sourceFolder.getText(), 
+							targetFolder.getText(), 
+							startDate, 
+							endDate, 
+							populationDataFile.getText(), 
+							Long.parseLong(populationSizeStartYear.getText()), 
+							Long.parseLong(populationSizeEndYear.getText()),
+							Double.parseDouble(recoveryRate.getText()), 
+							Double.parseDouble(susceptibleRate.getText()),
+							Double.parseDouble(immunityLossRate.getText()));
+					statusLabel.setText(Messages.getString("COMMON.DONE"));
+				} catch(ScenarioInitializationException ex) {
+					statusLabel.setText(ex.getMessage());
+				}
+			}
+		});
+		enableProcessButton();
+
+		createFormData(null, identifiableTitle, null, null, 5);
+		createFormData(identifiableTitle, sourceFolderLabel, sourceFolder, selectSourceFolderButton, 10);
+		createFormData(sourceFolderLabel, targetFolderLabel, targetFolder, selectTargetFolderButton, 15);
+		createFormData(targetFolderLabel, populationDataFileLabel, populationDataFile, selectPopulationDataFileButton, 20);
+		createFormData(populationDataFileLabel, parametersLabel, spinnerComposite, null, 25);
+		createFormData(parametersLabel, populationSizeLabel, sizeComposite, null, 30);
+		createFormData(populationSizeLabel, null, null, processButton, 35);
+		createFormData(processButton, statusLabel, null, null, 100);
+
+	} // createContents
+	
+	/**
+	 * Enable or disable the process button
+	 */
+	void enableProcessButton() {
+		
+		boolean enabled = true;
+		if (enabled && (sourceFolder.getText() == null || sourceFolder.getText().length() == 0))
+			enabled = false;
+		if (enabled && (targetFolder.getText() == null || targetFolder.getText().length() == 0))
+			enabled = false;
+		if (enabled && (populationDataFile.getText() == null || populationDataFile.getText().length() == 0))
+			enabled = false;
+		if (enabled && (recoveryRate.getText() == null || recoveryRate.getText().length() == 0))
+			enabled = false;
+		if (enabled && (susceptibleRate.getText() == null || susceptibleRate.getText().length() == 0))
+			enabled = false;
+		if (enabled && (immunityLossRate.getText() == null || immunityLossRate.getText().length() == 0))
+			enabled = false;
+		if (enabled && (populationSizeStartYear.getText() == null || populationSizeStartYear.getText().length() == 0))
+			enabled = false;
+		if (enabled && (populationSizeEndYear.getText() == null || populationSizeEndYear.getText().length() == 0))
+			enabled = false;
+		this.processButton.setEnabled(enabled);
+	
+	} // enableProcessButton
+	
+	/**
+	 * Initializes the start and end dates of the data.
+	 */
+	protected void initializeDates() {
+	
+		startDate = null;
+		endDate = null;
+
+		File file = new File(sourceFolder.getText());
+		
+		File[] allFiles = file.listFiles();
+		for (int i = 0; i < allFiles.length; i++) {
+			String fileName = allFiles[i].getName();
+			if (fileName.indexOf(".txt") >= 0) {
+				BufferedReader fileReader = DataProcessor.openReader(allFiles[i]);
+				if (fileReader != null) {
+					try {
+						String buffer = null;
+						fileReader.readLine(); // skip the header
+						while (DataProcessor.EOF(buffer = fileReader.readLine()) != true) {
+							StringTokenizer tokenizer = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+							if(tokenizer.countTokens() == 3) {
+								tokenizer.nextToken(","); // iteration
+								String time = tokenizer.nextToken(",");
+								tokenizer.nextToken(","); // incidence
+								
+								if(time!= null) {
+									DateFormat format = new SimpleDateFormat(TIME_FORMAT);
+									Date date = format.parse(time);
+									if(startDate == null || date.before(startDate)) {
+										startDate = date;
+									}
+									if(endDate == null || date.after(endDate)) {
+										endDate = date;
+									}
+								}
+							}
+						}
+					} catch(Exception ex) {
+						// ignore
+					}
+				} // if ! null
+			} // if valid filename
+		} // for
+		
+	} // initializeDates
+
+	/**
+	 * Constructs a new instance of FormData which contains Label, Control and Button.
+	 * 
+	 * @param topControl The control at the top of this FormData
+	 * @param label The label of this FormData
+	 * @param text The control of this FormData
+	 * @param button The button of this FormData
+	 * @param bottom The percentage of the position of this FormData
+	 */
+	private void createFormData(Control topControl, Label label, Control text, Button button, int bottom) { 
+
+		// label
+		if (label != null) {
+			final FormData labelFormData = new FormData();
+			if (topControl != null)
+				labelFormData.top = new FormAttachment(topControl, 0);
+			else
+				labelFormData.top = new FormAttachment(0, 0);
+			labelFormData.bottom = new FormAttachment(bottom, 0);
+			labelFormData.left = new FormAttachment(0, 0);
+			int numerator = 15;
+			if (text == null && button == null)
+				numerator = 100;
+			labelFormData.right = new FormAttachment(numerator, 0);
+			label.setLayoutData(labelFormData);
+		}
+		
+		// text field
+		if (text != null) {
+			final FormData textFieldFormData = new FormData();
+			if (topControl != null)
+				textFieldFormData.top = new FormAttachment(topControl, 0);
+			else
+				textFieldFormData.top = new FormAttachment(0, 0);
+			textFieldFormData.bottom = new FormAttachment(bottom, 0);
+			if (label != null)
+				textFieldFormData.left = new FormAttachment(label, 0);
+			else
+				textFieldFormData.left = new FormAttachment(0, 0);
+			int numerator = 80;
+			if (button == null)
+				numerator = 100;
+			textFieldFormData.right = new FormAttachment(numerator, 0);
+			text.setLayoutData(textFieldFormData);
+		}
+		
+		// selection button
+		if (button != null) {
+			final FormData buttonFormData = new FormData();		
+			if (topControl != null)
+				buttonFormData.top = new FormAttachment(topControl, 0);
+			else
+				buttonFormData.top = new FormAttachment(0, 0);
+			buttonFormData.bottom = new FormAttachment(bottom, 0);
+			if (text != null)
+				buttonFormData.left = new FormAttachment(text, 0);
+			else if (label != null)
+				buttonFormData.left = new FormAttachment(label, 0);
+			else
+				buttonFormData.left = new FormAttachment(0, 0);
+			buttonFormData.right = new FormAttachment(100, 0);
+			button.setLayoutData(buttonFormData);
+		}
+
+	} // createFormData
+	
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#remove()
+	 */
+	public void remove() {
+		// do nothing for now
+	} // remove
+
+	/**
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#initializeHeader(String)
+	 */
+	protected void initializeHeader(@SuppressWarnings("unused") String folderName) {
+		// do nothing for now
+	} // initializeHeader
+
+	/**
+	 * Not used
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getValues(int, int)
+	 */
+	@Override
+	public double[] getValues(@SuppressWarnings("unused")int chartIndex, @SuppressWarnings("unused")int trajectory) {
+		return null;
+	} // getValues
+	
+	/**
+	 * Not used
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getProperty(int, int)
+	 */
+	public String getProperty(@SuppressWarnings("unused") int chartIndex, @SuppressWarnings("unused") int state) {
+		return null;
+	} // getProperty
+	
+	/**
+	 * Not used
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getNumProperties(int chartIndex)
+	 */
+	public int getNumProperties(@SuppressWarnings("unused") int chartIndex) {
+		return 0;
+	} // getNumProperties
+
+	/**
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getControlParametersMap()
+	 */
+	public Map<String, Object> getControlParametersMap() {
+
+		// add nothing for now
+		return controlParametersMap;
+	} // getControlParametersMap
+	
+} // ProcessorControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorFactory.java
new file mode 100644
index 0000000..7b1eaad
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorFactory.java
@@ -0,0 +1,51 @@
+// ProcessorFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link ProcessorControl} instances.
+ */
+public class ProcessorFactory implements AnalysisControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static ProcessorFactory INSTANCE = new ProcessorFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String ANALYSIS_TYPE = "Processor";
+	
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @return new ProcessorControl()
+	 */
+	public AnalysisControl create(final Composite parent, String dirName) {
+				
+		return new ProcessorControl(parent);
+	}
+
+	/**
+	 * @return type of analysis
+	 * 
+	 */
+	public String getControlType() {
+		return ANALYSIS_TYPE;
+	}
+
+} // ProcessorFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorView.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorView.java
new file mode 100644
index 0000000..2df1956
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ProcessorView.java
@@ -0,0 +1,63 @@
+// ProcessorView 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view provides a tool to estimate parameters for a set of reference data
+ */
+public class ProcessorView extends ViewPart {
+
+	/**
+	 * The identifier of the Processor View {@value}
+	 */
+	public static final String ID_Processor_VIEW = "org.eclipse.stem.util.analysis.views.processor"; //$NON-NLS-1$
+
+	private AnalysisViewer analysisViewer;
+
+	/**
+//	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		analysisViewer = new AnalysisViewer(parent, ProcessorFactory.INSTANCE);
+		analysisViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(analysisViewer);
+
+	} // createPartControl
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // ProcessorView
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ReportsContextMenuAction.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ReportsContextMenuAction.java
new file mode 100644
index 0000000..5af8d95
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ReportsContextMenuAction.java
@@ -0,0 +1,64 @@
+// ReportsContextMenuAction 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.ui.views.geographic.map.SelectedReportsManager;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * The class is a delegation for the popup menu of the
+ * <code>GeographicRenderer</code>. The purpose of this class is to handle
+ * the activity in the reports context menu and keep the current state of all
+ * enabled/disabled reports from that menu. The report's <code>ViewPart</code>
+ * object will use this class for checking whether to generate a report or not.
+ */
+public class ReportsContextMenuAction 
+	implements IViewActionDelegate {
+	
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(org.eclipse.jface.action.IAction action) {
+		String reportId = action.getId();
+		
+		if (SelectedReportsManager.getInstance().isReportEnabled(reportId)) { // The report was previously enabled so disable it
+			SelectedReportsManager.getInstance().disableReportForIdentifiable(reportId);
+			action.setChecked(false);
+		}
+		else
+		{
+			SelectedReportsManager.getInstance().enableReportForIdentifiable(reportId);
+			action.setChecked(true);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(@SuppressWarnings("unused")
+	org.eclipse.jface.action.IAction action,
+			@SuppressWarnings("unused")
+			org.eclipse.jface.viewers.ISelection selection) {
+		// Do Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(@SuppressWarnings("unused")
+	IViewPart arg0) {
+		// Do Nothing
+	}
+}
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonControl.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonControl.java
new file mode 100644
index 0000000..dd3abba
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonControl.java
@@ -0,0 +1,504 @@
+// EstimatorControl.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.stem.analysis.ErrorResult;
+import org.eclipse.stem.analysis.ScenarioInitializationException;
+import org.eclipse.stem.util.analysis.Activator;
+import org.eclipse.stem.util.analysis.CSVAnalysisWriter;
+import org.eclipse.stem.util.analysis.ScenarioAnalysisSuite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * This class is a SWT GUI component that uses BIRT to plot
+ */
+public class ScenarioComparisonControl extends AnalysisControl {
+	
+	/**
+	 * used to identify user preferences for this class
+	 */
+	private static final String CONSUMER = "SCENARIOCOMPARISON_CONTROL";
+	
+	/**
+	 * used to remember the primary directory in the user preferences
+	 */
+	private static final String PRIMARY_FOLDER_KEY = CONSUMER+"_PRIMARY";
+	/**
+	 * used to remember the secondary directory in the user preferences
+	 */
+	private static final String SECONDARY_FOLDER_KEY = CONSUMER+"_SECONDARY";
+
+	/**
+	 *  First Scenario Label - indicates number of regions being watched for analysis.
+	 *  There are locations with relative value history providers attached
+	 */
+	Label firstScenarioFolderLabel;
+	
+	/**
+	 *  Second Scenario Label - indicates number of regions being watched for analysis.
+	 *  There are locations with relative value history providers attached
+	 */
+	Label secondScenarioFolderLabel;
+	
+	/**
+	 * First input text field for the scenario folder of data to use in making the estimation
+	 */
+	Text text1;
+	
+
+	/**
+	 * Second Input text field for the scenario folder of data to be compared
+	 **/
+	Text text2;
+	
+	
+	
+	/**
+	 * Results of analysis
+	 */
+	Label statusLabel;
+	
+	/**
+	 * Label for line series Y axis
+	 */
+	
+	/**
+	 * Colors for the time series chart
+	 */
+	static final ColorDefinition foreGround = ColorDefinitionImpl.WHITE();
+	static final ColorDefinition backgroundGround = ColorDefinitionImpl.BLACK();
+	static final ColorDefinition frameColor = ColorDefinitionImpl.create(180, 180, 200);
+	
+	/**
+	 * the chart of results
+	 */
+	static TimeSeriesCanvas timeSeriesCanvas;
+	
+	
+	
+	/**
+	 * the results of various scenario comparisons
+	 * TODO: eventually this might be a map keyed by comparison id
+	 * for now there is only one comparison, the mean square difference.
+	 */
+	List<EList<Double>> comparisonValues = new ArrayList<EList<Double>>();
+	
+	private static final String COMPARISON_FILE_NAME = "RMSCompare";
+	private static final String SELECT_FOLDER_DIALOG_TEXT = "Pick a scenario folder";
+	
+	ScenarioAnalysisSuite analyzer = new ScenarioAnalysisSuite(this);
+	
+	/**
+	 * 
+	 * @param parent
+	 */
+	public ScenarioComparisonControl(final Composite parent) {
+		super(parent, SWT.None);
+		createContents();
+	} // EstimatorControl
+
+	/**
+	 * Create the contents of the plotter
+	 */
+	private void createContents() {
+		setLayout(new FormLayout());
+
+		identifiableTitle = new Label(this, SWT.NONE);
+		identifiableTitle.setText(Messages.getString("COMP.TITLE"));
+		//propertySelector = new PropertySelector(this, SWT.NONE);
+		Display display = this.getDisplay();
+		
+		Color labelBackground = new Color(display, new RGB(180, 180, 200));
+		
+		statusLabel = new Label(this, SWT.BORDER);
+		statusLabel.setBackground(labelBackground);
+		statusLabel.setText("");
+		
+		firstScenarioFolderLabel = new Label(this, SWT.BORDER);
+		firstScenarioFolderLabel.setBackground(labelBackground);
+		firstScenarioFolderLabel.setText(Messages.getString("COMP.FOLDER1LABEL"));
+		
+		text1 = new Text(this, SWT.BORDER);
+	    text1.setBounds(10, 10, 100, 20);
+	    String primaryDir=prefs.getRecentFolder(PRIMARY_FOLDER_KEY);
+	    text1.setText(primaryDir);
+	    
+	    secondScenarioFolderLabel = new Label(this, SWT.BORDER);
+	    secondScenarioFolderLabel.setBackground(labelBackground);
+	    secondScenarioFolderLabel.setText(Messages.getString("COMP.FOLDER2LABEL"));
+		
+		text2 = new Text(this, SWT.BORDER);
+	    text2.setBounds(10, 10, 100, 20);
+	    String secondaryDir=prefs.getRecentFolder(SECONDARY_FOLDER_KEY);
+	    text2.setText(secondaryDir);
+
+	    Composite analyzeButtonComposite = getAnalyzeButtonComposite(this,Messages.getString("COMP.ANALYZE"));
+
+		statusLabel = new Label(this, SWT.SHADOW_OUT);
+		statusLabel.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
+		statusLabel.setText(Messages.getString("COMP.RESULTS"));
+		
+		int deltaBottom = 5;
+        int bottom = deltaBottom;
+		
+		final FormData titleFormData = new FormData();
+		identifiableTitle.setLayoutData(titleFormData);
+		titleFormData.top = new FormAttachment(0, 0);
+		titleFormData.bottom = new FormAttachment(bottom, 0);
+		titleFormData.left = new FormAttachment(0, 0);
+		titleFormData.right = new FormAttachment(100, 0);
+
+		bottom += deltaBottom;
+        /////////////////////////////////////////////////////////////////////////
+		// TextField folder label
+		final FormData firstScenarioFolderLabelFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(cSVLoggerCanvas,
+		// 0);
+		firstScenarioFolderLabelFormData.top = new FormAttachment(identifiableTitle, 0);
+		firstScenarioFolderLabelFormData.bottom = new FormAttachment(bottom, 0);
+		firstScenarioFolderLabelFormData.left = new FormAttachment(0, 0);
+		firstScenarioFolderLabelFormData.right = new FormAttachment(15, 0);
+		firstScenarioFolderLabel.setLayoutData(firstScenarioFolderLabelFormData);
+		// first text field for parameter Estimator
+		final FormData text1FormData = new FormData();
+		text1FormData.top = new FormAttachment(identifiableTitle, 0);
+		text1FormData.bottom = new FormAttachment(bottom, 0);
+		text1FormData.left = new FormAttachment(firstScenarioFolderLabel, 0);
+		text1FormData.right = new FormAttachment(75, 0);
+		text1.setLayoutData(text1FormData);
+		
+	
+		Button selectFolder1Button = new Button(this, SWT.NONE);
+		selectFolder1Button.setText(Messages.getString("COMP.SELECTFOLDERBUTTON"));
+		final FormData selectFolder1FormData = new FormData();
+		selectFolder1FormData.top = new FormAttachment(identifiableTitle, 0);
+		selectFolder1FormData.bottom = new FormAttachment(bottom, 0);
+		selectFolder1FormData.left = new FormAttachment(text1, 0);
+		selectFolder1FormData.right = new FormAttachment(100, 0);
+		selectFolder1Button.setLayoutData(selectFolder1FormData);
+		
+		final Shell shell = this.getShell();
+	
+		selectFolder1Button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(SELECT_FOLDER_DIALOG_TEXT); //$NON-NLS-1$
+					dd.setFilterPath(text1.getText());
+					final String selected = dd.open();
+					text1.setText(selected);
+			}
+		});
+		
+	
+		
+        /////////////////////////////////////////////////////////////////////////
+		
+		bottom += deltaBottom;
+		
+        /////////////////////////////////////////////////////////////////////////
+		// TextField folder label
+		final FormData secondScenarioFolderLabelFormData = new FormData();
+		// propertySelectorFormData.top = new FormAttachment(cSVLoggerCanvas,
+		// 0);
+		secondScenarioFolderLabelFormData.top = new FormAttachment(firstScenarioFolderLabel, 0);
+		secondScenarioFolderLabelFormData.bottom = new FormAttachment(bottom, 0);
+		secondScenarioFolderLabelFormData.left = new FormAttachment(0, 0);
+		secondScenarioFolderLabelFormData.right = new FormAttachment(15, 0);
+		secondScenarioFolderLabel.setLayoutData(secondScenarioFolderLabelFormData);
+		// first text field for parameter Estimator
+		final FormData text2FormData = new FormData();
+		text2FormData.top = new FormAttachment(text1, 0);
+		text2FormData.bottom = new FormAttachment(bottom, 0);
+		text2FormData.left = new FormAttachment(secondScenarioFolderLabel, 0);
+		text2FormData.right = new FormAttachment(75, 0);
+		text2.setLayoutData(text2FormData);
+		
+		Button selectFolder2Button = new Button(this, SWT.NONE);
+		selectFolder2Button.setText(Messages.getString("COMP.SELECTFOLDERBUTTON"));
+		final FormData selectFolder2FormData = new FormData();
+		selectFolder2FormData.top = new FormAttachment(text1, 0);
+		selectFolder2FormData.bottom = new FormAttachment(bottom, 0);
+		selectFolder2FormData.left = new FormAttachment(text2, 0);
+		selectFolder2FormData.right = new FormAttachment(100, 0);
+		selectFolder2Button.setLayoutData(selectFolder2FormData);
+		
+		selectFolder2Button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				final DirectoryDialog dd = new DirectoryDialog(
+						shell, SWT.OPEN);
+					dd.setText(Messages.getString("COMP.SELECTFOLDERDIALOG")); //$NON-NLS-1$
+					dd.setFilterPath(text2.getText());
+					final String selected = dd.open();
+					text2.setText(selected);
+			}
+		});
+		
+		/////////////////////////////////////////////////////////////////////////
+		
+		bottom += deltaBottom;
+		// AnalyzeButton
+		final FormData analysisButtonFormData = new FormData();
+		// propertySelectorFormDataX.top = new FormAttachment(propertySelectorY,
+		// 0);
+		analysisButtonFormData.top = new FormAttachment(text2, 0);
+		analysisButtonFormData.bottom = new FormAttachment(bottom, 0);
+		analysisButtonFormData.left = new FormAttachment(0, 0);
+		analysisButtonFormData.right = new FormAttachment(100, 0);
+		analyzeButtonComposite.setLayoutData(analysisButtonFormData);
+		
+		
+		
+		// Results Graph
+		timeSeriesCanvas = new TimeSeriesCanvas(this,
+													Messages.getString("COMP.RMSDIFFERENCELABEL"),
+													Messages.getString("COMP.RMSSTRING"),
+													Messages.getString("COMP.RMSSTRING"),
+													foreGround,
+													backgroundGround,
+													frameColor, 0);
+		
+		final FormData chartFormData = new FormData();
+		timeSeriesCanvas.setLayoutData(chartFormData);
+		chartFormData.top = new FormAttachment(bottom, 0);
+		chartFormData.bottom = new FormAttachment(90, 0);
+		chartFormData.left = new FormAttachment(0, 0);
+		chartFormData.right = new FormAttachment(100, 0);
+		
+		/*
+		final FormData resultsSelectorFormData = new FormData();
+		resultsSelectorFormData.top = new FormAttachment(analyzeButton, 0);
+		resultsSelectorFormData.bottom = new FormAttachment(bottom, 0);
+		resultsSelectorFormData.left = new FormAttachment(0, 0);
+		resultsSelectorFormData.right = new FormAttachment(100, 0);
+		statusLabel.setLayoutData(resultsSelectorFormData);
+		*/
+		// Status label
+		final FormData statusFormData = new FormData();
+		statusFormData.top = new FormAttachment(90, 0);
+		statusFormData.bottom = new FormAttachment(100, 0);
+		statusFormData.left = new FormAttachment(0, 0);
+		statusFormData.right = new FormAttachment(100, 0);
+		statusLabel.setLayoutData(statusFormData);
+		
+		
+		final ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(this.getShell());
+
+		analyzeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				
+				// reinitialize the status label
+				statusLabel.setText(AnalysisControl.STATUS_TEXT);
+				/*
+				 * reinitialize the graph
+				 */
+				comparisonValues.clear();
+				timeSeriesCanvas.reset();
+				
+				String referenceDirectory  = text1.getText();
+				String comparisonDirectory = text2.getText();
+				
+				/*
+				 * VALIDATE the text input Fields
+				 */
+				if(!analyzer.validate(referenceDirectory)) {
+					statusLabel.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+					text1.setText("");
+				}
+                if(!analyzer.validate(comparisonDirectory)) {
+                	statusLabel.setText(ScenarioAnalysisSuite.NOT_FOUND_MSG);
+                	text2.setText("");
+				}
+                if((!analyzer.validate(referenceDirectory)) || (!analyzer.validate(comparisonDirectory))) {
+                	return;
+                }
+                
+                ErrorResult result=null;
+                try {
+                	result = analyzer.compare(referenceDirectory, comparisonDirectory, progressDialog);
+                	if(result !=null) {
+                		comparisonValues.add(result.getErrorByTimeStep());
+                	}
+                	
+                	//success... remember the users prefs
+					prefs.setRecentFolder(PRIMARY_FOLDER_KEY,referenceDirectory);
+					prefs.setRecentFolder(SECONDARY_FOLDER_KEY,comparisonDirectory);
+                } catch(ScenarioInitializationException sie) {
+                	Activator.logError("", sie);
+                }
+				
+				timeSeriesCanvas.draw();
+				
+				String outFileName = COMPARISON_FILE_NAME+"_"+
+									 getScenarioNameFromDirectoryName(referenceDirectory)+
+									 "_"+
+									 getScenarioNameFromDirectoryName(comparisonDirectory);
+									 
+				CSVAnalysisWriter writer = new CSVAnalysisWriter(outFileName);
+			    writer.logData(comparisonValues);
+			    String results = "RMS Difference = ";
+			    if(result !=null) {
+			    	results += result.getError();
+			    }
+			    
+				statusLabel.setText(results);
+			}
+		});
+		
+	} // createContents
+	
+	
+	
+	
+	/**
+	 * @param dirName
+	 * @return short name of scenario
+	 */
+	public static String getScenarioNameFromDirectoryName(String dirName) {
+		int last = dirName.lastIndexOf("/");
+		int last2 =  dirName.lastIndexOf("\\");
+		if(last2>last) last = last2;
+		if(last <=0 ) last = 0;
+		String retVal = dirName.substring(last+1, dirName.length());
+		return retVal;
+	}
+	
+	/**
+	 * This returns the results of a comparison of type comparisonType
+	 * as an array of double. 
+	 * TODO for now there is only one type, the MEAN SQ Diff
+	 * @param chartIndex not used (only one chart)
+	 * @param comparisonType
+	 * @return Cumulative deviation from reference trajectory
+	 */
+	@SuppressWarnings("boxing")
+	@Override
+	public double[] getValues(int chartIndex, int comparisonType) {
+		if((comparisonValues==null)||(comparisonValues.size()==0)) return new double[0];
+		EList<Double> r = comparisonValues.get(0);
+		double []result = new double[r.size()];
+		for(int i=0;i<r.size();++i) result[i]=r.get(i);
+		return result;
+	}
+	
+
+	/**
+	 * 
+	 * @param chartIndex not used (only one chart)
+	 * @param state
+	 * @return property name
+	 */
+	@Override
+	public String getProperty(int chartIndex, int state) {
+		return Messages.getString("COMP.RMSSTRING");
+	}
+	
+	/**
+	 * Only one property to plot = the RMS difference
+	 * @param chartIndex not used (only one chart)
+	 * @return the number of properties
+	 * @see org.eclipse.stem.util.analysis.views.AnalysisControl#getNumProperties(int chartIndex)
+	 */
+	@Override
+	public int getNumProperties(int chartIndex) {
+		return 1;
+	}
+
+	
+	
+	
+	
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	public void remove() {
+		updateStatusLabel();
+	}
+
+	
+	
+
+	protected void updateStatusLabel() {
+		statusLabel.setText(AnalysisControl.STATUS_TEXT);
+	}
+	
+	
+
+	/**
+	 * Initialize the header label
+	 * 
+	 * @param folderName
+	 */
+	@Override
+	protected void initializeHeader(String folderName) {
+		simulationNameLabel.setText("analyzing "+folderName);
+
+	} // initializeFromSimulation
+
+
+	
+	
+	
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+						
+		super.dispose();
+		
+	} // dispose
+
+
+	
+	/**
+	 * Each Control class may add objects to this map
+	 * @return the control parameters maps
+	 */
+	public Map<String, Object> getControlParametersMap() {
+		// add nothing for now
+		return controlParametersMap;
+	}
+	
+
+} // EstimatorControl
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonFactory.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonFactory.java
new file mode 100644
index 0000000..c4911be
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonFactory.java
@@ -0,0 +1,53 @@
+// EstimatorFactory.java
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link AnalysisControl} instances.
+ */
+public class ScenarioComparisonFactory implements AnalysisControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static ScenarioComparisonFactory INSTANCE = new ScenarioComparisonFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String ANALYSIS_TYPE = "PhaseSynchronizer";
+	
+
+	/**
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @return new ScenarioComparisonControl()
+	 */
+	public AnalysisControl create(final Composite parent, String dirName) {
+				
+		return new ScenarioComparisonControl(parent);
+	}
+	
+
+	/**
+	 * @return type of analysis
+	 * 
+	 */
+	public String getControlType() {
+		return ANALYSIS_TYPE;
+	}
+
+} // EstimatorFactory
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonView.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonView.java
new file mode 100644
index 0000000..1d29f2e
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/ScenarioComparisonView.java
@@ -0,0 +1,70 @@
+// EstimatorView 
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view provides for a Cross PhaseSynchronizer analysis, comparing two scenarios
+ */
+
+public class ScenarioComparisonView extends ViewPart {
+
+
+	/**
+	 * The identifier of the Comparison View {@value}
+	 */
+	public static final String ID_Comparison_VIEW = "org.eclipse.stem.util.analysis.views.comparison"; //$NON-NLS-1$
+
+
+
+	private AnalysisViewer analysisViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		analysisViewer = new AnalysisViewer(parent, ScenarioComparisonFactory.INSTANCE);
+		analysisViewer.setInput(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(analysisViewer);
+
+
+	} // createPartControl
+
+	
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // EstimatorView
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/TimeSeriesCanvas.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/TimeSeriesCanvas.java
new file mode 100644
index 0000000..8d3dee4
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/TimeSeriesCanvas.java
@@ -0,0 +1,1236 @@
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.Anchor;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.LineAttributes;
+import org.eclipse.birt.chart.model.attribute.LineStyle;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.LineSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.stem.util.analysis.Activator;
+import org.eclipse.stem.util.analysis.AggregateDataWriter;
+import org.eclipse.stem.util.analysis.ScenarioAnalysisSuite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * TimeSeriesCanvas is a subclass of {@link Canvas} suitable for chart drawings.
+ */
+public class TimeSeriesCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The provider of relative values.
+	 */
+	//private RelativeValueHistoryProvider rvhp;
+
+	private AnalysisControl control = null;
+	
+	/**
+	 * the index of this Chart
+	 */
+	private int chartIndex = 0;
+	
+
+	private static String defaultKey = AggregateDataWriter.getKeyS();
+
+	/**
+	 * some extra colors
+	 */
+	protected static final ColorDefinition[] colorDefault = {
+															ColorDefinitionImpl.BLUE(), 
+															ColorDefinitionImpl.BLACK(), 
+															ColorDefinitionImpl.GREY(),
+															ColorDefinitionImpl.CYAN(),
+															ColorDefinitionImpl.ORANGE() 
+															};
+	/**
+	 * used if we need to overlay traces in different colors
+	 */
+	private boolean overlayMode = false;
+	
+	/**
+	 * used to index the line series so we can step through default colors
+	 * when a user custom color is not yet assigned
+	 */
+	private int seriesCount  = 0;
+	
+
+	/**
+	 * A context menu for this view
+	 */
+	Menu popUpMenu = null;
+	
+	/**
+	 * set y axis to a linear scale
+	 */
+	private LinearScaleAction linearTimeAction;
+	/**
+	 * set y axis to a log scale
+	 */
+	private LogScaleAction logTimeAction;
+	protected boolean useLinearTimeScale = true;
+	
+
+	/**
+	 * show the legend (true by default)
+	 */
+	private LegendViewAction viewLegend;
+
+	/**
+	 * hide the legend 
+	 */
+	private LegendHideAction hideLegend;
+	protected boolean showLegend = true;
+
+	protected Legend legend = null;
+	
+
+	/**
+	 * this is a map of the DataSeries object (keyed by property name)
+	 */
+	protected final Map<String,DataSeries> dataSeriesMap = new HashMap<String,DataSeries>();
+	
+	/**
+	 * Keep track of which timeseries are visible
+	 */
+	
+	protected Map<String, Boolean>visibleMap =  new HashMap<String,Boolean>();
+
+
+	/**
+	 * These are the cycle numbers that match the relative values that will be
+	 * plotted
+	 * 
+	 * @see #relativeValues
+	 */
+	private final List<Integer> cycleNumbers = new ArrayList<Integer>();
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	Axis yAxisPrimary;
+	Axis xAxisPrimary;
+	/**
+	 * the maxY value for scaling
+	 */
+	double maxY = -1.0;
+
+	/**
+	 * Log of zero is negative infinity so for each location we will cut off the minimum 
+	 * at the min NONZERO Y value
+	 */
+	private double minYscale = 1.0;
+	
+	
+	/**
+	 * Label for line series LEGEND
+	 */
+	public String Ordinate_LEGEND = "Y";
+	
+	/**
+	 * Label for line series Y axis label
+	 **/
+	public String Ordinate_AXIS = "Y";
+	
+	/** 
+	 * customizable color definitions
+	 */
+	private ColorDefinition foreGround = ColorDefinitionImpl.WHITE();
+	private ColorDefinition backgroundGround = ColorDefinitionImpl.BLACK();
+	private ColorDefinition frameColor = ColorDefinitionImpl.create(180, 180, 200);
+
+	Image imgChart = null;
+	
+	/**
+	 * This Constructor is used when we want to place the time series in a container
+	 * which is a sub component of the actual AnalysisControl
+	 * @param analysisControl 
+	 * 
+	 * @param parent  the SWT parent of the {@link Widget}
+	 * @param ordinateString 
+	 * @param yAxisLabel 
+	 * @param defaultYDataType 
+	 * @param foreground 
+	 * @param background 
+	 * @param framecolor 
+	 * @param chartIndex the index of this chart (0 if only one)
+	 * @param overlayMode used if we need to overlay traces in different colors
+	 */
+	public TimeSeriesCanvas(final AnalysisControl analysisControl, final Composite parent, 
+			final String ordinateString, 
+			final String yAxisLabel, 
+			final String defaultYDataType,
+			ColorDefinition foreground,
+			ColorDefinition background,
+			ColorDefinition framecolor,
+			int chartIndex,
+			boolean overlayMode	) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		Ordinate_LEGEND = ordinateString;
+		Ordinate_AXIS = yAxisLabel;
+		defaultKey = defaultYDataType;
+		foreGround 			= foreground;
+		backgroundGround 	= background;
+		frameColor 			= framecolor;
+		this.chartIndex = chartIndex;
+		this.overlayMode = overlayMode;
+		
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = analysisControl;
+
+		
+		cm = createSimpleLineChart(dataSeriesMap, cycleNumbers, Messages
+				.getString("CC.title")); //$NON-NLS-1$
+		
+		resetData();
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+			} // paintControl
+		} // PaintListener
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+		
+
+	} // TimeSeriesCanvas
+	/**
+	 * Constructor.
+	 * 
+	 * @param parent  the SWT parent of the {@link Widget}
+	 * @param ordinateString 
+	 * @param yAxisLabel 
+	 * @param defaultYDataType 
+	 * @param foreground 
+	 * @param background 
+	 * @param framecolor 
+	 * @param chartIndex the index of this chart (0 if only one)
+	 *  
+	 */
+	public TimeSeriesCanvas(final Composite parent, 
+			final String ordinateString, 
+			final String yAxisLabel, 
+			final String defaultYDataType,
+			ColorDefinition foreground,
+			ColorDefinition background,
+			ColorDefinition framecolor,
+			int chartIndex) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		Ordinate_LEGEND = ordinateString;
+		Ordinate_AXIS = yAxisLabel;
+		defaultKey = defaultYDataType;
+		foreGround 			= foreground;
+		backgroundGround 	= background;
+		frameColor 			= framecolor;
+		this.chartIndex = chartIndex;
+		
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = (AnalysisControl) parent;
+
+		
+		cm = createSimpleLineChart(dataSeriesMap, cycleNumbers, Messages
+				.getString("CC.title")); //$NON-NLS-1$
+		
+		resetData();
+		
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+				
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+			} // paintControl
+		} // PaintListener
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+		
+
+	} // TimeSeriesCanvas
+
+	
+	
+	/**
+	 * The method which gets the {@link TimeSeriesCanvas}' reports list, and
+	 * draws it on the {@link TimeSeriesCanvas}.
+	 * @return integratedDifference for each line series
+	 * 
+	 */
+	public double[] draw() {
+		
+		//clearData();
+		resetData();
+
+		yAxisPrimary.getSeriesDefinitions().clear();
+		
+		int maxLines = control.getNumProperties(chartIndex);
+	
+		// add all the rest of the line series now
+		for (int i = 0; i < maxLines; i ++) {
+			String property = control.getProperty(chartIndex,i);
+			
+			if(!dataSeriesMap.containsKey(property)) {
+				// new property
+				DataSeries series = new DataSeries(property, seriesCount, overlayMode);
+				if(visibleMap.containsKey(property))
+						series.setVisible(visibleMap.get(property));
+				else {
+					series.setVisible(true);
+					visibleMap.put(property, true);
+				}
+				seriesCount ++;
+				dataSeriesMap.put(property, series);
+			}
+			DataSeries series = dataSeriesMap.get(property);
+			if(series.isVisible()) {
+				series.show();
+			} else {
+				series.hide();
+			}
+		}
+	
+
+		// update the context menu with the new properties to plot
+		updateContextMenu(this);
+		
+		
+		
+		double[] integratedDifference = new double[maxLines];
+		for (int i = 0; i < maxLines; i++) {
+			integratedDifference[i] = 0.0;
+		}
+		
+		maxY = -1.0;
+		
+			boolean setCycles = false;
+			// Get the values for the property to be plotted
+			int maxPoints = 0;
+			
+			for (int i = 0; i < maxLines; i++) {
+				String property = control.getProperty(chartIndex,i);
+				final double[] doubleValues = control.getValues(chartIndex,i);
+				
+				DataSeries series = dataSeriesMap.get(property);
+				
+				if(dataSeriesMap.get(property).isVisible() == true) { 
+					for (int j = 0; j < doubleValues.length; j++) {
+						integratedDifference[i] += doubleValues[j];
+						
+						if(doubleValues[j] <= minYscale) {
+							if(doubleValues[j] > 0.0) minYscale = doubleValues[j];
+						}
+						
+						if(doubleValues[j] >= maxY) {
+							maxY = doubleValues[j];
+							double log = Math.floor(Math.log10(maxY));
+							double adjustedMax = (Math.ceil(maxY/Math.pow(10, log)))*Math.pow(10, log);
+						    if(adjustedMax <= 1.0) adjustedMax = 1.0;
+						    //adjustedMax = maxY*100.0;
+						    //adjustedMax += 1.0;
+						    //int mx = (int)adjustedMax;
+						    //adjustedMax = ((double)mx)/100.0;
+							if (useLinearTimeScale) {
+								yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(adjustedMax));
+								double step = adjustedMax / 10.0;
+								yAxisPrimary.getScale().setStep(step);
+							} else {
+								// keep 2 significant figures on scale axis
+								double ymax = Math.log(adjustedMax);
+								if(adjustedMax > 1.0) {
+									ymax += 0.499;
+									long imax = Math.round(ymax);
+									ymax = imax;
+								}
+								yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(ymax));
+								double step = ymax/10.0;
+								yAxisPrimary.getScale().setStep(step);
+							}
+							
+							
+						}
+					}
+				} // is visible
+				integratedDifference[i] /= doubleValues.length;
+					// Any values?
+					if (doubleValues.length > 0) {
+						if (maxPoints < doubleValues.length) {
+							maxPoints = doubleValues.length;
+						}
+						
+						for (int cycleNumber = 0; cycleNumber < doubleValues.length; cycleNumber++) {
+							
+							Double value;
+							double displayValue = doubleValues[cycleNumber];
+							if (displayValue <= minYscale) {
+								// Log(0.0) is negative infinity so for display purposes only
+								// we set the minimum axis value at 0.1/POPULATION
+								displayValue = minYscale;
+							}
+							if (useLinearTimeScale) {
+								value = new Double(displayValue);
+							} else {
+								value = new Double(Math.log(displayValue));
+							}
+							
+
+							series.addValue(value);
+							
+							// only do once for first line series
+							if (!setCycles) {
+								cycleNumbers.add(new Integer(cycleNumber));	
+								}
+						} // for cycleNumber
+						
+						if(xAxisPrimary.getSeriesDefinitions().get(0).getSeries().size() != cycleNumbers.size()) {
+							// The number of data points have changed, create a new series for the x axis
+							xAxisPrimary.getSeriesDefinitions().clear();
+							final Series xAxisSeries = SeriesImpl.create();
+
+							final NumberDataSet xValues = NumberDataSetImpl.create(cycleNumbers);
+							xAxisSeries.setDataSet(xValues);
+							final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+
+							xAxisPrimary.getSeriesDefinitions().add(sdX);
+							sdX.getSeries().add(xAxisSeries);
+						}
+							
+						
+						setCycles = true; // we set them only once
+						
+					} else {
+						//resetData();
+					}
+			} // for i properties
+
+
+		if (!this.isDisposed()) {
+			redraw();
+		}
+		
+		if(this.chartIndex==1) {
+			control.updateMessage(ScenarioAnalysisSuite.READY_MSG);
+		} else {
+			control.updateMessage(ScenarioAnalysisSuite.WORKING_MSG);
+		}
+		return integratedDifference;
+	} // paintControl
+
+	/**
+	 * @param dataSeriesMap
+	 *            the {@link List} that will contain the relative values
+	 *            (0.0-1.0) to plot
+	 * @param cycleNumbers
+	 *            the {@link List} of simulation cycle numbers that match the
+	 *            relative values
+	 * @param seriesIdentifier
+	 *            the title of the chart
+	 * @return a <code>Chart</code>
+	 */
+	public final Chart createSimpleLineChart(
+			final Map<String, DataSeries> dataSeriesMap,
+			final List<Integer> cycleNumbers, final String seriesIdentifier) {
+		
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+		
+		// Plot
+		retValue.getBlock().setBackground(frameColor);
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(backgroundGround);
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		legend = retValue.getLegend();
+		final LineAttributes lia = legend.getOutline();
+		legend.getText().getFont().setSize(8);
+		lia.setStyle(LineStyle.SOLID_LITERAL);
+		legend.getInsets().set(10, 5, 0, 0);
+		legend.getOutline().setVisible(false);
+		legend.setAnchor(Anchor.NORTH_LITERAL);
+		legend.setPosition(Position.BELOW_LITERAL);
+		legend.getText().setColor(foreGround);
+		legend.getOutline().setColor(foreGround);
+		
+		// cwaLine.getLegend( ).getText().getFont().setSize(16);;
+		// cwaLine.getLegend( ).setVisible( true );
+
+		// /////////
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+		xAxisPrimary.getTitle().setVisible(false);
+		xAxisPrimary.getTitle().getCaption().getFont().setSize(9);
+		xAxisPrimary.getTitle().getCaption().setColor(foreGround);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+
+		final Series xAxisSeries = SeriesImpl.create();
+
+		// new colors
+		xAxisSeries.getLabel().getCaption().setColor(foreGround);
+		xAxisSeries.getLabel().getOutline().setColor(foreGround);
+		//	
+
+		final NumberDataSet xValues = NumberDataSetImpl.create(cycleNumbers);
+		xAxisSeries.setDataSet(xValues);
+		final SeriesDefinition sdX = SeriesDefinitionImpl.create();
+
+		xAxisPrimary.getSeriesDefinitions().add(sdX);
+		sdX.getSeries().add(xAxisSeries);
+
+		// ////////
+		// Y-Axis
+		yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+
+		// NumberDataSet[] orthoValues = new NumberDataSet[MAX_LINES];
+		// SeriesDefinition[] sdY = new SeriesDefinition[MAX_LINES];
+
+		// end Y-Series
+
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		// xAxisPrimary.getScale( ).setMax( NumberDataElementImpl.create( 10.0 )
+		// );
+		// xAxisPrimary.getScale( ).setStep( 1 );
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		xAxisPrimary.getTitle().setVisible(true);
+		xAxisPrimary.getTitle().getCaption().setValue(Messages.getString("TS.TIMELABEL"));
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.25);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		yAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		yAxisPrimary.getTitle( ).getCaption( ).setValue( Ordinate_AXIS );
+		yAxisPrimary.getTitle( ).setVisible(true);
+		// yAxisPrimary.getMajorGrid().getLineAttributes().setColor(foreGround);
+		
+		// for now get ready to create only one line - we have no data yet.
+		// we will add more lines as we need them
+		// handle null
+		if(!dataSeriesMap.containsKey(defaultKey)) {
+			DataSeries series = new DataSeries(defaultKey, seriesCount, overlayMode);
+			seriesCount ++;
+			dataSeriesMap.put(defaultKey, series);
+		}
+
+		return retValue;
+	} // createSimpleLineChart
+
+	
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	protected void createContextMenu(final Composite parent) {
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+
+
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+	
+	/**
+	 * Update the view's context menu and add the action handlers to it.
+	 */
+	private void updateContextMenu(final Composite parent) {
+
+		popUpMenu.dispose();
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+		
+		// ---------------------------------------------------------------------
+
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		
+		// ---------------------------------------------------------------------
+		// add the displayable properties
+		for (int i = 0; i < control.getNumProperties(chartIndex); i ++) {
+			
+			String nextProp = control.getProperty(chartIndex,i);
+			DataSeries series = dataSeriesMap.get(nextProp);
+			DisplayableProperty property = new DisplayableProperty(nextProp, series.isVisible());
+			contextMenuManager.add(property);
+		}
+
+		// ---------------------------------------------------------------------
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+
+	} // updateContextMenu
+
+
+	
+	/**
+	 * Sets the colors for a n array of LineSeries given the property to Plot
+	 * for each. Try to set color from the preferences (if specified for that
+	 * property) otherwise sets line color to blue.
+	 * 
+	 * @param propertiesToPlot
+	 * @param lsList
+	 */
+	public static void setColorDefs(
+			final List<String> propertiesToPlot,
+			final List<LineSeries> lsList) {
+		// the default line color
+
+		// if possible get color from preferences
+		final Map<String, Color> colorMap = VisualizationPreferencePage
+				.getColorMapping();
+		for (int i = 0; i < lsList.size(); i++) {
+			ColorDefinition color = ColorDefinitionImpl.BLUE();
+
+			if ((propertiesToPlot != null) && (propertiesToPlot.size() > i)) {
+				final String key = propertiesToPlot.get(i);
+				// look or the preference color by name
+				if (colorMap.containsKey(key)) {
+					final Color c = colorMap.get(key);
+					color = ColorDefinitionImpl.create(c.getRed(),
+							c.getGreen(), c.getBlue());
+				}
+				lsList.get(i).setSeriesIdentifier(key);
+				lsList.get(i).getLineAttributes().setColor(color);
+			} else {
+
+				if (lsList.get(i) != null) {
+					lsList.get(i).setSeriesIdentifier(" ");
+					lsList.get(i).getLineAttributes().setColor(color);
+				}
+			}
+		}
+		return;
+	}// getColorDef
+
+
+	
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		redraw();
+	}
+
+	protected void resetData() {
+		clearData();
+	
+		cycleNumbers.add(new Integer(0));
+	}
+
+	private void clearData() {
+		
+		dataSeriesMap.clear();
+		cycleNumbers.clear();
+	}
+
+	
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleAxisScale() {
+		if (useLinearTimeScale) { //Switch to logarithmic scale
+			logTimeAction.setChecked(true);
+			linearTimeAction.setChecked(false);
+			//Just using the following axis type, to move to log scale, didn't work
+			//yAxisPrimary.setType(AxisType.LOGARITHMIC_LITERAL);
+			yAxisPrimary.getScale().setMin(null);
+			yAxisPrimary.getScale().setMax(null);
+			yAxisPrimary.getScale().unsetStep();
+			yAxisPrimary.getScale().unsetStepNumber();
+		}
+		else { //Switch to linear scale
+			logTimeAction.setChecked(false);
+			linearTimeAction.setChecked(true);
+			//yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+			yAxisPrimary.getScale().setStep(0.25);
+		}
+		useLinearTimeScale = !useLinearTimeScale;
+		draw();
+	}
+	
+
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleLegend() {
+		if (showLegend) { //Switch to hide
+			viewLegend.setChecked(false);
+			hideLegend.setChecked(true);
+			legend.setVisible(false);
+		}
+		else { //Switch to view
+			viewLegend.setChecked(true);
+			hideLegend.setChecked(false);
+			legend.setVisible(true);
+		}
+		showLegend = !showLegend;
+		draw();
+	}
+
+
+	/**
+	 * Action to show the legend
+	 */
+	protected class LegendViewAction extends Action {
+		public LegendViewAction()
+		{
+			super(Messages.getString("ContextMenu.ShowLegend"), IAction.AS_CHECK_BOX);
+			setChecked(showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.ShowLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	} //LegendViewAction
+	
+	/**
+	 * Action to hide the legend
+	 */
+	class LegendHideAction extends Action 	{
+		public LegendHideAction()
+		{
+			super(Messages.getString("ContextMenu.HideLegend"), IAction.AS_CHECK_BOX);
+			setChecked(!showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.HideLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	}//LegendHideAction
+
+	
+	/**
+	 * switch to linear plot 
+	 * 
+	 */
+	protected class LinearScaleAction extends Action {
+		public LinearScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LinearTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LinearTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	} //LinearScaleAction
+
+	/**
+	 * switch to semi-log plot (log scale on y axis)
+	 * 
+	 */
+	class LogScaleAction extends Action 	{
+		public LogScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LogTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(!useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LogTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	}//LogScaleAction
+	
+	/**
+	 * DisplayableProperty
+	 *
+	 */
+	protected class DisplayableProperty extends Action
+	{
+		String property = null;
+		public DisplayableProperty(String property, boolean visibility)
+		{
+					super(property, IAction.AS_CHECK_BOX);
+					this.property = property;
+					setChecked(visibility);
+		}
+		
+	
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return property;
+		}
+
+		/**
+		 * Toggle the state
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+				DataSeries series = dataSeriesMap.get(property);
+				series.toggleVisible();
+				dataSeriesMap.put(property,series);
+				setChecked(series.isVisible());
+				visibleMap.put(property, series.isVisible());
+				draw();
+		}
+	}// DisplayableProperty
+	
+	
+	/**
+	 * Inner class DataSeries
+	 * all the data objects for a plot
+	 *
+	 */
+	protected class DataSeries 
+	{
+		public String propertyName = "";
+		
+		public List<Double> relativeValues = new ArrayList<Double>();
+		public Series lineSeries = null;
+		private boolean visible = true;
+		private SeriesDefinition sdY = null;
+		private int seriesIndex = 0;
+		private boolean overlayMode = false;
+		
+		
+		public boolean isVisible() {
+			return visible;
+		}
+		public void setVisible(boolean state) {
+			visible = state;
+		}
+		
+		public void toggleVisible() {
+			visible = !visible;
+		}
+
+		/**
+		 * 
+		 * @param propertyName
+		 * @param index
+		 * @param overlay 
+		 */
+		public DataSeries(String propertyName, int index, boolean overlay) {
+			this.propertyName = propertyName;
+			this.seriesIndex = index;
+			this.overlayMode = overlay;
+			relativeValues = new ArrayList<Double>();
+			relativeValues.add(new Double(0.0));
+			addLineSeries(propertyName);
+		}
+		
+		public void addValue(Double val) {
+			if(relativeValues==null) relativeValues = new ArrayList<Double>();
+			relativeValues.add(val);
+		}
+		
+		/**
+		 * @param propertyName
+		 * 
+		 */
+		@SuppressWarnings("deprecation")
+		public void addLineSeries(final String propertyName) {
+			
+			final NumberDataSet orthoValues = NumberDataSetImpl
+					.create(relativeValues);
+			if(lineSeries == null) {
+				lineSeries = ScatterSeriesImpl.create();
+				/*
+				 * 
+				 * Bar chart style is too slow for generation of a fill
+				 * if we want a fill we can try using the difference plot
+				 * to a straight line at y=0
+				 * 
+				
+				if(propertyName.indexOf("*")>=1) {
+					// barseries methods
+					lineSeries = (BarSeries) BarSeriesImpl.create();
+				} else {
+					lineSeries = (ScatterSeries) ScatterSeriesImpl.create();
+				}
+				
+				*
+				*/
+			} // if lineSeries==null
+			lineSeries.setDataSet(orthoValues);
+			((LineSeries) lineSeries).getLineAttributes().setVisible(true);
+			((LineSeries) lineSeries).getMarkers().clear();
+			
+			// Assign the line color
+			// based on selected property. Default is Blue
+			setColorDefs(propertyName);
+			// If this is the "selected" region of a graph set the marker type
+		
+			// the series def
+			sdY = SeriesDefinitionImpl.create();
+			sdY.getSeriesPalette().update(-2);
+			sdY.getSeries().add(lineSeries);
+			yAxisPrimary.getSeriesDefinitions().add(sdY);
+			
+			return;
+		}// addLineSeries
+		
+		/** 
+		 * in response to user action temporarily remove the line series from the graph
+		 */
+		public void hide() {
+			lineSeries.setVisible(false);
+			visible = false;
+		}// hide
+		
+		/** 
+		 * in response to user action add back the line series to the graph
+		 */
+		public void show() {
+			lineSeries.setVisible(true);
+			visible = true;
+		}// show
+		
+
+		/**
+		 * Sets the colors for a n array of LineSeries given the property to Plot
+		 * for each. Try to set color from the preferences (if specified for that
+		 * property) otherwise sets line color to blue.
+		 * @param propertyName 
+		 *
+		 */
+		public void setColorDefs(String propertyName) {
+			// the default line color
+
+			// if possible get color from preferences
+			final Map<String, Color> colorMap = VisualizationPreferencePage.getColorMapping();
+
+			// default color
+			int colorIndex = seriesIndex % colorDefault.length;
+			ColorDefinition color = colorDefault[colorIndex];
+
+			// preferred color by name
+			String key = propertyName.substring(0,1);
+			
+			if (colorMap.containsKey(key)) {
+				final Color c = colorMap.get(key);
+				color = ColorDefinitionImpl.create(c.getRed(), c.getGreen(), c.getBlue());
+			}
+			
+			this.lineSeries.setSeriesIdentifier(propertyName);
+			if (overlayMode) {
+				if(propertyName.indexOf("*")>=1) {
+					// barseries methods
+					((LineSeries)this.lineSeries).getLineAttributes().setColor(color);
+				} else {
+					((LineSeries)this.lineSeries).getLineAttributes().setColor(ColorDefinitionImpl.GREY());
+					((LineSeries)this.lineSeries).getLineAttributes().setStyle(LineStyle.DOTTED_LITERAL);
+				}
+			} else {
+				((LineSeries)this.lineSeries).getLineAttributes().setColor(color);
+			}
+			
+			
+		}// getColorDefs
+
+		/**
+		 * length of the series
+		 * @return number of data points
+		 */
+		public int getDataSize() {
+			return relativeValues.size();
+		}
+		// Accessors
+		public String getPropertyName() {
+			return propertyName;
+		}
+
+		public void setPropertyName(String propertyName) {
+			this.propertyName = propertyName;
+		}
+
+		public List<Double> getRelativeValues() {
+			return relativeValues;
+		}
+
+		public void setRelativeValues(List<Double> relativeValues) {
+			this.relativeValues = relativeValues;
+		}
+
+		
+
+		public void setLineSeries(LineSeries lineSeries) {
+			this.lineSeries = lineSeries;
+		}
+	}// DataSeries
+	////////////////////////////////////////////////////////
+	
+} // TimeSeriesCanvas
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/XYSeriesCanvas.java b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/XYSeriesCanvas.java
new file mode 100644
index 0000000..4a05bfb
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/XYSeriesCanvas.java
@@ -0,0 +1,1163 @@
+package org.eclipse.stem.util.analysis.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.birt.chart.device.IDeviceRenderer;
+import org.eclipse.birt.chart.exception.ChartException;
+import org.eclipse.birt.chart.factory.Generator;
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.birt.chart.model.ChartWithAxes;
+import org.eclipse.birt.chart.model.attribute.Anchor;
+import org.eclipse.birt.chart.model.attribute.AxisType;
+import org.eclipse.birt.chart.model.attribute.Bounds;
+import org.eclipse.birt.chart.model.attribute.ColorDefinition;
+import org.eclipse.birt.chart.model.attribute.IntersectionType;
+import org.eclipse.birt.chart.model.attribute.LineAttributes;
+import org.eclipse.birt.chart.model.attribute.LineStyle;
+import org.eclipse.birt.chart.model.attribute.Marker;
+import org.eclipse.birt.chart.model.attribute.MarkerType;
+import org.eclipse.birt.chart.model.attribute.Position;
+import org.eclipse.birt.chart.model.attribute.TickStyle;
+import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;
+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;
+import org.eclipse.birt.chart.model.attribute.impl.MarkerImpl;
+import org.eclipse.birt.chart.model.component.Axis;
+import org.eclipse.birt.chart.model.component.Series;
+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;
+import org.eclipse.birt.chart.model.data.NumberDataSet;
+import org.eclipse.birt.chart.model.data.SeriesDefinition;
+import org.eclipse.birt.chart.model.data.impl.NumberDataElementImpl;
+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;
+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;
+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;
+import org.eclipse.birt.chart.model.layout.Legend;
+import org.eclipse.birt.chart.model.layout.Plot;
+import org.eclipse.birt.chart.model.type.ScatterSeries;
+import org.eclipse.birt.chart.model.type.impl.ScatterSeriesImpl;
+import org.eclipse.birt.chart.util.PluginSettings;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.stem.ui.preferences.VisualizationPreferencePage;
+import org.eclipse.stem.util.analysis.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.IWorkbenchActionConstants;
+
+/**
+ * TimeSeriesCanvas is a subclass of {@link Canvas} suitable for chart drawings.
+ */
+public class XYSeriesCanvas extends Canvas {
+
+	protected IDeviceRenderer idr = null;
+
+	/**
+	 * This is the {@link Chart} that plots the relative values.
+	 */
+	protected Chart cm = null;
+
+	/**
+	 * The provider of relative values.
+	 */
+	//private RelativeValueHistoryProvider rvhp;
+
+	private AnalysisControl control = null;
+	
+	/**
+	 * the index of this Chart
+	 */
+	protected int chartIndex = 0;
+	
+
+	private static final String DEFAULT_KEY_PREFIX = "XY";
+	
+	private static String defaultKey = DEFAULT_KEY_PREFIX;
+
+	/**
+	 * some extra colors
+	 */
+	protected static final int[][] colorDefault = {
+													{0, 0, 255}, 		//Blue
+													{255, 0, 0}, 		//Red
+													{0, 255, 0}, 		//Green
+													{255, 255, 0}, 		//Yellow
+													{0, 0, 0}, 			//Black 
+													{127, 127, 127}, 	//Grey
+													{255, 255, 255},	//Cyan
+													{255, 197, 41}		//Orange 
+													};
+	
+	/**
+	 * used to index the line series so we can step through default colors
+	 * when a user custom color is not yet assigned
+	 */
+	private int seriesCount  = 0;
+	
+
+	/**
+	 * A context menu for this view
+	 */
+	Menu popUpMenu = null;
+	
+	/**
+	 * set y axis to a linear scale
+	 */
+	private LinearScaleAction linearTimeAction;
+	/**
+	 * set y axis to a log scale
+	 */
+	private LogScaleAction logTimeAction;
+	protected boolean useLinearTimeScale = true;
+	
+
+	/**
+	 * show the legend (true by default)
+	 */
+	private LegendViewAction viewLegend;
+
+	/**
+	 * hide the legend 
+	 */
+	private LegendHideAction hideLegend;
+	protected boolean showLegend = true;
+
+	protected Legend legend = null;
+	
+
+	/**
+	 * this is a map of the DataXYSeries object (keyed by property name)
+	 */
+	protected final Map<String,DataXYSeries> dataSeriesMap = new HashMap<String,DataXYSeries>();
+
+	/**
+	 * Chart generator instance (reference to a singleton)
+	 */
+	Generator gr;
+
+	Axis yAxisPrimary;
+	Axis xAxisPrimary;
+	/**
+	 * the maxY value for scaling
+	 */
+	double maxY = Double.MIN_VALUE;
+	
+	/**
+	 * the maxY value for scaling
+	 */
+	double maxX = Double.MIN_VALUE;
+
+	/**
+	 * the minY value for scaling
+	 */
+	private double minY = Double.MAX_VALUE;
+	
+	/**
+	 * the minX value for scaling
+	 */
+	private double minX = Double.MAX_VALUE;
+	
+	
+	/**
+	 * Label for line series LEGEND
+	 */
+	public String Ordinate_LEGEND = "Y";
+	
+	/**
+	 * Label for line series Y axis label
+	 **/
+	public String Ordinate_AXIS = "Y";
+	
+	/** 
+	 * customizable color definitions
+	 */
+	protected ColorDefinition foreGround = ColorDefinitionImpl.WHITE();
+	private ColorDefinition backgroundGround = ColorDefinitionImpl.BLACK();
+	private ColorDefinition frameColor = ColorDefinitionImpl.create(180, 180, 200);
+
+	Image imgChart = null;
+	
+	/**
+	 * This Constructor is used when we want to place the time series in a container
+	 * which is a sub component of the actual AnalysisControl
+	 * @param analysisControl 
+	 * 
+	 * @param parent  the SWT parent of the {@link Widget}
+	 * @param ordinateString 
+	 * @param yAxisLabel 
+	 * @param foreground 
+	 * @param background 
+	 * @param framecolor 
+	 * @param chartIndex the index of this chart (0 if only one)
+	 *  
+	 */
+	public XYSeriesCanvas(final AnalysisControl analysisControl, final Composite parent, 
+			final String ordinateString, 
+			final String yAxisLabel, 
+			ColorDefinition foreground,
+			ColorDefinition background,
+			ColorDefinition framecolor,
+			int chartIndex) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		Ordinate_LEGEND = ordinateString;
+		Ordinate_AXIS = yAxisLabel;
+		defaultKey = DEFAULT_KEY_PREFIX+chartIndex;
+		foreGround 			= foreground;
+		backgroundGround 	= background;
+		frameColor 			= framecolor;
+		this.chartIndex = chartIndex;
+		
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = analysisControl;
+
+		
+		cm = createSimpleLineChart(dataSeriesMap, Messages.getString("CC.title")); //$NON-NLS-1$
+		
+		resetData();
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+			} // paintControl
+		} // PaintListener
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+		
+
+	} // TimeSeriesCanvas
+	/**
+	 * Constructor.
+	 * 
+	 * @param parent  the SWT parent of the {@link Widget}
+	 * @param ordinateString 
+	 * @param yAxisLabel 
+	 * @param foreground 
+	 * @param background 
+	 * @param framecolor 
+	 * @param chartIndex the index of this chart (0 if only one)
+	 *  
+	 */
+	public XYSeriesCanvas(final Composite parent, 
+			final String ordinateString, 
+			final String yAxisLabel, 
+			ColorDefinition foreground,
+			ColorDefinition background,
+			ColorDefinition framecolor,
+			int chartIndex) {
+		super(parent, SWT.DOUBLE_BUFFERED | SWT.BORDER);
+		Ordinate_LEGEND = ordinateString;
+		Ordinate_AXIS = yAxisLabel;
+		defaultKey = DEFAULT_KEY_PREFIX+chartIndex;
+		foreGround 			= foreground;
+		backgroundGround 	= background;
+		frameColor 			= framecolor;
+		this.chartIndex = chartIndex;
+		
+		gr = Generator.instance();
+
+		try {
+			idr = PluginSettings.instance().getDevice("dv.SWT"); //$NON-NLS-1$			
+		} catch (final ChartException pex) {
+			Activator.logError("Problem initializing chart", pex); //$NON-NLS-1$
+			return;
+		}
+
+		control = (AnalysisControl) parent;
+
+		
+		cm = createSimpleLineChart(dataSeriesMap, Messages
+				.getString("CC.title")); //$NON-NLS-1$
+		
+		resetData();
+		addPaintListener(new PaintListener() {
+			public void paintControl(final PaintEvent pe) {
+
+				final Composite source = (Composite) pe.getSource();
+				final org.eclipse.swt.graphics.Rectangle d = source
+						.getClientArea();
+
+				if(imgChart != null) imgChart.dispose();
+				imgChart = new Image(source.getDisplay(), d);
+				idr.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, new GC(
+						imgChart));
+				final Bounds bounds = BoundsImpl.create(d.x, d.y, d.width,
+						d.height);
+				bounds.scale(72d / idr.getDisplayServer().getDpiResolution());
+				// BOUNDS MUST BE SPECIFIED IN POINTS
+
+				try {
+					gr.render(idr, gr.build(idr.getDisplayServer(), cm, bounds,
+							null, null, null));
+					pe.gc.drawImage(imgChart, d.x, d.y);
+				} catch (final ChartException ce) {
+					Activator.logError("Problem rendering chart", ce); //$NON-NLS-1$
+				}
+			} // paintControl
+		} // PaintListener
+		);
+		
+		//Create a context menu for the canvas
+		createContextMenu(this);
+		
+
+	} // TimeSeriesCanvas
+
+	
+	
+	/**
+	 * The method which gets the {@link XYSeriesCanvas}' reports list, and
+	 * draws it on the {@link XYSeriesCanvas}.
+	 * 
+	 */
+	public void draw() {
+
+		
+		
+		
+		resetData();
+		
+		maxY = -1.0;
+		minY = 0.0;
+		maxX = -1.0;
+		minX = 0.0;
+		double adjustedMaxY = 0.0;
+		double adjustedMaxX = 0.0;
+		
+		// get the x,y data (i=0)
+		// and the x, fitY data (i=1)
+		for(int i = 0; i <= 1; i ++) {
+			
+			// one XY data set per chart
+			//for (int i = 0; i < maxLines; i ++) {
+			String property = "XY"+chartIndex;
+			if(i==1) property = "FIT"+chartIndex;
+			
+			if(!dataSeriesMap.containsKey(property)) {
+				// new property
+				DataXYSeries series = new DataXYSeries(property);
+				seriesCount ++;
+				dataSeriesMap.put(property, series);
+			}
+			DataXYSeries series = dataSeriesMap.get(property);
+			if(series.isVisible()) {
+				series.show();
+			} else {
+				series.hide();
+			}
+			
+			// Get the values for the property to be plotted
+			int maxPoints = 0;
+			
+			final double[] doubleValuesX = control.getValues(chartIndex,(2*i)+2);
+			final double[] doubleValuesY = control.getValues(chartIndex,(2*i)+3);
+			
+			// update the min max scales
+			for (int j = 0; j < doubleValuesX.length; j++) {	
+				if(doubleValuesY[j] <= minY) {
+					minY = doubleValuesY[j];
+					minY = Math.round(minY);
+				}
+				if(doubleValuesX[j] <= minX) {
+					minX = doubleValuesX[j];
+					minX = Math.round(minX);
+				}
+				
+				if(doubleValuesY[j] >= maxY) {
+					maxY = doubleValuesY[j];
+					double log = Math.floor(Math.log10(maxY));
+					adjustedMaxY = (Math.ceil(maxY/Math.pow(10, log)))*Math.pow(10, log);
+				  //  if(adjustedMaxY <= 1.0) adjustedMaxY = 1.0;
+				}// maxY
+				if(doubleValuesX[j] >= maxX) {
+					maxX = 1.02*doubleValuesX[j];
+					double log = Math.floor(Math.log10(maxX));
+					adjustedMaxX = (Math.ceil(maxX/Math.pow(10, log)))*Math.pow(10, log);
+				    //if(adjustedMaxX <= 1.0) adjustedMaxX = 1.0;
+				}// maxX
+			}// for all points
+			
+			
+			
+			//System.out.println("adjustedMaxX = "+adjustedMaxX);
+			xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+			xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(adjustedMaxX));
+			double stepX = adjustedMaxX / 10.0;
+			//System.out.println("step = "+stepX);
+			xAxisPrimary.getScale().setStep(stepX);
+			xAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+
+
+			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(minY));
+			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(adjustedMaxY));
+			double stepY = adjustedMaxY / 10.0;
+			yAxisPrimary.getScale().setStep(stepY);
+			yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+
+			// Any values?
+			if (doubleValuesX.length > 0) {
+				if (maxPoints < doubleValuesX.length) {
+					maxPoints = doubleValuesX.length;
+				}
+			
+				for (int cycleNumber = 0; cycleNumber < doubleValuesX.length; cycleNumber++) {
+					Double valueX = new Double(doubleValuesX[cycleNumber]);
+					Double valueY = new Double(doubleValuesY[cycleNumber]);
+					series.addValue(valueX,valueY);
+				} // for cycleNumber
+				
+			} else {
+				//resetData();
+			}
+			
+		}// xy data and fit
+		
+
+		if (!this.isDisposed()) {
+			redraw();
+		}
+		
+		
+		
+		return;
+	} // paintControl
+
+	/**
+	 * @param dataXYSeriesMap
+	 *            the {@link List} that will contain the relative values
+	 *            (0.0-1.0) to plot
+	 * @param seriesIdentifier
+	 *            the title of the chart
+	 * @return a <code>Chart</code>
+	 */
+	public final Chart createSimpleLineChart(
+			final Map<String, DataXYSeries> dataXYSeriesMap, final String seriesIdentifier) {
+		
+		final ChartWithAxes retValue = ChartWithAxesImpl.create();
+
+		
+		// Plot
+		retValue.getBlock().setBackground(frameColor);
+		final Plot p = retValue.getPlot();
+		p.getClientArea().setBackground(backgroundGround);
+
+		// Title
+		// cwaLine.getTitle( ).getLabel( ).getCaption( ).setValue( "Line Chart"
+		// );//$NON-NLS-1$
+		retValue.getTitle().setVisible(false);
+
+		// Legend
+		legend = retValue.getLegend();
+		final LineAttributes lia = legend.getOutline();
+		legend.getText().getFont().setSize(8);
+		lia.setStyle(LineStyle.SOLID_LITERAL);
+		legend.getInsets().set(10, 5, 0, 0);
+		legend.getOutline().setVisible(false);
+		legend.setAnchor(Anchor.NORTH_LITERAL);
+		legend.setPosition(Position.BELOW_LITERAL);
+		legend.getText().setColor(foreGround);
+		legend.getOutline().setColor(foreGround);
+		
+		// cwaLine.getLegend( ).getText().getFont().setSize(16);;
+		// cwaLine.getLegend( ).setVisible( true );
+
+		// /////////
+		// X-Axis
+		xAxisPrimary = retValue.getPrimaryBaseAxes()[0];
+		xAxisPrimary.setType(AxisType.TEXT_LITERAL);
+		xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);
+		xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);
+		xAxisPrimary.getTitle().setVisible(false);
+		xAxisPrimary.getTitle().getCaption().getFont().setSize(9);
+		xAxisPrimary.getTitle().getCaption().setColor(foreGround);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+
+		// ////////
+		// Y-Axis
+		yAxisPrimary = retValue.getPrimaryOrthogonalAxis(xAxisPrimary);
+		yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);
+
+		// NumberDataSet[] orthoValues = new NumberDataSet[MAX_LINES];
+		// SeriesDefinition[] sdY = new SeriesDefinition[MAX_LINES];
+
+		// end Y-Series
+
+		// xAxis
+		xAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		xAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		xAxisPrimary.getScale().setStep(0.1);
+		xAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		xAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		xAxisPrimary.getTitle().setVisible(true);
+		xAxisPrimary.getTitle().getCaption().setValue(Messages.getString("TS.TIMELABEL"));
+
+		yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+		yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+		yAxisPrimary.getScale().setStep(0.1);
+		yAxisPrimary.getLabel().getCaption().getFont().setSize(9);
+		yAxisPrimary.getLabel().getCaption().setColor(foreGround);
+		yAxisPrimary.getTitle( ).getCaption( ).setValue( Ordinate_AXIS );
+		yAxisPrimary.getTitle( ).setVisible(true);
+		// yAxisPrimary.getMajorGrid().getLineAttributes().setColor(foreGround);
+		
+		// for now get ready to create only one line - we have no data yet.
+		// we will add more lines as we need them
+		// handle null
+		if(!dataXYSeriesMap.containsKey(defaultKey)) {
+			DataXYSeries series = new DataXYSeries(defaultKey);
+			seriesCount ++;
+			dataXYSeriesMap.put(defaultKey, series);
+		}
+
+		return retValue;
+	} // createSimpleLineChart
+
+	
+	/**
+	 * Create the view's context menu and add the action handlers to it.
+	 */
+	protected void createContextMenu(final Composite parent) {
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+
+
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+	} // createContextMenu
+	
+	/**
+	 * Update the view's context menu and add the action handlers to it.
+	 */
+	@SuppressWarnings("unused")
+	private void updateContextMenu(final Composite parent) {
+
+		popUpMenu.dispose();
+
+		// Init a Context Menu Manager
+		final MenuManager contextMenuManager = new MenuManager();
+
+		// ---------------------------------------------------------------------
+
+		linearTimeAction = new LinearScaleAction();
+		logTimeAction = new LogScaleAction();
+		contextMenuManager.add(linearTimeAction);
+		contextMenuManager.add(logTimeAction);
+		
+		// ---------------------------------------------------------------------
+
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+		
+		viewLegend = new LegendViewAction();
+		hideLegend = new LegendHideAction();
+		contextMenuManager.add(viewLegend);
+		contextMenuManager.add(hideLegend);
+		
+		// ---------------------------------------------------------------------
+		
+		
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		
+		// ---------------------------------------------------------------------
+		// add the displayable properties
+		for (int i = 0; i < control.getNumProperties(chartIndex); i ++) {
+			
+			String nextProp = control.getProperty(chartIndex,i);
+			DataXYSeries series = dataSeriesMap.get(nextProp);
+			DisplayableProperty property = new DisplayableProperty(nextProp, series.isVisible());
+			contextMenuManager.add(property);
+		}
+
+		// ---------------------------------------------------------------------
+
+		// Place Holder for Menu Additions
+		contextMenuManager.add(new Separator(
+				IWorkbenchActionConstants.MB_ADDITIONS));
+
+		// ---------------------------------------------------------------------
+
+		final Menu popUpMenu = contextMenuManager.createContextMenu(parent);
+
+		// Set the context menu for the viewer
+		parent.setMenu(popUpMenu);
+
+
+	} // updateContextMenu
+
+
+	
+	/**
+	 * Sets the colors for a n array of ScatterSeries given the property to Plot
+	 * for each. Try to set color from the preferences (if specified for that
+	 * property) otherwise sets line color to blue.
+	 * 
+	 * @param propertiesToPlot
+	 * @param lsList
+	 */
+	public static void setColorDefs(
+			final List<String> propertiesToPlot,
+			final List<ScatterSeries> lsList) {
+		// the default line color
+
+		// if possible get color from preferences
+		final Map<String, Color> colorMap = VisualizationPreferencePage
+				.getColorMapping();
+		for (int i = 0; i < lsList.size(); i++) {
+			ColorDefinition color = ColorDefinitionImpl.BLUE();
+
+			if ((propertiesToPlot != null) && (propertiesToPlot.size() > i)) {
+				final String key = propertiesToPlot.get(i);
+				// look or the preference color by name
+				if (colorMap.containsKey(key)) {
+					final Color c = colorMap.get(key);
+					color = ColorDefinitionImpl.create(c.getRed(),
+							c.getGreen(), c.getBlue());
+				}
+				lsList.get(i).setSeriesIdentifier(key);
+				lsList.get(i).getLineAttributes().setColor(color);
+			} else {
+
+				if (lsList.get(i) != null) {
+					lsList.get(i).setSeriesIdentifier(" ");
+					lsList.get(i).getLineAttributes().setColor(color);
+				}
+			}
+		}
+		return;
+	}// getColorDef
+
+
+	
+
+	/**
+	 * Disposes the Color objects
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	/**
+	 * reset
+	 */
+	public void reset() {
+		resetData();
+		redraw();
+	}
+
+	protected void resetData() {
+		clearData();
+	}
+
+	private void clearData() {
+		
+		Iterator<String> iter = dataSeriesMap.keySet().iterator();
+		while((iter!=null)&&(iter.hasNext())) {
+			String key = iter.next();
+			DataXYSeries series = dataSeriesMap.get(key);
+			series.yValues.clear();
+			series.xValues.clear();
+			series.addValue(new Double(0.0), new Double(0.0));
+		}
+		
+	}
+
+	
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleAxisScale() {
+//		if (useLinearTimeScale) { //Switch to logarithmic scale
+//			logTimeAction.setChecked(true);
+//			linearTimeAction.setChecked(false);
+//			//Just using the following axis type, to move to log scale, didn't work
+//			//yAxisPrimary.setType(AxisType.LOGARITHMIC_LITERAL);
+//			yAxisPrimary.getScale().setMin(null);
+//			yAxisPrimary.getScale().setMax(null);
+//			yAxisPrimary.getScale().unsetStep();
+//			yAxisPrimary.getScale().unsetStepNumber();
+//		}
+//		else { //Switch to linear scale
+//			logTimeAction.setChecked(false);
+//			linearTimeAction.setChecked(true);
+//			//yAxisPrimary.setType(AxisType.LINEAR_LITERAL);
+//			yAxisPrimary.getScale().setMin(NumberDataElementImpl.create(0.0));
+//			yAxisPrimary.getScale().setMax(NumberDataElementImpl.create(1.0));
+//			yAxisPrimary.getScale().setStep(0.25);
+//		}
+//		useLinearTimeScale = !useLinearTimeScale;
+//		draw();
+	}
+	
+
+	/**
+	 * toggle the scale from logarithmic to linear
+	 */
+	void toggleLegend() {
+		if (showLegend) { //Switch to hide
+			viewLegend.setChecked(false);
+			hideLegend.setChecked(true);
+			legend.setVisible(false);
+		}
+		else { //Switch to view
+			viewLegend.setChecked(true);
+			hideLegend.setChecked(false);
+			legend.setVisible(true);
+		}
+		showLegend = !showLegend;
+		draw();
+	}
+
+
+	/**
+	 * Action to show the legend
+	 */
+	protected class LegendViewAction extends Action {
+		public LegendViewAction()
+		{
+			super(Messages.getString("ContextMenu.ShowLegend"), IAction.AS_CHECK_BOX);
+			setChecked(showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.ShowLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	} //LegendViewAction
+	
+	/**
+	 * Action to hide the legend
+	 */
+	class LegendHideAction extends Action 	{
+		public LegendHideAction()
+		{
+			super(Messages.getString("ContextMenu.HideLegend"), IAction.AS_CHECK_BOX);
+			setChecked(!showLegend);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.HideLegend");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!showLegend) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleLegend();
+			}
+			draw();
+		}
+	}//LegendHideAction
+
+	
+	/**
+	 * switch to linear plot 
+	 * 
+	 */
+	protected class LinearScaleAction extends Action {
+		public LinearScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LinearTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LinearTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already linear-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	} //LinearScaleAction
+
+	/**
+	 * switch to semi-log plot (log scale on y axis)
+	 * 
+	 */
+	class LogScaleAction extends Action 	{
+		public LogScaleAction()
+		{
+			super(Messages.getString("ContextMenu.LogTimeScale"), IAction.AS_CHECK_BOX);
+			setChecked(!useLinearTimeScale);
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return Messages.getString("ContextMenu.LogTimeScale");
+		}
+
+		/**
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+			if (!useLinearTimeScale) {
+				setChecked(true);
+				//Nothing to do. It's already log-time.
+			}
+			else {
+				toggleAxisScale();
+			}
+			draw();
+		}
+	}//LogScaleAction
+	
+	/**
+	 * DisplayableProperty
+	 *
+	 */
+	protected class DisplayableProperty extends Action
+	{
+		String property = null;
+		public DisplayableProperty(String property, boolean visibility)
+		{
+					super(property, IAction.AS_CHECK_BOX);
+					this.property = property;
+					setChecked(visibility);
+		}
+		
+	
+
+		/**
+		 * @see org.eclipse.jface.action.Action#getText()
+		 */
+		@Override
+		public String getText() {
+			return property;
+		}
+
+		/**
+		 * Toggle the state
+		 * @see org.eclipse.jface.action.Action#run()
+		 */
+		@Override
+		public void run() {
+				DataXYSeries series = dataSeriesMap.get(property);
+				series.toggleVisible();
+				dataSeriesMap.put(property,series);
+				setChecked(series.isVisible());
+				draw();
+		}
+	}// DisplayableProperty
+	
+	
+	/**
+	 * Inner class DataXYSeries
+	 * all the data objects for a plot
+	 *
+	 */
+	protected class DataXYSeries 
+	{
+		public String propertyName = "";
+		
+		public List<Double> yValues = new ArrayList<Double>();
+		public List<Double> xValues = new ArrayList<Double>();
+		
+		public Series seriesX = null;
+		public ScatterSeries scatterSeriesY = null;
+		private boolean visible = true;
+		private SeriesDefinition sdY = null;
+		private SeriesDefinition sdX = null;
+		
+		
+		public boolean isVisible() {
+			return visible;
+		}
+		public void setVisible(boolean state) {
+			visible = state;
+		}
+		
+		public void toggleVisible() {
+			visible = !visible;
+		}
+
+		/**
+		 * 
+		 * @param propertyName
+		 */
+		public DataXYSeries(String propertyName) {
+			this.propertyName = propertyName;
+			yValues = new ArrayList<Double>();
+			yValues.add(new Double(0.0));
+			
+			xValues = new ArrayList<Double>();
+			xValues.add(new Double(0.0));
+			
+			addScatterSeries(propertyName);
+		}
+		
+		/**
+		 * add an XY value pair
+		 * @param valX
+		 * @param valY
+		 */
+		public void addValue(Double valX, Double valY) {
+			if(yValues==null) yValues = new ArrayList<Double>();
+			if(xValues==null) xValues = new ArrayList<Double>();
+			xValues.add(valX);
+			yValues.add(valY);
+		}
+		
+		/**
+		 * @param propertyName
+		 * 
+		 */
+		public void addScatterSeries(final String propertyName) {
+			
+			final NumberDataSet orthoValues = NumberDataSetImpl.create(yValues);
+			final NumberDataSet xAxisValues = NumberDataSetImpl.create(xValues);
+			
+			sdX = SeriesDefinitionImpl.create();
+			//FractionNumberFormatSpecifier sf = FractionNumberFormatSpecifierImpl.create();
+			//sf.setPrecise(true);
+			//sdX.setFormatSpecifier(sf);
+			xAxisPrimary.getSeriesDefinitions().add(sdX);
+			
+			
+			if(scatterSeriesY == null) {
+				sdY = SeriesDefinitionImpl.create();
+				
+				scatterSeriesY = (ScatterSeries)ScatterSeriesImpl.create();
+				seriesX = SeriesImpl.create();
+			} // if scatterSeriesY==null
+			// new colors
+			seriesX.getLabel().getCaption().setColor(foreGround);
+			seriesX.getLabel().getOutline().setColor(foreGround);
+			seriesX.setDataSet(xAxisValues);
+			sdX.getSeries().add(seriesX);
+		
+			scatterSeriesY.setDataSet(orthoValues);
+			
+			// Assign the line color
+			// based on selected property. Default is Blue
+			setColorDefs(propertyName);
+			// If this is the "selected" region of a graph set the marker type
+			
+			// the series def
+			ColorDefinition color = ColorDefinitionImpl.create(
+					colorDefault[chartIndex][0], 
+					colorDefault[chartIndex][1], 
+					colorDefault[chartIndex][2]);
+			sdY.getSeriesPalette().update(color);
+			sdY.getSeries().add(scatterSeriesY);
+			yAxisPrimary.getSeriesDefinitions().add(sdY);
+			
+			return;
+		}// addScatterSeries
+		
+		/** 
+		 * in response to user action temporarily remove the line series from the graph
+		 */
+		public void hide() {
+			scatterSeriesY.setVisible(false);
+			visible = false;
+		}// hide
+		
+		/** 
+		 * in response to user action add back the line series to the graph
+		 */
+		public void show() {
+			scatterSeriesY.setVisible(true);
+			visible = true;
+		}// show
+		
+
+		/**
+		 * Sets the colors for a n array of ScatterSeries given the property to Plot
+		 * for each. Try to set color from the preferences (if specified for that
+		 * property) otherwise sets line color to blue.
+		 * @param propertyName 
+		 *
+		 */
+		@SuppressWarnings("cast")
+		public void setColorDefs(String propertyName) {
+			this.scatterSeriesY.setSeriesIdentifier(propertyName);
+			if(propertyName.indexOf("XY")>=0) {
+				// the data
+				scatterSeriesY.setPaletteLineColor(true);				
+				//scatterSeriesY.getLineAttributes().setColor(color);
+				//scatterSeriesY.getLineAttributes().setStyle(LineStyle.SOLID_LITERAL);
+				Marker marker = MarkerImpl.create(MarkerType.CIRCLE_LITERAL, 2);
+				scatterSeriesY.getMarkers().clear();
+				scatterSeriesY.getMarkers().add(marker);
+				scatterSeriesY.getLineAttributes().setVisible(false);
+			} else {
+				// the fit
+				scatterSeriesY.getLineAttributes().setColor(ColorDefinitionImpl.BLACK());
+				scatterSeriesY.getLineAttributes().setStyle(LineStyle.DOTTED_LITERAL);
+				scatterSeriesY.getLineAttributes().setVisible(true);
+				if (!scatterSeriesY.getMarkers().isEmpty()) {
+					Marker marker = (Marker)scatterSeriesY.getMarkers().get(0);
+					marker.setVisible(false);
+				}
+			}
+			
+		}// getColorDefs
+
+		/**
+		 * length of the series
+		 * @return number of data points
+		 */
+		public int getDataSize() {
+			return yValues.size();
+		}
+		// Accessors
+		public String getPropertyName() {
+			return propertyName;
+		}
+
+		public void setPropertyName(String propertyName) {
+			this.propertyName = propertyName;
+		}
+
+		public List<Double> getyValues() {
+			return yValues;
+		}
+
+		public void setyValues(List<Double> yValues) {
+			this.yValues = yValues;
+		}
+
+		
+
+		public void setScatterSeries(ScatterSeries lineSeries) {
+			this.scatterSeriesY = lineSeries;
+		}
+	}// DataXYSeries
+	////////////////////////////////////////////////////////
+	
+} // XYSeriesCanvas
diff --git a/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/messages.properties b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/messages.properties
new file mode 100644
index 0000000..cd40c4d
--- /dev/null
+++ b/org.eclipse.stem.util.analysis/src/org/eclipse/stem/util/analysis/views/messages.properties
@@ -0,0 +1,148 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007, 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Comma separated variable
+CSC.title=CSV
+
+# Common
+COMMON.NOTFOUND=Scenario folder not found!
+COMMON.NOTDATA=Invalid data or path!
+COMMON.DONE=Done
+COMMON.READY=Ready to Plot
+COMMON.WORKING=Working
+
+
+# Epidemic view
+EPIVIEW.SELECTDIR=Select Folder
+EPIVIEW.AGGREGATEDATA=Aggregate data
+EPIVIEW.REFERENCEFOLDERLABEL=Use Reference Filter
+EPIVIEW.SELECTFILE=Select File
+EPIVIEW.SELECTSCENARIOFOLDER=Select scenario folder
+EPIVIEW.SELECTREFERENCEFOLDER=Select reference folder
+EPIVIEW.SELECTAGGFILE=Select Aggregate file
+EPIVIEW.SELECTINCFILE=Select Incidence file
+EPIVIEW.PLOTTEXT=Plot
+EPIVIEW.AGGREGATELEGEND=Epidemic
+EPIVIEW.YAXIS=Population
+EPIVIEW.SCENARIOFOLDERLABEL=Scenario Folder:
+EPIVIEW.AGGFILELABEL= Scenario Aggregate File
+EPIVIEW.INCFILELABEL= Scenario Incidence File
+# Incidence chart part of EPIVIEW
+INCVIEW.INCIDENCELEGEND=Incidence
+INCVIEW.YAXIS=Incidence
+
+# Estimator view
+EST.TITLE=Parameter Estimation
+EST.ESTIMATE=Estimate Parameters
+EST.SELECTESTIMATOR=Select
+EST.RESULTS=Results:
+EST.COMPLETE=Parameter Estimation Complete
+EST.SCFOLDER=Scenario Folder:
+EST.PARAMESTIMATOR=Parameter Estimator:
+EST.SELECTFOLDEBUTTON=Select Scenario Folder
+EST.SELECTFOLDEDIALOGTITLE=Choose Scenario Folder
+EST.PARAMESTTITLE=Select Parameter Estimator
+EST.PARAMESTLABEL=Select Parameter Estimator:
+EST.WIZARDPAGE1TITLE=Select Scenario Folder
+EST.CHOICE1=Fit Each Location Then Average
+EST.CHOICE2=Sum Over All Locations Then Fit
+EST.MAXTHRESHOLDS=Max S 
+EST.MINTHRESHOLDS=Min S 
+EST.MAXTHRESHOLDE=Max E 
+EST.MINTHRESHOLDE=Min E 
+EST.MAXTHRESHOLDI=Max I 
+EST.MINTHRESHOLDI=Min I 
+EST.MAXTHRESHOLDR=Max R 
+EST.MINTHRESHOLDR=Max R 
+EST.RESULTS=Results
+EST.INPUTDATA=Input Data
+EST.REGRESSION=Regression
+EST.AVERAGE=Average
+EST.DISPLAY=Data to Display
+EST.EQUATION1=Eq.1
+EST.EQUATION2=Eq.2
+EST.EQUATION3=Eq.3
+EST.EQUATION4=Eq.4
+EST.AXISLABEL1=S,S*
+EST.AXISLABEL2=E,E*
+EST.AXISLABEL3=I,I*
+EST.AXISLABEL4=R,R*
+EST.RAXISLABEL1=from dS/dT
+EST.RAXISLABEL2=from dE/dT
+EST.RAXISLABEL3=from dI/dT
+EST.RAXISLABEL4=from dR/dT
+#
+# beta(f)
+EST.FREQBETA=\u03b2(f)
+# beta(rho)
+EST.DENSITYBETA=\u03b2(\u03c1)
+
+# Lyapunov view
+LYA.DIVERGENCELEGEND=Lyapunov Trajectory Divergence
+LYA.DIVERGENCEYAXIS=ln[delta]
+LYA.TITLE=Lyapunov Analysis
+LYA.COMPARISON=Compute Lyapunov Exponent
+LYA.RESULTS=Results:
+LYA.COMPLETE=Comparison Complete
+LYA.SELECTFOLDER=Select Folder
+LYA.SELECTFOLDERDIALG=Pick a scenario folder
+LYA.FOLDER1LABEL=Scenario Folder 1:
+LYA.FOLDER2LABEL=Scenario Folder 2:
+
+# Scenario comparison view
+COMP.RMSDIFFERENCELABEL = RMS difference
+COMP.RMSSTRING=\u0394 [RMS]
+COMP.ANALYZE=Analyze
+COMP.TITLE = Scenario Comparison: RMS Difference
+COMP.COMPARE = RMS Compare
+COMP.RESULTS = Results:
+COMP.SELECTFOLDERBUTTON=Select Folder
+COMP.SELECTFOLDERDIALOG=Pick a scenario folder
+COMP.FOLDER1LABEL=Reference Scenario Folder:
+COMP.FOLDER2LABEL=Compare Scenario Folder(s):
+
+# Processor view
+PROCESSOR.TITLE =Data Processor
+PROCESSOR.SOURCEFOLDER=Source Folder:
+PROCESSOR.SELECTSOURCEFOLDER=Select Source Folder
+PROCESSOR.SELECTSOURCEFOLDEDIALOGTITLE=Choose Source Folder
+PROCESSOR.TARGETFOLDER=Target Folder:
+PROCESSOR.SELECTTARGETFOLDER=Select Target Folder
+PROCESSOR.SELECTTARGETFOLDEDIALOGTITLE=Choose Target Folder
+PROCESSOR.POPULATIONDATAFILE=Population Data File:
+PROCESSOR.SELECTPOPULATIONDATAFILE=Select Population Data File
+PROCESSOR.SELECTPOPULATIONDATAFILEDIALOGTITLE=Choose Population Data File
+PROCESSOR.NAMEDATAFILE=Name Data File:
+PROCESSOR.SELECTNAMEDATAFILE=Select Name Data File
+PROCESSOR.SELECTNAMEDATAFILEDIALOGTITLE=Choose Name Data File
+PROCESSOR.RECOVERYRATE=Recovery Rate
+PROCESSOR.SUSCEPTIBLERATE=Susceptible Rate
+PROCESSOR.IMMUNITYLOSSRATE=Immunity Loss Rate
+PROCESSOR.PROCESS= Process Data
+PROCESSOR.PARAMETERS=Disease Parameters:
+PROCESSOR.POPULATIONSIZE=Population Size:
+PROCESSOR.STARTYEAR=Start Year
+PROCESSOR.ENDYEAR=End Year
+PROCESSOR.READINGDATA=Reading data...
+PROCESSOR.FAILEDREADDATA=Invalid data
+
+# Time series chart
+TS.TIMELABEL=Time
+
+# Context menu entries
+ContextMenu.LinearTimeScale=Linear Scale
+ContextMenu.LogTimeScale=Log Scale
+ContextMenu.LinearScaling=Linear Scale
+ContextMenu.LogScaling=Log Scale
+ContextMenu.ShowLegend=Show Legend
+ContextMenu.HideLegend=Hide Legend
diff --git a/org.eclipse.stem.util.loggers/.cdtproject b/org.eclipse.stem.util.loggers/.cdtproject
new file mode 100644
index 0000000..1b2ea83
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.cdtproject
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject/>
diff --git a/org.eclipse.stem.util.loggers/.classpath b/org.eclipse.stem.util.loggers/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.util.loggers/.cproject b/org.eclipse.stem.util.loggers/.cproject
new file mode 100644
index 0000000..2619c56
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.cproject
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="converted.config.907845264">
+<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.907845264" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
+<externalSettings/>
+<extensions/>
+</storageModule>
+</cconfiguration>
+</storageModule>
+</cproject>
diff --git a/org.eclipse.stem.util.loggers/.project b/org.eclipse.stem.util.loggers/.project
new file mode 100644
index 0000000..1ddf4fd
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.util.loggers</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>net.sourceforge.metrics.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>net.sourceforge.metrics.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9993046
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,74 @@
+#Mon Feb 25 14:59:18 PST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=enabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..881db7a
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,50 @@
+#Mon Feb 25 12:29:23 PST 2008
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=true
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.format_source_code=true
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=false
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=true
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_releng code cleanup
+cleanup_settings_version=2
+eclipse.preferences.version=1
diff --git a/org.eclipse.stem.util.loggers/META-INF/MANIFEST.MF b/org.eclipse.stem.util.loggers/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2fea4f1
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.stem.util.loggers;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.stem.util.loggers.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.birt.chart.engine;visibility:=reexport,
+ org.eclipse.birt.core.ui,
+ org.eclipse.stem.ui,
+ org.eclipse.stem.diseasemodels,
+ org.eclipse.stem.jobs,
+ org.eclipse.stem.populationmodels
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.stem.util.loggers,
+ org.eclipse.stem.util.loggers.views
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.stem.util.loggers/build.properties b/org.eclipse.stem.util.loggers/build.properties
new file mode 100644
index 0000000..c88359b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/,\
+               plugin.properties
diff --git a/org.eclipse.stem.util.loggers/icons/sample.gif b/org.eclipse.stem.util.loggers/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.stem.util.loggers/plugin.properties b/org.eclipse.stem.util.loggers/plugin.properties
new file mode 100644
index 0000000..a2bcd6b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/plugin.properties
@@ -0,0 +1,8 @@
+
+pluginName = STEM Logging Utility
+providerName = Eclipse.org
+
+# Actions
+
+_UI_CSV_Logger = CSV Logger
+_UI_Logging = Logging
diff --git a/org.eclipse.stem.util.loggers/plugin.xml b/org.eclipse.stem.util.loggers/plugin.xml
new file mode 100644
index 0000000..e79b279
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/plugin.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+   <extension
+         id="org.eclipse.stem.ui.STEMPerspective"
+         point="org.eclipse.ui.perspectives">
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            allowMultiple="true"
+            category="org.eclipse.stem.ui.views"
+            class="org.eclipse.stem.util.loggers.views.CSVLoggerView"
+            icon="icons/sample.gif"
+            id="org.eclipse.stem.util.loggers"
+            name="%_UI_CSV_Logger">
+         Reports
+      </view>
+      
+   </extension>
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <viewerContribution
+            id="org.eclipse.stem.util.loggers.views"
+            targetID="org.eclipse.stem.ui.views.geographic.map.context">
+         <action
+               class="org.eclipse.stem.util.loggers.views.ReportsContextMenuAction"
+               id="CSVLogger"
+               label="%_UI_CSV_Logger"
+               menubarPath="reports/additions"
+               state="true">
+         </action>
+      </viewerContribution>
+   </extension>
+
+	<extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+     	    category="org.eclipse.stem.ui.preferences.STEMPreferencePage"
+            class="org.eclipse.stem.util.loggers.preferences.LoggingPreferencePage"
+            id="org.eclipse.stem.util.loggers.preferences.LoggingPreferencePage"
+            name="%_UI_Logging"/>
+    </extension>
+</plugin>
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/Activator.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/Activator.java
new file mode 100644
index 0000000..1c4f6e7
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/Activator.java
@@ -0,0 +1,127 @@
+package org.eclipse.stem.util.loggers;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plug-in ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.stem.util.loggers"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+		plugin = this;
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+	}
+
+	/**
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#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;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given plug-in
+	 * relative path
+	 * 
+	 * @param path
+	 *            the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+
+	/**
+	 * Log an error to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized error message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logError(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.ERROR, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logError
+
+	/**
+	 * Log information to the ILog for this plugin
+	 * 
+	 * @param message
+	 *            the localized information message text
+	 * @param exception
+	 *            the associated exception, or null
+	 */
+	public static void logInformation(String message, Throwable exception) {
+		// Do we have a plugin?
+		if (plugin != null) {
+			// Yes
+			plugin.getLog().log(
+					new Status(IStatus.INFO, plugin.getBundle()
+							.getSymbolicName(), 0, message, exception));
+		} else {
+			// No
+			System.out.println(message);
+			// Exception?
+			if (exception != null) {
+				// Yes
+				System.out.println(exception.getMessage());
+			} // if
+		}
+	} // logInformation
+} // Activator
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/MonitorPreferences.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/MonitorPreferences.java
new file mode 100644
index 0000000..bb355b7
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/MonitorPreferences.java
@@ -0,0 +1,174 @@
+package org.eclipse.stem.util.loggers;
+
+/*******************************************************************************
+ * Copyright (c) 2007 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.emf.common.util.URI;
+
+/**
+ * This class represents
+ */
+public class MonitorPreferences {
+
+	Plugin plugin = Activator.getDefault();
+
+	/**
+	 * the users preferences
+	 */
+	Preferences prefs = plugin.getPluginPreferences();
+
+	/**
+	 * This is a list of location IDs from the user runtime preferences that
+	 * remember what locations the user wants to monitor. If no preferences
+	 * exist it will create one for the aggregated data at the world level
+	 */
+	private Set<String> monitorLocationPreferences = new HashSet<String>();
+
+	/**
+	 * the ID of the default location the location ID for the aggregated data at
+	 * the world level
+	 */
+	private static final String DEFAULT_LOCATION_ID = "stem://org.eclipse.stem/node/geo/region/ZZZ";
+
+	/**
+	 * Prefix to all node URI's
+	 */
+	private static final String URI_PREFIX = "stem://org.eclipse.stem/node/geo/region/";
+
+	/**
+	 * any preference location key must contain this substring
+	 * 
+	 */
+	private static final String LOCATION_KEY_SUBSTRING = "location.";
+
+	/**
+	 * the key to the default location should always be defined and should point
+	 * to the location ID for the aggregated data at the world level
+	 */
+	private static final String DEFAULT_LOCATION_KEY = "default.locationID";
+
+	/**
+	 * 
+	 */
+	public MonitorPreferences() {
+
+		if (prefs.contains(DEFAULT_LOCATION_KEY)) {
+			String uri = prefs.getString(DEFAULT_LOCATION_KEY);
+			if (uri != DEFAULT_LOCATION_ID) {
+				setDefaultLocation();
+			} else {
+				monitorLocationPreferences.add(uri);
+			}
+		} else {
+			// set the default ID
+			setDefaultLocation();
+		}
+
+		// now check the other URI's
+		String[] allKeys = prefs.propertyNames();
+		for (int i = 0; i < allKeys.length; i++) {
+			if (allKeys[i].contains(LOCATION_KEY_SUBSTRING)
+					|| allKeys[i].contains(DEFAULT_LOCATION_KEY)) {
+				String nextID = prefs.getString(allKeys[i]);
+				monitorLocationPreferences.add(nextID);
+			}
+		} // for all keys
+
+	} // constructor
+
+	/**
+	 * 
+	 */
+	public void setDefaultLocation() {
+		prefs.setValue(DEFAULT_LOCATION_KEY, DEFAULT_LOCATION_ID);
+		monitorLocationPreferences.add(DEFAULT_LOCATION_ID);
+		plugin.savePluginPreferences();
+	}
+
+	/**
+	 * 
+	 * @return a set of preferred locations to monitor
+	 */
+	public Set<String> getMonitorLocationPreferences() {
+		return monitorLocationPreferences;
+	}
+
+	/**
+	 * @param monitorLocationPreferences
+	 */
+	public void setMonitorLocationPreferences(
+			Set<String> monitorLocationPreferences) {
+		this.monitorLocationPreferences = monitorLocationPreferences;
+	}
+
+	/**
+	 * @param newID
+	 */
+	public void addLocationPref(String newID) {
+		if (prefs != null) {
+			// is it really new?
+
+			if (!monitorLocationPreferences.contains(newID)) {
+				// we use the uri being added to generate a unique key
+				// by concatenating "location."+newURI
+				// preferences keys must be unique
+				// this also guarantees we never duplicate the same location
+				prefs.setValue(LOCATION_KEY_SUBSTRING + newID, newID);
+				this.monitorLocationPreferences.add(newID);
+				plugin.savePluginPreferences();
+			} // it ID is really new
+		} // if prefs not null
+	} // addLocationPref
+
+	/**
+	 * @param oldID
+	 */
+	public void removeLocationPref(String oldID) {
+		if (prefs != null) {
+			// is it really new?
+			if (!monitorLocationPreferences.contains(oldID))
+				this.monitorLocationPreferences.remove(oldID);
+			// System.out.println("MonitorPreferences() need method to remove
+			// preference name value pairs for "+oldID);
+
+			// does not work. No remove method?
+			// prefs.setToDefault(oldID);
+			// prefs.setValue(oldID, "");
+			plugin.savePluginPreferences();
+		} // if prefs not null
+	} // removeLocationPref
+
+	/**
+	 * removes the uri prefix from an string ID
+	 * 
+	 * @param uri
+	 * @return URIsuffix - the geographic code part of the uri
+	 */
+	public static String getURIsuffix(String uri) {
+		String retVal = uri.replaceAll(URI_PREFIX, "");
+		return retVal;
+	}// get uri suffix
+
+	/**
+	 * returns the default location ID as a URI
+	 * 
+	 * @return the URI
+	 */
+	public static URI getDefaultURI() {
+		return URI.createURI(DEFAULT_LOCATION_ID);
+	}
+
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/LoggingPreferencePage.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/LoggingPreferencePage.java
new file mode 100644
index 0000000..65215ba
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/LoggingPreferencePage.java
@@ -0,0 +1,73 @@
+package org.eclipse.stem.util.loggers.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By sub-classing <samp>FieldEditorPreferencePage</samp>,
+ * we can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class LoggingPreferencePage extends FieldEditorPreferencePage implements
+		IWorkbenchPreferencePage {
+
+	/**
+	 * Default logging setting
+	 */
+	public static boolean DEFAULT_LOGGING_FLAG = false;
+	
+	/**
+	 * The ID of the STEM Preference page.
+	 */
+	public static final String ID_LOGGING_PREFERENCE_PAGE = "org.eclipse.stem.ui.preferences.LoggingPreferencePage";
+
+	/**
+	 * Constructor
+	 */
+	public LoggingPreferencePage() {
+		super(GRID);
+		setPreferenceStore(org.eclipse.stem.util.loggers.Activator.getDefault().getPreferenceStore());
+		setDescription(Messages.getString("LoggingPPage.Logging")); //$NON-NLS-1$
+	} // STEMPreferencePage
+
+	/**
+	 * Creates the field editors. Field editors are abstractions of the common
+	 * GUI blocks needed to manipulate various types of preferences. Each field
+	 * editor knows how to save and restore itself.
+	 */
+	public void createFieldEditors() {
+		final BooleanFieldEditor integerFieldEditor = new BooleanFieldEditor(
+				PreferenceConstants.LOG_INTEGER_PREFERENCE,
+				Messages.getString("LPageInteger"), getFieldEditorParent()); //$NON-NLS-1$
+
+		addField(integerFieldEditor);
+	} // createFieldEditors
+
+	/**
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(@SuppressWarnings("unused")//$NON-NLS-1$
+			IWorkbench workbench) {
+		// Nothing
+	} // init
+
+} // STEMPreferencePage
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/Messages.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/Messages.java
new file mode 100644
index 0000000..6f34bc0
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.util.loggers.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class retrieves messages for STEM preferences.
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.util.loggers.preferences.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceConstants.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceConstants.java
new file mode 100644
index 0000000..5999c8b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceConstants.java
@@ -0,0 +1,24 @@
+package org.eclipse.stem.util.loggers.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * Constant definitions for plug-in preferences
+ */
+public class PreferenceConstants {
+
+	/**
+	 * Logging format
+	 */
+	public static final String LOG_INTEGER_PREFERENCE = "org.eclipse.stem.logging.integers";
+
+} // PreferenceConstants
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceInitializer.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..3cdadcc
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/PreferenceInitializer.java
@@ -0,0 +1,33 @@
+package org.eclipse.stem.util.loggers.preferences;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.stem.ui.Activator;
+
+/**
+ * Class used to initialize default preference values.
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+	
+	/**
+	 * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
+	 */
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		// for map and y-axis data display
+		store.setDefault(PreferenceConstants.LOG_INTEGER_PREFERENCE,
+						LoggingPreferencePage.DEFAULT_LOGGING_FLAG);
+		
+	}
+} // PreferenceInitializer
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/messages.properties b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/messages.properties
new file mode 100644
index 0000000..8297736
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/preferences/messages.properties
@@ -0,0 +1,15 @@
+# PreferenceMessages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+LoggingPPage.Logging=Logging preferences
+LPageInteger=Log integers 
\ No newline at end of file
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/util/Util.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/util/Util.java
new file mode 100644
index 0000000..5ee0690
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/util/Util.java
@@ -0,0 +1,46 @@
+package org.eclipse.stem.util.loggers.util;
+
+import java.io.File;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+public class Util {
+	
+	// Get the path from the workspace location
+	private static final IPath PATH = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+	private static final String sep = File.separator;
+	private static final String scenariosURLPrefix = "platform:/resource/";
+	private static final String builtInScenarioProjectFolder = "BuiltInScenarios";
+	private static final String recordedSimulationsFolderName = "Recorded Simulations";
+	
+	/**
+	 * Given a scenario, return the folder where recorded simulations are stored.
+	 * 
+	 * @param scenarioURL
+	 * @return String Folder to store recorded simulations
+	 */
+	public static String getLoggingFolder(String scenarioURL) {
+		boolean builtInScenario = scenarioURL.startsWith(scenariosURLPrefix);
+		IPath path1;
+		if(builtInScenario) {
+			String scenarioRelativePath = scenarioURL.substring(scenariosURLPrefix.length());
+			path1 = PATH.append(scenarioRelativePath).removeLastSegments(2);
+		} else {
+			path1 = PATH.append(builtInScenarioProjectFolder);
+		}
+		String path = path1.append(sep).append(recordedSimulationsFolderName).toOSString();
+		return path;
+	}
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerFactory.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerFactory.java
new file mode 100644
index 0000000..cc6d632
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerFactory.java
@@ -0,0 +1,66 @@
+// CSVLoggerFactory.java
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This class is a factory for creating {@link LoggerControl} instances.
+ */
+public class CSVLoggerFactory implements LoggerControlFactory {
+
+	/**
+	 * public INSTANCE for this Factory
+	 */
+	public static CSVLoggerFactory INSTANCE = new CSVLoggerFactory();
+
+	/**
+	 * Constants 
+	 */
+	public static final String LOGGER_TYPE = "CSVLogger";
+	
+	/**
+	 * Empty constructor
+	 */
+	private CSVLoggerFactory() {
+		/*
+		 * empty constructor
+		 */
+	}
+	
+	/**
+	 * @param parent
+	 * @param dirName
+	 * @param simulation
+	 * @param dm 
+	 * @return new DataHistoryLogger()
+	 */
+	public LoggerControl create(final Composite parent, String dirName, ISimulation simulation, IntegrationDecorator dm) {
+		NewCSVLogWriter  newCSVWriter = new NewCSVLogWriter(dirName, simulation, dm);
+		
+		LoggerControl ctrl = new DataHistoryLogger(parent, newCSVWriter, simulation, dm);
+		
+		return ctrl;
+	}
+	
+	/**
+	 * @return TODO JFK
+	 * 
+	 */
+	public String getControlType() {
+		return LOGGER_TYPE;
+	}
+
+} // CSVLoggerFactory
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerView.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerView.java
new file mode 100644
index 0000000..d18c08b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CSVLoggerView.java
@@ -0,0 +1,102 @@
+// CSVLoggerView 
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This view contains BIRT output that plots values of variables in STEM
+ * simulations.
+ */
+
+public class CSVLoggerView extends ViewPart implements ISelectionListener {
+
+	//private List<Identifiable> selectedIdentifiables = null;
+
+	
+	/**
+	 * This is the decorator that has been selected by the combo box.
+	 */
+	protected Decorator selectedDecorator;
+
+	private LoggerViewer loggerViewer;
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(final Composite parent) {
+
+		loggerViewer = new LoggerViewer(parent, CSVLoggerFactory.INSTANCE);
+		loggerViewer.setInput(SimulationManager.getManager());
+		
+	//	loggerViewer.addAllActionButtons(SimulationManager.getManager());
+
+		getSite().setSelectionProvider(loggerViewer);
+
+		// Register with the SelectionService
+		// Stefan: Commented out since we don't allow
+		// logging of individual locations
+		
+/*		getSite().getWorkbenchWindow().getSelectionService()
+				.addSelectionListener(this);
+*/
+	} // createPartControl
+
+	/**
+	 * This method is called whenever ANYTHING is selected in the Eclipse
+	 * workbench. It's job is to filter out selections of ISimulation instances
+	 * and update the chart in the CSVLoggerCanvas
+	 * @param part 
+	 * @param selection 
+	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(final IWorkbenchPart part,
+			final ISelection selection) {
+	     /*
+	      * this method is empty because now we log the entire simulation
+	      * we now longer have to track individual locations of identifiables as
+	      * logged/not logged	
+	      */
+
+	} // selectionChanged
+
+	
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+	 */
+	@Override
+	public void dispose() {
+		getSite().getWorkbenchWindow().getSelectionService()
+				.removeSelectionListener(this);
+	} // dispose
+
+	/**
+	 * This is required by the interface, but we're not using it.
+	 * 
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	@Override
+	public void setFocus() {
+		// Nothing
+	} // setFocus
+
+} // CSVLoggerView
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CustomCSVLogger.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CustomCSVLogger.java
new file mode 100644
index 0000000..4862091
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/CustomCSVLogger.java
@@ -0,0 +1,221 @@
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListenerSync;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * DataHistoryLogger
+ */
+public class CustomCSVLogger 
+	implements ISimulationListenerSync {
+	/**
+	 * The {@link Simulation} for the 
+	 */
+	protected ISimulation simulation = null;
+	/**
+	 * The {@link DiseaseModel} for the logged data 
+	 */
+	protected IntegrationDecorator diseaseModel = null;
+	/**
+	 * abstract log writer
+	 */
+	LogWriter logWriter;
+	/**
+	 * this simulations graph
+	 */
+	Graph graph = null;
+	/**
+	 * the time provider tells simulation time
+	 */
+	TimeProvider timeProvider = null;
+	
+	protected Map<Node, Integer> nodeLevels;
+
+	/**
+	 * @param outputDir
+	 * @param simulation 
+	 * @param dm
+	 */
+	public CustomCSVLogger(final String outputDir, ISimulation simulation, IntegrationDecorator dm) {
+		this.logWriter = new NewCSVLogWriter(outputDir, simulation, dm);
+		setSimulation(simulation);
+		this.diseaseModel = dm;
+	}
+	
+	/**
+	 * Setting the {@link Simulation} has the side-effect of causing the control
+	 * to remove itself as a listener from any previously set {@link Simulation}
+	 * and adding itself as a listener to the new one. It will also cause the
+	 * image to be initialized from the contents of the new {@link Simulation}
+	 * as appropriate.
+	 * 
+	 * @param simulation
+	 *            the simulation whose Lat/Long data will be rendered.
+	 */
+	public final void setSimulation(final ISimulation simulation) {
+		// Any need to switch?
+		if (this.simulation == simulation) {
+			// No
+			return;
+		} // if no need to switch?
+
+		// Should we remove ourselves as listeners from the current simulation?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.removeSimulationListenerSync(this);
+		}
+
+		this.nodeLevels = this.getNodeLevels(simulation);
+		
+		this.simulation = simulation;
+		// Was there a new simulation to switch to?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.addSimulationListenerSync(this);
+			initializeFromSimulation(this.simulation);
+		} else {
+			// No
+			// Just display a blank screen
+			initializeFromSimulation(null);
+		}
+
+		flushLoggerData();
+	} // setSimulation
+	
+	/**
+	 * Initialize the control from a {@link Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link Simulation} whose state will be visualized in the
+	 *            control.
+	 */
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		graph = simulation.getScenario().getCanonicalGraph();
+
+		timeProvider = (TimeProvider) TimeProviderAdapterFactory.INSTANCE
+				.adapt(graph, TimeProvider.class);
+	} // initializeFromSimulation
+
+	/**
+	 * 
+	 */
+	public void flushLoggerData() {
+		if (logWriter != null) {
+			logWriter.flushLoggerData();
+		}
+	}
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListenerSync#simulationChangedSync(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChangedSync(final SimulationEvent event) {
+		// Data to log ?
+		if (event.getSimulationState() == SimulationState.RUNNING) {
+			if ((logWriter != null) && (logWriter.needsHeader)) {
+				// This will write the headers and the first line of data before first cycle
+				logWriter.logHeader(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider);
+				//logWriter.logData(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider, true);
+			}
+		} else if(event.getSimulationState() == SimulationState.COMPLETED_CYCLE) {
+			// Write data after each cycle of simulation
+			final Display display = Display.getDefault();
+			if ((logWriter != null) && (!display.isDisposed())) {
+				if (logWriter != null) {
+					logWriter.logData(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider, false);
+				}
+			} // if
+		} else 
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			close();
+		} // if
+
+	} // simulationChanged
+	
+	/**
+	 * Return all nodes and their corresponding level. We use this to log data using 
+	 * different resolutions.
+	 * 
+	 * @param simulation
+	 * @return Map with node and level
+	 */
+	@SuppressWarnings("boxing")
+	private Map<Node, Integer> getNodeLevels(ISimulation simulation) {
+		Map<Node, Integer> result = new HashMap<Node, Integer>();
+		final Graph graph = simulation.getScenario().getCanonicalGraph();
+		if (graph != null) {
+			final EMap<URI,Node> allNodes = graph.getNodes();
+			final Set<URI> allGraphURIs = allNodes.keySet();
+		    Iterator<URI> graphIter2 = allGraphURIs.iterator();
+		  
+		    while((graphIter2!=null)&&(graphIter2.hasNext())) {
+		    	URI uri = graphIter2.next();
+		    	Node node = allNodes.get(uri);
+		    	// Bug fix. Make sure the node has labels
+		    	if(node.getLabels().size() == 0) continue;
+		    	String id =  node.getURI().toString();
+		    	int level = getAdminLevel(id);
+		    	result.put(node, level);
+		    }
+		} // graph not null
+		return result;
+	}
+	
+	private int getAdminLevel(String uriKey) {
+		int retVal = 0;
+		String test = uriKey;
+		while(test.contains("-")) {
+			retVal ++;
+			int idx1 = test.indexOf("-");
+			String test2 = test.substring(idx1+1, test.length());
+			test = test2;
+		}
+		return retVal;
+	}
+
+	/**
+	 *
+	 */
+	public void close() {
+		if (logWriter != null) {
+			logWriter.flushLoggerData();
+		}
+		if (logWriter != null) {
+			logWriter.closeLoggerData();
+		}
+		this.logWriter = null;
+
+		if (simulation != null) {
+			// Yes
+			simulation.removeSimulationListenerSync(this);
+		} // if
+	}
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/DataHistoryLogger.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/DataHistoryLogger.java
new file mode 100644
index 0000000..e356238
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/DataHistoryLogger.java
@@ -0,0 +1,364 @@
+// DataHistoryLogger.java
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProvider;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapterFactory;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListenerSync;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationEvent;
+import org.eclipse.stem.jobs.simulation.SimulationState;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.ui.widgets.PropertySelector;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * DataHistoryLogger
+ */
+public class DataHistoryLogger extends LoggerControl implements
+		ISimulationListenerSync {
+
+	//private static final String NODE_PREFIX_TEXT = "node/geo/region/";
+
+	/**
+	 * The location (node) name label
+	 */
+	Label loggerTypeLabel;
+
+	/**
+	 * The location (node) id label
+	 */
+	Label loggerDiseaseLabel;
+
+	/**
+	 * abstract log writer
+	 */
+	LogWriter logWriter;
+
+	/**
+	 * this simulations graph
+	 */
+	Graph graph = null;
+
+	/**
+	 * the time provider tells simulation time
+	 */
+	TimeProvider timeProvider = null;
+
+	PropertySelector propertySelector;
+	List<ItemPropertyDescriptor> selectedProperties;
+
+	/**
+	 * This interface is implemented by classes that select out the properties
+	 * to be displayed.
+	 */
+	public interface PropertySieve {
+		/**
+		 * @param dynamicLabel
+		 *            the label that contains the candidate properties to be
+		 *            displayed.
+		 * @return a <code>List</code> of the properties that should be
+		 *         displayed in the order that they should be displayed.
+		 */
+		List<ItemPropertyDescriptor> sieve(final DynamicLabel dynamicLabel);
+	} // PropertySieve
+
+	/**
+	 * This sieve selects all of those properties that have relative values.
+	 */
+	private final PropertySieve propertySieve = new PropertySieve() {
+		/**
+		 * @see org.eclipse.stem.ui.widgets.PropertySelector.PropertySieve#sieve(org.eclipse.stem.core.graph.DynamicLabel)
+		 */
+		public List<ItemPropertyDescriptor> sieve(
+				final DynamicLabel dynamicLabel) {
+			final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+			final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+					.adapt(dynamicLabel, RelativeValueProvider.class);
+
+			// Does the label have relative values?
+			if (rvp != null) {
+				// Yes
+				rvp.setTarget(dynamicLabel);
+
+				for (final Object element : rvp.getProperties()) {
+					final ItemPropertyDescriptor property = (ItemPropertyDescriptor) element;
+					retValue.add(property);
+				} // for each property
+			} // if the label has relative values
+			return retValue;
+		} // sieve
+	};
+
+	/**
+	 * 
+	 * @param parent
+	 * @param logWriter
+	 * @param simulation 
+	 * @param dm
+	 */
+	public DataHistoryLogger(final Composite parent, final LogWriter logWriter, ISimulation simulation, IntegrationDecorator dm) {
+		super(parent, SWT.None);
+		this.logWriter = logWriter;
+		setSimulation(simulation);
+		setDiseaseModel(dm);
+		createContents();
+	} // DataHistoryLogger
+
+	/**
+	 * Create the contents of the logger
+	 */
+	private void createContents() {
+		final FillLayout layout = new FillLayout(SWT.HORIZONTAL);
+		setLayout(layout);
+
+		final Composite inner = new Composite(this, SWT.NONE);
+		final FormLayout innerLayout = new FormLayout();
+
+		inner.setLayout(innerLayout);
+
+		
+		
+		final Display display = this.getDisplay();
+		
+		final Color colorColumn1 = new Color(display, new RGB(180, 180, 200));
+		final Color colorColumn2 = new Color(display, new RGB(190, 190, 220));
+		final Color colorColumn3 = new Color(display, new RGB(180, 180, 200));
+		
+		final Color bgColor = new Color(display, new RGB(170, 170, 190));
+		inner.setBackground(bgColor);
+
+		propertySelector = new PropertySelector(inner, SWT.NONE, true);
+		
+
+		
+
+		loggerTypeLabel = new Label(inner,  SWT.CENTER);
+		loggerTypeLabel.setBackground(colorColumn1);
+		loggerTypeLabel.setText("CSV Logger");
+		loggerTypeLabel.setAlignment(SWT.CENTER);
+		
+		if(simulationNameLabel == null) {
+			simulationNameLabel = new Label(inner,  SWT.CENTER);
+			simulationNameLabel.setText(simulation.getName());
+			simulationNameLabel.setBackground(colorColumn2);
+			simulationNameLabel.setAlignment(SWT.CENTER);
+		}
+		
+		loggerDiseaseLabel = new Label(inner,  SWT.CENTER);
+		loggerDiseaseLabel.setBackground(colorColumn3);
+		String idtext = null;
+		if(this.diseaseModel instanceof DiseaseModel)
+			idtext = ((DiseaseModel)this.diseaseModel).getDiseaseName();
+		else if(this.diseaseModel instanceof PopulationModel)
+			idtext = ((PopulationModel)this.diseaseModel).getName();
+		
+		loggerDiseaseLabel.setText(idtext);
+		loggerDiseaseLabel.setAlignment(SWT.CENTER);
+
+		// Logger Name Label
+		final FormData loggerNameLabelFormData = new FormData();
+		loggerNameLabelFormData.top = new FormAttachment(0, 0);
+		loggerNameLabelFormData.left = new FormAttachment(0, 0);
+		loggerNameLabelFormData.right = new FormAttachment(25, 0);
+		loggerNameLabelFormData.bottom = new FormAttachment(0, 100);
+		loggerTypeLabel.setLayoutData(loggerNameLabelFormData);
+		
+		// Simulation Name Label
+		final FormData simulationNameLabelFormData = new FormData();
+		simulationNameLabelFormData.top = new FormAttachment(0, 0);
+		simulationNameLabelFormData.left = new FormAttachment(25, 0);
+		simulationNameLabelFormData.right = new FormAttachment(50, 0);
+		simulationNameLabelFormData.bottom = new FormAttachment(0, 100);
+		simulationNameLabel.setLayoutData(simulationNameLabelFormData);
+
+		// ID Label
+		final FormData loggerIdLabelFormData = new FormData();
+		loggerIdLabelFormData.top = new FormAttachment(0, 0);
+		loggerIdLabelFormData.left = new FormAttachment(50, 0);
+		loggerIdLabelFormData.right = new FormAttachment(90, 0);
+		loggerIdLabelFormData.bottom = new FormAttachment(0, 100);
+		loggerDiseaseLabel.setLayoutData(loggerIdLabelFormData);
+
+		// Property Selector
+		propertySelector.setSize(0, 0);
+		final FormData propertySelectorFormData = new FormData();
+		propertySelectorFormData.top = new FormAttachment(0, 0);
+		propertySelectorFormData.left = new FormAttachment(100, 0);
+		propertySelectorFormData.right = new FormAttachment(100, 0);
+		propertySelector.setLayoutData(propertySelectorFormData);
+
+		propertySelector.setVisible(false);
+
+		
+	} // createContents
+
+	/**
+	 * @param decorator
+	 *            a {@link Decorator} that modifies the state of the canonical
+	 *            {@link Graph} in the {@link Simulation}.
+	 * @param simulation
+	 *            the {@link Simulation}
+	 * @return a {@link List} of the properties of the {@link Decorator} that
+	 *         can should be displayed.
+	 */
+	List<ItemPropertyDescriptor> getPropertiesToDisplay(
+			final Decorator decorator) {
+		final List<ItemPropertyDescriptor> retValue = new ArrayList<ItemPropertyDescriptor>();
+		// Got Decorator?
+		if (decorator != null) {
+			// Yes
+			// Are there any labels to update?
+			if (!decorator.getLabelsToUpdate().isEmpty()) {
+				// Yes
+				// The first one is good enough
+				retValue.addAll(propertySieve.sieve(decorator
+						.getLabelsToUpdate().get(0)));
+			} // if labels to update
+		} // if got decorator
+		return retValue;
+	} // getPropertiesToDisplay
+
+	/**
+	 * to remove the control e.g. by a remove button event
+	 */
+	@Override
+	public void remove() {
+		if (logWriter != null) {
+			logWriter.flushLoggerData();
+		}
+		if (logWriter != null) {
+			logWriter.closeLoggerData();
+		}
+		this.logWriter = null;
+		removeListeners.clear();
+
+		propertySelector.setDecorators(Collections.EMPTY_LIST);
+		dispose();
+	}
+
+	/**
+	 * Initialize the decorators and labels associated with the simulation
+	 * 
+	 */
+
+	public void setIdentifiable() {
+		//nothing
+	} 
+	
+	/**
+	 * Initialize the control from a {@link Simulation} instance.
+	 * 
+	 * @param simulation
+	 *            the {@link Simulation} whose state will be visualized in the
+	 *            control.
+	 */
+	@Override
+	protected void initializeFromSimulation(final ISimulation simulation) {
+		graph = simulation.getScenario().getCanonicalGraph();
+
+		timeProvider = (TimeProvider) TimeProviderAdapterFactory.INSTANCE
+				.adapt(graph, TimeProvider.class);
+	} // initializeFromSimulation
+
+	/**
+	 * 
+	 */
+	@Override
+	public void refresh2() {
+		if (logWriter != null) {
+			logWriter.flushLoggerData();
+		}
+	} // refresh2
+
+	/**
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationListenerSync#simulationChangedSync(org.eclipse.stem.jobs.simulation.SimulationEvent)
+	 */
+	public void simulationChangedSync(final SimulationEvent event) {
+		// Data to log ?
+		if (event.getSimulationState() == SimulationState.RUNNING) {
+			if ((logWriter != null) && (logWriter.needsHeader)) {
+				// This will write the headers and the first line of data before first cycle
+				logWriter.logHeader(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider);
+				// Don't log here since the models have not completly been initialized yet
+				//logWriter.logData(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider, true);
+			}
+		} else if(event.getSimulationState() == SimulationState.COMPLETED_CYCLE) {
+			// Write data after each cycle of simulation
+			final Display display = Display.getDefault();
+			if ((logWriter != null) && (!display.isDisposed())) {
+				if (logWriter != null) {
+					logWriter.logData(this.simulation, this.diseaseModel, this.nodeLevels, timeProvider, false);
+				}
+			} // if
+		} else 
+		// Is the Simulation stopping (i.e. being deleted?)
+		if (event.getSimulationState() == SimulationState.STOPPED) {
+			// Yes
+			if (logWriter != null) {
+				logWriter.closeLoggerData();
+			}
+			dispose();
+		} // if
+
+	} // simulationChanged
+
+	/**
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		if (logWriter != null) {
+			logWriter.closeLoggerData();
+		}
+		this.logWriter = null;
+
+		if (simulation != null) {
+			// Yes
+			simulation.removeSimulationListenerSync(this);
+		} // if
+		super.dispose();
+	} // dispose
+
+	/**
+	 * @see org.eclipse.stem.util.loggers.views.LoggerControl#getIdentifiable()
+	 */
+	/*@Override
+	public Identifiable getIdentifiable() {
+		return identifiable;
+	}
+*/
+} // DataHistoryLogger
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/IRemoveListener.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/IRemoveListener.java
new file mode 100644
index 0000000..74f222a
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/IRemoveListener.java
@@ -0,0 +1,30 @@
+// IRemoveListener
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.common.Identifiable;
+
+/**
+ * When the remove button is pressed by the user
+ * @author James
+ *
+ */
+public interface IRemoveListener {
+	/**
+	 * 
+	 * @param identifiable
+	 */
+	void identifiableRemoved(Identifiable identifiable) ;
+	
+
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LogWriter.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LogWriter.java
new file mode 100644
index 0000000..7fbe465
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LogWriter.java
@@ -0,0 +1,156 @@
+// LogWriter 
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Map;
+
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+
+/**
+ * Abstract LogWriter class
+ * 
+ */
+public abstract class LogWriter {
+	
+	protected static Calendar now = Calendar.getInstance();
+	
+	/**
+	 * This prefix precedes the node id and must be removed in the 
+	 * filterFilename method to auto-generate the output file name.
+	 */
+	public static final String LOCATIONID_PREFIX = "/node/geo/region/";
+	
+	protected static final String sep = File.separator;
+	
+	/**
+	 * flag to indicate Header has been successfully written
+	 */
+	public boolean needsHeader = true;
+	
+	protected boolean done = false;
+	
+
+	
+	/**
+	 * 
+	 * @param rvp
+	 */
+	public abstract void logHeader(RelativeValueProviderAdapter rvp);
+	
+	/**
+	 * New method
+	 * @param simulation
+	 * @param dm DiseaseModel
+	 * @param nodeLevels
+	 * @param timeProvider Time Provider
+	 */
+	
+	public abstract void logHeader(ISimulation simulation, IntegrationDecorator dm, Map<Node, Integer> nodeLevels, TimeProvider timeProvider);
+	
+	
+	/**
+	 * Must Flush and close the file
+	 */
+	public abstract void flushLoggerData();
+	
+	
+	/**
+	 * Must Flush and close the file
+	 */
+	public abstract void closeLoggerData();
+	
+	
+	
+	/**
+	 * Must implement this method to log data in run thread
+	 * @param rvp 
+	 * @param timeProvider 
+	 * 
+	 */
+	public abstract void logData(RelativeValueProviderAdapter rvp, TimeProvider timeProvider);
+	
+	/**
+	 * Implement this one for the new logging method
+	 * 
+	 * @param sim Simulation
+	 * @param dm Disease model to log
+	 * @param nodeLevels 
+	 * @param timeProvider timeProvider
+	 * @param beforeStart
+	 */
+	public abstract void logData(ISimulation sim, IntegrationDecorator dm, Map<Node, Integer>nodeLevels, TimeProvider timeProvider, boolean beforeStart);
+	
+	/**
+	 * resets the output directory for a new set of runs
+	 * by resetting the calendars
+	 */
+	public static void reset() {
+		// reset the calendar in case we start again
+		now = Calendar.getInstance();
+	}
+	
+	/**
+	 * get the current date/time in numeric format
+	 * for log directory name
+	 * @return date time string
+	 */
+	public static String getDateTimeNumeric() {
+		
+		int month = now.get(Calendar.MONTH) + 1;
+		int day = now.get(Calendar.DAY_OF_MONTH);
+		int year = now.get(Calendar.YEAR);
+		int hrs = now.get(Calendar.HOUR_OF_DAY)+1;
+		int mins = now.get(Calendar.MINUTE);
+		//int sec = now.get(Calendar.SECOND);
+		
+				
+		String smonth = ""+month;
+		if (month < 10) smonth = "0"+smonth;
+		String sday = ""+day;
+		if (day < 10) sday = "0"+sday;
+		String shrs = ""+hrs;
+		if (hrs < 10) shrs = "0"+shrs;
+		String smin = ""+mins;
+		if (mins < 10) smin = "0"+smin;
+		//String ssec = ""+sec;
+		//if (sec < 10) ssec = "0"+ssec;
+		String time = ""+year+smonth+sday+"_"+shrs+smin;
+		return time;
+	}//getDateTimeNumeric
+	
+	/**
+	 * filters the location id prefix from the beginning of
+	 *  a nodes ID for generation of a file name
+	 * @param unfiltered
+	 * @return the filtered file name using location id.
+	 */
+	public static String filterFilename(String unfiltered) {
+		int last = unfiltered.indexOf(LOCATIONID_PREFIX);
+		if (last >=0) {
+			last += LOCATIONID_PREFIX.length();
+			return unfiltered.substring(last, unfiltered.length());
+		} 
+		return unfiltered;
+
+	
+	}
+
+}
+
+
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControl.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControl.java
new file mode 100644
index 0000000..e16107f
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControl.java
@@ -0,0 +1,332 @@
+// LoggerControl
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationListenerSync;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * LoggerControl is a subclass of Canvas suitable for chart drawings.
+ */
+abstract public class LoggerControl extends Composite implements
+		ISimulationListenerSync, ISelectionProvider {
+
+	protected RelativeValueProviderAdapter rvp;
+	protected Label simulationNameLabel;
+	
+	/**
+	 * The {@link Simulation} for the 
+	 */
+	protected ISimulation simulation = null;
+	
+	/**
+	 * The {@link DiseaseModel} for the logged data 
+	 */
+	
+	protected IntegrationDecorator diseaseModel = null;
+	
+	protected Map<Node, Integer> nodeLevels;
+	
+	
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<ISelectionChangedListener> listeners = new CopyOnWriteArrayList<ISelectionChangedListener>();
+
+	/**
+	 * The collection of ISelectionChangedListener waiting to be told about
+	 * selections.
+	 */
+	protected final List<IRemoveListener> removeListeners = new CopyOnWriteArrayList<IRemoveListener>();
+
+	/**
+	 * The <code>Identifiable</code> that was most recently selected, or
+	 * <code>null</code> if none has been selected.
+	 */
+	ISelection selection = null;
+
+	/**
+	 * The width of the layout margin.
+	 */
+	protected static final int MARGIN_WIDTH = 5;
+
+	/**
+	 * The height of the layout margin.
+	 */
+	protected static final int MARGIN_HEIGHT = 5;
+
+	/**
+	 * @param parent
+	 * @param style
+	 */
+	public LoggerControl(final Composite parent, final int style) {
+		super(parent, style);
+
+		this.addDisposeListener(new DisposeListener() {
+			/**
+			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
+			 */
+			public void widgetDisposed(@SuppressWarnings("unused")
+			final DisposeEvent e) {
+				dispose();
+			}
+		});
+
+		final FormLayout layout = new FormLayout();
+		layout.marginHeight = MARGIN_HEIGHT;
+		layout.marginWidth = MARGIN_WIDTH;
+		setLayout(layout);
+
+	} // LoggerControl
+
+	/**
+	 * @param parent
+	 *            the parent SWT control that this composite will be a child of
+	 * @return the SWT Composite to be displayed above the MapCanvas in the
+	 *         control
+	 */
+	protected Composite createTopComposite(final Composite parent) {
+		//final Composite topComposite = new Composite(parent, SWT.NONE);
+
+		
+		
+		return parent;
+	} // createTopComposite
+
+	
+	
+	/**
+	 * All controllers must implement this 
+	 * to remove the control e.g. by a remove button event
+	 */
+	public abstract void remove() ;
+	
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void addIRemoveListener(IRemoveListener listener) {
+		removeListeners.add(listener);
+	}
+	
+	/**
+	 * 
+	 * @param listener
+	 */
+	public void removeIRemoveListener(IRemoveListener listener) {
+		removeListeners.remove(listener);
+	}
+	
+	/**
+	 * 
+	 * @param ident
+	 */
+	public void fireRemoveEvent(Identifiable ident) {
+		for (final IRemoveListener listener : removeListeners) {
+			listener.identifiableRemoved(ident);
+		} // for each ISelectionChangedListener
+	}
+
+	/**
+	 * Setting the {@link Simulation} has the side-effect of causing the control
+	 * to remove itself as a listener from any previously set {@link Simulation}
+	 * and adding itself as a listener to the new one. It will also cause the
+	 * image to be initialized from the contents of the new {@link Simulation}
+	 * as appropriate.
+	 * 
+	 * @param simulation
+	 *            the simulation whose Lat/Long data will be rendered.
+	 */
+	public final void setSimulation(final ISimulation simulation) {
+		// Any need to switch?
+		if (this.simulation == simulation) {
+			// No
+			return;
+		} // if no need to switch?
+
+		// Should we remove ourselves as listeners from the current simulation?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.removeSimulationListenerSync(this);
+		}
+
+		this.nodeLevels = this.getNodeLevels(simulation);
+		
+		this.simulation = simulation;
+		selection = null;
+		// Was there a new simulation to switch to?
+		if (this.simulation != null) {
+			// Yes
+			this.simulation.addSimulationListenerSync(this);
+			initializeFromSimulation(this.simulation);
+		} else {
+			// No
+			// Just display a blank screen
+			initializeFromSimulation(null);
+		}
+
+		refresh2();
+	} // setSimulation
+
+	/**
+	 * setDiseaseModel Set the disease model for the logger
+	 *
+	 *@param dm The disease model
+	 */
+	
+	public void setDiseaseModel(IntegrationDecorator dm) {
+		this.diseaseModel = dm;
+	}
+	/**
+	 * 
+	 * @param simulation
+	 */
+	protected abstract void initializeFromSimulation(
+			final ISimulation simulation);
+
+	/**
+	 * 
+	 */
+	protected abstract void refresh2();
+
+	/**
+	 * @return the selection
+	 */
+	public final ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
+	 */
+	public void setSelection(final ISelection selection) {
+		this.selection = selection;
+		fireSelection(selection);
+	}
+
+	/**
+	 * 
+	 * @param identifiable
+	 * @param sim 
+	 */
+	//public abstract void setIdentifiable(Identifiable identifiable, ISimulation sim);
+	
+	/**
+	 * Returns the Identifiable being displayed
+	 * 
+	 * @return The identifiable to be monitored
+	 * 
+	 */
+	//public abstract Identifiable getIdentifiable();
+
+	/**
+	 * Pass a {@link SelectionChangedEvent} along to listeners.
+	 * 
+	 * @param selection
+	 *            the {@link ISelection} to be giving to the listeners.
+	 */
+	public void fireSelection(final ISelection selection) {
+
+		final SelectionChangedEvent event = new SelectionChangedEvent(this,
+				selection);
+		for (final ISelectionChangedListener listener : listeners) {
+			listener.selectionChanged(event);
+		} // for each ISelectionChangedListener
+
+	} // fireSelection
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void addSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.add(listener);
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
+	 */
+	public void removeSelectionChangedListener(
+			final ISelectionChangedListener listener) {
+		listeners.remove(listener);
+	}
+
+	/**
+	 * Return all nodes and their corresponding level. We use this to log data using 
+	 * different resolutions.
+	 * 
+	 * @param simulation
+	 * @return Map with node and level
+	 */
+	
+	@SuppressWarnings("boxing")
+	public Map<Node, Integer> getNodeLevels(ISimulation simulation) {
+		Map<Node, Integer> result = new HashMap<Node, Integer>();
+		final Graph graph = simulation.getScenario().getCanonicalGraph();
+		if (graph != null) {
+			final EMap<URI,Node> allNodes = graph.getNodes();
+			final Set<URI> allGraphURIs = allNodes.keySet();
+		    Iterator<URI> graphIter2 = allGraphURIs.iterator();
+		  
+		    while((graphIter2!=null)&&(graphIter2.hasNext())) {
+		    	URI uri = graphIter2.next();
+		    	Node node = allNodes.get(uri);
+		    	// Bug fix. Make sure the node has labels
+		    	if(node.getLabels().size() == 0) continue;
+		    	String id =  node.getURI().toString();
+		    	int level = getAdminLevel(id);
+		    	result.put(node, level);
+		    }
+		} // graph not null
+		return result;
+	}
+	
+	private int getAdminLevel(String uriKey) {
+		int retVal = 0;
+		String test = uriKey;
+		while(test.contains("-")) {
+			retVal ++;
+			int idx1 = test.indexOf("-");
+			String test2 = test.substring(idx1+1, test.length());
+			test = test2;
+		}
+		return retVal;
+	}
+} // LoggerControl
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControlFactory.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControlFactory.java
new file mode 100644
index 0000000..38e940b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerControlFactory.java
@@ -0,0 +1,42 @@
+// LoggerControlFactory.java
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This interface is implemented by factories that create instances of
+ * {@link LoggerControl}.
+ */
+public interface LoggerControlFactory {
+	/**
+	 * New method
+	 * 
+	 * @param parent
+	 * @param dirName
+	 * @param simulation
+	 * @param diseaseModel 
+	 * @return the LoggerControl
+	 */
+	
+	LoggerControl create(final Composite parent, String dirName, ISimulation simulation, IntegrationDecorator diseaseModel);
+
+	
+	/**
+	 * @return TODO JFK
+	 */
+	public String getControlType();
+
+} // LoggerControlFactory
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerViewer.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerViewer.java
new file mode 100644
index 0000000..24669c2
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/LoggerViewer.java
@@ -0,0 +1,1122 @@
+// LoggerViewer.java
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.dialogs.DialogSettings;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.stem.core.common.Identifiable;
+import org.eclipse.stem.core.graph.Graph;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.diseasemodels.Activator;
+import org.eclipse.stem.diseasemodels.standard.AggregatingSIDiseaseModel;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.jobs.simulation.ISimulationManagerListenerSync;
+import org.eclipse.stem.jobs.simulation.Simulation;
+import org.eclipse.stem.jobs.simulation.SimulationManager;
+import org.eclipse.stem.jobs.simulation.SimulationManagerEvent;
+import org.eclipse.stem.ui.views.geographic.map.MapControl;
+import org.eclipse.stem.util.loggers.util.Util;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * This class presents "views" of the running simulations.
+ */
+public class LoggerViewer extends Viewer implements ISelectionChangedListener,
+		ISimulationManagerListenerSync {
+
+	/**
+	 * This is the collection of Identifiables to display (nodes for now)
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s that should be
+	 * displayed.
+	 */
+	//private final Set<Identifiable> identifiablesToDisplay = new LinkedHashSet<Identifiable>();
+    private static final Map<ISimulation,Set<Identifiable>> identifiablesToDisplayMap = new HashMap<ISimulation,Set<Identifiable>>();
+    
+    private static final Collection<ISimulation> simulationsToLog = new ArrayList<ISimulation>();
+    
+    
+	/**
+	 * This is the {@link SimulationManager} that is the input to the viewer. It
+	 * maintains a collection of active
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s in the system.
+	 * This viewer listens to it to discover when new
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s are created and
+	 * old ones disappear.
+	 * 
+	 * @see #simulationsChanged(SimulationManagerEvent)
+	 */
+	SimulationManager simulationManager;
+
+	/**
+	 * The <code>Identifiable</code> that was most recently selected by a user
+	 * clicking on one of the {@link MapControl}s, or <code>null</code> if
+	 * none has been selected.
+	 */
+	private ISelection selection = null;
+
+	/**
+	 * This is the top-level control of the viewer. It contains the
+	 * {@link MapControl}s that display the current state of the
+	 * {@link org.eclipse.stem.jobs.simulation.Simulation}s.
+	 */
+	final Composite composite;
+	
+	/**
+	 * This is a top-level scrolled container for the control of the viewer. It contains the
+	 */
+	ScrolledComposite scrolledComposite;
+	
+	/**
+	 * the outermost container.
+	 */
+	Composite outerComposite;
+	
+	private static final int WIDTH = 400;
+	private static final int HEIGHT_MIN = 250;
+	private static final int BUTTON_HEIGHT = 25;
+	
+	/**
+	 * button to add All locations in a running simulation
+	 */
+	protected Button loggerOnButton = null;
+	/**
+	 * button to remove All locations in a running simulation
+	 */
+	protected Button loggerOffButton = null;
+	
+	protected static Color onColor = null;
+	protected static Color offColor = null;
+	
+	
+	
+	/**
+	 * 
+	 */
+	protected static Label statusLabel = null;
+	
+	/**
+	 * remember the state of the logger
+	 */
+	protected static boolean loggingOn = false;
+	
+	/**
+	 * button text
+	 */
+	protected static final String ON_TEXT = "ON";
+	
+	/**
+	 * button text
+	 */
+	protected static final String OFF_TEXT = "OFF";
+	
+	/**
+	 * status text
+	 */
+	protected static final String MONITOR_ON_TEXT = "MONITOR ON";
+	
+	/**
+	 * status text
+	 */
+	protected static final String MONITOR_OFF_TEXT = "MONITOR OFF";
+
+
+	/**
+	 * the users preferences are stored in DialogSettings
+	 */
+	private DialogSettings masterSettings = null;
+
+	/**
+	 * Set of Preferred Locations to monitor read from the DialogSettings
+	 */
+	private final Set monitorSet = new HashSet();
+
+	/**
+	 * root key element for the DialogSettings xml file
+	 */
+	private static final String ROOT_KEY = "root";
+
+	/**
+	 * Constants for saving ReportViewPreferences
+	 */
+	public static final String REPORTVIEWPREFERENCES_FILENAME = "Preferences.txt";
+	
+	/**
+	 * divides the experiments summary from the specific  modificatoin list in the header
+	 */
+	public static final String MODIFICATIONS_TEXT = "@ ==  Modifications ==";
+
+	/**
+	 * Constants node note found error
+	 */
+	public static final String NODE_NOT_FOUND = "NODENOTFOUND";
+
+	/**
+	 * TODO JFK
+	 */
+	public static final String LOCATION_PREFERENCE_KEY = "location.ids";
+
+	private static final IPath PATH = Activator.getDefault().getStateLocation();
+	
+	/**
+	 * The logger headers
+	 */
+	static Label loggerModeHeader;
+	static Label loggerScenarioHeader;
+	static Label loggerDiseaseHeader;
+	
+	
+
+	/**
+	 * This factory is used to create instances of {@link LoggerControl} in the
+	 * method {@link #populateView()}
+	 */
+	private final LoggerControlFactory lcf;
+
+	/**
+	 * @param parent
+	 *            the SWT parent of the control that makes up the viewer
+	 * @param lcf
+	 *            the factory that creates instance of {@link LoggerControl}
+	 */
+	public LoggerViewer(final Composite parent, final LoggerControlFactory lcf) {
+        
+       
+		outerComposite = new Composite(parent, SWT.BORDER);
+		final FormData outerFormData = new FormData();
+		FormLayout outerLayout = new FormLayout();
+		outerLayout.marginHeight = 5;
+		outerLayout.marginWidth = 5;
+		outerComposite.setLayout(outerLayout);
+		outerComposite.setLayoutData(outerFormData);
+		
+		// top composite holds the buttons
+		//
+		Composite top = addAllActionButtons(outerComposite);	
+		//
+		final FormData topFormData = new FormData();
+		top.setLayoutData(topFormData);
+		top.setSize(SWT.DEFAULT, BUTTON_HEIGHT);
+		topFormData.left   = new FormAttachment(0, 0);
+		topFormData.right  = new FormAttachment(100, 0);
+		//topFormData.top   = new FormAttachment(0, 0);
+		//don't set the bottom - it's fixed
+		
+		// bottom composite holds the scroller
+		Composite bottom = new Composite(outerComposite, SWT.NONE);
+		bottom.setLayout(new FillLayout(SWT.VERTICAL));
+		final FormData bottomFormData = new FormData();
+		bottom.setLayoutData(bottomFormData);
+		bottomFormData.left   = new FormAttachment(0, 0);
+		bottomFormData.right  = new FormAttachment(100, 0);
+		bottomFormData.top   = new FormAttachment(top, 0, SWT.BOTTOM);
+		bottomFormData.bottom  = new FormAttachment(100, 0);
+		
+		Color color = parent.getDisplay().getSystemColor(SWT.COLOR_RED);
+		bottom.setBackground(color);
+		
+	    // scroller
+		scrolledComposite = new ScrolledComposite(bottom, (SWT.BORDER | SWT.H_SCROLL| SWT.V_SCROLL));
+		final FillLayout scrolledLayout = new FillLayout(SWT.VERTICAL);
+		scrolledComposite.setLayout(scrolledLayout);
+		scrolledComposite.setExpandHorizontal(true);
+	
+		scrolledComposite.setExpandVertical(false);
+	
+		scrolledComposite.setMinSize(SWT.DEFAULT,HEIGHT_MIN);
+		scrolledComposite.setSize(SWT.DEFAULT,HEIGHT_MIN);
+		
+		// composite holds all the monitor objects stacked vertically
+		composite = new Composite(scrolledComposite, SWT.NONE);
+		final FillLayout compositeLayout = new FillLayout(SWT.VERTICAL);
+		composite.setLayout(compositeLayout);
+		// add to the scroller
+		scrolledComposite.setContent(composite);
+		
+		// Remember the factory that we'll use to create instances of
+		// LoggerControl
+		this.lcf = lcf;
+		refresh();
+		composite.pack();
+		LogWriter.reset();
+	
+	} // LoggerViewer
+
+	/**
+	 *  add the removeAll and addAll ActionButtons
+	 */
+	private Composite addAllActionButtons(Composite parent) {
+	
+		Composite top = new Composite(parent, SWT.NONE);
+		//FillLayout fillLayout = new FillLayout(SWT.HORIZONTAL);
+		
+		FormLayout topLayout = new FormLayout();
+		//FillLayout topLayout = new FillLayout(SWT.HORIZONTAL);
+		topLayout.marginHeight = 5;
+		topLayout.marginWidth = 5;
+	    top.setLayout(topLayout);
+	    top.setSize(SWT.DEFAULT, BUTTON_HEIGHT);
+	    //Color color = parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);
+	    final Color bgColor = new Color(parent.getDisplay(), new RGB(170, 170, 190));
+		onColor = parent.getDisplay().getSystemColor(SWT.COLOR_GREEN);
+		offColor = parent.getDisplay().getSystemColor(SWT.COLOR_DARK_RED);
+	    top.setBackground(bgColor);
+	    
+	    int buttonWidth = (int)(0.3 * WIDTH);
+	    int titleWidth = (int)(0.4 * WIDTH);
+	    
+	    // TITLE
+	    statusLabel = new Label(top,  SWT.BORDER);//	do a statusLabel
+		statusLabel.setText(MONITOR_OFF_TEXT);
+		statusLabel.setAlignment(SWT.CENTER);
+		statusLabel.setSize(titleWidth,BUTTON_HEIGHT);
+		statusLabel.setText(MONITOR_OFF_TEXT);
+		statusLabel.setBackground(offColor);
+		
+		// BUTTONS
+	    loggerOnButton    = new Button(top, SWT.TOGGLE);
+	    loggerOffButton = new Button(top, SWT.TOGGLE);
+		loggerOnButton.setText(ON_TEXT);
+		loggerOffButton.setText(OFF_TEXT);
+		loggerOnButton.setSize(buttonWidth,BUTTON_HEIGHT);
+		loggerOffButton.setSize(buttonWidth,BUTTON_HEIGHT);
+		// init the toggle position - off at start
+		loggerOnButton.setSelection(false);
+		loggerOffButton.setSelection(true);// off at start
+		///////
+		
+		
+		// remove everything
+		// TODO probably want a dialog to confirm this action...
+		loggerOffButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				disableLogging();
+			}
+		});
+		
+		// add everything
+		// TODO probably want a dialog to confirm this action...
+		loggerOnButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(@SuppressWarnings("unused")
+			final SelectionEvent e) {
+				ISimulation [] simulations = null;
+				List<ISimulation> activesims = simulationManager.getActiveSimulations();
+				if(activesims != null) {
+					simulations = new ISimulation [activesims.size()];
+					for(int i=0;i<activesims.size();++i) simulations[i] = activesims.get(i);
+				}
+				enableLogging(simulations);
+			}
+		});
+		
+		
+		// statusLabel Form
+		final FormData statusLabelFormData = new FormData();
+		statusLabel.setLayoutData(statusLabelFormData);
+		statusLabelFormData.left  = new FormAttachment(0, 0);
+		statusLabelFormData.right = new FormAttachment(40, 0);
+		statusLabelFormData.top   = new FormAttachment(0, 0);
+		statusLabelFormData.bottom   = new FormAttachment(0, 25);
+		top.setLayoutData(statusLabelFormData);
+		
+		// Button Form
+	    final FormData addButtonFormData = new FormData();
+	    addButtonFormData.left  = new FormAttachment(40, 0);
+	    addButtonFormData.right = new FormAttachment(70, 0);
+	    addButtonFormData.top   = new FormAttachment(0, 0);
+	    addButtonFormData.bottom   = new FormAttachment(0, 25);
+	    loggerOnButton.setLayoutData(addButtonFormData);
+	    // Button Form
+		final FormData removeButtonFormData = new FormData();
+	    removeButtonFormData.left = new FormAttachment(70, 0);
+	    removeButtonFormData.right = new FormAttachment(100, 0);
+	    removeButtonFormData.top = new FormAttachment(0, 0);
+	    removeButtonFormData.bottom   = new FormAttachment(0, 25);
+	    loggerOffButton.setLayoutData(removeButtonFormData);
+	    
+	    // HEADER LABELS
+	    
+	    if(loggerModeHeader==null) {
+			loggerModeHeader = new Label(top, SWT.BORDER);
+			//loggerModeHeader.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
+			loggerModeHeader.setText("Mode");
+			loggerModeHeader.setAlignment(SWT.CENTER);
+			
+			loggerScenarioHeader = new Label(top, SWT.BORDER);
+			//loggerScenarioHeader.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
+			loggerScenarioHeader.setText("Scenario");
+			loggerScenarioHeader.setAlignment(SWT.CENTER);
+			
+			loggerDiseaseHeader = new Label(top, SWT.BORDER);
+			//loggerDiseaseHeader.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
+			loggerDiseaseHeader.setText("Disease");
+			loggerDiseaseHeader.setAlignment(SWT.CENTER);
+			
+			// Logger Name Label
+			final FormData loggerModeFormData = new FormData();
+			loggerModeFormData.top = new FormAttachment(0, 30);
+			loggerModeFormData.bottom = new FormAttachment(0, 50);
+			loggerModeFormData.left = new FormAttachment(0, 0);
+			loggerModeFormData.right = new FormAttachment(25, 0);	
+			loggerModeHeader.setLayoutData(loggerModeFormData);
+			
+			final FormData loggerScenarioFormData = new FormData();
+			loggerScenarioFormData.top = new FormAttachment(0, 30);
+			loggerScenarioFormData.bottom = new FormAttachment(0, 50);
+			loggerScenarioFormData.left = new FormAttachment(25, 0);
+			loggerScenarioFormData.right = new FormAttachment(50, 0);	
+			loggerScenarioHeader.setLayoutData(loggerScenarioFormData);
+			
+			final FormData loggerDiseaseFormData = new FormData();
+			loggerDiseaseFormData.top = new FormAttachment(0, 30);
+			loggerDiseaseFormData.bottom = new FormAttachment(0, 50);
+			loggerDiseaseFormData.left = new FormAttachment(50, 0);
+			loggerDiseaseFormData.right = new FormAttachment(90, 0);	
+			loggerDiseaseHeader.setLayoutData(loggerDiseaseFormData);
+		}
+	    
+        
+	    
+		return top;	 
+		
+	} // addAllActionButtons
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getControl()
+	 */
+	@Override
+	public Control getControl() {
+		return composite;
+	} // getControl
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getSelection()
+	 */
+	@Override
+	public ISelection getSelection() {
+		return selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#refresh()
+	 */
+	@Override
+	public void refresh() {
+		
+		if (simulationManager != null) {
+			// Yes	
+			List allSimulations = null;
+			updatePreferenceState(simulationManager.getActiveSimulations());
+			if (simulationManager != null) {
+					allSimulations = simulationManager.getActiveSimulations();
+					addToDisplayedIdentifiableSet(allSimulations);
+			}
+				
+			identifiablesToDisplayMap.clear();
+			addAllIdentifiablesBySimulation(simulationManager.getActiveSimulations());
+		} // if
+			
+	} // refresh
+
+	/**
+	 * Start logging
+	 * 
+	 * @param newSimulations New simulations added by the simulation manager
+	 */
+	public void enableLogging(ISimulation [] newSimulations) {
+		synchronized(this) {		
+			for (int i = 0; i < newSimulations.length; i++) {
+				final ISimulation simulation = newSimulations[i];
+				// Stefan new code:
+				if(!simulationsToLog.contains(simulation)) {
+					simulationsToLog.add(simulation);
+					populateView(newSimulations);
+				}
+			}// for all simulations
+		
+			statusLabel.setText(MONITOR_ON_TEXT);
+			statusLabel.setBackground(onColor);
+			loggingOn = true;
+			// and toggle the buttons
+			loggerOnButton.setSelection(true);
+			loggerOffButton.setSelection(false);
+		}//synchronized() 
+
+	} // enableLogging
+
+	
+	/**
+	 * Stop logging
+	 * 
+	 */
+	public void disableLogging() {
+		simulationsToLog.clear();
+		// remove all controls
+		final Control[] allControls = composite.getChildren();
+		for (final Control element : allControls) {
+			if(element instanceof LoggerControl) {
+				final LoggerControl loggerControl = (LoggerControl) element;
+				loggerControl.remove();
+			} else element.dispose();
+		} // for each LoggerControl
+	
+		statusLabel.setText(MONITOR_OFF_TEXT);
+		statusLabel.setBackground(offColor);
+		loggingOn = false;
+		// and toggle the buttons
+		loggerOnButton.setSelection(false);
+		loggerOffButton.setSelection(true);
+	} // disableLogging
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#getInput()
+	 */
+	@Override
+	public Object getInput() {
+		return simulationManager;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
+	 */
+	@Override
+	public void setInput(final Object input) {
+		final Object oldInput = simulationManager;
+		simulationManager = (SimulationManager) input;
+		inputChanged(input, oldInput);
+	} // setInput
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#inputChanged(java.lang.Object,
+	 *      java.lang.Object)
+	 */
+	@Override
+	protected void inputChanged(final Object input, final Object oldInput) {
+		// Is there already a simulation manager?
+		if (oldInput != null) {
+			// Yes
+			((SimulationManager) oldInput).removeListenerSync(this);
+		} // if
+
+		// Register with the SimulationManager to listen for changes in the set
+		// of active Simulations.
+		// Got input?
+		if (input != null) {
+			// Yes
+			((SimulationManager) input).addSimulationManagerListenerSync(this);
+		} // if
+
+		// Update the viewer with the contents of the new input source
+		refresh();
+	} // inputChanged
+
+	/**
+	 * @see org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers.ISelection,
+	 *      boolean)
+	 */
+	@Override
+	public void setSelection(final ISelection selection,
+			@SuppressWarnings("unused")
+			final boolean reveal) {
+		this.selection = selection;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	 */
+	public void selectionChanged(final SelectionChangedEvent event) {
+
+		// Did the event come from a LoggerControl?
+		if (event.getSelectionProvider() instanceof LoggerControl) {
+			// Yes
+			// Just pass it along
+			selection = event.getSelection();
+			fireSelectionChanged(event);
+		} // if
+	} // selectionChanged
+
+	/**
+	 * @param event 
+	 * @see org.eclipse.stem.jobs.simulation.ISimulationManagerListener#simulationsChanged(SimulationManagerEvent)
+	 */
+	public void simulationsChangedSync(final SimulationManagerEvent event) {
+
+		// Init the preference
+		updatePreferenceState(Arrays.asList(event.getSimulationsAdded()));
+        List<ISimulation> newSimulations = Arrays.asList(event.getSimulationsAdded());
+		
+        addToDisplayedIdentifiableSet(newSimulations);
+
+		removeFromDisplayedSimulationSet(Arrays.asList(event
+				.getSimulationsRemoved()));
+		
+		// logging status
+		if(loggingOn) {
+			// The following will also call populate view.
+			enableLogging(event.getSimulationsAdded());
+		} else {
+			disableLogging();
+		}
+	} // simulationsChanged
+
+	/**
+	 * @param simulations
+	 *            the {@link Simulation}s to add to the set being displayed.
+	 */
+	private void addToDisplayedIdentifiableSet(
+			final List<ISimulation> simulations) {
+		
+		// new simulation
+		LogWriter.reset();
+		// Any simulations to add?
+		if (!simulations.isEmpty()) {
+			
+			for(int i = 0; i < simulations.size(); i ++) {
+				ISimulation sim = simulations.get(i);
+				Set<Identifiable> identifiablesToDisplay = getIdentifiableSet(sim);
+				
+				identifiablesToDisplay.addAll(getIdentifiablesInSimulation(sim));
+				
+				identifiablesToDisplayMap.put(sim,identifiablesToDisplay);
+				
+			}// for all simulations
+			
+			
+			
+		} // if any simulations
+	} // addToDisplayedSimulationSet
+
+	/**
+	 * @param simulations
+	 *            the {@link Simulation}s to remove from the set being
+	 *            displayed.
+	 */
+	private void removeFromDisplayedSimulationSet(
+			final List<ISimulation> simulations) {
+		// Any simulations to remove?
+		if (!simulations.isEmpty()) {
+			
+			for(int i = 0; i < simulations.size(); i ++) {
+				ISimulation sim = simulations.get(i);
+				
+				Set<Identifiable> identifiablesToRemove = getIdentifiableSet(sim);
+				cleanup(identifiablesToRemove,sim);
+				identifiablesToRemove.clear();
+				identifiablesToDisplayMap.remove(sim);
+				
+			}// for all simulations
+			
+		} // if
+	} // removeFromDisplayedSimulationSet
+	
+	
+	
+	
+	/**
+	 * 
+	 * @param simulations
+	 * @return
+	 */
+	Set<Identifiable> getIdentifiablesInSimulation(
+			final ISimulation simulation) {
+		final Set retVal = new LinkedHashSet<ISimulation>();
+
+		/*
+		 * The default monitor locations always contains the works (URIsuffix =
+		 * ZZZ, or MonitorPreferences.DEFAULT_LOCATION_ID However, if a scenario
+		 * contains only one country then the ZZZ nodes does not exist and the
+		 * top level node will be the country code. So here we check that the
+		 * ZZZ node exists. If it does not exist we look for three letter
+		 * country code(s) and add that (those - but there should be only one)
+		 * to the list.
+		 */
+		final Graph graph = simulation.getScenario().getCanonicalGraph();
+		/*
+		 * this code was used to avoid a bug that should now be fixed
+		 * 
+		 * if (graph == null) { System.out.println("graph is null"); // try
+		 * several times for (int ii = 0 ; ii < 50; ii ++) { try {
+		 * Thread.sleep(100); } catch (Exception e) { // nothing } graph =
+		 * simulation.getScenario().getCanonicalGraph(); if (graph != null)
+		 * break; }// for 10 trys } //if graph null
+		 */
+
+		if (graph != null) {
+			// final EMap allNodes = graph.getNodes();
+			// final Set allGraphURIs = allNodes.keySet();
+			// final URI defaultURI = MonitorPreferences.getDefaultURI();
+
+			final Iterator iter = monitorSet.iterator();
+			while ((iter != null) && (iter.hasNext())) {
+				final String key = (String) iter.next();
+				Identifiable node = null;
+				URI locURI = null;
+				try {
+					locURI = URI.createURI(key);
+					node = graph.getNode(locURI);
+					if (node != null) {
+						retVal.add(node);
+					}
+				} catch (final Exception e) {
+					org.eclipse.stem.util.loggers.Activator.logError(
+							"LoggerViewer.getIdentifiablesInSimulation() Error setting Identifiable to "
+									+ key + " ", e);
+				}
+			}// while locations to monitor
+
+		}// graph not null
+
+		return retVal;
+	}// getIdentifiablesInSimulation
+	
+	
+	/**
+	 * cleans up old displays
+	 * 
+	 * @param defunctIdentifiables
+	 */
+	private void cleanup(Set defunctIdentifiables, ISimulation removedSimulation) {
+		if(defunctIdentifiables!=null) {
+			
+			Iterator iter = defunctIdentifiables.iterator();
+			while((iter!=null)&&(iter.hasNext())) {
+				Identifiable ident = (Identifiable)iter.next();
+				if (noOtherSimulationContains(ident,removedSimulation)) monitorSet.remove(ident.getURI().toString());
+			} // while
+					
+				/*final Control[] allControls = composite.getChildren();
+				for (final Control element : allControls) {
+					final LoggerControl loggerControl = (LoggerControl) element;
+					final Identifiable testIdentifiable = loggerControl.getIdentifiable();
+					if ((testIdentifiable==null)||(!defunctIdentifiables.contains(testIdentifiable))) {
+						// dispose if we know it is the removed simulation
+						if(loggerControl.simulation.getSequenceNumber()==removedSimulation.getSequenceNumber()) loggerControl.remove();
+					} // if
+				} // for each LoggerControl
+				*/
+		}// if set not null
+		
+	}// cleanup
+
+	protected void removeIdentifiable(final Identifiable ident) {
+		// Any simulations to remove?
+		if (ident != null) {
+			// Yes
+			Iterator iter = identifiablesToDisplayMap.keySet().iterator();
+			while ((iter != null) && (iter.hasNext())) {
+				ISimulation sim = (ISimulation) iter.next();
+				Set<Identifiable> identifiablesToDisplay = identifiablesToDisplayMap
+						.get(sim);
+				identifiablesToDisplay.remove(ident);
+			}
+			// preference state has changed
+			savePreferenceState();
+		} // if
+	} // removeFromDisplayedSimulationSet
+
+	
+	protected boolean noOtherSimulationContains(final Identifiable ident, final ISimulation removedSim) {
+		// Any simulations to remove?
+		if (ident != null) {
+			// Yes
+			Iterator iter = identifiablesToDisplayMap.keySet().iterator();
+			while ((iter != null) && (iter.hasNext())) {
+				ISimulation sim = (ISimulation) iter.next();
+				if (sim.getSequenceNumber()!= removedSim.getSequenceNumber()) {
+					Set<Identifiable> identifiablesToDisplay = identifiablesToDisplayMap.get(sim);
+				    if (identifiablesToDisplay.contains(ident)) return false;
+				}
+			}
+		} // if
+		return true;
+	} // removeFromDisplayedSimulationSet
+
+	
+	/**
+	 * Create and dispose of MapControls as necessary to display the selected
+	 * Simulations.
+	 */
+	protected void populateView(ISimulation [] newSimulations) {
+
+		try {
+			// problem here when we start up
+			// Are we done?
+			if (composite.isDisposed()) {
+				// Yes
+				return;
+			} // if
+
+			selection = null;
+
+			if ((newSimulations != null) && (newSimulations.length >= 1)) {
+
+				synchronized (this) {
+					for (int i = 0; i < newSimulations.length; i++) {
+						ISimulation sim = newSimulations[i];
+					
+						String scenarioURL = sim.getScenario().getURI().toString();
+						String dirname = Util.getLoggingFolder(scenarioURL);
+							
+						EList<Decorator> decorators = sim.getScenario().getCanonicalGraph().getDecorators();
+						for(Decorator dec:decorators) {
+							if(dec instanceof IntegrationDecorator && !(dec instanceof AggregatingSIDiseaseModel)) {
+								IntegrationDecorator dm = (IntegrationDecorator)dec;
+								//String diseaseName = dm.getDiseaseName();
+								final LoggerControl loggerControl = lcf.create(composite, dirname, sim, dm);
+								loggerControl.addSelectionChangedListener(this);
+								loggerControl.createTopComposite(composite);
+							} // DiseaseModel
+						} // For each decorator
+						
+					} // for all simulations
+
+				}// synchronized(this)
+
+			}// if (simulations.size() >=1)
+
+			composite.layout(true, true);
+			composite.redraw();
+		} catch (Exception e) {
+			Activator.logError("Exception in PopulateView() ", e);
+		}
+	} // populateView
+
+	/**
+	 * Adds all identifiable to the map by the simulation they are in
+	 * @param simulations
+	 * 
+	 */
+	private void addAllIdentifiablesBySimulation(final List<ISimulation> simulationList) {
+		
+		for (int i = 0; i < simulationList.size(); i++) {
+			final ISimulation simulation = simulationList.get(i);
+			
+			Set<Identifiable> identifiablesToDisplaySet =getIdentifiableSet(simulation);
+
+			/*
+			 * The default monitor locations always contains the works
+			 * (URIsuffix = ZZZ, or MonitorPreferences.DEFAULT_LOCATION_ID
+			 * However, if a scenario contains only one country then the ZZZ
+			 * nodes does not exist and the top level node will be the country
+			 * code. So here we check that the ZZZ node exists. If it does not
+			 * exist we look for three letter country code(s) and add that
+			 * (those - but there should be only one) to the list.
+			 */
+			final Graph graph = simulation.getScenario().getCanonicalGraph();
+			/*
+			 * this code was used to avoid a bug that should now be fixed
+			 * 
+			 * if (graph == null) { System.out.println("graph is null"); // try
+			 * several times for (int ii = 0 ; ii < 50; ii ++) { try {
+			 * Thread.sleep(100); } catch (Exception e) { // nothing } graph =
+			 * simulation.getScenario().getCanonicalGraph(); if (graph != null)
+			 * break; }// for 10 trys } //if graph null
+			 */
+
+			if (graph != null) {
+			//	final EMap allNodes = graph.getNodes();
+			//	final Set allGraphURIs = allNodes.keySet();
+			//	final URI defaultURI = MonitorPreferences.getDefaultURI();
+				
+
+				final Iterator iter = monitorSet.iterator();
+				while ((iter != null) && (iter.hasNext())) {
+					final String key = (String) iter.next();
+					Identifiable node = null;
+					URI locURI = null;
+					try {
+						locURI = URI.createURI(key);
+						node = graph.getNode(locURI);
+						if (node != null) {
+							identifiablesToDisplaySet.add(node);
+						}
+					} catch (final Exception e) {
+						org.eclipse.stem.util.loggers.Activator.logError(
+								"LoggerViewer.getIdentifiablesInSimulation() Error setting Identifiable to "
+										+ key + " ", e);
+					}
+				}// while locations to monitor
+
+			}// graph not null
+
+		} // for all simulations
+
+	}
+	
+	/**
+	 * Find out which simulation is running this node
+	 * TODO Check this. This may not be unique - we may be running the 
+	 * same scenario twice!!
+	 * @param simulations
+	 * @return
+	 */
+	protected String getScenarioName(Identifiable ident) {
+		String retVal = "NODE_NOT_FOUND";
+		List<ISimulation> simulationList = simulationManager.getActiveSimulations();
+		for (int i = 0; i < simulationList.size(); i++) {
+			final ISimulation simulation = simulationList.get(i);
+			
+			final Graph graph = simulation.getScenario().getCanonicalGraph();
+			
+			if (graph != null) {
+				// is this node in this simulation?
+				final Identifiable node = graph.getNode(ident.getURI());
+				if (node != null) {
+				    // graph contains node
+					return simulation.getScenario().toString();
+				}// node exists
+			}// graph not null
+		} // for all simulations
+		return retVal;
+	}
+
+	/**
+	 * @param simulation
+	 * @return
+	 */
+	/*private boolean isDisplayed(final Identifiable identifiable,
+			ISimulation simulation) {
+		boolean retValue = false;
+		final Control[] allControls = composite.getChildren();
+		for (final Control element : allControls) {
+			final LoggerControl loggerControl = (LoggerControl) element;
+
+			if (loggerControl.simulation.getSequenceNumber() == simulation
+					.getSequenceNumber()) {
+
+				final Identifiable testIdentifiable = loggerControl.getIdentifiable();
+				if (testIdentifiable != null&&testIdentifiable.equals(identifiable)) {
+					retValue = true;
+					break;
+				} // if
+
+			} // if control for same simulation
+
+		} // for each LoggerControl
+		return retValue;
+	} // isDisplayed
+*/
+	/**
+	 * save the state of preferred locations to monitor
+	 */
+	private void savePreferenceState() {
+
+		// we need to write preferences by active simulation
+		List allSimulations = null;
+		final Set<String> nodesInSimulation = new HashSet<String>();
+		if (simulationManager != null) {
+			allSimulations = simulationManager.getActiveSimulations();
+		}
+		if ((allSimulations != null) && (allSimulations.size() >= 1)) {
+			for (int i = 0; i < allSimulations.size(); i++) {
+				nodesInSimulation.clear();
+				final ISimulation sim = (ISimulation) allSimulations.get(i);
+				final String scenarioName = sim.getScenario().getURI()
+						.toString();
+
+				// recreate the subsection for this scenario using the locations
+				// now being monitored
+				final IDialogSettings section = new DialogSettings(scenarioName);
+
+				final Graph graph = sim.getScenario().getCanonicalGraph();
+				Set<Identifiable> identifiablesToDisplay = getIdentifiableSet(sim);
+				final Iterator iter = identifiablesToDisplay.iterator();
+				while ((iter != null) && (iter.hasNext())) {
+					final Identifiable ident = (Identifiable) iter.next();
+					if (ident != null) {
+						// is this node in this simulation?
+						final Identifiable node = graph.getNode(ident.getURI());
+						if (node != null) {
+							final String id = ident.getURI().toString();
+							if (id != null) {
+								nodesInSimulation.add(id);
+							}
+						} // if node in simulation
+					}
+
+				}// all currently displayed nodes
+
+				final String[] newPrefs = new String[nodesInSimulation.size()];
+				final Iterator iter2 = nodesInSimulation.iterator();
+				int icount = 0;
+				while ((iter2 != null) && (iter2.hasNext())) {
+					newPrefs[icount] = (String) iter2.next();
+					icount++;
+				}
+
+				section.put(LOCATION_PREFERENCE_KEY, newPrefs);
+				if (masterSettings==null) masterSettings = new DialogSettings(ROOT_KEY);
+				masterSettings.addSection(section);
+				try {
+					masterSettings.save(getPrefFileName());
+				} catch (final IOException ioe) {
+					org.eclipse.stem.util.loggers.Activator
+							.logError("exception writing file ["
+									+ ioe.getMessage() + "]", ioe);
+				}
+
+			} // for all simulations
+		}// if not null
+
+	}// savePreferenceState
+	
+	/**
+	 * returns the Set<Identifiable> in the identifiablesToDisplayMap
+	 * creates it if it does not exist.
+	 * @param simulation
+	 * @return
+	 */
+	Set<Identifiable> getIdentifiableSet(ISimulation simulation) {
+		if(!identifiablesToDisplayMap.containsKey(simulation)) {
+			Set<Identifiable> identifiablesToDisplaySet = new LinkedHashSet<Identifiable>();
+			identifiablesToDisplayMap.put(simulation,identifiablesToDisplaySet);
+		}
+		return identifiablesToDisplayMap.get(simulation);
+	}
+	
+	/**
+	 * Removes whitespace, ',', '.', etc.
+	 * @param s
+	 * @return a filtered string
+	 */
+	public static String nameFilter (String s) {
+		String s1 = s.trim();
+		s1 = s1.replace('"',' ');
+		s1 = s1.replaceAll(" ","");
+		s1 = s1.replace(',','_');
+		s1 = s1.replace('.','_');
+		return s1;
+	}
+
+	/**
+	 * This method uses Dialog settings to load and update 
+	 * the monitorSet which contains (filters) the valid list 
+	 * of preferred Identifiables to display from the 
+	 * the state of the previously saved preference state.
+	 * for simulations that are running
+	 * 
+	 * @param runningSimulations
+	 */
+	private void updatePreferenceState(List runningSimulations) {
+
+		// what type of viewer? TimeSeries, PhaseSpace etc
+		if (masterSettings==null) readMasterSettingsFromFile();
+		
+		
+		
+		if ((runningSimulations != null) && (runningSimulations.size() >= 1)) {
+			for (int i = 0; i < runningSimulations.size(); i++) {
+				final ISimulation sim = (ISimulation) runningSimulations.get(i);
+				final String scenarioName = sim.getScenario().getURI()
+						.toString();
+
+				
+				IDialogSettings section = masterSettings
+						.getSection(scenarioName);
+				if (section == null) {
+					section = new DialogSettings(scenarioName);
+					masterSettings.addSection(section);
+				}
+				// now add the preferences to the monitorSet
+				final String[] allIDs = section
+						.getArray(LOCATION_PREFERENCE_KEY);
+				if (allIDs != null) {
+					for (final String element : allIDs) {
+						monitorSet.add(element);
+					}// for allIDs
+
+				}// if not null
+
+			}// for all simulations
+		}// if active simulations
+
+	}// updatePreferenceState
+	
+	/**
+	 * get the DialogSettings from the file
+	 */
+	public void readMasterSettingsFromFile() {
+		masterSettings = new DialogSettings(ROOT_KEY);
+
+	    String filename = getPrefFileName();
+		final File f = new File(filename);
+		if (f.exists()) {
+			try {
+				masterSettings.load(filename);
+			} catch (final IOException ioe) {
+				org.eclipse.stem.util.loggers.Activator.logError(
+						"exception loading file [" + ioe.getMessage()
+								+ "]", ioe);
+			}
+		} else {
+			// else create it
+			try {
+				masterSettings.save(filename);
+			} catch (final IOException ioe) {
+				org.eclipse.stem.util.loggers.Activator.logError(
+						"exception creating file [" + ioe.getMessage()
+								+ "]", ioe);
+			}
+		} // elseif f !exists
+	}// read master setttings
+	
+	/** 
+	 * gets the preferences file name
+	 * @return file name containing the users preferences
+	 */
+	public String getPrefFileName() {
+		final String controlCategory = lcf.getControlType();
+		// Get the right preference file
+		String filename = PATH.append(controlCategory + "_" + REPORTVIEWPREFERENCES_FILENAME).toOSString();
+		return filename;
+	}
+
+
+
+} // LoggerViewer
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/Messages.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/Messages.java
new file mode 100644
index 0000000..0126c98
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/Messages.java
@@ -0,0 +1,42 @@
+// Messages.java
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * This class represents
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.util.loggers.views.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing
+	}
+
+	/**
+	 * @param key
+	 * @return the string matching the key
+	 */
+	public static String getString(final String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (final MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+} // Messages
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/NewCSVLogWriter.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/NewCSVLogWriter.java
new file mode 100644
index 0000000..7cd1f77
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/NewCSVLogWriter.java
@@ -0,0 +1,651 @@
+// CSVLogWriter
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2007,2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.ui.provider.PropertySource;
+import org.eclipse.stem.adapters.time.TimeProvider;
+import org.eclipse.stem.core.common.CommonPackage;
+import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.IntegrationLabel;
+import org.eclipse.stem.core.graph.IntegrationLabelValue;
+import org.eclipse.stem.core.graph.Node;
+import org.eclipse.stem.core.graph.NodeLabel;
+import org.eclipse.stem.core.model.Decorator;
+import org.eclipse.stem.core.model.IntegrationDecorator;
+import org.eclipse.stem.core.model.STEMTime;
+import org.eclipse.stem.definitions.adapters.relativevalue.RelativeValueProviderAdapter;
+import org.eclipse.stem.diseasemodels.standard.DiseaseModel;
+import org.eclipse.stem.diseasemodels.standard.provider.StandardItemProviderAdapterFactory;
+import org.eclipse.stem.jobs.simulation.ISimulation;
+import org.eclipse.stem.populationmodels.standard.PopulationModel;
+import org.eclipse.stem.util.loggers.Activator;
+import org.eclipse.stem.util.loggers.preferences.PreferenceConstants;
+
+/**
+ * A log writer writing CSV files containing data for a single state of the simulation.
+ * Columns contain location IDs as well as simulation time and iteration id.
+ */
+
+public class NewCSVLogWriter extends LogWriter {
+	
+	private static final String DEFAULT_ID = "data";
+
+	private static final String CSV_EXT = ".csv";
+	
+	private String directoryName;
+
+	//private final static String DUBLIN_CORE_CLASS = "DublinCore";
+	
+	private static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE d MMM yy", Locale.getDefault());
+	
+	/**
+	 * CSV Header Label for time column
+	 */
+	public static final String TIME_LABEL = "time";
+
+	/**
+	 * CSV Header Label for iteration column
+	 */
+	public static final String ITERATION_LABEL = "iteration";
+
+	/**
+	 * Name of all run parameter files (one per scenario folder)
+	 */
+	public static final String RUN_PARAMETER_FILE_NAME = "runparameters.csv";
+
+	private final int FLUSH_EACH_ITERATION = 50; // How often do we flush the files?
+
+	private int icount = 0;
+
+	private static StandardItemProviderAdapterFactory itemProviderFactory;
+	
+	private static org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory populationModelItemProviderFactory;
+	
+	/**
+	 * FileWriters are stored here, organized by state (e.g. S, E, I, R) and geographic level
+	 */
+	
+	private final Map<StateLevelMap, FileWriter> fileWriters;
+	
+	private boolean logIntegers;
+	
+	/**
+	 * 
+	 * @param dirName
+	 * @param simulation
+	 * @param dm
+	 */
+	public NewCSVLogWriter(final String dirName, final ISimulation simulation, IntegrationDecorator dm) {
+		logIntegers = Activator.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.LOG_INTEGER_PREFERENCE);
+		
+		needsHeader = true;
+		done = false;
+		icount = 0;
+		//final String currentDate = getDateTimeNumeric();
+		String uniqueID = DEFAULT_ID;
+		if (simulation != null) {
+			uniqueID = simulation.getUniqueIDString();
+			while(uniqueID==null) {
+				uniqueID = simulation.getUniqueIDString();
+			}
+		}
+		// Ugh
+		String diseaseName = null;
+		if(dm instanceof DiseaseModel)
+			diseaseName = ((DiseaseModel)dm).getDiseaseName();
+		else if (dm instanceof PopulationModel)
+			diseaseName = ((PopulationModel)dm).getName();
+		try {
+			this.directoryName = dirName + sep+uniqueID + sep + diseaseName.trim() + sep;
+		} catch(Exception e) {
+			Activator.logError("Failed ot create directory for CSV Logger", e);
+		}
+		
+		// remove illegal strings
+		directoryName= directoryName.replaceAll("\"", "");
+			
+		final File dir = new File(this.directoryName);
+
+		if ((!dir.exists()) || (!dir.isDirectory())) {
+			// create it.
+			boolean success = dir.mkdirs();
+			if (!success) {
+				Activator.logError(
+						"Failed to Create Driectory" + directoryName,
+						new IOException("Failed to Create Driectory"
+								+ directoryName));
+			}
+			
+		}
+		logRunParameters(dm);
+		fileWriters = new HashMap<StateLevelMap, FileWriter>();
+	} // CSVLogWriter
+
+
+	/**
+	 * Must implement this method to log data in run thread
+	 * 
+	 * @param rvp
+	 * 
+	 */
+	@Override
+	public void logHeader(final RelativeValueProviderAdapter rvp) {
+		/*
+		 * TODO do we need a header?
+		 */
+	}// log header
+
+	/**
+	 * logHeader New method
+	 * 
+	 * @param sim Simulation to log
+	 * @param dm Disease Model
+	 * @param nodeLevels Level information for each node in the simulation
+	 * @param timeProvider Time provider
+	 */
+	
+	@Override
+	public void logHeader(ISimulation sim, IntegrationDecorator dm, Map<Node, Integer>nodeLevels, TimeProvider timeProvider) {	
+		
+		
+		int headerItemCount = 0;
+		
+		String dirs = this.directoryName;
+		File dir = new File(dirs);
+		if(!dir.exists()) {
+			boolean success = dir.mkdirs();
+			if(!success) {
+				Activator.logError(
+						"Failed to Create Driectory" + directoryName,
+						new IOException("Failed to Create Driectory"
+								+ directoryName));
+			}
+		}
+		// Find min/max level
+		int minLevel = Integer.MAX_VALUE;
+		int maxLevel = -1;
+		for(int level:nodeLevels.values()) {
+			if(level < minLevel)minLevel = level;
+			if(level > maxLevel)maxLevel = level;
+		}
+		try {
+			
+			// Get the first node in the canonical graph and look at the labels.
+			// We will generate one log file for each label
+			// Find the first node that has some labels and use those as representative labels
+			// for every node
+			
+			EList<NodeLabel> labels = null;
+			IntegrationLabel label = null;
+			Iterator<DynamicLabel> it = ((Decorator)dm).getLabelsToUpdate().iterator();
+			while(it.hasNext()) {
+				DynamicLabel l = it.next();
+				if(l instanceof IntegrationLabel) {
+					label = (IntegrationLabel)l;
+					break;
+				}
+
+			}
+			if(label == null) {
+				// We couldn't find any labels. PANIC!
+				Activator.logError("Cannot log, no label found for decorator!", new Exception());
+				return;
+			}
+			IItemPropertySource propertySource = null;
+			if(dm instanceof DiseaseModel) {
+				StandardItemProviderAdapterFactory itemProviderFactory = getItemProviderFactory();
+				IntegrationLabelValue dmlv = (IntegrationLabelValue)label.getCurrentValue();
+				propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(dmlv, IItemPropertySource.class);
+			} else if (dm instanceof PopulationModel) {
+				org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory itemProviderFactory = getPopulationModelItemProviderFactory();
+				IntegrationLabelValue dmlv = (IntegrationLabelValue)label.getCurrentValue();
+				propertySource = (IItemPropertySource) itemProviderFactory
+				.adapt(dmlv, IItemPropertySource.class);
+			}
+			if(propertySource == null) 
+				Activator.logError("Cannot find property source for logger", null);
+			final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(null);
+				
+			for(IItemPropertyDescriptor property:properties) {	
+				for(int level = minLevel;level <=maxLevel;++level) {
+					StateLevelMap slm = new StateLevelMap(property.getDisplayName(property), level);
+					String file = dirs+sep+property.getDisplayName(property)+"_"+level+CSV_EXT;
+					FileWriter fw = new FileWriter(file);
+					fileWriters.put(slm, fw);
+					Iterator<Node> nodeIterator = this.getNodeIterator(level, nodeLevels);
+					// Iterate over nodes for a given resolution
+					fw.write(ITERATION_LABEL);
+					fw.write(",");
+					fw.write(TIME_LABEL);
+					fw.write(",");
+					
+					int nodeCount = 0;
+					
+					while(nodeIterator.hasNext()) {
+						Node node = nodeIterator.next();
+						String id = this.filterLocationId(node.getURI().toString());
+						fw.write(id);
+						headerItemCount++;
+						nodeCount++;
+						if(nodeIterator.hasNext()) fw.write(",");
+					}
+
+					fw.write("\n");
+				}
+			}
+					
+			needsHeader = false;
+		} catch(IOException ioe) {
+			Activator.logError("Error writing log header ", ioe);
+		}
+
+	}
+	
+	/**
+	 * Creates a log file for run parameters. Only one of these is created per
+	 * diseaseFolder
+	 * 
+	 * @param dm Disease Model
+	 */
+	
+	public void logRunParameters(IntegrationDecorator dm) {
+		if (dm == null) { // check
+			return;
+		}
+		
+		try {
+			final FileWriter fwp = new FileWriter(directoryName
+					+ RUN_PARAMETER_FILE_NAME);
+
+			
+			final ComposedAdapterFactory itemProviderFactory = new ComposedAdapterFactory(
+					ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+			final IItemPropertySource propertySource = (IItemPropertySource) itemProviderFactory
+					.adapt(dm, IItemPropertySource.class);
+			
+			final List<IItemPropertyDescriptor> properties = propertySource
+				.getPropertyDescriptors(dm);
+		
+			StringBuilder header = new StringBuilder();
+			StringBuilder values = new StringBuilder();
+			
+			for (int i=0;i<properties.size();++i) {
+				IItemPropertyDescriptor descriptor = properties.get(i);
+				final EStructuralFeature feature = (EStructuralFeature) descriptor
+						.getFeature(null);
+				
+				EClass containingClass = feature.getEContainingClass();
+				if(containingClass.equals(CommonPackage.eINSTANCE.getDublinCore())) continue;
+				
+				Object value = ((EObject)dm).eGet(feature);
+				header.append(feature.getName());
+				header.append(",");
+				value = value.toString().replace(',', ' ');
+				value = value.toString().replace('\n', ' ');
+				values.append(value.toString().replace(',', ' '));
+				values.append(",");
+			}
+			header.setLength(header.length()-1); // drop last ,
+			values.setLength(values.length()-1); // drop last ,
+			fwp.write(header.toString());
+			fwp.write("\n");
+			fwp.write(values.toString());
+			fwp.flush();
+			fwp.close();
+		} catch (final IOException e) {
+			// debugging for now
+			Activator.logError("Error creating file writer for RUNPARAMETER ", e );
+
+		}
+		 
+	}// logRunParameters
+
+	/**
+	 * Must implement this method to log data in run thread
+	 * Need to implement TimeProviderAdapterFactory.INSTANCE.adapt().....only Graph will work right now....later in CORE
+	 * @param rvp
+	 * @param timeProvider
+	 */
+	@Override
+	public void logData(final RelativeValueProviderAdapter rvp, final TimeProvider timeProvider) {
+		// Not used
+	}// log data
+
+	/**
+	 * Log data from from a simulation after cycle
+	 * 
+	 * @param sim Simulation
+	 * @param dm DiseaseModel
+	 * @param nodeLevels Node levels
+	 * @param timeProvider
+	 * @param beforeStart
+	 */
+
+	@SuppressWarnings("boxing")
+	@Override
+	public void logData(ISimulation sim, IntegrationDecorator dm, Map<Node, Integer>nodeLevels, TimeProvider timeProvider, boolean beforeStart) {
+		
+		
+		int dataColumnCount = 0;
+		
+		
+		int totalLabels = 0;
+		int labelsWritten = 0;
+		
+		int totalPropertyCount = 0;
+		int skipCount = 0;
+		// Increment iteration count
+		this.icount++;
+
+		try {
+			// Iterate over the map resolutions
+			Iterator<Integer> resolution_it = this.getResolutionIterator(nodeLevels);
+			while(resolution_it.hasNext()) {
+				int resolution = resolution_it.next();
+
+				Iterator<Node> nodeIterator = this.getNodeIterator(resolution, nodeLevels);
+				boolean firstNode = true;
+				// Iterate over nodes for a given resolution
+				
+				int nodeCount = 0;
+				
+				while(nodeIterator.hasNext()) {
+					Node n = nodeIterator.next();
+					
+					nodeCount++;
+					
+					EList<NodeLabel> labels = n.getLabels();
+					for(int i=0;i<labels.size();++i) {
+						NodeLabel label = labels.get(i);
+						
+						totalLabels++;
+						
+						if(!(label instanceof IntegrationLabel)) {
+							continue;
+						}
+						
+						labelsWritten++;
+						
+						IItemPropertySource propertySource = null;
+						IntegrationLabelValue dmlv = null;
+						
+						if(dm instanceof DiseaseModel) {
+							StandardItemProviderAdapterFactory itemProviderFactory = getItemProviderFactory();
+							IntegrationLabel dmLabel = (IntegrationLabel)label;
+							// The current value
+							dmlv = (IntegrationLabelValue)dmLabel.getCurrentValue();
+							propertySource = (IItemPropertySource) itemProviderFactory
+							.adapt(dmlv, PropertySource.class);
+						} else if (dm instanceof PopulationModel) {
+							org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory itemProviderFactory = getPopulationModelItemProviderFactory();
+							dmlv = (IntegrationLabelValue)label.getCurrentValue();
+							propertySource = (IItemPropertySource) itemProviderFactory
+							.adapt(dmlv, IItemPropertySource.class);
+						}
+						if(propertySource == null) {
+							skipCount++;
+							continue;
+						}
+						final List<IItemPropertyDescriptor> properties = propertySource
+							.getPropertyDescriptors(null);
+						
+						//final RelativeValueProviderAdapter rvp = (RelativeValueProviderAdapter) RelativeValueProviderAdapterFactory.INSTANCE
+						//	.adapt(label, RelativeValueProvider.class);
+						//if(rvp == null) continue;
+						
+						
+						totalPropertyCount += properties.size();
+						
+						StringBuilder sb = new StringBuilder();
+						for(IItemPropertyDescriptor itemDescriptor:properties) {
+								sb.setLength(0);
+								StateLevelMap slm = new StateLevelMap(itemDescriptor.getDisplayName(itemDescriptor), resolution);
+								FileWriter fw = fileWriters.get(slm);
+								if(fw == null) {
+									Activator.logError("Error, no file writer found for "+slm, null);
+									continue;
+								}
+								// Before writing the values for the first location,
+								// add iteration, time columns
+									
+								if(firstNode) {
+									sb.append(this.icount);
+									sb.append(",");
+									STEMTime time = timeProvider.getTime();
+									if(time == null) {
+										time = sim.getScenario().getSequencer().getStartTime();
+									}
+									if(!beforeStart)
+										// Add increment
+										time = time.addIncrement(sim.getScenario().getSequencer().getTimeDelta());
+									
+									String timeString;
+									timeString = dateFormat.format(time.getTime());
+									
+									sb.append(timeString);
+									sb.append(",");
+								}
+									
+								EStructuralFeature feature = (EStructuralFeature) itemDescriptor
+									.getFeature(null);
+								
+								double value = ((Double) ((EObject)dmlv).eGet(feature))
+									.doubleValue();
+								
+								// Write relative value for the property
+								// ItemPropertyDescriptor property = (ItemPropertyDescriptor)itemDescriptor;
+								// double value = rvp.getRelativeValue(property)*rvp.getDenominator(); // log absolute value, not relative
+								if(logIntegers)
+									sb.append((int)value);
+								else sb.append(value);
+								
+								dataColumnCount++;
+								
+								if(nodeIterator.hasNext()) sb.append(",");
+								else sb.append("\n"); // new line
+								fw.write(sb.toString());
+							} // For each property in label
+						} // For each node label							
+					firstNode = false;
+					} // For each node
+
+				
+				} //  For each node resolution
+			needsHeader = false;
+		} catch(IOException ioe) {
+			Activator.logError("Error writing log header ", ioe);
+		}
+
+		if(icount % FLUSH_EACH_ITERATION == 0) this.flushLoggerData();
+		
+		
+		
+	}
+	
+	/*
+	 * private Graph getGraph(final Node node) { return (Graph)
+	 * node.eContainer().eContainer(); } // getGraph
+	 */
+
+	/**
+	 * Flush and Close the file
+	 */
+	@Override
+	public void flushLoggerData() {
+		Collection<FileWriter> writers = fileWriters.values();
+		for(FileWriter writer:writers) {
+			try {
+				writer.flush();
+			} catch(IOException ioe) {
+				Activator.logError("Cannot flush log file", ioe);
+			}
+		}
+		
+	} // flush All Data
+	
+	/**
+	 * Flush and Close the file
+	 */
+	@Override
+	public void closeLoggerData() {
+		Collection<FileWriter> writers = fileWriters.values();
+		for(FileWriter writer:writers) {
+			try {
+				writer.close();
+			} catch(IOException ioe) {
+				Activator.logError("Cannot close log file", ioe);
+			}
+		}
+	} // closeLoggerData
+
+	@SuppressWarnings("boxing")
+	private Iterator<Integer> getResolutionIterator(Map<Node, Integer>nodeLevels) {
+		ArrayList<Integer> list = new ArrayList();
+		Collection<Integer>vals = nodeLevels.values();
+		for(int level:vals) {
+			if(!list.contains(level)) list.add(level);
+		}
+		return list.iterator();
+	}
+	
+	// Return all nodes at the same level
+	// Sort by the name alphabetically for convenience
+	
+	@SuppressWarnings("boxing")
+	private Iterator<Node> getNodeIterator(int level, Map<Node, Integer>nodeLevels) {
+		ArrayList<Node> list = new ArrayList();
+		Set<Node>ns = nodeLevels.keySet();
+		for(Node n:ns) {
+			if(nodeLevels.get(n) == level) {
+				
+				boolean write = false;
+				for (NodeLabel s:n.getLabels()) {
+					if(s instanceof IntegrationLabel) {
+						
+						write = true;
+						break;
+					}
+				}
+				if (!write) {
+					continue;
+				}
+				
+				list.add(n);
+			}
+		}
+		Collections.sort(list, new Comparator<Node>() {
+
+			public int compare(Node n1, Node n2) {
+				String s1 = n1.getURI().toString();
+				String s2 = n2.getURI().toString();
+				return s1.compareTo(s2);
+			}
+			
+		});
+		return list.iterator();
+	}
+	
+	/**
+	 * filters the location id prefix from the beginning of
+	 *  a nodes ID for generation of a file name
+	 * @param unfiltered
+	 * @return the filtered file name using location id.
+	 */
+	private String filterLocationId(String unfiltered) {
+		int last = unfiltered.indexOf(LOCATIONID_PREFIX);
+		if (last >=0) {
+			last += LOCATIONID_PREFIX.length();
+			return unfiltered.substring(last, unfiltered.length());
+		} 
+		return unfiltered;
+	}
+	
+	/**
+	 * Used as key in map with FileWriters. FileWriters are key'd by
+	 * the label (i.e. disease state) and by 
+	 */
+	private class StateLevelMap {
+		private final String state;
+		private final int level;
+		
+		public StateLevelMap(String state, int level) {
+			this.state = state;
+			this.level = level;
+		}
+		
+		public int getLevel() {return this.level;}
+		public String getState() {return this.state;}
+		
+		@Override
+		public int hashCode() {
+			return state.hashCode() + level; // ugh
+		}
+		
+		@Override
+		public boolean equals(Object o) {
+			if(!(o instanceof StateLevelMap)) return false;
+			StateLevelMap slm = (StateLevelMap)o;
+			return (slm.getState().equals(this.state) && slm.getLevel() == level);
+		}
+		
+		@Override
+		public String toString() {
+			return this.state+"_"+this.level;
+		}
+	}
+
+	/**
+	 * @return the instance of the Standard Item Provider factory.
+	 */
+	private static StandardItemProviderAdapterFactory getItemProviderFactory() {
+		if (itemProviderFactory == null) {
+			itemProviderFactory = new StandardItemProviderAdapterFactory();
+		}
+		return itemProviderFactory;
+	} // getItemProviderFactory
+	
+	/**
+	 * @return the instance of the Standard Item Provider factory.
+	 */
+	private static org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory getPopulationModelItemProviderFactory() {
+		if (populationModelItemProviderFactory == null) {
+			populationModelItemProviderFactory = new org.eclipse.stem.populationmodels.standard.provider.StandardItemProviderAdapterFactory();
+		}
+		return populationModelItemProviderFactory;
+	} // getItemProviderFactory
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/ReportsContextMenuAction.java b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/ReportsContextMenuAction.java
new file mode 100644
index 0000000..1f5a82b
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/ReportsContextMenuAction.java
@@ -0,0 +1,64 @@
+// ReportsContextMenuAction 
+package org.eclipse.stem.util.loggers.views;
+
+/*******************************************************************************
+ * Copyright (c) 2006, 2007, 2008 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import org.eclipse.stem.ui.views.geographic.map.SelectedReportsManager;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * The class is a delegation for the popup menu of the
+ * <code>GeographicRenderer</code>. The purpose of this class is to handle
+ * the activity in the reports context menu and keep the current state of all
+ * enabled/disabled reports from that menu. The report's <code>ViewPart</code>
+ * object will use this class for checking whether to generate a report or not.
+ */
+public class ReportsContextMenuAction 
+	implements IViewActionDelegate {
+	
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(org.eclipse.jface.action.IAction action) {
+		String reportId = action.getId();
+		
+		if (SelectedReportsManager.getInstance().isReportEnabled(reportId)) { // The report was previously enabled so disable it
+			SelectedReportsManager.getInstance().disableReportForIdentifiable(reportId);
+			action.setChecked(false);
+		}
+		else
+		{
+			SelectedReportsManager.getInstance().enableReportForIdentifiable(reportId);
+			action.setChecked(true);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(@SuppressWarnings("unused")
+	org.eclipse.jface.action.IAction action,
+			@SuppressWarnings("unused")
+			org.eclipse.jface.viewers.ISelection selection) {
+		// Do Nothing
+	}
+
+	/**
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(@SuppressWarnings("unused")
+	IViewPart arg0) {
+		// Do Nothing
+	}
+}
diff --git a/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/messages.properties b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/messages.properties
new file mode 100644
index 0000000..70f2dc4
--- /dev/null
+++ b/org.eclipse.stem.util.loggers/src/org/eclipse/stem/util/loggers/views/messages.properties
@@ -0,0 +1,16 @@
+# messages.properties
+#
+# /*******************************************************************************
+# * Copyright (c) 2007, 2008 IBM Corporation 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:
+# *     IBM Corporation - initial API and implementation
+# *******************************************************************************/
+
+# Comma separated variable
+CSC.title=CSV
+
diff --git a/org.eclipse.stem.utility/.classpath b/org.eclipse.stem.utility/.classpath
new file mode 100644
index 0000000..fb50116
--- /dev/null
+++ b/org.eclipse.stem.utility/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.stem.utility/.project b/org.eclipse.stem.utility/.project
new file mode 100644
index 0000000..d2d13ac
--- /dev/null
+++ b/org.eclipse.stem.utility/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.stem.utility</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.stem.utility/.settings/org.eclipse.core.resources.prefs b/org.eclipse.stem.utility/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..106cb2b
--- /dev/null
+++ b/org.eclipse.stem.utility/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Jan 16 09:50:23 PST 2007
+eclipse.preferences.version=1
+encoding//src/org/eclipse/stem/utility/generators/messages.properties=8859_1
diff --git a/org.eclipse.stem.utility/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.stem.utility/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5799a47
--- /dev/null
+++ b/org.eclipse.stem.utility/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,77 @@
+#Tue Sep 01 16:59:09 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=warning
+org.eclipse.jdt.core.builder.invalidClasspath=abort
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
+org.eclipse.jdt.core.compiler.doc.comment.support=disabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.stem.utility/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.stem.utility/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a1c0a8b
--- /dev/null
+++ b/org.eclipse.stem.utility/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Tue Jan 16 09:26:30 PST 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/>
diff --git a/org.eclipse.stem.utility/configuration/Admin1LexSorter.config b/org.eclipse.stem.utility/configuration/Admin1LexSorter.config
new file mode 100644
index 0000000..8ebfdfc
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/Admin1LexSorter.config
@@ -0,0 +1,29 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR ADMIN 1 LEXICOGRAPHIC SORTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\country_names.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\country_names.txt
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.utility\parameters\)
+PROPERTIES_OUTPUT = C:\stemII\org.eclipse.stem.utility\parameters\sort\
+#
+# ********** END OF CONFIGURATION FILE FOR ADMIN 1 LEXICOGRAPHIC SORTER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/Admin2LexSorter.config b/org.eclipse.stem.utility/configuration/Admin2LexSorter.config
new file mode 100644
index 0000000..788378e
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/Admin2LexSorter.config
@@ -0,0 +1,23 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR ADMIN 2 LEXICOGRAPHIC SORTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+TARGET_LIST =C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+#PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR ADMIN 2 LEXICOGRAPHIC SORTER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/AreaGenerator.config b/org.eclipse.stem.utility/configuration/AreaGenerator.config
new file mode 100644
index 0000000..41e2532
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/AreaGenerator.config
@@ -0,0 +1,41 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR AREA GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR AREA GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/DownSampler.config b/org.eclipse.stem.utility/configuration/DownSampler.config
new file mode 100644
index 0000000..0004f74
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/DownSampler.config
@@ -0,0 +1,42 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR DOWN-SAMPLER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# The THRESHOLD variable specifies an angle in degrees for which we want to reduce. If not provided it defaults to 5 degrees.
+THRESHOLD=5
+#
+# The number of reduction ITERATIONS. If not provided it defaults to 5 iterations.
+ITERATIONS=5
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\CountriesLight.txt
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+REDUCE_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\reduceList.txt
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+MAP_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR DOWN-SAMPLER **********
+#
+################################################################################################################################################
+
diff --git a/org.eclipse.stem.utility/configuration/EuropeDataCleaner.config b/org.eclipse.stem.utility/configuration/EuropeDataCleaner.config
new file mode 100644
index 0000000..d067ed0
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/EuropeDataCleaner.config
@@ -0,0 +1,20 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE EUROPE DATA CLEANER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\EuropeData2007\EuropeUN\UNdataShp\)
+OUTPUT = C:\EuropeData2007\EuropeUN\UNdataShp\
+#
+# ********** END OF CONFIGURATION FILE FOR EUROPE DATA CLEANER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/EuropeDataConverter.config b/org.eclipse.stem.utility/configuration/EuropeDataConverter.config
new file mode 100644
index 0000000..6d71830
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/EuropeDataConverter.config
@@ -0,0 +1,26 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR EUROPE DATA CONVERTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# Europe names file (i.e. NAMES_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeNames.txt)
+NAMES_LIST= C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeNames.txt
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\diva\Europe)
+OUTPUT = C:\diva\Europe\
+#
+# ********** END OF CONFIGURATION FILE FOR EUROPE DATA CONVERTER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/EuropeDataExtractor.config b/org.eclipse.stem.utility/configuration/EuropeDataExtractor.config
new file mode 100644
index 0000000..60ef690
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/EuropeDataExtractor.config
@@ -0,0 +1,26 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR EUROPE DATA EXTRACTOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# Europe names file (i.e. NAMES_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeNames.txt)
+NAMES_LIST= C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeNames.txt
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+OUTPUT = C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\
+#
+# ********** END OF CONFIGURATION FILE FOR EUROPE DATA EXTRACTOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/EuropeDataFormatter.config b/org.eclipse.stem.utility/configuration/EuropeDataFormatter.config
new file mode 100644
index 0000000..5c3cc78
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/EuropeDataFormatter.config
@@ -0,0 +1,26 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR EUROPE DATA FORMATTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\stemII\org.eclipse.stem.utility\temp\)
+OUTPUT = C:\stemII\org.eclipse.stem.utility\temp\
+#
+# ********** END OF CONFIGURATION FILE FOR EUROPE DATA FORMATTER**********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/GMLGenerator.config b/org.eclipse.stem.utility/configuration/GMLGenerator.config
new file mode 100644
index 0000000..6f945fb
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/GMLGenerator.config
@@ -0,0 +1,32 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR GML GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+#PROPERTIES_OUTPUT= C:\stemII\org.eclipse.stem.geography\resources\data\geo\country\
+#
+# ********** END OF CONFIGURATION FILE FOR GML GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/GroupGenerator.config b/org.eclipse.stem.utility/configuration/GroupGenerator.config
new file mode 100644
index 0000000..a4e5f16
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/GroupGenerator.config
@@ -0,0 +1,32 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR GROUP GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\diva\grouped\)
+OUTPUT= C:\diva\grouped\
+#
+# ********** END OF CONFIGURATION FILE FOR GROUP GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/MultiPassDownSampler.config b/org.eclipse.stem.utility/configuration/MultiPassDownSampler.config
new file mode 100644
index 0000000..1c4aa28
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/MultiPassDownSampler.config
@@ -0,0 +1,38 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR MULTI PASS DOWN-SAMPLER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# The THRESHOLD variable specifies an angle in degrees for which we want to reduce. If not provided it defaults to 5 degrees.
+#THRESHOLD=5
+#
+# The number of reduction ITERATIONS. If not provided it defaults to 5 iterations.
+#ITERATIONS=5
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\reduceList.txt
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. MAP_OUTPUT=C:\stemII\org.eclipse.stem.geography\resources\data\geo\country\)
+MAP_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR MULTI PASS DOWN-SAMPLER **********
+#
+################################################################################################################################################
diff --git a/org.eclipse.stem.utility/configuration/NameGenerator.config b/org.eclipse.stem.utility/configuration/NameGenerator.config
new file mode 100644
index 0000000..76027a9
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/NameGenerator.config
@@ -0,0 +1,32 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR NAME GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+#PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR NAME GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/NodeDataGenerator.config b/org.eclipse.stem.utility/configuration/NodeDataGenerator.config
new file mode 100644
index 0000000..437f710
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/NodeDataGenerator.config
@@ -0,0 +1,41 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR NODE DATA GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR NODE DATA GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/PolygonAreaGenerator.config b/org.eclipse.stem.utility/configuration/PolygonAreaGenerator.config
new file mode 100644
index 0000000..1e1dbaf
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/PolygonAreaGenerator.config
@@ -0,0 +1,41 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR POLYGON AREA GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. OUTPUT=C:\stemII\org.eclipse.stem.internal.data\parameters\PolygonAreas\)
+OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR POLYGON AREA GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/PopulationGenerator.config b/org.eclipse.stem.utility/configuration/PopulationGenerator.config
new file mode 100644
index 0000000..12ecb80
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/PopulationGenerator.config
@@ -0,0 +1,41 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR POPULATION GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR POPULATION GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/PopulationProfiler.config b/org.eclipse.stem.utility/configuration/PopulationProfiler.config
new file mode 100644
index 0000000..340d37d
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/PopulationProfiler.config
@@ -0,0 +1,41 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR POPULATION PROFILER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+PROPERTIES_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR POPULATION PROFILER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/PropertiesGenerator.config b/org.eclipse.stem.utility/configuration/PropertiesGenerator.config
new file mode 100644
index 0000000..ab014f0
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/PropertiesGenerator.config
@@ -0,0 +1,44 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR PROPERTIES GENERATOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+#TARGET_LIST =
+#
+# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
+#POP_PROFILES=
+#
+# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
+#POLYGON_AREAS=
+#
+# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+#AREA_POP=
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
+PROPERTIES_OUTPUT= C:\tempout\
+#
+# Output directory for new files (i.e. MAP_OUTPUT=C:\stemII\org.eclipse.stem.geography\resources\data\geo\country\)
+MAP_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR PROPERTIES GENERATOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/RussiaDataCleaner.config b/org.eclipse.stem.utility/configuration/RussiaDataCleaner.config
new file mode 100644
index 0000000..4836ada
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/RussiaDataCleaner.config
@@ -0,0 +1,20 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE RUSSIA DATA CLEANER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\EuropeData2007\Russia\)
+OUTPUT = C:\EuropeData2007\Russia\
+#
+# ********** END OF CONFIGURATION FILE FOR RUSSIA DATA CLEANER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/RussiaDataConverter.config b/org.eclipse.stem.utility/configuration/RussiaDataConverter.config
new file mode 100644
index 0000000..11af6e4
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/RussiaDataConverter.config
@@ -0,0 +1,23 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR RUSSIA DATA CONVERTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\diva\Europe)
+OUTPUT = C:\diva\Europe
+#
+# ********** END OF CONFIGURATION FILE FOR RUSSIA DATA CONVERTER **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/RussiaDataExtractor.config b/org.eclipse.stem.utility/configuration/RussiaDataExtractor.config
new file mode 100644
index 0000000..4fb3ec0
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/RussiaDataExtractor.config
@@ -0,0 +1,23 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR RUSSIA DATA EXTRACTOR **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\EuropeCountries.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
+OUTPUT = C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\
+#
+# ********** END OF CONFIGURATION FILE FOR RUSSIA DATA EXTRACTOR **********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/configuration/SinglePassDownSampler.config b/org.eclipse.stem.utility/configuration/SinglePassDownSampler.config
new file mode 100644
index 0000000..555422b
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/SinglePassDownSampler.config
@@ -0,0 +1,35 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR SINGLE PASS DOWN-SAMPLER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# The THRESHOLD variable specifies an angle in degrees for which we want to reduce. If not provided it defaults to 5 degrees.
+#THRESHOLD=5
+#
+# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
+#IS03166_1=
+#
+# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
+#ISO3166_2=
+#
+# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
+#ISO_FIX=
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\CountriesLight.txt
+#
+# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
+#LEX_DIR=
+#
+# Output directory for new files (i.e. MAP_OUTPUT=C:\stemII\org.eclipse.stem.geography\resources\data\geo\country\)
+MAP_OUTPUT= C:\tempout\
+#
+# ********** END OF CONFIGURATION FILE FOR SINGLE PASS DOWN-SAMPLER **********
+#
+################################################################################################################################################
diff --git a/org.eclipse.stem.utility/configuration/USA2DivaFormatConverter.config b/org.eclipse.stem.utility/configuration/USA2DivaFormatConverter.config
new file mode 100644
index 0000000..13f7915
--- /dev/null
+++ b/org.eclipse.stem.utility/configuration/USA2DivaFormatConverter.config
@@ -0,0 +1,23 @@
+################################################################################################################################################
+#
+# ********** CONFIGURATION FILE FOR EUROPE USA TO DIVA FORMAT CONVERTER **********
+#
+# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
+#
+# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
+#
+# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
+WORKSPACE=C:\stemII\
+#
+# Names file (i.e. NAMES_LIST=C:\stemII\org.eclipse.stem.utility\parameters\USA_L1_Data\USA_L1.txt)
+NAMES_LIST=C:\stemII\org.eclipse.stem.utility\parameters\USA_L1_Data\USA_L1.txt
+#
+# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\formatList.txt)
+TARGET_LIST = C:\stemII\org.eclipse.stem.utility\parameters\targets\formatList.txt
+#
+# Output directory for new files (i.e. OUTPUT=C:\diva\NorthAmerica\USA\)
+OUTPUT = C:\diva\NorthAmerica\USA\
+#
+# ********** END OF CONFIGURATION FILE FOR USA TO DIVA FORMAT CONVERTER**********
+#
+################################################################################################################################################
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/docs/An Introduction To STEM II Properties Files.txt b/org.eclipse.stem.utility/docs/An Introduction To STEM II Properties Files.txt
new file mode 100644
index 0000000..e525aeb
--- /dev/null
+++ b/org.eclipse.stem.utility/docs/An Introduction To STEM II Properties Files.txt
@@ -0,0 +1,94 @@
+
+Jan - 10 - 2007
+
+**************************************************************************************************************************************************************************************************************************************************
+
+*An Introduction to STEM's Properties Files*
+
+   In STEM II, we store data about a country and its administrative divisions in properties files. Properties files are used to define identifiers and to set population and area data
+at all levels (i.e. country, state, or county level). There are four main types of properties files : area, population, nodes, and names. The purpose of each property file will be
+explained later.
+
+   In STEM II, most of the data is standardized ISO 3166 or FIPS (Federal Information Processing Stantandards) data. According to Wikipedia, "ISO 3166 is a three-part geographic coding standard for 
+coding the names of countries and dependent areas, and the principal subdivisions thereof." ISO 3166 specifies standard alpha-2 codes, alpha-3 codes, and three-digit country codes as well. For example,
+for the USA, the alpha-2 code would be US, the alpha-3 code is USA , and the three-digit country code is 840. In addittion, we use FIPS codes whenever possible to create identifiers that represent a 
+political administration. For instance, the FIPS for New York County (i.e., Manhattan) is 36061 while Kings County (i.e., Brooklyn) is 36047. The first two digits of the FIPS identifies the state.  
+
+**Administrative Levels and Properties Files**
+
+   Administrative levels correspond to political divisions of a country. A level 0 administration identifies an entire country (e.g. USA or Mexico). A level 1 administration corresponds to a subdivision of a country
+which can be a state, territory, parish, or a province. As an example we have that California, Colorado, and New York are all level 1 administrations of the USA. Similarly, level 2 administrations are subdivisions of a level 
+1 administration. Orange County, Monterey County, and Napa County are all level 2 administrations that belong to California. 
+
+   A property file is a plain-text file that contains either area data, population data, or other relevant data related to the political divisions of a country at different administration levels. Properties files are located
+under org.eclipse.stem.internal.data\resources\data\country. There are four types of properties files :
+
+       Names property file :  This file defines the identifiers for every administrative division in a country at each level. For example, for the USA, at level 0 we would have "USA = United States". At level 1, we would have "US-CA = California" , "US-CO = Colorado", and "US-NY = New York". 
+At level 2, for Orange, Monterey, and Napa counties within California we have "US-CA-06059 = Orange County", "US-CA-06053 = Monterey County", and "US-CA-06055 = Napa County". There is a single names property
+file for every country. The corresponding names property file for the USA is USA_names.properties. For level 2 administrations, the five digits found on the identifiers (i.e.
+"06053" for identifier "US-CA-06053" are defined as follows : the leftmost two digits identify the level 1 administration ( "06" -> California ) while the remaining
+digits, which can be up to four, identify the level 2 administration ("053" -> Monterey County).       
+
+       Nodes property file : This file provides additional information about identifiers of administrative divisions. There is a nodes property file for each administration level. There is a fixed format that is used in these files and it is as follows :
+
+" # Format: Code = Name, ISO-3166-2 numeric code, Two letter code " For example, at level 0 for the USA we have "USA = United States, 840, US". At level 1, for California, Colorado, and New York we have :
+"US-CA = California, 06, CA" , "US-CO = Colorado, 08, CO", and  "US-NY = New York, 36, NY". The nodes property files corresponding to the USA are USA_0_node.properties, USA_1_node.properties, and USA_2_node.properties.
+
+       Area property file : This file contains area data (in square kilometers) for administrative divisions. There is an area property file for each administration level. In the case of the USA at level 0, we have "USA = 9161923".
+At level 1, we have "US-CA = 163695.57", "US-CO = 104093.57", and "US-NY = 54556.00" for California, Colorado and New York respectively. At level 2, for Orange, Monterey, and Napa counties within California 
+we have "US-CA-06059 = 2043.5006", "US-CA-06053 = 8603.9405", and "US-CA-06055 = 1952.8510". The area property files corresponding to the USA are USA_0_area.properties, USA_1_area.properties, and USA_2_area.properties.
+
+
+       Population property file : This file contains population data for administrative divisions. There is a population property file for each administration level.  In the case of the USA at level 0, we have "USA = 298444215".
+At level 1, we have "US-CA = 33871648 ", "US-CO = 4301261", and "US-NY = 18976457" for California, Colorado and New York respectively. At level 2, for Orange, Monterey, and Napa counties within California 
+we have "US-CA-06059 = 2846289", "US-CA-06053 = 401762", and "US-CA-06055 = 124279". The population property files corresponding to the USA are USA_0_human.properties, USA_1_human.properties, and USA_2_human.properties.
+
+	
+**Updating values in a property file**
+
+   To update a value in a property file you should follow a few simple steps. First, given that you know the name of the country and/or administrative division to be updated, look under org.eclipse.stem.internal.data\resources\data\country\<three letter identifier for the country> for the 
+folder that belongs to a given country. In the case of the USA, we would go to  org.eclipse.stem.internal.data\resources\data\country\USA where all the property files are located. Second, search in the names property file to find the identifier of the administration we want to update. Third,
+open the corresponding file (area, population, or node file) where the update will take place. Finally, search for the identifier and once found, update its value. As an example,
+lets say we want to update by increasing 100 square kilometers the area of Orange County which belongs to California, USA. Then, we would open org.eclipse.stem.internal.data\resources\data\country\USA\USA_names.properties and do a search for the identifier of "Orange County"
+which is  "US-CA-06059". Then, since we learn from the names property file that Orange County is a level 2 administration, we would open "org.eclipse.stem.internal.data\resources\data\country\USA\USA_2_area.properties"
+and do a new search for identifier "US-CA-06059". Our search will find ""US-CA-06059 = 2043.5006" Finally, we do the update by adding 100 square kilometers to the current value "US-CA-06059 = 2143.5006".
+
+    Once the updating has been done to the correct file(s),  one needs to run org.eclipse.stem.internal.data\resources\src\Main.java. By running Main.java we create a new serialized file that will take the changes into account.
+The new serialized file can be found under org.eclipse.stem.internal.data\temp\data\scenario\disease. Next time STEM II executes a scenario, it will load the new serialized file.
+
+
+**************************************************************************************************************************************************************************************************************************************************
+
+*An Introduction to STEM Map Files*
+
+STEM Maps 
+
+
+  Maps for STEM are XML files that follow a GML format. These files are located under org.eclipse.stem.geography\resources\data\geo\country\<three letter identifier for the country>. There can be multiple map files for a country, one for each administration level.
+As an example, for the USA we have the following two maps: USA_1_MAP.xml and USA_2_MAP.xml. According to Wikipedia, GML is an XML grammar defined by the Open Geospatial Consortium (OGC) to express geographical features. As an example, the set of GML elements that define
+Orange county are :
+
+//Sample taken from org.eclipse.stem.geography\resources\data\geo\country\USA\USA_2_MAP.xml
+
+...
+<gml:Polygon gml:id="US-CA-06053">
+<gml:outerBoundaryIs>
+<gml:LinearRing>
+<gml:posList>
+36.9186 -121.7019 36.9197 -121.6999 ... 36.9186 -121.7019
+</gml:posList>
+</gml:LinearRing></gml:outerBoundaryIs>
+</gml:Polygon>
+...
+
+**Updating a Map**    
+
+    To update a map, that is, to provide more accurate latitude and longitude data for a given location we follow a few steps. We find the identifier for the location
+we are trying to update. This step is similar to the step described for updating values in a property file. Once we have found it, we replace the latitute and longitude
+values contained within the <gml:postList> </gml:postList> tags. We need to make sure that the starting and ending latitute and longitude values are the same, otherwise it
+wont be accepted as a closed polygon. In the example above, note that for Monterey County ("US-CA-06053") the starting latitude and longitude values "36.9186 -121.7019" are the same as the ending ones
+"36.9186 -121.7019".
+
+**************************************************************************************************************************************************************************************************************************************************
+
+
diff --git a/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Conversion Utilities for Europe b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Conversion Utilities for Europe
new file mode 100644
index 0000000..af8013f
--- /dev/null
+++ b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Conversion Utilities for Europe
@@ -0,0 +1,45 @@
+Feb - 05 - 2007
+
+**************************************************************************************************************************************************************************************************************************************************
+
+*An Introduction to STEM II Data Conversion Utilities for Europe*
+
+
+	 The set of data generators were initially developed for the Diva format. However, the countries in the European data set come in a different format.
+Before we can run the data generation utilities to generate properties files and maps on the European data set, we need to run a set of utilities
+that will convert the European data into the Diva format that the generators expect. 
+
+NOTE: All of the conversion utilities for Europe are found under org.eclipse.stem\src\generators.
+
+**Overview of the data conversion process from the Europe data set format into the Diva set format :**
+  
+      1) Data Cleaning/Grouping : start by running EuropeDataCleaner. This program will
+  remove all unnecesary data (i.e. columns) in the original source file. In
+  addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+  etc). The result will be a file named EuropeSorted.txt with cleaned data.
+  
+  In other words : Europe.txt (input) --> ||EuropeDataCleaner|| --> EuropeSorted.txt (output)
+  
+  NOTE: EuropeSorted.txt will be used as the input for the remaining part of
+  the process.
+  
+      2) Data Formatting : run EuropeDataFormatter to break down the data source
+  (EuropeSorted.txt) into multiple data files, one for each country as
+  indicated by the ID (i.e. NO,IT,FR,UK, etc). The result will be multiple data
+  files (i.e. italy.txt, spain.txt, etc). Each file will be found under a
+  folder with same name as the country (i.e. ITALY\italy.txt, SPAIN\spain.txt,
+  etc).
+  
+      3) Data Converter : run EuropeDataConverter to convert into Diva format.
+  
+  
+      4) Area and Population Data Extraction : run EuropeDataExtractor to extract
+  all area and population data for each country. The new area and population data files will be found under
+org.eclipse.stem.utility/dataMigration/input/AreaPopulationData. For every country, say for Spain, there will
+be corresponding area and population data files : SPAIN_AREA.txt and SPAIN_POPULATION.txt.
+  
+  
+      After all four steps are done and we have converted the Europe data set into a Diva format, we now can run the
+set of data generators to create the properties files and maps as explained in "An Introduction to STEM II Data Generation Utilities for Diva".
+
+	 
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Generation Utilities for Diva b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Generation Utilities for Diva
new file mode 100644
index 0000000..be14d19
--- /dev/null
+++ b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Generation Utilities for Diva
@@ -0,0 +1,503 @@
+
+Jan - 11 - 2007
+
+**************************************************************************************************************************************************************************************************************************************************
+
+*An Introduction to STEM II Data Generation Utilities for Diva*
+
+
+
+     Data generation for STEM II was done using a set of custom software utilities and data generators written in Java for the purpose. They can be found 
+under org.eclipse.stem.utility\src\generators. These generators were used to create STEM's properties files and maps for all countries in the Diva 
+data set (http://www.cipotato.org/DIVA/data/DataServer.htm). There are multiple steps involved in the process of data generation. Before running a data 
+generator there are a few intermediate steps to be done by custom utilities found in org.eclipse.stem.utility\src\generators. Furthermore, the intermediate 
+steps vary according to the particular document (i.e. area properity file, nodes property file, or map)  we want to generate. So, we can think of data 
+generation for STEM II  as consisting of a set of data generation processes where each process consists of a set of steps. Overall, we can identify the
+following five data generation processes :
+
+
+      --Generation of Area Properties Files 
+
+      --Generation of Population Properties Files 
+
+      --Generation of Nodes Properties Files 
+
+      --Generation of Names Properties Files 
+
+      --Map Generation
+
+
+     Each process will be explained in detail, but before, we have to mention our data sources and the nature of the data we are dealing with.
+
+
+**Data Sources for STEM II**
+
+      Our main source of data was DIVA-GIS (http://www.cipotato.org/DIVA/data/DataServer.htm), which is a repository for maps and GIS data. All DIVA-GIS
+data is free and in the public domain. The data files are in shapefile format (http://en.wikipedia.org/wiki/Shapefile).  According to Wikipedia, "The ESRI 
+Shapefile is a popular geospatial vector data format for geographic information systems software. It is developed and regulated by ESRI as a (mostly) open 
+specification for data interoperability among ESRI and other software products. A "shapefile" commonly refers to a collection of files with ".shp", ".shx", 
+".dbf" " All shapefiles downloaded from DIVA-GIS are zip compressed. Before getting to data generation, there are two steps to be done : 
+
+
+***Uncompressing***
+
+     The first step is to unzip all the downloaded DIVA-GIS shapefiles by using a compressing software like Winzip or 7-zip.
+
+***Extraction****
+
+     The second step is to extract data for every possible shapefile into a plain text document. To do this, we run org.eclipse.stem.utility\src\generators\WorldReader.java. 
+WorldReader takes as an argument a list will all the files we want to extract data from. Such a list looks as follows :
+
+
+//Taken from org.eclipse.stem.utility\dataMigration\input\world\World.txt
+...
+#THIS FILE IS THE INPUT TO WorldReader.java
+#IT CONSISTS OF PAIRS OF THE FORM : [LOCATION;FILENAME]
+C:\diva\Africa\Algeria;C:\diva\Africa\Algeria\Algeria.txt
+C:\diva\Africa\Angola;C:\diva\Africa\Angola\Angola.txt
+C:\diva\Africa\Benin;C:\diva\Africa\Benin\Benin.txt
+C:\diva\Africa\BurkinaFaso;C:\diva\Africa\BurkinaFaso\BurkinaFaso.txt	
+C:\diva\Africa\Burundi;C:\diva\Africa\Burundi\Burundi.txt	
+...
+
+     The result is a set of plain-text files containing GIS data. We call it a Diva file. Next, we explain how a Diva file looks like.
+
+***Overview of Diva Files***
+
+A diva file is a simple-text file that contains GIS data and that looks as follows :
+
+// Extracted from Argentina.txt
+
+// Sample level 0 data
+ARG,ARGENTINA,-0.5559767,-1.0146881,-0.5559825,-1.0147113, ...
+
+// Sample level 1 data
+ARG,ARGENTINA,BUENOS AIRES,-0.70200574,-1.0840372, ...
+
+// Sample level 2 data
+ARG,ARGENTINA,JUJUY,Santa Catalina,-0.38024858,-1.1561186, ...
+
+    In other words, it is just a set of rows with location data (i.e. ARG,ARGENTINA,JUJUY,Santa Catalina) and followed by polygon data corresponding
+to a geographical location (i.e. -0.38024858,-1.1561186,-0.38023695,-1.1561148,-0.38024002,-1.1560922,-0.38024685,-1.1560414, ...). One restriction about
+the Diva files is that data has to appear in the file based on administration level. In other words, we want to make sure that all level 0 data comes before
+the level 1 data and that all level 2 data comes after level 0 and level 1 data respectively. The data generation utilities are sensitive to the ordering of
+data based on the administration level. A data generator goes through internal transitions based on the administration level of the data it is currently processing.
+Internal transitions of the data generator must follow the pattern : Level_0 -> Level_1 -> Level_2. Otherwise, if data does not conform to the Level_0 -> Level_1 -> Level_2 rule, 
+unexpected behavior might arise from the data generation utilities.
+
+
+**Grouping**
+
+      After we uncompress and extract shapefiles into plain text documents, we notice that for some files the data for a single administration is scattered all over
+the data file. As an example, for Wisconsin, we dont find all the rows of data for it consecutively, but scattered all over, as follows :
+
+  USA,United States, Wisconsin, 0.7917936,-1.5175203 ... 
+  USA,United States,Wisconsin,0.81974524,-1.5800693 ...
+  USA,United States, New Hampshire,0.79072654,-1.2406557  ...
+  USA,United States, Michigan,0.7881631,-1.5015621 ...
+  ...
+  USA,United States, Wisconsin, ...
+    ... 		
+  USA,United States, Wisconsin, ...
+    ...
+       and so on...
+
+    We want to group all data that belongs to Wisconsin consecutively. By doing this, we will produce a polygon with unique ID for Wisconsin instead of multiple 
+polygons with same ID. By definition, polygon IDs should be unique. We achievethe grouping by running org.eclipse.stem.utility\src\generators\GroupGenerator.java. 
+The resulting "grouped" data file will look as follows :
+
+USA,United States,Kentucky,0.6370049,-1.5618098 ...
+USA,United States,Wisconsin,0.8216533,-1.5777862 ...
+USA,United States,Wisconsin,0.81974524,-1.5800693 ...
+USA,United States,Wisconsin,0.8127316,-1.5780942 ...
+USA,United States,Wisconsin,0.8175863,-1.580813 ...
+USA,United States,Wisconsin,0.7917936,-1.5175203 ...
+USA,United States,Wisconsin,0.7864648,-1.5271649 ...
+USA,United States,Minnesota,0.8585817,-1.6607387 ...
+
+     Running GroupGenerator will produce as output files with the "_GROUPED" suffix attached. So for example, if the original data file for the USA is "USA.txt", 
+then the corresponding grouped file will have name "USA_GROUPED.txt"
+
+NOTE : From this introduction we assume that all the generators and utilities are located under  org.eclipse.stem.utility\src\generators\ except where explicitly 
+mentioned otherwise.
+
+**Lexicographic Sorting**
+
+    After we have run GroupGenerator, we want to run a pair of utilities that will do a lexicographic sorting of the  data files at administration levels 1 and 2. 
+    These utilities are : Admin1LexSorter and Admin2LexSorter. Next, we explain both utilities in detail. The files produced by these utilities will be located under 
+    org.eclipse.stem.utility\dataMigration\input\sort\<Three letter identifier for country>
+
+***Admin1LexSorter: Lexicographic Sorting of Level 1 Administrations***
+ 
+     The goal of this program is to go through the source data file (i.e. USA.txt or USA_GROUPED.txt), do a lexicographic sorting, and produce as a result a file where 
+each row corresponds to a level 1 administration by lexicographic ordering. As an example, for the case of Argentina, the result would looks like this :
+
+1:AR-B:AR:BUENOS AIRES
+2:AR-C:AR:BUENOS AIRES D.F.
+3:AR-K:AR:CATAMARCA
+4:AR-H:AR:CHACO
+5:AR-U:AR:CHUBUT
+6:AR-X:AR:CORDOBA
+7:AR-W:AR:CORRIENTES
+8:AR-E:AR:ENTRE RIOS
+9:AR-P:AR:FORMOSA
+10:AR-Y:AR:JUJUY
+11:AR-L:AR:LA PAMPA
+12:AR-F:AR:LA RIOJA
+13:AR-M:AR:MENDOZA
+14:AR-N:AR:MISIONES
+15:AR-Q:AR:NEUQUEN
+16:AR-R:AR:RIO NEGRO
+17:AR-A:AR:SALTA
+18:AR-J:AR:SAN JUAN
+19:AR-D:AR:SAN LUIS
+20:AR-Z:AR:SANTA CRUZ
+21:AR-S:AR:SANTA FE
+22:AR-G:AR:SANTIAGO DEL ESTERO
+23:AR-V:AR:TIERRA DEL FUEGO
+24:AR-T:AR:TUCUMAN
+
+   The name of the resulting lexicographically-sorted file for Argentina is ARG_ADMIN1_LEX.txt and found under org.eclipse.stem.utility\dataMigration\input\sort\ARG 
+
+***Admin2LexSorter: Lexicographic Sorting of Level 2 Administrations***
+
+      Similar to Admin2LexSorter, except that now we sort lexicographically based on a the concatenation of the level 1 and level 2 administrations. This concatenation has 
+the effect of sorting all level 2 administrations within its level 1 container. As an example, the result of sorting all level 2 administrations that belong to the province 
+(level 1 administration) of La Rioja in Argentina, we get :
+
+// Extracted from org.eclipse.stem.utility\dataMigration\input\sort\ARG_ADMIN2_LEX.txt
+...
+1:AR:ARG:ARGENTINA:LA RIOJA:Arauco
+2:AR:ARG:ARGENTINA:LA RIOJA:Capital
+3:AR:ARG:ARGENTINA:LA RIOJA:Castro Barros
+4:AR:ARG:ARGENTINA:LA RIOJA:Chilecito
+5:AR:ARG:ARGENTINA:LA RIOJA:Famatina
+6:AR:ARG:ARGENTINA:LA RIOJA:General Angel V. Pesaloza
+7:AR:ARG:ARGENTINA:LA RIOJA:General Belgrano
+8:AR:ARG:ARGENTINA:LA RIOJA:General Juan F. Quiroga
+9:AR:ARG:ARGENTINA:LA RIOJA:General Lamadrid
+10:AR:ARG:ARGENTINA:LA RIOJA:General Lavalle
+11:AR:ARG:ARGENTINA:LA RIOJA:General Ocampo
+12:AR:ARG:ARGENTINA:LA RIOJA:General San Martin
+13:AR:ARG:ARGENTINA:LA RIOJA:General Sarmiento
+14:AR:ARG:ARGENTINA:LA RIOJA:Gobernador Gordillo
+15:AR:ARG:ARGENTINA:LA RIOJA:Independencia
+16:AR:ARG:ARGENTINA:LA RIOJA:Rosario Vera Penaloza
+17:AR:ARG:ARGENTINA:LA RIOJA:San Blas de los Sauces
+18:AR:ARG:ARGENTINA:LA RIOJA:Sanagasta
+...
+      
+Similarly, the province of Cordoba in Argentina, the sorting produces ;
+
+// Extracted from org.eclipse.stem.utility\dataMigration\input\sort\ARG_ADMIN2_LEX.txt
+...
+1:AR:ARG:ARGENTINA:MENDOZA:Capital
+2:AR:ARG:ARGENTINA:MENDOZA:General Alvear
+3:AR:ARG:ARGENTINA:MENDOZA:Godoy Cruz
+4:AR:ARG:ARGENTINA:MENDOZA:Guaymallen
+5:AR:ARG:ARGENTINA:MENDOZA:Junin
+6:AR:ARG:ARGENTINA:MENDOZA:La Paz
+7:AR:ARG:ARGENTINA:MENDOZA:Las Heras
+8:AR:ARG:ARGENTINA:MENDOZA:Lavalle
+9:AR:ARG:ARGENTINA:MENDOZA:Lujan
+10:AR:ARG:ARGENTINA:MENDOZA:Maipu
+11:AR:ARG:ARGENTINA:MENDOZA:Malarge
+12:AR:ARG:ARGENTINA:MENDOZA:Rivadavia
+13:AR:ARG:ARGENTINA:MENDOZA:San Carlos
+14:AR:ARG:ARGENTINA:MENDOZA:San Martin
+15:AR:ARG:ARGENTINA:MENDOZA:San Rafael
+16:AR:ARG:ARGENTINA:MENDOZA:Sata Rosa
+17:AR:ARG:ARGENTINA:MENDOZA:Tunuyan
+18:AR:ARG:ARGENTINA:MENDOZA:Tupungato
+...      
+
+*Other Sources of Data Used for Data Generation*
+      
+**Area and Population Data : GeoHive and CityPopulation**
+
+   Most of the area and population data we use was downloaded from GeoHive (http://www.geohive.com/default1.aspx). GeoHive 
+is a site with geopolitical data and statistics on the human population. However, we also found data at City Population (http://www.citypopulation.de/).
+City Population's site provides global population statistics.
+
+
+**ISO 3166 Data**
+
+   The main source of ISO 3166 data is an official ISO 3166 database purchased from ISO (International Organization
+for Standardization). The database contains data for both ISO 3166-1 and ISO 3166-2.
+
+**Lexicographically Sorted Data**
+
+   This is a set of data files generated by running Admin1LexSorter and Admin2LexSorter. This data will be useful when creating 
+identifiers for each location during the data generation process.
+
+**URLs**
+
+   This is the set of data files containing URLs for every data we found online. We kept track of all the sources of our data and all of them
+are accounted for. For each country, there is a corresponding URL file found under org.eclipse.stem/dataMigration/input/urls. A URL file consists 
+of rows of the form : KEYWORD:URL For example, for the country of Irak, its corresponding URL file looks like :
+
+// Extracted from org.eclipse.stem/dataMigration/input/urls
+GEOHIVE*http://www.xist.org/cntry/iraq.aspx
+WIKI*http://en.wikipedia.org/wiki/Irak
+CITYPOP*http://en.wikipedia.org/wiki/Irak
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=IRQ&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/iz.html
+      
+      
+*Data Generators*
+
+**Introduction**
+
+   A data generator is a simple Java program that takes as input a file or a set of files from the Diva set and produces as output a property file for STEM.
+As it processes data, a generator goes through transitions according to the administrative level of the data that it is currently processing. It is expected
+that the level of data will follow the pattern of transitions : Level_0 -> Level_1 -> Level_2. We now explain the function of each data generator.
+ 
+**Generation of Names Properties Files**
+   
+      To generate a name property file, we run org.eclipse.stem.utility\src\generators\NameGenerator.java. After running NameGenerator, the result is a 
+new name property file for a given country. The corresponding name file for Argentina looks as follows :
+
+// Extracted from C:\stemII\org.eclipse.stem.internal.data\resources\data\country\AGO\AGO_names.properties.
+...
+# Level 1 (admin 1 = e.g., state)
+AO-BGO = BENGO
+AO-BGU = BENGUELA
+AO-BIE = BIE
+AO-CAB = CABINDA
+AO-CCU = CUANDO CUBANGO
+...
+
+      The purpose of a names property file is to define the identifiers for every administrative division in a country at each level.
+A single names property file will be generated for every country. For more information on STEM's properties files, please read "An Introduction To STEM Properties Files" 
+found at org.eclipse.stem.utility\docs.
+      
+**Generation of Nodes Properties Files**
+
+     To generate a node property file, we run org.eclipse.stem.utility\src\generators\NodeGenerator.java. After running NodeGenerator, the result is a 
+new node property file for a given country. For a single country, a node property file will be generated for each administrative level. For Argentina, the corresponding node
+property files produced will be :
+
+ARG_0_node.properties
+ARG_1_node.properties
+ARG_2_node.properties
+
+      A sample node property file for Argentina looks as follows :
+           
+// Extracted from org.eclipse.stem.internal.data\resources\data\country\ARG_1_node.properties
+...
+AR-B = BUENOS AIRES, 01, B
+AR-C = BUENOS AIRES D.F., 02, C
+AR-K = CATAMARCA, 03, K
+AR-H = CHACO, 04, H
+AR-U = CHUBUT, 05, U
+AR-X = CORDOBA, 06, X
+AR-W = CORRIENTES, 07, W
+AR-E = ENTRE RIOS, 08, E
+AR-P = FORMOSA, 09, P
+AR-Y = JUJUY, 10, Y
+AR-L = LA PAMPA, 11, L
+AR-F = LA RIOJA, 12, F
+AR-M = MENDOZA, 13, M
+AR-Q = NEUQUEN, 15, Q
+AR-R = RIO NEGRO, 16, R
+AR-A = SALTA, 17, A
+AR-J = SAN JUAN, 18, J
+AR-D = SAN LUIS, 19, D
+AR-Z = SANTA CRUZ, 20, Z
+AR-S = SANTA FE, 21, S
+AR-G = SANTIAGO DEL ESTERO, 22, G
+AR-V = TIERRA DEL FUEGO, 23, V
+AR-T = TUCUMAN, 24, T
+AR-N = MISIONES, 14, N
+...            
+
+	 The purpose of a node property file is to provide additional information about identifiers of administrative divisions. For more
+information on STEM's properties files, please read "An Introduction To STEM Properties Files" found at org.eclipse.stem.utility\docs.
+
+    
+**Generation of Population Properties Files**
+
+		There are two intermediate steps to be done before generating a population property file. First, we have to run both, Admin1LexSorter and Admin2LexSorter to generate a set of files were
+administrations for a given country are sorted lexicographically as was previously explained in this document. Next, we run org.eclipse.stem.utility.generators\PopulationProfiler.java.
+PopulationProfiler.java is a program that creates a profile of all the level 1 administrations of a country based on population and on the number of
+level 2 administrations that belong or are contained in it. This is a necessary step since we are missing some exact population data and by knowing the relationship of level 2 administration to its 
+container we can easily compute an approximate population value. Finally, we run org.eclipse.stem.utility\PopulationGenerator.java to genererate a population property file. For a single country, 
+a population property file will be generated for each administrative level. For Argentina, the corresponding population property files produced will be :
+
+ARG_0_human_2006.properties
+ARG_1_human_2006.properties
+ARG_2_human_2006.properties
+		
+		 A sample node property file for Argentina looks as follows :
+
+// Extracted from org.eclipse.stem.internal.data\resources\data\country\ARG_1_human_2006.properties
+...
+# The population identifier
+POPULATION = human
+
+# State/Province
+AR-B = 13827203
+AR-C = 2776138
+AR-K = 334568
+AR-H = 984446
+AR-U = 413237
+AR-X = 3066801
+AR-W = 930991
+AR-E = 1158147
+AR-P = 486559
+AR-Y = 611888
+AR-L = 299294
+AR-F = 289983
+AR-M = 1579651
+AR-Q = 474155
+...
+
+    The purpose of a population property file is to provide population data of administrative divisions. For more 
+information on STEM's properties files, please read "An Introduction To STEM Properties Files" found at org.eclipse.stem.utility\docs.
+    
+
+**Generation of Area Properties Files**
+
+	In a similar way to the population generation process, there is an intermediate step to be done before generating an area property file. We have to run
+org.eclipse.stem.utility\PolygonAreaGenerator.java to generate a set of files with areas in polygon units for every administration in a country. This is 
+a necessary step since we are missing some exact area data. Having polygon area values (in polygon units) helps to compute an approximate area value. Finally, 
+we run org.eclipse.stem.utility\AreaGenerator.java to genererate an area property file. For a single country, an area property file will be generated for each 
+administrative level.  For Argentina, the corresponding area property files produced will be :
+
+ARG_0_area.properties
+ARG_1_area.properties
+ARG_2_area.properties
+		
+		 A sample area property file for Argentina looks as follows :
+
+// Extracted from org.eclipse.stem.internal.data\resources\data\country\ARG_1_area.properties
+...
+# This is the source of the data
+SOURCE = http://www.xist.org/cntry/argentina.aspx
+# SOURCE = http://en.wikipedia.org/wiki/Argentina
+
+# State/Province
+AR-B = 307571
+AR-C = 200
+AR-K = 102602
+AR-H = 99633
+AR-U = 224686
+AR-X = 165321
+AR-W = 88199
+AR-E = 78781
+AR-P = 72066
+AR-Y = 53219
+AR-L = 143440
+AR-F = 89680
+AR-M = 148827
+AR-Q = 94078
+AR-R = 203013
+...
+
+    The purpose of an area property file is to provide area data of administrative divisions. For more 
+information on STEM's properties files, please read "An Introduction To STEM Properties Files" found at org.eclipse.stem.utility\docs.
+    
+
+**Map Generation**
+  
+     To generate maps we run an instance of org.eclipse.stem.utility\src\generators\GMLGenerator. GMLGenerator will create and XML file for each country in our dataset.
+The maps are created using GML (Geography Markup Language) which is an XML grammar. According to Wikipedia, " The Geography Markup Language (GML) is the XML grammar defined by the Open Geospatial Consortium (OGC) to express 
+geographical features. GML serves as a modeling language for geographic systems as well as an open interchange format for geographic transactions on the Internet."  All maps are found under
+org.eclipse.stem.geography\resources\data\geo\country\. There can be more than one map for each country. In fact, there is a map for every administrative level for which we have polygon data available.
+For Argentina, there are three corresponding maps :
+
+	ARG_0_MAP.xml
+	ARG_1_MAP.xml
+	ARG_2_MAP.xml
+	
+As an example, for Armenia the contents of the level 1 map looks as follows :
+
+# Taken from ARM_1_MAP.xml
+<Map>
+
+<title>ARM Level 1 Map</title>
+
+<subTitle>Administrative Boundaries</subTitle>
+
+<updated>Tue Nov 07 16:57:55 PST 2006 </updated>
+
+	<entry>
+
+	<georss:where>
+
+	  <gml:Polygon gml:id="AM-ER">
+
+	    <gml:outerBoundaryIs>
+
+	       <gml:LinearRing>
+
+	         <gml:posList>
+
+		         41.301422 45.004055 ... 41.301624 45.000002 41.301422 45.004055 
+		
+   	        </gml:posList>
+
+          </gml:LinearRing>
+
+       </gml:outerBoundaryIs>
+
+     </gml:Polygon>
+
+    </georss:where>
+
+   </entry>
+
+</Map>
+
+
+**Putting It All Together : running Properties Generator**
+
+   To be able to run properties files and maps we have developed a program whose purpose is to run all the generators on a given list of
+countries. To do this, we run org.eclipse.stem.utility/src/generators/PropertiesGenerator.java. The generator will go through each single
+country in the list and do all necessary work. The main logic for PropertiesGenerator is shown next :
+
+
+		...
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		// Generate the names.properties files for each country.
+		NameGenerator nameGen = new NameGenerator(args[CONFIG_FILE]);
+		nameGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the population.properties files for each country.
+		PopulationGenerator popGen = new PopulationGenerator(args[CONFIG_FILE]);
+		popGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the area.properties files for each country.
+		AreaGenerator areaGen = new AreaGenerator(args[CONFIG_FILE]);
+		areaGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the node.properties files for each country.
+		NodeDataGenerator nodeDataGen = new NodeDataGenerator(args[CONFIG_FILE]);
+		nodeDataGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the GML files for each country.
+		GMLGenerator gmlGen = new GMLGenerator(args[CONFIG_FILE]);
+		gmlGen.run();
+		...
diff --git a/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Reduction Utilities b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Reduction Utilities
new file mode 100644
index 0000000..534ee42
--- /dev/null
+++ b/org.eclipse.stem.utility/docs/An Introduction to STEM II Data Reduction Utilities
@@ -0,0 +1,175 @@
+Feb - 05 - 2007
+
+**************************************************************************************************************************************************************************************************************************************************
+
+*An Introduction to STEM II Data Reduction Utilities*
+
+
+	 The size of the maps produced by the data generation utilities can be quite large. When we run a simulation in STEM II
+that involves the whole world it might take a few seconds to load. This is noticeable and is expected since for such a 
+global simulation we deal with hundreds of maps, each of while can be quite big. As an example, for Argentina, we have the
+following file sizes :
+
+ ARG_0_MAP.xml    318 KB
+ ARG_1_MAP.xml  1,375 KB
+ ARG_2_MAP.xml  4,813 KB 
+ 
+ 
+ **Data Reduction**
+ 
+     To overcome this problem, we created a set of utilities that produce a reduced data set. Ideally, we want to reduce the 
+size of a file by 50% but still having the maps to display nicely with as few gaps and overlaps as possible. We created a Down-sampling
+or reduction algorithm for our map's polygons based on the Law of Cosines from Trigonometry. By derivation from the formula for the law of cosines,
+we can find each of the internal angles of a triangle: alpha, beta, and gamma. Our Down-sampling will consist of marking for deletion all points in 
+our polygon where the angle is less than a given threshold, say 5 degrees, with the condition that on a single pass we cannot delete two consecutive points.
+By avoiding to delete two consecutive points during the same pass, we reduce the chance of having undesirable visual artifacts like gaps.
+
+**The Down-sampling Algorithm**
+ 
+     The algorithm we designed is an iterative one. It is a rather simple one. It takes two arguments, a threshold in degrees and the number of iterations.
+The algorithm works as follows, every three points we apply the derivation of the law of cosines to find each of the three interior angles for the triangle formed
+by three consecutive points. Next, we apply a clever algorithm to decide which is the best point to remove (if any) from the current selection. The logic that
+deals with marking points for deletion and "sliding" to the next selection is the following :
+
+# Taken from org.eclipse.stem.utility/generators/SinglePassDownSampler 
+
+	// Check to see if the initial, leftmost point is greater than
+			// alpha or if it is UNSAFE. If so, then slide forward the window.
+			if (a1 > alpha) {
+				// Just slide forward the window one unit.
+				left_border += 1;
+				right_border += 1;
+				continue;
+			}
+
+			if (s1.equals(UNSAFE)) {
+
+				if (a2 < alpha && a2 <= a3) {
+					// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+					// Advance sliding window after P2
+					s2 = SAFE;
+					s3 = UNSAFE;
+				} else if (a3 < alpha) {
+					// [ P1 = UNSAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+					s2 = UNSAFE;
+				}
+
+			} else if (a1 < alpha && a1 < a2) {
+				// [ P1 = SAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = SAFE;
+				s2 = UNSAFE;
+				// Now check to see if is safe to mark P3 too.
+				if (a3 < alpha) {
+					// [ P1 = SAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+				}
+			} else if (a1 < alpha && a1 > a2) {
+				// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+				// SPECIAL CASE : Advance sliding window after P3
+				s1 = UNSAFE;
+				s2 = SAFE;
+				s3 = UNSAFE;
+				// Special case : set flag to advance sliding window after P3
+				flag = true;
+
+			} else if (a1 > alpha && a2 > alpha) {
+				// [ P1 = UNSAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = UNSAFE;
+				s2 = UNSAFE;
+			} 
+
+NOTE: A sliding window refers only to a selection of three consecutive points.
+ 
+
+**Down-sampling Utilities**
+
+
+   To reduce a data set, we run org.eclipse.stem.utility/src/generators/DownSampler.java. We need to specify two arguments : a threshold
+and the number of iterations. Internally, DownSampler will run both SinglePassDownSampler for the first run and the MultiPassDownSampler
+for the remaining iterations.
+
+   At each iteration, two files are generated : a reduced map and a reduced data file. The name of the reduced map tells us during which iteration
+it was generated. For example, for ARG_1_REDUCED_MAP_2.xml would tell us that this is a level 1 map for Argentina created during the second iteration.
+Similarly, ARG_REDUCED_2.txt is the reduced data file that was produced during the second iteration. ARG_REDUCED_2.txt will be the input data source for the
+down-sampling algorithm during the third iteration. What's more, ARG_1_REDUCED_MAP_2.xml can be regenerated from this file. For a threshold of five degrees and
+for five iterations, in the particular case of Austria we have that all the following files are generated :
+
+
+# Reduced maps :
+ AUT_1_REDUCED_MAP_1.xml
+ AUT_1_REDUCED_MAP_2.xml
+ AUT_1_REDUCED_MAP_3.xml
+ AUT_1_REDUCED_MAP_4.xml
+ AUT_1_REDUCED_MAP_5.xml
+	
+# Reduced data files :
+ AUT_REDUCED_1.txt
+ AUT_REDUCED_2.txt
+ AUT_REDUCED_3.txt
+ AUT_REDUCED_4.txt
+ AUT_REDUCED_5.txt
+ 
+ **Down-sampling statistics**
+ 
+    The following two metrics were considered when generating a reduced data set out of the Diva set : points-per-polygon and map file size. The results are
+captured in the following two tables :
+
+
+
+
+# REDUCTION METRIC : AVG POINTS-PER-POLYGON
+
+
+Threshold (in degrees)    Avg. points-per-polygon (after 5 iterations)         Percentage of reduction
+
+  INITIAL VALUE                  250								                      x
+      1                          179                                                     29%
+      2                          169                                                     32.40%
+      3						     164                                                     34.40%
+      4                          160                                                     36%
+      5                          157                                                     37.25%
+
+
+
+
+# REDUCTION METRIC : FILE SIZE 
+    
+ Threshold (in degrees)   Size (in KB, after 5 iterations)                      Percentage of reduction
+ 
+    ORIGINAL SIZE               USA_1_MAP.xml = 2987                                        x
+    							USA_2_MAP.xml = 17266										x
+ 
+ 							    USA_1_MAP.xml = 2216   										26%
+                                USA_2_MAP.xml = 14259										16%
+    
+  							    USA_1_MAP.xml = 1742   										42%
+                                USA_2_MAP.xml = 12091										30%
+ 
+  							    USA_1_MAP.xml = 1689   										44.50%
+                                USA_2_MAP.xml = 11720										32%
+ 
+  							    USA_1_MAP.xml = 1649   										45%
+                                USA_2_MAP.xml = 11464										33.70%
+ 
+  							    USA_1_MAP.xml = 1607   										46.30%
+                                USA_2_MAP.xml = 11239										35%
+    
+    
+    
+    We see that by running the down-sampling utility we get a reduction of around 37.25% in the average number of points-per-polygon, a 
+reduction of 46.30% on the level 1 map and a reduction of 35% on the level 2 map. The average reduction of both maps combined is approx 41%.
+    
+    
+**Reduction in Precision**
+
+    We come close to achieving a 50% reduction in file size by decreasing the precision on the reduced data files from six decimal digits to four.
+    
+    
+    
+    
+	
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/docs/STEMIIDataSources.txt b/org.eclipse.stem.utility/docs/STEMIIDataSources.txt
new file mode 100644
index 0000000..b0f45ef
--- /dev/null
+++ b/org.eclipse.stem.utility/docs/STEMIIDataSources.txt
@@ -0,0 +1,155 @@
+
+
+STEM II Data Sources
+
+Feb - 07 - 2007
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+     There where three major data sources of GIS data for STEM II : U.S. Census Bureau, Diva-GIS and the United Nations Global Resource Information Database (GRID) - Europe. The difference among these data
+sources is that the Diva-GIS data set DOES NOT contain area or population data, whereas the data set for Europe from the UN-GRID already comes with both area and population data. Similarly, area and population
+data for the USA, Puerto Rico, Alaska and other U.S. Territories are provided by the U.S. Census Burea in separate files. Another difference
+is that the Diva-GIS provides data at administration levels 0, 1, and 2. On the other hand, all data from UN-GRID is only level 1. To be able to use the Diva-GIS data, we had to complement it by search both the
+area and population data for locations using a variety of online sources : CIA Factbook, City Population. All of the data was in the public domain.
+
+
+     The mapping of data sources to countries is as follows :
+
+	      U.S. Census Bureau : U.S.A. and Puerto Rico, Alaska, and  US Territories.
+
+	      United Nations Global Resource Information Database (UNGRID) : Europe and Russia.
+
+	      Diva - GIS : Rest of the World (Mexico, South America, Africa, Asia)
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+
+U.S. Census Bureau
+
+     GIS Data for the USA, Puerto Rico, Alaska and US Territories was downloaed from the U.S. Census Bureau web site. Area and population data was provided as well from the U.S. Census Burea site in the form
+of Excel spreahsheets.
+
+       URL :  http://www.census.gov/population/www/censusdata/density.html
+
+       Statement : "All US Census Bureau materials, regardless of the media, are entirely in the public domain. There are no user fees, site licenses, or any special agreements etc for the public or private use, and or 
+reuse of any census title. As tax funded product, it's all in the public record."
+
+       Contact : 
+
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+DIVA-GIS
+    
+    URL : http://www.diva-gis.org/data/DataServer.htm
+
+    License Statement :  "From this page you can download various thematic maps and/or geo-referenced databases. All these maps and databases are in the public domain. The data is either in
+shapefile or in gridfile format. Files have been compressed using the ZIP format. The data are not projected (i.e., in latitude/longitude). The maps appear as graphics files (GIF) that can be copied and
+pasted into another application."
+
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+CIA FACTBOOK
+
+    We got a few area and population data values from the CIA Factbook.
+
+     URL : https://www.cia.gov/cia/publications/factbook/index.html
+
+     Statement : "The World Factbook is in the public domain and may be used freely by anyone at anytime without seeking permission. However, US Code prohibits use of the CIA seal in a manner
+which implies that the CIA approved, endorsed, or authorized such use. If you have any questions about your intended use, you should consult with legal counsel. Further information on The World Factbook's 
+use is described on the Contributors and Copyright Information page. As a courtesy, please cite The World Factbook when used."
+
+     Contact :
+
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+CITY POPULATION
+
+     The second main source of area and population values was City Population.
+
+     URL : http://www.citypopulation.de/
+
+     Statement : "Please, reference data taken from these web pages as follows:
+Thomas Brinkhoff: City Population, http://www.citypopulation.de."
+
+     Contact : Thomas Brinkhoff :  mail@citypopulation.de 
+
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+ UNITED NATIONS GLOBAL RESOURCE INFORMATION DATABASE (GRID) - Europe
+
+      This is the main source of our data for Europe. It includes area and population for each location.
+
+      URL : http://www.grid.unep.ch/data/data.php?category=human_related
+
+      Statement : "Most of the UNEP/GRID data sets are freely available for download by users via the Internet. UNEP/GRID does not place any restrictions on the use of this data, but does request that users cite
+ UNEP/GRID (and any other sources mentioned in documentation of the data provided) as data furnisher(s). For data sets not available 'on-line', requests made by non-commercial and non-private persons (i.e. those
+ with no affiliation) will be filled at no cost, but will depend on data availability, UNEP/GRID workload and the nature of the data set being requested. Requests will be queued with priority given to those related to joint 
+activities with UNEP programme areas and other UN agencies. Data sets with a "restricted access" rating will not be distributed; however, information about such data sets, including the distributor's name, will be sent 
+to eligible organisations upon request.
+
+                          Users of data sets supplied through UNEP/GRID are requested to incorporate in output products and reports acknowledgements to the originator of the data and to the fact that they were acquired
+ through UNEP/GRID. Appropriate wording may be "UNESCO (1987) through UNEP/GRID-Europe" ".
+
+       Contact : infogrid@grid.unep.ch
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+OTHER (MINOR) SOURCES OF DATA : (mostly area and population data)
+
+   A few (one or two) area, population, and location names where taken for a few countries from other online sources :
+
+
+CHILE :
+
+URL : http://www.ine.cl/ine/canales/chile_estadistico/home.php
+URL : http://www.visitingchile.com/regiones/region-sur/region-bio-bio/provincia-arauco/provincia-arauco.php
+URL : http://www.ine.cl/ine/canales/chile_estadistico/demografia_y_vitales/demografia/demografia.php
+
+
+BRAZIL : 
+
+
+URL : http://www.library.uu.nl/wesp/populstat/Americas/brazilt.htm
+URL : http://www.ibge.gov.br/english/default.php
+URL : http://www.goldfields.co.za/Investor/Annual_Reports/Fy_2003/gf_ar03/sd_03/story/study_6.htm
+
+
+CHAD :
+
+URL : http://www.inseed-tchad.org/
+
+COLOMBIA :
+
+URL : https://www.cia.gov/library/publications/the-world-factbook/
+
+
+INSONESIA :
+
+URL : http://www.bps.go.id/index.shtml
+
+KAZHAKSTAN :
+
+URL : http://www.stat.kz/stat/index.aspx?sl=news&l=en
+
+LIBERIA :
+
+URL : http://www.statoids.com/ulr.html
+
+NAMIBIA :
+
+URL : http://www.library.uu.nl/wesp/populstat/Africa/namibiap.htm
+
+*******************************************************************************************************************************************************************************************************************************************************
+
+
+
+
+
+
+
+
+
diff --git a/org.eclipse.stem.utility/epl-v10.html b/org.eclipse.stem.utility/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.stem.utility/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/notice.html b/org.eclipse.stem.utility/notice.html
new file mode 100644
index 0000000..c6af966
--- /dev/null
+++ b/org.eclipse.stem.utility/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+   
+<h3>Applicable Licenses</h3>   
+   
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
+   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+   
+<ul>
+	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>   
+ 
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+	<li>The top-level (root) directory</li>
+	<li>Plug-in and Fragment directories</li>
+	<li>Inside Plug-ins and Fragments packaged as JARs</li>
+	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+	<li>Feature directories</li>
+</ul>
+		
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
+	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+   
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
+</body>
+</html>
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_AREA.txt
new file mode 100644
index 0000000..3baa3b8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_AREA.txt
@@ -0,0 +1,35 @@
+Afghanistan:0:652090
+BADAKHSHAN	:	1	:	44059.30
+BADGHIS	:	1	:	20590.60
+BAGHLAN [BAGHIAN]	:	1	:	21118.40
+BALKH	:	1	:	17248.50
+BAMIAN	:	1	:	14175.30
+DYKOND	:	1	:	0
+FARAH	:	1	:	48470.90
+FARYAB	:	1	:	20292.80
+GHAZNI [GHAZN]	:	1	:	22914.60
+GHOWR	:	1	:	36478.80
+HELMAND	:	1	:	58583.70
+HERAT	:	1	:	54778.00
+JOWZJAN	:	1	:	11798.30
+KABUL [KABOL]	:	1	:	4461.60
+KANDAHAR	:	1	:	54022.00
+KAPISA	:	1	:	1842.10
+KHOWST	:	1	:	4151.50
+KONAR [KUNAR]	:	1	:	4941.50
+KONDOZ [KUNDUZ] [KONDUZ]	:	1	:	8039.70
+LAGHMAN	:	1	:	3842.60
+LOWGAR	:	1	:	3879.80
+NANGRAHAR [NANGARHAR] [NANGARHA]	:	1	:	7727.40
+NIMRUZ	:	1	:	41005.40
+NRESTN	:	1	:	9225.00
+ORUZGAN [URUZGAN]	:	1	:	19482.40
+PAKTIA	:	1	:	6431.70
+PAKTIKA	:	1	:	0
+PANJSHR	:	1	:	9584.40
+PARWAN [PARVAN]	:	1	:	11261.90
+SAMANGAN	:	1	:	15999.20
+SAR E POL	:	1	:	12333.00
+TAKHAR	:	1	:	30784.50
+WARDAK [WARDAG] [VARDAK]	:	1	:	8938.10
+ZABOL [ZABUL]	:	1	:	17343.50
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_POPULATION.txt
new file mode 100644
index 0000000..ff97ef3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AFGHANISTAN_POPULATION.txt
@@ -0,0 +1,35 @@
+Afghanistan:0:29863000
+BADAKHSHAN	:	1	:	715000
+BADGHIS	:	1	:	301000
+BAGHLAN [BAGHIAN]	:	1	:	745000
+BALKH	:	1	:	869000
+BAMIAN	:	1	:	356000
+DYKOND	:	1	:	0 
+FARAH	:	1	:	338000
+FARYAB	:	1	:	782000
+GHAZNI [GHAZN]	:	1	:	931000
+GHOWR	:	1	:	485000
+HELMAND	:	1	:	745000
+HERAT	:	1	:	1182000
+JOWZJAN	:	1	:	441000
+KABUL [KABOL]	:	1	:	3314000
+KANDAHAR	:	1	:	886000
+KAPISA	:	1	:	360000
+KHOWST	:	1	:	300000
+KONAR [KUNAR]	:	1	:	321000
+KONDOZ [KUNDUZ] [KONDUZ]	:	1	:	820000
+LAGHMAN	:	1	:	373000
+LOWGAR	:	1	:	292000
+NANGRAHAR [NANGARHAR] [NANGARHA]	:	1	:	1089000
+NIMRUZ	:	1	:	149000
+NRESTN	:	1	:	112000
+ORUZGAN [URUZGAN]	:	1	:	352000
+PAKTIA	:	1	:	415000
+PAKTIKA	:	1	:	0 
+PANJSHR	:	1	:	726000
+PARWAN [PARVAN]	:	1	:	378000
+SAMANGAN	:	1	:	468000
+SAR E POL	:	1	:	750000
+TAKHAR	:	1	:	627000
+WARDAK [WARDAG] [VARDAK]	:	1	:	413000
+ZABOL [ZABUL]	:	1	:	258000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_AREA.txt
new file mode 100644
index 0000000..be9555c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_AREA.txt
@@ -0,0 +1 @@
+ Shqip‰ria : 1 : 28748.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_POPULATION.txt
new file mode 100644
index 0000000..12c728f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALBANIA_POPULATION.txt
@@ -0,0 +1 @@
+ Shqip‰ria : 1 : 3255891
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_AREA.txt
new file mode 100644
index 0000000..64fb72e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_AREA.txt
@@ -0,0 +1,51 @@
+ALGERIA	:	0	:	2381740
+El TARF : 1 : 3339
+ADRAR [ADRAR1]	:	1	:	464900
+AIN DAFLA	:	1	:	4260
+AIN TAMOUCHENT	:	1	:	2630
+ALGER	:	1	:	273
+ANNABA	:	1	:	1412
+BATNA	:	1	:	12028
+EL BAYADH	:	1	:	70539
+BECHAR	:	1	:	161400
+BEJAIA	:	1	:	3329
+BISKRA	:	1	:	21671
+BLIDA	:	1	:	1541
+BORJBOUARIREJ	:	1	:	3920
+BOUIRA	:	1	:	4517
+BOUMERDES	:	1	:	1558
+CHLEF	:	1	:	4651
+CONSTANTINE	:	1	:	2288
+DJELFA	:	1	:	29035
+GHARDAIA [GHARDASA] :	1	:	86105
+GUELMA	:	1	:	3911
+ILLIZI	:	1	:	284618
+JIJEL	:	1	:	2399
+KHENCHELA	:	1	:	9811
+LAGHOUAT	:	1	:	25052
+MASCARA	:	1	:	5962
+MEDIA	:	1	:	8700
+MILA	:	1	:	3408
+MOSTAGHANEM	:	1	:	2269
+MSILA	:	1	:	18447
+NAAMA	:	1	:	30644
+ORAN	:	1	:	2114
+OUARGLA	:	1	:	270030
+EL OUED	:	1	:	80000
+OUM EL BOUAGHI	:	1	:	7638
+RELIZANE	:	1	:	4840
+SAIDA	:	1	:	6631
+SETIF	:	1	:	6504
+SIDI BEL ABBES	:	1	:	9151
+SKIKDA	:	1	:	4137
+SOUK AHRAS	:	1	:	4360
+TAMANGHASSET	:	1	:	556000
+TAMANRASSET	:	1	:	2998
+TEBESSA	:	1	:	13878
+TENDOUF	:	1	:	20087
+TIARET	:	1	:	215
+TIPAZA	:	1	:	2219
+TISSEMSILT	:	1	:	3151
+TIZI OUZOU	:	1	:	2993
+TLEMCEN	:	1	:	9018
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_POPULATION.txt
new file mode 100644
index 0000000..29b1ae2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ALGERIA_POPULATION.txt
@@ -0,0 +1,51 @@
+ALGERIA	:	0	:	32930091
+El TARF : 1 : 352588
+ADRAR [ADRAR1]	:	1	:	311615
+AIN DAFLA	:	1	:	660342
+AIN TAMOUCHENT	:	1	:	327331
+ALGER	:	1	:	2562428
+ANNABA	:	1	:	557818
+BATNA	:	1	:	962623
+EL BAYADH	:	1	:	168789
+BECHAR	:	1	:	225546
+BEJAIA	:	1	:	856840
+BISKRA	:	1	:	575858
+BLIDA	:	1	:	784283
+BORJBOUARIREJ	:	1	:	555402
+BOUIRA	:	1	:	629560
+BOUMERDES	:	1	:	647389
+CHLEF	:	1	:	858695
+CONSTANTINE	:	1	:	810914
+DJELFA	:	1	:	797706
+GHARDAIA [GHARDASA]	:	1	:	300516
+GUELMA	:	1	:	430000
+ILLIZI	:	1	:	34108
+JIJEL	:	1	:	573208
+KHENCHELA	:	1	:	327917
+LAGHOUAT	:	1	:	317125
+MASCARA	:	1	:	676192
+MEDIA	:	1	:	802078
+MILA	:	1	:	674480
+MOSTAGHANEM	:	1	:	631057
+MSILA	:	1	:	805519
+NAAMA	:	1	:	127314
+ORAN	:	1	:	1213839
+OUARGLA	:	1	:	445619
+EL OUED	:	1	:	504401
+OUM EL BOUAGHI	:	1	:	519170
+RELIZANE	:	1	:	642205
+SAIDA	:	1	:	279526
+SETIF	:	1	:	1311413
+SIDI BEL ABBES	:	1	:	525632
+SKIKDA	:	1	:	786154
+SOUK AHRAS	:	1	:	367455
+TAMANGHASSET	:	1	:	137175
+TAMANRASSET	:	1	:	352588
+TEBESSA	:	1	:	549066
+TENDOUF	:	1	:	725853
+TIARET	:	1	:	27060
+TIPAZA	:	1	:	506053
+TISSEMSILT	:	1	:	264240
+TIZI OUZOU	:	1	:	1108708
+TLEMCEN	:	1	:	842053
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_AREA.txt
new file mode 100644
index 0000000..cedfa67
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_AREA.txt
@@ -0,0 +1 @@
+ Andorra : 1 : 1.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_POPULATION.txt
new file mode 100644
index 0000000..041c783
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANDORRA_POPULATION.txt
@@ -0,0 +1 @@
+ Andorra : 1 : 67313
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_AREA.txt
new file mode 100644
index 0000000..574a98d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_AREA.txt
@@ -0,0 +1,19 @@
+ANGOLA	:	0	:	1246700
+BENGO	:	1	:	33016
+BENGUELA	:	1	:	31780
+BIE	:	1	:	70314
+CABINDA	:	1	:	7270
+CUANDO CUBANGO	:	1	:	199049
+CUANZA NORTE	:	1	:	87342
+CUANZA SUL	:	1	:	34270
+CUNENE	:	1	:	75002
+HUAMBO	:	1	:	24110
+HUILA	:	1	:	55660
+LUANDA	:	1	:	2257
+LUNDA NORTE	:	1	:	103000
+LUNDA SUL	:	1	:	77637
+MALANJE	:	1	:	97602
+MOXICO	:	1	:	223023
+NAMIBE	:	1	:	58137
+UIGE	:	1	:	58698
+ZAIRE	:	1	:	40130
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_POPULATION.txt
new file mode 100644
index 0000000..9eba4b0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ANGOLA_POPULATION.txt
@@ -0,0 +1,19 @@
+ANGOLA	:	0	:	12127071
+BENGO	:	1	:	190000
+BENGUELA	:	1	:	718000
+BIE	:	1	:	1280000
+CABINDA	:	1	:	199000
+CUANDO CUBANGO	:	1	:	139000
+CUANZA NORTE	:	1	:	255000
+CUANZA SUL	:	1	:	1730000
+CUNENE	:	1	:	954000
+HUAMBO	:	1	:	440000
+HUILA	:	1	:	710000
+LUANDA	:	1	:	2022000
+LUNDA NORTE	:	1	:	320000
+LUNDA SUL	:	1	:	165000
+MALANJE	:	1	:	1020000
+MOXICO	:	1	:	360000
+NAMIBE	:	1	:	154000
+UIGE	:	1	:	985000
+ZAIRE	:	1	:	262000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_AREA.txt
new file mode 100644
index 0000000..a86f9cf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_AREA.txt
@@ -0,0 +1,25 @@
+Argentina	:	0	:	2766890
+ Buenos Aires  	:	1	:	307571
+Buenos Aires D.F.	:	1	:	200
+ Catamarca 	:	1	:	102602
+Chaco 	:	1	:	99633
+Chubut 	:	1	:	224686
+ Cordoba 	:	1	:	165321
+ Corrientes 	:	1	:	88199
+ Entre Rios 	:	1	:	78781
+ Formosa 	:	1	:	72066
+ Jujuy 	:	1	:	53219
+ La Pampa 	:	1	:	143440
+ La Rioja 	:	1	:	89680
+ Mendoza 	:	1	:	148827
+ Misiones 	:	1	:	29801
+Neuquen	:	1	:	94078
+ Rio Negro 	:	1	:	203013
+ Salta 	:	1	:	155488
+ San Juan 	:	1	:	89651
+ San Luis 	:	1	:	76748
+ Santa Cruz 	:	1	:	243943
+ Santa Fe 	:	1	:	133007
+ Santiago del Estero 	:	1	:	136351
+Tierra del Fuego 	:	1	:	21571
+ Tucuman	:	1	:	22524
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_POPULATION.txt
new file mode 100644
index 0000000..ee27038
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARGENTINA_POPULATION.txt
@@ -0,0 +1,26 @@
+Argentina	:	0	:	39921833
+ Buenos Aires  	:	1	:	13827203
+Buenos Aires D.F.	:	1	:	2776138
+ Catamarca 	:	1	:	334568
+Chaco 	:	1	:	984446
+Chubut 	:	1	:	413237
+ Cordoba 	:	1	:	3066801
+ Corrientes 	:	1	:	930991
+ Entre Rios 	:	1	:	1158147
+ Formosa 	:	1	:	486559
+ Jujuy 	:	1	:	611888
+ La Pampa 	:	1	:	299294
+ La Rioja 	:	1	:	289983
+ Mendoza 	:	1	:	1579651
+ Misiones 	:	1	:	965522
+Neuquen	:	1	:	474155
+ Rio Negro 	:	1	:	552822
+ Salta 	:	1	:	1079051
+ San Juan 	:	1	:	620023
+ San Luis 	:	1	:	367933
+ Santa Cruz 	:	1	:	196958
+ Santa Fe 	:	1	:	3000701
+ Santiago del Estero 	:	1	:	804457
+Tierra del Fuego 	:	1	:	101079
+ Tucuman	:	1	:	1338523
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_AREA.txt
new file mode 100644
index 0000000..3f87ece
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_AREA.txt
@@ -0,0 +1,12 @@
+Armenia	:	0	:	29800
+Aragatsotni	:	1	:	2753
+Ararati	:	1	:	2096
+Armaviri	:	1	:	1242
+Gegharkuniki	:	1	:	5348
+Kotayki	:	1	:	2089
+Lori	:	1	:	3789
+Shiraki	:	1	:	2681
+Syuniki	:	1	:	4506
+Tavushi	:	1	:	2704
+Vayots dzori	:	1	:	2308
+Armenia X Yerevan	:	1	:	227
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_POPULATION.txt
new file mode 100644
index 0000000..aa73dbf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ARMENIA_POPULATION.txt
@@ -0,0 +1,12 @@
+Armenia	:	0	:	2976372
+Aragatsotni	:	1	:	126278
+Ararati	:	1	:	252665
+Armaviri	:	1	:	255861
+Gegharkuniki	:	1	:	215371
+Kotayki	:	1	:	241337
+Lori	:	1	:	253351
+Shiraki	:	1	:	257242
+Syuniki	:	1	:	134061
+Tavushi	:	1	:	121963
+Vayots dzori	:	1	:	53230
+Armenia X Yerevan	:	1	:	1091235
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_AREA.txt
new file mode 100644
index 0000000..7dac45a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_AREA.txt
@@ -0,0 +1,12 @@
+AUSTRALIA : 0 : 7692030
+AUSTRALIA CAPITAL TERRITORY : 1 :	2360
+NEW SOUTH WALES : 1 : 800640
+NORTHERN TERRITORY : 1 : 1349130
+QUEENSLAND : 1 : 1730650
+SOUTH AUSTRALIA : 1 : 983480
+TASMANIA : 1 : 68400
+VICTORIA : 1 : 227420
+WESTERN AUSTRALIA : 1 : 2529880
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_POPULATION.txt
new file mode 100644
index 0000000..8b96667
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRALIA_POPULATION.txt
@@ -0,0 +1,13 @@
+AUSTRALIA : 0 : 20325926
+AUSTRALIA CAPITAL TERRITORY : 1 : 325161
+NEW SOUTH WALES : 1 : 6774249
+NORTHERN TERRITORY : 1 : 202793
+QUEENSLAND : 1 : 3963968
+SOUTH AUSTRALIA : 1 : 1542033
+TASMANIA : 1 : 485263
+VICTORIA : 1 : 5022346
+WESTERN AUSTRALIA : 1 : 2010113
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_AREA.txt
new file mode 100644
index 0000000..26c1234
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_AREA.txt
@@ -0,0 +1,9 @@
+ Nieder”sterreich : 1 : 19173.0
+ Ober”sterreich : 1 : 11979.0
+ Wien : 1 : 414.0
+ Burgenland : 1 : 3965.0
+ Salzburg : 1 : 7154.0
+ Steiermark : 1 : 16388.0
+ Tirol : 1 : 12648.0
+ Voralberg : 1 : 2601.0
+ K„rnten : 1 : 9533.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_POPULATION.txt
new file mode 100644
index 0000000..48271ba
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AUSTRIA_POPULATION.txt
@@ -0,0 +1,9 @@
+ Nieder”sterreich : 1 : 1445810
+ Ober”sterreich : 1 : 1329844
+ Wien : 1 : 1508120
+ Burgenland : 1 : 269717
+ Salzburg : 1 : 475766
+ Steiermark : 1 : 1187211
+ Tirol : 1 : 628770
+ Voralberg : 1 : 327784
+ K„rnten : 1 : 545226
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_AREA.txt
new file mode 100644
index 0000000..8e9186f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_AREA.txt
@@ -0,0 +1,80 @@
+Azerbaijan	:	0	:	86600
+Nagorno-Karabakh : 1 : 2700
+Azerbaydzhan Territor : 1 : 9000
+Xirdalan  	:	1	:	1360
+Agdash 	:	1	:	1050
+Agdjabadi 	:	1	:	1760
+Alibakhli 	:	1	:	1150
+Agstafa 	:	1	:	1500
+Aghsu 	:	1	:	1020
+Ali Bayramli City t.d. 	:	1	:	30
+Astara 	:	1	:	620
+Baku City 	:	1	:	2130
+Balakan 	:	1	:	920
+Barda 	:	1	:	960
+Beylagan 	:	1	:	1130
+Bilasuvar 	:	1	:	1400
+Dashkasan 	:	1	:	1050
+Davachi 	:	1	:	1090
+Alkhanli 	:	1	:	1390
+Gabala 	:	1	:	1550
+Gadabay 	:	1	:	1290
+Gakh 	:	1	:	1490
+Ganja City t.d. 	:	1	:	110
+Gazakh 	:	1	:	700
+Maraza 	:	1	:	1370
+Goranboy 	:	1	:	1790
+Goychay 	:	1	:	740
+Guba 	:	1	:	2580
+Gubadly rayon 	:	1	:	800
+Gusar 	:	1	:	1540
+Hajigabul 	:	1	:	1640
+Imishli 	:	1	:	1820
+Ismayilly 	:	1	:	2060
+Jabrail rayon 	:	1	:	1050
+Jalilabad 	:	1	:	1440
+Kalbajar 	:	1	:	3050
+Khachmaz 	:	1	:	1050
+Khankendi City t.d. 	:	1	:	8
+Khanlar 	:	1	:	1030
+Khojaly rayon 	:	1	:	940
+Khojavand rayon 	:	1	:	1460
+Khyzi 	:	1	:	1850
+Kurdamir 	:	1	:	1630
+Lachin rayon 	:	1	:	1840
+Lankaran 	:	1	:	1540
+Lerik 	:	1	:	1080
+Masally 	:	1	:	720
+Mingechevir City 	:	1	:	130
+Naftalan City 	:	1	:	2
+Nakhichevan 	:	1	:	5500
+Nakhchevan City 	:	1	:	130
+Babek 	:	1	:	1170
+Julfa 	:	1	:	1000
+Givrahk 	:	1	:	682
+Ordubad 	:	1	:	970
+Heydarabad 	:	1	:	150
+Shahbuz 	:	1	:	920
+Sharur 	:	1	:	478
+Neftchala 	:	1	:	1450
+Oguz 	:	1	:	1220
+Saatly 	:	1	:	1180
+Sabirabad 	:	1	:	1470
+Salyan 	:	1	:	1790
+Nabiagali 	:	1	:	1450
+Shaki 	:	1	:	2430
+Shamakhy 	:	1	:	1610
+Shamkir 	:	1	:	1660
+Shusha rayon 	:	1	:	290
+Siyazan 	:	1	:	700
+Sumgait City t.d. 	:	1	:	80
+Tartar 	:	1	:	960
+Tovuz 	:	1	:	1900
+Ujar 	:	1	:	850
+Yardimly 	:	1	:	670
+Yevlakh 	:	1	:	1540
+Zagatala 	:	1	:	1350
+Zangilan rayon 	:	1	:	710
+Zardab 	:	1	:	860
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_POPULATION.txt
new file mode 100644
index 0000000..0bed2c5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/AZERBAIJAN_POPULATION.txt
@@ -0,0 +1,78 @@
+Azerbaijan	:	0	:	7961619
+Nagorno-Karabakh : 1 : 146000
+Azerbaydzhan Territor : 1 : 700000 
+Xirdalan  	:	1	:	91600
+Agdash 	:	1	:	94400
+Agdjabadi 	:	1	:	114100
+Alibakhli 	:	1	:	165000
+Agstafa 	:	1	:	76700
+Aghsu 	:	1	:	66700
+Ali Bayramli City t.d. 	:	1	:	72800
+Astara 	:	1	:	90900
+Baku City 	:	1	:	1855300
+Balakan 	:	1	:	86500
+Barda 	:	1	:	136600
+Beylagan 	:	1	:	81900
+Bilasuvar 	:	1	:	81300
+Dashkasan 	:	1	:	31900
+Davachi 	:	1	:	48600
+Alkhanli 	:	1	:	145300
+Gabala 	:	1	:	89200
+Gadabay 	:	1	:	90100
+Gakh 	:	1	:	53400
+Ganja City t.d. 	:	1	:	304500
+Gazakh 	:	1	:	84500
+Maraza 	:	1	:	37400
+Goranboy 	:	1	:	91100
+Goychay 	:	1	:	105300
+Guba 	:	1	:	143800
+Gubadly rayon 	:	1	:	35100
+Gusar 	:	1	:	84600
+Hajigabul 	:	1	:	61400
+Imishli 	:	1	:	109100
+Ismayilly 	:	1	:	76300
+Jabrail rayon 	:	1	:	65400
+Jalilabad 	:	1	:	182100
+Kalbajar 	:	1	:	72200
+Khachmaz 	:	1	:	152800
+Khankendi City t.d. 	:	1	:	54700
+Khanlar 	:	1	:	55100
+Khojaly rayon 	:	1	:	24800
+Khojavand rayon 	:	1	:	40600
+Khyzi 	:	1	:	13900
+Kurdamir 	:	1	:	98400
+Lachin rayon 	:	1	:	68100
+Lankaran 	:	1	:	197900
+Lerik 	:	1	:	69600
+Masally 	:	1	:	184900
+Mingechevir City 	:	1	:	95300
+Naftalan City 	:	1	:	7500
+Nakhichevan 	:	1	:	372900
+Nakhchivan City 	:	1	:	70000
+Babek 	:	1	:	66000
+Julfa 	:	1	:	38300
+Givrahk 	:	1	:	25500
+Ordubad 	:	1	:	42700
+Heydarabad 	:	1	:	12900
+Shahbuz 	:	1	:	21500
+Sharur 	:	1	:	96000
+Neftchala 	:	1	:	75500
+Oguz 	:	1	:	38800
+Saatly 	:	1	:	87500
+Sabirabad 	:	1	:	143800
+Salyan 	:	1	:	117400
+Nabiagali 	:	1	:	50900
+Shaki 	:	1	:	164700
+Shamakhy 	:	1	:	86000
+Shamkir 	:	1	:	181400
+Shusha rayon 	:	1	:	26000
+Siyazan 	:	1	:	35800
+Sumgait City t.d. 	:	1	:	292500
+Tartar 	:	1	:	95500
+Tovuz 	:	1	:	150300
+Ujar 	:	1	:	74700
+Yardimly 	:	1	:	54300
+Yevlakh 	:	1	:	112700
+Zagatala 	:	1	:	111500
+Zangilan rayon 	:	1	:	37100
+Zardab 	:	1	:	49300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_AREA.txt
new file mode 100644
index 0000000..5806b3b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_AREA.txt
@@ -0,0 +1,17 @@
+Bahrain	:	0	:	655
+Bahrain : 1 : 665
+Central Region  	:	1	:	35.42
+Hamad Town 	:	1	:	13.12
+Hidd 	:	1	:	13.73
+Isa Town 	:	1	:	12.43
+Jidhafs 	:	1	:	24.33
+Manama 	:	1	:	27.48
+Muharraq 	:	1	:	24.31
+Northern Region 	:	1	:	37.43
+Riffa 	:	1	:	292.5
+Sitra 	:	1	:	30.1
+Southern Region 	:	1	:	52.09
+Western Region 	:	1	:	157.2
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_POPULATION.txt
new file mode 100644
index 0000000..0652f85
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BAHRAIN_POPULATION.txt
@@ -0,0 +1,14 @@
+Bahrain	:	0	:	698585
+Bahrain : 1 : 698585
+Central Region  	:	1	:	49969
+Hamad Town 	:	1	:	52718
+Hidd 	:	1	:	11637
+Isa Town 	:	1	:	36833
+Jidhafs 	:	1	:	52450
+Manama 	:	1	:	153395
+Muharraq 	:	1	:	91939
+Northern Region 	:	1	:	43691
+Riffa 	:	1	:	79985
+Sitra 	:	1	:	43910
+Southern Region 	:	1	:	3875
+Western Region 	:	1	:	26149
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_AREA.txt
new file mode 100644
index 0000000..59aa237
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_AREA.txt
@@ -0,0 +1,71 @@
+Bangladesh	:	0	:	144000
+Barisal Div	:	1	:	13297
+Barguna ZL	:	1	:	1832
+Barisal ZL	:	1	:	2791
+Bhola ZL	:	1	:	3403
+Jhalakhati 	:	1	:	758
+Patuakhali 	:	1	:	3205
+Pirojpur 	:	1	:	1308
+Chittagong Div	:	1	:	33771
+Bandarban ZL	:	1	:	4479
+Brahmanbaria 	:	1	:	1927
+Chandpur ZL	:	1	:	1704
+Chittagong ZL	:	1	:	5283
+Comilla 	:	1	:	3085
+Cox Bazar 	:	1	:	2492
+Feni ZL	:	1	:	928
+Khagrachhari ZL	:	1	:	2700
+Laksmipur 	:	1	:	1456
+Noakhali ZL	:	1	:	3601
+Rangamati ZL	:	1	:	6116
+Dhaka ZILA	:	1	:	31119
+Dhaka Div	:	1	:	1464
+Faridpur ZL	:	1	:	2073
+Gazipur ZL	:	1	:	1741
+Gopalganj 	:	1	:	1490
+Jamalpur ZL	:	1	:	2032
+Kishoreganj ZL	:	1	:	2689
+Madaripur ZL	:	1	:	1145
+Manikganj ZL	:	1	:	1379
+Munshiganj ZL	:	1	:	955
+Mymensingh ZL	:	1	:	4363
+Narayanganj ZL	:	1	:	759
+Narsingdi ZL	:	1	:	1141
+Netrokona ZL	:	1	:	2810
+Rajbari ZL	:	1	:	1119
+Shariatpur 	:	1	:	1181
+Sherpur 	:	1	:	1364
+Tangail 	:	1	:	3414
+Khulna 	:	1	:	22274
+Bagerhat 	:	1	:	3959
+Chuadanga 	:	1	:	1158
+Jessore 	:	1	:	2567
+Jhenaidah 	:	1	:	1961
+Khulna Div	:	1	:	4395
+Kushtia 	:	1	:	1621
+Magura 	:	1	:	1049
+Meherpur 	:	1	:	716
+Narail 	:	1	:	990
+Satkhira 	:	1	:	3858
+Rajshahi 	:	1	:	34513
+Bogra 	:	1	:	2920
+Dinajpur 	:	1	:	3438
+Gaibandha 	:	1	:	2179
+Joypurhat 	:	1	:	965
+Kurigram 	:	1	:	2296
+Lalmonirhat 	:	1	:	1242
+Naogaon 	:	1	:	3436
+Natore 	:	1	:	1896
+Nawabganj 	:	1	:	1702
+Nilphamari 	:	1	:	1641
+Pabna 	:	1	:	2371
+Panchagarh 	:	1	:	1405
+Rajshahi Div	:	1	:	2407
+Rangpur 	:	1	:	2306
+Sirajganj 	:	1	:	2498
+Thakurgaon 	:	1	:	1809
+Sylhet 	:	1	:	12596
+Habiganj 	:	1	:	2637
+Moulvibazar 	:	1	:	2799
+Sunamganj 	:	1	:	3670
+Sylhet 	:	1	:	3490
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_POPULATION.txt
new file mode 100644
index 0000000..8fa9216
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BANGLADESH_POPULATION.txt
@@ -0,0 +1,71 @@
+Bangladesh	:	0	:	147365352
+Barisal Div	:	1	:	8112435
+Barguna ZL	:	1	:	837955
+Barisal ZL	:	1	:	2330960
+Bhola ZL	:	1	:	1676600
+Jhalakhati 	:	1	:	696055
+Patuakhali 	:	1	:	1444340
+Pirojpur 	:	1	:	1126525
+Chittagong Div	:	1	:	23999345
+Bandarban ZL	:	1	:	292900
+Brahmanbaria 	:	1	:	2365880
+Chandpur ZL	:	1	:	2210162
+Chittagong ZL	:	1	:	6545078
+Comilla 	:	1	:	4586879
+Cox Bazar 	:	1	:	1757321
+Feni ZL	:	1	:	1196219
+Khagrachhari ZL	:	1	:	524961
+Laksmipur 	:	1	:	1479371
+Noakhali ZL	:	1	:	2533394
+Rangamati ZL	:	1	:	507180
+Dhaka ZILA	:	1	:	38677876
+Dhaka Div	:	1	:	8575533
+Faridpur ZL	:	1	:	1719496
+Gazipur ZL	:	1	:	2026244
+Gopalganj 	:	1	:	1132046
+Jamalpur ZL	:	1	:	2089366
+Kishoreganj ZL	:	1	:	2525221
+Madaripur ZL	:	1	:	1137008
+Manikganj ZL	:	1	:	1274829
+Munshiganj ZL	:	1	:	1293536
+Mymensingh ZL	:	1	:	4439017
+Narayanganj ZL	:	1	:	2138492
+Narsingdi ZL	:	1	:	1891281
+Netrokona ZL	:	1	:	1937794
+Rajbari ZL	:	1	:	940360
+Shariatpur 	:	1	:	1057181
+Sherpur 	:	1	:	1246511
+Tangail 	:	1	:	3253961
+Khulna Div	:	1	:	14468819
+Bagerhat 	:	1	:	1515815
+Chuadanga 	:	1	:	987382
+Jessore 	:	1	:	2440693
+Jhenaidah 	:	1	:	1554514
+Khulna 	:	1	:	2334285
+Kushtia 	:	1	:	1713224
+Magura 	:	1	:	811160
+Meherpur 	:	1	:	579531
+Narail 	:	1	:	689021
+Satkhira 	:	1	:	1843194
+Rajshahi 	:	1	:	29992955
+Bogra 	:	1	:	2988567
+Dinajpur 	:	1	:	2617942
+Gaibandha 	:	1	:	2117959
+Joypurhat 	:	1	:	844814
+Kurigram 	:	1	:	1782277
+Lalmonirhat 	:	1	:	1088918
+Naogaon 	:	1	:	2377314
+Natore 	:	1	:	1521359
+Nawabganj 	:	1	:	1419536
+Nilphamari 	:	1	:	1550686
+Pabna 	:	1	:	2153921
+Panchagarh 	:	1	:	829374
+Rajshahi Div	:	1	:	2262483
+Rangpur 	:	1	:	2534365
+Sirajganj 	:	1	:	2707011
+Thakurgaon 	:	1	:	1196429
+Sylhet 	:	1	:	7899816
+Habiganj 	:	1	:	1757331
+Moulvibazar 	:	1	:	1604028
+Sunamganj 	:	1	:	1968669
+Sylhet 	:	1	:	2569788
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_AREA.txt
new file mode 100644
index 0000000..14d40e2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_AREA.txt
@@ -0,0 +1 @@
+BELARUS : 0 : 207600
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_POPULATION.txt
new file mode 100644
index 0000000..0ff317b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELARUS_POPULATION.txt
@@ -0,0 +1,2 @@
+BELARUS : 0 : 9750500
+ 
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_AREA.txt
new file mode 100644
index 0000000..304f035
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_AREA.txt
@@ -0,0 +1,12 @@
+ BELGIUM : 0 : 30528.0
+ ANTWERPEN : 1 : 2867.0
+ WEST-VLAANDEREN : 1 : 3134.0
+ OOST-VLAANDEREN : 1 : 2982.0
+ LIMBURG : 1 : 2422.0
+ UNKNOWN : 1 : 1.0
+ BRUXELLES-BRUSSEL : 1 : 161.0
+ LIEGE : 1 : 3862.0
+ HAINAUT : 1 : 3785.0
+ NIVELLES : 1 : 1091.0
+ NAMUR : 1 : 3666.0
+ LUXEMBOURG : 1 : 4439.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_POPULATION.txt
new file mode 100644
index 0000000..eae7a6a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELGIUM_POPULATION.txt
@@ -0,0 +1,11 @@
+ ANTWERPEN : 1 : 1604600
+ WEST-VLAANDEREN : 1 : 1335700
+ OOST-VLAANDEREN : 1 : 1331600
+ LIMBURG : 1 : 1109800
+ UNKNOWN : 1 : 0
+ BRUXELLES-BRUSSEL : 1 : 964400
+ LIEGE : 1 : 1000700
+ HAINAUT : 1 : 1280300
+ NIVELLES : 1 : 24290 
+ NAMUR : 1 : 423700
+ LUXEMBOURG : 1 : 378400
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_AREA.txt
new file mode 100644
index 0000000..c573960
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_AREA.txt
@@ -0,0 +1 @@
+BELIZE : 0 : 22964
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_POPULATION.txt
new file mode 100644
index 0000000..cd6f083
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BELIZE_POPULATION.txt
@@ -0,0 +1 @@
+BELIZE : 0 : 291800
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_AREA.txt
new file mode 100644
index 0000000..9970728
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_AREA.txt
@@ -0,0 +1,14 @@
+Benin	:	0	:	112620
+ Alibori  	:	1	:	26303
+ Atacora [Atakora]	:	1	:	23847
+ Atlantique 	:	1	:	3239
+ Borgou 	:	1	:	25310
+ Collines 	:	1	:	13858
+ Donga 	:	1	:	11166
+ Littoral 	:	1	:	79
+ Mono 	:	1	:	1587
+ Oueme 	:	1	:	1676
+ Plateau 	:	1	:	3807
+ Zou 	:	1	:	5667
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_POPULATION.txt
new file mode 100644
index 0000000..9d6c5b6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BENIN_POPULATION.txt
@@ -0,0 +1,12 @@
+Benin	:	0	:	7862944
+ Alibori  	:	1	:	521093
+ Atacora [Atakora]	:	1	:	549417
+ Atlantique 	:	1	:	801683
+ Borgou 	:	1	:	724171
+ Collines 	:	1	:	535923
+ Donga 	:	1	:	350062
+ Littoral 	:	1	:	665100
+ Mono 	:	1	:	360037
+ Oueme 	:	1	:	730772
+ Plateau 	:	1	:	407116
+ Zou 	:	1	:	599954
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_AREA.txt
new file mode 100644
index 0000000..1b668a6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_AREA.txt
@@ -0,0 +1,21 @@
+Bhutan	:	0	:	47000
+Bumthang  	:	1	:	2990
+Chukha 	:	1	:	2390
+Dagana [Daga]	:	1	:	1400
+Gasa 	:	1	:	4910
+Sarpang [Gaylegphug (Sarbhang)]	:	1	:	1884
+Haa 	:	1	:	1704
+Lhuntshi 	:	1	:	2910
+Mongar 	:	1	:	1830
+Paro 	:	1	:	1281
+Pema gatshel 	:	1	:	380
+Punakha 	:	1	:	6040
+Samdrup Jongkhar 	:	1	:	2340
+Samtse [Samchi]	:	1	:	1576
+Thimphu 	:	1	:	1819
+Trashigang [Tashigang]	:	1	:	3156
+Trashiyangtse 	:	1	:	0
+Trongsa [Tongsa]	:	1	:	1805
+Tsirang [Chirang]	:	1	:	640
+Wangdue Phodrang [Wangdiphodrang]	:	1	:	3000
+Zhemgang [Shengang]	:	1	:	1817
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_POPULATION.txt
new file mode 100644
index 0000000..72306ef
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BHUTAN_POPULATION.txt
@@ -0,0 +1,21 @@
+Bhutan	:	0	:	2279723
+Bumthang  	:	1	:	23842
+Chukha 	:	1	:	74387
+Dagana [Daga]	:	1	:	28352
+Gasa 	:	1	:	16907
+Sarpang [Gaylegphug (Sarbhang)]	:	1	:	111283
+Haa 	:	1	:	16715
+Lhuntshi 	:	1	:	39635
+Mongar 	:	1	:	73239
+Paro 	:	1	:	46615
+Pema gatshel 	:	1	:	37141
+Punakha 	:	1	:	16700
+Samdrup Jongkhar 	:	1	:	73044
+Samtse [Samchi]	:	1	:	172109
+Thimphu 	:	1	:	58660
+Trashigang [Tashigang] 	:	1	:	177718
+Trashiyangtse 	:	1	:	0
+Trongsa [Tongsa]	:	1	:	26017
+Tsirang  [Chirang]	:	1	:	108807
+Wangdue Phodrang [Wangdiphodrang]	:	1	:	47152
+Zhemgang [Shengang]	:	1	:	44516
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_AREA.txt
new file mode 100644
index 0000000..cdaada3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_AREA.txt
@@ -0,0 +1,126 @@
+Bolivia	:	0	:	1098580
+Beni : 1 : 213564 
+Chuquisaca : 1 : 51524
+Pando : 1 : 63827
+La Paz  	:	1	:	133985
+Palca 	:	1	:	0
+Achacachi 	:	1	:	0
+Corocoro 	:	1	:	0
+Puerto Acosta 	:	1	:	0
+Chuma 	:	1	:	0
+Sorata 	:	1	:	0
+Apolo 	:	1	:	0
+Viacha 	:	1	:	0
+Luribay 	:	1	:	0
+Inquisivi 	:	1	:	0
+Chulumani 	:	1	:	0
+Pucarani 	:	1	:	0
+Villa Aroma 	:	1	:	0
+Coroico 	:	1	:	0
+Ixiamas 	:	1	:	0
+Villa General Perez 	:	1	:	0
+Copacabana 	:	1	:	0
+San Pedro de Curahuara 	:	1	:	0
+Santiago de Machaca 	:	1	:	0
+Caranavi 	:	1	:	0
+Oruro 	:	1	:	53588
+Oruro 	:	1	:	0
+Challapata 	:	1	:	0
+Corque 	:	1	:	0
+Ciudad de Carangas 	:	1	:	0
+Huachacalla 	:	1	:	0
+Poopó 	:	1	:	0
+Huanuni 	:	1	:	0
+Salinas de G. M. 	:	1	:	0
+Sabaya 	:	1	:	0
+Toledo 	:	1	:	0
+Eucaliptus 	:	1	:	0
+Andamarca 	:	1	:	0
+Totora 	:	1	:	0
+Santiago de H. 	:	1	:	0
+La Rivera 	:	1	:	0
+Huayllamarca 	:	1	:	0
+Potosi 	:	1	:	118218
+Uncia 	:	1	:	0
+Betanzos 	:	1	:	0
+Colquechaqua 	:	1	:	0
+San Pedro 	:	1	:	0
+Cotagaita 	:	1	:	0
+Sacaca 	:	1	:	0
+Tupini 	:	1	:	0
+Colcha 	:	1	:	0
+San Pablo de Lípez 	:	1	:	0
+Puna 	:	1	:	0
+Uyuni 	:	1	:	0
+Arampampa 	:	1	:	0
+Llica 	:	1	:	0
+Villazon 	:	1	:	0
+San Agustin 	:	1	:	0
+Santa Cruz [Santa Cruz de la Sierra] 	:	1	:	370621
+Andres Ibanez	:	1	:	0
+Warnes 	:	1	:	0
+San Ignacio 	:	1	:	0
+Buena Vista 	:	1	:	0
+San Jose 	:	1	:	0
+Portachuelo 	:	1	:	0
+Lagunillas 	:	1	:	0
+Vallegrande 	:	1	:	0
+Samaipata 	:	1	:	0
+Montero 	:	1	:	0
+Concepción 	:	1	:	0
+San Matias 	:	1	:	0
+Comarapa 	:	1	:	0
+Puerto Suarez 	:	1	:	0
+Ascencion de Guarayos 	:	1	:	0
+Trinidad 	:	1	:	213564
+Trinidad de Mojos 	:	1	:	0
+Riberalta 	:	1	:	0
+Reyes 	:	1	:	0
+Santa Ana 	:	1	:	0
+San Ignacio 	:	1	:	0
+Loreto 	:	1	:	0
+San Joaquin 	:	1	:	0
+Magdalena 	:	1	:	0
+Cobija 	:	1	:	63827
+Cobija 	:	1	:	0
+Puerto Rico 	:	1	:	0
+Puerto G. M. 	:	1	:	0
+Santa Rosa del Abuná 	:	1	:	0
+Nueva Esperanza 	:	1	:	0
+Sucre 	:	1	:	51524
+Sucre 	:	1	:	0
+Azurduy 	:	1	:	0
+Villa Zudañez 	:	1	:	0
+Padilla 	:	1	:	0
+Monteagudo 	:	1	:	0
+Tarabuco 	:	1	:	0
+Camargo 	:	1	:	0
+Villa Serrano 	:	1	:	0
+Camataqui 	:	1	:	0
+Villa Vittorio Guzman 	:	1	:	0
+Cochabamba 	:	1	:	55631
+Cochabamba 	:	1	:	0
+Aiquile 	:	1	:	0
+Independencia 	:	1	:	0
+Tarata 	:	1	:	0
+Arani 	:	1	:	0
+Arque 	:	1	:	0
+Capinota 	:	1	:	0
+Cliza 	:	1	:	0
+Quillacollo 	:	1	:	0
+Sacaba 	:	1	:	0
+Tapacarí 	:	1	:	0
+Totora 	:	1	:	0
+Mizque 	:	1	:	0
+Punata 	:	1	:	0
+Bolívar 	:	1	:	0
+Tiraque 	:	1	:	0
+Tarija 	:	1	:	37623
+Tarija 	:	1	:	0
+Padcaya 	:	1	:	0
+Yacuiba 	:	1	:	0
+Uriondo 	:	1	:	0
+San Lorenzo 	:	1	:	0
+Entre Rios 	:	1	:	0
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_POPULATION.txt
new file mode 100644
index 0000000..7ffde4c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOLIVIA_POPULATION.txt
@@ -0,0 +1,125 @@
+Bolivia	:	0	:	8989046
+Beni : 1 : 414800
+Chuquisaca : 1 : 611700
+Pando : 1 : 69500
+La Paz  	:	1	:	2630381
+Palca 	:	1	:	1683920
+Achacachi 	:	1	:	93374
+Corocoro 	:	1	:	53113
+Puerto Acosta 	:	1	:	61081
+Chuma 	:	1	:	29698
+Sorata 	:	1	:	69295
+Apolo 	:	1	:	19220
+Viacha 	:	1	:	106874
+Luribay 	:	1	:	48607
+Inquisivi 	:	1	:	62030
+Chulumani 	:	1	:	70660
+Pucarani 	:	1	:	74693
+Villa Aroma 	:	1	:	99162
+Coroico 	:	1	:	25759
+Ixiamas 	:	1	:	14060
+Villa General Perez 	:	1	:	12437
+Copacabana 	:	1	:	24502
+San Pedro de Curahuara 	:	1	:	18622
+Santiago de Machaca 	:	1	:	7107
+Caranavi 	:	1	:	56167
+Oruro 	:	1	:	433481
+Oruro 	:	1	:	262847
+Challapata 	:	1	:	30890
+Corque 	:	1	:	12246
+Ciudad de Carangas 	:	1	:	9995
+Huachacalla 	:	1	:	6509
+Poopó 	:	1	:	14589
+Huanuni 	:	1	:	23946
+Salinas de G. M. 	:	1	:	14706
+Sabaya 	:	1	:	9794
+Toledo 	:	1	:	9245
+Eucaliptus 	:	1	:	5812
+Andamarca 	:	1	:	7576
+Totora 	:	1	:	5570
+Santiago de H. 	:	1	:	11939
+La Rivera 	:	1	:	1382
+Huayllamarca 	:	1	:	6435
+Potosí 	:	1	:	768203
+Potosi 	:	1	:	198163
+Uncia 	:	1	:	78674
+Betanzos 	:	1	:	63799
+Colquechaqua 	:	1	:	102198
+San Pedro 	:	1	:	43084
+Cotagaita 	:	1	:	35534
+Sacaca 	:	1	:	30879
+Tupini 	:	1	:	47961
+Colcha 	:	1	:	11943
+San Pablo de Lípez 	:	1	:	5458
+Puna 	:	1	:	52946
+Uyuni 	:	1	:	39115
+Arampampa 	:	1	:	11294
+Llica 	:	1	:	5469
+Villazon 	:	1	:	39815
+San Agustin 	:	1	:	1871
+Santa Cruz [Santa Cruz de la Sierra] 	:	1	:	2388799
+Andres Ibanez	:	1	:	1526187
+Warnes 	:	1	:	60705
+San Ignacio 	:	1	:	63312
+Buena Vista 	:	1	:	81118
+San Jose 	:	1	:	68445
+Portachuelo 	:	1	:	41511
+Lagunillas 	:	1	:	107215
+Vallegrande 	:	1	:	27870
+Samaipata 	:	1	:	29519
+Montero 	:	1	:	161307
+Concepción 	:	1	:	111813
+San Matias 	:	1	:	14135
+Comarapa 	:	1	:	21798
+Puerto Suarez 	:	1	:	36589
+Ascencion de Guarayos 	:	1	:	37275
+Trinidad 	:	1	:	406982
+Trinidad de Mojos 	:	1	:	92553
+Riberalta 	:	1	:	132974
+Reyes 	:	1	:	79318
+Santa Ana 	:	1	:	29251
+San Ignacio 	:	1	:	23608
+Loreto 	:	1	:	15658
+San Joaquin 	:	1	:	13534
+Magdalena 	:	1	:	20086
+Cobija 	:	1	:	66689
+Cobija 	:	1	:	39577
+Puerto Rico 	:	1	:	9505
+Puerto G. M. 	:	1	:	11220
+Santa Rosa del Abuná 	:	1	:	3475
+Nueva Esperanza 	:	1	:	2912
+Sucre 	:	1	:	601823
+Sucre 	:	1	:	289749
+Azurduy 	:	1	:	29397
+Villa Zudañez 	:	1	:	36468
+Padilla 	:	1	:	40462
+Monteagudo 	:	1	:	39094
+Tarabuco 	:	1	:	30472
+Camargo 	:	1	:	74949
+Villa Serrano 	:	1	:	12808
+Camataqui 	:	1	:	25244
+Villa Vittorio Guzman 	:	1	:	23180
+Cochabamba 	:	1	:	1671860
+Cochabamba 	:	1	:	578219
+Aiquile 	:	1	:	40986
+Independencia 	:	1	:	65104
+Tarata 	:	1	:	33740
+Arani 	:	1	:	25009
+Arque 	:	1	:	26564
+Capinota 	:	1	:	26725
+Cliza 	:	1	:	34426
+Quillacollo 	:	1	:	313204
+Sacaba 	:	1	:	221119
+Tapacarí 	:	1	:	29937
+Totora 	:	1	:	139917
+Mizque 	:	1	:	41062
+Punata 	:	1	:	48864
+Bolívar 	:	1	:	9563
+Tiraque 	:	1	:	37421
+Tarija 	:	1	:	459001
+Tarija 	:	1	:	183001
+Padcaya 	:	1	:	58075
+Yacuiba 	:	1	:	144360
+Uriondo 	:	1	:	18699
+San Lorenzo 	:	1	:	34070
+Entre Rios 	:	1	:	20796
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_AREA.txt
new file mode 100644
index 0000000..97607be
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_AREA.txt
@@ -0,0 +1 @@
+ Bosna i Hercegovina : 1 : 51129.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_POPULATION.txt
new file mode 100644
index 0000000..4f12f9d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOSNIA AND HERZEGOVINA_POPULATION.txt
@@ -0,0 +1 @@
+ Bosna i Hercegovina : 1 : 4480791
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_AREA.txt
new file mode 100644
index 0000000..aa828f5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_AREA.txt
@@ -0,0 +1 @@
+BOTSWANA : 0 : 581730
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_POPULATION.txt
new file mode 100644
index 0000000..ade4c69
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BOTSWANA_POPULATION.txt
@@ -0,0 +1 @@
+BOTSWANA : 0 : 1680863
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_AREA.txt
new file mode 100644
index 0000000..4137054
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_AREA.txt
@@ -0,0 +1,35 @@
+Brasil	:	0	:	8511965
+Capanema : 1 : 4000
+Porto Xavier : 1 : 26915
+Regiao Centro-Oeste  	:	1	:	1612075
+Distrito Federal 	:	1	:	5822
+Goias 	:	1	:	341289
+Mato Grosso 	:	1	:	906806
+Mato Grosso do Sul 	:	1	:	358158
+Regiao Nordeste 	:	1	:	1558196
+Alagoas 	:	1	:	27933
+Bahia 	:	1	:	567295
+Ceara	:	1	:	146348
+Maranhao	:	1	:	333365
+Paraiba 	:	1	:	56584
+Pernambuco 	:	1	:	98937
+Piaui [Maranhao/Piaui]	:	1	:	252378
+Rio Grande do Norte 	:	1	:	53306
+Sergipe 	:	1	:	22050
+Regiao Norte 	:	1	:	3869634
+Acre 	:	1	:	153149
+Amapa	:	1	:	143453
+Amazonas 	:	1	:	1577820
+Para	:	1	:	1253164
+Rondonia	:	1	:	238512
+Roraima 	:	1	:	225116
+Tocantins 	:	1	:	278420
+Regiao Sudeste 	:	1	:	927284
+Espiritu Santo [Espirito Santo] 	:	1	:	46184
+Minas Gerais 	:	1	:	588383
+Rio de Janeiro 	:	1	:	43909
+Sao Paulo 	:	1	:	248808
+Região Sul 	:	1	:	577213
+Parana	:	1	:	199709
+Rio Grande do Sul [Rio Graande do sul] [Rio Grnde Do Sul]	:	1	:	282062
+Santa Catarina 	:	1	:	95442
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_POPULATION.txt
new file mode 100644
index 0000000..4076ef0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRASIL_POPULATION.txt
@@ -0,0 +1,35 @@
+Brasil	:	0	:	188078227
+Capanema : 1 : 46300
+Porto Xavier : 1 : 11321 
+Regiao Centro-Oeste  	:	1	:	13020767
+Distrito Federal 	:	1	:	2333108
+Goias 	:	1	:	5619917
+Mato Grosso 	:	1	:	2803274
+Mato Grosso do Sul 	:	1	:	2264468
+Regiao Nordeste 	:	1	:	51019091
+Alagoas 	:	1	:	3015912
+Bahia 	:	1	:	13815334
+Ceara	:	1	:	8097276
+Maranhao	:	1	:	6103327
+Paraiba 	:	1	:	3595886
+Pernambuco 	:	1	:	8413593
+Piaui [Maranhao/Piaui]	:	1	:	3006885
+Rio Grande do Norte 	:	1	:	3003087
+Sergipe 	:	1	:	1967791
+Regiao Norte 	:	1	:	14698878
+Acre 	:	1	:	669736
+Amapa	:	1	:	594587
+Amazonas 	:	1	:	3232330
+Para	:	1	:	6970586
+Rondonia	:	1	:	1534594
+Roraima 	:	1	:	391317
+Tocantins 	:	1	:	1305728
+Regiao Sudeste 	:	1	:	78472017
+Espiritu Santo [Espirito Santo] 	:	1	:	3408365
+Minas Gerais 	:	1	:	19237450
+Rio de Janeiro 	:	1	:	15383407
+Sao Paulo 	:	1	:	40442795
+Região Sul 	:	1	:	26973511
+Parana	:	1	:	10261856
+Rio Grande do Sul [Rio Graande do sul] [Rio Grnde Do Sul]	:	1	:	10845087
+Santa Catarina 	:	1	:	5866568
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_AREA.txt
new file mode 100644
index 0000000..e6f12d1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_AREA.txt
@@ -0,0 +1,35 @@
+Brasil	:	0	:	8511965
+Capanema : 1 : 4000
+Porto Xavier : 1 : 26915
+Regiao Centro-Oeste  	:	1	:	1612075
+Distrito Federal 	:	1	:	5822
+Goias 	:	1	:	341289
+Mato Grosso 	:	1	:	906806
+Mato Grosso do Sul 	:	1	:	358158
+Regiao Nordeste 	:	1	:	1558196
+Alagoas 	:	1	:	27933
+Bahia 	:	1	:	567295
+Ceara	:	1	:	146348
+Maranhao	:	1	:	333365
+Paraiba 	:	1	:	56584
+Pernambuco 	:	1	:	98937
+Piaui [Maranhao/Piaui]	:	1	:	252378
+Rio Grande do Norte 	:	1	:	53306
+Sergipe 	:	1	:	22050
+Regiao Norte 	:	1	:	3869634
+Acre 	:	1	:	153149
+Amapa	:	1	:	143453
+Amazonas 	:	1	:	1577820
+Para	:	1	:	1253164
+Rondonia	:	1	:	238512
+Roraima 	:	1	:	225116
+Tocantins 	:	1	:	278420
+Regiao Sudeste 	:	1	:	927284
+Espiritu Santo [Espirito Santo] 	:	1	:	46184
+Minas Gerais 	:	1	:	588383
+Rio de Janeiro 	:	1	:	43909
+Sao Paulo 	:	1	:	248808
+Região Sul 	:	1	:	577213
+Parana	:	1	:	199709
+Rio Grande do Sul [Rio Graande do sul] [Rio Grnde Do Sul]	:	1	:	282062
+Santa Catarina 	:	1	:	95442
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_POPULATION.txt
new file mode 100644
index 0000000..4076ef0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRAZIL_POPULATION.txt
@@ -0,0 +1,35 @@
+Brasil	:	0	:	188078227
+Capanema : 1 : 46300
+Porto Xavier : 1 : 11321 
+Regiao Centro-Oeste  	:	1	:	13020767
+Distrito Federal 	:	1	:	2333108
+Goias 	:	1	:	5619917
+Mato Grosso 	:	1	:	2803274
+Mato Grosso do Sul 	:	1	:	2264468
+Regiao Nordeste 	:	1	:	51019091
+Alagoas 	:	1	:	3015912
+Bahia 	:	1	:	13815334
+Ceara	:	1	:	8097276
+Maranhao	:	1	:	6103327
+Paraiba 	:	1	:	3595886
+Pernambuco 	:	1	:	8413593
+Piaui [Maranhao/Piaui]	:	1	:	3006885
+Rio Grande do Norte 	:	1	:	3003087
+Sergipe 	:	1	:	1967791
+Regiao Norte 	:	1	:	14698878
+Acre 	:	1	:	669736
+Amapa	:	1	:	594587
+Amazonas 	:	1	:	3232330
+Para	:	1	:	6970586
+Rondonia	:	1	:	1534594
+Roraima 	:	1	:	391317
+Tocantins 	:	1	:	1305728
+Regiao Sudeste 	:	1	:	78472017
+Espiritu Santo [Espirito Santo] 	:	1	:	3408365
+Minas Gerais 	:	1	:	19237450
+Rio de Janeiro 	:	1	:	15383407
+Sao Paulo 	:	1	:	40442795
+Região Sul 	:	1	:	26973511
+Parana	:	1	:	10261856
+Rio Grande do Sul [Rio Graande do sul] [Rio Grnde Do Sul]	:	1	:	10845087
+Santa Catarina 	:	1	:	5866568
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_AREA.txt
new file mode 100644
index 0000000..bc7cad7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_AREA.txt
@@ -0,0 +1,7 @@
+Brunei	:	0	:	5770
+Belait district  	:	1	:	2724
+Brunei-Muara district 	:	1	:	570
+Temburong	:	1	:	1306
+Muara/Seria/Tutong	:	1	:	1166
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_POPULATION.txt
new file mode 100644
index 0000000..45e533a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BRUNEI_POPULATION.txt
@@ -0,0 +1,6 @@
+Brunei	:	0	:	379444
+Belait district  	:	1	:	59600
+Brunei-Muara district 	:	1	:	247200
+Temburong	:	1	:	9400
+Muara/Seria/Tutong	:	1	:	41600
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_AREA.txt
new file mode 100644
index 0000000..a9b000b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_AREA.txt
@@ -0,0 +1,9 @@
+ Mihajlovgrad : 1 : 10607.0
+ Razgrad : 1 : 10842.0
+ Varna : 1 : 11929.0
+ Lovec : 1 : 15150.0
+ Grad Sofija (mun.) : 1 : 18979.0
+ Burgas : 1 : 14657.0
+ Sofija - city : 1 : 1311.0
+ Plovdiv : 1 : 13628.0
+ Haskovo : 1 : 13892.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_POPULATION.txt
new file mode 100644
index 0000000..2ac000d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BULGARIA_POPULATION.txt
@@ -0,0 +1,9 @@
+ Mihajlovgrad : 1 : 655806
+ Razgrad : 1 : 843584
+ Varna : 1 : 989821
+ Lovec : 1 : 1048671
+ Grad Sofija (mun.) : 1 : 1220914
+ Burgas : 1 : 875426
+ Sofija - city : 1 : 1010955
+ Plovdiv : 1 : 1287614
+ Haskovo : 1 : 1056374
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_AREA.txt
new file mode 100644
index 0000000..841dd7f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_AREA.txt
@@ -0,0 +1,59 @@
+Burkina :	0	:	274200
+Boucle du Mouhoun  	:	1	:	34153
+Bale 	:	1	:	4595
+Banwa 	:	1	:	5882
+Kossi 	:	1	:	7324
+Mou Houn 	:	1	:	6668
+Nayala 	:	1	:	3919
+Sourou 	:	1	:	5765
+Cascades 	:	1	:	18406
+Comoe 	:	1	:	15277
+Leraba 	:	1	:	3129
+Centre 	:	1	:	2805
+Kadiogo 	:	1	:	2805
+Centre-Est 	:	1	:	11811
+Boulgou 	:	1	:	6692
+Koulpelogo 	:	1	:	2497
+Kouritenga 	:	1	:	2622
+Centre-Nord 	:	1	:	19829
+Bam 	:	1	:	4084
+Namentenga 	:	1	:	6464
+Sanmatenga 	:	1	:	9281
+Centre-Ouest 	:	1	:	21722
+Boulkiemde 	:	1	:	4269
+Sanguie 	:	1	:	5178
+Sissili 	:	1	:	7136
+Ziro 	:	1	:	5139
+Centre-Sud 	:	1	:	11321
+Bazega 	:	1	:	3963
+Nahouri 	:	1	:	3754
+Zoundwéogo [Zoundweogo] 	:	1	:	3604
+Est 	:	1	:	46256
+Gnagna 	:	1	:	8468
+Gourma 	:	1	:	11117
+Komandjari 	:	1	:	5048
+Kompienga 	:	1	:	7029
+Tapoa 	:	1	:	14594
+Hauts-Bassins 	:	1	:	25344
+Houet 	:	1	:	11568
+Kenedougou 	:	1	:	8137
+Tuy 	:	1	:	5639
+Nord 	:	1	:	16207
+Lorum 	:	1	:	3592
+Passore 	:	1	:	3867
+Yatenga 	:	1	:	6990
+Zandoma 	:	1	:	1758
+Plateau Central 	:	1	:	8544
+Ganzourgou 	:	1	:	4178
+Kourweogo 	:	1	:	1588
+Oubritenga 	:	1	:	2778
+Sahel 	:	1	:	35350
+Oudalan 	:	1	:	9797
+Seno 	:	1	:	6863
+Soum 	:	1	:	12222
+Yagha 	:	1	:	6468
+Sud-Ouest 	:	1	:	16202
+Bougouriba 	:	1	:	2812
+Ioba 	:	1	:	3289
+Noumbiel 	:	1	:	2736
+Poni 	:	1	:	7365
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_POPULATION.txt
new file mode 100644
index 0000000..74c9039
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINAFASO_POPULATION.txt
@@ -0,0 +1,59 @@
+Burkina	:	0	:	13902979
+Boucle du Mouhoun  	:	1	:	1464163
+Bale 	:	1	:	198141
+Banwa 	:	1	:	271591
+Kossi 	:	1	:	289013
+Mou Houn 	:	1	:	296561
+Nayala 	:	1	:	171055
+Sourou 	:	1	:	237802
+Cascades 	:	1	:	421715
+Comoe 	:	1	:	304489
+Leraba 	:	1	:	117226
+Centre 	:	1	:	1488176
+Kadiogo 	:	1	:	1488176
+Centre-Est 	:	1	:	1080344
+Boulgou 	:	1	:	524429
+Koulpelogo 	:	1	:	236398
+Kouritenga 	:	1	:	319517
+Centre-Nord 	:	1	:	1160961
+Bam 	:	1	:	271760
+Namentenga 	:	1	:	303835
+Sanmatenga 	:	1	:	585366
+Centre-Ouest 	:	1	:	1245052
+Boulkiemde 	:	1	:	586265
+Sanguie 	:	1	:	314842
+Sissili 	:	1	:	193553
+Ziro 	:	1	:	150392
+Centre-Sud 	:	1	:	668960
+Bazega 	:	1	:	269235
+Nahouri 	:	1	:	151047
+Zoundwéogo [Zoundweogo] 	:	1	:	248678
+Est 	:	1	:	1073159
+Gnagna 	:	1	:	383974
+Gourma 	:	1	:	277670
+Komandjari 	:	1	:	63684
+Kompienga 	:	1	:	51425
+Tapoa 	:	1	:	296406
+Hauts-Bassins 	:	1	:	1301776
+Houet 	:	1	:	843505
+Kenedougou 	:	1	:	255525
+Tuy 	:	1	:	202746
+Nord 	:	1	:	1196470
+Lorum 	:	1	:	140450
+Passore 	:	1	:	334184
+Yatenga 	:	1	:	560804
+Zandoma 	:	1	:	161032
+Plateau Central 	:	1	:	738252
+Ganzourgou 	:	1	:	340594
+Kourweogo 	:	1	:	148848
+Oubritenga 	:	1	:	248810
+Sahel 	:	1	:	885421
+Oudalan 	:	1	:	164901
+Seno 	:	1	:	254515
+Soum 	:	1	:	319144
+Yagha 	:	1	:	146861
+Sud-Ouest 	:	1	:	611832
+Bougouriba 	:	1	:	96122
+Ioba 	:	1	:	203707
+Noumbiel 	:	1	:	64880
+Poni 	:	1	:	247123
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_AREA.txt
new file mode 100644
index 0000000..841dd7f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_AREA.txt
@@ -0,0 +1,59 @@
+Burkina :	0	:	274200
+Boucle du Mouhoun  	:	1	:	34153
+Bale 	:	1	:	4595
+Banwa 	:	1	:	5882
+Kossi 	:	1	:	7324
+Mou Houn 	:	1	:	6668
+Nayala 	:	1	:	3919
+Sourou 	:	1	:	5765
+Cascades 	:	1	:	18406
+Comoe 	:	1	:	15277
+Leraba 	:	1	:	3129
+Centre 	:	1	:	2805
+Kadiogo 	:	1	:	2805
+Centre-Est 	:	1	:	11811
+Boulgou 	:	1	:	6692
+Koulpelogo 	:	1	:	2497
+Kouritenga 	:	1	:	2622
+Centre-Nord 	:	1	:	19829
+Bam 	:	1	:	4084
+Namentenga 	:	1	:	6464
+Sanmatenga 	:	1	:	9281
+Centre-Ouest 	:	1	:	21722
+Boulkiemde 	:	1	:	4269
+Sanguie 	:	1	:	5178
+Sissili 	:	1	:	7136
+Ziro 	:	1	:	5139
+Centre-Sud 	:	1	:	11321
+Bazega 	:	1	:	3963
+Nahouri 	:	1	:	3754
+Zoundwéogo [Zoundweogo] 	:	1	:	3604
+Est 	:	1	:	46256
+Gnagna 	:	1	:	8468
+Gourma 	:	1	:	11117
+Komandjari 	:	1	:	5048
+Kompienga 	:	1	:	7029
+Tapoa 	:	1	:	14594
+Hauts-Bassins 	:	1	:	25344
+Houet 	:	1	:	11568
+Kenedougou 	:	1	:	8137
+Tuy 	:	1	:	5639
+Nord 	:	1	:	16207
+Lorum 	:	1	:	3592
+Passore 	:	1	:	3867
+Yatenga 	:	1	:	6990
+Zandoma 	:	1	:	1758
+Plateau Central 	:	1	:	8544
+Ganzourgou 	:	1	:	4178
+Kourweogo 	:	1	:	1588
+Oubritenga 	:	1	:	2778
+Sahel 	:	1	:	35350
+Oudalan 	:	1	:	9797
+Seno 	:	1	:	6863
+Soum 	:	1	:	12222
+Yagha 	:	1	:	6468
+Sud-Ouest 	:	1	:	16202
+Bougouriba 	:	1	:	2812
+Ioba 	:	1	:	3289
+Noumbiel 	:	1	:	2736
+Poni 	:	1	:	7365
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_POPULATION.txt
new file mode 100644
index 0000000..25e8536
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURKINA_POPULATION.txt
@@ -0,0 +1,59 @@
+Burkina :	0	:	13902979
+Boucle du Mouhoun  	:	1	:	1464163
+Bale 	:	1	:	198141
+Banwa 	:	1	:	271591
+Kossi 	:	1	:	289013
+Mou Houn 	:	1	:	296561
+Nayala 	:	1	:	171055
+Sourou 	:	1	:	237802
+Cascades 	:	1	:	421715
+Comoe 	:	1	:	304489
+Leraba 	:	1	:	117226
+Centre 	:	1	:	1488176
+Kadiogo 	:	1	:	1488176
+Centre-Est 	:	1	:	1080344
+Boulgou 	:	1	:	524429
+Koulpelogo 	:	1	:	236398
+Kouritenga 	:	1	:	319517
+Centre-Nord 	:	1	:	1160961
+Bam 	:	1	:	271760
+Namentenga 	:	1	:	303835
+Sanmatenga 	:	1	:	585366
+Centre-Ouest 	:	1	:	1245052
+Boulkiemde 	:	1	:	586265
+Sanguie 	:	1	:	314842
+Sissili 	:	1	:	193553
+Ziro 	:	1	:	150392
+Centre-Sud 	:	1	:	668960
+Bazega 	:	1	:	269235
+Nahouri 	:	1	:	151047
+Zoundwéogo [Zoundweogo]	:	1	:	248678
+Est 	:	1	:	1073159
+Gnagna 	:	1	:	383974
+Gourma 	:	1	:	277670
+Komandjari 	:	1	:	63684
+Kompienga 	:	1	:	51425
+Tapoa 	:	1	:	296406
+Hauts-Bassins 	:	1	:	1301776
+Houet 	:	1	:	843505
+Kenedougou 	:	1	:	255525
+Tuy 	:	1	:	202746
+Nord 	:	1	:	1196470
+Lorum 	:	1	:	140450
+Passore 	:	1	:	334184
+Yatenga 	:	1	:	560804
+Zandoma 	:	1	:	161032
+Plateau Central 	:	1	:	738252
+Ganzourgou 	:	1	:	340594
+Kourweogo 	:	1	:	148848
+Oubritenga 	:	1	:	248810
+Sahel 	:	1	:	885421
+Oudalan 	:	1	:	164901
+Seno 	:	1	:	254515
+Soum 	:	1	:	319144
+Yagha 	:	1	:	146861
+Sud-Ouest 	:	1	:	611832
+Bougouriba 	:	1	:	96122
+Ioba 	:	1	:	203707
+Noumbiel 	:	1	:	64880
+Poni 	:	1	:	247123
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_AREA.txt
new file mode 100644
index 0000000..9f48c1e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_AREA.txt
@@ -0,0 +1,130 @@
+BURUNDI:0:27830
+CIBITOKE:1:661.903
+NGOZI:1:539.545
+BUBANZA:1:376.074
+KAYANZA:1:448.365
+BUJUMBURA:1:725.471
+GITEGA:1:700.787
+BURURI:1:1263.011
+KARUZI:1:517.552
+MUYINGA:1:676.541
+MAKAMBA:1:1114.360
+MURAMVIYA:1:588.238
+RUTANA:1:475.012
+RUYIGI:1:862.754
+KIRUNDO:1:776.179
+CANKUZO:1:796.928
+RUYIGI:2:106.844633
+BUGABIRA:2:95.913490
+MURWI:2:96.890100
+GISHUBI:2:100.277896
+GISAGARA:2:77.209255
+MUBIMBI:2:31.577264
+MWAKIRO:2:77.028778
+BUKEMBA:2:74.069375
+GAHOMBO:2:37.547267
+BURAMBI:2:83.532255
+RUSAKA:2:55.210581
+GITANGA:2:39.292430
+MUTIMBUZI:2:86.504913
+GASORWE:2:80.000190
+GIHARO:2:148.904557
+MUGAMBA:2:117.726925
+NYABIGINA:2:53.700148
+GITERANYI:2:125.282852
+MABAY:2:146.928160
+KIREMBA:2:81.808903
+BUGENDANA:2:98.534918
+KIGAMBA:2:236.120418
+BISORO:2:29.126643
+RUTEGAMA:2:46.048039
+KABEZI:2:136.616656
+NTEGA:2:119.502956
+GASHOHO:2:69.456100
+TANGARA:2:80.196525
+MURAMVIYA:2:82.631772
+KAYOKWE:2:41.457525
+GASHIKANWA:2:55.600456
+GISOZI:2:57.461184
+RYANSORO:2:66.146341
+GATARA:2:60.138993
+RUGAZI:2:52.827249
+KIGANDA:2:36.296871
+SONGA:2:106.320285
+MATANA:2:78.651967
+MUSHIHA:2:155.311462
+MUGONGOMANGA:2:63.260155
+BUHINVUZA:2:97.314044
+MUSONGATI:2:64.872608
+KANYOSHA:2:55.246626
+ITABA:2:69.935487
+MUHANGA:2:51.462123
+SHOMBO:2:52.243242
+MUYINGA:2:115.560691
+BUKINANVANA:2:122.725093
+NYABIKERE:2:83.723326
+MARANGARA:2:68.794715
+VYANDA:2:74.366825
+MPINGA-KAYOVE:2:76.048450
+BUKEYE:2:88.022076
+BUGENYUZI:2:84.349215
+BUYENGERO:2:76.727753
+BUTEZI:2:95.430730
+NYANZA LAC:2:467.911437
+RUTANA:2:71.824580
+RUMONGE:2:443.787789
+ISALE-MUGARURO:2:27.527786
+BUSONI:2:210.416652
+BUHIGA:2:92.380411
+MUHUTA:2:171.092764
+RUGOMBO:2:83.131372
+MUKIKE:2:28.933769
+BWERU:2:152.085172
+KIRUNDO:2:102.255122
+RUTOVU:2:120.755301
+MUTUMBA:2:71.045616
+MUSIGATI:2:95.913961
+MURUTA:2:46.216386
+GITARAMUKA:2:67.798571
+GITEGA:2:106.647649
+GITOBE:2:75.999836
+RANGO:2:52.161631
+MUTAMBU:2:49.235514
+KAYANZA:2:38.891875
+BURURI:2:161.141900
+MBUYE:2:39.740715
+NYABIGINA (BUJ):2:75.475553
+NDAVA:2:58.542447
+NYABITSINDA:2:88.981306
+MUTAHO:2:56.686979
+BUTAGANZWAL:2:46.037143
+BWAMBARANGWE:2:82.330679
+KABARORE:2:59.910286
+GISURU:2:186.681403
+CENDAJURU:2:114.663977
+BUBANZA:2:83.087667
+NVAMURENZA:2:37.389850
+NGOZI:2:58.556545
+MUGINA:2:117.056315
+MWUMBA:2:47.391707
+MATONGO:2:55.999297
+GIHETA:2:57.139877
+KINYINYA:2:88.267910
+KAYOGORO:2:116.526255
+BUSIGA:2:52.045643
+GIHOGAZI:2:66.011618
+BUGANDA:2:95.171960
+CANKUZO:2:213.622889
+RUHORORO:2:57.760655
+BUKIRASAZI:2:34.804898
+BUTIHINDA:2:111.898345
+VUGIZO:2:97.535446
+MPANDA:2:40.449460
+BUTAGANZWA2:2:144.462847
+KIBAGO:2:116.115192
+MAKAMBA:2:152.033403
+MAKEBUKO:2:52.773353
+MABANDA:2:164.238268
+BURAZA:2:57.839602
+VUMBI-BUKUBA:2:89.760265
+GIHANGA:2:103.795663
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_POPULATION.txt
new file mode 100644
index 0000000..f77d5d0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/BURUNDI_POPULATION.txt
@@ -0,0 +1,130 @@
+BURUNDI:0:6370609:228.911570
+BUBANZA:1:253446:673.925876
+BUJUMBURA:1:669031:922.202266
+BURURI:1:440919:349.101473
+CANKUZO:1:159568:200.228879
+CIBITOKE:1:317159:479.162355
+GITEGA:1:633056:903.350091
+KARUZI:1:338510:654.059882
+KAYANZA:1:497888:1110.452422
+KIRUNDO:1:453996:584.911470
+MAKAMBA:1:270157:242.432428
+MURAMVIYA:1:494382:840.445534
+MUYINGA:1:432624:639.464571
+NGOZI:1:542930:1006.273805
+RUTANA:1:222206:467.790287
+RUYIGI:1:285167:330.531067
+GITERANYI:2:61803:493.311156
+BUGABIRA:2:64856:676.198639
+BUSONI:2:64856:308.229272
+BWAMBARANGWE:2:64856:787.757033
+KIRUNDO:2:64856:634.262325
+NTEGA:2:64856:542.719390
+GITOBE:2:64856:853.377781
+BUTIHINDA:2:61803:552.317629
+MUGINA:2:52859:451.576093
+VUMBI-BUKUBA:2:64856:722.553253
+MABAY:2:52859:359.766524
+MARANGARA:2:60325:876.892296
+MUYINGA:2:61803:534.813595
+GASHOHO:2:61803:889.820024
+RUGOMBO:2:52859:635.859027
+NVAMURENZA:2:60325:1613.420636
+KIREMBA:2:60325:737.395972
+MWUMBA:2:60325:1272.913752
+BUKINANVANA:2:52859:430.717403
+GASORWE:2:61803:772.541022
+MURWI:2:52859:545.564855
+BUSIGA:2:60325:1159.089447
+KABARORE:2:55320:923.395507
+GASHIKANWA:2:60325:1084.983108
+TANGARA:2:60325:752.221565
+BUHINVUZA:2:61803:635.092593
+KAYANZA:2:55320:1422.427921
+BUGANDA:2:52859:555.413941
+NGOZI:2:60325:1030.210296
+MURUTA:2:55320:1196.997292
+GATARA:2:55320:919.883858
+GAHOMBO:2:55320:1473.366594
+KIGAMBA:2:31913:135.158155
+GITARAMUKA:2:48358:713.268299
+MUSIGATI:2:50689:528.486150
+RUHORORO:2:60325:1044.405669
+BUBANZA:2:50689:610.068881
+MUSHIHA:2:31913:205.481293
+BUGENYUZI:2:48358:573.313829
+MUHANGA:2:55320:1074.982641
+BUHIGA:2:48358:523.472140
+MATONGO:2:55320:987.885417
+MWAKIRO:2:61803:802.342062
+GIHOGAZI:2:48358:732.576672
+BUTAGANZWAL:2:55320:1201.657733
+MUTAHO:2:63305:1116.757342
+CANKUZO:2:31913:149.392231
+GIHANGA:2:50689:488.355665
+BUKEYE:2:44943:510.597116
+RANGO:2:55320:1060.566701
+MUTUMBA:2:48358:680.669324
+MPANDA:2:50689:1253.148991
+RUGAZI:2:50689:959.527535
+GISAGARA:2:31913:413.339049
+BUGENDANA:2:63305:642.468693
+NYABIKERE:2:48358:577.599741
+SHOMBO:2:48358:925.642621
+MBUYE:2:44943:1130.926260
+BWERU:2:40738:267.864002
+CENDAJURU:2:31913:278.322808
+RUTEGAMA:2:44943:976.020242
+MURAMVIYA:2:44943:543.904809
+GIHETA:2:63305:1107.905780
+MUTIMBUZI:2:66903:773.402315
+MUBIMBI:2:66903:2118.711108
+BUTEZI:2:40738:426.887051
+KIGANDA:2:44943:1238.228446
+NDAVA:2:44943:767.713351
+NYABIGINA (BUJ):2:66903:886.420799
+GISURU:2:40738:218.222823
+ISALE-MUGARURO:2:66903:2430.384340
+RUYIGI:2:40738:381.283942
+NYABIGINA:2:44943:836.940304
+GITEGA:2:63305:593.595833
+MUGONGOMANGA:2:66903:1057.586723
+KANYOSHA:2:66903:1210.989790
+RUSAKA:2:44943:814.043565
+BUTAGANZWA2:2:40738:281.997370
+KABEZI:2:66903:489.714080
+KAYOKWE:2:44943:1084.093133
+NYABITSINDA:2:40738:457.828107
+ITABA:2:63305:905.199959
+MUTAMBU:2:66903:1358.838256
+KINYINYA:2:40738:461.528350
+MAKEBUKO:2:63305:1199.575096
+MUKIKE:2:66903:2312.284307
+GISHUBI:2:63305:631.301638
+GISOZI:2:44943:782.159626
+MUGAMBA:2:48991:416.140997
+BISORO:2:44943:1543.048342
+MUHUTA:2:66903:391.034071
+RYANSORO:2:63305:957.053694
+BUKIRASAZI:2:63305:1818.870436
+MUSONGATI:2:37034:570.877825
+GIHARO:2:37034:248.711887
+MPINGA-KAYOVE:2:37034:486.983408
+MATANA:2:48991:622.883341
+BURAZA:2:63305:1094.502690
+BURAMBI:2:48991:586.492008
+RUMONGE:2:48991:110.392853
+RUTOVU:2:48991:405.704757
+BUYENGERO:2:48991:638.504297
+SONGA:2:48991:460.786951
+RUTANA:2:37034:515.621996
+BURURI:2:48991:304.023969
+BUKEMBA:2:37034:499.995218
+GITANGA:2:37034:942.531000
+MAKAMBA:2:45026:296.159698
+VYANDA:2:48991:658.774931
+KAYOGORO:2:45026:386.403619
+VUGIZO:2:45026:461.639009
+NYANZA LAC:2:45026:96.227968
+MABANDA:2:45026:274.151495
+KIBAGO:2:45026:387.771539
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_AREA.txt
new file mode 100644
index 0000000..ac96035
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_AREA.txt
@@ -0,0 +1,211 @@
+Cambodia	:	0	:	181040
+Banteay Meanchey	:	1	:	6679
+Mongkol Borei 	:		:	0
+Phnum Srok 	:		:	0
+Preah Netr Preah 	:		:	0
+Ou Chrov 	:		:	0
+Serei Saophoan 	:		:	0
+Thma Puok 	:		:	0
+Svay Chek 	:		:	0
+Malai 	:		:	0
+Battambang 	:	1	:	11702
+Banan 	:		:	0
+Thma Koul 	:		:	0
+Bat Dambang 	:		:	0
+Bavel 	:		:	0
+Aek Phnum 	:		:	0
+Moung Ruessei 	:		:	0
+Rotanak Mondol 	:		:	0
+Sangkae 	:		:	0
+Samlout 	:		:	0
+Sampov Lun 	:		:	0
+Phnum Proek 	:		:	0
+Kamrieng 	:		:	0
+Koas Krala 	:		:	0
+Kampong Cham 	:	1	:	9799
+Batheay 	:		:	0
+Chamkar Leu 	:		:	0
+Cheung Prey 	:		:	0
+Dambae 	:		:	0
+Kampong Cham 	:		:	0
+Kampong Siem 	:		:	0
+Kang Meas 	:		:	0
+Kaoh Soutin 	:		:	0
+Krouch Chhmar 	:		:	0
+Memot 	:		:	0
+Ou Reang Ov 	:		:	0
+Ponhae Kraek 	:		:	0
+Prey Chhor 	:		:	0
+Srei Santhor 	:		:	0
+Stueng Trang 	:		:	0
+Tboung Khmum 	:		:	0
+Kampong Chhnang 	:	1	:	5521
+Baribour 	:		:	0
+Chol Kiri 	:		:	0
+Kampong Chnnang 	:		:	0
+Kampong Leaeng 	:		:	0
+Kampong Tralach 	:		:	0
+Rolea B'ier 	:		:	0
+Sameakki Mean Chey 	:		:	0
+Tuek Phos 	:		:	0
+Kampong Speu 	:	1	:	7017
+Basedth 	:		:	0
+Chbar Mon 	:		:	0
+Kong Pisei 	:		:	0
+Aoral 	:		:	0
+Odongk 	:		:	0
+Phnum Sruoch 	:		:	0
+Samraong Tong 	:		:	0
+Thpong 	:		:	0
+Kampong Thom 	:	1	:	13814
+Baray 	:		:	0
+Kampong Svay 	:		:	0
+Stueng Saen 	:		:	0
+Prasat Balangk 	:		:	0
+Prasat Sambour 	:		:	0
+Sandan 	:		:	0
+Santuk 	:		:	0
+Stoung 	:		:	0
+Kampot 	:	1	:	4873
+Angkor Chey 	:		:	0
+Banteay Meas 	:		:	0
+Chhuk 	:		:	0
+Chum Kiri 	:		:	0
+Dang Tong 	:		:	0
+Kampong Trach 	:		:	0
+Kampot 	:		:	0
+Tonle Sap  	:	1	:	4873
+Kampong Bay 	:		:	0
+Khet Kandal 	:		:	3568
+Kandal Stueng 	:		:	0
+Kien Svay 	:		:	0
+Khsach Kandal 	:		:	0
+Kaoh Thum 	:		:	0
+Leuk Daek 	:		:	0
+Lvea Aem 	:		:	0
+Mukh Kampul 	:		:	0
+Angk Snuol 	:		:	0
+Ponhea Lueu 	:		:	0
+S'ang 	:		:	0
+Ta Khmau [Kandal]	:	1	:	3568
+Koh Kong 	:	1	:	11160
+Botum Sakor 	:		:	0
+Kiri Sakor 	:		:	0
+Kaoh Kong 	:		:	0
+Smach Mean Chey 	:		:	0
+Mondol Seima 	:		:	0
+Srae Ambel 	:		:	0
+Thma Bang 	:		:	0
+Kampong Seila 	:		:	0
+Kratie 	:	1	:	11094
+Chhloung 	:		:	0
+Kracheh 	:		:	0
+Preaek Prasab 	:		:	0
+Sambour 	:		:	0
+Snuol 	:		:	0
+Senmonourom [Mondul Kiri]	:	1	:	14288
+Kaev Seima 	:		:	0
+Kaoh Nheaek 	:		:	0
+Ou Reang 	:		:	0
+Pechr Chenda 	:		:	0
+Saen Monourom 	:		:	0
+Phnom Penh 	:	1	:	290
+Chamkar Mon 	:		:	0
+Doun Penh 	:		:	0
+Prampir Meakkara 	:		:	0
+Tuol Kouk 	:		:	0
+Dangkao 	:		:	0
+Mean Chey 	:		:	0
+Ruessei Kaev 	:		:	0
+Phnum Tbeng Meanchey [Preah Vihear]	:	1	:	13788
+Chey Saen 	:		:	0
+Chhaeb 	:		:	0
+Choam Khsant 	:		:	0
+Kuleaen 	:		:	0
+Rovieng 	:		:	0
+Sangkom Thmei 	:		:	0
+Tbaeng Mean Chey 	:		:	0
+Prey Veng 	:	1	:	4883
+Ba Phnum 	:		:	0
+Kamchay Mear 	:		:	0
+Kampong Trabaek 	:		:	0
+Kanhchriech 	:		:	0
+Me Sang 	:		:	0
+Peam Chor 	:		:	0
+Peam Ro 	:		:	0
+Pea Reang 	:		:	0
+Preah Sdach 	:		:	0
+Prey Veaeng 	:		:	0
+Kampong Leav 	:		:	0
+Sithor Kandal 	:		:	0
+Pursat 	:	1	:	12692
+Bakan 	:		:	0
+Kandieng 	:		:	0
+Krakor 	:		:	0
+Phnum Kravanh 	:		:	0
+Sampov Meas 	:		:	0
+Veal Veaeng 	:		:	0
+Lumphat [Ratana Kiri]	:	1	:	10782
+Andoung Meas 	:		:	0
+Ban Lung 	:		:	0
+Bar Kaev 	:		:	0
+Koun Mom 	:		:	0
+Lumphat 	:		:	0
+Ou Chum 	:		:	0
+Ou Ya Dav 	:		:	0
+Ta Veaeng 	:		:	0
+Veun Sai 	:		:	0
+Siem reap 	:	1	:	10299
+Angkor Chum 	:		:	0
+Angkor Thum 	:		:	0
+Banteay srei 	:		:	0
+Chi Kraeng 	:		:	0
+Kralanh 	:		:	0
+Puok 	:		:	0
+Prasat Bakong 	:		:	0
+Siem Reab 	:		:	0
+Soutr Nikom 	:		:	0
+Srei Snam 	:		:	0
+Svay Leu 	:		:	0
+Varin 	:		:	0
+Sihanoukville 	:	1	:	868
+Mittakpheap 	:		:	0
+Prey Nob 	:		:	0
+Stueng hav 	:		:	0
+Stung Treng 	:	1	:	11092
+Sesan 	:		:	0
+Siem Bouk 	:		:	0
+Siem Pang 	:		:	0
+Stueng Traeng 	:		:	0
+Thala Barivat 	:		:	0
+Svay Rieng 	:	1	:	2966
+Chantrea 	:		:	0
+Kampong Rou 	:		:	0
+Rumduol 	:		:	0
+Romeas Haek 	:		:	0
+Svay Chrum 	:		:	0
+Svay Rieng 	:		:	0
+Svay Teab 	:		:	0
+Takeo 	:	1	:	3563
+Angkor Borei 	:		:	0
+Bati 	:		:	0
+Bourei Cholsar 	:		:	0
+Kiri Vong 	:		:	0
+Kaoh Andaet 	:		:	0
+Prey Kabbas 	:		:	0
+Samraong 	:		:	0
+Doun Kaev 	:		:	0
+Tram Kak 	:		:	0
+Treang 	:		:	0
+Khet Oddar Meanchey 	:		:	6158
+Anlong Veaeng 	:		:	0
+Banteay Ampil 	:		:	0
+Chong Kal 	:		:	0
+Samraong 	:		:	0
+Trapeang Prasat 	:		:	0
+Kep 	:	1	:	336
+Damnak Chang'aeur 	:		:	0
+Kaeb 	:		:	0
+Pailin 	:	1	:	803
+Pailin 	:		:	0
+Sala Krau 	:		:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_POPULATION.txt
new file mode 100644
index 0000000..a5315a7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMBODIA_POPULATION.txt
@@ -0,0 +1,211 @@
+Cambodia	:	0	:	13881427
+Banteay Meanchey	:	1	:	773092
+Mongkol Borei 	:		:	0
+Phnum Srok 	:		:	0
+Preah Netr Preah 	:		:	0
+Ou Chrov 	:		:	0
+Serei Saophoan 	:		:	0
+Thma Puok 	:		:	0
+Svay Chek 	:		:	0
+Malai 	:		:	0
+Battambang 	:	1	:	997840
+Banan 	:		:	0
+Thma Koul 	:		:	0
+Bat Dambang 	:		:	0
+Bavel 	:		:	0
+Aek Phnum 	:		:	0
+Moung Ruessei 	:		:	0
+Rotanak Mondol 	:		:	0
+Sangkae 	:		:	0
+Samlout 	:		:	0
+Sampov Lun 	:		:	0
+Phnum Proek 	:		:	0
+Kamrieng 	:		:	0
+Koas Krala 	:		:	0
+Kampong Cham 	:	1	:	1857500
+Batheay 	:		:	0
+Chamkar Leu 	:		:	0
+Cheung Prey 	:		:	0
+Dambae 	:		:	0
+Kampong Cham 	:		:	0
+Kampong Siem 	:		:	0
+Kang Meas 	:		:	0
+Kaoh Soutin 	:		:	0
+Krouch Chhmar 	:		:	0
+Memot 	:		:	0
+Ou Reang Ov 	:		:	0
+Ponhae Kraek 	:		:	0
+Prey Chhor 	:		:	0
+Srei Santhor 	:		:	0
+Stueng Trang 	:		:	0
+Tboung Khmum 	:		:	0
+Kampong Chhnang 	:	1	:	513179
+Baribour 	:		:	0
+Chol Kiri 	:		:	0
+Kampong Chnnang 	:		:	0
+Kampong Leaeng 	:		:	0
+Kampong Tralach 	:		:	0
+Rolea B'ier 	:		:	0
+Sameakki Mean Chey 	:		:	0
+Tuek Phos 	:		:	0
+Kampong Speu 	:	1	:	729552
+Basedth 	:		:	0
+Chbar Mon 	:		:	0
+Kong Pisei 	:		:	0
+Aoral 	:		:	0
+Odongk 	:		:	0
+Phnum Sruoch 	:		:	0
+Samraong Tong 	:		:	0
+Thpong 	:		:	0
+Kampong Thom 	:	1	:	681692
+Baray 	:		:	0
+Kampong Svay 	:		:	0
+Stueng Saen 	:		:	0
+Prasat Balangk 	:		:	0
+Prasat Sambour 	:		:	0
+Sandan 	:		:	0
+Santuk 	:		:	0
+Stoung 	:		:	0
+Kampot 	:	1	:	602624
+Angkor Chey 	:		:	0
+Banteay Meas 	:		:	0
+Chhuk 	:		:	0
+Chum Kiri 	:		:	0
+Dang Tong 	:		:	0
+Kampong Trach 	:		:	0
+Tonle Sap  	:	1	:	4873
+Kampot 	:	1	:	602600
+Kampong Bay 	:		:	0
+Khet Kandal 	:		:	1242506
+Kandal Stueng 	:		:	0
+Kien Svay 	:		:	0
+Khsach Kandal 	:		:	0
+Kaoh Thum 	:		:	0
+Leuk Daek 	:		:	0
+Lvea Aem 	:		:	0
+Mukh Kampul 	:		:	0
+Angk Snuol 	:		:	0
+Ponhea Lueu 	:		:	0
+S'ang 	:		:	0
+Ta Khmau [Kandal]	:	1	:	1242500
+Koh Kong 	:	1	:	191468
+Botum Sakor 	:		:	0
+Kiri Sakor 	:		:	0
+Kaoh Kong 	:		:	0
+Smach Mean Chey 	:		:	0
+Mondol Seima 	:		:	0
+Srae Ambel 	:		:	0
+Thma Bang 	:		:	0
+Kampong Seila 	:		:	0
+Kratie 	:	1	:	333761
+Chhloung 	:		:	0
+Kracheh 	:		:	0
+Preaek Prasab 	:		:	0
+Sambour 	:		:	0
+Snuol 	:		:	0
+Senmonourom  [Mondul Kiri]	:	1	:	42412
+Kaev Seima 	:		:	0
+Kaoh Nheaek 	:		:	0
+Ou Reang 	:		:	0
+Pechr Chenda 	:		:	0
+Saen Monourom 	:		:	0
+Phnom Penh 	:	1	:	1313851
+Chamkar Mon 	:		:	0
+Doun Penh 	:		:	0
+Prampir Meakkara 	:		:	0
+Tuol Kouk 	:		:	0
+Dangkao 	:		:	0
+Mean Chey 	:		:	0
+Ruessei Kaev 	:		:	0
+Phnum Tbeng Meanchey [Preah Vihear]	:	1	:	152378
+Chey Saen 	:		:	0
+Chhaeb 	:		:	0
+Choam Khsant 	:		:	0
+Kuleaen 	:		:	0
+Rovieng 	:		:	0
+Sangkom Thmei 	:		:	0
+Tbaeng Mean Chey 	:		:	0
+Prey Veng 	:	1	:	1044376
+Ba Phnum 	:		:	0
+Kamchay Mear 	:		:	0
+Kampong Trabaek 	:		:	0
+Kanhchriech 	:		:	0
+Me Sang 	:		:	0
+Peam Chor 	:		:	0
+Peam Ro 	:		:	0
+Pea Reang 	:		:	0
+Preah Sdach 	:		:	0
+Prey Veaeng 	:		:	0
+Kampong Leav 	:		:	0
+Sithor Kandal 	:		:	0
+Pursat 	:	1	:	428173
+Bakan 	:		:	0
+Kandieng 	:		:	0
+Krakor 	:		:	0
+Phnum Kravanh 	:		:	0
+Sampov Meas 	:		:	0
+Veal Veaeng 	:		:	0
+Lumphat [Ratana Kiri]	:	1	:	121028
+Andoung Meas 	:		:	0
+Ban Lung 	:		:	0
+Bar Kaev 	:		:	0
+Koun Mom 	:		:	0
+Lumphat 	:		:	0
+Ou Chum 	:		:	0
+Ou Ya Dav 	:		:	0
+Ta Veaeng 	:		:	0
+Veun Sai 	:		:	0
+Siem reap 	:	1	:	861214
+Angkor Chum 	:		:	0
+Angkor Thum 	:		:	0
+Banteay srei 	:		:	0
+Chi Kraeng 	:		:	0
+Kralanh 	:		:	0
+Puok 	:		:	0
+Prasat Bakong 	:		:	0
+Siem Reab 	:		:	0
+Soutr Nikom 	:		:	0
+Srei Snam 	:		:	0
+Svay Leu 	:		:	0
+Varin 	:		:	0
+Sihanoukville 	:	1	:	209005
+Mittakpheap 	:		:	0
+Prey Nob 	:		:	0
+Stueng hav 	:		:	0
+Stung Treng 	:	1	:	103933
+Sesan 	:		:	0
+Siem Bouk 	:		:	0
+Siem Pang 	:		:	0
+Stueng Traeng 	:		:	0
+Thala Barivat 	:		:	0
+Svay Rieng 	:	1	:	538180
+Chantrea 	:		:	0
+Kampong Rou 	:		:	0
+Rumduol 	:		:	0
+Romeas Haek 	:		:	0
+Svay Chrum 	:		:	0
+Svay Rieng 	:		:	0
+Svay Teab 	:		:	0
+Takeo 	:	1	:	900880
+Angkor Borei 	:		:	0
+Bati 	:		:	0
+Bourei Cholsar 	:		:	0
+Kiri Vong 	:		:	0
+Kaoh Andaet 	:		:	0
+Prey Kabbas 	:		:	0
+Samraong 	:		:	0
+Doun Kaev 	:		:	0
+Tram Kak 	:		:	0
+Treang 	:		:	0
+Khet Oddar Meanchey 	:		:	97803
+Anlong Veaeng 	:		:	0
+Banteay Ampil 	:		:	0
+Chong Kal 	:		:	0
+Samraong 	:		:	0
+Trapeang Prasat 	:		:	0
+Kep 	:	1	:	37786
+Damnak Chang'aeur 	:		:	0
+Kaeb 	:		:	0
+Pailin 	:	1	:	32690
+Pailin 	:		:	0
+Sala Krau 	:		:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_AREA.txt
new file mode 100644
index 0000000..b203d67
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_AREA.txt
@@ -0,0 +1 @@
+CAMEROON : 0 : 464952
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_POPULATION.txt
new file mode 100644
index 0000000..bfee7ee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAMEROON_POPULATION.txt
@@ -0,0 +1 @@
+CAMEROON : 0 : 10493655
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_AREA.txt
new file mode 100644
index 0000000..f5818c7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_AREA.txt
@@ -0,0 +1,16 @@
+Canada	:	0	:	9984670
+Alberta  	:	1	:	661848
+British Columbia 	:	1	:	944735
+Manitoba 	:	1	:	647797
+New Brunswick 	:	1	:	72908
+Newfoundland 	:	1	:	405212
+Northwest Territories 	:	1	:	1346106
+Nova Scotia 	:	1	:	55284
+Nunavut 	:	1	:	2093190
+Ontario 	:	1	:	1076395
+Prince Edward Island 	:	1	:	5660
+Quebec 	:	1	:	1542056
+Saskatchewan 	:	1	:	651036
+Yukon Territory 	:	1	:	482443
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_POPULATION.txt
new file mode 100644
index 0000000..96ecd6d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CANADA_POPULATION.txt
@@ -0,0 +1,17 @@
+Canada	:	0	:	32422919
+Alberta  	:	1	:	3306359
+British Columbia 	:	1	:	4279462
+Manitoba 	:	1	:	1178348
+New Brunswick 	:	1	:	751111
+Newfoundland and Labrador 	:	1	:	514409
+Northwest Territories 	:	1	:	42526
+Nova Scotia 	:	1	:	936988
+Nunavut 	:	1	:	30245
+Ontario 	:	1	:	12599364
+Prince Edward Island 	:	1	:	138157
+Quebec 	:	1	:	7623870
+Saskatchewan 	:	1	:	990930
+Yukon Territory 	:	1	:	31150
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_AREA.txt
new file mode 100644
index 0000000..9f69859
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_AREA.txt
@@ -0,0 +1,20 @@
+Cape Verde	:	0	:	4033
+Ilhas de Barlovento  	:	1	:	2230
+Boa Vista 	:	1	:	620
+Pal	:	1	:	54
+Porto Novo [Santo Antao]	:	1	:	558
+Ribeira Grande 	:	1	:	167
+Sal 	:	1	:	216
+Sao Nicolau 	:	1	:	388
+Sao Vicente 	:	1	:	227
+Ilhas de Sotavento 	:	1	:	1803
+Brava 	:	1	:	67
+Calheta de So Miguel 	:	1	:	  1
+Maio 	:	1	:	269
+Mosteiros 	:	1	:	  1
+Praia [Santiago]	:	1	:	396
+Santa Catarina 	:	1	:	243
+Santa Cruz 	:	1	:	149
+So Domingos	:	1	:	  1
+So Filipe [Fogo]	:	1	:	  1
+Tarrafal 	:	1	:	203
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_POPULATION.txt
new file mode 100644
index 0000000..6ca0e98
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPE VERDE_POPULATION.txt
@@ -0,0 +1,20 @@
+Cape Verde	:	0	:	420979
+Ilhas de Barlovento  	:	1	:	146668
+Boa Vista 	:	1	:	4209
+Pal	:	1	:	8385
+Porto Novo [Santo Antao]	:	1	:	17191
+Ribeira Grande 	:	1	:	21594
+Sal 	:	1	:	14816
+Sao Nicolau 	:	1	:	13310
+Sao Vicente 	:	1	:	67163
+Ilhas de Sotavento 	:	1	:	287606
+Brava 	:	1	:	6804
+Calheta de So Miguel 	:	1	:	16128
+Maio 	:	1	:	6754
+Mosteiros 	:	1	:	9535
+Praia [Santiago]	:	1	:	106348
+Santa Catarina 	:	1	:	50024
+Santa Cruz 	:	1	:	33015
+So Domingos	:	1	:	13320
+So Filipe [Fogo]	:	1	:	27886
+Tarrafal 	:	1	:	17792
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_AREA.txt
new file mode 100644
index 0000000..fcab3a6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_AREA.txt
@@ -0,0 +1,21 @@
+Cape Verde	:	0	:	4033
+Ilhas de Barlovento  	:	1	:	2230
+Boa Vista 	:	1	:	620
+Pal	:	1	:	54
+Porto Novo [Santo Antao]	:	1	:	558
+Ribeira Grande 	:	1	:	167
+Sal 	:	1	:	216
+Sao Nicolau 	:	1	:	388
+Sao Vicente 	:	1	:	227
+Ilhas de Sotavento 	:	1	:	1803
+Brava 	:	1	:	67
+Calheta de So Miguel 	:	1	:	  1
+Maio 	:	1	:	269
+Mosteiros 	:	1	:	  1
+Praia [Santiago]	:	1	:	396
+Santa Catarina 	:	1	:	243
+Santa Cruz 	:	1	:	149
+So Domingos	:	1	:	  1
+So Filipe [Fogo]	:	1	:	  1
+Tarrafal 	:	1	:	203
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_POPULATION.txt
new file mode 100644
index 0000000..6ca0e98
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CAPEVERDE_POPULATION.txt
@@ -0,0 +1,20 @@
+Cape Verde	:	0	:	420979
+Ilhas de Barlovento  	:	1	:	146668
+Boa Vista 	:	1	:	4209
+Pal	:	1	:	8385
+Porto Novo [Santo Antao]	:	1	:	17191
+Ribeira Grande 	:	1	:	21594
+Sal 	:	1	:	14816
+Sao Nicolau 	:	1	:	13310
+Sao Vicente 	:	1	:	67163
+Ilhas de Sotavento 	:	1	:	287606
+Brava 	:	1	:	6804
+Calheta de So Miguel 	:	1	:	16128
+Maio 	:	1	:	6754
+Mosteiros 	:	1	:	9535
+Praia [Santiago]	:	1	:	106348
+Santa Catarina 	:	1	:	50024
+Santa Cruz 	:	1	:	33015
+So Domingos	:	1	:	13320
+So Filipe [Fogo]	:	1	:	27886
+Tarrafal 	:	1	:	17792
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_AREA.txt
new file mode 100644
index 0000000..6509c84
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_AREA.txt
@@ -0,0 +1,18 @@
+Central African Republic	:	0	:	622984
+Bamingui Bangoran  [Bamingui Bangora]	:	1	:	58200
+Bangui 	:	1	:	67
+Basse Kotto 	:	1	:	17604
+Haut Mbomou 	:	1	:	55530
+Haute Kotto 	:	1	:	86650
+Kemo 	:	1	:	17204
+Lobaye 	:	1	:	19235
+Mambere Kadei 	:	1	:	30203
+Mbomou 	:	1	:	61150
+Nana Grebizi  [nana gribingui]	:	1	:	19996
+Nana Mambere 	:	1	:	26600
+Ombella Mpoko 	:	1	:	31835
+Ouaka 	:	1	:	49900
+Ouham 	:	1	:	50250
+Ouham Pende	:	1	:	32100
+Sangha Mbaere [Sangha1] [Sangha]	:	1	:	19412
+Vakaga 	:	1	:	46500
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_POPULATION.txt
new file mode 100644
index 0000000..6509c84
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CENTRAL AFRICAN REPUBLIC_POPULATION.txt
@@ -0,0 +1,18 @@
+Central African Republic	:	0	:	622984
+Bamingui Bangoran  [Bamingui Bangora]	:	1	:	58200
+Bangui 	:	1	:	67
+Basse Kotto 	:	1	:	17604
+Haut Mbomou 	:	1	:	55530
+Haute Kotto 	:	1	:	86650
+Kemo 	:	1	:	17204
+Lobaye 	:	1	:	19235
+Mambere Kadei 	:	1	:	30203
+Mbomou 	:	1	:	61150
+Nana Grebizi  [nana gribingui]	:	1	:	19996
+Nana Mambere 	:	1	:	26600
+Ombella Mpoko 	:	1	:	31835
+Ouaka 	:	1	:	49900
+Ouham 	:	1	:	50250
+Ouham Pende	:	1	:	32100
+Sangha Mbaere [Sangha1] [Sangha]	:	1	:	19412
+Vakaga 	:	1	:	46500
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_AREA.txt
new file mode 100644
index 0000000..4ab9039
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_AREA.txt
@@ -0,0 +1,35 @@
+Chad	:	0	:	1284000
+Assongha  	:	1	:	0
+Chari-Baguirmi 	:	1	:	82910
+Bahr El Gazal 	:	1	:	0
+Bahr Kho 	:	1	:	0
+Batha Est 	:	1	:	0
+Batha Ouest 	:	1	:	0
+Borkou-Ennedi-Tibesti : 1 : 600350
+Mayo-Kebbi : 1 : 30105
+Moyen-Chari : 1 : 45180
+Batha	:	1	:	88800
+Biltine 	:	1	:	46850
+Borkou 	:	1	:	0
+Dababa 	:	1	:	0
+Ennedi 	:	1	:	0
+Guera 	:	1	:	58950
+Hadjer Lamis 	:	1	:	0
+Kabia 	:	1	:	0
+Kanem 	:	1	:	114520
+Lake [Lac] 	:	1	:	22320
+Lac Iro 	:	1	:	0
+Logone occidental [Logone Occiden]	:	1	:	8695
+Logone oriental [Logone Orienta] 	:	1	:	28035
+Mandoul 	:	1	:	0
+Mayo Boneye 	:	1	:	0
+Mayo Dala 	:	1	:	0
+Monts de Lam 	:	1	:	0
+N'Djaména 	:	1	:	82910
+Ouaddaï [Ouaddai]	:	1	:	76240
+Salamat 	:	1	:	63000
+Sila 	:	1	:	0
+Tandjilé Est 	:	1	:	0
+Tandjilé Ouest 	:	1	:	0
+Tandile [Tandjile] 	:	1	:	18045
+Tibesti 	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_POPULATION.txt
new file mode 100644
index 0000000..dd18966
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHAD_POPULATION.txt
@@ -0,0 +1,35 @@
+Chad	:	0	:	9944201
+Assongha  	:	1	:	145486
+Chari-Baguirmi 	:	1	:	316470
+Bahr El Gazal 	:	1	:	100439
+Bahr Kho 	:	1	:	330891
+Batha Est 	:	1	:	157963
+Batha Ouest 	:	1	:	226871
+Borkou-Ennedi-Tibesti : 1 : 101802
+Mayo-Kebbi : 1 : 820249
+Moyen-Chari : 1 : 738595
+Batha	:	1	:	384834
+Biltine 	:	1	:	235629
+Borkou 	:	1	:	53958
+Dababa 	:	1	:	178794
+Ennedi 	:	1	:	36979
+Guera 	:	1	:	377939
+Hadjer Lamis 	:	1	:	439701
+Kabia 	:	1	:	416342
+Kanem 	:	1	:	239724
+Lake [Lac] 	:	1	:	310890
+Lac Iro 	:	1	:	126546
+Logone occidental [Logone Occiden]	:	1	:	592468
+Logone oriental [Logone Orienta]	:	1	:	285658
+Mandoul 	:	1	:	492582
+Mayo Boneye 	:	1	:	238494
+Mayo Dala 	:	1	:	370167
+Monts de Lam 	:	1	:	166908
+N'Djaména 	:	1	:	639000
+Ouaddaï [Ouaddai]	:	1	:	319886
+Salamat 	:	1	:	228848
+Sila 	:	1	:	185728
+Tandjilé Est 	:	1	:	221513
+Tandjilé Ouest 	:	1	:	352509
+Tandile [Tandjile]	:	1	:	574022
+Tibesti 	:	1	:	10865
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_AREA.txt
new file mode 100644
index 0000000..f1da245
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_AREA.txt
@@ -0,0 +1,59 @@
+Chile	:	0	:	756950
+Tarapaca	:	1	:	59099.10
+Antofagasta	:	1	:	126049.10
+Atacama	:	1	:	75176.20
+Coquimbo	:	1	:	40579.90
+Valparaiso	:	1	:	16396.10
+Region del Libertador General Bernardo O'Higgins (VI) 	:	1	:	16387.00
+Maule	:	1	:	30296.10
+BioBio	:	1	:	37062.60
+Araucania	:	1	:	31842.30
+Lagos	:	1	:	67013.00
+Region Aysen del General Carlos Ibañez del Campo (XI) 	:	1	:	108494.40
+Magallanes	:	1	:	132297.20
+Santiago 	:	1	:	15403.20
+AISEN : 1 : 108494
+ANTARTICA CHILENA : 1 : 1250000
+ARAUCO : 1 : 54206
+ARICA : 1 : 756950
+CACHAPOAL : 1 : 551
+CAPITAN PRAT : 1 : 1280
+CARDENAL CARO : 1 : 2430
+CAUQUENES : 1 : 27000
+CAUTIN : 1 : 94000
+CHACABUCO : 1 : 36500
+CHANARAL : 1 : 21000
+CHILOE : 1 : 28400
+CHOAPA : 1 : 24000
+COIHAIQUE : 1 : 18270
+COLCHAGUA : 1 : 85100
+COPIAPO : 1 : 79000
+CORDILLERA : 1 : 96000
+CURICO : 1 : 50000
+EL LOA : 1 : 24000
+ELQUI : 1 : 105000
+GENERAL CARRERA : 1 : 1110
+HUASCO : 1 : 17600
+IQUIQUE : 1 : 59099
+LIMARI : 1 : 27000
+LINARES : 1 : 54000
+LLANQUIHUE : 1 : 70000
+LOS ANDES : 1 : 40000
+MAIPO : 1 : 87000
+MALLECO : 1 : 52000
+MELIPILLA : 1 : 26000
+NUBLE : 1 : 87900
+OSORNO : 1 : 57000
+PALENA : 1 : 3600
+PARINACOTA : 1 : 840
+PETORCA : 1 : 58000
+QUILLOTA : 1 : 93400
+SAN ANTONIO : 1 : 92000
+SAN FELIPE DE ACONCAGUA : 1 : 36000
+TALAGANTE : 1 : 59000
+TALCA : 1 :  58000
+TIERRA DEL FUEGO : 1 : 2630
+TOCOPILLA : 1 : 2000
+ULTIMA ESPERANZA : 1 : 5570
+VALDIVIA : 1 : 88000
+CONCEPCION : 1 : 265000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_POPULATION.txt
new file mode 100644
index 0000000..8df2c8c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHILE_POPULATION.txt
@@ -0,0 +1,60 @@
+Chile	:	0	:	16134219
+Tarapaca	:	1	:	428594
+Antofagasta	:	1	:	493984
+Atacama	:	1	:	254336
+Coquimbo	:	1	:	603210
+Valparaiso	:	1	:	1539852
+Region del Libertador General Bernardo O'Higgins (VI) 	:	1	:	780627
+Maule	:	1	:	908097
+BioBio	:	1	:	1861562
+Araucania	:	1	:	869535
+Lagos	:	1	:	1073135
+Region Aysen del General Carlos Ibañez del Campo (XI) 	:	1	:	91492
+Magallanes	:	1	:	150826
+Santiago 	:	1	:	6061185
+AISEN : 1 : 91492
+ANTARTICA CHILENA : 1 : 130
+ARAUCO : 1 : 160606
+ARICA : 1 : 175441 
+CACHAPOAL : 1 : 300000
+CAPITAN PRAT : 1 : 2217
+CARDENAL CARO : 1 : 432  
+CAUQUENES : 1 : 30771
+CAUTIN : 1 : 300000
+CHACABUCO : 1 : 85000
+CHANARAL : 1 : 31300
+CHILOE : 1 : 87000
+CHOAPA : 1 : 46000 
+COIHAIQUE : 1 :  44850
+COLCHAGUA : 1 : 108000
+COPIAPO : 1 : 125983
+CORDILLERA : 1 : 507000
+CURICO : 1 : 93447 
+EL LOA : 1 : 135000
+ELQUI : 1 : 310000
+GENERAL CARRERA : 1 :  3042
+HUASCO : 1 : 51000
+IQUIQUE : 1 : 428594
+LIMARI : 1 : 78000
+LINARES : 1 : 65133
+LLANQUIHUE : 1 : 215000
+LOS ANDES : 1 : 55608
+MAIPO : 1 : 292000
+MALLECO : 1 : 132000
+MELIPILLA : 1 : 53522 
+NUBLE : 1 : 230000
+OSORNO : 1 : 132245
+PALENA : 1 : 8000
+PARINACOTA : 1 : 1235
+PETORCA : 1 : 45000
+QUILLOTA : 1 : 47836 
+SAN ANTONIO : 1 : 83435
+SAN FELIPE DE ACONCAGUA : 1 : 53358
+TALAGANTE : 1 : 49957
+TALCA : 1 : 189505
+TIERRA DEL FUEGO : 1 : 4734
+TOCOPILLA : 1 : 23352
+ULTIMA ESPERANZA : 1 : 16978
+VALDIVIA : 1 : 127750
+CONCEPCION : 1 : 80159
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_AREA.txt
new file mode 100644
index 0000000..3777334
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_AREA.txt
@@ -0,0 +1,40 @@
+China	:	0	:	9596960
+Hongkong Island : 1 : 1104
+Jammu and Kashmir : 1 : 222236
+KowLoon and new Kowloon : 1 : 47
+New Territories : 1 : 330
+Taiwan : 1 : 36179
+Beijing	:	1	:	16808
+Tianjin	:	1	:	11300
+Hebei	:	1	:	202700
+Shanxi	:	1	:	157100
+Nei Mongol Zizhiqu 	:	1	:	1177500
+Liaoning	:	1	:	151000
+Jilin	:	1	:	187000
+Heilongjiang 	:	1	:	463600
+Shanghai	:	1	:	6200
+Jiangsu	:	1	:	102600
+Zhejiang	:	1	:	101800
+Anhui	:	1	:	139900
+Fujian	:	1	:	123100
+Jiangxi	:	1	:	164800
+Shandong 	:	1	:	153300
+Henan	:	1	:	167000
+Hubei	:	1	:	187500
+Hunan	:	1	:	210500
+Guangdong	:	1	:	197100
+Guangxi	:	1	:	220400
+Marine : 1 : 150
+Hainan	:	1	:	34300
+Chongqing	:	1	:	82400
+Sichuan	:	1	:	488000
+Guizhou	:	1	:	174000
+Yunnan	:	1	:	436200
+Xizang Zizhiqu (TIBET)	:	1	:	1221600
+Shaanxi	:	1	:	195800
+Gansu	:	1	:	366500
+Qinghai	:	1	:	721000
+Ningxia [Ningxia Huizu Zizhiqu] 	:	1	:	66400
+Xinjiang Uygur 	:	1	:	1646900
+Xianggang SAR 	:	1	:	1038
+Aomen SAR 	:	1	:	21
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_POPULATION.txt
new file mode 100644
index 0000000..c865c07
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CHINA_POPULATION.txt
@@ -0,0 +1,40 @@
+China	:	0	:	1313973713
+Hongkong Island : 1 : 7041000
+Jammu and Kashmir : 1 : 10069917 
+KowLoon and new Kowloon : 1 : 2071000
+New Territories : 1 : 3343046
+Taiwan : 1 : 22894384
+Beijing	:	1	:	14930000
+Tianjin	:	1	:	10240000
+Hebei	:	1	:	68090000
+Shanxi	:	1	:	33350000
+Nei Mongol Zizhiqu 	:	1	:	23840000
+Liaoning	:	1	:	42170000
+Jilin	:	1	:	27090000
+Heilongjiang 	:	1	:	38170000
+Shanghai	:	1	:	17420000
+Jiangsu	:	1	:	74330000
+Zhejiang	:	1	:	47200000
+Anhui	:	1	:	64610000
+Fujian	:	1	:	35110000
+Jiangxi	:	1	:	42840000
+Shandong 	:	1	:	91800000
+Henan	:	1	:	97170000
+Hubei	:	1	:	60160000
+Hunan	:	1	:	66980000
+Guangdong	:	1	:	83040000
+Guangxi	:	1	:	48890000
+Hainan	:	1	:	8180000
+Chongqing	:	1	:	31220000
+Sichuan	:	1	:	87250000
+Guizhou	:	1	:	39040000
+Yunnan	:	1	:	44150000
+Marine : 1 : 155600
+Xizang Zizhiqu (TIBET)	:	1	:	2740000
+Shaanxi	:	1	:	37050000
+Gansu	:	1	:	26190000
+Qinghai	:	1	:	5390000
+Ningxia [Ningxia Huizu Zizhiqu] 	:	1	:	5880000
+Xinjiang Uygur 	:	1	:	19630000
+Xianggang SAR 	:	1	:	6895500
+Aomen SAR 	:	1	:	465300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_AREA.txt
new file mode 100644
index 0000000..0b4b7d3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_AREA.txt
@@ -0,0 +1,35 @@
+Colombia	:	0	:	1138910
+Buenaventura : 1 : 1290
+amazonas	:	1	:	109665
+antioquia	:	1	:	63612
+arauca	:	1	:	23818
+Atlantico	:	1	:	3388
+bogota	:	1	:	1587
+Bolivar	:	1	:	25978
+Boyaca	:	1	:	23189
+Caldas	:	1	:	7888
+Caqueta	:	1	:	88965
+Casanare	:	1	:	44640
+Cauca	:	1	:	29308
+Cesar	:	1	:	22905
+Choco	:	1	:	46530
+Cordoba	:	1	:	25020
+Cundinamarca	:	1	:	22623
+Guania	:	1	:	72238
+Guaviare	:	1	:	42327
+Huila	:	1	:	19890
+Guajira	:	1	:	20848
+magdalena	:	1	:	23188
+meta	:	1	:	85635
+narino	:	1	:	33268
+norte de santander	:	1	:	21658
+putumayo	:	1	:	24885
+quindio	:	1	:	1845
+risaralda	:	1	:	4140
+San Andres Y Providencia	:	1	:	44
+Santander	:	1	:	30537
+Sucre	:	1	:	10917
+Tolima	:	1	:	23562
+Valle del cauca	:	1	:	22140
+Vaupes	:	1	:	65268
+vichada	:	1	:	100242
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_POPULATION.txt
new file mode 100644
index 0000000..de56189
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COLOMBIA_POPULATION.txt
@@ -0,0 +1,35 @@
+Colombia	:	0	:	43593035
+Buenaventura : 1 : 324207
+amazonas	:	1	:	80487
+antioquia	:	1	:	5761175
+arauca	:	1	:	281435
+Atlantico	:	1	:	2370753
+bogota	:	1	:	7185889
+Bolivar	:	1	:	2231163
+Boyaca	:	1	:	1413064
+Caldas	:	1	:	1172510
+Caqueta	:	1	:	465078
+Casanare	:	1	:	325389
+Cauca	:	1	:	1367496
+Cesar	:	1	:	1053123
+Choco	:	1	:	416318
+Cordoba	:	1	:	1396764
+Cundinamarca	:	1	:	2340894
+Guania	:	1	:	43194
+Guaviare	:	1	:	133411
+Huila	:	1	:	996617
+Guajira	:	1	:	526148
+magdalena	:	1	:	1406126
+meta	:	1	:	772853
+narino	:	1	:	1775973
+norte de santander	:	1	:	1494219
+putumayo	:	1	:	378790
+quindio	:	1	:	612719
+risaralda	:	1	:	1025539
+San Andres Y Providencia	:	1	:	83403
+Santander	:	1	:	2086649
+Sucre	:	1	:	870219
+Tolima	:	1	:	1316053
+Valle del cauca	:	1	:	4532378
+Vaupes	:	1	:	33142
+vichada	:	1	:	96138
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_AREA.txt
new file mode 100644
index 0000000..4c07e6e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_AREA.txt
@@ -0,0 +1,4 @@
+nzwani [Anjouan]	:	1	:	424
+Grand Comore	:	1	:	1148
+Mwali	:	1	:	290
+Ile de Mayotte (FR.) : 1 : 36329
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_POPULATION.txt
new file mode 100644
index 0000000..70a3e12
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COMOROS_POPULATION.txt
@@ -0,0 +1,5 @@
+nzwani [Anjouan]	:	1	:	243732
+Grand Comore	:	1	:	296177
+Mwali	:	1	:	35751
+Ile de Mayotte (FR.) : 1 : 140447
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_AREA.txt
new file mode 100644
index 0000000..1e17e0b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_AREA.txt
@@ -0,0 +1,18 @@
+Congo 	:	0	:	342000
+ Bouenza   	:	1	:	12260
+Commune de Brazzaville 	:	1	:	100
+ Cuvette 	:	1	:	74850
+ la Cuvette Ouest 	:	1	:	0  
+Commune de Dolisie 	:	1	:	 0 
+ Kouilou 	:	1	:	13650
+ la Lékoumou [Lekoumou]	:	1	:	20950
+ Likouala 	:	1	:	66044
+Commune de Mossendjo 	:	1	:0	  
+ Niari 	:	1	:	25925
+Commune de Nkayi 	:	1	:	  0
+Commune de Ouesso 	:	1	:	  0
+Plateaux1  [Plateaux]	:	1	:	38400
+Commune de Pointe-Noire 	:	1	:	0  
+ Pool 	:	1	:	33955
+ Sangha 	:	1	:	55795
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_POPULATION.txt
new file mode 100644
index 0000000..19e090d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CONGO_POPULATION.txt
@@ -0,0 +1,17 @@
+Congo 	:	0	:	3702314
+ Bouenza   	:	1	:	229820
+Commune de Brazzaville 	:	1	:	1174005
+ Cuvette 	:	1	:	135767
+ la Cuvette Ouest 	:	1	:	55765
+Commune de Dolisie 	:	1	:	106262
+ Kouilou 	:	1	:	80951
+ la Lékoumou [Lekoumou]	:	1	:	81672
+ Likouala 	:	1	:	84513
+Commune de Mossendjo 	:	1	:	18209
+ Niari 	:	1	:	105147
+Commune de Nkayi 	:	1	:	56686
+Commune de Ouesso 	:	1	:	24322
+Plateaux1  [Plateaux]	:	1	:	170978
+Commune de Pointe-Noire 	:	1	:	663359
+ Pool 	:	1	:	362357
+ Sangha 	:	1	:	46727
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_AREA.txt
new file mode 100644
index 0000000..e2fad1f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_AREA.txt
@@ -0,0 +1 @@
+COSTA RICA : 0 : 51100
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_POPULATION.txt
new file mode 100644
index 0000000..b3d492a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/COSTARICA_POPULATION.txt
@@ -0,0 +1 @@
+COSTA RICA : 0 : 4215569
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_AREA.txt
new file mode 100644
index 0000000..5bf25a3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_AREA.txt
@@ -0,0 +1 @@
+ Hrvatska : 1 : 56538.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_POPULATION.txt
new file mode 100644
index 0000000..2c41b03
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CROATIA_POPULATION.txt
@@ -0,0 +1 @@
+ Hrvatska : 1 : 4684972
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_AREA.txt
new file mode 100644
index 0000000..8c7e53c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_AREA.txt
@@ -0,0 +1,12 @@
+ Severocesky kraj : 1 : 7820.0
+ Vychodocesky kraj : 1 : 11240.0
+ Stredocesky kraj : 1 : 10994.0
+ Zapadocesky kraj : 1 : 10875.0
+ Severomoravsky kraj : 1 : 11067.0
+ Praha : 1 : 496.0
+ Jihomoravsky kraj : 1 : 15027.0
+ Jihocesky kraj : 1 : 11345.0
+ Stredolslovensky kraj : 1 : 17982.0
+ Ychodoslovenski kraj : 1 : 16194.0
+ Zapadoslovensky kraj : 1 : 14492.0
+ Bratislava : 1 : 368.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_POPULATION.txt
new file mode 100644
index 0000000..87f8212
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/CZECH REPUBLIC_POPULATION.txt
@@ -0,0 +1,12 @@
+ Severocesky kraj : 1 : 1189592
+ Vychodocesky kraj : 1 : 1239804
+ Stredocesky kraj : 1 : 1158108
+ Zapadocesky kraj : 1 : 869188
+ Severomoravsky kraj : 1 : 1975654
+ Praha : 1 : 10251079
+ Jihomoravsky kraj : 1 : 1123201
+ Jihocesky kraj : 1 : 627766
+ Stredolslovensky kraj : 1 : 1595354
+ Ychodoslovenski kraj : 1 : 1505495
+ Zapadoslovensky kraj : 1 : 1712181
+ Bratislava : 1 : 601132
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_AREA.txt
new file mode 100644
index 0000000..ea8ebc8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_AREA.txt
@@ -0,0 +1,3 @@
+ VEST FOR STOREBAELT : 1 : 33252.0
+ HOVEDSTADSREGIONEN : 1 : 2857.0
+ OST FOR STOREBAELT : 1 : 6969.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_POPULATION.txt
new file mode 100644
index 0000000..42367a2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/DENMARK_POPULATION.txt
@@ -0,0 +1,3 @@
+ VEST FOR STOREBAELT : 1 : 2845700
+ HOVEDSTADSREGIONEN : 1 : 1713700
+ OST FOR STOREBAELT : 1 : 587000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_AREA.txt
new file mode 100644
index 0000000..d401c13
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_AREA.txt
@@ -0,0 +1,28 @@
+Ecuador	:	0	:	283560
+Region  Amazonica   	:	1	:	115744.90
+Morona Santiago 	:	1	:	23796.80
+Napo 	:	1	:	12483.40
+Orellana 	:	1	:	21675.10
+Pastaza 	:	1	:	29325.00
+Sucumbios 	:	1	:	18008.30
+Zamora Chinchipe 	:	1	:	10456.30
+Region Costa 	:	1	:	68323.70
+El Oro 	:	1	:	5817.40
+Esmeraldas 	:	1	:	15895.70
+Guayas 	:	1	:	20566.00
+Los Rios 	:	1	:	7150.90
+Manabi	:	1	:	18893.70
+Region Insular 	:	1	:	8010.00
+Galapagos 	:	1	:	8010.00
+Region Sierra 	:	1	:	63515.90
+Azuay 	:	1	:	7994.70
+Bolivar 	:	1	:	3926.00
+Canar 	:	1	:	3141.60
+Carchi 	:	1	:	3749.70
+Chimborazo 	:	1	:	6470.40
+Cotopaxi 	:	1	:	5984.50
+Imbabura 	:	1	:	4614.60
+Loja 	:	1	:	10994.90
+Pichincha 	:	1	:	13270.10
+Tungurahua 	:	1	:	3369.40
+Zona no Delimtda	:	1	:	775.2
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_POPULATION.txt
new file mode 100644
index 0000000..e16f2af
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ECUADOR_POPULATION.txt
@@ -0,0 +1,28 @@
+Ecuador	:	0	:	13547510
+Region  Amazonica   	:	1	:	548419
+Morona Santiago 	:	1	:	115412
+Napo 	:	1	:	79139
+Orellana 	:	1	:	86493
+Pastaza 	:	1	:	61779
+Sucumbios 	:	1	:	128995
+Zamora Chinchipe 	:	1	:	76601
+Region Costa 	:	1	:	6056223
+El Oro 	:	1	:	525763
+Esmeraldas 	:	1	:	385223
+Guayas 	:	1	:	3309034
+Los Rios 	:	1	:	650178
+Manabi	:	1	:	1186025
+Region Insular 	:	1	:	18640
+Galapagos 	:	1	:	18640
+Region Sierra 	:	1	:	5460738
+Azuay 	:	1	:	599546
+Bolivar 	:	1	:	169370
+Canar 	:	1	:	206981
+Carchi 	:	1	:	152939
+Chimborazo 	:	1	:	403632
+Cotopaxi 	:	1	:	349540
+Imbabura 	:	1	:	344044
+Loja 	:	1	:	404835
+Pichincha 	:	1	:	2388817
+Tungurahua 	:	1	:	441034
+Zona no Delimtda	:	1	:	72588
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_AREA.txt
new file mode 100644
index 0000000..e597911
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_AREA.txt
@@ -0,0 +1,5 @@
+Egypt	:	0	:	1001450
+Frontier Governates	:	1	:	853016
+Lower Egypt 	:	1	:	27724
+Upper Egypt 	:	1	:	96194
+Urban Governates	:	1	:	20860
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_POPULATION.txt
new file mode 100644
index 0000000..0272c2b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EGYPT_POPULATION.txt
@@ -0,0 +1,5 @@
+Egypt	:	0	:	78887007
+Frontier Governates	:	1	:	976858
+Lower Egypt 	:	1	:	29729655
+Upper Egypt 	:	1	:	25133583
+Urban Governates	:	1	:	12811693
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_AREA.txt
new file mode 100644
index 0000000..fbd6e0c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_AREA.txt
@@ -0,0 +1 @@
+EL SALVADOR : 0 : 21040
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_POPULATION.txt
new file mode 100644
index 0000000..f24d062
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ELSALVADOR_POPULATION.txt
@@ -0,0 +1 @@
+EL SALVADOR : 0 : 6990657
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_AREA.txt
new file mode 100644
index 0000000..c53773e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_AREA.txt
@@ -0,0 +1,17 @@
+EQUATORIAL GUINEA:0:28051
+BIOKO SUR:1:548.560
+LITORAL:1:2757.864
+ANNOBON:1:2757.864
+CENTRO SUR:1:3290.749
+WELENZAS:1:2342.063
+BIOKO NORTE:1:225.959
+KIENTEM:1:1292.441
+LITORAL-2:2:1.000000
+ANNOBON:2:2757.864000
+BIOKO SUR:2:548.560000
+BIOKO NORTE:2:225.959000
+CENTRO SUR:2:3290.749000
+LITORAL-3:2:6.221320
+WELENZAS:2:2342.063000
+LITORAL-1:2:2750.943970
+KIENTEM:2:1292.441000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_POPULATION.txt
new file mode 100644
index 0000000..1d63420
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIAL GUINEA_POPULATION.txt
@@ -0,0 +1,17 @@
+EQUATORIAL GUINEA:0:480898:17.143703
+ANNOBON:1:94525:34.274714
+BIOKO NORTE:1:69949:309.565010
+BIOKO SUR:1:15669:28.563876
+CENTRO SUR:1:61247:18.611872
+KIENTEM:1:83486:64.595599
+LITORAL:1:94525:34.274714
+WELENZAS:1:61497:26.257620
+BIOKO NORTE:2:69949:309.565010
+BIOKO SUR:2:15669:28.563876
+LITORAL-1:2:31508:11.453644
+KIENTEM:2:83486:64.595599
+CENTRO SUR:2:61247:18.611872
+WELENZAS:2:61497:26.257620
+LITORAL-2:2:31508:31508.333333
+LITORAL-3:2:31508:5064.573649
+ANNOBON:2:94525:34.274714
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_AREA.txt
new file mode 100644
index 0000000..49dad83
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_AREA.txt
@@ -0,0 +1,17 @@
+EQUATORIAL GUINEA:0:28051
+BIOKO SUR:1:548.560
+LITORAL:1:2757.864
+ANNOBON:1:2757.864
+CENTRO SUR:1:3290.749
+WELENZAS:1:2342.063
+BIOKO NORTE:1:225.959
+KIENTEM:1:1292.441
+LITORAL-2:2:1.000000
+ANNOBON:2:2757.864000
+BIOKO SUR:2:548.560000
+BIOKO NORTE:2:225.959000
+CENTRO SUR:2:3290.749000
+LITORAL-3:2:6.221320
+WELENZAS:2:2342.063000
+LITORAL-1:2:2750.943970
+KIENTEM:2:1292.441000
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_POPULATION.txt
new file mode 100644
index 0000000..5ca8641
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/EQUATORIALGUINEA_POPULATION.txt
@@ -0,0 +1,17 @@
+EQUATORIAL GUINEA:0:480898:17.143703
+ANNOBON:1:94525:34.274714
+BIOKO NORTE:1:69949:309.565010
+BIOKO SUR:1:15669:28.563876
+CENTRO SUR:1:61247:18.611872
+KIENTEM:1:83486:64.595599
+LITORAL:1:94525:34.274714
+WELENZAS:1:61497:26.257620
+BIOKO NORTE:2:69949:309.565010
+BIOKO SUR:2:15669:28.563876
+LITORAL-1:2:31508:11.453644
+KIENTEM:2:83486:64.595599
+CENTRO SUR:2:61247:18.611872
+WELENZAS:2:61497:26.257620
+LITORAL-2:2:31508:31508.333333
+LITORAL-3:2:31508:5064.573649
+ANNOBON:2:94525:34.274714
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_AREA.txt
new file mode 100644
index 0000000..3644d8a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_AREA.txt
@@ -0,0 +1,15 @@
+Eritrea	:	0	:	121320
+Zoba A-nseba  	:	1	:	23200
+Zoba Debub 	:	1	:	8000
+key bahir	:	1	:	27600
+Zoba Gash Barka 	:	1	:	33200
+Zoba Maa-kel 	:	1	:	1300
+Zoba Seme-nawi Keyih Bahri- 	:	1	:	27800
+Akordat : 1 : 33200
+Asseb : 1 : 27600
+Gash & Setit : 1 : 2140
+Hamassien : 1 : 2500
+Keren : 1 : 1510
+Sahel : 1 : 3400
+Seraye :1 : 5204
+Akele Guzay : 1 : 2125
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_POPULATION.txt
new file mode 100644
index 0000000..f565a87
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ERITREA_POPULATION.txt
@@ -0,0 +1,15 @@
+Eritrea	:	0	:	4786944
+Zoba A-nseba  	:	1	:	549000
+Zoba Debub 	:	1	:	952100
+key bahir	:	1	:	83500
+Zoba Gash Barka 	:	1	:	708800
+Zoba Maa-kel 	:	1	:	675700
+Zoba Seme-nawi Keyih Bahri- 	:	1	:	653300
+Akordat : 1 : 25000
+Asseb : 1 : 21300
+Gash & Setit : 1 : 23094
+Hamassien : 1 : 23392
+Keren : 1 : 2723
+Sahel : 1 : 27420
+Seraye :1 : 3580
+Akele Guzay : 1 : 28025
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_AREA.txt
new file mode 100644
index 0000000..1a28ae7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_AREA.txt
@@ -0,0 +1 @@
+ESTONIA : 0 : 45227
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_POPULATION.txt
new file mode 100644
index 0000000..7123587
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ESTONIA_POPULATION.txt
@@ -0,0 +1 @@
+ESTONIA : 0 : 1351069
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_AREA.txt
new file mode 100644
index 0000000..b889bb2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_AREA.txt
@@ -0,0 +1 @@
+ETHIOPIA : 0 : 1127127
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_POPULATION.txt
new file mode 100644
index 0000000..215d5f7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ETHIOPIA_POPULATION.txt
@@ -0,0 +1 @@
+ETHIOPIA : 0 : 75067000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_AREA.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_AREA.txt
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_POPULATION.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FAROE ISLANDS_POPULATION.txt
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_AREA.txt
new file mode 100644
index 0000000..60c22f4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_AREA.txt
@@ -0,0 +1,12 @@
+ Lappi/Lappland : 1 : 98937.0
+ Oulu/Uleaborg : 1 : 61582.0
+ Vaasa/Vasa : 1 : 27319.0
+ Kuopio : 1 : 19953.0
+ Pohjois-Karjala/Norra-Karelen : 1 : 21585.0
+ Keski-Suomi/Mellersta-Finland : 1 : 19357.0
+ Mikkeli/St Michel : 1 : 21660.0
+ H„me/Tavastehus : 1 : 19104.0
+ Turku-Pori/Abo-Bj”rneborg : 1 : 23863.0
+ Kymi/Kymmene : 1 : 12828.0
+ Uudenmaa/Nyland : 1 : 10404.0
+ Aland/Ahvenanmaa : 1 : 1552.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_POPULATION.txt
new file mode 100644
index 0000000..2b2e745
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FINLAND_POPULATION.txt
@@ -0,0 +1,12 @@
+ Lappi/Lappland : 1 : 200324
+ Oulu/Uleaborg : 1 : 438660
+ Vaasa/Vasa : 1 : 445155
+ Kuopio : 1 : 256581
+ Pohjois-Karjala/Norra-Karelen : 1 : 176701
+ Keski-Suomi/Mellersta-Finland : 1 : 252016
+ Mikkeli/St Michel : 1 : 208190
+ H„me/Tavastehus : 1 : 684928
+ Turku-Pori/Abo-Bj”rneborg : 1 : 722398
+ Kymi/Kymmene : 1 : 335313
+ Uudenmaa/Nyland : 1 : 1241751
+ Aland/Ahvenanmaa : 1 : 24418
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_AREA.txt
new file mode 100644
index 0000000..ff1b51c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_AREA.txt
@@ -0,0 +1,22 @@
+ NORD - PAS-DE-CALAIS : 1 : 12414.0
+ PICARDIE : 1 : 19399.0
+ CHAMPAGNE-ARDENNE : 1 : 25605.0
+ HAUTE-NORMANDIE : 1 : 12317.0
+ BASSE-NORMANDIE : 1 : 17589.0
+ LORRAINE : 1 : 23547.0
+ ILE DE FRANCE : 1 : 5991.0
+ ALSACE : 1 : 8280.0
+ CENTRE : 1 : 39150.0
+ BRETAGNE : 1 : 27207.0
+ PAYS DE LA LOIRE : 1 : 32081.0
+ BOURGOGNE : 1 : 31581.0
+ FRANCHE-COMTE : 1 : 16202.0
+ POITOU-CHARENTES : 1 : 25809.0
+ AUVERGNE : 1 : 26012.0
+ RHONE-ALPES : 1 : 43698.0
+ LIMOUSIN : 1 : 16942.0
+ AQUITAINE : 1 : 41308.0
+ PROVENCE-ALPES-COTE D'AZUR : 1 : 31399.0
+ MIDI-PYRENEES : 1 : 45347.0
+ LANGUEDOC-ROUSSILLON : 1 : 27375.0
+ CORSE : 1 : 8679.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_POPULATION.txt
new file mode 100644
index 0000000..b65510a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/FRANCE_POPULATION.txt
@@ -0,0 +1,22 @@
+ NORD - PAS-DE-CALAIS : 1 : 3967000
+ PICARDIE : 1 : 1809800
+ CHAMPAGNE-ARDENNE : 1 : 1348600
+ HAUTE-NORMANDIE : 1 : 1736500
+ BASSE-NORMANDIE : 1 : 1391400
+ LORRAINE : 1 : 2307500
+ ILE DE FRANCE : 1 : 10651400
+ ALSACE : 1 : 1623800
+ CENTRE : 1 : 2370200
+ BRETAGNE : 1 : 2795300
+ PAYS DE LA LOIRE : 1 : 3058100
+ BOURGOGNE : 1 : 1610400
+ FRANCHE-COMTE : 1 : 1097800
+ POITOU-CHARENTES : 1 : 1595600
+ AUVERGNE : 1 : 1322500
+ RHONE-ALPES : 1 : 5346800
+ LIMOUSIN : 1 : 723800
+ AQUITAINE : 1 : 2794600
+ PROVENCE-ALPES-COTE D'AZUR : 1 : 4254400
+ MIDI-PYRENEES : 1 : 2430000
+ LANGUEDOC-ROUSSILLON : 1 : 2112200
+ CORSE : 1 : 249700
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_AREA.txt
new file mode 100644
index 0000000..0224e29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_AREA.txt
@@ -0,0 +1,14 @@
+Gabon	:	0	:	267667
+Estuaire [Western2] 	:	1	:	20740
+Haut-Ogooue 	:	1	:	36547
+Moyen Ogooue 	:	1	:	18535
+Ngounie [Central1]	:	1	:	37750
+Nyanga 	:	1	:	21285
+Ogooue-Ivindo [Eastern3]	:	1	:	46075
+Ogooue-Lolo 	:	1	:	25380
+Ogooue-Maritime 	:	1	:	22890
+Wouleu-Ntem 	:	1	:	38465
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_POPULATION.txt
new file mode 100644
index 0000000..d440d85
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GABON_POPULATION.txt
@@ -0,0 +1,10 @@
+Gabon	:	0	:	1424906
+Estuaire [Western2] 	:	1	:	463187
+Haut-Ogooue 	:	1	:	104301
+Moyen Ogooue 	:	1	:	42316
+Ngounie [Central1]	:	1	:	77781
+Nyanga 	:	1	:	39430
+Ogooue-Ivindo [Eastern3] 	:	1	:	48862
+Ogooue-Lolo 	:	1	:	43915
+Ogooue-Maritime 	:	1	:	97913
+Wouleu-Ntem 	:	1	:	97271
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_AREA.txt
new file mode 100644
index 0000000..69ed5a1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_AREA.txt
@@ -0,0 +1,50 @@
+Gambia	:	0	:	11300
+Banjul	:	1	:	12
+ Banjul South 	:	1	:	1
+ Banjul Central 	:	1	:	1
+ Banjul North 	:	1	:	1
+Upper River	:	1	:	2069
+ Fulladu East 	:	1	:	1
+ Kantora 	:	1	:	1
+ Wuli 	:	1	:	1
+ Sandu 	:	1	:	1
+Western	:	1	:	1764
+ Kombo North 	:	1	:	1
+ Kombo South 	:	1	:	1
+ Kombo Central 	:	1	:	1
+ Kombo East 	:	1	:	1
+ Foni Brefet 	:	1	:	1
+ Foni Bintang Karanai 	:	1	:	1
+ Foni Kansala 	:	1	:	1
+ Foni Bondali 	:	1	:	1
+ Foni Jarrol 	:	1	:	1
+Georgetown	:	1	:	2894
+ Niamina Dankunku 	:	1	:	1
+ Niamina West 	:	1	:	1
+ Niamina East 	:	1	:	1
+ Fulladu West 	:	1	:	1
+Maccarthy island	:	1	:	1
+Kanifing LGA 	:	1	:	76
+ K.U.D.C. 	:	1	:	1
+North Bank	:	1	:	2256
+ Lower Nuimi 	:	1	:	1
+ Upper Nuimi 	:	1	:	1
+ Jokadu 	:	1	:	1
+ Lower Baddibu 	:	1	:	1
+ Central Baddibu 	:	1	:	1
+ Upper Baddibu 	:	1	:	1
+Kuntaur	:	1	:	1
+ Lower Saloum 	:	1	:	1
+ Upper Saloum 	:	1	:	1
+ Nianija 	:	1	:	1
+ Niani 	:	1	:	1
+ Sami 	:	1	:	1
+Lower River	:	1	:	1618
+ Kiang West 	:	1	:	1
+ Kiang Central 	:	1	:	1
+ Kiang East 	:	1	:	1
+ Jarra West 	:	1	:	1
+ Jarra Central 	:	1	:	1
+ Jarra East 	:	1	:	1
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_POPULATION.txt
new file mode 100644
index 0000000..f3cb08b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA THE_POPULATION.txt
@@ -0,0 +1,48 @@
+Gambia	:	0	:	1641564
+Banjul	:	1	:	34828
+District of Banjul South 	:	1	:	8507
+District of Banjul Central 	:	1	:	8822
+District of Banjul North 	:	1	:	17499
+Upper River	:	1	:	183033
+Dstrct of Fulladu East 	:	1	:	98454
+Dstrct of Kantora 	:	1	:	30402
+Dstrct of Wul 	:	1	:	35856
+Dstrct of Sandu 	:	1	:	18321
+Western	:	1	:	392987
+Dstrct of Kombo North 	:	1	:	166351
+Dstrct of Kombo South 	:	1	:	62531
+Dstrct of Kombo Central 	:	1	:	84315
+Dstrct of Kombo East 	:	1	:	28146
+Dstrct of Fon Brefet 	:	1	:	11411
+Dstrct of Fon Bntang Karana 	:	1	:	15994
+Dstrct of Fon Kansala 	:	1	:	12247
+Dstrct of Fon Bondal 	:	1	:	6049
+Dstrct of Fon Jarrol 	:	1	:	5943
+Georgetown	:	1	:	106799
+Dstrct of Namna Dankunku 	:	1	:	6000
+Dstrct of Namna West 	:	1	:	6630
+Dstrct of Namna East 	:	1	:	19034
+Dstrct of Fulladu West 	:	1	:	71669
+Maccarthy island	:	1	:	3466
+Kanfng LGA 	:	1	:	322410
+Dstrct of K.U.D.C. 	:	1	:	322410
+North Bank	:	1	:	172806
+Dstrct of Lower Num 	:	1	:	44491
+Dstrct of Upper Num 	:	1	:	24940
+Dstrct of Jokadu 	:	1	:	17850
+Dstrct of Lower Baddbu 	:	1	:	15157
+Dstrct of Central Baddbu 	:	1	:	14998
+Dstrct of Upper Baddbu 	:	1	:	55370
+Kuntaur	:	1	:	79098
+Dstrct of Lower Saloum 	:	1	:	13524
+Dstrct of Upper Saloum 	:	1	:	15970
+Dstrct of Nanja 	:	1	:	8205
+Dstrct of Nan 	:	1	:	22242
+Dstrct of Sam 	:	1	:	19157
+Lower River	:	1	:	72546
+Dstrct of Kang West 	:	1	:	14711
+Dstrct of Kang Central 	:	1	:	7886
+Dstrct of Kang East 	:	1	:	6534
+Dstrct of Jarra West 	:	1	:	24416
+Dstrct of Jarra Central 	:	1	:	6494
+Dstrct of Jarra East 	:	1	:	12505
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_AREA.txt
new file mode 100644
index 0000000..f775bbd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_AREA.txt
@@ -0,0 +1,50 @@
+Gambia	:	0	:	11300
+Banjul	:	1	:	12
+ Banjul South 	:	1	:	1
+ Banjul Central 	:	1	:	1
+ Banjul North 	:	1	:	1
+Upper River	:	1	:	2069
+ Fulladu East 	:	1	:	1
+ Kantora 	:	1	:	1
+ Wuli 	:	1	:	1
+ Sandu 	:	1	:	1
+Western1	:	1	:	1764
+ Kombo North 	:	1	:	1
+ Kombo South 	:	1	:	1
+ Kombo Central 	:	1	:	1
+ Kombo East 	:	1	:	1
+ Foni Brefet 	:	1	:	1
+ Foni Bintang Karanai 	:	1	:	1
+ Foni Kansala 	:	1	:	1
+ Foni Bondali 	:	1	:	1
+ Foni Jarrol 	:	1	:	1
+Georgetown	:	1	:	2894
+ Niamina Dankunku 	:	1	:	1
+ Niamina West 	:	1	:	1
+ Niamina East 	:	1	:	1
+ Fulladu West 	:	1	:	1
+Maccarthy island	:	1	:	1
+Kanifing LGA 	:	1	:	76
+ K.U.D.C. 	:	1	:	1
+North Bank	:	1	:	2256
+ Lower Nuimi 	:	1	:	1
+ Upper Nuimi 	:	1	:	1
+ Jokadu 	:	1	:	1
+ Lower Baddibu 	:	1	:	1
+ Central Baddibu 	:	1	:	1
+ Upper Baddibu 	:	1	:	1
+Kuntaur	:	1	:	1
+ Lower Saloum 	:	1	:	1
+ Upper Saloum 	:	1	:	1
+ Nianija 	:	1	:	1
+ Niani 	:	1	:	1
+ Sami 	:	1	:	1
+Lower River	:	1	:	1618
+ Kiang West 	:	1	:	1
+ Kiang Central 	:	1	:	1
+ Kiang East 	:	1	:	1
+ Jarra West 	:	1	:	1
+ Jarra Central 	:	1	:	1
+ Jarra East 	:	1	:	1
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_POPULATION.txt
new file mode 100644
index 0000000..852d7dc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GAMBIA_POPULATION.txt
@@ -0,0 +1,48 @@
+Gambia	:	0	:	1641564
+Banjul	:	1	:	34828
+District of Banjul South 	:	1	:	8507
+District of Banjul Central 	:	1	:	8822
+District of Banjul North 	:	1	:	17499
+Upper River	:	1	:	183033
+Dstrct of Fulladu East 	:	1	:	98454
+Dstrct of Kantora 	:	1	:	30402
+Dstrct of Wul 	:	1	:	35856
+Dstrct of Sandu 	:	1	:	18321
+Western	:	1	:	392987
+Dstrct of Kombo North 	:	1	:	166351
+Dstrct of Kombo South 	:	1	:	62531
+Dstrct of Kombo Central 	:	1	:	84315
+Dstrct of Kombo East 	:	1	:	28146
+Dstrct of Fon Brefet 	:	1	:	11411
+Dstrct of Fon Bntang Karana 	:	1	:	15994
+Dstrct of Fon Kansala 	:	1	:	12247
+Dstrct of Fon Bondal 	:	1	:	6049
+Dstrct of Fon Jarrol 	:	1	:	5943
+Georgetown	:	1	:	106799
+Dstrct of Namna Dankunku 	:	1	:	6000
+Dstrct of Namna West 	:	1	:	6630
+Dstrct of Namna East 	:	1	:	19034
+Dstrct of Fulladu West 	:	1	:	71669
+Maccarthy Island	:	1	:	3466
+Kanfng LGA 	:	1	:	322410
+Dstrct of K.U.D.C. 	:	1	:	322410
+North Bank	:	1	:	172806
+Dstrct of Lower Num 	:	1	:	44491
+Dstrct of Upper Num 	:	1	:	24940
+Dstrct of Jokadu 	:	1	:	17850
+Dstrct of Lower Baddbu 	:	1	:	15157
+Dstrct of Central Baddbu 	:	1	:	14998
+Dstrct of Upper Baddbu 	:	1	:	55370
+Kuntaur	:	1	:	79098
+Dstrct of Lower Saloum 	:	1	:	13524
+Dstrct of Upper Saloum 	:	1	:	15970
+Dstrct of Nanja 	:	1	:	8205
+Dstrct of Nan 	:	1	:	22242
+Dstrct of Sam 	:	1	:	19157
+Lower River	:	1	:	72546
+Dstrct of Kang West 	:	1	:	14711
+Dstrct of Kang Central 	:	1	:	7886
+Dstrct of Kang East 	:	1	:	6534
+Dstrct of Jarra West 	:	1	:	24416
+Dstrct of Jarra Central 	:	1	:	6494
+Dstrct of Jarra East 	:	1	:	12505
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_AREA.txt
new file mode 100644
index 0000000..75114a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_AREA.txt
@@ -0,0 +1,41 @@
+ GERMANY : 0 : 357050.0
+ SCHLESWIG-HOLSTEIN : 1 : 15721.0
+ CHEMNITZ : 1 : 1.0
+ MECKLENBURG-VORPOMMERN : 1 : 1.0
+ WESER-EMS : 1 : 14964.0
+ LUENEBURG : 1 : 15346.0
+ HAMBURG : 1 : 754.0
+ BRANDENBURG : 1 : 1.0
+ BREMEN : 1 : 404.0
+ HANNOVER : 1 : 9043.0
+ MAGDEBURG : 1 : 1.0
+ BRAUNSCHWEIG : 1 : 8093.0
+ BERLIN : 1 : 1.0
+ DETMOLD : 1 : 6514.0
+ MUENSTER : 1 : 6897.0
+ DESSAU : 1 : 1.0
+ HALLE : 1 : 1.0
+ DUESSELDORF : 1 : 5287.0
+ ARNSBERG : 1 : 7998.0
+ LEIPZIG : 1 : 1.0
+ KASSEL : 1 : 8288.0
+ THURINGEN : 1 : 1.0
+ DRESDEN : 1 : 1.0
+ KOELN : 1 : 7363.0
+ GIESSEN : 1 : 5380.0
+ KOBLENZ : 1 : 8092.0
+ UNTERFRANKEN : 1 : 8531.0
+ OBERFRANKEN : 1 : 7231.0
+ DARMSTADT : 1 : 7445.0
+ TRIER : 1 : 4925.0
+ RHEINHESSEN-PFALZ : 1 : 6829.0
+ OBERPFALZ : 1 : 9691.0
+ STUTTGART : 1 : 10557.0
+ MITTELFRANKEN : 1 : 7244.0
+ KARLSRUHE : 1 : 6919.0
+ SAARLAND : 1 : 2571.0
+ NIEDERBAYERN : 1 : 10331.0
+ OBERBAYERN : 1 : 17528.0
+ SCHWABEN : 1 : 9993.0
+ FREIBURG : 1 : 9356.0
+ TUEBINGEN : 1 : 8917.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_POPULATION.txt
new file mode 100644
index 0000000..36a2532
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GERMANY_POPULATION.txt
@@ -0,0 +1,40 @@
+ SCHLESWIG-HOLSTEIN : 1 : 2594600
+ CHEMNITZ : 1 : 246110
+ MECKLENBURG-VORPOMMERN : 1 : 1700004
+ WESER-EMS : 1 : 2169800
+ LUENEBURG : 1 : 1467400
+ HAMBURG : 1 : 1626200
+ BRANDENBURG : 1 : 74129
+ BREMEN : 1 : 673700
+ HANNOVER : 1 : 2032400
+ MAGDEBURG : 1 : 228515
+ BRAUNSCHWEIG : 1 : 1614200
+ BERLIN : 1 : 2130500
+ DETMOLD : 1 : 1849700
+ MUENSTER : 1 : 2437800
+ DESSAU : 1 : 78953
+ HALLE : 1 : 243045
+ DUESSELDORF : 1 : 5167700
+ ARNSBERG : 1 : 3685200
+ LEIPZIG : 1 : 502000
+ KASSEL : 1 : 1187700
+ THURINGEN : 1 : 2400000
+ DRESDEN : 1 : 500068
+ KOELN : 1 : 3963100
+ GIESSEN : 1 : 981500
+ KOBLENZ : 1 : 1377000
+ UNTERFRANKEN : 1 : 1234900
+ OBERFRANKEN : 1 : 1055800
+ DARMSTADT : 1 : 3491400
+ TRIER : 1 : 478000
+ RHEINHESSEN-PFALZ : 1 : 1846700
+ OBERPFALZ : 1 : 991300
+ STUTTGART : 1 : 3610000
+ MITTELFRANKEN : 1 : 1566100
+ KARLSRUHE : 1 : 2484000
+ SAARLAND : 1 : 1064900
+ NIEDERBAYERN : 1 : 1057400
+ OBERBAYERN : 1 : 3721300
+ SCHWABEN : 1 : 1593900
+ FREIBURG : 1 : 1934800
+ TUEBINGEN : 1 : 1589900
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_AREA.txt
new file mode 100644
index 0000000..6add9a1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_AREA.txt
@@ -0,0 +1,12 @@
+Ghana 	:	0		:	239460
+Ashanti  	:	1		:	24389
+Brong Ahafo 	:	1		:	39557
+Central	:	1		:	9826
+Eastern 	:	1		:	19323
+Greater Accra 	:	1		:	3245
+Northern 	:	1		:	70384
+Upper East 	:	1		:	8842
+Upper West 	:	1		:	18476
+Volta 	:	1		:	20570
+Western 	:	1		:	23921
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_POPULATION.txt
new file mode 100644
index 0000000..b1d6230
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GHANA_POPULATION.txt
@@ -0,0 +1,12 @@
+Ghana 	:	0		:	22,409,572
+Ashanti  	:	1		:	3612950
+Brong Ahafo 	:	1		:	1815408
+Central 	:	1		:	1593823
+Eastern 	:	1		:	2106696
+Greater Accra 	:	1		:	2905726
+Northern 	:	1		:	1820806
+Upper East 	:	1		:	920089
+Upper West 	:	1		:	567583
+Volta 	:	1		:	1635421
+Western 	:	1		:	1924577
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GIBRALTAR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GIBRALTAR_POPULATION.txt
new file mode 100644
index 0000000..ed44128
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GIBRALTAR_POPULATION.txt
@@ -0,0 +1 @@
+GIBRALTAR:0:28743:11497
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_AREA.txt
new file mode 100644
index 0000000..1f03664
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_AREA.txt
@@ -0,0 +1,13 @@
+ ANATOLIKI MAKEDONIA : 1 : 14155.0
+ KENTRIKI MAKEDONIA : 1 : 19149.0
+ DYTIKI MAKEDONIA : 1 : 9451.0
+ IPEIROS : 1 : 9203.0
+ THESSALIA : 1 : 13929.0
+ VOREIO AIGAIO : 1 : 3836.0
+ IONIA NISIA : 1 : 2307.0
+ STEREA ELLADA : 1 : 15653.0
+ DYTIKI ELLADA : 1 : 11337.0
+ ATTIKI : 1 : 3808.0
+ PELOPONNISOS : 1 : 15549.0
+ NOTIO AIGAIO : 1 : 5277.0
+ KRITI : 1 : 8336.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_POPULATION.txt
new file mode 100644
index 0000000..f04e817
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GREECE_POPULATION.txt
@@ -0,0 +1,13 @@
+ ANATOLIKI MAKEDONIA : 1 : 570300
+ KENTRIKI MAKEDONIA : 1 : 1737600
+ DYTIKI MAKEDONIA : 1 : 292800
+ IPEIROS : 1 : 339200
+ THESSALIA : 1 : 731200
+ VOREIO AIGAIO : 1 : 198200
+ IONIA NISIA : 1 : 191000
+ STEREA ELLADA : 1 : 578900
+ DYTIKI ELLADA : 1 : 702000
+ ATTIKI : 1 : 3806000
+ PELOPONNISOS : 1 : 605700
+ NOTIO AIGAIO : 1 : 257500
+ KRITI : 1 : 537000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_AREA.txt
new file mode 100644
index 0000000..ee2a586
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_AREA.txt
@@ -0,0 +1 @@
+GUATEMALA : 0 : 108889
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_POPULATION.txt
new file mode 100644
index 0000000..f5c05ba
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUATEMALA_POPULATION.txt
@@ -0,0 +1 @@
+GUATEMALA : 0 : 11237196
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_AREA.txt
new file mode 100644
index 0000000..5c12f73
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_AREA.txt
@@ -0,0 +1,75 @@
+GUINEA BISSAU	:	0	:	12986.625
+BAFATA	:	1	:	2323.36
+OIO	:	1	:	2093.009
+CACHEU	:	1	:	1931.224
+BISSAU	:	1	:	56.964
+TOMBALI	:	1	:	1253.052
+BOLAMA	:	1	:	607.323
+GABU	:	1	:	3484.475
+BIOMBO	:	1	:	249.476
+QUINARA	:	1	:	987.742
+CONTUBOEL	:	1	:	530.07386
+CARAVELA (UNO)	:	1	:	16.775598
+SONACO	:	1	:	306.761583
+MANSABA	:	1	:	468.135691
+CARAVELA (UNO)	:	1	:	53.984419
+CARAVELA (UNO)	:	1	:	19.245394
+FULACUNDA	:	1	:	267.656602
+PIRADA	:	1	:	381.815135
+TITE	:	1	:	221.635447
+GALOMARO	:	1	:	340.983756
+BAFATA	:	1	:	241.779925
+BUBAQUE	:	1	:	42.639039
+BUBAQUE	:	1	:	45.223419
+NHACRA	:	1	:	255.017268
+FARIM	:	1	:	606.202151
+CATIO	:	1	:	319.211685
+BOLAMA	:	1	:	39.677753
+GABU	:	1	:	1080.969075
+TITE	:	1	:	3.787644
+PRABIS	:	1	:	48.868352
+QUINHAMEL	:	1	:	145.515705
+BUBAQUE	:	1	:	28.005771
+BEDANDA	:	1	:	18.744885
+PICHE	:	1	:	751.003178
+BUBAQUE	:	1	:	4.371983
+CAIO	:	1	:	42.51609
+GAMAMUNDO	:	1	:	404.529292
+CAIO	:	1	:	2.518108
+BOE	:	1	:	963.926028
+CARAVELA (UNO)	:	1	:	1.483453
+BUBA	:	1	:	271.118902
+CANGHUNGO	:	1	:	260.060925
+BUBAQUE	:	1	:	2.30628
+BULA	:	1	:	262.749546
+BISSAU	:	1	:	56.414557
+BUBAQUE	:	1	:	5.801438
+CARAVELA (UNO)	:	1	:	2.323704
+BUBAQUE	:	1	:	11.422664
+CANGHUNGO	:	1	:	1.814433
+SAFIM	:	1	:	54.387853
+CARAVELA (UNO)	:	1	:	1.350864
+CARAVELA (UNO)	:	1	:	6.106517
+BEDANDA	:	1	:	333.360397
+CARAVELA (UNO)	:	1	:	33.077994
+BUBAQUE	:	1	:	37.18782
+CARAVELA (UNO)	:	1	:	42.23607
+CACHEU	:	1	:	391.717797
+BUBAQUE	:	1	:	115.756977
+BOLAMA	:	1	:	15.901092
+CAIO	:	1	:	91.564839
+CARAVELA (UNO)	:	1	:	8.442167
+SAO DOMINGOS	:	1	:	428.899904
+MANSOA	:	1	:	456.831884
+BISSORA	:	1	:	306.822006
+CARAVELA (UNO)	:	1	:	1.592691
+BAMBADINCA	:	1	:	318.845202
+CARAVELA (UNO)	:	1	:	13.734822
+CAIO	:	1	:	68.289004
+CARAVELA (UNO)	:	1	:	52.292182
+BUBAQUE	:	1	:	1.052375
+QUEBO	:	1	:	372.620938
+CACINE	:	1	:	207.348875
+EMPADA	:	1	:	221.659322
+XITOLE	:	1	:	487.147966
+BIGENE	:	1	:	381.093353
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_POPULATION.txt
new file mode 100644
index 0000000..6ee5d55
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA BISSAU_POPULATION.txt
@@ -0,0 +1,61 @@
+GUINEA BISSAU	:	0	:	1085777
+BAFATA	:	1	:	161726
+BIOMBO	:	1	:	78699
+BISSAU	:	1	:	152223
+BOLAMA	:	1	:	35881
+CACHEU	:	1	:	181512
+GABU	:	1	:	145395
+OIO	:	1	:	204019
+QUINARA	:	1	:	49525
+TOMBALI	:	1	:	76797
+FARIM	:	1	:	40803
+CONTUBOEL	:	1	:	26954
+PIRADA	:	1	:	29079
+PICHE	:	1	:	29079
+SONACO	:	1	:	29079
+BIGENE	:	1	:	18151
+GAMAMUNDO	:	1	:	26954
+MANSABA	:	1	:	40803
+SAO DOMINGOS	:	1	:	18151
+BAFATA	:	1	:	26954
+GABU	:	1	:	29079
+BISSORA	:	1	:	40803
+CACHEU	:	1	:	18151
+BULA	:	1	:	18151
+CANGHUNGO	:	1	:	18151
+NHACRA	:	1	:	40803
+MANSOA	:	1	:	40803
+BAMBADINCA	:	1	:	26954
+GALOMARO	:	1	:	26954
+BOE	:	1	:	29079
+CAIO	:	1	:	18151
+SAFIM	:	1	:	15739
+QUINHAMEL	:	1	:	15739
+CAIO	:	1	:	18151
+FULACUNDA	:	1	:	6190
+BISSAU	:	1	:	76111
+XITOLE	:	1	:	26954
+CANGHUNGO	:	1	:	18151
+CAIO	:	1	:	18151
+TITE	:	1	:	6190
+QUINHAMEL	:	1	:	15739
+TITE	:	1	:	6190
+TITE	:	1	:	6190
+PRABIS	:	1	:	15739
+BISSAU	:	1	:	76111
+CAIO	:	1	:	18151
+BUBA	:	1	:	6190
+QUINHAMEL	:	1	:	15739
+TITE	:	1	:	6190
+QUEBO	:	1	:	8533
+EMPADA	:	1	:	6190
+BOLAMA	:	1	:	1055
+CARAVELA (UNO)	:	1	:	1055
+EMPADA	:	1	:	6190
+BOLAMA	:	1	:	1055
+CATIO	:	1	:	8533
+BEDANDA	:	1	:	8533
+CACINE	:	1	:	8533
+CATIO	:	1	:	8533
+BUBAQUE	:	1	:	1055
+CACINE	:	1	:	8533
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_AREA.txt
new file mode 100644
index 0000000..c2022bb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_AREA.txt
@@ -0,0 +1,9 @@
+Guinea : 0 : 245857
+Boke	:	1	:	31186	
+Conakry	:	1	:		450
+Faranah	:	1	:		35581
+Kankan	:	1	:		72145
+Kindia	:	1	:		28873
+Labe	:	1	:		22869
+Mamou	:	1	:		17074  	
+Nzerekore	:	1	:		37658
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_POPULATION.txt
new file mode 100644
index 0000000..64f3e6e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUINEA_POPULATION.txt
@@ -0,0 +1,9 @@
+Guinea : 0 : 9690222
+Boke	:	1	:		760119
+Conakry	:	1	:		1092936
+Faranah	:	1	:		602845
+Kankan	:	1	:		1011644
+Kindia	:	1	:		928312
+Labe	:	1	:		799545
+Mamou	:	1	:		612218
+Nzerekore	:	1	:		1348787
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_AREA.txt
new file mode 100644
index 0000000..a1d9efe
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_AREA.txt
@@ -0,0 +1,12 @@
+Guyana	:	0	:	214970
+Barima/Waini  	:	1	:	20330
+Cuyuni/Mazaruni 	:	1	:	47193
+Demerara/Mahaica 	:	1	:	2232
+East Berbice/Corentyne 	:	1	:	36239
+Essequibo I./West D. 	:	1	:	3754
+Mahaica/Berbice 	:	1	:	4168
+Pomeroon/Supenaam 	:	1	:	6193
+Potaro/Siparuni 	:	1	:	20043
+Upper Demerara/Berbice 	:	1	:	17074
+Upper Takutu/U.Essequibo 	:	1	:	57766
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_POPULATION.txt
new file mode 100644
index 0000000..e361a42
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/GUYANA_POPULATION.txt
@@ -0,0 +1,11 @@
+Guyana	:	0	:	767245
+Barima/Waini  	:	1	:	18302
+Cuyuni/Mazaruni 	:	1	:	14682
+Demerara/Mahaica 	:	1	:	294690
+East Berbice/Corentyne 	:	1	:	141445
+Essequibo I./West D. 	:	1	:	95220
+Mahaica/Berbice 	:	1	:	51277
+Pomeroon/Supenaam 	:	1	:	43194
+Potaro/Siparuni 	:	1	:	5574
+Upper Demerara/Berbice 	:	1	:	39272
+Upper Takutu/U.Essequibo 	:	1	:	14947
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_AREA.txt
new file mode 100644
index 0000000..6fecda7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_AREA.txt
@@ -0,0 +1 @@
+HONDURAS : 0 : 112492
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_POPULATION.txt
new file mode 100644
index 0000000..f0258bd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/HONDURAS_POPULATION.txt
@@ -0,0 +1 @@
+HONDURAS : 0 : 6535344
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_AREA.txt
new file mode 100644
index 0000000..cbcd461
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_AREA.txt
@@ -0,0 +1,19 @@
+ Borsod-Abauj-Zemplen : 1 : 7247.0
+ Szabolcs-Szatar-Bereg : 1 : 5937.0
+ Nograd : 1 : 2544.0
+ Heves : 1 : 3637.0
+ Pest : 1 : 6394.0
+ Gy”r-Moson-Sopron : 1 : 4012.0
+ Hajdu-Bihar : 1 : 6211.0
+ Komarom-Esztergom : 1 : 2251.0
+ Jasz-Nagykun-Szolnok : 1 : 5607.0
+ Fejer : 1 : 4373.0
+ Veszprem : 1 : 4689.0
+ Vas : 1 : 3336.0
+ Bekes : 1 : 5631.0
+ Bacs-Kiskun : 1 : 8362.0
+ Zala : 1 : 3784.0
+ Somogy : 1 : 6036.0
+ Tolna : 1 : 3703.0
+ Csongrad : 1 : 4263.0
+ Baranya : 1 : 4487.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_POPULATION.txt
new file mode 100644
index 0000000..627142d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/HUNGARY_POPULATION.txt
@@ -0,0 +1,19 @@
+ Borsod-Abauj-Zemplen : 1 : 761963
+ Szabolcs-Szatar-Bereg : 1 : 572301
+ Nograd : 1 : 227137
+ Heves : 1 : 334408
+ Pest : 1 : 949749
+ Gy”r-Moson-Sopron : 1 : 424439
+ Hajdu-Bihar : 1 : 548728
+ Komarom-Esztergom : 1 : 315208
+ Jasz-Nagykun-Szolnok : 1 : 426491
+ Fejer : 1 : 420628
+ Veszprem : 1 : 382153
+ Vas : 1 : 275944
+ Bekes : 1 : 411887
+ Bacs-Kiskun : 1 : 544748
+ Zala : 1 : 306398
+ Somogy : 1 : 344708
+ Tolna : 1 : 253675
+ Csongrad : 1 : 438842
+ Baranya : 1 : 418642
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_AREA.txt
new file mode 100644
index 0000000..9dbce75
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_AREA.txt
@@ -0,0 +1 @@
+ Island : 1 : 103000.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_POPULATION.txt
new file mode 100644
index 0000000..91f20af
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ICELAND_POPULATION.txt
@@ -0,0 +1 @@
+ Island : 1 : 252746
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_AREA.txt
new file mode 100644
index 0000000..ca644e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_AREA.txt
@@ -0,0 +1,38 @@
+India	:	0	:	3287590
+ Jammu and Kashmir  	:	1	:	101387
+Himachal Pradesh 	:	1	:	55673
+Punjab 	:	1	:	50362
+Chandigarh	:	1	:	114
+Uttaranchal 	:	1	:	53483
+Haryana 	:	1	:	44212
+Delhi	:	1	:	1483
+Rajasthan 	:	1	:	342239
+Uttar Pradesh 	:	1	:	240928
+Bihar 	:	1	:	94163
+Sikkim 	:	1	:	7096
+Arunachal Pradesh 	:	1	:	83743
+Nagaland 	:	1	:	16579
+Manipur 	:	1	:	22327
+Mizoram 	:	1	:	21081
+Tripura 	:	1	:	10486
+Meghalaya 	:	1	:	22429
+Assam 	:	1	:	78438
+West Bengal 	:	1	:	88752
+Jharkhand 	:	1	:	79714
+Orissa 	:	1	:	155707
+Chhattisgarh 	:	1	:	135191
+Madhya Pradesh 	:	1	:	308245
+Gujarat 	:	1	:	196022
+Daman and Diu	:	1	:	112
+Dadra and Nagar Haveli	:	1	:	491
+Maharashtra 	:	1	:	307713
+Andhra Pradesh 	:	1	:	275069
+Karnataka 	:	1	:	191791
+Goa 	:	1	:	3702
+Lakshadweep	:	1	:	32
+Kerala 	:	1	:	38863
+Tamil Nadu 	:	1	:	130058
+Pondicherry 	:	1	:	480
+Andaman & Nicobar	:	1	:	8249
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_POPULATION.txt
new file mode 100644
index 0000000..386317a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDIA_POPULATION.txt
@@ -0,0 +1,36 @@
+India	:	0	:	1095351995
+ Jammu and Kashmir  	:	1	:	10941000
+Himachal Pradesh 	:	1	:	6455000
+Punjab 	:	1	:	26059000
+Chandigarh	:	1	:	1103000
+Uttaranchal 	:	1	:	9219000
+Haryana 	:	1	:	23314000
+Delhi	:	1	:	16021000
+Rajasthan 	:	1	:	62276000
+Uttar Pradesh 	:	1	:	183282000
+Bihar 	:	1	:	90752000
+Sikkim 	:	1	:	576000
+Arunachal Pradesh 	:	1	:	1169000
+Nagaland 	:	1	:	2119000
+Manipur 	:	1	:	2308000
+Mizoram 	:	1	:	946000
+Tripura 	:	1	:	3407000
+Meghalaya 	:	1	:	2470000
+Assam 	:	1	:	28665000
+West Bengal 	:	1	:	85216000
+Jharkhand 	:	1	:	29299000
+Orissa 	:	1	:	38887000
+Chhattisgarh 	:	1	:	22594000
+Madhya Pradesh 	:	1	:	66390000
+Gujarat 	:	1	:	54979000
+Daman and Diu	:	1	:	216000
+Dadra and Nagar Haveli	:	1	:	266000
+Maharashtra 	:	1	:	104804000
+Andhra Pradesh 	:	1	:	80712000
+Karnataka 	:	1	:	56258000
+Goa 	:	1	:	1492000
+Lakshadweep	:	1	:	72000
+Kerala 	:	1	:	33265000
+Tamil Nadu 	:	1	:	65135000
+Pondicherry 	:	1	:	1098000
+Andaman & Nicobar	:	1	:	419000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_AREA.txt
new file mode 100644
index 0000000..7c8e483
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_AREA.txt
@@ -0,0 +1,35 @@
+Indonesia	:	0	:	1919440
+Aceh  [Nanggroe Aceh Darussalam]   	:	1	:	55390
+ Sumatera Utara 	:	1	:	71680
+Sumatera Barat 	:	1	:	42297
+ Riau 	:	1	:	94561
+ Jambi 	:	1	:	53436
+ Sumatera Selatan 	:	1	:	74795
+ Bengkulu 	:	1	:	19789
+ Lampung 	:	1	:	35385
+ Kepulauan Bangka Belitung 	:	1	:	34459
+ Kepulauan Riau 	:	1	:	0
+DKI Jakarta 	:	1	:	664
+ Jawa Barat 	:	1	:	34817
+ Jawa Tengah 	:	1	:	32544
+ D.I Yogyakarta 	:	1	:	3186
+ Jawa Timur 	:	1	:	47923
+ Banten 	:	1	:	8801
+ Bali 	:	1	:	5633
+ Nusa Tenggara Barat 	:	1	:	20153
+ Nusa Tenggara Timur 	:	1	:	47350
+ Timor Timur : 1 : 30777
+ Kalimantan Barat 	:	1	:	146807
+ Kalimantan Tengah 	:	1	:	153564
+ Kalimantan Selatan 	:	1	:	36535
+ Kalimantan Timur 	:	1	:	210985
+ Sulawesi Utara 	:	1	:	15926
+ Sulawesi Tengah 	:	1	:	63689
+ Sulawesi Selatan 	:	1	:	62641
+ Sulawesi Tenggara 	:	1	:	38140
+ Gorontalo 	:	1	:	11562
+ Sulawesi Barat 	:	1	:	16796
+ Maluku 	:	1	:	51830
+ Maluku Utara 	:	1	:	26041
+ Irian Jaya 	:	1	:	421981
+ Papua 	:	1	:	421981
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_POPULATION.txt
new file mode 100644
index 0000000..07a0503
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/INDONESIA_POPULATION.txt
@@ -0,0 +1,35 @@
+Indonesia	:	0	:	245452739
+ Aceh [Nanggroe Aceh Darussalam]   	:	1	:	4037900
+ Sumatera Utara 	:	1	:	12452800
+Sumatera Barat 	:	1	:	4402100
+ Riau 	:	1	:	6108400
+ Jambi 	:	1	:	2657300
+ Sumatera Selatan 	:	1	:	7526800
+ Bengkulu 	:	1	:	1744200
+ Lampung 	:	1	:	7291300
+ Kepulauan Bangka Belitung 	:	1	:	971500
+ Kepulauan Riau 	:	1	:	0
+DKI Jakarta 	:	1	:	8699600
+ Jawa Barat 	:	1	:	39140812
+ Jawa Tengah 	:	1	:	31887200
+ D.I Yogyakarta 	:	1	:	3257000
+ Jawa Timur 	:	1	:	35550400
+ Banten 	:	1	:	9309000
+ Bali 	:	1	:	3378500
+ Nusa Tenggara Barat 	:	1	:	4355500
+ Nusa Tenggara Timur 	:	1	:	4127300
+ Timor Timur : 1 : 800000
+ Kalimantan Barat 	:	1	:	4394300
+ Kalimantan Tengah 	:	1	:	2137900
+ Kalimantan Selatan 	:	1	:	3240100
+ Kalimantan Timur 	:	1	:	2810900
+ Sulawesi Utara 	:	1	:	2141900
+ Sulawesi Tengah 	:	1	:	2404000
+ Sulawesi Selatan 	:	1	:	8493700
+ Sulawesi Tenggara 	:	1	:	2085900
+ Gorontalo 	:	1	:	872200
+ Sulawesi Barat 	:	1	:	0
+ Maluku 	:	1	:	1172000
+ Maluku Utara 	:	1	:	780300
+ Irian Jaya 	:	1	:	701435
+ Papua 	:	1	:	1945054
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_AREA.txt
new file mode 100644
index 0000000..baeb796
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_AREA.txt
@@ -0,0 +1,19 @@
+iraq	:	0	:	437072
+al anbar	:	1	:	137808
+al-basrah	:	1	:	19070
+Al-muthannia	:	1	:	51740
+Al-Qadisiyah	:	1	:	8153
+an-najaf	:	1	:	28824
+Arbil	:	1	:	15074
+Sulaymaniyah	:	1	:	17023
+Kirkuk	:	1	:	9679
+Babil [Babylon]	:	1	:	5603
+Baghdad	:	1	:	4071
+Dihok	:	1	:	6553
+Nasiriyah	:	1	:	12900
+Diyala	:	1	:	17685
+Karbala	:	1	:	5034
+Misan	:	1	:	16072
+Neineva	:	1	:	37323
+Salahuddin	:	1	:	24363
+Wasit	:	1	:	17153
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_POPULATION.txt
new file mode 100644
index 0000000..ae64f42
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAK_POPULATION.txt
@@ -0,0 +1,19 @@
+iraq	:	0	:	26783383
+al anbar	:	1	:	1230140
+al-basrah	:	1	:	1880176
+Al-muthannia	:	1	:	537658
+Al-Qadisiyah	:	1	:	886594
+an-najaf	:	1	:	929995
+Arbil	:	1	:	1313719
+Sulaymaniyah	:	1	:	1546653
+Kirkuk	:	1	:	848007
+Babil [Babylon]	:	1	:	1385782
+Baghdad	:	1	:	6024299
+Dihok	:	1	:	782489
+Nasiriyah	:	1	:	1472098
+Diyala	:	1	:	1224358
+Karbala	:	1	:	723840
+Misan	:	1	:	803225
+Neineva	:	1	:	2453116
+Salahuddin	:	1	:	942314
+Wasit	:	1	:	913386
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_AREA.txt
new file mode 100644
index 0000000..b17e5ed
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_AREA.txt
@@ -0,0 +1,33 @@
+Iran	:	0	:	1648000
+Bakhtaran : 1 : 24434
+North and South Horazan [Horasan] : 1 : 97989
+Ardebil	:	1	:	17800
+Bushehr	:	1	:	22743
+Chaharmahal and Bakhtiar	:	1	:	16332
+east azarbayejan	:	1	:	45650
+Esfahan	:	1	:	107029
+Fars	:	1	:	122608
+Gilan	:	1	:	14042
+Golestan	:	1	:	20195
+Hamadan	:	1	:	19368
+Hormozgan	:	1	:	70669
+Ilam	:	1	:	20133
+Kerman	:	1	:	180836
+Kermanshah	:	1	:	24998
+Khuzestan	:	1	:	64055
+Kohgiluyeh & Boyer ahmad 	:	1	:	15504
+Kordestan	:	1	:	29137
+Lorestan	:	1	:	28294
+Markazi	:	1	:	29130
+Mazandaran	:	1	:	23701
+North Khorasan	:	1	:	28434
+Khorasan-e-Razavi	:	1	:	144681
+Qazvin	:	1	:	15549
+Qom	:	1	:	11526
+Semnan	:	1	:	97491
+Sistan and Baluchestan	:	1	:	181785
+South Khorasan	:	1	:	69555
+Tehran	:	1	:	18814
+West Azarbayejan	:	1	:	37437
+Yazd	:	1	:	129285
+Zanjan	:	1	:	21773
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_POPULATION.txt
new file mode 100644
index 0000000..aebb4ed
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAN_POPULATION.txt
@@ -0,0 +1,33 @@
+Iran	:	0	:	68688433
+Bakhtaran : 1 : 690000
+North and South Horazan [Horasan] : 1 : 1297136
+Ardebil	:	1	:	1257624
+Bushehr	:	1	:	816115
+Chaharmahal and Bakhtiar	:	1	:	842002
+east azarbayejan	:	1	:	3500183
+Esfahan	:	1	:	4454595
+Fars	:	1	:	4385869
+Gilan	:	1	:	2410523
+Golestan	:	1	:	1637063
+Hamadan	:	1	:	1738772
+Hormozgan	:	1	:	1314667
+Ilam	:	1	:	545093
+Kerman	:	1	:	2432927
+Kermanshah	:	1	:	1938060
+Khuzestan	:	1	:	4345607
+Kohgiluyeh & Boyer ahmad 	:	1	:	695099
+Kordestan	:	1	:	1574118
+Lorestan	:	1	:	1758628
+Markazi	:	1	:	1361394
+Mazandaran	:	1	:	2818831
+North Khorasan	:	1	:	786918
+Khorasan-e-Razavi	:	1	:	5202770
+Qazvin	:	1	:	1166861
+Qom	:	1	:	1064456
+Semnan	:	1	:	589512
+Sistan and Baluchestan	:	1	:	2290076
+South Khorasan	:	1	:	510218
+Tehran	:	1	:	12150742
+West Azarbayejan	:	1	:	2949426
+Yazd	:	1	:	958318
+Zanjan	:	1	:	970946
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_AREA.txt
new file mode 100644
index 0000000..e9eb965
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_AREA.txt
@@ -0,0 +1,20 @@
+iraq	:	0	:	437072
+al anbar	:	1	:	137808
+al-basrah	:	1	:	19070
+Al-muthannia	:	1	:	51740
+Al-Qadisiyah	:	1	:	8153
+an-najaf	:	1	:	28824
+Arbil	:	1	:	15074
+Sulaymaniyah	:	1	:	17023
+Kirkuk [At-Tamim]	:	1	:	9679
+Babil [Babylon]	:	1	:	5603
+Baghdad	:	1	:	4071
+Dihok	:	1	:	6553
+Nasiriyah [Dhi-Qar]	:	1	:	12900
+Diyala	:	1	:	17685
+Karbala	:	1	:	5034
+Misan	:	1	:	16072
+Neineva	:	1	:	37323
+Salahuddin	:	1	:	24363
+Wasit	:	1	:	17153
+IRQ/SAU Neutral Zone : 1 : 7044
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_POPULATION.txt
new file mode 100644
index 0000000..d631eb2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRAQ_POPULATION.txt
@@ -0,0 +1,20 @@
+iraq	:	0	:	26783383
+Nasiriyah [Dhi-Qar]	:	1	:	1472098
+Kirkuk [At-Tamim]	:	1	:	848007
+Babil [Babylon]	:	1	:	1385782
+IRQ/SAU Neutral Zone : 1 : 0
+al anbar	:	1	:	1230140
+al-basrah	:	1	:	1880176
+Al-muthannia	:	1	:	537658
+Al-Qadisiyah	:	1	:	886594
+an-najaf	:	1	:	929995
+Arbil	:	1	:	1313719
+Sulaymaniyah	:	1	:	1546653
+Baghdad	:	1	:	6024299
+Dihok	:	1	:	782489
+Diyala	:	1	:	1224358
+Karbala	:	1	:	723840
+Misan	:	1	:	803225
+Neineva	:	1	:	2453116
+Salahuddin	:	1	:	942314
+Wasit	:	1	:	913386
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_AREA.txt
new file mode 100644
index 0000000..f86f0c3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_AREA.txt
@@ -0,0 +1 @@
+ IRELAND : 1 : 68895.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_POPULATION.txt
new file mode 100644
index 0000000..0c2effb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IRELAND_POPULATION.txt
@@ -0,0 +1 @@
+ IRELAND : 1 : 3506500
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_AREA.txt
new file mode 100644
index 0000000..c3a2638
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_AREA.txt
@@ -0,0 +1,20 @@
+ TRENTINO-ALTO ADIGE : 1 : 13620.0
+ VENETO : 1 : 18363.0
+ FRIULI-VENEZIA GIULIA : 1 : 7846.0
+ LOMBARDIA : 1 : 23859.0
+ PIEMONTE : 1 : 25398.0
+ VALLE D'AOSTA : 1 : 3262.0
+ EMILIA-ROMAGNA : 1 : 22123.0
+ LIGURIA : 1 : 5416.0
+ TOSCANA : 1 : 22992.0
+ MARCHE : 1 : 9693.0
+ UMBRIA : 1 : 8456.0
+ ABRUZZI : 1 : 10794.0
+ LAZIO : 1 : 17203.0
+ PUGLIA : 1 : 19347.0
+ MOLISE : 1 : 4437.0
+ CAMPANIA : 1 : 13595.0
+ SARDEGNA : 1 : 24090.0
+ BASILICATA : 1 : 9992.0
+ CALABRIA : 1 : 15080.0
+ SICILIA : 1 : 25707.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_POPULATION.txt
new file mode 100644
index 0000000..9d2e166
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ITALY_POPULATION.txt
@@ -0,0 +1,20 @@
+ TRENTINO-ALTO ADIGE : 1 : 891400
+ VENETO : 1 : 4398100
+ FRIULI-VENEZIA GIULIA : 1 : 1202900
+ LOMBARDIA : 1 : 8939400
+ PIEMONTE : 1 : 4357600
+ VALLE D'AOSTA : 1 : 116000
+ EMILIA-ROMAGNA : 1 : 3928700
+ LIGURIA : 1 : 1727200
+ TOSCANA : 1 : 3562500
+ MARCHE : 1 : 1435600
+ UMBRIA : 1 : 822800
+ ABRUZZI : 1 : 1272400
+ LAZIO : 1 : 5191500
+ PUGLIA : 1 : 4081500
+ MOLISE : 1 : 336500
+ CAMPANIA : 1 : 5853900
+ SARDEGNA : 1 : 1664400
+ BASILICATA : 1 : 624500
+ CALABRIA : 1 : 2153700
+ SICILIA : 1 : 5196800
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_AREA.txt
new file mode 100644
index 0000000..bd8c423
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_AREA.txt
@@ -0,0 +1,70 @@
+Ivory Coast	:	0	:	322460
+Agnebi [Agnibilekro]  	:	1	:	9080
+Bafng 	:	1	:	8720
+Sassandra 	:	1	:	25800
+Denguele 	:	1	:	20600
+Montagnes 	:	1	:	16600
+Fromager 	:	1	:	6900
+Haut-Sassandra 	:	1	:	15200
+Lacs 	:	1	:	8940
+Lagunes 	:	1	:	14200
+Marahoue 	:	1	:	8500
+Moyen-Cavally 	:	1	:	14150
+Moyen-Comoe 	:	1	:	6900
+Nz-Comoe 	:	1	:	19560
+Savanes 	:	1	:	40323
+Sud-Bandama 	:	1	:	10650
+Sud-Comoe 	:	1	:	6250
+Vallee du Bandama 	:	1	:	28530
+Worodougou 	:	1	:	21900
+Zanzan 	:	1	:	38000
+ABENGOUROU	:	1	:	6580
+ABIDJAN	:	1	:	6580
+ABOISSO	:	1	:	6580
+ADZOPE	:	1	:	6580
+AGBOVILLE	:	1	:	6580
+AGNIBILEKRO	:	1	:	6580
+BANGOLO	:	1	:	6580
+BEOUMI	:	1	:	6580
+BIANKOUMA	:	1	:	6580
+BONDOUKOU	:	1	:	6580
+BONGOUANOU	:	1	:	6580
+BOUAFLE	:	1	:	6580
+BOUAKE	:	1	:	6580
+BOUNA	:	1	:	6580
+BOUNDIALI	:	1	:	6580
+DABAKALA	:	1	:	6580
+DALOA	:	1	:	6580
+DANANE	:	1	:	6580
+DAOUKRO	:	1	:	6580
+DIMBOKRO	:	1	:	6580
+DIVO	:	1	:	6580
+DUEKOUE	:	1	:	6580
+FERKESSEDOUGOU	:	1	:	6580
+GAGNOA	:	1	:	6580
+GRAND-LAHOU	:	1	:	6580
+GUIGLO	:	1	:	6580
+ISSIA	:	1	:	6580
+KATIOLA	:	1	:	6580
+KORHOGO	:	1	:	6580
+LAKOTA	:	1	:	6580
+M'BAHIAKRO	:	1	:	6580
+MAN	:	1	:	6580
+MANKONO	:	1	:	6580
+ODIENNE	:	1	:	6580
+OUME	:	1	:	6580
+SAKASSOU	:	1	:	6580
+SAN-PEDRO	:	1	:	6580
+SEGUELA	:	1	:	6580
+SINFRA	:	1	:	6580
+SOUBRE	:	1	:	6580
+TABOU	:	1	:	6580
+TANDA	:	1	:	6580
+TENGRELA	:	1	:	6580
+TIASSALE	:	1	:	6580
+TOUBA	:	1	:	6580
+TOUMODI	:	1	:	6580
+VAVOUA	:	1	:	6580
+YAMOUSSOUKRO	:	1	:	6580
+ZUENOULA	:	1	:	6580
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_POPULATION.txt
new file mode 100644
index 0000000..32fa8a0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORY COAST_POPULATION.txt
@@ -0,0 +1,70 @@
+Ivory Coast	:	0	:	17654843
+Agnebi  [Agnibilekro] 	:	1	:	720900
+Bafing 	:	1	:	178400
+Sassandra 	:	1	:	443200
+Denguele 	:	1	:	277000
+Montagnes 	:	1	:	1125800
+Fromager 	:	1	:	679900
+Haut-Sassandra 	:	1	:	1186600
+Lacs 	:	1	:	597500
+Lagunes 	:	1	:	4210200
+Marahoue 	:	1	:	651700
+Moyen-Cavally 	:	1	:	443200
+Moyen-Comoe 	:	1	:	488200
+Nzi-Comoe 	:	1	:	909800
+Savanes 	:	1	:	1215100
+Sud-Bandama 	:	1	:	826300
+Sud-Comoe 	:	1	:	536500
+Vallee du Bandama 	:	1	:	1335500
+Worodougou 	:	1	:	400200
+Zanzan 	:	1	:	839000
+ABENGOUROU	:	1	:	58974
+ABIDJAN	:	1	:	1934342
+ABOISSO	:	1	:	21348
+ADZOPE	:	1	:	35085
+AGBOVILLE	:	1	:	46359
+AGNIBILEKRO	:	1	:	24413
+BANGOLO	:	1	:	10042
+BEOUMI	:	1	:	13070
+BIANKOUMA	:	1	:	12965
+BONDOUKOU	:	1	:	33051
+BONGOUANOU	:	1	:	19506
+BOUAFLE	:	1	:	34562
+BOUAKE	:	1	:	332999
+BOUNA	:	1	:	21154
+BOUNDIALI	:	1	:	22042
+DABAKALA	:	1	:	23340
+DALOA	:	1	:	122933
+DANANE	:	1	:	30506
+DAOUKRO	:	1	:	22777
+DIMBOKRO	:	1	:	38183
+DIVO	:	1	:	72494
+DUEKOUE	:	1	:	26759
+FERKESSEDOUGOU	:	1	:	35155
+GAGNOA	:	1	:	85563
+GRAND-LAHOU	:	1	:	13400
+GUIGLO	:	1	:	22187
+ISSIA	:	1	:	28525
+KATIOLA	:	1	:	33813
+KORHOGO	:	1	:	109665
+LAKOTA	:	1	:	21575
+M'BAHIAKRO	:	1	:	10782
+MAN	:	1	:	88294
+MANKONO	:	1	:	10826
+ODIENNE	:	1	:	28266
+OUME	:	1	:	29521
+SAKASSOU	:	1	:	22200
+SAN-PEDRO	:	1	:	70601
+SEGUELA	:	1	:	29003
+SINFRA	:	1	:	33971
+SOUBRE	:	1	:	33162
+TABOU	:	1	:	9714
+TANDA	:	1	:	11430
+TENGRELA	:	1	:	22268
+TIASSALE	:	1	:	19894
+TOUBA	:	1	:	15593
+TOUMODI	:	1	:	22114
+VAVOUA	:	1	:	17717
+YAMOUSSOUKRO	:	1	:	110013
+ZUENOULA	:	1	:	19523
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_AREA.txt
new file mode 100644
index 0000000..6255ff4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_AREA.txt
@@ -0,0 +1,69 @@
+Ivory Coast	:	0	:	322460
+Agnebi :	1	:	9080
+Bafng 	:	1	:	8720
+Sassandra 	:	1	:	25800
+Denguele 	:	1	:	20600
+Montagnes 	:	1	:	16600
+Fromager 	:	1	:	6900
+Haut-Sassandra 	:	1	:	15200
+Lacs 	:	1	:	8940
+Lagunes 	:	1	:	14200
+Marahoue 	:	1	:	8500
+Moyen-Cavally 	:	1	:	14150
+Moyen-Comoe 	:	1	:	6900
+Nz-Comoe 	:	1	:	19560
+Savanes 	:	1	:	40323
+Sud-Bandama 	:	1	:	10650
+Sud-Comoe 	:	1	:	6250
+Vallee du Bandama 	:	1	:	28530
+Worodougou 	:	1	:	21900
+Zanzan 	:	1	:	38000
+ABENGOUROU	:	1	:	6580
+ABIDJAN	:	1	:	6580
+ABOISSO	:	1	:	6580
+ADZOPE	:	1	:	6580
+AGBOVILLE	:	1	:	6580
+AGNIBILEKRO	:	1	:	6580
+BANGOLO	:	1	:	6580
+BEOUMI	:	1	:	6580
+BIANKOUMA	:	1	:	6580
+BONDOUKOU	:	1	:	6580
+BONGOUANOU	:	1	:	6580
+BOUAFLE	:	1	:	6580
+BOUAKE	:	1	:	6580
+BOUNA	:	1	:	6580
+BOUNDIALI	:	1	:	6580
+DABAKALA	:	1	:	6580
+DALOA	:	1	:	6580
+DANANE	:	1	:	6580
+DAOUKRO	:	1	:	6580
+DIMBOKRO	:	1	:	6580
+DIVO	:	1	:	6580
+DUEKOUE	:	1	:	6580
+FERKESSEDOUGOU	:	1	:	6580
+GAGNOA	:	1	:	6580
+GRAND-LAHOU	:	1	:	6580
+GUIGLO	:	1	:	6580
+ISSIA	:	1	:	6580
+KATIOLA	:	1	:	6580
+KORHOGO	:	1	:	6580
+LAKOTA	:	1	:	6580
+M'BAHIAKRO	:	1	:	6580
+MAN	:	1	:	6580
+MANKONO	:	1	:	6580
+ODIENNE	:	1	:	6580
+OUME	:	1	:	6580
+SAKASSOU	:	1	:	6580
+SAN-PEDRO	:	1	:	6580
+SEGUELA	:	1	:	6580
+SINFRA	:	1	:	6580
+SOUBRE	:	1	:	6580
+TABOU	:	1	:	6580
+TANDA	:	1	:	6580
+TENGRELA	:	1	:	6580
+TIASSALE	:	1	:	6580
+TOUBA	:	1	:	6580
+TOUMODI	:	1	:	6580
+VAVOUA	:	1	:	6580
+YAMOUSSOUKRO	:	1	:	6580
+ZUENOULA	:	1	:	6580
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_POPULATION.txt
new file mode 100644
index 0000000..6224f81
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/IVORYCOAST_POPULATION.txt
@@ -0,0 +1,69 @@
+Ivory Coast	:	0	:	17654843
+Agnebi :	1	:	720900
+Bafing 	:	1	:	178400
+Sassandra 	:	1	:	443200
+Denguele 	:	1	:	277000
+Montagnes 	:	1	:	1125800
+Fromager 	:	1	:	679900
+Haut-Sassandra 	:	1	:	1186600
+Lacs 	:	1	:	597500
+Lagunes 	:	1	:	4210200
+Marahoue 	:	1	:	651700
+Moyen-Cavally 	:	1	:	443200
+Moyen-Comoe 	:	1	:	488200
+Nzi-Comoe 	:	1	:	909800
+Savanes 	:	1	:	1215100
+Sud-Bandama 	:	1	:	826300
+Sud-Comoe 	:	1	:	536500
+Vallee du Bandama 	:	1	:	1335500
+Worodougou 	:	1	:	400200
+Zanzan 	:	1	:	839000
+ABENGOUROU	:	1	:	58974
+ABIDJAN	:	1	:	1934342
+ABOISSO	:	1	:	21348
+ADZOPE	:	1	:	35085
+AGBOVILLE	:	1	:	46359
+AGNIBILEKRO	:	1	:	24413
+BANGOLO	:	1	:	10042
+BEOUMI	:	1	:	13070
+BIANKOUMA	:	1	:	12965
+BONDOUKOU	:	1	:	33051
+BONGOUANOU	:	1	:	19506
+BOUAFLE	:	1	:	34562
+BOUAKE	:	1	:	332999
+BOUNA	:	1	:	21154
+BOUNDIALI	:	1	:	22042
+DABAKALA	:	1	:	23340
+DALOA	:	1	:	122933
+DANANE	:	1	:	30506
+DAOUKRO	:	1	:	22777
+DIMBOKRO	:	1	:	38183
+DIVO	:	1	:	72494
+DUEKOUE	:	1	:	26759
+FERKESSEDOUGOU	:	1	:	35155
+GAGNOA	:	1	:	85563
+GRAND-LAHOU	:	1	:	13400
+GUIGLO	:	1	:	22187
+ISSIA	:	1	:	28525
+KATIOLA	:	1	:	33813
+KORHOGO	:	1	:	109665
+LAKOTA	:	1	:	21575
+M'BAHIAKRO	:	1	:	10782
+MAN	:	1	:	88294
+MANKONO	:	1	:	10826
+ODIENNE	:	1	:	28266
+OUME	:	1	:	29521
+SAKASSOU	:	1	:	22200
+SAN-PEDRO	:	1	:	70601
+SEGUELA	:	1	:	29003
+SINFRA	:	1	:	33971
+SOUBRE	:	1	:	33162
+TABOU	:	1	:	9714
+TANDA	:	1	:	11430
+TENGRELA	:	1	:	22268
+TIASSALE	:	1	:	19894
+TOUBA	:	1	:	15593
+TOUMODI	:	1	:	22114
+VAVOUA	:	1	:	17717
+YAMOUSSOUKRO	:	1	:	110013
+ZUENOULA	:	1	:	19523
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_AREA.txt
new file mode 100644
index 0000000..e6f96ae
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_AREA.txt
@@ -0,0 +1,60 @@
+Japan	:	0	:	377835
+Hokkaido   	:	1	:	83453
+Aomori  	:	1	:	9606
+Iwate  	:	1	:	15278
+Miyagi  	:	1	:	7285
+Akita  	:	1	:	11612
+Yamagata  	:	1	:	9323
+Fukushima  	:	1	:	13782
+Ibaraki  	:	1	:	6096
+Tochigi  	:	1	:	6408
+Gumma  	:	1	:	6363
+Saitama  	:	1	:	3797
+Chiba  	:	1	:	5156
+Chubu	:	1	: 4450
+Chugoku	:	1	: 4200
+Tokyo -to 	:	1	:	2197
+Kanagawa  	:	1	:	2415
+Niigata  	:	1	:	12582
+Toyama  	:	1	:	4247
+Ishikawa  	:	1	:	4185
+Fukui  	:	1	:	4189
+Yamanashi  	:	1	:	4465
+Nagano  	:	1	:	13585
+Gifu  	:	1	:	10598
+Shizuoka  	:	1	:	7779
+Aichi  	:	1	:	5156
+Mie  	:	1	:	5776
+Shiga  	:	1	:	4017
+Kyoto  	:	1	:	4613
+Osaka  	:	1	:	1893
+Hyogo  	:	1	:	8392
+Nara  	:	1	:	3691
+Wakayama  	:	1	:	4726
+Tottori  	:	1	:	3507
+Shimane  	:	1	:	6707
+Okayama  	:	1	:	7112
+Hiroshima  	:	1	:	8477
+Yamaguchi  	:	1	:	6110
+Tokushima  	:	1	:	4145
+Kagawa  	:	1	:	1876
+Ehime  	:	1	:	5676
+Kochi  	:	1	:	7105
+Kanto	:	1	: 4100
+Kinki	:	1	: 5150
+Kyushu	:	1	: 4500
+Fukuoka  	:	1	:	4971
+Saga  	:	1	:	2439
+Nagasaki  	:	1	:	4092
+Kumamoto  	:	1	:	7404
+Oita  	:	1	:	6338
+Miyazaki  	:	1	:	7734
+Kagoshima  	:	1	:	9187
+Okinawa  	:	1	:	2271
+Hokuriku	:	1	: 5300
+Ryukiu-Islands	:	1	: 4500
+Shikoku	:	1	: 6120
+Tohoku :	1	: 4750
+Tokai	:	1	: 4400
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_POPULATION.txt
new file mode 100644
index 0000000..75de5fe
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/JAPAN_POPULATION.txt
@@ -0,0 +1,63 @@
+Japan	:	0	:	127463611
+Hokkaido   	:	1	:	5627424
+Aomori  	:	1	:	1436628
+Iwate  	:	1	:	1385037
+Miyagi  	:	1	:	2359991
+Akita  	:	1	:	1145471
+Yamagata  	:	1	:	1216116
+Fukushima  	:	1	:	2091223
+Ibaraki  	:	1	:	2975023
+Tochigi  	:	1	:	2016452
+Gumma  	:	1	:	2024044
+Saitama  	:	1	:	7053689
+Chiba  	:	1	:	6056159
+Chubu	:	1	: 79567
+Chugoku	:	1	: 110140
+Tokyo  	:	1	:	12570904
+Kanagawa  	:	1	:	8790900
+Niigata  	:	1	:	2431396
+Toyama  	:	1	:	1111602
+Ishikawa  	:	1	:	1173994
+Fukui  	:	1	:	821589
+Yamanashi  	:	1	:	884531
+Nagano  	:	1	:	2196012
+Gifu  	:	1	:	2107293
+Shizuoka  	:	1	:	3792457
+Aichi  	:	1	:	7254432
+Mie  	:	1	:	1867166
+Shiga  	:	1	:	1380343
+Kyoto  	:	1	:	2647523
+Kanto :	1	: 245626
+Kinki	:	1	: 61058
+Kyushu	:	1	: 560048
+Osaka  	:	1	:	8817010
+Hyogo  	:	1	:	5590381
+Nara  	:	1	:	1421367
+Wakayama  	:	1	:	1036061
+Tottori  	:	1	:	606947
+Shimane  	:	1	:	742135
+Okayama  	:	1	:	1957056
+Hiroshima  	:	1	:	2876762
+Yamaguchi  	:	1	:	1492575
+Tokushima  	:	1	:	809974
+Kagawa  	:	1	:	1012261
+Ehime  	:	1	:	1467824
+Kochi  	:	1	:	796211
+Fukuoka  	:	1	:	5049126
+Saga  	:	1	:	866402
+Nagasaki  	:	1	:	1478630
+Kumamoto  	:	1	:	1842140
+Oita  	:	1	:	1209587
+Miyazaki  	:	1	:	1152993
+Kagoshima  	:	1	:	1753144
+Okinawa  	:	1	:	1360830
+Hokuriku	:	1	: 216146
+Ryukiu-Islands	:	1	: 56503
+Shikoku	:	1	: 115286
+Tohoku	:	1	: 144917
+Tokai	:	1	: 79332
+
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_AREA.txt
new file mode 100644
index 0000000..0229a91
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_AREA.txt
@@ -0,0 +1,13 @@
+jordan	:	0	:	92300
+ajlun	:	1	:	412
+Amman	:	1	:	8231
+al aqabah	:	1	:	6583
+Salt (BALQA)	:	1	:	1076
+Irbid	:	1	:	1621
+jarash	:	1	:	402
+Karak	:	1	:	3217
+Ma-an	:	1	:	33163
+madaba	:	1	:	2008
+Mafraq	:	1	:	26435
+Tafila	:	1	:	2114
+Zarqa	:	1	:	4080
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_POPULATION.txt
new file mode 100644
index 0000000..7a4a706
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/JORDAN_POPULATION.txt
@@ -0,0 +1,13 @@
+jordan	:	0	:	5906760
+ajlun	:	1	:	118496
+Amman	:	1	:	1939405
+al aqabah	:	1	:	101736
+Salt (BALQA)	:	1	:	344985
+Irbid	:	1	:	925736
+jarash	:	1	:	153650
+Karak	:	1	:	204135
+Ma-an	:	1	:	92672
+madaba	:	1	:	129792
+Mafraq	:	1	:	240515
+Tafila	:	1	:	75290
+Zarqa	:	1	:	774569
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_AREA.txt
new file mode 100644
index 0000000..92a145a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_AREA.txt
@@ -0,0 +1,27 @@
+kazakhstan	:	0	:	2717300
+Alma-ata	:	1	:	223900
+Almaty qala 	:	1	:	300
+Aqmola	:	1	:	121400
+Aqtobe	:	1	:	300600
+Astana qala 	:	1	:	300
+Atyrau	:	1	:	118600
+North Kazakhstan	:	1	:	151300
+Mangghystau	:	1	:	165600
+East Kazakhstan	:	1	:	117300
+Pavlodar	:	1	:	124800
+Karaganda [Dzhezkazgan]	:	1	:	428000
+Kustanay	:	1	:	196000
+Kzyl-orda	:	1	:	226000
+Shyghys Qazaqstan	:	1	:	283300
+Soltüstik Qazaqstan	:	1	:	123200
+Zhambyl	:	1	:	144300
+Aktyubinsk : 1 : 300600
+Aral Sea : 1 : 68000
+Chimkent : 1 : 117300
+Dzhambul : 1 : 144300 
+Guryev : 1 : 118600
+Kochetav : 1  : 146200
+Semipalatinsk : 1 : 226000
+Taldy Kurgan : 1 : 124800
+Tselinograd : 1 : 700
+Uralsk : 1 : 151300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_POPULATION.txt
new file mode 100644
index 0000000..37645ac
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KAZAKHSTAN_POPULATION.txt
@@ -0,0 +1,29 @@
+kazakhstan	:	0	:	15233244
+Alma-ata	:	1	:	1558500
+Almaty qala 	:	1	:	1129400
+Aqmola	:	1	:	836300
+Aqtobe	:	1	:	682600
+Astana qala 	:	1	:	319300
+Atyrau	:	1	:	440300
+North Kazakhstan	:	1	:	616800
+Mangghystau	:	1	:	314700
+East Kazakhstan	:	1	:	1978300
+Pavlodar	:	1	:	807000
+Karaganda	:	1	:	1410200
+Kustanay	:	1	:	1017700
+Kzyl-orda	:	1	:	596200
+Shyghys Qazaqstan	:	1	:	1531000
+Soltüstik Qazaqstan	:	1	:	726000
+Zhambyl	:	1	:	988800
+Aktyubinsk : 1 : 253088
+Aral Sea : 1 : 0
+Chimkent : 1 : 360078
+Dzhambul : 1 : 330125
+Dzhezkazgan : 1 : 90000
+Guryev : 1 : 142497
+Kochetav : 1  : 123389
+Semipalatinsk : 1 : 269574
+Taldy Kurgan : 1 : 98000
+Tselinograd : 1 : 312965
+Uralsk : 1 : 195459
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_AREA.txt
new file mode 100644
index 0000000..59ea40f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_AREA.txt
@@ -0,0 +1,11 @@
+Kenya	:	0	:	582650
+Central2 [Central]  	:	1	:	13223
+Coast 	:	1	:	83359
+Eastern 	:	1	:	167525
+Nairobi 	:	1	:	696
+N. Eastern 	:	1	:	127197
+Nyanza 	:	1	:	16182
+Rift Valley 	:	1	:	185298
+Western 	:	1	:	8400
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_POPULATION.txt
new file mode 100644
index 0000000..48f1e7f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KENYA_POPULATION.txt
@@ -0,0 +1,9 @@
+Kenya	:	0	:	34707817
+Central2 [Central]  	:	1	:	3724159
+Coast 	:	1	:	2487264
+Eastern 	:	1	:	4631779
+Nairobi 	:	1	:	2143254
+N. Eastern 	:	1	:	962143
+Nyanza 	:	1	:	4392196
+Rift Valley 	:	1	:	6987036
+Western 	:	1	:	3358776
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_AREA.txt
new file mode 100644
index 0000000..af53a06
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_AREA.txt
@@ -0,0 +1,8 @@
+Kuwait	:	0	:	17820
+Kuwait : 1 : 17818
+al ahmadi	:	1	:	0
+al faraniyah	:	1	:	0
+al jahra	:	1	:	0
+capital	:	1	:	0
+muhafazat	:	1	:	0
+al-kabeer	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_POPULATION.txt
new file mode 100644
index 0000000..cec8bce
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KUWAIT_POPULATION.txt
@@ -0,0 +1,8 @@
+Kuwait	:	0	:	2418393
+Kuwait : 1 : 2418393
+al ahmadi	:	1	:	364484
+al faraniyah	:	1	:	572252
+al jahra	:	1	:	282353
+capital	:	1	:	388532
+muhafazat	:	1	:	488294
+al-kabeer	:	1	:	144981
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_AREA.txt
new file mode 100644
index 0000000..63566c1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_AREA.txt
@@ -0,0 +1,10 @@
+Kyrgyzstan	:	0	:	198500
+Batken	:	1	:	17023.90
+Chui	:	1	:	18684.40
+Issyk-kul	:	1	:	43114.00
+Jalal-Abad	:	1	:	33647.50
+Shaary Bishkek 	:	1	:	127.3
+Naryn	:	1	:	46706.90
+Osh	:	1	:	29165.10
+Talas	:	1	:	11445.90
+Kirghizistan Territories : 1 : 18143
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_POPULATION.txt
new file mode 100644
index 0000000..90f2b13
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/KYRGYZSTAN_POPULATION.txt
@@ -0,0 +1,10 @@
+Kyrgyzstan	:	0	:	5213898
+Batken	:	1	:	382426
+Chui	:	1	:	770811
+Issyk-kul	:	1	:	413149
+Jalal-Abad	:	1	:	869259
+Shaary Bishkek 	:	1	:	762308
+Naryn	:	1	:	249115
+Osh	:	1	:	1175998
+Talas	:	1	:	199872
+Kirghizistan Territories : 1 : 25000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_AREA.txt
new file mode 100644
index 0000000..29ebda4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_AREA.txt
@@ -0,0 +1,20 @@
+Laos	:	0	:	236800
+Attopu  	:	1	:	10320
+Bokeo 	:	1	:	6196
+Bolikhamxai [Bolikhamsai] 	:	1	:	14863
+Champassak [Champassack]	:	1	:	15415
+Houaphan [Houaphanh]	:	1	:	16500
+Khammouan [Khammouane]	:	1	:	16315
+Louang Namtha [Namtha]	:	1	:	9325
+Louangphabang [Luang Prabang]	:	1	:	16875
+Oudomxai [Oudomxay]	:	1	:	15370
+Phongsali [Phongsaly]	:	1	:	16270
+Salavan [Saravane] :	1	:	10691
+Savannakhet 	:	1	:	21774
+Vientiane [Vientiane (Munic.)] 	:	1	:	15927
+Nakhon Vientiane [Vientiane 2]	:	1	:	3920
+Khouèng Xaignabouli [Sayabouri]	:	1	:	16389
+Khétphisét Xaisomboun 	:	1	:	7105
+Khouèng Xekong [Sekong]	:	1	:	7665
+Xiangkhouang 	:	1	:	15880
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_POPULATION.txt
new file mode 100644
index 0000000..4f40175
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LAOS_POPULATION.txt
@@ -0,0 +1,19 @@
+Laos	:	0	:	6368481
+Attopu  	:	1	:	87700
+Bokeo 	:	1	:	114900
+Bolikhamxai [Bolikhamsai] 	:	1	:	164900
+Champassak [Champassack]	:	1	:	503300
+Houaphan [Houaphanh] 	:	1	:	247300
+Khammouan [Khammouane] 	:	1	:	275400
+Louang Namtha [Namtha]	:	1	:	115200
+Louangphabang [Luang Prabang]	:	1	:	367200
+Oudomxai [Oudomxay]	:	1	:	211300
+Phongsali [Phongsaly]	:	1	:	153400
+Salavan [Saravane] 	:	1	:	258300
+Savannakhet 	:	1	:	674900
+Vientiane [Vientiane (Munic.)] :	1	:	286800
+Nakhon Vientiane [Vientiane 2]	:	1	:	531800
+Khouèng Xaignabouli [Sayabouri]	:	1	:	293300
+Khétphisét Xaisomboun :	1	:	0
+Khouèng Xekong [Sekong]	:	1	:	64200
+Xiangkhouang 	:	1	:	201200
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_AREA.txt
new file mode 100644
index 0000000..66d9626
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_AREA.txt
@@ -0,0 +1 @@
+LATVIA : 0 : 64589
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_POPULATION.txt
new file mode 100644
index 0000000..a931801
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LATVIA_POPULATION.txt
@@ -0,0 +1 @@
+LATVIA : 0 : 2377383
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_AREA.txt
new file mode 100644
index 0000000..6b378be
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_AREA.txt
@@ -0,0 +1,9 @@
+Lebanon	:	0	:	10400
+Lebanon : 1 : 10400
+Beirut  	:	1	:	19.6
+Bekaa 	:	1	:	4160.90
+Mount Lebanon 	:	1	:	1968.30
+Nabatiye 	:	1	:	1098.00
+North 	:	1	:	2024.80
+South 	:	1	:	929.6
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_POPULATION.txt
new file mode 100644
index 0000000..3bd4f12
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LEBANON_POPULATION.txt
@@ -0,0 +1,8 @@
+Lebanon	:	0	:	3874050
+Lebanon : 1 : 3874050
+Beirut  	:	1	:	407403
+Bekaa 	:	1	:	399890
+Mount Lebanon 	:	1	:	1145458
+Nabatiye 	:	1	:	205412
+North 	:	1	:	670609
+South 	:	1	:	283056
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_AREA.txt
new file mode 100644
index 0000000..f8239eb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_AREA.txt
@@ -0,0 +1,12 @@
+lesotho	:	0	:	30355
+Berea  	:	1	:	2222
+Butha-Buthe 	:	1	:	1767
+Leribe 	:	1	:	2828
+Mafeteng 	:	1	:	2119
+Maseru 	:	1	:	4279
+Mohale's Hoek 	:	1	:	3530
+Mokhotlong 	:	1	:	4075
+Qacha's Nek [Quacha's Nek]	:	1	:	2349
+Quthing 	:	1	:	2916
+Thaba Tseka 	:	1	:	4270
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_POPULATION.txt
new file mode 100644
index 0000000..aa81c94
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LESOTHO_POPULATION.txt
@@ -0,0 +1,12 @@
+lesotho	:	0	:	2022331
+Berea  	:	1	:	300557
+Butha-Buthe 	:	1	:	126907
+Leribe 	:	1	:	362339
+Mafeteng 	:	1	:	238946
+Maseru 	:	1	:	477599
+Mohale's Hoek 	:	1	:	206842
+Mokhotlong 	:	1	:	89705
+Qacha's Nek [Quacha's Nek]	:	1	:	80323
+Quthing 	:	1	:	140641
+Thaba Tseka 	:	1	:	133680
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_AREA.txt
new file mode 100644
index 0000000..013bb8f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_AREA.txt
@@ -0,0 +1,18 @@
+Liberia	:	0	:	111370
+Bomi Terr.	:	1	:	1955
+Bong	:	1	:	8099
+Gbarpolu County 	:	1	:	7723
+Grand Bassa	:	1	:	8759
+Grand Cape Mount	:	1	:	5827
+Grand Gedeh	:	1	:	17029
+Grand Kru County [Kru Coast Terr.]	:	1	:	4000
+Lofa	:	1	:	11637
+Margibi	:	1	:	3263
+Maryland	:	1	:	5351
+Montserrado	:	1	:	2740
+Nimba	:	1	:	12043
+River Cess [Rivercess Terr.]	:	1	:	4385
+River Gee	:	1	:	0
+Sinoe	:	1	:	10254
+Sasstown Terr. : 1 : 5351
+Marshall Terr. : 1 : 2740
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_POPULATION.txt
new file mode 100644
index 0000000..d1767fc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBERIA_POPULATION.txt
@@ -0,0 +1,18 @@
+Liberia	:	0	:	3042004
+Bomi Terr.	:	1	:	114316
+Bong	:	1	:	299825
+Gbarpolu County 	:	1	:	0
+Grand Bassa	:	1	:	215338
+Grand Cape Mount	:	1	:	120141
+Grand Gedeh	:	1	:	94497
+Grand Kru County [Kru Coast Terr.]	:	1	:	39062
+Lofa	:	1	:	351492
+Margibi	:	1	:	219417
+Maryland	:	1	:	71977
+Montserrado	:	1	:	843783
+Nimba	:	1	:	338887
+River Cess [Rivercess Terr.]	:	1	:	38167
+River Gee	:	1	:	0
+Sinoe	:	1	:	79241
+Sasstown Terr. : 1 : 11524
+Marshall Terr. : 1 : 28543
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_AREA.txt
new file mode 100644
index 0000000..3ccfdc9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_AREA.txt
@@ -0,0 +1,41 @@
+Libya	:	0	:	1777060
+Ajdabiya (Agedabia)	:	1	:	91620
+Tubruq (Tobruk) [Al But?na-n] 	:	1	:	83860
+Al H?iza-m al Akhd?ar 	:	1	:	12800
+Al Jabal al Akhdar 	:	1	:	7800
+Al Aziziyah [Al Jifa-rah] 	:	1	:	1940
+Al Jufrah 	:	1	:	117410
+Al Kufrah 	:	1	:	483510
+Al Marj 	:	1	:	10000
+Al Marqab 	:	1	:	3000
+Al Qat?ru-n 	:	1	: 3300
+Al Qubbah 	:	1	:	14722
+Al Wa-h?ah 	:	1	:	108670
+Al Khoms 	:	1	:	5250
+Ash Shati 	:	1	:	5250
+Az zawia (Azzawiya) 	:	1	:	1520
+Banghazi 	:	1	:	800
+Bani- Wali-d 	:	1	:	19710
+Darnah 	:	1	:	4908
+Ghadamis 	:	1	:	51750
+Gharyan 	:	1	:	4660
+Gha-t 	:	1	:	72700
+Jaghbu-b 	:	1	:	33847
+Misurata 	:	1	:	2770
+Mizdah 	:	1	:	72180
+Murzuq 	:	1	:	349790
+Na-lu-t 	:	1	:	15300
+Sabha	:	1	:	15330
+S?abra-tah S?urma-n 	:	1	:	1370
+Surt (Sirte)	:	1	:	77660
+Ta-ju-ra-' wa an Nawa-h?i al Arba-? 	:	1	:	5840
+Tripoli (Tarabulus)	:	1	:	1830
+Tarhunah	:	1	:	5840
+Awbari (ubari) [Wa-di- al H?aya-t] 	:	1	:	31890
+Yafran (Yefren) 	:	1	:	9310
+NUQAT AL KHAMS [Zuwara] : 1 : 156248 
+Al Fatah : 1 : 437
+SAWFAJJIN (SOFULJEEN) : 1 : 28290	
+ZELEITIN (ZLITEN) : 1 : 3738
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_POPULATION.txt
new file mode 100644
index 0000000..d054303
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIBYA_POPULATION.txt
@@ -0,0 +1,43 @@
+Libya	:	0	:	5900754
+Ajdabiya (Agedabia)	:	1	:	165839
+TubruQ (Tobruk) [Al But?na-n] 	:	1	:	452714
+Al H?iza-m al Akhd?ar 	:	1	:	108860
+Al Jabal al Akhdar 	:	1	:	194185
+Al Aziziyah [Al Jifa-rah] 	:	1	:	289340
+Al Jufrah 	:	1	:	45117
+Al Kufrah 	:	1	:	51433
+Al Marj 	:	1	:	116318
+Al Marqab 	:	1	:	328292
+Al Qat?ru-n 	:	1	:	80978 
+Al Qubbah 	:	1	:	89593
+Al Wa-h?ah 	:	1	:	29257
+Al Khoms 	:	1	:	208954
+Ash Shati 	:	1	:	77203
+Az zawia (Azzawiya) 	:	1	:	197177
+Banghazi 	:	1	:	636992
+Bani- Wali-d 	:	1	:	77424
+Darnah 	:	1	:	81174
+Ghadamis 	:	1	:	19000
+Gharyan 	:	1	:	161408
+Gha-t 	:	1	:	22770
+Jaghbu-b 	:	1	:	 7090
+Misurata 	:	1	:	360251
+Mizdah 	:	1	:	41476
+Murzuq 	:	1	:	68718
+Na-lu-t 	:	1	:	86801
+Sabha	:	1	:	126610
+S?abra-tah S?urma-n 	:	1	:	152521
+Surt [Surt (Sirte)]	:	1	:	156389
+Ta-ju-ra-' wa an Nawa-h?i al Arba-? 	:	1	:	 9080
+Tripoli (Tarabulus)	:	1	:	1149957
+Tarhunah	:	1	:	296092
+Awbari (ubari) [Wa-di- al H?aya-t] 	:	1	:	72587
+Yafran (Yefren) 	:	1	:	117
+NUQAT AL KHAMS [Zuwara] : 1 : 180400
+Al Fatah : 1 : 86800
+SAWFAJJIN (SOFULJEEN) : 1 : 93688	
+ZELEITIN (ZLITEN) : 1 : 29580
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_AREA.txt
new file mode 100644
index 0000000..3ff4c2f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_AREA.txt
@@ -0,0 +1 @@
+ Lichtenstein : 1 : 160.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_POPULATION.txt
new file mode 100644
index 0000000..e9c0a5c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LIECHTENSTEIN_POPULATION.txt
@@ -0,0 +1 @@
+ Lichtenstein : 1 : 33307
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_AREA.txt
new file mode 100644
index 0000000..2b8a67d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_AREA.txt
@@ -0,0 +1 @@
+LITHUANIA : 0 : 65300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_POPULATION.txt
new file mode 100644
index 0000000..fa312fa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LITHUANIA_POPULATION.txt
@@ -0,0 +1 @@
+LITHUANIA : 0 : 3483972
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_AREA.txt
new file mode 100644
index 0000000..e7c2cee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_AREA.txt
@@ -0,0 +1 @@
+ LUXEMBOURG (GRAND-DUCHE) : 1 : 2586.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_POPULATION.txt
new file mode 100644
index 0000000..45a1a71
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/LUXEMBOURG_POPULATION.txt
@@ -0,0 +1 @@
+ LUXEMBOURG (GRAND-DUCHE) : 1 : 0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_AREA.txt
new file mode 100644
index 0000000..2661e35
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_AREA.txt
@@ -0,0 +1,5 @@
+MACAU:0:25
+MACAU:1:4.980
+MACAU-1:2:2.567952
+MACAU-3:2:1.701883
+MACAU-2:2:1.000000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_POPULATION.txt
new file mode 100644
index 0000000..8140b26
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACAU_POPULATION.txt
@@ -0,0 +1,5 @@
+MACAU:0:388576:15543.040000
+MACAU:1:388576:78027.309237
+MACAU-1:2:129525:50439.156703
+MACAU-2:2:129525:129525.333333
+MACAU-3:2:129525:76107.072774
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_AREA.txt
new file mode 100644
index 0000000..2beb7bf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_AREA.txt
@@ -0,0 +1,127 @@
+Macedonia	:	0	:	25333
+Aracinovo  	:	1	:	0
+Bac	:	1	:	0
+Belcista 	:	1	:	0
+Berovo 	:	1	:	0
+Bistrica 	:	1	:	0
+Bitola 	:	1	:	0
+Blatec 	:	1	:	0
+Bogdanci 	:	1	:	0
+Bogomila 	:	1	:	0
+Bogovinje 	:	1	:	0
+Bosilovo 	:	1	:	0
+Brvenica 	:	1	:	0
+Capari 	:	1	:	0
+Centar 	:	1	:	0
+Centar Zupa 	:	1	:	0
+C(air 	:	1	:	0
+C(aška 	:	1	:	0
+C(egrane 	:	1	:	0
+C(ešinovo 	:	1	:	0
+C(uc(er-Sandevo 	:	1	:	0
+Debar 	:	1	:	0
+Delc(evo 	:	1	:	0
+Delogoždi 	:	1	:	0
+Demir Hisar 	:	1	:	0
+Demir Kapija 	:	1	:	0
+Dobruševo 	:	1	:	0
+Dolna Banjica 	:	1	:	0
+Dolneni 	:	1	:	0
+Drugovo 	:	1	:	0
+Džepc(ište 	:	1	:	0
+Gazi Baba 	:	1	:	0
+Gevgelija 	:	1	:	0
+?orche Petrov 	:	1	:	0
+Gostivar 	:	1	:	0
+Gradsko 	:	1	:	0
+Ilinden 	:	1	:	0
+Izvor 	:	1	:	0
+Jegunovce 	:	1	:	0
+Kamenjane 	:	1	:	0
+Karbinci 	:	1	:	0
+Karpoš 	:	1	:	0
+Kavadarci 	:	1	:	0
+Kic(evo 	:	1	:	0
+Kisela Voda 	:	1	:	0
+Klec(evce 	:	1	:	0
+Koc(ani 	:	1	:	0
+Konc(e 	:	1	:	0
+Kondovo 	:	1	:	0
+Konopište 	:	1	:	0
+Kosel 	:	1	:	0
+Kratovo 	:	1	:	0
+Kriva Palanka 	:	1	:	0
+Krivogaštani 	:	1	:	0
+Kruševo 	:	1	:	0
+Kukliš 	:	1	:	0
+Kukurec(ani 	:	1	:	0
+Kumanovo 	:	1	:	0
+Labuništa 	:	1	:	0
+Lipkovo 	:	1	:	0
+Lozovo 	:	1	:	0
+Lukovo 	:	1	:	0
+Makedonska Kamenica 	:	1	:	0
+Makedonski Brod 	:	1	:	0
+Mavrovi Anovi 	:	1	:	0
+Mešeišta 	:	1	:	0
+Miravci 	:	1	:	0
+Mogila 	:	1	:	0
+Murtino 	:	1	:	0
+Negotino 	:	1	:	0
+Negotino-Pološko 	:	1	:	0
+Novaci 	:	1	:	0
+Novo Selo 	:	1	:	0
+Obleševo 	:	1	:	0
+Ohrid 	:	1	:	0
+Orašac 	:	1	:	0
+Orizari 	:	1	:	0
+Oslomej 	:	1	:	0
+Pehc(evo 	:	1	:	0
+Petrovec 	:	1	:	0
+Plasnica 	:	1	:	0
+Podareš 	:	1	:	0
+Prilep 	:	1	:	0
+Probištip 	:	1	:	0
+Radoviš 	:	1	:	0
+Rankovce 	:	1	:	0
+Resen 	:	1	:	0
+Rosoman 	:	1	:	0
+Rostuša 	:	1	:	0
+Samokov 	:	1	:	0
+Saraj 	:	1	:	0
+Šipkovica 	:	1	:	0
+Štip 	:	1	:	0
+Šuto Orizari 	:	1	:	0
+Sopište 	:	1	:	0
+Sopotnica 	:	1	:	0
+Srbinovo 	:	1	:	0
+Star Dojran 	:	1	:	0
+Staravina 	:	1	:	0
+Staro Nagoric(ane 	:	1	:	0
+Struga 	:	1	:	0
+Strumica 	:	1	:	0
+Studenic(ani 	:	1	:	0
+Sveti Nikole 	:	1	:	0
+Tearce 	:	1	:	0
+Tetovo 	:	1	:	0
+Topolc(ani 	:	1	:	0
+Valandovo 	:	1	:	0
+Vasilevo 	:	1	:	0
+Veles 	:	1	:	0
+Velešta 	:	1	:	0
+Vevc(ani 	:	1	:	0
+Vinica 	:	1	:	0
+Vitolište 	:	1	:	0
+Vraneštica 	:	1	:	0
+Vrapc(ište 	:	1	:	0
+Vratnica 	:	1	:	0
+Vrutok 	:	1	:	0
+Zajas 	:	1	:	0
+Zelenikovo 	:	1	:	0
+Želino 	:	1	:	0
+Žitoše 	:	1	:	0
+Zletovo 	:	1	:	0
+Zrnovci 	:	1	:	0
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_POPULATION.txt
new file mode 100644
index 0000000..e6ded9d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MACEDONIA_POPULATION.txt
@@ -0,0 +1,3 @@
+:0:2104035:215
+MAKEDONIJA:1:2267051:182.927008
+MAKEDONIJA:2:2267051:182.927008
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_AREA.txt
new file mode 100644
index 0000000..3ecaf67
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_AREA.txt
@@ -0,0 +1,118 @@
+Madagascar	:	0	:	587040
+Antananarivo : 1 : 58283
+Ambatolampy  	:	1	:	1755
+Ambohidratrimo 	:	1	:	1402
+Andramasina 	:	1	:	1370
+Anjozorobe 	:	1	:	3714
+Ankazobe 	:	1	:	7458
+Antananarivo-Atsimondrano 	:	1	:	369
+Antananarivo-Avaradrano 	:	1	:	617
+Antananarivo-Renivohitra 	:	1	:	88
+Antanifotsy 	:	1	:	3005
+Antsirabe I 	:	1	:	144
+Antsirabe II 	:	1	:	2241
+Arivonimamo 	:	1	:	1627
+Betafo 	:	1	:	8994
+Faratsiho 	:	1	:	2034
+Fenoarivo-Afovoany 	:	1	:	7761
+Manjakandriana 	:	1	:	1660
+Miarinarivo 	:	1	:	2818
+Soavinandriana 	:	1	:	1856
+Tsiroanomandidy 	:	1	:	8977
+Antsiranana 	:	1	:	43056
+Ambanja 	:	1	:	6328
+Ambilobe 	:	1	:	7714
+Andapa 	:	1	:	4444
+Antalaha 	:	1	:	7085
+Antsiranana I 	:	1	:	222
+Antsiranana II 	:	1	:	6025
+Nosy-Be 	:	1	:	242
+Sambava 	:	1	:	4780
+Vohimarina 	:	1	:	8204
+Fianarantsoa 	:	1	:	102373
+Ambalavao 	:	1	:	5151
+Ambatofinandrahana 	:	1	:	10386
+Ambohimahasoa 	:	1	:	2560
+Ambositra 	:	1	:	3199
+Befotaka 	:	1	:	3097
+Fandriana 	:	1	:	2232
+Farafangana 	:	1	:	2621
+Fianarantsoa I 	:	1	:	41
+Fianarantsoa II 	:	1	:	3987
+Iakora 	:	1	:	4633
+Ifanadiana 	:	1	:	3958
+Ihosy 	:	1	:	17358
+Ikalamavony 	:	1	:	9166
+Ikongo (Fort-Carnot) 	:	1	:	3272
+Ivohibe 	:	1	:	4119
+Manakara-Atsimo 	:	1	:	2961
+Manandriana 	:	1	: 0	  
+Mananjary 	:	1	:	5245
+Midongy-Atsimo 	:	1	:	2700
+Nosy-Varika 	:	1	:	3925
+Vangaindrano 	:	1	:	4861
+Vohipeno 	:	1	:	1162
+Vondrozo 	:	1	:	2953
+Mahajanga 	:	1	:	150023
+Ambato-boina 	:	1	:	8005
+Ambatomainty 	:	1	:	5166
+Analalava 	:	1	:	4380
+Antsalova 	:	1	:	7195
+Antsohihy 	:	1	:	5125
+Bealanana 	:	1	:	6543
+Befandriana-Avaratra 	:	1	:	8394
+Besalampy 	:	1	:	11753
+Boriziny (Port-Berger) 	:	1	:	7047
+Kandreho 	:	1	:	6816
+Maevatanana 	:	1	:	11085
+Mahajanga I 	:	1	:	92
+Mahajanga II 	:	1	:	4390
+Maintirano 	:	1	:	10031
+Mampikony 	:	1	:	4611
+Mandritsara 	:	1	:	10512
+Marovoay 	:	1	:	3804
+Mitsinjo 	:	1	:	5894
+Morafenobe 	:	1	:	6976
+Soalala 	:	1	:	6578
+Tsaratanana 	:	1	:	13218
+Toamasina 	:	1	:	71911
+Ambatondrazaka 	:	1	:	6077
+Amparafaravola 	:	1	:	3815
+Andilamena 	:	1	:	7405
+Anosibe 	:	1	:	2590
+Antanambao-Manampotsy 	:	1	:	1342
+Fenoarivo-Atsinanana 	:	1	:	3365
+Mahanoro 	:	1	:	3968
+Mananara Avaratra 	:	1	:	4621
+Maroantsetra 	:	1	:	6917
+Marolambo 	:	1	:	3531
+Moramanga 	:	1	:	7278
+Nosy-Boraha (Sainte Marie) 	:	1	:	222
+Soanierana-Ivongo 	:	1	:	4814
+Toamasina I 	:	1	:	322
+Toamasina II 	:	1	:	4816
+Vatomandry 	:	1	:	2620
+Vavatenina 	:	1	:	2826
+Vohibinany (Brickaville) 	:	1	:	  0
+Toliary 	:	1	:	161405
+Amboasary-Atsimo 	:	1	:	10211
+Ambovombe-Androy 	:	1	:	5829
+Ampanihy 	:	1	:	13037
+Ankazoabo-Atsimo 	:	1	:	7385
+Bekily 	:	1	:	5097
+Beloha 	:	1	:	4669
+Belon'i Tsiribihina 	:	1	:	7573
+Benenitra 	:	1	:	4912
+Beroroha 	:	1	:	7210
+Betioky-Atsimo 	:	1	:	9103
+Betroka 	:	1	:	13315
+Mahabo 	:	1	:	13863
+Manja 	:	1	:	8725
+Miandrivazo 	:	1	:	12545
+Morombe 	:	1	:	7634
+Morondava 	:	1	:	5648
+Sakaraha 	:	1	:	8447
+Taolanaro 	:	1	:	5276
+Toliary I 	:	1	:	39
+Toliary II 	:	1	:	6776
+Tsihombe 	:	1	:	2223
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_POPULATION.txt
new file mode 100644
index 0000000..ec0d6e1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MADAGASCAR_POPULATION.txt
@@ -0,0 +1,118 @@
+Madagascar	:	0	:	18595469
+Antananarivo : 1 : 4580788
+Ambatolampy  	:	1	:	215544
+Ambohidratrimo 	:	1	:	235514
+Andramasina 	:	1	:	139217
+Anjozorobe 	:	1	:	145410
+Ankazobe 	:	1	:	111068
+Antananarivo-Atsimondrano 	:	1	:	292057
+Antananarivo-Avaradrano 	:	1	:	207942
+Antananarivo-Renivohitra 	:	1	:	903450
+Antanifotsy 	:	1	:	278741
+Antsirabe I 	:	1	:	160356
+Antsirabe II 	:	1	:	333979
+Arivonimamo 	:	1	:	260261
+Betafo 	:	1	:	301671
+Faratsiho 	:	1	:	165327
+Fenoarivo-Afovoany 	:	1	:	82402
+Manjakandriana 	:	1	:	202771
+Miarinarivo 	:	1	:	181218
+Soavinandriana 	:	1	:	147217
+Tsiroanomandidy 	:	1	:	216642
+Antsiranana 	:	1	:	1188425
+Ambanja 	:	1	:	125056
+Ambilobe 	:	1	:	140556
+Andapa 	:	1	:	147772
+Antalaha 	:	1	:	186322
+Antsiranana I 	:	1	:	73491
+Antsiranana II 	:	1	:	71416
+Nosy-Be 	:	1	:	36636
+Sambava 	:	1	:	237488
+Vohimarina 	:	1	:	169687
+Fianarantsoa 	:	1	:	3366291
+Ambalavao 	:	1	:	190012
+Ambatofinandrahana 	:	1	:	116066
+Ambohimahasoa 	:	1	:	197279
+Ambositra 	:	1	:	229123
+Befotaka 	:	1	:	24045
+Fandriana 	:	1	:	189544
+Farafangana 	:	1	:	207167
+Fianarantsoa I 	:	1	:	144225
+Fianarantsoa II 	:	1	:	431011
+Iakora 	:	1	:	29987
+Ifanadiana 	:	1	:	136899
+Ihosy 	:	1	:	106591
+Ikalamavony 	:	1	:	56148
+Ikongo (Fort-Carnot) 	:	1	:	107748
+Ivohibe 	:	1	:	34289
+Manakara-Atsimo 	:	1	:	235764
+Manandriana 	:	1	:	90693
+Mananjary 	:	1	:	233697
+Midongy-Atsimo 	:	1	:	25911
+Nosy-Varika 	:	1	:	177817
+Vangaindrano 	:	1	:	210028
+Vohipeno 	:	1	:	98701
+Vondrozo 	:	1	:	93547
+Mahajanga 	:	1	:	1733917
+Ambato-boina 	:	1	:	108807
+Ambatomainty 	:	1	:	19509
+Analalava 	:	1	:	89917
+Antsalova 	:	1	:	30062
+Antsohihy 	:	1	:	107717
+Bealanana 	:	1	:	100750
+Befandriana-Avaratra 	:	1	:	169423
+Besalampy 	:	1	:	37782
+Boriziny (Port-Berger) 	:	1	:	103668
+Kandreho 	:	1	:	11892
+Maevatanana 	:	1	:	106624
+Mahajanga I 	:	1	:	135660
+Mahajanga II 	:	1	:	46790
+Maintirano 	:	1	:	52700
+Mampikony 	:	1	:	84375
+Mandritsara 	:	1	:	204503
+Marovoay 	:	1	:	124739
+Mitsinjo 	:	1	:	53405
+Morafenobe 	:	1	:	20475
+Soalala 	:	1	:	27434
+Tsaratanana 	:	1	:	97685
+Toamasina 	:	1	:	2593063
+Ambatondrazaka 	:	1	:	240123
+Amparafaravola 	:	1	:	212922
+Andilamena 	:	1	:	41135
+Anosibe 	:	1	:	84982
+Antanambao-Manampotsy 	:	1	:	46174
+Fenoarivo-Atsinanana 	:	1	:	240595
+Mahanoro 	:	1	:	212118
+Mananara Avaratra 	:	1	:	106184
+Maroantsetra 	:	1	:	167415
+Marolambo 	:	1	:	120051
+Moramanga 	:	1	:	217953
+Nosy-Boraha (Sainte Marie) 	:	1	:	16325
+Soanierana-Ivongo 	:	1	:	99373
+Toamasina I 	:	1	:	179045
+Toamasina II 	:	1	:	168388
+Vatomandry 	:	1	:	129146
+Vavatenina 	:	1	:	151833
+Vohibinany (Brickaville) 	:	1	:	159301
+Toliary 	:	1	:	2229550
+Amboasary-Atsimo 	:	1	:	151245
+Ambovombe-Androy 	:	1	:	183734
+Ampanihy 	:	1	:	205282
+Ankazoabo-Atsimo 	:	1	:	47949
+Bekily 	:	1	:	124764
+Beloha 	:	1	:	63709
+Belon'i Tsiribihina 	:	1	:	52674
+Benenitra 	:	1	:	26316
+Beroroha 	:	1	:	39241
+Betioky-Atsimo 	:	1	:	165199
+Betroka 	:	1	:	134771
+Mahabo 	:	1	:	86383
+Manja 	:	1	:	56532
+Miandrivazo 	:	1	:	82447
+Morombe 	:	1	:	96765
+Morondava 	:	1	:	80586
+Sakaraha 	:	1	:	67870
+Taolanaro 	:	1	:	213270
+Toliary I 	:	1	:	101661
+Toliary II 	:	1	:	184256
+Tsihombe 	:	1	:	64896
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_AREA.txt
new file mode 100644
index 0000000..6a1f58b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_AREA.txt
@@ -0,0 +1,4 @@
+Malawi	:	0	:	118480
+Central4 [Central]	:	1	:	35592
+Northern1 [Northern]	:	1	:	26276
+Southern2 [Southern]	:	1	:	31753
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_POPULATION.txt
new file mode 100644
index 0000000..fcb4a3b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALAWI_POPULATION.txt
@@ -0,0 +1,4 @@
+Malawi	:	0	:	13013926
+Central4 [Central Region]	:	1	:	4992753
+Northern1 [Northern Region]	:	1	:	1427807
+Southern2 [Southern Region]	:	1	:	5517374
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_AREA.txt
new file mode 100644
index 0000000..b84c869
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_AREA.txt
@@ -0,0 +1 @@
+MALI : 0 : 1242248
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_POPULATION.txt
new file mode 100644
index 0000000..5516f29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MALI_POPULATION.txt
@@ -0,0 +1 @@
+MALI : 0 : 10951176
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_AREA.txt
new file mode 100644
index 0000000..e464c35
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_AREA.txt
@@ -0,0 +1 @@
+MAURITANIA : 0 : 1030700
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_POPULATION.txt
new file mode 100644
index 0000000..b86ac42
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITANIA_POPULATION.txt
@@ -0,0 +1 @@
+MAURITANIA : 0 : 2508159
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_AREA.txt
new file mode 100644
index 0000000..c3b26fd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_AREA.txt
@@ -0,0 +1,14 @@
+Mauritius : 0 : 2040
+Mauritius : 1 : 2040
+Black River  	:	1	:	0
+Flacq 	:	1	:	0
+Grand Port 	:	1	:	0
+Moka 	:	1	:	0
+Pamplemousses 	:	1	:	0
+Plaine Wilhems 	:	1	:	0
+Port Louis 	:	1	:	0
+Riviere du Rempart 	:	1	:	0
+Savanne 	:	1	:	0
+Island of Rodrigues 	:	1	:	104
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_POPULATION.txt
new file mode 100644
index 0000000..8044bfa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MAURITIUS_POPULATION.txt
@@ -0,0 +1,12 @@
+Mauritius : 0 : 1245000
+Mauritius : 1 : 1245000
+Black River  	:	1	:	60587
+Flacq 	:	1	:	126839
+Grand Port 	:	1	:	106665
+Moka 	:	1	:	75479
+Pamplemousses 	:	1	:	122252
+Plaine Wilhems 	:	1	:	358182
+Port Louis 	:	1	:	127855
+Riviere du Rempart 	:	1	:	98854
+Savanne 	:	1	:	66356
+Island of Rodrigues 	:	1	:	35779
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_AREA.txt
new file mode 100644
index 0000000..a4353c9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_AREA.txt
@@ -0,0 +1,33 @@
+Mexico	:	0	:	1972550
+Aguascalientes   	:	1	:	5569
+Baja California Norte 	:	1	:	70113
+Baja California Sur 	:	1	:	73677
+Campeche 	:	1	:	56859
+Chiapas 	:	1	:	75629
+Chihuahua 	:	1	:	247087
+Coahuila de Zaragoza 	:	1	:	151571
+Colima 	:	1	:	5455
+Distrito Federal 	:	1	:	1499
+Durango 	:	1	:	119648
+Guanajuato 	:	1	:	30350
+Guerrero 	:	1	:	63749
+Hidalgo 	:	1	:	20987
+Jalisco 	:	1	:	80137
+Mexico	:	1	:	21461
+Michoacan de Ocampo 	:	1	:	59864
+Morelos 	:	1	:	4941
+Nayarit 	:	1	:	27336
+Nuevo Leon	:	1	:	64555
+Oaxaca 	:	1	:	94964
+Puebla 	:	1	:	33919
+Queretaro de Arteaga 	:	1	:	11769
+Quintana Roo 	:	1	:	50843
+San Luis Potosi	:	1	:	60547
+Sinaloa 	:	1	:	58092
+Sonora 	:	1	:	184934
+Tabasco 	:	1	:	24661
+Tamaulipas 	:	1	:	79829
+Tlaxcala 	:	1	:	4061
+Veracruz-Llave 	:	1	:	72815
+Yucatan 	:	1	:	39337
+Zacatecas 	:	1	:	74516
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_POPULATION.txt
new file mode 100644
index 0000000..37f9ce8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MEXICO_POPULATION.txt
@@ -0,0 +1,33 @@
+Mexico	:	0	:	107449525
+Aguascalientes   	:	1	:	1065416
+Baja California Norte 	:	1	:	2844469
+Baja California Sur 	:	1	:	512170
+Campeche 	:	1	:	754730
+Chiapas 	:	1	:	4293459
+Chihuahua 	:	1	:	3241444
+Coahuila de Zaragoza 	:	1	:	2495200
+Colima 	:	1	:	567996
+Distrito Federal 	:	1	:	8720916
+Durango 	:	1	:	1509117
+Guanajuato 	:	1	:	4893812
+Guerrero 	:	1	:	3115202
+Hidalgo 	:	1	:	2345514
+Jalisco 	:	1	:	6752113
+Mexico	:	1	:	14007495
+Michoacan de Ocampo 	:	1	:	3966073
+Morelos 	:	1	:	1612899
+Nayarit 	:	1	:	949684
+Nuevo Leon	:	1	:	4199292
+Oaxaca 	:	1	:	3506821
+Puebla 	:	1	:	5383133
+Queretaro de Arteaga 	:	1	:	1598139
+Quintana Roo 	:	1	:	1135309
+San Luis Potosi	:	1	:	2410414
+Sinaloa 	:	1	:	2608442
+Sonora 	:	1	:	2394861
+Tabasco 	:	1	:	1989969
+Tamaulipas 	:	1	:	3024238
+Tlaxcala 	:	1	:	1068207
+Veracruz-Llave 	:	1	:	7110214
+Yucatan 	:	1	:	1818948
+Zacatecas 	:	1	:	1367692
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_AREA.txt
new file mode 100644
index 0000000..8a98a2d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_AREA.txt
@@ -0,0 +1,3 @@
+MOLDOVA:0:13067
+MOLDAVIA:1:12960.210
+MOLDAVIA:2:12960.210000
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_POPULATION.txt
new file mode 100644
index 0000000..dc79a33
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVA_POPULATION.txt
@@ -0,0 +1,3 @@
+:0:4473570:342
+MOLDAVIA:1:4473570:345.177277
+MOLDAVIA:2:4473570:345.177277
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_AREA.txt
new file mode 100644
index 0000000..848bd47
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_AREA.txt
@@ -0,0 +1,3 @@
+MOLDOVA:0:13067
+MOLDAVIA:1:12960.210
+MOLDAVIA:2:12960.210000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_POPULATION.txt
new file mode 100644
index 0000000..958f77a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOLDOVIA_POPULATION.txt
@@ -0,0 +1,3 @@
+MOLDAVIA:0:4473570:342
+MOLDAVIA:1:4473570:345.177277
+MOLDAVIA:2:4473570:345.177277
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MONACO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONACO_POPULATION.txt
new file mode 100644
index 0000000..87e299a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONACO_POPULATION.txt
@@ -0,0 +1 @@
+:0:27409:36545
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_AREA.txt
new file mode 100644
index 0000000..0d448ed
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_AREA.txt
@@ -0,0 +1,23 @@
+Mongolia	:	0	:	1564116
+Arhangay	:	1	:	55300
+Bayan-Olgiy	:	1	:	45700
+Bayanhongor	:	1	:	116000
+Bulgan	:	1	:	48700
+Govi-altay	:	1	:	141400
+Choir 	:	1	:	5540
+Sainshand [Dornogovi]	:	1	:	109500
+Dornod	:	1	:	123600
+Dundgovi	:	1	:	74700
+Dzavhan	:	1	:	82500
+Arvaikheer [Ovorhangay]	:	1	:	62900
+Dalanzadgad [Omnogovi] 	:	1	:	165400
+Baruun-Urt 	:	1	:	82300
+Suhbaatar [Selenge]	:	1	:	41100
+Tov	:	1	:	74000
+Uvs	:	1	:	69600
+Khovd [Hovd]	:	1	:	76100
+Murun [Hovsgol]	:	1	:	100600
+Undurkhaan [Hentiy]	:	1	:	80300
+Darkhan 	:	1	:	3280
+Erdenet 	:	1	:	840
+Ulaanbaatar 	:	1	:	4700
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_POPULATION.txt
new file mode 100644
index 0000000..776cdf4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MONGOLIA_POPULATION.txt
@@ -0,0 +1,23 @@
+Mongolia	:	0	:	2832224
+Arhangay	:	1	:	97091
+Bayan-Olgiy	:	1	:	91068
+Bayanhongor	:	1	:	84779
+Bulgan	:	1	:	61776
+Govi-altay	:	1	:	63673
+Choir 	:	1	:	12230
+Sainshand [Dornogovi]	:	1	:	50575
+Dornod	:	1	:	75373
+Dundgovi	:	1	:	51517
+Dzavhan	:	1	:	89999
+Arvaikheer [Ovorhangay] 	:	1	:	111420
+Dalanzadgad [Omnogovi]	:	1	:	46858
+Baruun-Urt 	:	1	:	56166
+Suhbaatar [Selenge]	:	1	:	99950
+Tov	:	1	:	99268
+Uvs	:	1	:	90037
+Khovd [Hovd]	:	1	:	86831
+Murun [Hovsgol]	:	1	:	119063
+Undurkhaan [Hentiy]	:	1	:	70946
+Darkhan 	:	1	:	83271
+Erdenet 	:	1	:	71525
+Ulaanbaatar 	:	1	:	760077
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_AREA.txt
new file mode 100644
index 0000000..4eebff7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_AREA.txt
@@ -0,0 +1,17 @@
+Morocco	:	0	:	446550
+Centre Nord [Centre] [Region de Chaouia - Ouardigha]	:	1	:	7010
+Region de Doukala - Adba	:	1	:	13285
+Region de Fès - Boulemane 	Fès	:	1	:	19795
+Region de Gharb - Chrarda - Béni Hssen 	:	1	:	8805
+Nord Ouest [Region du Grand-Casablanca]	:	1	:	1615
+Centre Sud [Region de Guelmim - Es-Semara] 	:	1	:	122825
+Region de Laâyoune - Boujdour - Sakia El Hamra	:	1	:	139480
+Tensift [Region de Marrakech - Tensift - Al Haouz]	:	1	:	31160
+Region de Meknès - Tafilalet 	:	1	:	79210
+Oriental [Region de l'Oriental]	:	1	:	82900
+Region de Oued Ed-Dahab - Lagouira	:	1	:	50880
+Region de Rabat - Salé - Zemmour - Zaer	:	1	:	9580
+Sud [Agadir] [Region de Souss - Massa - Daraâ] 	:	1	:	70880
+Region de Tadla - Azilal	:	1	:	17125
+Region de Tanger - Tétouan 		:	1	:	11570
+Region de Taza - Al Hoceïma - Taounate 	:	1	:	24155
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_POPULATION.txt
new file mode 100644
index 0000000..5eb0528
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOROCCO_POPULATION.txt
@@ -0,0 +1,18 @@
+Morocco	:	0	:	33241259
+Centre Nord [Centre] [Region de Chaouia - Ouardigha]	:	1	:	1655660
+Region de Doukala - Adba	:	1	:	1984039
+Region de Fès - Boulemane 	Fès	:	1	:	1573055
+Region de Gharb - Chrarda - Béni Hssen 	:	1	:	1859540
+Nord Ouest [Region du Grand-Casablanca]	:	1	:	3631061
+Centre Sud [Region de Guelmim - Es-Semara] 	:	1	:	462410
+Region de Laâyoune - Boujdour - Sakia El Hamra	:	1	:	256152
+Tensift [Region de Marrakech - Tensift - Al Haouz]	:	1	:	3102652
+Region de Meknès - Tafilalet 	:	1	:	2141527
+Oriental [Region de l'Oriental]	:	1	:	1918094
+Region de Oued Ed-Dahab - Lagouira	:	1	:	99367
+Region de Rabat - Salé - Zemmour - Zaer	:	1	:	2366494
+Sud [Agadir] [Region de Souss - Massa - Daraâ] 	:	1	:	3113653
+Region de Tadla - Azilal	:	1	:	1450519
+Region de Tanger - Tétouan 		:	1	:	2470372
+Region de Taza - Al Hoceïma - Taounate 	:	1	:	1807113
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_AREA.txt
new file mode 100644
index 0000000..60b7ec7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_AREA.txt
@@ -0,0 +1,12 @@
+Mozambique	:	0	:	801590
+Cabo Delgado  	:	1	:	82625
+Maputo 	:	1	:	300
+Gaza 	:	1	:	75709
+Inhambane 	:	1	:	68615
+Manica 	:	1	:	61661
+Nampula 	:	1	:	81606
+Niassa [Nassa]	:	1	:	129056
+Província de Maputo 	:	1	:	26058
+Sofala 	:	1	:	68018
+Tete 	:	1	:	100724
+Zambezia 	:	1	:	105008
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_POPULATION.txt
new file mode 100644
index 0000000..fb2631a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MOZAMBIQUE_POPULATION.txt
@@ -0,0 +1,12 @@
+Mozambique	:	0	:	19686505
+Cabo Delgado  	:	1	:	1465537
+Maputo 	:	1	:	1018938
+Gaza 	:	1	:	1203294
+Inhambane 	:	1	:	1256139
+Manica 	:	1	:	1137448
+Nampula 	:	1	:	3265854
+Niassa [Nassa]	:	1	:	870544
+Província de Maputo 	:	1	:	933951
+Sofala 	:	1	:	1453928
+Tete 	:	1	:	1319904
+Zambezia 	:	1	:	3316703
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_AREA.txt
new file mode 100644
index 0000000..3857028
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_AREA.txt
@@ -0,0 +1,728 @@
+MYANMAR (BURMA):0:258617.852000
+CHIN:1:14330.640
+MAGWE:1:17040.869
+TENASSERIM:1:15767.990
+IRRAWADDY:1:12966.460
+KAYAH:1:4524.443
+SHAN:1:60233.141
+ARAKAN (RAKHINE):1:13609.020
+MON:1:4170.679
+KAWTHULEI (KAREN):1:11691.330
+SAGAING:1:37108.672
+BAGO (PEGU):1:14892.530
+YANGON (RANGOON):1:3736.308
+MANDALAY:1:14155.090
+KACHIN:1:34390.680
+LABUTTA:2:1.000000
+TADA-U:2:288.078912
+THOUNGOO:2:756.128252
+CHAUNGZON:2:1.000000
+MERGUI:2:3.117128
+PALAW:2:1.000000
+BOKPYIN:2:1.597582
+DEDAYE:2:6.740596
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+KAWTHAUNG:2:10.189569
+MYEBON:2:1.740186
+MERGUI:2:1.000000
+COCOS ISLANDS:2:5.942417
+MERGUI:2:1.000000
+BOKPYIN:2:1.587281
+WETLET:2:548.298054
+KATHA:2:964.646303
+SHWEDAUNG:2:314.499917
+YEBYU:2:1.083941
+KAWTHAUNG:2:1.000000
+TAUNGUP:2:1.130609
+LABUTTA:2:2.263464
+MA-UBIN:2:327.136109
+MERGUI:2:6.717397
+PONNAGYUN AND RATHEDAUNG:2:1.915503
+MERGUI:2:4.385913
+SINGAING:2:203.266136
+TAUNGUP:2:1.000000
+NGAPUTAW:2:1102.970225
+TAZE:2:682.783868
+KAWTHAUNG:2:1.000000
+YANDOON:2:335.778776
+KYAUKPYU:2:1.000000
+MERGUI:2:1.000000
+LABUTTA:2:1.000000
+LABUTTA:2:9.465270
+HENZADA:2:284.910605
+MYEBON:2:1.949857
+PAUKTAW:2:116.865902
+TWANTE:2:190.654250
+MYEBON:2:1.000000
+BOKPYIN:2:1.577993
+KAWTHAUNG:2:1.000000
+AN:2:2.865428
+KYAUKPYU:2:217.795214
+BOKPYIN:2:3.748380
+LAUNGLON:2:1.464304
+BOGALE:2:3.166305
+BOKPYIN:2:2.647547
+MERGUI:2:1.000000
+PALAW:2:2.719543
+MYAYDE (AUNGLAN):2:990.727192
+KAWTHAUNG:2:1.287590
+MOULMEIN:2:23.091425
+EINME:2:263.915363
+SYRIAM:2:145.070624
+SIDOKTAYA:2:942.879554
+NATMAUK:2:926.317666
+MINGIN:2:1314.937580
+BOKPYIN:2:1.000000
+KYAUKPYU:2:1.000000
+MERGUI:2:1.000000
+KYAUKTAW:2:676.069978
+KYAUKPYU:2:204.324284
+INDAW:2:610.787418
+MANSI:2:1113.140846
+BOKPYIN:2:1.000000
+MERGUI:2:1.000000
+MONG YAI:2:939.747549
+PONNAGYUN AND RATHEDAUNG:2:564.942453
+KYAUKPYU:2:1.668352
+MERGUI:2:1.092197
+PAUNG:2:1.976959
+HMAWBI:2:559.566138
+TAMU:2:673.952842
+MYEBON:2:7.293880
+NGAZUN:2:422.825255
+HAKA:2:1515.228270
+KAWTHAUNG:2:2.906118
+MOMAUK:2:945.116945
+MERGUI:2:1.000000
+KAWTHAUNG:2:1.000000
+BOKPYIN:2:1.000000
+MYEBON:2:1.000000
+MYINGYAN:2:365.722752
+THATON:2:1.484267
+THABEIKKYIN:2:987.811749
+DEDAYE:2:1.000000
+BOKPYIN:2:1.000000
+MONG PAN:2:2026.865545
+MERGUI:2:1.000000
+MERGUI:2:1.094354
+THLANGTLANG:2:1516.157717
+KAWTHAUNG:2:1.000000
+KAWTHAUNG:2:65.141463
+PAUNG:2:331.582352
+MABEIN:2:1816.879328
+YAWUNGHWE:2:492.133389
+TANTABIN:2:324.928433
+PAUNGDE:2:121.844281
+MAWKMAI:2:1004.410592
+LAUNGLON:2:5.510294
+NAWNGHKIO:2:1327.298615
+KYANGIN:2:339.251887
+MYOTHIT:2:728.365857
+WAW:2:22.930754
+MYAUNGMYA:2:1.000000
+MERGUI:2:1.000000
+NGAPUTAW:2:11.841964
+TABAYIN:2:533.760484
+MINDON:2:972.031082
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+KYAIKTO:2:325.039022
+KAWTHAUNG:2:1.425929
+KAWTHAUNG:2:1.000000
+MYEBON:2:7.267690
+ARAKAN (SANDOWAY):2:1.000000
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+THANBYUZAYAT:2:351.888048
+KAWTHAUNG:2:1.000000
+GANGAW:2:835.542215
+RAMREE:2:1.000000
+MERGUI:2:171.243765
+MAUNGDAW:2:1.000000
+TIGYAING:2:895.397557
+MYEBON:2:1.000000
+OKTWIN:2:547.574023
+YINMABIN:2:280.008945
+MAUNGDAW:2:11.868042
+BAGO (PEGU):2:1078.294087
+PAUKTAW:2:26.774974
+BOKPYIN:2:2.794864
+MERGUI:2:2.756853
+THANATPIN:2:289.565391
+SAGAING:2:490.862951
+NATOGYI:2:510.063248
+MYEBON:2:4.636562
+BOKPYIN:2:1.000000
+PAUKTAW:2:2.231252
+KYAIKLAT:2:329.050073
+PONNAGYUN AND RATHEDAUNG:2:1.875394
+BOKPYIN:2:8.660598
+PALE:2:754.115209
+KAWTHAUNG:2:1.000000
+MYEBON:2:15.211413
+MYEBON:2:1.000000
+MYEBON:2:423.488079
+MERGUI:2:6.212716
+YE:2:3.733208
+BOGALE:2:1.163949
+MONYWA:2:235.868400
+DEDAYE:2:1.000000
+KAWTHAUNG:2:1.000000
+CHAUNGZON:2:9.198335
+NGAPUTAW:2:1.000000
+PALAW:2:9.696094
+LABUTTA:2:1.000000
+NGAPUTAW:2:20.594793
+MERGUI:2:1.000000
+KYAUKPYU:2:1.000000
+PALAW:2:1.000000
+LOI LEM:2:410.751717
+NAMTU:2:1654.702858
+KAMAING:2:2407.541696
+HTILIN:2:481.575315
+BOKPYIN:2:1.066744
+MERGUI:2:1.000000
+PONNAGYUN AND RATHEDAUNG:2:49.413646
+MYEBON:2:14.303221
+MERGUI:2:1.000000
+KAWTHAUNG:2:2.046086
+MERGUI:2:1.000000
+MONYO:2:204.325546
+DEDAYE:2:1.218935
+TANAI:2:4775.464076
+PALAW:2:1.000000
+KYAUKPYU:2:1.000000
+KAWTHAUNG:2:1.104940
+KAWTHAUNG:2:1.000000
+KAWKHMU:2:1.000000
+MERGUI:2:1.000000
+MERGUI:2:6.828290
+MERGUI:2:1.000000
+BOKPYIN:2:1.000000
+MONG KUNG:2:2320.491356
+NAMHKAN:2:685.964360
+PADAUNG:2:849.405848
+TACHILEK:2:1347.378452
+PONNAGYUN AND RATHEDAUNG:2:118.179455
+LAI-HKA:2:1197.670383
+LABUTTA:2:1.000000
+KAWTHAUNG:2:1.251252
+KAWTHAUNG:2:8.142081
+MERGUI:2:1.000000
+WUNTHO:2:338.869426
+NAMSANG:2:1353.868301
+MERGUI:2:1.000000
+LABUTTA:2:1.000000
+BOKPYIN:2:1.000000
+PAUKTAW:2:1.000000
+RAMREE:2:447.642154
+KAWKHMU:2:1.000000
+MERGUI:2:1.921130
+BAWLAKHE:2:734.038139
+PALAW:2:36.341382
+PAKOKKU:2:519.601666
+YEDASHE:2:1080.527756
+BOKPYIN:2:19.752584
+MYEBON:2:4.709092
+MERGUI:2:1.000000
+MEIKTILA:2:400.222445
+MU-SE:2:801.309635
+MERGUI:2:10.476341
+MAGWE:2:611.446308
+MAUNGDAW:2:1.000000
+KYAUKKI:2:830.977507
+TAUNGTHA:2:419.750215
+KAWTHAUNG:2:8.299581
+LABUTTA:2:40.723881
+ARAKAN (SANDOWAY):2:1437.342585
+KAWLIN:2:814.842501
+MERGUI:2:1.000000
+PAUKTAW:2:30.523750
+BOKPYIN:2:1.000000
+PANG-YANG:2:1748.488560
+PALAW:2:772.931380
+MINBYA:2:5.978652
+KAWTHAUNG:2:815.509814
+SEIKPYU:2:563.261324
+BOKPYIN:2:10.084448
+MYEBON:2:16.328364
+KYAUKPYU:2:9.357915
+MACHANBAW:2:1085.448779
+LASHE:2:1022.725100
+KYAUKPYU:2:1.000000
+KYONPYAW:2:421.698681
+MERGUI:2:1.000000
+MINBYA:2:28.707921
+AN:2:2601.119982
+MERGUI:2:1.000000
+MONG HSU:2:725.434172
+MERGUI:2:5.097600
+MERGUI:2:1.000000
+MOULMEINGYUN:2:432.521203
+MERGUI:2:1.000000
+PALETWA:2:3564.009761
+PALAW:2:1.069191
+PINDAYA:2:296.019365
+KYAUKPYU:2:1.891939
+THATON:2:528.168262
+LABUTTA:2:1.000000
+MONG TUNG:2:1835.968456
+KANBALU:2:1245.445002
+PUTAO:2:2099.509116
+KAWTHAUNG:2:1.000000
+TANTABIN:2:218.905782
+KAWTHAUNG:2:13.794781
+MERGUI:2:1.758749
+DEDAYE:2:1.000000
+MINBYA:2:61.117763
+MAN AUNG:2:1.000000
+MERGUI:2:8.152349
+MERGUI:2:1.000000
+MYEBON:2:2.112749
+BOGALE:2:1.000000
+OKPO:2:395.535610
+TAIKKYI:2:407.533033
+ZALUN:2:204.505580
+KYAUKME:2:1643.061245
+KAWTHAUNG:2:1.000000
+MERGUI:2:1.000000
+PALAW:2:1.000000
+MYEBON:2:1.399358
+DEDAYE:2:1.000000
+MERGUI:2:1.000000
+BANMAUK:2:1354.060393
+HO-PANG:2:554.205851
+KHAMTI:2:3339.875639
+KYAUNGGON:2:143.855817
+BOGALE:2:1.000000
+HSATAW:2:892.461261
+KYA-IN SEIKKYI:2:3146.022805
+MERGUI:2:1.000000
+YE:2:1.000000
+MERGUI:2:95.238524
+THANDAUNG:2:1389.232897
+KAWTHAUNG:2:4.943797
+MYAING:2:638.164245
+WUDWIN:2:742.577638
+MYEBON:2:1.228690
+PALAW:2:2.069479
+PAUKTAW:2:1.056700
+HSAWLAW:2:1339.516260
+RAMREE:2:7.865973
+MYEBON:2:21.845130
+MYEBON:2:1.000000
+MOULMEIN:2:4.415006
+THONGWA:2:316.922965
+MAUNGDAW:2:3.558598
+BOKPYIN:2:6.804059
+PHRUHSO:2:614.436406
+KYAUKPYU:2:1.000000
+WAINGMAW:2:1885.464948
+TAVOY:2:2552.689231
+LAUNGLON:2:1.749777
+NYAUNGIEBIN:2:292.520120
+PALAW:2:1.000000
+GYOBINGAUK:2:385.356429
+NJANGYANG:2:1782.700329
+DANUBYU:2:526.068695
+CHAUNGZON:2:1.138676
+KAWTHAUNG:2:1.000000
+MANDALAY:2:62.081293
+NGAPE:2:438.569990
+MYAUNGMYA:2:1.000000
+MOULMEIN:2:4.541929
+MAN HPANG:2:657.926615
+INGAPU:2:685.695711
+MERGUI:2:1.000000
+MONG HSAT:2:1912.896533
+HLAINGBWE:2:1708.642681
+BUTHIDAUNG:2:2.754258
+MERGUI:2:1.256266
+MERGUI:2:5.859258
+BOGALE:2:29.362205
+MONGKHAK:2:1030.164551
+KYAUKPYU:2:1.501643
+KUNGYANGON:2:78.357414
+MERGUI:2:1.000000
+PALAW:2:1.000000
+NGAPUTAW:2:225.540014
+BOGALE:2:1.000000
+MERGUI:2:3.611850
+GWA:2:1.000000
+LAUNGLON:2:311.527049
+PONNAGYUN AND RATHEDAUNG:2:6.205593
+COCOS ISLANDS:2:1.000000
+KYUNHLA:2:1019.999383
+MERGUI:2:43.832172
+MINHLA:2:969.915352
+PAUKTAW:2:17.484694
+MERGUI:2:3.723533
+MERGUI:2:1.000000
+KAWTHAUNG:2:1.000000
+KENG TUNG:2:2088.688901
+KYAIKMARAW:2:458.330437
+HTANTABIN:2:107.887287
+PYAPON:2:322.530915
+HSIPAW:2:1995.626912
+MATUPI:2:1914.083738
+KAWTHAUNG:2:1.034727
+MERGUI:2:1.000000
+MERGUI:2:2.822967
+NAMHSAN:2:389.392593
+BOKPYIN:2:1.000000
+LABUTTA:2:2.665513
+TAUNGUP:2:1.273812
+MYEBON:2:12.047741
+BOKPYIN:2:1.000000
+LAWKSAWK:2:1707.276512
+PHAUNGBYIN:2:1350.181821
+MERGUI:2:1003.486267
+YEBYU:2:1.351028
+MERGUI:2:42.670601
+MYEBON:2:1.000000
+BOGALE:2:49.720252
+BOKPYIN:2:69.602993
+LASHIO:2:1696.399592
+MERGUI:2:1.000000
+MERGUI:2:1.635984
+MYEBON:2:1.000000
+MONG PING:2:2387.993342
+PINLEBU:2:1339.485856
+CHAUNGZON:2:137.071489
+MERGUI:2:1.000000
+MINBYA:2:1.000000
+BOKPYIN:2:1.000000
+MYAUNGMYA:2:690.285846
+KYAUKPYU:2:1.000000
+PANTANAW:2:649.619342
+MERGUI:2:6.629776
+MYEBON:2:26.752414
+KAWTHAUNG:2:1.000000
+YESAGYO:2:417.752132
+MAN AUNG:2:1.000000
+PROME:2:337.035084
+COCOS ISLANDS:2:1.443635
+RAMREE:2:1.215673
+KAWTHAUNG:2:1.000000
+DEDAYE:2:59.560734
+WAKEMA:2:440.463743
+NGAPUTAW:2:4.912175
+KAWTHAUNG:2:1.000000
+KYAUKPYU:2:1.000000
+CHAUK:2:364.355399
+MAHLAING:2:313.391193
+KYAUKPYU:2:1.000000
+BHAMO:2:882.328521
+BASSEIN WEST:2:627.608341
+MERGUI:2:1.056825
+PYAWBWE:2:660.485888
+BUDALIN:2:395.029207
+CHAUNGZON:2:1.000000
+TAUNGUP:2:1747.734586
+BOKPYIN:2:1.000000
+HLEGU:2:1.000000
+THARRAWADDY:2:211.071504
+LAUNGLON:2:1.000000
+PAUKKAUNG:2:709.404701
+ZIGON:2:192.245054
+TATKON:2:1052.668116
+LAHE:2:1715.878797
+PALAW:2:2.752728
+MERGUI:2:1.000000
+FALAM:2:804.500218
+KAMA:2:361.033974
+MINDAT:2:1526.412787
+KALE:2:1045.980237
+NAMPAN:2:686.320872
+MERGUI:2:1.000000
+KAWTHAUNG:2:1.000000
+LEMYETHNA:2:396.954627
+MERGUI:2:2.505606
+MYEBON:2:2.045030
+MRAUK-OO:2:444.333117
+BOKPYIN:2:4.874395
+KANI:2:1289.848703
+YANGON (RANGOON):2:104.900796
+MERGUI:2:2.540070
+MOULMEIN:2:1.000000
+KYAUKPYU:2:1.000000
+PONNAGYUN AND RATHEDAUNG:2:1.000000
+SAW:2:712.981752
+ARAKAN (SANDOWAY):2:1.000000
+MERGUI:2:1.000000
+MERGUI:2:2.732122
+MINBYA:2:1135.838435
+KAWTHAUNG:2:2.851649
+PANGWAUM:2:506.742601
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+PAUNG:2:1.000000
+MERGUI:2:1.000000
+YE-NGAN:2:1345.010814
+MAN AUNG:2:3.860299
+MERGUI:2:1.428264
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+LANGKHO:2:884.007689
+MYAUNGMYA:2:1.000000
+MRAUK-OO:2:29.902918
+SHWEBO:2:367.808081
+KAWTHAUNG:2:1.000000
+MERGUI:2:1.000000
+PA-AN:2:1051.518385
+PATHEINGYI:2:398.876525
+TIDDIM:2:1185.519017
+LABUTTA:2:820.846482
+PAUKTAW:2:9.436126
+BOKPYIN:2:2.976866
+KAWKAREIK:2:570.099179
+BOKPYIN:2:1.000000
+LOI-KAW:2:540.586540
+THABAUNG:2:687.445502
+PINLAUNG:2:1371.831655
+SALINGYI:2:305.104999
+MOGOK:2:447.245776
+TENASSERIM:2:4539.733373
+MERGUI:2:1.000000
+KAWTHAUNG:2:1.000000
+WAW:2:1.000000
+BOKPYIN:2:1.000000
+MYEBON:2:2.843354
+KAWTHAUNG:2:2.400318
+KAWTHAUNG:2:1.000000
+DAIK-U:2:491.453279
+LAUNGLON:2:1.923762
+THANATPIN:2:1.157408
+MYEBON:2:15.024004
+KYAUKPYU:2:6.893804
+YE:2:1013.355035
+THAZI:2:601.642461
+MERGUI:2:27.192265
+PAUKTAW:2:2.518154
+KAWTHAUNG:2:17.209344
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+LABUTTA:2:1.000000
+LEWE:2:886.507432
+KYAUKPYU:2:2.445690
+PYU:2:852.351705
+BOGALE:2:1.169518
+KAWTHAUNG:2:1.000000
+NGAPUTAW:2:1.000000
+MERGUI:2:1.000000
+HSI HSENG:2:817.452276
+SITTWE (AKYAB):2:43.227826
+KAWTHAUNG:2:1.188300
+KAWKHMU:2:207.892685
+BOKPYIN:2:1.000000
+KUNHING:2:1056.033552
+LABUTTA:2:1.773104
+PAUKTAW:2:85.376433
+MERGUI:2:1.258377
+PONNAGYUN AND RATHEDAUNG:2:1.000000
+BOKPYIN:2:1.000000
+MERGUI:2:7.875066
+KYAUKSE:2:677.511046
+YEBYU:2:1.000000
+PONNAGYUN AND RATHEDAUNG:2:5.586885
+BOKPYIN:2:14.412141
+LABUTTA:2:1.000000
+BOKPYIN:2:2051.852558
+MERGUI:2:1.000000
+SINBAUNGWE (TANTABIN):2:873.470078
+BOGALE:2:3.804722
+PALAW:2:1.000000
+NGAPUTAW:2:1.101876
+BUTHIDAUNG:2:5.731768
+MYITKYINA:2:2435.703413
+DEDAYE:2:26.556229
+BOKPYIN:2:1.000000
+GWA:2:1.000000
+KAWTHAUNG:2:1.000000
+MERGUI:2:5.376661
+MAN AUNG:2:177.241099
+KYAUKPYU:2:4.888491
+DEDAYE:2:1.552045
+KAWTHAUNG:2:1.000000
+YE:2:1.000000
+PAUKTAW:2:3.826296
+NANYUN:2:2626.745379
+PALAW:2:6.048803
+PALAW:2:1.000000
+KALAW:2:693.716908
+MERGUI:2:15.785149
+MYEBON:2:1.886193
+MOHNYIN:2:2568.308970
+KAWTHAUNG:2:1.000000
+MYITHA:2:388.486472
+MERGUI:2:1.000000
+BOKPYIN:2:1.000000
+MONG HPAYAK:2:821.321245
+THEGON:2:460.827188
+BOKPYIN:2:5.932776
+MINBYA:2:1.000000
+YAMETHIN:2:887.821717
+MYINMU:2:281.935065
+MERGUI:2:92.178470
+KYAUKPYU:2:1.000000
+PAPUN:2:2672.647887
+KONG-KYAN:2:435.042760
+KYAUKPYU:2:4.443410
+NATTALIN:2:427.506154
+KUNLONG:2:324.527124
+TONZANG:2:1445.282050
+KHAWBUDE:2:2190.442096
+BOKPYIN:2:24.214548
+BOKPYIN:2:1.000000
+MINBU (SAGU):2:674.724496
+BUTHIDAUNG:2:818.722443
+MYEBON:2:5.150401
+MAN AUNG:2:1.000000
+MAYMYO:2:552.776834
+SUMPRANBUM:2:2562.855380
+MERGUI:2:1.000000
+MERGUI:2:1.000000
+SHWEGYIN:2:916.409256
+KAWKHMU:2:134.640959
+NGAPUTAW:2:1.000000
+KYAUKTAN:2:269.357388
+KANPETLET:2:859.446441
+MERGUI:2:3.981375
+MERGUI:2:1.838269
+MERGUI:2:1.000000
+MERGUI:2:1.127762
+MOULMEIN:2:5.822562
+TAUNGDWINGYI:2:795.133728
+PALAW:2:1.501631
+NYAUNGU:2:580.585230
+HOMALIN:2:4228.552449
+THAYET:2:390.375331
+SINGU:2:539.631132
+KYAUKPYU:2:1.252600
+NGAPUTAW:2:1.000000
+KYAUKPYU:2:1.000000
+KYAUKPYU:2:1.000000
+BOKPYIN:2:1.000000
+KYAUKPADAUNG:2:812.581729
+MERGUI:2:1.360785
+LAUNGLON:2:1.000000
+MYAWADI:2:1153.166165
+MONG MIT:2:1124.090713
+MERGUI:2:3.423130
+DEDAYE:2:247.208235
+MERGUI:2:8.507357
+KAWA:2:414.357780
+MERGUI:2:17.940266
+PWINBYU:2:513.428168
+MOULMEIN:2:1.000000
+MYEBON:2:4.130972
+NOGMUNG:2:3003.753863
+WAW:2:25.059186
+PALAW:2:1.000000
+CHIPWI:2:1294.645915
+BOGALE:2:13.619107
+KAWTHAUNG:2:1.000000
+MYEBON:2:1.000000
+MYEBON:2:56.415910
+MERGUI:2:1.158731
+PEKHON:2:699.477187
+MONG MAO:2:727.892306
+MERGUI:2:1.000000
+YE-U:2:566.420160
+INSEIN:2:165.654280
+PALAW:2:1.000000
+PAUK:2:1031.052822
+KYAUKPYU:2:1.003848
+YEGYI:2:282.454602
+KALEWA:2:877.992594
+YE:2:1.000000
+BOKPYIN:2:5.123268
+MOGAUNG:2:872.069753
+PASAWNG:2:1309.828059
+KAWTHAUNG:2:1.000000
+GWA:2:1.000000
+AMARAPURA:2:97.918521
+MUDON:2:273.410771
+TAUNGUP:2:10.288791
+WAW:2:334.689240
+PALAW:2:1.000000
+HO-PONG:2:383.860044
+SALIN:2:861.277558
+MAUNGDAW:2:1.000000
+MOULMEIN:2:7.252917
+MYEBON:2:34.935959
+KYAUKPYU:2:1.000000
+HSENWI:2:759.124906
+KE-HSI:2:1280.445006
+BOKPYIN:2:3.741156
+YEBYU:2:1584.516041
+MERGUI:2:1.268433
+MERGUI:2:1.676953
+KAWTHAUNG:2:1.000000
+MERGUI:2:1.000000
+KYAUKTAGA:2:1125.157858
+MYEBON:2:40.573087
+MYEBON:2:12.614281
+KAWTHAUNG:2:1.000000
+MADAYA:2:465.358491
+DIMAWHSO:2:433.092595
+AYADAW:2:495.152037
+THAYETCHAUNG:2:848.063684
+MERGUI:2:2.040002
+TAUNGGYI:2:639.261218
+NGAPUTAW:2:169.222887
+MERGUI:2:3.182252
+MERGUI:2:1.000000
+MONG YANG:2:1035.438867
+NGAPUTAW:2:1.000000
+BOKPYIN:2:1.821260
+BILIN:2:685.190015
+PALAW:2:1.000000
+PAUKTAW:2:47.657571
+LETPATAN:2:270.824763
+LAUNGLON:2:5.291439
+MERGUI:2:1.000000
+PAUKTAW:2:1.000000
+MERGUI:2:1.353043
+MYAUNG:2:208.499697
+MOULMEINGYUN:2:1.000000
+YENANGYAUNG:2:426.885795
+MONG NAI:2:1304.120825
+MERGUI:2:1.000000
+MERGUI:2:156.453897
+MAUNGDAW:2:647.291317
+MERGUI:2:1.000000
+MERGUI:2:1.351187
+MOULMEIN:2:1.000000
+TANGYAN:2:1899.808037
+COCOS ISLANDS:2:3.748039
+KUTKAI:2:1569.968014
+MERGUI:2:1.000000
+MYEBON:2:1.571008
+MERGUI:2:1.416464
+MYEBON:2:1.000000
+MONG YAWNG:2:1818.631100
+BOGALE:2:3.982595
+KAWTHAUNG:2:1.000000
+KAWTHAUNG:2:1.000000
+MINHLA:2:734.362376
+HLEGU:2:801.916015
+PONNAGYUN AND RATHEDAUNG:2:1.000000
+KHIN-U:2:412.985994
+KAYAN:2:233.079948
+BOGALE:2:837.911872
+CHAUNG-U:2:180.365968
+NGAPUTAW:2:9.515590
+PYINMANA:2:812.027048
+MERGUI:2:1.448643
+MAWLAIK:2:1551.714213
+BOGALE:2:1.000000
+KAWTHAUNG:2:1.232641
+MYANAUNG:2:618.058567
+GWA:2:947.684745
+DEDAYE:2:1.000000
+MERGUI:2:1.000000
+SHWEGU:2:1146.669094
+MERGUI:2:3.010803
+IRRAWADDY:2:236.665965
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_POPULATION.txt
new file mode 100644
index 0000000..bdd9bb5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/MYANMAR_POPULATION.txt
@@ -0,0 +1,728 @@
+MYANMAR (BURMA):0:43355989:167.644997
+ARAKAN (RAKHINE):1:2589470:190.276008
+BAGO (PEGU):1:4809368:322.938278
+CHIN:1:467022:32.589054
+IRRAWADDY:1:6320950:487.484633
+KACHIN:1:1037585:30.170529
+KAWTHULEI (KAREN):1:1057505:90.452070
+KAYAH:1:202082:44.664503
+MAGWE:1:4104855:240.882962
+MANDALAY:1:5794043:409.325762
+MON:1:2126335:509.829455
+SAGAING:1:4799735:129.342678
+SHAN:1:3870921:64.265634
+TENASSERIM:1:1156484:73.343781
+YANGON (RANGOON):1:5019634:1343.474360
+NOGMUNG:2:57643:19.190524
+PUTAO:2:57643:27.455757
+KHAWBUDE:2:57643:26.315971
+MACHANBAW:2:57643:53.105786
+NANYUN:2:123070:46.852706
+TANAI:2:57643:12.070787
+SUMPRANBUM:2:57643:22.491948
+HSAWLAW:2:57643:43.033155
+LAHE:2:123070:71.724255
+NJANGYANG:2:57643:32.334998
+KHAMTI:2:123070:36.848716
+CHIPWI:2:57643:44.524615
+KAMAING:2:57643:23.942934
+MYITKYINA:2:57643:23.666104
+WAINGMAW:2:57643:30.572624
+MOGAUNG:2:57643:66.099771
+LASHE:2:123070:120.335492
+HOMALIN:2:123070:29.104553
+MOHNYIN:2:57643:22.444189
+BANMAUK:2:123070:90.889689
+MOMAUK:2:57643:60.990983
+SHWEGU:2:57643:50.270485
+TAMU:2:123070:182.609406
+BHAMO:2:57643:65.331234
+INDAW:2:123070:201.494210
+PHAUNGBYIN:2:123070:91.150782
+KATHA:2:123070:127.580573
+PINLEBU:2:123070:91.878632
+TIGYAING:2:123070:137.447469
+MANSI:2:57643:51.784652
+WUNTHO:2:123070:363.178613
+KONG-KYAN:2:74440:171.111429
+MABEIN:2:74440:40.971785
+MU-SE:2:74440:92.898906
+TONZANG:2:51891:35.903949
+KAWLIN:2:123070:151.035480
+MAWLAIK:2:123070:79.312368
+NAMHKAN:2:74440:108.519907
+KUTKAI:2:74440:47.415481
+KYUNHLA:2:123070:120.657061
+KUNLONG:2:74440:229.382332
+KANBALU:2:123070:98.816189
+MONG MIT:2:74440:66.223115
+NAMTU:2:74440:44.987406
+TIDDIM:2:51891:43.770984
+THABEIKKYIN:2:222847:225.597446
+KALE:2:123070:117.660089
+KALEWA:2:123070:140.172171
+HO-PANG:2:74440:134.319745
+HSENWI:2:74440:98.061318
+FALAM:2:51891:64.501329
+MINGIN:2:123070:93.593894
+LASHIO:2:74440:43.881635
+TAZE:2:123070:180.247563
+NAMHSAN:2:74440:191.171557
+MONG MAO:2:74440:102.268959
+PANGWAUM:2:74440:146.900593
+THLANGTLANG:2:51891:34.225551
+MOGOK:2:222847:498.266992
+TANTABIN:2:123070:378.760723
+YE-U:2:123070:217.277097
+KYAUKME:2:74440:45.306156
+TANGYAN:2:74440:39.183321
+MAN HPANG:2:74440:113.144516
+KHIN-U:2:123070:298.000731
+HSIPAW:2:74440:37.301957
+HAKA:2:51891:34.246545
+KANI:2:123070:95.414391
+MONG YAI:2:74440:79.213602
+NAMPAN:2:74440:108.463536
+NAWNGHKIO:2:74440:56.084432
+SINGU:2:222847:412.963216
+TABAYIN:2:123070:230.571824
+SHWEBO:2:123070:334.604199
+GANGAW:2:164194:196.512153
+BUDALIN:2:123070:311.546908
+WETLET:2:123070:224.458444
+AYADAW:2:123070:248.550181
+PANG-YANG:2:74440:42.574364
+MADAYA:2:222847:478.873411
+MONYWA:2:123070:521.774550
+PATHEINGYI:2:222847:558.688701
+YINMABIN:2:123070:439.522131
+LAWKSAWK:2:74440:43.602069
+SAGAING:2:123070:250.721974
+MATUPI:2:51891:27.110273
+PALE:2:123070:163.198046
+SALINGYI:2:123070:403.369753
+MYINMU:2:123070:436.519410
+PALETWA:2:51891:14.559818
+MAYMYO:2:222847:403.142451
+MANDALAY:2:222847:3589.612860
+KE-HSI:2:74440:58.136654
+MONG HSU:2:74440:102.615497
+CHAUNG-U:2:123070:682.335640
+MONG KUNG:2:74440:32.079753
+KYAUKSE:2:222847:328.921291
+HTILIN:2:164194:340.952277
+AMARAPURA:2:222847:2275.849404
+NGAZUN:2:123070:291.066172
+MONGKHAK:2:74440:72.261066
+MYAUNG:2:123070:590.265262
+TADA-U:2:222847:773.565153
+MINDAT:2:51891:33.995610
+SINGAING:2:222847:1096.335140
+YESAGYO:2:164194:393.042159
+MYAING:2:164194:257.291444
+PAUK:2:164194:159.249067
+MYINGYAN:2:222847:609.335368
+YE-NGAN:2:74440:55.345866
+SAW:2:164194:230.292289
+NATOGYI:2:222847:436.902303
+KUNHING:2:74440:70.490931
+LAI-HKA:2:74440:62.154654
+MYITHA:2:222847:573.630805
+PAKOKKU:2:164194:316.000142
+MAUNGDAW:2:20389:31.499770
+TAUNGTHA:2:222847:530.905762
+BUTHIDAUNG:2:20389:24.904078
+WUDWIN:2:222847:300.100348
+NYAUNGU:2:222847:383.833064
+LOI LEM:2:74440:181.230620
+KANPETLET:2:51891:60.377623
+SEIKPYU:2:164194:291.506257
+MAHLAING:2:222847:711.085100
+KYAUKTAW:2:20389:30.158901
+KYAUKPADAUNG:2:222847:274.246639
+PINDAYA:2:74440:251.472698
+MAUNGDAW:2:20389:20389.527559
+MAUNGDAW:2:20389:20389.527559
+KALAW:2:74440:107.307156
+MAUNGDAW:2:20389:20389.527559
+THAZI:2:222847:370.399069
+MAUNGDAW:2:20389:1718.019498
+MEIKTILA:2:222847:556.809870
+MAUNGDAW:2:20389:5729.651835
+SALIN:2:164194:190.640286
+CHAUK:2:164194:450.642972
+SIDOKTAYA:2:164194:174.141224
+MINBYA:2:20389:17.951081
+PONNAGYUN AND RATHEDAUNG:2:20389:36.091335
+MRAUK-OO:2:20389:45.887931
+NATMAUK:2:164194:177.254743
+PYAWBWE:2:222847:337.399802
+BUTHIDAUNG:2:20389:7402.911259
+YENANGYAUNG:2:164194:384.632616
+BUTHIDAUNG:2:20389:3557.284168
+PONNAGYUN AND RATHEDAUNG:2:20389:10872.130101
+PONNAGYUN AND RATHEDAUNG:2:20389:172.530222
+YAMETHIN:2:222847:251.005132
+AN:2:20389:7.838749
+PWINBYU:2:164194:319.799750
+MRAUK-OO:2:20389:681.857455
+PONNAGYUN AND RATHEDAUNG:2:20389:3649.534143
+PONNAGYUN AND RATHEDAUNG:2:20389:412.629490
+PAUKTAW:2:20389:761.514374
+PONNAGYUN AND RATHEDAUNG:2:20389:20389.527559
+PONNAGYUN AND RATHEDAUNG:2:20389:10644.476965
+MINBYA:2:20389:20389.527559
+PAUKTAW:2:20389:174.469432
+PONNAGYUN AND RATHEDAUNG:2:20389:20389.527559
+MYOTHIT:2:164194:225.428194
+MINBYA:2:20389:20389.527559
+MAGWE:2:164194:268.534126
+TATKON:2:222847:211.698069
+MINBYA:2:20389:333.610501
+MINBU (SAGU):2:164194:243.349991
+MINBYA:2:20389:3410.388756
+MYEBON:2:20389:48.146639
+SITTWE (AKYAB):2:20389:471.675988
+MINBYA:2:20389:710.240479
+PONNAGYUN AND RATHEDAUNG:2:20389:3285.669485
+PONNAGYUN AND RATHEDAUNG:2:20389:20389.527559
+PAUKTAW:2:20389:20389.527559
+PAUKTAW:2:20389:5328.789921
+NGAPE:2:164194:374.385397
+PAUKTAW:2:20389:427.833965
+PAUKTAW:2:20389:19295.474173
+MYEBON:2:20389:502.538236
+MYEBON:2:20389:933.367188
+MYEBON:2:20389:1692.394247
+PAUKTAW:2:20389:9138.155421
+MYEBON:2:20389:10456.934821
+PAUKTAW:2:20389:2160.794330
+MYEBON:2:20389:20389.527559
+PAUKTAW:2:20389:238.819155
+TAUNGDWINGYI:2:164194:206.498849
+PAUKTAW:2:20389:667.988945
+MYEBON:2:20389:20389.527559
+PAUKTAW:2:20389:8097.013749
+PAUKTAW:2:20389:20389.527559
+PAUKTAW:2:20389:1166.135796
+MYEBON:2:20389:10809.884015
+MYEBON:2:20389:12978.627454
+MINHLA:2:164194:169.287144
+PYINMANA:2:222847:274.433971
+MYEBON:2:20389:14570.629931
+MYEBON:2:20389:361.414494
+MYEBON:2:20389:9650.709838
+MYEBON:2:20389:20389.527559
+MYEBON:2:20389:20389.527559
+LEWE:2:222847:251.377258
+MYEBON:2:20389:4397.553092
+MYEBON:2:20389:7170.942330
+MYEBON:2:20389:1340.409833
+MYEBON:2:20389:9970.282861
+MYEBON:2:20389:2795.429533
+MYEBON:2:20389:20389.527559
+AN:2:20389:7115.700537
+MYEBON:2:20389:762.156550
+MYEBON:2:20389:1357.130067
+MYEBON:2:20389:2805.503201
+MYEBON:2:20389:3958.823315
+MYEBON:2:20389:4329.821452
+MYEBON:2:20389:583.625815
+MYEBON:2:20389:20389.527559
+MYEBON:2:20389:4935.769974
+MYEBON:2:20389:1248.718338
+SINBAUNGWE (TANTABIN):2:164194:187.979193
+MYEBON:2:20389:1425.519997
+MYEBON:2:20389:1616.384442
+MYEBON:2:20389:16594.525518
+MYEBON:2:20389:20389.527559
+MYEBON:2:20389:11716.866794
+MYEBON:2:20389:20389.527559
+MYEBON:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:12221.358298
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+MINDON:2:164194:168.918672
+KYAUKPYU:2:20389:8336.922324
+KYAUKPYU:2:20389:93.617886
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:2178.853683
+THAYET:2:164194:420.605983
+KYAUKPYU:2:20389:10777.053361
+KYAUKPYU:2:20389:20311.369410
+THANDAUNG:2:151072:108.745008
+KYAUKPYU:2:20389:4588.711723
+YEDASHE:2:150292:139.091985
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+TAUNGUP:2:20389:11.666261
+MYAYDE (AUNGLAN):2:164194:165.730992
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:99.790036
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:16277.764297
+RAMREE:2:20389:45.548721
+KYAUKPYU:2:20389:4170.924639
+RAMREE:2:20389:20389.527559
+KYAUKPYU:2:20389:2957.659887
+KYAUKPYU:2:20389:13578.145777
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+KYAUKPYU:2:20389:20389.527559
+PAUKKAUNG:2:150292:211.857561
+THOUNGOO:2:150292:198.766214
+KAMA:2:164194:454.788778
+TAUNGUP:2:20389:20389.527559
+PROME:2:150292:445.926128
+TAUNGUP:2:20389:18034.110430
+TAUNGUP:2:20389:16006.700800
+PADAUNG:2:150292:176.938681
+MAN AUNG:2:20389:115.038372
+OKTWIN:2:150292:274.470197
+MAN AUNG:2:20389:20389.527559
+TANTABIN:2:150292:686.563638
+TAUNGUP:2:20389:1981.722397
+RAMREE:2:20389:2592.117664
+THEGON:2:150292:326.136899
+PYU:2:150292:176.327154
+NATTALIN:2:150292:351.556928
+ARAKAN (SANDOWAY):2:20389:14.185573
+SHWEDAUNG:2:150292:477.878504
+RAMREE:2:20389:16772.213876
+MAN AUNG:2:20389:20389.527559
+MAN AUNG:2:20389:5281.851887
+PAUNGDE:2:150292:1233.482185
+ARAKAN (SANDOWAY):2:20389:20389.527559
+KYANGIN:2:82090:241.974364
+KYAUKTAGA:2:150292:133.574813
+GYOBINGAUK:2:150292:390.009712
+ZIGON:2:150292:781.776940
+MAN AUNG:2:20389:20389.527559
+ARAKAN (SANDOWAY):2:20389:20389.527559
+MYANAUNG:2:82090:132.819548
+OKPO:2:150292:379.972741
+MONYO:2:150292:735.555357
+GWA:2:20389:21.515095
+GWA:2:20389:20389.527559
+MINHLA:2:150292:204.657476
+NYAUNGIEBIN:2:150292:513.786026
+GWA:2:20389:20389.527559
+INGAPU:2:82090:119.718205
+LETPATAN:2:150292:554.944638
+BAGO (PEGU):2:150292:139.380111
+DAIK-U:2:150292:305.812895
+HENZADA:2:82090:288.126375
+THARRAWADDY:2:150292:712.046615
+HMAWBI:2:239030:427.170578
+LEMYETHNA:2:82090:206.800108
+WAW:2:150292:449.051634
+DANUBYU:2:82090:156.044753
+HLEGU:2:239030:298.073846
+ZALUN:2:82090:401.408410
+GWA:2:20389:20389.527559
+TAIKKYI:2:239030:586.529609
+YEGYI:2:82090:290.631695
+KYONPYAW:2:82090:194.665678
+WAW:2:150292:5997.511252
+THABAUNG:2:82090:119.413480
+WAW:2:150292:6554.200093
+WAW:2:137000:137000.000000
+THANATPIN:2:150292:519.028705
+THANATPIN:2:150292:129852.869515
+PANTANAW:2:82090:126.366711
+YANDOON:2:82090:244.477214
+KYAUNGGON:2:82090:570.642616
+KAWA:2:150292:362.712509
+BASSEIN WEST:2:82090:130.798548
+EINME:2:82090:311.047674
+HTANTABIN:2:239030:2215.554743
+KAYAN:2:239030:1025.528762
+NGAPUTAW:2:82090:363.972043
+IRRAWADDY:2:82090:346.861281
+YANGON (RANGOON):2:239030:2278.630855
+INSEIN:2:239030:1442.946059
+THONGWA:2:239030:754.221741
+SYRIAM:2:239030:1647.681549
+HLEGU:2:137000:137000.000000
+MA-UBIN:2:82090:250.936101
+WAKEMA:2:82090:186.372343
+NGAPUTAW:2:82090:74.426542
+MYAUNGMYA:2:82090:118.922125
+TWANTE:2:239030:1253.736491
+NGAPUTAW:2:82090:6932.149071
+KYAUKTAN:2:239030:887.409075
+KYAIKLAT:2:82090:249.476498
+KAWKHMU:2:239030:1149.776821
+KAWKHMU:2:239030:1775.315567
+MOULMEINGYUN:2:82090:189.794764
+NGAPUTAW:2:82090:82090.259740
+KUNGYANGON:2:239030:3050.511474
+DEDAYE:2:82090:332.069276
+KAWKHMU:2:137000:137000.000000
+DEDAYE:2:82090:12178.486849
+PYAPON:2:82090:254.519043
+DEDAYE:2:82090:82090.259740
+DEDAYE:2:82090:82090.259740
+BOGALE:2:82090:97.970040
+MYAUNGMYA:2:82090:82090.259740
+DEDAYE:2:82090:82090.259740
+NGAPUTAW:2:82090:82090.259740
+DEDAYE:2:82090:82090.259740
+DEDAYE:2:82090:1378.261385
+NGAPUTAW:2:82090:3985.971587
+DEDAYE:2:82090:3091.186619
+KAWKHMU:2:137000:137000.000000
+DEDAYE:2:82090:52891.675009
+LABUTTA:2:82090:100.006836
+MYAUNGMYA:2:82090:82090.259740
+DEDAYE:2:82090:82090.259740
+NGAPUTAW:2:82090:8626.922738
+MYAUNGMYA:2:82090:82090.259740
+NGAPUTAW:2:82090:485.101402
+DEDAYE:2:82090:67345.887795
+NGAPUTAW:2:82090:82090.259740
+LABUTTA:2:82090:82090.259740
+BOGALE:2:82090:6027.580203
+LABUTTA:2:82090:82090.259740
+NGAPUTAW:2:82090:74500.451721
+LABUTTA:2:82090:82090.259740
+MOULMEINGYUN:2:82090:82090.259740
+BOGALE:2:82090:2795.779804
+LABUTTA:2:82090:36267.534955
+BOGALE:2:82090:1651.042713
+LABUTTA:2:82090:8672.785852
+LABUTTA:2:82090:30797.171029
+LABUTTA:2:82090:82090.259740
+NGAPUTAW:2:82090:16711.591045
+BOGALE:2:82090:25926.200963
+BOGALE:2:82090:20612.254005
+BOGALE:2:82090:82090.259740
+LABUTTA:2:82090:82090.259740
+BOGALE:2:82090:70527.368244
+LABUTTA:2:82090:82090.259740
+LABUTTA:2:82090:2015.776928
+NGAPUTAW:2:82090:82090.259740
+LABUTTA:2:82090:82090.259740
+LABUTTA:2:82090:82090.259740
+NGAPUTAW:2:82090:82090.259740
+LABUTTA:2:82090:46297.487198
+BOGALE:2:82090:21575.889051
+BOGALE:2:82090:70191.531674
+BOGALE:2:82090:82090.259740
+BOGALE:2:82090:82090.259740
+BOGALE:2:82090:82090.259740
+COCOS ISLANDS:2:239030:63774.734061
+COCOS ISLANDS:2:137000:137000.000000
+COCOS ISLANDS:2:239030:40224.405402
+COCOS ISLANDS:2:197777:137000.000000
+MONG YANG:2:74440:71.892983
+KENG TUNG:2:74440:35.639960
+MONG YAWNG:2:74440:40.932319
+MONG PING:2:74440:31.172946
+MONG HPAYAK:2:74440:90.635411
+NAMSANG:2:74440:54.983774
+TAUNGGYI:2:74440:116.448154
+TACHILEK:2:74440:55.248611
+MONG NAI:2:74440:57.081205
+MONG HSAT:2:74440:38.915219
+HO-PONG:2:74440:193.926900
+MONG TUNG:2:74440:40.545788
+YAWUNGHWE:2:74440:151.261406
+HSI HSENG:2:74440:91.064385
+LANGKHO:2:74440:84.208304
+MAWKMAI:2:74440:74.113902
+PINLAUNG:2:74440:54.263793
+MONG PAN:2:74440:36.727048
+LOI-KAW:2:33680:62.303315
+PEKHON:2:74440:106.423469
+HSATAW:2:33680:37.738706
+DIMAWHSO:2:33680:77.767050
+PHRUHSO:2:33680:54.815003
+PASAWNG:2:33680:25.713553
+BAWLAKHE:2:33680:45.883629
+PAPUN:2:151072:56.525270
+KYAUKKI:2:150292:180.862597
+SHWEGYIN:2:150292:164.001781
+HLAINGBWE:2:151072:88.416463
+BILIN:2:75940:110.831352
+PA-AN:2:151072:143.670472
+KYAIKTO:2:75940:233.635135
+THATON:2:75940:143.780952
+MYAWADI:2:151072:131.006396
+THATON:2:75940:51163.662410
+KAWKAREIK:2:151072:264.992739
+PAUNG:2:75940:229.024661
+MOULMEIN:2:75940:17200.550965
+MOULMEIN:2:75940:10470.343961
+KYA-IN SEIKKYI:2:151072:48.020041
+MOULMEIN:2:75940:75940.535714
+MOULMEIN:2:75940:16719.886135
+MOULMEIN:2:75940:75940.535714
+KYAIKMARAW:2:75940:165.689489
+MOULMEIN:2:75940:13042.460641
+PAUNG:2:75940:75940.535714
+PAUNG:2:75940:38412.802549
+MOULMEIN:2:75940:75940.535714
+CHAUNGZON:2:75940:75940.535714
+CHAUNGZON:2:75940:554.021382
+MOULMEIN:2:75940:3288.689880
+CHAUNGZON:2:75940:75940.535714
+MUDON:2:75940:277.752539
+CHAUNGZON:2:75940:66691.961290
+CHAUNGZON:2:75940:8255.900194
+THANBYUZAYAT:2:75940:215.808795
+YE:2:75940:74.939713
+YE:2:75940:20341.897830
+YE:2:75940:75940.535714
+YEBYU:2:4701:2.966934
+YE:2:75940:75940.535714
+YE:2:75940:75940.535714
+TAVOY:2:4701:1.841648
+YEBYU:2:4701:4701.154472
+YEBYU:2:4701:3479.686929
+YEBYU:2:4701:4337.094429
+LAUNGLON:2:4701:15.090678
+LAUNGLON:2:4701:888.445368
+LAUNGLON:2:4701:2686.716348
+THAYETCHAUNG:2:4701:5.543398
+LAUNGLON:2:4701:2443.729771
+LAUNGLON:2:4701:853.158556
+LAUNGLON:2:4701:4701.154472
+LAUNGLON:2:4701:3210.504425
+LAUNGLON:2:4701:4701.154472
+PALAW:2:4701:6.082240
+TENASSERIM:2:4701:1.035557
+PALAW:2:4701:484.850340
+PALAW:2:4701:4701.154472
+PALAW:2:4701:129.360916
+PALAW:2:4701:777.204097
+PALAW:2:4701:2271.660873
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:3130.698868
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4396.926716
+PALAW:2:4701:4701.154472
+MERGUI:2:4701:709.097030
+PALAW:2:4701:4701.154472
+PALAW:2:4701:4701.154472
+PALAW:2:4701:1728.656054
+PALAW:2:4701:1707.816563
+MERGUI:2:4701:1071.875906
+MERGUI:2:4701:4.684822
+MERGUI:2:4701:27.452996
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:688.481958
+MERGUI:2:4701:297.821356
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:262.044859
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3735.887156
+MERGUI:2:4701:2447.077747
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4057.157763
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3245.212569
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:107.253514
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:1665.323921
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3454.737135
+MERGUI:2:4701:448.740116
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3474.504855
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:699.847645
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:2557.381141
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:1477.304271
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3479.277459
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:1850.797211
+MERGUI:2:4701:4304.310003
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:110.173149
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4295.826096
+MERGUI:2:4701:2873.594407
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:1373.349675
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4168.569673
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:1262.552117
+MERGUI:2:4701:1508.168568
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:51.000570
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:2304.485227
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3318.936783
+MERGUI:2:4701:1301.591836
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4448.375532
+MERGUI:2:4701:2803.390716
+MERGUI:2:4701:3742.164854
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:596.966993
+MERGUI:2:4701:756.698757
+MERGUI:2:4701:1720.697126
+BOKPYIN:2:4701:2.291176
+MERGUI:2:4701:576.662563
+MERGUI:2:4701:552.598706
+MERGUI:2:4701:3291.516465
+MERGUI:2:4701:1180.786656
+MERGUI:2:4701:1705.261206
+MERGUI:2:4701:172.885726
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:922.228985
+MERGUI:2:4701:1561.428786
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:3706.269446
+MERGUI:2:4701:802.346384
+MERGUI:2:4701:30.048178
+MERGUI:2:4701:49.361900
+MERGUI:2:4701:874.363192
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+MERGUI:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+MERGUI:2:4701:2673.010459
+BOKPYIN:2:4701:1254.183000
+MERGUI:2:4701:1876.254476
+BOKPYIN:2:4701:917.608540
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:2961.765731
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:2979.198559
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:542.821001
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:1579.229455
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:466.178662
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:194.145869
+BOKPYIN:2:4701:1256.604769
+BOKPYIN:2:4701:690.933819
+BOKPYIN:2:4701:1775.664217
+BOKPYIN:2:4701:964.459071
+BOKPYIN:2:4701:2942.668653
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:67.542418
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:326.194038
+KAWTHAUNG:2:4701:5.764682
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4407.012809
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:238.001999
+BOKPYIN:2:4701:792.403838
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:2581.264878
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:1682.069135
+BOKPYIN:2:4701:4701.154472
+BOKPYIN:2:4701:4701.154472
+KAWTHAUNG:2:4701:566.432748
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:577.389794
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:340.792251
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:3651.126890
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:273.174531
+KAWTHAUNG:2:4701:3296.906418
+KAWTHAUNG:2:4701:1648.574026
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:950.919804
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:3956.201693
+KAWTHAUNG:2:4701:72.168389
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4543.376632
+KAWTHAUNG:2:4701:3813.887800
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:1617.675013
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:461.369315
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:3757.160406
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:2297.632882
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4254.669459
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:4701.154472
+KAWTHAUNG:2:4701:1958.554855
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_AREA.txt
new file mode 100644
index 0000000..d74f1ef
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_AREA.txt
@@ -0,0 +1,34 @@
+Namibia	:	0	:	824292
+Caprivi	:	1	:	19532.30
+Erongo	[SWAKOPMUND] :	1	:	63719.80
+Hardap 	:	1	:	109888.10
+keetmanshoop	:	1	:	161324.50
+Berseba 	:	1	:	36804.70
+Karasburg 	:	1	:	144254.60
+Keetmanshoop [Karas]	:	1	:	10582.00
+Khomas [windhoek]:		1	:	43417.50
+Kunene [Outjo]	:	1	:	84731.90
+Ohangwena [Eenhana]	:	1	:	13637.60
+Kavango [Okavango] [Rundu]	:	1	:	5290.50
+Omaheke [Gobabis]	:	1	:	26607.20
+Omusati [Utapi]	:	1	:	105327.80
+Oshana [Oshakati]	:	1	:	161977
+Oshikoto [Tsumeb]	:	1	:	160788
+Otjozondjupa [Otjiwarongo]	:	1	:	135723
+Bethanien : 1 : 18004
+Boesmanland : 1 : 18468
+Damaraland : 1 : 46560
+Grootfontein : 1 : 26520
+Hereroland East : 1 : 51949
+Hereroland West : 1 : 16500
+Kaokoland : 1 : 58190
+Karibib : 1 : 13230
+Luderitz :1 : 53063
+Maltahohe : 1 : 25573
+Mariental : 1  : 47689
+Namaland : 1 : 21120
+Okahandja : 1 : 17640
+Omaruru : 1 :  8425
+Owambo : 1 : 51800
+Rehoboth : 1 : 14182
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_POPULATION.txt
new file mode 100644
index 0000000..b648a60
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NAMIBIA_POPULATION.txt
@@ -0,0 +1,33 @@
+Namibia	:	0	:	2031000
+Caprivi	:	1	:	79852
+Erongo [SWAKOPMUND]	:	1	:	107629
+Hardap 	:	1	:	67998
+keetmanshoop	:	1	:	69677
+Berseba :		1	:	9195
+Karasburg 	:	1	:	14693
+Keetmanshoop [Karas]	:	1	:	21294
+Khomas [windhoek]	:	1	:	250305
+Kunene [Outjo]	:	1	:	68224
+Ohangwena [Eenhana]	 :	1	:	227728
+Kavango [Okavango] [Rundu]	:	1	:	201093
+Omaheke [Gobabis]	:	1	:	67496
+Omusati [Utapi]	 :	1	:	228364
+Oshana [Oshakati]	:	1	:	161977
+Oshikoto [Tsumeb]	:	1	:	160788
+Otjozondjupa [Otjiwarongo]	:	1	:	135723
+Bethanien : 1 :  2900
+Boesmanland : 1 : 3800
+Damaraland : 1 : 32900
+Grootfontein : 1 : 135,384
+Hereroland East : 1 : 25300
+Hereroland West : 1 : 18800
+Kaokoland : 1 : 26300
+Karibib : 1 : 12100 
+Luderitz :1 : 17500
+Maltahohe : 1 : 4100
+Mariental : 1  : 24900
+Namaland : 1 : 16200
+Okahandja : 1 : 20100 
+Omaruru : 1 : 7400
+Owambo : 1 : 615100
+Rehoboth : 1 : 34400
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_AREA.txt
new file mode 100644
index 0000000..cf63786
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_AREA.txt
@@ -0,0 +1,17 @@
+Nepal	:	0	:	140800
+Central [Central Hill]	:	1	:	11805
+Central Mountain 	:	1	:	6277
+Central Tarai 	:	1	:	9328
+East : 1 : 17707
+Eastern [Eastern Hill] 	:	1	:	10749
+Eastern Mountain 	:	1	:	10438
+Eastern Tarai 	:	1	:	7269
+Far West [Far-western Hill] 	:	1	:	6762
+Far-western Mountain 	:	1	:	7932
+Far-western Tarai 	:	1	:	4845
+MidWest [Mid-western Mountain] 	:	1	:	21351
+Mid-western Tarai 	:	1	:	7317
+Mid-western Hill 	:	1	:	13710
+West [Western Hill] 	:	1	:	18319
+Western Mountain 	:	1	:	5819
+Western Tarai 	:	1	:	5260
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_POPULATION.txt
new file mode 100644
index 0000000..57c98ee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NEPAL_POPULATION.txt
@@ -0,0 +1,17 @@
+Nepal	:	0	:	28287147
+Central [Central Hill]	:	1	:	3542732
+Central Mountain 	:	1	:	554817
+Central Tarai 	:	1	:	3934080
+East : 1 : 3701230
+Eastern [Eastern Hill] 	:	1	:	1643246
+Eastern Mountain 	:	1	:	401587
+Eastern Tarai 	:	1	:	3299643
+Far West [Far-western Hill] 	:	1	:	798931
+Far-western Mountain 	:	1	:	397803
+Far-western Tarai 	:	1	:	994596
+MidWest [Mid-western Mountain] 	:	1	:	309084
+Mid-western Tarai 	:	1	:	1230869
+Mid-western Hill 	:	1	:	1473022
+West [Western Hill] 	:	1	:	2793180
+Western Mountain 	:	1	:	24568
+Western Tarai 	:	1	:	1753265
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_AREA.txt
new file mode 100644
index 0000000..7fd950a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_AREA.txt
@@ -0,0 +1,13 @@
+ NETHERLANDS : 0 : 41526
+ GRONINGEN : 1 : 2891.0
+ FRIESLAND : 1 : 607.0
+ DRENTHE : 1 : 2680.0
+ NOORD-HOLLAND : 1 : 3518.0
+ OVERIJSSEL : 1 : 3419.0
+ FLEVOLAND : 1 : 2245.0
+ GELDERLAND : 1 : 5144.0
+ ZUID-HOLLAND : 1 : 3359.0
+ UTRECHT : 1 : 1401.0
+ NOORD-BRABANT : 1 : 5083.0
+ ZEELAND : 1 : 3040.0
+ LIMBURG : 1 : 2153
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_POPULATION.txt
new file mode 100644
index 0000000..9b60754
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NETHERLANDS_POPULATION.txt
@@ -0,0 +1,12 @@
+ GRONINGEN : 1 : 554600
+ FRIESLAND : 1 : 600000
+ DRENTHE : 1 : 443500
+ NOORD-HOLLAND : 1 : 2397100
+ OVERIJSSEL : 1 : 1026300
+ FLEVOLAND : 1 : 221500
+ GELDERLAND : 1 : 1816900
+ ZUID-HOLLAND : 1 : 3245400
+ UTRECHT : 1 : 1026800
+ NOORD-BRABANT : 1 : 2209000
+ ZEELAND : 1 : 357500
+LIMBURG : 1 : 1131938
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_AREA.txt
new file mode 100644
index 0000000..d34cb15
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_AREA.txt
@@ -0,0 +1 @@
+NICARAGUA : 0 : 120339
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_POPULATION.txt
new file mode 100644
index 0000000..709c97e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NICARAGUA_POPULATION.txt
@@ -0,0 +1 @@
+NICARAGUA : 0 : 5142098
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_AREA.txt
new file mode 100644
index 0000000..049347f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_AREA.txt
@@ -0,0 +1,37 @@
+Nigeria	:	0	:	923768
+Abia  	:	1	:	6320
+Abuja FCT [FCT] 	:	1	:	7315
+Adamawa [Adamwara]	:	1	:	36917
+Akwalbom 	:	1	:	7081
+Anambra 	:	1	:	4844
+Bauchi 	:	1	:	64605
+Bayelsa 	:	1	:	0  
+Benue 	:	1	:	34059
+Borno 	:	1	:	70898
+Cross River 	:	1	:	20156
+Delta 	:	1	:	17698
+Ebonyi 	:	1	:	  0
+Edo 	:	1	:	17802
+Ekiti 	:	1	:	  0
+Enugu 	:	1	:	12831
+Gombe 	:	1	:	  0
+Imo 	:	1	:	5530
+Jigawa 	:	1	:	23154
+Kaduna 	:	1	:	46053
+Kano 	:	1	:	20131
+Katsina 	:	1	:	24192
+Kebbi 	:	1	:	36800
+Kogi 	:	1	:	29833
+Kwara 	:	1	:	36825
+Lagos 	:	1	:	3345
+Nasarawa 	:	1	:	27117
+Niger 	:	1	:	76363
+Ogun 	:	1	:	16762
+Ondo 	:	1	:	20959
+Osun 	:	1	:	9251
+Oyo 	:	1	:	28454
+Plateau 	:	1	:	30913
+Rivers 	:	1	:	21850
+Sokoto 	:	1	:	65735
+Taraba 	:	1	:	54473
+Yobe 	:	1	:	45502
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_POPULATION.txt
new file mode 100644
index 0000000..8c1402f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGERIA_POPULATION.txt
@@ -0,0 +1,37 @@
+Nigeria	:	0	:	131859731
+Abia  	:	1	:	2569362
+Abuja FCT [FCT]	:	1	:	423391
+Adamawa [Adamwara] 	:	1	:	2374892
+Akwalbom 	:	1	:	2638413
+Anambra 	:	1	:	3094783
+Bauchi 	:	1	:	4801569
+Bayelsa 	:	1	:	0
+Benue 	:	1	:	3108754
+Borno 	:	1	:	2903238
+Cross River 	:	1	:	2085926
+Delta 	:	1	:	2873711
+Ebonyi 	:	1	:	0
+Edo 	:	1	:	2414919
+Ekiti 	:	1	:	0
+Enugu 	:	1	:	3534633
+Gombe 	:	1	:	0
+Imo 	:	1	:	2779028
+Jigawa 	:	1	:	3164134
+Kaduna 	:	1	:	4438007
+Kano 	:	1	:	6297165
+Katsina 	:	1	:	4336363
+Kebbi 	:	1	:	2305768
+Kogi 	:	1	:	2346936
+Kwara 	:	1	:	1751464
+Lagos 	:	1	:	6357253
+Nasarawa 	:	1	:	0
+Niger 	:	1	:	2775526
+Ogun 	:	1	:	2614747
+Ondo 	:	1	:	4343230
+Osun 	:	1	:	2463185
+Oyo 	:	1	:	3900803
+Plateau 	:	1	:	3671498
+Rivers 	:	1	:	4454337
+Sokoto 	:	1	:	4911118
+Taraba 	:	1	:	1655443
+Yobe 	:	1	:	1578172
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_AREA.txt
new file mode 100644
index 0000000..257e33c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_AREA.txt
@@ -0,0 +1,48 @@
+Niger	:	0	:	1267000
+Agadez	:	1	:	627080
+Arlit 	:	1	:	0
+Bilma 	:	1	:	0
+Tchirozérine 	:	1	:	0
+Diffa	:	1	:	147017
+Diffa Comm. 	:	1	:	0
+Maîné Soroa 	:	1	:	0
+N'guigmi 	:	1	:	0
+Dosso	:	1	:	31740
+Boboye 	:	1	:	0
+Dogondoutchi 	:	1	:	0
+Dosso 	:	1	:	0
+Gaya 	:	1	:	0
+Loga 	:	1	:	0
+Maradi	:	1	:	39219
+Aguié 	:	1	:	0
+Dakoro 	:	1	:	0
+Guidan Roumdji 	:	1	:	0
+Madarounfa 	:	1	:	0
+Mayahi 	:	1	:	0
+Tessaoua 	:	1	:	0
+Niamey	:	1	:	402
+Naimey Comm1 	:	1	:	0
+Naimey Comm2 	:	1	:	0
+Naimey Comm3 	:	1	:	0
+Tahoua	:	1	:	106397
+Abalak 	:	1	:	0
+Bimi N'Konni 	:	1	:	0
+Bouza 	:	1	:	0
+Illéla 	:	1	:	0
+Keita 	:	1	:	0
+Madaoua 	:	1	:	0
+Tahoua 	:	1	:	0
+Tchinta-Baraden 	:	1	:	0
+Tillabery	:	1	:	91521
+Filingué 	:	1	:	0
+Kollo 	:	1	:	0
+Ouallam 	:	1	:	0
+Say 	:	1	:	0
+Téra 	:	1	:	0
+Tillabéry 	:	1	:	0
+zinder	:	1	:	146170
+Gouré 	:	1	:	0
+Magaria 	:	1	:	0
+Matameye 	:	1	:	0
+Miriah 	:	1	:	0
+Tanout 	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_POPULATION.txt
new file mode 100644
index 0000000..a30dedb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NIGER_POPULATION.txt
@@ -0,0 +1,48 @@
+Niger	:	0	:	12525094
+Agadez	:	1	:	313274
+Arlit 	:	1	:	96325
+Bilma 	:	1	:	14115
+Tchirozérine 	:	1	:	202834
+Diffa	:	1	:	329658
+Diffa Comm. 	:	1	:	142522
+Maîné Soroa 	:	1	:	135911
+N'guigmi 	:	1	:	51225
+Dosso	:	1	:	1479095
+Boboye 	:	1	:	264884
+Dogondoutchi 	:	1	:	482882
+Dosso 	:	1	:	352413
+Gaya 	:	1	:	247127
+Loga 	:	1	:	131789
+Maradi	:	1	:	2202035
+Aguié 	:	1	:	273926
+Dakoro 	:	1	:	429975
+Guidan Roumdji 	:	1	:	341833
+Madarounfa 	:	1	:	431833
+Mayahi 	:	1	:	388607
+Tessaoua 	:	1	:	335861
+Niamey	:	1	:	674950
+Naimey Comm1 	:	1	:	299386
+Naimey Comm2 	:	1	:	282382
+Naimey Comm3 	:	1	:	93182
+Tahoua	:	1	:	1908100
+Abalak 	:	1	:	77670
+Bimi N'Konni 	:	1	:	351781
+Bouza 	:	1	:	269549
+Illéla 	:	1	:	256813
+Keita 	:	1	:	210368
+Madaoua 	:	1	:	311055
+Tahoua 	:	1	:	345851
+Tchinta-Baraden 	:	1	:	85013
+Tillabery	:	1	:	1858342
+Filingué 	:	1	:	404086
+Kollo 	:	1	:	316587
+Ouallam 	:	1	:	280233
+Say 	:	1	:	229628
+Téra 	:	1	:	413850
+Tillabéry 	:	1	:	213958
+zinder	:	1	:	2024898
+Gouré 	:	1	:	219802
+Magaria 	:	1	:	485703
+Matameye 	:	1	:	238232
+Miriah 	:	1	:	749332
+Tanout 	:	1	:	331829
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_AREA.txt
new file mode 100644
index 0000000..8e8230e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_AREA.txt
@@ -0,0 +1,14 @@
+North Korea	:	0	:	120540
+Changang 	:	1	:	16968
+South Hamgyong	:	1	:	17570
+North Hamgyong	:	1	:	18970
+North Hwanghae [Hwanghaebuk-do] 	:	1	:	8007
+South Hwanghae [Hwanghaenam-do] 	:	1	:	8002
+Kaesong 	:	1	:	1255
+Kangwon	:	1	:	11152
+Najin So(nbong-si 	:	1	:	0
+Nampo 	:	1	:	753
+Pyongyang	:	1	:	12191
+South Pyongan	:	1	:	11577
+North Pyongan	:	1	:	2000
+Yanggang	:	1	:	14317
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_POPULATION.txt
new file mode 100644
index 0000000..7d40341
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTH KOREA_POPULATION.txt
@@ -0,0 +1,14 @@
+North Korea	:	0	:	23113019
+Changang 	:	1	:	1152733
+South Hamgyong	:	1	:	2060725
+North Hamgyong	:	1	:	2732232
+North Hwanghae [Hwanghaebuk-do] 	:	1	:	1512060
+South Hwanghae [Hwanghaenam-do] 	:	1	:	2010953
+Kaesong 	:	1	:	334433
+Kangwon	:	1	:	1304481
+Najin So(nbong-si 	:	1	:	0
+Nampo 	:	1	:	731448
+Pyongyang	:	1	:	2404490
+South Pyongan	:	1	:	2866109
+North Pyongan	:	1	:	2741260
+Yanggang	:	1	:	638474
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_AREA.txt
new file mode 100644
index 0000000..0536e66
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_AREA.txt
@@ -0,0 +1,14 @@
+North Korea	:	0	:	120540
+Changang 	:	1	:	16968
+South Hamgyong	:	1	:	17570
+North Hamgyong	:	1	:	18970
+North Hwanghae [Hwanghaebuk-do] 	:	1	:	8007
+South Hwanghae [Hwanghaenam-do] 	:	1	:	8002
+Kaesong 	:	1	:	1255
+Kangwon	:	1	:	11152
+Najin So(nbong-si 	:	1	:	0
+Nampo 	:	1	:	753
+Pyongyang	:	1	:	12191
+South Pyongan	:	1	:	11577
+North Pyongan	:	1	:	2000
+Yanggang	:	1	:	14317
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_POPULATION.txt
new file mode 100644
index 0000000..45508e7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORTHKOREA_POPULATION.txt
@@ -0,0 +1,14 @@
+North Korea	:	0	:	23113019
+Changang 	:	1	:	1152733
+South Hamgyong	:	1	:	2060725
+North Hamgyong	:	1	:	2732232
+North Hwanghae [Hwanghaebuk-do] 	:	1	:	1512060
+South Hwanghae [Hwanghaenam-do] 	:	1	:	2010953
+Kaesong 	:	1	:	334433
+Kangwon	:	1	:	1304481
+Najin So(nbong-si 	:	1	:	0
+Nampo 	:	1	:	731448
+Pyongyang	:	1	:	2404490
+South Pyongan	:	1	:	2866109
+North Pyongan	:	1	:	2741260
+Yanggang	:	1	:	638474
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_AREA.txt
new file mode 100644
index 0000000..91bebab
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_AREA.txt
@@ -0,0 +1,18 @@
+ Finnmark : 1 : 48637.0
+ Troms : 1 : 25954.0
+ Nordland : 1 : 38327.0
+ Nord-Troendelag : 1 : 22463.0
+ Soer-Troendelag : 1 : 18831.0
+ Moere og Romsdal : 1 : 15104.0
+ Hedmark : 1 : 27388.0
+ Oppland : 1 : 25260.0
+ Sogn og Fjordane : 1 : 18634.0
+ Buskerud : 1 : 14927.0
+ Hordaland : 1 : 15634.0
+ Oslo og Akershus : 1 : 5371.0
+ Telemark : 1 : 15315.0
+ Oestfold : 1 : 4183.0
+ Rogaland : 1 : 9141.0
+ Vestfold : 1 : 2216.0
+ Aust-Agder : 1 : 9212.0
+ Vest-Agder : 1 : 7280.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_POPULATION.txt
new file mode 100644
index 0000000..0139b05
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/NORWAY_POPULATION.txt
@@ -0,0 +1,18 @@
+ Finnmark : 1 : 74590
+ Troms : 1 : 146816
+ Nordland : 1 : 239532
+ Nord-Troendelag : 1 : 127226
+ Soer-Troendelag : 1 : 251076
+ Moere og Romsdal : 1 : 238346
+ Hedmark : 1 : 187314
+ Oppland : 1 : 182593
+ Sogn og Fjordane : 1 : 106614
+ Buskerud : 1 : 225261
+ Hordaland : 1 : 411022
+ Oslo og Akershus : 1 : 879758
+ Telemark : 1 : 162981
+ Oestfold : 1 : 238345
+ Rogaland : 1 : 337906
+ Vestfold : 1 : 198354
+ Aust-Agder : 1 : 97314
+ Vest-Agder : 1 : 145091
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_AREA.txt
new file mode 100644
index 0000000..c40cd1c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_AREA.txt
@@ -0,0 +1,9 @@
+Oman	:	0	:	212460
+A dakhliya	:	1	:	31900
+Al Dhahira	:	1	:	44000
+Al Batnah	:	1	:	12500
+Al Wusta	:	1	:	79700
+A Sharqiya	:	1	:	36400
+dhofar	:	1	:	99300
+Musandam	:	1	:	1800
+Muscat	:	1	:	3900
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_POPULATION.txt
new file mode 100644
index 0000000..ac3cb72
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/OMAN_POPULATION.txt
@@ -0,0 +1,9 @@
+Oman	:	0	:	3102229
+A dakhliya	:	1	:	267140
+Al Dhahira	:	1	:	207015
+Al Batnah	:	1	:	653505
+Al Wusta	:	1	:	22983
+A Sharqiya	:	1	:	313761
+dhofar	:	1	:	215960
+Musandam	:	1	:	28378
+Muscat	:	1	:	632073
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_AREA.txt
new file mode 100644
index 0000000..b289f2a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_AREA.txt
@@ -0,0 +1,9 @@
+Pakistan	:	0	:	803940
+Jammu and kashmir	:	1	:	13297
+Baluchistan	:	1	:	347190
+F.A.T.A.	:	1	:	27220
+F.C.T.	:	1	:	906
+N.W.F.P.	:	1	:	74521
+Northern Areas 	:	1	:	72520
+Punjab 	:	1	:	205345
+Sind	:	1	:	140914
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_POPULATION.txt
new file mode 100644
index 0000000..66a8c93
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAKISTAN_POPULATION.txt
@@ -0,0 +1,9 @@
+Pakistan	:	0	:	165803560
+Jammu and kashmir	:	1	:	2580000
+Baluchistan	:	1	:	6565885
+F.A.T.A.	:	1	:	3176331
+F.C.T.	:	1	:	805235
+N.W.F.P.	:	1	:	17743645
+Northern Areas 	:	1	:	730000
+Punjab 	:	1	:	73621290
+Sind	:	1	:	30439893
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_AREA.txt
new file mode 100644
index 0000000..0c7ebe8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_AREA.txt
@@ -0,0 +1 @@
+PANAMA : 0 : 75001
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_POPULATION.txt
new file mode 100644
index 0000000..b3c86d7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PANAMA_POPULATION.txt
@@ -0,0 +1 @@
+PANAMA : 0 : 3283959
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_AREA.txt
new file mode 100644
index 0000000..adc81aa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_AREA.txt
@@ -0,0 +1,1013 @@
+Papua New Guinea	:	0	:	462840
+PG-UNK-1	:	1	:	933
+PG-UNK-2	:	1	:	933
+PG-UNK-3	:	1	:	933
+PG-UNK-4	:	1	:	933
+PG-UNK-5	:	1	:	933
+PG-UNK-6	:	1	:	933
+PG-UNK-7	:	1	:	933
+PG-UNK-8	:	1	:	933
+PG-UNK-9	:	1	:	933
+PG-UNK-10	:	1	:	933
+PG-UNK-11	:	1	:	933
+PG-UNK-12	:	1	:	933
+PG-UNK-13	:	1	:	933
+PG-UNK-14	:	1	:	933
+PG-UNK-15	:	1	:	933
+PG-UNK-16	:	1	:	933
+PG-UNK-17	:	1	:	933
+PG-UNK-18	:	1	:	933
+PG-UNK-19	:	1	:	933
+PG-UNK-20	:	1	:	933
+PG-UNK-21	:	1	:	933
+PG-UNK-22	:	1	:	933
+PG-UNK-23	:	1	:	933
+PG-UNK-24	:	1	:	933
+PG-UNK-25	:	1	:	933
+PG-UNK-26	:	1	:	933
+PG-UNK-27	:	1	:	933
+PG-UNK-28	:	1	:	933
+PG-UNK-29	:	1	:	933
+PG-UNK-30	:	1	:	933
+PG-UNK-31	:	1	:	933
+PG-UNK-32	:	1	:	933
+PG-UNK-33	:	1	:	933
+PG-UNK-34	:	1	:	933
+PG-UNK-35	:	1	:	933
+PG-UNK-36	:	1	:	933
+PG-UNK-37	:	1	:	933
+PG-UNK-38	:	1	:	933
+PG-UNK-39	:	1	:	933
+PG-UNK-40	:	1	:	933
+PG-UNK-41	:	1	:	933
+PG-UNK-42	:	1	:	933
+PG-UNK-43	:	1	:	933
+PG-UNK-44	:	1	:	933
+PG-UNK-45	:	1	:	933
+PG-UNK-46	:	1	:	933
+PG-UNK-47	:	1	:	933
+PG-UNK-48	:	1	:	933
+PG-UNK-49	:	1	:	933
+PG-UNK-50	:	1	:	933
+PG-UNK-51	:	1	:	933
+PG-UNK-52	:	1	:	933
+PG-UNK-53	:	1	:	933
+PG-UNK-54	:	1	:	933
+PG-UNK-55	:	1	:	933
+PG-UNK-56	:	1	:	933
+PG-UNK-57	:	1	:	933
+PG-UNK-58	:	1	:	933
+PG-UNK-59	:	1	:	933
+PG-UNK-60	:	1	:	933
+PG-UNK-61	:	1	:	933
+PG-UNK-62	:	1	:	933
+PG-UNK-63	:	1	:	933
+PG-UNK-64	:	1	:	933
+PG-UNK-65	:	1	:	933
+PG-UNK-66	:	1	:	933
+PG-UNK-67	:	1	:	933
+PG-UNK-68	:	1	:	933
+PG-UNK-69	:	1	:	933
+PG-UNK-70	:	1	:	933
+PG-UNK-71	:	1	:	933
+PG-UNK-72	:	1	:	933
+PG-UNK-73	:	1	:	933
+PG-UNK-74	:	1	:	933
+PG-UNK-75	:	1	:	933
+PG-UNK-76	:	1	:	933
+PG-UNK-77	:	1	:	933
+PG-UNK-78	:	1	:	933
+PG-UNK-79	:	1	:	933
+PG-UNK-80	:	1	:	933
+PG-UNK-81	:	1	:	933
+PG-UNK-82	:	1	:	933
+PG-UNK-83	:	1	:	933
+PG-UNK-84	:	1	:	933
+PG-UNK-85	:	1	:	933
+PG-UNK-86	:	1	:	933
+PG-UNK-87	:	1	:	933
+PG-UNK-88	:	1	:	933
+PG-UNK-89	:	1	:	933
+PG-UNK-90	:	1	:	933
+PG-UNK-91	:	1	:	933
+PG-UNK-92	:	1	:	933
+PG-UNK-93	:	1	:	933
+PG-UNK-94	:	1	:	933
+PG-UNK-95	:	1	:	933
+PG-UNK-96	:	1	:	933
+PG-UNK-97	:	1	:	933
+PG-UNK-98	:	1	:	933
+PG-UNK-99	:	1	:	933
+PG-UNK-100	:	1	:	933
+PG-UNK-101	:	1	:	933
+PG-UNK-102	:	1	:	933
+PG-UNK-103	:	1	:	933
+PG-UNK-104	:	1	:	933
+PG-UNK-105	:	1	:	933
+PG-UNK-106	:	1	:	933
+PG-UNK-107	:	1	:	933
+PG-UNK-108	:	1	:	933
+PG-UNK-109	:	1	:	933
+PG-UNK-110	:	1	:	933
+PG-UNK-111	:	1	:	933
+PG-UNK-112	:	1	:	933
+PG-UNK-113	:	1	:	933
+PG-UNK-114	:	1	:	933
+PG-UNK-115	:	1	:	933
+PG-UNK-116	:	1	:	933
+PG-UNK-117	:	1	:	933
+PG-UNK-118	:	1	:	933
+PG-UNK-119	:	1	:	933
+PG-UNK-120	:	1	:	933
+PG-UNK-121	:	1	:	933
+PG-UNK-122	:	1	:	933
+PG-UNK-123	:	1	:	933
+PG-UNK-124	:	1	:	933
+PG-UNK-125	:	1	:	933
+PG-UNK-126	:	1	:	933
+PG-UNK-127	:	1	:	933
+PG-UNK-128	:	1	:	933
+PG-UNK-129	:	1	:	933
+PG-UNK-130	:	1	:	933
+PG-UNK-131	:	1	:	933
+PG-UNK-132	:	1	:	933
+PG-UNK-133	:	1	:	933
+PG-UNK-134	:	1	:	933
+PG-UNK-135	:	1	:	933
+PG-UNK-136	:	1	:	933
+PG-UNK-137	:	1	:	933
+PG-UNK-138	:	1	:	933
+PG-UNK-139	:	1	:	933
+PG-UNK-140	:	1	:	933
+PG-UNK-141	:	1	:	933
+PG-UNK-142	:	1	:	933
+PG-UNK-143	:	1	:	933
+PG-UNK-144	:	1	:	933
+PG-UNK-145	:	1	:	933
+PG-UNK-146	:	1	:	933
+PG-UNK-147	:	1	:	933
+PG-UNK-148	:	1	:	933
+PG-UNK-149	:	1	:	933
+PG-UNK-150	:	1	:	933
+PG-UNK-151	:	1	:	933
+PG-UNK-152	:	1	:	933
+PG-UNK-153	:	1	:	933
+PG-UNK-154	:	1	:	933
+PG-UNK-155	:	1	:	933
+PG-UNK-156	:	1	:	933
+PG-UNK-157	:	1	:	933
+PG-UNK-158	:	1	:	933
+PG-UNK-159	:	1	:	933
+PG-UNK-160	:	1	:	933
+PG-UNK-161	:	1	:	933
+PG-UNK-162	:	1	:	933
+PG-UNK-163	:	1	:	933
+PG-UNK-164	:	1	:	933
+PG-UNK-165	:	1	:	933
+PG-UNK-166	:	1	:	933
+PG-UNK-167	:	1	:	933
+PG-UNK-168	:	1	:	933
+PG-UNK-169	:	1	:	933
+PG-UNK-170	:	1	:	933
+PG-UNK-171	:	1	:	933
+PG-UNK-172	:	1	:	933
+PG-UNK-173	:	1	:	933
+PG-UNK-174	:	1	:	933
+PG-UNK-175	:	1	:	933
+PG-UNK-176	:	1	:	933
+PG-UNK-177	:	1	:	933
+PG-UNK-178	:	1	:	933
+PG-UNK-179	:	1	:	933
+PG-UNK-180	:	1	:	933
+PG-UNK-181	:	1	:	933
+PG-UNK-182	:	1	:	933
+PG-UNK-183	:	1	:	933
+PG-UNK-184	:	1	:	933
+PG-UNK-185	:	1	:	933
+PG-UNK-186	:	1	:	933
+PG-UNK-187	:	1	:	933
+PG-UNK-188	:	1	:	933
+PG-UNK-189	:	1	:	933
+PG-UNK-190	:	1	:	933
+PG-UNK-191	:	1	:	933
+PG-UNK-192	:	1	:	933
+PG-UNK-193	:	1	:	933
+PG-UNK-194	:	1	:	933
+PG-UNK-195	:	1	:	933
+PG-UNK-196	:	1	:	933
+PG-UNK-197	:	1	:	933
+PG-UNK-198	:	1	:	933
+PG-UNK-199	:	1	:	933
+PG-UNK-200	:	1	:	933
+PG-UNK-201	:	1	:	933
+PG-UNK-202	:	1	:	933
+PG-UNK-203	:	1	:	933
+PG-UNK-204	:	1	:	933
+PG-UNK-205	:	1	:	933
+PG-UNK-206	:	1	:	933
+PG-UNK-207	:	1	:	933
+PG-UNK-208	:	1	:	933
+PG-UNK-209	:	1	:	933
+PG-UNK-210	:	1	:	933
+PG-UNK-211	:	1	:	933
+PG-UNK-212	:	1	:	933
+PG-UNK-213	:	1	:	933
+PG-UNK-214	:	1	:	933
+PG-UNK-215	:	1	:	933
+PG-UNK-216	:	1	:	933
+PG-UNK-217	:	1	:	933
+PG-UNK-218	:	1	:	933
+PG-UNK-219	:	1	:	933
+PG-UNK-220	:	1	:	933
+PG-UNK-221	:	1	:	933
+PG-UNK-222	:	1	:	933
+PG-UNK-223	:	1	:	933
+PG-UNK-224	:	1	:	933
+PG-UNK-225	:	1	:	933
+PG-UNK-226	:	1	:	933
+PG-UNK-227	:	1	:	933
+PG-UNK-228	:	1	:	933
+PG-UNK-229	:	1	:	933
+PG-UNK-230	:	1	:	933
+PG-UNK-231	:	1	:	933
+PG-UNK-232	:	1	:	933
+PG-UNK-233	:	1	:	933
+PG-UNK-234	:	1	:	933
+PG-UNK-235	:	1	:	933
+PG-UNK-236	:	1	:	933
+PG-UNK-237	:	1	:	933
+PG-UNK-238	:	1	:	933
+PG-UNK-239	:	1	:	933
+PG-UNK-240	:	1	:	933
+PG-UNK-241	:	1	:	933
+PG-UNK-242	:	1	:	933
+PG-UNK-243	:	1	:	933
+PG-UNK-244	:	1	:	933
+PG-UNK-245	:	1	:	933
+PG-UNK-246	:	1	:	933
+PG-UNK-247	:	1	:	933
+PG-UNK-248	:	1	:	933
+PG-UNK-249	:	1	:	933
+PG-UNK-250	:	1	:	933
+PG-UNK-251	:	1	:	933
+PG-UNK-252	:	1	:	933
+PG-UNK-253	:	1	:	933
+PG-UNK-254	:	1	:	933
+PG-UNK-255	:	1	:	933
+PG-UNK-256	:	1	:	933
+PG-UNK-257	:	1	:	933
+PG-UNK-258	:	1	:	933
+PG-UNK-259	:	1	:	933
+PG-UNK-260	:	1	:	933
+PG-UNK-261	:	1	:	933
+PG-UNK-262	:	1	:	933
+PG-UNK-263	:	1	:	933
+PG-UNK-264	:	1	:	933
+PG-UNK-265	:	1	:	933
+PG-UNK-266	:	1	:	933
+PG-UNK-267	:	1	:	933
+PG-UNK-268	:	1	:	933
+PG-UNK-269	:	1	:	933
+PG-UNK-270	:	1	:	933
+PG-UNK-271	:	1	:	933
+PG-UNK-272	:	1	:	933
+PG-UNK-273	:	1	:	933
+PG-UNK-274	:	1	:	933
+PG-UNK-275	:	1	:	933
+PG-UNK-276	:	1	:	933
+PG-UNK-277	:	1	:	933
+PG-UNK-278	:	1	:	933
+PG-UNK-279	:	1	:	933
+PG-UNK-280	:	1	:	933
+PG-UNK-281	:	1	:	933
+PG-UNK-282	:	1	:	933
+PG-UNK-283	:	1	:	933
+PG-UNK-284	:	1	:	933
+PG-UNK-285	:	1	:	933
+PG-UNK-286	:	1	:	933
+PG-UNK-287	:	1	:	933
+PG-UNK-288	:	1	:	933
+PG-UNK-289	:	1	:	933
+PG-UNK-290	:	1	:	933
+PG-UNK-291	:	1	:	933
+PG-UNK-292	:	1	:	933
+PG-UNK-293	:	1	:	933
+PG-UNK-294	:	1	:	933
+PG-UNK-295	:	1	:	933
+PG-UNK-296	:	1	:	933
+PG-UNK-297	:	1	:	933
+PG-UNK-298	:	1	:	933
+PG-UNK-299	:	1	:	933
+PG-UNK-300	:	1	:	933
+PG-UNK-301	:	1	:	933
+PG-UNK-302	:	1	:	933
+PG-UNK-303	:	1	:	933
+PG-UNK-304	:	1	:	933
+PG-UNK-305	:	1	:	933
+PG-UNK-306	:	1	:	933
+PG-UNK-307	:	1	:	933
+PG-UNK-308	:	1	:	933
+PG-UNK-309	:	1	:	933
+PG-UNK-310	:	1	:	933
+PG-UNK-311	:	1	:	933
+PG-UNK-312	:	1	:	933
+PG-UNK-313	:	1	:	933
+PG-UNK-314	:	1	:	933
+PG-UNK-315	:	1	:	933
+PG-UNK-316	:	1	:	933
+PG-UNK-317	:	1	:	933
+PG-UNK-318	:	1	:	933
+PG-UNK-319	:	1	:	933
+PG-UNK-320	:	1	:	933
+PG-UNK-321	:	1	:	933
+PG-UNK-322	:	1	:	933
+PG-UNK-323	:	1	:	933
+PG-UNK-324	:	1	:	933
+PG-UNK-325	:	1	:	933
+PG-UNK-326	:	1	:	933
+PG-UNK-327	:	1	:	933
+PG-UNK-328	:	1	:	933
+PG-UNK-329	:	1	:	933
+PG-UNK-330	:	1	:	933
+PG-UNK-331	:	1	:	933
+PG-UNK-332	:	1	:	933
+PG-UNK-333	:	1	:	933
+PG-UNK-334	:	1	:	933
+PG-UNK-335	:	1	:	933
+PG-UNK-336	:	1	:	933
+PG-UNK-337	:	1	:	933
+PG-UNK-338	:	1	:	933
+PG-UNK-339	:	1	:	933
+PG-UNK-340	:	1	:	933
+PG-UNK-341	:	1	:	933
+PG-UNK-342	:	1	:	933
+PG-UNK-343	:	1	:	933
+PG-UNK-344	:	1	:	933
+PG-UNK-345	:	1	:	933
+PG-UNK-346	:	1	:	933
+PG-UNK-347	:	1	:	933
+PG-UNK-348	:	1	:	933
+PG-UNK-349	:	1	:	933
+PG-UNK-350	:	1	:	933
+PG-UNK-351	:	1	:	933
+PG-UNK-352	:	1	:	933
+PG-UNK-353	:	1	:	933
+PG-UNK-354	:	1	:	933
+PG-UNK-355	:	1	:	933
+PG-UNK-356	:	1	:	933
+PG-UNK-357	:	1	:	933
+PG-UNK-358	:	1	:	933
+PG-UNK-359	:	1	:	933
+PG-UNK-360	:	1	:	933
+PG-UNK-361	:	1	:	933
+PG-UNK-362	:	1	:	933
+PG-UNK-363	:	1	:	933
+PG-UNK-364	:	1	:	933
+PG-UNK-365	:	1	:	933
+PG-UNK-366	:	1	:	933
+PG-UNK-367	:	1	:	933
+PG-UNK-368	:	1	:	933
+PG-UNK-369	:	1	:	933
+PG-UNK-370	:	1	:	933
+PG-UNK-371	:	1	:	933
+PG-UNK-372	:	1	:	933
+PG-UNK-373	:	1	:	933
+PG-UNK-374	:	1	:	933
+PG-UNK-375	:	1	:	933
+PG-UNK-376	:	1	:	933
+PG-UNK-377	:	1	:	933
+PG-UNK-378	:	1	:	933
+PG-UNK-379	:	1	:	933
+PG-UNK-380	:	1	:	933
+PG-UNK-381	:	1	:	933
+PG-UNK-382	:	1	:	933
+PG-UNK-383	:	1	:	933
+PG-UNK-384	:	1	:	933
+PG-UNK-385	:	1	:	933
+PG-UNK-386	:	1	:	933
+PG-UNK-387	:	1	:	933
+PG-UNK-388	:	1	:	933
+PG-UNK-389	:	1	:	933
+PG-UNK-390	:	1	:	933
+PG-UNK-391	:	1	:	933
+PG-UNK-392	:	1	:	933
+PG-UNK-393	:	1	:	933
+PG-UNK-394	:	1	:	933
+PG-UNK-395	:	1	:	933
+PG-UNK-396	:	1	:	933
+PG-UNK-397	:	1	:	933
+PG-UNK-398	:	1	:	933
+PG-UNK-399	:	1	:	933
+PG-UNK-400	:	1	:	933
+PG-UNK-401	:	1	:	933
+PG-UNK-402	:	1	:	933
+PG-UNK-403	:	1	:	933
+PG-UNK-404	:	1	:	933
+PG-UNK-405	:	1	:	933
+PG-UNK-406	:	1	:	933
+PG-UNK-407	:	1	:	933
+PG-UNK-408	:	1	:	933
+PG-UNK-409	:	1	:	933
+PG-UNK-410	:	1	:	933
+PG-UNK-411	:	1	:	933
+PG-UNK-412	:	1	:	933
+PG-UNK-413	:	1	:	933
+PG-UNK-414	:	1	:	933
+PG-UNK-415	:	1	:	933
+PG-UNK-416	:	1	:	933
+PG-UNK-417	:	1	:	933
+PG-UNK-418	:	1	:	933
+PG-UNK-419	:	1	:	933
+PG-UNK-420	:	1	:	933
+PG-UNK-421	:	1	:	933
+PG-UNK-422	:	1	:	933
+PG-UNK-423	:	1	:	933
+PG-UNK-424	:	1	:	933
+PG-UNK-425	:	1	:	933
+PG-UNK-426	:	1	:	933
+PG-UNK-427	:	1	:	933
+PG-UNK-428	:	1	:	933
+PG-UNK-429	:	1	:	933
+PG-UNK-430	:	1	:	933
+PG-UNK-431	:	1	:	933
+PG-UNK-432	:	1	:	933
+PG-UNK-433	:	1	:	933
+PG-UNK-434	:	1	:	933
+PG-UNK-435	:	1	:	933
+PG-UNK-436	:	1	:	933
+PG-UNK-437	:	1	:	933
+PG-UNK-438	:	1	:	933
+PG-UNK-439	:	1	:	933
+PG-UNK-440	:	1	:	933
+PG-UNK-441	:	1	:	933
+PG-UNK-442	:	1	:	933
+PG-UNK-443	:	1	:	933
+PG-UNK-444	:	1	:	933
+PG-UNK-445	:	1	:	933
+PG-UNK-446	:	1	:	933
+PG-UNK-447	:	1	:	933
+PG-UNK-448	:	1	:	933
+PG-UNK-449	:	1	:	933
+PG-UNK-450	:	1	:	933
+PG-UNK-451	:	1	:	933
+PG-UNK-452	:	1	:	933
+PG-UNK-453	:	1	:	933
+PG-UNK-454	:	1	:	933
+PG-UNK-455	:	1	:	933
+PG-UNK-456	:	1	:	933
+PG-UNK-457	:	1	:	933
+PG-UNK-458	:	1	:	933
+PG-UNK-459	:	1	:	933
+PG-UNK-460	:	1	:	933
+PG-UNK-461	:	1	:	933
+PG-UNK-462	:	1	:	933
+PG-UNK-463	:	1	:	933
+PG-UNK-464	:	1	:	933
+PG-UNK-465	:	1	:	933
+PG-UNK-466	:	1	:	933
+PG-UNK-467	:	1	:	933
+PG-UNK-468	:	1	:	933
+PG-UNK-469	:	1	:	933
+PG-UNK-470	:	1	:	933
+PG-UNK-471	:	1	:	933
+PG-UNK-472	:	1	:	933
+PG-UNK-473	:	1	:	933
+PG-UNK-474	:	1	:	933
+PG-UNK-475	:	1	:	933
+PG-UNK-476	:	1	:	933
+PG-UNK-477	:	1	:	933
+PG-UNK-478	:	1	:	933
+PG-UNK-479	:	1	:	933
+PG-UNK-480	:	1	:	933
+PG-UNK-481	:	1	:	933
+PG-UNK-482	:	1	:	933
+PG-UNK-483	:	1	:	933
+PG-UNK-484	:	1	:	933
+PG-UNK-485	:	1	:	933
+PG-UNK-486	:	1	:	933
+PG-UNK-487	:	1	:	933
+PG-UNK-488	:	1	:	933
+PG-UNK-489	:	1	:	933
+PG-UNK-490	:	1	:	933
+PG-UNK-491	:	1	:	933
+PG-UNK-492	:	1	:	933
+PG-UNK-493	:	1	:	933
+PG-UNK-494	:	1	:	933
+PG-UNK-495	:	1	:	933
+PG-UNK-496	:	1	:	933
+PNG.L2.1		:		2		:		933
+PNG.L2.2		:		2		:		933
+PNG.L2.3		:		2		:		933
+PNG.L2.4		:		2		:		933
+PNG.L2.5		:		2		:		933
+PNG.L2.6		:		2		:		933
+PNG.L2.7		:		2		:		933
+PNG.L2.8		:		2		:		933
+PNG.L2.9		:		2		:		933
+PNG.L2.10		:		2		:		933
+PNG.L2.11		:		2		:		933
+PNG.L2.12		:		2		:		933
+PNG.L2.13		:		2		:		933
+PNG.L2.14		:		2		:		933
+PNG.L2.15		:		2		:		933
+PNG.L2.16		:		2		:		933
+PNG.L2.17		:		2		:		933
+PNG.L2.18		:		2		:		933
+PNG.L2.19		:		2		:		933
+PNG.L2.20		:		2		:		933
+PNG.L2.21		:		2		:		933
+PNG.L2.22		:		2		:		933
+PNG.L2.23		:		2		:		933
+PNG.L2.24		:		2		:		933
+PNG.L2.25		:		2		:		933
+PNG.L2.26		:		2		:		933
+PNG.L2.27		:		2		:		933
+PNG.L2.28		:		2		:		933
+PNG.L2.29		:		2		:		933
+PNG.L2.30		:		2		:		933
+PNG.L2.31		:		2		:		933
+PNG.L2.32		:		2		:		933
+PNG.L2.33		:		2		:		933
+PNG.L2.34		:		2		:		933
+PNG.L2.35		:		2		:		933
+PNG.L2.36		:		2		:		933
+PNG.L2.37		:		2		:		933
+PNG.L2.38		:		2		:		933
+PNG.L2.39		:		2		:		933
+PNG.L2.40		:		2		:		933
+PNG.L2.41		:		2		:		933
+PNG.L2.42		:		2		:		933
+PNG.L2.43		:		2		:		933
+PNG.L2.44		:		2		:		933
+PNG.L2.45		:		2		:		933
+PNG.L2.46		:		2		:		933
+PNG.L2.47		:		2		:		933
+PNG.L2.48		:		2		:		933
+PNG.L2.49		:		2		:		933
+PNG.L2.50		:		2		:		933
+PNG.L2.51		:		2		:		933
+PNG.L2.52		:		2		:		933
+PNG.L2.53		:		2		:		933
+PNG.L2.54		:		2		:		933
+PNG.L2.55		:		2		:		933
+PNG.L2.56		:		2		:		933
+PNG.L2.57		:		2		:		933
+PNG.L2.58		:		2		:		933
+PNG.L2.59		:		2		:		933
+PNG.L2.60		:		2		:		933
+PNG.L2.61		:		2		:		933
+PNG.L2.62		:		2		:		933
+PNG.L2.63		:		2		:		933
+PNG.L2.64		:		2		:		933
+PNG.L2.65		:		2		:		933
+PNG.L2.66		:		2		:		933
+PNG.L2.67		:		2		:		933
+PNG.L2.68		:		2		:		933
+PNG.L2.69		:		2		:		933
+PNG.L2.70		:		2		:		933
+PNG.L2.71		:		2		:		933
+PNG.L2.72		:		2		:		933
+PNG.L2.73		:		2		:		933
+PNG.L2.74		:		2		:		933
+PNG.L2.75		:		2		:		933
+PNG.L2.76		:		2		:		933
+PNG.L2.77		:		2		:		933
+PNG.L2.78		:		2		:		933
+PNG.L2.79		:		2		:		933
+PNG.L2.80		:		2		:		933
+PNG.L2.81		:		2		:		933
+PNG.L2.82		:		2		:		933
+PNG.L2.83		:		2		:		933
+PNG.L2.84		:		2		:		933
+PNG.L2.85		:		2		:		933
+PNG.L2.86		:		2		:		933
+PNG.L2.87		:		2		:		933
+PNG.L2.88		:		2		:		933
+PNG.L2.89		:		2		:		933
+PNG.L2.90		:		2		:		933
+PNG.L2.91		:		2		:		933
+PNG.L2.92		:		2		:		933
+PNG.L2.93		:		2		:		933
+PNG.L2.94		:		2		:		933
+PNG.L2.95		:		2		:		933
+PNG.L2.96		:		2		:		933
+PNG.L2.97		:		2		:		933
+PNG.L2.98		:		2		:		933
+PNG.L2.99		:		2		:		933
+PNG.L2.100		:		2		:		933
+PNG.L2.101		:		2		:		933
+PNG.L2.102		:		2		:		933
+PNG.L2.103		:		2		:		933
+PNG.L2.104		:		2		:		933
+PNG.L2.105		:		2		:		933
+PNG.L2.106		:		2		:		933
+PNG.L2.107		:		2		:		933
+PNG.L2.108		:		2		:		933
+PNG.L2.109		:		2		:		933
+PNG.L2.110		:		2		:		933
+PNG.L2.111		:		2		:		933
+PNG.L2.112		:		2		:		933
+PNG.L2.113		:		2		:		933
+PNG.L2.114		:		2		:		933
+PNG.L2.115		:		2		:		933
+PNG.L2.116		:		2		:		933
+PNG.L2.117		:		2		:		933
+PNG.L2.118		:		2		:		933
+PNG.L2.119		:		2		:		933
+PNG.L2.120		:		2		:		933
+PNG.L2.121		:		2		:		933
+PNG.L2.122		:		2		:		933
+PNG.L2.123		:		2		:		933
+PNG.L2.124		:		2		:		933
+PNG.L2.125		:		2		:		933
+PNG.L2.126		:		2		:		933
+PNG.L2.127		:		2		:		933
+PNG.L2.128		:		2		:		933
+PNG.L2.129		:		2		:		933
+PNG.L2.130		:		2		:		933
+PNG.L2.131		:		2		:		933
+PNG.L2.132		:		2		:		933
+PNG.L2.133		:		2		:		933
+PNG.L2.134		:		2		:		933
+PNG.L2.135		:		2		:		933
+PNG.L2.136		:		2		:		933
+PNG.L2.137		:		2		:		933
+PNG.L2.138		:		2		:		933
+PNG.L2.139		:		2		:		933
+PNG.L2.140		:		2		:		933
+PNG.L2.141		:		2		:		933
+PNG.L2.142		:		2		:		933
+PNG.L2.143		:		2		:		933
+PNG.L2.144		:		2		:		933
+PNG.L2.145		:		2		:		933
+PNG.L2.146		:		2		:		933
+PNG.L2.147		:		2		:		933
+PNG.L2.148		:		2		:		933
+PNG.L2.149		:		2		:		933
+PNG.L2.150		:		2		:		933
+PNG.L2.151		:		2		:		933
+PNG.L2.152		:		2		:		933
+PNG.L2.153		:		2		:		933
+PNG.L2.154		:		2		:		933
+PNG.L2.155		:		2		:		933
+PNG.L2.156		:		2		:		933
+PNG.L2.157		:		2		:		933
+PNG.L2.158		:		2		:		933
+PNG.L2.159		:		2		:		933
+PNG.L2.160		:		2		:		933
+PNG.L2.161		:		2		:		933
+PNG.L2.162		:		2		:		933
+PNG.L2.163		:		2		:		933
+PNG.L2.164		:		2		:		933
+PNG.L2.165		:		2		:		933
+PNG.L2.166		:		2		:		933
+PNG.L2.167		:		2		:		933
+PNG.L2.168		:		2		:		933
+PNG.L2.169		:		2		:		933
+PNG.L2.170		:		2		:		933
+PNG.L2.171		:		2		:		933
+PNG.L2.172		:		2		:		933
+PNG.L2.173		:		2		:		933
+PNG.L2.174		:		2		:		933
+PNG.L2.175		:		2		:		933
+PNG.L2.176		:		2		:		933
+PNG.L2.177		:		2		:		933
+PNG.L2.178		:		2		:		933
+PNG.L2.179		:		2		:		933
+PNG.L2.180		:		2		:		933
+PNG.L2.181		:		2		:		933
+PNG.L2.182		:		2		:		933
+PNG.L2.183		:		2		:		933
+PNG.L2.184		:		2		:		933
+PNG.L2.185		:		2		:		933
+PNG.L2.186		:		2		:		933
+PNG.L2.187		:		2		:		933
+PNG.L2.188		:		2		:		933
+PNG.L2.189		:		2		:		933
+PNG.L2.190		:		2		:		933
+PNG.L2.191		:		2		:		933
+PNG.L2.192		:		2		:		933
+PNG.L2.193		:		2		:		933
+PNG.L2.194		:		2		:		933
+PNG.L2.195		:		2		:		933
+PNG.L2.196		:		2		:		933
+PNG.L2.197		:		2		:		933
+PNG.L2.198		:		2		:		933
+PNG.L2.199		:		2		:		933
+PNG.L2.200		:		2		:		933
+PNG.L2.201		:		2		:		933
+PNG.L2.202		:		2		:		933
+PNG.L2.203		:		2		:		933
+PNG.L2.204		:		2		:		933
+PNG.L2.205		:		2		:		933
+PNG.L2.206		:		2		:		933
+PNG.L2.207		:		2		:		933
+PNG.L2.208		:		2		:		933
+PNG.L2.209		:		2		:		933
+PNG.L2.210		:		2		:		933
+PNG.L2.211		:		2		:		933
+PNG.L2.212		:		2		:		933
+PNG.L2.213		:		2		:		933
+PNG.L2.214		:		2		:		933
+PNG.L2.215		:		2		:		933
+PNG.L2.216		:		2		:		933
+PNG.L2.217		:		2		:		933
+PNG.L2.218		:		2		:		933
+PNG.L2.219		:		2		:		933
+PNG.L2.220		:		2		:		933
+PNG.L2.221		:		2		:		933
+PNG.L2.222		:		2		:		933
+PNG.L2.223		:		2		:		933
+PNG.L2.224		:		2		:		933
+PNG.L2.225		:		2		:		933
+PNG.L2.226		:		2		:		933
+PNG.L2.227		:		2		:		933
+PNG.L2.228		:		2		:		933
+PNG.L2.229		:		2		:		933
+PNG.L2.230		:		2		:		933
+PNG.L2.231		:		2		:		933
+PNG.L2.232		:		2		:		933
+PNG.L2.233		:		2		:		933
+PNG.L2.234		:		2		:		933
+PNG.L2.235		:		2		:		933
+PNG.L2.236		:		2		:		933
+PNG.L2.237		:		2		:		933
+PNG.L2.238		:		2		:		933
+PNG.L2.239		:		2		:		933
+PNG.L2.240		:		2		:		933
+PNG.L2.241		:		2		:		933
+PNG.L2.242		:		2		:		933
+PNG.L2.243		:		2		:		933
+PNG.L2.244		:		2		:		933
+PNG.L2.245		:		2		:		933
+PNG.L2.246		:		2		:		933
+PNG.L2.247		:		2		:		933
+PNG.L2.248		:		2		:		933
+PNG.L2.249		:		2		:		933
+PNG.L2.250		:		2		:		933
+PNG.L2.251		:		2		:		933
+PNG.L2.252		:		2		:		933
+PNG.L2.253		:		2		:		933
+PNG.L2.254		:		2		:		933
+PNG.L2.255		:		2		:		933
+PNG.L2.256		:		2		:		933
+PNG.L2.257		:		2		:		933
+PNG.L2.258		:		2		:		933
+PNG.L2.259		:		2		:		933
+PNG.L2.260		:		2		:		933
+PNG.L2.261		:		2		:		933
+PNG.L2.262		:		2		:		933
+PNG.L2.263		:		2		:		933
+PNG.L2.264		:		2		:		933
+PNG.L2.265		:		2		:		933
+PNG.L2.266		:		2		:		933
+PNG.L2.267		:		2		:		933
+PNG.L2.268		:		2		:		933
+PNG.L2.269		:		2		:		933
+PNG.L2.270		:		2		:		933
+PNG.L2.271		:		2		:		933
+PNG.L2.272		:		2		:		933
+PNG.L2.273		:		2		:		933
+PNG.L2.274		:		2		:		933
+PNG.L2.275		:		2		:		933
+PNG.L2.276		:		2		:		933
+PNG.L2.277		:		2		:		933
+PNG.L2.278		:		2		:		933
+PNG.L2.279		:		2		:		933
+PNG.L2.280		:		2		:		933
+PNG.L2.281		:		2		:		933
+PNG.L2.282		:		2		:		933
+PNG.L2.283		:		2		:		933
+PNG.L2.284		:		2		:		933
+PNG.L2.285		:		2		:		933
+PNG.L2.286		:		2		:		933
+PNG.L2.287		:		2		:		933
+PNG.L2.288		:		2		:		933
+PNG.L2.289		:		2		:		933
+PNG.L2.290		:		2		:		933
+PNG.L2.291		:		2		:		933
+PNG.L2.292		:		2		:		933
+PNG.L2.293		:		2		:		933
+PNG.L2.294		:		2		:		933
+PNG.L2.295		:		2		:		933
+PNG.L2.296		:		2		:		933
+PNG.L2.297		:		2		:		933
+PNG.L2.298		:		2		:		933
+PNG.L2.299		:		2		:		933
+PNG.L2.300		:		2		:		933
+PNG.L2.301		:		2		:		933
+PNG.L2.302		:		2		:		933
+PNG.L2.303		:		2		:		933
+PNG.L2.304		:		2		:		933
+PNG.L2.305		:		2		:		933
+PNG.L2.306		:		2		:		933
+PNG.L2.307		:		2		:		933
+PNG.L2.308		:		2		:		933
+PNG.L2.309		:		2		:		933
+PNG.L2.310		:		2		:		933
+PNG.L2.311		:		2		:		933
+PNG.L2.312		:		2		:		933
+PNG.L2.313		:		2		:		933
+PNG.L2.314		:		2		:		933
+PNG.L2.315		:		2		:		933
+PNG.L2.316		:		2		:		933
+PNG.L2.317		:		2		:		933
+PNG.L2.318		:		2		:		933
+PNG.L2.319		:		2		:		933
+PNG.L2.320		:		2		:		933
+PNG.L2.321		:		2		:		933
+PNG.L2.322		:		2		:		933
+PNG.L2.323		:		2		:		933
+PNG.L2.324		:		2		:		933
+PNG.L2.325		:		2		:		933
+PNG.L2.326		:		2		:		933
+PNG.L2.327		:		2		:		933
+PNG.L2.328		:		2		:		933
+PNG.L2.329		:		2		:		933
+PNG.L2.330		:		2		:		933
+PNG.L2.331		:		2		:		933
+PNG.L2.332		:		2		:		933
+PNG.L2.333		:		2		:		933
+PNG.L2.334		:		2		:		933
+PNG.L2.335		:		2		:		933
+PNG.L2.336		:		2		:		933
+PNG.L2.337		:		2		:		933
+PNG.L2.338		:		2		:		933
+PNG.L2.339		:		2		:		933
+PNG.L2.340		:		2		:		933
+PNG.L2.341		:		2		:		933
+PNG.L2.342		:		2		:		933
+PNG.L2.343		:		2		:		933
+PNG.L2.344		:		2		:		933
+PNG.L2.345		:		2		:		933
+PNG.L2.346		:		2		:		933
+PNG.L2.347		:		2		:		933
+PNG.L2.348		:		2		:		933
+PNG.L2.349		:		2		:		933
+PNG.L2.350		:		2		:		933
+PNG.L2.351		:		2		:		933
+PNG.L2.352		:		2		:		933
+PNG.L2.353		:		2		:		933
+PNG.L2.354		:		2		:		933
+PNG.L2.355		:		2		:		933
+PNG.L2.356		:		2		:		933
+PNG.L2.357		:		2		:		933
+PNG.L2.358		:		2		:		933
+PNG.L2.359		:		2		:		933
+PNG.L2.360		:		2		:		933
+PNG.L2.361		:		2		:		933
+PNG.L2.362		:		2		:		933
+PNG.L2.363		:		2		:		933
+PNG.L2.364		:		2		:		933
+PNG.L2.365		:		2		:		933
+PNG.L2.366		:		2		:		933
+PNG.L2.367		:		2		:		933
+PNG.L2.368		:		2		:		933
+PNG.L2.369		:		2		:		933
+PNG.L2.370		:		2		:		933
+PNG.L2.371		:		2		:		933
+PNG.L2.372		:		2		:		933
+PNG.L2.373		:		2		:		933
+PNG.L2.374		:		2		:		933
+PNG.L2.375		:		2		:		933
+PNG.L2.376		:		2		:		933
+PNG.L2.377		:		2		:		933
+PNG.L2.378		:		2		:		933
+PNG.L2.379		:		2		:		933
+PNG.L2.380		:		2		:		933
+PNG.L2.381		:		2		:		933
+PNG.L2.382		:		2		:		933
+PNG.L2.383		:		2		:		933
+PNG.L2.384		:		2		:		933
+PNG.L2.385		:		2		:		933
+PNG.L2.386		:		2		:		933
+PNG.L2.387		:		2		:		933
+PNG.L2.388		:		2		:		933
+PNG.L2.389		:		2		:		933
+PNG.L2.390		:		2		:		933
+PNG.L2.391		:		2		:		933
+PNG.L2.392		:		2		:		933
+PNG.L2.393		:		2		:		933
+PNG.L2.394		:		2		:		933
+PNG.L2.395		:		2		:		933
+PNG.L2.396		:		2		:		933
+PNG.L2.397		:		2		:		933
+PNG.L2.398		:		2		:		933
+PNG.L2.399		:		2		:		933
+PNG.L2.400		:		2		:		933
+PNG.L2.401		:		2		:		933
+PNG.L2.402		:		2		:		933
+PNG.L2.403		:		2		:		933
+PNG.L2.404		:		2		:		933
+PNG.L2.405		:		2		:		933
+PNG.L2.406		:		2		:		933
+PNG.L2.407		:		2		:		933
+PNG.L2.408		:		2		:		933
+PNG.L2.409		:		2		:		933
+PNG.L2.410		:		2		:		933
+PNG.L2.411		:		2		:		933
+PNG.L2.412		:		2		:		933
+PNG.L2.413		:		2		:		933
+PNG.L2.414		:		2		:		933
+PNG.L2.415		:		2		:		933
+PNG.L2.416		:		2		:		933
+PNG.L2.417		:		2		:		933
+PNG.L2.418		:		2		:		933
+PNG.L2.419		:		2		:		933
+PNG.L2.420		:		2		:		933
+PNG.L2.421		:		2		:		933
+PNG.L2.422		:		2		:		933
+PNG.L2.423		:		2		:		933
+PNG.L2.424		:		2		:		933
+PNG.L2.425		:		2		:		933
+PNG.L2.426		:		2		:		933
+PNG.L2.427		:		2		:		933
+PNG.L2.428		:		2		:		933
+PNG.L2.429		:		2		:		933
+PNG.L2.430		:		2		:		933
+PNG.L2.431		:		2		:		933
+PNG.L2.432		:		2		:		933
+PNG.L2.433		:		2		:		933
+PNG.L2.434		:		2		:		933
+PNG.L2.435		:		2		:		933
+PNG.L2.436		:		2		:		933
+PNG.L2.437		:		2		:		933
+PNG.L2.438		:		2		:		933
+PNG.L2.439		:		2		:		933
+PNG.L2.440		:		2		:		933
+PNG.L2.441		:		2		:		933
+PNG.L2.442		:		2		:		933
+PNG.L2.443		:		2		:		933
+PNG.L2.444		:		2		:		933
+PNG.L2.445		:		2		:		933
+PNG.L2.446		:		2		:		933
+PNG.L2.447		:		2		:		933
+PNG.L2.448		:		2		:		933
+PNG.L2.449		:		2		:		933
+PNG.L2.450		:		2		:		933
+PNG.L2.451		:		2		:		933
+PNG.L2.452		:		2		:		933
+PNG.L2.453		:		2		:		933
+PNG.L2.454		:		2		:		933
+PNG.L2.455		:		2		:		933
+PNG.L2.456		:		2		:		933
+PNG.L2.457		:		2		:		933
+PNG.L2.458		:		2		:		933
+PNG.L2.459		:		2		:		933
+PNG.L2.460		:		2		:		933
+PNG.L2.461		:		2		:		933
+PNG.L2.462		:		2		:		933
+PNG.L2.463		:		2		:		933
+PNG.L2.464		:		2		:		933
+PNG.L2.465		:		2		:		933
+PNG.L2.466		:		2		:		933
+PNG.L2.467		:		2		:		933
+PNG.L2.468		:		2		:		933
+PNG.L2.469		:		2		:		933
+PNG.L2.470		:		2		:		933
+PNG.L2.471		:		2		:		933
+PNG.L2.472		:		2		:		933
+PNG.L2.473		:		2		:		933
+PNG.L2.474		:		2		:		933
+PNG.L2.475		:		2		:		933
+PNG.L2.476		:		2		:		933
+PNG.L2.477		:		2		:		933
+PNG.L2.478		:		2		:		933
+PNG.L2.479		:		2		:		933
+PNG.L2.480		:		2		:		933
+PNG.L2.481		:		2		:		933
+PNG.L2.482		:		2		:		933
+PNG.L2.483		:		2		:		933
+PNG.L2.484		:		2		:		933
+PNG.L2.485		:		2		:		933
+PNG.L2.486		:		2		:		933
+PNG.L2.487		:		2		:		933
+PNG.L2.488		:		2		:		933
+PNG.L2.489		:		2		:		933
+PNG.L2.490		:		2		:		933
+PNG.L2.491		:		2		:		933
+PNG.L2.492		:		2		:		933
+PNG.L2.493		:		2		:		933
+PNG.L2.494		:		2		:		933
+PNG.L2.495		:		2		:		933
+PNG.L2.496		:		2		:		933
+Central  	:	1	:	29500
+Simbu 	:	1	:	6100
+East New Britain 	:	1	:	15500
+East Sepik 	:	1	:	42800
+Eastern Highlands 	:	1	:	11200
+Enga 	:	1	:	12800
+Gulf 	:	1	:	34500
+Madang 	:	1	:	29000
+Manus 	:	1	:	2100
+Milne Bay 	:	1	:	14000
+Morobe 	:	1	:	34500
+National Capital District 	:	1	:	240
+New Ireland 	:	1	:	9600
+North Solomons 	:	1	:	9300
+Oro (Northern) 	:	1	:	22800
+Southern Highlands 	:	1	:	23800
+West New Britain 	:	1	:	21000
+West Sepik 	:	1	:	36300
+Western 	:	1	:	99300
+Western Highlands 	:	1	:	8500
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_POPULATION.txt
new file mode 100644
index 0000000..b00a9aa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUA NEW GUINEA_POPULATION.txt
@@ -0,0 +1,1015 @@
+Papua New Guinea	:	0	:	5670544
+PG-UNK-1	:	1	:	11869
+PG-UNK-2	:	1	:	11869
+PG-UNK-3	:	1	:	11869
+PG-UNK-4	:	1	:	11869
+PG-UNK-5	:	1	:	11869
+PG-UNK-6	:	1	:	11869
+PG-UNK-7	:	1	:	11869
+PG-UNK-8	:	1	:	11869
+PG-UNK-9	:	1	:	11869
+PG-UNK-10	:	1	:	11869
+PG-UNK-11	:	1	:	11869
+PG-UNK-12	:	1	:	11869
+PG-UNK-13	:	1	:	11869
+PG-UNK-14	:	1	:	11869
+PG-UNK-15	:	1	:	11869
+PG-UNK-16	:	1	:	11869
+PG-UNK-17	:	1	:	11869
+PG-UNK-18	:	1	:	11869
+PG-UNK-19	:	1	:	11869
+PG-UNK-20	:	1	:	11869
+PG-UNK-21	:	1	:	11869
+PG-UNK-22	:	1	:	11869
+PG-UNK-23	:	1	:	11869
+PG-UNK-24	:	1	:	11869
+PG-UNK-25	:	1	:	11869
+PG-UNK-26	:	1	:	11869
+PG-UNK-27	:	1	:	11869
+PG-UNK-28	:	1	:	11869
+PG-UNK-29	:	1	:	11869
+PG-UNK-30	:	1	:	11869
+PG-UNK-31	:	1	:	11869
+PG-UNK-32	:	1	:	11869
+PG-UNK-33	:	1	:	11869
+PG-UNK-34	:	1	:	11869
+PG-UNK-35	:	1	:	11869
+PG-UNK-36	:	1	:	11869
+PG-UNK-37	:	1	:	11869
+PG-UNK-38	:	1	:	11869
+PG-UNK-39	:	1	:	11869
+PG-UNK-40	:	1	:	11869
+PG-UNK-41	:	1	:	11869
+PG-UNK-42	:	1	:	11869
+PG-UNK-43	:	1	:	11869
+PG-UNK-44	:	1	:	11869
+PG-UNK-45	:	1	:	11869
+PG-UNK-46	:	1	:	11869
+PG-UNK-47	:	1	:	11869
+PG-UNK-48	:	1	:	11869
+PG-UNK-49	:	1	:	11869
+PG-UNK-50	:	1	:	11869
+PG-UNK-51	:	1	:	11869
+PG-UNK-52	:	1	:	11869
+PG-UNK-53	:	1	:	11869
+PG-UNK-54	:	1	:	11869
+PG-UNK-55	:	1	:	11869
+PG-UNK-56	:	1	:	11869
+PG-UNK-57	:	1	:	11869
+PG-UNK-58	:	1	:	11869
+PG-UNK-59	:	1	:	11869
+PG-UNK-60	:	1	:	11869
+PG-UNK-61	:	1	:	11869
+PG-UNK-62	:	1	:	11869
+PG-UNK-63	:	1	:	11869
+PG-UNK-64	:	1	:	11869
+PG-UNK-65	:	1	:	11869
+PG-UNK-66	:	1	:	11869
+PG-UNK-67	:	1	:	11869
+PG-UNK-68	:	1	:	11869
+PG-UNK-69	:	1	:	11869
+PG-UNK-70	:	1	:	11869
+PG-UNK-71	:	1	:	11869
+PG-UNK-72	:	1	:	11869
+PG-UNK-73	:	1	:	11869
+PG-UNK-74	:	1	:	11869
+PG-UNK-75	:	1	:	11869
+PG-UNK-76	:	1	:	11869
+PG-UNK-77	:	1	:	11869
+PG-UNK-78	:	1	:	11869
+PG-UNK-79	:	1	:	11869
+PG-UNK-80	:	1	:	11869
+PG-UNK-81	:	1	:	11869
+PG-UNK-82	:	1	:	11869
+PG-UNK-83	:	1	:	11869
+PG-UNK-84	:	1	:	11869
+PG-UNK-85	:	1	:	11869
+PG-UNK-86	:	1	:	11869
+PG-UNK-87	:	1	:	11869
+PG-UNK-88	:	1	:	11869
+PG-UNK-89	:	1	:	11869
+PG-UNK-90	:	1	:	11869
+PG-UNK-91	:	1	:	11869
+PG-UNK-92	:	1	:	11869
+PG-UNK-93	:	1	:	11869
+PG-UNK-94	:	1	:	11869
+PG-UNK-95	:	1	:	11869
+PG-UNK-96	:	1	:	11869
+PG-UNK-97	:	1	:	11869
+PG-UNK-98	:	1	:	11869
+PG-UNK-99	:	1	:	11869
+PG-UNK-100	:	1	:	11869
+PG-UNK-101	:	1	:	11869
+PG-UNK-102	:	1	:	11869
+PG-UNK-103	:	1	:	11869
+PG-UNK-104	:	1	:	11869
+PG-UNK-105	:	1	:	11869
+PG-UNK-106	:	1	:	11869
+PG-UNK-107	:	1	:	11869
+PG-UNK-108	:	1	:	11869
+PG-UNK-109	:	1	:	11869
+PG-UNK-110	:	1	:	11869
+PG-UNK-111	:	1	:	11869
+PG-UNK-112	:	1	:	11869
+PG-UNK-113	:	1	:	11869
+PG-UNK-114	:	1	:	11869
+PG-UNK-115	:	1	:	11869
+PG-UNK-116	:	1	:	11869
+PG-UNK-117	:	1	:	11869
+PG-UNK-118	:	1	:	11869
+PG-UNK-119	:	1	:	11869
+PG-UNK-120	:	1	:	11869
+PG-UNK-121	:	1	:	11869
+PG-UNK-122	:	1	:	11869
+PG-UNK-123	:	1	:	11869
+PG-UNK-124	:	1	:	11869
+PG-UNK-125	:	1	:	11869
+PG-UNK-126	:	1	:	11869
+PG-UNK-127	:	1	:	11869
+PG-UNK-128	:	1	:	11869
+PG-UNK-129	:	1	:	11869
+PG-UNK-130	:	1	:	11869
+PG-UNK-131	:	1	:	11869
+PG-UNK-132	:	1	:	11869
+PG-UNK-133	:	1	:	11869
+PG-UNK-134	:	1	:	11869
+PG-UNK-135	:	1	:	11869
+PG-UNK-136	:	1	:	11869
+PG-UNK-137	:	1	:	11869
+PG-UNK-138	:	1	:	11869
+PG-UNK-139	:	1	:	11869
+PG-UNK-140	:	1	:	11869
+PG-UNK-141	:	1	:	11869
+PG-UNK-142	:	1	:	11869
+PG-UNK-143	:	1	:	11869
+PG-UNK-144	:	1	:	11869
+PG-UNK-145	:	1	:	11869
+PG-UNK-146	:	1	:	11869
+PG-UNK-147	:	1	:	11869
+PG-UNK-148	:	1	:	11869
+PG-UNK-149	:	1	:	11869
+PG-UNK-150	:	1	:	11869
+PG-UNK-151	:	1	:	11869
+PG-UNK-152	:	1	:	11869
+PG-UNK-153	:	1	:	11869
+PG-UNK-154	:	1	:	11869
+PG-UNK-155	:	1	:	11869
+PG-UNK-156	:	1	:	11869
+PG-UNK-157	:	1	:	11869
+PG-UNK-158	:	1	:	11869
+PG-UNK-159	:	1	:	11869
+PG-UNK-160	:	1	:	11869
+PG-UNK-161	:	1	:	11869
+PG-UNK-162	:	1	:	11869
+PG-UNK-163	:	1	:	11869
+PG-UNK-164	:	1	:	11869
+PG-UNK-165	:	1	:	11869
+PG-UNK-166	:	1	:	11869
+PG-UNK-167	:	1	:	11869
+PG-UNK-168	:	1	:	11869
+PG-UNK-169	:	1	:	11869
+PG-UNK-170	:	1	:	11869
+PG-UNK-171	:	1	:	11869
+PG-UNK-172	:	1	:	11869
+PG-UNK-173	:	1	:	11869
+PG-UNK-174	:	1	:	11869
+PG-UNK-175	:	1	:	11869
+PG-UNK-176	:	1	:	11869
+PG-UNK-177	:	1	:	11869
+PG-UNK-178	:	1	:	11869
+PG-UNK-179	:	1	:	11869
+PG-UNK-180	:	1	:	11869
+PG-UNK-181	:	1	:	11869
+PG-UNK-182	:	1	:	11869
+PG-UNK-183	:	1	:	11869
+PG-UNK-184	:	1	:	11869
+PG-UNK-185	:	1	:	11869
+PG-UNK-186	:	1	:	11869
+PG-UNK-187	:	1	:	11869
+PG-UNK-188	:	1	:	11869
+PG-UNK-189	:	1	:	11869
+PG-UNK-190	:	1	:	11869
+PG-UNK-191	:	1	:	11869
+PG-UNK-192	:	1	:	11869
+PG-UNK-193	:	1	:	11869
+PG-UNK-194	:	1	:	11869
+PG-UNK-195	:	1	:	11869
+PG-UNK-196	:	1	:	11869
+PG-UNK-197	:	1	:	11869
+PG-UNK-198	:	1	:	11869
+PG-UNK-199	:	1	:	11869
+PG-UNK-200	:	1	:	11869
+PG-UNK-201	:	1	:	11869
+PG-UNK-202	:	1	:	11869
+PG-UNK-203	:	1	:	11869
+PG-UNK-204	:	1	:	11869
+PG-UNK-205	:	1	:	11869
+PG-UNK-206	:	1	:	11869
+PG-UNK-207	:	1	:	11869
+PG-UNK-208	:	1	:	11869
+PG-UNK-209	:	1	:	11869
+PG-UNK-210	:	1	:	11869
+PG-UNK-211	:	1	:	11869
+PG-UNK-212	:	1	:	11869
+PG-UNK-213	:	1	:	11869
+PG-UNK-214	:	1	:	11869
+PG-UNK-215	:	1	:	11869
+PG-UNK-216	:	1	:	11869
+PG-UNK-217	:	1	:	11869
+PG-UNK-218	:	1	:	11869
+PG-UNK-219	:	1	:	11869
+PG-UNK-220	:	1	:	11869
+PG-UNK-221	:	1	:	11869
+PG-UNK-222	:	1	:	11869
+PG-UNK-223	:	1	:	11869
+PG-UNK-224	:	1	:	11869
+PG-UNK-225	:	1	:	11869
+PG-UNK-226	:	1	:	11869
+PG-UNK-227	:	1	:	11869
+PG-UNK-228	:	1	:	11869
+PG-UNK-229	:	1	:	11869
+PG-UNK-230	:	1	:	11869
+PG-UNK-231	:	1	:	11869
+PG-UNK-232	:	1	:	11869
+PG-UNK-233	:	1	:	11869
+PG-UNK-234	:	1	:	11869
+PG-UNK-235	:	1	:	11869
+PG-UNK-236	:	1	:	11869
+PG-UNK-237	:	1	:	11869
+PG-UNK-238	:	1	:	11869
+PG-UNK-239	:	1	:	11869
+PG-UNK-240	:	1	:	11869
+PG-UNK-241	:	1	:	11869
+PG-UNK-242	:	1	:	11869
+PG-UNK-243	:	1	:	11869
+PG-UNK-244	:	1	:	11869
+PG-UNK-245	:	1	:	11869
+PG-UNK-246	:	1	:	11869
+PG-UNK-247	:	1	:	11869
+PG-UNK-248	:	1	:	11869
+PG-UNK-249	:	1	:	11869
+PG-UNK-250	:	1	:	11869
+PG-UNK-251	:	1	:	11869
+PG-UNK-252	:	1	:	11869
+PG-UNK-253	:	1	:	11869
+PG-UNK-254	:	1	:	11869
+PG-UNK-255	:	1	:	11869
+PG-UNK-256	:	1	:	11869
+PG-UNK-257	:	1	:	11869
+PG-UNK-258	:	1	:	11869
+PG-UNK-259	:	1	:	11869
+PG-UNK-260	:	1	:	11869
+PG-UNK-261	:	1	:	11869
+PG-UNK-262	:	1	:	11869
+PG-UNK-263	:	1	:	11869
+PG-UNK-264	:	1	:	11869
+PG-UNK-265	:	1	:	11869
+PG-UNK-266	:	1	:	11869
+PG-UNK-267	:	1	:	11869
+PG-UNK-268	:	1	:	11869
+PG-UNK-269	:	1	:	11869
+PG-UNK-270	:	1	:	11869
+PG-UNK-271	:	1	:	11869
+PG-UNK-272	:	1	:	11869
+PG-UNK-273	:	1	:	11869
+PG-UNK-274	:	1	:	11869
+PG-UNK-275	:	1	:	11869
+PG-UNK-276	:	1	:	11869
+PG-UNK-277	:	1	:	11869
+PG-UNK-278	:	1	:	11869
+PG-UNK-279	:	1	:	11869
+PG-UNK-280	:	1	:	11869
+PG-UNK-281	:	1	:	11869
+PG-UNK-282	:	1	:	11869
+PG-UNK-283	:	1	:	11869
+PG-UNK-284	:	1	:	11869
+PG-UNK-285	:	1	:	11869
+PG-UNK-286	:	1	:	11869
+PG-UNK-287	:	1	:	11869
+PG-UNK-288	:	1	:	11869
+PG-UNK-289	:	1	:	11869
+PG-UNK-290	:	1	:	11869
+PG-UNK-291	:	1	:	11869
+PG-UNK-292	:	1	:	11869
+PG-UNK-293	:	1	:	11869
+PG-UNK-294	:	1	:	11869
+PG-UNK-295	:	1	:	11869
+PG-UNK-296	:	1	:	11869
+PG-UNK-297	:	1	:	11869
+PG-UNK-298	:	1	:	11869
+PG-UNK-299	:	1	:	11869
+PG-UNK-300	:	1	:	11869
+PG-UNK-301	:	1	:	11869
+PG-UNK-302	:	1	:	11869
+PG-UNK-303	:	1	:	11869
+PG-UNK-304	:	1	:	11869
+PG-UNK-305	:	1	:	11869
+PG-UNK-306	:	1	:	11869
+PG-UNK-307	:	1	:	11869
+PG-UNK-308	:	1	:	11869
+PG-UNK-309	:	1	:	11869
+PG-UNK-310	:	1	:	11869
+PG-UNK-311	:	1	:	11869
+PG-UNK-312	:	1	:	11869
+PG-UNK-313	:	1	:	11869
+PG-UNK-314	:	1	:	11869
+PG-UNK-315	:	1	:	11869
+PG-UNK-316	:	1	:	11869
+PG-UNK-317	:	1	:	11869
+PG-UNK-318	:	1	:	11869
+PG-UNK-319	:	1	:	11869
+PG-UNK-320	:	1	:	11869
+PG-UNK-321	:	1	:	11869
+PG-UNK-322	:	1	:	11869
+PG-UNK-323	:	1	:	11869
+PG-UNK-324	:	1	:	11869
+PG-UNK-325	:	1	:	11869
+PG-UNK-326	:	1	:	11869
+PG-UNK-327	:	1	:	11869
+PG-UNK-328	:	1	:	11869
+PG-UNK-329	:	1	:	11869
+PG-UNK-330	:	1	:	11869
+PG-UNK-331	:	1	:	11869
+PG-UNK-332	:	1	:	11869
+PG-UNK-333	:	1	:	11869
+PG-UNK-334	:	1	:	11869
+PG-UNK-335	:	1	:	11869
+PG-UNK-336	:	1	:	11869
+PG-UNK-337	:	1	:	11869
+PG-UNK-338	:	1	:	11869
+PG-UNK-339	:	1	:	11869
+PG-UNK-340	:	1	:	11869
+PG-UNK-341	:	1	:	11869
+PG-UNK-342	:	1	:	11869
+PG-UNK-343	:	1	:	11869
+PG-UNK-344	:	1	:	11869
+PG-UNK-345	:	1	:	11869
+PG-UNK-346	:	1	:	11869
+PG-UNK-347	:	1	:	11869
+PG-UNK-348	:	1	:	11869
+PG-UNK-349	:	1	:	11869
+PG-UNK-350	:	1	:	11869
+PG-UNK-351	:	1	:	11869
+PG-UNK-352	:	1	:	11869
+PG-UNK-353	:	1	:	11869
+PG-UNK-354	:	1	:	11869
+PG-UNK-355	:	1	:	11869
+PG-UNK-356	:	1	:	11869
+PG-UNK-357	:	1	:	11869
+PG-UNK-358	:	1	:	11869
+PG-UNK-359	:	1	:	11869
+PG-UNK-360	:	1	:	11869
+PG-UNK-361	:	1	:	11869
+PG-UNK-362	:	1	:	11869
+PG-UNK-363	:	1	:	11869
+PG-UNK-364	:	1	:	11869
+PG-UNK-365	:	1	:	11869
+PG-UNK-366	:	1	:	11869
+PG-UNK-367	:	1	:	11869
+PG-UNK-368	:	1	:	11869
+PG-UNK-369	:	1	:	11869
+PG-UNK-370	:	1	:	11869
+PG-UNK-371	:	1	:	11869
+PG-UNK-372	:	1	:	11869
+PG-UNK-373	:	1	:	11869
+PG-UNK-374	:	1	:	11869
+PG-UNK-375	:	1	:	11869
+PG-UNK-376	:	1	:	11869
+PG-UNK-377	:	1	:	11869
+PG-UNK-378	:	1	:	11869
+PG-UNK-379	:	1	:	11869
+PG-UNK-380	:	1	:	11869
+PG-UNK-381	:	1	:	11869
+PG-UNK-382	:	1	:	11869
+PG-UNK-383	:	1	:	11869
+PG-UNK-384	:	1	:	11869
+PG-UNK-385	:	1	:	11869
+PG-UNK-386	:	1	:	11869
+PG-UNK-387	:	1	:	11869
+PG-UNK-388	:	1	:	11869
+PG-UNK-389	:	1	:	11869
+PG-UNK-390	:	1	:	11869
+PG-UNK-391	:	1	:	11869
+PG-UNK-392	:	1	:	11869
+PG-UNK-393	:	1	:	11869
+PG-UNK-394	:	1	:	11869
+PG-UNK-395	:	1	:	11869
+PG-UNK-396	:	1	:	11869
+PG-UNK-397	:	1	:	11869
+PG-UNK-398	:	1	:	11869
+PG-UNK-399	:	1	:	11869
+PG-UNK-400	:	1	:	11869
+PG-UNK-401	:	1	:	11869
+PG-UNK-402	:	1	:	11869
+PG-UNK-403	:	1	:	11869
+PG-UNK-404	:	1	:	11869
+PG-UNK-405	:	1	:	11869
+PG-UNK-406	:	1	:	11869
+PG-UNK-407	:	1	:	11869
+PG-UNK-408	:	1	:	11869
+PG-UNK-409	:	1	:	11869
+PG-UNK-410	:	1	:	11869
+PG-UNK-411	:	1	:	11869
+PG-UNK-412	:	1	:	11869
+PG-UNK-413	:	1	:	11869
+PG-UNK-414	:	1	:	11869
+PG-UNK-415	:	1	:	11869
+PG-UNK-416	:	1	:	11869
+PG-UNK-417	:	1	:	11869
+PG-UNK-418	:	1	:	11869
+PG-UNK-419	:	1	:	11869
+PG-UNK-420	:	1	:	11869
+PG-UNK-421	:	1	:	11869
+PG-UNK-422	:	1	:	11869
+PG-UNK-423	:	1	:	11869
+PG-UNK-424	:	1	:	11869
+PG-UNK-425	:	1	:	11869
+PG-UNK-426	:	1	:	11869
+PG-UNK-427	:	1	:	11869
+PG-UNK-428	:	1	:	11869
+PG-UNK-429	:	1	:	11869
+PG-UNK-430	:	1	:	11869
+PG-UNK-431	:	1	:	11869
+PG-UNK-432	:	1	:	11869
+PG-UNK-433	:	1	:	11869
+PG-UNK-434	:	1	:	11869
+PG-UNK-435	:	1	:	11869
+PG-UNK-436	:	1	:	11869
+PG-UNK-437	:	1	:	11869
+PG-UNK-438	:	1	:	11869
+PG-UNK-439	:	1	:	11869
+PG-UNK-440	:	1	:	11869
+PG-UNK-441	:	1	:	11869
+PG-UNK-442	:	1	:	11869
+PG-UNK-443	:	1	:	11869
+PG-UNK-444	:	1	:	11869
+PG-UNK-445	:	1	:	11869
+PG-UNK-446	:	1	:	11869
+PG-UNK-447	:	1	:	11869
+PG-UNK-448	:	1	:	11869
+PG-UNK-449	:	1	:	11869
+PG-UNK-450	:	1	:	11869
+PG-UNK-451	:	1	:	11869
+PG-UNK-452	:	1	:	11869
+PG-UNK-453	:	1	:	11869
+PG-UNK-454	:	1	:	11869
+PG-UNK-455	:	1	:	11869
+PG-UNK-456	:	1	:	11869
+PG-UNK-457	:	1	:	11869
+PG-UNK-458	:	1	:	11869
+PG-UNK-459	:	1	:	11869
+PG-UNK-460	:	1	:	11869
+PG-UNK-461	:	1	:	11869
+PG-UNK-462	:	1	:	11869
+PG-UNK-463	:	1	:	11869
+PG-UNK-464	:	1	:	11869
+PG-UNK-465	:	1	:	11869
+PG-UNK-466	:	1	:	11869
+PG-UNK-467	:	1	:	11869
+PG-UNK-468	:	1	:	11869
+PG-UNK-469	:	1	:	11869
+PG-UNK-470	:	1	:	11869
+PG-UNK-471	:	1	:	11869
+PG-UNK-472	:	1	:	11869
+PG-UNK-473	:	1	:	11869
+PG-UNK-474	:	1	:	11869
+PG-UNK-475	:	1	:	11869
+PG-UNK-476	:	1	:	11869
+PG-UNK-477	:	1	:	11869
+PG-UNK-478	:	1	:	11869
+PG-UNK-479	:	1	:	11869
+PG-UNK-480	:	1	:	11869
+PG-UNK-481	:	1	:	11869
+PG-UNK-482	:	1	:	11869
+PG-UNK-483	:	1	:	11869
+PG-UNK-484	:	1	:	11869
+PG-UNK-485	:	1	:	11869
+PG-UNK-486	:	1	:	11869
+PG-UNK-487	:	1	:	11869
+PG-UNK-488	:	1	:	11869
+PG-UNK-489	:	1	:	11869
+PG-UNK-490	:	1	:	11869
+PG-UNK-491	:	1	:	11869
+PG-UNK-492	:	1	:	11869
+PG-UNK-493	:	1	:	11869
+PG-UNK-494	:	1	:	11869
+PG-UNK-495	:	1	:	11869
+PG-UNK-496	:	1	:	11869
+PNG.L2.1		:		2		:		11869
+PNG.L2.2		:		2		:		11869
+PNG.L2.3		:		2		:		11869
+PNG.L2.4		:		2		:		11869
+PNG.L2.5		:		2		:		11869
+PNG.L2.6		:		2		:		11869
+PNG.L2.7		:		2		:		11869
+PNG.L2.8		:		2		:		11869
+PNG.L2.9		:		2		:		11869
+PNG.L2.10		:		2		:		11869
+PNG.L2.11		:		2		:		11869
+PNG.L2.12		:		2		:		11869
+PNG.L2.13		:		2		:		11869
+PNG.L2.14		:		2		:		11869
+PNG.L2.15		:		2		:		11869
+PNG.L2.16		:		2		:		11869
+PNG.L2.17		:		2		:		11869
+PNG.L2.18		:		2		:		11869
+PNG.L2.19		:		2		:		11869
+PNG.L2.20		:		2		:		11869
+PNG.L2.21		:		2		:		11869
+PNG.L2.22		:		2		:		11869
+PNG.L2.23		:		2		:		11869
+PNG.L2.24		:		2		:		11869
+PNG.L2.25		:		2		:		11869
+PNG.L2.26		:		2		:		11869
+PNG.L2.27		:		2		:		11869
+PNG.L2.28		:		2		:		11869
+PNG.L2.29		:		2		:		11869
+PNG.L2.30		:		2		:		11869
+PNG.L2.31		:		2		:		11869
+PNG.L2.32		:		2		:		11869
+PNG.L2.33		:		2		:		11869
+PNG.L2.34		:		2		:		11869
+PNG.L2.35		:		2		:		11869
+PNG.L2.36		:		2		:		11869
+PNG.L2.37		:		2		:		11869
+PNG.L2.38		:		2		:		11869
+PNG.L2.39		:		2		:		11869
+PNG.L2.40		:		2		:		11869
+PNG.L2.41		:		2		:		11869
+PNG.L2.42		:		2		:		11869
+PNG.L2.43		:		2		:		11869
+PNG.L2.44		:		2		:		11869
+PNG.L2.45		:		2		:		11869
+PNG.L2.46		:		2		:		11869
+PNG.L2.47		:		2		:		11869
+PNG.L2.48		:		2		:		11869
+PNG.L2.49		:		2		:		11869
+PNG.L2.50		:		2		:		11869
+PNG.L2.51		:		2		:		11869
+PNG.L2.52		:		2		:		11869
+PNG.L2.53		:		2		:		11869
+PNG.L2.54		:		2		:		11869
+PNG.L2.55		:		2		:		11869
+PNG.L2.56		:		2		:		11869
+PNG.L2.57		:		2		:		11869
+PNG.L2.58		:		2		:		11869
+PNG.L2.59		:		2		:		11869
+PNG.L2.60		:		2		:		11869
+PNG.L2.61		:		2		:		11869
+PNG.L2.62		:		2		:		11869
+PNG.L2.63		:		2		:		11869
+PNG.L2.64		:		2		:		11869
+PNG.L2.65		:		2		:		11869
+PNG.L2.66		:		2		:		11869
+PNG.L2.67		:		2		:		11869
+PNG.L2.68		:		2		:		11869
+PNG.L2.69		:		2		:		11869
+PNG.L2.70		:		2		:		11869
+PNG.L2.71		:		2		:		11869
+PNG.L2.72		:		2		:		11869
+PNG.L2.73		:		2		:		11869
+PNG.L2.74		:		2		:		11869
+PNG.L2.75		:		2		:		11869
+PNG.L2.76		:		2		:		11869
+PNG.L2.77		:		2		:		11869
+PNG.L2.78		:		2		:		11869
+PNG.L2.79		:		2		:		11869
+PNG.L2.80		:		2		:		11869
+PNG.L2.81		:		2		:		11869
+PNG.L2.82		:		2		:		11869
+PNG.L2.83		:		2		:		11869
+PNG.L2.84		:		2		:		11869
+PNG.L2.85		:		2		:		11869
+PNG.L2.86		:		2		:		11869
+PNG.L2.87		:		2		:		11869
+PNG.L2.88		:		2		:		11869
+PNG.L2.89		:		2		:		11869
+PNG.L2.90		:		2		:		11869
+PNG.L2.91		:		2		:		11869
+PNG.L2.92		:		2		:		11869
+PNG.L2.93		:		2		:		11869
+PNG.L2.94		:		2		:		11869
+PNG.L2.95		:		2		:		11869
+PNG.L2.96		:		2		:		11869
+PNG.L2.97		:		2		:		11869
+PNG.L2.98		:		2		:		11869
+PNG.L2.99		:		2		:		11869
+PNG.L2.100		:		2		:		11869
+PNG.L2.101		:		2		:		11869
+PNG.L2.102		:		2		:		11869
+PNG.L2.103		:		2		:		11869
+PNG.L2.104		:		2		:		11869
+PNG.L2.105		:		2		:		11869
+PNG.L2.106		:		2		:		11869
+PNG.L2.107		:		2		:		11869
+PNG.L2.108		:		2		:		11869
+PNG.L2.109		:		2		:		11869
+PNG.L2.110		:		2		:		11869
+PNG.L2.111		:		2		:		11869
+PNG.L2.112		:		2		:		11869
+PNG.L2.113		:		2		:		11869
+PNG.L2.114		:		2		:		11869
+PNG.L2.115		:		2		:		11869
+PNG.L2.116		:		2		:		11869
+PNG.L2.117		:		2		:		11869
+PNG.L2.118		:		2		:		11869
+PNG.L2.119		:		2		:		11869
+PNG.L2.120		:		2		:		11869
+PNG.L2.121		:		2		:		11869
+PNG.L2.122		:		2		:		11869
+PNG.L2.123		:		2		:		11869
+PNG.L2.124		:		2		:		11869
+PNG.L2.125		:		2		:		11869
+PNG.L2.126		:		2		:		11869
+PNG.L2.127		:		2		:		11869
+PNG.L2.128		:		2		:		11869
+PNG.L2.129		:		2		:		11869
+PNG.L2.130		:		2		:		11869
+PNG.L2.131		:		2		:		11869
+PNG.L2.132		:		2		:		11869
+PNG.L2.133		:		2		:		11869
+PNG.L2.134		:		2		:		11869
+PNG.L2.135		:		2		:		11869
+PNG.L2.136		:		2		:		11869
+PNG.L2.137		:		2		:		11869
+PNG.L2.138		:		2		:		11869
+PNG.L2.139		:		2		:		11869
+PNG.L2.140		:		2		:		11869
+PNG.L2.141		:		2		:		11869
+PNG.L2.142		:		2		:		11869
+PNG.L2.143		:		2		:		11869
+PNG.L2.144		:		2		:		11869
+PNG.L2.145		:		2		:		11869
+PNG.L2.146		:		2		:		11869
+PNG.L2.147		:		2		:		11869
+PNG.L2.148		:		2		:		11869
+PNG.L2.149		:		2		:		11869
+PNG.L2.150		:		2		:		11869
+PNG.L2.151		:		2		:		11869
+PNG.L2.152		:		2		:		11869
+PNG.L2.153		:		2		:		11869
+PNG.L2.154		:		2		:		11869
+PNG.L2.155		:		2		:		11869
+PNG.L2.156		:		2		:		11869
+PNG.L2.157		:		2		:		11869
+PNG.L2.158		:		2		:		11869
+PNG.L2.159		:		2		:		11869
+PNG.L2.160		:		2		:		11869
+PNG.L2.161		:		2		:		11869
+PNG.L2.162		:		2		:		11869
+PNG.L2.163		:		2		:		11869
+PNG.L2.164		:		2		:		11869
+PNG.L2.165		:		2		:		11869
+PNG.L2.166		:		2		:		11869
+PNG.L2.167		:		2		:		11869
+PNG.L2.168		:		2		:		11869
+PNG.L2.169		:		2		:		11869
+PNG.L2.170		:		2		:		11869
+PNG.L2.171		:		2		:		11869
+PNG.L2.172		:		2		:		11869
+PNG.L2.173		:		2		:		11869
+PNG.L2.174		:		2		:		11869
+PNG.L2.175		:		2		:		11869
+PNG.L2.176		:		2		:		11869
+PNG.L2.177		:		2		:		11869
+PNG.L2.178		:		2		:		11869
+PNG.L2.179		:		2		:		11869
+PNG.L2.180		:		2		:		11869
+PNG.L2.181		:		2		:		11869
+PNG.L2.182		:		2		:		11869
+PNG.L2.183		:		2		:		11869
+PNG.L2.184		:		2		:		11869
+PNG.L2.185		:		2		:		11869
+PNG.L2.186		:		2		:		11869
+PNG.L2.187		:		2		:		11869
+PNG.L2.188		:		2		:		11869
+PNG.L2.189		:		2		:		11869
+PNG.L2.190		:		2		:		11869
+PNG.L2.191		:		2		:		11869
+PNG.L2.192		:		2		:		11869
+PNG.L2.193		:		2		:		11869
+PNG.L2.194		:		2		:		11869
+PNG.L2.195		:		2		:		11869
+PNG.L2.196		:		2		:		11869
+PNG.L2.197		:		2		:		11869
+PNG.L2.198		:		2		:		11869
+PNG.L2.199		:		2		:		11869
+PNG.L2.200		:		2		:		11869
+PNG.L2.201		:		2		:		11869
+PNG.L2.202		:		2		:		11869
+PNG.L2.203		:		2		:		11869
+PNG.L2.204		:		2		:		11869
+PNG.L2.205		:		2		:		11869
+PNG.L2.206		:		2		:		11869
+PNG.L2.207		:		2		:		11869
+PNG.L2.208		:		2		:		11869
+PNG.L2.209		:		2		:		11869
+PNG.L2.210		:		2		:		11869
+PNG.L2.211		:		2		:		11869
+PNG.L2.212		:		2		:		11869
+PNG.L2.213		:		2		:		11869
+PNG.L2.214		:		2		:		11869
+PNG.L2.215		:		2		:		11869
+PNG.L2.216		:		2		:		11869
+PNG.L2.217		:		2		:		11869
+PNG.L2.218		:		2		:		11869
+PNG.L2.219		:		2		:		11869
+PNG.L2.220		:		2		:		11869
+PNG.L2.221		:		2		:		11869
+PNG.L2.222		:		2		:		11869
+PNG.L2.223		:		2		:		11869
+PNG.L2.224		:		2		:		11869
+PNG.L2.225		:		2		:		11869
+PNG.L2.226		:		2		:		11869
+PNG.L2.227		:		2		:		11869
+PNG.L2.228		:		2		:		11869
+PNG.L2.229		:		2		:		11869
+PNG.L2.230		:		2		:		11869
+PNG.L2.231		:		2		:		11869
+PNG.L2.232		:		2		:		11869
+PNG.L2.233		:		2		:		11869
+PNG.L2.234		:		2		:		11869
+PNG.L2.235		:		2		:		11869
+PNG.L2.236		:		2		:		11869
+PNG.L2.237		:		2		:		11869
+PNG.L2.238		:		2		:		11869
+PNG.L2.239		:		2		:		11869
+PNG.L2.240		:		2		:		11869
+PNG.L2.241		:		2		:		11869
+PNG.L2.242		:		2		:		11869
+PNG.L2.243		:		2		:		11869
+PNG.L2.244		:		2		:		11869
+PNG.L2.245		:		2		:		11869
+PNG.L2.246		:		2		:		11869
+PNG.L2.247		:		2		:		11869
+PNG.L2.248		:		2		:		11869
+PNG.L2.249		:		2		:		11869
+PNG.L2.250		:		2		:		11869
+PNG.L2.251		:		2		:		11869
+PNG.L2.252		:		2		:		11869
+PNG.L2.253		:		2		:		11869
+PNG.L2.254		:		2		:		11869
+PNG.L2.255		:		2		:		11869
+PNG.L2.256		:		2		:		11869
+PNG.L2.257		:		2		:		11869
+PNG.L2.258		:		2		:		11869
+PNG.L2.259		:		2		:		11869
+PNG.L2.260		:		2		:		11869
+PNG.L2.261		:		2		:		11869
+PNG.L2.262		:		2		:		11869
+PNG.L2.263		:		2		:		11869
+PNG.L2.264		:		2		:		11869
+PNG.L2.265		:		2		:		11869
+PNG.L2.266		:		2		:		11869
+PNG.L2.267		:		2		:		11869
+PNG.L2.268		:		2		:		11869
+PNG.L2.269		:		2		:		11869
+PNG.L2.270		:		2		:		11869
+PNG.L2.271		:		2		:		11869
+PNG.L2.272		:		2		:		11869
+PNG.L2.273		:		2		:		11869
+PNG.L2.274		:		2		:		11869
+PNG.L2.275		:		2		:		11869
+PNG.L2.276		:		2		:		11869
+PNG.L2.277		:		2		:		11869
+PNG.L2.278		:		2		:		11869
+PNG.L2.279		:		2		:		11869
+PNG.L2.280		:		2		:		11869
+PNG.L2.281		:		2		:		11869
+PNG.L2.282		:		2		:		11869
+PNG.L2.283		:		2		:		11869
+PNG.L2.284		:		2		:		11869
+PNG.L2.285		:		2		:		11869
+PNG.L2.286		:		2		:		11869
+PNG.L2.287		:		2		:		11869
+PNG.L2.288		:		2		:		11869
+PNG.L2.289		:		2		:		11869
+PNG.L2.290		:		2		:		11869
+PNG.L2.291		:		2		:		11869
+PNG.L2.292		:		2		:		11869
+PNG.L2.293		:		2		:		11869
+PNG.L2.294		:		2		:		11869
+PNG.L2.295		:		2		:		11869
+PNG.L2.296		:		2		:		11869
+PNG.L2.297		:		2		:		11869
+PNG.L2.298		:		2		:		11869
+PNG.L2.299		:		2		:		11869
+PNG.L2.300		:		2		:		11869
+PNG.L2.301		:		2		:		11869
+PNG.L2.302		:		2		:		11869
+PNG.L2.303		:		2		:		11869
+PNG.L2.304		:		2		:		11869
+PNG.L2.305		:		2		:		11869
+PNG.L2.306		:		2		:		11869
+PNG.L2.307		:		2		:		11869
+PNG.L2.308		:		2		:		11869
+PNG.L2.309		:		2		:		11869
+PNG.L2.310		:		2		:		11869
+PNG.L2.311		:		2		:		11869
+PNG.L2.312		:		2		:		11869
+PNG.L2.313		:		2		:		11869
+PNG.L2.314		:		2		:		11869
+PNG.L2.315		:		2		:		11869
+PNG.L2.316		:		2		:		11869
+PNG.L2.317		:		2		:		11869
+PNG.L2.318		:		2		:		11869
+PNG.L2.319		:		2		:		11869
+PNG.L2.320		:		2		:		11869
+PNG.L2.321		:		2		:		11869
+PNG.L2.322		:		2		:		11869
+PNG.L2.323		:		2		:		11869
+PNG.L2.324		:		2		:		11869
+PNG.L2.325		:		2		:		11869
+PNG.L2.326		:		2		:		11869
+PNG.L2.327		:		2		:		11869
+PNG.L2.328		:		2		:		11869
+PNG.L2.329		:		2		:		11869
+PNG.L2.330		:		2		:		11869
+PNG.L2.331		:		2		:		11869
+PNG.L2.332		:		2		:		11869
+PNG.L2.333		:		2		:		11869
+PNG.L2.334		:		2		:		11869
+PNG.L2.335		:		2		:		11869
+PNG.L2.336		:		2		:		11869
+PNG.L2.337		:		2		:		11869
+PNG.L2.338		:		2		:		11869
+PNG.L2.339		:		2		:		11869
+PNG.L2.340		:		2		:		11869
+PNG.L2.341		:		2		:		11869
+PNG.L2.342		:		2		:		11869
+PNG.L2.343		:		2		:		11869
+PNG.L2.344		:		2		:		11869
+PNG.L2.345		:		2		:		11869
+PNG.L2.346		:		2		:		11869
+PNG.L2.347		:		2		:		11869
+PNG.L2.348		:		2		:		11869
+PNG.L2.349		:		2		:		11869
+PNG.L2.350		:		2		:		11869
+PNG.L2.351		:		2		:		11869
+PNG.L2.352		:		2		:		11869
+PNG.L2.353		:		2		:		11869
+PNG.L2.354		:		2		:		11869
+PNG.L2.355		:		2		:		11869
+PNG.L2.356		:		2		:		11869
+PNG.L2.357		:		2		:		11869
+PNG.L2.358		:		2		:		11869
+PNG.L2.359		:		2		:		11869
+PNG.L2.360		:		2		:		11869
+PNG.L2.361		:		2		:		11869
+PNG.L2.362		:		2		:		11869
+PNG.L2.363		:		2		:		11869
+PNG.L2.364		:		2		:		11869
+PNG.L2.365		:		2		:		11869
+PNG.L2.366		:		2		:		11869
+PNG.L2.367		:		2		:		11869
+PNG.L2.368		:		2		:		11869
+PNG.L2.369		:		2		:		11869
+PNG.L2.370		:		2		:		11869
+PNG.L2.371		:		2		:		11869
+PNG.L2.372		:		2		:		11869
+PNG.L2.373		:		2		:		11869
+PNG.L2.374		:		2		:		11869
+PNG.L2.375		:		2		:		11869
+PNG.L2.376		:		2		:		11869
+PNG.L2.377		:		2		:		11869
+PNG.L2.378		:		2		:		11869
+PNG.L2.379		:		2		:		11869
+PNG.L2.380		:		2		:		11869
+PNG.L2.381		:		2		:		11869
+PNG.L2.382		:		2		:		11869
+PNG.L2.383		:		2		:		11869
+PNG.L2.384		:		2		:		11869
+PNG.L2.385		:		2		:		11869
+PNG.L2.386		:		2		:		11869
+PNG.L2.387		:		2		:		11869
+PNG.L2.388		:		2		:		11869
+PNG.L2.389		:		2		:		11869
+PNG.L2.390		:		2		:		11869
+PNG.L2.391		:		2		:		11869
+PNG.L2.392		:		2		:		11869
+PNG.L2.393		:		2		:		11869
+PNG.L2.394		:		2		:		11869
+PNG.L2.395		:		2		:		11869
+PNG.L2.396		:		2		:		11869
+PNG.L2.397		:		2		:		11869
+PNG.L2.398		:		2		:		11869
+PNG.L2.399		:		2		:		11869
+PNG.L2.400		:		2		:		11869
+PNG.L2.401		:		2		:		11869
+PNG.L2.402		:		2		:		11869
+PNG.L2.403		:		2		:		11869
+PNG.L2.404		:		2		:		11869
+PNG.L2.405		:		2		:		11869
+PNG.L2.406		:		2		:		11869
+PNG.L2.407		:		2		:		11869
+PNG.L2.408		:		2		:		11869
+PNG.L2.409		:		2		:		11869
+PNG.L2.410		:		2		:		11869
+PNG.L2.411		:		2		:		11869
+PNG.L2.412		:		2		:		11869
+PNG.L2.413		:		2		:		11869
+PNG.L2.414		:		2		:		11869
+PNG.L2.415		:		2		:		11869
+PNG.L2.416		:		2		:		11869
+PNG.L2.417		:		2		:		11869
+PNG.L2.418		:		2		:		11869
+PNG.L2.419		:		2		:		11869
+PNG.L2.420		:		2		:		11869
+PNG.L2.421		:		2		:		11869
+PNG.L2.422		:		2		:		11869
+PNG.L2.423		:		2		:		11869
+PNG.L2.424		:		2		:		11869
+PNG.L2.425		:		2		:		11869
+PNG.L2.426		:		2		:		11869
+PNG.L2.427		:		2		:		11869
+PNG.L2.428		:		2		:		11869
+PNG.L2.429		:		2		:		11869
+PNG.L2.430		:		2		:		11869
+PNG.L2.431		:		2		:		11869
+PNG.L2.432		:		2		:		11869
+PNG.L2.433		:		2		:		11869
+PNG.L2.434		:		2		:		11869
+PNG.L2.435		:		2		:		11869
+PNG.L2.436		:		2		:		11869
+PNG.L2.437		:		2		:		11869
+PNG.L2.438		:		2		:		11869
+PNG.L2.439		:		2		:		11869
+PNG.L2.440		:		2		:		11869
+PNG.L2.441		:		2		:		11869
+PNG.L2.442		:		2		:		11869
+PNG.L2.443		:		2		:		11869
+PNG.L2.444		:		2		:		11869
+PNG.L2.445		:		2		:		11869
+PNG.L2.446		:		2		:		11869
+PNG.L2.447		:		2		:		11869
+PNG.L2.448		:		2		:		11869
+PNG.L2.449		:		2		:		11869
+PNG.L2.450		:		2		:		11869
+PNG.L2.451		:		2		:		11869
+PNG.L2.452		:		2		:		11869
+PNG.L2.453		:		2		:		11869
+PNG.L2.454		:		2		:		11869
+PNG.L2.455		:		2		:		11869
+PNG.L2.456		:		2		:		11869
+PNG.L2.457		:		2		:		11869
+PNG.L2.458		:		2		:		11869
+PNG.L2.459		:		2		:		11869
+PNG.L2.460		:		2		:		11869
+PNG.L2.461		:		2		:		11869
+PNG.L2.462		:		2		:		11869
+PNG.L2.463		:		2		:		11869
+PNG.L2.464		:		2		:		11869
+PNG.L2.465		:		2		:		11869
+PNG.L2.466		:		2		:		11869
+PNG.L2.467		:		2		:		11869
+PNG.L2.468		:		2		:		11869
+PNG.L2.469		:		2		:		11869
+PNG.L2.470		:		2		:		11869
+PNG.L2.471		:		2		:		11869
+PNG.L2.472		:		2		:		11869
+PNG.L2.473		:		2		:		11869
+PNG.L2.474		:		2		:		11869
+PNG.L2.475		:		2		:		11869
+PNG.L2.476		:		2		:		11869
+PNG.L2.477		:		2		:		11869
+PNG.L2.478		:		2		:		11869
+PNG.L2.479		:		2		:		11869
+PNG.L2.480		:		2		:		11869
+PNG.L2.481		:		2		:		11869
+PNG.L2.482		:		2		:		11869
+PNG.L2.483		:		2		:		11869
+PNG.L2.484		:		2		:		11869
+PNG.L2.485		:		2		:		11869
+PNG.L2.486		:		2		:		11869
+PNG.L2.487		:		2		:		11869
+PNG.L2.488		:		2		:		11869
+PNG.L2.489		:		2		:		11869
+PNG.L2.490		:		2		:		11869
+PNG.L2.491		:		2		:		11869
+PNG.L2.492		:		2		:		11869
+PNG.L2.493		:		2		:		11869
+PNG.L2.494		:		2		:		11869
+PNG.L2.495		:		2		:		11869
+PNG.L2.496		:		2		:		11869
+Central  	:	1	:	183153
+Simbu 	:	1	:	258776
+East New Britain 	:	1	:	220035
+East Sepik 	:	1	:	341583
+Eastern Highlands 	:	1	:	429480
+Enga 	:	1	:	289299
+Gulf 	:	1	:	105050
+Madang 	:	1	:	362805
+Manus 	:	1	:	43589
+Milne Bay 	:	1	:	209054
+Morobe 	:	1	:	536917
+National Capital District 	:	1	:	252469
+New Ireland 	:	1	:	118148
+North Solomons 	:	1	:	141161
+Oro (Northern) 	:	1	:	132714
+Southern Highlands 	:	1	:	544352
+West New Britain 	:	1	:	184838
+West Sepik 	:	1	:	185790
+Western 	:	1	:	152067
+Western Highlands 	:	1	:	439085
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_AREA.txt
new file mode 100644
index 0000000..adc81aa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_AREA.txt
@@ -0,0 +1,1013 @@
+Papua New Guinea	:	0	:	462840
+PG-UNK-1	:	1	:	933
+PG-UNK-2	:	1	:	933
+PG-UNK-3	:	1	:	933
+PG-UNK-4	:	1	:	933
+PG-UNK-5	:	1	:	933
+PG-UNK-6	:	1	:	933
+PG-UNK-7	:	1	:	933
+PG-UNK-8	:	1	:	933
+PG-UNK-9	:	1	:	933
+PG-UNK-10	:	1	:	933
+PG-UNK-11	:	1	:	933
+PG-UNK-12	:	1	:	933
+PG-UNK-13	:	1	:	933
+PG-UNK-14	:	1	:	933
+PG-UNK-15	:	1	:	933
+PG-UNK-16	:	1	:	933
+PG-UNK-17	:	1	:	933
+PG-UNK-18	:	1	:	933
+PG-UNK-19	:	1	:	933
+PG-UNK-20	:	1	:	933
+PG-UNK-21	:	1	:	933
+PG-UNK-22	:	1	:	933
+PG-UNK-23	:	1	:	933
+PG-UNK-24	:	1	:	933
+PG-UNK-25	:	1	:	933
+PG-UNK-26	:	1	:	933
+PG-UNK-27	:	1	:	933
+PG-UNK-28	:	1	:	933
+PG-UNK-29	:	1	:	933
+PG-UNK-30	:	1	:	933
+PG-UNK-31	:	1	:	933
+PG-UNK-32	:	1	:	933
+PG-UNK-33	:	1	:	933
+PG-UNK-34	:	1	:	933
+PG-UNK-35	:	1	:	933
+PG-UNK-36	:	1	:	933
+PG-UNK-37	:	1	:	933
+PG-UNK-38	:	1	:	933
+PG-UNK-39	:	1	:	933
+PG-UNK-40	:	1	:	933
+PG-UNK-41	:	1	:	933
+PG-UNK-42	:	1	:	933
+PG-UNK-43	:	1	:	933
+PG-UNK-44	:	1	:	933
+PG-UNK-45	:	1	:	933
+PG-UNK-46	:	1	:	933
+PG-UNK-47	:	1	:	933
+PG-UNK-48	:	1	:	933
+PG-UNK-49	:	1	:	933
+PG-UNK-50	:	1	:	933
+PG-UNK-51	:	1	:	933
+PG-UNK-52	:	1	:	933
+PG-UNK-53	:	1	:	933
+PG-UNK-54	:	1	:	933
+PG-UNK-55	:	1	:	933
+PG-UNK-56	:	1	:	933
+PG-UNK-57	:	1	:	933
+PG-UNK-58	:	1	:	933
+PG-UNK-59	:	1	:	933
+PG-UNK-60	:	1	:	933
+PG-UNK-61	:	1	:	933
+PG-UNK-62	:	1	:	933
+PG-UNK-63	:	1	:	933
+PG-UNK-64	:	1	:	933
+PG-UNK-65	:	1	:	933
+PG-UNK-66	:	1	:	933
+PG-UNK-67	:	1	:	933
+PG-UNK-68	:	1	:	933
+PG-UNK-69	:	1	:	933
+PG-UNK-70	:	1	:	933
+PG-UNK-71	:	1	:	933
+PG-UNK-72	:	1	:	933
+PG-UNK-73	:	1	:	933
+PG-UNK-74	:	1	:	933
+PG-UNK-75	:	1	:	933
+PG-UNK-76	:	1	:	933
+PG-UNK-77	:	1	:	933
+PG-UNK-78	:	1	:	933
+PG-UNK-79	:	1	:	933
+PG-UNK-80	:	1	:	933
+PG-UNK-81	:	1	:	933
+PG-UNK-82	:	1	:	933
+PG-UNK-83	:	1	:	933
+PG-UNK-84	:	1	:	933
+PG-UNK-85	:	1	:	933
+PG-UNK-86	:	1	:	933
+PG-UNK-87	:	1	:	933
+PG-UNK-88	:	1	:	933
+PG-UNK-89	:	1	:	933
+PG-UNK-90	:	1	:	933
+PG-UNK-91	:	1	:	933
+PG-UNK-92	:	1	:	933
+PG-UNK-93	:	1	:	933
+PG-UNK-94	:	1	:	933
+PG-UNK-95	:	1	:	933
+PG-UNK-96	:	1	:	933
+PG-UNK-97	:	1	:	933
+PG-UNK-98	:	1	:	933
+PG-UNK-99	:	1	:	933
+PG-UNK-100	:	1	:	933
+PG-UNK-101	:	1	:	933
+PG-UNK-102	:	1	:	933
+PG-UNK-103	:	1	:	933
+PG-UNK-104	:	1	:	933
+PG-UNK-105	:	1	:	933
+PG-UNK-106	:	1	:	933
+PG-UNK-107	:	1	:	933
+PG-UNK-108	:	1	:	933
+PG-UNK-109	:	1	:	933
+PG-UNK-110	:	1	:	933
+PG-UNK-111	:	1	:	933
+PG-UNK-112	:	1	:	933
+PG-UNK-113	:	1	:	933
+PG-UNK-114	:	1	:	933
+PG-UNK-115	:	1	:	933
+PG-UNK-116	:	1	:	933
+PG-UNK-117	:	1	:	933
+PG-UNK-118	:	1	:	933
+PG-UNK-119	:	1	:	933
+PG-UNK-120	:	1	:	933
+PG-UNK-121	:	1	:	933
+PG-UNK-122	:	1	:	933
+PG-UNK-123	:	1	:	933
+PG-UNK-124	:	1	:	933
+PG-UNK-125	:	1	:	933
+PG-UNK-126	:	1	:	933
+PG-UNK-127	:	1	:	933
+PG-UNK-128	:	1	:	933
+PG-UNK-129	:	1	:	933
+PG-UNK-130	:	1	:	933
+PG-UNK-131	:	1	:	933
+PG-UNK-132	:	1	:	933
+PG-UNK-133	:	1	:	933
+PG-UNK-134	:	1	:	933
+PG-UNK-135	:	1	:	933
+PG-UNK-136	:	1	:	933
+PG-UNK-137	:	1	:	933
+PG-UNK-138	:	1	:	933
+PG-UNK-139	:	1	:	933
+PG-UNK-140	:	1	:	933
+PG-UNK-141	:	1	:	933
+PG-UNK-142	:	1	:	933
+PG-UNK-143	:	1	:	933
+PG-UNK-144	:	1	:	933
+PG-UNK-145	:	1	:	933
+PG-UNK-146	:	1	:	933
+PG-UNK-147	:	1	:	933
+PG-UNK-148	:	1	:	933
+PG-UNK-149	:	1	:	933
+PG-UNK-150	:	1	:	933
+PG-UNK-151	:	1	:	933
+PG-UNK-152	:	1	:	933
+PG-UNK-153	:	1	:	933
+PG-UNK-154	:	1	:	933
+PG-UNK-155	:	1	:	933
+PG-UNK-156	:	1	:	933
+PG-UNK-157	:	1	:	933
+PG-UNK-158	:	1	:	933
+PG-UNK-159	:	1	:	933
+PG-UNK-160	:	1	:	933
+PG-UNK-161	:	1	:	933
+PG-UNK-162	:	1	:	933
+PG-UNK-163	:	1	:	933
+PG-UNK-164	:	1	:	933
+PG-UNK-165	:	1	:	933
+PG-UNK-166	:	1	:	933
+PG-UNK-167	:	1	:	933
+PG-UNK-168	:	1	:	933
+PG-UNK-169	:	1	:	933
+PG-UNK-170	:	1	:	933
+PG-UNK-171	:	1	:	933
+PG-UNK-172	:	1	:	933
+PG-UNK-173	:	1	:	933
+PG-UNK-174	:	1	:	933
+PG-UNK-175	:	1	:	933
+PG-UNK-176	:	1	:	933
+PG-UNK-177	:	1	:	933
+PG-UNK-178	:	1	:	933
+PG-UNK-179	:	1	:	933
+PG-UNK-180	:	1	:	933
+PG-UNK-181	:	1	:	933
+PG-UNK-182	:	1	:	933
+PG-UNK-183	:	1	:	933
+PG-UNK-184	:	1	:	933
+PG-UNK-185	:	1	:	933
+PG-UNK-186	:	1	:	933
+PG-UNK-187	:	1	:	933
+PG-UNK-188	:	1	:	933
+PG-UNK-189	:	1	:	933
+PG-UNK-190	:	1	:	933
+PG-UNK-191	:	1	:	933
+PG-UNK-192	:	1	:	933
+PG-UNK-193	:	1	:	933
+PG-UNK-194	:	1	:	933
+PG-UNK-195	:	1	:	933
+PG-UNK-196	:	1	:	933
+PG-UNK-197	:	1	:	933
+PG-UNK-198	:	1	:	933
+PG-UNK-199	:	1	:	933
+PG-UNK-200	:	1	:	933
+PG-UNK-201	:	1	:	933
+PG-UNK-202	:	1	:	933
+PG-UNK-203	:	1	:	933
+PG-UNK-204	:	1	:	933
+PG-UNK-205	:	1	:	933
+PG-UNK-206	:	1	:	933
+PG-UNK-207	:	1	:	933
+PG-UNK-208	:	1	:	933
+PG-UNK-209	:	1	:	933
+PG-UNK-210	:	1	:	933
+PG-UNK-211	:	1	:	933
+PG-UNK-212	:	1	:	933
+PG-UNK-213	:	1	:	933
+PG-UNK-214	:	1	:	933
+PG-UNK-215	:	1	:	933
+PG-UNK-216	:	1	:	933
+PG-UNK-217	:	1	:	933
+PG-UNK-218	:	1	:	933
+PG-UNK-219	:	1	:	933
+PG-UNK-220	:	1	:	933
+PG-UNK-221	:	1	:	933
+PG-UNK-222	:	1	:	933
+PG-UNK-223	:	1	:	933
+PG-UNK-224	:	1	:	933
+PG-UNK-225	:	1	:	933
+PG-UNK-226	:	1	:	933
+PG-UNK-227	:	1	:	933
+PG-UNK-228	:	1	:	933
+PG-UNK-229	:	1	:	933
+PG-UNK-230	:	1	:	933
+PG-UNK-231	:	1	:	933
+PG-UNK-232	:	1	:	933
+PG-UNK-233	:	1	:	933
+PG-UNK-234	:	1	:	933
+PG-UNK-235	:	1	:	933
+PG-UNK-236	:	1	:	933
+PG-UNK-237	:	1	:	933
+PG-UNK-238	:	1	:	933
+PG-UNK-239	:	1	:	933
+PG-UNK-240	:	1	:	933
+PG-UNK-241	:	1	:	933
+PG-UNK-242	:	1	:	933
+PG-UNK-243	:	1	:	933
+PG-UNK-244	:	1	:	933
+PG-UNK-245	:	1	:	933
+PG-UNK-246	:	1	:	933
+PG-UNK-247	:	1	:	933
+PG-UNK-248	:	1	:	933
+PG-UNK-249	:	1	:	933
+PG-UNK-250	:	1	:	933
+PG-UNK-251	:	1	:	933
+PG-UNK-252	:	1	:	933
+PG-UNK-253	:	1	:	933
+PG-UNK-254	:	1	:	933
+PG-UNK-255	:	1	:	933
+PG-UNK-256	:	1	:	933
+PG-UNK-257	:	1	:	933
+PG-UNK-258	:	1	:	933
+PG-UNK-259	:	1	:	933
+PG-UNK-260	:	1	:	933
+PG-UNK-261	:	1	:	933
+PG-UNK-262	:	1	:	933
+PG-UNK-263	:	1	:	933
+PG-UNK-264	:	1	:	933
+PG-UNK-265	:	1	:	933
+PG-UNK-266	:	1	:	933
+PG-UNK-267	:	1	:	933
+PG-UNK-268	:	1	:	933
+PG-UNK-269	:	1	:	933
+PG-UNK-270	:	1	:	933
+PG-UNK-271	:	1	:	933
+PG-UNK-272	:	1	:	933
+PG-UNK-273	:	1	:	933
+PG-UNK-274	:	1	:	933
+PG-UNK-275	:	1	:	933
+PG-UNK-276	:	1	:	933
+PG-UNK-277	:	1	:	933
+PG-UNK-278	:	1	:	933
+PG-UNK-279	:	1	:	933
+PG-UNK-280	:	1	:	933
+PG-UNK-281	:	1	:	933
+PG-UNK-282	:	1	:	933
+PG-UNK-283	:	1	:	933
+PG-UNK-284	:	1	:	933
+PG-UNK-285	:	1	:	933
+PG-UNK-286	:	1	:	933
+PG-UNK-287	:	1	:	933
+PG-UNK-288	:	1	:	933
+PG-UNK-289	:	1	:	933
+PG-UNK-290	:	1	:	933
+PG-UNK-291	:	1	:	933
+PG-UNK-292	:	1	:	933
+PG-UNK-293	:	1	:	933
+PG-UNK-294	:	1	:	933
+PG-UNK-295	:	1	:	933
+PG-UNK-296	:	1	:	933
+PG-UNK-297	:	1	:	933
+PG-UNK-298	:	1	:	933
+PG-UNK-299	:	1	:	933
+PG-UNK-300	:	1	:	933
+PG-UNK-301	:	1	:	933
+PG-UNK-302	:	1	:	933
+PG-UNK-303	:	1	:	933
+PG-UNK-304	:	1	:	933
+PG-UNK-305	:	1	:	933
+PG-UNK-306	:	1	:	933
+PG-UNK-307	:	1	:	933
+PG-UNK-308	:	1	:	933
+PG-UNK-309	:	1	:	933
+PG-UNK-310	:	1	:	933
+PG-UNK-311	:	1	:	933
+PG-UNK-312	:	1	:	933
+PG-UNK-313	:	1	:	933
+PG-UNK-314	:	1	:	933
+PG-UNK-315	:	1	:	933
+PG-UNK-316	:	1	:	933
+PG-UNK-317	:	1	:	933
+PG-UNK-318	:	1	:	933
+PG-UNK-319	:	1	:	933
+PG-UNK-320	:	1	:	933
+PG-UNK-321	:	1	:	933
+PG-UNK-322	:	1	:	933
+PG-UNK-323	:	1	:	933
+PG-UNK-324	:	1	:	933
+PG-UNK-325	:	1	:	933
+PG-UNK-326	:	1	:	933
+PG-UNK-327	:	1	:	933
+PG-UNK-328	:	1	:	933
+PG-UNK-329	:	1	:	933
+PG-UNK-330	:	1	:	933
+PG-UNK-331	:	1	:	933
+PG-UNK-332	:	1	:	933
+PG-UNK-333	:	1	:	933
+PG-UNK-334	:	1	:	933
+PG-UNK-335	:	1	:	933
+PG-UNK-336	:	1	:	933
+PG-UNK-337	:	1	:	933
+PG-UNK-338	:	1	:	933
+PG-UNK-339	:	1	:	933
+PG-UNK-340	:	1	:	933
+PG-UNK-341	:	1	:	933
+PG-UNK-342	:	1	:	933
+PG-UNK-343	:	1	:	933
+PG-UNK-344	:	1	:	933
+PG-UNK-345	:	1	:	933
+PG-UNK-346	:	1	:	933
+PG-UNK-347	:	1	:	933
+PG-UNK-348	:	1	:	933
+PG-UNK-349	:	1	:	933
+PG-UNK-350	:	1	:	933
+PG-UNK-351	:	1	:	933
+PG-UNK-352	:	1	:	933
+PG-UNK-353	:	1	:	933
+PG-UNK-354	:	1	:	933
+PG-UNK-355	:	1	:	933
+PG-UNK-356	:	1	:	933
+PG-UNK-357	:	1	:	933
+PG-UNK-358	:	1	:	933
+PG-UNK-359	:	1	:	933
+PG-UNK-360	:	1	:	933
+PG-UNK-361	:	1	:	933
+PG-UNK-362	:	1	:	933
+PG-UNK-363	:	1	:	933
+PG-UNK-364	:	1	:	933
+PG-UNK-365	:	1	:	933
+PG-UNK-366	:	1	:	933
+PG-UNK-367	:	1	:	933
+PG-UNK-368	:	1	:	933
+PG-UNK-369	:	1	:	933
+PG-UNK-370	:	1	:	933
+PG-UNK-371	:	1	:	933
+PG-UNK-372	:	1	:	933
+PG-UNK-373	:	1	:	933
+PG-UNK-374	:	1	:	933
+PG-UNK-375	:	1	:	933
+PG-UNK-376	:	1	:	933
+PG-UNK-377	:	1	:	933
+PG-UNK-378	:	1	:	933
+PG-UNK-379	:	1	:	933
+PG-UNK-380	:	1	:	933
+PG-UNK-381	:	1	:	933
+PG-UNK-382	:	1	:	933
+PG-UNK-383	:	1	:	933
+PG-UNK-384	:	1	:	933
+PG-UNK-385	:	1	:	933
+PG-UNK-386	:	1	:	933
+PG-UNK-387	:	1	:	933
+PG-UNK-388	:	1	:	933
+PG-UNK-389	:	1	:	933
+PG-UNK-390	:	1	:	933
+PG-UNK-391	:	1	:	933
+PG-UNK-392	:	1	:	933
+PG-UNK-393	:	1	:	933
+PG-UNK-394	:	1	:	933
+PG-UNK-395	:	1	:	933
+PG-UNK-396	:	1	:	933
+PG-UNK-397	:	1	:	933
+PG-UNK-398	:	1	:	933
+PG-UNK-399	:	1	:	933
+PG-UNK-400	:	1	:	933
+PG-UNK-401	:	1	:	933
+PG-UNK-402	:	1	:	933
+PG-UNK-403	:	1	:	933
+PG-UNK-404	:	1	:	933
+PG-UNK-405	:	1	:	933
+PG-UNK-406	:	1	:	933
+PG-UNK-407	:	1	:	933
+PG-UNK-408	:	1	:	933
+PG-UNK-409	:	1	:	933
+PG-UNK-410	:	1	:	933
+PG-UNK-411	:	1	:	933
+PG-UNK-412	:	1	:	933
+PG-UNK-413	:	1	:	933
+PG-UNK-414	:	1	:	933
+PG-UNK-415	:	1	:	933
+PG-UNK-416	:	1	:	933
+PG-UNK-417	:	1	:	933
+PG-UNK-418	:	1	:	933
+PG-UNK-419	:	1	:	933
+PG-UNK-420	:	1	:	933
+PG-UNK-421	:	1	:	933
+PG-UNK-422	:	1	:	933
+PG-UNK-423	:	1	:	933
+PG-UNK-424	:	1	:	933
+PG-UNK-425	:	1	:	933
+PG-UNK-426	:	1	:	933
+PG-UNK-427	:	1	:	933
+PG-UNK-428	:	1	:	933
+PG-UNK-429	:	1	:	933
+PG-UNK-430	:	1	:	933
+PG-UNK-431	:	1	:	933
+PG-UNK-432	:	1	:	933
+PG-UNK-433	:	1	:	933
+PG-UNK-434	:	1	:	933
+PG-UNK-435	:	1	:	933
+PG-UNK-436	:	1	:	933
+PG-UNK-437	:	1	:	933
+PG-UNK-438	:	1	:	933
+PG-UNK-439	:	1	:	933
+PG-UNK-440	:	1	:	933
+PG-UNK-441	:	1	:	933
+PG-UNK-442	:	1	:	933
+PG-UNK-443	:	1	:	933
+PG-UNK-444	:	1	:	933
+PG-UNK-445	:	1	:	933
+PG-UNK-446	:	1	:	933
+PG-UNK-447	:	1	:	933
+PG-UNK-448	:	1	:	933
+PG-UNK-449	:	1	:	933
+PG-UNK-450	:	1	:	933
+PG-UNK-451	:	1	:	933
+PG-UNK-452	:	1	:	933
+PG-UNK-453	:	1	:	933
+PG-UNK-454	:	1	:	933
+PG-UNK-455	:	1	:	933
+PG-UNK-456	:	1	:	933
+PG-UNK-457	:	1	:	933
+PG-UNK-458	:	1	:	933
+PG-UNK-459	:	1	:	933
+PG-UNK-460	:	1	:	933
+PG-UNK-461	:	1	:	933
+PG-UNK-462	:	1	:	933
+PG-UNK-463	:	1	:	933
+PG-UNK-464	:	1	:	933
+PG-UNK-465	:	1	:	933
+PG-UNK-466	:	1	:	933
+PG-UNK-467	:	1	:	933
+PG-UNK-468	:	1	:	933
+PG-UNK-469	:	1	:	933
+PG-UNK-470	:	1	:	933
+PG-UNK-471	:	1	:	933
+PG-UNK-472	:	1	:	933
+PG-UNK-473	:	1	:	933
+PG-UNK-474	:	1	:	933
+PG-UNK-475	:	1	:	933
+PG-UNK-476	:	1	:	933
+PG-UNK-477	:	1	:	933
+PG-UNK-478	:	1	:	933
+PG-UNK-479	:	1	:	933
+PG-UNK-480	:	1	:	933
+PG-UNK-481	:	1	:	933
+PG-UNK-482	:	1	:	933
+PG-UNK-483	:	1	:	933
+PG-UNK-484	:	1	:	933
+PG-UNK-485	:	1	:	933
+PG-UNK-486	:	1	:	933
+PG-UNK-487	:	1	:	933
+PG-UNK-488	:	1	:	933
+PG-UNK-489	:	1	:	933
+PG-UNK-490	:	1	:	933
+PG-UNK-491	:	1	:	933
+PG-UNK-492	:	1	:	933
+PG-UNK-493	:	1	:	933
+PG-UNK-494	:	1	:	933
+PG-UNK-495	:	1	:	933
+PG-UNK-496	:	1	:	933
+PNG.L2.1		:		2		:		933
+PNG.L2.2		:		2		:		933
+PNG.L2.3		:		2		:		933
+PNG.L2.4		:		2		:		933
+PNG.L2.5		:		2		:		933
+PNG.L2.6		:		2		:		933
+PNG.L2.7		:		2		:		933
+PNG.L2.8		:		2		:		933
+PNG.L2.9		:		2		:		933
+PNG.L2.10		:		2		:		933
+PNG.L2.11		:		2		:		933
+PNG.L2.12		:		2		:		933
+PNG.L2.13		:		2		:		933
+PNG.L2.14		:		2		:		933
+PNG.L2.15		:		2		:		933
+PNG.L2.16		:		2		:		933
+PNG.L2.17		:		2		:		933
+PNG.L2.18		:		2		:		933
+PNG.L2.19		:		2		:		933
+PNG.L2.20		:		2		:		933
+PNG.L2.21		:		2		:		933
+PNG.L2.22		:		2		:		933
+PNG.L2.23		:		2		:		933
+PNG.L2.24		:		2		:		933
+PNG.L2.25		:		2		:		933
+PNG.L2.26		:		2		:		933
+PNG.L2.27		:		2		:		933
+PNG.L2.28		:		2		:		933
+PNG.L2.29		:		2		:		933
+PNG.L2.30		:		2		:		933
+PNG.L2.31		:		2		:		933
+PNG.L2.32		:		2		:		933
+PNG.L2.33		:		2		:		933
+PNG.L2.34		:		2		:		933
+PNG.L2.35		:		2		:		933
+PNG.L2.36		:		2		:		933
+PNG.L2.37		:		2		:		933
+PNG.L2.38		:		2		:		933
+PNG.L2.39		:		2		:		933
+PNG.L2.40		:		2		:		933
+PNG.L2.41		:		2		:		933
+PNG.L2.42		:		2		:		933
+PNG.L2.43		:		2		:		933
+PNG.L2.44		:		2		:		933
+PNG.L2.45		:		2		:		933
+PNG.L2.46		:		2		:		933
+PNG.L2.47		:		2		:		933
+PNG.L2.48		:		2		:		933
+PNG.L2.49		:		2		:		933
+PNG.L2.50		:		2		:		933
+PNG.L2.51		:		2		:		933
+PNG.L2.52		:		2		:		933
+PNG.L2.53		:		2		:		933
+PNG.L2.54		:		2		:		933
+PNG.L2.55		:		2		:		933
+PNG.L2.56		:		2		:		933
+PNG.L2.57		:		2		:		933
+PNG.L2.58		:		2		:		933
+PNG.L2.59		:		2		:		933
+PNG.L2.60		:		2		:		933
+PNG.L2.61		:		2		:		933
+PNG.L2.62		:		2		:		933
+PNG.L2.63		:		2		:		933
+PNG.L2.64		:		2		:		933
+PNG.L2.65		:		2		:		933
+PNG.L2.66		:		2		:		933
+PNG.L2.67		:		2		:		933
+PNG.L2.68		:		2		:		933
+PNG.L2.69		:		2		:		933
+PNG.L2.70		:		2		:		933
+PNG.L2.71		:		2		:		933
+PNG.L2.72		:		2		:		933
+PNG.L2.73		:		2		:		933
+PNG.L2.74		:		2		:		933
+PNG.L2.75		:		2		:		933
+PNG.L2.76		:		2		:		933
+PNG.L2.77		:		2		:		933
+PNG.L2.78		:		2		:		933
+PNG.L2.79		:		2		:		933
+PNG.L2.80		:		2		:		933
+PNG.L2.81		:		2		:		933
+PNG.L2.82		:		2		:		933
+PNG.L2.83		:		2		:		933
+PNG.L2.84		:		2		:		933
+PNG.L2.85		:		2		:		933
+PNG.L2.86		:		2		:		933
+PNG.L2.87		:		2		:		933
+PNG.L2.88		:		2		:		933
+PNG.L2.89		:		2		:		933
+PNG.L2.90		:		2		:		933
+PNG.L2.91		:		2		:		933
+PNG.L2.92		:		2		:		933
+PNG.L2.93		:		2		:		933
+PNG.L2.94		:		2		:		933
+PNG.L2.95		:		2		:		933
+PNG.L2.96		:		2		:		933
+PNG.L2.97		:		2		:		933
+PNG.L2.98		:		2		:		933
+PNG.L2.99		:		2		:		933
+PNG.L2.100		:		2		:		933
+PNG.L2.101		:		2		:		933
+PNG.L2.102		:		2		:		933
+PNG.L2.103		:		2		:		933
+PNG.L2.104		:		2		:		933
+PNG.L2.105		:		2		:		933
+PNG.L2.106		:		2		:		933
+PNG.L2.107		:		2		:		933
+PNG.L2.108		:		2		:		933
+PNG.L2.109		:		2		:		933
+PNG.L2.110		:		2		:		933
+PNG.L2.111		:		2		:		933
+PNG.L2.112		:		2		:		933
+PNG.L2.113		:		2		:		933
+PNG.L2.114		:		2		:		933
+PNG.L2.115		:		2		:		933
+PNG.L2.116		:		2		:		933
+PNG.L2.117		:		2		:		933
+PNG.L2.118		:		2		:		933
+PNG.L2.119		:		2		:		933
+PNG.L2.120		:		2		:		933
+PNG.L2.121		:		2		:		933
+PNG.L2.122		:		2		:		933
+PNG.L2.123		:		2		:		933
+PNG.L2.124		:		2		:		933
+PNG.L2.125		:		2		:		933
+PNG.L2.126		:		2		:		933
+PNG.L2.127		:		2		:		933
+PNG.L2.128		:		2		:		933
+PNG.L2.129		:		2		:		933
+PNG.L2.130		:		2		:		933
+PNG.L2.131		:		2		:		933
+PNG.L2.132		:		2		:		933
+PNG.L2.133		:		2		:		933
+PNG.L2.134		:		2		:		933
+PNG.L2.135		:		2		:		933
+PNG.L2.136		:		2		:		933
+PNG.L2.137		:		2		:		933
+PNG.L2.138		:		2		:		933
+PNG.L2.139		:		2		:		933
+PNG.L2.140		:		2		:		933
+PNG.L2.141		:		2		:		933
+PNG.L2.142		:		2		:		933
+PNG.L2.143		:		2		:		933
+PNG.L2.144		:		2		:		933
+PNG.L2.145		:		2		:		933
+PNG.L2.146		:		2		:		933
+PNG.L2.147		:		2		:		933
+PNG.L2.148		:		2		:		933
+PNG.L2.149		:		2		:		933
+PNG.L2.150		:		2		:		933
+PNG.L2.151		:		2		:		933
+PNG.L2.152		:		2		:		933
+PNG.L2.153		:		2		:		933
+PNG.L2.154		:		2		:		933
+PNG.L2.155		:		2		:		933
+PNG.L2.156		:		2		:		933
+PNG.L2.157		:		2		:		933
+PNG.L2.158		:		2		:		933
+PNG.L2.159		:		2		:		933
+PNG.L2.160		:		2		:		933
+PNG.L2.161		:		2		:		933
+PNG.L2.162		:		2		:		933
+PNG.L2.163		:		2		:		933
+PNG.L2.164		:		2		:		933
+PNG.L2.165		:		2		:		933
+PNG.L2.166		:		2		:		933
+PNG.L2.167		:		2		:		933
+PNG.L2.168		:		2		:		933
+PNG.L2.169		:		2		:		933
+PNG.L2.170		:		2		:		933
+PNG.L2.171		:		2		:		933
+PNG.L2.172		:		2		:		933
+PNG.L2.173		:		2		:		933
+PNG.L2.174		:		2		:		933
+PNG.L2.175		:		2		:		933
+PNG.L2.176		:		2		:		933
+PNG.L2.177		:		2		:		933
+PNG.L2.178		:		2		:		933
+PNG.L2.179		:		2		:		933
+PNG.L2.180		:		2		:		933
+PNG.L2.181		:		2		:		933
+PNG.L2.182		:		2		:		933
+PNG.L2.183		:		2		:		933
+PNG.L2.184		:		2		:		933
+PNG.L2.185		:		2		:		933
+PNG.L2.186		:		2		:		933
+PNG.L2.187		:		2		:		933
+PNG.L2.188		:		2		:		933
+PNG.L2.189		:		2		:		933
+PNG.L2.190		:		2		:		933
+PNG.L2.191		:		2		:		933
+PNG.L2.192		:		2		:		933
+PNG.L2.193		:		2		:		933
+PNG.L2.194		:		2		:		933
+PNG.L2.195		:		2		:		933
+PNG.L2.196		:		2		:		933
+PNG.L2.197		:		2		:		933
+PNG.L2.198		:		2		:		933
+PNG.L2.199		:		2		:		933
+PNG.L2.200		:		2		:		933
+PNG.L2.201		:		2		:		933
+PNG.L2.202		:		2		:		933
+PNG.L2.203		:		2		:		933
+PNG.L2.204		:		2		:		933
+PNG.L2.205		:		2		:		933
+PNG.L2.206		:		2		:		933
+PNG.L2.207		:		2		:		933
+PNG.L2.208		:		2		:		933
+PNG.L2.209		:		2		:		933
+PNG.L2.210		:		2		:		933
+PNG.L2.211		:		2		:		933
+PNG.L2.212		:		2		:		933
+PNG.L2.213		:		2		:		933
+PNG.L2.214		:		2		:		933
+PNG.L2.215		:		2		:		933
+PNG.L2.216		:		2		:		933
+PNG.L2.217		:		2		:		933
+PNG.L2.218		:		2		:		933
+PNG.L2.219		:		2		:		933
+PNG.L2.220		:		2		:		933
+PNG.L2.221		:		2		:		933
+PNG.L2.222		:		2		:		933
+PNG.L2.223		:		2		:		933
+PNG.L2.224		:		2		:		933
+PNG.L2.225		:		2		:		933
+PNG.L2.226		:		2		:		933
+PNG.L2.227		:		2		:		933
+PNG.L2.228		:		2		:		933
+PNG.L2.229		:		2		:		933
+PNG.L2.230		:		2		:		933
+PNG.L2.231		:		2		:		933
+PNG.L2.232		:		2		:		933
+PNG.L2.233		:		2		:		933
+PNG.L2.234		:		2		:		933
+PNG.L2.235		:		2		:		933
+PNG.L2.236		:		2		:		933
+PNG.L2.237		:		2		:		933
+PNG.L2.238		:		2		:		933
+PNG.L2.239		:		2		:		933
+PNG.L2.240		:		2		:		933
+PNG.L2.241		:		2		:		933
+PNG.L2.242		:		2		:		933
+PNG.L2.243		:		2		:		933
+PNG.L2.244		:		2		:		933
+PNG.L2.245		:		2		:		933
+PNG.L2.246		:		2		:		933
+PNG.L2.247		:		2		:		933
+PNG.L2.248		:		2		:		933
+PNG.L2.249		:		2		:		933
+PNG.L2.250		:		2		:		933
+PNG.L2.251		:		2		:		933
+PNG.L2.252		:		2		:		933
+PNG.L2.253		:		2		:		933
+PNG.L2.254		:		2		:		933
+PNG.L2.255		:		2		:		933
+PNG.L2.256		:		2		:		933
+PNG.L2.257		:		2		:		933
+PNG.L2.258		:		2		:		933
+PNG.L2.259		:		2		:		933
+PNG.L2.260		:		2		:		933
+PNG.L2.261		:		2		:		933
+PNG.L2.262		:		2		:		933
+PNG.L2.263		:		2		:		933
+PNG.L2.264		:		2		:		933
+PNG.L2.265		:		2		:		933
+PNG.L2.266		:		2		:		933
+PNG.L2.267		:		2		:		933
+PNG.L2.268		:		2		:		933
+PNG.L2.269		:		2		:		933
+PNG.L2.270		:		2		:		933
+PNG.L2.271		:		2		:		933
+PNG.L2.272		:		2		:		933
+PNG.L2.273		:		2		:		933
+PNG.L2.274		:		2		:		933
+PNG.L2.275		:		2		:		933
+PNG.L2.276		:		2		:		933
+PNG.L2.277		:		2		:		933
+PNG.L2.278		:		2		:		933
+PNG.L2.279		:		2		:		933
+PNG.L2.280		:		2		:		933
+PNG.L2.281		:		2		:		933
+PNG.L2.282		:		2		:		933
+PNG.L2.283		:		2		:		933
+PNG.L2.284		:		2		:		933
+PNG.L2.285		:		2		:		933
+PNG.L2.286		:		2		:		933
+PNG.L2.287		:		2		:		933
+PNG.L2.288		:		2		:		933
+PNG.L2.289		:		2		:		933
+PNG.L2.290		:		2		:		933
+PNG.L2.291		:		2		:		933
+PNG.L2.292		:		2		:		933
+PNG.L2.293		:		2		:		933
+PNG.L2.294		:		2		:		933
+PNG.L2.295		:		2		:		933
+PNG.L2.296		:		2		:		933
+PNG.L2.297		:		2		:		933
+PNG.L2.298		:		2		:		933
+PNG.L2.299		:		2		:		933
+PNG.L2.300		:		2		:		933
+PNG.L2.301		:		2		:		933
+PNG.L2.302		:		2		:		933
+PNG.L2.303		:		2		:		933
+PNG.L2.304		:		2		:		933
+PNG.L2.305		:		2		:		933
+PNG.L2.306		:		2		:		933
+PNG.L2.307		:		2		:		933
+PNG.L2.308		:		2		:		933
+PNG.L2.309		:		2		:		933
+PNG.L2.310		:		2		:		933
+PNG.L2.311		:		2		:		933
+PNG.L2.312		:		2		:		933
+PNG.L2.313		:		2		:		933
+PNG.L2.314		:		2		:		933
+PNG.L2.315		:		2		:		933
+PNG.L2.316		:		2		:		933
+PNG.L2.317		:		2		:		933
+PNG.L2.318		:		2		:		933
+PNG.L2.319		:		2		:		933
+PNG.L2.320		:		2		:		933
+PNG.L2.321		:		2		:		933
+PNG.L2.322		:		2		:		933
+PNG.L2.323		:		2		:		933
+PNG.L2.324		:		2		:		933
+PNG.L2.325		:		2		:		933
+PNG.L2.326		:		2		:		933
+PNG.L2.327		:		2		:		933
+PNG.L2.328		:		2		:		933
+PNG.L2.329		:		2		:		933
+PNG.L2.330		:		2		:		933
+PNG.L2.331		:		2		:		933
+PNG.L2.332		:		2		:		933
+PNG.L2.333		:		2		:		933
+PNG.L2.334		:		2		:		933
+PNG.L2.335		:		2		:		933
+PNG.L2.336		:		2		:		933
+PNG.L2.337		:		2		:		933
+PNG.L2.338		:		2		:		933
+PNG.L2.339		:		2		:		933
+PNG.L2.340		:		2		:		933
+PNG.L2.341		:		2		:		933
+PNG.L2.342		:		2		:		933
+PNG.L2.343		:		2		:		933
+PNG.L2.344		:		2		:		933
+PNG.L2.345		:		2		:		933
+PNG.L2.346		:		2		:		933
+PNG.L2.347		:		2		:		933
+PNG.L2.348		:		2		:		933
+PNG.L2.349		:		2		:		933
+PNG.L2.350		:		2		:		933
+PNG.L2.351		:		2		:		933
+PNG.L2.352		:		2		:		933
+PNG.L2.353		:		2		:		933
+PNG.L2.354		:		2		:		933
+PNG.L2.355		:		2		:		933
+PNG.L2.356		:		2		:		933
+PNG.L2.357		:		2		:		933
+PNG.L2.358		:		2		:		933
+PNG.L2.359		:		2		:		933
+PNG.L2.360		:		2		:		933
+PNG.L2.361		:		2		:		933
+PNG.L2.362		:		2		:		933
+PNG.L2.363		:		2		:		933
+PNG.L2.364		:		2		:		933
+PNG.L2.365		:		2		:		933
+PNG.L2.366		:		2		:		933
+PNG.L2.367		:		2		:		933
+PNG.L2.368		:		2		:		933
+PNG.L2.369		:		2		:		933
+PNG.L2.370		:		2		:		933
+PNG.L2.371		:		2		:		933
+PNG.L2.372		:		2		:		933
+PNG.L2.373		:		2		:		933
+PNG.L2.374		:		2		:		933
+PNG.L2.375		:		2		:		933
+PNG.L2.376		:		2		:		933
+PNG.L2.377		:		2		:		933
+PNG.L2.378		:		2		:		933
+PNG.L2.379		:		2		:		933
+PNG.L2.380		:		2		:		933
+PNG.L2.381		:		2		:		933
+PNG.L2.382		:		2		:		933
+PNG.L2.383		:		2		:		933
+PNG.L2.384		:		2		:		933
+PNG.L2.385		:		2		:		933
+PNG.L2.386		:		2		:		933
+PNG.L2.387		:		2		:		933
+PNG.L2.388		:		2		:		933
+PNG.L2.389		:		2		:		933
+PNG.L2.390		:		2		:		933
+PNG.L2.391		:		2		:		933
+PNG.L2.392		:		2		:		933
+PNG.L2.393		:		2		:		933
+PNG.L2.394		:		2		:		933
+PNG.L2.395		:		2		:		933
+PNG.L2.396		:		2		:		933
+PNG.L2.397		:		2		:		933
+PNG.L2.398		:		2		:		933
+PNG.L2.399		:		2		:		933
+PNG.L2.400		:		2		:		933
+PNG.L2.401		:		2		:		933
+PNG.L2.402		:		2		:		933
+PNG.L2.403		:		2		:		933
+PNG.L2.404		:		2		:		933
+PNG.L2.405		:		2		:		933
+PNG.L2.406		:		2		:		933
+PNG.L2.407		:		2		:		933
+PNG.L2.408		:		2		:		933
+PNG.L2.409		:		2		:		933
+PNG.L2.410		:		2		:		933
+PNG.L2.411		:		2		:		933
+PNG.L2.412		:		2		:		933
+PNG.L2.413		:		2		:		933
+PNG.L2.414		:		2		:		933
+PNG.L2.415		:		2		:		933
+PNG.L2.416		:		2		:		933
+PNG.L2.417		:		2		:		933
+PNG.L2.418		:		2		:		933
+PNG.L2.419		:		2		:		933
+PNG.L2.420		:		2		:		933
+PNG.L2.421		:		2		:		933
+PNG.L2.422		:		2		:		933
+PNG.L2.423		:		2		:		933
+PNG.L2.424		:		2		:		933
+PNG.L2.425		:		2		:		933
+PNG.L2.426		:		2		:		933
+PNG.L2.427		:		2		:		933
+PNG.L2.428		:		2		:		933
+PNG.L2.429		:		2		:		933
+PNG.L2.430		:		2		:		933
+PNG.L2.431		:		2		:		933
+PNG.L2.432		:		2		:		933
+PNG.L2.433		:		2		:		933
+PNG.L2.434		:		2		:		933
+PNG.L2.435		:		2		:		933
+PNG.L2.436		:		2		:		933
+PNG.L2.437		:		2		:		933
+PNG.L2.438		:		2		:		933
+PNG.L2.439		:		2		:		933
+PNG.L2.440		:		2		:		933
+PNG.L2.441		:		2		:		933
+PNG.L2.442		:		2		:		933
+PNG.L2.443		:		2		:		933
+PNG.L2.444		:		2		:		933
+PNG.L2.445		:		2		:		933
+PNG.L2.446		:		2		:		933
+PNG.L2.447		:		2		:		933
+PNG.L2.448		:		2		:		933
+PNG.L2.449		:		2		:		933
+PNG.L2.450		:		2		:		933
+PNG.L2.451		:		2		:		933
+PNG.L2.452		:		2		:		933
+PNG.L2.453		:		2		:		933
+PNG.L2.454		:		2		:		933
+PNG.L2.455		:		2		:		933
+PNG.L2.456		:		2		:		933
+PNG.L2.457		:		2		:		933
+PNG.L2.458		:		2		:		933
+PNG.L2.459		:		2		:		933
+PNG.L2.460		:		2		:		933
+PNG.L2.461		:		2		:		933
+PNG.L2.462		:		2		:		933
+PNG.L2.463		:		2		:		933
+PNG.L2.464		:		2		:		933
+PNG.L2.465		:		2		:		933
+PNG.L2.466		:		2		:		933
+PNG.L2.467		:		2		:		933
+PNG.L2.468		:		2		:		933
+PNG.L2.469		:		2		:		933
+PNG.L2.470		:		2		:		933
+PNG.L2.471		:		2		:		933
+PNG.L2.472		:		2		:		933
+PNG.L2.473		:		2		:		933
+PNG.L2.474		:		2		:		933
+PNG.L2.475		:		2		:		933
+PNG.L2.476		:		2		:		933
+PNG.L2.477		:		2		:		933
+PNG.L2.478		:		2		:		933
+PNG.L2.479		:		2		:		933
+PNG.L2.480		:		2		:		933
+PNG.L2.481		:		2		:		933
+PNG.L2.482		:		2		:		933
+PNG.L2.483		:		2		:		933
+PNG.L2.484		:		2		:		933
+PNG.L2.485		:		2		:		933
+PNG.L2.486		:		2		:		933
+PNG.L2.487		:		2		:		933
+PNG.L2.488		:		2		:		933
+PNG.L2.489		:		2		:		933
+PNG.L2.490		:		2		:		933
+PNG.L2.491		:		2		:		933
+PNG.L2.492		:		2		:		933
+PNG.L2.493		:		2		:		933
+PNG.L2.494		:		2		:		933
+PNG.L2.495		:		2		:		933
+PNG.L2.496		:		2		:		933
+Central  	:	1	:	29500
+Simbu 	:	1	:	6100
+East New Britain 	:	1	:	15500
+East Sepik 	:	1	:	42800
+Eastern Highlands 	:	1	:	11200
+Enga 	:	1	:	12800
+Gulf 	:	1	:	34500
+Madang 	:	1	:	29000
+Manus 	:	1	:	2100
+Milne Bay 	:	1	:	14000
+Morobe 	:	1	:	34500
+National Capital District 	:	1	:	240
+New Ireland 	:	1	:	9600
+North Solomons 	:	1	:	9300
+Oro (Northern) 	:	1	:	22800
+Southern Highlands 	:	1	:	23800
+West New Britain 	:	1	:	21000
+West Sepik 	:	1	:	36300
+Western 	:	1	:	99300
+Western Highlands 	:	1	:	8500
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_POPULATION.txt
new file mode 100644
index 0000000..7a98970
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PAPUANEWGUINEA_POPULATION.txt
@@ -0,0 +1,1013 @@
+Papua New Guinea	:	0	:	5670544
+PG-UNK-1	:	1	:	11869
+PG-UNK-2	:	1	:	11869
+PG-UNK-3	:	1	:	11869
+PG-UNK-4	:	1	:	11869
+PG-UNK-5	:	1	:	11869
+PG-UNK-6	:	1	:	11869
+PG-UNK-7	:	1	:	11869
+PG-UNK-8	:	1	:	11869
+PG-UNK-9	:	1	:	11869
+PG-UNK-10	:	1	:	11869
+PG-UNK-11	:	1	:	11869
+PG-UNK-12	:	1	:	11869
+PG-UNK-13	:	1	:	11869
+PG-UNK-14	:	1	:	11869
+PG-UNK-15	:	1	:	11869
+PG-UNK-16	:	1	:	11869
+PG-UNK-17	:	1	:	11869
+PG-UNK-18	:	1	:	11869
+PG-UNK-19	:	1	:	11869
+PG-UNK-20	:	1	:	11869
+PG-UNK-21	:	1	:	11869
+PG-UNK-22	:	1	:	11869
+PG-UNK-23	:	1	:	11869
+PG-UNK-24	:	1	:	11869
+PG-UNK-25	:	1	:	11869
+PG-UNK-26	:	1	:	11869
+PG-UNK-27	:	1	:	11869
+PG-UNK-28	:	1	:	11869
+PG-UNK-29	:	1	:	11869
+PG-UNK-30	:	1	:	11869
+PG-UNK-31	:	1	:	11869
+PG-UNK-32	:	1	:	11869
+PG-UNK-33	:	1	:	11869
+PG-UNK-34	:	1	:	11869
+PG-UNK-35	:	1	:	11869
+PG-UNK-36	:	1	:	11869
+PG-UNK-37	:	1	:	11869
+PG-UNK-38	:	1	:	11869
+PG-UNK-39	:	1	:	11869
+PG-UNK-40	:	1	:	11869
+PG-UNK-41	:	1	:	11869
+PG-UNK-42	:	1	:	11869
+PG-UNK-43	:	1	:	11869
+PG-UNK-44	:	1	:	11869
+PG-UNK-45	:	1	:	11869
+PG-UNK-46	:	1	:	11869
+PG-UNK-47	:	1	:	11869
+PG-UNK-48	:	1	:	11869
+PG-UNK-49	:	1	:	11869
+PG-UNK-50	:	1	:	11869
+PG-UNK-51	:	1	:	11869
+PG-UNK-52	:	1	:	11869
+PG-UNK-53	:	1	:	11869
+PG-UNK-54	:	1	:	11869
+PG-UNK-55	:	1	:	11869
+PG-UNK-56	:	1	:	11869
+PG-UNK-57	:	1	:	11869
+PG-UNK-58	:	1	:	11869
+PG-UNK-59	:	1	:	11869
+PG-UNK-60	:	1	:	11869
+PG-UNK-61	:	1	:	11869
+PG-UNK-62	:	1	:	11869
+PG-UNK-63	:	1	:	11869
+PG-UNK-64	:	1	:	11869
+PG-UNK-65	:	1	:	11869
+PG-UNK-66	:	1	:	11869
+PG-UNK-67	:	1	:	11869
+PG-UNK-68	:	1	:	11869
+PG-UNK-69	:	1	:	11869
+PG-UNK-70	:	1	:	11869
+PG-UNK-71	:	1	:	11869
+PG-UNK-72	:	1	:	11869
+PG-UNK-73	:	1	:	11869
+PG-UNK-74	:	1	:	11869
+PG-UNK-75	:	1	:	11869
+PG-UNK-76	:	1	:	11869
+PG-UNK-77	:	1	:	11869
+PG-UNK-78	:	1	:	11869
+PG-UNK-79	:	1	:	11869
+PG-UNK-80	:	1	:	11869
+PG-UNK-81	:	1	:	11869
+PG-UNK-82	:	1	:	11869
+PG-UNK-83	:	1	:	11869
+PG-UNK-84	:	1	:	11869
+PG-UNK-85	:	1	:	11869
+PG-UNK-86	:	1	:	11869
+PG-UNK-87	:	1	:	11869
+PG-UNK-88	:	1	:	11869
+PG-UNK-89	:	1	:	11869
+PG-UNK-90	:	1	:	11869
+PG-UNK-91	:	1	:	11869
+PG-UNK-92	:	1	:	11869
+PG-UNK-93	:	1	:	11869
+PG-UNK-94	:	1	:	11869
+PG-UNK-95	:	1	:	11869
+PG-UNK-96	:	1	:	11869
+PG-UNK-97	:	1	:	11869
+PG-UNK-98	:	1	:	11869
+PG-UNK-99	:	1	:	11869
+PG-UNK-100	:	1	:	11869
+PG-UNK-101	:	1	:	11869
+PG-UNK-102	:	1	:	11869
+PG-UNK-103	:	1	:	11869
+PG-UNK-104	:	1	:	11869
+PG-UNK-105	:	1	:	11869
+PG-UNK-106	:	1	:	11869
+PG-UNK-107	:	1	:	11869
+PG-UNK-108	:	1	:	11869
+PG-UNK-109	:	1	:	11869
+PG-UNK-110	:	1	:	11869
+PG-UNK-111	:	1	:	11869
+PG-UNK-112	:	1	:	11869
+PG-UNK-113	:	1	:	11869
+PG-UNK-114	:	1	:	11869
+PG-UNK-115	:	1	:	11869
+PG-UNK-116	:	1	:	11869
+PG-UNK-117	:	1	:	11869
+PG-UNK-118	:	1	:	11869
+PG-UNK-119	:	1	:	11869
+PG-UNK-120	:	1	:	11869
+PG-UNK-121	:	1	:	11869
+PG-UNK-122	:	1	:	11869
+PG-UNK-123	:	1	:	11869
+PG-UNK-124	:	1	:	11869
+PG-UNK-125	:	1	:	11869
+PG-UNK-126	:	1	:	11869
+PG-UNK-127	:	1	:	11869
+PG-UNK-128	:	1	:	11869
+PG-UNK-129	:	1	:	11869
+PG-UNK-130	:	1	:	11869
+PG-UNK-131	:	1	:	11869
+PG-UNK-132	:	1	:	11869
+PG-UNK-133	:	1	:	11869
+PG-UNK-134	:	1	:	11869
+PG-UNK-135	:	1	:	11869
+PG-UNK-136	:	1	:	11869
+PG-UNK-137	:	1	:	11869
+PG-UNK-138	:	1	:	11869
+PG-UNK-139	:	1	:	11869
+PG-UNK-140	:	1	:	11869
+PG-UNK-141	:	1	:	11869
+PG-UNK-142	:	1	:	11869
+PG-UNK-143	:	1	:	11869
+PG-UNK-144	:	1	:	11869
+PG-UNK-145	:	1	:	11869
+PG-UNK-146	:	1	:	11869
+PG-UNK-147	:	1	:	11869
+PG-UNK-148	:	1	:	11869
+PG-UNK-149	:	1	:	11869
+PG-UNK-150	:	1	:	11869
+PG-UNK-151	:	1	:	11869
+PG-UNK-152	:	1	:	11869
+PG-UNK-153	:	1	:	11869
+PG-UNK-154	:	1	:	11869
+PG-UNK-155	:	1	:	11869
+PG-UNK-156	:	1	:	11869
+PG-UNK-157	:	1	:	11869
+PG-UNK-158	:	1	:	11869
+PG-UNK-159	:	1	:	11869
+PG-UNK-160	:	1	:	11869
+PG-UNK-161	:	1	:	11869
+PG-UNK-162	:	1	:	11869
+PG-UNK-163	:	1	:	11869
+PG-UNK-164	:	1	:	11869
+PG-UNK-165	:	1	:	11869
+PG-UNK-166	:	1	:	11869
+PG-UNK-167	:	1	:	11869
+PG-UNK-168	:	1	:	11869
+PG-UNK-169	:	1	:	11869
+PG-UNK-170	:	1	:	11869
+PG-UNK-171	:	1	:	11869
+PG-UNK-172	:	1	:	11869
+PG-UNK-173	:	1	:	11869
+PG-UNK-174	:	1	:	11869
+PG-UNK-175	:	1	:	11869
+PG-UNK-176	:	1	:	11869
+PG-UNK-177	:	1	:	11869
+PG-UNK-178	:	1	:	11869
+PG-UNK-179	:	1	:	11869
+PG-UNK-180	:	1	:	11869
+PG-UNK-181	:	1	:	11869
+PG-UNK-182	:	1	:	11869
+PG-UNK-183	:	1	:	11869
+PG-UNK-184	:	1	:	11869
+PG-UNK-185	:	1	:	11869
+PG-UNK-186	:	1	:	11869
+PG-UNK-187	:	1	:	11869
+PG-UNK-188	:	1	:	11869
+PG-UNK-189	:	1	:	11869
+PG-UNK-190	:	1	:	11869
+PG-UNK-191	:	1	:	11869
+PG-UNK-192	:	1	:	11869
+PG-UNK-193	:	1	:	11869
+PG-UNK-194	:	1	:	11869
+PG-UNK-195	:	1	:	11869
+PG-UNK-196	:	1	:	11869
+PG-UNK-197	:	1	:	11869
+PG-UNK-198	:	1	:	11869
+PG-UNK-199	:	1	:	11869
+PG-UNK-200	:	1	:	11869
+PG-UNK-201	:	1	:	11869
+PG-UNK-202	:	1	:	11869
+PG-UNK-203	:	1	:	11869
+PG-UNK-204	:	1	:	11869
+PG-UNK-205	:	1	:	11869
+PG-UNK-206	:	1	:	11869
+PG-UNK-207	:	1	:	11869
+PG-UNK-208	:	1	:	11869
+PG-UNK-209	:	1	:	11869
+PG-UNK-210	:	1	:	11869
+PG-UNK-211	:	1	:	11869
+PG-UNK-212	:	1	:	11869
+PG-UNK-213	:	1	:	11869
+PG-UNK-214	:	1	:	11869
+PG-UNK-215	:	1	:	11869
+PG-UNK-216	:	1	:	11869
+PG-UNK-217	:	1	:	11869
+PG-UNK-218	:	1	:	11869
+PG-UNK-219	:	1	:	11869
+PG-UNK-220	:	1	:	11869
+PG-UNK-221	:	1	:	11869
+PG-UNK-222	:	1	:	11869
+PG-UNK-223	:	1	:	11869
+PG-UNK-224	:	1	:	11869
+PG-UNK-225	:	1	:	11869
+PG-UNK-226	:	1	:	11869
+PG-UNK-227	:	1	:	11869
+PG-UNK-228	:	1	:	11869
+PG-UNK-229	:	1	:	11869
+PG-UNK-230	:	1	:	11869
+PG-UNK-231	:	1	:	11869
+PG-UNK-232	:	1	:	11869
+PG-UNK-233	:	1	:	11869
+PG-UNK-234	:	1	:	11869
+PG-UNK-235	:	1	:	11869
+PG-UNK-236	:	1	:	11869
+PG-UNK-237	:	1	:	11869
+PG-UNK-238	:	1	:	11869
+PG-UNK-239	:	1	:	11869
+PG-UNK-240	:	1	:	11869
+PG-UNK-241	:	1	:	11869
+PG-UNK-242	:	1	:	11869
+PG-UNK-243	:	1	:	11869
+PG-UNK-244	:	1	:	11869
+PG-UNK-245	:	1	:	11869
+PG-UNK-246	:	1	:	11869
+PG-UNK-247	:	1	:	11869
+PG-UNK-248	:	1	:	11869
+PG-UNK-249	:	1	:	11869
+PG-UNK-250	:	1	:	11869
+PG-UNK-251	:	1	:	11869
+PG-UNK-252	:	1	:	11869
+PG-UNK-253	:	1	:	11869
+PG-UNK-254	:	1	:	11869
+PG-UNK-255	:	1	:	11869
+PG-UNK-256	:	1	:	11869
+PG-UNK-257	:	1	:	11869
+PG-UNK-258	:	1	:	11869
+PG-UNK-259	:	1	:	11869
+PG-UNK-260	:	1	:	11869
+PG-UNK-261	:	1	:	11869
+PG-UNK-262	:	1	:	11869
+PG-UNK-263	:	1	:	11869
+PG-UNK-264	:	1	:	11869
+PG-UNK-265	:	1	:	11869
+PG-UNK-266	:	1	:	11869
+PG-UNK-267	:	1	:	11869
+PG-UNK-268	:	1	:	11869
+PG-UNK-269	:	1	:	11869
+PG-UNK-270	:	1	:	11869
+PG-UNK-271	:	1	:	11869
+PG-UNK-272	:	1	:	11869
+PG-UNK-273	:	1	:	11869
+PG-UNK-274	:	1	:	11869
+PG-UNK-275	:	1	:	11869
+PG-UNK-276	:	1	:	11869
+PG-UNK-277	:	1	:	11869
+PG-UNK-278	:	1	:	11869
+PG-UNK-279	:	1	:	11869
+PG-UNK-280	:	1	:	11869
+PG-UNK-281	:	1	:	11869
+PG-UNK-282	:	1	:	11869
+PG-UNK-283	:	1	:	11869
+PG-UNK-284	:	1	:	11869
+PG-UNK-285	:	1	:	11869
+PG-UNK-286	:	1	:	11869
+PG-UNK-287	:	1	:	11869
+PG-UNK-288	:	1	:	11869
+PG-UNK-289	:	1	:	11869
+PG-UNK-290	:	1	:	11869
+PG-UNK-291	:	1	:	11869
+PG-UNK-292	:	1	:	11869
+PG-UNK-293	:	1	:	11869
+PG-UNK-294	:	1	:	11869
+PG-UNK-295	:	1	:	11869
+PG-UNK-296	:	1	:	11869
+PG-UNK-297	:	1	:	11869
+PG-UNK-298	:	1	:	11869
+PG-UNK-299	:	1	:	11869
+PG-UNK-300	:	1	:	11869
+PG-UNK-301	:	1	:	11869
+PG-UNK-302	:	1	:	11869
+PG-UNK-303	:	1	:	11869
+PG-UNK-304	:	1	:	11869
+PG-UNK-305	:	1	:	11869
+PG-UNK-306	:	1	:	11869
+PG-UNK-307	:	1	:	11869
+PG-UNK-308	:	1	:	11869
+PG-UNK-309	:	1	:	11869
+PG-UNK-310	:	1	:	11869
+PG-UNK-311	:	1	:	11869
+PG-UNK-312	:	1	:	11869
+PG-UNK-313	:	1	:	11869
+PG-UNK-314	:	1	:	11869
+PG-UNK-315	:	1	:	11869
+PG-UNK-316	:	1	:	11869
+PG-UNK-317	:	1	:	11869
+PG-UNK-318	:	1	:	11869
+PG-UNK-319	:	1	:	11869
+PG-UNK-320	:	1	:	11869
+PG-UNK-321	:	1	:	11869
+PG-UNK-322	:	1	:	11869
+PG-UNK-323	:	1	:	11869
+PG-UNK-324	:	1	:	11869
+PG-UNK-325	:	1	:	11869
+PG-UNK-326	:	1	:	11869
+PG-UNK-327	:	1	:	11869
+PG-UNK-328	:	1	:	11869
+PG-UNK-329	:	1	:	11869
+PG-UNK-330	:	1	:	11869
+PG-UNK-331	:	1	:	11869
+PG-UNK-332	:	1	:	11869
+PG-UNK-333	:	1	:	11869
+PG-UNK-334	:	1	:	11869
+PG-UNK-335	:	1	:	11869
+PG-UNK-336	:	1	:	11869
+PG-UNK-337	:	1	:	11869
+PG-UNK-338	:	1	:	11869
+PG-UNK-339	:	1	:	11869
+PG-UNK-340	:	1	:	11869
+PG-UNK-341	:	1	:	11869
+PG-UNK-342	:	1	:	11869
+PG-UNK-343	:	1	:	11869
+PG-UNK-344	:	1	:	11869
+PG-UNK-345	:	1	:	11869
+PG-UNK-346	:	1	:	11869
+PG-UNK-347	:	1	:	11869
+PG-UNK-348	:	1	:	11869
+PG-UNK-349	:	1	:	11869
+PG-UNK-350	:	1	:	11869
+PG-UNK-351	:	1	:	11869
+PG-UNK-352	:	1	:	11869
+PG-UNK-353	:	1	:	11869
+PG-UNK-354	:	1	:	11869
+PG-UNK-355	:	1	:	11869
+PG-UNK-356	:	1	:	11869
+PG-UNK-357	:	1	:	11869
+PG-UNK-358	:	1	:	11869
+PG-UNK-359	:	1	:	11869
+PG-UNK-360	:	1	:	11869
+PG-UNK-361	:	1	:	11869
+PG-UNK-362	:	1	:	11869
+PG-UNK-363	:	1	:	11869
+PG-UNK-364	:	1	:	11869
+PG-UNK-365	:	1	:	11869
+PG-UNK-366	:	1	:	11869
+PG-UNK-367	:	1	:	11869
+PG-UNK-368	:	1	:	11869
+PG-UNK-369	:	1	:	11869
+PG-UNK-370	:	1	:	11869
+PG-UNK-371	:	1	:	11869
+PG-UNK-372	:	1	:	11869
+PG-UNK-373	:	1	:	11869
+PG-UNK-374	:	1	:	11869
+PG-UNK-375	:	1	:	11869
+PG-UNK-376	:	1	:	11869
+PG-UNK-377	:	1	:	11869
+PG-UNK-378	:	1	:	11869
+PG-UNK-379	:	1	:	11869
+PG-UNK-380	:	1	:	11869
+PG-UNK-381	:	1	:	11869
+PG-UNK-382	:	1	:	11869
+PG-UNK-383	:	1	:	11869
+PG-UNK-384	:	1	:	11869
+PG-UNK-385	:	1	:	11869
+PG-UNK-386	:	1	:	11869
+PG-UNK-387	:	1	:	11869
+PG-UNK-388	:	1	:	11869
+PG-UNK-389	:	1	:	11869
+PG-UNK-390	:	1	:	11869
+PG-UNK-391	:	1	:	11869
+PG-UNK-392	:	1	:	11869
+PG-UNK-393	:	1	:	11869
+PG-UNK-394	:	1	:	11869
+PG-UNK-395	:	1	:	11869
+PG-UNK-396	:	1	:	11869
+PG-UNK-397	:	1	:	11869
+PG-UNK-398	:	1	:	11869
+PG-UNK-399	:	1	:	11869
+PG-UNK-400	:	1	:	11869
+PG-UNK-401	:	1	:	11869
+PG-UNK-402	:	1	:	11869
+PG-UNK-403	:	1	:	11869
+PG-UNK-404	:	1	:	11869
+PG-UNK-405	:	1	:	11869
+PG-UNK-406	:	1	:	11869
+PG-UNK-407	:	1	:	11869
+PG-UNK-408	:	1	:	11869
+PG-UNK-409	:	1	:	11869
+PG-UNK-410	:	1	:	11869
+PG-UNK-411	:	1	:	11869
+PG-UNK-412	:	1	:	11869
+PG-UNK-413	:	1	:	11869
+PG-UNK-414	:	1	:	11869
+PG-UNK-415	:	1	:	11869
+PG-UNK-416	:	1	:	11869
+PG-UNK-417	:	1	:	11869
+PG-UNK-418	:	1	:	11869
+PG-UNK-419	:	1	:	11869
+PG-UNK-420	:	1	:	11869
+PG-UNK-421	:	1	:	11869
+PG-UNK-422	:	1	:	11869
+PG-UNK-423	:	1	:	11869
+PG-UNK-424	:	1	:	11869
+PG-UNK-425	:	1	:	11869
+PG-UNK-426	:	1	:	11869
+PG-UNK-427	:	1	:	11869
+PG-UNK-428	:	1	:	11869
+PG-UNK-429	:	1	:	11869
+PG-UNK-430	:	1	:	11869
+PG-UNK-431	:	1	:	11869
+PG-UNK-432	:	1	:	11869
+PG-UNK-433	:	1	:	11869
+PG-UNK-434	:	1	:	11869
+PG-UNK-435	:	1	:	11869
+PG-UNK-436	:	1	:	11869
+PG-UNK-437	:	1	:	11869
+PG-UNK-438	:	1	:	11869
+PG-UNK-439	:	1	:	11869
+PG-UNK-440	:	1	:	11869
+PG-UNK-441	:	1	:	11869
+PG-UNK-442	:	1	:	11869
+PG-UNK-443	:	1	:	11869
+PG-UNK-444	:	1	:	11869
+PG-UNK-445	:	1	:	11869
+PG-UNK-446	:	1	:	11869
+PG-UNK-447	:	1	:	11869
+PG-UNK-448	:	1	:	11869
+PG-UNK-449	:	1	:	11869
+PG-UNK-450	:	1	:	11869
+PG-UNK-451	:	1	:	11869
+PG-UNK-452	:	1	:	11869
+PG-UNK-453	:	1	:	11869
+PG-UNK-454	:	1	:	11869
+PG-UNK-455	:	1	:	11869
+PG-UNK-456	:	1	:	11869
+PG-UNK-457	:	1	:	11869
+PG-UNK-458	:	1	:	11869
+PG-UNK-459	:	1	:	11869
+PG-UNK-460	:	1	:	11869
+PG-UNK-461	:	1	:	11869
+PG-UNK-462	:	1	:	11869
+PG-UNK-463	:	1	:	11869
+PG-UNK-464	:	1	:	11869
+PG-UNK-465	:	1	:	11869
+PG-UNK-466	:	1	:	11869
+PG-UNK-467	:	1	:	11869
+PG-UNK-468	:	1	:	11869
+PG-UNK-469	:	1	:	11869
+PG-UNK-470	:	1	:	11869
+PG-UNK-471	:	1	:	11869
+PG-UNK-472	:	1	:	11869
+PG-UNK-473	:	1	:	11869
+PG-UNK-474	:	1	:	11869
+PG-UNK-475	:	1	:	11869
+PG-UNK-476	:	1	:	11869
+PG-UNK-477	:	1	:	11869
+PG-UNK-478	:	1	:	11869
+PG-UNK-479	:	1	:	11869
+PG-UNK-480	:	1	:	11869
+PG-UNK-481	:	1	:	11869
+PG-UNK-482	:	1	:	11869
+PG-UNK-483	:	1	:	11869
+PG-UNK-484	:	1	:	11869
+PG-UNK-485	:	1	:	11869
+PG-UNK-486	:	1	:	11869
+PG-UNK-487	:	1	:	11869
+PG-UNK-488	:	1	:	11869
+PG-UNK-489	:	1	:	11869
+PG-UNK-490	:	1	:	11869
+PG-UNK-491	:	1	:	11869
+PG-UNK-492	:	1	:	11869
+PG-UNK-493	:	1	:	11869
+PG-UNK-494	:	1	:	11869
+PG-UNK-495	:	1	:	11869
+PG-UNK-496	:	1	:	11869
+PNG.L2.1		:		2		:		11869
+PNG.L2.2		:		2		:		11869
+PNG.L2.3		:		2		:		11869
+PNG.L2.4		:		2		:		11869
+PNG.L2.5		:		2		:		11869
+PNG.L2.6		:		2		:		11869
+PNG.L2.7		:		2		:		11869
+PNG.L2.8		:		2		:		11869
+PNG.L2.9		:		2		:		11869
+PNG.L2.10		:		2		:		11869
+PNG.L2.11		:		2		:		11869
+PNG.L2.12		:		2		:		11869
+PNG.L2.13		:		2		:		11869
+PNG.L2.14		:		2		:		11869
+PNG.L2.15		:		2		:		11869
+PNG.L2.16		:		2		:		11869
+PNG.L2.17		:		2		:		11869
+PNG.L2.18		:		2		:		11869
+PNG.L2.19		:		2		:		11869
+PNG.L2.20		:		2		:		11869
+PNG.L2.21		:		2		:		11869
+PNG.L2.22		:		2		:		11869
+PNG.L2.23		:		2		:		11869
+PNG.L2.24		:		2		:		11869
+PNG.L2.25		:		2		:		11869
+PNG.L2.26		:		2		:		11869
+PNG.L2.27		:		2		:		11869
+PNG.L2.28		:		2		:		11869
+PNG.L2.29		:		2		:		11869
+PNG.L2.30		:		2		:		11869
+PNG.L2.31		:		2		:		11869
+PNG.L2.32		:		2		:		11869
+PNG.L2.33		:		2		:		11869
+PNG.L2.34		:		2		:		11869
+PNG.L2.35		:		2		:		11869
+PNG.L2.36		:		2		:		11869
+PNG.L2.37		:		2		:		11869
+PNG.L2.38		:		2		:		11869
+PNG.L2.39		:		2		:		11869
+PNG.L2.40		:		2		:		11869
+PNG.L2.41		:		2		:		11869
+PNG.L2.42		:		2		:		11869
+PNG.L2.43		:		2		:		11869
+PNG.L2.44		:		2		:		11869
+PNG.L2.45		:		2		:		11869
+PNG.L2.46		:		2		:		11869
+PNG.L2.47		:		2		:		11869
+PNG.L2.48		:		2		:		11869
+PNG.L2.49		:		2		:		11869
+PNG.L2.50		:		2		:		11869
+PNG.L2.51		:		2		:		11869
+PNG.L2.52		:		2		:		11869
+PNG.L2.53		:		2		:		11869
+PNG.L2.54		:		2		:		11869
+PNG.L2.55		:		2		:		11869
+PNG.L2.56		:		2		:		11869
+PNG.L2.57		:		2		:		11869
+PNG.L2.58		:		2		:		11869
+PNG.L2.59		:		2		:		11869
+PNG.L2.60		:		2		:		11869
+PNG.L2.61		:		2		:		11869
+PNG.L2.62		:		2		:		11869
+PNG.L2.63		:		2		:		11869
+PNG.L2.64		:		2		:		11869
+PNG.L2.65		:		2		:		11869
+PNG.L2.66		:		2		:		11869
+PNG.L2.67		:		2		:		11869
+PNG.L2.68		:		2		:		11869
+PNG.L2.69		:		2		:		11869
+PNG.L2.70		:		2		:		11869
+PNG.L2.71		:		2		:		11869
+PNG.L2.72		:		2		:		11869
+PNG.L2.73		:		2		:		11869
+PNG.L2.74		:		2		:		11869
+PNG.L2.75		:		2		:		11869
+PNG.L2.76		:		2		:		11869
+PNG.L2.77		:		2		:		11869
+PNG.L2.78		:		2		:		11869
+PNG.L2.79		:		2		:		11869
+PNG.L2.80		:		2		:		11869
+PNG.L2.81		:		2		:		11869
+PNG.L2.82		:		2		:		11869
+PNG.L2.83		:		2		:		11869
+PNG.L2.84		:		2		:		11869
+PNG.L2.85		:		2		:		11869
+PNG.L2.86		:		2		:		11869
+PNG.L2.87		:		2		:		11869
+PNG.L2.88		:		2		:		11869
+PNG.L2.89		:		2		:		11869
+PNG.L2.90		:		2		:		11869
+PNG.L2.91		:		2		:		11869
+PNG.L2.92		:		2		:		11869
+PNG.L2.93		:		2		:		11869
+PNG.L2.94		:		2		:		11869
+PNG.L2.95		:		2		:		11869
+PNG.L2.96		:		2		:		11869
+PNG.L2.97		:		2		:		11869
+PNG.L2.98		:		2		:		11869
+PNG.L2.99		:		2		:		11869
+PNG.L2.100		:		2		:		11869
+PNG.L2.101		:		2		:		11869
+PNG.L2.102		:		2		:		11869
+PNG.L2.103		:		2		:		11869
+PNG.L2.104		:		2		:		11869
+PNG.L2.105		:		2		:		11869
+PNG.L2.106		:		2		:		11869
+PNG.L2.107		:		2		:		11869
+PNG.L2.108		:		2		:		11869
+PNG.L2.109		:		2		:		11869
+PNG.L2.110		:		2		:		11869
+PNG.L2.111		:		2		:		11869
+PNG.L2.112		:		2		:		11869
+PNG.L2.113		:		2		:		11869
+PNG.L2.114		:		2		:		11869
+PNG.L2.115		:		2		:		11869
+PNG.L2.116		:		2		:		11869
+PNG.L2.117		:		2		:		11869
+PNG.L2.118		:		2		:		11869
+PNG.L2.119		:		2		:		11869
+PNG.L2.120		:		2		:		11869
+PNG.L2.121		:		2		:		11869
+PNG.L2.122		:		2		:		11869
+PNG.L2.123		:		2		:		11869
+PNG.L2.124		:		2		:		11869
+PNG.L2.125		:		2		:		11869
+PNG.L2.126		:		2		:		11869
+PNG.L2.127		:		2		:		11869
+PNG.L2.128		:		2		:		11869
+PNG.L2.129		:		2		:		11869
+PNG.L2.130		:		2		:		11869
+PNG.L2.131		:		2		:		11869
+PNG.L2.132		:		2		:		11869
+PNG.L2.133		:		2		:		11869
+PNG.L2.134		:		2		:		11869
+PNG.L2.135		:		2		:		11869
+PNG.L2.136		:		2		:		11869
+PNG.L2.137		:		2		:		11869
+PNG.L2.138		:		2		:		11869
+PNG.L2.139		:		2		:		11869
+PNG.L2.140		:		2		:		11869
+PNG.L2.141		:		2		:		11869
+PNG.L2.142		:		2		:		11869
+PNG.L2.143		:		2		:		11869
+PNG.L2.144		:		2		:		11869
+PNG.L2.145		:		2		:		11869
+PNG.L2.146		:		2		:		11869
+PNG.L2.147		:		2		:		11869
+PNG.L2.148		:		2		:		11869
+PNG.L2.149		:		2		:		11869
+PNG.L2.150		:		2		:		11869
+PNG.L2.151		:		2		:		11869
+PNG.L2.152		:		2		:		11869
+PNG.L2.153		:		2		:		11869
+PNG.L2.154		:		2		:		11869
+PNG.L2.155		:		2		:		11869
+PNG.L2.156		:		2		:		11869
+PNG.L2.157		:		2		:		11869
+PNG.L2.158		:		2		:		11869
+PNG.L2.159		:		2		:		11869
+PNG.L2.160		:		2		:		11869
+PNG.L2.161		:		2		:		11869
+PNG.L2.162		:		2		:		11869
+PNG.L2.163		:		2		:		11869
+PNG.L2.164		:		2		:		11869
+PNG.L2.165		:		2		:		11869
+PNG.L2.166		:		2		:		11869
+PNG.L2.167		:		2		:		11869
+PNG.L2.168		:		2		:		11869
+PNG.L2.169		:		2		:		11869
+PNG.L2.170		:		2		:		11869
+PNG.L2.171		:		2		:		11869
+PNG.L2.172		:		2		:		11869
+PNG.L2.173		:		2		:		11869
+PNG.L2.174		:		2		:		11869
+PNG.L2.175		:		2		:		11869
+PNG.L2.176		:		2		:		11869
+PNG.L2.177		:		2		:		11869
+PNG.L2.178		:		2		:		11869
+PNG.L2.179		:		2		:		11869
+PNG.L2.180		:		2		:		11869
+PNG.L2.181		:		2		:		11869
+PNG.L2.182		:		2		:		11869
+PNG.L2.183		:		2		:		11869
+PNG.L2.184		:		2		:		11869
+PNG.L2.185		:		2		:		11869
+PNG.L2.186		:		2		:		11869
+PNG.L2.187		:		2		:		11869
+PNG.L2.188		:		2		:		11869
+PNG.L2.189		:		2		:		11869
+PNG.L2.190		:		2		:		11869
+PNG.L2.191		:		2		:		11869
+PNG.L2.192		:		2		:		11869
+PNG.L2.193		:		2		:		11869
+PNG.L2.194		:		2		:		11869
+PNG.L2.195		:		2		:		11869
+PNG.L2.196		:		2		:		11869
+PNG.L2.197		:		2		:		11869
+PNG.L2.198		:		2		:		11869
+PNG.L2.199		:		2		:		11869
+PNG.L2.200		:		2		:		11869
+PNG.L2.201		:		2		:		11869
+PNG.L2.202		:		2		:		11869
+PNG.L2.203		:		2		:		11869
+PNG.L2.204		:		2		:		11869
+PNG.L2.205		:		2		:		11869
+PNG.L2.206		:		2		:		11869
+PNG.L2.207		:		2		:		11869
+PNG.L2.208		:		2		:		11869
+PNG.L2.209		:		2		:		11869
+PNG.L2.210		:		2		:		11869
+PNG.L2.211		:		2		:		11869
+PNG.L2.212		:		2		:		11869
+PNG.L2.213		:		2		:		11869
+PNG.L2.214		:		2		:		11869
+PNG.L2.215		:		2		:		11869
+PNG.L2.216		:		2		:		11869
+PNG.L2.217		:		2		:		11869
+PNG.L2.218		:		2		:		11869
+PNG.L2.219		:		2		:		11869
+PNG.L2.220		:		2		:		11869
+PNG.L2.221		:		2		:		11869
+PNG.L2.222		:		2		:		11869
+PNG.L2.223		:		2		:		11869
+PNG.L2.224		:		2		:		11869
+PNG.L2.225		:		2		:		11869
+PNG.L2.226		:		2		:		11869
+PNG.L2.227		:		2		:		11869
+PNG.L2.228		:		2		:		11869
+PNG.L2.229		:		2		:		11869
+PNG.L2.230		:		2		:		11869
+PNG.L2.231		:		2		:		11869
+PNG.L2.232		:		2		:		11869
+PNG.L2.233		:		2		:		11869
+PNG.L2.234		:		2		:		11869
+PNG.L2.235		:		2		:		11869
+PNG.L2.236		:		2		:		11869
+PNG.L2.237		:		2		:		11869
+PNG.L2.238		:		2		:		11869
+PNG.L2.239		:		2		:		11869
+PNG.L2.240		:		2		:		11869
+PNG.L2.241		:		2		:		11869
+PNG.L2.242		:		2		:		11869
+PNG.L2.243		:		2		:		11869
+PNG.L2.244		:		2		:		11869
+PNG.L2.245		:		2		:		11869
+PNG.L2.246		:		2		:		11869
+PNG.L2.247		:		2		:		11869
+PNG.L2.248		:		2		:		11869
+PNG.L2.249		:		2		:		11869
+PNG.L2.250		:		2		:		11869
+PNG.L2.251		:		2		:		11869
+PNG.L2.252		:		2		:		11869
+PNG.L2.253		:		2		:		11869
+PNG.L2.254		:		2		:		11869
+PNG.L2.255		:		2		:		11869
+PNG.L2.256		:		2		:		11869
+PNG.L2.257		:		2		:		11869
+PNG.L2.258		:		2		:		11869
+PNG.L2.259		:		2		:		11869
+PNG.L2.260		:		2		:		11869
+PNG.L2.261		:		2		:		11869
+PNG.L2.262		:		2		:		11869
+PNG.L2.263		:		2		:		11869
+PNG.L2.264		:		2		:		11869
+PNG.L2.265		:		2		:		11869
+PNG.L2.266		:		2		:		11869
+PNG.L2.267		:		2		:		11869
+PNG.L2.268		:		2		:		11869
+PNG.L2.269		:		2		:		11869
+PNG.L2.270		:		2		:		11869
+PNG.L2.271		:		2		:		11869
+PNG.L2.272		:		2		:		11869
+PNG.L2.273		:		2		:		11869
+PNG.L2.274		:		2		:		11869
+PNG.L2.275		:		2		:		11869
+PNG.L2.276		:		2		:		11869
+PNG.L2.277		:		2		:		11869
+PNG.L2.278		:		2		:		11869
+PNG.L2.279		:		2		:		11869
+PNG.L2.280		:		2		:		11869
+PNG.L2.281		:		2		:		11869
+PNG.L2.282		:		2		:		11869
+PNG.L2.283		:		2		:		11869
+PNG.L2.284		:		2		:		11869
+PNG.L2.285		:		2		:		11869
+PNG.L2.286		:		2		:		11869
+PNG.L2.287		:		2		:		11869
+PNG.L2.288		:		2		:		11869
+PNG.L2.289		:		2		:		11869
+PNG.L2.290		:		2		:		11869
+PNG.L2.291		:		2		:		11869
+PNG.L2.292		:		2		:		11869
+PNG.L2.293		:		2		:		11869
+PNG.L2.294		:		2		:		11869
+PNG.L2.295		:		2		:		11869
+PNG.L2.296		:		2		:		11869
+PNG.L2.297		:		2		:		11869
+PNG.L2.298		:		2		:		11869
+PNG.L2.299		:		2		:		11869
+PNG.L2.300		:		2		:		11869
+PNG.L2.301		:		2		:		11869
+PNG.L2.302		:		2		:		11869
+PNG.L2.303		:		2		:		11869
+PNG.L2.304		:		2		:		11869
+PNG.L2.305		:		2		:		11869
+PNG.L2.306		:		2		:		11869
+PNG.L2.307		:		2		:		11869
+PNG.L2.308		:		2		:		11869
+PNG.L2.309		:		2		:		11869
+PNG.L2.310		:		2		:		11869
+PNG.L2.311		:		2		:		11869
+PNG.L2.312		:		2		:		11869
+PNG.L2.313		:		2		:		11869
+PNG.L2.314		:		2		:		11869
+PNG.L2.315		:		2		:		11869
+PNG.L2.316		:		2		:		11869
+PNG.L2.317		:		2		:		11869
+PNG.L2.318		:		2		:		11869
+PNG.L2.319		:		2		:		11869
+PNG.L2.320		:		2		:		11869
+PNG.L2.321		:		2		:		11869
+PNG.L2.322		:		2		:		11869
+PNG.L2.323		:		2		:		11869
+PNG.L2.324		:		2		:		11869
+PNG.L2.325		:		2		:		11869
+PNG.L2.326		:		2		:		11869
+PNG.L2.327		:		2		:		11869
+PNG.L2.328		:		2		:		11869
+PNG.L2.329		:		2		:		11869
+PNG.L2.330		:		2		:		11869
+PNG.L2.331		:		2		:		11869
+PNG.L2.332		:		2		:		11869
+PNG.L2.333		:		2		:		11869
+PNG.L2.334		:		2		:		11869
+PNG.L2.335		:		2		:		11869
+PNG.L2.336		:		2		:		11869
+PNG.L2.337		:		2		:		11869
+PNG.L2.338		:		2		:		11869
+PNG.L2.339		:		2		:		11869
+PNG.L2.340		:		2		:		11869
+PNG.L2.341		:		2		:		11869
+PNG.L2.342		:		2		:		11869
+PNG.L2.343		:		2		:		11869
+PNG.L2.344		:		2		:		11869
+PNG.L2.345		:		2		:		11869
+PNG.L2.346		:		2		:		11869
+PNG.L2.347		:		2		:		11869
+PNG.L2.348		:		2		:		11869
+PNG.L2.349		:		2		:		11869
+PNG.L2.350		:		2		:		11869
+PNG.L2.351		:		2		:		11869
+PNG.L2.352		:		2		:		11869
+PNG.L2.353		:		2		:		11869
+PNG.L2.354		:		2		:		11869
+PNG.L2.355		:		2		:		11869
+PNG.L2.356		:		2		:		11869
+PNG.L2.357		:		2		:		11869
+PNG.L2.358		:		2		:		11869
+PNG.L2.359		:		2		:		11869
+PNG.L2.360		:		2		:		11869
+PNG.L2.361		:		2		:		11869
+PNG.L2.362		:		2		:		11869
+PNG.L2.363		:		2		:		11869
+PNG.L2.364		:		2		:		11869
+PNG.L2.365		:		2		:		11869
+PNG.L2.366		:		2		:		11869
+PNG.L2.367		:		2		:		11869
+PNG.L2.368		:		2		:		11869
+PNG.L2.369		:		2		:		11869
+PNG.L2.370		:		2		:		11869
+PNG.L2.371		:		2		:		11869
+PNG.L2.372		:		2		:		11869
+PNG.L2.373		:		2		:		11869
+PNG.L2.374		:		2		:		11869
+PNG.L2.375		:		2		:		11869
+PNG.L2.376		:		2		:		11869
+PNG.L2.377		:		2		:		11869
+PNG.L2.378		:		2		:		11869
+PNG.L2.379		:		2		:		11869
+PNG.L2.380		:		2		:		11869
+PNG.L2.381		:		2		:		11869
+PNG.L2.382		:		2		:		11869
+PNG.L2.383		:		2		:		11869
+PNG.L2.384		:		2		:		11869
+PNG.L2.385		:		2		:		11869
+PNG.L2.386		:		2		:		11869
+PNG.L2.387		:		2		:		11869
+PNG.L2.388		:		2		:		11869
+PNG.L2.389		:		2		:		11869
+PNG.L2.390		:		2		:		11869
+PNG.L2.391		:		2		:		11869
+PNG.L2.392		:		2		:		11869
+PNG.L2.393		:		2		:		11869
+PNG.L2.394		:		2		:		11869
+PNG.L2.395		:		2		:		11869
+PNG.L2.396		:		2		:		11869
+PNG.L2.397		:		2		:		11869
+PNG.L2.398		:		2		:		11869
+PNG.L2.399		:		2		:		11869
+PNG.L2.400		:		2		:		11869
+PNG.L2.401		:		2		:		11869
+PNG.L2.402		:		2		:		11869
+PNG.L2.403		:		2		:		11869
+PNG.L2.404		:		2		:		11869
+PNG.L2.405		:		2		:		11869
+PNG.L2.406		:		2		:		11869
+PNG.L2.407		:		2		:		11869
+PNG.L2.408		:		2		:		11869
+PNG.L2.409		:		2		:		11869
+PNG.L2.410		:		2		:		11869
+PNG.L2.411		:		2		:		11869
+PNG.L2.412		:		2		:		11869
+PNG.L2.413		:		2		:		11869
+PNG.L2.414		:		2		:		11869
+PNG.L2.415		:		2		:		11869
+PNG.L2.416		:		2		:		11869
+PNG.L2.417		:		2		:		11869
+PNG.L2.418		:		2		:		11869
+PNG.L2.419		:		2		:		11869
+PNG.L2.420		:		2		:		11869
+PNG.L2.421		:		2		:		11869
+PNG.L2.422		:		2		:		11869
+PNG.L2.423		:		2		:		11869
+PNG.L2.424		:		2		:		11869
+PNG.L2.425		:		2		:		11869
+PNG.L2.426		:		2		:		11869
+PNG.L2.427		:		2		:		11869
+PNG.L2.428		:		2		:		11869
+PNG.L2.429		:		2		:		11869
+PNG.L2.430		:		2		:		11869
+PNG.L2.431		:		2		:		11869
+PNG.L2.432		:		2		:		11869
+PNG.L2.433		:		2		:		11869
+PNG.L2.434		:		2		:		11869
+PNG.L2.435		:		2		:		11869
+PNG.L2.436		:		2		:		11869
+PNG.L2.437		:		2		:		11869
+PNG.L2.438		:		2		:		11869
+PNG.L2.439		:		2		:		11869
+PNG.L2.440		:		2		:		11869
+PNG.L2.441		:		2		:		11869
+PNG.L2.442		:		2		:		11869
+PNG.L2.443		:		2		:		11869
+PNG.L2.444		:		2		:		11869
+PNG.L2.445		:		2		:		11869
+PNG.L2.446		:		2		:		11869
+PNG.L2.447		:		2		:		11869
+PNG.L2.448		:		2		:		11869
+PNG.L2.449		:		2		:		11869
+PNG.L2.450		:		2		:		11869
+PNG.L2.451		:		2		:		11869
+PNG.L2.452		:		2		:		11869
+PNG.L2.453		:		2		:		11869
+PNG.L2.454		:		2		:		11869
+PNG.L2.455		:		2		:		11869
+PNG.L2.456		:		2		:		11869
+PNG.L2.457		:		2		:		11869
+PNG.L2.458		:		2		:		11869
+PNG.L2.459		:		2		:		11869
+PNG.L2.460		:		2		:		11869
+PNG.L2.461		:		2		:		11869
+PNG.L2.462		:		2		:		11869
+PNG.L2.463		:		2		:		11869
+PNG.L2.464		:		2		:		11869
+PNG.L2.465		:		2		:		11869
+PNG.L2.466		:		2		:		11869
+PNG.L2.467		:		2		:		11869
+PNG.L2.468		:		2		:		11869
+PNG.L2.469		:		2		:		11869
+PNG.L2.470		:		2		:		11869
+PNG.L2.471		:		2		:		11869
+PNG.L2.472		:		2		:		11869
+PNG.L2.473		:		2		:		11869
+PNG.L2.474		:		2		:		11869
+PNG.L2.475		:		2		:		11869
+PNG.L2.476		:		2		:		11869
+PNG.L2.477		:		2		:		11869
+PNG.L2.478		:		2		:		11869
+PNG.L2.479		:		2		:		11869
+PNG.L2.480		:		2		:		11869
+PNG.L2.481		:		2		:		11869
+PNG.L2.482		:		2		:		11869
+PNG.L2.483		:		2		:		11869
+PNG.L2.484		:		2		:		11869
+PNG.L2.485		:		2		:		11869
+PNG.L2.486		:		2		:		11869
+PNG.L2.487		:		2		:		11869
+PNG.L2.488		:		2		:		11869
+PNG.L2.489		:		2		:		11869
+PNG.L2.490		:		2		:		11869
+PNG.L2.491		:		2		:		11869
+PNG.L2.492		:		2		:		11869
+PNG.L2.493		:		2		:		11869
+PNG.L2.494		:		2		:		11869
+PNG.L2.495		:		2		:		11869
+PNG.L2.496		:		2		:		11869
+Central  	:	1	:	183153
+Simbu 	:	1	:	258776
+East New Britain 	:	1	:	220035
+East Sepik 	:	1	:	341583
+Eastern Highlands 	:	1	:	429480
+Enga 	:	1	:	289299
+Gulf 	:	1	:	105050
+Madang 	:	1	:	362805
+Manus 	:	1	:	43589
+Milne Bay 	:	1	:	209054
+Morobe 	:	1	:	536917
+National Capital District 	:	1	:	252469
+New Ireland 	:	1	:	118148
+North Solomons 	:	1	:	141161
+Oro (Northern) 	:	1	:	132714
+Southern Highlands 	:	1	:	544352
+West New Britain 	:	1	:	184838
+West Sepik 	:	1	:	185790
+Western 	:	1	:	152067
+Western Highlands 	:	1	:	439085
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_AREA.txt
new file mode 100644
index 0000000..f65eb26
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_AREA.txt
@@ -0,0 +1,20 @@
+Paraguay	:	0	:	406750
+Alto Paraguay   	:	1	:	82349
+Alto Parana 	:	1	:	14895
+Amambay 	:	1	:	12933
+Asuncion 	:	1	:	117
+Boqueron 	:	1	:	91669
+Caaguazu	:	1	:	11474
+Caazapa 	:	1	:	9496
+Canindeyu 	:	1	:	14667
+Central 	:	1	:	2465
+Concepcion 	:	1	:	18051
+Cordillera 	:	1	:	4948
+Guaira 	:	1	:	3846
+Itapua 	:	1	:	16525
+Misiones 	:	1	:	9556
+Neembucu 	:	1	:	12147
+Paraguari	:	1	:	8705
+Presidente Hayes 	:	1	:	72907
+San Pedro 	:	1	:	20002
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_POPULATION.txt
new file mode 100644
index 0000000..4cef8a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PARAGUAY_POPULATION.txt
@@ -0,0 +1,19 @@
+Paraguay	:	0	:	6506464
+Alto Paraguay   	:	1	:	13250
+Alto Parana 	:	1	:	559769
+Amambay 	:	1	:	115320
+Asuncion 	:	1	:	510910
+Boqueron 	:	1	:	43480
+Caaguazu	:	1	:	443311
+Caazapa 	:	1	:	139080
+Canindeyu 	:	1	:	140250
+Central 	:	1	:	1362650
+Concepcion 	:	1	:	178900
+Cordillera 	:	1	:	233170
+Guaira 	:	1	:	178130
+Itapua 	:	1	:	459480
+Misiones 	:	1	:	102230
+Neembucu 	:	1	:	76730
+Paraguari	:	1	:	224850
+Presidente Hayes 	:	1	:	82030
+San Pedro 	:	1	:	319540
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_AREA.txt
new file mode 100644
index 0000000..dad4831
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_AREA.txt
@@ -0,0 +1,26 @@
+Peru	:	0	:	1285220
+Amazonas	:	1	:	39249.13
+Ancash	:	1	:	35914.81
+apurimac	:	1	:	20895.79
+arequipa	:	1	:	63345.39
+ayacucho	:	1	:	43814.80
+cajamarca	:	1	:	33317.54
+el callao	:	1	:	146.98
+cuzco	:	1	:	71986.50
+huancavelica	:	1	:	22131.47
+huanuco	:	1	:	36848.85
+ica	:	1	:	21327.83
+junin	:	1	:	44197.23
+la libertad	:	1	:	25499.90
+lambayeque	:	1	:	14213.30
+lima	:	1	:	34801.59
+loreto	:	1	:	368851.95
+madre de dios	:	1	:	85300.54
+moquegua	:	1	:	15733.97
+pasco	:	1	:	25319.59
+piura	:	1	:	35892.49
+puno	:	1	:	71999.00
+san martin	:	1	:	51253.31
+tacna	:	1	:	16075.89
+tumbes	:	1	:	4669.20
+ucayali	:	1	:	102410.55
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_POPULATION.txt
new file mode 100644
index 0000000..8bbf598
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PERU_POPULATION.txt
@@ -0,0 +1,26 @@
+Peru	:	0	:	28302603
+Amazonas	:	1	:	435556
+Ancash	:	1	:	1123410
+apurimac	:	1	:	470719
+arequipa	:	1	:	1113916
+ayacucho	:	1	:	561029
+cajamarca	:	1	:	1515827
+el callao	:	1	:	799530
+cuzco	:	1	:	1223248
+huancavelica	:	1	:	451508
+huanuco	:	1	:	822804
+ica	:	1	:	698437
+junin	:	1	:	1260773
+la libertad	:	1	:	1528448
+lambayeque	:	1	:	1131467
+lima	:	1	:	7880039
+loreto	:	1	:	919505
+madre de dios	:	1	:	102174
+moquegua	:	1	:	160232
+pasco	:	1	:	270987
+piura	:	1	:	1660952
+puno	:	1	:	1280555
+san martin	:	1	:	767890
+tacna	:	1	:	301960
+tumbes	:	1	:	206578
+ucayali	:	1	:	460557
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_AREA.txt
new file mode 100644
index 0000000..c7fc2c7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_AREA.txt
@@ -0,0 +1,19 @@
+Phillipines	:	0	:	300000
+Region 1	:	1	:	12840
+Region 2	:	1	:	26838
+Region 3	:	1	:	21470
+Region 4	:	1	:	16229
+Region V	:	1	:	27456
+Region 5	:	1	:	17634
+Region 6	:	1	:	20223
+Region 7	:	1	:	14951
+Region 8 : 1 : 21432
+Region Z	:	1	:	21432
+Region 9	:	1	:	16042
+Region 10	:	1	:	17125
+Region 11	:	1	:	19671
+Region 12	:	1	:	18348
+Region 13	:	1	:	18847
+ARMM - Autonomous Region in Muslim Mindanao 	:	1	:	13010
+CAR	:	1	:	18294
+NCR	:	1	:	636
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_POPULATION.txt
new file mode 100644
index 0000000..87a5bb7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PHILIPPINES_POPULATION.txt
@@ -0,0 +1,19 @@
+Phillipines	:	0	:	89468677
+Region 1	:	1	:	4200329
+Region 2	:	1	:	2813159
+Region 3	:	1	:	8200151
+Region 4	:	1	:	9320629
+Region V	:	1	:	2298796
+Region 5	:	1	:	4632689
+Region 6	:	1	:	6208733
+Region 7	:	1	:	5700628
+Region 8 : 1 : 3610355
+Region Z	:	1	:	3610191
+Region 9	:	1	:	2831342
+Region 10	:	1	:	3493806
+Region 11	:	1	:	3676163
+Region 12	:	1	:	3208770
+Region 13	:	1	:	2094021
+ARMM - Autonomous Region in Muslim Mindanao 	:	1	:	2803045
+CAR	:	1	:	1365220
+NCR	:	1	:	9906048
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_AREA.txt
new file mode 100644
index 0000000..f936047
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_AREA.txt
@@ -0,0 +1,50 @@
+ POLAND : 0 : 312683.0
+ Gdansk : 1 : 7394.0
+ Slupsk : 1 : 7453.0
+ Koszalin : 1 : 8470.0
+ Elblag : 1 : 6103.0
+ Suwalski : 1 : 10490.0
+ Olsztyn : 1 : 12327.0
+ Szczecin : 1 : 9981.0
+ Bydgoszcz : 1 : 10349.0
+ Lomza : 1 : 6684.0
+ Bialystok : 1 : 10055.0
+ Pila : 1 : 8205.0
+ Torun : 1 : 5348.0
+ Ostroleka : 1 : 6498.0
+ Ciechanow : 1 : 6362.0
+ Gorzow : 1 : 8484.0
+ Wloclawek : 1 : 4402.0
+ Plock : 1 : 5117.0
+ Poznan : 1 : 8151.0
+ Siedlce : 1 : 8499.0
+ Warszawa : 1 : 3788.0
+ Konin : 1 : 5139.0
+ Biala Podlaska : 1 : 5348.0
+ Zielona Gora : 1 : 8868.0
+ Skierniewice : 1 : 3960.0
+ Leszno : 1 : 4154.0
+ Kalisz : 1 : 6512.0
+ Lodz : 1 : 1523.0
+ Sieradz : 1 : 4869.0
+ Radom : 1 : 7294.0
+ Lublin : 1 : 6792.0
+ Legnica : 1 : 4037.0
+ Piotrkow : 1 : 6266.0
+ Chelm : 1 : 3866.0
+ Wroclaw : 1 : 6287.0
+ Jelenia Gora : 1 : 4378.0
+ Kielce : 1 : 9211.0
+ Czestochowa : 1 : 6182.0
+ Opole : 1 : 8535.0
+ Tarnobrzeg : 1 : 6283.0
+ Walbrzych : 1 : 4168.0
+ Zamosc : 1 : 6980.0
+ Katowice : 1 : 6650.0
+ Rzeszow : 1 : 4397.0
+ Przemysl : 1 : 4437.0
+ Krakow : 1 : 3254.0
+ Tarnow : 1 : 4151.0
+ Bielsko-Biala : 1 : 3704.0
+ Krosno : 1 : 5702.0
+ Nowy Sacz : 1 : 5576.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_POPULATION.txt
new file mode 100644
index 0000000..7dc646e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/POLAND_POPULATION.txt
@@ -0,0 +1,49 @@
+ Gdansk : 1 : 1431569
+ Slupsk : 1 : 413820
+ Koszalin : 1 : 508172
+ Elblag : 1 : 478865
+ Suwalski : 1 : 471623
+ Olsztyn : 1 : 753032
+ Szczecin : 1 : 972073
+ Bydgoszcz : 1 : 1110772
+ Lomza : 1 : 346705
+ Bialystok : 1 : 692821
+ Pila : 1 : 480745
+ Torun : 1 : 659117
+ Ostroleka : 1 : 397276
+ Ciechanow : 1 : 428361
+ Gorzow : 1 : 500666
+ Wloclawek : 1 : 429433
+ Plock : 1 : 516431
+ Poznan : 1 : 1334091
+ Siedlce : 1 : 651433
+ Warszawa : 1 : 2421594
+ Konin : 1 : 469191
+ Biala Podlaska : 1 : 305337
+ Zielona Gora : 1 : 659973
+ Skierniewice : 1 : 419339
+ Leszno : 1 : 386837
+ Kalisz : 1 : 710746
+ Lodz : 1 : 1139498
+ Sieradz : 1 : 408142
+ Radom : 1 : 751126
+ Lublin : 1 : 1016355
+ Legnica : 1 : 515859
+ Piotrkow : 1 : 642625
+ Chelm : 1 : 247226
+ Wroclaw : 1 : 1128791
+ Jelenia Gora : 1 : 517880
+ Kielce : 1 : 1126668
+ Czestochowa : 1 : 776662
+ Opole : 1 : 1018610
+ Tarnobrzeg : 1 : 599061
+ Walbrzych : 1 : 740898
+ Zamosc : 1 : 490396
+ Katowice : 1 : 3988831
+ Rzeszow : 1 : 723697
+ Przemysl : 1 : 406771
+ Krakow : 1 : 1231636
+ Tarnow : 1 : 670261
+ Bielsko-Biala : 1 : 900259
+ Krosno : 1 : 495011
+ Nowy Sacz : 1 : 697875
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_AREA.txt
new file mode 100644
index 0000000..f2853f9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_AREA.txt
@@ -0,0 +1,5 @@
+ NORTE : 1 : 21290.0
+ CENTRO : 1 : 23667.0
+ LISBOA E VALE DO TEJO : 1 : 11982.0
+ ALENTEJO : 1 : 26996.0
+ ALGARVE : 1 : 4990.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_POPULATION.txt
new file mode 100644
index 0000000..da31ba7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PORTUGAL_POPULATION.txt
@@ -0,0 +1,5 @@
+ NORTE : 1 : 3643300
+ CENTRO : 1 : 1780500
+ LISBOA E VALE DO TEJO : 1 : 3476600
+ ALENTEJO : 1 : 563600
+ ALGARVE : 1 : 344900
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_AREA.txt
new file mode 100644
index 0000000..cf0170f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_AREA.txt
@@ -0,0 +1,79 @@
+Puerto Rico	:	1	:	5324.50
+Adjuntas 	:	1	:	67.11
+Aguada 	:	1	:	45.55
+Aguadilla 	:	1	:	75.56
+Aguas Buenas 	:	1	:	30.57
+Aibonito 	:	1	:	31.3
+Añasco 	:	1	:	44.9
+Arecibo 	:	1	:	171.22
+Arroyo 	:	1	:	35.64
+Barceloneta 	:	1	:	30.9
+Barranquitas 	:	1	:	34.23
+Bayamón 	:	1	:	44.53
+Cabo Rojo 	:	1	:	177.4
+Caguas 	:	1	:	59.07
+Camuy 	:	1	:	61.91
+Canóvanas 	:	1	:	32.97
+Carolina 	:	1	:	60.34
+Cataño 	:	1	:	7.04
+Cayey 	:	1	:	51.91
+Ceiba 	:	1	:	158.82
+Ciales 	:	1	:	66.81
+Cidra 	:	1	:	36.51
+Coamo 	:	1	:	78.05
+Comerío 	:	1	:	28.52
+Corozal 	:	1	:	42.59
+Culebra 	:	1	:	168.83
+Dorado 	:	1	:	53.83
+Fajardo 	:	1	:	105.32
+Florida 	:	1	:	15.2
+Guánica 	:	1	:	79.46
+Guayama 	:	1	:	106.81
+Guayanilla 	:	1	:	64.31
+Guaynabo 	:	1	:	27.31
+Gurabo 	:	1	:	28.28
+Hatillo 	:	1	:	58.73
+Hormigueros 	:	1	:	11.32
+Humacao 	:	1	:	71.4
+Isabela 	:	1	:	91.95
+Jayuya 	:	1	:	44.59
+Juana Díaz 	:	1	:	107.04
+Juncos 	:	1	:	26.6
+Lajas 	:	1	:	101.14
+Lares 	:	1	:	61.65
+Las Marías 	:	1	:	46.49
+Las Piedras 	:	1	:	33.89
+Loíza 	:	1	:	65.71
+Luquillo 	:	1	:	46.42
+Manatí 	:	1	:	70.69
+Maricao 	:	1	:	36.63
+Maunabo 	:	1	:	38.25
+Mayagüez 	:	1	:	274.09
+Moca 	:	1	:	50.29
+Morovis 	:	1	:	38.92
+Naguabo 	:	1	:	72.26
+Naranjito 	:	1	:	27.7
+Orocovis 	:	1	:	63.66
+Patillas 	:	1	:	75.32
+Peñuelas 	:	1	:	67.77
+Ponce 	:	1	:	193.61
+Quebradillas 	:	1	:	34.32
+Rincón 	:	1	:	54.41
+Río Grande 	:	1	:	89.62
+Sabana Grande 	:	1	:	35.89
+Salinas 	:	1	:	114.14
+San Germán 	:	1	:	54.51
+San Juan 	:	1	:	76.93
+San Lorenzo 	:	1	:	53.22
+San Sebastián 	:	1	:	71.24
+Santa Isabel 	:	1	:	76.95
+Toa Alta 	:	1	:	27.57
+Toa Baja 	:	1	:	41.7
+Trujillo Alto 	:	1	:	21.35
+Utuado 	:	1	:	114.99
+Vega Alta 	:	1	:	37.51
+Vega Baja 	:	1	:	68.17
+Vieques 	:	1	:	263.98
+Villalba 	:	1	:	37.05
+Yabucoa 	:	1	:	83.26
+Yauco 	:	1	:	68.76
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_POPULATION.txt
new file mode 100644
index 0000000..cdf3517
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/PUERTO RICO_POPULATION.txt
@@ -0,0 +1,79 @@
+Puerto Rico : 1 : 3912054
+Adjuntas 	:	1	:	19143
+Aguada 	:	1	:	42042
+Aguadilla 	:	1	:	64685
+Aguas Buenas 	:	1	:	29032
+Aibonito 	:	1	:	26493
+Añasco 	:	1	:	28348
+Arecibo 	:	1	:	100131
+Arroyo 	:	1	:	19117
+Barceloneta 	:	1	:	22322
+Barranquitas 	:	1	:	28909
+Bayamón 	:	1	:	224044
+Cabo Rojo 	:	1	:	46911
+Caguas 	:	1	:	140502
+Camuy 	:	1	:	35244
+Canóvanas 	:	1	:	43335
+Carolina 	:	1	:	186076
+Cataño 	:	1	:	30071
+Cayey 	:	1	:	47370
+Ceiba 	:	1	:	18004
+Ciales 	:	1	:	19811
+Cidra 	:	1	:	42753
+Coamo 	:	1	:	37597
+Comerío 	:	1	:	20002
+Corozal 	:	1	:	36867
+Culebra 	:	1	:	1868
+Dorado 	:	1	:	34017
+Fajardo 	:	1	:	40712
+Florida 	:	1	:	12367
+Guánica 	:	1	:	21888
+Guayama 	:	1	:	44301
+Guayanilla 	:	1	:	23072
+Guaynabo 	:	1	:	100053
+Gurabo 	:	1	:	36743
+Hatillo 	:	1	:	38925
+Hormigueros 	:	1	:	16614
+Humacao 	:	1	:	59035
+Isabela 	:	1	:	44444
+Jayuya 	:	1	:	17318
+Juana Díaz 	:	1	:	50531
+Juncos 	:	1	:	36452
+Lajas 	:	1	:	26261
+Lares 	:	1	:	34415
+Las Marías 	:	1	:	11061
+Las Piedras 	:	1	:	34485
+Loíza 	:	1	:	32537
+Luquillo 	:	1	:	19817
+Manatí 	:	1	:	45409
+Maricao 	:	1	:	6449
+Maunabo 	:	1	:	12741
+Mayagüez 	:	1	:	98434
+Moca 	:	1	:	39697
+Morovis 	:	1	:	29965
+Naguabo 	:	1	:	23753
+Naranjito 	:	1	:	29709
+Orocovis 	:	1	:	23844
+Patillas 	:	1	:	20152
+Peñuelas 	:	1	:	26719
+Ponce 	:	1	:	186475
+Quebradillas 	:	1	:	25450
+Rincón 	:	1	:	14767
+Río Grande 	:	1	:	52362
+Sabana Grande 	:	1	:	25935
+Salinas 	:	1	:	31113
+San Germán 	:	1	:	37105
+San Juan 	:	1	:	434374
+San Lorenzo 	:	1	:	40997
+San Sebastián 	:	1	:	44204
+Santa Isabel 	:	1	:	21665
+Toa Alta 	:	1	:	63929
+Toa Baja 	:	1	:	94085
+Trujillo Alto 	:	1	:	75728
+Utuado 	:	1	:	35336
+Vega Alta 	:	1	:	37910
+Vega Baja 	:	1	:	61929
+Vieques 	:	1	:	9106
+Villalba 	:	1	:	27913
+Yabucoa 	:	1	:	39246
+Yauco 	:	1	:	46384
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_AREA.txt
new file mode 100644
index 0000000..de7c48f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_AREA.txt
@@ -0,0 +1,12 @@
+Qatar	:	0	:	11437
+Qatar : 1 : 11437
+Al Ghuwairiya  	:	1	:	622.7
+Al Jemailya 	:	1	:	2611.70
+Al Khor 	:	1	:	1001.40
+Al Rayyan 	:	1	:	893.5
+Al Shamal 	:	1	:	902.1
+Al Wakra 	:	1	:	1116.30
+Doha 	:	1	:	158.7
+Jeryan Al Betna 	:	1	:	2389.40
+Mesaieed 	:	1	:	1354.80
+Umm Salal 	:	1	:	470.4
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_POPULATION.txt
new file mode 100644
index 0000000..4eaf2fd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/QATAR_POPULATION.txt
@@ -0,0 +1,14 @@
+Qatar	:	0	:	885359
+Qatar : 1 : 885359
+Al Ghuwairiya  	:	1	:	2159
+Al Jemailya 	:	1	:	10303
+Al Khor 	:	1	:	31547
+Al Rayyan 	:	1	:	272860
+Al Shamal 	:	1	:	4915
+Al Wakra 	:	1	:	31441
+Doha 	:	1	:	339847
+Jeryan Al Betna 	:	1	:	6678
+Mesaieed 	:	1	:	12674
+Umm Salal 	:	1	:	31605
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_AREA.txt
new file mode 100644
index 0000000..f3143b3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_AREA.txt
@@ -0,0 +1,41 @@
+ Botosani : 1 : 4965.0
+ Satu Mare : 1 : 4405.0
+ Maramures : 1 : 6215.0
+ Suceava : 1 : 8555.0
+ Bistrita-Nasaud : 1 : 5305.0
+ Bihor : 1 : 7535.0
+ Iasi : 1 : 5469.0
+ Salaj : 1 : 3850.0
+ Cluj : 1 : 6650.0
+ Neamt : 1 : 5890.0
+ Harghita : 1 : 6610.0
+ Mures : 1 : 6696.0
+ Vaslui : 1 : 5297.0
+ Bacau : 1 : 6606.0
+ Arad : 1 : 7652.0
+ Alba : 1 : 6231.0
+ Hunedoara : 1 : 7016.0
+ Covasna : 1 : 3705.0
+ Sibiu : 1 : 5422.0
+ Timis : 1 : 8692.0
+ Brasov : 1 : 5351.0
+ Vrancea : 1 : 4863.0
+ Galati : 1 : 4425.0
+ Buzau : 1 : 6072.0
+ Caras-Severin : 1 : 8503.0
+ Arges : 1 : 6801.0
+ Vilcea : 1 : 5705.0
+ Prahova : 1 : 4694.0
+ Braila : 1 : 4724.0
+ Tulcea : 1 : 8430.0
+ Dimbovita : 1 : 4036.0
+ Gorj : 1 : 5641.0
+ Mehedinti : 1 : 4900.0
+ Olt : 1 : 5507.0
+ Ialomita : 1 : 4449.0
+ Calarasi : 1 : 5074.0
+ Bucuresti : 1 : 1820.0
+ Dolj : 1 : 7413.0
+ Constanta : 1 : 7055.0
+ Giurgiu : 1 : 3511.0
+ Teleorman : 1 : 5760.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_POPULATION.txt
new file mode 100644
index 0000000..b4ad936
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ROMANIA_POPULATION.txt
@@ -0,0 +1,41 @@
+ Botosani : 1 : 470011
+ Satu Mare : 1 : 416889
+ Maramures : 1 : 559989
+ Suceava : 1 : 706152
+ Bistrita-Nasaud : 1 : 329259
+ Bihor : 1 : 660131
+ Iasi : 1 : 821801
+ Salaj : 1 : 269566
+ Cluj : 1 : 744049
+ Neamt : 1 : 590000
+ Harghita : 1 : 361856
+ Mures : 1 : 621493
+ Vaslui : 1 : 468921
+ Bacau : 1 : 743323
+ Arad : 1 : 508302
+ Alba : 1 : 424258
+ Hunedoara : 1 : 567754
+ Covasna : 1 : 237669
+ Sibiu : 1 : 501546
+ Timis : 1 : 722426
+ Brasov : 1 : 696441
+ Vrancea : 1 : 394901
+ Galati : 1 : 651484
+ Buzau : 1 : 521334
+ Caras-Severin : 1 : 403235
+ Arges : 1 : 681735
+ Vilcea : 1 : 432959
+ Prahova : 1 : 880465
+ Braila : 1 : 403856
+ Tulcea : 1 : 270886
+ Dimbovita : 1 : 568134
+ Gorj : 1 : 388621
+ Mehedinti : 1 : 327239
+ Olt : 1 : 530425
+ Ialomita : 1 : 304464
+ Calarasi : 1 : 341631
+ Bucuresti : 1 : 2375679
+ Dolj : 1 : 776161
+ Constanta : 1 : 757941
+ Giurgiu : 1 : 314945
+ Teleorman : 1 : 494322
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_AREA.txt
new file mode 100644
index 0000000..d86ac37
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_AREA.txt
@@ -0,0 +1,5349 @@
+RU-UNK-1 : 1 : 297.89999
+RU-UNK-2 : 1 : 278.5
+RU-UNK-3 : 1 : 1.0
+RU-UNK-4 : 1 : 32.599998
+RU-UNK-5 : 1 : 1.5
+RU-UNK-6 : 1 : 3.4000001
+RU-UNK-7 : 1 : 1.0
+RU-UNK-8 : 1 : 39.099998
+RU-UNK-9 : 1 : 344.79999
+RU-UNK-10 : 1 : 1.0
+RU-UNK-11 : 1 : 4.3000002
+RU-UNK-12 : 1 : 1.4
+RU-UNK-13 : 1 : 141.10001
+RU-UNK-14 : 1 : 510.60001
+RU-UNK-15 : 1 : 2.0
+RU-UNK-16 : 1 : 1.0
+RU-UNK-17 : 1 : 10.4
+RU-UNK-18 : 1 : 57.799999
+RU-UNK-19 : 1 : 8727.5996
+RU-UNK-20 : 1 : 1.5
+RU-UNK-21 : 1 : 1.0
+RU-UNK-22 : 1 : 162.10001
+RU-UNK-23 : 1 : 43.099998
+RU-UNK-24 : 1 : 429.0
+RU-UNK-25 : 1 : 1.7
+RU-UNK-26 : 1 : 1.0
+RU-UNK-27 : 1 : 1654.9
+RU-UNK-28 : 1 : 113.0
+RU-UNK-29 : 1 : 25.4
+RU-UNK-30 : 1 : 425.5
+RU-UNK-31 : 1 : 408.5
+RU-UNK-32 : 1 : 932.09998
+RU-UNK-33 : 1 : 4.1999998
+RU-UNK-34 : 1 : 27.1
+RU-UNK-35 : 1 : 150.5
+RU-UNK-36 : 1 : 2.5
+RU-UNK-37 : 1 : 1.0
+RU-UNK-38 : 1 : 8.8999996
+RU-UNK-39 : 1 : 284.29999
+RU-UNK-40 : 1 : 2.0
+RU-UNK-41 : 1 : 2744.7
+RU-UNK-42 : 1 : 236.3
+RU-UNK-43 : 1 : 336.39999
+RU-UNK-44 : 1 : 1.0
+RU-UNK-45 : 1 : 2035.6
+RU-UNK-46 : 1 : 1063.1
+RU-UNK-47 : 1 : 351.89999
+RU-UNK-48 : 1 : 1.0
+RU-UNK-49 : 1 : 1.3
+RU-UNK-50 : 1 : 1.0
+RU-UNK-51 : 1 : 1.0
+RU-UNK-52 : 1 : 73.900002
+RU-UNK-53 : 1 : 1.5
+RU-UNK-54 : 1 : 1.0
+RU-UNK-55 : 1 : 111.3
+RU-UNK-56 : 1 : 21.200001
+RU-UNK-57 : 1 : 153.39999
+RU-UNK-58 : 1 : 4.3000002
+RU-UNK-59 : 1 : 58.299999
+RU-UNK-60 : 1 : 6.9000001
+RU-UNK-61 : 1 : 10.6
+RU-UNK-62 : 1 : 57.0
+RU-UNK-63 : 1 : 976.70001
+RU-UNK-64 : 1 : 25.299999
+RU-UNK-65 : 1 : 42.400002
+RU-UNK-66 : 1 : 14.0
+RU-UNK-67 : 1 : 505.5
+RU-UNK-68 : 1 : 1.1
+RU-UNK-69 : 1 : 5.0999999
+RU-UNK-70 : 1 : 20.1
+RU-UNK-71 : 1 : 634.79999
+RU-UNK-72 : 1 : 1.0
+RU-UNK-73 : 1 : 1.3
+RU-UNK-74 : 1 : 2.0
+RU-UNK-75 : 1 : 11.7
+RU-UNK-76 : 1 : 73.0
+RU-UNK-77 : 1 : 62.5
+RU-UNK-78 : 1 : 4.6999998
+RU-UNK-79 : 1 : 2.5999999
+RU-UNK-80 : 1 : 186.0
+RU-UNK-81 : 1 : 19.6
+RU-UNK-82 : 1 : 12.1
+RU-UNK-83 : 1 : 14047.0
+RU-UNK-84 : 1 : 4.8000002
+RU-UNK-85 : 1 : 1.1
+RU-UNK-86 : 1 : 6.5999999
+RU-UNK-87 : 1 : 1.0
+RU-UNK-88 : 1 : 4.3000002
+RU-UNK-89 : 1 : 2.2
+RU-UNK-90 : 1 : 273.60001
+RU-UNK-91 : 1 : 1.0
+RU-UNK-92 : 1 : 43.5
+RU-UNK-93 : 1 : 1.0
+RU-UNK-94 : 1 : 261.89999
+RU-UNK-95 : 1 : 1.2
+RU-UNK-96 : 1 : 1530.7
+RU-UNK-97 : 1 : 6.6999998
+RU-UNK-98 : 1 : 32.5
+RU-UNK-99 : 1 : 2.2
+RU-UNK-100 : 1 : 5.5999999
+RU-UNK-101 : 1 : 2.3
+RU-UNK-102 : 1 : 1.8
+RU-UNK-103 : 1 : 1.0
+RU-UNK-104 : 1 : 1.6
+RU-UNK-105 : 1 : 1.0
+RU-UNK-106 : 1 : 1.0
+RU-UNK-107 : 1 : 48.299999
+RU-UNK-108 : 1 : 1.0
+RU-UNK-109 : 1 : 1.2
+RU-UNK-110 : 1 : 13.2
+RU-UNK-111 : 1 : 1.0
+RU-UNK-112 : 1 : 1.6
+RU-UNK-113 : 1 : 1.4
+RU-UNK-114 : 1 : 1.0
+RU-UNK-115 : 1 : 32.200001
+RU-UNK-116 : 1 : 1.0
+RU-UNK-117 : 1 : 280.0
+RU-UNK-118 : 1 : 1.0
+RU-UNK-119 : 1 : 1.4
+RU-UNK-120 : 1 : 1.0
+RU-UNK-121 : 1 : 22.200001
+RU-UNK-122 : 1 : 3.2
+RU-UNK-123 : 1 : 10.8
+RU-UNK-124 : 1 : 1.0
+RU-UNK-125 : 1 : 11.5
+RU-UNK-126 : 1 : 1.0
+RU-UNK-127 : 1 : 4.5
+RU-UNK-128 : 1 : 34.5
+RU-UNK-129 : 1 : 1.0
+RU-UNK-130 : 1 : 30.6
+RU-UNK-131 : 1 : 10582.7
+RU-UNK-132 : 1 : 1.0
+RU-UNK-133 : 1 : 2.5999999
+RU-UNK-134 : 1 : 1.0
+RU-UNK-135 : 1 : 12.4
+RU-UNK-136 : 1 : 1.4
+RU-UNK-137 : 1 : 1.5
+RU-UNK-138 : 1 : 12.2
+RU-UNK-139 : 1 : 1.0
+RU-UNK-140 : 1 : 6.0
+RU-UNK-141 : 1 : 1.2
+RU-UNK-142 : 1 : 1.1
+RU-UNK-143 : 1 : 2.4000001
+RU-UNK-144 : 1 : 1.0
+RU-UNK-145 : 1 : 1.0
+RU-UNK-146 : 1 : 4.6999998
+RU-UNK-147 : 1 : 1.0
+RU-UNK-148 : 1 : 1.0
+RU-UNK-149 : 1 : 1.0
+RU-UNK-150 : 1 : 1.0
+RU-UNK-151 : 1 : 7.3000002
+RU-UNK-152 : 1 : 1.4
+RU-UNK-153 : 1 : 3.0
+RU-UNK-154 : 1 : 1.1
+RU-UNK-155 : 1 : 2.2
+RU-UNK-156 : 1 : 1.5
+RU-UNK-157 : 1 : 1.5
+RU-UNK-158 : 1 : 1.0
+RU-UNK-159 : 1 : 104.2
+RU-UNK-160 : 1 : 4.4000001
+RU-UNK-161 : 1 : 1.0
+RU-UNK-162 : 1 : 1.0
+RU-UNK-163 : 1 : 14.8
+RU-UNK-164 : 1 : 248.7
+RU-UNK-165 : 1 : 1.3
+RU-UNK-166 : 1 : 1.0
+RU-UNK-167 : 1 : 1.0
+RU-UNK-168 : 1 : 1.0
+RU-UNK-169 : 1 : 1.0
+RU-UNK-170 : 1 : 1.0
+RU-UNK-171 : 1 : 1.0
+RU-UNK-172 : 1 : 1.0
+RU-UNK-173 : 1 : 1.0
+RU-UNK-174 : 1 : 2.5999999
+RU-UNK-175 : 1 : 3.3
+RU-UNK-176 : 1 : 5.4000001
+RU-UNK-177 : 1 : 24.200001
+RU-UNK-178 : 1 : 2.8
+RU-UNK-179 : 1 : 1.3
+RU-UNK-180 : 1 : 2.2
+RU-UNK-181 : 1 : 32.5
+RU-UNK-182 : 1 : 1.0
+RU-UNK-183 : 1 : 48.400002
+RU-UNK-184 : 1 : 6.0
+RU-UNK-185 : 1 : 1.8
+RU-UNK-186 : 1 : 2.0
+RU-UNK-187 : 1 : 1.2
+RU-UNK-188 : 1 : 92.099998
+RU-UNK-189 : 1 : 7.9000001
+RU-UNK-190 : 1 : 8.8999996
+RU-UNK-191 : 1 : 8.3000002
+RU-UNK-192 : 1 : 2.0
+RU-UNK-193 : 1 : 143.3
+RU-UNK-194 : 1 : 1.0
+RU-UNK-195 : 1 : 24.9
+RU-UNK-196 : 1 : 1.0
+RU-UNK-197 : 1 : 5.0
+RU-UNK-198 : 1 : 4.4000001
+RU-UNK-199 : 1 : 1.6
+RU-UNK-200 : 1 : 323.79999
+RU-UNK-201 : 1 : 1.1
+RU-UNK-202 : 1 : 7.3000002
+RU-UNK-203 : 1 : 1.6
+RU-UNK-204 : 1 : 59.5
+RU-UNK-205 : 1 : 17.299999
+RU-UNK-206 : 1 : 1.2
+RU-UNK-207 : 1 : 1.2
+RU-UNK-208 : 1 : 1.0
+RU-UNK-209 : 1 : 1.0
+RU-UNK-210 : 1 : 1.3
+RU-UNK-211 : 1 : 2.0999999
+RU-UNK-212 : 1 : 1.0
+RU-UNK-213 : 1 : 4.3000002
+RU-UNK-214 : 1 : 24.5
+RU-UNK-215 : 1 : 45924.699
+RU-UNK-216 : 1 : 1.0
+RU-UNK-217 : 1 : 1.0
+RU-UNK-218 : 1 : 1.5
+RU-UNK-219 : 1 : 1.0
+RU-UNK-220 : 1 : 1.0
+RU-UNK-221 : 1 : 7.0999999
+RU-UNK-222 : 1 : 1.6
+RU-UNK-223 : 1 : 6.5
+RU-UNK-224 : 1 : 47.400002
+RU-UNK-225 : 1 : 1.0
+RU-UNK-226 : 1 : 1.0
+RU-UNK-227 : 1 : 7.9000001
+RU-UNK-228 : 1 : 2.5999999
+RU-UNK-229 : 1 : 1.0
+RU-UNK-230 : 1 : 3.4000001
+RU-UNK-231 : 1 : 1.8
+RU-UNK-232 : 1 : 6.4000001
+RU-UNK-233 : 1 : 7.9000001
+RU-UNK-234 : 1 : 1.0
+RU-UNK-235 : 1 : 13.9
+RU-UNK-236 : 1 : 2.5
+RU-UNK-237 : 1 : 1.0
+RU-UNK-238 : 1 : 1.8
+RU-UNK-239 : 1 : 4.0999999
+RU-UNK-240 : 1 : 9.3000002
+RU-UNK-241 : 1 : 6.0
+RU-UNK-242 : 1 : 1.4
+RU-UNK-243 : 1 : 1.0
+RU-UNK-244 : 1 : 36.0
+RU-UNK-245 : 1 : 1.0
+RU-UNK-246 : 1 : 1.2
+RU-UNK-247 : 1 : 140.39999
+RU-UNK-248 : 1 : 5.0
+RU-UNK-249 : 1 : 12.5
+RU-UNK-250 : 1 : 1.0
+RU-UNK-251 : 1 : 1.0
+RU-UNK-252 : 1 : 5.6999998
+RU-UNK-253 : 1 : 15.2
+RU-UNK-254 : 1 : 1.0
+RU-UNK-255 : 1 : 1.0
+RU-UNK-256 : 1 : 3.2
+RU-UNK-257 : 1 : 15.1
+RU-UNK-258 : 1 : 2.5999999
+RU-UNK-259 : 1 : 33.5
+RU-UNK-260 : 1 : 4.5
+RU-UNK-261 : 1 : 8.3999996
+RU-UNK-262 : 1 : 61.299999
+RU-UNK-263 : 1 : 77.400002
+RU-UNK-264 : 1 : 40.900002
+RU-UNK-265 : 1 : 1.0
+RU-UNK-266 : 1 : 1.0
+RU-UNK-267 : 1 : 13.0
+RU-UNK-268 : 1 : 5.6999998
+RU-UNK-269 : 1 : 1.0
+RU-UNK-270 : 1 : 7.8000002
+RU-UNK-271 : 1 : 211.60001
+RU-UNK-272 : 1 : 1.3
+RU-UNK-273 : 1 : 31.5
+RU-UNK-274 : 1 : 1.1
+RU-UNK-275 : 1 : 1.5
+RU-UNK-276 : 1 : 3.8
+RU-UNK-277 : 1 : 1.9
+RU-UNK-278 : 1 : 1.4
+RU-UNK-279 : 1 : 7.4000001
+RU-UNK-280 : 1 : 2.5
+RU-UNK-281 : 1 : 2.7
+RU-UNK-282 : 1 : 11.1
+RU-UNK-283 : 1 : 4.5
+RU-UNK-284 : 1 : 1.6
+RU-UNK-285 : 1 : 1.9
+RU-UNK-286 : 1 : 4.5999999
+RU-UNK-287 : 1 : 1.0
+RU-UNK-288 : 1 : 5.5999999
+RU-UNK-289 : 1 : 9.8999996
+RU-UNK-290 : 1 : 20.299999
+RU-UNK-291 : 1 : 2.2
+RU-UNK-292 : 1 : 2.3
+RU-UNK-293 : 1 : 2.7
+RU-UNK-294 : 1 : 1.0
+RU-UNK-295 : 1 : 1.0
+RU-UNK-296 : 1 : 1.0
+RU-UNK-297 : 1 : 46.099998
+RU-UNK-298 : 1 : 1.5
+RU-UNK-299 : 1 : 1.8
+RU-UNK-300 : 1 : 2.5
+RU-UNK-301 : 1 : 1.2
+RU-UNK-302 : 1 : 2.7
+RU-UNK-303 : 1 : 1.2
+RU-UNK-304 : 1 : 3.5999999
+RU-UNK-305 : 1 : 1.5
+RU-UNK-306 : 1 : 4.9000001
+RU-UNK-307 : 1 : 7.6999998
+RU-UNK-308 : 1 : 85.400002
+RU-UNK-309 : 1 : 25.799999
+RU-UNK-310 : 1 : 398.70001
+RU-UNK-311 : 1 : 1.0
+RU-UNK-312 : 1 : 1.0
+RU-UNK-313 : 1 : 6.0999999
+RU-UNK-314 : 1 : 3.7
+RU-UNK-315 : 1 : 53.599998
+RU-UNK-316 : 1 : 3.2
+RU-UNK-317 : 1 : 2.7
+RU-UNK-318 : 1 : 4.0
+RU-UNK-319 : 1 : 3.0
+RU-UNK-320 : 1 : 1.0
+RU-UNK-321 : 1 : 1.0
+RU-UNK-322 : 1 : 4.1999998
+RU-UNK-323 : 1 : 24.799999
+RU-UNK-324 : 1 : 24669.4
+RU-UNK-325 : 1 : 1.0
+RU-UNK-326 : 1 : 61.200001
+RU-UNK-327 : 1 : 1.5
+RU-UNK-328 : 1 : 66.900002
+RU-UNK-329 : 1 : 1.0
+RU-UNK-330 : 1 : 1.0
+RU-UNK-331 : 1 : 1.4
+RU-UNK-332 : 1 : 1.0
+RU-UNK-333 : 1 : 92.400002
+RU-UNK-334 : 1 : 4.1999998
+RU-UNK-335 : 1 : 1.3
+RU-UNK-336 : 1 : 1.0
+RU-UNK-337 : 1 : 1.0
+RU-UNK-338 : 1 : 1.3
+RU-UNK-339 : 1 : 1.0
+RU-UNK-340 : 1 : 1.2
+RU-UNK-341 : 1 : 1.0
+RU-UNK-342 : 1 : 1.0
+RU-UNK-343 : 1 : 1.0
+RU-UNK-344 : 1 : 1.0
+RU-UNK-345 : 1 : 1.0
+RU-UNK-346 : 1 : 1.0
+RU-UNK-347 : 1 : 9.1000004
+RU-UNK-348 : 1 : 4.1999998
+RU-UNK-349 : 1 : 8.3000002
+RU-UNK-350 : 1 : 1.0
+RU-UNK-351 : 1 : 1.0
+RU-UNK-352 : 1 : 9.5
+RU-UNK-353 : 1 : 8.6000004
+RU-UNK-354 : 1 : 101.5
+RU-UNK-355 : 1 : 7.6999998
+RU-UNK-356 : 1 : 30.6
+RU-UNK-357 : 1 : 58.299999
+RU-UNK-358 : 1 : 1.1
+RU-UNK-359 : 1 : 1.0
+RU-UNK-360 : 1 : 1.8
+RU-UNK-361 : 1 : 16.4
+RU-UNK-362 : 1 : 526.90002
+RU-UNK-363 : 1 : 4.9000001
+RU-UNK-364 : 1 : 13.8
+RU-UNK-365 : 1 : 2.9000001
+RU-UNK-366 : 1 : 1.0
+RU-UNK-367 : 1 : 1.0
+RU-UNK-368 : 1 : 1.0
+RU-UNK-369 : 1 : 1.0
+RU-UNK-370 : 1 : 2.4000001
+RU-UNK-371 : 1 : 1.0
+RU-UNK-372 : 1 : 2.3
+RU-UNK-373 : 1 : 1.1
+RU-UNK-374 : 1 : 1.0
+RU-UNK-375 : 1 : 5.6999998
+RU-UNK-376 : 1 : 1.7
+RU-UNK-377 : 1 : 6216.6001
+RU-UNK-378 : 1 : 1.0
+RU-UNK-379 : 1 : 1.0
+RU-UNK-380 : 1 : 1.4
+RU-UNK-381 : 1 : 7.3000002
+RU-UNK-382 : 1 : 48.200001
+RU-UNK-383 : 1 : 12.3
+RU-UNK-384 : 1 : 259.39999
+RU-UNK-385 : 1 : 1.0
+RU-UNK-386 : 1 : 7.4000001
+RU-UNK-387 : 1 : 1.0
+RU-UNK-388 : 1 : 1.0
+RU-UNK-389 : 1 : 3.5
+RU-UNK-390 : 1 : 1.0
+RU-UNK-391 : 1 : 5.5999999
+RU-UNK-392 : 1 : 11.2
+RU-UNK-393 : 1 : 4.9000001
+RU-UNK-394 : 1 : 253.39999
+RU-UNK-395 : 1 : 3.0
+RU-UNK-396 : 1 : 1.6
+RU-UNK-397 : 1 : 1.9
+RU-UNK-398 : 1 : 1.2
+RU-UNK-399 : 1 : 1.0
+RU-UNK-400 : 1 : 5.9000001
+RU-UNK-401 : 1 : 4.4000001
+RU-UNK-402 : 1 : 6.0
+RU-UNK-403 : 1 : 28.0
+RU-UNK-404 : 1 : 3.2
+RU-UNK-405 : 1 : 55.0
+RU-UNK-406 : 1 : 2.0999999
+RU-UNK-407 : 1 : 1.2
+RU-UNK-408 : 1 : 2.0
+RU-UNK-409 : 1 : 1.4
+RU-UNK-410 : 1 : 80.900002
+RU-UNK-411 : 1 : 8.0
+RU-UNK-412 : 1 : 2.0999999
+RU-UNK-413 : 1 : 1.0
+RU-UNK-414 : 1 : 5.0
+RU-UNK-415 : 1 : 73.699997
+RU-UNK-416 : 1 : 9.1999998
+RU-UNK-417 : 1 : 141.89999
+RU-UNK-418 : 1 : 19.299999
+RU-UNK-419 : 1 : 1.0
+RU-UNK-420 : 1 : 6.0999999
+RU-UNK-421 : 1 : 132.2
+RU-UNK-422 : 1 : 8.1999998
+RU-UNK-423 : 1 : 1894.9
+RU-UNK-424 : 1 : 1.0
+RU-UNK-425 : 1 : 1.0
+RU-UNK-426 : 1 : 1.0
+RU-UNK-427 : 1 : 78.300003
+RU-UNK-428 : 1 : 4.5999999
+RU-UNK-429 : 1 : 1.0
+RU-UNK-430 : 1 : 1.6
+RU-UNK-431 : 1 : 3.7
+RU-UNK-432 : 1 : 1.0
+RU-UNK-433 : 1 : 13.0
+RU-UNK-434 : 1 : 1.0
+RU-UNK-435 : 1 : 1.0
+RU-UNK-436 : 1 : 1.9
+RU-UNK-437 : 1 : 33.5
+RU-UNK-438 : 1 : 1.0
+RU-UNK-439 : 1 : 1.0
+RU-UNK-440 : 1 : 12.5
+RU-UNK-441 : 1 : 1.3
+RU-UNK-442 : 1 : 4.8000002
+RU-UNK-443 : 1 : 1.0
+RU-UNK-444 : 1 : 19.0
+RU-UNK-445 : 1 : 4.0999999
+RU-UNK-446 : 1 : 3.4000001
+RU-UNK-447 : 1 : 1.1
+RU-UNK-448 : 1 : 2.3
+RU-UNK-449 : 1 : 20.1
+RU-UNK-450 : 1 : 9.6999998
+RU-UNK-451 : 1 : 1.8
+RU-UNK-452 : 1 : 1.0
+RU-UNK-453 : 1 : 1.0
+RU-UNK-454 : 1 : 1.0
+RU-UNK-455 : 1 : 891.79999
+RU-UNK-456 : 1 : 305.39999
+RU-UNK-457 : 1 : 41.799999
+RU-UNK-458 : 1 : 1.1
+RU-UNK-459 : 1 : 1.0
+RU-UNK-460 : 1 : 1.0
+RU-UNK-461 : 1 : 1.9
+RU-UNK-462 : 1 : 90.0
+RU-UNK-463 : 1 : 109.1
+RU-UNK-464 : 1 : 1.0
+RU-UNK-465 : 1 : 1.0
+RU-UNK-466 : 1 : 1.0
+RU-UNK-467 : 1 : 1.0
+RU-UNK-468 : 1 : 13.9
+RU-UNK-469 : 1 : 1.0
+RU-UNK-470 : 1 : 1.0
+RU-UNK-471 : 1 : 1.0
+RU-UNK-472 : 1 : 1.6
+RU-UNK-473 : 1 : 1.1
+RU-UNK-474 : 1 : 2.0
+RU-UNK-475 : 1 : 17.4
+RU-UNK-476 : 1 : 3.7
+RU-UNK-477 : 1 : 3.9000001
+RU-UNK-478 : 1 : 1.0
+RU-UNK-479 : 1 : 1.8
+RU-UNK-480 : 1 : 61.200001
+RU-UNK-481 : 1 : 1.8
+RU-UNK-482 : 1 : 9.8000002
+RU-UNK-483 : 1 : 10.9
+RU-UNK-484 : 1 : 1.0
+RU-UNK-485 : 1 : 5.9000001
+RU-UNK-486 : 1 : 29.1
+RU-UNK-487 : 1 : 1.2
+RU-UNK-488 : 1 : 25.700001
+RU-UNK-489 : 1 : 2.0999999
+RU-UNK-490 : 1 : 1.0
+RU-UNK-491 : 1 : 2.0
+RU-UNK-492 : 1 : 66.699997
+RU-UNK-493 : 1 : 1.0
+RU-UNK-494 : 1 : 5287.5
+RU-UNK-495 : 1 : 1.0
+RU-UNK-496 : 1 : 10.9
+RU-UNK-497 : 1 : 1.9
+RU-UNK-498 : 1 : 1.0
+RU-UNK-499 : 1 : 1.0
+RU-UNK-500 : 1 : 1.6
+RU-UNK-501 : 1 : 1.0
+RU-UNK-502 : 1 : 1.1
+RU-UNK-503 : 1 : 8.8000002
+RU-UNK-504 : 1 : 1.0
+RU-UNK-505 : 1 : 1.8
+RU-UNK-506 : 1 : 3.0999999
+RU-UNK-507 : 1 : 8.0
+RU-UNK-508 : 1 : 1.4
+RU-UNK-509 : 1 : 7.1999998
+RU-UNK-510 : 1 : 8.6999998
+RU-UNK-511 : 1 : 2.2
+RU-UNK-512 : 1 : 1.0
+RU-UNK-513 : 1 : 1.2
+RU-UNK-514 : 1 : 10.5
+RU-UNK-515 : 1 : 1.6
+RU-UNK-516 : 1 : 1.0
+RU-UNK-517 : 1 : 4.5
+RU-UNK-518 : 1 : 1.0
+RU-UNK-519 : 1 : 6.9000001
+RU-UNK-520 : 1 : 1.1
+RU-UNK-521 : 1 : 1.9
+RU-UNK-522 : 1 : 1.2
+RU-UNK-523 : 1 : 3.7
+RU-UNK-524 : 1 : 1.5
+RU-UNK-525 : 1 : 2.0999999
+RU-UNK-526 : 1 : 21.299999
+RU-UNK-527 : 1 : 7.4000001
+RU-UNK-528 : 1 : 1.1
+RU-UNK-529 : 1 : 1.0
+RU-UNK-530 : 1 : 1.2
+RU-UNK-531 : 1 : 1.0
+RU-UNK-532 : 1 : 2.7
+RU-UNK-533 : 1 : 2.2
+RU-UNK-534 : 1 : 1.1
+RU-UNK-535 : 1 : 2.5
+RU-UNK-536 : 1 : 1.1
+RU-UNK-537 : 1 : 1.0
+RU-UNK-538 : 1 : 7.0
+RU-UNK-539 : 1 : 4.3000002
+RU-UNK-540 : 1 : 32.599998
+RU-UNK-541 : 1 : 1.0
+RU-UNK-542 : 1 : 142.0
+RU-UNK-543 : 1 : 24.6
+RU-UNK-544 : 1 : 47.0
+RU-UNK-545 : 1 : 7.0
+RU-UNK-546 : 1 : 1.0
+RU-UNK-547 : 1 : 2.0999999
+RU-UNK-548 : 1 : 1.9
+RU-UNK-549 : 1 : 1.2
+RU-UNK-550 : 1 : 1986.2
+RU-UNK-551 : 1 : 5.5999999
+RU-UNK-552 : 1 : 2.5
+RU-UNK-553 : 1 : 1.1
+RU-UNK-554 : 1 : 1.3
+RU-UNK-555 : 1 : 1.3
+RU-UNK-556 : 1 : 4.5
+RU-UNK-557 : 1 : 1.1
+RU-UNK-558 : 1 : 18.200001
+RU-UNK-559 : 1 : 1.0
+RU-UNK-560 : 1 : 1.7
+RU-UNK-561 : 1 : 6.9000001
+RU-UNK-562 : 1 : 2.5
+RU-UNK-563 : 1 : 32523.5
+RU-UNK-564 : 1 : 13.0
+RU-UNK-565 : 1 : 3.0
+RU-UNK-566 : 1 : 1.0
+RU-UNK-567 : 1 : 1.1
+RU-UNK-568 : 1 : 1.0
+RU-UNK-569 : 1 : 4.1999998
+RU-UNK-570 : 1 : 1.0
+RU-UNK-571 : 1 : 2.0
+RU-UNK-572 : 1 : 2.5999999
+RU-UNK-573 : 1 : 3.4000001
+RU-UNK-574 : 1 : 1.5
+RU-UNK-575 : 1 : 2.5
+RU-UNK-576 : 1 : 18.200001
+RU-UNK-577 : 1 : 1.0
+RU-UNK-578 : 1 : 6.6999998
+RU-UNK-579 : 1 : 2.0999999
+RU-UNK-580 : 1 : 9.0
+RU-UNK-581 : 1 : 3.2
+RU-UNK-582 : 1 : 2.0
+RU-UNK-583 : 1 : 21.799999
+RU-UNK-584 : 1 : 1.0
+RU-UNK-585 : 1 : 12.6
+RU-UNK-586 : 1 : 3.0
+RU-UNK-587 : 1 : 101.0
+RU-UNK-588 : 1 : 1.0
+RU-UNK-589 : 1 : 1.6
+RU-UNK-590 : 1 : 6.4000001
+RU-UNK-591 : 1 : 1.0
+RU-UNK-592 : 1 : 13.3
+RU-UNK-593 : 1 : 37.299999
+RU-UNK-594 : 1 : 9.5
+RU-UNK-595 : 1 : 2.0999999
+RU-UNK-596 : 1 : 1.0
+RU-UNK-597 : 1 : 4.0999999
+RU-UNK-598 : 1 : 1.0
+RU-UNK-599 : 1 : 3.4000001
+RU-UNK-600 : 1 : 1.0
+RU-UNK-601 : 1 : 1.0
+RU-UNK-602 : 1 : 1.0
+RU-UNK-603 : 1 : 3.3
+RU-UNK-604 : 1 : 1.0
+RU-UNK-605 : 1 : 1.0
+RU-UNK-606 : 1 : 4.1999998
+RU-UNK-607 : 1 : 1.0
+RU-UNK-608 : 1 : 1.0
+RU-UNK-609 : 1 : 73.699997
+RU-UNK-610 : 1 : 6.8000002
+RU-UNK-611 : 1 : 8.6000004
+RU-UNK-612 : 1 : 1.2
+RU-UNK-613 : 1 : 411.89999
+RU-UNK-614 : 1 : 15.2
+RU-UNK-615 : 1 : 1.8
+RU-UNK-616 : 1 : 2.3
+RU-UNK-617 : 1 : 22.700001
+RU-UNK-618 : 1 : 822.70001
+RU-UNK-619 : 1 : 10.2
+RU-UNK-620 : 1 : 6.5
+RU-UNK-621 : 1 : 5.4000001
+RU-UNK-622 : 1 : 15.2
+RU-UNK-623 : 1 : 57.099998
+RU-UNK-624 : 1 : 1.2
+RU-UNK-625 : 1 : 3.8
+RU-UNK-626 : 1 : 11.1
+RU-UNK-627 : 1 : 1.0
+RU-UNK-628 : 1 : 1.0
+RU-UNK-629 : 1 : 1.2
+RU-UNK-630 : 1 : 1.0
+RU-UNK-631 : 1 : 1.0
+RU-UNK-632 : 1 : 17.1
+RU-UNK-633 : 1 : 2.4000001
+RU-UNK-634 : 1 : 1.0
+RU-UNK-635 : 1 : 7.5
+RU-UNK-636 : 1 : 1.3
+RU-UNK-637 : 1 : 1.0
+RU-UNK-638 : 1 : 1.0
+RU-UNK-639 : 1 : 1.7
+RU-UNK-640 : 1 : 2.0999999
+RU-UNK-641 : 1 : 1.0
+RU-UNK-642 : 1 : 3.4000001
+RU-UNK-643 : 1 : 1.9
+RU-UNK-644 : 1 : 5.0999999
+RU-UNK-645 : 1 : 3.5999999
+RU-UNK-646 : 1 : 6.8000002
+RU-UNK-647 : 1 : 1.6
+RU-UNK-648 : 1 : 8.8999996
+RU-UNK-649 : 1 : 2.9000001
+RU-UNK-650 : 1 : 1.0
+RU-UNK-651 : 1 : 9.1000004
+RU-UNK-652 : 1 : 1.0
+RU-UNK-653 : 1 : 1.0
+RU-UNK-654 : 1 : 1.0
+RU-UNK-655 : 1 : 8.8999996
+RU-UNK-656 : 1 : 1.0
+RU-UNK-657 : 1 : 1.0
+RU-UNK-658 : 1 : 3.9000001
+RU-UNK-659 : 1 : 1.0
+RU-UNK-660 : 1 : 2.5
+RU-UNK-661 : 1 : 1.0
+RU-UNK-662 : 1 : 3.0
+RU-UNK-663 : 1 : 1.0
+RU-UNK-664 : 1 : 2.0999999
+RU-UNK-665 : 1 : 7.5
+RU-UNK-666 : 1 : 2.8
+RU-UNK-667 : 1 : 27.6
+RU-UNK-668 : 1 : 25.0
+RU-UNK-669 : 1 : 1.0
+RU-UNK-670 : 1 : 1.0
+RU-UNK-671 : 1 : 1.0
+RU-UNK-672 : 1 : 1.0
+RU-UNK-673 : 1 : 1072.5
+RU-UNK-674 : 1 : 1.4
+RU-UNK-675 : 1 : 2.5999999
+RU-UNK-676 : 1 : 3.4000001
+RU-UNK-677 : 1 : 2.0
+RU-UNK-678 : 1 : 4.4000001
+RU-UNK-679 : 1 : 2.5
+RU-UNK-680 : 1 : 5.4000001
+RU-UNK-681 : 1 : 3.5
+RU-UNK-682 : 1 : 1.5
+RU-UNK-683 : 1 : 29.9
+RU-UNK-684 : 1 : 2.9000001
+RU-UNK-685 : 1 : 4.3000002
+RU-UNK-686 : 1 : 1.2
+RU-UNK-687 : 1 : 1.0
+RU-UNK-688 : 1 : 2.5999999
+RU-UNK-689 : 1 : 1.8
+RU-UNK-690 : 1 : 1.9
+RU-UNK-691 : 1 : 1.0
+RU-UNK-692 : 1 : 1.0
+RU-UNK-693 : 1 : 11.2
+RU-UNK-694 : 1 : 3.4000001
+RU-UNK-695 : 1 : 24.6
+RU-UNK-696 : 1 : 1.1
+RU-UNK-697 : 1 : 2.5
+RU-UNK-698 : 1 : 1.1
+RU-UNK-699 : 1 : 4.5
+RU-UNK-700 : 1 : 1.0
+RU-UNK-701 : 1 : 1.6
+RU-UNK-702 : 1 : 1.9
+RU-UNK-703 : 1 : 4.5
+RU-UNK-704 : 1 : 10.5
+RU-UNK-705 : 1 : 1.1
+RU-UNK-706 : 1 : 4.3000002
+RU-UNK-707 : 1 : 1.0
+RU-UNK-708 : 1 : 2.0
+RU-UNK-709 : 1 : 2.7
+RU-UNK-710 : 1 : 1.0
+RU-UNK-711 : 1 : 1.0
+RU-UNK-712 : 1 : 2.4000001
+RU-UNK-713 : 1 : 1.8
+RU-UNK-714 : 1 : 1.0
+RU-UNK-715 : 1 : 1.0
+RU-UNK-716 : 1 : 1.5
+RU-UNK-717 : 1 : 2.0
+RU-UNK-718 : 1 : 3.0
+RU-UNK-719 : 1 : 18.1
+RU-UNK-720 : 1 : 28.799999
+RU-UNK-721 : 1 : 151.60001
+RU-UNK-722 : 1 : 151.60001
+RU-UNK-723 : 1 : 1.0
+RU-UNK-724 : 1 : 1041.7
+RU-UNK-725 : 1 : 1041.7
+RU-UNK-726 : 1 : 1041.7
+RU-UNK-727 : 1 : 1.0
+RU-UNK-728 : 1 : 11.5
+RU-UNK-729 : 1 : 6.9000001
+RU-UNK-730 : 1 : 2.3
+RU-UNK-731 : 1 : 6.0999999
+RU-UNK-732 : 1 : 31.1
+RU-UNK-733 : 1 : 1.8
+RU-UNK-734 : 1 : 1.1
+RU-UNK-735 : 1 : 56.900002
+RU-UNK-736 : 1 : 2.0999999
+RU-UNK-737 : 1 : 1.0
+RU-UNK-738 : 1 : 1.9
+RU-UNK-739 : 1 : 7.8000002
+RU-UNK-740 : 1 : 4.0999999
+RU-UNK-741 : 1 : 4.8000002
+RU-UNK-742 : 1 : 6.1999998
+RU-UNK-743 : 1 : 4.8000002
+RU-UNK-744 : 1 : 5.5999999
+RU-UNK-745 : 1 : 1.7
+RU-UNK-746 : 1 : 1.0
+RU-UNK-747 : 1 : 1.0
+RU-UNK-748 : 1 : 420.10001
+RU-UNK-749 : 1 : 7705.5
+RU-UNK-750 : 1 : 7705.5
+RU-UNK-751 : 1 : 9.8999996
+RU-UNK-752 : 1 : 1.0
+RU-UNK-753 : 1 : 8.8999996
+RU-UNK-754 : 1 : 2.9000001
+RU-UNK-755 : 1 : 1.1
+RU-UNK-756 : 1 : 13.8
+RU-UNK-757 : 1 : 3.2
+RU-UNK-758 : 1 : 1.3
+RU-UNK-759 : 1 : 3.3
+RU-UNK-760 : 1 : 1.0
+RU-UNK-761 : 1 : 1.0
+RU-UNK-762 : 1 : 1.0
+RU-UNK-763 : 1 : 1.6
+RU-UNK-764 : 1 : 1.0
+RU-UNK-765 : 1 : 1.0
+RU-UNK-766 : 1 : 10.5
+RU-UNK-767 : 1 : 4.0999999
+RU-UNK-768 : 1 : 2.4000001
+RU-UNK-769 : 1 : 29.799999
+RU-UNK-770 : 1 : 1.0
+RU-UNK-771 : 1 : 2.7
+RU-UNK-772 : 1 : 1.0
+RU-UNK-773 : 1 : 2.4000001
+RU-UNK-774 : 1 : 2.0
+RU-UNK-775 : 1 : 15.6
+RU-UNK-776 : 1 : 5.0
+RU-UNK-777 : 1 : 8.5
+RU-UNK-778 : 1 : 1.2
+RU-UNK-779 : 1 : 1.0
+RU-UNK-780 : 1 : 1.0
+RU-UNK-781 : 1 : 1.0
+RU-UNK-782 : 1 : 2.0
+RU-UNK-783 : 1 : 1.0
+RU-UNK-784 : 1 : 2.5
+RU-UNK-785 : 1 : 2.9000001
+RU-UNK-786 : 1 : 1.2
+RU-UNK-787 : 1 : 12.3
+RU-UNK-788 : 1 : 18.9
+RU-UNK-789 : 1 : 1.2
+RU-UNK-790 : 1 : 14.0
+RU-UNK-791 : 1 : 4.0
+RU-UNK-792 : 1 : 24.9
+RU-UNK-793 : 1 : 734.59998
+RU-UNK-794 : 1 : 3.2
+RU-UNK-795 : 1 : 1.0
+RU-UNK-796 : 1 : 1.8
+RU-UNK-797 : 1 : 1.8
+RU-UNK-798 : 1 : 1.0
+RU-UNK-799 : 1 : 22.0
+RU-UNK-800 : 1 : 1.5
+RU-UNK-801 : 1 : 1.4
+RU-UNK-802 : 1 : 2.3
+RU-UNK-803 : 1 : 6.6999998
+RU-UNK-804 : 1 : 1.8
+RU-UNK-805 : 1 : 1.5
+RU-UNK-806 : 1 : 10.8
+RU-UNK-807 : 1 : 1.0
+RU-UNK-808 : 1 : 1.4
+RU-UNK-809 : 1 : 5.4000001
+RU-UNK-810 : 1 : 27.1
+RU-UNK-811 : 1 : 2.4000001
+RU-UNK-812 : 1 : 52.900002
+RU-UNK-813 : 1 : 1.4
+RU-UNK-814 : 1 : 23.4
+RU-UNK-815 : 1 : 21.0
+RU-UNK-816 : 1 : 1.7
+RU-UNK-817 : 1 : 18.1
+RU-UNK-818 : 1 : 64.0
+RU-UNK-819 : 1 : 15.9
+RU-UNK-820 : 1 : 2.5
+RU-UNK-821 : 1 : 54.799999
+RU-UNK-822 : 1 : 3.7
+RU-UNK-823 : 1 : 49.0
+RU-UNK-824 : 1 : 21.200001
+RU-UNK-825 : 1 : 350.79999
+RU-UNK-826 : 1 : 18.799999
+RU-UNK-827 : 1 : 26.6
+RU-UNK-828 : 1 : 12.5
+RU-UNK-829 : 1 : 2.8
+RU-UNK-830 : 1 : 75.699997
+RU-UNK-831 : 1 : 1.0
+RU-UNK-832 : 1 : 5.5999999
+RU-UNK-833 : 1 : 4.0
+RU-UNK-834 : 1 : 6.8000002
+RU-UNK-835 : 1 : 17.4
+RU-UNK-836 : 1 : 1.0
+RU-UNK-837 : 1 : 32.400002
+RU-UNK-838 : 1 : 1.3
+RU-UNK-839 : 1 : 88.5
+RU-UNK-840 : 1 : 437.39999
+RU-UNK-841 : 1 : 70.300003
+RU-UNK-842 : 1 : 2.7
+RU-UNK-843 : 1 : 3.2
+RU-UNK-844 : 1 : 1.2
+RU-UNK-845 : 1 : 91.400002
+RU-UNK-846 : 1 : 2.0
+RU-UNK-847 : 1 : 2.9000001
+RU-UNK-848 : 1 : 38.700001
+RU-UNK-849 : 1 : 1.7
+RU-UNK-850 : 1 : 7.9000001
+RU-UNK-851 : 1 : 26.5
+RU-UNK-852 : 1 : 7.4000001
+RU-UNK-853 : 1 : 13.6
+RU-UNK-854 : 1 : 16.9
+RU-UNK-855 : 1 : 3.0
+RU-UNK-856 : 1 : 1.0
+RU-UNK-857 : 1 : 1.0
+RU-UNK-858 : 1 : 4.5
+RU-UNK-859 : 1 : 2.0999999
+RU-UNK-860 : 1 : 1.0
+RU-UNK-861 : 1 : 1.0
+RU-UNK-862 : 1 : 496.70001
+RU-UNK-863 : 1 : 62.799999
+RU-UNK-864 : 1 : 1.0
+RU-UNK-865 : 1 : 1.1
+RU-UNK-866 : 1 : 21.5
+RU-UNK-867 : 1 : 2.5
+RU-UNK-868 : 1 : 1.0
+RU-UNK-869 : 1 : 24.200001
+RU-UNK-870 : 1 : 1.3
+RU-UNK-871 : 1 : 45.299999
+RU-UNK-872 : 1 : 5.8000002
+RU-UNK-873 : 1 : 3.0999999
+RU-UNK-874 : 1 : 6.0
+RU-UNK-875 : 1 : 4.5
+RU-UNK-876 : 1 : 96.800003
+RU-UNK-877 : 1 : 39.900002
+RU-UNK-878 : 1 : 6.0
+RU-UNK-879 : 1 : 1.0
+RU-UNK-880 : 1 : 2.9000001
+RU-UNK-881 : 1 : 1.1
+RU-UNK-882 : 1 : 6.0
+RU-UNK-883 : 1 : 1.9
+RU-UNK-884 : 1 : 27.200001
+RU-UNK-885 : 1 : 1.1
+RU-UNK-886 : 1 : 3238.3
+RU-UNK-887 : 1 : 2.0999999
+RU-UNK-888 : 1 : 1.4
+RU-UNK-889 : 1 : 5.5999999
+RU-UNK-890 : 1 : 33.599998
+RU-UNK-891 : 1 : 3.5
+RU-UNK-892 : 1 : 56.0
+RU-UNK-893 : 1 : 1.0
+RU-UNK-894 : 1 : 1.6
+RU-UNK-895 : 1 : 2.5999999
+RU-UNK-896 : 1 : 1.0
+RU-UNK-897 : 1 : 1.8
+RU-UNK-898 : 1 : 98.5
+RU-UNK-899 : 1 : 1.0
+RU-UNK-900 : 1 : 6.0999999
+RU-UNK-901 : 1 : 1.3
+RU-UNK-902 : 1 : 71.599998
+RU-UNK-903 : 1 : 6.1999998
+RU-UNK-904 : 1 : 18.299999
+RU-UNK-905 : 1 : 13.5
+RU-UNK-906 : 1 : 1.0
+RU-UNK-907 : 1 : 1.0
+RU-UNK-908 : 1 : 1.0
+RU-UNK-909 : 1 : 1.0
+RU-UNK-910 : 1 : 1.4
+RU-UNK-911 : 1 : 1.0
+RU-UNK-912 : 1 : 138.39999
+RU-UNK-913 : 1 : 55.5
+RU-UNK-914 : 1 : 2049.8
+RU-UNK-915 : 1 : 2.8
+RU-UNK-916 : 1 : 1.0
+RU-UNK-917 : 1 : 2.5
+RU-UNK-918 : 1 : 3.0999999
+RU-UNK-919 : 1 : 14.3
+RU-UNK-920 : 1 : 4.0
+RU-UNK-921 : 1 : 5.3000002
+RU-UNK-922 : 1 : 130.10001
+RU-UNK-923 : 1 : 2.2
+RU-UNK-924 : 1 : 1.9
+RU-UNK-925 : 1 : 1.0
+RU-UNK-926 : 1 : 33.700001
+RU-UNK-927 : 1 : 3.9000001
+RU-UNK-928 : 1 : 1.8
+RU-UNK-929 : 1 : 2.4000001
+RU-UNK-930 : 1 : 9.1000004
+RU-UNK-931 : 1 : 8.6000004
+RU-UNK-932 : 1 : 2.0999999
+RU-UNK-933 : 1 : 1.0
+RU-UNK-934 : 1 : 1.0
+RU-UNK-935 : 1 : 1.0
+RU-UNK-936 : 1 : 4.1999998
+RU-UNK-937 : 1 : 8.3000002
+RU-UNK-938 : 1 : 5.0999999
+RU-UNK-939 : 1 : 1.3
+RU-UNK-940 : 1 : 2.2
+RU-UNK-941 : 1 : 1.2
+RU-UNK-942 : 1 : 1.0
+RU-UNK-943 : 1 : 16.5
+RU-UNK-944 : 1 : 17.1
+RU-UNK-945 : 1 : 2.3
+RU-UNK-946 : 1 : 36.5
+RU-UNK-947 : 1 : 6.1999998
+RU-UNK-948 : 1 : 5.5999999
+RU-UNK-949 : 1 : 1.0
+RU-UNK-950 : 1 : 5.5
+RU-UNK-951 : 1 : 1.4
+RU-UNK-952 : 1 : 1.0
+RU-UNK-953 : 1 : 2.4000001
+RU-UNK-954 : 1 : 149.3
+RU-UNK-955 : 1 : 114.7
+RU-UNK-956 : 1 : 3.2
+RU-UNK-957 : 1 : 2.4000001
+RU-UNK-958 : 1 : 3.5999999
+RU-UNK-959 : 1 : 1.0
+RU-UNK-960 : 1 : 4.0999999
+RU-UNK-961 : 1 : 4989.2998
+RU-UNK-962 : 1 : 3.8
+RU-UNK-963 : 1 : 6.0
+RU-UNK-964 : 1 : 1.0
+RU-UNK-965 : 1 : 1.0
+RU-UNK-966 : 1 : 1.0
+RU-UNK-967 : 1 : 9.3999996
+RU-UNK-968 : 1 : 68.699997
+RU-UNK-969 : 1 : 14.1
+RU-UNK-970 : 1 : 1.5
+RU-UNK-971 : 1 : 6.0
+RU-UNK-972 : 1 : 1.7
+RU-UNK-973 : 1 : 107.8
+RU-UNK-974 : 1 : 1.0
+RU-UNK-975 : 1 : 85.900002
+RU-UNK-976 : 1 : 3.3
+RU-UNK-977 : 1 : 2.4000001
+RU-UNK-978 : 1 : 2.0
+RU-UNK-979 : 1 : 2.2
+RU-UNK-980 : 1 : 6.5
+RU-UNK-981 : 1 : 1.0
+RU-UNK-982 : 1 : 10.9
+RU-UNK-983 : 1 : 3.5999999
+RU-UNK-984 : 1 : 1.0
+RU-UNK-985 : 1 : 1.4
+RU-UNK-986 : 1 : 1.4
+RU-UNK-987 : 1 : 16.6
+RU-UNK-988 : 1 : 6.9000001
+RU-UNK-989 : 1 : 1.7
+RU-UNK-990 : 1 : 4.5
+RU-UNK-991 : 1 : 1.0
+RU-UNK-992 : 1 : 1.0
+RU-UNK-993 : 1 : 9.5
+RU-UNK-994 : 1 : 1.0
+RU-UNK-995 : 1 : 20.5
+RU-UNK-996 : 1 : 2.0999999
+RU-UNK-997 : 1 : 5.3000002
+RU-UNK-998 : 1 : 9.8999996
+RU-UNK-999 : 1 : 1.0
+RU-UNK-1000 : 1 : 1.3
+RU-UNK-1001 : 1 : 3.8
+RU-UNK-1002 : 1 : 16.5
+RU-UNK-1003 : 1 : 3.0
+RU-UNK-1004 : 1 : 34.099998
+RU-UNK-1005 : 1 : 2.0999999
+RU-UNK-1006 : 1 : 1.4
+RU-UNK-1007 : 1 : 1.0
+RU-UNK-1008 : 1 : 1.7
+RU-UNK-1009 : 1 : 2.7
+RU-UNK-1010 : 1 : 1.0
+RU-UNK-1011 : 1 : 1.9
+RU-UNK-1012 : 1 : 1.0
+RU-UNK-1013 : 1 : 1.1
+RU-UNK-1014 : 1 : 1.0
+RU-UNK-1015 : 1 : 1.0
+RU-UNK-1016 : 1 : 9.8000002
+RU-UNK-1017 : 1 : 1.0
+RU-UNK-1018 : 1 : 3.9000001
+RU-UNK-1019 : 1 : 3.4000001
+RU-UNK-1020 : 1 : 2.4000001
+RU-UNK-1021 : 1 : 1.7
+RU-UNK-1022 : 1 : 108.1
+RU-UNK-1023 : 1 : 2.2
+RU-UNK-1024 : 1 : 1.8
+RU-UNK-1025 : 1 : 6.0
+RU-UNK-1026 : 1 : 6.1999998
+RU-UNK-1027 : 1 : 40.099998
+RU-UNK-1028 : 1 : 1.0
+RU-UNK-1029 : 1 : 1.0
+RU-UNK-1030 : 1 : 8.3999996
+RU-UNK-1031 : 1 : 2.8
+RU-UNK-1032 : 1 : 34.400002
+RU-UNK-1033 : 1 : 1.0
+RU-UNK-1034 : 1 : 1.6
+RU-UNK-1035 : 1 : 1.9
+RU-UNK-1036 : 1 : 4.9000001
+RU-UNK-1037 : 1 : 2.4000001
+RU-UNK-1038 : 1 : 1.0
+RU-UNK-1039 : 1 : 1.0
+RU-UNK-1040 : 1 : 1.0
+RU-UNK-1041 : 1 : 1.4
+RU-UNK-1042 : 1 : 26.4
+RU-UNK-1043 : 1 : 1.0
+RU-UNK-1044 : 1 : 2.8
+RU-UNK-1045 : 1 : 1.3
+RU-UNK-1046 : 1 : 1.3
+RU-UNK-1047 : 1 : 1.0
+RU-UNK-1048 : 1 : 1.0
+RU-UNK-1049 : 1 : 1.6
+RU-UNK-1050 : 1 : 1.0
+RU-UNK-1051 : 1 : 1.0
+RU-UNK-1052 : 1 : 8.3999996
+RU-UNK-1053 : 1 : 2.3
+RU-UNK-1054 : 1 : 6.9000001
+RU-UNK-1055 : 1 : 3.9000001
+RU-UNK-1056 : 1 : 4.4000001
+RU-UNK-1057 : 1 : 10.8
+RU-UNK-1058 : 1 : 3.7
+RU-UNK-1059 : 1 : 32.299999
+RU-UNK-1060 : 1 : 10.5
+RU-UNK-1061 : 1 : 14.7
+RU-UNK-1062 : 1 : 4.3000002
+RU-UNK-1063 : 1 : 1.6
+RU-UNK-1064 : 1 : 1.0
+RU-UNK-1065 : 1 : 4.9000001
+RU-UNK-1066 : 1 : 4.4000001
+RU-UNK-1067 : 1 : 2.8
+RU-UNK-1068 : 1 : 1.0
+RU-UNK-1069 : 1 : 1.0
+RU-UNK-1070 : 1 : 19.1
+RU-UNK-1071 : 1 : 8.1999998
+RU-UNK-1072 : 1 : 5.1999998
+RU-UNK-1073 : 1 : 2.0
+RU-UNK-1074 : 1 : 1.2
+RU-UNK-1075 : 1 : 1.4
+RU-UNK-1076 : 1 : 4.6999998
+RU-UNK-1077 : 1 : 1.2
+RU-UNK-1078 : 1 : 1.0
+RU-UNK-1079 : 1 : 1.5
+RU-UNK-1080 : 1 : 1287.6
+RU-UNK-1081 : 1 : 1.2
+RU-UNK-1082 : 1 : 6.5
+RU-UNK-1083 : 1 : 824.90002
+RU-UNK-1084 : 1 : 77.099998
+RU-UNK-1085 : 1 : 1.0
+RU-UNK-1086 : 1 : 1.0
+RU-UNK-1087 : 1 : 1.0
+RU-UNK-1088 : 1 : 4.3000002
+RU-UNK-1089 : 1 : 8.6000004
+RU-UNK-1090 : 1 : 68.300003
+RU-UNK-1091 : 1 : 1.4
+RU-UNK-1092 : 1 : 80.400002
+RU-UNK-1093 : 1 : 4.0999999
+RU-UNK-1094 : 1 : 36.900002
+RU-UNK-1095 : 1 : 1.8
+RU-UNK-1096 : 1 : 216.89999
+RU-UNK-1097 : 1 : 207.60001
+RU-UNK-1098 : 1 : 101.2
+RU-UNK-1099 : 1 : 2.3
+RU-UNK-1100 : 1 : 1.5
+RU-UNK-1101 : 1 : 5.0
+RU-UNK-1102 : 1 : 3.8
+RU-UNK-1103 : 1 : 1.8
+RU-UNK-1104 : 1 : 1.0
+RU-UNK-1105 : 1 : 1.0
+RU-UNK-1106 : 1 : 35.900002
+RU-UNK-1107 : 1 : 405.10001
+RU-UNK-1108 : 1 : 72.199997
+RU-UNK-1109 : 1 : 1.8
+RU-UNK-1110 : 1 : 1.0
+RU-UNK-1111 : 1 : 3.8
+RU-UNK-1112 : 1 : 98.300003
+RU-UNK-1113 : 1 : 6.5
+RU-UNK-1114 : 1 : 1.7
+RU-UNK-1115 : 1 : 7.6999998
+RU-UNK-1116 : 1 : 1.0
+RU-UNK-1117 : 1 : 5.5
+RU-UNK-1118 : 1 : 1.0
+RU-UNK-1119 : 1 : 4.3000002
+RU-UNK-1120 : 1 : 1.3
+RU-UNK-1121 : 1 : 1.0
+RU-UNK-1122 : 1 : 1.2
+RU-UNK-1123 : 1 : 1.3
+RU-UNK-1124 : 1 : 1.0
+RU-UNK-1125 : 1 : 11.0
+RU-UNK-1126 : 1 : 1.0
+RU-UNK-1127 : 1 : 1.0
+RU-UNK-1128 : 1 : 2.4000001
+RU-UNK-1129 : 1 : 1.3
+RU-UNK-1130 : 1 : 1.0
+RU-UNK-1131 : 1 : 1.0
+RU-UNK-1132 : 1 : 5.0
+RU-UNK-1133 : 1 : 2.0999999
+RU-UNK-1134 : 1 : 4.6999998
+RU-UNK-1135 : 1 : 4.9000001
+RU-UNK-1136 : 1 : 4.9000001
+RU-UNK-1137 : 1 : 13.4
+RU-UNK-1138 : 1 : 1.0
+RU-UNK-1139 : 1 : 2.5
+RU-UNK-1140 : 1 : 2.4000001
+RU-UNK-1141 : 1 : 1.0
+RU-UNK-1142 : 1 : 16.6
+RU-UNK-1143 : 1 : 1.4
+RU-UNK-1144 : 1 : 1.0
+RU-UNK-1145 : 1 : 29.6
+RU-UNK-1146 : 1 : 74.400002
+RU-UNK-1147 : 1 : 16.1
+RU-UNK-1148 : 1 : 1.0
+RU-UNK-1149 : 1 : 1.0
+RU-UNK-1150 : 1 : 17.6
+RU-UNK-1151 : 1 : 2.5999999
+RU-UNK-1152 : 1 : 22.1
+RU-UNK-1153 : 1 : 1.0
+RU-UNK-1154 : 1 : 2.9000001
+RU-UNK-1155 : 1 : 2.8
+RU-UNK-1156 : 1 : 1.2
+RU-UNK-1157 : 1 : 1.0
+RU-UNK-1158 : 1 : 17.200001
+RU-UNK-1159 : 1 : 1.2
+RU-UNK-1160 : 1 : 1.0
+RU-UNK-1161 : 1 : 1.9
+RU-UNK-1162 : 1 : 1.0
+RU-UNK-1163 : 1 : 29.1
+RU-UNK-1164 : 1 : 1.2
+RU-UNK-1165 : 1 : 1.0
+RU-UNK-1166 : 1 : 1.0
+RU-UNK-1167 : 1 : 1.0
+RU-UNK-1168 : 1 : 1.5
+RU-UNK-1169 : 1 : 5.3000002
+RU-UNK-1170 : 1 : 1.3
+RU-UNK-1171 : 1 : 4.0
+RU-UNK-1172 : 1 : 253.0
+RU-UNK-1173 : 1 : 1.0
+RU-UNK-1174 : 1 : 1.7
+RU-UNK-1175 : 1 : 8.3999996
+RU-UNK-1176 : 1 : 1.1
+RU-UNK-1177 : 1 : 88.099998
+RU-UNK-1178 : 1 : 15.7
+RU-UNK-1179 : 1 : 3.0
+RU-UNK-1180 : 1 : 29.200001
+RU-UNK-1181 : 1 : 1.0
+RU-UNK-1182 : 1 : 1.0
+RU-UNK-1183 : 1 : 1.9
+RU-UNK-1184 : 1 : 3.4000001
+RU-UNK-1185 : 1 : 49.799999
+RU-UNK-1186 : 1 : 1.3
+RU-UNK-1187 : 1 : 8.6000004
+RU-UNK-1188 : 1 : 14.8
+RU-UNK-1189 : 1 : 1.0
+RU-UNK-1190 : 1 : 61.400002
+RU-UNK-1191 : 1 : 1.0
+RU-UNK-1192 : 1 : 3.8
+RU-UNK-1193 : 1 : 63.5
+RU-UNK-1194 : 1 : 3.5
+RU-UNK-1195 : 1 : 32.599998
+RU-UNK-1196 : 1 : 1.0
+RU-UNK-1197 : 1 : 1.2
+RU-UNK-1198 : 1 : 1.0
+RU-UNK-1199 : 1 : 1.6
+RU-UNK-1200 : 1 : 1.0
+RU-UNK-1201 : 1 : 1.0
+RU-UNK-1202 : 1 : 1.0
+RU-UNK-1203 : 1 : 3.5
+RU-UNK-1204 : 1 : 2.0999999
+RU-UNK-1205 : 1 : 1.0
+RU-UNK-1206 : 1 : 11.9
+RU-UNK-1207 : 1 : 3.3
+RU-UNK-1208 : 1 : 33.200001
+RU-UNK-1209 : 1 : 1.0
+RU-UNK-1210 : 1 : 1.3
+RU-UNK-1211 : 1 : 1.0
+RU-UNK-1212 : 1 : 5.1999998
+RU-UNK-1213 : 1 : 1.0
+RU-UNK-1214 : 1 : 1.1
+RU-UNK-1215 : 1 : 1.0
+RU-UNK-1216 : 1 : 11.9
+RU-UNK-1217 : 1 : 1.0
+RU-UNK-1218 : 1 : 1.0
+RU-UNK-1219 : 1 : 1.0
+RU-UNK-1220 : 1 : 3.5
+RU-UNK-1221 : 1 : 1.0
+RU-UNK-1222 : 1 : 10216.5
+RU-UNK-1223 : 1 : 1.7
+RU-UNK-1224 : 1 : 17845.4
+RU-UNK-1225 : 1 : 13.1
+RU-UNK-1226 : 1 : 1.0
+RU-UNK-1227 : 1 : 2.0
+RU-UNK-1228 : 1 : 2.0
+RU-UNK-1229 : 1 : 1.4
+RU-UNK-1230 : 1 : 2.0
+RU-UNK-1231 : 1 : 1.8
+RU-UNK-1232 : 1 : 630.09998
+RU-UNK-1233 : 1 : 4.4000001
+RU-UNK-1234 : 1 : 1.0
+RU-UNK-1235 : 1 : 1.0
+RU-UNK-1236 : 1 : 1.0
+RU-UNK-1237 : 1 : 1.0
+RU-UNK-1238 : 1 : 4.0
+RU-UNK-1239 : 1 : 1.0
+RU-UNK-1240 : 1 : 1.0
+RU-UNK-1241 : 1 : 2.0999999
+RU-UNK-1242 : 1 : 1.0
+RU-UNK-1243 : 1 : 2.5999999
+RU-UNK-1244 : 1 : 1.0
+RU-UNK-1245 : 1 : 1.0
+RU-UNK-1246 : 1 : 15.0
+RU-UNK-1247 : 1 : 2.5999999
+RU-UNK-1248 : 1 : 1.0
+RU-UNK-1249 : 1 : 1.0
+RU-UNK-1250 : 1 : 7.6999998
+RU-UNK-1251 : 1 : 1.0
+RU-UNK-1252 : 1 : 1.1
+RU-UNK-1253 : 1 : 1.2
+RU-UNK-1254 : 1 : 1.0
+RU-UNK-1255 : 1 : 17.1
+RU-UNK-1256 : 1 : 1.4
+RU-UNK-1257 : 1 : 1.2
+RU-UNK-1258 : 1 : 20.0
+RU-UNK-1259 : 1 : 47.799999
+RU-UNK-1260 : 1 : 22.9
+RU-UNK-1261 : 1 : 4.5
+RU-UNK-1262 : 1 : 2.2
+RU-UNK-1263 : 1 : 13.3
+RU-UNK-1264 : 1 : 15.5
+RU-UNK-1265 : 1 : 1.9
+RU-UNK-1266 : 1 : 1.0
+RU-UNK-1267 : 1 : 3.2
+RU-UNK-1268 : 1 : 6.5
+RU-UNK-1269 : 1 : 3.4000001
+RU-UNK-1270 : 1 : 1.9
+RU-UNK-1271 : 1 : 1.0
+RU-UNK-1272 : 1 : 1927.7
+RU-UNK-1273 : 1 : 7.4000001
+RU-UNK-1274 : 1 : 1.9
+RU-UNK-1275 : 1 : 255.2
+RU-UNK-1276 : 1 : 1.0
+RU-UNK-1277 : 1 : 1933.1
+RU-UNK-1278 : 1 : 37.099998
+RU-UNK-1279 : 1 : 1.2
+RU-UNK-1280 : 1 : 5534.2998
+RU-UNK-1281 : 1 : 121.7
+RU-UNK-1282 : 1 : 2214.6001
+RU-UNK-1283 : 1 : 2808.2
+RU-UNK-1284 : 1 : 1115.6
+RU-UNK-1285 : 1 : 1.0
+RU-UNK-1286 : 1 : 49.099998
+RU-UNK-1287 : 1 : 600.29999
+RU-UNK-1288 : 1 : 149.7
+RU-UNK-1289 : 1 : 1.4
+RU-UNK-1290 : 1 : 326.29999
+RU-UNK-1291 : 1 : 40.299999
+RU-UNK-1292 : 1 : 15143.6
+RU-UNK-1293 : 1 : 1.0
+RU-UNK-1294 : 1 : 1689.9
+RU-UNK-1295 : 1 : 9072.0
+RU-UNK-1296 : 1 : 489.20001
+RU-UNK-1297 : 1 : 2377.7
+RU-UNK-1298 : 1 : 29626.4
+RU-UNK-1299 : 1 : 29626.4
+RU-UNK-1300 : 1 : 40.400002
+RU-UNK-1301 : 1 : 1871.6
+RU-UNK-1302 : 1 : 375.79999
+RU-UNK-1303 : 1 : 24.5
+RU-UNK-1304 : 1 : 1.0
+RU-UNK-1305 : 1 : 5.5999999
+RU-UNK-1306 : 1 : 1.0
+RU-UNK-1307 : 1 : 1216.6
+RU-UNK-1308 : 1 : 7.9000001
+RU-UNK-1309 : 1 : 28.200001
+RU-UNK-1310 : 1 : 5.9000001
+RU-UNK-1311 : 1 : 3.0999999
+RU-UNK-1312 : 1 : 5.8000002
+RU-UNK-1313 : 1 : 74.099998
+RU-UNK-1314 : 1 : 67.900002
+RU-UNK-1315 : 1 : 5.3000002
+RU-UNK-1316 : 1 : 4.0
+RU-UNK-1317 : 1 : 31.1
+RU-UNK-1318 : 1 : 1.0
+RU-UNK-1319 : 1 : 12.7
+RU-UNK-1320 : 1 : 13.3
+RU-UNK-1321 : 1 : 1.1
+RU-UNK-1322 : 1 : 19.1
+RU-UNK-1323 : 1 : 1.0
+RU-UNK-1324 : 1 : 1.0
+RU-UNK-1325 : 1 : 1.8
+RU-UNK-1326 : 1 : 2.5
+RU-UNK-1327 : 1 : 2.7
+RU-UNK-1328 : 1 : 1901.8
+RU-UNK-1329 : 1 : 1.6
+RU-UNK-1330 : 1 : 3.2
+RU-UNK-1331 : 1 : 11.2
+RU-UNK-1332 : 1 : 1.0
+RU-UNK-1333 : 1 : 8.0
+RU-UNK-1334 : 1 : 2.5999999
+RU-UNK-1335 : 1 : 1.0
+RU-UNK-1336 : 1 : 2.7
+RU-UNK-1337 : 1 : 1.2
+RU-UNK-1338 : 1 : 1.0
+RU-UNK-1339 : 1 : 1.0
+RU-UNK-1340 : 1 : 1.0
+RU-UNK-1341 : 1 : 1.0
+RU-UNK-1342 : 1 : 1.2
+RU-UNK-1343 : 1 : 154.7
+RU-UNK-1344 : 1 : 9.3999996
+RU-UNK-1345 : 1 : 51.599998
+RU-UNK-1346 : 1 : 74.099998
+RU-UNK-1347 : 1 : 3936.2
+RU-UNK-1348 : 1 : 5.9000001
+RU-UNK-1349 : 1 : 30.299999
+RU-UNK-1350 : 1 : 1.0
+RU-UNK-1351 : 1 : 1.0
+RU-UNK-1352 : 1 : 2.0999999
+RU-UNK-1353 : 1 : 3.9000001
+RU-UNK-1354 : 1 : 2269.3
+RU-UNK-1355 : 1 : 2.7
+RU-UNK-1356 : 1 : 7.0999999
+RU-UNK-1357 : 1 : 22.299999
+RU-UNK-1358 : 1 : 13.8
+RU-UNK-1359 : 1 : 32.200001
+RU-UNK-1360 : 1 : 18.799999
+RU-UNK-1361 : 1 : 3.0999999
+RU-UNK-1362 : 1 : 65.099998
+RU-UNK-1363 : 1 : 2.2
+RU-UNK-1364 : 1 : 1.9
+RU-UNK-1365 : 1 : 12.3
+RU-UNK-1366 : 1 : 16.6
+RU-UNK-1367 : 1 : 23.5
+RU-UNK-1368 : 1 : 2.7
+RU-UNK-1369 : 1 : 7.1999998
+RU-UNK-1370 : 1 : 8.8999996
+RU-UNK-1371 : 1 : 18.6
+RU-UNK-1372 : 1 : 34.400002
+RU-UNK-1373 : 1 : 237.39999
+RU-UNK-1374 : 1 : 94.0
+RU-UNK-1375 : 1 : 5.0
+RU-UNK-1376 : 1 : 2899.3
+RU-UNK-1377 : 1 : 30.4
+RU-UNK-1378 : 1 : 4.3000002
+RU-UNK-1379 : 1 : 515.09998
+RU-UNK-1380 : 1 : 4.9000001
+RU-UNK-1381 : 1 : 2.5999999
+RU-UNK-1382 : 1 : 1.0
+RU-UNK-1383 : 1 : 2.5
+RU-UNK-1384 : 1 : 34.099998
+RU-UNK-1385 : 1 : 3.5
+RU-UNK-1386 : 1 : 6.3000002
+RU-UNK-1387 : 1 : 110.9
+RU-UNK-1388 : 1 : 1.6
+RU-UNK-1389 : 1 : 1.0
+RU-UNK-1390 : 1 : 1.1
+RU-UNK-1391 : 1 : 12.0
+RU-UNK-1392 : 1 : 65.5
+RU-UNK-1393 : 1 : 16.0
+RU-UNK-1394 : 1 : 12.4
+RU-UNK-1395 : 1 : 1.0
+RU-UNK-1396 : 1 : 3.3
+RU-UNK-1397 : 1 : 1.3
+RU-UNK-1398 : 1 : 109.3
+RU-UNK-1399 : 1 : 15.0
+RU-UNK-1400 : 1 : 6.6999998
+RU-UNK-1401 : 1 : 1.0
+RU-UNK-1402 : 1 : 30.6
+RU-UNK-1403 : 1 : 6.1999998
+RU-UNK-1404 : 1 : 1.7
+RU-UNK-1405 : 1 : 1.6
+RU-UNK-1406 : 1 : 17.1
+RU-UNK-1407 : 1 : 1.0
+RU-UNK-1408 : 1 : 1.7
+RU-UNK-1409 : 1 : 1.0
+RU-UNK-1410 : 1 : 5.8000002
+RU-UNK-1411 : 1 : 2.8
+RU-UNK-1412 : 1 : 33.900002
+RU-UNK-1413 : 1 : 297.89999
+RU-UNK-1414 : 1 : 278.5
+RU-UNK-1415 : 1 : 1.0
+RU-UNK-1416 : 1 : 32.599998
+RU-UNK-1417 : 1 : 1.5
+RU-UNK-1418 : 1 : 3.4000001
+RU-UNK-1419 : 1 : 1.0
+RU-UNK-1420 : 1 : 39.099998
+RU-UNK-1421 : 1 : 344.79999
+RU-UNK-1422 : 1 : 1.0
+RU-UNK-1423 : 1 : 4.3000002
+RU-UNK-1424 : 1 : 1.4
+RU-UNK-1425 : 1 : 141.10001
+RU-UNK-1426 : 1 : 510.60001
+RU-UNK-1427 : 1 : 2.0
+RU-UNK-1428 : 1 : 1.0
+RU-UNK-1429 : 1 : 10.4
+RU-UNK-1430 : 1 : 57.799999
+RU-UNK-1431 : 1 : 8727.5996
+RU-UNK-1432 : 1 : 1.5
+RU-UNK-1433 : 1 : 1.0
+RU-UNK-1434 : 1 : 162.10001
+RU-UNK-1435 : 1 : 43.099998
+RU-UNK-1436 : 1 : 429.0
+RU-UNK-1437 : 1 : 1.7
+RU-UNK-1438 : 1 : 1.0
+RU-UNK-1439 : 1 : 1654.9
+RU-UNK-1440 : 1 : 113.0
+RU-UNK-1441 : 1 : 25.4
+RU-UNK-1442 : 1 : 425.5
+RU-UNK-1443 : 1 : 408.5
+RU-UNK-1444 : 1 : 932.09998
+RU-UNK-1445 : 1 : 4.1999998
+RU-UNK-1446 : 1 : 27.1
+RU-UNK-1447 : 1 : 150.5
+RU-UNK-1448 : 1 : 2.5
+RU-UNK-1449 : 1 : 1.0
+RU-UNK-1450 : 1 : 8.8999996
+RU-UNK-1451 : 1 : 284.29999
+RU-UNK-1452 : 1 : 2.0
+RU-UNK-1453 : 1 : 2744.7
+RU-UNK-1454 : 1 : 236.3
+RU-UNK-1455 : 1 : 336.39999
+RU-UNK-1456 : 1 : 1.0
+RU-UNK-1457 : 1 : 2035.6
+RU-UNK-1458 : 1 : 1063.1
+RU-UNK-1459 : 1 : 351.89999
+RU-UNK-1460 : 1 : 1.0
+RU-UNK-1461 : 1 : 1.3
+RU-UNK-1462 : 1 : 1.0
+RU-UNK-1463 : 1 : 1.0
+RU-UNK-1464 : 1 : 73.900002
+RU-UNK-1465 : 1 : 1.5
+RU-UNK-1466 : 1 : 1.0
+RU-UNK-1467 : 1 : 111.3
+RU-UNK-1468 : 1 : 21.200001
+RU-UNK-1469 : 1 : 153.39999
+RU-UNK-1470 : 1 : 4.3000002
+RU-UNK-1471 : 1 : 58.299999
+RU-UNK-1472 : 1 : 6.9000001
+RU-UNK-1473 : 1 : 10.6
+RU-UNK-1474 : 1 : 57.0
+RU-UNK-1475 : 1 : 976.70001
+RU-UNK-1476 : 1 : 25.299999
+RU-UNK-1477 : 1 : 42.400002
+RU-UNK-1478 : 1 : 14.0
+RU-UNK-1479 : 1 : 505.5
+RU-UNK-1480 : 1 : 1.1
+RU-UNK-1481 : 1 : 5.0999999
+RU-UNK-1482 : 1 : 20.1
+RU-UNK-1483 : 1 : 634.79999
+RU-UNK-1484 : 1 : 1.0
+RU-UNK-1485 : 1 : 1.3
+RU-UNK-1486 : 1 : 2.0
+RU-UNK-1487 : 1 : 11.7
+RU-UNK-1488 : 1 : 73.0
+RU-UNK-1489 : 1 : 62.5
+RU-UNK-1490 : 1 : 4.6999998
+RU-UNK-1491 : 1 : 2.5999999
+RU-UNK-1492 : 1 : 186.0
+RU-UNK-1493 : 1 : 19.6
+RU-UNK-1494 : 1 : 12.1
+RU-UNK-1495 : 1 : 14047.0
+RU-UNK-1496 : 1 : 4.8000002
+RU-UNK-1497 : 1 : 1.1
+RU-UNK-1498 : 1 : 6.5999999
+RU-UNK-1499 : 1 : 1.0
+RU-UNK-1500 : 1 : 4.3000002
+RU-UNK-1501 : 1 : 2.2
+RU-UNK-1502 : 1 : 273.60001
+RU-UNK-1503 : 1 : 1.0
+RU-UNK-1504 : 1 : 43.5
+RU-UNK-1505 : 1 : 1.0
+RU-UNK-1506 : 1 : 261.89999
+RU-UNK-1507 : 1 : 1.2
+RU-UNK-1508 : 1 : 1530.7
+RU-UNK-1509 : 1 : 6.6999998
+RU-UNK-1510 : 1 : 32.5
+RU-UNK-1511 : 1 : 2.2
+RU-UNK-1512 : 1 : 5.5999999
+RU-UNK-1513 : 1 : 2.3
+RU-UNK-1514 : 1 : 1.8
+RU-UNK-1515 : 1 : 1.0
+RU-UNK-1516 : 1 : 1.6
+RU-UNK-1517 : 1 : 1.0
+RU-UNK-1518 : 1 : 1.0
+RU-UNK-1519 : 1 : 48.299999
+RU-UNK-1520 : 1 : 1.0
+RU-UNK-1521 : 1 : 1.2
+RU-UNK-1522 : 1 : 13.2
+RU-UNK-1523 : 1 : 1.0
+RU-UNK-1524 : 1 : 1.6
+RU-UNK-1525 : 1 : 1.4
+RU-UNK-1526 : 1 : 1.0
+RU-UNK-1527 : 1 : 32.200001
+RU-UNK-1528 : 1 : 1.0
+RU-UNK-1529 : 1 : 280.0
+RU-UNK-1530 : 1 : 1.0
+RU-UNK-1531 : 1 : 1.4
+RU-UNK-1532 : 1 : 1.0
+RU-UNK-1533 : 1 : 22.200001
+RU-UNK-1534 : 1 : 3.2
+RU-UNK-1535 : 1 : 10.8
+RU-UNK-1536 : 1 : 1.0
+RU-UNK-1537 : 1 : 11.5
+RU-UNK-1538 : 1 : 1.0
+RU-UNK-1539 : 1 : 4.5
+RU-UNK-1540 : 1 : 34.5
+RU-UNK-1541 : 1 : 1.0
+RU-UNK-1542 : 1 : 30.6
+RU-UNK-1543 : 1 : 10582.7
+RU-UNK-1544 : 1 : 1.0
+RU-UNK-1545 : 1 : 2.5999999
+RU-UNK-1546 : 1 : 1.0
+RU-UNK-1547 : 1 : 12.4
+RU-UNK-1548 : 1 : 1.4
+RU-UNK-1549 : 1 : 1.5
+RU-UNK-1550 : 1 : 12.2
+RU-UNK-1551 : 1 : 1.0
+RU-UNK-1552 : 1 : 6.0
+RU-UNK-1553 : 1 : 1.2
+RU-UNK-1554 : 1 : 1.1
+RU-UNK-1555 : 1 : 2.4000001
+RU-UNK-1556 : 1 : 1.0
+RU-UNK-1557 : 1 : 1.0
+RU-UNK-1558 : 1 : 4.6999998
+RU-UNK-1559 : 1 : 1.0
+RU-UNK-1560 : 1 : 1.0
+RU-UNK-1561 : 1 : 1.0
+RU-UNK-1562 : 1 : 1.0
+RU-UNK-1563 : 1 : 7.3000002
+RU-UNK-1564 : 1 : 1.4
+RU-UNK-1565 : 1 : 3.0
+RU-UNK-1566 : 1 : 1.1
+RU-UNK-1567 : 1 : 2.2
+RU-UNK-1568 : 1 : 1.5
+RU-UNK-1569 : 1 : 1.5
+RU-UNK-1570 : 1 : 1.0
+RU-UNK-1571 : 1 : 104.2
+RU-UNK-1572 : 1 : 4.4000001
+RU-UNK-1573 : 1 : 1.0
+RU-UNK-1574 : 1 : 1.0
+RU-UNK-1575 : 1 : 14.8
+RU-UNK-1576 : 1 : 248.7
+RU-UNK-1577 : 1 : 1.3
+RU-UNK-1578 : 1 : 1.0
+RU-UNK-1579 : 1 : 1.0
+RU-UNK-1580 : 1 : 1.0
+RU-UNK-1581 : 1 : 1.0
+RU-UNK-1582 : 1 : 1.0
+RU-UNK-1583 : 1 : 1.0
+RU-UNK-1584 : 1 : 1.0
+RU-UNK-1585 : 1 : 1.0
+RU-UNK-1586 : 1 : 2.5999999
+RU-UNK-1587 : 1 : 3.3
+RU-UNK-1588 : 1 : 5.4000001
+RU-UNK-1589 : 1 : 24.200001
+RU-UNK-1590 : 1 : 2.8
+RU-UNK-1591 : 1 : 1.3
+RU-UNK-1592 : 1 : 2.2
+RU-UNK-1593 : 1 : 32.5
+RU-UNK-1594 : 1 : 1.0
+RU-UNK-1595 : 1 : 48.400002
+RU-UNK-1596 : 1 : 6.0
+RU-UNK-1597 : 1 : 1.8
+RU-UNK-1598 : 1 : 2.0
+RU-UNK-1599 : 1 : 1.2
+RU-UNK-1600 : 1 : 92.099998
+RU-UNK-1601 : 1 : 7.9000001
+RU-UNK-1602 : 1 : 8.8999996
+RU-UNK-1603 : 1 : 8.3000002
+RU-UNK-1604 : 1 : 2.0
+RU-UNK-1605 : 1 : 143.3
+RU-UNK-1606 : 1 : 1.0
+RU-UNK-1607 : 1 : 24.9
+RU-UNK-1608 : 1 : 1.0
+RU-UNK-1609 : 1 : 5.0
+RU-UNK-1610 : 1 : 4.4000001
+RU-UNK-1611 : 1 : 1.6
+RU-UNK-1612 : 1 : 323.79999
+RU-UNK-1613 : 1 : 1.1
+RU-UNK-1614 : 1 : 7.3000002
+RU-UNK-1615 : 1 : 1.6
+RU-UNK-1616 : 1 : 59.5
+RU-UNK-1617 : 1 : 17.299999
+RU-UNK-1618 : 1 : 1.2
+RU-UNK-1619 : 1 : 1.2
+RU-UNK-1620 : 1 : 1.0
+RU-UNK-1621 : 1 : 1.0
+RU-UNK-1622 : 1 : 1.3
+RU-UNK-1623 : 1 : 2.0999999
+RU-UNK-1624 : 1 : 1.0
+RU-UNK-1625 : 1 : 4.3000002
+RU-UNK-1626 : 1 : 24.5
+RU-UNK-1627 : 1 : 45924.699
+RU-UNK-1628 : 1 : 1.0
+RU-UNK-1629 : 1 : 1.0
+RU-UNK-1630 : 1 : 1.5
+RU-UNK-1631 : 1 : 1.0
+RU-UNK-1632 : 1 : 1.0
+RU-UNK-1633 : 1 : 7.0999999
+RU-UNK-1634 : 1 : 1.6
+RU-UNK-1635 : 1 : 6.5
+RU-UNK-1636 : 1 : 47.400002
+RU-UNK-1637 : 1 : 1.0
+RU-UNK-1638 : 1 : 1.0
+RU-UNK-1639 : 1 : 7.9000001
+RU-UNK-1640 : 1 : 2.5999999
+RU-UNK-1641 : 1 : 1.0
+RU-UNK-1642 : 1 : 3.4000001
+RU-UNK-1643 : 1 : 1.8
+RU-UNK-1644 : 1 : 6.4000001
+RU-UNK-1645 : 1 : 7.9000001
+RU-UNK-1646 : 1 : 1.0
+RU-UNK-1647 : 1 : 13.9
+RU-UNK-1648 : 1 : 2.5
+RU-UNK-1649 : 1 : 1.0
+RU-UNK-1650 : 1 : 1.8
+RU-UNK-1651 : 1 : 4.0999999
+RU-UNK-1652 : 1 : 9.3000002
+RU-UNK-1653 : 1 : 6.0
+RU-UNK-1654 : 1 : 1.4
+RU-UNK-1655 : 1 : 1.0
+RU-UNK-1656 : 1 : 36.0
+RU-UNK-1657 : 1 : 1.0
+RU-UNK-1658 : 1 : 1.2
+RU-UNK-1659 : 1 : 140.39999
+RU-UNK-1660 : 1 : 5.0
+RU-UNK-1661 : 1 : 12.5
+RU-UNK-1662 : 1 : 1.0
+RU-UNK-1663 : 1 : 1.0
+RU-UNK-1664 : 1 : 5.6999998
+RU-UNK-1665 : 1 : 15.2
+RU-UNK-1666 : 1 : 1.0
+RU-UNK-1667 : 1 : 1.0
+RU-UNK-1668 : 1 : 3.2
+RU-UNK-1669 : 1 : 15.1
+RU-UNK-1670 : 1 : 2.5999999
+RU-UNK-1671 : 1 : 33.5
+RU-UNK-1672 : 1 : 4.5
+RU-UNK-1673 : 1 : 8.3999996
+RU-UNK-1674 : 1 : 61.299999
+RU-UNK-1675 : 1 : 77.400002
+RU-UNK-1676 : 1 : 40.900002
+RU-UNK-1677 : 1 : 1.0
+RU-UNK-1678 : 1 : 1.0
+RU-UNK-1679 : 1 : 13.0
+RU-UNK-1680 : 1 : 5.6999998
+RU-UNK-1681 : 1 : 1.0
+RU-UNK-1682 : 1 : 7.8000002
+RU-UNK-1683 : 1 : 211.60001
+RU-UNK-1684 : 1 : 1.3
+RU-UNK-1685 : 1 : 31.5
+RU-UNK-1686 : 1 : 1.1
+RU-UNK-1687 : 1 : 1.5
+RU-UNK-1688 : 1 : 3.8
+RU-UNK-1689 : 1 : 1.9
+RU-UNK-1690 : 1 : 1.4
+RU-UNK-1691 : 1 : 7.4000001
+RU-UNK-1692 : 1 : 2.5
+RU-UNK-1693 : 1 : 2.7
+RU-UNK-1694 : 1 : 11.1
+RU-UNK-1695 : 1 : 4.5
+RU-UNK-1696 : 1 : 1.6
+RU-UNK-1697 : 1 : 1.9
+RU-UNK-1698 : 1 : 4.5999999
+RU-UNK-1699 : 1 : 1.0
+RU-UNK-1700 : 1 : 5.5999999
+RU-UNK-1701 : 1 : 9.8999996
+RU-UNK-1702 : 1 : 20.299999
+RU-UNK-1703 : 1 : 2.2
+RU-UNK-1704 : 1 : 2.3
+RU-UNK-1705 : 1 : 2.7
+RU-UNK-1706 : 1 : 1.0
+RU-UNK-1707 : 1 : 1.0
+RU-UNK-1708 : 1 : 1.0
+RU-UNK-1709 : 1 : 46.099998
+RU-UNK-1710 : 1 : 1.5
+RU-UNK-1711 : 1 : 1.8
+RU-UNK-1712 : 1 : 2.5
+RU-UNK-1713 : 1 : 1.2
+RU-UNK-1714 : 1 : 2.7
+RU-UNK-1715 : 1 : 1.2
+RU-UNK-1716 : 1 : 3.5999999
+RU-UNK-1717 : 1 : 1.5
+RU-UNK-1718 : 1 : 4.9000001
+RU-UNK-1719 : 1 : 7.6999998
+RU-UNK-1720 : 1 : 85.400002
+RU-UNK-1721 : 1 : 25.799999
+RU-UNK-1722 : 1 : 398.70001
+RU-UNK-1723 : 1 : 1.0
+RU-UNK-1724 : 1 : 1.0
+RU-UNK-1725 : 1 : 6.0999999
+RU-UNK-1726 : 1 : 3.7
+RU-UNK-1727 : 1 : 53.599998
+RU-UNK-1728 : 1 : 3.2
+RU-UNK-1729 : 1 : 2.7
+RU-UNK-1730 : 1 : 4.0
+RU-UNK-1731 : 1 : 3.0
+RU-UNK-1732 : 1 : 1.0
+RU-UNK-1733 : 1 : 1.0
+RU-UNK-1734 : 1 : 4.1999998
+RU-UNK-1735 : 1 : 24.799999
+RU-UNK-1736 : 1 : 24669.4
+RU-UNK-1737 : 1 : 1.0
+RU-UNK-1738 : 1 : 61.200001
+RU-UNK-1739 : 1 : 1.5
+RU-UNK-1740 : 1 : 66.900002
+RU-UNK-1741 : 1 : 1.0
+RU-UNK-1742 : 1 : 1.0
+RU-UNK-1743 : 1 : 1.4
+RU-UNK-1744 : 1 : 1.0
+RU-UNK-1745 : 1 : 92.400002
+RU-UNK-1746 : 1 : 4.1999998
+RU-UNK-1747 : 1 : 1.3
+RU-UNK-1748 : 1 : 1.0
+RU-UNK-1749 : 1 : 1.0
+RU-UNK-1750 : 1 : 1.3
+RU-UNK-1751 : 1 : 1.0
+RU-UNK-1752 : 1 : 1.2
+RU-UNK-1753 : 1 : 1.0
+RU-UNK-1754 : 1 : 1.0
+RU-UNK-1755 : 1 : 1.0
+RU-UNK-1756 : 1 : 1.0
+RU-UNK-1757 : 1 : 1.0
+RU-UNK-1758 : 1 : 1.0
+RU-UNK-1759 : 1 : 9.1000004
+RU-UNK-1760 : 1 : 4.1999998
+RU-UNK-1761 : 1 : 8.3000002
+RU-UNK-1762 : 1 : 1.0
+RU-UNK-1763 : 1 : 1.0
+RU-UNK-1764 : 1 : 9.5
+RU-UNK-1765 : 1 : 8.6000004
+RU-UNK-1766 : 1 : 101.5
+RU-UNK-1767 : 1 : 7.6999998
+RU-UNK-1768 : 1 : 30.6
+RU-UNK-1769 : 1 : 58.299999
+RU-UNK-1770 : 1 : 1.1
+RU-UNK-1771 : 1 : 1.0
+RU-UNK-1772 : 1 : 1.8
+RU-UNK-1773 : 1 : 16.4
+RU-UNK-1774 : 1 : 526.90002
+RU-UNK-1775 : 1 : 4.9000001
+RU-UNK-1776 : 1 : 13.8
+RU-UNK-1777 : 1 : 2.9000001
+RU-UNK-1778 : 1 : 1.0
+RU-UNK-1779 : 1 : 1.0
+RU-UNK-1780 : 1 : 1.0
+RU-UNK-1781 : 1 : 1.0
+RU-UNK-1782 : 1 : 2.4000001
+RU-UNK-1783 : 1 : 1.0
+RU-UNK-1784 : 1 : 2.3
+RU-UNK-1785 : 1 : 1.1
+RU-UNK-1786 : 1 : 1.0
+RU-UNK-1787 : 1 : 5.6999998
+RU-UNK-1788 : 1 : 1.7
+RU-UNK-1789 : 1 : 6216.6001
+RU-UNK-1790 : 1 : 1.0
+RU-UNK-1791 : 1 : 1.0
+RU-UNK-1792 : 1 : 1.4
+RU-UNK-1793 : 1 : 7.3000002
+RU-UNK-1794 : 1 : 48.200001
+RU-UNK-1795 : 1 : 12.3
+RU-UNK-1796 : 1 : 259.39999
+RU-UNK-1797 : 1 : 1.0
+RU-UNK-1798 : 1 : 7.4000001
+RU-UNK-1799 : 1 : 1.0
+RU-UNK-1800 : 1 : 1.0
+RU-UNK-1801 : 1 : 3.5
+RU-UNK-1802 : 1 : 1.0
+RU-UNK-1803 : 1 : 5.5999999
+RU-UNK-1804 : 1 : 11.2
+RU-UNK-1805 : 1 : 4.9000001
+RU-UNK-1806 : 1 : 253.39999
+RU-UNK-1807 : 1 : 3.0
+RU-UNK-1808 : 1 : 1.6
+RU-UNK-1809 : 1 : 1.9
+RU-UNK-1810 : 1 : 1.2
+RU-UNK-1811 : 1 : 1.0
+RU-UNK-1812 : 1 : 5.9000001
+RU-UNK-1813 : 1 : 4.4000001
+RU-UNK-1814 : 1 : 6.0
+RU-UNK-1815 : 1 : 28.0
+RU-UNK-1816 : 1 : 3.2
+RU-UNK-1817 : 1 : 55.0
+RU-UNK-1818 : 1 : 2.0999999
+RU-UNK-1819 : 1 : 1.2
+RU-UNK-1820 : 1 : 2.0
+RU-UNK-1821 : 1 : 1.4
+RU-UNK-1822 : 1 : 80.900002
+RU-UNK-1823 : 1 : 8.0
+RU-UNK-1824 : 1 : 2.0999999
+RU-UNK-1825 : 1 : 1.0
+RU-UNK-1826 : 1 : 5.0
+RU-UNK-1827 : 1 : 73.699997
+RU-UNK-1828 : 1 : 9.1999998
+RU-UNK-1829 : 1 : 141.89999
+RU-UNK-1830 : 1 : 19.299999
+RU-UNK-1831 : 1 : 1.0
+RU-UNK-1832 : 1 : 6.0999999
+RU-UNK-1833 : 1 : 132.2
+RU-UNK-1834 : 1 : 8.1999998
+RU-UNK-1835 : 1 : 1894.9
+RU-UNK-1836 : 1 : 1.0
+RU-UNK-1837 : 1 : 1.0
+RU-UNK-1838 : 1 : 1.0
+RU-UNK-1839 : 1 : 78.300003
+RU-UNK-1840 : 1 : 4.5999999
+RU-UNK-1841 : 1 : 1.0
+RU-UNK-1842 : 1 : 1.6
+RU-UNK-1843 : 1 : 3.7
+RU-UNK-1844 : 1 : 1.0
+RU-UNK-1845 : 1 : 13.0
+RU-UNK-1846 : 1 : 1.0
+RU-UNK-1847 : 1 : 1.0
+RU-UNK-1848 : 1 : 1.9
+RU-UNK-1849 : 1 : 33.5
+RU-UNK-1850 : 1 : 1.0
+RU-UNK-1851 : 1 : 1.0
+RU-UNK-1852 : 1 : 12.5
+RU-UNK-1853 : 1 : 1.3
+RU-UNK-1854 : 1 : 4.8000002
+RU-UNK-1855 : 1 : 1.0
+RU-UNK-1856 : 1 : 19.0
+RU-UNK-1857 : 1 : 4.0999999
+RU-UNK-1858 : 1 : 3.4000001
+RU-UNK-1859 : 1 : 1.1
+RU-UNK-1860 : 1 : 2.3
+RU-UNK-1861 : 1 : 20.1
+RU-UNK-1862 : 1 : 9.6999998
+RU-UNK-1863 : 1 : 1.8
+RU-UNK-1864 : 1 : 1.0
+RU-UNK-1865 : 1 : 1.0
+RU-UNK-1866 : 1 : 1.0
+RU-UNK-1867 : 1 : 891.79999
+RU-UNK-1868 : 1 : 305.39999
+RU-UNK-1869 : 1 : 41.799999
+RU-UNK-1870 : 1 : 1.1
+RU-UNK-1871 : 1 : 1.0
+RU-UNK-1872 : 1 : 1.0
+RU-UNK-1873 : 1 : 1.9
+RU-UNK-1874 : 1 : 90.0
+RU-UNK-1875 : 1 : 109.1
+RU-UNK-1876 : 1 : 1.0
+RU-UNK-1877 : 1 : 1.0
+RU-UNK-1878 : 1 : 1.0
+RU-UNK-1879 : 1 : 1.0
+RU-UNK-1880 : 1 : 13.9
+RU-UNK-1881 : 1 : 1.0
+RU-UNK-1882 : 1 : 1.0
+RU-UNK-1883 : 1 : 1.0
+RU-UNK-1884 : 1 : 1.6
+RU-UNK-1885 : 1 : 1.1
+RU-UNK-1886 : 1 : 2.0
+RU-UNK-1887 : 1 : 17.4
+RU-UNK-1888 : 1 : 3.7
+RU-UNK-1889 : 1 : 3.9000001
+RU-UNK-1890 : 1 : 1.0
+RU-UNK-1891 : 1 : 1.8
+RU-UNK-1892 : 1 : 61.200001
+RU-UNK-1893 : 1 : 1.8
+RU-UNK-1894 : 1 : 9.8000002
+RU-UNK-1895 : 1 : 10.9
+RU-UNK-1896 : 1 : 1.0
+RU-UNK-1897 : 1 : 5.9000001
+RU-UNK-1898 : 1 : 29.1
+RU-UNK-1899 : 1 : 1.2
+RU-UNK-1900 : 1 : 25.700001
+RU-UNK-1901 : 1 : 2.0999999
+RU-UNK-1902 : 1 : 1.0
+RU-UNK-1903 : 1 : 2.0
+RU-UNK-1904 : 1 : 66.699997
+RU-UNK-1905 : 1 : 1.0
+RU-UNK-1906 : 1 : 5287.5
+RU-UNK-1907 : 1 : 1.0
+RU-UNK-1908 : 1 : 10.9
+RU-UNK-1909 : 1 : 1.9
+RU-UNK-1910 : 1 : 1.0
+RU-UNK-1911 : 1 : 1.0
+RU-UNK-1912 : 1 : 1.6
+RU-UNK-1913 : 1 : 1.0
+RU-UNK-1914 : 1 : 1.1
+RU-UNK-1915 : 1 : 8.8000002
+RU-UNK-1916 : 1 : 1.0
+RU-UNK-1917 : 1 : 1.8
+RU-UNK-1918 : 1 : 3.0999999
+RU-UNK-1919 : 1 : 8.0
+RU-UNK-1920 : 1 : 1.4
+RU-UNK-1921 : 1 : 7.1999998
+RU-UNK-1922 : 1 : 8.6999998
+RU-UNK-1923 : 1 : 2.2
+RU-UNK-1924 : 1 : 1.0
+RU-UNK-1925 : 1 : 1.2
+RU-UNK-1926 : 1 : 10.5
+RU-UNK-1927 : 1 : 1.6
+RU-UNK-1928 : 1 : 1.0
+RU-UNK-1929 : 1 : 4.5
+RU-UNK-1930 : 1 : 1.0
+RU-UNK-1931 : 1 : 6.9000001
+RU-UNK-1932 : 1 : 1.1
+RU-UNK-1933 : 1 : 1.9
+RU-UNK-1934 : 1 : 1.2
+RU-UNK-1935 : 1 : 3.7
+RU-UNK-1936 : 1 : 1.5
+RU-UNK-1937 : 1 : 2.0999999
+RU-UNK-1938 : 1 : 21.299999
+RU-UNK-1939 : 1 : 7.4000001
+RU-UNK-1940 : 1 : 1.1
+RU-UNK-1941 : 1 : 1.0
+RU-UNK-1942 : 1 : 1.2
+RU-UNK-1943 : 1 : 1.0
+RU-UNK-1944 : 1 : 2.7
+RU-UNK-1945 : 1 : 2.2
+RU-UNK-1946 : 1 : 1.1
+RU-UNK-1947 : 1 : 2.5
+RU-UNK-1948 : 1 : 1.1
+RU-UNK-1949 : 1 : 1.0
+RU-UNK-1950 : 1 : 7.0
+RU-UNK-1951 : 1 : 4.3000002
+RU-UNK-1952 : 1 : 32.599998
+RU-UNK-1953 : 1 : 1.0
+RU-UNK-1954 : 1 : 142.0
+RU-UNK-1955 : 1 : 24.6
+RU-UNK-1956 : 1 : 47.0
+RU-UNK-1957 : 1 : 7.0
+RU-UNK-1958 : 1 : 1.0
+RU-UNK-1959 : 1 : 2.0999999
+RU-UNK-1960 : 1 : 1.9
+RU-UNK-1961 : 1 : 1.2
+RU-UNK-1962 : 1 : 1986.2
+RU-UNK-1963 : 1 : 5.5999999
+RU-UNK-1964 : 1 : 2.5
+RU-UNK-1965 : 1 : 1.1
+RU-UNK-1966 : 1 : 1.3
+RU-UNK-1967 : 1 : 1.3
+RU-UNK-1968 : 1 : 4.5
+RU-UNK-1969 : 1 : 1.1
+RU-UNK-1970 : 1 : 18.200001
+RU-UNK-1971 : 1 : 1.0
+RU-UNK-1972 : 1 : 1.7
+RU-UNK-1973 : 1 : 6.9000001
+RU-UNK-1974 : 1 : 2.5
+RU-UNK-1975 : 1 : 32523.5
+RU-UNK-1976 : 1 : 13.0
+RU-UNK-1977 : 1 : 3.0
+RU-UNK-1978 : 1 : 1.0
+RU-UNK-1979 : 1 : 1.1
+RU-UNK-1980 : 1 : 1.0
+RU-UNK-1981 : 1 : 4.1999998
+RU-UNK-1982 : 1 : 1.0
+RU-UNK-1983 : 1 : 2.0
+RU-UNK-1984 : 1 : 2.5999999
+RU-UNK-1985 : 1 : 3.4000001
+RU-UNK-1986 : 1 : 1.5
+RU-UNK-1987 : 1 : 2.5
+RU-UNK-1988 : 1 : 18.200001
+RU-UNK-1989 : 1 : 1.0
+RU-UNK-1990 : 1 : 6.6999998
+RU-UNK-1991 : 1 : 2.0999999
+RU-UNK-1992 : 1 : 9.0
+RU-UNK-1993 : 1 : 3.2
+RU-UNK-1994 : 1 : 2.0
+RU-UNK-1995 : 1 : 21.799999
+RU-UNK-1996 : 1 : 1.0
+RU-UNK-1997 : 1 : 12.6
+RU-UNK-1998 : 1 : 3.0
+RU-UNK-1999 : 1 : 101.0
+RU-UNK-2000 : 1 : 1.0
+RU-UNK-2001 : 1 : 1.6
+RU-UNK-2002 : 1 : 6.4000001
+RU-UNK-2003 : 1 : 1.0
+RU-UNK-2004 : 1 : 13.3
+RU-UNK-2005 : 1 : 37.299999
+RU-UNK-2006 : 1 : 9.5
+RU-UNK-2007 : 1 : 2.0999999
+RU-UNK-2008 : 1 : 1.0
+RU-UNK-2009 : 1 : 4.0999999
+RU-UNK-2010 : 1 : 1.0
+RU-UNK-2011 : 1 : 3.4000001
+RU-UNK-2012 : 1 : 1.0
+RU-UNK-2013 : 1 : 1.0
+RU-UNK-2014 : 1 : 1.0
+RU-UNK-2015 : 1 : 3.3
+RU-UNK-2016 : 1 : 1.0
+RU-UNK-2017 : 1 : 1.0
+RU-UNK-2018 : 1 : 4.1999998
+RU-UNK-2019 : 1 : 1.0
+RU-UNK-2020 : 1 : 1.0
+RU-UNK-2021 : 1 : 73.699997
+RU-UNK-2022 : 1 : 6.8000002
+RU-UNK-2023 : 1 : 8.6000004
+RU-UNK-2024 : 1 : 1.2
+RU-UNK-2025 : 1 : 411.89999
+RU-UNK-2026 : 1 : 15.2
+RU-UNK-2027 : 1 : 1.8
+RU-UNK-2028 : 1 : 2.3
+RU-UNK-2029 : 1 : 22.700001
+RU-UNK-2030 : 1 : 822.70001
+RU-UNK-2031 : 1 : 10.2
+RU-UNK-2032 : 1 : 6.5
+RU-UNK-2033 : 1 : 5.4000001
+RU-UNK-2034 : 1 : 15.2
+RU-UNK-2035 : 1 : 57.099998
+RU-UNK-2036 : 1 : 1.2
+RU-UNK-2037 : 1 : 3.8
+RU-UNK-2038 : 1 : 11.1
+RU-UNK-2039 : 1 : 1.0
+RU-UNK-2040 : 1 : 1.0
+RU-UNK-2041 : 1 : 1.2
+RU-UNK-2042 : 1 : 1.0
+RU-UNK-2043 : 1 : 1.0
+RU-UNK-2044 : 1 : 17.1
+RU-UNK-2045 : 1 : 2.4000001
+RU-UNK-2046 : 1 : 1.0
+RU-UNK-2047 : 1 : 7.5
+RU-UNK-2048 : 1 : 1.3
+RU-UNK-2049 : 1 : 1.0
+RU-UNK-2050 : 1 : 1.0
+RU-UNK-2051 : 1 : 1.7
+RU-UNK-2052 : 1 : 2.0999999
+RU-UNK-2053 : 1 : 1.0
+RU-UNK-2054 : 1 : 3.4000001
+RU-UNK-2055 : 1 : 1.9
+RU-UNK-2056 : 1 : 5.0999999
+RU-UNK-2057 : 1 : 3.5999999
+RU-UNK-2058 : 1 : 6.8000002
+RU-UNK-2059 : 1 : 1.6
+RU-UNK-2060 : 1 : 8.8999996
+RU-UNK-2061 : 1 : 2.9000001
+RU-UNK-2062 : 1 : 1.0
+RU-UNK-2063 : 1 : 9.1000004
+RU-UNK-2064 : 1 : 1.0
+RU-UNK-2065 : 1 : 1.0
+RU-UNK-2066 : 1 : 1.0
+RU-UNK-2067 : 1 : 8.8999996
+RU-UNK-2068 : 1 : 1.0
+RU-UNK-2069 : 1 : 1.0
+RU-UNK-2070 : 1 : 3.9000001
+RU-UNK-2071 : 1 : 1.0
+RU-UNK-2072 : 1 : 2.5
+RU-UNK-2073 : 1 : 1.0
+RU-UNK-2074 : 1 : 3.0
+RU-UNK-2075 : 1 : 1.0
+RU-UNK-2076 : 1 : 2.0999999
+RU-UNK-2077 : 1 : 7.5
+RU-UNK-2078 : 1 : 2.8
+RU-UNK-2079 : 1 : 27.6
+RU-UNK-2080 : 1 : 25.0
+RU-UNK-2081 : 1 : 1.0
+RU-UNK-2082 : 1 : 1.0
+RU-UNK-2083 : 1 : 1.0
+RU-UNK-2084 : 1 : 1.0
+RU-UNK-2085 : 1 : 1072.5
+RU-UNK-2086 : 1 : 1.4
+RU-UNK-2087 : 1 : 2.5999999
+RU-UNK-2088 : 1 : 3.4000001
+RU-UNK-2089 : 1 : 2.0
+RU-UNK-2090 : 1 : 4.4000001
+RU-UNK-2091 : 1 : 2.5
+RU-UNK-2092 : 1 : 5.4000001
+RU-UNK-2093 : 1 : 3.5
+RU-UNK-2094 : 1 : 1.5
+RU-UNK-2095 : 1 : 29.9
+RU-UNK-2096 : 1 : 2.9000001
+RU-UNK-2097 : 1 : 4.3000002
+RU-UNK-2098 : 1 : 1.2
+RU-UNK-2099 : 1 : 1.0
+RU-UNK-2100 : 1 : 2.5999999
+RU-UNK-2101 : 1 : 1.8
+RU-UNK-2102 : 1 : 1.9
+RU-UNK-2103 : 1 : 1.0
+RU-UNK-2104 : 1 : 1.0
+RU-UNK-2105 : 1 : 11.2
+RU-UNK-2106 : 1 : 3.4000001
+RU-UNK-2107 : 1 : 24.6
+RU-UNK-2108 : 1 : 1.1
+RU-UNK-2109 : 1 : 2.5
+RU-UNK-2110 : 1 : 1.1
+RU-UNK-2111 : 1 : 4.5
+RU-UNK-2112 : 1 : 1.0
+RU-UNK-2113 : 1 : 1.6
+RU-UNK-2114 : 1 : 1.9
+RU-UNK-2115 : 1 : 4.5
+RU-UNK-2116 : 1 : 10.5
+RU-UNK-2117 : 1 : 1.1
+RU-UNK-2118 : 1 : 4.3000002
+RU-UNK-2119 : 1 : 1.0
+RU-UNK-2120 : 1 : 2.0
+RU-UNK-2121 : 1 : 2.7
+RU-UNK-2122 : 1 : 1.0
+RU-UNK-2123 : 1 : 1.0
+RU-UNK-2124 : 1 : 2.4000001
+RU-UNK-2125 : 1 : 1.8
+RU-UNK-2126 : 1 : 1.0
+RU-UNK-2127 : 1 : 1.0
+RU-UNK-2128 : 1 : 1.5
+RU-UNK-2129 : 1 : 2.0
+RU-UNK-2130 : 1 : 3.0
+RU-UNK-2131 : 1 : 18.1
+RU-UNK-2132 : 1 : 28.799999
+RU-UNK-2133 : 1 : 151.60001
+RU-UNK-2134 : 1 : 151.60001
+RU-UNK-2135 : 1 : 1.0
+RU-UNK-2136 : 1 : 1041.7
+RU-UNK-2137 : 1 : 1041.7
+RU-UNK-2138 : 1 : 1041.7
+RU-UNK-2139 : 1 : 1.0
+RU-UNK-2140 : 1 : 11.5
+RU-UNK-2141 : 1 : 6.9000001
+RU-UNK-2142 : 1 : 2.3
+RU-UNK-2143 : 1 : 6.0999999
+RU-UNK-2144 : 1 : 31.1
+RU-UNK-2145 : 1 : 1.8
+RU-UNK-2146 : 1 : 1.1
+RU-UNK-2147 : 1 : 56.900002
+RU-UNK-2148 : 1 : 2.0999999
+RU-UNK-2149 : 1 : 1.0
+RU-UNK-2150 : 1 : 1.9
+RU-UNK-2151 : 1 : 7.8000002
+RU-UNK-2152 : 1 : 4.0999999
+RU-UNK-2153 : 1 : 4.8000002
+RU-UNK-2154 : 1 : 6.1999998
+RU-UNK-2155 : 1 : 4.8000002
+RU-UNK-2156 : 1 : 5.5999999
+RU-UNK-2157 : 1 : 1.7
+RU-UNK-2158 : 1 : 1.0
+RU-UNK-2159 : 1 : 1.0
+RU-UNK-2160 : 1 : 420.10001
+RU-UNK-2161 : 1 : 7705.5
+RU-UNK-2162 : 1 : 7705.5
+RU-UNK-2163 : 1 : 9.8999996
+RU-UNK-2164 : 1 : 1.0
+RU-UNK-2165 : 1 : 8.8999996
+RU-UNK-2166 : 1 : 2.9000001
+RU-UNK-2167 : 1 : 1.1
+RU-UNK-2168 : 1 : 13.8
+RU-UNK-2169 : 1 : 3.2
+RU-UNK-2170 : 1 : 1.3
+RU-UNK-2171 : 1 : 3.3
+RU-UNK-2172 : 1 : 1.0
+RU-UNK-2173 : 1 : 1.0
+RU-UNK-2174 : 1 : 1.0
+RU-UNK-2175 : 1 : 1.6
+RU-UNK-2176 : 1 : 1.0
+RU-UNK-2177 : 1 : 1.0
+RU-UNK-2178 : 1 : 10.5
+RU-UNK-2179 : 1 : 4.0999999
+RU-UNK-2180 : 1 : 2.4000001
+RU-UNK-2181 : 1 : 29.799999
+RU-UNK-2182 : 1 : 1.0
+RU-UNK-2183 : 1 : 2.7
+RU-UNK-2184 : 1 : 1.0
+RU-UNK-2185 : 1 : 2.4000001
+RU-UNK-2186 : 1 : 2.0
+RU-UNK-2187 : 1 : 15.6
+RU-UNK-2188 : 1 : 5.0
+RU-UNK-2189 : 1 : 8.5
+RU-UNK-2190 : 1 : 1.2
+RU-UNK-2191 : 1 : 1.0
+RU-UNK-2192 : 1 : 1.0
+RU-UNK-2193 : 1 : 1.0
+RU-UNK-2194 : 1 : 2.0
+RU-UNK-2195 : 1 : 1.0
+RU-UNK-2196 : 1 : 2.5
+RU-UNK-2197 : 1 : 2.9000001
+RU-UNK-2198 : 1 : 1.2
+RU-UNK-2199 : 1 : 12.3
+RU-UNK-2200 : 1 : 18.9
+RU-UNK-2201 : 1 : 1.2
+RU-UNK-2202 : 1 : 14.0
+RU-UNK-2203 : 1 : 4.0
+RU-UNK-2204 : 1 : 24.9
+RU-UNK-2205 : 1 : 734.59998
+RU-UNK-2206 : 1 : 3.2
+RU-UNK-2207 : 1 : 1.0
+RU-UNK-2208 : 1 : 1.8
+RU-UNK-2209 : 1 : 1.8
+RU-UNK-2210 : 1 : 1.0
+RU-UNK-2211 : 1 : 22.0
+RU-UNK-2212 : 1 : 1.5
+RU-UNK-2213 : 1 : 1.4
+RU-UNK-2214 : 1 : 2.3
+RU-UNK-2215 : 1 : 6.6999998
+RU-UNK-2216 : 1 : 1.8
+RU-UNK-2217 : 1 : 1.5
+RU-UNK-2218 : 1 : 10.8
+RU-UNK-2219 : 1 : 1.0
+RU-UNK-2220 : 1 : 1.4
+RU-UNK-2221 : 1 : 5.4000001
+RU-UNK-2222 : 1 : 27.1
+RU-UNK-2223 : 1 : 2.4000001
+RU-UNK-2224 : 1 : 52.900002
+RU-UNK-2225 : 1 : 1.4
+RU-UNK-2226 : 1 : 23.4
+RU-UNK-2227 : 1 : 21.0
+RU-UNK-2228 : 1 : 1.7
+RU-UNK-2229 : 1 : 18.1
+RU-UNK-2230 : 1 : 64.0
+RU-UNK-2231 : 1 : 15.9
+RU-UNK-2232 : 1 : 2.5
+RU-UNK-2233 : 1 : 54.799999
+RU-UNK-2234 : 1 : 3.7
+RU-UNK-2235 : 1 : 49.0
+RU-UNK-2236 : 1 : 21.200001
+RU-UNK-2237 : 1 : 350.79999
+RU-UNK-2238 : 1 : 18.799999
+RU-UNK-2239 : 1 : 26.6
+RU-UNK-2240 : 1 : 12.5
+RU-UNK-2241 : 1 : 2.8
+RU-UNK-2242 : 1 : 75.699997
+RU-UNK-2243 : 1 : 1.0
+RU-UNK-2244 : 1 : 5.5999999
+RU-UNK-2245 : 1 : 4.0
+RU-UNK-2246 : 1 : 6.8000002
+RU-UNK-2247 : 1 : 17.4
+RU-UNK-2248 : 1 : 1.0
+RU-UNK-2249 : 1 : 32.400002
+RU-UNK-2250 : 1 : 1.3
+RU-UNK-2251 : 1 : 88.5
+RU-UNK-2252 : 1 : 437.39999
+RU-UNK-2253 : 1 : 70.300003
+RU-UNK-2254 : 1 : 2.7
+RU-UNK-2255 : 1 : 3.2
+RU-UNK-2256 : 1 : 1.2
+RU-UNK-2257 : 1 : 91.400002
+RU-UNK-2258 : 1 : 2.0
+RU-UNK-2259 : 1 : 2.9000001
+RU-UNK-2260 : 1 : 38.700001
+RU-UNK-2261 : 1 : 1.7
+RU-UNK-2262 : 1 : 7.9000001
+RU-UNK-2263 : 1 : 26.5
+RU-UNK-2264 : 1 : 7.4000001
+RU-UNK-2265 : 1 : 13.6
+RU-UNK-2266 : 1 : 16.9
+RU-UNK-2267 : 1 : 3.0
+RU-UNK-2268 : 1 : 1.0
+RU-UNK-2269 : 1 : 1.0
+RU-UNK-2270 : 1 : 4.5
+RU-UNK-2271 : 1 : 2.0999999
+RU-UNK-2272 : 1 : 1.0
+RU-UNK-2273 : 1 : 1.0
+RU-UNK-2274 : 1 : 496.70001
+RU-UNK-2275 : 1 : 62.799999
+RU-UNK-2276 : 1 : 1.0
+RU-UNK-2277 : 1 : 1.1
+RU-UNK-2278 : 1 : 21.5
+RU-UNK-2279 : 1 : 2.5
+RU-UNK-2280 : 1 : 1.0
+RU-UNK-2281 : 1 : 24.200001
+RU-UNK-2282 : 1 : 1.3
+RU-UNK-2283 : 1 : 45.299999
+RU-UNK-2284 : 1 : 5.8000002
+RU-UNK-2285 : 1 : 3.0999999
+RU-UNK-2286 : 1 : 6.0
+RU-UNK-2287 : 1 : 4.5
+RU-UNK-2288 : 1 : 96.800003
+RU-UNK-2289 : 1 : 39.900002
+RU-UNK-2290 : 1 : 6.0
+RU-UNK-2291 : 1 : 1.0
+RU-UNK-2292 : 1 : 2.9000001
+RU-UNK-2293 : 1 : 1.1
+RU-UNK-2294 : 1 : 6.0
+RU-UNK-2295 : 1 : 1.9
+RU-UNK-2296 : 1 : 27.200001
+RU-UNK-2297 : 1 : 1.1
+RU-UNK-2298 : 1 : 3238.3
+RU-UNK-2299 : 1 : 2.0999999
+RU-UNK-2300 : 1 : 1.4
+RU-UNK-2301 : 1 : 5.5999999
+RU-UNK-2302 : 1 : 33.599998
+RU-UNK-2303 : 1 : 3.5
+RU-UNK-2304 : 1 : 56.0
+RU-UNK-2305 : 1 : 1.0
+RU-UNK-2306 : 1 : 1.6
+RU-UNK-2307 : 1 : 2.5999999
+RU-UNK-2308 : 1 : 1.0
+RU-UNK-2309 : 1 : 1.8
+RU-UNK-2310 : 1 : 98.5
+RU-UNK-2311 : 1 : 1.0
+RU-UNK-2312 : 1 : 6.0999999
+RU-UNK-2313 : 1 : 1.3
+RU-UNK-2314 : 1 : 71.599998
+RU-UNK-2315 : 1 : 6.1999998
+RU-UNK-2316 : 1 : 18.299999
+RU-UNK-2317 : 1 : 13.5
+RU-UNK-2318 : 1 : 1.0
+RU-UNK-2319 : 1 : 1.0
+RU-UNK-2320 : 1 : 1.0
+RU-UNK-2321 : 1 : 1.0
+RU-UNK-2322 : 1 : 1.4
+RU-UNK-2323 : 1 : 1.0
+RU-UNK-2324 : 1 : 138.39999
+RU-UNK-2325 : 1 : 55.5
+RU-UNK-2326 : 1 : 2049.8
+RU-UNK-2327 : 1 : 2.8
+RU-UNK-2328 : 1 : 1.0
+RU-UNK-2329 : 1 : 2.5
+RU-UNK-2330 : 1 : 3.0999999
+RU-UNK-2331 : 1 : 14.3
+RU-UNK-2332 : 1 : 4.0
+RU-UNK-2333 : 1 : 5.3000002
+RU-UNK-2334 : 1 : 130.10001
+RU-UNK-2335 : 1 : 2.2
+RU-UNK-2336 : 1 : 1.9
+RU-UNK-2337 : 1 : 1.0
+RU-UNK-2338 : 1 : 33.700001
+RU-UNK-2339 : 1 : 3.9000001
+RU-UNK-2340 : 1 : 1.8
+RU-UNK-2341 : 1 : 2.4000001
+RU-UNK-2342 : 1 : 9.1000004
+RU-UNK-2343 : 1 : 8.6000004
+RU-UNK-2344 : 1 : 2.0999999
+RU-UNK-2345 : 1 : 1.0
+RU-UNK-2346 : 1 : 1.0
+RU-UNK-2347 : 1 : 1.0
+RU-UNK-2348 : 1 : 4.1999998
+RU-UNK-2349 : 1 : 8.3000002
+RU-UNK-2350 : 1 : 5.0999999
+RU-UNK-2351 : 1 : 1.3
+RU-UNK-2352 : 1 : 2.2
+RU-UNK-2353 : 1 : 1.2
+RU-UNK-2354 : 1 : 1.0
+RU-UNK-2355 : 1 : 16.5
+RU-UNK-2356 : 1 : 17.1
+RU-UNK-2357 : 1 : 2.3
+RU-UNK-2358 : 1 : 36.5
+RU-UNK-2359 : 1 : 6.1999998
+RU-UNK-2360 : 1 : 5.5999999
+RU-UNK-2361 : 1 : 1.0
+RU-UNK-2362 : 1 : 5.5
+RU-UNK-2363 : 1 : 1.4
+RU-UNK-2364 : 1 : 1.0
+RU-UNK-2365 : 1 : 2.4000001
+RU-UNK-2366 : 1 : 149.3
+RU-UNK-2367 : 1 : 114.7
+RU-UNK-2368 : 1 : 3.2
+RU-UNK-2369 : 1 : 2.4000001
+RU-UNK-2370 : 1 : 3.5999999
+RU-UNK-2371 : 1 : 1.0
+RU-UNK-2372 : 1 : 4.0999999
+RU-UNK-2373 : 1 : 4989.2998
+RU-UNK-2374 : 1 : 3.8
+RU-UNK-2375 : 1 : 6.0
+RU-UNK-2376 : 1 : 1.0
+RU-UNK-2377 : 1 : 1.0
+RU-UNK-2378 : 1 : 1.0
+RU-UNK-2379 : 1 : 9.3999996
+RU-UNK-2380 : 1 : 68.699997
+RU-UNK-2381 : 1 : 14.1
+RU-UNK-2382 : 1 : 1.5
+RU-UNK-2383 : 1 : 6.0
+RU-UNK-2384 : 1 : 1.7
+RU-UNK-2385 : 1 : 107.8
+RU-UNK-2386 : 1 : 1.0
+RU-UNK-2387 : 1 : 85.900002
+RU-UNK-2388 : 1 : 3.3
+RU-UNK-2389 : 1 : 2.4000001
+RU-UNK-2390 : 1 : 2.0
+RU-UNK-2391 : 1 : 2.2
+RU-UNK-2392 : 1 : 6.5
+RU-UNK-2393 : 1 : 1.0
+RU-UNK-2394 : 1 : 10.9
+RU-UNK-2395 : 1 : 3.5999999
+RU-UNK-2396 : 1 : 1.0
+RU-UNK-2397 : 1 : 1.4
+RU-UNK-2398 : 1 : 1.4
+RU-UNK-2399 : 1 : 16.6
+RU-UNK-2400 : 1 : 6.9000001
+RU-UNK-2401 : 1 : 1.7
+RU-UNK-2402 : 1 : 4.5
+RU-UNK-2403 : 1 : 1.0
+RU-UNK-2404 : 1 : 1.0
+RU-UNK-2405 : 1 : 9.5
+RU-UNK-2406 : 1 : 1.0
+RU-UNK-2407 : 1 : 20.5
+RU-UNK-2408 : 1 : 2.0999999
+RU-UNK-2409 : 1 : 5.3000002
+RU-UNK-2410 : 1 : 9.8999996
+RU-UNK-2411 : 1 : 1.0
+RU-UNK-2412 : 1 : 1.3
+RU-UNK-2413 : 1 : 3.8
+RU-UNK-2414 : 1 : 16.5
+RU-UNK-2415 : 1 : 3.0
+RU-UNK-2416 : 1 : 34.099998
+RU-UNK-2417 : 1 : 2.0999999
+RU-UNK-2418 : 1 : 1.4
+RU-UNK-2419 : 1 : 1.0
+RU-UNK-2420 : 1 : 1.7
+RU-UNK-2421 : 1 : 2.7
+RU-UNK-2422 : 1 : 1.0
+RU-UNK-2423 : 1 : 1.9
+RU-UNK-2424 : 1 : 1.0
+RU-UNK-2425 : 1 : 1.1
+RU-UNK-2426 : 1 : 1.0
+RU-UNK-2427 : 1 : 1.0
+RU-UNK-2428 : 1 : 9.8000002
+RU-UNK-2429 : 1 : 1.0
+RU-UNK-2430 : 1 : 3.9000001
+RU-UNK-2431 : 1 : 3.4000001
+RU-UNK-2432 : 1 : 2.4000001
+RU-UNK-2433 : 1 : 1.7
+RU-UNK-2434 : 1 : 108.1
+RU-UNK-2435 : 1 : 2.2
+RU-UNK-2436 : 1 : 1.8
+RU-UNK-2437 : 1 : 6.0
+RU-UNK-2438 : 1 : 6.1999998
+RU-UNK-2439 : 1 : 40.099998
+RU-UNK-2440 : 1 : 1.0
+RU-UNK-2441 : 1 : 1.0
+RU-UNK-2442 : 1 : 8.3999996
+RU-UNK-2443 : 1 : 2.8
+RU-UNK-2444 : 1 : 34.400002
+RU-UNK-2445 : 1 : 1.0
+RU-UNK-2446 : 1 : 1.6
+RU-UNK-2447 : 1 : 1.9
+RU-UNK-2448 : 1 : 4.9000001
+RU-UNK-2449 : 1 : 2.4000001
+RU-UNK-2450 : 1 : 1.0
+RU-UNK-2451 : 1 : 1.0
+RU-UNK-2452 : 1 : 1.0
+RU-UNK-2453 : 1 : 1.4
+RU-UNK-2454 : 1 : 26.4
+RU-UNK-2455 : 1 : 1.0
+RU-UNK-2456 : 1 : 2.8
+RU-UNK-2457 : 1 : 1.3
+RU-UNK-2458 : 1 : 1.3
+RU-UNK-2459 : 1 : 1.0
+RU-UNK-2460 : 1 : 1.0
+RU-UNK-2461 : 1 : 1.6
+RU-UNK-2462 : 1 : 1.0
+RU-UNK-2463 : 1 : 1.0
+RU-UNK-2464 : 1 : 8.3999996
+RU-UNK-2465 : 1 : 2.3
+RU-UNK-2466 : 1 : 6.9000001
+RU-UNK-2467 : 1 : 3.9000001
+RU-UNK-2468 : 1 : 4.4000001
+RU-UNK-2469 : 1 : 10.8
+RU-UNK-2470 : 1 : 3.7
+RU-UNK-2471 : 1 : 32.299999
+RU-UNK-2472 : 1 : 10.5
+RU-UNK-2473 : 1 : 14.7
+RU-UNK-2474 : 1 : 4.3000002
+RU-UNK-2475 : 1 : 1.6
+RU-UNK-2476 : 1 : 1.0
+RU-UNK-2477 : 1 : 4.9000001
+RU-UNK-2478 : 1 : 4.4000001
+RU-UNK-2479 : 1 : 2.8
+RU-UNK-2480 : 1 : 1.0
+RU-UNK-2481 : 1 : 1.0
+RU-UNK-2482 : 1 : 19.1
+RU-UNK-2483 : 1 : 8.1999998
+RU-UNK-2484 : 1 : 5.1999998
+RU-UNK-2485 : 1 : 2.0
+RU-UNK-2486 : 1 : 1.2
+RU-UNK-2487 : 1 : 1.4
+RU-UNK-2488 : 1 : 4.6999998
+RU-UNK-2489 : 1 : 1.2
+RU-UNK-2490 : 1 : 1.0
+RU-UNK-2491 : 1 : 1.5
+RU-UNK-2492 : 1 : 1287.6
+RU-UNK-2493 : 1 : 1.2
+RU-UNK-2494 : 1 : 6.5
+RU-UNK-2495 : 1 : 824.90002
+RU-UNK-2496 : 1 : 77.099998
+RU-UNK-2497 : 1 : 1.0
+RU-UNK-2498 : 1 : 1.0
+RU-UNK-2499 : 1 : 1.0
+RU-UNK-2500 : 1 : 4.3000002
+RU-UNK-2501 : 1 : 8.6000004
+RU-UNK-2502 : 1 : 68.300003
+RU-UNK-2503 : 1 : 1.4
+RU-UNK-2504 : 1 : 80.400002
+RU-UNK-2505 : 1 : 4.0999999
+RU-UNK-2506 : 1 : 36.900002
+RU-UNK-2507 : 1 : 1.8
+RU-UNK-2508 : 1 : 216.89999
+RU-UNK-2509 : 1 : 207.60001
+RU-UNK-2510 : 1 : 101.2
+RU-UNK-2511 : 1 : 2.3
+RU-UNK-2512 : 1 : 1.5
+RU-UNK-2513 : 1 : 5.0
+RU-UNK-2514 : 1 : 3.8
+RU-UNK-2515 : 1 : 1.8
+RU-UNK-2516 : 1 : 1.0
+RU-UNK-2517 : 1 : 1.0
+RU-UNK-2518 : 1 : 35.900002
+RU-UNK-2519 : 1 : 405.10001
+RU-UNK-2520 : 1 : 72.199997
+RU-UNK-2521 : 1 : 1.8
+RU-UNK-2522 : 1 : 1.0
+RU-UNK-2523 : 1 : 3.8
+RU-UNK-2524 : 1 : 98.300003
+RU-UNK-2525 : 1 : 6.5
+RU-UNK-2526 : 1 : 1.7
+RU-UNK-2527 : 1 : 7.6999998
+RU-UNK-2528 : 1 : 1.0
+RU-UNK-2529 : 1 : 5.5
+RU-UNK-2530 : 1 : 1.0
+RU-UNK-2531 : 1 : 4.3000002
+RU-UNK-2532 : 1 : 1.3
+RU-UNK-2533 : 1 : 1.0
+RU-UNK-2534 : 1 : 1.2
+RU-UNK-2535 : 1 : 1.3
+RU-UNK-2536 : 1 : 1.0
+RU-UNK-2537 : 1 : 11.0
+RU-UNK-2538 : 1 : 1.0
+RU-UNK-2539 : 1 : 1.0
+RU-UNK-2540 : 1 : 2.4000001
+RU-UNK-2541 : 1 : 1.3
+RU-UNK-2542 : 1 : 1.0
+RU-UNK-2543 : 1 : 1.0
+RU-UNK-2544 : 1 : 5.0
+RU-UNK-2545 : 1 : 2.0999999
+RU-UNK-2546 : 1 : 4.6999998
+RU-UNK-2547 : 1 : 4.9000001
+RU-UNK-2548 : 1 : 4.9000001
+RU-UNK-2549 : 1 : 13.4
+RU-UNK-2550 : 1 : 1.0
+RU-UNK-2551 : 1 : 2.5
+RU-UNK-2552 : 1 : 2.4000001
+RU-UNK-2553 : 1 : 1.0
+RU-UNK-2554 : 1 : 16.6
+RU-UNK-2555 : 1 : 1.4
+RU-UNK-2556 : 1 : 1.0
+RU-UNK-2557 : 1 : 29.6
+RU-UNK-2558 : 1 : 74.400002
+RU-UNK-2559 : 1 : 16.1
+RU-UNK-2560 : 1 : 1.0
+RU-UNK-2561 : 1 : 1.0
+RU-UNK-2562 : 1 : 17.6
+RU-UNK-2563 : 1 : 2.5999999
+RU-UNK-2564 : 1 : 22.1
+RU-UNK-2565 : 1 : 1.0
+RU-UNK-2566 : 1 : 2.9000001
+RU-UNK-2567 : 1 : 2.8
+RU-UNK-2568 : 1 : 1.2
+RU-UNK-2569 : 1 : 1.0
+RU-UNK-2570 : 1 : 17.200001
+RU-UNK-2571 : 1 : 1.2
+RU-UNK-2572 : 1 : 1.0
+RU-UNK-2573 : 1 : 1.9
+RU-UNK-2574 : 1 : 1.0
+RU-UNK-2575 : 1 : 29.1
+RU-UNK-2576 : 1 : 1.2
+RU-UNK-2577 : 1 : 1.0
+RU-UNK-2578 : 1 : 1.0
+RU-UNK-2579 : 1 : 1.0
+RU-UNK-2580 : 1 : 1.5
+RU-UNK-2581 : 1 : 5.3000002
+RU-UNK-2582 : 1 : 1.3
+RU-UNK-2583 : 1 : 4.0
+RU-UNK-2584 : 1 : 253.0
+RU-UNK-2585 : 1 : 1.0
+RU-UNK-2586 : 1 : 1.7
+RU-UNK-2587 : 1 : 8.3999996
+RU-UNK-2588 : 1 : 1.1
+RU-UNK-2589 : 1 : 88.099998
+RU-UNK-2590 : 1 : 15.7
+RU-UNK-2591 : 1 : 3.0
+RU-UNK-2592 : 1 : 29.200001
+RU-UNK-2593 : 1 : 1.0
+RU-UNK-2594 : 1 : 1.0
+RU-UNK-2595 : 1 : 1.9
+RU-UNK-2596 : 1 : 3.4000001
+RU-UNK-2597 : 1 : 49.799999
+RU-UNK-2598 : 1 : 1.3
+RU-UNK-2599 : 1 : 8.6000004
+RU-UNK-2600 : 1 : 14.8
+RU-UNK-2601 : 1 : 1.0
+RU-UNK-2602 : 1 : 61.400002
+RU-UNK-2603 : 1 : 1.0
+RU-UNK-2604 : 1 : 3.8
+RU-UNK-2605 : 1 : 63.5
+RU-UNK-2606 : 1 : 3.5
+RU-UNK-2607 : 1 : 32.599998
+RU-UNK-2608 : 1 : 1.0
+RU-UNK-2609 : 1 : 1.2
+RU-UNK-2610 : 1 : 1.0
+RU-UNK-2611 : 1 : 1.6
+RU-UNK-2612 : 1 : 1.0
+RU-UNK-2613 : 1 : 1.0
+RU-UNK-2614 : 1 : 1.0
+RU-UNK-2615 : 1 : 3.5
+RU-UNK-2616 : 1 : 2.0999999
+RU-UNK-2617 : 1 : 1.0
+RU-UNK-2618 : 1 : 11.9
+RU-UNK-2619 : 1 : 3.3
+RU-UNK-2620 : 1 : 33.200001
+RU-UNK-2621 : 1 : 1.0
+RU-UNK-2622 : 1 : 1.3
+RU-UNK-2623 : 1 : 1.0
+RU-UNK-2624 : 1 : 5.1999998
+RU-UNK-2625 : 1 : 1.0
+RU-UNK-2626 : 1 : 1.1
+RU-UNK-2627 : 1 : 1.0
+RU-UNK-2628 : 1 : 11.9
+RU-UNK-2629 : 1 : 1.0
+RU-UNK-2630 : 1 : 1.0
+RU-UNK-2631 : 1 : 1.0
+RU-UNK-2632 : 1 : 3.5
+RU-UNK-2633 : 1 : 1.0
+RU-UNK-2634 : 1 : 10216.5
+RU-UNK-2635 : 1 : 1.7
+RU-UNK-2636 : 1 : 17845.4
+RU-UNK-2637 : 1 : 13.1
+RU-UNK-2638 : 1 : 1.0
+RU-UNK-2639 : 1 : 2.0
+RU-UNK-2640 : 1 : 2.0
+RU-UNK-2641 : 1 : 1.4
+RU-UNK-2642 : 1 : 2.0
+RU-UNK-2643 : 1 : 1.8
+RU-UNK-2644 : 1 : 630.09998
+RU-UNK-2645 : 1 : 4.4000001
+RU-UNK-2646 : 1 : 1.0
+RU-UNK-2647 : 1 : 1.0
+RU-UNK-2648 : 1 : 1.0
+RU-UNK-2649 : 1 : 1.0
+RU-UNK-2650 : 1 : 4.0
+RU-UNK-2651 : 1 : 1.0
+RU-UNK-2652 : 1 : 1.0
+RU-UNK-2653 : 1 : 2.0999999
+RU-UNK-2654 : 1 : 1.0
+RU-UNK-2655 : 1 : 2.5999999
+RU-UNK-2656 : 1 : 1.0
+RU-UNK-2657 : 1 : 1.0
+RU-UNK-2658 : 1 : 15.0
+RU-UNK-2659 : 1 : 2.5999999
+RU-UNK-2660 : 1 : 1.0
+RU-UNK-2661 : 1 : 1.0
+RU-UNK-2662 : 1 : 7.6999998
+RU-UNK-2663 : 1 : 1.0
+RU-UNK-2664 : 1 : 1.1
+RU-UNK-2665 : 1 : 1.2
+RU-UNK-2666 : 1 : 1.0
+RU-UNK-2667 : 1 : 17.1
+RU-UNK-2668 : 1 : 1.4
+RU-UNK-2669 : 1 : 1.2
+RU-UNK-2670 : 1 : 20.0
+RU-UNK-2671 : 1 : 47.799999
+RU-UNK-2672 : 1 : 22.9
+RU-UNK-2673 : 1 : 4.5
+RU-UNK-2674 : 1 : 2.2
+RU-UNK-2675 : 1 : 13.3
+RU-UNK-2676 : 1 : 15.5
+RU-UNK-2677 : 1 : 1.9
+RU-UNK-2678 : 1 : 1.0
+RU-UNK-2679 : 1 : 3.2
+RU-UNK-2680 : 1 : 6.5
+RU-UNK-2681 : 1 : 3.4000001
+RU-UNK-2682 : 1 : 1.9
+RU-UNK-2683 : 1 : 1.0
+RU-UNK-2684 : 1 : 1927.7
+RU-UNK-2685 : 1 : 7.4000001
+RU-UNK-2686 : 1 : 1.9
+RU-UNK-2687 : 1 : 255.2
+RU-UNK-2688 : 1 : 1.0
+RU-UNK-2689 : 1 : 1933.1
+RU-UNK-2690 : 1 : 37.099998
+RU-UNK-2691 : 1 : 1.2
+RU-UNK-2692 : 1 : 5534.2998
+RU-UNK-2693 : 1 : 121.7
+RU-UNK-2694 : 1 : 2214.6001
+RU-UNK-2695 : 1 : 2808.2
+RU-UNK-2696 : 1 : 1115.6
+RU-UNK-2697 : 1 : 1.0
+RU-UNK-2698 : 1 : 49.099998
+RU-UNK-2699 : 1 : 600.29999
+RU-UNK-2700 : 1 : 149.7
+RU-UNK-2701 : 1 : 1.4
+RU-UNK-2702 : 1 : 326.29999
+RU-UNK-2703 : 1 : 40.299999
+RU-UNK-2704 : 1 : 15143.6
+RU-UNK-2705 : 1 : 1.0
+RU-UNK-2706 : 1 : 1689.9
+RU-UNK-2707 : 1 : 9072.0
+RU-UNK-2708 : 1 : 489.20001
+RU-UNK-2709 : 1 : 2377.7
+RU-UNK-2710 : 1 : 29626.4
+RU-UNK-2711 : 1 : 29626.4
+RU-UNK-2712 : 1 : 40.400002
+RU-UNK-2713 : 1 : 1871.6
+RU-UNK-2714 : 1 : 375.79999
+RU-UNK-2715 : 1 : 24.5
+RU-UNK-2716 : 1 : 1.0
+RU-UNK-2717 : 1 : 5.5999999
+RU-UNK-2718 : 1 : 1.0
+RU-UNK-2719 : 1 : 1216.6
+RU-UNK-2720 : 1 : 7.9000001
+RU-UNK-2721 : 1 : 28.200001
+RU-UNK-2722 : 1 : 5.9000001
+RU-UNK-2723 : 1 : 3.0999999
+RU-UNK-2724 : 1 : 5.8000002
+RU-UNK-2725 : 1 : 74.099998
+RU-UNK-2726 : 1 : 67.900002
+RU-UNK-2727 : 1 : 5.3000002
+RU-UNK-2728 : 1 : 4.0
+RU-UNK-2729 : 1 : 31.1
+RU-UNK-2730 : 1 : 1.0
+RU-UNK-2731 : 1 : 12.7
+RU-UNK-2732 : 1 : 13.3
+RU-UNK-2733 : 1 : 1.1
+RU-UNK-2734 : 1 : 19.1
+RU-UNK-2735 : 1 : 1.0
+RU-UNK-2736 : 1 : 1.0
+RU-UNK-2737 : 1 : 1.8
+RU-UNK-2738 : 1 : 2.5
+RU-UNK-2739 : 1 : 2.7
+RU-UNK-2740 : 1 : 1901.8
+RU-UNK-2741 : 1 : 1.6
+RU-UNK-2742 : 1 : 3.2
+RU-UNK-2743 : 1 : 11.2
+RU-UNK-2744 : 1 : 1.0
+RU-UNK-2745 : 1 : 8.0
+RU-UNK-2746 : 1 : 2.5999999
+RU-UNK-2747 : 1 : 1.0
+RU-UNK-2748 : 1 : 2.7
+RU-UNK-2749 : 1 : 1.2
+RU-UNK-2750 : 1 : 1.0
+RU-UNK-2751 : 1 : 1.0
+RU-UNK-2752 : 1 : 1.0
+RU-UNK-2753 : 1 : 1.0
+RU-UNK-2754 : 1 : 1.2
+RU-UNK-2755 : 1 : 154.7
+RU-UNK-2756 : 1 : 9.3999996
+RU-UNK-2757 : 1 : 51.599998
+RU-UNK-2758 : 1 : 74.099998
+RU-UNK-2759 : 1 : 3936.2
+RU-UNK-2760 : 1 : 5.9000001
+RU-UNK-2761 : 1 : 30.299999
+RU-UNK-2762 : 1 : 1.0
+RU-UNK-2763 : 1 : 1.0
+RU-UNK-2764 : 1 : 2.0999999
+RU-UNK-2765 : 1 : 3.9000001
+RU-UNK-2766 : 1 : 2269.3
+RU-UNK-2767 : 1 : 2.7
+RU-UNK-2768 : 1 : 7.0999999
+RU-UNK-2769 : 1 : 22.299999
+RU-UNK-2770 : 1 : 13.8
+RU-UNK-2771 : 1 : 32.200001
+RU-UNK-2772 : 1 : 18.799999
+RU-UNK-2773 : 1 : 3.0999999
+RU-UNK-2774 : 1 : 65.099998
+RU-UNK-2775 : 1 : 2.2
+RU-UNK-2776 : 1 : 1.9
+RU-UNK-2777 : 1 : 12.3
+RU-UNK-2778 : 1 : 16.6
+RU-UNK-2779 : 1 : 23.5
+RU-UNK-2780 : 1 : 2.7
+RU-UNK-2781 : 1 : 7.1999998
+RU-UNK-2782 : 1 : 8.8999996
+RU-UNK-2783 : 1 : 18.6
+RU-UNK-2784 : 1 : 34.400002
+RU-UNK-2785 : 1 : 237.39999
+RU-UNK-2786 : 1 : 94.0
+RU-UNK-2787 : 1 : 5.0
+RU-UNK-2788 : 1 : 2899.3
+RU-UNK-2789 : 1 : 30.4
+RU-UNK-2790 : 1 : 4.3000002
+RU-UNK-2791 : 1 : 515.09998
+RU-UNK-2792 : 1 : 4.9000001
+RU-UNK-2793 : 1 : 2.5999999
+RU-UNK-2794 : 1 : 1.0
+RU-UNK-2795 : 1 : 2.5
+RU-UNK-2796 : 1 : 34.099998
+RU-UNK-2797 : 1 : 3.5
+RU-UNK-2798 : 1 : 6.3000002
+RU-UNK-2799 : 1 : 110.9
+RU-UNK-2800 : 1 : 1.6
+RU-UNK-2801 : 1 : 1.0
+RU-UNK-2802 : 1 : 1.1
+RU-UNK-2803 : 1 : 12.0
+RU-UNK-2804 : 1 : 65.5
+RU-UNK-2805 : 1 : 16.0
+RU-UNK-2806 : 1 : 12.4
+RU-UNK-2807 : 1 : 1.0
+RU-UNK-2808 : 1 : 3.3
+RU-UNK-2809 : 1 : 1.3
+RU-UNK-2810 : 1 : 109.3
+RU-UNK-2811 : 1 : 15.0
+RU-UNK-2812 : 1 : 6.6999998
+RU-UNK-2813 : 1 : 1.0
+RU-UNK-2814 : 1 : 30.6
+RU-UNK-2815 : 1 : 6.1999998
+RU-UNK-2816 : 1 : 1.7
+RU-UNK-2817 : 1 : 1.6
+RU-UNK-2818 : 1 : 17.1
+RU-UNK-2819 : 1 : 1.0
+RU-UNK-2820 : 1 : 1.7
+RU-UNK-2821 : 1 : 1.0
+RU-UNK-2822 : 1 : 5.8000002
+RU-UNK-2823 : 1 : 2.8
+RU-UNK-2824 : 1 : 33.900002
+Mourmanskaïa oblast;Pechengskiy : 1 : 13221.8
+Nenetski national okroug;Nenetsky nat. okroug : 1 : 168149.09
+Mourmanskaïa oblast;Kolskiy : 1 : 23501.0
+Mourmanskaïa oblast;Severomorsk : 1 : 503.60001
+Mourmanskaïa oblast;Polyarnyi : 1 : 4.0999999
+Mourmanskaïa oblast;Murmansk : 1 : 80.199997
+Mourmanskaïa oblast;Lovozerskiy : 1 : 52675.602
+Komi;Vorkuta : 1 : 20817.699
+Mourmanskaïa oblast;Olenegorsk : 1 : 1795.5
+Mourmanskaïa oblast;Monchegorsk : 1 : 3359.2
+Mourmanskaïa oblast;Kovdorskiy : 1 : 4106.0
+Mourmanskaïa oblast;Kirovsk : 1 : 3612.8
+Mourmanskaïa oblast;Apatity : 1 : 3668.8999
+Nenetski national okroug;Naryan-Mar : 1 : 63.799999
+Mourmanskaïa oblast;Kandalaksha : 1 : 12665.2
+Mourmanskaïa oblast;Polyarniye Zory : 1 : 104.5
+Mourmanskaïa oblast;Terskiy : 1 : 19075.0
+Komi;Ust-Tsilemskiy : 1 : 41055.699
+Komi;Usinskiy : 1 : 32542.801
+Komi;Inta : 1 : 32664.301
+Karelia;Loukhskiy : 1 : 21608.4
+Arkhangelskaïa oblast rés;Mezenskiy : 1 : 34156.301
+Komi;Izhemskiy : 1 : 19001.199
+Komi;Usinsk : 1 : 1.6
+Karelia;Kemskiy : 1 : 7664.3999
+Arkhangelskaïa oblast rés;Primorskiy : 1 : 23010.0
+Komi;Pechorskiy : 1 : 28659.4
+Karelia;Kalevalskiy : 1 : 17015.801
+Arkhangelskaïa oblast rés;Leshukonskiy : 1 : 28318.699
+Arkhangelskaïa oblast rés;Pinezhskiy : 1 : 30426.801
+Arkhangelskaïa oblast rés;Solovetskiy : 1 : 48.299999
+Komi;Pechora : 1 : 6.4000001
+Karelia;Kem' : 1 : 3.3
+Karelia;Belomorskiy : 1 : 12977.2
+Komi;Udorskiy : 1 : 35913.398
+RU-UNK-2825 : 1 : 22984.801
+RU-UNK-2826 : 1 : 22984.801
+Arkhangelskaïa oblast rés;Kholmogorskiy : 1 : 15569.4
+Karelia;Kostomuksha : 1 : 6.0999999
+Arkhangelskaïa oblast rés;Arkhangelsk : 1 : 45.200001
+Arkhangelskaïa oblast rés;Severodvinsk : 1 : 21.4
+Arkhangelskaïa oblast rés;Onezhskiy : 1 : 22612.0
+Komi;Knyazhpogostskiy : 1 : 24210.1
+Karelia;Muyezerskiy : 1 : 17887.4
+Komi;Sosnogorskiy : 1 : 17028.699
+Komi;Ukhta : 1 : 13566.3
+Arkhangelskaïa oblast rés;Novodvinsk : 1 : 9.0
+Karelia;Segezhskiy : 1 : 10783.2
+Arkhangelskaïa oblast rés;Plesetskiy : 1 : 27096.301
+Arkhangelskaïa oblast rés;Onega : 1 : 8.3999996
+Komi;Vuktylskiy : 1 : 8.1999998
+Karelia;Medvezhyegorskiy : 1 : 13374.3
+Karelia;Segezha : 1 : 5.0999999
+Komi;Troitsko-Pechorskiy : 1 : 39138.199
+Arkhangelskaïa oblast rés;Vinogradovskiy : 1 : 12538.5
+Komi;Sosnogorsk : 1 : 1.0
+Arkhangelskaïa oblast rés;Verkhnetoyemskiy : 1 : 20162.801
+Karelia;Suoyarvskiy : 1 : 13628.1
+Karelia;Kondopozhskiy : 1 : 6682.2002
+Komi;Kortkerosskiy : 1 : 19726.199
+Arkhangelskaïa oblast rés;Lenskiy : 1 : 9060.9004
+Karelia;Pudozhskiy : 1 : 13101.1
+Komi;Ust-Vymskiy : 1 : 4648.3999
+Komi;Ust-Kulomskiy : 1 : 26636.699
+Arkhangelskaïa oblast rés;Shenkurskiy : 1 : 10780.9
+Arkhangelskaïa oblast rés;Nyandomskiy : 1 : 8018.7002
+Arkhangelskaïa oblast rés;Krasnoborskiy : 1 : 8829.9004
+Karelia;Kondopoga : 1 : 5.1999998
+Karelia;Sortavala : 1 : 2074.0
+Komi;Syktyvdinskiy : 1 : 7267.3999
+Arkhangelskaïa oblast rés;Kargapolskiy : 1 : 9522.5996
+Karelia;Pryazhinskiy : 1 : 6358.8999
+Karelia;Prionezhskiy : 1 : 3794.3
+Arkhangelskaïa oblast rés;Velskiy : 1 : 10063.5
+Karelia;Pitkyarantskiy : 1 : 1384.5
+Arkhangelskaïa oblast rés;Ustyanskiy : 1 : 12198.3
+Arkhangelskaïa oblast rés;Kotlasskiy : 1 : 8571.2998
+Komi;Syktyvkvar : 1 : 669.79999
+Karelia;Petrozavodsk : 1 : 76.400002
+Karelia;Lakhdenpokhskiy : 1 : 2102.3999
+Arkhangelskaïa oblast rés;Vilegodskiy : 1 : 6415.2998
+Karelia;Pytkiaranta : 1 : 3.0
+Vologodskaïa oblast;Vytegorskiy : 1 : 13743.1
+Komi;Sysolskiy : 1 : 6248.0
+Karelia;Olonetskiy : 1 : 3991.3
+Arkhangelskaïa oblast rés;Konoshskiy : 1 : 9548.0996
+Arkhangelskaïa oblast rés;Koryazhma : 1 : 7.4000001
+Arkhangelskaïa oblast rés;Kotlas : 1 : 10.2
+Vologodskaïa oblast;Velikoustyugskiy : 1 : 8029.2998
+Komi;Priluzskiy : 1 : 13794.2
+Vologodskaïa oblast;Tarnogskiy : 1 : 5514.2998
+Komi;Koygorodskiy : 1 : 10264.3
+Vologodskaïa oblast;Nyuksenskiy : 1 : 5038.3999
+Vologodskaïa oblast;Verkhovazhskiy : 1 : 4427.7002
+Vologodskaïa oblast;Kirillovskiy : 1 : 5289.8999
+Vologodskaïa oblast;Velikiy Ustyug : 1 : 11.7
+Vologodskaïa oblast;Vozhegodskiy : 1 : 5484.5
+Vologodskaïa oblast;Vashkinskiy : 1 : 3122.3
+Vologodskaïa oblast;Belozerskiy : 1 : 6113.1001
+Vologodskaïa oblast;Babayevskiy : 1 : 9128.0996
+Vologodskaïa oblast;Kichmengsko Gorodetskiy : 1 : 7431.8999
+Vologodskaïa oblast;Kharovskiy : 1 : 3547.8999
+Vologodskaïa oblast;Totemskiy : 1 : 7856.8999
+Vologodskaïa oblast;Syamzhenskiy : 1 : 3893.2
+Vologodskaïa oblast;Uct-Kubinskiy : 1 : 2708.7
+Vologodskaïa oblast;Babushkinskiy : 1 : 7380.3999
+Vologodskaïa oblast;Nikolskiy : 1 : 7034.7998
+Vologodskaïa oblast;Vologodskiy : 1 : 4903.5
+Vologodskaïa oblast;Sokolskiy : 1 : 3988.0
+Vologodskaïa oblast;Kaduyskiy : 1 : 3349.6001
+Vologodskaïa oblast;Cherepovetskiy : 1 : 4856.2998
+Vologodskaïa oblast;Sheksninskiy : 1 : 2468.2
+Vologodskaïa oblast;Mezhdurechenskiy : 1 : 3705.7
+Vologodskaïa oblast;Sokol : 1 : 7.5
+Vologodskaïa oblast;Chagodeschenskiy : 1 : 2307.7
+Vologodskaïa oblast;Vologda : 1 : 24.4
+Vologodskaïa oblast;Ustyuzhenskiy : 1 : 3685.6001
+Vologodskaïa oblast;Cherepovetz : 1 : 1.0
+Vologodskaïa oblast;Gryazovetskiy : 1 : 4507.3999
+RU-UNK-2827 : 1 : 22984.801
+RU-UNK-2828 : 1 : 22984.801
+Tambovskaïa oblast;Morshanskiy : 1 : 2755.8999
+Lipetskaïa oblast;Chaplyginskiy : 1 : 1628.3
+Lipetskaïa oblast;Dankovskiy : 1 : 1752.8
+Tambovskaïa oblast;Staroyuryevskiy : 1 : 1164.4
+Tambovskaïa oblast;Sosnovskiy : 1 : 2121.8999
+Tambovskaïa oblast;Morshansk : 1 : 30.700001
+Lipetskaïa oblast;Lev -Tolstovskiy : 1 : 856.09998
+Tambovskaïa oblast;Pervomayskiy : 1 : 942.79999
+Tambovskaïa oblast;Pichayevskiy : 1 : 1183.2
+Lipetskaïa oblast;Dankov : 1 : 1.0
+Tambovskaïa oblast;Michurinskiy : 1 : 1526.9
+Tambovskaïa oblast;Nikiforovskiy : 1 : 1219.9
+Lipetskaïa oblast;Lebedyanskiy : 1 : 1544.6
+Tambovskaïa oblast;Bondarskiy : 1 : 1083.6
+Tambovskaïa oblast;Gavrilovskiy : 1 : 1070.7
+Tambovskaïa oblast;Tambovskiy : 1 : 2582.8
+Lipetskaïa oblast;Krasninskiy : 1 : 970.79999
+Lipetskaïa oblast;Dobrovskiy : 1 : 1117.5
+Lipetskaïa oblast;Stanovlyanskiy : 1 : 1288.4
+Tambovskaïa oblast;Michurinsk : 1 : 102.2
+Tambovskaïa oblast;Kirsanovskiy : 1 : 1159.3
+Tambovskaïa oblast;Rasskazovskiy : 1 : 1950.2
+Lipetskaïa oblast;Izmalkovskiy : 1 : 1318.9
+Tambovskaïa oblast;Umetskiy : 1 : 1279.6
+Lipetskaïa oblast;Lipetskiy : 1 : 1447.4
+Tambovskaïa oblast;Petrovskiy : 1 : 1838.3
+Lipetskaïa oblast;Zadonskiy : 1 : 1600.9
+Lipetskaïa oblast;Yeletskiy : 1 : 1140.7
+Tambovskaïa oblast;Tambov : 1 : 9.5
+Lipetskaïa oblast;Lipetsk : 1 : 194.89999
+Lipetskaïa oblast;Gryazinskiy : 1 : 1639.4
+Tambovskaïa oblast;Rasskazovo : 1 : 34.900002
+Tambovskaïa oblast;Kirsanovo : 1 : 9.0
+Lipetskaïa oblast;Eletz : 1 : 41.400002
+Tambovskaïa oblast;Kotovsk : 1 : 22.5
+Tambovskaïa oblast;Znamenskiy : 1 : 1231.9
+Tambovskaïa oblast;Inzhavinskiy : 1 : 1912.5
+Lipetskaïa oblast;Gryazy : 1 : 1.1
+Lipetskaïa oblast;Dolgorukovskiy : 1 : 998.59998
+Lipetskaïa oblast;Dobrinskiy : 1 : 1655.1
+Tambovskaïa oblast;Mordovskiy : 1 : 1808.2
+Tambovskaïa oblast;Sampurskiy : 1 : 986.79999
+Tambovskaïa oblast;Rzhaksinskiy : 1 : 1172.0
+Kourskaïa oblast;Zheleznogorskiy : 1 : 857.79999
+Kourskaïa oblast;Ponyrovskiy : 1 : 867.5
+Kourskaïa oblast;Dmitriyevskiy : 1 : 1458.8
+Lipetskaïa oblast;Usmanskiy : 1 : 1856.1
+Lipetskaïa oblast;Khlevenskiy : 1 : 771.90002
+Kourskaïa oblast;Fatezhskiy : 1 : 1565.4
+RU-UNK-2829 : 1 : 9.5
+Lipetskaïa oblast;Terbunskiy : 1 : 1250.0
+Tambovskaïa oblast;Tokarevskiy : 1 : 1266.8
+Lipetskaïa oblast;Volovskiy : 1 : 784.90002
+Kourskaïa oblast;Zolotukhinskiy : 1 : 1127.4
+Tambovskaïa oblast;Uvarovskiy : 1 : 1152.0
+Kourskaïa oblast;Schigrovskiy : 1 : 1430.4
+Voronejskaïa oblast;Ramonskiy : 1 : 1218.0
+Tambovskaïa oblast;Muchkapskiy : 1 : 1136.6
+Voronejskaïa oblast;Semilukskiy : 1 : 1636.2
+Tambovskaïa oblast;Zherdevskiy : 1 : 1850.3
+Kourskaïa oblast;Cheremisinovskiy : 1 : 800.09998
+Kourskaïa oblast;Khomutovskiy : 1 : 1133.8
+Tambovskaïa oblast;Uvarovo : 1 : 40.900002
+Kourskaïa oblast;Konyshevskiy : 1 : 1114.6
+Kourskaïa oblast;Sovetskiy : 1 : 1297.4
+Kourskaïa oblast;Kastorenskiy : 1 : 1378.5
+Voronejskaïa oblast;Verkhnekhavskiy : 1 : 1468.1
+Voronejskaïa oblast;Ertilskiy : 1 : 1443.2
+Kourskaïa oblast;Kurskiy : 1 : 1530.7
+Kourskaïa oblast;Tschigry : 1 : 19.9
+Kourskaïa oblast;Kurchatovskiy : 1 : 593.20001
+Voronejskaïa oblast;Voronezh : 1 : 471.29999
+Kourskaïa oblast;Oktyabrskiy : 1 : 549.79999
+Voronejskaïa oblast;Novousmanskiy : 1 : 1154.3
+Voronejskaïa oblast;Paninskiy : 1 : 1413.5
+Kourskaïa oblast;L'govsky : 1 : 1161.6
+Kourskaïa oblast;Kursk : 1 : 149.7
+Kourskaïa oblast;Timskiy : 1 : 804.5
+Kourskaïa oblast;Rylskiy : 1 : 1537.3
+Voronejskaïa oblast;Nizhnedevitskiy : 1 : 1423.8
+Voronejskaïa oblast;Ternovskiy : 1 : 1167.2
+Voronejskaïa oblast;Gribanovskiy : 1 : 1842.0
+Voronejskaïa oblast;Borisoglebskiy : 1 : 1482.8
+Voronejskaïa oblast;Khokholskiy : 1 : 1523.7
+Kourskaïa oblast;Lgov : 1 : 22.9
+Voronejskaïa oblast;Anninskiy : 1 : 2093.3999
+Kourskaïa oblast;Kurchatov : 1 : 2.5
+Kourskaïa oblast;Solntsevskiy : 1 : 1019.1
+Kourskaïa oblast;Gorshechenskiy : 1 : 1282.6
+Kourskaïa oblast;Medvenskiy : 1 : 921.59998
+Kourskaïa oblast;Manturovskiy : 1 : 789.40002
+Kourskaïa oblast;Bolshesoldatskiy : 1 : 735.90002
+Kourskaïa oblast;Korenevskiy : 1 : 701.40002
+Kourskaïa oblast;Glushkovskiy : 1 : 869.0
+Voronejskaïa oblast;Kashirskiy : 1 : 1024.5
+Voronejskaïa oblast;Povorinskiy : 1 : 988.29999
+Kourskaïa oblast;Sudzhanskiy : 1 : 860.79999
+Belgorodskaïa oblast;Gubkinskiy : 1 : 1586.1
+Belgorodskaïa oblast;Starooskolskiy : 1 : 1458.7
+Voronejskaïa oblast;Novokhoperskiy : 1 : 2294.8
+Voronejskaïa oblast;Borisoglebsk : 1 : 55.0
+Voronejskaïa oblast;Bobrovskiy : 1 : 2269.0
+Kourskaïa oblast;Oboyanskiy : 1 : 823.29999
+Kourskaïa oblast;Pristenskiy : 1 : 764.0
+Voronejskaïa oblast;Talovskiy : 1 : 1772.7
+Belgorodskaïa oblast;Staryi Oskol : 1 : 2.0
+Voronejskaïa oblast;Repiyevka : 1 : 858.09998
+RU-UNK-2830 : 1 : 1.0
+Belgorodskaïa oblast;Gubkin : 1 : 1.0
+Voronejskaïa oblast;Liskinskiy : 1 : 1825.2
+Kourskaïa oblast;Belovskiy : 1 : 859.90002
+Voronejskaïa oblast;Ostrogozhskiy : 1 : 1843.0
+Belgorodskaïa oblast;Prokhorovskiy : 1 : 1461.5
+Voronejskaïa oblast;Povorino : 1 : 1.0
+Belgorodskaïa oblast;Ivnyanskiy : 1 : 957.5
+Belgorodskaïa oblast;Chernyanskiy : 1 : 1375.6
+RU-UNK-2831 : 1 : 1298.7
+Voronejskaïa oblast;Liski : 1 : 68.599998
+Belgorodskaïa oblast;Rakityanskiy : 1 : 835.59998
+Voronejskaïa oblast;Buturlinovskiy : 1 : 2001.0
+Belgorodskaïa oblast;Korochanskiy : 1 : 1450.2
+Belgorodskaïa oblast;Krasnoyaruzshsky : 1 : 626.20001
+Belgorodskaïa oblast;Yakovlevskiy : 1 : 1156.5
+Belgorodskaïa oblast;Novooskolskiy : 1 : 1612.1
+Voronejskaïa oblast;Ostrogozhsk : 1 : 29.1
+Belgorodskaïa oblast;Krasnogvardeyskiy : 1 : 1560.1
+Voronejskaïa oblast;Vorobyovskiy : 1 : 1185.8
+Voronejskaïa oblast;Kamenskiy : 1 : 914.40002
+Voronejskaïa oblast;Pavlovskiy : 1 : 1878.1
+Belgorodskaïa oblast;Belgorodskiy : 1 : 1321.1
+Belgorodskaïa oblast;Borisovskiy : 1 : 740.29999
+Voronejskaïa oblast;Podgorenskiy : 1 : 1636.0
+Belgorodskaïa oblast;Alekseyevskiy : 1 : 1690.5
+Belgorodskaïa oblast;Shebekinskiy : 1 : 1715.0
+Belgorodskaïa oblast;Graivoronskiy : 1 : 691.59998
+Voronejskaïa oblast;Kalacheyevskiy : 1 : 2149.3
+Belgorodskaïa oblast;Alekseevka : 1 : 1.6
+Belgorodskaïa oblast;Belgorod : 1 : 126.3
+Belgorodskaïa oblast;Volokonovskiy : 1 : 1182.6
+Voronejskaïa oblast;Olkhovatskiy : 1 : 736.79999
+Voronejskaïa oblast;Verkhnemamonskiy : 1 : 1280.0
+Belgorodskaïa oblast;Shebekino : 1 : 1.0
+Belgorodskaïa oblast;Valuyskiy : 1 : 1603.1
+Voronejskaïa oblast;Rossoshanskiy : 1 : 2225.6001
+Belgorodskaïa oblast;Veydelevskiy : 1 : 1077.4
+Voronejskaïa oblast;Petropavlovskiy : 1 : 1553.3
+Belgorodskaïa oblast;Rovenskiy : 1 : 1219.3
+Voronejskaïa oblast;Rossosh : 1 : 25.5
+Belgorodskaïa oblast;Valuiky : 1 : 1.0
+Voronejskaïa oblast;Bogucharskiy : 1 : 2004.7
+Voronejskaïa oblast;Kantemirovskiy : 1 : 2343.8
+RU-UNK-2832 : 1 : 9.5
+RU-UNK-2833 : 1 : 1.0
+RU-UNK-2834 : 1 : 1298.7
+Yakoutia-Saha respoublika;Anabarskiy : 1 : 53727.398
+Yakoutia-Saha respoublika;Bulunskiy : 1 : 176982.41
+Yakoutia-Saha respoublika;Ust-Yanskiy : 1 : 118667.7
+Yakoutia-Saha respoublika;Allaikhovskiy : 1 : 101962.0
+Yakoutia-Saha respoublika;Olenekskiy : 1 : 317542.69
+Yakoutia-Saha respoublika;Nizhnekolymskiy : 1 : 84423.5
+Tchoukotski nat. okroug;Chaunskiy : 1 : 55922.602
+Yakoutia-Saha respoublika;Verkhoyanskiy : 1 : 119474.1
+Tchoukotski nat. okroug;Shmidtovskiy : 1 : 64469.102
+Yakoutia-Saha respoublika;Srednekolymskiy : 1 : 119600.1
+Tchoukotski nat. okroug;Bilibinskiy : 1 : 173090.7
+RU-UNK-2835 : 1 : 82255.898
+Yakoutia-Saha respoublika;Abyiskiy : 1 : 67320.602
+Yakoutia-Saha respoublika;Zhiganskiy : 1 : 145139.91
+Tchoukotski nat. okroug;Iultinskiy : 1 : 72567.203
+Tchoukotski nat. okroug;Anadyrskiy : 1 : 246154.09
+Yakoutia-Saha respoublika;Momskiy : 1 : 109367.6
+Yakoutia-Saha respoublika;Verkhekolymskiy : 1 : 71362.602
+Tchoukotski nat. okroug;Chukotskiy : 1 : 31755.9
+Yakoutia-Saha respoublika;Vilyuyskiy : 1 : 55256.801
+Yakoutia-Saha respoublika;Mirninskiy : 1 : 168255.5
+Tchoukotski nat. okroug;Providenskiy : 1 : 25953.4
+Yakoutia-Saha respoublika;Verkhnevilyuiskiy : 1 : 41300.898
+Yakoutia-Saha respoublika;Kobyayskiy : 1 : 103568.3
+Magadanskaïa oblast résid;Srednekanskiy : 1 : 90651.102
+Yakoutia-Saha respoublika;Tomponskiy : 1 : 130465.5
+Yakoutia-Saha respoublika;Leninskiy : 1 : 51463.301
+Magadanskaïa oblast résid;Severo-Evenskiy : 1 : 100575.1
+Yakoutia-Saha respoublika;Oymyakonskiy : 1 : 88907.797
+Magadanskaïa oblast résid;Omsukchanskiy : 1 : 61066.801
+Koriakski national okroug;Penzhinskiy : 1 : 114490.8
+Tchoukotski nat. okroug;Anadyr' : 1 : 13.9
+Magadanskaïa oblast résid;Susumanskiy : 1 : 47992.898
+Tchoukotski nat. okroug;Beringovskiy : 1 : 39623.699
+Yakoutia-Saha respoublika;Suntarskiy : 1 : 56705.5
+Yakoutia-Saha respoublika;Ust-Aldanskiy : 1 : 18299.6
+Magadanskaïa oblast résid;Yagodninskiy : 1 : 29032.0
+Yakoutia-Saha respoublika;Namskiy : 1 : 11662.5
+Yakoutia-Saha respoublika;Tattinskiy : 1 : 19912.4
+Yakoutia-Saha respoublika;Gornyi : 1 : 44584.102
+Yakoutia-Saha respoublika;Ust-Mayskiy : 1 : 92773.898
+Koriakski national okroug;Olyutorskiy : 1 : 72764.203
+Khabarovski kraï résiduel;Okhotskiy : 1 : 156966.09
+Magadanskaïa oblast résid;Tenkinskiy : 1 : 35782.801
+Yakoutia-Saha respoublika;Mirny : 1 : 13.3
+Yakoutia-Saha respoublika;Churapchinskiy : 1 : 10658.5
+Yakoutia-Saha respoublika;Megino-Kangalasskiy : 1 : 11458.4
+Yakoutia-Saha respoublika;Yakutsk : 1 : 2887.8
+Magadanskaïa oblast résid;Khasynskiy : 1 : 19190.301
+Yakoutia-Saha respoublika;Ordzhonikidzevskiy : 1 : 24624.199
+Yakoutia-Saha respoublika;Olekminskiy : 1 : 161806.09
+Yakoutia-Saha respoublika;Lenskiy : 1 : 74352.5
+Yakoutia-Saha respoublika;Amginskiy : 1 : 27214.1
+Magadanskaïa oblast résid;Olskiy : 1 : 42336.801
+Yakoutia-Saha respoublika;Aldanskiy : 1 : 152458.8
+Koriakski national okroug;Karaginskiy : 1 : 38095.602
+Koriakski national okroug;Tigilskiy : 1 : 62326.102
+Magadanskaïa oblast résid;Magadan : 1 : 1197.2
+Khabarovski kraï résiduel;Ayano-Mayskiy : 1 : 165680.7
+Yakoutia-Saha respoublika;Neriungri : 1 : 93817.0
+Kamtchatskaïa oblast rési;Ust-Kamchatskiy : 1 : 41725.602
+Amourskaïa oblast;Tyndinskiy : 1 : 72025.102
+Kamtchatskaïa oblast rési;Bystrinskiy : 1 : 23390.4
+Kamtchatskaïa oblast rési;Milkovskiy : 1 : 21512.1
+Kamtchatskaïa oblast rési;Sobolevskiy : 1 : 20618.5
+Khabarovski kraï résiduel;Tuguro-Chumikanskiy : 1 : 90959.297
+Amourskaïa oblast;Zeyskiy : 1 : 99252.102
+Kamtchatskaïa oblast rési;Aleutskiy : 1 : 1255.7
+Amourskaïa oblast;Tynda : 1 : 12.8
+Kamtchatskaïa oblast rési;Yelizovskiy : 1 : 41356.199
+Amourskaïa oblast;Skovorodinskiy : 1 : 18439.6
+Sakhalinskaïa oblast;Okhinskiy : 1 : 14196.3
+Khabarovski kraï résiduel;Nikolayevskiy : 1 : 15267.3
+Amourskaïa oblast;Magdagachinskiy : 1 : 16332.2
+Amourskaïa oblast;Selemdzhinskiy : 1 : 46749.102
+Amourskaïa oblast;Zeya : 1 : 10.1
+Kamtchatskaïa oblast rési;Ust-Bolsheretskiy : 1 : 20896.1
+Khabarovski kraï résiduel;Poliny Osipenko. imeni : 1 : 39476.0
+Sakhalinskaïa oblast;Okha : 1 : 2.3
+Amourskaïa oblast;Mazanovskiy : 1 : 28938.1
+Khabarovski kraï résiduel;Ulchskiy : 1 : 35534.199
+Kamtchatskaïa oblast rési;Elizovo : 1 : 21.6
+Khabarovski kraï résiduel;Nikolayevsk-Na-Amure : 1 : 17.6
+Kamtchatskaïa oblast rési;Petropavlovsk-Kamchatsk : 1 : 50.900002
+Amourskaïa oblast;Shimanovskiy : 1 : 14869.9
+Sakhalinskaïa oblast;Noglikskiy : 1 : 10160.1
+Khabarovski kraï résiduel;Verkhnebureinskiy : 1 : 64149.398
+Khabarovski kraï résiduel;Solnechnyi : 1 : 30816.9
+Amourskaïa oblast;Shimanovsk : 1 : 7.1999998
+Sakhalinskaïa oblast;Alexandrovsk-Sakhalinskiy : 1 : 5747.6001
+Amourskaïa oblast;Svobodnenskiy : 1 : 7985.1001
+Sakhalinskaïa oblast;Tymovskiy : 1 : 6788.6001
+Khabarovski kraï résiduel;Komsomolskiy : 1 : 25172.5
+Amourskaïa oblast;Seryshevskiy : 1 : 3540.0
+Amourskaïa oblast;Romnenskiy : 1 : 10157.4
+Amourskaïa oblast;Svobodnyi : 1 : 12.3
+Amourskaïa oblast;Blagoveschenskiy : 1 : 3240.6001
+Khabarovski kraï résiduel;Vaninskiy : 1 : 26387.301
+Amourskaïa oblast;Belogorskiy : 1 : 2895.2
+Amourskaïa oblast;Belogorsk : 1 : 10.9
+Sakhalinskaïa oblast;Severo-Kurilskiy : 1 : 394.89999
+Sakhalinskaïa oblast;Aleks.-Sakhalinskiy : 1 : 4.1999998
+Amourskaïa oblast;Ivanovskiy : 1 : 2883.8
+Amourskaïa oblast;Bureyskiy : 1 : 7283.8999
+Khabarovski kraï résiduel;Komsomolsk-Na-Amure : 1 : 45.900002
+Amourskaïa oblast;Oktyabrskiy : 1 : 3354.3999
+Amourskaïa oblast;Zavitinskiy : 1 : 2717.6001
+Khabarovski kraï résiduel;Khabarovskiy : 1 : 23046.6
+Khabarovski kraï résiduel;Amurskiy : 1 : 16530.699
+Sakhalinskaïa oblast;Smirnykhovskiy : 1 : 8161.6001
+Amourskaïa oblast;Blagoveschensk : 1 : 29.4
+Amourskaïa oblast;Tambovskiy : 1 : 2411.1001
+Khabarovski kraï résiduel;Amursk : 1 : 13.4
+Amourskaïa oblast;Arkharinskiy : 1 : 14164.0
+Amourskaïa oblast;Mikhaylovskiy : 1 : 2876.0
+Khabarovski kraï résiduel;Nanayskiy : 1 : 27221.1
+Amourskaïa oblast;Konstantinovskiy : 1 : 2190.7
+Sakhalinskaïa oblast;Poronayskiy : 1 : 6836.7002
+Amourskaïa oblast;Raychikhinsk : 1 : 382.70001
+Sakhalinskaïa oblast;Uglegorskiy : 1 : 4807.6001
+Evreïskaïa oblast;Obluchenskiy : 1 : 12898.6
+Sakhalinskaïa oblast;Poronaysk : 1 : 3.5999999
+Khabarovski kraï résiduel;Sovetsko-Gavanskiy : 1 : 15221.5
+Sakhalinskaïa oblast;Makarovskiy : 1 : 1660.3
+Sakhalinskaïa oblast;Uglegorsk : 1 : 2.9000001
+Evreïskaïa oblast;Birobidzhanskiy : 1 : 4234.2998
+Khabarovski kraï résiduel;Sovetskaya Gavan : 1 : 13.5
+Evreïskaïa oblast;Smidovichskiy : 1 : 6614.2998
+Khabarovski kraï résiduel;Lazo. imeni : 1 : 32037.4
+Evreïskaïa oblast;Birobidzhan : 1 : 18.6
+Sakhalinskaïa oblast;Tomarinskiy : 1 : 3844.3999
+Evreïskaïa oblast;Oktyabrskiy : 1 : 6703.0
+Khabarovski kraï résiduel;Khabarovsk : 1 : 71.599998
+Evreïskaïa oblast;Leninskiy : 1 : 6009.8999
+Primorski kraï;Terneyskiy : 1 : 24623.199
+Sakhalinskaïa oblast;Dolinskiy : 1 : 2049.8
+Khabarovski kraï résiduel;Vyazemskiy : 1 : 4380.1001
+Sakhalinskaïa oblast;Kholmskiy : 1 : 2594.6001
+Sakhalinskaïa oblast;Dolinsk : 1 : 11.6
+Primorski kraï;Pozharskiy : 1 : 24075.699
+Khabarovski kraï résiduel;Bikinskiy : 1 : 2495.6001
+Sakhalinskaïa oblast;Yuzhno-Sakhalinsk : 1 : 623.70001
+Sakhalinskaïa oblast;Kurilskiy : 1 : 353.60001
+Sakhalinskaïa oblast;Korsakovskiy : 1 : 2473.3999
+Sakhalinskaïa oblast;Anivskiy : 1 : 2609.1001
+Sakhalinskaïa oblast;Kholmsk : 1 : 4.1999998
+Sakhalinskaïa oblast;Nevelskiy : 1 : 1824.9
+Khabarovski kraï résiduel;Bikin : 1 : 8.0
+Sakhalinskaïa oblast;Nevel'sk : 1 : 4.0
+Sakhalinskaïa oblast;Korsakov : 1 : 5.4000001
+Primorski kraï;Krasnoarmeyskiy : 1 : 21226.9
+Primorski kraï;Dalnerechenskiy : 1 : 7413.6001
+Primorski kraï;Dalnerechensk : 1 : 140.39999
+Primorski kraï;Lesozavodskiy : 1 : 3483.3
+Primorski kraï;Lesozavodsk : 1 : 1.3
+Primorski kraï;Khankayskiy : 1 : 2907.3999
+Primorski kraï;Kirovskiy : 1 : 3722.6001
+Primorski kraï;Dalnegorskiy : 1 : 4970.8999
+Primorski kraï;Spasskiy : 1 : 4326.3999
+Primorski kraï;Chuguyevskiy : 1 : 12811.2
+Primorski kraï;Pogranichnyi : 1 : 4114.7998
+Primorski kraï;Yakovlevskiy : 1 : 2368.3999
+Primorski kraï;Kavalerovskiy : 1 : 4084.1001
+Primorski kraï;Khorolskiy : 1 : 2117.1001
+Primorski kraï;Dalnegorsk : 1 : 8.3999996
+Primorski kraï;Spassk-Dalniy : 1 : 1.8
+Primorski kraï;Chernigovskiy : 1 : 1971.9
+Sakhalinskaïa oblast;Yuzhno-Kurilskiy : 1 : 1523.9
+Primorski kraï;Anuchinskiy : 1 : 3700.1001
+Primorski kraï;Mikhaylovskiy : 1 : 2802.6001
+Primorski kraï;Oktyabrskiy : 1 : 1844.7
+Primorski kraï;Arsenyev : 1 : 124.7
+Primorski kraï;Olginsky : 1 : 5698.7998
+Primorski kraï;Ussuriyskiy : 1 : 3777.5
+RU-UNK-2836 : 1 : 3.0999999
+Primorski kraï;Partizanskiy : 1 : 4191.5
+Primorski kraï;Shkotovskiy : 1 : 3337.3999
+Primorski kraï;Nadezhdinskiy : 1 : 1626.5
+Primorski kraï;Lazovskiy : 1 : 4256.7998
+Primorski kraï;Artyom : 1 : 439.39999
+Primorski kraï;Partizansk : 1 : 1254.7
+Primorski kraï;Khasanskiy : 1 : 4130.7998
+Primorski kraï;Vladivostok : 1 : 285.10001
+Primorski kraï;Bolshoy Kamen : 1 : 1.0
+Primorski kraï;Nakhodka : 1 : 112.2
+RU-UNK-2837 : 1 : 82255.898
+RU-UNK-2838 : 1 : 3.0999999
+Kirovskaïa oblast;Luzskiy : 1 : 4593.6001
+Kirovskaïa oblast;Podosinovskiy : 1 : 4178.2998
+Kirovskaïa oblast;Verkhnekamskiy : 1 : 10892.6
+Kirovskaïa oblast;Oparinskiy : 1 : 6074.7002
+Kirovskaïa oblast;Nagorskiy : 1 : 7676.7002
+Kirovskaïa oblast;Murashinskiy : 1 : 3107.0
+Kirovskaïa oblast;Belokholunitskiy : 1 : 5085.6001
+Kirovskaïa oblast;Afanasyevskiy : 1 : 5650.5
+Kirovskaïa oblast;Darovskiy : 1 : 4194.7002
+Kirovskaïa oblast;Slobodskoy : 1 : 3365.8999
+Kirovskaïa oblast;Yuryanskiy : 1 : 3206.2
+Kirovskaïa oblast;Omutninskiy : 1 : 5100.1001
+Kirovskaïa oblast;Khalturinskiy : 1 : 1803.0
+Kirovskaïa oblast;Shabalinskiy : 1 : 3381.6001
+Kirovskaïa oblast;Kotelnichskiy : 1 : 3981.5
+Kirovskaïa oblast;Kirov : 1 : 327.79999
+Kirovskaïa oblast;Kirovo-Chepetskiy : 1 : 2402.3999
+Kirovskaïa oblast;Zuyevskiy : 1 : 2702.8
+Kirovskaïa oblast;Svechinskiy : 1 : 1619.5
+Kirovskaïa oblast;Falenskiy : 1 : 2602.8999
+Kirovskaïa oblast;Orichevskiy : 1 : 2557.8
+Kirovskaïa oblast;Kirovo-Chepets : 1 : 3.0999999
+Kirovskaïa oblast;Kumenskiy : 1 : 1867.2
+Kirovskaïa oblast;Kotelnich' : 1 : 2.5999999
+Kirovskaïa oblast;Verkhoshizhemskiy : 1 : 2043.6
+Nijegorodskaïa oblast (Go;Vetluzhskiy : 1 : 2858.0
+Nijegorodskaïa oblast (Go;Shakhunskiy : 1 : 2369.3999
+Nijegorodskaïa oblast (Go;Tonshayevskiy : 1 : 2656.7
+Kirovskaïa oblast;Bogorodskiy : 1 : 1572.3
+Kirovskaïa oblast;Arbazhskiy : 1 : 1461.3
+Kirovskaïa oblast;Sunskiy : 1 : 1202.7
+Kirovskaïa oblast;Nolinskiy : 1 : 1950.0
+Kirovskaïa oblast;Tuzhinskiy : 1 : 1379.8
+Kirovskaïa oblast;Uninskiy : 1 : 2074.2
+Kirovskaïa oblast;Sovetskiy : 1 : 2375.0
+Kirovskaïa oblast;Nemskiy : 1 : 2043.3
+Nijegorodskaïa oblast (Go;Varnavinskiy : 1 : 2541.3999
+Nijegorodskaïa oblast (Go;Urenskiy : 1 : 1715.1
+Kirovskaïa oblast;Pizhanskiy : 1 : 1188.5
+Nijegorodskaïa oblast (Go;Tonkinskiy : 1 : 1157.1
+Kirovskaïa oblast;Kiknurskiy : 1 : 1628.6
+Nijegorodskaïa oblast (Go;Koverninskiy : 1 : 2726.1001
+Kirovskaïa oblast;Lebyazhskiy : 1 : 1353.1
+Kirovskaïa oblast;Kilmezskiy : 1 : 2960.0
+Kirovskaïa oblast;Yaranskiy : 1 : 2191.7
+Kirovskaïa oblast;Urzhumskiy : 1 : 3096.8999
+Nijegorodskaïa oblast (Go;Semyonovskiy : 1 : 3502.3999
+Nijegorodskaïa oblast (Go;Sharangskiy : 1 : 2031.5
+Nijegorodskaïa oblast (Go;Krasnobakovskiy : 1 : 1883.3
+Mariyskaïa respoublika;Sernurskiy : 1 : 912.5
+Kirovskaïa oblast;Sanchurskiy : 1 : 1465.6
+Nijegorodskaïa oblast (Go;Voskresenskiy : 1 : 3305.2
+Mariyskaïa respoublika;Novotaryalskiy : 1 : 952.59998
+Mariyskaïa respoublika;Orshanskiy : 1 : 940.20001
+Mariyskaïa respoublika;Mari-Turekskiy : 1 : 1394.3
+Nijegorodskaïa oblast (Go;Gorodetskiy : 1 : 1332.6
+Mariyskaïa respoublika;Kilemarskiy : 1 : 3538.3
+Mariyskaïa respoublika;Sovetskiy : 1 : 1437.1
+Mariyskaïa respoublika;Paranginskiy : 1 : 684.90002
+Mariyskaïa respoublika;Medvedevskiy : 1 : 2741.6001
+Mariyskaïa respoublika;Kuzhenerskiy : 1 : 799.79999
+Mariyskaïa respoublika;Yurinskiy : 1 : 1798.3
+Nijegorodskaïa oblast (Go;Borskiy : 1 : 2873.3
+Nijegorodskaïa oblast (Go;Chkalovskiy : 1 : 870.59998
+Kirovskaïa oblast;Malmyzhskiy : 1 : 2071.5
+Nijegorodskaïa oblast (Go;Gorodetz : 1 : 1.0
+Mariyskaïa respoublika;Morkinskiy : 1 : 2376.2
+Nijegorodskaïa oblast (Go;Balakhninskiy : 1 : 1049.1
+Mariyskaïa respoublika;Yoshkar-Ola : 1 : 20.4
+Mariyskaïa respoublika;Gornomariyskiy : 1 : 545.0
+Nijegorodskaïa oblast (Go;Balakhna : 1 : 2.3
+Nijegorodskaïa oblast (Go;Lyskovskiy : 1 : 876.5
+Nijegorodskaïa oblast (Go;Vorotynskiy : 1 : 869.29999
+Nijegorodskaïa oblast (Go;Volodarskiy : 1 : 1719.5
+Mariyskaïa respoublika;Zvenigovskiy : 1 : 2739.0
+Kirovskaïa oblast;Vyatsko-Polyanskiy : 1 : 888.40002
+Nijegorodskaïa oblast (Go;Nizhniy Novgorod : 1 : 343.79999
+Nijegorodskaïa oblast (Go;Bor : 1 : 1.0
+Tchouvachskaïa respoublik;Cheboksarskiy : 1 : 351.20001
+Mariyskaïa respoublika;Kozmodemyansk : 1 : 1.0
+Nijegorodskaïa oblast (Go;Kstovskiy : 1 : 1137.5
+RU-UNK-2839 : 1 : 1.7
+Kirovskaïa oblast;Vyatskye Polyany : 1 : 1.9
+Nijegorodskaïa oblast (Go;Bogorodskiy : 1 : 1397.7
+Mariyskaïa respoublika;Volzhskiy : 1 : 992.0
+Nijegorodskaïa oblast (Go;Pavlovskiy : 1 : 1261.3
+Tchouvachskaïa respoublik;Morgaushskiy : 1 : 674.40002
+Nijegorodskaïa oblast (Go;Kstovo : 1 : 1.9
+Tchouvachskaïa respoublik;Yadrinskiy : 1 : 1073.6
+Nijegorodskaïa oblast (Go;Dalnekonstantinovskiy : 1 : 1459.0
+Tchouvachskaïa respoublik;Cheboksary : 1 : 3.0999999
+Tchouvachskaïa respoublik;Mariinsko- Posadskiy : 1 : 494.39999
+Nijegorodskaïa oblast (Go;Bogorodsk : 1 : 1.0
+Nijegorodskaïa oblast (Go;Spasskiy : 1 : 691.79999
+Tchouvachskaïa respoublik;Novocheboksarsk : 1 : 2.9000001
+Nijegorodskaïa oblast (Go;Vachskiy : 1 : 1077.9
+Tchouvachskaïa respoublik;Tsyvilskiy : 1 : 807.70001
+Nijegorodskaïa oblast (Go;Sosnovskiy : 1 : 1238.1
+Nijegorodskaïa oblast (Go;Pavlovo : 1 : 1.0
+Nijegorodskaïa oblast (Go;Knyagininskiy : 1 : 667.90002
+Nijegorodskaïa oblast (Go;Bolshemurashkinskiy : 1 : 539.09998
+Tchouvachskaïa respoublik;Kozlovskiy : 1 : 510.70001
+Tchouvachskaïa respoublik;Krasnoarmeyskiy : 1 : 372.79999
+Nijegorodskaïa oblast (Go;Pilninskiy : 1 : 1388.1
+Mariyskaïa respoublika;Volzhsk : 1 : 1.8
+Tchouvachskaïa respoublik;Alikovskiy : 1 : 648.59998
+Nijegorodskaïa oblast (Go;Perevozskiy : 1 : 689.59998
+Tchouvachskaïa respoublik;Krasnochetayskiy : 1 : 671.40002
+Tchouvachskaïa respoublik;Urmarskiy : 1 : 566.40002
+Nijegorodskaïa oblast (Go;Navashinskiy : 1 : 1206.5
+Nijegorodskaïa oblast (Go;Sergachskiy : 1 : 1222.0
+Nijegorodskaïa oblast (Go;Buturlinskiy : 1 : 1142.0
+Tchouvachskaïa respoublik;Vurnarskiy : 1 : 1004.4
+Tchouvachskaïa respoublik;Kanashskiy : 1 : 1085.3
+Nijegorodskaïa oblast (Go;Arzamasskiy : 1 : 1721.6
+Nijegorodskaïa oblast (Go;Vadskiy : 1 : 723.79999
+Tchouvachskaïa respoublik;Shumerlinskiy : 1 : 1096.0
+Tchouvachskaïa respoublik;Yantikovskiy : 1 : 453.89999
+Nijegorodskaïa oblast (Go;Ardatovskiy : 1 : 1855.8
+Tchouvachskaïa respoublik;Shumerlya : 1 : 1.4
+Tchouvachskaïa respoublik;Kanash : 1 : 1.1
+Nijegorodskaïa oblast (Go;Sechenovskiy : 1 : 1638.2
+Nijegorodskaïa oblast (Go;Kulebakskiy : 1 : 1135.2
+Nijegorodskaïa oblast (Go;Krasnooktyabrskiy : 1 : 827.59998
+Nijegorodskaïa oblast (Go;Arzamas : 1 : 3.9000001
+Nijegorodskaïa oblast (Go;Vyksunskiy : 1 : 1727.4
+Nijegorodskaïa oblast (Go;Gaginskiy : 1 : 1075.5
+Tchouvachskaïa respoublik;Ibresinskiy : 1 : 1215.7
+Nijegorodskaïa oblast (Go;Kulebaki : 1 : 1.9
+Tchouvachskaïa respoublik;Poretskiy : 1 : 1261.3
+Nijegorodskaïa oblast (Go;Shatkovskiy : 1 : 1258.5
+Tchouvachskaïa respoublik;Komsomolskiy : 1 : 622.09998
+Tchouvachskaïa respoublik;Yalchikskiy : 1 : 605.09998
+Nijegorodskaïa oblast (Go;Vyksa : 1 : 1.0
+Nijegorodskaïa oblast (Go;Diveyevskiy : 1 : 987.40002
+Nijegorodskaïa oblast (Go;Bolsheboldinskiy : 1 : 1061.5
+Nijegorodskaïa oblast (Go;Lukoyanovskiy : 1 : 1785.2
+Nijegorodskaïa oblast (Go;Pervomayskiy : 1 : 1166.8
+Mordovskaïa respoublika;Bolsheignatovskiy : 1 : 705.5
+Tchouvachskaïa respoublik;Batyrevskiy : 1 : 1075.4
+Tchouvachskaïa respoublik;Alatyrskiy : 1 : 1703.6
+Nijegorodskaïa oblast (Go;Voznesenskiy : 1 : 841.79999
+Mordovskaïa respoublika;Ardatovskiy : 1 : 1182.6
+Mordovskaïa respoublika;Temnikovskiy : 1 : 2158.3
+Nijegorodskaïa oblast (Go;Pochinkovskiy : 1 : 2189.3999
+Tchouvachskaïa respoublik;Shemurshinskiy : 1 : 401.79999
+Tchouvachskaïa respoublik;Alatyr' : 1 : 1.2
+Mordovskaïa respoublika;Tengushevskiy : 1 : 1207.5
+Mordovskaïa respoublika;Ichalkovskiy : 1 : 1174.5
+Mordovskaïa respoublika;Yelnikovskiy : 1 : 1210.6
+Mordovskaïa respoublika;Atyashevskiy : 1 : 1040.9
+Mordovskaïa respoublika;Chamzinskiy : 1 : 1007.6
+Mordovskaïa respoublika;Staroshaygovskiy : 1 : 1633.3
+Mordovskaïa respoublika;Romodanovskiy : 1 : 841.79999
+Mordovskaïa respoublika;Krasnoslobodskiy : 1 : 1249.1
+Mordovskaïa respoublika;Dubenskiy : 1 : 671.09998
+Mordovskaïa respoublika;Lyambirskiy : 1 : 895.40002
+Mordovskaïa respoublika;Atyuriyevskiy : 1 : 879.40002
+Mordovskaïa respoublika;Zubovo-Polyanskiy : 1 : 3098.8
+Mordovskaïa respoublika;Torbeyevskiy : 1 : 915.09998
+Mordovskaïa respoublika;Bolshebereznikovskiy : 1 : 656.09998
+Mordovskaïa respoublika;Kovylkinskiy : 1 : 2017.3
+Mordovskaïa respoublika;Kadoshkinsky : 1 : 551.59998
+Mordovskaïa respoublika;Ruzayevskiy : 1 : 1112.2
+Mordovskaïa respoublika;Saransk : 1 : 181.39999
+Mordovskaïa respoublika;Kochkurovskiy : 1 : 828.29999
+Mordovskaïa respoublika;Ruzaevka : 1 : 21.200001
+Mordovskaïa respoublika;Kovylkino : 1 : 14.5
+Mordovskaïa respoublika;Insarskiy : 1 : 941.90002
+RU-UNK-2840 : 1 : 1.7
+Taïmyrski national okroug;Diksonskiy : 1 : 157988.09
+Taïmyrski national okroug;Khatangskiy : 1 : 389714.31
+Taïmyrski national okroug;Dudinka : 1 : 158400.91
+Taïmyrski national okroug;Ust-Yeniseyskiy : 1 : 88194.703
+Evenkiski national okroug;Baykitskiy : 1 : 502413.41
+RU-UNK-2841 : 1 : 11.4
+Krasnoïarski kraï résidue;Turukhanskiy : 1 : 190387.09
+Krasnoïarski kraï résidue;Igarka : 1 : 16221.8
+Irkoutskaïa oblast résidu;Katangskiy : 1 : 137477.8
+Evenkiski national okroug;Ilimpiyskiy : 1 : 147721.41
+Evenkiski national okroug;Tungussko-Chunskiy : 1 : 107012.2
+Krasnoïarski kraï résidue;Yeniseyskiy : 1 : 105386.8
+Krasnoïarski kraï résidue;Severo-Yeniseyskiy : 1 : 45389.801
+Irkoutskaïa oblast résidu;Bodaybinskiy : 1 : 90638.703
+Krasnoïarski kraï résidue;Boguchanskiy : 1 : 54511.699
+Krasnoïarski kraï résidue;Kezhemskiy : 1 : 32491.699
+Irkoutskaïa oblast résidu;Mamsko-Chuyskiy : 1 : 42732.898
+Krasnoïarski kraï résidue;Motyginskiy : 1 : 18743.1
+Irkoutskaïa oblast résidu;Ust-Ilimskiy : 1 : 35626.0
+Irkoutskaïa oblast résidu;Kirenskiy : 1 : 42059.5
+Krasnoïarski kraï résidue;Eniseysk : 1 : 14.5
+Tchitinskaïa oblast résid;Kalarskiy : 1 : 54889.699
+Krasnoïarski kraï résidue;Lesosibirsk : 1 : 501.29999
+RU-UNK-2842 : 1 : 35094.5
+RU-UNK-2843 : 1 : 35094.5
+Irkoutskaïa oblast résidu;Chunskiy : 1 : 25064.6
+Irkoutskaïa oblast résidu;Ust'-Ilimsk : 1 : 16.6
+Krasnoïarski kraï résidue;Pirovskiy : 1 : 6027.7998
+Krasnoïarski kraï résidue;Kazachinskiy : 1 : 5122.1001
+Krasnoïarski kraï résidue;Birilyusskiy : 1 : 11296.9
+Irkoutskaïa oblast résidu;Bodaybo : 1 : 6.5999999
+Irkoutskaïa oblast résidu;Nizhneilimskiy : 1 : 18270.301
+Krasnoïarski kraï résidue;Tyukhtetskiy : 1 : 9639.7998
+Irkoutskaïa oblast résidu;Tayshetskiy : 1 : 26998.9
+Krasnoïarski kraï résidue;Taseyevskiy : 1 : 9328.7002
+Irkoutskaïa oblast résidu;Kazachinsko-Lenskiy : 1 : 32846.5
+Krasnoïarski kraï résidue;Abanskiy : 1 : 9277.2002
+Krasnoïarski kraï résidue;Bolshemurtinskiy : 1 : 6855.7998
+RU-UNK-2844 : 1 : 74994.398
+Krasnoïarski kraï résidue;Dzerzhinskiy : 1 : 3566.5
+Bouriatia;Severo-Baykalskiy : 1 : 47350.602
+Krasnoïarski kraï résidue;Sukhobuzimskiy : 1 : 5834.0
+Irkoutskaïa oblast résidu;Bratskiy : 1 : 21301.801
+Bouriatia;Muyskiy : 1 : 13075.4
+Krasnoïarski kraï résidue;Yemelyanovskiy : 1 : 6777.7998
+Krasnoïarski kraï résidue;Bolsheuluyskiy : 1 : 2187.6001
+Krasnoïarski kraï résidue;Kozulsky : 1 : 5065.2002
+Krasnoïarski kraï résidue;Nizhneingashskiy : 1 : 6484.8999
+Irkoutskaïa oblast résidu;Ust'-Kut : 1 : 23.6
+Krasnoïarski kraï résidue;Kanskiy : 1 : 4917.1001
+Krasnoïarski kraï résidue;Achinskiy : 1 : 2873.7
+Krasnoïarski kraï résidue;Bogotolskiy : 1 : 3198.6001
+Krasnoïarski kraï résidue;Ilanskiy : 1 : 3268.6001
+Irkoutskaïa oblast résidu;Ust-Udinskiy : 1 : 19425.801
+Krasnoïarski kraï résidue;Rybinskiy : 1 : 3124.3999
+Krasnoïarski kraï résidue;Achinsk : 1 : 42.599998
+Krasnoïarski kraï résidue;Beryozovskiy : 1 : 4974.7998
+Irkoutskaïa oblast résidu;Bratsk : 1 : 69.400002
+Krasnoïarski kraï résidue;Bogotol : 1 : 12.9
+Krasnoïarski kraï résidue;Uyarskiy : 1 : 2436.7
+Krasnoïarski kraï résidue;Kansk : 1 : 36.5
+Krasnoïarski kraï résidue;Sosnovoborsk : 1 : 22.799999
+Krasnoïarski kraï résidue;Krasnoyarsk : 1 : 222.60001
+Krasnoïarski kraï résidue;Nazarovskiy : 1 : 4169.6001
+Krasnoïarski kraï résidue;Manskiy : 1 : 5655.2002
+Krasnoïarski kraï résidue;Nazarovo : 1 : 24.200001
+RU-UNK-2845 : 1 : 50632.699
+Krasnoïarski kraï résidue;Sharypovskiy : 1 : 3772.3999
+Irkoutskaïa oblast résidu;Nizhneudinskiy : 1 : 50953.199
+Tchitinskaïa oblast résid;Tungiro-Olekminskiy : 1 : 42097.199
+Irkoutskaïa oblast résidu;Tayshet : 1 : 18.5
+Krasnoïarski kraï résidue;Divnogorsk : 1 : 9.6999998
+Krasnoïarski kraï résidue;Zaozernyi : 1 : 13.9
+Krasnoïarski kraï résidue;Irbeyskiy : 1 : 10375.6
+Krasnoïarski kraï résidue;Borodino : 1 : 11.2
+Irkoutskaïa oblast résidu;Zhigalovskiy : 1 : 22892.0
+Krasnoïarski kraï résidue;Balakhtinskiy : 1 : 4987.7002
+RU-UNK-2846 : 1 : 18.9
+Krasnoïarski kraï résidue;Uzhurskiy : 1 : 4379.1001
+Krasnoïarski kraï résidue;Sayanskiy : 1 : 8201.9004
+Krasnoïarski kraï résidue;Partizanskiy : 1 : 4756.8999
+Bouriatia;Severobaykalsk : 1 : 6.5999999
+Bouriatia;Kurumkanskiy : 1 : 12044.4
+Irkoutskaïa oblast résidu;Balaganskiy : 1 : 5085.2002
+Resp. Khakassia;Ordzhonikidzevskiy : 1 : 5780.0
+Krasnoïarski kraï résidue;Novoselovskiy : 1 : 1711.6
+Irkoutskaïa oblast résidu;Kuytunskiy : 1 : 10068.0
+Irkoutskaïa oblast résidu;Tulunskiy : 1 : 14331.4
+Irkoutskaïa oblast résidu;Kachugskiy : 1 : 32181.301
+Krasnoïarski kraï résidue;Idrinskiy : 1 : 5638.7998
+Krasnoïarski kraï résidue;Kuraginskiy : 1 : 24077.301
+Krasnoïarski kraï résidue;Krasnoturanskiy : 1 : 2992.3999
+Irkoutskaïa oblast résidu;Nizhneudinsk : 1 : 27.1
+Resp. Khakassia;Shirinskiy : 1 : 6214.2998
+Resp. Khakassia;Bogradskiy : 1 : 4311.2002
+Irkoutskaïa oblast résidu;Tulun : 1 : 36.700001
+Irkoutskaïa oblast résidu;Olkhonskiy : 1 : 6566.3999
+Tchitinskaïa oblast résid;Mogochinskiy : 1 : 25496.5
+Irkoutskaïa oblast résidu;Ziminskiy : 1 : 7147.1001
+Resp. Khakassia;Ust-Abakanskiy : 1 : 9124.0996
+Bouriatia;Barguzinskiy : 1 : 12740.5
+Oust'-Ordynski national o;Nukutskiy : 1 : 1822.8
+Oust'-Ordynski national o;Osinskiy : 1 : 3917.2
+Krasnoïarski kraï résidue;Minusinskiy : 1 : 2848.8
+Irkoutskaïa oblast résidu;Sayansk : 1 : 12.7
+Irkoutskaïa oblast résidu;Zima : 1 : 24.299999
+Krasnoïarski kraï résidue;Karatuzskiy : 1 : 10433.8
+Irkoutskaïa oblast résidu;Zalarinskiy : 1 : 7528.0
+Oust'-Ordynski national o;Alarskiy : 1 : 2688.7
+Resp. Khakassia;Chernogorsk : 1 : 4.3000002
+Resp. Khakassia;Askizskiy : 1 : 7858.3999
+Bouriatia;Yeravninskiy : 1 : 30099.0
+Resp. Khakassia;Altayskiy : 1 : 1918.3
+Krasnoïarski kraï résidue;Minusinsk : 1 : 18.5
+Tchitinskaïa oblast résid;Chernyshevskiy : 1 : 12635.2
+Resp. Khakassia;Abakan : 1 : 2.9000001
+Touva respoublika;Todzhinskiy : 1 : 43643.398
+RU-UNK-2847 : 1 : 2858.6001
+Krasnoïarski kraï résidue;Shushenskiy : 1 : 3234.0
+Oust'-Ordynski national o;Bokhanskiy : 1 : 3461.2
+Krasnoïarski kraï résidue;Yermakovskiy : 1 : 15375.2
+Oust'-Ordynski national o;Ekhirit-Bulagatskiy : 1 : 5484.7998
+Tchitinskaïa oblast résid;Sretenskiy : 1 : 14864.3
+Resp. Khakassia;Beyskiy : 1 : 4659.8999
+Bouriatia;Okinskiy : 1 : 28155.1
+Bouriatia;Pribaykalskiy : 1 : 13163.7
+Tchitinskaïa oblast résid;Gazimuro- Zavodskiy : 1 : 14889.9
+Irkoutskaïa oblast résidu;Cheremkhovskiy : 1 : 10604.8
+Irkoutskaïa oblast résidu;Cheremkhovo : 1 : 23.1
+Resp. Khakassia;Tashtypskiy : 1 : 20677.699
+Resp. Khakassia;Sayanogorsk : 1 : 7.1999998
+Bouriatia;Khorinskiy : 1 : 13795.3
+Tchitinskaïa oblast résid;Chitinskiy : 1 : 15715.8
+Irkoutskaïa oblast résidu;Irkutskiy : 1 : 10236.9
+Irkoutskaïa oblast résidu;Usolskiy : 1 : 6917.7002
+Tchitinskaïa oblast résid;Nerchinskiy : 1 : 5266.7998
+Touva respoublika;Piy-Khumskiy : 1 : 8613.5
+Irkoutskaïa oblast résidu;Usolye-Sibirskoe : 1 : 20.200001
+Bouriatia;Kabanskiy : 1 : 9319.2002
+Tchitinskaïa oblast résid;Karymskiy : 1 : 8695.4004
+Tchitinskaïa oblast résid;Nerchinskiy-Zavodskiy : 1 : 9622.2002
+Irkoutskaïa oblast résidu;Angarsk : 1 : 5.0
+Touva respoublika;Kyzylskiy : 1 : 6014.7998
+Tchitinskaïa oblast résid;Shilkinskiy : 1 : 6076.8999
+Irkoutskaïa oblast résidu;Irkutsk : 1 : 28.799999
+Touva respoublika;Kaa-Hemskiy : 1 : 25557.4
+Bouriatia;Zaigrayevskiy : 1 : 6460.0
+Tchitinskaïa oblast résid;Khilokskiy : 1 : 15294.9
+Touva respoublika;Sut-Kholskiy : 1 : 7098.3999
+Tchitinskaïa oblast résid;Shelopuginskiy : 1 : 4305.5
+Irkoutskaïa oblast résidu;Shelekhov : 1 : 9.3999996
+RU-UNK-2848 : 1 : 7891.2998
+Tchitinskaïa oblast résid;Chita : 1 : 27.9
+Bouriatia;Ivolginskiy : 1 : 2996.2
+Tchitinskaïa oblast résid;Baleyskiy : 1 : 5008.0
+Irkoutskaïa oblast résidu;Slyudyanskiy : 1 : 5330.6001
+Bouriatia;Tunkinskiy : 1 : 11689.9
+Bouriatia;Ulan-Ude : 1 : 262.29999
+RU-UNK-2849 : 1 : 5177.2998
+Touva respoublika;Chaa-Kholsky : 1 : 3097.8
+Bouriatia;Tarbagatayskiy : 1 : 3464.8999
+Touva respoublika;Kyzyl : 1 : 268.60001
+Tchitinskaïa oblast résid;Uletovskiy : 1 : 16534.699
+Touva respoublika;Barun-Khemchinskiy : 1 : 5605.7002
+Aguinski national okroug;Mogoytuyskiy : 1 : 6211.5
+Tchitinskaïa oblast résid;Baley : 1 : 7.3000002
+Touva respoublika;Bay-Tayginskiy : 1 : 8552.0996
+Touva respoublika;Tandinskiy : 1 : 4180.8999
+Bouriatia;Selenginskiy : 1 : 8347.5
+Touva respoublika;Chedi-Kholsky : 1 : 2336.3
+Tchitinskaïa oblast résid;Alexandrovo-Zavodskiy : 1 : 7433.1001
+Tchitinskaïa oblast résid;Petrovsk-Zabaykalskiy : 1 : 9003.2002
+Touva respoublika;Dzun-Khemchinskiy : 1 : 5804.0
+Tchitinskaïa oblast résid;Olovyanninskiy : 1 : 6076.7998
+Bouriatia;Mukhorshibirskiy : 1 : 4553.0
+Tchitinskaïa oblast résid;Kalganskiy : 1 : 3040.1001
+Aguinski national okroug;Aginskiy : 1 : 6583.5
+Bouriatia;Zakamenskiy : 1 : 15075.3
+Bouriatia;Dzhidinskiy : 1 : 8444.4004
+Bouriatia;Gusinoozersk : 1 : 5.6999998
+Tchitinskaïa oblast résid;Petrovsk-Zabaykalsky : 1 : 13.1
+Aguinski national okroug;Duldurginskiy : 1 : 6825.0
+Touva respoublika;Ovyurskiy : 1 : 4765.6001
+Tchitinskaïa oblast résid;Borzinskiy : 1 : 8918.7998
+Touva respoublika;Tes-Khemskiy : 1 : 7015.1001
+Bouriatia;Bichurskiy : 1 : 5879.3999
+Tchitinskaïa oblast résid;Priargunskiy : 1 : 5514.6001
+Bouriatia;Kyakhtinskiy : 1 : 4842.5
+Tchitinskaïa oblast résid;Krasnochikoyskiy : 1 : 27782.0
+Touva respoublika;Erzinskiy : 1 : 12586.4
+Touva respoublika;Mongun-Tayginskiy : 1 : 4680.2998
+Tchitinskaïa oblast résid;Akshinskiy : 1 : 7811.7998
+Tchitinskaïa oblast résid;Ononskiy : 1 : 5710.2002
+Tchitinskaïa oblast résid;Krasnokamenskiy : 1 : 5983.5
+Tchitinskaïa oblast résid;Kyrinskiy : 1 : 16231.6
+Tchitinskaïa oblast résid;Borzya : 1 : 9.1999998
+Tchitinskaïa oblast résid;Zabaykalskiy : 1 : 5911.7998
+Tchitinskaïa oblast résid;Krasnokamensk : 1 : 13.8
+RU-UNK-2850 : 1 : 11.4
+RU-UNK-2851 : 1 : 35094.5
+RU-UNK-2852 : 1 : 35094.5
+RU-UNK-2853 : 1 : 74994.398
+RU-UNK-2854 : 1 : 50632.699
+RU-UNK-2855 : 1 : 18.9
+RU-UNK-2856 : 1 : 2858.6001
+RU-UNK-2857 : 1 : 7891.2998
+RU-UNK-2858 : 1 : 5177.2998
+Kostromskaïa oblast;Vokhomskiy : 1 : 3473.7
+Kostromskaïa oblast;Soligalichskiy : 1 : 3418.8
+Kostromskaïa oblast;Pavinskiy : 1 : 1551.6
+Kostromskaïa oblast;Oktyabrskiy : 1 : 1756.2
+Kostromskaïa oblast;Chukhlomskiy : 1 : 3396.2
+Kostromskaïa oblast;Kologrivskiy : 1 : 3863.8999
+Kostromskaïa oblast;Mezhevskiy : 1 : 2235.8999
+Kostromskaïa oblast;Pyschugskiy : 1 : 2040.5
+Kostromskaïa oblast;Buyskiy : 1 : 3555.8999
+Iaroslavskaïa oblast;Poshekhonskiy : 1 : 3027.8
+Iaroslavskaïa oblast;Pervomayskiy : 1 : 2027.9
+Tverskaïa oblast (Kalinin;Vesyegonskiy : 1 : 1545.3
+Kostromskaïa oblast;Parfenyevskiy : 1 : 2300.3
+Kostromskaïa oblast;Sharyinskiy : 1 : 3919.1001
+Kostromskaïa oblast;Neyskiy : 1 : 2801.0
+Kostromskaïa oblast;Ponazyrevskiy : 1 : 2154.3
+Kostromskaïa oblast;Galichskiy : 1 : 2753.2
+Iaroslavskaïa oblast;Breytovskiy : 1 : 204.60001
+Tverskaïa oblast (Kalinin;Sandovskiy : 1 : 1937.2
+Kostromskaïa oblast;Manturovskiy : 1 : 2631.0
+Iaroslavskaïa oblast;Lyubimskiy : 1 : 1526.2
+Kostromskaïa oblast;Antropovskiy : 1 : 2345.3
+Kostromskaïa oblast;Buy : 1 : 1.7
+Tverskaïa oblast (Kalinin;Lesnoy : 1 : 1749.0
+Kostromskaïa oblast;Sharya : 1 : 1.8
+Kostromskaïa oblast;Galitch : 1 : 1.2
+Iaroslavskaïa oblast;Danilovskiy : 1 : 2183.8
+Iaroslavskaïa oblast;Rybinskiy : 1 : 2107.1001
+Tverskaïa oblast (Kalinin;Krasnokholmskiy : 1 : 1433.4
+Kostromskaïa oblast;Manturovo : 1 : 1.4
+Tverskaïa oblast (Kalinin;Molokovskiy : 1 : 1072.2
+Kostromskaïa oblast;Kostromskoy : 1 : 1383.7
+Kostromskaïa oblast;Neya : 1 : 1.8
+Kostromskaïa oblast;Susaninskiy : 1 : 1062.3
+Iaroslavskaïa oblast;Tutayevskiy : 1 : 1343.5
+Tverskaïa oblast (Kalinin;Udomelskiy : 1 : 2472.8
+Tverskaïa oblast (Kalinin;Bologovskiy : 1 : 2727.1001
+Kostromskaïa oblast;Makaryevskiy : 1 : 4391.6001
+Tverskaïa oblast (Kalinin;Maksatikhinskiy : 1 : 2571.3999
+Iaroslavskaïa oblast;Nekouzskiy : 1 : 1805.9
+Kostromskaïa oblast;Ostrovskiy : 1 : 2286.0
+Kostromskaïa oblast;Sudislavskiy : 1 : 1477.9
+Tverskaïa oblast (Kalinin;Bezhetskiy : 1 : 2827.3
+Kostromskaïa oblast;Kadyiskiy : 1 : 2093.8999
+Iaroslavskaïa oblast;Rybinsk : 1 : 2.8
+Iaroslavskaïa oblast;Tutaev : 1 : 4.0999999
+Tverskaïa oblast (Kalinin;Sonkovskiy : 1 : 1022.1
+Iaroslavskaïa oblast;Nekrasovskiy : 1 : 645.0
+Iaroslavskaïa oblast;Myshkinskiy : 1 : 1063.4
+Iaroslavskaïa oblast;Yaroslavskiy : 1 : 1917.9
+Tverskaïa oblast (Kalinin;Bologoye : 1 : 3.5
+Iaroslavskaïa oblast;Bolsheselskiy : 1 : 1256.3
+Tverskaïa oblast (Kalinin;Udomlya : 1 : 1.4
+Tverskaïa oblast (Kalinin;Vyshnevolotskiy : 1 : 3251.3
+Kostromskaïa oblast;Kostroma : 1 : 30.299999
+Tverskaïa oblast (Kalinin;Bezshetsk : 1 : 1.3
+Kostromskaïa oblast;Krasnoselskiy : 1 : 648.59998
+Iaroslavskaïa oblast;Uglichskiy : 1 : 2271.1001
+Ivanovskaïa oblast;Zavolzhskiy : 1 : 796.0
+Tverskaïa oblast (Kalinin;Kesovogorskiy : 1 : 1080.8
+Tverskaïa oblast (Kalinin;Firovskiy : 1 : 1827.1
+Iaroslavskaïa oblast;Yaroslavl : 1 : 2.5999999
+Ivanovskaïa oblast;Kineshemskiy : 1 : 474.79999
+Tverskaïa oblast (Kalinin;Spirovskiy : 1 : 1389.3
+Ivanovskaïa oblast;Sokolskiy : 1 : 1421.7
+Tverskaïa oblast (Kalinin;Kashinskiy : 1 : 2056.3
+Kostromskaïa oblast;Nerekhtskiy : 1 : 1116.1
+Iaroslavskaïa oblast;Borisoglebskiy : 1 : 1480.3
+Tverskaïa oblast (Kalinin;Likhoslavlskiy : 1 : 1733.2
+Tverskaïa oblast (Kalinin;Vyshny Volochek : 1 : 1.8
+Tverskaïa oblast (Kalinin;Rameshkovskiy : 1 : 2414.6001
+Iaroslavskaïa oblast;Uglich : 1 : 2.3
+Ivanovskaïa oblast;Kineshma : 1 : 12.8
+Iaroslavskaïa oblast;Gavrilov-Yamskiy : 1 : 1202.4
+Ivanovskaïa oblast;Privolzhskiy : 1 : 544.40002
+Ivanovskaïa oblast;Vichugskiy : 1 : 996.40002
+Tverskaïa oblast (Kalinin;Ostashkovskiy : 1 : 2581.6001
+Ivanovskaïa oblast;Yuryevetskiy : 1 : 647.70001
+Iaroslavskaïa oblast;Rostovskiy : 1 : 2247.0
+Kostromskaïa oblast;Nerekhta : 1 : 1.4
+Tverskaïa oblast (Kalinin;Kashin : 1 : 1.3
+Tverskaïa oblast (Kalinin;Kalyazinskiy : 1 : 1699.0
+Ivanovskaïa oblast;Furmanovskiy : 1 : 664.70001
+Tverskaïa oblast (Kalinin;Kimrskiy : 1 : 2500.2
+Ivanovskaïa oblast;Rodnikovskiy : 1 : 1011.9
+Tverskaïa oblast (Kalinin;Torzhokskiy : 1 : 3101.8
+Ivanovskaïa oblast;Komsomolskiy : 1 : 1014.2
+Iaroslavskaïa oblast;Rostov : 1 : 56.299999
+Ivanovskaïa oblast;Furmanov : 1 : 1.0
+Ivanovskaïa oblast;Vichuga : 1 : 14.5
+Tverskaïa oblast (Kalinin;Penovskiy : 1 : 2510.0
+Tverskaïa oblast (Kalinin;Kuvshinovskiy : 1 : 1934.8
+Ivanovskaïa oblast;Ivanovskiy : 1 : 1114.0
+Ivanovskaïa oblast;Lukhskiy : 1 : 1015.7
+Ivanovskaïa oblast;Ilyinskiy : 1 : 1343.8
+Iaroslavskaïa oblast;Pereslavskiy : 1 : 3298.5
+Ivanovskaïa oblast;Puchezhskiy : 1 : 752.5
+Tverskaïa oblast (Kalinin;Kalininskiy : 1 : 4491.3999
+Tverskaïa oblast (Kalinin;Andreapolskiy : 1 : 2887.8999
+Tverskaïa oblast (Kalinin;Ostashkov : 1 : 4.4000001
+Ivanovskaïa oblast;Ivanovo : 1 : 104.3
+Tverskaïa oblast (Kalinin;Selizharovskiy : 1 : 3044.8
+Ivanovskaïa oblast;Shuiskiy : 1 : 1071.7
+Ivanovskaïa oblast;Teykovskiy : 1 : 1512.4
+Tverskaïa oblast (Kalinin;Torzshok : 1 : 1.3
+Tverskaïa oblast (Kalinin;Toropetskiy : 1 : 3166.8999
+Ivanovskaïa oblast;Lezhnevskiy : 1 : 782.29999
+Ivanovskaïa oblast;Palekhskiy : 1 : 826.70001
+Moskovskaïa oblast résidu;Taldomskiy : 1 : 1955.3
+Ivanovskaïa oblast;Verkhnelandekhovskiy : 1 : 678.40002
+Tverskaïa oblast (Kalinin;Tver : 1 : 151.39999
+Tverskaïa oblast (Kalinin;Konakovskiy : 1 : 476.20001
+Ivanovskaïa oblast;Shuya : 1 : 13.1
+Tverskaïa oblast (Kalinin;Kimry : 1 : 2.3
+Ivanovskaïa oblast;Teykovo : 1 : 1.6
+Tverskaïa oblast (Kalinin;Staritskiy : 1 : 3306.6001
+Ivanovskaïa oblast;Gavrilovo-Posadskiy : 1 : 939.09998
+Vladimirskaïa oblast;Yuryev-Polskiy : 1 : 1898.0
+Ivanovskaïa oblast;Pestyakovskiy : 1 : 864.59998
+Moskovskaïa oblast résidu;Zagorskiy : 1 : 2472.3999
+Moskovskaïa oblast résidu;Dubna : 1 : 4.8000002
+Ivanovskaïa oblast;Yuzhskiy : 1 : 1493.8
+RU-UNK-2859 : 1 : 1.2
+Tverskaïa oblast (Kalinin;Konakovo : 1 : 1.7
+Ivanovskaïa oblast;Savinskiy : 1 : 1123.1
+Vladimirskaïa oblast;Aleksandrovskiy : 1 : 1536.8
+Tverskaïa oblast (Kalinin;Rzhevskiy : 1 : 2855.8999
+Moskovskaïa oblast résidu;Dmitrovskiy : 1 : 2074.0
+Vladimirskaïa oblast;Suzdalskiy : 1 : 1514.1
+Tverskaïa oblast (Kalinin;Nelidovskiy : 1 : 2757.2
+Moskovskaïa oblast résidu;Klinskiy : 1 : 2051.3
+Vladimirskaïa oblast;Kameshkovskiy : 1 : 1181.1
+Vladimirskaïa oblast;Kovrovskiy : 1 : 1723.1
+Tverskaïa oblast (Kalinin;Oleninskiy : 1 : 2795.8999
+Tverskaïa oblast (Kalinin;Zapadnodvinskiy : 1 : 2532.3
+Vladimirskaïa oblast;Kolchuginskiy : 1 : 1050.6
+Vladimirskaïa oblast;Vyaznikovskiy : 1 : 2140.8999
+Vladimirskaïa oblast;Suzdal' : 1 : 12.2
+Vladimirskaïa oblast;Gorokhovetskiy : 1 : 1375.9
+Moskovskaïa oblast résidu;Lotoshinskiy : 1 : 792.29999
+Vladimirskaïa oblast;Kovrov : 1 : 25.700001
+RU-UNK-2860 : 1 : 2.8
+Vladimirskaïa oblast;Aleksandrov : 1 : 20.200001
+Moskovskaïa oblast résidu;Klin : 1 : 21.799999
+Moskovskaïa oblast résidu;Sergiev Posad : 1 : 10.2
+Vladimirskaïa oblast;Kirzhachskiy : 1 : 1151.2
+Tverskaïa oblast (Kalinin;Zubtsovskiy : 1 : 2096.8
+Moskovskaïa oblast résidu;Solnechnogorskiy : 1 : 1089.0
+Vladimirskaïa oblast;Kol'chugino : 1 : 11.3
+Moskovskaïa oblast résidu;Volokolamskiy : 1 : 1616.7
+Vladimirskaïa oblast;Sobinskiy : 1 : 1810.0
+Tverskaïa oblast (Kalinin;Rzshev : 1 : 2.2
+Vladimirskaïa oblast;Vyazniki : 1 : 16.9
+Moskovskaïa oblast résidu;Schelkovskiy : 1 : 835.20001
+Tverskaïa oblast (Kalinin;Nelidovo : 1 : 1.8
+Moskovskaïa oblast résidu;Shakhovskoy : 1 : 1043.6
+Moskovskaïa oblast résidu;Solnechnogorsk : 1 : 9.8999996
+Moskovskaïa oblast résidu;Pushkinskiy : 1 : 669.59998
+Tverskaïa oblast (Kalinin;Zharkovskiy : 1 : 2071.8
+Vladimirskaïa oblast;Vladimir : 1 : 104.0
+Vladimirskaïa oblast;Petushkinskiy : 1 : 1866.0
+Vladimirskaïa oblast;Sudogodskiy : 1 : 2297.0
+Moskovskaïa oblast résidu;Krasnoarmeysk : 1 : 5.0999999
+RU-UNK-2861 : 1 : 1.0
+Moskovskaïa oblast résidu;Istrinskiy : 1 : 1383.1
+Moskovskaïa oblast résidu;Mytischinskiy : 1 : 426.0
+Tverskaïa oblast (Kalinin;Belskiy : 1 : 1902.0
+Smolenskaïa oblast;Sychevkskiy : 1 : 1994.1
+Moskovskaïa oblast résidu;Noginskiy : 1 : 960.59998
+Moskovskaïa oblast résidu;Volokolamsk : 1 : 10.4
+Moskovskaïa oblast résidu;Puschino : 1 : 4.6999998
+Vladimirskaïa oblast;Selivanovskiy : 1 : 1497.1
+Vladimirskaïa oblast;Sobinka : 1 : 8.0
+Moskovskaïa oblast résidu;Ruzskiy : 1 : 1351.2
+Moskovskaïa oblast résidu;Pavlovo-Posadskiy : 1 : 659.79999
+Smolenskaïa oblast;Gagarinskiy : 1 : 3368.3
+Moskovskaïa oblast résidu;Lobnya : 1 : 1.0
+Moskovskaïa oblast résidu;Ivanteyevka : 1 : 8.8000002
+Moskovskaïa oblast résidu;Fryazino : 1 : 5.5
+Moskovskaïa oblast résidu;Khimkinskiy : 1 : 127.7
+Moskovskaïa oblast résidu;Dolgoprudnyi : 1 : 6.8000002
+Moskovskaïa oblast résidu;Shchelkovo : 1 : 9.6999998
+Vladimirskaïa oblast;Muromskiy : 1 : 1023.8
+Moskva;Moscow : 1 : 984.79999
+Moskovskaïa oblast résidu;Pushkino : 1 : 9.1000004
+Moskovskaïa oblast résidu;Mytyshchy : 1 : 10.2
+Moskovskaïa oblast résidu;Istra : 1 : 5.6999998
+RU-UNK-2862 : 1 : 1.0
+Moskovskaïa oblast résidu;Khimki : 1 : 7.5
+Moskovskaïa oblast résidu;Noginsk : 1 : 32.0
+Moskovskaïa oblast résidu;Kaliningrad : 1 : 11.9
+Moskovskaïa oblast résidu;Krasnogorskiy : 1 : 236.7
+Vladimirskaïa oblast;Gus-Khrustalnyi : 1 : 4458.1001
+Moskovskaïa oblast résidu;Orekhovo-Zuyevskiy : 1 : 1821.8
+Moskovskaïa oblast résidu;Balashikhinskiy : 1 : 258.39999
+Moskovskaïa oblast résidu;Orekhovo-Zuevo : 1 : 8.1000004
+Moskovskaïa oblast résidu;Mozhayskiy : 1 : 2618.3999
+Moskovskaïa oblast résidu;Krasnogorsk : 1 : 7.9000001
+Moskovskaïa oblast résidu;Shaturskiy : 1 : 2505.8
+Moskovskaïa oblast résidu;Elektrostal : 1 : 16.6
+Moskovskaïa oblast résidu;Balashikha : 1 : 2.0999999
+Moskovskaïa oblast résidu;Reutov : 1 : 7.9000001
+Moskovskaïa oblast résidu;Odintsovskiy : 1 : 1144.8
+Moskovskaïa oblast résidu;Zheleznodorozhnyi : 1 : 8.8000002
+Smolenskaïa oblast;Novoduginskiy : 1 : 1940.1
+Smolenskaïa oblast;Velizhskiy : 1 : 1560.2
+Moskovskaïa oblast résidu;Zvenigorod : 1 : 5.8000002
+Smolenskaïa oblast;Demidovskiy : 1 : 2927.6001
+Smolenskaïa oblast;Kholm-Zhirkovskiy : 1 : 2573.7
+Smolenskaïa oblast;Dukhovschinskiy : 1 : 2825.1001
+Moskovskaïa oblast résidu;Lyuberetskiy : 1 : 75.300003
+Moskovskaïa oblast résidu;Odintsovo : 1 : 13.5
+Vladimirskaïa oblast;Gus'-Khrustalny : 1 : 19.200001
+Moskovskaïa oblast résidu;Ramenskiy : 1 : 1444.4
+Moskovskaïa oblast résidu;Leninskiy : 1 : 472.5
+Moskovskaïa oblast résidu;Liubertsy : 1 : 1.8
+Vladimirskaïa oblast;Melenkovskiy : 1 : 2170.1001
+Moskovskaïa oblast résidu;Zhukovskiy : 1 : 4.1999998
+Moskovskaïa oblast résidu;Naro-Fominskiy : 1 : 1943.0
+Moskovskaïa oblast résidu;Ramenskoe : 1 : 15.4
+Moskovskaïa oblast résidu;Shatura : 1 : 5.8000002
+Vladimirskaïa oblast;Murom : 1 : 23.799999
+Smolenskaïa oblast;Gagarin : 1 : 9.3000002
+Moskovskaïa oblast résidu;Vidnoye : 1 : 3.0
+Moskovskaïa oblast résidu;Lytkarino : 1 : 1.3
+Moskovskaïa oblast résidu;Voskresenskiy : 1 : 828.59998
+Moskovskaïa oblast résidu;Podolskiy : 1 : 1065.2
+Moskovskaïa oblast résidu;Mozshaysk : 1 : 9.6000004
+Moskovskaïa oblast résidu;Troitsk : 1 : 2.5999999
+Moskovskaïa oblast résidu;Yegoryevskiy : 1 : 1610.9
+Smolenskaïa oblast;Yartsevskiy : 1 : 1511.4
+RU-UNK-2863 : 1 : 1.0
+Moskovskaïa oblast résidu;Domodedovskiy : 1 : 727.70001
+Moskovskaïa oblast résidu;Podolsk : 1 : 28.1
+Moskovskaïa oblast résidu;Domodedovo : 1 : 7.9000001
+Smolenskaïa oblast;Vyazemskiy : 1 : 3396.7
+Moskovskaïa oblast résidu;Egoryevsk : 1 : 16.6
+Moskovskaïa oblast résidu;Naro-Fominsk : 1 : 20.200001
+Moskovskaïa oblast résidu;Klimovsk : 1 : 8.5
+Moskovskaïa oblast résidu;Voskresensk : 1 : 22.299999
+Ryazanskaïa oblast;Klepikovskiy : 1 : 3065.2
+Smolenskaïa oblast;Rudnyanskiy : 1 : 1597.6
+Moskovskaïa oblast résidu;Bronnitsy : 1 : 1.6
+Kaloujskaïa oblast;Borovskiy : 1 : 870.20001
+Smolenskaïa oblast;Safonovskiy : 1 : 2249.7
+Moskovskaïa oblast résidu;Chekhovskiy : 1 : 890.79999
+Kaloujskaïa oblast;Iznoskovskiy : 1 : 1386.6
+Kaloujskaïa oblast;Medynskiy : 1 : 1049.1
+Smolenskaïa oblast;Tyomkinskiy : 1 : 1380.8
+Moskovskaïa oblast résidu;Stupinskiy : 1 : 1743.0
+Moskovskaïa oblast résidu;Kolomenskiy : 1 : 1143.3
+Kaloujskaïa oblast;Zhukovskiy : 1 : 1354.9
+Ryazanskaïa oblast;Kasimovskiy : 1 : 3232.3
+Smolenskaïa oblast;Vyazma : 1 : 46.799999
+RU-UNK-2864 : 1 : 36.799999
+Smolenskaïa oblast;Safonovo : 1 : 25.700001
+Kaloujskaïa oblast;Maloyaroslavetskiy : 1 : 1703.6
+Kaloujskaïa oblast;Obninsk : 1 : 10.4
+Smolenskaïa oblast;Smolenskiy : 1 : 2692.6001
+Moskovskaïa oblast résidu;Lukhovitskiy : 1 : 1161.1
+Moskovskaïa oblast résidu;Kolomna : 1 : 21.799999
+Smolenskaïa oblast;Yartsevo : 1 : 21.1
+Moskovskaïa oblast résidu;Serpukhovskiy : 1 : 938.90002
+Ryazanskaïa oblast;Rybnovskiy : 1 : 1665.8
+Ryazanskaïa oblast;Yermishinskiy : 1 : 1279.3
+Moskovskaïa oblast résidu;Ozyorskiy : 1 : 525.90002
+Smolenskaïa oblast;Kardymovskiy : 1 : 1044.0
+Smolenskaïa oblast;Ugranskiy : 1 : 2510.8999
+Moskovskaïa oblast résidu;Stupino : 1 : 7.3000002
+Smolenskaïa oblast;Dorogobuzhskiy : 1 : 1906.2
+Kaloujskaïa oblast;Dzerzhinskiy : 1 : 1224.3
+Ryazanskaïa oblast;Kasimov : 1 : 16.299999
+Kaloujskaïa oblast;Yukhnovskiy : 1 : 1384.4
+Moskovskaïa oblast résidu;Serpukhov : 1 : 25.1
+Ryazanskaïa oblast;Ryazanskiy : 1 : 2071.6001
+RU-UNK-2865 : 1 : 2.0999999
+Moskovskaïa oblast résidu;Zarayskiy : 1 : 778.40002
+Kaloujskaïa oblast;Tarusskiy : 1 : 810.90002
+Moskovskaïa oblast résidu;Ozery : 1 : 11.4
+Ryazanskaïa oblast;Spasskiy : 1 : 2626.6001
+Moskovskaïa oblast résidu;Kashirskiy : 1 : 537.29999
+Moskovskaïa oblast résidu;Kashira : 1 : 6.0999999
+Ryazanskaïa oblast;Shilovskiy : 1 : 2373.3999
+Toulskaïa oblast;Zaokskiy : 1 : 930.59998
+Toulskaïa oblast;Yasnogorskiy : 1 : 1240.4
+Smolenskaïa oblast;Glinkovskiy : 1 : 1188.9
+Moskovskaïa oblast résidu;Zaraysk : 1 : 7.5
+Ryazanskaïa oblast;Pitelinskiy : 1 : 885.79999
+Smolenskaïa oblast;Smolensk : 1 : 194.5
+Kaloujskaïa oblast;Mosalskiy : 1 : 1250.8
+Ryazanskaïa oblast;Kadomskiy : 1 : 944.0
+Kaloujskaïa oblast;Ferzikovskiy : 1 : 1358.2
+Toulskaïa oblast;Venevskiy : 1 : 1933.8
+Kaloujskaïa oblast;Kaluga : 1 : 385.10001
+Ryazanskaïa oblast;Ryazan : 1 : 156.0
+Smolenskaïa oblast;Krasninskiy : 1 : 1050.2
+Toulskaïa oblast;Aleksinskiy : 1 : 979.5
+Smolenskaïa oblast;Yelninskiy : 1 : 2111.0
+Moskovskaïa oblast résidu;Serebryanoprudskiy : 1 : 788.79999
+Ryazanskaïa oblast;Zakharovskiy : 1 : 916.90002
+Kaloujskaïa oblast;Babyninskiy : 1 : 839.20001
+Smolenskaïa oblast;Pochinkovskiy : 1 : 2277.8
+Kaloujskaïa oblast;Spas-Demenskiy : 1 : 1354.5
+Kaloujskaïa oblast;Baryatinskiy : 1 : 1123.0
+Kaloujskaïa oblast;Meschovskiy : 1 : 1307.0
+Ryazanskaïa oblast;Sasovskiy : 1 : 1734.8
+Ryazanskaïa oblast;Chuchkovskiy : 1 : 796.40002
+Toulskaïa oblast;Aleksin : 1 : 1.0
+Smolenskaïa oblast;Monastyrshinskiy : 1 : 1035.9
+Kaloujskaïa oblast;Peremyshlskiy : 1 : 999.59998
+Ryazanskaïa oblast;Starozhilovskiy : 1 : 985.90002
+Ryazanskaïa oblast;Mikhaylovskiy : 1 : 1768.7
+Ryazanskaïa oblast;Pronskiy : 1 : 1095.1
+Toulskaïa oblast;Leninskiy : 1 : 1305.5
+Ryazanskaïa oblast;Sasovo : 1 : 8.1999998
+Kaloujskaïa oblast;Sukhinichskiy : 1 : 1075.2
+Toulskaïa oblast;Novomoskovskiy : 1 : 602.0
+Kaloujskaïa oblast;Kozelskiy : 1 : 1737.4
+Toulskaïa oblast;Dubenskiy : 1 : 727.90002
+Ryazanskaïa oblast;Putyatinskiy : 1 : 1002.6
+Kaloujskaïa oblast;Kuybyshevskiy : 1 : 1096.6
+Toulskaïa oblast;Suvorovskiy : 1 : 1029.7
+Toulskaïa oblast;Tula : 1 : 159.39999
+Smolenskaïa oblast;Roslavlskiy : 1 : 2451.3999
+Ryazanskaïa oblast;Shatskiy : 1 : 2460.8999
+Toulskaïa oblast;Kireyevskiy : 1 : 931.59998
+Kaloujskaïa oblast;Kirovskiy : 1 : 934.29999
+Smolenskaïa oblast;Khislavichskiy : 1 : 694.09998
+Kaloujskaïa oblast;Duminichskiy : 1 : 1078.9
+Ryazanskaïa oblast;Korablinskiy : 1 : 1201.3
+Ryazanskaïa oblast;Sapozhkovskiy : 1 : 987.70001
+Toulskaïa oblast;Odoyevskiy : 1 : 1201.0
+Toulskaïa oblast;Kimovskiy : 1 : 1138.7
+Kaloujskaïa oblast;Kirov : 1 : 10.3
+Kaloujskaïa oblast;Lyudinovskiy : 1 : 927.29999
+Toulskaïa oblast;Uzlovskiy : 1 : 631.0
+Toulskaïa oblast;Schekinskiy : 1 : 1301.4
+Bryanskaïa oblast;Rognedinskiy : 1 : 1042.8
+Smolenskaïa oblast;Desnogorsk : 1 : 1.9
+Toulskaïa oblast;Novomoskovsk : 1 : 1.3
+Smolenskaïa oblast;Shumyachskiy : 1 : 1079.7
+Toulskaïa oblast;Donskoy : 1 : 1.0
+Ryazanskaïa oblast;Sarayevskiy : 1 : 1931.4
+Toulskaïa oblast;Schekino : 1 : 1.0
+Toulskaïa oblast;Uzlovaya : 1 : 1.0
+Toulskaïa oblast;Belyevskiy : 1 : 958.59998
+Ryazanskaïa oblast;Ukholovskiy : 1 : 1073.8
+Ryazanskaïa oblast;Skopinskiy : 1 : 1581.6
+Smolenskaïa oblast;Roslavl' : 1 : 25.4
+Toulskaïa oblast;Kimovsk : 1 : 1.0
+Kaloujskaïa oblast;Ulyanovskiy : 1 : 1706.1
+Kaloujskaïa oblast;Lyudinovo : 1 : 19.5
+Kaloujskaïa oblast;Zhizdrinskiy : 1 : 1425.9
+Bryanskaïa oblast;Dyatkovskiy : 1 : 1331.1
+Ryazanskaïa oblast;Ryazhskiy : 1 : 1055.4
+Bryanskaïa oblast;Dubrovskiy : 1 : 1061.9
+Toulskaïa oblast;Bogoroditskiy : 1 : 887.5
+Ryazanskaïa oblast;Skopin : 1 : 5.5
+Toulskaïa oblast;Plavskiy : 1 : 999.20001
+Ryazanskaïa oblast;Miloslavskiy : 1 : 1435.2
+Toulskaïa oblast;Teplo-Ogarevskiy : 1 : 1001.5
+Toulskaïa oblast;Arsenyevskiy : 1 : 1084.6
+Toulskaïa oblast;Bogoroditsk : 1 : 1.0
+Bryanskaïa oblast;Zhukovskiy : 1 : 1026.3
+Smolenskaïa oblast;Yershichskiy : 1 : 848.5
+Kaloujskaïa oblast;Khvastovichskiy : 1 : 1617.5
+Toulskaïa oblast;Volovskiy : 1 : 1101.3
+Toulskaïa oblast;Kurkinskiy : 1 : 1081.0
+Toulskaïa oblast;Chernskiy : 1 : 1394.6
+Bryanskaïa oblast;Kletnyanskiy : 1 : 1667.8
+Ryazanskaïa oblast;Novoderevenskiy : 1 : 851.0
+Orlovskaïa oblast;Bolkhovskiy : 1 : 1340.1
+Bryanskaïa oblast;Dyat'kovo : 1 : 1.0
+Bryanskaïa oblast;Bryanskiy : 1 : 1940.5
+Orlovskaïa oblast;Znamenskiy : 1 : 711.59998
+Orlovskaïa oblast;Mtsenskiy : 1 : 1669.1
+Toulskaïa oblast;Kamenskiy : 1 : 716.0
+Toulskaïa oblast;Yefremovskiy : 1 : 1731.1
+Orlovskaïa oblast;Khotynetskiy : 1 : 848.5
+Bryanskaïa oblast;Karachevskiy : 1 : 1314.6
+Bryanskaïa oblast;Surazhskiy : 1 : 1319.6
+Bryanskaïa oblast;Bryansk : 1 : 134.89999
+Bryanskaïa oblast;Zhiryatinskiy : 1 : 615.20001
+RU-UNK-2866 : 1 : 1.0
+Orlovskaïa oblast;Mzensk : 1 : 5.4000001
+Bryanskaïa oblast;Mglinskiy : 1 : 866.09998
+Orlovskaïa oblast;Korsakovskiy : 1 : 662.5
+Orlovskaïa oblast;Orlovskiy : 1 : 1788.6
+Bryanskaïa oblast;Krasnogorskiy : 1 : 1248.2
+Bryanskaïa oblast;Vygonichskiy : 1 : 998.40002
+Bryanskaïa oblast;Pochepskiy : 1 : 2075.3
+Orlovskaïa oblast;Novosilskiy : 1 : 685.40002
+Orlovskaïa oblast;Uritskiy : 1 : 719.40002
+Toulskaïa oblast;Efremov : 1 : 1.0
+Bryanskaïa oblast;Gordeyevskiy : 1 : 842.20001
+Orlovskaïa oblast;Novoderevenkovskiy : 1 : 893.40002
+Bryanskaïa oblast;Navlinskiy : 1 : 1976.3
+Orlovskaïa oblast;Zalegoschenskiy : 1 : 1046.5
+Orlovskaïa oblast;Shablykinskiy : 1 : 948.20001
+Orlovskaïa oblast;Oryol : 1 : 91.900002
+Bryanskaïa oblast;Unechskiy : 1 : 1076.9
+Orlovskaïa oblast;Verkhovskiy : 1 : 1095.5
+Bryanskaïa oblast;Klintsovskiy : 1 : 1325.8
+Orlovskaïa oblast;Krasnozorenskiy : 1 : 626.5
+Orlovskaïa oblast;Soskovskiy : 1 : 579.5
+Bryanskaïa oblast;Trubchevskiy : 1 : 1703.3
+Orlovskaïa oblast;Sverdlovskiy : 1 : 1113.4
+Orlovskaïa oblast;Kromskiy : 1 : 1032.3
+Bryanskaïa oblast;Brasovskiy : 1 : 1173.6
+Bryanskaïa oblast;Klintsy : 1 : 1.0
+Orlovskaïa oblast;Pokrovskiy : 1 : 1373.3
+Bryanskaïa oblast;Novozybkovskiy : 1 : 1388.6
+Bryanskaïa oblast;Starodubskiy : 1 : 1702.2
+Bryanskaïa oblast;Pogarskiy : 1 : 1099.2
+Orlovskaïa oblast;Dmitrovskiy : 1 : 1259.3
+Orlovskaïa oblast;Livenskiy : 1 : 1817.8
+Bryanskaïa oblast;Suzemskiy : 1 : 1283.9
+Orlovskaïa oblast;Glazunovskiy : 1 : 583.20001
+Orlovskaïa oblast;Maloarkhangelskiy : 1 : 882.79999
+Bryanskaïa oblast;Novozybkov : 1 : 1.0
+Bryanskaïa oblast;Klimovskiy : 1 : 1199.8
+Bryanskaïa oblast;Komarichskiy : 1 : 919.29999
+Orlovskaïa oblast;Trosnyanskiy : 1 : 638.79999
+Orlovskaïa oblast;Livny : 1 : 21.0
+Bryanskaïa oblast;Zlynkovskiy : 1 : 765.5
+Orlovskaïa oblast;Kolpnyanskiy : 1 : 1093.1
+Bryanskaïa oblast;Sevskiy : 1 : 1130.8
+Orlovskaïa oblast;Dolzhanskiy : 1 : 1284.4
+RU-UNK-2867 : 1 : 1.2
+RU-UNK-2868 : 1 : 2.8
+RU-UNK-2869 : 1 : 1.0
+RU-UNK-2870 : 1 : 1.0
+RU-UNK-2871 : 1 : 1.0
+RU-UNK-2872 : 1 : 36.799999
+RU-UNK-2873 : 1 : 2.0999999
+RU-UNK-2874 : 1 : 1.0
+Leningradskaïa oblast rés;Vyborgskiy : 1 : 6427.2002
+Leningradskaïa oblast rés;Podporozhskiy : 1 : 7262.3999
+Leningradskaïa oblast rés;Priozerskiy : 1 : 4250.5
+Leningradskaïa oblast rés;Priozersk : 1 : 1.0
+Leningradskaïa oblast rés;Lodeynopolskiy : 1 : 5898.0
+Leningradskaïa oblast rés;Podporozhye : 1 : 1.5
+Leningradskaïa oblast rés;Lodeynoye Pole : 1 : 3.0
+Leningradskaïa oblast rés;Vyborg : 1 : 1.3
+Leningradskaïa oblast rés;Volkhovskiy : 1 : 7345.3999
+Leningradskaïa oblast rés;Vsevolzhskiy : 1 : 3358.8999
+Sankt-Peterburg;Sankt-Petersburg : 1 : 1212.2
+Leningradskaïa oblast rés;Tikhvinskiy : 1 : 8030.7002
+Leningradskaïa oblast rés;Lomonosovskiy : 1 : 1646.6
+Leningradskaïa oblast rés;Boksitogorskiy : 1 : 6384.8999
+Leningradskaïa oblast rés;Vsevolozhsk : 1 : 1.3
+Leningradskaïa oblast rés;Kirovskiy : 1 : 2154.1001
+Leningradskaïa oblast rés;Sosnovyi Bor : 1 : 1.0
+Leningradskaïa oblast rés;Kingiseppskiy : 1 : 2593.2
+Leningradskaïa oblast rés;Volkhov : 1 : 1.5
+Leningradskaïa oblast rés;Kirovsk : 1 : 1.0
+Leningradskaïa oblast rés;Kirishskiy : 1 : 2532.5
+Leningradskaïa oblast rés;Tosnenskiy : 1 : 3900.6001
+Leningradskaïa oblast rés;Gatchinskiy : 1 : 2115.7
+Leningradskaïa oblast rés;Volosovskiy : 1 : 2083.3999
+Leningradskaïa oblast rés;Tikhvin : 1 : 2.5
+Leningradskaïa oblast rés;Gatchina : 1 : 1.6
+Leningradskaïa oblast rés;Tosno : 1 : 1.0
+Leningradskaïa oblast rés;Boksitogorsk : 1 : 1.9
+Leningradskaïa oblast rés;Ivangorod : 1 : 1.0
+Leningradskaïa oblast rés;Kingisepp : 1 : 1.0
+Leningradskaïa oblast rés;Pikalevo : 1 : 3.0999999
+Leningradskaïa oblast rés;Slantsevskiy : 1 : 2478.1001
+Leningradskaïa oblast rés;Kirishi : 1 : 1.2
+Novgorodskaïa oblast;Chudovskiy : 1 : 2377.8
+Novgorodskaïa oblast;Lyubytinskiy : 1 : 4356.7002
+Leningradskaïa oblast rés;Luzhskiy : 1 : 6704.2998
+Novgorodskaïa oblast;Khvoyninskiy : 1 : 3208.5
+Novgorodskaïa oblast;Malovisherskiy : 1 : 3345.5
+Leningradskaïa oblast rés;Slantsy : 1 : 1.2
+Novgorodskaïa oblast;Novgorodskiy : 1 : 4729.7998
+Pskovskaïa oblast;Gdovskiy : 1 : 2986.0
+Pskovskaïa oblast;Plyusskiy : 1 : 2216.5
+Novgorodskaïa oblast;Batetskiy : 1 : 1741.1
+Leningradskaïa oblast rés;Luga : 1 : 1.0
+Novgorodskaïa oblast;Pestovskiy : 1 : 1939.4
+Novgorodskaïa oblast;Borovichskiy : 1 : 3003.5
+Novgorodskaïa oblast;Moshenskiy : 1 : 3.0999999
+Novgorodskaïa oblast;Okulovskiy : 1 : 2401.5
+Novgorodskaïa oblast;Novgorod : 1 : 127.5
+Pskovskaïa oblast;Strugo-Krasnenskiy : 1 : 3203.8
+Novgorodskaïa oblast;Krestetskiy : 1 : 2853.3
+Novgorodskaïa oblast;Shimskiy : 1 : 1883.0
+Novgorodskaïa oblast;Borovichi : 1 : 41.900002
+Pskovskaïa oblast;Pskovskiy : 1 : 3622.8999
+Novgorodskaïa oblast;Soletskiy : 1 : 1402.6
+Novgorodskaïa oblast;Starorusskiy : 1 : 3298.8
+Novgorodskaïa oblast;Parfino : 1 : 1546.1
+Novgorodskaïa oblast;Valdayskiy : 1 : 2493.5
+Pskovskaïa oblast;Porkhovskiy : 1 : 3038.8
+Novgorodskaïa oblast;Demyanskiy : 1 : 3207.8999
+Novgorodskaïa oblast;Volotovskiy : 1 : 1225.7
+Novgorodskaïa oblast;Staraya Russa : 1 : 28.200001
+Pskovskaïa oblast;Pechorskiy : 1 : 1143.8
+Pskovskaïa oblast;Dnovskiy : 1 : 1040.5
+Pskovskaïa oblast;Pskov : 1 : 5.0
+Novgorodskaïa oblast;Poddorskiy : 1 : 2777.2
+Pskovskaïa oblast;Palkinskiy : 1 : 1214.2
+Pskovskaïa oblast;Dedovicheskiy : 1 : 2325.2
+Pskovskaïa oblast;Ostrovskiy : 1 : 2576.8
+Novgorodskaïa oblast;Marevskiy : 1 : 1615.8
+Pskovskaïa oblast;Bezhanitskiy : 1 : 3575.0
+Pskovskaïa oblast;Pytalovskiy : 1 : 1135.6
+Novgorodskaïa oblast;Kholmskiy : 1 : 2286.8
+Pskovskaïa oblast;Novorzhevskiy : 1 : 1711.4
+Pskovskaïa oblast;Ostrov : 1 : 3.5999999
+Pskovskaïa oblast;Loknyanskiy : 1 : 2150.8
+Pskovskaïa oblast;Pushkino-Gorskiy : 1 : 980.40002
+Pskovskaïa oblast;Krasnogorodskiy : 1 : 1357.4
+Pskovskaïa oblast;Opochenskiy : 1 : 1910.7
+Pskovskaïa oblast;Velikolukskiy : 1 : 3004.6001
+Pskovskaïa oblast;Novosokolnicheskiy : 1 : 1784.6
+Pskovskaïa oblast;Pustoshkinskiy : 1 : 2001.5
+Pskovskaïa oblast;Sebezhskiy : 1 : 2934.3
+Pskovskaïa oblast;Kunyinskiy : 1 : 2903.2
+Pskovskaïa oblast;Velikie Luki : 1 : 8.1000004
+Pskovskaïa oblast;Nevelskiy : 1 : 2554.2
+Pskovskaïa oblast;Usvyatskiy : 1 : 1016.6
+Rostovskaïa oblast;Verkhnedonskoy : 1 : 2747.0
+Rostovskaïa oblast;Sholokhovskiy : 1 : 3404.3
+Rostovskaïa oblast;Chertkovskiy : 1 : 2255.0
+Rostovskaïa oblast;Bokovskiy : 1 : 2013.5
+Rostovskaïa oblast;Kasharskiy : 1 : 3052.5
+Rostovskaïa oblast;Millerovskiy : 1 : 3169.3
+Rostovskaïa oblast;Sovetskiy : 1 : 1584.7
+Rostovskaïa oblast;Millerovo : 1 : 83.300003
+Rostovskaïa oblast;Milyutinskiy : 1 : 2171.5
+Rostovskaïa oblast;Oblivskiy : 1 : 1786.7
+Rostovskaïa oblast;Tarasovskiy : 1 : 2698.8
+Rostovskaïa oblast;Kamenskiy : 1 : 2753.3999
+Rostovskaïa oblast;Belokalitvinskiy : 1 : 2366.8
+Rostovskaïa oblast;Tatsynskiy : 1 : 2024.2
+Rostovskaïa oblast;Morozovskiy : 1 : 2974.0
+Rostovskaïa oblast;Donetsk : 1 : 95.400002
+Rostovskaïa oblast;Kamensk-Shakhtinskiy : 1 : 135.39999
+Rostovskaïa oblast;Belaya Kalitva : 1 : 21.299999
+Rostovskaïa oblast;Krasnosulinskiy : 1 : 2059.8
+Rostovskaïa oblast;Gukovo : 1 : 53.099998
+Rostovskaïa oblast;Tsymlyanskiy : 1 : 1777.1
+Rostovskaïa oblast;Zverevo : 1 : 1.8
+Rostovskaïa oblast;Konstantinovskiy : 1 : 2031.4
+Rostovskaïa oblast;Krasnyi Sulin : 1 : 164.5
+Rostovskaïa oblast;Ust-Donetskiy : 1 : 1452.5
+Rostovskaïa oblast;Rodionovo-Nesvetayskiy : 1 : 1699.8
+Rostovskaïa oblast;Kuybyshevskiy : 1 : 959.59998
+Rostovskaïa oblast;Novoshakhtinsk : 1 : 159.60001
+Rostovskaïa oblast;Oktyabrskiy : 1 : 1925.0
+Rostovskaïa oblast;Shakhty : 1 : 169.7
+Rostovskaïa oblast;Matveyevo-Kurganskiy : 1 : 1743.1
+Rostovskaïa oblast;Dubovskiy : 1 : 4118.2002
+Rostovskaïa oblast;Volgodonskiy : 1 : 1460.4
+Rostovskaïa oblast;Semikarakorskiy : 1 : 1259.5
+Rostovskaïa oblast;Neklinovskiy : 1 : 2125.7
+Rostovskaïa oblast;Volgodonsk : 1 : 5.0
+Rostovskaïa oblast;Zavetinskiy : 1 : 4532.7998
+Rostovskaïa oblast;Aksayskiy : 1 : 1229.8
+Rostovskaïa oblast;Myasnikovskiy : 1 : 734.79999
+Rostovskaïa oblast;Novocherkassk : 1 : 120.6
+Rostovskaïa oblast;Martynovskiy : 1 : 1930.1
+Rostovskaïa oblast;Zimovnikovskiy : 1 : 4658.6001
+Rostovskaïa oblast;Bagayevskiy : 1 : 1083.1
+Rostovskaïa oblast;Rostov-na-Dony : 1 : 384.79999
+Rostovskaïa oblast;Veselovskiy : 1 : 1156.2
+Rostovskaïa oblast;Taganrog : 1 : 76.099998
+Rostovskaïa oblast;Azovskiy : 1 : 2751.5
+Rostovskaïa oblast;Proletarskiy : 1 : 1850.9
+Rostovskaïa oblast;Bataysk : 1 : 79.900002
+Rostovskaïa oblast;Orlovskiy : 1 : 3123.6001
+Rostovskaïa oblast;Azov : 1 : 57.799999
+Rostovskaïa oblast;Kagalnitskiy : 1 : 1203.2
+Rostovskaïa oblast;Zernogradskiy : 1 : 2882.3999
+Rostovskaïa oblast;Salskiy : 1 : 2976.3999
+Rostovskaïa oblast;Tselinskiy : 1 : 2164.6001
+Krasnodarski kraï résidue;Scherbinovskiy : 1 : 1420.0
+Krasnodarski kraï résidue;Kuschevskiy : 1 : 2446.3999
+Rostovskaïa oblast;Remontnenskiy : 1 : 3470.3999
+Krasnodarski kraï résidue;Yeysk : 1 : 120.7
+Krasnodarski kraï résidue;Yeyskiy : 1 : 2187.7
+Rostovskaïa oblast;Yegorlykskiy : 1 : 1210.6
+Krasnodarski kraï résidue;Starominskiy : 1 : 1241.1
+Krasnodarski kraï résidue;Krylovskiy : 1 : 1196.2
+Rostovskaïa oblast;Salsk : 1 : 41.400002
+Krasnodarski kraï résidue;Leningradskiy : 1 : 1605.3
+Krasnodarski kraï résidue;Kanevskiy : 1 : 2441.3999
+Rostovskaïa oblast;Peschanokopskiy : 1 : 1792.9
+Krasnodarski kraï résidue;Novopokrovskiy : 1 : 2316.5
+Krasnodarski kraï résidue;Beloglinskiy : 1 : 1223.5
+Krasnodarski kraï résidue;Pavlovskiy : 1 : 1876.2
+Stavropolski kraï résidue;Apanasenkovskiy : 1 : 3225.8999
+Krasnodarski kraï résidue;Primorsko-Akhtarskiy : 1 : 2705.8
+Stavropolski kraï résidue;Ipatovskiy : 1 : 3983.3
+Krasnodarski kraï résidue;Tikhoretskiy : 1 : 1832.5
+Krasnodarski kraï résidue;Bryukhovetskiy : 1 : 1441.9
+Stavropolski kraï résidue;Krasnogvardeyskiy : 1 : 2078.8999
+Krasnodarski kraï résidue;Tikhoretzk : 1 : 27.1
+Krasnodarski kraï résidue;Vyselkovskiy : 1 : 1720.8
+Stavropolski kraï résidue;Trunovskiy : 1 : 1842.8
+Krasnodarski kraï résidue;Korenovskiy : 1 : 1161.0
+Krasnodarski kraï résidue;Kalininskiy : 1 : 1535.4
+Stavropolski kraï résidue;Novoaleksandrovskiy : 1 : 2110.0
+Krasnodarski kraï résidue;Timashevskiy : 1 : 1431.4
+Krasnodarski kraï résidue;Slavyanskiy : 1 : 2043.6
+Stavropolski kraï résidue;Turkmenskiy : 1 : 3134.7
+Krasnodarski kraï résidue;Kavkazskiy : 1 : 1086.0
+Stavropolski kraï résidue;Izobilnenskiy : 1 : 1878.6
+Stavropolski kraï résidue;Arzgirzskiy : 1 : 3197.8999
+Krasnodarski kraï résidue;Tbilisskiy : 1 : 1132.4
+Stavropolski kraï résidue;Petrovskiy : 1 : 2728.7
+Krasnodarski kraï résidue;Krasnoarmeyskiy : 1 : 1898.2
+Krasnodarski kraï résidue;Krasnodar : 1 : 255.5
+Krasnodarski kraï résidue;Kropotkin : 1 : 92.199997
+Stavropolski kraï résidue;Grachevskiy : 1 : 1485.8
+Krasnodarski kraï résidue;Temryukskiy : 1 : 2033.9
+Krasnodarski kraï résidue;Ust-Labinskiy : 1 : 1505.0
+Stavropolski kraï résidue;Levokumskiy : 1 : 4511.2002
+Krasnodarski kraï résidue;Gulkevichskiy : 1 : 1598.2
+Krasnodarski kraï résidue;Dinskiy : 1 : 1438.4
+Stavropolski kraï résidue;Blagodarnenskiy : 1 : 1820.8
+Stavropolski kraï résidue;Shpakovskiy : 1 : 2385.6001
+Krasnodarski kraï résidue;Slavyansk-Na-Kubani : 1 : 254.0
+Krasnodarski kraï résidue;Novokubanskiy : 1 : 1819.6
+Respoublika Adygeïa;Krasnogvardeyskiy : 1 : 597.59998
+Krasnodarski kraï résidue;Kurganinskiy : 1 : 1539.6
+Krasnodarski kraï résidue;Anapskiy : 1 : 803.0
+Stavropolski kraï résidue;Stavropol : 1 : 257.39999
+Krasnodarski kraï résidue;Krymskiy : 1 : 1661.4
+Krasnodarski kraï résidue;Abinskiy : 1 : 1812.0
+Respoublika Adygeïa;Shovgenovskiy : 1 : 554.59998
+Stavropolski kraï résidue;Budennovskiy : 1 : 2977.8999
+Krasnodarski kraï résidue;Armavir : 1 : 250.89999
+Respoublika Adygeïa;Takhtamukayskiy : 1 : 455.0
+Krasnodarski kraï résidue;Anapa : 1 : 69.300003
+Krasnodarski kraï résidue;Severskiy : 1 : 2278.7
+Respoublika Adygeïa;Koshekhablskiy : 1 : 460.29999
+Respoublika Adygeïa;Teuchezhskiy : 1 : 488.60001
+Krasnodarski kraï résidue;Uspenskiy : 1 : 914.20001
+Stavropolski kraï résidue;Kochubeyevskiy : 1 : 2573.3999
+Stavropolski kraï résidue;Aleksandrovskiy : 1 : 1823.4
+Stavropolski kraï résidue;Neftekumskiy : 1 : 3890.3999
+Stavropolski kraï résidue;Andropovskiy : 1 : 2592.5
+Stavropolski kraï résidue;Novoselitskiy : 1 : 2034.1
+Dagestan;Nogayskiy : 1 : 8607.7002
+Krasnodarski kraï résidue;Belorechnskiy : 1 : 1298.6
+Dagestan;Tarumovskiy : 1 : 3028.3999
+Respoublika Adygeïa;Giaginskiy : 1 : 850.70001
+Krasnodarski kraï résidue;Novorossiysk : 1 : 561.09998
+Krasnodarski kraï résidue;Krymsk : 1 : 4.5999999
+Stavropolski kraï résidue;Budennovsk : 1 : 61.5
+Krasnodarski kraï résidue;Goryachiy Klyuch : 1 : 1681.0
+RU-UNK-2875 : 1 : 3.8
+Respoublika Adygeïa;Maykopskiy : 1 : 4175.7998
+Krasnodarski kraï résidue;Belorechensk : 1 : 46.299999
+Krasnodarski kraï résidue;Gelendzhik : 1 : 883.09998
+Krasnodarski kraï résidue;Labinsk : 1 : 66.199997
+Krasnodarski kraï résidue;Labinskiy : 1 : 1593.0
+Krasnodarski kraï résidue;Mostovskiy : 1 : 3360.5
+Stavropolski kraï résidue;Nevinnomyssk : 1 : 86.699997
+RU-UNK-2876 : 1 : 3.8
+Respoublika Adygeïa;Maykop : 1 : 3.3
+Krasnodarski kraï résidue;Apsheronskiy : 1 : 2462.8
+Krasnodarski kraï résidue;Otradnenskiy : 1 : 2449.8
+Stavropolski kraï résidue;Georgiyevskiy : 1 : 1921.2
+Stavropolski kraï résidue;Sovetskiy : 1 : 1834.8
+Stavropolski kraï résidue;Mineralovodskiy : 1 : 1536.9
+Stavropolski kraï résidue;Stepnovskiy : 1 : 1733.7
+Karatchaevo-Tcherkesskaïa;Adyge-Khablskiy : 1 : 609.0
+Krasnodarski kraï résidue;Tuapsinskiy : 1 : 2042.6
+Karatchaevo-Tcherkesskaïa;Prikubanskiy : 1 : 1040.0
+Dagestan;Kizlyarskiy : 1 : 3420.3999
+Stavropolski kraï résidue;Predgornyi : 1 : 2207.2
+Stavropolski kraï résidue;Kurskiy : 1 : 3894.6001
+Karatchaevo-Tcherkesskaïa;Cherkessk : 1 : 70.099998
+Karatchaevo-Tcherkesskaïa;Khabezskiy : 1 : 754.20001
+Stavropolski kraï résidue;Mineralniye Vody : 1 : 68.5
+Stavropolski kraï résidue;Georgiyevsk : 1 : 26.299999
+Stavropolski kraï résidue;Kirovskiy : 1 : 1409.1
+Stavropolski kraï résidue;Zheleznovodsk : 1 : 86.5
+Karatchaevo-Tcherkesskaïa;Ust-Dzhegutinskiy : 1 : 996.90002
+Stavropolski kraï résidue;Lermontov : 1 : 27.200001
+Karatchaevo-Tcherkesskaïa;Zelenchugskiy : 1 : 2830.8999
+Karatchaevo-Tcherkesskaïa;Urupskiy : 1 : 3122.5
+Stavropolski kraï résidue;Pyatigorsk : 1 : 52.900002
+Stavropolski kraï résidue;Yessentuki : 1 : 39.900002
+Krasnodarski kraï résidue;Sochi : 1 : 3297.6001
+Krasnodarski kraï résidue;Tuapse : 1 : 4.0
+Karatchaevo-Tcherkesskaïa;Malokarachayevskiy : 1 : 1109.3
+Tchetchenia*;Naurskiy : 1 : 2066.3
+Kabardino-Balkaria;Prokhladnenskiy : 1 : 1435.7
+Stavropolski kraï résidue;Kislovodsk : 1 : 51.700001
+Tchetchenia*;Shelkovskiy : 1 : 2686.3999
+Kabardino-Balkaria;Zolskiy : 1 : 2439.3
+Dagestan;Makhachkala : 1 : 812.09998
+Karatchaevo-Tcherkesskaïa;Karachayevskiy : 1 : 3809.8999
+Dagestan;Babayurtovskiy : 1 : 2923.7
+Dagestan;Kizlyar : 1 : 59.5
+Kabardino-Balkaria;Baksanskiy : 1 : 1629.5
+Severo-Osetinskaïa respou;Mozdokskiy : 1 : 1250.4
+Karatchaevo-Tcherkesskaïa;Karachayevsk : 1 : 12.3
+Kabardino-Balkaria;Terskiy : 1 : 858.79999
+Kabardino-Balkaria;Prokhladnyi : 1 : 36.900002
+Kabardino-Balkaria;Mayskiy : 1 : 336.29999
+Tchetchenia*;Nadterechnyi : 1 : 1017.4
+Kabardino-Balkaria;Urvanskiy : 1 : 1178.4
+Kabardino-Balkaria;Chegemskiy : 1 : 1369.3
+Ingouchetia*;Malgobekskiy : 1 : 637.20001
+Tchetchenia*;Groznenskiy : 1 : 1414.1
+Dagestan;Khasavyurtovskiy : 1 : 1567.8
+RU-UNK-2877 : 1 : 140.7
+Ingouchetia*;Sunzhenskiy : 1 : 1811.3
+Kabardino-Balkaria;Sovetskiy : 1 : 1985.9
+Ingouchetia*;Malgobek : 1 : 1.0
+Tchetchenia*;Gudermesskiy : 1 : 681.29999
+Kabardino-Balkaria;Tyrnyauz : 1 : 863.79999
+Severo-Osetinskaïa respou;Kirovskiy : 1 : 416.29999
+Tchetchenia*;Groznyi : 1 : 293.20001
+Severo-Osetinskaïa respou;Pravoberezhnyi : 1 : 539.09998
+Ingouchetia*;Nazranovskiy : 1 : 491.5
+Dagestan;Kizilyurtovskiy : 1 : 1373.5
+Tchetchenia*;Achkhoy-Martanovskiy : 1 : 927.0
+Tchetchenia*;Gudermes : 1 : 1.0
+Tchetchenia*;Shalinskiy : 1 : 961.90002
+Tchetchenia*;Argun : 1 : 1.0
+Severo-Osetinskaïa respou;Prigorodnyi : 1 : 1324.5
+Severo-Osetinskaïa respou;Irafskiy : 1 : 982.5
+Dagestan;Khasavyurt : 1 : 32.799999
+Severo-Osetinskaïa respou;Digorskiy : 1 : 607.79999
+Severo-Osetinskaïa respou;Ardonskiy : 1 : 406.60001
+Dagestan;Novolakskiy : 1 : 263.89999
+Dagestan;Kizilyurt : 1 : 85.900002
+Tchetchenia*;Urus-Martanovskiy : 1 : 490.39999
+Tchetchenia*;Nozhay-Yurtovskiy : 1 : 706.79999
+Dagestan;Kazbekovskiy : 1 : 675.0
+Tchetchenia*;Shali : 1 : 1.0
+Tchetchenia*;Urus-Martan : 1 : 1.0
+Dagestan;Buynakskiy : 1 : 2145.3
+Severo-Osetinskaïa respou;Vladikavkaz : 1 : 253.3
+Severo-Osetinskaïa respou;Alagirskiy : 1 : 2027.1
+Tchetchenia*;Vedenskiy : 1 : 942.29999
+Tchetchenia*;Shatoyskiy : 1 : 436.0
+Dagestan;Kaspiysk : 1 : 71.900002
+Dagestan;Gumbetovskiy : 1 : 660.59998
+Dagestan;Botlikhskiy : 1 : 946.29999
+Dagestan;Leninskiy : 1 : 1256.7
+Tchetchenia*;Itum-Kalinskiy : 1 : 2099.8
+Dagestan;Untsukulskiy : 1 : 535.20001
+Dagestan;Buynaksk : 1 : 16.9
+Dagestan;Khunzakhskiy : 1 : 454.29999
+Dagestan;Akhvakhskiy : 1 : 308.70001
+Dagestan;Tsumadinskiy : 1 : 1221.4
+Dagestan;Kayakentskiy : 1 : 820.79999
+Dagestan;Levashinskiy : 1 : 1039.7
+Dagestan;Gergebilskiy : 1 : 381.60001
+Dagestan;Izberbash : 1 : 14.4
+Dagestan;Sovetskiy : 1 : 1011.5
+Dagestan;Gunibskiy : 1 : 628.29999
+Dagestan;Sergokalinskiy : 1 : 541.59998
+Dagestan;Tsuntinskiy : 1 : 1186.7
+Dagestan;Akushinskiy : 1 : 599.40002
+Dagestan;Tlyaratinskiy : 1 : 1396.1
+Dagestan;Charodinskiy : 1 : 1099.1
+Dagestan;Derbentskiy : 1 : 734.70001
+Dagestan;Lakskiy : 1 : 739.0
+Dagestan;Kaytagskiy : 1 : 751.5
+Dagestan;Dakhadayevskiy : 1 : 806.5
+Dagestan;Kulinskiy : 1 : 680.59998
+Dagestan;Derbent : 1 : 103.3
+Dagestan;Dagestanskiye Ogni : 1 : 1.5
+Dagestan;Tabasaranskiy : 1 : 925.09998
+Dagestan;Agulskiy : 1 : 733.0
+Dagestan;Rutulskiy : 1 : 2174.3999
+Dagestan;Magaramkentskiy : 1 : 416.0
+Dagestan;Khivskiy : 1 : 507.70001
+Dagestan;Suleyman-Stalskiy : 1 : 529.29999
+Dagestan;Kurakhskiy : 1 : 649.70001
+Dagestan;Akhtynskiy : 1 : 1217.8
+RU-UNK-2878 : 1 : 3.8
+RU-UNK-2879 : 1 : 3.8
+RU-UNK-2880 : 1 : 140.7
+Sverdlovskaïa oblast;Ivdel : 1 : 25985.699
+Permskaïa oblast résiduel;Krasnovisherskiy : 1 : 14621.9
+Permskaïa oblast résiduel;Cherdynskiy : 1 : 20711.9
+Komi-Permiatski national;Gaynskiy : 1 : 14601.7
+Sverdlovskaïa oblast;Severouralsk : 1 : 3751.7
+Sverdlovskaïa oblast;Garinskiy : 1 : 17117.801
+Komi-Permiatski national;Kosinskiy : 1 : 3041.1001
+Permskaïa oblast résiduel;Solikamskiy : 1 : 5460.7002
+Sverdlovskaïa oblast;Karpinsk : 1 : 5567.1001
+Sverdlovskaïa oblast;Serovskiy : 1 : 9903.5
+Komi-Permiatski national;Kochevskiy : 1 : 3017.8999
+Sverdlovskaïa oblast;Krasnoturinsk : 1 : 619.70001
+Permskaïa oblast résiduel;Aleksandrovsk : 1 : 5822.7002
+Permskaïa oblast résiduel;Usolskiy : 1 : 3074.6001
+Komi-Permiatski national;Yurlinskiy : 1 : 3957.6001
+Sverdlovskaïa oblast;Serov : 1 : 419.79999
+Sverdlovskaïa oblast;Novolyalinskiy : 1 : 6077.2998
+Permskaïa oblast résiduel;Solikamsk : 1 : 5.5999999
+Permskaïa oblast résiduel;Berezniki : 1 : 393.0
+Komi-Permiatski national;Kudymkarskiy : 1 : 4307.2998
+Sverdlovskaïa oblast;Taborinskiy : 1 : 10955.6
+Permskaïa oblast résiduel;Kizel : 1 : 1168.6
+Permskaïa oblast résiduel;Gornozavodskiy : 1 : 6738.0
+Komi-Permiatski national;Yusvinskiy : 1 : 3434.3999
+Komi-Permiatski national;Kudymkar : 1 : 2.8
+Sverdlovskaïa oblast;Alapayevskiy : 1 : 10711.7
+Sverdlovskaïa oblast;Verkhoturskiy : 1 : 5051.8999
+Permskaïa oblast résiduel;Dobryanskiy : 1 : 4451.3999
+Permskaïa oblast résiduel;Gremyachinsk : 1 : 1421.4
+Sverdlovskaïa oblast;Nizhnyaya Tura : 1 : 2383.5
+Permskaïa oblast résiduel;Gubakha : 1 : 1025.0
+Permskaïa oblast résiduel;Ilyinskiy : 1 : 2229.1001
+Sverdlovskaïa oblast;Kachkanar : 1 : 341.29999
+Permskaïa oblast résiduel;Karagayskiy : 1 : 2419.5
+Sverdlovskaïa oblast;Turinskiy : 1 : 7224.6001
+Permskaïa oblast résiduel;Chusovskoy : 1 : 3495.3
+Permskaïa oblast résiduel;Sivinskiy : 1 : 2450.5
+Sverdlovskaïa oblast;Tavdinskiy : 1 : 6513.6001
+Sverdlovskaïa oblast;Kushva : 1 : 2335.1001
+Sverdlovskaïa oblast;Krasnouralsk : 1 : 1537.3
+Oudmourtia;Glazovskiy : 1 : 2015.8
+Oudmourtia;Balezinskiy : 1 : 2578.3
+Sverdlovskaïa oblast;Verkhnesaldinskiy : 1 : 2495.1001
+Oudmourtia;Yarskiy : 1 : 1384.8
+Oudmourtia;Kezskiy : 1 : 2549.1001
+Permskaïa oblast résiduel;Nytvenskiy : 1 : 1637.5
+Permskaïa oblast résiduel;Krasnokamsk : 1 : 930.20001
+Permskaïa oblast résiduel;Chusovoy : 1 : 3.0
+Permskaïa oblast résiduel;Vereschaginskiy : 1 : 1586.1
+Permskaïa oblast résiduel;Lysvenskiy : 1 : 3445.5
+Sverdlovskaïa oblast;Prigorodnyi : 1 : 7610.1001
+Permskaïa oblast résiduel;Perm : 1 : 108.2
+Permskaïa oblast résiduel;Permskiy : 1 : 3535.5
+Permskaïa oblast résiduel;Lysva : 1 : 2.7
+Sverdlovskaïa oblast;Nizhniaya Salda : 1 : 2.9000001
+Oudmourtia;Yukamenskiy : 1 : 835.09998
+Oudmourtia;Glazov : 1 : 1.0
+Permskaïa oblast résiduel;Ocherskiy : 1 : 1318.0
+Sverdlovskaïa oblast;Verkhniaya Salda : 1 : 3.7
+Sverdlovskaïa oblast;Irbitskiy : 1 : 4650.0
+Sverdlovskaïa oblast;Tavda : 1 : 3.5
+Sverdlovskaïa oblast;Nizhniy Tagil : 1 : 306.10001
+Permskaïa oblast résiduel;Kungurskiy : 1 : 4448.5
+Sverdlovskaïa oblast;Alapayevsk : 1 : 1045.4
+Sverdlovskaïa oblast;Slobodo-Turinskiy : 1 : 2603.3999
+Permskaïa oblast résiduel;Okhanskiy : 1 : 836.09998
+Permskaïa oblast résiduel;Beryozovskiy : 1 : 2188.7
+Permskaïa oblast résiduel;Bolshesosnovskiy : 1 : 2852.8
+Oudmourtia;Krasnogorskiy : 1 : 1782.6
+Sverdlovskaïa oblast;Baykalovskiy : 1 : 2286.8999
+Oudmourtia;Debesskiy : 1 : 924.09998
+Sverdlovskaïa oblast;Nevyanskiy : 1 : 1973.1
+Oudmourtia;Igrinskiy : 1 : 2082.6001
+Sverdlovskaïa oblast;Shalinskiy : 1 : 4819.7998
+Sverdlovskaïa oblast;Rezhevskiy : 1 : 2083.6001
+Sverdlovskaïa oblast;Kirovgrad : 1 : 943.79999
+Sverdlovskaïa oblast;Artyemovskiy : 1 : 1865.2
+Sverdlovskaïa oblast;Irbit : 1 : 4.1999998
+Sverdlovskaïa oblast;Nevyansk : 1 : 4.9000001
+Permskaïa oblast résiduel;Osinsky : 1 : 406.89999
+Permskaïa oblast résiduel;Chastinskiy : 1 : 1163.0
+Oudmourtia;Seltinskiy : 1 : 1991.6
+Permskaïa oblast résiduel;Kishertskiy : 1 : 1663.4
+Oudmourtia;Sharkanskiy : 1 : 1421.0
+Oudmourtia;Syumsinskiy : 1 : 1745.3
+Permskaïa oblast résiduel;Kungur : 1 : 2.5999999
+Sverdlovskaïa oblast;Rezsh : 1 : 6.6999998
+Sverdlovskaïa oblast;Tugulymskiy : 1 : 3414.3
+Sverdlovskaïa oblast;Artyomovskiy : 1 : 3.4000001
+Oudmourtia;Yakshur-Bodyinskiy : 1 : 1601.7
+Sverdlovskaïa oblast;Pervouralsk : 1 : 2376.7
+Sverdlovskaïa oblast;Verkhnyay Pyshma : 1 : 1069.9
+Sverdlovskaïa oblast;Talitskiy : 1 : 4553.7002
+Sverdlovskaïa oblast;Pyshminskiy : 1 : 2139.6001
+Oudmourtia;Uvinskiy : 1 : 2346.8999
+Permskaïa oblast résiduel;Suksunskiy : 1 : 1642.8
+Oudmourtia;Votkinskiy : 1 : 1681.7
+Sverdlovskaïa oblast;Asbest : 1 : 753.59998
+Sverdlovskaïa oblast;Kamyshlovskiy : 1 : 2175.0
+Sverdlovskaïa oblast;Berezovskiy : 1 : 1084.6
+Permskaïa oblast résiduel;Ordinsky : 1 : 1004.4
+Sverdlovskaïa oblast;Sukholozhskiy : 1 : 1744.7
+Permskaïa oblast résiduel;Bardymskiy : 1 : 2208.3
+Permskaïa oblast résiduel;Yelovskiy : 1 : 1136.8
+Sverdlovskaïa oblast;Nizhneserginskiy : 1 : 4789.0
+Sverdlovskaïa oblast;Achitskiy : 1 : 2191.3999
+Permskaïa oblast résiduel;Uinskiy : 1 : 1806.5
+Oudmourtia;Zavyalovskiy : 1 : 2367.8999
+Oudmourtia;Votkinsk : 1 : 1.8
+Sverdlovskaïa oblast;Yekaterinburg : 1 : 1057.0
+Oudmourtia;Vavozhskiy : 1 : 1469.9
+Oudmourtia;Izhevsk : 1 : 254.3
+Permskaïa oblast résiduel;Chaykovskiy : 1 : 1784.1
+Sverdlovskaïa oblast;Beloyarskiy : 1 : 1748.0
+Sverdlovskaïa oblast;Sukhoy Log : 1 : 1.7
+Sverdlovskaïa oblast;Krasnoufimskiy : 1 : 3279.6001
+Sverdlovskaïa oblast;Bogdanovichskiy : 1 : 1286.7
+Sverdlovskaïa oblast;Kamyshlov : 1 : 2.9000001
+Permskaïa oblast résiduel;Oktyabrskiy : 1 : 3191.7
+Sverdlovskaïa oblast;Zarechny : 1 : 1.4
+Sverdlovskaïa oblast;Revda : 1 : 1057.7
+Sverdlovskaïa oblast;Bogdanovich : 1 : 2.8
+Permskaïa oblast résiduel;Kuyedinskiy : 1 : 2895.8999
+Permskaïa oblast résiduel;Chernushinskiy : 1 : 1744.8
+Kourganskaïa oblast;Shatrovskiy : 1 : 3466.6001
+Oudmourtia;Kiznerskiy : 1 : 2704.6001
+Permskaïa oblast résiduel;Chaykovsky : 1 : 2.3
+Oudmourtia;Malopurginskiy : 1 : 990.59998
+Sverdlovskaïa oblast;Sysertskiy : 1 : 2291.0
+Sverdlovskaïa oblast;Artinskiy : 1 : 3044.2
+Oudmourtia;Mozhginskiy : 1 : 2152.0
+Oudmourtia;Sarapulskiy : 1 : 1901.6
+Sverdlovskaïa oblast;Polevskoy : 1 : 1556.4
+Sverdlovskaïa oblast;Kamenskiy : 1 : 2280.3999
+Kourganskaïa oblast;Dalmatovskiy : 1 : 3697.8
+Kourganskaïa oblast;Katayskiy : 1 : 2798.5
+Sverdlovskaïa oblast;Kamensk-Uralskiy : 1 : 192.8
+Oudmourtia;Sarapul : 1 : 2.5
+Kourganskaïa oblast;Shadrinskiy : 1 : 3937.7
+Bachkiria;Yanaulskiy : 1 : 2257.3
+Oudmourtia;Kambarskiy : 1 : 519.09998
+Oudmourtia;Kiyasovskiy : 1 : 647.79999
+Oudmourtia;Mogzsha : 1 : 1.6
+Bachkiria;Tatyshlinskiy : 1 : 1287.4
+Bachkiria;Askinskiy : 1 : 2384.7
+Oudmourtia;Alnashskiy : 1 : 999.79999
+Tcheliabinskaïa oblast;Kaslinskiy : 1 : 3323.2
+Tcheliabinskaïa oblast;Nyazepetrovskskiy : 1 : 3411.8
+Bachkiria;Yanaul : 1 : 2.9000001
+Kourganskaïa oblast;Belozerskiy : 1 : 3641.8
+Tcheliabinskaïa oblast;Kunashakskiy : 1 : 3238.3
+Bachkiria;Krasnokamskiy : 1 : 2004.5
+Oudmourtia;Grakhovskiy : 1 : 1035.8
+Oudmourtia;Karakulinskiy : 1 : 698.90002
+Tcheliabinskaïa oblast;Verkhniy Ufaley : 1 : 1464.3
+Bachkiria;Baltachevskiy : 1 : 1681.2
+Kourganskaïa oblast;Kargapolskiy : 1 : 3429.8999
+Bachkiria;Belokatayskiy : 1 : 2738.8999
+Kourganskaïa oblast;Shadrinsk : 1 : 24.299999
+Bachkiria;Kaltasinskiy : 1 : 1509.4
+Bachkiria;Karaidelskiy : 1 : 3578.8999
+Bachkiria;Mechetlinskiy : 1 : 1311.4
+Bachkiria;Duvanskiy : 1 : 3009.0
+Bachkiria;Neftekamsk : 1 : 2.7
+Bachkiria;Burayevskiy : 1 : 1669.2
+Kourganskaïa oblast;Vargashinskiy : 1 : 2899.7
+Kourganskaïa oblast;Mokrousovskiy : 1 : 3283.8
+Tcheliabinskaïa oblast;Krasnoarmeyskiy : 1 : 3933.8999
+Tcheliabinskaïa oblast;Kasli : 1 : 1.5
+RU-UNK-2881 : 1 : 3.0
+Tcheliabinskaïa oblast;Kyshtym : 1 : 896.40002
+Kourganskaïa oblast;Mishkinskiy : 1 : 3200.8999
+Bachkiria;Mishkinskiy : 1 : 4.1999998
+Kourganskaïa oblast;Schuchanskiy : 1 : 2971.3
+Kourganskaïa oblast;Shumikhinskiy : 1 : 2644.6001
+Bachkiria;Ilishevskiy : 1 : 1917.2
+Kourganskaïa oblast;Ketovskiy : 1 : 3601.1001
+Bachkiria;Dyurtyulinskiy : 1 : 1685.0
+Tcheliabinskaïa oblast;Argayashskiy : 1 : 2796.3999
+Kourganskaïa oblast;Chastoozerskiy : 1 : 2054.5
+Bachkiria;Kiginskiy : 1 : 1779.8
+Tcheliabinskaïa oblast;Karabash : 1 : 585.79999
+Kourganskaïa oblast;Yurgamyshskiy : 1 : 2299.7
+Tcheliabinskaïa oblast;Sosnovskiy : 1 : 2092.6001
+Bachkiria;Nurimanovskiy : 1 : 2712.7
+Bachkiria;Birskiy : 1 : 1568.9
+Kourganskaïa oblast;Lebyazhyevskiy : 1 : 3195.2
+Tcheliabinskaïa oblast;Kusinskiy : 1 : 1440.8
+Bachkiria;Salavatskiy : 1 : 3051.8
+Bachkiria;Blagoveshchenskiy : 1 : 2287.1001
+Kourganskaïa oblast;Makushinskiy : 1 : 3251.1001
+Bachkiria;Dyurtuli : 1 : 2.2
+Kourganskaïa oblast;Kurgan : 1 : 201.3
+Tcheliabinskaïa oblast;Miass : 1 : 1607.6
+Tcheliabinskaïa oblast;Zlatoust : 1 : 1649.1
+Bachkiria;Birsk : 1 : 2.2
+Kourganskaïa oblast;Petukhovskiy : 1 : 2501.3
+Bachkiria;Bakalinskiy : 1 : 2172.8
+Bachkiria;Chekmagushevskiy : 1 : 1926.5
+Tcheliabinskaïa oblast;Chelyabinsk : 1 : 478.5
+Tcheliabinskaïa oblast;Satkinskiy : 1 : 2550.1001
+Tcheliabinskaïa oblast;Ashynskiy : 1 : 2325.8
+Bachkiria;Kushnarenkovskiy : 1 : 1622.9
+Tcheliabinskaïa oblast;Kopeysk : 1 : 185.2
+Bachkiria;Iglinskiy : 1 : 2411.0
+Kourganskaïa oblast;Pritobolnyi : 1 : 1649.5
+Tcheliabinskaïa oblast;Chebarkulskiy : 1 : 2925.8999
+Kourganskaïa oblast;Safakulevskiy : 1 : 2227.3999
+Tcheliabinskaïa oblast;Katayev-Ivanovskiy : 1 : 4793.1001
+Kourganskaïa oblast;Kurtamyshskiy : 1 : 4419.3999
+Kourganskaïa oblast;Polovinskiy : 1 : 2584.3999
+Kourganskaïa oblast;Almenevskiy : 1 : 2458.3999
+Tcheliabinskaïa oblast;Yetkulskiy : 1 : 2722.0
+Bachkiria;Blagoveshchensk : 1 : 2.3
+Tcheliabinskaïa oblast;Satka : 1 : 2.7
+Bachkiria;Sharanskiy : 1 : 1303.2
+Tcheliabinskaïa oblast;Asha : 1 : 2.5
+Bachkiria;Ufimskiy : 1 : 1755.6
+Tcheliabinskaïa oblast;Chebarkul' : 1 : 1.6
+Bachkiria;Blagovarskiy : 1 : 2114.3
+Tcheliabinskaïa oblast;Korkino : 1 : 62.099998
+Tcheliabinskaïa oblast;Ust-Katayev : 1 : 1.0
+Bachkiria;Uchaly : 1 : 4291.2998
+Bachkiria;Buzdyakskiy : 1 : 1349.1
+Bachkiria;Ufa : 1 : 454.39999
+Bachkiria;Chishminskiy : 1 : 1630.0
+Bachkiria;Arkhangelskiy : 1 : 2505.5
+Tcheliabinskaïa oblast;Yemanzhelinsk : 1 : 53.200001
+Kourganskaïa oblast;Tselinnyi : 1 : 3559.0
+Bachkiria;Tuymazinskiy : 1 : 2638.6001
+Tcheliabinskaïa oblast;Uvelskiy : 1 : 2300.3999
+Tcheliabinskaïa oblast;Katayev-Ivanovsk : 1 : 1.3
+Bachkiria;Beloretskiy : 1 : 10360.3
+Kourganskaïa oblast;Zverinogolovsky : 1 : 935.90002
+Tcheliabinskaïa oblast;Oktyabrskiy : 1 : 4012.7
+Tcheliabinskaïa oblast;Uyskiy : 1 : 2447.3999
+Bachkiria;Karmaskalinskiy : 1 : 1701.6
+Bachkiria;Tuymazy : 1 : 3.2
+Tcheliabinskaïa oblast;Plast : 1 : 1273.3
+Bachkiria;Oktyabrskiy : 1 : 6.0
+Tcheliabinskaïa oblast;Yuzhno-Uralsk : 1 : 2.0999999
+Tcheliabinskaïa oblast;Troitskiy : 1 : 4726.0
+Bachkiria;Belebeyevskiy : 1 : 1774.9
+Bachkiria;Davlekanovskiy : 1 : 1918.8
+Orenbourgskaïa oblast;Severnyi : 1 : 2184.2
+RU-UNK-2882 : 1 : 2.8
+Bachkiria;Gafuriyskiy : 1 : 3083.3
+Bachkiria;Yermekeyevskiy : 1 : 1614.7
+Bachkiria;Aurgazinskiy : 1 : 2228.6001
+Bachkiria;Alsheyevskiy : 1 : 2176.3
+Bachkiria;Davlekanovo : 1 : 1.5
+Tcheliabinskaïa oblast;Verkhneuralskiy : 1 : 3015.3
+Tcheliabinskaïa oblast;Troitsk : 1 : 153.0
+Bachkiria;Belebey : 1 : 2.4000001
+Orenbourgskaïa oblast;Abdulinskiy : 1 : 1685.6
+Bachkiria;Beloretsk : 1 : 3.5999999
+Orenbourgskaïa oblast;Buguruslanskiy : 1 : 2962.0
+Bachkiria;Abzelilovskiy : 1 : 3650.2
+Bachkiria;Bizhbulyakskiy : 1 : 2248.3
+Bachkiria;Sterlitamakskiy : 1 : 2178.6001
+Tcheliabinskaïa oblast;Nagaybakskiy : 1 : 3198.3
+Tcheliabinskaïa oblast;Chesmenskiy : 1 : 2532.2
+Bachkiria;Miyakinskiy : 1 : 2268.8
+Bachkiria;Ishimbaysky : 1 : 4039.7
+Orenbourgskaïa oblast;Asekeyevskiy : 1 : 2402.0
+Tcheliabinskaïa oblast;Agapovskiy : 1 : 2540.3
+Orenbourgskaïa oblast;Buguruslan : 1 : 2.4000001
+Bachkiria;Sterlitamak : 1 : 5.5
+Bachkiria;Sterlibashevskiy : 1 : 1792.8
+Tcheliabinskaïa oblast;Varnenskiy : 1 : 3527.8999
+Orenbourgskaïa oblast;Abdulino : 1 : 2.3
+Orenbourgskaïa oblast;Matveyevskiy : 1 : 53.5
+Bachkiria;Burzyanskiy : 1 : 4608.7002
+Bachkiria;Ishimbay : 1 : 3.5999999
+Tcheliabinskaïa oblast;Magnitogorsk : 1 : 393.20001
+Tcheliabinskaïa oblast;Kartalinskiy : 1 : 4821.1001
+Orenbourgskaïa oblast;Ponomaryovskiy : 1 : 2098.8
+Bachkiria;Meleuzskiy : 1 : 3052.1001
+Bachkiria;Fyodorovskiy : 1 : 1926.6
+Bachkiria;Salavat : 1 : 2.4000001
+Orenbourgskaïa oblast;Buzulukskiy : 1 : 3237.5
+Bachkiria;Baymakskiy : 1 : 6122.0
+Orenbourgskaïa oblast;Sharlykskiy : 1 : 3116.7
+Orenbourgskaïa oblast;Grachevskiy : 1 : 1683.1
+Tcheliabinskaïa oblast;Kizilskiy : 1 : 4433.2998
+Orenbourgskaïa oblast;Krasnogvardeyskiy : 1 : 3061.5
+Tcheliabinskaïa oblast;Kartaly : 1 : 2.0
+Bachkiria;Kugarchinskiy : 1 : 3674.8
+Bachkiria;Zilairskiy : 1 : 5290.7002
+Bachkiria;Meleuz : 1 : 2.7
+Bachkiria;Kumertauskiy : 1 : 2848.3
+Orenbourgskaïa oblast;Aleksandrovskiy : 1 : 2998.8999
+Orenbourgskaïa oblast;Kurmanayevskiy : 1 : 3164.6001
+Tcheliabinskaïa oblast;Bredinskiy : 1 : 5063.2002
+Orenbourgskaïa oblast;Buzuluk : 1 : 3.5
+Bachkiria;Kumertay : 1 : 2.5
+Bachkiria;Sibay : 1 : 4.1999998
+Orenbourgskaïa oblast;Sorochinskiy : 1 : 2680.3
+Orenbourgskaïa oblast;Oktyabrskiy : 1 : 3040.8999
+Orenbourgskaïa oblast;Novosergiyevskiy : 1 : 4581.7998
+Bachkiria;Baymak : 1 : 3.8
+Orenbourgskaïa oblast;Totskiy : 1 : 3155.8
+Orenbourgskaïa oblast;Tyulganskiy : 1 : 2044.4
+Bachkiria;Zianchurinskiy : 1 : 3704.3999
+Orenbourgskaïa oblast;Kvarkenskiy : 1 : 5576.6001
+Bachkiria;Khaybullinskiy : 1 : 4382.1001
+RU-UNK-2883 : 1 : 3.2
+Orenbourgskaïa oblast;Perevolotskiy : 1 : 2609.5
+Orenbourgskaïa oblast;Pervomayskiy : 1 : 5082.0
+Orenbourgskaïa oblast;Sakmarskiy : 1 : 1964.1
+Orenbourgskaïa oblast;Tashlinskiy : 1 : 3108.8
+Orenbourgskaïa oblast;Saraktashskiy : 1 : 4160.3999
+Orenbourgskaïa oblast;Orenburgskiy : 1 : 6015.7002
+Orenbourgskaïa oblast;Adamovskiy : 1 : 6256.3999
+Orenbourgskaïa oblast;Orenburg : 1 : 363.10001
+Orenbourgskaïa oblast;Kuvandykskiy : 1 : 6526.1001
+Orenbourgskaïa oblast;Gayskiy : 1 : 2917.8999
+Orenbourgskaïa oblast;Novoorskiy : 1 : 3454.0
+Orenbourgskaïa oblast;Ilekskiy : 1 : 3512.3999
+Orenbourgskaïa oblast;Belyaevskiy : 1 : 3429.3999
+Orenbourgskaïa oblast;Kuvandyk : 1 : 3.0
+Orenbourgskaïa oblast;Svetlinskiy : 1 : 5179.8999
+Orenbourgskaïa oblast;Gay : 1 : 1.9
+Orenbourgskaïa oblast;Mednogorsk : 1 : 2.7
+Orenbourgskaïa oblast;Sol-Iletskiy : 1 : 4777.7002
+Orenbourgskaïa oblast;Yasnenskiy : 1 : 3673.6001
+Orenbourgskaïa oblast;Akbulakskiy : 1 : 3985.6001
+Orenbourgskaïa oblast;Orsk : 1 : 761.90002
+Orenbourgskaïa oblast;Novotroitsk : 1 : 231.89999
+Orenbourgskaïa oblast;Dombarovskiy : 1 : 3481.6001
+Orenbourgskaïa oblast;Yasny : 1 : 1.8
+RU-UNK-2884 : 1 : 3.0
+RU-UNK-2885 : 1 : 2.8
+RU-UNK-2886 : 1 : 3.2
+Iamalo-Nenetski national;Yamalskiy : 1 : 112476.0
+Iamalo-Nenetski national;Tazovskiy : 1 : 122846.1
+Iamalo-Nenetski national;Priuralskiy : 1 : 65318.102
+Iamalo-Nenetski national;Purovskiy : 1 : 6074.6001
+Iamalo-Nenetski national;Nadymskiy : 1 : 98025.398
+Iamalo-Nenetski national;Kranoselkupskiy : 1 : 105958.4
+Iamalo-Nenetski national;Shuryshkarskiy : 1 : 54151.5
+Iamalo-Nenetski national;Labytnangi : 1 : 17.5
+Iamalo-Nenetski national;Salekhard : 1 : 20.5
+Iamalo-Nenetski national;Novyi Urengoy : 1 : 28.299999
+Khanty-Mansiski national;Berezovskiy : 1 : 85874.0
+Iamalo-Nenetski national;Nadym : 1 : 40.0
+Khanty-Mansiski national;Beloyarskiy : 1 : 42401.5
+Iamalo-Nenetski national;Muravlenko : 1 : 23.5
+Khanty-Mansiski national;Beloyarsky : 1 : 19.1
+Khanty-Mansiski national;Oktyabrskiy : 1 : 25068.9
+Khanty-Mansiski national;Surgutskiy : 1 : 94028.602
+Iamalo-Nenetski national;Noyabrsk : 1 : 22.299999
+Khanty-Mansiski national;Khanty-Mansiyskiy : 1 : 56739.699
+Khanty-Mansiski national;Nizhnevartovskiy : 1 : 118068.8
+Khanty-Mansiski national;Sovetskiy : 1 : 29761.199
+Khanty-Mansiski national;Nyagan : 1 : 3.7
+Khanty-Mansiski national;Kogalym : 1 : 2.2
+Khanty-Mansiski national;Raduzhnyi : 1 : 40.700001
+Khanty-Mansiski national;Pokachy : 1 : 53.200001
+Khanty-Mansiski national;Surgut : 1 : 33.0
+Khanty-Mansiski national;Langepas : 1 : 13.1
+Khanty-Mansiski national;Kondinskiy : 1 : 55344.801
+Khanty-Mansiski national;Nefteyuganskiy : 1 : 24981.199
+Khanty-Mansiski national;Nefteugansk : 1 : 1.0
+Khanty-Mansiski national;Khanty-Mansyisk : 1 : 2.3
+Tomskaïa oblast;Kargasokskiy : 1 : 85201.898
+Khanty-Mansiski national;Megion : 1 : 41.599998
+Khanty-Mansiski national;Nizshnvartovsk : 1 : 24.5
+RU-UNK-2887 : 1 : 37234.898
+RU-UNK-2888 : 1 : 37234.898
+Khanty-Mansiski national;Pyt-Yakh : 1 : 38.099998
+Tomskaïa oblast;Strezhevoj : 1 : 2.7
+Khanty-Mansiski national;Uray : 1 : 8.3999996
+Tioumenskaïa obl. résidue;Uvatskiy : 1 : 46960.801
+Tomskaïa oblast;Verkhneketskiy : 1 : 41047.102
+Tomskaïa oblast;Parabelskiy : 1 : 33219.0
+Tomskaïa oblast;Kolpashevskiy : 1 : 14450.2
+Tioumenskaïa obl. résidue;Tobolskiy : 1 : 18143.301
+Tioumenskaïa obl. résidue;Vagayskiy : 1 : 18263.1
+Omskaïa oblast;Tarskiy : 1 : 15349.7
+Omskaïa oblast;Ust-Ishimskiy : 1 : 8335.9004
+Tomskaïa oblast;Pervomayskiy : 1 : 13412.0
+Tomskaïa oblast;Teguldetskiy : 1 : 10745.4
+Tomskaïa oblast;Kolpashevo : 1 : 2.3
+Tioumenskaïa obl. résidue;Tobolsk : 1 : 15.2
+Omskaïa oblast;Tevrizskiy : 1 : 10236.9
+Tioumenskaïa obl. résidue;Nizhnetavdinskiy : 1 : 7695.8999
+Tioumenskaïa obl. résidue;Yarkovskiy : 1 : 6503.8999
+Tomskaïa oblast;Molchanovskiy : 1 : 5770.2998
+Tomskaïa oblast;Chainskiy : 1 : 6022.6001
+Tomskaïa oblast;Asinovskiy : 1 : 4242.3999
+Tomskaïa oblast;Bakcharskiy : 1 : 24390.801
+Omskaïa oblast;Znamenskiy : 1 : 3238.3
+Tomskaïa oblast;Krivosheinskiy : 1 : 3824.0
+Omskaïa oblast;Sedelnikovskiy : 1 : 5169.8999
+RU-UNK-2889 : 1 : 1.7
+Tioumenskaïa obl. résidue;Tyumenskiy : 1 : 4762.8999
+Tomskaïa oblast;Tomskiy : 1 : 12916.7
+Tioumenskaïa obl. résidue;Vikulovskiy : 1 : 4826.3999
+Omskaïa oblast;Bolsheukovskiy : 1 : 9952.7002
+Tomskaïa oblast;Zyryanskiy : 1 : 10814.5
+Tioumenskaïa obl. résidue;Aromashevskiy : 1 : 3952.2
+Novosibirskaïa oblast;Kyshtovskiy : 1 : 10378.1
+Tioumenskaïa obl. résidue;Yurginskiy : 1 : 4068.8
+Tomskaïa oblast;Shegarskiy : 1 : 4245.5
+Tomskaïa oblast;Asino : 1 : 4.1999998
+Tioumenskaïa obl. résidue;Tyumen : 1 : 23.5
+Novosibirskaïa oblast;Severnyi : 1 : 15155.5
+Tioumenskaïa obl. résidue;Yalutorovskiy : 1 : 3001.3999
+Tioumenskaïa obl. résidue;Sorokinskiy : 1 : 2939.3
+Tioumenskaïa obl. résidue;Zavodoukovskiy : 1 : 2725.1001
+Omskaïa oblast;Tara : 1 : 3.0
+Kemerovskaïa oblast;Mariinskiy : 1 : 5361.1001
+Tioumenskaïa obl. résidue;Golyshmanovskiy : 1 : 4052.1001
+Tioumenskaïa obl. résidue;Isetskiy : 1 : 2543.7
+Omskaïa oblast;Kolosovskiy : 1 : 4848.2002
+Tomskaïa oblast;Tomsk : 1 : 151.7
+Tioumenskaïa obl. résidue;Omutinskiy : 1 : 3319.8
+Omskaïa oblast;Muromtsevskiy : 1 : 6797.3999
+Omskaïa oblast;Krutinskiy : 1 : 5906.3999
+Tioumenskaïa obl. résidue;Abatskiy : 1 : 3902.8999
+Omskaïa oblast;Bolsherechenskiy : 1 : 17.9
+Tomskaïa oblast;Kozhevnikovskiy : 1 : 3630.5
+Tioumenskaïa obl. résidue;Yalutorovsk : 1 : 1.3
+Kemerovskaïa oblast;Yayskiy : 1 : 2964.5
+Tioumenskaïa obl. résidue;Ishimskiy : 1 : 5475.2998
+Kemerovskaïa oblast;Izhmorskiy : 1 : 3409.7
+Novosibirskaïa oblast;Ubinskiy : 1 : 13963.3
+Novosibirskaïa oblast;Kolyvanskiy : 1 : 10043.0
+Omskaïa oblast;Tyukalinskiy : 1 : 6137.8999
+Kemerovskaïa oblast;Tyazhinskiy : 1 : 3329.8999
+Tioumenskaïa obl. résidue;Uporovskiy : 1 : 2973.1001
+Tioumenskaïa obl. résidue;Zavodoukovsk : 1 : 1.3
+Novosibirskaïa oblast;Vengerovskiy : 1 : 6596.7998
+Tioumenskaïa obl. résidue;Armizonskiy : 1 : 3216.0
+Novosibirskaïa oblast;Kuybyshevskiy : 1 : 8517.2998
+Kemerovskaïa oblast;Mariinsk : 1 : 1.0
+Kemerovskaïa oblast;Yashkinskiy : 1 : 3599.0
+Novosibirskaïa oblast;Ust-Tarkskiy : 1 : 4343.2002
+Kemerovskaïa oblast;Yurginskiy : 1 : 2599.8
+Kemerovskaïa oblast;Chebulinskiy : 1 : 3571.7
+Tioumenskaïa obl. résidue;Ishim : 1 : 2.5
+RU-UNK-2890 : 1 : 3694.5
+Kemerovskaïa oblast;Anzhero-Sudzhensk : 1 : 1.0
+Kemerovskaïa oblast;Tayga : 1 : 1.0
+Novosibirskaïa oblast;Bolotninskiy : 1 : 3156.8999
+Tioumenskaïa obl. résidue;Berdyuzhskiy : 1 : 3199.7
+Novosibirskaïa oblast;Chulymskiy : 1 : 8591.5
+Omskaïa oblast;Nizhneomskiy : 1 : 2992.5
+Kemerovskaïa oblast;Tisulskiy : 1 : 10860.2
+Omskaïa oblast;Sargatskiy : 1 : 6030.7998
+Tioumenskaïa obl. résidue;Sladkovskiy : 1 : 3693.2
+Kemerovskaïa oblast;Kemerovskiy : 1 : 4499.7002
+Omskaïa oblast;Tukalinsk : 1 : 4.6999998
+Tioumenskaïa obl. résidue;Kazanskiy : 1 : 2845.1001
+Kemerovskaïa oblast;Berezovskiy : 1 : 1.8
+Omskaïa oblast;Gorkovskiy : 1 : 2658.1001
+Kemerovskaïa oblast;Yurga : 1 : 1.0
+Novosibirskaïa oblast;Kargatskiy : 1 : 5666.7998
+Kemerovskaïa oblast;Topkinskiy : 1 : 2749.7
+Novosibirskaïa oblast;Moshkovskiy : 1 : 2710.8
+Novosibirskaïa oblast;Chanovskiy : 1 : 5288.1001
+Novosibirskaïa oblast;Tatarskiy : 1 : 5216.5
+Omskaïa oblast;Lyubinskiy : 1 : 3032.0
+Novosibirskaïa oblast;Kochenevskiy : 1 : 4923.1001
+Omskaïa oblast;Nazyvayevsk : 1 : 2.9000001
+Novosibirskaïa oblast;Toguchinskiy : 1 : 6389.5
+Novosibirskaïa oblast;Novosibirskiy : 1 : 2738.5
+Novosibirskaïa oblast;Kuybishev : 1 : 3.0
+Omskaïa oblast;Omskiy : 1 : 3663.7
+Novosibirskaïa oblast;Barabinskiy : 1 : 5613.5
+Kemerovskaïa oblast;Krapivinskiy : 1 : 4208.7002
+Kemerovskaïa oblast;Kemerovo : 1 : 3.0999999
+Novosibirskaïa oblast;Barabinsk : 1 : 4.0
+Omskaïa oblast;Kalachinskiy : 1 : 2648.3999
+Omskaïa oblast;Isilkulskiy : 1 : 3022.8999
+Kemerovskaïa oblast;Topki : 1 : 1.0
+Novosibirskaïa oblast;Tatarsk : 1 : 1.6
+Omskaïa oblast;Moskalenskiy : 1 : 2416.3999
+Omskaïa oblast;Kormilovskiy : 1 : 1870.3
+Novosibirskaïa oblast;Novosibirsk : 1 : 485.39999
+Kemerovskaïa oblast;Promyshlennovskiy : 1 : 2931.3999
+Omskaïa oblast;Maryanovskiy : 1 : 1936.0
+Omskaïa oblast;Omsk : 1 : 427.70001
+Novosibirskaïa oblast;Chistoozyornyi : 1 : 6052.6001
+Omskaïa oblast;Kalachinsk : 1 : 1.6
+Novosibirskaïa oblast;Zdvinskiy : 1 : 5001.7998
+Omskaïa oblast;Okoneshnikovskiy : 1 : 3030.2
+Novosibirskaïa oblast;Iskitimskiy : 1 : 3701.8999
+Novosibirskaïa oblast;Ob : 1 : 5.0
+Kemerovskaïa oblast;Leninsk-kuznetskiy : 1 : 2294.6001
+Omskaïa oblast;Isil'kul' : 1 : 2.0999999
+Novosibirskaïa oblast;Kupinskiy : 1 : 6034.3999
+Novosibirskaïa oblast;Dovolenskiy : 1 : 4085.2
+Kemerovskaïa oblast;Mezhdurechenskiy : 1 : 11545.8
+Omskaïa oblast;Tavricheskiy : 1 : 2646.6001
+Novosibirskaïa oblast;Maslyaninskiy : 1 : 3773.3999
+Novosibirskaïa oblast;Berdsk : 1 : 68.400002
+Omskaïa oblast;Azovsky nemetsky national : 1 : 833.29999
+Novosibirskaïa oblast;Ordynskiy : 1 : 3548.5
+Omskaïa oblast;Sherbakulskiy : 1 : 2503.1001
+Novosibirskaïa oblast;Iskitim : 1 : 2.3
+Omskaïa oblast;Cherlakskiy : 1 : 4555.5
+Omskaïa oblast;Poltavskiy : 1 : 2761.5
+Kemerovskaïa oblast;Belovskiy : 1 : 3295.6001
+Kemerovskaïa oblast;Guryevskiy : 1 : 2407.3999
+Kemerovskaïa oblast;Leninsk-Kuznetskiy : 1 : 1.0
+Novosibirskaïa oblast;Kochkovskiy : 1 : 2573.8999
+Omskaïa oblast;Odesskiy : 1 : 2020.9
+Novosibirskaïa oblast;Cherepanovskiy : 1 : 3152.7
+Novosibirskaïa oblast;Suzunskiy : 1 : 5051.5
+Omskaïa oblast;Pavlogradskiy : 1 : 2049.0
+Altaïski kraï résiduel;Zalesovskiy : 1 : 2921.3999
+Kemerovskaïa oblast;Belovo : 1 : 2.0
+Novosibirskaïa oblast;Krasnozerskiy : 1 : 5438.0
+Kemerovskaïa oblast;Prokopyevskiy : 1 : 3916.0
+Omskaïa oblast;Novovarshavskiy : 1 : 2357.6001
+Novosibirskaïa oblast;Baganskiy : 1 : 3273.7
+Altaïski kraï résiduel;Krutikhinksiy : 1 : 2360.6001
+Novosibirskaïa oblast;Karasukskiy : 1 : 4726.1001
+Kemerovskaïa oblast;Guryevsk : 1 : 1.2
+Altaïski kraï résiduel;Zarinskiy : 1 : 5022.2002
+Kemerovskaïa oblast;Novokuznetskiy : 1 : 8640.2998
+Altaïski kraï résiduel;Talmenskiy : 1 : 3851.5
+Altaïski kraï résiduel;Pankrushykhinskiy : 1 : 2945.5
+Altaïski kraï résiduel;Kamenskiy : 1 : 3390.2
+Omskaïa oblast;Russko-Polyanskiy : 1 : 3403.6001
+Kemerovskaïa oblast;Kisilevsk : 1 : 1.7
+Altaïski kraï résiduel;Pervomayskiy : 1 : 3455.8999
+Kemerovskaïa oblast;Prokopyevsk : 1 : 1.4
+Altaïski kraï résiduel;Kytmanovskiy : 1 : 2529.3
+Altaïski kraï résiduel;Khabarskiy : 1 : 3310.0
+Altaïski kraï résiduel;Kamen'-na-Obi : 1 : 1.2
+Kemerovskaïa oblast;Mezshdurechensk : 1 : 14.7
+Altaïski kraï résiduel;Shelabolikhinskiy : 1 : 2083.8999
+Kemerovskaïa oblast;Novokuznetsk : 1 : 2.2
+Altaïski kraï résiduel;Togulskiy : 1 : 2096.0
+Kemerovskaïa oblast;Myski : 1 : 1.0
+RU-UNK-2891 : 1 : 3.5
+Altaïski kraï résiduel;Burlinskiy : 1 : 3078.7
+Kemerovskaïa oblast;Osinniki : 1 : 1.0
+Altaïski kraï résiduel;Pavlovskiy : 1 : 2139.8
+Altaïski kraï résiduel;Bayevskiy : 1 : 2584.3999
+Altaïski kraï résiduel;Kosikhinskiy : 1 : 1951.7
+Altaïski kraï résiduel;Tyumentsevskiy : 1 : 2528.0
+Kemerovskaïa oblast;Tashtagolskiy : 1 : 12905.0
+Altaïski kraï résiduel;Yeltsovskiy : 1 : 2017.5
+Altaïski kraï résiduel;Barnaul : 1 : 830.09998
+Altaïski kraï résiduel;Suyetskiy : 1 : 1538.6
+Altaïski kraï résiduel;Novoaltaysk : 1 : 103.6
+RU-UNK-2892 : 1 : 1934.7
+Altaïski kraï résiduel;Rebrikhinskiy : 1 : 2903.5
+Altaïski kraï résiduel;Tselinniy : 1 : 2699.0
+Altaïski kraï résiduel;Kalmanskiy : 1 : 1945.1
+Altaïski kraï résiduel;Slavgorodskiy : 1 : 1415.5
+Altaïski kraï résiduel;Troitskiy : 1 : 3812.7
+Altaïski kraï résiduel;Blagoveschenskiy : 1 : 3094.7
+Altaïski kraï résiduel;Zavyalovskiy : 1 : 1870.8
+Altaïski kraï résiduel;Slavgorod : 1 : 1.2
+Altaïski kraï résiduel;Soltonskiy : 1 : 2765.5
+Altaïski kraï résiduel;Topchikhinskiy : 1 : 3007.5
+Altaïski kraï résiduel;Tabunskiy : 1 : 1756.3
+Altaïski kraï résiduel;Mamontovskiy : 1 : 2192.3
+Altaïski kraï résiduel;Zonalnyi : 1 : 2102.0
+Altaïski kraï résiduel;Biyskiy : 1 : 2448.1001
+Altaïski kraï résiduel;Rodinskiy : 1 : 3325.8999
+Altaïski kraï résiduel;Romanovskiy : 1 : 2202.0
+Kemerovskaïa oblast;Tashtagol : 1 : 1.0
+Altaïski kraï résiduel;Kulundinskiy : 1 : 2173.7
+Altaïski kraï résiduel;Aleyskiy : 1 : 3652.3999
+Respoublika Altaï;Turochakskiy : 1 : 11095.5
+Altaïski kraï résiduel;Ust-Pristanskiy : 1 : 2629.7
+Altaïski kraï résiduel;Shipunovskiy : 1 : 4120.2002
+Altaïski kraï résiduel;Krasnogorskiy : 1 : 3061.7
+Altaïski kraï résiduel;Bystroistokskiy : 1 : 1526.6
+Altaïski kraï résiduel;Klyuchevskiy : 1 : 3200.7
+Altaïski kraï résiduel;Biysk : 1 : 2.3
+Altaïski kraï résiduel;Aleysk : 1 : 1.0
+Altaïski kraï résiduel;Smolenskiy : 1 : 2123.3
+Altaïski kraï résiduel;Sovetskiy : 1 : 1520.5
+Altaïski kraï résiduel;Novichikhinskiy : 1 : 2041.6
+Altaïski kraï résiduel;Petropavlovskiy : 1 : 1660.7
+Altaïski kraï résiduel;Volchikhinskiy : 1 : 3612.6001
+Altaïski kraï résiduel;Ust-Kalmanskiy : 1 : 2551.6001
+Altaïski kraï résiduel;Pospelikhinskiy : 1 : 2505.3999
+Altaïski kraï résiduel;Mikhaylovskiy : 1 : 3395.6001
+Altaïski kraï résiduel;Altayskiy : 1 : 3875.3
+Respoublika Altaï;Choyskiy : 1 : 4066.5
+Altaïski kraï résiduel;Yegoryevskiy : 1 : 2298.0
+Respoublika Altaï;Mayminskiy : 1 : 1240.9
+Altaïski kraï résiduel;Belokurikha : 1 : 1.4
+Altaïski kraï résiduel;Soloneshenskiy : 1 : 3505.6001
+Altaïski kraï résiduel;Rubtsovskiy : 1 : 3565.5
+Respoublika Altaï;Gorno-Altaysk : 1 : 4.0
+Altaïski kraï résiduel;Krasnoshekovskiy : 1 : 3424.6001
+Altaïski kraï résiduel;Charyshskiy : 1 : 6928.6001
+Altaïski kraï résiduel;Uglovskiy : 1 : 4921.8999
+Altaïski kraï résiduel;Kuryinskiy : 1 : 2472.7
+Respoublika Altaï;Shebalinskiy : 1 : 3874.8
+Respoublika Altaï;Chemalsky : 1 : 2828.0
+Altaïski kraï résiduel;Zmeinogorskiy : 1 : 2985.8
+Respoublika Altaï;Ulaganskiy : 1 : 18405.301
+Altaïski kraï résiduel;Rubtzovsk : 1 : 7.9000001
+Respoublika Altaï;Ust-Kanskiy : 1 : 6644.7002
+Altaïski kraï résiduel;Loktevskiy : 1 : 2480.8
+Respoublika Altaï;Ongudayskiy : 1 : 11884.7
+Altaïski kraï résiduel;Zmeinogorsk : 1 : 1.0
+Altaïski kraï résiduel;Tretiyakovskiy : 1 : 1924.1
+Respoublika Altaï;Ust-Koksinskiy : 1 : 13220.6
+Respoublika Altaï;Kosh-Agachskiy : 1 : 19784.4
+RU-UNK-2893 : 1 : 37234.898
+RU-UNK-2894 : 1 : 37234.898
+RU-UNK-2895 : 1 : 1.7
+RU-UNK-2896 : 1 : 3694.5
+RU-UNK-2897 : 1 : 3.5
+RU-UNK-2898 : 1 : 1934.7
+Tatarstan;Baltasinskiy : 1 : 1147.6
+Tatarstan;Agryzskiy : 1 : 1874.0
+Tatarstan;Arskiy : 1 : 1587.9
+Tatarstan;Vysokogorskiy : 1 : 1980.7
+Tatarstan;Atninskiy : 1 : 475.89999
+Tatarstan;Kukmorskiy : 1 : 1319.9
+Tatarstan;Sabinskiy : 1 : 1529.4
+Tatarstan;Mamadyshskiy : 1 : 2561.2
+Tatarstan;Zelenodolskiy : 1 : 747.5
+Tatarstan;Mendeleyevskiy : 1 : 522.40002
+Tatarstan;Pestrechinskiy : 1 : 1358.2
+Tatarstan;Yelabuzhskiy : 1 : 1283.9
+Tatarstan;Kazan : 1 : 379.60001
+Tatarstan;Aktanyshskiy : 1 : 2172.6001
+Tatarstan;Tuylachinskiy : 1 : 526.0
+Tatarstan;Tukayevskiy : 1 : 1565.0
+Tatarstan;Menzelinskiy : 1 : 1286.1
+Tatarstan;Zelenodol'sk : 1 : 1.0
+Tatarstan;Rybno-Slobodskiy : 1 : 1719.0
+Tatarstan;Elabuga : 1 : 3.2
+Tatarstan;Verkhneuslonskiy : 1 : 990.59998
+Tatarstan;Laishevskiy : 1 : 1525.3
+Tatarstan;Naberezhniye Chelny : 1 : 4.1999998
+Tatarstan;Nizhnekamskiy : 1 : 1511.2
+Tatarstan;Nizshnekamsk : 1 : 3.4000001
+RU-UNK-2899 : 1 : 1277.1
+RU-UNK-2900 : 1 : 750.40002
+Tatarstan;Sarmanovskiy : 1 : 1237.7
+Tatarstan;Zainskiy : 1 : 1990.4
+Tatarstan;Kamsko-Ustyinskiy : 1 : 768.79999
+Tatarstan;Muslyumovskiy : 1 : 1406.7
+Tatarstan;Chistopolskiy : 1 : 1463.5
+Tatarstan;Chistopol' : 1 : 2.5999999
+Tatarstan;Alekseyevskiy : 1 : 1536.2
+Tatarstan;Novosheshminskiy : 1 : 1245.2
+Tatarstan;Zainsk : 1 : 1.4
+Tatarstan;Buinskiy : 1 : 1535.6
+Tatarstan;Almetyevskiy : 1 : 2731.3999
+Tatarstan;Kuybyshevskiy : 1 : 1642.8
+Tatarstan;Tetyushskiy : 1 : 1559.8
+Tatarstan;Aznakayevskiy : 1 : 1933.3
+Tatarstan;Aksubayevskiy : 1 : 1129.0
+Tatarstan;Alkeyevskiy : 1 : 1757.2
+Tatarstan;Cheremshanskiy : 1 : 1514.4
+Tatarstan;Almetyevsk : 1 : 5.3000002
+Tatarstan;Oktyabrskiy : 1 : 2389.2
+Tatarstan;Aznakaevo : 1 : 2.0
+Tatarstan;Drozhanovskiy : 1 : 1083.8
+Oulianovskaïa oblast;Staromaynskiy : 1 : 1467.1
+Tatarstan;Leninogorskiy : 1 : 1610.4
+Tatarstan;Yutazinskiy : 1 : 946.20001
+Tatarstan;Bugulminskiy : 1 : 1275.9
+Oulianovskaïa oblast;Surskiy : 1 : 2241.2
+Oulianovskaïa oblast;Tsylninskiy : 1 : 1291.5
+Oulianovskaïa oblast;Ulyanovskiy : 1 : 1807.0
+Tatarstan;Leninigorsk : 1 : 3.3
+Samarskaïa (Kouïbychevska;Chelno-Vershinskiy : 1 : 1113.6
+Samarskaïa (Kouïbychevska;Shentalinskiy : 1 : 1252.9
+Oulianovskaïa oblast;Melekesskiy : 1 : 3583.5
+Oulianovskaïa oblast;Maynskiy : 1 : 2358.8
+Tatarstan;Bugul'ma : 1 : 3.2
+Samarskaïa (Kouïbychevska;Klyavlinskiy : 1 : 1455.8
+Oulianovskaïa oblast;Novomalyklinskiy : 1 : 1003.8
+Samarskaïa (Kouïbychevska;Koshkinskiy : 1 : 1897.4
+Oulianovskaïa oblast;Cherdaklinskiy : 1 : 1562.5
+Tatarstan;Bavlinskiy : 1 : 1174.4
+Oulianovskaïa oblast;Karsunskiy : 1 : 1663.8
+Oulianovskaïa oblast;Ulyanovsk : 1 : 34.0
+Samarskaïa (Kouïbychevska;Sergiyevskiy : 1 : 2496.8
+Oulianovskaïa oblast;Inzenskiy : 1 : 2189.2
+Oulianovskaïa oblast;Dimitrovgrad : 1 : 5.0999999
+Samarskaïa (Kouïbychevska;Kamyshlensky : 1 : 978.5
+Samarskaïa (Kouïbychevska;Isaklinskiy : 1 : 1768.5
+Oulianovskaïa oblast;Veshkaymskiy : 1 : 1624.4
+Oulianovskaïa oblast;Sengileyevskiy : 1 : 1165.7
+Oulianovskaïa oblast;Terengulskiy : 1 : 2074.2
+Samarskaïa (Kouïbychevska;Elkhovsky : 1 : 976.0
+Oulianovskaïa oblast;Kuzovatovskiy : 1 : 2109.6001
+Penzenskaïa oblast;Nikolskiy : 1 : 2321.3
+Samarskaïa (Kouïbychevska;Pokhvistnevo : 1 : 2011.3
+Penzenskaïa oblast;Bednodemyanovskiy : 1 : 674.29999
+Penzenskaïa oblast;Narovchatskiy : 1 : 762.0
+Penzenskaïa oblast;Issinskiy : 1 : 728.70001
+Penzenskaïa oblast;Lunino : 1 : 1684.7
+Samarskaïa (Kouïbychevska;Stavropolskiy : 1 : 1851.1
+Oulianovskaïa oblast;Bazarnosyzganskiy : 1 : 907.0
+Samarskaïa (Kouïbychevska;Krasnoyarskiy : 1 : 2742.3
+Oulianovskaïa oblast;Baryshskiy : 1 : 1974.0
+Penzenskaïa oblast;Zemetchinskiy : 1 : 1865.6
+Penzenskaïa oblast;Vadinskiy : 1 : 934.5
+Penzenskaïa oblast;Nizhnelomovskiy : 1 : 1988.0
+Samarskaïa (Kouïbychevska;Shigonskiy : 1 : 1265.7
+Penzenskaïa oblast;Mokshanskiy : 1 : 2321.7
+Samarskaïa (Kouïbychevska;Kinel-Cherkasskiy : 1 : 2584.3999
+Oulianovskaïa oblast;Barysh : 1 : 1.8
+Samarskaïa (Kouïbychevska;Volzhskiy : 1 : 50.599998
+Penzenskaïa oblast;Sosnovoborskiy : 1 : 1599.7
+RU-UNK-2901 : 1 : 21.0
+Penzenskaïa oblast;Bessonovskiy : 1 : 1209.4
+Penzenskaïa oblast;Gorodischenskiy : 1 : 2187.5
+Samarskaïa (Kouïbychevska;Tolyatti : 1 : 6.6999998
+Penzenskaïa oblast;Bashmakovskiy : 1 : 1740.6
+Penzenskaïa oblast;Pachelmskiy : 1 : 1316.3
+Samarskaïa (Kouïbychevska;Syzranskiy : 1 : 2222.8
+Samarskaïa (Kouïbychevska;Kinelskiy : 1 : 2130.5
+Samarskaïa (Kouïbychevska;Zhigulyovskiy : 1 : 6.1999998
+Penzenskaïa oblast;Kuznetskiy : 1 : 1805.8
+Penzenskaïa oblast;Kamenskiy : 1 : 2196.8999
+Samarskaïa (Kouïbychevska;Otradnyi : 1 : 2.8
+Oulianovskaïa oblast;Novospasskiy : 1 : 1432.1
+Oulianovskaïa oblast;Nikolayevskiy : 1 : 2086.2
+Samarskaïa (Kouïbychevska;Borskiy : 1 : 2363.8
+Samarskaïa (Kouïbychevska;Samara : 1 : 142.8
+Penzenskaïa oblast;Penza : 1 : 265.20001
+Penzenskaïa oblast;Penzenskiy : 1 : 1876.6
+Samarskaïa (Kouïbychevska;Bogatovskiy : 1 : 651.40002
+Samarskaïa (Kouïbychevska;Kinel : 1 : 1.3
+Penzenskaïa oblast;Belinskiy : 1 : 2340.1001
+Penzenskaïa oblast;Kamenka : 1 : 30.9
+Samarskaïa (Kouïbychevska;Oktyabrsk : 1 : 1.0
+Samarskaïa (Kouïbychevska;Privolzhskiy : 1 : 1099.3
+Samarskaïa (Kouïbychevska;Bezenchukskiy : 1 : 1371.5
+Samarskaïa (Kouïbychevska;Syzran : 1 : 2.9000001
+Penzenskaïa oblast;Kuznetsk : 1 : 31.5
+Samarskaïa (Kouïbychevska;Novokuybyshevsk : 1 : 5.0
+Penzenskaïa oblast;Shemysheyskiy : 1 : 1373.2
+Oulianovskaïa oblast;Radischevskiy : 1 : 1608.4
+Penzenskaïa oblast;Kameshkirskiy : 1 : 1208.2
+Samarskaïa (Kouïbychevska;Neftegorskiy : 1 : 1466.4
+Samarskaïa (Kouïbychevska;Chapayevsk : 1 : 2.2
+Penzenskaïa oblast;Neverkinskiy : 1 : 1006.2
+Oulianovskaïa oblast;Starokulatkinskiy : 1 : 956.20001
+Samarskaïa (Kouïbychevska;Krasnoarmeyskiy : 1 : 1987.3
+Penzenskaïa oblast;Kolyshleyskiy : 1 : 1623.5
+Penzenskaïa oblast;Kondolskiy : 1 : 914.40002
+Samarskaïa (Kouïbychevska;Alekseyevskiy : 1 : 1790.2
+Samarskaïa (Kouïbychevska;Khvorostyanskiy : 1 : 2046.9
+Oulianovskaïa oblast;Pavlovskiy : 1 : 709.29999
+Penzenskaïa oblast;Serdobskiy : 1 : 1549.6
+Penzenskaïa oblast;Tamalinskiy : 1 : 973.09998
+Penzenskaïa oblast;Lopatino : 1 : 1612.6
+Saratovskaïa oblast;Khvalynskiy : 1 : 1645.6
+Penzenskaïa oblast;Bekovskiy : 1 : 948.40002
+Saratovskaïa oblast;Dukhovnitskiy : 1 : 1633.4
+Samarskaïa (Kouïbychevska;Bolsheglushitskiy : 1 : 2873.0
+Saratovskaïa oblast;Baltayskiy : 1 : 1392.7
+Samarskaïa (Kouïbychevska;Pestravskiy : 1 : 1830.2
+Penzenskaïa oblast;Maloserdobinskiy : 1 : 1319.9
+Saratovskaïa oblast;Bazarno-Karabulakskiy : 1 : 2174.8999
+Saratovskaïa oblast;Volskiy : 1 : 3252.6001
+Saratovskaïa oblast;Yekaterinovskiy : 1 : 3040.2
+Saratovskaïa oblast;Ivanteyevskiy : 1 : 2111.0
+Saratovskaïa oblast;Khvalynsk : 1 : 1.8
+Saratovskaïa oblast;Petrovskiy : 1 : 2105.2
+Penzenskaïa oblast;Serdobsk : 1 : 16.200001
+Saratovskaïa oblast;Rtischevskiy : 1 : 2176.6001
+Saratovskaïa oblast;Novoburasskiy : 1 : 1873.2
+Saratovskaïa oblast;Pugachyovskiy : 1 : 3863.6001
+Samarskaïa (Kouïbychevska;Bolshechernigovskiy : 1 : 2762.0
+Saratovskaïa oblast;Petrovsk : 1 : 27.200001
+Saratovskaïa oblast;Turkovskiy : 1 : 1361.0
+Saratovskaïa oblast;Rtishchevo : 1 : 42.5
+Saratovskaïa oblast;Atkarskiy : 1 : 2842.3
+Saratovskaïa oblast;Balakovskiy : 1 : 3267.7
+Saratovskaïa oblast;Perelyubskiy : 1 : 3681.7
+Saratovskaïa oblast;Arkadakskiy : 1 : 2540.6001
+Saratovskaïa oblast;Voskresenskiy : 1 : 1336.5
+Saratovskaïa oblast;Volsk : 1 : 66.300003
+Saratovskaïa oblast;Balakovo : 1 : 72.5
+Saratovskaïa oblast;Tatischevskiy : 1 : 1991.8
+Saratovskaïa oblast;Pugachev : 1 : 94.5
+Saratovskaïa oblast;Romanovskiy : 1 : 1537.7
+Saratovskaïa oblast;Marksovskiy : 1 : 2669.0
+Saratovskaïa oblast;Krasnopartizanskiy : 1 : 2250.3999
+Saratovskaïa oblast;Atkarsk : 1 : 1.5
+Saratovskaïa oblast;Saratovskiy : 1 : 428.29999
+Saratovskaïa oblast;Balashovskiy : 1 : 2901.8999
+Saratovskaïa oblast;Yershovskiy : 1 : 4375.5
+Saratovskaïa oblast;Kalininskiy : 1 : 3599.6001
+Saratovskaïa oblast;Marx : 1 : 1.6
+Saratovskaïa oblast;Ozinskiy : 1 : 3239.7
+Saratovskaïa oblast;Lysogorskiy : 1 : 2427.3999
+Saratovskaïa oblast;Saratov : 1 : 247.60001
+Saratovskaïa oblast;Engelskiy : 1 : 2780.1001
+Saratovskaïa oblast;Dergachyovskiy : 1 : 4202.0
+Saratovskaïa oblast;Balashov : 1 : 67.099998
+Saratovskaïa oblast;Fedorovskiy : 1 : 2615.1001
+Saratovskaïa oblast;Sovetskiy : 1 : 1619.7
+Saratovskaïa oblast;Engels : 1 : 94.0
+Saratovskaïa oblast;Samoylovskiy : 1 : 2585.8999
+Saratovskaïa oblast;Krasnoarmeyskiy : 1 : 2665.2
+Volgogradskaïa oblast;Novonikolayevskiy : 1 : 2603.1001
+Saratovskaïa oblast;Krasnokutskiy : 1 : 2944.1001
+Volgogradskaïa oblast;Yelanskiy : 1 : 2659.1001
+Volgogradskaïa oblast;Uryupinskiy : 1 : 3517.8999
+Saratovskaïa oblast;Rovenskiy : 1 : 2291.3999
+Volgogradskaïa oblast;Zhirnovskiy : 1 : 2537.0
+Volgogradskaïa oblast;Kikvidzenskiy : 1 : 2110.2
+Volgogradskaïa oblast;Rudnyanskiy : 1 : 1793.3
+Saratovskaïa oblast;Krasnoarmeysk : 1 : 1.6
+Saratovskaïa oblast;Piterskiy : 1 : 2528.1001
+Saratovskaïa oblast;Novouzenskiy : 1 : 4295.2998
+Volgogradskaïa oblast;Novoanninskiy : 1 : 2615.7
+Volgogradskaïa oblast;Urupinsk : 1 : 2.5
+Volgogradskaïa oblast;Danilovskiy : 1 : 3160.2
+Volgogradskaïa oblast;Staropoltavskiy : 1 : 3120.3
+Volgogradskaïa oblast;Kamyshinskiy : 1 : 3519.3
+Volgogradskaïa oblast;Kotovskiy : 1 : 2398.8999
+Volgogradskaïa oblast;Nekhayevskiy : 1 : 2257.5
+Volgogradskaïa oblast;Mikhaylovskiy : 1 : 3818.5
+Saratovskaïa oblast;Aleksandrov-Gayskiy : 1 : 2202.3999
+Volgogradskaïa oblast;Alekseyevskiy : 1 : 2370.1001
+Volgogradskaïa oblast;Pallasovskiy : 1 : 12731.8
+Volgogradskaïa oblast;Nikolayevskiy : 1 : 2581.3999
+Volgogradskaïa oblast;Frolovskiy : 1 : 3778.6001
+Volgogradskaïa oblast;Olkhovskiy : 1 : 3313.6001
+Volgogradskaïa oblast;Kamyshin : 1 : 5.6999998
+Volgogradskaïa oblast;Mikhailovka : 1 : 5.9000001
+Volgogradskaïa oblast;Podtelkovskiy : 1 : 2798.8
+Volgogradskaïa oblast;Bykovskiy : 1 : 3156.5
+Volgogradskaïa oblast;Serafimovichskiy : 1 : 4031.1001
+Volgogradskaïa oblast;Frolovo : 1 : 3.4000001
+Volgogradskaïa oblast;Dubovskiy : 1 : 2367.1001
+Volgogradskaïa oblast;Ilovlinskiy : 1 : 3644.3
+Volgogradskaïa oblast;Kletskiy : 1 : 3413.2
+Volgogradskaïa oblast;Leninskiy : 1 : 2637.6001
+Volgogradskaïa oblast;Kalachevskiy : 1 : 623.70001
+Volgogradskaïa oblast;Gorodischenskiy : 1 : 2549.3999
+Volgogradskaïa oblast;Sredneakhtubinskiy : 1 : 1950.8
+Volgogradskaïa oblast;Surovikinskiy : 1 : 3513.2
+Volgogradskaïa oblast;Volgograd : 1 : 294.20001
+Volgogradskaïa oblast;Volzhskiy : 1 : 92.099998
+Astrakhanskaïa oblast;Akhtubinskiy : 1 : 7419.7998
+Volgogradskaïa oblast;Svetloyarskiy : 1 : 3442.3999
+Astrakhanskaïa oblast;Chyornoyarskiy : 1 : 3872.0
+Volgogradskaïa oblast;Chernyshkovskiy : 1 : 2381.3
+Kalmykia;Maloderbetovskiy : 1 : 3951.3
+Volgogradskaïa oblast;Oktyabrskiy : 1 : 3527.5
+Astrakhanskaïa oblast;Akhtubinsk : 1 : 2.5999999
+Kalmykia;Oktyabrskiy : 1 : 4897.2998
+Volgogradskaïa oblast;Kotelnikovskiy : 1 : 2822.5
+Astrakhanskaïa oblast;Yenotayevskiy : 1 : 2138.6001
+Kalmykia;Sarpinskiy : 1 : 3230.3999
+Astrakhanskaïa oblast;Kharabalinskiy : 1 : 8916.5996
+Kalmykia;Yustinskiy : 1 : 8982.2002
+Kalmykia;Ketchenerovskiy : 1 : 5097.0
+Astrakhanskaïa oblast;Krasnoyarskiy : 1 : 5112.5
+Kalmykia;Yashkulskiy : 1 : 12313.0
+Kalmykia;Tselinnyi : 1 : 4751.7998
+Astrakhanskaïa oblast;Narimanovskiy : 1 : 5293.8999
+Kalmykia;Yashaltinskiy : 1 : 1790.2
+Astrakhanskaïa oblast;Volodarskiy : 1 : 2668.6001
+Astrakhanskaïa oblast;Privolzhskiy : 1 : 726.0
+Kalmykia;Priyutinskiy : 1 : 3196.8
+Astrakhanskaïa oblast;Astrakhan : 1 : 205.10001
+Kalmykia;Elista : 1 : 151.8
+Kalmykia;Chernozemelskiy : 1 : 14194.2
+Kalmykia;Gorodovikovskiy : 1 : 997.70001
+Astrakhanskaïa oblast;Ikryaninskiy : 1 : 1757.1
+Kalmykia;Iki-Burulskiy : 1 : 6409.1001
+Astrakhanskaïa oblast;Kamyzyakskiy : 1 : 2504.7
+Astrakhanskaïa oblast;Limanskiy : 1 : 2269.1001
+Kalmykia;Kaspiyskiy : 1 : 4508.7002
+RU-UNK-2902 : 1 : 1277.1
+RU-UNK-2903 : 1 : 750.40002
+RU-UNK-2904 : 1 : 21.0
+Kaliningradskaïa oblast;Gvardeyskiy : 1 : 796.70001
+Kaliningradskaïa oblast;Guryevskiy : 1 : 749.5
+Kaliningradskaïa oblast;Kaliningrad : 1 : 288.20001
+Kaliningradskaïa oblast;Nesterovskiy : 1 : 1047.2
+Kaliningradskaïa oblast;Chernyakhovsk : 1 : 1.0
+Kaliningradskaïa oblast;Gusev : 1 : 1.0
+Kaliningradskaïa oblast;Pravdinskiy : 1 : 1337.6
+Kaliningradskaïa oblast;Ozerskiy : 1 : 878.70001
+Kaliningradskaïa oblast;Slavskiy : 1 : 1127.8
+Kaliningradskaïa oblast;Zelenogradskiy : 1 : 958.09998
+Kaliningradskaïa oblast;Sovetsk : 1 : 17.1
+Kaliningradskaïa oblast;Nemanskiy : 1 : 691.79999
+Kaliningradskaïa oblast;Kraznoznamenskiy : 1 : 1290.8
+Kaliningradskaïa oblast;Neman : 1 : 1.0
+Kaliningradskaïa oblast;Polesskiy : 1 : 864.20001
+Kaliningradskaïa oblast;Svetlogorsk : 1 : 1.8
+Kaliningradskaïa oblast;Chernyakhovskiy : 1 : 1383.1
+Kaliningradskaïa oblast;Gusevskiy : 1 : 627.79999
+Kaliningradskaïa oblast;Svetlyi : 1 : 1.0
+Kaliningradskaïa oblast;Baltiysk : 1 : 1.0
+Kaliningradskaïa oblast;Bagrationovskiy : 1 : 1352.2
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_POPULATION.txt
new file mode 100644
index 0000000..6f6622c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/RUSSIA_POPULATION.txt
@@ -0,0 +1,5349 @@
+RU-UNK-1 : 1 : 0
+RU-UNK-2 : 1 : 0
+RU-UNK-3 : 1 : 0
+RU-UNK-4 : 1 : 0
+RU-UNK-5 : 1 : 0
+RU-UNK-6 : 1 : 0
+RU-UNK-7 : 1 : 0
+RU-UNK-8 : 1 : 0
+RU-UNK-9 : 1 : 0
+RU-UNK-10 : 1 : 0
+RU-UNK-11 : 1 : 0
+RU-UNK-12 : 1 : 0
+RU-UNK-13 : 1 : 0
+RU-UNK-14 : 1 : 0
+RU-UNK-15 : 1 : 0
+RU-UNK-16 : 1 : 0
+RU-UNK-17 : 1 : 0
+RU-UNK-18 : 1 : 0
+RU-UNK-19 : 1 : 0
+RU-UNK-20 : 1 : 0
+RU-UNK-21 : 1 : 0
+RU-UNK-22 : 1 : 0
+RU-UNK-23 : 1 : 0
+RU-UNK-24 : 1 : 0
+RU-UNK-25 : 1 : 0
+RU-UNK-26 : 1 : 0
+RU-UNK-27 : 1 : 0
+RU-UNK-28 : 1 : 0
+RU-UNK-29 : 1 : 0
+RU-UNK-30 : 1 : 0
+RU-UNK-31 : 1 : 0
+RU-UNK-32 : 1 : 0
+RU-UNK-33 : 1 : 0
+RU-UNK-34 : 1 : 0
+RU-UNK-35 : 1 : 0
+RU-UNK-36 : 1 : 0
+RU-UNK-37 : 1 : 0
+RU-UNK-38 : 1 : 0
+RU-UNK-39 : 1 : 0
+RU-UNK-40 : 1 : 0
+RU-UNK-41 : 1 : 0
+RU-UNK-42 : 1 : 0
+RU-UNK-43 : 1 : 0
+RU-UNK-44 : 1 : 0
+RU-UNK-45 : 1 : 0
+RU-UNK-46 : 1 : 0
+RU-UNK-47 : 1 : 0
+RU-UNK-48 : 1 : 0
+RU-UNK-49 : 1 : 0
+RU-UNK-50 : 1 : 0
+RU-UNK-51 : 1 : 0
+RU-UNK-52 : 1 : 0
+RU-UNK-53 : 1 : 0
+RU-UNK-54 : 1 : 0
+RU-UNK-55 : 1 : 0
+RU-UNK-56 : 1 : 0
+RU-UNK-57 : 1 : 0
+RU-UNK-58 : 1 : 0
+RU-UNK-59 : 1 : 0
+RU-UNK-60 : 1 : 0
+RU-UNK-61 : 1 : 0
+RU-UNK-62 : 1 : 0
+RU-UNK-63 : 1 : 0
+RU-UNK-64 : 1 : 0
+RU-UNK-65 : 1 : 0
+RU-UNK-66 : 1 : 0
+RU-UNK-67 : 1 : 0
+RU-UNK-68 : 1 : 0
+RU-UNK-69 : 1 : 0
+RU-UNK-70 : 1 : 0
+RU-UNK-71 : 1 : 0
+RU-UNK-72 : 1 : 0
+RU-UNK-73 : 1 : 0
+RU-UNK-74 : 1 : 0
+RU-UNK-75 : 1 : 0
+RU-UNK-76 : 1 : 0
+RU-UNK-77 : 1 : 0
+RU-UNK-78 : 1 : 0
+RU-UNK-79 : 1 : 0
+RU-UNK-80 : 1 : 0
+RU-UNK-81 : 1 : 0
+RU-UNK-82 : 1 : 0
+RU-UNK-83 : 1 : 0
+RU-UNK-84 : 1 : 0
+RU-UNK-85 : 1 : 0
+RU-UNK-86 : 1 : 0
+RU-UNK-87 : 1 : 0
+RU-UNK-88 : 1 : 0
+RU-UNK-89 : 1 : 0
+RU-UNK-90 : 1 : 0
+RU-UNK-91 : 1 : 0
+RU-UNK-92 : 1 : 0
+RU-UNK-93 : 1 : 0
+RU-UNK-94 : 1 : 0
+RU-UNK-95 : 1 : 0
+RU-UNK-96 : 1 : 0
+RU-UNK-97 : 1 : 0
+RU-UNK-98 : 1 : 0
+RU-UNK-99 : 1 : 0
+RU-UNK-100 : 1 : 0
+RU-UNK-101 : 1 : 0
+RU-UNK-102 : 1 : 0
+RU-UNK-103 : 1 : 0
+RU-UNK-104 : 1 : 0
+RU-UNK-105 : 1 : 0
+RU-UNK-106 : 1 : 0
+RU-UNK-107 : 1 : 0
+RU-UNK-108 : 1 : 0
+RU-UNK-109 : 1 : 0
+RU-UNK-110 : 1 : 0
+RU-UNK-111 : 1 : 0
+RU-UNK-112 : 1 : 0
+RU-UNK-113 : 1 : 0
+RU-UNK-114 : 1 : 0
+RU-UNK-115 : 1 : 0
+RU-UNK-116 : 1 : 0
+RU-UNK-117 : 1 : 0
+RU-UNK-118 : 1 : 0
+RU-UNK-119 : 1 : 0
+RU-UNK-120 : 1 : 0
+RU-UNK-121 : 1 : 0
+RU-UNK-122 : 1 : 0
+RU-UNK-123 : 1 : 0
+RU-UNK-124 : 1 : 0
+RU-UNK-125 : 1 : 0
+RU-UNK-126 : 1 : 0
+RU-UNK-127 : 1 : 0
+RU-UNK-128 : 1 : 0
+RU-UNK-129 : 1 : 0
+RU-UNK-130 : 1 : 0
+RU-UNK-131 : 1 : 0
+RU-UNK-132 : 1 : 0
+RU-UNK-133 : 1 : 0
+RU-UNK-134 : 1 : 0
+RU-UNK-135 : 1 : 0
+RU-UNK-136 : 1 : 0
+RU-UNK-137 : 1 : 0
+RU-UNK-138 : 1 : 0
+RU-UNK-139 : 1 : 0
+RU-UNK-140 : 1 : 0
+RU-UNK-141 : 1 : 0
+RU-UNK-142 : 1 : 0
+RU-UNK-143 : 1 : 0
+RU-UNK-144 : 1 : 0
+RU-UNK-145 : 1 : 0
+RU-UNK-146 : 1 : 0
+RU-UNK-147 : 1 : 0
+RU-UNK-148 : 1 : 0
+RU-UNK-149 : 1 : 0
+RU-UNK-150 : 1 : 0
+RU-UNK-151 : 1 : 0
+RU-UNK-152 : 1 : 0
+RU-UNK-153 : 1 : 0
+RU-UNK-154 : 1 : 0
+RU-UNK-155 : 1 : 0
+RU-UNK-156 : 1 : 0
+RU-UNK-157 : 1 : 0
+RU-UNK-158 : 1 : 0
+RU-UNK-159 : 1 : 0
+RU-UNK-160 : 1 : 0
+RU-UNK-161 : 1 : 0
+RU-UNK-162 : 1 : 0
+RU-UNK-163 : 1 : 0
+RU-UNK-164 : 1 : 0
+RU-UNK-165 : 1 : 0
+RU-UNK-166 : 1 : 0
+RU-UNK-167 : 1 : 0
+RU-UNK-168 : 1 : 0
+RU-UNK-169 : 1 : 0
+RU-UNK-170 : 1 : 0
+RU-UNK-171 : 1 : 0
+RU-UNK-172 : 1 : 0
+RU-UNK-173 : 1 : 0
+RU-UNK-174 : 1 : 0
+RU-UNK-175 : 1 : 0
+RU-UNK-176 : 1 : 0
+RU-UNK-177 : 1 : 0
+RU-UNK-178 : 1 : 0
+RU-UNK-179 : 1 : 0
+RU-UNK-180 : 1 : 0
+RU-UNK-181 : 1 : 0
+RU-UNK-182 : 1 : 0
+RU-UNK-183 : 1 : 0
+RU-UNK-184 : 1 : 0
+RU-UNK-185 : 1 : 0
+RU-UNK-186 : 1 : 0
+RU-UNK-187 : 1 : 0
+RU-UNK-188 : 1 : 0
+RU-UNK-189 : 1 : 0
+RU-UNK-190 : 1 : 0
+RU-UNK-191 : 1 : 0
+RU-UNK-192 : 1 : 0
+RU-UNK-193 : 1 : 0
+RU-UNK-194 : 1 : 0
+RU-UNK-195 : 1 : 0
+RU-UNK-196 : 1 : 0
+RU-UNK-197 : 1 : 0
+RU-UNK-198 : 1 : 0
+RU-UNK-199 : 1 : 0
+RU-UNK-200 : 1 : 0
+RU-UNK-201 : 1 : 0
+RU-UNK-202 : 1 : 0
+RU-UNK-203 : 1 : 0
+RU-UNK-204 : 1 : 0
+RU-UNK-205 : 1 : 0
+RU-UNK-206 : 1 : 0
+RU-UNK-207 : 1 : 0
+RU-UNK-208 : 1 : 0
+RU-UNK-209 : 1 : 0
+RU-UNK-210 : 1 : 0
+RU-UNK-211 : 1 : 0
+RU-UNK-212 : 1 : 0
+RU-UNK-213 : 1 : 0
+RU-UNK-214 : 1 : 0
+RU-UNK-215 : 1 : 0
+RU-UNK-216 : 1 : 0
+RU-UNK-217 : 1 : 0
+RU-UNK-218 : 1 : 0
+RU-UNK-219 : 1 : 0
+RU-UNK-220 : 1 : 0
+RU-UNK-221 : 1 : 0
+RU-UNK-222 : 1 : 0
+RU-UNK-223 : 1 : 0
+RU-UNK-224 : 1 : 0
+RU-UNK-225 : 1 : 0
+RU-UNK-226 : 1 : 0
+RU-UNK-227 : 1 : 0
+RU-UNK-228 : 1 : 0
+RU-UNK-229 : 1 : 0
+RU-UNK-230 : 1 : 0
+RU-UNK-231 : 1 : 0
+RU-UNK-232 : 1 : 0
+RU-UNK-233 : 1 : 0
+RU-UNK-234 : 1 : 0
+RU-UNK-235 : 1 : 0
+RU-UNK-236 : 1 : 0
+RU-UNK-237 : 1 : 0
+RU-UNK-238 : 1 : 0
+RU-UNK-239 : 1 : 0
+RU-UNK-240 : 1 : 0
+RU-UNK-241 : 1 : 0
+RU-UNK-242 : 1 : 0
+RU-UNK-243 : 1 : 0
+RU-UNK-244 : 1 : 0
+RU-UNK-245 : 1 : 0
+RU-UNK-246 : 1 : 0
+RU-UNK-247 : 1 : 0
+RU-UNK-248 : 1 : 0
+RU-UNK-249 : 1 : 0
+RU-UNK-250 : 1 : 0
+RU-UNK-251 : 1 : 0
+RU-UNK-252 : 1 : 0
+RU-UNK-253 : 1 : 0
+RU-UNK-254 : 1 : 0
+RU-UNK-255 : 1 : 0
+RU-UNK-256 : 1 : 0
+RU-UNK-257 : 1 : 0
+RU-UNK-258 : 1 : 0
+RU-UNK-259 : 1 : 0
+RU-UNK-260 : 1 : 0
+RU-UNK-261 : 1 : 0
+RU-UNK-262 : 1 : 0
+RU-UNK-263 : 1 : 0
+RU-UNK-264 : 1 : 0
+RU-UNK-265 : 1 : 0
+RU-UNK-266 : 1 : 0
+RU-UNK-267 : 1 : 0
+RU-UNK-268 : 1 : 0
+RU-UNK-269 : 1 : 0
+RU-UNK-270 : 1 : 0
+RU-UNK-271 : 1 : 0
+RU-UNK-272 : 1 : 0
+RU-UNK-273 : 1 : 0
+RU-UNK-274 : 1 : 0
+RU-UNK-275 : 1 : 0
+RU-UNK-276 : 1 : 0
+RU-UNK-277 : 1 : 0
+RU-UNK-278 : 1 : 0
+RU-UNK-279 : 1 : 0
+RU-UNK-280 : 1 : 0
+RU-UNK-281 : 1 : 0
+RU-UNK-282 : 1 : 0
+RU-UNK-283 : 1 : 0
+RU-UNK-284 : 1 : 0
+RU-UNK-285 : 1 : 0
+RU-UNK-286 : 1 : 0
+RU-UNK-287 : 1 : 0
+RU-UNK-288 : 1 : 0
+RU-UNK-289 : 1 : 0
+RU-UNK-290 : 1 : 0
+RU-UNK-291 : 1 : 0
+RU-UNK-292 : 1 : 0
+RU-UNK-293 : 1 : 0
+RU-UNK-294 : 1 : 0
+RU-UNK-295 : 1 : 0
+RU-UNK-296 : 1 : 0
+RU-UNK-297 : 1 : 0
+RU-UNK-298 : 1 : 0
+RU-UNK-299 : 1 : 0
+RU-UNK-300 : 1 : 0
+RU-UNK-301 : 1 : 0
+RU-UNK-302 : 1 : 0
+RU-UNK-303 : 1 : 0
+RU-UNK-304 : 1 : 0
+RU-UNK-305 : 1 : 0
+RU-UNK-306 : 1 : 0
+RU-UNK-307 : 1 : 0
+RU-UNK-308 : 1 : 0
+RU-UNK-309 : 1 : 0
+RU-UNK-310 : 1 : 0
+RU-UNK-311 : 1 : 0
+RU-UNK-312 : 1 : 0
+RU-UNK-313 : 1 : 0
+RU-UNK-314 : 1 : 0
+RU-UNK-315 : 1 : 0
+RU-UNK-316 : 1 : 0
+RU-UNK-317 : 1 : 0
+RU-UNK-318 : 1 : 0
+RU-UNK-319 : 1 : 0
+RU-UNK-320 : 1 : 0
+RU-UNK-321 : 1 : 0
+RU-UNK-322 : 1 : 0
+RU-UNK-323 : 1 : 0
+RU-UNK-324 : 1 : 0
+RU-UNK-325 : 1 : 0
+RU-UNK-326 : 1 : 0
+RU-UNK-327 : 1 : 0
+RU-UNK-328 : 1 : 0
+RU-UNK-329 : 1 : 0
+RU-UNK-330 : 1 : 0
+RU-UNK-331 : 1 : 0
+RU-UNK-332 : 1 : 0
+RU-UNK-333 : 1 : 0
+RU-UNK-334 : 1 : 0
+RU-UNK-335 : 1 : 0
+RU-UNK-336 : 1 : 0
+RU-UNK-337 : 1 : 0
+RU-UNK-338 : 1 : 0
+RU-UNK-339 : 1 : 0
+RU-UNK-340 : 1 : 0
+RU-UNK-341 : 1 : 0
+RU-UNK-342 : 1 : 0
+RU-UNK-343 : 1 : 0
+RU-UNK-344 : 1 : 0
+RU-UNK-345 : 1 : 0
+RU-UNK-346 : 1 : 0
+RU-UNK-347 : 1 : 0
+RU-UNK-348 : 1 : 0
+RU-UNK-349 : 1 : 0
+RU-UNK-350 : 1 : 0
+RU-UNK-351 : 1 : 0
+RU-UNK-352 : 1 : 0
+RU-UNK-353 : 1 : 0
+RU-UNK-354 : 1 : 0
+RU-UNK-355 : 1 : 0
+RU-UNK-356 : 1 : 0
+RU-UNK-357 : 1 : 0
+RU-UNK-358 : 1 : 0
+RU-UNK-359 : 1 : 0
+RU-UNK-360 : 1 : 0
+RU-UNK-361 : 1 : 0
+RU-UNK-362 : 1 : 0
+RU-UNK-363 : 1 : 0
+RU-UNK-364 : 1 : 0
+RU-UNK-365 : 1 : 0
+RU-UNK-366 : 1 : 0
+RU-UNK-367 : 1 : 0
+RU-UNK-368 : 1 : 0
+RU-UNK-369 : 1 : 0
+RU-UNK-370 : 1 : 0
+RU-UNK-371 : 1 : 0
+RU-UNK-372 : 1 : 0
+RU-UNK-373 : 1 : 0
+RU-UNK-374 : 1 : 0
+RU-UNK-375 : 1 : 0
+RU-UNK-376 : 1 : 0
+RU-UNK-377 : 1 : 0
+RU-UNK-378 : 1 : 0
+RU-UNK-379 : 1 : 0
+RU-UNK-380 : 1 : 0
+RU-UNK-381 : 1 : 0
+RU-UNK-382 : 1 : 0
+RU-UNK-383 : 1 : 0
+RU-UNK-384 : 1 : 0
+RU-UNK-385 : 1 : 0
+RU-UNK-386 : 1 : 0
+RU-UNK-387 : 1 : 0
+RU-UNK-388 : 1 : 0
+RU-UNK-389 : 1 : 0
+RU-UNK-390 : 1 : 0
+RU-UNK-391 : 1 : 0
+RU-UNK-392 : 1 : 0
+RU-UNK-393 : 1 : 0
+RU-UNK-394 : 1 : 0
+RU-UNK-395 : 1 : 0
+RU-UNK-396 : 1 : 0
+RU-UNK-397 : 1 : 0
+RU-UNK-398 : 1 : 0
+RU-UNK-399 : 1 : 0
+RU-UNK-400 : 1 : 0
+RU-UNK-401 : 1 : 0
+RU-UNK-402 : 1 : 0
+RU-UNK-403 : 1 : 0
+RU-UNK-404 : 1 : 0
+RU-UNK-405 : 1 : 0
+RU-UNK-406 : 1 : 0
+RU-UNK-407 : 1 : 0
+RU-UNK-408 : 1 : 0
+RU-UNK-409 : 1 : 0
+RU-UNK-410 : 1 : 0
+RU-UNK-411 : 1 : 0
+RU-UNK-412 : 1 : 0
+RU-UNK-413 : 1 : 0
+RU-UNK-414 : 1 : 0
+RU-UNK-415 : 1 : 0
+RU-UNK-416 : 1 : 0
+RU-UNK-417 : 1 : 0
+RU-UNK-418 : 1 : 0
+RU-UNK-419 : 1 : 0
+RU-UNK-420 : 1 : 0
+RU-UNK-421 : 1 : 0
+RU-UNK-422 : 1 : 0
+RU-UNK-423 : 1 : 0
+RU-UNK-424 : 1 : 0
+RU-UNK-425 : 1 : 0
+RU-UNK-426 : 1 : 0
+RU-UNK-427 : 1 : 0
+RU-UNK-428 : 1 : 0
+RU-UNK-429 : 1 : 0
+RU-UNK-430 : 1 : 0
+RU-UNK-431 : 1 : 0
+RU-UNK-432 : 1 : 0
+RU-UNK-433 : 1 : 0
+RU-UNK-434 : 1 : 0
+RU-UNK-435 : 1 : 0
+RU-UNK-436 : 1 : 0
+RU-UNK-437 : 1 : 0
+RU-UNK-438 : 1 : 0
+RU-UNK-439 : 1 : 0
+RU-UNK-440 : 1 : 0
+RU-UNK-441 : 1 : 0
+RU-UNK-442 : 1 : 0
+RU-UNK-443 : 1 : 0
+RU-UNK-444 : 1 : 0
+RU-UNK-445 : 1 : 0
+RU-UNK-446 : 1 : 0
+RU-UNK-447 : 1 : 0
+RU-UNK-448 : 1 : 0
+RU-UNK-449 : 1 : 0
+RU-UNK-450 : 1 : 0
+RU-UNK-451 : 1 : 0
+RU-UNK-452 : 1 : 0
+RU-UNK-453 : 1 : 0
+RU-UNK-454 : 1 : 0
+RU-UNK-455 : 1 : 0
+RU-UNK-456 : 1 : 0
+RU-UNK-457 : 1 : 0
+RU-UNK-458 : 1 : 0
+RU-UNK-459 : 1 : 0
+RU-UNK-460 : 1 : 0
+RU-UNK-461 : 1 : 0
+RU-UNK-462 : 1 : 0
+RU-UNK-463 : 1 : 0
+RU-UNK-464 : 1 : 0
+RU-UNK-465 : 1 : 0
+RU-UNK-466 : 1 : 0
+RU-UNK-467 : 1 : 0
+RU-UNK-468 : 1 : 0
+RU-UNK-469 : 1 : 0
+RU-UNK-470 : 1 : 0
+RU-UNK-471 : 1 : 0
+RU-UNK-472 : 1 : 0
+RU-UNK-473 : 1 : 0
+RU-UNK-474 : 1 : 0
+RU-UNK-475 : 1 : 0
+RU-UNK-476 : 1 : 0
+RU-UNK-477 : 1 : 0
+RU-UNK-478 : 1 : 0
+RU-UNK-479 : 1 : 0
+RU-UNK-480 : 1 : 0
+RU-UNK-481 : 1 : 0
+RU-UNK-482 : 1 : 0
+RU-UNK-483 : 1 : 0
+RU-UNK-484 : 1 : 0
+RU-UNK-485 : 1 : 0
+RU-UNK-486 : 1 : 0
+RU-UNK-487 : 1 : 0
+RU-UNK-488 : 1 : 0
+RU-UNK-489 : 1 : 0
+RU-UNK-490 : 1 : 0
+RU-UNK-491 : 1 : 0
+RU-UNK-492 : 1 : 0
+RU-UNK-493 : 1 : 0
+RU-UNK-494 : 1 : 0
+RU-UNK-495 : 1 : 0
+RU-UNK-496 : 1 : 0
+RU-UNK-497 : 1 : 0
+RU-UNK-498 : 1 : 0
+RU-UNK-499 : 1 : 0
+RU-UNK-500 : 1 : 0
+RU-UNK-501 : 1 : 0
+RU-UNK-502 : 1 : 0
+RU-UNK-503 : 1 : 0
+RU-UNK-504 : 1 : 0
+RU-UNK-505 : 1 : 0
+RU-UNK-506 : 1 : 0
+RU-UNK-507 : 1 : 0
+RU-UNK-508 : 1 : 0
+RU-UNK-509 : 1 : 0
+RU-UNK-510 : 1 : 0
+RU-UNK-511 : 1 : 0
+RU-UNK-512 : 1 : 0
+RU-UNK-513 : 1 : 0
+RU-UNK-514 : 1 : 0
+RU-UNK-515 : 1 : 0
+RU-UNK-516 : 1 : 0
+RU-UNK-517 : 1 : 0
+RU-UNK-518 : 1 : 0
+RU-UNK-519 : 1 : 0
+RU-UNK-520 : 1 : 0
+RU-UNK-521 : 1 : 0
+RU-UNK-522 : 1 : 0
+RU-UNK-523 : 1 : 0
+RU-UNK-524 : 1 : 0
+RU-UNK-525 : 1 : 0
+RU-UNK-526 : 1 : 0
+RU-UNK-527 : 1 : 0
+RU-UNK-528 : 1 : 0
+RU-UNK-529 : 1 : 0
+RU-UNK-530 : 1 : 0
+RU-UNK-531 : 1 : 0
+RU-UNK-532 : 1 : 0
+RU-UNK-533 : 1 : 0
+RU-UNK-534 : 1 : 0
+RU-UNK-535 : 1 : 0
+RU-UNK-536 : 1 : 0
+RU-UNK-537 : 1 : 0
+RU-UNK-538 : 1 : 0
+RU-UNK-539 : 1 : 0
+RU-UNK-540 : 1 : 0
+RU-UNK-541 : 1 : 0
+RU-UNK-542 : 1 : 0
+RU-UNK-543 : 1 : 0
+RU-UNK-544 : 1 : 0
+RU-UNK-545 : 1 : 0
+RU-UNK-546 : 1 : 0
+RU-UNK-547 : 1 : 0
+RU-UNK-548 : 1 : 0
+RU-UNK-549 : 1 : 0
+RU-UNK-550 : 1 : 0
+RU-UNK-551 : 1 : 0
+RU-UNK-552 : 1 : 0
+RU-UNK-553 : 1 : 0
+RU-UNK-554 : 1 : 0
+RU-UNK-555 : 1 : 0
+RU-UNK-556 : 1 : 0
+RU-UNK-557 : 1 : 0
+RU-UNK-558 : 1 : 0
+RU-UNK-559 : 1 : 0
+RU-UNK-560 : 1 : 0
+RU-UNK-561 : 1 : 0
+RU-UNK-562 : 1 : 0
+RU-UNK-563 : 1 : 0
+RU-UNK-564 : 1 : 0
+RU-UNK-565 : 1 : 0
+RU-UNK-566 : 1 : 0
+RU-UNK-567 : 1 : 0
+RU-UNK-568 : 1 : 0
+RU-UNK-569 : 1 : 0
+RU-UNK-570 : 1 : 0
+RU-UNK-571 : 1 : 0
+RU-UNK-572 : 1 : 0
+RU-UNK-573 : 1 : 0
+RU-UNK-574 : 1 : 0
+RU-UNK-575 : 1 : 0
+RU-UNK-576 : 1 : 0
+RU-UNK-577 : 1 : 0
+RU-UNK-578 : 1 : 0
+RU-UNK-579 : 1 : 0
+RU-UNK-580 : 1 : 0
+RU-UNK-581 : 1 : 0
+RU-UNK-582 : 1 : 0
+RU-UNK-583 : 1 : 0
+RU-UNK-584 : 1 : 0
+RU-UNK-585 : 1 : 0
+RU-UNK-586 : 1 : 0
+RU-UNK-587 : 1 : 0
+RU-UNK-588 : 1 : 0
+RU-UNK-589 : 1 : 0
+RU-UNK-590 : 1 : 0
+RU-UNK-591 : 1 : 0
+RU-UNK-592 : 1 : 0
+RU-UNK-593 : 1 : 0
+RU-UNK-594 : 1 : 0
+RU-UNK-595 : 1 : 0
+RU-UNK-596 : 1 : 0
+RU-UNK-597 : 1 : 0
+RU-UNK-598 : 1 : 0
+RU-UNK-599 : 1 : 0
+RU-UNK-600 : 1 : 0
+RU-UNK-601 : 1 : 0
+RU-UNK-602 : 1 : 0
+RU-UNK-603 : 1 : 0
+RU-UNK-604 : 1 : 0
+RU-UNK-605 : 1 : 0
+RU-UNK-606 : 1 : 0
+RU-UNK-607 : 1 : 0
+RU-UNK-608 : 1 : 0
+RU-UNK-609 : 1 : 0
+RU-UNK-610 : 1 : 0
+RU-UNK-611 : 1 : 0
+RU-UNK-612 : 1 : 0
+RU-UNK-613 : 1 : 0
+RU-UNK-614 : 1 : 0
+RU-UNK-615 : 1 : 0
+RU-UNK-616 : 1 : 0
+RU-UNK-617 : 1 : 0
+RU-UNK-618 : 1 : 0
+RU-UNK-619 : 1 : 0
+RU-UNK-620 : 1 : 0
+RU-UNK-621 : 1 : 0
+RU-UNK-622 : 1 : 0
+RU-UNK-623 : 1 : 0
+RU-UNK-624 : 1 : 0
+RU-UNK-625 : 1 : 0
+RU-UNK-626 : 1 : 0
+RU-UNK-627 : 1 : 0
+RU-UNK-628 : 1 : 0
+RU-UNK-629 : 1 : 0
+RU-UNK-630 : 1 : 0
+RU-UNK-631 : 1 : 0
+RU-UNK-632 : 1 : 0
+RU-UNK-633 : 1 : 0
+RU-UNK-634 : 1 : 0
+RU-UNK-635 : 1 : 0
+RU-UNK-636 : 1 : 0
+RU-UNK-637 : 1 : 0
+RU-UNK-638 : 1 : 0
+RU-UNK-639 : 1 : 0
+RU-UNK-640 : 1 : 0
+RU-UNK-641 : 1 : 0
+RU-UNK-642 : 1 : 0
+RU-UNK-643 : 1 : 0
+RU-UNK-644 : 1 : 0
+RU-UNK-645 : 1 : 0
+RU-UNK-646 : 1 : 0
+RU-UNK-647 : 1 : 0
+RU-UNK-648 : 1 : 0
+RU-UNK-649 : 1 : 0
+RU-UNK-650 : 1 : 0
+RU-UNK-651 : 1 : 0
+RU-UNK-652 : 1 : 0
+RU-UNK-653 : 1 : 0
+RU-UNK-654 : 1 : 0
+RU-UNK-655 : 1 : 0
+RU-UNK-656 : 1 : 0
+RU-UNK-657 : 1 : 0
+RU-UNK-658 : 1 : 0
+RU-UNK-659 : 1 : 0
+RU-UNK-660 : 1 : 0
+RU-UNK-661 : 1 : 0
+RU-UNK-662 : 1 : 0
+RU-UNK-663 : 1 : 0
+RU-UNK-664 : 1 : 0
+RU-UNK-665 : 1 : 0
+RU-UNK-666 : 1 : 0
+RU-UNK-667 : 1 : 0
+RU-UNK-668 : 1 : 0
+RU-UNK-669 : 1 : 0
+RU-UNK-670 : 1 : 0
+RU-UNK-671 : 1 : 0
+RU-UNK-672 : 1 : 0
+RU-UNK-673 : 1 : 0
+RU-UNK-674 : 1 : 0
+RU-UNK-675 : 1 : 0
+RU-UNK-676 : 1 : 0
+RU-UNK-677 : 1 : 0
+RU-UNK-678 : 1 : 0
+RU-UNK-679 : 1 : 0
+RU-UNK-680 : 1 : 0
+RU-UNK-681 : 1 : 0
+RU-UNK-682 : 1 : 0
+RU-UNK-683 : 1 : 0
+RU-UNK-684 : 1 : 0
+RU-UNK-685 : 1 : 0
+RU-UNK-686 : 1 : 0
+RU-UNK-687 : 1 : 0
+RU-UNK-688 : 1 : 0
+RU-UNK-689 : 1 : 0
+RU-UNK-690 : 1 : 0
+RU-UNK-691 : 1 : 0
+RU-UNK-692 : 1 : 0
+RU-UNK-693 : 1 : 0
+RU-UNK-694 : 1 : 0
+RU-UNK-695 : 1 : 0
+RU-UNK-696 : 1 : 0
+RU-UNK-697 : 1 : 0
+RU-UNK-698 : 1 : 0
+RU-UNK-699 : 1 : 0
+RU-UNK-700 : 1 : 0
+RU-UNK-701 : 1 : 0
+RU-UNK-702 : 1 : 0
+RU-UNK-703 : 1 : 0
+RU-UNK-704 : 1 : 0
+RU-UNK-705 : 1 : 0
+RU-UNK-706 : 1 : 0
+RU-UNK-707 : 1 : 0
+RU-UNK-708 : 1 : 0
+RU-UNK-709 : 1 : 0
+RU-UNK-710 : 1 : 0
+RU-UNK-711 : 1 : 0
+RU-UNK-712 : 1 : 0
+RU-UNK-713 : 1 : 0
+RU-UNK-714 : 1 : 0
+RU-UNK-715 : 1 : 0
+RU-UNK-716 : 1 : 0
+RU-UNK-717 : 1 : 0
+RU-UNK-718 : 1 : 0
+RU-UNK-719 : 1 : 0
+RU-UNK-720 : 1 : 0
+RU-UNK-721 : 1 : 0
+RU-UNK-722 : 1 : 0
+RU-UNK-723 : 1 : 0
+RU-UNK-724 : 1 : 0
+RU-UNK-725 : 1 : 0
+RU-UNK-726 : 1 : 0
+RU-UNK-727 : 1 : 0
+RU-UNK-728 : 1 : 0
+RU-UNK-729 : 1 : 0
+RU-UNK-730 : 1 : 0
+RU-UNK-731 : 1 : 0
+RU-UNK-732 : 1 : 0
+RU-UNK-733 : 1 : 0
+RU-UNK-734 : 1 : 0
+RU-UNK-735 : 1 : 0
+RU-UNK-736 : 1 : 0
+RU-UNK-737 : 1 : 0
+RU-UNK-738 : 1 : 0
+RU-UNK-739 : 1 : 0
+RU-UNK-740 : 1 : 0
+RU-UNK-741 : 1 : 0
+RU-UNK-742 : 1 : 0
+RU-UNK-743 : 1 : 0
+RU-UNK-744 : 1 : 0
+RU-UNK-745 : 1 : 0
+RU-UNK-746 : 1 : 0
+RU-UNK-747 : 1 : 0
+RU-UNK-748 : 1 : 0
+RU-UNK-749 : 1 : 0
+RU-UNK-750 : 1 : 0
+RU-UNK-751 : 1 : 0
+RU-UNK-752 : 1 : 0
+RU-UNK-753 : 1 : 0
+RU-UNK-754 : 1 : 0
+RU-UNK-755 : 1 : 0
+RU-UNK-756 : 1 : 0
+RU-UNK-757 : 1 : 0
+RU-UNK-758 : 1 : 0
+RU-UNK-759 : 1 : 0
+RU-UNK-760 : 1 : 0
+RU-UNK-761 : 1 : 0
+RU-UNK-762 : 1 : 0
+RU-UNK-763 : 1 : 0
+RU-UNK-764 : 1 : 0
+RU-UNK-765 : 1 : 0
+RU-UNK-766 : 1 : 0
+RU-UNK-767 : 1 : 0
+RU-UNK-768 : 1 : 0
+RU-UNK-769 : 1 : 0
+RU-UNK-770 : 1 : 0
+RU-UNK-771 : 1 : 0
+RU-UNK-772 : 1 : 0
+RU-UNK-773 : 1 : 0
+RU-UNK-774 : 1 : 0
+RU-UNK-775 : 1 : 0
+RU-UNK-776 : 1 : 0
+RU-UNK-777 : 1 : 0
+RU-UNK-778 : 1 : 0
+RU-UNK-779 : 1 : 0
+RU-UNK-780 : 1 : 0
+RU-UNK-781 : 1 : 0
+RU-UNK-782 : 1 : 0
+RU-UNK-783 : 1 : 0
+RU-UNK-784 : 1 : 0
+RU-UNK-785 : 1 : 0
+RU-UNK-786 : 1 : 0
+RU-UNK-787 : 1 : 0
+RU-UNK-788 : 1 : 0
+RU-UNK-789 : 1 : 0
+RU-UNK-790 : 1 : 0
+RU-UNK-791 : 1 : 0
+RU-UNK-792 : 1 : 0
+RU-UNK-793 : 1 : 0
+RU-UNK-794 : 1 : 0
+RU-UNK-795 : 1 : 0
+RU-UNK-796 : 1 : 0
+RU-UNK-797 : 1 : 0
+RU-UNK-798 : 1 : 0
+RU-UNK-799 : 1 : 0
+RU-UNK-800 : 1 : 0
+RU-UNK-801 : 1 : 0
+RU-UNK-802 : 1 : 0
+RU-UNK-803 : 1 : 0
+RU-UNK-804 : 1 : 0
+RU-UNK-805 : 1 : 0
+RU-UNK-806 : 1 : 0
+RU-UNK-807 : 1 : 0
+RU-UNK-808 : 1 : 0
+RU-UNK-809 : 1 : 0
+RU-UNK-810 : 1 : 0
+RU-UNK-811 : 1 : 0
+RU-UNK-812 : 1 : 0
+RU-UNK-813 : 1 : 0
+RU-UNK-814 : 1 : 0
+RU-UNK-815 : 1 : 0
+RU-UNK-816 : 1 : 0
+RU-UNK-817 : 1 : 0
+RU-UNK-818 : 1 : 0
+RU-UNK-819 : 1 : 0
+RU-UNK-820 : 1 : 0
+RU-UNK-821 : 1 : 0
+RU-UNK-822 : 1 : 0
+RU-UNK-823 : 1 : 0
+RU-UNK-824 : 1 : 0
+RU-UNK-825 : 1 : 0
+RU-UNK-826 : 1 : 0
+RU-UNK-827 : 1 : 0
+RU-UNK-828 : 1 : 0
+RU-UNK-829 : 1 : 0
+RU-UNK-830 : 1 : 0
+RU-UNK-831 : 1 : 0
+RU-UNK-832 : 1 : 0
+RU-UNK-833 : 1 : 0
+RU-UNK-834 : 1 : 0
+RU-UNK-835 : 1 : 0
+RU-UNK-836 : 1 : 0
+RU-UNK-837 : 1 : 0
+RU-UNK-838 : 1 : 0
+RU-UNK-839 : 1 : 0
+RU-UNK-840 : 1 : 0
+RU-UNK-841 : 1 : 0
+RU-UNK-842 : 1 : 0
+RU-UNK-843 : 1 : 0
+RU-UNK-844 : 1 : 0
+RU-UNK-845 : 1 : 0
+RU-UNK-846 : 1 : 0
+RU-UNK-847 : 1 : 0
+RU-UNK-848 : 1 : 0
+RU-UNK-849 : 1 : 0
+RU-UNK-850 : 1 : 0
+RU-UNK-851 : 1 : 0
+RU-UNK-852 : 1 : 0
+RU-UNK-853 : 1 : 0
+RU-UNK-854 : 1 : 0
+RU-UNK-855 : 1 : 0
+RU-UNK-856 : 1 : 0
+RU-UNK-857 : 1 : 0
+RU-UNK-858 : 1 : 0
+RU-UNK-859 : 1 : 0
+RU-UNK-860 : 1 : 0
+RU-UNK-861 : 1 : 0
+RU-UNK-862 : 1 : 0
+RU-UNK-863 : 1 : 0
+RU-UNK-864 : 1 : 0
+RU-UNK-865 : 1 : 0
+RU-UNK-866 : 1 : 0
+RU-UNK-867 : 1 : 0
+RU-UNK-868 : 1 : 0
+RU-UNK-869 : 1 : 0
+RU-UNK-870 : 1 : 0
+RU-UNK-871 : 1 : 0
+RU-UNK-872 : 1 : 0
+RU-UNK-873 : 1 : 0
+RU-UNK-874 : 1 : 0
+RU-UNK-875 : 1 : 0
+RU-UNK-876 : 1 : 0
+RU-UNK-877 : 1 : 0
+RU-UNK-878 : 1 : 0
+RU-UNK-879 : 1 : 0
+RU-UNK-880 : 1 : 0
+RU-UNK-881 : 1 : 0
+RU-UNK-882 : 1 : 0
+RU-UNK-883 : 1 : 0
+RU-UNK-884 : 1 : 0
+RU-UNK-885 : 1 : 0
+RU-UNK-886 : 1 : 0
+RU-UNK-887 : 1 : 0
+RU-UNK-888 : 1 : 0
+RU-UNK-889 : 1 : 0
+RU-UNK-890 : 1 : 0
+RU-UNK-891 : 1 : 0
+RU-UNK-892 : 1 : 0
+RU-UNK-893 : 1 : 0
+RU-UNK-894 : 1 : 0
+RU-UNK-895 : 1 : 0
+RU-UNK-896 : 1 : 0
+RU-UNK-897 : 1 : 0
+RU-UNK-898 : 1 : 0
+RU-UNK-899 : 1 : 0
+RU-UNK-900 : 1 : 0
+RU-UNK-901 : 1 : 0
+RU-UNK-902 : 1 : 0
+RU-UNK-903 : 1 : 0
+RU-UNK-904 : 1 : 0
+RU-UNK-905 : 1 : 0
+RU-UNK-906 : 1 : 0
+RU-UNK-907 : 1 : 0
+RU-UNK-908 : 1 : 0
+RU-UNK-909 : 1 : 0
+RU-UNK-910 : 1 : 0
+RU-UNK-911 : 1 : 0
+RU-UNK-912 : 1 : 0
+RU-UNK-913 : 1 : 0
+RU-UNK-914 : 1 : 0
+RU-UNK-915 : 1 : 0
+RU-UNK-916 : 1 : 0
+RU-UNK-917 : 1 : 0
+RU-UNK-918 : 1 : 0
+RU-UNK-919 : 1 : 0
+RU-UNK-920 : 1 : 0
+RU-UNK-921 : 1 : 0
+RU-UNK-922 : 1 : 0
+RU-UNK-923 : 1 : 0
+RU-UNK-924 : 1 : 0
+RU-UNK-925 : 1 : 0
+RU-UNK-926 : 1 : 0
+RU-UNK-927 : 1 : 0
+RU-UNK-928 : 1 : 0
+RU-UNK-929 : 1 : 0
+RU-UNK-930 : 1 : 0
+RU-UNK-931 : 1 : 0
+RU-UNK-932 : 1 : 0
+RU-UNK-933 : 1 : 0
+RU-UNK-934 : 1 : 0
+RU-UNK-935 : 1 : 0
+RU-UNK-936 : 1 : 0
+RU-UNK-937 : 1 : 0
+RU-UNK-938 : 1 : 0
+RU-UNK-939 : 1 : 0
+RU-UNK-940 : 1 : 0
+RU-UNK-941 : 1 : 0
+RU-UNK-942 : 1 : 0
+RU-UNK-943 : 1 : 0
+RU-UNK-944 : 1 : 0
+RU-UNK-945 : 1 : 0
+RU-UNK-946 : 1 : 0
+RU-UNK-947 : 1 : 0
+RU-UNK-948 : 1 : 0
+RU-UNK-949 : 1 : 0
+RU-UNK-950 : 1 : 0
+RU-UNK-951 : 1 : 0
+RU-UNK-952 : 1 : 0
+RU-UNK-953 : 1 : 0
+RU-UNK-954 : 1 : 0
+RU-UNK-955 : 1 : 0
+RU-UNK-956 : 1 : 0
+RU-UNK-957 : 1 : 0
+RU-UNK-958 : 1 : 0
+RU-UNK-959 : 1 : 0
+RU-UNK-960 : 1 : 0
+RU-UNK-961 : 1 : 0
+RU-UNK-962 : 1 : 0
+RU-UNK-963 : 1 : 0
+RU-UNK-964 : 1 : 0
+RU-UNK-965 : 1 : 0
+RU-UNK-966 : 1 : 0
+RU-UNK-967 : 1 : 0
+RU-UNK-968 : 1 : 0
+RU-UNK-969 : 1 : 0
+RU-UNK-970 : 1 : 0
+RU-UNK-971 : 1 : 0
+RU-UNK-972 : 1 : 0
+RU-UNK-973 : 1 : 0
+RU-UNK-974 : 1 : 0
+RU-UNK-975 : 1 : 0
+RU-UNK-976 : 1 : 0
+RU-UNK-977 : 1 : 0
+RU-UNK-978 : 1 : 0
+RU-UNK-979 : 1 : 0
+RU-UNK-980 : 1 : 0
+RU-UNK-981 : 1 : 0
+RU-UNK-982 : 1 : 0
+RU-UNK-983 : 1 : 0
+RU-UNK-984 : 1 : 0
+RU-UNK-985 : 1 : 0
+RU-UNK-986 : 1 : 0
+RU-UNK-987 : 1 : 0
+RU-UNK-988 : 1 : 0
+RU-UNK-989 : 1 : 0
+RU-UNK-990 : 1 : 0
+RU-UNK-991 : 1 : 0
+RU-UNK-992 : 1 : 0
+RU-UNK-993 : 1 : 0
+RU-UNK-994 : 1 : 0
+RU-UNK-995 : 1 : 0
+RU-UNK-996 : 1 : 0
+RU-UNK-997 : 1 : 0
+RU-UNK-998 : 1 : 0
+RU-UNK-999 : 1 : 0
+RU-UNK-1000 : 1 : 0
+RU-UNK-1001 : 1 : 0
+RU-UNK-1002 : 1 : 0
+RU-UNK-1003 : 1 : 0
+RU-UNK-1004 : 1 : 0
+RU-UNK-1005 : 1 : 0
+RU-UNK-1006 : 1 : 0
+RU-UNK-1007 : 1 : 0
+RU-UNK-1008 : 1 : 0
+RU-UNK-1009 : 1 : 0
+RU-UNK-1010 : 1 : 0
+RU-UNK-1011 : 1 : 0
+RU-UNK-1012 : 1 : 0
+RU-UNK-1013 : 1 : 0
+RU-UNK-1014 : 1 : 0
+RU-UNK-1015 : 1 : 0
+RU-UNK-1016 : 1 : 0
+RU-UNK-1017 : 1 : 0
+RU-UNK-1018 : 1 : 0
+RU-UNK-1019 : 1 : 0
+RU-UNK-1020 : 1 : 0
+RU-UNK-1021 : 1 : 0
+RU-UNK-1022 : 1 : 0
+RU-UNK-1023 : 1 : 0
+RU-UNK-1024 : 1 : 0
+RU-UNK-1025 : 1 : 0
+RU-UNK-1026 : 1 : 0
+RU-UNK-1027 : 1 : 0
+RU-UNK-1028 : 1 : 0
+RU-UNK-1029 : 1 : 0
+RU-UNK-1030 : 1 : 0
+RU-UNK-1031 : 1 : 0
+RU-UNK-1032 : 1 : 0
+RU-UNK-1033 : 1 : 0
+RU-UNK-1034 : 1 : 0
+RU-UNK-1035 : 1 : 0
+RU-UNK-1036 : 1 : 0
+RU-UNK-1037 : 1 : 0
+RU-UNK-1038 : 1 : 0
+RU-UNK-1039 : 1 : 0
+RU-UNK-1040 : 1 : 0
+RU-UNK-1041 : 1 : 0
+RU-UNK-1042 : 1 : 0
+RU-UNK-1043 : 1 : 0
+RU-UNK-1044 : 1 : 0
+RU-UNK-1045 : 1 : 0
+RU-UNK-1046 : 1 : 0
+RU-UNK-1047 : 1 : 0
+RU-UNK-1048 : 1 : 0
+RU-UNK-1049 : 1 : 0
+RU-UNK-1050 : 1 : 0
+RU-UNK-1051 : 1 : 0
+RU-UNK-1052 : 1 : 0
+RU-UNK-1053 : 1 : 0
+RU-UNK-1054 : 1 : 0
+RU-UNK-1055 : 1 : 0
+RU-UNK-1056 : 1 : 0
+RU-UNK-1057 : 1 : 0
+RU-UNK-1058 : 1 : 0
+RU-UNK-1059 : 1 : 0
+RU-UNK-1060 : 1 : 0
+RU-UNK-1061 : 1 : 0
+RU-UNK-1062 : 1 : 0
+RU-UNK-1063 : 1 : 0
+RU-UNK-1064 : 1 : 0
+RU-UNK-1065 : 1 : 0
+RU-UNK-1066 : 1 : 0
+RU-UNK-1067 : 1 : 0
+RU-UNK-1068 : 1 : 0
+RU-UNK-1069 : 1 : 0
+RU-UNK-1070 : 1 : 0
+RU-UNK-1071 : 1 : 0
+RU-UNK-1072 : 1 : 0
+RU-UNK-1073 : 1 : 0
+RU-UNK-1074 : 1 : 0
+RU-UNK-1075 : 1 : 0
+RU-UNK-1076 : 1 : 0
+RU-UNK-1077 : 1 : 0
+RU-UNK-1078 : 1 : 0
+RU-UNK-1079 : 1 : 0
+RU-UNK-1080 : 1 : 0
+RU-UNK-1081 : 1 : 0
+RU-UNK-1082 : 1 : 0
+RU-UNK-1083 : 1 : 0
+RU-UNK-1084 : 1 : 0
+RU-UNK-1085 : 1 : 0
+RU-UNK-1086 : 1 : 0
+RU-UNK-1087 : 1 : 0
+RU-UNK-1088 : 1 : 0
+RU-UNK-1089 : 1 : 0
+RU-UNK-1090 : 1 : 0
+RU-UNK-1091 : 1 : 0
+RU-UNK-1092 : 1 : 0
+RU-UNK-1093 : 1 : 0
+RU-UNK-1094 : 1 : 0
+RU-UNK-1095 : 1 : 0
+RU-UNK-1096 : 1 : 0
+RU-UNK-1097 : 1 : 0
+RU-UNK-1098 : 1 : 0
+RU-UNK-1099 : 1 : 0
+RU-UNK-1100 : 1 : 0
+RU-UNK-1101 : 1 : 0
+RU-UNK-1102 : 1 : 0
+RU-UNK-1103 : 1 : 0
+RU-UNK-1104 : 1 : 0
+RU-UNK-1105 : 1 : 0
+RU-UNK-1106 : 1 : 0
+RU-UNK-1107 : 1 : 0
+RU-UNK-1108 : 1 : 0
+RU-UNK-1109 : 1 : 0
+RU-UNK-1110 : 1 : 0
+RU-UNK-1111 : 1 : 0
+RU-UNK-1112 : 1 : 0
+RU-UNK-1113 : 1 : 0
+RU-UNK-1114 : 1 : 0
+RU-UNK-1115 : 1 : 0
+RU-UNK-1116 : 1 : 0
+RU-UNK-1117 : 1 : 0
+RU-UNK-1118 : 1 : 0
+RU-UNK-1119 : 1 : 0
+RU-UNK-1120 : 1 : 0
+RU-UNK-1121 : 1 : 0
+RU-UNK-1122 : 1 : 0
+RU-UNK-1123 : 1 : 0
+RU-UNK-1124 : 1 : 0
+RU-UNK-1125 : 1 : 0
+RU-UNK-1126 : 1 : 0
+RU-UNK-1127 : 1 : 0
+RU-UNK-1128 : 1 : 0
+RU-UNK-1129 : 1 : 0
+RU-UNK-1130 : 1 : 0
+RU-UNK-1131 : 1 : 0
+RU-UNK-1132 : 1 : 0
+RU-UNK-1133 : 1 : 0
+RU-UNK-1134 : 1 : 0
+RU-UNK-1135 : 1 : 0
+RU-UNK-1136 : 1 : 0
+RU-UNK-1137 : 1 : 0
+RU-UNK-1138 : 1 : 0
+RU-UNK-1139 : 1 : 0
+RU-UNK-1140 : 1 : 0
+RU-UNK-1141 : 1 : 0
+RU-UNK-1142 : 1 : 0
+RU-UNK-1143 : 1 : 0
+RU-UNK-1144 : 1 : 0
+RU-UNK-1145 : 1 : 0
+RU-UNK-1146 : 1 : 0
+RU-UNK-1147 : 1 : 0
+RU-UNK-1148 : 1 : 0
+RU-UNK-1149 : 1 : 0
+RU-UNK-1150 : 1 : 0
+RU-UNK-1151 : 1 : 0
+RU-UNK-1152 : 1 : 0
+RU-UNK-1153 : 1 : 0
+RU-UNK-1154 : 1 : 0
+RU-UNK-1155 : 1 : 0
+RU-UNK-1156 : 1 : 0
+RU-UNK-1157 : 1 : 0
+RU-UNK-1158 : 1 : 0
+RU-UNK-1159 : 1 : 0
+RU-UNK-1160 : 1 : 0
+RU-UNK-1161 : 1 : 0
+RU-UNK-1162 : 1 : 0
+RU-UNK-1163 : 1 : 0
+RU-UNK-1164 : 1 : 0
+RU-UNK-1165 : 1 : 0
+RU-UNK-1166 : 1 : 0
+RU-UNK-1167 : 1 : 0
+RU-UNK-1168 : 1 : 0
+RU-UNK-1169 : 1 : 0
+RU-UNK-1170 : 1 : 0
+RU-UNK-1171 : 1 : 0
+RU-UNK-1172 : 1 : 0
+RU-UNK-1173 : 1 : 0
+RU-UNK-1174 : 1 : 0
+RU-UNK-1175 : 1 : 0
+RU-UNK-1176 : 1 : 0
+RU-UNK-1177 : 1 : 0
+RU-UNK-1178 : 1 : 0
+RU-UNK-1179 : 1 : 0
+RU-UNK-1180 : 1 : 0
+RU-UNK-1181 : 1 : 0
+RU-UNK-1182 : 1 : 0
+RU-UNK-1183 : 1 : 0
+RU-UNK-1184 : 1 : 0
+RU-UNK-1185 : 1 : 0
+RU-UNK-1186 : 1 : 0
+RU-UNK-1187 : 1 : 0
+RU-UNK-1188 : 1 : 0
+RU-UNK-1189 : 1 : 0
+RU-UNK-1190 : 1 : 0
+RU-UNK-1191 : 1 : 0
+RU-UNK-1192 : 1 : 0
+RU-UNK-1193 : 1 : 0
+RU-UNK-1194 : 1 : 0
+RU-UNK-1195 : 1 : 0
+RU-UNK-1196 : 1 : 0
+RU-UNK-1197 : 1 : 0
+RU-UNK-1198 : 1 : 0
+RU-UNK-1199 : 1 : 0
+RU-UNK-1200 : 1 : 0
+RU-UNK-1201 : 1 : 0
+RU-UNK-1202 : 1 : 0
+RU-UNK-1203 : 1 : 0
+RU-UNK-1204 : 1 : 0
+RU-UNK-1205 : 1 : 0
+RU-UNK-1206 : 1 : 0
+RU-UNK-1207 : 1 : 0
+RU-UNK-1208 : 1 : 0
+RU-UNK-1209 : 1 : 0
+RU-UNK-1210 : 1 : 0
+RU-UNK-1211 : 1 : 0
+RU-UNK-1212 : 1 : 0
+RU-UNK-1213 : 1 : 0
+RU-UNK-1214 : 1 : 0
+RU-UNK-1215 : 1 : 0
+RU-UNK-1216 : 1 : 0
+RU-UNK-1217 : 1 : 0
+RU-UNK-1218 : 1 : 0
+RU-UNK-1219 : 1 : 0
+RU-UNK-1220 : 1 : 0
+RU-UNK-1221 : 1 : 0
+RU-UNK-1222 : 1 : 0
+RU-UNK-1223 : 1 : 0
+RU-UNK-1224 : 1 : 0
+RU-UNK-1225 : 1 : 0
+RU-UNK-1226 : 1 : 0
+RU-UNK-1227 : 1 : 0
+RU-UNK-1228 : 1 : 0
+RU-UNK-1229 : 1 : 0
+RU-UNK-1230 : 1 : 0
+RU-UNK-1231 : 1 : 0
+RU-UNK-1232 : 1 : 0
+RU-UNK-1233 : 1 : 0
+RU-UNK-1234 : 1 : 0
+RU-UNK-1235 : 1 : 0
+RU-UNK-1236 : 1 : 0
+RU-UNK-1237 : 1 : 0
+RU-UNK-1238 : 1 : 0
+RU-UNK-1239 : 1 : 0
+RU-UNK-1240 : 1 : 0
+RU-UNK-1241 : 1 : 0
+RU-UNK-1242 : 1 : 0
+RU-UNK-1243 : 1 : 0
+RU-UNK-1244 : 1 : 0
+RU-UNK-1245 : 1 : 0
+RU-UNK-1246 : 1 : 0
+RU-UNK-1247 : 1 : 0
+RU-UNK-1248 : 1 : 0
+RU-UNK-1249 : 1 : 0
+RU-UNK-1250 : 1 : 0
+RU-UNK-1251 : 1 : 0
+RU-UNK-1252 : 1 : 0
+RU-UNK-1253 : 1 : 0
+RU-UNK-1254 : 1 : 0
+RU-UNK-1255 : 1 : 0
+RU-UNK-1256 : 1 : 0
+RU-UNK-1257 : 1 : 0
+RU-UNK-1258 : 1 : 0
+RU-UNK-1259 : 1 : 0
+RU-UNK-1260 : 1 : 0
+RU-UNK-1261 : 1 : 0
+RU-UNK-1262 : 1 : 0
+RU-UNK-1263 : 1 : 0
+RU-UNK-1264 : 1 : 0
+RU-UNK-1265 : 1 : 0
+RU-UNK-1266 : 1 : 0
+RU-UNK-1267 : 1 : 0
+RU-UNK-1268 : 1 : 0
+RU-UNK-1269 : 1 : 0
+RU-UNK-1270 : 1 : 0
+RU-UNK-1271 : 1 : 0
+RU-UNK-1272 : 1 : 0
+RU-UNK-1273 : 1 : 0
+RU-UNK-1274 : 1 : 0
+RU-UNK-1275 : 1 : 0
+RU-UNK-1276 : 1 : 0
+RU-UNK-1277 : 1 : 0
+RU-UNK-1278 : 1 : 0
+RU-UNK-1279 : 1 : 0
+RU-UNK-1280 : 1 : 0
+RU-UNK-1281 : 1 : 0
+RU-UNK-1282 : 1 : 0
+RU-UNK-1283 : 1 : 0
+RU-UNK-1284 : 1 : 0
+RU-UNK-1285 : 1 : 0
+RU-UNK-1286 : 1 : 0
+RU-UNK-1287 : 1 : 0
+RU-UNK-1288 : 1 : 0
+RU-UNK-1289 : 1 : 0
+RU-UNK-1290 : 1 : 0
+RU-UNK-1291 : 1 : 0
+RU-UNK-1292 : 1 : 0
+RU-UNK-1293 : 1 : 0
+RU-UNK-1294 : 1 : 0
+RU-UNK-1295 : 1 : 0
+RU-UNK-1296 : 1 : 0
+RU-UNK-1297 : 1 : 0
+RU-UNK-1298 : 1 : 0
+RU-UNK-1299 : 1 : 0
+RU-UNK-1300 : 1 : 0
+RU-UNK-1301 : 1 : 0
+RU-UNK-1302 : 1 : 0
+RU-UNK-1303 : 1 : 0
+RU-UNK-1304 : 1 : 0
+RU-UNK-1305 : 1 : 0
+RU-UNK-1306 : 1 : 0
+RU-UNK-1307 : 1 : 0
+RU-UNK-1308 : 1 : 0
+RU-UNK-1309 : 1 : 0
+RU-UNK-1310 : 1 : 0
+RU-UNK-1311 : 1 : 0
+RU-UNK-1312 : 1 : 0
+RU-UNK-1313 : 1 : 0
+RU-UNK-1314 : 1 : 0
+RU-UNK-1315 : 1 : 0
+RU-UNK-1316 : 1 : 0
+RU-UNK-1317 : 1 : 0
+RU-UNK-1318 : 1 : 0
+RU-UNK-1319 : 1 : 0
+RU-UNK-1320 : 1 : 0
+RU-UNK-1321 : 1 : 0
+RU-UNK-1322 : 1 : 0
+RU-UNK-1323 : 1 : 0
+RU-UNK-1324 : 1 : 0
+RU-UNK-1325 : 1 : 0
+RU-UNK-1326 : 1 : 0
+RU-UNK-1327 : 1 : 0
+RU-UNK-1328 : 1 : 0
+RU-UNK-1329 : 1 : 0
+RU-UNK-1330 : 1 : 0
+RU-UNK-1331 : 1 : 0
+RU-UNK-1332 : 1 : 0
+RU-UNK-1333 : 1 : 0
+RU-UNK-1334 : 1 : 0
+RU-UNK-1335 : 1 : 0
+RU-UNK-1336 : 1 : 0
+RU-UNK-1337 : 1 : 0
+RU-UNK-1338 : 1 : 0
+RU-UNK-1339 : 1 : 0
+RU-UNK-1340 : 1 : 0
+RU-UNK-1341 : 1 : 0
+RU-UNK-1342 : 1 : 0
+RU-UNK-1343 : 1 : 0
+RU-UNK-1344 : 1 : 0
+RU-UNK-1345 : 1 : 0
+RU-UNK-1346 : 1 : 0
+RU-UNK-1347 : 1 : 0
+RU-UNK-1348 : 1 : 0
+RU-UNK-1349 : 1 : 0
+RU-UNK-1350 : 1 : 0
+RU-UNK-1351 : 1 : 0
+RU-UNK-1352 : 1 : 0
+RU-UNK-1353 : 1 : 0
+RU-UNK-1354 : 1 : 0
+RU-UNK-1355 : 1 : 0
+RU-UNK-1356 : 1 : 0
+RU-UNK-1357 : 1 : 0
+RU-UNK-1358 : 1 : 0
+RU-UNK-1359 : 1 : 0
+RU-UNK-1360 : 1 : 0
+RU-UNK-1361 : 1 : 0
+RU-UNK-1362 : 1 : 0
+RU-UNK-1363 : 1 : 0
+RU-UNK-1364 : 1 : 0
+RU-UNK-1365 : 1 : 0
+RU-UNK-1366 : 1 : 0
+RU-UNK-1367 : 1 : 0
+RU-UNK-1368 : 1 : 0
+RU-UNK-1369 : 1 : 0
+RU-UNK-1370 : 1 : 0
+RU-UNK-1371 : 1 : 0
+RU-UNK-1372 : 1 : 0
+RU-UNK-1373 : 1 : 0
+RU-UNK-1374 : 1 : 0
+RU-UNK-1375 : 1 : 0
+RU-UNK-1376 : 1 : 0
+RU-UNK-1377 : 1 : 0
+RU-UNK-1378 : 1 : 0
+RU-UNK-1379 : 1 : 0
+RU-UNK-1380 : 1 : 0
+RU-UNK-1381 : 1 : 0
+RU-UNK-1382 : 1 : 0
+RU-UNK-1383 : 1 : 0
+RU-UNK-1384 : 1 : 0
+RU-UNK-1385 : 1 : 0
+RU-UNK-1386 : 1 : 0
+RU-UNK-1387 : 1 : 0
+RU-UNK-1388 : 1 : 0
+RU-UNK-1389 : 1 : 0
+RU-UNK-1390 : 1 : 0
+RU-UNK-1391 : 1 : 0
+RU-UNK-1392 : 1 : 0
+RU-UNK-1393 : 1 : 0
+RU-UNK-1394 : 1 : 0
+RU-UNK-1395 : 1 : 0
+RU-UNK-1396 : 1 : 0
+RU-UNK-1397 : 1 : 0
+RU-UNK-1398 : 1 : 0
+RU-UNK-1399 : 1 : 0
+RU-UNK-1400 : 1 : 0
+RU-UNK-1401 : 1 : 0
+RU-UNK-1402 : 1 : 0
+RU-UNK-1403 : 1 : 0
+RU-UNK-1404 : 1 : 0
+RU-UNK-1405 : 1 : 0
+RU-UNK-1406 : 1 : 0
+RU-UNK-1407 : 1 : 0
+RU-UNK-1408 : 1 : 0
+RU-UNK-1409 : 1 : 0
+RU-UNK-1410 : 1 : 0
+RU-UNK-1411 : 1 : 0
+RU-UNK-1412 : 1 : 0
+RU-UNK-1413 : 1 : 0
+RU-UNK-1414 : 1 : 0
+RU-UNK-1415 : 1 : 0
+RU-UNK-1416 : 1 : 0
+RU-UNK-1417 : 1 : 0
+RU-UNK-1418 : 1 : 0
+RU-UNK-1419 : 1 : 0
+RU-UNK-1420 : 1 : 0
+RU-UNK-1421 : 1 : 0
+RU-UNK-1422 : 1 : 0
+RU-UNK-1423 : 1 : 0
+RU-UNK-1424 : 1 : 0
+RU-UNK-1425 : 1 : 0
+RU-UNK-1426 : 1 : 0
+RU-UNK-1427 : 1 : 0
+RU-UNK-1428 : 1 : 0
+RU-UNK-1429 : 1 : 0
+RU-UNK-1430 : 1 : 0
+RU-UNK-1431 : 1 : 0
+RU-UNK-1432 : 1 : 0
+RU-UNK-1433 : 1 : 0
+RU-UNK-1434 : 1 : 0
+RU-UNK-1435 : 1 : 0
+RU-UNK-1436 : 1 : 0
+RU-UNK-1437 : 1 : 0
+RU-UNK-1438 : 1 : 0
+RU-UNK-1439 : 1 : 0
+RU-UNK-1440 : 1 : 0
+RU-UNK-1441 : 1 : 0
+RU-UNK-1442 : 1 : 0
+RU-UNK-1443 : 1 : 0
+RU-UNK-1444 : 1 : 0
+RU-UNK-1445 : 1 : 0
+RU-UNK-1446 : 1 : 0
+RU-UNK-1447 : 1 : 0
+RU-UNK-1448 : 1 : 0
+RU-UNK-1449 : 1 : 0
+RU-UNK-1450 : 1 : 0
+RU-UNK-1451 : 1 : 0
+RU-UNK-1452 : 1 : 0
+RU-UNK-1453 : 1 : 0
+RU-UNK-1454 : 1 : 0
+RU-UNK-1455 : 1 : 0
+RU-UNK-1456 : 1 : 0
+RU-UNK-1457 : 1 : 0
+RU-UNK-1458 : 1 : 0
+RU-UNK-1459 : 1 : 0
+RU-UNK-1460 : 1 : 0
+RU-UNK-1461 : 1 : 0
+RU-UNK-1462 : 1 : 0
+RU-UNK-1463 : 1 : 0
+RU-UNK-1464 : 1 : 0
+RU-UNK-1465 : 1 : 0
+RU-UNK-1466 : 1 : 0
+RU-UNK-1467 : 1 : 0
+RU-UNK-1468 : 1 : 0
+RU-UNK-1469 : 1 : 0
+RU-UNK-1470 : 1 : 0
+RU-UNK-1471 : 1 : 0
+RU-UNK-1472 : 1 : 0
+RU-UNK-1473 : 1 : 0
+RU-UNK-1474 : 1 : 0
+RU-UNK-1475 : 1 : 0
+RU-UNK-1476 : 1 : 0
+RU-UNK-1477 : 1 : 0
+RU-UNK-1478 : 1 : 0
+RU-UNK-1479 : 1 : 0
+RU-UNK-1480 : 1 : 0
+RU-UNK-1481 : 1 : 0
+RU-UNK-1482 : 1 : 0
+RU-UNK-1483 : 1 : 0
+RU-UNK-1484 : 1 : 0
+RU-UNK-1485 : 1 : 0
+RU-UNK-1486 : 1 : 0
+RU-UNK-1487 : 1 : 0
+RU-UNK-1488 : 1 : 0
+RU-UNK-1489 : 1 : 0
+RU-UNK-1490 : 1 : 0
+RU-UNK-1491 : 1 : 0
+RU-UNK-1492 : 1 : 0
+RU-UNK-1493 : 1 : 0
+RU-UNK-1494 : 1 : 0
+RU-UNK-1495 : 1 : 0
+RU-UNK-1496 : 1 : 0
+RU-UNK-1497 : 1 : 0
+RU-UNK-1498 : 1 : 0
+RU-UNK-1499 : 1 : 0
+RU-UNK-1500 : 1 : 0
+RU-UNK-1501 : 1 : 0
+RU-UNK-1502 : 1 : 0
+RU-UNK-1503 : 1 : 0
+RU-UNK-1504 : 1 : 0
+RU-UNK-1505 : 1 : 0
+RU-UNK-1506 : 1 : 0
+RU-UNK-1507 : 1 : 0
+RU-UNK-1508 : 1 : 0
+RU-UNK-1509 : 1 : 0
+RU-UNK-1510 : 1 : 0
+RU-UNK-1511 : 1 : 0
+RU-UNK-1512 : 1 : 0
+RU-UNK-1513 : 1 : 0
+RU-UNK-1514 : 1 : 0
+RU-UNK-1515 : 1 : 0
+RU-UNK-1516 : 1 : 0
+RU-UNK-1517 : 1 : 0
+RU-UNK-1518 : 1 : 0
+RU-UNK-1519 : 1 : 0
+RU-UNK-1520 : 1 : 0
+RU-UNK-1521 : 1 : 0
+RU-UNK-1522 : 1 : 0
+RU-UNK-1523 : 1 : 0
+RU-UNK-1524 : 1 : 0
+RU-UNK-1525 : 1 : 0
+RU-UNK-1526 : 1 : 0
+RU-UNK-1527 : 1 : 0
+RU-UNK-1528 : 1 : 0
+RU-UNK-1529 : 1 : 0
+RU-UNK-1530 : 1 : 0
+RU-UNK-1531 : 1 : 0
+RU-UNK-1532 : 1 : 0
+RU-UNK-1533 : 1 : 0
+RU-UNK-1534 : 1 : 0
+RU-UNK-1535 : 1 : 0
+RU-UNK-1536 : 1 : 0
+RU-UNK-1537 : 1 : 0
+RU-UNK-1538 : 1 : 0
+RU-UNK-1539 : 1 : 0
+RU-UNK-1540 : 1 : 0
+RU-UNK-1541 : 1 : 0
+RU-UNK-1542 : 1 : 0
+RU-UNK-1543 : 1 : 0
+RU-UNK-1544 : 1 : 0
+RU-UNK-1545 : 1 : 0
+RU-UNK-1546 : 1 : 0
+RU-UNK-1547 : 1 : 0
+RU-UNK-1548 : 1 : 0
+RU-UNK-1549 : 1 : 0
+RU-UNK-1550 : 1 : 0
+RU-UNK-1551 : 1 : 0
+RU-UNK-1552 : 1 : 0
+RU-UNK-1553 : 1 : 0
+RU-UNK-1554 : 1 : 0
+RU-UNK-1555 : 1 : 0
+RU-UNK-1556 : 1 : 0
+RU-UNK-1557 : 1 : 0
+RU-UNK-1558 : 1 : 0
+RU-UNK-1559 : 1 : 0
+RU-UNK-1560 : 1 : 0
+RU-UNK-1561 : 1 : 0
+RU-UNK-1562 : 1 : 0
+RU-UNK-1563 : 1 : 0
+RU-UNK-1564 : 1 : 0
+RU-UNK-1565 : 1 : 0
+RU-UNK-1566 : 1 : 0
+RU-UNK-1567 : 1 : 0
+RU-UNK-1568 : 1 : 0
+RU-UNK-1569 : 1 : 0
+RU-UNK-1570 : 1 : 0
+RU-UNK-1571 : 1 : 0
+RU-UNK-1572 : 1 : 0
+RU-UNK-1573 : 1 : 0
+RU-UNK-1574 : 1 : 0
+RU-UNK-1575 : 1 : 0
+RU-UNK-1576 : 1 : 0
+RU-UNK-1577 : 1 : 0
+RU-UNK-1578 : 1 : 0
+RU-UNK-1579 : 1 : 0
+RU-UNK-1580 : 1 : 0
+RU-UNK-1581 : 1 : 0
+RU-UNK-1582 : 1 : 0
+RU-UNK-1583 : 1 : 0
+RU-UNK-1584 : 1 : 0
+RU-UNK-1585 : 1 : 0
+RU-UNK-1586 : 1 : 0
+RU-UNK-1587 : 1 : 0
+RU-UNK-1588 : 1 : 0
+RU-UNK-1589 : 1 : 0
+RU-UNK-1590 : 1 : 0
+RU-UNK-1591 : 1 : 0
+RU-UNK-1592 : 1 : 0
+RU-UNK-1593 : 1 : 0
+RU-UNK-1594 : 1 : 0
+RU-UNK-1595 : 1 : 0
+RU-UNK-1596 : 1 : 0
+RU-UNK-1597 : 1 : 0
+RU-UNK-1598 : 1 : 0
+RU-UNK-1599 : 1 : 0
+RU-UNK-1600 : 1 : 0
+RU-UNK-1601 : 1 : 0
+RU-UNK-1602 : 1 : 0
+RU-UNK-1603 : 1 : 0
+RU-UNK-1604 : 1 : 0
+RU-UNK-1605 : 1 : 0
+RU-UNK-1606 : 1 : 0
+RU-UNK-1607 : 1 : 0
+RU-UNK-1608 : 1 : 0
+RU-UNK-1609 : 1 : 0
+RU-UNK-1610 : 1 : 0
+RU-UNK-1611 : 1 : 0
+RU-UNK-1612 : 1 : 0
+RU-UNK-1613 : 1 : 0
+RU-UNK-1614 : 1 : 0
+RU-UNK-1615 : 1 : 0
+RU-UNK-1616 : 1 : 0
+RU-UNK-1617 : 1 : 0
+RU-UNK-1618 : 1 : 0
+RU-UNK-1619 : 1 : 0
+RU-UNK-1620 : 1 : 0
+RU-UNK-1621 : 1 : 0
+RU-UNK-1622 : 1 : 0
+RU-UNK-1623 : 1 : 0
+RU-UNK-1624 : 1 : 0
+RU-UNK-1625 : 1 : 0
+RU-UNK-1626 : 1 : 0
+RU-UNK-1627 : 1 : 0
+RU-UNK-1628 : 1 : 0
+RU-UNK-1629 : 1 : 0
+RU-UNK-1630 : 1 : 0
+RU-UNK-1631 : 1 : 0
+RU-UNK-1632 : 1 : 0
+RU-UNK-1633 : 1 : 0
+RU-UNK-1634 : 1 : 0
+RU-UNK-1635 : 1 : 0
+RU-UNK-1636 : 1 : 0
+RU-UNK-1637 : 1 : 0
+RU-UNK-1638 : 1 : 0
+RU-UNK-1639 : 1 : 0
+RU-UNK-1640 : 1 : 0
+RU-UNK-1641 : 1 : 0
+RU-UNK-1642 : 1 : 0
+RU-UNK-1643 : 1 : 0
+RU-UNK-1644 : 1 : 0
+RU-UNK-1645 : 1 : 0
+RU-UNK-1646 : 1 : 0
+RU-UNK-1647 : 1 : 0
+RU-UNK-1648 : 1 : 0
+RU-UNK-1649 : 1 : 0
+RU-UNK-1650 : 1 : 0
+RU-UNK-1651 : 1 : 0
+RU-UNK-1652 : 1 : 0
+RU-UNK-1653 : 1 : 0
+RU-UNK-1654 : 1 : 0
+RU-UNK-1655 : 1 : 0
+RU-UNK-1656 : 1 : 0
+RU-UNK-1657 : 1 : 0
+RU-UNK-1658 : 1 : 0
+RU-UNK-1659 : 1 : 0
+RU-UNK-1660 : 1 : 0
+RU-UNK-1661 : 1 : 0
+RU-UNK-1662 : 1 : 0
+RU-UNK-1663 : 1 : 0
+RU-UNK-1664 : 1 : 0
+RU-UNK-1665 : 1 : 0
+RU-UNK-1666 : 1 : 0
+RU-UNK-1667 : 1 : 0
+RU-UNK-1668 : 1 : 0
+RU-UNK-1669 : 1 : 0
+RU-UNK-1670 : 1 : 0
+RU-UNK-1671 : 1 : 0
+RU-UNK-1672 : 1 : 0
+RU-UNK-1673 : 1 : 0
+RU-UNK-1674 : 1 : 0
+RU-UNK-1675 : 1 : 0
+RU-UNK-1676 : 1 : 0
+RU-UNK-1677 : 1 : 0
+RU-UNK-1678 : 1 : 0
+RU-UNK-1679 : 1 : 0
+RU-UNK-1680 : 1 : 0
+RU-UNK-1681 : 1 : 0
+RU-UNK-1682 : 1 : 0
+RU-UNK-1683 : 1 : 0
+RU-UNK-1684 : 1 : 0
+RU-UNK-1685 : 1 : 0
+RU-UNK-1686 : 1 : 0
+RU-UNK-1687 : 1 : 0
+RU-UNK-1688 : 1 : 0
+RU-UNK-1689 : 1 : 0
+RU-UNK-1690 : 1 : 0
+RU-UNK-1691 : 1 : 0
+RU-UNK-1692 : 1 : 0
+RU-UNK-1693 : 1 : 0
+RU-UNK-1694 : 1 : 0
+RU-UNK-1695 : 1 : 0
+RU-UNK-1696 : 1 : 0
+RU-UNK-1697 : 1 : 0
+RU-UNK-1698 : 1 : 0
+RU-UNK-1699 : 1 : 0
+RU-UNK-1700 : 1 : 0
+RU-UNK-1701 : 1 : 0
+RU-UNK-1702 : 1 : 0
+RU-UNK-1703 : 1 : 0
+RU-UNK-1704 : 1 : 0
+RU-UNK-1705 : 1 : 0
+RU-UNK-1706 : 1 : 0
+RU-UNK-1707 : 1 : 0
+RU-UNK-1708 : 1 : 0
+RU-UNK-1709 : 1 : 0
+RU-UNK-1710 : 1 : 0
+RU-UNK-1711 : 1 : 0
+RU-UNK-1712 : 1 : 0
+RU-UNK-1713 : 1 : 0
+RU-UNK-1714 : 1 : 0
+RU-UNK-1715 : 1 : 0
+RU-UNK-1716 : 1 : 0
+RU-UNK-1717 : 1 : 0
+RU-UNK-1718 : 1 : 0
+RU-UNK-1719 : 1 : 0
+RU-UNK-1720 : 1 : 0
+RU-UNK-1721 : 1 : 0
+RU-UNK-1722 : 1 : 0
+RU-UNK-1723 : 1 : 0
+RU-UNK-1724 : 1 : 0
+RU-UNK-1725 : 1 : 0
+RU-UNK-1726 : 1 : 0
+RU-UNK-1727 : 1 : 0
+RU-UNK-1728 : 1 : 0
+RU-UNK-1729 : 1 : 0
+RU-UNK-1730 : 1 : 0
+RU-UNK-1731 : 1 : 0
+RU-UNK-1732 : 1 : 0
+RU-UNK-1733 : 1 : 0
+RU-UNK-1734 : 1 : 0
+RU-UNK-1735 : 1 : 0
+RU-UNK-1736 : 1 : 0
+RU-UNK-1737 : 1 : 0
+RU-UNK-1738 : 1 : 0
+RU-UNK-1739 : 1 : 0
+RU-UNK-1740 : 1 : 0
+RU-UNK-1741 : 1 : 0
+RU-UNK-1742 : 1 : 0
+RU-UNK-1743 : 1 : 0
+RU-UNK-1744 : 1 : 0
+RU-UNK-1745 : 1 : 0
+RU-UNK-1746 : 1 : 0
+RU-UNK-1747 : 1 : 0
+RU-UNK-1748 : 1 : 0
+RU-UNK-1749 : 1 : 0
+RU-UNK-1750 : 1 : 0
+RU-UNK-1751 : 1 : 0
+RU-UNK-1752 : 1 : 0
+RU-UNK-1753 : 1 : 0
+RU-UNK-1754 : 1 : 0
+RU-UNK-1755 : 1 : 0
+RU-UNK-1756 : 1 : 0
+RU-UNK-1757 : 1 : 0
+RU-UNK-1758 : 1 : 0
+RU-UNK-1759 : 1 : 0
+RU-UNK-1760 : 1 : 0
+RU-UNK-1761 : 1 : 0
+RU-UNK-1762 : 1 : 0
+RU-UNK-1763 : 1 : 0
+RU-UNK-1764 : 1 : 0
+RU-UNK-1765 : 1 : 0
+RU-UNK-1766 : 1 : 0
+RU-UNK-1767 : 1 : 0
+RU-UNK-1768 : 1 : 0
+RU-UNK-1769 : 1 : 0
+RU-UNK-1770 : 1 : 0
+RU-UNK-1771 : 1 : 0
+RU-UNK-1772 : 1 : 0
+RU-UNK-1773 : 1 : 0
+RU-UNK-1774 : 1 : 0
+RU-UNK-1775 : 1 : 0
+RU-UNK-1776 : 1 : 0
+RU-UNK-1777 : 1 : 0
+RU-UNK-1778 : 1 : 0
+RU-UNK-1779 : 1 : 0
+RU-UNK-1780 : 1 : 0
+RU-UNK-1781 : 1 : 0
+RU-UNK-1782 : 1 : 0
+RU-UNK-1783 : 1 : 0
+RU-UNK-1784 : 1 : 0
+RU-UNK-1785 : 1 : 0
+RU-UNK-1786 : 1 : 0
+RU-UNK-1787 : 1 : 0
+RU-UNK-1788 : 1 : 0
+RU-UNK-1789 : 1 : 0
+RU-UNK-1790 : 1 : 0
+RU-UNK-1791 : 1 : 0
+RU-UNK-1792 : 1 : 0
+RU-UNK-1793 : 1 : 0
+RU-UNK-1794 : 1 : 0
+RU-UNK-1795 : 1 : 0
+RU-UNK-1796 : 1 : 0
+RU-UNK-1797 : 1 : 0
+RU-UNK-1798 : 1 : 0
+RU-UNK-1799 : 1 : 0
+RU-UNK-1800 : 1 : 0
+RU-UNK-1801 : 1 : 0
+RU-UNK-1802 : 1 : 0
+RU-UNK-1803 : 1 : 0
+RU-UNK-1804 : 1 : 0
+RU-UNK-1805 : 1 : 0
+RU-UNK-1806 : 1 : 0
+RU-UNK-1807 : 1 : 0
+RU-UNK-1808 : 1 : 0
+RU-UNK-1809 : 1 : 0
+RU-UNK-1810 : 1 : 0
+RU-UNK-1811 : 1 : 0
+RU-UNK-1812 : 1 : 0
+RU-UNK-1813 : 1 : 0
+RU-UNK-1814 : 1 : 0
+RU-UNK-1815 : 1 : 0
+RU-UNK-1816 : 1 : 0
+RU-UNK-1817 : 1 : 0
+RU-UNK-1818 : 1 : 0
+RU-UNK-1819 : 1 : 0
+RU-UNK-1820 : 1 : 0
+RU-UNK-1821 : 1 : 0
+RU-UNK-1822 : 1 : 0
+RU-UNK-1823 : 1 : 0
+RU-UNK-1824 : 1 : 0
+RU-UNK-1825 : 1 : 0
+RU-UNK-1826 : 1 : 0
+RU-UNK-1827 : 1 : 0
+RU-UNK-1828 : 1 : 0
+RU-UNK-1829 : 1 : 0
+RU-UNK-1830 : 1 : 0
+RU-UNK-1831 : 1 : 0
+RU-UNK-1832 : 1 : 0
+RU-UNK-1833 : 1 : 0
+RU-UNK-1834 : 1 : 0
+RU-UNK-1835 : 1 : 0
+RU-UNK-1836 : 1 : 0
+RU-UNK-1837 : 1 : 0
+RU-UNK-1838 : 1 : 0
+RU-UNK-1839 : 1 : 0
+RU-UNK-1840 : 1 : 0
+RU-UNK-1841 : 1 : 0
+RU-UNK-1842 : 1 : 0
+RU-UNK-1843 : 1 : 0
+RU-UNK-1844 : 1 : 0
+RU-UNK-1845 : 1 : 0
+RU-UNK-1846 : 1 : 0
+RU-UNK-1847 : 1 : 0
+RU-UNK-1848 : 1 : 0
+RU-UNK-1849 : 1 : 0
+RU-UNK-1850 : 1 : 0
+RU-UNK-1851 : 1 : 0
+RU-UNK-1852 : 1 : 0
+RU-UNK-1853 : 1 : 0
+RU-UNK-1854 : 1 : 0
+RU-UNK-1855 : 1 : 0
+RU-UNK-1856 : 1 : 0
+RU-UNK-1857 : 1 : 0
+RU-UNK-1858 : 1 : 0
+RU-UNK-1859 : 1 : 0
+RU-UNK-1860 : 1 : 0
+RU-UNK-1861 : 1 : 0
+RU-UNK-1862 : 1 : 0
+RU-UNK-1863 : 1 : 0
+RU-UNK-1864 : 1 : 0
+RU-UNK-1865 : 1 : 0
+RU-UNK-1866 : 1 : 0
+RU-UNK-1867 : 1 : 0
+RU-UNK-1868 : 1 : 0
+RU-UNK-1869 : 1 : 0
+RU-UNK-1870 : 1 : 0
+RU-UNK-1871 : 1 : 0
+RU-UNK-1872 : 1 : 0
+RU-UNK-1873 : 1 : 0
+RU-UNK-1874 : 1 : 0
+RU-UNK-1875 : 1 : 0
+RU-UNK-1876 : 1 : 0
+RU-UNK-1877 : 1 : 0
+RU-UNK-1878 : 1 : 0
+RU-UNK-1879 : 1 : 0
+RU-UNK-1880 : 1 : 0
+RU-UNK-1881 : 1 : 0
+RU-UNK-1882 : 1 : 0
+RU-UNK-1883 : 1 : 0
+RU-UNK-1884 : 1 : 0
+RU-UNK-1885 : 1 : 0
+RU-UNK-1886 : 1 : 0
+RU-UNK-1887 : 1 : 0
+RU-UNK-1888 : 1 : 0
+RU-UNK-1889 : 1 : 0
+RU-UNK-1890 : 1 : 0
+RU-UNK-1891 : 1 : 0
+RU-UNK-1892 : 1 : 0
+RU-UNK-1893 : 1 : 0
+RU-UNK-1894 : 1 : 0
+RU-UNK-1895 : 1 : 0
+RU-UNK-1896 : 1 : 0
+RU-UNK-1897 : 1 : 0
+RU-UNK-1898 : 1 : 0
+RU-UNK-1899 : 1 : 0
+RU-UNK-1900 : 1 : 0
+RU-UNK-1901 : 1 : 0
+RU-UNK-1902 : 1 : 0
+RU-UNK-1903 : 1 : 0
+RU-UNK-1904 : 1 : 0
+RU-UNK-1905 : 1 : 0
+RU-UNK-1906 : 1 : 0
+RU-UNK-1907 : 1 : 0
+RU-UNK-1908 : 1 : 0
+RU-UNK-1909 : 1 : 0
+RU-UNK-1910 : 1 : 0
+RU-UNK-1911 : 1 : 0
+RU-UNK-1912 : 1 : 0
+RU-UNK-1913 : 1 : 0
+RU-UNK-1914 : 1 : 0
+RU-UNK-1915 : 1 : 0
+RU-UNK-1916 : 1 : 0
+RU-UNK-1917 : 1 : 0
+RU-UNK-1918 : 1 : 0
+RU-UNK-1919 : 1 : 0
+RU-UNK-1920 : 1 : 0
+RU-UNK-1921 : 1 : 0
+RU-UNK-1922 : 1 : 0
+RU-UNK-1923 : 1 : 0
+RU-UNK-1924 : 1 : 0
+RU-UNK-1925 : 1 : 0
+RU-UNK-1926 : 1 : 0
+RU-UNK-1927 : 1 : 0
+RU-UNK-1928 : 1 : 0
+RU-UNK-1929 : 1 : 0
+RU-UNK-1930 : 1 : 0
+RU-UNK-1931 : 1 : 0
+RU-UNK-1932 : 1 : 0
+RU-UNK-1933 : 1 : 0
+RU-UNK-1934 : 1 : 0
+RU-UNK-1935 : 1 : 0
+RU-UNK-1936 : 1 : 0
+RU-UNK-1937 : 1 : 0
+RU-UNK-1938 : 1 : 0
+RU-UNK-1939 : 1 : 0
+RU-UNK-1940 : 1 : 0
+RU-UNK-1941 : 1 : 0
+RU-UNK-1942 : 1 : 0
+RU-UNK-1943 : 1 : 0
+RU-UNK-1944 : 1 : 0
+RU-UNK-1945 : 1 : 0
+RU-UNK-1946 : 1 : 0
+RU-UNK-1947 : 1 : 0
+RU-UNK-1948 : 1 : 0
+RU-UNK-1949 : 1 : 0
+RU-UNK-1950 : 1 : 0
+RU-UNK-1951 : 1 : 0
+RU-UNK-1952 : 1 : 0
+RU-UNK-1953 : 1 : 0
+RU-UNK-1954 : 1 : 0
+RU-UNK-1955 : 1 : 0
+RU-UNK-1956 : 1 : 0
+RU-UNK-1957 : 1 : 0
+RU-UNK-1958 : 1 : 0
+RU-UNK-1959 : 1 : 0
+RU-UNK-1960 : 1 : 0
+RU-UNK-1961 : 1 : 0
+RU-UNK-1962 : 1 : 0
+RU-UNK-1963 : 1 : 0
+RU-UNK-1964 : 1 : 0
+RU-UNK-1965 : 1 : 0
+RU-UNK-1966 : 1 : 0
+RU-UNK-1967 : 1 : 0
+RU-UNK-1968 : 1 : 0
+RU-UNK-1969 : 1 : 0
+RU-UNK-1970 : 1 : 0
+RU-UNK-1971 : 1 : 0
+RU-UNK-1972 : 1 : 0
+RU-UNK-1973 : 1 : 0
+RU-UNK-1974 : 1 : 0
+RU-UNK-1975 : 1 : 0
+RU-UNK-1976 : 1 : 0
+RU-UNK-1977 : 1 : 0
+RU-UNK-1978 : 1 : 0
+RU-UNK-1979 : 1 : 0
+RU-UNK-1980 : 1 : 0
+RU-UNK-1981 : 1 : 0
+RU-UNK-1982 : 1 : 0
+RU-UNK-1983 : 1 : 0
+RU-UNK-1984 : 1 : 0
+RU-UNK-1985 : 1 : 0
+RU-UNK-1986 : 1 : 0
+RU-UNK-1987 : 1 : 0
+RU-UNK-1988 : 1 : 0
+RU-UNK-1989 : 1 : 0
+RU-UNK-1990 : 1 : 0
+RU-UNK-1991 : 1 : 0
+RU-UNK-1992 : 1 : 0
+RU-UNK-1993 : 1 : 0
+RU-UNK-1994 : 1 : 0
+RU-UNK-1995 : 1 : 0
+RU-UNK-1996 : 1 : 0
+RU-UNK-1997 : 1 : 0
+RU-UNK-1998 : 1 : 0
+RU-UNK-1999 : 1 : 0
+RU-UNK-2000 : 1 : 0
+RU-UNK-2001 : 1 : 0
+RU-UNK-2002 : 1 : 0
+RU-UNK-2003 : 1 : 0
+RU-UNK-2004 : 1 : 0
+RU-UNK-2005 : 1 : 0
+RU-UNK-2006 : 1 : 0
+RU-UNK-2007 : 1 : 0
+RU-UNK-2008 : 1 : 0
+RU-UNK-2009 : 1 : 0
+RU-UNK-2010 : 1 : 0
+RU-UNK-2011 : 1 : 0
+RU-UNK-2012 : 1 : 0
+RU-UNK-2013 : 1 : 0
+RU-UNK-2014 : 1 : 0
+RU-UNK-2015 : 1 : 0
+RU-UNK-2016 : 1 : 0
+RU-UNK-2017 : 1 : 0
+RU-UNK-2018 : 1 : 0
+RU-UNK-2019 : 1 : 0
+RU-UNK-2020 : 1 : 0
+RU-UNK-2021 : 1 : 0
+RU-UNK-2022 : 1 : 0
+RU-UNK-2023 : 1 : 0
+RU-UNK-2024 : 1 : 0
+RU-UNK-2025 : 1 : 0
+RU-UNK-2026 : 1 : 0
+RU-UNK-2027 : 1 : 0
+RU-UNK-2028 : 1 : 0
+RU-UNK-2029 : 1 : 0
+RU-UNK-2030 : 1 : 0
+RU-UNK-2031 : 1 : 0
+RU-UNK-2032 : 1 : 0
+RU-UNK-2033 : 1 : 0
+RU-UNK-2034 : 1 : 0
+RU-UNK-2035 : 1 : 0
+RU-UNK-2036 : 1 : 0
+RU-UNK-2037 : 1 : 0
+RU-UNK-2038 : 1 : 0
+RU-UNK-2039 : 1 : 0
+RU-UNK-2040 : 1 : 0
+RU-UNK-2041 : 1 : 0
+RU-UNK-2042 : 1 : 0
+RU-UNK-2043 : 1 : 0
+RU-UNK-2044 : 1 : 0
+RU-UNK-2045 : 1 : 0
+RU-UNK-2046 : 1 : 0
+RU-UNK-2047 : 1 : 0
+RU-UNK-2048 : 1 : 0
+RU-UNK-2049 : 1 : 0
+RU-UNK-2050 : 1 : 0
+RU-UNK-2051 : 1 : 0
+RU-UNK-2052 : 1 : 0
+RU-UNK-2053 : 1 : 0
+RU-UNK-2054 : 1 : 0
+RU-UNK-2055 : 1 : 0
+RU-UNK-2056 : 1 : 0
+RU-UNK-2057 : 1 : 0
+RU-UNK-2058 : 1 : 0
+RU-UNK-2059 : 1 : 0
+RU-UNK-2060 : 1 : 0
+RU-UNK-2061 : 1 : 0
+RU-UNK-2062 : 1 : 0
+RU-UNK-2063 : 1 : 0
+RU-UNK-2064 : 1 : 0
+RU-UNK-2065 : 1 : 0
+RU-UNK-2066 : 1 : 0
+RU-UNK-2067 : 1 : 0
+RU-UNK-2068 : 1 : 0
+RU-UNK-2069 : 1 : 0
+RU-UNK-2070 : 1 : 0
+RU-UNK-2071 : 1 : 0
+RU-UNK-2072 : 1 : 0
+RU-UNK-2073 : 1 : 0
+RU-UNK-2074 : 1 : 0
+RU-UNK-2075 : 1 : 0
+RU-UNK-2076 : 1 : 0
+RU-UNK-2077 : 1 : 0
+RU-UNK-2078 : 1 : 0
+RU-UNK-2079 : 1 : 0
+RU-UNK-2080 : 1 : 0
+RU-UNK-2081 : 1 : 0
+RU-UNK-2082 : 1 : 0
+RU-UNK-2083 : 1 : 0
+RU-UNK-2084 : 1 : 0
+RU-UNK-2085 : 1 : 0
+RU-UNK-2086 : 1 : 0
+RU-UNK-2087 : 1 : 0
+RU-UNK-2088 : 1 : 0
+RU-UNK-2089 : 1 : 0
+RU-UNK-2090 : 1 : 0
+RU-UNK-2091 : 1 : 0
+RU-UNK-2092 : 1 : 0
+RU-UNK-2093 : 1 : 0
+RU-UNK-2094 : 1 : 0
+RU-UNK-2095 : 1 : 0
+RU-UNK-2096 : 1 : 0
+RU-UNK-2097 : 1 : 0
+RU-UNK-2098 : 1 : 0
+RU-UNK-2099 : 1 : 0
+RU-UNK-2100 : 1 : 0
+RU-UNK-2101 : 1 : 0
+RU-UNK-2102 : 1 : 0
+RU-UNK-2103 : 1 : 0
+RU-UNK-2104 : 1 : 0
+RU-UNK-2105 : 1 : 0
+RU-UNK-2106 : 1 : 0
+RU-UNK-2107 : 1 : 0
+RU-UNK-2108 : 1 : 0
+RU-UNK-2109 : 1 : 0
+RU-UNK-2110 : 1 : 0
+RU-UNK-2111 : 1 : 0
+RU-UNK-2112 : 1 : 0
+RU-UNK-2113 : 1 : 0
+RU-UNK-2114 : 1 : 0
+RU-UNK-2115 : 1 : 0
+RU-UNK-2116 : 1 : 0
+RU-UNK-2117 : 1 : 0
+RU-UNK-2118 : 1 : 0
+RU-UNK-2119 : 1 : 0
+RU-UNK-2120 : 1 : 0
+RU-UNK-2121 : 1 : 0
+RU-UNK-2122 : 1 : 0
+RU-UNK-2123 : 1 : 0
+RU-UNK-2124 : 1 : 0
+RU-UNK-2125 : 1 : 0
+RU-UNK-2126 : 1 : 0
+RU-UNK-2127 : 1 : 0
+RU-UNK-2128 : 1 : 0
+RU-UNK-2129 : 1 : 0
+RU-UNK-2130 : 1 : 0
+RU-UNK-2131 : 1 : 0
+RU-UNK-2132 : 1 : 0
+RU-UNK-2133 : 1 : 0
+RU-UNK-2134 : 1 : 0
+RU-UNK-2135 : 1 : 0
+RU-UNK-2136 : 1 : 0
+RU-UNK-2137 : 1 : 0
+RU-UNK-2138 : 1 : 0
+RU-UNK-2139 : 1 : 0
+RU-UNK-2140 : 1 : 0
+RU-UNK-2141 : 1 : 0
+RU-UNK-2142 : 1 : 0
+RU-UNK-2143 : 1 : 0
+RU-UNK-2144 : 1 : 0
+RU-UNK-2145 : 1 : 0
+RU-UNK-2146 : 1 : 0
+RU-UNK-2147 : 1 : 0
+RU-UNK-2148 : 1 : 0
+RU-UNK-2149 : 1 : 0
+RU-UNK-2150 : 1 : 0
+RU-UNK-2151 : 1 : 0
+RU-UNK-2152 : 1 : 0
+RU-UNK-2153 : 1 : 0
+RU-UNK-2154 : 1 : 0
+RU-UNK-2155 : 1 : 0
+RU-UNK-2156 : 1 : 0
+RU-UNK-2157 : 1 : 0
+RU-UNK-2158 : 1 : 0
+RU-UNK-2159 : 1 : 0
+RU-UNK-2160 : 1 : 0
+RU-UNK-2161 : 1 : 0
+RU-UNK-2162 : 1 : 0
+RU-UNK-2163 : 1 : 0
+RU-UNK-2164 : 1 : 0
+RU-UNK-2165 : 1 : 0
+RU-UNK-2166 : 1 : 0
+RU-UNK-2167 : 1 : 0
+RU-UNK-2168 : 1 : 0
+RU-UNK-2169 : 1 : 0
+RU-UNK-2170 : 1 : 0
+RU-UNK-2171 : 1 : 0
+RU-UNK-2172 : 1 : 0
+RU-UNK-2173 : 1 : 0
+RU-UNK-2174 : 1 : 0
+RU-UNK-2175 : 1 : 0
+RU-UNK-2176 : 1 : 0
+RU-UNK-2177 : 1 : 0
+RU-UNK-2178 : 1 : 0
+RU-UNK-2179 : 1 : 0
+RU-UNK-2180 : 1 : 0
+RU-UNK-2181 : 1 : 0
+RU-UNK-2182 : 1 : 0
+RU-UNK-2183 : 1 : 0
+RU-UNK-2184 : 1 : 0
+RU-UNK-2185 : 1 : 0
+RU-UNK-2186 : 1 : 0
+RU-UNK-2187 : 1 : 0
+RU-UNK-2188 : 1 : 0
+RU-UNK-2189 : 1 : 0
+RU-UNK-2190 : 1 : 0
+RU-UNK-2191 : 1 : 0
+RU-UNK-2192 : 1 : 0
+RU-UNK-2193 : 1 : 0
+RU-UNK-2194 : 1 : 0
+RU-UNK-2195 : 1 : 0
+RU-UNK-2196 : 1 : 0
+RU-UNK-2197 : 1 : 0
+RU-UNK-2198 : 1 : 0
+RU-UNK-2199 : 1 : 0
+RU-UNK-2200 : 1 : 0
+RU-UNK-2201 : 1 : 0
+RU-UNK-2202 : 1 : 0
+RU-UNK-2203 : 1 : 0
+RU-UNK-2204 : 1 : 0
+RU-UNK-2205 : 1 : 0
+RU-UNK-2206 : 1 : 0
+RU-UNK-2207 : 1 : 0
+RU-UNK-2208 : 1 : 0
+RU-UNK-2209 : 1 : 0
+RU-UNK-2210 : 1 : 0
+RU-UNK-2211 : 1 : 0
+RU-UNK-2212 : 1 : 0
+RU-UNK-2213 : 1 : 0
+RU-UNK-2214 : 1 : 0
+RU-UNK-2215 : 1 : 0
+RU-UNK-2216 : 1 : 0
+RU-UNK-2217 : 1 : 0
+RU-UNK-2218 : 1 : 0
+RU-UNK-2219 : 1 : 0
+RU-UNK-2220 : 1 : 0
+RU-UNK-2221 : 1 : 0
+RU-UNK-2222 : 1 : 0
+RU-UNK-2223 : 1 : 0
+RU-UNK-2224 : 1 : 0
+RU-UNK-2225 : 1 : 0
+RU-UNK-2226 : 1 : 0
+RU-UNK-2227 : 1 : 0
+RU-UNK-2228 : 1 : 0
+RU-UNK-2229 : 1 : 0
+RU-UNK-2230 : 1 : 0
+RU-UNK-2231 : 1 : 0
+RU-UNK-2232 : 1 : 0
+RU-UNK-2233 : 1 : 0
+RU-UNK-2234 : 1 : 0
+RU-UNK-2235 : 1 : 0
+RU-UNK-2236 : 1 : 0
+RU-UNK-2237 : 1 : 0
+RU-UNK-2238 : 1 : 0
+RU-UNK-2239 : 1 : 0
+RU-UNK-2240 : 1 : 0
+RU-UNK-2241 : 1 : 0
+RU-UNK-2242 : 1 : 0
+RU-UNK-2243 : 1 : 0
+RU-UNK-2244 : 1 : 0
+RU-UNK-2245 : 1 : 0
+RU-UNK-2246 : 1 : 0
+RU-UNK-2247 : 1 : 0
+RU-UNK-2248 : 1 : 0
+RU-UNK-2249 : 1 : 0
+RU-UNK-2250 : 1 : 0
+RU-UNK-2251 : 1 : 0
+RU-UNK-2252 : 1 : 0
+RU-UNK-2253 : 1 : 0
+RU-UNK-2254 : 1 : 0
+RU-UNK-2255 : 1 : 0
+RU-UNK-2256 : 1 : 0
+RU-UNK-2257 : 1 : 0
+RU-UNK-2258 : 1 : 0
+RU-UNK-2259 : 1 : 0
+RU-UNK-2260 : 1 : 0
+RU-UNK-2261 : 1 : 0
+RU-UNK-2262 : 1 : 0
+RU-UNK-2263 : 1 : 0
+RU-UNK-2264 : 1 : 0
+RU-UNK-2265 : 1 : 0
+RU-UNK-2266 : 1 : 0
+RU-UNK-2267 : 1 : 0
+RU-UNK-2268 : 1 : 0
+RU-UNK-2269 : 1 : 0
+RU-UNK-2270 : 1 : 0
+RU-UNK-2271 : 1 : 0
+RU-UNK-2272 : 1 : 0
+RU-UNK-2273 : 1 : 0
+RU-UNK-2274 : 1 : 0
+RU-UNK-2275 : 1 : 0
+RU-UNK-2276 : 1 : 0
+RU-UNK-2277 : 1 : 0
+RU-UNK-2278 : 1 : 0
+RU-UNK-2279 : 1 : 0
+RU-UNK-2280 : 1 : 0
+RU-UNK-2281 : 1 : 0
+RU-UNK-2282 : 1 : 0
+RU-UNK-2283 : 1 : 0
+RU-UNK-2284 : 1 : 0
+RU-UNK-2285 : 1 : 0
+RU-UNK-2286 : 1 : 0
+RU-UNK-2287 : 1 : 0
+RU-UNK-2288 : 1 : 0
+RU-UNK-2289 : 1 : 0
+RU-UNK-2290 : 1 : 0
+RU-UNK-2291 : 1 : 0
+RU-UNK-2292 : 1 : 0
+RU-UNK-2293 : 1 : 0
+RU-UNK-2294 : 1 : 0
+RU-UNK-2295 : 1 : 0
+RU-UNK-2296 : 1 : 0
+RU-UNK-2297 : 1 : 0
+RU-UNK-2298 : 1 : 0
+RU-UNK-2299 : 1 : 0
+RU-UNK-2300 : 1 : 0
+RU-UNK-2301 : 1 : 0
+RU-UNK-2302 : 1 : 0
+RU-UNK-2303 : 1 : 0
+RU-UNK-2304 : 1 : 0
+RU-UNK-2305 : 1 : 0
+RU-UNK-2306 : 1 : 0
+RU-UNK-2307 : 1 : 0
+RU-UNK-2308 : 1 : 0
+RU-UNK-2309 : 1 : 0
+RU-UNK-2310 : 1 : 0
+RU-UNK-2311 : 1 : 0
+RU-UNK-2312 : 1 : 0
+RU-UNK-2313 : 1 : 0
+RU-UNK-2314 : 1 : 0
+RU-UNK-2315 : 1 : 0
+RU-UNK-2316 : 1 : 0
+RU-UNK-2317 : 1 : 0
+RU-UNK-2318 : 1 : 0
+RU-UNK-2319 : 1 : 0
+RU-UNK-2320 : 1 : 0
+RU-UNK-2321 : 1 : 0
+RU-UNK-2322 : 1 : 0
+RU-UNK-2323 : 1 : 0
+RU-UNK-2324 : 1 : 0
+RU-UNK-2325 : 1 : 0
+RU-UNK-2326 : 1 : 0
+RU-UNK-2327 : 1 : 0
+RU-UNK-2328 : 1 : 0
+RU-UNK-2329 : 1 : 0
+RU-UNK-2330 : 1 : 0
+RU-UNK-2331 : 1 : 0
+RU-UNK-2332 : 1 : 0
+RU-UNK-2333 : 1 : 0
+RU-UNK-2334 : 1 : 0
+RU-UNK-2335 : 1 : 0
+RU-UNK-2336 : 1 : 0
+RU-UNK-2337 : 1 : 0
+RU-UNK-2338 : 1 : 0
+RU-UNK-2339 : 1 : 0
+RU-UNK-2340 : 1 : 0
+RU-UNK-2341 : 1 : 0
+RU-UNK-2342 : 1 : 0
+RU-UNK-2343 : 1 : 0
+RU-UNK-2344 : 1 : 0
+RU-UNK-2345 : 1 : 0
+RU-UNK-2346 : 1 : 0
+RU-UNK-2347 : 1 : 0
+RU-UNK-2348 : 1 : 0
+RU-UNK-2349 : 1 : 0
+RU-UNK-2350 : 1 : 0
+RU-UNK-2351 : 1 : 0
+RU-UNK-2352 : 1 : 0
+RU-UNK-2353 : 1 : 0
+RU-UNK-2354 : 1 : 0
+RU-UNK-2355 : 1 : 0
+RU-UNK-2356 : 1 : 0
+RU-UNK-2357 : 1 : 0
+RU-UNK-2358 : 1 : 0
+RU-UNK-2359 : 1 : 0
+RU-UNK-2360 : 1 : 0
+RU-UNK-2361 : 1 : 0
+RU-UNK-2362 : 1 : 0
+RU-UNK-2363 : 1 : 0
+RU-UNK-2364 : 1 : 0
+RU-UNK-2365 : 1 : 0
+RU-UNK-2366 : 1 : 0
+RU-UNK-2367 : 1 : 0
+RU-UNK-2368 : 1 : 0
+RU-UNK-2369 : 1 : 0
+RU-UNK-2370 : 1 : 0
+RU-UNK-2371 : 1 : 0
+RU-UNK-2372 : 1 : 0
+RU-UNK-2373 : 1 : 0
+RU-UNK-2374 : 1 : 0
+RU-UNK-2375 : 1 : 0
+RU-UNK-2376 : 1 : 0
+RU-UNK-2377 : 1 : 0
+RU-UNK-2378 : 1 : 0
+RU-UNK-2379 : 1 : 0
+RU-UNK-2380 : 1 : 0
+RU-UNK-2381 : 1 : 0
+RU-UNK-2382 : 1 : 0
+RU-UNK-2383 : 1 : 0
+RU-UNK-2384 : 1 : 0
+RU-UNK-2385 : 1 : 0
+RU-UNK-2386 : 1 : 0
+RU-UNK-2387 : 1 : 0
+RU-UNK-2388 : 1 : 0
+RU-UNK-2389 : 1 : 0
+RU-UNK-2390 : 1 : 0
+RU-UNK-2391 : 1 : 0
+RU-UNK-2392 : 1 : 0
+RU-UNK-2393 : 1 : 0
+RU-UNK-2394 : 1 : 0
+RU-UNK-2395 : 1 : 0
+RU-UNK-2396 : 1 : 0
+RU-UNK-2397 : 1 : 0
+RU-UNK-2398 : 1 : 0
+RU-UNK-2399 : 1 : 0
+RU-UNK-2400 : 1 : 0
+RU-UNK-2401 : 1 : 0
+RU-UNK-2402 : 1 : 0
+RU-UNK-2403 : 1 : 0
+RU-UNK-2404 : 1 : 0
+RU-UNK-2405 : 1 : 0
+RU-UNK-2406 : 1 : 0
+RU-UNK-2407 : 1 : 0
+RU-UNK-2408 : 1 : 0
+RU-UNK-2409 : 1 : 0
+RU-UNK-2410 : 1 : 0
+RU-UNK-2411 : 1 : 0
+RU-UNK-2412 : 1 : 0
+RU-UNK-2413 : 1 : 0
+RU-UNK-2414 : 1 : 0
+RU-UNK-2415 : 1 : 0
+RU-UNK-2416 : 1 : 0
+RU-UNK-2417 : 1 : 0
+RU-UNK-2418 : 1 : 0
+RU-UNK-2419 : 1 : 0
+RU-UNK-2420 : 1 : 0
+RU-UNK-2421 : 1 : 0
+RU-UNK-2422 : 1 : 0
+RU-UNK-2423 : 1 : 0
+RU-UNK-2424 : 1 : 0
+RU-UNK-2425 : 1 : 0
+RU-UNK-2426 : 1 : 0
+RU-UNK-2427 : 1 : 0
+RU-UNK-2428 : 1 : 0
+RU-UNK-2429 : 1 : 0
+RU-UNK-2430 : 1 : 0
+RU-UNK-2431 : 1 : 0
+RU-UNK-2432 : 1 : 0
+RU-UNK-2433 : 1 : 0
+RU-UNK-2434 : 1 : 0
+RU-UNK-2435 : 1 : 0
+RU-UNK-2436 : 1 : 0
+RU-UNK-2437 : 1 : 0
+RU-UNK-2438 : 1 : 0
+RU-UNK-2439 : 1 : 0
+RU-UNK-2440 : 1 : 0
+RU-UNK-2441 : 1 : 0
+RU-UNK-2442 : 1 : 0
+RU-UNK-2443 : 1 : 0
+RU-UNK-2444 : 1 : 0
+RU-UNK-2445 : 1 : 0
+RU-UNK-2446 : 1 : 0
+RU-UNK-2447 : 1 : 0
+RU-UNK-2448 : 1 : 0
+RU-UNK-2449 : 1 : 0
+RU-UNK-2450 : 1 : 0
+RU-UNK-2451 : 1 : 0
+RU-UNK-2452 : 1 : 0
+RU-UNK-2453 : 1 : 0
+RU-UNK-2454 : 1 : 0
+RU-UNK-2455 : 1 : 0
+RU-UNK-2456 : 1 : 0
+RU-UNK-2457 : 1 : 0
+RU-UNK-2458 : 1 : 0
+RU-UNK-2459 : 1 : 0
+RU-UNK-2460 : 1 : 0
+RU-UNK-2461 : 1 : 0
+RU-UNK-2462 : 1 : 0
+RU-UNK-2463 : 1 : 0
+RU-UNK-2464 : 1 : 0
+RU-UNK-2465 : 1 : 0
+RU-UNK-2466 : 1 : 0
+RU-UNK-2467 : 1 : 0
+RU-UNK-2468 : 1 : 0
+RU-UNK-2469 : 1 : 0
+RU-UNK-2470 : 1 : 0
+RU-UNK-2471 : 1 : 0
+RU-UNK-2472 : 1 : 0
+RU-UNK-2473 : 1 : 0
+RU-UNK-2474 : 1 : 0
+RU-UNK-2475 : 1 : 0
+RU-UNK-2476 : 1 : 0
+RU-UNK-2477 : 1 : 0
+RU-UNK-2478 : 1 : 0
+RU-UNK-2479 : 1 : 0
+RU-UNK-2480 : 1 : 0
+RU-UNK-2481 : 1 : 0
+RU-UNK-2482 : 1 : 0
+RU-UNK-2483 : 1 : 0
+RU-UNK-2484 : 1 : 0
+RU-UNK-2485 : 1 : 0
+RU-UNK-2486 : 1 : 0
+RU-UNK-2487 : 1 : 0
+RU-UNK-2488 : 1 : 0
+RU-UNK-2489 : 1 : 0
+RU-UNK-2490 : 1 : 0
+RU-UNK-2491 : 1 : 0
+RU-UNK-2492 : 1 : 0
+RU-UNK-2493 : 1 : 0
+RU-UNK-2494 : 1 : 0
+RU-UNK-2495 : 1 : 0
+RU-UNK-2496 : 1 : 0
+RU-UNK-2497 : 1 : 0
+RU-UNK-2498 : 1 : 0
+RU-UNK-2499 : 1 : 0
+RU-UNK-2500 : 1 : 0
+RU-UNK-2501 : 1 : 0
+RU-UNK-2502 : 1 : 0
+RU-UNK-2503 : 1 : 0
+RU-UNK-2504 : 1 : 0
+RU-UNK-2505 : 1 : 0
+RU-UNK-2506 : 1 : 0
+RU-UNK-2507 : 1 : 0
+RU-UNK-2508 : 1 : 0
+RU-UNK-2509 : 1 : 0
+RU-UNK-2510 : 1 : 0
+RU-UNK-2511 : 1 : 0
+RU-UNK-2512 : 1 : 0
+RU-UNK-2513 : 1 : 0
+RU-UNK-2514 : 1 : 0
+RU-UNK-2515 : 1 : 0
+RU-UNK-2516 : 1 : 0
+RU-UNK-2517 : 1 : 0
+RU-UNK-2518 : 1 : 0
+RU-UNK-2519 : 1 : 0
+RU-UNK-2520 : 1 : 0
+RU-UNK-2521 : 1 : 0
+RU-UNK-2522 : 1 : 0
+RU-UNK-2523 : 1 : 0
+RU-UNK-2524 : 1 : 0
+RU-UNK-2525 : 1 : 0
+RU-UNK-2526 : 1 : 0
+RU-UNK-2527 : 1 : 0
+RU-UNK-2528 : 1 : 0
+RU-UNK-2529 : 1 : 0
+RU-UNK-2530 : 1 : 0
+RU-UNK-2531 : 1 : 0
+RU-UNK-2532 : 1 : 0
+RU-UNK-2533 : 1 : 0
+RU-UNK-2534 : 1 : 0
+RU-UNK-2535 : 1 : 0
+RU-UNK-2536 : 1 : 0
+RU-UNK-2537 : 1 : 0
+RU-UNK-2538 : 1 : 0
+RU-UNK-2539 : 1 : 0
+RU-UNK-2540 : 1 : 0
+RU-UNK-2541 : 1 : 0
+RU-UNK-2542 : 1 : 0
+RU-UNK-2543 : 1 : 0
+RU-UNK-2544 : 1 : 0
+RU-UNK-2545 : 1 : 0
+RU-UNK-2546 : 1 : 0
+RU-UNK-2547 : 1 : 0
+RU-UNK-2548 : 1 : 0
+RU-UNK-2549 : 1 : 0
+RU-UNK-2550 : 1 : 0
+RU-UNK-2551 : 1 : 0
+RU-UNK-2552 : 1 : 0
+RU-UNK-2553 : 1 : 0
+RU-UNK-2554 : 1 : 0
+RU-UNK-2555 : 1 : 0
+RU-UNK-2556 : 1 : 0
+RU-UNK-2557 : 1 : 0
+RU-UNK-2558 : 1 : 0
+RU-UNK-2559 : 1 : 0
+RU-UNK-2560 : 1 : 0
+RU-UNK-2561 : 1 : 0
+RU-UNK-2562 : 1 : 0
+RU-UNK-2563 : 1 : 0
+RU-UNK-2564 : 1 : 0
+RU-UNK-2565 : 1 : 0
+RU-UNK-2566 : 1 : 0
+RU-UNK-2567 : 1 : 0
+RU-UNK-2568 : 1 : 0
+RU-UNK-2569 : 1 : 0
+RU-UNK-2570 : 1 : 0
+RU-UNK-2571 : 1 : 0
+RU-UNK-2572 : 1 : 0
+RU-UNK-2573 : 1 : 0
+RU-UNK-2574 : 1 : 0
+RU-UNK-2575 : 1 : 0
+RU-UNK-2576 : 1 : 0
+RU-UNK-2577 : 1 : 0
+RU-UNK-2578 : 1 : 0
+RU-UNK-2579 : 1 : 0
+RU-UNK-2580 : 1 : 0
+RU-UNK-2581 : 1 : 0
+RU-UNK-2582 : 1 : 0
+RU-UNK-2583 : 1 : 0
+RU-UNK-2584 : 1 : 0
+RU-UNK-2585 : 1 : 0
+RU-UNK-2586 : 1 : 0
+RU-UNK-2587 : 1 : 0
+RU-UNK-2588 : 1 : 0
+RU-UNK-2589 : 1 : 0
+RU-UNK-2590 : 1 : 0
+RU-UNK-2591 : 1 : 0
+RU-UNK-2592 : 1 : 0
+RU-UNK-2593 : 1 : 0
+RU-UNK-2594 : 1 : 0
+RU-UNK-2595 : 1 : 0
+RU-UNK-2596 : 1 : 0
+RU-UNK-2597 : 1 : 0
+RU-UNK-2598 : 1 : 0
+RU-UNK-2599 : 1 : 0
+RU-UNK-2600 : 1 : 0
+RU-UNK-2601 : 1 : 0
+RU-UNK-2602 : 1 : 0
+RU-UNK-2603 : 1 : 0
+RU-UNK-2604 : 1 : 0
+RU-UNK-2605 : 1 : 0
+RU-UNK-2606 : 1 : 0
+RU-UNK-2607 : 1 : 0
+RU-UNK-2608 : 1 : 0
+RU-UNK-2609 : 1 : 0
+RU-UNK-2610 : 1 : 0
+RU-UNK-2611 : 1 : 0
+RU-UNK-2612 : 1 : 0
+RU-UNK-2613 : 1 : 0
+RU-UNK-2614 : 1 : 0
+RU-UNK-2615 : 1 : 0
+RU-UNK-2616 : 1 : 0
+RU-UNK-2617 : 1 : 0
+RU-UNK-2618 : 1 : 0
+RU-UNK-2619 : 1 : 0
+RU-UNK-2620 : 1 : 0
+RU-UNK-2621 : 1 : 0
+RU-UNK-2622 : 1 : 0
+RU-UNK-2623 : 1 : 0
+RU-UNK-2624 : 1 : 0
+RU-UNK-2625 : 1 : 0
+RU-UNK-2626 : 1 : 0
+RU-UNK-2627 : 1 : 0
+RU-UNK-2628 : 1 : 0
+RU-UNK-2629 : 1 : 0
+RU-UNK-2630 : 1 : 0
+RU-UNK-2631 : 1 : 0
+RU-UNK-2632 : 1 : 0
+RU-UNK-2633 : 1 : 0
+RU-UNK-2634 : 1 : 0
+RU-UNK-2635 : 1 : 0
+RU-UNK-2636 : 1 : 0
+RU-UNK-2637 : 1 : 0
+RU-UNK-2638 : 1 : 0
+RU-UNK-2639 : 1 : 0
+RU-UNK-2640 : 1 : 0
+RU-UNK-2641 : 1 : 0
+RU-UNK-2642 : 1 : 0
+RU-UNK-2643 : 1 : 0
+RU-UNK-2644 : 1 : 0
+RU-UNK-2645 : 1 : 0
+RU-UNK-2646 : 1 : 0
+RU-UNK-2647 : 1 : 0
+RU-UNK-2648 : 1 : 0
+RU-UNK-2649 : 1 : 0
+RU-UNK-2650 : 1 : 0
+RU-UNK-2651 : 1 : 0
+RU-UNK-2652 : 1 : 0
+RU-UNK-2653 : 1 : 0
+RU-UNK-2654 : 1 : 0
+RU-UNK-2655 : 1 : 0
+RU-UNK-2656 : 1 : 0
+RU-UNK-2657 : 1 : 0
+RU-UNK-2658 : 1 : 0
+RU-UNK-2659 : 1 : 0
+RU-UNK-2660 : 1 : 0
+RU-UNK-2661 : 1 : 0
+RU-UNK-2662 : 1 : 0
+RU-UNK-2663 : 1 : 0
+RU-UNK-2664 : 1 : 0
+RU-UNK-2665 : 1 : 0
+RU-UNK-2666 : 1 : 0
+RU-UNK-2667 : 1 : 0
+RU-UNK-2668 : 1 : 0
+RU-UNK-2669 : 1 : 0
+RU-UNK-2670 : 1 : 0
+RU-UNK-2671 : 1 : 0
+RU-UNK-2672 : 1 : 0
+RU-UNK-2673 : 1 : 0
+RU-UNK-2674 : 1 : 0
+RU-UNK-2675 : 1 : 0
+RU-UNK-2676 : 1 : 0
+RU-UNK-2677 : 1 : 0
+RU-UNK-2678 : 1 : 0
+RU-UNK-2679 : 1 : 0
+RU-UNK-2680 : 1 : 0
+RU-UNK-2681 : 1 : 0
+RU-UNK-2682 : 1 : 0
+RU-UNK-2683 : 1 : 0
+RU-UNK-2684 : 1 : 0
+RU-UNK-2685 : 1 : 0
+RU-UNK-2686 : 1 : 0
+RU-UNK-2687 : 1 : 0
+RU-UNK-2688 : 1 : 0
+RU-UNK-2689 : 1 : 0
+RU-UNK-2690 : 1 : 0
+RU-UNK-2691 : 1 : 0
+RU-UNK-2692 : 1 : 0
+RU-UNK-2693 : 1 : 0
+RU-UNK-2694 : 1 : 0
+RU-UNK-2695 : 1 : 0
+RU-UNK-2696 : 1 : 0
+RU-UNK-2697 : 1 : 0
+RU-UNK-2698 : 1 : 0
+RU-UNK-2699 : 1 : 0
+RU-UNK-2700 : 1 : 0
+RU-UNK-2701 : 1 : 0
+RU-UNK-2702 : 1 : 0
+RU-UNK-2703 : 1 : 0
+RU-UNK-2704 : 1 : 0
+RU-UNK-2705 : 1 : 0
+RU-UNK-2706 : 1 : 0
+RU-UNK-2707 : 1 : 0
+RU-UNK-2708 : 1 : 0
+RU-UNK-2709 : 1 : 0
+RU-UNK-2710 : 1 : 0
+RU-UNK-2711 : 1 : 0
+RU-UNK-2712 : 1 : 0
+RU-UNK-2713 : 1 : 0
+RU-UNK-2714 : 1 : 0
+RU-UNK-2715 : 1 : 0
+RU-UNK-2716 : 1 : 0
+RU-UNK-2717 : 1 : 0
+RU-UNK-2718 : 1 : 0
+RU-UNK-2719 : 1 : 0
+RU-UNK-2720 : 1 : 0
+RU-UNK-2721 : 1 : 0
+RU-UNK-2722 : 1 : 0
+RU-UNK-2723 : 1 : 0
+RU-UNK-2724 : 1 : 0
+RU-UNK-2725 : 1 : 0
+RU-UNK-2726 : 1 : 0
+RU-UNK-2727 : 1 : 0
+RU-UNK-2728 : 1 : 0
+RU-UNK-2729 : 1 : 0
+RU-UNK-2730 : 1 : 0
+RU-UNK-2731 : 1 : 0
+RU-UNK-2732 : 1 : 0
+RU-UNK-2733 : 1 : 0
+RU-UNK-2734 : 1 : 0
+RU-UNK-2735 : 1 : 0
+RU-UNK-2736 : 1 : 0
+RU-UNK-2737 : 1 : 0
+RU-UNK-2738 : 1 : 0
+RU-UNK-2739 : 1 : 0
+RU-UNK-2740 : 1 : 0
+RU-UNK-2741 : 1 : 0
+RU-UNK-2742 : 1 : 0
+RU-UNK-2743 : 1 : 0
+RU-UNK-2744 : 1 : 0
+RU-UNK-2745 : 1 : 0
+RU-UNK-2746 : 1 : 0
+RU-UNK-2747 : 1 : 0
+RU-UNK-2748 : 1 : 0
+RU-UNK-2749 : 1 : 0
+RU-UNK-2750 : 1 : 0
+RU-UNK-2751 : 1 : 0
+RU-UNK-2752 : 1 : 0
+RU-UNK-2753 : 1 : 0
+RU-UNK-2754 : 1 : 0
+RU-UNK-2755 : 1 : 0
+RU-UNK-2756 : 1 : 0
+RU-UNK-2757 : 1 : 0
+RU-UNK-2758 : 1 : 0
+RU-UNK-2759 : 1 : 0
+RU-UNK-2760 : 1 : 0
+RU-UNK-2761 : 1 : 0
+RU-UNK-2762 : 1 : 0
+RU-UNK-2763 : 1 : 0
+RU-UNK-2764 : 1 : 0
+RU-UNK-2765 : 1 : 0
+RU-UNK-2766 : 1 : 0
+RU-UNK-2767 : 1 : 0
+RU-UNK-2768 : 1 : 0
+RU-UNK-2769 : 1 : 0
+RU-UNK-2770 : 1 : 0
+RU-UNK-2771 : 1 : 0
+RU-UNK-2772 : 1 : 0
+RU-UNK-2773 : 1 : 0
+RU-UNK-2774 : 1 : 0
+RU-UNK-2775 : 1 : 0
+RU-UNK-2776 : 1 : 0
+RU-UNK-2777 : 1 : 0
+RU-UNK-2778 : 1 : 0
+RU-UNK-2779 : 1 : 0
+RU-UNK-2780 : 1 : 0
+RU-UNK-2781 : 1 : 0
+RU-UNK-2782 : 1 : 0
+RU-UNK-2783 : 1 : 0
+RU-UNK-2784 : 1 : 0
+RU-UNK-2785 : 1 : 0
+RU-UNK-2786 : 1 : 0
+RU-UNK-2787 : 1 : 0
+RU-UNK-2788 : 1 : 0
+RU-UNK-2789 : 1 : 0
+RU-UNK-2790 : 1 : 0
+RU-UNK-2791 : 1 : 0
+RU-UNK-2792 : 1 : 0
+RU-UNK-2793 : 1 : 0
+RU-UNK-2794 : 1 : 0
+RU-UNK-2795 : 1 : 0
+RU-UNK-2796 : 1 : 0
+RU-UNK-2797 : 1 : 0
+RU-UNK-2798 : 1 : 0
+RU-UNK-2799 : 1 : 0
+RU-UNK-2800 : 1 : 0
+RU-UNK-2801 : 1 : 0
+RU-UNK-2802 : 1 : 0
+RU-UNK-2803 : 1 : 0
+RU-UNK-2804 : 1 : 0
+RU-UNK-2805 : 1 : 0
+RU-UNK-2806 : 1 : 0
+RU-UNK-2807 : 1 : 0
+RU-UNK-2808 : 1 : 0
+RU-UNK-2809 : 1 : 0
+RU-UNK-2810 : 1 : 0
+RU-UNK-2811 : 1 : 0
+RU-UNK-2812 : 1 : 0
+RU-UNK-2813 : 1 : 0
+RU-UNK-2814 : 1 : 0
+RU-UNK-2815 : 1 : 0
+RU-UNK-2816 : 1 : 0
+RU-UNK-2817 : 1 : 0
+RU-UNK-2818 : 1 : 0
+RU-UNK-2819 : 1 : 0
+RU-UNK-2820 : 1 : 0
+RU-UNK-2821 : 1 : 0
+RU-UNK-2822 : 1 : 0
+RU-UNK-2823 : 1 : 0
+RU-UNK-2824 : 1 : 0
+Mourmanskaïa oblast;Pechengskiy : 1 : 54991
+Nenetski national okroug;Nenetsky nat. okroug : 1 : 22196
+Mourmanskaïa oblast;Kolskiy : 1 : 69118
+Mourmanskaïa oblast;Severomorsk : 1 : 91303
+Mourmanskaïa oblast;Polyarnyi : 1 : 26642
+Mourmanskaïa oblast;Murmansk : 1 : 435659
+Mourmanskaïa oblast;Lovozerskiy : 1 : 16876
+Komi;Vorkuta : 1 : 204879
+Mourmanskaïa oblast;Olenegorsk : 1 : 44087
+Mourmanskaïa oblast;Monchegorsk : 1 : 71014
+Mourmanskaïa oblast;Kovdorskiy : 1 : 33943
+Mourmanskaïa oblast;Kirovsk : 1 : 45035
+Mourmanskaïa oblast;Apatity : 1 : 80116
+Nenetski national okroug;Naryan-Mar : 1 : 26980
+Mourmanskaïa oblast;Kandalaksha : 1 : 73858
+Mourmanskaïa oblast;Polyarniye Zory : 1 : 24082
+Mourmanskaïa oblast;Terskiy : 1 : 9576
+Komi;Ust-Tsilemskiy : 1 : 16733
+Komi;Usinskiy : 1 : 17316
+Komi;Inta : 1 : 67904
+Karelia;Loukhskiy : 1 : 24621
+Arkhangelskaïa oblast rés;Mezenskiy : 1 : 17607
+Komi;Izhemskiy : 1 : 23640
+Komi;Usinsk : 1 : 50685
+Karelia;Kemskiy : 1 : 7020
+Arkhangelskaïa oblast rés;Primorskiy : 1 : 32755
+Komi;Pechorskiy : 1 : 26753
+Karelia;Kalevalskiy : 1 : 11767
+Arkhangelskaïa oblast rés;Leshukonskiy : 1 : 15738
+Arkhangelskaïa oblast rés;Pinezhskiy : 1 : 41018
+Arkhangelskaïa oblast rés;Solovetskiy : 1 : 1475
+Komi;Pechora : 1 : 64013
+Karelia;Kem' : 1 : 18391
+Karelia;Belomorskiy : 1 : 29762
+Komi;Udorskiy : 1 : 21208
+RU-UNK-2825 : 1 : 7296
+RU-UNK-2826 : 1 : 7296
+Arkhangelskaïa oblast rés;Kholmogorskiy : 1 : 35313
+Karelia;Kostomuksha : 1 : 32828
+Arkhangelskaïa oblast rés;Arkhangelsk : 1 : 412537
+Arkhangelskaïa oblast rés;Severodvinsk : 1 : 248860
+Arkhangelskaïa oblast rés;Onezhskiy : 1 : 21837
+Komi;Knyazhpogostskiy : 1 : 35022
+Karelia;Muyezerskiy : 1 : 20270
+Komi;Sosnogorskiy : 1 : 30255
+Komi;Ukhta : 1 : 137656
+Arkhangelskaïa oblast rés;Novodvinsk : 1 : 48887
+Karelia;Segezhskiy : 1 : 17403
+Arkhangelskaïa oblast rés;Plesetskiy : 1 : 79478
+Arkhangelskaïa oblast rés;Onega : 1 : 25673
+Komi;Vuktylskiy : 1 : 18484
+Karelia;Medvezhyegorskiy : 1 : 45978
+Karelia;Segezha : 1 : 37277
+Komi;Troitsko-Pechorskiy : 1 : 24613
+Arkhangelskaïa oblast rés;Vinogradovskiy : 1 : 24394
+Komi;Sosnogorsk : 1 : 30255
+Arkhangelskaïa oblast rés;Verkhnetoyemskiy : 1 : 27247
+Karelia;Suoyarvskiy : 1 : 26203
+Karelia;Kondopozhskiy : 1 : 11272
+Komi;Kortkerosskiy : 1 : 26558
+Arkhangelskaïa oblast rés;Lenskiy : 1 : 19771
+Karelia;Pudozhskiy : 1 : 31246
+Komi;Ust-Vymskiy : 1 : 39497
+Komi;Ust-Kulomskiy : 1 : 38427
+Arkhangelskaïa oblast rés;Shenkurskiy : 1 : 22132
+Arkhangelskaïa oblast rés;Nyandomskiy : 1 : 39444
+Arkhangelskaïa oblast rés;Krasnoborskiy : 1 : 20165
+Karelia;Kondopoga : 1 : 37079
+Karelia;Sortavala : 1 : 37574
+Komi;Syktyvdinskiy : 1 : 27434
+Arkhangelskaïa oblast rés;Kargapolskiy : 1 : 25968
+Karelia;Pryazhinskiy : 1 : 22248
+Karelia;Prionezhskiy : 1 : 24423
+Arkhangelskaïa oblast rés;Velskiy : 1 : 69936
+Karelia;Pitkyarantskiy : 1 : 12854
+Arkhangelskaïa oblast rés;Ustyanskiy : 1 : 43870
+Arkhangelskaïa oblast rés;Kotlasskiy : 1 : 30099
+Komi;Syktyvkvar : 1 : 234648
+Karelia;Petrozavodsk : 1 : 276464
+Karelia;Lakhdenpokhskiy : 1 : 19479
+Arkhangelskaïa oblast rés;Vilegodskiy : 1 : 16427
+Karelia;Pytkiaranta : 1 : 14733
+Vologodskaïa oblast;Vytegorskiy : 1 : 37257
+Komi;Sysolskiy : 1 : 18776
+Karelia;Olonetskiy : 1 : 30553
+Arkhangelskaïa oblast rés;Konoshskiy : 1 : 39149
+Arkhangelskaïa oblast rés;Koryazhma : 1 : 42887
+Arkhangelskaïa oblast rés;Kotlas : 1 : 82232
+Vologodskaïa oblast;Velikoustyugskiy : 1 : 26199
+Komi;Priluzskiy : 1 : 28115
+Vologodskaïa oblast;Tarnogskiy : 1 : 17533
+Komi;Koygorodskiy : 1 : 11771
+Vologodskaïa oblast;Nyuksenskiy : 1 : 13647
+Vologodskaïa oblast;Verkhovazhskiy : 1 : 18329
+Vologodskaïa oblast;Kirillovskiy : 1 : 21617
+Vologodskaïa oblast;Velikiy Ustyug : 1 : 47617
+Vologodskaïa oblast;Vozhegodskiy : 1 : 22015
+Vologodskaïa oblast;Vashkinskiy : 1 : 11954
+Vologodskaïa oblast;Belozerskiy : 1 : 24306
+Vologodskaïa oblast;Babayevskiy : 1 : 28690
+Vologodskaïa oblast;Kichmengsko Gorodetskiy : 1 : 26199
+Vologodskaïa oblast;Kharovskiy : 1 : 24605
+Vologodskaïa oblast;Totemskiy : 1 : 27893
+Vologodskaïa oblast;Syamzhenskiy : 1 : 12352
+Vologodskaïa oblast;Uct-Kubinskiy : 1 : 10858
+Vologodskaïa oblast;Babushkinskiy : 1 : 17732
+Vologodskaïa oblast;Nikolskiy : 1 : 31180
+Vologodskaïa oblast;Vologodskiy : 1 : 57180
+Vologodskaïa oblast;Sokolskiy : 1 : 17533
+Vologodskaïa oblast;Kaduyskiy : 1 : 20123
+Vologodskaïa oblast;Cherepovetskiy : 1 : 47119
+Vologodskaïa oblast;Sheksninskiy : 1 : 34268
+Vologodskaïa oblast;Mezhdurechenskiy : 1 : 9464
+Vologodskaïa oblast;Sokol : 1 : 46919
+Vologodskaïa oblast;Chagodeschenskiy : 1 : 17632
+Vologodskaïa oblast;Vologda : 1 : 296659
+Vologodskaïa oblast;Ustyuzhenskiy : 1 : 22912
+Vologodskaïa oblast;Cherepovetz : 1 : 316682
+Vologodskaïa oblast;Gryazovetskiy : 1 : 45923
+RU-UNK-2827 : 1 : 7296
+RU-UNK-2828 : 1 : 7296
+Tambovskaïa oblast;Morshanskiy : 1 : 44378
+Lipetskaïa oblast;Chaplyginskiy : 1 : 39494
+Lipetskaïa oblast;Dankovskiy : 1 : 19295
+Tambovskaïa oblast;Staroyuryevskiy : 1 : 21042
+Tambovskaïa oblast;Sosnovskiy : 1 : 46173
+Tambovskaïa oblast;Morshansk : 1 : 49763
+Lipetskaïa oblast;Lev -Tolstovskiy : 1 : 18993
+Tambovskaïa oblast;Pervomayskiy : 1 : 35403
+Tambovskaïa oblast;Pichayevskiy : 1 : 19048
+Lipetskaïa oblast;Dankov : 1 : 25023
+Tambovskaïa oblast;Michurinskiy : 1 : 38195
+Tambovskaïa oblast;Nikiforovskiy : 1 : 26128
+Lipetskaïa oblast;Lebedyanskiy : 1 : 46428
+Tambovskaïa oblast;Bondarskiy : 1 : 18150
+Tambovskaïa oblast;Gavrilovskiy : 1 : 15358
+Tambovskaïa oblast;Tambovskiy : 1 : 80978
+Lipetskaïa oblast;Krasninskiy : 1 : 16481
+Lipetskaïa oblast;Dobrovskiy : 1 : 27334
+Lipetskaïa oblast;Stanovlyanskiy : 1 : 21908
+Tambovskaïa oblast;Michurinsk : 1 : 121367
+Tambovskaïa oblast;Kirsanovskiy : 1 : 24533
+Tambovskaïa oblast;Rasskazovskiy : 1 : 25131
+Lipetskaïa oblast;Izmalkovskiy : 1 : 20300
+Tambovskaïa oblast;Umetskiy : 1 : 14859
+Lipetskaïa oblast;Lipetskiy : 1 : 48237
+Tambovskaïa oblast;Petrovskiy : 1 : 27824
+Lipetskaïa oblast;Zadonskiy : 1 : 38992
+Lipetskaïa oblast;Yeletskiy : 1 : 34369
+Tambovskaïa oblast;Tambov : 1 : 334283
+Lipetskaïa oblast;Lipetsk : 1 : 506890
+Lipetskaïa oblast;Gryazinskiy : 1 : 25425
+Tambovskaïa oblast;Rasskazovo : 1 : 49065
+Tambovskaïa oblast;Kirsanovo : 1 : 19945
+Lipetskaïa oblast;Eletz : 1 : 119487
+Tambovskaïa oblast;Kotovsk : 1 : 39192
+Tambovskaïa oblast;Znamenskiy : 1 : 23037
+Tambovskaïa oblast;Inzhavinskiy : 1 : 33209
+Lipetskaïa oblast;Gryazy : 1 : 47232
+Lipetskaïa oblast;Dolgorukovskiy : 1 : 23516
+Lipetskaïa oblast;Dobrinskiy : 1 : 43212
+Tambovskaïa oblast;Mordovskiy : 1 : 27425
+Tambovskaïa oblast;Sampurskiy : 1 : 18749
+Tambovskaïa oblast;Rzhaksinskiy : 1 : 24932
+Kourskaïa oblast;Zheleznogorskiy : 1 : 21509
+Kourskaïa oblast;Ponyrovskiy : 1 : 15780
+Kourskaïa oblast;Dmitriyevskiy : 1 : 30052
+Lipetskaïa oblast;Usmanskiy : 1 : 56477
+Lipetskaïa oblast;Khlevenskiy : 1 : 23817
+Kourskaïa oblast;Fatezhskiy : 1 : 27439
+RU-UNK-2829 : 1 : 91764
+Lipetskaïa oblast;Terbunskiy : 1 : 25827
+Tambovskaïa oblast;Tokarevskiy : 1 : 25430
+Lipetskaïa oblast;Volovskiy : 1 : 18390
+Kourskaïa oblast;Zolotukhinskiy : 1 : 31560
+Tambovskaïa oblast;Uvarovskiy : 1 : 13762
+Kourskaïa oblast;Schigrovskiy : 1 : 17890
+Voronejskaïa oblast;Ramonskiy : 1 : 42016
+Tambovskaïa oblast;Muchkapskiy : 1 : 20843
+Voronejskaïa oblast;Semilukskiy : 1 : 73880
+Tambovskaïa oblast;Zherdevskiy : 1 : 38993
+Kourskaïa oblast;Cheremisinovskiy : 1 : 14473
+Kourskaïa oblast;Khomutovskiy : 1 : 20202
+Tambovskaïa oblast;Uvarovo : 1 : 35203
+Kourskaïa oblast;Konyshevskiy : 1 : 18493
+Kourskaïa oblast;Sovetskiy : 1 : 27137
+Kourskaïa oblast;Kastorenskiy : 1 : 28544
+Voronejskaïa oblast;Verkhnekhavskiy : 1 : 30256
+Voronejskaïa oblast;Ertilskiy : 1 : 36287
+Kourskaïa oblast;Kurskiy : 1 : 51259
+Kourskaïa oblast;Tschigry : 1 : 21509
+Kourskaïa oblast;Kurchatovskiy : 1 : 23921
+Voronejskaïa oblast;Voronezh : 1 : 958833
+Kourskaïa oblast;Oktyabrskiy : 1 : 25027
+Voronejskaïa oblast;Novousmanskiy : 1 : 67849
+Voronejskaïa oblast;Paninskiy : 1 : 35684
+Kourskaïa oblast;L'govsky : 1 : 22514
+Kourskaïa oblast;Kursk : 1 : 435401
+Kourskaïa oblast;Timskiy : 1 : 16885
+Kourskaïa oblast;Rylskiy : 1 : 45832
+Voronejskaïa oblast;Nizhnedevitskiy : 1 : 28647
+Voronejskaïa oblast;Ternovskiy : 1 : 29854
+Voronejskaïa oblast;Gribanovskiy : 1 : 42921
+Voronejskaïa oblast;Borisoglebskiy : 1 : 15178
+Voronejskaïa oblast;Khokholskiy : 1 : 38197
+Kourskaïa oblast;Lgov : 1 : 25328
+Voronejskaïa oblast;Anninskiy : 1 : 56792
+Kourskaïa oblast;Kurchatov : 1 : 45530
+Kourskaïa oblast;Solntsevskiy : 1 : 22212
+Kourskaïa oblast;Gorshechenskiy : 1 : 25831
+Kourskaïa oblast;Medvenskiy : 1 : 21207
+Kourskaïa oblast;Manturovskiy : 1 : 20102
+Kourskaïa oblast;Bolshesoldatskiy : 1 : 17991
+Kourskaïa oblast;Korenevskiy : 1 : 23519
+Kourskaïa oblast;Glushkovskiy : 1 : 31359
+Voronejskaïa oblast;Kashirskiy : 1 : 30055
+Voronejskaïa oblast;Povorinskiy : 1 : 18696
+Kourskaïa oblast;Sudzhanskiy : 1 : 34374
+Belgorodskaïa oblast;Gubkinskiy : 1 : 33649
+Belgorodskaïa oblast;Starooskolskiy : 1 : 33445
+Voronejskaïa oblast;Novokhoperskiy : 1 : 51063
+Voronejskaïa oblast;Borisoglebsk : 1 : 70965
+Voronejskaïa oblast;Bobrovskiy : 1 : 59104
+Kourskaïa oblast;Oboyanskiy : 1 : 39500
+Kourskaïa oblast;Pristenskiy : 1 : 24222
+Voronejskaïa oblast;Talovskiy : 1 : 51967
+Belgorodskaïa oblast;Staryi Oskol : 1 : 192794
+Voronejskaïa oblast;Repiyevka : 1 : 19701
+RU-UNK-2830 : 1 : 38599
+Belgorodskaïa oblast;Gubkin : 1 : 80288
+Voronejskaïa oblast;Liskinskiy : 1 : 47947
+Kourskaïa oblast;Belovskiy : 1 : 25127
+Voronejskaïa oblast;Ostrogozhskiy : 1 : 30859
+Belgorodskaïa oblast;Prokhorovskiy : 1 : 30376
+Voronejskaïa oblast;Povorino : 1 : 18897
+Belgorodskaïa oblast;Ivnyanskiy : 1 : 25160
+Belgorodskaïa oblast;Chernyanskiy : 1 : 34570
+RU-UNK-2831 : 1 : 16876
+Voronejskaïa oblast;Liski : 1 : 54882
+Belgorodskaïa oblast;Rakityanskiy : 1 : 36309
+Voronejskaïa oblast;Buturlinovskiy : 1 : 60712
+Belgorodskaïa oblast;Korochanskiy : 1 : 41729
+Belgorodskaïa oblast;Krasnoyaruzshsky : 1 : 14626
+Belgorodskaïa oblast;Yakovlevskiy : 1 : 47866
+Belgorodskaïa oblast;Novooskolskiy : 1 : 48480
+Voronejskaïa oblast;Ostrogozhsk : 1 : 36287
+Belgorodskaïa oblast;Krasnogvardeyskiy : 1 : 47457
+Voronejskaïa oblast;Vorobyovskiy : 1 : 23521
+Voronejskaïa oblast;Kamenskiy : 1 : 23320
+Voronejskaïa oblast;Pavlovskiy : 1 : 60210
+Belgorodskaïa oblast;Belgorodskiy : 1 : 74151
+Belgorodskaïa oblast;Borisovskiy : 1 : 25467
+Voronejskaïa oblast;Podgorenskiy : 1 : 32568
+Belgorodskaïa oblast;Alekseyevskiy : 1 : 28842
+Belgorodskaïa oblast;Shebekinskiy : 1 : 45002
+Belgorodskaïa oblast;Graivoronskiy : 1 : 27308
+Voronejskaïa oblast;Kalacheyevskiy : 1 : 64331
+Belgorodskaïa oblast;Alekseevka : 1 : 38456
+Belgorodskaïa oblast;Belgorod : 1 : 320232
+Belgorodskaïa oblast;Volokonovskiy : 1 : 37843
+Voronejskaïa oblast;Olkhovatskiy : 1 : 26436
+Voronejskaïa oblast;Verkhnemamonskiy : 1 : 23521
+Belgorodskaïa oblast;Shebekino : 1 : 46025
+Belgorodskaïa oblast;Valuyskiy : 1 : 38661
+Voronejskaïa oblast;Rossoshanskiy : 1 : 31864
+Belgorodskaïa oblast;Veydelevskiy : 1 : 25876
+Voronejskaïa oblast;Petropavlovskiy : 1 : 25632
+Belgorodskaïa oblast;Rovenskiy : 1 : 25876
+Voronejskaïa oblast;Rossosh : 1 : 60411
+Belgorodskaïa oblast;Valuiky : 1 : 35286
+Voronejskaïa oblast;Bogucharskiy : 1 : 36186
+Voronejskaïa oblast;Kantemirovskiy : 1 : 43222
+RU-UNK-2832 : 1 : 91764
+RU-UNK-2833 : 1 : 38599
+RU-UNK-2834 : 1 : 16876
+Yakoutia-Saha respoublika;Anabarskiy : 1 : 3842
+Yakoutia-Saha respoublika;Bulunskiy : 1 : 14024
+Yakoutia-Saha respoublika;Ust-Yanskiy : 1 : 29872
+Yakoutia-Saha respoublika;Allaikhovskiy : 1 : 4995
+Yakoutia-Saha respoublika;Olenekskiy : 1 : 4130
+Yakoutia-Saha respoublika;Nizhnekolymskiy : 1 : 11238
+Tchoukotski nat. okroug;Chaunskiy : 1 : 19332
+Yakoutia-Saha respoublika;Verkhoyanskiy : 1 : 19595
+Tchoukotski nat. okroug;Shmidtovskiy : 1 : 9940
+Yakoutia-Saha respoublika;Srednekolymskiy : 1 : 9605
+Tchoukotski nat. okroug;Bilibinskiy : 1 : 18549
+RU-UNK-2835 : 1 : 2882
+Yakoutia-Saha respoublika;Abyiskiy : 1 : 5667
+Yakoutia-Saha respoublika;Zhiganskiy : 1 : 5475
+Tchoukotski nat. okroug;Iultinskiy : 1 : 9940
+Tchoukotski nat. okroug;Anadyrskiy : 1 : 15419
+Yakoutia-Saha respoublika;Momskiy : 1 : 5571
+Yakoutia-Saha respoublika;Verkhekolymskiy : 1 : 8933
+Tchoukotski nat. okroug;Chukotskiy : 1 : 4774
+Yakoutia-Saha respoublika;Vilyuyskiy : 1 : 27759
+Yakoutia-Saha respoublika;Mirninskiy : 1 : 50908
+Tchoukotski nat. okroug;Providenskiy : 1 : 6574
+Yakoutia-Saha respoublika;Verkhnevilyuiskiy : 1 : 20747
+Yakoutia-Saha respoublika;Kobyayskiy : 1 : 18250
+Magadanskaïa oblast résid;Srednekanskiy : 1 : 11061
+Yakoutia-Saha respoublika;Tomponskiy : 1 : 20459
+Yakoutia-Saha respoublika;Leninskiy : 1 : 28816
+Magadanskaïa oblast résid;Severo-Evenskiy : 1 : 6248
+Yakoutia-Saha respoublika;Oymyakonskiy : 1 : 28335
+Magadanskaïa oblast résid;Omsukchanskiy : 1 : 12665
+Koriakski national okroug;Penzhinskiy : 1 : 4509
+Tchoukotski nat. okroug;Anadyr' : 1 : 11897
+Magadanskaïa oblast résid;Susumanskiy : 1 : 31832
+Tchoukotski nat. okroug;Beringovskiy : 1 : 5870
+Yakoutia-Saha respoublika;Suntarskiy : 1 : 26030
+Yakoutia-Saha respoublika;Ust-Aldanskiy : 1 : 21708
+Magadanskaïa oblast résid;Yagodninskiy : 1 : 35209
+Yakoutia-Saha respoublika;Namskiy : 1 : 18442
+Yakoutia-Saha respoublika;Tattinskiy : 1 : 16521
+Yakoutia-Saha respoublika;Gornyi : 1 : 10182
+Yakoutia-Saha respoublika;Ust-Mayskiy : 1 : 19499
+Koriakski national okroug;Olyutorskiy : 1 : 10822
+Khabarovski kraï résiduel;Okhotskiy : 1 : 18299
+Magadanskaïa oblast résid;Tenkinskiy : 1 : 16887
+Yakoutia-Saha respoublika;Mirny : 1 : 38517
+Yakoutia-Saha respoublika;Churapchinskiy : 1 : 18538
+Yakoutia-Saha respoublika;Megino-Kangalasskiy : 1 : 31313
+Yakoutia-Saha respoublika;Yakutsk : 1 : 220824
+Magadanskaïa oblast résid;Khasynskiy : 1 : 22037
+Yakoutia-Saha respoublika;Ordzhonikidzevskiy : 1 : 35155
+Yakoutia-Saha respoublika;Olekminskiy : 1 : 30449
+Yakoutia-Saha respoublika;Lenskiy : 1 : 48506
+Yakoutia-Saha respoublika;Amginskiy : 1 : 16233
+Magadanskaïa oblast résid;Olskiy : 1 : 16127
+Yakoutia-Saha respoublika;Aldanskiy : 1 : 59360
+Koriakski national okroug;Karaginskiy : 1 : 8297
+Koriakski national okroug;Tigilskiy : 1 : 10912
+Magadanskaïa oblast résid;Magadan : 1 : 128931
+Khabarovski kraï résiduel;Ayano-Mayskiy : 1 : 4624
+Yakoutia-Saha respoublika;Neriungri : 1 : 111228
+Kamtchatskaïa oblast rési;Ust-Kamchatskiy : 1 : 25112
+Amourskaïa oblast;Tyndinskiy : 1 : 30169
+Kamtchatskaïa oblast rési;Bystrinskiy : 1 : 2780
+Kamtchatskaïa oblast rési;Milkovskiy : 1 : 14919
+Kamtchatskaïa oblast rési;Sobolevskiy : 1 : 4911
+Khabarovski kraï résiduel;Tuguro-Chumikanskiy : 1 : 3247
+Amourskaïa oblast;Zeyskiy : 1 : 28191
+Kamtchatskaïa oblast rési;Aleutskiy : 1 : 1205
+Amourskaïa oblast;Tynda : 1 : 56778
+Kamtchatskaïa oblast rési;Yelizovskiy : 1 : 26410
+Amourskaïa oblast;Skovorodinskiy : 1 : 41940
+Sakhalinskaïa oblast;Okhinskiy : 1 : 16955
+Khabarovski kraï résiduel;Nikolayevskiy : 1 : 19971
+Amourskaïa oblast;Magdagachinskiy : 1 : 33928
+Amourskaïa oblast;Selemdzhinskiy : 1 : 19783
+Amourskaïa oblast;Zeya : 1 : 32346
+Kamtchatskaïa oblast rési;Ust-Bolsheretskiy : 1 : 12695
+Khabarovski kraï résiduel;Poliny Osipenko. imeni : 1 : 8067
+Sakhalinskaïa oblast;Okha : 1 : 34379
+Amourskaïa oblast;Mazanovskiy : 1 : 21168
+Khabarovski kraï résiduel;Ulchskiy : 1 : 29219
+Kamtchatskaïa oblast rési;Elizovo : 1 : 44294
+Khabarovski kraï résiduel;Nikolayevsk-Na-Amure : 1 : 36007
+Kamtchatskaïa oblast rési;Petropavlovsk-Kamchatsk : 1 : 260666
+Amourskaïa oblast;Shimanovskiy : 1 : 9496
+Sakhalinskaïa oblast;Noglikskiy : 1 : 15831
+Khabarovski kraï résiduel;Verkhnebureinskiy : 1 : 44763
+Khabarovski kraï résiduel;Solnechnyi : 1 : 45156
+Amourskaïa oblast;Shimanovsk : 1 : 26312
+Sakhalinskaïa oblast;Alexandrovsk-Sakhalinskiy : 1 : 7962
+Amourskaïa oblast;Svobodnenskiy : 1 : 17508
+Sakhalinskaïa oblast;Tymovskiy : 1 : 24355
+Khabarovski kraï résiduel;Komsomolskiy : 1 : 33547
+Amourskaïa oblast;Seryshevskiy : 1 : 36698
+Amourskaïa oblast;Romnenskiy : 1 : 15233
+Amourskaïa oblast;Svobodnyi : 1 : 80221
+Amourskaïa oblast;Blagoveschenskiy : 1 : 18992
+Khabarovski kraï résiduel;Vaninskiy : 1 : 50862
+Amourskaïa oblast;Belogorskiy : 1 : 29378
+Amourskaïa oblast;Belogorsk : 1 : 74286
+Sakhalinskaïa oblast;Severo-Kurilskiy : 1 : 4684
+Sakhalinskaïa oblast;Aleks.-Sakhalinskiy : 1 : 18173
+Amourskaïa oblast;Ivanovskiy : 1 : 34423
+Amourskaïa oblast;Bureyskiy : 1 : 29972
+Khabarovski kraï résiduel;Komsomolsk-Na-Amure : 1 : 311075
+Amourskaïa oblast;Oktyabrskiy : 1 : 24432
+Amourskaïa oblast;Zavitinskiy : 1 : 30565
+Khabarovski kraï résiduel;Khabarovskiy : 1 : 77720
+Khabarovski kraï résiduel;Amurskiy : 1 : 30399
+Sakhalinskaïa oblast;Smirnykhovskiy : 1 : 19578
+Amourskaïa oblast;Blagoveschensk : 1 : 213065
+Amourskaïa oblast;Tambovskiy : 1 : 25916
+Khabarovski kraï résiduel;Amursk : 1 : 59126
+Amourskaïa oblast;Arkharinskiy : 1 : 26707
+Amourskaïa oblast;Mikhaylovskiy : 1 : 21069
+Khabarovski kraï résiduel;Nanayskiy : 1 : 21840
+Amourskaïa oblast;Konstantinovskiy : 1 : 17211
+Sakhalinskaïa oblast;Poronayskiy : 1 : 16674
+Amourskaïa oblast;Raychikhinsk : 1 : 47677
+Sakhalinskaïa oblast;Uglegorskiy : 1 : 26416
+Evreïskaïa oblast;Obluchenskiy : 1 : 40137
+Sakhalinskaïa oblast;Poronaysk : 1 : 23419
+Khabarovski kraï résiduel;Sovetsko-Gavanskiy : 1 : 24988
+Sakhalinskaïa oblast;Makarovskiy : 1 : 14145
+Sakhalinskaïa oblast;Uglegorsk : 1 : 17986
+Evreïskaïa oblast;Birobidzhanskiy : 1 : 15332
+Khabarovski kraï résiduel;Sovetskaya Gavan : 1 : 34138
+Evreïskaïa oblast;Smidovichskiy : 1 : 29492
+Khabarovski kraï résiduel;Lazo. imeni : 1 : 62569
+Evreïskaïa oblast;Birobidzhan : 1 : 83300
+Sakhalinskaïa oblast;Tomarinskiy : 1 : 16580
+Evreïskaïa oblast;Oktyabrskiy : 1 : 16602
+Khabarovski kraï résiduel;Khabarovsk : 1 : 610542
+Evreïskaïa oblast;Leninskiy : 1 : 27539
+Primorski kraï;Terneyskiy : 1 : 15598
+Sakhalinskaïa oblast;Dolinskiy : 1 : 20796
+Khabarovski kraï résiduel;Vyazemskiy : 1 : 29514
+Sakhalinskaïa oblast;Kholmskiy : 1 : 19297
+Sakhalinskaïa oblast;Dolinsk : 1 : 14894
+Primorski kraï;Pozharskiy : 1 : 37514
+Khabarovski kraï résiduel;Bikinskiy : 1 : 10428
+Sakhalinskaïa oblast;Yuzhno-Sakhalinsk : 1 : 160652
+Sakhalinskaïa oblast;Kurilskiy : 1 : 9649
+Sakhalinskaïa oblast;Korsakovskiy : 1 : 10585
+Sakhalinskaïa oblast;Anivskiy : 1 : 36627
+Sakhalinskaïa oblast;Kholmsk : 1 : 47587
+Sakhalinskaïa oblast;Nevelskiy : 1 : 12178
+Khabarovski kraï résiduel;Bikin : 1 : 18003
+Sakhalinskaïa oblast;Nevel'sk : 1 : 23325
+Sakhalinskaïa oblast;Korsakov : 1 : 43278
+Primorski kraï;Krasnoarmeyskiy : 1 : 27543
+Primorski kraï;Dalnerechenskiy : 1 : 17079
+Primorski kraï;Dalnerechensk : 1 : 39093
+Primorski kraï;Lesozavodskiy : 1 : 12834
+Primorski kraï;Lesozavodsk : 1 : 44622
+Primorski kraï;Khankayskiy : 1 : 29715
+Primorski kraï;Kirovskiy : 1 : 28530
+Primorski kraï;Dalnegorskiy : 1 : 13426
+Primorski kraï;Spasskiy : 1 : 31985
+Primorski kraï;Chuguyevskiy : 1 : 31393
+Primorski kraï;Pogranichnyi : 1 : 26852
+Primorski kraï;Yakovlevskiy : 1 : 21324
+Primorski kraï;Kavalerovskiy : 1 : 36230
+Primorski kraï;Khorolskiy : 1 : 43437
+Primorski kraï;Dalnegorsk : 1 : 50347
+Primorski kraï;Spassk-Dalniy : 1 : 60614
+Primorski kraï;Chernigovskiy : 1 : 45510
+Sakhalinskaïa oblast;Yuzhno-Kurilskiy : 1 : 13302
+Primorski kraï;Anuchinskiy : 1 : 18757
+Primorski kraï;Mikhaylovskiy : 1 : 44424
+Primorski kraï;Oktyabrskiy : 1 : 39982
+Primorski kraï;Arsenyev : 1 : 70388
+Primorski kraï;Olginsky : 1 : 15993
+Primorski kraï;Ussuriyskiy : 1 : 31097
+RU-UNK-2836 : 1 : 159137
+Primorski kraï;Partizanskiy : 1 : 29419
+Primorski kraï;Shkotovskiy : 1 : 32282
+Primorski kraï;Nadezhdinskiy : 1 : 42943
+Primorski kraï;Lazovskiy : 1 : 20633
+Primorski kraï;Artyom : 1 : 113923
+Primorski kraï;Partizansk : 1 : 60417
+Primorski kraï;Khasanskiy : 1 : 44918
+Primorski kraï;Vladivostok : 1 : 659254
+Primorski kraï;Bolshoy Kamen : 1 : 80753
+Primorski kraï;Nakhodka : 1 : 192011
+RU-UNK-2837 : 1 : 2882
+RU-UNK-2838 : 1 : 159137
+Kirovskaïa oblast;Luzskiy : 1 : 25795
+Kirovskaïa oblast;Podosinovskiy : 1 : 25405
+Kirovskaïa oblast;Verkhnekamskiy : 1 : 50616
+Kirovskaïa oblast;Oparinskiy : 1 : 16645
+Kirovskaïa oblast;Nagorskiy : 1 : 15866
+Kirovskaïa oblast;Murashinskiy : 1 : 18786
+Kirovskaïa oblast;Belokholunitskiy : 1 : 26281
+Kirovskaïa oblast;Afanasyevskiy : 1 : 18981
+Kirovskaïa oblast;Darovskiy : 1 : 18105
+Kirovskaïa oblast;Slobodskoy : 1 : 36307
+Kirovskaïa oblast;Yuryanskiy : 1 : 33679
+Kirovskaïa oblast;Omutninskiy : 1 : 57819
+Kirovskaïa oblast;Khalturinskiy : 1 : 19468
+Kirovskaïa oblast;Shabalinskiy : 1 : 16547
+Kirovskaïa oblast;Kotelnichskiy : 1 : 24919
+Kirovskaïa oblast;Kirov : 1 : 508981
+Kirovskaïa oblast;Kirovo-Chepetskiy : 1 : 36112
+Kirovskaïa oblast;Zuyevskiy : 1 : 33387
+Kirovskaïa oblast;Svechinskiy : 1 : 11486
+Kirovskaïa oblast;Falenskiy : 1 : 17132
+Kirovskaïa oblast;Orichevskiy : 1 : 35042
+Kirovskaïa oblast;Kirovo-Chepets : 1 : 97825
+Kirovskaïa oblast;Kumenskiy : 1 : 19954
+Kirovskaïa oblast;Kotelnich' : 1 : 35431
+Kirovskaïa oblast;Verkhoshizhemskiy : 1 : 12459
+Nijegorodskaïa oblast (Go;Vetluzhskiy : 1 : 22197
+Nijegorodskaïa oblast (Go;Shakhunskiy : 1 : 50118
+Nijegorodskaïa oblast (Go;Tonshayevskiy : 1 : 19083
+Kirovskaïa oblast;Bogorodskiy : 1 : 8468
+Kirovskaïa oblast;Arbazhskiy : 1 : 11389
+Kirovskaïa oblast;Sunskiy : 1 : 10026
+Kirovskaïa oblast;Nolinskiy : 1 : 28033
+Kirovskaïa oblast;Tuzhinskiy : 1 : 11973
+Kirovskaïa oblast;Uninskiy : 1 : 12849
+Kirovskaïa oblast;Sovetskiy : 1 : 34944
+Kirovskaïa oblast;Nemskiy : 1 : 11291
+Nijegorodskaïa oblast (Go;Varnavinskiy : 1 : 14664
+Nijegorodskaïa oblast (Go;Urenskiy : 1 : 36459
+Kirovskaïa oblast;Pizhanskiy : 1 : 15185
+Nijegorodskaïa oblast (Go;Tonkinskiy : 1 : 12756
+Kirovskaïa oblast;Kiknurskiy : 1 : 15379
+Nijegorodskaïa oblast (Go;Koverninskiy : 1 : 24406
+Kirovskaïa oblast;Lebyazhskiy : 1 : 12946
+Kirovskaïa oblast;Kilmezskiy : 1 : 18786
+Kirovskaïa oblast;Yaranskiy : 1 : 36794
+Kirovskaïa oblast;Urzhumskiy : 1 : 37865
+Nijegorodskaïa oblast (Go;Semyonovskiy : 1 : 57249
+Nijegorodskaïa oblast (Go;Sharangskiy : 1 : 15266
+Nijegorodskaïa oblast (Go;Krasnobakovskiy : 1 : 26917
+Mariyskaïa respoublika;Sernurskiy : 1 : 28555
+Kirovskaïa oblast;Sanchurskiy : 1 : 17132
+Nijegorodskaïa oblast (Go;Voskresenskiy : 1 : 29328
+Mariyskaïa respoublika;Novotaryalskiy : 1 : 20439
+Mariyskaïa respoublika;Orshanskiy : 1 : 16832
+Mariyskaïa respoublika;Mari-Turekskiy : 1 : 28655
+Nijegorodskaïa oblast (Go;Gorodetskiy : 1 : 69000
+Mariyskaïa respoublika;Kilemarskiy : 1 : 16632
+Mariyskaïa respoublika;Sovetskiy : 1 : 33865
+Mariyskaïa respoublika;Paranginskiy : 1 : 20038
+Mariyskaïa respoublika;Medvedevskiy : 1 : 54504
+Mariyskaïa respoublika;Kuzhenerskiy : 1 : 17834
+Mariyskaïa respoublika;Yurinskiy : 1 : 14227
+Nijegorodskaïa oblast (Go;Borskiy : 1 : 69703
+Nijegorodskaïa oblast (Go;Chkalovskiy : 1 : 29629
+Kirovskaïa oblast;Malmyzhskiy : 1 : 34944
+Nijegorodskaïa oblast (Go;Gorodetz : 1 : 34350
+Mariyskaïa respoublika;Morkinskiy : 1 : 39776
+Nijegorodskaïa oblast (Go;Balakhninskiy : 1 : 60764
+Mariyskaïa respoublika;Yoshkar-Ola : 1 : 275728
+Mariyskaïa respoublika;Gornomariyskiy : 1 : 32863
+Nijegorodskaïa oblast (Go;Balakhna : 1 : 31336
+Nijegorodskaïa oblast (Go;Lyskovskiy : 1 : 47306
+Nijegorodskaïa oblast (Go;Vorotynskiy : 1 : 25812
+Nijegorodskaïa oblast (Go;Volodarskiy : 1 : 52830
+Mariyskaïa respoublika;Zvenigovskiy : 1 : 51699
+Kirovskaïa oblast;Vyatsko-Polyanskiy : 1 : 38254
+Nijegorodskaïa oblast (Go;Nizhniy Novgorod : 1 : 1445090
+Nijegorodskaïa oblast (Go;Bor : 1 : 64380
+Tchouvachskaïa respoublik;Cheboksarskiy : 1 : 55887
+Mariyskaïa respoublika;Kozmodemyansk : 1 : 25048
+Nijegorodskaïa oblast (Go;Kstovskiy : 1 : 48009
+RU-UNK-2839 : 1 : 299504
+Kirovskaïa oblast;Vyatskye Polyany : 1 : 44970
+Nijegorodskaïa oblast (Go;Bogorodskiy : 1 : 34149
+Mariyskaïa respoublika;Volzhskiy : 1 : 25248
+Nijegorodskaïa oblast (Go;Pavlovskiy : 1 : 47808
+Tchouvachskaïa respoublik;Morgaushskiy : 1 : 38291
+Nijegorodskaïa oblast (Go;Kstovo : 1 : 66891
+Tchouvachskaïa respoublik;Yadrinskiy : 1 : 36991
+Nijegorodskaïa oblast (Go;Dalnekonstantinovskiy : 1 : 26315
+Tchouvachskaïa respoublik;Cheboksary : 1 : 457790
+Tchouvachskaïa respoublik;Mariinsko- Posadskiy : 1 : 28893
+Nijegorodskaïa oblast (Go;Bogorodsk : 1 : 37664
+Nijegorodskaïa oblast (Go;Spasskiy : 1 : 16070
+Tchouvachskaïa respoublik;Novocheboksarsk : 1 : 122770
+Nijegorodskaïa oblast (Go;Vachskiy : 1 : 28926
+Tchouvachskaïa respoublik;Tsyvilskiy : 1 : 37091
+Nijegorodskaïa oblast (Go;Sosnovskiy : 1 : 24908
+Nijegorodskaïa oblast (Go;Pavlovo : 1 : 72516
+Nijegorodskaïa oblast (Go;Knyagininskiy : 1 : 13459
+Nijegorodskaïa oblast (Go;Bolshemurashkinskiy : 1 : 14363
+Tchouvachskaïa respoublik;Kozlovskiy : 1 : 28093
+Tchouvachskaïa respoublik;Krasnoarmeyskiy : 1 : 19395
+Nijegorodskaïa oblast (Go;Pilninskiy : 1 : 29127
+Mariyskaïa respoublika;Volzhsk : 1 : 63622
+Tchouvachskaïa respoublik;Alikovskiy : 1 : 23394
+Nijegorodskaïa oblast (Go;Perevozskiy : 1 : 18280
+Tchouvachskaïa respoublik;Krasnochetayskiy : 1 : 24094
+Tchouvachskaïa respoublik;Urmarskiy : 1 : 29793
+Nijegorodskaïa oblast (Go;Navashinskiy : 1 : 30031
+Nijegorodskaïa oblast (Go;Sergachskiy : 1 : 41983
+Nijegorodskaïa oblast (Go;Buturlinskiy : 1 : 18079
+Tchouvachskaïa respoublik;Vurnarskiy : 1 : 44889
+Tchouvachskaïa respoublik;Kanashskiy : 1 : 44189
+Nijegorodskaïa oblast (Go;Arzamasskiy : 1 : 51022
+Nijegorodskaïa oblast (Go;Vadskiy : 1 : 15869
+Tchouvachskaïa respoublik;Shumerlinskiy : 1 : 15796
+Tchouvachskaïa respoublik;Yantikovskiy : 1 : 19995
+Nijegorodskaïa oblast (Go;Ardatovskiy : 1 : 32943
+Tchouvachskaïa respoublik;Shumerlya : 1 : 41990
+Tchouvachskaïa respoublik;Kanash : 1 : 54987
+Nijegorodskaïa oblast (Go;Sechenovskiy : 1 : 18681
+Nijegorodskaïa oblast (Go;Kulebakskiy : 1 : 16472
+Nijegorodskaïa oblast (Go;Krasnooktyabrskiy : 1 : 16572
+Nijegorodskaïa oblast (Go;Arzamas : 1 : 111987
+Nijegorodskaïa oblast (Go;Vyksunskiy : 1 : 31939
+Nijegorodskaïa oblast (Go;Gaginskiy : 1 : 17476
+Tchouvachskaïa respoublik;Ibresinskiy : 1 : 29193
+Nijegorodskaïa oblast (Go;Kulebaki : 1 : 46000
+Tchouvachskaïa respoublik;Poretskiy : 1 : 19395
+Nijegorodskaïa oblast (Go;Shatkovskiy : 1 : 30432
+Tchouvachskaïa respoublik;Komsomolskiy : 1 : 28293
+Tchouvachskaïa respoublik;Yalchikskiy : 1 : 27293
+Nijegorodskaïa oblast (Go;Vyksa : 1 : 63577
+Nijegorodskaïa oblast (Go;Diveyevskiy : 1 : 18581
+Nijegorodskaïa oblast (Go;Bolsheboldinskiy : 1 : 14162
+Nijegorodskaïa oblast (Go;Lukoyanovskiy : 1 : 38166
+Nijegorodskaïa oblast (Go;Pervomayskiy : 1 : 26917
+Mordovskaïa respoublika;Bolsheignatovskiy : 1 : 10541
+Tchouvachskaïa respoublik;Batyrevskiy : 1 : 42290
+Tchouvachskaïa respoublik;Alatyrskiy : 1 : 24794
+Nijegorodskaïa oblast (Go;Voznesenskiy : 1 : 22900
+Mordovskaïa respoublika;Ardatovskiy : 1 : 35602
+Mordovskaïa respoublika;Temnikovskiy : 1 : 26552
+Nijegorodskaïa oblast (Go;Pochinkovskiy : 1 : 37865
+Tchouvachskaïa respoublik;Shemurshinskiy : 1 : 17696
+Tchouvachskaïa respoublik;Alatyr' : 1 : 47689
+Mordovskaïa respoublika;Tengushevskiy : 1 : 14519
+Mordovskaïa respoublika;Ichalkovskiy : 1 : 25558
+Mordovskaïa respoublika;Yelnikovskiy : 1 : 15911
+Mordovskaïa respoublika;Atyashevskiy : 1 : 26353
+Mordovskaïa respoublika;Chamzinskiy : 1 : 36894
+Mordovskaïa respoublika;Staroshaygovskiy : 1 : 17801
+Mordovskaïa respoublika;Romodanovskiy : 1 : 22674
+Mordovskaïa respoublika;Krasnoslobodskiy : 1 : 33016
+Mordovskaïa respoublika;Dubenskiy : 1 : 18099
+Mordovskaïa respoublika;Lyambirskiy : 1 : 34110
+Mordovskaïa respoublika;Atyuriyevskiy : 1 : 14718
+Mordovskaïa respoublika;Zubovo-Polyanskiy : 1 : 67126
+Mordovskaïa respoublika;Torbeyevskiy : 1 : 26055
+Mordovskaïa respoublika;Bolshebereznikovskiy : 1 : 18099
+Mordovskaïa respoublika;Kovylkinskiy : 1 : 31325
+Mordovskaïa respoublika;Kadoshkinsky : 1 : 10442
+Mordovskaïa respoublika;Ruzayevskiy : 1 : 20685
+Mordovskaïa respoublika;Saransk : 1 : 347960
+Mordovskaïa respoublika;Kochkurovskiy : 1 : 13326
+Mordovskaïa respoublika;Ruzaevka : 1 : 50121
+Mordovskaïa respoublika;Kovylkino : 1 : 22475
+Mordovskaïa respoublika;Insarskiy : 1 : 18497
+RU-UNK-2840 : 1 : 299504
+Taïmyrski national okroug;Diksonskiy : 1 : 2245
+Taïmyrski national okroug;Khatangskiy : 1 : 8512
+Taïmyrski national okroug;Dudinka : 1 : 33954
+Taïmyrski national okroug;Ust-Yeniseyskiy : 1 : 3367
+Evenkiski national okroug;Baykitskiy : 1 : 6708
+RU-UNK-2841 : 1 : 276565
+Krasnoïarski kraï résidue;Turukhanskiy : 1 : 18120
+Krasnoïarski kraï résidue;Igarka : 1 : 21157
+Irkoutskaïa oblast résidu;Katangskiy : 1 : 9234
+Evenkiski national okroug;Ilimpiyskiy : 1 : 9480
+Evenkiski national okroug;Tungussko-Chunskiy : 1 : 5277
+Krasnoïarski kraï résidue;Yeniseyskiy : 1 : 39683
+Krasnoïarski kraï résidue;Severo-Yeniseyskiy : 1 : 17918
+Irkoutskaïa oblast résidu;Bodaybinskiy : 1 : 15816
+Krasnoïarski kraï résidue;Boguchanskiy : 1 : 60435
+Krasnoïarski kraï résidue;Kezhemskiy : 1 : 34216
+Irkoutskaïa oblast résidu;Mamsko-Chuyskiy : 1 : 16798
+Krasnoïarski kraï résidue;Motyginskiy : 1 : 26725
+Irkoutskaïa oblast résidu;Ust-Ilimskiy : 1 : 26622
+Irkoutskaïa oblast résidu;Kirenskiy : 1 : 29765
+Krasnoïarski kraï résidue;Eniseysk : 1 : 22980
+Tchitinskaïa oblast résid;Kalarskiy : 1 : 17075
+Krasnoïarski kraï résidue;Lesosibirsk : 1 : 77948
+RU-UNK-2842 : 1 : 20237
+RU-UNK-2843 : 1 : 20237
+Irkoutskaïa oblast résidu;Chunskiy : 1 : 50493
+Irkoutskaïa oblast résidu;Ust'-Ilimsk : 1 : 112382
+Krasnoïarski kraï résidue;Pirovskiy : 1 : 12148
+Krasnoïarski kraï résidue;Kazachinskiy : 1 : 16298
+Krasnoïarski kraï résidue;Birilyusskiy : 1 : 17412
+Irkoutskaïa oblast résidu;Bodaybo : 1 : 20728
+Irkoutskaïa oblast résidu;Nizhneilimskiy : 1 : 76722
+Krasnoïarski kraï résidue;Tyukhtetskiy : 1 : 13261
+Irkoutskaïa oblast résidu;Tayshetskiy : 1 : 34481
+Krasnoïarski kraï résidue;Taseyevskiy : 1 : 19234
+Irkoutskaïa oblast résidu;Kazachinsko-Lenskiy : 1 : 28194
+Krasnoïarski kraï résidue;Abanskiy : 1 : 33710
+Krasnoïarski kraï résidue;Bolshemurtinskiy : 1 : 26320
+RU-UNK-2844 : 1 : 12990
+Krasnoïarski kraï résidue;Dzerzhinskiy : 1 : 20651
+Bouriatia;Severo-Baykalskiy : 1 : 23282
+Krasnoïarski kraï résidue;Sukhobuzimskiy : 1 : 26320
+Irkoutskaïa oblast résidu;Bratskiy : 1 : 75347
+Bouriatia;Muyskiy : 1 : 24381
+Krasnoïarski kraï résidue;Yemelyanovskiy : 1 : 48692
+Krasnoïarski kraï résidue;Bolsheuluyskiy : 1 : 10832
+Krasnoïarski kraï résidue;Kozulsky : 1 : 21360
+Krasnoïarski kraï résidue;Nizhneingashskiy : 1 : 42922
+Irkoutskaïa oblast résidu;Ust'-Kut : 1 : 60219
+Krasnoïarski kraï résidue;Kanskiy : 1 : 32293
+Krasnoïarski kraï résidue;Achinskiy : 1 : 16501
+Krasnoïarski kraï résidue;Bogotolskiy : 1 : 15286
+Krasnoïarski kraï résidue;Ilanskiy : 1 : 32090
+Irkoutskaïa oblast résidu;Ust-Udinskiy : 1 : 18272
+Krasnoïarski kraï résidue;Rybinskiy : 1 : 23688
+Krasnoïarski kraï résidue;Achinsk : 1 : 124616
+Krasnoïarski kraï résidue;Beryozovskiy : 1 : 40999
+Irkoutskaïa oblast résidu;Bratsk : 1 : 282919
+Krasnoïarski kraï résidue;Bogotol : 1 : 27333
+Krasnoïarski kraï résidue;Uyarskiy : 1 : 28952
+Krasnoïarski kraï résidue;Kansk : 1 : 112367
+Krasnoïarski kraï résidue;Sosnovoborsk : 1 : 31888
+Krasnoïarski kraï résidue;Krasnoyarsk : 1 : 930421
+Krasnoïarski kraï résidue;Nazarovskiy : 1 : 23182
+Krasnoïarski kraï résidue;Manskiy : 1 : 22271
+Krasnoïarski kraï résidue;Nazarovo : 1 : 66307
+RU-UNK-2845 : 1 : 18705
+Krasnoïarski kraï résidue;Sharypovskiy : 1 : 17108
+Irkoutskaïa oblast résidu;Nizhneudinskiy : 1 : 37330
+Tchitinskaïa oblast résid;Tungiro-Olekminskiy : 1 : 1823
+Irkoutskaïa oblast résidu;Tayshet : 1 : 59727
+Krasnoïarski kraï résidue;Divnogorsk : 1 : 35431
+Krasnoïarski kraï résidue;Zaozernyi : 1 : 19740
+Krasnoïarski kraï résidue;Irbeyskiy : 1 : 22271
+Krasnoïarski kraï résidue;Borodino : 1 : 19133
+Irkoutskaïa oblast résidu;Zhigalovskiy : 1 : 11395
+Krasnoïarski kraï résidue;Balakhtinskiy : 1 : 28446
+RU-UNK-2846 : 1 : 57803
+Krasnoïarski kraï résidue;Uzhurskiy : 1 : 49502
+Krasnoïarski kraï résidue;Sayanskiy : 1 : 17817
+Krasnoïarski kraï résidue;Partizanskiy : 1 : 15691
+Bouriatia;Severobaykalsk : 1 : 28778
+Bouriatia;Kurumkanskiy : 1 : 18486
+Irkoutskaïa oblast résidu;Balaganskiy : 1 : 10904
+Resp. Khakassia;Ordzhonikidzevskiy : 1 : 19391
+Krasnoïarski kraï résidue;Novoselovskiy : 1 : 18424
+Irkoutskaïa oblast résidu;Kuytunskiy : 1 : 41848
+Irkoutskaïa oblast résidu;Tulunskiy : 1 : 31141
+Irkoutskaïa oblast résidu;Kachugskiy : 1 : 23871
+Krasnoïarski kraï résidue;Idrinskiy : 1 : 18627
+Krasnoïarski kraï résidue;Kuraginskiy : 1 : 56690
+Krasnoïarski kraï résidue;Krasnoturanskiy : 1 : 19740
+Irkoutskaïa oblast résidu;Nizhneudinsk : 1 : 52360
+Resp. Khakassia;Shirinskiy : 1 : 39083
+Resp. Khakassia;Bogradskiy : 1 : 20194
+Irkoutskaïa oblast résidu;Tulun : 1 : 52556
+Irkoutskaïa oblast résidu;Olkhonskiy : 1 : 9038
+Tchitinskaïa oblast résid;Mogochinskiy : 1 : 35492
+Irkoutskaïa oblast résidu;Ziminskiy : 1 : 15521
+Resp. Khakassia;Ust-Abakanskiy : 1 : 58473
+Bouriatia;Barguzinskiy : 1 : 28478
+Oust'-Ordynski national o;Nukutskiy : 1 : 18185
+Oust'-Ordynski national o;Osinskiy : 1 : 21701
+Krasnoïarski kraï résidue;Minusinskiy : 1 : 27029
+Irkoutskaïa oblast résidu;Sayansk : 1 : 46171
+Irkoutskaïa oblast résidu;Zima : 1 : 36740
+Krasnoïarski kraï résidue;Karatuzskiy : 1 : 21562
+Irkoutskaïa oblast résidu;Zalarinskiy : 1 : 33990
+Oust'-Ordynski national o;Alarskiy : 1 : 29337
+Resp. Khakassia;Chernogorsk : 1 : 82284
+Resp. Khakassia;Askizskiy : 1 : 50938
+Bouriatia;Yeravninskiy : 1 : 20385
+Resp. Khakassia;Altayskiy : 1 : 23208
+Krasnoïarski kraï résidue;Minusinsk : 1 : 77746
+Tchitinskaïa oblast résid;Chernyshevskiy : 1 : 49306
+Resp. Khakassia;Abakan : 1 : 157837
+Touva respoublika;Todzhinskiy : 1 : 6459
+RU-UNK-2847 : 1 : 15372
+Krasnoïarski kraï résidue;Shushenskiy : 1 : 38974
+Oust'-Ordynski national o;Bokhanskiy : 1 : 27629
+Krasnoïarski kraï résidue;Yermakovskiy : 1 : 25713
+Oust'-Ordynski national o;Ekhirit-Bulagatskiy : 1 : 30241
+Tchitinskaïa oblast résid;Sretenskiy : 1 : 31368
+Resp. Khakassia;Beyskiy : 1 : 22103
+Bouriatia;Okinskiy : 1 : 4597
+Bouriatia;Pribaykalskiy : 1 : 31176
+Tchitinskaïa oblast résid;Gazimuro- Zavodskiy : 1 : 10744
+Irkoutskaïa oblast résidu;Cheremkhovskiy : 1 : 35660
+Irkoutskaïa oblast résidu;Cheremkhovo : 1 : 89886
+Resp. Khakassia;Tashtypskiy : 1 : 37073
+Resp. Khakassia;Sayanogorsk : 1 : 73845
+Bouriatia;Khorinskiy : 1 : 23782
+Tchitinskaïa oblast résid;Chitinskiy : 1 : 60049
+Irkoutskaïa oblast résidu;Irkutskiy : 1 : 56191
+Irkoutskaïa oblast résidu;Usolskiy : 1 : 55012
+Tchitinskaïa oblast résid;Nerchinskiy : 1 : 32998
+Touva respoublika;Piy-Khumskiy : 1 : 13724
+Irkoutskaïa oblast résidu;Usolye-Sibirskoe : 1 : 104916
+Bouriatia;Kabanskiy : 1 : 70446
+Tchitinskaïa oblast résid;Karymskiy : 1 : 40001
+Tchitinskaïa oblast résid;Nerchinskiy-Zavodskiy : 1 : 15060
+Irkoutskaïa oblast résidu;Angarsk : 1 : 271131
+Touva respoublika;Kyzylskiy : 1 : 21697
+Tchitinskaïa oblast résid;Shilkinskiy : 1 : 55349
+Irkoutskaïa oblast résidu;Irkutsk : 1 : 622225
+Touva respoublika;Kaa-Hemskiy : 1 : 14935
+Bouriatia;Zaigrayevskiy : 1 : 55558
+Tchitinskaïa oblast résid;Khilokskiy : 1 : 38274
+Touva respoublika;Sut-Kholskiy : 1 : 11908
+Tchitinskaïa oblast résid;Shelopuginskiy : 1 : 12374
+Irkoutskaïa oblast résidu;Shelekhov : 1 : 55798
+RU-UNK-2848 : 1 : 21783
+Tchitinskaïa oblast résid;Chita : 1 : 351566
+Bouriatia;Ivolginskiy : 1 : 21284
+Tchitinskaïa oblast résid;Baleyskiy : 1 : 11031
+Irkoutskaïa oblast résidu;Slyudyanskiy : 1 : 44501
+Bouriatia;Tunkinskiy : 1 : 26280
+Bouriatia;Ulan-Ude : 1 : 386006
+RU-UNK-2849 : 1 : 18972
+Touva respoublika;Chaa-Kholsky : 1 : 7972
+Bouriatia;Tarbagatayskiy : 1 : 17487
+Touva respoublika;Kyzyl : 1 : 90117
+Tchitinskaïa oblast résid;Uletovskiy : 1 : 33094
+Touva respoublika;Barun-Khemchinskiy : 1 : 30880
+Aguinski national okroug;Mogoytuyskiy : 1 : 29125
+Tchitinskaïa oblast résid;Baley : 1 : 22351
+Touva respoublika;Bay-Tayginskiy : 1 : 13825
+Touva respoublika;Tandinskiy : 1 : 13926
+Bouriatia;Selenginskiy : 1 : 26280
+Touva respoublika;Chedi-Kholsky : 1 : 8073
+Tchitinskaïa oblast résid;Alexandrovo-Zavodskiy : 1 : 14389
+Tchitinskaïa oblast résid;Petrovsk-Zabaykalskiy : 1 : 23694
+Touva respoublika;Dzun-Khemchinskiy : 1 : 20788
+Tchitinskaïa oblast résid;Olovyanninskiy : 1 : 59761
+Bouriatia;Mukhorshibirskiy : 1 : 30277
+Tchitinskaïa oblast résid;Kalganskiy : 1 : 12278
+Aguinski national okroug;Aginskiy : 1 : 33328
+Bouriatia;Zakamenskiy : 1 : 35473
+Bouriatia;Dzhidinskiy : 1 : 36872
+Bouriatia;Gusinoozersk : 1 : 31476
+Tchitinskaïa oblast résid;Petrovsk-Zabaykalsky : 1 : 26667
+Aguinski national okroug;Duldurginskiy : 1 : 16514
+Touva respoublika;Ovyurskiy : 1 : 9183
+Tchitinskaïa oblast résid;Borzinskiy : 1 : 30504
+Touva respoublika;Tes-Khemskiy : 1 : 10495
+Bouriatia;Bichurskiy : 1 : 31576
+Tchitinskaïa oblast résid;Priargunskiy : 1 : 28778
+Bouriatia;Kyakhtinskiy : 1 : 45765
+Tchitinskaïa oblast résid;Krasnochikoyskiy : 1 : 22255
+Touva respoublika;Erzinskiy : 1 : 9082
+Touva respoublika;Mongun-Tayginskiy : 1 : 6257
+Tchitinskaïa oblast résid;Akshinskiy : 1 : 14197
+Tchitinskaïa oblast résid;Ononskiy : 1 : 16211
+Tchitinskaïa oblast résid;Krasnokamenskiy : 1 : 11319
+Tchitinskaïa oblast résid;Kyrinskiy : 1 : 18418
+Tchitinskaïa oblast résid;Borzya : 1 : 35301
+Tchitinskaïa oblast résid;Zabaykalskiy : 1 : 22159
+Tchitinskaïa oblast résid;Krasnokamensk : 1 : 68970
+RU-UNK-2850 : 1 : 276565
+RU-UNK-2851 : 1 : 20237
+RU-UNK-2852 : 1 : 20237
+RU-UNK-2853 : 1 : 12990
+RU-UNK-2854 : 1 : 18705
+RU-UNK-2855 : 1 : 57803
+RU-UNK-2856 : 1 : 15372
+RU-UNK-2857 : 1 : 21783
+RU-UNK-2858 : 1 : 18972
+Kostromskaïa oblast;Vokhomskiy : 1 : 16992
+Kostromskaïa oblast;Soligalichskiy : 1 : 14693
+Kostromskaïa oblast;Pavinskiy : 1 : 7696
+Kostromskaïa oblast;Oktyabrskiy : 1 : 7696
+Kostromskaïa oblast;Chukhlomskiy : 1 : 15192
+Kostromskaïa oblast;Kologrivskiy : 1 : 10695
+Kostromskaïa oblast;Mezhevskiy : 1 : 6997
+Kostromskaïa oblast;Pyschugskiy : 1 : 6897
+Kostromskaïa oblast;Buyskiy : 1 : 11394
+Iaroslavskaïa oblast;Poshekhonskiy : 1 : 22157
+Iaroslavskaïa oblast;Pervomayskiy : 1 : 15102
+Tverskaïa oblast (Kalinin;Vesyegonskiy : 1 : 20154
+Kostromskaïa oblast;Parfenyevskiy : 1 : 8896
+Kostromskaïa oblast;Sharyinskiy : 1 : 15992
+Kostromskaïa oblast;Neyskiy : 1 : 7996
+Kostromskaïa oblast;Ponazyrevskiy : 1 : 13593
+Kostromskaïa oblast;Galichskiy : 1 : 14193
+Iaroslavskaïa oblast;Breytovskiy : 1 : 11327
+Tverskaïa oblast (Kalinin;Sandovskiy : 1 : 12472
+Kostromskaïa oblast;Manturovskiy : 1 : 8996
+Iaroslavskaïa oblast;Lyubimskiy : 1 : 16195
+Kostromskaïa oblast;Antropovskiy : 1 : 11094
+Kostromskaïa oblast;Buy : 1 : 35182
+Tverskaïa oblast (Kalinin;Lesnoy : 1 : 7982
+Kostromskaïa oblast;Sharya : 1 : 42779
+Kostromskaïa oblast;Galitch : 1 : 21489
+Iaroslavskaïa oblast;Danilovskiy : 1 : 32987
+Iaroslavskaïa oblast;Rybinskiy : 1 : 34775
+Tverskaïa oblast (Kalinin;Krasnokholmskiy : 1 : 18857
+Kostromskaïa oblast;Manturovo : 1 : 21789
+Tverskaïa oblast (Kalinin;Molokovskiy : 1 : 9179
+Kostromskaïa oblast;Kostromskoy : 1 : 45877
+Kostromskaïa oblast;Neya : 1 : 12994
+Kostromskaïa oblast;Susaninskiy : 1 : 11194
+Iaroslavskaïa oblast;Tutayevskiy : 1 : 18183
+Tverskaïa oblast (Kalinin;Udomelskiy : 1 : 11973
+Tverskaïa oblast (Kalinin;Bologovskiy : 1 : 31229
+Kostromskaïa oblast;Makaryevskiy : 1 : 24588
+Tverskaïa oblast (Kalinin;Maksatikhinskiy : 1 : 24345
+Iaroslavskaïa oblast;Nekouzskiy : 1 : 22852
+Kostromskaïa oblast;Ostrovskiy : 1 : 16792
+Kostromskaïa oblast;Sudislavskiy : 1 : 17091
+Tverskaïa oblast (Kalinin;Bezhetskiy : 1 : 18857
+Kostromskaïa oblast;Kadyiskiy : 1 : 12494
+Iaroslavskaïa oblast;Rybinsk : 1 : 250084
+Iaroslavskaïa oblast;Tutaev : 1 : 43618
+Tverskaïa oblast (Kalinin;Sonkovskiy : 1 : 12871
+Iaroslavskaïa oblast;Nekrasovskiy : 1 : 27622
+Iaroslavskaïa oblast;Myshkinskiy : 1 : 13115
+Iaroslavskaïa oblast;Yaroslavskiy : 1 : 55740
+Tverskaïa oblast (Kalinin;Bologoye : 1 : 32726
+Iaroslavskaïa oblast;Bolsheselskiy : 1 : 12420
+Tverskaïa oblast (Kalinin;Udomlya : 1 : 32726
+Tverskaïa oblast (Kalinin;Vyshnevolotskiy : 1 : 34721
+Kostromskaïa oblast;Kostroma : 1 : 300350
+Tverskaïa oblast (Kalinin;Bezshetsk : 1 : 30331
+Kostromskaïa oblast;Krasnoselskiy : 1 : 20390
+Iaroslavskaïa oblast;Uglichskiy : 1 : 17686
+Ivanovskaïa oblast;Zavolzhskiy : 1 : 26960
+Tverskaïa oblast (Kalinin;Kesovogorskiy : 1 : 10377
+Tverskaïa oblast (Kalinin;Firovskiy : 1 : 14168
+Iaroslavskaïa oblast;Yaroslavl : 1 : 625956
+Ivanovskaïa oblast;Kineshemskiy : 1 : 30392
+Tverskaïa oblast (Kalinin;Spirovskiy : 1 : 15166
+Ivanovskaïa oblast;Sokolskiy : 1 : 19117
+Tverskaïa oblast (Kalinin;Kashinskiy : 1 : 15764
+Kostromskaïa oblast;Nerekhtskiy : 1 : 14493
+Iaroslavskaïa oblast;Borisoglebskiy : 1 : 16096
+Tverskaïa oblast (Kalinin;Likhoslavlskiy : 1 : 33823
+Tverskaïa oblast (Kalinin;Vyshny Volochek : 1 : 64055
+Tverskaïa oblast (Kalinin;Rameshkovskiy : 1 : 17760
+Iaroslavskaïa oblast;Uglich : 1 : 39445
+Ivanovskaïa oblast;Kineshma : 1 : 101763
+Iaroslavskaïa oblast;Gavrilov-Yamskiy : 1 : 31397
+Ivanovskaïa oblast;Privolzhskiy : 1 : 32646
+Ivanovskaïa oblast;Vichugskiy : 1 : 26078
+Tverskaïa oblast (Kalinin;Ostashkovskiy : 1 : 8680
+Ivanovskaïa oblast;Yuryevetskiy : 1 : 23431
+Iaroslavskaïa oblast;Rostovskiy : 1 : 43519
+Kostromskaïa oblast;Nerekhta : 1 : 29385
+Tverskaïa oblast (Kalinin;Kashin : 1 : 20554
+Tverskaïa oblast (Kalinin;Kalyazinskiy : 1 : 26939
+Ivanovskaïa oblast;Furmanovskiy : 1 : 8137
+Tverskaïa oblast (Kalinin;Kimrskiy : 1 : 18957
+Ivanovskaïa oblast;Rodnikovskiy : 1 : 43921
+Tverskaïa oblast (Kalinin;Torzhokskiy : 1 : 26939
+Ivanovskaïa oblast;Komsomolskiy : 1 : 27352
+Iaroslavskaïa oblast;Rostov : 1 : 36067
+Ivanovskaïa oblast;Furmanov : 1 : 44999
+Ivanovskaïa oblast;Vichuga : 1 : 48136
+Tverskaïa oblast (Kalinin;Penovskiy : 1 : 10077
+Tverskaïa oblast (Kalinin;Kuvshinovskiy : 1 : 20653
+Ivanovskaïa oblast;Ivanovskiy : 1 : 60979
+Ivanovskaïa oblast;Lukhskiy : 1 : 10882
+Ivanovskaïa oblast;Ilyinskiy : 1 : 13627
+Iaroslavskaïa oblast;Pereslavskiy : 1 : 26727
+Ivanovskaïa oblast;Puchezhskiy : 1 : 21568
+Tverskaïa oblast (Kalinin;Kalininskiy : 1 : 56073
+Tverskaïa oblast (Kalinin;Andreapolskiy : 1 : 17560
+Tverskaïa oblast (Kalinin;Ostashkov : 1 : 26041
+Ivanovskaïa oblast;Ivanovo : 1 : 465874
+Tverskaïa oblast (Kalinin;Selizharovskiy : 1 : 18059
+Ivanovskaïa oblast;Shuiskiy : 1 : 23725
+Ivanovskaïa oblast;Teykovskiy : 1 : 18039
+Tverskaïa oblast (Kalinin;Torzshok : 1 : 50586
+Tverskaïa oblast (Kalinin;Toropetskiy : 1 : 30930
+Ivanovskaïa oblast;Lezhnevskiy : 1 : 21568
+Ivanovskaïa oblast;Palekhskiy : 1 : 14608
+Moskovskaïa oblast résidu;Taldomskiy : 1 : 51997
+Ivanovskaïa oblast;Verkhnelandekhovskiy : 1 : 6765
+Tverskaïa oblast (Kalinin;Tver : 1 : 453075
+Tverskaïa oblast (Kalinin;Konakovskiy : 1 : 54277
+Ivanovskaïa oblast;Shuya : 1 : 68332
+Tverskaïa oblast (Kalinin;Kimry : 1 : 60164
+Ivanovskaïa oblast;Teykovo : 1 : 38333
+Tverskaïa oblast (Kalinin;Staritskiy : 1 : 28735
+Ivanovskaïa oblast;Gavrilovo-Posadskiy : 1 : 22745
+Vladimirskaïa oblast;Yuryev-Polskiy : 1 : 42128
+Ivanovskaïa oblast;Pestyakovskiy : 1 : 9510
+Moskovskaïa oblast résidu;Zagorskiy : 1 : 123517
+Moskovskaïa oblast résidu;Dubna : 1 : 66341
+Ivanovskaïa oblast;Yuzhskiy : 1 : 32254
+RU-UNK-2859 : 1 : 43022
+Tverskaïa oblast (Kalinin;Konakovo : 1 : 43003
+Ivanovskaïa oblast;Savinskiy : 1 : 17255
+Vladimirskaïa oblast;Aleksandrovskiy : 1 : 61795
+Tverskaïa oblast (Kalinin;Rzhevskiy : 1 : 17061
+Moskovskaïa oblast résidu;Dmitrovskiy : 1 : 88156
+Vladimirskaïa oblast;Suzdalskiy : 1 : 40132
+Tverskaïa oblast (Kalinin;Nelidovskiy : 1 : 10776
+Moskovskaïa oblast résidu;Klinskiy : 1 : 46917
+Vladimirskaïa oblast;Kameshkovskiy : 1 : 41330
+Vladimirskaïa oblast;Kovrovskiy : 1 : 29051
+Tverskaïa oblast (Kalinin;Oleninskiy : 1 : 18758
+Tverskaïa oblast (Kalinin;Zapadnodvinskiy : 1 : 23547
+Vladimirskaïa oblast;Kolchuginskiy : 1 : 16372
+Vladimirskaïa oblast;Vyaznikovskiy : 1 : 60297
+Vladimirskaïa oblast;Suzdal' : 1 : 11980
+Vladimirskaïa oblast;Gorokhovetskiy : 1 : 29550
+Moskovskaïa oblast résidu;Lotoshinskiy : 1 : 18727
+Vladimirskaïa oblast;Kovrov : 1 : 162124
+RU-UNK-2860 : 1 : 65046
+Vladimirskaïa oblast;Aleksandrov : 1 : 65788
+Moskovskaïa oblast résidu;Klin : 1 : 94730
+Moskovskaïa oblast résidu;Sergiev Posad : 1 : 114453
+Vladimirskaïa oblast;Kirzhachskiy : 1 : 49316
+Tverskaïa oblast (Kalinin;Zubtsovskiy : 1 : 22050
+Moskovskaïa oblast résidu;Solnechnogorskiy : 1 : 68831
+Vladimirskaïa oblast;Kol'chugino : 1 : 44924
+Moskovskaïa oblast résidu;Volokolamskiy : 1 : 35959
+Vladimirskaïa oblast;Sobinskiy : 1 : 26056
+Tverskaïa oblast (Kalinin;Rzshev : 1 : 69343
+Vladimirskaïa oblast;Vyazniki : 1 : 44624
+Moskovskaïa oblast résidu;Schelkovskiy : 1 : 97419
+Tverskaïa oblast (Kalinin;Nelidovo : 1 : 29433
+Moskovskaïa oblast résidu;Shakhovskoy : 1 : 24106
+Moskovskaïa oblast résidu;Solnechnogorsk : 1 : 55184
+Moskovskaïa oblast résidu;Pushkinskiy : 1 : 89849
+Tverskaïa oblast (Kalinin;Zharkovskiy : 1 : 10377
+Vladimirskaïa oblast;Vladimir : 1 : 356294
+Vladimirskaïa oblast;Petushkinskiy : 1 : 75771
+Vladimirskaïa oblast;Sudogodskiy : 1 : 47020
+Moskovskaïa oblast résidu;Krasnoarmeysk : 1 : 27493
+RU-UNK-2861 : 1 : 16871
+Moskovskaïa oblast résidu;Istrinskiy : 1 : 88156
+Moskovskaïa oblast résidu;Mytischinskiy : 1 : 26596
+Tverskaïa oblast (Kalinin;Belskiy : 1 : 10277
+Smolenskaïa oblast;Sychevkskiy : 1 : 18023
+Moskovskaïa oblast résidu;Noginskiy : 1 : 118437
+Moskovskaïa oblast résidu;Volokolamsk : 1 : 17930
+Moskovskaïa oblast résidu;Puschino : 1 : 20121
+Vladimirskaïa oblast;Selivanovskiy : 1 : 24359
+Vladimirskaïa oblast;Sobinka : 1 : 42228
+Moskovskaïa oblast résidu;Ruzskiy : 1 : 66142
+Moskovskaïa oblast résidu;Pavlovo-Posadskiy : 1 : 40044
+Smolenskaïa oblast;Gagarinskiy : 1 : 21547
+Moskovskaïa oblast résidu;Lobnya : 1 : 64647
+Moskovskaïa oblast résidu;Ivanteyevka : 1 : 51698
+Moskovskaïa oblast résidu;Fryazino : 1 : 53690
+Moskovskaïa oblast résidu;Khimkinskiy : 1 : 34166
+Moskovskaïa oblast résidu;Dolgoprudnyi : 1 : 76401
+Moskovskaïa oblast résidu;Shchelkovo : 1 : 108078
+Vladimirskaïa oblast;Muromskiy : 1 : 28751
+Moskva;Moscow : 1 : 8705750
+Moskovskaïa oblast résidu;Pushkino : 1 : 74808
+Moskovskaïa oblast résidu;Mytyshchy : 1 : 153401
+Moskovskaïa oblast résidu;Istra : 1 : 35860
+RU-UNK-2862 : 1 : 25401
+Moskovskaïa oblast résidu;Khimki : 1 : 136766
+Moskovskaïa oblast résidu;Noginsk : 1 : 120629
+Moskovskaïa oblast résidu;Kaliningrad : 1 : 164258
+Moskovskaïa oblast résidu;Krasnogorskiy : 1 : 48411
+Vladimirskaïa oblast;Gus-Khrustalnyi : 1 : 57303
+Moskovskaïa oblast résidu;Orekhovo-Zuyevskiy : 1 : 130291
+Moskovskaïa oblast résidu;Balashikhinskiy : 1 : 31377
+Moskovskaïa oblast résidu;Orekhovo-Zuevo : 1 : 134873
+Moskovskaïa oblast résidu;Mozhayskiy : 1 : 42135
+Moskovskaïa oblast résidu;Krasnogorsk : 1 : 90646
+Moskovskaïa oblast résidu;Shaturskiy : 1 : 70823
+Moskovskaïa oblast résidu;Elektrostal : 1 : 151508
+Moskovskaïa oblast résidu;Balashikha : 1 : 135769
+Moskovskaïa oblast résidu;Reutov : 1 : 69728
+Moskovskaïa oblast résidu;Odintsovskiy : 1 : 123318
+Moskovskaïa oblast résidu;Zheleznodorozhnyi : 1 : 104392
+Smolenskaïa oblast;Novoduginskiy : 1 : 14398
+Smolenskaïa oblast;Velizhskiy : 1 : 17218
+Moskovskaïa oblast résidu;Zvenigorod : 1 : 17033
+Smolenskaïa oblast;Demidovskiy : 1 : 22856
+Smolenskaïa oblast;Kholm-Zhirkovskiy : 1 : 14902
+Smolenskaïa oblast;Dukhovschinskiy : 1 : 23158
+Moskovskaïa oblast résidu;Lyuberetskiy : 1 : 138060
+Moskovskaïa oblast résidu;Odintsovo : 1 : 130092
+Vladimirskaïa oblast;Gus'-Khrustalny : 1 : 80862
+Moskovskaïa oblast résidu;Ramenskiy : 1 : 133279
+Moskovskaïa oblast résidu;Leninskiy : 1 : 69728
+Moskovskaïa oblast résidu;Liubertsy : 1 : 162764
+Vladimirskaïa oblast;Melenkovskiy : 1 : 47419
+Moskovskaïa oblast résidu;Zhukovskiy : 1 : 100507
+Moskovskaïa oblast résidu;Naro-Fominskiy : 1 : 112361
+Moskovskaïa oblast résidu;Ramenskoe : 1 : 87857
+Moskovskaïa oblast résidu;Shatura : 1 : 31577
+Vladimirskaïa oblast;Murom : 1 : 143755
+Smolenskaïa oblast;Gagarin : 1 : 29602
+Moskovskaïa oblast résidu;Vidnoye : 1 : 55882
+Moskovskaïa oblast résidu;Lytkarino : 1 : 51499
+Moskovskaïa oblast résidu;Voskresenskiy : 1 : 76900
+Moskovskaïa oblast résidu;Podolskiy : 1 : 73612
+Moskovskaïa oblast résidu;Mozshaysk : 1 : 30879
+Moskovskaïa oblast résidu;Troitsk : 1 : 30381
+Moskovskaïa oblast résidu;Yegoryevskiy : 1 : 31079
+Smolenskaïa oblast;Yartsevskiy : 1 : 10472
+RU-UNK-2863 : 1 : 28788
+Moskovskaïa oblast résidu;Domodedovskiy : 1 : 65145
+Moskovskaïa oblast résidu;Podolsk : 1 : 204202
+Moskovskaïa oblast résidu;Domodedovo : 1 : 55882
+Smolenskaïa oblast;Vyazemskiy : 1 : 25273
+Moskovskaïa oblast résidu;Egoryevsk : 1 : 73314
+Moskovskaïa oblast résidu;Naro-Fominsk : 1 : 58770
+Moskovskaïa oblast résidu;Klimovsk : 1 : 57874
+Moskovskaïa oblast résidu;Voskresensk : 1 : 81183
+Ryazanskaïa oblast;Klepikovskiy : 1 : 33689
+Smolenskaïa oblast;Rudnyanskiy : 1 : 33731
+Moskovskaïa oblast résidu;Bronnitsy : 1 : 16535
+Kaloujskaïa oblast;Borovskiy : 1 : 54468
+Smolenskaïa oblast;Safonovskiy : 1 : 17117
+Moskovskaïa oblast résidu;Chekhovskiy : 1 : 35063
+Kaloujskaïa oblast;Iznoskovskiy : 1 : 8473
+Kaloujskaïa oblast;Medynskiy : 1 : 14525
+Smolenskaïa oblast;Tyomkinskiy : 1 : 8357
+Moskovskaïa oblast résidu;Stupinskiy : 1 : 48610
+Moskovskaïa oblast résidu;Kolomenskiy : 1 : 43231
+Kaloujskaïa oblast;Zhukovskiy : 1 : 50030
+Ryazanskaïa oblast;Kasimovskiy : 1 : 40129
+Smolenskaïa oblast;Vyazma : 1 : 60614
+RU-UNK-2864 : 1 : 59069
+Smolenskaïa oblast;Safonovo : 1 : 56687
+Kaloujskaïa oblast;Maloyaroslavetskiy : 1 : 51643
+Kaloujskaïa oblast;Obninsk : 1 : 106514
+Smolenskaïa oblast;Smolenskiy : 1 : 49438
+Moskovskaïa oblast résidu;Lukhovitskiy : 1 : 65145
+Moskovskaïa oblast résidu;Kolomna : 1 : 162365
+Smolenskaïa oblast;Yartsevo : 1 : 55983
+Moskovskaïa oblast résidu;Serpukhovskiy : 1 : 34963
+Ryazanskaïa oblast;Rybnovskiy : 1 : 38048
+Ryazanskaïa oblast;Yermishinskiy : 1 : 13079
+Moskovskaïa oblast résidu;Ozyorskiy : 1 : 11356
+Smolenskaïa oblast;Kardymovskiy : 1 : 13794
+Smolenskaïa oblast;Ugranskiy : 1 : 13794
+Moskovskaïa oblast résidu;Stupino : 1 : 73712
+Smolenskaïa oblast;Dorogobuzhskiy : 1 : 37154
+Kaloujskaïa oblast;Dzerzhinskiy : 1 : 62033
+Ryazanskaïa oblast;Kasimov : 1 : 38147
+Kaloujskaïa oblast;Yukhnovskiy : 1 : 13718
+Moskovskaïa oblast résidu;Serpukhov : 1 : 139953
+Ryazanskaïa oblast;Ryazanskiy : 1 : 72530
+RU-UNK-2865 : 1 : 36756
+Moskovskaïa oblast résidu;Zarayskiy : 1 : 18229
+Kaloujskaïa oblast;Tarusskiy : 1 : 16239
+Moskovskaïa oblast résidu;Ozery : 1 : 28289
+Ryazanskaïa oblast;Spasskiy : 1 : 40030
+Moskovskaïa oblast résidu;Kashirskiy : 1 : 32573
+Moskovskaïa oblast résidu;Kashira : 1 : 43829
+Ryazanskaïa oblast;Shilovskiy : 1 : 51028
+Toulskaïa oblast;Zaokskiy : 1 : 19857
+Toulskaïa oblast;Yasnogorskiy : 1 : 40110
+Smolenskaïa oblast;Glinkovskiy : 1 : 7652
+Moskovskaïa oblast résidu;Zaraysk : 1 : 27094
+Ryazanskaïa oblast;Pitelinskiy : 1 : 8818
+Smolenskaïa oblast;Smolensk : 1 : 351402
+Kaloujskaïa oblast;Mosalskiy : 1 : 11902
+Ryazanskaïa oblast;Kadomskiy : 1 : 14268
+Kaloujskaïa oblast;Ferzikovskiy : 1 : 17147
+Toulskaïa oblast;Venevskiy : 1 : 40209
+Kaloujskaïa oblast;Kaluga : 1 : 364227
+Ryazanskaïa oblast;Ryazan : 1 : 523561
+Smolenskaïa oblast;Krasninskiy : 1 : 18728
+Toulskaïa oblast;Aleksinskiy : 1 : 14098
+Smolenskaïa oblast;Yelninskiy : 1 : 18728
+Moskovskaïa oblast résidu;Serebryanoprudskiy : 1 : 25102
+Ryazanskaïa oblast;Zakharovskiy : 1 : 11296
+Kaloujskaïa oblast;Babyninskiy : 1 : 19366
+Smolenskaïa oblast;Pochinkovskiy : 1 : 43799
+Kaloujskaïa oblast;Spas-Demenskiy : 1 : 12810
+Kaloujskaïa oblast;Baryatinskiy : 1 : 8170
+Kaloujskaïa oblast;Meschovskiy : 1 : 15231
+Ryazanskaïa oblast;Sasovskiy : 1 : 25762
+Ryazanskaïa oblast;Chuchkovskiy : 1 : 12088
+Toulskaïa oblast;Aleksin : 1 : 72377
+Smolenskaïa oblast;Monastyrshinskiy : 1 : 17117
+Kaloujskaïa oblast;Peremyshlskiy : 1 : 15231
+Ryazanskaïa oblast;Starozhilovskiy : 1 : 18033
+Ryazanskaïa oblast;Mikhaylovskiy : 1 : 43993
+Ryazanskaïa oblast;Pronskiy : 1 : 35670
+Toulskaïa oblast;Leninskiy : 1 : 65229
+Ryazanskaïa oblast;Sasovo : 1 : 34382
+Kaloujskaïa oblast;Sukhinichskiy : 1 : 31067
+Toulskaïa oblast;Novomoskovskiy : 1 : 25913
+Kaloujskaïa oblast;Kozelskiy : 1 : 49223
+Toulskaïa oblast;Dubenskiy : 1 : 15389
+Ryazanskaïa oblast;Putyatinskiy : 1 : 10503
+Kaloujskaïa oblast;Kuybyshevskiy : 1 : 11600
+Toulskaïa oblast;Suvorovskiy : 1 : 44876
+Toulskaïa oblast;Tula : 1 : 580704
+Smolenskaïa oblast;Roslavlskiy : 1 : 28394
+Ryazanskaïa oblast;Shatskiy : 1 : 36562
+Toulskaïa oblast;Kireyevskiy : 1 : 90645
+Kaloujskaïa oblast;Kirovskiy : 1 : 9582
+Smolenskaïa oblast;Khislavichskiy : 1 : 14398
+Kaloujskaïa oblast;Duminichskiy : 1 : 17349
+Ryazanskaïa oblast;Korablinskiy : 1 : 28239
+Ryazanskaïa oblast;Sapozhkovskiy : 1 : 15556
+Toulskaïa oblast;Odoyevskiy : 1 : 15389
+Toulskaïa oblast;Kimovskiy : 1 : 19559
+Kaloujskaïa oblast;Kirov : 1 : 39439
+Kaloujskaïa oblast;Lyudinovskiy : 1 : 6556
+Toulskaïa oblast;Uzlovskiy : 1 : 13006
+Toulskaïa oblast;Schekinskiy : 1 : 45968
+Bryanskaïa oblast;Rognedinskiy : 1 : 11080
+Smolenskaïa oblast;Desnogorsk : 1 : 34435
+Toulskaïa oblast;Novomoskovsk : 1 : 143364
+Smolenskaïa oblast;Shumyachskiy : 1 : 17520
+Toulskaïa oblast;Donskoy : 1 : 74164
+Ryazanskaïa oblast;Sarayevskiy : 1 : 27545
+Toulskaïa oblast;Schekino : 1 : 79327
+Toulskaïa oblast;Uzlovaya : 1 : 84688
+Toulskaïa oblast;Belyevskiy : 1 : 28991
+Ryazanskaïa oblast;Ukholovskiy : 1 : 13376
+Ryazanskaïa oblast;Skopinskiy : 1 : 37553
+Smolenskaïa oblast;Roslavl' : 1 : 60916
+Toulskaïa oblast;Kimovsk : 1 : 37330
+Kaloujskaïa oblast;Ulyanovskiy : 1 : 12003
+Kaloujskaïa oblast;Lyudinovo : 1 : 45491
+Kaloujskaïa oblast;Zhizdrinskiy : 1 : 13718
+Bryanskaïa oblast;Dyatkovskiy : 1 : 49656
+Ryazanskaïa oblast;Ryazhskiy : 1 : 35472
+Bryanskaïa oblast;Dubrovskiy : 1 : 23166
+Toulskaïa oblast;Bogoroditskiy : 1 : 13800
+Ryazanskaïa oblast;Skopin : 1 : 37949
+Toulskaïa oblast;Plavskiy : 1 : 28792
+Ryazanskaïa oblast;Miloslavskiy : 1 : 20610
+Toulskaïa oblast;Teplo-Ogarevskiy : 1 : 15389
+Toulskaïa oblast;Arsenyevskiy : 1 : 12907
+Toulskaïa oblast;Bogoroditsk : 1 : 51627
+Bryanskaïa oblast;Zhukovskiy : 1 : 38476
+Smolenskaïa oblast;Yershichskiy : 1 : 11176
+Kaloujskaïa oblast;Khvastovichskiy : 1 : 14827
+Toulskaïa oblast;Volovskiy : 1 : 17573
+Toulskaïa oblast;Kurkinskiy : 1 : 15091
+Toulskaïa oblast;Chernskiy : 1 : 22934
+Bryanskaïa oblast;Kletnyanskiy : 1 : 24173
+Ryazanskaïa oblast;Novoderevenskiy : 1 : 13475
+Orlovskaïa oblast;Bolkhovskiy : 1 : 23524
+Bryanskaïa oblast;Dyat'kovo : 1 : 35253
+Bryanskaïa oblast;Bryanskiy : 1 : 53786
+Orlovskaïa oblast;Znamenskiy : 1 : 7238
+Orlovskaïa oblast;Mtsenskiy : 1 : 22820
+Toulskaïa oblast;Kamenskiy : 1 : 11318
+Toulskaïa oblast;Yefremovskiy : 1 : 24920
+Orlovskaïa oblast;Khotynetskiy : 1 : 13169
+Bryanskaïa oblast;Karachevskiy : 1 : 41800
+Bryanskaïa oblast;Surazhskiy : 1 : 30720
+Bryanskaïa oblast;Bryansk : 1 : 481959
+Bryanskaïa oblast;Zhiryatinskiy : 1 : 9367
+RU-UNK-2866 : 1 : 20447
+Orlovskaïa oblast;Mzensk : 1 : 50867
+Bryanskaïa oblast;Mglinskiy : 1 : 24576
+Orlovskaïa oblast;Korsakovskiy : 1 : 6032
+Orlovskaïa oblast;Orlovskiy : 1 : 64439
+Bryanskaïa oblast;Krasnogorskiy : 1 : 16216
+Bryanskaïa oblast;Vygonichskiy : 1 : 23871
+Bryanskaïa oblast;Pochepskiy : 1 : 48851
+Orlovskaïa oblast;Novosilskiy : 1 : 12264
+Orlovskaïa oblast;Uritskiy : 1 : 19704
+Toulskaïa oblast;Efremov : 1 : 55499
+Bryanskaïa oblast;Gordeyevskiy : 1 : 14706
+Orlovskaïa oblast;Novoderevenkovskiy : 1 : 15481
+Bryanskaïa oblast;Navlinskiy : 1 : 32131
+Orlovskaïa oblast;Zalegoschenskiy : 1 : 19905
+Orlovskaïa oblast;Shablykinskiy : 1 : 10958
+Orlovskaïa oblast;Oryol : 1 : 344813
+Bryanskaïa oblast;Unechskiy : 1 : 48951
+Orlovskaïa oblast;Verkhovskiy : 1 : 24630
+Bryanskaïa oblast;Klintsovskiy : 1 : 27397
+Orlovskaïa oblast;Krasnozorenskiy : 1 : 9450
+Orlovskaïa oblast;Soskovskiy : 1 : 9550
+Bryanskaïa oblast;Trubchevskiy : 1 : 44721
+Orlovskaïa oblast;Sverdlovskiy : 1 : 19704
+Orlovskaïa oblast;Kromskiy : 1 : 25333
+Bryanskaïa oblast;Brasovskiy : 1 : 27497
+Bryanskaïa oblast;Klintsy : 1 : 78765
+Orlovskaïa oblast;Pokrovskiy : 1 : 20508
+Bryanskaïa oblast;Novozybkovskiy : 1 : 15310
+Bryanskaïa oblast;Starodubskiy : 1 : 50261
+Bryanskaïa oblast;Pogarskiy : 1 : 38577
+Orlovskaïa oblast;Dmitrovskiy : 1 : 17995
+Orlovskaïa oblast;Livenskiy : 1 : 35084
+Bryanskaïa oblast;Suzemskiy : 1 : 21152
+Orlovskaïa oblast;Glazunovskiy : 1 : 16889
+Orlovskaïa oblast;Maloarkhangelskiy : 1 : 15884
+Bryanskaïa oblast;Novozybkov : 1 : 42505
+Bryanskaïa oblast;Klimovskiy : 1 : 40390
+Bryanskaïa oblast;Komarichskiy : 1 : 21756
+Orlovskaïa oblast;Trosnyanskiy : 1 : 14275
+Orlovskaïa oblast;Livny : 1 : 53582
+Bryanskaïa oblast;Zlynkovskiy : 1 : 15310
+Orlovskaïa oblast;Kolpnyanskiy : 1 : 22116
+Bryanskaïa oblast;Sevskiy : 1 : 21555
+Orlovskaïa oblast;Dolzhanskiy : 1 : 15381
+RU-UNK-2867 : 1 : 43022
+RU-UNK-2868 : 1 : 65046
+RU-UNK-2869 : 1 : 16871
+RU-UNK-2870 : 1 : 25401
+RU-UNK-2871 : 1 : 28788
+RU-UNK-2872 : 1 : 59069
+RU-UNK-2873 : 1 : 36756
+RU-UNK-2874 : 1 : 20447
+Leningradskaïa oblast rés;Vyborgskiy : 1 : 110906
+Leningradskaïa oblast rés;Podporozhskiy : 1 : 17865
+Leningradskaïa oblast rés;Priozerskiy : 1 : 43158
+Leningradskaïa oblast rés;Priozersk : 1 : 20274
+Leningradskaïa oblast rés;Lodeynopolskiy : 1 : 13851
+Leningradskaïa oblast rés;Podporozhye : 1 : 23285
+Leningradskaïa oblast rés;Lodeynoye Pole : 1 : 25493
+Leningradskaïa oblast rés;Vyborg : 1 : 80796
+Leningradskaïa oblast rés;Volkhovskiy : 1 : 58113
+Leningradskaïa oblast rés;Vsevolzhskiy : 1 : 142522
+Sankt-Peterburg;Sankt-Petersburg : 1 : 4840543
+Leningradskaïa oblast rés;Tikhvinskiy : 1 : 16862
+Leningradskaïa oblast rés;Lomonosovskiy : 1 : 67447
+Leningradskaïa oblast rés;Boksitogorskiy : 1 : 23888
+Leningradskaïa oblast rés;Vsevolozhsk : 1 : 33021
+Leningradskaïa oblast rés;Kirovskiy : 1 : 75677
+Leningradskaïa oblast rés;Sosnovyi Bor : 1 : 58715
+Leningradskaïa oblast rés;Kingiseppskiy : 1 : 23988
+Leningradskaïa oblast rés;Volkhov : 1 : 48879
+Leningradskaïa oblast rés;Kirovsk : 1 : 23687
+Leningradskaïa oblast rés;Kirishskiy : 1 : 14353
+Leningradskaïa oblast rés;Tosnenskiy : 1 : 77183
+Leningradskaïa oblast rés;Gatchinskiy : 1 : 132485
+Leningradskaïa oblast rés;Volosovskiy : 1 : 46571
+Leningradskaïa oblast rés;Tikhvin : 1 : 71763
+Leningradskaïa oblast rés;Gatchina : 1 : 82703
+Leningradskaïa oblast rés;Tosno : 1 : 34526
+Leningradskaïa oblast rés;Boksitogorsk : 1 : 21679
+Leningradskaïa oblast rés;Ivangorod : 1 : 11643
+Leningradskaïa oblast rés;Kingisepp : 1 : 51388
+Leningradskaïa oblast rés;Pikalevo : 1 : 25293
+Leningradskaïa oblast rés;Slantsevskiy : 1 : 11040
+Leningradskaïa oblast rés;Kirishi : 1 : 54600
+Novgorodskaïa oblast;Chudovskiy : 1 : 26723
+Novgorodskaïa oblast;Lyubytinskiy : 1 : 14702
+Leningradskaïa oblast rés;Luzhskiy : 1 : 45968
+Novgorodskaïa oblast;Khvoyninskiy : 1 : 18875
+Novgorodskaïa oblast;Malovisherskiy : 1 : 23941
+Leningradskaïa oblast rés;Slantsy : 1 : 41753
+Novgorodskaïa oblast;Novgorodskiy : 1 : 55034
+Pskovskaïa oblast;Gdovskiy : 1 : 19996
+Pskovskaïa oblast;Plyusskiy : 1 : 13828
+Novgorodskaïa oblast;Batetskiy : 1 : 7451
+Leningradskaïa oblast rés;Luga : 1 : 41452
+Novgorodskaïa oblast;Pestovskiy : 1 : 25630
+Novgorodskaïa oblast;Borovichskiy : 1 : 20961
+Novgorodskaïa oblast;Moshenskiy : 1 : 10530
+Novgorodskaïa oblast;Okulovskiy : 1 : 35266
+Novgorodskaïa oblast;Novgorod : 1 : 239410
+Pskovskaïa oblast;Strugo-Krasnenskiy : 1 : 16017
+Novgorodskaïa oblast;Krestetskiy : 1 : 16590
+Novgorodskaïa oblast;Shimskiy : 1 : 13312
+Novgorodskaïa oblast;Borovichi : 1 : 61790
+Pskovskaïa oblast;Pskovskiy : 1 : 36908
+Novgorodskaïa oblast;Soletskiy : 1 : 19868
+Novgorodskaïa oblast;Starorusskiy : 1 : 18577
+Novgorodskaïa oblast;Parfino : 1 : 16987
+Novgorodskaïa oblast;Valdayskiy : 1 : 32286
+Pskovskaïa oblast;Porkhovskiy : 1 : 33725
+Novgorodskaïa oblast;Demyanskiy : 1 : 18279
+Novgorodskaïa oblast;Volotovskiy : 1 : 6854
+Novgorodskaïa oblast;Staraya Russa : 1 : 40034
+Pskovskaïa oblast;Pechorskiy : 1 : 27557
+Pskovskaïa oblast;Dnovskiy : 1 : 19200
+Pskovskaïa oblast;Pskov : 1 : 206925
+Novgorodskaïa oblast;Poddorskiy : 1 : 6656
+Pskovskaïa oblast;Palkinskiy : 1 : 11938
+Pskovskaïa oblast;Dedovicheskiy : 1 : 18703
+Pskovskaïa oblast;Ostrovskiy : 1 : 13331
+Novgorodskaïa oblast;Marevskiy : 1 : 6457
+Pskovskaïa oblast;Bezhanitskiy : 1 : 21289
+Pskovskaïa oblast;Pytalovskiy : 1 : 15519
+Novgorodskaïa oblast;Kholmskiy : 1 : 8841
+Pskovskaïa oblast;Novorzhevskiy : 1 : 15121
+Pskovskaïa oblast;Ostrov : 1 : 28850
+Pskovskaïa oblast;Loknyanskiy : 1 : 15818
+Pskovskaïa oblast;Pushkino-Gorskiy : 1 : 13032
+Pskovskaïa oblast;Krasnogorodskiy : 1 : 11739
+Pskovskaïa oblast;Opochenskiy : 1 : 28054
+Pskovskaïa oblast;Velikolukskiy : 1 : 28452
+Pskovskaïa oblast;Novosokolnicheskiy : 1 : 20792
+Pskovskaïa oblast;Pustoshkinskiy : 1 : 13828
+Pskovskaïa oblast;Sebezhskiy : 1 : 26463
+Pskovskaïa oblast;Kunyinskiy : 1 : 16514
+Pskovskaïa oblast;Velikie Luki : 1 : 115401
+Pskovskaïa oblast;Nevelskiy : 1 : 37505
+Pskovskaïa oblast;Usvyatskiy : 1 : 7959
+Rostovskaïa oblast;Verkhnedonskoy : 1 : 26636
+Rostovskaïa oblast;Sholokhovskiy : 1 : 30168
+Rostovskaïa oblast;Chertkovskiy : 1 : 40661
+Rostovskaïa oblast;Bokovskiy : 1 : 18767
+Rostovskaïa oblast;Kasharskiy : 1 : 30269
+Rostovskaïa oblast;Millerovskiy : 1 : 37029
+Rostovskaïa oblast;Sovetskiy : 1 : 8980
+Rostovskaïa oblast;Millerovo : 1 : 38845
+Rostovskaïa oblast;Milyutinskiy : 1 : 20179
+Rostovskaïa oblast;Oblivskiy : 1 : 21087
+Rostovskaïa oblast;Tarasovskiy : 1 : 34607
+Rostovskaïa oblast;Kamenskiy : 1 : 53878
+Rostovskaïa oblast;Belokalitvinskiy : 1 : 28453
+Rostovskaïa oblast;Tatsynskiy : 1 : 44495
+Rostovskaïa oblast;Morozovskiy : 1 : 46109
+Rostovskaïa oblast;Donetsk : 1 : 55190
+Rostovskaïa oblast;Kamensk-Shakhtinskiy : 1 : 97264
+Rostovskaïa oblast;Belaya Kalitva : 1 : 95952
+Rostovskaïa oblast;Krasnosulinskiy : 1 : 34405
+Rostovskaïa oblast;Gukovo : 1 : 78396
+Rostovskaïa oblast;Tsymlyanskiy : 1 : 35011
+Rostovskaïa oblast;Zverevo : 1 : 33296
+Rostovskaïa oblast;Konstantinovskiy : 1 : 37735
+Rostovskaïa oblast;Krasnyi Sulin : 1 : 46614
+Rostovskaïa oblast;Ust-Donetskiy : 1 : 31379
+Rostovskaïa oblast;Rodionovo-Nesvetayskiy : 1 : 22601
+Rostovskaïa oblast;Kuybyshevskiy : 1 : 14832
+Rostovskaïa oblast;Novoshakhtinsk : 1 : 123395
+Rostovskaïa oblast;Oktyabrskiy : 1 : 68407
+Rostovskaïa oblast;Shakhty : 1 : 259807
+Rostovskaïa oblast;Matveyevo-Kurganskiy : 1 : 44394
+Rostovskaïa oblast;Dubovskiy : 1 : 27141
+Rostovskaïa oblast;Volgodonskiy : 1 : 26939
+Rostovskaïa oblast;Semikarakorskiy : 1 : 54786
+Rostovskaïa oblast;Neklinovskiy : 1 : 79405
+Rostovskaïa oblast;Volgodonsk : 1 : 193014
+Rostovskaïa oblast;Zavetinskiy : 1 : 20078
+Rostovskaïa oblast;Aksayskiy : 1 : 74966
+Rostovskaïa oblast;Myasnikovskiy : 1 : 34103
+Rostovskaïa oblast;Novocherkassk : 1 : 202296
+Rostovskaïa oblast;Martynovskiy : 1 : 35112
+Rostovskaïa oblast;Zimovnikovskiy : 1 : 39652
+Rostovskaïa oblast;Bagayevskiy : 1 : 34506
+Rostovskaïa oblast;Rostov-na-Dony : 1 : 1022680
+Rostovskaïa oblast;Veselovskiy : 1 : 24619
+Rostovskaïa oblast;Taganrog : 1 : 293607
+Rostovskaïa oblast;Azovskiy : 1 : 87275
+Rostovskaïa oblast;Proletarskiy : 1 : 37735
+Rostovskaïa oblast;Bataysk : 1 : 95145
+Rostovskaïa oblast;Orlovskiy : 1 : 40157
+Rostovskaïa oblast;Azov : 1 : 82230
+Rostovskaïa oblast;Kagalnitskiy : 1 : 29462
+Rostovskaïa oblast;Zernogradskiy : 1 : 65885
+Rostovskaïa oblast;Salskiy : 1 : 50650
+Rostovskaïa oblast;Tselinskiy : 1 : 36524
+Krasnodarski kraï résidue;Scherbinovskiy : 1 : 39171
+Krasnodarski kraï résidue;Kuschevskiy : 1 : 71436
+Rostovskaïa oblast;Remontnenskiy : 1 : 24619
+Krasnodarski kraï résidue;Yeysk : 1 : 92052
+Krasnodarski kraï résidue;Yeyskiy : 1 : 43913
+Rostovskaïa oblast;Yegorlykskiy : 1 : 35213
+Krasnodarski kraï résidue;Starominskiy : 1 : 40717
+Krasnodarski kraï résidue;Krylovskiy : 1 : 37419
+Rostovskaïa oblast;Salsk : 1 : 63867
+Krasnodarski kraï résidue;Leningradskiy : 1 : 67828
+Krasnodarski kraï résidue;Kanevskiy : 1 : 96279
+Rostovskaïa oblast;Peschanokopskiy : 1 : 35213
+Krasnodarski kraï résidue;Novopokrovskiy : 1 : 49789
+Krasnodarski kraï résidue;Beloglinskiy : 1 : 36285
+Krasnodarski kraï résidue;Pavlovskiy : 1 : 68859
+Stavropolski kraï résidue;Apanasenkovskiy : 1 : 38216
+Krasnodarski kraï résidue;Primorsko-Akhtarskiy : 1 : 59066
+Stavropolski kraï résidue;Ipatovskiy : 1 : 71797
+Krasnodarski kraï résidue;Tikhoretskiy : 1 : 61746
+Krasnodarski kraï résidue;Bryukhovetskiy : 1 : 54118
+Stavropolski kraï résidue;Krasnogvardeyskiy : 1 : 43264
+Krasnodarski kraï résidue;Tikhoretzk : 1 : 70405
+Krasnodarski kraï résidue;Vyselkovskiy : 1 : 60818
+Stavropolski kraï résidue;Trunovskiy : 1 : 35332
+Krasnodarski kraï résidue;Korenovskiy : 1 : 84012
+Krasnodarski kraï résidue;Kalininskiy : 1 : 48655
+Stavropolski kraï résidue;Novoaleksandrovskiy : 1 : 65514
+Krasnodarski kraï résidue;Timashevskiy : 1 : 102257
+Krasnodarski kraï résidue;Slavyanskiy : 1 : 65045
+Stavropolski kraï résidue;Turkmenskiy : 1 : 30079
+Krasnodarski kraï résidue;Kavkazskiy : 1 : 45768
+Stavropolski kraï résidue;Izobilnenskiy : 1 : 95798
+Stavropolski kraï résidue;Arzgirzskiy : 1 : 32345
+Krasnodarski kraï résidue;Tbilisskiy : 1 : 48655
+Stavropolski kraï résidue;Petrovskiy : 1 : 84467
+Krasnodarski kraï résidue;Krasnoarmeyskiy : 1 : 98959
+Krasnodarski kraï résidue;Krasnodar : 1 : 774661
+Krasnodarski kraï résidue;Kropotkin : 1 : 79579
+Stavropolski kraï résidue;Grachevskiy : 1 : 35950
+Krasnodarski kraï résidue;Temryukskiy : 1 : 113493
+Krasnodarski kraï résidue;Ust-Labinskiy : 1 : 107308
+Stavropolski kraï résidue;Levokumskiy : 1 : 45118
+Krasnodarski kraï résidue;Gulkevichskiy : 1 : 100093
+Krasnodarski kraï résidue;Dinskiy : 1 : 114215
+Stavropolski kraï résidue;Blagodarnenskiy : 1 : 63145
+Stavropolski kraï résidue;Shpakovskiy : 1 : 91266
+Krasnodarski kraï résidue;Slavyansk-Na-Kubani : 1 : 61746
+Krasnodarski kraï résidue;Novokubanskiy : 1 : 83599
+Respoublika Adygeïa;Krasnogvardeyskiy : 1 : 31496
+Krasnodarski kraï résidue;Kurganinskiy : 1 : 100608
+Krasnodarski kraï résidue;Anapskiy : 1 : 61746
+Stavropolski kraï résidue;Stavropol : 1 : 341784
+Krasnodarski kraï résidue;Krymskiy : 1 : 72157
+Krasnodarski kraï résidue;Abinskiy : 1 : 90712
+Respoublika Adygeïa;Shovgenovskiy : 1 : 17710
+Stavropolski kraï résidue;Budennovskiy : 1 : 52844
+Krasnodarski kraï résidue;Armavir : 1 : 183280
+Respoublika Adygeïa;Takhtamukayskiy : 1 : 65910
+Krasnodarski kraï résidue;Anapa : 1 : 59891
+Krasnodarski kraï résidue;Severskiy : 1 : 104319
+Respoublika Adygeïa;Koshekhablskiy : 1 : 31094
+Respoublika Adygeïa;Teuchezhskiy : 1 : 21735
+Krasnodarski kraï résidue;Uspenskiy : 1 : 39480
+Stavropolski kraï résidue;Kochubeyevskiy : 1 : 77875
+Stavropolski kraï résidue;Aleksandrovskiy : 1 : 53359
+Stavropolski kraï résidue;Neftekumskiy : 1 : 68089
+Stavropolski kraï résidue;Andropovskiy : 1 : 36053
+Stavropolski kraï résidue;Novoselitskiy : 1 : 25855
+Dagestan;Nogayskiy : 1 : 18638
+Krasnodarski kraï résidue;Belorechnskiy : 1 : 41954
+Dagestan;Tarumovskiy : 1 : 36216
+Respoublika Adygeïa;Giaginskiy : 1 : 34414
+Krasnodarski kraï résidue;Novorossiysk : 1 : 244923
+Krasnodarski kraï résidue;Krymsk : 1 : 54737
+Stavropolski kraï résidue;Budennovsk : 1 : 60878
+Krasnodarski kraï résidue;Goryachiy Klyuch : 1 : 51747
+RU-UNK-2875 : 1 : 12679
+Respoublika Adygeïa;Maykopskiy : 1 : 58766
+Krasnodarski kraï résidue;Belorechensk : 1 : 58963
+Krasnodarski kraï résidue;Gelendzhik : 1 : 78548
+Krasnodarski kraï résidue;Labinsk : 1 : 63395
+Krasnodarski kraï résidue;Labinskiy : 1 : 40202
+Krasnodarski kraï résidue;Mostovskiy : 1 : 71951
+Stavropolski kraï résidue;Nevinnomyssk : 1 : 129791
+RU-UNK-2876 : 1 : 13343
+Respoublika Adygeïa;Maykop : 1 : 175291
+Krasnodarski kraï résidue;Apsheronskiy : 1 : 92877
+Krasnodarski kraï résidue;Otradnenskiy : 1 : 67622
+Stavropolski kraï résidue;Georgiyevskiy : 1 : 70149
+Stavropolski kraï résidue;Sovetskiy : 1 : 71797
+Stavropolski kraï résidue;Mineralovodskiy : 1 : 42955
+Stavropolski kraï résidue;Stepnovskiy : 1 : 22662
+Karatchaevo-Tcherkesskaïa;Adyge-Khablskiy : 1 : 28505
+Krasnodarski kraï résidue;Tuapsinskiy : 1 : 53912
+Karatchaevo-Tcherkesskaïa;Prikubanskiy : 1 : 33843
+Dagestan;Kizlyarskiy : 1 : 53477
+Stavropolski kraï résidue;Predgornyi : 1 : 95283
+Stavropolski kraï résidue;Kurskiy : 1 : 48517
+Karatchaevo-Tcherkesskaïa;Cherkessk : 1 : 119359
+Karatchaevo-Tcherkesskaïa;Khabezskiy : 1 : 27901
+Stavropolski kraï résidue;Mineralniye Vody : 1 : 87455
+Stavropolski kraï résidue;Georgiyevsk : 1 : 75197
+Stavropolski kraï résidue;Kirovskiy : 1 : 62320
+Stavropolski kraï résidue;Zheleznovodsk : 1 : 48414
+Karatchaevo-Tcherkesskaïa;Ust-Dzhegutinskiy : 1 : 50664
+Stavropolski kraï résidue;Lermontov : 1 : 25443
+Karatchaevo-Tcherkesskaïa;Zelenchugskiy : 1 : 53888
+Karatchaevo-Tcherkesskaïa;Urupskiy : 1 : 22663
+Stavropolski kraï résidue;Pyatigorsk : 1 : 189021
+Stavropolski kraï résidue;Yessentuki : 1 : 91163
+Krasnodarski kraï résidue;Sochi : 1 : 389959
+Krasnodarski kraï résidue;Tuapse : 1 : 67003
+Karatchaevo-Tcherkesskaïa;Malokarachayevskiy : 1 : 37671
+Tchetchenia*;Naurskiy : 1 : 41529
+Kabardino-Balkaria;Prokhladnenskiy : 1 : 43371
+Stavropolski kraï résidue;Kislovodsk : 1 : 118563
+Tchetchenia*;Shelkovskiy : 1 : 39389
+Kabardino-Balkaria;Zolskiy : 1 : 41555
+Dagestan;Makhachkala : 1 : 392131
+Karatchaevo-Tcherkesskaïa;Karachayevskiy : 1 : 26491
+Dagestan;Babayurtovskiy : 1 : 34204
+Dagestan;Kizlyar : 1 : 45641
+Kabardino-Balkaria;Baksanskiy : 1 : 100458
+Severo-Osetinskaïa respou;Mozdokskiy : 1 : 80634
+Karatchaevo-Tcherkesskaïa;Karachayevsk : 1 : 33743
+Kabardino-Balkaria;Terskiy : 1 : 49624
+Kabardino-Balkaria;Prokhladnyi : 1 : 59206
+Kabardino-Balkaria;Mayskiy : 1 : 37521
+Tchetchenia*;Nadterechnyi : 1 : 32624
+Kabardino-Balkaria;Urvanskiy : 1 : 85632
+Kabardino-Balkaria;Chegemskiy : 1 : 51944
+Ingouchetia*;Malgobekskiy : 1 : 38330
+Tchetchenia*;Groznenskiy : 1 : 91536
+Dagestan;Khasavyurtovskiy : 1 : 102295
+RU-UNK-2877 : 1 : 257096
+Ingouchetia*;Sunzhenskiy : 1 : 79198
+Kabardino-Balkaria;Sovetskiy : 1 : 22089
+Ingouchetia*;Malgobek : 1 : 26907
+Tchetchenia*;Gudermesskiy : 1 : 45040
+Kabardino-Balkaria;Tyrnyauz : 1 : 38025
+Severo-Osetinskaïa respou;Kirovskiy : 1 : 25730
+Tchetchenia*;Groznyi : 1 : 309973
+Severo-Osetinskaïa respou;Pravoberezhnyi : 1 : 52169
+Ingouchetia*;Nazranovskiy : 1 : 121589
+Dagestan;Kizilyurtovskiy : 1 : 48924
+Tchetchenia*;Achkhoy-Martanovskiy : 1 : 53261
+Tchetchenia*;Gudermes : 1 : 32453
+Tchetchenia*;Shalinskiy : 1 : 80490
+Tchetchenia*;Argun : 1 : 23633
+Severo-Osetinskaïa respou;Prigorodnyi : 1 : 70706
+Severo-Osetinskaïa respou;Irafskiy : 1 : 15904
+Dagestan;Khasavyurt : 1 : 79104
+Severo-Osetinskaïa respou;Digorskiy : 1 : 20462
+Severo-Osetinskaïa respou;Ardonskiy : 1 : 25426
+Dagestan;Novolakskiy : 1 : 15249
+Dagestan;Kizilyurt : 1 : 43947
+Tchetchenia*;Urus-Martanovskiy : 1 : 45640
+Tchetchenia*;Nozhay-Yurtovskiy : 1 : 40159
+Dagestan;Kazbekovskiy : 1 : 26580
+Tchetchenia*;Shali : 1 : 23205
+Tchetchenia*;Urus-Martan : 1 : 33224
+Dagestan;Buynakskiy : 1 : 55383
+Severo-Osetinskaïa respou;Vladikavkaz : 1 : 323244
+Severo-Osetinskaïa respou;Alagirskiy : 1 : 44065
+Tchetchenia*;Vedenskiy : 1 : 29285
+Tchetchenia*;Shatoyskiy : 1 : 10789
+Dagestan;Kaspiysk : 1 : 66608
+Dagestan;Gumbetovskiy : 1 : 14084
+Dagestan;Botlikhskiy : 1 : 33569
+Dagestan;Leninskiy : 1 : 43841
+Tchetchenia*;Itum-Kalinskiy : 1 : 2654
+Dagestan;Untsukulskiy : 1 : 19802
+Dagestan;Buynaksk : 1 : 61631
+Dagestan;Khunzakhskiy : 1 : 24885
+Dagestan;Akhvakhskiy : 1 : 16096
+Dagestan;Tsumadinskiy : 1 : 17896
+Dagestan;Kayakentskiy : 1 : 37699
+Dagestan;Levashinskiy : 1 : 46065
+Dagestan;Gergebilskiy : 1 : 13661
+Dagestan;Izberbash : 1 : 35687
+Dagestan;Sovetskiy : 1 : 21073
+Dagestan;Gunibskiy : 1 : 20544
+Dagestan;Sergokalinskiy : 1 : 21285
+Dagestan;Tsuntinskiy : 1 : 15249
+Dagestan;Akushinskiy : 1 : 41511
+Dagestan;Tlyaratinskiy : 1 : 20332
+Dagestan;Charodinskiy : 1 : 11331
+Dagestan;Derbentskiy : 1 : 74762
+Dagestan;Lakskiy : 1 : 9848
+Dagestan;Kaytagskiy : 1 : 26050
+Dagestan;Dakhadayevskiy : 1 : 33887
+Dagestan;Kulinskiy : 1 : 11331
+Dagestan;Derbent : 1 : 86834
+Dagestan;Dagestanskiye Ogni : 1 : 25203
+Dagestan;Tabasaranskiy : 1 : 46594
+Dagestan;Agulskiy : 1 : 8048
+Dagestan;Rutulskiy : 1 : 18532
+Dagestan;Magaramkentskiy : 1 : 39817
+Dagestan;Khivskiy : 1 : 20014
+Dagestan;Suleyman-Stalskiy : 1 : 42676
+Dagestan;Kurakhskiy : 1 : 12813
+Dagestan;Akhtynskiy : 1 : 33887
+RU-UNK-2878 : 1 : 12679
+RU-UNK-2879 : 1 : 13343
+RU-UNK-2880 : 1 : 257096
+Sverdlovskaïa oblast;Ivdel : 1 : 37692
+Permskaïa oblast résiduel;Krasnovisherskiy : 1 : 30394
+Permskaïa oblast résiduel;Cherdynskiy : 1 : 41081
+Komi-Permiatski national;Gaynskiy : 1 : 20655
+Sverdlovskaïa oblast;Severouralsk : 1 : 59587
+Sverdlovskaïa oblast;Garinskiy : 1 : 8898
+Komi-Permiatski national;Kosinskiy : 1 : 10278
+Permskaïa oblast résiduel;Solikamskiy : 1 : 18138
+Sverdlovskaïa oblast;Karpinsk : 1 : 53688
+Sverdlovskaïa oblast;Serovskiy : 1 : 30593
+Komi-Permiatski national;Kochevskiy : 1 : 14133
+Sverdlovskaïa oblast;Krasnoturinsk : 1 : 73284
+Permskaïa oblast résiduel;Aleksandrovsk : 1 : 43630
+Permskaïa oblast résiduel;Usolskiy : 1 : 15197
+Komi-Permiatski national;Yurlinskiy : 1 : 15417
+Sverdlovskaïa oblast;Serov : 1 : 105577
+Sverdlovskaïa oblast;Novolyalinskiy : 1 : 29294
+Permskaïa oblast résiduel;Solikamsk : 1 : 107065
+Permskaïa oblast résiduel;Berezniki : 1 : 195306
+Komi-Permiatski national;Kudymkarskiy : 1 : 35677
+Sverdlovskaïa oblast;Taborinskiy : 1 : 6799
+Permskaïa oblast résiduel;Kizel : 1 : 57847
+Permskaïa oblast résiduel;Gornozavodskiy : 1 : 36963
+Komi-Permiatski national;Yusvinskiy : 1 : 28759
+Komi-Permiatski national;Kudymkar : 1 : 33108
+Sverdlovskaïa oblast;Alapayevskiy : 1 : 48089
+Sverdlovskaïa oblast;Verkhoturskiy : 1 : 21395
+Permskaïa oblast résiduel;Dobryanskiy : 1 : 62847
+Permskaïa oblast résiduel;Gremyachinsk : 1 : 28531
+Sverdlovskaïa oblast;Nizhnyaya Tura : 1 : 37492
+Permskaïa oblast résiduel;Gubakha : 1 : 54905
+Permskaïa oblast résiduel;Ilyinskiy : 1 : 24707
+Sverdlovskaïa oblast;Kachkanar : 1 : 51389
+Permskaïa oblast résiduel;Karagayskiy : 1 : 25982
+Sverdlovskaïa oblast;Turinskiy : 1 : 41091
+Permskaïa oblast résiduel;Chusovskoy : 1 : 28629
+Permskaïa oblast résiduel;Sivinskiy : 1 : 19021
+Sverdlovskaïa oblast;Tavdinskiy : 1 : 10998
+Sverdlovskaïa oblast;Kushva : 1 : 70784
+Sverdlovskaïa oblast;Krasnouralsk : 1 : 35292
+Oudmourtia;Glazovskiy : 1 : 20697
+Oudmourtia;Balezinskiy : 1 : 40695
+Sverdlovskaïa oblast;Verkhnesaldinskiy : 1 : 4999
+Oudmourtia;Yarskiy : 1 : 20597
+Oudmourtia;Kezskiy : 1 : 29896
+Permskaïa oblast résiduel;Nytvenskiy : 1 : 51768
+Permskaïa oblast résiduel;Krasnokamsk : 1 : 75005
+Permskaïa oblast résiduel;Chusovoy : 1 : 55396
+Permskaïa oblast résiduel;Vereschaginskiy : 1 : 46081
+Permskaïa oblast résiduel;Lysvenskiy : 1 : 16374
+Sverdlovskaïa oblast;Prigorodnyi : 1 : 50289
+Permskaïa oblast résiduel;Perm : 1 : 1083107
+Permskaïa oblast résiduel;Permskiy : 1 : 86868
+Permskaïa oblast résiduel;Lysva : 1 : 77162
+Sverdlovskaïa oblast;Nizhniaya Salda : 1 : 20695
+Oudmourtia;Yukamenskiy : 1 : 13398
+Oudmourtia;Glazov : 1 : 107487
+Permskaïa oblast résiduel;Ocherskiy : 1 : 25198
+Sverdlovskaïa oblast;Verkhniaya Salda : 1 : 55088
+Sverdlovskaïa oblast;Irbitskiy : 1 : 35692
+Sverdlovskaïa oblast;Tavda : 1 : 46390
+Sverdlovskaïa oblast;Nizhniy Tagil : 1 : 433205
+Permskaïa oblast résiduel;Kungurskiy : 1 : 46768
+Sverdlovskaïa oblast;Alapayevsk : 1 : 58087
+Sverdlovskaïa oblast;Slobodo-Turinskiy : 1 : 19396
+Permskaïa oblast résiduel;Okhanskiy : 1 : 19119
+Permskaïa oblast résiduel;Beryozovskiy : 1 : 19021
+Permskaïa oblast résiduel;Bolshesosnovskiy : 1 : 16766
+Oudmourtia;Krasnogorskiy : 1 : 14298
+Sverdlovskaïa oblast;Baykalovskiy : 1 : 21695
+Oudmourtia;Debesskiy : 1 : 14398
+Sverdlovskaïa oblast;Nevyanskiy : 1 : 31093
+Oudmourtia;Igrinskiy : 1 : 46994
+Sverdlovskaïa oblast;Shalinskiy : 1 : 31393
+Sverdlovskaïa oblast;Rezhevskiy : 1 : 10898
+Sverdlovskaïa oblast;Kirovgrad : 1 : 50989
+Sverdlovskaïa oblast;Artyemovskiy : 1 : 34093
+Sverdlovskaïa oblast;Irbit : 1 : 50489
+Sverdlovskaïa oblast;Nevyansk : 1 : 29194
+Permskaïa oblast résiduel;Osinsky : 1 : 36081
+Permskaïa oblast résiduel;Chastinskiy : 1 : 14609
+Oudmourtia;Seltinskiy : 1 : 15498
+Permskaïa oblast résiduel;Kishertskiy : 1 : 17158
+Oudmourtia;Sharkanskiy : 1 : 22397
+Oudmourtia;Syumsinskiy : 1 : 18798
+Permskaïa oblast résiduel;Kungur : 1 : 78338
+Sverdlovskaïa oblast;Rezsh : 1 : 43290
+Sverdlovskaïa oblast;Tugulymskiy : 1 : 30693
+Sverdlovskaïa oblast;Artyomovskiy : 1 : 41791
+Oudmourtia;Yakshur-Bodyinskiy : 1 : 22697
+Sverdlovskaïa oblast;Pervouralsk : 1 : 171862
+Sverdlovskaïa oblast;Verkhnyay Pyshma : 1 : 85281
+Sverdlovskaïa oblast;Talitskiy : 1 : 63586
+Sverdlovskaïa oblast;Pyshminskiy : 1 : 25694
+Oudmourtia;Uvinskiy : 1 : 41995
+Permskaïa oblast résiduel;Suksunskiy : 1 : 23433
+Oudmourtia;Votkinskiy : 1 : 23697
+Sverdlovskaïa oblast;Asbest : 1 : 119474
+Sverdlovskaïa oblast;Kamyshlovskiy : 1 : 21295
+Sverdlovskaïa oblast;Berezovskiy : 1 : 65786
+Permskaïa oblast résiduel;Ordinsky : 1 : 17844
+Sverdlovskaïa oblast;Sukholozhskiy : 1 : 13497
+Permskaïa oblast résiduel;Bardymskiy : 1 : 27845
+Permskaïa oblast résiduel;Yelovskiy : 1 : 14217
+Sverdlovskaïa oblast;Nizhneserginskiy : 1 : 71084
+Sverdlovskaïa oblast;Achitskiy : 1 : 23395
+Permskaïa oblast résiduel;Uinskiy : 1 : 14119
+Oudmourtia;Zavyalovskiy : 1 : 52794
+Oudmourtia;Votkinsk : 1 : 104987
+Sverdlovskaïa oblast;Yekaterinburg : 1 : 1400892
+Oudmourtia;Vavozhskiy : 1 : 18598
+Oudmourtia;Izhevsk : 1 : 652420
+Permskaïa oblast résiduel;Chaykovskiy : 1 : 17550
+Sverdlovskaïa oblast;Beloyarskiy : 1 : 41091
+Sverdlovskaïa oblast;Sukhoy Log : 1 : 37092
+Sverdlovskaïa oblast;Krasnoufimskiy : 1 : 36892
+Sverdlovskaïa oblast;Bogdanovichskiy : 1 : 19096
+Sverdlovskaïa oblast;Kamyshlov : 1 : 32193
+Permskaïa oblast résiduel;Oktyabrskiy : 1 : 37747
+Sverdlovskaïa oblast;Zarechny : 1 : 29793
+Sverdlovskaïa oblast;Revda : 1 : 85481
+Sverdlovskaïa oblast;Bogdanovich : 1 : 35592
+Permskaïa oblast résiduel;Kuyedinskiy : 1 : 33433
+Permskaïa oblast résiduel;Chernushinskiy : 1 : 52650
+Kourganskaïa oblast;Shatrovskiy : 1 : 28320
+Oudmourtia;Kiznerskiy : 1 : 26397
+Permskaïa oblast résiduel;Chaykovsky : 1 : 86672
+Oudmourtia;Malopurginskiy : 1 : 31596
+Sverdlovskaïa oblast;Sysertskiy : 1 : 80082
+Sverdlovskaïa oblast;Artinskiy : 1 : 39191
+Oudmourtia;Mozhginskiy : 1 : 28796
+Oudmourtia;Sarapulskiy : 1 : 26597
+Sverdlovskaïa oblast;Polevskoy : 1 : 79882
+Sverdlovskaïa oblast;Kamenskiy : 1 : 31993
+Kourganskaïa oblast;Dalmatovskiy : 1 : 39588
+Kourganskaïa oblast;Katayskiy : 1 : 31710
+Sverdlovskaïa oblast;Kamensk-Uralskiy : 1 : 208554
+Oudmourtia;Sarapul : 1 : 110486
+Kourganskaïa oblast;Shadrinskiy : 1 : 36696
+Bachkiria;Yanaulskiy : 1 : 23641
+Oudmourtia;Kambarskiy : 1 : 23297
+Oudmourtia;Kiyasovskiy : 1 : 13098
+Oudmourtia;Mogzsha : 1 : 48194
+Bachkiria;Tatyshlinskiy : 1 : 26874
+Bachkiria;Askinskiy : 1 : 24146
+Oudmourtia;Alnashskiy : 1 : 21397
+Tcheliabinskaïa oblast;Kaslinskiy : 1 : 17087
+Tcheliabinskaïa oblast;Nyazepetrovskskiy : 1 : 27804
+Bachkiria;Yanaul : 1 : 26166
+Kourganskaïa oblast;Belozerskiy : 1 : 24630
+Tcheliabinskaïa oblast;Kunashakskiy : 1 : 35993
+Bachkiria;Krasnokamskiy : 1 : 25762
+Oudmourtia;Grakhovskiy : 1 : 11999
+Oudmourtia;Karakulinskiy : 1 : 14998
+Tcheliabinskaïa oblast;Verkhniy Ufaley : 1 : 47014
+Bachkiria;Baltachevskiy : 1 : 25156
+Kourganskaïa oblast;Kargapolskiy : 1 : 38591
+Bachkiria;Belokatayskiy : 1 : 22832
+Kourganskaïa oblast;Shadrinsk : 1 : 87553
+Bachkiria;Kaltasinskiy : 1 : 28389
+Bachkiria;Karaidelskiy : 1 : 30814
+Bachkiria;Mechetlinskiy : 1 : 24651
+Bachkiria;Duvanskiy : 1 : 31016
+Bachkiria;Neftekamsk : 1 : 124164
+Bachkiria;Burayevskiy : 1 : 29500
+Kourganskaïa oblast;Vargashinskiy : 1 : 24930
+Kourganskaïa oblast;Mokrousovskiy : 1 : 17152
+Tcheliabinskaïa oblast;Krasnoarmeyskiy : 1 : 47216
+Tcheliabinskaïa oblast;Kasli : 1 : 30129
+RU-UNK-2881 : 1 : 20610
+Tcheliabinskaïa oblast;Kyshtym : 1 : 54597
+Kourganskaïa oblast;Mishkinskiy : 1 : 25827
+Bachkiria;Mishkinskiy : 1 : 28187
+Kourganskaïa oblast;Schuchanskiy : 1 : 30713
+Kourganskaïa oblast;Shumikhinskiy : 1 : 38192
+Bachkiria;Ilishevskiy : 1 : 36774
+Kourganskaïa oblast;Ketovskiy : 1 : 54247
+Bachkiria;Dyurtyulinskiy : 1 : 32228
+Tcheliabinskaïa oblast;Argayashskiy : 1 : 45194
+Kourganskaïa oblast;Chastoozerskiy : 1 : 9174
+Bachkiria;Kiginskiy : 1 : 19600
+Tcheliabinskaïa oblast;Karabash : 1 : 16885
+Kourganskaïa oblast;Yurgamyshskiy : 1 : 27423
+Tcheliabinskaïa oblast;Sosnovskiy : 1 : 56518
+Bachkiria;Nurimanovskiy : 1 : 22630
+Bachkiria;Birskiy : 1 : 19498
+Kourganskaïa oblast;Lebyazhyevskiy : 1 : 23633
+Tcheliabinskaïa oblast;Kusinskiy : 1 : 37712
+Bachkiria;Salavatskiy : 1 : 27278
+Bachkiria;Blagoveshchenskiy : 1 : 18589
+Kourganskaïa oblast;Makushinskiy : 1 : 26027
+Bachkiria;Dyurtuli : 1 : 28086
+Kourganskaïa oblast;Kurgan : 1 : 365867
+Tcheliabinskaïa oblast;Miass : 1 : 185831
+Tcheliabinskaïa oblast;Zlatoust : 1 : 212118
+Bachkiria;Birsk : 1 : 36774
+Kourganskaïa oblast;Petukhovskiy : 1 : 27024
+Bachkiria;Bakalinskiy : 1 : 32430
+Bachkiria;Chekmagushevskiy : 1 : 32935
+Tcheliabinskaïa oblast;Chelyabinsk : 1 : 1174535
+Tcheliabinskaïa oblast;Satkinskiy : 1 : 45902
+Tcheliabinskaïa oblast;Ashynskiy : 1 : 44183
+Bachkiria;Kushnarenkovskiy : 1 : 27985
+Tcheliabinskaïa oblast;Kopeysk : 1 : 148220
+Bachkiria;Iglinskiy : 1 : 43139
+Kourganskaïa oblast;Pritobolnyi : 1 : 19246
+Tcheliabinskaïa oblast;Chebarkulskiy : 1 : 31039
+Kourganskaïa oblast;Safakulevskiy : 1 : 20542
+Tcheliabinskaïa oblast;Katayev-Ivanovskiy : 1 : 23456
+Kourganskaïa oblast;Kurtamyshskiy : 1 : 42879
+Kourganskaïa oblast;Polovinskiy : 1 : 17351
+Kourganskaïa oblast;Almenevskiy : 1 : 19545
+Tcheliabinskaïa oblast;Yetkulskiy : 1 : 31039
+Bachkiria;Blagoveshchensk : 1 : 28894
+Tcheliabinskaïa oblast;Satka : 1 : 51766
+Bachkiria;Sharanskiy : 1 : 24550
+Tcheliabinskaïa oblast;Asha : 1 : 38622
+Bachkiria;Ufimskiy : 1 : 47989
+Tcheliabinskaïa oblast;Chebarkul' : 1 : 51462
+Bachkiria;Blagovarskiy : 1 : 24752
+Tcheliabinskaïa oblast;Korkino : 1 : 72897
+Tcheliabinskaïa oblast;Ust-Katayev : 1 : 35993
+Bachkiria;Uchaly : 1 : 33036
+Bachkiria;Buzdyakskiy : 1 : 31218
+Bachkiria;Ufa : 1 : 1110303
+Bachkiria;Chishminskiy : 1 : 51929
+Bachkiria;Arkhangelskiy : 1 : 20105
+Tcheliabinskaïa oblast;Yemanzhelinsk : 1 : 55911
+Kourganskaïa oblast;Tselinnyi : 1 : 25927
+Bachkiria;Tuymazinskiy : 1 : 30511
+Tcheliabinskaïa oblast;Uvelskiy : 1 : 31444
+Tcheliabinskaïa oblast;Katayev-Ivanovsk : 1 : 25377
+Bachkiria;Beloretskiy : 1 : 33137
+Kourganskaïa oblast;Zverinogolovsky : 1 : 10969
+Tcheliabinskaïa oblast;Oktyabrskiy : 1 : 31241
+Tcheliabinskaïa oblast;Uyskiy : 1 : 30837
+Bachkiria;Karmaskalinskiy : 1 : 46574
+Bachkiria;Tuymazy : 1 : 94563
+Tcheliabinskaïa oblast;Plast : 1 : 26995
+Bachkiria;Oktyabrskiy : 1 : 108100
+Tcheliabinskaïa oblast;Yuzhno-Uralsk : 1 : 42464
+Tcheliabinskaïa oblast;Troitskiy : 1 : 36398
+Bachkiria;Belebeyevskiy : 1 : 16771
+Bachkiria;Davlekanovskiy : 1 : 18185
+Orenbourgskaïa oblast;Severnyi : 1 : 21082
+RU-UNK-2882 : 1 : 39098
+Bachkiria;Gafuriyskiy : 1 : 36067
+Bachkiria;Yermekeyevskiy : 1 : 18084
+Bachkiria;Aurgazinskiy : 1 : 39098
+Bachkiria;Alsheyevskiy : 1 : 48393
+Bachkiria;Davlekanovo : 1 : 22933
+Tcheliabinskaïa oblast;Verkhneuralskiy : 1 : 45902
+Tcheliabinskaïa oblast;Troitsk : 1 : 88972
+Bachkiria;Belebey : 1 : 80419
+Orenbourgskaïa oblast;Abdulinskiy : 1 : 17669
+Bachkiria;Beloretsk : 1 : 91027
+Orenbourgskaïa oblast;Buguruslanskiy : 1 : 23993
+Bachkiria;Abzelilovskiy : 1 : 40613
+Bachkiria;Bizhbulyakskiy : 1 : 28086
+Bachkiria;Sterlitamakskiy : 1 : 34047
+Tcheliabinskaïa oblast;Nagaybakskiy : 1 : 26287
+Tcheliabinskaïa oblast;Chesmenskiy : 1 : 20929
+Bachkiria;Miyakinskiy : 1 : 31622
+Bachkiria;Ishimbaysky : 1 : 25358
+Orenbourgskaïa oblast;Asekeyevskiy : 1 : 25298
+Tcheliabinskaïa oblast;Agapovskiy : 1 : 37510
+Orenbourgskaïa oblast;Buguruslan : 1 : 53006
+Bachkiria;Sterlitamak : 1 : 256814
+Bachkiria;Sterlibashevskiy : 1 : 22327
+Tcheliabinskaïa oblast;Varnenskiy : 1 : 32556
+Orenbourgskaïa oblast;Abdulino : 1 : 22086
+Orenbourgskaïa oblast;Matveyevskiy : 1 : 16364
+Bachkiria;Burzyanskiy : 1 : 15053
+Bachkiria;Ishimbay : 1 : 72437
+Tcheliabinskaïa oblast;Magnitogorsk : 1 : 444861
+Tcheliabinskaïa oblast;Kartalinskiy : 1 : 23254
+Orenbourgskaïa oblast;Ponomaryovskiy : 1 : 18673
+Bachkiria;Meleuzskiy : 1 : 26469
+Bachkiria;Fyodorovskiy : 1 : 20105
+Bachkiria;Salavat : 1 : 156695
+Orenbourgskaïa oblast;Buzulukskiy : 1 : 32928
+Bachkiria;Baymakskiy : 1 : 43543
+Orenbourgskaïa oblast;Sharlykskiy : 1 : 23692
+Orenbourgskaïa oblast;Grachevskiy : 1 : 16966
+Tcheliabinskaïa oblast;Kizilskiy : 1 : 33466
+Orenbourgskaïa oblast;Krasnogvardeyskiy : 1 : 26905
+Tcheliabinskaïa oblast;Kartaly : 1 : 37207
+Bachkiria;Kugarchinskiy : 1 : 32531
+Bachkiria;Zilairskiy : 1 : 18993
+Bachkiria;Meleuz : 1 : 59001
+Bachkiria;Kumertauskiy : 1 : 24045
+Orenbourgskaïa oblast;Aleksandrovskiy : 1 : 21283
+Orenbourgskaïa oblast;Kurmanayevskiy : 1 : 22588
+Tcheliabinskaïa oblast;Bredinskiy : 1 : 33668
+Orenbourgskaïa oblast;Buzuluk : 1 : 84529
+Bachkiria;Kumertay : 1 : 72235
+Bachkiria;Sibay : 1 : 53040
+Orenbourgskaïa oblast;Sorochinskiy : 1 : 16966
+Orenbourgskaïa oblast;Oktyabrskiy : 1 : 22588
+Orenbourgskaïa oblast;Novosergiyevskiy : 1 : 38952
+Bachkiria;Baymak : 1 : 17478
+Orenbourgskaïa oblast;Totskiy : 1 : 34635
+Orenbourgskaïa oblast;Tyulganskiy : 1 : 25700
+Bachkiria;Zianchurinskiy : 1 : 28187
+Orenbourgskaïa oblast;Kvarkenskiy : 1 : 24495
+Bachkiria;Khaybullinskiy : 1 : 31420
+RU-UNK-2883 : 1 : 27607
+Orenbourgskaïa oblast;Perevolotskiy : 1 : 30017
+Orenbourgskaïa oblast;Pervomayskiy : 1 : 26302
+Orenbourgskaïa oblast;Sakmarskiy : 1 : 28009
+Orenbourgskaïa oblast;Tashlinskiy : 1 : 24897
+Orenbourgskaïa oblast;Saraktashskiy : 1 : 42265
+Orenbourgskaïa oblast;Orenburgskiy : 1 : 56620
+Orenbourgskaïa oblast;Adamovskiy : 1 : 31021
+Orenbourgskaïa oblast;Orenburg : 1 : 573432
+Orenbourgskaïa oblast;Kuvandykskiy : 1 : 25800
+Orenbourgskaïa oblast;Gayskiy : 1 : 13553
+Orenbourgskaïa oblast;Novoorskiy : 1 : 34233
+Orenbourgskaïa oblast;Ilekskiy : 1 : 28712
+Orenbourgskaïa oblast;Belyaevskiy : 1 : 20580
+Orenbourgskaïa oblast;Kuvandyk : 1 : 29816
+Orenbourgskaïa oblast;Svetlinskiy : 1 : 20982
+Orenbourgskaïa oblast;Gay : 1 : 44373
+Orenbourgskaïa oblast;Mednogorsk : 1 : 39755
+Orenbourgskaïa oblast;Sol-Iletskiy : 1 : 53107
+Orenbourgskaïa oblast;Yasnenskiy : 1 : 8433
+Orenbourgskaïa oblast;Akbulakskiy : 1 : 30418
+Orenbourgskaïa oblast;Orsk : 1 : 279689
+Orenbourgskaïa oblast;Novotroitsk : 1 : 115349
+Orenbourgskaïa oblast;Dombarovskiy : 1 : 20781
+Orenbourgskaïa oblast;Yasny : 1 : 28109
+RU-UNK-2884 : 1 : 20610
+RU-UNK-2885 : 1 : 39098
+RU-UNK-2886 : 1 : 27607
+Iamalo-Nenetski national;Yamalskiy : 1 : 14080
+Iamalo-Nenetski national;Tazovskiy : 1 : 17345
+Iamalo-Nenetski national;Priuralskiy : 1 : 6938
+Iamalo-Nenetski national;Purovskiy : 1 : 55505
+Iamalo-Nenetski national;Nadymskiy : 1 : 27038
+Iamalo-Nenetski national;Kranoselkupskiy : 1 : 8673
+Iamalo-Nenetski national;Shuryshkarskiy : 1 : 9489
+Iamalo-Nenetski national;Labytnangi : 1 : 34078
+Iamalo-Nenetski national;Salekhard : 1 : 31528
+Iamalo-Nenetski national;Novyi Urengoy : 1 : 101113
+Khanty-Mansiski national;Berezovskiy : 1 : 28526
+Iamalo-Nenetski national;Nadym : 1 : 51220
+Khanty-Mansiski national;Beloyarskiy : 1 : 8770
+Iamalo-Nenetski national;Muravlenko : 1 : 28365
+Khanty-Mansiski national;Beloyarsky : 1 : 18144
+Khanty-Mansiski national;Oktyabrskiy : 1 : 32961
+Khanty-Mansiski national;Surgutskiy : 1 : 73987
+Iamalo-Nenetski national;Noyabrsk : 1 : 97746
+Khanty-Mansiski national;Khanty-Mansiyskiy : 1 : 20361
+Khanty-Mansiski national;Nizhnevartovskiy : 1 : 32256
+Khanty-Mansiski national;Sovetskiy : 1 : 74188
+Khanty-Mansiski national;Nyagan : 1 : 62899
+Khanty-Mansiski national;Kogalym : 1 : 48787
+Khanty-Mansiski national;Raduzhnyi : 1 : 47073
+Khanty-Mansiski national;Pokachy : 1 : 13104
+Khanty-Mansiski national;Surgut : 1 : 262885
+Khanty-Mansiski national;Langepas : 1 : 31046
+Khanty-Mansiski national;Kondinskiy : 1 : 36590
+Khanty-Mansiski national;Nefteyuganskiy : 1 : 26712
+Khanty-Mansiski national;Nefteugansk : 1 : 96163
+Khanty-Mansiski national;Khanty-Mansyisk : 1 : 35683
+Tomskaïa oblast;Kargasokskiy : 1 : 30628
+Khanty-Mansiski national;Megion : 1 : 48989
+Khanty-Mansiski national;Nizshnvartovsk : 1 : 246958
+RU-UNK-2887 : 1 : 12648
+RU-UNK-2888 : 1 : 12648
+Khanty-Mansiski national;Pyt-Yakh : 1 : 39110
+Tomskaïa oblast;Strezhevoj : 1 : 46830
+Khanty-Mansiski national;Uray : 1 : 40320
+Tioumenskaïa obl. résidue;Uvatskiy : 1 : 19322
+Tomskaïa oblast;Verkhneketskiy : 1 : 26864
+Tomskaïa oblast;Parabelskiy : 1 : 17143
+Tomskaïa oblast;Kolpashevskiy : 1 : 24565
+Tioumenskaïa obl. résidue;Tobolskiy : 1 : 26730
+Tioumenskaïa obl. résidue;Vagayskiy : 1 : 27832
+Omskaïa oblast;Tarskiy : 1 : 25795
+Omskaïa oblast;Ust-Ishimskiy : 1 : 21496
+Tomskaïa oblast;Pervomayskiy : 1 : 25297
+Tomskaïa oblast;Teguldetskiy : 1 : 9826
+Tomskaïa oblast;Kolpashevo : 1 : 32091
+Tioumenskaïa obl. résidue;Tobolsk : 1 : 117934
+Omskaïa oblast;Tevrizskiy : 1 : 20896
+Tioumenskaïa obl. résidue;Nizhnetavdinskiy : 1 : 27331
+Tioumenskaïa obl. résidue;Yarkovskiy : 1 : 26230
+Tomskaïa oblast;Molchanovskiy : 1 : 20593
+Tomskaïa oblast;Chainskiy : 1 : 18293
+Tomskaïa oblast;Asinovskiy : 1 : 16934
+Tomskaïa oblast;Bakcharskiy : 1 : 19129
+Omskaïa oblast;Znamenskiy : 1 : 15197
+Tomskaïa oblast;Krivosheinskiy : 1 : 20488
+Omskaïa oblast;Sedelnikovskiy : 1 : 13897
+RU-UNK-2889 : 1 : 5017
+Tioumenskaïa obl. résidue;Tyumenskiy : 1 : 88901
+Tomskaïa oblast;Tomskiy : 1 : 98468
+Tioumenskaïa obl. résidue;Vikulovskiy : 1 : 21224
+Omskaïa oblast;Bolsheukovskiy : 1 : 11498
+Tomskaïa oblast;Zyryanskiy : 1 : 19443
+Tioumenskaïa obl. résidue;Aromashevskiy : 1 : 16819
+Novosibirskaïa oblast;Kyshtovskiy : 1 : 18965
+Tioumenskaïa obl. résidue;Yurginskiy : 1 : 15718
+Tomskaïa oblast;Shegarskiy : 1 : 25506
+Tomskaïa oblast;Asino : 1 : 34704
+Tioumenskaïa obl. résidue;Tyumen : 1 : 544118
+Novosibirskaïa oblast;Severnyi : 1 : 12545
+Tioumenskaïa obl. résidue;Yalutorovskiy : 1 : 17119
+Tioumenskaïa obl. résidue;Sorokinskiy : 1 : 13315
+Tioumenskaïa obl. résidue;Zavodoukovskiy : 1 : 23627
+Omskaïa oblast;Tara : 1 : 26595
+Kemerovskaïa oblast;Mariinskiy : 1 : 22083
+Tioumenskaïa obl. résidue;Golyshmanovskiy : 1 : 29333
+Tioumenskaïa obl. résidue;Isetskiy : 1 : 26130
+Omskaïa oblast;Kolosovskiy : 1 : 18097
+Tomskaïa oblast;Tomsk : 1 : 523491
+Tioumenskaïa obl. résidue;Omutinskiy : 1 : 24528
+Omskaïa oblast;Muromtsevskiy : 1 : 32294
+Omskaïa oblast;Krutinskiy : 1 : 23796
+Tioumenskaïa obl. résidue;Abatskiy : 1 : 27431
+Omskaïa oblast;Bolsherechenskiy : 1 : 37793
+Tomskaïa oblast;Kozhevnikovskiy : 1 : 26028
+Tioumenskaïa obl. résidue;Yalutorovsk : 1 : 37142
+Kemerovskaïa oblast;Yayskiy : 1 : 26481
+Tioumenskaïa obl. résidue;Ishimskiy : 1 : 36341
+Kemerovskaïa oblast;Izhmorskiy : 1 : 19152
+Novosibirskaïa oblast;Ubinskiy : 1 : 21040
+Novosibirskaïa oblast;Kolyvanskiy : 1 : 28448
+Omskaïa oblast;Tyukalinskiy : 1 : 22296
+Kemerovskaïa oblast;Tyazhinskiy : 1 : 33907
+Tioumenskaïa obl. résidue;Uporovskiy : 1 : 22225
+Tioumenskaïa obl. résidue;Zavodoukovsk : 1 : 25629
+Novosibirskaïa oblast;Vengerovskiy : 1 : 24991
+Tioumenskaïa obl. résidue;Armizonskiy : 1 : 13916
+Novosibirskaïa oblast;Kuybyshevskiy : 1 : 21929
+Kemerovskaïa oblast;Mariinsk : 1 : 39281
+Kemerovskaïa oblast;Yashkinskiy : 1 : 36448
+Novosibirskaïa oblast;Ust-Tarkskiy : 1 : 15706
+Kemerovskaïa oblast;Yurginskiy : 1 : 23061
+Kemerovskaïa oblast;Chebulinskiy : 1 : 18175
+Tioumenskaïa obl. résidue;Ishim : 1 : 64173
+RU-UNK-2890 : 1 : 24495
+Kemerovskaïa oblast;Anzhero-Sudzhensk : 1 : 109147
+Kemerovskaïa oblast;Tayga : 1 : 26090
+Novosibirskaïa oblast;Bolotninskiy : 1 : 36350
+Tioumenskaïa obl. résidue;Berdyuzhskiy : 1 : 15117
+Novosibirskaïa oblast;Chulymskiy : 1 : 31214
+Omskaïa oblast;Nizhneomskiy : 1 : 22496
+Kemerovskaïa oblast;Tisulskiy : 1 : 33418
+Omskaïa oblast;Sargatskiy : 1 : 22296
+Tioumenskaïa obl. résidue;Sladkovskiy : 1 : 17720
+Kemerovskaïa oblast;Kemerovskiy : 1 : 36741
+Omskaïa oblast;Tukalinsk : 1 : 12498
+Tioumenskaïa obl. résidue;Kazanskiy : 1 : 24428
+Kemerovskaïa oblast;Berezovskiy : 1 : 56772
+Omskaïa oblast;Gorkovskiy : 1 : 28695
+Kemerovskaïa oblast;Yurga : 1 : 92633
+Novosibirskaïa oblast;Kargatskiy : 1 : 25089
+Kemerovskaïa oblast;Topkinskiy : 1 : 19250
+Novosibirskaïa oblast;Moshkovskiy : 1 : 41684
+Novosibirskaïa oblast;Chanovskiy : 1 : 33584
+Novosibirskaïa oblast;Tatarskiy : 1 : 20941
+Omskaïa oblast;Lyubinskiy : 1 : 44292
+Novosibirskaïa oblast;Kochenevskiy : 1 : 47018
+Omskaïa oblast;Nazyvayevsk : 1 : 14097
+Novosibirskaïa oblast;Toguchinskiy : 1 : 66971
+Novosibirskaïa oblast;Novosibirskiy : 1 : 108161
+Novosibirskaïa oblast;Kuybishev : 1 : 51957
+Omskaïa oblast;Omskiy : 1 : 89484
+Novosibirskaïa oblast;Barabinskiy : 1 : 18373
+Kemerovskaïa oblast;Krapivinskiy : 1 : 30682
+Kemerovskaïa oblast;Kemerovo : 1 : 540948
+Novosibirskaïa oblast;Barabinsk : 1 : 34572
+Omskaïa oblast;Kalachinskiy : 1 : 23596
+Omskaïa oblast;Isilkulskiy : 1 : 22096
+Kemerovskaïa oblast;Topki : 1 : 32930
+Novosibirskaïa oblast;Tatarsk : 1 : 28349
+Omskaïa oblast;Moskalenskiy : 1 : 33794
+Omskaïa oblast;Kormilovskiy : 1 : 26795
+Novosibirskaïa oblast;Novosibirsk : 1 : 1442547
+Kemerovskaïa oblast;Promyshlennovskiy : 1 : 49053
+Omskaïa oblast;Maryanovskiy : 1 : 28395
+Omskaïa oblast;Omsk : 1 : 1190281
+Novosibirskaïa oblast;Chistoozyornyi : 1 : 24003
+Omskaïa oblast;Kalachinsk : 1 : 25395
+Novosibirskaïa oblast;Zdvinskiy : 1 : 21731
+Omskaïa oblast;Okoneshnikovskiy : 1 : 19696
+Novosibirskaïa oblast;Iskitimskiy : 1 : 69934
+Novosibirskaïa oblast;Ob : 1 : 24991
+Kemerovskaïa oblast;Leninsk-kuznetskiy : 1 : 29412
+Omskaïa oblast;Isil'kul' : 1 : 26295
+Novosibirskaïa oblast;Kupinskiy : 1 : 40598
+Novosibirskaïa oblast;Dovolenskiy : 1 : 22620
+Kemerovskaïa oblast;Mezhdurechenskiy : 1 : 3029
+Omskaïa oblast;Tavricheskiy : 1 : 42192
+Novosibirskaïa oblast;Maslyaninskiy : 1 : 26867
+Novosibirskaïa oblast;Berdsk : 1 : 80899
+Omskaïa oblast;Azovsky nemetsky national : 1 : 19096
+Novosibirskaïa oblast;Ordynskiy : 1 : 38424
+Omskaïa oblast;Sherbakulskiy : 1 : 27195
+Novosibirskaïa oblast;Iskitim : 1 : 68157
+Omskaïa oblast;Cherlakskiy : 1 : 37893
+Omskaïa oblast;Poltavskiy : 1 : 25095
+Kemerovskaïa oblast;Belovskiy : 1 : 33516
+Kemerovskaïa oblast;Guryevskiy : 1 : 13191
+Kemerovskaïa oblast;Leninsk-Kuznetskiy : 1 : 167873
+Novosibirskaïa oblast;Kochkovskiy : 1 : 16891
+Omskaïa oblast;Odesskiy : 1 : 19196
+Novosibirskaïa oblast;Cherepanovskiy : 1 : 53044
+Novosibirskaïa oblast;Suzunskiy : 1 : 36251
+Omskaïa oblast;Pavlogradskiy : 1 : 23396
+Altaïski kraï résiduel;Zalesovskiy : 1 : 20839
+Kemerovskaïa oblast;Belovo : 1 : 171587
+Novosibirskaïa oblast;Krasnozerskiy : 1 : 40301
+Kemerovskaïa oblast;Prokopyevskiy : 1 : 35177
+Omskaïa oblast;Novovarshavskiy : 1 : 29495
+Novosibirskaïa oblast;Baganskiy : 1 : 19262
+Altaïski kraï résiduel;Krutikhinksiy : 1 : 14727
+Novosibirskaïa oblast;Karasukskiy : 1 : 51167
+Kemerovskaïa oblast;Guryevsk : 1 : 39379
+Altaïski kraï résiduel;Zarinskiy : 1 : 24445
+Kemerovskaïa oblast;Novokuznetskiy : 1 : 49346
+Altaïski kraï résiduel;Talmenskiy : 1 : 50794
+Altaïski kraï résiduel;Pankrushykhinskiy : 1 : 18334
+Altaïski kraï résiduel;Kamenskiy : 1 : 17833
+Omskaïa oblast;Russko-Polyanskiy : 1 : 28695
+Kemerovskaïa oblast;Kisilevsk : 1 : 128495
+Altaïski kraï résiduel;Pervomayskiy : 1 : 51897
+Kemerovskaïa oblast;Prokopyevsk : 1 : 260605
+Altaïski kraï résiduel;Kytmanovskiy : 1 : 19336
+Altaïski kraï résiduel;Khabarskiy : 1 : 21340
+Altaïski kraï résiduel;Kamen'-na-Obi : 1 : 44683
+Kemerovskaïa oblast;Mezshdurechensk : 1 : 105434
+Altaïski kraï résiduel;Shelabolikhinskiy : 1 : 16330
+Kemerovskaïa oblast;Novokuznetsk : 1 : 600163
+Altaïski kraï résiduel;Togulskiy : 1 : 12123
+Kemerovskaïa oblast;Myski : 1 : 47685
+RU-UNK-2891 : 1 : 52898
+Altaïski kraï résiduel;Burlinskiy : 1 : 16431
+Kemerovskaïa oblast;Osinniki : 1 : 105141
+Altaïski kraï résiduel;Pavlovskiy : 1 : 40876
+Altaïski kraï résiduel;Bayevskiy : 1 : 15329
+Altaïski kraï résiduel;Kosikhinskiy : 1 : 22542
+Altaïski kraï résiduel;Tyumentsevskiy : 1 : 18835
+Kemerovskaïa oblast;Tashtagolskiy : 1 : 37425
+Altaïski kraï résiduel;Yeltsovskiy : 1 : 9618
+Altaïski kraï résiduel;Barnaul : 1 : 659326
+Altaïski kraï résiduel;Suyetskiy : 1 : 7414
+Altaïski kraï résiduel;Novoaltaysk : 1 : 69229
+RU-UNK-2892 : 1 : 20538
+Altaïski kraï résiduel;Rebrikhinskiy : 1 : 29856
+Altaïski kraï résiduel;Tselinniy : 1 : 21941
+Altaïski kraï résiduel;Kalmanskiy : 1 : 15829
+Altaïski kraï résiduel;Slavgorodskiy : 1 : 13225
+Altaïski kraï résiduel;Troitskiy : 1 : 33863
+Altaïski kraï résiduel;Blagoveschenskiy : 1 : 36969
+Altaïski kraï résiduel;Zavyalovskiy : 1 : 22542
+Altaïski kraï résiduel;Slavgorod : 1 : 59411
+Altaïski kraï résiduel;Soltonskiy : 1 : 12523
+Altaïski kraï résiduel;Topchikhinskiy : 1 : 28453
+Altaïski kraï résiduel;Tabunskiy : 1 : 13325
+Altaïski kraï résiduel;Mamontovskiy : 1 : 27451
+Altaïski kraï résiduel;Zonalnyi : 1 : 20538
+Altaïski kraï résiduel;Biyskiy : 1 : 34564
+Altaïski kraï résiduel;Rodinskiy : 1 : 25948
+Altaïski kraï résiduel;Romanovskiy : 1 : 16531
+Kemerovskaïa oblast;Tashtagol : 1 : 25406
+Altaïski kraï résiduel;Kulundinskiy : 1 : 27852
+Altaïski kraï résiduel;Aleyskiy : 1 : 23143
+Respoublika Altaï;Turochakskiy : 1 : 14532
+Altaïski kraï résiduel;Ust-Pristanskiy : 1 : 19436
+Altaïski kraï résiduel;Shipunovskiy : 1 : 38872
+Altaïski kraï résiduel;Krasnogorskiy : 1 : 20638
+Altaïski kraï résiduel;Bystroistokskiy : 1 : 14327
+Altaïski kraï résiduel;Klyuchevskiy : 1 : 20238
+Altaïski kraï résiduel;Biysk : 1 : 240748
+Altaïski kraï résiduel;Aleysk : 1 : 30457
+Altaïski kraï résiduel;Smolenskiy : 1 : 26750
+Altaïski kraï résiduel;Sovetskiy : 1 : 18534
+Altaïski kraï résiduel;Novichikhinskiy : 1 : 12523
+Altaïski kraï résiduel;Petropavlovskiy : 1 : 14727
+Altaïski kraï résiduel;Volchikhinskiy : 1 : 22943
+Altaïski kraï résiduel;Ust-Kalmanskiy : 1 : 20839
+Altaïski kraï résiduel;Pospelikhinskiy : 1 : 30156
+Altaïski kraï résiduel;Mikhaylovskiy : 1 : 24846
+Altaïski kraï résiduel;Altayskiy : 1 : 27050
+Respoublika Altaï;Choyskiy : 1 : 9755
+Altaïski kraï résiduel;Yegoryevskiy : 1 : 16130
+Respoublika Altaï;Mayminskiy : 1 : 24287
+Altaïski kraï résiduel;Belokurikha : 1 : 13225
+Altaïski kraï résiduel;Soloneshenskiy : 1 : 14727
+Altaïski kraï résiduel;Rubtsovskiy : 1 : 27151
+Respoublika Altaï;Gorno-Altaysk : 1 : 47355
+Altaïski kraï résiduel;Krasnoshekovskiy : 1 : 24846
+Altaïski kraï résiduel;Charyshskiy : 1 : 16330
+Altaïski kraï résiduel;Uglovskiy : 1 : 16531
+Altaïski kraï résiduel;Kuryinskiy : 1 : 15329
+Respoublika Altaï;Shebalinskiy : 1 : 14430
+Respoublika Altaï;Chemalsky : 1 : 9552
+Altaïski kraï résiduel;Zmeinogorskiy : 1 : 13826
+Respoublika Altaï;Ulaganskiy : 1 : 12194
+Altaïski kraï résiduel;Rubtzovsk : 1 : 171920
+Respoublika Altaï;Ust-Kanskiy : 1 : 17377
+Altaïski kraï résiduel;Loktevskiy : 1 : 35466
+Respoublika Altaï;Ongudayskiy : 1 : 17275
+Altaïski kraï résiduel;Zmeinogorsk : 1 : 12824
+Altaïski kraï résiduel;Tretiyakovskiy : 1 : 16531
+Respoublika Altaï;Ust-Koksinskiy : 1 : 18596
+Respoublika Altaï;Kosh-Agachskiy : 1 : 14633
+RU-UNK-2893 : 1 : 12648
+RU-UNK-2894 : 1 : 12648
+RU-UNK-2895 : 1 : 5017
+RU-UNK-2896 : 1 : 24495
+RU-UNK-2897 : 1 : 52898
+RU-UNK-2898 : 1 : 20538
+Tatarstan;Baltasinskiy : 1 : 30381
+Tatarstan;Agryzskiy : 1 : 38831
+Tatarstan;Arskiy : 1 : 48488
+Tatarstan;Vysokogorskiy : 1 : 51808
+Tatarstan;Atninskiy : 1 : 14687
+Tatarstan;Kukmorskiy : 1 : 52110
+Tatarstan;Sabinskiy : 1 : 31990
+Tatarstan;Mamadyshskiy : 1 : 50903
+Tatarstan;Zelenodolskiy : 1 : 59454
+Tatarstan;Mendeleyevskiy : 1 : 29475
+Tatarstan;Pestrechinskiy : 1 : 28570
+Tatarstan;Yelabuzhskiy : 1 : 10462
+Tatarstan;Kazan : 1 : 1097327
+Tatarstan;Aktanyshskiy : 1 : 32594
+Tatarstan;Tuylachinskiy : 1 : 13480
+Tatarstan;Tukayevskiy : 1 : 27162
+Tatarstan;Menzelinskiy : 1 : 30481
+Tatarstan;Zelenodol'sk : 1 : 101403
+Tatarstan;Rybno-Slobodskiy : 1 : 30984
+Tatarstan;Elabuga : 1 : 64282
+Tatarstan;Verkhneuslonskiy : 1 : 19516
+Tatarstan;Laishevskiy : 1 : 35914
+Tatarstan;Naberezhniye Chelny : 1 : 530958
+Tatarstan;Nizhnekamskiy : 1 : 39133
+Tatarstan;Nizshnekamsk : 1 : 205724
+RU-UNK-2899 : 1 : 15895
+RU-UNK-2900 : 1 : 22635
+Tatarstan;Sarmanovskiy : 1 : 34807
+Tatarstan;Zainskiy : 1 : 16096
+Tatarstan;Kamsko-Ustyinskiy : 1 : 19013
+Tatarstan;Muslyumovskiy : 1 : 23842
+Tatarstan;Chistopolskiy : 1 : 21930
+Tatarstan;Chistopol' : 1 : 67401
+Tatarstan;Alekseyevskiy : 1 : 25451
+Tatarstan;Novosheshminskiy : 1 : 15291
+Tatarstan;Zainsk : 1 : 40541
+Tatarstan;Buinskiy : 1 : 46074
+Tatarstan;Almetyevskiy : 1 : 35511
+Tatarstan;Kuybyshevskiy : 1 : 23339
+Tatarstan;Tetyushskiy : 1 : 28369
+Tatarstan;Aznakayevskiy : 1 : 29475
+Tatarstan;Aksubayevskiy : 1 : 33600
+Tatarstan;Alkeyevskiy : 1 : 23641
+Tatarstan;Cheremshanskiy : 1 : 22132
+Tatarstan;Almetyevsk : 1 : 145365
+Tatarstan;Oktyabrskiy : 1 : 56335
+Tatarstan;Aznakaevo : 1 : 35109
+Tatarstan;Drozhanovskiy : 1 : 28671
+Oulianovskaïa oblast;Staromaynskiy : 1 : 21563
+Tatarstan;Leninogorskiy : 1 : 23439
+Tatarstan;Yutazinskiy : 1 : 23741
+Tatarstan;Bugulminskiy : 1 : 21126
+Oulianovskaïa oblast;Surskiy : 1 : 27869
+Oulianovskaïa oblast;Tsylninskiy : 1 : 31734
+Oulianovskaïa oblast;Ulyanovskiy : 1 : 57976
+Tatarstan;Leninigorsk : 1 : 65288
+Samarskaïa (Kouïbychevska;Chelno-Vershinskiy : 1 : 21709
+Samarskaïa (Kouïbychevska;Shentalinskiy : 1 : 20309
+Oulianovskaïa oblast;Melekesskiy : 1 : 42211
+Oulianovskaïa oblast;Maynskiy : 1 : 34989
+Tatarstan;Bugul'ma : 1 : 92752
+Samarskaïa (Kouïbychevska;Klyavlinskiy : 1 : 18408
+Oulianovskaïa oblast;Novomalyklinskiy : 1 : 19732
+Samarskaïa (Kouïbychevska;Koshkinskiy : 1 : 25011
+Oulianovskaïa oblast;Cherdaklinskiy : 1 : 43330
+Tatarstan;Bavlinskiy : 1 : 36316
+Oulianovskaïa oblast;Karsunskiy : 1 : 33769
+Oulianovskaïa oblast;Ulyanovsk : 1 : 690933
+Samarskaïa (Kouïbychevska;Sergiyevskiy : 1 : 48320
+Oulianovskaïa oblast;Inzenskiy : 1 : 46279
+Oulianovskaïa oblast;Dimitrovgrad : 1 : 132633
+Samarskaïa (Kouïbychevska;Kamyshlensky : 1 : 11605
+Samarskaïa (Kouïbychevska;Isaklinskiy : 1 : 15807
+Oulianovskaïa oblast;Veshkaymskiy : 1 : 27157
+Oulianovskaïa oblast;Sengileyevskiy : 1 : 30615
+Oulianovskaïa oblast;Terengulskiy : 1 : 22987
+Samarskaïa (Kouïbychevska;Elkhovsky : 1 : 9704
+Oulianovskaïa oblast;Kuzovatovskiy : 1 : 30819
+Penzenskaïa oblast;Nikolskiy : 1 : 47317
+Samarskaïa (Kouïbychevska;Pokhvistnevo : 1 : 32314
+Penzenskaïa oblast;Bednodemyanovskiy : 1 : 15976
+Penzenskaïa oblast;Narovchatskiy : 1 : 15569
+Penzenskaïa oblast;Issinskiy : 1 : 15772
+Penzenskaïa oblast;Lunino : 1 : 26253
+Samarskaïa (Kouïbychevska;Stavropolskiy : 1 : 39917
+Oulianovskaïa oblast;Bazarnosyzganskiy : 1 : 13731
+Samarskaïa (Kouïbychevska;Krasnoyarskiy : 1 : 51422
+Oulianovskaïa oblast;Baryshskiy : 1 : 36515
+Penzenskaïa oblast;Zemetchinskiy : 1 : 38159
+Penzenskaïa oblast;Vadinskiy : 1 : 14246
+Penzenskaïa oblast;Nizhnelomovskiy : 1 : 25745
+Samarskaïa (Kouïbychevska;Shigonskiy : 1 : 25411
+Penzenskaïa oblast;Mokshanskiy : 1 : 35005
+Samarskaïa (Kouïbychevska;Kinel-Cherkasskiy : 1 : 50321
+Oulianovskaïa oblast;Barysh : 1 : 22072
+Samarskaïa (Kouïbychevska;Volzhskiy : 1 : 62827
+Penzenskaïa oblast;Sosnovoborskiy : 1 : 24524
+RU-UNK-2901 : 1 : 27678
+Penzenskaïa oblast;Bessonovskiy : 1 : 45791
+Penzenskaïa oblast;Gorodischenskiy : 1 : 60444
+Samarskaïa (Kouïbychevska;Tolyatti : 1 : 688691
+Penzenskaïa oblast;Bashmakovskiy : 1 : 29001
+Penzenskaïa oblast;Pachelmskiy : 1 : 22488
+Samarskaïa (Kouïbychevska;Syzranskiy : 1 : 24610
+Samarskaïa (Kouïbychevska;Kinelskiy : 1 : 31113
+Samarskaïa (Kouïbychevska;Zhigulyovskiy : 1 : 58024
+Penzenskaïa oblast;Kuznetskiy : 1 : 43043
+Penzenskaïa oblast;Kamenskiy : 1 : 27067
+Samarskaïa (Kouïbychevska;Otradnyi : 1 : 51122
+Oulianovskaïa oblast;Novospasskiy : 1 : 25021
+Oulianovskaïa oblast;Nikolayevskiy : 1 : 35193
+Samarskaïa (Kouïbychevska;Borskiy : 1 : 25311
+Samarskaïa (Kouïbychevska;Samara : 1 : 1267035
+Penzenskaïa oblast;Penza : 1 : 558038
+Penzenskaïa oblast;Penzenskiy : 1 : 43145
+Samarskaïa (Kouïbychevska;Bogatovskiy : 1 : 16007
+Samarskaïa (Kouïbychevska;Kinel : 1 : 49521
+Penzenskaïa oblast;Belinskiy : 1 : 40092
+Penzenskaïa oblast;Kamenka : 1 : 43349
+Samarskaïa (Kouïbychevska;Oktyabrsk : 1 : 31313
+Samarskaïa (Kouïbychevska;Privolzhskiy : 1 : 23910
+Samarskaïa (Kouïbychevska;Bezenchukskiy : 1 : 43818
+Samarskaïa (Kouïbychevska;Syzran : 1 : 184978
+Penzenskaïa oblast;Kuznetsk : 1 : 103894
+Samarskaïa (Kouïbychevska;Novokuybyshevsk : 1 : 115149
+Penzenskaïa oblast;Shemysheyskiy : 1 : 22895
+Oulianovskaïa oblast;Radischevskiy : 1 : 17393
+Penzenskaïa oblast;Kameshkirskiy : 1 : 16892
+Samarskaïa (Kouïbychevska;Neftegorskiy : 1 : 32914
+Samarskaïa (Kouïbychevska;Chapayevsk : 1 : 94740
+Penzenskaïa oblast;Neverkinskiy : 1 : 19944
+Oulianovskaïa oblast;Starokulatkinskiy : 1 : 20241
+Samarskaïa (Kouïbychevska;Krasnoarmeyskiy : 1 : 19108
+Penzenskaïa oblast;Kolyshleyskiy : 1 : 30934
+Penzenskaïa oblast;Kondolskiy : 1 : 12618
+Samarskaïa (Kouïbychevska;Alekseyevskiy : 1 : 14406
+Samarskaïa (Kouïbychevska;Khvorostyanskiy : 1 : 15607
+Oulianovskaïa oblast;Pavlovskiy : 1 : 17800
+Penzenskaïa oblast;Serdobskiy : 1 : 21980
+Penzenskaïa oblast;Tamalinskiy : 1 : 21776
+Penzenskaïa oblast;Lopatino : 1 : 18316
+Saratovskaïa oblast;Khvalynskiy : 1 : 15474
+Penzenskaïa oblast;Bekovskiy : 1 : 21980
+Saratovskaïa oblast;Dukhovnitskiy : 1 : 16981
+Samarskaïa (Kouïbychevska;Bolsheglushitskiy : 1 : 21909
+Saratovskaïa oblast;Baltayskiy : 1 : 12660
+Samarskaïa (Kouïbychevska;Pestravskiy : 1 : 18908
+Penzenskaïa oblast;Maloserdobinskiy : 1 : 12720
+Saratovskaïa oblast;Bazarno-Karabulakskiy : 1 : 36776
+Saratovskaïa oblast;Volskiy : 1 : 31048
+Saratovskaïa oblast;Yekaterinovskiy : 1 : 23814
+Saratovskaïa oblast;Ivanteyevskiy : 1 : 16881
+Saratovskaïa oblast;Khvalynsk : 1 : 14670
+Saratovskaïa oblast;Petrovskiy : 1 : 16177
+Penzenskaïa oblast;Serdobsk : 1 : 46096
+Saratovskaïa oblast;Rtischevskiy : 1 : 21603
+Saratovskaïa oblast;Novoburasskiy : 1 : 17483
+Saratovskaïa oblast;Pugachyovskiy : 1 : 25522
+Samarskaïa (Kouïbychevska;Bolshechernigovskiy : 1 : 22109
+Saratovskaïa oblast;Petrovsk : 1 : 35469
+Saratovskaïa oblast;Turkovskiy : 1 : 18187
+Saratovskaïa oblast;Rtishchevo : 1 : 42804
+Saratovskaïa oblast;Atkarskiy : 1 : 17684
+Saratovskaïa oblast;Balakovskiy : 1 : 20096
+Saratovskaïa oblast;Perelyubskiy : 1 : 19393
+Saratovskaïa oblast;Arkadakskiy : 1 : 33862
+Saratovskaïa oblast;Voskresenskiy : 1 : 12761
+Saratovskaïa oblast;Volsk : 1 : 81690
+Saratovskaïa oblast;Balakovo : 1 : 208294
+Saratovskaïa oblast;Tatischevskiy : 1 : 37378
+Saratovskaïa oblast;Pugachev : 1 : 41800
+Saratovskaïa oblast;Romanovskiy : 1 : 19192
+Saratovskaïa oblast;Marksovskiy : 1 : 33460
+Saratovskaïa oblast;Krasnopartizanskiy : 1 : 19493
+Saratovskaïa oblast;Atkarsk : 1 : 27431
+Saratovskaïa oblast;Saratovskiy : 1 : 40694
+Saratovskaïa oblast;Balashovskiy : 1 : 34565
+Saratovskaïa oblast;Yershovskiy : 1 : 54058
+Saratovskaïa oblast;Kalininskiy : 1 : 40493
+Saratovskaïa oblast;Marx : 1 : 32756
+Saratovskaïa oblast;Ozinskiy : 1 : 28034
+Saratovskaïa oblast;Lysogorskiy : 1 : 21804
+Saratovskaïa oblast;Saratov : 1 : 913260
+Saratovskaïa oblast;Engelskiy : 1 : 43910
+Saratovskaïa oblast;Dergachyovskiy : 1 : 31350
+Saratovskaïa oblast;Balashov : 1 : 96360
+Saratovskaïa oblast;Fedorovskiy : 1 : 23010
+Saratovskaïa oblast;Sovetskiy : 1 : 29742
+Saratovskaïa oblast;Engels : 1 : 218443
+Saratovskaïa oblast;Samoylovskiy : 1 : 27130
+Saratovskaïa oblast;Krasnoarmeyskiy : 1 : 22608
+Volgogradskaïa oblast;Novonikolayevskiy : 1 : 28613
+Saratovskaïa oblast;Krasnokutskiy : 1 : 38685
+Volgogradskaïa oblast;Yelanskiy : 1 : 38320
+Volgogradskaïa oblast;Uryupinskiy : 1 : 33972
+Saratovskaïa oblast;Rovenskiy : 1 : 19594
+Volgogradskaïa oblast;Zhirnovskiy : 1 : 49340
+Volgogradskaïa oblast;Kikvidzenskiy : 1 : 19817
+Volgogradskaïa oblast;Rudnyanskiy : 1 : 21738
+Saratovskaïa oblast;Krasnoarmeysk : 1 : 25321
+Saratovskaïa oblast;Piterskiy : 1 : 19995
+Saratovskaïa oblast;Novouzenskiy : 1 : 35268
+Volgogradskaïa oblast;Novoanninskiy : 1 : 45094
+Volgogradskaïa oblast;Urupinsk : 1 : 44588
+Volgogradskaïa oblast;Danilovskiy : 1 : 22143
+Volgogradskaïa oblast;Staropoltavskiy : 1 : 26591
+Volgogradskaïa oblast;Kamyshinskiy : 1 : 40241
+Volgogradskaïa oblast;Kotovskiy : 1 : 41151
+Volgogradskaïa oblast;Nekhayevskiy : 1 : 20120
+Volgogradskaïa oblast;Mikhaylovskiy : 1 : 26793
+Saratovskaïa oblast;Aleksandrov-Gayskiy : 1 : 17785
+Volgogradskaïa oblast;Alekseyevskiy : 1 : 20120
+Volgogradskaïa oblast;Pallasovskiy : 1 : 49947
+Volgogradskaïa oblast;Nikolayevskiy : 1 : 36803
+Volgogradskaïa oblast;Frolovskiy : 1 : 16885
+Volgogradskaïa oblast;Olkhovskiy : 1 : 20019
+Volgogradskaïa oblast;Kamyshin : 1 : 128912
+Volgogradskaïa oblast;Mikhailovka : 1 : 64001
+Volgogradskaïa oblast;Podtelkovskiy : 1 : 25378
+Volgogradskaïa oblast;Bykovskiy : 1 : 28613
+Volgogradskaïa oblast;Serafimovichskiy : 1 : 29018
+Volgogradskaïa oblast;Frolovo : 1 : 42667
+Volgogradskaïa oblast;Dubovskiy : 1 : 30737
+Volgogradskaïa oblast;Ilovlinskiy : 1 : 34073
+Volgogradskaïa oblast;Kletskiy : 1 : 19817
+Volgogradskaïa oblast;Leninskiy : 1 : 31849
+Volgogradskaïa oblast;Kalachevskiy : 1 : 55811
+Volgogradskaïa oblast;Gorodischenskiy : 1 : 51868
+Volgogradskaïa oblast;Sredneakhtubinskiy : 1 : 50250
+Volgogradskaïa oblast;Surovikinskiy : 1 : 40039
+Volgogradskaïa oblast;Volgograd : 1 : 1036756
+Volgogradskaïa oblast;Volzhskiy : 1 : 292403
+Astrakhanskaïa oblast;Akhtubinskiy : 1 : 36841
+Volgogradskaïa oblast;Svetloyarskiy : 1 : 37410
+Astrakhanskaïa oblast;Chyornoyarskiy : 1 : 23648
+Volgogradskaïa oblast;Chernyshkovskiy : 1 : 20626
+Kalmykia;Maloderbetovskiy : 1 : 13510
+Volgogradskaïa oblast;Oktyabrskiy : 1 : 26187
+Astrakhanskaïa oblast;Akhtubinsk : 1 : 51456
+Kalmykia;Oktyabrskiy : 1 : 12020
+Volgogradskaïa oblast;Kotelnikovskiy : 1 : 40140
+Astrakhanskaïa oblast;Yenotayevskiy : 1 : 31056
+Kalmykia;Sarpinskiy : 1 : 17285
+Astrakhanskaïa oblast;Kharabalinskiy : 1 : 43743
+Kalmykia;Yustinskiy : 1 : 15496
+Kalmykia;Ketchenerovskiy : 1 : 14900
+Astrakhanskaïa oblast;Krasnoyarskiy : 1 : 43540
+Kalmykia;Yashkulskiy : 1 : 20662
+Kalmykia;Tselinnyi : 1 : 22152
+Astrakhanskaïa oblast;Narimanovskiy : 1 : 45671
+Kalmykia;Yashaltinskiy : 1 : 18477
+Astrakhanskaïa oblast;Volodarskiy : 1 : 49325
+Astrakhanskaïa oblast;Privolzhskiy : 1 : 40800
+Kalmykia;Priyutinskiy : 1 : 15397
+Astrakhanskaïa oblast;Astrakhan : 1 : 514968
+Kalmykia;Elista : 1 : 93773
+Kalmykia;Chernozemelskiy : 1 : 15894
+Kalmykia;Gorodovikovskiy : 1 : 20364
+Astrakhanskaïa oblast;Ikryaninskiy : 1 : 51253
+Kalmykia;Iki-Burulskiy : 1 : 16092
+Astrakhanskaïa oblast;Kamyzyakskiy : 1 : 52674
+Astrakhanskaïa oblast;Limanskiy : 1 : 36334
+Kalmykia;Kaspiyskiy : 1 : 23543
+RU-UNK-2902 : 1 : 15895
+RU-UNK-2903 : 1 : 22635
+RU-UNK-2904 : 1 : 27678
+Kaliningradskaïa oblast;Gvardeyskiy : 1 : 29455
+Kaliningradskaïa oblast;Guryevskiy : 1 : 39646
+Kaliningradskaïa oblast;Kaliningrad : 1 : 420517
+Kaliningradskaïa oblast;Nesterovskiy : 1 : 16613
+Kaliningradskaïa oblast;Chernyakhovsk : 1 : 42092
+Kaliningradskaïa oblast;Gusev : 1 : 28537
+Kaliningradskaïa oblast;Pravdinskiy : 1 : 20791
+Kaliningradskaïa oblast;Ozerskiy : 1 : 17734
+Kaliningradskaïa oblast;Slavskiy : 1 : 21709
+Kaliningradskaïa oblast;Zelenogradskiy : 1 : 29251
+Kaliningradskaïa oblast;Sovetsk : 1 : 44233
+Kaliningradskaïa oblast;Nemanskiy : 1 : 9682
+Kaliningradskaïa oblast;Kraznoznamenskiy : 1 : 13555
+Kaliningradskaïa oblast;Neman : 1 : 14472
+Kaliningradskaïa oblast;Polesskiy : 1 : 17734
+Kaliningradskaïa oblast;Svetlogorsk : 1 : 33531
+Kaliningradskaïa oblast;Chernyakhovskiy : 1 : 13861
+Kaliningradskaïa oblast;Gusevskiy : 1 : 8154
+Kaliningradskaïa oblast;Svetlyi : 1 : 28945
+Kaliningradskaïa oblast;Baltiysk : 1 : 29353
+Kaliningradskaïa oblast;Bagrationovskiy : 1 : 43519
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_AREA.txt
new file mode 100644
index 0000000..66796a2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_AREA.txt
@@ -0,0 +1,119 @@
+Rwanda	:	0	:	26388
+Butare	:	1	:	1872
+Butare Town 	:	2	:	0
+District of Gikonko 	:	2	:	0
+District of Kibingo 	:	2	:	0
+District of Kiruhura 	:	2	:	0
+District of Maraba 	:	2	:	0
+District of Mugombwa 	:	2	:	0
+District of Nyakizu 	:	2	:	0
+District of Nyamure 	:	2	:	0
+Nyanza Town 	:	2	:	0
+District of Save 	:	2	:	0
+Byumba	:	1	:	1694
+District of Bungwe 	:	2	:	0
+Byumba Town 	:	2	:	0
+District of Humure 	:	2	:	0
+District of Kinihira 	:	2	:	0
+District of Kisaro 	:	2	:	0
+District of Ngarama 	:	2	:	0
+District of Rebero 	:	2	:	0
+District of Rushaki 	:	2	:	0
+District of Rwamiko 	:	2	:	0
+Cyangugu	:	1	:	1894
+District of Bugarama 	:	2	:	0
+District of Bukunzi 	:	2	:	0
+Cyangugu Town 	:	2	:	0
+District of Gashonga 	:	2	:	0
+District of Gatare 	:	2	:	0
+District of Impala 	:	2	:	0
+District of Nyamasheke 	:	2	:	0
+Gikongoro	:	1	:	1974
+Gikongoro Town 	:	2	:	0
+District of Kaduha 	:	2	:	0
+District of Karaba 	:	2	:	0
+District of Mudasomwa 	:	2	:	0
+District of Mushubi 	:	2	:	0
+District of Nshili 	:	2	:	0
+District of Nyaruguru 	:	2	:	0
+Gisenyi	:	1	:	2047
+District of Cyanzarwe 	:	2	:	0
+District of Gaseke 	:	2	:	0
+District of Gasiza 	:	2	:	0
+Gisenyi Town 	:	2	:	0
+District of Kageyo 	:	2	:	0
+District of Kanama 	:	2	:	0
+District of Kayove 	:	2	:	0
+District of Mutura 	:	2	:	0
+District of Nyagisagara 	:	2	:	0
+District of Nyamyumba 	:	2	:	0
+Gitarama	:	1	:	2141
+Gitarama Town 	:	2	:	0
+District of Kabagari 	:	2	:	0
+District of Kamonyi 	:	2	:	0
+District of Kayumbu 	:	2	:	0
+District of Muhanga 	:	2	:	0
+District of Ndiza 	:	2	:	0
+District of Ntenyo 	:	2	:	0
+District of Ntongwe 	:	2	:	0
+TownRuhango 	:	2	:	0
+District of Ruyumba 	:	2	:	0
+Kibungu	:	1	:	2964
+District of Cyurabare 	:	2	:	0
+District of Kabaronda 	:	2	:	0
+Kibungo Town 	:	2	:	0
+District of Kigarama 	:	2	:	0
+District of Mirenge 	:	2	:	0
+District of Muhazi 	:	2	:	0
+District of Nyarubuye 	:	2	:	0
+District of Rukira 	:	2	:	0
+District of Rusumo 	:	2	:	0
+Rwamagana Town 	:	2	:	0
+Kibuye	:	1	:	1748
+District of Budaha 	:	2	:	0
+District of Gisunzu 	:	2	:	0
+District of Itabire 	:	2	:	0
+Kibuye Town 	:	2	:	0
+District of Rusenyi 	:	2	:	0
+District of Rutsiro 	:	2	:	0
+Kigali	:	1	:	313
+District of Butamwa 	:	2	:	0
+District of Gikondo 	:	2	:	0
+District of Gisozi 	:	2	:	0
+District of Kacyiru 	:	2	:	0
+District of Kanombe 	:	2	:	0
+District of Kicukiro 	:	2	:	0
+District of Nyamirambo 	:	2	:	0
+District of Nyarugenge 	:	2	:	0
+Masaka	:	1	:	2780
+District of Bicumbi 	:	2	:	0
+District of Buliza 	:	2	:	0
+District of Gasabo 	:	2	:	0
+District of Gashora 	:	2	:	0
+Kabuga Town 	:	2	:	0
+District of Ngenda 	:	2	:	0
+District of Nyamata 	:	2	:	0
+District of Rulindo 	:	2	:	0
+District of Rushashi 	:	2	:	0
+District of Shyorongi 	:	2	:	0
+Ruhengeri	:	1	:	1657
+District of Bugarura 	:	2	:	0
+District of Buhoma 	:	2	:	0
+District of Bukamba 	:	2	:	0
+District of Bukonya 	:	2	:	0
+District of Butaro 	:	2	:	0
+District of Cyeru 	:	2	:	0
+District of Kinigi 	:	2	:	0
+District of Mutobo 	:	2	:	0
+District of Nyamugali 	:	2	:	0
+District of Nyuratovu 	:	2	:	0
+Ruhengeri Town 	:	2	:	0
+Nyagatare	:	1	:	4230
+District of Bugaragara 	:	2	:	0
+District of Gabiro 	:	2	:	0
+District of Kabare 	:	2	:	0
+District of Kahi 	:	2	:	0
+District of Murambi 	:	2	:	0
+District of Muvumba 	:	2	:	0
+District of Rukara 	:	2	:	0
+Umutura Town 	:	2	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_POPULATION.txt
new file mode 100644
index 0000000..db617a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/RWANDA_POPULATION.txt
@@ -0,0 +1,119 @@
+Rwanda	:	0	:	8648248
+Butare	:	1	:	725914
+Butare Town 	:	2	:	77449
+District of Gikonko 	:	2	:	70475
+District of Kibingo 	:	2	:	98856
+District of Kiruhura 	:	2	:	51163
+District of Maraba 	:	2	:	62149
+District of Mugombwa 	:	2	:	76558
+District of Nyakizu 	:	2	:	85587
+District of Nyamure 	:	2	:	82716
+Nyanza Town 	:	2	:	55699
+District of Save 	:	2	:	61964
+Byumba	:	1	:	707786
+District of Bungwe 	:	2	:	80068
+Byumba Town 	:	2	:	66536
+District of Humure 	:	2	:	71485
+District of Kinihira 	:	2	:	92003
+District of Kisaro 	:	2	:	77320
+District of Ngarama 	:	2	:	73626
+District of Rebero 	:	2	:	79894
+District of Rushaki 	:	2	:	79484
+District of Rwamiko 	:	2	:	91956
+Cyangugu	:	1	:	607495
+District of Bugarama 	:	2	:	99471
+District of Bukunzi 	:	2	:	87706
+Cyangugu Town 	:	2	:	59429
+District of Gashonga 	:	2	:	74988
+District of Gatare 	:	2	:	83428
+District of Impala 	:	2	:	129986
+District of Nyamasheke 	:	2	:	74496
+Gikongoro	:	1	:	489729
+Gikongoro Town 	:	2	:	32476
+District of Kaduha 	:	2	:	60961
+District of Karaba 	:	2	:	90280
+District of Mudasomwa 	:	2	:	70183
+District of Mushubi 	:	2	:	90336
+District of Nshili 	:	2	:	81277
+District of Nyaruguru 	:	2	:	67092
+Gisenyi	:	1	:	864377
+District of Cyanzarwe 	:	2	:	71142
+District of Gaseke 	:	2	:	78458
+District of Gasiza 	:	2	:	122681
+Gisenyi Town 	:	2	:	67192
+District of Kageyo 	:	2	:	84345
+District of Kanama 	:	2	:	77709
+District of Kayove 	:	2	:	96090
+District of Mutura 	:	2	:	122325
+District of Nyagisagara 	:	2	:	81727
+District of Nyamyumba 	:	2	:	65556
+Gitarama	:	1	:	856488
+Gitarama Town 	:	2	:	84669
+District of Kabagari 	:	2	:	83006
+District of Kamonyi 	:	2	:	116255
+District of Kayumbu 	:	2	:	74264
+District of Muhanga 	:	2	:	79811
+District of Ndiza 	:	2	:	99490
+District of Ntenyo 	:	2	:	109656
+District of Ntongwe 	:	2	:	84870
+TownRuhango 	:	2	:	43780
+District of Ruyumba 	:	2	:	88793
+Kibungu	:	1	:	702248
+District of Cyurabare 	:	2	:	67184
+District of Kabaronda 	:	2	:	67750
+Kibungo Town 	:	2	:	43582
+District of Kigarama 	:	2	:	62773
+District of Mirenge 	:	2	:	101026
+District of Muhazi 	:	2	:	58492
+District of Nyarubuye 	:	2	:	49565
+District of Rukira 	:	2	:	60330
+District of Rusumo 	:	2	:	149643
+Rwamagana Town 	:	2	:	47203
+Kibuye	:	1	:	469016
+District of Budaha 	:	2	:	85420
+District of Gisunzu 	:	2	:	77089
+District of Itabire 	:	2	:	78086
+Kibuye Town 	:	2	:	46500
+District of Rusenyi 	:	2	:	105826
+District of Rutsiro 	:	2	:	74824
+Kigali	:	1	:	603049
+District of Butamwa 	:	2	:	30464
+District of Gikondo 	:	2	:	77680
+District of Gisozi 	:	2	:	66875
+District of Kacyiru 	:	2	:	121191
+District of Kanombe 	:	2	:	53010
+District of Kicukiro 	:	2	:	59165
+District of Nyamirambo 	:	2	:	98827
+District of Nyarugenge 	:	2	:	100929
+Masaka	:	1	:	789330
+District of Bicumbi 	:	2	:	101057
+District of Buliza 	:	2	:	85394
+District of Gasabo 	:	2	:	90534
+District of Gashora 	:	2	:	86606
+Kabuga Town 	:	2	:	51128
+District of Ngenda 	:	2	:	106112
+District of Nyamata 	:	2	:	76456
+District of Rulindo 	:	2	:	71715
+District of Rushashi 	:	2	:	68594
+District of Shyorongi 	:	2	:	54946
+Ruhengeri	:	1	:	891498
+District of Bugarura 	:	2	:	99520
+District of Buhoma 	:	2	:	89091
+District of Bukamba 	:	2	:	119935
+District of Bukonya 	:	2	:	84358
+District of Butaro 	:	2	:	62658
+District of Cyeru 	:	2	:	85102
+District of Kinigi 	:	2	:	62644
+District of Mutobo 	:	2	:	98355
+District of Nyamugali 	:	2	:	54743
+District of Nyuratovu 	:	2	:	67248
+Ruhengeri Town 	:	2	:	70525
+Nyagatare	:	1	:	421623
+District of Bugaragara 	:	2	:	33078
+District of Gabiro 	:	2	:	34250
+District of Kabare 	:	2	:	29228
+District of Kahi 	:	2	:	65750
+District of Murambi 	:	2	:	83418
+District of Muvumba 	:	2	:	95996
+District of Rukara 	:	2	:	73919
+Umutura Town 	:	2	:	8003
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_AREA.txt
new file mode 100644
index 0000000..e936fe4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_AREA.txt
@@ -0,0 +1 @@
+ San Marino : 1 : 1.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_POPULATION.txt
new file mode 100644
index 0000000..042e201
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAN MARINO_POPULATION.txt
@@ -0,0 +1 @@
+ San Marino : 1 : 29521
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_AREA.txt
new file mode 100644
index 0000000..8ff2df5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_AREA.txt
@@ -0,0 +1,14 @@
+Sao tome and principe	:	0	:	1001
+Região Centro  	:	1	:	138.5
+Água Grande distrito 	:	1	:	16.5
+Mé-Zóchi distrito 	:	1	:	122
+Região Norte 	:	1	:	334.5
+Lembá distrito 	:	1	:	229.5
+Lobata distrito 	:	1	:	105
+Região Sul 	:	1	:	386
+Cantagalo distrito 	:	1	:	119
+Caué distrito 	:	1	:	267
+Região Principe [Principe]	:	1	:	142
+Sao Tome : 1 : 854
+Pagué distrito 	:	1	:	142
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_POPULATION.txt
new file mode 100644
index 0000000..49bc886
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAO TOME AND PRINCIPE_POPULATION.txt
@@ -0,0 +1,13 @@
+Sao tome and principe	:	0	:	193413
+Região Centro  	:	1	:	86991
+Água Grande distrito 	:	1	:	51886
+Mé-Zóchi distrito 	:	1	:	35105
+Região Norte 	:	1	:	25883
+Lembá distrito 	:	1	:	10696
+Lobata distrito 	:	1	:	15187
+Região Sul 	:	1	:	18759
+Cantagalo distrito 	:	1	:	13258
+Caué distrito 	:	1	:	5501
+Região Principe [Principe]	:	1	:	5966
+Sao Tome  : 1 : 133600
+Pagué distrito 	:	1	:	5966
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_AREA.txt
new file mode 100644
index 0000000..410e718
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_AREA.txt
@@ -0,0 +1,13 @@
+Sao tome and principe	:	0	:	1001
+Região Centro  	:	1	:	138.5
+Água Grande distrito 	:	1	:	16.5
+Mé-Zóchi distrito 	:	1	:	122
+Região Norte 	:	1	:	334.5
+Lembá distrito 	:	1	:	229.5
+Lobata distrito 	:	1	:	105
+Região Sul 	:	1	:	386
+Cantagalo distrito 	:	1	:	119
+Caué distrito 	:	1	:	267
+Região Principe [Principe]	:	1	:	142
+Sao Tome : 1 : 854
+Pagué distrito 	:	1	:	142
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_POPULATION.txt
new file mode 100644
index 0000000..49bc886
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAOTOMEPRINCIPE_POPULATION.txt
@@ -0,0 +1,13 @@
+Sao tome and principe	:	0	:	193413
+Região Centro  	:	1	:	86991
+Água Grande distrito 	:	1	:	51886
+Mé-Zóchi distrito 	:	1	:	35105
+Região Norte 	:	1	:	25883
+Lembá distrito 	:	1	:	10696
+Lobata distrito 	:	1	:	15187
+Região Sul 	:	1	:	18759
+Cantagalo distrito 	:	1	:	13258
+Caué distrito 	:	1	:	5501
+Região Principe [Principe]	:	1	:	5966
+Sao Tome  : 1 : 133600
+Pagué distrito 	:	1	:	5966
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_AREA.txt
new file mode 100644
index 0000000..2877ad3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_AREA.txt
@@ -0,0 +1,16 @@
+Saudi Arabia	:	0	:	1960582
+Baha	:	1	:	9921
+Al Jawf [Jawf]	:	1	:	100212
+Quray Yat [Incl. in Al Jawf] : 1 : 100212
+Asir	:	1	:	76693
+Eastern Province	:	1	:	672522
+Hail	:	1	:	103887
+Jizan	:	1	:	11671
+Madinah	:	1	:	151990
+Makkah	:	1	:	153128
+Najran	:	1	:	149511
+Northern Frontier	:	1	:	111797
+Quassim	:	1	:	58046
+Riyad	:	1	:	404240
+Tabuk	:	1	:	146072
+IRQ/SAU Neutral Zone : 1 : 7044
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_POPULATION.txt
new file mode 100644
index 0000000..feb64d5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDI ARABIA_POPULATION.txt
@@ -0,0 +1,17 @@
+Saudi Arabia	:	0	:	27019731
+Baha	:	1	:	377739
+Al Jawf [Jawf]	:	1	:	361676
+Quray Yat [Incl. in Al Jawf] : 1 : 361676
+Asir	:	1	:	1688368
+Eastern Province	:	1	:	3360157
+Hail	:	1	:	527033
+Jizan	:	1	:	1186139
+Madinah	:	1	:	1512076
+Makkah	:	1	:	5797971
+Najran	:	1	:	419457
+Northern Frontier	:	1	:	279286
+Quassim	:	1	:	1016756
+Riyad	:	1	:	5455363
+Tabuk	:	1	:	691517
+IRQ/SAU Neutral Zone : 1 : 0
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_AREA.txt
new file mode 100644
index 0000000..f46c19e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_AREA.txt
@@ -0,0 +1,16 @@
+Saudi Arabia	:	0	:	1960582
+Baha	:	1	:	9921
+Al Jawf [Jawf]	:	1	:	100212
+Quray Yat [Incl. in Al Jawf] : 1 : 100212
+Asir	:	1	:	76693
+Eastern Province	:	1	:	672522
+Hail	:	1	:	103887
+Jizan	:	1	:	11671
+Madinah	:	1	:	151990
+Makkah	:	1	:	153128
+Najran	:	1	:	149511
+Northern Frontier	:	1	:	111797
+Quassim	:	1	:	58046
+Riyad	:	1	:	404240
+Tabuk	:	1	:	146072
+IRQ/SAU Neutral Zone : 1 : 7044
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_POPULATION.txt
new file mode 100644
index 0000000..87ad9a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SAUDIARABIA_POPULATION.txt
@@ -0,0 +1,16 @@
+Saudi Arabia	:	0	:	27019731
+Baha	:	1	:	377739
+Al Jawf [Jawf]	:	1	:	361676
+Quray Yat [Incl. in Al Jawf] : 1 : 361676
+Asir	:	1	:	1688368
+Eastern Province	:	1	:	3360157
+Hail	:	1	:	527033
+Jizan	:	1	:	1186139
+Madinah	:	1	:	1512076
+Makkah	:	1	:	5797971
+Najran	:	1	:	419457
+Northern Frontier	:	1	:	279286
+Quassim	:	1	:	1016756
+Riyad	:	1	:	5455363
+Tabuk	:	1	:	691517
+IRQ/SAU Neutral Zone : 1 : 0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_AREA.txt
new file mode 100644
index 0000000..179111e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_AREA.txt
@@ -0,0 +1,46 @@
+Senegal	:	0	:	196190
+Dakar	:	1	:	550
+Departement de Dakar 	:	1	:	83
+Guediawaye	:	1	:	0
+Pikine	:	1	:	95
+Rufisque-Bargny	:	1	:	372
+Diourbel	:	1	:	4359
+Bambey	:	1	:	1351
+Departement de Diourbel 	:	1	:	1175
+Mbacke [Departement de Mbacke] 	:	1	:	1833
+Fatick	:	1	:	7930
+Departement de Fatick 	:	1	:	2646
+Foundiougne	:	1	:	2959
+Gossas	:	1	:	2330
+Kaolac	:	1	:	16010
+Kaffrine	:	1	:	11102
+Kaolack [Departement de Kaolack] 	:	1	:	1880
+Nioro du Rip	:	1	:	2277
+Kolda	:	1	:	21011
+Departement de Kolda 	:	1	:	8284
+Sedhiou	:	1	:	7293
+Velingara	:	1	:	5434
+Louga	:	1	:	29188
+Kebemer	:	1	:	3823
+Linguere	:	1	:	19716
+Departement de Louga 	:	1	:	5649
+Matam	:	1	:	25083
+Kanel	:	1	:	0
+Departement de Matam 	:	1	:	0
+Ranerou	:	1	:	0
+Saint-Louis	:	1	:	19044
+Dagana	:	1	:	6087
+Podor	:	1	:	12947
+Departement de Saint-Louis 	:	1	:	0
+Bakel	:	1	:	59602
+Departement de Bakel 	:	1	:	22378
+Kedougou	:	1	:	16896
+Tambacounda [Departement de Tambacounda] 	:	1	:	20328
+Région de Thiès 	:	1	:	6601
+Mbour	:	1	:	1607
+Thies	:	1	:	1873
+Tivaouane	:	1	:	3121
+Ziguinchor	:	1	:	7339
+Bignona	:	1	:	5295
+Oussouye	:	1	:	891
+Departement de Ziguinchor 	:	1	:	1153
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_POPULATION.txt
new file mode 100644
index 0000000..e5ea725
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SENEGAL_POPULATION.txt
@@ -0,0 +1,46 @@
+Senegal	:	0	:	11987121
+Dakar	:	1	:	2452656
+Departement de Dakar 	:	1	:	1030594
+Guediawaye	:	1	:	280353
+Pikine	:	1	:	834246
+Rufisque-Bargny	:	1	:	307463
+Diourbel	:	1	:	1183095
+Bambey	:	1	:	252532
+Departement de Diourbel 	:	1	:	220221
+Mbacke [Departement de Mbacke] 	:	1	:	710342
+Fatick	:	1	:	652361
+Departement de Fatick 	:	1	:	267756
+Foundiougne	:	1	:	224659
+Gossas	:	1	:	159946
+Kaolac	:	1	:	1132707
+Kaffrine	:	1	:	467748
+Kaolack [Departement de Kaolack] 	:	1	:	382784
+Nioro du Rip	:	1	:	282175
+Kolda	:	1	:	912503
+Departement de Kolda 	:	1	:	306591
+Sedhiou	:	1	:	399365
+Velingara	:	1	:	206547
+Louga	:	1	:	729606
+Kebemer	:	1	:	215648
+Linguere	:	1	:	214883
+Departement de Louga 	:	1	:	299075
+Matam	:	1	:	478573
+Kanel	:	1	:	196919
+Departement de Matam 	:	1	:	233179
+Ranerou	:	1	:	48475
+Saint-Louis	:	1	:	764347
+Dagana	:	1	:	207991
+Podor	:	1	:	329379
+Departement de Saint-Louis 	:	1	:	226977
+Bakel	:	1	:	669091
+Departement de Bakel 	:	1	:	215680
+Kedougou	:	1	:	111207
+Tambacounda [Departement de Tambacounda] 	:	1	:	342204
+Région de Thiès 	:	1	:	1385058
+Mbour	:	1	:	513278
+Thies	:	1	:	529261
+Tivaouane	:	1	:	342519
+Ziguinchor	:	1	:	457847
+Bignona	:	1	:	229016
+Oussouye	:	1	:	36506
+Departement de Ziguinchor 	:	1	:	192325
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_AREA.txt
new file mode 100644
index 0000000..3f1f862
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_AREA.txt
@@ -0,0 +1,5 @@
+ Vojvodina : 1 : 21506.0
+ Srbija : 1 : 55968.0
+ Crna Gora : 1 : 13812.0
+ Kosovo : 1 : 10887.0
+ Makedonija : 1 : 25713.0
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_POPULATION.txt
new file mode 100644
index 0000000..58a40c1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SERBIA_POPULATION.txt
@@ -0,0 +1,5 @@
+ Vojvodina : 1 : 2031992
+ Srbija : 1 : 1576124
+ Crna Gora : 1 : 638461
+ Kosovo : 1 : 2100000
+ Makedonija : 1 : 9832581
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_AREA.txt
new file mode 100644
index 0000000..3405f22
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_AREA.txt
@@ -0,0 +1,27 @@
+Seychelles	:	0	:	455
+Anse aux Pins  	:	1	:	2
+Anse Boileau 	:	1	:	11
+Anse Etoile 	:	1	:	5
+Anse Royale 	:	1	:	6
+Au Cap 	:	1	:	8
+Baie Lazare 	:	1	:	12
+Baie Sainte Anne Praslin 	:	1	:	25
+Beau Vallon 	:	1	:	4
+Bel Air 	:	1	:	4
+Bel Ombre 	:	1	:	9
+Cascade 	:	1	:	10
+English River 	:	1	:	1
+Glacis 	:	1	:	7
+Mahe Island	:	1	:	15
+Praslin Island	:	1	:	14
+La Digue - Inner Islands 	:	1	:	56
+Les Mamelles 	:	1	:	4
+Mont Buxton 	:	1	:	1
+Mont Fleuri 	:	1	:	2
+Outer Islands 	:	1	:	211
+Plaisance 	:	1	:	3
+Pointe La Rue 	:	1	:	4
+Port Glaud 	:	1	:	25
+Roche Caiman 	:	1	:	3
+Saint Louis 	:	1	:	1
+Takamaka 	:	1	:	14
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_POPULATION.txt
new file mode 100644
index 0000000..c9bee3c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SEYCHELLES_POPULATION.txt
@@ -0,0 +1,26 @@
+Anse aux Pins  	:	1	:	3535
+Anse Boileau 	:	1	:	3994
+Anse Etoile 	:	1	:	4272
+Anse Royale 	:	1	:	3688
+Au Cap 	:	1	:	2997
+Baie Lazare 	:	1	:	2957
+Baie Sainte Anne Praslin 	:	1	:	3665
+Beau Vallon 	:	1	:	3797
+Bel Air 	:	1	:	2900
+Bel Ombre 	:	1	:	3538
+Cascade 	:	1	:	3439
+English River 	:	1	:	3624
+Glacis 	:	1	:	3576
+Mahe Island	:	1	:	2587
+Praslin Island	:	1	:	3335
+La Digue - Inner Islands 	:	1	:	2099
+Les Mamelles 	:	1	:	2352
+Mont Buxton 	:	1	:	3107
+Mont Fleuri 	:	1	:	3611
+Outer Islands 	:	1	:	 0
+Plaisance 	:	1	:	3399
+Pointe La Rue 	:	1	:	2715
+Port Glaud 	:	1	:	2174
+Roche Caiman 	:	1	:	2652
+Saint Louis 	:	1	:	3325
+Takamaka 	:	1	:	2589
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_AREA.txt
new file mode 100644
index 0000000..3b45f7c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_AREA.txt
@@ -0,0 +1,23 @@
+Sierra Leone	:	0	:	71740
+Eastern2	:	1	:	15553
+Northern2 : 1 : 35936
+Western3 : 1 : 557
+Southern : 1 : 19694
+Kailahun District 	:	1	:	3859
+Kenema District 	:	1	:	6053
+Kono District 	:	1	:	5641
+Northern	:	1	:	35936
+Bombali District 	:	1	:	7985
+Kambia District 	:	1	:	3108
+Koinadugu District 	:	1	:	12121
+Port Loko District 	:	1	:	5719
+Tonkolili District 	:	1	:	7003
+Soutthern	:	1	:	19694
+Bo District 	:	1	:	5219
+Bonthe District 	:	1	:	3458
+Moyamba District 	:	1	:	6902
+Pujehun District 	:	1	:	4105
+Sherbro Urban District 	:	1	:	10
+Western	:	1	:	557
+Rural District 	:	1	:	544
+Urban District 	:	1	:	13
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_POPULATION.txt
new file mode 100644
index 0000000..fbf5522
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRA LEONE_POPULATION.txt
@@ -0,0 +1,23 @@
+Sierra Leone	:	0	:	6005250
+Eastern2	:	1	:	1191539
+Northern2 : 1 : 1718240
+Western3 : 1 : 950924
+Southern : 1 : 1092657
+Kailahun District 	:	1	:	358190
+Kenema District 	:	1	:	497948
+Kono District 	:	1	:	335401
+Northern	:	1	:	1745553
+Bombali District 	:	1	:	408390
+Kambia District 	:	1	:	270462
+Koinadugu District 	:	1	:	265758
+Port Loko District 	:	1	:	453746
+Tonkolili District 	:	1	:	347197
+Soutthern	:	1	:	1092657
+Bo District 	:	1	:	463668
+Bonthe District 	:	1	:	129947
+Moyamba District 	:	1	:	260910
+Pujehun District 	:	1	:	228392
+Sherbro Urban District 	:	1	:	9740
+Western	:	1	:	947122
+Rural District 	:	1	:	174249
+Urban District 	:	1	:	772873
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_AREA.txt
new file mode 100644
index 0000000..27eb02b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_AREA.txt
@@ -0,0 +1,23 @@
+Sierra Leone	:	0	:	71740
+Eastern2	:	1	:	15553
+Northern2 : 1 : 35936
+Western3 : 1 : 557
+Southern : 1 : 19694
+Kailahun District 	:	1	:	3859
+Kenema District 	:	1	:	6053
+Kono District 	:	1	:	5641
+Northern	:	1	:	35936
+Bombali District 	:	1	:	7985
+Kambia District 	:	1	:	3108
+Koinadugu District 	:	1	:	12121
+Port Loko District 	:	1	:	5719
+Tonkolili District 	:	1	:	7003
+Soutthern	:	1	:	19694
+Bo District 	:	1	:	5219
+Bonthe District 	:	1	:	3458
+Moyamba District 	:	1	:	6902
+Pujehun District 	:	1	:	4105
+Sherbro Urban District 	:	1	:	10
+Western	:	1	:	557
+Rural District 	:	1	:	544
+Urban District 	:	1	:	13
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_POPULATION.txt
new file mode 100644
index 0000000..1a24cee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SIERRALEONE_POPULATION.txt
@@ -0,0 +1,23 @@
+Sierra Leone	:	0	:	6005250
+Eastern2	:	1	:	1191539
+Northern2 : 1 : 1718240
+Western3 : 1 : 950924
+Southern : 1 : 1092657
+Kailahun District 	:	1	:	358190
+Kenema District 	:	1	:	497948
+Kono District 	:	1	:	335401
+Northern	:	1	:	1745553
+Bombali District 	:	1	:	408390
+Kambia District 	:	1	:	270462
+Koinadugu District 	:	1	:	265758
+Port Loko District 	:	1	:	453746
+Tonkolili District 	:	1	:	347197
+Soutthern	:	1	:	1092657
+Bo District 	:	1	:	463668
+Bonthe District 	:	1	:	129947
+Moyamba District 	:	1	:	260910
+Pujehun District 	:	1	:	228392
+Sherbro Urban District 	:	1	:	9740
+Western	:	1	:	947122
+Rural District 	:	1	:	174249
+Urban District 	:	1	:	772873
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_AREA.txt
new file mode 100644
index 0000000..1527c0f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_AREA.txt
@@ -0,0 +1,7 @@
+SINGAPORE	:	0	:	693
+Central Region [Singapore] 	:	1	:	132.7
+East Region 	:	1	:	93.1
+North East Region 	:	1	:	141.1
+North Region 	:	1	:	97.3
+SINGAPORE [West Region]	:	1	:	201.3
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_POPULATION.txt
new file mode 100644
index 0000000..c5010b9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SINGAPORE_POPULATION.txt
@@ -0,0 +1,6 @@
+SINGAPORE	:	0	:	4492150 
+Central Region [Singapore] 	:	1	:	3000000
+East Region 	:	1	:	0
+North East Region 	:	1	:	0
+North Region 	:	1	:	0
+SINGAPORE [West Region]	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVAKIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVAKIA_POPULATION.txt
new file mode 100644
index 0000000..0a5fc64
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVAKIA_POPULATION.txt
@@ -0,0 +1 @@
+SLOVAKIA:0:5374362:285
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_AREA.txt
new file mode 100644
index 0000000..f4c48fe
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_AREA.txt
@@ -0,0 +1 @@
+ Slovenija : 1 : 20251.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_POPULATION.txt
new file mode 100644
index 0000000..26eae17
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SLOVENIA_POPULATION.txt
@@ -0,0 +1 @@
+ Slovenija : 1 : 1948060
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_AREA.txt
new file mode 100644
index 0000000..0711e06
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_AREA.txt
@@ -0,0 +1,105 @@
+SOMALIA:0:637657
+SANAAG:1:23293.609
+J. HOOSE:1:18693.910
+W. GALBEED:1:10420.990
+BANAADIR:1:199.094
+NUGAAL:1:8398.756
+GALGUDUUD:1:17254.740
+J. DHEXE:1:11616.610
+SH. DHEXE:1:8043.745
+BARI:1:28153.150
+BAY:1:14782.000
+SH. HOOSE:1:11490.550
+HIIRAN:1:13662.830
+BAKOOL:1:10363.200
+MUDUG:1:26363.090
+TOG-DHEER:1:12245.470
+GADO:1:12490.900
+KISMAAYO:2:1.000000
+BAKI:2:845.029993
+KISMAAYO:2:2.271308
+MARKA:2:430.376765
+JAWHAR:2:2051.736480
+CAYNABO:2:2546.572171
+BU'AALE:2:3411.588337
+BUULO BURDO (BULA-BRIF):2:6406.858922
+WANLA WEYN:2:2575.711896
+QORYOOLEY:2:1450.841950
+CADAADO:2:2380.039432
+TALEEX:2:1314.358573
+CEEL-AFWEIN:2:6588.862841
+SAYLAC:2:1.120634
+DHUUSAMAREEB:2:4464.046530
+TIYEEGLOW:2:2667.107131
+BUUR XAKABA (BUR HACABA):2:5888.476622
+BANDER-BEYLA (BENDERBELA:2:4535.658065
+HOBYO:2:11380.586015
+BERBERA:2:2507.873780
+BELED XAAWO (BULA-HAWA):2:1135.577490
+BOSAASO:2:3287.521881
+XUDUR (HUDUR):2:2119.893552
+SAYLAC:2:1492.451622
+XARARDHEERE (HARARDERE):2:2239.132090
+SAAKOW:2:5079.405967
+AFMADOW:2:10643.602227
+CEERIGAABO (ERIGAVO):2:11145.372867
+JARIIBAN:2:5061.946919
+RAB DHUURE:2:1331.336681
+KISMAAYO:2:3.963598
+JALALAQSI:2:1302.588742
+SAYLAC:2:1.000000
+BAAR-DHEERE:2:4072.777193
+GAALKACAYO:2:6844.463507
+KISMAAYO:2:2.374531
+QANSAX DHEERE:2:1179.766349
+BADHAN:2:5559.373292
+HARGEYSA:2:3123.015129
+JAMAAME:2:811.621240
+SHEEKH:2:942.981163
+KISMAAYO:2:3371.339405
+SAYLAC:2:1.000000
+BUUHOODLE:2:1969.772575
+BURTINLE:2:1381.099033
+KISMAAYO:2:1.000000
+JILIB:2:3125.615696
+BURAO:2:4472.674899
+BOORAMA:2:687.117929
+BADHAADHE:2:3853.074992
+LASCAANOD (LASANOD):2:1661.051787
+CEEL BARDE (EL BARDE):2:3146.969523
+SABLALE:2:2795.583111
+DOLOW:2:495.590024
+KISMAAYO:2:1.000000
+GAROOWE:2:1287.094484
+CAABUDWAAQ:2:2084.911025
+CEEL DHEER (EL DERE):2:3654.006248
+BARAAWE:2:1288.131620
+KISMAAYO:2:1.000000
+KISMAAYO:2:1.078326
+BADHAADHE:2:1.000000
+KISMAAYO:2:1.000000
+CEEL WAAQ (EL WAK):2:2267.336078
+MOGADISHO:2:199.094000
+BADHAADHE:2:1.523521
+OODWEYNE:2:2313.469192
+QARDHO:2:7524.647834
+EYL:2:1398.587029
+QANDALA:2:3318.506486
+GABILEY:2:957.511804
+XUDUN:2:1356.565093
+GARBAHAARAY:2:2212.482798
+LUUK:2:2307.136417
+KUNTUWAARAY:2:1140.765631
+DIINSOOR:2:3261.513071
+CEEL BUUR (EL BUR):2:4671.736765
+BAYDHABO:2:4452.243958
+AFGOOYE (AFGOI):2:1809.139028
+BELED WEYN:2:5953.382337
+CALAWLA (ALULA):2:2045.093793
+ISKUSHUBAN:2:7441.721942
+WAJID:2:1097.893112
+BALCAD:2:1738.571696
+CADALE:2:2486.454670
+GOLDOGOB:2:836.961469
+AADAN:2:1766.982153
+LUGHAYA:2:805.886327
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_POPULATION.txt
new file mode 100644
index 0000000..9368543
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOMALIA_POPULATION.txt
@@ -0,0 +1,105 @@
+SOMALIA:0:8591629:13.473747
+BAKOOL:1:291688:28.146518
+BANAADIR:1:1020066:5123.539635
+BARI:1:435965:15.485479
+BAY:1:884509:59.836896
+GADO:1:461020:36.908469
+GALGUDUUD:1:501804:29.082096
+HIIRAN:1:430163:31.484180
+J. DHEXE:1:289896:24.955301
+J. HOOSE:1:534189:28.575563
+MUDUG:1:610408:23.153887
+NUGAAL:1:219980:26.191974
+SANAAG:1:424693:18.232168
+SH. DHEXE:1:690447:85.836510
+SH. HOOSE:1:1119201:97.401865
+TOG-DHEER:1:752869:61.481429
+W. GALBEED:1:1284617:123.272069
+CALAWLA (ALULA):2:72660:35.529340
+QANDALA:2:72660:21.895643
+SAYLAC:2:128461:128461.700000
+SAYLAC:2:128461:128461.700000
+SAYLAC:2:128461:86.074281
+ISKUSHUBAN:2:72660:9.763981
+SAYLAC:2:128461:114633.055931
+BOSAASO:2:72660:22.102008
+BADHAN:2:141564:25.464081
+CEERIGAABO (ERIGAVO):2:141564:12.701624
+LUGHAYA:2:128461:159.404243
+BERBERA:2:128461:51.223351
+CEEL-AFWEIN:2:141564:21.485397
+BAKI:2:128461:152.020285
+QARDHO:2:72660:9.656377
+BOORAMA:2:128461:186.957281
+HARGEYSA:2:128461:41.133871
+GABILEY:2:128461:134.162001
+SHEEKH:2:150573:159.678481
+BURAO:2:150573:33.665268
+CAYNABO:2:150573:59.128032
+OODWEYNE:2:150573:65.085717
+BANDER-BEYLA (BENDERBELA:2:72660:16.019910
+TALEEX:2:36663:27.894468
+XUDUN:2:36663:27.026594
+GAROOWE:2:36663:28.485347
+LASCAANOD (LASANOD):2:36663:22.072360
+BUUHOODLE:2:150573:76.442226
+EYL:2:36663:26.214553
+BURTINLE:2:36663:26.546491
+JARIIBAN:2:122081:24.117519
+GAALKACAYO:2:122081:17.836548
+GOLDOGOB:2:122081:145.862868
+HOBYO:2:122081:10.727180
+CADAADO:2:100360:42.167705
+CAABUDWAAQ:2:100360:48.136730
+DHUUSAMAREEB:2:100360:22.482024
+BELED WEYN:2:143387:24.085076
+CEEL BUUR (EL BUR):2:100360:21.482546
+XARARDHEERE (HARARDERE):2:122081:54.521839
+CEEL BARDE (EL BARDE):2:58337:18.537707
+RAB DHUURE:2:58337:43.818818
+CEEL DHEER (EL DERE):2:100360:27.465963
+XUDUR (HUDUR):2:58337:27.519118
+TIYEEGLOW:2:58337:21.872987
+BUULO BURDO (BULA-BRIF):2:143387:22.380338
+LUUK:2:76836:33.303911
+DOLOW:2:76836:155.040786
+WAJID:2:58337:53.135956
+BAYDHABO:2:221127:49.666472
+BELED XAAWO (BULA-HAWA):2:76836:67.663077
+AADAN:2:172611:97.687319
+GARBAHAARAY:2:76836:34.728707
+JALALAQSI:2:143387:110.079000
+CADALE:2:172611:69.420831
+BUUR XAKABA (BUR HACABA):2:221127:37.552539
+WANLA WEYN:2:159885:62.074434
+JAWHAR:2:172611:84.129591
+CEEL WAAQ (EL WAK):2:76836:33.888521
+QANSAX DHEERE:2:221127:187.433088
+BAAR-DHEERE:2:76836:18.865915
+BALCAD:2:172611:99.283654
+AFGOOYE (AFGOI):2:159885:88.376766
+DIINSOOR:2:221127:67.798977
+QORYOOLEY:2:159885:110.202119
+MOGADISHO:2:1020066:5123.539635
+SAAKOW:2:96632:19.024272
+MARKA:2:159885:371.502066
+KUNTUWAARAY:2:159885:140.156622
+SABLALE:2:159885:57.192310
+BARAAWE:2:159885:124.122298
+BU'AALE:2:96632:28.324637
+AFMADOW:2:35612:3.345916
+JILIB:2:96632:30.916149
+JAMAAME:2:35612:43.878349
+KISMAAYO:2:35612:10.563339
+BADHAADHE:2:35612:9.242644
+KISMAAYO:2:35612:35612.600000
+KISMAAYO:2:35612:15679.335431
+KISMAAYO:2:35612:33025.819650
+KISMAAYO:2:35612:35612.600000
+KISMAAYO:2:35612:35612.600000
+KISMAAYO:2:35612:8984.917239
+KISMAAYO:2:35612:35612.600000
+KISMAAYO:2:35612:35612.600000
+KISMAAYO:2:35612:14997.740606
+BADHAADHE:2:35612:35612.600000
+BADHAADHE:2:35612:23375.194697
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_AREA.txt
new file mode 100644
index 0000000..58bf39d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_AREA.txt
@@ -0,0 +1,407 @@
+SOUTH AFRICA:0:1219912
+ORANGE FREE STATE:1:50216.398
+WESTERN CAPE:1:52061.531
+ORANGE:1:6990.955
+NORTHERN CAPE:1:140521.594
+EASTERN TVL:1:67886.648
+PWV [Gauteng]:1:17010
+NORTHERN TVL:1:140521.594
+EASTERN CAPE:1:67886.648
+NORTH WEST:1:43848.879
+NATAL:1:35672.039
+LOWER UMFOLOZI:2:449.462588
+NGOTSHE:2:1290.925842
+NORTHERN TVL-26:2:236.596962
+KOPPIES:2:613.565876
+BARKLY WEST:2:2553.034714
+NATAL-14:2:132.605262
+STELLENBOSCH:2:192.509923
+DURBAN/CHATS.:2:101.086596
+NATAL-57:2:364.995957
+CAROLINA:2:3786.682855
+NATAL-16:2:60.277561
+NKANDALA:2:666.241484
+KUILSRIVER:2:46.931830
+NORTH WEST-23:2:1057.837694
+NATAL-54:2:35.213380
+SOUTPANSBERG:2:4471.602584
+FRASERBURG:2:4571.868593
+HUMANSDORP:2:1547.815642
+HERBERT:2:2870.315007
+CALEDON:2:1582.821984
+EASTERN CAPE-1:2:15553.918216
+POTGIETERSRUS:2:15073.280924
+MALAMUELE:2:1439.191271
+ESTCOURT:2:1003.202736
+QUEENSTOWN:2:42.597639
+PAULPIETERSBURG:2:570.312216
+MOUTSE:2:286.622145
+HOEVELDRIF:2:1395.848262
+CALVINIA:2:14706.638689
+LYDENBURG:2:4509.944011
+DURBAN/CHATS.:2:10.119292
+KURUMAN:2:6621.621729
+WEPENER:2:730.739734
+OBERHOLZER:2:4.085538
+TARKASTAD:2:1275.351005
+NATAL-80:2:47.327452
+MTONJANENI:2:333.883128
+NORTHERN TVL-28:2:326.103766
+VRYBURG:2:4192.964205
+EERSTEHOEK:2:53.624109
+FORT BEAUFORT:2:532.091683
+BERGVILLE:2:996.232333
+WARRENTON:2:633.391349
+GROBLERSDAL:2:2254.536977
+NATAL-44:2:34.377177
+THEUNISSEN:2:730.934114
+BEDFORD:2:1108.705898
+NATAL-51:2:6.524146
+NIGEL:2:6.764927
+MAHLABATINI:2:552.267792
+ROODE PORT:2:1.884290
+EASTERN TVL-21:2:70.219392
+STEYNSBURG:2:1094.084403
+EDENBURG:2:800.514032
+LADISMITH:2:1487.336830
+INANDA:2:134.387115
+ZASTRON:2:750.226898
+BRITSTOWN:2:2843.149179
+VEREENIGING:2:12.081193
+THABAMOOPO:2:2909.764939
+LADYBRAND:2:858.624242
+WILLISTON:2:5154.882981
+NEBO:2:3294.444277
+NORTHERN TVL-43:2:855.343424
+QUEENSTOWN:2:34.823922
+LOWER TUGULA:2:377.846692
+BARBERTON:2:3132.148080
+NATAL-53:2:180.604872
+MARICO:2:2314.816714
+NATAL-49:2:20.601237
+LION RIVER:2:611.162749
+GLENCOE:2:248.639057
+MIDDLEBURG:2:2299.730874
+POTCHEFSTROOM:2:1297.284939
+VULAM./EMZUMBE:2:97.715352
+HOOPSTAD:2:1355.001433
+VULAM./EMZUMBE:2:94.284395
+SEKGOSESE:2:364.872374
+RIVERSDALE:2:1621.998510
+WOLMARANSSTAD:2:1917.689536
+ALFRED:2:304.413169
+NATAL-61:2:161.942075
+STOCHENSTROM:2:89.364447
+RITAVI:2:342.876125
+NATAL-60:2:49.529500
+ELLIOT:2:842.003913
+WONDERBOOM:2:10.381516
+MESSINA:2:5516.057779
+WATERVAL BOVEN:2:959.435603
+NORTH WEST-14:2:6183.516932
+NATAL-29:2:114.060142
+FOURIESBURG:2:462.251933
+BELLEVILLE:2:172.522068
+MOUTSE:2:292.796772
+HEIDELBERG:2:8.378218
+SUTHERLAND:2:3600.518626
+PHILIPPOLIS:2:1258.744716
+EAST LONDON:2:488.449961
+MOUNT CURRIE:2:1782.336445
+HEILBRON:2:1494.674369
+WODEHOUSE:2:1216.089594
+NATAL-86:2:15.487270
+NORTHERN TVL-18:2:70.118734
+NATAL-46:2:256.763427
+LINDLEY:2:1113.208601
+REITZ:2:1074.405962
+CAPE:2:62.873406
+SWARTRUGGEN:2:619.587320
+NORTHERN TVL-22:2:779.180991
+HANKEY:2:679.910285
+EASTERN TVL-8:2:842.140885
+NORTHERN TVL-32:2:313.688831
+NATAL-48:2:23.992824
+BETHLEHEM:2:1422.134899
+HLABISA:2:1019.931212
+MDANTSANE:2:29.893802
+NATAL-93:2:379.306950
+EASTERN CAPE-3:2:677.738074
+EASTERN TVL-17:2:925.594959
+JOUBERTINA:2:536.263774
+HANOVER:2:1435.676185
+NATAL-73:2:140.799643
+MALMESBURY:2:1.318521
+NATAL-45:2:18.007005
+RANDFONTEIN:2:6.389267
+PEARSTON:2:1049.350188
+LAINGSBURG:2:3523.643882
+LADY GREY:2:583.507390
+WESSELS BRON:2:660.018162
+NATAL-28:2:11.346191
+MOKERONG:2:701.818254
+BRITS:2:793.160857
+SMITHFIELD:2:1130.529871
+NATAL-9:2:24.743178
+KIRKWOOD:2:698.714401
+SCHWEIZER R.:2:2924.733532
+ERMELO:2:6966.898840
+WITBANK:2:2639.113019
+JANSENVILLE:2:1837.322226
+NORTHERN TVL-30:2:39.067715
+KING WILLIAM TOWN:2:262.946943
+FRANKFORT:2:1191.064382
+VENTERSBURG:2:496.301048
+EASTERN TVL-7:2:687.426339
+STEYLERVILLE:2:1477.171009
+SUTTERHEIM:2:651.978732
+PIETERSBURG:2:5348.811798
+NORTH WEST-10:2:1964.814421
+EMBUMBULU:2:261.993933
+NATAL-78:2:49.238150
+BABANANGO:2:318.163495
+WEENEN:2:362.392485
+NDWEDWE:2:263.927220
+KENHARDT:2:14090.835882
+EERSTEHOEK:2:33.868849
+QUEENSTOWN:2:689.542547
+MOKERONG:2:741.911929
+GIYANI:2:3747.900993
+MSINGA:2:750.945159
+PIETERMARITZBURG:2:243.148367
+VREDENDAL:2:1.000000
+VENTERSDORP:2:1352.834969
+EASTERN TVL-13:2:941.861840
+NORTHERN TVL-7:2:957.389076
+MOUNT CURRIE:2:112.861922
+UBOMBO:2:857.282765
+STANDERTON:2:4605.964516
+NATAL-40:2:147.336704
+HOFMEYR:2:953.749904
+ALEXANDRIA:2:963.713545
+MALMESBURY:2:1794.472286
+POSTMASBURG:2:7185.707137
+RANDBURG:2:2.687690
+BRITS:2:15.031388
+UMVOTI:2:653.958330
+AMERSFORT:2:1801.818836
+BELFAST:2:2860.106320
+CALITZDORP:2:440.994515
+NAPHUNO:2:581.670038
+VICTORIA EAST:2:3211.484651
+NORTH WEST-3:2:2875.448056
+TROMPSBURG:2:782.082760
+RUSTENBURG:2:120.022171
+BEAUFORT WEST:2:6681.405625
+ABERDEEN:2:2806.912327
+NELSPRUIT:2:2065.042548
+SWELLENDAM:2:1634.685230
+VOLKSRUST:2:1723.935824
+RICHMOND:2:395.883246
+ALIWAL NORTH:2:796.963276
+SASOLSBURG:2:382.222814
+WINBERG:2:152.297342
+CULLINAN:2:11.190014
+BREDASDORP:2:1790.340554
+BARKLY EAST:2:1541.800944
+GOODWOOD:2:16.381820
+PILGRIM'S REST:2:13019.944202
+NATAL-30:2:315.678869
+NATAL-11:2:109.851402
+PHILIPSTOWN:2:2227.836561
+BRANDFORT:2:1480.650899
+ODENDAALSRUS:2:557.250035
+VETERSTAD:2:819.354675
+DANNHAUSER:2:241.560030
+KRUGERSDORP:2:10.344118
+NORTHERN TVL-45:2:112.111696
+STERKSTROOM:2:684.973545
+PRIESKA:2:5482.814240
+PRETORIA:2:9.934790
+NATAL-72:2:45.429376
+BRAKPAN:2:1.933205
+NAPHUNO:2:291.515770
+ORANGE FREE STATE-33:2:498.237469
+NATAL-55:2:160.497067
+NORTHERN TVL-42:2:480.331630
+NEW HANOVER:2:445.239535
+ALBERTON:2:1.000000
+PINETOWN:2:131.808798
+WARMBAD:2:4819.884665
+UNDERBERG:2:712.715251
+NATAL-62:2:72.821063
+MURRAYSBURG:2:2130.735878
+NATAL-32:2:3.816864
+HAY:2:4924.545912
+UTRECHT:2:1487.810370
+COLIGNY:2:589.827050
+MTUNZINI:2:150.962137
+JAGERSFONTEIN:2:481.855934
+NATAL-91:2:856.033219
+NORTH WEST-2:2:975.029245
+KROONSTAD:2:1605.122370
+NATAL-37:2:63.088610
+INGWAVUMA:2:1537.452420
+WALVIS BAY:2:412.931467
+NATAL-90:2:105.545554
+GERMISTON:2:1.191443
+UNIONDALE:2:1247.576480
+UMZINTO:2:277.942756
+ADELAIDE:2:610.148399
+WESTONARIA:2:4.513361
+SPRINGS:2:2.157019
+DUNDEE:2:706.327553
+LETABA:2:11376.174322
+SOMERSET EAST:2:2308.518441
+WITZIESHOEK (QAQWA):2:6990.955000
+KLIPRIVER:2:1180.192917
+MAPUMULO:2:300.133227
+STRAND:2:48.830726
+MOOIRIVIER:2:562.996402
+MDUTJANA:2:699.570393
+NORTHERN TVL-37:2:87.032962
+BENONI:2:2.388788
+ESHOWE:2:408.044329
+HOPETOWN:2:3244.740523
+BOKSBURG:2:1.483828
+KOMGA:2:585.149112
+NORTHERN TVL-20:2:280.853770
+NORTHERN TVL-44:2:481.295639
+ALBERT:2:1593.103188
+WORCESTER:2:1632.156622
+MOKERONG:2:2819.233166
+NATAL-98:2:20.490331
+MOLTENO:2:782.460579
+NORTHERN TVL-4:2:6607.658507
+NORTHERN TVL-46:2:200.410568
+NORTHERN TVL-24:2:57.210509
+CAMPER DOWN:2:282.708341
+NATAL-34:2:457.703659
+LICHTENBURG:2:1903.710143
+VREDENDAL:2:1508.832362
+BRONKHORSTSPRUIT:2:13.814190
+SOUTPANSBERG:2:10419.686836
+ROUXVILLE:2:1123.867890
+NONGOMA:2:730.810120
+DELAREYVILLE:2:1209.101994
+VRYBURG 1/MAFEKING 1:2:7162.335730
+EXCELSIOR:2:683.401285
+NORTHERN TVL-39:2:169.360938
+CAPE:2:1.637668
+EERSTEHOEK:2:24.032740
+DEWTS DOORP:2:990.614783
+VANDERBIJL P.:2:7.003086
+BETHULIE:2:1064.090643
+NORTH WEST-5:2:1207.422342
+NQUTU:2:648.676766
+INDWE:2:360.973846
+MOSSEL BAAI:2:805.706676
+EERSTEHOEK:2:1078.103854
+NEWCASTLE:2:672.058090
+VICTORIA WEST:2:4460.651758
+SEKHUKHUNELAND:2:3759.164049
+EASTERN TVL-9:2:23.032200
+HERMANUS:2:295.925430
+RUSTENBURG:2:749.366611
+DE AAR:2:1272.894625
+PORT ELISABETH:2:604.028413
+MOUTSE:2:49.513582
+BLOEMFONTEIN/BOTS:2:2198.347390
+CLANWILLIAN:2:2948.668504
+GEORGE:2:1034.496426
+VANHYNSDORP:2:3735.794579
+NATAL-17:2:33.227082
+EASTERN TVL-20:2:17.013155
+NORTHERN TVL-31:2:266.121723
+HARRISMITH:2:2853.485048
+NATAL-27:2:68.800357
+CARNARVON:2:6244.250344
+VULAM./EMZUMBE:2:337.447478
+OUDTSHOORN:2:1358.889229
+NATAL-12:2:52.889960
+MACLEAR:2:1007.174224
+PRINCE ALBERT:2:3184.261590
+PIKETBERG:2:1763.564284
+CLOCOLAN:2:430.980486
+ALBANY:2:1794.518660
+BATHURST:2:608.422316
+BETHAL:2:2329.169103
+WILLOWMORE:2:3083.292388
+NOUPOORT:2:581.960738
+NAMAKWALAND:2:18319.712751
+NORTHERN TVL-33:2:141.093260
+TULBAGH:2:355.298978
+UITENHAGE:2:1252.810966
+BOLOBEDU:2:879.539956
+VILJOENSKROON:2:843.064277
+WITRIVER:2:3198.853788
+IXOPO:2:569.349170
+RICHMOND:2:2886.598787
+UBOMBO:2:766.592900
+NATAL-18:2:211.869551
+NORTHERN TVL-19:2:51.763000
+KNYSNA:2:816.121549
+WINBURG:2:1147.442051
+HENNENMAN:2:247.839574
+BALFOUR:2:1988.946446
+NATAL-74:2:167.858119
+NATAL-88:2:46.872722
+VREDEFORT:2:511.977439
+MDANTSANE 4:2:32.340094
+MPENDLE:2:492.536849
+HARTSWATER:2:267.287709
+KRANSKOP:2:277.286537
+THABAZIMBI:2:11743.342903
+PAARL:2:447.537452
+VREDENBURG:2:282.026861
+JOHANNESBURG:2:4.371042
+BOTHAVILLE:2:1017.686964
+CHATCART:2:1027.979842
+NATAL-24:2:179.432508
+EERSTEHOEK:2:484.746608
+BULFONTEIN:2:1253.767975
+WATERBERG:2:16243.332952
+PARYS:2:355.520796
+NATAL-39:2:13.699567
+MONTAGU:2:1023.079207
+NORTHERN TVL-40:2:1654.433386
+MARQUARD:2:498.284734
+PIET RETIEF:2:4275.004146
+EZINGOLWENI:2:192.732223
+NATAL-69:2:135.766158
+WAKKERSTROOM:2:2200.198160
+HOPEFIELD:2:508.254183
+NATAL-33:2:5.773005
+BOCHUM:2:2666.494506
+KLERKSDORP:2:1347.972250
+KEMPTON PARK:2:3.541749
+PORT SHEPSTONE:2:305.079938
+REDDESSBURG:2:586.734809
+POLELA:2:251.221668
+VRYHEID:2:1445.310796
+GORDONIA:2:20425.914754
+FICKSBURG:2:510.317917
+NATAL-26:2:231.732941
+SENEKAL:2:1424.689735
+KIMBERLEY:2:1345.945524
+DELMAS:2:1186.420270
+CRADOCK:2:2322.254508
+EASTERN TVL-11:2:685.903636
+NATAL-85:2:24.233542
+PETRUSBURG:2:1174.519942
+EASTERN TVL-15:2:94.172000
+KOSTER:2:1074.370904
+VREDE:2:2112.014036
+SESHEGO:2:3781.910301
+ROBERTSON:2:666.587932
+BO/JAK/KOF/FAU:2:7257.387675
+MIDDELSBURG:2:5388.162408
+WELLINGTON:2:181.413948
+SIMONSTOWN:2:110.471939
+NATAL-76:2:30.015618
+GRAAFF-REINET:2:2722.291669
+NATAL-101:2:116.689960
+COLESBERG:2:2155.868235
+CERES:2:3975.692809
+EERSTEHOEK:2:1328.174531
+HEIDELBERG:2:795.255202
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_POPULATION.txt
new file mode 100644
index 0000000..794d593
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH AFRICA_POPULATION.txt
@@ -0,0 +1,407 @@
+SOUTH AFRICA	:	0	:	37110291
+EASTERN CAPE	:	1	:	6007740
+EASTERN TVL	:	1	:	6007740
+NATAL	:	1	:	7955524
+NORTH WEST	:	1	:	3285384
+NORTHERN CAPE	:	1	:	720974
+NORTHERN TVL	:	1	:	720974
+ORANGE	:	1	:	6458333
+ORANGE FREE STATE	:	1	:	2535947
+PWV [Gauteng] 	:	1	:	8837178
+WESTERN CAPE	:	1	:	3417675
+MESSINA	:	2	:	15673
+SOUTPANSBERG	:	2	:	15673
+SOUTPANSBERG	:	2	:	15673
+NORTHERN TVL-4	:	2	:	15673
+POTGIETERSRUS	:	2	:	15673
+WALVIS BAY	:	2	:	26702
+MALAMUELE	:	2	:	15673
+NORTHERN TVL-7	:	2	:	15673
+BOCHUM	:	2	:	15673
+GIYANI	:	2	:	15673
+LETABA	:	2	:	15673
+MOKERONG	:	2	:	15673
+WATERBERG	:	2	:	15673
+PIETERSBURG	:	2	:	15673
+SESHEGO	:	2	:	15673
+SEKGOSESE	:	2	:	15673
+MOKERONG	:	2	:	15673
+BOLOBEDU	:	2	:	15673
+NORTHERN TVL-18	:	2	:	15673
+NORTHERN TVL-19	:	2	:	15673
+NORTHERN TVL-20	:	2	:	15673
+THABAZIMBI	:	2	:	15673
+NORTHERN TVL-22	:	2	:	15673
+THABAMOOPO	:	2	:	15673
+NORTHERN TVL-24	:	2	:	15673
+RITAVI	:	2	:	15673
+NORTHERN TVL-26	:	2	:	15673
+NAPHUNO	:	2	:	15673
+NORTHERN TVL-28	:	2	:	15673
+PILGRIM'S REST	:	2	:	15673
+NORTHERN TVL-30	:	2	:	15673
+NORTHERN TVL-31	:	2	:	15673
+NORTHERN TVL-32	:	2	:	15673
+NORTHERN TVL-33	:	2	:	15673
+NAPHUNO	:	2	:	15673
+SEKHUKHUNELAND	:	2	:	15673
+MOKERONG	:	2	:	15673
+NORTHERN TVL-37	:	2	:	15673
+NEBO	:	2	:	15673
+NORTHERN TVL-39	:	2	:	15673
+NORTHERN TVL-40	:	2	:	15673
+WARMBAD	:	2	:	15673
+LYDENBURG	:	2	:	154044
+NORTHERN TVL-42	:	2	:	15673
+NORTHERN TVL-43	:	2	:	15673
+NORTHERN TVL-44	:	2	:	15673
+MARICO	:	2	:	142842
+NORTH WEST-2	:	2	:	142842
+NORTH WEST-3	:	2	:	142842
+GORDONIA	:	2	:	26702
+NORTHERN TVL-45	:	2	:	15673
+GROBLERSDAL	:	2	:	154044
+NORTHERN TVL-46	:	2	:	15673
+MOUTSE	:	2	:	154044
+MDUTJANA	:	2	:	154044
+WITRIVER	:	2	:	154044
+BRITS	:	2	:	142842
+MOUTSE	:	2	:	154044
+NORTH WEST-5	:	2	:	142842
+EASTERN TVL-7	:	2	:	154044
+EASTERN TVL-8	:	2	:	154044
+EASTERN TVL-9	:	2	:	154044
+BELFAST	:	2	:	154044
+EASTERN TVL-11	:	2	:	154044
+RUSTENBURG	:	2	:	142842
+MIDDELSBURG	:	2	:	154044
+EASTERN TVL-13	:	2	:	154044
+MOUTSE	:	2	:	154044
+CULLINAN	:	2	:	0
+EASTERN TVL-15	:	2	:	154044
+NELSPRUIT	:	2	:	154044
+VRYBURG 1/MAFEKING 1	:	2	:	142842
+WONDERBOOM	:	2	:	0
+EASTERN TVL-17	:	2	:	154044
+BARBERTON	:	2	:	154044
+SWARTRUGGEN	:	2	:	142842
+RUSTENBURG	:	2	:	142842
+WITBANK	:	2	:	154044
+EASTERN TVL-20	:	2	:	154044
+EASTERN TVL-21	:	2	:	154044
+WATERVAL BOVEN	:	2	:	154044
+BRONKHORSTSPRUIT	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+NORTH WEST-10	:	2	:	142842
+EERSTEHOEK	:	2	:	154044
+BRITS	:	2	:	142842
+KOSTER	:	2	:	142842
+PRETORIA	:	2	:	0
+CAROLINA	:	2	:	154044
+KRUGERSDORP	:	2	:	0
+LICHTENBURG	:	2	:	142842
+NORTH WEST-14	:	2	:	142842
+EERSTEHOEK	:	2	:	154044
+KEMPTON PARK	:	2	:	0
+RANDBURG	:	2	:	0
+DELMAS	:	2	:	154044
+VENTERSDORP	:	2	:	142842
+BENONI	:	2	:	0
+ROODE PORT	:	2	:	0
+COLIGNY	:	2	:	142842
+RANDFONTEIN	:	2	:	0
+BETHAL	:	2	:	154044
+ERMELO	:	2	:	154044
+JOHANNESBURG	:	2	:	0
+GERMISTON	:	2	:	0
+KURUMAN	:	2	:	26702
+SPRINGS	:	2	:	0
+HOEVELDRIF	:	2	:	154044
+BOKSBURG	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+BRAKPAN	:	2	:	0
+WESTONARIA	:	2	:	0
+OBERHOLZER	:	2	:	0
+ALBERTON	:	2	:	0
+VEREENIGING	:	2	:	0
+DELAREYVILLE	:	2	:	142842
+NIGEL	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+VRYBURG	:	2	:	142842
+HEIDELBERG	:	2	:	0
+POTCHEFSTROOM	:	2	:	142842
+VANDERBIJL P.	:	2	:	0
+BALFOUR	:	2	:	154044
+EERSTEHOEK	:	2	:	154044
+KLERKSDORP	:	2	:	142842
+STANDERTON	:	2	:	154044
+PIET RETIEF	:	2	:	154044
+SASOLSBURG	:	2	:	56354
+PARYS	:	2	:	56354
+AMERSFORT	:	2	:	154044
+WAKKERSTROOM	:	2	:	154044
+SCHWEIZER R.	:	2	:	142842
+INGWAVUMA	:	2	:	78767
+WOLMARANSSTAD	:	2	:	142842
+VREDEFORT	:	2	:	56354
+HEILBRON	:	2	:	56354
+VILJOENSKROON	:	2	:	56354
+FRANKFORT	:	2	:	56354
+VREDE	:	2	:	56354
+VOLKSRUST	:	2	:	154044
+KOPPIES	:	2	:	56354
+POSTMASBURG	:	2	:	26702
+BOTHAVILLE	:	2	:	56354
+UBOMBO	:	2	:	78767
+NORTH WEST-23	:	2	:	142842
+UTRECHT	:	2	:	78767
+PAULPIETERSBURG	:	2	:	78767
+KROONSTAD	:	2	:	56354
+NGOTSHE	:	2	:	78767
+NEWCASTLE	:	2	:	78767
+VRYHEID	:	2	:	78767
+REITZ	:	2	:	56354
+WESSELS BRON	:	2	:	56354
+UBOMBO	:	2	:	78767
+LINDLEY	:	2	:	56354
+HOOPSTAD	:	2	:	56354
+HARTSWATER	:	2	:	26702
+NATAL-9	:	2	:	78767
+HARRISMITH	:	2	:	56354
+NONGOMA	:	2	:	78767
+ODENDAALSRUS	:	2	:	56354
+BARKLY WEST	:	2	:	26702
+NATAL-11	:	2	:	78767
+NATAL-12	:	2	:	78767
+HLABISA	:	2	:	78767
+HENNENMAN	:	2	:	56354
+BO/JAK/KOF/FAU	:	2	:	56354
+NATAL-14	:	2	:	78767
+DANNHAUSER	:	2	:	78767
+NATAL-16	:	2	:	78767
+BETHLEHEM	:	2	:	56354
+NATAL-17	:	2	:	78767
+VENTERSBURG	:	2	:	56354
+NATAL-18	:	2	:	78767
+WARRENTON	:	2	:	26702
+NQUTU	:	2	:	78767
+MAHLABATINI	:	2	:	78767
+SENEKAL	:	2	:	56354
+DUNDEE	:	2	:	78767
+BULFONTEIN	:	2	:	56354
+WINBURG	:	2	:	56354
+GLENCOE	:	2	:	78767
+NAMAKWALAND	:	2	:	26702
+THEUNISSEN	:	2	:	56354
+KLIPRIVER	:	2	:	78767
+NATAL-24	:	2	:	78767
+BABANANGO	:	2	:	78767
+NATAL-26	:	2	:	78767
+NATAL-27	:	2	:	78767
+NATAL-28	:	2	:	78767
+NATAL-29	:	2	:	78767
+NATAL-30	:	2	:	78767
+LOWER UMFOLOZI	:	2	:	78767
+NATAL-32	:	2	:	78767
+HERBERT	:	2	:	26702
+NATAL-33	:	2	:	78767
+NATAL-34	:	2	:	78767
+FOURIESBURG	:	2	:	56354
+BRANDFORT	:	2	:	56354
+WITZIESHOEK (QAQWA)	:	2	:	6458333
+MTONJANENI	:	2	:	78767
+HAY	:	2	:	26702
+NKANDALA	:	2	:	78767
+NATAL-37	:	2	:	78767
+KENHARDT	:	2	:	26702
+KIMBERLEY	:	2	:	26702
+BERGVILLE	:	2	:	78767
+NATAL-39	:	2	:	78767
+NATAL-40	:	2	:	78767
+MARQUARD	:	2	:	56354
+MSINGA	:	2	:	78767
+FICKSBURG	:	2	:	56354
+ESTCOURT	:	2	:	78767
+WEENEN	:	2	:	78767
+NATAL-44	:	2	:	78767
+NATAL-45	:	2	:	78767
+CLOCOLAN	:	2	:	56354
+NATAL-46	:	2	:	78767
+KRANSKOP	:	2	:	78767
+NATAL-48	:	2	:	78767
+NATAL-49	:	2	:	78767
+EXCELSIOR	:	2	:	56354
+BLOEMFONTEIN/BOTS	:	2	:	56354
+ESHOWE	:	2	:	78767
+NATAL-51	:	2	:	78767
+MTUNZINI	:	2	:	78767
+NATAL-53	:	2	:	78767
+PRIESKA	:	2	:	26702
+NATAL-54	:	2	:	78767
+NATAL-55	:	2	:	78767
+PETRUSBURG	:	2	:	56354
+UMVOTI	:	2	:	78767
+NATAL-57	:	2	:	78767
+ORANGE FREE STATE-33	:	2	:	56354
+MOOIRIVIER	:	2	:	78767
+LADYBRAND	:	2	:	56354
+MAPUMULO	:	2	:	78767
+NATAL-60	:	2	:	78767
+HOPETOWN	:	2	:	26702
+NATAL-61	:	2	:	78767
+NATAL-62	:	2	:	78767
+LOWER TUGULA	:	2	:	78767
+NEW HANOVER	:	2	:	78767
+LION RIVER	:	2	:	78767
+DEWTS DOORP	:	2	:	56354
+MPENDLE	:	2	:	78767
+NDWEDWE	:	2	:	78767
+REDDESSBURG	:	2	:	56354
+PIETERMARITZBURG	:	2	:	78767
+NATAL-69	:	2	:	78767
+EDENBURG	:	2	:	56354
+UNDERBERG	:	2	:	78767
+WEPENER	:	2	:	56354
+JAGERSFONTEIN	:	2	:	56354
+INANDA	:	2	:	78767
+NATAL-72	:	2	:	78767
+NATAL-73	:	2	:	78767
+NATAL-74	:	2	:	78767
+MOUNT CURRIE	:	2	:	78767
+NATAL-76	:	2	:	78767
+CAMPER DOWN	:	2	:	78767
+CALVINIA	:	2	:	26702
+NATAL-78	:	2	:	78767
+POLELA	:	2	:	78767
+NATAL-80	:	2	:	78767
+PINETOWN	:	2	:	78767
+RICHMOND	:	2	:	78767
+DURBAN/CHATS.	:	2	:	78767
+PHILIPSTOWN	:	2	:	26702
+DURBAN/CHATS.	:	2	:	78767
+TROMPSBURG	:	2	:	56354
+NATAL-85	:	2	:	78767
+NATAL-86	:	2	:	78767
+EMBUMBULU	:	2	:	78767
+NATAL-88	:	2	:	78767
+SMITHFIELD	:	2	:	56354
+IXOPO	:	2	:	78767
+BRITSTOWN	:	2	:	26702
+PHILIPPOLIS	:	2	:	56354
+CARNARVON	:	2	:	26702
+ZASTRON	:	2	:	56354
+NATAL-90	:	2	:	78767
+EASTERN CAPE-1	:	2	:	120154
+NATAL-91	:	2	:	78767
+ROUXVILLE	:	2	:	56354
+WILLISTON	:	2	:	26702
+VULAM./EMZUMBE	:	2	:	78767
+NATAL-93	:	2	:	78767
+BETHULIE	:	2	:	56354
+UMZINTO	:	2	:	78767
+COLESBERG	:	2	:	26702
+MOUNT CURRIE	:	2	:	120154
+DE AAR	:	2	:	26702
+EASTERN CAPE-3	:	2	:	120154
+VANHYNSDORP	:	2	:	81373
+VULAM./EMZUMBE	:	2	:	78767
+VICTORIA WEST	:	2	:	26702
+VULAM./EMZUMBE	:	2	:	78767
+ALBERT	:	2	:	120154
+ALFRED	:	2	:	78767
+VETERSTAD	:	2	:	120154
+NATAL-98	:	2	:	78767
+LADY GREY	:	2	:	120154
+PORT SHEPSTONE	:	2	:	78767
+ALIWAL NORTH	:	2	:	120154
+EZINGOLWENI	:	2	:	78767
+BARKLY EAST	:	2	:	120154
+MACLEAR	:	2	:	120154
+HANOVER	:	2	:	26702
+NATAL-101	:	2	:	78767
+RICHMOND	:	2	:	26702
+WODEHOUSE	:	2	:	120154
+STEYNSBURG	:	2	:	120154
+NOUPOORT	:	2	:	26702
+ELLIOT	:	2	:	120154
+VREDENDAL	:	2	:	81373
+FRASERBURG	:	2	:	26702
+MOLTENO	:	2	:	120154
+MIDDLEBURG	:	2	:	120154
+INDWE	:	2	:	120154
+HOFMEYR	:	2	:	120154
+STERKSTROOM	:	2	:	120154
+BEAUFORT WEST	:	2	:	81373
+TARKASTAD	:	2	:	120154
+MURRAYSBURG	:	2	:	81373
+VREDENDAL	:	2	:	81373
+GRAAFF-REINET	:	2	:	120154
+QUEENSTOWN	:	2	:	120154
+CRADOCK	:	2	:	120154
+SUTHERLAND	:	2	:	26702
+CLANWILLIAN	:	2	:	81373
+VICTORIA EAST	:	2	:	120154
+CHATCART	:	2	:	120154
+ABERDEEN	:	2	:	120154
+CERES	:	2	:	81373
+QUEENSTOWN	:	2	:	120154
+SUTTERHEIM	:	2	:	120154
+BEDFORD	:	2	:	120154
+PEARSTON	:	2	:	120154
+PIKETBERG	:	2	:	81373
+SOMERSET EAST	:	2	:	120154
+QUEENSTOWN	:	2	:	120154
+ADELAIDE	:	2	:	120154
+FORT BEAUFORT	:	2	:	120154
+KOMGA	:	2	:	120154
+STOCHENSTROM	:	2	:	120154
+LAINGSBURG	:	2	:	81373
+PRINCE ALBERT	:	2	:	81373
+KING WILLIAM TOWN	:	2	:	120154
+MDANTSANE 4	:	2	:	120154
+JANSENVILLE	:	2	:	120154
+VREDENBURG	:	2	:	81373
+EAST LONDON	:	2	:	120154
+WILLOWMORE	:	2	:	120154
+MDANTSANE	:	2	:	120154
+HOPEFIELD	:	2	:	81373
+MALMESBURY	:	2	:	81373
+ALBANY	:	2	:	120154
+STEYLERVILLE	:	2	:	120154
+TULBAGH	:	2	:	81373
+WORCESTER	:	2	:	81373
+UITENHAGE	:	2	:	120154
+KIRKWOOD	:	2	:	120154
+BATHURST	:	2	:	120154
+ALEXANDRIA	:	2	:	120154
+OUDTSHOORN	:	2	:	81373
+CALITZDORP	:	2	:	81373
+WELLINGTON	:	2	:	81373
+UNIONDALE	:	2	:	81373
+LADISMITH	:	2	:	81373
+MALMESBURY	:	2	:	81373
+MONTAGU	:	2	:	81373
+PAARL	:	2	:	81373
+JOUBERTINA	:	2	:	120154
+PORT ELISABETH	:	2	:	120154
+HANKEY	:	2	:	120154
+GEORGE	:	2	:	81373
+SWELLENDAM	:	2	:	81373
+ROBERTSON	:	2	:	81373
+HUMANSDORP	:	2	:	120154
+BELLEVILLE	:	2	:	81373
+CAPE	:	2	:	81373
+KNYSNA	:	2	:	81373
+STELLENBOSCH	:	2	:	81373
+CAPE	:	2	:	81373
+RIVERSDALE	:	2	:	81373
+MOSSEL BAAI	:	2	:	81373
+CALEDON	:	2	:	81373
+GOODWOOD	:	2	:	81373
+KUILSRIVER	:	2	:	81373
+HEIDELBERG	:	2	:	81373
+WINBERG	:	2	:	81373
+SIMONSTOWN	:	2	:	81373
+STRAND	:	2	:	81373
+BREDASDORP	:	2	:	81373
+HERMANUS	:	2	:	81373
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_AREA.txt
new file mode 100644
index 0000000..1467090
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_AREA.txt
@@ -0,0 +1,17 @@
+South Korea	:	0	:	98480
+Busan [Pusan]	:	1	:	762.92
+Chungchongbuk-do 	:	1	:	7431.60
+Chungchongnam-do 	:	1	:	8597.94
+Daegu [Taegu]	:	1	:	885.7
+Daejeon [Taejon]	:	1	:	539.7
+Kang-won-do 	:	1	:	16873.38
+Kwangju	:	1	:	501.44
+Kyongsangbuk-do 	:	1	:	19024.81
+Kyongsangnam-do 	:	1	:	10517.74
+Kyonggi-do 	:	1	:	10181.29
+Inchon	:	1	:	986.45
+Cheju-do 	:	1	:	1847.19
+chollabuk-do 	:	1	:	8050.94
+chollanam-do 	:	1	:	12036.95
+Seoul	:	1	:	605.52
+Ulsan	:	1	:	1056.38
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_POPULATION.txt
new file mode 100644
index 0000000..ae1d2c8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTH KOREA_POPULATION.txt
@@ -0,0 +1,17 @@
+South Korea	:	0	:	48846823
+Busan [Pusan]	:	1	:	3684153
+Chungchongbuk-do 	:	1	:	1500610
+Chungchongnam-do 	:	1	:	1972553
+Daegu [Taegu]	:	1	:	2539738
+Daejeon [Taejon]	:	1	:	1450750
+Kang-won-do 	:	1	:	1528640
+Kwangju	:	1	:	1406915
+Kyongsangbuk-do 	:	1	:	2718613
+Kyongsangnam-do 	:	1	:	3168734
+Kyonggi-do 	:	1	:	10628842
+Inchon	:	1	:	2610715
+Cheju-do 	:	1	:	557235
+chollabuk-do 	:	1	:	1915674
+chollanam-do 	:	1	:	1994011
+Seoul	:	1	:	10287847
+Ulsan	:	1	:	1087958
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_AREA.txt
new file mode 100644
index 0000000..bb3dbcf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_AREA.txt
@@ -0,0 +1,407 @@
+SOUTH AFRICA:0:1219912
+ORANGE FREE STATE:1:50216.398
+WESTERN CAPE:1:52061.531
+ORANGE:1:6990.955
+NORTHERN CAPE:1:140521.594
+EASTERN TVL:1:67886.648
+PWV:1:127283
+NORTHERN TVL:1:140521.594
+EASTERN CAPE:1:67886.648
+NORTH WEST:1:43848.879
+NATAL:1:35672.039
+LOWER UMFOLOZI:2:449.462588
+NGOTSHE:2:1290.925842
+NORTHERN TVL-26:2:236.596962
+KOPPIES:2:613.565876
+BARKLY WEST:2:2553.034714
+NATAL-14:2:132.605262
+STELLENBOSCH:2:192.509923
+DURBAN/CHATS.:2:101.086596
+NATAL-57:2:364.995957
+CAROLINA:2:3786.682855
+NATAL-16:2:60.277561
+NKANDALA:2:666.241484
+KUILSRIVER:2:46.931830
+NORTH WEST-23:2:1057.837694
+NATAL-54:2:35.213380
+SOUTPANSBERG:2:4471.602584
+FRASERBURG:2:4571.868593
+HUMANSDORP:2:1547.815642
+HERBERT:2:2870.315007
+CALEDON:2:1582.821984
+EASTERN CAPE-1:2:15553.918216
+POTGIETERSRUS:2:15073.280924
+MALAMUELE:2:1439.191271
+ESTCOURT:2:1003.202736
+QUEENSTOWN:2:42.597639
+PAULPIETERSBURG:2:570.312216
+MOUTSE:2:286.622145
+HOEVELDRIF:2:1395.848262
+CALVINIA:2:14706.638689
+LYDENBURG:2:4509.944011
+DURBAN/CHATS.:2:10.119292
+KURUMAN:2:6621.621729
+WEPENER:2:730.739734
+OBERHOLZER:2:4.085538
+TARKASTAD:2:1275.351005
+NATAL-80:2:47.327452
+MTONJANENI:2:333.883128
+NORTHERN TVL-28:2:326.103766
+VRYBURG:2:4192.964205
+EERSTEHOEK:2:53.624109
+FORT BEAUFORT:2:532.091683
+BERGVILLE:2:996.232333
+WARRENTON:2:633.391349
+GROBLERSDAL:2:2254.536977
+NATAL-44:2:34.377177
+THEUNISSEN:2:730.934114
+BEDFORD:2:1108.705898
+NATAL-51:2:6.524146
+NIGEL:2:6.764927
+MAHLABATINI:2:552.267792
+ROODE PORT:2:1.884290
+EASTERN TVL-21:2:70.219392
+STEYNSBURG:2:1094.084403
+EDENBURG:2:800.514032
+LADISMITH:2:1487.336830
+INANDA:2:134.387115
+ZASTRON:2:750.226898
+BRITSTOWN:2:2843.149179
+VEREENIGING:2:12.081193
+THABAMOOPO:2:2909.764939
+LADYBRAND:2:858.624242
+WILLISTON:2:5154.882981
+NEBO:2:3294.444277
+NORTHERN TVL-43:2:855.343424
+QUEENSTOWN:2:34.823922
+LOWER TUGULA:2:377.846692
+BARBERTON:2:3132.148080
+NATAL-53:2:180.604872
+MARICO:2:2314.816714
+NATAL-49:2:20.601237
+LION RIVER:2:611.162749
+GLENCOE:2:248.639057
+MIDDLEBURG:2:2299.730874
+POTCHEFSTROOM:2:1297.284939
+VULAM./EMZUMBE:2:97.715352
+HOOPSTAD:2:1355.001433
+VULAM./EMZUMBE:2:94.284395
+SEKGOSESE:2:364.872374
+RIVERSDALE:2:1621.998510
+WOLMARANSSTAD:2:1917.689536
+ALFRED:2:304.413169
+NATAL-61:2:161.942075
+STOCHENSTROM:2:89.364447
+RITAVI:2:342.876125
+NATAL-60:2:49.529500
+ELLIOT:2:842.003913
+WONDERBOOM:2:10.381516
+MESSINA:2:5516.057779
+WATERVAL BOVEN:2:959.435603
+NORTH WEST-14:2:6183.516932
+NATAL-29:2:114.060142
+FOURIESBURG:2:462.251933
+BELLEVILLE:2:172.522068
+MOUTSE:2:292.796772
+HEIDELBERG:2:8.378218
+SUTHERLAND:2:3600.518626
+PHILIPPOLIS:2:1258.744716
+EAST LONDON:2:488.449961
+MOUNT CURRIE:2:1782.336445
+HEILBRON:2:1494.674369
+WODEHOUSE:2:1216.089594
+NATAL-86:2:15.487270
+NORTHERN TVL-18:2:70.118734
+NATAL-46:2:256.763427
+LINDLEY:2:1113.208601
+REITZ:2:1074.405962
+CAPE:2:62.873406
+SWARTRUGGEN:2:619.587320
+NORTHERN TVL-22:2:779.180991
+HANKEY:2:679.910285
+EASTERN TVL-8:2:842.140885
+NORTHERN TVL-32:2:313.688831
+NATAL-48:2:23.992824
+BETHLEHEM:2:1422.134899
+HLABISA:2:1019.931212
+MDANTSANE:2:29.893802
+NATAL-93:2:379.306950
+EASTERN CAPE-3:2:677.738074
+EASTERN TVL-17:2:925.594959
+JOUBERTINA:2:536.263774
+HANOVER:2:1435.676185
+NATAL-73:2:140.799643
+MALMESBURY:2:1.318521
+NATAL-45:2:18.007005
+RANDFONTEIN:2:6.389267
+PEARSTON:2:1049.350188
+LAINGSBURG:2:3523.643882
+LADY GREY:2:583.507390
+WESSELS BRON:2:660.018162
+NATAL-28:2:11.346191
+MOKERONG:2:701.818254
+BRITS:2:793.160857
+SMITHFIELD:2:1130.529871
+NATAL-9:2:24.743178
+KIRKWOOD:2:698.714401
+SCHWEIZER R.:2:2924.733532
+ERMELO:2:6966.898840
+WITBANK:2:2639.113019
+JANSENVILLE:2:1837.322226
+NORTHERN TVL-30:2:39.067715
+KING WILLIAM TOWN:2:262.946943
+FRANKFORT:2:1191.064382
+VENTERSBURG:2:496.301048
+EASTERN TVL-7:2:687.426339
+STEYLERVILLE:2:1477.171009
+SUTTERHEIM:2:651.978732
+PIETERSBURG:2:5348.811798
+NORTH WEST-10:2:1964.814421
+EMBUMBULU:2:261.993933
+NATAL-78:2:49.238150
+BABANANGO:2:318.163495
+WEENEN:2:362.392485
+NDWEDWE:2:263.927220
+KENHARDT:2:14090.835882
+EERSTEHOEK:2:33.868849
+QUEENSTOWN:2:689.542547
+MOKERONG:2:741.911929
+GIYANI:2:3747.900993
+MSINGA:2:750.945159
+PIETERMARITZBURG:2:243.148367
+VREDENDAL:2:1.000000
+VENTERSDORP:2:1352.834969
+EASTERN TVL-13:2:941.861840
+NORTHERN TVL-7:2:957.389076
+MOUNT CURRIE:2:112.861922
+UBOMBO:2:857.282765
+STANDERTON:2:4605.964516
+NATAL-40:2:147.336704
+HOFMEYR:2:953.749904
+ALEXANDRIA:2:963.713545
+MALMESBURY:2:1794.472286
+POSTMASBURG:2:7185.707137
+RANDBURG:2:2.687690
+BRITS:2:15.031388
+UMVOTI:2:653.958330
+AMERSFORT:2:1801.818836
+BELFAST:2:2860.106320
+CALITZDORP:2:440.994515
+NAPHUNO:2:581.670038
+VICTORIA EAST:2:3211.484651
+NORTH WEST-3:2:2875.448056
+TROMPSBURG:2:782.082760
+RUSTENBURG:2:120.022171
+BEAUFORT WEST:2:6681.405625
+ABERDEEN:2:2806.912327
+NELSPRUIT:2:2065.042548
+SWELLENDAM:2:1634.685230
+VOLKSRUST:2:1723.935824
+RICHMOND:2:395.883246
+ALIWAL NORTH:2:796.963276
+SASOLSBURG:2:382.222814
+WINBERG:2:152.297342
+CULLINAN:2:11.190014
+BREDASDORP:2:1790.340554
+BARKLY EAST:2:1541.800944
+GOODWOOD:2:16.381820
+PILGRIM'S REST:2:13019.944202
+NATAL-30:2:315.678869
+NATAL-11:2:109.851402
+PHILIPSTOWN:2:2227.836561
+BRANDFORT:2:1480.650899
+ODENDAALSRUS:2:557.250035
+VETERSTAD:2:819.354675
+DANNHAUSER:2:241.560030
+KRUGERSDORP:2:10.344118
+NORTHERN TVL-45:2:112.111696
+STERKSTROOM:2:684.973545
+PRIESKA:2:5482.814240
+PRETORIA:2:9.934790
+NATAL-72:2:45.429376
+BRAKPAN:2:1.933205
+NAPHUNO:2:291.515770
+ORANGE FREE STATE-33:2:498.237469
+NATAL-55:2:160.497067
+NORTHERN TVL-42:2:480.331630
+NEW HANOVER:2:445.239535
+ALBERTON:2:1.000000
+PINETOWN:2:131.808798
+WARMBAD:2:4819.884665
+UNDERBERG:2:712.715251
+NATAL-62:2:72.821063
+MURRAYSBURG:2:2130.735878
+NATAL-32:2:3.816864
+HAY:2:4924.545912
+UTRECHT:2:1487.810370
+COLIGNY:2:589.827050
+MTUNZINI:2:150.962137
+JAGERSFONTEIN:2:481.855934
+NATAL-91:2:856.033219
+NORTH WEST-2:2:975.029245
+KROONSTAD:2:1605.122370
+NATAL-37:2:63.088610
+INGWAVUMA:2:1537.452420
+WALVIS BAY:2:412.931467
+NATAL-90:2:105.545554
+GERMISTON:2:1.191443
+UNIONDALE:2:1247.576480
+UMZINTO:2:277.942756
+ADELAIDE:2:610.148399
+WESTONARIA:2:4.513361
+SPRINGS:2:2.157019
+DUNDEE:2:706.327553
+LETABA:2:11376.174322
+SOMERSET EAST:2:2308.518441
+WITZIESHOEK (QAQWA):2:6990.955000
+KLIPRIVER:2:1180.192917
+MAPUMULO:2:300.133227
+STRAND:2:48.830726
+MOOIRIVIER:2:562.996402
+MDUTJANA:2:699.570393
+NORTHERN TVL-37:2:87.032962
+BENONI:2:2.388788
+ESHOWE:2:408.044329
+HOPETOWN:2:3244.740523
+BOKSBURG:2:1.483828
+KOMGA:2:585.149112
+NORTHERN TVL-20:2:280.853770
+NORTHERN TVL-44:2:481.295639
+ALBERT:2:1593.103188
+WORCESTER:2:1632.156622
+MOKERONG:2:2819.233166
+NATAL-98:2:20.490331
+MOLTENO:2:782.460579
+NORTHERN TVL-4:2:6607.658507
+NORTHERN TVL-46:2:200.410568
+NORTHERN TVL-24:2:57.210509
+CAMPER DOWN:2:282.708341
+NATAL-34:2:457.703659
+LICHTENBURG:2:1903.710143
+VREDENDAL:2:1508.832362
+BRONKHORSTSPRUIT:2:13.814190
+SOUTPANSBERG:2:10419.686836
+ROUXVILLE:2:1123.867890
+NONGOMA:2:730.810120
+DELAREYVILLE:2:1209.101994
+VRYBURG 1/MAFEKING 1:2:7162.335730
+EXCELSIOR:2:683.401285
+NORTHERN TVL-39:2:169.360938
+CAPE:2:1.637668
+EERSTEHOEK:2:24.032740
+DEWTS DOORP:2:990.614783
+VANDERBIJL P.:2:7.003086
+BETHULIE:2:1064.090643
+NORTH WEST-5:2:1207.422342
+NQUTU:2:648.676766
+INDWE:2:360.973846
+MOSSEL BAAI:2:805.706676
+EERSTEHOEK:2:1078.103854
+NEWCASTLE:2:672.058090
+VICTORIA WEST:2:4460.651758
+SEKHUKHUNELAND:2:3759.164049
+EASTERN TVL-9:2:23.032200
+HERMANUS:2:295.925430
+RUSTENBURG:2:749.366611
+DE AAR:2:1272.894625
+PORT ELISABETH:2:604.028413
+MOUTSE:2:49.513582
+BLOEMFONTEIN/BOTS:2:2198.347390
+CLANWILLIAN:2:2948.668504
+GEORGE:2:1034.496426
+VANHYNSDORP:2:3735.794579
+NATAL-17:2:33.227082
+EASTERN TVL-20:2:17.013155
+NORTHERN TVL-31:2:266.121723
+HARRISMITH:2:2853.485048
+NATAL-27:2:68.800357
+CARNARVON:2:6244.250344
+VULAM./EMZUMBE:2:337.447478
+OUDTSHOORN:2:1358.889229
+NATAL-12:2:52.889960
+MACLEAR:2:1007.174224
+PRINCE ALBERT:2:3184.261590
+PIKETBERG:2:1763.564284
+CLOCOLAN:2:430.980486
+ALBANY:2:1794.518660
+BATHURST:2:608.422316
+BETHAL:2:2329.169103
+WILLOWMORE:2:3083.292388
+NOUPOORT:2:581.960738
+NAMAKWALAND:2:18319.712751
+NORTHERN TVL-33:2:141.093260
+TULBAGH:2:355.298978
+UITENHAGE:2:1252.810966
+BOLOBEDU:2:879.539956
+VILJOENSKROON:2:843.064277
+WITRIVER:2:3198.853788
+IXOPO:2:569.349170
+RICHMOND:2:2886.598787
+UBOMBO:2:766.592900
+NATAL-18:2:211.869551
+NORTHERN TVL-19:2:51.763000
+KNYSNA:2:816.121549
+WINBURG:2:1147.442051
+HENNENMAN:2:247.839574
+BALFOUR:2:1988.946446
+NATAL-74:2:167.858119
+NATAL-88:2:46.872722
+VREDEFORT:2:511.977439
+MDANTSANE 4:2:32.340094
+MPENDLE:2:492.536849
+HARTSWATER:2:267.287709
+KRANSKOP:2:277.286537
+THABAZIMBI:2:11743.342903
+PAARL:2:447.537452
+VREDENBURG:2:282.026861
+JOHANNESBURG:2:4.371042
+BOTHAVILLE:2:1017.686964
+CHATCART:2:1027.979842
+NATAL-24:2:179.432508
+EERSTEHOEK:2:484.746608
+BULFONTEIN:2:1253.767975
+WATERBERG:2:16243.332952
+PARYS:2:355.520796
+NATAL-39:2:13.699567
+MONTAGU:2:1023.079207
+NORTHERN TVL-40:2:1654.433386
+MARQUARD:2:498.284734
+PIET RETIEF:2:4275.004146
+EZINGOLWENI:2:192.732223
+NATAL-69:2:135.766158
+WAKKERSTROOM:2:2200.198160
+HOPEFIELD:2:508.254183
+NATAL-33:2:5.773005
+BOCHUM:2:2666.494506
+KLERKSDORP:2:1347.972250
+KEMPTON PARK:2:3.541749
+PORT SHEPSTONE:2:305.079938
+REDDESSBURG:2:586.734809
+POLELA:2:251.221668
+VRYHEID:2:1445.310796
+GORDONIA:2:20425.914754
+FICKSBURG:2:510.317917
+NATAL-26:2:231.732941
+SENEKAL:2:1424.689735
+KIMBERLEY:2:1345.945524
+DELMAS:2:1186.420270
+CRADOCK:2:2322.254508
+EASTERN TVL-11:2:685.903636
+NATAL-85:2:24.233542
+PETRUSBURG:2:1174.519942
+EASTERN TVL-15:2:94.172000
+KOSTER:2:1074.370904
+VREDE:2:2112.014036
+SESHEGO:2:3781.910301
+ROBERTSON:2:666.587932
+BO/JAK/KOF/FAU:2:7257.387675
+MIDDELSBURG:2:5388.162408
+WELLINGTON:2:181.413948
+SIMONSTOWN:2:110.471939
+NATAL-76:2:30.015618
+GRAAFF-REINET:2:2722.291669
+NATAL-101:2:116.689960
+COLESBERG:2:2155.868235
+CERES:2:3975.692809
+EERSTEHOEK:2:1328.174531
+HEIDELBERG:2:795.255202
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_POPULATION.txt
new file mode 100644
index 0000000..794d593
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHAFRICA_POPULATION.txt
@@ -0,0 +1,407 @@
+SOUTH AFRICA	:	0	:	37110291
+EASTERN CAPE	:	1	:	6007740
+EASTERN TVL	:	1	:	6007740
+NATAL	:	1	:	7955524
+NORTH WEST	:	1	:	3285384
+NORTHERN CAPE	:	1	:	720974
+NORTHERN TVL	:	1	:	720974
+ORANGE	:	1	:	6458333
+ORANGE FREE STATE	:	1	:	2535947
+PWV [Gauteng] 	:	1	:	8837178
+WESTERN CAPE	:	1	:	3417675
+MESSINA	:	2	:	15673
+SOUTPANSBERG	:	2	:	15673
+SOUTPANSBERG	:	2	:	15673
+NORTHERN TVL-4	:	2	:	15673
+POTGIETERSRUS	:	2	:	15673
+WALVIS BAY	:	2	:	26702
+MALAMUELE	:	2	:	15673
+NORTHERN TVL-7	:	2	:	15673
+BOCHUM	:	2	:	15673
+GIYANI	:	2	:	15673
+LETABA	:	2	:	15673
+MOKERONG	:	2	:	15673
+WATERBERG	:	2	:	15673
+PIETERSBURG	:	2	:	15673
+SESHEGO	:	2	:	15673
+SEKGOSESE	:	2	:	15673
+MOKERONG	:	2	:	15673
+BOLOBEDU	:	2	:	15673
+NORTHERN TVL-18	:	2	:	15673
+NORTHERN TVL-19	:	2	:	15673
+NORTHERN TVL-20	:	2	:	15673
+THABAZIMBI	:	2	:	15673
+NORTHERN TVL-22	:	2	:	15673
+THABAMOOPO	:	2	:	15673
+NORTHERN TVL-24	:	2	:	15673
+RITAVI	:	2	:	15673
+NORTHERN TVL-26	:	2	:	15673
+NAPHUNO	:	2	:	15673
+NORTHERN TVL-28	:	2	:	15673
+PILGRIM'S REST	:	2	:	15673
+NORTHERN TVL-30	:	2	:	15673
+NORTHERN TVL-31	:	2	:	15673
+NORTHERN TVL-32	:	2	:	15673
+NORTHERN TVL-33	:	2	:	15673
+NAPHUNO	:	2	:	15673
+SEKHUKHUNELAND	:	2	:	15673
+MOKERONG	:	2	:	15673
+NORTHERN TVL-37	:	2	:	15673
+NEBO	:	2	:	15673
+NORTHERN TVL-39	:	2	:	15673
+NORTHERN TVL-40	:	2	:	15673
+WARMBAD	:	2	:	15673
+LYDENBURG	:	2	:	154044
+NORTHERN TVL-42	:	2	:	15673
+NORTHERN TVL-43	:	2	:	15673
+NORTHERN TVL-44	:	2	:	15673
+MARICO	:	2	:	142842
+NORTH WEST-2	:	2	:	142842
+NORTH WEST-3	:	2	:	142842
+GORDONIA	:	2	:	26702
+NORTHERN TVL-45	:	2	:	15673
+GROBLERSDAL	:	2	:	154044
+NORTHERN TVL-46	:	2	:	15673
+MOUTSE	:	2	:	154044
+MDUTJANA	:	2	:	154044
+WITRIVER	:	2	:	154044
+BRITS	:	2	:	142842
+MOUTSE	:	2	:	154044
+NORTH WEST-5	:	2	:	142842
+EASTERN TVL-7	:	2	:	154044
+EASTERN TVL-8	:	2	:	154044
+EASTERN TVL-9	:	2	:	154044
+BELFAST	:	2	:	154044
+EASTERN TVL-11	:	2	:	154044
+RUSTENBURG	:	2	:	142842
+MIDDELSBURG	:	2	:	154044
+EASTERN TVL-13	:	2	:	154044
+MOUTSE	:	2	:	154044
+CULLINAN	:	2	:	0
+EASTERN TVL-15	:	2	:	154044
+NELSPRUIT	:	2	:	154044
+VRYBURG 1/MAFEKING 1	:	2	:	142842
+WONDERBOOM	:	2	:	0
+EASTERN TVL-17	:	2	:	154044
+BARBERTON	:	2	:	154044
+SWARTRUGGEN	:	2	:	142842
+RUSTENBURG	:	2	:	142842
+WITBANK	:	2	:	154044
+EASTERN TVL-20	:	2	:	154044
+EASTERN TVL-21	:	2	:	154044
+WATERVAL BOVEN	:	2	:	154044
+BRONKHORSTSPRUIT	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+NORTH WEST-10	:	2	:	142842
+EERSTEHOEK	:	2	:	154044
+BRITS	:	2	:	142842
+KOSTER	:	2	:	142842
+PRETORIA	:	2	:	0
+CAROLINA	:	2	:	154044
+KRUGERSDORP	:	2	:	0
+LICHTENBURG	:	2	:	142842
+NORTH WEST-14	:	2	:	142842
+EERSTEHOEK	:	2	:	154044
+KEMPTON PARK	:	2	:	0
+RANDBURG	:	2	:	0
+DELMAS	:	2	:	154044
+VENTERSDORP	:	2	:	142842
+BENONI	:	2	:	0
+ROODE PORT	:	2	:	0
+COLIGNY	:	2	:	142842
+RANDFONTEIN	:	2	:	0
+BETHAL	:	2	:	154044
+ERMELO	:	2	:	154044
+JOHANNESBURG	:	2	:	0
+GERMISTON	:	2	:	0
+KURUMAN	:	2	:	26702
+SPRINGS	:	2	:	0
+HOEVELDRIF	:	2	:	154044
+BOKSBURG	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+BRAKPAN	:	2	:	0
+WESTONARIA	:	2	:	0
+OBERHOLZER	:	2	:	0
+ALBERTON	:	2	:	0
+VEREENIGING	:	2	:	0
+DELAREYVILLE	:	2	:	142842
+NIGEL	:	2	:	0
+EERSTEHOEK	:	2	:	154044
+VRYBURG	:	2	:	142842
+HEIDELBERG	:	2	:	0
+POTCHEFSTROOM	:	2	:	142842
+VANDERBIJL P.	:	2	:	0
+BALFOUR	:	2	:	154044
+EERSTEHOEK	:	2	:	154044
+KLERKSDORP	:	2	:	142842
+STANDERTON	:	2	:	154044
+PIET RETIEF	:	2	:	154044
+SASOLSBURG	:	2	:	56354
+PARYS	:	2	:	56354
+AMERSFORT	:	2	:	154044
+WAKKERSTROOM	:	2	:	154044
+SCHWEIZER R.	:	2	:	142842
+INGWAVUMA	:	2	:	78767
+WOLMARANSSTAD	:	2	:	142842
+VREDEFORT	:	2	:	56354
+HEILBRON	:	2	:	56354
+VILJOENSKROON	:	2	:	56354
+FRANKFORT	:	2	:	56354
+VREDE	:	2	:	56354
+VOLKSRUST	:	2	:	154044
+KOPPIES	:	2	:	56354
+POSTMASBURG	:	2	:	26702
+BOTHAVILLE	:	2	:	56354
+UBOMBO	:	2	:	78767
+NORTH WEST-23	:	2	:	142842
+UTRECHT	:	2	:	78767
+PAULPIETERSBURG	:	2	:	78767
+KROONSTAD	:	2	:	56354
+NGOTSHE	:	2	:	78767
+NEWCASTLE	:	2	:	78767
+VRYHEID	:	2	:	78767
+REITZ	:	2	:	56354
+WESSELS BRON	:	2	:	56354
+UBOMBO	:	2	:	78767
+LINDLEY	:	2	:	56354
+HOOPSTAD	:	2	:	56354
+HARTSWATER	:	2	:	26702
+NATAL-9	:	2	:	78767
+HARRISMITH	:	2	:	56354
+NONGOMA	:	2	:	78767
+ODENDAALSRUS	:	2	:	56354
+BARKLY WEST	:	2	:	26702
+NATAL-11	:	2	:	78767
+NATAL-12	:	2	:	78767
+HLABISA	:	2	:	78767
+HENNENMAN	:	2	:	56354
+BO/JAK/KOF/FAU	:	2	:	56354
+NATAL-14	:	2	:	78767
+DANNHAUSER	:	2	:	78767
+NATAL-16	:	2	:	78767
+BETHLEHEM	:	2	:	56354
+NATAL-17	:	2	:	78767
+VENTERSBURG	:	2	:	56354
+NATAL-18	:	2	:	78767
+WARRENTON	:	2	:	26702
+NQUTU	:	2	:	78767
+MAHLABATINI	:	2	:	78767
+SENEKAL	:	2	:	56354
+DUNDEE	:	2	:	78767
+BULFONTEIN	:	2	:	56354
+WINBURG	:	2	:	56354
+GLENCOE	:	2	:	78767
+NAMAKWALAND	:	2	:	26702
+THEUNISSEN	:	2	:	56354
+KLIPRIVER	:	2	:	78767
+NATAL-24	:	2	:	78767
+BABANANGO	:	2	:	78767
+NATAL-26	:	2	:	78767
+NATAL-27	:	2	:	78767
+NATAL-28	:	2	:	78767
+NATAL-29	:	2	:	78767
+NATAL-30	:	2	:	78767
+LOWER UMFOLOZI	:	2	:	78767
+NATAL-32	:	2	:	78767
+HERBERT	:	2	:	26702
+NATAL-33	:	2	:	78767
+NATAL-34	:	2	:	78767
+FOURIESBURG	:	2	:	56354
+BRANDFORT	:	2	:	56354
+WITZIESHOEK (QAQWA)	:	2	:	6458333
+MTONJANENI	:	2	:	78767
+HAY	:	2	:	26702
+NKANDALA	:	2	:	78767
+NATAL-37	:	2	:	78767
+KENHARDT	:	2	:	26702
+KIMBERLEY	:	2	:	26702
+BERGVILLE	:	2	:	78767
+NATAL-39	:	2	:	78767
+NATAL-40	:	2	:	78767
+MARQUARD	:	2	:	56354
+MSINGA	:	2	:	78767
+FICKSBURG	:	2	:	56354
+ESTCOURT	:	2	:	78767
+WEENEN	:	2	:	78767
+NATAL-44	:	2	:	78767
+NATAL-45	:	2	:	78767
+CLOCOLAN	:	2	:	56354
+NATAL-46	:	2	:	78767
+KRANSKOP	:	2	:	78767
+NATAL-48	:	2	:	78767
+NATAL-49	:	2	:	78767
+EXCELSIOR	:	2	:	56354
+BLOEMFONTEIN/BOTS	:	2	:	56354
+ESHOWE	:	2	:	78767
+NATAL-51	:	2	:	78767
+MTUNZINI	:	2	:	78767
+NATAL-53	:	2	:	78767
+PRIESKA	:	2	:	26702
+NATAL-54	:	2	:	78767
+NATAL-55	:	2	:	78767
+PETRUSBURG	:	2	:	56354
+UMVOTI	:	2	:	78767
+NATAL-57	:	2	:	78767
+ORANGE FREE STATE-33	:	2	:	56354
+MOOIRIVIER	:	2	:	78767
+LADYBRAND	:	2	:	56354
+MAPUMULO	:	2	:	78767
+NATAL-60	:	2	:	78767
+HOPETOWN	:	2	:	26702
+NATAL-61	:	2	:	78767
+NATAL-62	:	2	:	78767
+LOWER TUGULA	:	2	:	78767
+NEW HANOVER	:	2	:	78767
+LION RIVER	:	2	:	78767
+DEWTS DOORP	:	2	:	56354
+MPENDLE	:	2	:	78767
+NDWEDWE	:	2	:	78767
+REDDESSBURG	:	2	:	56354
+PIETERMARITZBURG	:	2	:	78767
+NATAL-69	:	2	:	78767
+EDENBURG	:	2	:	56354
+UNDERBERG	:	2	:	78767
+WEPENER	:	2	:	56354
+JAGERSFONTEIN	:	2	:	56354
+INANDA	:	2	:	78767
+NATAL-72	:	2	:	78767
+NATAL-73	:	2	:	78767
+NATAL-74	:	2	:	78767
+MOUNT CURRIE	:	2	:	78767
+NATAL-76	:	2	:	78767
+CAMPER DOWN	:	2	:	78767
+CALVINIA	:	2	:	26702
+NATAL-78	:	2	:	78767
+POLELA	:	2	:	78767
+NATAL-80	:	2	:	78767
+PINETOWN	:	2	:	78767
+RICHMOND	:	2	:	78767
+DURBAN/CHATS.	:	2	:	78767
+PHILIPSTOWN	:	2	:	26702
+DURBAN/CHATS.	:	2	:	78767
+TROMPSBURG	:	2	:	56354
+NATAL-85	:	2	:	78767
+NATAL-86	:	2	:	78767
+EMBUMBULU	:	2	:	78767
+NATAL-88	:	2	:	78767
+SMITHFIELD	:	2	:	56354
+IXOPO	:	2	:	78767
+BRITSTOWN	:	2	:	26702
+PHILIPPOLIS	:	2	:	56354
+CARNARVON	:	2	:	26702
+ZASTRON	:	2	:	56354
+NATAL-90	:	2	:	78767
+EASTERN CAPE-1	:	2	:	120154
+NATAL-91	:	2	:	78767
+ROUXVILLE	:	2	:	56354
+WILLISTON	:	2	:	26702
+VULAM./EMZUMBE	:	2	:	78767
+NATAL-93	:	2	:	78767
+BETHULIE	:	2	:	56354
+UMZINTO	:	2	:	78767
+COLESBERG	:	2	:	26702
+MOUNT CURRIE	:	2	:	120154
+DE AAR	:	2	:	26702
+EASTERN CAPE-3	:	2	:	120154
+VANHYNSDORP	:	2	:	81373
+VULAM./EMZUMBE	:	2	:	78767
+VICTORIA WEST	:	2	:	26702
+VULAM./EMZUMBE	:	2	:	78767
+ALBERT	:	2	:	120154
+ALFRED	:	2	:	78767
+VETERSTAD	:	2	:	120154
+NATAL-98	:	2	:	78767
+LADY GREY	:	2	:	120154
+PORT SHEPSTONE	:	2	:	78767
+ALIWAL NORTH	:	2	:	120154
+EZINGOLWENI	:	2	:	78767
+BARKLY EAST	:	2	:	120154
+MACLEAR	:	2	:	120154
+HANOVER	:	2	:	26702
+NATAL-101	:	2	:	78767
+RICHMOND	:	2	:	26702
+WODEHOUSE	:	2	:	120154
+STEYNSBURG	:	2	:	120154
+NOUPOORT	:	2	:	26702
+ELLIOT	:	2	:	120154
+VREDENDAL	:	2	:	81373
+FRASERBURG	:	2	:	26702
+MOLTENO	:	2	:	120154
+MIDDLEBURG	:	2	:	120154
+INDWE	:	2	:	120154
+HOFMEYR	:	2	:	120154
+STERKSTROOM	:	2	:	120154
+BEAUFORT WEST	:	2	:	81373
+TARKASTAD	:	2	:	120154
+MURRAYSBURG	:	2	:	81373
+VREDENDAL	:	2	:	81373
+GRAAFF-REINET	:	2	:	120154
+QUEENSTOWN	:	2	:	120154
+CRADOCK	:	2	:	120154
+SUTHERLAND	:	2	:	26702
+CLANWILLIAN	:	2	:	81373
+VICTORIA EAST	:	2	:	120154
+CHATCART	:	2	:	120154
+ABERDEEN	:	2	:	120154
+CERES	:	2	:	81373
+QUEENSTOWN	:	2	:	120154
+SUTTERHEIM	:	2	:	120154
+BEDFORD	:	2	:	120154
+PEARSTON	:	2	:	120154
+PIKETBERG	:	2	:	81373
+SOMERSET EAST	:	2	:	120154
+QUEENSTOWN	:	2	:	120154
+ADELAIDE	:	2	:	120154
+FORT BEAUFORT	:	2	:	120154
+KOMGA	:	2	:	120154
+STOCHENSTROM	:	2	:	120154
+LAINGSBURG	:	2	:	81373
+PRINCE ALBERT	:	2	:	81373
+KING WILLIAM TOWN	:	2	:	120154
+MDANTSANE 4	:	2	:	120154
+JANSENVILLE	:	2	:	120154
+VREDENBURG	:	2	:	81373
+EAST LONDON	:	2	:	120154
+WILLOWMORE	:	2	:	120154
+MDANTSANE	:	2	:	120154
+HOPEFIELD	:	2	:	81373
+MALMESBURY	:	2	:	81373
+ALBANY	:	2	:	120154
+STEYLERVILLE	:	2	:	120154
+TULBAGH	:	2	:	81373
+WORCESTER	:	2	:	81373
+UITENHAGE	:	2	:	120154
+KIRKWOOD	:	2	:	120154
+BATHURST	:	2	:	120154
+ALEXANDRIA	:	2	:	120154
+OUDTSHOORN	:	2	:	81373
+CALITZDORP	:	2	:	81373
+WELLINGTON	:	2	:	81373
+UNIONDALE	:	2	:	81373
+LADISMITH	:	2	:	81373
+MALMESBURY	:	2	:	81373
+MONTAGU	:	2	:	81373
+PAARL	:	2	:	81373
+JOUBERTINA	:	2	:	120154
+PORT ELISABETH	:	2	:	120154
+HANKEY	:	2	:	120154
+GEORGE	:	2	:	81373
+SWELLENDAM	:	2	:	81373
+ROBERTSON	:	2	:	81373
+HUMANSDORP	:	2	:	120154
+BELLEVILLE	:	2	:	81373
+CAPE	:	2	:	81373
+KNYSNA	:	2	:	81373
+STELLENBOSCH	:	2	:	81373
+CAPE	:	2	:	81373
+RIVERSDALE	:	2	:	81373
+MOSSEL BAAI	:	2	:	81373
+CALEDON	:	2	:	81373
+GOODWOOD	:	2	:	81373
+KUILSRIVER	:	2	:	81373
+HEIDELBERG	:	2	:	81373
+WINBERG	:	2	:	81373
+SIMONSTOWN	:	2	:	81373
+STRAND	:	2	:	81373
+BREDASDORP	:	2	:	81373
+HERMANUS	:	2	:	81373
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_AREA.txt
new file mode 100644
index 0000000..216c0a8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_AREA.txt
@@ -0,0 +1,17 @@
+South Korea	:	0	:	98480
+Busan [Pusan]	:	1	:	762.92
+Chungchongbuk-do 	:	1	:	7431.60
+Chungchongnam-do 	:	1	:	8597.94
+Daegu [Taegu]	:	1	:	885.7
+Daejeon [Taejon]	:	1	:	539.7
+Kang-won-do 	:	1	:	16873.38
+Kwangju	:	1	:	501.44
+Kyongsangbuk-do 	:	1	:	19024.81
+Kyongsangnam-do 	:	1	:	10517.74
+Kyonggi-do 	:	1	:	10181.29
+Inchon	:	1	:	986.45
+Cheju-do 	:	1	:	1847.19
+chollabuk-do 	:	1	:	8050.94
+chollanam-do 	:	1	:	12036.95
+Seoul	:	1	:	605.52
+Ulsan	:	1	:	1056.38
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_POPULATION.txt
new file mode 100644
index 0000000..ae1d2c8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SOUTHKOREA_POPULATION.txt
@@ -0,0 +1,17 @@
+South Korea	:	0	:	48846823
+Busan [Pusan]	:	1	:	3684153
+Chungchongbuk-do 	:	1	:	1500610
+Chungchongnam-do 	:	1	:	1972553
+Daegu [Taegu]	:	1	:	2539738
+Daejeon [Taejon]	:	1	:	1450750
+Kang-won-do 	:	1	:	1528640
+Kwangju	:	1	:	1406915
+Kyongsangbuk-do 	:	1	:	2718613
+Kyongsangnam-do 	:	1	:	3168734
+Kyonggi-do 	:	1	:	10628842
+Inchon	:	1	:	2610715
+Cheju-do 	:	1	:	557235
+chollabuk-do 	:	1	:	1915674
+chollanam-do 	:	1	:	1994011
+Seoul	:	1	:	10287847
+Ulsan	:	1	:	1087958
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_AREA.txt
new file mode 100644
index 0000000..bcc246f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_AREA.txt
@@ -0,0 +1,17 @@
+ GALICIA : 1 : 29434.0
+ ASTURIAS : 1 : 10565.0
+ CANTABRIA : 1 : 5298.0
+ PAIS VASCO : 1 : 7261.0
+ NAVARRA : 1 : 10421.0
+ CASTILLA - LEON : 1 : 94193.0
+ ARAGON : 1 : 47650.0
+ CATALUNA : 1 : 31930.0
+ RIOJA : 1 : 5034.0
+ CASTILLA - LA MANCHA : 1 : 79230.0
+ MADRID : 1 : 7995.0
+ COMUNIDAD VALENCIANA : 1 : 23305.0
+ EXTREMADURA : 1 : 41602.0
+ BALEARES : 1 : 5014.0
+ MURCIA : 1 : 11317.0
+ ANDALUCIA : 1 : 87268.0
+ CANARIAS : 1 : 7242.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_POPULATION.txt
new file mode 100644
index 0000000..597d876
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SPAIN_POPULATION.txt
@@ -0,0 +1,17 @@
+ GALICIA : 1 : 2806500
+ ASTURIAS : 1 : 1127500
+ CANTABRIA : 1 : 527200
+ PAIS VASCO : 1 : 2129800
+ NAVARRA : 1 : 521400
+ CASTILLA - LEON : 1 : 2627800
+ ARAGON : 1 : 1213900
+ CATALUNA : 1 : 6010400
+ RIOJA : 1 : 261000
+ CASTILLA - LA MANCHA : 1 : 1714000
+ MADRID : 1 : 4886500
+ COMUNIDAD VALENCIANA : 1 : 3789700
+ EXTREMADURA : 1 : 1128800
+ BALEARES : 1 : 683100
+ MURCIA : 1 : 1029400
+ ANDALUCIA : 1 : 6936500
+ CANARIAS : 1 : 1489100
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_AREA.txt
new file mode 100644
index 0000000..66f61fb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_AREA.txt
@@ -0,0 +1,102 @@
+Sudan	:	0	:	2505810
+Darfur : 1 : 318133
+Kordufan : 1 : 376145
+Upper Nile	:	1	:	77773
+Port Sudan 	:	1	:	218887
+Halayeb 	:	1	:	0
+Red Sea 	:	1	:	0
+Sinkat 	:	1	:	0
+Tokar 	:	1	:	0
+Rumbek 	:	1	:	40235
+Wad Medani 	:	1	:	23373
+Kamlin 	:	1	:	0
+Hasahesa 	:	1	:	0
+Butana 	:	1	:	0
+Gezira 	:	1	:	0
+Managil 	:	1	:	0
+Um Elgora 	:	1	:	0
+Khartoum 	:	1	:	22142
+Khartoum 	:	1	:	0
+Omdurman 	:	1	:	0
+East Nile 	:	1	:	0
+Gedarif  [Eastern1] [Eastern]	:	1	:	75263
+Gedaref 	:	1	:	0
+Rahad 	:	1	:	0
+Galabat 	:	1	:	0
+Fashga 	:	1	:	0
+Bantio 	:	1	:	360
+Rabak 	:	1	:	30411
+Gitaina 	:	1	:	0
+Duem 	:	1	:	0
+Kosti 	:	1	:	0
+Gabalain 	:	1	:	0
+Al-Damazin 	:	1	:	45844
+Damazin 	:	1	:	0
+Kurmuk 	:	1	:	0
+Rosairis 	:	1	:	0
+Baw 	:	1	:	0
+Northern3 [Northern]	:	1	:	348765
+Wadi Halfa 	:	1	:	0
+Dongla 	:	1	:	0
+Merawi 	:	1	:	0
+Eldaba 	:	1	:	0
+Bahr El Ghazal	:	1	:	22956
+Yambio 	:	1	:	79319
+Wau 	:	1	:	93900
+Geneina 	:	1	:	79460
+Elgineina 	:	1	:	0
+Zalingi 	:	1	:	0
+Jabel Marra 	:	1	:	0
+Hibila 	:	1	:	0
+Kilbess 	:	1	:	0
+Wadi Salih 	:	1	:	0
+Al-Fula 	:	1	:	111373
+Elnuhud 	:	1	:	0
+Gabiesh 	:	1	:	0
+Elsalam 	:	1	:	0
+Lagawa 	:	1	:	0
+Nyala 	:	1	:	127300
+Nyala 	:	1	:	0
+Rahet Elburdi 	:	1	:	0
+Iddelfirsan 	:	1	:	0
+Adiela 	:	1	:	0
+Deain 	:	1	:	0
+Sheria 	:	1	:	0
+Buram 	:	1	:	0
+Kadugli 	:	1	:	79470
+Rashad 	:	1	:	0
+Abu Jibeha 	:	1	:	0
+Iddelfirsan 	:	1	:	0
+Kadugli 	:	1	:	0
+Taludi 	:	1	:	0
+Bor 	:	1	:	122479
+Kassala 	:	1	:	36710
+Kassala 	:	1	:	0
+Atbara River 	:	1	:	0
+Settet 	:	1	:	0
+El Gash 	:	1	:	0
+Hamaskorabe 	:	1	:	0
+Al-Damar 	:	1	:	122123
+Berber 	:	1	:	0
+Eddamer 	:	1	:	0
+Shendi 	:	1	:	0
+Matamma 	:	1	:	0
+Abo Hamed 	:	1	:	0
+Awil 	:	1	:	33558
+Al-Fashir 	:	1	:	296420
+Kutum 	:	1	:	0
+Fashir 	:	1	:	0
+Umkadada 	:	1	:	0
+Kabkadia 	:	1	:	0
+Al-Obeid 	:	1	:	185302
+Sodari 	:	1	:	0
+Bara 	:	1	:	0
+Umrwaba 	:	1	:	0
+Shikan 	:	1	:	0
+Hamrat Elshiek 	:	1	:	0
+Kapoita [Equatoria]	:	1	:	82542
+Sennar [Central] 	:	1	:	37844
+Sennar 	:	1	:	0
+Dindir 	:	1	:	0
+Singa 	:	1	:	0
+Warap 	:	1	:	31027
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_POPULATION.txt
new file mode 100644
index 0000000..b540cc7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SUDAN_POPULATION.txt
@@ -0,0 +1,102 @@
+Sudan	:	0	:	41236378
+Darfur : 1 : 6470000
+Kordufan : 1 : 3827000
+Gedarif [Eastern1] [Eastern]	:	1	:	1567000
+Kapoita [Equatoria]	:	1	:	 359056
+Sennar  [Central]	:	1	:	1236000
+Bahr El Ghazal	:	1	:	1500
+Northern3 [Northern]	:	1	:	603000
+Upper Nile	:	1	:	1342943
+Port Sudan 	:	1	:	728000
+Halayeb 	:	1	:	73000
+Red Sea 	:	1	:	138000
+Sinkat 	:	1	:	284000
+Tokar 	:	1	:	233000
+Rumbek 	:	1	:	2256942
+Wad Medani 	:	1	:	3583000
+Kamlin 	:	1	:	430000
+Hasahesa 	:	1	:	645000
+Butana 	:	1	:	502000
+Gezira 	:	1	:	788000
+Managil 	:	1	:	1075000
+Um Elgora 	:	1	:	143000
+Khartoum 	:	1	:	5139000
+Khartoum 	:	1	:	617000
+Omdurman 	:	1	:	1696000
+East Nile 	:	1	:	2826000
+Gedaref 	:	1	:	219000
+Rahad 	:	1	:	705000
+Galabat 	:	1	:	626000
+Fashga 	:	1	:	17000
+Bantio 	:	1	:	0
+Rabak 	:	1	:	1555000
+Gitaina 	:	1	:	295000
+Duem 	:	1	:	312000
+Kosti 	:	1	:	653000
+Gabalain 	:	1	:	295000
+Al-Damazin 	:	1	:	675000
+Damazin 	:	1	:	162000
+Kurmuk 	:	1	:	135000
+Rosairis 	:	1	:	365000
+Baw 	:	1	:	13000
+Wadi Halfa 	:	1	:	109000
+Dongla 	:	1	:	211000
+Merawi 	:	1	:	272000
+Eldaba 	:	1	:	11000
+Yambio 	:	1	:	0
+Wau 	:	1	:	0
+Geneina 	:	1	:	1653000
+Elgineina 	:	1	:	0
+Zalingi 	:	1	:	0
+Jabel Marra 	:	1	:	0
+Hibila 	:	1	:	0
+Kilbess 	:	1	:	0
+Wadi Salih 	:	1	:	0
+Al-Fula 	:	1	:	1164000
+Elnuhud 	:	1	:	0
+Gabiesh 	:	1	:	0
+Elsalam 	:	1	:	0
+Lagawa 	:	1	:	0
+Nyala 	:	1	:	0
+Nyala 	:	1	:	0
+Rahet Elburdi 	:	1	:	0
+Iddelfirsan 	:	1	:	0
+Adiela 	:	1	:	0
+Deain 	:	1	:	0
+Sheria 	:	1	:	0
+Buram 	:	1	:	0
+Kadugli 	:	1	:	1143000
+Rashad 	:	1	:	0
+Abu Jibeha 	:	1	:	0
+Iddelfirsan 	:	1	:	0
+Kadugli 	:	1	:	0
+Taludi 	:	1	:	0
+Bor 	:	1	:	0
+Kassala 	:	1	:	1213000
+Kassala 	:	1	:	957000
+Atbara River 	:	1	:	256000
+Settet 	:	1	:	0
+El Gash 	:	1	:	0
+Hamaskorabe 	:	1	:	0
+Al-Damar 	:	1	:	936000
+Berber 	:	1	:	308000
+Eddamer 	:	1	:	299000
+Shendi 	:	1	:	168000
+Matamma 	:	1	:	140000
+Abo Hamed 	:	1	:	21000
+Awil 	:	1	:	0
+Al-Fashir 	:	1	:	1552000
+Kutum 	:	1	:	0
+Fashir 	:	1	:	0
+Umkadada 	:	1	:	0
+Kabkadia 	:	1	:	0
+Al-Obeid 	:	1	:	1530000
+Sodari 	:	1	:	122000
+Bara 	:	1	:	413000
+Umrwaba 	:	1	:	780000
+Shikan 	:	1	:	184000
+Hamrat Elshiek 	:	1	:	31000
+Sennar 	:	1	:	606000
+Dindir 	:	1	:	371000
+Singa 	:	1	:	259000
+Warap 	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_AREA.txt
new file mode 100644
index 0000000..0624258
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_AREA.txt
@@ -0,0 +1,11 @@
+Suriname	:	0	:	163270
+Brokopondo  	:	1	:	7364
+Commewijne 	:	1	:	2353
+Coronie 	:	1	:	3902
+Marowijne 	:	1	:	4627
+Nickerie 	:	1	:	5353
+Para 	:	1	:	5393
+Paramaribo 	:	1	:	183
+Saramacca 	:	1	:	3636
+Sipaliwini 	:	1	:	130567
+Wanica 	:	1	:	443
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_POPULATION.txt
new file mode 100644
index 0000000..e212a3b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SURINAME_POPULATION.txt
@@ -0,0 +1,12 @@
+Suriname	:	0	:	439117
+Brokopondo  	:	1	:	14215
+Commewijne 	:	1	:	24649
+Coronie 	:	1	:	2887
+Marowijne 	:	1	:	16642
+Nickerie 	:	1	:	36639
+Para 	:	1	:	18749
+Paramaribo 	:	1	:	242946
+Saramacca 	:	1	:	15980
+Sipaliwini 	:	1	:	34136
+Wanica 	:	1	:	85986
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_AREA.txt
new file mode 100644
index 0000000..48dd516
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_AREA.txt
@@ -0,0 +1,25 @@
+ SWEDEN : 0  : 449964
+ Norrbotten : 1 : 98910.0
+ V„sterbotten : 1 : 55401.0
+ J„mtland : 1 : 49443.0
+ V„sternorrland : 1 : 21678.0
+ G„vleborg : 1 : 18191.0
+ Kopparberg : 1 : 28193.0
+ V„rmland : 1 : 17583.0
+ Uppsala : 1 : 6989.0
+ V stmanland : 1 : 6302.0
+ Stockholm : 1 : 6487.0
+ Orebro : 1 : 8518.0
+ S”rmland : 1 : 6060.0
+ Zlvsborg : 1 : 11395.0
+ B”hus : 1 : 5410.0
+ Skaraborg : 1 : 7936.0
+ Osterg”tland : 1 : 10562.0
+ Gotland : 1 : 3140.0
+ J”nk”ping : 1 : 9943.0
+ Kalmar : 1 : 11171.0
+ Halland : 1 : 5454.0
+ Kronoberg : 1 : 8457.0
+ Kristianstad : 1 : 6088.0
+ Blekinge : 1 : 2941.0
+ Malm”hus : 1 : 4938.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_POPULATION.txt
new file mode 100644
index 0000000..68cc6f5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWEDEN_POPULATION.txt
@@ -0,0 +1,24 @@
+ Norrbotten : 1 : 263735
+ V„sterbotten : 1 : 251968
+ J„mtland : 1 : 135726
+ V„sternorrland : 1 : 261155
+ G„vleborg : 1 : 289294
+ Kopparberg : 1 : 289067
+ V„rmland : 1 : 283110
+ Uppsala : 1 : 268835
+ V stmanland : 1 : 258487
+ Stockholm : 1 : 1641669
+ Orebro : 1 : 272513
+ S”rmland : 1 : 255636
+ Zlvsborg : 1 : 441391
+ B”hus : 1 : 739945
+ Skaraborg : 1 : 276830
+ Osterg”tland : 1 : 403011
+ Gotland : 1 : 57108
+ J”nk”ping : 1 : 308290
+ Kalmar : 1 : 241102
+ Halland : 1 : 254725
+ Kronoberg : 1 : 177882
+ Kristianstad : 1 : 289278
+ Blekinge : 1 : 150564
+ Malm”hus : 1 : 779309
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_AREA.txt
new file mode 100644
index 0000000..7a1d0d6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_AREA.txt
@@ -0,0 +1,26 @@
+ SWITZERLAND : 0  :41285
+ Schaffhausen : 1 : 298.0
+ Thurgau : 1 : 1012.0
+ Zurich : 1 : 1728.0
+ Aargau : 1 : 1404.0
+ Basel-Stadt : 1 : 37.0
+ Basel-Landschaft : 1 : 428.0
+ Sankt Gallen : 1 : 2014.0
+ Bern/Berne : 1 : 6049.0
+ Solothurn : 1 : 790.0
+ Appenzell Ausserrhoden : 1 : 243.0
+ Appenzell Innerrhoden : 1 : 172.0
+ Luzern : 1 : 1492.0
+ Zug : 1 : 238.0
+ Schwyz : 1 : 908.0
+ Glarus : 1 : 684.0
+ Neuchatel : 1 : 796.0
+ Graub?nden/Grigioni/Grischun : 1 : 7105.0
+ Fribourg/Freiburg : 1 : 1670.0
+ Midwalden : 1 : 275.0
+ Uri : 1 : 1076.0
+ Obwalden : 1 : 490.0
+ Vaud : 1 : 3219.0
+ Valais/Wallis : 1 : 5225.0
+ Ticino : 1 : 2810.0
+ GenŠve : 1 : 282.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_POPULATION.txt
new file mode 100644
index 0000000..ffbf181
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SWITZERLAND_POPULATION.txt
@@ -0,0 +1,25 @@
+ Schaffhausen : 1 : 71697
+ Thurgau : 1 : 205946
+ Zurich : 1 : 1150546
+ Aargau : 1 : 496280
+ Basel-Stadt : 1 : 191787
+ Basel-Landschaft : 1 : 230112
+ Sankt Gallen : 1 : 420268
+ Bern/Berne : 1 : 945573
+ Solothurn : 1 : 226655
+ Appenzell Ausserrhoden : 1 : 51470
+ Appenzell Innerrhoden : 1 : 13573
+ Luzern : 1 : 319525
+ Zug : 1 : 84908
+ Schwyz : 1 : 110526
+ Glarus : 1 : 37648
+ Neuchatel : 1 : 160609
+ Graub?nden/Grigioni/Grischun : 1 : 170411
+ Fribourg/Freiburg : 1 : 207751
+ Midwalden : 1 : 32628
+ Uri : 1 : 33650
+ Obwalden : 1 : 28813
+ Vaud : 1 : 583625
+ Valais/Wallis : 1 : 248313
+ Ticino : 1 : 286725
+ GenŠve : 1 : 375957
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_AREA.txt
new file mode 100644
index 0000000..5858607
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_AREA.txt
@@ -0,0 +1,15 @@
+Syria	:	0	:	185180
+Hasaka (AL Haksa)	:	1	:	23334
+Lattakia (Al Ladhiqiyah	:	1	:	2297
+Kuneitra (El Qunaytirah	:	1	:	1861
+Ar Raqqah	:	1	:	19616
+As Suwayda	:	1	:	5550
+Dara	:	1	:	3730
+Dayr Az Zawr	:	1	:	33060
+Dimashq	:	1	:	105
+Aleppo (Halab) 	:	1	:	18500
+Hamah 	:	1	:	8883
+Homs (Hims) 	:	1	:	42223
+Idlib 	:	1	:	6097
+Rif Dimashq 	:	1	:	18032
+Tartus 	:	1	:	1892
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_POPULATION.txt
new file mode 100644
index 0000000..1f11bcc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/SYRIA_POPULATION.txt
@@ -0,0 +1,15 @@
+Syria	:	0	:	18881361
+Hasaka (AL Haksa)	:	1	:	1265000
+Lattakia (Al Ladhiqiyah	:	1	:	876000
+Kuneitra (El Qunaytirah	:	1	:	66000
+Ar Raqqah	:	1	:	691000
+As Suwayda	:	1	:	307000
+Dara	:	1	:	780000
+Dayr Az Zawr	:	1	:	919000
+Dimashq	:	1	:	1653000
+Aleppo (Halab) 	:	1	:	3719000
+Hamah 	:	1	:	1335000
+Homs (Hims) 	:	1	:	1490000
+Idlib 	:	1	:	1120000
+Rif Dimashq 	:	1	:	2235000
+Tartus 	:	1	:	674000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_AREA.txt
new file mode 100644
index 0000000..6132c60
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_AREA.txt
@@ -0,0 +1,6 @@
+Tajikistan	:	0	:	143100
+Dushanbe	:	1	:	100
+Khatlon	:	1	:	24800
+Gorno-Badakhshan	:	1	:	64200
+RRS [Tadzhikistan Territories]	:	1	:	28600
+Khujand [Leninabad]	:	1	:	25400
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_POPULATION.txt
new file mode 100644
index 0000000..fc7107b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TAJIKISTAN_POPULATION.txt
@@ -0,0 +1,6 @@
+Tajikistan	:	0	:	7320815
+Dushanbe	:	1	:	631700
+Khatlon	:	1	:	2424100
+Gorno-Badakhshan	:	1	:	217900
+RRS [Tadzhikistan Territories]	:	1	:	1498900
+Khujand [Leninabad]	:	1	:	2027800
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_AREA.txt
new file mode 100644
index 0000000..31d355b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_AREA.txt
@@ -0,0 +1,28 @@
+Tanzania United Republic	:	0	:	945087
+L. Victoria : 1 : 68800
+Arusha   	:	1	:	36486
+Dar-es-Salaam 	:	1	:	1393
+Dodoma 	:	1	:	41311
+Iringa 	:	1	:	56864
+Kagera 	:	1	:	28388
+Kaskazini-Pemba 	:	1	:	574
+Kaskazini-Unguja 	:	1	:	470
+Kigoma 	:	1	:	37037
+Kilimanjaro 	:	1	:	13309
+Kusini Pemba 	:	1	:	332
+Kusini Unguja 	:	1	:	854
+Lindi 	:	1	:	66046
+Manyara 	:	1	:	45820
+Mara 	:	1	:	19566
+Mbeya 	:	1	:	60350
+Mjini-Magharibi	:	1	:	230
+Morogoro 	:	1	:	70799
+Mtwara 	:	1	:	16707
+Mwanza 	:	1	:	19592
+Pwani 	:	1	:	32407
+Rukwa 	:	1	:	68635
+Ruvuma 	:	1	:	63498
+Shinyanga 	:	1	:	50781
+Singida 	:	1	:	49341
+Tabora 	:	1	:	76151
+Tanga 	:	1	:	26808
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_POPULATION.txt
new file mode 100644
index 0000000..0e98a2c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA UNITED REPUBLIC_POPULATION.txt
@@ -0,0 +1,28 @@
+Tanzania United Republic	:	0	:	37445392
+L. Victoria : 1 : 0
+Arusha   	:	1	:	1288088
+Dar-es-Salaam 	:	1	:	2487288
+Dodoma 	:	1	:	1692025
+Iringa 	:	1	:	1490892
+Kagera 	:	1	:	2028157
+Kaskazini-Pemba 	:	1	:	185326
+Kaskazini-Unguja 	:	1	:	136639
+Kigoma 	:	1	:	1674047
+Kilimanjaro 	:	1	:	1376702
+Kusini Pemba 	:	1	:	175471
+Kusini Unguja 	:	1	:	94244
+Lindi 	:	1	:	787624
+Manyara 	:	1	:	1037605
+Mara 	:	1	:	1363397
+Mbeya 	:	1	:	2063328
+Mjini-Magharibi	:	1	:	390074
+Morogoro 	:	1	:	1753362
+Mtwara 	:	1	:	1124481
+Mwanza 	:	1	:	2929644
+Pwani 	:	1	:	885017
+Rukwa 	:	1	:	1136354
+Ruvuma 	:	1	:	1113715
+Shinyanga 	:	1	:	2796630
+Singida 	:	1	:	1086748
+Tabora 	:	1	:	1710465
+Tanga 	:	1	:	1636280
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_AREA.txt
new file mode 100644
index 0000000..31d355b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_AREA.txt
@@ -0,0 +1,28 @@
+Tanzania United Republic	:	0	:	945087
+L. Victoria : 1 : 68800
+Arusha   	:	1	:	36486
+Dar-es-Salaam 	:	1	:	1393
+Dodoma 	:	1	:	41311
+Iringa 	:	1	:	56864
+Kagera 	:	1	:	28388
+Kaskazini-Pemba 	:	1	:	574
+Kaskazini-Unguja 	:	1	:	470
+Kigoma 	:	1	:	37037
+Kilimanjaro 	:	1	:	13309
+Kusini Pemba 	:	1	:	332
+Kusini Unguja 	:	1	:	854
+Lindi 	:	1	:	66046
+Manyara 	:	1	:	45820
+Mara 	:	1	:	19566
+Mbeya 	:	1	:	60350
+Mjini-Magharibi	:	1	:	230
+Morogoro 	:	1	:	70799
+Mtwara 	:	1	:	16707
+Mwanza 	:	1	:	19592
+Pwani 	:	1	:	32407
+Rukwa 	:	1	:	68635
+Ruvuma 	:	1	:	63498
+Shinyanga 	:	1	:	50781
+Singida 	:	1	:	49341
+Tabora 	:	1	:	76151
+Tanga 	:	1	:	26808
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_POPULATION.txt
new file mode 100644
index 0000000..0e98a2c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TANZANIA_POPULATION.txt
@@ -0,0 +1,28 @@
+Tanzania United Republic	:	0	:	37445392
+L. Victoria : 1 : 0
+Arusha   	:	1	:	1288088
+Dar-es-Salaam 	:	1	:	2487288
+Dodoma 	:	1	:	1692025
+Iringa 	:	1	:	1490892
+Kagera 	:	1	:	2028157
+Kaskazini-Pemba 	:	1	:	185326
+Kaskazini-Unguja 	:	1	:	136639
+Kigoma 	:	1	:	1674047
+Kilimanjaro 	:	1	:	1376702
+Kusini Pemba 	:	1	:	175471
+Kusini Unguja 	:	1	:	94244
+Lindi 	:	1	:	787624
+Manyara 	:	1	:	1037605
+Mara 	:	1	:	1363397
+Mbeya 	:	1	:	2063328
+Mjini-Magharibi	:	1	:	390074
+Morogoro 	:	1	:	1753362
+Mtwara 	:	1	:	1124481
+Mwanza 	:	1	:	2929644
+Pwani 	:	1	:	885017
+Rukwa 	:	1	:	1136354
+Ruvuma 	:	1	:	1113715
+Shinyanga 	:	1	:	2796630
+Singida 	:	1	:	1086748
+Tabora 	:	1	:	1710465
+Tanga 	:	1	:	1636280
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_AREA.txt
new file mode 100644
index 0000000..83de5ae
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_AREA.txt
@@ -0,0 +1,86 @@
+Thailand	:	0	:	514000
+Bangkok	:	1	:	7761.60
+Krung Thep Manakhon [Central]	:	1	:	1568.70
+Nakhon Pathom 	:	1	:	2168.30
+Nonthaburi 	:	1	:	622.3
+Pathum Thani 	:	1	:	1525.90
+Samut Prakan 	:	1	:	1004.10
+Samut Sakhon 	:	1	:	872.3
+Eastern	:	1	:	36502.50
+Chachoengsao 	:	1	:	5351.00
+Chanthaburi 	:	1	:	6338.00
+Chon Buri 	:	1	:	4363.00
+Nakhon Nayok 	:	1	:	2122.00
+Prachin Buri 	:	1	:	4762.40
+Rayong 	:	1	:	3552.00
+Sa Kaeo 	:	1	:	7195.10
+Trat 	:	1	:	2819.00
+Northeastern	:	1	:	168855.30
+Amnat Charoen 	:	1	:	3161.20
+Buri Ram 	:	1	:	10322.90
+Chaiyaphum 	:	1	:	12778.30
+Kalasin 	:	1	:	6946.70
+Khon Kaen 	:	1	:	10886.00
+Loei 	:	1	:	11424.60
+Maha Sarakham 	:	1	:	5291.70
+Mukdahan 	:	1	:	4339.80
+Nakhon Phanom 	:	1	:	5512.70
+Nakhon Ratchasima 	:	1	:	20494.00
+Nong Bua Lam Phu 	:	1	:	3859.00
+Nong Khai 	:	1	:	7332.30
+Roi Et 	:	1	:	8299.40
+Sakon Nakhon 	:	1	:	9605.80
+Si Sa Ket 	:	1	:	8840.00
+Surin 	:	1	:	8124.10
+Ubon Ratchathani 	:	1	:	15744.80
+Udon Thani 	:	1	:	11730.30
+Yasothon 	:	1	:	4161.70
+Northern	:	1	:	169644.30
+Chiang Mai 	:	1	:	20107.00
+Chiang Rai 	:	1	:	11678.40
+Kamphaeng Phet 	:	1	:	8607.50
+Lampang 	:	1	:	12534.00
+Lamphun 	:	1	:	4505.90
+Mae Hong Son 	:	1	:	12681.30
+Nakhon Sawan 	:	1	:	9597.70
+Nan 	:	1	:	11472.10
+Phayao 	:	1	:	6335.10
+Phetchabun 	:	1	:	12668.40
+Phichit 	:	1	:	4531.00
+Phitsanulok 	:	1	:	10815.80
+Phrae 	:	1	:	6538.60
+Sukhothai 	:	1	:	6596.10
+Tak 	:	1	:	16406.60
+Uthai Thani 	:	1	:	6730.20
+Uttaradit 	:	1	:	7838.60
+Southern	:	1	:	70715.20
+Chumphon 	:	1	:	6009.00
+Krabi 	:	1	:	4708.50
+Nakhon Si Thammarat 	:	1	:	9942.50
+Narathiwat 	:	1	:	4475.40
+Pattani 	:	1	:	1940.40
+Phangnga 	:	1	:	4170.90
+Phatthalung 	:	1	:	3424.50
+Phuket 	:	1	:	543
+Ranong 	:	1	:	3298.00
+Satun 	:	1	:	2479.00
+Songkhla 	:	1	:	7393.90
+Surat Thani 	:	1	:	12891.50
+Trang 	:	1	:	4917.50
+Yala 	:	1	:	4521.10
+Sub Central	:	1	:	16593.50
+Ang Thong 	:	1	:	968.4
+Chai Nat 	:	1	:	2469.70
+Lop Buri 	:	1	:	6199.80
+Phra Nakhon Si Ayutthaya 	:	1	:	2556.60
+Saraburi 	:	1	:	3576.50
+Sing Buri 	:	1	:	822.5
+Western Region 	:	1	:	43047.10
+Kanchanaburi 	:	1	:	19483.20
+Phetchaburi 	:	1	:	6225.10
+Prachuap Khiri Khan 	:	1	:	6367.60
+Ratchaburi 	:	1	:	5196.50
+Samut Songkhram 	:	1	:	416.7
+Suphan Buri 	:	1	:	5358.00
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_POPULATION.txt
new file mode 100644
index 0000000..97ced2d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/THAILAND_POPULATION.txt
@@ -0,0 +1,84 @@
+Thailand	:	0	:	64631595
+Bangkok	:	1	:	9668854
+Krung Thep Manakhon [Central]	:	1	:	5782159
+Nakhon Pathom 	:	1	:	801956
+Nonthaburi 	:	1	:	905197
+Pathum Thani 	:	1	:	708909
+Samut Prakan 	:	1	:	1027719
+Samut Sakhon 	:	1	:	442914
+Eastern	:	1	:	4300513
+Chachoengsao 	:	1	:	649758
+Chanthaburi 	:	1	:	506011
+Chon Buri 	:	1	:	1129886
+Nakhon Nayok 	:	1	:	251064
+Prachin Buri 	:	1	:	452822
+Rayong 	:	1	:	546570
+Sa Kaeo 	:	1	:	539107
+Trat 	:	1	:	225295
+Northeastern	:	1	:	21609185
+Amnat Charoen 	:	1	:	370360
+Buri Ram 	:	1	:	1545779
+Chaiyaphum 	:	1	:	1136508
+Kalasin 	:	1	:	990212
+Khon Kaen 	:	1	:	1767643
+Loei 	:	1	:	635587
+Maha Sarakham 	:	1	:	942909
+Mukdahan 	:	1	:	338276
+Nakhon Phanom 	:	1	:	721540
+Nakhon Ratchasima 	:	1	:	2581244
+Nong Bua Lam Phu 	:	1	:	498513
+Nong Khai 	:	1	:	909543
+Roi Et 	:	1	:	1322864
+Sakon Nakhon 	:	1	:	1107752
+Si Sa Ket 	:	1	:	1458969
+Surin 	:	1	:	1399377
+Ubon Ratchathani 	:	1	:	1792774
+Udon Thani 	:	1	:	1535471
+Yasothon 	:	1	:	553864
+Northern	:	1	:	12152502
+Chiang Mai 	:	1	:	1595855
+Chiang Rai 	:	1	:	1274214
+Kamphaeng Phet 	:	1	:	768130
+Lampang 	:	1	:	800775
+Lamphun 	:	1	:	407202
+Mae Hong Son 	:	1	:	240014
+Nakhon Sawan 	:	1	:	1130841
+Nan 	:	1	:	487742
+Phayao 	:	1	:	508554
+Phetchabun 	:	1	:	1040786
+Phichit 	:	1	:	591953
+Phitsanulok 	:	1	:	867685
+Phrae 	:	1	:	485121
+Sukhothai 	:	1	:	625099
+Tak 	:	1	:	507371
+Uthai Thani 	:	1	:	336176
+Uttaradit 	:	1	:	484984
+Southern	:	1	:	8415908
+Chumphon 	:	1	:	473818
+Krabi 	:	1	:	377954
+Nakhon Si Thammarat 	:	1	:	1533894
+Narathiwat 	:	1	:	699951
+Pattani 	:	1	:	627955
+Phangnga 	:	1	:	239401
+Phatthalung 	:	1	:	504454
+Phuket 	:	1	:	270438
+Ranong 	:	1	:	163160
+Satun 	:	1	:	270802
+Songkhla 	:	1	:	1271067
+Surat Thani 	:	1	:	920283
+Trang 	:	1	:	603072
+Yala 	:	1	:	459659
+Sub Central	:	1	:	3002544
+Ang Thong 	:	1	:	290423
+Chai Nat 	:	1	:	350547
+Lop Buri 	:	1	:	767985
+Phra Nakhon Si Ayutthaya 	:	1	:	748243
+Saraburi 	:	1	:	621994
+Sing Buri 	:	1	:	223352
+Western Region 	:	1	:	3650366
+Kanchanaburi 	:	1	:	801836
+Phetchaburi 	:	1	:	461339
+Prachuap Khiri Khan 	:	1	:	488477
+Ratchaburi 	:	1	:	830275
+Samut Songkhram 	:	1	:	205135
+Suphan Buri 	:	1	:	863304
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_AREA.txt
new file mode 100644
index 0000000..89ac62b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_AREA.txt
@@ -0,0 +1,36 @@
+Togo	:	0	:	56785
+Centre	:	1	:	13317
+Blitta 	:	2	:	2973
+Sotouboua 	:	2	:	4487
+Tchamba 	:	2	:	3149
+Tchaoudjo 	:	2	:	2708
+Kara	:	1	:	11738
+Assoli 	:	2	:	938
+Bassar 	:	2	:	3620
+Binah 	:	2	:	480
+Dankpen 	:	2	:	2690
+Doufelgou 	:	2	:	1275
+Keran 	:	2	:	1660
+Kozah 	:	2	:	1075
+Maritime	:	1	:	6100
+Ave 	:	2	:	1146
+Golfe 	:	2	:	280
+Lacs 	:	2	:	706
+Vo 	:	2	:	714
+Yoto 	:	2	:	1200
+Zio 	:	2	:	2054
+Plateaux	:	1	:	16975
+Agou 	:	2	:	1026
+Amou 	:	2	:	2003
+Danyi 	:	2	:	387
+Est-Mono 	:	2	:	2474
+Haho 	:	2	:	3034
+Kloto 	:	2	:	1364
+Moyen-Mono 	:	2	:	607
+Ogou 	:	2	:	3609
+Wawa 	:	2	:	2471
+Savanes	:	1	:	8470
+Kpendjal 	:	2	:	1794
+Oti 	:	2	:	4313
+Tandjoare 	:	2	:	848
+Tone 	:	2	:	1515
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_POPULATION.txt
new file mode 100644
index 0000000..cd5412f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TOGO_POPULATION.txt
@@ -0,0 +1,36 @@
+Togo	:	0	:	5548702
+Centre1	:	1	:	510446
+Blitta 	:	2	:	111997
+Sotouboua 	:	2	:	141073
+Tchamba 	:	2	:	83997
+Tchaoudjo 	:	2	:	173379
+Kara	:	1	:	689210
+Assoli 	:	2	:	53845
+Bassar 	:	2	:	108766
+Binah 	:	2	:	67844
+Dankpen 	:	2	:	77536
+Doufelgou 	:	2	:	87228
+Keran 	:	2	:	73229
+Kozah 	:	2	:	220763
+Maritime	:	1	:	2196857
+Ave 	:	2	:	91536
+Golfe 	:	2	:	1224425
+Lacs 	:	2	:	234762
+Vo 	:	2	:	225070
+Yoto 	:	2	:	159380
+Zio 	:	2	:	261684
+Plateaux	:	1	:	1201810
+Agou 	:	2	:	88305
+Amou 	:	2	:	100151
+Danyi 	:	2	:	43076
+Est-Mono 	:	2	:	79690
+Haho 	:	2	:	194917
+Kloto 	:	2	:	192763
+Moyen-Mono 	:	2	:	75382
+Ogou 	:	2	:	264915
+Wawa 	:	2	:	162610
+Savanes	:	1	:	628904
+Kpendjal 	:	2	:	120612
+Oti 	:	2	:	138919
+Tandjoare 	:	2	:	92613
+Tone 	:	2	:	276761
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_AREA.txt
new file mode 100644
index 0000000..16a9667
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_AREA.txt
@@ -0,0 +1,33 @@
+Tunisia	:	0	:	163610
+Region 1 : 1 : 2665
+Region 2 : 1 : 9241
+Region 3 : 1 : 13154
+Region 4 : 1 : 21772
+Region 5 : 1 : 14151
+Region 6 : 1 : 35793
+Region 7 : 1 : 54652
+Ariana 	:	1	:	1558
+Béja 	:	1	:	3558
+Ben Arous 	:	1	:	761
+Bizerte 	:	1	:	3685
+Gabès 	:	1	:	7175
+Gafsa 	:	1	:	8990
+Jendouba 	:	1	:	3102
+Kairouan 	:	1	:	6712
+Kasserine 	:	1	:	8066
+Kébili 	:	1	:	22084
+Le Kef 	:	1	:	4965
+Mahdia 	:	1	:	2966
+Manouba 	:	1	:	0
+Médenine 	:	1	:	8588
+Monastir 	:	1	:	1019
+Nabeul 	:	1	:	2788
+Sfax 	:	1	:	7545
+Sidi Bouzid 	:	1	:	6994
+Siliana 	:	1	:	4631
+Sousse 	:	1	:	2621
+Tataouine 	:	1	:	38889
+Tozeur 	:	1	:	4719
+Tunis 	:	1	:	346
+Zaghouan 	:	1	:	2768
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_POPULATION.txt
new file mode 100644
index 0000000..6517c96
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TUNISIA_POPULATION.txt
@@ -0,0 +1,32 @@
+Tunisia	:	0	:	10175014
+Region 1 : 1 : 1943600
+Region 2 : 1 : 1397800
+Region 3 : 1 : 795600
+Region 4 : 1 : 1361200
+Region 5 : 1 : 2276300
+Region 6 : 1 : 568800
+Region 7 : 1 : 926900
+Ariana  	:	1	:	436600
+Béja 	:	1	:	303700
+Ben Arous 	:	1	:	521000
+Bizerte 	:	1	:	529300
+Gabès 	:	1	:	345900
+Gafsa 	:	1	:	325900
+Jendouba 	:	1	:	418000
+Kairouan 	:	1	:	547700
+Kasserine 	:	1	:	415400
+Kébili 	:	1	:	144400
+Le Kef 	:	1	:	258200
+Mahdia 	:	1	:	382300
+Manouba 	:	1	:	342000
+Médenine 	:	1	:	437000
+Monastir 	:	1	:	466700
+Nabeul 	:	1	:	705200
+Sfax 	:	1	:	869600
+Sidi Bouzid 	:	1	:	398100
+Siliana 	:	1	:	233700
+Sousse 	:	1	:	557700
+Tataouine 	:	1	:	144000
+Tozeur 	:	1	:	98500
+Tunis 	:	1	:	986000
+Zaghouan 	:	1	:	163300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_AREA.txt
new file mode 100644
index 0000000..3f51d8b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_AREA.txt
@@ -0,0 +1,90 @@
+Turkey	:	0	:	780580
+Marmara Bölgesi  	:	1	:	73027.57
+Balikesir 	:	1	:	14472.73
+Bilecik 	:	1	:	4306.77
+Bursa 	:	1	:	10886.38
+Canakkale 	:	1	:	9950.43
+Edirne 	:	1	:	6097.91
+Istanbul 	:	1	:	5315.33
+Kirklareli 	:	1	:	6299.78
+Izmit [Kocaeli]	:	1	:	3625.29
+Sakarya 	:	1	:	4880.19
+Tekirdag	:	1	:	6342.30
+Yalova 	:	1	:	850.46
+Ege Bölgesi 	:	1	:	89997.23
+Afyon 	:	1	:	14718.63
+Aydin 	:	1	:	7904.43
+Denizli 	:	1	:	11804.19
+Izmir 	:	1	:	12015.61
+Kutahya 	:	1	:	12013.57
+Manisa 	:	1	:	13228.50
+Mugla 	:	1	:	12949.21
+Usak 	:	1	:	5363.09
+Akdeniz Bölgesi 	:	1	:	89838.49
+Adana 	:	1	:	14045.56
+Antalya 	:	1	:	20790.56
+Burdur 	:	1	:	7134.95
+Antakya (Antiochia) 	:	1	:	5831.36
+Mersin [Icel]	:	1	:	15512.25
+Isparta 	:	1	:	8871.08
+K. Maras 	:	1	:	14456.74
+Osmaniye 	:	1	:	3195.99
+I.ç Anadolu Bölgesi 	:	1	:	188051.56
+Aksaray 	:	1	:	7965.51
+Ankara 	:	1	:	25401.94
+Cankiri 	:	1	:	7491.89
+Eskisehir 	:	1	:	13902.03
+Karaman 	:	1	:	8868.90
+Kayseri 	:	1	:	17109.33
+Kinkkale 	:	1	:	4569.76
+Kirsehir 	:	1	:	6530.32
+Konya 	:	1	:	40813.52
+Nevsehir 	:	1	:	5391.64
+Nigde 	:	1	:	7365.29
+Sivas 	:	1	:	28567.34
+Yozgat 	:	1	:	14074.09
+Karadeniz Bölgesi 	:	1	:	116239.88
+Amasya 	:	1	:	5703.78
+Artvin 	:	1	:	7367.10
+Bart?n 	:	1	:	2080.36
+Bayburt 	:	1	:	3739.08
+Bolu 	:	1	:	8323.39
+Corum 	:	1	:	12796.21
+Düzce 	:	1	:	2592.95
+Giresun 	:	1	:	6831.58
+Gumushane 	:	1	:	6437.01
+Karabük 	:	1	:	4108.80
+Kastamonu 	:	1	:	13157.98
+Ordu 	:	1	:	5952.49
+Rize 	:	1	:	3921.98
+Samsun 	:	1	:	9364.10
+Sinop 	:	1	:	5816.55
+Tokat 	:	1	:	10072.62
+Trabzon 	:	1	:	4664.04
+Zinguldak 	:	1	:	3309.86
+Dog(u Anadolu Bölgesi 	:	1	:	149898.57
+Agri	:	1	:	11498.67
+Ardahan 	:	1	:	4967.63
+Bingol 	:	1	:	8253.51
+Bitlis 	:	1	:	7094.50
+Elazig	:	1	:	9281.45
+Erzincan 	:	1	:	11727.55
+Erzurum 	:	1	:	25330.90
+Hakkari 	:	1	:	7178.88
+Ig(d?r 	:	1	:	3587.81
+Kars 	:	1	:	10139.09
+Malatya 	:	1	:	12102.70
+Mus 	:	1	:	8067.16
+Tunceli 	:	1	:	7685.66
+Van 	:	1	:	22983.06
+Güneydog(u Anadolu Bölgesi 	:	1	:	76509.08
+Adiyaman 	:	1	:	7606.16
+Batman 	:	1	:	4659.21
+Diyarbakir 	:	1	:	15204.00
+Gaziantep 	:	1	:	6844.84
+Kilis 	:	1	:	1427.76
+Mardin 	:	1	:	8806.04
+Sanliurfa 	:	1	:	19336.21
+Siirt 	:	1	:	5473.29
+Sirnak 	:	1	:	7151.57
+Hatay  : 1 : 5545
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_POPULATION.txt
new file mode 100644
index 0000000..ca3b85f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKEY_POPULATION.txt
@@ -0,0 +1,90 @@
+Turkey	:	0	:	70413958
+Marmara Bölgesi  	:	1	:	19147000
+Balikesir 	:	1	:	1097000
+Bilecik 	:	1	:	198000
+Bursa 	:	1	:	2362000
+Canakkale 	:	1	:	467000
+Edirne 	:	1	:	386000
+Istanbul 	:	1	:	11332000
+Kirklareli 	:	1	:	327000
+Izmit [Kocaeli]	:	1	:	1332000
+Sakarya 	:	1	:	771000
+Tekirdag	:	1	:	693000
+Yalova 	:	1	:	182000
+Ege Bölgesi 	:	1	:	9407000
+Afyon 	:	1	:	826000
+Aydin 	:	1	:	990000
+Denizli 	:	1	:	877000
+Izmir 	:	1	:	3649000
+Kutahya 	:	1	:	680000
+Manisa 	:	1	:	1276000
+Mugla 	:	1	:	780000
+Usak 	:	1	:	329000
+Akdeniz Bölgesi 	:	1	:	9384000
+Adana 	:	1	:	1960000
+Antalya 	:	1	:	2007000
+Burdur 	:	1	:	248000
+Antakya (Antiochia) 	:	1	:	1293000
+Mersin [Icel] 	:	1	:	1819000
+Isparta 	:	1	:	542000
+K. Maras 	:	1	:	1029000
+Osmaniye 	:	1	:	486000
+I.ç Anadolu Bölgesi 	:	1	:	12189000
+Aksaray 	:	1	:	420000
+Ankara 	:	1	:	4319000
+Cankiri 	:	1	:	273000
+Eskisehir 	:	1	:	718000
+Karaman 	:	1	:	251000
+Kayseri 	:	1	:	1090000
+Kinkkale 	:	1	:	389000
+Kirsehir 	:	1	:	242000
+Konya 	:	1	:	2373000
+Nevsehir 	:	1	:	311000
+Nigde 	:	1	:	363000
+Sivas 	:	1	:	720000
+Yozgat 	:	1	:	720000
+Karadeniz Bölgesi 	:	1	:	8304000
+Amasya 	:	1	:	355000
+Artvin 	:	1	:	172000
+Bart?n 	:	1	:	164000
+Bayburt 	:	1	:	88000
+Bolu 	:	1	:	265000
+Corum 	:	1	:	568000
+Düzce 	:	1	:	327000
+Giresun 	:	1	:	519000
+Gumushane 	:	1	:	191000
+Karabük 	:	1	:	205000
+Kastamonu 	:	1	:	333000
+Ordu 	:	1	:	891000
+Rize 	:	1	:	362000
+Samsun 	:	1	:	1193000
+Sinop 	:	1	:	193000
+Tokat 	:	1	:	862000
+Trabzon 	:	1	:	1046000
+Zinguldak 	:	1	:	570000
+Dog(u Anadolu Bölgesi 	:	1	:	6403000
+Agri	:	1	:	564000
+Ardahan 	:	1	:	122000
+Bingol 	:	1	:	247000
+Bitlis 	:	1	:	409000
+Elazig	:	1	:	591000
+Erzincan 	:	1	:	315000
+Erzurum 	:	1	:	956000
+Hakkari 	:	1	:	266000
+Ig(d?r 	:	1	:	178000
+Kars 	:	1	:	294000
+Malatya 	:	1	:	911000
+Mus 	:	1	:	483000
+Tunceli 	:	1	:	79000
+Van 	:	1	:	988000
+Güneydog(u Anadolu Bölgesi 	:	1	:	7231000
+Adiyaman 	:	1	:	668000
+Batman 	:	1	:	507000
+Diyarbakir 	:	1	:	1471000
+Gaziantep 	:	1	:	1402000
+Kilis 	:	1	:	101000
+Mardin 	:	1	:	767000
+Sanliurfa 	:	1	:	1654000
+Siirt 	:	1	:	266000
+Sirnak 	:	1	:	395000
+Hatay  : 1 : 1253726
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_AREA.txt
new file mode 100644
index 0000000..fa50f9c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_AREA.txt
@@ -0,0 +1,10 @@
+Turkmenistan	:	0	:	488100
+Annau  	:	1	:	97428
+Ashgabat 	:	1	:	0
+Balkanabat 	:	1	:	138500
+Dashhowuz 	:	1	:	73600
+Turkmenabat 	:	1	:	93800
+Mary 	:	1	:	86800
+Chardzhou : 1 : 93200
+Tashauz : 1 : 728000 
+Turkmenistan Territories : 1 :  138000
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_POPULATION.txt
new file mode 100644
index 0000000..584d13e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/TURKMENISTAN_POPULATION.txt
@@ -0,0 +1,10 @@
+Turkmenistan	:	0	:	5042920
+Annau  	:	1	:	779400
+Ashgabat 	:	1	:	712000
+Balkanabat 	:	1	:	477600
+Dashhowuz 	:	1	:	1183100
+Turkmenabat 	:	1	:	1147000
+Mary 	:	1	:	1271200
+Chardzhou : 1 : 203000
+Tashauz : 1 : 165400 
+Turkmenistan Territories : 1 :  53280
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_AREA.txt
new file mode 100644
index 0000000..d1a4390
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_AREA.txt
@@ -0,0 +1,62 @@
+Uganda	:	0	:	236040
+Lake Victoria : 1 : 68800
+Central  	:	1	:	61403.20
+Kalangala 	:	1	:	9068.30
+Kampala 	:	1	:	197
+Kayunga 	:	1	:	1702.40
+Kiboga 	:	1	:	4045.50
+Luwero 	:	1	:	5693.90
+Masaka 	:	1	:	4691.70
+Mpigi 	:	1	:	3605.60
+Mubende 	:	1	:	6197.70
+Mukono 	:	1	:	12655.70
+Nakasongola 	:	1	:	3509.90
+Rakai 	:	1	:	4908.70
+Sembabule 	:	1	:	2319.20
+Wakiso 	:	1	:	2807.70
+Eastern 	:	1	:	39478.80
+Bugiri 	:	1	:	5670.90
+Busia 	:	1	:	759.4
+Iganga 	:	1	:	2482.30
+Jinja 	:	1	:	722.7
+Kaberamaido 	:	1	:	1623.90
+Kamuli 	:	1	:	4301.50
+Kapchorwa 	:	1	:	1731.70
+Katakwi 	:	1	:	5014.40
+Kumi 	:	1	:	2848.10
+Mayuge 	:	1	:	4638.50
+Mbale 	:	1	:	1372.80
+Pallisa 	:	1	:	1991.70
+Sironko 	:	1	:	1093.90
+Soroti 	:	1	:	3377.70
+Tororo 	:	1	:	1849.30
+Northern 	:	1	:	85391.70
+Adjumani 	:	1	:	3087.00
+Apac 	:	1	:	6541.20
+Arua 	:	1	:	5476.20
+Gulu 	:	1	:	11715.50
+Kitgum 	:	1	:	9634.50
+Kotido 	:	1	:	13245.10
+Lira 	:	1	:	7200.70
+Moroto 	:	1	:	8517.60
+Moyo 	:	1	:	1890.70
+Nakapiripirit 	:	1	:	5833.80
+Nebbi 	:	1	:	2917.20
+Pader 	:	1	:	6929.20
+Yumbe 	:	1	:	2403.00
+Western 	:	1	:	55276.60
+Bundibugyo 	:	1	:	2261.70
+Bushenyi 	:	1	:	4292.50
+Hoima 	:	1	:	5932.80
+Kabale 	:	1	:	1729.60
+Kabarole 	:	1	:	1824.40
+Kamwenge 	:	1	:	2439.40
+Kanungu 	:	1	:	1292.10
+Kasese 	:	1	:	3389.60
+Kibaale 	:	1	:	4246.00
+Kisoro 	:	1	:	729.6
+Kyenjojo 	:	1	:	4054.40
+Masindi 	:	1	:	9443.00
+Mbarara 	:	1	:	10019.10
+Ntungamo 	:	1	:	2055.50
+Rukungiri 	:	1	:	1566.80
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_POPULATION.txt
new file mode 100644
index 0000000..d1e03cc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UGANDA_POPULATION.txt
@@ -0,0 +1,62 @@
+Uganda	:	0	:	28195754
+Lake Victoria : 1 : 0
+Central  	:	1	:	7205500
+Kalangala 	:	1	:	44300
+Kampala 	:	1	:	1337900
+Kayunga 	:	1	:	312300
+Kiboga 	:	1	:	259400
+Luwero 	:	1	:	508300
+Masaka 	:	1	:	782400
+Mpigi 	:	1	:	429500
+Mubende 	:	1	:	763000
+Mukono 	:	1	:	867300
+Nakasongola 	:	1	:	131400
+Rakai 	:	1	:	493300
+Sembabule 	:	1	:	194400
+Wakiso 	:	1	:	1081800
+Eastern 	:	1	:	6950600
+Bugiri 	:	1	:	487400
+Busia 	:	1	:	245900
+Iganga 	:	1	:	780800
+Jinja 	:	1	:	448700
+Kaberamaido 	:	1	:	135000
+Kamuli 	:	1	:	776800
+Kapchorwa 	:	1	:	217400
+Katakwi 	:	1	:	365900
+Kumi 	:	1	:	434600
+Mayuge 	:	1	:	358400
+Mbale 	:	1	:	783600
+Pallisa 	:	1	:	569000
+Sironko 	:	1	:	313500
+Soroti 	:	1	:	427300
+Tororo 	:	1	:	606300
+Northern 	:	1	:	6091800
+Adjumani 	:	1	:	239300
+Apac 	:	1	:	740100
+Arua 	:	1	:	950600
+Gulu 	:	1	:	503800
+Kitgum 	:	1	:	320000
+Kotido 	:	1	:	774400
+Lira 	:	1	:	832600
+Moroto 	:	1	:	194300
+Moyo 	:	1	:	248200
+Nakapiripirit 	:	1	:	180400
+Nebbi 	:	1	:	464900
+Pader 	:	1	:	327900
+Yumbe 	:	1	:	315100
+Western 	:	1	:	6960000
+Bundibugyo 	:	1	:	244700
+Bushenyi 	:	1	:	759200
+Hoima 	:	1	:	398200
+Kabale 	:	1	:	483400
+Kabarole 	:	1	:	373300
+Kamwenge 	:	1	:	322000
+Kanungu 	:	1	:	216400
+Kasese 	:	1	:	589200
+Kibaale 	:	1	:	478300
+Kisoro 	:	1	:	226900
+Kyenjojo 	:	1	:	420300
+Masindi 	:	1	:	538400
+Mbarara 	:	1	:	1172800
+Ntungamo 	:	1	:	407400
+Rukungiri 	:	1	:	329600
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UKRAINE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UKRAINE_POPULATION.txt
new file mode 100644
index 0000000..6282aaf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UKRAINE_POPULATION.txt
@@ -0,0 +1,23 @@
+:1:1571185:74
+:1:1449141:46
+:1:963017:119
+:1:3998727:126
+:1:5475559:206
+:1:1467602:106
+:1:3278772:104
+:1:1561955:77
+:1:1271716:52
+:1:2564970:100
+:1:4688941:164
+:1:0:0
+:1:2824441:130
+:1:2705474:83
+:1:1801940:64
+:1:1203003:59
+:1:1467602:62
+:1:1201977:86
+:1:1975262:74
+:1:1090189:55
+:1:0:0
+:1:2145508:79
+:1:1576313:53
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_AREA.txt
new file mode 100644
index 0000000..6eb50dd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_AREA.txt
@@ -0,0 +1,36 @@
+ HIGHLANDS : 1 : 31703.0
+ GRAMPIAN : 1 : 8752.0
+ BORD-CENTR-FIFE-LOTHIAN-TAY : 1 : 18124.0
+ DUMFRIES-GALLO : 1 : 20204.0
+ NORTHUMBERLAND : 1 : 5572.0
+ NORTHERN IRELAND : 1 : 14120.0
+ CUMBRIA : 1 : 6810.0
+ CLEVELAND : 1 : 3019.0
+ NORTH YORKSHIRE : 1 : 8309.0
+ UNITED KINGDOM : 1 : 244111.0
+ LANCASHIRE : 1 : 3063.0
+ HUMBERSIDE : 1 : 3512.0
+ WEST YORKSHIRE : 1 : 2039.0
+ MERSEYSIDE : 1 : 652.0
+ GREATER MANCHESTER : 1 : 1287.0
+ SOUTH YORKSHIRE : 1 : 1560.0
+ LINCOLNSHIRE : 1 : 5915.0
+ DERBYSHIRE : 1 : 4795.0
+ CHESHIRE : 1 : 2328.0
+ CLWYD : 1 : 17141.0
+ SHROPSHIRE : 1 : 6206.0
+ EAST ANGLIA : 1 : 12573.0
+ LEICESTERSHIRE : 1 : 4920.0
+ HEREFORD : 1 : 5907.0
+ WEST MIDLANDS (COUNTY) : 1 : 899.0
+ BEDFORDSHIRE : 1 : 2869.0
+ BERKS : 1 : 5750.0
+ AVON : 1 : 7470.0
+ ESSEX : 1 : 3672.0
+ GWENT : 1 : 3627.0
+ GREATER LONDON : 1 : 1579.0
+ KENT : 1 : 3731.0
+ SURREY : 1 : 5463.0
+ HAMPSHIRE : 1 : 4158.0
+ DORSET : 1 : 6105.0
+ CORNWALL : 1 : 10275.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_POPULATION.txt
new file mode 100644
index 0000000..bf7b14d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITED KINGDOM_POPULATION.txt
@@ -0,0 +1,36 @@
+ HIGHLANDS : 1 : 275400
+ GRAMPIAN : 1 : 504800
+ BORD-CENTR-FIFE-LOTHIAN-TAY : 1 : 1859700
+ DUMFRIES-GALLO : 1 : 2456600
+ NORTHUMBERLAND : 1 : 1431700
+ NORTHERN IRELAND : 1 : 1586300
+ CUMBRIA : 1 : 491900
+ CLEVELAND : 1 : 1150600
+ NORTH YORKSHIRE : 1 : 724400
+ UNITED KINGDOM : 1 : 57323500
+ LANCASHIRE : 1 : 1393000
+ HUMBERSIDE : 1 : 857700
+ WEST YORKSHIRE : 1 : 2068400
+ MERSEYSIDE : 1 : 1445800
+ GREATER MANCHESTER : 1 : 2586500
+ SOUTH YORKSHIRE : 1 : 1295700
+ LINCOLNSHIRE : 1 : 589000
+ DERBYSHIRE : 1 : 1947000
+ CHESHIRE : 1 : 958800
+ CLWYD : 1 : 402927
+ SHROPSHIRE : 1 : 1444100
+ EAST ANGLIA : 1 : 2051800
+ LEICESTERSHIRE : 1 : 1472900
+ HEREFORD : 1 : 1158600
+ WEST MIDLANDS (COUNTY) : 1 : 2615000
+ BEDFORDSHIRE : 1 : 397700
+ BERKS : 1 : 1971900
+ AVON : 1 : 2043100
+ ESSEX : 1 : 1532800
+ GWENT : 1 : 1754500
+ GREATER LONDON : 1 : 6775400
+ KENT : 1 : 1524600
+ SURREY : 1 : 2418400
+ HAMPSHIRE : 1 : 1676600
+ DORSET : 1 : 1120400
+ CORNWALL : 1 : 1495900
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_AREA.txt
new file mode 100644
index 0000000..b2fc7c1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_AREA.txt
@@ -0,0 +1,9 @@
+United Arab Emirat	:	0	:	82880
+Ajman	:	1	:	259
+Abu Dhabi	:	1	:	67340
+Al Fujayrah	:	1	:	1164
+Shariqah	:	1	:	2590
+Dubai	:	1	:	3885
+RAS Al Khaymah	:	1	:	1684
+UMM Al Qaywayn	:	1	:	777
+Neutral Zone : 1 : 300
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_POPULATION.txt
new file mode 100644
index 0000000..5208a9f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UNITEDARABEMIRATES_POPULATION.txt
@@ -0,0 +1,9 @@
+United Arab Emirat	:	0	:	2602713
+Ajman	:	1	:	189849
+Abu Dhabi	:	1	:	1292119
+Al Fujayrah	:	1	:	118617
+Shariqah	:	1	:	724859
+Dubai	:	1	:	1200309
+RAS Al Khaymah	:	1	:	197571
+UMM Al Qaywayn	:	1	:	45756
+Neutral Zone : 1 : 0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_AREA.txt
new file mode 100644
index 0000000..6799f99
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_AREA.txt
@@ -0,0 +1,23 @@
+Uruguay	:	0	:	176220
+Artigas  	:	1	:	11928
+Canelones 	:	1	:	4536
+Cerro Largo 	:	1	:	13648
+Colonia 	:	1	:	6106
+Durazno 	:	1	:	11643
+Flores 	:	1	:	5144
+Florida 	:	1	:	10417
+Lavalleja 	:	1	:	10016
+Maldonado 	:	1	:	4793
+Montevideo 	:	1	:	530
+Paysandu 	:	1	:	13922
+Rio Negro 	:	1	:	9282
+Rivera 	:	1	:	9370
+Rocha 	:	1	:	10551
+Salto 	:	1	:	14163
+San Jose 	:	1	:	4992
+Soriano 	:	1	:	9008
+Tacuarembo 	:	1	:	15438
+Treinta y Tres 	:	1	:	9529
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_POPULATION.txt
new file mode 100644
index 0000000..af62b87
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/URUGUAY_POPULATION.txt
@@ -0,0 +1,20 @@
+Uruguay	:	0	:	3431932
+Artigas  	:	1	:	79367
+Canelones 	:	1	:	498344
+Cerro Largo 	:	1	:	88432
+Colonia 	:	1	:	120948
+Durazno 	:	1	:	60172
+Flores 	:	1	:	25528
+Florida 	:	1	:	69472
+Lavalleja 	:	1	:	61852
+Maldonado 	:	1	:	144107
+Montevideo 	:	1	:	1347888
+Paysandu 	:	1	:	115222
+Rio Negro 	:	1	:	55124
+Rivera 	:	1	:	107513
+Rocha 	:	1	:	70869
+Salto 	:	1	:	125662
+San Jose 	:	1	:	105685
+Soriano 	:	1	:	86271
+Tacuarembo 	:	1	:	93276
+Treinta y Tres 	:	1	:	49991
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_AREA.txt
new file mode 100644
index 0000000..03d15ac
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_AREA.txt
@@ -0,0 +1,3141 @@
+Autauga 	:	1	:	1565.5255
+Baldwin 	:	1	:	5249.7487
+Barbour 	:	1	:	2342.7068
+Bibb 	:	1	:	1621.7544
+Blount 	:	1	:	1685.054
+Bullock 	:	1	:	1621.4954
+Butler 	:	1	:	2014.8128
+Calhoun 	:	1	:	1585.9088
+Chambers 	:	1	:	1562.0549
+Cherokee 	:	1	:	1553.8705
+Chilton 	:	1	:	1814.9684
+Choctaw 	:	1	:	2385.0015
+Clarke 	:	1	:	3244.0009
+Clay 	:	1	:	1569.54
+Cleburne 	:	1	:	1453.0418
+Coffee 	:	1	:	1762.4432
+Colbert 	:	1	:	1615.1499
+Conecuh 	:	1	:	2208.0009
+Coosa 	:	1	:	1725.8724
+Covington 	:	1	:	2703.5974
+Crenshaw 	:	1	:	1582.1792
+Cullman 	:	1	:	1954.9838
+Dale 	:	1	:	1457.3153
+Dallas 	:	1	:	2572.8283
+DeKalb 	:	1	:	2016.7035
+Elmore 	:	1	:	1702.1739
+Escambia 	:	1	:	2468.1405
+Etowah 	:	1	:	1421.2625
+Fayette 	:	1	:	1629.9906
+Franklin 	:	1	:	1674.4609
+Geneva 	:	1	:	1499.351
+Greene 	:	1	:	1709.2187
+Hale 	:	1	:	1700.2573
+Henry 	:	1	:	1471.9747
+Houston 	:	1	:	1506.4735
+Jackson 	:	1	:	2918.3343
+Jefferson 	:	1	:	2910.642
+Lamar 	:	1	:	1568.1673
+Lauderdale 	:	1	:	1861.6402
+Lawrence 	:	1	:	1859.8013
+Lee 	:	1	:	1594.2745
+Limestone 	:	1	:	1572.3372
+Lowndes 	:	1	:	1877.8277
+Macon 	:	1	:	1588.2916
+Madison 	:	1	:	2105.2815
+Marengo 	:	1	:	2545.5815
+Marion 	:	1	:	1925.8463
+Marshall 	:	1	:	1613.9844
+Mobile 	:	1	:	4258.0118
+Monroe 	:	1	:	2679.4327
+Montgomery 	:	1	:	2071.3784
+Morgan 	:	1	:	1551.5654
+Perry 	:	1	:	1875.3672
+Pickens 	:	1	:	2305.2295
+Pike 	:	1	:	1740.739
+Randolph 	:	1	:	1512.8449
+Russell 	:	1	:	1676.7142
+St. Clair 	:	1	:	1692.8499
+Shelby 	:	1	:	2096.6827
+Sumter 	:	1	:	2365.447
+Talladega 	:	1	:	1969.0475
+Tallapoosa 	:	1	:	1984.5357
+Tuscaloosa 	:	1	:	3499.6857
+Walker 	:	1	:	2085.727
+Washington 	:	1	:	2819.3186
+Wilcox 	:	1	:	2350.3214
+Winston 	:	1	:	1636.5174
+Aleutians East 	:	2	:	38880.044
+Aleutians West 	:	2	:	36561.7609
+Anchorage 	:	2	:	5079.2231
+Bethel 	:	2	:	117866.9114
+Bristol Bay 	:	2	:	2299.0912
+Denali 	:	2	:	33086.0327
+Dillingham 	:	2	:	54204.5819
+Fairbanks North Star 	:	2	:	19280.0118
+Haines 	:	2	:	7059.8738
+Juneau 	:	2	:	8430.4759
+Kenai Peninsula 	:	2	:	64114.414
+Ketchikan Gateway 	:	2	:	4542.8082
+Kodiak Island 	:	2	:	31141.3053
+Lake and Peninsula 	:	2	:	80049.0264
+Matanuska-Susitna 	:	2	:	65422.8561
+Nome 	:	2	:	73253.8247
+North Slope 	:	2	:	245435.2376
+Northwest Arctic 	:	2	:	105573.58
+Prince of Wales-Outer Ketchikan 	:	2	:	32909.317
+Sitka 	:	2	:	12461.8627
+Skagway-Hoonah-Angoon 	:	2	:	29465.7307
+Southeast Fairbanks 	:	2	:	64908.4821
+Valdez-Cordova 	:	2	:	104115.7985
+Wade Hampton 	:	2	:	50943.3316
+Wrangell-Petersburg 	:	2	:	23364.9339
+Yakutat 	:	2	:	24499.5352
+Yukon-Koyukuk 	:	2	:	382912.1009
+Apache 	:	4	:	29055.7078
+Cochise 	:	4	:	16106.6143
+Coconino 	:	4	:	48332.5339
+Gila 	:	4	:	12420.9666
+Graham 	:	4	:	12020.5526
+Greenlee 	:	4	:	4787.4078
+La Paz 	:	4	:	11689.6024
+Maricopa 	:	4	:	23890.8593
+Mohave 	:	4	:	34886.5489
+Navajo 	:	4	:	25795.0791
+Pima 	:	4	:	23799.0697
+Pinal 	:	4	:	13918.8931
+Santa Cruz 	:	4	:	3206.7049
+Yavapai 	:	4	:	21050.9502
+Yuma 	:	4	:	14294.1064
+Arkansas 	:	5	:	2677.5161
+Ashley 	:	5	:	2432.2172
+Baxter 	:	5	:	1519.6566
+Benton 	:	5	:	2279.8216
+Boone 	:	5	:	1558.7138
+Bradley 	:	5	:	1694.8442
+Calhoun 	:	5	:	1638.2786
+Carroll 	:	5	:	1654.5179
+Chicot 	:	5	:	1789.3792
+Clark 	:	5	:	2285.934
+Clay 	:	5	:	1661.2778
+Cleburne 	:	5	:	1533.0469
+Cleveland 	:	5	:	1550.892
+Columbia 	:	5	:	1986.1674
+Conway 	:	5	:	1467.6494
+Craighead 	:	5	:	1846.6182
+Crawford 	:	5	:	1564.878
+Crittenden 	:	5	:	1649.0271
+Cross 	:	5	:	1611.8347
+Dallas 	:	5	:	1730.5344
+Desha 	:	5	:	2122.5568
+Drew 	:	5	:	2164.3335
+Faulkner 	:	5	:	1719.7859
+Franklin 	:	5	:	1604.9971
+Fulton 	:	5	:	1606.6029
+Garland 	:	5	:	1902.5363
+Grant 	:	5	:	1639.4959
+Greene 	:	5	:	1501.2935
+Hempstead 	:	5	:	1920.1224
+Hot Spring 	:	5	:	1611.3944
+Howard 	:	5	:	1541.568
+Independence 	:	5	:	1998.3663
+Izard 	:	5	:	1512.6118
+Jackson 	:	5	:	1661.3555
+Jefferson 	:	5	:	2366.483
+Johnson 	:	5	:	1768.2966
+Lafayette 	:	5	:	1411.7313
+Lawrence 	:	5	:	1534.1606
+Lee 	:	5	:	1604.4273
+Lincoln 	:	5	:	1481.9203
+Little River 	:	5	:	1463.0133
+Logan 	:	5	:	1894.585
+Lonoke 	:	5	:	2078.2937
+Madison 	:	5	:	2167.9854
+Marion 	:	5	:	1658.5065
+Miller 	:	5	:	1651.0732
+Mississippi 	:	5	:	2382.1007
+Monroe 	:	5	:	1609.4519
+Montgomery 	:	5	:	2072.7511
+Nevada 	:	5	:	1607.8202
+Newton 	:	5	:	2132.0362
+Ouachita 	:	5	:	1915.6417
+Perry 	:	5	:	1451.6173
+Phillips 	:	5	:	1883.6811
+Pike 	:	5	:	1589.9492
+Poinsett 	:	5	:	1977.1801
+Polk 	:	5	:	2233.6678
+Pope 	:	5	:	2151.7461
+Prairie 	:	5	:	1750.2184
+Pulaski 	:	5	:	2092.3056
+Randolph 	:	5	:	1699.1436
+St. Francis 	:	5	:	1663.816
+Saline 	:	5	:	1891.8914
+Scott 	:	5	:	2326.0531
+Searcy 	:	5	:	1731.4409
+Sebastian 	:	5	:	1414.2436
+Sevier 	:	5	:	1505.6965
+Sharp 	:	5	:	1570.4465
+Stone 	:	5	:	1578.4237
+Union 	:	5	:	2733.1493
+Van Buren 	:	5	:	1875.9888
+Washington 	:	5	:	2476.0659
+White 	:	5	:	2699.7124
+Woodruff 	:	5	:	1538.5895
+Yell 	:	5	:	2457.4956
+Alameda 	:	6	:	2126.7785
+Alpine 	:	6	:	1924.8621
+Amador 	:	6	:	1566.1471
+Butte 	:	6	:	4343.7149
+Calaveras 	:	6	:	2685.4156
+Colusa 	:	6	:	2994.6098
+Contra Costa 	:	6	:	2077.5685
+Del Norte 	:	6	:	3185.0525
+El Dorado 	:	6	:	4631.179
+Fresno 	:	6	:	15585.1178
+Glenn 	:	6	:	3437.3444
+Humboldt 	:	6	:	10495.2498
+Imperial 	:	6	:	11607.6807
+Inyo 	:	6	:	26487.8782
+Kern 	:	6	:	21138.0778
+Kings 	:	6	:	3603.9591
+Lake 	:	6	:	3443.3532
+Lassen 	:	6	:	12225.7583
+Los Angeles 	:	6	:	12308.5088
+Madera 	:	6	:	5577.0988
+Marin 	:	6	:	2145.038
+Mariposa 	:	6	:	3788.6261
+Mendocino 	:	6	:	10044.3826
+Merced 	:	6	:	5107.1433
+Modoc 	:	6	:	10886.7283
+Mono 	:	6	:	8111.362
+Monterey 	:	6	:	9767.0713
+Napa 	:	6	:	2041.6193
+Nevada 	:	6	:	2523.9291
+Orange 	:	6	:	2455.2682
+Placer 	:	6	:	3892.2002
+Plumas 	:	6	:	6768.9132
+Riverside 	:	6	:	18915.1067
+Sacramento 	:	6	:	2578.2932
+San Benito 	:	6	:	3601.9907
+San Bernardino 	:	6	:	52072.7788
+San Diego 	:	6	:	11721.0968
+San Francisco 	:	6	:	600.6728
+San Joaquin 	:	6	:	3693.9875
+San Luis Obispo 	:	6	:	9364.2486
+San Mateo 	:	6	:	1919.2159
+Santa Barbara 	:	6	:	9813.7172
+Santa Clara 	:	6	:	3377.3859
+Santa Cruz 	:	6	:	1572.5444
+Shasta 	:	6	:	9964.8696
+Sierra 	:	6	:	2491.5023
+Siskiyou 	:	6	:	16439.9214
+Solano 	:	6	:	2348.2753
+Sonoma 	:	6	:	4579.7157
+Stanislaus 	:	6	:	3922.9953
+Sutter 	:	6	:	1576.2222
+Tehama 	:	6	:	7672.2793
+Trinity 	:	6	:	8307.5286
+Tulare 	:	6	:	12533.2431
+Tuolumne 	:	6	:	5890.5406
+Ventura 	:	6	:	5719.238
+Yolo 	:	6	:	2649.2851
+Yuba 	:	6	:	1667.2607
+Adams 	:	8	:	3102.0689
+Alamosa 	:	8	:	1873.9427
+Arapahoe 	:	8	:	2086.0637
+Archuleta 	:	8	:	3510.6932
+Baca 	:	8	:	6622.8631
+Bent 	:	8	:	3991.5008
+Boulder 	:	8	:	1946.0483
+Chaffee 	:	8	:	2628.8759
+Cheyenne 	:	8	:	4613.7483
+Clear Creek 	:	8	:	1026.8314
+Conejos 	:	8	:	3343.3533
+Costilla 	:	8	:	3186.8396
+Crowley 	:	8	:	2072.8547
+Custer 	:	8	:	1916.341
+Delta 	:	8	:	2974.6668
+Denver 	:	8	:	401.2946
+Dolores 	:	8	:	2766.3531
+Douglas 	:	8	:	2182.7225
+Eagle 	:	8	:	4381.762
+Elbert 	:	8	:	4793.8051
+El Paso 	:	8	:	5515.5604
+Fremont 	:	8	:	3972.9305
+Garfield 	:	8	:	7655.4184
+Gilpin 	:	8	:	389.1475
+Grand 	:	8	:	4842.264
+Gunnison 	:	8	:	8442.7525
+Hinsdale 	:	8	:	2908.9326
+Huerfano 	:	8	:	4126.4916
+Jackson 	:	8	:	4198.2605
+Jefferson 	:	8	:	2015.1754
+Kiowa 	:	8	:	4625.1184
+Kit Carson 	:	8	:	5598.4404
+Lake 	:	8	:	994.301
+La Plata 	:	8	:	4402.8187
+Larimer 	:	8	:	6821.6974
+Las Animas 	:	8	:	12368.3378
+Lincoln 	:	8	:	6698.7501
+Logan 	:	8	:	4778.1874
+Mesa 	:	8	:	8653.4749
+Mineral 	:	8	:	2273.243
+Moffat 	:	8	:	12304.9346
+Montezuma 	:	8	:	5283.5223
+Montrose 	:	8	:	5808.2563
+Morgan 	:	8	:	3351.1233
+Otero 	:	8	:	3288.6266
+Ouray 	:	8	:	1404.3239
+Park 	:	8	:	5725.6871
+Phillips 	:	8	:	1781.2466
+Pitkin 	:	8	:	2520.6657
+Prowers 	:	8	:	4258.8665
+Pueblo 	:	8	:	6210.1207
+Rio Blanco 	:	8	:	8347.3369
+Rio Grande 	:	8	:	2362.4426
+Routt 	:	8	:	6133.1718
+Saguache 	:	8	:	8210.9475
+San Juan 	:	8	:	1005.6711
+San Miguel 	:	8	:	3337.1891
+Sedgwick 	:	8	:	1423.464
+Summit 	:	8	:	1603.8575
+Teller 	:	8	:	1447.7064
+Washington 	:	8	:	6537.4708
+Weld 	:	8	:	10415.8404
+Yuma 	:	8	:	6135.969
+Fairfield 	:	9	:	2167.7264
+Hartford 	:	9	:	1943.9763
+Litchfield 	:	9	:	2446.4363
+Middlesex 	:	9	:	1137.1913
+New Haven 	:	9	:	2232.6318
+New London 	:	9	:	1998.5994
+Tolland 	:	9	:	1080.0559
+Windham 	:	9	:	1350.6073
+Kent 	:	10	:	2072.3108
+New Castle 	:	10	:	1278.1909
+Sussex 	:	10	:	3096.7335
+District of Columbia	:	11	:	177.0006
+Alachua 	:	12	:	2510.0208
+Baker 	:	12	:	1525.2251
+Bay 	:	12	:	2676.1693
+Bradford 	:	12	:	777.1036
+Brevard 	:	12	:	4032.5005
+Broward 	:	12	:	3417.8417
+Calhoun 	:	12	:	1487.5406
+Charlotte 	:	12	:	2225.1208
+Citrus 	:	12	:	2002.4585
+Clay 	:	12	:	1667.1571
+Collier 	:	12	:	5969.7687
+Columbia 	:	12	:	2074.6936
+DeSoto 	:	12	:	1656.305
+Dixie 	:	12	:	2236.8794
+Duval 	:	12	:	2378.2416
+Escambia 	:	12	:	2267.7263
+Flagler 	:	12	:	1478.2684
+Franklin 	:	12	:	2687.0732
+Gadsden 	:	12	:	1368.7891
+Gilchrist 	:	12	:	920.6673
+Glades 	:	12	:	2554.8537
+Gulf 	:	12	:	1928.4881
+Hamilton 	:	12	:	1345.0129
+Hardee 	:	12	:	1653.2747
+Hendry 	:	12	:	3081.5561
+Hernando 	:	12	:	1525.7172
+Highlands 	:	12	:	2865.2652
+Hillsborough 	:	12	:	3279.5098
+Holmes 	:	12	:	1265.7589
+Indian River 	:	12	:	1597.8228
+Jackson 	:	12	:	2472.3622
+Jefferson 	:	12	:	1648.9235
+Lafayette 	:	12	:	1419.1128
+Lake 	:	12	:	2995.076
+Lee 	:	12	:	3138.7951
+Leon 	:	12	:	1817.6102
+Levy 	:	12	:	3657.9088
+Liberty 	:	12	:	2183.7844
+Madison 	:	12	:	1853.922
+Manatee 	:	12	:	2312.2225
+Marion 	:	12	:	4307.1959
+Martin 	:	12	:	1949.7261
+Miami-Dade 	:	12	:	6296.9634
+Monroe 	:	12	:	9679.2185
+Nassau 	:	12	:	1879.9774
+Okaloosa 	:	12	:	2802.38
+Okeechobee 	:	12	:	2309.1663
+Orange 	:	12	:	2600.8521
+Osceola 	:	12	:	3901.4465
+Palm Beach 	:	12	:	6180.5947
+Pasco 	:	12	:	2247.9905
+Pinellas 	:	12	:	1573.8653
+Polk 	:	12	:	5205.8741
+Putnam 	:	12	:	2142.3444
+St. Johns 	:	12	:	2127.5037
+St. Lucie 	:	12	:	1782.1272
+Santa Rosa 	:	12	:	3039.5463
+Sarasota 	:	12	:	1878.2162
+Seminole 	:	12	:	893.2133
+Sumter 	:	12	:	1503.0029
+Suwannee 	:	12	:	1792.021
+Taylor 	:	12	:	3190.9059
+Union 	:	12	:	646.7489
+Volusia 	:	12	:	3710.0196
+Wakulla 	:	12	:	1905.5666
+Walton 	:	12	:	3206.4977
+Washington 	:	12	:	1594.8961
+Appling 	:	13	:	1326.3649
+Atkinson 	:	13	:	891.219
+Bacon 	:	13	:	740.5328
+Baker 	:	13	:	904.3503
+Baldwin 	:	13	:	692.825
+Banks 	:	13	:	605.7233
+Barrow 	:	13	:	421.7556
+Bartow 	:	13	:	1217.5849
+Ben Hill 	:	13	:	657.9377
+Berrien 	:	13	:	1185.6502
+Bibb 	:	13	:	660.7867
+Bleckley 	:	13	:	567.5726
+Brantley 	:	13	:	1158.8178
+Brooks 	:	13	:	1289.2243
+Bryan 	:	13	:	1177.1291
+Bulloch 	:	13	:	1784.0956
+Burke 	:	13	:	2162.6241
+Butts 	:	13	:	492.1259
+Calhoun 	:	13	:	734.4463
+Camden 	:	13	:	2026.7268
+Candler 	:	13	:	644.4179
+Carroll 	:	13	:	1304.9197
+Catoosa 	:	13	:	421.2894
+Charlton 	:	13	:	2027.8923
+Chatham 	:	13	:	1637.6052
+Chattahoochee 	:	13	:	650.5303
+Chattooga 	:	13	:	812.0945
+Cherokee 	:	13	:	1124.0341
+Clarke 	:	13	:	314.1152
+Clay 	:	13	:	562.0041
+Clayton 	:	13	:	373.6852
+Clinch 	:	13	:	2134.6003
+Cobb 	:	13	:	892.2809
+Coffee 	:	13	:	1560.7599
+Colquitt 	:	13	:	1441.4645
+Columbia 	:	13	:	797.1502
+Cook 	:	13	:	604.0398
+Coweta 	:	13	:	1155.0882
+Crawford 	:	13	:	845.5055
+Crisp 	:	13	:	728.308
+Dade 	:	13	:	451.0744
+Dawson 	:	13	:	554.0787
+Decatur 	:	13	:	1613.9844
+DeKalb 	:	13	:	701.6569
+Dodge 	:	13	:	1303.2103
+Dooly 	:	13	:	1028.4113
+Dougherty 	:	13	:	866.7176
+Douglas 	:	13	:	518.6734
+Early 	:	13	:	1337.1393
+Echols 	:	13	:	1089.872
+Effingham 	:	13	:	1250.5038
+Elbert 	:	13	:	970.0586
+Emanuel 	:	13	:	1787.9547
+Evans 	:	13	:	484.0192
+Fannin 	:	13	:	1013.8037
+Fayette 	:	13	:	516.0575
+Floyd 	:	13	:	1342.8114
+Forsyth 	:	13	:	640.6883
+Franklin 	:	13	:	689.8983
+Fulton 	:	13	:	1384.6399
+Gilmer 	:	13	:	1118.4397
+Glascock 	:	13	:	374.1255
+Glynn 	:	13	:	1515.5903
+Gordon 	:	13	:	927.2459
+Grady 	:	13	:	1192.2806
+Greene 	:	13	:	1052.1616
+Gwinnett 	:	13	:	1131.1048
+Habersham 	:	13	:	723.128
+Hall 	:	13	:	1111.6021
+Hancock 	:	13	:	1239.9884
+Haralson 	:	13	:	733.3844
+Harris 	:	13	:	1224.8887
+Hart 	:	13	:	664.1278
+Heard 	:	13	:	779.7972
+Henry 	:	13	:	840.4032
+Houston 	:	13	:	983.7597
+Irwin 	:	13	:	939.4707
+Jackson 	:	13	:	888.37
+Jasper 	:	13	:	967.5722
+Jeff Davis 	:	13	:	868.7378
+Jefferson 	:	13	:	1371.5604
+Jenkins 	:	13	:	912.8455
+Johnson 	:	13	:	793.8868
+Jones 	:	13	:	1024.0601
+Lamar 	:	13	:	481.1961
+Lanier 	:	13	:	517.5597
+Laurens 	:	13	:	2119.9409
+Lee 	:	13	:	937.6059
+Liberty 	:	13	:	1560.5268
+Lincoln 	:	13	:	666.3552
+Long 	:	13	:	1045.0391
+Lowndes 	:	13	:	1322.5317
+Lumpkin 	:	13	:	737.8133
+McDuffie 	:	13	:	689.717
+McIntosh 	:	13	:	1488.0327
+Macon 	:	13	:	1051.4105
+Madison 	:	13	:	739.6263
+Marion 	:	13	:	951.7991
+Meriwether 	:	13	:	1308.8306
+Miller 	:	13	:	734.8348
+Mitchell 	:	13	:	1330.7679
+Monroe 	:	13	:	1030.302
+Montgomery 	:	13	:	640.5588
+Morgan 	:	13	:	918.414
+Murray 	:	13	:	898.4192
+Muscogee 	:	13	:	572.39
+Newton 	:	13	:	723.1021
+Oconee 	:	13	:	482.1026
+Oglethorpe 	:	13	:	1145.2203
+Paulding 	:	13	:	816.0054
+Peach 	:	13	:	392.2814
+Pickens 	:	13	:	602.9002
+Pierce 	:	13	:	890.701
+Pike 	:	13	:	568.3237
+Polk 	:	13	:	808.4167
+Pulaski 	:	13	:	647.2151
+Putnam 	:	13	:	934.0317
+Quitman 	:	13	:	416.7828
+Rabun 	:	13	:	976.4041
+Randolph 	:	13	:	1116.0051
+Richmond 	:	13	:	850.6855
+Rockdale 	:	13	:	342.2167
+Schley 	:	13	:	434.6538
+Screven 	:	13	:	1697.9781
+Seminole 	:	13	:	664.4904
+Spalding 	:	13	:	516.964
+Stephens 	:	13	:	477.1557
+Stewart 	:	13	:	1199.7657
+Sumter 	:	13	:	1275.6786
+Talbot 	:	13	:	1022.3766
+Taliaferro 	:	13	:	506.2673
+Tattnall 	:	13	:	1264.4898
+Taylor 	:	13	:	983.1899
+Telfair 	:	13	:	1150.1672
+Terrell 	:	13	:	874.4617
+Thomas 	:	13	:	1429.8872
+Tift 	:	13	:	696.3474
+Toombs 	:	13	:	954.7776
+Towns 	:	13	:	445.5059
+Treutlen 	:	13	:	523.6721
+Troup 	:	13	:	1155.0364
+Turner 	:	13	:	750.7115
+Twiggs 	:	13	:	940.0405
+Union 	:	13	:	852.1618
+Upson 	:	13	:	848.5876
+Walker 	:	13	:	1157.8077
+Walton 	:	13	:	854.8295
+Ware 	:	13	:	2347.3429
+Warren 	:	13	:	742.6566
+Washington 	:	13	:	1772.5183
+Wayne 	:	13	:	1680.392
+Webster 	:	13	:	544.5734
+Wheeler 	:	13	:	777.3626
+White 	:	13	:	627.1944
+Whitfield 	:	13	:	752.7835
+Wilcox 	:	13	:	992.747
+Wilkes 	:	13	:	1227.66
+Wilkinson 	:	13	:	1170.7059
+Worth 	:	13	:	1488.1622
+Hawaii 	:	15	:	13174.553
+Honolulu 	:	15	:	5508.5415
+Kalawao 	:	15	:	135.5347
+Kauai 	:	15	:	3279.8983
+Maui 	:	15	:	6212.7366
+Ada 	:	16	:	2746.2547
+Adams 	:	16	:	3548.3
+Bannock 	:	16	:	2971.9214
+Bear Lake 	:	16	:	2718.0496
+Benewah 	:	16	:	2030.5082
+Bingham 	:	16	:	5491.4216
+Blaine 	:	16	:	6892.0418
+Boise 	:	16	:	4938.5084
+Bonner 	:	16	:	4971.7381
+Bonneville 	:	16	:	4922.6835
+Boundary 	:	16	:	3310.5639
+Butte 	:	16	:	5784.9981
+Camas 	:	16	:	2794.6618
+Canyon 	:	16	:	1563.0909
+Caribou 	:	16	:	4658.4258
+Cassia 	:	16	:	6683.0029
+Clark 	:	16	:	4571.8939
+Clearwater 	:	16	:	6444.179
+Custer 	:	16	:	12786.2861
+Elmore 	:	16	:	8030.3209
+Franklin 	:	16	:	1731.0524
+Fremont 	:	16	:	4909.5781
+Gem 	:	16	:	1465.2925
+Gooding 	:	16	:	1900.6456
+Idaho 	:	16	:	22021.4232
+Jefferson 	:	16	:	2863.3745
+Jerome 	:	16	:	1558.8433
+Kootenai 	:	16	:	3407.6371
+Latah 	:	16	:	2789.1451
+Lemhi 	:	16	:	11835.005
+Lewis 	:	16	:	1242.7079
+Lincoln 	:	16	:	3123.1774
+Madison 	:	16	:	1226.0024
+Minidoka 	:	16	:	1976.1182
+Nez Perce 	:	16	:	2217.9724
+Oneida 	:	16	:	3112.1699
+Owyhee 	:	16	:	19934.4789
+Payette 	:	16	:	1062.3921
+Power 	:	16	:	3736.334
+Shoshone 	:	16	:	6825.945
+Teton 	:	16	:	1166.9763
+Twin Falls 	:	16	:	4994.7373
+Valley 	:	16	:	9670.1794
+Washington 	:	16	:	3816.4686
+Adams 	:	17	:	2256.6152
+Alexander 	:	17	:	654.0786
+Bond 	:	17	:	991.1153
+Boone 	:	17	:	730.2246
+Brown 	:	17	:	795.7516
+Bureau 	:	17	:	2261.847
+Calhoun 	:	17	:	734.7571
+Carroll 	:	17	:	1206.3443
+Cass 	:	17	:	993.8607
+Champaign 	:	17	:	2583.6027
+Christian 	:	17	:	1853.6889
+Clark 	:	17	:	1307.6392
+Clay 	:	17	:	1216.8856
+Clinton 	:	17	:	1304.0132
+Coles 	:	17	:	1321.0813
+Cook 	:	17	:	4234.7536
+Crawford 	:	17	:	1154.4666
+Cumberland 	:	17	:	898.73
+DeKalb 	:	17	:	1644.5723
+De Witt 	:	17	:	1049.3385
+Douglas 	:	17	:	1081.1178
+DuPage 	:	17	:	871.6645
+Edgar 	:	17	:	1616.6262
+Edwards 	:	17	:	576.6894
+Effingham 	:	17	:	1242.941
+Fayette 	:	17	:	1878.6824
+Ford 	:	17	:	1259.8278
+Franklin 	:	17	:	1117.326
+Fulton 	:	17	:	2285.9081
+Gallatin 	:	17	:	850.5819
+Greene 	:	17	:	1415.0206
+Grundy 	:	17	:	1114.7878
+Hamilton 	:	17	:	1128.8256
+Hancock 	:	17	:	2109.6586
+Hardin 	:	17	:	470.1627
+Henderson 	:	17	:	1023.3608
+Henry 	:	17	:	2138.304
+Iroquois 	:	17	:	2895.6977
+Jackson 	:	17	:	1560.5527
+Jasper 	:	17	:	1289.8718
+Jefferson 	:	17	:	1511.8089
+Jersey 	:	17	:	976.4818
+Jo Daviess 	:	17	:	1602.4848
+Johnson 	:	17	:	903.5992
+Kane 	:	17	:	1357.3672
+Kankakee 	:	17	:	1764.9296
+Kendall 	:	17	:	835.7153
+Knox 	:	17	:	1864.023
+Lake 	:	17	:	3542.9905
+La Salle 	:	17	:	2973.4236
+Lawrence 	:	17	:	968.5046
+Lee 	:	17	:	1888.8611
+Livingston 	:	17	:	2707.6637
+Logan 	:	17	:	1603.2359
+McDonough 	:	17	:	1528.1518
+McHenry 	:	17	:	1582.8267
+McLean 	:	17	:	3072.4911
+Macon 	:	17	:	1516.1342
+Macoupin 	:	17	:	2247.1099
+Madison 	:	17	:	1917.5065
+Marion 	:	17	:	1491.0889
+Marshall 	:	17	:	1032.1668
+Mason 	:	17	:	1459.1283
+Massac 	:	17	:	627.0908
+Menard 	:	17	:	816.8083
+Mercer 	:	17	:	1473.3992
+Monroe 	:	17	:	1030.0689
+Montgomery 	:	17	:	1838.2525
+Morgan 	:	17	:	1482.1534
+Moultrie 	:	17	:	892.1773
+Ogle 	:	17	:	1976.8693
+Peoria 	:	17	:	1634.0051
+Perry 	:	17	:	1157.2379
+Piatt 	:	17	:	1140.4547
+Pike 	:	17	:	2198.5733
+Pope 	:	17	:	970.3176
+Pulaski 	:	17	:	526.6247
+Putnam 	:	17	:	446.1016
+Randolph 	:	17	:	1546.9034
+Richland 	:	17	:	937.6059
+Rock Island 	:	17	:	1168.5044
+St. Clair 	:	17	:	1745.5305
+Saline 	:	17	:	1002.2782
+Sangamon 	:	17	:	2271.4559
+Schuyler 	:	17	:	1143.2001
+Scott 	:	17	:	654.6743
+Shelby 	:	17	:	1989.2495
+Stark 	:	17	:	746.4639
+Stephenson 	:	17	:	1462.6248
+Tazewell 	:	17	:	1703.9351
+Union 	:	17	:	1093.3167
+Vermilion 	:	17	:	2336.5426
+Wabash 	:	17	:	589.8984
+Warren 	:	17	:	1406.8103
+Washington 	:	17	:	1461.0708
+Wayne 	:	17	:	1853.3004
+White 	:	17	:	1299.403
+Whiteside 	:	17	:	1805.2559
+Will 	:	17	:	2199.9201
+Williamson 	:	17	:	1150.9442
+Winnebago 	:	17	:	1344.9093
+Woodford 	:	17	:	1405.6966
+Adams 	:	18	:	880.4187
+Allen 	:	18	:	1709.659
+Bartholomew 	:	18	:	1060.2424
+Benton 	:	18	:	1052.576
+Blackford 	:	18	:	428.386
+Boone 	:	18	:	1096.2952
+Brown 	:	18	:	820.0458
+Carroll 	:	18	:	971.3795
+Cass 	:	18	:	1074.6428
+Clark 	:	18	:	974.358
+Clay 	:	18	:	933.4101
+Clinton 	:	18	:	1049.6752
+Crawford 	:	18	:	799.9215
+Daviess 	:	18	:	1131.4674
+Dearborn 	:	18	:	795.2595
+Decatur 	:	18	:	967.1578
+DeKalb 	:	18	:	942.3456
+Delaware 	:	18	:	1025.4328
+Dubois 	:	18	:	1127.2457
+Elkhart 	:	18	:	1211.7315
+Fayette 	:	18	:	557.1608
+Floyd 	:	18	:	384.1229
+Fountain 	:	18	:	1030.6128
+Franklin 	:	18	:	1013.5706
+Fulton 	:	18	:	961.8483
+Gibson 	:	18	:	1292.5395
+Grant 	:	18	:	1074.4097
+Greene 	:	18	:	1413.9069
+Hamilton 	:	18	:	1043.0707
+Hancock 	:	18	:	794.4307
+Harrison 	:	18	:	1261.0192
+Hendricks 	:	18	:	1058.9992
+Henry 	:	18	:	1022.791
+Howard 	:	18	:	761.2787
+Huntington 	:	18	:	1004.7646
+Jackson 	:	18	:	1330.6125
+Jasper 	:	18	:	1453.5598
+Jay 	:	18	:	994.0938
+Jefferson 	:	18	:	940.0146
+Jennings 	:	18	:	979.9265
+Johnson 	:	18	:	832.8404
+Knox 	:	18	:	1357.3154
+Kosciusko 	:	18	:	1435.7406
+Lagrange 	:	18	:	1001.6048
+Lake 	:	18	:	1622.2206
+LaPorte 	:	18	:	1587.7736
+Lawrence 	:	18	:	1170.8613
+Madison 	:	18	:	1173.0369
+Marion 	:	18	:	1043.8736
+Marshall 	:	18	:	1165.2928
+Martin 	:	18	:	881.9727
+Miami 	:	18	:	977.3624
+Monroe 	:	18	:	1065.3188
+Montgomery 	:	18	:	1308.8306
+Morgan 	:	18	:	1060.3201
+Newton 	:	18	:	1045.1427
+Noble 	:	18	:	1081.6099
+Ohio 	:	18	:	226.5473
+Orange 	:	18	:	1057.238
+Owen 	:	18	:	1004.4797
+Parke 	:	18	:	1165.759
+Perry 	:	18	:	1000.6206
+Pike 	:	18	:	883.3972
+Porter 	:	18	:	1350.9699
+Posey 	:	18	:	1086.3755
+Pulaski 	:	18	:	1125.5363
+Putnam 	:	18	:	1249.8822
+Randolph 	:	18	:	1173.8657
+Ripley 	:	18	:	1160.0869
+Rush 	:	18	:	1058.3258
+St. Joseph 	:	18	:	1193.9123
+Scott 	:	18	:	499.1707
+Shelby 	:	18	:	1069.9549
+Spencer 	:	18	:	1039.1857
+Starke 	:	18	:	808.8829
+Steuben 	:	18	:	835.2232
+Sullivan 	:	18	:	1175.9636
+Switzerland 	:	18	:	578.9168
+Tippecanoe 	:	18	:	1302.9513
+Tipton 	:	18	:	674.4619
+Union 	:	18	:	427.9975
+Vanderburgh 	:	18	:	610.5666
+Vermillion 	:	18	:	673.2446
+Vigo 	:	18	:	1063.1173
+Wabash 	:	18	:	1090.5713
+Warren 	:	18	:	949.494
+Warrick 	:	18	:	1012.3274
+Washington 	:	18	:	1337.8127
+Wayne 	:	18	:	1047.2406
+Wells 	:	18	:	959.3619
+White 	:	18	:	1317.792
+Whitley 	:	18	:	875.161
+Adair 	:	19	:	1477.1029
+Adams 	:	19	:	1101.8119
+Allamakee 	:	19	:	1706.0589
+Appanoose 	:	19	:	1337.3465
+Audubon 	:	19	:	1148.8722
+Benton 	:	19	:	1860.7855
+Black Hawk 	:	19	:	1481.2469
+Boone 	:	19	:	1485.3909
+Bremer 	:	19	:	1138.564
+Buchanan 	:	19	:	1484.9765
+Buena Vista 	:	19	:	1502.3813
+Butler 	:	19	:	1506.2404
+Calhoun 	:	19	:	1482.2311
+Carroll 	:	19	:	1476.9216
+Cass 	:	19	:	1463.3759
+Cedar 	:	19	:	1507.2764
+Cerro Gordo 	:	19	:	1489.5608
+Cherokee 	:	19	:	1495.3106
+Chickasaw 	:	19	:	1309.1932
+Clarke 	:	19	:	1118.1548
+Clay 	:	19	:	1482.8009
+Clayton 	:	19	:	2053.3779
+Clinton 	:	19	:	1839.3921
+Crawford 	:	19	:	1851.8241
+Dallas 	:	19	:	1532.5807
+Davis 	:	19	:	1307.6651
+Decatur 	:	19	:	1381.2988
+Delaware 	:	19	:	1499.7395
+Des Moines 	:	19	:	1113.182
+Dickinson 	:	19	:	1045.5571
+Dubuque 	:	19	:	1596.8904
+Emmet 	:	19	:	1042.1642
+Fayette 	:	19	:	1894.4555
+Floyd 	:	19	:	1298.3929
+Franklin 	:	19	:	1509.9959
+Fremont 	:	19	:	1338.4084
+Greene 	:	19	:	1479.2267
+Grundy 	:	19	:	1301.6045
+Guthrie 	:	19	:	1536.0254
+Hamilton 	:	19	:	1495.5696
+Hancock 	:	19	:	1484.4326
+Hardin 	:	19	:	1476.1187
+Harrison 	:	19	:	1815.4087
+Henry 	:	19	:	1131.0012
+Howard 	:	19	:	1227.0384
+Humboldt 	:	19	:	1128.5407
+Ida 	:	19	:	1119.4757
+Iowa 	:	19	:	1521.2365
+Jackson 	:	19	:	1682.8525
+Jasper 	:	19	:	1898.2887
+Jefferson 	:	19	:	1131.1048
+Johnson 	:	19	:	1614.4765
+Jones 	:	19	:	1493.653
+Keokuk 	:	19	:	1502.0446
+Kossuth 	:	19	:	2523.6701
+Lee 	:	19	:	1395.4143
+Linn 	:	19	:	1876.5845
+Louisa 	:	19	:	1081.6876
+Lucas 	:	19	:	1124.5003
+Lyon 	:	19	:	1521.9617
+Madison 	:	19	:	1456.357
+Mahaska 	:	19	:	1485.106
+Marion 	:	19	:	1477.6727
+Marshall 	:	19	:	1484.1218
+Mills 	:	19	:	1138.7453
+Mitchell 	:	19	:	1215.746
+Monona 	:	19	:	1810.0215
+Monroe 	:	19	:	1124.3449
+Montgomery 	:	19	:	1100.2579
+Muscatine 	:	19	:	1163.0913
+O'Brien 	:	19	:	1484.7175
+Osceola 	:	19	:	1034.6532
+Page 	:	19	:	1386.5565
+Palo Alto 	:	19	:	1474.746
+Plymouth 	:	19	:	2237.6564
+Pocahontas 	:	19	:	1499.9467
+Polk 	:	19	:	1533.021
+Pottawattamie 	:	19	:	2486.2446
+Poweshiek 	:	19	:	1518.1803
+Ringgold 	:	19	:	1395.8028
+Sac 	:	19	:	1498.0042
+Scott 	:	19	:	1212.5603
+Shelby 	:	19	:	1531.6483
+Sioux 	:	19	:	1990.6222
+Story 	:	19	:	1485.883
+Tama 	:	19	:	1870.9383
+Taylor 	:	19	:	1385.2097
+Union 	:	19	:	1103.2105
+Van Buren 	:	19	:	1270.5245
+Wapello 	:	19	:	1129.1882
+Warren 	:	19	:	1484.6139
+Washington 	:	19	:	1478.2943
+Wayne 	:	19	:	1365.1372
+Webster 	:	19	:	1859.7495
+Winnebago 	:	19	:	1040.0663
+Winneshiek 	:	19	:	1786.7892
+Woodbury 	:	19	:	2272.4401
+Worth 	:	19	:	1040.4289
+Wright 	:	19	:	1508.7786
+Allen 	:	20	:	1308.4162
+Anderson 	:	20	:	1513.3111
+Atchison 	:	20	:	1126.7536
+Barber 	:	20	:	2942.7839
+Barton 	:	20	:	2332.1914
+Bourbon 	:	20	:	1654.5438
+Brown 	:	20	:	1481.998
+Butler 	:	20	:	3746.2278
+Chase 	:	20	:	2015.0459
+Chautauqua 	:	20	:	1670.1097
+Cherokee 	:	20	:	1530.5864
+Cheyenne 	:	20	:	2643.9756
+Clark 	:	20	:	2530.948
+Clay 	:	20	:	1697.5896
+Cloud 	:	20	:	1860.8373
+Coffey 	:	20	:	1695.3363
+Comanche 	:	20	:	2045.323
+Cowley 	:	20	:	2933.434
+Crawford 	:	20	:	1541.1795
+Decatur 	:	20	:	2315.9262
+Dickinson 	:	20	:	2206.9908
+Doniphan 	:	20	:	1028.4113
+Douglas 	:	20	:	1228.8773
+Edwards 	:	20	:	1611.239
+Elk 	:	20	:	1684.4324
+Ellis 	:	20	:	2332.2173
+Ellsworth 	:	20	:	1873.7096
+Finney 	:	20	:	3373.7858
+Ford 	:	20	:	2847.1611
+Franklin 	:	20	:	1493.5235
+Geary 	:	20	:	1047.3701
+Gove 	:	20	:	2775.1073
+Graham 	:	20	:	2327.5553
+Grant 	:	20	:	1489.3536
+Gray 	:	20	:	2251.5906
+Greeley 	:	20	:	2015.0459
+Greenwood 	:	20	:	2985.2081
+Hamilton 	:	20	:	2583.8358
+Harper 	:	20	:	2079.6405
+Harvey 	:	20	:	1399.895
+Haskell 	:	20	:	1496.3207
+Hodgeman 	:	20	:	2228.0216
+Jackson 	:	20	:	1703.8574
+Jefferson 	:	20	:	1442.4746
+Jewell 	:	20	:	2368.4773
+Johnson 	:	20	:	1243.5885
+Kearny 	:	20	:	2257.185
+Kingman 	:	20	:	2244.753
+Kiowa 	:	20	:	1871.5858
+Labette 	:	20	:	1692.047
+Lane 	:	20	:	1858.1437
+Leavenworth 	:	20	:	1212.9747
+Lincoln 	:	20	:	1864.6446
+Linn 	:	20	:	1570.2911
+Logan 	:	20	:	2779.3031
+Lyon 	:	20	:	2214.8126
+McPherson 	:	20	:	2334.2116
+Marion 	:	20	:	2469.6686
+Marshall 	:	20	:	2342.2924
+Meade 	:	20	:	2537.3194
+Miami 	:	20	:	1528.4885
+Mitchell 	:	20	:	1861.2258
+Montgomery 	:	20	:	1687.126
+Morris 	:	20	:	1820.3556
+Morton 	:	20	:	1890.5446
+Nemaha 	:	20	:	1863.246
+Neosho 	:	20	:	1497.0718
+Ness 	:	20	:	2784.25
+Norton 	:	20	:	2282.8001
+Osage 	:	20	:	1862.8057
+Osborne 	:	20	:	2316.1852
+Ottawa 	:	20	:	1869.721
+Pawnee 	:	20	:	1954.3104
+Phillips 	:	20	:	2317.5579
+Pottawatomie 	:	20	:	2232.7613
+Pratt 	:	20	:	1905.6184
+Rawlins 	:	20	:	2770.5748
+Reno 	:	20	:	3292.5375
+Republic 	:	20	:	1865.6029
+Rice 	:	20	:	1886.297
+Riley 	:	20	:	1611.2649
+Rooks 	:	20	:	2318.9824
+Rush 	:	20	:	1860.7078
+Russell 	:	20	:	2328.3582
+Saline 	:	20	:	1868.1152
+Scott 	:	20	:	1858.6876
+Sedgwick 	:	20	:	2614.3719
+Seward 	:	20	:	1658.9209
+Shawnee 	:	20	:	1440.8688
+Sheridan 	:	20	:	2322.2199
+Sherman 	:	20	:	2735.0659
+Smith 	:	20	:	2322.0127
+Stafford 	:	20	:	2058.3248
+Stanton 	:	20	:	1761.3554
+Stevens 	:	20	:	1884.7689
+Sumner 	:	20	:	3068.5802
+Thomas 	:	20	:	2783.991
+Trego 	:	20	:	2328.4618
+Wabaunsee 	:	20	:	2071.482
+Wallace 	:	20	:	2367.3895
+Washington 	:	20	:	2327.9956
+Wichita 	:	20	:	1861.0186
+Wilson 	:	20	:	1489.1723
+Woodson 	:	20	:	1309.1155
+Wyandotte 	:	20	:	403.2371
+Adair 	:	21	:	1067.6757
+Allen 	:	21	:	911.7836
+Anderson 	:	21	:	529.0852
+Ballard 	:	21	:	708.624
+Barren 	:	21	:	1294.8187
+Bath 	:	21	:	735.4046
+Bell 	:	21	:	935.8965
+Boone 	:	21	:	665.5264
+Bourbon 	:	21	:	755.3994
+Boyd 	:	21	:	419.1138
+Boyle 	:	21	:	473.9441
+Bracken 	:	21	:	541.0251
+Breathitt 	:	21	:	1282.8011
+Breckinridge 	:	21	:	1516.5227
+Bullitt 	:	21	:	777.518
+Butler 	:	21	:	1117.6368
+Caldwell 	:	21	:	901.7862
+Calloway 	:	21	:	1063.9461
+Campbell 	:	21	:	412.9237
+Carlisle 	:	21	:	515.4618
+Carroll 	:	21	:	355.5293
+Carter 	:	21	:	1067.4685
+Casey 	:	21	:	1154.4407
+Christian 	:	21	:	1875.1859
+Clark 	:	21	:	660.8644
+Clay 	:	21	:	1220.0972
+Clinton 	:	21	:	532.3486
+Crittenden 	:	21	:	960.7605
+Cumberland 	:	21	:	805.1015
+Daviess 	:	21	:	1233.5393
+Edmonson 	:	21	:	797.7459
+Elliott 	:	21	:	609.168
+Estill 	:	21	:	662.263
+Fayette 	:	21	:	739.4968
+Fleming 	:	21	:	910.3073
+Floyd 	:	21	:	1024.2414
+Franklin 	:	21	:	549.3649
+Fulton 	:	21	:	597.1245
+Gallatin 	:	21	:	271.0953
+Garrard 	:	21	:	605.7492
+Grant 	:	21	:	675.4461
+Graves 	:	21	:	1441.2314
+Grayson 	:	21	:	1323.1015
+Green 	:	21	:	747.9402
+Greenup 	:	21	:	918.1809
+Hancock 	:	21	:	515.2028
+Hardin 	:	21	:	1631.3374
+Harlan 	:	21	:	1212.0423
+Harrison 	:	21	:	802.5892
+Hart 	:	21	:	1082.3869
+Henderson 	:	21	:	1210.1516
+Henry 	:	21	:	753.9749
+Hickman 	:	21	:	655.1146
+Hopkins 	:	21	:	1435.4557
+Jackson 	:	21	:	897.6163
+Jefferson 	:	21	:	1032.3222
+Jessamine 	:	21	:	451.8255
+Johnson 	:	21	:	683.6046
+Kenton 	:	21	:	425.7442
+Knott 	:	21	:	914.2959
+Knox 	:	21	:	1004.1689
+Larue 	:	21	:	683.0348
+Laurel 	:	21	:	1149.2866
+Lawrence 	:	21	:	1088.1108
+Lee 	:	21	:	547.0598
+Leslie 	:	21	:	1047.2924
+Letcher 	:	21	:	878.3208
+Lewis 	:	21	:	1283.863
+Lincoln 	:	21	:	871.4573
+Livingston 	:	21	:	886.298
+Logan 	:	21	:	1442.889
+Lyon 	:	21	:	664.1278
+McCracken 	:	21	:	694.3272
+McCreary 	:	21	:	1115.3576
+McLean 	:	21	:	663.4803
+Madison 	:	21	:	1147.6549
+Magoffin 	:	21	:	801.4496
+Marion 	:	21	:	898.3674
+Marshall 	:	21	:	881.4288
+Martin 	:	21	:	597.7979
+Mason 	:	21	:	638.694
+Meade 	:	21	:	839.7298
+Menifee 	:	21	:	533.6177
+Mercer 	:	21	:	655.5549
+Metcalfe 	:	21	:	753.5864
+Monroe 	:	21	:	860.1649
+Montgomery 	:	21	:	514.892
+Morgan 	:	21	:	993.8607
+Muhlenberg 	:	21	:	1241.7237
+Nelson 	:	21	:	1098.3413
+Nicholas 	:	21	:	509.8415
+Ohio 	:	21	:	1545.5307
+Oldham 	:	21	:	509.0386
+Owen 	:	21	:	917.2744
+Owsley 	:	21	:	513.0531
+Pendleton 	:	21	:	730.0433
+Perry 	:	21	:	887.4376
+Pike 	:	21	:	2043.0956
+Powell 	:	21	:	466.718
+Pulaski 	:	21	:	1753.5595
+Robertson 	:	21	:	259.2849
+Rockcastle 	:	21	:	823.7754
+Rowan 	:	21	:	741.3875
+Russell 	:	21	:	732.5038
+Scott 	:	21	:	738.927
+Shelby 	:	21	:	998.8335
+Simpson 	:	21	:	611.7321
+Spencer 	:	21	:	496.762
+Taylor 	:	21	:	717.5595
+Todd 	:	21	:	976.3523
+Trigg 	:	21	:	1246.1267
+Trimble 	:	21	:	404.6357
+Union 	:	21	:	941.2837
+Warren 	:	21	:	1418.5171
+Washington 	:	21	:	780.9368
+Wayne 	:	21	:	1254.078
+Webster 	:	21	:	869.4112
+Whitley 	:	21	:	1152.9385
+Wolfe 	:	21	:	577.2074
+Woodford 	:	21	:	497.2282
+Acadia 	:	22	:	1703.2358
+Allen 	:	22	:	1983.0853
+Ascension 	:	22	:	784.4592
+Assumption 	:	22	:	944.1845
+Avoyelles 	:	22	:	2242.0853
+Beauregard 	:	22	:	3019.9141
+Bienville 	:	22	:	2128.3843
+Bossier 	:	22	:	2245.3487
+Caddo 	:	22	:	2426.571
+Calcasieu 	:	22	:	2834.3406
+Caldwell 	:	22	:	1400.4648
+Cameron 	:	22	:	5002.844
+Catahoula 	:	22	:	1915.1237
+Claiborne 	:	22	:	1987.9545
+Concordia 	:	22	:	1939.0812
+De Soto 	:	22	:	2316.7291
+East Baton Rouge 	:	22	:	1218.6986
+East Carroll 	:	22	:	1145.9455
+East Feliciana 	:	22	:	1180.2371
+Evangeline 	:	22	:	1760.1899
+Franklin 	:	22	:	1645.7637
+Grant 	:	22	:	1721.2104
+Iberia 	:	22	:	2669.9274
+Iberville 	:	22	:	1690.8556
+Jackson 	:	22	:	1503.0806
+Jefferson 	:	22	:	1663.8419
+Jefferson Davis 	:	22	:	1705.7222
+Lafayette 	:	22	:	700.0511
+Lafourche 	:	22	:	3812.9721
+La Salle 	:	22	:	1715.5124
+Lincoln 	:	22	:	1223.1793
+Livingston 	:	22	:	1820.3556
+Madison 	:	22	:	1684.8727
+Morehouse 	:	22	:	2085.468
+Natchitoches 	:	22	:	3365.187
+Orleans 	:	22	:	907.0439
+Ouachita 	:	22	:	1638.693
+Plaquemines 	:	22	:	6289.9186
+Pointe Coupee 	:	22	:	1529.8612
+Rapides 	:	22	:	3527.4764
+Red River 	:	22	:	1041.3872
+Richland 	:	22	:	1462.0809
+Sabine 	:	22	:	2619.8109
+St. Bernard 	:	22	:	4645.8125
+St. Charles 	:	22	:	1062.3144
+St. Helena 	:	22	:	1060.5014
+St. James 	:	22	:	667.6761
+St. John the Baptist 	:	22	:	900.9056
+St. Landry 	:	22	:	2431.5697
+St. Martin 	:	22	:	2114.6314
+St. Mary 	:	22	:	2897.7697
+St. Tammany 	:	22	:	2911.3672
+Tangipahoa 	:	22	:	2131.8808
+Tensas 	:	22	:	1660.708
+Terrebonne 	:	22	:	5386.941
+Union 	:	22	:	2344.6752
+Vermilion 	:	22	:	3984.2229
+Vernon 	:	22	:	3474.5109
+Washington 	:	22	:	1750.7623
+Webster 	:	22	:	1593.0313
+West Baton Rouge 	:	22	:	527.3758
+West Carroll 	:	22	:	933.2288
+West Feliciana 	:	22	:	1103.3659
+Winn 	:	22	:	2478.3969
+Androscoggin 	:	23	:	1287.8257
+Aroostook 	:	23	:	17686.5661
+Cumberland 	:	23	:	3151.7451
+Franklin 	:	23	:	4517.7629
+Hancock 	:	23	:	6089.1677
+Kennebec 	:	23	:	2463.5562
+Knox 	:	23	:	2958.039
+Lincoln 	:	23	:	1812.5079
+Oxford 	:	23	:	5633.9234
+Penobscot 	:	23	:	9210.4026
+Piscataquis 	:	23	:	11337.3624
+Sagadahoc 	:	23	:	958.7921
+Somerset 	:	23	:	10607.0083
+Waldo 	:	23	:	2208.5966
+Washington 	:	23	:	8430.2169
+York 	:	23	:	3292.7706
+Allegany 	:	24	:	1113.2338
+Anne Arundel 	:	24	:	1522.661
+Baltimore 	:	24	:	1766.4577
+Calvert 	:	24	:	893.7831
+Caroline 	:	24	:	844.4954
+Carroll 	:	24	:	1171.716
+Cecil 	:	24	:	1082.3092
+Charles 	:	24	:	1665.9398
+Dorchester 	:	24	:	2545.7628
+Frederick 	:	24	:	1728.4106
+Garrett 	:	24	:	1698.781
+Harford 	:	24	:	1364.2048
+Howard 	:	24	:	656.6945
+Kent 	:	24	:	1073.0629
+Montgomery 	:	24	:	1313.4926
+Prince George's 	:	24	:	1290.9855
+Queen Anne's 	:	24	:	1320.3561
+St. Mary's 	:	24	:	1980.055
+Somerset 	:	24	:	1581.9202
+Talbot 	:	24	:	1234.8343
+Washington 	:	24	:	1210.9545
+Wicomico 	:	24	:	1035.4561
+Worcester 	:	24	:	1799.3507
+Baltimore city	:	24	:	238.4872
+Barnstable 	:	25	:	3381.5558
+Berkshire 	:	25	:	2450.8393
+Bristol 	:	25	:	1790.1821
+Dukes 	:	25	:	1271.5605
+Essex 	:	25	:	2145.8927
+Franklin 	:	25	:	1877.0766
+Hampden 	:	25	:	1642.3708
+Hampshire 	:	25	:	1412.6896
+Middlesex 	:	25	:	2195.1286
+Nantucket 	:	25	:	786.4276
+Norfolk 	:	25	:	1149.8046
+Plymouth 	:	25	:	2831.8801
+Suffolk 	:	25	:	311.2921
+Worcester 	:	25	:	4089.6618
+Alcona 	:	26	:	4637.4986
+Alger 	:	26	:	13077.1172
+Allegan 	:	26	:	4748.247
+Alpena 	:	26	:	4390.05
+Antrim 	:	26	:	1558.921
+Arenac 	:	26	:	1763.2979
+Baraga 	:	26	:	2768.3215
+Barry 	:	26	:	1494.171
+Bay 	:	26	:	1634.0569
+Benzie 	:	26	:	2226.4676
+Berrien 	:	26	:	4095.7742
+Branch 	:	26	:	1345.4791
+Calhoun 	:	26	:	1860.7596
+Cass 	:	26	:	1316.9114
+Charlevoix 	:	26	:	3602.0684
+Cheboygan 	:	26	:	2292.7457
+Chippewa 	:	26	:	6987.7682
+Clare 	:	26	:	1489.8198
+Clinton 	:	26	:	1488.1363
+Crawford 	:	26	:	1459.1283
+Delta 	:	26	:	5158.1922
+Dickinson 	:	26	:	2012.7408
+Eaton 	:	26	:	1499.6618
+Emmet 	:	26	:	2285.0534
+Genesee 	:	26	:	1681.7906
+Gladwin 	:	26	:	1337.5537
+Gogebic 	:	26	:	3823.9537
+Grand Traverse 	:	26	:	1556.9267
+Gratiot 	:	26	:	1480.4699
+Hillsdale 	:	26	:	1572.4926
+Houghton 	:	26	:	3889.0404
+Huron 	:	26	:	5533.4573
+Ingham 	:	26	:	1452.8346
+Ionia 	:	26	:	1502.7957
+Iosco 	:	26	:	4897.0943
+Iron 	:	26	:	3136.5418
+Isabella 	:	26	:	1496.3725
+Jackson 	:	26	:	1874.5384
+Kalamazoo 	:	26	:	1502.6662
+Kalkaska 	:	26	:	1478.2684
+Kent 	:	26	:	2258.9462
+Keweenaw 	:	26	:	15451.8364
+Lake 	:	26	:	1488.214
+Lapeer 	:	26	:	1717.3772
+Leelanau 	:	26	:	6558.8642
+Lenawee 	:	26	:	1971.7929
+Livingston 	:	26	:	1516.2637
+Luce 	:	26	:	4951.7951
+Mackinac 	:	26	:	5440.4245
+Macomb 	:	26	:	1475.7302
+Manistee 	:	26	:	3317.1943
+Marquette 	:	26	:	8871.1903
+Mason 	:	26	:	3216.4174
+Mecosta 	:	26	:	1479.149
+Menominee 	:	26	:	3465.3941
+Midland 	:	26	:	1367.2351
+Missaukee 	:	26	:	1486.1938
+Monroe 	:	26	:	1761.2777
+Montcalm 	:	26	:	1867.3382
+Montmorency 	:	26	:	1456.7196
+Muskegon 	:	26	:	3779.587
+Newaygo 	:	26	:	2231.0001
+Oakland 	:	26	:	2351.72
+Oceana 	:	26	:	3384.4307
+Ogemaw 	:	26	:	1488.2917
+Ontonagon 	:	26	:	9690.3555
+Osceola 	:	26	:	1484.329
+Oscoda 	:	26	:	1480.3663
+Otsego 	:	26	:	1362.2882
+Ottawa 	:	26	:	4226.8023
+Presque Isle 	:	26	:	6663.4225
+Roscommon 	:	26	:	1501.7856
+Saginaw 	:	26	:	2112.8702
+St. Clair 	:	26	:	2166.8717
+St. Joseph 	:	26	:	1349.7785
+Sanilac 	:	26	:	4118.6698
+Schoolcraft 	:	26	:	4878.7571
+Shiawassee 	:	26	:	1400.4907
+Tuscola 	:	26	:	2366.7938
+Van Buren 	:	26	:	2823.5921
+Washtenaw 	:	26	:	1871.3527
+Wayne 	:	26	:	1740.998
+Wexford 	:	26	:	1491.4256
+Aitkin 	:	27	:	5167.8529
+Anoka 	:	27	:	1155.8134
+Becker 	:	27	:	3742.8349
+Beltrami 	:	27	:	7913.9781
+Benton 	:	27	:	1069.67
+Big Stone 	:	27	:	1367.2092
+Blue Earth 	:	27	:	1983.681
+Brown 	:	27	:	1602.174
+Carlton 	:	27	:	2266.8457
+Carver 	:	27	:	974.2285
+Cass 	:	27	:	6252.8039
+Chippewa 	:	27	:	1522.4797
+Chisago 	:	27	:	1146.0491
+Clay 	:	27	:	2726.5966
+Clearwater 	:	27	:	2667.1561
+Cook 	:	27	:	8649.8748
+Cottonwood 	:	27	:	1680.6769
+Crow Wing 	:	27	:	2995.4904
+Dakota 	:	27	:	1518.5947
+Dodge 	:	27	:	1138.6417
+Douglas 	:	27	:	1864.6446
+Faribault 	:	27	:	1868.9699
+Fillmore 	:	27	:	2232.9685
+Freeborn 	:	27	:	1871.6117
+Goodhue 	:	27	:	2021.3396
+Grant 	:	27	:	1489.7162
+Hennepin 	:	27	:	1570.5242
+Houston 	:	27	:	1473.4769
+Hubbard 	:	27	:	2588.4201
+Isanti 	:	27	:	1170.3433
+Itasca 	:	27	:	7582.9502
+Jackson 	:	27	:	1863.4014
+Kanabec 	:	27	:	1381.4542
+Kandiyohi 	:	27	:	2232.5023
+Kittson 	:	27	:	2858.0909
+Koochiching 	:	27	:	8169.6888
+Lac qui Parle 	:	27	:	2015.1495
+Lake 	:	27	:	7746.2238
+Lake of the Woods 	:	27	:	4597.3795
+Le Sueur 	:	27	:	1227.2974
+Lincoln 	:	27	:	1420.4596
+Lyon 	:	27	:	1868.5814
+McLeod 	:	27	:	1309.6853
+Mahnomen 	:	27	:	1509.9441
+Marshall 	:	27	:	4695.1261
+Martin 	:	27	:	1889.5604
+Meeker 	:	27	:	1670.7572
+Mille Lacs 	:	27	:	1765.7843
+Morrison 	:	27	:	2987.0988
+Mower 	:	27	:	1843.3289
+Murray 	:	27	:	1863.5568
+Nicollet 	:	27	:	1209.4005
+Nobles 	:	27	:	1870.8347
+Norman 	:	27	:	2270.9638
+Olmsted 	:	27	:	1695.155
+Otter Tail 	:	27	:	5762.5169
+Pennington 	:	27	:	1601.5006
+Pine 	:	27	:	3715.5363
+Pipestone 	:	27	:	1207.3285
+Polk 	:	27	:	5174.3279
+Pope 	:	27	:	1857.7811
+Ramsey 	:	27	:	440.6367
+Red Lake 	:	27	:	1120.2009
+Redwood 	:	27	:	2282.4116
+Renville 	:	27	:	2556.8998
+Rice 	:	27	:	1336.7767
+Rock 	:	27	:	1250.5556
+Roseau 	:	27	:	4346.8747
+St. Louis 	:	27	:	17767.1669
+Scott 	:	27	:	954.5704
+Sherburne 	:	27	:	1168.09
+Sibley 	:	27	:	1555.0619
+Stearns 	:	27	:	3599.9187
+Steele 	:	27	:	1119.2944
+Stevens 	:	27	:	1489.8716
+Swift 	:	27	:	1948.5865
+Todd 	:	27	:	2536.4906
+Traverse 	:	27	:	1517.6364
+Wabasha 	:	27	:	1424.0597
+Wadena 	:	27	:	1406.37
+Waseca 	:	27	:	1120.9779
+Washington 	:	27	:	1095.9844
+Watonwan 	:	27	:	1139.3928
+Wilkin 	:	27	:	1946.7217
+Winona 	:	27	:	1661.7181
+Wright 	:	27	:	1850.2701
+Yellow Medicine 	:	27	:	1977.1801
+Adams 	:	28	:	1259.3875
+Alcorn 	:	28	:	1039.4965
+Amite 	:	28	:	1894.9476
+Attala 	:	28	:	1909.089
+Benton 	:	28	:	1058.4035
+Bolivar 	:	28	:	2345.9184
+Calhoun 	:	28	:	1522.8423
+Carroll 	:	28	:	1643.4586
+Chickasaw 	:	28	:	1306.0593
+Choctaw 	:	28	:	1087.3079
+Claiborne 	:	28	:	1298.5224
+Clarke 	:	28	:	1795.9319
+Clay 	:	28	:	1077.4918
+Coahoma 	:	28	:	1510.3326
+Copiah 	:	28	:	2018.5942
+Covington 	:	28	:	1074.6946
+DeSoto 	:	28	:	1286.6343
+Forrest 	:	28	:	1217.7403
+Franklin 	:	28	:	1467.8566
+George 	:	28	:	1252.6017
+Greene 	:	28	:	1861.4071
+Grenada 	:	28	:	1163.8942
+Hancock 	:	28	:	1431.0527
+Harrison 	:	28	:	2528.2285
+Hinds 	:	28	:	2272.3365
+Holmes 	:	28	:	1979.2262
+Humphreys 	:	28	:	1116.7044
+Issaquena 	:	28	:	1143.1224
+Itawamba 	:	28	:	1399.6878
+Jackson 	:	28	:	2702.147
+Jasper 	:	28	:	1754.5696
+Jefferson 	:	28	:	1365.4221
+Jefferson Davis 	:	28	:	1059.569
+Jones 	:	28	:	1812.3007
+Kemper 	:	28	:	1986.53
+Lafayette 	:	28	:	1759.3611
+Lamar 	:	28	:	1296.2691
+Lauderdale 	:	28	:	1852.5752
+Lawrence 	:	28	:	1128.5407
+Leake 	:	28	:	1516.1601
+Lee 	:	28	:	1173.6326
+Leflore 	:	28	:	1570.4465
+Lincoln 	:	28	:	1523.3603
+Lowndes 	:	28	:	1337.6055
+Madison 	:	28	:	1921.7023
+Marion 	:	28	:	1420.8222
+Marshall 	:	28	:	1838.382
+Monroe 	:	28	:	1999.5836
+Montgomery 	:	28	:	1056.3574
+Neshoba 	:	28	:	1480.5476
+Newton 	:	28	:	1501.1122
+Noxubee 	:	28	:	1813.1295
+Oktibbeha 	:	28	:	1196.321
+Panola 	:	28	:	1826.2867
+Pearl River 	:	28	:	2121.0287
+Perry 	:	28	:	1684.018
+Pike 	:	28	:	1063.9202
+Pontotoc 	:	28	:	1297.5641
+Prentiss 	:	28	:	1083.2416
+Quitman 	:	28	:	1052.8091
+Rankin 	:	28	:	2087.7731
+Scott 	:	28	:	1580.8842
+Sharkey 	:	28	:	1126.3392
+Simpson 	:	28	:	1529.4727
+Smith 	:	28	:	1650.5293
+Stone 	:	28	:	1160.5013
+Sunflower 	:	28	:	1831.6998
+Tallahatchie 	:	28	:	1688.8872
+Tate 	:	28	:	1064.3605
+Tippah 	:	28	:	1191.3223
+Tishomingo 	:	28	:	1151.3586
+Tunica 	:	28	:	1245.2202
+Union 	:	28	:	1079.6933
+Walthall 	:	28	:	1047.4996
+Warren 	:	28	:	1602.5884
+Washington 	:	28	:	1971.6634
+Wayne 	:	28	:	2106.965
+Webster 	:	28	:	1096.4506
+Wilkinson 	:	28	:	1781.0394
+Winston 	:	28	:	1580.1849
+Yalobusha 	:	28	:	1282.05
+Yazoo 	:	28	:	2419.3708
+Adair 	:	29	:	1474.5388
+Andrew 	:	29	:	1130.535
+Atchison 	:	29	:	1417.6624
+Audrain 	:	29	:	1804.6861
+Barry 	:	29	:	2048.4051
+Barton 	:	29	:	1545.5048
+Bates 	:	29	:	2205.0483
+Benton 	:	29	:	1948.9232
+Bollinger 	:	29	:	1608.908
+Boone 	:	29	:	1790.4929
+Buchanan 	:	29	:	1073.7363
+Butler 	:	29	:	1810.3323
+Caldwell 	:	29	:	1112.9748
+Callaway 	:	29	:	2193.8077
+Camden 	:	29	:	1835.9474
+Cape Girardeau 	:	29	:	1518.4911
+Carroll 	:	29	:	1818.957
+Carter 	:	29	:	1318.3618
+Cass 	:	29	:	1819.9153
+Cedar 	:	29	:	1291.1409
+Chariton 	:	29	:	1989.7675
+Christian 	:	29	:	1460.8895
+Clark 	:	29	:	1325.821
+Clay 	:	29	:	1058.9474
+Clinton 	:	29	:	1096.7873
+Cole 	:	29	:	1033.6172
+Cooper 	:	29	:	1476.8698
+Crawford 	:	29	:	1926.4161
+Dade 	:	29	:	1311.317
+Dallas 	:	29	:	1405.9297
+Daviess 	:	29	:	1473.8913
+DeKalb 	:	29	:	1102.7443
+Dent 	:	29	:	1954.1809
+Douglas 	:	29	:	2109.814
+Dunklin 	:	29	:	1417.0149
+Franklin 	:	29	:	2410.3835
+Gasconade 	:	29	:	1362.5731
+Gentry 	:	29	:	1273.7879
+Greene 	:	29	:	1755.502
+Grundy 	:	29	:	1134.3682
+Harrison 	:	29	:	1881.5055
+Henry 	:	29	:	1897.3045
+Hickory 	:	29	:	1066.4066
+Holt 	:	29	:	1214.8395
+Howard 	:	29	:	1218.7245
+Howell 	:	29	:	2404.3747
+Iron 	:	29	:	1429.8095
+Jackson 	:	29	:	1596.5019
+Jasper 	:	29	:	1661.0188
+Jefferson 	:	29	:	1719.9931
+Johnson 	:	29	:	2157.5477
+Knox 	:	29	:	1312.5343
+Laclede 	:	29	:	1989.12
+Lafayette 	:	29	:	1654.6474
+Lawrence 	:	29	:	1588.6542
+Lewis 	:	29	:	1323.1015
+Lincoln 	:	29	:	1658.6619
+Linn 	:	29	:	1609.5814
+Livingston 	:	29	:	1394.6632
+McDonald 	:	29	:	1397.823
+Macon 	:	29	:	2104.4527
+Madison 	:	29	:	1288.784
+Maries 	:	29	:	1372.6223
+Marion 	:	29	:	1150.0895
+Mercer 	:	29	:	1178.9162
+Miller 	:	29	:	1553.8446
+Mississippi 	:	29	:	1110.8769
+Moniteau 	:	29	:	1084.8215
+Monroe 	:	29	:	1735.8957
+Montgomery 	:	29	:	1399.4806
+Morgan 	:	29	:	1589.9751
+New Madrid 	:	29	:	1807.8718
+Newton 	:	29	:	1623.0494
+Nodaway 	:	29	:	2273.3725
+Oregon 	:	29	:	2050.2181
+Osage 	:	29	:	1588.7319
+Ozark 	:	29	:	1955.6313
+Pemiscot 	:	29	:	1327.1419
+Perry 	:	29	:	1254.2852
+Pettis 	:	29	:	1777.6206
+Phelps 	:	29	:	1746.3852
+Pike 	:	29	:	1773.6579
+Platte 	:	29	:	1106.4998
+Polk 	:	29	:	1663.9714
+Pulaski 	:	29	:	1428.1519
+Putnam 	:	29	:	1345.9194
+Ralls 	:	29	:	1253.0938
+Randolph 	:	29	:	1263.0135
+Ray 	:	29	:	1485.5463
+Reynolds 	:	29	:	2109.3219
+Ripley 	:	29	:	1635.9994
+St. Charles 	:	29	:	1534.1865
+St. Clair 	:	29	:	1817.921
+Ste. Genevieve 	:	29	:	1318.1546
+St. Francois 	:	29	:	1171.716
+St. Louis 	:	29	:	1356.3571
+Saline 	:	29	:	1980.2881
+Schuyler 	:	29	:	798.1344
+Scotland 	:	29	:	1137.6575
+Scott 	:	29	:	1103.4436
+Shannon 	:	29	:	2600.3341
+Shelby 	:	29	:	1301.2937
+Stoddard 	:	29	:	2146.9546
+Stone 	:	29	:	1323.2569
+Sullivan 	:	29	:	1687.2037
+Taney 	:	29	:	1687.3332
+Texas 	:	29	:	3054.2316
+Vernon 	:	29	:	2167.9336
+Warren 	:	29	:	1133.7466
+Washington 	:	29	:	1974.7714
+Wayne 	:	29	:	2004.8931
+Webster 	:	29	:	1537.6571
+Worth 	:	29	:	690.8825
+Wright 	:	29	:	1769.4362
+St. Louis city	:	29	:	171.3285
+Beaverhead 	:	30	:	14431.5836
+Big Horn 	:	30	:	12987.9435
+Blaine 	:	30	:	10978.8028
+Broadwater 	:	30	:	3208.8546
+Carbon 	:	30	:	5341.0721
+Carter 	:	30	:	8672.0711
+Cascade 	:	30	:	7023.1735
+Chouteau 	:	30	:	10352.23
+Custer 	:	30	:	9824.4398
+Daniels 	:	30	:	3694.6868
+Dawson 	:	30	:	6172.3067
+Deer Lodge 	:	30	:	1919.6044
+Fallon 	:	30	:	4203.6218
+Fergus 	:	30	:	11267.4324
+Flathead 	:	30	:	13614.2055
+Gallatin 	:	30	:	6816.4656
+Garfield 	:	30	:	12555.1286
+Glacier 	:	30	:	7866.1149
+Golden Valley 	:	30	:	3046.876
+Granite 	:	30	:	4488.7549
+Hill 	:	30	:	7552.5695
+Jefferson 	:	30	:	4296.3697
+Judith Basin 	:	30	:	4845.1389
+Lake 	:	30	:	4283.1348
+Lewis and Clark 	:	30	:	9058.6804
+Liberty 	:	30	:	3748.2221
+Lincoln 	:	30	:	9518.5349
+McCone 	:	30	:	6948.3743
+Madison 	:	30	:	9331.3815
+Meagher 	:	30	:	6202.6097
+Mineral 	:	30	:	3168.5542
+Missoula 	:	30	:	6781.5006
+Musselshell 	:	30	:	4845.6569
+Park 	:	30	:	7287.1981
+Petroleum 	:	30	:	4335.6859
+Phillips 	:	30	:	13499.5203
+Pondera 	:	30	:	4247.2115
+Powder River 	:	30	:	8541.6646
+Powell 	:	30	:	6041.6412
+Prairie 	:	30	:	4513.2304
+Ravalli 	:	30	:	6216.8288
+Richland 	:	30	:	5446.8218
+Roosevelt 	:	30	:	6137.3935
+Rosebud 	:	30	:	13019.7746
+Sanders 	:	30	:	7226.1777
+Sheridan 	:	30	:	4419.317
+Silver Bow 	:	30	:	1862.1323
+Stillwater 	:	30	:	4673.9399
+Sweet Grass 	:	30	:	4822.58
+Teton 	:	30	:	5937.7822
+Toole 	:	30	:	5039.7774
+Treasure 	:	30	:	2548.8449
+Valley 	:	30	:	13110.5282
+Wheatland 	:	30	:	3699.2711
+Wibaux 	:	30	:	2305.3331
+Yellowstone 	:	30	:	6861.0395
+Adams 	:	31	:	1461.1744
+Antelope 	:	31	:	2223.3337
+Arthur 	:	31	:	1860.4488
+Banner 	:	31	:	1933.0983
+Blaine 	:	31	:	1850.1406
+Boone 	:	31	:	1779.9775
+Box Butte 	:	31	:	2791.6056
+Boyd 	:	31	:	1410.4881
+Brown 	:	31	:	3172.9572
+Buffalo 	:	31	:	2525.9493
+Burt 	:	31	:	1287.489
+Butler 	:	31	:	1513.6219
+Cass 	:	31	:	1466.4839
+Cedar 	:	31	:	1931.6479
+Chase 	:	31	:	2324.8617
+Cherry 	:	31	:	15564.7086
+Cheyenne 	:	31	:	3098.8055
+Clay 	:	31	:	1485.4427
+Colfax 	:	31	:	1084.1222
+Cuming 	:	31	:	1488.0586
+Custer 	:	31	:	6672.0472
+Dakota 	:	31	:	692.5401
+Dawes 	:	31	:	3628.2274
+Dawson 	:	31	:	2639.987
+Deuel 	:	31	:	1141.6461
+Dixon 	:	31	:	1250.2448
+Dodge 	:	31	:	1408.7528
+Douglas 	:	31	:	879.564
+Dundy 	:	31	:	2384.8461
+Fillmore 	:	31	:	1493.4458
+Franklin 	:	31	:	1492.1249
+Frontier 	:	31	:	2538.3554
+Furnas 	:	31	:	1866.1209
+Gage 	:	31	:	2227.2446
+Garden 	:	31	:	4483.29
+Garfield 	:	31	:	1479.7706
+Gosper 	:	31	:	1198.4966
+Grant 	:	31	:	2028.5657
+Greeley 	:	31	:	1478.1389
+Hall 	:	31	:	1430.2498
+Hamilton 	:	31	:	1416.1343
+Harlan 	:	31	:	1487.1262
+Hayes 	:	31	:	1847.5247
+Hitchcock 	:	31	:	1861.0963
+Holt 	:	31	:	6261.7135
+Hooker 	:	31	:	1868.7109
+Howard 	:	31	:	1491.1666
+Jefferson 	:	31	:	1490.545
+Johnson 	:	31	:	975.9638
+Kearney 	:	31	:	1336.7767
+Keith 	:	31	:	2874.3043
+Keya Paha 	:	31	:	2005.1003
+Kimball 	:	31	:	2466.4829
+Knox 	:	31	:	2951.6935
+Lancaster 	:	31	:	2192.9789
+Lincoln 	:	31	:	6669.509
+Logan 	:	31	:	1479.2785
+Loup 	:	31	:	1478.9418
+McPherson 	:	31	:	2227.4518
+Madison 	:	31	:	1489.3795
+Merrick 	:	31	:	1281.3248
+Morrill 	:	31	:	3703.2079
+Nance 	:	31	:	1160.4236
+Nemaha 	:	31	:	1066.7951
+Nuckolls 	:	31	:	1491.7364
+Otoe 	:	31	:	1603.4431
+Pawnee 	:	31	:	1121.3405
+Perkins 	:	31	:	2290.2593
+Phelps 	:	31	:	1400.154
+Pierce 	:	31	:	1489.9493
+Platte 	:	31	:	1784.7172
+Polk 	:	31	:	1141.4648
+Red Willow 	:	31	:	1859.7754
+Richardson 	:	31	:	1439.9105
+Rock 	:	31	:	2620.6915
+Saline 	:	31	:	1491.9954
+Sarpy 	:	31	:	640.4552
+Saunders 	:	31	:	1965.3438
+Scotts Bluff 	:	31	:	1930.845
+Seward 	:	31	:	1491.1407
+Sheridan 	:	31	:	6397.2741
+Sherman 	:	31	:	1480.5217
+Sioux 	:	31	:	5354.3588
+Stanton 	:	31	:	1116.4454
+Thayer 	:	31	:	1490.027
+Thomas 	:	31	:	1848.3535
+Thurston 	:	31	:	1026.2875
+Valley 	:	31	:	1477.6209
+Washington 	:	31	:	1019.8384
+Wayne 	:	31	:	1148.6132
+Webster 	:	31	:	1489.3018
+Wheeler 	:	31	:	1490.7263
+York 	:	31	:	1491.8918
+Churchill 	:	32	:	13010.5542
+Clark 	:	32	:	20954.8094
+Douglas 	:	32	:	1910.5135
+Elko 	:	32	:	44555.6146
+Esmeralda 	:	32	:	9295.51
+Eureka 	:	32	:	10826.0964
+Humboldt 	:	32	:	25013.8833
+Lander 	:	32	:	14295.4273
+Lincoln 	:	32	:	27549.2343
+Lyon 	:	32	:	5222.476
+Mineral 	:	32	:	9875.5923
+Nye 	:	32	:	47031.1107
+Pershing 	:	32	:	15714.9545
+Storey 	:	32	:	683.242
+Washoe 	:	32	:	16967.9188
+White Pine 	:	32	:	23042.194
+Carson City	:	32	:	403.1594
+Belknap 	:	33	:	1213.5445
+Carroll 	:	33	:	2569.9016
+Cheshire 	:	33	:	1888.4985
+Coos 	:	33	:	4743.4296
+Grafton 	:	33	:	4532.7072
+Hillsborough 	:	33	:	2310.798
+Merrimack 	:	33	:	2477.3091
+Rockingham 	:	33	:	2056.3564
+Strafford 	:	33	:	994.3269
+Sullivan 	:	33	:	1429.4728
+Atlantic 	:	34	:	1739.0555
+Bergen 	:	34	:	639.212
+Burlington 	:	34	:	2122.3237
+Camden 	:	34	:	589.4322
+Cape May 	:	34	:	1606.5252
+Cumberland 	:	34	:	1752.3681
+Essex 	:	34	:	335.5604
+Gloucester 	:	34	:	872.6228
+Hudson 	:	34	:	161.6937
+Hunterdon 	:	34	:	1133.7984
+Mercer 	:	34	:	592.6956
+Middlesex 	:	34	:	835.3009
+Monmouth 	:	34	:	1722.6608
+Morris 	:	34	:	1246.5411
+Ocean 	:	34	:	2372.1292
+Passaic 	:	34	:	510.3595
+Salem 	:	34	:	964.9563
+Somerset 	:	34	:	790.0795
+Sussex 	:	34	:	1388.2141
+Union 	:	34	:	273.1414
+Warren 	:	34	:	939.5225
+Bernalillo 	:	35	:	3026.8035
+Catron 	:	35	:	17946.1877
+Chaves 	:	35	:	15734.4313
+Cibola 	:	35	:	11763.0289
+Colfax 	:	35	:	9759.2495
+Curry 	:	35	:	3645.8653
+De Baca 	:	35	:	6044.6197
+Dona Ana 	:	35	:	9879.8658
+Eddy 	:	35	:	10871.7063
+Grant 	:	35	:	10275.825
+Guadalupe 	:	35	:	7851.7922
+Harding 	:	35	:	5506.2105
+Hidalgo 	:	35	:	8924.9069
+Lea 	:	35	:	11380.5118
+Lincoln 	:	35	:	12512.9375
+Los Alamos 	:	35	:	283.2165
+Luna 	:	35	:	7680.0752
+McKinley 	:	35	:	14129.0198
+Mora 	:	35	:	5007.7132
+Otero 	:	35	:	17165.0437
+Quay 	:	35	:	7463.862
+Rio Arriba 	:	35	:	15270.899
+Roosevelt 	:	35	:	6358.1133
+Sandoval 	:	35	:	9620.0888
+San Juan 	:	35	:	14344.3524
+San Miguel 	:	35	:	12265.2817
+Santa Fe 	:	35	:	4948.9461
+Sierra 	:	35	:	10972.017
+Socorro 	:	35	:	17220.1589
+Taos 	:	35	:	5709.9658
+Torrance 	:	35	:	8665.6479
+Union 	:	35	:	9921.7461
+Valencia 	:	35	:	2766.6639
+Albany 	:	36	:	1381.0139
+Allegany 	:	36	:	2679.1478
+Bronx 	:	36	:	148.7437
+Broome 	:	36	:	1853.0414
+Cattaraugus 	:	36	:	3424.6275
+Cayuga 	:	36	:	2236.8276
+Chautauqua 	:	36	:	3885.0518
+Chemung 	:	36	:	1063.9461
+Chenango 	:	36	:	2327.633
+Clinton 	:	36	:	2894.6099
+Columbia 	:	36	:	1679.0193
+Cortland 	:	36	:	1298.9368
+Delaware 	:	36	:	3802.2236
+Dutchess 	:	36	:	2137.7342
+Erie 	:	36	:	3177.6451
+Essex 	:	36	:	4963.735
+Franklin 	:	36	:	4396.3696
+Fulton 	:	36	:	1380.211
+Genesee 	:	36	:	1282.9047
+Greene 	:	36	:	1704.5567
+Hamilton 	:	36	:	4682.2279
+Herkimer 	:	36	:	3777.1265
+Jefferson 	:	36	:	4809.8372
+Kings 	:	36	:	250.971
+Lewis 	:	36	:	3340.8151
+Livingston 	:	36	:	1658.7396
+Madison 	:	36	:	1713.3886
+Monroe 	:	36	:	3536.9299
+Montgomery 	:	36	:	1062.7288
+Nassau 	:	36	:	1173.4772
+New York 	:	36	:	87.4643
+Niagara 	:	36	:	2952.1597
+Oneida 	:	36	:	3255.9149
+Onondaga 	:	36	:	2086.7371
+Ontario 	:	36	:	1715.6937
+Orange 	:	36	:	2171.8445
+Orleans 	:	36	:	2117.2473
+Oswego 	:	36	:	3398.5462
+Otsego 	:	36	:	2629.109
+Putnam 	:	36	:	637.7875
+Queens 	:	36	:	461.7452
+Rensselaer 	:	36	:	1723.3601
+Richmond 	:	36	:	265.475
+Rockland 	:	36	:	516.2906
+St. Lawrence 	:	36	:	7307.6332
+Saratoga 	:	36	:	2185.2089
+Schenectady 	:	36	:	542.9158
+Schoharie 	:	36	:	1622.2724
+Schuyler 	:	36	:	886.3498
+Seneca 	:	36	:	1011.4209
+Steuben 	:	36	:	3636.619
+Suffolk 	:	36	:	6146.2513
+Sullivan 	:	36	:	2581.8415
+Tioga 	:	36	:	1354.3369
+Tompkins 	:	36	:	1273.3217
+Ulster 	:	36	:	3006.3684
+Warren 	:	36	:	2412.9994
+Washington 	:	36	:	2190.7256
+Wayne 	:	36	:	3584.9226
+Westchester 	:	36	:	1295.2072
+Wyoming 	:	36	:	1544.7796
+Yates 	:	36	:	973.2184
+Alamance 	:	37	:	1126.0543
+Alexander 	:	37	:	681.5326
+Alleghany 	:	37	:	609.9968
+Anson 	:	37	:	1391.1667
+Ashe 	:	37	:	1105.3602
+Avery 	:	37	:	640.2739
+Beaufort 	:	37	:	2483.0071
+Bertie 	:	37	:	1919.7598
+Bladen 	:	37	:	2297.6667
+Brunswick 	:	37	:	2719.5259
+Buncombe 	:	37	:	1708.882
+Burke 	:	37	:	1333.5651
+Cabarrus 	:	37	:	945.2982
+Caldwell 	:	37	:	1228.4111
+Camden 	:	37	:	791.763
+Carteret 	:	37	:	3471.9727
+Caswell 	:	37	:	1109.6337
+Catawba 	:	37	:	1070.9909
+Chatham 	:	37	:	1836.4395
+Cherokee 	:	37	:	1208.7012
+Chowan 	:	37	:	604.2729
+Clay 	:	37	:	571.354
+Cleveland 	:	37	:	1213.674
+Columbus 	:	37	:	2469.824
+Craven 	:	37	:	2005.0226
+Cumberland 	:	37	:	1705.4114
+Currituck 	:	37	:	1361.4335
+Dare 	:	37	:	4044.3109
+Davidson 	:	37	:	1467.9343
+Davie 	:	37	:	691.2451
+Duplin 	:	37	:	2121.4949
+Durham 	:	37	:	771.2761
+Edgecombe 	:	37	:	1312.0422
+Forsyth 	:	37	:	1069.4628
+Franklin 	:	37	:	1280.9881
+Gaston 	:	37	:	941.5686
+Gates 	:	37	:	895.104
+Graham 	:	37	:	781.144
+Granville 	:	37	:	1389.6904
+Greene 	:	37	:	688.6551
+Guilford 	:	37	:	1703.443
+Halifax 	:	37	:	1894.1965
+Harnett 	:	37	:	1557.367
+Haywood 	:	37	:	1436.4658
+Henderson 	:	37	:	971.3536
+Hertford 	:	37	:	933.4878
+Hoke 	:	37	:	1016.1606
+Hyde 	:	37	:	3688.16
+Iredell 	:	37	:	1546.2559
+Jackson 	:	37	:	1280.755
+Johnston 	:	37	:	2061.0961
+Jones 	:	37	:	1225.8988
+Lee 	:	37	:	671.6647
+Lenoir 	:	37	:	1041.4131
+Lincoln 	:	37	:	795.2077
+McDowell 	:	37	:	1156.2019
+Macon 	:	37	:	1345.4273
+Madison 	:	37	:	1169.6181
+Martin 	:	37	:	1195.2591
+Mecklenburg 	:	37	:	1414.7098
+Mitchell 	:	37	:	575.3426
+Montgomery 	:	37	:	1299.2476
+Moore 	:	37	:	1827.6853
+Nash 	:	37	:	1405.5671
+New Hanover 	:	37	:	849.3128
+Northampton 	:	37	:	1426.0799
+Onslow 	:	37	:	2353.1704
+Orange 	:	37	:	1039.1339
+Pamlico 	:	37	:	1466.5357
+Pasquotank 	:	37	:	749.6496
+Pender 	:	37	:	2415.5376
+Perquimans 	:	37	:	851.9287
+Person 	:	37	:	1046.5931
+Pitt 	:	37	:	1695.8543
+Polk 	:	37	:	617.974
+Randolph 	:	37	:	2045.9187
+Richmond 	:	37	:	1242.1122
+Robeson 	:	37	:	2463.1677
+Rockingham 	:	37	:	1482.3347
+Rowan 	:	37	:	1356.7974
+Rutherford 	:	37	:	1465.681
+Sampson 	:	37	:	2453.8955
+Scotland 	:	37	:	830.4576
+Stanly 	:	37	:	1047.0334
+Stokes 	:	37	:	1180.7551
+Surry 	:	37	:	1392.8761
+Swain 	:	37	:	1400.2576
+Transylvania 	:	37	:	985.6504
+Tyrrell 	:	37	:	1554.777
+Union 	:	37	:	1656.5381
+Vance 	:	37	:	698.8338
+Wake 	:	37	:	2220.3034
+Warren 	:	37	:	1149.442
+Washington 	:	37	:	1099.1701
+Watauga 	:	37	:	809.9707
+Wayne 	:	37	:	1441.8271
+Wilkes 	:	37	:	1968.2187
+Wilson 	:	37	:	969.3334
+Yadkin 	:	37	:	874.0991
+Yancey 	:	37	:	810.9549
+Adams 	:	38	:	2561.0956
+Barnes 	:	38	:	3919.2657
+Benson 	:	38	:	3727.7093
+Billings 	:	38	:	2987.306
+Bottineau 	:	38	:	4397.1466
+Bowman 	:	38	:	3022.5041
+Burke 	:	38	:	2924.7834
+Burleigh 	:	38	:	4320.2236
+Cass 	:	38	:	4578.8869
+Cavalier 	:	38	:	3911.2626
+Dickey 	:	38	:	2956.8994
+Divide 	:	38	:	3351.9262
+Dunn 	:	38	:	5393.0275
+Eddy 	:	38	:	1668.5557
+Emmons 	:	38	:	4026.7248
+Foster 	:	38	:	1675.0048
+Golden Valley 	:	38	:	2596.1124
+Grand Forks 	:	38	:	3729.1597
+Grant 	:	38	:	4314.7328
+Griggs 	:	38	:	1854.8803
+Hettinger 	:	38	:	2936.283
+Kidder 	:	38	:	3712.0139
+LaMoure 	:	38	:	2980.5979
+Logan 	:	38	:	2618.6713
+McHenry 	:	38	:	4951.3289
+McIntosh 	:	38	:	2577.1536
+McKenzie 	:	38	:	7409.7051
+McLean 	:	38	:	6029.9603
+Mercer 	:	38	:	2881.1678
+Morton 	:	38	:	5038.2752
+Mountrail 	:	38	:	5027.3972
+Nelson 	:	38	:	2612.6366
+Oliver 	:	38	:	1893.7821
+Pembina 	:	38	:	2905.3066
+Pierce 	:	38	:	2802.7944
+Ramsey 	:	38	:	3369.2792
+Ransom 	:	38	:	2238.0967
+Renville 	:	38	:	2310.3577
+Richland 	:	38	:	3744.4407
+Rolette 	:	38	:	2432.8647
+Sargent 	:	38	:	2245.7631
+Sheridan 	:	38	:	2604.9702
+Sioux 	:	38	:	2922.297
+Slope 	:	38	:	3157.7798
+Stark 	:	38	:	3471.7914
+Steele 	:	38	:	1853.1191
+Stutsman 	:	38	:	5952.4934
+Towner 	:	38	:	2697.6404
+Traill 	:	38	:	2233.9527
+Walsh 	:	38	:	3351.7449
+Ward 	:	38	:	5325.6875
+Wells 	:	38	:	3342.7058
+Williams 	:	38	:	5563.2423
+Adams 	:	39	:	1517.1961
+Allen 	:	39	:	1053.8192
+Ashland 	:	39	:	1105.5415
+Ashtabula 	:	39	:	3544.3373
+Athens 	:	39	:	1317.1186
+Auglaize 	:	39	:	1040.4548
+Belmont 	:	39	:	1402.2001
+Brown 	:	39	:	1282.6198
+Butler 	:	39	:	1217.818
+Carroll 	:	39	:	1033.4359
+Champaign 	:	39	:	1112.9489
+Clark 	:	39	:	1045.2204
+Clermont 	:	39	:	1185.3653
+Clinton 	:	39	:	1067.8311
+Columbiana 	:	39	:	1386.1162
+Coshocton 	:	39	:	1470.0322
+Crawford 	:	39	:	1043.3297
+Cuyahoga 	:	39	:	3226.0004
+Darke 	:	39	:	1554.7511
+Defiance 	:	39	:	1072.7521
+Delaware 	:	39	:	1180.9623
+Erie 	:	39	:	1621.7285
+Fairfield 	:	39	:	1317.274
+Fayette 	:	39	:	1054.3372
+Franklin 	:	39	:	1407.1988
+Fulton 	:	39	:	1054.9588
+Gallia 	:	39	:	1220.2267
+Geauga 	:	39	:	1057.4711
+Greene 	:	39	:	1077.9839
+Guernsey 	:	39	:	1368.2711
+Hamilton 	:	39	:	1069.1002
+Hancock 	:	39	:	1382.024
+Hardin 	:	39	:	1218.6986
+Harrison 	:	39	:	1063.9461
+Henry 	:	39	:	1087.7482
+Highland 	:	39	:	1444.8056
+Hocking 	:	39	:	1097.124
+Holmes 	:	39	:	1098.2118
+Huron 	:	39	:	1280.8068
+Jackson 	:	39	:	1091.685
+Jefferson 	:	39	:	1064.1533
+Knox 	:	39	:	1371.4827
+Lake 	:	39	:	2535.2733
+Lawrence 	:	39	:	1184.3552
+Licking 	:	39	:	1782.9042
+Logan 	:	39	:	1208.9602
+Lorain 	:	39	:	2390.6218
+Lucas 	:	39	:	1543.3292
+Madison 	:	39	:	1207.4062
+Mahoning 	:	39	:	1096.5542
+Marion 	:	39	:	1046.7485
+Medina 	:	39	:	1095.8549
+Meigs 	:	39	:	1119.8642
+Mercer 	:	39	:	1225.8211
+Miami 	:	39	:	1059.8798
+Monroe 	:	39	:	1184.8214
+Montgomery 	:	39	:	1202.6406
+Morgan 	:	39	:	1092.6174
+Morrow 	:	39	:	1055.0624
+Muskingum 	:	39	:	1742.0081
+Noble 	:	39	:	1047.8881
+Ottawa 	:	39	:	1515.4608
+Paulding 	:	39	:	1084.951
+Perry 	:	39	:	1068.6081
+Pickaway 	:	39	:	1312.5861
+Pike 	:	39	:	1149.8046
+Portage 	:	39	:	1313.4149
+Preble 	:	39	:	1104.1947
+Putnam 	:	39	:	1254.1557
+Richland 	:	39	:	1295.8547
+Ross 	:	39	:	1794.7664
+Sandusky 	:	39	:	1082.0243
+Scioto 	:	39	:	1595.6213
+Seneca 	:	39	:	1430.6383
+Shelby 	:	39	:	1064.5677
+Stark 	:	39	:	1504.5569
+Summit 	:	39	:	1087.9554
+Trumbull 	:	39	:	1643.9248
+Tuscarawas 	:	39	:	1480.1332
+Union 	:	39	:	1131.7782
+Van Wert 	:	39	:	1063.1691
+Vinton 	:	39	:	1074.7464
+Warren 	:	39	:	1054.4926
+Washington 	:	39	:	1657.9885
+Wayne 	:	39	:	1440.8429
+Williams 	:	39	:	1095.6995
+Wood 	:	39	:	1607.1986
+Wyandot 	:	39	:	1055.7358
+Adair 	:	40	:	1494.5077
+Alfalfa 	:	40	:	2282.9296
+Atoka 	:	40	:	2564.1
+Beaver 	:	40	:	4707.5322
+Beckham 	:	40	:	2341.7226
+Blaine 	:	40	:	2431.6992
+Bryan 	:	40	:	2443.4837
+Caddo 	:	40	:	3341.9029
+Canadian 	:	40	:	2344.3903
+Carter 	:	40	:	2159.3348
+Cherokee 	:	40	:	2010.876
+Choctaw 	:	40	:	2073.7612
+Cimarron 	:	40	:	4768.6303
+Cleveland 	:	40	:	1446.1006
+Coal 	:	40	:	1350.167
+Comanche 	:	40	:	2807.0938
+Cotton 	:	40	:	1662.6246
+Craig 	:	40	:	1975.4189
+Creek 	:	40	:	2511.7043
+Custer 	:	40	:	2595.18
+Delaware 	:	40	:	2052.1347
+Dewey 	:	40	:	2611.3934
+Ellis 	:	40	:	3190.4656
+Garfield 	:	40	:	2745.2446
+Garvin 	:	40	:	2107.3794
+Grady 	:	40	:	2862.727
+Grant 	:	40	:	2599.3499
+Greer 	:	40	:	1667.0794
+Harmon 	:	40	:	1394.8704
+Harper 	:	40	:	2696.0864
+Haskell 	:	40	:	1619.4493
+Hughes 	:	40	:	2109.9176
+Jackson 	:	40	:	2082.7485
+Jefferson 	:	40	:	2004.2197
+Johnston 	:	40	:	1704.9711
+Kay 	:	40	:	2447.8608
+Kingfisher 	:	40	:	2346.4364
+Kiowa 	:	40	:	2669.4094
+Latimer 	:	40	:	1888.4208
+Le Flore 	:	40	:	4164.7977
+Lincoln 	:	40	:	2500.9558
+Logan 	:	40	:	1939.7028
+Love 	:	40	:	1377.7246
+McClain 	:	40	:	1502.5367
+McCurtain 	:	40	:	4924.4188
+McIntosh 	:	40	:	1845.3232
+Major 	:	40	:	2480.8833
+Marshall 	:	40	:	1105.8005
+Mayes 	:	40	:	1770.2909
+Murray 	:	40	:	1100.5428
+Muskogee 	:	40	:	2172.9841
+Noble 	:	40	:	1922.9196
+Nowata 	:	40	:	1504.4533
+Okfuskee 	:	40	:	1628.8769
+Oklahoma 	:	40	:	1860.4229
+Okmulgee 	:	40	:	1819.0088
+Osage 	:	40	:	5966.842
+Ottawa 	:	40	:	1255.4507
+Pawnee 	:	40	:	1540.7133
+Payne 	:	40	:	1805.5667
+Pittsburg 	:	40	:	3568.6315
+Pontotoc 	:	40	:	1878.9155
+Pottawatomie 	:	40	:	2054.5434
+Pushmataha 	:	40	:	3685.0002
+Roger Mills 	:	40	:	2969.3314
+Rogers 	:	40	:	1842.6296
+Seminole 	:	40	:	1659.0763
+Sequoyah 	:	40	:	1851.5392
+Stephens 	:	40	:	2308.0008
+Texas 	:	40	:	5306.4179
+Tillman 	:	40	:	2277.1539
+Tulsa 	:	40	:	1520.3818
+Wagoner 	:	40	:	1530.6641
+Washington 	:	40	:	1098.5485
+Washita 	:	40	:	2613.4913
+Woods 	:	40	:	3341.2813
+Woodward 	:	40	:	3227.1659
+Baker 	:	41	:	7999.0337
+Benton 	:	41	:	1758.5323
+Clackamas 	:	41	:	4866.6359
+Clatsop 	:	41	:	2809.5025
+Columbia 	:	41	:	1782.7747
+Coos 	:	41	:	4678.5242
+Crook 	:	41	:	7737.3919
+Curry 	:	41	:	5150.3963
+Deschutes 	:	41	:	7911.8543
+Douglas 	:	41	:	13296.6197
+Gilliam 	:	41	:	3167.1556
+Grant 	:	41	:	11730.9388
+Harney 	:	41	:	26486.6091
+Hood River 	:	41	:	1381.9204
+Jackson 	:	41	:	7256.5843
+Jefferson 	:	41	:	4639.1303
+Josephine 	:	41	:	4251.8217
+Klamath 	:	41	:	15891.5925
+Lake 	:	41	:	21648.4373
+Lane 	:	41	:	12229.4361
+Lincoln 	:	41	:	3091.9161
+Linn 	:	41	:	5983.2885
+Malheur 	:	41	:	25718.6741
+Marion 	:	41	:	3092.7967
+Morrow 	:	41	:	5305.6927
+Multnomah 	:	41	:	1206.0335
+Polk 	:	41	:	1927.3485
+Sherman 	:	41	:	2152.808
+Tillamook 	:	41	:	3451.9002
+Umatilla 	:	41	:	8368.9375
+Union 	:	41	:	5279.8445
+Wallowa 	:	41	:	8162.8771
+Wasco 	:	41	:	6203.8788
+Washington 	:	41	:	1881.3242
+Wheeler 	:	41	:	4443.0414
+Yamhill 	:	41	:	1860.5524
+Adams 	:	42	:	1350.7368
+Allegheny 	:	42	:	1928.7989
+Armstrong 	:	42	:	1720.8996
+Beaver 	:	42	:	1149.701
+Bedford 	:	42	:	2635.066
+Berks 	:	42	:	2242.0853
+Blair 	:	42	:	1365.2149
+Bradford 	:	42	:	3007.0677
+Bucks 	:	42	:	1611.2649
+Butler 	:	42	:	2058.5061
+Cambria 	:	42	:	1795.9837
+Cameron 	:	42	:	1032.374
+Carbon 	:	42	:	1002.9257
+Centre 	:	42	:	2879.6915
+Chester 	:	42	:	1967.9079
+Clarion 	:	42	:	1577.1805
+Clearfield 	:	42	:	2988.342
+Clinton 	:	42	:	2326.0531
+Columbia 	:	42	:	1268.5561
+Crawford 	:	42	:	2687.7466
+Cumberland 	:	42	:	1427.4526
+Dauphin 	:	42	:	1444.0027
+Delaware 	:	42	:	494.0166
+Elk 	:	42	:	2155.4757
+Erie 	:	42	:	4036.256
+Fayette 	:	42	:	2066.82
+Forest 	:	42	:	1117.326
+Franklin 	:	42	:	2001.1117
+Fulton 	:	42	:	1134.4977
+Greene 	:	42	:	1496.8905
+Huntingdon 	:	42	:	2302.5877
+Indiana 	:	42	:	2160.8111
+Jefferson 	:	42	:	1701.2933
+Juniata 	:	42	:	1019.3463
+Lackawanna 	:	42	:	1203.0809
+Lancaster 	:	42	:	2548.0679
+Lawrence 	:	42	:	939.5484
+Lebanon 	:	42	:	939.134
+Lehigh 	:	42	:	902.2006
+Luzerne 	:	42	:	2349.4667
+Lycoming 	:	42	:	3221.3643
+McKean 	:	42	:	2549.0003
+Mercer 	:	42	:	1767.8563
+Mifflin 	:	42	:	1073.814
+Monroe 	:	42	:	1599.1178
+Montgomery 	:	42	:	1262.4955
+Montour 	:	42	:	342.657
+Northampton 	:	42	:	977.3624
+Northumberland 	:	42	:	1236.4142
+Perry 	:	42	:	1439.4443
+Philadelphia 	:	42	:	369.4376
+Pike 	:	42	:	1467.5976
+Potter 	:	42	:	2800.8778
+Schuylkill 	:	42	:	2026.9599
+Snyder 	:	42	:	860.2944
+Somerset 	:	42	:	2800.2303
+Sullivan 	:	42	:	1171.5865
+Susquehanna 	:	42	:	2155.916
+Tioga 	:	42	:	2945.607
+Union 	:	42	:	821.3408
+Venango 	:	42	:	1769.0218
+Warren 	:	42	:	2325.3279
+Washington 	:	42	:	2229.8605
+Wayne 	:	42	:	1943.8986
+Westmoreland 	:	42	:	2684.1206
+Wyoming 	:	42	:	1048.4061
+York 	:	42	:	2357.5475
+Bristol 	:	44	:	115.7989
+Kent 	:	44	:	487.179
+Newport 	:	44	:	812.3276
+Providence 	:	44	:	1128.7738
+Washington 	:	44	:	1457.5743
+Abbeville 	:	45	:	1323.6195
+Aiken 	:	45	:	2798.3914
+Allendale 	:	45	:	1068.5822
+Anderson 	:	45	:	1961.7955
+Bamberg 	:	45	:	1024.2673
+Barnwell 	:	45	:	1443.2775
+Beaufort 	:	45	:	2390.2592
+Berkeley 	:	45	:	3180.7013
+Calhoun 	:	45	:	1016.1606
+Charleston 	:	45	:	3517.5049
+Cherokee 	:	45	:	1028.9552
+Chester 	:	45	:	1518.1544
+Chesterfield 	:	45	:	2086.9702
+Clarendon 	:	45	:	1801.7594
+Colleton 	:	45	:	2935.0139
+Darlington 	:	45	:	1467.9602
+Dillon 	:	45	:	1052.9386
+Dorchester 	:	45	:	1493.6271
+Edgefield 	:	45	:	1311.9386
+Fairfield 	:	45	:	1838.7187
+Florence 	:	45	:	2081.6866
+Georgetown 	:	45	:	2680.65
+Greenville 	:	45	:	2058.9464
+Greenwood 	:	45	:	1199.0146
+Hampton 	:	45	:	1457.2117
+Horry 	:	45	:	3250.3464
+Jasper 	:	45	:	1812.4561
+Kershaw 	:	45	:	1917.2475
+Lancaster 	:	45	:	1438.2011
+Laurens 	:	45	:	1875.1082
+Lee 	:	45	:	1065.267
+Lexington 	:	45	:	1962.9092
+McCormick 	:	45	:	1020.0715
+Marion 	:	45	:	1279.6931
+Marlboro 	:	45	:	1256.8752
+Newberry 	:	45	:	1676.4552
+Oconee 	:	45	:	1744.5722
+Orangeburg 	:	45	:	2921.7531
+Pickens 	:	45	:	1325.6915
+Richland 	:	45	:	1998.7548
+Saluda 	:	45	:	1196.0102
+Spartanburg 	:	45	:	2121.5726
+Sumter 	:	45	:	1766.4577
+Union 	:	45	:	1336.2328
+Williamsburg 	:	45	:	2426.6228
+York 	:	45	:	1801.9148
+Aurora 	:	46	:	1845.4527
+Beadle 	:	46	:	3275.8838
+Bennett 	:	46	:	3083.6281
+Bon Homme 	:	46	:	1505.6188
+Brookings 	:	46	:	2084.3284
+Brown 	:	46	:	4483.8339
+Brule 	:	46	:	2192.4091
+Buffalo 	:	46	:	1262.4437
+Butte 	:	46	:	5869.8724
+Campbell 	:	46	:	1997.7706
+Charles Mix 	:	46	:	2978.9921
+Clark 	:	46	:	2506.5761
+Clay 	:	46	:	1079.253
+Codington 	:	46	:	1857.2372
+Corson 	:	46	:	6551.1978
+Custer 	:	46	:	4038.1726
+Davison 	:	46	:	1131.2602
+Day 	:	46	:	2826.2339
+Deuel 	:	46	:	1649.1048
+Dewey 	:	46	:	6334.2853
+Douglas 	:	46	:	1124.3967
+Edmunds 	:	46	:	2981.5044
+Fall River 	:	46	:	4530.2726
+Faulk 	:	46	:	2604.7371
+Grant 	:	46	:	1781.6869
+Gregory 	:	46	:	2728.4355
+Haakon 	:	46	:	4732.4998
+Hamlin 	:	46	:	1393.3164
+Hand 	:	46	:	3730.1439
+Hanson 	:	46	:	1128.3076
+Harding 	:	46	:	6934.9322
+Hughes 	:	46	:	2072.7511
+Hutchinson 	:	46	:	2109.2183
+Hyde 	:	46	:	2244.4681
+Jackson 	:	46	:	4846.5116
+Jerauld 	:	46	:	1379.5117
+Jones 	:	46	:	2516.5994
+Kingsbury 	:	46	:	2236.9053
+Lake 	:	46	:	1489.4054
+Lawrence 	:	46	:	2072.8029
+Lincoln 	:	46	:	1498.5481
+Lyman 	:	46	:	4421.2854
+McCook 	:	46	:	1494.8444
+McPherson 	:	46	:	2983.2915
+Marshall 	:	46	:	2293.7817
+Meade 	:	46	:	9019.5714
+Mellette 	:	46	:	3392.2525
+Miner 	:	46	:	1481.4541
+Minnehaha 	:	46	:	2107.4571
+Moody 	:	46	:	1349.649
+Pennington 	:	46	:	7211.3629
+Perkins 	:	46	:	7486.9389
+Potter 	:	46	:	2326.9337
+Roberts 	:	46	:	2940.5565
+Sanborn 	:	46	:	1476.8439
+Shannon 	:	46	:	5430.3235
+Spink 	:	46	:	3911.0295
+Stanley 	:	46	:	3929.0041
+Sully 	:	46	:	2772.2324
+Todd 	:	46	:	3602.431
+Tripp 	:	46	:	4189.066
+Turner 	:	46	:	1599.1955
+Union 	:	46	:	1209.7372
+Walworth 	:	46	:	1927.5298
+Yankton 	:	46	:	1379.4858
+Ziebach 	:	46	:	5105.0195
+Anderson 	:	47	:	893.0838
+Bedford 	:	47	:	1229.8097
+Benton 	:	47	:	1129.758
+Bledsoe 	:	47	:	1053.3789
+Blount 	:	47	:	1467.6235
+Bradley 	:	47	:	858.585
+Campbell 	:	47	:	1290.4675
+Cannon 	:	47	:	688.1889
+Carroll 	:	47	:	1553.6374
+Carter 	:	47	:	900.3358
+Cheatham 	:	47	:	795.4667
+Chester 	:	47	:	747.8366
+Claiborne 	:	47	:	1143.6145
+Clay 	:	47	:	671.4575
+Cocke 	:	47	:	1147.7585
+Coffee 	:	47	:	1125.2514
+Crockett 	:	47	:	687.5673
+Cumberland 	:	47	:	1774.0205
+Davidson 	:	47	:	1362.6249
+Decatur 	:	47	:	893.3169
+DeKalb 	:	47	:	852.0582
+Dickson 	:	47	:	1272.4152
+Dyer 	:	47	:	1363.5832
+Fayette 	:	47	:	1829.1357
+Fentress 	:	47	:	1292.3323
+Franklin 	:	47	:	1491.2443
+Gibson 	:	47	:	1563.2981
+Giles 	:	47	:	1582.9303
+Grainger 	:	47	:	783.3196
+Greene 	:	47	:	1616.4449
+Grundy 	:	47	:	935.3526
+Hamblen 	:	47	:	455.2443
+Hamilton 	:	47	:	1491.1148
+Hancock 	:	47	:	578.865
+Hardeman 	:	47	:	1736.3101
+Hardin 	:	47	:	1544.4429
+Hawkins 	:	47	:	1294.0417
+Haywood 	:	47	:	1383.4485
+Henderson 	:	47	:	1362.1069
+Henry 	:	47	:	1537.0355
+Hickman 	:	47	:	1586.893
+Houston 	:	47	:	535.9228
+Humphreys 	:	47	:	1441.9048
+Jackson 	:	47	:	827.6604
+Jefferson 	:	47	:	814.1147
+Johnson 	:	47	:	784.0707
+Knox 	:	47	:	1361.7702
+Lake 	:	47	:	501.9161
+Lauderdale 	:	47	:	1313.4926
+Lawrence 	:	47	:	1600.3869
+Lewis 	:	47	:	731.6232
+Lincoln 	:	47	:	1477.9317
+Loudon 	:	47	:	640.5329
+McMinn 	:	47	:	1119.4498
+McNairy 	:	47	:	1452.5756
+Macon 	:	47	:	795.6221
+Madison 	:	47	:	1446.8517
+Marion 	:	47	:	1326.9088
+Marshall 	:	47	:	974.099
+Maury 	:	47	:	1594.1968
+Meigs 	:	47	:	561.4602
+Monroe 	:	47	:	1690.1822
+Montgomery 	:	47	:	1408.5456
+Moore 	:	47	:	337.6842
+Morgan 	:	47	:	1353.016
+Obion 	:	47	:	1438.3565
+Overton 	:	47	:	1126.1838
+Perry 	:	47	:	1095.311
+Pickett 	:	47	:	452.1622
+Polk 	:	47	:	1145.6865
+Putnam 	:	47	:	1042.6304
+Rhea 	:	47	:	871.2501
+Roane 	:	47	:	1022.9982
+Robertson 	:	47	:	1234.5753
+Rutherford 	:	47	:	1616.0046
+Scott 	:	47	:	1381.0398
+Sequatchie 	:	47	:	688.9918
+Sevier 	:	47	:	1548.1207
+Shelby 	:	47	:	2029.6017
+Smith 	:	47	:	842.6565
+Stewart 	:	47	:	1277.388
+Sullivan 	:	47	:	1112.8971
+Sumner 	:	47	:	1406.6808
+Tipton 	:	47	:	1229.5248
+Trousdale 	:	47	:	302.0976
+Unicoi 	:	47	:	483.0091
+Union 	:	47	:	640.0667
+Van Buren 	:	47	:	711.1881
+Warren 	:	47	:	1124.2672
+Washington 	:	47	:	854.182
+Wayne 	:	47	:	1905.1781
+Weakley 	:	47	:	1506.8879
+White 	:	47	:	982.6201
+Williamson 	:	47	:	1511.5758
+Wilson 	:	47	:	1510.488
+Anderson 	:	48	:	2791.8905
+Andrews 	:	48	:	3887.5641
+Angelina 	:	48	:	2238.9255
+Aransas 	:	48	:	1367.3905
+Archer 	:	48	:	2397.7702
+Armstrong 	:	48	:	2366.7679
+Atascosa 	:	48	:	3200.2299
+Austin 	:	48	:	1699.9983
+Bailey 	:	48	:	2142.9142
+Bandera 	:	48	:	2065.6286
+Bastrop 	:	48	:	2320.4328
+Baylor 	:	48	:	2333.6159
+Bee 	:	48	:	2280.0029
+Bell 	:	48	:	2817.7387
+Bexar 	:	48	:	3254.7494
+Blanco 	:	48	:	1847.7319
+Borden 	:	48	:	2346.6436
+Bosque 	:	48	:	2596.8117
+Bowie 	:	48	:	2389.9743
+Brazoria 	:	48	:	4137.3696
+Brazos 	:	48	:	1528.8511
+Brewster 	:	48	:	16039.3002
+Briscoe 	:	48	:	2335.1181
+Brooks 	:	48	:	2443.9499
+Brown 	:	48	:	2478.4746
+Burleson 	:	48	:	1755.4502
+Burnet 	:	48	:	2644.2864
+Caldwell 	:	48	:	1417.7919
+Calhoun 	:	48	:	2673.2944
+Callahan 	:	48	:	2334.2634
+Cameron 	:	48	:	3305.6947
+Camp 	:	48	:	526.288
+Carson 	:	48	:	2393.419
+Cass 	:	48	:	2487.3065
+Castro 	:	48	:	2329.2388
+Chambers 	:	48	:	2258.4541
+Cherokee 	:	48	:	2750.3987
+Childress 	:	48	:	1848.2499
+Clay 	:	48	:	2890.8803
+Cochran 	:	48	:	2008.0529
+Coke 	:	48	:	2403.4423
+Coleman 	:	48	:	3318.9555
+Collin 	:	48	:	2294.3515
+Collingsworth 	:	48	:	2381.3496
+Colorado 	:	48	:	2521.5981
+Comal 	:	48	:	1488.1881
+Comanche 	:	48	:	2454.4653
+Concho 	:	48	:	2573.6571
+Cooke 	:	48	:	2327.9179
+Coryell 	:	48	:	2736.9307
+Cottle 	:	48	:	2335.1181
+Crane 	:	48	:	2034.6781
+Crockett 	:	48	:	7271.2437
+Crosby 	:	48	:	2335.3771
+Culberson 	:	48	:	9874.9189
+Dallam 	:	48	:	3898.6234
+Dallas 	:	48	:	2353.1704
+Dawson 	:	48	:	2336.4908
+Deaf Smith 	:	48	:	3880.4934
+Delta 	:	48	:	719.8128
+Denton 	:	48	:	2480.9092
+DeWitt 	:	48	:	2358.1173
+Dickens 	:	48	:	2344.4939
+Dimmit 	:	48	:	3456.3032
+Donley 	:	48	:	2416.5995
+Duval 	:	48	:	4650.7853
+Eastland 	:	48	:	2413.621
+Ector 	:	48	:	2335.3512
+Edwards 	:	48	:	5490.6705
+Ellis 	:	48	:	2464.7994
+El Paso 	:	48	:	2628.0212
+Erath 	:	48	:	2822.582
+Falls 	:	48	:	2004.1679
+Fannin 	:	48	:	2328.8244
+Fayette 	:	48	:	2485.9856
+Fisher 	:	48	:	2335.5066
+Floyd 	:	48	:	2570.6009
+Foard 	:	48	:	1832.9171
+Fort Bend 	:	48	:	2294.8695
+Franklin 	:	48	:	763.4543
+Freestone 	:	48	:	2310.6167
+Frio 	:	48	:	2937.7852
+Gaines 	:	48	:	3892.3556
+Galveston 	:	48	:	2260.8887
+Garza 	:	48	:	2321.1321
+Gillespie 	:	48	:	2749.2332
+Glasscock 	:	48	:	2333.4087
+Goliad 	:	48	:	2225.7165
+Gonzales 	:	48	:	2770.8338
+Gray 	:	48	:	2406.7575
+Grayson 	:	48	:	2536.1021
+Gregg 	:	48	:	715.7983
+Grimes 	:	48	:	2075.0044
+Guadalupe 	:	48	:	1849.7003
+Hale 	:	48	:	2602.3543
+Hall 	:	48	:	2341.5672
+Hamilton 	:	48	:	2166.2242
+Hansford 	:	48	:	2383.836
+Hardeman 	:	48	:	1805.23
+Hardin 	:	48	:	2324.1883
+Harris 	:	48	:	4604.2171
+Harrison 	:	48	:	2370.0831
+Hartley 	:	48	:	3789.688
+Haskell 	:	48	:	2357.5475
+Hays 	:	48	:	1760.6561
+Hemphill 	:	48	:	2362.2354
+Henderson 	:	48	:	2457.91
+Hidalgo 	:	48	:	4099.0894
+Hill 	:	48	:	2552.8335
+Hockley 	:	48	:	2353.1445
+Hood 	:	48	:	1131.312
+Hopkins 	:	48	:	2053.1966
+Houston 	:	48	:	3203.3897
+Howard 	:	48	:	2341.8521
+Hudspeth 	:	48	:	11841.2987
+Hunt 	:	48	:	2284.4318
+Hutchinson 	:	48	:	2317.9205
+Irion 	:	48	:	2723.6181
+Jack 	:	48	:	2383.0849
+Jackson 	:	48	:	2219.7077
+Jasper 	:	48	:	2511.3158
+Jeff Davis 	:	48	:	5865.314
+Jefferson 	:	48	:	2878.1634
+Jim Hogg 	:	48	:	2942.6544
+Jim Wells 	:	48	:	2248.6898
+Johnson 	:	48	:	1902.2514
+Jones 	:	48	:	2427.1667
+Karnes 	:	48	:	1951.7722
+Kaufman 	:	48	:	2089.6379
+Kendall 	:	48	:	1717.2736
+Kenedy 	:	48	:	5039.104
+Kent 	:	48	:	2338.5369
+Kerr 	:	48	:	2868.8394
+Kimble 	:	48	:	3239.8828
+King 	:	48	:	2365.5247
+Kinney 	:	48	:	3536.1529
+Kleberg 	:	48	:	2823.8511
+Knox 	:	48	:	2215.5637
+Lamar 	:	48	:	2415.0973
+Lamb 	:	48	:	2635.9207
+Lampasas 	:	48	:	1849.1564
+La Salle 	:	48	:	3870.0557
+Lavaca 	:	48	:	2513.2065
+Lee 	:	48	:	1642.1377
+Leon 	:	48	:	2798.1842
+Liberty 	:	48	:	3046.4098
+Limestone 	:	48	:	2416.8585
+Lipscomb 	:	48	:	2414.4498
+Live Oak 	:	48	:	2794.1697
+Llano 	:	48	:	2502.4062
+Loving 	:	48	:	1753.0415
+Lubbock 	:	48	:	2332.813
+Lynn 	:	48	:	2314.0614
+McCulloch 	:	48	:	2779.9765
+McLennan 	:	48	:	2745.9957
+McMullen 	:	48	:	2959.334
+Madison 	:	48	:	1223.6196
+Marion 	:	48	:	1088.7324
+Martin 	:	48	:	2371.4558
+Mason 	:	48	:	2414.3462
+Matagorda 	:	48	:	4175.5721
+Maverick 	:	48	:	3345.6066
+Medina 	:	48	:	3456.4327
+Menard 	:	48	:	2336.8275
+Midland 	:	48	:	2336.1023
+Milam 	:	48	:	2646.1253
+Mills 	:	48	:	1942.2151
+Mitchell 	:	48	:	2372.181
+Montague 	:	48	:	2430.5596
+Montgomery 	:	48	:	2788.9379
+Moore 	:	48	:	2355.8899
+Morris 	:	48	:	669.8776
+Motley 	:	48	:	2563.6079
+Nacogdoches 	:	48	:	2541.6447
+Navarro 	:	48	:	2813.1803
+Newton 	:	48	:	2433.3309
+Nolan 	:	48	:	2367.0787
+Nueces 	:	48	:	3021.0278
+Ochiltree 	:	48	:	2377.8013
+Oldham 	:	48	:	3888.6778
+Orange 	:	48	:	983.0086
+Palo Pinto 	:	48	:	2552.445
+Panola 	:	48	:	2127.2706
+Parker 	:	48	:	2357.1331
+Parmer 	:	48	:	2292.5903
+Pecos 	:	48	:	12340.6507
+Polk 	:	48	:	2874.4079
+Potter 	:	48	:	2387.9282
+Presidio 	:	48	:	9987.7134
+Rains 	:	48	:	670.4733
+Randall 	:	48	:	2389.0678
+Reagan 	:	48	:	3045.7882
+Real 	:	48	:	1813.1036
+Red River 	:	48	:	2739.2099
+Reeves 	:	48	:	6842.6505
+Refugio 	:	48	:	2120.2776
+Roberts 	:	48	:	2393.6521
+Robertson 	:	48	:	2242.0853
+Rockwall 	:	48	:	385.133
+Runnels 	:	48	:	2737.9667
+Rusk 	:	48	:	2431.0258
+Sabine 	:	48	:	1493.4199
+San Augustine 	:	48	:	1533.8239
+San Jacinto 	:	48	:	1626.261
+San Patricio 	:	48	:	1831.2854
+San Saba 	:	48	:	2948.0675
+Schleicher 	:	48	:	3394.5835
+Scurry 	:	48	:	2350.5027
+Shackelford 	:	48	:	2371.2486
+Shelby 	:	48	:	2161.4327
+Sherman 	:	48	:	2391.088
+Smith 	:	48	:	2459.0755
+Somervell 	:	48	:	497.021
+Starr 	:	48	:	3183.8352
+Stephens 	:	48	:	2386.6332
+Sterling 	:	48	:	2391.8391
+Stonewall 	:	48	:	2383.3957
+Sutton 	:	48	:	3766.896
+Swisher 	:	48	:	2332.7612
+Tarrant 	:	48	:	2324.4732
+Taylor 	:	48	:	2380.8575
+Terrell 	:	48	:	6106.5725
+Terry 	:	48	:	2307.5087
+Throckmorton 	:	48	:	2371.0673
+Titus 	:	48	:	1102.5371
+Tom Green 	:	48	:	3989.9986
+Travis 	:	48	:	2647.1872
+Trinity 	:	48	:	1849.26
+Tyler 	:	48	:	2423.4889
+Upshur 	:	48	:	1535.0153
+Upton 	:	48	:	3216.3397
+Uvalde 	:	48	:	4036.774
+Val Verde 	:	48	:	8371.916
+Van Zandt 	:	48	:	2226.0532
+Victoria 	:	48	:	2301.8107
+Walker 	:	48	:	2075.7296
+Waller 	:	48	:	1342.8891
+Ward 	:	48	:	2164.5666
+Washington 	:	48	:	1609.2965
+Webb 	:	48	:	8742.6227
+Wharton 	:	48	:	2834.5737
+Wheeler 	:	48	:	2370.7306
+Wichita 	:	48	:	1639.4959
+Wilbarger 	:	48	:	2533.279
+Willacy 	:	48	:	2031.1557
+Williamson 	:	48	:	2938.9766
+Wilson 	:	48	:	2094.1963
+Winkler 	:	48	:	2178.8116
+Wise 	:	48	:	2389.9743
+Wood 	:	48	:	1802.122
+Yoakum 	:	48	:	2071.3784
+Young 	:	48	:	2410.8756
+Zapata 	:	48	:	2740.479
+Zavala 	:	48	:	3371.4548
+Beaver 	:	49	:	6714.0052
+Box Elder 	:	49	:	17428.1877
+Cache 	:	49	:	3038.2513
+Carbon 	:	49	:	3845.0363
+Daggett 	:	49	:	1872.7254
+Davis 	:	49	:	1641.283
+Duchesne 	:	49	:	8432.9623
+Emery 	:	49	:	11555.3886
+Garfield 	:	49	:	13489.238
+Grand 	:	49	:	9567.6672
+Iron 	:	49	:	8551.7656
+Juab 	:	49	:	8822.2652
+Kane 	:	49	:	10640.8078
+Millard 	:	49	:	17684.5459
+Morgan 	:	49	:	1581.9461
+Piute 	:	49	:	1983.3184
+Rich 	:	49	:	2813.4911
+Salt Lake 	:	49	:	2092.1502
+San Juan 	:	49	:	20546.7031
+Sanpete 	:	49	:	4150.8894
+Sevier 	:	49	:	4968.3452
+Summit 	:	49	:	4874.5095
+Tooele 	:	49	:	18873.6408
+Uintah 	:	49	:	11652.3582
+Utah 	:	49	:	5545.1382
+Wasatch 	:	49	:	3131.7503
+Washington 	:	49	:	6293.4669
+Wayne 	:	49	:	6388.1573
+Weber 	:	49	:	1708.0014
+Addison 	:	50	:	2093.497
+Bennington 	:	50	:	1755.1653
+Caledonia 	:	50	:	1702.9768
+Chittenden 	:	50	:	1604.8676
+Essex 	:	50	:	1745.0125
+Franklin 	:	50	:	1792.3318
+Grand Isle 	:	50	:	504.1953
+Lamoille 	:	50	:	1201.1125
+Orange 	:	50	:	1791.6066
+Orleans 	:	50	:	1867.7526
+Rutland 	:	50	:	2446.9543
+Washington 	:	50	:	1801.1637
+Windham 	:	50	:	2067.1308
+Windsor 	:	50	:	2527.1666
+Accomack 	:	51	:	3393.0295
+Albemarle 	:	51	:	1880.8062
+Alleghany 	:	51	:	1154.2853
+Amelia 	:	51	:	928.6186
+Amherst 	:	51	:	1240.0402
+Appomattox 	:	51	:	866.9507
+Arlington 	:	51	:	67.2364
+Augusta 	:	51	:	2514.7087
+Bath 	:	51	:	1384.5104
+Bedford 	:	51	:	1992.3575
+Bland 	:	51	:	929.1107
+Botetourt 	:	51	:	1413.9846
+Brunswick 	:	51	:	1474.6683
+Buchanan 	:	51	:	1305.0492
+Buckingham 	:	51	:	1511.4204
+Campbell 	:	51	:	1313.8034
+Caroline 	:	51	:	1395.7251
+Carroll 	:	51	:	1237.0876
+Charles City  	:	51	:	528.9298
+Charlotte 	:	51	:	1236.5696
+Chesterfield 	:	51	:	1131.8041
+Clarke 	:	51	:	461.5121
+Craig 	:	51	:	856.2799
+Culpeper 	:	51	:	990.1052
+Cumberland 	:	51	:	776.3007
+Dickenson 	:	51	:	864.1017
+Dinwiddie 	:	51	:	1313.0782
+Essex 	:	51	:	740.5069
+Fairfax 	:	51	:	1053.1199
+Fauquier 	:	51	:	1687.1778
+Floyd 	:	51	:	987.3857
+Fluvanna 	:	51	:	751.6439
+Franklin 	:	51	:	1842.9404
+Frederick 	:	51	:	1076.4558
+Giles 	:	51	:	933.436
+Gloucester 	:	51	:	745.92
+Goochland 	:	51	:	751.0741
+Grayson 	:	51	:	1154.881
+Greene 	:	51	:	406.5264
+Greensville 	:	51	:	768.7379
+Halifax 	:	51	:	2148.5604
+Hanover 	:	51	:	1227.8672
+Henrico 	:	51	:	633.514
+Henry 	:	51	:	995.5701
+Highland 	:	51	:	1077.0774
+Isle of Wight 	:	51	:	939.5484
+James City 	:	51	:	465.4489
+King and Queen 	:	51	:	845.1947
+King George 	:	51	:	486.3761
+King William 	:	51	:	739.8335
+Lancaster 	:	51	:	599.1965
+Lee 	:	51	:	1132.6588
+Loudoun 	:	51	:	1349.649
+Louisa 	:	51	:	1322.9461
+Lunenburg 	:	51	:	1119.8642
+Madison 	:	51	:	833.4102
+Mathews 	:	51	:	652.5764
+Mecklenburg 	:	51	:	1759.3611
+Middlesex 	:	51	:	545.8425
+Montgomery 	:	51	:	1008.6237
+Nelson 	:	51	:	1228.4629
+New Kent 	:	51	:	578.8132
+Northampton 	:	51	:	2059.9306
+Northumberland 	:	51	:	739.8853
+Nottoway 	:	51	:	818.699
+Orange 	:	51	:	889.4319
+Page 	:	51	:	813.4931
+Patrick 	:	51	:	1258.4033
+Pittsylvania 	:	51	:	2533.4862
+Powhatan 	:	51	:	679.616
+Prince Edward 	:	51	:	916.4715
+Prince George 	:	51	:	729.9915
+Prince William 	:	51	:	902.2524
+Pulaski 	:	51	:	853.6381
+Rappahannock 	:	51	:	691.0897
+Richmond 	:	51	:	560.4242
+Roanoke 	:	51	:	650.1936
+Rockbridge 	:	51	:	1556.5382
+Rockingham 	:	51	:	2210.0211
+Russell 	:	51	:	1234.8343
+Scott 	:	51	:	1395.0517
+Shenandoah 	:	51	:	1327.4527
+Smyth 	:	51	:	1171.4829
+Southampton 	:	51	:	1560.0865
+Spotsylvania 	:	51	:	1067.7793
+Stafford 	:	51	:	725.0705
+Surry 	:	51	:	803.7029
+Sussex 	:	51	:	1276.4297
+Tazewell 	:	51	:	1346.5151
+Warren 	:	51	:	560.2688
+Washington 	:	51	:	1465.8882
+Westmoreland 	:	51	:	654.3376
+Wise 	:	51	:	1049.5198
+Wythe 	:	51	:	1203.3658
+York 	:	51	:	558.1968
+Alexandria 	:	51	:	39.9119
+Bedford 	:	51	:	17.871
+Bristol 	:	51	:	34.0844
+Buena Vista 	:	51	:	17.6897
+Charlottesville 	:	51	:	26.5734
+Chesapeake 	:	51	:	908.831
+Clifton Forge 	:	51	:	8.029
+Colonial Heights 	:	51	:	20.1761
+Covington 	:	51	:	14.6853
+Danville 	:	51	:	113.8046
+Emporia 	:	51	:	18.0523
+Fairfax 	:	51	:	16.3429
+Falls Church 	:	51	:	5.1541
+Franklin 	:	51	:	21.756
+Fredericksburg 	:	51	:	27.2468
+Galax 	:	51	:	21.3157
+Hampton 	:	51	:	352.8357
+Harrisonburg 	:	51	:	45.5581
+Hopewell 	:	51	:	28.0238
+Lexington 	:	51	:	6.4491
+Lynchburg 	:	51	:	128.8784
+Manassas 	:	51	:	25.7964
+Manassas Park 	:	51	:	6.4491
+Martinsville 	:	51	:	28.5159
+Newport News 	:	51	:	308.3395
+Norfolk 	:	51	:	249.417
+Norton 	:	51	:	19.5027
+Petersburg 	:	51	:	60.0621
+Poquoson 	:	51	:	203.1337
+Portsmouth 	:	51	:	120.7458
+Radford 	:	51	:	26.3921
+Richmond 	:	51	:	162.0045
+Roanoke 	:	51	:	111.1369
+Salem 	:	51	:	37.7881
+Staunton 	:	51	:	51.0489
+Suffolk 	:	51	:	1111.2913
+Virginia Beach 	:	51	:	1288.0847
+Waynesboro 	:	51	:	39.8342
+Williamsburg 	:	51	:	22.4553
+Winchester 	:	51	:	24.1647
+Adams 	:	53	:	4997.8971
+Asotin 	:	53	:	1659.3871
+Benton 	:	53	:	4558.7108
+Chelan 	:	53	:	7753.4758
+Clallam 	:	53	:	6916.1806
+Clark 	:	53	:	1699.6098
+Columbia 	:	53	:	2262.4427
+Cowlitz 	:	53	:	3020.7947
+Douglas 	:	53	:	4788.1071
+Ferry 	:	53	:	5846.8214
+Franklin 	:	53	:	3277.2565
+Garfield 	:	53	:	1860.1121
+Grant 	:	53	:	7229.4411
+Grays Harbor 	:	53	:	5761.2996
+Island 	:	53	:	1340.0401
+Jefferson 	:	53	:	5655.3168
+King 	:	53	:	5973.9127
+Kitsap 	:	53	:	1465.8882
+Kittitas 	:	53	:	6042.7549
+Klickitat 	:	53	:	4931.8262
+Lewis 	:	53	:	6309.9134
+Lincoln 	:	53	:	6059.8489
+Mason 	:	53	:	2722.1677
+Okanogan 	:	53	:	13766.2644
+Pacific 	:	53	:	3168.865
+Pend Oreille 	:	53	:	3691.5788
+Pierce 	:	53	:	4678.835
+San Juan 	:	53	:	1608.5713
+Skagit 	:	53	:	4974.0173
+Skamania 	:	53	:	4361.1974
+Snohomish 	:	53	:	5688.7019
+Spokane 	:	53	:	4612.0648
+Stevens 	:	53	:	6580.2576
+Thurston 	:	53	:	2003.7276
+Wahkiakum 	:	53	:	742.5271
+Walla Walla 	:	53	:	3365.0575
+Whatcom 	:	53	:	6484.1945
+Whitman 	:	53	:	5639.984
+Yakima 	:	53	:	11167.0699
+Barbour 	:	54	:	887.7225
+Berkeley 	:	54	:	832.8922
+Boone 	:	54	:	1303.2362
+Braxton 	:	54	:	1336.8803
+Brooke 	:	54	:	238.9534
+Cabell 	:	54	:	745.9718
+Calhoun 	:	54	:	726.8576
+Clay 	:	54	:	890.4938
+Doddridge 	:	54	:	830.0432
+Fayette 	:	54	:	1731.0524
+Gilmer 	:	54	:	880.7813
+Grant 	:	54	:	1243.6921
+Greenbrier 	:	54	:	2653.2737
+Hampshire 	:	54	:	1669.5658
+Hancock 	:	54	:	228.8265
+Hardy 	:	54	:	1513.8032
+Harrison 	:	54	:	1078.994
+Jackson 	:	54	:	1221.4181
+Jefferson 	:	54	:	547.9663
+Kanawha 	:	54	:	2359.4641
+Lewis 	:	54	:	1009.4525
+Lincoln 	:	54	:	1135.9481
+Logan 	:	54	:	1180.0299
+McDowell 	:	54	:	1385.391
+Marion 	:	54	:	806.7591
+Marshall 	:	54	:	808.5462
+Mason 	:	54	:	1152.032
+Mercer 	:	54	:	1089.5871
+Mineral 	:	54	:	852.4467
+Mingo 	:	54	:	1097.2276
+Monongalia 	:	54	:	947.6551
+Monroe 	:	54	:	1226.7794
+Morgan 	:	54	:	594.8453
+Nicholas 	:	54	:	1694.896
+Ohio 	:	54	:	281.9474
+Pendleton 	:	54	:	1808.2085
+Pleasants 	:	54	:	348.5881
+Pocahontas 	:	54	:	2439.3915
+Preston 	:	54	:	1687.1001
+Putnam 	:	54	:	907.536
+Raleigh 	:	54	:	1578.1906
+Randolph 	:	54	:	2693.3928
+Ritchie 	:	54	:	1174.7722
+Roane 	:	54	:	1252.9125
+Summers 	:	54	:	952.3948
+Taylor 	:	54	:	455.0371
+Tucker 	:	54	:	1090.6749
+Tyler 	:	54	:	675.1871
+Upshur 	:	54	:	919.0874
+Wayne 	:	54	:	1326.5721
+Webster 	:	54	:	1440.4285
+Wetzel 	:	54	:	935.9483
+Wirt 	:	54	:	608.2097
+Wood 	:	54	:	976.2746
+Wyoming 	:	54	:	1299.7138
+Adams 	:	55	:	1783.2409
+Ashland 	:	55	:	5940.7607
+Barron 	:	55	:	2305.1518
+Bayfield 	:	55	:	5287.5627
+Brown 	:	55	:	1593.9378
+Buffalo 	:	55	:	1837.8122
+Burnett 	:	55	:	2280.1842
+Calumet 	:	55	:	1028.3077
+Chippewa 	:	55	:	2697.0188
+Clark 	:	55	:	3157.4172
+Columbia 	:	55	:	2060.863
+Crawford 	:	55	:	1551.9798
+Dane 	:	55	:	3207.2488
+Dodge 	:	55	:	2349.1041
+Door 	:	55	:	6137.8597
+Douglas 	:	55	:	3832.9669
+Dunn 	:	55	:	2237.5269
+Eau Claire 	:	55	:	1671.2752
+Florence 	:	55	:	1288.4214
+Fond du Lac 	:	55	:	1983.422
+Forest 	:	55	:	2710.176
+Grant 	:	55	:	3064.7729
+Green 	:	55	:	1514.0104
+Green Lake 	:	55	:	985.3396
+Iowa 	:	55	:	1989.3272
+Iron 	:	55	:	2380.8316
+Jackson 	:	55	:	2590.2849
+Jefferson 	:	55	:	1509.3225
+Juneau 	:	55	:	2082.6967
+Kenosha 	:	55	:	1953.6629
+Kewaunee 	:	55	:	2808.9068
+La Crosse 	:	55	:	1242.9928
+Lafayette 	:	55	:	1643.5104
+Langlade 	:	55	:	2299.6092
+Lincoln 	:	55	:	2349.2595
+Manitowoc 	:	55	:	3869.1233
+Marathon 	:	55	:	4082.2026
+Marinette 	:	55	:	4014.6813
+Marquette 	:	55	:	1202.8478
+Menominee 	:	55	:	945.3241
+Milwaukee 	:	55	:	3081.323
+Monroe 	:	55	:	2352.4711
+Oconto 	:	55	:	2976.0136
+Oneida 	:	55	:	3200.9292
+Outagamie 	:	55	:	1668.996
+Ozaukee 	:	55	:	2890.958
+Pepin 	:	55	:	644.0812
+Pierce 	:	55	:	1532.2181
+Polk 	:	55	:	2476.7652
+Portage 	:	55	:	2130.9484
+Price 	:	55	:	3311.1337
+Racine 	:	55	:	2051.021
+Richland 	:	55	:	1526.4942
+Rock 	:	55	:	1880.858
+Rusk 	:	55	:	2411.0051
+St. Croix 	:	55	:	1905.7479
+Sauk 	:	55	:	2197.4337
+Sawyer 	:	55	:	3497.3288
+Shawano 	:	55	:	2355.1647
+Sheboygan 	:	55	:	3291.8123
+Taylor 	:	55	:	2549.8291
+Trempealeau 	:	55	:	1921.7282
+Vernon 	:	55	:	2114.5019
+Vilas 	:	55	:	2636.2315
+Walworth 	:	55	:	1493.135
+Washburn 	:	55	:	2209.4254
+Washington 	:	55	:	1128.9551
+Waukesha 	:	55	:	1503.4432
+Waupaca 	:	55	:	1982.2047
+Waushara 	:	55	:	1650.8401
+Winnebago 	:	55	:	1498.833
+Wood 	:	55	:	2096.5014
+Albany 	:	56	:	11159.7661
+Big Horn 	:	56	:	8181.7064
+Campbell 	:	56	:	12436.0404
+Carbon 	:	56	:	20626.8377
+Converse 	:	56	:	11046.609
+Crook 	:	56	:	7434.6468
+Fremont 	:	56	:	23998.422
+Goshen 	:	56	:	5781.2944
+Hot Springs 	:	56	:	5196.0839
+Johnson 	:	56	:	10812.4989
+Laramie 	:	56	:	6960.9617
+Lincoln 	:	56	:	10590.5359
+Natrona 	:	56	:	13923.1148
+Niobrara 	:	56	:	6806.261
+Park 	:	56	:	18048.4409
+Platte 	:	56	:	5467.231
+Sheridan 	:	56	:	6545.1113
+Sublette 	:	56	:	12783.3594
+Sweetwater 	:	56	:	27172.1303
+Teton 	:	56	:	10934.462
+Uinta 	:	56	:	5406.7804
+Washakie 	:	56	:	5808.7225
+Weston 	:	56	:	6216.1813
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_POPULATION.txt
new file mode 100644
index 0000000..bdecfae
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_2_POPULATION.txt
@@ -0,0 +1,3141 @@
+Autauga 	:	1	:	43671
+Baldwin 	:	1	:	140415
+Barbour 	:	1	:	29038
+Bibb 	:	1	:	20826
+Blount 	:	1	:	51024
+Bullock 	:	1	:	11714
+Butler 	:	1	:	21399
+Calhoun 	:	1	:	112249
+Chambers 	:	1	:	36583
+Cherokee 	:	1	:	23988
+Chilton 	:	1	:	39593
+Choctaw 	:	1	:	15922
+Clarke 	:	1	:	27867
+Clay 	:	1	:	14254
+Cleburne 	:	1	:	14123
+Coffee 	:	1	:	43615
+Colbert 	:	1	:	54984
+Conecuh 	:	1	:	14089
+Coosa 	:	1	:	12202
+Covington 	:	1	:	37631
+Crenshaw 	:	1	:	13665
+Cullman 	:	1	:	77483
+Dale 	:	1	:	49129
+Dallas 	:	1	:	46365
+DeKalb 	:	1	:	64452
+Elmore 	:	1	:	65874
+Escambia 	:	1	:	38440
+Etowah 	:	1	:	103459
+Fayette 	:	1	:	18495
+Franklin 	:	1	:	31223
+Geneva 	:	1	:	25764
+Greene 	:	1	:	9974
+Hale 	:	1	:	17185
+Henry 	:	1	:	16310
+Houston 	:	1	:	88787
+Jackson 	:	1	:	53926
+Jefferson 	:	1	:	662047
+Lamar 	:	1	:	15904
+Lauderdale 	:	1	:	87966
+Lawrence 	:	1	:	34803
+Lee 	:	1	:	115092
+Limestone 	:	1	:	65676
+Lowndes 	:	1	:	13473
+Macon 	:	1	:	24105
+Madison 	:	1	:	276700
+Marengo 	:	1	:	22539
+Marion 	:	1	:	31214
+Marshall 	:	1	:	82231
+Mobile 	:	1	:	399843
+Monroe 	:	1	:	24324
+Montgomery 	:	1	:	223510
+Morgan 	:	1	:	111064
+Perry 	:	1	:	11861
+Pickens 	:	1	:	20949
+Pike 	:	1	:	29605
+Randolph 	:	1	:	22380
+Russell 	:	1	:	49756
+St. Clair 	:	1	:	64742
+Shelby 	:	1	:	143293
+Sumter 	:	1	:	14798
+Talladega 	:	1	:	80321
+Tallapoosa 	:	1	:	41475
+Tuscaloosa 	:	1	:	164875
+Walker 	:	1	:	70713
+Washington 	:	1	:	18097
+Wilcox 	:	1	:	13183
+Winston 	:	1	:	24843
+Aleutians East 	:	2	:	2697
+Aleutians West 	:	2	:	5465
+Anchorage 	:	2	:	260283
+Bethel 	:	2	:	16006
+Bristol Bay 	:	2	:	1258
+Denali 	:	2	:	1893
+Dillingham 	:	2	:	4922
+Fairbanks North Star 	:	2	:	82840
+Haines 	:	2	:	2392
+Juneau 	:	2	:	30711
+Kenai Peninsula 	:	2	:	49691
+Ketchikan Gateway 	:	2	:	14070
+Kodiak Island 	:	2	:	13913
+Lake and Peninsula 	:	2	:	1823
+Matanuska-Susitna 	:	2	:	59322
+Nome 	:	2	:	9196
+North Slope 	:	2	:	7385
+Northwest Arctic 	:	2	:	7208
+Prince of Wales-Outer Ketchikan 	:	2	:	6146
+Sitka 	:	2	:	8835
+Skagway-Hoonah-Angoon 	:	2	:	3436
+Southeast Fairbanks 	:	2	:	6174
+Valdez-Cordova 	:	2	:	10195
+Wade Hampton 	:	2	:	7028
+Wrangell-Petersburg 	:	2	:	6684
+Yakutat 	:	2	:	808
+Yukon-Koyukuk 	:	2	:	6551
+Apache 	:	4	:	69423
+Cochise 	:	4	:	117755
+Coconino 	:	4	:	116320
+Gila 	:	4	:	51335
+Graham 	:	4	:	33489
+Greenlee 	:	4	:	8547
+La Paz 	:	4	:	19715
+Maricopa 	:	4	:	3072149
+Mohave 	:	4	:	155032
+Navajo 	:	4	:	97470
+Pima 	:	4	:	843746
+Pinal 	:	4	:	179727
+Santa Cruz 	:	4	:	38381
+Yavapai 	:	4	:	167517
+Yuma 	:	4	:	160026
+Arkansas 	:	5	:	20749
+Ashley 	:	5	:	24209
+Baxter 	:	5	:	38386
+Benton 	:	5	:	153406
+Boone 	:	5	:	33948
+Bradley 	:	5	:	12600
+Calhoun 	:	5	:	5744
+Carroll 	:	5	:	25357
+Chicot 	:	5	:	14117
+Clark 	:	5	:	23546
+Clay 	:	5	:	17609
+Cleburne 	:	5	:	24046
+Cleveland 	:	5	:	8571
+Columbia 	:	5	:	25603
+Conway 	:	5	:	20336
+Craighead 	:	5	:	82148
+Crawford 	:	5	:	53247
+Crittenden 	:	5	:	50866
+Cross 	:	5	:	19526
+Dallas 	:	5	:	9210
+Desha 	:	5	:	15341
+Drew 	:	5	:	18723
+Faulkner 	:	5	:	86014
+Franklin 	:	5	:	17771
+Fulton 	:	5	:	11642
+Garland 	:	5	:	88068
+Grant 	:	5	:	16464
+Greene 	:	5	:	37331
+Hempstead 	:	5	:	23587
+Hot Spring 	:	5	:	30353
+Howard 	:	5	:	14300
+Independence 	:	5	:	34233
+Izard 	:	5	:	13249
+Jackson 	:	5	:	18418
+Jefferson 	:	5	:	84278
+Johnson 	:	5	:	22781
+Lafayette 	:	5	:	8559
+Lawrence 	:	5	:	17774
+Lee 	:	5	:	12580
+Lincoln 	:	5	:	14492
+Little River 	:	5	:	13628
+Logan 	:	5	:	22486
+Lonoke 	:	5	:	52828
+Madison 	:	5	:	14243
+Marion 	:	5	:	16140
+Miller 	:	5	:	40443
+Mississippi 	:	5	:	51979
+Monroe 	:	5	:	10254
+Montgomery 	:	5	:	9245
+Nevada 	:	5	:	9955
+Newton 	:	5	:	8608
+Ouachita 	:	5	:	28790
+Perry 	:	5	:	10209
+Phillips 	:	5	:	26445
+Pike 	:	5	:	11303
+Poinsett 	:	5	:	25614
+Polk 	:	5	:	20229
+Pope 	:	5	:	54469
+Prairie 	:	5	:	9539
+Pulaski 	:	5	:	361474
+Randolph 	:	5	:	18195
+St. Francis 	:	5	:	29329
+Saline 	:	5	:	83529
+Scott 	:	5	:	10996
+Searcy 	:	5	:	8261
+Sebastian 	:	5	:	115071
+Sevier 	:	5	:	15757
+Sharp 	:	5	:	17119
+Stone 	:	5	:	11499
+Union 	:	5	:	45629
+Van Buren 	:	5	:	16192
+Washington 	:	5	:	157715
+White 	:	5	:	67165
+Woodruff 	:	5	:	8741
+Yell 	:	5	:	21139
+Alameda 	:	6	:	1443741
+Alpine 	:	6	:	1208
+Amador 	:	6	:	35100
+Butte 	:	6	:	203171
+Calaveras 	:	6	:	40554
+Colusa 	:	6	:	18804
+Contra Costa 	:	6	:	948816
+Del Norte 	:	6	:	27507
+El Dorado 	:	6	:	156299
+Fresno 	:	6	:	799407
+Glenn 	:	6	:	26453
+Humboldt 	:	6	:	126518
+Imperial 	:	6	:	142361
+Inyo 	:	6	:	17945
+Kern 	:	6	:	661645
+Kings 	:	6	:	129461
+Lake 	:	6	:	58309
+Lassen 	:	6	:	33828
+Los Angeles 	:	6	:	9519338
+Madera 	:	6	:	123109
+Marin 	:	6	:	247289
+Mariposa 	:	6	:	17130
+Mendocino 	:	6	:	86265
+Merced 	:	6	:	210554
+Modoc 	:	6	:	9449
+Mono 	:	6	:	12853
+Monterey 	:	6	:	401762
+Napa 	:	6	:	124279
+Nevada 	:	6	:	92033
+Orange 	:	6	:	2846289
+Placer 	:	6	:	248399
+Plumas 	:	6	:	20824
+Riverside 	:	6	:	1545387
+Sacramento 	:	6	:	1223499
+San Benito 	:	6	:	53234
+San Bernardino 	:	6	:	1709434
+San Diego 	:	6	:	2813833
+San Francisco 	:	6	:	776733
+San Joaquin 	:	6	:	563598
+San Luis Obispo 	:	6	:	246681
+San Mateo 	:	6	:	707161
+Santa Barbara 	:	6	:	399347
+Santa Clara 	:	6	:	1682585
+Santa Cruz 	:	6	:	255602
+Shasta 	:	6	:	163256
+Sierra 	:	6	:	3555
+Siskiyou 	:	6	:	44301
+Solano 	:	6	:	394542
+Sonoma 	:	6	:	458614
+Stanislaus 	:	6	:	446997
+Sutter 	:	6	:	78930
+Tehama 	:	6	:	56039
+Trinity 	:	6	:	13022
+Tulare 	:	6	:	368021
+Tuolumne 	:	6	:	54501
+Ventura 	:	6	:	753197
+Yolo 	:	6	:	168660
+Yuba 	:	6	:	60219
+Adams 	:	8	:	363857
+Alamosa 	:	8	:	14966
+Arapahoe 	:	8	:	487967
+Archuleta 	:	8	:	9898
+Baca 	:	8	:	4517
+Bent 	:	8	:	5998
+Boulder 	:	8	:	291288
+Chaffee 	:	8	:	16242
+Cheyenne 	:	8	:	2231
+Clear Creek 	:	8	:	9322
+Conejos 	:	8	:	8400
+Costilla 	:	8	:	3663
+Crowley 	:	8	:	5518
+Custer 	:	8	:	3503
+Delta 	:	8	:	27834
+Denver 	:	8	:	554636
+Dolores 	:	8	:	1844
+Douglas 	:	8	:	175766
+Eagle 	:	8	:	41659
+Elbert 	:	8	:	19872
+El Paso 	:	8	:	516929
+Fremont 	:	8	:	46145
+Garfield 	:	8	:	43791
+Gilpin 	:	8	:	4757
+Grand 	:	8	:	12442
+Gunnison 	:	8	:	13956
+Hinsdale 	:	8	:	790
+Huerfano 	:	8	:	7862
+Jackson 	:	8	:	1577
+Jefferson 	:	8	:	527056
+Kiowa 	:	8	:	1622
+Kit Carson 	:	8	:	8011
+Lake 	:	8	:	7812
+La Plata 	:	8	:	43941
+Larimer 	:	8	:	251494
+Las Animas 	:	8	:	15207
+Lincoln 	:	8	:	6087
+Logan 	:	8	:	20504
+Mesa 	:	8	:	116255
+Mineral 	:	8	:	831
+Moffat 	:	8	:	13184
+Montezuma 	:	8	:	23830
+Montrose 	:	8	:	33432
+Morgan 	:	8	:	27171
+Otero 	:	8	:	20311
+Ouray 	:	8	:	3742
+Park 	:	8	:	14523
+Phillips 	:	8	:	4480
+Pitkin 	:	8	:	14872
+Prowers 	:	8	:	14483
+Pueblo 	:	8	:	141472
+Rio Blanco 	:	8	:	5986
+Rio Grande 	:	8	:	12413
+Routt 	:	8	:	19690
+Saguache 	:	8	:	5917
+San Juan 	:	8	:	558
+San Miguel 	:	8	:	6594
+Sedgwick 	:	8	:	2747
+Summit 	:	8	:	23548
+Teller 	:	8	:	20555
+Washington 	:	8	:	4926
+Weld 	:	8	:	180936
+Yuma 	:	8	:	9841
+Fairfield 	:	9	:	882567
+Hartford 	:	9	:	857183
+Litchfield 	:	9	:	182193
+Middlesex 	:	9	:	155071
+New Haven 	:	9	:	824008
+New London 	:	9	:	259088
+Tolland 	:	9	:	136364
+Windham 	:	9	:	109091
+Kent 	:	10	:	126697
+New Castle 	:	10	:	500265
+Sussex 	:	10	:	156638
+District of Columbia	:	11	:	572059
+Alachua 	:	12	:	217955
+Baker 	:	12	:	22259
+Bay 	:	12	:	148217
+Bradford 	:	12	:	26088
+Brevard 	:	12	:	476230
+Broward 	:	12	:	1623018
+Calhoun 	:	12	:	13017
+Charlotte 	:	12	:	141627
+Citrus 	:	12	:	118085
+Clay 	:	12	:	140814
+Collier 	:	12	:	251377
+Columbia 	:	12	:	56513
+DeSoto 	:	12	:	32209
+Dixie 	:	12	:	13827
+Duval 	:	12	:	778879
+Escambia 	:	12	:	294410
+Flagler 	:	12	:	49832
+Franklin 	:	12	:	11057
+Gadsden 	:	12	:	45087
+Gilchrist 	:	12	:	14437
+Glades 	:	12	:	10576
+Gulf 	:	12	:	13332
+Hamilton 	:	12	:	13327
+Hardee 	:	12	:	26938
+Hendry 	:	12	:	36210
+Hernando 	:	12	:	130802
+Highlands 	:	12	:	87366
+Hillsborough 	:	12	:	998948
+Holmes 	:	12	:	18564
+Indian River 	:	12	:	112947
+Jackson 	:	12	:	46755
+Jefferson 	:	12	:	12902
+Lafayette 	:	12	:	7022
+Lake 	:	12	:	210528
+Lee 	:	12	:	440888
+Leon 	:	12	:	239452
+Levy 	:	12	:	34450
+Liberty 	:	12	:	7021
+Madison 	:	12	:	18733
+Manatee 	:	12	:	264002
+Marion 	:	12	:	258916
+Martin 	:	12	:	126731
+Miami-Dade 	:	12	:	2253362
+Monroe 	:	12	:	79589
+Nassau 	:	12	:	57663
+Okaloosa 	:	12	:	170498
+Okeechobee 	:	12	:	35910
+Orange 	:	12	:	896344
+Osceola 	:	12	:	172493
+Palm Beach 	:	12	:	1131184
+Pasco 	:	12	:	344765
+Pinellas 	:	12	:	921482
+Polk 	:	12	:	483924
+Putnam 	:	12	:	70423
+St. Johns 	:	12	:	123135
+St. Lucie 	:	12	:	192695
+Santa Rosa 	:	12	:	117743
+Sarasota 	:	12	:	325957
+Seminole 	:	12	:	365196
+Sumter 	:	12	:	53345
+Suwannee 	:	12	:	34844
+Taylor 	:	12	:	19256
+Union 	:	12	:	13442
+Volusia 	:	12	:	443343
+Wakulla 	:	12	:	22863
+Walton 	:	12	:	40601
+Washington 	:	12	:	20973
+Appling 	:	13	:	17419
+Atkinson 	:	13	:	7609
+Bacon 	:	13	:	10103
+Baker 	:	13	:	4074
+Baldwin 	:	13	:	44700
+Banks 	:	13	:	14422
+Barrow 	:	13	:	46144
+Bartow 	:	13	:	76019
+Ben Hill 	:	13	:	17484
+Berrien 	:	13	:	16235
+Bibb 	:	13	:	153887
+Bleckley 	:	13	:	11666
+Brantley 	:	13	:	14629
+Brooks 	:	13	:	16450
+Bryan 	:	13	:	23417
+Bulloch 	:	13	:	55983
+Burke 	:	13	:	22243
+Butts 	:	13	:	19522
+Calhoun 	:	13	:	6320
+Camden 	:	13	:	43664
+Candler 	:	13	:	9577
+Carroll 	:	13	:	87268
+Catoosa 	:	13	:	53282
+Charlton 	:	13	:	10282
+Chatham 	:	13	:	232048
+Chattahoochee 	:	13	:	14882
+Chattooga 	:	13	:	25470
+Cherokee 	:	13	:	141903
+Clarke 	:	13	:	101489
+Clay 	:	13	:	3357
+Clayton 	:	13	:	236517
+Clinch 	:	13	:	6878
+Cobb 	:	13	:	607751
+Coffee 	:	13	:	37413
+Colquitt 	:	13	:	42053
+Columbia 	:	13	:	89288
+Cook 	:	13	:	15771
+Coweta 	:	13	:	89215
+Crawford 	:	13	:	12495
+Crisp 	:	13	:	21996
+Dade 	:	13	:	15154
+Dawson 	:	13	:	15999
+Decatur 	:	13	:	28240
+DeKalb 	:	13	:	665865
+Dodge 	:	13	:	19171
+Dooly 	:	13	:	11525
+Dougherty 	:	13	:	96065
+Douglas 	:	13	:	92174
+Early 	:	13	:	12354
+Echols 	:	13	:	3754
+Effingham 	:	13	:	37535
+Elbert 	:	13	:	20511
+Emanuel 	:	13	:	21837
+Evans 	:	13	:	10495
+Fannin 	:	13	:	19798
+Fayette 	:	13	:	91263
+Floyd 	:	13	:	90565
+Forsyth 	:	13	:	98407
+Franklin 	:	13	:	20285
+Fulton 	:	13	:	816006
+Gilmer 	:	13	:	23456
+Glascock 	:	13	:	2556
+Glynn 	:	13	:	67568
+Gordon 	:	13	:	44104
+Grady 	:	13	:	23659
+Greene 	:	13	:	14406
+Gwinnett 	:	13	:	588448
+Habersham 	:	13	:	35902
+Hall 	:	13	:	139277
+Hancock 	:	13	:	10076
+Haralson 	:	13	:	25690
+Harris 	:	13	:	23695
+Hart 	:	13	:	22997
+Heard 	:	13	:	11012
+Henry 	:	13	:	119341
+Houston 	:	13	:	110765
+Irwin 	:	13	:	9931
+Jackson 	:	13	:	41589
+Jasper 	:	13	:	11426
+Jeff Davis 	:	13	:	12684
+Jefferson 	:	13	:	17266
+Jenkins 	:	13	:	8575
+Johnson 	:	13	:	8560
+Jones 	:	13	:	23639
+Lamar 	:	13	:	15912
+Lanier 	:	13	:	7241
+Laurens 	:	13	:	44874
+Lee 	:	13	:	24757
+Liberty 	:	13	:	61610
+Lincoln 	:	13	:	8348
+Long 	:	13	:	10304
+Lowndes 	:	13	:	92115
+Lumpkin 	:	13	:	21016
+McDuffie 	:	13	:	21231
+McIntosh 	:	13	:	10847
+Macon 	:	13	:	14074
+Madison 	:	13	:	25730
+Marion 	:	13	:	7144
+Meriwether 	:	13	:	22534
+Miller 	:	13	:	6383
+Mitchell 	:	13	:	23932
+Monroe 	:	13	:	21757
+Montgomery 	:	13	:	8270
+Morgan 	:	13	:	15457
+Murray 	:	13	:	36506
+Muscogee 	:	13	:	186291
+Newton 	:	13	:	62001
+Oconee 	:	13	:	26225
+Oglethorpe 	:	13	:	12635
+Paulding 	:	13	:	81678
+Peach 	:	13	:	23668
+Pickens 	:	13	:	22983
+Pierce 	:	13	:	15636
+Pike 	:	13	:	13688
+Polk 	:	13	:	38127
+Pulaski 	:	13	:	9588
+Putnam 	:	13	:	18812
+Quitman 	:	13	:	2598
+Rabun 	:	13	:	15050
+Randolph 	:	13	:	7791
+Richmond 	:	13	:	199775
+Rockdale 	:	13	:	70111
+Schley 	:	13	:	3766
+Screven 	:	13	:	15374
+Seminole 	:	13	:	9369
+Spalding 	:	13	:	58417
+Stephens 	:	13	:	25435
+Stewart 	:	13	:	5252
+Sumter 	:	13	:	33200
+Talbot 	:	13	:	6498
+Taliaferro 	:	13	:	2077
+Tattnall 	:	13	:	22305
+Taylor 	:	13	:	8815
+Telfair 	:	13	:	11794
+Terrell 	:	13	:	10970
+Thomas 	:	13	:	42737
+Tift 	:	13	:	38407
+Toombs 	:	13	:	26067
+Towns 	:	13	:	9319
+Treutlen 	:	13	:	6854
+Troup 	:	13	:	58779
+Turner 	:	13	:	9504
+Twiggs 	:	13	:	10590
+Union 	:	13	:	17289
+Upson 	:	13	:	27597
+Walker 	:	13	:	61053
+Walton 	:	13	:	60687
+Ware 	:	13	:	35483
+Warren 	:	13	:	6336
+Washington 	:	13	:	21176
+Wayne 	:	13	:	26565
+Webster 	:	13	:	2390
+Wheeler 	:	13	:	6179
+White 	:	13	:	19944
+Whitfield 	:	13	:	83525
+Wilcox 	:	13	:	8577
+Wilkes 	:	13	:	10687
+Wilkinson 	:	13	:	10220
+Worth 	:	13	:	21967
+Hawaii 	:	15	:	148677
+Honolulu 	:	15	:	876156
+Kalawao 	:	15	:	147
+Kauai 	:	15	:	58463
+Maui 	:	15	:	128094
+Ada 	:	16	:	300904
+Adams 	:	16	:	3476
+Bannock 	:	16	:	75565
+Bear Lake 	:	16	:	6411
+Benewah 	:	16	:	9171
+Bingham 	:	16	:	41735
+Blaine 	:	16	:	18991
+Boise 	:	16	:	6670
+Bonner 	:	16	:	36835
+Bonneville 	:	16	:	82522
+Boundary 	:	16	:	9871
+Butte 	:	16	:	2899
+Camas 	:	16	:	991
+Canyon 	:	16	:	131441
+Caribou 	:	16	:	7304
+Cassia 	:	16	:	21416
+Clark 	:	16	:	1022
+Clearwater 	:	16	:	8930
+Custer 	:	16	:	4342
+Elmore 	:	16	:	29130
+Franklin 	:	16	:	11329
+Fremont 	:	16	:	11819
+Gem 	:	16	:	15181
+Gooding 	:	16	:	14155
+Idaho 	:	16	:	15511
+Jefferson 	:	16	:	19155
+Jerome 	:	16	:	18342
+Kootenai 	:	16	:	108685
+Latah 	:	16	:	34935
+Lemhi 	:	16	:	7806
+Lewis 	:	16	:	3747
+Lincoln 	:	16	:	4044
+Madison 	:	16	:	27467
+Minidoka 	:	16	:	20174
+Nez Perce 	:	16	:	37410
+Oneida 	:	16	:	4125
+Owyhee 	:	16	:	10644
+Payette 	:	16	:	20578
+Power 	:	16	:	7538
+Shoshone 	:	16	:	13771
+Teton 	:	16	:	5999
+Twin Falls 	:	16	:	64284
+Valley 	:	16	:	7651
+Washington 	:	16	:	9977
+Adams 	:	17	:	68277
+Alexander 	:	17	:	9590
+Bond 	:	17	:	17633
+Boone 	:	17	:	41786
+Brown 	:	17	:	6950
+Bureau 	:	17	:	35503
+Calhoun 	:	17	:	5084
+Carroll 	:	17	:	16674
+Cass 	:	17	:	13695
+Champaign 	:	17	:	179669
+Christian 	:	17	:	35372
+Clark 	:	17	:	17008
+Clay 	:	17	:	14560
+Clinton 	:	17	:	35535
+Coles 	:	17	:	53196
+Cook 	:	17	:	5376741
+Crawford 	:	17	:	20452
+Cumberland 	:	17	:	11253
+DeKalb 	:	17	:	88969
+De Witt 	:	17	:	16798
+Douglas 	:	17	:	19922
+DuPage 	:	17	:	904161
+Edgar 	:	17	:	19704
+Edwards 	:	17	:	6971
+Effingham 	:	17	:	34264
+Fayette 	:	17	:	21802
+Ford 	:	17	:	14241
+Franklin 	:	17	:	39018
+Fulton 	:	17	:	38250
+Gallatin 	:	17	:	6445
+Greene 	:	17	:	14761
+Grundy 	:	17	:	37535
+Hamilton 	:	17	:	8621
+Hancock 	:	17	:	20121
+Hardin 	:	17	:	4800
+Henderson 	:	17	:	8213
+Henry 	:	17	:	51020
+Iroquois 	:	17	:	31334
+Jackson 	:	17	:	59612
+Jasper 	:	17	:	10117
+Jefferson 	:	17	:	40045
+Jersey 	:	17	:	21668
+Jo Daviess 	:	17	:	22289
+Johnson 	:	17	:	12878
+Kane 	:	17	:	404119
+Kankakee 	:	17	:	103833
+Kendall 	:	17	:	54544
+Knox 	:	17	:	55836
+Lake 	:	17	:	644356
+La Salle 	:	17	:	111509
+Lawrence 	:	17	:	15452
+Lee 	:	17	:	36062
+Livingston 	:	17	:	39678
+Logan 	:	17	:	31183
+McDonough 	:	17	:	32913
+McHenry 	:	17	:	260077
+McLean 	:	17	:	150433
+Macon 	:	17	:	114706
+Macoupin 	:	17	:	49019
+Madison 	:	17	:	258941
+Marion 	:	17	:	41691
+Marshall 	:	17	:	13180
+Mason 	:	17	:	16038
+Massac 	:	17	:	15161
+Menard 	:	17	:	12486
+Mercer 	:	17	:	16957
+Monroe 	:	17	:	27619
+Montgomery 	:	17	:	30652
+Morgan 	:	17	:	36616
+Moultrie 	:	17	:	14287
+Ogle 	:	17	:	51032
+Peoria 	:	17	:	183433
+Perry 	:	17	:	23094
+Piatt 	:	17	:	16365
+Pike 	:	17	:	17384
+Pope 	:	17	:	4413
+Pulaski 	:	17	:	7348
+Putnam 	:	17	:	6086
+Randolph 	:	17	:	33893
+Richland 	:	17	:	16149
+Rock Island 	:	17	:	149374
+St. Clair 	:	17	:	256082
+Saline 	:	17	:	26733
+Sangamon 	:	17	:	188951
+Schuyler 	:	17	:	7189
+Scott 	:	17	:	5537
+Shelby 	:	17	:	22893
+Stark 	:	17	:	6332
+Stephenson 	:	17	:	48979
+Tazewell 	:	17	:	128485
+Union 	:	17	:	18293
+Vermilion 	:	17	:	83919
+Wabash 	:	17	:	12937
+Warren 	:	17	:	18735
+Washington 	:	17	:	15148
+Wayne 	:	17	:	17151
+White 	:	17	:	15371
+Whiteside 	:	17	:	60653
+Will 	:	17	:	502266
+Williamson 	:	17	:	61296
+Winnebago 	:	17	:	278418
+Woodford 	:	17	:	35469
+Adams 	:	18	:	33625
+Allen 	:	18	:	331849
+Bartholomew 	:	18	:	71435
+Benton 	:	18	:	9421
+Blackford 	:	18	:	14048
+Boone 	:	18	:	46107
+Brown 	:	18	:	14957
+Carroll 	:	18	:	20165
+Cass 	:	18	:	40930
+Clark 	:	18	:	96472
+Clay 	:	18	:	26556
+Clinton 	:	18	:	33866
+Crawford 	:	18	:	10743
+Daviess 	:	18	:	29820
+Dearborn 	:	18	:	46109
+Decatur 	:	18	:	24555
+DeKalb 	:	18	:	40285
+Delaware 	:	18	:	118769
+Dubois 	:	18	:	39674
+Elkhart 	:	18	:	182791
+Fayette 	:	18	:	25588
+Floyd 	:	18	:	70823
+Fountain 	:	18	:	17954
+Franklin 	:	18	:	22151
+Fulton 	:	18	:	20511
+Gibson 	:	18	:	32500
+Grant 	:	18	:	73403
+Greene 	:	18	:	33157
+Hamilton 	:	18	:	182740
+Hancock 	:	18	:	55391
+Harrison 	:	18	:	34325
+Hendricks 	:	18	:	104093
+Henry 	:	18	:	48508
+Howard 	:	18	:	84964
+Huntington 	:	18	:	38075
+Jackson 	:	18	:	41335
+Jasper 	:	18	:	30043
+Jay 	:	18	:	21806
+Jefferson 	:	18	:	31705
+Jennings 	:	18	:	27554
+Johnson 	:	18	:	115209
+Knox 	:	18	:	39256
+Kosciusko 	:	18	:	74057
+Lagrange 	:	18	:	34909
+Lake 	:	18	:	484564
+LaPorte 	:	18	:	110106
+Lawrence 	:	18	:	45922
+Madison 	:	18	:	133358
+Marion 	:	18	:	860454
+Marshall 	:	18	:	45128
+Martin 	:	18	:	10369
+Miami 	:	18	:	36082
+Monroe 	:	18	:	120563
+Montgomery 	:	18	:	37629
+Morgan 	:	18	:	66689
+Newton 	:	18	:	14566
+Noble 	:	18	:	46275
+Ohio 	:	18	:	5623
+Orange 	:	18	:	19306
+Owen 	:	18	:	21786
+Parke 	:	18	:	17241
+Perry 	:	18	:	18899
+Pike 	:	18	:	12837
+Porter 	:	18	:	146798
+Posey 	:	18	:	27061
+Pulaski 	:	18	:	13755
+Putnam 	:	18	:	36019
+Randolph 	:	18	:	27401
+Ripley 	:	18	:	26523
+Rush 	:	18	:	18261
+St. Joseph 	:	18	:	265559
+Scott 	:	18	:	22960
+Shelby 	:	18	:	43445
+Spencer 	:	18	:	20391
+Starke 	:	18	:	23556
+Steuben 	:	18	:	33214
+Sullivan 	:	18	:	21751
+Switzerland 	:	18	:	9065
+Tippecanoe 	:	18	:	148955
+Tipton 	:	18	:	16577
+Union 	:	18	:	7349
+Vanderburgh 	:	18	:	171922
+Vermillion 	:	18	:	16788
+Vigo 	:	18	:	105848
+Wabash 	:	18	:	34960
+Warren 	:	18	:	8419
+Warrick 	:	18	:	52383
+Washington 	:	18	:	27223
+Wayne 	:	18	:	71097
+Wells 	:	18	:	27600
+White 	:	18	:	25267
+Whitley 	:	18	:	30707
+Adair 	:	19	:	8243
+Adams 	:	19	:	4482
+Allamakee 	:	19	:	14675
+Appanoose 	:	19	:	13721
+Audubon 	:	19	:	6830
+Benton 	:	19	:	25308
+Black Hawk 	:	19	:	128012
+Boone 	:	19	:	26224
+Bremer 	:	19	:	23325
+Buchanan 	:	19	:	21093
+Buena Vista 	:	19	:	20411
+Butler 	:	19	:	15305
+Calhoun 	:	19	:	11115
+Carroll 	:	19	:	21421
+Cass 	:	19	:	14684
+Cedar 	:	19	:	18187
+Cerro Gordo 	:	19	:	46447
+Cherokee 	:	19	:	13035
+Chickasaw 	:	19	:	13095
+Clarke 	:	19	:	9133
+Clay 	:	19	:	17372
+Clayton 	:	19	:	18678
+Clinton 	:	19	:	50149
+Crawford 	:	19	:	16942
+Dallas 	:	19	:	40750
+Davis 	:	19	:	8541
+Decatur 	:	19	:	8689
+Delaware 	:	19	:	18404
+Des Moines 	:	19	:	42351
+Dickinson 	:	19	:	16424
+Dubuque 	:	19	:	89143
+Emmet 	:	19	:	11027
+Fayette 	:	19	:	22008
+Floyd 	:	19	:	16900
+Franklin 	:	19	:	10704
+Fremont 	:	19	:	8010
+Greene 	:	19	:	10366
+Grundy 	:	19	:	12369
+Guthrie 	:	19	:	11353
+Hamilton 	:	19	:	16438
+Hancock 	:	19	:	12100
+Hardin 	:	19	:	18812
+Harrison 	:	19	:	15666
+Henry 	:	19	:	20336
+Howard 	:	19	:	9932
+Humboldt 	:	19	:	10381
+Ida 	:	19	:	7837
+Iowa 	:	19	:	15671
+Jackson 	:	19	:	20296
+Jasper 	:	19	:	37213
+Jefferson 	:	19	:	16181
+Johnson 	:	19	:	111006
+Jones 	:	19	:	20221
+Keokuk 	:	19	:	11400
+Kossuth 	:	19	:	17163
+Lee 	:	19	:	38052
+Linn 	:	19	:	191701
+Louisa 	:	19	:	12183
+Lucas 	:	19	:	9422
+Lyon 	:	19	:	11763
+Madison 	:	19	:	14019
+Mahaska 	:	19	:	22335
+Marion 	:	19	:	32052
+Marshall 	:	19	:	39311
+Mills 	:	19	:	14547
+Mitchell 	:	19	:	10874
+Monona 	:	19	:	10020
+Monroe 	:	19	:	8016
+Montgomery 	:	19	:	11771
+Muscatine 	:	19	:	41722
+O'Brien 	:	19	:	15102
+Osceola 	:	19	:	7003
+Page 	:	19	:	16976
+Palo Alto 	:	19	:	10147
+Plymouth 	:	19	:	24849
+Pocahontas 	:	19	:	8662
+Polk 	:	19	:	374601
+Pottawattamie 	:	19	:	87704
+Poweshiek 	:	19	:	18815
+Ringgold 	:	19	:	5469
+Sac 	:	19	:	11529
+Scott 	:	19	:	158668
+Shelby 	:	19	:	13173
+Sioux 	:	19	:	31589
+Story 	:	19	:	79981
+Tama 	:	19	:	18103
+Taylor 	:	19	:	6958
+Union 	:	19	:	12309
+Van Buren 	:	19	:	7809
+Wapello 	:	19	:	36051
+Warren 	:	19	:	40671
+Washington 	:	19	:	20670
+Wayne 	:	19	:	6730
+Webster 	:	19	:	40235
+Winnebago 	:	19	:	11723
+Winneshiek 	:	19	:	21310
+Woodbury 	:	19	:	103877
+Worth 	:	19	:	7909
+Wright 	:	19	:	14334
+Allen 	:	20	:	14385
+Anderson 	:	20	:	8110
+Atchison 	:	20	:	16774
+Barber 	:	20	:	5307
+Barton 	:	20	:	28205
+Bourbon 	:	20	:	15379
+Brown 	:	20	:	10724
+Butler 	:	20	:	59482
+Chase 	:	20	:	3030
+Chautauqua 	:	20	:	4359
+Cherokee 	:	20	:	22605
+Cheyenne 	:	20	:	3165
+Clark 	:	20	:	2390
+Clay 	:	20	:	8822
+Cloud 	:	20	:	10268
+Coffey 	:	20	:	8865
+Comanche 	:	20	:	1967
+Cowley 	:	20	:	36291
+Crawford 	:	20	:	38242
+Decatur 	:	20	:	3472
+Dickinson 	:	20	:	19344
+Doniphan 	:	20	:	8249
+Douglas 	:	20	:	99962
+Edwards 	:	20	:	3449
+Elk 	:	20	:	3261
+Ellis 	:	20	:	27507
+Ellsworth 	:	20	:	6525
+Finney 	:	20	:	40523
+Ford 	:	20	:	32458
+Franklin 	:	20	:	24784
+Geary 	:	20	:	27947
+Gove 	:	20	:	3068
+Graham 	:	20	:	2946
+Grant 	:	20	:	7909
+Gray 	:	20	:	5904
+Greeley 	:	20	:	1534
+Greenwood 	:	20	:	7673
+Hamilton 	:	20	:	2670
+Harper 	:	20	:	6536
+Harvey 	:	20	:	32869
+Haskell 	:	20	:	4307
+Hodgeman 	:	20	:	2085
+Jackson 	:	20	:	12657
+Jefferson 	:	20	:	18426
+Jewell 	:	20	:	3791
+Johnson 	:	20	:	451086
+Kearny 	:	20	:	4531
+Kingman 	:	20	:	8673
+Kiowa 	:	20	:	3278
+Labette 	:	20	:	22835
+Lane 	:	20	:	2155
+Leavenworth 	:	20	:	68691
+Lincoln 	:	20	:	3578
+Linn 	:	20	:	9570
+Logan 	:	20	:	3046
+Lyon 	:	20	:	35935
+McPherson 	:	20	:	29554
+Marion 	:	20	:	13361
+Marshall 	:	20	:	10965
+Meade 	:	20	:	4631
+Miami 	:	20	:	28351
+Mitchell 	:	20	:	6932
+Montgomery 	:	20	:	36252
+Morris 	:	20	:	6104
+Morton 	:	20	:	3496
+Nemaha 	:	20	:	10717
+Neosho 	:	20	:	16997
+Ness 	:	20	:	3454
+Norton 	:	20	:	5953
+Osage 	:	20	:	16712
+Osborne 	:	20	:	4452
+Ottawa 	:	20	:	6163
+Pawnee 	:	20	:	7233
+Phillips 	:	20	:	6001
+Pottawatomie 	:	20	:	18209
+Pratt 	:	20	:	9647
+Rawlins 	:	20	:	2966
+Reno 	:	20	:	64790
+Republic 	:	20	:	5835
+Rice 	:	20	:	10761
+Riley 	:	20	:	62843
+Rooks 	:	20	:	5685
+Rush 	:	20	:	3551
+Russell 	:	20	:	7370
+Saline 	:	20	:	53597
+Scott 	:	20	:	5120
+Sedgwick 	:	20	:	452869
+Seward 	:	20	:	22510
+Shawnee 	:	20	:	169871
+Sheridan 	:	20	:	2813
+Sherman 	:	20	:	6760
+Smith 	:	20	:	4536
+Stafford 	:	20	:	4789
+Stanton 	:	20	:	2406
+Stevens 	:	20	:	5463
+Sumner 	:	20	:	25946
+Thomas 	:	20	:	8180
+Trego 	:	20	:	3319
+Wabaunsee 	:	20	:	6885
+Wallace 	:	20	:	1749
+Washington 	:	20	:	6483
+Wichita 	:	20	:	2531
+Wilson 	:	20	:	10332
+Woodson 	:	20	:	3788
+Wyandotte 	:	20	:	157882
+Adair 	:	21	:	17244
+Allen 	:	21	:	17800
+Anderson 	:	21	:	19111
+Ballard 	:	21	:	8286
+Barren 	:	21	:	38033
+Bath 	:	21	:	11085
+Bell 	:	21	:	30060
+Boone 	:	21	:	85991
+Bourbon 	:	21	:	19360
+Boyd 	:	21	:	49752
+Boyle 	:	21	:	27697
+Bracken 	:	21	:	8279
+Breathitt 	:	21	:	16100
+Breckinridge 	:	21	:	18648
+Bullitt 	:	21	:	61236
+Butler 	:	21	:	13010
+Caldwell 	:	21	:	13060
+Calloway 	:	21	:	34177
+Campbell 	:	21	:	88616
+Carlisle 	:	21	:	5351
+Carroll 	:	21	:	10155
+Carter 	:	21	:	26889
+Casey 	:	21	:	15447
+Christian 	:	21	:	72265
+Clark 	:	21	:	33144
+Clay 	:	21	:	24556
+Clinton 	:	21	:	9634
+Crittenden 	:	21	:	9384
+Cumberland 	:	21	:	7147
+Daviess 	:	21	:	91545
+Edmonson 	:	21	:	11644
+Elliott 	:	21	:	6748
+Estill 	:	21	:	15307
+Fayette 	:	21	:	260512
+Fleming 	:	21	:	13792
+Floyd 	:	21	:	42441
+Franklin 	:	21	:	47687
+Fulton 	:	21	:	7752
+Gallatin 	:	21	:	7870
+Garrard 	:	21	:	14792
+Grant 	:	21	:	22384
+Graves 	:	21	:	37028
+Grayson 	:	21	:	24053
+Green 	:	21	:	11518
+Greenup 	:	21	:	36891
+Hancock 	:	21	:	8392
+Hardin 	:	21	:	94174
+Harlan 	:	21	:	33202
+Harrison 	:	21	:	17983
+Hart 	:	21	:	17445
+Henderson 	:	21	:	44829
+Henry 	:	21	:	15060
+Hickman 	:	21	:	5262
+Hopkins 	:	21	:	46519
+Jackson 	:	21	:	13495
+Jefferson 	:	21	:	693604
+Jessamine 	:	21	:	39041
+Johnson 	:	21	:	23445
+Kenton 	:	21	:	151464
+Knott 	:	21	:	17649
+Knox 	:	21	:	31795
+Larue 	:	21	:	13373
+Laurel 	:	21	:	52715
+Lawrence 	:	21	:	15569
+Lee 	:	21	:	7916
+Leslie 	:	21	:	12401
+Letcher 	:	21	:	25277
+Lewis 	:	21	:	14092
+Lincoln 	:	21	:	23361
+Livingston 	:	21	:	9804
+Logan 	:	21	:	26573
+Lyon 	:	21	:	8080
+McCracken 	:	21	:	65514
+McCreary 	:	21	:	17080
+McLean 	:	21	:	9938
+Madison 	:	21	:	70872
+Magoffin 	:	21	:	13332
+Marion 	:	21	:	18212
+Marshall 	:	21	:	30125
+Martin 	:	21	:	12578
+Mason 	:	21	:	16800
+Meade 	:	21	:	26349
+Menifee 	:	21	:	6556
+Mercer 	:	21	:	20817
+Metcalfe 	:	21	:	10037
+Monroe 	:	21	:	11756
+Montgomery 	:	21	:	22554
+Morgan 	:	21	:	13948
+Muhlenberg 	:	21	:	31839
+Nelson 	:	21	:	37477
+Nicholas 	:	21	:	6813
+Ohio 	:	21	:	22916
+Oldham 	:	21	:	46178
+Owen 	:	21	:	10547
+Owsley 	:	21	:	4858
+Pendleton 	:	21	:	14390
+Perry 	:	21	:	29390
+Pike 	:	21	:	68736
+Powell 	:	21	:	13237
+Pulaski 	:	21	:	56217
+Robertson 	:	21	:	2266
+Rockcastle 	:	21	:	16582
+Rowan 	:	21	:	22094
+Russell 	:	21	:	16315
+Scott 	:	21	:	33061
+Shelby 	:	21	:	33337
+Simpson 	:	21	:	16405
+Spencer 	:	21	:	11766
+Taylor 	:	21	:	22927
+Todd 	:	21	:	11971
+Trigg 	:	21	:	12597
+Trimble 	:	21	:	8125
+Union 	:	21	:	15637
+Warren 	:	21	:	92522
+Washington 	:	21	:	10916
+Wayne 	:	21	:	19923
+Webster 	:	21	:	14120
+Whitley 	:	21	:	35865
+Wolfe 	:	21	:	7065
+Woodford 	:	21	:	23208
+Acadia 	:	22	:	58861
+Allen 	:	22	:	25440
+Ascension 	:	22	:	76627
+Assumption 	:	22	:	23388
+Avoyelles 	:	22	:	41481
+Beauregard 	:	22	:	32986
+Bienville 	:	22	:	15752
+Bossier 	:	22	:	98310
+Caddo 	:	22	:	252161
+Calcasieu 	:	22	:	183577
+Caldwell 	:	22	:	10560
+Cameron 	:	22	:	9991
+Catahoula 	:	22	:	10920
+Claiborne 	:	22	:	16851
+Concordia 	:	22	:	20247
+De Soto 	:	22	:	25494
+East Baton Rouge 	:	22	:	412852
+East Carroll 	:	22	:	9421
+East Feliciana 	:	22	:	21360
+Evangeline 	:	22	:	35434
+Franklin 	:	22	:	21263
+Grant 	:	22	:	18698
+Iberia 	:	22	:	73266
+Iberville 	:	22	:	33320
+Jackson 	:	22	:	15397
+Jefferson 	:	22	:	455466
+Jefferson Davis 	:	22	:	31435
+Lafayette 	:	22	:	190503
+Lafourche 	:	22	:	89974
+La Salle 	:	22	:	14282
+Lincoln 	:	22	:	42509
+Livingston 	:	22	:	91814
+Madison 	:	22	:	13728
+Morehouse 	:	22	:	31021
+Natchitoches 	:	22	:	39080
+Orleans 	:	22	:	484674
+Ouachita 	:	22	:	147250
+Plaquemines 	:	22	:	26757
+Pointe Coupee 	:	22	:	22763
+Rapides 	:	22	:	126337
+Red River 	:	22	:	9622
+Richland 	:	22	:	20981
+Sabine 	:	22	:	23459
+St. Bernard 	:	22	:	67229
+St. Charles 	:	22	:	48072
+St. Helena 	:	22	:	10525
+St. James 	:	22	:	21216
+St. John the Baptist 	:	22	:	43044
+St. Landry 	:	22	:	87700
+St. Martin 	:	22	:	48583
+St. Mary 	:	22	:	53500
+St. Tammany 	:	22	:	191268
+Tangipahoa 	:	22	:	100588
+Tensas 	:	22	:	6618
+Terrebonne 	:	22	:	104503
+Union 	:	22	:	22803
+Vermilion 	:	22	:	53807
+Vernon 	:	22	:	52531
+Washington 	:	22	:	43926
+Webster 	:	22	:	41831
+West Baton Rouge 	:	22	:	21601
+West Carroll 	:	22	:	12314
+West Feliciana 	:	22	:	15111
+Winn 	:	22	:	16894
+Androscoggin 	:	23	:	103793
+Aroostook 	:	23	:	73938
+Cumberland 	:	23	:	265612
+Franklin 	:	23	:	29467
+Hancock 	:	23	:	51791
+Kennebec 	:	23	:	117114
+Knox 	:	23	:	39618
+Lincoln 	:	23	:	33616
+Oxford 	:	23	:	54755
+Penobscot 	:	23	:	144919
+Piscataquis 	:	23	:	17235
+Sagadahoc 	:	23	:	35214
+Somerset 	:	23	:	50888
+Waldo 	:	23	:	36280
+Washington 	:	23	:	33941
+York 	:	23	:	186742
+Allegany 	:	24	:	74930
+Anne Arundel 	:	24	:	489656
+Baltimore 	:	24	:	754292
+Calvert 	:	24	:	74563
+Caroline 	:	24	:	29772
+Carroll 	:	24	:	150897
+Cecil 	:	24	:	85951
+Charles 	:	24	:	120546
+Dorchester 	:	24	:	30674
+Frederick 	:	24	:	195277
+Garrett 	:	24	:	29846
+Harford 	:	24	:	218590
+Howard 	:	24	:	247842
+Kent 	:	24	:	19197
+Montgomery 	:	24	:	873341
+Prince George's 	:	24	:	801515
+Queen Anne's 	:	24	:	40563
+St. Mary's 	:	24	:	86211
+Somerset 	:	24	:	24747
+Talbot 	:	24	:	33812
+Washington 	:	24	:	131923
+Wicomico 	:	24	:	84644
+Worcester 	:	24	:	46543
+Baltimore city	:	24	:	651154
+Barnstable 	:	25	:	222230
+Berkshire 	:	25	:	134953
+Bristol 	:	25	:	534678
+Dukes 	:	25	:	14987
+Essex 	:	25	:	723419
+Franklin 	:	25	:	71535
+Hampden 	:	25	:	456228
+Hampshire 	:	25	:	152251
+Middlesex 	:	25	:	1465396
+Nantucket 	:	25	:	9520
+Norfolk 	:	25	:	650308
+Plymouth 	:	25	:	472822
+Suffolk 	:	25	:	689807
+Worcester 	:	25	:	750963
+Alcona 	:	26	:	11719
+Alger 	:	26	:	9862
+Allegan 	:	26	:	105665
+Alpena 	:	26	:	31314
+Antrim 	:	26	:	23110
+Arenac 	:	26	:	17269
+Baraga 	:	26	:	8746
+Barry 	:	26	:	56755
+Bay 	:	26	:	110157
+Benzie 	:	26	:	15998
+Berrien 	:	26	:	162453
+Branch 	:	26	:	45787
+Calhoun 	:	26	:	137985
+Cass 	:	26	:	51104
+Charlevoix 	:	26	:	26090
+Cheboygan 	:	26	:	26448
+Chippewa 	:	26	:	38543
+Clare 	:	26	:	31252
+Clinton 	:	26	:	64753
+Crawford 	:	26	:	14273
+Delta 	:	26	:	38520
+Dickinson 	:	26	:	27472
+Eaton 	:	26	:	103655
+Emmet 	:	26	:	31437
+Genesee 	:	26	:	436141
+Gladwin 	:	26	:	26023
+Gogebic 	:	26	:	17370
+Grand Traverse 	:	26	:	77654
+Gratiot 	:	26	:	42285
+Hillsdale 	:	26	:	46527
+Houghton 	:	26	:	36016
+Huron 	:	26	:	36079
+Ingham 	:	26	:	279320
+Ionia 	:	26	:	61518
+Iosco 	:	26	:	27339
+Iron 	:	26	:	13138
+Isabella 	:	26	:	63351
+Jackson 	:	26	:	158422
+Kalamazoo 	:	26	:	238603
+Kalkaska 	:	26	:	16571
+Kent 	:	26	:	574335
+Keweenaw 	:	26	:	2301
+Lake 	:	26	:	11333
+Lapeer 	:	26	:	87904
+Leelanau 	:	26	:	21119
+Lenawee 	:	26	:	98890
+Livingston 	:	26	:	156951
+Luce 	:	26	:	7024
+Mackinac 	:	26	:	11943
+Macomb 	:	26	:	788149
+Manistee 	:	26	:	24527
+Marquette 	:	26	:	64634
+Mason 	:	26	:	28274
+Mecosta 	:	26	:	40553
+Menominee 	:	26	:	25326
+Midland 	:	26	:	82874
+Missaukee 	:	26	:	14478
+Monroe 	:	26	:	145945
+Montcalm 	:	26	:	61266
+Montmorency 	:	26	:	10315
+Muskegon 	:	26	:	170200
+Newaygo 	:	26	:	47874
+Oakland 	:	26	:	1194156
+Oceana 	:	26	:	26873
+Ogemaw 	:	26	:	21645
+Ontonagon 	:	26	:	7818
+Osceola 	:	26	:	23197
+Oscoda 	:	26	:	9418
+Otsego 	:	26	:	23301
+Ottawa 	:	26	:	238314
+Presque Isle 	:	26	:	14411
+Roscommon 	:	26	:	25469
+Saginaw 	:	26	:	210039
+St. Clair 	:	26	:	164235
+St. Joseph 	:	26	:	62422
+Sanilac 	:	26	:	44547
+Schoolcraft 	:	26	:	8903
+Shiawassee 	:	26	:	71687
+Tuscola 	:	26	:	58266
+Van Buren 	:	26	:	76263
+Washtenaw 	:	26	:	322895
+Wayne 	:	26	:	2061162
+Wexford 	:	26	:	30484
+Aitkin 	:	27	:	15301
+Anoka 	:	27	:	298084
+Becker 	:	27	:	30000
+Beltrami 	:	27	:	39650
+Benton 	:	27	:	34226
+Big Stone 	:	27	:	5820
+Blue Earth 	:	27	:	55941
+Brown 	:	27	:	26911
+Carlton 	:	27	:	31671
+Carver 	:	27	:	70205
+Cass 	:	27	:	27150
+Chippewa 	:	27	:	13088
+Chisago 	:	27	:	41101
+Clay 	:	27	:	51229
+Clearwater 	:	27	:	8423
+Cook 	:	27	:	5168
+Cottonwood 	:	27	:	12167
+Crow Wing 	:	27	:	55099
+Dakota 	:	27	:	355904
+Dodge 	:	27	:	17731
+Douglas 	:	27	:	32821
+Faribault 	:	27	:	16181
+Fillmore 	:	27	:	21122
+Freeborn 	:	27	:	32584
+Goodhue 	:	27	:	44127
+Grant 	:	27	:	6289
+Hennepin 	:	27	:	1116200
+Houston 	:	27	:	19718
+Hubbard 	:	27	:	18376
+Isanti 	:	27	:	31287
+Itasca 	:	27	:	43992
+Jackson 	:	27	:	11268
+Kanabec 	:	27	:	14996
+Kandiyohi 	:	27	:	41203
+Kittson 	:	27	:	5285
+Koochiching 	:	27	:	14355
+Lac qui Parle 	:	27	:	8067
+Lake 	:	27	:	11058
+Lake of the Woods 	:	27	:	4522
+Le Sueur 	:	27	:	25426
+Lincoln 	:	27	:	6429
+Lyon 	:	27	:	25425
+McLeod 	:	27	:	34898
+Mahnomen 	:	27	:	5190
+Marshall 	:	27	:	10155
+Martin 	:	27	:	21802
+Meeker 	:	27	:	22644
+Mille Lacs 	:	27	:	22330
+Morrison 	:	27	:	31712
+Mower 	:	27	:	38603
+Murray 	:	27	:	9165
+Nicollet 	:	27	:	29771
+Nobles 	:	27	:	20832
+Norman 	:	27	:	7442
+Olmsted 	:	27	:	124277
+Otter Tail 	:	27	:	57159
+Pennington 	:	27	:	13584
+Pine 	:	27	:	26530
+Pipestone 	:	27	:	9895
+Polk 	:	27	:	31369
+Pope 	:	27	:	11236
+Ramsey 	:	27	:	511035
+Red Lake 	:	27	:	4299
+Redwood 	:	27	:	16815
+Renville 	:	27	:	17154
+Rice 	:	27	:	56665
+Rock 	:	27	:	9721
+Roseau 	:	27	:	16338
+St. Louis 	:	27	:	200528
+Scott 	:	27	:	89498
+Sherburne 	:	27	:	64417
+Sibley 	:	27	:	15356
+Stearns 	:	27	:	133166
+Steele 	:	27	:	33680
+Stevens 	:	27	:	10053
+Swift 	:	27	:	11956
+Todd 	:	27	:	24426
+Traverse 	:	27	:	4134
+Wabasha 	:	27	:	21610
+Wadena 	:	27	:	13713
+Waseca 	:	27	:	19526
+Washington 	:	27	:	201130
+Watonwan 	:	27	:	11876
+Wilkin 	:	27	:	7138
+Winona 	:	27	:	49985
+Wright 	:	27	:	89986
+Yellow Medicine 	:	27	:	11080
+Adams 	:	28	:	34340
+Alcorn 	:	28	:	34558
+Amite 	:	28	:	13599
+Attala 	:	28	:	19661
+Benton 	:	28	:	8026
+Bolivar 	:	28	:	40633
+Calhoun 	:	28	:	15069
+Carroll 	:	28	:	10769
+Chickasaw 	:	28	:	19440
+Choctaw 	:	28	:	9758
+Claiborne 	:	28	:	11831
+Clarke 	:	28	:	17955
+Clay 	:	28	:	21979
+Coahoma 	:	28	:	30622
+Copiah 	:	28	:	28757
+Covington 	:	28	:	19407
+DeSoto 	:	28	:	107199
+Forrest 	:	28	:	72604
+Franklin 	:	28	:	8448
+George 	:	28	:	19144
+Greene 	:	28	:	13299
+Grenada 	:	28	:	23263
+Hancock 	:	28	:	42967
+Harrison 	:	28	:	189601
+Hinds 	:	28	:	250800
+Holmes 	:	28	:	21609
+Humphreys 	:	28	:	11206
+Issaquena 	:	28	:	2274
+Itawamba 	:	28	:	22770
+Jackson 	:	28	:	131420
+Jasper 	:	28	:	18149
+Jefferson 	:	28	:	9740
+Jefferson Davis 	:	28	:	13962
+Jones 	:	28	:	64958
+Kemper 	:	28	:	10453
+Lafayette 	:	28	:	38744
+Lamar 	:	28	:	39070
+Lauderdale 	:	28	:	78161
+Lawrence 	:	28	:	13258
+Leake 	:	28	:	20940
+Lee 	:	28	:	75755
+Leflore 	:	28	:	37947
+Lincoln 	:	28	:	33166
+Lowndes 	:	28	:	61586
+Madison 	:	28	:	74674
+Marion 	:	28	:	25595
+Marshall 	:	28	:	34993
+Monroe 	:	28	:	38014
+Montgomery 	:	28	:	12189
+Neshoba 	:	28	:	28684
+Newton 	:	28	:	21838
+Noxubee 	:	28	:	12548
+Oktibbeha 	:	28	:	42902
+Panola 	:	28	:	34274
+Pearl River 	:	28	:	48621
+Perry 	:	28	:	12138
+Pike 	:	28	:	38940
+Pontotoc 	:	28	:	26726
+Prentiss 	:	28	:	25556
+Quitman 	:	28	:	10117
+Rankin 	:	28	:	115327
+Scott 	:	28	:	28423
+Sharkey 	:	28	:	6580
+Simpson 	:	28	:	27639
+Smith 	:	28	:	16182
+Stone 	:	28	:	13622
+Sunflower 	:	28	:	34369
+Tallahatchie 	:	28	:	14903
+Tate 	:	28	:	25370
+Tippah 	:	28	:	20826
+Tishomingo 	:	28	:	19163
+Tunica 	:	28	:	9227
+Union 	:	28	:	25362
+Walthall 	:	28	:	15156
+Warren 	:	28	:	49644
+Washington 	:	28	:	62977
+Wayne 	:	28	:	21216
+Webster 	:	28	:	10294
+Wilkinson 	:	28	:	10312
+Winston 	:	28	:	20160
+Yalobusha 	:	28	:	13051
+Yazoo 	:	28	:	28149
+Adair 	:	29	:	24977
+Andrew 	:	29	:	16492
+Atchison 	:	29	:	6430
+Audrain 	:	29	:	25853
+Barry 	:	29	:	34010
+Barton 	:	29	:	12541
+Bates 	:	29	:	16653
+Benton 	:	29	:	17180
+Bollinger 	:	29	:	12029
+Boone 	:	29	:	135454
+Buchanan 	:	29	:	85998
+Butler 	:	29	:	40867
+Caldwell 	:	29	:	8969
+Callaway 	:	29	:	40766
+Camden 	:	29	:	37051
+Cape Girardeau 	:	29	:	68693
+Carroll 	:	29	:	10285
+Carter 	:	29	:	5941
+Cass 	:	29	:	82092
+Cedar 	:	29	:	13733
+Chariton 	:	29	:	8438
+Christian 	:	29	:	54285
+Clark 	:	29	:	7416
+Clay 	:	29	:	184006
+Clinton 	:	29	:	18979
+Cole 	:	29	:	71397
+Cooper 	:	29	:	16670
+Crawford 	:	29	:	22804
+Dade 	:	29	:	7923
+Dallas 	:	29	:	15661
+Daviess 	:	29	:	8016
+DeKalb 	:	29	:	11597
+Dent 	:	29	:	14927
+Douglas 	:	29	:	13084
+Dunklin 	:	29	:	33155
+Franklin 	:	29	:	93807
+Gasconade 	:	29	:	15342
+Gentry 	:	29	:	6861
+Greene 	:	29	:	240391
+Grundy 	:	29	:	10432
+Harrison 	:	29	:	8850
+Henry 	:	29	:	21997
+Hickory 	:	29	:	8940
+Holt 	:	29	:	5351
+Howard 	:	29	:	10212
+Howell 	:	29	:	37238
+Iron 	:	29	:	10697
+Jackson 	:	29	:	654880
+Jasper 	:	29	:	104686
+Jefferson 	:	29	:	198099
+Johnson 	:	29	:	48258
+Knox 	:	29	:	4361
+Laclede 	:	29	:	32513
+Lafayette 	:	29	:	32960
+Lawrence 	:	29	:	35204
+Lewis 	:	29	:	10494
+Lincoln 	:	29	:	38944
+Linn 	:	29	:	13754
+Livingston 	:	29	:	14558
+McDonald 	:	29	:	21681
+Macon 	:	29	:	15762
+Madison 	:	29	:	11800
+Maries 	:	29	:	8903
+Marion 	:	29	:	28289
+Mercer 	:	29	:	3757
+Miller 	:	29	:	23564
+Mississippi 	:	29	:	13427
+Moniteau 	:	29	:	14827
+Monroe 	:	29	:	9311
+Montgomery 	:	29	:	12136
+Morgan 	:	29	:	19309
+New Madrid 	:	29	:	19760
+Newton 	:	29	:	52636
+Nodaway 	:	29	:	21912
+Oregon 	:	29	:	10344
+Osage 	:	29	:	13062
+Ozark 	:	29	:	9542
+Pemiscot 	:	29	:	20047
+Perry 	:	29	:	18132
+Pettis 	:	29	:	39403
+Phelps 	:	29	:	39825
+Pike 	:	29	:	18351
+Platte 	:	29	:	73781
+Polk 	:	29	:	26992
+Pulaski 	:	29	:	41165
+Putnam 	:	29	:	5223
+Ralls 	:	29	:	9626
+Randolph 	:	29	:	24663
+Ray 	:	29	:	23354
+Reynolds 	:	29	:	6689
+Ripley 	:	29	:	13509
+St. Charles 	:	29	:	283883
+St. Clair 	:	29	:	9652
+Ste. Genevieve 	:	29	:	17842
+St. Francois 	:	29	:	55641
+St. Louis 	:	29	:	1016315
+Saline 	:	29	:	23756
+Schuyler 	:	29	:	4170
+Scotland 	:	29	:	4983
+Scott 	:	29	:	40422
+Shannon 	:	29	:	8324
+Shelby 	:	29	:	6799
+Stoddard 	:	29	:	29705
+Stone 	:	29	:	28658
+Sullivan 	:	29	:	7219
+Taney 	:	29	:	39703
+Texas 	:	29	:	23003
+Vernon 	:	29	:	20454
+Warren 	:	29	:	24525
+Washington 	:	29	:	23344
+Wayne 	:	29	:	13259
+Webster 	:	29	:	31045
+Worth 	:	29	:	2382
+Wright 	:	29	:	17955
+St. Louis city	:	29	:	348189
+Beaverhead 	:	30	:	9202
+Big Horn 	:	30	:	12671
+Blaine 	:	30	:	7009
+Broadwater 	:	30	:	4385
+Carbon 	:	30	:	9552
+Carter 	:	30	:	1360
+Cascade 	:	30	:	80357
+Chouteau 	:	30	:	5970
+Custer 	:	30	:	11696
+Daniels 	:	30	:	2017
+Dawson 	:	30	:	9059
+Deer Lodge 	:	30	:	9417
+Fallon 	:	30	:	2837
+Fergus 	:	30	:	11893
+Flathead 	:	30	:	74471
+Gallatin 	:	30	:	67831
+Garfield 	:	30	:	1279
+Glacier 	:	30	:	13247
+Golden Valley 	:	30	:	1042
+Granite 	:	30	:	2830
+Hill 	:	30	:	16673
+Jefferson 	:	30	:	10049
+Judith Basin 	:	30	:	2329
+Lake 	:	30	:	26507
+Lewis and Clark 	:	30	:	55716
+Liberty 	:	30	:	2158
+Lincoln 	:	30	:	18837
+McCone 	:	30	:	1977
+Madison 	:	30	:	6851
+Meagher 	:	30	:	1932
+Mineral 	:	30	:	3884
+Missoula 	:	30	:	95802
+Musselshell 	:	30	:	4497
+Park 	:	30	:	15694
+Petroleum 	:	30	:	493
+Phillips 	:	30	:	4601
+Pondera 	:	30	:	6424
+Powder River 	:	30	:	1858
+Powell 	:	30	:	7180
+Prairie 	:	30	:	1199
+Ravalli 	:	30	:	36070
+Richland 	:	30	:	9667
+Roosevelt 	:	30	:	10620
+Rosebud 	:	30	:	9383
+Sanders 	:	30	:	10227
+Sheridan 	:	30	:	4105
+Silver Bow 	:	30	:	34606
+Stillwater 	:	30	:	8195
+Sweet Grass 	:	30	:	3609
+Teton 	:	30	:	6445
+Toole 	:	30	:	5267
+Treasure 	:	30	:	861
+Valley 	:	30	:	7675
+Wheatland 	:	30	:	2259
+Wibaux 	:	30	:	1068
+Yellowstone 	:	30	:	129352
+Adams 	:	31	:	31151
+Antelope 	:	31	:	7452
+Arthur 	:	31	:	444
+Banner 	:	31	:	819
+Blaine 	:	31	:	583
+Boone 	:	31	:	6259
+Box Butte 	:	31	:	12158
+Boyd 	:	31	:	2438
+Brown 	:	31	:	3525
+Buffalo 	:	31	:	42259
+Burt 	:	31	:	7791
+Butler 	:	31	:	8767
+Cass 	:	31	:	24334
+Cedar 	:	31	:	9615
+Chase 	:	31	:	4068
+Cherry 	:	31	:	6148
+Cheyenne 	:	31	:	9830
+Clay 	:	31	:	7039
+Colfax 	:	31	:	10441
+Cuming 	:	31	:	10203
+Custer 	:	31	:	11793
+Dakota 	:	31	:	20253
+Dawes 	:	31	:	9060
+Dawson 	:	31	:	24365
+Deuel 	:	31	:	2098
+Dixon 	:	31	:	6339
+Dodge 	:	31	:	36160
+Douglas 	:	31	:	463585
+Dundy 	:	31	:	2292
+Fillmore 	:	31	:	6634
+Franklin 	:	31	:	3574
+Frontier 	:	31	:	3099
+Furnas 	:	31	:	5324
+Gage 	:	31	:	22993
+Garden 	:	31	:	2292
+Garfield 	:	31	:	1902
+Gosper 	:	31	:	2143
+Grant 	:	31	:	747
+Greeley 	:	31	:	2714
+Hall 	:	31	:	53534
+Hamilton 	:	31	:	9403
+Harlan 	:	31	:	3786
+Hayes 	:	31	:	1068
+Hitchcock 	:	31	:	3111
+Holt 	:	31	:	11551
+Hooker 	:	31	:	783
+Howard 	:	31	:	6567
+Jefferson 	:	31	:	8333
+Johnson 	:	31	:	4488
+Kearney 	:	31	:	6882
+Keith 	:	31	:	8875
+Keya Paha 	:	31	:	983
+Kimball 	:	31	:	4089
+Knox 	:	31	:	9374
+Lancaster 	:	31	:	250291
+Lincoln 	:	31	:	34632
+Logan 	:	31	:	774
+Loup 	:	31	:	712
+McPherson 	:	31	:	533
+Madison 	:	31	:	35226
+Merrick 	:	31	:	8204
+Morrill 	:	31	:	5440
+Nance 	:	31	:	4038
+Nemaha 	:	31	:	7576
+Nuckolls 	:	31	:	5057
+Otoe 	:	31	:	15396
+Pawnee 	:	31	:	3087
+Perkins 	:	31	:	3200
+Phelps 	:	31	:	9747
+Pierce 	:	31	:	7857
+Platte 	:	31	:	31662
+Polk 	:	31	:	5639
+Red Willow 	:	31	:	11448
+Richardson 	:	31	:	9531
+Rock 	:	31	:	1756
+Saline 	:	31	:	13843
+Sarpy 	:	31	:	122595
+Saunders 	:	31	:	19830
+Scotts Bluff 	:	31	:	36951
+Seward 	:	31	:	16496
+Sheridan 	:	31	:	6198
+Sherman 	:	31	:	3318
+Sioux 	:	31	:	1475
+Stanton 	:	31	:	6455
+Thayer 	:	31	:	6055
+Thomas 	:	31	:	729
+Thurston 	:	31	:	7171
+Valley 	:	31	:	4647
+Washington 	:	31	:	18780
+Wayne 	:	31	:	9851
+Webster 	:	31	:	4061
+Wheeler 	:	31	:	886
+York 	:	31	:	14598
+Churchill 	:	32	:	23982
+Clark 	:	32	:	1375765
+Douglas 	:	32	:	41259
+Elko 	:	32	:	45291
+Esmeralda 	:	32	:	971
+Eureka 	:	32	:	1651
+Humboldt 	:	32	:	16106
+Lander 	:	32	:	5794
+Lincoln 	:	32	:	4165
+Lyon 	:	32	:	34501
+Mineral 	:	32	:	5071
+Nye 	:	32	:	32485
+Pershing 	:	32	:	6693
+Storey 	:	32	:	3399
+Washoe 	:	32	:	339486
+White Pine 	:	32	:	9181
+Carson City	:	32	:	52457
+Belknap 	:	33	:	56325
+Carroll 	:	33	:	43666
+Cheshire 	:	33	:	73825
+Coos 	:	33	:	33111
+Grafton 	:	33	:	81743
+Hillsborough 	:	33	:	380841
+Merrimack 	:	33	:	136225
+Rockingham 	:	33	:	277359
+Strafford 	:	33	:	112233
+Sullivan 	:	33	:	40458
+Atlantic 	:	34	:	252552
+Bergen 	:	34	:	884118
+Burlington 	:	34	:	423394
+Camden 	:	34	:	508932
+Cape May 	:	34	:	102326
+Cumberland 	:	34	:	146438
+Essex 	:	34	:	793633
+Gloucester 	:	34	:	254673
+Hudson 	:	34	:	608975
+Hunterdon 	:	34	:	121989
+Mercer 	:	34	:	350761
+Middlesex 	:	34	:	750162
+Monmouth 	:	34	:	615301
+Morris 	:	34	:	470212
+Ocean 	:	34	:	510916
+Passaic 	:	34	:	489049
+Salem 	:	34	:	64285
+Somerset 	:	34	:	297490
+Sussex 	:	34	:	144166
+Union 	:	34	:	522541
+Warren 	:	34	:	102437
+Bernalillo 	:	35	:	556678
+Catron 	:	35	:	3543
+Chaves 	:	35	:	61382
+Cibola 	:	35	:	25595
+Colfax 	:	35	:	14189
+Curry 	:	35	:	45044
+De Baca 	:	35	:	2240
+Dona Ana 	:	35	:	174682
+Eddy 	:	35	:	51658
+Grant 	:	35	:	31002
+Guadalupe 	:	35	:	4680
+Harding 	:	35	:	810
+Hidalgo 	:	35	:	5932
+Lea 	:	35	:	55511
+Lincoln 	:	35	:	19411
+Los Alamos 	:	35	:	18343
+Luna 	:	35	:	25016
+McKinley 	:	35	:	74798
+Mora 	:	35	:	5180
+Otero 	:	35	:	62298
+Quay 	:	35	:	10155
+Rio Arriba 	:	35	:	41190
+Roosevelt 	:	35	:	18018
+Sandoval 	:	35	:	89908
+San Juan 	:	35	:	113801
+San Miguel 	:	35	:	30126
+Santa Fe 	:	35	:	129292
+Sierra 	:	35	:	13270
+Socorro 	:	35	:	18078
+Taos 	:	35	:	29979
+Torrance 	:	35	:	16911
+Union 	:	35	:	4174
+Valencia 	:	35	:	66152
+Albany 	:	36	:	294565
+Allegany 	:	36	:	49927
+Bronx 	:	36	:	1332650
+Broome 	:	36	:	200536
+Cattaraugus 	:	36	:	83955
+Cayuga 	:	36	:	81963
+Chautauqua 	:	36	:	139750
+Chemung 	:	36	:	91070
+Chenango 	:	36	:	51401
+Clinton 	:	36	:	79894
+Columbia 	:	36	:	63094
+Cortland 	:	36	:	48599
+Delaware 	:	36	:	48055
+Dutchess 	:	36	:	280150
+Erie 	:	36	:	950265
+Essex 	:	36	:	38851
+Franklin 	:	36	:	51134
+Fulton 	:	36	:	55073
+Genesee 	:	36	:	60370
+Greene 	:	36	:	48195
+Hamilton 	:	36	:	5379
+Herkimer 	:	36	:	64427
+Jefferson 	:	36	:	111738
+Kings 	:	36	:	2465326
+Lewis 	:	36	:	26944
+Livingston 	:	36	:	64328
+Madison 	:	36	:	69441
+Monroe 	:	36	:	735343
+Montgomery 	:	36	:	49708
+Nassau 	:	36	:	1334544
+New York 	:	36	:	1537195
+Niagara 	:	36	:	219846
+Oneida 	:	36	:	235469
+Onondaga 	:	36	:	458336
+Ontario 	:	36	:	100224
+Orange 	:	36	:	341367
+Orleans 	:	36	:	44171
+Oswego 	:	36	:	122377
+Otsego 	:	36	:	61676
+Putnam 	:	36	:	95745
+Queens 	:	36	:	2229379
+Rensselaer 	:	36	:	152538
+Richmond 	:	36	:	443728
+Rockland 	:	36	:	286753
+St. Lawrence 	:	36	:	111931
+Saratoga 	:	36	:	200635
+Schenectady 	:	36	:	146555
+Schoharie 	:	36	:	31582
+Schuyler 	:	36	:	19224
+Seneca 	:	36	:	33342
+Steuben 	:	36	:	98726
+Suffolk 	:	36	:	1419369
+Sullivan 	:	36	:	73966
+Tioga 	:	36	:	51784
+Tompkins 	:	36	:	96501
+Ulster 	:	36	:	177749
+Warren 	:	36	:	63303
+Washington 	:	36	:	61042
+Wayne 	:	36	:	93765
+Westchester 	:	36	:	923459
+Wyoming 	:	36	:	43424
+Yates 	:	36	:	24621
+Alamance 	:	37	:	130800
+Alexander 	:	37	:	33603
+Alleghany 	:	37	:	10677
+Anson 	:	37	:	25275
+Ashe 	:	37	:	24384
+Avery 	:	37	:	17167
+Beaufort 	:	37	:	44958
+Bertie 	:	37	:	19773
+Bladen 	:	37	:	32278
+Brunswick 	:	37	:	73143
+Buncombe 	:	37	:	206330
+Burke 	:	37	:	89148
+Cabarrus 	:	37	:	131063
+Caldwell 	:	37	:	77415
+Camden 	:	37	:	6885
+Carteret 	:	37	:	59383
+Caswell 	:	37	:	23501
+Catawba 	:	37	:	141685
+Chatham 	:	37	:	49329
+Cherokee 	:	37	:	24298
+Chowan 	:	37	:	14526
+Clay 	:	37	:	8775
+Cleveland 	:	37	:	96287
+Columbus 	:	37	:	54749
+Craven 	:	37	:	91436
+Cumberland 	:	37	:	302963
+Currituck 	:	37	:	18190
+Dare 	:	37	:	29967
+Davidson 	:	37	:	147246
+Davie 	:	37	:	34835
+Duplin 	:	37	:	49063
+Durham 	:	37	:	223314
+Edgecombe 	:	37	:	55606
+Forsyth 	:	37	:	306067
+Franklin 	:	37	:	47260
+Gaston 	:	37	:	190365
+Gates 	:	37	:	10516
+Graham 	:	37	:	7993
+Granville 	:	37	:	48498
+Greene 	:	37	:	18974
+Guilford 	:	37	:	421048
+Halifax 	:	37	:	57370
+Harnett 	:	37	:	91025
+Haywood 	:	37	:	54033
+Henderson 	:	37	:	89173
+Hertford 	:	37	:	22601
+Hoke 	:	37	:	33646
+Hyde 	:	37	:	5826
+Iredell 	:	37	:	122660
+Jackson 	:	37	:	33121
+Johnston 	:	37	:	121965
+Jones 	:	37	:	10381
+Lee 	:	37	:	49040
+Lenoir 	:	37	:	59648
+Lincoln 	:	37	:	63780
+McDowell 	:	37	:	42151
+Macon 	:	37	:	29811
+Madison 	:	37	:	19635
+Martin 	:	37	:	25593
+Mecklenburg 	:	37	:	695454
+Mitchell 	:	37	:	15687
+Montgomery 	:	37	:	26822
+Moore 	:	37	:	74769
+Nash 	:	37	:	87420
+New Hanover 	:	37	:	160307
+Northampton 	:	37	:	22086
+Onslow 	:	37	:	150355
+Orange 	:	37	:	118227
+Pamlico 	:	37	:	12934
+Pasquotank 	:	37	:	34897
+Pender 	:	37	:	41082
+Perquimans 	:	37	:	11368
+Person 	:	37	:	35623
+Pitt 	:	37	:	133798
+Polk 	:	37	:	18324
+Randolph 	:	37	:	130454
+Richmond 	:	37	:	46564
+Robeson 	:	37	:	123339
+Rockingham 	:	37	:	91928
+Rowan 	:	37	:	130340
+Rutherford 	:	37	:	62899
+Sampson 	:	37	:	60161
+Scotland 	:	37	:	35998
+Stanly 	:	37	:	58100
+Stokes 	:	37	:	44711
+Surry 	:	37	:	71219
+Swain 	:	37	:	12968
+Transylvania 	:	37	:	29334
+Tyrrell 	:	37	:	4149
+Union 	:	37	:	123677
+Vance 	:	37	:	42954
+Wake 	:	37	:	627846
+Warren 	:	37	:	19972
+Washington 	:	37	:	13723
+Watauga 	:	37	:	42695
+Wayne 	:	37	:	113329
+Wilkes 	:	37	:	65632
+Wilson 	:	37	:	73814
+Yadkin 	:	37	:	36348
+Yancey 	:	37	:	17774
+Adams 	:	38	:	2593
+Barnes 	:	38	:	11775
+Benson 	:	38	:	6964
+Billings 	:	38	:	888
+Bottineau 	:	38	:	7149
+Bowman 	:	38	:	3242
+Burke 	:	38	:	2242
+Burleigh 	:	38	:	69416
+Cass 	:	38	:	123138
+Cavalier 	:	38	:	4831
+Dickey 	:	38	:	5757
+Divide 	:	38	:	2283
+Dunn 	:	38	:	3600
+Eddy 	:	38	:	2757
+Emmons 	:	38	:	4331
+Foster 	:	38	:	3759
+Golden Valley 	:	38	:	1924
+Grand Forks 	:	38	:	66109
+Grant 	:	38	:	2841
+Griggs 	:	38	:	2754
+Hettinger 	:	38	:	2715
+Kidder 	:	38	:	2753
+LaMoure 	:	38	:	4701
+Logan 	:	38	:	2308
+McHenry 	:	38	:	5987
+McIntosh 	:	38	:	3390
+McKenzie 	:	38	:	5737
+McLean 	:	38	:	9311
+Mercer 	:	38	:	8644
+Morton 	:	38	:	25303
+Mountrail 	:	38	:	6631
+Nelson 	:	38	:	3715
+Oliver 	:	38	:	2065
+Pembina 	:	38	:	8585
+Pierce 	:	38	:	4675
+Ramsey 	:	38	:	12066
+Ransom 	:	38	:	5890
+Renville 	:	38	:	2610
+Richland 	:	38	:	17998
+Rolette 	:	38	:	13674
+Sargent 	:	38	:	4366
+Sheridan 	:	38	:	1710
+Sioux 	:	38	:	4044
+Slope 	:	38	:	767
+Stark 	:	38	:	22636
+Steele 	:	38	:	2258
+Stutsman 	:	38	:	21908
+Towner 	:	38	:	2876
+Traill 	:	38	:	8477
+Walsh 	:	38	:	12389
+Ward 	:	38	:	58795
+Wells 	:	38	:	5102
+Williams 	:	38	:	19761
+Adams 	:	39	:	27330
+Allen 	:	39	:	108473
+Ashland 	:	39	:	52523
+Ashtabula 	:	39	:	102728
+Athens 	:	39	:	62223
+Auglaize 	:	39	:	46611
+Belmont 	:	39	:	70226
+Brown 	:	39	:	42285
+Butler 	:	39	:	332807
+Carroll 	:	39	:	28836
+Champaign 	:	39	:	38890
+Clark 	:	39	:	144742
+Clermont 	:	39	:	177977
+Clinton 	:	39	:	40543
+Columbiana 	:	39	:	112075
+Coshocton 	:	39	:	36655
+Crawford 	:	39	:	46966
+Cuyahoga 	:	39	:	1393978
+Darke 	:	39	:	53309
+Defiance 	:	39	:	39500
+Delaware 	:	39	:	109989
+Erie 	:	39	:	79551
+Fairfield 	:	39	:	122759
+Fayette 	:	39	:	28433
+Franklin 	:	39	:	1068978
+Fulton 	:	39	:	42084
+Gallia 	:	39	:	31069
+Geauga 	:	39	:	90895
+Greene 	:	39	:	147886
+Guernsey 	:	39	:	40792
+Hamilton 	:	39	:	845303
+Hancock 	:	39	:	71295
+Hardin 	:	39	:	31945
+Harrison 	:	39	:	15856
+Henry 	:	39	:	29210
+Highland 	:	39	:	40875
+Hocking 	:	39	:	28241
+Holmes 	:	39	:	38943
+Huron 	:	39	:	59487
+Jackson 	:	39	:	32641
+Jefferson 	:	39	:	73894
+Knox 	:	39	:	54500
+Lake 	:	39	:	227511
+Lawrence 	:	39	:	62319
+Licking 	:	39	:	145491
+Logan 	:	39	:	46005
+Lorain 	:	39	:	284664
+Lucas 	:	39	:	455054
+Madison 	:	39	:	40213
+Mahoning 	:	39	:	257555
+Marion 	:	39	:	66217
+Medina 	:	39	:	151095
+Meigs 	:	39	:	23072
+Mercer 	:	39	:	40924
+Miami 	:	39	:	98868
+Monroe 	:	39	:	15180
+Montgomery 	:	39	:	559062
+Morgan 	:	39	:	14897
+Morrow 	:	39	:	31628
+Muskingum 	:	39	:	84585
+Noble 	:	39	:	14058
+Ottawa 	:	39	:	40985
+Paulding 	:	39	:	20293
+Perry 	:	39	:	34078
+Pickaway 	:	39	:	52727
+Pike 	:	39	:	27695
+Portage 	:	39	:	152061
+Preble 	:	39	:	42337
+Putnam 	:	39	:	34726
+Richland 	:	39	:	128852
+Ross 	:	39	:	73345
+Sandusky 	:	39	:	61792
+Scioto 	:	39	:	79195
+Seneca 	:	39	:	58683
+Shelby 	:	39	:	47910
+Stark 	:	39	:	378098
+Summit 	:	39	:	542899
+Trumbull 	:	39	:	225116
+Tuscarawas 	:	39	:	90914
+Union 	:	39	:	40909
+Van Wert 	:	39	:	29659
+Vinton 	:	39	:	12806
+Warren 	:	39	:	158383
+Washington 	:	39	:	63251
+Wayne 	:	39	:	111564
+Williams 	:	39	:	39188
+Wood 	:	39	:	121065
+Wyandot 	:	39	:	22908
+Adair 	:	40	:	21038
+Alfalfa 	:	40	:	6105
+Atoka 	:	40	:	13879
+Beaver 	:	40	:	5857
+Beckham 	:	40	:	19799
+Blaine 	:	40	:	11976
+Bryan 	:	40	:	36534
+Caddo 	:	40	:	30150
+Canadian 	:	40	:	87697
+Carter 	:	40	:	45621
+Cherokee 	:	40	:	42521
+Choctaw 	:	40	:	15342
+Cimarron 	:	40	:	3148
+Cleveland 	:	40	:	208016
+Coal 	:	40	:	6031
+Comanche 	:	40	:	114996
+Cotton 	:	40	:	6614
+Craig 	:	40	:	14950
+Creek 	:	40	:	67367
+Custer 	:	40	:	26142
+Delaware 	:	40	:	37077
+Dewey 	:	40	:	4743
+Ellis 	:	40	:	4075
+Garfield 	:	40	:	57813
+Garvin 	:	40	:	27210
+Grady 	:	40	:	45516
+Grant 	:	40	:	5144
+Greer 	:	40	:	6061
+Harmon 	:	40	:	3283
+Harper 	:	40	:	3562
+Haskell 	:	40	:	11792
+Hughes 	:	40	:	14154
+Jackson 	:	40	:	28439
+Jefferson 	:	40	:	6818
+Johnston 	:	40	:	10513
+Kay 	:	40	:	48080
+Kingfisher 	:	40	:	13926
+Kiowa 	:	40	:	10227
+Latimer 	:	40	:	10692
+Le Flore 	:	40	:	48109
+Lincoln 	:	40	:	32080
+Logan 	:	40	:	33924
+Love 	:	40	:	8831
+McClain 	:	40	:	27740
+McCurtain 	:	40	:	34402
+McIntosh 	:	40	:	19456
+Major 	:	40	:	7545
+Marshall 	:	40	:	13184
+Mayes 	:	40	:	38369
+Murray 	:	40	:	12623
+Muskogee 	:	40	:	69451
+Noble 	:	40	:	11411
+Nowata 	:	40	:	10569
+Okfuskee 	:	40	:	11814
+Oklahoma 	:	40	:	660448
+Okmulgee 	:	40	:	39685
+Osage 	:	40	:	44437
+Ottawa 	:	40	:	33194
+Pawnee 	:	40	:	16612
+Payne 	:	40	:	68190
+Pittsburg 	:	40	:	43953
+Pontotoc 	:	40	:	35143
+Pottawatomie 	:	40	:	65521
+Pushmataha 	:	40	:	11667
+Roger Mills 	:	40	:	3436
+Rogers 	:	40	:	70641
+Seminole 	:	40	:	24894
+Sequoyah 	:	40	:	38972
+Stephens 	:	40	:	43182
+Texas 	:	40	:	20107
+Tillman 	:	40	:	9287
+Tulsa 	:	40	:	563299
+Wagoner 	:	40	:	57491
+Washington 	:	40	:	48996
+Washita 	:	40	:	11508
+Woods 	:	40	:	9089
+Woodward 	:	40	:	18486
+Baker 	:	41	:	16741
+Benton 	:	41	:	78153
+Clackamas 	:	41	:	338391
+Clatsop 	:	41	:	35630
+Columbia 	:	41	:	43560
+Coos 	:	41	:	62779
+Crook 	:	41	:	19182
+Curry 	:	41	:	21137
+Deschutes 	:	41	:	115367
+Douglas 	:	41	:	100399
+Gilliam 	:	41	:	1915
+Grant 	:	41	:	7935
+Harney 	:	41	:	7609
+Hood River 	:	41	:	20411
+Jackson 	:	41	:	181269
+Jefferson 	:	41	:	19009
+Josephine 	:	41	:	75726
+Klamath 	:	41	:	63775
+Lake 	:	41	:	7422
+Lane 	:	41	:	322959
+Lincoln 	:	41	:	44479
+Linn 	:	41	:	103069
+Malheur 	:	41	:	31615
+Marion 	:	41	:	284834
+Morrow 	:	41	:	10995
+Multnomah 	:	41	:	660486
+Polk 	:	41	:	62380
+Sherman 	:	41	:	1934
+Tillamook 	:	41	:	24262
+Umatilla 	:	41	:	70548
+Union 	:	41	:	24530
+Wallowa 	:	41	:	7226
+Wasco 	:	41	:	23791
+Washington 	:	41	:	445342
+Wheeler 	:	41	:	1547
+Yamhill 	:	41	:	84992
+Adams 	:	42	:	91292
+Allegheny 	:	42	:	1281666
+Armstrong 	:	42	:	72392
+Beaver 	:	42	:	181412
+Bedford 	:	42	:	49984
+Berks 	:	42	:	373638
+Blair 	:	42	:	129144
+Bradford 	:	42	:	62761
+Bucks 	:	42	:	597635
+Butler 	:	42	:	174083
+Cambria 	:	42	:	152598
+Cameron 	:	42	:	5974
+Carbon 	:	42	:	58802
+Centre 	:	42	:	135758
+Chester 	:	42	:	433501
+Clarion 	:	42	:	41765
+Clearfield 	:	42	:	83382
+Clinton 	:	42	:	37914
+Columbia 	:	42	:	64151
+Crawford 	:	42	:	90366
+Cumberland 	:	42	:	213674
+Dauphin 	:	42	:	251798
+Delaware 	:	42	:	550864
+Elk 	:	42	:	35112
+Erie 	:	42	:	280843
+Fayette 	:	42	:	148644
+Forest 	:	42	:	4946
+Franklin 	:	42	:	129313
+Fulton 	:	42	:	14261
+Greene 	:	42	:	40672
+Huntingdon 	:	42	:	45586
+Indiana 	:	42	:	89605
+Jefferson 	:	42	:	45932
+Juniata 	:	42	:	22821
+Lackawanna 	:	42	:	213295
+Lancaster 	:	42	:	470658
+Lawrence 	:	42	:	94643
+Lebanon 	:	42	:	120327
+Lehigh 	:	42	:	312090
+Luzerne 	:	42	:	319250
+Lycoming 	:	42	:	120044
+McKean 	:	42	:	45936
+Mercer 	:	42	:	120293
+Mifflin 	:	42	:	46486
+Monroe 	:	42	:	138687
+Montgomery 	:	42	:	750097
+Montour 	:	42	:	18236
+Northampton 	:	42	:	267066
+Northumberland 	:	42	:	94556
+Perry 	:	42	:	43602
+Philadelphia 	:	42	:	1517550
+Pike 	:	42	:	46302
+Potter 	:	42	:	18080
+Schuylkill 	:	42	:	150336
+Snyder 	:	42	:	37546
+Somerset 	:	42	:	80023
+Sullivan 	:	42	:	6556
+Susquehanna 	:	42	:	42238
+Tioga 	:	42	:	41373
+Union 	:	42	:	41624
+Venango 	:	42	:	57565
+Warren 	:	42	:	43863
+Washington 	:	42	:	202897
+Wayne 	:	42	:	47722
+Westmoreland 	:	42	:	369993
+Wyoming 	:	42	:	28080
+York 	:	42	:	381751
+Bristol 	:	44	:	50648
+Kent 	:	44	:	167090
+Newport 	:	44	:	85433
+Providence 	:	44	:	621602
+Washington 	:	44	:	123546
+Abbeville 	:	45	:	26167
+Aiken 	:	45	:	142552
+Allendale 	:	45	:	11211
+Anderson 	:	45	:	165740
+Bamberg 	:	45	:	16658
+Barnwell 	:	45	:	23478
+Beaufort 	:	45	:	120937
+Berkeley 	:	45	:	142651
+Calhoun 	:	45	:	15185
+Charleston 	:	45	:	309969
+Cherokee 	:	45	:	52537
+Chester 	:	45	:	34068
+Chesterfield 	:	45	:	42768
+Clarendon 	:	45	:	32502
+Colleton 	:	45	:	38264
+Darlington 	:	45	:	67394
+Dillon 	:	45	:	30722
+Dorchester 	:	45	:	96413
+Edgefield 	:	45	:	24595
+Fairfield 	:	45	:	23454
+Florence 	:	45	:	125761
+Georgetown 	:	45	:	55797
+Greenville 	:	45	:	379616
+Greenwood 	:	45	:	66271
+Hampton 	:	45	:	21386
+Horry 	:	45	:	196629
+Jasper 	:	45	:	20678
+Kershaw 	:	45	:	52647
+Lancaster 	:	45	:	61351
+Laurens 	:	45	:	69567
+Lee 	:	45	:	20119
+Lexington 	:	45	:	216014
+McCormick 	:	45	:	9958
+Marion 	:	45	:	35466
+Marlboro 	:	45	:	28818
+Newberry 	:	45	:	36108
+Oconee 	:	45	:	66215
+Orangeburg 	:	45	:	91582
+Pickens 	:	45	:	110757
+Richland 	:	45	:	320677
+Saluda 	:	45	:	19181
+Spartanburg 	:	45	:	253791
+Sumter 	:	45	:	104646
+Union 	:	45	:	29881
+Williamsburg 	:	45	:	37217
+York 	:	45	:	164614
+Aurora 	:	46	:	3058
+Beadle 	:	46	:	17023
+Bennett 	:	46	:	3574
+Bon Homme 	:	46	:	7260
+Brookings 	:	46	:	28220
+Brown 	:	46	:	35460
+Brule 	:	46	:	5364
+Buffalo 	:	46	:	2032
+Butte 	:	46	:	9094
+Campbell 	:	46	:	1782
+Charles Mix 	:	46	:	9350
+Clark 	:	46	:	4143
+Clay 	:	46	:	13537
+Codington 	:	46	:	25897
+Corson 	:	46	:	4181
+Custer 	:	46	:	7275
+Davison 	:	46	:	18741
+Day 	:	46	:	6267
+Deuel 	:	46	:	4498
+Dewey 	:	46	:	5972
+Douglas 	:	46	:	3458
+Edmunds 	:	46	:	4367
+Fall River 	:	46	:	7453
+Faulk 	:	46	:	2640
+Grant 	:	46	:	7847
+Gregory 	:	46	:	4792
+Haakon 	:	46	:	2196
+Hamlin 	:	46	:	5540
+Hand 	:	46	:	3741
+Hanson 	:	46	:	3139
+Harding 	:	46	:	1353
+Hughes 	:	46	:	16481
+Hutchinson 	:	46	:	8075
+Hyde 	:	46	:	1671
+Jackson 	:	46	:	2930
+Jerauld 	:	46	:	2295
+Jones 	:	46	:	1193
+Kingsbury 	:	46	:	5815
+Lake 	:	46	:	11276
+Lawrence 	:	46	:	21802
+Lincoln 	:	46	:	24131
+Lyman 	:	46	:	3895
+McCook 	:	46	:	5832
+McPherson 	:	46	:	2904
+Marshall 	:	46	:	4576
+Meade 	:	46	:	24253
+Mellette 	:	46	:	2083
+Miner 	:	46	:	2884
+Minnehaha 	:	46	:	148281
+Moody 	:	46	:	6595
+Pennington 	:	46	:	88565
+Perkins 	:	46	:	3363
+Potter 	:	46	:	2693
+Roberts 	:	46	:	10016
+Sanborn 	:	46	:	2675
+Shannon 	:	46	:	12466
+Spink 	:	46	:	7454
+Stanley 	:	46	:	2772
+Sully 	:	46	:	1556
+Todd 	:	46	:	9050
+Tripp 	:	46	:	6430
+Turner 	:	46	:	8849
+Union 	:	46	:	12584
+Walworth 	:	46	:	5974
+Yankton 	:	46	:	21652
+Ziebach 	:	46	:	2519
+Anderson 	:	47	:	71330
+Bedford 	:	47	:	37586
+Benton 	:	47	:	16537
+Bledsoe 	:	47	:	12367
+Blount 	:	47	:	105823
+Bradley 	:	47	:	87965
+Campbell 	:	47	:	39854
+Cannon 	:	47	:	12826
+Carroll 	:	47	:	29475
+Carter 	:	47	:	56742
+Cheatham 	:	47	:	35912
+Chester 	:	47	:	15540
+Claiborne 	:	47	:	29862
+Clay 	:	47	:	7976
+Cocke 	:	47	:	33565
+Coffee 	:	47	:	48014
+Crockett 	:	47	:	14532
+Cumberland 	:	47	:	46802
+Davidson 	:	47	:	569891
+Decatur 	:	47	:	11731
+DeKalb 	:	47	:	17423
+Dickson 	:	47	:	43156
+Dyer 	:	47	:	37279
+Fayette 	:	47	:	28806
+Fentress 	:	47	:	16625
+Franklin 	:	47	:	39270
+Gibson 	:	47	:	48152
+Giles 	:	47	:	29447
+Grainger 	:	47	:	20659
+Greene 	:	47	:	62909
+Grundy 	:	47	:	14332
+Hamblen 	:	47	:	58128
+Hamilton 	:	47	:	307896
+Hancock 	:	47	:	6786
+Hardeman 	:	47	:	28105
+Hardin 	:	47	:	25578
+Hawkins 	:	47	:	53563
+Haywood 	:	47	:	19797
+Henderson 	:	47	:	25522
+Henry 	:	47	:	31115
+Hickman 	:	47	:	22295
+Houston 	:	47	:	8088
+Humphreys 	:	47	:	17929
+Jackson 	:	47	:	10984
+Jefferson 	:	47	:	44294
+Johnson 	:	47	:	17499
+Knox 	:	47	:	382032
+Lake 	:	47	:	7954
+Lauderdale 	:	47	:	27101
+Lawrence 	:	47	:	39926
+Lewis 	:	47	:	11367
+Lincoln 	:	47	:	31340
+Loudon 	:	47	:	39086
+McMinn 	:	47	:	49015
+McNairy 	:	47	:	24653
+Macon 	:	47	:	20386
+Madison 	:	47	:	91837
+Marion 	:	47	:	27776
+Marshall 	:	47	:	26767
+Maury 	:	47	:	69498
+Meigs 	:	47	:	11086
+Monroe 	:	47	:	38961
+Montgomery 	:	47	:	134768
+Moore 	:	47	:	5740
+Morgan 	:	47	:	19757
+Obion 	:	47	:	32450
+Overton 	:	47	:	20118
+Perry 	:	47	:	7631
+Pickett 	:	47	:	4945
+Polk 	:	47	:	16050
+Putnam 	:	47	:	62315
+Rhea 	:	47	:	28400
+Roane 	:	47	:	51910
+Robertson 	:	47	:	54433
+Rutherford 	:	47	:	182023
+Scott 	:	47	:	21127
+Sequatchie 	:	47	:	11370
+Sevier 	:	47	:	71170
+Shelby 	:	47	:	897472
+Smith 	:	47	:	17712
+Stewart 	:	47	:	12370
+Sullivan 	:	47	:	153048
+Sumner 	:	47	:	130449
+Tipton 	:	47	:	51271
+Trousdale 	:	47	:	7259
+Unicoi 	:	47	:	17667
+Union 	:	47	:	17808
+Van Buren 	:	47	:	5508
+Warren 	:	47	:	38276
+Washington 	:	47	:	107198
+Wayne 	:	47	:	16842
+Weakley 	:	47	:	34895
+White 	:	47	:	23102
+Williamson 	:	47	:	126638
+Wilson 	:	47	:	88809
+Anderson 	:	48	:	55109
+Andrews 	:	48	:	13004
+Angelina 	:	48	:	80130
+Aransas 	:	48	:	22497
+Archer 	:	48	:	8854
+Armstrong 	:	48	:	2148
+Atascosa 	:	48	:	38628
+Austin 	:	48	:	23590
+Bailey 	:	48	:	6594
+Bandera 	:	48	:	17645
+Bastrop 	:	48	:	57733
+Baylor 	:	48	:	4093
+Bee 	:	48	:	32359
+Bell 	:	48	:	237974
+Bexar 	:	48	:	1392931
+Blanco 	:	48	:	8418
+Borden 	:	48	:	729
+Bosque 	:	48	:	17204
+Bowie 	:	48	:	89306
+Brazoria 	:	48	:	241767
+Brazos 	:	48	:	152415
+Brewster 	:	48	:	8866
+Briscoe 	:	48	:	1790
+Brooks 	:	48	:	7976
+Brown 	:	48	:	37674
+Burleson 	:	48	:	16470
+Burnet 	:	48	:	34147
+Caldwell 	:	48	:	32194
+Calhoun 	:	48	:	20647
+Callahan 	:	48	:	12905
+Cameron 	:	48	:	335227
+Camp 	:	48	:	11549
+Carson 	:	48	:	6516
+Cass 	:	48	:	30438
+Castro 	:	48	:	8285
+Chambers 	:	48	:	26031
+Cherokee 	:	48	:	46659
+Childress 	:	48	:	7688
+Clay 	:	48	:	11006
+Cochran 	:	48	:	3730
+Coke 	:	48	:	3864
+Coleman 	:	48	:	9235
+Collin 	:	48	:	491675
+Collingsworth 	:	48	:	3206
+Colorado 	:	48	:	20390
+Comal 	:	48	:	78021
+Comanche 	:	48	:	14026
+Concho 	:	48	:	3966
+Cooke 	:	48	:	36363
+Coryell 	:	48	:	74978
+Cottle 	:	48	:	1904
+Crane 	:	48	:	3996
+Crockett 	:	48	:	4099
+Crosby 	:	48	:	7072
+Culberson 	:	48	:	2975
+Dallam 	:	48	:	6222
+Dallas 	:	48	:	2218899
+Dawson 	:	48	:	14985
+Deaf Smith 	:	48	:	18561
+Delta 	:	48	:	5327
+Denton 	:	48	:	432976
+DeWitt 	:	48	:	20013
+Dickens 	:	48	:	2762
+Dimmit 	:	48	:	10248
+Donley 	:	48	:	3828
+Duval 	:	48	:	13120
+Eastland 	:	48	:	18297
+Ector 	:	48	:	121123
+Edwards 	:	48	:	2162
+Ellis 	:	48	:	111360
+El Paso 	:	48	:	679622
+Erath 	:	48	:	33001
+Falls 	:	48	:	18576
+Fannin 	:	48	:	31242
+Fayette 	:	48	:	21804
+Fisher 	:	48	:	4344
+Floyd 	:	48	:	7771
+Foard 	:	48	:	1622
+Fort Bend 	:	48	:	354452
+Franklin 	:	48	:	9458
+Freestone 	:	48	:	17867
+Frio 	:	48	:	16252
+Gaines 	:	48	:	14467
+Galveston 	:	48	:	250158
+Garza 	:	48	:	4872
+Gillespie 	:	48	:	20814
+Glasscock 	:	48	:	1406
+Goliad 	:	48	:	6928
+Gonzales 	:	48	:	18628
+Gray 	:	48	:	22744
+Grayson 	:	48	:	110595
+Gregg 	:	48	:	111379
+Grimes 	:	48	:	23552
+Guadalupe 	:	48	:	89023
+Hale 	:	48	:	36602
+Hall 	:	48	:	3782
+Hamilton 	:	48	:	8229
+Hansford 	:	48	:	5369
+Hardeman 	:	48	:	4724
+Hardin 	:	48	:	48073
+Harris 	:	48	:	3400578
+Harrison 	:	48	:	62110
+Hartley 	:	48	:	5537
+Haskell 	:	48	:	6093
+Hays 	:	48	:	97589
+Hemphill 	:	48	:	3351
+Henderson 	:	48	:	73277
+Hidalgo 	:	48	:	569463
+Hill 	:	48	:	32321
+Hockley 	:	48	:	22716
+Hood 	:	48	:	41100
+Hopkins 	:	48	:	31960
+Houston 	:	48	:	23185
+Howard 	:	48	:	33627
+Hudspeth 	:	48	:	3344
+Hunt 	:	48	:	76596
+Hutchinson 	:	48	:	23857
+Irion 	:	48	:	1771
+Jack 	:	48	:	8763
+Jackson 	:	48	:	14391
+Jasper 	:	48	:	35604
+Jeff Davis 	:	48	:	2207
+Jefferson 	:	48	:	252051
+Jim Hogg 	:	48	:	5281
+Jim Wells 	:	48	:	39326
+Johnson 	:	48	:	126811
+Jones 	:	48	:	20785
+Karnes 	:	48	:	15446
+Kaufman 	:	48	:	71313
+Kendall 	:	48	:	23743
+Kenedy 	:	48	:	414
+Kent 	:	48	:	859
+Kerr 	:	48	:	43653
+Kimble 	:	48	:	4468
+King 	:	48	:	356
+Kinney 	:	48	:	3379
+Kleberg 	:	48	:	31549
+Knox 	:	48	:	4253
+Lamar 	:	48	:	48499
+Lamb 	:	48	:	14709
+Lampasas 	:	48	:	17762
+La Salle 	:	48	:	5866
+Lavaca 	:	48	:	19210
+Lee 	:	48	:	15657
+Leon 	:	48	:	15335
+Liberty 	:	48	:	70154
+Limestone 	:	48	:	22051
+Lipscomb 	:	48	:	3057
+Live Oak 	:	48	:	12309
+Llano 	:	48	:	17044
+Loving 	:	48	:	67
+Lubbock 	:	48	:	242628
+Lynn 	:	48	:	6550
+McCulloch 	:	48	:	8205
+McLennan 	:	48	:	213517
+McMullen 	:	48	:	851
+Madison 	:	48	:	12940
+Marion 	:	48	:	10941
+Martin 	:	48	:	4746
+Mason 	:	48	:	3738
+Matagorda 	:	48	:	37957
+Maverick 	:	48	:	47297
+Medina 	:	48	:	39304
+Menard 	:	48	:	2360
+Midland 	:	48	:	116009
+Milam 	:	48	:	24238
+Mills 	:	48	:	5151
+Mitchell 	:	48	:	9698
+Montague 	:	48	:	19117
+Montgomery 	:	48	:	293768
+Moore 	:	48	:	20121
+Morris 	:	48	:	13048
+Motley 	:	48	:	1426
+Nacogdoches 	:	48	:	59203
+Navarro 	:	48	:	45124
+Newton 	:	48	:	15072
+Nolan 	:	48	:	15802
+Nueces 	:	48	:	313645
+Ochiltree 	:	48	:	9006
+Oldham 	:	48	:	2185
+Orange 	:	48	:	84966
+Palo Pinto 	:	48	:	27026
+Panola 	:	48	:	22756
+Parker 	:	48	:	88495
+Parmer 	:	48	:	10016
+Pecos 	:	48	:	16809
+Polk 	:	48	:	41133
+Potter 	:	48	:	113546
+Presidio 	:	48	:	7304
+Rains 	:	48	:	9139
+Randall 	:	48	:	104312
+Reagan 	:	48	:	3326
+Real 	:	48	:	3047
+Red River 	:	48	:	14314
+Reeves 	:	48	:	13137
+Refugio 	:	48	:	7828
+Roberts 	:	48	:	887
+Robertson 	:	48	:	16000
+Rockwall 	:	48	:	43080
+Runnels 	:	48	:	11495
+Rusk 	:	48	:	47372
+Sabine 	:	48	:	10469
+San Augustine 	:	48	:	8946
+San Jacinto 	:	48	:	22246
+San Patricio 	:	48	:	67138
+San Saba 	:	48	:	6186
+Schleicher 	:	48	:	2935
+Scurry 	:	48	:	16361
+Shackelford 	:	48	:	3302
+Shelby 	:	48	:	25224
+Sherman 	:	48	:	3186
+Smith 	:	48	:	174706
+Somervell 	:	48	:	6809
+Starr 	:	48	:	53597
+Stephens 	:	48	:	9674
+Sterling 	:	48	:	1393
+Stonewall 	:	48	:	1693
+Sutton 	:	48	:	4077
+Swisher 	:	48	:	8378
+Tarrant 	:	48	:	1446219
+Taylor 	:	48	:	126555
+Terrell 	:	48	:	1081
+Terry 	:	48	:	12761
+Throckmorton 	:	48	:	1850
+Titus 	:	48	:	28118
+Tom Green 	:	48	:	104010
+Travis 	:	48	:	812280
+Trinity 	:	48	:	13779
+Tyler 	:	48	:	20871
+Upshur 	:	48	:	35291
+Upton 	:	48	:	3404
+Uvalde 	:	48	:	25926
+Val Verde 	:	48	:	44856
+Van Zandt 	:	48	:	48140
+Victoria 	:	48	:	84088
+Walker 	:	48	:	61758
+Waller 	:	48	:	32663
+Ward 	:	48	:	10909
+Washington 	:	48	:	30373
+Webb 	:	48	:	193117
+Wharton 	:	48	:	41188
+Wheeler 	:	48	:	5284
+Wichita 	:	48	:	131664
+Wilbarger 	:	48	:	14676
+Willacy 	:	48	:	20082
+Williamson 	:	48	:	249967
+Wilson 	:	48	:	32408
+Winkler 	:	48	:	7173
+Wise 	:	48	:	48793
+Wood 	:	48	:	36752
+Yoakum 	:	48	:	7322
+Young 	:	48	:	17943
+Zapata 	:	48	:	12182
+Zavala 	:	48	:	11600
+Beaver 	:	49	:	6005
+Box Elder 	:	49	:	42745
+Cache 	:	49	:	91391
+Carbon 	:	49	:	20422
+Daggett 	:	49	:	921
+Davis 	:	49	:	238994
+Duchesne 	:	49	:	14371
+Emery 	:	49	:	10860
+Garfield 	:	49	:	4735
+Grand 	:	49	:	8485
+Iron 	:	49	:	33779
+Juab 	:	49	:	8238
+Kane 	:	49	:	6046
+Millard 	:	49	:	12405
+Morgan 	:	49	:	7129
+Piute 	:	49	:	1435
+Rich 	:	49	:	1961
+Salt Lake 	:	49	:	898387
+San Juan 	:	49	:	14413
+Sanpete 	:	49	:	22763
+Sevier 	:	49	:	18842
+Summit 	:	49	:	29736
+Tooele 	:	49	:	40735
+Uintah 	:	49	:	25224
+Utah 	:	49	:	368536
+Wasatch 	:	49	:	15215
+Washington 	:	49	:	90354
+Wayne 	:	49	:	2509
+Weber 	:	49	:	196533
+Addison 	:	50	:	35974
+Bennington 	:	50	:	36994
+Caledonia 	:	50	:	29702
+Chittenden 	:	50	:	146571
+Essex 	:	50	:	6459
+Franklin 	:	50	:	45417
+Grand Isle 	:	50	:	6901
+Lamoille 	:	50	:	23233
+Orange 	:	50	:	28226
+Orleans 	:	50	:	26277
+Rutland 	:	50	:	63400
+Washington 	:	50	:	58039
+Windham 	:	50	:	44216
+Windsor 	:	50	:	57418
+Accomack 	:	51	:	38305
+Albemarle 	:	51	:	79236
+Alleghany 	:	51	:	12926
+Amelia 	:	51	:	11400
+Amherst 	:	51	:	31894
+Appomattox 	:	51	:	13705
+Arlington 	:	51	:	189453
+Augusta 	:	51	:	65615
+Bath 	:	51	:	5048
+Bedford 	:	51	:	60371
+Bland 	:	51	:	6871
+Botetourt 	:	51	:	30496
+Brunswick 	:	51	:	18419
+Buchanan 	:	51	:	26978
+Buckingham 	:	51	:	15623
+Campbell 	:	51	:	51078
+Caroline 	:	51	:	22121
+Carroll 	:	51	:	29245
+Charles City 	:	51	:	6926
+Charlotte 	:	51	:	12472
+Chesterfield 	:	51	:	259903
+Clarke 	:	51	:	12652
+Craig 	:	51	:	5091
+Culpeper 	:	51	:	34262
+Cumberland 	:	51	:	9017
+Dickenson 	:	51	:	16395
+Dinwiddie 	:	51	:	24533
+Essex 	:	51	:	9989
+Fairfax 	:	51	:	969749
+Fauquier 	:	51	:	55139
+Floyd 	:	51	:	13874
+Fluvanna 	:	51	:	20047
+Franklin 	:	51	:	47286
+Frederick 	:	51	:	59209
+Giles 	:	51	:	16657
+Gloucester 	:	51	:	34780
+Goochland 	:	51	:	16863
+Grayson 	:	51	:	17917
+Greene 	:	51	:	15244
+Greensville 	:	51	:	11560
+Halifax 	:	51	:	37355
+Hanover 	:	51	:	86320
+Henrico 	:	51	:	262300
+Henry 	:	51	:	57930
+Highland 	:	51	:	2536
+Isle of Wight 	:	51	:	29728
+James City 	:	51	:	48102
+King and Queen 	:	51	:	6630
+King George 	:	51	:	16803
+King William 	:	51	:	13146
+Lancaster 	:	51	:	11567
+Lee 	:	51	:	23589
+Loudoun 	:	51	:	169599
+Louisa 	:	51	:	25627
+Lunenburg 	:	51	:	13146
+Madison 	:	51	:	12520
+Mathews 	:	51	:	9207
+Mecklenburg 	:	51	:	32380
+Middlesex 	:	51	:	9932
+Montgomery 	:	51	:	83629
+Nelson 	:	51	:	14445
+New Kent 	:	51	:	13462
+Northampton 	:	51	:	13093
+Northumberland 	:	51	:	12259
+Nottoway 	:	51	:	15725
+Orange 	:	51	:	25881
+Page 	:	51	:	23177
+Patrick 	:	51	:	19407
+Pittsylvania 	:	51	:	61745
+Powhatan 	:	51	:	22377
+Prince Edward 	:	51	:	19720
+Prince George 	:	51	:	33047
+Prince William 	:	51	:	280813
+Pulaski 	:	51	:	35127
+Rappahannock 	:	51	:	6983
+Richmond 	:	51	:	8809
+Roanoke 	:	51	:	85778
+Rockbridge 	:	51	:	20808
+Rockingham 	:	51	:	67725
+Russell 	:	51	:	30308
+Scott 	:	51	:	23403
+Shenandoah 	:	51	:	35075
+Smyth 	:	51	:	33081
+Southampton 	:	51	:	17482
+Spotsylvania 	:	51	:	90395
+Stafford 	:	51	:	92446
+Surry 	:	51	:	6829
+Sussex 	:	51	:	12504
+Tazewell 	:	51	:	44598
+Warren 	:	51	:	31584
+Washington 	:	51	:	51103
+Westmoreland 	:	51	:	16718
+Wise 	:	51	:	40123
+Wythe 	:	51	:	27599
+York 	:	51	:	56297
+Alexandria 	:	51	:	128283
+Bedford 	:	51	:	6299
+Bristol 	:	51	:	17367
+Buena Vista 	:	51	:	6349
+Charlottesville 	:	51	:	45049
+Chesapeake 	:	51	:	199184
+Clifton Forge 	:	51	:	4289
+Colonial Heights 	:	51	:	16897
+Covington 	:	51	:	6303
+Danville 	:	51	:	48411
+Emporia 	:	51	:	5665
+Fairfax 	:	51	:	21498
+Falls Church 	:	51	:	10377
+Franklin 	:	51	:	8346
+Fredericksburg 	:	51	:	19279
+Galax 	:	51	:	6837
+Hampton 	:	51	:	146437
+Harrisonburg 	:	51	:	40468
+Hopewell 	:	51	:	22354
+Lexington 	:	51	:	6867
+Lynchburg 	:	51	:	65269
+Manassas 	:	51	:	35135
+Manassas Park 	:	51	:	10290
+Martinsville 	:	51	:	15416
+Newport News 	:	51	:	180150
+Norfolk 	:	51	:	234403
+Norton 	:	51	:	3904
+Petersburg 	:	51	:	33740
+Poquoson 	:	51	:	11566
+Portsmouth 	:	51	:	100565
+Radford 	:	51	:	15859
+Richmond 	:	51	:	197790
+Roanoke 	:	51	:	94911
+Salem 	:	51	:	24747
+Staunton 	:	51	:	23853
+Suffolk 	:	51	:	63677
+Virginia Beach 	:	51	:	425257
+Waynesboro 	:	51	:	19520
+Williamsburg 	:	51	:	11998
+Winchester 	:	51	:	23585
+Adams 	:	53	:	16428
+Asotin 	:	53	:	20551
+Benton 	:	53	:	142475
+Chelan 	:	53	:	66616
+Clallam 	:	53	:	64525
+Clark 	:	53	:	345238
+Columbia 	:	53	:	4064
+Cowlitz 	:	53	:	92948
+Douglas 	:	53	:	32603
+Ferry 	:	53	:	7260
+Franklin 	:	53	:	49347
+Garfield 	:	53	:	2397
+Grant 	:	53	:	74698
+Grays Harbor 	:	53	:	67194
+Island 	:	53	:	71558
+Jefferson 	:	53	:	25953
+King 	:	53	:	1737034
+Kitsap 	:	53	:	231969
+Kittitas 	:	53	:	33362
+Klickitat 	:	53	:	19161
+Lewis 	:	53	:	68600
+Lincoln 	:	53	:	10184
+Mason 	:	53	:	49405
+Okanogan 	:	53	:	39564
+Pacific 	:	53	:	20984
+Pend Oreille 	:	53	:	11732
+Pierce 	:	53	:	700820
+San Juan 	:	53	:	14077
+Skagit 	:	53	:	102979
+Skamania 	:	53	:	9872
+Snohomish 	:	53	:	606024
+Spokane 	:	53	:	417939
+Stevens 	:	53	:	40066
+Thurston 	:	53	:	207355
+Wahkiakum 	:	53	:	3824
+Walla Walla 	:	53	:	55180
+Whatcom 	:	53	:	166814
+Whitman 	:	53	:	40740
+Yakima 	:	53	:	222581
+Barbour 	:	54	:	15557
+Berkeley 	:	54	:	75905
+Boone 	:	54	:	25535
+Braxton 	:	54	:	14702
+Brooke 	:	54	:	25447
+Cabell 	:	54	:	96784
+Calhoun 	:	54	:	7582
+Clay 	:	54	:	10330
+Doddridge 	:	54	:	7403
+Fayette 	:	54	:	47579
+Gilmer 	:	54	:	7160
+Grant 	:	54	:	11299
+Greenbrier 	:	54	:	34453
+Hampshire 	:	54	:	20203
+Hancock 	:	54	:	32667
+Hardy 	:	54	:	12669
+Harrison 	:	54	:	68652
+Jackson 	:	54	:	28000
+Jefferson 	:	54	:	42190
+Kanawha 	:	54	:	200073
+Lewis 	:	54	:	16919
+Lincoln 	:	54	:	22108
+Logan 	:	54	:	37710
+McDowell 	:	54	:	27329
+Marion 	:	54	:	56598
+Marshall 	:	54	:	35519
+Mason 	:	54	:	25957
+Mercer 	:	54	:	62980
+Mineral 	:	54	:	27078
+Mingo 	:	54	:	28253
+Monongalia 	:	54	:	81866
+Monroe 	:	54	:	14583
+Morgan 	:	54	:	14943
+Nicholas 	:	54	:	26562
+Ohio 	:	54	:	47427
+Pendleton 	:	54	:	8196
+Pleasants 	:	54	:	7514
+Pocahontas 	:	54	:	9131
+Preston 	:	54	:	29334
+Putnam 	:	54	:	51589
+Raleigh 	:	54	:	79220
+Randolph 	:	54	:	28262
+Ritchie 	:	54	:	10343
+Roane 	:	54	:	15446
+Summers 	:	54	:	12999
+Taylor 	:	54	:	16089
+Tucker 	:	54	:	7321
+Tyler 	:	54	:	9592
+Upshur 	:	54	:	23404
+Wayne 	:	54	:	42903
+Webster 	:	54	:	9719
+Wetzel 	:	54	:	17693
+Wirt 	:	54	:	5873
+Wood 	:	54	:	87986
+Wyoming 	:	54	:	25708
+Adams 	:	55	:	18643
+Ashland 	:	55	:	16866
+Barron 	:	55	:	44963
+Bayfield 	:	55	:	15013
+Brown 	:	55	:	226778
+Buffalo 	:	55	:	13804
+Burnett 	:	55	:	15674
+Calumet 	:	55	:	40631
+Chippewa 	:	55	:	55195
+Clark 	:	55	:	33557
+Columbia 	:	55	:	52468
+Crawford 	:	55	:	17243
+Dane 	:	55	:	426526
+Dodge 	:	55	:	85897
+Door 	:	55	:	27961
+Douglas 	:	55	:	43287
+Dunn 	:	55	:	39858
+Eau Claire 	:	55	:	93142
+Florence 	:	55	:	5088
+Fond du Lac 	:	55	:	97296
+Forest 	:	55	:	10024
+Grant 	:	55	:	49597
+Green 	:	55	:	33647
+Green Lake 	:	55	:	19105
+Iowa 	:	55	:	22780
+Iron 	:	55	:	6861
+Jackson 	:	55	:	19100
+Jefferson 	:	55	:	74021
+Juneau 	:	55	:	24316
+Kenosha 	:	55	:	149577
+Kewaunee 	:	55	:	20187
+La Crosse 	:	55	:	107120
+Lafayette 	:	55	:	16137
+Langlade 	:	55	:	20740
+Lincoln 	:	55	:	29641
+Manitowoc 	:	55	:	82887
+Marathon 	:	55	:	125834
+Marinette 	:	55	:	43384
+Marquette 	:	55	:	15832
+Menominee 	:	55	:	4562
+Milwaukee 	:	55	:	940164
+Monroe 	:	55	:	40899
+Oconto 	:	55	:	35634
+Oneida 	:	55	:	36776
+Outagamie 	:	55	:	160971
+Ozaukee 	:	55	:	82317
+Pepin 	:	55	:	7213
+Pierce 	:	55	:	36804
+Polk 	:	55	:	41319
+Portage 	:	55	:	67182
+Price 	:	55	:	15822
+Racine 	:	55	:	188831
+Richland 	:	55	:	17924
+Rock 	:	55	:	152307
+Rusk 	:	55	:	15347
+St. Croix 	:	55	:	63155
+Sauk 	:	55	:	55225
+Sawyer 	:	55	:	16196
+Shawano 	:	55	:	40664
+Sheboygan 	:	55	:	112646
+Taylor 	:	55	:	19680
+Trempealeau 	:	55	:	27010
+Vernon 	:	55	:	28056
+Vilas 	:	55	:	21033
+Walworth 	:	55	:	93759
+Washburn 	:	55	:	16036
+Washington 	:	55	:	117493
+Waukesha 	:	55	:	360767
+Waupaca 	:	55	:	51731
+Waushara 	:	55	:	23154
+Winnebago 	:	55	:	156763
+Wood 	:	55	:	75555
+Albany 	:	56	:	32014
+Big Horn 	:	56	:	11461
+Campbell 	:	56	:	33698
+Carbon 	:	56	:	15639
+Converse 	:	56	:	12052
+Crook 	:	56	:	5887
+Fremont 	:	56	:	35804
+Goshen 	:	56	:	12538
+Hot Springs 	:	56	:	4882
+Johnson 	:	56	:	7075
+Laramie 	:	56	:	81607
+Lincoln 	:	56	:	14573
+Natrona 	:	56	:	66533
+Niobrara 	:	56	:	2407
+Park 	:	56	:	25786
+Platte 	:	56	:	8807
+Sheridan 	:	56	:	26560
+Sublette 	:	56	:	5920
+Sweetwater 	:	56	:	37613
+Teton 	:	56	:	18251
+Uinta 	:	56	:	19742
+Washakie 	:	56	:	8289
+Weston 	:	56	:	6644
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_AREA.txt
new file mode 100644
index 0000000..e4b54a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_AREA.txt
@@ -0,0 +1,52 @@
+United States : 0 : 9631420
+Alabama	:	1	:	52419.02
+Alaska	:	1	:	663267.26
+Arizona	:	1	:	113998.30
+Arkansas	:	1	:	53178.62
+California	:	1	:	163695.57
+Colorado	:	1	:	104093.57
+Connecticut	:	1	:	5543.33
+Delaware	:	1	:	2489.27
+District of Columbia	:	1	:	68.34
+Florida	:	1	:	65754.59
+Georgia	:	1	:	59424.77
+Hawaii	:	1	:	10930.98
+Idaho	:	1	:	83570.08
+Illinois	:	1	:	57914.38
+Indiana	:	1	:	36417.73
+Iowa	:	1	:	56271.55
+Kansas	:	1	:	82276.84
+Kentucky	:	1	:	40409.02
+Louisiana	:	1	:	51839.70
+Maine	:	1	:	35384.65
+Maryland	:	1	:	12406.68
+Massachusetts	:	1	:	10554.57
+Michigan	:	1	:	96716.11
+Minnesota	:	1	:	86938.87
+Mississippi	:	1	:	48430.19
+Missouri	:	1	:	69704.31
+Montana	:	1	:	147042.40
+Nebraska	:	1	:	77353.73
+Nevada	:	1	:	110560.71
+New Hampshire	:	1	:	9349.94
+New Jersey	:	1	:	8721.30
+New Mexico	:	1	:	121589.48
+New York	:	1	:	54556.00
+North Carolina	:	1	:	53818.51
+North Dakota	:	1	:	70699.79
+Ohio	:	1	:	44824.90
+Oklahoma	:	1	:	69898.19
+Oregon	:	1	:	98380.64
+Pennsylvania	:	1	:	46055.24
+Rhode Island	:	1	:	1545.05
+South Carolina	:	1	:	32020.20
+South Dakota	:	1	:	77116.49
+Tennessee	:	1	:	42143.27
+Texas	:	1	:	268580.82
+Utah	:	1	:	84898.83
+Vermont	:	1	:	9614.26
+Virginia	:	1	:	42774.20
+Washington	:	1	:	71299.64
+West Virginia	:	1	:	24229.76
+Wisconsin	:	1	:	65497.82
+Wyoming	:	1	:	97813.56
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_POPULATION.txt
new file mode 100644
index 0000000..9bc6340
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/USA_POPULATION.txt
@@ -0,0 +1,52 @@
+United States	:	0	:	281421906
+    California	:	1	:	33871648
+    Texas	:	1	:	20851820
+    New York	:	1	:	18976457
+    Florida	:	1	:	15982378
+    Illinois	:	1	:	12419293
+    Pennsylvania	:	1	:	12281054
+    Ohio	:	1	:	11353140
+    Michigan	:	1	:	9938444
+    New Jersey	:	1	:	8414350
+    Georgia	:	1	:	8186453
+    North Carolina	:	1	:	8049313
+    Virginia	:	1	:	7078515
+    Massachusetts	:	1	:	6349097
+    Indiana	:	1	:	6080485
+    Washington	:	1	:	5894121
+    Tennessee	:	1	:	5689283
+    Missouri	:	1	:	5595211
+    Wisconsin	:	1	:	5363675
+    Maryland	:	1	:	5296486
+    Arizona	:	1	:	5130632
+    Minnesota	:	1	:	4919479
+    Louisiana	:	1	:	4468976
+    Alabama	:	1	:	4447100
+    Colorado	:	1	:	4301261
+    Kentucky	:	1	:	4041769
+    South Carolina	:	1	:	4012012
+    Oklahoma	:	1	:	3450654
+    Oregon	:	1	:	3421399
+    Connecticut	:	1	:	3405565
+    Iowa	:	1	:	2926324
+    Mississippi	:	1	:	2844658
+    Kansas	:	1	:	2688418
+    Arkansas	:	1	:	2673400
+    Utah	:	1	:	2233169
+    Nevada	:	1	:	1998257
+    New Mexico	:	1	:	1819046
+    West Virginia	:	1	:	1808344
+    Nebraska	:	1	:	1711263
+    Idaho	:	1	:	1293953
+    Maine	:	1	:	1274923
+    New Hampshire	:	1	:	1235786
+    Hawaii	:	1	:	1211537
+    Rhode Island	:	1	:	1048319
+    Montana	:	1	:	902195
+    Delaware	:	1	:	783600
+    South Dakota	:	1	:	754844
+    North Dakota	:	1	:	642200
+    Alaska	:	1	:	626932
+    Vermont	:	1	:	608827
+    District of Columbia	:	1	:	572059
+    Wyoming	:	1	:	493782
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_AREA.txt
new file mode 100644
index 0000000..b1bd2ca
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_AREA.txt
@@ -0,0 +1,21 @@
+Uzbekistan	:	0	:	447400
+Qoraqalpoghiston  [Aral Sea] : 1 : 164000
+Andijan [Andizhan] 	:	1	:	4200
+Bukhara 	:	1	:	39400
+Ferghana [Fergana]	:	1	:	6800
+Jizzak 	:	1	:	20500
+Nukus 	:	1	:	165600
+Karshi 	:	1	:	28400
+Urgench 	:	1	:	6300
+Namangan 	:	1	:	7900
+Navoiy 	:	1	:	110800
+Samarqand [Samarkand]	:	1	:	16400
+Termez 	:	1	:	20800
+Gulistan 	:	1	:	5100
+Tashkent City	:	1	:	300
+Tashkent [Tashkent Oblast]	:	1	:	15000
+Karakalpak : 1 : 164900
+Kashkadarya : 1 : 28400
+Khorezm : 1  : 6300
+Surkhandarya : 1 : 20800
+Syrdarya : 1 : 5100
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_POPULATION.txt
new file mode 100644
index 0000000..4388419
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/UZBEKISTAN_POPULATION.txt
@@ -0,0 +1,24 @@
+Uzbekistan	:	0	:	27307134
+Qoraqalpoghiston  [Aral Sea] : 1 : 1343000
+Andijan [Andizhan]  	:	1	:	2286000
+Bukhara 	:	1	:	1534900
+Ferghana [Fergana]	:	1	:	2761300
+Jizzak 	:	1	:	1026000
+Nukus 	:	1	:	1633900
+Karshi 	:	1	:	2302000
+Urgench 	:	1	:	1402600
+Namangan 	:	1	:	2049900
+Navoiy 	:	1	:	877100
+Samarqand [Samarkand] 	:	1	:	2749100
+Termez 	:	1	:	1846400
+Gulistan 	:	1	:	670800
+Tashkent City	:	1	:	2120000
+Tashkent [Tashkent Oblast] 	:	1	:	2866800
+Karakalpak : 1 : 1343000
+Kashkadarya : 1 : 1812000
+Khorezm : 1  : 1135000
+Surkhandarya : 1 : 1437000
+Syrdarya : 1 : 600000
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_AREA.txt
new file mode 100644
index 0000000..036c098
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_AREA.txt
@@ -0,0 +1,53 @@
+United States : 0 : 9631420 
+Alabama	:	1	:	52419.02
+Alaska	:	1	:	663267.26
+Arizona	:	1	:	113998.30
+Arkansas	:	1	:	53178.62
+California	:	1	:	163695.57
+Colorado	:	1	:	104093.57
+Connecticut	:	1	:	5543.33
+Delaware	:	1	:	2489.27
+District of Columbia	:	1	:	68.34
+Florida	:	1	:	65754.59
+Georgia	:	1	:	59424.77
+Hawaii	:	1	:	10930.98
+Idaho	:	1	:	83570.08
+Illinois	:	1	:	57914.38
+Indiana	:	1	:	36417.73
+Iowa	:	1	:	56271.55
+Kansas	:	1	:	82276.84
+Kentucky	:	1	:	40409.02
+Louisiana	:	1	:	51839.70
+Maine	:	1	:	35384.65
+Maryland	:	1	:	12406.68
+Massachusetts	:	1	:	10554.57
+Michigan	:	1	:	96716.11
+Minnesota	:	1	:	86938.87
+Mississippi	:	1	:	48430.19
+Missouri	:	1	:	69704.31
+Montana	:	1	:	147042.40
+Nebraska	:	1	:	77353.73
+Nevada	:	1	:	110560.71
+New Hampshire	:	1	:	9349.94
+New Jersey	:	1	:	8721.30
+New Mexico	:	1	:	121589.48
+New York	:	1	:	54556.00
+North Carolina	:	1	:	53818.51
+North Dakota	:	1	:	70699.79
+Ohio	:	1	:	44824.90
+Oklahoma	:	1	:	69898.19
+Oregon	:	1	:	98380.64
+Pennsylvania	:	1	:	46055.24
+Rhode Island	:	1	:	1545.05
+South Carolina	:	1	:	32020.20
+South Dakota	:	1	:	77116.49
+Tennessee	:	1	:	42143.27
+Texas	:	1	:	268580.82
+Utah	:	1	:	84898.83
+Vermont	:	1	:	9614.26
+Virginia	:	1	:	42774.20
+Washington	:	1	:	71299.64
+West Virginia	:	1	:	24229.76
+Wisconsin	:	1	:	65497.82
+Wyoming	:	1	:	97813.56
+Puerto Rico	:	1	:	5324.50
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_POPULATION.txt
new file mode 100644
index 0000000..cb51960
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/United States_POPULATION.txt
@@ -0,0 +1,53 @@
+United States	:	0	:	281421906
+    California	:	1	:	33871648
+    Texas	:	1	:	20851820
+    New York	:	1	:	18976457
+    Florida	:	1	:	15982378
+    Illinois	:	1	:	12419293
+    Pennsylvania	:	1	:	12281054
+    Ohio	:	1	:	11353140
+    Michigan	:	1	:	9938444
+    New Jersey	:	1	:	8414350
+    Georgia	:	1	:	8186453
+    North Carolina	:	1	:	8049313
+    Virginia	:	1	:	7078515
+    Massachusetts	:	1	:	6349097
+    Indiana	:	1	:	6080485
+    Washington	:	1	:	5894121
+    Tennessee	:	1	:	5689283
+    Missouri	:	1	:	5595211
+    Wisconsin	:	1	:	5363675
+    Maryland	:	1	:	5296486
+    Arizona	:	1	:	5130632
+    Minnesota	:	1	:	4919479
+    Louisiana	:	1	:	4468976
+    Alabama	:	1	:	4447100
+    Colorado	:	1	:	4301261
+    Kentucky	:	1	:	4041769
+    South Carolina	:	1	:	4012012
+    Oklahoma	:	1	:	3450654
+    Oregon	:	1	:	3421399
+    Connecticut	:	1	:	3405565
+    Iowa	:	1	:	2926324
+    Mississippi	:	1	:	2844658
+    Kansas	:	1	:	2688418
+    Arkansas	:	1	:	2673400
+    Utah	:	1	:	2233169
+    Nevada	:	1	:	1998257
+    New Mexico	:	1	:	1819046
+    West Virginia	:	1	:	1808344
+    Nebraska	:	1	:	1711263
+    Idaho	:	1	:	1293953
+    Maine	:	1	:	1274923
+    New Hampshire	:	1	:	1235786
+    Hawaii	:	1	:	1211537
+    Rhode Island	:	1	:	1048319
+    Montana	:	1	:	902195
+    Delaware	:	1	:	783600
+    South Dakota	:	1	:	754844
+    North Dakota	:	1	:	642200
+    Alaska	:	1	:	626932
+    Vermont	:	1	:	608827
+    District of Columbia	:	1	:	572059
+    Wyoming	:	1	:	493782
+	Puerto Rico : 1 : 3912054
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_AREA.txt
new file mode 100644
index 0000000..321ab52
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_AREA.txt
@@ -0,0 +1,27 @@
+Venezuela	:	0	:	912050
+Amazonas   	:	1	:	180145
+Anzoategui 	:	1	:	43300
+Apure 	:	1	:	76500
+Aragua 	:	1	:	7014
+Barinas 	:	1	:	35200
+Bolivar 	:	1	:	238000
+Carabobo 	:	1	:	4650
+Cojedes 	:	1	:	14800
+Delta Amacuro 	:	1	:	40200
+Falcon 	:	1	:	24800
+Guarico 	:	1	:	64986
+Lara 	:	1	:	19800
+Merida 	:	1	:	11300
+Miranda 	:	1	:	7950
+Monagas 	:	1	:	28900
+Nueva Esparta 	:	1	:	1150
+Portuguesa 	:	1	:	15200
+Sucre 	:	1	:	11800
+Tachira 	:	1	:	11100
+Trujillo 	:	1	:	7400
+Vargas 	:	1	:	1497
+Yaracuy 	:	1	:	7100
+Zulia 	:	1	:	63100
+Distrito Federal 	:	1	:	433
+Dependencias Federales (DF) 	:	1	:	120
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_POPULATION.txt
new file mode 100644
index 0000000..81e54d3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/VENEZUELA_POPULATION.txt
@@ -0,0 +1,26 @@
+Venezuela	:	0	:	25730435
+Amazonas   	:	1	:	70464
+Anzoategui 	:	1	:	1222225
+Apure 	:	1	:	377756
+Aragua 	:	1	:	1449616
+Barinas 	:	1	:	624508
+Bolivar 	:	1	:	1214846
+Carabobo 	:	1	:	1932168
+Cojedes 	:	1	:	253105
+Delta Amacuro 	:	1	:	97987
+Falcon 	:	1	:	763188
+Guarico 	:	1	:	627086
+Lara 	:	1	:	1556415
+Merida 	:	1	:	715268
+Miranda 	:	1	:	2330872
+Monagas 	:	1	:	712626
+Nueva Esparta 	:	1	:	373851
+Portuguesa 	:	1	:	725740
+Sucre 	:	1	:	786483
+Tachira 	:	1	:	992669
+Trujillo 	:	1	:	608563
+Vargas 	:	1	:	298109
+Yaracuy 	:	1	:	499049
+Zulia 	:	1	:	2983679
+Distrito Federal 	:	1	:	1836286
+Dependencias Federales (DF) 	:	1	:	1651
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_AREA.txt
new file mode 100644
index 0000000..5e425bd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_AREA.txt
@@ -0,0 +1,75 @@
+Vietnam	:	0	:	329560
+NorthEast	:	1	:	63629.80
+An Giang [Bac Giang town] 	:	1	:	3822.70
+Bac Kan town 	:	1	:	4857.20
+Cao Bang [Cao Bang town] 	:	1	:	6690.70
+Ha Giang [Ha Giang town] 	:	1	:	7884.30
+Lang Son [Lang Son town] 	:	1	:	8305.20
+Lao Cai [Lao Cai city] 	:	1	:	6357.00
+Viet Tri city 	:	1	:	3519.60
+Quang Ninh [Ha Long city] 	:	1	:	5899.60
+Thai Nguyen city 	:	1	:	3542.60
+Tuyen Quang [Tuyen Quang town] 	:	1	:	5868.00
+Yen Bai [Yen Bai city] 	:	1	:	6882.90
+NorthWest	:	1	:	37336.90
+Dien Bien Phu City 	:	1	:	9560.00
+Hoa Binh [Hoa Binh town] 	:	1	:	4662.50
+Phong Tho town 	:	1	:	9059.40
+Son La [Son La town] 	:	1	:	14055.00
+Red River Delta	:	1	:	14812.50
+Bac Ninh town [Bac Thai]	:	1	:	807.6
+Nam Ha [Phu Ly town] 	:	1	:	852.2
+Ha Noi [Hanoi City] 	:	1	:	921
+Ha Tay [Ha Dong town] 	:	1	:	2192.10
+Hai Duong city [Dong Thap]	:	1	:	1648.40
+Hai Phong [Hai Phong city] 	:	1	:	1526.30
+Hung Yen town [Hai Hung] 	:	1	:	923.1
+Nam Dinh city  [Lai Chau]	:	1	:	1641.30
+Ninh Binh [Ninh Binh town] 	:	1	:	1383.70
+Thai Binh [Thai Binh town] 	:	1	:	1545.40
+Vinh Phu [Vinh Yen town] 	:	1	:	1371.40
+North Central Coast	:	1	:	51510.80
+Ha Tinh [Ha Tinh town] 	:	1	:	6055.60
+Nghe An [Vinh city] 	:	1	:	16487.40
+Quang Binh [Dong Hoi town] 	:	1	:	8051.80
+Quang Tri [Dong Ha town] 	:	1	:	4745.70
+Thanh Hoa [Thanh Hoa city] 	:	1	:	11116.30
+Thua Thien-Hue [Hué City] 	:	1	:	5054.00
+South Central Coast	:	1	:	33069.00
+Binh Dinh [Quy Nhon city] 	:	1	:	6025.00
+Da Nang City 	:	1	:	1255.50
+Khanh Hoa [Nha Trang City] 	:	1	:	5198.20
+Phu Yen [Tuy Hoa town] 	:	1	:	5045.30
+Quang Nam-Da Nang [Tam Ky town] 	:	1	:	10407.40
+Quang Ngai [Quang Ngai town] 	:	1	:	5137.60
+Central Highlands	:	1	:	54473.70
+Dac Lac [Buon Ma Thuot city] 	:	1	:	13085.00
+Gia Nghia town [Ha Bac]	:	1	:	6514.50
+Gia Lai [Plei Ku city] 	:	1	:	15494.90
+Kon Tum [Kon Tum town]s 	:	1	:	9614.50
+Lam Dong [Da Lat city] 	:	1	:	9764.80
+NorthEast South	:	1	:	34743.10
+Ba Ria - Vung Tau [Vung Tau city] 	:	1	:	1982.20
+Thu Dau Mot town [Song Be]	:	1	:	2695.50
+Dong Nai [Dong Xoai town] 	:	1	:	6857.30
+Binh Thuan [Phan Thiet city] 	:	1	:	7828.40
+Bien Hoa city [Minh Hai]	:	1	:	5894.80
+Ho Chi Minh City 	:	1	:	2095.20
+Ninh Thuan [Phan Rang-Thap Cham town] 	:	1	:	3360.10
+Tay Ninh town 	:	1	:	4029.60
+Mekong River Delta	:	1	:	39738.70
+Long Xuyen city 	:	1	:	3406.20
+Bac Lieu town 	:	1	:	2525.70 
+Ben Tre [Ben Tre town] 	:	1	:	2321.60
+Ca Mau town 	:	1	:	5201.50
+Can Tho [Can Tho city] 	:	1	:	1390.00
+Sa Dec town 	:	1	:	3246.10
+Vi Thanh Town 	:	1	:	1608.00
+Kien Giang [Rach Gia town] 	:	1	:	6268.20
+Long An [Tan An town] 	:	1	:	4491.20
+Soc Trang [Soc Trang town] 	:	1	:	3223.30
+Tien Giang [My Tho city] 	:	1	:	2366.60
+Tra Vinh [Tra Vinh town] 	:	1	:	2215.10
+Vinh Long [Vinh Long town] 	:	1	:	1475.20
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_POPULATION.txt
new file mode 100644
index 0000000..9332fd5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/VIETNAM_POPULATION.txt
@@ -0,0 +1,76 @@
+Vietnam	:	0	:	84402966
+NorthEast	:	1	:	9244800
+An Giang [Bac Giang town] 	:	1	:	1563500
+Bac Kan town 	:	1	:	296200
+Cao Bang [Cao Bang town] 	:	1	:	508200
+Ha Giang [Ha Giang town] 	:	1	:	660700
+Lang Son [Lang Son town] 	:	1	:	731700
+Lao Cai [Lao Cai city] 	:	1	:	565700
+Viet Tri city 	:	1	:	1314500
+Quang Ninh [Ha Long city] 	:	1	:	1067300
+Thai Nguyen city 	:	1	:	1095400
+Tuyen Quang [Tuyen Quang town] 	:	1	:	718100
+Yen Bai [Yen Bai city] 	:	1	:	723500
+NorthWest	:	1	:	2524900
+Dien Bien Phu City 	:	1	:	440800
+Hoa Binh [Hoa Binh town] 	:	1	:	803300
+Phong Tho town 	:	1	:	308000
+Son La [Son La town] 	:	1	:	972800
+Red River Delta	:	1	:	17836000
+Bac Ninh town [Bac Thai]	:	1	:	987400
+Nam Ha [Phu Ly town] 	:	1	:	820100
+Ha Noi [Hanoi City] 	:	1	:	3082800
+Ha Tay [Ha Dong town] 	:	1	:	2500000
+Hai Duong city [Dong Thap] 	:	1	:	1698300
+Hai Phong [Hai Phong city] 	:	1	:	1770800
+Hung Yen town [Hai Hung]	:	1	:	1120300
+Nam Dinh city [Lai Chau]	:	1	:	1947100
+Ninh Binh [Ninh Binh town] 	:	1	:	911600
+Thai Binh [Thai Binh town] 	:	1	:	1842800
+Vinh Phu [Vinh Yen town] 	:	1	:	1154800
+North Central Coast	:	1	:	10504500
+Ha Tinh [Ha Tinh town] 	:	1	:	1286700
+Nghe An [Vinh city] 	:	1	:	3003200
+Quang Binh [Dong Hoi town] 	:	1	:	831600
+Quang Tri [Dong Ha town] 	:	1	:	616600
+Thanh Hoa [Thanh Hoa city] 	:	1	:	3646600
+Thua Thien-Hue [Hué City] 	:	1	:	1119800
+South Central Coast	:	1	:	6981700
+Binh Dinh [Quy Nhon city] 	:	1	:	1545300
+Da Nang City 	:	1	:	764500
+Khanh Hoa [Nha Trang City] 	:	1	:	1111300
+Phu Yen [Tuy Hoa town] 	:	1	:	848900
+Quang Nam-Da Nang [Tam Ky town] 	:	1	:	1452300
+Quang Ngai [Quang Ngai town] 	:	1	:	1259400
+Central Highlands	:	1	:	4674200
+Dac Lac [Buon Ma Thuot city] 	:	1	:	1687700
+Gia Nghia town [Ha Bac]	:	1	:	385800
+Gia Lai [Plei Ku city] 	:	1	:	1095900
+Kon Tum [Kon Tum town] 	:	1	:	366100
+Lam Dong [Da Lat city] 	:	1	:	1138700
+NorthEast South	:	1	:	13190100
+Ba Ria - Vung Tau [Vung Tau city] 	:	1	:	897600
+Thu Dau Mot town  [Song Be]	:	1	:	883200
+Dong Nai [Dong Xoai town] 	:	1	:	783600
+Binh Thuan [Phan Thiet city] 	:	1	:	1135900
+Bien Hoa city [Minh Hai]	:	1	:	2174600
+Ho Chi Minh City 	:	1	:	5730700
+Ninh Thuan [Phan Rang-Thap Cham town] 	:	1	:	554700
+Tay Ninh town 	:	1	:	1029800
+Mekong River Delta	:	1	:	17076100
+Long Xuyen city 	:	1	:	2170100
+Bac Lieu town 	:	1	:	786200
+Ben Tre [Ben Tre town] 	:	1	:	1345600
+Ca Mau town 	:	1	:	1200800
+Can Tho [Can Tho city] 	:	1	:	1122500
+Sa Dec town 	:	1	:	1639400
+Vi Thanh Town 	:	1	:	781000
+Kien Giang [Rach Gia town] 	:	1	:	1630300
+Long An [Tan An town] 	:	1	:	1400500
+Soc Trang [Soc Trang town] 	:	1	:	1257400
+Tien Giang [My Tho city] 	:	1	:	1681600
+Tra Vinh [Tra Vinh town] 	:	1	:	1015800
+Vinh Long [Vinh Long town] 	:	1	:	1044900
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_AREA.txt
new file mode 100644
index 0000000..a9b0be0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_AREA.txt
@@ -0,0 +1,21 @@
+Yemen	:	0	:	527970
+Muhafazat Abya-n  	:	1	:	24131
+Former South Yemen [Muhafazat 'Adan] 	:	1	:	7099
+Muhafazat Ad? D?a-li' 	:	1	:	0
+Muhafazat al Bayd?a-' 	:	1	:	10711
+Muhafazat al H?udaydah 	:	1	:	16646
+Muhafazat al Jawf 	:	1	:	13175
+Muhafazat al Mahrah 	:	1	:	98249
+Muhafazat al Mah?wi-t 	:	1	:	2501
+Muhafazat 'Amra-n 	:	1	:	0
+Capital Secretariat (San'a' City) 	:	1	:	247
+Muhafazat Dhama-r 	:	1	:	8745
+Muhafazat H?ad?ramawt 	:	1	:	148178
+Muhafazat H?ajjah 	:	1	:	10677
+Muhafazat Ibb 	:	1	:	7632
+Muhafazat Lah?ij 	:	1	:	14836
+Muhafazat Ma'rib 	:	1	:	13466
+Muhafazat S?a-‘dah 	:	1	:	29617
+Former North Yemen [Muhafazat S?an‘a-'] 	:	1	:	28977
+Muhafazat Shabwah 	:	1	:	78995
+Muhafazat Ta-‘izz 	:	1	:	14194
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_POPULATION.txt
new file mode 100644
index 0000000..aa7cc80
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/YEMEN_POPULATION.txt
@@ -0,0 +1,21 @@
+Yemen	:	0	:	21456188
+Muhafazat Abya-n  	:	1	:	432529
+Former South Yemen [Muhafazat 'Adan] 	:	1	:	519822
+Muhafazat Ad? D?a-li' 	:	1	:	415066
+Muhafazat al Bayd?a-' 	:	1	:	579955
+Muhafazat al H?udaydah 	:	1	:	2004049
+Muhafazat al Jawf 	:	1	:	447020
+Muhafazat al Mahrah 	:	1	:	72555
+Muhafazat al Mah?wi-t 	:	1	:	464158
+Muhafazat 'Amra-n 	:	1	:	993722
+Capital Secretariat (San'a' City) 	:	1	:	1590624
+Muhafazat Dhama-r 	:	1	:	1234424
+Muhafazat H?ad?ramawt 	:	1	:	890246
+Muhafazat H?ajjah 	:	1	:	1404554
+Muhafazat Ibb 	:	1	:	2074139
+Muhafazat Lah?ij 	:	1	:	664070
+Muhafazat Ma'rib 	:	1	:	233695
+Muhafazat S?a-‘dah 	:	1	:	614682
+Former North Yemen [Muhafazat S?an‘a-'] 	:	1	:	1394947
+Muhafazat Shabwah 	:	1	:	469256
+Muhafazat Ta-‘izz 	:	1	:	2363486
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_AREA.txt
new file mode 100644
index 0000000..1a4f363
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_AREA.txt
@@ -0,0 +1,5 @@
+ Vojvodina : 1 : 21506.0
+ Srbija : 1 : 55968.0
+ Crna Gora : 1 : 13812.0
+ Kosovo : 1 : 10887.0
+ Makedonija : 1 : 25713.0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_POPULATION.txt
new file mode 100644
index 0000000..def096a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/YUGOSLAVIA_POPULATION.txt
@@ -0,0 +1,5 @@
+ Vojvodina : 1 : 2031992
+ Srbija : 1 : 1576124
+ Crna Gora : 1 : 638461
+ Kosovo : 1 : 2100000
+ Makedonija : 1 : 9832581
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_AREA.txt
new file mode 100644
index 0000000..c679a58
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_AREA.txt
@@ -0,0 +1 @@
+Zaire	:	0	:	2345410
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_POPULATION.txt
new file mode 100644
index 0000000..1e5c20d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAIRE_POPULATION.txt
@@ -0,0 +1 @@
+Zaire	:	0	:	46498539 
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_AREA.txt
new file mode 100644
index 0000000..8096c64
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_AREA.txt
@@ -0,0 +1,83 @@
+Zambia	:	0	:	752614
+Central3 [Central][Central Province]	:	1	:	94394
+Mongu [Western4] [Western] : 1 : 126386
+Northern4 [Northern] [Northern Province]	:	1	:	147826
+Chibombo 	:	1	:	0
+Kabwe 	:	1	:	0
+Kapiri Mposhi 	:	1	:	0
+Mkushi 	:	1	:	0
+Mumbwa 	:	1	:	0
+Serenje 	:	1	:	0
+Ndola	:	1	:	31328
+Chililabombwe 	:	1	:	0
+Chingola 	:	1	:	0
+Kalulushi 	:	1	:	0
+Kitwe 	:	1	:	0
+Luanshya 	:	1	:	0
+Lufwanyama 	:	1	:	0
+Masaiti 	:	1	:	0
+Mpongwe 	:	1	:	0
+Mufulira 	:	1	:	0
+Ndola [Copperbelt]	:	1	:	31328
+Eastern4 [Eastern] [Eastern Province]	:	1	:	69106
+Chadiza 	:	1	:	0
+Chama 	:	1	:	0
+Chipata 	:	1	:	0
+Katete 	:	1	:	0
+Lundazi 	:	1	:	0
+Mambwe 	:	1	:	0
+Nyimba 	:	1	:	0
+Petauke 	:	1	:	0
+Mansa [Luapula]	:	1	:	50567
+Chiengi 	:	1	:	0
+Kawambwa 	:	1	:	0
+Mansa 	:	1	:	0
+Milenge 	:	1	:	0
+Mwense 	:	1	:	0
+Nchelenge 	:	1	:	0
+Samfya 	:	1	:	0
+Lusaka 	:	1	:	21896
+Chongwe 	:	1	:	0
+Kafue 	:	1	:	0
+Luangwa 	:	1	:	0
+Lusaka 	:	1	:	0
+Chilubi 	:	1	:	0
+Chinsali 	:	1	:	0
+Isoka 	:	1	:	0
+Kaputa 	:	1	:	0
+Kasama 	:	1	:	0
+Luwingu 	:	1	:	0
+Mbala 	:	1	:	0
+Mpika 	:	1	:	0
+Mporokoso 	:	1	:	0
+Mpulungu 	:	1	:	0
+Mungwi 	:	1	:	0
+Nakonde 	:	1	:	0
+North Western	:	1	:	125826
+Chavuma 	:	1	:	0
+Mufumbwe (Chizera) 	:	1	:	0
+Kabompo 	:	1	:	0
+Kasempa 	:	1	:	0
+Mwinilunga 	:	1	:	0
+Solwezi 	:	1	:	0
+Zambezi 	:	1	:	0
+Southern3 [Southern] [Southern Province]	:	1	:	85283
+Choma 	:	1	:	0
+Gwembe 	:	1	:	0
+Itezhi-tezhi 	:	1	:	0
+Kalomo 	:	1	:	0
+Kazungula 	:	1	:	0
+Livingstone 	:	1	:	0
+Mazabuka 	:		:	0
+Monze 	:	1	:	0
+Namwala 	:	1	:	0
+Siavonga 	:	1	:	0
+Sinazongwe 	:	1	:	0
+Mongu	:	1	:	126386
+Kalabo 	:	1	:	0
+Kaoma 	:	1	:	0
+Lukulu 	:	1	:	0
+Mongu 	:	1	:	0
+Senanga 	:	1	:	0
+Sesheke 	:	1	:	0
+Shang'ombo 	:	1	:	0
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_POPULATION.txt
new file mode 100644
index 0000000..6dbcb1c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZAMBIA_POPULATION.txt
@@ -0,0 +1,83 @@
+Zambia	:	0	:	11502010
+Central3 [Central Province]	:	1	:	1012257
+Mongu [Western4] [Western] : 1 : 765088 
+Chibombo 	:	1	:	241612
+Kabwe 	:	1	:	176758
+Kapiri Mposhi 	:	1	:	194752
+Mkushi 	:	1	:	107438
+Mumbwa 	:	1	:	158861
+Serenje 	:	1	:	132836
+Ndola	:	1	:	1581221
+Chililabombwe 	:	1	:	67533
+Chingola 	:	1	:	172026
+Kalulushi 	:	1	:	75806
+Kitwe 	:	1	:	376124
+Luanshya 	:	1	:	147908
+Lufwanyama 	:	1	:	63185
+Masaiti 	:	1	:	95581
+Mpongwe 	:	1	:	64371
+Mufulira 	:	1	:	143930
+Ndola [Copperbelt]	:	1	:	374757
+Eastern4 [Eastern Province]	:	1	:	1306173
+Chadiza 	:	1	:	83981
+Chama 	:	1	:	74890
+Chipata 	:	1	:	367539
+Katete 	:	1	:	189250
+Lundazi 	:	1	:	236833
+Mambwe 	:	1	:	70425
+Nyimba 	:	1	:	47376
+Petauke 	:	1	:	235879
+Mansa [Luapula]	:	1	:	775353
+Chiengi 	:	1	:	83824
+Kawambwa 	:	1	:	102503
+Mansa 	:	1	:	179749
+Milenge 	:	1	:	28790
+Mwense 	:	1	:	105759
+Nchelenge 	:	1	:	111119
+Samfya 	:	1	:	163609
+Lusaka 	:	1	:	1391329
+Chongwe 	:	1	:	137461
+Kafue 	:	1	:	150217
+Luangwa 	:	1	:	18948
+Lusaka 	:	1	:	1084703
+Northern4 [Northern Province]	:	1	:	1258696
+Chilubi 	:	1	:	66338
+Chinsali 	:	1	:	128646
+Isoka 	:	1	:	99319
+Kaputa 	:	1	:	87233
+Kasama 	:	1	:	170929
+Luwingu 	:	1	:	80758
+Mbala 	:	1	:	149634
+Mpika 	:	1	:	146196
+Mporokoso 	:	1	:	73929
+Mpulungu 	:	1	:	67602
+Mungwi 	:	1	:	112977
+Nakonde 	:	1	:	75135
+North Western	:	1	:	583350
+Chavuma 	:	1	:	29941
+Mufumbwe (Chizera) 	:	1	:	71238
+Kabompo 	:	1	:	51904
+Kasempa 	:	1	:	44002
+Mwinilunga 	:	1	:	117505
+Solwezi 	:	1	:	203797
+Zambezi 	:	1	:	64963
+Southern3 [Southern Province]	:	1	:	1212124
+Choma 	:	1	:	204898
+Gwembe 	:	1	:	34133
+Itezhi-tezhi 	:	1	:	43111
+Kalomo 	:	1	:	169503
+Kazungula 	:	1	:	68265
+Livingstone 	:	1	:	103288
+Mazabuka 	:	1	:	203219
+Monze 	:	1	:	163578
+Namwala 	:	1	:	82810
+Siavonga 	:	1	:	58864
+Sinazongwe 	:	1	:	80455
+Mongu	:	1	:	765088
+Kalabo 	:	1	:	114806
+Kaoma 	:	1	:	162568
+Lukulu 	:	1	:	68375
+Mongu 	:	1	:	162002
+Senanga 	:	1	:	109119
+Sesheke 	:	1	:	78169
+Shang'ombo 	:	1	:	70049
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_AREA.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_AREA.txt
new file mode 100644
index 0000000..107ed47
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_AREA.txt
@@ -0,0 +1 @@
+Zimbabwe	:	0	:	390757
diff --git a/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_POPULATION.txt b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_POPULATION.txt
new file mode 100644
index 0000000..03e3b7f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/AreaPopulationData/ZIMBABWE_POPULATION.txt
@@ -0,0 +1 @@
+Zimbabwe	:	0	:	11634663
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1.txt
new file mode 100644
index 0000000..596c377
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1.txt
@@ -0,0 +1,60 @@
+ALABAMA:01:AL
+MISSOURI:29:MO
+ALASKA:02:AK
+MONTANA:30:MT
+ARIZONA:04:AZ
+NEBRASKA:31:NE
+ARKANSAS:05:AR
+NEVADA:32:NV
+CALIFORNIA:06:CA
+NEW HAMPSHIRE:33:NH
+COLORADO:08:CO
+NEW JERSEY:34:NJ
+CONNECTICUT:09:CT
+NEW MEXICO:35:NM
+DELAWARE:10:DE
+NEW YORK:36:NY
+DISTRICT OF COLUMBIA:11:DC
+NORTH CAROLINA:37:NC
+FLORIDA:12:FL
+NORTH DAKOTA:38:ND
+GEORGIA:13:GA
+OHIO:39:OH
+OKLAHOMA:40:OK
+OREGON:41:OR
+HAWAII:15:HI
+PENNSYLVANIA:42:PA
+IDAHO:16:ID
+RHODE ISLAND:44:RI
+ILLINOIS:17:IL
+SOUTH CAROLINA:45:SC
+INDIANA:18:IN
+SOUTH DAKOTA:46:SD
+IOWA:19:IA
+TENNESSEE:47:TN
+KANSAS:20:KS
+TEXAS:48:TX
+KENTUCKY:21:KY
+UTAH:49:UT
+LOUISIANA:22:LA
+VERMONT:50:VT
+MAINE:23:ME
+VIRGINIA:51:VA
+MARYLAND:24:MD
+WASHINGTON:53:WA
+MASSACHUSETTS:25:MA
+WEST VIRGINIA:54:WV
+MICHIGAN:26:MI
+WISCONSIN:55:WI
+MINNESOTA:27:MN
+WYOMING:56:WY
+MISSISSIPPI:28:MS
+AMERICAN SAMOA:60:AS
+FEDERATED STATES OF MICRONESIA:64:FM
+GUAM:66:GU
+MARSHALL ISLANDS:68:MH
+NORTHERN MARIANA ISLANDS:69:MP
+PALAU:70:PR
+PUERTO RICO:72:PR
+U.S. MINOR OUTLYING ISLANDS:74:UM
+VIRGIN ISLANDS OF THE U.S.:78:VI
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1_UNFORMATTED.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1_UNFORMATTED.txt
new file mode 100644
index 0000000..9051257
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/FIPS_ADMIN1_UNFORMATTED.txt
@@ -0,0 +1,530 @@
+Alabama
+	
+
+01
+	
+
+AL
+	
+
+Missouri
+	
+
+29
+	
+
+MO
+
+Alaska
+	
+
+02
+	
+
+AK
+	
+
+Montana
+	
+
+30
+	
+
+MT
+
+Arizona
+	
+
+04
+	
+
+AZ
+	
+
+Nebraska
+	
+
+31
+	
+
+NE
+
+Arkansas
+	
+
+05
+	
+
+AR
+	
+
+Nevada
+	
+
+32
+	
+
+NV
+
+California
+	
+
+06
+	
+
+CA
+	
+
+New Hampshire
+	
+
+33
+	
+
+NH
+
+Colorado
+	
+
+08
+	
+
+CO
+	
+
+New Jersey
+	
+
+34
+	
+
+NJ
+
+Connecticut
+	
+
+09
+	
+
+CT
+	
+
+New Mexico
+	
+
+35
+	
+
+NM
+
+Delaware
+	
+
+10
+	
+
+DE
+	
+
+New York
+	
+
+36
+	
+
+NY
+
+District of Columbia
+	
+
+11
+	
+
+DC
+	
+
+North Carolina
+	
+
+37
+	
+
+NC
+
+Florida
+	
+
+12
+	
+
+FL
+	
+
+North Dakota
+	
+
+38
+	
+
+ND
+
+Georgia
+	
+
+13
+	
+
+GA
+	
+
+Ohio
+	
+
+39
+	
+
+OH
+
+ 
+	
+
+ 
+	
+
+ 
+	
+
+Oklahoma
+	
+
+40
+	
+
+OK
+
+ 
+	
+
+ 
+	
+
+ 
+	
+
+Oregon
+	
+
+41
+	
+
+OR
+
+Hawaii
+	
+
+15
+	
+
+HI
+	
+
+Pennsylvania
+	
+
+42
+	
+
+PA
+
+Idaho
+	
+
+16
+	
+
+ID
+	
+
+Rhode Island
+	
+
+44
+	
+
+RI
+
+Illinois
+	
+
+17
+	
+
+IL
+	
+
+South Carolina
+	
+
+45
+	
+
+SC
+
+Indiana
+	
+
+18
+	
+
+IN
+	
+
+South Dakota
+	
+
+46
+	
+
+SD
+
+Iowa
+	
+
+19
+	
+
+IA
+	
+
+Tennessee
+	
+
+47
+	
+
+TN
+
+Kansas
+	
+
+20
+	
+
+KS
+	
+
+Texas
+	
+
+48
+	
+
+TX
+
+Kentucky
+	
+
+21
+	
+
+KY
+	
+
+Utah
+	
+
+49
+	
+
+UT
+
+Louisiana
+	
+
+22
+	
+
+LA
+	
+
+Vermont
+	
+
+50
+	
+
+VT
+
+Maine
+	
+
+23
+	
+
+ME
+	
+
+Virginia
+	
+
+51
+	
+
+VA
+
+Maryland
+	
+
+24
+	
+
+MD
+	
+
+Washington
+	
+
+53
+	
+
+WA
+
+Massachusetts
+	
+
+25
+	
+
+MA
+	
+
+West Virginia
+	
+
+54
+	
+
+WV
+
+Michigan
+	
+
+26
+	
+
+MI
+	
+
+Wisconsin
+	
+
+55
+	
+
+WI
+
+Minnesota
+	
+
+27
+	
+
+MN
+	
+
+Wyoming
+	
+
+56
+	
+
+WY
+
+Mississippi
+	
+
+28
+	
+
+MS
+
+American Samoa
+	
+
+60
+	
+
+AS
+	
+
+Federated States of Micronesia
+	
+
+64
+	
+
+FM
+	
+
+Guam
+	
+
+66
+	
+
+GU
+	
+
+Marshall Islands
+	
+
+68
+	
+
+MH
+	
+
+Northern Mariana Islands
+	
+
+69
+	
+
+MP
+	
+
+Palau
+	
+
+70
+	
+	
+
+PR
+	
+
+Puerto Rico
+	
+
+72
+	
+
+PR
+	
+
+U.S. Minor Outlying Islands
+	
+
+74
+	
+
+UM
+	
+
+Virgin Islands of the U.S.
+	
+
+78
+	
+
+VI
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2.txt
new file mode 100644
index 0000000..b4435b4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2.txt
@@ -0,0 +1,243 @@
+AFGHANISTAN:AF
+ÅLAND ISLANDS:AX
+ALBANIA:AL
+ALGERIA:DZ
+AMERICAN SAMOA:AS
+ANDORRA:AD
+ANGOLA:AO
+ANGUILLA:AI
+ANTARCTICA:AQ
+ANTIGUA AND BARBUDA:AG
+ARGENTINA:AR
+ARMENIA:AM
+ARUBA:AW
+AUSTRALIA:AU
+AUSTRIA:AT
+AZERBAIJAN:AZ
+BAHAMAS:BS
+BAHRAIN:BH
+BANGLADESH:BD
+BARBADOS:BB
+BELARUS:BY
+BELGIUM:BE
+BELIZE:BZ
+BENIN:BJ
+BERMUDA:BM
+BHUTAN:BT
+BOLIVIA:BO
+BOSNIA AND HERZEGOVINA:BA
+BOTSWANA:BW
+BOUVET ISLAND:BV
+BRAZIL:BR
+BRITISH INDIAN OCEAN TERRITORY:IO
+BRUNEI DARUSSALAM:BN
+BULGARIA:BG
+BURKINA FASO:BF
+BURUNDI:BI
+CAMBODIA:KH
+CAMEROON:CM
+CANADA:CA
+CAPE VERDE:CV
+CAYMAN ISLANDS:KY
+CENTRAL AFRICAN REPUBLIC:CF
+CHAD:TD
+CHILE:CL
+CHINA:CN
+CHRISTMAS ISLAND:CX
+COCOS (KEELING) ISLANDS:CC
+COLOMBIA:CO
+COMOROS:KM
+CONGO:CG
+CONGO, THE DEMOCRATIC REPUBLIC OF THE:CD
+COOK ISLANDS:CK
+COSTA RICA:CR
+COTE D'IVOIRE:CI
+CROATIA:HR
+CUBA:CU
+CYPRUS:CY
+CZECH REPUBLIC:CZ
+DENMARK:DK
+DJIBOUTI:DJ
+DOMINICA:DM
+DOMINICAN REPUBLIC:DO
+ECUADOR:EC
+EGYPT:EG
+EL SALVADOR:SV
+EQUATORIAL GUINEA:GQ
+ERITREA:ER
+ESTONIA:EE
+ETHIOPIA:ET
+FALKLAND ISLANDS (MALVINAS):FK
+FAROE ISLANDS:FO
+FIJI:FJ
+FINLAND:FI
+FRANCE:FR
+FRENCH GUIANA:GF
+FRENCH POLYNESIA:PF
+FRENCH SOUTHERN TERRITORIES:TF
+GABON:GA
+GAMBIA:GM
+GEORGIA:GE
+GERMANY:DE
+GHANA:GH
+GIBRALTAR:GI
+GREECE:GR
+GREENLAND:GL
+GRENADA:GD
+GUADELOUPE:GP
+GUAM:GU
+GUATEMALA:GT
+GUERNSEY: GG
+GUINEA:GN
+GUINEA-BISSAU:GW
+GUYANA:GY
+HAITI:HT
+HEARD ISLAND AND MCDONALD ISLANDS:HM
+HOLY SEE (VATICAN CITY STATE):VA
+HONDURAS:HN
+HONG KONG:HK
+HUNGARY:HU
+ICELAND:IS
+INDIA:IN
+INDONESIA:ID
+IRAN, ISLAMIC REPUBLIC OF:IR
+IRAQ:IQ
+IRELAND:IE
+ISLE OF MAN:IM
+ISRAEL:IL
+ITALY:IT
+JAMAICA:JM
+JAPAN:JP
+JERSEY:JE
+JORDAN:JO
+KAZAKHSTAN:KZ
+KENYA:KE
+KIRIBATI:KI
+KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF:KP
+KOREA, REPUBLIC OF:KR
+KUWAIT:KW
+KYRGYZSTAN:KG
+LAO PEOPLE'S DEMOCRATIC REPUBLIC:LA
+LATVIA:LV
+LEBANON:LB
+LESOTHO:LS
+LIBERIA:LR
+LIBYAN ARAB JAMAHIRIYA:LY
+LIECHTENSTEIN:LI
+LITHUANIA:LT
+LUXEMBOURG:LU
+MACAO:MO
+MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF:MK
+MADAGASCAR:MG
+MALAWI:MW
+MALAYSIA:MY
+MALDIVES:MV
+MALI:ML
+MALTA:MT
+MARSHALL ISLANDS:MH
+MARTINIQUE:MQ
+MAURITANIA:MR
+MAURITIUS:MU
+MAYOTTE:YT
+MEXICO:MX
+MICRONESIA, FEDERATED STATES OF:FM
+MOLDOVA, REPUBLIC OF:MD
+MONACO:MC
+MONGOLIA:MN
+MONTSERRAT:MS
+MOROCCO:MA
+MOZAMBIQUE:MZ
+MYANMAR:MM
+NAMIBIA:NA
+NAURU:NR
+NEPAL:NP
+NETHERLANDS:NL
+NETHERLANDS ANTILLES:AN
+NEW CALEDONIA:NC
+NEW ZEALAND:NZ
+NICARAGUA:NI
+NIGER:NE
+NIGERIA:NG
+NIUE:NU
+NORFOLK ISLAND:NF
+NORTHERN MARIANA ISLANDS:MP
+NORWAY:NO
+OMAN:OM
+PAKISTAN:PK
+PALAU:PW
+PALESTINIAN TERRITORY, OCCUPIED:PS
+PANAMA:PA
+PAPUA NEW GUINEA:PG
+PARAGUAY:PY
+PERU:PE
+PHILIPPINES:PH
+PITCAIRN:PN
+POLAND:PL
+PORTUGAL:PT
+PUERTO RICO:PR
+QATAR:QA
+REUNION:RE
+ROMANIA:RO
+RUSSIAN FEDERATION:RU
+RWANDA:RW
+SAINT HELENA:SH
+SAINT KITTS AND NEVIS:KN
+SAINT LUCIA:LC
+SAINT PIERRE AND MIQUELON:PM
+SAINT VINCENT AND THE GRENADINES:VC
+SAMOA:WS
+SAN MARINO:SM
+SAO TOME AND PRINCIPE:ST
+SAUDI ARABIA:SA
+SENEGAL:SN
+SERBIA AND MONTENEGRO:CS
+SEYCHELLES:SC
+SIERRA LEONE:SL
+SINGAPORE:SG
+SLOVAKIA:SK
+SLOVENIA:SI
+SOLOMON ISLANDS:SB
+SOMALIA:SO
+SOUTH AFRICA:ZA
+SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS:GS
+SPAIN:ES
+SRI LANKA:LK
+SUDAN:SD
+SURINAME:SR
+SVALBARD AND JAN MAYEN:SJ
+SWAZILAND:SZ
+SWEDEN:SE
+SWITZERLAND:CH
+SYRIAN ARAB REPUBLIC:SY
+TAIWAN, PROVINCE OF CHINA:TW
+TAJIKISTAN:TJ
+TANZANIA, UNITED REPUBLIC OF:TZ
+THAILAND:TH
+TIMOR-LESTE:TL
+TOGO:TG
+TOKELAU:TK
+TONGA:TO
+TRINIDAD AND TOBAGO:TT
+TUNISIA:TN
+TURKEY:TR
+TURKMENISTAN:TM
+TURKS AND CAICOS ISLANDS:TC
+TUVALU:TV
+UGANDA:UG
+UKRAINE:UA
+UNITED ARAB EMIRATES:AE
+UNITED KINGDOM:GB
+UNITED STATES:US
+UNITED STATES MINOR OUTLYING ISLANDS:UM
+URUGUAY:UY
+UZBEKISTAN:UZ
+VANUATU:VU
+VENEZUELA:VE
+VIET NAM:VN
+VIRGIN ISLANDS, BRITISH:VG
+VIRGIN ISLANDS, U.S.:VI
+WALLIS AND FUTUNA:WF
+WESTERN SAHARA:EH
+YEMEN:YE
+ZAMBIA:ZM
+ZIMBABWE:ZW
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2URL.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2URL.txt
new file mode 100644
index 0000000..decec31
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA2URL.txt
@@ -0,0 +1 @@
+http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1-semic.txt
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3.txt
new file mode 100644
index 0000000..b8d6cf1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3.txt
@@ -0,0 +1,231 @@
+004:AFGHANISTAN:AFG
+248:ÅLAND ISLANDS:ALA
+008:ALBANIA:ALB
+012:ALGERIA:DZA
+016:AMERICAN SAMOA:ASM
+020:ANDORRA:AND
+024:ANGOLA:AGO
+660:ANGUILLA:AIA
+028:ANTIGUA AND BARBUDA:ATG
+032:ARGENTINA:ARG
+051:ARMENIA:ARM
+533:ARUBA:ABW
+036:AUSTRALIA:AUS
+040:AUSTRIA:AUT
+031:AZERBAIJAN:AZE
+044:BAHAMAS:BHS
+048:BAHRAIN:BHR
+050:BANGLADESH:BGD
+052:BARBADOS:BRB
+112:BELARUS:BLR
+056:BELGIUM:BEL
+084:BELIZE:BLZ
+204:BENIN:BEN
+060:BERMUDA:BMU
+064:BHUTAN:BTN
+068:BOLIVIA:BOL
+070:BOSNIA AND HERZEGOVINA:BIH
+072:BOTSWANA:BWA
+076:BRAZIL:BRA
+092:BRITISH VIRGIN ISLANDS:VGB
+096:BRUNEI DARUSSALAM:BRN
+100:BULGARIA:BGR
+854:BURKINA FASO:BFA
+108:BURUNDI:BDI
+116:CAMBODIA:KHM
+120:CAMEROON:CMR
+124:CANADA:CAN
+132:CAPE VERDE:CPV
+136:CAYMAN ISLANDS:CYM
+140:CENTRAL AFRICAN REPUBLIC:CAF
+148:CHAD:TCD
+152:CHILE:CHL
+156:CHINA:CHN
+344:HONG KONG SPECIAL ADMINISTRATIVE REGION OF CHINA:HKG
+446:MACAO SPECIAL ADMINISTRATIVE REGION OF CHINA:MAC
+170:COLOMBIA:COL
+174:COMOROS:COM
+178:CONGO:COG
+184:COOK ISLANDS:COK
+188:COSTA RICA:CRI
+384:CÔTE D'IVOIRE:CIV
+191:CROATIA:HRV
+192:CUBA:CUB
+196:CYPRUS:CYP
+203:CZECH REPUBLIC:CZE
+408:DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA:PRK
+180:DEMOCRATIC REPUBLIC OF THE CONGO:COD
+208:DENMARK:DNK
+262:DJIBOUTI:DJI
+212:DOMINICA:DMA
+214:DOMINICAN REPUBLIC:DOM
+218:ECUADOR:ECU
+818:EGYPT:EGY
+222:EL SALVADOR:SLV
+226:EQUATORIAL GUINEA:GNQ
+232:ERITREA:ERI
+233:ESTONIA:EST
+231:ETHIOPIA:ETH
+234:FAEROE ISLANDS:FRO
+238:FALKLAND ISLANDS (MALVINAS):FLK
+242:FIJI:FJI
+246:FINLAND:FIN
+250:FRANCE:FRA
+254:FRENCH GUIANA:GUF
+258:FRENCH POLYNESIA:PYF
+266:GABON:GAB
+270:GAMBIA:GMB
+268:GEORGIA:GEO
+276:GERMANY:DEU
+288:GHANA:GHA
+292:GIBRALTAR:GIB
+300:GREECE:GRC
+304:GREENLAND:GRL
+308:GRENADA:GRD
+312:GUADELOUPE:GLP
+316:GUAM:GUM
+320:GUATEMALA:GTM
+324:GUINEA:GIN
+624:GUINEA-BISSAU:GNB
+328:GUYANA:GUY
+332:HAITI:HTI
+336:HOLY SEE:VAT
+340:HONDURAS:HND
+348:HUNGARY:HUN
+352:ICELAND:ISL
+356:INDIA:IND
+360:INDONESIA:IDN
+364:IRAN, ISLAMIC REPUBLIC OF:IRN
+368:IRAQ:IRQ
+372:IRELAND:IRL
+376:ISRAEL:ISR
+380:ITALY:ITA
+388:JAMAICA:JAM
+392:JAPAN:JPN
+400:JORDAN:JOR
+398:KAZAKHSTAN:KAZ
+404:KENYA:KEN
+296:KIRIBATI:KIR
+414:KUWAIT:KWT
+417:KYRGYZSTAN:KGZ
+418:LAO PEOPLE'S DEMOCRATIC REPUBLIC:LAO
+428:LATVIA:LVA
+422:LEBANON:LBN
+426:LESOTHO:LSO
+430:LIBERIA:LBR
+434:LIBYAN ARAB JAMAHIRIYA:LBY
+438:LIECHTENSTEIN:LIE
+440:LITHUANIA:LTU
+442:LUXEMBOURG:LUX
+450:MADAGASCAR:MDG
+454:MALAWI:MWI
+458:MALAYSIA:MYS
+462:MALDIVES:MDV
+466:MALI:MLI
+470:MALTA:MLT
+584:MARSHALL ISLANDS:MHL
+474:MARTINIQUE:MTQ
+478:MAURITANIA:MRT
+480:MAURITIUS:MUS
+175:MAYOTTE:MYT
+484:MEXICO:MEX
+583:MICRONESIA, FEDERATED STATES OF:FSM
+492:MONACO:MCO
+496:MONGOLIA:MNG
+499:MONTENEGRO:UNK
+500:MONTSERRAT:MSR
+504:MOROCCO:MAR
+508:MOZAMBIQUE:MOZ
+104:MYANMAR:MMR
+516:NAMIBIA:NAM
+520:NAURU:NRU
+524:NEPAL:NPL
+528:NETHERLANDS:NLD
+530:NETHERLANDS ANTILLES:ANT
+540:NEW CALEDONIA:NCL
+554:NEW ZEALAND:NZL
+558:NICARAGUA:NIC
+562:NIGER:NER
+566:NIGERIA:NGA
+570:NIUE:NIU
+574:NORFOLK ISLAND:NFK
+580:NORTHERN MARIANA ISLANDS:MNP
+578:NORWAY:NOR
+275:OCCUPIED PALESTINIAN TERRITORY:PSE
+512:OMAN:OMN
+586:PAKISTAN:PAK
+585:PALAU:PLW
+591:PANAMA:PAN
+598:PAPUA NEW GUINEA:PNG
+600:PARAGUAY:PRY
+604:PERU:PER
+608:PHILIPPINES:PHL
+612:PITCAIRN:PCN
+616:POLAND:POL
+620:PORTUGAL:PRT
+630:PUERTO RICO:PRI
+634:QATAR:QAT
+410:REPUBLIC OF KOREA:KOR
+498:REPUBLIC OF MOLDOVA:MDA
+638:RÉUNION:REU
+642:ROMANIA:ROU
+643:RUSSIAN FEDERATION:RUS
+646:RWANDA:RWA
+654:SAINT HELENA:SHN
+659:SAINT KITTS AND NEVIS:KNA
+662:SAINT LUCIA:LCA
+666:SAINT PIERRE AND MIQUELON:SPM
+670:SAINT VINCENT AND THE GRENADINES:VCT
+882:SAMOA:WSM
+674:SAN MARINO:SMR
+678:SAO TOME AND PRINCIPE:STP
+682:SAUDI ARABIA:SAU
+686:SENEGAL:SEN
+688:SERBIA:UNK
+690:SEYCHELLES:SYC
+694:SIERRA LEONE:SLE
+702:SINGAPORE:SGP
+703:SLOVAKIA:SVK
+705:SLOVENIA:SVN
+090:SOLOMON ISLANDS:SLB
+706:SOMALIA:SOM
+710:SOUTH AFRICA:ZAF
+724:SPAIN:ESP
+144:SRI LANKA:LKA
+736:SUDAN:SDN
+740:SURINAME:SUR
+744:SVALBARD AND JAN MAYEN ISLANDS:SJM
+748:SWAZILAND:SWZ
+752:SWEDEN:SWE
+756:SWITZERLAND:CHE
+760:SYRIAN ARAB REPUBLIC:SYR
+762:TAJIKISTAN:TJK
+764:THAILAND:THA
+807:THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA:MKD
+626:TIMOR-LESTE:TLS
+768:TOGO:TGO
+772:TOKELAU:TKL
+776:TONGA:TON
+780:TRINIDAD AND TOBAGO:TTO
+788:TUNISIA:TUN
+792:TURKEY:TUR
+795:TURKMENISTAN:TKM
+796:TURKS AND CAICOS ISLANDS:TCA
+798:TUVALU:TUV
+800:UGANDA:UGA
+804:UKRAINE:UKR
+784:UNITED ARAB EMIRATES:ARE
+826:UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND:GBR
+834:UNITED REPUBLIC OF TANZANIA:TZA
+840:UNITED STATES OF AMERICA:USA
+850:UNITED STATES VIRGIN ISLANDS:VIR
+858:URUGUAY:URY
+860:UZBEKISTAN:UZB
+548:VANUATU:VUT
+862:VENEZUELA (BOLIVARIAN REPUBLIC OF):VEN
+704:VIET NAM:VNM
+876:WALLIS AND FUTUNA ISLANDS:WLF
+732:WESTERN SAHARA:ESH
+887:YEMEN:YEM
+894:ZAMBIA:ZMB
+716:ZIMBABWE:ZWE
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3URL.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3URL.txt
new file mode 100644
index 0000000..25a2235
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_ALPHA3URL.txt
@@ -0,0 +1 @@
+http://unstats.un.org/unsd/methods/m49/m49alpha.htm
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_list.txt b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_list.txt
new file mode 100644
index 0000000..dc9f3d5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-1/ISO3166_1_list.txt
@@ -0,0 +1,280 @@
+#This ISO 3166_1 data has been modified by Nelson to match our diva data set.
+Equatorial Guinea, 226,  GNQ, GQ
+Guinea, 324, GIN, GN
+Guinea Bissau, 624, GNB, GW
+Afghanistan, 004, AFG, AF
+Åland Islands, 248, ALA, AX
+Albania, 008, ALB, AL
+Algeria, 012, DZA, DZ
+American Samoa, 016, ASM, AS
+Andorra, 020, AND, AD
+Angola, 024, AGO, AO
+Anguilla, 660, AIA, AI
+Antarctica, 010,  ATA, AQ
+Antigua and Barbuda, 028, ATG, AG
+Argentina, 032, ARG, AR
+Armenia, 051,  ARM, AM
+Aruba, 533, ABW, AW
+Australia, 036, AUS, AU
+Austria, 040,  AUT, AT
+Azerbaijan, 031, AZE, AZ
+Bahamas, 044, BHS, BS
+Bahrain, 048, BHR, BH
+Bangladesh,  050, BGD, BD
+Barbados, 052, BRB, BB
+Belarus, 112, BLR, BY
+Belgium,  056, BEL, BE
+Belize, 084, BLZ, BZ
+Benin, 204, BEN, BJ
+Bermuda,  060, BMU, BM
+Bhutan, 064, BTN, BT
+Bolivia, 068, BOL, BO
+Bosnia and Herzegovina,  070, BIH, BA
+#Bosnia and Herzegovina,  070, BIH, BH
+Botswana, 072, BWA, BW
+Bouvet Island, 074, BVT, BV
+Brazil,  076, BRA, BR
+Brasil,  076, BRA, BR
+#British Indian Ocean Territory, 086, IOT, IO
+#Brunei Darussalam, 096, BRN, BN
+Brunei, 096, BRN, BN
+Bulgaria,  100, BGR, BG
+Burkina, 854, BFA, BF
+BurkinaFaso, 854, BFA, BF
+Burundi, 108, BDI, BI
+Cambodia, 116, KHM, KH
+Cameroon, 120, CMR, CM
+Canada, 124,  CAN, CA
+Cape Verde, 132, CPV, CV
+Cayman Islands, 136, CYM, KY
+Central African Republic, 140,  CAF, CF
+Chad, 148, TCD, TD
+Chile, 152, CHL, CL
+China, 156,  CHN, CN
+Christmas Island, 162, CXR, CX
+Cocos (Keeling) Islands, 166, CCK, CC
+Colombia, 170,  COL, CO
+Comoros, 174, COM, KM
+Congo, 178, COG, CG
+Congo (the Democratic Republic of the), 180,  COD, CD
+Cook Islands, 184, COK, CK
+Costa Rica, 188, CRI, CR
+Côte d'Ivoire, 384,  CIV, CI
+Ivory Coast, 384, CIV, CI
+Croatia, 191, HRV, HR
+Cuba, 192, CUB, CU
+Cyprus, 196,  CYP, CY
+#Czech Republic, 203, CZE, CZ
+Czech Republic, 203, CZE, CS
+Denmark, 208, DNK, DK
+Djibouti, 262, DJI, DJ
+Dominica,  212, DMA, DM
+Dominican Republic, 214, DOM, DO
+Ecuador, 218, ECU,  EC
+Egypt, 818, EGY, EG
+El Salvador, 222, SLV, SV
+#Equatorial Guinea, 226,  GNQ, GQ
+Eritrea, 232, ERI, ER
+Estonia, 233, EST, EE
+Ethiopia, 231,  ETH, ET
+#Falkland Islands (Malvinas),  238, FLK, FK
+#Faulkland Islands, 238, FLK, FK
+Faroe Islands, 234, FRO, FO
+Fiji, 242, FJI, FJ
+Finland,  246, FIN, FI
+France, 250, FRA, FR
+French Guiana, 254, GUF, GF
+French Polynesia,  258, PYF, PF
+French Southern Territories, 260, ATF, TF
+Gabon, 266, GAB,  GA
+Gambia, 270, GMB, GM
+Gambia The, 270, GMB, GM
+Georgia, 268, GEO, GE
+Germany, 276,  DEU, DE
+Ghana, 288, GHA, GH
+Gibraltar, 292, GIB, GI
+Greece, 300,  GRC, GR
+Greenland, 304, GRL, GL
+Grenada, 308, GRD, GD
+Guadeloupe, 312,  GLP, GP
+Guam, 316, GUM, GU
+Guatemala, 320, GTM, GT
+Guernsey, 831,  GGY, GG
+#Guinea, 324, GIN, GN
+#Guinea Bissau, 624, GNB, GW
+#Guinea-Bissau, 624, GNB, GW
+Guyana, 328,  GUY, GY
+Haiti,  332, HTI, HT
+Heard Island and McDonald Islands, 334, HMD, HM
+Holy See (Vatican City State), 336, VAT, VA
+Honduras,  340, HND, HN
+Hong Kong, 344, HKG, HK
+Hungary, 348, HUN, HU
+Iceland, 352, ISL, IS
+India, 356, IND, IN
+Indonesia, 360,  IDN, ID
+#Iran (Islamic Republic of), 364, IRN, IR
+Iran, 364, IRN, IR
+Iraq, 368, IRQ, IQ
+#Irak, 368, IRQ, IQ
+Ireland, 372,  IRL, IE
+Isle of Man, 833, IMN, IM
+Israel, 376, ISR, IL
+Italy, 380,  ITA, IT
+Jamaica,  388, JAM, JM
+Japan, 392, JPN, JP
+Jersey, 832, JEY, JE
+Jordan,  400, JOR, JO
+Kazakhstan, 398, KAZ, KZ
+Kenya, 404, KEN, KE
+Kiribati, 296, KIR, KI
+#Korea (Democratic People's Republic of), 408, PRK, KP
+North Korea, 408, PRK,KP
+#Korea (Republic of), 410,  KOR, KR
+South Korea, 410, KOR, KR
+Kuwait, 414, KWT, KW
+Kyrgyzstan, 417, KGZ, KG
+#Lao People's Democratic Republic, 418, LAO, LA
+Laos, 418, LAO, LA
+Latvia,  428, LVA, LV
+Lebanon, 422, LBN, LB
+Lesotho, 426, LSO, LS
+Liberia,  430, LBR, LR
+#Libyan Arab Jamahiriya, 434, LBY, LY
+Libya, 434, LBY, LY
+Liechtenstein, 438, LIE, LI
+Lithuania,  440, LTU, LT
+//Luxembourg, 442, LUX, LU
+Luxembourg, 442, LUX, LX
+#Macao, 446, MAC,  MO
+Macau, 446, MAC, MO
+#Macedonia (the Former Yugoslav Republic of), 807, MKD, MK
+Macedonia, 807, MKD, MK
+Makedonija, 807, MKD, MK
+Madagascar, 450, MDG, MG
+Malawi, 454,  MWI, MW
+Malaysia, 458, MYS, MY
+Maldives, 462, MDV, MV
+Mali, 466,  MLI, ML
+Malta, 470, MLT, MT
+Marshall Islands, 584, MHL, MH
+Martinique, 474,  MTQ, MQ
+Mauritania, 478, MRT, MR
+Mauritius, 480, MUS, MU
+Mayotte, 175,  MYT, YT
+Mexico, 484, MEX, MX
+Micronesia (Federated States of), 583, FSM, FM
+Moldova, 498,  MDA, MD
+Moldovia, 498, MDA, MD
+Moldavia, 498, MDA, MD
+Monaco, 492, MCO, MC
+Mongolia, 496, MNG, MN
+Montenegro, 499,  CGR, &#160;?
+Montserrat, 500, MSR, MS
+Morocco, 504, MAR, MA
+Mozambique, 508,  MOZ, MZ
+Myanmar, 104, MMR, MM
+Myanmar (Burma), 104, MMR, MM
+Namibia, 516, NAM, NA
+Nauru, 520, NRU, NR
+Nepal,  524, NPL, NP
+Netherlands, 528, NLD, NL
+Netherlands Antilles, 530, ANT, AN
+New Caledonia,  540, NCL, NC
+New Zealand, 554, NZL, NZ
+Nicaragua, 558, NIC, NI
+Niger,  562, NER, NE
+Nigeria, 566, NGA, NG
+Niue, 570, NIU, NU
+Norfolk Island,  574, NFK, NF
+Northern Mariana Islands, 580, MNP, MP
+Norway, 578, NOR, NO
+Oman, 512, OMN, OM
+Pakistan, 586, PAK, PK
+Palau, 585, PLW, PW
+Palestinian Territory (Occupied), 275,  PSE, PS
+Panama, 591, PAN, PA
+Papua New Guinea, 598, PNG, PG
+Paraguay, 600,  PRY, PY
+Peru, 604, PER, PE
+Philippines, 608, PHL, PH
+Pitcairn, 612,  PCN, PN
+Poland, 616, POL, PL
+Portugal, 620, PRT, PT
+Puerto Rico, 630,  PRI, PR
+Qatar,  634, QAT, QA
+Réunion, 638, REU, RE
+Romania, 642, ROU,  RO
+Russia, 643, RUS, RU 
+#Russian Federation, 643, RUS, RU
+Rwanda, 646, RWA, RW
+Saint Helena, 654, SHN, SH
+Saint Kitts and Nevis,  659, KNA, KN
+Saint Lucia, 662, LCA, LC
+Saint Pierre and Miquelon, 666, SPM, PM
+Saint Vincent and the Grenadines,  670, VCT, VC
+Samoa, 882, WSM, WS
+San Marino, 674, SMR, SM
+Sao Tome and Principe,  678, STP, ST
+Saudi Arabia, 682, SAU, SA
+Senegal, 686, SEN, SN
+Serbia,  688, SRB, &#160;?
+#Yugoslavia,  688, SRB, RS
+Yugoslavia,  688, SRB, YU
+Seychelles, 690, SYC, SC
+Sierra Leone, 694, SLE, SL
+Singapore,  702, SGP, SG
+Slovakia, 703, SVK, SK
+Slovenia, 705, SVN, SI
+Solomon Islands,  090, SLB, SB
+Somalia, 706, SOM, SO
+South Africa, 710, ZAF, ZA
+South Georgia and the South Sandwich Islands,  239, SGS, GS
+Spain, 724, ESP, ES
+Sri Lanka, 144, LKA, LK
+Sudan,  736, SDN, SD
+Suriname, 740, SUR, SR
+Svalbard and Jan Mayen, 744, SJM, SJ
+Swaziland,  748, SWZ, SZ
+Sweden, 752, SWE, SE
+Switzerland, 756, CHE, CH
+#Syrian Arab Republic,  760, SYR, SY
+Syria,  760, SYR, SY
+Taiwan (Province of China), 158, TWN, TW
+Tajikistan, 762, TJK, TJ
+#Tanzania (United Republic of), 834, TZA, TZ
+Tanzania, 834, TZA, TZ
+Tanzania United Republic, 834, TZA, TZ
+Thailand, 764, THA, TH
+Timor-Leste, 626,  TLS, TL
+Togo, 768, TGO, TG
+Tokelau, 772, TKL, TK
+Tonga, 776,  TON, TO
+Trinidad and Tobago, 780, TTO, TT
+Tunisia, 788, TUN, TN
+Turkey, 792,  TUR, TR
+Turkmenistan, 795, TKM, TM
+Turks and Caicos Islands, 796, TCA, TC
+Tuvalu, 798,  TUV, TV
+Uganda,  800, UGA, UG
+Ukraine, 804, UKR, UA
+United Arab Emirates, 784, ARE, AE
+UnitedArabEmirates, 784, ARE, AE
+#United Kingdom,  826, GBR,GB
+United Kingdom,  826, GBR,GB
+United States, 840, USA, US
+United States Minor Outlying Islands, 581, UMI, UM
+Uruguay,  858, URY, UY
+Uzbekistan, 860, UZB, UZ
+Vanuatu, 548, VUT, VU
+Venezuela, 862, VEN, VE
+#Viet Nam, 704, VNM, VN
+Vietnam, 704, VNM, VN
+Virgin Islands (British), 092,  VGB, VG
+Virgin Islands (U.S.), 850, VIR, VI
+Wallis and Futuna, 876, WLF, WF
+Western Sahara, 732, ESH, EH
+Yemen, 887, YEM, YE
+Zambia, 894, ZMB, ZM
+Zaire, 180, ZAR, ZR
+Zimbabwe, 716, ZWE, ZW
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/ISO3166-2/ISO3166_2_list.txt b/org.eclipse.stem.utility/parameters/ISO3166-2/ISO3166_2_list.txt
new file mode 100644
index 0000000..538d383
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISO3166-2/ISO3166_2_list.txt
@@ -0,0 +1,4058 @@
+PR	;	PR-72001	;	Adjuntas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72003	;	Aguada 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72005	;	Aguadilla 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72007	;	Aguas Buenas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72009	;	Aibonito 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72011	;	Añasco 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72013	;	Arecibo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72015	;	Arroyo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72017	;	Barceloneta 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72019	;	Barranquitas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72021	;	Bayamón 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72023	;	Cabo Rojo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72025	;	Caguas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72027	;	Camuy 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72029	;	Canóvanas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72031	;	Carolina 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72033	;	Cataño 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72035	;	Cayey 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72037	;	Ceiba 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72039	;	Ciales 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72041	;	Cidra 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72043	;	Coamo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72045	;	Comerío 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72047	;	Corozal 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72049	;	Culebra 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72051	;	Dorado 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72053	;	Fajardo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72054	;	Florida 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72055	;	Guánica 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72057	;	Guayama 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72059	;	Guayanilla 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72061	;	Guaynabo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72063	;	Gurabo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72065	;	Hatillo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72067	;	Hormigueros 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72069	;	Humacao 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72071	;	Isabela 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72073	;	Jayuya 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72075	;	Juana Díaz 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72077	;	Juncos 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72079	;	Lajas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72081	;	Lares 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72083	;	Las Marías 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72085	;	Las Piedras 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72087	;	Loíza 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72089	;	Luquillo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72091	;	Manatí 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72093	;	Maricao 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72095	;	Maunabo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72097	;	Mayagüez 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72099	;	Moca 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72101	;	Morovis 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72103	;	Naguabo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72105	;	Naranjito 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72107	;	Orocovis 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72109	;	Patillas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72111	;	Peñuelas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72113	;	Ponce 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72115	;	Quebradillas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72117	;	Rincón 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72119	;	Río Grande 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72121	;	Sabana Grande 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72123	;	Salinas 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72125	;	San Germán 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72127	;	San Juan 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72129	;	San Lorenzo 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72131	;	San Sebastián 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72133	;	Santa Isabel 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72135	;	Toa Alta 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72137	;	Toa Baja 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72139	;	Trujillo Alto 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72141	;	Utuado 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72143	;	Vega Alta 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72145	;	Vega Baja 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72147	;	Vieques 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72149	;	Villalba 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72151	;	Yabucoa 	;	2	;	0	;	0	;	municipality
+PR	;	PR-72153	;	Yauco 	;	2	;	0	;	0	;	municipality
+US;US-AL;Alabama;1;0;0;state
+US;US-AK;Alaska;2;0;0;state
+US;US-AZ;Arizona;4;0;0;state
+US;US-AR;Arkansas;5;0;0;state
+US;US-DUMMY1;Arl;0;0;0;state
+US;US-CA;California;6;0;0;state
+US;US-DUMMY2;Cam;0;0;0;state
+US;US-CO;Colorado;8;0;0;state
+US;US-CT;Connecticut;9;0;0;state
+US;US-DE;Delaware;10;0;0;state
+US;US-FL;Florida;12;0;0;state
+US;US-GA;Georgia;13;0;0;state
+US;US-DUMMY3;Gep;0;0;0;state
+US;US-HI;Hawaii;15;0;0;state
+US;US-ID;Idaho;16;0;0;state
+US;US-IL;Illinois;17;0;0;state
+US;US-IN;Indiana;18;0;0;state
+US;US-IA;Iowa;19;0;0;state
+US;US-KS;Kansas;20;0;0;state
+US;US-KY;Kentucky;21;0;0;state
+US;US-LA;Louisiana;22;0;0;state
+US;US-ME;Maine;23;0;0;state
+US;US-MD;Maryland;24;0;0;state
+US;US-MA;Massachusetts;25;0;0;state
+US;US-MI;Michigan;26;0;0;state
+US;US-MN;Minnesota;27;0;0;state
+US;US-MS;Mississippi;28;0;0;state
+US;US-MO;Missouri;29;0;0;state
+US;US-MT;Montana;30;0;0;state
+US;US-NE;Nebraska;31;0;0;state
+US;US-NV;Nevada;32;0;0;state
+US;US-NH;New Hampshire;33;0;0;state
+US;US-NJ;New Jersey;34;0;0;state
+US;US-NM;New Mexico;35;0;0;state
+US;US-NY;New York;36;0;0;state
+US;US-NC;North Carolina;37;0;0;state
+US;US-ND;North Dakota;38;0;0;state
+US;US-OH;Ohio;39;0;0;state
+US;US-OK;Oklahoma;40;0;0;state
+US;US-OR;Oregon;41;0;0;state
+US;US-PA;Pennsylvania;42;0;0;state
+US;US-RI;Rhode Island;44;0;0;state
+US;US-SC;South Carolina;45;0;0;state
+US;US-SD;South Dakota;46;0;0;state
+US;US-TN;Tennessee;47;0;0;state
+US;US-TX;Texas;48;0;0;state
+US;US-UT;Utah;49;0;0;state
+US;US-VT;Vermont;50;0;0;state
+US;US-VA;Virginia;51;0;0;state
+US;US-DUMMY4;Vis;52;0;0;state
+US;US-WA;Washington;53;0;0;state
+US;US-WV;West Virginia;54;0;0;state
+US;US-WI;Wisconsin;55;0;0;state
+US;US-WY;Wyoming;56;0;0;state
+US;US-DC;District of Columbia;11;0;0;district
+#US;US-AS;American Samoa;0;0;0;outlying area
+#US;US-GU;Guam;0;0;0;outlying area
+#US;US-MP;Northern Mariana Islands;0;0;0;outlying area
+US;US-PR;Puerto Rico;72;0;0;outlying area
+#US;US-UM;United States Minor;0;0;0;outlying area
+#US;US-VI;Virgin Islands, U.S.;0;0;0;outlying area
+PR;PR-TR;Puerto Rico;0;0;0;outlying area
+BR;BR-DF;Distrito Federal;0;0;0;federal district
+BR;BR-AC;Acre;0;0;0;state
+BR;BR-AL;Alagoas;0;0;0;state
+BR;BR-AP;Amapa;0;0;0;state
+BR;BR-AM;Amazonas;0;0;0;state
+BR;BR-BA;Bahia;0;0;0;state
+BR;BR-CE;Ceara;0;0;0;state
+BR;BR-ES;Espiritu Santo;0;0;0;state
+BR;BR-GO;Goias;0;0;0;state
+BR;BR-MA;Maranhao;0;0;0;state
+BR;BR-MT;Mato Grosso;0;0;0;state
+BR;BR-MS;Mato Grosso do Sul;0;0;0;state
+BR;BR-MG;Minas Gerais;0;0;0;state
+BR;BR-PA;Para;0;0;0;state
+BR;BR-PB;Paraiba;0;0;0;state
+BR;BR-PR;Parana;0;0;0;state
+BR;BR-PE;Pernambuco;0;0;0;state
+BR;BR-RJ;Rio de Janeiro;0;0;0;state
+BR;BR-RN;Rio Grande do Norte;0;0;0;state
+BR;BR-RS;Rio Grande do Sul [Rio Graande do sul] [Rio grnde do sul] ;0;0;0;state
+BR;BR-RO;Rondonia;0;0;0;state
+BR;BR-RR;Roraima;0;0;0;state
+BR;BR-SC;Santa Catarina;0;0;0;state
+BR;BR-SP;Sao Paulo;0;0;0;state
+BR;BR-SE;Sergipe;0;0;0;state
+BR;BR-TO;Tocantins;0;0;0;state
+GT;GT-AV;Alta Verapaz;0;0;0
+GT;GT-BV;Baja Verapaz;0;0;0
+GT;GT-CM;Chimaltenango;0;0;0
+GT;GT-CQ;Chiquimula;0;0;0
+GT;GT-PR;El Progreso;0;0;0
+GT;GT-ES;Escuintla;0;0;0
+GT;GT-GU;Guatemala;0;0;0
+GT;GT-HU;Huehuetenango;0;0;0
+GT;GT-IZ;Izabal;0;0;0
+GT;GT-JA;Jalapa;0;0;0
+GT;GT-JU;Jutiapa;0;0;0
+GT;GT-PE;Peten;0;0;0
+GT;GT-QZ;Quetzaltenango;0;0;0
+GT;GT-QC;Quiche;0;0;0
+GT;GT-RE;Retalhuleu;0;0;0
+GT;GT-SA;Sacatepequez;0;0;0
+GT;GT-SM;San Marcos;0;0;0
+GT;GT-SR;Santa Rosa;0;0;0
+GT;GT-SO;Solola;0;0;0
+GT;GT-SU;Suchitepequez;0;0;0
+GT;GT-TO;Totonicapan;0;0;0
+GT;GT-ZA;Zacapa;0;0;0
+GW;GW-BS;Bissau;0;0;0autonomous sector
+GW;GW-BA;Bafata;0;0;L;region
+GW;GW-BM;Biombo;0;0;N;region
+GW;GW-BL;Bolama;0;0;S;region
+GW;GW-CA;Cacheu;0;0;N;region
+GW;GW-GA;Gabu;0;0;L;region
+GW;GW-OI;Oio;0;0;N;region
+GW;GW-QU;Quinara;0;0;S;region
+GW;GW-TO;Tombali;0;0;S;region
+HN;HN-AT;Atlantida;0;0;0
+HN;HN-CL;Colon;0;0;0
+HN;HN-CM;Comayagua;0;0;0
+HN;HN-CP;Copan;0;0;0
+HN;HN-CR;Cortes;0;0;0
+HN;HN-CH;Choluteca;0;0;0
+HN;HN-EP;El Paraiso;0;0;0
+HN;HN-FM;Francisco Morazan;0;0;0
+HN;HN-GD;Gracias a Dios;0;0;0
+HN;HN-IN;Intibuca;0;0;0
+HN;HN-IB;Islas de la Bahia;0;0;0
+HN;HN-LP;La Paz;0;0;0
+HN;HN-LE;Lempira;0;0;0
+HN;HN-OL;Olancho;0;0;0
+HN;HN-SB;Santa Barbara;0;0;0
+HN;HN-VA;Valle;0;0;0
+HN;HN-YO;Yoro;0;0;0
+HR;HR-2;Grad Zagreb;0;0;0city
+HR;HR-07;Bjelovarsko-bilogorska zupanija;0;0;county
+HR;HR-2;Brodsko-posavska zupanija;0;0;county
+HR;HR-9;Dubrovako-neretvanska zupanija;0;0;county
+GY;GY-BA;Barima-Waini;0;0;0
+HR;HR-8;Istarska zupanija;0;0;county
+HR;HR-04;Karlovaka zupanija;0;0;county
+HR;HR-06;Koprivniko-krizeva ka zupanija;0;0;county
+HR;HR-02;Krapinsko-zagorska zupanija;0;0;county
+HR;HR-09;Liko-senjska zupanija;0;0;county
+HR;HR-20;Meimurska zupanija;0;0;county
+HR;HR-4;Osjeko-baranjska zupanija;0;0;county
+HR;HR-;Pozesko-slavonska zupanija;0;0;county
+HR;HR-08;Primorsko-goranska zupanija;0;0;county
+HR;HR-03;Sisako-moslavaka zupanija;0;0;county
+HR;HR-7;Splitsko-dalmatinska zupanija;0;0;county
+HR;HR-5;sibensko-kninska zupanija;0;0;county
+HR;HR-05;Varazdinska zupanija;0;0;county
+HR;HR-0;Virovitiko-podravska zupanija;0;0;county
+HR;HR-6;Vukovarsko-srijemska zupanija;0;0;county
+HR;HR-3;Zadarska zupanija;0;0;county
+HR;HR-0;Zagrebaka zupanija;0;0;county
+HT;HT-AR;Artibonite;0;0;0
+HT;HT-CE;Centre;0;0;0
+HT;HT-GA;Grande-Anse;0;0;0
+HT;HT-ND;Nord;0;0;0
+HT;HT-NE;Nord-Est;0;0;0
+HT;HT-NO;Nord-Ouest;0;0;0
+HT;HT-OU;Ouest;0;0;0
+HT;HT-SD;Sud;0;0;0
+HT;HT-SE;Sud-Est;0;0;0
+HU;HU-BU;Budapest;0;0;0;capital city
+HU;HU-BK;Bacs-Kiskun;0;0;county
+HU;HU-BA;Baranya;0;0;county
+HU;HU-BE;Bekes;0;0;county
+HU;HU-BZ;Borsod-Abauj-Zemplen;0;0;county
+HU;HU-CS;Csongrad;0;0;county
+HU;HU-FE;Fejer;0;0;county
+HU;HU-GS;Gyr-Moson-Sopron;0;0;county
+HU;HU-HB;Hajdu-Bihar;0;0;county
+HU;HU-HE;Heves;0;0;county
+HU;HU-JN;Jasz-Nagykun-Szolnok;0;0;county
+HU;HU-KE;Komarom-Esztergom;0;0;county
+HU;HU-NO;Nograd;0;0;county
+HU;HU-PE;Pest;0;0;county
+HU;HU-SO;Somogy;0;0;county
+HU;HU-SZ;Szabolcs-Szatmar-Bereg;0;0;county
+HU;HU-TO;Tolna;0;0;county
+HU;HU-VA;Vas;0;0;county
+HU;HU-VE;Veszprem;0;0;county
+HU;HU-ZA;Zala;0;0;county
+HU;HU-BC;Bekescsaba;0;0;0;city of county right
+HU;HU-DE;Debrecen;0;0;0;city of county right
+HU;HU-DU;Dunaujvaros;0;0;0;city of county right
+HU;HU-EG;Eger;0;0;0;city of county right
+HU;HU-GY;Gyr;0;0;0;city of county right
+HU;HU-HV;Hodmezvasarhely;0;0;0;city of county right
+HU;HU-KV;Kaposvar;0;0;0;city of county right
+HU;HU-KM;Kecskemet;0;0;0;city of county right
+HU;HU-MI;Miskolc;0;0;0;city of county right
+HU;HU-NK;Nagykanizsa;0;0;0;city of county right
+HU;HU-NY;Nyiregyhaza;0;0;0;city of county right
+HU;HU-PS;Pecs;0;0;0;city of county right
+HU;HU-ST;Salgotarjan;0;0;0;city of county right
+HU;HU-SN;Sopron;0;0;0;city of county right
+HU;HU-SD;Szeged;0;0;0;city of county right
+HU;HU-SF;Szekesfehervar;0;0;0;city of county right
+HU;HU-SS;Szekszard;0;0;0;city of county right
+HU;HU-SK;Szolnok;0;0;0;city of county right
+HU;HU-SH;Szombathely;0;0;0;city of county right
+HU;HU-TB;Tatabanya;0;0;0;city of county right
+HU;HU-VM;Veszprem;0;0;0;city of county right
+HU;HU-ZE;Zalaegerszeg;0;0;0;city of county right
+ID;ID-BA;Bali;0;0;NU;province
+ID;ID-BB;Bangka Belitung;0;0;SM;province
+ID;ID-BT;Banten;0;0;JW;province
+ID;ID-BE;Bengkulu;0;0;SM;province
+ID;ID-GO;Gorontalo;0;0;SL;province
+ID;ID-JA;Jambi;0;0;SM;province
+ID;ID-JB;Jawa Barat;0;0;JW;province
+ID;ID-JT;Jawa Tengah;0;0;JW;province
+ID;ID-JI;Jawa Timur;0;0;JW;province
+ID;ID-KB;Kalimantan Barat;0;0;KA;province
+ID;ID-KS;Kalimantan Selatan;0;0;KA;province
+ID;ID-KT;Kalimantan Tengah;0;0;KA;province
+ID;ID-KI;Kalimantan Timur;0;0;KA;province
+ID;ID-LA;Lampung;0;0;SM;province
+ID;ID-MA;Maluku;0;0;MA;province
+ID;ID-MU;Maluku Utara;0;0;MA;province
+ID;ID-NB;Nusa Tenggara Barat;0;0;NU;province
+ID;ID-NT;Nusa Tenggara Timur;0;0;NU;province
+ID;ID-PA;Papua;0;0;IJ;province
+ID;ID-RI;Riau;0;0;SM;province
+ID;ID-SN;Sulawesi Selatan;0;0;SL;province
+ID;ID-ST;Sulawesi Tengah;0;0;SL;province
+ID;ID-SG;Sulawesi Tenggara;0;0;SL;province
+ID;ID-SA;Sulawesi Utara;0;0;SL;province
+ID;ID-SB;Sumatera Barat;0;0;SM;province
+ID;ID-SS;Sumatera Selatan;0;0;SM;province
+ID;ID-SU;Sumatera Utara;0;0;SM;province
+ID;ID-JK;Jakarta Raya;0;0;JW;special district
+ID;ID-AC;Aceh;0;0;SM;autonomous province
+ID;ID-YO;Yogyakarta;0;0;JW;special region
+IE;IE-CW;Carlow;Ceatharlach;0;L
+IE;IE-CN;Cavan;An Cabhan;0;U
+IE;IE-CE;Clare;An Clar;0;M
+IE;IE-C;Cork;Corcaigh;0;M
+IE;IE-DL;Donegal;Dun na nGall;0;U
+IE;IE-D;Dublin;Baile atha Cliath;0;L
+IE;IE-G;Galway;Gaillimh;0;C
+IE;IE-KY;Kerry;Ciarrai;0;M
+IE;IE-KE;Kildare;Cill Dara;0;L
+IE;IE-KK;Kilkenny;Cill Chainnigh;0;L
+IE;IE-LS;Laois;Laois;0;L
+IE;IE-LM;Leitrim;Liatroim;0;C
+IE;IE-LK;Limerick;Luimneach;0;M
+IE;IE-LD;Longford;An Longfort;0;L
+IE;IE-LH;Louth;Lu;0;L
+IE;IE-MO;Mayo;Maigh Eo;0;C
+IE;IE-MH;Meath;An Mhi;0;L
+IE;IE-MN;Monaghan;Muineachan;0;U
+IE;IE-OY;Offaly;Uibh Fhaili;0;L
+IE;IE-RN;Roscommon;Ros Comain;0;C
+IE;IE-SO;Sligo;Sligeach;0;C
+IE;IE-TA;Tipperary;Tiobraid arann;0;M
+IE;IE-WD;Waterford;Port Lairge;0;M
+IE;IE-WH;Westmeath;An Iarmhi;0;L
+IE;IE-WX;Wexford;Loch Garman;0;L
+IE;IE-WW;Wicklow;Cill Mhantain;0;L
+IL;IL-D;HaDarom;El Jacob;0;0
+IL;IL-M;HaMerkaz;El Awsa;0;0
+IL;IL-Z;Ha Zafon;Esh Shamali;0;0
+IL;IL-HA;Haifa;?eif?;0;0
+IL;IL-TA;Tel-Aviv;Tell Ab?b;0;0
+IL;IL-JM;Yerushalayim;Al Quds;0;0
+IN;IN-AP;Andhra Pradesh;0;0;0state
+IN;IN-AR;Arunachal Pradesh;0;0;0state
+IN;IN-AS;Assam;0;0;0state
+IN;IN-BR;Bihar;0;0;0state
+IN;IN-CT;Chhattasgarh;0;0;0state
+IN;IN-GA;Goa;0;0;0state
+IN;IN-GJ;Gujarat;0;0;0state
+IN;IN-HR;Haryana;0;0;0state
+IN;IN-HP;Himachal Pradesh;0;0;0state
+IN;IN-JK;Jammu and Kashmir;0;0;0state
+IN;IN-JH;Jharkhand;0;0;0state
+IN;IN-KA;Karnataka;0;0;0state
+IN;IN-KL;Kerala;0;0;0state
+IN;IN-MP;Madhya Pradesh;0;0;0state
+IN;IN-MH;Maharashtra;0;0;0state
+IN;IN-MN;Manipur;0;0;0state
+IN;IN-ML;Meghalaya;0;0;0state
+IN;IN-MZ;Mizoram;0;0;0state
+IN;IN-NL;Nagaland;0;0;0state
+IN;IN-OR;Orissa;0;0;0state
+IN;IN-PB;Punjab;0;0;0state
+IN;IN-RJ;Rajasthan;0;0;0state
+IN;IN-SK;Sikkim;0;0;0state
+IN;IN-TN;Tamil Nadu;0;0;0state
+IN;IN-TR;Tripura;0;0;0state
+IN;IN-UL;Uttaranchal;0;0;0state
+IN;IN-UP;Uttar Pradesh;0;0;0state
+IN;IN-WB;West Bengal;0;0;0state
+IN;IN-AN;Andaman and Nicobar Islands;0;0;0union territory
+IN;IN-CH;Chandigarh;0;0;0union territory
+IN;IN-DN;Dadra and Nagar Haveli;0;0;0union territory
+IN;IN-DD;Daman and Diu;0;0;0union territory
+IN;IN-DL;Delhi;0;0;0union territory
+IN;IN-LD;Lakshadweep;0;0;0union territory
+IN;IN-PY;Pondicherry;0;0;0union territory
+IQ;IQ-AN;Al Anbr;0;0;0
+IQ;IQ-BA;Al Barah;0;0;0
+IQ;IQ-MU;Al Muthanna;0;0;0
+IQ;IQ-QA;Al Qdisyah;0;0;0
+IQ;IQ-NA;An Najaf;0;0;0
+IQ;IQ-AR;Arbl;0;0;0
+IQ;IQ-SU;As Sulaymnyah;0;0;0
+IQ;IQ-TS;At Tamm;0;0;0
+IQ;IQ-BB;Bbil;0;0;0
+IQ;IQ-BG;Baghdd;0;0;0
+IQ;IQ-DA;Dahk;0;0;0
+IQ;IQ-DQ;Dh Qr;0;0;0
+IQ;IQ-DI;Diyla;0;0;0
+IQ;IQ-KA;Karbal;0;0;0
+IQ;IQ-MA;Maysn;0;0;0
+IQ;IQ-NI;Nnawa;0;0;0
+IQ;IQ-SD;al ad Dn;0;0;0
+IQ;IQ-WA;Wsi;0;0;0
+IR;IR-03;Ardabl;0;0;0
+IR;IR-02;zarbyjn-e Gharb;0;0;0
+IR;IR-0;zarbyjn-e Sharq;0;0;0
+IR;IR-06;Bshehr;0;0;0
+IR;IR-08;Chahr Mahll va Bakhtr;0;0;0
+IR;IR-04;Efahn;0;0;0
+IR;IR-4;Frs;0;0;0
+IR;IR-9;Gln;0;0;0
+IR;IR-27;Golestn;0;0;0
+IR;IR-24;Hamadn;0;0;0
+IR;IR-23;Hormozgn;0;0;0
+IR;IR-05;lm;0;0;0
+IR;IR-5;Kermn;0;0;0
+IR;IR-7;Kermnshh;0;0;0
+IR;IR-09;Khorsn;0;0;0
+IR;IR-10;Khzestn;0;0;0
+IR;IR-8;Kohklyeh va Byer Ahmad;0;0;0
+IR;IR-6;Kordestn;0;0;0
+GQ;GQ-C;Region Continental;0;0;region
+GQ;GQ-I;Region Insular;0;0;region
+GQ;GQ-AN;Annobon;0;0;I;province
+GQ;GQ-BN;Bioko Norte;0;0;I;province
+GQ;GQ-BS;Bioko Sur;0;0;I;province
+GQ;GQ-CS;Centro Sur;0;0;C;province
+GQ;GQ-KN;Kie-Ntem;0;0;C;province
+GQ;GQ-LI;Litoral;0;0;C;province
+GQ;GQ-WN;Wele-Nzas;0;0;C;province
+GR;GR-3;Achaia;0;0;VII;department
+GR;GR-0;Aitolia-Akarnania;0;0;VII;department
+GR;GR-;Argolis;0;0;X;department
+GR;GR-2;Arkadia;0;0;X;department
+GR;GR-3;Arta;0;0;IV;department
+GR;GR-A;Attiki;0;0;IX;department
+GR;GR-64;Chalkidiki;0;0;II;department
+GR;GR-94;Chania;0;0;XIII;department
+GR;GR-85;Chios;0;0;XI;department
+GR;GR-8;Dodekanisos;0;0;XII;department
+GR;GR-52;Drama;0;0;I;department
+GR;GR-7;Evros;0;0;I;department
+GR;GR-05;Evrytania;0;0;VIII;department
+GR;GR-04;Evvoia;0;0;VIII;department
+GR;GR-63;Florina;0;0;III;department
+GR;GR-07;Fokis;0;0;VIII;department
+GR;GR-06;Fthiotis;0;0;VIII;department
+GR;GR-5;Grevena;0;0;III;department
+GR;GR-4;Ileia;0;0;VII;department
+GR;GR-53;Imathia;0;0;II;department
+GR;GR-33;Ioannina;0;0;IV;department
+GR;GR-9;Irakleion;0;0;XIII;department
+GR;GR-4;Karditsa;0;0;V;department
+GR;GR-56;Kastoria;0;0;III;department
+GR;GR-55;Kavalla;0;0;I;department
+GR;GR-23;Kefallinia;0;0;VI;department
+GR;GR-22;Kerkyra;0;0;VI;department
+GR;GR-57;Kilkis;0;0;II;department
+GR;GR-5;Korinthia;0;0;X;department
+GR;GR-58;Kozani;0;0;III;department
+GR;GR-82;Kyklades;0;0;XII;department
+GR;GR-6;Lakonia;0;0;X;department
+GR;GR-42;Larisa;0;0;V;department
+GR;GR-92;Lasithion;0;0;XIII;department
+GR;GR-24;Lefkas;0;0;VI;department
+GR;GR-83;Lesvos;0;0;XI;department
+GR;GR-43;Magnisia;0;0;V;department
+GR;GR-7;Messinia;0;0;X;department
+GR;GR-59;Pella;0;0;II;department
+GR;GR-6;Pieria;0;0;II;department
+GR;GR-34;Preveza;0;0;IV;department
+GR;GR-93;Rethymnon;0;0;XIII;department
+GR;GR-73;Rodopi;0;0;I;department
+GR;GR-84;Samos;0;0;XI;department
+GR;GR-62;Serrai;0;0;II;department
+GR;GR-32;Thesprotia;0;0;IV;department
+GR;GR-54;Thessaloniki;0;0;II;department
+GR;GR-44;Trikala;0;0;V;department
+GR;GR-03;Voiotia;0;0;VIII;department
+GR;GR-72;Xanthi;0;0;I;department
+GR;GR-2;Zakynthos;0;0;VI;department
+GR;GR-69;Agio Oros;0;0;0self-governed part
+IR;IR-20;Lorestn;0;0;0
+IR;IR-22;Markaz;0;0;0
+IR;IR-2;Mzandarn;0;0;0
+IR;IR-28;Qazvn;0;0;0
+IR;IR-26;Qom;0;0;0
+IR;IR-2;Semnn;0;0;0
+IR;IR-3;Sstn va Balchestn;0;0;0
+IR;IR-07;Tehrn;0;0;0
+IR;IR-25;Yazd;0;0;0
+IR;IR-11;Zanjn;0;0;0
+IS;IS-7;Austurland;0;0;0
+IS;IS-;Hofuoborgarsvaoi utan Reykjavikur;0;0;0
+IS;IS-6;Norourland eystra;0;0;0
+IS;IS-5;Norourland vestra;0;0;0
+IS;IS-0;Reykjavik;0;0;0
+IS;IS-8;Suourland;0;0;0
+IS;IS-2;Suournes;0;0;0
+IS;IS-4;Vestfiroir;0;0;0
+IS;IS-3;Vesturland;0;0;0
+IT;IT-AG;Agrigento;0;0;82
+IT;IT-AL;Alessandria;0;0;2
+IT;IT-AN;Ancona;0;0;57
+IT;IT-AO;Aosta;Aoste;0;23
+IT;IT-AR;Arezzo;0;0;52
+IT;IT-AP;Ascoli Piceno;0;0;57
+IT;IT-AT;Asti;0;0;2
+IT;IT-AV;Avellino;0;0;72
+IT;IT-BA;Bari;0;0;75
+IT;IT-BL;Belluno;0;0;34
+IT;IT-BN;Benevento;0;0;72
+IT;IT-BG;Bergamo;0;0;25
+IT;IT-BI;Biella;0;0;2
+IT;IT-BO;Bologna;0;0;45
+IT;IT-BZ;Bolzano;Bozen ;0;32
+IT;IT-BS;Brescia;0;0;25
+IT;IT-BR;Brindisi;0;0;75
+IT;IT-CA;Cagliari;0;0;88
+IT;IT-CL;Caltanissetta;0;0;82
+IT;IT-CB;Campobasso;0;0;67
+IT;IT-CE;Caserta;0;0;72
+IT;IT-CT;Catania;0;0;82
+IT;IT-CZ;Catanzaro;0;0;78
+IT;IT-CH;Chieti;0;0;65
+IT;IT-CO;Como;0;0;25
+IT;IT-CS;Cosenza;0;0;78
+IT;IT-CR;Cremona;0;0;25
+IT;IT-KR;Crotone;0;0;78
+IT;IT-CN;Cuneo;0;0;2
+IT;IT-EN;Enna;0;0;82
+IT;IT-FE;Ferrara;0;0;45
+IT;IT-FI;Firenze;0;0;52;
+IT;IT-FG;Foggia;0;0;75;
+IT;IT-FO;Forlì;0;0;45;
+IT;IT-FR;Frosinone ;0;0;62;
+IT;IT-GE;Genova;0;0;42;
+IT;IT-GO;Gorizia;0;0;36;
+IT;IT-GR;Grosseto;0;0;52;
+IT;IT-IM;Imperia;0;0;42;
+IT;IT-IS;Isernia;0;0;67;
+IT;IT-AQ;LAquila;0;0;65;
+IT;IT-SP;La Spezia;0;0;42;
+IT;IT-LT;Latina;0;0;62;
+IT;IT-LE;Lecce;0;0;75;
+IT;IT-LC;Lecco;0;0;25;
+IT;IT-LI;Livorno;0;0;52;
+IT;IT-LO;Lodi;0;0;25;
+IT;IT-LU;Lucca;0;0;52;
+IT;IT-MC;Macerata;0;0;57;
+IT;IT-MN;Mantova;0;0;25;
+IT;IT-MS;Massa-Carrara;0;0;52;
+IT;IT-MT;Matera;0;0;77;
+IT;IT-ME;Messina;0;0;82;
+IT;IT-MI;Milano;0;0;25;
+IT;IT-MO;Modena;0;0;45;
+IT;IT-NA;Napoli;0;0;72;
+IT;IT-NO;Novara;0;0;2;
+IT;IT-NU;Nuoro;0;0;88;
+IT;IT-OR;Oristano;0;0;88;
+IT;IT-PD;Padova;0;0;34;
+IT;IT-PA;Palermo;0;0;82;
+IT;IT-PR;Parma;0;0;45;
+IT;IT-PV;Pavia;0;0;25;
+IT;IT-PG;Perugia;0;0;55;
+IT;IT-PS;Pesaro e Urbino;0;0;57;
+IT;IT-PE;Pescara;0;0;65;
+IT;IT-PC;Piacenza;0;0;45;
+IT;IT-PI;Pisa;0;0;52;
+IT;IT-PT;Pistoia;0;0;52;
+IT;IT-PN;Pordenone;0;0;36;
+IT;IT-PZ;Potenza;0;0;77;
+IT;IT-PO;Prato;0;0;52;
+IT;IT-RG;Ragusa;0;0;82;
+IT;IT-RA;Ravenna;0;0;45;
+IT;IT-RC;Reggio Calabria;0;0;78;
+IT;IT-RE;Reggio Emilia;0;0;45;
+IT;IT-RI;Rieti;0;0;62;
+IT;IT-RN;Rimini;0;0;45;
+IT;IT-RM;Roma;0;0;62;
+IT;IT-RO;Rovigo;0;0;34;
+IT;IT-SA;Salerno;0;0;72;
+IT;IT-SS;Sassari;0;0;88;
+IT;IT-SV;Savona;0;0;42;
+IT;IT-SI;Siena;0;0;52;
+IT;IT-SR;Siracusa;0;0;82;
+IT;IT-SO;Sondrio;0;0;25;
+IT;IT-TA;Taranto;0;0;75;
+IT;IT-TE;Teramo;0;0;65;
+IT;IT-TR;Terni;0;0;55;
+IT;IT-TO;Torino;0;0;2;
+IT;IT-TP;Trapani;0;0;82;
+IT;IT-TN;Trento;0;0;32;
+IT;IT-TV;Treviso;0;0;34;
+IT;IT-TS;Trieste;0;0;36;
+IT;IT-UD;Udine;0;0;36;
+IT;IT-VA;Varese;0;0;25;
+IT;IT-VE;Venezia;0;0;34;
+IT;IT-VB;Verbano-Cusio-Ossola;0;0;2;
+IT;IT-VC;Vercelli;0;0;2;
+IT;IT-VR;Verona;0;0;34;
+IT;IT-VV;Vibo Valentia;0;0;78;
+IT;IT-VI;Vicenza;0;0;34;
+IT;IT-VT;Viterbo;0;0;62;
+JM;JM-3;Clarendon;0;0;0
+JM;JM-09;Hanover;0;0;0
+JM;JM-0;Kingston;0;0;0
+JM;JM-2;Manchester;0;0;0
+JM;JM-04;Portland;0;0;0
+JM;JM-02;Saint Andrew;0;0;0
+JM;JM-06;Saint Ann;0;0;0
+JM;JM-4;Saint Catherine;0;0;0
+JM;JM-;Saint Elizabeth;0;0;0
+JM;JM-08;Saint James;0;0;0
+JM;JM-05;Saint Mary;0;0;0
+JM;JM-03;Saint Thomas;0;0;0
+JM;JM-07;Trelawny;0;0;0
+JM;JM-0;Westmoreland;0;0;0
+JO;JO-AJ;jln;0;0;0
+JO;JO-AQ;Al qaba;0;0;0
+JO;JO-BA;Al Balq;0;0;0
+JO;JO-KA;Al Karak;0;0;0
+JO;JO-MA;Al Mafraq;0;0;0
+JO;JO-AM;mmn;0;0;0
+JO;JO-AT;A aflah;0;0;0
+JO;JO-AZ;Az Zarq;0;0;0
+JO;JO-IR;Irbid;0;0;0
+JO;JO-JA;Jarash;0;0;0
+JO;JO-MN;Man;0;0;0
+JO;JO-MD;Mdaba;0;0;0
+JP;JP-23;Aiti [Aichi];0;0;0
+JP;JP-05;Akita;0;0;0
+JP;JP-02;Aomori;0;0;0
+JP;JP-38;Ehime;0;0;0
+JP;JP-2;Gihu [Gifu];0;0;0
+JP;JP-51;Gunma;0;0;0
+JP;JP-34;Hirosima [Hiroshima];0;0;0
+JP;JP-0;Hokkaido [Hokkaido];0;0;0
+JP;JP-8;Hukui [Fukui];0;0;0
+JP;JP-40;Hukuoka [Fukuoka];0;0;0
+JP;JP-07;Hukusima [Fukushima];0;0;0
+JP;JP-28;Hyogo [Hyogo];0;0;0
+JP;JP-08;Ibaraki;0;0;0
+JP;JP-7;Isikawa [Ishikawa];0;0;0
+JP;JP-03;Iwate;0;0;0
+JP;JP-37;Kagawa;0;0;0
+JP;JP-46;Kagosima [Kagoshima];0;0;0
+JP;JP-4;Kanagawa;0;0;0
+JP;JP-39;Koti [Kochi];0;0;0
+JP;JP-43;Kumamoto;0;0;0
+JP;JP-26;Kyoto [Kyoto];0;0;0
+JP;JP-24;Mie;0;0;0
+JP;JP-04;Miyagi;0;0;0
+JP;JP-45;Miyazaki;0;0;0
+JP;JP-20;Nagano;0;0;0
+JP;JP-42;Nagasaki;0;0;0
+JP;JP-29;Nara;0;0;0
+JP;JP-5;Niigata;0;0;0
+JP;JP-44;ita [Oita];0;0;0
+JP;JP-33;Okayama;0;0;0
+JP;JP-47;Okinawa;0;0;0
+JP;JP-27;saka [Osaka];0;0;0
+JP;JP-4;Saga;0;0;0
+JP;JP-50;Saitama;0;0;0
+JP;JP-25;Siga [Shiga];0;0;0
+JP;JP-32;Simane [Shimane];0;0;0
+JP;JP-22;Sizuoka [Shizuoka];0;0;0
+JP;JP-52;Tiba [Chiba];0;0;0
+JP;JP-09;Totigi [Tochigi];0;0;0
+JP;JP-36;Tokusima [Tokushima];0;0;0
+JP;JP-53;Tokyo [Tokyo];0;0;0
+JP;JP-3;Tottori;0;0;0
+JP;JP-6;Toyama;0;0;0
+JP;JP-30;Wakayama;0;0;0
+JP;JP-06;Yamagata;0;0;0
+JP;JP-35;Yamaguti [Yamaguchi];0;0;0
+JP;JP-9;Yamanasi [Yamanashi];0;0;0
+#KE;KE-0; Nairobi [Nairobi Municipality];0;0;0municipality
+KE;KE-0; Nairobi [Nairobi Municipality];0;0;0municipality
+KE;KE-200;Central [Central2];Kati;0;0;province
+KE;KE-300;Coast;Pwani;0;0;province
+KE;KE-400;Eastern;Mashariki;0;0;province
+KE;KE-500;North-Eastern  [N. Eastern];Kaskazini Mashariki;0;0;province
+KE;KE-600;Nyanza;0;0;province
+KE;KE-700;Rift Valley;0;0;province
+KE;KE-900;Western;Magharibi;0;0;province
+KG;KG-C;Chü;Chuyskaya oblast;ujskaja oblast;0;region
+KG;KG-J;Jalal-Abad;Dzhalal-Abadskaya oblast;Dalal-Abadskaja oblast;0;region
+KG;KG-N;Naryn;Narynskaya oblast;Narynskaja oblast;0;region
+KG;KG-O;Osh;Oshskaya oblast;Oskaja oblast;0;region
+KG;KG-T;Talas;Talasskaya oblast;Talasskaja oblast;0;region
+KG;KG-Y;Ysyk-Kl;Issyk-Kulskaya oblast;Issyk-Kulskaja oblast;0;region
+KH;KH-23;Krong Kaeb;0;0;0autonomous municipality
+KH;KH-8;Krong Preah Sihanouk;0;0;0autonomous municipality
+KH;KH-20;Phnom Penh;0;0;0autonomous municipality
+KH;KH-2;Baat Dambang;0;0;province
+KH;KH-10;Banteay Mean Chey [Banteay Meanchey];0;0;province
+KH;KH-3;Kampong Chaam;0;0;province
+KH;KH-4;Kampong Chhnang;0;0;province
+KH;KH-5;Kampong Spueu [Kampng Spe];0;0;province
+KH;KH-6;Kampong Thum [Kampng Thum];0;0;province
+KH;KH-7;Kampot [Kampot];0;0;province
+KH;KH-8;Kandaal [Kandal];0;0;province
+KH;KH-9;Kaoh Kong [Kaoh Kng];0;0;province
+KH;KH-0;Kracheh [Kracheh];0;0;province
+KH;KH-24;Mondol Kiri [Mondl Kiri];0;0;province
+KH;KH-22;Otdar Mean Chey [tdar Meanchey] ;0;0;province
+KH;KH-5;Pousaat [Pothst];0;0;province
+KH;KH-21;Preah Vihear;0;0;province
+KH;KH-4;Prey Veaeng [Prey Veng];0;0;province
+KH;KH-6;Rotanak Kiri [Rotanokiri];0;0;province
+KH;KH-7;Siem Reab [Simreab];0;0;province
+KH;KH-9;Stueng Traeng [Steng Treng];0;0;province
+KH;KH-20;Svaay Rieng [Svay Ring];0;0;province
+KH;KH-25;Taakaev [Takev];0;0;province
+KI;KI-G;Gilbert Islands;0;0;0
+KI;KI-L;Line Islands;0;0;0
+KI;KI-P;Phoenix Islands;0;0;0
+KM;KM-A;Anjouan;Ndzouani;0;0;
+KM;KM-G;Grande Comore;Ngazidja;0;0;
+KM;KM-M;Moheli;Moili;0;0;
+KP;KP-KAE;Kaesong-si;0;0;0special city
+KP;KP-NAM;Nampo-si;0;0;0special city
+KP;KP-PYO;Pyongyang-si;0;0;0special city
+KP;KP-CHA;Chagang-do;0;0;province
+KP;KP-HAB;Hamgyongbuk-do;0;0;province
+KP;KP-HAN;Hamgyongnam-do;0;0;province
+KP;KP-HWB;Hwanghaebuk-do;0;0;province
+KP;KP-HWN;Hwanghaenam-do;0;0;province
+KP;KP-KAN;Kangwon-do;0;0;province
+KP;KP-PYB;Pyonganbuk-do;0;0;province
+KP;KP-PYN;Pyongannam-do;0;0;province
+KP;KP-YAN;Yanggang-do;0;0;province
+KR;KR-0;Seoul Teugbyeolsi [Seoul-Tkpylshi];0;0;0;capital metropolitan city
+KR;KR-26;Busan Gwangyeogsi [Pusan-Kwangykshi];0;0;0metropolitan city
+KR;KR-27;Daegu Gwangyeogsi [Taegu-Kwangykshi];0;0;0metropolitan city
+KR;KR-30;Daejeon Gwangyeogsi [Taejn-Kwangykshi];0;0;0metropolitan city
+KR;KR-29;Gwangju Gwangyeogsi [Kwangju-Kwangykshi];0;0;0metropolitan city
+KR;KR-28;Incheon Gwangyeogsi [Inchn-Kwangykshi];0;0;0metropolitan city
+KR;KR-3;Ulsan Gwangyeogsi [Ulsan-Kwangykshi];0;0;0metropolitan city
+KR;KR-43;Chungcheongbugdo [Chungchngbuk-do];0;0;province
+KR;KR-44;Chungcheongnamdo [Chungchngnam-do];0;0;province
+KR;KR-42;Gangweondo [Kang-won-do];0;0;province
+KR;KR-4;Gyeonggido [Kynggi-do];0;0;province
+KR;KR-47;Gyeongsangbugdo [Kyngsangbuk-do];0;0;province
+KR;KR-48;Gyeongsangnamdo [Kyngsangnam-do];0;0;province
+KR;KR-49;Jejudo [Cheju-do];0;0;province
+KR;KR-45;Jeonrabugdo[Chllabuk-do];0;0;province
+KR;KR-46;Jeonranamdo [Chllanam-do];0;0;province
+KW;KW-AH;Al Amadi;0;0;0
+KW;KW-FA;Al Farwaniyah;0;0;0
+KW;KW-JA;Al Jahrah;0;0;0
+KW;KW-KU;Al Kuwayt;0;0;0
+KW;KW-HA;awalli;0;0;0
+KZ;KZ-ALA;Almaty;Almaty;Almaty;0;city
+KZ;KZ-AST;Astana;Astana;Astana;0;city
+AE;AE-AZ;Abu Dhabi;0;0;0
+AE;AE-AJ;Ajman;0;0;0
+AE;AE-FU;Al Fujayrah;0;0;0
+AE;AE-SH;Shariqah;0;0;0
+AE;AE-DU;Dubai;0;0;0
+AE;AE-RK;Ras al Khaymah;0;0;0
+AE;AE-UQ;Umm al Qaywayn;0;0;0
+AF;AF-BDS;Badakhshan;0;0;0
+AF;AF-BDG;Badghis;0;0;0
+AF;AF-BGL;Baghlan [Baghian];0;0;0
+AF;AF-BAL;Balkh;0;0;0
+AF;AF-BAM;Bamian;0;0;0
+AF;AF-FRA;Farah;0;0;0
+AF;AF-FYB;Faryab;0;0;0
+AF;AF-GHA;Ghazni [Ghazn];0;0;0
+AF;AF-GHO;Ghowr;0;0;0
+AF;AF-HEL;Helmand;0;0;0
+AF;AF-HER;Herat;0;0;0
+AF;AF-JOW;Jowzjan;0;0;0
+AF;AF-KAB;Kabul [Kabol];0;0;0
+AF;AF-KAN;Kandahar;0;0;0
+AF;AF-KAP;Kapisa;0;0;0
+AF;AF-KNR;Konar [Kunar];0;0;0
+AF;AF-KDZ;Kondoz [Kunduz] [Konduz];0;0;0
+AF;AF-LAG;Laghman;0;0;0
+AF;AF-LOW;Lowgar;0;0;0
+AF;AF-NAN;Nangrahar [Nangarhar] [Nangarha];0;0;0
+AF;AF-NIM;Nimruz;0;0;0
+AF;AF-ORU;Oruzgan [Uruzgan];0;0;0
+AF;AF-PIA;Paktia;0;0;0
+AF;AF-PKA;Paktika;0;0;0
+AF;AF-PAR;Parwan [Parvan];0;0;0
+AF;AF-SAM;Samangan;0;0;0
+AF;AF-SAR;Sar-e Pol;0;0;0
+AF;AF-TAK;Takhar;0;0;0
+AF;AF-WAR;Wardak [Wardag] [Vardak];0;0;0
+AF;AF-ZAB;Zabol [Zabul];0;0;0
+AD;AD-01;Andorra;0;0;0
+AL;AL-BR;Berat;0;0;0
+AL;AL-BU;Bulqize;0;0;9
+AL;AL-DL;Delvine;0;0;2
+AL;AL-DV;Devoll;0;0;6
+AL;AL-DI;Diber;0;0;9
+AL;AL-DR;Durres;0;0;2
+AL;AL-EL;Elbasan;0;0;3
+AL;AL-FR;Fier;0;0;4
+AL;AL-GR;Gramsh;0;0;3
+AL;AL-GJ;Gjirokaster;0;0;5
+AL;AL-HA;Has;0;0;7
+AL;AL-KA;Kavaje;0;0;0
+AL;AL-ER;Kolonje;0;0;6
+AL;AL-KO;Korce;0;0;6
+AL;AL-KR;Kruje;0;0;2
+AL;AL-KC;Kucove;0;0;0
+AL;AL-KU;Kukes;0;0;7
+AL;AL-KB;Kurbin;0;0;8
+AL;AL-LE;Lezhe;0;0;8
+KZ;KZ-ALM;Almaty oblysy;Almatinskaya oblast;Almatinskaja oblast;0;region
+KZ;KZ-AKM;Aqmola oblysy;Akmolinskaya oblast;Akmolinskaja oblast;0;region
+KZ;KZ-AKT;Aqtbe oblysy;Aktyubinskaya oblast;Aktjubinskaja oblast;0;region
+KZ;KZ-ATY;Atyrau oblysy;Atyrauskaya oblast;Atyrauskaja oblast;0;region
+KZ;KZ-ZAP;Batys Qazaqstan oblysy;Zapadno-Kazakhstanskaya oblast;Zapadno-Kazahstanskaja oblast;0;region
+KZ;KZ-MAN;Mangghystau oblysy;Mangistauskaya oblast;Mangystauskaja oblast;0;region
+KZ;KZ-YUZ;Ongtüstik Qazaqstan oblysy;Yuzhno-Kazakhstankaya oblast;Juno-Kazahstankaja oblast;0;region
+KZ;KZ-PAV;Pavlodar oblysy;Pavlodarskaya oblast;Pavlodarskaja oblast;0;region
+KZ;KZ-KAR;Qaraghandy oblysy;Karagandinskaya oblast;Karagandinskaja oblast;0;region
+KZ;KZ-KUS;Qostanay oblysy;Kostanayskaya oblast;Kostanajskaja oblast;0;region
+KZ;KZ-KZY;Qyzylorda oblysy;Kyzylordinskaya oblast;Kyzylordinskaja oblast;0;region
+KZ;KZ-VOS;Shyghys Qazaqstan oblysy;Vostochno-Kazakhstanskaya oblast;Vostoeno-Kazahstanskaja oblast;0;region
+KZ;KZ-SEV;Soltüstik Qazaqstan oblysy;Severo-Kazakhstanskaya oblast;Severo-Kazahstanskaja oblast;0;region
+KZ;KZ-ZHA;Zhambyl oblysy;Zhambylskaya oblast;ambylskaja oblast;0;region
+LA;LA-VT;Vientiane;0;0;0prefecture
+LA;LA-AT;Attapu [Attopeu];0;0;province
+LA;LA-BK;Bokeo;0;0;province
+LA;LA-BL;Bolikhamxai [Borikhane];0;0;province
+LA;LA-CH;Champasak [Champassak];0;0;province
+LA;LA-HO;Houaphan;0;0;province
+LA;LA-KH;Khammouan;0;0;province
+LA;LA-LM;Louang Namtha;0;0;province
+MD;MD-TA;Taraclia;0;0;0;district
+LA;LA-LP;Louangphabang [Louang Prabang];0;0;province
+LA;LA-OU;Oudomxai [Oudomsai];0;0;province
+LA;LA-PH;Phongsali [Phong Saly];0;0;province
+LA;LA-SL;Salavan [Saravane];0;0;province
+LA;LA-SV;Savannakhet;0;0;province
+LA;LA-VI;Vientiane;0;0;province
+LA;LA-XA;Xaignabouli [Sayaboury];0;0;province
+LA;LA-XN;Xaisomboun;0;0;0special zone
+LA;LA-XE;Xekong [Sekong];0;0;province
+LA;LA-XI;Xiangkhoang [Xieng Khouang];0;0;province
+LB;LB-BA;Beirout;Bayrut;0;0
+LB;LB-BI;El Beqaa;Al Biqa;0;0
+LB;LB-JL;Jabal Loubnane;Jabal Lubnan;0;0
+LB;LB-AS;Loubnane ech Chemali;Ash Shamal;0;0
+LB;LB-JA;Loubnane ej Jnoubi;Al Janub;0;0
+LB;LB-NA;Nabatiye;An Nabayah;0;0
+LK;LK-52;Ampara;0;0;5
+LK;LK-7;Anuradhapura;0;0;7
+LK;LK-8;Badulla;0;0;8
+LK;LK-5;Batticaloa;0;0;5
+LK;LK-;Colombo;0;0;0
+LK;LK-3;Galle;0;0;3
+LK;LK-2;Gampaha;0;0;
+LK;LK-33;Hambantota;0;0;3
+LK;LK-4;Jaffna;0;0;4
+LK;LK-3;Kalutara;0;0;0
+LK;LK-2;Kandy;0;0;2
+LK;LK-92;Kegalla;0;0;9
+LK;LK-42;Kilinochchi;0;0;4
+LK;LK-6;Kurunegala;0;0;6
+LK;LK-43;Mannar;0;0;4
+LK;LK-22;Matale;0;0;2
+LK;LK-32;Matara;0;0;3
+LK;LK-82;Monaragala;0;0;8
+LK;LK-45;Mullaittivu;0;0;4
+LK;LK-23;Nuwara Eliya;0;0;2
+LK;LK-72;Polonnaruwa;0;0;7
+LK;LK-62;Puttalam;0;0;6
+LK;LK-9;Ratnapura;0;0;9
+LK;LK-53;Trincomalee;0;0;5
+LK;LK-44;Vavuniya;0;0;4
+LR;LR-BM;Bomi;0;0;0
+LR;LR-BG;Bong;0;0;0
+LR;LR-GB;Grand Bassa;0;0;0
+LR;LR-CM;Grand Cape Mount;0;0;0
+LR;LR-GG;Grand Gedeh;0;0;0
+LR;LR-GK;Grand Kru;0;0;0
+LR;LR-LO;Lofa;0;0;0
+LR;LR-MG;Margibi;0;0;0
+LR;LR-MY;Maryland;0;0;0
+LR;LR-MO;Montserrado;0;0;0
+LR;LR-NI;Nimba;0;0;0
+LR;LR-RI;Rivercess;0;0;0
+LR;LR-SI;Sinoe;0;0;0
+LS;LS-D;Berea;0;0;0
+LS;LS-B;Butha-Buthe;0;0;0
+LS;LS-C;Leribe;0;0;0
+LS;LS-E;Mafeteng;0;0;0
+LS;LS-A;Maseru;0;0;0
+LS;LS-F;Mohales Hoek;0;0;0
+LS;LS-J;Mokhotlong;0;0;0
+LS;LS-H;Qachas Nek;0;0;0
+LS;LS-G;Quthing;0;0;0
+LS;LS-K;Thaba-Tseka;0;0;0
+LT;LT-AL;Alytaus Apskritis;0;0;0
+LT;LT-KU;Kauno Apskritis;0;0;0
+LT;LT-KL;Klaipdos Apskritis;0;0;0
+LT;LT-MR;Marijampols Apskritis;0;0;0
+LT;LT-PN;Panevio Apskritis;0;0;0
+LT;LT-SA;iauli Apskritis;0;0;0
+LT;LT-TA;Taurags Apskritis;0;0;0
+LT;LT-TE;Teli Apskritis;0;0;0
+LT;LT-UT;Utenos Apskritis;0;0;0
+LT;LT-VL;Vilniaus Apskritis;0;0;0
+LU;LU-D;Diekirch;0;0;0
+LU;LU-G;Grevenmacher;0;0;0
+LU;LU-L;Luxembourg;Luxemburg ;0;0;
+LV;LV-AI;Aizkraukles Apriis;0;0;0;district
+LV;LV-AL;Alksnes Apriis;0;0;0;district
+LV;LV-BL;Balvu Apriis;0;0;0;district
+LV;LV-BU;Bauskas Apriis;0;0;0;district
+LV;LV-CE;Csu Apriis;0;0;0;district
+LV;LV-DA;Daugavpils Apriis;0;0;0;district
+LV;LV-DO;Dobeles Apriis;0;0;0;district
+LV;LV-GU;Gulbenes Apriis;0;0;0;district
+LV;LV-JL;Jelgavas Apriis;0;0;0;district
+LV;LV-JK;Jkabpils Apriis;0;0;0;district
+LV;LV-KR;Krslavas Apriis;0;0;0;district
+LV;LV-KU;Kuldgas Apriis;0;0;0;district
+LV;LV-LM;Limbau Apriis;0;0;0;district
+LV;LV-LE;Liepjas Apriis;0;0;0;district
+LV;LV-LU;Ludzas Apriis;0;0;0;district
+LV;LV-MA;Madonas Apriis;0;0;0;district
+LV;LV-OG;Ogres Apriis;0;0;0;district
+LV;LV-PR;Preiu Apriis;0;0;0;district
+LV;LV-RE;Rzeknes Apriis;0;0;0;district
+LV;LV-RI;Rgas Apriis;0;0;0;district
+LV;LV-SA;Saldus Apriis;0;0;0;district
+LV;LV-TA;Talsu Apriis;0;0;0;district
+LV;LV-TU;Tukuma Apriis;0;0;0;district
+LV;LV-VK;Valkas Apriis;0;0;0;district
+LV;LV-VM;Valmieras Apriis;0;0;0;district
+LV;LV-VE;Ventspils Apriis;0;0;0;district
+LV;LV-DGV;Daugavpils;0;0;0;city
+LV;LV-JEL;Jelgava;0;0;0;city
+LV;LV-JUR;Jrmala;0;0;0;city
+LV;LV-LPX;Liepja;0;0;0;city
+LV;LV-REZ;Rzekne;0;0;0;city
+LV;LV-RIX;Rga;0;0;0;city
+LV;LV-VEN;Ventspils;0;0;0;city
+LY;LY-BU;Al Bunn;0;0;0
+LY;LY-JA;Al Jabal al Akhar;0;0;0
+LY;LY-JU;Al Jufrah;0;0;0
+LY;LY-WA;Al Wah;0;0;0
+LY;LY-ZA;Az Zwiyah;0;0;0
+LY;LY-BA;Banghz;0;0;0
+LY;LY-MI;Mirtah;0;0;0
+LY;LY-TB;arbulus;0;0;0
+MA;MA-AGD;Agadir;0;0;3
+MA;MA-BAH;Ait Baha;0;0;3
+MA;MA-MEL;Ait Melloul;0;0;3
+MA;MA-HAO;Al Haouz;0;0;0
+MA;MA-HOC;Al Hoceima;0;0;0
+MA;MA-ASZ;Assa-Zag;0;0;4
+MA;MA-AZI;Azilal;0;0;2
+MA;MA-BEM;Beni Mellal;0;0;2
+MA;MA-BES;Ben Slimane;0;0;09
+MA;MA-BER;Berkane;0;0;04
+MA;MA-BOD;Boujdour;0;0;5
+MA;MA-BOM;Boulemane;0;0;05
+MA;MA-CAS;Casablanca [Dar el Beida];0;0;08
+MA;MA-CHE;Chefchaouene;0;0;0
+MA;MA-CHI;Chichaoua;0;0;0
+MA;MA-HAJ;El Hajeb;0;0;06
+MA;MA-JDI;El Jadida;0;0;0
+MA;MA-ERR;Errachidia;0;0;06
+MA;MA-ESI;Essaouira;0;0;0
+MA;MA-ESM;Es Smara;0;0;4
+MA;MA-FES;Fes;0;0;05
+AL;AL-LB;Librazhd;0;0;3
+AL;AL-LU;Lushnje;0;0;4
+AL;AL-MM;Malesi e Madhe;0;0;0
+AL;AL-MK;Mallakaster;0;0;4
+AL;AL-MT;Mat;0;0;9
+AL;AL-MR;Mirdite;0;0;8
+AL;AL-PQ;Peqin;0;0;3
+AL;AL-PR;Permet;0;0;5
+AL;AL-PG;Pogradec;0;0;6
+AL;AL-PU;Puke;0;0;0
+AL;AL-SR;Sarande;0;0;2
+AL;AL-SK;Skrapar;0;0;0
+AL;AL-SH;Shkoder;0;0;0
+AL;AL-TE;Tepelene;0;0;5
+AL;AL-TR;Tirane;0;0;0
+AL;AL-TP;Tropoje;0;0;7
+AL;AL-VL;Vlore;0;0;2
+AM;AM-ER;Erevan [Yerevan] [Armenia x Yerevan];0;0;0;city
+AM;AM-AG;Aragacotn;0;0;region
+AM;AM-AR;Ararat;0;0;region
+AM;AM-AV;Armavir;0;0;region
+AM;AM-GR;Gearkunik;0;0;region
+AM;AM-KT;Kotayk;0;0;region
+AM;AM-LO;Loy;0;0;region
+AM;AM-SH;irak;0;0;region
+AM;AM-SU;Syunik;0;0;region
+AM;AM-TV;Tavu;0;0;region
+AM;AM-VD;Vayoc Jor;0;0;region
+AO;AO-BGO;Bengo;0;0;0
+AO;AO-BGU;Benguela;0;0;0
+AO;AO-BIE;Bie;0;0;0
+AO;AO-CAB;Cabinda;0;0;0
+SN;SN-MT;Matam;0;0;0
+AO;AO-CCU;Cuando-Cubango;0;0;0
+AO;AO-CNO;Cuanza Norte;0;0;0
+AO;AO-CUS;Cuanza Sul;0;0;0
+AO;AO-CNN;Cunene;0;0;0
+AO;AO-HUA;Huambo;0;0;0
+AO;AO-HUI;Hula;0;0;0
+AO;AO-LUA;Luanda;0;0;0
+AO;AO-LNO;Lunda Norte;0;0;0
+AO;AO-LSU;Lunda Sul;0;0;0
+AO;AO-MAL;Malange;0;0;0
+AO;AO-MOX;Moxico;0;0;0
+AO;AO-NAM;Namibe;0;0;0
+AO;AO-UIG;Uge;0;0;0
+AO;AO-ZAI;Zaire;0;0;0
+AR;AR-C;Capital federal;0;0;0;federal district
+AR;AR-B;Buenos Aires;0;0;province
+AR;AR-K;Catamarca;0;0;province
+AR;AR-X;Crdoba;0;0;province
+AR;AR-W;Corrientes;0;0;province
+AR;AR-H;Chaco;0;0;province
+AR;AR-U;Chubut;0;0;province
+AR;AR-E;Entre Ros;0;0;province
+AR;AR-P;Formosa;0;0;province
+AR;AR-Y;Jujuy;0;0;province
+AR;AR-L;La Pampa;0;0;province
+AR;AR-F;La Rioja;0;0;province
+AR;AR-M;Mendoza;0;0;province
+AR;AR-N;Misiones;0;0;province
+AR;AR-Q;Neuquen;0;0;province
+AR;AR-R;Ro Negro;0;0;province
+AR;AR-A;Salta;0;0;province
+AR;AR-J;San Juan;0;0;province
+AR;AR-D;San Luis;0;0;province
+AR;AR-Z;Santa Cruz;0;0;province
+AR;AR-S;Santa Fe;0;0;province
+AR;AR-G;Santiago del Estero;0;0;province
+AR;AR-V;Tierra del Fuego;0;0;province
+AR;AR-T;Tucumn;0;0;province
+AT;AT-10;Burgenland;0;0;0
+AT;AT-2;Krnten;0;0;0
+AT;AT-3;Niedersterreich;0;0;0
+AT;AT-4;Obersterreich;0;0;0
+AT;AT-5;Salzburg;0;0;0
+AT;AT-6;Steiermark;0;0;0
+AT;AT-7;Tirol;0;0;0
+AT;AT-8;Vorarlberg;0;0;0
+AT;AT-9;Wien;0;0;0
+AU;AU-NS;New South Wales;0;0;0state
+AU;AU-QL;Queensland;0;0;0state
+AU;AU-SA;South Australia;0;0;0state
+AU;AU-TS;Tasmania;0;0;0state
+AU;AU-VI;Victoria;0;0;0state
+AU;AU-WA;Western Australia;0;0;0state
+AU;AU-CT;Australian Capital Territory;0;0;0;territory
+AU;AU-NT;Northern Territory;0;0;0;territory
+AZ;AZ-AB;li Bayraml;0;0;0;city
+AZ;AZ-BA;Bak;0;0;0;city
+AZ;AZ-GA;Gnc;0;0;0;city
+AZ;AZ-LA;Lnkran;0;0;0;city
+AZ;AZ-MI;Mingcevir;0;0;0;city
+AZ;AZ-NA;Naftalan;0;0;0;city
+AZ;AZ-SA;ki;0;0;0;city
+AZ;AZ-SM;Sumqayt;0;0;0;city
+AZ;AZ-SS;ua;0;0;0;city
+AZ;AZ-XA;Xankndi;0;0;0;city
+AZ;AZ-YE;Yevlax;0;0;0;city
+AZ;AZ-ABS;Aberon;0;0;0rayon
+AZ;AZ-AGC;Acabdi;0;0;0rayon
+AZ;AZ-AGM;Adam;0;0;0rayon
+AZ;AZ-AGS;Ada;0;0;0rayon
+AZ;AZ-AGA;Astafa;0;0;0rayon
+AZ;AZ-AGU;Asu;0;0;0rayon
+AZ;AZ-AST;Astara;0;0;0rayon
+AZ;AZ-BAB;Babk;0;0;NX;rayon
+AZ;AZ-BAL;Balakn;0;0;0rayon
+AZ;AZ-BAR;Brd;0;0;0rayon
+AZ;AZ-BEY;Beylqan;0;0;0rayon
+AZ;AZ-BIL;Bilsuvar;0;0;0rayon
+AZ;AZ-CAB;Cbrayl;0;0;0rayon
+AZ;AZ-CAL;Clilabab;0;0;0rayon
+AZ;AZ-CUL;Culfa;0;0;NX;rayon
+AZ;AZ-DAS;Daksn;0;0;0rayon
+AZ;AZ-DAV;Dvci;0;0;0rayon
+AZ;AZ-FUZ;Füzuli;0;0;0rayon
+AZ;AZ-GAD;Gdby;0;0;0rayon
+AZ;AZ-GOR;Goranboy;0;0;0rayon
+AZ;AZ-GOY;Gycay;0;0;0rayon
+AZ;AZ-HAC;Hacqabul;0;0;0rayon
+AZ;AZ-IMI;mili;0;0;0rayon
+AZ;AZ-ISM;smayll;0;0;0rayon
+AZ;AZ-KAL;Klbcr;0;0;0rayon
+AZ;AZ-KUR;Kürdmir;0;0;0rayon
+AZ;AZ-LAC;Lacn;0;0;0rayon
+AZ;AZ-LAN;Lnkran;0;0;0rayon
+AZ;AZ-LER;Lerik;0;0;0rayon
+AZ;AZ-MAS;Masall;0;0;0rayon
+AZ;AZ-NEF;Neftcala;0;0;0rayon
+AZ;AZ-OGU;Ouz;0;0;0rayon
+AZ;AZ-ORD;Ordubad;0;0;NX;rayon
+AZ;AZ-QAB;Qbl;0;0;0rayon
+AZ;AZ-QAX;Qax;0;0;0rayon
+AZ;AZ-QAZ;Qazax;0;0;0rayon
+AZ;AZ-QOB;Qobustan;0;0;0rayon
+AZ;AZ-QBA;Quba;0;0;0rayon
+AZ;AZ-QBI;Qubadl;0;0;0rayon
+AZ;AZ-QUS;Qusar;0;0;0rayon
+AZ;AZ-SAT;Saatl;0;0;0rayon
+AZ;AZ-SAB;Sabirabad;0;0;0rayon
+AZ;AZ-SAD;Sdrk;0;0;NX;rayon
+AZ;AZ-SAH;ahbuz;0;0;NX;rayon
+AZ;AZ-SAK;ki;0;0;0rayon
+AZ;AZ-SAL;Salyan;0;0;0rayon
+AZ;AZ-SMI;amax;0;0;0rayon
+AZ;AZ-SKR;mkir;0;0;0rayon
+AZ;AZ-SMX;Samux;0;0;0rayon
+AZ;AZ-SAR;rur;0;0;NX;rayon
+AZ;AZ-SIY;Siyzn;0;0;0rayon
+AZ;AZ-SUS;ua;0;0;0rayon
+AZ;AZ-TAR;Trtr;0;0;0rayon
+AZ;AZ-TOV;Tovuz;0;0;0rayon
+AZ;AZ-UCA;Ucar;0;0;0rayon
+AZ;AZ-XAC;Xacmaz;0;0;0rayon
+AZ;AZ-XAN;Xanlar;0;0;0rayon
+AZ;AZ-XIZ;Xz;0;0;0rayon
+AZ;AZ-XCI;Xocal;0;0;0rayon
+AZ;AZ-XVD;Xocavnd;0;0;0rayon
+AZ;AZ-YAR;Yardml;0;0;0rayon
+AZ;AZ-YEV;Yevlax;0;0;0rayon
+AZ;AZ-ZAN;Zngilan;0;0;0rayon
+AZ;AZ-ZAQ;Zaqatala;0;0;0rayon
+AZ;AZ-ZAR;Zrdab;0;0;0rayon
+BA;BA-BIH;Federacija Bosna i Hercegovina;0;0;0
+BA;BA-SRP;Republika Srpska;0;0;0
+BD;BD-05;Bagerhat zila;0;0;4
+BD;BD-0;Bandarban zila;0;0;2
+BD;BD-02;Barguna zila;0;0;0
+BD;BD-06;Barisal zila;0;0;0
+BD;BD-07;Bhola zila;0;0;0
+BD;BD-03;Bogra zila;0;0;5
+BD;BD-04;Brahmanbaria zila;0;0;2
+BD;BD-09;Chandpur zila;0;0;2
+BD;BD-0;Chittagong zila;0;0;2
+BD;BD-2;Chuadanga zila;0;0;4
+BD;BD-08;Comilla zila;0;0;2
+BD;BD-10;Coxs Bazar zila;0;0;2
+BD;BD-3;Dhaka zila;0;0;3
+BD;BD-4;Dinajpur zila;0;0;5
+BD;BD-5;Faridpur zila;0;0;3
+BD;BD-6;Feni zila;0;0;2
+BD;BD-9;Gaibandha zila;0;0;5
+BD;BD-8;Gazipur zila;0;0;3
+BD;BD-7;Gopalganj zila;0;0;3
+BD;BD-20;Habiganj zila;0;0;6
+BD;BD-24;Jaipurhat zila;0;0;5
+BD;BD-2;Jamalpur zila;0;0;3
+BD;BD-22;Jessore zila;0;0;4
+BD;BD-25;Jhalakati zila;0;0;0
+BD;BD-23;Jhenaidah zila;0;0;4
+BD;BD-29;Khagrachari zila;0;0;2
+BD;BD-27;Khulna zila;0;0;4
+BD;BD-26;Kishoreganj zila;0;0;3
+BD;BD-28;Kurigram zila;0;0;5
+BD;BD-30;Kushtia zila;0;0;4
+BD;BD-3;Lakshmipur zila;0;0;2
+BD;BD-32;Lalmonirhat zila;0;0;5
+BD;BD-36;Madaripur zila;0;0;3
+BD;BD-37;Magura zila;0;0;4
+BD;BD-33;Manikganj zila;0;0;3
+BD;BD-39;Meherpur zila;0;0;4
+BD;BD-38;Moulvibazar zila;0;0;6
+BD;BD-35;Munshiganj zila;0;0;3
+BD;BD-34;Mymensingh zila;0;0;3
+BD;BD-48;Naogaon zila;0;0;5
+BD;BD-43;Narail zila;0;0;4
+BD;BD-40;Narayanganj zila;0;0;3
+BD;BD-42;Narsingdi zila;0;0;3
+BD;BD-44;Natore zila;0;0;5
+BD;BD-45;Nawabganj zila;0;0;5
+BD;BD-4;Netrakona zila;0;0;3
+BD;BD-46;Nilphamari zila;0;0;5
+BD;BD-47;Noakhali zila;0;0;2
+BD;BD-49;Pabna zila;0;0;5
+BD;BD-52;Panchagarh zila;0;0;5
+BD;BD-5;Patuakhali zila;0;0;0
+BD;BD-50;Pirojpur zila;0;0;0
+BD;BD-53;Rajbari zila;0;0;3
+BD;BD-54;Rajshahi zila;0;0;5
+BD;BD-56;Rangamati zila;0;0;2
+BD;BD-55;Rangpur zila;0;0;5
+BD;BD-58;Satkhira zila;0;0;4
+BD;BD-62;Shariatpur zila;0;0;3
+BD;BD-57;Sherpur zila;0;0;3
+BD;BD-59;Sirajganj zila;0;0;5
+BD;BD-6;Sunamganj zila;0;0;6
+BD;BD-60;Sylhet zila;0;0;6
+BD;BD-63;Tangail zila;0;0;3
+BD;BD-64;Thakurgaon zila;0;0;5
+BE;BE-VAN;Antwerpen;0;0;VLG
+BE;BE-WBR;Brabant Wallon;0;0;WAL
+BE;BE-WHT;Hainaut;0;0;WAL
+BE;BE-WLG;Liege;0;0;WAL
+BE;BE-VLI;Limburg;0;0;VLG
+BE;BE-WLX;Luxembourg;0;0;WAL
+BE;BE-WNA;Namur;0;0;WAL
+BE;BE-VOV;Oost-Vlaanderen;0;0;VLG
+BE;BE-VBR;Vlaams Brabant;0;0;VLG
+BE;BE-VWV;West-Vlaanderen;0;0;VLG
+BF;BF-BAL;Bale;0;0;0
+BF;BF-BAM;Bam;0;0;0
+BF;BF-BAN;Banwa;0;0;0
+BF;BF-BAZ;Bazega;0;0;0
+BF;BF-BGR;Bougouriba;0;0;0
+BF;BF-BLG;Boulgou;0;0;0
+BF;BF-BLK;Boulkiemde;0;0;0
+BF;BF-COM;Comoe;0;0;0
+BF;BF-GAN;Ganzourgou;0;0;0
+BF;BF-GNA;Gnagna;0;0;0
+BF;BF-GOU;Gourma;0;0;0
+BF;BF-HOU;Houet;0;0;0
+BF;BF-IOB;Ioba;0;0;0
+BF;BF-KAD;Kadiogo;0;0;0
+BF;BF-KEN;Kenedougou;0;0;0
+BF;BF-KMD;Komondjari;0;0;0
+BF;BF-KMP;Kompienga;0;0;0
+BF;BF-KOS;Kossi;0;0;0
+BF;BF-KOP;Koulpelogo;0;0;0
+BF;BF-KOT;Kouritenga;0;0;0
+BF;BF-KOW;Kourweogo;0;0;0
+BF;BF-LER;Leraba;0;0;0
+BF;BF-LOR;Loroum;0;0;0
+BF;BF-MOU;Mouhoun [Mou Houn];0;0;0
+BF;BF-NAO;Nahouri;0;0;0
+BF;BF-NAM;Namentenga;0;0;0
+BF;BF-NAY;Nayala;0;0;0
+BF;BF-NOU;Noumbiel;0;0;0
+BF;BF-OUB;Oubritenga;0;0;0
+BF;BF-OUD;Oudalan;0;0;0
+BF;BF-PAS;Passore;0;0;0
+BF;BF-PON;Poni;0;0;0
+BF;BF-SNG;Sanguie;0;0;0
+BF;BF-SMT;Sanmatenga;0;0;0
+BF;BF-SEN;Seno;0;0;0
+BF;BF-SIS;Sissili;0;0;0
+BF;BF-SOM;Soum;0;0;0
+BF;BF-SOR;Sourou;0;0;0
+BF;BF-TAP;Tapoa;0;0;0
+BF;BF-TUI;Tui;0;0;0
+BF;BF-YAG;Yagha;0;0;0
+BF;BF-YAT;Yatenga;0;0;0
+BF;BF-ZIR;Ziro;0;0;0
+BF;BF-ZON;Zondoma;0;0;0
+BF;BF-ZOU;Zoundweogo;0;0;0
+BG;BG-0;Blagoevgrad;0;0;0
+BG;BG-02;Burgas;0;0;0
+BG;BG-08;Dobrie;0;0;0
+MA;MA-FIG;Figuig;0;0;04
+MA;MA-GUE;Guelmim;0;0;4
+MA;MA-IFR;Ifrane;0;0;06
+MA;MA-JRA;Jerada;0;0;04
+MA;MA-KES;Kelaat Sraghna;0;0;0
+MA;MA-KEN;Kenitra;0;0;02
+MA;MA-KHE;Khemisset;0;0;07
+MA;MA-KHN;Khenifra;0;0;06
+MA;MA-KHO;Khouribga;0;0;09
+MA;MA-LAA;Laayoune;0;0;5
+MA;MA-LAR;Larache;0;0;0
+MA;MA-MAR;Marrakech;0;0;0
+MA;MA-MEK;Meknes;0;0;06
+MA;MA-NAD;Nador;0;0;04
+MA;MA-OUA;Ouarzazate;0;0;3
+MA;MA-OUD;Oued ed Dahab;0;0;6
+MA;MA-OUJ;Oujda;0;0;04
+MA;MA-RBA;Rabat-Sale;0;0;07
+MA;MA-SAF;Safi;0;0;0
+MA;MA-SEF;Sefrou;0;0;05
+MA;MA-SET;Settat;0;0;09
+MA;MA-SIK;Sidi Kacem;0;0;02
+MA;MA-TNG;Tanger;0;0;0
+MA;MA-TNT;Tan-Tan;0;0;4
+MA;MA-TAO;Taounate;0;0;0;3
+MA;MA-TAR;Taroudannt;0;0;3
+MA;MA-TAT;Tata;0;0;4;
+MA;MA-TAZ;Taza;0;0;03;
+MA;MA-TET;Tetouan;0;0;0
+MA;MA-TIZ;Tiznit;0;0;3
+MD;MD-GA;Gguzia, Unitate Teritorial Autonom;0;0;0autonomous territory
+MD;MD-CU;Chiinu;0;0;0;city
+MD;MD-SN;Stinga Nistrului, unitatea teritorial din;0;0;0territorial unit
+MD;MD-BA;Bli;0;0;0;district
+MD;MD-CA;Cahul;0;0;0;district
+MD;MD-CH;Chiinu;0;0;0;district
+MD;MD-ED;Edine;0;0;0;district
+MD;MD-LA;Lpuna;0;0;0;district
+MD;MD-OR;Orhei;0;0;0;district
+MD;MD-SO;Soroca;0;0;0;district
+MD;MD-TI;Tighina [Bender];0;0;0;district
+MD;MD-UN;Ungheni;0;0;0;district
+MG;MG-T;Antananarivo;0;0;0
+MG;MG-D;Antsiranana;0;0;0
+MG;MG-F;Fianarantsoa;0;0;0
+MG;MG-M;Mahajanga;0;0;0
+MG;MG-A;Toamasina;0;0;0
+MG;MG-U;Toliara;0;0;0
+MH;MH-ALL;Ailinglapalap;0;0;L
+MH;MH-ALK;Ailuk;0;0;T
+MH;MH-ARN;Arno;0;0;T
+MH;MH-AUR;Aur;0;0;T
+MH;MH-EBO;Ebon;0;0;L
+MH;MH-ENI;Eniwetok;0;0;L
+MH;MH-JAL;Jaluit;0;0;L
+MH;MH-KIL;Kili;0;0;L
+MH;MH-KWA;Kwajalein;0;0;L
+MH;MH-LAE;Lae;0;0;L
+MH;MH-LIB;Lib;0;0;L
+MH;MH-LIK;Likiep;0;0;T
+MH;MH-MAJ;Majuro;0;0;T
+MH;MH-MAL;Maloelap;0;0;T
+MH;MH-MEJ;Mejit;0;0;T
+MH;MH-MIL;Mili;0;0;T
+MH;MH-NMK;Namorik;0;0;L
+MH;MH-NMU;Namu;0;0;L
+MH;MH-RON;Rongelap;0;0;L
+MH;MH-UJA;Ujae;0;0;L
+MH;MH-UJL;Ujelang;0;0;L
+MH;MH-UTI;Utirik;0;0;T
+MH;MH-WTH;Wotho;0;0;L
+MH;MH-WTJ;Wotje;0;0;T
+BG;BG-07;Gabrovo;0;0;0
+BG;BG-26;Haskovo;0;0;0
+BG;BG-28;Jambol;0;0;0
+BG;BG-09;Krdali;0;0;0
+BG;BG-0;Kjustendil;0;0;0
+BG;BG-;Lovee;0;0;0
+BG;BG-2;Montana;0;0;0
+BG;BG-3;Pazardik;0;0;0
+BG;BG-4;Pernik;0;0;0
+BG;BG-5;Pleven;0;0;0
+BG;BG-6;Plovdiv;0;0;0
+BG;BG-7;Razgrad;0;0;0
+BG;BG-8;Ruse;0;0;0
+BG;BG-9;Silistra;0;0;0
+BG;BG-20;Sliven;0;0;0
+BG;BG-2;Smoljan;0;0;0
+BG;BG-23;Sofija;0;0;0
+BG;BG-22;Sofija-Grad;0;0;0
+BG;BG-24;Stara Zagora;0;0;0
+BG;BG-27;umen;0;0;0
+BG;BG-25;Trgovite;0;0;0
+BG;BG-03;Varna;0;0;0
+BG;BG-04;Veliko Trnovo;0;0;0
+BG;BG-05;Vidin;0;0;0
+BG;BG-06;Vraca;0;0;0
+BH;BH-0;Al add;0;0;0
+BH;BH-03;Al Manmah;0;0;0
+BH;BH-0;Al Minaqah al Gharbyah;0;0;0
+BH;BH-07;Al Minaqah al Wus;0;0;0
+BH;BH-05;Al Minaqah ash Shamlyah;0;0;0
+BH;BH-02;Al Muarraq;0;0;0
+BH;BH-09;Ar Rif;0;0;0
+BH;BH-04;Jidd af;0;0;0
+BH;BH-2;Madnat amad;0;0;0
+BH;BH-08;Madnat s;0;0;0
+BH;BH-10;Minaqat Juzur awr;0;0;0
+BH;BH-06;Sitrah;0;0;0
+BI;BI-BB;Bubanza;0;0;0
+BI;BI-BJ;Bujumbura;0;0;0
+BI;BI-BR;Bururi;0;0;0
+BI;BI-CA;Cankuzo;0;0;0
+BI;BI-CI;Cibitoke;0;0;0
+BI;BI-GI;Gitega;0;0;0
+BI;BI-KR;Karuzi;0;0;0
+BI;BI-KY;Kayanza;0;0;0
+BI;BI-KI;Kirundo;0;0;0
+BI;BI-MA;Makamba;0;0;0
+BI;BI-MU;Muramvya;0;0;0
+BI;BI-MY;Muyinga;0;0;0
+BI;BI-NG;Ngozi;0;0;0
+BI;BI-RT;Rutana;0;0;0
+BI;BI-RY;Ruyigi;0;0;0
+BJ;BJ-AL;Alibori;0;0;0
+BJ;BJ-AK;Atakora;0;0;0
+BJ;BJ-AQ;Atlantique;0;0;0
+BJ;BJ-BO;Borgou;0;0;0
+BJ;BJ-CO;Collines;0;0;0
+BJ;BJ-DO;Donga;0;0;0
+BJ;BJ-KO;Kouffo;0;0;0
+BJ;BJ-LI;Littoral;0;0;0
+BJ;BJ-MO;Mono;0;0;0
+BJ;BJ-OU;Oueme;0;0;0
+BJ;BJ-PL;Plateau;0;0;0
+BJ;BJ-ZO;Zou;0;0;0
+BN;BN-BE;Belait;0;0;0
+BN;BN-BM;Brunei-Muara;0;0;0
+BN;BN-TE;Temburong;0;0;0
+BN;BN-TU;Tutong;0;0;0
+BO;BO-C;Cochabamba;0;0;0
+BO;BO-H;Chuquisaca;0;0;0
+BO;BO-B;El Beni;0;0;0
+BO;BO-L;La Paz;0;0;0
+BO;BO-O;Oruro;0;0;0
+BO;BO-N;Pando;0;0;0
+BO;BO-P;Potos;0;0;0
+BO;BO-S;Santa Cruz;0;0;0
+BO;BO-T;Tarija;0;0;0
+BR;BR-DF;Distrito Federal;0;0;0;federal district
+BR;BR-AC;Acre;0;0;0state
+BR;BR-AL;Alagoas;0;0;0state
+BR;BR-AP;Amap;0;0;0state
+BR;BR-AM;Amazonas;0;0;0state
+BR;BR-BA;Bahia;0;0;0state
+BR;BR-CE;Cear;0;0;0state
+BR;BR-ES;Esprito Santo;0;0;0state
+BR;BR-GO;Gois;0;0;0state
+BR;BR-MA;Maranho;0;0;0state
+BR;BR-MT;Mato Grosso;0;0;0state
+BR;BR-MS;Mato Grosso do Sul;0;0;0state
+BR;BR-MG;Minas Gerais;0;0;0state
+BR;BR-PA;Par;0;0;0state
+BR;BR-PB;Paraba;0;0;0state
+BR;BR-PR;Paran;0;0;0state
+BR;BR-PE;Pernambuco;0;0;0state
+BR;BR-PI;Piaui;0;0;0state
+BR;BR-RJ;Rio de Janeiro;0;0;0state
+BR;BR-RN;Rio Grande do Norte;0;0;0state
+BR;BR-RS;Rio Grande do Sul;0;0;0state
+BR;BR-RO;Rondonia;0;0;0state
+BR;BR-RR;Roraima;0;0;0state
+BR;BR-SC;Santa Catarina;0;0;0state
+BR;BR-SP;So Paulo;0;0;0state
+BR;BR-SE;Sergipe;0;0;0state
+BR;BR-TO;Tocantins;0;0;0state
+BS;BS-AC;Acklins and Crooked Islands;0;0;0
+BS;BS-BI;Bimini;0;0;0
+BS;BS-CI;Cat Island;0;0;0
+BS;BS-EX;Exuma;0;0;0
+BS;BS-FP;Freeport;0;0;0
+BS;BS-FC;Fresh Creek;0;0;0
+BS;BS-GH;Governors Harbour;0;0;0
+BS;BS-GT;Green Turtle Cay;0;0;0
+BS;BS-HI;Harbour Island;0;0;0
+BS;BS-HR;High Rock;0;0;0
+BS;BS-IN;Inagua;0;0;0
+BS;BS-KB;Kemps Bay;0;0;0
+BS;BS-LI;Long Island;0;0;0
+BS;BS-MH;Marsh Harbour;0;0;0
+BS;BS-MG;Mayaguana;0;0;0
+BS;BS-NP;New Providence;0;0;0
+BS;BS-NB;Nicholls Town and Berry Islands;0;0;0
+BS;BS-RI;Ragged Island;0;0;0
+BS;BS-RS;Rock Sound;0;0;0
+BS;BS-SP;Sandy Point;0;0;0
+BS;BS-SR;San Salvador and Rum Cay;0;0;0
+BT;BT-33;Bumthang;0;0;0
+BT;BT-2;Chhukha;0;0;0
+BT;BT-22;Dagana;0;0;0
+BT;BT-GA;Gasa;0;0;0
+BT;BT-3;Ha;0;0;0
+BT;BT-44;Lhuentse;0;0;0
+BT;BT-42;Monggar;0;0;0
+BT;BT-34;Paro;0;0;0
+BT;BT-43;Pemagatshel;0;0;0
+BT;BT-23;Punakha;0;0;0
+BT;BT-45;Samdrup Jongkha;0;0;0
+BT;BT-4;Samtse;0;0;0
+BT;BT-36;Sarpang;0;0;0
+BT;BT-5;Thimphu;0;0;0
+BT;BT-35;Trashigang;0;0;0
+BT;BT-TY;Trashi Yangtse;0;0;0
+BT;BT-32;Trongsa;0;0;0
+BT;BT-38;Tsirang;0;0;0
+BT;BT-24;Wangdue Phodrang;0;0;0
+BT;BT-37;Zhemgang;0;0;0
+BW;BW-CE;Central;0;0;0
+BW;BW-GH;Ghanzi;0;0;0
+BW;BW-KG;Kgalagadi;0;0;0
+BW;BW-KL;Kgatleng;0;0;0
+BW;BW-KW;Kweneng;0;0;0
+BW;BW-NW;North-West;0;0;0
+BW;BW-NE;North-East;0;0;0
+BW;BW-SE;South-East;0;0;0
+BW;BW-SO;Southern;0;0;0
+BY;BY-BR;Brestskaya voblasts [Brestskaya oblast];Bresckaja voblasc [Brestskaja oblast];0;0
+BY;BY-HO;Homyelskaya voblasts [Gomelskaya oblast];Homelskaja voblasc [Gomelskaja oblast];0;0
+BY;BY-HR;Hrodzenskaya voblasts [Grodnenskaya oblast];Hrodzenskaja voblasc [Grodnenskaja oblast];0;0
+BY;BY-MA;Mahilyowskaya voblasts [Mogilevskaya oblast];Mahileuskaja voblasc [Mogilevskaja oblast];0;0
+BY;BY-MI;Minskaya voblasts [Minskaya oblast];Minskaja voblasc [Minskaja oblast];0;0
+BY;BY-VI;Vitsyebskaya voblasts [Vitebskaya oblast];Vicebskaja voblasc [Vitebskaja oblast];0;0
+BZ;BZ-BZ;Belize;0;0;0
+BZ;BZ-CY;Cayo;0;0;0
+BZ;BZ-CZL;Corozal;0;0;0
+BZ;BZ-OW;Orange Walk;0;0;0
+BZ;BZ-SC;Stann Creek;0;0;0
+BZ;BZ-TOL;Toledo;0;0;0
+CA;CA-AB;Alberta;0;0;province
+CA;CA-BC;British Columbia;Colombie-Britannique;0;0;province
+CA;CA-MB;Manitoba;0;0;province
+CA;CA-NB;New Brunswick;Nouveau-Brunswick;0;0;province
+CA;CA-NL;Newfoundland and Labrador;Terre-Neuve-et-Labrador;0;0;province
+CA;CA-NS;Nova Scotia;Nouvelle-cosse;0;0;province
+CA;CA-ON;Ontario;0;0;province
+CA;CA-PE;Prince Edward Island;le-du-Prince-douard;0;0;province
+CA;CA-QC;Quebec;Quebec;0;0;province
+CA;CA-SK;Saskatchewan;0;0;province
+CA;CA-NT;Northwest Territories;Territoires du Nord-Ouest;0;0;territory
+CA;CA-NU;Nunavut;0;0;0;territory
+CA;CA-YT;Yukon Territory;Territoire du Yukon;0;0;territory
+CD;CD-KN;Kinshasa;0;0;0;city
+CD;CD-BN;Bandundu;0;0;province
+CD;CD-BC;Bas-Congo;0;0;province
+CD;CD-EQ;quateur;0;0;province
+CD;CD-KW;Kasai-Occidental;0;0;province
+CD;CD-KE;Kasai-Oriental;0;0;province
+CD;CD-KA;Katanga;0;0;province
+CD;CD-MA;Maniema;0;0;province
+CD;CD-NK;Nord-Kivu;0;0;province
+CD;CD-OR;Orientale;0;0;province
+CD;CD-SK;Sud-Kivu;0;0;province
+CF;CF-BGF;Bangui;0;0;0;capital
+CF;CF-BB;Bamingui-Bangoran [Bamingui-Bangora];0;0;0prefecture
+CF;CF-BK;Basse-Kotto;0;0;0prefecture
+CF;CF-HK;Haute-Kotto;0;0;0prefecture
+CF;CF-HM;Haut-Mbomou;0;0;0prefecture
+CF;CF-KG;Kemo;0;0;0prefecture
+CF;CF-LB;Lobaye;0;0;0prefecture
+CF;CF-HS;Mambere-Kadei;0;0;0prefecture
+CF;CF-MB;Mbomou;0;0;0prefecture
+CF;CF-KB;Nana-Grebizi [Nana-Gribingui];0;0;0prefecture
+CF;CF-NM;Nana-Mambere;0;0;0prefecture
+CF;CF-MP;Ombella-Mpoko;0;0;0prefecture
+CF;CF-UK;Ouaka;0;0;0prefecture
+CF;CF-AC;Ouham;0;0;0prefecture
+CF;CF-OP;Ouham-Pende;0;0;0prefecture
+#CF;CF-SE;Sangha-Mbaere [Sangha1] [Sangha];0;0;0prefecture
+CF;CF-SE;Sangha1;0;0;0prefecture
+CF;CF-VK;Vakaga;0;0;0prefecture
+CG;CG-BZV;Brazzaville;0;0;0;capital
+CG;CG-10;Bouenza;0;0;region
+CG;CG-8;Cuvette;0;0;region
+CG;CG-5;Cuvette-Ouest;0;0;region
+CG;CG-14;Kouilou;0;0;region
+CG;CG-2;Lekoumou;0;0;region
+CG;CG-7;Likouala;0;0;region
+CG;CG-9;Niari;0;0;region
+CG;CG-4;Plateaux [Plateaux1];0;0;region
+CG;CG-12;Pool;0;0;region
+CG;CG-3;Sangha;0;0;region
+CH;CH-AG;Aargau;0;0;0
+CH;CH-AR;Appenzell Ausserrhoden;0;0;0
+CH;CH-AI;Appenzell Innerrhoden;0;0;0
+CH;CH-BL;Basel-Landschaft;0;0;0
+CH;CH-BS;Basel-Stadt;0;0;0
+CH;CH-BE;Bern;Berne;0;0
+CH;CH-FR;Fribourg ;Freiburg ;0;0
+CH;CH-GE;Geneve ;0;0;0
+CH;CH-GL;Glarus ;0;0;0
+CH;CH-GR;Graubünden ;Grigioni (it);0;0
+CH;CH-JU;Jura ;0;0;0
+CH;CH-LU;Luzern ;0;0;0
+CH;CH-NE;Neuchatel;0;0;0
+CH;CH-NW;Nidwalden ;0;0;0
+CH;CH-OW;Obwalden ;0;0;0
+CH;CH-SG;Sankt Gallen ;0;0;0
+CH;CH-SH;Schaffhausen ;0;0;0
+CH;CH-SZ;Schwyz ;0;0;0
+CH;CH-SO;Solothurn ;0;0;0
+CH;CH-TG;Thurgau ;0;0;0
+CH;CH-TI;Ticino (it);0;0;0
+CH;CH-UR;Uri ;0;0;0
+CH;CH-VS;Valais ;Wallis ;0;0
+CH;CH-VD;Vaud ;0;0;0
+CH;CH-ZG;Zug ;0;0;0
+CH;CH-ZH;Zurich;0;0;0
+CI;CI-06;8 Montagnes ;0;0;0
+CI;CI-6;Agnebi ;0;0;0
+CI;CI-09;Bas-Sassandra ;0;0;0
+CI;CI-0;Denguele ;0;0;0
+CI;CI-02;Haut-Sassandra ;0;0;0
+CI;CI-07;Lacs ;0;0;0
+CI;CI-0;Lagunes ;0;0;0
+CI;CI-2;Marahoue ;0;0;0
+CI;CI-05;Moyen-Comoe ;0;0;0
+CI;CI-10;Nzi-Comoe ;0;0;0
+CI;CI-03;Savanes ;0;0;0
+CI;CI-5;Sud-Bandama ;0;0;0
+CI;CI-3;Sud-Comoe ;0;0;0
+CI;CI-04;Vallee du Bandama ;0;0;0
+CI;CI-4;Worodougou ;0;0;0
+CI;CI-08;Zanzan ;0;0;0
+CL;CL-AI;Aisen del General Carlos Ibez del Campo;0;0;0
+CL;CL-AN;Antofagasta;0;0;0
+CL;CL-AR;Araucana;0;0;0
+CL;CL-AT;Atacama;0;0;0
+CL;CL-BI;Bo-Bo;0;0;0
+CL;CL-CO;Coquimbo;0;0;0
+CL;CL-LI;Libertador General Bernardo OHiggins;0;0;0
+CL;CL-LL;Los Lagos;0;0;0
+CL;CL-MA;Magallanes;0;0;0
+CL;CL-ML;Maule;0;0;0
+CL;CL-RM;Regin Metropolitana de Santiago;0;0;0
+CL;CL-TA;Tarapac;0;0;0
+CL;CL-VS;Valparaso;0;0;0
+CM;CM-AD;Adamaoua;Adamaoua;0;0;
+CM;CM-CE;Centre;Centre;0;0;
+CM;CM-ES;East;Est;0;0;
+CM;CM-EN;Far North;Extreme-Nord;0;0
+CM;CM-LT;Littoral;Littoral;0;0
+CM;CM-NO;North;Nord;0;0
+CM;CM-NW;North-West;Nord-Ouest;0;0
+CM;CM-SU;South;Sud;0;0
+CM;CM-SW;South-West;Sud-Ouest;0;0
+CM;CM-OU;West;Ouest;0;0
+CN;CN-0;Beijing;0;0;0municipality
+CN;CN-50;Chongqing;0;0;0municipality
+CN;CN-3;Shanghai;0;0;0municipality
+CN;CN-2;Tianjin;0;0;0municipality
+CN;CN-34;Anhui;0;0;province
+CN;CN-35;Fujian;0;0;province
+CN;CN-62;Gansu;0;0;province
+CN;CN-44;Guangdong;0;0;province
+CN;CN-52;Guizhou;0;0;province
+CN;CN-46;Hainan;0;0;province
+CN;CN-73;Hebei;0;0;province
+CN;CN-23;Heilongjiang;0;0;province
+CN;CN-4;Henan;0;0;province
+CN;CN-42;Hubei;0;0;province
+CN;CN-43;Hunan;0;0;province
+CN;CN-32;Jiangsu;0;0;province
+CN;CN-36;Jiangxi;0;0;province
+CN;CN-22;Jilin;0;0;province
+CN;CN-72;Liaoning;0;0;province
+CN;CN-63;Qinghai;0;0;province
+CN;CN-6;Shaanxi;0;0;province
+CN;CN-37;Shandong;0;0;province
+CN;CN-74;Shanxi;0;0;province
+CN;CN-5;Sichuan;0;0;province
+CN;CN-7;Taiwan ;0;0;province
+CN;CN-53;Yunnan;0;0;province
+CN;CN-33;Zhejiang;0;0;province
+CN;CN-45;Guangxi;0;0;autonomous region
+CN;CN-75;Nei Mongol (mn);0;0;autonomous region
+CN;CN-64;Ningxia;0;0;autonomous region
+CN;CN-65;Xinjiang;0;0;autonomous region
+CN;CN-54;Xizang;0;0;autonomous region
+CN;CN-9;Xianggang (zh) ;Hong Kong (en);0;0;special administrative region
+CN;CN-92;Aomen (zh) ;Macao (en);0;0;special administrative region
+CO;CO-DC;Distrito Capital de Bogot;0;0;0;capital district
+CO;CO-AMA;Amazonas;0;0;0department
+CO;CO-ANT;Antioquia;0;0;0department
+CO;CO-ARA;Arauca;0;0;0department
+CO;CO-ATL;Atlntico;0;0;0department
+CO;CO-BOL;Bolvar;0;0;0department
+CO;CO-BOY;Boyac;0;0;0department
+CO;CO-CAL;Caldas;0;0;0department
+CO;CO-CAQ;Caquet;0;0;0department
+CO;CO-CAS;Casanare;0;0;0department
+CO;CO-CAU;Cauca;0;0;0department
+CO;CO-CES;Cesar;0;0;0department
+CO;CO-COR;Crdoba;0;0;0department
+CO;CO-CUN;Cundinamarca;0;0;0department
+CO;CO-CHO;Choc;0;0;0department
+CO;CO-GUA;Guaina;0;0;0department
+CO;CO-GUV;Guaviare;0;0;0department
+CO;CO-HUI;Huila;0;0;0department
+CO;CO-LAG;La Guajira;0;0;0department
+CO;CO-MAG;Magdalena;0;0;0department
+CO;CO-MET;Meta;0;0;0department
+CO;CO-NAR;Nario;0;0;0department
+CO;CO-NSA;Norte de Santander;0;0;0department
+CO;CO-PUT;Putumayo;0;0;0department
+CO;CO-QUI;Quindo;0;0;0department
+CO;CO-RIS;Risaralda;0;0;0department
+CO;CO-SAP;San Andres, Providencia y Santa Catalina;0;0;0department
+CO;CO-SAN;Santander;0;0;0department
+CO;CO-SUC;Sucre;0;0;0department
+CO;CO-TOL;Tolima;0;0;0department
+CO;CO-VAC;Valle del Cauca;0;0;0department
+CO;CO-VAU;Vaupes;0;0;0department
+CO;CO-VID;Vichada;0;0;0department
+CR;CR-A;Alajuela;0;0;0
+CR;CR-C;Cartago;0;0;0
+CR;CR-G;Guanacaste;0;0;0
+CR;CR-H;Heredia;0;0;0
+CR;CR-L;Limn;0;0;0
+CR;CR-P;Puntarenas;0;0;0
+CR;CR-SJ;San Jose;0;0;0
+CU;CU-09;Camagüey;0;0;province
+CU;CU-08;Ciego de vila;0;0;province
+CU;CU-06;Cienfuegos;0;0;province
+CU;CU-03;Ciudad de La Habana;0;0;province
+CU;CU-2;Granma;0;0;province
+CU;CU-4;Guantnamo;0;0;province
+CU;CU-;Holgun;0;0;province
+CU;CU-02;La Habana;0;0;province
+CU;CU-0;Las Tunas;0;0;province
+CU;CU-04;Matanzas;0;0;province
+CU;CU-0;Pinar del Ro;0;0;province
+CU;CU-07;Sancti Spritus;0;0;province
+CU;CU-3;Santiago de Cuba;0;0;province
+CU;CU-05;Villa Clara;0;0;province
+CU;CU-99;Isla de la Juventud;0;0;0special municipality
+CV;CV-BV;Boa Vista;0;0;B
+CV;CV-BR;Brava;0;0;S
+CV;CV-CS;Calheta de So Miguel;0;0;S
+CV;CV-MA;Maio;0;0;S
+CV;CV-MO;Mosteiros;0;0;S
+CV;CV-PA;Pal;0;0;B
+CV;CV-PN;Porto Novo;0;0;B
+CV;CV-PR;Praia;0;0;S
+CV;CV-RG;Ribeira Grande;0;0;B
+CV;CV-SL;Sal;0;0;B
+CV;CV-CA;Santa Catarina;0;0;S
+CV;CV-CR;Santa Cruz;0;0;S
+CV;CV-SD;So Domingos;0;0;S
+CV;CV-SF;So Filipe;0;0;S
+CV;CV-SN;So Nicolau;0;0;B
+CV;CV-SV;So Vicente;0;0;B
+CV;CV-TA;Tarrafal;0;0;S
+CY;CY-04;Ammochostos;Mausa;0;0
+CY;CY-06;Keryneia;Girne;0;0
+CY;CY-03;Larnaka;Larnaka;0;0
+CY;CY-0;Lefkosia;Lefkoa;0;0
+CY;CY-02;Lemesos;Leymosun;0;0
+CY;CY-05;Pafos;Baf;0;0
+CZ;CZ-JC;Jihoeesk kraj;0;0;0
+CZ;CZ-JM;Jihomoravsk kraj ;0;0;0
+CZ;CZ-KA;Karlovarsk kraj;0;0;0
+CZ;CZ-KR;Krlovehradeck kraj;0;0;0
+CZ;CZ-LI;Libereck kraj;0;0;0
+CZ;CZ-MO;Moravskoslezsk kraj;0;0;0
+CZ;CZ-OL;Olomouck kraj;0;0;0
+CZ;CZ-PA;Pardubick kraj;0;0;0
+CZ;CZ-PL;Plzesk kraj;0;0;0
+CZ;CZ-PR;Praha, hlavn msto;0;0;0
+CZ;CZ-ST;Stedoeesk kraj;0;0;0
+CZ;CZ-US;steck kraj ;0;0;0
+CZ;CZ-VY;Vysoeina;0;0;0
+CZ;CZ-ZL;Zlnsk kraj;0;0;0
+DE;DE-BW;Baden-Württemberg;0;0;0
+DE;DE-BY;Bayern;0;0;0
+DE;DE-BE;Berlin;0;0;0
+DE;DE-BB;Brandenburg;0;0;0
+DE;DE-HB;Bremen;0;0;0
+DE;DE-HH;Hamburg;0;0;0
+DE;DE-HE;Hessen;0;0;0
+DE;DE-MV;Mecklenburg-Vorpommern;0;0;0
+DE;DE-NI;Niedersachsen;0;0;0
+DE;DE-NW;Nordrhein-Westfalen;0;0;0
+DE;DE-RP;Rheinland-Pfalz;0;0;0
+DE;DE-SL;Saarland;0;0;0
+DE;DE-SN;Sachsen;0;0;0
+DE;DE-ST;Sachsen-Anhalt;0;0;0
+DE;DE-SH;Schleswig-Holstein;0;0;0
+DE;DE-TH;Thüringen;0;0;0
+DJ;DJ-AS;Ali Sabieh;0;0;region
+DJ;DJ-DI;Dikhil;0;0;region
+DJ;DJ-DJ;Djibouti;0;0;0ville
+DJ;DJ-OB;Obock;0;0;region
+DJ;DJ-TA;Tadjourah;0;0;region
+DK;DK-47;Frederiksberg;0;0;0;city
+DK;DK-0;Kbenhavn;0;0;0;city
+DK;DK-040;Bornholm;0;0;county
+DK;DK-020;Frederiksborg;0;0;county
+DK;DK-042;Fyn;0;0;county
+DK;DK-05;Kbenhavn;0;0;county
+DK;DK-080;Nordjylland;0;0;county
+DK;DK-055;Ribe;0;0;county
+DK;DK-065;Ringkbing;0;0;county
+DK;DK-025;Roskilde;0;0;county
+DK;DK-035;Storstrm;0;0;county
+DK;DK-050;Snderjylland;0;0;county
+DK;DK-060;Vejle;0;0;county
+DK;DK-030;Vestsjlland;0;0;county
+DK;DK-076;Viborg;0;0;county
+DK;DK-070;rhus;0;0;county
+DO;DO-0;Distrito Nacional (Santo Domingo);0;0;0;district
+DO;DO-02;Azua;0;0;province
+DO;DO-03;Bahoruco;0;0;province
+DO;DO-04;Barahona;0;0;province
+DO;DO-05;Dajabn;0;0;province
+DO;DO-06;Duarte;0;0;province
+DO;DO-08;El Seybo [El Seibo];0;0;province
+DO;DO-09;Espaillat;0;0;province
+DO;DO-30;Hato Mayor;0;0;province
+DO;DO-0;Independencia;0;0;province
+DO;DO-;La Altagracia;0;0;province
+DO;DO-07;La Estrelleta [Elas Pia];0;0;province
+DO;DO-2;La Romana;0;0;province
+DO;DO-3;La Vega;0;0;province
+DO;DO-4;Mara Trinidad Snchez;0;0;province
+DO;DO-28;Monseor Nouel;0;0;province
+DO;DO-5;Monte Cristi;0;0;province
+DO;DO-29;Monte Plata;0;0;province
+DO;DO-6;Pedernales;0;0;province
+DO;DO-7;Peravia;0;0;province
+DO;DO-8;Puerto Plata;0;0;province
+DO;DO-9;Salcedo;0;0;province
+DO;DO-20;Saman;0;0;province
+DO;DO-2;San Cristbal;0;0;province
+DO;DO-22;San Juan;0;0;province
+DO;DO-23;San Pedro de Macors;0;0;province
+DO;DO-24;Snchez Ramrez;0;0;province
+DO;DO-25;Santiago;0;0;province
+DO;DO-26;Santiago Rodrguez;0;0;province
+DO;DO-27;Valverde;0;0;province
+DZ;DZ-0;Adrar [Adrar1];0;0;0
+DZ;DZ-44;Ain Defla;0;0;0
+DZ;DZ-46;Ain Temouchent;0;0;0
+DZ;DZ-6;Alger;0;0;0
+DZ;DZ-23;Annaba;0;0;0
+DZ;DZ-05;Batna;0;0;0
+DZ;DZ-08;Bechar;0;0;0
+DZ;DZ-06;Bejaia;0;0;0
+DZ;DZ-07;Biskra;0;0;0
+DZ;DZ-09;Blida;0;0;0
+DZ;DZ-34;Bordj Bou Arreridj;0;0;0
+DZ;DZ-54;Bouira;0;0;0
+DZ;DZ-35;Boumerdes;0;0;0
+DZ;DZ-02;Chlef;0;0;0
+DZ;DZ-25;Constantine;0;0;0
+DZ;DZ-7;Djelfa;0;0;0
+DZ;DZ-32;El Bayadh;0;0;0
+DZ;DZ-39;El Oued;0;0;0
+DZ;DZ-36;El Tarf;0;0;0
+DZ;DZ-47;Ghardaia;0;0;0
+DZ;DZ-24;Guelma;0;0;0
+DZ;DZ-33;Illizi;0;0;0
+DZ;DZ-8;Jijel;0;0;0
+DZ;DZ-40;Khenchela;0;0;0
+DZ;DZ-03;Laghouat;0;0;0
+DZ;DZ-29;Mascara;0;0;0
+DZ;DZ-26;Medea;0;0;0
+DZ;DZ-43;Mila;0;0;0
+DZ;DZ-27;Mostaganem;0;0;0
+DZ;DZ-28;Msila;0;0;0
+DZ;DZ-45;Naama;0;0;0
+DZ;DZ-63;Oran;0;0;0
+DZ;DZ-30;Ouargla;0;0;0
+DZ;DZ-04;Oum el Bouaghi;0;0;0
+DZ;DZ-48;Relizane;0;0;0
+DZ;DZ-20;Saida;0;0;0
+DZ;DZ-9;Setif;0;0;0
+DZ;DZ-22;Sidi Bel Abbes;0;0;0
+DZ;DZ-62;Skikda;0;0;0
+DZ;DZ-4;Souk Ahras;0;0;0
+DZ;DZ-1;Tamanghasset;0;0;0
+DZ;DZ-52;Tebessa;0;0;0
+DZ;DZ-64;Tiaret;0;0;0
+DZ;DZ-37;Tindouf;0;0;0
+DZ;DZ-42;Tipaza;0;0;0
+DZ;DZ-38;Tissemsilt;0;0;0
+DZ;DZ-5;Tizi Ouzou;0;0;0
+DZ;DZ-65;Tlemcen;0;0;0
+EC;EC-A;Azuay;0;0;0
+EC;EC-B;Bolvar;0;0;0
+EC;EC-F;Caar;0;0;0
+EC;EC-C;Carchi;0;0;0
+EC;EC-X;Cotopaxi;0;0;0
+EC;EC-H;Chimborazo;0;0;0
+EC;EC-O;El Oro;0;0;0
+EC;EC-E;Esmeraldas;0;0;0
+EC;EC-W;Galpagos;0;0;0
+EC;EC-G;Guayas;0;0;0
+EC;EC-I;Imbabura;0;0;0
+EC;EC-L;Loja;0;0;0
+EC;EC-R;Los Ros;0;0;0
+EC;EC-M;Manab;0;0;0
+EC;EC-S;Morona-Santiago;0;0;0
+EC;EC-N;Napo;0;0;0
+EC;EC-Y;Pastaza;0;0;0
+EC;EC-P;Pichincha;0;0;0
+EC;EC-U;Sucumbos;0;0;0
+EC;EC-T;Tungurahua;0;0;0
+EC;EC-Z;Zamora-Chinchipe;0;0;0
+EE;EE-37;Harjumaa;0;0;0
+EE;EE-39;Hiiumaa;0;0;0
+EE;EE-44;Ida-Virumaa;0;0;0
+EE;EE-49;Jgevamaa;0;0;0
+EE;EE-5;Jrvamaa;0;0;0
+EE;EE-57;Lnemaa;0;0;0
+EE;EE-59;Lne-Virumaa;0;0;0
+EE;EE-65;Plvamaa;0;0;0
+EE;EE-67;Prnumaa;0;0;0
+EE;EE-70;Raplamaa;0;0;0
+EE;EE-74;Saaremaa;0;0;0
+EE;EE-78;Tartumaa;0;0;0
+EE;EE-82;Valgamaa;0;0;0
+EE;EE-84;Viljandimaa;0;0;0
+EE;EE-86;Vrumaa;0;0;0
+EG;EG-DK;Ad Daqahliyah;0;0;0
+EG;EG-BA;Al Bar al Amar;0;0;0
+EG;EG-BH;Al Buayrah;0;0;0
+EG;EG-FYM;Al Fayyum;0;0;0
+EG;EG-GH;Al Gharbiyah;0;0;0
+EG;EG-ALX;Al Iskandariyah;0;0;0
+EG;EG-IS;Al Ismalyah;0;0;0
+EG;EG-GZ;Al Jzah;0;0;0
+EG;EG-MNF;Al Minfyah;0;0;0
+EG;EG-MN;Al Miny;0;0;0
+EG;EG-C;Al Qhirah;0;0;0
+EG;EG-KB;Al Qalybyah;0;0;0
+EG;EG-WAD;Al Wd al Jadd;0;0;0
+EG;EG-SHR;Ash Sharqyah;0;0;0
+EG;EG-SUZ;As Suways;0;0;0
+EG;EG-ASN;Aswn;0;0;0
+EG;EG-AST;Asy;0;0;0
+EG;EG-BNS;Ban Suwayf;0;0;0
+EG;EG-PTS;Br Sad;0;0;0
+EG;EG-DT;Dumy;0;0;0
+EG;EG-JS;Janb Sn;0;0;0
+EG;EG-KFS;Kafr ash Shaykh;0;0;0
+EG;EG-MT;Mar;0;0;0
+EG;EG-KN;Qin;0;0;0
+EG;EG-SIN;Shaml Sn;0;0;0
+EG;EG-SHG;Shj;0;0;0
+ER;ER-AN;Anseba;0;0;0
+ER;ER-DU;Debub;0;0;0
+ER;ER-DK;Debubawi Keyih Bahri [Debub-Keih-Bahri];0;0;0
+ER;ER-GB;Gash-Barka;0;0;0
+ER;ER-MA;Maakel [Maekel];0;0;0
+ER;ER-SK;Semenawi Keyih Bahri [Semien-Keih-Bahri];0;0;0
+ES;ES-C;A Corua;0;0;GA;province
+ES;ES-VI;lava;0;0;PV;province
+ES;ES-AB;Albacete;0;0;CM;province
+ES;ES-A;Alicante;0;0;VC;province
+ES;ES-AL;Almera;0;0;AN;province
+ES;ES-O;Asturias;0;0;O;province
+ES;ES-AV;vila;0;0;CL;province
+ES;ES-BA;Badajoz;0;0;EX;province
+ES;ES-PM;Baleares;0;0;IB;province
+ES;ES-B;Barcelona;0;0;CT;province
+ES;ES-BU;Burgos;0;0;CL;province
+ES;ES-CC;Cceres;0;0;EX;province
+ES;ES-CA;Cdiz;0;0;AN;province
+ES;ES-S;Cantabria;0;0;S;province
+ES;ES-CS;Castelln;0;0;VC;province
+ES;ES-CR;Ciudad Real;0;0;CM;province
+ES;ES-CO;Crdoba;0;0;AN;province
+ES;ES-CU;Cuenca;0;0;CM;province
+ES;ES-GI;Girona;0;0;CT;province
+ES;ES-GR;Granada;0;0;AN;province
+ES;ES-GU;Guadalajara;0;0;CM;province
+ES;ES-SS;Guipzcoa;0;0;PV;province
+ES;ES-H;Huelva;0;0;AN;province
+ES;ES-HU;Huesca;0;0;AR;province
+ES;ES-J;Jaen;0;0;AN;province
+ES;ES-LO;La Rioja;0;0;LO;province
+ES;ES-GC;Las Palmas;0;0;CN;province
+ES;ES-LE;Len;0;0;CL;province
+ES;ES-L;Lleida;0;0;CT;province
+ES;ES-LU;Lugo;0;0;GA;province
+ES;ES-M;Madrid;0;0;M;province
+ES;ES-MA;Mlaga;0;0;AN;province
+ES;ES-MU;Murcia;0;0;MU;province
+ES;ES-NA;Navarra;0;0;NA;province
+ES;ES-OR;Ourense;0;0;GA;province
+ES;ES-P;Palencia;0;0;CL;province
+ES;ES-PO;Pontevedra;0;0;GA;province
+ES;ES-SA;Salamanca;0;0;CL;province
+ES;ES-TF;Santa Cruz de Tenerife;0;0;CN;province
+ES;ES-SG;Segovia;0;0;CL;province
+ES;ES-SE;Sevilla;0;0;AN;province
+ES;ES-SO;Soria;0;0;CL;province
+ES;ES-T;Tarragona;0;0;CT;province
+ES;ES-TE;Teruel;0;0;AR;province
+ES;ES-TO;Toledo;0;0;CM;province
+ES;ES-V;Valencia;0;0;VC;province
+ES;ES-VA;Valladolid;0;0;CL;province
+ES;ES-BI;Vizcaya;0;0;PV;province
+ES;ES-ZA;Zamora;0;0;CL;province
+ES;ES-Z;Zaragoza;0;0;AR;province
+ES;ES-CE;Ceuta;0;0;0autonomous city in North Africa
+ES;ES-ML;Melilla;0;0;0autonomous city in North Africa
+ET;ET-AA;dis beba;Addis Ababa;0;0;administration
+ET;ET-AF;far;Afar;0;0;state
+ET;ET-AM;mara;Amara;0;0;state
+ET;ET-BE;Binshangul Gumuz;Benshangul-Gumaz;0;0;state
+ET;ET-GA;Gambcla Hizboch;Gambela Peoples;0;0;state
+ET;ET-HA;Hareri Hizb;Harari People;0;0;state
+ET;ET-OR;Oromiya;Oromia;0;0;state
+ET;ET-SO;Sumalc;Somali;0;0;state
+ET;ET-SN;YeDebub Bihcroch Bihcreseboch na Hizboch;Southern Nations, Nationalities and Peoples;0;0;state
+ET;ET-TI;Tigray;Tigrai;0;0;state
+FI;FI-AL;Ahvenanmaan lni;lands ln;0;0
+FI;FI-ES;Etel-Suomen lni;Sdra Finlands ln;0;0
+FI;FI-IS;It-Suomen lni;stra Finlands ln;0;0
+FI;FI-LL;Lapin lni;Lapplands ln;0;0
+FI;FI-LS;Lnsi-Suomen lni;Vstra Finlands ln;0;0
+FI;FI-OL;Oulun lni;Uleborgs ln;0;0
+FJ;FJ-C;Central;0;0;0division
+FJ;FJ-E;Eastern;0;0;0division
+FJ;FJ-N;Northern;0;0;0division
+FJ;FJ-W;Western;0;0;0division
+FJ;FJ-R;Rotuma;0;0;0dependency
+FM;FM-TRK;Chuuk;0;0;0
+FM;FM-KSA;Kosrae;0;0;0
+FM;FM-PNI;Pohnpei;0;0;0
+FM;FM-YAP;Yap;0;0;0
+FR;FR-0;Ain;0;0;V;metropolitan department
+FR;FR-02;Aisne;0;0;S;metropolitan department
+FR;FR-03;Allier;0;0;C;metropolitan department
+FR;FR-04;Alpes-de-Haute-Provence;0;0;U;metropolitan department
+FR;FR-06;Alpes-Maritimes;0;0;U;metropolitan department
+FR;FR-07;Ardeche;0;0;V;metropolitan department
+FR;FR-08;Ardennes;0;0;G;metropolitan department
+FR;FR-09;Ariege;0;0;N;metropolitan department
+FR;FR-0;Aube;0;0;G;metropolitan department
+FR;FR-;Aude;0;0;K;metropolitan department
+FR;FR-2;Aveyron;0;0;N;metropolitan department
+FR;FR-67;Bas-Rhin;0;0;A;metropolitan department
+FR;FR-3;Bouches-du-Rhone;0;0;U;metropolitan department
+FR;FR-4;Calvados;0;0;P;metropolitan department
+FR;FR-5;Cantal;0;0;C;metropolitan department
+FR;FR-6;Charente;0;0;T;metropolitan department
+FR;FR-7;Charente-Maritime;0;0;T;metropolitan department
+FR;FR-8;Cher;0;0;F;metropolitan department
+FR;FR-9;Correze;0;0;L;metropolitan department
+FR;FR-2A;Corse-du-Sud;0;0;H;metropolitan department
+FR;FR-2;Cote-dOr;0;0;D;metropolitan department
+FR;FR-22;Cotes-dArmor;0;0;E;metropolitan department
+FR;FR-23;Creuse;0;0;L;metropolitan department
+FR;FR-79;Deux-Sevres;0;0;T;metropolitan department
+FR;FR-24;Dordogne;0;0;B;metropolitan department
+FR;FR-25;Doubs;0;0;I;metropolitan department
+FR;FR-26;Drome;0;0;V;metropolitan department
+FR;FR-9;Essonne;0;0;J;metropolitan department
+FR;FR-27;Eure;0;0;Q;metropolitan department
+FR;FR-28;Eure-et-Loir;0;0;F;metropolitan department
+FR;FR-29;Finistere;0;0;E;metropolitan department
+FR;FR-30;Gard;0;0;K;metropolitan department
+FR;FR-32;Gers;0;0;N;metropolitan department
+FR;FR-33;Gironde;0;0;B;metropolitan department
+FR;FR-2B;Haute-Corse;0;0;H;metropolitan department
+FR;FR-3;Haute-Garonne;0;0;N;metropolitan department
+FR;FR-43;Haute-Loire;0;0;C;metropolitan department
+FR;FR-52;Haute-Marne;0;0;G;metropolitan department
+FR;FR-05;Hautes-Alpes;0;0;U;metropolitan department
+FR;FR-70;Haute-Saone;0;0;I;metropolitan department
+FR;FR-74;Haute-Savoie;0;0;V;metropolitan department
+FR;FR-65;Hautes-Pyrenees;0;0;N;metropolitan department
+FR;FR-87;Haute-Vienne;0;0;L;metropolitan department
+FR;FR-68;Haut-Rhin;0;0;A;metropolitan department
+FR;FR-92;Hauts-de-Seine;0;0;J;metropolitan department
+FR;FR-34;Herault;0;0;K;metropolitan department
+FR;FR-35;Ille-et-Vilaine;0;0;E;metropolitan department
+FR;FR-36;Indre;0;0;F;metropolitan department
+FR;FR-37;Indre-et-Loire;0;0;F;metropolitan department
+FR;FR-38;Isere;0;0;V;metropolitan department
+FR;FR-39;Jura;0;0;I;metropolitan department
+FR;FR-40;Landes;0;0;B;metropolitan department
+FR;FR-4;Loir-et-Cher;0;0;F;metropolitan department
+FR;FR-42;Loire;0;0;V;metropolitan department
+FR;FR-44;Loire-Atlantique;0;0;R;metropolitan department
+FR;FR-45;Loiret;0;0;F;metropolitan department
+FR;FR-46;Lot;0;0;N;metropolitan department
+FR;FR-47;Lot-et-Garonne;0;0;B;metropolitan department
+FR;FR-48;Lozere;0;0;K;metropolitan department
+FR;FR-49;Maine-et-Loire;0;0;R;metropolitan department
+FR;FR-50;Manche;0;0;P;metropolitan department
+FR;FR-5;Marne;0;0;G;metropolitan department
+FR;FR-53;Mayenne;0;0;R;metropolitan department
+FR;FR-54;Meurthe-et-Moselle;0;0;M;metropolitan department
+FR;FR-55;Meuse;0;0;M;metropolitan department
+FR;FR-56;Morbihan;0;0;E;metropolitan department
+FR;FR-57;Moselle;0;0;M;metropolitan department
+FR;FR-58;Nievre;0;0;D;metropolitan department
+FR;FR-59;Nord;0;0;O;metropolitan department
+FR;FR-60;Oise;0;0;S;metropolitan department
+FR;FR-6;Orne;0;0;P;metropolitan department
+FR;FR-75;Paris;0;0;J;metropolitan department
+FR;FR-62;Pas-de-Calais;0;0;O;metropolitan department
+FR;FR-63;Puy-de-Dome;0;0;C;metropolitan department
+FR;FR-64;Pyrenees-Atlantiques;0;0;B;metropolitan department
+FR;FR-66;Pyrenees-Orientales;0;0;K;metropolitan department
+FR;FR-69;Rhone;0;0;V;metropolitan department
+FR;FR-7;Saone-et-Loire;0;0;D;metropolitan department
+FR;FR-72;Sarthe;0;0;R;metropolitan department
+FR;FR-73;Savoie;0;0;V;metropolitan department
+FR;FR-77;Seine-et-Marne;0;0;J;metropolitan department
+FR;FR-76;Seine-Maritime;0;0;Q;metropolitan department
+FR;FR-93;Seine-Saint-Denis;0;0;J;metropolitan department
+FR;FR-80;Somme;0;0;S;metropolitan department
+FR;FR-8;Tarn;0;0;N;metropolitan department
+FR;FR-82;Tarn-et-Garonne;0;0;N;metropolitan department
+FR;FR-90;Territoire de Belfort;0;0;I;metropolitan department
+FR;FR-94;Val-de-Marne;0;0;J;metropolitan department
+FR;FR-95;Val-dOise;0;0;J;metropolitan department
+FR;FR-83;Var;0;0;U;metropolitan department
+FR;FR-84;Vaucluse;0;0;U;metropolitan department
+FR;FR-85;Vendee;0;0;R;metropolitan department
+FR;FR-86;Vienne;0;0;T;metropolitan department
+FR;FR-88;Vosges;0;0;M;metropolitan department
+FR;FR-89;Yonne;0;0;D;metropolitan department
+FR;FR-78;Yvelines;0;0;J;metropolitan department
+FR;FR-YT;Mayotte (see also separate entry under YT);0;0;0territorial collectivity
+FR;FR-PM;Saint-Pierre-et-Miquelon (see also separate entry under PM);0;0;0territorial collectivity
+FR;FR-NC;Nouvelle-Caledonie (see also separate entry under NC);0;0;0overseas territory
+FR;FR-PF;Polynesie francaise (see also separate entry under PF);0;0;0overseas territory
+FR;FR-TF;Terres Australes Francaises (see also separate entry under TF);0;0;0overseas territory
+FR;FR-WF;Wallis et Futuna (see also separate entry under WF);0;0;0overseas territory
+GA;GA-1;Estuaire;0;0;0
+GA;GA-2;Haut-Ogooue;0;0;0
+GA;GA-3;Moyen-Ogooue;0;0;0
+GA;GA-4;Ngounie;0;0;0
+GA;GA-5;Nyanga;0;0;0
+GA;GA-6;Ogooue-Ivindo;0;0;0
+GA;GA-7;Ogooue-Lolo;0;0;0
+GA;GA-8;Ogooue-Maritime;0;0;0
+GA;GA-9;Woleu-Ntem;0;0;0
+GB;GB-ABE;Aberdeen City;0;0;SCT
+GB;GB-ABD;Aberdeenshire;0;0;SCT
+GB;GB-ANS;Angus;0;0;SCT
+GB;GB-ANT;Antrim;0;0;NIR
+GB;GB-ARD;Ards;0;0;NIR
+GB;GB-AGB;Argyll and Bute;0;0;SCT
+GB;GB-ARM;Armagh;0;0;NIR
+GB;GB-BLA;Ballymena;0;0;NIR
+GB;GB-BLY;Ballymoney;0;0;NIR
+GB;GB-BNB;Banbridge;0;0;NIR
+GB;GB-BDG;Barking and Dagenham;0;0;ENG
+GB;GB-BNE;Barnet;0;0;ENG
+GB;GB-BNS;Barnsley;0;0;ENG
+GB;GB-BAS;Bath and North East Somerset;0;0;ENG
+GB;GB-BDF;Bedfordshire;0;0;ENG
+GB;GB-BFS;Belfast;0;0;NIR
+GB;GB-BEX;Bexley;0;0;ENG
+GB;GB-BIR;Birmingham;0;0;ENG
+GB;GB-BBD;Blackburn with Darwen;0;0;ENG
+GB;GB-BPL;Blackpool;0;0;ENG
+GB;GB-BGW;Blaenau Gwent;0;0;WLS
+GB;GB-BOL;Bolton;0;0;ENG
+GB;GB-BMH;Bournemouth;0;0;ENG
+GB;GB-BRC;Bracknell Forest;0;0;ENG
+GB;GB-BRD;Bradford;0;0;ENG
+GB;GB-BEN;Brent;0;0;ENG
+GB;GB-BGE;Bridgend [Pen-y-bont ar Ogwr GB-POG];0;0;WLS
+GB;GB-BNH;Brighton and Hove;0;0;ENG
+GB;GB-BST;Bristol, City of;0;0;ENG
+GB;GB-BRY;Bromley;0;0;ENG
+GB;GB-BKM;Buckinghamshire;0;0;ENG;
+GB;GB-BUR;Bury;0;0;ENG;
+GB;GB-CAY;Caerphilly [Caerffili GB-CAF];0;0;WLS;
+GB;GB-CLD;Calderdale;0;0;ENG;
+GB;GB-CAM;Cambridgeshire;0;0;ENG;
+GB;GB-CMD;Camden;0;0;ENG;
+GB;GB-CRF;Cardiff [Caerdydd GB-CRD];0;0;WLS;
+GB;GB-CMN;Carmarthenshire [Sir Gaerfyrddin GB-GFY];0;0;WLS;
+GB;GB-CKF;Carrickfergus;0;0;NIR;
+GB;GB-CSR;Castlereagh;0;0;NIR;
+GB;GB-CGN;Ceredigion [Sir Ceredigion];0;0;WLS;
+GB;GB-CHS;Cheshire;0;0;ENG;
+GB;GB-CLK;Clackmannanshire;0;0;SCT;
+GB;GB-CLR;Coleraine;0;0;NIR;
+GB;GB-CWY;Conwy;0;0;WLS;
+GB;GB-CKT;Cookstown;0;0;NIR;
+GB;GB-CON;Cornwall;0;0;ENG;
+GB;GB-COV;Coventry;0;0;ENG;
+GB;GB-CGV;Craigavon;0;0;NIR;
+GB;GB-CRY;Croydon;0;0;ENG;
+GB;GB-CMA;Cumbria;0;0;ENG;
+GB;GB-DAL;Darlington;0;0;ENG;
+GB;GB-DEN;Denbighshire [Sir Ddinbych GB-DDB];0;0;WLS;
+GB;GB-DER;Derby;0;0;ENG;
+GB;GB-DBY;Derbyshire;0;0;ENG;
+GB;GB-DRY;Derry;0;0;NIR;
+GB;GB-DEV;Devon;0;0;ENG;
+GB;GB-DNC;Doncaster;0;0;ENG;
+GB;GB-DOR;Dorset;0;0;ENG;
+GB;GB-DOW;Down;0;0;NIR;
+GB;GB-DUD;Dudley;0;0;ENG;
+GB;GB-DGY;Dumfries and Galloway;0;0;SCT;
+GB;GB-DND;Dundee City;0;0;SCT;
+GB;GB-DGN;Dungannon;0;0;NIR;
+GB;GB-DUR;Durham;0;0;ENG;
+GB;GB-EAL;Ealing;0;0;ENG;
+GB;GB-EAY;East Ayrshire;0;0;SCT;
+GB;GB-EDU;East Dunbartonshire;0;0;SCT;
+GB;GB-ELN;East Lothian;0;0;SCT;
+GB;GB-ERW;East Renfrewshire;0;0;SCT;
+GB;GB-ERY;East Riding of Yorkshire;0;0;ENG;
+GB;GB-ESX;East Sussex;0;0;ENG;
+GB;GB-EDH;Edinburgh, City of;0;0;SCT;
+GB;GB-ELS;Eilean Siar;0;0;SCT;
+GB;GB-ENF;Enfield;0;0;ENG;
+GB;GB-ESS;Essex;0;0;ENG;
+GB;GB-FAL;Falkirk;0;0;SCT;
+GB;GB-FER;Fermanagh;0;0;NIR;
+GB;GB-FIF;Fife;0;0;SCT;
+GB;GB-FLN;Flintshire [Sir y Fflint GB-FFL];0;0;WLS;
+GB;GB-GAT;Gateshead;0;0;ENG;
+GB;GB-GLG;Glasgow City;0;0;SCT;
+GB;GB-GLS;Gloucestershire;0;0;ENG;
+GB;GB-GRE;Greenwich;0;0;ENG;
+GB;GB-GSY;Guernsey [Guernesey];0;0;CHA;
+GB;GB-GWN;Gwynedd;0;0;WLS;
+GB;GB-HCK;Hackney;0;0;ENG;
+GB;GB-HAL;Halton;0;0;ENG;
+GB;GB-HMF;Hammersmith and Fulham;0;0;ENG;
+GB;GB-HAM;Hampshire;0;0;ENG;
+GB;GB-HRY;Haringey;0;0;ENG;
+GB;GB-HRW;Harrow;0;0;ENG;
+GB;GB-HPL;Hartlepool;0;0;ENG;
+GB;GB-HAV;Havering;0;0;ENG;
+GB;GB-HEF;Herefordshire, County of;0;0;ENG;
+GB;GB-HRT;Hertfordshire;0;0;ENG;
+GB;GB-HLD;Highland;0;0;SCT;
+GB;GB-HIL;Hillingdon;0;0;ENG;
+GB;GB-HNS;Hounslow;0;0;ENG;
+GB;GB-IVC;Inverclyde;0;0;SCT;
+GB;GB-AGY;Isle of Anglesey [Sir Ynys Mon GB-YNM];0;0;WLS;
+GB;GB-IOW;Isle of Wight;0;0;ENG;
+GB;GB-IOS;Isles of Scilly;0;0;ENG;
+GB;GB-ISL;Islington;0;0;ENG;
+GB;GB-JSY;Jersey;0;0;CHA;
+GB;GB-KEC;Kensington and Chelsea;0;0;ENG;
+GB;GB-KEN;Kent;0;0;ENG;
+GB;GB-KHL;Kingston upon Hull, City of;0;0;ENG;
+GB;GB-KTT;Kingston upon Thames;0;0;ENG;
+GB;GB-KIR;Kirklees;0;0;ENG;
+GB;GB-KWL;Knowsley;0;0;ENG;
+GB;GB-LBH;Lambeth;0;0;ENG;
+GB;GB-LAN;Lancashire;0;0;ENG;
+GB;GB-LRN;Larne;0;0;NIR;
+GB;GB-LDS;Leeds;0;0;ENG;
+GB;GB-LCE;Leicester;0;0;ENG;
+GB;GB-LEC;Leicestershire;0;0;ENG;
+GB;GB-LEW;Lewisham;0;0;ENG;
+GB;GB-LMV;Limavady;0;0;NIR;
+GB;GB-LIN;Lincolnshire;0;0;ENG;
+GB;GB-LSB;Lisburn;0;0;NIR;
+GB;GB-LIV;Liverpool;0;0;ENG;
+GB;GB-LND;London, City of;0;0;ENG;
+GB;GB-LUT;Luton;0;0;ENG;
+GB;GB-MFT;Magherafelt;0;0;NIR;
+GB;GB-MAN;Manchester;0;0;ENG;
+GB;GB-MDW;Medway;0;0;ENG;
+GB;GB-MTY;Merthyr Tydfil [Merthyr Tudful GB-MTU];0;0;WLS;
+GB;GB-MRT;Merton;0;0;ENG;
+GB;GB-MDB;Middlesbrough;0;0;ENG;
+GB;GB-MLN;Midlothian;0;0;SCT;
+GB;GB-MIK;Milton Keynes;0;0;ENG;
+GB;GB-MON;Monmouthshire [Sir Fynwy GB-FYN];0;0;WLS;
+GB;GB-MRY;Moray;0;0;SCT;
+GB;GB-MYL;Moyle;0;0;NIR;
+GB;GB-NTL;Neath Port Talbot [Castell-nedd Port Talbot GB-CTL];0;0;WLS;
+GB;GB-NET;Newcastle upon Tyne;0;0;ENG;
+GB;GB-NWM;Newham;0;0;ENG;
+GB;GB-NWP;Newport [Casnewydd GB-CNW];0;0;WLS;
+GB;GB-NYM;Newry and Mourne;0;0;NIR;
+GB;GB-NTA;Newtownabbey;0;0;NIR;
+GB;GB-NFK;Norfolk;0;0;ENG;
+GB;GB-NAY;North Ayrshire;0;0;SCT;
+GB;GB-NDN;North Down;0;0;NIR;
+GB;GB-NEL;North East Lincolnshire;0;0;ENG;
+GB;GB-NLK;North Lanarkshire;0;0;SCT;
+GB;GB-NLN;North Lincolnshire;0;0;ENG;
+GB;GB-NSM;North Somerset;0;0;ENG;
+GB;GB-NTY;North Tyneside;0;0;ENG;
+GB;GB-NYK;North Yorkshire;0;0;ENG;
+GB;GB-NTH;Northamptonshire;0;0;ENG;
+GB;GB-NBL;Northumberland;0;0;ENG;
+GB;GB-NGM;Nottingham;0;0;ENG;
+GB;GB-NTT;Nottinghamshire;0;0;ENG;
+GB;GB-OLD;Oldham;0;0;ENG;
+GB;GB-OMH;Omagh;0;0;NIR;
+GB;GB-ORK;Orkney Islands;0;0;SCT;
+GB;GB-OXF;Oxfordshire;0;0;ENG;
+GB;GB-PEM;Pembrokeshire [Sir Benfro GB-BNF];0;0;WLS;
+GB;GB-PKN;Perth and Kinross;0;0;SCT;
+GB;GB-PTE;Peterborough;0;0;ENG;
+GB;GB-PLY;Plymouth;0;0;ENG;
+GB;GB-POL;Poole;0;0;ENG;
+GB;GB-POR;Portsmouth;0;0;ENG;
+GB;GB-POW;Powys;0;0;WLS;
+GB;GB-RDG;Reading;0;0;ENG;
+GB;GB-RDB;Redbridge;0;0;ENG;
+GB;GB-RCC;Redcar and Cleveland;0;0;ENG;
+GB;GB-RFW;Renfrewshire;0;0;SCT;
+GB;GB-RCT;Rhondda, Cynon, Taff [Rhondda, Cynon,Taf];0;0;WLS;
+GB;GB-RIC;Richmond upon Thames;0;0;ENG;
+GB;GB-RCH;Rochdale;0;0;ENG;
+GB;GB-ROT;Rotherham;0;0;ENG;
+GB;GB-RUT;Rutland;0;0;ENG;
+GB;GB-SHN;St. Helens;0;0;ENG;
+GB;GB-SLF;Salford;0;0;ENG;
+GB;GB-SAW;Sandwell;0;0;ENG;
+GB;GB-SCB;Scottish Borders, The;0;0;SCT;
+GB;GB-SFT;Sefton;0;0;ENG;
+GB;GB-SHF;Sheffield;0;0;ENG;
+GB;GB-ZET;Shetland Islands;0;0;SCT;
+GB;GB-SHR;Shropshire;0;0;ENG;
+GB;GB-SLG;Slough;0;0;ENG;
+GB;GB-SOL;Solihull;0;0;ENG;
+GB;GB-SOM;Somerset;0;0;ENG;
+GB;GB-SAY;South Ayrshire;0;0;SCT;
+GB;GB-SGC;South Gloucestershire;0;0;ENG;
+GB;GB-SLK;South Lanarkshire;0;0;SCT;
+GB;GB-STY;South Tyneside;0;0;ENG;
+GB;GB-STH;Southampton;0;0;ENG;
+GB;GB-SOS;Southend-on-Sea;0;0;ENG;
+GB;GB-SWK;Southwark;0;0;ENG;
+GB;GB-STS;Staffordshire;0;0;ENG;
+GB;GB-STG;Stirling;0;0;SCT;
+GB;GB-SKP;Stockport;0;0;ENG;
+GB;GB-STT;Stockton-on-Tees;0;0;ENG;
+GB;GB-STE;Stoke-on-Trent;0;0;ENG;
+GB;GB-STB;Strabane;0;0;NIR;
+GB;GB-SFK;Suffolk;0;0;ENG;
+GB;GB-SND;Sunderland;0;0;ENG;
+GB;GB-SRY;Surrey;0;0;ENG;
+GB;GB-STN;Sutton;0;0;ENG;
+GB;GB-SWA;Swansea [Abertawe GB-ATA];0;0;WLS;
+GB;GB-SWD;Swindon;0;0;ENG;
+GB;GB-TAM;Tameside;0;0;ENG;
+GB;GB-TFW;Telford and Wrekin;0;0;ENG;
+GB;GB-THR;Thurrock;0;0;ENG;
+GB;GB-TOB;Torbay;0;0;ENG;
+GB;GB-TOF;Torfaen [Tor-faen];0;0;WLS;
+GB;GB-TWH;Tower Hamlets;0;0;ENG;
+GB;GB-TRF;Trafford;0;0;ENG;
+GB;GB-VGL;Vale of Glamorgan, The [Bro Morgannwg GB-BMG];0;0;WLS;
+GB;GB-WKF;Wakefield;0;0;ENG;
+GB;GB-WLL;Walsall;0;0;ENG;
+GB;GB-WFT;Waltham Forest;0;0;ENG;
+GB;GB-WND;Wandsworth;0;0;ENG;
+GB;GB-WRT;Warrington;0;0;ENG;
+GB;GB-WAR;Warwickshire;0;0;ENG;
+GB;GB-WBK;West Berkshire;0;0;ENG;
+GB;GB-WDU;West Dunbartonshire;0;0;SCT;
+GB;GB-WLN;West Lothian;0;0;SCT;
+GB;GB-WSX;West Sussex;0;0;ENG;
+GB;GB-WSM;Westminster;0;0;ENG;
+GB;GB-WGN;Wigan;0;0;ENG;
+GB;GB-WIL;Wiltshire;0;0;ENG;
+GB;GB-WNM;Windsor and Maidenhead;0;0;ENG;
+GB;GB-WRL;Wirral;0;0;ENG;
+GB;GB-WOK;Wokingham;0;0;ENG;
+GB;GB-WLV;Wolverhampton;0;0;ENG;
+GB;GB-WOR;Worcestershire;0;0;ENG;
+GB;GB-WRX;Wrexham [Wrecsam GB-WRC];0;0;WLS;
+GB;GB-YOR;York;0;0;ENG;
+GH;GH-AH;Ashanti;0;0;0
+GH;GH-BA;Brong-Ahafo;0;0;0
+GH;GH-CP;Central [Central1];0;0;0
+GH;GH-EP;Eastern [Eastern3];0;0;0
+GH;GH-AA;Greater Accra;0;0;0
+GH;GH-NP;Northern;0;0;0
+GH;GH-UE;Upper East;0;0;0
+GH;GH-UW;Upper West;0;0;0
+GH;GH-TV;Volta;0;0;0
+GH;GH-WP;Western;0;0;0
+GM;GM-B;Banjul;0;0;0;city
+GM;GM-L;Lower River;0;0;0division
+GM;GM-M;MacCarthy Island;0;0;0division
+GM;GM-N;North Bank;0;0;0division
+GM;GM-U;Upper River;0;0;0division
+GM;GM-W;Western [Western1] ;0;0;0division
+GN;GN-BE;Beyla;0;0;N
+GN;GN-BF;Boffa;0;0;B
+GN;GN-BK;Boke;0;0;B
+GN;GN-CO;Coyah;0;0;D
+GN;GN-DB;Dabola;0;0;F
+GN;GN-DL;Dalaba;0;0;M
+GN;GN-DI;Dinguiraye;0;0;F
+GN;GN-DU;Dubreka;0;0;D
+GN;GN-FA;Faranah;0;0;F
+GN;GN-FO;Forecariah;0;0;D
+GN;GN-FR;Fria;0;0;B
+GN;GN-GA;Gaoual;0;0;B
+GN;GN-GU;Guekedou;0;0;N
+GN;GN-KA;Kankan;0;0;K
+GN;GN-KE;Kerouane;0;0;K
+GN;GN-KD;Kindia;0;0;D
+GN;GN-KS;Kissidougou;0;0;F
+GN;GN-KB;Koubia;0;0;L
+GN;GN-KN;Koundara;0;0;B
+GN;GN-KO;Kouroussa;0;0;K
+GN;GN-LA;Labe;0;0;L
+GN;GN-LE;Lelouma;0;0;L
+GN;GN-LO;Lola;0;0;N
+GN;GN-MC;Macenta;0;0;N
+GN;GN-ML;Mali;0;0;L
+GN;GN-MM;Mamou;0;0;M
+GN;GN-MD;Mandiana;0;0;K
+GN;GN-NZ;Nzerekore;0;0;N
+GN;GN-PI;Pita;0;0;M
+GN;GN-SI;Siguiri;0;0;K
+GN;GN-TE;Telimele;0;0;D
+GN;GN-TO;Tougue;0;0;L
+GN;GN-YO;Yomou;0;0;N
+ML;ML-BKO;Bamako;0;0;0;district
+ML;ML-7;Gao;0;0;region
+ML;ML-9;Kayes;0;0;region
+ML;ML-8;Kidal;0;0;region
+ML;ML-2;Koulikoro;0;0;region
+ML;ML-5;Mopti;0;0;region
+ML;ML-4;Segou;0;0;region
+ML;ML-3;Sikasso;0;0;region
+ML;ML-6;Tombouctou;0;0;region
+MM;MM-07;Ayeyarwady;0;0;0division
+MM;MM-02;Bago;0;0;0division
+MM;MM-03;Magway;0;0;0division
+MM;MM-04;Mandalay;0;0;0division
+MM;MM-0;Sagaing;0;0;0division
+MM;MM-05;Tanintharyi;0;0;0division
+MM;MM-06;Yangon;0;0;0division
+MM;MM-4;Chin;0;0;0state
+MM;MM-08;Kachin;0;0;0state
+MM;MM-2;Kayah;0;0;0state
+MM;MM-3;Kayin;0;0;0state
+MM;MM-5;Mon;0;0;0state
+MM;MM-6;Rakhine;0;0;0state
+MM;MM-7;Shan;0;0;0state
+MN;MN-03;Ulaanbaatar;0;0;0;capital city
+MN;MN-073;Arhangay;0;0;province
+MN;MN-069;Bayanhongor;0;0;province
+MN;MN-07;Bayan-Olgiy [Bayan-lgiy];0;0;province
+MN;MN-067;Bulgan;0;0;province
+MN;MN-037;Darhan uul;0;0;province
+MN;MN-06;Dornod;0;0;province
+MN;MN-063;Dornogovi [Dornogov];0;0;province
+MN;MN-059;Dundgovi [Dundgov];0;0;province
+MN;MN-057;Dzavhan;0;0;province
+MN;MN-065;Govi-Altay [Gov-Altay];0;0;province
+MN;MN-064;Gov-Sümber;0;0;province
+MN;MN-039;Hentiy;0;0;province
+MN;MN-043;Hovd;0;0;province
+MN;MN-04;Hovsgol [Hvsgl];0;0;province
+MN;MN-053;Omnogovi [mngov];0;0;province
+MN;MN-035;Orhon;0;0;province
+MN;MN-055;Ovorhangay [vrhangay];0;0;province
+MN;MN-049;Selenge;0;0;province
+MN;MN-05;Suhbaatar [Sühbaatar];0;0;province
+MN;MN-047;Tov [Tv];0;0;province
+MN;MN-046;Uvs;0;0;province
+MR;MR-NKC;Nouakchott;0;0;0;district
+MR;MR-07;Adrar;0;0;region
+MR;MR-03;Assaba;0;0;region
+MR;MR-05;Brakna;0;0;region
+MR;MR-08;Dakhlet Nouadhibou;0;0;region
+MR;MR-04;Gorgol;0;0;region
+MR;MR-0;Guidimaka;0;0;region
+MR;MR-0;Hodh ech Chargui;0;0;region
+MR;MR-02;Hodh el Gharbi;0;0;region
+MR;MR-2;Inchiri;0;0;region
+MR;MR-09;Tagant;0;0;region
+MR;MR-;Tiris Zemmour;0;0;region
+MR;MR-06;Trarza;0;0;region
+MU;MU-BR;Beau Bassin-Rose Hill;0;0;0;city
+MU;MU-CU;Curepipe;0;0;0;city
+MU;MU-PU;Port Louis;0;0;0;city
+MU;MU-QB;Quatre Bornes;0;0;0;city
+MU;MU-VP;Vacoas-Phoenix;0;0;0;city
+MU;MU-BL;Black River;0;0;0;district
+MU;MU-FL;Flacq;0;0;0;district
+MU;MU-GP;Grand Port;0;0;0;district
+MU;MU-MO;Moka;0;0;0;district
+MU;MU-PA;Pamplemousses;0;0;0;district
+MU;MU-PW;Plaines Wilhems;0;0;0;district
+MU;MU-PL;Port Louis;0;0;0;district
+MU;MU-RR;Riviere du Rempart;0;0;0;district
+MU;MU-SA;Savanne;0;0;0;district
+MU;MU-AG;Agalega Islands;0;0;0dependency
+MU;MU-CC;Cargados Carajos Shoals [Saint Brandon Islands];0;0;0dependency
+MU;MU-RO;Rodrigues Island;0;0;0dependency
+MV;MV-MLE;Male;0;0;0;capital
+MV;MV-02;Alif;0;0;0administrative atoll
+MV;MV-20;Baa;0;0;0administrative atoll
+MV;MV-7;Dhaalu;0;0;0administrative atoll
+MV;MV-4;Faafu;0;0;0administrative atoll
+MV;MV-27;Gaaf Alif;0;0;0administrative atoll
+MV;MV-28;Gaafu Dhaalu;0;0;0administrative atoll
+MV;MV-29;Gnaviyani;0;0;0administrative atoll
+MV;MV-07;Haa Alif;0;0;0administrative atoll
+MV;MV-23;Haa Dhaalu;0;0;0administrative atoll
+MV;MV-26;Kaafu;0;0;0administrative atoll
+MV;MV-05;Laamu;0;0;0administrative atoll
+MV;MV-03;Lhaviyani;0;0;0administrative atoll
+MV;MV-2;Meemu;0;0;0administrative atoll
+MV;MV-25;Noonu;0;0;0administrative atoll
+MV;MV-3;Raa;0;0;0administrative atoll
+MV;MV-0;Seenu;0;0;0administrative atoll
+MV;MV-24;Shaviyani;0;0;0administrative atoll
+MV;MV-08;Thaa;0;0;0administrative atoll
+MV;MV-04;Vaavu;0;0;0administrative atoll
+MW;MW-BA;Balaka;0;0;S
+MW;MW-BL;Blantyre;0;0;S
+MW;MW-CK;Chikwawa;0;0;S
+MW;MW-CR;Chiradzulu;0;0;S
+MW;MW-CT;Chitipa;0;0;N
+MW;MW-DE;Dedza;0;0;C
+MW;MW-DO;Dowa;0;0;C
+MW;MW-KR;Karonga;0;0;N
+MW;MW-KS;Kasungu;0;0;C
+MW;MW-LK;Likoma Island;0;0;N
+MW;MW-LI;Lilongwe;0;0;C
+MW;MW-MH;Machinga;0;0;S
+MW;MW-MG;Mangochi;0;0;S
+MW;MW-MC;Mchinji;0;0;C
+MW;MW-MU;Mulanje;0;0;S
+MW;MW-MW;Mwanza;0;0;S
+MW;MW-MZ;Mzimba;0;0;N
+MW;MW-NB;Nkhata Bay;0;0;N
+MW;MW-NK;Nkhotakota;0;0;C
+MW;MW-NS;Nsanje;0;0;S
+MW;MW-NU;Ntcheu;0;0;C
+MW;MW-NI;Ntchisi;0;0;C
+MW;MW-PH;Phalombe;0;0;S
+MW;MW-RU;Rumphi;0;0;N
+MW;MW-SA;Salima;0;0;C
+MW;MW-TH;Thyolo;0;0;S
+MW;MW-ZO;Zomba;0;0;S
+MW;MW-C;Central [Central4];0;0;C
+MW;MW-N;Northern [Northern1];0;0;N
+MW;MW-S;Southern [Southern2];0;0;S
+MX;MX-DIF;Distrito Federal;0;0;0;federal district
+MX;MX-AGU;Aguascalientes;0;0;0state
+MX;MX-BCN;Baja California;0;0;0state
+MX;MX-BCS;Baja California Sur;0;0;0state
+MX;MX-CAM;Campeche;0;0;0state
+MX;MX-COA;Coahuila;0;0;0state
+MX;MX-COL;Colima;0;0;0state
+MX;MX-CHP;Chiapas;0;0;0state
+MX;MX-CHH;Chihuahua;0;0;0state
+MX;MX-DUR;Durango;0;0;0state
+MX;MX-GUA;Guanajuato;0;0;0state
+MX;MX-GRO;Guerrero;0;0;0state
+MX;MX-HID;Hidalgo;0;0;0state
+MX;MX-JAL;Jalisco;0;0;0state
+MX;MX-MEX;Mexico;0;0;0state
+MX;MX-MIC;Michoacn;0;0;0state
+MX;MX-MOR;Morelos;0;0;0state
+MX;MX-NAY;Nayarit;0;0;0state
+MX;MX-NLE;Nuevo Len;0;0;0state
+MX;MX-OAX;Oaxaca;0;0;0state
+MX;MX-PUE;Puebla;0;0;0state
+MX;MX-QUE;Queretaro;0;0;0state
+MX;MX-ROO;Quintana Roo;0;0;0state
+MX;MX-SLP;San Luis Potos;0;0;0state
+MX;MX-SIN;Sinaloa;0;0;0state
+MX;MX-SON;Sonora;0;0;0state
+MX;MX-TAB;Tabasco;0;0;0state
+MX;MX-TAM;Tamaulipas;0;0;0state
+MX;MX-TLA;Tlaxcala;0;0;0state
+MX;MX-VER;Veracruz;0;0;0state
+MX;MX-YUC;Yucatn;0;0;0state
+MX;MX-ZAC;Zacatecas;0;0;0state
+MY;MY-4;Wilayah Persekutuan Kuala Lumpur;0;0;0;federal territory
+MY;MY-5;Wilayah Persekutuan Labuan;0;0;0;federal territory
+MY;MY-0;Johor;0;0;0state
+MY;MY-02;Kedah;0;0;0state
+MY;MY-03;Kelantan;0;0;0state
+MY;MY-04;Melaka;0;0;0state
+MY;MY-05;Negeri Sembilan;0;0;0state
+MY;MY-06;Pahang;0;0;0state
+MY;MY-08;Perak;0;0;0state
+MY;MY-09;Perlis;0;0;0state
+MY;MY-07;Pulau Pinang;0;0;0state
+MY;MY-2;Sabah;0;0;0state
+MY;MY-3;Sarawak;0;0;0state
+MY;MY-0;Selangor;0;0;0state
+MY;MY-;Terengganu;0;0;0state
+MZ;MZ-MPM;Maputo;0;0;0;city
+MZ;MZ-P;Cabo Delgado;0;0;province
+MZ;MZ-G;Gaza;0;0;province
+MZ;MZ-I;Inhambane;0;0;province
+MZ;MZ-B;Manica;0;0;province
+MZ;MZ-L;Maputo;0;0;province
+MZ;MZ-N;Nampula;0;0;province
+MZ;MZ-A;Niassa;0;0;province
+MZ;MZ-S;Sofala;0;0;province
+MZ;MZ-T;Tete;0;0;province
+MZ;MZ-Q;Zambezia;0;0;province
+NA;NA-CA;Caprivi;0;0;0
+NA;NA-ER;Erongo;0;0;0
+NA;NA-HA;Hardap;0;0;0
+NA;NA-KA;Karas;0;0;0
+NA;NA-KH;Khomas;0;0;0
+NA;NA-KU;Kunene;0;0;0
+NA;NA-OW;Ohangwena;0;0;0
+NA;NA-OK;Okavango;0;0;0
+NA;NA-OH;Omaheke;0;0;0
+NA;NA-OS;Omusati;0;0;0
+NA;NA-ON;Oshana;0;0;0
+NA;NA-OT;Oshikoto;0;0;0
+NA;NA-OD;Otjozondjupa;0;0;0
+NE;NE-8;Niamey;0;0;0urban community
+NE;NE-9;Agadez;0;0;0department
+NE;NE-2;Diffa;0;0;0department
+NE;NE-3;Dosso;0;0;0department
+NE;NE-4;Maradi;0;0;0department
+NE;NE-5;Tahoua;0;0;0department
+NE;NE-6;Tillaberi;0;0;0department
+NE;NE-7;Zinder;0;0;0department
+NG;NG-FC;Abuja Capital Territory;0;0;0;capital territory
+NG;NG-AB;Abia;0;0;0state
+NG;NG-AD;Adamawa;0;0;0state
+NG;NG-AK;Akwa Ibom;0;0;0state
+NG;NG-AN;Anambra;0;0;0state
+NG;NG-BA;Bauchi;0;0;0state
+NG;NG-BY;Bayelsa;0;0;0state
+NG;NG-BE;Benue;0;0;0state
+NG;NG-BO;Borno;0;0;0state
+NG;NG-CR;Cross River;0;0;0state
+NG;NG-DE;Delta;0;0;0state
+NG;NG-EB;Ebonyi;0;0;0state
+NG;NG-ED;Edo;0;0;0state
+NG;NG-EK;Ekiti;0;0;0state
+NG;NG-EN;Enugu;0;0;0state
+NG;NG-GO;Gombe;0;0;0state
+NG;NG-IM;Imo;0;0;0state
+NG;NG-JI;Jigawa;0;0;0state
+NG;NG-KD;Kaduna;0;0;0state
+NG;NG-KN;Kano;0;0;0state
+NG;NG-KT;Katsina;0;0;0state
+NG;NG-KE;Kebbi;0;0;0state
+NG;NG-KO;Kogi;0;0;0state
+NG;NG-KW;Kwara;0;0;0state
+NG;NG-LA;Lagos;0;0;0state
+NG;NG-NA;Nassarawa;0;0;0state
+NG;NG-NI;Niger;0;0;0state
+NG;NG-OG;Ogun;0;0;0state
+NG;NG-ON;Ondo;0;0;0state
+NG;NG-OS;Osun;0;0;0state
+NG;NG-OY;Oyo;0;0;0state
+NG;NG-PL;Plateau;0;0;0state
+NG;NG-RI;Rivers;0;0;0state
+NG;NG-SO;Sokoto;0;0;0state
+NG;NG-TA;Taraba;0;0;0state
+NG;NG-YO;Yobe;0;0;0state
+NG;NG-ZA;Zamfara;0;0;0state
+NI;NI-BO;Boaco;0;0;0department
+NI;NI-CA;Carazo;0;0;0department
+NI;NI-CI;Chinandega;0;0;0department
+NI;NI-CO;Chontales;0;0;0department
+NI;NI-ES;Estel;0;0;0department
+NI;NI-GR;Granada;0;0;0department
+NI;NI-JI;Jinotega;0;0;0department
+NI;NI-LE;Len;0;0;0department
+NI;NI-MD;Madriz;0;0;0department
+NI;NI-MN;Managua;0;0;0department
+NI;NI-MS;Masaya;0;0;0department
+NI;NI-MT;Matagalpa;0;0;0department
+NI;NI-NS;Nueva Segovia;0;0;0department
+NI;NI-SJ;Ro San Juan;0;0;0department
+NI;NI-RI;Rivas;0;0;0department
+NI;NI-AN;Atlntico Norte;0;0;autonomous region
+NI;NI-AS;Atlntico Sur;0;0;autonomous region
+NL;NL-DR;Drenthe;0;0;0
+NL;NL-FL;Flevoland;0;0;0
+NL;NL-FR;Friesland;0;0;0
+NL;NL-GE;Gelderland;0;0;0
+NL;NL-GR;Groningen;0;0;0
+NL;NL-LI;Limburg;0;0;0
+NL;NL-NB;Noord-Brabant;0;0;0
+NL;NL-NH;Noord-Holland;0;0;0
+NL;NL-OV;Overijssel;0;0;0
+NL;NL-UT;Utrecht;0;0;0
+NL;NL-ZE;Zeeland;0;0;0
+NL;NL-ZH;Zuid-Holland;0;0;0
+NO;NO-02;Akershus;0;0;0
+NO;NO-09;Aust-Agder;0;0;0
+NO;NO-06;Buskerud;0;0;0
+NO;NO-20;Finnmark;0;0;0
+NO;NO-04;Hedmark;0;0;0
+NO;NO-2;Hordaland;0;0;0
+NO;NO-5;Mre og Romsdal;0;0;0
+NO;NO-8;Nordland;0;0;0
+NO;NO-7;Nord-Trndelag;0;0;0
+NO;NO-05;Oppland;0;0;0
+NO;NO-03;Oslo;0;0;0
+NO;NO-21;Rogaland;0;0;0
+NO;NO-4;Sogn og Fjordane;0;0;0
+NO;NO-6;Sr-Trndelag;0;0;0
+NO;NO-08;Telemark;0;0;0
+NO;NO-9;Troms;0;0;0
+NO;NO-0;Vest-Agder;0;0;0
+NO;NO-07;Vestfold;0;0;0
+NO;NO-0;stfold;0;0;0
+NO;NO-22;Jan Mayen (Arctic Region) (See also country code SJ);0;0;0
+NO;NO-2;Svalbard (Arctic Region) (See also country code SJ);0;0;0
+NP;NP-BA;Bagmati;0;0;0
+NP;NP-BH;Bheri;0;0;2
+NP;NP-DH;Dhawalagiri;0;0;3
+NP;NP-GA;Gandaki;0;0;3
+NP;NP-JA;Janakpur;0;0;0
+NP;NP-KA;Karnali;0;0;2
+NP;NP-KO;Kosi [Koshi];0;0;4
+NP;NP-LU;Lumbini;0;0;3
+NP;NP-MA;Mahakali;0;0;5
+NP;NP-ME;Mechi;0;0;4
+NP;NP-NA;Narayani;0;0;0
+NP;NP-RA;Rapti;0;0;2
+NP;NP-SA;Sagarmatha;0;0;4
+NP;NP-SE;Seti;0;0;5
+NZ;NZ-AUK;Auckland;0;0;N
+NZ;NZ-BOP;Bay of Plenty;0;0;N
+NZ;NZ-CAN;Canterbury;0;0;S
+NZ;NZ-GIS;Gisborne;0;0;N
+NZ;NZ-HKB;Hawkess Bay;0;0;N
+NZ;NZ-MWT;Manawatu-Wanganui;0;0;N
+NZ;NZ-MBH;Marlborough;0;0;S;
+NZ;NZ-NSN;Nelson;0;0;S;
+NZ;NZ-NTL;Northland;0;0;N;
+NZ;NZ-OTA;Otago;0;0;S;
+NZ;NZ-STL;Southland;0;0;S;
+NZ;NZ-TKI;Taranaki;0;0;N;
+NZ;NZ-TAS;Tasman;0;0;S;
+NZ;NZ-WKO;Waikato;0;0;N;
+NZ;NZ-WGN;Wellington;0;0;N;
+NZ;NZ-WTC;West Coast;0;0;S;
+OM;OM-DA;Ad Dakhiliyah;0;0;0
+OM;OM-BA;Al Bainah;0;0;0
+OM;OM-JA;Al Janbyah [Zufr];0;0;0
+OM;OM-WU;Al Wus;0;0;0
+OM;OM-SH;Ash Sharqyah;0;0;0
+OM;OM-ZA;Az Zhirah;0;0;0
+OM;OM-MA;Masqa;0;0;0
+OM;OM-MU;Musandam;0;0;0
+PA;PA-;Bocas del Toro;0;0;province
+PA;PA-2;Cocle;0;0;province
+PA;PA-3;Coln;0;0;province
+PA;PA-4;Chiriqu;0;0;province
+PA;PA-5;Darien;0;0;province
+PA;PA-6;Herrera;0;0;province
+PA;PA-7;Los Santos;0;0;province
+PA;PA-8;Panam;0;0;province
+PA;PA-9;Veraguas;0;0;province
+PA;PA-0;Comarca de San Blas;0;0;0special territory
+PE;PE-CAL;El Callao;0;0;0constitutional province
+PE;PE-AMA;Amazonas;0;0;0department
+PE;PE-ANC;Ancash;0;0;0department
+PE;PE-APU;Apurimac;0;0;0department
+PE;PE-ARE;Arequipa;0;0;0department
+PE;PE-AYA;Ayacucho;0;0;0department
+PE;PE-CAJ;Cajamarca;0;0;0department
+PE;PE-CUS;Cuzco [Cusco];0;0;0department
+PE;PE-HUV;Huancavelica;0;0;0department
+PE;PE-HUC;Huanuco;0;0;0department
+PE;PE-ICA;Ica;0;0;0department
+PE;PE-JUN;Junin;0;0;0department
+PE;PE-LAL;La Libertad;0;0;0department
+PE;PE-LAM;Lambayeque;0;0;0department
+PE;PE-LIM;Lima;0;0;0department
+PE;PE-LOR;Loreto;0;0;0department
+PE;PE-MDD;Madre de Dios;0;0;0department
+PE;PE-MOQ;Moquegua;0;0;0department
+PE;PE-PAS;Pasco;0;0;0department
+PE;PE-PIU;Piura;0;0;0department
+PE;PE-PUN;Puno;0;0;0department
+PE;PE-SAM;San Martin;0;0;0department
+PE;PE-TAC;Tacna;0;0;0department
+PE;PE-TUM;Tumbes;0;0;0department
+PE;PE-UCA;Ucayali;0;0;0department
+PG;PG-NCD;National Capital District (Port Moresby);0;0;0;district
+PG;PG-CPM;Central;0;0;province
+PG;PG-CPK;Chimbu;0;0;province
+PG;PG-EHG;Eastern Highlands;0;0;province
+PG;PG-EBR;East New Britain;0;0;province
+PG;PG-ESW;East Sepik;0;0;province
+PG;PG-EPW;Enga;0;0;province
+PG;PG-GPK;Gulf;0;0;province
+PG;PG-MPM;Madang;0;0;province
+PG;PG-MRL;Manus;0;0;province
+PG;PG-MBA;Milne Bay;0;0;province
+PG;PG-MPL;Morobe;0;0;province
+PG;PG-NIK;New Ireland;0;0;province
+PG;PG-NPP;Northern;0;0;province
+PG;PG-NSA;North Solomons;0;0;province
+PG;PG-SAN;Sandaun [West Sepik];0;0;province
+PG;PG-SHM;Southern Highlands;0;0;province
+PG;PG-WPD;Western;0;0;province
+PG;PG-WHM;Western Highlands;0;0;province
+PG;PG-WBK;West New Britain;0;0;province
+PH;PH-ABR;Abra;0;0;5
+PH;PH-AGN;Agusan del Norte;0;0;3
+PH;PH-AGS;Agusan del Sur;0;0;3
+PH;PH-AKL;Aklan;0;0;06
+PH;PH-ALB;Albay;0;0;05
+PH;PH-ANT;Antique;0;0;06
+PH;PH-APA;Apayao;0;0;5
+PH;PH-AUR;Aurora;0;0;04
+PH;PH-BAS;Basilan;0;0;09
+PH;PH-BAN;Bataan;0;0;03
+PH;PH-BTN;Batanes;0;0;02
+PH;PH-BTG;Batangas;0;0;04
+PH;PH-BEN;Benguet;0;0;5
+PH;PH-BIL;Biliran;0;0;08
+PH;PH-BOH;Bohol;0;0;07
+PH;PH-BUK;Bukidnon;0;0;0
+PH;PH-BUL;Bulacan;0;0;03
+PH;PH-CAG;Cagayan;0;0;02
+PH;PH-CAN;Camarines Norte;0;0;05
+PH;PH-CAS;Camarines Sur;0;0;05
+PH;PH-CAM;Camiguin;0;0;0
+PH;PH-CAP;Capiz;0;0;06
+PH;PH-CAT;Catanduanes;0;0;05
+PH;PH-CAV;Cavite;0;0;04
+PH;PH-CEB;Cebu;0;0;07
+PH;PH-COM;Compostela Valley;0;0;0
+PH;PH-DAV;Davao del Norte;0;0;0
+PH;PH-DAS;Davao del Sur;0;0;0
+PH;PH-DAO;Davao Oriental;0;0;0
+PH;PH-EAS;Eastern Samar;0;0;08
+PH;PH-GUI;Guimaras;0;0;06
+PH;PH-IFU;Ifugao;0;0;5
+PH;PH-ILN;Ilocos Norte;0;0;0
+PH;PH-ILS;Ilocos Sur;0;0;0
+PH;PH-ILI;Iloilo;0;0;06
+PH;PH-ISA;Isabela;0;0;02
+PH;PH-KAL;Kalinga;0;0;5
+PH;PH-LAG;Laguna;0;0;04
+PH;PH-LAN;Lanao del Norte;0;0;2
+PH;PH-LAS;Lanao del Sur;0;0;4
+PH;PH-LUN;La Union;0;0;0
+PH;PH-LEY;Leyte;0;0;08
+PH;PH-MAG;Maguindanao;0;0;4
+PH;PH-MAD;Marinduque;0;0;04
+PH;PH-MAS;Masbate;0;0;05
+PH;PH-MDC;Mindoro Occidental;0;0;04
+PH;PH-MDR;Mindoro Oriental;0;0;04
+PH;PH-MSC;Misamis Occidental;0;0;0
+PH;PH-MSR;Misamis Oriental;0;0;0
+PH;PH-MOU;Mountain Province;0;0;5
+PH;PH-NEC;Negros Occidental;0;0;06
+PH;PH-NER;Negros Oriental;0;0;07
+PH;PH-NCO;North Cotabato;0;0;2
+PH;PH-NSA;Northern Samar;0;0;08
+PH;PH-NUE;Nueva Ecija;0;0;03
+PH;PH-NUV;Nueva Vizcaya;0;0;02
+PH;PH-PLW;Palawan;0;0;04
+PH;PH-PAM;Pampanga;0;0;03
+PH;PH-PAN;Pangasinan;0;0;0
+PH;PH-QUE;Quezon;0;0;04
+PH;PH-QUI;Quirino;0;0;02
+PH;PH-RIZ;Rizal;0;0;04
+PH;PH-ROM;Romblon;0;0;04
+PH;PH-SAR;Sarangani;0;0;0
+PH;PH-SIG;Siquijor;0;0;07
+PH;PH-SOR;Sorsogon;0;0;05
+PH;PH-SCO;South Cotabato;0;0;0
+PH;PH-SLE;Southern Leyte;0;0;08
+PH;PH-SUK;Sultan Kudarat;0;0;2
+PH;PH-SLU;Sulu;0;0;4
+PH;PH-SUN;Surigao del Norte;0;0;3
+PH;PH-SUR;Surigao del Sur;0;0;3
+PH;PH-TAR;Tarlac;0;0;03
+PH;PH-TAW;Tawi-Tawi;0;0;4
+PH;PH-WSA;Western Samar;0;0;08
+PH;PH-ZMB;Zambales;0;0;03
+PH;PH-ZAN;Zamboanga del Norte;0;0;09
+PH;PH-ZAS;Zamboanga del Sur;0;0;09
+PH;PH-ZSI;Zamboanga Sibuguey [Zamboanga Sibugay];0;0;09
+PK;PK-IS;Islamabad;0;0;0;federal capital territory
+PK;PK-BA;Baluchistan [Baluchistan (en)];Balochistn (ur);0;0;province
+PK;PK-NW;N.W.F.P. [North-West Frontier];0;0;province
+PK;PK-PB;Punjab;0;0;province
+PK;PK-SD;Sind [Sind (en)];Sindh (ur);0;0;province
+PK;PK-TA;F.A.T.A. [Federally Administered Tribal Areas];0;0;0;territory
+PK;PK-JK;Jammu and Kashmir [Azad Kashmir];0;0;0;Pakistan administered area
+PK;PK-NA;Northern Areas;0;0;0;Pakistan administered area
+PL;PL-DS;Dolnoelskie;0;0;0
+PL;PL-KP;Kujawsko-pomorskie;0;0;0
+PL;PL-LU;Lubelskie;0;0;0
+PL;PL-LB;Lubuskie;0;0;0
+PL;PL-LD;£dzkie;0;0;0
+PL;PL-MA;Ma³opolskie;0;0;0
+PL;PL-MZ;Mazowieckie;0;0;0
+PL;PL-OP;Opolskie;0;0;0
+PL;PL-PK;Podkarpackie;0;0;0
+PL;PL-PD;Podlaskie;0;0;0
+PL;PL-PM;Pomorskie;0;0;0
+PL;PL-SL;elskie;0;0;0
+PL;PL-SK;ewietokrzyskie;0;0;0
+PL;PL-WN;Warmisko-mazurskie;0;0;0
+PL;PL-WP;Wielkopolskie;0;0;0
+PL;PL-ZP;Zachodniopomorskie;0;0;0
+PT;PT-0;Aveiro;0;0;0;district
+PT;PT-02;Beja;0;0;0;district
+PT;PT-03;Braga;0;0;0;district
+PT;PT-04;Braganca;0;0;0;district
+PT;PT-05;Castelo Branco;0;0;0;district
+PT;PT-06;Coimbra;0;0;0;district
+PT;PT-07;vora;0;0;0;district
+PT;PT-08;Faro;0;0;0;district
+PT;PT-09;Guarda;0;0;0;district
+PT;PT-0;Leiria;0;0;0;district
+PT;PT-;Lisboa;0;0;0;district
+PT;PT-2;Portalegre;0;0;0;district
+PT;PT-3;Porto;0;0;0;district
+PT;PT-4;Santarem;0;0;0;district
+PT;PT-5;Setbal;0;0;0;district
+PT;PT-6;Viana do Castelo;0;0;0;district
+PT;PT-7;Vila Real;0;0;0;district
+PT;PT-8;Viseu;0;0;0;district
+PT;PT-20;Regio Autnoma dos Acores;0;0;autonomous region
+PT;PT-30;Regio Autnoma da Madeira;0;0;autonomous region
+PY;PY-ASU;Asuncion;0;0;0;capital
+PY;PY-6;Alto Paraguay;0;0;0department
+PY;PY-0;Alto Parana;0;0;0department
+PY;PY-3;Amambay;0;0;0department
+PY;PY-19;Boqueron;0;0;0department
+PY;PY-5;Caaguaz;0;0;0department
+PY;PY-16;Caazapa;0;0;0department
+PY;PY-14;Canindeyu;0;0;0department
+PY;PY-17;Central;0;0;0department
+PY;PY-18;Concepcion;0;0;0department
+PY;PY-13;Cordillera;0;0;0department
+PY;PY-4;Guaira;0;0;0department
+PY;PY-7;Itapua;0;0;0department
+PY;PY-8;Misiones;0;0;0department
+PY;PY-2;Neembucu;0;0;0department
+PY;PY-9;Paraguari;0;0;0department
+PY;PY-15;Presidente Hayes;0;0;0department
+PY;PY-12;San Pedro;0;0;0department
+QA;QA-DA;Ad Dawah;0;0;0
+QA;QA-GH;Al Ghuwayriyah;0;0;0
+QA;QA-JU;Al Jumayliyah;0;0;0
+QA;QA-KH;Al Khawr;0;0;0
+QA;QA-WA;Al Wakrah;0;0;0
+QA;QA-RA;Ar Rayyan;0;0;0
+QA;QA-JB;Jariyan al Banah;0;0;0
+QA;QA-MS;Madnat ash Shaml;0;0;0
+QA;QA-US;Umm all;0;0;0
+RO;RO-B;Bucureti;0;0;0municipality
+RO;RO-AB;Alba;0;0;0department
+RO;RO-AR;Arad;0;0;0department
+RO;RO-AG;Arge;0;0;0department
+RO;RO-BC;Bacu;0;0;0department
+RO;RO-BH;Bihor;0;0;0department
+RO;RO-BN;Bistria-Nsud;0;0;0department
+RO;RO-BT;Botoani;0;0;0department
+RO;RO-BV;Braov;0;0;0department
+RO;RO-BR;Brila;0;0;0department
+RO;RO-BZ;Buzu;0;0;0department
+RO;RO-CS;Cara-Severin;0;0;0department
+RO;RO-CL;Clrai;0;0;0department
+RO;RO-CJ;Cluj;0;0;0department
+RO;RO-CT;Constana;0;0;0department
+RO;RO-CV;Covasna;0;0;0department
+RO;RO-DB;Dambovia;0;0;0department
+RO;RO-DJ;Dolj;0;0;0department
+RO;RO-GL;Galai;0;0;0department
+RO;RO-GR;Giurgiu;0;0;0department
+RO;RO-GJ;Gorj;0;0;0department
+RO;RO-HR;Harghita;0;0;0department
+RO;RO-HD;Hunedoara;0;0;0department
+RO;RO-IL;Ialomia;0;0;0department
+RO;RO-IS;Iai;0;0;0department
+RO;RO-MM;Maramure;0;0;0department
+RO;RO-MH;Mehedini;0;0;0department
+RO;RO-MS;Mure;0;0;0department
+RO;RO-NT;Neam;0;0;0department
+RO;RO-OT;Olt;0;0;0department
+RO;RO-PH;Prahova;0;0;0department
+RO;RO-SM;Satu Mare;0;0;0department
+RO;RO-SJ;Slaj;0;0;0department
+RO;RO-SB;Sibiu;0;0;0department
+RO;RO-SV;Suceava;0;0;0department
+RO;RO-TR;Teleorman;0;0;0department
+RO;RO-TM;Timi;0;0;0department
+RO;RO-TL;Tulcea;0;0;0department
+RO;RO-VS;Vaslui;0;0;0department
+RO;RO-VL;Valcea;0;0;0department
+RO;RO-VN;Vrancea;0;0;0department
+RU;RU-AD;Adygeya, Respublika;Adygeja, Respublika;0;0;republic
+RU;RU-AL;Altay, Respublika;Altaj, Respublika;0;0;republic
+RU;RU-BA;Bashkortostan, Respublika;Bakortostan, Respublika;0;0;republic
+RU;RU-BU;Buryatiya, Respublika;Burjatija, Respublika;0;0;republic
+RU;RU-CE;Chechenskaya Respublika;eeenskaja Respublika;0;0;republic
+RU;RU-CU;Chuvashskaya Respublika;uvaskaja Respublika;0;0;republic
+RU;RU-DA;Dagestan, Respublika;Dagestan, Respublika;0;0;republic
+RU;RU-IN;Ingushskaya Respublika [Respublika Ingushetiya];Inguskaja Respublika [Respublika Inguetija];0;0;republic
+RU;RU-KB;Kabardino-Balkarskaya Respublika;Kabardino-Balkarskaja Respublika;0;0;republic
+RU;RU-KL;Kalmykiya, Respublika;Kalmykija, Respublika;0;0;republic
+RU;RU-KC;Karachayevo-Cherkesskaya Respublika;Karaeajevo-erkesskaja Respublika;0;0;republic
+RU;RU-KR;Kareliya, Respublika;Karelija, Respublika;0;0;republic
+RU;RU-KK;Khakasiya, Respublika;Hakasija, Respublika;0;0;republic
+RU;RU-KO;Komi, Respublika;Komi, Respublika;0;0;republic
+RU;RU-ME;Mariy El, Respublika;Marij l, Respublika;0;0;republic
+RU;RU-MO;Mordoviya, Respublika;Mordovija, Respublika;0;0;republic
+RU;RU-SA;Sakha, Respublika [Yakutiya];Saha, Respublika [Jakutija];0;0;republic
+RU;RU-SE;Severnaya Osetiya, Respublika [Alaniya] [Respublika Severnaya Osetiya-Alaniya];Severnaja Osetija, Respublika [Alanija] [Respublika Severnaja Osetija-Alanija];0;0;republic
+RU;RU-TA;Tatarstan, Respublika;Tatarstan, Respublika;0;0;republic
+RU;RU-TY;Tyva, Respublika [Tuva];Tyva, Respublika [Tuva];0;0;republic
+RU;RU-UD;Udmurtskaya Respublika;Udmurtskaja Respublika;0;0;republic
+RU;RU-ALT;Altayskiy kray;Altajskij kraj;0;0;administrative territory
+RU;RU-KHA;Khabarovskiy kray;Habarovskij kraj;0;0;administrative territory
+RU;RU-KDA;Krasnodarskiy kray;Krasnodarskij kraj;0;0;administrative territory
+RU;RU-KYA;Krasnoyarskiy kray;Krasnojarskij kraj;0;0;administrative territory
+RU;RU-PRI;Primorskiy kray;Primorskij kraj;0;0;administrative territory
+RU;RU-STA;Stavropolskiy kray;Stavropolskij kraj;0;0;administrative territory
+RU;RU-AMU;Amurskaya oblast;Amurskaja oblast;0;0;administrative region
+RU;RU-ARK;Arkhangelskaya oblast;Arhangelskaja oblast;0;0;administrative region
+RU;RU-AST;Astrakhanskaya oblast;Astrahanskaja oblast;0;0;administrative region
+RU;RU-BEL;Belgorodskaya oblast;Belgorodskaja oblast;0;0;administrative region
+RU;RU-BRY;Bryanskaya oblast;Brjanskaja oblast;0;0;administrative region
+RU;RU-CHE;Chelyabinskaya oblast;eljabinskaja oblast;0;0;administrative region
+RU;RU-CHI;Chitinskaya oblast;itinskaja oblast;0;0;administrative region
+RU;RU-IRK;Irkutskaya oblast;Irkutskaja oblast;0;0;administrative region
+RU;RU-IVA;Ivanovskaya oblast;Ivanovskaja oblast;0;0;administrative region
+RU;RU-KGD;Kaliningradskaya oblast;Kaliningradskaja oblast;0;0;administrative region
+RU;RU-KLU;Kaluzhskaya oblast;Kaluskaja oblast;0;0;administrative region
+RU;RU-KAM;Kamchatskaya oblast;Kameatskaja oblast;0;0;administrative region
+RU;RU-KEM;Kemerovskaya oblast;Kemerovskaja oblast;0;0;administrative region
+RU;RU-KIR;Kirovskaya oblast;Kirovskaja oblast;0;0;administrative region
+RU;RU-KOS;Kostromskaya oblast;Kostromskaja oblast;0;0;administrative region
+RU;RU-KGN;Kurganskaya oblast;Kurganskaja oblast;0;0;administrative region
+RU;RU-KRS;Kurskaya oblast;Kurskaja oblast;0;0;administrative region
+RU;RU-LEN;Leningradskaya oblast;Leningradskaja oblast;0;0;administrative region
+RU;RU-LIP;Lipetskaya oblast;Lipetskaja oblast;0;0;administrative region
+RU;RU-MAG;Magadanskaya oblast;Magadanskaja oblast;0;0;administrative region
+RU;RU-MOS;Moskovskaya oblast;Moskovskaja oblast;0;0;administrative region
+RU;RU-MUR;Murmanskaya oblast;Murmanskaja oblast;0;0;administrative region
+RU;RU-NIZ;Nizhegorodskaya oblast;Niegorodskaja oblast;0;0;administrative region
+RU;RU-NGR;Novgorodskaya oblast;Novgorodskaja oblast;0;0;administrative region
+RU;RU-NVS;Novosibirskaya oblast;Novosibirskaja oblast;0;0;administrative region
+RU;RU-OMS;Omskaya oblast;Omskaja oblast;0;0;administrative region
+RU;RU-ORE;Orenburgskaya oblast;Orenburgskaja oblast;0;0;administrative region
+RU;RU-ORL;Orlovskaya oblast;Orlovskaja oblast;0;0;administrative region
+RU;RU-PNZ;Penzenskaya oblast;Penzenskaja oblast;0;0;administrative region
+RU;RU-PER;Permskaya oblast;Permskaja oblast;0;0;administrative region
+RU;RU-PSK;Pskovskaya oblast;Pskovskaja oblast;0;0;administrative region
+RU;RU-ROS;Rostovskaya oblast;Rostovskaja oblast;0;0;administrative region
+RU;RU-RYA;Ryazanskaya oblast;Rjazanskaja oblast;0;0;administrative region
+RU;RU-SAK;Sakhalinskaya oblast;Sahalinskaja oblast;0;0;administrative region
+RU;RU-SAM;Samarskaya oblast;Samarskaja oblast;0;0;administrative region
+RU;RU-SAR;Saratovskaya oblast;Saratovskaja oblast;0;0;administrative region
+RU;RU-SMO;Smolenskaya oblast;Smolenskaja oblast;0;0;administrative region
+RU;RU-SVE;Sverdlovskaya oblast;Sverdlovskaja oblast;0;0;administrative region
+RU;RU-TAM;Tambovskaya oblast;Tambovskaja oblast;0;0;administrative region
+RU;RU-TOM;Tomskaya oblast;Tomskaja oblast;0;0;administrative region
+RU;RU-TUL;Tulskaya oblast;Tulskaja oblast;0;0;administrative region
+RU;RU-TVE;Tverskaya oblast;Tverskaja oblast;0;0;administrative region
+RU;RU-TYU;Tyumenskaya oblast;Tjumenskaja oblast;0;0;administrative region
+RU;RU-ULY;Ulyanovskaya oblast;Uljanovskaja oblast;0;0;administrative region
+RU;RU-VLA;Vladimirskaya oblast;Vladimirskaja oblast;0;0;administrative region
+RU;RU-VGG;Volgogradskaya oblast;Volgogradskaja oblast;0;0;administrative region
+RU;RU-VLG;Vologodskaya oblast;Vologodskaja oblast;0;0;administrative region
+RU;RU-VOR;Voronezhskaya oblast;Voroneskaja oblast;0;0;administrative region
+RU;RU-YAR;Yaroslavskaya oblast;Jaroslavskaja oblast;0;0;administrative region
+RU;RU-MOW;Moskva;Moskva;0;0;autonomous city
+RU;RU-SPE;Sankt-Peterburg;Sankt-Peterburg;0;0;autonomous city
+RU;RU-YEV;Yevreyskaya avtonomnaya oblast;Evrejskaja avtonomnaja oblast;0;0;autonomous region
+RU;RU-AGB;Aginskiy Buryatskiy avtonomnyy okrug;Aginskij Burjatskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-CHU;Chukotskiy avtonomnyy okrug;ukotskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-EVE;Evenkiyskiy avtonomnyy okrug;venkijskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-KHM;Khanty-Mansiyskiy avtonomnyy okrug [Yugra];Hanty-Mansijskij avtonomnyj okrug [Jugra];0;0;autonomous district
+RU;RU-KOP;Komi-Permyatskiy avtonomnyy okrug;Komi-Permjatskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-KOR;Koryakskiy avtonomnyy okrug;Korjakskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-NEN;Nenetskiy avtonomnyy okrug;Nenetskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-TAY;Taymyrskiy (Dolgano-Nenetskiy) avtonomnyy okrug;Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug;0;0;autonomous district
+RU;RU-UOB;Ust-Ordynskiy Buryatskiy avtonomnyy okrug;Ust-Ordynskij Burjatskij avtonomnyj okrug;0;0;autonomous district
+RU;RU-YAN;Yamalo-Nenetskiy avtonomnyy okrug;Jamalo-Nenetskij avtonomnyj okrug;0;0;autonomous district
+RW;RW-C;Butare;0;0;0
+RW;RW-I;Byumba;0;0;0
+RW;RW-E;Cyangugu;0;0;0
+RW;RW-D;Gikongoro;0;0;0
+RW;RW-G;Gisenyi;0;0;0
+RW;RW-B;Gitarama;0;0;0
+RW;RW-J;Kibungo;0;0;0
+RW;RW-F;Kibuye;0;0;0
+RW;RW-K;Kigali-Rural;Kigali y Icyaro;0;0;
+RW;RW-L;Kigali-Ville;Kigali Ngari;0;0;
+RW;RW-M;Mutara;0;0;0
+RW;RW-H;Ruhengeri;0;0;0
+SA;SA-10;Baha;0;0;0
+SA;SA-08;Northern Frontier;0;0;0
+SA;SA-2;Jawf;0;0;0
+SA;SA-03;Madinah;0;0;0
+SA;SA-05;Quassim;0;0;0
+SA;SA-0;Riyad;0;0;0
+SA;SA-04;Eastern Province;0;0;0
+SA;SA-4;Asir;0;0;0
+SA;SA-06;Hail;0;0;0
+SA;SA-09;Jizan;0;0;0
+SA;SA-02;Makkah;0;0;0
+SA;SA-12;Najran;0;0;0
+SA;SA-07;Tabuk;0;0;0
+SB;SB-CT;Capital Territory (Honiara);0;0;0capital territory
+SB;SB-CE;Central;0;0;province
+SB;SB-GU;Guadalcanal;0;0;province
+SB;SB-IS;Isabel;0;0;province
+SB;SB-MK;Makira;0;0;province
+SB;SB-ML;Malaita;0;0;province
+SB;SB-TE;Temotu;0;0;province
+SB;SB-WE;Western;0;0;province
+SD;SD-23;l an Nl;0;0;0
+SD;SD-26;Al Bar al Amar;0;0;0
+SD;SD-8;Al Buayrt;0;0;0
+SD;SD-07;Al Jazrah;0;0;0
+SD;SD-03;Al Kharm;0;0;0
+SD;SD-06;Al Qarif;0;0;0
+SD;SD-22;Al Wadah;0;0;0
+SD;SD-04;An Nl;0;0;0
+SD;SD-08;An Nl al Abya;0;0;0
+SD;SD-24;An Nl al Azraq;0;0;0
+SD;SD-0;Ash Shamlyah;0;0;0
+SD;SD-7;Bar al Jabal;0;0;0
+SD;SD-6;Gharb al Istiwyah;0;0;0
+SD;SD-4;Gharb Bar al Ghazl;0;0;0
+SD;SD-2;Gharb Drfr;0;0;0
+SD;SD-0;Gharb Kurdufn;0;0;0
+SD;SD-10;Janb Drfr;0;0;0
+SD;SD-3;Janb Kurdufn;0;0;0
+SD;SD-20;Jnqal;0;0;0
+SD;SD-05;Kassal;0;0;0
+SD;SD-5;Shaml Bar al Ghazl;0;0;0
+SD;SD-02;Shaml Drfr;0;0;0
+SD;SD-09;Shaml Kurdufn;0;0;0
+SD;SD-9;Sharq al Istiwyah;0;0;0
+SD;SD-25;Sinnr;0;0;0
+SD;SD-2;Wrb;0;0;0
+SD;SD-E;Eastern [Eastern1];0;0;0
+SD;SD-N;Northern [Northern3] ;0;0;0
+SD;SD-C;Central;0;0;0
+SE;SE-K;Blekinge ln [SE-0];0;0;0
+SE;SE-W;Dalarnas ln [SE-20];0;0;0
+SE;SE-I;Gotlands ln [SE-09];0;0;0
+SE;SE-X;Gvleborgs ln [SE-2];0;0;0
+SE;SE-N;Hallands ln [SE-3];0;0;0
+SE;SE-Z;Jmtlands ln [SE-23];0;0;0
+SE;SE-F;Jnkpings ln [SE-06];0;0;0
+SE;SE-H;Kalmar ln [SE-08];0;0;0
+SE;SE-G;Kronobergs ln [SE-07];0;0;0
+SE;SE-BD;Norrbottens ln [SE-25];0;0;0
+SE;SE-M;Skne ln [SE-2];0;0;0
+SE;SE-AB;Stockholms ln [SE-0];0;0;0
+SE;SE-D;Sdermanlands ln [SE-04];0;0;0
+SE;SE-C;Uppsala ln [SE-03];0;0;0
+SE;SE-S;Vrmlands ln [SE-7];0;0;0
+SE;SE-AC;Vsterbottens ln [SE-24];0;0;0
+SE;SE-Y;Vsternorrlands ln [SE-22];0;0;0
+SE;SE-U;Vstmanlands ln [SE-9];0;0;0
+SE;SE-O;Vstra Gtalands ln [SE-4];0;0;0
+SE;SE-T;rebro ln [SE-8];0;0;0
+SE;SE-E;stergtlands ln [SE-05];0;0;0
+SH;SH-SH;Saint Helena;0;0;0administrative area
+SH;SH-AC;Ascension;0;0;0dependency
+SH;SH-TA;Tristan da Cunha;0;0;0dependency
+SK;SK-BC;Banskobystrick kraj;0;0;0
+SK;SK-BL;Bratislavsk kraj;0;0;0
+SK;SK-KI;Koick kraj;0;0;0
+SK;SK-NI;Nitriansky kraj;0;0;0
+SK;SK-PV;Preovsk kraj;0;0;0
+SK;SK-TC;Treneiansky kraj;0;0;0
+SK;SK-TA;Trnavsk kraj;0;0;0
+SK;SK-ZI;ilinsk kraj;0;0;0
+SL;SL-W;Western Area (Freetown) [Western3] [Western];0;0;0area
+SL;SL-E;Eastern [Eastern2];0;0;province
+SL;SL-N;Northern [Northern2];0;0;province
+SL;SL-S;Southern;0;0;province
+SN;SN-DK;Dakar;0;0;0
+SN;SN-DB;Diourbel;0;0;0
+SN;SN-FK;Fatick;0;0;0
+SN;SN-KL;Kaolack;0;0;0
+SN;SN-KD;Kolda;0;0;0
+SN;SN-LG;Louga;0;0;0
+SN;SN-SL;Saint-Louis;0;0;0
+SN;SN-TC;Tambacounda;0;0;0
+SN;SN-TH;Thies;0;0;0
+SN;SN-ZG;Ziguinchor;0;0;0
+SO;SO-AW;Awdal;0;0;0
+SO;SO-BK;Bakool;0;0;0
+SO;SO-BN;Banaadir;0;0;0
+SO;SO-BR;Bari;0;0;0
+SO;SO-BY;Bay;0;0;0
+SO;SO-GA;Galguduud;0;0;0
+SO;SO-GE;Gedo;0;0;0
+SO;SO-HI;Hiiraan;0;0;0
+SO;SO-JD;Jubbada Dhexe;0;0;0
+SO;SO-JH;Jubbada Hoose;0;0;0
+SO;SO-MU;Mudug;0;0;0
+SO;SO-NU;Nugaal;0;0;0
+SO;SO-SA;Sanaag;0;0;0
+SO;SO-SD;Shabeellaha Dhexe;0;0;0
+SO;SO-SH;Shabeellaha Hoose;0;0;0
+SO;SO-SO;Sool;0;0;0
+SO;SO-TO;Togdheer;0;0;0
+SO;SO-WO;Woqooyi Galbeed;0;0;0
+SR;SR-BR;Brokopondo;0;0;0
+SR;SR-CM;Commewijne;0;0;0
+SR;SR-CR;Coronie;0;0;0
+SR;SR-MA;Marowijne;0;0;0
+SR;SR-NI;Nickerie;0;0;0
+SR;SR-PR;Para;0;0;0
+SR;SR-PM;Paramaribo;0;0;0
+SR;SR-SA;Saramacca;0;0;0
+SR;SR-SI;Sipaliwini;0;0;0
+SR;SR-WA;Wanica;0;0;0
+ST;ST-P;Prncipe;0;0;0
+ST;ST-S;So Tome;0;0;0
+SV;SV-AH;Ahuachapn;0;0;0
+SV;SV-CA;Cabaas;0;0;0
+SV;SV-CU;Cuscatln;0;0;0
+SV;SV-CH;Chalatenango;0;0;0
+SV;SV-LI;La Libertad;0;0;0
+SV;SV-PA;La Paz;0;0;0
+SV;SV-UN;La Unin;0;0;0
+SV;SV-MO;Morazn;0;0;0
+SV;SV-SM;San Miguel;0;0;0
+SV;SV-SS;San Salvador;0;0;0
+SV;SV-SA;Santa Ana;0;0;0
+SV;SV-SV;San Vicente;0;0;0
+SV;SV-SO;Sonsonate;0;0;0
+SV;SV-US;Usulutn;0;0;0
+SY;SY-HA;Al asakah;0;0;0
+SY;SY-LA;Al Ladhiqiyah;0;0;0
+SY;SY-QU;Al Qunayirah;0;0;0
+SY;SY-RA;Ar Raqqah;0;0;0
+SY;SY-SU;As Suwayd;0;0;0
+SY;SY-DR;Dar;0;0;0
+SY;SY-DY;Dayr az Zawr;0;0;0
+SY;SY-DI;Dimashq;0;0;0
+SY;SY-HL;alab;0;0;0
+SY;SY-HM;amh;0;0;0
+SY;SY-HI;im;0;0;0
+SY;SY-ID;Idlib;0;0;0
+SY;SY-RD;Rf Dimashq;0;0;0
+SY;SY-TA;ars;0;0;0
+SZ;SZ-HH;Hhohho;0;0;0
+SZ;SZ-LU;Lubombo;0;0;0
+SZ;SZ-MA;Manzini;0;0;0
+SZ;SZ-SH;Shiselweni;0;0;0
+TD;TD-BA;Batha;0;0;0
+TD;TD-BI;Biltine;0;0;0
+TD;TD-BET;Borkou-Ennedi-Tibesti;0;0;0
+TD;TD-CB;Chari-Baguirmi;0;0;0
+TD;TD-GR;Guera;0;0;0
+TD;TD-KA;Kanem;0;0;0
+TD;TD-LC;Lac;0;0;0
+TD;TD-LO;Logone-Occidental;0;0;0
+TD;TD-LR;Logone-Oriental;0;0;0
+TD;TD-MK;Mayo-Kebbi;0;0;0
+TD;TD-MC;Moyen-Chari;0;0;0
+TD;TD-OD;Ouaddai;0;0;0
+TD;TD-SA;Salamat;0;0;0
+TD;TD-TA;Tandjile;0;0;0
+TG;TG-C;Centre [Centre1];0;0;0
+TG;TG-K;Kara;0;0;0
+TG;TG-M;Maritime ;0;0;0
+TG;TG-P;Plateaux;0;0;0
+TG;TG-S;Savannes [Savanes];0;0;0
+TH;TH-0;Krung Thep Maha Nakhon [Bangkok];0;0;0metropolitan administration
+TH;TH-S;Phatthaya;0;0;0special administrative city
+TH;TH-37;Amnat Charoen;0;0;province
+TH;TH-5;Ang Thong;0;0;province
+TH;TH-3;Buri Ram;0;0;province
+TH;TH-24;Chachoengsao;0;0;province
+TH;TH-8;Chai Nat;0;0;province
+TH;TH-36;Chaiyaphum;0;0;province
+TH;TH-22;Chanthaburi;0;0;province
+TH;TH-50;Chiang Mai;0;0;province
+TH;TH-57;Chiang Rai;0;0;province
+TH;TH-20;Chon Buri;0;0;province
+TH;TH-86;Chumphon;0;0;province
+TH;TH-46;Kalasin;0;0;province
+TH;TH-62;Kamphaeng Phet;0;0;province
+TH;TH-7;Kanchanaburi;0;0;province
+TH;TH-40;Khon Kaen;0;0;province
+TH;TH-8;Krabi;0;0;province
+TH;TH-52;Lampang;0;0;province
+TH;TH-5;Lamphun;0;0;province
+TH;TH-42;Loei;0;0;province
+TH;TH-6;Lop Buri;0;0;province
+TH;TH-58;Mae Hong Son;0;0;province
+TH;TH-44;Maha Sarakham;0;0;province
+TH;TH-49;Mukdahan;0;0;province
+TH;TH-26;Nakhon Nayok;0;0;province
+TH;TH-73;Nakhon Pathom;0;0;province
+TH;TH-48;Nakhon Phanom;0;0;province
+TH;TH-30;Nakhon Ratchasima;0;0;province
+TH;TH-60;Nakhon Sawan;0;0;province
+TH;TH-80;Nakhon Si Thammarat;0;0;province
+TH;TH-55;Nan;0;0;province
+TH;TH-96;Narathiwat;0;0;province
+TH;TH-39;Nong Bua Lam Phu;0;0;province
+TH;TH-43;Nong Khai;0;0;province
+TH;TH-2;Nonthaburi;0;0;province
+TH;TH-3;Pathum Thani;0;0;province
+TH;TH-94;Pattani;0;0;province
+TH;TH-82;Phangnga;0;0;province
+TH;TH-93;Phatthalung;0;0;province
+TH;TH-56;Phayao;0;0;province
+TH;TH-67;Phetchabun;0;0;province
+TH;TH-76;Phetchaburi;0;0;province
+TH;TH-66;Phichit;0;0;province
+TH;TH-65;Phitsanulok;0;0;province
+TH;TH-54;Phrae;0;0;province
+TH;TH-4;Phra Nakhon Si Ayutthaya;0;0;province
+TH;TH-83;Phuket;0;0;province
+TH;TH-25;Prachin Buri;0;0;province
+TH;TH-77;Prachuap Khiri Khan;0;0;province
+TH;TH-85;Ranong;0;0;province
+TH;TH-70;Ratchaburi;0;0;province
+TH;TH-2;Rayong;0;0;province
+TH;TH-45;Roi Et;0;0;province
+TH;TH-27;Sa Kaeo;0;0;province
+TH;TH-47;Sakon Nakhon;0;0;province
+TH;TH-81;Samut Prakan;0;0;province
+TH;TH-74;Samut Sakhon;0;0;province
+TH;TH-75;Samut Songkhram;0;0;province
+TH;TH-79;Saraburi;0;0;province
+TH;TH-9;Satun;0;0;province
+TH;TH-7;Sing Buri;0;0;province
+TH;TH-33;Si Sa Ket;0;0;province
+TH;TH-90;Songkhla;0;0;province
+TH;TH-64;Sukhothai;0;0;province
+TH;TH-72;Suphan Buri;0;0;province
+TH;TH-84;Surat Thani;0;0;province
+TH;TH-32;Surin;0;0;province
+TH;TH-63;Tak;0;0;province
+TH;TH-92;Trang;0;0;province
+TH;TH-23;Trat;0;0;province
+TH;TH-34;Ubon Ratchathani;0;0;province
+TH;TH-4;Udon Thani;0;0;province
+TH;TH-6;Uthai Thani;0;0;province
+TH;TH-53;Uttaradit;0;0;province
+TH;TH-95;Yala;0;0;province
+TH;TH-35;Yasothon;0;0;province
+TJ;TJ-KT;Khatlon;0;0;region
+TJ;TJ-SU;Sughd;0;0;region
+TJ;TJ-GB;Gorno-Badakhshan;0;0;autonomous region
+TM;TM-A;Ahal;0;0;0
+TM;TM-B;Balkan;0;0;0
+TM;TM-D;Daoguz;0;0;0
+TM;TM-L;Lebap;0;0;0
+TM;TM-M;Mary;0;0;0
+TN;TN-3;Beja;0;0;0
+TN;TN-3;Ben Arous;0;0;0
+TN;TN-23;Bizerte;0;0;0
+TN;TN-8;Gabes;0;0;0
+TN;TN-7;Gafsa;0;0;0
+TN;TN-32;Jendouba;0;0;0
+TN;TN-4;Kairouan;0;0;0
+TN;TN-42;Kasserine;0;0;0
+TN;TN-73;Kebili;0;0;0
+TN;TN-2;LAriana;0;0;0
+TN;TN-33;Le Kef;0;0;0
+TN;TN-53;Mahdia;0;0;0
+TN;TN-82;Medenine;0;0;0
+TN;TN-52;Monastir;0;0;0
+TN;TN-2;Nabeul;0;0;0
+TN;TN-6;Sfax;0;0;0
+TN;TN-43;Sidi Bouzid;0;0;0
+TN;TN-34;Siliana;0;0;0
+TN;TN-5;Sousse;0;0;0
+TN;TN-83;Tataouine;0;0;0
+TN;TN-72;Tozeur;0;0;0
+TN;TN-10;Tunis;0;0;0
+TN;TN-22;Zaghouan;0;0;0
+TR;TR-0;Adana;0;0;0
+TR;TR-02;Adiyaman;0;0;0
+TR;TR-03;Afyon;0;0;0
+TR;TR-04;Agri;0;0;0
+TR;TR-68;Aksaray;0;0;0
+TR;TR-05;Amasya;0;0;0
+TR;TR-06;Ankara;0;0;0
+TR;TR-07;Antalya;0;0;0
+TR;TR-75;Ardahan;0;0;0
+TR;TR-08;Artvin;0;0;0
+TR;TR-09;Aydin;0;0;0
+TR;TR-10;Balikesir;0;0;0
+TR;TR-74;Bartn;0;0;0
+TR;TR-72;Batman;0;0;0
+TR;TR-69;Bayburt;0;0;0
+TR;TR-87;Bilecik;0;0;0
+TR;TR-2;Bingol;0;0;0
+TR;TR-83;Bitlis;0;0;0
+TR;TR-4;Bolu;0;0;0
+TR;TR-85;Burdur;0;0;0
+TR;TR-90;Bursa;0;0;0
+TR;TR-7;Canakkale;0;0;0
+TR;TR-8;Cankiri;0;0;0
+TR;TR-9;Corum;0;0;0
+TR;TR-20;Denizli;0;0;0
+TR;TR-82;Diyarbakir;0;0;0
+TR;TR-8;Düzce;0;0;0
+TR;TR-22;Edirne;0;0;0
+TR;TR-23;Elazig;0;0;0
+TR;TR-24;Erzincan;0;0;0
+TR;TR-25;Erzurum;0;0;0
+TR;TR-26;Eskisehir;0;0;0
+TR;TR-27;Gaziantep;0;0;0
+TR;TR-28;Giresun;0;0;0
+TR;TR-29;Gumushane;0;0;0
+TR;TR-30;Hakkari;0;0;0
+TR;TR-3;Hatay;0;0;0
+TR;TR-76;Idr;0;0;0
+TR;TR-32;Isparta;0;0;0
+TR;TR-33;Icel;0;0;0
+TR;TR-34;Istanbul;0;0;0
+TR;TR-35;Izmir;0;0;0
+TR;TR-46;Kahramanmara;0;0;0
+TR;TR-78;Karabük;0;0;0
+TR;TR-70;Karaman;0;0;0
+TR;TR-36;Kars;0;0;0
+TR;TR-37;Kastamonu;0;0;0
+TR;TR-38;Kayseri;0;0;0
+TR;TR-88;Kinkkale;0;0;0
+TR;TR-39;Kirklareli;0;0;0
+TR;TR-40;Kirsehir;0;0;0
+TR;TR-79;Kilis;0;0;0
+TR;TR-84;Kocaeli;0;0;0
+TR;TR-42;Konya;0;0;0
+TR;TR-43;Kutahya;0;0;0
+TR;TR-44;Malatya;0;0;0
+TR;TR-45;Manisa;0;0;0
+TR;TR-47;Mardin;0;0;0
+TR;TR-48;Mugla;0;0;0
+TR;TR-49;Mus;0;0;0
+TR;TR-50;Nevsehir;0;0;0
+TR;TR-5;Nigde;0;0;0
+TR;TR-52;Ordu;0;0;0
+TR;TR-80;Osmaniye;0;0;0
+TR;TR-53;Rize;0;0;0
+TR;TR-54;Sakarya;0;0;0
+TR;TR-55;Samsun;0;0;0
+TR;TR-56;Siirt;0;0;0
+TR;TR-57;Sinop;0;0;0
+TR;TR-58;Sivas;0;0;0
+TR;TR-63;Sanliurfa;0;0;0
+TR;TR-73;Sirnak;0;0;0
+TR;TR-59;Tekirdag;0;0;0
+TR;TR-60;Tokat;0;0;0
+TR;TR-6;Trabzon;0;0;0
+TR;TR-62;Tunceli;0;0;0
+TR;TR-64;Usak;0;0;0
+TR;TR-65;Van;0;0;0
+TR;TR-77;Yalova;0;0;0
+TR;TR-66;Yozgat;0;0;0
+TR;TR-67;Zinguldak;0;0;0
+TT;TT-CTT;Couva-Tabaquite-Talparo;0;0;region
+TT;TT-DMN;Diego Martin;0;0;region
+TT;TT-ETO;Eastern Tobago;0;0;region
+TT;TT-PED;Penal-Debe;0;0;region
+TT;TT-PRT;Princes Town;0;0;region
+TT;TT-RCM;Rio Claro-Mayaro;0;0;region
+TT;TT-SGE;Sangre Grande;0;0;region
+TT;TT-SJL;San Juan-Laventille;0;0;region
+TT;TT-SIP;Siparia;0;0;region
+TT;TT-TUP;Tunapuna-Piarco;0;0;region
+TT;TT-WTO;Western Tobago;0;0;region
+TT;TT-ARI;Arima;0;0;0municipality
+TT;TT-CHA;Chaguanas;0;0;0municipality
+TT;TT-PTF;Point Fortin;0;0;0municipality
+TT;TT-POS;Port of Spain;0;0;0municipality
+TT;TT-SFO;San Fernando;0;0;0municipality
+TW;TW-KHH;Kaohsiung;0;0;0special municipality
+TW;TW-TPE;Taipei;0;0;0special municipality
+TW;TW-CYI;Chiayi;0;0;0municipality
+TW;TW-HSZ;Hsinchu;0;0;0municipality
+TW;TW-KEE;Keelung;0;0;0municipality
+TW;TW-TXG;Taichung;0;0;0municipality
+TW;TW-TNN;Tainan;0;0;0municipality
+TW;TW-CHA;Changhua;0;0;0;district
+TW;TW-CYQ;Chiayi;0;0;0;district
+TW;TW-HSQ;Hsinchu;0;0;0;district
+TW;TW-HUA;Hualien;0;0;0;district
+TW;TW-ILA;Ilan;0;0;0;district
+TW;TW-KHQ;Kaohsiung;0;0;0;district
+TW;TW-MIA;Miaoli;0;0;0;district
+TW;TW-NAN;Nantou;0;0;0;district
+TW;TW-PEN;Penghu;0;0;0;district
+TW;TW-PIF;Pingtung;0;0;0;district
+TW;TW-TXQ;Taichung;0;0;0;district
+TW;TW-TNQ;Tainan;0;0;0;district
+TW;TW-TPQ;Taipei;0;0;0;district
+TW;TW-TTT;Taitung;0;0;0;district
+TW;TW-TAO;Taoyuan;0;0;0;district
+TW;TW-YUN;Yunlin;0;0;0;district
+TZ;TZ-0;Arusha;0;0;0
+TZ;TZ-02;Dar es Salaam;0;0;0
+TZ;TZ-03;Dodoma;0;0;0
+TZ;TZ-04;Iringa;0;0;0
+TZ;TZ-05;Kagera;0;0;0
+TZ;TZ-06;Kaskazini Pemba;Pemba North;0;0
+TZ;TZ-07;Kaskazini Unguja;Zanzibar North;0;0
+TZ;TZ-08;Kigoma;0;0;0
+TZ;TZ-09;Kilimanjaro;0;0;0
+TZ;TZ-10;Kusini Pemba;Pemba South;0;0;
+TZ;TZ-11;Kusini Unguja;Zanzibar South;0;0
+TZ;TZ-2;Lindi;0;0;0
+TZ;TZ-3;Mara;0;0;0
+TZ;TZ-4;Mbeya;0;0;0
+TZ;TZ-5;Mjini Magharibi;Zanzibar West;0;0
+TZ;TZ-6;Morogoro;0;0;0
+TZ;TZ-7;Mtwara;0;0;0
+TZ;TZ-8;Mwanza;0;0;0
+TZ;TZ-9;Pwani;Coast;0;0
+TZ;TZ-20;Rukwa;0;0;0
+TZ;TZ-12;Ruvuma;0;0;0
+TZ;TZ-22;Shinyanga;0;0;0
+TZ;TZ-23;Singida;0;0;0
+TZ;TZ-24;Tabora;0;0;0
+TZ;TZ-25;Tanga;0;0;0
+UA;UA-7;Cherkaska Oblast;0;0;region
+UA;UA-74;Chernihivska Oblast;0;0;region
+UA;UA-77;Chernivetska Oblast;0;0;region
+UA;UA-2;Dnipropetrovska Oblast;0;0;region
+UA;UA-4;Donetska Oblast;0;0;region
+UA;UA-26;Ivano-Frankivska Oblast;0;0;region
+UA;UA-63;Kharkivska Oblast;0;0;region
+UA;UA-65;Khersonska Oblast;0;0;region
+UA;UA-68;Khmelnytska Oblast;0;0;region
+UA;UA-35;Kirovohradska Oblast;0;0;region
+UA;UA-32;Kyivska Oblast;0;0;region
+UA;UA-09;Luhanska Oblast;0;0;region
+UA;UA-46;Lvivska Oblast;0;0;region
+UA;UA-48;Mykolaivska Oblast;0;0;region
+UA;UA-5;Odeska Oblast;0;0;region
+UA;UA-53;Poltavska Oblast;0;0;region
+UA;UA-56;Rivnenska Oblast;0;0;region
+UA;UA-59;Sumska Oblast;0;0;region
+UA;UA-6;Ternopilska Oblast;0;0;region
+UA;UA-05;Vinnytska Oblast;0;0;region
+UA;UA-07;Volynska Oblast;0;0;region
+UA;UA-2;Zakarpatska Oblast;0;0;region
+UA;UA-23;Zaporizka Oblast;0;0;region
+UA;UA-8;Zhytomyrska Oblast;0;0;region
+UA;UA-43;Respublika Krym;0;0;0republic
+UA;UA-30;Kyiv;0;0;0;city
+UA;UA-40;Sevastopol;0;0;0;city
+UG;UG-302;Apac;0;0;N
+UG;UG-303;Arua;0;0;N
+UG;UG-40;Bundibugyo;0;0;W
+UG;UG-402;Bushenyi;0;0;W
+UG;UG-304;Gulu;0;0;N;
+UG;UG-403;Hoima;0;0;W;
+UG;UG-203;Iganga;0;0;E;
+UG;UG-204;Jinja;0;0;E;
+UG;UG-404;Kabale;0;0;W;
+UG;UG-405;Kabarole;0;0;W
+UG;UG-0;Kalangala;0;0;C;
+UG;UG-02;Kampala;0;0;C;
+UG;UG-205;Kamuli;0;0;E;
+UG;UG-206;Kapchorwa;0;0;E;
+UG;UG-406;Kasese;0;0;W
+UG;UG-407;Kibaale;0;0;W
+UG;UG-03;Kiboga;0;0;C;
+UG;UG-408;Kisoro;0;0;W
+UG;UG-305;Kitgum;0;0;N;
+UG;UG-306;Kotido;0;0;N;
+UG;UG-208;Kumi;0;0;E;
+UG;UG-307;Lira;0;0;N;
+UG;UG-04;Luwero;0;0;C;
+UG;UG-05;Masaka;0;0;C;
+UG;UG-409;Masindi;0;0;W
+UG;UG-209;Mbale;0;0;E;
+UG;UG-41;Mbarara;0;0;W
+UG;UG-308;Moroto;0;0;N;
+UG;UG-309;Moyo;0;0;N;
+UG;UG-06;Mpigi;0;0;C;
+UG;UG-07;Mubende;0;0;C;
+UG;UG-08;Mukono;0;0;C;
+UG;UG-31;Nebbi;0;0;N;
+UG;UG-4;Ntungamo;0;0;W
+UG;UG-20;Pallisa;0;0;E;
+UG;UG-10;Rakai;0;0;C;
+UG;UG-42;Rukungiri;0;0;W
+UG;UG-52;Soroti;0;0;E;
+UG;UG-22;Tororo;0;0;E;
+UM;UM-8;Baker Island;0;0;0
+UM;UM-84;Howland Island;0;0;0
+UM;UM-86;Jarvis Island;0;0;0
+UM;UM-67;Johnston Atoll;0;0;0
+UM;UM-89;Kingman Reef;0;0;0
+UM;UM-7;Midway Islands;0;0;0
+UM;UM-76;Navassa Island;0;0;0
+UM;UM-95;Palmyra Atoll;0;0;0
+UM;UM-79;Wake Island;0;0;0
+# US GOES HERE
+UY;UY-AR;Artigas;0;0;0
+UY;UY-CA;Canelones;0;0;0
+UY;UY-CL;Cerro Largo;0;0;0
+UY;UY-CO;Colonia;0;0;0
+UY;UY-DU;Durazno;0;0;0
+UY;UY-FS;Flores;0;0;0
+UY;UY-FD;Florida;0;0;0
+UY;UY-LA;Lavalleja;0;0;0
+UY;UY-MA;Maldonado;0;0;0
+UY;UY-MO;Montevideo;0;0;0
+UY;UY-PA;Paysand;0;0;0
+UY;UY-RN;Ro Negro;0;0;0
+UY;UY-RV;Rivera;0;0;0
+UY;UY-RO;Rocha;0;0;0
+UY;UY-SA;Salto;0;0;0
+UY;UY-SJ;San Jose;0;0;0
+UY;UY-SO;Soriano;0;0;0
+UY;UY-TA;Tacuaremb;0;0;0
+UY;UY-TT;Treinta y Tres;0;0;0
+UZ;UZ-QR;Karakalpak [Qoraqalpog‘iston Respublikasi];0;0;0republic
+UZ;UZ-AN;Andizhan;0;0;region
+UZ;UZ-BU;Bukhara;0;0;region
+UZ;UZ-FA;Fergana;0;0;region
+UZ;UZ-JI;Jizzax;0;0;region
+UZ;UZ-NG;Namangan;0;0;region
+UZ;UZ-NW;Navoiy;0;0;region
+UZ;UZ-QA;Kashkadarya [Qashqadaryo];0;0;region
+UZ;UZ-SA;Samarkand [Samarqand];0;0;region
+UZ;UZ-SI;Syrdarya [Sirdaryo];0;0;region
+UZ;UZ-SU;Surkhandarya [Surxondaryo];0;0;region
+UZ;UZ-TO;Tashkent Oblast [Toshkent];0;0;region
+UZ;UZ-XO;Khorezm [Xorazm];0;0;region
+VE;VE-A;Distrito Federal;0;0;0;federal district
+VE;VE-B;Anzotegui;0;0;0state
+VE;VE-C;Apure;0;0;0state
+VE;VE-D;Aragua;0;0;0state
+VE;VE-E;Barinas;0;0;0state
+VE;VE-F;Bolvar;0;0;0state
+VE;VE-G;Carabobo;0;0;0state
+VE;VE-H;Cojedes;0;0;0state
+VE;VE-I;Falcn;0;0;0state
+VE;VE-J;Gurico;0;0;0state
+VE;VE-K;Lara;0;0;0state
+VE;VE-L;Merida;0;0;0state
+VE;VE-M;Miranda;0;0;0state
+VE;VE-N;Monagas;0;0;0state
+VE;VE-O;Nueva Esparta;0;0;0state
+VE;VE-P;Portuguesa;0;0;0state
+VE;VE-R;Sucre;0;0;0state
+VE;VE-S;Tchira;0;0;0state
+VE;VE-T;Trujillo;0;0;0state
+VE;VE-U;Yaracuy;0;0;0state
+VE;VE-V;Zulia;0;0;0state
+VE;VE-Z;Amazonas;0;0;0state
+VE;VE-Y;Delta Amacuro;0;0;0state
+VE;VE-W;Dependencias Federales;0;0;0;federal dependency
+VN;VN-44;An Giang;0;0;0
+VN;VN-43;Ba Ria - Vung Tau;0;0;0
+VN;VN-53;Bac Can;0;0;0
+VN;VN-54;Bac Giang;0;0;0
+VN;VN-55;Bac Lieu;0;0;0
+VN;VN-56;Bac Ninh;0;0;0
+VN;VN-50;Ben Tre;0;0;0
+VN;VN-3;Binh Dinh;0;0;0
+VN;VN-57;Binh Duong;0;0;0
+VN;VN-58;Binh Phuoc;0;0;0
+VN;VN-40;Binh Thuan;0;0;0
+VN;VN-59;Ca Mau;0;0;0
+VN;VN-48;Can Tho;0;0;0
+VN;VN-04;Cao Bang;0;0;0
+VN;VN-60;Da Nang, thanh pho;0;0;0
+VN;VN-33;Dac Lac;0;0;0
+VN;VN-39;Dong Nai;0;0;0
+VN;VN-45;Dong Thap;0;0;0
+VN;VN-30;Gia Lai;0;0;0
+VN;VN-03;Ha Giang;0;0;0
+VN;VN-63;Ha Nam;0;0;0
+VN;VN-64;Ha Noi, thu do;0;0;0
+VN;VN-65;Ha Tay;0;0;0
+VN;VN-23;Ha Tinh;0;0;0
+VN;VN-6;Hai Duong;0;0;0
+VN;VN-62;Hai Phong, thanh pho;0;0;0
+VN;VN-4;Hoa Binh;0;0;0
+VN;VN-66;Ho Chi Minh, thanh pho [Sai Gon];0;0;0
+VN;VN-67;Hung Yen;0;0;0
+VN;VN-34;Khanh Hoa;0;0;0
+VN;VN-47;Kien Giang;0;0;0
+VN;VN-28;Kon Tum;0;0;0
+VN;VN-0;Lai Chau;0;0;0
+VN;VN-35;Lam Dong;0;0;0
+VN;VN-09;Lang Son;0;0;0
+VN;VN-02;Lao Cai;0;0;0
+VN;VN-41;Long An;0;0;0
+VN;VN-74;Nam Dinh;0;0;0
+VN;VN-22;Nghe An;0;0;0
+VN;VN-8;Ninh Binh;0;0;0
+VN;VN-36;Ninh Thuan;0;0;0
+VN;VN-68;Phu Tho;0;0;0
+VN;VN-32;Phu Yen;0;0;0
+VN;VN-24;Quang Binh;0;0;0
+VN;VN-27;Quang Nam;0;0;0
+VN;VN-29;Quang Ngai;0;0;0
+VN;VN-31;Quang Ninh;0;0;0
+VN;VN-25;Quang Tri;0;0;0
+VN;VN-52;Soc Trang;0;0;0
+VN;VN-05;Son La;0;0;0
+VN;VN-37;Tay Ninh;0;0;0
+VN;VN-20;Thai Binh;0;0;0
+VN;VN-69;Thai Nguyen;0;0;0
+VN;VN-2;Thanh Hoa;0;0;0
+VN;VN-26;Thua Thien-Hue;0;0;0
+VN;VN-46;Tien Giang;0;0;0
+VN;VN-51;Tra Vinh;0;0;0
+VN;VN-07;Tuyen Quang;0;0;0
+VN;VN-49;Vinh Long;0;0;0
+VN;VN-70;Vinh Phuc;0;0;0
+VN;VN-06;Yen Bai;0;0;0
+VU;VU-MAP;Malampa;0;0;0
+VU;VU-PAM;Penama;0;0;0
+VU;VU-SAM;Sanma;0;0;0
+VU;VU-SEE;Shefa;0;0;0
+VU;VU-TAE;Tafea;0;0;0
+VU;VU-TOB;Torba;0;0;0
+WS;WS-AA;Aana;0;0;0
+WS;WS-AL;Aiga-i-le-Tai;0;0;0
+WS;WS-AT;Atua;0;0;0
+WS;WS-FA;Faasaleleaga;0;0;0
+WS;WS-GE;Gagaemauga;0;0;0
+WS;WS-GI;Gagaifomauga;0;0;0
+WS;WS-PA;Palauli;0;0;0
+WS;WS-SA;Satupaitea;0;0;0
+WS;WS-TU;Tuamasaga;0;0;0
+WS;WS-VF;Vaa-o-Fonoti;0;0;0
+WS;WS-VS;Vaisigano;0;0;0
+YE;YE-AB;Abyan;0;0;0
+YE;YE-AD;Adan;0;0;0
+YE;YE-BA;Al Baya;0;0;0
+YE;YE-HU;Al udaydah;0;0;0
+YE;YE-JA;Al Jawf;0;0;0
+YE;YE-MR;Al Mahrah;0;0;0
+YE;YE-MW;Al Mawit;0;0;0
+YE;YE-DH;Dhamar;0;0;0
+YE;YE-HD;aramawt;0;0;0
+YE;YE-HJ;ajjah;0;0;0
+YE;YE-IB;Ibb;0;0;0
+YE;YE-LA;Laij;0;0;0
+YE;YE-MA;Marib;0;0;0
+YE;YE-SD;dah;0;0;0
+YE;YE-SN;an;0;0;0
+YE;YE-SH;Shabwah;0;0;0
+YE;YE-TA;Tizz;0;0;0
+CS;CS-CG;Crna Gora;0;0;0republic
+CS;CS-SR;Srbija;0;0;0republic
+CS;CS-KM;Kosovo-Metohija;0;0;CS-SR;autonomous province
+CS;CS-VO;Vojvodina;0;0;CS-SR;autonomous province
+ZA;ZA-EC;Eastern Cape [Eastern TVL];Oos-Kaap;0;0;
+ZA;ZA-FS;Free State;Vrystaat;0;0;
+ZA;ZA-GT;Gauteng;0;0;0
+ZA;ZA-NL;Kwazulu-Natal;0;0;0
+ZA;ZA-MP;Mpumalanga;0;0;0
+ZA;ZA-NC;Northern Cape [Northern TVL];Noord-Kaap;0;0;
+ZA;ZA-LP;Limpopo;Limpopo;0;0;
+ZA;ZA-NW;North-West;Noord-Wes;0;0;
+ZA;ZA-WC;Western Cape;Wes-Kaap;0;0;
+ZM;ZM-02;Central;0;0;0
+ZM;ZM-08;Copperbelt;0;0;0
+ZM;ZM-03;Eastern;0;0;0
+ZM;ZM-04;Luapula;0;0;0
+ZM;ZM-09;Lusaka;0;0;0
+ZM;ZM-05;Northern;0;0;0
+ZM;ZM-06;North-Western;0;0;0
+ZM;ZM-07;Southern;0;0;0
+ZM;ZM-0;Western;0;0;0
+ZW;ZW-BU;Bulawayo;0;0;0
+ZW;ZW-HA;Harare;0;0;0
+ZW;ZW-MA;Manicaland;0;0;0
+ZW;ZW-MC;Mashonaland Central;0;0;0
+ZW;ZW-ME;Mashonaland East;0;0;0
+ZW;ZW-MW;Mashonaland West;0;0;0
+ZW;ZW-MV;Masvingo;0;0;0
+ZW;ZW-MN;Matabeleland North;0;0;0
+ZW;ZW-MS;Matabeleland South;0;0;0
+ZW;ZW-MI;Midlands;0;0;0
+GE;GE-AB;Abkhazia;0;0;0autonomous republic
+GE;GE-AJ;Ajaria;0;0;0autonomous republic
+GE;GE-GU;Guria;0;0;region
+GE;GE-IM;Imereti;0;0;region
+GE;GE-KA;Kakheti;0;0;region
+GE;GE-KK;Kvemo Kartli;0;0;region
+GE;GE-MM;Mtskheta-Mtianeti;0;0;region
+GE;GE-RL;Racha-Lechkhumi [and] Kvemo Svaneti;0;0;region
+GE;GE-SZ;Samegrelo-Zemo Svaneti;0;0;region
+GE;GE-SJ;Samtskhe-Javakheti;0;0;region
+GE;GE-SK;Shida Kartli;0;0;region
+GE;GE-TB;Tbilisi;0;0;0;city
+TL;TL-AL;Aileu;0;0;0
+TL;TL-AN;Ainaro;0;0;0
+TL;TL-BA;Baucau;0;0;0
+TL;TL-BO;Bobonaro;0;0;0
+TL;TL-CO;Cova Lima;0;0;0
+TL;TL-DI;Dili;0;0;0
+TL;TL-ER;Ermera;0;0;0
+TL;TL-LA;Lautem;0;0;0
+TL;TL-LI;Liquica;0;0;0
+TL;TL-MT;Manatuto;0;0;0
+TL;TL-MF;Manufahi;0;0;0
+TL;TL-OE;Oecussi;0;0;0
+TL;TL-VI;Viqueque;0;0;0
+UG;UG-30;Adjumani;0;0;N;
+UG;UG-21;Bugiri;0;0;E;
+UG;UG-202;Busia;0;0;E;
+UG;UG-207;Katakwi;0;0;E;
+UG;UG-09;Nakasongola;0;0;C
+UG;UG-11;Sembabule;0;0;C
+BI;BI-MW;Mwaro;0;0;0
+EC;EC-D;Orellana;0;0;0
+ET;ET-DD;Dir Dawa;Dire Dawa;0;0;administration
+KG;KG-GB;Bishkek;Gorod Bishkek;Gorod Bikek;0;city
+KG;KG-B;Batken;Batkenskaya oblast;Batkenskaja oblast;0;region
+KH;KH-24;Krong Pailin [Krng Pailn];0;0;0autonomous municipality
+KP;KP-NAJ;Najin Sonbong-si;0;0;0special city
+RO;RO-IF;Ilfov;0;0;0;department
+SI;SI-00;Ajdoveina;0;0;0
+SI;SI-002;Beltinci;0;0;0
+SI;SI-48;Benedikt;0;0;0
+SI;SI-49;Bistrica ob Sotli;0;0;0
+SI;SI-003;Bled;0;0;0
+SI;SI-50;Bloke;0;0;0
+SI;SI-004;Bohinj;0;0;0
+SI;SI-005;Borovnica;0;0;0
+SI;SI-006;Bovec;0;0;0
+SI;SI-5;Braslovee;0;0;0
+SI;SI-007;Brda;0;0;0
+SI;SI-008;Brezovica;0;0;0
+SI;SI-009;Breice;0;0;0
+SI;SI-52;Cankova;0;0;0
+SI;SI-0;Celje;0;0;0
+SI;SI-02;Cerklje na Gorenjskem;0;0;0
+SI;SI-03;Cerknica;0;0;0
+SI;SI-04;Cerkno;0;0;0
+SI;SI-53;Cerkvenjak;0;0;0
+SI;SI-05;renovci;0;0;0
+SI;SI-06;rna na Korokem;0;0;0
+SI;SI-07;rnomelj;0;0;0
+SI;SI-08;Destrnik;0;0;0
+SI;SI-09;Divaea;0;0;0
+SI;SI-54;Dobje;0;0;0
+SI;SI-020;Dobrepolje;0;0;0
+SI;SI-55;Dobrna;0;0;0
+SI;SI-02;Dobrova-Polhov Gradec;0;0;0
+SI;SI-56;Dobrovnik[Dobronak];0;0;0
+SI;SI-022;Dol pri Ljubljani;0;0;0
+SI;SI-57;Dolenjske Toplice;0;0;0
+SI;SI-023;Domale;0;0;0
+SI;SI-024;Dornava;0;0;0
+SI;SI-025;Dravograd;0;0;0
+SI;SI-026;Duplek;0;0;0
+SI;SI-027;Gorenja vas-Poljane;0;0;0
+SI;SI-028;Gorinica;0;0;0
+SI;SI-029;Gornja Radgona;0;0;0
+SI;SI-030;Gornji Grad;0;0;0
+SI;SI-03;Gornji Petrovci;0;0;0
+SI;SI-58;Grad;0;0;0
+SI;SI-032;Grosuplje;0;0;0
+SI;SI-59;Hajdina;0;0;0
+SI;SI-60;Hoee-Slivnica;0;0;0
+SI;SI-6;Hodo[Hodos];0;0;0
+SI;SI-62;Horjul;0;0;0
+SI;SI-034;Hrastnik;0;0;0
+SI;SI-035;Hrpelje-Kozina;0;0;0
+SI;SI-036;Idrija;0;0;0
+SI;SI-037;Ig;0;0;0
+SI;SI-038;Ilirska Bistrica;0;0;0
+SI;SI-039;Ivanena Gorica;0;0;0
+SI;SI-040;Izola[Isola];0;0;0
+SI;SI-04;Jesenice;0;0;0
+SI;SI-63;Jezersko;0;0;0
+SI;SI-042;Jurinci;0;0;0
+SI;SI-043;Kamnik;0;0;0
+SI;SI-044;Kanal;0;0;0
+SI;SI-045;Kidrieevo;0;0;0
+SI;SI-046;Kobarid;0;0;0
+SI;SI-047;Kobilje;0;0;0
+SI;SI-048;Koeevje;0;0;0
+SI;SI-049;Komen;0;0;0
+SI;SI-64;Komenda;0;0;0
+SI;SI-050;Koper[Capodistria];0;0;0
+SI;SI-65;Kostel;0;0;0
+SI;SI-05;Kozje;0;0;0
+SI;SI-052;Kranj;0;0;0
+SI;SI-053;Kranjska Gora;0;0;0
+SI;SI-66;Krievci;0;0;0
+SI;SI-054;Krko;0;0;0
+SI;SI-055;Kungota;0;0;0
+SI;SI-056;Kuzma;0;0;0
+SI;SI-057;Lako;0;0;0
+SI;SI-058;Lenart;0;0;0
+SI;SI-059;Lendava[Lendva];0;0;0
+SI;SI-060;Litija;0;0;0
+SI;SI-06;Ljubljana;0;0;0
+SI;SI-062;Ljubno;0;0;0
+SI;SI-063;Ljutomer;0;0;0
+SI;SI-064;Logatec;0;0;0
+SI;SI-065;Loka dolina;0;0;0
+SI;SI-066;Loki Potok;0;0;0
+SI;SI-67;Lovrenc na Pohorju;0;0;0
+SI;SI-067;Luee;0;0;0
+SI;SI-068;Lukovica;0;0;0
+SI;SI-069;Majperk;0;0;0
+SI;SI-070;Maribor;0;0;0
+SI;SI-68;Markovci;0;0;0
+SI;SI-07;Medvode;0;0;0
+SI;SI-072;Menge;0;0;0
+SI;SI-073;Metlika;0;0;0
+SI;SI-074;Meica;0;0;0
+SI;SI-69;Miklav na Dravskem polju;0;0;0
+SI;SI-075;Miren-Kostanjevica;0;0;0
+SI;SI-70;Mirna Pee;0;0;0
+SI;SI-076;Mislinja;0;0;0
+SI;SI-077;Moravee;0;0;0
+SI;SI-078;Moravske Toplice;0;0;0
+SI;SI-079;Mozirje;0;0;0
+SI;SI-080;Murska Sobota;0;0;0
+SI;SI-08;Muta;0;0;0
+SI;SI-082;Naklo;0;0;0
+SI;SI-083;Nazarje;0;0;0
+SI;SI-084;Nova Gorica;0;0;0
+SI;SI-085;Novo mesto;0;0;0
+SI;SI-086;Odranci;0;0;0
+SI;SI-7;Oplotnica;0;0;0
+SI;SI-087;Ormo;0;0;0
+SI;SI-088;Osilnica;0;0;0
+SI;SI-089;Pesnica;0;0;0
+SI;SI-090;Piran[Pirano];0;0;0
+SI;SI-09;Pivka;0;0;0
+SI;SI-092;Podeetrtek;0;0;0
+SI;SI-72;Podlehnik;0;0;0
+SI;SI-093;Podvelka;0;0;0
+SI;SI-73;Polzela;0;0;0
+SI;SI-094;Postojna;0;0;0
+SI;SI-74;Prebold;0;0;0
+SI;SI-095;Preddvor;0;0;0
+SI;SI-75;Prevalje;0;0;0
+SI;SI-096;Ptuj;0;0;0
+SI;SI-097;Puconci;0;0;0
+SI;SI-098;Raee-Fram;0;0;0
+SI;SI-099;Radeee;0;0;0
+SI;SI-00;Radenci;0;0;0
+SI;SI-0;Radlje ob Dravi;0;0;0
+SI;SI-02;Radovljica;0;0;0
+SI;SI-03;Ravne na Korokem;0;0;0
+SI;SI-76;Razkrije;0;0;0
+SI;SI-04;Ribnica;0;0;0
+SI;SI-77;Ribnica na Pohorju;0;0;0
+SI;SI-06;Rogaka Slatina;0;0;0
+SI;SI-05;Rogaovci;0;0;0
+SI;SI-07;Rogatec;0;0;0
+SI;SI-08;Rue;0;0;0
+SI;SI-78;Selnica ob Dravi;0;0;0
+SI;SI-09;Semie;0;0;0
+SI;SI-0;Sevnica;0;0;0
+SI;SI-;Seana;0;0;0
+SI;SI-2;Slovenj Gradec;0;0;0
+SI;SI-3;Slovenska Bistrica;0;0;0
+SI;SI-4;Slovenske Konjice;0;0;0
+SI;SI-79;Sodraica;0;0;0
+SI;SI-80;Soleava;0;0;0
+SI;SI-5;Stare;0;0;0
+SI;SI-8;Sveta Ana;0;0;0
+SI;SI-82;Sveti Andra v Slovenskih goricah;0;0;0
+SI;SI-6;Sveti Jurij;0;0;0
+SI;SI-033;alovci;0;0;0
+SI;SI-83;empeter-Vrtojba;0;0;0
+SI;SI-7;eneur;0;0;0
+SI;SI-8;entilj;0;0;0
+SI;SI-9;entjernej;0;0;0
+SI;SI-20;entjur pri Celju;0;0;0
+SI;SI-2;kocjan;0;0;0
+SI;SI-22;kofja Loka;0;0;0
+SI;SI-23;kofljica;0;0;0
+SI;SI-24;marje pri Jelah;0;0;0
+SI;SI-25;martno ob Paki;0;0;0
+SI;SI-94;martno pri Litiji;0;0;0
+SI;SI-26;otanj;0;0;0
+SI;SI-27;tore;0;0;0
+SI;SI-84;Tabor;0;0;0
+SI;SI-00;Tiina;0;0;0
+SI;SI-28;Tolmin;0;0;0
+SI;SI-29;Trbovlje;0;0;0
+SI;SI-30;Trebnje;0;0;0
+SI;SI-85;Trnovska vas;0;0;0
+SI;SI-3;Trie;0;0;0
+SI;SI-86;Trzin;0;0;0
+SI;SI-32;Turniee;0;0;0
+SI;SI-33;Velenje;0;0;0
+SI;SI-87;Velika Polana;0;0;0
+SI;SI-34;Velike Laee;0;0;0
+SI;SI-88;Verej;0;0;0
+SI;SI-35;Videm;0;0;0
+SI;SI-36;Vipava;0;0;0
+SI;SI-37;Vitanje;0;0;0
+SI;SI-38;Vodice;0;0;0
+SI;SI-39;Vojnik;0;0;0
+SI;SI-89;Vransko;0;0;0
+SI;SI-40;Vrhnika;0;0;0
+SI;SI-4;Vuzenica;0;0;0
+SI;SI-42;Zagorje ob Savi;0;0;0
+SI;SI-43;Zavre;0;0;0
+SI;SI-44;Zreee;0;0;0
+SI;SI-90;alec;0;0;0
+SI;SI-46;elezniki;0;0;0
+SI;SI-9;etale;0;0;0
+SI;SI-47;iri;0;0;0
+SI;SI-92;irovnica;0;0;0
+SI;SI-93;uemberk;0;0;0
+UZ;UZ-TK;Toshkent;0;0;0;city
+VE;VE-X;Vargas;0;0;0state
+YE;YE-DA;Ad Dli;0;0;0
+YE;YE-AM;Amrn;0;0;0
+HN;HN-OC;Ocotepeque;0;0;0
+MY;MY-6;Wilayah Persekutuan Putrajaya;0;0;0federal territory
+TZ;TZ-26;Manyara;0;0;0
+UG;UG-23;Kaberamaido;0;0;E
+UG;UG-43;Kamwenge;0;0;W
+UG;UG-44;Kanungu;0;0;W
+UG;UG-2;Kayunga;0;0;C;
+UG;UG-45;Kyenjojo;0;0;W
+UG;UG-24;Mayuge;0;0;E
+UG;UG-3;Nakapiripirit;0;0;N
+UG;UG-32;Pader;0;0;N
+UG;UG-25;Sironko;0;0;E
+UG;UG-3;Wakiso;0;0;C;
+UG;UG-33;Yumbe;0;0;N
+LY;LY-AJ;Ajdbiy;0;0;0
+LY;LY-HZ;Al izm al Akhar;0;0;0
+LY;LY-JI;Al Jifrah;0;0;0
+LY;LY-KF;Al Kufrah;0;0;0
+LY;LY-MJ;Al Marj;0;0;0
+LY;LY-MB;Al Marqab;0;0;0
+LY;LY-QT;Al Qarn;0;0;0
+LY;LY-QB;Al Qubbah;0;0;0
+LY;LY-NQ;An Nuqa al Khams;0;0;0
+LY;LY-SH;Ash Shi;0;0;0
+LY;LY-BW;Ban Wald;0;0;0
+LY;LY-DR;Darnah;0;0;0
+LY;LY-GD;Ghadmis;0;0;0
+LY;LY-GR;Gharyn;0;0;0
+LY;LY-GT;Ght;0;0;0
+LY;LY-JB;Jaghbb;0;0;0
+LY;LY-MZ;Mizdah;0;0;0
+LY;LY-MQ;Murzuq;0;0;0
+LY;LY-NL;Nlt;0;0;0
+LY;LY-SB;Sabh;0;0;0
+LY;LY-SS;abrtah urmn;0;0;0
+LY;LY-SR;Surt;0;0;0
+LY;LY-TN;Tjr wa an Naw Arb;0;0;0
+LY;LY-TM;Tarhnah-Masalltah;0;0;0
+LY;LY-WD;Wd al ayt;0;0;0
+LY;LY-YJ;Yafran-Jd;0;0;0
+TN;TN-4;La Manouba;0;0;0
+GY;GY-CU;Cuyuni/Mazaruni;0;0;0
+GY;GY-DE;Demerara/Mahaica;0;0;0
+GY;GY-EB;East Berbice/Corentyne;0;0;0
+GY;GY-ES;Essequibo I./WEST D.;0;0;0
+GY;GY-MA;Mahaica/Berbice;0;0;0
+GY;GY-PM;Pomeroon/Supenaam;0;0;0
+GY;GY-PT;Potaro/Siparuni;0;0;0
+GY;GY-UD;Upper Demerara/Berbice;0;0;0
+GY;GY-UT;Upper Takutu/U.Essequibo;0;0;0
+AF;AF-KHO;Khowst;0;0;0
+AF;AF-NUR;Nrestn;0;0;0
+ID;ID-KR;Kepulauan Riau;0;0;SM;province
+AF;AF-DAY;Dykond;0;0;0
+AF;AF-PAN;Panjshr;0;0;0
+DJ;DJ-AR;Arta;0;0;region
+ID;ID-SR;Sulawesi Barat;0;0;SL;province
+VN;VN-7;Dien Bien;0;0;0
+VN;VN-72;Dak Nong;0;0;0
+VN;VN-73;Hau Giang;0;0;0
+
diff --git a/org.eclipse.stem.utility/parameters/ISOFIX/ISO_FIX.txt b/org.eclipse.stem.utility/parameters/ISOFIX/ISO_FIX.txt
new file mode 100644
index 0000000..77c5761
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISOFIX/ISO_FIX.txt
@@ -0,0 +1,3294 @@
+Albania:SHQIP‰RIA:UNKNOWN:AL-SH
+Austria:NIEDER”STERREICH:UNKNOWN:AT-3
+Austria:OBER”STERREICH:UNKNOWN:AT-4
+Austria:VORALBERG:UNKNOWN:AT-8
+Austria:K„RNTEN:UNKNOWN:AT-2
+Belgium:BRUXELLES-BRUSSEL:UNKNOWN:BE-BRX
+Belgium:NIVELLES:UNKNOWN:BE-NVL
+Bulgaria:MIHAJLOVGRAD:UNKNOWN:BG-21
+Bulgaria:GRAD SOFIJA (MUN.):UNKNOWN:BG-22
+Bulgaria:SOFIJA - CITY:UNKNOWN:BG-23
+Bulgaria:LOVEC:UNKNOWN:BG-29
+Iceland:ISLAND:UNKNOWN:IS-ISL
+Switzerland:BERN/BERNE:UNKNOWN:CH-BE
+Switzerland:NEUCHATEL:UNKNOWN:CH-NE
+Switzerland:GRAUB?NDEN/GRIGIONI/GRISCHUN:UNKNOWN:CH-GR
+Switzerland:FRIBOURG/FREIBURG:UNKNOWN:CH-FR
+Switzerland:MIDWALDEN:UNKNOWN:CH-NW
+Switzerland:VALAIS/WALLIS:UNKNOWN:CH-VS
+Switzerland:BERN/BERNE:UNKNOWN:CH-BE
+Switzerland:GENŠVE:UNKNOWN:CH-GN
+Switzerland:ZURICH:UNKNOWN:CH-ZH
+Switzerland:TICINO:UNKNOWN:CH-TI
+CZECH REPUBLIC:SEVEROCESKY KRAJ:UNKNOWN:CS-SE
+CZECH REPUBLIC:VYCHODOCESKY KRAJ:UNKNOWN:CS-VY
+CZECH REPUBLIC:STREDOCESKY KRAJ:UNKNOWN:CS-SR
+CZECH REPUBLIC:ZAPADOCESKY KRAJ:UNKNOWN:CS-ZD
+CZECH REPUBLIC:SEVEROMORAVSKY KRAJ:UNKNOWN:CS-SV
+CZECH REPUBLIC:PRAHA:UNKNOWN:CS-PR
+CZECH REPUBLIC:JIHOMORAVSKY KRAJ:UNKNOWN:CS-JM
+CZECH REPUBLIC:JIHOCESKY KRAJ:UNKNOWN:CS-JC
+CZECH REPUBLIC:STREDOLSLOVENSKY KRAJ:UNKNOWN:CS-ST
+CZECH REPUBLIC:YCHODOSLOVENSKI KRAJ:UNKNOWN:CS-YC
+CZECH REPUBLIC:ZAPADOSLOVENSKY KRAJ:UNKNOWN:CS-ZA
+CZECH REPUBLIC:BRATISLAVA:UNKNOWN:CS-BR
+GERMANY:CHEMNITZ:UNKNOWN:DE-CM
+GERMANY:WESER-EMS:UNKNOWN:DE-WE
+GERMANY:LUENEBURG:UNKNOWN:DE-LU
+GERMANY:HANNOVER:UNKNOWN:DE-HA
+GERMANY:MAGDEBURG:UNKNOWN:DE-MA
+GERMANY:BRAUNSCHWEIG:UNKNOWN:DE-BR
+GERMANY:DETMOLD:UNKNOWN:DE-DT
+GERMANY:MUENSTER:UNKNOWN:DE-MU
+GERMANY:DESSAU:UNKNOWN:DE-DA
+GERMANY:HALLE:UNKNOWN:DE-HA
+GERMANY:DUESSELDORF:UNKNOWN:DE-DU
+GERMANY:ARNSBERG:UNKNOWN:DE-AR
+GERMANY:LEIPZIG:UNKNOWN:DD-LP
+GERMANY:KASSEL:UNKNOWN:DE-KA
+GERMANY:THURINGEN:UNKNOWN:DE-TH
+GERMANY:DRESDEN:UNKNOWN:DE-DR
+GERMANY:KOELN:UNKNOWN:DE-KO
+GERMANY:GIESSEN:UNKNOWN:DE-GI
+GERMANY:KOBLENZ:UNKNOWN:DE-KO
+GERMANY:UNTERFRANKREN:UNKNOWN:DE-UN
+GERMANY:OBERFRANKEN:UNKNOWN:DE-OB
+GERMANY:DARMSTADT:UNKNOWN:DE-DA
+GERMANY:TRIER:UNKNOWN:DE-TI
+GERMANY:RHEINHESSEN:UNKNOWN:DE-RH
+GERMANY:OBERPFALZ:UNKNOWN:DE-OB
+GERMANY:STUTTGART:UNKNOWN:DE-ST
+GERMANY:MITTELFRANKEN:UNKNOWN:DE-MT
+GERMANY:KARLSRUHE:UNKNOWN:DE-KA
+GERMANY:NIEDERBAYERN:UNKNOWN:DE-NI
+GERMANY:OBERBAYERN:UNKNOWN:DE-BY
+GERMANY:SCHWABEN:UNKNOWN:DE-SH
+GERMANY:FREIBURG:UNKNOWN:DE-FR
+GERMANY:TUEBINGEN:UNKNOWN:DE-TU
+GERMANY:UNTERFRANKEN:UNKNOWN:DE-UT
+GERMANY:RHEINHESSEN-PFALZ:UNKNOWN:DE-RP
+DENMARK:VEST FOR STOREBAELT:UNKNOWN:DK-021
+DENMARK:HOVEDSTADSREGIONEN:UNKNOWN:DK-022
+DENMARK:OST FOR STOREBAELT:UNKNOWN:DK-023
+SPAIN:GALICIA:UNKNOWN:ES-GA
+SPAIN:PAIS VASCO:UNKNOWN:ES-VA
+SPAIN:CASTILLA - LEON:UNKNOWN:ES-LE
+SPAIN:ARAGON:UNKNOWN:ES-AR
+SPAIN:CATALUNA:UNKNOWN:ES-CT
+SPAIN:RIOJA:UNKNOWN:ES-RI
+SPAIN:CASTILLA - LA MANCHA:UNKNOWN:ES-MA
+SPAIN:COMUNIDAD VALENCIANA:UNKNOWN:ES-VA
+SPAIN:EXTREMADURA:UNKNOWN:ES-ET
+SPAIN:ANDALUCIA:UNKNOWN:ES-AD
+SPAIN:CANARIAS:UNKNOWN:ES-CN
+FINLAND:LAPPI/LAPPLAND:UNKNOWN:FI-LL
+FINLAND:OULU/ULEABORG:UNKNOWN:FI-UL
+FINLAND:VAASA/VASA:UNKNOWN:FI-VA
+FINLAND:KUOPIO:UNKNOWN:FI-KU
+FINLAND:POHJOIS-KARJALA/NORRA-KARELEN:UNKNOWN:FI-PO
+FINLAND:KESKI-SUOMI/MELLERSTA-FINLAND:UNKNOWN:FI-KE
+FINLAND:MIKKELI/ST MICHEL:UNKNOWN:FI-MK
+FINLAND:H„ME/TAVASTEHUS:UNKNOWN:FI-TA
+FINLAND:TURKU-PORI/ABO-BJ”RNEBORG:UNKNOWN:FI-TU
+FINLAND:KYMI/KYMMENE:UNKNOWN:FI-KY
+FINLAND:UUDENMAA/NYLAND:UNKNOWN:FI-UU
+FINLAND:ALAND/AHVENANMAA:UNKNOWN:FI-AL
+FRANCE:NORD - PAS-DE-CALAIS:UNKNOWN:FR-PC
+FRANCE:PICARDIE:UNKNOWN:FR-PI
+FRANCE:CHAMPAGNE-ARDENNE:UNKNOWN:FR-CH
+FRANCE:HAUTE-NORMANDIE:UNKNOWN:FR-HA
+FRANCE:BASSE-NORMANDIE:UNKNOWN:FR-BA
+FRANCE:LORRAINE:UNKNOWN:FR-LO
+FRANCE:ILE DE FRANCE:UNKNOWN:FR-IF
+FRANCE:ALSACE:UNKNOWN:FR-AL
+FRANCE:CENTRE:UNKNOWN:FR-CE
+FRANCE:BRETAGNE:UNKNOWN:FR-BR
+FRANCE:PAYS DE LA LOIRE:UNKNOWN:FR-PL
+FRANCE:BOURGOGNE:UNKNOWN:FR-BO
+FRANCE:FRANCHE-COMTE:UNKNOWN:FR-CO
+FRANCE:POITOU-CHARENTES:UNKNOWN:FR-PO
+FRANCE:AUVERGNE:UNKNOWN:FR-AU
+FRANCE:RHONE-ALPES:UNKNOWN:FR-RH
+FRANCE:LIMOUSIN:UNKNOWN:FR-LI
+FRANCE:AQUITAINE:UNKNOWN:FR-AQ
+FRANCE:PROVENCE-ALPES-COTE D'AZUR:UNKNOWN:FR-PA
+FRANCE:MIDI-PYRENEES:UNKNOWN:FR-MP
+FRANCE:LANGUEDOC-ROUSSILLON:UNKNOWN:FR-LA
+FRANCE:CORSE:UNKNOWN:FR-CO
+GREECE:ANATOLIKI MAKEDONIA:UNKNOWN:GR-80
+GREECE:KENTRIKI MAKEDONIA:UNKNOWN:GR-86
+GREECE:DYTIKI MAKEDONIA:UNKNOWN:GR-60
+GREECE:IPEIROS:UNKNOWN:GR-61
+GREECE:THESSALIA:UNKNOWN:GR-63
+GREECE:VOREIO AIGAIO:UNKNOWN:GR-65
+GREECE:IONIA NISIA:UNKNOWN:GR-67
+GREECE:STEREA ELLADA:UNKNOWN:GR-70
+GREECE:DYTIKI ELLADA:UNKNOWN:GR-71
+GREECE:PELOPONNISOS:UNKNOWN:GR-74
+GREECE:NOTIO AIGAIO:UNKNOWN:GR-75
+GREECE:KRITI:UNKNOWN:GR-76
+CROATIA:HRVATSKA:UNKNOWN:HR-11
+HUNGARY:BORSOD-ABAUJ-ZEMPLEN:UNKNOWN:HU-ZE
+HUNGARY:SZABOLCS-SZATAR-BEREG:UNKNOWN:HU-BE
+HUNGARY:GY”R-MOSON-SOPRON:UNKNOWN:HU-SO
+IRELAND:IRELAND:UNKNOWN:IE-I
+ITALY:TRENTINO-ALTO ADIGE:UNKNOWN:IT-AD
+ITALY:VENETO:UNKNOWN:IT-VN
+ITALY:FRIULI-VENEZIA:UNKNOWN:IT-GI
+ITALY:LOMBARDIA:UNKNOWN:IT-LB
+ITALY:PIEMONTE:UNKNOWN:IT-PM
+ITALY:VALLE D'AOSTA:UNKNOWN:IT-AS
+ITALY:EMILIA-ROMAGNA:UNKNOWN:IT-ER
+ITALY:LIGURIA:UNKNOWN:IT-LG
+ITALY:TOSCANA:UNKNOWN:IT-TC
+ITALY:MARCHE:UNKNOWN:IT-MA
+ITALY:UMBRIA:UNKNOWN:IT-UM
+ITALY:ABRUZZI:UNKNOWN:IT-AB
+ITALY:LAZIO:UNKNOWN:IT-LA
+ITALY:PUGLIA:UNKNOWN:IT-PU
+ITALY:MOLISE:UNKNOWN:IT-ML
+ITALY:CAMPANIA:UNKNOWN:IT-CM
+ITALY:SARDEGNA:UNKNOWN:IT-SD
+ITALY:BASILICATA:UNKNOWN:IT-BC
+ITALY:CALABRIA:UNKNOWN:IT-CI
+ITALY:SICILIA:UNKNOWN:IT-SC
+ITALY:FRIULI-VENEZIA GIULIA:UNKNOWN:IT-FV
+ICELAND:ICELAND:UNKNOWN:IS-I
+LUXEMBOURG:LUXEMBOURG (GRAND-DUCHE):UNKNOWN:LU-L
+LIECHTENSTEIN:Lichtenstein:UNKNOWN:LI-LIE
+NORWAY:NORD-TROENDELAG:UNKNOWN:NO-7
+NORWAY:SOER-TROENDELAG:UNKNOWN:NO-6
+NORWAY:MOERE OG ROMSDAL:UNKNOWN:NO-5
+NORWAY:OSLO OG AKERSHUS:UNKNOWN:NO-03
+NORWAY:OESTFOLD:UNKNOWN:NO-0
+POLAND:GDANSK:UNKNOWN:PL-GD
+POLAND:SLUPSK:UNKNOWN:PL-SP
+POLAND:KOSZALIN:UNKNOWN:PL-KO
+POLAND:ELBLAG:UNKNOWN:PL-EL
+POLAND:SUWALSKI:UNKNOWN:PL-SU
+POLAND:OLSZTYN:UNKNOWN:PL-OL
+POLAND:SZCZECIN:UNKNOWN:PL-CI
+POLAND:BYDGOSZCZ:UNKNOWN:PL-BY
+POLAND:LOMZA:UNKNOWN:PL-LO
+POLAND:BIALYSTOK:UNKNOWN:PL-BI
+POLAND:PILA:UNKNOWN:PL-PI
+POLAND:TORUN:UNKNOWN:PL-TO
+POLAND:OSTROLEKA:UNKNOWN:PL-OS
+POLAND:CIECHANOW:UNKNOWN:PL-CE
+POLAND:GORZOW:UNKNOWN:PL-GO
+POLAND:WLOCLAWEK:UNKNOWN:PL-WO
+POLAND:PLOCK:UNKNOWN:PL-LO
+POLAND:POZNAN:UNKNOWN:PL-PZ
+POLAND:SIEDLCE:UNKNOWN:PL-SI
+POLAND:WARSZAWA:UNKNOWN:PL-WA
+POLAND:KONIN:UNKNOWN:PL-KO
+POLAND:BIALA PODLASKA:UNKNOWN:PL-BP
+POLAND:ZIELONA GORA:UNKNOWN:PL-ZE
+POLAND:SKIERNIEWICE:UNKNOWN:PL-SK
+POLAND:LESZNO:UNKNOWN:PL-LE
+POLAND:KALISZ:UNKNOWN:PL-KA
+POLAND:LODZ:UNKNOWN:PL-LD
+POLAND:SIERADZ:UNKNOWN:PL-SR
+POLAND:RADOM:UNKNOWN:PL-RA
+POLAND:LUBLIN:UNKNOWN:PL-LL
+POLAND:LEGNICA:UNKNOWN:PL-LG
+POLAND:PIOTRKOW:UNKNOWN:PL-PO
+POLAND:CHELM:UNKNOWN:PL-CH
+POLAND:WROCLAW:UNKNOWN:PL-WR
+POLAND:JELENIA GORA:UNKNOWN:PL-JE
+POLAND:KIELCE:UNKNOWN:PL-KL
+POLAND:CZESTOCHOWA:UNKNOWN:PL-CZ
+POLAND:OPOLE:UNKNOWN:PL-OP
+POLAND:TARNOBRZEG:UNKNOWN:PL-TA
+POLAND:WALBRZYCH:UNKNOWN:PL-WY
+POLAND:ZAMOSC:UNKNOWN:PL-ZM
+POLAND:KATOWICE:UNKNOWN:PL-KT
+POLAND:RZESZOW:UNKNOWN:PL-RZ
+POLAND:PRZEMYSL:UNKNOWN:PL-PR
+POLAND:KRAKOW:UNKNOWN:PL-KW
+POLAND:TARNOW:UNKNOWN:PL-TW
+POLAND:BIELSKO-BIALA:UNKNOWN:PL-BB
+POLAND:KROSNO:UNKNOWN:PL-KR
+POLAND:NOWY SACZ:UNKNOWN:PL-NS
+PORTUGAL:NORTE:UNKNOWN:PT-11
+PORTUGAL:CENTRO:UNKNOWN:PT-10
+PORTUGAL:LISBOA E VALE DO TEJO:UNKNOWN:PT-01
+PORTUGAL:ALENTEJO:UNKNOWN:PT-14
+PORTUGAL:ALGARVE:UNKNOWN:PT-15
+ROMANIA:BOTOSANI:UNKNOWN:RO-BT
+ROMANIA:MARAMURES:UNKNOWN:RO-MM
+ROMANIA:BISTRITA-NASAUD:UNKNOWN:RO-BN
+ROMANIA:IASI:UNKNOWN:RO-IS
+ROMANIA:SALAJ:UNKNOWN:RO-SJ
+ROMANIA:NEAMT:UNKNOWN:RO-NT
+ROMANIA:MURES:UNKNOWN:RO-MS
+ROMANIA:BACAU:UNKNOWN:RO-BC
+ROMANIA:TIMIS:UNKNOWN:RO-TM
+ROMANIA:BRASOV:UNKNOWN:RO-BV
+ROMANIA:GALATI:UNKNOWN:RO-GL
+ROMANIA:BUZAU:UNKNOWN:RO-BZ
+ROMANIA:CARAS-SEVERIN:UNKNOWN:RO-CS
+ROMANIA:ARGES:UNKNOWN:RO-AG
+ROMANIA:VILCEA:UNKNOWN:RO-VL
+ROMANIA:BRAILA:UNKNOWN:RO-BR
+ROMANIA:DIMBOVITA:UNKNOWN:RO-DB
+ROMANIA:MEHEDINTI:UNKNOWN:RO-MH
+ROMANIA:IALOMITA:UNKNOWN:RO-IL
+ROMANIA:CALARASI:UNKNOWN:RO-CA
+ROMANIA:BUCURESTI:UNKNOWN:RO-B
+ROMANIA:CONSTANTA:UNKNOWN:RO-CT
+RUSSIA:MOURMANSKAïA OBLAST;PECHENGSKIY:UNKNOWN:RU-PCG
+RUSSIA:NENETSKI NATIONAL OKROUG;NENETSKY NAT. OKROUG:UNKNOWN:RU-NNT
+RUSSIA:MOURMANSKAïA OBLAST;KOLSKIY:UNKNOWN:RU-KLK
+RUSSIA:MOURMANSKAïA OBLAST;SEVEROMORSK:UNKNOWN:RU-SVM
+RUSSIA:MOURMANSKAïA OBLAST;POLYARNYI:UNKNOWN:RU-PLR
+RUSSIA:MOURMANSKAïA OBLAST;MURMANSK:UNKNOWN:RU-MRN
+RUSSIA:MOURMANSKAïA OBLAST;LOVOZERSKIY:UNKNOWN:RU-LVR
+RUSSIA:KOMI;VORKUTA:UNKNOWN:RU-VRT
+RUSSIA:MOURMANSKAïA OBLAST;OLENEGORSK:UNKNOWN:RU-OLG
+RUSSIA:MOURMANSKAïA OBLAST;MONCHEGORSK:UNKNOWN:RU-MNG
+RUSSIA:MOURMANSKAïA OBLAST;KOVDORSKIY:UNKNOWN:RU-KVR
+RUSSIA:MOURMANSKAïA OBLAST;KIROVSK:UNKNOWN:RU-KRV
+RUSSIA:MOURMANSKAïA OBLAST;APATITY:UNKNOWN:RU-APT
+RUSSIA:NENETSKI NATIONAL OKROUG;NARYAN-MAR:UNKNOWN:RU-NRN
+RUSSIA:MOURMANSKAïA OBLAST;KANDALAKSHA:UNKNOWN:RU-KNK
+RUSSIA:MOURMANSKAïA OBLAST;POLYARNIYE ZORY:UNKNOWN:RU-PLY
+RUSSIA:MOURMANSKAïA OBLAST;TERSKIY:UNKNOWN:RU-TRK
+RUSSIA:KOMI;UST-TSILEMSKIY:UNKNOWN:RU-USL
+RUSSIA:KOMI;USINSKIY:UNKNOWN:RU-USS
+RUSSIA:KOMI;INTA:UNKNOWN:RU-INT
+RUSSIA:KARELIA;LOUKHSKIY:UNKNOWN:RU-LUS
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;MEZENSKIY:UNKNOWN:RU-MZS
+RUSSIA:KOMI;IZHEMSKIY:UNKNOWN:RU-IZS
+RUSSIA:KOMI;USINSK:UNKNOWN:RU-USN
+RUSSIA:KARELIA;KEMSKIY:UNKNOWN:RU-KMK
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;PRIMORSKIY:UNKNOWN:RU-PRR
+RUSSIA:KOMI;PECHORSKIY:UNKNOWN:RU-PCR
+RUSSIA:KARELIA;KALEVALSKIY:UNKNOWN:RU-KLL
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;LESHUKONSKIY:UNKNOWN:RU-LSN
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;PINEZHSKIY:UNKNOWN:RU-PNH
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;SOLOVETSKIY:UNKNOWN:RU-SLT
+RUSSIA:KOMI;PECHORA:UNKNOWN:RU-PCA
+RUSSIA:KARELIA;KEM':UNKNOWN:RU-KEM
+RUSSIA:KARELIA;BELOMORSKIY:UNKNOWN:RU-BLR
+RUSSIA:KOMI;UDORSKIY:UNKNOWN:RU-UDS
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KHOLMOGORSKIY:UNKNOWN:RU-KHR
+RUSSIA:KARELIA;KOSTOMUKSHA:UNKNOWN:RU-KSK
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;ARKHANGELSK:UNKNOWN:RU-ARG
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;SEVERODVINSK:UNKNOWN:RU-SVD
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;ONEZHSKIY:UNKNOWN:RU-ONS
+RUSSIA:KOMI;KNYAZHPOGOSTSKIY:UNKNOWN:RU-KNG
+RUSSIA:KARELIA;MUYEZERSKIY:UNKNOWN:RU-MYR
+RUSSIA:KOMI;SOSNOGORSKIY:UNKNOWN:RU-SSR
+RUSSIA:KOMI;UKHTA:UNKNOWN:RU-UKT
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;NOVODVINSK:UNKNOWN:RU-NVV
+RUSSIA:KARELIA;SEGEZHSKIY:UNKNOWN:RU-SGH
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;PLESETSKIY:UNKNOWN:RU-PLT
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;ONEGA:UNKNOWN:RU-ONG
+RUSSIA:KOMI;VUKTYLSKIY:UNKNOWN:RU-VKL
+RUSSIA:KARELIA;MEDVEZHYEGORSKIY:UNKNOWN:RU-MDG
+RUSSIA:KARELIA;SEGEZHA:UNKNOWN:RU-SGZ
+RUSSIA:KOMI;TROITSKO-PECHORSKIY:UNKNOWN:RU-TRC
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;VINOGRADOVSKIY:UNKNOWN:RU-VND
+RUSSIA:KOMI;SOSNOGORSK:UNKNOWN:RU-SSG
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;VERKHNETOYEMSKIY:UNKNOWN:RU-VRY
+RUSSIA:KARELIA;SUOYARVSKIY:UNKNOWN:RU-SOV
+RUSSIA:KARELIA;KONDOPOZHSKIY:UNKNOWN:RU-KNZ
+RUSSIA:KOMI;KORTKEROSSKIY:UNKNOWN:RU-KRS
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;LENSKIY:UNKNOWN:RU-LNK
+RUSSIA:KARELIA;PUDOZHSKIY:UNKNOWN:RU-PDH
+RUSSIA:KOMI;UST-VYMSKIY:UNKNOWN:RU-USM
+RUSSIA:KOMI;UST-KULOMSKIY:UNKNOWN:RU-USK
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;SHENKURSKIY:UNKNOWN:RU-SHR
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;NYANDOMSKIY:UNKNOWN:RU-NYM
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KRASNOBORSKIY:UNKNOWN:RU-KRR
+RUSSIA:KARELIA;KONDOPOGA:UNKNOWN:RU-KNP
+RUSSIA:KARELIA;SORTAVALA:UNKNOWN:RU-SRV
+RUSSIA:KOMI;SYKTYVDINSKIY:UNKNOWN:RU-SYN
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KARGAPOLSKIY:UNKNOWN:RU-KRL
+RUSSIA:KARELIA;PRYAZHINSKIY:UNKNOWN:RU-PRN
+RUSSIA:KARELIA;PRIONEZHSKIY:UNKNOWN:RU-PRZ
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;VELSKIY:UNKNOWN:RU-VLK
+RUSSIA:KARELIA;PITKYARANTSKIY:UNKNOWN:RU-PTN
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;USTYANSKIY:UNKNOWN:RU-USI
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KOTLASSKIY:UNKNOWN:RU-KTS
+RUSSIA:KOMI;SYKTYVKVAR:UNKNOWN:RU-SYV
+RUSSIA:KARELIA;PETROZAVODSK:UNKNOWN:RU-PTV
+RUSSIA:KARELIA;LAKHDENPOKHSKIY:UNKNOWN:RU-LKK
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;VILEGODSKIY:UNKNOWN:RU-VLD
+RUSSIA:KARELIA;PYTKIARANTA:UNKNOWN:RU-PYR
+RUSSIA:VOLOGODSKAïA OBLAST;VYTEGORSKIY:UNKNOWN:RU-VYR
+RUSSIA:KOMI;SYSOLSKIY:UNKNOWN:RU-SYS
+RUSSIA:KARELIA;OLONETSKIY:UNKNOWN:RU-OLT
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KONOSHSKIY:UNKNOWN:RU-KNH
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KORYAZHMA:UNKNOWN:RU-KRZ
+RUSSIA:ARKHANGELSKAïA OBLAST RéS;KOTLAS:UNKNOWN:RU-KOL
+RUSSIA:VOLOGODSKAïA OBLAST;VELIKOUSTYUGSKIY:UNKNOWN:RU-VLT
+RUSSIA:KOMI;PRILUZSKIY:UNKNOWN:RU-PRS
+RUSSIA:VOLOGODSKAïA OBLAST;TARNOGSKIY:UNKNOWN:RU-TRG
+RUSSIA:KOMI;KOYGORODSKIY:UNKNOWN:RU-KYD
+RUSSIA:VOLOGODSKAïA OBLAST;NYUKSENSKIY:UNKNOWN:RU-NYN
+RUSSIA:VOLOGODSKAïA OBLAST;VERKHOVAZHSKIY:UNKNOWN:RU-VRZ
+RUSSIA:VOLOGODSKAïA OBLAST;KIRILLOVSKIY:UNKNOWN:RU-KRK
+RUSSIA:VOLOGODSKAïA OBLAST;VELIKIY USTYUG:UNKNOWN:RU-VL 
+RUSSIA:VOLOGODSKAïA OBLAST;VOZHEGODSKIY:UNKNOWN:RU-VZD
+RUSSIA:VOLOGODSKAïA OBLAST;VASHKINSKIY:UNKNOWN:RU-VSN
+RUSSIA:VOLOGODSKAïA OBLAST;BELOZERSKIY:UNKNOWN:RU-BLS
+RUSSIA:VOLOGODSKAïA OBLAST;BABAYEVSKIY:UNKNOWN:RU-BBV
+RUSSIA:VOLOGODSKAïA OBLAST;KICHMENGSKO GORODETSKIY:UNKNOWN:RU-KCG
+RUSSIA:VOLOGODSKAïA OBLAST;KHAROVSKIY:UNKNOWN:RU-KHV
+RUSSIA:VOLOGODSKAïA OBLAST;TOTEMSKIY:UNKNOWN:RU-TTS
+RUSSIA:VOLOGODSKAïA OBLAST;SYAMZHENSKIY:UNKNOWN:RU-SYK
+RUSSIA:VOLOGODSKAïA OBLAST;UCT-KUBINSKIY:UNKNOWN:RU-UCN
+RUSSIA:VOLOGODSKAïA OBLAST;BABUSHKINSKIY:UNKNOWN:RU-BBN
+RUSSIA:VOLOGODSKAïA OBLAST;NIKOLSKIY:UNKNOWN:RU-NKS
+RUSSIA:VOLOGODSKAïA OBLAST;VOLOGODSKIY:UNKNOWN:RU-VLS
+RUSSIA:VOLOGODSKAïA OBLAST;SOKOLSKIY:UNKNOWN:RU-SKS
+RUSSIA:VOLOGODSKAïA OBLAST;KADUYSKIY:UNKNOWN:RU-KDS
+RUSSIA:VOLOGODSKAïA OBLAST;CHEREPOVETSKIY:UNKNOWN:RU-CHV
+RUSSIA:VOLOGODSKAïA OBLAST;SHEKSNINSKIY:UNKNOWN:RU-SHN
+RUSSIA:VOLOGODSKAïA OBLAST;MEZHDURECHENSKIY:UNKNOWN:RU-MZC
+RUSSIA:VOLOGODSKAïA OBLAST;SOKOL:UNKNOWN:RU-SOL
+RUSSIA:VOLOGODSKAïA OBLAST;CHAGODESCHENSKIY:UNKNOWN:RU-CHC
+RUSSIA:VOLOGODSKAïA OBLAST;VOLOGDA:UNKNOWN:RU-VLG
+RUSSIA:VOLOGODSKAïA OBLAST;USTYUZHENSKIY:UNKNOWN:RU-USY
+RUSSIA:VOLOGODSKAïA OBLAST;CHEREPOVETZ:UNKNOWN:RU-CHE
+RUSSIA:VOLOGODSKAïA OBLAST;GRYAZOVETSKIY:UNKNOWN:RU-GRT
+RUSSIA:TAMBOVSKAïA OBLAST;MORSHANSKIY:UNKNOWN:RU-MRS
+RUSSIA:LIPETSKAïA OBLAST;CHAPLYGINSKIY:UNKNOWN:RU-CHN
+RUSSIA:LIPETSKAïA OBLAST;DANKOVSKIY:UNKNOWN:RU-DNV
+RUSSIA:TAMBOVSKAïA OBLAST;STAROYURYEVSKIY:UNKNOWN:RU-STY
+RUSSIA:TAMBOVSKAïA OBLAST;SOSNOVSKIY:UNKNOWN:RU-SSV
+RUSSIA:TAMBOVSKAïA OBLAST;MORSHANSK:UNKNOWN:RU-MRK
+RUSSIA:LIPETSKAïA OBLAST;LEV -TOLSTOVSKIY:UNKNOWN:RU-LVS
+RUSSIA:TAMBOVSKAïA OBLAST;PERVOMAYSKIY:UNKNOWN:RU-PRY
+RUSSIA:TAMBOVSKAïA OBLAST;PICHAYEVSKIY:UNKNOWN:RU-PCV
+RUSSIA:LIPETSKAïA OBLAST;DANKOV:UNKNOWN:RU-DAK
+RUSSIA:TAMBOVSKAïA OBLAST;MICHURINSKIY:UNKNOWN:RU-MCN
+RUSSIA:TAMBOVSKAïA OBLAST;NIKIFOROVSKIY:UNKNOWN:RU-NKV
+RUSSIA:LIPETSKAïA OBLAST;LEBEDYANSKIY:UNKNOWN:RU-LBN
+RUSSIA:TAMBOVSKAïA OBLAST;BONDARSKIY:UNKNOWN:RU-BNR
+RUSSIA:TAMBOVSKAïA OBLAST;GAVRILOVSKIY:UNKNOWN:RU-GVV
+RUSSIA:TAMBOVSKAïA OBLAST;TAMBOVSKIY:UNKNOWN:RU-TMV
+RUSSIA:LIPETSKAïA OBLAST;KRASNINSKIY:UNKNOWN:RU-KRN
+RUSSIA:LIPETSKAïA OBLAST;DOBROVSKIY:UNKNOWN:RU-DBV
+RUSSIA:LIPETSKAïA OBLAST;STANOVLYANSKIY:UNKNOWN:RU-STA
+RUSSIA:TAMBOVSKAïA OBLAST;MICHURINSK:UNKNOWN:RU-MCR
+RUSSIA:TAMBOVSKAïA OBLAST;KIRSANOVSKIY:UNKNOWN:RU-KRI
+RUSSIA:TAMBOVSKAïA OBLAST;RASSKAZOVSKIY:UNKNOWN:RU-RSV
+RUSSIA:LIPETSKAïA OBLAST;IZMALKOVSKIY:UNKNOWN:RU-IZV
+RUSSIA:TAMBOVSKAïA OBLAST;UMETSKIY:UNKNOWN:RU-UMS
+RUSSIA:LIPETSKAïA OBLAST;LIPETSKIY:UNKNOWN:RU-LPS
+RUSSIA:TAMBOVSKAïA OBLAST;PETROVSKIY:UNKNOWN:RU-PTS
+RUSSIA:LIPETSKAïA OBLAST;ZADONSKIY:UNKNOWN:RU-ZDS
+RUSSIA:LIPETSKAïA OBLAST;YELETSKIY:UNKNOWN:RU-YLS
+RUSSIA:TAMBOVSKAïA OBLAST;TAMBOV:UNKNOWN:RU-TAB
+RUSSIA:LIPETSKAïA OBLAST;LIPETSK:UNKNOWN:RU-LPT
+RUSSIA:LIPETSKAïA OBLAST;GRYAZINSKIY:UNKNOWN:RU-GRN
+RUSSIA:TAMBOVSKAïA OBLAST;RASSKAZOVO:UNKNOWN:RU-RSZ
+RUSSIA:TAMBOVSKAïA OBLAST;KIRSANOVO:UNKNOWN:RU-KRO
+RUSSIA:LIPETSKAïA OBLAST;ELETZ:UNKNOWN:RU-ELT
+RUSSIA:TAMBOVSKAïA OBLAST;KOTOVSK:UNKNOWN:RU-KTV
+RUSSIA:TAMBOVSKAïA OBLAST;ZNAMENSKIY:UNKNOWN:RU-ZNN
+RUSSIA:TAMBOVSKAïA OBLAST;INZHAVINSKIY:UNKNOWN:RU-INN
+RUSSIA:LIPETSKAïA OBLAST;GRYAZY:UNKNOWN:RU-GRZ
+RUSSIA:LIPETSKAïA OBLAST;DOLGORUKOVSKIY:UNKNOWN:RU-DLK
+RUSSIA:LIPETSKAïA OBLAST;DOBRINSKIY:UNKNOWN:RU-DBN
+RUSSIA:TAMBOVSKAïA OBLAST;MORDOVSKIY:UNKNOWN:RU-MRV
+RUSSIA:TAMBOVSKAïA OBLAST;SAMPURSKIY:UNKNOWN:RU-SMR
+RUSSIA:TAMBOVSKAïA OBLAST;RZHAKSINSKIY:UNKNOWN:RU-RZN
+RUSSIA:KOURSKAïA OBLAST;ZHELEZNOGORSKIY:UNKNOWN:RU-ZHG
+RUSSIA:KOURSKAïA OBLAST;PONYROVSKIY:UNKNOWN:RU-PNV
+RUSSIA:KOURSKAïA OBLAST;DMITRIYEVSKIY:UNKNOWN:RU-DMV
+RUSSIA:LIPETSKAïA OBLAST;USMANSKIY:UNKNOWN:RU-US 
+RUSSIA:LIPETSKAïA OBLAST;KHLEVENSKIY:UNKNOWN:RU-KHN
+RUSSIA:KOURSKAïA OBLAST;FATEZHSKIY:UNKNOWN:RU-FTH
+RUSSIA:LIPETSKAïA OBLAST;TERBUNSKIY:UNKNOWN:RU-TRN
+RUSSIA:TAMBOVSKAïA OBLAST;TOKAREVSKIY:UNKNOWN:RU-TKV
+RUSSIA:LIPETSKAïA OBLAST;VOLOVSKIY:UNKNOWN:RU-VLI
+RUSSIA:KOURSKAïA OBLAST;ZOLOTUKHINSKIY:UNKNOWN:RU-ZLH
+RUSSIA:TAMBOVSKAïA OBLAST;UVAROVSKIY:UNKNOWN:RU-UVV
+RUSSIA:KOURSKAïA OBLAST;SCHIGROVSKIY:UNKNOWN:RU-SCV
+RUSSIA:VORONEJSKAïA OBLAST;RAMONSKIY:UNKNOWN:RU-RMS
+RUSSIA:TAMBOVSKAïA OBLAST;MUCHKAPSKIY:UNKNOWN:RU-MCP
+RUSSIA:VORONEJSKAïA OBLAST;SEMILUKSKIY:UNKNOWN:RU-SMK
+RUSSIA:TAMBOVSKAïA OBLAST;ZHERDEVSKIY:UNKNOWN:RU-ZHV
+RUSSIA:KOURSKAïA OBLAST;CHEREMISINOVSKIY:UNKNOWN:RU-CHO
+RUSSIA:KOURSKAïA OBLAST;KHOMUTOVSKIY:UNKNOWN:RU-KHS
+RUSSIA:TAMBOVSKAïA OBLAST;UVAROVO:UNKNOWN:RU-UVO
+RUSSIA:KOURSKAïA OBLAST;KONYSHEVSKIY:UNKNOWN:RU-KNV
+RUSSIA:KOURSKAïA OBLAST;SOVETSKIY:UNKNOWN:RU-SVS
+RUSSIA:KOURSKAïA OBLAST;KASTORENSKIY:UNKNOWN:RU-KSN
+RUSSIA:VORONEJSKAïA OBLAST;VERKHNEKHAVSKIY:UNKNOWN:RU-VRH
+RUSSIA:VORONEJSKAïA OBLAST;ERTILSKIY:UNKNOWN:RU-ERS
+RUSSIA:KOURSKAïA OBLAST;KURSKIY:UNKNOWN:RU-KRY
+RUSSIA:KOURSKAïA OBLAST;TSCHIGRY:UNKNOWN:RU-TSG
+RUSSIA:KOURSKAïA OBLAST;KURCHATOVSKIY:UNKNOWN:RU-KR 
+RUSSIA:VORONEJSKAïA OBLAST;VORONEZH:UNKNOWN:RU-VRN
+RUSSIA:KOURSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OKR
+RUSSIA:VORONEJSKAïA OBLAST;NOVOUSMANSKIY:UNKNOWN:RU-NVN
+RUSSIA:VORONEJSKAïA OBLAST;PANINSKIY:UNKNOWN:RU-PNS
+RUSSIA:KOURSKAïA OBLAST;L'GOVSKY:UNKNOWN:RU-LGV
+RUSSIA:KOURSKAïA OBLAST;KURSK:UNKNOWN:RU-KUS
+RUSSIA:KOURSKAïA OBLAST;TIMSKIY:UNKNOWN:RU-TMK
+RUSSIA:KOURSKAïA OBLAST;RYLSKIY:UNKNOWN:RU-RYK
+RUSSIA:VORONEJSKAïA OBLAST;NIZHNEDEVITSKIY:UNKNOWN:RU-NZV
+RUSSIA:VORONEJSKAïA OBLAST;TERNOVSKIY:UNKNOWN:RU-TRV
+RUSSIA:VORONEJSKAïA OBLAST;GRIBANOVSKIY:UNKNOWN:RU-GRV
+RUSSIA:VORONEJSKAïA OBLAST;BORISOGLEBSKIY:UNKNOWN:RU-BRL
+RUSSIA:VORONEJSKAïA OBLAST;KHOKHOLSKIY:UNKNOWN:RU-KHL
+RUSSIA:KOURSKAïA OBLAST;LGOV:UNKNOWN:RU-LG 
+RUSSIA:VORONEJSKAïA OBLAST;ANNINSKIY:UNKNOWN:RU-ANS
+RUSSIA:KOURSKAïA OBLAST;KURCHATOV:UNKNOWN:RU-KRT
+RUSSIA:KOURSKAïA OBLAST;SOLNTSEVSKIY:UNKNOWN:RU-SLV
+RUSSIA:KOURSKAïA OBLAST;GORSHECHENSKIY:UNKNOWN:RU-GRH
+RUSSIA:KOURSKAïA OBLAST;MEDVENSKIY:UNKNOWN:RU-MDN
+RUSSIA:KOURSKAïA OBLAST;MANTUROVSKIY:UNKNOWN:RU-MNV
+RUSSIA:KOURSKAïA OBLAST;BOLSHESOLDATSKIY:UNKNOWN:RU-BLL
+RUSSIA:KOURSKAïA OBLAST;KORENEVSKIY:UNKNOWN:RU-KR1
+RUSSIA:KOURSKAïA OBLAST;GLUSHKOVSKIY:UNKNOWN:RU-GLV
+RUSSIA:VORONEJSKAïA OBLAST;KASHIRSKIY:UNKNOWN:RU-KSR
+RUSSIA:VORONEJSKAïA OBLAST;POVORINSKIY:UNKNOWN:RU-PVN
+RUSSIA:KOURSKAïA OBLAST;SUDZHANSKIY:UNKNOWN:RU-SDN
+RUSSIA:BELGORODSKAïA OBLAST;GUBKINSKIY:UNKNOWN:RU-GBN
+RUSSIA:BELGORODSKAïA OBLAST;STAROOSKOLSKIY:UNKNOWN:RU-STK
+RUSSIA:VORONEJSKAïA OBLAST;NOVOKHOPERSKIY:UNKNOWN:RU-NVP
+RUSSIA:VORONEJSKAïA OBLAST;BORISOGLEBSK:UNKNOWN:RU-BRG
+RUSSIA:VORONEJSKAïA OBLAST;BOBROVSKIY:UNKNOWN:RU-BBS
+RUSSIA:KOURSKAïA OBLAST;OBOYANSKIY:UNKNOWN:RU-OBN
+RUSSIA:KOURSKAïA OBLAST;PRISTENSKIY:UNKNOWN:RU-PRK
+RUSSIA:VORONEJSKAïA OBLAST;TALOVSKIY:UNKNOWN:RU-TLS
+RUSSIA:BELGORODSKAïA OBLAST;STARYI OSKOL:UNKNOWN:RU-ST 
+RUSSIA:VORONEJSKAïA OBLAST;REPIYEVKA:UNKNOWN:RU-RPV
+RUSSIA:BELGORODSKAïA OBLAST;GUBKIN:UNKNOWN:RU-GUK
+RUSSIA:VORONEJSKAïA OBLAST;LISKINSKIY:UNKNOWN:RU-LSS
+RUSSIA:KOURSKAïA OBLAST;BELOVSKIY:UNKNOWN:RU-BLK
+RUSSIA:VORONEJSKAïA OBLAST;OSTROGOZHSKIY:UNKNOWN:RU-OSZ
+RUSSIA:BELGORODSKAïA OBLAST;PROKHOROVSKIY:UNKNOWN:RU-PRV
+RUSSIA:VORONEJSKAïA OBLAST;POVORINO:UNKNOWN:RU-PVR
+RUSSIA:BELGORODSKAïA OBLAST;IVNYANSKIY:UNKNOWN:RU-IVN
+RUSSIA:BELGORODSKAïA OBLAST;CHERNYANSKIY:UNKNOWN:RU-CHS
+RUSSIA:VORONEJSKAïA OBLAST;LISKI:UNKNOWN:RU-LIK
+RUSSIA:BELGORODSKAïA OBLAST;RAKITYANSKIY:UNKNOWN:RU-RKN
+RUSSIA:VORONEJSKAïA OBLAST;BUTURLINOVSKIY:UNKNOWN:RU-BTN
+RUSSIA:BELGORODSKAïA OBLAST;KOROCHANSKIY:UNKNOWN:RU-KR2
+RUSSIA:BELGORODSKAïA OBLAST;KRASNOYARUZSHSKY:UNKNOWN:RU-KRU
+RUSSIA:BELGORODSKAïA OBLAST;YAKOVLEVSKIY:UNKNOWN:RU-YKV
+RUSSIA:BELGORODSKAïA OBLAST;NOVOOSKOLSKIY:UNKNOWN:RU-NVL
+RUSSIA:VORONEJSKAïA OBLAST;OSTROGOZHSK:UNKNOWN:RU-OSH
+RUSSIA:BELGORODSKAïA OBLAST;KRASNOGVARDEYSKIY:UNKNOWN:RU-KRD
+RUSSIA:VORONEJSKAïA OBLAST;VOROBYOVSKIY:UNKNOWN:RU-VRV
+RUSSIA:VORONEJSKAïA OBLAST;KAMENSKIY:UNKNOWN:RU-KMS
+RUSSIA:VORONEJSKAïA OBLAST;PAVLOVSKIY:UNKNOWN:RU-PVV
+RUSSIA:BELGORODSKAïA OBLAST;BELGORODSKIY:UNKNOWN:RU-BLD
+RUSSIA:BELGORODSKAïA OBLAST;BORISOVSKIY:UNKNOWN:RU-BRV
+RUSSIA:VORONEJSKAïA OBLAST;PODGORENSKIY:UNKNOWN:RU-PDN
+RUSSIA:BELGORODSKAïA OBLAST;ALEKSEYEVSKIY:UNKNOWN:RU-ALV
+RUSSIA:BELGORODSKAïA OBLAST;SHEBEKINSKIY:UNKNOWN:RU-SHS
+RUSSIA:BELGORODSKAïA OBLAST;GRAIVORONSKIY:UNKNOWN:RU-GRS
+RUSSIA:VORONEJSKAïA OBLAST;KALACHEYEVSKIY:UNKNOWN:RU-KLY
+RUSSIA:BELGORODSKAïA OBLAST;ALEKSEEVKA:UNKNOWN:RU-ALE
+RUSSIA:BELGORODSKAïA OBLAST;BELGOROD:UNKNOWN:RU-BLO
+RUSSIA:BELGORODSKAïA OBLAST;VOLOKONOVSKIY:UNKNOWN:RU-VLV
+RUSSIA:VORONEJSKAïA OBLAST;OLKHOVATSKIY:UNKNOWN:RU-OLS
+RUSSIA:VORONEJSKAïA OBLAST;VERKHNEMAMONSKIY:UNKNOWN:RU-VRM
+RUSSIA:BELGORODSKAïA OBLAST;SHEBEKINO:UNKNOWN:RU-SHK
+RUSSIA:BELGORODSKAïA OBLAST;VALUYSKIY:UNKNOWN:RU-VLY
+RUSSIA:VORONEJSKAïA OBLAST;ROSSOSHANSKIY:UNKNOWN:RU-RSN
+RUSSIA:BELGORODSKAïA OBLAST;VEYDELEVSKIY:UNKNOWN:RU-VYV
+RUSSIA:VORONEJSKAïA OBLAST;PETROPAVLOVSKIY:UNKNOWN:RU-PTL
+RUSSIA:BELGORODSKAïA OBLAST;ROVENSKIY:UNKNOWN:RU-RVS
+RUSSIA:VORONEJSKAïA OBLAST;ROSSOSH:UNKNOWN:RU-RSS
+RUSSIA:BELGORODSKAïA OBLAST;VALUIKY:UNKNOWN:RU-VL1
+RUSSIA:VORONEJSKAïA OBLAST;BOGUCHARSKIY:UNKNOWN:RU-BGR
+RUSSIA:VORONEJSKAïA OBLAST;KANTEMIROVSKIY:UNKNOWN:RU-KNR
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ANABARSKIY:UNKNOWN:RU-ANR
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;BULUNSKIY:UNKNOWN:RU-BLI
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;UST-YANSKIY:UNKNOWN:RU-US1
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ALLAIKHOVSKIY:UNKNOWN:RU-ALS
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;OLENEKSKIY:UNKNOWN:RU-OLK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;NIZHNEKOLYMSKIY:UNKNOWN:RU-NZL
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;CHAUNSKIY:UNKNOWN:RU-CHK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;VERKHOYANSKIY:UNKNOWN:RU-VRS
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;SHMIDTOVSKIY:UNKNOWN:RU-SHV
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;SREDNEKOLYMSKIY:UNKNOWN:RU-SRL
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;BILIBINSKIY:UNKNOWN:RU-BLN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ABYISKIY:UNKNOWN:RU-ABS
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ZHIGANSKIY:UNKNOWN:RU-ZHN
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;IULTINSKIY:UNKNOWN:RU-ILN
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;ANADYRSKIY:UNKNOWN:RU-ANK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;MOMSKIY:UNKNOWN:RU-MMK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;VERKHEKOLYMSKIY:UNKNOWN:RU-VRL
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;CHUKOTSKIY:UNKNOWN:RU-CHT
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;VILYUYSKIY:UNKNOWN:RU-VL2
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;MIRNINSKIY:UNKNOWN:RU-MRI
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;PROVIDENSKIY:UNKNOWN:RU-PRI
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;VERKHNEVILYUISKIY:UNKNOWN:RU-VRU
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;KOBYAYSKIY:UNKNOWN:RU-KBY
+RUSSIA:MAGADANSKAïA OBLAST RéSID;SREDNEKANSKIY:UNKNOWN:RU-SRN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;TOMPONSKIY:UNKNOWN:RU-TMN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;LENINSKIY:UNKNOWN:RU-LNS
+RUSSIA:MAGADANSKAïA OBLAST RéSID;SEVERO-EVENSKIY:UNKNOWN:RU-SVV
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;OYMYAKONSKIY:UNKNOWN:RU-OYN
+RUSSIA:MAGADANSKAïA OBLAST RéSID;OMSUKCHANSKIY:UNKNOWN:RU-OMN
+RUSSIA:KORIAKSKI NATIONAL OKROUG;PENZHINSKIY:UNKNOWN:RU-PNN
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;ANADYR':UNKNOWN:RU-ANY
+RUSSIA:MAGADANSKAïA OBLAST RéSID;SUSUMANSKIY:UNKNOWN:RU-SSN
+RUSSIA:TCHOUKOTSKI NAT. OKROUG;BERINGOVSKIY:UNKNOWN:RU-BRS
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;SUNTARSKIY:UNKNOWN:RU-SNR
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;UST-ALDANSKIY:UNKNOWN:RU-US2
+RUSSIA:MAGADANSKAïA OBLAST RéSID;YAGODNINSKIY:UNKNOWN:RU-YGN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;NAMSKIY:UNKNOWN:RU-NMK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;TATTINSKIY:UNKNOWN:RU-TTN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;GORNYI:UNKNOWN:RU-GON
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;UST-MAYSKIY:UNKNOWN:RU-US3
+RUSSIA:KORIAKSKI NATIONAL OKROUG;OLYUTORSKIY:UNKNOWN:RU-OLR
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;OKHOTSKIY:UNKNOWN:RU-OKS
+RUSSIA:MAGADANSKAïA OBLAST RéSID;TENKINSKIY:UNKNOWN:RU-TNN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;MIRNY:UNKNOWN:RU-MIN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;CHURAPCHINSKIY:UNKNOWN:RU-CHH
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;MEGINO-KANGALASSKIY:UNKNOWN:RU-MGG
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;YAKUTSK:UNKNOWN:RU-YKT
+RUSSIA:MAGADANSKAïA OBLAST RéSID;KHASYNSKIY:UNKNOWN:RU-KHK
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ORDZHONIKIDZEVSKIY:UNKNOWN:RU-ORD
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;OLEKMINSKIY:UNKNOWN:RU-OLN
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;LENSKIY:UNKNOWN:RU-LNI
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;AMGINSKIY:UNKNOWN:RU-AMS
+RUSSIA:MAGADANSKAïA OBLAST RéSID;OLSKIY:UNKNOWN:RU-OLI
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;ALDANSKIY:UNKNOWN:RU-ALK
+RUSSIA:KORIAKSKI NATIONAL OKROUG;KARAGINSKIY:UNKNOWN:RU-KR3
+RUSSIA:KORIAKSKI NATIONAL OKROUG;TIGILSKIY:UNKNOWN:RU-TGS
+RUSSIA:MAGADANSKAïA OBLAST RéSID;MAGADAN:UNKNOWN:RU-MGD
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;AYANO-MAYSKIY:UNKNOWN:RU-AYY
+RUSSIA:YAKOUTIA-SAHA RESPOUBLIKA;NERIUNGRI:UNKNOWN:RU-NRG
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;UST-KAMCHATSKIY:UNKNOWN:RU-USH
+RUSSIA:AMOURSKAïA OBLAST;TYNDINSKIY:UNKNOWN:RU-TYN
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;BYSTRINSKIY:UNKNOWN:RU-BYN
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;MILKOVSKIY:UNKNOWN:RU-MLV
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;SOBOLEVSKIY:UNKNOWN:RU-SBV
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;TUGURO-CHUMIKANSKIY:UNKNOWN:RU-TGM
+RUSSIA:AMOURSKAïA OBLAST;ZEYSKIY:UNKNOWN:RU-ZYK
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;ALEUTSKIY:UNKNOWN:RU-ALI
+RUSSIA:AMOURSKAïA OBLAST;TYNDA:UNKNOWN:RU-TYD
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;YELIZOVSKIY:UNKNOWN:RU-YLV
+RUSSIA:AMOURSKAïA OBLAST;SKOVORODINSKIY:UNKNOWN:RU-SKD
+RUSSIA:SAKHALINSKAïA OBLAST;OKHINSKIY:UNKNOWN:RU-OKK
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;NIKOLAYEVSKIY:UNKNOWN:RU-NKK
+RUSSIA:AMOURSKAïA OBLAST;MAGDAGACHINSKIY:UNKNOWN:RU-MGH
+RUSSIA:AMOURSKAïA OBLAST;SELEMDZHINSKIY:UNKNOWN:RU-SLH
+RUSSIA:AMOURSKAïA OBLAST;ZEYA:UNKNOWN:RU-ZEY
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;UST-BOLSHERETSKIY:UNKNOWN:RU-USR
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;POLINY OSIPENKO. IMENI:UNKNOWN:RU-PLN
+RUSSIA:SAKHALINSKAïA OBLAST;OKHA:UNKNOWN:RU-OKH
+RUSSIA:AMOURSKAïA OBLAST;MAZANOVSKIY:UNKNOWN:RU-MZV
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;ULCHSKIY:UNKNOWN:RU-ULS
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;ELIZOVO:UNKNOWN:RU-ELV
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;NIKOLAYEVSK-NA-AMURE:UNKNOWN:RU-NKN
+RUSSIA:KAMTCHATSKAïA OBLAST RéSI;PETROPAVLOVSK-KAMCHATSK:UNKNOWN:RU-PTK
+RUSSIA:AMOURSKAïA OBLAST;SHIMANOVSKIY:UNKNOWN:RU-SHI
+RUSSIA:SAKHALINSKAïA OBLAST;NOGLIKSKIY:UNKNOWN:RU-NGK
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;VERKHNEBUREINSKIY:UNKNOWN:RU-VRR
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;SOLNECHNYI:UNKNOWN:RU-SLC
+RUSSIA:AMOURSKAïA OBLAST;SHIMANOVSK:UNKNOWN:RU-SHO
+RUSSIA:SAKHALINSKAïA OBLAST;ALEXANDROVSK-SAKHALINSKIY:UNKNOWN:RU-ALA
+RUSSIA:AMOURSKAïA OBLAST;SVOBODNENSKIY:UNKNOWN:RU-SVN
+RUSSIA:SAKHALINSKAïA OBLAST;TYMOVSKIY:UNKNOWN:RU-TYS
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;KOMSOMOLSKIY:UNKNOWN:RU-KML
+RUSSIA:AMOURSKAïA OBLAST;SERYSHEVSKIY:UNKNOWN:RU-SRS
+RUSSIA:AMOURSKAïA OBLAST;ROMNENSKIY:UNKNOWN:RU-RMN
+RUSSIA:AMOURSKAïA OBLAST;SVOBODNYI:UNKNOWN:RU-SVY
+RUSSIA:AMOURSKAïA OBLAST;BLAGOVESCHENSKIY:UNKNOWN:RU-BLC
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;VANINSKIY:UNKNOWN:RU-VNS
+RUSSIA:AMOURSKAïA OBLAST;BELOGORSKIY:UNKNOWN:RU-BLY
+RUSSIA:AMOURSKAïA OBLAST;BELOGORSK:UNKNOWN:RU-BL 
+RUSSIA:SAKHALINSKAïA OBLAST;SEVERO-KURILSKIY:UNKNOWN:RU-SVR
+RUSSIA:SAKHALINSKAïA OBLAST;ALEKS.-SAKHALINSKIY:UNKNOWN:RU-ALH
+RUSSIA:AMOURSKAïA OBLAST;IVANOVSKIY:UNKNOWN:RU-IVV
+RUSSIA:AMOURSKAïA OBLAST;BUREYSKIY:UNKNOWN:RU-BRK
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;KOMSOMOLSK-NA-AMURE:UNKNOWN:RU-KMN
+RUSSIA:AMOURSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OKI
+RUSSIA:AMOURSKAïA OBLAST;ZAVITINSKIY:UNKNOWN:RU-ZVN
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;KHABAROVSKIY:UNKNOWN:RU-KHI
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;AMURSKIY:UNKNOWN:RU-AMK
+RUSSIA:SAKHALINSKAïA OBLAST;SMIRNYKHOVSKIY:UNKNOWN:RU-SMH
+RUSSIA:AMOURSKAïA OBLAST;BLAGOVESCHENSK:UNKNOWN:RU-BLH
+RUSSIA:AMOURSKAïA OBLAST;TAMBOVSKIY:UNKNOWN:RU-TMS
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;AMURSK:UNKNOWN:RU-AMR
+RUSSIA:AMOURSKAïA OBLAST;ARKHARINSKIY:UNKNOWN:RU-ARN
+RUSSIA:AMOURSKAïA OBLAST;MIKHAYLOVSKIY:UNKNOWN:RU-MKV
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;NANAYSKIY:UNKNOWN:RU-NNS
+RUSSIA:AMOURSKAïA OBLAST;KONSTANTINOVSKIY:UNKNOWN:RU-KNN
+RUSSIA:SAKHALINSKAïA OBLAST;PORONAYSKIY:UNKNOWN:RU-PR 
+RUSSIA:AMOURSKAïA OBLAST;RAYCHIKHINSK:UNKNOWN:RU-RYH
+RUSSIA:SAKHALINSKAïA OBLAST;UGLEGORSKIY:UNKNOWN:RU-UGR
+RUSSIA:EVREïSKAïA OBLAST;OBLUCHENSKIY:UNKNOWN:RU-OBS
+RUSSIA:SAKHALINSKAïA OBLAST;PORONAYSK:UNKNOWN:RU-PR1
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;SOVETSKO-GAVANSKIY:UNKNOWN:RU-SVG
+RUSSIA:SAKHALINSKAïA OBLAST;MAKAROVSKIY:UNKNOWN:RU-MKS
+RUSSIA:SAKHALINSKAïA OBLAST;UGLEGORSK:UNKNOWN:RU-UGS
+RUSSIA:EVREïSKAïA OBLAST;BIROBIDZHANSKIY:UNKNOWN:RU-BRH
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;SOVETSKAYA GAVAN:UNKNOWN:RU-SVA
+RUSSIA:EVREïSKAïA OBLAST;SMIDOVICHSKIY:UNKNOWN:RU-SMC
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;LAZO. IMENI:UNKNOWN:RU-LZM
+RUSSIA:EVREïSKAïA OBLAST;BIROBIDZHAN:UNKNOWN:RU-BRD
+RUSSIA:SAKHALINSKAïA OBLAST;TOMARINSKIY:UNKNOWN:RU-TMI
+RUSSIA:EVREïSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OKY
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;KHABAROVSK:UNKNOWN:RU-KHO
+RUSSIA:EVREïSKAïA OBLAST;LENINSKIY:UNKNOWN:RU-LNY
+RUSSIA:PRIMORSKI KRAï;TERNEYSKIY:UNKNOWN:RU-TRY
+RUSSIA:SAKHALINSKAïA OBLAST;DOLINSKIY:UNKNOWN:RU-DLS
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;VYAZEMSKIY:UNKNOWN:RU-VYM
+RUSSIA:SAKHALINSKAïA OBLAST;KHOLMSKIY:UNKNOWN:RU-KHY
+RUSSIA:SAKHALINSKAïA OBLAST;DOLINSK:UNKNOWN:RU-DLN
+RUSSIA:PRIMORSKI KRAï;POZHARSKIY:UNKNOWN:RU-PZR
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;BIKINSKIY:UNKNOWN:RU-BKS
+RUSSIA:SAKHALINSKAïA OBLAST;YUZHNO-SAKHALINSK:UNKNOWN:RU-YZK
+RUSSIA:SAKHALINSKAïA OBLAST;KURILSKIY:UNKNOWN:RU-KR4
+RUSSIA:SAKHALINSKAïA OBLAST;KORSAKOVSKIY:UNKNOWN:RU-KR5
+RUSSIA:SAKHALINSKAïA OBLAST;ANIVSKIY:UNKNOWN:RU-ANI
+RUSSIA:SAKHALINSKAïA OBLAST;KHOLMSK:UNKNOWN:RU-KHM
+RUSSIA:SAKHALINSKAïA OBLAST;NEVELSKIY:UNKNOWN:RU-NVS
+RUSSIA:KHABAROVSKI KRAï RéSIDUEL;BIKIN:UNKNOWN:RU-BIN
+RUSSIA:SAKHALINSKAïA OBLAST;NEVEL'SK:UNKNOWN:RU-NVK
+RUSSIA:SAKHALINSKAïA OBLAST;KORSAKOV:UNKNOWN:RU-KR6
+RUSSIA:PRIMORSKI KRAï;KRASNOARMEYSKIY:UNKNOWN:RU-KRM
+RUSSIA:PRIMORSKI KRAï;DALNERECHENSKIY:UNKNOWN:RU-DLH
+RUSSIA:PRIMORSKI KRAï;DALNERECHENSK:UNKNOWN:RU-DLC
+RUSSIA:PRIMORSKI KRAï;LESOZAVODSKIY:UNKNOWN:RU-LSD
+RUSSIA:PRIMORSKI KRAï;LESOZAVODSK:UNKNOWN:RU-LSV
+RUSSIA:PRIMORSKI KRAï;KHANKAYSKIY:UNKNOWN:RU-KH 
+RUSSIA:PRIMORSKI KRAï;KIROVSKIY:UNKNOWN:RU-KR7
+RUSSIA:PRIMORSKI KRAï;DALNEGORSKIY:UNKNOWN:RU-DLR
+RUSSIA:PRIMORSKI KRAï;SPASSKIY:UNKNOWN:RU-SPS
+RUSSIA:PRIMORSKI KRAï;CHUGUYEVSKIY:UNKNOWN:RU-CHI
+RUSSIA:PRIMORSKI KRAï;POGRANICHNYI:UNKNOWN:RU-PGC
+RUSSIA:PRIMORSKI KRAï;YAKOVLEVSKIY:UNKNOWN:RU-YKS
+RUSSIA:PRIMORSKI KRAï;KAVALEROVSKIY:UNKNOWN:RU-KVV
+RUSSIA:PRIMORSKI KRAï;KHOROLSKIY:UNKNOWN:RU-KH1
+RUSSIA:PRIMORSKI KRAï;DALNEGORSK:UNKNOWN:RU-DLG
+RUSSIA:PRIMORSKI KRAï;SPASSK-DALNIY:UNKNOWN:RU-SPD
+RUSSIA:PRIMORSKI KRAï;CHERNIGOVSKIY:UNKNOWN:RU-CHY
+RUSSIA:SAKHALINSKAïA OBLAST;YUZHNO-KURILSKIY:UNKNOWN:RU-YZR
+RUSSIA:PRIMORSKI KRAï;ANUCHINSKIY:UNKNOWN:RU-ANN
+RUSSIA:PRIMORSKI KRAï;MIKHAYLOVSKIY:UNKNOWN:RU-MKK
+RUSSIA:PRIMORSKI KRAï;OKTYABRSKIY:UNKNOWN:RU-OK 
+RUSSIA:PRIMORSKI KRAï;ARSENYEV:UNKNOWN:RU-ARY
+RUSSIA:PRIMORSKI KRAï;OLGINSKY:UNKNOWN:RU-OLY
+RUSSIA:PRIMORSKI KRAï;USSURIYSKIY:UNKNOWN:RU-US4
+RUSSIA:PRIMORSKI KRAï;PARTIZANSKIY:UNKNOWN:RU-PR2
+RUSSIA:PRIMORSKI KRAï;SHKOTOVSKIY:UNKNOWN:RU-SHY
+RUSSIA:PRIMORSKI KRAï;NADEZHDINSKIY:UNKNOWN:RU-NDN
+RUSSIA:PRIMORSKI KRAï;LAZOVSKIY:UNKNOWN:RU-LZS
+RUSSIA:PRIMORSKI KRAï;ARTYOM:UNKNOWN:RU-ARO
+RUSSIA:PRIMORSKI KRAï;PARTIZANSK:UNKNOWN:RU-PRA
+RUSSIA:PRIMORSKI KRAï;KHASANSKIY:UNKNOWN:RU-KH2
+RUSSIA:PRIMORSKI KRAï;VLADIVOSTOK:UNKNOWN:RU-VLO
+RUSSIA:PRIMORSKI KRAï;BOLSHOY KAMEN:UNKNOWN:RU-BLA
+RUSSIA:PRIMORSKI KRAï;NAKHODKA:UNKNOWN:RU-NKD
+RUSSIA:KIROVSKAïA OBLAST;LUZSKIY:UNKNOWN:RU-LZK
+RUSSIA:KIROVSKAïA OBLAST;PODOSINOVSKIY:UNKNOWN:RU-PDV
+RUSSIA:KIROVSKAïA OBLAST;VERKHNEKAMSKIY:UNKNOWN:RU-VRK
+RUSSIA:KIROVSKAïA OBLAST;OPARINSKIY:UNKNOWN:RU-OPN
+RUSSIA:KIROVSKAïA OBLAST;NAGORSKIY:UNKNOWN:RU-NGS
+RUSSIA:KIROVSKAïA OBLAST;MURASHINSKIY:UNKNOWN:RU-MRY
+RUSSIA:KIROVSKAïA OBLAST;BELOKHOLUNITSKIY:UNKNOWN:RU-BLT
+RUSSIA:KIROVSKAïA OBLAST;AFANASYEVSKIY:UNKNOWN:RU-AFV
+RUSSIA:KIROVSKAïA OBLAST;DAROVSKIY:UNKNOWN:RU-DRS
+RUSSIA:KIROVSKAïA OBLAST;SLOBODSKOY:UNKNOWN:RU-SLD
+RUSSIA:KIROVSKAïA OBLAST;YURYANSKIY:UNKNOWN:RU-YRN
+RUSSIA:KIROVSKAïA OBLAST;OMUTNINSKIY:UNKNOWN:RU-OMS
+RUSSIA:KIROVSKAïA OBLAST;KHALTURINSKIY:UNKNOWN:RU-KH3
+RUSSIA:KIROVSKAïA OBLAST;SHABALINSKIY:UNKNOWN:RU-SH 
+RUSSIA:KIROVSKAïA OBLAST;KOTELNICHSKIY:UNKNOWN:RU-KTC
+RUSSIA:KIROVSKAïA OBLAST;KIROV:UNKNOWN:RU-KIV
+RUSSIA:KIROVSKAïA OBLAST;KIROVO-CHEPETSKIY:UNKNOWN:RU-KRP
+RUSSIA:KIROVSKAïA OBLAST;ZUYEVSKIY:UNKNOWN:RU-ZYS
+RUSSIA:KIROVSKAïA OBLAST;SVECHINSKIY:UNKNOWN:RU-SVK
+RUSSIA:KIROVSKAïA OBLAST;FALENSKIY:UNKNOWN:RU-FLS
+RUSSIA:KIROVSKAïA OBLAST;ORICHEVSKIY:UNKNOWN:RU-ORV
+RUSSIA:KIROVSKAïA OBLAST;KIROVO-CHEPETS:UNKNOWN:RU-KRC
+RUSSIA:KIROVSKAïA OBLAST;KUMENSKIY:UNKNOWN:RU-KMI
+RUSSIA:KIROVSKAïA OBLAST;KOTELNICH':UNKNOWN:RU-KTN
+RUSSIA:KIROVSKAïA OBLAST;VERKHOSHIZHEMSKIY:UNKNOWN:RU-VRE
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VETLUZHSKIY:UNKNOWN:RU-VTH
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SHAKHUNSKIY:UNKNOWN:RU-SH1
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;TONSHAYEVSKIY:UNKNOWN:RU-TNV
+RUSSIA:KIROVSKAïA OBLAST;BOGORODSKIY:UNKNOWN:RU-BGD
+RUSSIA:KIROVSKAïA OBLAST;ARBAZHSKIY:UNKNOWN:RU-ARH
+RUSSIA:KIROVSKAïA OBLAST;SUNSKIY:UNKNOWN:RU-SNK
+RUSSIA:KIROVSKAïA OBLAST;NOLINSKIY:UNKNOWN:RU-NLS
+RUSSIA:KIROVSKAïA OBLAST;TUZHINSKIY:UNKNOWN:RU-TZN
+RUSSIA:KIROVSKAïA OBLAST;UNINSKIY:UNKNOWN:RU-UNS
+RUSSIA:KIROVSKAïA OBLAST;SOVETSKIY:UNKNOWN:RU-SVI
+RUSSIA:KIROVSKAïA OBLAST;NEMSKIY:UNKNOWN:RU-NMI
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VARNAVINSKIY:UNKNOWN:RU-VRI
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;URENSKIY:UNKNOWN:RU-URS
+RUSSIA:KIROVSKAïA OBLAST;PIZHANSKIY:UNKNOWN:RU-PZN
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;TONKINSKIY:UNKNOWN:RU-TNS
+RUSSIA:KIROVSKAïA OBLAST;KIKNURSKIY:UNKNOWN:RU-KKR
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KOVERNINSKIY:UNKNOWN:RU-KVN
+RUSSIA:KIROVSKAïA OBLAST;LEBYAZHSKIY:UNKNOWN:RU-LBH
+RUSSIA:KIROVSKAïA OBLAST;KILMEZSKIY:UNKNOWN:RU-KLZ
+RUSSIA:KIROVSKAïA OBLAST;YARANSKIY:UNKNOWN:RU-YRS
+RUSSIA:KIROVSKAïA OBLAST;URZHUMSKIY:UNKNOWN:RU-URM
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SEMYONOVSKIY:UNKNOWN:RU-SMV
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SHARANGSKIY:UNKNOWN:RU-SHG
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KRASNOBAKOVSKIY:UNKNOWN:RU-KR8
+RUSSIA:MARIYSKAïA RESPOUBLIKA;SERNURSKIY:UNKNOWN:RU-SRR
+RUSSIA:KIROVSKAïA OBLAST;SANCHURSKIY:UNKNOWN:RU-SNS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VOSKRESENSKIY:UNKNOWN:RU-VSS
+RUSSIA:MARIYSKAïA RESPOUBLIKA;NOVOTARYALSKIY:UNKNOWN:RU-NVY
+RUSSIA:MARIYSKAïA RESPOUBLIKA;ORSHANSKIY:UNKNOWN:RU-ORN
+RUSSIA:MARIYSKAïA RESPOUBLIKA;MARI-TUREKSKIY:UNKNOWN:RU-MRR
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;GORODETSKIY:UNKNOWN:RU-GRK
+RUSSIA:MARIYSKAïA RESPOUBLIKA;KILEMARSKIY:UNKNOWN:RU-KLR
+RUSSIA:MARIYSKAïA RESPOUBLIKA;SOVETSKIY:UNKNOWN:RU-SV 
+RUSSIA:MARIYSKAïA RESPOUBLIKA;PARANGINSKIY:UNKNOWN:RU-PR3
+RUSSIA:MARIYSKAïA RESPOUBLIKA;MEDVEDEVSKIY:UNKNOWN:RU-MDV
+RUSSIA:MARIYSKAïA RESPOUBLIKA;KUZHENERSKIY:UNKNOWN:RU-KZR
+RUSSIA:MARIYSKAïA RESPOUBLIKA;YURINSKIY:UNKNOWN:RU-YRK
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BORSKIY:UNKNOWN:RU-BRI
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;CHKALOVSKIY:UNKNOWN:RU-CH 
+RUSSIA:KIROVSKAïA OBLAST;MALMYZHSKIY:UNKNOWN:RU-MLH
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;GORODETZ:UNKNOWN:RU-GRD
+RUSSIA:MARIYSKAïA RESPOUBLIKA;MORKINSKIY:UNKNOWN:RU-MR 
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BALAKHNINSKIY:UNKNOWN:RU-BL1
+RUSSIA:MARIYSKAïA RESPOUBLIKA;YOSHKAR-OLA:UNKNOWN:RU-YSR
+RUSSIA:MARIYSKAïA RESPOUBLIKA;GORNOMARIYSKIY:UNKNOWN:RU-GRR
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BALAKHNA:UNKNOWN:RU-BL2
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;LYSKOVSKIY:UNKNOWN:RU-LYV
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VOROTYNSKIY:UNKNOWN:RU-VR 
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VOLODARSKIY:UNKNOWN:RU-VLR
+RUSSIA:MARIYSKAïA RESPOUBLIKA;ZVENIGOVSKIY:UNKNOWN:RU-ZVV
+RUSSIA:KIROVSKAïA OBLAST;VYATSKO-POLYANSKIY:UNKNOWN:RU-VYL
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;NIZHNIY NOVGOROD:UNKNOWN:RU-NZN
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BOR:UNKNOWN:RU-BOR
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;CHEBOKSARSKIY:UNKNOWN:RU-CHR
+RUSSIA:MARIYSKAïA RESPOUBLIKA;KOZMODEMYANSK:UNKNOWN:RU-KZM
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KSTOVSKIY:UNKNOWN:RU-KSS
+RUSSIA:KIROVSKAïA OBLAST;VYATSKYE POLYANY:UNKNOWN:RU-VY 
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BOGORODSKIY:UNKNOWN:RU-BGS
+RUSSIA:MARIYSKAïA RESPOUBLIKA;VOLZHSKIY:UNKNOWN:RU-VL3
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;PAVLOVSKIY:UNKNOWN:RU-PVS
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;MORGAUSHSKIY:UNKNOWN:RU-MRH
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KSTOVO:UNKNOWN:RU-KSV
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;YADRINSKIY:UNKNOWN:RU-YDN
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;DALNEKONSTANTINOVSKIY:UNKNOWN:RU-DLT
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;CHEBOKSARY:UNKNOWN:RU-CHA
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;MARIINSKO- POSADSKIY:UNKNOWN:RU-MRP
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BOGORODSK:UNKNOWN:RU-BGK
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SPASSKIY:UNKNOWN:RU-SPK
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;NOVOCHEBOKSARSK:UNKNOWN:RU-NVA
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VACHSKIY:UNKNOWN:RU-VCS
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;TSYVILSKIY:UNKNOWN:RU-TSL
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SOSNOVSKIY:UNKNOWN:RU-SSS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;PAVLOVO:UNKNOWN:RU-PVO
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KNYAGININSKIY:UNKNOWN:RU-KNS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BOLSHEMURASHKINSKIY:UNKNOWN:RU-BL3
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KOZLOVSKIY:UNKNOWN:RU-KZV
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KRASNOARMEYSKIY:UNKNOWN:RU-KRE
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;PILNINSKIY:UNKNOWN:RU-PLS
+RUSSIA:MARIYSKAïA RESPOUBLIKA;VOLZHSK:UNKNOWN:RU-VLH
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;ALIKOVSKIY:UNKNOWN:RU-ALY
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;PEREVOZSKIY:UNKNOWN:RU-PR4
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KRASNOCHETAYSKIY:UNKNOWN:RU-KRA
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;URMARSKIY:UNKNOWN:RU-URK
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;NAVASHINSKIY:UNKNOWN:RU-NVI
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SERGACHSKIY:UNKNOWN:RU-SRH
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BUTURLINSKIY:UNKNOWN:RU-BTS
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;VURNARSKIY:UNKNOWN:RU-VR1
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KANASHSKIY:UNKNOWN:RU-KNI
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;ARZAMASSKIY:UNKNOWN:RU-ARS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VADSKIY:UNKNOWN:RU-VDK
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;SHUMERLINSKIY:UNKNOWN:RU-SH2
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;YANTIKOVSKIY:UNKNOWN:RU-YNV
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;ARDATOVSKIY:UNKNOWN:RU-ARV
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;SHUMERLYA:UNKNOWN:RU-SHL
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KANASH:UNKNOWN:RU-KAS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SECHENOVSKIY:UNKNOWN:RU-SCS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KULEBAKSKIY:UNKNOWN:RU-KLS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KRASNOOKTYABRSKIY:UNKNOWN:RU-KRB
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;ARZAMAS:UNKNOWN:RU-ARM
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VYKSUNSKIY:UNKNOWN:RU-VYN
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;GAGINSKIY:UNKNOWN:RU-GGS
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;IBRESINSKIY:UNKNOWN:RU-IBN
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;KULEBAKI:UNKNOWN:RU-KLB
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;PORETSKIY:UNKNOWN:RU-PR5
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;SHATKOVSKIY:UNKNOWN:RU-SH3
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;KOMSOMOLSKIY:UNKNOWN:RU-KMY
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;YALCHIKSKIY:UNKNOWN:RU-YLK
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VYKSA:UNKNOWN:RU-VYS
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;DIVEYEVSKIY:UNKNOWN:RU-DVV
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;BOLSHEBOLDINSKIY:UNKNOWN:RU-BL4
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;LUKOYANOVSKIY:UNKNOWN:RU-LKV
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;PERVOMAYSKIY:UNKNOWN:RU-PR6
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;BOLSHEIGNATOVSKIY:UNKNOWN:RU-BLV
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;BATYREVSKIY:UNKNOWN:RU-BTV
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;ALATYRSKIY:UNKNOWN:RU-ALR
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;VOZNESENSKIY:UNKNOWN:RU-VZN
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ARDATOVSKIY:UNKNOWN:RU-ARK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;TEMNIKOVSKIY:UNKNOWN:RU-TMY
+RUSSIA:NIJEGORODSKAïA OBLAST (GO;POCHINKOVSKIY:UNKNOWN:RU-PCS
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;SHEMURSHINSKIY:UNKNOWN:RU-SHH
+RUSSIA:TCHOUVACHSKAïA RESPOUBLIK;ALATYR':UNKNOWN:RU-AL 
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;TENGUSHEVSKIY:UNKNOWN:RU-TNK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ICHALKOVSKIY:UNKNOWN:RU-ICV
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;YELNIKOVSKIY:UNKNOWN:RU-YLI
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ATYASHEVSKIY:UNKNOWN:RU-ATV
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;CHAMZINSKIY:UNKNOWN:RU-CH1
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;STAROSHAYGOVSKIY:UNKNOWN:RU-STG
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ROMODANOVSKIY:UNKNOWN:RU-RMV
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;KRASNOSLOBODSKIY:UNKNOWN:RU-KR9
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;DUBENSKIY:UNKNOWN:RU-DBS
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;LYAMBIRSKIY:UNKNOWN:RU-LYR
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ATYURIYEVSKIY:UNKNOWN:RU-ATS
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;ZUBOVO-POLYANSKIY:UNKNOWN:RU-ZBL
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;TORBEYEVSKIY:UNKNOWN:RU-TRS
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;BOLSHEBEREZNIKOVSKIY:UNKNOWN:RU-BLZ
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;KOVYLKINSKIY:UNKNOWN:RU-KVS
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;KADOSHKINSKY:UNKNOWN:RU-KDK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;RUZAYEVSKIY:UNKNOWN:RU-RZV
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;SARANSK:UNKNOWN:RU-SRK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;KOCHKUROVSKIY:UNKNOWN:RU-KCV
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;RUZAEVKA:UNKNOWN:RU-RZK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;KOVYLKINO:UNKNOWN:RU-KVK
+RUSSIA:MORDOVSKAïA RESPOUBLIKA;INSARSKIY:UNKNOWN:RU-INS
+RUSSIA:TAïMYRSKI NATIONAL OKROUG;DIKSONSKIY:UNKNOWN:RU-DKN
+RUSSIA:TAïMYRSKI NATIONAL OKROUG;KHATANGSKIY:UNKNOWN:RU-KHG
+RUSSIA:TAïMYRSKI NATIONAL OKROUG;DUDINKA:UNKNOWN:RU-DDN
+RUSSIA:TAïMYRSKI NATIONAL OKROUG;UST-YENISEYSKIY:UNKNOWN:RU-USE
+RUSSIA:EVENKISKI NATIONAL OKROUG;BAYKITSKIY:UNKNOWN:RU-BYT
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;TURUKHANSKIY:UNKNOWN:RU-TRI
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;IGARKA:UNKNOWN:RU-IGR
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;KATANGSKIY:UNKNOWN:RU-KTG
+RUSSIA:EVENKISKI NATIONAL OKROUG;ILIMPIYSKIY:UNKNOWN:RU-ILY
+RUSSIA:EVENKISKI NATIONAL OKROUG;TUNGUSSKO-CHUNSKIY:UNKNOWN:RU-TNC
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;YENISEYSKIY:UNKNOWN:RU-YNY
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SEVERO-YENISEYSKIY:UNKNOWN:RU-SVE
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;BODAYBINSKIY:UNKNOWN:RU-BDN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BOGUCHANSKIY:UNKNOWN:RU-BGN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KEZHEMSKIY:UNKNOWN:RU-KZS
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;MAMSKO-CHUYSKIY:UNKNOWN:RU-MMH
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;MOTYGINSKIY:UNKNOWN:RU-MTN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;UST-ILIMSKIY:UNKNOWN:RU-US5
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;KIRENSKIY:UNKNOWN:RU-KES
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ENISEYSK:UNKNOWN:RU-ENY
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KALARSKIY:UNKNOWN:RU-KLI
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;LESOSIBIRSK:UNKNOWN:RU-LSB
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;CHUNSKIY:UNKNOWN:RU-CH2
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;UST'-ILIMSK:UNKNOWN:RU-US6
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;PIROVSKIY:UNKNOWN:RU-PR7
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KAZACHINSKIY:UNKNOWN:RU-KZN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BIRILYUSSKIY:UNKNOWN:RU-BRY
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;BODAYBO:UNKNOWN:RU-BDY
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;NIZHNEILIMSKIY:UNKNOWN:RU-NZI
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;TYUKHTETSKIY:UNKNOWN:RU-TYT
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;TAYSHETSKIY:UNKNOWN:RU-TYK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;TASEYEVSKIY:UNKNOWN:RU-TSV
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;KAZACHINSKO-LENSKIY:UNKNOWN:RU-KZL
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ABANSKIY:UNKNOWN:RU-ABK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BOLSHEMURTINSKIY:UNKNOWN:RU-BL5
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;DZERZHINSKIY:UNKNOWN:RU-DZN
+RUSSIA:BOURIATIA;SEVERO-BAYKALSKIY:UNKNOWN:RU-SVL
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SUKHOBUZIMSKIY:UNKNOWN:RU-SKZ
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;BRATSKIY:UNKNOWN:RU-BR 
+RUSSIA:BOURIATIA;MUYSKIY:UNKNOWN:RU-MYK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;YEMELYANOVSKIY:UNKNOWN:RU-YMN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BOLSHEULUYSKIY:UNKNOWN:RU-BLU
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KOZULSKY:UNKNOWN:RU-KZK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;NIZHNEINGASHSKIY:UNKNOWN:RU-NZG
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;UST'-KUT:UNKNOWN:RU-USU
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KANSKIY:UNKNOWN:RU-KNY
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ACHINSKIY:UNKNOWN:RU-ACS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BOGOTOLSKIY:UNKNOWN:RU-BGL
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ILANSKIY:UNKNOWN:RU-ILS
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;UST-UDINSKIY:UNKNOWN:RU-US7
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;RYBINSKIY:UNKNOWN:RU-RYS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ACHINSK:UNKNOWN:RU-ACN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BERYOZOVSKIY:UNKNOWN:RU-BR1
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;BRATSK:UNKNOWN:RU-BRT
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BOGOTOL:UNKNOWN:RU-BGT
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;UYARSKIY:UNKNOWN:RU-UYS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KANSK:UNKNOWN:RU-KAK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SOSNOVOBORSK:UNKNOWN:RU-SSB
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KRASNOYARSK:UNKNOWN:RU-KAY
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;NAZAROVSKIY:UNKNOWN:RU-NZS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;MANSKIY:UNKNOWN:RU-MNK
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;NAZAROVO:UNKNOWN:RU-NZR
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SHARYPOVSKIY:UNKNOWN:RU-SH4
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;NIZHNEUDINSKIY:UNKNOWN:RU-NZD
+RUSSIA:TCHITINSKAïA OBLAST RéSID;TUNGIRO-OLEKMINSKIY:UNKNOWN:RU-TNM
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;TAYSHET:UNKNOWN:RU-TYH
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;DIVNOGORSK:UNKNOWN:RU-DVG
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;ZAOZERNYI:UNKNOWN:RU-ZOR
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;IRBEYSKIY:UNKNOWN:RU-IRS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BORODINO:UNKNOWN:RU-BRN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;ZHIGALOVSKIY:UNKNOWN:RU-ZHS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;BALAKHTINSKIY:UNKNOWN:RU-BL6
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;UZHURSKIY:UNKNOWN:RU-UZS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SAYANSKIY:UNKNOWN:RU-SYI
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;PARTIZANSKIY:UNKNOWN:RU-PR8
+RUSSIA:BOURIATIA;SEVEROBAYKALSK:UNKNOWN:RU-SV1
+RUSSIA:BOURIATIA;KURUMKANSKIY:UNKNOWN:RU-KUN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;BALAGANSKIY:UNKNOWN:RU-BL7
+RUSSIA:RESP. KHAKASSIA;ORDZHONIKIDZEVSKIY:UNKNOWN:RU-ORZ
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;NOVOSELOVSKIY:UNKNOWN:RU-NV 
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;KUYTUNSKIY:UNKNOWN:RU-KYN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;TULUNSKIY:UNKNOWN:RU-TLK
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;KACHUGSKIY:UNKNOWN:RU-KCS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;IDRINSKIY:UNKNOWN:RU-IDS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KURAGINSKIY:UNKNOWN:RU-KAN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KRASNOTURANSKIY:UNKNOWN:RU-KAR
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;NIZHNEUDINSK:UNKNOWN:RU-NZK
+RUSSIA:RESP. KHAKASSIA;SHIRINSKIY:UNKNOWN:RU-SH5
+RUSSIA:RESP. KHAKASSIA;BOGRADSKIY:UNKNOWN:RU-BGI
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;TULUN:UNKNOWN:RU-TUN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;OLKHONSKIY:UNKNOWN:RU-OL 
+RUSSIA:TCHITINSKAïA OBLAST RéSID;MOGOCHINSKIY:UNKNOWN:RU-MGN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;ZIMINSKIY:UNKNOWN:RU-ZMS
+RUSSIA:RESP. KHAKASSIA;UST-ABAKANSKIY:UNKNOWN:RU-USA
+RUSSIA:BOURIATIA;BARGUZINSKIY:UNKNOWN:RU-BR2
+RUSSIA:OUST'-ORDYNSKI NATIONAL O;NUKUTSKIY:UNKNOWN:RU-NKI
+RUSSIA:OUST'-ORDYNSKI NATIONAL O;OSINSKIY:UNKNOWN:RU-OSS
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;MINUSINSKIY:UNKNOWN:RU-MNN
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;SAYANSK:UNKNOWN:RU-SY 
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;ZIMA:UNKNOWN:RU-ZIM
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;KARATUZSKIY:UNKNOWN:RU-KAZ
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;ZALARINSKIY:UNKNOWN:RU-ZLN
+RUSSIA:OUST'-ORDYNSKI NATIONAL O;ALARSKIY:UNKNOWN:RU-AL1
+RUSSIA:RESP. KHAKASSIA;CHERNOGORSK:UNKNOWN:RU-CHG
+RUSSIA:RESP. KHAKASSIA;ASKIZSKIY:UNKNOWN:RU-ASS
+RUSSIA:BOURIATIA;YERAVNINSKIY:UNKNOWN:RU-YRI
+RUSSIA:RESP. KHAKASSIA;ALTAYSKIY:UNKNOWN:RU-AL2
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;MINUSINSK:UNKNOWN:RU-MNS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;CHERNYSHEVSKIY:UNKNOWN:RU-CH3
+RUSSIA:RESP. KHAKASSIA;ABAKAN:UNKNOWN:RU-ABA
+RUSSIA:TOUVA RESPOUBLIKA;TODZHINSKIY:UNKNOWN:RU-TDN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;SHUSHENSKIY:UNKNOWN:RU-SH6
+RUSSIA:OUST'-ORDYNSKI NATIONAL O;BOKHANSKIY:UNKNOWN:RU-BKN
+RUSSIA:KRASNOïARSKI KRAï RéSIDUE;YERMAKOVSKIY:UNKNOWN:RU-YRV
+RUSSIA:OUST'-ORDYNSKI NATIONAL O;EKHIRIT-BULAGATSKIY:UNKNOWN:RU-EKL
+RUSSIA:TCHITINSKAïA OBLAST RéSID;SRETENSKIY:UNKNOWN:RU-SRI
+RUSSIA:RESP. KHAKASSIA;BEYSKIY:UNKNOWN:RU-BYK
+RUSSIA:BOURIATIA;OKINSKIY:UNKNOWN:RU-OK1
+RUSSIA:BOURIATIA;PRIBAYKALSKIY:UNKNOWN:RU-PRL
+RUSSIA:TCHITINSKAïA OBLAST RéSID;GAZIMURO- ZAVODSKIY:UNKNOWN:RU-GZZ
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;CHEREMKHOVSKIY:UNKNOWN:RU-CH4
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;CHEREMKHOVO:UNKNOWN:RU-CH5
+RUSSIA:RESP. KHAKASSIA;TASHTYPSKIY:UNKNOWN:RU-TSP
+RUSSIA:RESP. KHAKASSIA;SAYANOGORSK:UNKNOWN:RU-SYG
+RUSSIA:BOURIATIA;KHORINSKIY:UNKNOWN:RU-KH4
+RUSSIA:TCHITINSKAïA OBLAST RéSID;CHITINSKIY:UNKNOWN:RU-CH6
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;IRKUTSKIY:UNKNOWN:RU-IRK
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;USOLSKIY:UNKNOWN:RU-US8
+RUSSIA:TCHITINSKAïA OBLAST RéSID;NERCHINSKIY:UNKNOWN:RU-NRS
+RUSSIA:TOUVA RESPOUBLIKA;PIY-KHUMSKIY:UNKNOWN:RU-PYM
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;USOLYE-SIBIRSKOE:UNKNOWN:RU-USB
+RUSSIA:BOURIATIA;KABANSKIY:UNKNOWN:RU-KBS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KARYMSKIY:UNKNOWN:RU-KYS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;NERCHINSKIY-ZAVODSKIY:UNKNOWN:RU-NRZ
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;ANGARSK:UNKNOWN:RU-AN 
+RUSSIA:TOUVA RESPOUBLIKA;KYZYLSKIY:UNKNOWN:RU-KYK
+RUSSIA:TCHITINSKAïA OBLAST RéSID;SHILKINSKIY:UNKNOWN:RU-SH7
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;IRKUTSK:UNKNOWN:RU-IRT
+RUSSIA:TOUVA RESPOUBLIKA;KAA-HEMSKIY:UNKNOWN:RU-KAM
+RUSSIA:BOURIATIA;ZAIGRAYEVSKIY:UNKNOWN:RU-ZIV
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KHILOKSKIY:UNKNOWN:RU-KH5
+RUSSIA:TOUVA RESPOUBLIKA;SUT-KHOLSKIY:UNKNOWN:RU-STL
+RUSSIA:TCHITINSKAïA OBLAST RéSID;SHELOPUGINSKIY:UNKNOWN:RU-SH8
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;SHELEKHOV:UNKNOWN:RU-SH9
+RUSSIA:TCHITINSKAïA OBLAST RéSID;CHITA:UNKNOWN:RU-CH7
+RUSSIA:BOURIATIA;IVOLGINSKIY:UNKNOWN:RU-IVS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;BALEYSKIY:UNKNOWN:RU-BL8
+RUSSIA:IRKOUTSKAïA OBLAST RéSIDU;SLYUDYANSKIY:UNKNOWN:RU-SLN
+RUSSIA:BOURIATIA;TUNKINSKIY:UNKNOWN:RU-TNI
+RUSSIA:BOURIATIA;ULAN-UDE:UNKNOWN:RU-ULU
+RUSSIA:TOUVA RESPOUBLIKA;CHAA-KHOLSKY:UNKNOWN:RU-CHL
+RUSSIA:BOURIATIA;TARBAGATAYSKIY:UNKNOWN:RU-TRT
+RUSSIA:TOUVA RESPOUBLIKA;KYZYL:UNKNOWN:RU-KYY
+RUSSIA:TCHITINSKAïA OBLAST RéSID;ULETOVSKIY:UNKNOWN:RU-ULV
+RUSSIA:TOUVA RESPOUBLIKA;BARUN-KHEMCHINSKIY:UNKNOWN:RU-BRM
+RUSSIA:AGUINSKI NATIONAL OKROUG;MOGOYTUYSKIY:UNKNOWN:RU-MGY
+RUSSIA:TCHITINSKAïA OBLAST RéSID;BALEY:UNKNOWN:RU-BAY
+RUSSIA:TOUVA RESPOUBLIKA;BAY-TAYGINSKIY:UNKNOWN:RU-BYG
+RUSSIA:TOUVA RESPOUBLIKA;TANDINSKIY:UNKNOWN:RU-TNY
+RUSSIA:BOURIATIA;SELENGINSKIY:UNKNOWN:RU-SLS
+RUSSIA:TOUVA RESPOUBLIKA;CHEDI-KHOLSKY:UNKNOWN:RU-CH8
+RUSSIA:TCHITINSKAïA OBLAST RéSID;ALEXANDROVO-ZAVODSKIY:UNKNOWN:RU-ALZ
+RUSSIA:TCHITINSKAïA OBLAST RéSID;PETROVSK-ZABAYKALSKIY:UNKNOWN:RU-PTB
+RUSSIA:TOUVA RESPOUBLIKA;DZUN-KHEMCHINSKIY:UNKNOWN:RU-DZC
+RUSSIA:TCHITINSKAïA OBLAST RéSID;OLOVYANNINSKIY:UNKNOWN:RU-OL1
+RUSSIA:BOURIATIA;MUKHORSHIBIRSKIY:UNKNOWN:RU-MKB
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KALGANSKIY:UNKNOWN:RU-KLN
+RUSSIA:AGUINSKI NATIONAL OKROUG;AGINSKIY:UNKNOWN:RU-AGS
+RUSSIA:BOURIATIA;ZAKAMENSKIY:UNKNOWN:RU-ZKN
+RUSSIA:BOURIATIA;DZHIDINSKIY:UNKNOWN:RU-DZS
+RUSSIA:BOURIATIA;GUSINOOZERSK:UNKNOWN:RU-GSZ
+RUSSIA:TCHITINSKAïA OBLAST RéSID;PETROVSK-ZABAYKALSKY:UNKNOWN:RU-PTA
+RUSSIA:AGUINSKI NATIONAL OKROUG;DULDURGINSKIY:UNKNOWN:RU-DLI
+RUSSIA:TOUVA RESPOUBLIKA;OVYURSKIY:UNKNOWN:RU-OVS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;BORZINSKIY:UNKNOWN:RU-BR3
+RUSSIA:TOUVA RESPOUBLIKA;TES-KHEMSKIY:UNKNOWN:RU-TSM
+RUSSIA:BOURIATIA;BICHURSKIY:UNKNOWN:RU-BCR
+RUSSIA:TCHITINSKAïA OBLAST RéSID;PRIARGUNSKIY:UNKNOWN:RU-PR9
+RUSSIA:BOURIATIA;KYAKHTINSKIY:UNKNOWN:RU-KYI
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KRASNOCHIKOYSKIY:UNKNOWN:RU-KAO
+RUSSIA:TOUVA RESPOUBLIKA;ERZINSKIY:UNKNOWN:RU-ERK
+RUSSIA:TOUVA RESPOUBLIKA;MONGUN-TAYGINSKIY:UNKNOWN:RU-MNY
+RUSSIA:TCHITINSKAïA OBLAST RéSID;AKSHINSKIY:UNKNOWN:RU-AKN
+RUSSIA:TCHITINSKAïA OBLAST RéSID;ONONSKIY:UNKNOWN:RU-ONK
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KRASNOKAMENSKIY:UNKNOWN:RU-KAE
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KYRINSKIY:UNKNOWN:RU-KY 
+RUSSIA:TCHITINSKAïA OBLAST RéSID;BORZYA:UNKNOWN:RU-BOZ
+RUSSIA:TCHITINSKAïA OBLAST RéSID;ZABAYKALSKIY:UNKNOWN:RU-ZBS
+RUSSIA:TCHITINSKAïA OBLAST RéSID;KRASNOKAMENSK:UNKNOWN:RU-KA 
+RUSSIA:KOSTROMSKAïA OBLAST;VOKHOMSKIY:UNKNOWN:RU-VKM
+RUSSIA:KOSTROMSKAïA OBLAST;SOLIGALICHSKIY:UNKNOWN:RU-SLK
+RUSSIA:KOSTROMSKAïA OBLAST;PAVINSKIY:UNKNOWN:RU-PVK
+RUSSIA:KOSTROMSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OK2
+RUSSIA:KOSTROMSKAïA OBLAST;CHUKHLOMSKIY:UNKNOWN:RU-CHM
+RUSSIA:KOSTROMSKAïA OBLAST;KOLOGRIVSKIY:UNKNOWN:RU-KLV
+RUSSIA:KOSTROMSKAïA OBLAST;MEZHEVSKIY:UNKNOWN:RU-MZK
+RUSSIA:KOSTROMSKAïA OBLAST;PYSCHUGSKIY:UNKNOWN:RU-PYG
+RUSSIA:KOSTROMSKAïA OBLAST;BUYSKIY:UNKNOWN:RU-BYI
+RUSSIA:IAROSLAVSKAïA OBLAST;POSHEKHONSKIY:UNKNOWN:RU-PSN
+RUSSIA:IAROSLAVSKAïA OBLAST;PERVOMAYSKIY:UNKNOWN:RU-PVY
+RUSSIA:TVERSKAïA OBLAST (KALININ;VESYEGONSKIY:UNKNOWN:RU-VSK
+RUSSIA:KOSTROMSKAïA OBLAST;PARFENYEVSKIY:UNKNOWN:RU-PFV
+RUSSIA:KOSTROMSKAïA OBLAST;SHARYINSKIY:UNKNOWN:RU-SAN
+RUSSIA:KOSTROMSKAïA OBLAST;NEYSKIY:UNKNOWN:RU-NYK
+RUSSIA:KOSTROMSKAïA OBLAST;PONAZYREVSKIY:UNKNOWN:RU-PNK
+RUSSIA:KOSTROMSKAïA OBLAST;GALICHSKIY:UNKNOWN:RU-GLH
+RUSSIA:IAROSLAVSKAïA OBLAST;BREYTOVSKIY:UNKNOWN:RU-BR4
+RUSSIA:TVERSKAïA OBLAST (KALININ;SANDOVSKIY:UNKNOWN:RU-SNV
+RUSSIA:KOSTROMSKAïA OBLAST;MANTUROVSKIY:UNKNOWN:RU-MNI
+RUSSIA:IAROSLAVSKAïA OBLAST;LYUBIMSKIY:UNKNOWN:RU-LYM
+RUSSIA:KOSTROMSKAïA OBLAST;ANTROPOVSKIY:UNKNOWN:RU-ANV
+RUSSIA:KOSTROMSKAïA OBLAST;BUY:UNKNOWN:RU-BUY
+RUSSIA:TVERSKAïA OBLAST (KALININ;LESNOY:UNKNOWN:RU-LEN
+RUSSIA:KOSTROMSKAïA OBLAST;SHARYA:UNKNOWN:RU-SHA
+RUSSIA:KOSTROMSKAïA OBLAST;GALITCH:UNKNOWN:RU-GLT
+RUSSIA:IAROSLAVSKAïA OBLAST;DANILOVSKIY:UNKNOWN:RU-DNS
+RUSSIA:IAROSLAVSKAïA OBLAST;RYBINSKIY:UNKNOWN:RU-RYI
+RUSSIA:TVERSKAïA OBLAST (KALININ;KRASNOKHOLMSKIY:UNKNOWN:RU-KAL
+RUSSIA:KOSTROMSKAïA OBLAST;MANTUROVO:UNKNOWN:RU-MNR
+RUSSIA:TVERSKAïA OBLAST (KALININ;MOLOKOVSKIY:UNKNOWN:RU-MLS
+RUSSIA:KOSTROMSKAïA OBLAST;KOSTROMSKOY:UNKNOWN:RU-KSM
+RUSSIA:KOSTROMSKAïA OBLAST;NEYA:UNKNOWN:RU-NEY
+RUSSIA:KOSTROMSKAïA OBLAST;SUSANINSKIY:UNKNOWN:RU-SSK
+RUSSIA:IAROSLAVSKAïA OBLAST;TUTAYEVSKIY:UNKNOWN:RU-TTV
+RUSSIA:TVERSKAïA OBLAST (KALININ;UDOMELSKIY:UNKNOWN:RU-UDL
+RUSSIA:TVERSKAïA OBLAST (KALININ;BOLOGOVSKIY:UNKNOWN:RU-BL9
+RUSSIA:KOSTROMSKAïA OBLAST;MAKARYEVSKIY:UNKNOWN:RU-MKI
+RUSSIA:TVERSKAïA OBLAST (KALININ;MAKSATIKHINSKIY:UNKNOWN:RU-MKH
+RUSSIA:IAROSLAVSKAïA OBLAST;NEKOUZSKIY:UNKNOWN:RU-NKZ
+RUSSIA:KOSTROMSKAïA OBLAST;OSTROVSKIY:UNKNOWN:RU-OSV
+RUSSIA:KOSTROMSKAïA OBLAST;SUDISLAVSKIY:UNKNOWN:RU-SDV
+RUSSIA:TVERSKAïA OBLAST (KALININ;BEZHETSKIY:UNKNOWN:RU-BZT
+RUSSIA:KOSTROMSKAïA OBLAST;KADYISKIY:UNKNOWN:RU-KDI
+RUSSIA:IAROSLAVSKAïA OBLAST;RYBINSK:UNKNOWN:RU-RYN
+RUSSIA:IAROSLAVSKAïA OBLAST;TUTAEV:UNKNOWN:RU-TUE
+RUSSIA:TVERSKAïA OBLAST (KALININ;SONKOVSKIY:UNKNOWN:RU-SNI
+RUSSIA:IAROSLAVSKAïA OBLAST;NEKRASOVSKIY:UNKNOWN:RU-NKY
+RUSSIA:IAROSLAVSKAïA OBLAST;MYSHKINSKIY:UNKNOWN:RU-MYN
+RUSSIA:IAROSLAVSKAïA OBLAST;YAROSLAVSKIY:UNKNOWN:RU-YRY
+RUSSIA:TVERSKAïA OBLAST (KALININ;BOLOGOYE:UNKNOWN:RU-BLG
+RUSSIA:IAROSLAVSKAïA OBLAST;BOLSHESELSKIY:UNKNOWN:RU-BSL
+RUSSIA:TVERSKAïA OBLAST (KALININ;UDOMLYA:UNKNOWN:RU-UDY
+RUSSIA:TVERSKAïA OBLAST (KALININ;VYSHNEVOLOTSKIY:UNKNOWN:RU-VYO
+RUSSIA:KOSTROMSKAïA OBLAST;KOSTROMA:UNKNOWN:RU-KSO
+RUSSIA:TVERSKAïA OBLAST (KALININ;BEZSHETSK:UNKNOWN:RU-BZS
+RUSSIA:KOSTROMSKAïA OBLAST;KRASNOSELSKIY:UNKNOWN:RU-KAI
+RUSSIA:IAROSLAVSKAïA OBLAST;UGLICHSKIY:UNKNOWN:RU-UGH
+RUSSIA:IVANOVSKAïA OBLAST;ZAVOLZHSKIY:UNKNOWN:RU-ZVH
+RUSSIA:TVERSKAïA OBLAST (KALININ;KESOVOGORSKIY:UNKNOWN:RU-KSI
+RUSSIA:TVERSKAïA OBLAST (KALININ;FIROVSKIY:UNKNOWN:RU-FRS
+RUSSIA:IAROSLAVSKAïA OBLAST;YAROSLAVL:UNKNOWN:RU-YRL
+RUSSIA:IVANOVSKAïA OBLAST;KINESHEMSKIY:UNKNOWN:RU-KNM
+RUSSIA:TVERSKAïA OBLAST (KALININ;SPIROVSKIY:UNKNOWN:RU-SPV
+RUSSIA:IVANOVSKAïA OBLAST;SOKOLSKIY:UNKNOWN:RU-SKK
+RUSSIA:TVERSKAïA OBLAST (KALININ;KASHINSKIY:UNKNOWN:RU-KSY
+RUSSIA:KOSTROMSKAïA OBLAST;NEREKHTSKIY:UNKNOWN:RU-NRT
+RUSSIA:IAROSLAVSKAïA OBLAST;BORISOGLEBSKIY:UNKNOWN:RU-BRE
+RUSSIA:TVERSKAïA OBLAST (KALININ;LIKHOSLAVLSKIY:UNKNOWN:RU-LKL
+RUSSIA:TVERSKAïA OBLAST (KALININ;VYSHNY VOLOCHEK:UNKNOWN:RU-VYC
+RUSSIA:TVERSKAïA OBLAST (KALININ;RAMESHKOVSKIY:UNKNOWN:RU-RMK
+RUSSIA:IAROSLAVSKAïA OBLAST;UGLICH:UNKNOWN:RU-UGC
+RUSSIA:IVANOVSKAïA OBLAST;KINESHMA:UNKNOWN:RU-KNA
+RUSSIA:IAROSLAVSKAïA OBLAST;GAVRILOV-YAMSKIY:UNKNOWN:RU-GVY
+RUSSIA:IVANOVSKAïA OBLAST;PRIVOLZHSKIY:UNKNOWN:RU-PRH
+RUSSIA:IVANOVSKAïA OBLAST;VICHUGSKIY:UNKNOWN:RU-VCG
+RUSSIA:TVERSKAïA OBLAST (KALININ;OSTASHKOVSKIY:UNKNOWN:RU-OSK
+RUSSIA:IVANOVSKAïA OBLAST;YURYEVETSKIY:UNKNOWN:RU-YRT
+RUSSIA:IAROSLAVSKAïA OBLAST;ROSTOVSKIY:UNKNOWN:RU-RSK
+RUSSIA:KOSTROMSKAïA OBLAST;NEREKHTA:UNKNOWN:RU-NRK
+RUSSIA:TVERSKAïA OBLAST (KALININ;KASHIN:UNKNOWN:RU-KAH
+RUSSIA:TVERSKAïA OBLAST (KALININ;KALYAZINSKIY:UNKNOWN:RU-KL 
+RUSSIA:IVANOVSKAïA OBLAST;FURMANOVSKIY:UNKNOWN:RU-FRV
+RUSSIA:TVERSKAïA OBLAST (KALININ;KIMRSKIY:UNKNOWN:RU-KM 
+RUSSIA:IVANOVSKAïA OBLAST;RODNIKOVSKIY:UNKNOWN:RU-RDV
+RUSSIA:TVERSKAïA OBLAST (KALININ;TORZHOKSKIY:UNKNOWN:RU-TR 
+RUSSIA:IVANOVSKAïA OBLAST;KOMSOMOLSKIY:UNKNOWN:RU-KM1
+RUSSIA:IAROSLAVSKAïA OBLAST;ROSTOV:UNKNOWN:RU-ROT
+RUSSIA:IVANOVSKAïA OBLAST;FURMANOV:UNKNOWN:RU-FRN
+RUSSIA:IVANOVSKAïA OBLAST;VICHUGA:UNKNOWN:RU-VCA
+RUSSIA:TVERSKAïA OBLAST (KALININ;PENOVSKIY:UNKNOWN:RU-PNI
+RUSSIA:TVERSKAïA OBLAST (KALININ;KUVSHINOVSKIY:UNKNOWN:RU-KVI
+RUSSIA:IVANOVSKAïA OBLAST;IVANOVSKIY:UNKNOWN:RU-IVK
+RUSSIA:IVANOVSKAïA OBLAST;LUKHSKIY:UNKNOWN:RU-LKS
+RUSSIA:IVANOVSKAïA OBLAST;ILYINSKIY:UNKNOWN:RU-ILK
+RUSSIA:IAROSLAVSKAïA OBLAST;PERESLAVSKIY:UNKNOWN:RU-PEV
+RUSSIA:IVANOVSKAïA OBLAST;PUCHEZHSKIY:UNKNOWN:RU-PCH
+RUSSIA:TVERSKAïA OBLAST (KALININ;KALININSKIY:UNKNOWN:RU-KL1
+RUSSIA:TVERSKAïA OBLAST (KALININ;ANDREAPOLSKIY:UNKNOWN:RU-ANL
+RUSSIA:TVERSKAïA OBLAST (KALININ;OSTASHKOV:UNKNOWN:RU-OSO
+RUSSIA:IVANOVSKAïA OBLAST;IVANOVO:UNKNOWN:RU-IVO
+RUSSIA:TVERSKAïA OBLAST (KALININ;SELIZHAROVSKIY:UNKNOWN:RU-SLR
+RUSSIA:IVANOVSKAïA OBLAST;SHUISKIY:UNKNOWN:RU-SUS
+RUSSIA:IVANOVSKAïA OBLAST;TEYKOVSKIY:UNKNOWN:RU-TYV
+RUSSIA:TVERSKAïA OBLAST (KALININ;TORZSHOK:UNKNOWN:RU-TRH
+RUSSIA:TVERSKAïA OBLAST (KALININ;TOROPETSKIY:UNKNOWN:RU-TR1
+RUSSIA:IVANOVSKAïA OBLAST;LEZHNEVSKIY:UNKNOWN:RU-LZV
+RUSSIA:IVANOVSKAïA OBLAST;PALEKHSKIY:UNKNOWN:RU-PLH
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;TALDOMSKIY:UNKNOWN:RU-TLM
+RUSSIA:IVANOVSKAïA OBLAST;VERKHNELANDEKHOVSKIY:UNKNOWN:RU-VRD
+RUSSIA:TVERSKAïA OBLAST (KALININ;TVER:UNKNOWN:RU-TVR
+RUSSIA:TVERSKAïA OBLAST (KALININ;KONAKOVSKIY:UNKNOWN:RU-KN 
+RUSSIA:IVANOVSKAïA OBLAST;SHUYA:UNKNOWN:RU-SUY
+RUSSIA:TVERSKAïA OBLAST (KALININ;KIMRY:UNKNOWN:RU-KIR
+RUSSIA:IVANOVSKAïA OBLAST;TEYKOVO:UNKNOWN:RU-TYO
+RUSSIA:TVERSKAïA OBLAST (KALININ;STARITSKIY:UNKNOWN:RU-STT
+RUSSIA:IVANOVSKAïA OBLAST;GAVRILOVO-POSADSKIY:UNKNOWN:RU-GVP
+RUSSIA:VLADIMIRSKAïA OBLAST;YURYEV-POLSKIY:UNKNOWN:RU-YRP
+RUSSIA:IVANOVSKAïA OBLAST;PESTYAKOVSKIY:UNKNOWN:RU-PSV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZAGORSKIY:UNKNOWN:RU-ZGS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;DUBNA:UNKNOWN:RU-DUN
+RUSSIA:IVANOVSKAïA OBLAST;YUZHSKIY:UNKNOWN:RU-YZS
+RUSSIA:TVERSKAïA OBLAST (KALININ;KONAKOVO:UNKNOWN:RU-KNO
+RUSSIA:IVANOVSKAïA OBLAST;SAVINSKIY:UNKNOWN:RU-SV2
+RUSSIA:VLADIMIRSKAïA OBLAST;ALEKSANDROVSKIY:UNKNOWN:RU-ALO
+RUSSIA:TVERSKAïA OBLAST (KALININ;RZHEVSKIY:UNKNOWN:RU-RZS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;DMITROVSKIY:UNKNOWN:RU-DMS
+RUSSIA:VLADIMIRSKAïA OBLAST;SUZDALSKIY:UNKNOWN:RU-SZL
+RUSSIA:TVERSKAïA OBLAST (KALININ;NELIDOVSKIY:UNKNOWN:RU-NLV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KLINSKIY:UNKNOWN:RU-KL2
+RUSSIA:VLADIMIRSKAïA OBLAST;KAMESHKOVSKIY:UNKNOWN:RU-KMV
+RUSSIA:VLADIMIRSKAïA OBLAST;KOVROVSKIY:UNKNOWN:RU-KVY
+RUSSIA:TVERSKAïA OBLAST (KALININ;OLENINSKIY:UNKNOWN:RU-OL2
+RUSSIA:TVERSKAïA OBLAST (KALININ;ZAPADNODVINSKIY:UNKNOWN:RU-ZPV
+RUSSIA:VLADIMIRSKAïA OBLAST;KOLCHUGINSKIY:UNKNOWN:RU-KL3
+RUSSIA:VLADIMIRSKAïA OBLAST;VYAZNIKOVSKIY:UNKNOWN:RU-VYK
+RUSSIA:VLADIMIRSKAïA OBLAST;SUZDAL':UNKNOWN:RU-SZ 
+RUSSIA:VLADIMIRSKAïA OBLAST;GOROKHOVETSKIY:UNKNOWN:RU-GRE
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LOTOSHINSKIY:UNKNOWN:RU-LTN
+RUSSIA:VLADIMIRSKAïA OBLAST;KOVROV:UNKNOWN:RU-KOR
+RUSSIA:VLADIMIRSKAïA OBLAST;ALEKSANDROV:UNKNOWN:RU-ALN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KLIN:UNKNOWN:RU-KL4
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SERGIEV POSAD:UNKNOWN:RU-SR 
+RUSSIA:VLADIMIRSKAïA OBLAST;KIRZHACHSKIY:UNKNOWN:RU-KRH
+RUSSIA:TVERSKAïA OBLAST (KALININ;ZUBTSOVSKIY:UNKNOWN:RU-ZBV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SOLNECHNOGORSKIY:UNKNOWN:RU-SLG
+RUSSIA:VLADIMIRSKAïA OBLAST;KOL'CHUGINO:UNKNOWN:RU-KLG
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;VOLOKOLAMSKIY:UNKNOWN:RU-VLM
+RUSSIA:VLADIMIRSKAïA OBLAST;SOBINSKIY:UNKNOWN:RU-SBS
+RUSSIA:TVERSKAïA OBLAST (KALININ;RZSHEV:UNKNOWN:RU-RZH
+RUSSIA:VLADIMIRSKAïA OBLAST;VYAZNIKI:UNKNOWN:RU-VYI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SCHELKOVSKIY:UNKNOWN:RU-SCK
+RUSSIA:TVERSKAïA OBLAST (KALININ;NELIDOVO:UNKNOWN:RU-NLD
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SHAKHOVSKOY:UNKNOWN:RU-SAV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SOLNECHNOGORSK:UNKNOWN:RU-SLO
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PUSHKINSKIY:UNKNOWN:RU-PSS
+RUSSIA:TVERSKAïA OBLAST (KALININ;ZHARKOVSKIY:UNKNOWN:RU-ZHK
+RUSSIA:VLADIMIRSKAïA OBLAST;VLADIMIR:UNKNOWN:RU-VL4
+RUSSIA:VLADIMIRSKAïA OBLAST;PETUSHKINSKIY:UNKNOWN:RU-PTI
+RUSSIA:VLADIMIRSKAïA OBLAST;SUDOGODSKIY:UNKNOWN:RU-SDD
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KRASNOARMEYSK:UNKNOWN:RU-KA1
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ISTRINSKIY:UNKNOWN:RU-ISN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;MYTISCHINSKIY:UNKNOWN:RU-MYS
+RUSSIA:TVERSKAïA OBLAST (KALININ;BELSKIY:UNKNOWN:RU-BSK
+RUSSIA:SMOLENSKAïA OBLAST;SYCHEVKSKIY:UNKNOWN:RU-SYY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;NOGINSKIY:UNKNOWN:RU-NGI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;VOLOKOLAMSK:UNKNOWN:RU-VLL
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PUSCHINO:UNKNOWN:RU-PSH
+RUSSIA:VLADIMIRSKAïA OBLAST;SELIVANOVSKIY:UNKNOWN:RU-SLI
+RUSSIA:VLADIMIRSKAïA OBLAST;SOBINKA:UNKNOWN:RU-SBN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;RUZSKIY:UNKNOWN:RU-RZI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PAVLOVO-POSADSKIY:UNKNOWN:RU-PVA
+RUSSIA:SMOLENSKAïA OBLAST;GAGARINSKIY:UNKNOWN:RU-GGN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LOBNYA:UNKNOWN:RU-LON
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;IVANTEYEVKA:UNKNOWN:RU-IVY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;FRYAZINO:UNKNOWN:RU-FRZ
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KHIMKINSKIY:UNKNOWN:RU-KH6
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;DOLGOPRUDNYI:UNKNOWN:RU-DLU
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SHCHELKOVO:UNKNOWN:RU-SCL
+RUSSIA:VLADIMIRSKAïA OBLAST;MUROMSKIY:UNKNOWN:RU-MR1
+RUSSIA:MOSKVA;MOSCOW:UNKNOWN:RU-MOC
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PUSHKINO:UNKNOWN:RU-PSK
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;MYTYSHCHY:UNKNOWN:RU-MYH
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ISTRA:UNKNOWN:RU-ISR
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KHIMKI:UNKNOWN:RU-KH7
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;NOGINSK:UNKNOWN:RU-NGN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KALININGRAD:UNKNOWN:RU-KLA
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KRASNOGORSKIY:UNKNOWN:RU-KA2
+RUSSIA:VLADIMIRSKAïA OBLAST;GUS-KHRUSTALNYI:UNKNOWN:RU-GSS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;OREKHOVO-ZUYEVSKIY:UNKNOWN:RU-ORU
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;BALASHIKHINSKIY:UNKNOWN:RU-BAH
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;OREKHOVO-ZUEVO:UNKNOWN:RU-ORE
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;MOZHAYSKIY:UNKNOWN:RU-MZY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KRASNOGORSK:UNKNOWN:RU-KRG
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SHATURSKIY:UNKNOWN:RU-SAR
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ELEKTROSTAL:UNKNOWN:RU-ELS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;BALASHIKHA:UNKNOWN:RU-BAI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;REUTOV:UNKNOWN:RU-RET
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ODINTSOVSKIY:UNKNOWN:RU-ODV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZHELEZNODOROZHNYI:UNKNOWN:RU-ZHR
+RUSSIA:SMOLENSKAïA OBLAST;NOVODUGINSKIY:UNKNOWN:RU-NV1
+RUSSIA:SMOLENSKAïA OBLAST;VELIZHSKIY:UNKNOWN:RU-VL5
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZVENIGOROD:UNKNOWN:RU-ZVG
+RUSSIA:SMOLENSKAïA OBLAST;DEMIDOVSKIY:UNKNOWN:RU-DMK
+RUSSIA:SMOLENSKAïA OBLAST;KHOLM-ZHIRKOVSKIY:UNKNOWN:RU-KH8
+RUSSIA:SMOLENSKAïA OBLAST;DUKHOVSCHINSKIY:UNKNOWN:RU-DKH
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LYUBERETSKIY:UNKNOWN:RU-LYT
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ODINTSOVO:UNKNOWN:RU-ODS
+RUSSIA:VLADIMIRSKAïA OBLAST;GUS'-KHRUSTALNY:UNKNOWN:RU-GST
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;RAMENSKIY:UNKNOWN:RU-RMI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LENINSKIY:UNKNOWN:RU-LN 
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LIUBERTSY:UNKNOWN:RU-LUR
+RUSSIA:VLADIMIRSKAïA OBLAST;MELENKOVSKIY:UNKNOWN:RU-MLK
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZHUKOVSKIY:UNKNOWN:RU-ZHI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;NARO-FOMINSKIY:UNKNOWN:RU-NRM
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;RAMENSKOE:UNKNOWN:RU-RMO
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SHATURA:UNKNOWN:RU-SAA
+RUSSIA:VLADIMIRSKAïA OBLAST;MUROM:UNKNOWN:RU-MUM
+RUSSIA:SMOLENSKAïA OBLAST;GAGARIN:UNKNOWN:RU-GGR
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;VIDNOYE:UNKNOWN:RU-VDY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LYTKARINO:UNKNOWN:RU-LYI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;VOSKRESENSKIY:UNKNOWN:RU-VSI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PODOLSKIY:UNKNOWN:RU-PDS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;MOZSHAYSK:UNKNOWN:RU-MZ 
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;TROITSK:UNKNOWN:RU-TR2
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;YEGORYEVSKIY:UNKNOWN:RU-YGV
+RUSSIA:SMOLENSKAïA OBLAST;YARTSEVSKIY:UNKNOWN:RU-YR 
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;DOMODEDOVSKIY:UNKNOWN:RU-DMI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;PODOLSK:UNKNOWN:RU-PDL
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;DOMODEDOVO:UNKNOWN:RU-DMD
+RUSSIA:SMOLENSKAïA OBLAST;VYAZEMSKIY:UNKNOWN:RU-VYY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;EGORYEVSK:UNKNOWN:RU-EGV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;NARO-FOMINSK:UNKNOWN:RU-NRI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KLIMOVSK:UNKNOWN:RU-KL5
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;VOSKRESENSK:UNKNOWN:RU-VSE
+RUSSIA:RYAZANSKAïA OBLAST;KLEPIKOVSKIY:UNKNOWN:RU-KL6
+RUSSIA:SMOLENSKAïA OBLAST;RUDNYANSKIY:UNKNOWN:RU-RDN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;BRONNITSY:UNKNOWN:RU-BR5
+RUSSIA:KALOUJSKAïA OBLAST;BOROVSKIY:UNKNOWN:RU-BR6
+RUSSIA:SMOLENSKAïA OBLAST;SAFONOVSKIY:UNKNOWN:RU-SFV
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;CHEKHOVSKIY:UNKNOWN:RU-CH9
+RUSSIA:KALOUJSKAïA OBLAST;IZNOSKOVSKIY:UNKNOWN:RU-IZK
+RUSSIA:KALOUJSKAïA OBLAST;MEDYNSKIY:UNKNOWN:RU-MDS
+RUSSIA:SMOLENSKAïA OBLAST;TYOMKINSKIY:UNKNOWN:RU-TYI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;STUPINSKIY:UNKNOWN:RU-STN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KOLOMENSKIY:UNKNOWN:RU-KL7
+RUSSIA:KALOUJSKAïA OBLAST;ZHUKOVSKIY:UNKNOWN:RU-ZHY
+RUSSIA:RYAZANSKAïA OBLAST;KASIMOVSKIY:UNKNOWN:RU-KS 
+RUSSIA:SMOLENSKAïA OBLAST;VYAZMA:UNKNOWN:RU-VYZ
+RUSSIA:SMOLENSKAïA OBLAST;SAFONOVO:UNKNOWN:RU-SFN
+RUSSIA:KALOUJSKAïA OBLAST;MALOYAROSLAVETSKIY:UNKNOWN:RU-MLL
+RUSSIA:KALOUJSKAïA OBLAST;OBNINSK:UNKNOWN:RU-OBK
+RUSSIA:SMOLENSKAïA OBLAST;SMOLENSKIY:UNKNOWN:RU-SMN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;LUKHOVITSKIY:UNKNOWN:RU-LKT
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KOLOMNA:UNKNOWN:RU-KLM
+RUSSIA:SMOLENSKAïA OBLAST;YARTSEVO:UNKNOWN:RU-YRE
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SERPUKHOVSKIY:UNKNOWN:RU-SRY
+RUSSIA:RYAZANSKAïA OBLAST;RYBNOVSKIY:UNKNOWN:RU-RYV
+RUSSIA:RYAZANSKAïA OBLAST;YERMISHINSKIY:UNKNOWN:RU-YR1
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;OZYORSKIY:UNKNOWN:RU-OZS
+RUSSIA:SMOLENSKAïA OBLAST;KARDYMOVSKIY:UNKNOWN:RU-KDV
+RUSSIA:SMOLENSKAïA OBLAST;UGRANSKIY:UNKNOWN:RU-UGK
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;STUPINO:UNKNOWN:RU-STO
+RUSSIA:SMOLENSKAïA OBLAST;DOROGOBUZHSKIY:UNKNOWN:RU-DRZ
+RUSSIA:KALOUJSKAïA OBLAST;DZERZHINSKIY:UNKNOWN:RU-DZK
+RUSSIA:RYAZANSKAïA OBLAST;KASIMOV:UNKNOWN:RU-KS1
+RUSSIA:KALOUJSKAïA OBLAST;YUKHNOVSKIY:UNKNOWN:RU-YKK
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SERPUKHOV:UNKNOWN:RU-SRO
+RUSSIA:RYAZANSKAïA OBLAST;RYAZANSKIY:UNKNOWN:RU-RYY
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZARAYSKIY:UNKNOWN:RU-ZRS
+RUSSIA:KALOUJSKAïA OBLAST;TARUSSKIY:UNKNOWN:RU-TR3
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;OZERY:UNKNOWN:RU-OZR
+RUSSIA:RYAZANSKAïA OBLAST;SPASSKIY:UNKNOWN:RU-SPI
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KASHIRSKIY:UNKNOWN:RU-KS2
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;KASHIRA:UNKNOWN:RU-KSA
+RUSSIA:RYAZANSKAïA OBLAST;SHILOVSKIY:UNKNOWN:RU-SIV
+RUSSIA:TOULSKAïA OBLAST;ZAOKSKIY:UNKNOWN:RU-ZOS
+RUSSIA:TOULSKAïA OBLAST;YASNOGORSKIY:UNKNOWN:RU-YSS
+RUSSIA:SMOLENSKAïA OBLAST;GLINKOVSKIY:UNKNOWN:RU-GLS
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;ZARAYSK:UNKNOWN:RU-ZRY
+RUSSIA:RYAZANSKAïA OBLAST;PITELINSKIY:UNKNOWN:RU-PTY
+RUSSIA:SMOLENSKAïA OBLAST;SMOLENSK:UNKNOWN:RU-SMS
+RUSSIA:KALOUJSKAïA OBLAST;MOSALSKIY:UNKNOWN:RU-MSS
+RUSSIA:RYAZANSKAïA OBLAST;KADOMSKIY:UNKNOWN:RU-KDY
+RUSSIA:KALOUJSKAïA OBLAST;FERZIKOVSKIY:UNKNOWN:RU-FRK
+RUSSIA:TOULSKAïA OBLAST;VENEVSKIY:UNKNOWN:RU-VNK
+RUSSIA:KALOUJSKAïA OBLAST;KALUGA:UNKNOWN:RU-KAG
+RUSSIA:RYAZANSKAïA OBLAST;RYAZAN:UNKNOWN:RU-RYZ
+RUSSIA:SMOLENSKAïA OBLAST;KRASNINSKIY:UNKNOWN:RU-KA3
+RUSSIA:TOULSKAïA OBLAST;ALEKSINSKIY:UNKNOWN:RU-AL3
+RUSSIA:SMOLENSKAïA OBLAST;YELNINSKIY:UNKNOWN:RU-YLN
+RUSSIA:MOSKOVSKAïA OBLAST RéSIDU;SEREBRYANOPRUDSKIY:UNKNOWN:RU-SRP
+RUSSIA:RYAZANSKAïA OBLAST;ZAKHAROVSKIY:UNKNOWN:RU-ZKV
+RUSSIA:KALOUJSKAïA OBLAST;BABYNINSKIY:UNKNOWN:RU-BBK
+RUSSIA:SMOLENSKAïA OBLAST;POCHINKOVSKIY:UNKNOWN:RU-PCK
+RUSSIA:KALOUJSKAïA OBLAST;SPAS-DEMENSKIY:UNKNOWN:RU-SPM
+RUSSIA:KALOUJSKAïA OBLAST;BARYATINSKIY:UNKNOWN:RU-BR7
+RUSSIA:KALOUJSKAïA OBLAST;MESCHOVSKIY:UNKNOWN:RU-MSV
+RUSSIA:RYAZANSKAïA OBLAST;SASOVSKIY:UNKNOWN:RU-SSI
+RUSSIA:RYAZANSKAïA OBLAST;CHUCHKOVSKIY:UNKNOWN:RU-CUV
+RUSSIA:TOULSKAïA OBLAST;ALEKSIN:UNKNOWN:RU-AL4
+RUSSIA:SMOLENSKAïA OBLAST;MONASTYRSHINSKIY:UNKNOWN:RU-MNH
+RUSSIA:KALOUJSKAïA OBLAST;PEREMYSHLSKIY:UNKNOWN:RU-PEH
+RUSSIA:RYAZANSKAïA OBLAST;STAROZHILOVSKIY:UNKNOWN:RU-STV
+RUSSIA:RYAZANSKAïA OBLAST;MIKHAYLOVSKIY:UNKNOWN:RU-MKY
+RUSSIA:RYAZANSKAïA OBLAST;PRONSKIY:UNKNOWN:RU-POS
+RUSSIA:TOULSKAïA OBLAST;LENINSKIY:UNKNOWN:RU-LN1
+RUSSIA:RYAZANSKAïA OBLAST;SASOVO:UNKNOWN:RU-SAO
+RUSSIA:KALOUJSKAïA OBLAST;SUKHINICHSKIY:UNKNOWN:RU-SKC
+RUSSIA:TOULSKAïA OBLAST;NOVOMOSKOVSKIY:UNKNOWN:RU-NVO
+RUSSIA:KALOUJSKAïA OBLAST;KOZELSKIY:UNKNOWN:RU-KZI
+RUSSIA:TOULSKAïA OBLAST;DUBENSKIY:UNKNOWN:RU-DBK
+RUSSIA:RYAZANSKAïA OBLAST;PUTYATINSKIY:UNKNOWN:RU-PT 
+RUSSIA:KALOUJSKAïA OBLAST;KUYBYSHEVSKIY:UNKNOWN:RU-KYV
+RUSSIA:TOULSKAïA OBLAST;SUVOROVSKIY:UNKNOWN:RU-SV3
+RUSSIA:TOULSKAïA OBLAST;TULA:UNKNOWN:RU-TUL
+RUSSIA:SMOLENSKAïA OBLAST;ROSLAVLSKIY:UNKNOWN:RU-RSL
+RUSSIA:RYAZANSKAïA OBLAST;SHATSKIY:UNKNOWN:RU-SAS
+RUSSIA:TOULSKAïA OBLAST;KIREYEVSKIY:UNKNOWN:RU-KEV
+RUSSIA:KALOUJSKAïA OBLAST;KIROVSKIY:UNKNOWN:RU-KOS
+RUSSIA:SMOLENSKAïA OBLAST;KHISLAVICHSKIY:UNKNOWN:RU-KHC
+RUSSIA:KALOUJSKAïA OBLAST;DUMINICHSKIY:UNKNOWN:RU-DMC
+RUSSIA:RYAZANSKAïA OBLAST;KORABLINSKIY:UNKNOWN:RU-KA4
+RUSSIA:RYAZANSKAïA OBLAST;SAPOZHKOVSKIY:UNKNOWN:RU-SPY
+RUSSIA:TOULSKAïA OBLAST;ODOYEVSKIY:UNKNOWN:RU-ODK
+RUSSIA:TOULSKAïA OBLAST;KIMOVSKIY:UNKNOWN:RU-KM2
+RUSSIA:KALOUJSKAïA OBLAST;KIROV:UNKNOWN:RU-KI 
+RUSSIA:KALOUJSKAïA OBLAST;LYUDINOVSKIY:UNKNOWN:RU-LYS
+RUSSIA:TOULSKAïA OBLAST;UZLOVSKIY:UNKNOWN:RU-UZK
+RUSSIA:TOULSKAïA OBLAST;SCHEKINSKIY:UNKNOWN:RU-SCN
+RUSSIA:BRYANSKAïA OBLAST;ROGNEDINSKIY:UNKNOWN:RU-RGN
+RUSSIA:SMOLENSKAïA OBLAST;DESNOGORSK:UNKNOWN:RU-DSG
+RUSSIA:TOULSKAïA OBLAST;NOVOMOSKOVSK:UNKNOWN:RU-NV2
+RUSSIA:SMOLENSKAïA OBLAST;SHUMYACHSKIY:UNKNOWN:RU-SHC
+RUSSIA:TOULSKAïA OBLAST;DONSKOY:UNKNOWN:RU-DNK
+RUSSIA:RYAZANSKAïA OBLAST;SARAYEVSKIY:UNKNOWN:RU-SR1
+RUSSIA:TOULSKAïA OBLAST;SCHEKINO:UNKNOWN:RU-SCI
+RUSSIA:TOULSKAïA OBLAST;UZLOVAYA:UNKNOWN:RU-UZV
+RUSSIA:TOULSKAïA OBLAST;BELYEVSKIY:UNKNOWN:RU-BYV
+RUSSIA:RYAZANSKAïA OBLAST;UKHOLOVSKIY:UNKNOWN:RU-UKV
+RUSSIA:RYAZANSKAïA OBLAST;SKOPINSKIY:UNKNOWN:RU-SKN
+RUSSIA:SMOLENSKAïA OBLAST;ROSLAVL':UNKNOWN:RU-RS 
+RUSSIA:TOULSKAïA OBLAST;KIMOVSK:UNKNOWN:RU-KM3
+RUSSIA:KALOUJSKAïA OBLAST;ULYANOVSKIY:UNKNOWN:RU-ULK
+RUSSIA:KALOUJSKAïA OBLAST;LYUDINOVO:UNKNOWN:RU-LYN
+RUSSIA:KALOUJSKAïA OBLAST;ZHIZDRINSKIY:UNKNOWN:RU-ZH 
+RUSSIA:BRYANSKAïA OBLAST;DYATKOVSKIY:UNKNOWN:RU-DYV
+RUSSIA:RYAZANSKAïA OBLAST;RYAZHSKIY:UNKNOWN:RU-RY 
+RUSSIA:BRYANSKAïA OBLAST;DUBROVSKIY:UNKNOWN:RU-DBI
+RUSSIA:TOULSKAïA OBLAST;BOGORODITSKIY:UNKNOWN:RU-BGY
+RUSSIA:RYAZANSKAïA OBLAST;SKOPIN:UNKNOWN:RU-SKP
+RUSSIA:TOULSKAïA OBLAST;PLAVSKIY:UNKNOWN:RU-PLK
+RUSSIA:RYAZANSKAïA OBLAST;MILOSLAVSKIY:UNKNOWN:RU-MLI
+RUSSIA:TOULSKAïA OBLAST;TEPLO-OGAREVSKIY:UNKNOWN:RU-TPR
+RUSSIA:TOULSKAïA OBLAST;ARSENYEVSKIY:UNKNOWN:RU-ARI
+RUSSIA:TOULSKAïA OBLAST;BOGORODITSK:UNKNOWN:RU-BG 
+RUSSIA:BRYANSKAïA OBLAST;ZHUKOVSKIY:UNKNOWN:RU-ZH1
+RUSSIA:SMOLENSKAïA OBLAST;YERSHICHSKIY:UNKNOWN:RU-YRC
+RUSSIA:KALOUJSKAïA OBLAST;KHVASTOVICHSKIY:UNKNOWN:RU-KHH
+RUSSIA:TOULSKAïA OBLAST;VOLOVSKIY:UNKNOWN:RU-VL6
+RUSSIA:TOULSKAïA OBLAST;KURKINSKIY:UNKNOWN:RU-KKN
+RUSSIA:TOULSKAïA OBLAST;CHERNSKIY:UNKNOWN:RU-CES
+RUSSIA:BRYANSKAïA OBLAST;KLETNYANSKIY:UNKNOWN:RU-KL8
+RUSSIA:RYAZANSKAïA OBLAST;NOVODEREVENSKIY:UNKNOWN:RU-NVE
+RUSSIA:ORLOVSKAïA OBLAST;BOLKHOVSKIY:UNKNOWN:RU-BKV
+RUSSIA:BRYANSKAïA OBLAST;DYAT'KOVO:UNKNOWN:RU-DYK
+RUSSIA:BRYANSKAïA OBLAST;BRYANSKIY:UNKNOWN:RU-BR8
+RUSSIA:ORLOVSKAïA OBLAST;ZNAMENSKIY:UNKNOWN:RU-ZNS
+RUSSIA:ORLOVSKAïA OBLAST;MTSENSKIY:UNKNOWN:RU-MTS
+RUSSIA:TOULSKAïA OBLAST;KAMENSKIY:UNKNOWN:RU-KM4
+RUSSIA:TOULSKAïA OBLAST;YEFREMOVSKIY:UNKNOWN:RU-YFV
+RUSSIA:ORLOVSKAïA OBLAST;KHOTYNETSKIY:UNKNOWN:RU-KHT
+RUSSIA:BRYANSKAïA OBLAST;KARACHEVSKIY:UNKNOWN:RU-KAV
+RUSSIA:BRYANSKAïA OBLAST;SURAZHSKIY:UNKNOWN:RU-SR2
+RUSSIA:BRYANSKAïA OBLAST;BRYANSK:UNKNOWN:RU-BR9
+RUSSIA:BRYANSKAïA OBLAST;ZHIRYATINSKIY:UNKNOWN:RU-ZH2
+RUSSIA:ORLOVSKAïA OBLAST;MZENSK:UNKNOWN:RU-MZN
+RUSSIA:BRYANSKAïA OBLAST;MGLINSKIY:UNKNOWN:RU-MGS
+RUSSIA:ORLOVSKAïA OBLAST;KORSAKOVSKIY:UNKNOWN:RU-KS3
+RUSSIA:ORLOVSKAïA OBLAST;ORLOVSKIY:UNKNOWN:RU-ORS
+RUSSIA:BRYANSKAïA OBLAST;KRASNOGORSKIY:UNKNOWN:RU-KA5
+RUSSIA:BRYANSKAïA OBLAST;VYGONICHSKIY:UNKNOWN:RU-VYH
+RUSSIA:BRYANSKAïA OBLAST;POCHEPSKIY:UNKNOWN:RU-PCP
+RUSSIA:ORLOVSKAïA OBLAST;NOVOSILSKIY:UNKNOWN:RU-NV3
+RUSSIA:ORLOVSKAïA OBLAST;URITSKIY:UNKNOWN:RU-URI
+RUSSIA:TOULSKAïA OBLAST;EFREMOV:UNKNOWN:RU-EFM
+RUSSIA:BRYANSKAïA OBLAST;GORDEYEVSKIY:UNKNOWN:RU-GRI
+RUSSIA:ORLOVSKAïA OBLAST;NOVODEREVENKOVSKIY:UNKNOWN:RU-NV4
+RUSSIA:BRYANSKAïA OBLAST;NAVLINSKIY:UNKNOWN:RU-NV5
+RUSSIA:ORLOVSKAïA OBLAST;ZALEGOSCHENSKIY:UNKNOWN:RU-ZLE
+RUSSIA:ORLOVSKAïA OBLAST;SHABLYKINSKIY:UNKNOWN:RU-SAK
+RUSSIA:ORLOVSKAïA OBLAST;ORYOL:UNKNOWN:RU-ORL
+RUSSIA:BRYANSKAïA OBLAST;UNECHSKIY:UNKNOWN:RU-UNK
+RUSSIA:ORLOVSKAïA OBLAST;VERKHOVSKIY:UNKNOWN:RU-VR2
+RUSSIA:BRYANSKAïA OBLAST;KLINTSOVSKIY:UNKNOWN:RU-KL9
+RUSSIA:ORLOVSKAïA OBLAST;KRASNOZORENSKIY:UNKNOWN:RU-KA6
+RUSSIA:ORLOVSKAïA OBLAST;SOSKOVSKIY:UNKNOWN:RU-SSY
+RUSSIA:BRYANSKAïA OBLAST;TRUBCHEVSKIY:UNKNOWN:RU-TR4
+RUSSIA:ORLOVSKAïA OBLAST;SVERDLOVSKIY:UNKNOWN:RU-SV4
+RUSSIA:ORLOVSKAïA OBLAST;KROMSKIY:UNKNOWN:RU-KOK
+RUSSIA:BRYANSKAïA OBLAST;BRASOVSKIY:UNKNOWN:RU-BAV
+RUSSIA:BRYANSKAïA OBLAST;KLINTSY:UNKNOWN:RU-KLT
+RUSSIA:ORLOVSKAïA OBLAST;POKROVSKIY:UNKNOWN:RU-PKV
+RUSSIA:BRYANSKAïA OBLAST;NOVOZYBKOVSKIY:UNKNOWN:RU-NV6
+RUSSIA:BRYANSKAïA OBLAST;STARODUBSKIY:UNKNOWN:RU-STB
+RUSSIA:BRYANSKAïA OBLAST;POGARSKIY:UNKNOWN:RU-PGS
+RUSSIA:ORLOVSKAïA OBLAST;DMITROVSKIY:UNKNOWN:RU-DMY
+RUSSIA:ORLOVSKAïA OBLAST;LIVENSKIY:UNKNOWN:RU-LVK
+RUSSIA:BRYANSKAïA OBLAST;SUZEMSKIY:UNKNOWN:RU-SZS
+RUSSIA:ORLOVSKAïA OBLAST;GLAZUNOVSKIY:UNKNOWN:RU-GLK
+RUSSIA:ORLOVSKAïA OBLAST;MALOARKHANGELSKIY:UNKNOWN:RU-MLN
+RUSSIA:BRYANSKAïA OBLAST;NOVOZYBKOV:UNKNOWN:RU-NVB
+RUSSIA:BRYANSKAïA OBLAST;KLIMOVSKIY:UNKNOWN:RU-KIS
+RUSSIA:BRYANSKAïA OBLAST;KOMARICHSKIY:UNKNOWN:RU-KMC
+RUSSIA:ORLOVSKAïA OBLAST;TROSNYANSKIY:UNKNOWN:RU-TR5
+RUSSIA:ORLOVSKAïA OBLAST;LIVNY:UNKNOWN:RU-LIN
+RUSSIA:BRYANSKAïA OBLAST;ZLYNKOVSKIY:UNKNOWN:RU-ZLV
+RUSSIA:ORLOVSKAïA OBLAST;KOLPNYANSKIY:UNKNOWN:RU-KPN
+RUSSIA:BRYANSKAïA OBLAST;SEVSKIY:UNKNOWN:RU-SV5
+RUSSIA:ORLOVSKAïA OBLAST;DOLZHANSKIY:UNKNOWN:RU-DLY
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VYBORGSKIY:UNKNOWN:RU-VYG
+RUSSIA:LENINGRADSKAïA OBLAST RéS;PODPOROZHSKIY:UNKNOWN:RU-PDZ
+RUSSIA:LENINGRADSKAïA OBLAST RéS;PRIOZERSKIY:UNKNOWN:RU-PIR
+RUSSIA:LENINGRADSKAïA OBLAST RéS;PRIOZERSK:UNKNOWN:RU-PIS
+RUSSIA:LENINGRADSKAïA OBLAST RéS;LODEYNOPOLSKIY:UNKNOWN:RU-LDP
+RUSSIA:LENINGRADSKAïA OBLAST RéS;PODPOROZHYE:UNKNOWN:RU-PDY
+RUSSIA:LENINGRADSKAïA OBLAST RéS;LODEYNOYE POLE:UNKNOWN:RU-LDY
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VYBORG:UNKNOWN:RU-VY1
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VOLKHOVSKIY:UNKNOWN:RU-VL7
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VSEVOLZHSKIY:UNKNOWN:RU-VSZ
+RUSSIA:SANKT-PETERBURG;SANKT-PETERSBURG:UNKNOWN:RU-SNT
+RUSSIA:LENINGRADSKAïA OBLAST RéS;TIKHVINSKIY:UNKNOWN:RU-TKN
+RUSSIA:LENINGRADSKAïA OBLAST RéS;LOMONOSOVSKIY:UNKNOWN:RU-LMV
+RUSSIA:LENINGRADSKAïA OBLAST RéS;BOKSITOGORSKIY:UNKNOWN:RU-BKG
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VSEVOLOZHSK:UNKNOWN:RU-VSH
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KIROVSKIY:UNKNOWN:RU-KOI
+RUSSIA:LENINGRADSKAïA OBLAST RéS;SOSNOVYI BOR:UNKNOWN:RU-SS 
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KINGISEPPSKIY:UNKNOWN:RU-KN1
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VOLKHOV:UNKNOWN:RU-VL8
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KIROVSK:UNKNOWN:RU-KOV
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KIRISHSKIY:UNKNOWN:RU-KIH
+RUSSIA:LENINGRADSKAïA OBLAST RéS;TOSNENSKIY:UNKNOWN:RU-TSN
+RUSSIA:LENINGRADSKAïA OBLAST RéS;GATCHINSKIY:UNKNOWN:RU-GTN
+RUSSIA:LENINGRADSKAïA OBLAST RéS;VOLOSOVSKIY:UNKNOWN:RU-VL9
+RUSSIA:LENINGRADSKAïA OBLAST RéS;TIKHVIN:UNKNOWN:RU-TKI
+RUSSIA:LENINGRADSKAïA OBLAST RéS;GATCHINA:UNKNOWN:RU-GTH
+RUSSIA:LENINGRADSKAïA OBLAST RéS;TOSNO:UNKNOWN:RU-TON
+RUSSIA:LENINGRADSKAïA OBLAST RéS;BOKSITOGORSK:UNKNOWN:RU-BKO
+RUSSIA:LENINGRADSKAïA OBLAST RéS;IVANGOROD:UNKNOWN:RU-IVR
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KINGISEPP:UNKNOWN:RU-KNE
+RUSSIA:LENINGRADSKAïA OBLAST RéS;PIKALEVO:UNKNOWN:RU-PKL
+RUSSIA:LENINGRADSKAïA OBLAST RéS;SLANTSEVSKIY:UNKNOWN:RU-SLY
+RUSSIA:LENINGRADSKAïA OBLAST RéS;KIRISHI:UNKNOWN:RU-KII
+RUSSIA:NOVGORODSKAïA OBLAST;CHUDOVSKIY:UNKNOWN:RU-CUS
+RUSSIA:NOVGORODSKAïA OBLAST;LYUBYTINSKIY:UNKNOWN:RU-LYK
+RUSSIA:LENINGRADSKAïA OBLAST RéS;LUZHSKIY:UNKNOWN:RU-LZI
+RUSSIA:NOVGORODSKAïA OBLAST;KHVOYNINSKIY:UNKNOWN:RU-KH9
+RUSSIA:NOVGORODSKAïA OBLAST;MALOVISHERSKIY:UNKNOWN:RU-MLE
+RUSSIA:LENINGRADSKAïA OBLAST RéS;SLANTSY:UNKNOWN:RU-SL 
+RUSSIA:NOVGORODSKAïA OBLAST;NOVGORODSKIY:UNKNOWN:RU-NVD
+RUSSIA:PSKOVSKAïA OBLAST;GDOVSKIY:UNKNOWN:RU-GDS
+RUSSIA:PSKOVSKAïA OBLAST;PLYUSSKIY:UNKNOWN:RU-PLI
+RUSSIA:NOVGORODSKAïA OBLAST;BATETSKIY:UNKNOWN:RU-BTK
+RUSSIA:LENINGRADSKAïA OBLAST RéS;LUGA:UNKNOWN:RU-LUG
+RUSSIA:NOVGORODSKAïA OBLAST;PESTOVSKIY:UNKNOWN:RU-PSI
+RUSSIA:NOVGORODSKAïA OBLAST;BOROVICHSKIY:UNKNOWN:RU-BRC
+RUSSIA:NOVGORODSKAïA OBLAST;MOSHENSKIY:UNKNOWN:RU-MSN
+RUSSIA:NOVGORODSKAïA OBLAST;OKULOVSKIY:UNKNOWN:RU-OKV
+RUSSIA:NOVGORODSKAïA OBLAST;NOVGOROD:UNKNOWN:RU-NVR
+RUSSIA:PSKOVSKAïA OBLAST;STRUGO-KRASNENSKIY:UNKNOWN:RU-STS
+RUSSIA:NOVGORODSKAïA OBLAST;KRESTETSKIY:UNKNOWN:RU-KET
+RUSSIA:NOVGORODSKAïA OBLAST;SHIMSKIY:UNKNOWN:RU-SIS
+RUSSIA:NOVGORODSKAïA OBLAST;BOROVICHI:UNKNOWN:RU-BOC
+RUSSIA:PSKOVSKAïA OBLAST;PSKOVSKIY:UNKNOWN:RU-PSY
+RUSSIA:NOVGORODSKAïA OBLAST;SOLETSKIY:UNKNOWN:RU-SL1
+RUSSIA:NOVGORODSKAïA OBLAST;STARORUSSKIY:UNKNOWN:RU-STI
+RUSSIA:NOVGORODSKAïA OBLAST;PARFINO:UNKNOWN:RU-PRO
+RUSSIA:NOVGORODSKAïA OBLAST;VALDAYSKIY:UNKNOWN:RU-VDS
+RUSSIA:PSKOVSKAïA OBLAST;PORKHOVSKIY:UNKNOWN:RU-PKS
+RUSSIA:NOVGORODSKAïA OBLAST;DEMYANSKIY:UNKNOWN:RU-DMN
+RUSSIA:NOVGORODSKAïA OBLAST;VOLOTOVSKIY:UNKNOWN:RU-VOV
+RUSSIA:NOVGORODSKAïA OBLAST;STARAYA RUSSA:UNKNOWN:RU-STR
+RUSSIA:PSKOVSKAïA OBLAST;PECHORSKIY:UNKNOWN:RU-PCI
+RUSSIA:PSKOVSKAïA OBLAST;DNOVSKIY:UNKNOWN:RU-DNI
+RUSSIA:PSKOVSKAïA OBLAST;PSKOV:UNKNOWN:RU-PS 
+RUSSIA:NOVGORODSKAïA OBLAST;PODDORSKIY:UNKNOWN:RU-PDR
+RUSSIA:PSKOVSKAïA OBLAST;PALKINSKIY:UNKNOWN:RU-PL 
+RUSSIA:PSKOVSKAïA OBLAST;DEDOVICHESKIY:UNKNOWN:RU-DDH
+RUSSIA:PSKOVSKAïA OBLAST;OSTROVSKIY:UNKNOWN:RU-OSI
+RUSSIA:NOVGORODSKAïA OBLAST;MAREVSKIY:UNKNOWN:RU-MR2
+RUSSIA:PSKOVSKAïA OBLAST;BEZHANITSKIY:UNKNOWN:RU-BZK
+RUSSIA:PSKOVSKAïA OBLAST;PYTALOVSKIY:UNKNOWN:RU-PYV
+RUSSIA:NOVGORODSKAïA OBLAST;KHOLMSKIY:UNKNOWN:RU-KOY
+RUSSIA:PSKOVSKAïA OBLAST;NOVORZHEVSKIY:UNKNOWN:RU-NV7
+RUSSIA:PSKOVSKAïA OBLAST;OSTROV:UNKNOWN:RU-OSR
+RUSSIA:PSKOVSKAïA OBLAST;LOKNYANSKIY:UNKNOWN:RU-LKN
+RUSSIA:PSKOVSKAïA OBLAST;PUSHKINO-GORSKIY:UNKNOWN:RU-PSG
+RUSSIA:PSKOVSKAïA OBLAST;KRASNOGORODSKIY:UNKNOWN:RU-KAD
+RUSSIA:PSKOVSKAïA OBLAST;OPOCHENSKIY:UNKNOWN:RU-OPS
+RUSSIA:PSKOVSKAïA OBLAST;VELIKOLUKSKIY:UNKNOWN:RU-VIK
+RUSSIA:PSKOVSKAïA OBLAST;NOVOSOKOLNICHESKIY:UNKNOWN:RU-NVC
+RUSSIA:PSKOVSKAïA OBLAST;PUSTOSHKINSKIY:UNKNOWN:RU-PS1
+RUSSIA:PSKOVSKAïA OBLAST;SEBEZHSKIY:UNKNOWN:RU-SBH
+RUSSIA:PSKOVSKAïA OBLAST;KUNYINSKIY:UNKNOWN:RU-KN2
+RUSSIA:PSKOVSKAïA OBLAST;VELIKIE LUKI:UNKNOWN:RU-VLU
+RUSSIA:PSKOVSKAïA OBLAST;NEVELSKIY:UNKNOWN:RU-NV8
+RUSSIA:PSKOVSKAïA OBLAST;USVYATSKIY:UNKNOWN:RU-UST
+RUSSIA:ROSTOVSKAïA OBLAST;VERKHNEDONSKOY:UNKNOWN:RU-VRO
+RUSSIA:ROSTOVSKAïA OBLAST;SHOLOKHOVSKIY:UNKNOWN:RU-SOS
+RUSSIA:ROSTOVSKAïA OBLAST;CHERTKOVSKIY:UNKNOWN:RU-CEV
+RUSSIA:ROSTOVSKAïA OBLAST;BOKOVSKIY:UNKNOWN:RU-BKK
+RUSSIA:ROSTOVSKAïA OBLAST;KASHARSKIY:UNKNOWN:RU-KS4
+RUSSIA:ROSTOVSKAïA OBLAST;MILLEROVSKIY:UNKNOWN:RU-MLY
+RUSSIA:ROSTOVSKAïA OBLAST;SOVETSKIY:UNKNOWN:RU-SV6
+RUSSIA:ROSTOVSKAïA OBLAST;MILLEROVO:UNKNOWN:RU-MLR
+RUSSIA:ROSTOVSKAïA OBLAST;MILYUTINSKIY:UNKNOWN:RU-ML 
+RUSSIA:ROSTOVSKAïA OBLAST;OBLIVSKIY:UNKNOWN:RU-OBI
+RUSSIA:ROSTOVSKAïA OBLAST;TARASOVSKIY:UNKNOWN:RU-TR6
+RUSSIA:ROSTOVSKAïA OBLAST;KAMENSKIY:UNKNOWN:RU-KM5
+RUSSIA:ROSTOVSKAïA OBLAST;BELOKALITVINSKIY:UNKNOWN:RU-BOT
+RUSSIA:ROSTOVSKAïA OBLAST;TATSYNSKIY:UNKNOWN:RU-TTK
+RUSSIA:ROSTOVSKAïA OBLAST;MOROZOVSKIY:UNKNOWN:RU-MR3
+RUSSIA:ROSTOVSKAïA OBLAST;DONETSK:UNKNOWN:RU-DNT
+RUSSIA:ROSTOVSKAïA OBLAST;KAMENSK-SHAKHTINSKIY:UNKNOWN:RU-KMH
+RUSSIA:ROSTOVSKAïA OBLAST;BELAYA KALITVA:UNKNOWN:RU-BAK
+RUSSIA:ROSTOVSKAïA OBLAST;KRASNOSULINSKIY:UNKNOWN:RU-KA7
+RUSSIA:ROSTOVSKAïA OBLAST;GUKOVO:UNKNOWN:RU-GUV
+RUSSIA:ROSTOVSKAïA OBLAST;TSYMLYANSKIY:UNKNOWN:RU-TSS
+RUSSIA:ROSTOVSKAïA OBLAST;ZVEREVO:UNKNOWN:RU-ZVO
+RUSSIA:ROSTOVSKAïA OBLAST;KONSTANTINOVSKIY:UNKNOWN:RU-KN3
+RUSSIA:ROSTOVSKAïA OBLAST;KRASNYI SULIN:UNKNOWN:RU-KAU
+RUSSIA:ROSTOVSKAïA OBLAST;UST-DONETSKIY:UNKNOWN:RU-US9
+RUSSIA:ROSTOVSKAïA OBLAST;RODIONOVO-NESVETAYSKIY:UNKNOWN:RU-RDS
+RUSSIA:ROSTOVSKAïA OBLAST;KUYBYSHEVSKIY:UNKNOWN:RU-KY1
+RUSSIA:ROSTOVSKAïA OBLAST;NOVOSHAKHTINSK:UNKNOWN:RU-NVH
+RUSSIA:ROSTOVSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OK3
+RUSSIA:ROSTOVSKAïA OBLAST;SHAKHTY:UNKNOWN:RU-SHT
+RUSSIA:ROSTOVSKAïA OBLAST;MATVEYEVO-KURGANSKIY:UNKNOWN:RU-MTK
+RUSSIA:ROSTOVSKAïA OBLAST;DUBOVSKIY:UNKNOWN:RU-DBY
+RUSSIA:ROSTOVSKAïA OBLAST;VOLGODONSKIY:UNKNOWN:RU-VLN
+RUSSIA:ROSTOVSKAïA OBLAST;SEMIKARAKORSKIY:UNKNOWN:RU-SMO
+RUSSIA:ROSTOVSKAïA OBLAST;NEKLINOVSKIY:UNKNOWN:RU-NK 
+RUSSIA:ROSTOVSKAïA OBLAST;VOLGODONSK:UNKNOWN:RU-VGD
+RUSSIA:ROSTOVSKAïA OBLAST;ZAVETINSKIY:UNKNOWN:RU-ZVS
+RUSSIA:ROSTOVSKAïA OBLAST;AKSAYSKIY:UNKNOWN:RU-AKS
+RUSSIA:ROSTOVSKAïA OBLAST;MYASNIKOVSKIY:UNKNOWN:RU-MYV
+RUSSIA:ROSTOVSKAïA OBLAST;NOVOCHERKASSK:UNKNOWN:RU-NV9
+RUSSIA:ROSTOVSKAïA OBLAST;MARTYNOVSKIY:UNKNOWN:RU-MR4
+RUSSIA:ROSTOVSKAïA OBLAST;ZIMOVNIKOVSKIY:UNKNOWN:RU-ZMK
+RUSSIA:ROSTOVSKAïA OBLAST;BAGAYEVSKIY:UNKNOWN:RU-BGV
+RUSSIA:ROSTOVSKAïA OBLAST;ROSTOV-NA-DONY:UNKNOWN:RU-RSA
+RUSSIA:ROSTOVSKAïA OBLAST;VESELOVSKIY:UNKNOWN:RU-VSV
+RUSSIA:ROSTOVSKAïA OBLAST;TAGANROG:UNKNOWN:RU-TGN
+RUSSIA:ROSTOVSKAïA OBLAST;AZOVSKIY:UNKNOWN:RU-AZS
+RUSSIA:ROSTOVSKAïA OBLAST;PROLETARSKIY:UNKNOWN:RU-POR
+RUSSIA:ROSTOVSKAïA OBLAST;BATAYSK:UNKNOWN:RU-BTY
+RUSSIA:ROSTOVSKAïA OBLAST;ORLOVSKIY:UNKNOWN:RU-ORK
+RUSSIA:ROSTOVSKAïA OBLAST;AZOV:UNKNOWN:RU-AZV
+RUSSIA:ROSTOVSKAïA OBLAST;KAGALNITSKIY:UNKNOWN:RU-KGT
+RUSSIA:ROSTOVSKAïA OBLAST;ZERNOGRADSKIY:UNKNOWN:RU-ZRD
+RUSSIA:ROSTOVSKAïA OBLAST;SALSKIY:UNKNOWN:RU-SL2
+RUSSIA:ROSTOVSKAïA OBLAST;TSELINSKIY:UNKNOWN:RU-TSK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;SCHERBINOVSKIY:UNKNOWN:RU-SCO
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KUSCHEVSKIY:UNKNOWN:RU-KS5
+RUSSIA:ROSTOVSKAïA OBLAST;REMONTNENSKIY:UNKNOWN:RU-RMY
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;YEYSK:UNKNOWN:RU-YES
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;YEYSKIY:UNKNOWN:RU-YYK
+RUSSIA:ROSTOVSKAïA OBLAST;YEGORLYKSKIY:UNKNOWN:RU-YGY
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;STAROMINSKIY:UNKNOWN:RU-ST1
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KRYLOVSKIY:UNKNOWN:RU-KY2
+RUSSIA:ROSTOVSKAïA OBLAST;SALSK:UNKNOWN:RU-SA 
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;LENINGRADSKIY:UNKNOWN:RU-LND
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KANEVSKIY:UNKNOWN:RU-KN4
+RUSSIA:ROSTOVSKAïA OBLAST;PESCHANOKOPSKIY:UNKNOWN:RU-PSO
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;NOVOPOKROVSKIY:UNKNOWN:RU-NOR
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;BELOGLINSKIY:UNKNOWN:RU-BON
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;PAVLOVSKIY:UNKNOWN:RU-PVI
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;APANASENKOVSKIY:UNKNOWN:RU-APK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;PRIMORSKO-AKHTARSKIY:UNKNOWN:RU-PRT
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;IPATOVSKIY:UNKNOWN:RU-IPV
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TIKHORETSKIY:UNKNOWN:RU-TKT
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;BRYUKHOVETSKIY:UNKNOWN:RU-BYE
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;KRASNOGVARDEYSKIY:UNKNOWN:RU-KA8
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TIKHORETZK:UNKNOWN:RU-TKR
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;VYSELKOVSKIY:UNKNOWN:RU-VY2
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;TRUNOVSKIY:UNKNOWN:RU-TR7
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KORENOVSKIY:UNKNOWN:RU-KEK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KALININSKIY:UNKNOWN:RU-KIN
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;NOVOALEKSANDROVSKIY:UNKNOWN:RU-NON
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TIMASHEVSKIY:UNKNOWN:RU-TM 
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;SLAVYANSKIY:UNKNOWN:RU-SL3
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;TURKMENSKIY:UNKNOWN:RU-TR8
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KAVKAZSKIY:UNKNOWN:RU-KVZ
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;IZOBILNENSKIY:UNKNOWN:RU-IZN
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;ARZGIRZSKIY:UNKNOWN:RU-ARZ
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TBILISSKIY:UNKNOWN:RU-TBS
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;PETROVSKIY:UNKNOWN:RU-PT1
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KRASNOARMEYSKIY:UNKNOWN:RU-KA9
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KRASNODAR:UNKNOWN:RU-KAA
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KROPOTKIN:UNKNOWN:RU-KOT
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;GRACHEVSKIY:UNKNOWN:RU-GRY
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TEMRYUKSKIY:UNKNOWN:RU-TM1
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;UST-LABINSKIY:UNKNOWN:RU-UTN
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;LEVOKUMSKIY:UNKNOWN:RU-LVM
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;GULKEVICHSKIY:UNKNOWN:RU-GLC
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;DINSKIY:UNKNOWN:RU-DNY
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;BLAGODARNENSKIY:UNKNOWN:RU-BLE
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;SHPAKOVSKIY:UNKNOWN:RU-SP 
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;SLAVYANSK-NA-KUBANI:UNKNOWN:RU-SLA
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;NOVOKUBANSKIY:UNKNOWN:RU-NOS
+RUSSIA:RESPOUBLIKA ADYGEïA;KRASNOGVARDEYSKIY:UNKNOWN:RU-KSD
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KURGANINSKIY:UNKNOWN:RU-KGN
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;ANAPSKIY:UNKNOWN:RU-AN1
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;STAVROPOL:UNKNOWN:RU-STP
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KRYMSKIY:UNKNOWN:RU-KY3
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;ABINSKIY:UNKNOWN:RU-ABI
+RUSSIA:RESPOUBLIKA ADYGEïA;SHOVGENOVSKIY:UNKNOWN:RU-SOK
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;BUDENNOVSKIY:UNKNOWN:RU-BDV
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;ARMAVIR:UNKNOWN:RU-ARR
+RUSSIA:RESPOUBLIKA ADYGEïA;TAKHTAMUKAYSKIY:UNKNOWN:RU-TKK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;ANAPA:UNKNOWN:RU-ANP
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;SEVERSKIY:UNKNOWN:RU-SV7
+RUSSIA:RESPOUBLIKA ADYGEïA;KOSHEKHABLSKIY:UNKNOWN:RU-KSB
+RUSSIA:RESPOUBLIKA ADYGEïA;TEUCHEZHSKIY:UNKNOWN:RU-TUZ
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;USPENSKIY:UNKNOWN:RU-UPS
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;KOCHUBEYEVSKIY:UNKNOWN:RU-KCY
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;ALEKSANDROVSKIY:UNKNOWN:RU-AL5
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;NEFTEKUMSKIY:UNKNOWN:RU-NFM
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;ANDROPOVSKIY:UNKNOWN:RU-AN2
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;NOVOSELITSKIY:UNKNOWN:RU-NVT
+RUSSIA:DAGESTAN;NOGAYSKIY:UNKNOWN:RU-NGY
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;BELORECHNSKIY:UNKNOWN:RU-BOH
+RUSSIA:DAGESTAN;TARUMOVSKIY:UNKNOWN:RU-TR9
+RUSSIA:RESPOUBLIKA ADYGEïA;GIAGINSKIY:UNKNOWN:RU-GAN
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;NOVOROSSIYSK:UNKNOWN:RU-NOI
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;KRYMSK:UNKNOWN:RU-KYM
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;BUDENNOVSK:UNKNOWN:RU-BDO
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;GORYACHIY KLYUCH:UNKNOWN:RU-GR 
+RUSSIA:RESPOUBLIKA ADYGEïA;MAYKOPSKIY:UNKNOWN:RU-MYP
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;BELORECHENSK:UNKNOWN:RU-BOE
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;GELENDZHIK:UNKNOWN:RU-GLD
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;LABINSK:UNKNOWN:RU-LBS
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;LABINSKIY:UNKNOWN:RU-LBK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;MOSTOVSKIY:UNKNOWN:RU-MSK
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;NEVINNOMYSSK:UNKNOWN:RU-NVM
+RUSSIA:RESPOUBLIKA ADYGEïA;MAYKOP:UNKNOWN:RU-MAK
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;APSHERONSKIY:UNKNOWN:RU-APN
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;OTRADNENSKIY:UNKNOWN:RU-OTN
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;GEORGIYEVSKIY:UNKNOWN:RU-GOV
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;SOVETSKIY:UNKNOWN:RU-SV8
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;MINERALOVODSKIY:UNKNOWN:RU-MNO
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;STEPNOVSKIY:UNKNOWN:RU-ST2
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;ADYGE-KHABLSKIY:UNKNOWN:RU-ADB
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TUAPSINSKIY:UNKNOWN:RU-TAN
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;PRIKUBANSKIY:UNKNOWN:RU-PIN
+RUSSIA:DAGESTAN;KIZLYARSKIY:UNKNOWN:RU-KZY
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;PREDGORNYI:UNKNOWN:RU-PER
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;KURSKIY:UNKNOWN:RU-KS6
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;CHERKESSK:UNKNOWN:RU-CEK
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;KHABEZSKIY:UNKNOWN:RU-KHZ
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;MINERALNIYE VODY:UNKNOWN:RU-MNE
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;GEORGIYEVSK:UNKNOWN:RU-GOY
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;KIROVSKIY:UNKNOWN:RU-KO 
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;ZHELEZNOVODSK:UNKNOWN:RU-ZHO
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;UST-DZHEGUTINSKIY:UNKNOWN:RU-UTT
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;LERMONTOV:UNKNOWN:RU-LRN
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;ZELENCHUGSKIY:UNKNOWN:RU-ZLG
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;URUPSKIY:UNKNOWN:RU-URY
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;PYATIGORSK:UNKNOWN:RU-PYO
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;YESSENTUKI:UNKNOWN:RU-YSN
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;SOCHI:UNKNOWN:RU-SOH
+RUSSIA:KRASNODARSKI KRAï RéSIDUE;TUAPSE:UNKNOWN:RU-TUP
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;MALOKARACHAYEVSKIY:UNKNOWN:RU-MLA
+RUSSIA:TCHETCHENIA*;NAURSKIY:UNKNOWN:RU-NUS
+RUSSIA:KABARDINO-BALKARIA;PROKHLADNENSKIY:UNKNOWN:RU-PRE
+RUSSIA:STAVROPOLSKI KRAï RéSIDUE;KISLOVODSK:UNKNOWN:RU-KS7
+RUSSIA:TCHETCHENIA*;SHELKOVSKIY:UNKNOWN:RU-SEV
+RUSSIA:KABARDINO-BALKARIA;ZOLSKIY:UNKNOWN:RU-ZLK
+RUSSIA:DAGESTAN;MAKHACHKALA:UNKNOWN:RU-MKA
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;KARACHAYEVSKIY:UNKNOWN:RU-KCE
+RUSSIA:DAGESTAN;BABAYURTOVSKIY:UNKNOWN:RU-BBT
+RUSSIA:DAGESTAN;KIZLYAR:UNKNOWN:RU-KZA
+RUSSIA:KABARDINO-BALKARIA;BAKSANSKIY:UNKNOWN:RU-BKI
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;MOZDOKSKIY:UNKNOWN:RU-MZI
+RUSSIA:KARATCHAEVO-TCHERKESSKAïA;KARACHAYEVSK:UNKNOWN:RU-KCK
+RUSSIA:KABARDINO-BALKARIA;TERSKIY:UNKNOWN:RU-TSI
+RUSSIA:KABARDINO-BALKARIA;PROKHLADNYI:UNKNOWN:RU-PRD
+RUSSIA:KABARDINO-BALKARIA;MAYSKIY:UNKNOWN:RU-MYI
+RUSSIA:TCHETCHENIA*;NADTERECHNYI:UNKNOWN:RU-NDC
+RUSSIA:KABARDINO-BALKARIA;URVANSKIY:UNKNOWN:RU-UR 
+RUSSIA:KABARDINO-BALKARIA;CHEGEMSKIY:UNKNOWN:RU-CEM
+RUSSIA:INGOUCHETIA*;MALGOBEKSKIY:UNKNOWN:RU-ML1
+RUSSIA:TCHETCHENIA*;GROZNENSKIY:UNKNOWN:RU-GR1
+RUSSIA:DAGESTAN;KHASAVYURTOVSKIY:UNKNOWN:RU-KAT
+RUSSIA:INGOUCHETIA*;SUNZHENSKIY:UNKNOWN:RU-SNN
+RUSSIA:KABARDINO-BALKARIA;SOVETSKIY:UNKNOWN:RU-SV9
+RUSSIA:INGOUCHETIA*;MALGOBEK:UNKNOWN:RU-MLB
+RUSSIA:TCHETCHENIA*;GUDERMESSKIY:UNKNOWN:RU-GDK
+RUSSIA:KABARDINO-BALKARIA;TYRNYAUZ:UNKNOWN:RU-TYY
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;KIROVSKIY:UNKNOWN:RU-KO1
+RUSSIA:TCHETCHENIA*;GROZNYI:UNKNOWN:RU-GR2
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;PRAVOBEREZHNYI:UNKNOWN:RU-PAR
+RUSSIA:INGOUCHETIA*;NAZRANOVSKIY:UNKNOWN:RU-NZY
+RUSSIA:DAGESTAN;KIZILYURTOVSKIY:UNKNOWN:RU-KZT
+RUSSIA:TCHETCHENIA*;ACHKHOY-MARTANOVSKIY:UNKNOWN:RU-ACR
+RUSSIA:TCHETCHENIA*;GUDERMES:UNKNOWN:RU-GDR
+RUSSIA:TCHETCHENIA*;SHALINSKIY:UNKNOWN:RU-SAI
+RUSSIA:TCHETCHENIA*;ARGUN:UNKNOWN:RU-AR 
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;PRIGORODNYI:UNKNOWN:RU-PID
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;IRAFSKIY:UNKNOWN:RU-IRI
+RUSSIA:DAGESTAN;KHASAVYURT:UNKNOWN:RU-KHU
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;DIGORSKIY:UNKNOWN:RU-DGS
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;ARDONSKIY:UNKNOWN:RU-AR1
+RUSSIA:DAGESTAN;NOVOLAKSKIY:UNKNOWN:RU-NOK
+RUSSIA:DAGESTAN;KIZILYURT:UNKNOWN:RU-KZU
+RUSSIA:TCHETCHENIA*;URUS-MARTANOVSKIY:UNKNOWN:RU-URN
+RUSSIA:TCHETCHENIA*;NOZHAY-YURTOVSKIY:UNKNOWN:RU-NZT
+RUSSIA:DAGESTAN;KAZBEKOVSKIY:UNKNOWN:RU-KZ 
+RUSSIA:TCHETCHENIA*;SHALI:UNKNOWN:RU-SAL
+RUSSIA:TCHETCHENIA*;URUS-MARTAN:UNKNOWN:RU-URR
+RUSSIA:DAGESTAN;BUYNAKSKIY:UNKNOWN:RU-BYS
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;VLADIKAVKAZ:UNKNOWN:RU-VLA
+RUSSIA:SEVERO-OSETINSKAïA RESPOU;ALAGIRSKIY:UNKNOWN:RU-AL6
+RUSSIA:TCHETCHENIA*;VEDENSKIY:UNKNOWN:RU-VDI
+RUSSIA:TCHETCHENIA*;SHATOYSKIY:UNKNOWN:RU-SAY
+RUSSIA:DAGESTAN;KASPIYSK:UNKNOWN:RU-KS8
+RUSSIA:DAGESTAN;GUMBETOVSKIY:UNKNOWN:RU-GMV
+RUSSIA:DAGESTAN;BOTLIKHSKIY:UNKNOWN:RU-BTH
+RUSSIA:DAGESTAN;LENINSKIY:UNKNOWN:RU-LN2
+RUSSIA:TCHETCHENIA*;ITUM-KALINSKIY:UNKNOWN:RU-ITL
+RUSSIA:DAGESTAN;UNTSUKULSKIY:UNKNOWN:RU-UNL
+RUSSIA:DAGESTAN;BUYNAKSK:UNKNOWN:RU-BY 
+RUSSIA:DAGESTAN;KHUNZAKHSKIY:UNKNOWN:RU-KUK
+RUSSIA:DAGESTAN;AKHVAKHSKIY:UNKNOWN:RU-AKH
+RUSSIA:DAGESTAN;TSUMADINSKIY:UNKNOWN:RU-TSY
+RUSSIA:DAGESTAN;KAYAKENTSKIY:UNKNOWN:RU-KYT
+RUSSIA:DAGESTAN;LEVASHINSKIY:UNKNOWN:RU-LVN
+RUSSIA:DAGESTAN;GERGEBILSKIY:UNKNOWN:RU-GRL
+RUSSIA:DAGESTAN;IZBERBASH:UNKNOWN:RU-IZB
+RUSSIA:DAGESTAN;SOVETSKIY:UNKNOWN:RU-SES
+RUSSIA:DAGESTAN;GUNIBSKIY:UNKNOWN:RU-GNS
+RUSSIA:DAGESTAN;SERGOKALINSKIY:UNKNOWN:RU-SR3
+RUSSIA:DAGESTAN;TSUNTINSKIY:UNKNOWN:RU-TS 
+RUSSIA:DAGESTAN;AKUSHINSKIY:UNKNOWN:RU-AKK
+RUSSIA:DAGESTAN;TLYARATINSKIY:UNKNOWN:RU-TLN
+RUSSIA:DAGESTAN;CHARODINSKIY:UNKNOWN:RU-CAN
+RUSSIA:DAGESTAN;DERBENTSKIY:UNKNOWN:RU-DRT
+RUSSIA:DAGESTAN;LAKSKIY:UNKNOWN:RU-LKI
+RUSSIA:DAGESTAN;KAYTAGSKIY:UNKNOWN:RU-KYG
+RUSSIA:DAGESTAN;DAKHADAYEVSKIY:UNKNOWN:RU-DKY
+RUSSIA:DAGESTAN;KULINSKIY:UNKNOWN:RU-KIK
+RUSSIA:DAGESTAN;DERBENT:UNKNOWN:RU-DRN
+RUSSIA:DAGESTAN;DAGESTANSKIYE OGNI:UNKNOWN:RU-DGK
+RUSSIA:DAGESTAN;TABASARANSKIY:UNKNOWN:RU-TBN
+RUSSIA:DAGESTAN;AGULSKIY:UNKNOWN:RU-AGK
+RUSSIA:DAGESTAN;RUTULSKIY:UNKNOWN:RU-RTS
+RUSSIA:DAGESTAN;MAGARAMKENTSKIY:UNKNOWN:RU-MGT
+RUSSIA:DAGESTAN;KHIVSKIY:UNKNOWN:RU-KIY
+RUSSIA:DAGESTAN;SULEYMAN-STALSKIY:UNKNOWN:RU-SLL
+RUSSIA:DAGESTAN;KURAKHSKIY:UNKNOWN:RU-KKH
+RUSSIA:DAGESTAN;AKHTYNSKIY:UNKNOWN:RU-AKI
+RUSSIA:SVERDLOVSKAïA OBLAST;IVDEL:UNKNOWN:RU-IVL
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KRASNOVISHERSKIY:UNKNOWN:RU-KSH
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHERDYNSKIY:UNKNOWN:RU-CEN
+RUSSIA:KOMI-PERMIATSKI NATIONAL;GAYNSKIY:UNKNOWN:RU-GYS
+RUSSIA:SVERDLOVSKAïA OBLAST;SEVEROURALSK:UNKNOWN:RU-SER
+RUSSIA:SVERDLOVSKAïA OBLAST;GARINSKIY:UNKNOWN:RU-GR3
+RUSSIA:KOMI-PERMIATSKI NATIONAL;KOSINSKIY:UNKNOWN:RU-KS9
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;SOLIKAMSKIY:UNKNOWN:RU-SLM
+RUSSIA:SVERDLOVSKAïA OBLAST;KARPINSK:UNKNOWN:RU-KPS
+RUSSIA:SVERDLOVSKAïA OBLAST;SEROVSKIY:UNKNOWN:RU-SR4
+RUSSIA:KOMI-PERMIATSKI NATIONAL;KOCHEVSKIY:UNKNOWN:RU-KCI
+RUSSIA:SVERDLOVSKAïA OBLAST;KRASNOTURINSK:UNKNOWN:RU-KN5
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;ALEKSANDROVSK:UNKNOWN:RU-ALD
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;USOLSKIY:UNKNOWN:RU-UOS
+RUSSIA:KOMI-PERMIATSKI NATIONAL;YURLINSKIY:UNKNOWN:RU-YR2
+RUSSIA:SVERDLOVSKAïA OBLAST;SEROV:UNKNOWN:RU-SE 
+RUSSIA:SVERDLOVSKAïA OBLAST;NOVOLYALINSKIY:UNKNOWN:RU-NOL
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;SOLIKAMSK:UNKNOWN:RU-SL4
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;BEREZNIKI:UNKNOWN:RU-BEN
+RUSSIA:KOMI-PERMIATSKI NATIONAL;KUDYMKARSKIY:UNKNOWN:RU-KDR
+RUSSIA:SVERDLOVSKAïA OBLAST;TABORINSKIY:UNKNOWN:RU-TBK
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KIZEL:UNKNOWN:RU-KIL
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;GORNOZAVODSKIY:UNKNOWN:RU-GRO
+RUSSIA:KOMI-PERMIATSKI NATIONAL;YUSVINSKIY:UNKNOWN:RU-YSK
+RUSSIA:KOMI-PERMIATSKI NATIONAL;KUDYMKAR:UNKNOWN:RU-KDM
+RUSSIA:SVERDLOVSKAïA OBLAST;ALAPAYEVSKIY:UNKNOWN:RU-AL7
+RUSSIA:SVERDLOVSKAïA OBLAST;VERKHOTURSKIY:UNKNOWN:RU-VR3
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;DOBRYANSKIY:UNKNOWN:RU-DB 
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;GREMYACHINSK:UNKNOWN:RU-GRC
+RUSSIA:SVERDLOVSKAïA OBLAST;NIZHNYAYA TURA:UNKNOWN:RU-NZA
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;GUBAKHA:UNKNOWN:RU-GBK
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;ILYINSKIY:UNKNOWN:RU-ILI
+RUSSIA:SVERDLOVSKAïA OBLAST;KACHKANAR:UNKNOWN:RU-KCN
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KARAGAYSKIY:UNKNOWN:RU-KGY
+RUSSIA:SVERDLOVSKAïA OBLAST;TURINSKIY:UNKNOWN:RU-TIS
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHUSOVSKOY:UNKNOWN:RU-CUK
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;SIVINSKIY:UNKNOWN:RU-SIK
+RUSSIA:SVERDLOVSKAïA OBLAST;TAVDINSKIY:UNKNOWN:RU-TVN
+RUSSIA:SVERDLOVSKAïA OBLAST;KUSHVA:UNKNOWN:RU-KUH
+RUSSIA:SVERDLOVSKAïA OBLAST;KRASNOURALSK:UNKNOWN:RU-KSL
+RUSSIA:OUDMOURTIA;GLAZOVSKIY:UNKNOWN:RU-GLI
+RUSSIA:OUDMOURTIA;BALEZINSKIY:UNKNOWN:RU-BES
+RUSSIA:SVERDLOVSKAïA OBLAST;VERKHNESALDINSKIY:UNKNOWN:RU-VR4
+RUSSIA:OUDMOURTIA;YARSKIY:UNKNOWN:RU-YR3
+RUSSIA:OUDMOURTIA;KEZSKIY:UNKNOWN:RU-KZ1
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;NYTVENSKIY:UNKNOWN:RU-NYS
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KRASNOKAMSK:UNKNOWN:RU-KN6
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHUSOVOY:UNKNOWN:RU-CUO
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;VERESCHAGINSKIY:UNKNOWN:RU-VRG
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;LYSVENSKIY:UNKNOWN:RU-LYY
+RUSSIA:SVERDLOVSKAïA OBLAST;PRIGORODNYI:UNKNOWN:RU-PIY
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;PERM:UNKNOWN:RU-PEM
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;PERMSKIY:UNKNOWN:RU-PMS
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;LYSVA:UNKNOWN:RU-LYA
+RUSSIA:SVERDLOVSKAïA OBLAST;NIZHNIAYA SALDA:UNKNOWN:RU-NZ 
+RUSSIA:OUDMOURTIA;YUKAMENSKIY:UNKNOWN:RU-YKN
+RUSSIA:OUDMOURTIA;GLAZOV:UNKNOWN:RU-GLZ
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;OCHERSKIY:UNKNOWN:RU-OCS
+RUSSIA:SVERDLOVSKAïA OBLAST;VERKHNIAYA SALDA:UNKNOWN:RU-VRA
+RUSSIA:SVERDLOVSKAïA OBLAST;IRBITSKIY:UNKNOWN:RU-IRY
+RUSSIA:SVERDLOVSKAïA OBLAST;TAVDA:UNKNOWN:RU-TAD
+RUSSIA:SVERDLOVSKAïA OBLAST;NIZHNIY TAGIL:UNKNOWN:RU-NZ1
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KUNGURSKIY:UNKNOWN:RU-KN7
+RUSSIA:SVERDLOVSKAïA OBLAST;ALAPAYEVSK:UNKNOWN:RU-AL8
+RUSSIA:SVERDLOVSKAïA OBLAST;SLOBODO-TURINSKIY:UNKNOWN:RU-SL5
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;OKHANSKIY:UNKNOWN:RU-OK4
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;BERYOZOVSKIY:UNKNOWN:RU-BYY
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;BOLSHESOSNOVSKIY:UNKNOWN:RU-BSS
+RUSSIA:OUDMOURTIA;KRASNOGORSKIY:UNKNOWN:RU-KN8
+RUSSIA:SVERDLOVSKAïA OBLAST;BAYKALOVSKIY:UNKNOWN:RU-BY1
+RUSSIA:OUDMOURTIA;DEBESSKIY:UNKNOWN:RU-DB1
+RUSSIA:SVERDLOVSKAïA OBLAST;NEVYANSKIY:UNKNOWN:RU-NYI
+RUSSIA:OUDMOURTIA;IGRINSKIY:UNKNOWN:RU-IGS
+RUSSIA:SVERDLOVSKAïA OBLAST;SHALINSKIY:UNKNOWN:RU-SA1
+RUSSIA:SVERDLOVSKAïA OBLAST;REZHEVSKIY:UNKNOWN:RU-RZY
+RUSSIA:SVERDLOVSKAïA OBLAST;KIROVGRAD:UNKNOWN:RU-KOG
+RUSSIA:SVERDLOVSKAïA OBLAST;ARTYEMOVSKIY:UNKNOWN:RU-AR2
+RUSSIA:SVERDLOVSKAïA OBLAST;IRBIT:UNKNOWN:RU-IR 
+RUSSIA:SVERDLOVSKAïA OBLAST;NEVYANSK:UNKNOWN:RU-NY 
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;OSINSKY:UNKNOWN:RU-OSY
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHASTINSKIY:UNKNOWN:RU-CAS
+RUSSIA:OUDMOURTIA;SELTINSKIY:UNKNOWN:RU-SL6
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KISHERTSKIY:UNKNOWN:RU-KST
+RUSSIA:OUDMOURTIA;SHARKANSKIY:UNKNOWN:RU-SA2
+RUSSIA:OUDMOURTIA;SYUMSINSKIY:UNKNOWN:RU-SY1
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KUNGUR:UNKNOWN:RU-KUG
+RUSSIA:SVERDLOVSKAïA OBLAST;REZSH:UNKNOWN:RU-RES
+RUSSIA:SVERDLOVSKAïA OBLAST;TUGULYMSKIY:UNKNOWN:RU-TGK
+RUSSIA:SVERDLOVSKAïA OBLAST;ARTYOMOVSKIY:UNKNOWN:RU-AR3
+RUSSIA:OUDMOURTIA;YAKSHUR-BODYINSKIY:UNKNOWN:RU-YKD
+RUSSIA:SVERDLOVSKAïA OBLAST;PERVOURALSK:UNKNOWN:RU-PVL
+RUSSIA:SVERDLOVSKAïA OBLAST;VERKHNYAY PYSHMA:UNKNOWN:RU-VRP
+RUSSIA:SVERDLOVSKAïA OBLAST;TALITSKIY:UNKNOWN:RU-TLI
+RUSSIA:SVERDLOVSKAïA OBLAST;PYSHMINSKIY:UNKNOWN:RU-PYN
+RUSSIA:OUDMOURTIA;UVINSKIY:UNKNOWN:RU-UVS
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;SUKSUNSKIY:UNKNOWN:RU-SKI
+RUSSIA:OUDMOURTIA;VOTKINSKIY:UNKNOWN:RU-VTN
+RUSSIA:SVERDLOVSKAïA OBLAST;ASBEST:UNKNOWN:RU-AST
+RUSSIA:SVERDLOVSKAïA OBLAST;KAMYSHLOVSKIY:UNKNOWN:RU-KM6
+RUSSIA:SVERDLOVSKAïA OBLAST;BEREZOVSKIY:UNKNOWN:RU-BEV
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;ORDINSKY:UNKNOWN:RU-ORY
+RUSSIA:SVERDLOVSKAïA OBLAST;SUKHOLOZHSKIY:UNKNOWN:RU-SKH
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;BARDYMSKIY:UNKNOWN:RU-BDM
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;YELOVSKIY:UNKNOWN:RU-YLY
+RUSSIA:SVERDLOVSKAïA OBLAST;NIZHNESERGINSKIY:UNKNOWN:RU-NZ2
+RUSSIA:SVERDLOVSKAïA OBLAST;ACHITSKIY:UNKNOWN:RU-ACK
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;UINSKIY:UNKNOWN:RU-UNI
+RUSSIA:OUDMOURTIA;ZAVYALOVSKIY:UNKNOWN:RU-ZVK
+RUSSIA:OUDMOURTIA;VOTKINSK:UNKNOWN:RU-VTS
+RUSSIA:SVERDLOVSKAïA OBLAST;YEKATERINBURG:UNKNOWN:RU-YKB
+RUSSIA:OUDMOURTIA;VAVOZHSKIY:UNKNOWN:RU-VVH
+RUSSIA:OUDMOURTIA;IZHEVSK:UNKNOWN:RU-IZ 
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHAYKOVSKIY:UNKNOWN:RU-CAV
+RUSSIA:SVERDLOVSKAïA OBLAST;BELOYARSKIY:UNKNOWN:RU-BOS
+RUSSIA:SVERDLOVSKAïA OBLAST;SUKHOY LOG:UNKNOWN:RU-SKY
+RUSSIA:SVERDLOVSKAïA OBLAST;KRASNOUFIMSKIY:UNKNOWN:RU-KRF
+RUSSIA:SVERDLOVSKAïA OBLAST;BOGDANOVICHSKIY:UNKNOWN:RU-BGC
+RUSSIA:SVERDLOVSKAïA OBLAST;KAMYSHLOV:UNKNOWN:RU-KMO
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;OKTYABRSKIY:UNKNOWN:RU-OK5
+RUSSIA:SVERDLOVSKAïA OBLAST;ZARECHNY:UNKNOWN:RU-ZRC
+RUSSIA:SVERDLOVSKAïA OBLAST;REVDA:UNKNOWN:RU-RED
+RUSSIA:SVERDLOVSKAïA OBLAST;BOGDANOVICH:UNKNOWN:RU-BGH
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;KUYEDINSKIY:UNKNOWN:RU-KY4
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHERNUSHINSKIY:UNKNOWN:RU-CEH
+RUSSIA:KOURGANSKAïA OBLAST;SHATROVSKIY:UNKNOWN:RU-SA3
+RUSSIA:OUDMOURTIA;KIZNERSKIY:UNKNOWN:RU-KZ2
+RUSSIA:PERMSKAïA OBLAST RéSIDUEL;CHAYKOVSKY:UNKNOWN:RU-CAK
+RUSSIA:OUDMOURTIA;MALOPURGINSKIY:UNKNOWN:RU-MLG
+RUSSIA:SVERDLOVSKAïA OBLAST;SYSERTSKIY:UNKNOWN:RU-SYT
+RUSSIA:SVERDLOVSKAïA OBLAST;ARTINSKIY:UNKNOWN:RU-AR4
+RUSSIA:OUDMOURTIA;MOZHGINSKIY:UNKNOWN:RU-MZ1
+RUSSIA:OUDMOURTIA;SARAPULSKIY:UNKNOWN:RU-SR5
+RUSSIA:SVERDLOVSKAïA OBLAST;POLEVSKOY:UNKNOWN:RU-PLO
+RUSSIA:SVERDLOVSKAïA OBLAST;KAMENSKIY:UNKNOWN:RU-KM7
+RUSSIA:KOURGANSKAïA OBLAST;DALMATOVSKIY:UNKNOWN:RU-DLV
+RUSSIA:KOURGANSKAïA OBLAST;KATAYSKIY:UNKNOWN:RU-KTK
+RUSSIA:SVERDLOVSKAïA OBLAST;KAMENSK-URALSKIY:UNKNOWN:RU-KMU
+RUSSIA:OUDMOURTIA;SARAPUL:UNKNOWN:RU-SRU
+RUSSIA:KOURGANSKAïA OBLAST;SHADRINSKIY:UNKNOWN:RU-SA4
+RUSSIA:BACHKIRIA;YANAULSKIY:UNKNOWN:RU-YNL
+RUSSIA:OUDMOURTIA;KAMBARSKIY:UNKNOWN:RU-KMR
+RUSSIA:OUDMOURTIA;KIYASOVSKIY:UNKNOWN:RU-KY5
+RUSSIA:OUDMOURTIA;MOGZSHA:UNKNOWN:RU-MGA
+RUSSIA:BACHKIRIA;TATYSHLINSKIY:UNKNOWN:RU-TTI
+RUSSIA:BACHKIRIA;ASKINSKIY:UNKNOWN:RU-ASK
+RUSSIA:OUDMOURTIA;ALNASHSKIY:UNKNOWN:RU-AL9
+RUSSIA:TCHELIABINSKAïA OBLAST;KASLINSKIY:UNKNOWN:RU-KI1
+RUSSIA:TCHELIABINSKAïA OBLAST;NYAZEPETROVSKSKIY:UNKNOWN:RU-NYV
+RUSSIA:BACHKIRIA;YANAUL:UNKNOWN:RU-YAU
+RUSSIA:KOURGANSKAïA OBLAST;BELOZERSKIY:UNKNOWN:RU-BOK
+RUSSIA:TCHELIABINSKAïA OBLAST;KUNASHAKSKIY:UNKNOWN:RU-KN9
+RUSSIA:BACHKIRIA;KRASNOKAMSKIY:UNKNOWN:RU-KOM
+RUSSIA:OUDMOURTIA;GRAKHOVSKIY:UNKNOWN:RU-GR4
+RUSSIA:OUDMOURTIA;KARAKULINSKIY:UNKNOWN:RU-KKS
+RUSSIA:TCHELIABINSKAïA OBLAST;VERKHNIY UFALEY:UNKNOWN:RU-VRF
+RUSSIA:BACHKIRIA;BALTACHEVSKIY:UNKNOWN:RU-BTI
+RUSSIA:KOURGANSKAïA OBLAST;KARGAPOLSKIY:UNKNOWN:RU-KGL
+RUSSIA:BACHKIRIA;BELOKATAYSKIY:UNKNOWN:RU-BOY
+RUSSIA:KOURGANSKAïA OBLAST;SHADRINSK:UNKNOWN:RU-SA5
+RUSSIA:BACHKIRIA;KALTASINSKIY:UNKNOWN:RU-KTI
+RUSSIA:BACHKIRIA;KARAIDELSKIY:UNKNOWN:RU-KI2
+RUSSIA:BACHKIRIA;MECHETLINSKIY:UNKNOWN:RU-MCS
+RUSSIA:BACHKIRIA;DUVANSKIY:UNKNOWN:RU-DVS
+RUSSIA:BACHKIRIA;NEFTEKAMSK:UNKNOWN:RU-NFK
+RUSSIA:BACHKIRIA;BURAYEVSKIY:UNKNOWN:RU-BAS
+RUSSIA:KOURGANSKAïA OBLAST;VARGASHINSKIY:UNKNOWN:RU-VR5
+RUSSIA:KOURGANSKAïA OBLAST;MOKROUSOVSKIY:UNKNOWN:RU-MK 
+RUSSIA:TCHELIABINSKAïA OBLAST;KRASNOARMEYSKIY:UNKNOWN:RU-KSE
+RUSSIA:TCHELIABINSKAïA OBLAST;KASLI:UNKNOWN:RU-K1
+RUSSIA:TCHELIABINSKAïA OBLAST;KYSHTYM:UNKNOWN:RU-KY6
+RUSSIA:KOURGANSKAïA OBLAST;MISHKINSKIY:UNKNOWN:RU-MSI
+RUSSIA:BACHKIRIA;MISHKINSKIY:UNKNOWN:RU-MSY
+RUSSIA:KOURGANSKAïA OBLAST;SCHUCHANSKIY:UNKNOWN:RU-SCY
+RUSSIA:KOURGANSKAïA OBLAST;SHUMIKHINSKIY:UNKNOWN:RU-SUN
+RUSSIA:BACHKIRIA;ILISHEVSKIY:UNKNOWN:RU-ILV
+RUSSIA:KOURGANSKAïA OBLAST;KETOVSKIY:UNKNOWN:RU-KTY
+RUSSIA:BACHKIRIA;DYURTYULINSKIY:UNKNOWN:RU-DYL
+RUSSIA:TCHELIABINSKAïA OBLAST;ARGAYASHSKIY:UNKNOWN:RU-AR5
+RUSSIA:KOURGANSKAïA OBLAST;CHASTOOZERSKIY:UNKNOWN:RU-CHZ
+RUSSIA:BACHKIRIA;KIGINSKIY:UNKNOWN:RU-KGS
+RUSSIA:TCHELIABINSKAïA OBLAST;KARABASH:UNKNOWN:RU-KAB
+RUSSIA:KOURGANSKAïA OBLAST;YURGAMYSHSKIY:UNKNOWN:RU-YRH
+RUSSIA:TCHELIABINSKAïA OBLAST;SOSNOVSKIY:UNKNOWN:RU-SS1
+RUSSIA:BACHKIRIA;NURIMANOVSKIY:UNKNOWN:RU-NRV
+RUSSIA:BACHKIRIA;BIRSKIY:UNKNOWN:RU-BSI
+RUSSIA:KOURGANSKAïA OBLAST;LEBYAZHYEVSKIY:UNKNOWN:RU-LBY
+RUSSIA:TCHELIABINSKAïA OBLAST;KUSINSKIY:UNKNOWN:RU-KI3
+RUSSIA:BACHKIRIA;SALAVATSKIY:UNKNOWN:RU-SL7
+RUSSIA:BACHKIRIA;BLAGOVESHCHENSKIY:UNKNOWN:RU-BAC
+RUSSIA:KOURGANSKAïA OBLAST;MAKUSHINSKIY:UNKNOWN:RU-MKN
+RUSSIA:BACHKIRIA;DYURTULI:UNKNOWN:RU-DYT
+RUSSIA:KOURGANSKAïA OBLAST;KURGAN:UNKNOWN:RU-KUA
+RUSSIA:TCHELIABINSKAïA OBLAST;MIASS:UNKNOWN:RU-MIS
+RUSSIA:TCHELIABINSKAïA OBLAST;ZLATOUST:UNKNOWN:RU-ZLU
+RUSSIA:BACHKIRIA;BIRSK:UNKNOWN:RU-BIS
+RUSSIA:KOURGANSKAïA OBLAST;PETUKHOVSKIY:UNKNOWN:RU-PT2
+RUSSIA:BACHKIRIA;BAKALINSKIY:UNKNOWN:RU-BKY
+RUSSIA:BACHKIRIA;CHEKMAGUSHEVSKIY:UNKNOWN:RU-CEE
+RUSSIA:TCHELIABINSKAïA OBLAST;CHELYABINSK:UNKNOWN:RU-CHB
+RUSSIA:TCHELIABINSKAïA OBLAST;SATKINSKIY:UNKNOWN:RU-ST3
+RUSSIA:TCHELIABINSKAïA OBLAST;ASHYNSKIY:UNKNOWN:RU-ASI
+RUSSIA:BACHKIRIA;KUSHNARENKOVSKIY:UNKNOWN:RU-KEN
+RUSSIA:TCHELIABINSKAïA OBLAST;KOPEYSK:UNKNOWN:RU-KPY
+RUSSIA:BACHKIRIA;IGLINSKIY:UNKNOWN:RU-IGK
+RUSSIA:KOURGANSKAïA OBLAST;PRITOBOLNYI:UNKNOWN:RU-PIL
+RUSSIA:TCHELIABINSKAïA OBLAST;CHEBARKULSKIY:UNKNOWN:RU-CEL
+RUSSIA:KOURGANSKAïA OBLAST;SAFAKULEVSKIY:UNKNOWN:RU-SFS
+RUSSIA:TCHELIABINSKAïA OBLAST;KATAYEV-IVANOVSKIY:UNKNOWN:RU-KTA
+RUSSIA:KOURGANSKAïA OBLAST;KURTAMYSHSKIY:UNKNOWN:RU-KTH
+RUSSIA:KOURGANSKAïA OBLAST;POLOVINSKIY:UNKNOWN:RU-PL1
+RUSSIA:KOURGANSKAïA OBLAST;ALMENEVSKIY:UNKNOWN:RU-AMV
+RUSSIA:TCHELIABINSKAïA OBLAST;YETKULSKIY:UNKNOWN:RU-YTL
+RUSSIA:BACHKIRIA;BLAGOVESHCHENSK:UNKNOWN:RU-BAE
+RUSSIA:TCHELIABINSKAïA OBLAST;SATKA:UNKNOWN:RU-SA6
+RUSSIA:BACHKIRIA;SHARANSKIY:UNKNOWN:RU-SA7
+RUSSIA:TCHELIABINSKAïA OBLAST;ASHA:UNKNOWN:RU-ASH
+RUSSIA:BACHKIRIA;UFIMSKIY:UNKNOWN:RU-UFS
+RUSSIA:TCHELIABINSKAïA OBLAST;CHEBARKUL':UNKNOWN:RU-CHU
+RUSSIA:BACHKIRIA;BLAGOVARSKIY:UNKNOWN:RU-BAR
+RUSSIA:TCHELIABINSKAïA OBLAST;KORKINO:UNKNOWN:RU-KKO
+RUSSIA:TCHELIABINSKAïA OBLAST;UST-KATAYEV:UNKNOWN:RU-USV
+RUSSIA:BACHKIRIA;UCHALY:UNKNOWN:RU-UCL
+RUSSIA:BACHKIRIA;BUZDYAKSKIY:UNKNOWN:RU-BZI
+RUSSIA:BACHKIRIA;UFA:UNKNOWN:RU-UFA
+RUSSIA:BACHKIRIA;CHISHMINSKIY:UNKNOWN:RU-CIN
+RUSSIA:BACHKIRIA;ARKHANGELSKIY:UNKNOWN:RU-ARL
+RUSSIA:TCHELIABINSKAïA OBLAST;YEMANZHELINSK:UNKNOWN:RU-YML
+RUSSIA:KOURGANSKAïA OBLAST;TSELINNYI:UNKNOWN:RU-TS1
+RUSSIA:BACHKIRIA;TUYMAZINSKIY:UNKNOWN:RU-TY 
+RUSSIA:TCHELIABINSKAïA OBLAST;UVELSKIY:UNKNOWN:RU-UVK
+RUSSIA:TCHELIABINSKAïA OBLAST;KATAYEV-IVANOVSK:UNKNOWN:RU-KTO
+RUSSIA:BACHKIRIA;BELORETSKIY:UNKNOWN:RU-BOI
+RUSSIA:KOURGANSKAïA OBLAST;ZVERINOGOLOVSKY:UNKNOWN:RU-ZVL
+RUSSIA:TCHELIABINSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OK6
+RUSSIA:TCHELIABINSKAïA OBLAST;UYSKIY:UNKNOWN:RU-UYK
+RUSSIA:BACHKIRIA;KARMASKALINSKIY:UNKNOWN:RU-KM8
+RUSSIA:BACHKIRIA;TUYMAZY:UNKNOWN:RU-TYZ
+RUSSIA:TCHELIABINSKAïA OBLAST;PLAST:UNKNOWN:RU-PL2
+RUSSIA:BACHKIRIA;OKTYABRSKIY:UNKNOWN:RU-OK7
+RUSSIA:TCHELIABINSKAïA OBLAST;YUZHNO-URALSK:UNKNOWN:RU-YZU
+RUSSIA:TCHELIABINSKAïA OBLAST;TROITSKIY:UNKNOWN:RU-TOS
+RUSSIA:BACHKIRIA;BELEBEYEVSKIY:UNKNOWN:RU-BEK
+RUSSIA:BACHKIRIA;DAVLEKANOVSKIY:UNKNOWN:RU-DVN
+RUSSIA:ORENBOURGSKAïA OBLAST;SEVERNYI:UNKNOWN:RU-SEN
+RUSSIA:BACHKIRIA;GAFURIYSKIY:UNKNOWN:RU-GFY
+RUSSIA:BACHKIRIA;YERMEKEYEVSKIY:UNKNOWN:RU-YR4
+RUSSIA:BACHKIRIA;AURGAZINSKIY:UNKNOWN:RU-AR6
+RUSSIA:BACHKIRIA;ALSHEYEVSKIY:UNKNOWN:RU-ASV
+RUSSIA:BACHKIRIA;DAVLEKANOVO:UNKNOWN:RU-DVO
+RUSSIA:TCHELIABINSKAïA OBLAST;VERKHNEURALSKIY:UNKNOWN:RU-VR6
+RUSSIA:TCHELIABINSKAïA OBLAST;TROITSK:UNKNOWN:RU-TOT
+RUSSIA:BACHKIRIA;BELEBEY:UNKNOWN:RU-BLB
+RUSSIA:ORENBOURGSKAïA OBLAST;ABDULINSKIY:UNKNOWN:RU-ABN
+RUSSIA:BACHKIRIA;BELORETSK:UNKNOWN:RU-BO 
+RUSSIA:ORENBOURGSKAïA OBLAST;BUGURUSLANSKIY:UNKNOWN:RU-BGA
+RUSSIA:BACHKIRIA;ABZELILOVSKIY:UNKNOWN:RU-ABV
+RUSSIA:BACHKIRIA;BIZHBULYAKSKIY:UNKNOWN:RU-BZY
+RUSSIA:BACHKIRIA;STERLITAMAKSKIY:UNKNOWN:RU-STM
+RUSSIA:TCHELIABINSKAïA OBLAST;NAGAYBAKSKIY:UNKNOWN:RU-NG 
+RUSSIA:TCHELIABINSKAïA OBLAST;CHESMENSKIY:UNKNOWN:RU-CEI
+RUSSIA:BACHKIRIA;MIYAKINSKIY:UNKNOWN:RU-MYY
+RUSSIA:BACHKIRIA;ISHIMBAYSKY:UNKNOWN:RU-ISY
+RUSSIA:ORENBOURGSKAïA OBLAST;ASEKEYEVSKIY:UNKNOWN:RU-ASY
+RUSSIA:TCHELIABINSKAïA OBLAST;AGAPOVSKIY:UNKNOWN:RU-AGV
+RUSSIA:ORENBOURGSKAïA OBLAST;BUGURUSLAN:UNKNOWN:RU-BG1
+RUSSIA:BACHKIRIA;STERLITAMAK:UNKNOWN:RU-ST4
+RUSSIA:BACHKIRIA;STERLIBASHEVSKIY:UNKNOWN:RU-STH
+RUSSIA:TCHELIABINSKAïA OBLAST;VARNENSKIY:UNKNOWN:RU-VR7
+RUSSIA:ORENBOURGSKAïA OBLAST;ABDULINO:UNKNOWN:RU-ABL
+RUSSIA:ORENBOURGSKAïA OBLAST;MATVEYEVSKIY:UNKNOWN:RU-MTV
+RUSSIA:BACHKIRIA;BURZYANSKIY:UNKNOWN:RU-BZN
+RUSSIA:BACHKIRIA;ISHIMBAY:UNKNOWN:RU-ISM
+RUSSIA:TCHELIABINSKAïA OBLAST;MAGNITOGORSK:UNKNOWN:RU-MGO
+RUSSIA:TCHELIABINSKAïA OBLAST;KARTALINSKIY:UNKNOWN:RU-KT 
+RUSSIA:ORENBOURGSKAïA OBLAST;PONOMARYOVSKIY:UNKNOWN:RU-PNY
+RUSSIA:BACHKIRIA;MELEUZSKIY:UNKNOWN:RU-MLZ
+RUSSIA:BACHKIRIA;FYODOROVSKIY:UNKNOWN:RU-FYV
+RUSSIA:BACHKIRIA;SALAVAT:UNKNOWN:RU-SL8
+RUSSIA:ORENBOURGSKAïA OBLAST;BUZULUKSKIY:UNKNOWN:RU-BZ 
+RUSSIA:BACHKIRIA;BAYMAKSKIY:UNKNOWN:RU-BY2
+RUSSIA:ORENBOURGSKAïA OBLAST;SHARLYKSKIY:UNKNOWN:RU-SA8
+RUSSIA:ORENBOURGSKAïA OBLAST;GRACHEVSKIY:UNKNOWN:RU-GR5
+RUSSIA:TCHELIABINSKAïA OBLAST;KIZILSKIY:UNKNOWN:RU-KZ3
+RUSSIA:ORENBOURGSKAïA OBLAST;KRASNOGVARDEYSKIY:UNKNOWN:RU-KND
+RUSSIA:TCHELIABINSKAïA OBLAST;KARTALY:UNKNOWN:RU-KTL
+RUSSIA:BACHKIRIA;KUGARCHINSKIY:UNKNOWN:RU-KGK
+RUSSIA:BACHKIRIA;ZILAIRSKIY:UNKNOWN:RU-ZLR
+RUSSIA:BACHKIRIA;MELEUZ:UNKNOWN:RU-MEU
+RUSSIA:BACHKIRIA;KUMERTAUSKIY:UNKNOWN:RU-KM9
+RUSSIA:ORENBOURGSKAïA OBLAST;ALEKSANDROVSKIY:UNKNOWN:RU-AER
+RUSSIA:ORENBOURGSKAïA OBLAST;KURMANAYEVSKIY:UNKNOWN:RU-KME
+RUSSIA:TCHELIABINSKAïA OBLAST;BREDINSKIY:UNKNOWN:RU-BEI
+RUSSIA:ORENBOURGSKAïA OBLAST;BUZULUK:UNKNOWN:RU-BZL
+RUSSIA:BACHKIRIA;KUMERTAY:UNKNOWN:RU-KMT
+RUSSIA:BACHKIRIA;SIBAY:UNKNOWN:RU-SIY
+RUSSIA:ORENBOURGSKAïA OBLAST;SOROCHINSKIY:UNKNOWN:RU-SR6
+RUSSIA:ORENBOURGSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OK8
+RUSSIA:ORENBOURGSKAïA OBLAST;NOVOSERGIYEVSKIY:UNKNOWN:RU-NOY
+RUSSIA:BACHKIRIA;BAYMAK:UNKNOWN:RU-BAM
+RUSSIA:ORENBOURGSKAïA OBLAST;TOTSKIY:UNKNOWN:RU-TTY
+RUSSIA:ORENBOURGSKAïA OBLAST;TYULGANSKIY:UNKNOWN:RU-TY1
+RUSSIA:BACHKIRIA;ZIANCHURINSKIY:UNKNOWN:RU-ZAR
+RUSSIA:ORENBOURGSKAïA OBLAST;KVARKENSKIY:UNKNOWN:RU-KV 
+RUSSIA:BACHKIRIA;KHAYBULLINSKIY:UNKNOWN:RU-KYL
+RUSSIA:ORENBOURGSKAïA OBLAST;PEREVOLOTSKIY:UNKNOWN:RU-PET
+RUSSIA:ORENBOURGSKAïA OBLAST;PERVOMAYSKIY:UNKNOWN:RU-PV 
+RUSSIA:ORENBOURGSKAïA OBLAST;SAKMARSKIY:UNKNOWN:RU-SKR
+RUSSIA:ORENBOURGSKAïA OBLAST;TASHLINSKIY:UNKNOWN:RU-TS2
+RUSSIA:ORENBOURGSKAïA OBLAST;SARAKTASHSKIY:UNKNOWN:RU-SR7
+RUSSIA:ORENBOURGSKAïA OBLAST;ORENBURGSKIY:UNKNOWN:RU-ORR
+RUSSIA:ORENBOURGSKAïA OBLAST;ADAMOVSKIY:UNKNOWN:RU-ADV
+RUSSIA:ORENBOURGSKAïA OBLAST;ORENBURG:UNKNOWN:RU-ORB
+RUSSIA:ORENBOURGSKAïA OBLAST;KUVANDYKSKIY:UNKNOWN:RU-KV1
+RUSSIA:ORENBOURGSKAïA OBLAST;GAYSKIY:UNKNOWN:RU-GYK
+RUSSIA:ORENBOURGSKAïA OBLAST;NOVOORSKIY:UNKNOWN:RU-NO 
+RUSSIA:ORENBOURGSKAïA OBLAST;ILEKSKIY:UNKNOWN:RU-IL 
+RUSSIA:ORENBOURGSKAïA OBLAST;BELYAEVSKIY:UNKNOWN:RU-BY3
+RUSSIA:ORENBOURGSKAïA OBLAST;KUVANDYK:UNKNOWN:RU-KVD
+RUSSIA:ORENBOURGSKAïA OBLAST;SVETLINSKIY:UNKNOWN:RU-SEK
+RUSSIA:ORENBOURGSKAïA OBLAST;GAY:UNKNOWN:RU-GAY
+RUSSIA:ORENBOURGSKAïA OBLAST;MEDNOGORSK:UNKNOWN:RU-MDO
+RUSSIA:ORENBOURGSKAïA OBLAST;SOL-ILETSKIY:UNKNOWN:RU-SL9
+RUSSIA:ORENBOURGSKAïA OBLAST;YASNENSKIY:UNKNOWN:RU-YSI
+RUSSIA:ORENBOURGSKAïA OBLAST;AKBULAKSKIY:UNKNOWN:RU-AKY
+RUSSIA:ORENBOURGSKAïA OBLAST;ORSK:UNKNOWN:RU-OR 
+RUSSIA:ORENBOURGSKAïA OBLAST;NOVOTROITSK:UNKNOWN:RU-NOT
+RUSSIA:ORENBOURGSKAïA OBLAST;DOMBAROVSKIY:UNKNOWN:RU-DM 
+RUSSIA:ORENBOURGSKAïA OBLAST;YASNY:UNKNOWN:RU-YAN
+RUSSIA:IAMALO-NENETSKI NATIONAL;YAMALSKIY:UNKNOWN:RU-YMS
+RUSSIA:IAMALO-NENETSKI NATIONAL;TAZOVSKIY:UNKNOWN:RU-TZS
+RUSSIA:IAMALO-NENETSKI NATIONAL;PRIURALSKIY:UNKNOWN:RU-PIK
+RUSSIA:IAMALO-NENETSKI NATIONAL;PUROVSKIY:UNKNOWN:RU-POK
+RUSSIA:IAMALO-NENETSKI NATIONAL;NADYMSKIY:UNKNOWN:RU-NDS
+RUSSIA:IAMALO-NENETSKI NATIONAL;KRANOSELKUPSKIY:UNKNOWN:RU-KAP
+RUSSIA:IAMALO-NENETSKI NATIONAL;SHURYSHKARSKIY:UNKNOWN:RU-SUK
+RUSSIA:IAMALO-NENETSKI NATIONAL;LABYTNANGI:UNKNOWN:RU-LBA
+RUSSIA:IAMALO-NENETSKI NATIONAL;SALEKHARD:UNKNOWN:RU-SEH
+RUSSIA:IAMALO-NENETSKI NATIONAL;NOVYI URENGOY:UNKNOWN:RU-NVG
+RUSSIA:KHANTY-MANSISKI NATIONAL;BEREZOVSKIY:UNKNOWN:RU-BEY
+RUSSIA:IAMALO-NENETSKI NATIONAL;NADYM:UNKNOWN:RU-NAY
+RUSSIA:KHANTY-MANSISKI NATIONAL;BELOYARSKIY:UNKNOWN:RU-BO1
+RUSSIA:IAMALO-NENETSKI NATIONAL;MURAVLENKO:UNKNOWN:RU-MRL
+RUSSIA:KHANTY-MANSISKI NATIONAL;BELOYARSKY:UNKNOWN:RU-BO2
+RUSSIA:KHANTY-MANSISKI NATIONAL;OKTYABRSKIY:UNKNOWN:RU-OK9
+RUSSIA:KHANTY-MANSISKI NATIONAL;SURGUTSKIY:UNKNOWN:RU-SRT
+RUSSIA:IAMALO-NENETSKI NATIONAL;NOYABRSK:UNKNOWN:RU-NYB
+RUSSIA:KHANTY-MANSISKI NATIONAL;KHANTY-MANSIYSKIY:UNKNOWN:RU-KT1
+RUSSIA:KHANTY-MANSISKI NATIONAL;NIZHNEVARTOVSKIY:UNKNOWN:RU-NZO
+RUSSIA:KHANTY-MANSISKI NATIONAL;SOVETSKIY:UNKNOWN:RU-SEI
+RUSSIA:KHANTY-MANSISKI NATIONAL;NYAGAN:UNKNOWN:RU-NYG
+RUSSIA:KHANTY-MANSISKI NATIONAL;KOGALYM:UNKNOWN:RU-KGM
+RUSSIA:KHANTY-MANSISKI NATIONAL;RADUZHNYI:UNKNOWN:RU-RDH
+RUSSIA:KHANTY-MANSISKI NATIONAL;POKACHY:UNKNOWN:RU-PKC
+RUSSIA:KHANTY-MANSISKI NATIONAL;SURGUT:UNKNOWN:RU-SUG
+RUSSIA:KHANTY-MANSISKI NATIONAL;LANGEPAS:UNKNOWN:RU-LNP
+RUSSIA:KHANTY-MANSISKI NATIONAL;KONDINSKIY:UNKNOWN:RU-KDN
+RUSSIA:KHANTY-MANSISKI NATIONAL;NEFTEYUGANSKIY:UNKNOWN:RU-NFG
+RUSSIA:KHANTY-MANSISKI NATIONAL;NEFTEUGANSK:UNKNOWN:RU-NFA
+RUSSIA:KHANTY-MANSISKI NATIONAL;KHANTY-MANSYISK:UNKNOWN:RU-KT2
+RUSSIA:TOMSKAïA OBLAST;KARGASOKSKIY:UNKNOWN:RU-KGI
+RUSSIA:KHANTY-MANSISKI NATIONAL;MEGION:UNKNOWN:RU-MEO
+RUSSIA:KHANTY-MANSISKI NATIONAL;NIZSHNVARTOVSK:UNKNOWN:RU-NZ3
+RUSSIA:KHANTY-MANSISKI NATIONAL;PYT-YAKH:UNKNOWN:RU-PYY
+RUSSIA:TOMSKAïA OBLAST;STREZHEVOJ:UNKNOWN:RU-STE
+RUSSIA:KHANTY-MANSISKI NATIONAL;URAY:UNKNOWN:RU-UR1
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;UVATSKIY:UNKNOWN:RU-UVI
+RUSSIA:TOMSKAïA OBLAST;VERKHNEKETSKIY:UNKNOWN:RU-VR8
+RUSSIA:TOMSKAïA OBLAST;PARABELSKIY:UNKNOWN:RU-PAL
+RUSSIA:TOMSKAïA OBLAST;KOLPASHEVSKIY:UNKNOWN:RU-KPV
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;TOBOLSKIY:UNKNOWN:RU-TBI
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;VAGAYSKIY:UNKNOWN:RU-VGS
+RUSSIA:OMSKAïA OBLAST;TARSKIY:UNKNOWN:RU-TS3
+RUSSIA:OMSKAïA OBLAST;UST-ISHIMSKIY:UNKNOWN:RU-UTM
+RUSSIA:TOMSKAïA OBLAST;PERVOMAYSKIY:UNKNOWN:RU-PV1
+RUSSIA:TOMSKAïA OBLAST;TEGULDETSKIY:UNKNOWN:RU-TGT
+RUSSIA:TOMSKAïA OBLAST;KOLPASHEVO:UNKNOWN:RU-KLH
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;TOBOLSK:UNKNOWN:RU-TBL
+RUSSIA:OMSKAïA OBLAST;TEVRIZSKIY:UNKNOWN:RU-TVZ
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;NIZHNETAVDINSKIY:UNKNOWN:RU-NZ4
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;YARKOVSKIY:UNKNOWN:RU-YR5
+RUSSIA:TOMSKAïA OBLAST;MOLCHANOVSKIY:UNKNOWN:RU-ML2
+RUSSIA:TOMSKAïA OBLAST;CHAINSKIY:UNKNOWN:RU-CAI
+RUSSIA:TOMSKAïA OBLAST;ASINOVSKIY:UNKNOWN:RU-AS 
+RUSSIA:TOMSKAïA OBLAST;BAKCHARSKIY:UNKNOWN:RU-BKR
+RUSSIA:OMSKAïA OBLAST;ZNAMENSKIY:UNKNOWN:RU-ZNK
+RUSSIA:TOMSKAïA OBLAST;KRIVOSHEINSKIY:UNKNOWN:RU-KI4
+RUSSIA:OMSKAïA OBLAST;SEDELNIKOVSKIY:UNKNOWN:RU-SDK
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;TYUMENSKIY:UNKNOWN:RU-TY2
+RUSSIA:TOMSKAïA OBLAST;TOMSKIY:UNKNOWN:RU-TM2
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;VIKULOVSKIY:UNKNOWN:RU-VKV
+RUSSIA:OMSKAïA OBLAST;BOLSHEUKOVSKIY:UNKNOWN:RU-BSO
+RUSSIA:TOMSKAïA OBLAST;ZYRYANSKIY:UNKNOWN:RU-ZYN
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;AROMASHEVSKIY:UNKNOWN:RU-AR7
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KYSHTOVSKIY:UNKNOWN:RU-KY7
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;YURGINSKIY:UNKNOWN:RU-YR6
+RUSSIA:TOMSKAïA OBLAST;SHEGARSKIY:UNKNOWN:RU-SEY
+RUSSIA:TOMSKAïA OBLAST;ASINO:UNKNOWN:RU-ASN
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;TYUMEN:UNKNOWN:RU-TYM
+RUSSIA:NOVOSIBIRSKAïA OBLAST;SEVERNYI:UNKNOWN:RU-SE1
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;YALUTOROVSKIY:UNKNOWN:RU-YL 
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;SOROKINSKIY:UNKNOWN:RU-SR8
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ZAVODOUKOVSKIY:UNKNOWN:RU-ZVI
+RUSSIA:OMSKAïA OBLAST;TARA:UNKNOWN:RU-TAR
+RUSSIA:KEMEROVSKAïA OBLAST;MARIINSKIY:UNKNOWN:RU-MR5
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;GOLYSHMANOVSKIY:UNKNOWN:RU-GLN
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ISETSKIY:UNKNOWN:RU-ISS
+RUSSIA:OMSKAïA OBLAST;KOLOSOVSKIY:UNKNOWN:RU-KO2
+RUSSIA:TOMSKAïA OBLAST;TOMSK:UNKNOWN:RU-TOK
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;OMUTINSKIY:UNKNOWN:RU-OMK
+RUSSIA:OMSKAïA OBLAST;MUROMTSEVSKIY:UNKNOWN:RU-MR6
+RUSSIA:OMSKAïA OBLAST;KRUTINSKIY:UNKNOWN:RU-KUI
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ABATSKIY:UNKNOWN:RU-ABY
+RUSSIA:OMSKAïA OBLAST;BOLSHERECHENSKIY:UNKNOWN:RU-BSC
+RUSSIA:TOMSKAïA OBLAST;KOZHEVNIKOVSKIY:UNKNOWN:RU-KZO
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;YALUTOROVSK:UNKNOWN:RU-YLR
+RUSSIA:KEMEROVSKAïA OBLAST;YAYSKIY:UNKNOWN:RU-YYI
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ISHIMSKIY:UNKNOWN:RU-ISK
+RUSSIA:KEMEROVSKAïA OBLAST;IZHMORSKIY:UNKNOWN:RU-IZR
+RUSSIA:NOVOSIBIRSKAïA OBLAST;UBINSKIY:UNKNOWN:RU-UBS
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KOLYVANSKIY:UNKNOWN:RU-KY8
+RUSSIA:OMSKAïA OBLAST;TYUKALINSKIY:UNKNOWN:RU-TY3
+RUSSIA:KEMEROVSKAïA OBLAST;TYAZHINSKIY:UNKNOWN:RU-TY4
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;UPOROVSKIY:UNKNOWN:RU-UPV
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ZAVODOUKOVSK:UNKNOWN:RU-ZV 
+RUSSIA:NOVOSIBIRSKAïA OBLAST;VENGEROVSKIY:UNKNOWN:RU-VNV
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ARMIZONSKIY:UNKNOWN:RU-AR8
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KUYBYSHEVSKIY:UNKNOWN:RU-KY9
+RUSSIA:KEMEROVSKAïA OBLAST;MARIINSK:UNKNOWN:RU-MR7
+RUSSIA:KEMEROVSKAïA OBLAST;YASHKINSKIY:UNKNOWN:RU-YSY
+RUSSIA:NOVOSIBIRSKAïA OBLAST;UST-TARKSKIY:UNKNOWN:RU-UTR
+RUSSIA:KEMEROVSKAïA OBLAST;YURGINSKIY:UNKNOWN:RU-YR7
+RUSSIA:KEMEROVSKAïA OBLAST;CHEBULINSKIY:UNKNOWN:RU-CEY
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;ISHIM:UNKNOWN:RU-IS 
+RUSSIA:KEMEROVSKAïA OBLAST;ANZHERO-SUDZHENSK:UNKNOWN:RU-AND
+RUSSIA:KEMEROVSKAïA OBLAST;TAYGA:UNKNOWN:RU-TAG
+RUSSIA:NOVOSIBIRSKAïA OBLAST;BOLOTNINSKIY:UNKNOWN:RU-BO3
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;BERDYUZHSKIY:UNKNOWN:RU-BRZ
+RUSSIA:NOVOSIBIRSKAïA OBLAST;CHULYMSKIY:UNKNOWN:RU-CUM
+RUSSIA:OMSKAïA OBLAST;NIZHNEOMSKIY:UNKNOWN:RU-NZM
+RUSSIA:KEMEROVSKAïA OBLAST;TISULSKIY:UNKNOWN:RU-TS4
+RUSSIA:OMSKAïA OBLAST;SARGATSKIY:UNKNOWN:RU-SR9
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;SLADKOVSKIY:UNKNOWN:RU-SA9
+RUSSIA:KEMEROVSKAïA OBLAST;KEMEROVSKIY:UNKNOWN:RU-KEI
+RUSSIA:OMSKAïA OBLAST;TUKALINSK:UNKNOWN:RU-TKS
+RUSSIA:TIOUMENSKAïA OBL. RéSIDUE;KAZANSKIY:UNKNOWN:RU-KZ4
+RUSSIA:KEMEROVSKAïA OBLAST;BEREZOVSKIY:UNKNOWN:RU-BE 
+RUSSIA:OMSKAïA OBLAST;GORKOVSKIY:UNKNOWN:RU-GR6
+RUSSIA:KEMEROVSKAïA OBLAST;YURGA:UNKNOWN:RU-YUG
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KARGATSKIY:UNKNOWN:RU-KG 
+RUSSIA:KEMEROVSKAïA OBLAST;TOPKINSKIY:UNKNOWN:RU-TPN
+RUSSIA:NOVOSIBIRSKAïA OBLAST;MOSHKOVSKIY:UNKNOWN:RU-MS 
+RUSSIA:NOVOSIBIRSKAïA OBLAST;CHANOVSKIY:UNKNOWN:RU-CAY
+RUSSIA:NOVOSIBIRSKAïA OBLAST;TATARSKIY:UNKNOWN:RU-TT 
+RUSSIA:OMSKAïA OBLAST;LYUBINSKIY:UNKNOWN:RU-LY 
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KOCHENEVSKIY:UNKNOWN:RU-KC 
+RUSSIA:OMSKAïA OBLAST;NAZYVAYEVSK:UNKNOWN:RU-NZE
+RUSSIA:NOVOSIBIRSKAïA OBLAST;TOGUCHINSKIY:UNKNOWN:RU-TGI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;NOVOSIBIRSKIY:UNKNOWN:RU-NO1
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KUYBISHEV:UNKNOWN:RU-KYH
+RUSSIA:OMSKAïA OBLAST;OMSKIY:UNKNOWN:RU-OMI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;BARABINSKIY:UNKNOWN:RU-BAN
+RUSSIA:KEMEROVSKAïA OBLAST;KRAPIVINSKIY:UNKNOWN:RU-KPK
+RUSSIA:KEMEROVSKAïA OBLAST;KEMEROVO:UNKNOWN:RU-KER
+RUSSIA:NOVOSIBIRSKAïA OBLAST;BARABINSK:UNKNOWN:RU-BA 
+RUSSIA:OMSKAïA OBLAST;KALACHINSKIY:UNKNOWN:RU-KC1
+RUSSIA:OMSKAïA OBLAST;ISILKULSKIY:UNKNOWN:RU-ISL
+RUSSIA:KEMEROVSKAïA OBLAST;TOPKI:UNKNOWN:RU-TOI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;TATARSK:UNKNOWN:RU-TTR
+RUSSIA:OMSKAïA OBLAST;MOSKALENSKIY:UNKNOWN:RU-MS1
+RUSSIA:OMSKAïA OBLAST;KORMILOVSKIY:UNKNOWN:RU-KI5
+RUSSIA:NOVOSIBIRSKAïA OBLAST;NOVOSIBIRSK:UNKNOWN:RU-NOB
+RUSSIA:KEMEROVSKAïA OBLAST;PROMYSHLENNOVSKIY:UNKNOWN:RU-PON
+RUSSIA:OMSKAïA OBLAST;MARYANOVSKIY:UNKNOWN:RU-MR8
+RUSSIA:OMSKAïA OBLAST;OMSK:UNKNOWN:RU-OM 
+RUSSIA:NOVOSIBIRSKAïA OBLAST;CHISTOOZYORNYI:UNKNOWN:RU-CIZ
+RUSSIA:OMSKAïA OBLAST;KALACHINSK:UNKNOWN:RU-KCH
+RUSSIA:NOVOSIBIRSKAïA OBLAST;ZDVINSKIY:UNKNOWN:RU-ZDK
+RUSSIA:OMSKAïA OBLAST;OKONESHNIKOVSKIY:UNKNOWN:RU-OKO
+RUSSIA:NOVOSIBIRSKAïA OBLAST;ISKITIMSKIY:UNKNOWN:RU-ISI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;OB:UNKNOWN:RU-OSB
+RUSSIA:KEMEROVSKAïA OBLAST;LENINSK-KUZNETSKIY:UNKNOWN:RU-LNZ
+RUSSIA:OMSKAïA OBLAST;ISIL'KUL':UNKNOWN:RU-ISU
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KUPINSKIY:UNKNOWN:RU-KPI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;DOVOLENSKIY:UNKNOWN:RU-DVK
+RUSSIA:KEMEROVSKAïA OBLAST;MEZHDURECHENSKIY:UNKNOWN:RU-MZH
+RUSSIA:OMSKAïA OBLAST;TAVRICHESKIY:UNKNOWN:RU-TVH
+RUSSIA:NOVOSIBIRSKAïA OBLAST;MASLYANINSKIY:UNKNOWN:RU-MS2
+RUSSIA:NOVOSIBIRSKAïA OBLAST;BERDSK:UNKNOWN:RU-BED
+RUSSIA:OMSKAïA OBLAST;AZOVSKY NEMETSKY NATIONAL:UNKNOWN:RU-AZK
+RUSSIA:NOVOSIBIRSKAïA OBLAST;ORDYNSKIY:UNKNOWN:RU-ORI
+RUSSIA:OMSKAïA OBLAST;SHERBAKULSKIY:UNKNOWN:RU-SEL
+RUSSIA:NOVOSIBIRSKAïA OBLAST;ISKITIM:UNKNOWN:RU-IST
+RUSSIA:OMSKAïA OBLAST;CHERLAKSKIY:UNKNOWN:RU-CE 
+RUSSIA:OMSKAïA OBLAST;POLTAVSKIY:UNKNOWN:RU-PLV
+RUSSIA:KEMEROVSKAïA OBLAST;BELOVSKIY:UNKNOWN:RU-BO4
+RUSSIA:KEMEROVSKAïA OBLAST;GURYEVSKIY:UNKNOWN:RU-GR7
+RUSSIA:KEMEROVSKAïA OBLAST;LENINSK-KUZNETSKIY:UNKNOWN:RU-LNN
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KOCHKOVSKIY:UNKNOWN:RU-KC2
+RUSSIA:OMSKAïA OBLAST;ODESSKIY:UNKNOWN:RU-ODI
+RUSSIA:NOVOSIBIRSKAïA OBLAST;CHEREPANOVSKIY:UNKNOWN:RU-CEO
+RUSSIA:NOVOSIBIRSKAïA OBLAST;SUZUNSKIY:UNKNOWN:RU-SZK
+RUSSIA:OMSKAïA OBLAST;PAVLOGRADSKIY:UNKNOWN:RU-PVD
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZALESOVSKIY:UNKNOWN:RU-ZLS
+RUSSIA:KEMEROVSKAïA OBLAST;BELOVO:UNKNOWN:RU-BEO
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KRASNOZERSKIY:UNKNOWN:RU-KO3
+RUSSIA:KEMEROVSKAïA OBLAST;PROKOPYEVSKIY:UNKNOWN:RU-POV
+RUSSIA:OMSKAïA OBLAST;NOVOVARSHAVSKIY:UNKNOWN:RU-NOH
+RUSSIA:NOVOSIBIRSKAïA OBLAST;BAGANSKIY:UNKNOWN:RU-BG2
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KRUTIKHINKSIY:UNKNOWN:RU-KUY
+RUSSIA:NOVOSIBIRSKAïA OBLAST;KARASUKSKIY:UNKNOWN:RU-KU 
+RUSSIA:KEMEROVSKAïA OBLAST;GURYEVSK:UNKNOWN:RU-GR8
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZARINSKIY:UNKNOWN:RU-ZRK
+RUSSIA:KEMEROVSKAïA OBLAST;NOVOKUZNETSKIY:UNKNOWN:RU-NOE
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TALMENSKIY:UNKNOWN:RU-TLY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;PANKRUSHYKHINSKIY:UNKNOWN:RU-PN 
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KAMENSKIY:UNKNOWN:RU-KEY
+RUSSIA:OMSKAïA OBLAST;RUSSKO-POLYANSKIY:UNKNOWN:RU-RSY
+RUSSIA:KEMEROVSKAïA OBLAST;KISILEVSK:UNKNOWN:RU-KI6
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;PERVOMAYSKIY:UNKNOWN:RU-PV2
+RUSSIA:KEMEROVSKAïA OBLAST;PROKOPYEVSK:UNKNOWN:RU-POY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KYTMANOVSKIY:UNKNOWN:RU-KT3
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KHABARSKIY:UNKNOWN:RU-KBR
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KAMEN'-NA-OBI:UNKNOWN:RU-KMA
+RUSSIA:KEMEROVSKAïA OBLAST;MEZSHDURECHENSK:UNKNOWN:RU-MZE
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SHELABOLIKHINSKIY:UNKNOWN:RU-SE2
+RUSSIA:KEMEROVSKAïA OBLAST;NOVOKUZNETSK:UNKNOWN:RU-NVZ
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TOGULSKIY:UNKNOWN:RU-TGY
+RUSSIA:KEMEROVSKAïA OBLAST;MYSKI:UNKNOWN:RU-MY 
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BURLINSKIY:UNKNOWN:RU-BIK
+RUSSIA:KEMEROVSKAïA OBLAST;OSINNIKI:UNKNOWN:RU-OSN
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;PAVLOVSKIY:UNKNOWN:RU-PV3
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BAYEVSKIY:UNKNOWN:RU-BY4
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KOSIKHINSKIY:UNKNOWN:RU-KI7
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TYUMENTSEVSKIY:UNKNOWN:RU-TYE
+RUSSIA:KEMEROVSKAïA OBLAST;TASHTAGOLSKIY:UNKNOWN:RU-TS5
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;YELTSOVSKIY:UNKNOWN:RU-YL1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BARNAUL:UNKNOWN:RU-BRU
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SUYETSKIY:UNKNOWN:RU-SY2
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;NOVOALTAYSK:UNKNOWN:RU-NOA
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;REBRIKHINSKIY:UNKNOWN:RU-RBN
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TSELINNIY:UNKNOWN:RU-TS6
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KALMANSKIY:UNKNOWN:RU-K2
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SLAVGORODSKIY:UNKNOWN:RU-SAD
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TROITSKIY:UNKNOWN:RU-TOY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BLAGOVESCHENSKIY:UNKNOWN:RU-BA1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZAVYALOVSKIY:UNKNOWN:RU-ZVY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SLAVGOROD:UNKNOWN:RU-SVO
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SOLTONSKIY:UNKNOWN:RU-ST5
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TOPCHIKHINSKIY:UNKNOWN:RU-TPH
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TABUNSKIY:UNKNOWN:RU-TBY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;MAMONTOVSKIY:UNKNOWN:RU-MMV
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZONALNYI:UNKNOWN:RU-ZNL
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BIYSKIY:UNKNOWN:RU-BY5
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;RODINSKIY:UNKNOWN:RU-RDK
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ROMANOVSKIY:UNKNOWN:RU-RM 
+RUSSIA:KEMEROVSKAïA OBLAST;TASHTAGOL:UNKNOWN:RU-TSO
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KULUNDINSKIY:UNKNOWN:RU-KU1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ALEYSKIY:UNKNOWN:RU-AES
+RUSSIA:RESPOUBLIKA ALTAï;TUROCHAKSKIY:UNKNOWN:RU-TO 
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;UST-PRISTANSKIY:UNKNOWN:RU-UTA
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SHIPUNOVSKIY:UNKNOWN:RU-SII
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KRASNOGORSKIY:UNKNOWN:RU-KO4
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BYSTROISTOKSKIY:UNKNOWN:RU-BYO
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KLYUCHEVSKIY:UNKNOWN:RU-KUV
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BIYSK:UNKNOWN:RU-BI 
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ALEYSK:UNKNOWN:RU-AEY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SMOLENSKIY:UNKNOWN:RU-SMI
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SOVETSKIY:UNKNOWN:RU-SE3
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;NOVICHIKHINSKIY:UNKNOWN:RU-NIH
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;PETROPAVLOVSKIY:UNKNOWN:RU-PTO
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;VOLCHIKHINSKIY:UNKNOWN:RU-VCH
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;UST-KALMANSKIY:UNKNOWN:RU-UTS
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;POSPELIKHINSKIY:UNKNOWN:RU-PS2
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;MIKHAYLOVSKIY:UNKNOWN:RU-MK1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ALTAYSKIY:UNKNOWN:RU-ATK
+RUSSIA:RESPOUBLIKA ALTAï;CHOYSKIY:UNKNOWN:RU-COS
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;YEGORYEVSKIY:UNKNOWN:RU-YGS
+RUSSIA:RESPOUBLIKA ALTAï;MAYMINSKIY:UNKNOWN:RU-MY1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;BELOKURIKHA:UNKNOWN:RU-BOA
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;SOLONESHENSKIY:UNKNOWN:RU-SLE
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;RUBTSOVSKIY:UNKNOWN:RU-RBV
+RUSSIA:RESPOUBLIKA ALTAï;GORNO-ALTAYSK:UNKNOWN:RU-GRA
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KRASNOSHEKOVSKIY:UNKNOWN:RU-KOO
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;CHARYSHSKIY:UNKNOWN:RU-CAH
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;UGLOVSKIY:UNKNOWN:RU-UGI
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;KURYINSKIY:UNKNOWN:RU-KI8
+RUSSIA:RESPOUBLIKA ALTAï;SHEBALINSKIY:UNKNOWN:RU-SE4
+RUSSIA:RESPOUBLIKA ALTAï;CHEMALSKY:UNKNOWN:RU-CE1
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZMEINOGORSKIY:UNKNOWN:RU-ZMR
+RUSSIA:RESPOUBLIKA ALTAï;ULAGANSKIY:UNKNOWN:RU-ULN
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;RUBTZOVSK:UNKNOWN:RU-RBS
+RUSSIA:RESPOUBLIKA ALTAï;UST-KANSKIY:UNKNOWN:RU-UTK
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;LOKTEVSKIY:UNKNOWN:RU-LKY
+RUSSIA:RESPOUBLIKA ALTAï;ONGUDAYSKIY:UNKNOWN:RU-ONY
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;ZMEINOGORSK:UNKNOWN:RU-ZMG
+RUSSIA:ALTAïSKI KRAï RéSIDUEL;TRETIYAKOVSKIY:UNKNOWN:RU-TRO
+RUSSIA:RESPOUBLIKA ALTAï;UST-KOKSINSKIY:UNKNOWN:RU-UTI
+RUSSIA:RESPOUBLIKA ALTAï;KOSH-AGACHSKIY:UNKNOWN:RU-KSC
+RUSSIA:TATARSTAN;BALTASINSKIY:UNKNOWN:RU-BT 
+RUSSIA:TATARSTAN;AGRYZSKIY:UNKNOWN:RU-AGI
+RUSSIA:TATARSTAN;ARSKIY:UNKNOWN:RU-AR9
+RUSSIA:TATARSTAN;VYSOKOGORSKIY:UNKNOWN:RU-VY3
+RUSSIA:TATARSTAN;ATNINSKIY:UNKNOWN:RU-ATI
+RUSSIA:TATARSTAN;KUKMORSKIY:UNKNOWN:RU-KKK
+RUSSIA:TATARSTAN;SABINSKIY:UNKNOWN:RU-SBK
+RUSSIA:TATARSTAN;MAMADYSHSKIY:UNKNOWN:RU-MMS
+RUSSIA:TATARSTAN;ZELENODOLSKIY:UNKNOWN:RU-ZLL
+RUSSIA:TATARSTAN;MENDELEYEVSKIY:UNKNOWN:RU-MN 
+RUSSIA:TATARSTAN;PESTRECHINSKIY:UNKNOWN:RU-PS3
+RUSSIA:TATARSTAN;YELABUZHSKIY:UNKNOWN:RU-YLZ
+RUSSIA:TATARSTAN;KAZAN:UNKNOWN:RU-KZ5
+RUSSIA:TATARSTAN;AKTANYSHSKIY:UNKNOWN:RU-AK 
+RUSSIA:TATARSTAN;TUYLACHINSKIY:UNKNOWN:RU-TY5
+RUSSIA:TATARSTAN;TUKAYEVSKIY:UNKNOWN:RU-TKY
+RUSSIA:TATARSTAN;MENZELINSKIY:UNKNOWN:RU-MN1
+RUSSIA:TATARSTAN;ZELENODOL'SK:UNKNOWN:RU-ZLD
+RUSSIA:TATARSTAN;RYBNO-SLOBODSKIY:UNKNOWN:RU-RYB
+RUSSIA:TATARSTAN;ELABUGA:UNKNOWN:RU-ELG
+RUSSIA:TATARSTAN;VERKHNEUSLONSKIY:UNKNOWN:RU-VR9
+RUSSIA:TATARSTAN;LAISHEVSKIY:UNKNOWN:RU-LIV
+RUSSIA:TATARSTAN;NABEREZHNIYE CHELNY:UNKNOWN:RU-NBY
+RUSSIA:TATARSTAN;NIZHNEKAMSKIY:UNKNOWN:RU-NZ5
+RUSSIA:TATARSTAN;NIZSHNEKAMSK:UNKNOWN:RU-NZ6
+RUSSIA:TATARSTAN;SARMANOVSKIY:UNKNOWN:RU-SMY
+RUSSIA:TATARSTAN;ZAINSKIY:UNKNOWN:RU-ZIS
+RUSSIA:TATARSTAN;KAMSKO-USTYINSKIY:UNKNOWN:RU-KKT
+RUSSIA:TATARSTAN;MUSLYUMOVSKIY:UNKNOWN:RU-MS3
+RUSSIA:TATARSTAN;CHISTOPOLSKIY:UNKNOWN:RU-CIL
+RUSSIA:TATARSTAN;CHISTOPOL':UNKNOWN:RU-CHP
+RUSSIA:TATARSTAN;ALEKSEYEVSKIY:UNKNOWN:RU-AEV
+RUSSIA:TATARSTAN;NOVOSHESHMINSKIY:UNKNOWN:RU-NOM
+RUSSIA:TATARSTAN;ZAINSK:UNKNOWN:RU-ZAN
+RUSSIA:TATARSTAN;BUINSKIY:UNKNOWN:RU-BII
+RUSSIA:TATARSTAN;ALMETYEVSKIY:UNKNOWN:RU-AMI
+RUSSIA:TATARSTAN;KUYBYSHEVSKIY:UNKNOWN:RU-KBV
+RUSSIA:TATARSTAN;TETYUSHSKIY:UNKNOWN:RU-TTH
+RUSSIA:TATARSTAN;AZNAKAYEVSKIY:UNKNOWN:RU-AZI
+RUSSIA:TATARSTAN;AKSUBAYEVSKIY:UNKNOWN:RU-AKV
+RUSSIA:TATARSTAN;ALKEYEVSKIY:UNKNOWN:RU-AK1
+RUSSIA:TATARSTAN;CHEREMSHANSKIY:UNKNOWN:RU-CEA
+RUSSIA:TATARSTAN;ALMETYEVSK:UNKNOWN:RU-AMY
+RUSSIA:TATARSTAN;OKTYABRSKIY:UNKNOWN:RU-OTR
+RUSSIA:TATARSTAN;AZNAKAEVO:UNKNOWN:RU-AZE
+RUSSIA:TATARSTAN;DROZHANOVSKIY:UNKNOWN:RU-DRV
+RUSSIA:OULIANOVSKAïA OBLAST;STAROMAYNSKIY:UNKNOWN:RU-ST6
+RUSSIA:TATARSTAN;LENINOGORSKIY:UNKNOWN:RU-LNR
+RUSSIA:TATARSTAN;YUTAZINSKIY:UNKNOWN:RU-YTN
+RUSSIA:TATARSTAN;BUGULMINSKIY:UNKNOWN:RU-BG3
+RUSSIA:OULIANOVSKAïA OBLAST;SURSKIY:UNKNOWN:RU-SS2
+RUSSIA:OULIANOVSKAïA OBLAST;TSYLNINSKIY:UNKNOWN:RU-TS7
+RUSSIA:OULIANOVSKAïA OBLAST;ULYANOVSKIY:UNKNOWN:RU-ULI
+RUSSIA:TATARSTAN;LENINIGORSK:UNKNOWN:RU-LNG
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;CHELNO-VERSHINSKIY:UNKNOWN:RU-CER
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SHENTALINSKIY:UNKNOWN:RU-SE5
+RUSSIA:OULIANOVSKAïA OBLAST;MELEKESSKIY:UNKNOWN:RU-ML3
+RUSSIA:OULIANOVSKAïA OBLAST;MAYNSKIY:UNKNOWN:RU-MY2
+RUSSIA:TATARSTAN;BUGUL'MA:UNKNOWN:RU-BGM
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KLYAVLINSKIY:UNKNOWN:RU-KV2
+RUSSIA:OULIANOVSKAïA OBLAST;NOVOMALYKLINSKIY:UNKNOWN:RU-NO2
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KOSHKINSKIY:UNKNOWN:RU-KKI
+RUSSIA:OULIANOVSKAïA OBLAST;CHERDAKLINSKIY:UNKNOWN:RU-CE2
+RUSSIA:TATARSTAN;BAVLINSKIY:UNKNOWN:RU-BVN
+RUSSIA:OULIANOVSKAïA OBLAST;KARSUNSKIY:UNKNOWN:RU-KU2
+RUSSIA:OULIANOVSKAïA OBLAST;ULYANOVSK:UNKNOWN:RU-UL 
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SERGIYEVSKIY:UNKNOWN:RU-SGV
+RUSSIA:OULIANOVSKAïA OBLAST;INZENSKIY:UNKNOWN:RU-INK
+RUSSIA:OULIANOVSKAïA OBLAST;DIMITROVGRAD:UNKNOWN:RU-DMG
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KAMYSHLENSKY:UNKNOWN:RU-KYE
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;ISAKLINSKIY:UNKNOWN:RU-IS1
+RUSSIA:OULIANOVSKAïA OBLAST;VESHKAYMSKIY:UNKNOWN:RU-VSY
+RUSSIA:OULIANOVSKAïA OBLAST;SENGILEYEVSKIY:UNKNOWN:RU-SNY
+RUSSIA:OULIANOVSKAïA OBLAST;TERENGULSKIY:UNKNOWN:RU-TRL
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;ELKHOVSKY:UNKNOWN:RU-ELK
+RUSSIA:OULIANOVSKAïA OBLAST;KUZOVATOVSKIY:UNKNOWN:RU-KZ6
+RUSSIA:PENZENSKAïA OBLAST;NIKOLSKIY:UNKNOWN:RU-NK1
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;POKHVISTNEVO:UNKNOWN:RU-PKT
+RUSSIA:PENZENSKAïA OBLAST;BEDNODEMYANOVSKIY:UNKNOWN:RU-BDS
+RUSSIA:PENZENSKAïA OBLAST;NAROVCHATSKIY:UNKNOWN:RU-NRY
+RUSSIA:PENZENSKAïA OBLAST;ISSINSKIY:UNKNOWN:RU-IS2
+RUSSIA:PENZENSKAïA OBLAST;LUNINO:UNKNOWN:RU-LUN
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;STAVROPOLSKIY:UNKNOWN:RU-ST7
+RUSSIA:OULIANOVSKAïA OBLAST;BAZARNOSYZGANSKIY:UNKNOWN:RU-BZZ
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KRASNOYARSKIY:UNKNOWN:RU-KO5
+RUSSIA:OULIANOVSKAïA OBLAST;BARYSHSKIY:UNKNOWN:RU-BYH
+RUSSIA:PENZENSKAïA OBLAST;ZEMETCHINSKIY:UNKNOWN:RU-ZMN
+RUSSIA:PENZENSKAïA OBLAST;VADINSKIY:UNKNOWN:RU-VD 
+RUSSIA:PENZENSKAïA OBLAST;NIZHNELOMOVSKIY:UNKNOWN:RU-NZ7
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SHIGONSKIY:UNKNOWN:RU-SIN
+RUSSIA:PENZENSKAïA OBLAST;MOKSHANSKIY:UNKNOWN:RU-MK2
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KINEL-CHERKASSKIY:UNKNOWN:RU-KEA
+RUSSIA:OULIANOVSKAïA OBLAST;BARYSH:UNKNOWN:RU-BA2
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;VOLZHSKIY:UNKNOWN:RU-VZS
+RUSSIA:PENZENSKAïA OBLAST;SOSNOVOBORSKIY:UNKNOWN:RU-SSO
+RUSSIA:PENZENSKAïA OBLAST;BESSONOVSKIY:UNKNOWN:RU-BSV
+RUSSIA:PENZENSKAïA OBLAST;GORODISCHENSKIY:UNKNOWN:RU-GR9
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;TOLYATTI:UNKNOWN:RU-TLT
+RUSSIA:PENZENSKAïA OBLAST;BASHMAKOVSKIY:UNKNOWN:RU-BSY
+RUSSIA:PENZENSKAïA OBLAST;PACHELMSKIY:UNKNOWN:RU-PCM
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SYZRANSKIY:UNKNOWN:RU-SY3
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KINELSKIY:UNKNOWN:RU-KE 
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;ZHIGULYOVSKIY:UNKNOWN:RU-ZH3
+RUSSIA:PENZENSKAïA OBLAST;KUZNETSKIY:UNKNOWN:RU-KZ7
+RUSSIA:PENZENSKAïA OBLAST;KAMENSKIY:UNKNOWN:RU-KE1
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;OTRADNYI:UNKNOWN:RU-OTD
+RUSSIA:OULIANOVSKAïA OBLAST;NOVOSPASSKIY:UNKNOWN:RU-NO3
+RUSSIA:OULIANOVSKAïA OBLAST;NIKOLAYEVSKIY:UNKNOWN:RU-NK2
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;BORSKIY:UNKNOWN:RU-BS 
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SAMARA:UNKNOWN:RU-SMA
+RUSSIA:PENZENSKAïA OBLAST;PENZA:UNKNOWN:RU-PEZ
+RUSSIA:PENZENSKAïA OBLAST;PENZENSKIY:UNKNOWN:RU-PN1
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;BOGATOVSKIY:UNKNOWN:RU-BG4
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KINEL:UNKNOWN:RU-KI9
+RUSSIA:PENZENSKAïA OBLAST;BELINSKIY:UNKNOWN:RU-BIY
+RUSSIA:PENZENSKAïA OBLAST;KAMENKA:UNKNOWN:RU-KE2
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;OKTYABRSK:UNKNOWN:RU-OKB
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;PRIVOLZHSKIY:UNKNOWN:RU-PIZ
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;BEZENCHUKSKIY:UNKNOWN:RU-BZ1
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;SYZRAN:UNKNOWN:RU-SYR
+RUSSIA:PENZENSKAïA OBLAST;KUZNETSK:UNKNOWN:RU-KZ8
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;NOVOKUYBYSHEVSK:UNKNOWN:RU-NOV
+RUSSIA:PENZENSKAïA OBLAST;SHEMYSHEYSKIY:UNKNOWN:RU-SE6
+RUSSIA:OULIANOVSKAïA OBLAST;RADISCHEVSKIY:UNKNOWN:RU-RDI
+RUSSIA:PENZENSKAïA OBLAST;KAMESHKIRSKIY:UNKNOWN:RU-KE3
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;NEFTEGORSKIY:UNKNOWN:RU-NFR
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;CHAPAYEVSK:UNKNOWN:RU-CAE
+RUSSIA:PENZENSKAïA OBLAST;NEVERKINSKIY:UNKNOWN:RU-NEN
+RUSSIA:OULIANOVSKAïA OBLAST;STAROKULATKINSKIY:UNKNOWN:RU-ST8
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KRASNOARMEYSKIY:UNKNOWN:RU-KOE
+RUSSIA:PENZENSKAïA OBLAST;KOLYSHLEYSKIY:UNKNOWN:RU-K3
+RUSSIA:PENZENSKAïA OBLAST;KONDOLSKIY:UNKNOWN:RU-KNL
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;ALEKSEYEVSKIY:UNKNOWN:RU-AEK
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;KHVOROSTYANSKIY:UNKNOWN:RU-KHA
+RUSSIA:OULIANOVSKAïA OBLAST;PAVLOVSKIY:UNKNOWN:RU-PV4
+RUSSIA:PENZENSKAïA OBLAST;SERDOBSKIY:UNKNOWN:RU-SRB
+RUSSIA:PENZENSKAïA OBLAST;TAMALINSKIY:UNKNOWN:RU-TM3
+RUSSIA:PENZENSKAïA OBLAST;LOPATINO:UNKNOWN:RU-LPI
+RUSSIA:SARATOVSKAïA OBLAST;KHVALYNSKIY:UNKNOWN:RU-KV3
+RUSSIA:PENZENSKAïA OBLAST;BEKOVSKIY:UNKNOWN:RU-BK 
+RUSSIA:SARATOVSKAïA OBLAST;DUKHOVNITSKIY:UNKNOWN:RU-DKT
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;BOLSHEGLUSHITSKIY:UNKNOWN:RU-BSH
+RUSSIA:SARATOVSKAïA OBLAST;BALTAYSKIY:UNKNOWN:RU-BT1
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;PESTRAVSKIY:UNKNOWN:RU-PS4
+RUSSIA:PENZENSKAïA OBLAST;MALOSERDOBINSKIY:UNKNOWN:RU-ML4
+RUSSIA:SARATOVSKAïA OBLAST;BAZARNO-KARABULAKSKIY:UNKNOWN:RU-BZB
+RUSSIA:SARATOVSKAïA OBLAST;VOLSKIY:UNKNOWN:RU-VS 
+RUSSIA:SARATOVSKAïA OBLAST;YEKATERINOVSKIY:UNKNOWN:RU-YKO
+RUSSIA:SARATOVSKAïA OBLAST;IVANTEYEVSKIY:UNKNOWN:RU-IVI
+RUSSIA:SARATOVSKAïA OBLAST;KHVALYNSK:UNKNOWN:RU-KV4
+RUSSIA:SARATOVSKAïA OBLAST;PETROVSKIY:UNKNOWN:RU-PT3
+RUSSIA:PENZENSKAïA OBLAST;SERDOBSK:UNKNOWN:RU-SDB
+RUSSIA:SARATOVSKAïA OBLAST;RTISCHEVSKIY:UNKNOWN:RU-RTV
+RUSSIA:SARATOVSKAïA OBLAST;NOVOBURASSKIY:UNKNOWN:RU-NO4
+RUSSIA:SARATOVSKAïA OBLAST;PUGACHYOVSKIY:UNKNOWN:RU-PGV
+RUSSIA:SAMARSKAïA (KOUïBYCHEVSKA;BOLSHECHERNIGOVSKIY:UNKNOWN:RU-BSN
+RUSSIA:SARATOVSKAïA OBLAST;PETROVSK:UNKNOWN:RU-PT4
+RUSSIA:SARATOVSKAïA OBLAST;TURKOVSKIY:UNKNOWN:RU-TK 
+RUSSIA:SARATOVSKAïA OBLAST;RTISHCHEVO:UNKNOWN:RU-RTC
+RUSSIA:SARATOVSKAïA OBLAST;ATKARSKIY:UNKNOWN:RU-ATY
+RUSSIA:SARATOVSKAïA OBLAST;BALAKOVSKIY:UNKNOWN:RU-BA3
+RUSSIA:SARATOVSKAïA OBLAST;PERELYUBSKIY:UNKNOWN:RU-PRB
+RUSSIA:SARATOVSKAïA OBLAST;ARKADAKSKIY:UNKNOWN:RU-AK2
+RUSSIA:SARATOVSKAïA OBLAST;VOSKRESENSKIY:UNKNOWN:RU-VS1
+RUSSIA:SARATOVSKAïA OBLAST;VOLSK:UNKNOWN:RU-VOS
+RUSSIA:SARATOVSKAïA OBLAST;BALAKOVO:UNKNOWN:RU-BAO
+RUSSIA:SARATOVSKAïA OBLAST;TATISCHEVSKIY:UNKNOWN:RU-TT1
+RUSSIA:SARATOVSKAïA OBLAST;PUGACHEV:UNKNOWN:RU-PGH
+RUSSIA:SARATOVSKAïA OBLAST;ROMANOVSKIY:UNKNOWN:RU-RM1
+RUSSIA:SARATOVSKAïA OBLAST;MARKSOVSKIY:UNKNOWN:RU-MR9
+RUSSIA:SARATOVSKAïA OBLAST;KRASNOPARTIZANSKIY:UNKNOWN:RU-KSZ
+RUSSIA:SARATOVSKAïA OBLAST;ATKARSK:UNKNOWN:RU-ATR
+RUSSIA:SARATOVSKAïA OBLAST;SARATOVSKIY:UNKNOWN:RU-ST9
+RUSSIA:SARATOVSKAïA OBLAST;BALASHOVSKIY:UNKNOWN:RU-BA4
+RUSSIA:SARATOVSKAïA OBLAST;YERSHOVSKIY:UNKNOWN:RU-YR8
+RUSSIA:SARATOVSKAïA OBLAST;KALININSKIY:UNKNOWN:RU-K4
+RUSSIA:SARATOVSKAïA OBLAST;MARX:UNKNOWN:RU-MAR
+RUSSIA:SARATOVSKAïA OBLAST;OZINSKIY:UNKNOWN:RU-OZK
+RUSSIA:SARATOVSKAïA OBLAST;LYSOGORSKIY:UNKNOWN:RU-LY1
+RUSSIA:SARATOVSKAïA OBLAST;SARATOV:UNKNOWN:RU-SAT
+RUSSIA:SARATOVSKAïA OBLAST;ENGELSKIY:UNKNOWN:RU-ENS
+RUSSIA:SARATOVSKAïA OBLAST;DERGACHYOVSKIY:UNKNOWN:RU-DRY
+RUSSIA:SARATOVSKAïA OBLAST;BALASHOV:UNKNOWN:RU-BA5
+RUSSIA:SARATOVSKAïA OBLAST;FEDOROVSKIY:UNKNOWN:RU-FDV
+RUSSIA:SARATOVSKAïA OBLAST;SOVETSKIY:UNKNOWN:RU-SE7
+RUSSIA:SARATOVSKAïA OBLAST;ENGELS:UNKNOWN:RU-ENL
+RUSSIA:SARATOVSKAïA OBLAST;SAMOYLOVSKIY:UNKNOWN:RU-SM 
+RUSSIA:SARATOVSKAïA OBLAST;KRASNOARMEYSKIY:UNKNOWN:RU-KO6
+RUSSIA:VOLGOGRADSKAïA OBLAST;NOVONIKOLAYEVSKIY:UNKNOWN:RU-NO5
+RUSSIA:SARATOVSKAïA OBLAST;KRASNOKUTSKIY:UNKNOWN:RU-KNT
+RUSSIA:VOLGOGRADSKAïA OBLAST;YELANSKIY:UNKNOWN:RU-YL2
+RUSSIA:VOLGOGRADSKAïA OBLAST;URYUPINSKIY:UNKNOWN:RU-UR2
+RUSSIA:SARATOVSKAïA OBLAST;ROVENSKIY:UNKNOWN:RU-RVK
+RUSSIA:VOLGOGRADSKAïA OBLAST;ZHIRNOVSKIY:UNKNOWN:RU-ZH4
+RUSSIA:VOLGOGRADSKAïA OBLAST;KIKVIDZENSKIY:UNKNOWN:RU-KKY
+RUSSIA:VOLGOGRADSKAïA OBLAST;RUDNYANSKIY:UNKNOWN:RU-RDY
+RUSSIA:SARATOVSKAïA OBLAST;KRASNOARMEYSK:UNKNOWN:RU-KO7
+RUSSIA:SARATOVSKAïA OBLAST;PITERSKIY:UNKNOWN:RU-PT5
+RUSSIA:SARATOVSKAïA OBLAST;NOVOUZENSKIY:UNKNOWN:RU-NO6
+RUSSIA:VOLGOGRADSKAïA OBLAST;NOVOANNINSKIY:UNKNOWN:RU-NO7
+RUSSIA:VOLGOGRADSKAïA OBLAST;URUPINSK:UNKNOWN:RU-UR3
+RUSSIA:VOLGOGRADSKAïA OBLAST;DANILOVSKIY:UNKNOWN:RU-DN 
+RUSSIA:VOLGOGRADSKAïA OBLAST;STAROPOLTAVSKIY:UNKNOWN:RU-SRA
+RUSSIA:VOLGOGRADSKAïA OBLAST;KAMYSHINSKIY:UNKNOWN:RU-K5
+RUSSIA:VOLGOGRADSKAïA OBLAST;KOTOVSKIY:UNKNOWN:RU-KT4
+RUSSIA:VOLGOGRADSKAïA OBLAST;NEKHAYEVSKIY:UNKNOWN:RU-NK3
+RUSSIA:VOLGOGRADSKAïA OBLAST;MIKHAYLOVSKIY:UNKNOWN:RU-MK3
+RUSSIA:SARATOVSKAïA OBLAST;ALEKSANDROV-GAYSKIY:UNKNOWN:RU-ALG
+RUSSIA:VOLGOGRADSKAïA OBLAST;ALEKSEYEVSKIY:UNKNOWN:RU-AEI
+RUSSIA:VOLGOGRADSKAïA OBLAST;PALLASOVSKIY:UNKNOWN:RU-PL3
+RUSSIA:VOLGOGRADSKAïA OBLAST;NIKOLAYEVSKIY:UNKNOWN:RU-NK4
+RUSSIA:VOLGOGRADSKAïA OBLAST;FROLOVSKIY:UNKNOWN:RU-FRI
+RUSSIA:VOLGOGRADSKAïA OBLAST;OLKHOVSKIY:UNKNOWN:RU-OLV
+RUSSIA:VOLGOGRADSKAïA OBLAST;KAMYSHIN:UNKNOWN:RU-K6
+RUSSIA:VOLGOGRADSKAïA OBLAST;MIKHAILOVKA:UNKNOWN:RU-MKL
+RUSSIA:VOLGOGRADSKAïA OBLAST;PODTELKOVSKIY:UNKNOWN:RU-PDK
+RUSSIA:VOLGOGRADSKAïA OBLAST;BYKOVSKIY:UNKNOWN:RU-BY6
+RUSSIA:VOLGOGRADSKAïA OBLAST;SERAFIMOVICHSKIY:UNKNOWN:RU-SRC
+RUSSIA:VOLGOGRADSKAïA OBLAST;FROLOVO:UNKNOWN:RU-FRO
+RUSSIA:VOLGOGRADSKAïA OBLAST;DUBOVSKIY:UNKNOWN:RU-DB2
+RUSSIA:VOLGOGRADSKAïA OBLAST;ILOVLINSKIY:UNKNOWN:RU-IL1
+RUSSIA:VOLGOGRADSKAïA OBLAST;KLETSKIY:UNKNOWN:RU-KE4
+RUSSIA:VOLGOGRADSKAïA OBLAST;LENINSKIY:UNKNOWN:RU-LN3
+RUSSIA:VOLGOGRADSKAïA OBLAST;KALACHEVSKIY:UNKNOWN:RU-KC3
+RUSSIA:VOLGOGRADSKAïA OBLAST;GORODISCHENSKIY:UNKNOWN:RU-GOH
+RUSSIA:VOLGOGRADSKAïA OBLAST;SREDNEAKHTUBINSKIY:UNKNOWN:RU-SET
+RUSSIA:VOLGOGRADSKAïA OBLAST;SUROVIKINSKIY:UNKNOWN:RU-SON
+RUSSIA:VOLGOGRADSKAïA OBLAST;VOLGOGRAD:UNKNOWN:RU-VGG
+RUSSIA:VOLGOGRADSKAïA OBLAST;VOLZHSKIY:UNKNOWN:RU-VZK
+RUSSIA:ASTRAKHANSKAïA OBLAST;AKHTUBINSKIY:UNKNOWN:RU-AK3
+RUSSIA:VOLGOGRADSKAïA OBLAST;SVETLOYARSKIY:UNKNOWN:RU-SE8
+RUSSIA:ASTRAKHANSKAïA OBLAST;CHYORNOYARSKIY:UNKNOWN:RU-CYY
+RUSSIA:VOLGOGRADSKAïA OBLAST;CHERNYSHKOVSKIY:UNKNOWN:RU-CE3
+RUSSIA:KALMYKIA;MALODERBETOVSKIY:UNKNOWN:RU-MLT
+RUSSIA:VOLGOGRADSKAïA OBLAST;OKTYABRSKIY:UNKNOWN:RU-OTS
+RUSSIA:ASTRAKHANSKAïA OBLAST;AKHTUBINSK:UNKNOWN:RU-AKB
+RUSSIA:KALMYKIA;OKTYABRSKIY:UNKNOWN:RU-OTK
+RUSSIA:VOLGOGRADSKAïA OBLAST;KOTELNIKOVSKIY:UNKNOWN:RU-KT5
+RUSSIA:ASTRAKHANSKAïA OBLAST;YENOTAYEVSKIY:UNKNOWN:RU-YNS
+RUSSIA:KALMYKIA;SARPINSKIY:UNKNOWN:RU-SPN
+RUSSIA:ASTRAKHANSKAïA OBLAST;KHARABALINSKIY:UNKNOWN:RU-KBL
+RUSSIA:KALMYKIA;YUSTINSKIY:UNKNOWN:RU-YS 
+RUSSIA:KALMYKIA;KETCHENEROVSKIY:UNKNOWN:RU-KTR
+RUSSIA:ASTRAKHANSKAïA OBLAST;KRASNOYARSKIY:UNKNOWN:RU-KO8
+RUSSIA:KALMYKIA;YASHKULSKIY:UNKNOWN:RU-YSL
+RUSSIA:KALMYKIA;TSELINNYI:UNKNOWN:RU-TS8
+RUSSIA:ASTRAKHANSKAïA OBLAST;NARIMANOVSKIY:UNKNOWN:RU-NR 
+RUSSIA:KALMYKIA;YASHALTINSKIY:UNKNOWN:RU-YS1
+RUSSIA:ASTRAKHANSKAïA OBLAST;VOLODARSKIY:UNKNOWN:RU-VOR
+RUSSIA:ASTRAKHANSKAïA OBLAST;PRIVOLZHSKIY:UNKNOWN:RU-PIH
+RUSSIA:KALMYKIA;PRIYUTINSKIY:UNKNOWN:RU-PII
+RUSSIA:ASTRAKHANSKAïA OBLAST;ASTRAKHAN:UNKNOWN:RU-ASA
+RUSSIA:KALMYKIA;ELISTA:UNKNOWN:RU-ELA
+RUSSIA:KALMYKIA;CHERNOZEMELSKIY:UNKNOWN:RU-CE4
+RUSSIA:KALMYKIA;GORODOVIKOVSKIY:UNKNOWN:RU-GOK
+RUSSIA:ASTRAKHANSKAïA OBLAST;IKRYANINSKIY:UNKNOWN:RU-IKN
+RUSSIA:KALMYKIA;IKI-BURULSKIY:UNKNOWN:RU-IKL
+RUSSIA:ASTRAKHANSKAïA OBLAST;KAMYZYAKSKIY:UNKNOWN:RU-KZ9
+RUSSIA:ASTRAKHANSKAïA OBLAST;LIMANSKIY:UNKNOWN:RU-LMS
+RUSSIA:KALMYKIA;KASPIYSKIY:UNKNOWN:RU-KP 
+RUSSIA:KALININGRADSKAïA OBLAST;GVARDEYSKIY:UNKNOWN:RU-GVS
+RUSSIA:KALININGRADSKAïA OBLAST;GURYEVSKIY:UNKNOWN:RU-GYV
+RUSSIA:KALININGRADSKAïA OBLAST;KALININGRAD:UNKNOWN:RU-KGD
+RUSSIA:KALININGRADSKAïA OBLAST;NESTEROVSKIY:UNKNOWN:RU-NSV
+RUSSIA:KALININGRADSKAïA OBLAST;CHERNYAKHOVSK:UNKNOWN:RU-CE5
+RUSSIA:KALININGRADSKAïA OBLAST;GUSEV:UNKNOWN:RU-GU 
+RUSSIA:KALININGRADSKAïA OBLAST;PRAVDINSKIY:UNKNOWN:RU-PAN
+RUSSIA:KALININGRADSKAïA OBLAST;OZERSKIY:UNKNOWN:RU-OZI
+RUSSIA:KALININGRADSKAïA OBLAST;SLAVSKIY:UNKNOWN:RU-S1
+RUSSIA:KALININGRADSKAïA OBLAST;ZELENOGRADSKIY:UNKNOWN:RU-ZLA
+RUSSIA:KALININGRADSKAïA OBLAST;SOVETSK:UNKNOWN:RU-SVT
+RUSSIA:KALININGRADSKAïA OBLAST;NEMANSKIY:UNKNOWN:RU-NMS
+RUSSIA:KALININGRADSKAïA OBLAST;KRAZNOZNAMENSKIY:UNKNOWN:RU-KZE
+RUSSIA:KALININGRADSKAïA OBLAST;NEMAN:UNKNOWN:RU-NE 
+RUSSIA:KALININGRADSKAïA OBLAST;POLESSKIY:UNKNOWN:RU-PL4
+RUSSIA:KALININGRADSKAïA OBLAST;SVETLOGORSK:UNKNOWN:RU-SEG
+RUSSIA:KALININGRADSKAïA OBLAST;CHERNYAKHOVSKIY:UNKNOWN:RU-CE6
+RUSSIA:KALININGRADSKAïA OBLAST;GUSEVSKIY:UNKNOWN:RU-GSK
+RUSSIA:KALININGRADSKAïA OBLAST;SVETLYI:UNKNOWN:RU-SE9
+RUSSIA:KALININGRADSKAïA OBLAST;BALTIYSK:UNKNOWN:RU-BT2
+RUSSIA:KALININGRADSKAïA OBLAST;BAGRATIONOVSKIY:UNKNOWN:RU-BGO
+SAN MARINO:SAN MARINO:UNKNOWN:SM-M
+SLOVENIA:SLOVENIJA:UNKNOWN:SI-01
+SWEDEN:NORRBOTTEN:UNKNOWN:SE-BD
+SWEDEN:V„STERBOTTEN:UNKNOWN:SE-AC
+SWEDEN:J„MTLAND:UNKNOWN:SE-Z
+SWEDEN:V„STERNORRLAND:UNKNOWN:SE-Y
+SWEDEN:G„VLEBORG:UNKNOWN:SE-X
+SWEDEN:KOPPARBERG:UNKNOWN:SE-KP
+SWEDEN:V„RMLAND:UNKNOWN:SE-S
+SWEDEN:UPPSALA:UNKNOWN:SE-C
+SWEDEN:V STMANLAND:UNKNOWN:SE-U
+SWEDEN:STOCKHOLM:UNKNOWN:SE-AB
+SWEDEN:OREBRO:UNKNOWN:SE-T
+SWEDEN:S”RMLAND:UNKNOWN:SE-D
+SWEDEN:ZLVSBORG:UNKNOWN:SE-L
+SWEDEN:B”HUS:UNKNOWN:SE-BH
+SWEDEN:SKARABORG:UNKNOWN:SE-SK
+SWEDEN:OSTERG”TLAND:UNKNOWN:SE-ST
+SWEDEN:GOTLAND:UNKNOWN:SE-I
+SWEDEN:J”NK”PING:UNKNOWN:SE-F
+SWEDEN:KALMAR:UNKNOWN:SE-H
+SWEDEN:HALLAND:UNKNOWN:SE-N
+SWEDEN:KRONOBERG:UNKNOWN:SE-G
+SWEDEN:KRISTIANSTAD:UNKNOWN:SE-RI
+SWEDEN:BLEKINGE:UNKNOWN:SE-K
+SWEDEN:MALM”HUS:UNKNOWN:SE-MO
+UNITED KINGDOM:DUMFRIES-GALLO:UNKNOWN:GB-DGY
+UNITED KINGDOM:NORTHERN IRELAND:UNKNOWN:GB-NIR
+UNITED KINGDOM:CLEVELAND:UNKNOWN:GB-CLV
+UNITED KINGDOM:UNITED KINGDOM:UNKNOWN:GB-UK
+UNITED KINGDOM:HUMBERSIDE:UNKNOWN:GB-HUM
+UNITED KINGDOM:WEST YORKSHIRE:UNKNOWN:GB-WYO
+UNITED KINGDOM:MERSEYSIDE:UNKNOWN:GB-MER
+UNITED KINGDOM:GREATER MANCHESTER:UNKNOWN:GB-MAN
+UNITED KINGDOM:SOUTH YORKSHIRE:UNKNOWN:GB-SYO
+UNITED KINGDOM:CLWYD:UNKNOWN:GB-CLW
+UNITED KINGDOM:EAST ANGLIA:UNKNOWN:GB-EAG
+UNITED KINGDOM:HEREFORD:UNKNOWN:GB-HEF
+UNITED KINGDOM:WEST MIDLANDS:UNKNOWN:GB-WMD
+UNITED KINGDOM:BERKS:UNKNOWN:GB-BER
+UNITED KINGDOM:AVON:UNKNOWN:GB-AVO
+UNITED KINGDOM:GWENT:UNKNOWN:GB-GWT
+UNITED KINGDOM:GREATER LONDON:UNKNOWN:GB-LND
+UNITED KINGDOM:GRAMPIAN:UNKNOWN:GB-GRA
+UNITED KINGDOM:BORD-CENTR-FIFE-LOTHIAN-TAY:UNKNOWN:GB-BCF
+UNITED KINGDOM:HIGHLANDS:UNKNOWN:GB-HGL
+UNITED KINGDOM:WEST MIDLANDS (COUNTY):UNKNOWN:GB-WMI
+BOSNIA AND HERZEGOVINA:BOSNA I HERCEGOVINA:UNKNOWN:BA-BIH
+YUGOSLAVIA:Vojvodina:UNKNOWN:YU-VOJ
+YUGOSLAVIA:Srbija:UNKNOWN:YU-SRB
+YUGOSLAVIA:Crna Gora:UNKNOWN:YU-CGO
+YUGOSLAVIA:Kosovo:UNKNOWN:YU-KOS
+YUGOSLAVIA:Makedonija:UNKNOWN:YU-MKD
+Azerbaijan:Azerbaydzhan Territor:UNKNOWN:AZ-ATE
+Azerbaijan:Nagorno-Karabakh:UNKNOWN:AZ-NKA
+Azerbaijan:Nakhichevan:UNKNOWN:AZ-NAK
+Kazakhstan:Aktyubinsk:UNKNOW:KZ-AKT
+Kazakhstan:Alma-Ata:UNKNOWN:KZ-ALM
+Kazakhstan:Aral Sea:UNKNOWN:KZ-ARS
+Kazakhstan:Chimkent:UNKNOWN:KZ-CHI
+Kazakhstan:Dzhambul:UNKNOWN:KZ-DZA
+Kazakhstan:Dzhezkazgan:UNKNOWN:KZ-DZE
+Kazakhstan:East Kazakhstan:UNKNOWN:KZ-EAK
+Kazakhstan:Guryev:UNKNOWN:KZ-GUR
+Kazakhstan:Karaganda:UNKNOWN:KZ-KAR
+Kazakhstan:Kochetav:UNKNOWN:KZ-KOC
+Kazakhstan:Kustanay:UNKNOWN:KZ-KUS
+Kazakhstan:Kzyl-Orda:UNKNOWN:KZ-KZO
+Kazakhstan:North Kazakhstan:UNKNOWN:KZ-NOK
+Kazakhstan:Pavlodar:UNKNOWN:KZ-PAV
+Kazakhstan:Semipalatinsk:UNKNOWN:KZ-SEM
+Kazakhstan:Taldy Kurgan:UNKNOWN:KZ-TAK
+Kazakhstan:Tselinograd:UNKNOWN:KZ-TSE
+Kazakhstan:Uralsk:UNKNOWN:KZ-URA
+Kyrgyzstan:Issyk-Kul:UNKNOWN:KG-ISK
+Kyrgyzstan:Kirghizistan Territories:UNKNOWN:KG-KIT
+MK:MAKEDONIJA:UNKNOWN:MK-M
+MACEDONIA:MAKEDONIJA:UNKNOWN:MK-M
+MOLDOVIA:MOLDAVIA:UNKNOWN:MD-M
+Pakistan:F.C.T.:UNKNOWN:PK-FC
+Tajikistan:Leninabad:UNKNOWN:TJ-LE
+Tajikistan:Tadzhikistan Territories:UNKNOWN:TJ-TA
+Turkey:K. Maras:UNKNOWN:TR-KMA
+Turkmenistan:Chardzhou:UNKNOWN:TM-CHA
+Turkmenistan:Tashauz:UNKNOWN:TM-TAS
+Turkmenistan:Turkmenistan Territories:UNKNOWN:TM-TT
+Uzbekistan:Aral Sea:UNKNOWN:UZ-AS
+Algeria:Adrar:Adrar1:DZ-0
+Algeria:Ain Dafla:Ain Defla:DZ-44
+Algeria:Ain Tamouchent:Ain temouchent:DZ-46
+Algeria:Borjbouarirej:Bordj Bou Arreridj:DZ-34
+Algeria:GhardaSa:Ghardaia:DZ-47
+Algeria:Media:Medea:DZ-26
+Algeria:Mostaghanem:Mostaganem:DZ-27
+Algeria:Tamanrasset:Tamanghasset:DZ-TAM
+Algeria:Tendouf:Tindouf:DZ-37
+Angola:Malanje:Malange:AO-MAL
+Angola:Uige:Uge:AO-UIG
+Angola:Huila:Hula:AO-HUI
+Burundi:Muramviya:Muramvya:BI-MU
+Cape Verde:Fogo:UNKNOWN:CV-FO
+Cape Verde:Santo Antao:UNKNOWN:CV-SON
+Cape Verde:Sao Nicolau:So Nicolau:CV-SN
+Cape Verde:Sao Vicente:So Vicente:CV-SV
+Central African Republic:Sangha1:Sangha-Mbaere:CF-SA
+Chad:Lake:Lac:TD-LC
+Chad:Logone Occiden:Logone-Occidental:TD-LO
+Chad:Logone Orienta:Logone-Oriental:TD-LR
+Comoros:Grand Comore:Grande Comore:KM-G
+Comoros:Ile de Mayotte (Fr.):UNKNOWN:KM-ILM
+Comoros:Mwali:Moheli:KM-M
+Comoros:Nzwani:UNKNOWN:KM-NZ
+Egypt:Frontier Governates:UNKNOWN:EG-FRG
+Egypt:Lower Egypt:UNKNOWN:EG-LOE
+Egypt:Upper Egypt:UNKNOWN:EG-UPE
+Egypt:Urban Governates:UNKNOWN:EG-URG
+Equatorial Guinea:Kientem:Kie-Ntem:GQ-KN
+Equatorial Guinea:Welenzas:Wele-Nzas:GQ-WN
+Eritrea:Akele Guzay:UNKNOWN:ER-AKG
+Eritrea:Akordat:UNKNOWN:ER-AK
+Eritrea:Asseb:UNKNOWN:ER-AS
+Eritrea:Gash & Setit:UNKNOWN:ER-GAS
+Eritrea:Hamassien:UNKNOWN:ER-HA
+Eritrea:Keren:UNKNOWN:ER-KE
+Eritrea:Key Bahir:Debuwabi Keyih Bahri:ER-DK
+Eritrea:Sahel:UNKNOWN:ER-SA
+Eritrea:Seraye:UNKNOWN:ER-SE
+Gabon:Wouleu-Ntem:Woleu-Ntem:GA-9
+Ghana:Western2:Western:GH-WP
+Ivory Coast:Man:UNKNOWN:CI-MN
+Ivory Coast:San-Pedro:UNKNOWN:CI-SP
+Ivory Coast:Abengourou:UNKNOWN:CI-ABE
+Ivory Coast:Abidjan:UNKNOWN:CI-ABI
+Ivory Coast:Aboisso:UNKNOWN:CI-ABO
+Ivory Coast:Adzope:UNKNOWN:CI-AD
+Ivory Coast:Agboville:UNKNOWN:CI-AGB
+Ivory Coast:Agnibilekro:UNKNOWN:CI-AGN
+Ivory Coast:Bangolo:UNKNOWN:CI-BAN
+Ivory Coast:Beoumi:UNKNOWN:CI-BEO
+Ivory Coast:Biankouma:UNKNOWN:CI-BIA
+Ivory Coast:Bondoukou:UNKNOWN:CI-BOD
+Ivory Coast:Bongouanou:UNKNOWN:CI-BOG
+Ivory Coast:Bouafle:UNKNOWN:CI-BOF
+Ivory Coast:Bouake:UNKNOWN:CI-BOK
+Ivory Coast:Bouna:UNKNOWN:CI-BOU
+Ivory Coast:Boundiali:UNKNOWN:CI-BON
+Ivory Coast:Dabakala:UNKNOWN:CI-DAK
+Ivory Coast:Daloa:UNKNOWN:CI-DAL
+Ivory Coast:Danane:UNKNOWN:CI-DAN
+Ivory Coast:Daoukro:UNKNOWN:CI-DAO
+Ivory Coast:Dimbokro:UNKNOWN:CI-DIM
+Ivory Coast:Divo:UNKNOWN:CI-DIV
+Ivory Coast:Duekoue:UNKNOWN:CI-DUE
+Ivory Coast:Ferkessedougou:UNKNOWN:CI-FER
+Ivory Coast:Gagnoa:UNKNOWN:CI-GAG
+Ivory Coast:Grand-Lahou:UNKNOWN:CI-LAH
+Ivory Coast:Guiglo:UNKNOWN:CI-GUI
+Ivory Coast:Issia:UNKNOWN:CI-ISS
+Ivory Coast:Katiola:UNKNOWN:CI-KAT
+Ivory Coast:Korhogo:UNKNOWN:CI-KOR
+Ivory Coast:Lakota:UNKNOWN:CI-LAK
+Ivory Coast:M'bahiakro:UNKNOWN:CI-MBA
+Ivory Coast:Mankono:UNKNOWN:CI-MAN
+Ivory Coast:Odienne:UNKNOWN:CI-ODI
+Ivory Coast:Oume:UNKNOWN:CI-OU
+Ivory Coast:Sakassou:UNKNOWN:CI-SAK
+Ivory Coast:Sassandra:UNKNOWN:CI-SAS
+Ivory Coast:Seguela:UNKNOWN:CI-SEG
+Ivory Coast:Sinfra:UNKNOWN:CI-SIN
+Ivory Coast:Soubre:UNKNOWN:CI-SOR
+Ivory Coast:Tabou:UNKNOWN:CI-TAB
+Ivory Coast:Tanda:UNKNOWN:CI-TAN
+Ivory Coast:Tengrela:UNKNOWN:CI-TEN
+Ivory Coast:Tiassale:UNKNOWN:CI-TIA
+Ivory Coast:Touba:UNKNOWN:CI-TOB
+Ivory Coast:Toumodi:UNKNOWN:CI-TOM
+Ivory Coast:Vavoua:UNKNOWN:CI-VAV
+Ivory Coast:Yamoussoukro:UNKNOWN:CI-YAM
+Ivory Coast:Zuenoula:UNKNOWN:CI-ZUE
+Lesotho:Mohale'S Hoek:Mohales Hoek:LS-F
+Lesotho:Quacha'S Nek:Quachas Nek:LS-H
+Liberia:Bomi Terr.:Bomi:LR-BM
+Liberia:Kru Coast Terr.:Grand Kru:LR-GK
+Liberia:Marshall Terr.:UNKNOWN:LR-MR
+Liberia:Rivercess Terr.:Rivercess:LR-RI
+Liberia:Sasstown Terr.:UNKNOWN:LR-SA
+Libya:Ajdabiya (Agedabia):UNKNOWN:LY-ADJ
+Libya:Al Aziziyah:UNKNOWN:LY-AZY
+Libya:Al Fatah:UNKNOWN:LY-FTH
+Libya:Al Jabal Al Akhdar:Al Jabal Al Akhar:LY-JA
+Libya:Al Khoms:UNKNOWN:LY-KHO
+Libya:Ash Shati:UNKNOWN:LY-ASH
+Libya:Awbari (Ubari):UNKNOWN:LY-AWB
+Libya:Az Zawia (Azzawiya):Az Zwiyah:LY-ZA
+Libya:Banghazi:Banghz:LY-BA
+Libya:Ghadamis:UNKNOWN:LY-GHA
+Libya:Gharyan:UNKNOWN:LY-GRY
+Libya:Misurata:UNKNOWN:LY-MIS
+Libya:Nuqat Al Khams:UNKNOWN:LY-NUG
+Libya:Sabha:UNKNOWN:LY-SAB
+Libya:Sawfajjin (Sofuljeen):UNKNOWN:LY-SAW
+Libya:Surt (Sirte):UNKNOWN:LY-SUR
+Libya:Tarhunah:UNKNOWN:LY-TAR
+Libya:Tripoli (Tarabulus):UNKNOWN:LY-TRI
+Libya:Tubruq (Tobruk):UNKNOWN:LY-TUB
+Libya:Yafran (Yefren):UNKNOWN:LY-YAF
+Libya:Zeleitin (Zliten):UNKNOWN:LY-ZEL
+Madagascar:Toliary:Toliara:MG-U
+Mauritius:Mauritius:UNKNOWN:MUS-M
+Morocco:Centre Nord:UNKNOWN:MA-CEN
+Morocco:Centre Sud:UNKNOWN:MA-CES
+Morocco:Oriental:UNKNOWN:MA-OR
+Morocco:Tensift:UNKNOWN:MA-TE
+Morocco:NORD OUEST:UNKNOWN:MA-N
+Morocco:CENTRE:UNKNOWN:MA-C
+Morocco:SUD:UNKNOWN:MA-S
+Mozambique:Nassa:Niassa:MZ-A
+Namibia:Bethanien:UNKNOWN:NA-BET
+Namibia:Boesmanland:UNKNOWN:NA-BO
+Namibia:Damaraland:UNKNOWN:NA-DA
+Namibia:Gobabis:UNKNOWN:NA-GO
+Namibia:Grootfontein:UNKNOWN:NA-GR
+Namibia:Hereroland East:UNKNOWN:NA-HEA
+Namibia:Hereroland West:UNKNOWN:NA-HEW
+Namibia:Kaokoland:UNKNOWN:NA-KAK
+Namibia:Karasburg:UNKNOWN:NA-KAS
+Namibia:Karibib:UNKNOWN:NA-KIB
+Namibia:Kavango:UNKNOWN:NA-KAV
+Namibia:Keetmanshoop:UNKNOWN:NA-KE
+Namibia:Luderitz:UNKNOWN:NA-LU
+Namibia:Maltahohe:UNKNOWN:NA-MLT
+Namibia:Mariental:UNKNOWN:NA-MRI
+Namibia:Namaland:UNKNOWN:NA-NAL
+Namibia:Okahandja:UNKNOWN:NA-OKD
+Namibia:Omaruru:UNKNOWN:NA-OMU
+Namibia:Otjiwarongo:UNKNOWN:NA-OTI
+Namibia:Outjo:UNKNOWN:NA-OUT
+Namibia:Owambo:UNKNOWN:NA-OWA
+Namibia:Rehoboth:UNKNOWN:NA-RBH
+Namibia:Swakopmund:UNKNOWN:NA-SWK
+Namibia:Tsumeb:UNKNOWN:NA-TSB
+Namibia:Windhoek:UNKNOWN:NA-WIH
+Niger:Tillabery:Tillaberi:NE-6
+Nigeria:Adamwara:UNKNOWN:NG-AWM
+Nigeria:Akwalbom:UNKNOWN:NG-AKW
+Nigeria:FCT:UNKNOWN:NG-FCT
+Rwanda:Kibungu:Kibungo:RW-J
+Rwanda:Kigali:Kigali-Rural:RW-K
+Sao Tome and Principe:Principe:Prncipe:ST-P
+Sao Tome and Principe:Sao Tome:So Tome:ST-S
+Senegal:Dagana:UNKNOWN:SN-DAG
+Senegal:Bakel:UNKNOWN:SN-BAK
+Senegal:Bambey:UNKNOWN:SN-BBY
+Senegal:Bignona:UNKNOWN:SN-BGO
+Senegal:Foundiougne:UNKNOWN:SN-FDI
+Senegal:Gossas:UNKNOWN:SN-GS
+Senegal:Kaffrine:UNKNOWN:SN-KAF
+Senegal:Kebemer:UNKNOWN:SN-KEM
+Senegal:Kedougou:UNKNOWN:SN-KEU
+Senegal:Linguere:UNKNOWN:SN-LGE
+Senegal:Mbacke:UNKNOWN:SN-MBK
+Senegal:Mbour:UNKNOWN:SN-MBU
+Senegal:Nioro-Du-Rip:UNKNOWN:SN-NDR
+Senegal:Oussouye:UNKNOWN:SN-OUY
+Senegal:Pikine:UNKNOWN:SN-PKE
+Senegal:Podor:UNKNOWN:SN-PDR
+Senegal:Rufisque-Bargny:UNKNOWN:SN-RUQ
+Senegal:Sedhiou:UNKNOWN:SN-SDH
+Senegal:Tivaouane:UNKNOWN:SN-TVO
+Senegal:Velingara:UNKNOWN:SN-VGR
+Seychelles:Mahe Island:UNKNOWN:SC-M
+Seychelles:Praslin Island:UNKNOWN:SC-P
+Somalia:Gado:Gedo:SO-GE
+Somalia:Hiiran:Hiiraan:SO-HI
+Somalia:J. Dhexe:Jubbada Dhexe:SO-JD
+Somalia:J. Hoose:Jubbada Hoose:SO-JH
+Somalia:Sh. Dhexe:Shabeellaha Dhexe:SO-SD
+Somalia:Sh. Hoose:Shabeellaha Hoose:SO-SH
+Somalia:Tog-Dheer:Togdheer:SO-TO
+Somalia:W. Galbeed:Woqooyi Galbeed:SO-WO
+South Africa:Natal:UNKNOWN:ZA-NAT
+South Africa:Orange:UNKNOWN:ZA-OR
+South Africa:Orange Free State:UNKNOWN:ZA-OFS
+South Africa:PWV:UNKNOWN:ZA-PWM
+Sudan:Bahr el Ghazal:UNKNOWN:SD-BEG
+Sudan:Darfur:UNKNOWN:SD-DAF
+Sudan:Equatoria:UNKNOWN:SD-EQ
+Sudan:Khartoum:UNKNOWN:SD-KHA
+Sudan:Kordufan:UNKNOWN:SD-KOR
+Sudan:Upper Nile:UNKNOWN:SD-UPN
+Tanzania United Republic:L. Victoria:UNKNOWN:TZ-VI
+Tunisia:Region 1:UNKNOWN:TN-R1
+Tunisia:Region 2:UNKNOWN:TN-R2
+Tunisia:Region 3:UNKNOWN:TN-R3
+Tunisia:Region 4:UNKNOWN:TN-R4
+Tunisia:Region 5:UNKNOWN:TN-R5
+Tunisia:Region 6:UNKNOWN:TN-R6
+Tunisia:Region 7:UNKNOWN:TN-R7
+Uganda:Lake Victoria:UNKNOWN:UG-V
+Zambia:Central3:UNKNOWN:ZM-C3
+Zambia:Eastern4:UNKNOWN:ZM-E4
+Zambia:Northern4:UNKNOWN:ZM-N4
+Zambia:Southern3:UNKNOWN:ZM-S3
+Zambia:Western4:UNKNOWN:ZM-W4
+Bahrain:Bahrain:UNKNOWN:BH-B
+Iraq:Al-Anbar:Al Anbr:IQ-AN
+Iraq:Al-Basrah:Al Barah:IQ-BA
+Iraq:Al-Muthannia:Al Muthanna:IQ-MU
+Iraq:Al-Qadisiyah:Al Qdisyah:IQ-QA
+Iraq:Arbil:Arbl:IQ-AR
+Iraq:At-Tamim:At Tamm:IQ-TS
+Iraq:Babil:Bbil:IQ-BB
+Iraq:Baghdad:Baghdd:IQ-BG
+Iraq:Dhi-Qar:Dh Qr:IQ-DQ
+Iraq:Dihok:Dahk:IQ-DA
+Iraq:Diyala:Diyla:IQ-DI
+Iraq:IRQ/SAU Neutral Zone:UNKNOWN:IQ-NEU
+Iraq:Karbala:Karbal:IQ-KA
+Iraq:Misan:Maysn:IQ-MA
+Iraq:Neineva:Nnawa:IQ-NI
+Iraq:Salahuddin:alad Dn:IQ-SD
+Iraq:Sulaymaniyah:As Sulaymnyah:IQ-SU
+Iraq:Wasit:Wsi:IQ-WA
+Iran:Bakhtaran:UNKNOWN:IR-BKT
+Iran:Bushehr:Bshehr:IR-06
+Iran:Chaharmahal and Bakhtiar:Chahr Mahll va Bakhtr:IR-08
+Iran:East Azarbayejan:UNKNOWN:IR-EAZ
+Iran:Esfahan:Efahn:IR-04
+Iran:Fars:Frs:IR-4
+Iran:Gilan:Gln:IR-9
+Iran:Hamadan:Hamadn:IR-24
+Iran:Horasan:UNKNOWN:IR-HSA
+Iran:Hormozgan:Hormozgn:IR-23
+Iran:Ilam:lm:IR-05
+Iran:Kerman:Kermn:IR-5
+Iran:Khuzestan:Khzestn:IR-0
+Iran:Kohgiluyeh & Boyer Ahmad:Kohklyeh va Byer Ahmad:IR-8
+Iran:Kordestan:Kordestn:IR-6
+Iran:Lorestan:UNKNOWN:IR-LRS
+Iran:Markazi:UNKNOWN:IR-MKZ
+Iran:Mazandaran:UNKNOWN:IR-MZD
+Iran:Semnan:UNKNOWN:IR-SEM
+Iran:Sistan and Baluchestan:UNKNOWN:IR-SBL
+Iran:Tehran:UNKNOWN:IR-THR
+Iran:West Azarbayejan:UNKNOWN:IR-WAJ
+Iran:Zanjan:UNKNOWN:IR-Z
+Jordan:Amman:mmn:JO-AM
+Jordan:Karak:Al Karak:JO-KA
+Jordan:Ma-an:Man:JO-MN
+Jordan:Mafraq:Al Mafraq:JO-MA
+Jordan:Salt (Balqa):Al Balq:JO-BA
+Jordan:Tafila:A aflah:JO-AT
+Jordan:Zarqa:Az Zarq:JO-AZ
+Kuwait:Kuwait:UNKNOWN:KW-K
+Lebanon:Lebanon:UNKNOWN:LB-L
+Oman:A Dakhliya:Ad Dakhiliyah:OM-DA
+Oman:A Sharqiya:Ash Sharqyah:OM-SH
+Oman:Al Batnah:Al Bainah:OM-BA
+Oman:Al Dhahira:UNKNOWN:OM-DHA
+Oman:Al Wusta:UNKNOWN:OM-WU
+Oman:Dhofar:UNKNOWN:OH-DHF
+Oman:Muscat:Masqa:OM-MA
+Qatar:Qatar:UNKNOWN:QA-Q
+Syria:Aleppo (Halab):alab:SY-HL
+Syria:As Suwayda:As Suwayd:SY-SU
+Syria:Dara:Dar:SY-DR
+Syria:Hamah:amh:SY-HM
+Syria:Hasaka (Al Haksa):Al asakah:SY-HA
+Syria:Homs (Hims):im:SY-HI
+Syria:Kuneitra (El Qunaytirah:Al Qunayirah:SY-QU
+Syria:Lattakia (Al Ladhiqiyah:Al Ladhiqiyah:SY-LA
+Syria:Tartus:ars:SY-TA
+UnitedArabEmirates::Neutral Zone:UNKNOWN:AE-NEU
+Yemen:Former North Yemen:UNKNOWN:YE-N
+Yemen:Former South Yemen:UNKNOWN:YE-S
+Mexico:Baja California Norte:Baja California: MX-BCN
+Mexico:Queretaro de Arteaga:Queretaro:MX-QUE
+Mexico:Michoacan de Ocampo:Michoacan:MX-MIC
+Mexico:Yucatan:Yucatn:MX-YUC
+Mexico:Coahuila De Zaragoza:Cohauila:MX-COA
+Mexico:San Luis Potosi:San Luis Potos:MX-SLP
+Mexico:Nuevo Leon:Nuevo Len:MX-NLE
+Mexico:Veracruz-Llave:Veracruz:MX-VER
+ARGENTINA:BUENOS AIRES D.F.:Capital federal:AR-C
+ARGENTINA:CORDOBA:Crdoba:AR-X
+ARGENTINA:ENTRE RIOS:Entre Ros:AR-E
+ARGENTINA:RIO NEGRO:Ro Negro:AR-R
+ARGENTINA:TUCUMAN:Tucumn:AR-T
+BOLIVIA:BENI:El Beni:BO-B
+BOLIVIA:POTOSI:Potos:BO-P
+BRASIL:Capanema:UNKNOWN:BR-CAP
+BRASIL:MARANHAO/PIAUI:UNKNOWN:BR-MP
+BRASIL:Porto Xavier:UNKNOWN:BR-PRX
+CHILE:AISEN:Aisen del General Carlos Ibez del Campo:CL-AI
+CHILE:ANTARTICA CHILENA:UNKNOWN:CL-ANT
+CHILE:ARAUCO:UNKNOWN:CL-ARC
+CHILE:ARICA:UNKNOWN:CL-ARI
+CHILE:BIOBIO:bo-bo:CL-BI
+CHILE:CACHAPOAL:UNKNOWN:CL-CHP
+CHILE:CAPITAN PRAT:UNKNOWN:CL-CPT
+CHILE:CARDENAL CARO:UNKNOWN:CL-CAR
+CHILE:CAUQUENES:UNKNOWN:CL-CAU
+CHILE:CAUTIN:UNKNOWN:CL-CTN
+CHILE:CHACABUCO:UNKNOWN:CL-CBU
+CHILE:CHANARAL:UNKNOWN:CL-CHN
+CHILE:CHILOE:UNKNOWN:CL-CLE
+CHILE:CHOAPA:UNKNOWN:CL-CPA
+CHILE:COIHAIQUE:UNKNOWN:CL-CHQ
+CHILE:COLCHAGUA:UNKNOWN:CL-CHG
+CHILE:COPIAPO:UNKNOWN:CL-COP
+CHILE:CURICO:UNKNOWN:CL-CUR
+CHILE:EL LOA:UNKNOWN:CL-EL
+CHILE:ELQUI:UNKNOWN:CL-ELQ
+CHILE:GENERAL CARRERA:UNKNOWN:CL-GCR
+CHILE:HUASCO:UNKNOWN:CL-HUA
+CHILE:IQUIQUE:UNKNOWN:CL-IQI
+CHILE:LIMARI:UNKNOWN:CL-LIM
+CHILE:LINARES:UNKNOWN:CL-LIN
+CHILE:LLANQUIHUE:UNKNOWN:CL-LLA
+CHILE:LOS ANDES:UNKNOWN:CL-AND
+CHILE:MAIPO:UNKNOWN:CL-MIP
+CHILE:MALLECO:UNKNOWN:CL-MLL
+CHILE:MELIPILLA:UNKNOWN:CL-MIL
+CHILE:NUBLE:UNKNOWN:CL-NUB
+CHILE:OSORNO:UNKNOWN:CL-OSR
+CHILE:PALENA:UNKNOWN:CL-PAL
+CHILE:PARINACOTA:UNKNOWN:CL-PAN
+CHILE:PETORCA:UNKNOWN:CL-PET
+CHILE:QUILLOTA:UNKNOWN:CL-QUI
+CHILE:SAN ANTONIO:UNKNOWN:CL-SAT
+CHILE:SAN FELIPE DE ACONCAGUA:UNKNOWN:CL-ACO
+CHILE:TALAGANTE:UNKNOWN:CL-TAL
+CHILE:TALCA:UNKNOWN:CL-TCA
+CHILE:TOCOPILLA:UNKNOWN:CL-TOC
+CHILE:ULTIMA ESPERANZA:UNKNOWN:CL-ESP
+CHILE:VALDIVIA:UNKNOWN:CL-VDI
+CHILE:VALPARAISO:UNKNOWN:CL-VAL
+CHILE:CONCEPCION:UNKNOWN:CL-CON
+CHILE:CORDILLERA:UNKNOWN:CL-COR
+CHILE:SANTIAGO:UNKNOWN:CL-SGO
+CHILE:TIERRA DEL FUEGO:UNKNOWN:CL-TF
+COLOMBIA:Atlantico:Atlantco:CO-ATL
+COLOMBIA:Bolivar:Bolvar:CO-BOL
+COLOMBIA:Boyaca:Boyac:CO-BOY
+COLOMBIA:Buenaventura:UNKNOWN:CO-BUE
+COLOMBIA:Caqueta:Caquet:CO-CAQ
+COLOMBIA:Choco:Choc:CO-CHO
+COLOMBIA:Cordoba:Crdoba:CO-COR
+COLOMBIA:Guajira:La Guajira:CO-LAG
+COLOMBIA:Guania:Guaina:CO-GUA
+COLOMBIA:Narino:Nario:CO-NAR
+COLOMBIA:Quindio:Quindo:CO-QUI
+COLOMBIA:San Andres y Providencia:San Andres, Providencia y Santa Catalina:CO-SAP
+ECUADOR:BOLIVAR:Bolvar:EC-B
+ECUADOR:CANAR:Caar:EC-F
+ECUADOR:LOS RIOS:Los Ros:EC-R
+ECUADOR:MANABI:Manab:EC-M
+ECUADOR:SUCUMBIOS:Sucumbos:EC-U
+ECUADOR:Zona No Delimtda:UNKNOWN:EC-ZND
+GUYANA:BARIMA/WAINI:UNKNOWN:GY-BAW
+PARAGUAY:CAAGUAZU:UNKNOWN:PY-CAZ
+URUGUAY:PAYSANDU:Paysand:UY-PA
+URUGUAY:RIO NEGRO:Ro Negro:UY-RN
+URUGUAY:TACUAREMBO:Tacuaremb:UY-TA
+VENEZUELA:ANZOATEGUI:Anzotegui:VE-B
+VENEZUELA:BOLIVAR:Bolvar:VE-F
+VENEZUELA:FALCON:Falcn:VE-I
+VENEZUELA:GUARICO:Gurico:VE-J
+VENEZUELA:TACHIRA:Tchira:VE-S
+Bangladesh:Barisal Div:Barisal zila:BD-06
+Bangladesh:Chittagong Div:Chittangong zila:BD-0
+Bangladesh:Dhaka Div:Dhaka zila:BD-3
+Bangladesh:Khulna Div:Khulna zila:BD-27
+Bangladesh:Rajshahi Div:Rajshani zila:BD-54
+Brunei:Muara/Seria/Tutong:Tutong:BN-TU
+Bhutan:Chirang:UNKNOWN:BT-CNG
+Bhutan:Chukha:Chhukha:BT-2
+Bhutan:Daga:UNKNOWN:BT-DA
+Bhutan:Gaylegphug (Sarbhang):Sarpang:BT-36
+Bhutan:Haa:Ha:BT-3
+Bhutan:Lhuntshi:Lhuentse:BT-44
+Bhutan:Mongar:Monggar:BT-42
+Bhutan:Pema Gatshel:Pemagatshel:BT-43
+Bhutan:Samchi:Samtse:BT-4
+Bhutan:Samdrup Jongkhar:Samdrup Jongkha:BT-45
+Bhutan:Shengang:Zhemgang:BT-37
+Bhutan:Tashigang:Tsirang:BT-38
+Bhutan:Tongsa:Trongsa:BT-32
+Bhutan:Wangdiphodrang:Wangdue Phodrang:BT-24
+Cambodia:Banteay Meanchey:UNKNOWN:KH-BEA
+Cambodia:Battambang:UNKNOWN:KH-BTG
+Cambodia:Kampong Cham:UNKNOWN:KH-KPC
+Cambodia:Kampong Speu:UNKNOWN:KH-KMS
+Cambodia:Kampong Thom:UNKNOWN:KH-KTH
+Cambodia:Kandal:UNKNOWN:KH-KAN
+Cambodia:Koh Kong:UNKNOWN:KH-KOH
+Cambodia:Kratie:UNKNOWN:KH-KRE
+Cambodia:Mondul Kiri:UNKNOWN:KH-MOK
+Cambodia:Prey Veng:UNKNOWN:KH-PVG
+Cambodia:Pursat:UNKNOWN:KH-PUR
+Cambodia:Ratana Kiri:UNKNOWN:KH-RAK
+Cambodia:Siem Reap:UNKNOWN:KH-SER
+Cambodia:Stung Treng:UNKNOWN:KH-STR
+Cambodia:Svay Rieng:UNKNOWN:KH-SVY
+Cambodia:Takeo:UNKNOWN:KH-TKE
+Cambodia:Tonle Sap:UNKNOWN:KH-TOL
+China:Hongkong Island:UNKNOWN:CN-HK
+China:Jammu and Kashmir:UNKNOWN:CN-JK
+China:Kowloon and New Kowloon:UNKNOWN:CN-KOW
+China:Marine:UNKNOWN:CN-MAR
+China:Nei Mongol Zizhiqu:Nei Mongol:CN-75
+China:New Territories:UNKNOWN:CN-NT
+China:Xinjiang Uygur:Xinjiang:CN-65
+China:Xizang Zizhiqu (Tibet):Xizang:CN-54
+India:Andaman & Nicobar:UNKNOWN:IN-NIC
+Indonesia:D.I Yogyakarta:UNKNOWN:ID-YOG
+Indonesia:Dki Jakarta:UNKNOWN:ID-JAK
+Indonesia:Irian Jaya:UNKNOWN:ID-IJA
+Indonesia:Timor Timur:UNKNOWN:ID0-TIM
+Japan:Chubu:UNKNOWN:JP-CHB
+Japan:Chugoku:UNKNOWN:JP-CHG
+Japan:Hokuriku:UNKNOWN:JP-HRI
+Japan:Kanto:UNKNOWN:JP-KNT
+Japan:Kinki:UNKNOWN:JP-KIN
+Japan:Kyushu:UNKNOWN:JP-KYU
+Japan:Ryukiu-Islands:UNKNOWN:JP-RYU
+Japan:Shikoku:UNKNOWN:JP-SKO
+Japan:Tohoku:UNKNOWN:JP-TOH
+Japan:Tokai:UNKNOWN:JP-TAI
+Laos:Attopu:Attapu:LA-AT
+Laos:Bolikhamsai:Bolikhamxai:LA-BL
+Laos:Champassack:Champasak:LA-CH
+Laos:Houaphanh:Houaphan:LA-HO
+Laos:Khammouane:Khammouan:LA-KK
+Laos:Luang Prabang:Louangphabang:LA-LP
+Laos:Namtha:Louang Namtha:LA-LM
+Laos:Oudomxay:Oudomxai:LA-OU
+Laos:Phongsaly:Phongsali:LA-PH
+Laos:Saravane:UNKNOWN:LA-SR
+Laos:Sayabouri:Xaignabouli:LA-XA
+Laos:Sekong:XEKONG:LA-XE
+Laos:Vientiane (Munic.):Vientiane:LA-VI
+Laos:Vientiane 2:UNKNOWN:LA-VI2
+Laos:Xiangkhouang:Xianghhoang:LA-XI
+Macau:Macau:UNKNOWN:MO-M
+Nepal:Far West:UNKNOWN:NP-FAW
+Nepal:Midwest:UNKNOWN:NP-MID
+Nepal:West:UNKNOWN:NP-W
+Nepal:Central:UNKNOWN:NP-C
+Nepal:East:UNKNOWN:NP-E
+North Korea:Changang:UNKNOWN:KP-CHG
+North Korea:Kaesong:UNKNOWN:KP-KSO
+North Korea:Kangwon:UNKNOWN:KP-KGW
+North Korea:Nampo:UNKNOWN:KP-NAP
+North Korea:North Hamgyong:UNKNOWN:KP-HGY
+North Korea:North Hwanghae:UNKNOWN:KP-HWA
+North Korea:North Pyongan:UNKNOWN:KP-NPY
+North Korea:Pyongyang:UNKNOWN:KP-PY
+North Korea:South Hamgyong:UNKNOWN:KP-SHO
+North Korea:South Hwanghae:UNKNOWN:KP-SHA
+North Korea:South Pyongan:UNKNOWN:KP-SPY
+North Korea:Yanggang:UNKNOWN:KP-YGN
+Philippines:CAR:UNKNOWN:PH-CAR
+Philippines:NCR:UNKNOWN:PH-NCR
+Philippines:Region 1:UNKNOWN:PH-1
+Philippines:Region 10:UNKNOWN:PH-10
+Philippines:Region 11:UNKNOWN:PH-11
+Philippines:Region 12:UNKNOWN:PH-12
+Philippines:Region 2:UNKNOWN:PH-2
+Philippines:Region 3:UNKNOWN:PH-3
+Philippines:Region 4:UNKNOWN:PH-4
+Philippines:Region 5:UNKNOWN:PH-5
+Philippines:Region 6:UNKNOWN:PH-6
+Philippines:Region 7:UNKNOWN:PH-7
+Philippines:Region 8:UNKNOWN:PH-8
+Philippines:Region 9:UNKNOWN:PH-9
+Singapore:Singapore:UNKNOWN:SG-S
+Saudi Arabia:IRQ/SAU NEUTRAL ZONE:UNKNOWN:SA-NEU
+Saudi Arabia:Quray Yat:UNKNOWN:SA-QAY
+South Korea:Cheju-Do:Jejudo:KR-49
+South Korea:Chollabuk-Do:Jeonrabugdo:KR-45
+South Korea:Chollanam-Do:Jeonranamdo:KR-46
+South Korea:Chungchongbuk-Do:Chungcheongbugdo:KR-43
+South Korea:Chungchongnam-Do:Chungcheongnamdo:KR-44
+South Korea:Inchon:Incheon Gwangyogsi:KR-28
+South Korea:Kang-Won-Do:Gangweondo:KR-42
+South Korea:Kwangju:Gwangju Gwangyeogsi:KR-29
+South Korea:Kyonggi-Do:Gyeonggido:KR-4
+South Korea:Kyongsangbuk-Do:Gyeongsangbugdo:KR-47
+South Korea:Kyongsangnam-Do:Gyeongsangnamdo:KR-48
+South Korea:Pusan:Busan Gwangyeogsi:KR-26
+South Korea:Seoul:Seoul Teugbyeolsi:KR-0
+South Korea:Taegu:Daegu Gwangyeogsi:KR-27
+South Korea:Taejon:Daejon Gwangyeogsi:KR-30
+Thailand:Bangkok:Krung Thep Maha Nakhon:TH-0
+Thailand:Northeastern:UNKNOWN:TH-NE
+Thailand:Central:UNKNOWN:TH-C
+Thailand:Northern:UNKNOWN:TH-N
+Thailand:Southern:UNKNOWN:TH-S
+Vietnam:Bac Thai:UNKNOWN:VN-BTH
+Vietnam:Ha Bac:UNKNOWN:VN-HBC
+Vietnam:Ha Noi:Ha Noi:VN-64
+Vietnam:Hai Hung:Hai Duong:VN-6
+Vietnam:Hai Phong:Hai Phong:VN-62
+Vietnam:Ho Chi Minh City:Ho Chi Minh:VN-66 	
+Vietnam:Minh Hai:UNKNOWN:VN-MHI
+Vietnam:Nam Ha:Ha Nam:VN-63
+Vietnam:Quang Nam-Da Nang:Quang Nam:VN-27
+Vietnam:Song Be:UNKNOWN:VN-SBE
+Vietnam:Vinh Phu:Vinh Phuc:VN-70
diff --git a/org.eclipse.stem.utility/parameters/ISOFIX/USA_FIPS.txt b/org.eclipse.stem.utility/parameters/ISOFIX/USA_FIPS.txt
new file mode 100644
index 0000000..da2615b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/ISOFIX/USA_FIPS.txt
@@ -0,0 +1,3275 @@
+# Official descriptors for counties in the USA.
+# These descriptors use FIPS codes (five digits).
+# Level 2 (admin 2 = e.g., county)#
+# under Admin Level[1] ID[02] = Alaska 
+US-AK-02013:Aleutians East Borough 
+US-AK-02016:Aleutians West 
+US-AK-02020:Anchorage Municipality 
+US-AK-02050:Bethel 
+US-AK-02060:Bristol Bay Borough 
+US-AK-02068:Denali Borough 
+US-AK-02070:Dillingham 
+US-AK-02090:Fairbanks North Star Borough 
+US-AK-02100:Haines Borough 
+US-AK-02110:Juneau Borough 
+US-AK-02122:Kenai Peninsula Borough 
+US-AK-02130:Ketchikan Gateway Borough 
+US-AK-02150:Kodiak Island Borough 
+US-AK-02164:Lake and Peninsula Borough 
+US-AK-02170:Matanuska-Susitna Borough 
+US-AK-02180:Nome 
+US-AK-02185:North Slope Borough 
+US-AK-02188:Northwest Arctic Borough 
+US-AK-02201:Prince of Wales-Outer Ketchikan 
+US-AK-02220:Sitka Borough 
+US-AK-02232:Skagway-Hoonah-Angoon 
+US-AK-02240:Southeast Fairbanks 
+US-AK-02261:Valdez-Cordova 
+US-AK-02270:Wade Hampton 
+US-AK-02280:Wrangell-Petersburg 
+US-AK-02282:Yakutat Borough
+US-AK-02290:Yukon-Koyukuk 
+# under Admin Level[1] ID[01]:Alabama 
+US-AL-01001:Autauga County 
+US-AL-01003:Baldwin County 
+US-AL-01005:Barbour County 
+US-AL-01007:Bibb County 
+US-AL-01009:Blount County 
+US-AL-01011:Bullock County 
+US-AL-01013:Butler County 
+US-AL-01015:Calhoun County 
+US-AL-01017:Chambers County 
+US-AL-01019:Cherokee County 
+US-AL-01021:Chilton County 
+US-AL-01023:Choctaw County 
+US-AL-01025:Clarke County 
+US-AL-01027:Clay County 
+US-AL-01029:Cleburne County 
+US-AL-01031:Coffee County 
+US-AL-01033:Colbert County 
+US-AL-01035:Conecuh County 
+US-AL-01037:Coosa County 
+US-AL-01039:Covington County 
+US-AL-01041:Crenshaw County 
+US-AL-01043:Cullman County 
+US-AL-01045:Dale County 
+US-AL-01047:Dallas County 
+US-AL-01049:DeKalb County 
+US-AL-01051:Elmore County 
+US-AL-01053:Escambia County 
+US-AL-01055:Etowah County 
+US-AL-01057:Fayette County 
+US-AL-01059:Franklin County 
+US-AL-01061:Geneva County 
+US-AL-01063:Greene County 
+US-AL-01065:Hale County 
+US-AL-01067:Henry County 
+US-AL-01069:Houston County 
+US-AL-01071:Jackson County 
+US-AL-01073:Jefferson County 
+US-AL-01075:Lamar County 
+US-AL-01077:Lauderdale County 
+US-AL-01079:Lawrence County 
+US-AL-01081:Lee County 
+US-AL-01083:Limestone County 
+US-AL-01085:Lowndes County 
+US-AL-01087:Macon County 
+US-AL-01089:Madison County 
+US-AL-01091:Marengo County 
+US-AL-01093:Marion County 
+US-AL-01095:Marshall County 
+US-AL-01097:Mobile County 
+US-AL-01099:Monroe County 
+US-AL-01101:Montgomery County 
+US-AL-01103:Morgan County 
+US-AL-01105:Perry County 
+US-AL-01107:Pickens County 
+US-AL-01109:Pike County 
+US-AL-01111:Randolph County 
+US-AL-01113:Russell County 
+US-AL-01115:St. Clair County 
+US-AL-01117:Shelby County 
+US-AL-01119:Sumter County 
+US-AL-01121:Talladega County 
+US-AL-01123:Tallapoosa County 
+US-AL-01125:Tuscaloosa County 
+US-AL-01127:Walker County 
+US-AL-01129:Washington County 
+US-AL-01131:Wilcox County 
+US-AL-01133:Winston County 
+# under Admin Level[1] ID[05]:Arkansas 
+US-AR-05001:Arkansas County 
+US-AR-05003:Ashley County 
+US-AR-05005:Baxter County 
+US-AR-05007:Benton County 
+US-AR-05009:Boone County 
+US-AR-05011:Bradley County 
+US-AR-05013:Calhoun County 
+US-AR-05015:Carroll County 
+US-AR-05017:Chicot County 
+US-AR-05019:Clark County 
+US-AR-05021:Clay County 
+US-AR-05023:Cleburne County 
+US-AR-05025:Cleveland County 
+US-AR-05027:Columbia County 
+US-AR-05029:Conway County 
+US-AR-05031:Craighead County 
+US-AR-05033:Crawford County 
+US-AR-05035:Crittenden County 
+US-AR-05037:Cross County 
+US-AR-05039:Dallas County 
+US-AR-05041:Desha County 
+US-AR-05043:Drew County 
+US-AR-05045:Faulkner County 
+US-AR-05047:Franklin County 
+US-AR-05049:Fulton County 
+US-AR-05051:Garland County 
+US-AR-05053:Grant County 
+US-AR-05055:Greene County 
+US-AR-05057:Hempstead County 
+US-AR-05059:Hot Spring County 
+US-AR-05061:Howard County 
+US-AR-05063:Independence County 
+US-AR-05065:Izard County 
+US-AR-05067:Jackson County 
+US-AR-05069:Jefferson County 
+US-AR-05071:Johnson County 
+US-AR-05073:Lafayette County 
+US-AR-05075:Lawrence County 
+US-AR-05077:Lee County 
+US-AR-05079:Lincoln County 
+US-AR-05081:Little River County 
+US-AR-05083:Logan County 
+US-AR-05085:Lonoke County 
+US-AR-05087:Madison County 
+US-AR-05089:Marion County 
+US-AR-05091:Miller County 
+US-AR-05093:Mississippi County 
+US-AR-05095:Monroe County 
+US-AR-05097:Montgomery County 
+US-AR-05099:Nevada County 
+US-AR-05101:Newton County 
+US-AR-05103:Ouachita County 
+US-AR-05105:Perry County 
+US-AR-05107:Phillips County 
+US-AR-05109:Pike County 
+US-AR-05111:Poinsett County 
+US-AR-05113:Polk County 
+US-AR-05115:Pope County 
+US-AR-05117:Prairie County 
+US-AR-05119:Pulaski County 
+US-AR-05121:Randolph County 
+US-AR-05123:St. Francis County 
+US-AR-05125:Saline County 
+US-AR-05127:Scott County 
+US-AR-05129:Searcy County 
+US-AR-05131:Sebastian County 
+US-AR-05133:Sevier County 
+US-AR-05135:Sharp County 
+US-AR-05137:Stone County 
+US-AR-05139:Union County 
+US-AR-05141:Van Buren County 
+US-AR-05143:Washington County 
+US-AR-05145:White County 
+US-AR-05147:Woodruff County 
+US-AR-05149:Yell County 
+# under Admin Level[1] ID[04]:Arizona 
+US-AZ-04001:Apache County 
+US-AZ-04003:Cochise County 
+US-AZ-04005:Coconino County 
+US-AZ-04007:Gila County 
+US-AZ-04009:Graham County 
+US-AZ-04011:Greenlee County 
+US-AZ-04012:La Paz County 
+US-AZ-04013:Maricopa County 
+US-AZ-04015:Mohave County 
+US-AZ-04017:Navajo County 
+US-AZ-04019:Pima County 
+US-AZ-04021:Pinal County 
+US-AZ-04023:Santa Cruz County 
+US-AZ-04025:Yavapai County 
+US-AZ-04027:Yuma County 
+# under Admin Level[1] ID[06]:California 
+US-CA-06001:Alameda County 
+US-CA-06003:Alpine County 
+US-CA-06005:Amador County 
+US-CA-06007:Butte County 
+US-CA-06009:Calaveras County 
+US-CA-06011:Colusa County 
+US-CA-06013:Contra Costa County 
+US-CA-06015:Del Norte County 
+US-CA-06017:El Dorado County 
+US-CA-06019:Fresno County 
+US-CA-06021:Glenn County 
+US-CA-06023:Humboldt County 
+US-CA-06025:Imperial County 
+US-CA-06027:Inyo County 
+US-CA-06029:Kern County 
+US-CA-06031:Kings County 
+US-CA-06033:Lake County 
+US-CA-06035:Lassen County 
+US-CA-06037:Los Angeles County 
+US-CA-06039:Madera County 
+US-CA-06041:Marin County 
+US-CA-06043:Mariposa County 
+US-CA-06045:Mendocino County 
+US-CA-06047:Merced County 
+US-CA-06049:Modoc County 
+US-CA-06051:Mono County 
+US-CA-06053:Monterey County 
+US-CA-06055:Napa County 
+US-CA-06057:Nevada County 
+US-CA-06059:Orange County 
+US-CA-06061:Placer County 
+US-CA-06063:Plumas County 
+US-CA-06065:Riverside County 
+US-CA-06067:Sacramento County 
+US-CA-06069:San Benito County 
+US-CA-06071:San Bernardino County 
+US-CA-06073:San Diego County 
+US-CA-06075:San Francisco County 
+US-CA-06077:San Joaquin County 
+US-CA-06079:San Luis Obispo County 
+US-CA-06081:San Mateo County 
+US-CA-06083:Santa Barbara County 
+US-CA-06085:Santa Clara County 
+US-CA-06087:Santa Cruz County 
+US-CA-06089:Shasta County 
+US-CA-06091:Sierra County 
+US-CA-06093:Siskiyou County 
+US-CA-06095:Solano County 
+US-CA-06097:Sonoma County 
+US-CA-06099:Stanislaus County 
+US-CA-06101:Sutter County 
+US-CA-06103:Tehama County 
+US-CA-06105:Trinity County 
+US-CA-06107:Tulare County 
+US-CA-06109:Tuolumne County 
+US-CA-06111:Ventura County 
+US-CA-06113:Yolo County 
+US-CA-06115:Yuba County 
+# under Admin Level[1] ID[08]:Colorado 
+US-CO-08001:Adams County 
+US-CO-08003:Alamosa County 
+US-CO-08005:Arapahoe County 
+US-CO-08007:Archuleta County 
+US-CO-08009:Baca County 
+US-CO-08011:Bent County 
+US-CO-08013:Boulder County 
+US-CO-08015:Chaffee County 
+US-CO-08017:Cheyenne County 
+US-CO-08019:Clear Creek County 
+US-CO-08021:Conejos County 
+US-CO-08023:Costilla County 
+US-CO-08025:Crowley County 
+US-CO-08027:Custer County 
+US-CO-08029:Delta County 
+US-CO-08031:Denver County 
+US-CO-08033:Dolores County 
+US-CO-08035:Douglas County 
+US-CO-08037:Eagle County 
+US-CO-08039:Elbert County 
+US-CO-08041:El Paso County 
+US-CO-08043:Fremont County 
+US-CO-08045:Garfield County 
+US-CO-08047:Gilpin County 
+US-CO-08049:Grand County 
+US-CO-08051:Gunnison County 
+US-CO-08053:Hinsdale County 
+US-CO-08055:Huerfano County 
+US-CO-08057:Jackson County 
+US-CO-08059:Jefferson County 
+US-CO-08061:Kiowa County 
+US-CO-08063:Kit Carson County 
+US-CO-08065:Lake County 
+US-CO-08067:La Plata County 
+US-CO-08069:Larimer County 
+US-CO-08071:Las Animas County 
+US-CO-08073:Lincoln County 
+US-CO-08075:Logan County 
+US-CO-08077:Mesa County 
+US-CO-08079:Mineral County 
+US-CO-08081:Moffat County 
+US-CO-08083:Montezuma County 
+US-CO-08085:Montrose County 
+US-CO-08087:Morgan County 
+US-CO-08089:Otero County 
+US-CO-08091:Ouray County 
+US-CO-08093:Park County 
+US-CO-08095:Phillips County 
+US-CO-08097:Pitkin County 
+US-CO-08099:Prowers County 
+US-CO-08101:Pueblo County 
+US-CO-08103:Rio Blanco County 
+US-CO-08105:Rio Grande County 
+US-CO-08107:Routt County 
+US-CO-08109:Saguache County 
+US-CO-08111:San Juan County 
+US-CO-08113:San Miguel County 
+US-CO-08115:Sedgwick County 
+US-CO-08117:Summit County 
+US-CO-08119:Teller County 
+US-CO-08121:Washington County 
+US-CO-08123:Weld County 
+US-CO-08125:Yuma County 
+# under Admin Level[1] ID[09]:Connecticut 
+US-CT-09001:Fairfield County 
+US-CT-09003:Hartford County 
+US-CT-09005:Litchfield County 
+US-CT-09007:Middlesex County 
+US-CT-09009:New Haven County 
+US-CT-09011:New London County 
+US-CT-09013:Tolland County 
+US-CT-09015:Windham County 
+# under Admin Level[1] ID[11]:District of Columbia 
+US-DC-11001:District of Columbia 
+# under Admin Level[1] ID[10]:Delaware 
+US-DE-10001:Kent County 
+US-DE-10003:New Castle County 
+US-DE-10005:Sussex County 
+# under Admin Level[1] ID[12]:Florida 
+US-FL-12001:Alachua County 
+US-FL-12003:Baker County 
+US-FL-12005:Bay County 
+US-FL-12007:Bradford County 
+US-FL-12009:Brevard County 
+US-FL-12011:Broward County 
+US-FL-12013:Calhoun County 
+US-FL-12015:Charlotte County 
+US-FL-12017:Citrus County 
+US-FL-12019:Clay County 
+US-FL-12021:Collier County 
+US-FL-12023:Columbia County 
+US-FL-12027:DeSoto County 
+US-FL-12029:Dixie County 
+US-FL-12031:Duval County 
+US-FL-12033:Escambia County 
+US-FL-12035:Flagler County 
+US-FL-12037:Franklin County 
+US-FL-12039:Gadsden County 
+US-FL-12041:Gilchrist County 
+US-FL-12043:Glades County 
+US-FL-12045:Gulf County 
+US-FL-12047:Hamilton County 
+US-FL-12049:Hardee County 
+US-FL-12051:Hendry County 
+US-FL-12053:Hernando County 
+US-FL-12055:Highlands County 
+US-FL-12057:HillsBorough County
+US-FL-12059:Holmes County 
+US-FL-12061:Indian River County 
+US-FL-12063:Jackson County 
+US-FL-12065:Jefferson County 
+US-FL-12067:Lafayette County 
+US-FL-12069:Lake County 
+US-FL-12071:Lee County 
+US-FL-12073:Leon County 
+US-FL-12075:Levy County 
+US-FL-12077:Liberty County 
+US-FL-12079:Madison County 
+US-FL-12081:Manatee County 
+US-FL-12083:Marion County 
+US-FL-12085:Martin County 
+US-FL-12086:Miami-Dade County 
+US-FL-12087:Monroe County 
+US-FL-12089:Nassau County 
+US-FL-12091:Okaloosa County 
+US-FL-12093:Okeechobee County 
+US-FL-12095:Orange County 
+US-FL-12097:Osceola County 
+US-FL-12099:Palm Beach County 
+US-FL-12101:Pasco County 
+US-FL-12103:Pinellas County 
+US-FL-12105:Polk County 
+US-FL-12107:Putnam County 
+US-FL-12109:St. Johns County 
+US-FL-12111:St. Lucie County 
+US-FL-12113:Santa Rosa County 
+US-FL-12115:Sarasota County 
+US-FL-12117:Seminole County 
+US-FL-12119:Sumter County 
+US-FL-12121:Suwannee County 
+US-FL-12123:Taylor County 
+US-FL-12125:Union County 
+US-FL-12127:Volusia County 
+US-FL-12129:Wakulla County 
+US-FL-12131:Walton County 
+US-FL-12133:Washington County 
+# under Admin Level[1] ID[13]:Georgia 
+US-GA-13001:Appling County 
+US-GA-13003:Atkinson County 
+US-GA-13005:Bacon County 
+US-GA-13007:Baker County 
+US-GA-13009:Baldwin County 
+US-GA-13011:Banks County 
+US-GA-13013:Barrow County 
+US-GA-13015:Bartow County 
+US-GA-13017:Ben Hill County 
+US-GA-13019:Berrien County 
+US-GA-13021:Bibb County 
+US-GA-13023:Bleckley County 
+US-GA-13025:Brantley County 
+US-GA-13027:Brooks County 
+US-GA-13029:Bryan County 
+US-GA-13031:Bulloch County 
+US-GA-13033:Burke County 
+US-GA-13035:Butts County 
+US-GA-13037:Calhoun County 
+US-GA-13039:Camden County 
+US-GA-13043:Candler County 
+US-GA-13045:Carroll County 
+US-GA-13047:Catoosa County 
+US-GA-13049:Charlton County 
+US-GA-13051:Chatham County 
+US-GA-13053:Chattahoochee County 
+US-GA-13055:Chattooga County 
+US-GA-13057:Cherokee County 
+US-GA-13059:Clarke County 
+US-GA-13061:Clay County 
+US-GA-13063:Clayton County 
+US-GA-13065:Clinch County 
+US-GA-13067:Cobb County 
+US-GA-13069:Coffee County 
+US-GA-13071:Colquitt County 
+US-GA-13073:Columbia County 
+US-GA-13075:Cook County 
+US-GA-13077:Coweta County 
+US-GA-13079:Crawford County 
+US-GA-13081:Crisp County 
+US-GA-13083:Dade County 
+US-GA-13085:Dawson County 
+US-GA-13087:Decatur County 
+US-GA-13089:DeKalb County 
+US-GA-13091:Dodge County 
+US-GA-13093:Dooly County 
+US-GA-13095:Dougherty County 
+US-GA-13097:Douglas County 
+US-GA-13099:Early County 
+US-GA-13101:Echols County 
+US-GA-13103:Effingham County 
+US-GA-13105:Elbert County 
+US-GA-13107:Emanuel County 
+US-GA-13109:Evans County 
+US-GA-13111:Fannin County 
+US-GA-13113:Fayette County 
+US-GA-13115:Floyd County 
+US-GA-13117:Forsyth County 
+US-GA-13119:Franklin County 
+US-GA-13121:Fulton County 
+US-GA-13123:Gilmer County 
+US-GA-13125:Glascock County 
+US-GA-13127:Glynn County 
+US-GA-13129:Gordon County 
+US-GA-13131:Grady County 
+US-GA-13133:Greene County 
+US-GA-13135:Gwinnett County 
+US-GA-13137:Habersham County 
+US-GA-13139:Hall County 
+US-GA-13141:Hancock County 
+US-GA-13143:Haralson County 
+US-GA-13145:Harris County 
+US-GA-13147:Hart County 
+US-GA-13149:Heard County 
+US-GA-13151:Henry County 
+US-GA-13153:Houston County 
+US-GA-13155:Irwin County 
+US-GA-13157:Jackson County 
+US-GA-13159:Jasper County 
+US-GA-13161:Jeff Davis County 
+US-GA-13163:Jefferson County 
+US-GA-13165:Jenkins County 
+US-GA-13167:Johnson County 
+US-GA-13169:Jones County 
+US-GA-13171:Lamar County 
+US-GA-13173:Lanier County 
+US-GA-13175:Laurens County 
+US-GA-13177:Lee County 
+US-GA-13179:Liberty County 
+US-GA-13181:Lincoln County 
+US-GA-13183:Long County 
+US-GA-13185:Lowndes County 
+US-GA-13187:Lumpkin County 
+US-GA-13189:McDuffie County 
+US-GA-13191:McIntosh County 
+US-GA-13193:Macon County 
+US-GA-13195:Madison County 
+US-GA-13197:Marion County 
+US-GA-13199:Meriwether County 
+US-GA-13201:Miller County 
+US-GA-13205:Mitchell County 
+US-GA-13207:Monroe County 
+US-GA-13209:Montgomery County 
+US-GA-13211:Morgan County 
+US-GA-13213:Murray County 
+US-GA-13215:Muscogee County 
+US-GA-13217:Newton County 
+US-GA-13219:Oconee County 
+US-GA-13221:Oglethorpe County 
+US-GA-13223:Paulding County 
+US-GA-13225:Peach County 
+US-GA-13227:Pickens County 
+US-GA-13229:Pierce County 
+US-GA-13231:Pike County 
+US-GA-13233:Polk County 
+US-GA-13235:Pulaski County 
+US-GA-13237:Putnam County 
+US-GA-13239:Quitman County 
+US-GA-13241:Rabun County 
+US-GA-13243:Randolph County 
+US-GA-13245:Richmond County 
+US-GA-13247:Rockdale County 
+US-GA-13249:Schley County 
+US-GA-13251:Screven County 
+US-GA-13253:Seminole County 
+US-GA-13255:Spalding County 
+US-GA-13257:Stephens County 
+US-GA-13259:Stewart County 
+US-GA-13261:Sumter County 
+US-GA-13263:Talbot County 
+US-GA-13265:Taliaferro County 
+US-GA-13267:Tattnall County 
+US-GA-13269:Taylor County 
+US-GA-13271:Telfair County 
+US-GA-13273:Terrell County 
+US-GA-13275:Thomas County 
+US-GA-13277:Tift County 
+US-GA-13279:Toombs County 
+US-GA-13281:Towns County 
+US-GA-13283:Treutlen County 
+US-GA-13285:Troup County 
+US-GA-13287:Turner County 
+US-GA-13289:Twiggs County 
+US-GA-13291:Union County 
+US-GA-13293:Upson County 
+US-GA-13295:Walker County 
+US-GA-13297:Walton County 
+US-GA-13299:Ware County 
+US-GA-13301:Warren County 
+US-GA-13303:Washington County 
+US-GA-13305:Wayne County 
+US-GA-13307:Webster County 
+US-GA-13309:Wheeler County 
+US-GA-13311:White County 
+US-GA-13313:Whitfield County 
+US-GA-13315:Wilcox County 
+US-GA-13317:Wilkes County 
+US-GA-13319:Wilkinson County 
+US-GA-13321:Worth County 
+# under Admin Level[1] ID[15]:Hawaii 
+US-HI-15001:Hawaii County 
+US-HI-15003:Honolulu County 
+US-HI-15005:Kalawao County 
+US-HI-15007:Kauai County 
+US-HI-15009:Maui County 
+# under Admin Level[1] ID[19]:Iowa 
+US-IA-19001:Adair County 
+US-IA-19003:Adams County 
+US-IA-19005:Allamakee County 
+US-IA-19007:Appanoose County 
+US-IA-19009:Audubon County 
+US-IA-19011:Benton County 
+US-IA-19013:Black Hawk County 
+US-IA-19015:Boone County 
+US-IA-19017:Bremer County 
+US-IA-19019:Buchanan County 
+US-IA-19021:Buena Vista County 
+US-IA-19023:Butler County 
+US-IA-19025:Calhoun County 
+US-IA-19027:Carroll County 
+US-IA-19029:Cass County 
+US-IA-19031:Cedar County 
+US-IA-19033:Cerro Gordo County 
+US-IA-19035:Cherokee County 
+US-IA-19037:Chickasaw County 
+US-IA-19039:Clarke County 
+US-IA-19041:Clay County 
+US-IA-19043:Clayton County 
+US-IA-19045:Clinton County 
+US-IA-19047:Crawford County 
+US-IA-19049:Dallas County 
+US-IA-19051:Davis County 
+US-IA-19053:Decatur County 
+US-IA-19055:Delaware County 
+US-IA-19057:Des Moines County 
+US-IA-19059:Dickinson County 
+US-IA-19061:Dubuque County 
+US-IA-19063:Emmet County 
+US-IA-19065:Fayette County 
+US-IA-19067:Floyd County 
+US-IA-19069:Franklin County 
+US-IA-19071:Fremont County 
+US-IA-19073:Greene County 
+US-IA-19075:Grundy County 
+US-IA-19077:Guthrie County 
+US-IA-19079:Hamilton County 
+US-IA-19081:Hancock County 
+US-IA-19083:Hardin County 
+US-IA-19085:Harrison County 
+US-IA-19087:Henry County 
+US-IA-19089:Howard County 
+US-IA-19091:Humboldt County 
+US-IA-19093:Ida County 
+US-IA-19095:Iowa County 
+US-IA-19097:Jackson County 
+US-IA-19099:Jasper County 
+US-IA-19101:Jefferson County 
+US-IA-19103:Johnson County 
+US-IA-19105:Jones County 
+US-IA-19107:Keokuk County 
+US-IA-19109:Kossuth County 
+US-IA-19111:Lee County 
+US-IA-19113:Linn County 
+US-IA-19115:Louisa County 
+US-IA-19117:Lucas County 
+US-IA-19119:Lyon County 
+US-IA-19121:Madison County 
+US-IA-19123:Mahaska County 
+US-IA-19125:Marion County 
+US-IA-19127:Marshall County 
+US-IA-19129:Mills County 
+US-IA-19131:Mitchell County 
+US-IA-19133:Monona County 
+US-IA-19135:Monroe County 
+US-IA-19137:Montgomery County 
+US-IA-19139:Muscatine County 
+US-IA-19141:O'Brien County 
+US-IA-19143:Osceola County 
+US-IA-19145:Page County 
+US-IA-19147:Palo Alto County 
+US-IA-19149:Plymouth County 
+US-IA-19151:Pocahontas County 
+US-IA-19153:Polk County 
+US-IA-19155:Pottawattamie County 
+US-IA-19157:Poweshiek County 
+US-IA-19159:Ringgold County 
+US-IA-19161:Sac County 
+US-IA-19163:Scott County 
+US-IA-19165:Shelby County 
+US-IA-19167:Sioux County 
+US-IA-19169:Story County 
+US-IA-19171:Tama County 
+US-IA-19173:Taylor County 
+US-IA-19175:Union County 
+US-IA-19177:Van Buren County 
+US-IA-19179:Wapello County 
+US-IA-19181:Warren County 
+US-IA-19183:Washington County 
+US-IA-19185:Wayne County 
+US-IA-19187:Webster County 
+US-IA-19189:Winnebago County 
+US-IA-19191:Winneshiek County 
+US-IA-19193:Woodbury County 
+US-IA-19195:Worth County 
+US-IA-19197:Wright County 
+# under Admin Level[1] ID[16]:Idaho 
+US-ID-16001:Ada County 
+US-ID-16003:Adams County 
+US-ID-16005:Bannock County 
+US-ID-16007:Bear Lake County 
+US-ID-16009:Benewah County 
+US-ID-16011:Bingham County 
+US-ID-16013:Blaine County 
+US-ID-16015:Boise County 
+US-ID-16017:Bonner County 
+US-ID-16019:Bonneville County 
+US-ID-16021:Boundary County 
+US-ID-16023:Butte County 
+US-ID-16025:Camas County 
+US-ID-16027:Canyon County 
+US-ID-16029:Caribou County 
+US-ID-16031:Cassia County 
+US-ID-16033:Clark County 
+US-ID-16035:Clearwater County 
+US-ID-16037:Custer County 
+US-ID-16039:Elmore County 
+US-ID-16041:Franklin County 
+US-ID-16043:Fremont County 
+US-ID-16045:Gem County 
+US-ID-16047:Gooding County 
+US-ID-16049:Idaho County 
+US-ID-16051:Jefferson County 
+US-ID-16053:Jerome County 
+US-ID-16055:Kootenai County 
+US-ID-16057:Latah County 
+US-ID-16059:Lemhi County 
+US-ID-16061:Lewis County 
+US-ID-16063:Lincoln County 
+US-ID-16065:Madison County 
+US-ID-16067:Minidoka County 
+US-ID-16069:Nez Perce County 
+US-ID-16071:Oneida County 
+US-ID-16073:Owyhee County 
+US-ID-16075:Payette County 
+US-ID-16077:Power County 
+US-ID-16079:Shoshone County 
+US-ID-16081:Teton County 
+US-ID-16083:Twin Falls County 
+US-ID-16085:Valley County 
+US-ID-16087:Washington County 
+# under Admin Level[1] ID[17]:Illinois 
+US-IL-17001:Adams County 
+US-IL-17003:Alexander County 
+US-IL-17005:Bond County 
+US-IL-17007:Boone County 
+US-IL-17009:Brown County 
+US-IL-17011:Bureau County 
+US-IL-17013:Calhoun County 
+US-IL-17015:Carroll County 
+US-IL-17017:Cass County 
+US-IL-17019:Champaign County 
+US-IL-17021:Christian County 
+US-IL-17023:Clark County 
+US-IL-17025:Clay County 
+US-IL-17027:Clinton County 
+US-IL-17029:Coles County 
+US-IL-17031:Cook County 
+US-IL-17033:Crawford County 
+US-IL-17035:Cumberland County 
+US-IL-17037:DeKalb County 
+US-IL-17039:De Witt County 
+US-IL-17041:Douglas County 
+US-IL-17043:DuPage County 
+US-IL-17045:Edgar County 
+US-IL-17047:Edwards County 
+US-IL-17049:Effingham County 
+US-IL-17051:Fayette County 
+US-IL-17053:Ford County 
+US-IL-17055:Franklin County 
+US-IL-17057:Fulton County 
+US-IL-17059:Gallatin County 
+US-IL-17061:Greene County 
+US-IL-17063:Grundy County 
+US-IL-17065:Hamilton County 
+US-IL-17067:Hancock County 
+US-IL-17069:Hardin County 
+US-IL-17071:Henderson County 
+US-IL-17073:Henry County 
+US-IL-17075:Iroquois County 
+US-IL-17077:Jackson County 
+US-IL-17079:Jasper County 
+US-IL-17081:Jefferson County 
+US-IL-17083:Jersey County 
+US-IL-17085:Jo Daviess County 
+US-IL-17087:Johnson County 
+US-IL-17089:Kane County 
+US-IL-17091:Kankakee County 
+US-IL-17093:Kendall County 
+US-IL-17095:Knox County 
+US-IL-17097:Lake County 
+US-IL-17099:La Salle County 
+US-IL-17101:Lawrence County 
+US-IL-17103:Lee County 
+US-IL-17105:Livingston County 
+US-IL-17107:Logan County 
+US-IL-17109:McDonough County 
+US-IL-17111:McHenry County 
+US-IL-17113:McLean County 
+US-IL-17115:Macon County 
+US-IL-17117:Macoupin County 
+US-IL-17119:Madison County 
+US-IL-17121:Marion County 
+US-IL-17123:Marshall County 
+US-IL-17125:Mason County 
+US-IL-17127:Massac County 
+US-IL-17129:Menard County 
+US-IL-17131:Mercer County 
+US-IL-17133:Monroe County 
+US-IL-17135:Montgomery County 
+US-IL-17137:Morgan County 
+US-IL-17139:Moultrie County 
+US-IL-17141:Ogle County 
+US-IL-17143:Peoria County 
+US-IL-17145:Perry County 
+US-IL-17147:Piatt County 
+US-IL-17149:Pike County 
+US-IL-17151:Pope County 
+US-IL-17153:Pulaski County 
+US-IL-17155:Putnam County 
+US-IL-17157:Randolph County 
+US-IL-17159:Richland County 
+US-IL-17161:Rock Island County 
+US-IL-17163:St. Clair County 
+US-IL-17165:Saline County 
+US-IL-17167:Sangamon County 
+US-IL-17169:Schuyler County 
+US-IL-17171:Scott County 
+US-IL-17173:Shelby County 
+US-IL-17175:Stark County 
+US-IL-17177:Stephenson County 
+US-IL-17179:Tazewell County 
+US-IL-17181:Union County 
+US-IL-17183:Vermilion County 
+US-IL-17185:Wabash County 
+US-IL-17187:Warren County 
+US-IL-17189:Washington County 
+US-IL-17191:Wayne County 
+US-IL-17193:White County 
+US-IL-17195:Whiteside County 
+US-IL-17197:Will County 
+US-IL-17199:Williamson County 
+US-IL-17201:Winnebago County 
+US-IL-17203:Woodford County 
+# under Admin Level[1] ID[18]:Indiana 
+US-IN-18001:Adams County 
+US-IN-18003:Allen County 
+US-IN-18005:Bartholomew County 
+US-IN-18007:Benton County 
+US-IN-18009:Blackford County 
+US-IN-18011:Boone County 
+US-IN-18013:Brown County 
+US-IN-18015:Carroll County 
+US-IN-18017:Cass County 
+US-IN-18019:Clark County 
+US-IN-18021:Clay County 
+US-IN-18023:Clinton County 
+US-IN-18025:Crawford County 
+US-IN-18027:Daviess County 
+US-IN-18029:Dearborn County 
+US-IN-18031:Decatur County 
+US-IN-18033:DeKalb County 
+US-IN-18035:Delaware County 
+US-IN-18037:Dubois County 
+US-IN-18039:Elkhart County 
+US-IN-18041:Fayette County 
+US-IN-18043:Floyd County 
+US-IN-18045:Fountain County 
+US-IN-18047:Franklin County 
+US-IN-18049:Fulton County 
+US-IN-18051:Gibson County 
+US-IN-18053:Grant County 
+US-IN-18055:Greene County 
+US-IN-18057:Hamilton County 
+US-IN-18059:Hancock County 
+US-IN-18061:Harrison County 
+US-IN-18063:Hendricks County 
+US-IN-18065:Henry County 
+US-IN-18067:Howard County 
+US-IN-18069:Huntington County 
+US-IN-18071:Jackson County 
+US-IN-18073:Jasper County 
+US-IN-18075:Jay County 
+US-IN-18077:Jefferson County 
+US-IN-18079:Jennings County 
+US-IN-18081:Johnson County 
+US-IN-18083:Knox County 
+US-IN-18085:Kosciusko County 
+US-IN-18087:Lagrange County 
+US-IN-18089:Lake County 
+US-IN-18091:LaPorte County 
+US-IN-18093:Lawrence County 
+US-IN-18095:Madison County 
+US-IN-18097:Marion County 
+US-IN-18099:Marshall County 
+US-IN-18101:Martin County 
+US-IN-18103:Miami County 
+US-IN-18105:Monroe County 
+US-IN-18107:Montgomery County 
+US-IN-18109:Morgan County 
+US-IN-18111:Newton County 
+US-IN-18113:Noble County 
+US-IN-18115:Ohio County 
+US-IN-18117:Orange County 
+US-IN-18119:Owen County 
+US-IN-18121:Parke County 
+US-IN-18123:Perry County 
+US-IN-18125:Pike County 
+US-IN-18127:Porter County 
+US-IN-18129:Posey County 
+US-IN-18131:Pulaski County 
+US-IN-18133:Putnam County 
+US-IN-18135:Randolph County 
+US-IN-18137:Ripley County 
+US-IN-18139:Rush County 
+US-IN-18141:St. Joseph County 
+US-IN-18143:Scott County 
+US-IN-18145:Shelby County 
+US-IN-18147:Spencer County 
+US-IN-18149:Starke County 
+US-IN-18151:Steuben County 
+US-IN-18153:Sullivan County 
+US-IN-18155:Switzerland County 
+US-IN-18157:Tippecanoe County 
+US-IN-18159:Tipton County 
+US-IN-18161:Union County 
+US-IN-18163:Vanderburgh County 
+US-IN-18165:Vermillion County 
+US-IN-18167:Vigo County 
+US-IN-18169:Wabash County 
+US-IN-18171:Warren County 
+US-IN-18173:Warrick County 
+US-IN-18175:Washington County 
+US-IN-18177:Wayne County 
+US-IN-18179:Wells County 
+US-IN-18181:White County 
+US-IN-18183:Whitley County 
+# under Admin Level[1] ID[20]:Kansas 
+US-KS-20001:Allen County 
+US-KS-20003:Anderson County 
+US-KS-20005:Atchison County 
+US-KS-20007:Barber County 
+US-KS-20009:Barton County 
+US-KS-20011:Bourbon County 
+US-KS-20013:Brown County 
+US-KS-20015:Butler County 
+US-KS-20017:Chase County 
+US-KS-20019:Chautauqua County 
+US-KS-20021:Cherokee County 
+US-KS-20023:Cheyenne County 
+US-KS-20025:Clark County 
+US-KS-20027:Clay County 
+US-KS-20029:Cloud County 
+US-KS-20031:Coffey County 
+US-KS-20033:Comanche County 
+US-KS-20035:Cowley County 
+US-KS-20037:Crawford County 
+US-KS-20039:Decatur County 
+US-KS-20041:Dickinson County 
+US-KS-20043:Doniphan County 
+US-KS-20045:Douglas County 
+US-KS-20047:Edwards County 
+US-KS-20049:Elk County 
+US-KS-20051:Ellis County 
+US-KS-20053:Ellsworth County 
+US-KS-20055:Finney County 
+US-KS-20057:Ford County 
+US-KS-20059:Franklin County 
+US-KS-20061:Geary County 
+US-KS-20063:Gove County 
+US-KS-20065:Graham County 
+US-KS-20067:Grant County 
+US-KS-20069:Gray County 
+US-KS-20071:Greeley County 
+US-KS-20073:Greenwood County 
+US-KS-20075:Hamilton County 
+US-KS-20077:Harper County 
+US-KS-20079:Harvey County 
+US-KS-20081:Haskell County 
+US-KS-20083:Hodgeman County 
+US-KS-20085:Jackson County 
+US-KS-20087:Jefferson County 
+US-KS-20089:Jewell County 
+US-KS-20091:Johnson County 
+US-KS-20093:Kearny County 
+US-KS-20095:Kingman County 
+US-KS-20097:Kiowa County 
+US-KS-20099:Labette County 
+US-KS-20101:Lane County 
+US-KS-20103:Leavenworth County 
+US-KS-20105:Lincoln County 
+US-KS-20107:Linn County 
+US-KS-20109:Logan County 
+US-KS-20111:Lyon County 
+US-KS-20113:McPherson County 
+US-KS-20115:Marion County 
+US-KS-20117:Marshall County 
+US-KS-20119:Meade County 
+US-KS-20121:Miami County 
+US-KS-20123:Mitchell County 
+US-KS-20125:Montgomery County 
+US-KS-20127:Morris County 
+US-KS-20129:Morton County 
+US-KS-20131:Nemaha County 
+US-KS-20133:Neosho County 
+US-KS-20135:Ness County 
+US-KS-20137:Norton County 
+US-KS-20139:Osage County 
+US-KS-20141:Osborne County 
+US-KS-20143:Ottawa County 
+US-KS-20145:Pawnee County 
+US-KS-20147:Phillips County 
+US-KS-20149:Pottawatomie County 
+US-KS-20151:Pratt County 
+US-KS-20153:Rawlins County 
+US-KS-20155:Reno County 
+US-KS-20157:Republic County 
+US-KS-20159:Rice County 
+US-KS-20161:Riley County 
+US-KS-20163:Rooks County 
+US-KS-20165:Rush County 
+US-KS-20167:Russell County 
+US-KS-20169:Saline County 
+US-KS-20171:Scott County 
+US-KS-20173:Sedgwick County 
+US-KS-20175:Seward County 
+US-KS-20177:Shawnee County 
+US-KS-20179:Sheridan County 
+US-KS-20181:Sherman County 
+US-KS-20183:Smith County 
+US-KS-20185:Stafford County 
+US-KS-20187:Stanton County 
+US-KS-20189:Stevens County 
+US-KS-20191:Sumner County 
+US-KS-20193:Thomas County 
+US-KS-20195:Trego County 
+US-KS-20197:Wabaunsee County 
+US-KS-20199:Wallace County 
+US-KS-20201:Washington County 
+US-KS-20203:Wichita County 
+US-KS-20205:Wilson County 
+US-KS-20207:Woodson County 
+US-KS-20209:Wyandotte County 
+# under Admin Level[1] ID[21]:Kentucky 
+US-KY-21001:Adair County 
+US-KY-21003:Allen County 
+US-KY-21005:Anderson County 
+US-KY-21007:Ballard County 
+US-KY-21009:Barren County 
+US-KY-21011:Bath County 
+US-KY-21013:Bell County 
+US-KY-21015:Boone County 
+US-KY-21017:Bourbon County 
+US-KY-21019:Boyd County 
+US-KY-21021:Boyle County 
+US-KY-21023:Bracken County 
+US-KY-21025:Breathitt County 
+US-KY-21027:Breckinridge County 
+US-KY-21029:Bullitt County 
+US-KY-21031:Butler County 
+US-KY-21033:Caldwell County 
+US-KY-21035:Calloway County 
+US-KY-21037:Campbell County 
+US-KY-21039:Carlisle County 
+US-KY-21041:Carroll County 
+US-KY-21043:Carter County 
+US-KY-21045:Casey County 
+US-KY-21047:Christian County 
+US-KY-21049:Clark County 
+US-KY-21051:Clay County 
+US-KY-21053:Clinton County 
+US-KY-21055:Crittenden County 
+US-KY-21057:Cumberland County 
+US-KY-21059:Daviess County 
+US-KY-21061:Edmonson County 
+US-KY-21063:Elliott County 
+US-KY-21065:Estill County 
+US-KY-21067:Fayette County 
+US-KY-21069:Fleming County 
+US-KY-21071:Floyd County 
+US-KY-21073:Franklin County 
+US-KY-21075:Fulton County 
+US-KY-21077:Gallatin County 
+US-KY-21079:Garrard County 
+US-KY-21081:Grant County 
+US-KY-21083:Graves County 
+US-KY-21085:Grayson County 
+US-KY-21087:Green County 
+US-KY-21089:Greenup County 
+US-KY-21091:Hancock County 
+US-KY-21093:Hardin County 
+US-KY-21095:Harlan County 
+US-KY-21097:Harrison County 
+US-KY-21099:Hart County 
+US-KY-21101:Henderson County 
+US-KY-21103:Henry County 
+US-KY-21105:Hickman County 
+US-KY-21107:Hopkins County 
+US-KY-21109:Jackson County 
+US-KY-21111:Jefferson County 
+US-KY-21113:Jessamine County 
+US-KY-21115:Johnson County 
+US-KY-21117:Kenton County 
+US-KY-21119:Knott County 
+US-KY-21121:Knox County 
+US-KY-21123:Larue County 
+US-KY-21125:Laurel County 
+US-KY-21127:Lawrence County 
+US-KY-21129:Lee County 
+US-KY-21131:Leslie County 
+US-KY-21133:Letcher County 
+US-KY-21135:Lewis County 
+US-KY-21137:Lincoln County 
+US-KY-21139:Livingston County 
+US-KY-21141:Logan County 
+US-KY-21143:Lyon County 
+US-KY-21145:McCracken County 
+US-KY-21147:McCreary County 
+US-KY-21149:McLean County 
+US-KY-21151:Madison County 
+US-KY-21153:Magoffin County 
+US-KY-21155:Marion County 
+US-KY-21157:Marshall County 
+US-KY-21159:Martin County 
+US-KY-21161:Mason County 
+US-KY-21163:Meade County 
+US-KY-21165:Menifee County 
+US-KY-21167:Mercer County 
+US-KY-21169:Metcalfe County 
+US-KY-21171:Monroe County 
+US-KY-21173:Montgomery County 
+US-KY-21175:Morgan County 
+US-KY-21177:Muhlenberg County 
+US-KY-21179:Nelson County 
+US-KY-21181:Nicholas County 
+US-KY-21183:Ohio County 
+US-KY-21185:Oldham County 
+US-KY-21187:Owen County 
+US-KY-21189:Owsley County 
+US-KY-21191:Pendleton County 
+US-KY-21193:Perry County 
+US-KY-21195:Pike County 
+US-KY-21197:Powell County 
+US-KY-21199:Pulaski County 
+US-KY-21201:Robertson County 
+US-KY-21203:Rockcastle County 
+US-KY-21205:Rowan County 
+US-KY-21207:Russell County 
+US-KY-21209:Scott County 
+US-KY-21211:Shelby County 
+US-KY-21213:Simpson County 
+US-KY-21215:Spencer County 
+US-KY-21217:Taylor County 
+US-KY-21219:Todd County 
+US-KY-21221:Trigg County 
+US-KY-21223:Trimble County 
+US-KY-21225:Union County 
+US-KY-21227:Warren County 
+US-KY-21229:Washington County 
+US-KY-21231:Wayne County 
+US-KY-21233:Webster County 
+US-KY-21235:Whitley County 
+US-KY-21237:Wolfe County 
+US-KY-21239:Woodford County 
+# under Admin Level[1] ID[22]:Louisiana 
+US-LA-22001:Acadia Parish 
+US-LA-22003:Allen Parish 
+US-LA-22005:Ascension Parish 
+US-LA-22007:Assumption Parish 
+US-LA-22009:Avoyelles Parish 
+US-LA-22011:Beauregard Parish 
+US-LA-22013:Bienville Parish 
+US-LA-22015:Bossier Parish 
+US-LA-22017:Caddo Parish 
+US-LA-22019:Calcasieu Parish 
+US-LA-22021:Caldwell Parish 
+US-LA-22023:Cameron Parish 
+US-LA-22025:Catahoula Parish 
+US-LA-22027:Claiborne Parish 
+US-LA-22029:Concordia Parish 
+US-LA-22031:De Soto Parish 
+US-LA-22033:East Baton Rouge Parish 
+US-LA-22035:East Carroll Parish 
+US-LA-22037:East Feliciana Parish 
+US-LA-22039:Evangeline Parish 
+US-LA-22041:Franklin Parish 
+US-LA-22043:Grant Parish 
+US-LA-22045:Iberia Parish 
+US-LA-22047:Iberville Parish 
+US-LA-22049:Jackson Parish 
+US-LA-22051:Jefferson Parish 
+US-LA-22053:Jefferson Davis Parish 
+US-LA-22055:Lafayette Parish 
+US-LA-22057:Lafourche Parish 
+US-LA-22059:La Salle Parish 
+US-LA-22061:Lincoln Parish 
+US-LA-22063:Livingston Parish 
+US-LA-22065:Madison Parish 
+US-LA-22067:Morehouse Parish 
+US-LA-22069:Natchitoches Parish 
+US-LA-22071:Orleans Parish 
+US-LA-22073:Ouachita Parish 
+US-LA-22075:Plaquemines Parish 
+US-LA-22077:Pointe Coupee Parish 
+US-LA-22079:Rapides Parish 
+US-LA-22081:Red River Parish 
+US-LA-22083:Richland Parish 
+US-LA-22085:Sabine Parish 
+US-LA-22087:St. Bernard Parish 
+US-LA-22089:St. Charles Parish 
+US-LA-22091:St. Helena Parish 
+US-LA-22093:St. James Parish 
+US-LA-22095:St. John the Baptist Parish 
+US-LA-22097:St. Landry Parish 
+US-LA-22099:St. Martin Parish 
+US-LA-22101:St. Mary Parish 
+US-LA-22103:St. Tammany Parish 
+US-LA-22105:Tangipahoa Parish 
+US-LA-22107:Tensas Parish 
+US-LA-22109:Terrebonne Parish 
+US-LA-22111:Union Parish 
+US-LA-22113:Vermilion Parish 
+US-LA-22115:Vernon Parish 
+US-LA-22117:Washington Parish 
+US-LA-22119:Webster Parish 
+US-LA-22121:West Baton Rouge Parish 
+US-LA-22123:West Carroll Parish 
+US-LA-22125:West Feliciana Parish 
+US-LA-22127:Winn Parish 
+# under Admin Level[1] ID[25]:Massachusetts 
+US-MA-25001:Barnstable County 
+US-MA-25003:Berkshire County 
+US-MA-25005:Bristol County 
+US-MA-25007:Dukes County 
+US-MA-25009:Essex County 
+US-MA-25011:Franklin County 
+US-MA-25013:Hampden County 
+US-MA-25015:Hampshire County 
+US-MA-25017:Middlesex County 
+US-MA-25019:Nantucket County 
+US-MA-25021:Norfolk County 
+US-MA-25023:Plymouth County 
+US-MA-25025:Suffolk County 
+US-MA-25027:Worcester County 
+# under Admin Level[1] ID[24]:Maryland 
+US-MD-24001:Allegany County 
+US-MD-24003:Anne Arundel County 
+US-MD-24005:Baltimore County 
+US-MD-24009:Calvert County 
+US-MD-24011:Caroline County 
+US-MD-24013:Carroll County 
+US-MD-24015:Cecil County 
+US-MD-24017:Charles County 
+US-MD-24019:Dorchester County 
+US-MD-24021:Frederick County 
+US-MD-24023:Garrett County 
+US-MD-24025:Harford County 
+US-MD-24027:Howard County 
+US-MD-24029:Kent County 
+US-MD-24031:Montgomery County 
+US-MD-24033:Prince George's County 
+US-MD-24035:Queen Anne's County 
+US-MD-24037:St. Mary's County 
+US-MD-24039:Somerset County 
+US-MD-24041:Talbot County 
+US-MD-24043:Washington County 
+US-MD-24045:Wicomico County 
+US-MD-24047:Worcester County 
+US-MD-24510:Baltimore city 
+# under Admin Level[1] ID[23]:Maine 
+US-ME-23001:Androscoggin County 
+US-ME-23003:Aroostook County 
+US-ME-23005:Cumberland County 
+US-ME-23007:Franklin County 
+US-ME-23009:Hancock County 
+US-ME-23011:Kennebec County 
+US-ME-23013:Knox County 
+US-ME-23015:Lincoln County 
+US-ME-23017:Oxford County 
+US-ME-23019:Penobscot County 
+US-ME-23021:Piscataquis County 
+US-ME-23023:Sagadahoc County 
+US-ME-23025:Somerset County 
+US-ME-23027:Waldo County 
+US-ME-23029:Washington County 
+US-ME-23031:York County 
+# under Admin Level[1] ID[26]:Michigan 
+US-MI-26001:Alcona County 
+US-MI-26003:Alger County 
+US-MI-26005:Allegan County 
+US-MI-26007:Alpena County 
+US-MI-26009:Antrim County 
+US-MI-26011:Arenac County 
+US-MI-26013:Baraga County 
+US-MI-26015:Barry County 
+US-MI-26017:Bay County 
+US-MI-26019:Benzie County 
+US-MI-26021:Berrien County 
+US-MI-26023:Branch County 
+US-MI-26025:Calhoun County 
+US-MI-26027:Cass County 
+US-MI-26029:Charlevoix County 
+US-MI-26031:Cheboygan County 
+US-MI-26033:Chippewa County 
+US-MI-26035:Clare County 
+US-MI-26037:Clinton County 
+US-MI-26039:Crawford County 
+US-MI-26041:Delta County 
+US-MI-26043:Dickinson County 
+US-MI-26045:Eaton County 
+US-MI-26047:Emmet County 
+US-MI-26049:Genesee County 
+US-MI-26051:Gladwin County 
+US-MI-26053:Gogebic County 
+US-MI-26055:Grand Traverse County 
+US-MI-26057:Gratiot County 
+US-MI-26059:Hillsdale County 
+US-MI-26061:Houghton County 
+US-MI-26063:Huron County 
+US-MI-26065:Ingham County 
+US-MI-26067:Ionia County 
+US-MI-26069:Iosco County 
+US-MI-26071:Iron County 
+US-MI-26073:Isabella County 
+US-MI-26075:Jackson County 
+US-MI-26077:Kalamazoo County 
+US-MI-26079:Kalkaska County 
+US-MI-26081:Kent County 
+US-MI-26083:Keweenaw County 
+US-MI-26085:Lake County 
+US-MI-26087:Lapeer County 
+US-MI-26089:Leelanau County 
+US-MI-26091:Lenawee County 
+US-MI-26093:Livingston County 
+US-MI-26095:Luce County 
+US-MI-26097:Mackinac County 
+US-MI-26099:Macomb County 
+US-MI-26101:Manistee County 
+US-MI-26103:Marquette County 
+US-MI-26105:Mason County 
+US-MI-26107:Mecosta County 
+US-MI-26109:Menominee County 
+US-MI-26111:Midland County 
+US-MI-26113:Missaukee County 
+US-MI-26115:Monroe County 
+US-MI-26117:Montcalm County 
+US-MI-26119:Montmorency County 
+US-MI-26121:Muskegon County 
+US-MI-26123:Newaygo County 
+US-MI-26125:Oakland County 
+US-MI-26127:Oceana County 
+US-MI-26129:Ogemaw County 
+US-MI-26131:Ontonagon County 
+US-MI-26133:Osceola County 
+US-MI-26135:Oscoda County 
+US-MI-26137:Otsego County 
+US-MI-26139:Ottawa County 
+US-MI-26141:Presque Isle County 
+US-MI-26143:Roscommon County 
+US-MI-26145:Saginaw County 
+US-MI-26147:St. Clair County 
+US-MI-26149:St. Joseph County 
+US-MI-26151:Sanilac County 
+US-MI-26153:Schoolcraft County 
+US-MI-26155:Shiawassee County 
+US-MI-26157:Tuscola County 
+US-MI-26159:Van Buren County 
+US-MI-26161:Washtenaw County 
+US-MI-26163:Wayne County 
+US-MI-26165:Wexford County 
+# under Admin Level[1] ID[27]:Minnesota 
+US-MN-27001:Aitkin County 
+US-MN-27003:Anoka County 
+US-MN-27005:Becker County 
+US-MN-27007:Beltrami County 
+US-MN-27009:Benton County 
+US-MN-27011:Big Stone County 
+US-MN-27013:Blue Earth County 
+US-MN-27015:Brown County 
+US-MN-27017:Carlton County 
+US-MN-27019:Carver County 
+US-MN-27021:Cass County 
+US-MN-27023:Chippewa County 
+US-MN-27025:Chisago County 
+US-MN-27027:Clay County 
+US-MN-27029:Clearwater County 
+US-MN-27031:Cook County 
+US-MN-27033:Cottonwood County 
+US-MN-27035:Crow Wing County 
+US-MN-27037:Dakota County 
+US-MN-27039:Dodge County 
+US-MN-27041:Douglas County 
+US-MN-27043:Faribault County 
+US-MN-27045:Fillmore County 
+US-MN-27047:Freeborn County 
+US-MN-27049:Goodhue County 
+US-MN-27051:Grant County 
+US-MN-27053:Hennepin County 
+US-MN-27055:Houston County 
+US-MN-27057:Hubbard County 
+US-MN-27059:Isanti County 
+US-MN-27061:Itasca County 
+US-MN-27063:Jackson County 
+US-MN-27065:Kanabec County 
+US-MN-27067:Kandiyohi County 
+US-MN-27069:Kittson County 
+US-MN-27071:Koochiching County 
+US-MN-27073:Lac qui Parle County 
+US-MN-27075:Lake County 
+US-MN-27077:Lake of the Woods County 
+US-MN-27079:Le Sueur County 
+US-MN-27081:Lincoln County 
+US-MN-27083:Lyon County 
+US-MN-27085:McLeod County 
+US-MN-27087:Mahnomen County 
+US-MN-27089:Marshall County 
+US-MN-27091:Martin County 
+US-MN-27093:Meeker County 
+US-MN-27095:Mille Lacs County 
+US-MN-27097:Morrison County 
+US-MN-27099:Mower County 
+US-MN-27101:Murray County 
+US-MN-27103:Nicollet County 
+US-MN-27105:Nobles County 
+US-MN-27107:Norman County 
+US-MN-27109:Olmsted County 
+US-MN-27111:Otter Tail County 
+US-MN-27113:Pennington County 
+US-MN-27115:Pine County 
+US-MN-27117:Pipestone County 
+US-MN-27119:Polk County 
+US-MN-27121:Pope County 
+US-MN-27123:Ramsey County 
+US-MN-27125:Red Lake County 
+US-MN-27127:Redwood County 
+US-MN-27129:Renville County 
+US-MN-27131:Rice County 
+US-MN-27133:Rock County 
+US-MN-27135:Roseau County 
+US-MN-27137:St. Louis County 
+US-MN-27139:Scott County 
+US-MN-27141:Sherburne County 
+US-MN-27143:Sibley County 
+US-MN-27145:Stearns County 
+US-MN-27147:Steele County 
+US-MN-27149:Stevens County 
+US-MN-27151:Swift County 
+US-MN-27153:Todd County 
+US-MN-27155:Traverse County 
+US-MN-27157:Wabasha County 
+US-MN-27159:Wadena County 
+US-MN-27161:Waseca County 
+US-MN-27163:Washington County 
+US-MN-27165:Watonwan County 
+US-MN-27167:Wilkin County 
+US-MN-27169:Winona County 
+US-MN-27171:Wright County 
+US-MN-27173:Yellow Medicine County 
+# under Admin Level[1] ID[29]:Missouri 
+US-MO-29001:Adair County 
+US-MO-29003:Andrew County 
+US-MO-29005:Atchison County 
+US-MO-29007:Audrain County 
+US-MO-29009:Barry County 
+US-MO-29011:Barton County 
+US-MO-29013:Bates County 
+US-MO-29015:Benton County 
+US-MO-29017:Bollinger County 
+US-MO-29019:Boone County 
+US-MO-29021:Buchanan County 
+US-MO-29023:Butler County 
+US-MO-29025:Caldwell County 
+US-MO-29027:Callaway County 
+US-MO-29029:Camden County 
+US-MO-29031:Cape Girardeau County 
+US-MO-29033:Carroll County 
+US-MO-29035:Carter County 
+US-MO-29037:Cass County 
+US-MO-29039:Cedar County 
+US-MO-29041:Chariton County 
+US-MO-29043:Christian County 
+US-MO-29045:Clark County 
+US-MO-29047:Clay County 
+US-MO-29049:Clinton County 
+US-MO-29051:Cole County 
+US-MO-29053:Cooper County 
+US-MO-29055:Crawford County 
+US-MO-29057:Dade County 
+US-MO-29059:Dallas County 
+US-MO-29061:Daviess County 
+US-MO-29063:DeKalb County 
+US-MO-29065:Dent County 
+US-MO-29067:Douglas County 
+US-MO-29069:Dunklin County 
+US-MO-29071:Franklin County 
+US-MO-29073:Gasconade County 
+US-MO-29075:Gentry County 
+US-MO-29077:Greene County 
+US-MO-29079:Grundy County 
+US-MO-29081:Harrison County 
+US-MO-29083:Henry County 
+US-MO-29085:Hickory County 
+US-MO-29087:Holt County 
+US-MO-29089:Howard County 
+US-MO-29091:Howell County 
+US-MO-29093:Iron County 
+US-MO-29095:Jackson County 
+US-MO-29097:Jasper County 
+US-MO-29099:Jefferson County 
+US-MO-29101:Johnson County 
+US-MO-29103:Knox County 
+US-MO-29105:Laclede County 
+US-MO-29107:Lafayette County 
+US-MO-29109:Lawrence County 
+US-MO-29111:Lewis County 
+US-MO-29113:Lincoln County 
+US-MO-29115:Linn County 
+US-MO-29117:Livingston County 
+US-MO-29119:McDonald County 
+US-MO-29121:Macon County 
+US-MO-29123:Madison County 
+US-MO-29125:Maries County 
+US-MO-29127:Marion County 
+US-MO-29129:Mercer County 
+US-MO-29131:Miller County 
+US-MO-29133:Mississippi County 
+US-MO-29135:Moniteau County 
+US-MO-29137:Monroe County 
+US-MO-29139:Montgomery County 
+US-MO-29141:Morgan County 
+US-MO-29143:New Madrid County 
+US-MO-29145:Newton County 
+US-MO-29147:Nodaway County 
+US-MO-29149:Oregon County 
+US-MO-29151:Osage County 
+US-MO-29153:Ozark County 
+US-MO-29155:Pemiscot County 
+US-MO-29157:Perry County 
+US-MO-29159:Pettis County 
+US-MO-29161:Phelps County 
+US-MO-29163:Pike County 
+US-MO-29165:Platte County 
+US-MO-29167:Polk County 
+US-MO-29169:Pulaski County 
+US-MO-29171:Putnam County 
+US-MO-29173:Ralls County 
+US-MO-29175:Randolph County 
+US-MO-29177:Ray County 
+US-MO-29179:Reynolds County 
+US-MO-29181:Ripley County 
+US-MO-29183:St. Charles County 
+US-MO-29185:St. Clair County 
+US-MO-29186:Ste. Genevieve County 
+US-MO-29187:St. Francois County 
+US-MO-29189:St. Louis County 
+US-MO-29195:Saline County 
+US-MO-29197:Schuyler County 
+US-MO-29199:Scotland County 
+US-MO-29201:Scott County 
+US-MO-29203:Shannon County 
+US-MO-29205:Shelby County 
+US-MO-29207:Stoddard County 
+US-MO-29209:Stone County 
+US-MO-29211:Sullivan County 
+US-MO-29213:Taney County 
+US-MO-29215:Texas County 
+US-MO-29217:Vernon County 
+US-MO-29219:Warren County 
+US-MO-29221:Washington County 
+US-MO-29223:Wayne County 
+US-MO-29225:Webster County 
+US-MO-29227:Worth County 
+US-MO-29229:Wright County 
+US-MO-29510:St. Louis city 
+# under Admin Level[1] ID[28]:Mississippi 
+US-MS-28001:Adams County 
+US-MS-28003:Alcorn County 
+US-MS-28005:Amite County 
+US-MS-28007:Attala County 
+US-MS-28009:Benton County 
+US-MS-28011:Bolivar County 
+US-MS-28013:Calhoun County 
+US-MS-28015:Carroll County 
+US-MS-28017:Chickasaw County 
+US-MS-28019:Choctaw County 
+US-MS-28021:Claiborne County 
+US-MS-28023:Clarke County 
+US-MS-28025:Clay County 
+US-MS-28027:Coahoma County 
+US-MS-28029:Copiah County 
+US-MS-28031:Covington County 
+US-MS-28033:DeSoto County 
+US-MS-28035:Forrest County 
+US-MS-28037:Franklin County 
+US-MS-28039:George County 
+US-MS-28041:Greene County 
+US-MS-28043:Grenada County 
+US-MS-28045:Hancock County 
+US-MS-28047:Harrison County 
+US-MS-28049:Hinds County 
+US-MS-28051:Holmes County 
+US-MS-28053:Humphreys County 
+US-MS-28055:Issaquena County 
+US-MS-28057:Itawamba County 
+US-MS-28059:Jackson County 
+US-MS-28061:Jasper County 
+US-MS-28063:Jefferson County 
+US-MS-28065:Jefferson Davis County 
+US-MS-28067:Jones County 
+US-MS-28069:Kemper County 
+US-MS-28071:Lafayette County 
+US-MS-28073:Lamar County 
+US-MS-28075:Lauderdale County 
+US-MS-28077:Lawrence County 
+US-MS-28079:Leake County 
+US-MS-28081:Lee County 
+US-MS-28083:Leflore County 
+US-MS-28085:Lincoln County 
+US-MS-28087:Lowndes County 
+US-MS-28089:Madison County 
+US-MS-28091:Marion County 
+US-MS-28093:Marshall County 
+US-MS-28095:Monroe County 
+US-MS-28097:Montgomery County 
+US-MS-28099:Neshoba County 
+US-MS-28101:Newton County 
+US-MS-28103:Noxubee County 
+US-MS-28105:Oktibbeha County 
+US-MS-28107:Panola County 
+US-MS-28109:Pearl River County 
+US-MS-28111:Perry County 
+US-MS-28113:Pike County 
+US-MS-28115:Pontotoc County 
+US-MS-28117:Prentiss County 
+US-MS-28119:Quitman County 
+US-MS-28121:Rankin County 
+US-MS-28123:Scott County 
+US-MS-28125:Sharkey County 
+US-MS-28127:Simpson County 
+US-MS-28129:Smith County 
+US-MS-28131:Stone County 
+US-MS-28133:Sunflower County 
+US-MS-28135:Tallahatchie County 
+US-MS-28137:Tate County 
+US-MS-28139:Tippah County 
+US-MS-28141:Tishomingo County 
+US-MS-28143:Tunica County 
+US-MS-28145:Union County 
+US-MS-28147:Walthall County 
+US-MS-28149:Warren County 
+US-MS-28151:Washington County 
+US-MS-28153:Wayne County 
+US-MS-28155:Webster County 
+US-MS-28157:Wilkinson County 
+US-MS-28159:Winston County 
+US-MS-28161:Yalobusha County 
+US-MS-28163:Yazoo County 
+# under Admin Level[1] ID[30]:Montana 
+US-MT-30001:Beaverhead County 
+US-MT-30003:Big Horn County 
+US-MT-30005:Blaine County 
+US-MT-30007:Broadwater County 
+US-MT-30009:Carbon County 
+US-MT-30011:Carter County 
+US-MT-30013:Cascade County 
+US-MT-30015:Chouteau County 
+US-MT-30017:Custer County 
+US-MT-30019:Daniels County 
+US-MT-30021:Dawson County 
+US-MT-30023:Deer Lodge County 
+US-MT-30025:Fallon County 
+US-MT-30027:Fergus County 
+US-MT-30029:Flathead County 
+US-MT-30031:Gallatin County 
+US-MT-30033:Garfield County 
+US-MT-30035:Glacier County 
+US-MT-30037:Golden Valley County 
+US-MT-30039:Granite County 
+US-MT-30041:Hill County 
+US-MT-30043:Jefferson County 
+US-MT-30045:Judith Basin County 
+US-MT-30047:Lake County 
+US-MT-30049:Lewis and Clark County 
+US-MT-30051:Liberty County 
+US-MT-30053:Lincoln County 
+US-MT-30055:McCone County 
+US-MT-30057:Madison County 
+US-MT-30059:Meagher County 
+US-MT-30061:Mineral County 
+US-MT-30063:Missoula County 
+US-MT-30065:Musselshell County 
+US-MT-30067:Park County 
+US-MT-30069:Petroleum County 
+US-MT-30071:Phillips County 
+US-MT-30073:Pondera County 
+US-MT-30075:Powder River County 
+US-MT-30077:Powell County 
+US-MT-30079:Prairie County 
+US-MT-30081:Ravalli County 
+US-MT-30083:Richland County 
+US-MT-30085:Roosevelt County 
+US-MT-30087:Rosebud County 
+US-MT-30089:Sanders County 
+US-MT-30091:Sheridan County 
+US-MT-30093:Silver Bow County 
+US-MT-30095:Stillwater County 
+US-MT-30097:Sweet Grass County 
+US-MT-30099:Teton County 
+US-MT-30101:Toole County 
+US-MT-30103:Treasure County 
+US-MT-30105:Valley County 
+US-MT-30107:Wheatland County 
+US-MT-30109:Wibaux County 
+US-MT-30111:Yellowstone County 
+# under Admin Level[1] ID[37]:North Carolina 
+US-NC-37001:Alamance County 
+US-NC-37003:Alexander County 
+US-NC-37005:Alleghany County 
+US-NC-37007:Anson County 
+US-NC-37009:Ashe County 
+US-NC-37011:Avery County 
+US-NC-37013:Beaufort County 
+US-NC-37015:Bertie County 
+US-NC-37017:Bladen County 
+US-NC-37019:Brunswick County 
+US-NC-37021:Buncombe County 
+US-NC-37023:Burke County 
+US-NC-37025:Cabarrus County 
+US-NC-37027:Caldwell County 
+US-NC-37029:Camden County 
+US-NC-37031:Carteret County 
+US-NC-37033:Caswell County 
+US-NC-37035:Catawba County 
+US-NC-37037:Chatham County 
+US-NC-37039:Cherokee County 
+US-NC-37041:Chowan County 
+US-NC-37043:Clay County 
+US-NC-37045:Cleveland County 
+US-NC-37047:Columbus County 
+US-NC-37049:Craven County 
+US-NC-37051:Cumberland County 
+US-NC-37053:Currituck County 
+US-NC-37055:Dare County 
+US-NC-37057:Davidson County 
+US-NC-37059:Davie County 
+US-NC-37061:Duplin County 
+US-NC-37063:Durham County 
+US-NC-37065:Edgecombe County 
+US-NC-37067:Forsyth County 
+US-NC-37069:Franklin County 
+US-NC-37071:Gaston County 
+US-NC-37073:Gates County 
+US-NC-37075:Graham County 
+US-NC-37077:Granville County 
+US-NC-37079:Greene County 
+US-NC-37081:Guilford County 
+US-NC-37083:Halifax County 
+US-NC-37085:Harnett County 
+US-NC-37087:Haywood County 
+US-NC-37089:Henderson County 
+US-NC-37091:Hertford County 
+US-NC-37093:Hoke County 
+US-NC-37095:Hyde County 
+US-NC-37097:Iredell County 
+US-NC-37099:Jackson County 
+US-NC-37101:Johnston County 
+US-NC-37103:Jones County 
+US-NC-37105:Lee County 
+US-NC-37107:Lenoir County 
+US-NC-37109:Lincoln County 
+US-NC-37111:McDowell County 
+US-NC-37113:Macon County 
+US-NC-37115:Madison County 
+US-NC-37117:Martin County 
+US-NC-37119:Mecklenburg County 
+US-NC-37121:Mitchell County 
+US-NC-37123:Montgomery County 
+US-NC-37125:Moore County 
+US-NC-37127:Nash County 
+US-NC-37129:New Hanover County 
+US-NC-37131:Northampton County 
+US-NC-37133:Onslow County 
+US-NC-37135:Orange County 
+US-NC-37137:Pamlico County 
+US-NC-37139:Pasquotank County 
+US-NC-37141:Pender County 
+US-NC-37143:Perquimans County 
+US-NC-37145:Person County 
+US-NC-37147:Pitt County 
+US-NC-37149:Polk County 
+US-NC-37151:Randolph County 
+US-NC-37153:Richmond County 
+US-NC-37155:Robeson County 
+US-NC-37157:Rockingham County 
+US-NC-37159:Rowan County 
+US-NC-37161:Rutherford County 
+US-NC-37163:Sampson County 
+US-NC-37165:Scotland County 
+US-NC-37167:Stanly County 
+US-NC-37169:Stokes County 
+US-NC-37171:Surry County 
+US-NC-37173:Swain County 
+US-NC-37175:Transylvania County 
+US-NC-37177:Tyrrell County 
+US-NC-37179:Union County 
+US-NC-37181:Vance County 
+US-NC-37183:Wake County 
+US-NC-37185:Warren County 
+US-NC-37187:Washington County 
+US-NC-37189:Watauga County 
+US-NC-37191:Wayne County 
+US-NC-37193:Wilkes County 
+US-NC-37195:Wilson County 
+US-NC-37197:Yadkin County 
+US-NC-37199:Yancey County 
+# under Admin Level[1] ID[38]:North Dakota 
+US-ND-38001:Adams County 
+US-ND-38003:Barnes County 
+US-ND-38005:Benson County 
+US-ND-38007:Billings County 
+US-ND-38009:Bottineau County 
+US-ND-38011:Bowman County 
+US-ND-38013:Burke County 
+US-ND-38015:Burleigh County 
+US-ND-38017:Cass County 
+US-ND-38019:Cavalier County 
+US-ND-38021:Dickey County 
+US-ND-38023:Divide County 
+US-ND-38025:Dunn County 
+US-ND-38027:Eddy County 
+US-ND-38029:Emmons County 
+US-ND-38031:Foster County 
+US-ND-38033:Golden Valley County 
+US-ND-38035:Grand Forks County 
+US-ND-38037:Grant County 
+US-ND-38039:Griggs County 
+US-ND-38041:Hettinger County 
+US-ND-38043:Kidder County 
+US-ND-38045:LaMoure County 
+US-ND-38047:Logan County 
+US-ND-38049:McHenry County 
+US-ND-38051:McIntosh County 
+US-ND-38053:McKenzie County 
+US-ND-38055:McLean County 
+US-ND-38057:Mercer County 
+US-ND-38059:Morton County 
+US-ND-38061:Mountrail County 
+US-ND-38063:Nelson County 
+US-ND-38065:Oliver County 
+US-ND-38067:Pembina County 
+US-ND-38069:Pierce County 
+US-ND-38071:Ramsey County 
+US-ND-38073:Ransom County 
+US-ND-38075:Renville County 
+US-ND-38077:Richland County 
+US-ND-38079:Rolette County 
+US-ND-38081:Sargent County 
+US-ND-38083:Sheridan County 
+US-ND-38085:Sioux County 
+US-ND-38087:Slope County 
+US-ND-38089:Stark County 
+US-ND-38091:Steele County 
+US-ND-38093:Stutsman County 
+US-ND-38095:Towner County 
+US-ND-38097:Traill County 
+US-ND-38099:Walsh County 
+US-ND-38101:Ward County 
+US-ND-38103:Wells County 
+US-ND-38105:Williams County 
+# under Admin Level[1] ID[31]:Nebraska 
+US-NE-31001:Adams County 
+US-NE-31003:Antelope County 
+US-NE-31005:Arthur County 
+US-NE-31007:Banner County 
+US-NE-31009:Blaine County 
+US-NE-31011:Boone County 
+US-NE-31013:Box Butte County 
+US-NE-31015:Boyd County 
+US-NE-31017:Brown County 
+US-NE-31019:Buffalo County 
+US-NE-31021:Burt County 
+US-NE-31023:Butler County 
+US-NE-31025:Cass County 
+US-NE-31027:Cedar County 
+US-NE-31029:Chase County 
+US-NE-31031:Cherry County 
+US-NE-31033:Cheyenne County 
+US-NE-31035:Clay County 
+US-NE-31037:Colfax County 
+US-NE-31039:Cuming County 
+US-NE-31041:Custer County 
+US-NE-31043:Dakota County 
+US-NE-31045:Dawes County 
+US-NE-31047:Dawson County 
+US-NE-31049:Deuel County 
+US-NE-31051:Dixon County 
+US-NE-31053:Dodge County 
+US-NE-31055:Douglas County 
+US-NE-31057:Dundy County 
+US-NE-31059:Fillmore County 
+US-NE-31061:Franklin County 
+US-NE-31063:Frontier County 
+US-NE-31065:Furnas County 
+US-NE-31067:Gage County 
+US-NE-31069:Garden County 
+US-NE-31071:Garfield County 
+US-NE-31073:Gosper County 
+US-NE-31075:Grant County 
+US-NE-31077:Greeley County 
+US-NE-31079:Hall County 
+US-NE-31081:Hamilton County 
+US-NE-31083:Harlan County 
+US-NE-31085:Hayes County 
+US-NE-31087:Hitchcock County 
+US-NE-31089:Holt County 
+US-NE-31091:Hooker County 
+US-NE-31093:Howard County 
+US-NE-31095:Jefferson County 
+US-NE-31097:Johnson County 
+US-NE-31099:Kearney County 
+US-NE-31101:Keith County 
+US-NE-31103:Keya Paha County 
+US-NE-31105:Kimball County 
+US-NE-31107:Knox County 
+US-NE-31109:Lancaster County 
+US-NE-31111:Lincoln County 
+US-NE-31113:Logan County 
+US-NE-31115:Loup County 
+US-NE-31117:McPherson County 
+US-NE-31119:Madison County 
+US-NE-31121:Merrick County 
+US-NE-31123:Morrill County 
+US-NE-31125:Nance County 
+US-NE-31127:Nemaha County 
+US-NE-31129:Nuckolls County 
+US-NE-31131:Otoe County 
+US-NE-31133:Pawnee County 
+US-NE-31135:Perkins County 
+US-NE-31137:Phelps County 
+US-NE-31139:Pierce County 
+US-NE-31141:Platte County 
+US-NE-31143:Polk County 
+US-NE-31145:Red Willow County 
+US-NE-31147:Richardson County 
+US-NE-31149:Rock County 
+US-NE-31151:Saline County 
+US-NE-31153:Sarpy County 
+US-NE-31155:Saunders County 
+US-NE-31157:Scotts Bluff County 
+US-NE-31159:Seward County 
+US-NE-31161:Sheridan County 
+US-NE-31163:Sherman County 
+US-NE-31165:Sioux County 
+US-NE-31167:Stanton County 
+US-NE-31169:Thayer County 
+US-NE-31171:Thomas County 
+US-NE-31173:Thurston County 
+US-NE-31175:Valley County 
+US-NE-31177:Washington County 
+US-NE-31179:Wayne County 
+US-NE-31181:Webster County 
+US-NE-31183:Wheeler County 
+US-NE-31185:York County 
+# under Admin Level[1] ID[33]:New Hampshire 
+US-NH-33001:Belknap County 
+US-NH-33003:Carroll County 
+US-NH-33005:Cheshire County 
+US-NH-33007:Coos County 
+US-NH-33009:Grafton County 
+US-NH-33011:HillsBorough County
+US-NH-33013:Merrimack County 
+US-NH-33015:Rockingham County 
+US-NH-33017:Strafford County 
+US-NH-33019:Sullivan County 
+# under Admin Level[1] ID[34]:New Jersey 
+US-NJ-34001:Atlantic County 
+US-NJ-34003:Bergen County 
+US-NJ-34005:Burlington County 
+US-NJ-34007:Camden County 
+US-NJ-34009:Cape May County 
+US-NJ-34011:Cumberland County 
+US-NJ-34013:Essex County 
+US-NJ-34015:Gloucester County 
+US-NJ-34017:Hudson County 
+US-NJ-34019:Hunterdon County 
+US-NJ-34021:Mercer County 
+US-NJ-34023:Middlesex County 
+US-NJ-34025:Monmouth County 
+US-NJ-34027:Morris County 
+US-NJ-34029:Ocean County 
+US-NJ-34031:Passaic County 
+US-NJ-34033:Salem County 
+US-NJ-34035:Somerset County 
+US-NJ-34037:Sussex County 
+US-NJ-34039:Union County 
+US-NJ-34041:Warren County 
+# under Admin Level[1] ID[35]:New Mexico 
+US-NM-35001:Bernalillo County 
+US-NM-35003:Catron County 
+US-NM-35005:Chaves County 
+US-NM-35006:Cibola County 
+US-NM-35007:Colfax County 
+US-NM-35009:Curry County 
+US-NM-35011:De Baca County 
+US-NM-35013:Dona Ana County 
+US-NM-35015:Eddy County 
+US-NM-35017:Grant County 
+US-NM-35019:Guadalupe County 
+US-NM-35021:Harding County 
+US-NM-35023:Hidalgo County 
+US-NM-35025:Lea County 
+US-NM-35027:Lincoln County 
+US-NM-35028:Los Alamos County 
+US-NM-35029:Luna County 
+US-NM-35031:McKinley County 
+US-NM-35033:Mora County 
+US-NM-35035:Otero County 
+US-NM-35037:Quay County 
+US-NM-35039:Rio Arriba County 
+US-NM-35041:Roosevelt County 
+US-NM-35043:Sandoval County 
+US-NM-35045:San Juan County 
+US-NM-35047:San Miguel County 
+US-NM-35049:Santa Fe County 
+US-NM-35051:Sierra County 
+US-NM-35053:Socorro County 
+US-NM-35055:Taos County 
+US-NM-35057:Torrance County 
+US-NM-35059:Union County 
+US-NM-35061:Valencia County 
+# under Admin Level[1] ID[32]:Nevada 
+US-NV-32001:Churchill County 
+US-NV-32003:Clark County 
+US-NV-32005:Douglas County 
+US-NV-32007:Elko County 
+US-NV-32009:Esmeralda County 
+US-NV-32011:Eureka County 
+US-NV-32013:Humboldt County 
+US-NV-32015:Lander County 
+US-NV-32017:Lincoln County 
+US-NV-32019:Lyon County 
+US-NV-32021:Mineral County 
+US-NV-32023:Nye County 
+US-NV-32027:Pershing County 
+US-NV-32029:Storey County 
+US-NV-32031:Washoe County 
+US-NV-32033:White Pine County 
+US-NV-32510:Carson City 
+# under Admin Level[1] ID[36]:New York 
+US-NY-36001:Albany County 
+US-NY-36003:Allegany County 
+US-NY-36005:Bronx County 
+US-NY-36007:Broome County 
+US-NY-36009:Cattaraugus County 
+US-NY-36011:Cayuga County 
+US-NY-36013:Chautauqua County 
+US-NY-36015:Chemung County 
+US-NY-36017:Chenango County 
+US-NY-36019:Clinton County 
+US-NY-36021:Columbia County 
+US-NY-36023:Cortland County 
+US-NY-36025:Delaware County 
+US-NY-36027:Dutchess County 
+US-NY-36029:Erie County 
+US-NY-36031:Essex County 
+US-NY-36033:Franklin County 
+US-NY-36035:Fulton County 
+US-NY-36037:Genesee County 
+US-NY-36039:Greene County 
+US-NY-36041:Hamilton County 
+US-NY-36043:Herkimer County 
+US-NY-36045:Jefferson County 
+US-NY-36047:Kings County 
+US-NY-36049:Lewis County 
+US-NY-36051:Livingston County 
+US-NY-36053:Madison County 
+US-NY-36055:Monroe County 
+US-NY-36057:Montgomery County 
+US-NY-36059:Nassau County 
+US-NY-36061:New York County 
+US-NY-36063:Niagara County 
+US-NY-36065:Oneida County 
+US-NY-36067:Onondaga County 
+US-NY-36069:Ontario County 
+US-NY-36071:Orange County 
+US-NY-36073:Orleans County 
+US-NY-36075:Oswego County 
+US-NY-36077:Otsego County 
+US-NY-36079:Putnam County 
+US-NY-36081:Queens County 
+US-NY-36083:Rensselaer County 
+US-NY-36085:Richmond County 
+US-NY-36087:Rockland County 
+US-NY-36089:St. Lawrence County 
+US-NY-36091:Saratoga County 
+US-NY-36093:Schenectady County 
+US-NY-36095:Schoharie County 
+US-NY-36097:Schuyler County 
+US-NY-36099:Seneca County 
+US-NY-36101:Steuben County 
+US-NY-36103:Suffolk County 
+US-NY-36105:Sullivan County 
+US-NY-36107:Tioga County 
+US-NY-36109:Tompkins County 
+US-NY-36111:Ulster County 
+US-NY-36113:Warren County 
+US-NY-36115:Washington County 
+US-NY-36117:Wayne County 
+US-NY-36119:Westchester County 
+US-NY-36121:Wyoming County 
+US-NY-36123:Yates County 
+# under Admin Level[1] ID[39]:Ohio 
+US-OH-39001:Adams County 
+US-OH-39003:Allen County 
+US-OH-39005:Ashland County 
+US-OH-39007:Ashtabula County 
+US-OH-39009:Athens County 
+US-OH-39011:Auglaize County 
+US-OH-39013:Belmont County 
+US-OH-39015:Brown County 
+US-OH-39017:Butler County 
+US-OH-39019:Carroll County 
+US-OH-39021:Champaign County 
+US-OH-39023:Clark County 
+US-OH-39025:Clermont County 
+US-OH-39027:Clinton County 
+US-OH-39029:Columbiana County 
+US-OH-39031:Coshocton County 
+US-OH-39033:Crawford County 
+US-OH-39035:Cuyahoga County 
+US-OH-39037:Darke County 
+US-OH-39039:Defiance County 
+US-OH-39041:Delaware County 
+US-OH-39043:Erie County 
+US-OH-39045:Fairfield County 
+US-OH-39047:Fayette County 
+US-OH-39049:Franklin County 
+US-OH-39051:Fulton County 
+US-OH-39053:Gallia County 
+US-OH-39055:Geauga County 
+US-OH-39057:Greene County 
+US-OH-39059:Guernsey County 
+US-OH-39061:Hamilton County 
+US-OH-39063:Hancock County 
+US-OH-39065:Hardin County 
+US-OH-39067:Harrison County 
+US-OH-39069:Henry County 
+US-OH-39071:Highland County 
+US-OH-39073:Hocking County 
+US-OH-39075:Holmes County 
+US-OH-39077:Huron County 
+US-OH-39079:Jackson County 
+US-OH-39081:Jefferson County 
+US-OH-39083:Knox County 
+US-OH-39085:Lake County 
+US-OH-39087:Lawrence County 
+US-OH-39089:Licking County 
+US-OH-39091:Logan County 
+US-OH-39093:Lorain County 
+US-OH-39095:Lucas County 
+US-OH-39097:Madison County 
+US-OH-39099:Mahoning County 
+US-OH-39101:Marion County 
+US-OH-39103:Medina County 
+US-OH-39105:Meigs County 
+US-OH-39107:Mercer County 
+US-OH-39109:Miami County 
+US-OH-39111:Monroe County 
+US-OH-39113:Montgomery County 
+US-OH-39115:Morgan County 
+US-OH-39117:Morrow County 
+US-OH-39119:Muskingum County 
+US-OH-39121:Noble County 
+US-OH-39123:Ottawa County 
+US-OH-39125:Paulding County 
+US-OH-39127:Perry County 
+US-OH-39129:Pickaway County 
+US-OH-39131:Pike County 
+US-OH-39133:Portage County 
+US-OH-39135:Preble County 
+US-OH-39137:Putnam County 
+US-OH-39139:Richland County 
+US-OH-39141:Ross County 
+US-OH-39143:Sandusky County 
+US-OH-39145:Scioto County 
+US-OH-39147:Seneca County 
+US-OH-39149:Shelby County 
+US-OH-39151:Stark County 
+US-OH-39153:Summit County 
+US-OH-39155:Trumbull County 
+US-OH-39157:Tuscarawas County 
+US-OH-39159:Union County 
+US-OH-39161:Van Wert County 
+US-OH-39163:Vinton County 
+US-OH-39165:Warren County 
+US-OH-39167:Washington County 
+US-OH-39169:Wayne County 
+US-OH-39171:Williams County 
+US-OH-39173:Wood County 
+US-OH-39175:Wyandot County 
+# under Admin Level[1] ID[40]:Oklahoma 
+US-OK-40001:Adair County 
+US-OK-40003:Alfalfa County 
+US-OK-40005:Atoka County 
+US-OK-40007:Beaver County 
+US-OK-40009:Beckham County 
+US-OK-40011:Blaine County 
+US-OK-40013:Bryan County 
+US-OK-40015:Caddo County 
+US-OK-40017:Canadian County 
+US-OK-40019:Carter County 
+US-OK-40021:Cherokee County 
+US-OK-40023:Choctaw County 
+US-OK-40025:Cimarron County 
+US-OK-40027:Cleveland County 
+US-OK-40029:Coal County 
+US-OK-40031:Comanche County 
+US-OK-40033:Cotton County 
+US-OK-40035:Craig County 
+US-OK-40037:Creek County 
+US-OK-40039:Custer County 
+US-OK-40041:Delaware County 
+US-OK-40043:Dewey County 
+US-OK-40045:Ellis County 
+US-OK-40047:Garfield County 
+US-OK-40049:Garvin County 
+US-OK-40051:Grady County 
+US-OK-40053:Grant County 
+US-OK-40055:Greer County 
+US-OK-40057:Harmon County 
+US-OK-40059:Harper County 
+US-OK-40061:Haskell County 
+US-OK-40063:Hughes County 
+US-OK-40065:Jackson County 
+US-OK-40067:Jefferson County 
+US-OK-40069:Johnston County 
+US-OK-40071:Kay County 
+US-OK-40073:Kingfisher County 
+US-OK-40075:Kiowa County 
+US-OK-40077:Latimer County 
+US-OK-40079:Le Flore County 
+US-OK-40081:Lincoln County 
+US-OK-40083:Logan County 
+US-OK-40085:Love County 
+US-OK-40087:McClain County 
+US-OK-40089:McCurtain County 
+US-OK-40091:McIntosh County 
+US-OK-40093:Major County 
+US-OK-40095:Marshall County 
+US-OK-40097:Mayes County 
+US-OK-40099:Murray County 
+US-OK-40101:Muskogee County 
+US-OK-40103:Noble County 
+US-OK-40105:Nowata County 
+US-OK-40107:Okfuskee County 
+US-OK-40109:Oklahoma County 
+US-OK-40111:Okmulgee County 
+US-OK-40113:Osage County 
+US-OK-40115:Ottawa County 
+US-OK-40117:Pawnee County 
+US-OK-40119:Payne County 
+US-OK-40121:Pittsburg County 
+US-OK-40123:Pontotoc County 
+US-OK-40125:Pottawatomie County 
+US-OK-40127:Pushmataha County 
+US-OK-40129:Roger Mills County 
+US-OK-40131:Rogers County 
+US-OK-40133:Seminole County 
+US-OK-40135:Sequoyah County 
+US-OK-40137:Stephens County 
+US-OK-40139:Texas County 
+US-OK-40141:Tillman County 
+US-OK-40143:Tulsa County 
+US-OK-40145:Wagoner County 
+US-OK-40147:Washington County 
+US-OK-40149:Washita County 
+US-OK-40151:Woods County 
+US-OK-40153:Woodward County 
+# under Admin Level[1] ID[41]:Oregon 
+US-OR-41001:Baker County 
+US-OR-41003:Benton County 
+US-OR-41005:Clackamas County 
+US-OR-41007:Clatsop County 
+US-OR-41009:Columbia County 
+US-OR-41011:Coos County 
+US-OR-41013:Crook County 
+US-OR-41015:Curry County 
+US-OR-41017:Deschutes County 
+US-OR-41019:Douglas County 
+US-OR-41021:Gilliam County 
+US-OR-41023:Grant County 
+US-OR-41025:Harney County 
+US-OR-41027:Hood River County 
+US-OR-41029:Jackson County 
+US-OR-41031:Jefferson County 
+US-OR-41033:Josephine County 
+US-OR-41035:Klamath County 
+US-OR-41037:Lake County 
+US-OR-41039:Lane County 
+US-OR-41041:Lincoln County 
+US-OR-41043:Linn County 
+US-OR-41045:Malheur County 
+US-OR-41047:Marion County 
+US-OR-41049:Morrow County 
+US-OR-41051:Multnomah County 
+US-OR-41053:Polk County 
+US-OR-41055:Sherman County 
+US-OR-41057:Tillamook County 
+US-OR-41059:Umatilla County 
+US-OR-41061:Union County 
+US-OR-41063:Wallowa County 
+US-OR-41065:Wasco County 
+US-OR-41067:Washington County 
+US-OR-41069:Wheeler County 
+US-OR-41071:Yamhill County 
+# under Admin Level[1] ID[42]:Pennsylvania 
+US-PA-42001:Adams County 
+US-PA-42003:Allegheny County 
+US-PA-42005:Armstrong County 
+US-PA-42007:Beaver County 
+US-PA-42009:Bedford County 
+US-PA-42011:Berks County 
+US-PA-42013:Blair County 
+US-PA-42015:Bradford County 
+US-PA-42017:Bucks County 
+US-PA-42019:Butler County 
+US-PA-42021:Cambria County 
+US-PA-42023:Cameron County 
+US-PA-42025:Carbon County 
+US-PA-42027:Centre County 
+US-PA-42029:Chester County 
+US-PA-42031:Clarion County 
+US-PA-42033:Clearfield County 
+US-PA-42035:Clinton County 
+US-PA-42037:Columbia County 
+US-PA-42039:Crawford County 
+US-PA-42041:Cumberland County 
+US-PA-42043:Dauphin County 
+US-PA-42045:Delaware County 
+US-PA-42047:Elk County 
+US-PA-42049:Erie County 
+US-PA-42051:Fayette County 
+US-PA-42053:Forest County 
+US-PA-42055:Franklin County 
+US-PA-42057:Fulton County 
+US-PA-42059:Greene County 
+US-PA-42061:Huntingdon County 
+US-PA-42063:Indiana County 
+US-PA-42065:Jefferson County 
+US-PA-42067:Juniata County 
+US-PA-42069:Lackawanna County 
+US-PA-42071:Lancaster County 
+US-PA-42073:Lawrence County 
+US-PA-42075:Lebanon County 
+US-PA-42077:Lehigh County 
+US-PA-42079:Luzerne County 
+US-PA-42081:Lycoming County 
+US-PA-42083:McKean County 
+US-PA-42085:Mercer County 
+US-PA-42087:Mifflin County 
+US-PA-42089:Monroe County 
+US-PA-42091:Montgomery County 
+US-PA-42093:Montour County 
+US-PA-42095:Northampton County 
+US-PA-42097:Northumberland County 
+US-PA-42099:Perry County 
+US-PA-42101:Philadelphia County 
+US-PA-42103:Pike County 
+US-PA-42105:Potter County 
+US-PA-42107:Schuylkill County 
+US-PA-42109:Snyder County 
+US-PA-42111:Somerset County 
+US-PA-42113:Sullivan County 
+US-PA-42115:Susquehanna County 
+US-PA-42117:Tioga County 
+US-PA-42119:Union County 
+US-PA-42121:Venango County 
+US-PA-42123:Warren County 
+US-PA-42125:Washington County 
+US-PA-42127:Wayne County 
+US-PA-42129:Westmoreland County 
+US-PA-42131:Wyoming County 
+US-PA-42133:York County 
+# under Admin Level[1] ID[US-PR]:Puerto Rico
+US-PR-72001:Adjuntas 
+US-PR-72003:Aguada 
+US-PR-72005:Aguadilla 
+US-PR-72007:Aguas Buenas 
+US-PR-72009:Aibonito 
+US-PR-72011:Añasco 
+US-PR-72013:Arecibo 
+US-PR-72015:Arroyo 
+US-PR-72017:Barceloneta 
+US-PR-72019:Barranquitas 
+US-PR-72021:Bayamón 
+US-PR-72023:Cabo Rojo 
+US-PR-72025:Caguas 
+US-PR-72027:Camuy 
+US-PR-72029:Canóvanas 
+US-PR-72031:Carolina 
+US-PR-72033:Cataño 
+US-PR-72035:Cayey 
+US-PR-72037:Ceiba 
+US-PR-72039:Ciales 
+US-PR-72041:Cidra 
+US-PR-72043:Coamo 
+US-PR-72045:Comerío 
+US-PR-72047:Corozal 
+US-PR-72049:Culebra 
+US-PR-72051:Dorado 
+US-PR-72053:Fajardo 
+US-PR-72054:Florida 
+US-PR-72055:Guánica 
+US-PR-72057:Guayama 
+US-PR-72059:Guayanilla 
+US-PR-72061:Guaynabo 
+US-PR-72063:Gurabo 
+US-PR-72065:Hatillo 
+US-PR-72067:Hormigueros 
+US-PR-72069:Humacao 
+US-PR-72071:Isabela 
+US-PR-72073:Jayuya 
+US-PR-72075:Juana Díaz 
+US-PR-72077:Juncos 
+US-PR-72079:Lajas 
+US-PR-72081:Lares 
+US-PR-72083:Las Marías 
+US-PR-72085:Las Piedras 
+US-PR-72087:Loíza 
+US-PR-72089:Luquillo 
+US-PR-72091:Manatí 
+US-PR-72093:Maricao 
+US-PR-72095:Maunabo 
+US-PR-72097:Mayagüez 
+US-PR-72099:Moca 
+US-PR-72101:Morovis 
+US-PR-72103:Naguabo 
+US-PR-72105:Naranjito 
+US-PR-72107:Orocovis 
+US-PR-72109:Patillas 
+US-PR-72111:Peñuelas 
+US-PR-72113:Ponce 
+US-PR-72115:Quebradillas 
+US-PR-72117:Rincón 
+US-PR-72119:Río Grande 
+US-PR-72121:Sabana Grande 
+US-PR-72123:Salinas 
+US-PR-72125:San Germán 
+US-PR-72127:San Juan 
+US-PR-72129:San Lorenzo 
+US-PR-72131:San Sebastián 
+US-PR-72133:Santa Isabel 
+US-PR-72135:Toa Alta 
+US-PR-72137:Toa Baja 
+US-PR-72139:Trujillo Alto 
+US-PR-72141:Utuado 
+US-PR-72143:Vega Alta 
+US-PR-72145:Vega Baja 
+US-PR-72147:Vieques 
+US-PR-72149:Villalba 
+US-PR-72151:Yabucoa 
+US-PR-72153:Yauco 
+# under Admin Level[1] ID[44]:Rhode Island 
+US-RI-44001:Bristol County 
+US-RI-44003:Kent County 
+US-RI-44005:Newport County 
+US-RI-44007:Providence County 
+US-RI-44009:Washington County 
+# under Admin Level[1] ID[45]:South Carolina 
+US-SC-45001:Abbeville County 
+US-SC-45003:Aiken County 
+US-SC-45005:Allendale County 
+US-SC-45007:Anderson County 
+US-SC-45009:Bamberg County 
+US-SC-45011:Barnwell County 
+US-SC-45013:Beaufort County 
+US-SC-45015:Berkeley County 
+US-SC-45017:Calhoun County 
+US-SC-45019:Charleston County 
+US-SC-45021:Cherokee County 
+US-SC-45023:Chester County 
+US-SC-45025:Chesterfield County 
+US-SC-45027:Clarendon County 
+US-SC-45029:Colleton County 
+US-SC-45031:Darlington County 
+US-SC-45033:Dillon County 
+US-SC-45035:Dorchester County 
+US-SC-45037:Edgefield County 
+US-SC-45039:Fairfield County 
+US-SC-45041:Florence County 
+US-SC-45043:Georgetown County 
+US-SC-45045:Greenville County 
+US-SC-45047:Greenwood County 
+US-SC-45049:Hampton County 
+US-SC-45051:Horry County 
+US-SC-45053:Jasper County 
+US-SC-45055:Kershaw County 
+US-SC-45057:Lancaster County 
+US-SC-45059:Laurens County 
+US-SC-45061:Lee County 
+US-SC-45063:Lexington County 
+US-SC-45065:McCormick County 
+US-SC-45067:Marion County 
+US-SC-45069:Marlboro County 
+US-SC-45071:Newberry County 
+US-SC-45073:Oconee County 
+US-SC-45075:Orangeburg County 
+US-SC-45077:Pickens County 
+US-SC-45079:Richland County 
+US-SC-45081:Saluda County 
+US-SC-45083:Spartanburg County 
+US-SC-45085:Sumter County 
+US-SC-45087:Union County 
+US-SC-45089:Williamsburg County 
+US-SC-45091:York County 
+# under Admin Level[1] ID[46]:South Dakota 
+US-SD-46003:Aurora County 
+US-SD-46005:Beadle County 
+US-SD-46007:Bennett County 
+US-SD-46009:Bon Homme County 
+US-SD-46011:Brookings County 
+US-SD-46013:Brown County 
+US-SD-46015:Brule County 
+US-SD-46017:Buffalo County 
+US-SD-46019:Butte County 
+US-SD-46021:Campbell County 
+US-SD-46023:Charles Mix County 
+US-SD-46025:Clark County 
+US-SD-46027:Clay County 
+US-SD-46029:Codington County 
+US-SD-46031:Corson County 
+US-SD-46033:Custer County 
+US-SD-46035:Davison County 
+US-SD-46037:Day County 
+US-SD-46039:Deuel County 
+US-SD-46041:Dewey County 
+US-SD-46043:Douglas County 
+US-SD-46045:Edmunds County 
+US-SD-46047:Fall River County 
+US-SD-46049:Faulk County 
+US-SD-46051:Grant County 
+US-SD-46053:Gregory County 
+US-SD-46055:Haakon County 
+US-SD-46057:Hamlin County 
+US-SD-46059:Hand County 
+US-SD-46061:Hanson County 
+US-SD-46063:Harding County 
+US-SD-46065:Hughes County 
+US-SD-46067:Hutchinson County 
+US-SD-46069:Hyde County 
+US-SD-46071:Jackson County 
+US-SD-46073:Jerauld County 
+US-SD-46075:Jones County 
+US-SD-46077:Kingsbury County 
+US-SD-46079:Lake County 
+US-SD-46081:Lawrence County 
+US-SD-46083:Lincoln County 
+US-SD-46085:Lyman County 
+US-SD-46087:McCook County 
+US-SD-46089:McPherson County 
+US-SD-46091:Marshall County 
+US-SD-46093:Meade County 
+US-SD-46095:Mellette County 
+US-SD-46097:Miner County 
+US-SD-46099:Minnehaha County 
+US-SD-46101:Moody County 
+US-SD-46103:Pennington County 
+US-SD-46105:Perkins County 
+US-SD-46107:Potter County 
+US-SD-46109:Roberts County 
+US-SD-46111:Sanborn County 
+US-SD-46113:Shannon County 
+US-SD-46115:Spink County 
+US-SD-46117:Stanley County 
+US-SD-46119:Sully County 
+US-SD-46121:Todd County 
+US-SD-46123:Tripp County 
+US-SD-46125:Turner County 
+US-SD-46127:Union County 
+US-SD-46129:Walworth County 
+US-SD-46135:Yankton County 
+US-SD-46137:Ziebach County 
+# under Admin Level[1] ID[47]:Tennessee 
+US-TN-47001:Anderson County 
+US-TN-47003:Bedford County 
+US-TN-47005:Benton County 
+US-TN-47007:Bledsoe County 
+US-TN-47009:Blount County 
+US-TN-47011:Bradley County 
+US-TN-47013:Campbell County 
+US-TN-47015:Cannon County 
+US-TN-47017:Carroll County 
+US-TN-47019:Carter County 
+US-TN-47021:Cheatham County 
+US-TN-47023:Chester County 
+US-TN-47025:Claiborne County 
+US-TN-47027:Clay County 
+US-TN-47029:Cocke County 
+US-TN-47031:Coffee County 
+US-TN-47033:Crockett County 
+US-TN-47035:Cumberland County 
+US-TN-47037:Davidson County 
+US-TN-47039:Decatur County 
+US-TN-47041:DeKalb County 
+US-TN-47043:Dickson County 
+US-TN-47045:Dyer County 
+US-TN-47047:Fayette County 
+US-TN-47049:Fentress County 
+US-TN-47051:Franklin County 
+US-TN-47053:Gibson County 
+US-TN-47055:Giles County 
+US-TN-47057:Grainger County 
+US-TN-47059:Greene County 
+US-TN-47061:Grundy County 
+US-TN-47063:Hamblen County 
+US-TN-47065:Hamilton County 
+US-TN-47067:Hancock County 
+US-TN-47069:Hardeman County 
+US-TN-47071:Hardin County 
+US-TN-47073:Hawkins County 
+US-TN-47075:Haywood County 
+US-TN-47077:Henderson County 
+US-TN-47079:Henry County 
+US-TN-47081:Hickman County 
+US-TN-47083:Houston County 
+US-TN-47085:Humphreys County 
+US-TN-47087:Jackson County 
+US-TN-47089:Jefferson County 
+US-TN-47091:Johnson County 
+US-TN-47093:Knox County 
+US-TN-47095:Lake County 
+US-TN-47097:Lauderdale County 
+US-TN-47099:Lawrence County 
+US-TN-47101:Lewis County 
+US-TN-47103:Lincoln County 
+US-TN-47105:Loudon County 
+US-TN-47107:McMinn County 
+US-TN-47109:McNairy County 
+US-TN-47111:Macon County 
+US-TN-47113:Madison County 
+US-TN-47115:Marion County 
+US-TN-47117:Marshall County 
+US-TN-47119:Maury County 
+US-TN-47121:Meigs County 
+US-TN-47123:Monroe County 
+US-TN-47125:Montgomery County 
+US-TN-47127:Moore County 
+US-TN-47129:Morgan County 
+US-TN-47131:Obion County 
+US-TN-47133:Overton County 
+US-TN-47135:Perry County 
+US-TN-47137:Pickett County 
+US-TN-47139:Polk County 
+US-TN-47141:Putnam County 
+US-TN-47143:Rhea County 
+US-TN-47145:Roane County 
+US-TN-47147:Robertson County 
+US-TN-47149:Rutherford County 
+US-TN-47151:Scott County 
+US-TN-47153:Sequatchie County 
+US-TN-47155:Sevier County 
+US-TN-47157:Shelby County 
+US-TN-47159:Smith County 
+US-TN-47161:Stewart County 
+US-TN-47163:Sullivan County 
+US-TN-47165:Sumner County 
+US-TN-47167:Tipton County 
+US-TN-47169:Trousdale County 
+US-TN-47171:Unicoi County 
+US-TN-47173:Union County 
+US-TN-47175:Van Buren County 
+US-TN-47177:Warren County 
+US-TN-47179:Washington County 
+US-TN-47181:Wayne County 
+US-TN-47183:Weakley County 
+US-TN-47185:White County 
+US-TN-47187:Williamson County 
+US-TN-47189:Wilson County 
+# under Admin Level[1] ID[48]:Texas 
+US-TX-48001:Anderson County 
+US-TX-48003:Andrews County 
+US-TX-48005:Angelina County 
+US-TX-48007:Aransas County 
+US-TX-48009:Archer County 
+US-TX-48011:Armstrong County 
+US-TX-48013:Atascosa County 
+US-TX-48015:Austin County 
+US-TX-48017:Bailey County 
+US-TX-48019:Bandera County 
+US-TX-48021:Bastrop County 
+US-TX-48023:Baylor County 
+US-TX-48025:Bee County 
+US-TX-48027:Bell County 
+US-TX-48029:Bexar County 
+US-TX-48031:Blanco County 
+US-TX-48033:Borden County 
+US-TX-48035:Bosque County 
+US-TX-48037:Bowie County 
+US-TX-48039:Brazoria County 
+US-TX-48041:Brazos County 
+US-TX-48043:Brewster County 
+US-TX-48045:Briscoe County 
+US-TX-48047:Brooks County 
+US-TX-48049:Brown County 
+US-TX-48051:Burleson County 
+US-TX-48053:Burnet County 
+US-TX-48055:Caldwell County 
+US-TX-48057:Calhoun County 
+US-TX-48059:Callahan County 
+US-TX-48061:Cameron County 
+US-TX-48063:Camp County 
+US-TX-48065:Carson County 
+US-TX-48067:Cass County 
+US-TX-48069:Castro County 
+US-TX-48071:Chambers County 
+US-TX-48073:Cherokee County 
+US-TX-48075:Childress County 
+US-TX-48077:Clay County 
+US-TX-48079:Cochran County 
+US-TX-48081:Coke County 
+US-TX-48083:Coleman County 
+US-TX-48085:Collin County 
+US-TX-48087:Collingsworth County 
+US-TX-48089:Colorado County 
+US-TX-48091:Comal County 
+US-TX-48093:Comanche County 
+US-TX-48095:Concho County 
+US-TX-48097:Cooke County 
+US-TX-48099:Coryell County 
+US-TX-48101:Cottle County 
+US-TX-48103:Crane County 
+US-TX-48105:Crockett County 
+US-TX-48107:Crosby County 
+US-TX-48109:Culberson County 
+US-TX-48111:Dallam County 
+US-TX-48113:Dallas County 
+US-TX-48115:Dawson County 
+US-TX-48117:Deaf Smith County 
+US-TX-48119:Delta County 
+US-TX-48121:Denton County 
+US-TX-48123:DeWitt County 
+US-TX-48125:Dickens County 
+US-TX-48127:Dimmit County 
+US-TX-48129:Donley County 
+US-TX-48131:Duval County 
+US-TX-48133:Eastland County 
+US-TX-48135:Ector County 
+US-TX-48137:Edwards County 
+US-TX-48139:Ellis County 
+US-TX-48141:El Paso County 
+US-TX-48143:Erath County 
+US-TX-48145:Falls County 
+US-TX-48147:Fannin County 
+US-TX-48149:Fayette County 
+US-TX-48151:Fisher County 
+US-TX-48153:Floyd County 
+US-TX-48155:Foard County 
+US-TX-48157:Fort Bend County 
+US-TX-48159:Franklin County 
+US-TX-48161:Freestone County 
+US-TX-48163:Frio County 
+US-TX-48165:Gaines County 
+US-TX-48167:Galveston County 
+US-TX-48169:Garza County 
+US-TX-48171:Gillespie County 
+US-TX-48173:Glasscock County 
+US-TX-48175:Goliad County 
+US-TX-48177:Gonzales County 
+US-TX-48179:Gray County 
+US-TX-48181:Grayson County 
+US-TX-48183:Gregg County 
+US-TX-48185:Grimes County 
+US-TX-48187:Guadalupe County 
+US-TX-48189:Hale County 
+US-TX-48191:Hall County 
+US-TX-48193:Hamilton County 
+US-TX-48195:Hansford County 
+US-TX-48197:Hardeman County 
+US-TX-48199:Hardin County 
+US-TX-48201:Harris County 
+US-TX-48203:Harrison County 
+US-TX-48205:Hartley County 
+US-TX-48207:Haskell County 
+US-TX-48209:Hays County 
+US-TX-48211:Hemphill County 
+US-TX-48213:Henderson County 
+US-TX-48215:Hidalgo County 
+US-TX-48217:Hill County 
+US-TX-48219:Hockley County 
+US-TX-48221:Hood County 
+US-TX-48223:Hopkins County 
+US-TX-48225:Houston County 
+US-TX-48227:Howard County 
+US-TX-48229:Hudspeth County 
+US-TX-48231:Hunt County 
+US-TX-48233:Hutchinson County 
+US-TX-48235:Irion County 
+US-TX-48237:Jack County 
+US-TX-48239:Jackson County 
+US-TX-48241:Jasper County 
+US-TX-48243:Jeff Davis County 
+US-TX-48245:Jefferson County 
+US-TX-48247:Jim Hogg County 
+US-TX-48249:Jim Wells County 
+US-TX-48251:Johnson County 
+US-TX-48253:Jones County 
+US-TX-48255:Karnes County 
+US-TX-48257:Kaufman County 
+US-TX-48259:Kendall County 
+US-TX-48261:Kenedy County 
+US-TX-48263:Kent County 
+US-TX-48265:Kerr County 
+US-TX-48267:Kimble County 
+US-TX-48269:King County 
+US-TX-48271:Kinney County 
+US-TX-48273:Kleberg County 
+US-TX-48275:Knox County 
+US-TX-48277:Lamar County 
+US-TX-48279:Lamb County 
+US-TX-48281:Lampasas County 
+US-TX-48283:La Salle County 
+US-TX-48285:Lavaca County 
+US-TX-48287:Lee County 
+US-TX-48289:Leon County 
+US-TX-48291:Liberty County 
+US-TX-48293:Limestone County 
+US-TX-48295:Lipscomb County 
+US-TX-48297:Live Oak County 
+US-TX-48299:Llano County 
+US-TX-48301:Loving County 
+US-TX-48303:Lubbock County 
+US-TX-48305:Lynn County 
+US-TX-48307:McCulloch County 
+US-TX-48309:McLennan County 
+US-TX-48311:McMullen County 
+US-TX-48313:Madison County 
+US-TX-48315:Marion County 
+US-TX-48317:Martin County 
+US-TX-48319:Mason County 
+US-TX-48321:Matagorda County 
+US-TX-48323:Maverick County 
+US-TX-48325:Medina County 
+US-TX-48327:Menard County 
+US-TX-48329:Midland County 
+US-TX-48331:Milam County 
+US-TX-48333:Mills County 
+US-TX-48335:Mitchell County 
+US-TX-48337:Montague County 
+US-TX-48339:Montgomery County 
+US-TX-48341:Moore County 
+US-TX-48343:Morris County 
+US-TX-48345:Motley County 
+US-TX-48347:Nacogdoches County 
+US-TX-48349:Navarro County 
+US-TX-48351:Newton County 
+US-TX-48353:Nolan County 
+US-TX-48355:Nueces County 
+US-TX-48357:Ochiltree County 
+US-TX-48359:Oldham County 
+US-TX-48361:Orange County 
+US-TX-48363:Palo Pinto County 
+US-TX-48365:Panola County 
+US-TX-48367:Parker County 
+US-TX-48369:Parmer County 
+US-TX-48371:Pecos County 
+US-TX-48373:Polk County 
+US-TX-48375:Potter County 
+US-TX-48377:Presidio County 
+US-TX-48379:Rains County 
+US-TX-48381:Randall County 
+US-TX-48383:Reagan County 
+US-TX-48385:Real County 
+US-TX-48387:Red River County 
+US-TX-48389:Reeves County 
+US-TX-48391:Refugio County 
+US-TX-48393:Roberts County 
+US-TX-48395:Robertson County 
+US-TX-48397:Rockwall County 
+US-TX-48399:Runnels County 
+US-TX-48401:Rusk County 
+US-TX-48403:Sabine County 
+US-TX-48405:San Augustine County 
+US-TX-48407:San Jacinto County 
+US-TX-48409:San Patricio County 
+US-TX-48411:San Saba County 
+US-TX-48413:Schleicher County 
+US-TX-48415:Scurry County 
+US-TX-48417:Shackelford County 
+US-TX-48419:Shelby County 
+US-TX-48421:Sherman County 
+US-TX-48423:Smith County 
+US-TX-48425:Somervell County 
+US-TX-48427:Starr County 
+US-TX-48429:Stephens County 
+US-TX-48431:Sterling County 
+US-TX-48433:Stonewall County 
+US-TX-48435:Sutton County 
+US-TX-48437:Swisher County 
+US-TX-48439:Tarrant County 
+US-TX-48441:Taylor County 
+US-TX-48443:Terrell County 
+US-TX-48445:Terry County 
+US-TX-48447:Throckmorton County 
+US-TX-48449:Titus County 
+US-TX-48451:Tom Green County 
+US-TX-48453:Travis County 
+US-TX-48455:Trinity County 
+US-TX-48457:Tyler County 
+US-TX-48459:Upshur County 
+US-TX-48461:Upton County 
+US-TX-48463:Uvalde County 
+US-TX-48465:Val Verde County 
+US-TX-48467:Van Zandt County 
+US-TX-48469:Victoria County 
+US-TX-48471:Walker County 
+US-TX-48473:Waller County 
+US-TX-48475:Ward County 
+US-TX-48477:Washington County 
+US-TX-48479:Webb County 
+US-TX-48481:Wharton County 
+US-TX-48483:Wheeler County 
+US-TX-48485:Wichita County 
+US-TX-48487:Wilbarger County 
+US-TX-48489:Willacy County 
+US-TX-48491:Williamson County 
+US-TX-48493:Wilson County 
+US-TX-48495:Winkler County 
+US-TX-48497:Wise County 
+US-TX-48499:Wood County 
+US-TX-48501:Yoakum County 
+US-TX-48503:Young County 
+US-TX-48505:Zapata County 
+US-TX-48507:Zavala County 
+# under Admin Level[1] ID[49]:Utah 
+US-UT-49001:Beaver County 
+US-UT-49003:Box Elder County 
+US-UT-49005:Cache County 
+US-UT-49007:Carbon County 
+US-UT-49009:Daggett County 
+US-UT-49011:Davis County 
+US-UT-49013:Duchesne County 
+US-UT-49015:Emery County 
+US-UT-49017:Garfield County 
+US-UT-49019:Grand County 
+US-UT-49021:Iron County 
+US-UT-49023:Juab County 
+US-UT-49025:Kane County 
+US-UT-49027:Millard County 
+US-UT-49029:Morgan County 
+US-UT-49031:Piute County 
+US-UT-49033:Rich County 
+US-UT-49035:Salt Lake County 
+US-UT-49037:San Juan County 
+US-UT-49039:Sanpete County 
+US-UT-49041:Sevier County 
+US-UT-49043:Summit County 
+US-UT-49045:Tooele County 
+US-UT-49047:Uintah County 
+US-UT-49049:Utah County 
+US-UT-49051:Wasatch County 
+US-UT-49053:Washington County 
+US-UT-49055:Wayne County 
+US-UT-49057:Weber County 
+# under Admin Level[1] ID[51]:Virginia 
+US-VA-51001:Accomack County 
+US-VA-51003:Albemarle County 
+US-VA-51005:Alleghany County 
+US-VA-51007:Amelia County 
+US-VA-51009:Amherst County 
+US-VA-51011:Appomattox County 
+US-VA-51013:Arlington County 
+US-VA-51015:Augusta County 
+US-VA-51017:Bath County 
+US-VA-51019:Bedford County 
+US-VA-51021:Bland County 
+US-VA-51023:Botetourt County 
+US-VA-51025:Brunswick County 
+US-VA-51027:Buchanan County 
+US-VA-51029:Buckingham County 
+US-VA-51031:Campbell County 
+US-VA-51033:Caroline County 
+US-VA-51035:Carroll County 
+US-VA-51036:Charles City County 
+US-VA-51037:Charlotte County 
+US-VA-51041:Chesterfield County 
+US-VA-51043:Clarke County 
+US-VA-51045:Craig County 
+US-VA-51047:Culpeper County 
+US-VA-51049:Cumberland County 
+US-VA-51051:Dickenson County 
+US-VA-51053:Dinwiddie County 
+US-VA-51057:Essex County 
+US-VA-51059:Fairfax County 
+US-VA-51061:Fauquier County 
+US-VA-51063:Floyd County 
+US-VA-51065:Fluvanna County 
+US-VA-51067:Franklin County 
+US-VA-51069:Frederick County 
+US-VA-51071:Giles County 
+US-VA-51073:Gloucester County 
+US-VA-51075:Goochland County 
+US-VA-51077:Grayson County 
+US-VA-51079:Greene County 
+US-VA-51081:Greensville County 
+US-VA-51083:Halifax County 
+US-VA-51085:Hanover County 
+US-VA-51087:Henrico County 
+US-VA-51089:Henry County 
+US-VA-51091:Highland County 
+US-VA-51093:Isle of Wight County 
+US-VA-51095:James City County 
+US-VA-51097:King and Queen County 
+US-VA-51099:King George County 
+US-VA-51101:King William County 
+US-VA-51103:Lancaster County 
+US-VA-51105:Lee County 
+US-VA-51107:Loudoun County 
+US-VA-51109:Louisa County 
+US-VA-51111:Lunenburg County 
+US-VA-51113:Madison County 
+US-VA-51115:Mathews County 
+US-VA-51117:Mecklenburg County 
+US-VA-51119:Middlesex County 
+US-VA-51121:Montgomery County 
+US-VA-51125:Nelson County 
+US-VA-51127:New Kent County 
+US-VA-51131:Northampton County 
+US-VA-51133:Northumberland County 
+US-VA-51135:Nottoway County 
+US-VA-51137:Orange County 
+US-VA-51139:Page County 
+US-VA-51141:Patrick County 
+US-VA-51143:Pittsylvania County 
+US-VA-51145:Powhatan County 
+US-VA-51147:Prince Edward County 
+US-VA-51149:Prince George County 
+US-VA-51153:Prince William County 
+US-VA-51155:Pulaski County 
+US-VA-51157:Rappahannock County 
+US-VA-51159:Richmond County 
+US-VA-51161:Roanoke County 
+US-VA-51163:Rockbridge County 
+US-VA-51165:Rockingham County 
+US-VA-51167:Russell County 
+US-VA-51169:Scott County 
+US-VA-51171:Shenandoah County 
+US-VA-51173:Smyth County 
+US-VA-51175:Southampton County 
+US-VA-51177:Spotsylvania County 
+US-VA-51179:Stafford County 
+US-VA-51181:Surry County 
+US-VA-51183:Sussex County 
+US-VA-51185:Tazewell County 
+US-VA-51187:Warren County 
+US-VA-51191:Washington County 
+US-VA-51193:Westmoreland County 
+US-VA-51195:Wise County 
+US-VA-51197:Wythe County 
+US-VA-51199:York County 
+US-VA-51510:Alexandria city 
+US-VA-51515:Bedford city 
+US-VA-51520:Bristol city 
+US-VA-51530:Buena Vista city 
+US-VA-51540:Charlottesville city 
+US-VA-51550:Chesapeake city 
+US-VA-51560:Clifton Forge city 
+US-VA-51570:Colonial Heights city 
+US-VA-51580:Covington city 
+US-VA-51590:Danville city 
+US-VA-51595:Emporia city 
+US-VA-51600:Fairfax city 
+US-VA-51610:Falls Church city 
+US-VA-51620:Franklin city 
+US-VA-51630:Fredericksburg city 
+US-VA-51640:Galax city 
+US-VA-51650:Hampton city 
+US-VA-51660:Harrisonburg city 
+US-VA-51670:Hopewell city 
+US-VA-51678:Lexington city 
+US-VA-51680:Lynchburg city 
+US-VA-51683:Manassas city 
+US-VA-51685:Manassas Park city 
+US-VA-51690:Martinsville city 
+US-VA-51700:Newport News city 
+US-VA-51710:Norfolk city 
+US-VA-51720:Norton city 
+US-VA-51730:Petersburg city 
+US-VA-51735:Poquoson city 
+US-VA-51740:Portsmouth city 
+US-VA-51750:Radford city 
+US-VA-51760:Richmond city 
+US-VA-51770:Roanoke city 
+US-VA-51775:Salem city 
+US-VA-51780:South Boston City 
+US-VA-51790:Staunton city 
+US-VA-51800:Suffolk city 
+US-VA-51810:Virginia Beach city 
+US-VA-51820:Waynesboro city 
+US-VA-51830:Williamsburg city 
+US-VA-51840:Winchester city 
+# under Admin Level[1] ID[50]:Vermont 
+US-VT-50001:Addison County 
+US-VT-50003:Bennington County 
+US-VT-50005:Caledonia County 
+US-VT-50007:Chittenden County 
+US-VT-50009:Essex County 
+US-VT-50011:Franklin County 
+US-VT-50013:Grand Isle County 
+US-VT-50015:Lamoille County 
+US-VT-50017:Orange County 
+US-VT-50019:Orleans County 
+US-VT-50021:Rutland County 
+US-VT-50023:Washington County 
+US-VT-50025:Windham County 
+US-VT-50027:Windsor County 
+# under Admin Level[1] ID[53]:Washington 
+US-WA-53001:Adams County 
+US-WA-53003:Asotin County 
+US-WA-53005:Benton County 
+US-WA-53007:Chelan County 
+US-WA-53009:Clallam County 
+US-WA-53011:Clark County 
+US-WA-53013:Columbia County 
+US-WA-53015:Cowlitz County 
+US-WA-53017:Douglas County 
+US-WA-53019:Ferry County 
+US-WA-53021:Franklin County 
+US-WA-53023:Garfield County 
+US-WA-53025:Grant County 
+US-WA-53027:Grays Harbor County 
+US-WA-53029:Island County 
+US-WA-53031:Jefferson County 
+US-WA-53033:King County 
+US-WA-53035:Kitsap County 
+US-WA-53037:Kittitas County 
+US-WA-53039:Klickitat County 
+US-WA-53041:Lewis County 
+US-WA-53043:Lincoln County 
+US-WA-53045:Mason County 
+US-WA-53047:Okanogan County 
+US-WA-53049:Pacific County 
+US-WA-53051:Pend Oreille County 
+US-WA-53053:Pierce County 
+US-WA-53055:San Juan County 
+US-WA-53057:Skagit County 
+US-WA-53059:Skamania County 
+US-WA-53061:Snohomish County 
+US-WA-53063:Spokane County 
+US-WA-53065:Stevens County 
+US-WA-53067:Thurston County 
+US-WA-53069:Wahkiakum County 
+US-WA-53071:Walla Walla County 
+US-WA-53073:Whatcom County 
+US-WA-53075:Whitman County 
+US-WA-53077:Yakima County 
+# under Admin Level[1] ID[55]:Wisconsin 
+US-WI-55001:Adams County 
+US-WI-55003:Ashland County 
+US-WI-55005:Barron County 
+US-WI-55007:Bayfield County 
+US-WI-55009:Brown County 
+US-WI-55011:Buffalo County 
+US-WI-55013:Burnett County 
+US-WI-55015:Calumet County 
+US-WI-55017:Chippewa County 
+US-WI-55019:Clark County 
+US-WI-55021:Columbia County 
+US-WI-55023:Crawford County 
+US-WI-55025:Dane County 
+US-WI-55027:Dodge County 
+US-WI-55029:Door County 
+US-WI-55031:Douglas County 
+US-WI-55033:Dunn County 
+US-WI-55035:Eau Claire County 
+US-WI-55037:Florence County 
+US-WI-55039:Fond du Lac County 
+US-WI-55041:Forest County 
+US-WI-55043:Grant County 
+US-WI-55045:Green County 
+US-WI-55047:Green Lake County 
+US-WI-55049:Iowa County 
+US-WI-55051:Iron County 
+US-WI-55053:Jackson County 
+US-WI-55055:Jefferson County 
+US-WI-55057:Juneau County 
+US-WI-55059:Kenosha County 
+US-WI-55061:Kewaunee County 
+US-WI-55063:La Crosse County 
+US-WI-55065:Lafayette County 
+US-WI-55067:Langlade County 
+US-WI-55069:Lincoln County 
+US-WI-55071:Manitowoc County 
+US-WI-55073:Marathon County 
+US-WI-55075:Marinette County 
+US-WI-55077:Marquette County 
+US-WI-55078:Menominee County 
+US-WI-55079:Milwaukee County 
+US-WI-55081:Monroe County 
+US-WI-55083:Oconto County 
+US-WI-55085:Oneida County 
+US-WI-55087:Outagamie County 
+US-WI-55089:Ozaukee County 
+US-WI-55091:Pepin County 
+US-WI-55093:Pierce County 
+US-WI-55095:Polk County 
+US-WI-55097:Portage County 
+US-WI-55099:Price County 
+US-WI-55101:Racine County 
+US-WI-55103:Richland County 
+US-WI-55105:Rock County 
+US-WI-55107:Rusk County 
+US-WI-55109:St. Croix County 
+US-WI-55111:Sauk County 
+US-WI-55113:Sawyer County 
+US-WI-55115:Shawano County 
+US-WI-55117:Sheboygan County 
+US-WI-55119:Taylor County 
+US-WI-55121:Trempealeau County 
+US-WI-55123:Vernon County 
+US-WI-55125:Vilas County 
+US-WI-55127:Walworth County 
+US-WI-55129:Washburn County 
+US-WI-55131:Washington County 
+US-WI-55133:Waukesha County 
+US-WI-55135:Waupaca County 
+US-WI-55137:Waushara County 
+US-WI-55139:Winnebago County 
+US-WI-55141:Wood County 
+# under Admin Level[1] ID[54]:West Virginia 
+US-WV-54001:Barbour County 
+US-WV-54003:Berkeley County 
+US-WV-54005:Boone County 
+US-WV-54007:Braxton County 
+US-WV-54009:Brooke County 
+US-WV-54011:Cabell County 
+US-WV-54013:Calhoun County 
+US-WV-54015:Clay County 
+US-WV-54017:Doddridge County 
+US-WV-54019:Fayette County 
+US-WV-54021:Gilmer County 
+US-WV-54023:Grant County 
+US-WV-54025:Greenbrier County 
+US-WV-54027:Hampshire County 
+US-WV-54029:Hancock County 
+US-WV-54031:Hardy County 
+US-WV-54033:Harrison County 
+US-WV-54035:Jackson County 
+US-WV-54037:Jefferson County 
+US-WV-54039:Kanawha County 
+US-WV-54041:Lewis County 
+US-WV-54043:Lincoln County 
+US-WV-54045:Logan County 
+US-WV-54047:McDowell County 
+US-WV-54049:Marion County 
+US-WV-54051:Marshall County 
+US-WV-54053:Mason County 
+US-WV-54055:Mercer County 
+US-WV-54057:Mineral County 
+US-WV-54059:Mingo County 
+US-WV-54061:Monongalia County 
+US-WV-54063:Monroe County 
+US-WV-54065:Morgan County 
+US-WV-54067:Nicholas County 
+US-WV-54069:Ohio County 
+US-WV-54071:Pendleton County 
+US-WV-54073:Pleasants County 
+US-WV-54075:Pocahontas County 
+US-WV-54077:Preston County 
+US-WV-54079:Putnam County 
+US-WV-54081:Raleigh County 
+US-WV-54083:Randolph County 
+US-WV-54085:Ritchie County 
+US-WV-54087:Roane County 
+US-WV-54089:Summers County 
+US-WV-54091:Taylor County 
+US-WV-54093:Tucker County 
+US-WV-54095:Tyler County 
+US-WV-54097:Upshur County 
+US-WV-54099:Wayne County 
+US-WV-54101:Webster County 
+US-WV-54103:Wetzel County 
+US-WV-54105:Wirt County 
+US-WV-54107:Wood County 
+US-WV-54109:Wyoming County 
+# under Admin Level[1] ID[56]:Wyoming 
+US-WY-56001:Albany County 
+US-WY-56003:Big Horn County 
+US-WY-56005:Campbell County 
+US-WY-56007:Carbon County 
+US-WY-56009:Converse County 
+US-WY-56011:Crook County 
+US-WY-56013:Fremont County 
+US-WY-56015:Goshen County 
+US-WY-56017:Hot Springs County 
+US-WY-56019:Johnson County 
+US-WY-56021:Laramie County 
+US-WY-56023:Lincoln County 
+US-WY-56025:Natrona County 
+US-WY-56027:Niobrara County 
+US-WY-56029:Park County 
+US-WY-56031:Platte County 
+US-WY-56033:Sheridan County 
+US-WY-56035:Sublette County 
+US-WY-56037:Sweetwater County 
+US-WY-56039:Teton County 
+US-WY-56041:Uinta County 
+US-WY-56043:Washakie County 
+US-WY-56045:Weston County
diff --git a/org.eclipse.stem.utility/parameters/USA_L1_Data/USA_L1.txt b/org.eclipse.stem.utility/parameters/USA_L1_Data/USA_L1.txt
new file mode 100644
index 0000000..f3a7694
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/USA_L1_Data/USA_L1.txt
@@ -0,0 +1,57 @@
+US	:	USA	:	US-AL	:	Alabama	:	1
+US	:	USA	:	US-AK	:	Alaska	:	2
+US	:	USA	:	US-AZ	:	Arizona	:	4
+US	:	USA	:	US-AR	:	Arkansas	:	5
+US	:	USA	:	US-CA	:	California	:	6
+US	:	USA	:	US-CO	:	Colorado	:	8
+US	:	USA	:	US-CT	:	Connecticut	:	9
+US	:	USA	:	US-DE	:	Delaware	:	10
+US	:	USA	:	US-FL	:	Florida	:	12
+US	:	USA	:	US-GA	:	Georgia	:	13
+US	:	USA	:	US-HI	:	Hawaii	:	15
+US	:	USA	:	US-ID	:	Idaho	:	16
+US	:	USA	:	US-IL	:	Illinois	:	17
+US	:	USA	:	US-IN	:	Indiana	:	18
+US	:	USA	:	US-IA	:	Iowa	:	19
+US	:	USA	:	US-KS	:	Kansas	:	20
+US	:	USA	:	US-KY	:	Kentucky	:	21
+US	:	USA	:	US-LA	:	Louisiana	:	22
+US	:	USA	:	US-ME	:	Maine	:	23
+US	:	USA	:	US-MD	:	Maryland	:	24
+US	:	USA	:	US-MA	:	Massachusetts	:	25
+US	:	USA	:	US-MI	:	Michigan	:	26
+US	:	USA	:	US-MN	:	Minnesota	:	27
+US	:	USA	:	US-MS	:	Mississippi	:	28
+US	:	USA	:	US-MO	:	Missouri	:	29
+US	:	USA	:	US-MT	:	Montana	:	30
+US	:	USA	:	US-NE	:	Nebraska	:	31
+US	:	USA	:	US-NV	:	Nevada	:	32
+US	:	USA	:	US-NH	:	New Hampshire	:	33
+US	:	USA	:	US-NJ	:	New Jersey	:	34
+US	:	USA	:	US-NM	:	New Mexico	:	35
+US	:	USA	:	US-NY	:	New York	:	36
+US	:	USA	:	US-NC	:	North Carolina	:	37
+US	:	USA	:	US-ND	:	North Dakota	:	38
+US	:	USA	:	US-OH	:	Ohio	:	39
+US	:	USA	:	US-OK	:	Oklahoma	:	40
+US	:	USA	:	US-OR	:	Oregon	:	41
+US	:	USA	:	US-PA	:	Pennsylvania	:	42
+US	:	USA	:	US-RI	:	Rhode Island	:	44
+US	:	USA	:	US-SC	:	South Carolina	:	45
+US	:	USA	:	US-SD	:	South Dakota	:	46
+US	:	USA	:	US-TN	:	Tennessee	:	47
+US	:	USA	:	US-TX	:	Texas	:	48
+US	:	USA	:	US-UT	:	Utah	:	49
+US	:	USA	:	US-VT	:	Vermont	:	50
+US	:	USA	:	US-VA	:	Virginia	:	51
+US	:	USA	:	US-WA	:	Washington	:	53
+US	:	USA	:	US-WV	:	West Virginia	:	54
+US	:	USA	:	US-WI	:	Wisconsin	:	55
+US	:	USA	:	US-WY	:	Wyoming	:	56
+US	:	USA	:	US-DC	:	District of Columbia	:	11
+US	:	USA	:	US-AS	:	American Samoa	:	57
+US	:	USA	:	US-GU	:	Guam	:	58
+US	:	USA	:	US-MP	:	Northern Mariana Islands	:	59
+US	:	USA	:	US-PR	:	Puerto Rico	:	72
+US	:	USA	:	US-UM	:	United States Minor Outlying Islands	:	61
+US	:	USA	:	US-VI	:	Virgin Islands	:	62
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..85fd3f9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN1_LEX.txt
@@ -0,0 +1,34 @@
+1:AF-BDS:AF:BADAKHSHAN
+2:AF-BDG:AF:BADGHIS
+3:AF-BGL:AF:BAGHLAN [BAGHIAN]
+4:AF-BAL:AF:BALKH
+5:AF-BAM:AF:BAMIAN
+6:AF-DAY:AF:DYKOND
+7:AF-FRA:AF:FARAH
+8:AF-FYB:AF:FARYAB
+9:AF-GHA:AF:GHAZNI [GHAZN]
+10:AF-GHO:AF:GHOWR
+11:AF-HEL:AF:HELMAND
+12:AF-HER:AF:HERAT
+13:AF-JOW:AF:JOWZJAN
+14:AF-KAB:AF:KABUL [KABOL]
+15:AF-KAN:AF:KANDAHAR
+16:AF-KAP:AF:KAPISA
+17:AF-KHO:AF:KHOWST
+18:AF-KNR:AF:KONAR [KUNAR]
+19:AF-KDZ:AF:KONDOZ [KUNDUZ] [KONDUZ]
+20:AF-LAG:AF:LAGHMAN
+21:AF-LOW:AF:LOWGAR
+22:AF-NAN:AF:NANGRAHAR [NANGARHAR] [NANGARHA]
+23:AF-NIM:AF:NIMRUZ
+24:AF-NUR:AF:NRESTN
+25:AF-ORU:AF:ORUZGAN [URUZGAN]
+26:AF-PIA:AF:PAKTIA
+27:AF-PKA:AF:PAKTIKA
+28:AF-PAN:AF:PANJSHR
+29:AF-PAR:AF:PARWAN [PARVAN]
+30:AF-SAM:AF:SAMANGAN
+31:AF-SAR:AF:SAR E POL
+32:AF-TAK:AF:TAKHAR
+33:AF-WAR:AF:WARDAK [WARDAG] [VARDAK]
+34:AF-ZAB:AF:ZABOL [ZABUL]
diff --git a/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..b41df16
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AFG/AFG_ADMIN2_LEX.txt
@@ -0,0 +1,28 @@
+1:AF:AFG:AFGHANISTAN:Vardak:AFG.L2.28
+1:AF:AFG:AFGHANISTAN:Samangan:AFG.L2.9
+1:AF:AFG:AFGHANISTAN:Parvan:AFG.L2.4
+1:AF:AFG:AFGHANISTAN:Balkh:AFG.L2.17
+1:AF:AFG:AFGHANISTAN:Kapisa:AFG.L2.18
+1:AF:AFG:AFGHANISTAN:Laghman:AFG.L2.25
+1:AF:AFG:AFGHANISTAN:Kandahar:AFG.L2.24
+1:AF:AFG:AFGHANISTAN:Takhar:AFG.L2.12
+1:AF:AFG:AFGHANISTAN:Konduz:AFG.L2.26
+1:AF:AFG:AFGHANISTAN:Zabol:AFG.L2.1
+1:AF:AFG:AFGHANISTAN:Faryab:AFG.L2.20
+1:AF:AFG:AFGHANISTAN:Jowzjan:AFG.L2.15
+1:AF:AFG:AFGHANISTAN:Ghazn:AFG.L2.5
+1:AF:AFG:AFGHANISTAN:Herat:AFG.L2.2
+1:AF:AFG:AFGHANISTAN:Farah:AFG.L2.23
+1:AF:AFG:AFGHANISTAN:Nangarha:AFG.L2.14
+1:AF:AFG:AFGHANISTAN:Ghowr:AFG.L2.3
+1:AF:AFG:AFGHANISTAN:Kabul:AFG.L2.16
+1:AF:AFG:AFGHANISTAN:Lowgar:AFG.L2.11
+1:AF:AFG:AFGHANISTAN:Nimruz:AFG.L2.19
+1:AF:AFG:AFGHANISTAN:Baghian:AFG.L2.6
+1:AF:AFG:AFGHANISTAN:Paktia:AFG.L2.8
+1:AF:AFG:AFGHANISTAN:Oruzgan:AFG.L2.22
+1:AF:AFG:AFGHANISTAN:Helmand:AFG.L2.27
+1:AF:AFG:AFGHANISTAN:Bamian:AFG.L2.7
+1:AF:AFG:AFGHANISTAN:Konar:AFG.L2.13
+1:AF:AFG:AFGHANISTAN:Badghis:AFG.L2.21
+1:AF:AFG:AFGHANISTAN:Badakhshan:AFG.L2.10
diff --git a/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6a41fd7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN1_LEX.txt
@@ -0,0 +1,18 @@
+1:AO-BGO:AO:BENGO
+2:AO-BGU:AO:BENGUELA
+3:AO-BIE:AO:BIE
+4:AO-CAB:AO:CABINDA
+5:AO-CCU:AO:CUANDO CUBANGO
+6:AO-CNO:AO:CUANZA NORTE
+7:AO-CUS:AO:CUANZA SUL
+8:AO-CNN:AO:CUNENE
+9:AO-HUA:AO:HUAMBO
+10:AO-HUI:AO:HUILA
+11:AO-LUA:AO:LUANDA
+12:AO-LNO:AO:LUNDA NORTE
+13:AO-LSU:AO:LUNDA SUL
+14:AO-MAL:AO:MALANJE
+15:AO-MOX:AO:MOXICO
+16:AO-NAM:AO:NAMIBE
+17:AO-UIG:AO:UIGE
+18:AO-ZAI:AO:ZAIRE
diff --git a/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN2_LEX.txt
new file mode 100644
index 0000000..b5b8366
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AGO/AGO_ADMIN2_LEX.txt
@@ -0,0 +1,34 @@
+1:AO:AGO:ANGOLA:Huambo:AGO.L2.31
+1:AO:AGO:ANGOLA:Cuanza Norte:AGO.L2.12
+1:AO:AGO:ANGOLA:Malanje:AGO.L2.30
+1:AO:AGO:ANGOLA:Cuanza Sul:AGO.L2.13
+1:AO:AGO:ANGOLA:Bie:AGO.L2.2
+1:AO:AGO:ANGOLA:Cunene:AGO.L2.1
+1:AO:AGO:ANGOLA:Bengo:AGO.L2.33
+1:AO:AGO:ANGOLA:Namibe:AGO.L2.4
+2:AO:AGO:ANGOLA:Namibe:AGO.L2.5
+1:AO:AGO:ANGOLA:Lunda Norte:AGO.L2.15
+1:AO:AGO:ANGOLA:Uige:AGO.L2.34
+1:AO:AGO:ANGOLA:Zaire:AGO.L2.16
+2:AO:AGO:ANGOLA:Zaire:AGO.L2.17
+3:AO:AGO:ANGOLA:Zaire:AGO.L2.18
+4:AO:AGO:ANGOLA:Zaire:AGO.L2.19
+5:AO:AGO:ANGOLA:Zaire:AGO.L2.20
+6:AO:AGO:ANGOLA:Zaire:AGO.L2.21
+7:AO:AGO:ANGOLA:Zaire:AGO.L2.22
+8:AO:AGO:ANGOLA:Zaire:AGO.L2.23
+9:AO:AGO:ANGOLA:Zaire:AGO.L2.24
+10:AO:AGO:ANGOLA:Zaire:AGO.L2.25
+11:AO:AGO:ANGOLA:Zaire:AGO.L2.26
+12:AO:AGO:ANGOLA:Zaire:AGO.L2.27
+1:AO:AGO:ANGOLA:Luanda:AGO.L2.10
+2:AO:AGO:ANGOLA:Luanda:AGO.L2.6
+3:AO:AGO:ANGOLA:Luanda:AGO.L2.7
+4:AO:AGO:ANGOLA:Luanda:AGO.L2.8
+5:AO:AGO:ANGOLA:Luanda:AGO.L2.9
+1:AO:AGO:ANGOLA:Huila:AGO.L2.14
+1:AO:AGO:ANGOLA:Lunda Sul:AGO.L2.28
+1:AO:AGO:ANGOLA:Benguela:AGO.L2.3
+1:AO:AGO:ANGOLA:Cuando Cubango:AGO.L2.29
+1:AO:AGO:ANGOLA:Moxico:AGO.L2.11
+1:AO:AGO:ANGOLA:Cabinda:AGO.L2.32
diff --git a/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ce2d520
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN1_LEX.txt
@@ -0,0 +1,36 @@
+1:AL-BR:AL:BERAT
+2:AL-BU:AL:BULQIZE
+3:AL-DL:AL:DELVINE
+4:AL-DV:AL:DEVOLL
+5:AL-DI:AL:DIBER
+6:AL-DR:AL:DURRES
+7:AL-EL:AL:ELBASAN
+8:AL-FR:AL:FIER
+9:AL-GJ:AL:GJIROKASTER
+10:AL-GR:AL:GRAMSH
+11:AL-HA:AL:HAS
+12:AL-KA:AL:KAVAJE
+13:AL-ER:AL:KOLONJE
+14:AL-KO:AL:KORCE
+15:AL-KR:AL:KRUJE
+16:AL-KC:AL:KUCOVE
+17:AL-KU:AL:KUKES
+18:AL-KB:AL:KURBIN
+19:AL-LE:AL:LEZHE
+20:AL-LB:AL:LIBRAZHD
+21:AL-LU:AL:LUSHNJE
+22:AL-MM:AL:MALESI E MADHE
+23:AL-MK:AL:MALLAKASTER
+24:AL-MT:AL:MAT
+25:AL-MR:AL:MIRDITE
+26:AL-PQ:AL:PEQIN
+27:AL-PR:AL:PERMET
+28:AL-PG:AL:POGRADEC
+29:AL-PU:AL:PUKE
+30:AL-SR:AL:SARANDE
+31:AL-SH:AL:SHQIP‰RIA
+32:AL-SK:AL:SKRAPAR
+33:AL-TE:AL:TEPELENE
+34:AL-TR:AL:TIRANE
+35:AL-TP:AL:TROPOJE
+36:AL-VL:AL:VLORE
diff --git a/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ALB/ALB_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN1_LEX.txt
new file mode 100644
index 0000000..85b867f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:AD-01:AD:ANDORRA
diff --git a/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AND/AND_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..a157af1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN1_LEX.txt
@@ -0,0 +1,8 @@
+1:AE-AZ:AE:ABU DHABI
+2:AE-AJ:AE:AJMAN
+3:AE-FU:AE:AL FUJAYRAH
+4:AE-DU:AE:DUBAI
+5:AE-NEU:AE:NEUTRAL ZONE
+6:AE-RK:AE:RAS AL KHAYMAH
+7:AE-SH:AE:SHARIQAH
+8:AE-UQ:AE:UMM AL QAYWAYN
diff --git a/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..0f9214f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARE/ARE_ADMIN2_LEX.txt
@@ -0,0 +1,85 @@
+1:AE:ARE:UNITEDARABEMIRATES:Neutral Zone:ARE.L2.64
+2:AE:ARE:UNITEDARABEMIRATES:Neutral Zone:ARE.L2.65
+1:AE:ARE:UNITEDARABEMIRATES:Shariqah:ARE.L2.66
+2:AE:ARE:UNITEDARABEMIRATES:Shariqah:ARE.L2.67
+1:AE:ARE:UNITEDARABEMIRATES:Dubai:ARE.L2.81
+2:AE:ARE:UNITEDARABEMIRATES:Dubai:ARE.L2.82
+1:AE:ARE:UNITEDARABEMIRATES:Ras Al Khaymah:ARE.L2.76
+2:AE:ARE:UNITEDARABEMIRATES:Ras Al Khaymah:ARE.L2.77
+3:AE:ARE:UNITEDARABEMIRATES:Ras Al Khaymah:ARE.L2.78
+4:AE:ARE:UNITEDARABEMIRATES:Ras Al Khaymah:ARE.L2.79
+5:AE:ARE:UNITEDARABEMIRATES:Ras Al Khaymah:ARE.L2.80
+1:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.68
+2:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.69
+3:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.70
+4:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.71
+5:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.72
+6:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.73
+7:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.74
+8:AE:ARE:UNITEDARABEMIRATES:Umm Al Qaywayn:ARE.L2.75
+1:AE:ARE:UNITEDARABEMIRATES:Ajman:ARE.L2.83
+2:AE:ARE:UNITEDARABEMIRATES:Ajman:ARE.L2.84
+3:AE:ARE:UNITEDARABEMIRATES:Ajman:ARE.L2.85
+1:AE:ARE:UNITEDARABEMIRATES:Al Fujayrah:ARE.L2.1
+2:AE:ARE:UNITEDARABEMIRATES:Al Fujayrah:ARE.L2.2
+1:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.10
+2:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.11
+3:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.12
+4:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.13
+5:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.14
+6:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.15
+7:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.16
+8:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.17
+9:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.18
+10:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.19
+11:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.20
+12:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.21
+13:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.22
+14:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.23
+15:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.24
+16:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.25
+17:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.26
+18:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.27
+19:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.28
+20:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.29
+21:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.3
+22:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.30
+23:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.31
+24:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.32
+25:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.33
+26:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.34
+27:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.35
+28:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.36
+29:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.37
+30:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.38
+31:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.39
+32:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.4
+33:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.40
+34:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.41
+35:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.42
+36:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.43
+37:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.44
+38:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.45
+39:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.46
+40:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.47
+41:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.48
+42:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.49
+43:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.5
+44:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.50
+45:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.51
+46:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.52
+47:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.53
+48:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.54
+49:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.55
+50:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.56
+51:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.57
+52:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.58
+53:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.59
+54:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.6
+55:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.60
+56:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.61
+57:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.62
+58:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.63
+59:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.7
+60:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.8
+61:AE:ARE:UNITEDARABEMIRATES:Abu Dhabi:ARE.L2.9
diff --git a/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..5c814d9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN1_LEX.txt
@@ -0,0 +1,24 @@
+1:AR-B:AR:BUENOS AIRES
+2:AR-C:AR:BUENOS AIRES D.F.
+3:AR-K:AR:CATAMARCA
+4:AR-H:AR:CHACO
+5:AR-U:AR:CHUBUT
+6:AR-X:AR:CORDOBA
+7:AR-W:AR:CORRIENTES
+8:AR-E:AR:ENTRE RIOS
+9:AR-P:AR:FORMOSA
+10:AR-Y:AR:JUJUY
+11:AR-L:AR:LA PAMPA
+12:AR-F:AR:LA RIOJA
+13:AR-M:AR:MENDOZA
+14:AR-N:AR:MISIONES
+15:AR-Q:AR:NEUQUEN
+16:AR-R:AR:RIO NEGRO
+17:AR-A:AR:SALTA
+18:AR-J:AR:SAN JUAN
+19:AR-D:AR:SAN LUIS
+20:AR-Z:AR:SANTA CRUZ
+21:AR-S:AR:SANTA FE
+22:AR-G:AR:SANTIAGO DEL ESTERO
+23:AR-V:AR:TIERRA DEL FUEGO
+24:AR-T:AR:TUCUMAN
diff --git a/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..0da8846
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARG/ARG_ADMIN2_LEX.txt
@@ -0,0 +1,519 @@
+1:AR:ARG:ARGENTINA:TIERRA DEL FUEGO:Rio Grande
+2:AR:ARG:ARGENTINA:TIERRA DEL FUEGO:Ushuaia
+3:AR:ARG:ARGENTINA:TIERRA DEL FUEGO:Ushuaia (Is.)
+1:AR:ARG:ARGENTINA:CATAMARCA:Ambato
+2:AR:ARG:ARGENTINA:CATAMARCA:Ancasti
+3:AR:ARG:ARGENTINA:CATAMARCA:Andalgala
+4:AR:ARG:ARGENTINA:CATAMARCA:Antofagasta de la Sierra
+5:AR:ARG:ARGENTINA:CATAMARCA:Belen
+6:AR:ARG:ARGENTINA:CATAMARCA:Capayan
+7:AR:ARG:ARGENTINA:CATAMARCA:Capital
+8:AR:ARG:ARGENTINA:CATAMARCA:El Alto
+9:AR:ARG:ARGENTINA:CATAMARCA:Fray Mamerto Esquiu
+10:AR:ARG:ARGENTINA:CATAMARCA:La Paz
+11:AR:ARG:ARGENTINA:CATAMARCA:Paclin
+12:AR:ARG:ARGENTINA:CATAMARCA:Poman
+13:AR:ARG:ARGENTINA:CATAMARCA:Santa Maria
+14:AR:ARG:ARGENTINA:CATAMARCA:Santa Rosa
+15:AR:ARG:ARGENTINA:CATAMARCA:Tinogasta
+16:AR:ARG:ARGENTINA:CATAMARCA:Valle Viejo
+1:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Aguirre
+2:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Alberdi
+3:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Atamisqui
+4:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Avellaneda
+5:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Banda
+6:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Belgrano
+7:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Capital
+8:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Choya
+9:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Copo
+10:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Figueroa
+11:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:General Taboada
+12:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Guasayan
+13:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Jimnez
+14:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Juan F. Ibarra
+15:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Loreto
+16:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Mitre
+17:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Moreno
+18:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Ojo de Agua
+19:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Pellegrini
+20:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Quebrachos
+21:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Rio Hondo
+22:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Rivadavia
+23:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Robles
+24:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Salavina
+25:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:San Martin
+26:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Sarmiento
+27:AR:ARG:ARGENTINA:SANTIAGO DEL ESTERO:Silipica
+1:AR:ARG:ARGENTINA:SALTA:Anta
+2:AR:ARG:ARGENTINA:SALTA:Cachi
+3:AR:ARG:ARGENTINA:SALTA:Cafayate
+4:AR:ARG:ARGENTINA:SALTA:Caldera
+5:AR:ARG:ARGENTINA:SALTA:Candelaria
+6:AR:ARG:ARGENTINA:SALTA:Capital
+7:AR:ARG:ARGENTINA:SALTA:Cerrillos
+8:AR:ARG:ARGENTINA:SALTA:Chicoana
+9:AR:ARG:ARGENTINA:SALTA:General Jose de San Marti
+10:AR:ARG:ARGENTINA:SALTA:Gral. Martin M. Guemes
+11:AR:ARG:ARGENTINA:SALTA:Guachipas
+12:AR:ARG:ARGENTINA:SALTA:Iruya
+13:AR:ARG:ARGENTINA:SALTA:La Vina
+14:AR:ARG:ARGENTINA:SALTA:Los Andes
+15:AR:ARG:ARGENTINA:SALTA:Metan
+16:AR:ARG:ARGENTINA:SALTA:Molinos
+17:AR:ARG:ARGENTINA:SALTA:Oran
+18:AR:ARG:ARGENTINA:SALTA:Poma
+19:AR:ARG:ARGENTINA:SALTA:Rivadavia
+20:AR:ARG:ARGENTINA:SALTA:Rosario de Lerma
+21:AR:ARG:ARGENTINA:SALTA:Rosario de la Frontera
+22:AR:ARG:ARGENTINA:SALTA:San Carlos
+23:AR:ARG:ARGENTINA:SALTA:Santa Victoria
+1:AR:ARG:ARGENTINA:CHUBUT:Biedma
+2:AR:ARG:ARGENTINA:CHUBUT:Biedma (Is.)
+3:AR:ARG:ARGENTINA:CHUBUT:Cushamen
+4:AR:ARG:ARGENTINA:CHUBUT:Escalante
+5:AR:ARG:ARGENTINA:CHUBUT:Escalante (Is.)
+6:AR:ARG:ARGENTINA:CHUBUT:Florentino Ameghino
+7:AR:ARG:ARGENTINA:CHUBUT:Florentino Ameghino (Is.)
+8:AR:ARG:ARGENTINA:CHUBUT:Futaleufu
+9:AR:ARG:ARGENTINA:CHUBUT:Gaiman
+10:AR:ARG:ARGENTINA:CHUBUT:Gastre
+11:AR:ARG:ARGENTINA:CHUBUT:Languineo
+12:AR:ARG:ARGENTINA:CHUBUT:Martines
+13:AR:ARG:ARGENTINA:CHUBUT:Paso de Indios
+14:AR:ARG:ARGENTINA:CHUBUT:Rawson
+15:AR:ARG:ARGENTINA:CHUBUT:Rio Senguerr
+16:AR:ARG:ARGENTINA:CHUBUT:Sarmiento
+17:AR:ARG:ARGENTINA:CHUBUT:Tehuelches
+18:AR:ARG:ARGENTINA:CHUBUT:Telsen
+1:AR:ARG:ARGENTINA:SANTA CRUZ:Corpen Aike
+2:AR:ARG:ARGENTINA:SANTA CRUZ:Deseado
+3:AR:ARG:ARGENTINA:SANTA CRUZ:Deseado (Is.)
+4:AR:ARG:ARGENTINA:SANTA CRUZ:Ger Aike
+5:AR:ARG:ARGENTINA:SANTA CRUZ:Ger Aike (Is.)
+6:AR:ARG:ARGENTINA:SANTA CRUZ:Lago Argentino
+7:AR:ARG:ARGENTINA:SANTA CRUZ:Lago Buenos Aires
+8:AR:ARG:ARGENTINA:SANTA CRUZ:Magallanes
+9:AR:ARG:ARGENTINA:SANTA CRUZ:Magallanes (Is.)
+10:AR:ARG:ARGENTINA:SANTA CRUZ:Rio Chico
+1:AR:ARG:ARGENTINA:TUCUMAN:Alberdi
+2:AR:ARG:ARGENTINA:TUCUMAN:Burruyacu
+3:AR:ARG:ARGENTINA:TUCUMAN:Capital
+4:AR:ARG:ARGENTINA:TUCUMAN:Chicligasta
+5:AR:ARG:ARGENTINA:TUCUMAN:Cruz Alta
+6:AR:ARG:ARGENTINA:TUCUMAN:Famailla
+7:AR:ARG:ARGENTINA:TUCUMAN:Graneros
+8:AR:ARG:ARGENTINA:TUCUMAN:La Cocha
+9:AR:ARG:ARGENTINA:TUCUMAN:Leales
+10:AR:ARG:ARGENTINA:TUCUMAN:Lules
+11:AR:ARG:ARGENTINA:TUCUMAN:Monteros
+12:AR:ARG:ARGENTINA:TUCUMAN:Rio Chico
+13:AR:ARG:ARGENTINA:TUCUMAN:Simoca
+14:AR:ARG:ARGENTINA:TUCUMAN:Tafi Viejo
+15:AR:ARG:ARGENTINA:TUCUMAN:Tafi del Valle
+16:AR:ARG:ARGENTINA:TUCUMAN:Trancas
+17:AR:ARG:ARGENTINA:TUCUMAN:Yerba Buena
+1:AR:ARG:ARGENTINA:RIO NEGRO:25 de Mayo
+2:AR:ARG:ARGENTINA:RIO NEGRO:9 de Julio
+3:AR:ARG:ARGENTINA:RIO NEGRO:Adolfo Alsina
+4:AR:ARG:ARGENTINA:RIO NEGRO:Avellaneda
+5:AR:ARG:ARGENTINA:RIO NEGRO:Barioche
+6:AR:ARG:ARGENTINA:RIO NEGRO:Conesa
+7:AR:ARG:ARGENTINA:RIO NEGRO:El Cuy
+8:AR:ARG:ARGENTINA:RIO NEGRO:General Roca
+9:AR:ARG:ARGENTINA:RIO NEGRO:Norquinco
+10:AR:ARG:ARGENTINA:RIO NEGRO:Pichi Mahuida
+11:AR:ARG:ARGENTINA:RIO NEGRO:Pilcaniyeu
+12:AR:ARG:ARGENTINA:RIO NEGRO:San Antonio
+13:AR:ARG:ARGENTINA:RIO NEGRO:Valcheta
+1:AR:ARG:ARGENTINA:ENTRE RIOS:Colon
+2:AR:ARG:ARGENTINA:ENTRE RIOS:Concordia
+3:AR:ARG:ARGENTINA:ENTRE RIOS:Diamante
+4:AR:ARG:ARGENTINA:ENTRE RIOS:Federacion
+5:AR:ARG:ARGENTINA:ENTRE RIOS:Federal
+6:AR:ARG:ARGENTINA:ENTRE RIOS:Feliciano
+7:AR:ARG:ARGENTINA:ENTRE RIOS:Gualeguay
+8:AR:ARG:ARGENTINA:ENTRE RIOS:Gualeguaychu
+9:AR:ARG:ARGENTINA:ENTRE RIOS:Isla
+10:AR:ARG:ARGENTINA:ENTRE RIOS:Islas del Ibicuy
+11:AR:ARG:ARGENTINA:ENTRE RIOS:La Paz
+12:AR:ARG:ARGENTINA:ENTRE RIOS:Nogoya
+13:AR:ARG:ARGENTINA:ENTRE RIOS:Parana
+14:AR:ARG:ARGENTINA:ENTRE RIOS:Tala
+15:AR:ARG:ARGENTINA:ENTRE RIOS:Uruguay
+16:AR:ARG:ARGENTINA:ENTRE RIOS:Victoria
+17:AR:ARG:ARGENTINA:ENTRE RIOS:Villaguay
+1:AR:ARG:ARGENTINA:NEUQUEN:Alumine
+2:AR:ARG:ARGENTINA:NEUQUEN:Anelo
+3:AR:ARG:ARGENTINA:NEUQUEN:Catan Lil
+4:AR:ARG:ARGENTINA:NEUQUEN:Chos Malal
+5:AR:ARG:ARGENTINA:NEUQUEN:Collon Cura
+6:AR:ARG:ARGENTINA:NEUQUEN:Confluencia
+7:AR:ARG:ARGENTINA:NEUQUEN:Huiliches
+8:AR:ARG:ARGENTINA:NEUQUEN:Lacar
+9:AR:ARG:ARGENTINA:NEUQUEN:Loncopue
+10:AR:ARG:ARGENTINA:NEUQUEN:Los Lagos
+11:AR:ARG:ARGENTINA:NEUQUEN:Minas
+12:AR:ARG:ARGENTINA:NEUQUEN:Nroquin
+13:AR:ARG:ARGENTINA:NEUQUEN:Pehuenches
+14:AR:ARG:ARGENTINA:NEUQUEN:Picun Leufu
+15:AR:ARG:ARGENTINA:NEUQUEN:Picunches
+16:AR:ARG:ARGENTINA:NEUQUEN:Zapala
+1:AR:ARG:ARGENTINA:SAN JUAN:25 De Mayo
+2:AR:ARG:ARGENTINA:SAN JUAN:Albardon
+3:AR:ARG:ARGENTINA:SAN JUAN:Angaco
+4:AR:ARG:ARGENTINA:SAN JUAN:Calingasta
+5:AR:ARG:ARGENTINA:SAN JUAN:Capital
+6:AR:ARG:ARGENTINA:SAN JUAN:Caucete
+7:AR:ARG:ARGENTINA:SAN JUAN:Chimbas
+8:AR:ARG:ARGENTINA:SAN JUAN:Iglesia
+9:AR:ARG:ARGENTINA:SAN JUAN:Jachal
+10:AR:ARG:ARGENTINA:SAN JUAN:Pocito
+11:AR:ARG:ARGENTINA:SAN JUAN:Rawson
+12:AR:ARG:ARGENTINA:SAN JUAN:Rivadavia
+13:AR:ARG:ARGENTINA:SAN JUAN:San Martin
+14:AR:ARG:ARGENTINA:SAN JUAN:Santa Lucia
+15:AR:ARG:ARGENTINA:SAN JUAN:Sarmiento
+16:AR:ARG:ARGENTINA:SAN JUAN:Ullun
+17:AR:ARG:ARGENTINA:SAN JUAN:Valle Fertil
+18:AR:ARG:ARGENTINA:SAN JUAN:Zonda
+1:AR:ARG:ARGENTINA:CORRIENTES:Bella Vista
+2:AR:ARG:ARGENTINA:CORRIENTES:Beron de Astrada
+3:AR:ARG:ARGENTINA:CORRIENTES:Capital
+4:AR:ARG:ARGENTINA:CORRIENTES:Concepcion
+5:AR:ARG:ARGENTINA:CORRIENTES:Curuzu Cuatia
+6:AR:ARG:ARGENTINA:CORRIENTES:Empedrado
+7:AR:ARG:ARGENTINA:CORRIENTES:Esquina
+8:AR:ARG:ARGENTINA:CORRIENTES:Ganeral Paz
+9:AR:ARG:ARGENTINA:CORRIENTES:General Alvear
+10:AR:ARG:ARGENTINA:CORRIENTES:Goya
+11:AR:ARG:ARGENTINA:CORRIENTES:Itati
+12:AR:ARG:ARGENTINA:CORRIENTES:Ituzaingo
+13:AR:ARG:ARGENTINA:CORRIENTES:Lavalle
+14:AR:ARG:ARGENTINA:CORRIENTES:Mburucuy
+15:AR:ARG:ARGENTINA:CORRIENTES:Mercedes
+16:AR:ARG:ARGENTINA:CORRIENTES:Monte Caseros
+17:AR:ARG:ARGENTINA:CORRIENTES:Paso de los Libres
+18:AR:ARG:ARGENTINA:CORRIENTES:Saladas
+19:AR:ARG:ARGENTINA:CORRIENTES:San Cosme
+20:AR:ARG:ARGENTINA:CORRIENTES:San Luis del Palmar
+21:AR:ARG:ARGENTINA:CORRIENTES:San Martin
+22:AR:ARG:ARGENTINA:CORRIENTES:San Miguel
+23:AR:ARG:ARGENTINA:CORRIENTES:San Roque
+24:AR:ARG:ARGENTINA:CORRIENTES:Santo Tome
+25:AR:ARG:ARGENTINA:CORRIENTES:Sauce
+1:AR:ARG:ARGENTINA:CHACO:12 de Octubre
+2:AR:ARG:ARGENTINA:CHACO:1ro. de Mayo
+3:AR:ARG:ARGENTINA:CHACO:25 de Mayo
+4:AR:ARG:ARGENTINA:CHACO:9 de Julio
+5:AR:ARG:ARGENTINA:CHACO:Almirante Brown
+6:AR:ARG:ARGENTINA:CHACO:Bermejo
+7:AR:ARG:ARGENTINA:CHACO:Chacabuco
+8:AR:ARG:ARGENTINA:CHACO:Comandante Fernandez
+9:AR:ARG:ARGENTINA:CHACO:Fray Justo Santa Maria de
+10:AR:ARG:ARGENTINA:CHACO:General Belgrano
+11:AR:ARG:ARGENTINA:CHACO:General Donovan
+12:AR:ARG:ARGENTINA:CHACO:General Guemes
+13:AR:ARG:ARGENTINA:CHACO:Independencia
+14:AR:ARG:ARGENTINA:CHACO:Libertad
+15:AR:ARG:ARGENTINA:CHACO:Libertador General San Ma
+16:AR:ARG:ARGENTINA:CHACO:Maipu
+17:AR:ARG:ARGENTINA:CHACO:Mayor Luis J. Fonta
+18:AR:ARG:ARGENTINA:CHACO:O. Higgins
+19:AR:ARG:ARGENTINA:CHACO:Presidente de la Plaza
+20:AR:ARG:ARGENTINA:CHACO:Quitilipi
+21:AR:ARG:ARGENTINA:CHACO:San Fernando
+22:AR:ARG:ARGENTINA:CHACO:San Lorenzo
+23:AR:ARG:ARGENTINA:CHACO:Sargento Cabral
+24:AR:ARG:ARGENTINA:CHACO:Tapenag
+1:AR:ARG:ARGENTINA:CORDOBA:Calamuchita
+2:AR:ARG:ARGENTINA:CORDOBA:Capital
+3:AR:ARG:ARGENTINA:CORDOBA:Colon
+4:AR:ARG:ARGENTINA:CORDOBA:Cruz del Eje
+5:AR:ARG:ARGENTINA:CORDOBA:General Roca
+6:AR:ARG:ARGENTINA:CORDOBA:General San Martin
+7:AR:ARG:ARGENTINA:CORDOBA:Ischilin
+8:AR:ARG:ARGENTINA:CORDOBA:Juarez Celman
+9:AR:ARG:ARGENTINA:CORDOBA:Marcos Juarez
+10:AR:ARG:ARGENTINA:CORDOBA:Minas
+11:AR:ARG:ARGENTINA:CORDOBA:Pocho
+12:AR:ARG:ARGENTINA:CORDOBA:Presidente Roque S enz Pe
+13:AR:ARG:ARGENTINA:CORDOBA:Punilla
+14:AR:ARG:ARGENTINA:CORDOBA:Rio Cuarto
+15:AR:ARG:ARGENTINA:CORDOBA:Rio Primero
+16:AR:ARG:ARGENTINA:CORDOBA:Rio Seco
+17:AR:ARG:ARGENTINA:CORDOBA:Rio Segundo
+18:AR:ARG:ARGENTINA:CORDOBA:San Alberto
+19:AR:ARG:ARGENTINA:CORDOBA:San Javier
+20:AR:ARG:ARGENTINA:CORDOBA:San Justo
+21:AR:ARG:ARGENTINA:CORDOBA:Santa Maria
+22:AR:ARG:ARGENTINA:CORDOBA:Sobremonte
+23:AR:ARG:ARGENTINA:CORDOBA:Tercero Arriba
+24:AR:ARG:ARGENTINA:CORDOBA:Totoral
+25:AR:ARG:ARGENTINA:CORDOBA:Tulumba
+26:AR:ARG:ARGENTINA:CORDOBA:Union
+1:AR:ARG:ARGENTINA:FORMOSA:Bermejo
+2:AR:ARG:ARGENTINA:FORMOSA:Formosa
+3:AR:ARG:ARGENTINA:FORMOSA:Laishi
+4:AR:ARG:ARGENTINA:FORMOSA:Matacos
+5:AR:ARG:ARGENTINA:FORMOSA:Patino
+6:AR:ARG:ARGENTINA:FORMOSA:Pilagas
+7:AR:ARG:ARGENTINA:FORMOSA:Pilcomayo
+8:AR:ARG:ARGENTINA:FORMOSA:Pirane
+9:AR:ARG:ARGENTINA:FORMOSA:Ramon Lista
+1:AR:ARG:ARGENTINA:JUJUY:Capital
+2:AR:ARG:ARGENTINA:JUJUY:Cochinoca
+3:AR:ARG:ARGENTINA:JUJUY:El Carmen
+4:AR:ARG:ARGENTINA:JUJUY:Humahuaca
+5:AR:ARG:ARGENTINA:JUJUY:Ledesma
+6:AR:ARG:ARGENTINA:JUJUY:Palpala
+7:AR:ARG:ARGENTINA:JUJUY:Rinconada
+8:AR:ARG:ARGENTINA:JUJUY:San Antonio
+9:AR:ARG:ARGENTINA:JUJUY:San Pedro
+10:AR:ARG:ARGENTINA:JUJUY:Santa Barbara
+11:AR:ARG:ARGENTINA:JUJUY:Santa Catalina
+12:AR:ARG:ARGENTINA:JUJUY:Susques
+13:AR:ARG:ARGENTINA:JUJUY:TILCARA
+14:AR:ARG:ARGENTINA:JUJUY:Tumbaya
+15:AR:ARG:ARGENTINA:JUJUY:Valle Grande
+16:AR:ARG:ARGENTINA:JUJUY:Yavi
+1:AR:ARG:ARGENTINA:BUENOS AIRES D.F.:Capital Federal
+1:AR:ARG:ARGENTINA:BUENOS AIRES:25 de Mayo
+2:AR:ARG:ARGENTINA:BUENOS AIRES:9 de Julio
+3:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.1
+4:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.2
+5:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.3
+6:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.4
+7:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.5
+8:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.6
+9:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.7
+10:AR:ARG:ARGENTINA:BUENOS AIRES:ARG.L2.8
+11:AR:ARG:ARGENTINA:BUENOS AIRES:Adolfo Alsina
+12:AR:ARG:ARGENTINA:BUENOS AIRES:Adolfo Gonzales Chaves
+13:AR:ARG:ARGENTINA:BUENOS AIRES:Alberti
+14:AR:ARG:ARGENTINA:BUENOS AIRES:Almirante Brown
+15:AR:ARG:ARGENTINA:BUENOS AIRES:Ameghino
+16:AR:ARG:ARGENTINA:BUENOS AIRES:Avellaneda
+17:AR:ARG:ARGENTINA:BUENOS AIRES:Ayacucho
+18:AR:ARG:ARGENTINA:BUENOS AIRES:Azul
+19:AR:ARG:ARGENTINA:BUENOS AIRES:Bahia Blanca
+20:AR:ARG:ARGENTINA:BUENOS AIRES:Balcarce
+21:AR:ARG:ARGENTINA:BUENOS AIRES:Baradero
+22:AR:ARG:ARGENTINA:BUENOS AIRES:Bartolome Mitre
+23:AR:ARG:ARGENTINA:BUENOS AIRES:Benito Juarez
+24:AR:ARG:ARGENTINA:BUENOS AIRES:Berazategui
+25:AR:ARG:ARGENTINA:BUENOS AIRES:Berisso
+26:AR:ARG:ARGENTINA:BUENOS AIRES:Bolivar
+27:AR:ARG:ARGENTINA:BUENOS AIRES:Bragado
+28:AR:ARG:ARGENTINA:BUENOS AIRES:Brandsen
+29:AR:ARG:ARGENTINA:BUENOS AIRES:Campana
+30:AR:ARG:ARGENTINA:BUENOS AIRES:Canuelas
+31:AR:ARG:ARGENTINA:BUENOS AIRES:Capitan Sarmiento
+32:AR:ARG:ARGENTINA:BUENOS AIRES:Carlos Casares
+33:AR:ARG:ARGENTINA:BUENOS AIRES:Carlos Tejedor
+34:AR:ARG:ARGENTINA:BUENOS AIRES:Carmen de Areco
+35:AR:ARG:ARGENTINA:BUENOS AIRES:Castelli
+36:AR:ARG:ARGENTINA:BUENOS AIRES:Chacabuco
+37:AR:ARG:ARGENTINA:BUENOS AIRES:Chascomus
+38:AR:ARG:ARGENTINA:BUENOS AIRES:Chivilcoy
+39:AR:ARG:ARGENTINA:BUENOS AIRES:Colon
+40:AR:ARG:ARGENTINA:BUENOS AIRES:Coronel Dorrego
+41:AR:ARG:ARGENTINA:BUENOS AIRES:Coronel Pringles
+42:AR:ARG:ARGENTINA:BUENOS AIRES:Coronel Suarez
+43:AR:ARG:ARGENTINA:BUENOS AIRES:Coronel de Mariana Leonar
+44:AR:ARG:ARGENTINA:BUENOS AIRES:Daireaux
+45:AR:ARG:ARGENTINA:BUENOS AIRES:Dolores
+46:AR:ARG:ARGENTINA:BUENOS AIRES:Ensenada
+47:AR:ARG:ARGENTINA:BUENOS AIRES:Escobar
+48:AR:ARG:ARGENTINA:BUENOS AIRES:Esteban Echeverria
+49:AR:ARG:ARGENTINA:BUENOS AIRES:Exaltacion de la Cruz
+50:AR:ARG:ARGENTINA:BUENOS AIRES:Florencio Varela
+51:AR:ARG:ARGENTINA:BUENOS AIRES:General Alvarado
+52:AR:ARG:ARGENTINA:BUENOS AIRES:General Alvear
+53:AR:ARG:ARGENTINA:BUENOS AIRES:General Arenales
+54:AR:ARG:ARGENTINA:BUENOS AIRES:General Belgrano
+55:AR:ARG:ARGENTINA:BUENOS AIRES:General Guido
+56:AR:ARG:ARGENTINA:BUENOS AIRES:General Juan Madariaga
+57:AR:ARG:ARGENTINA:BUENOS AIRES:General La Madrid
+58:AR:ARG:ARGENTINA:BUENOS AIRES:General Las Heras
+59:AR:ARG:ARGENTINA:BUENOS AIRES:General Lavalle
+60:AR:ARG:ARGENTINA:BUENOS AIRES:General Paz
+61:AR:ARG:ARGENTINA:BUENOS AIRES:General Pinto
+62:AR:ARG:ARGENTINA:BUENOS AIRES:General Pueyrredon
+63:AR:ARG:ARGENTINA:BUENOS AIRES:General Rodriguez
+64:AR:ARG:ARGENTINA:BUENOS AIRES:General San Martin
+65:AR:ARG:ARGENTINA:BUENOS AIRES:General Sarmiento
+66:AR:ARG:ARGENTINA:BUENOS AIRES:General Viamonte
+67:AR:ARG:ARGENTINA:BUENOS AIRES:General Villegas
+68:AR:ARG:ARGENTINA:BUENOS AIRES:Guamin
+69:AR:ARG:ARGENTINA:BUENOS AIRES:Hipolito Yrigoyen
+70:AR:ARG:ARGENTINA:BUENOS AIRES:Junin
+71:AR:ARG:ARGENTINA:BUENOS AIRES:La Costa
+72:AR:ARG:ARGENTINA:BUENOS AIRES:La Matanza
+73:AR:ARG:ARGENTINA:BUENOS AIRES:La Plata
+74:AR:ARG:ARGENTINA:BUENOS AIRES:Lanus
+75:AR:ARG:ARGENTINA:BUENOS AIRES:Laprida
+76:AR:ARG:ARGENTINA:BUENOS AIRES:Las Flores
+77:AR:ARG:ARGENTINA:BUENOS AIRES:Leonardo N. Alem
+78:AR:ARG:ARGENTINA:BUENOS AIRES:Lincoln
+79:AR:ARG:ARGENTINA:BUENOS AIRES:Loberia
+80:AR:ARG:ARGENTINA:BUENOS AIRES:Lobos
+81:AR:ARG:ARGENTINA:BUENOS AIRES:Lomas de Zamora
+82:AR:ARG:ARGENTINA:BUENOS AIRES:Lujan
+83:AR:ARG:ARGENTINA:BUENOS AIRES:Magdalena
+84:AR:ARG:ARGENTINA:BUENOS AIRES:Maipu
+85:AR:ARG:ARGENTINA:BUENOS AIRES:Mar Chiquita
+86:AR:ARG:ARGENTINA:BUENOS AIRES:Marcos Paz
+87:AR:ARG:ARGENTINA:BUENOS AIRES:Mercedes
+88:AR:ARG:ARGENTINA:BUENOS AIRES:Merlo
+89:AR:ARG:ARGENTINA:BUENOS AIRES:Monte
+90:AR:ARG:ARGENTINA:BUENOS AIRES:Monte Hermoso
+91:AR:ARG:ARGENTINA:BUENOS AIRES:Moreno
+92:AR:ARG:ARGENTINA:BUENOS AIRES:Moron
+93:AR:ARG:ARGENTINA:BUENOS AIRES:Navarro
+94:AR:ARG:ARGENTINA:BUENOS AIRES:Necochea
+95:AR:ARG:ARGENTINA:BUENOS AIRES:Olavarria
+96:AR:ARG:ARGENTINA:BUENOS AIRES:Patagones
+97:AR:ARG:ARGENTINA:BUENOS AIRES:Patagones (Is.)
+98:AR:ARG:ARGENTINA:BUENOS AIRES:Pehuajo
+99:AR:ARG:ARGENTINA:BUENOS AIRES:Pellegrini
+100:AR:ARG:ARGENTINA:BUENOS AIRES:Pergamino
+101:AR:ARG:ARGENTINA:BUENOS AIRES:Pila
+102:AR:ARG:ARGENTINA:BUENOS AIRES:Pilar
+103:AR:ARG:ARGENTINA:BUENOS AIRES:Pinamar
+104:AR:ARG:ARGENTINA:BUENOS AIRES:Puan
+105:AR:ARG:ARGENTINA:BUENOS AIRES:Quilmes
+106:AR:ARG:ARGENTINA:BUENOS AIRES:Ramallo
+107:AR:ARG:ARGENTINA:BUENOS AIRES:Rauch
+108:AR:ARG:ARGENTINA:BUENOS AIRES:Rivadavia
+109:AR:ARG:ARGENTINA:BUENOS AIRES:Rojas
+110:AR:ARG:ARGENTINA:BUENOS AIRES:Roque Perez
+111:AR:ARG:ARGENTINA:BUENOS AIRES:Saavedra
+112:AR:ARG:ARGENTINA:BUENOS AIRES:Saladillo
+113:AR:ARG:ARGENTINA:BUENOS AIRES:Salliquello
+114:AR:ARG:ARGENTINA:BUENOS AIRES:Salto
+115:AR:ARG:ARGENTINA:BUENOS AIRES:San Andres de Giles
+116:AR:ARG:ARGENTINA:BUENOS AIRES:San Antonio de Areco
+117:AR:ARG:ARGENTINA:BUENOS AIRES:San Cayetano
+118:AR:ARG:ARGENTINA:BUENOS AIRES:San Fernando
+119:AR:ARG:ARGENTINA:BUENOS AIRES:San Isidro
+120:AR:ARG:ARGENTINA:BUENOS AIRES:San Nicolas
+121:AR:ARG:ARGENTINA:BUENOS AIRES:San Pedro
+122:AR:ARG:ARGENTINA:BUENOS AIRES:San Vicente
+123:AR:ARG:ARGENTINA:BUENOS AIRES:Suipacha
+124:AR:ARG:ARGENTINA:BUENOS AIRES:Tandil
+125:AR:ARG:ARGENTINA:BUENOS AIRES:Taplquen
+126:AR:ARG:ARGENTINA:BUENOS AIRES:Tigre
+127:AR:ARG:ARGENTINA:BUENOS AIRES:Tordillo
+128:AR:ARG:ARGENTINA:BUENOS AIRES:Tornquist
+129:AR:ARG:ARGENTINA:BUENOS AIRES:Trenque Lauquen
+130:AR:ARG:ARGENTINA:BUENOS AIRES:Tres Arroyos
+131:AR:ARG:ARGENTINA:BUENOS AIRES:Tres Lomas
+132:AR:ARG:ARGENTINA:BUENOS AIRES:Tres de Febrero
+133:AR:ARG:ARGENTINA:BUENOS AIRES:Vicente Lopez
+134:AR:ARG:ARGENTINA:BUENOS AIRES:Villa Gesell
+135:AR:ARG:ARGENTINA:BUENOS AIRES:Villarino
+136:AR:ARG:ARGENTINA:BUENOS AIRES:Villarino (Is.)
+137:AR:ARG:ARGENTINA:BUENOS AIRES:Zarate
+1:AR:ARG:ARGENTINA:LA RIOJA:Arauco
+2:AR:ARG:ARGENTINA:LA RIOJA:Capital
+3:AR:ARG:ARGENTINA:LA RIOJA:Castro Barros
+4:AR:ARG:ARGENTINA:LA RIOJA:Chilecito
+5:AR:ARG:ARGENTINA:LA RIOJA:Famatina
+6:AR:ARG:ARGENTINA:LA RIOJA:General Angel V. Pesaloza
+7:AR:ARG:ARGENTINA:LA RIOJA:General Belgrano
+8:AR:ARG:ARGENTINA:LA RIOJA:General Juan F. Quiroga
+9:AR:ARG:ARGENTINA:LA RIOJA:General Lamadrid
+10:AR:ARG:ARGENTINA:LA RIOJA:General Lavalle
+11:AR:ARG:ARGENTINA:LA RIOJA:General Ocampo
+12:AR:ARG:ARGENTINA:LA RIOJA:General San Martin
+13:AR:ARG:ARGENTINA:LA RIOJA:General Sarmiento
+14:AR:ARG:ARGENTINA:LA RIOJA:Gobernador Gordillo
+15:AR:ARG:ARGENTINA:LA RIOJA:Independencia
+16:AR:ARG:ARGENTINA:LA RIOJA:Rosario Vera Penaloza
+17:AR:ARG:ARGENTINA:LA RIOJA:San Blas de los Sauces
+18:AR:ARG:ARGENTINA:LA RIOJA:Sanagasta
+1:AR:ARG:ARGENTINA:MENDOZA:Capital
+2:AR:ARG:ARGENTINA:MENDOZA:General Alvear
+3:AR:ARG:ARGENTINA:MENDOZA:Godoy Cruz
+4:AR:ARG:ARGENTINA:MENDOZA:Guaymallen
+5:AR:ARG:ARGENTINA:MENDOZA:Junin
+6:AR:ARG:ARGENTINA:MENDOZA:La Paz
+7:AR:ARG:ARGENTINA:MENDOZA:Las Heras
+8:AR:ARG:ARGENTINA:MENDOZA:Lavalle
+9:AR:ARG:ARGENTINA:MENDOZA:Lujan
+10:AR:ARG:ARGENTINA:MENDOZA:Maipu
+11:AR:ARG:ARGENTINA:MENDOZA:Malarge
+12:AR:ARG:ARGENTINA:MENDOZA:Rivadavia
+13:AR:ARG:ARGENTINA:MENDOZA:San Carlos
+14:AR:ARG:ARGENTINA:MENDOZA:San Martin
+15:AR:ARG:ARGENTINA:MENDOZA:San Rafael
+16:AR:ARG:ARGENTINA:MENDOZA:Sata Rosa
+17:AR:ARG:ARGENTINA:MENDOZA:Tunuyan
+18:AR:ARG:ARGENTINA:MENDOZA:Tupungato
+1:AR:ARG:ARGENTINA:SANTA FE:9 de Julio
+2:AR:ARG:ARGENTINA:SANTA FE:Belgrano
+3:AR:ARG:ARGENTINA:SANTA FE:Caseros
+4:AR:ARG:ARGENTINA:SANTA FE:Castellanos
+5:AR:ARG:ARGENTINA:SANTA FE:Constitucion
+6:AR:ARG:ARGENTINA:SANTA FE:Garay
+7:AR:ARG:ARGENTINA:SANTA FE:General Lopez
+8:AR:ARG:ARGENTINA:SANTA FE:General Obligado
+9:AR:ARG:ARGENTINA:SANTA FE:Iriondo
+10:AR:ARG:ARGENTINA:SANTA FE:La Capital
+11:AR:ARG:ARGENTINA:SANTA FE:Las Colonias
+12:AR:ARG:ARGENTINA:SANTA FE:Rosario
+13:AR:ARG:ARGENTINA:SANTA FE:San Cristobal
+14:AR:ARG:ARGENTINA:SANTA FE:San Javier
+15:AR:ARG:ARGENTINA:SANTA FE:San Jeronimo
+16:AR:ARG:ARGENTINA:SANTA FE:San Justo
+17:AR:ARG:ARGENTINA:SANTA FE:San Lorenzo
+18:AR:ARG:ARGENTINA:SANTA FE:San Martin
+19:AR:ARG:ARGENTINA:SANTA FE:Vera
+1:AR:ARG:ARGENTINA:LA PAMPA:Atreuco
+2:AR:ARG:ARGENTINA:LA PAMPA:Caleu Caleu
+3:AR:ARG:ARGENTINA:LA PAMPA:Capital
+4:AR:ARG:ARGENTINA:LA PAMPA:Catrilo
+5:AR:ARG:ARGENTINA:LA PAMPA:Chalileo
+6:AR:ARG:ARGENTINA:LA PAMPA:Chapaleufu
+7:AR:ARG:ARGENTINA:LA PAMPA:Chical Co
+8:AR:ARG:ARGENTINA:LA PAMPA:Conhello
+9:AR:ARG:ARGENTINA:LA PAMPA:Cura Co
+10:AR:ARG:ARGENTINA:LA PAMPA:Guatrache
+11:AR:ARG:ARGENTINA:LA PAMPA:Hucal
+12:AR:ARG:ARGENTINA:LA PAMPA:Lihuel Calel
+13:AR:ARG:ARGENTINA:LA PAMPA:Limay Mahuida
+14:AR:ARG:ARGENTINA:LA PAMPA:Loventue
+15:AR:ARG:ARGENTINA:LA PAMPA:Maraco
+16:AR:ARG:ARGENTINA:LA PAMPA:Pulen
+17:AR:ARG:ARGENTINA:LA PAMPA:Quemu Quemu
+18:AR:ARG:ARGENTINA:LA PAMPA:Ralico
+19:AR:ARG:ARGENTINA:LA PAMPA:Rancul
+20:AR:ARG:ARGENTINA:LA PAMPA:Toay
+21:AR:ARG:ARGENTINA:LA PAMPA:Trenel
+22:AR:ARG:ARGENTINA:LA PAMPA:Ultracan
+1:AR:ARG:ARGENTINA:SAN LUIS:Ayacucho
+2:AR:ARG:ARGENTINA:SAN LUIS:Belgrano
+3:AR:ARG:ARGENTINA:SAN LUIS:Chacabuco
+4:AR:ARG:ARGENTINA:SAN LUIS:Coronel Pringles
+5:AR:ARG:ARGENTINA:SAN LUIS:General Pedernera
+6:AR:ARG:ARGENTINA:SAN LUIS:Gobernador Dupuy
+7:AR:ARG:ARGENTINA:SAN LUIS:Junin
+8:AR:ARG:ARGENTINA:SAN LUIS:La Capital
+9:AR:ARG:ARGENTINA:SAN LUIS:Libertador General San Ma
+1:AR:ARG:ARGENTINA:MISIONES:25 de Mayo
+2:AR:ARG:ARGENTINA:MISIONES:Apostoles
+3:AR:ARG:ARGENTINA:MISIONES:Cainguas
+4:AR:ARG:ARGENTINA:MISIONES:Candelaria
+5:AR:ARG:ARGENTINA:MISIONES:Capital
+6:AR:ARG:ARGENTINA:MISIONES:Concepcion
+7:AR:ARG:ARGENTINA:MISIONES:Eldorado
+8:AR:ARG:ARGENTINA:MISIONES:General Manuel Belgrano
+9:AR:ARG:ARGENTINA:MISIONES:Guarani
+10:AR:ARG:ARGENTINA:MISIONES:Iguazu
+11:AR:ARG:ARGENTINA:MISIONES:Leandro N. Alem
+12:AR:ARG:ARGENTINA:MISIONES:Libertador General San Ma
+13:AR:ARG:ARGENTINA:MISIONES:Montecarlo
+14:AR:ARG:ARGENTINA:MISIONES:Obera
+15:AR:ARG:ARGENTINA:MISIONES:San Ignacio
+16:AR:ARG:ARGENTINA:MISIONES:San Javier
+17:AR:ARG:ARGENTINA:MISIONES:San Pedro
diff --git a/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d029163
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN1_LEX.txt
@@ -0,0 +1,11 @@
+1:AM-AG:AM:ARAGACOTN
+2:AM-AR:AM:ARARAT
+3:AM-AV:AM:ARMAVIR
+4:AM-ER:AM:EREVAN [YEREVAN] [ARMENIA X YEREVAN]
+5:AM-GR:AM:GEARKUNIK
+6:AM-SH:AM:IRAK
+7:AM-KT:AM:KOTAYK
+8:AM-LO:AM:LOY
+9:AM-SU:AM:SYUNIK
+10:AM-TV:AM:TAVU
+11:AM-VD:AM:VAYOC JOR
diff --git a/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..845ebbf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ARM/ARM_ADMIN2_LEX.txt
@@ -0,0 +1 @@
+1:AM:ARM:ARMENIA:Armenia x Yerevan:ARM.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN1_LEX.txt
new file mode 100644
index 0000000..86e2e4e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:AT-10:AT:BURGENLAND
+2:AT-2:AT:K„RNTEN
+3:AT-3:AT:NIEDER”STERREICH
+4:AT-4:AT:OBER”STERREICH
+5:AT-5:AT:SALZBURG
+6:AT-6:AT:STEIERMARK
+7:AT-7:AT:TIROL
+8:AT-8:AT:VORALBERG
+9:AT-9:AT:WIEN
diff --git a/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AUT/AUT_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..a2c357b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN1_LEX.txt
@@ -0,0 +1,79 @@
+1:AZ-ABS:AZ:ABERON
+2:AZ-AGC:AZ:ACABDI
+3:AZ-AGS:AZ:ADA
+4:AZ-AGM:AZ:ADAM
+5:AZ-SAH:AZ:AHBUZ
+6:AZ-SMI:AZ:AMAX
+7:AZ-AGA:AZ:ASTAFA
+8:AZ-AST:AZ:ASTARA
+9:AZ-AGU:AZ:ASU
+10:AZ-ATE:AZ:AZERBAYDZHAN TERRITOR
+11:AZ-BAB:AZ:BABK
+12:AZ-BA:AZ:BAK
+13:AZ-BAL:AZ:BALAKN
+14:AZ-BEY:AZ:BEYLQAN
+15:AZ-BIL:AZ:BILSUVAR
+16:AZ-BAR:AZ:BRD
+17:AZ-CAB:AZ:CBRAYL
+18:AZ-CAL:AZ:CLILABAB
+19:AZ-CUL:AZ:CULFA
+20:AZ-DAS:AZ:DAKSN
+21:AZ-DAV:AZ:DVCI
+22:AZ-FUZ:AZ:FÜZULI
+23:AZ-GAD:AZ:GDBY
+24:AZ-GA:AZ:GNC
+25:AZ-GOR:AZ:GORANBOY
+26:AZ-GOY:AZ:GYCAY
+27:AZ-HAC:AZ:HACQABUL
+28:AZ-SA:AZ:KI
+29:AZ-SA:AZ:KI
+30:AZ-KAL:AZ:KLBCR
+31:AZ-KUR:AZ:KÜRDMIR
+32:AZ-LAC:AZ:LACN
+33:AZ-LER:AZ:LERIK
+34:AZ-AB:AZ:LI BAYRAML
+35:AZ-LA:AZ:LNKRAN
+36:AZ-LA:AZ:LNKRAN
+37:AZ-MAS:AZ:MASALL
+38:AZ-IMI:AZ:MILI
+39:AZ-MI:AZ:MINGCEVIR
+40:AZ-SKR:AZ:MKIR
+41:AZ-NA:AZ:NAFTALAN
+42:AZ-NKA:AZ:NAGORNO KARABAKH
+43:AZ-NAK:AZ:NAKHICHEVAN
+44:AZ-NEF:AZ:NEFTCALA
+45:AZ-ORD:AZ:ORDUBAD
+46:AZ-OGU:AZ:OUZ
+47:AZ-QAX:AZ:QAX
+48:AZ-QAZ:AZ:QAZAX
+49:AZ-QAB:AZ:QBL
+50:AZ-QOB:AZ:QOBUSTAN
+51:AZ-QBA:AZ:QUBA
+52:AZ-QBI:AZ:QUBADL
+53:AZ-QUS:AZ:QUSAR
+54:AZ-SAR:AZ:RUR
+55:AZ-SAT:AZ:SAATL
+56:AZ-SAB:AZ:SABIRABAD
+57:AZ-SAL:AZ:SALYAN
+58:AZ-SMX:AZ:SAMUX
+59:AZ-SAD:AZ:SDRK
+60:AZ-SIY:AZ:SIYZN
+61:AZ-ISM:AZ:SMAYLL
+62:AZ-SM:AZ:SUMQAYT
+63:AZ-TOV:AZ:TOVUZ
+64:AZ-TAR:AZ:TRTR
+65:AZ-SS:AZ:UA
+66:AZ-SS:AZ:UA
+67:AZ-UCA:AZ:UCAR
+68:AZ-XAC:AZ:XACMAZ
+69:AZ-XA:AZ:XANKNDI
+70:AZ-XAN:AZ:XANLAR
+71:AZ-XCI:AZ:XOCAL
+72:AZ-XVD:AZ:XOCAVND
+73:AZ-XIZ:AZ:XZ
+74:AZ-YAR:AZ:YARDML
+75:AZ-YE:AZ:YEVLAX
+76:AZ-YE:AZ:YEVLAX
+77:AZ-ZAQ:AZ:ZAQATALA
+78:AZ-ZAN:AZ:ZNGILAN
+79:AZ-ZAR:AZ:ZRDAB
diff --git a/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..be62f99
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/AZE/AZE_ADMIN2_LEX.txt
@@ -0,0 +1,17 @@
+1:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.10
+2:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.11
+3:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.12
+4:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.13
+5:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.14
+6:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.15
+7:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.16
+8:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.2
+9:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.3
+10:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.4
+11:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.5
+12:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.6
+13:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.7
+14:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.8
+15:AZ:AZE:AZERBAIJAN:Azerbaydzhan Territor:AZE.L2.9
+1:AZ:AZE:AZERBAIJAN:Nakhichevan:AZE.L2.17
+1:AZ:AZE:AZERBAIJAN:Nagorno-Karabakh:AZE.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN1_LEX.txt
new file mode 100644
index 0000000..96204e4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN1_LEX.txt
@@ -0,0 +1,16 @@
+1:BI-BB:BI:BUBANZA
+2:BI-BJ:BI:BUJUMBURA
+3:BI-BR:BI:BURURI
+4:BI-CA:BI:CANKUZO
+5:BI-CI:BI:CIBITOKE
+6:BI-GI:BI:GITEGA
+7:BI-KR:BI:KARUZI
+8:BI-KY:BI:KAYANZA
+9:BI-KI:BI:KIRUNDO
+10:BI-MA:BI:MAKAMBA
+11:BI-MU:BI:MURAMVIYA
+12:BI-MY:BI:MUYINGA
+13:BI-MW:BI:MWARO
+14:BI-NG:BI:NGOZI
+15:BI-RT:BI:RUTANA
+16:BI-RY:BI:RUYIGI
diff --git a/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5abe58f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BDI/BDI_ADMIN2_LEX.txt
@@ -0,0 +1,114 @@
+1:BI:BDI:BURUNDI:Cibitoke:Buganda
+2:BI:BDI:BURUNDI:Cibitoke:Bukinanvana
+3:BI:BDI:BURUNDI:Cibitoke:Mabay
+4:BI:BDI:BURUNDI:Cibitoke:Mugina
+5:BI:BDI:BURUNDI:Cibitoke:Murwi
+6:BI:BDI:BURUNDI:Cibitoke:Rugombo
+1:BI:BDI:BURUNDI:Muramviya:Bisoro
+2:BI:BDI:BURUNDI:Muramviya:Bukeye
+3:BI:BDI:BURUNDI:Muramviya:Gisozi
+4:BI:BDI:BURUNDI:Muramviya:Kayokwe
+5:BI:BDI:BURUNDI:Muramviya:Kiganda
+6:BI:BDI:BURUNDI:Muramviya:Mbuye
+7:BI:BDI:BURUNDI:Muramviya:Muramviya
+8:BI:BDI:BURUNDI:Muramviya:Ndava
+9:BI:BDI:BURUNDI:Muramviya:Nyabigina
+10:BI:BDI:BURUNDI:Muramviya:Rusaka
+11:BI:BDI:BURUNDI:Muramviya:Rutegama
+1:BI:BDI:BURUNDI:Kayanza:Butaganzwal
+2:BI:BDI:BURUNDI:Kayanza:Gahombo
+3:BI:BDI:BURUNDI:Kayanza:Gatara
+4:BI:BDI:BURUNDI:Kayanza:Kabarore
+5:BI:BDI:BURUNDI:Kayanza:Kayanza
+6:BI:BDI:BURUNDI:Kayanza:Matongo
+7:BI:BDI:BURUNDI:Kayanza:Muhanga
+8:BI:BDI:BURUNDI:Kayanza:Muruta
+9:BI:BDI:BURUNDI:Kayanza:Rango
+1:BI:BDI:BURUNDI:Cankuzo:Cankuzo
+2:BI:BDI:BURUNDI:Cankuzo:Cendajuru
+3:BI:BDI:BURUNDI:Cankuzo:Gisagara
+4:BI:BDI:BURUNDI:Cankuzo:Kigamba
+5:BI:BDI:BURUNDI:Cankuzo:Mushiha
+1:BI:BDI:BURUNDI:Karuzi:Bugenyuzi
+2:BI:BDI:BURUNDI:Karuzi:Buhiga
+3:BI:BDI:BURUNDI:Karuzi:Gihogazi
+4:BI:BDI:BURUNDI:Karuzi:Gitaramuka
+5:BI:BDI:BURUNDI:Karuzi:Mutumba
+6:BI:BDI:BURUNDI:Karuzi:Nyabikere
+7:BI:BDI:BURUNDI:Karuzi:Shombo
+1:BI:BDI:BURUNDI:Makamba:Kayogoro
+2:BI:BDI:BURUNDI:Makamba:Kibago
+3:BI:BDI:BURUNDI:Makamba:Mabanda
+4:BI:BDI:BURUNDI:Makamba:Makamba
+5:BI:BDI:BURUNDI:Makamba:Nyanza Lac
+6:BI:BDI:BURUNDI:Makamba:Vugizo
+1:BI:BDI:BURUNDI:Ngozi:Busiga
+2:BI:BDI:BURUNDI:Ngozi:Gashikanwa
+3:BI:BDI:BURUNDI:Ngozi:Kiremba
+4:BI:BDI:BURUNDI:Ngozi:Marangara
+5:BI:BDI:BURUNDI:Ngozi:Mwumba
+6:BI:BDI:BURUNDI:Ngozi:Ngozi
+7:BI:BDI:BURUNDI:Ngozi:Nvamurenza
+8:BI:BDI:BURUNDI:Ngozi:Ruhororo
+9:BI:BDI:BURUNDI:Ngozi:Tangara
+1:BI:BDI:BURUNDI:Bururi:Burambi
+2:BI:BDI:BURUNDI:Bururi:Bururi
+3:BI:BDI:BURUNDI:Bururi:Buyengero
+4:BI:BDI:BURUNDI:Bururi:Matana
+5:BI:BDI:BURUNDI:Bururi:Mugamba
+6:BI:BDI:BURUNDI:Bururi:Rumonge
+7:BI:BDI:BURUNDI:Bururi:Rutovu
+8:BI:BDI:BURUNDI:Bururi:Songa
+9:BI:BDI:BURUNDI:Bururi:Vyanda
+1:BI:BDI:BURUNDI:Muyinga:Buhinvuza
+2:BI:BDI:BURUNDI:Muyinga:Butihinda
+3:BI:BDI:BURUNDI:Muyinga:Gashoho
+4:BI:BDI:BURUNDI:Muyinga:Gasorwe
+5:BI:BDI:BURUNDI:Muyinga:Giteranyi
+6:BI:BDI:BURUNDI:Muyinga:Muyinga
+7:BI:BDI:BURUNDI:Muyinga:Mwakiro
+1:BI:BDI:BURUNDI:Gitega:Bugendana
+2:BI:BDI:BURUNDI:Gitega:Bukirasazi
+3:BI:BDI:BURUNDI:Gitega:Buraza
+4:BI:BDI:BURUNDI:Gitega:Giheta
+5:BI:BDI:BURUNDI:Gitega:Gishubi
+6:BI:BDI:BURUNDI:Gitega:Gitega
+7:BI:BDI:BURUNDI:Gitega:Itaba
+8:BI:BDI:BURUNDI:Gitega:Makebuko
+9:BI:BDI:BURUNDI:Gitega:Mutaho
+10:BI:BDI:BURUNDI:Gitega:Ryansoro
+1:BI:BDI:BURUNDI:Bujumbura:Isale-Mugaruro
+2:BI:BDI:BURUNDI:Bujumbura:Kabezi
+3:BI:BDI:BURUNDI:Bujumbura:Kanyosha
+4:BI:BDI:BURUNDI:Bujumbura:Mubimbi
+5:BI:BDI:BURUNDI:Bujumbura:Mugongomanga
+6:BI:BDI:BURUNDI:Bujumbura:Muhuta
+7:BI:BDI:BURUNDI:Bujumbura:Mukike
+8:BI:BDI:BURUNDI:Bujumbura:Mutambu
+9:BI:BDI:BURUNDI:Bujumbura:Mutimbuzi
+10:BI:BDI:BURUNDI:Bujumbura:Nyabigina (Buj)
+1:BI:BDI:BURUNDI:Kirundo:Bugabira
+2:BI:BDI:BURUNDI:Kirundo:Busoni
+3:BI:BDI:BURUNDI:Kirundo:Bwambarangwe
+4:BI:BDI:BURUNDI:Kirundo:Gitobe
+5:BI:BDI:BURUNDI:Kirundo:Kirundo
+6:BI:BDI:BURUNDI:Kirundo:Ntega
+7:BI:BDI:BURUNDI:Kirundo:Vumbi-Bukuba
+1:BI:BDI:BURUNDI:Ruyigi:Butaganzwa2
+2:BI:BDI:BURUNDI:Ruyigi:Butezi
+3:BI:BDI:BURUNDI:Ruyigi:Bweru
+4:BI:BDI:BURUNDI:Ruyigi:Gisuru
+5:BI:BDI:BURUNDI:Ruyigi:Kinyinya
+6:BI:BDI:BURUNDI:Ruyigi:Nyabitsinda
+7:BI:BDI:BURUNDI:Ruyigi:Ruyigi
+1:BI:BDI:BURUNDI:Rutana:Bukemba
+2:BI:BDI:BURUNDI:Rutana:Giharo
+3:BI:BDI:BURUNDI:Rutana:Gitanga
+4:BI:BDI:BURUNDI:Rutana:Mpinga-Kayove
+5:BI:BDI:BURUNDI:Rutana:Musongati
+6:BI:BDI:BURUNDI:Rutana:Rutana
+1:BI:BDI:BURUNDI:Bubanza:Bubanza
+2:BI:BDI:BURUNDI:Bubanza:Gihanga
+3:BI:BDI:BURUNDI:Bubanza:Mpanda
+4:BI:BDI:BURUNDI:Bubanza:Musigati
+5:BI:BDI:BURUNDI:Bubanza:Rugazi
diff --git a/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f58680d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:BE-VAN:BE:ANTWERPEN
+2:BE-WBR:BE:BRABANT WALLON
+3:BE-BRX:BE:BRUXELLES BRUSSEL
+4:BE-WHT:BE:HAINAUT
+5:BE-WLG:BE:LIEGE
+6:BE-VLI:BE:LIMBURG
+7:BE-WLX:BE:LUXEMBOURG
+8:BE-WNA:BE:NAMUR
+9:BE-NVL:BE:NIVELLES
+10:BE-VOV:BE:OOST VLAANDEREN
+11:BE-VBR:BE:VLAAMS BRABANT
+12:BE-VWV:BE:WEST VLAANDEREN
diff --git a/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BEL/BEL_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d1e7188
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:BJ-AL:BJ:ALIBORI
+2:BJ-AK:BJ:ATAKORA
+3:BJ-AQ:BJ:ATLANTIQUE
+4:BJ-BO:BJ:BORGOU
+5:BJ-CO:BJ:COLLINES
+6:BJ-DO:BJ:DONGA
+7:BJ-KO:BJ:KOUFFO
+8:BJ-LI:BJ:LITTORAL
+9:BJ-MO:BJ:MONO
+10:BJ-OU:BJ:OUEME
+11:BJ-PL:BJ:PLATEAU
+12:BJ-ZO:BJ:ZOU
diff --git a/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..31320c2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BEN/BEN_ADMIN2_LEX.txt
@@ -0,0 +1,77 @@
+1:BJ:BEN:BENIN:Mono:Aplahoue
+2:BJ:BEN:BENIN:Mono:Athieme
+3:BJ:BEN:BENIN:Mono:Bopa
+4:BJ:BEN:BENIN:Mono:Come
+5:BJ:BEN:BENIN:Mono:Djakotome
+6:BJ:BEN:BENIN:Mono:Dogbo-Tota
+7:BJ:BEN:BENIN:Mono:Grand-Popo
+8:BJ:BEN:BENIN:Mono:Houeyogbe
+9:BJ:BEN:BENIN:Mono:Klouekanme
+10:BJ:BEN:BENIN:Mono:Lalo
+11:BJ:BEN:BENIN:Mono:Toviklin
+1:BJ:BEN:BENIN:Atlantique:Abomey-Calavi
+2:BJ:BEN:BENIN:Atlantique:Allada
+3:BJ:BEN:BENIN:Atlantique:Cotonou
+4:BJ:BEN:BENIN:Atlantique:Kpomasse
+5:BJ:BEN:BENIN:Atlantique:Ouidah
+6:BJ:BEN:BENIN:Atlantique:So-Ava
+7:BJ:BEN:BENIN:Atlantique:Toffo
+8:BJ:BEN:BENIN:Atlantique:Tori-Bossito
+9:BJ:BEN:BENIN:Atlantique:Ze
+1:BJ:BEN:BENIN:Oueme:Adjarra
+2:BJ:BEN:BENIN:Oueme:Adjohoun
+3:BJ:BEN:BENIN:Oueme:Aguegue
+4:BJ:BEN:BENIN:Oueme:Akpro-Misserete
+5:BJ:BEN:BENIN:Oueme:Avrankou
+6:BJ:BEN:BENIN:Oueme:Bonou
+7:BJ:BEN:BENIN:Oueme:Dangbo
+8:BJ:BEN:BENIN:Oueme:Ifangni
+9:BJ:BEN:BENIN:Oueme:Ikpinle (Adja-Ouere)
+10:BJ:BEN:BENIN:Oueme:Ketou
+11:BJ:BEN:BENIN:Oueme:Pobe
+12:BJ:BEN:BENIN:Oueme:Porto Novo
+13:BJ:BEN:BENIN:Oueme:Sakete
+14:BJ:BEN:BENIN:Oueme:Seme-Kpodji
+1:BJ:BEN:BENIN:Borgou:Banikoara
+2:BJ:BEN:BENIN:Borgou:Bembereke
+3:BJ:BEN:BENIN:Borgou:Gogounou
+4:BJ:BEN:BENIN:Borgou:Kalale
+5:BJ:BEN:BENIN:Borgou:Kandi
+6:BJ:BEN:BENIN:Borgou:Karimama
+7:BJ:BEN:BENIN:Borgou:Malanville
+8:BJ:BEN:BENIN:Borgou:Ndali
+9:BJ:BEN:BENIN:Borgou:Nikki
+10:BJ:BEN:BENIN:Borgou:Parakou
+11:BJ:BEN:BENIN:Borgou:Perere
+12:BJ:BEN:BENIN:Borgou:Segbana
+13:BJ:BEN:BENIN:Borgou:Sinende
+14:BJ:BEN:BENIN:Borgou:Tchaourou
+1:BJ:BEN:BENIN:Zou:Abomey
+2:BJ:BEN:BENIN:Zou:Agbangnizoun
+3:BJ:BEN:BENIN:Zou:Bante
+4:BJ:BEN:BENIN:Zou:Bohicon
+5:BJ:BEN:BENIN:Zou:Cove
+6:BJ:BEN:BENIN:Zou:Dassa
+7:BJ:BEN:BENIN:Zou:Djidja
+8:BJ:BEN:BENIN:Zou:Glazoue
+9:BJ:BEN:BENIN:Zou:Ouesse
+10:BJ:BEN:BENIN:Zou:Ouinhi
+11:BJ:BEN:BENIN:Zou:Savalou
+12:BJ:BEN:BENIN:Zou:Save
+13:BJ:BEN:BENIN:Zou:Za Kpota
+14:BJ:BEN:BENIN:Zou:Zangnanado
+15:BJ:BEN:BENIN:Zou:Zogbodome
+1:BJ:BEN:BENIN:Atakora:Bassila
+2:BJ:BEN:BENIN:Atakora:Boukoumbe
+3:BJ:BEN:BENIN:Atakora:Cobli
+4:BJ:BEN:BENIN:Atakora:Copargo
+5:BJ:BEN:BENIN:Atakora:Djougou Rural
+6:BJ:BEN:BENIN:Atakora:Djougou Urban
+7:BJ:BEN:BENIN:Atakora:Kerou
+8:BJ:BEN:BENIN:Atakora:Kouande
+9:BJ:BEN:BENIN:Atakora:Materi
+10:BJ:BEN:BENIN:Atakora:Natingou
+11:BJ:BEN:BENIN:Atakora:Ouake
+12:BJ:BEN:BENIN:Atakora:Pehonko
+13:BJ:BEN:BENIN:Atakora:Tanguieta
+14:BJ:BEN:BENIN:Atakora:Tchoukoutouna
diff --git a/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..64d0aa9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN1_LEX.txt
@@ -0,0 +1,45 @@
+1:BF-BAL:BF:BALE
+2:BF-BAM:BF:BAM
+3:BF-BAN:BF:BANWA
+4:BF-BAZ:BF:BAZEGA
+5:BF-BGR:BF:BOUGOURIBA
+6:BF-BLG:BF:BOULGOU
+7:BF-BLK:BF:BOULKIEMDE
+8:BF-COM:BF:COMOE
+9:BF-GAN:BF:GANZOURGOU
+10:BF-GNA:BF:GNAGNA
+11:BF-GOU:BF:GOURMA
+12:BF-HOU:BF:HOUET
+13:BF-IOB:BF:IOBA
+14:BF-KAD:BF:KADIOGO
+15:BF-KEN:BF:KENEDOUGOU
+16:BF-KMD:BF:KOMONDJARI
+17:BF-KMP:BF:KOMPIENGA
+18:BF-KOS:BF:KOSSI
+19:BF-KOP:BF:KOULPELOGO
+20:BF-KOT:BF:KOURITENGA
+21:BF-KOW:BF:KOURWEOGO
+22:BF-LER:BF:LERABA
+23:BF-LOR:BF:LOROUM
+24:BF-MOU:BF:MOUHOUN [MOU HOUN]
+25:BF-NAO:BF:NAHOURI
+26:BF-NAM:BF:NAMENTENGA
+27:BF-NAY:BF:NAYALA
+28:BF-NOU:BF:NOUMBIEL
+29:BF-OUB:BF:OUBRITENGA
+30:BF-OUD:BF:OUDALAN
+31:BF-PAS:BF:PASSORE
+32:BF-PON:BF:PONI
+33:BF-SNG:BF:SANGUIE
+34:BF-SMT:BF:SANMATENGA
+35:BF-SEN:BF:SENO
+36:BF-SIS:BF:SISSILI
+37:BF-SOM:BF:SOUM
+38:BF-SOR:BF:SOUROU
+39:BF-TAP:BF:TAPOA
+40:BF-TUI:BF:TUI
+41:BF-YAG:BF:YAGHA
+42:BF-YAT:BF:YATENGA
+43:BF-ZIR:BF:ZIRO
+44:BF-ZON:BF:ZONDOMA
+45:BF-ZOU:BF:ZOUNDWEOGO
diff --git a/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..d080375
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BFA/BFA_ADMIN2_LEX.txt
@@ -0,0 +1,301 @@
+1:BF:BFA:BURKINA:Mou Houn:Bagassi
+2:BF:BFA:BURKINA:Mou Houn:Bana
+3:BF:BFA:BURKINA:Mou Houn:Bondokui
+4:BF:BFA:BURKINA:Mou Houn:Boromo
+5:BF:BFA:BURKINA:Mou Houn:Dedougou
+6:BF:BFA:BURKINA:Mou Houn:Kona
+7:BF:BFA:BURKINA:Mou Houn:Ouarkoye
+8:BF:BFA:BURKINA:Mou Houn:Oury
+9:BF:BFA:BURKINA:Mou Houn:Pa
+10:BF:BFA:BURKINA:Mou Houn:Poura
+11:BF:BFA:BURKINA:Mou Houn:Safane
+12:BF:BFA:BURKINA:Mou Houn:Tcheriba
+13:BF:BFA:BURKINA:Mou Houn:Yaho
+1:BF:BFA:BURKINA:Oudalan:Deou
+2:BF:BFA:BURKINA:Oudalan:Gorom-Gorom
+3:BF:BFA:BURKINA:Oudalan:Markoye
+4:BF:BFA:BURKINA:Oudalan:Oursi
+5:BF:BFA:BURKINA:Oudalan:Tin-Akof
+1:BF:BFA:BURKINA:Kenedougou:Djigouera
+2:BF:BFA:BURKINA:Kenedougou:Koloko
+3:BF:BFA:BURKINA:Kenedougou:Kourouma
+4:BF:BFA:BURKINA:Kenedougou:Morolaba
+5:BF:BFA:BURKINA:Kenedougou:N'dorola
+6:BF:BFA:BURKINA:Kenedougou:Orodara
+7:BF:BFA:BURKINA:Kenedougou:Oueleni
+8:BF:BFA:BURKINA:Kenedougou:Samoghohiri
+9:BF:BFA:BURKINA:Kenedougou:Samorogouan
+10:BF:BFA:BURKINA:Kenedougou:Sindou
+1:BF:BFA:BURKINA:Sanguie:Dassa
+2:BF:BFA:BURKINA:Sanguie:Didyr
+3:BF:BFA:BURKINA:Sanguie:Godyr
+4:BF:BFA:BURKINA:Sanguie:Khyon
+5:BF:BFA:BURKINA:Sanguie:Kordie
+6:BF:BFA:BURKINA:Sanguie:Pouni
+7:BF:BFA:BURKINA:Sanguie:Reo
+8:BF:BFA:BURKINA:Sanguie:Tenado
+9:BF:BFA:BURKINA:Sanguie:Zawara
+1:BF:BFA:BURKINA:Tapoa:Botou
+2:BF:BFA:BURKINA:Tapoa:Diapaga
+3:BF:BFA:BURKINA:Tapoa:Kantchari
+4:BF:BFA:BURKINA:Tapoa:Logobou
+5:BF:BFA:BURKINA:Tapoa:Namounou
+6:BF:BFA:BURKINA:Tapoa:Partiaga
+7:BF:BFA:BURKINA:Tapoa:Tambaga
+8:BF:BFA:BURKINA:Tapoa:Tansarga
+1:BF:BFA:BURKINA:Houet:Badema
+2:BF:BFA:BURKINA:Houet:Bama
+3:BF:BFA:BURKINA:Houet:Bekuy
+4:BF:BFA:BURKINA:Houet:Bereba
+5:BF:BFA:BURKINA:Houet:Bobo-Dioulasso
+6:BF:BFA:BURKINA:Houet:Fo
+7:BF:BFA:BURKINA:Houet:Hounde
+8:BF:BFA:BURKINA:Houet:Karankasso-Vigue
+9:BF:BFA:BURKINA:Houet:Koumbia
+10:BF:BFA:BURKINA:Houet:Kourignon
+11:BF:BFA:BURKINA:Houet:Lena
+12:BF:BFA:BURKINA:Houet:Peni
+13:BF:BFA:BURKINA:Houet:Satiri
+14:BF:BFA:BURKINA:Houet:Toussiana
+1:BF:BFA:BURKINA:Gnagna:Bilanga
+2:BF:BFA:BURKINA:Gnagna:Bogande
+3:BF:BFA:BURKINA:Gnagna:Koalla
+4:BF:BFA:BURKINA:Gnagna:Liptougou
+5:BF:BFA:BURKINA:Gnagna:Manni
+6:BF:BFA:BURKINA:Gnagna:Piela
+7:BF:BFA:BURKINA:Gnagna:Thion
+1:BF:BFA:BURKINA:Bazega:Doulougou
+2:BF:BFA:BURKINA:Bazega:Ipelce
+3:BF:BFA:BURKINA:Bazega:Kayao
+4:BF:BFA:BURKINA:Bazega:Kombissiri
+5:BF:BFA:BURKINA:Bazega:Komsilga
+6:BF:BFA:BURKINA:Bazega:Konki-Ipala
+7:BF:BFA:BURKINA:Bazega:Koubri
+8:BF:BFA:BURKINA:Bazega:Sapone
+9:BF:BFA:BURKINA:Bazega:Tanghin-Dassouri
+10:BF:BFA:BURKINA:Bazega:Toece
+1:BF:BFA:BURKINA:Bam:Bourzanga
+2:BF:BFA:BURKINA:Bam:Guibare
+3:BF:BFA:BURKINA:Bam:Kongoussi
+4:BF:BFA:BURKINA:Bam:Rollo
+5:BF:BFA:BURKINA:Bam:Sabce
+6:BF:BFA:BURKINA:Bam:Tikare
+1:BF:BFA:BURKINA:Poni:Batie
+2:BF:BFA:BURKINA:Poni:Bouroum-Bouroum
+3:BF:BFA:BURKINA:Poni:Djigoue
+4:BF:BFA:BURKINA:Poni:Gaoua
+5:BF:BFA:BURKINA:Poni:Gbomblora
+6:BF:BFA:BURKINA:Poni:Kampti
+7:BF:BFA:BURKINA:Poni:Kpuere
+8:BF:BFA:BURKINA:Poni:Legmoin
+9:BF:BFA:BURKINA:Poni:Malba
+10:BF:BFA:BURKINA:Poni:Midebdo
+11:BF:BFA:BURKINA:Poni:Nako
+12:BF:BFA:BURKINA:Poni:Perigban
+1:BF:BFA:BURKINA:Seno:Bani
+2:BF:BFA:BURKINA:Seno:Dori
+3:BF:BFA:BURKINA:Seno:Falagountou
+4:BF:BFA:BURKINA:Seno:Gorgadji
+5:BF:BFA:BURKINA:Seno:Sampelga
+6:BF:BFA:BURKINA:Seno:Sebba
+7:BF:BFA:BURKINA:Seno:Seytenga
+1:BF:BFA:BURKINA:Comoe:Banfora
+2:BF:BFA:BURKINA:Comoe:Beregadougou
+3:BF:BFA:BURKINA:Comoe:Dakoro
+4:BF:BFA:BURKINA:Comoe:Douna
+5:BF:BFA:BURKINA:Comoe:Kankalaba
+6:BF:BFA:BURKINA:Comoe:Loropeni
+7:BF:BFA:BURKINA:Comoe:Loumana
+8:BF:BFA:BURKINA:Comoe:Mangodara
+9:BF:BFA:BURKINA:Comoe:Moussodougou
+10:BF:BFA:BURKINA:Comoe:Niangoloko
+11:BF:BFA:BURKINA:Comoe:Niankorodougou
+12:BF:BFA:BURKINA:Comoe:Ouo
+13:BF:BFA:BURKINA:Comoe:Sideradougou
+14:BF:BFA:BURKINA:Comoe:Sindou
+15:BF:BFA:BURKINA:Comoe:Soubakaniedougou
+16:BF:BFA:BURKINA:Comoe:Tiefora
+17:BF:BFA:BURKINA:Comoe:Wolonkoto
+1:BF:BFA:BURKINA:Yatenga:Banh
+2:BF:BFA:BURKINA:Yatenga:Bassi
+3:BF:BFA:BURKINA:Yatenga:Boussou
+4:BF:BFA:BURKINA:Yatenga:Gourcy
+5:BF:BFA:BURKINA:Yatenga:Kain
+6:BF:BFA:BURKINA:Yatenga:Kalsaka
+7:BF:BFA:BURKINA:Yatenga:Koumbri
+8:BF:BFA:BURKINA:Yatenga:Namissiguima
+9:BF:BFA:BURKINA:Yatenga:Ouahigouya
+10:BF:BFA:BURKINA:Yatenga:Ouindigui
+11:BF:BFA:BURKINA:Yatenga:Oula
+12:BF:BFA:BURKINA:Yatenga:Rambo
+13:BF:BFA:BURKINA:Yatenga:Seguenega
+14:BF:BFA:BURKINA:Yatenga:Solle
+15:BF:BFA:BURKINA:Yatenga:Tangaye
+16:BF:BFA:BURKINA:Yatenga:Thiou
+17:BF:BFA:BURKINA:Yatenga:Titao
+18:BF:BFA:BURKINA:Yatenga:Tougo
+19:BF:BFA:BURKINA:Yatenga:Zogore
+1:BF:BFA:BURKINA:Passore:Arbolle
+2:BF:BFA:BURKINA:Passore:Bagare
+3:BF:BFA:BURKINA:Passore:Bokin
+4:BF:BFA:BURKINA:Passore:Gomponsom
+5:BF:BFA:BURKINA:Passore:Kirsi
+6:BF:BFA:BURKINA:Passore:La-Todin
+7:BF:BFA:BURKINA:Passore:Pilimpikou
+8:BF:BFA:BURKINA:Passore:Samba
+9:BF:BFA:BURKINA:Passore:Yako
+1:BF:BFA:BURKINA:Kadiogo:Kadiogo
+1:BF:BFA:BURKINA:Boulkiemde:Bingo
+2:BF:BFA:BURKINA:Boulkiemde:Imasgho
+3:BF:BFA:BURKINA:Boulkiemde:Kindi
+4:BF:BFA:BURKINA:Boulkiemde:Kokologho
+5:BF:BFA:BURKINA:Boulkiemde:Koudougou
+6:BF:BFA:BURKINA:Boulkiemde:Nanoro
+7:BF:BFA:BURKINA:Boulkiemde:Pella
+8:BF:BFA:BURKINA:Boulkiemde:Poa
+9:BF:BFA:BURKINA:Boulkiemde:Ramongo
+10:BF:BFA:BURKINA:Boulkiemde:Sabou
+11:BF:BFA:BURKINA:Boulkiemde:Sigle
+12:BF:BFA:BURKINA:Boulkiemde:Sourgou
+13:BF:BFA:BURKINA:Boulkiemde:Thyou
+1:BF:BFA:BURKINA:Ganzourgou:Boudry
+2:BF:BFA:BURKINA:Ganzourgou:Kogho
+3:BF:BFA:BURKINA:Ganzourgou:Meguet
+4:BF:BFA:BURKINA:Ganzourgou:Mogtedo
+5:BF:BFA:BURKINA:Ganzourgou:Zam
+6:BF:BFA:BURKINA:Ganzourgou:Zorgho
+7:BF:BFA:BURKINA:Ganzourgou:Zoungou
+1:BF:BFA:BURKINA:Sissili:Bieha
+2:BF:BFA:BURKINA:Sissili:Bougnounou
+3:BF:BFA:BURKINA:Sissili:Boura
+4:BF:BFA:BURKINA:Sissili:Cassou
+5:BF:BFA:BURKINA:Sissili:Fara
+6:BF:BFA:BURKINA:Sissili:Leo
+7:BF:BFA:BURKINA:Sissili:Nebielianayou
+8:BF:BFA:BURKINA:Sissili:Niabouri
+9:BF:BFA:BURKINA:Sissili:Niego
+10:BF:BFA:BURKINA:Sissili:Ouessa
+11:BF:BFA:BURKINA:Sissili:Sapouy
+12:BF:BFA:BURKINA:Sissili:Silly
+13:BF:BFA:BURKINA:Sissili:To
+1:BF:BFA:BURKINA:Zoundweogo:Bere
+2:BF:BFA:BURKINA:Zoundweogo:Binde
+3:BF:BFA:BURKINA:Zoundweogo:Gogo
+4:BF:BFA:BURKINA:Zoundweogo:Gomboussougou
+5:BF:BFA:BURKINA:Zoundweogo:Guiba
+6:BF:BFA:BURKINA:Zoundweogo:Manga
+7:BF:BFA:BURKINA:Zoundweogo:Nobere
+1:BF:BFA:BURKINA:Bougouriba:Dano
+2:BF:BFA:BURKINA:Bougouriba:Diebougou
+3:BF:BFA:BURKINA:Bougouriba:Dissin
+4:BF:BFA:BURKINA:Bougouriba:Dolo
+5:BF:BFA:BURKINA:Bougouriba:Founzan
+6:BF:BFA:BURKINA:Bougouriba:Gueguere
+7:BF:BFA:BURKINA:Bougouriba:Koper
+8:BF:BFA:BURKINA:Bougouriba:Koti
+9:BF:BFA:BURKINA:Bougouriba:Oronkua
+10:BF:BFA:BURKINA:Bougouriba:Tiankoura
+11:BF:BFA:BURKINA:Bougouriba:Zambo
+1:BF:BFA:BURKINA:Kouritenga:Andemtenga
+2:BF:BFA:BURKINA:Kouritenga:Baskoure
+3:BF:BFA:BURKINA:Kouritenga:Dialgaye
+4:BF:BFA:BURKINA:Kouritenga:Gounghin
+5:BF:BFA:BURKINA:Kouritenga:Koupela
+6:BF:BFA:BURKINA:Kouritenga:Pouytenga
+7:BF:BFA:BURKINA:Kouritenga:Tensobtenga
+8:BF:BFA:BURKINA:Kouritenga:Yargo
+1:BF:BFA:BURKINA:Boulgou:Bane
+2:BF:BFA:BURKINA:Boulgou:Beguedo
+3:BF:BFA:BURKINA:Boulgou:Bittou
+4:BF:BFA:BURKINA:Boulgou:Dourtenga
+5:BF:BFA:BURKINA:Boulgou:Garango
+6:BF:BFA:BURKINA:Boulgou:Komtoega
+7:BF:BFA:BURKINA:Boulgou:Lalgaye
+8:BF:BFA:BURKINA:Boulgou:Niagho
+9:BF:BFA:BURKINA:Boulgou:Ouargaye
+10:BF:BFA:BURKINA:Boulgou:Sangha
+11:BF:BFA:BURKINA:Boulgou:Tenkodogo
+12:BF:BFA:BURKINA:Boulgou:Yargatenga
+13:BF:BFA:BURKINA:Boulgou:Zabre
+1:BF:BFA:BURKINA:Sourou:Di
+2:BF:BFA:BURKINA:Sourou:Gassan
+3:BF:BFA:BURKINA:Sourou:Gomboro
+4:BF:BFA:BURKINA:Sourou:Gossina
+5:BF:BFA:BURKINA:Sourou:Kassoum
+6:BF:BFA:BURKINA:Sourou:Kiembara
+7:BF:BFA:BURKINA:Sourou:Kougny
+8:BF:BFA:BURKINA:Sourou:Lanfiera
+9:BF:BFA:BURKINA:Sourou:Lankoue
+10:BF:BFA:BURKINA:Sourou:Toeni
+11:BF:BFA:BURKINA:Sourou:Toma
+12:BF:BFA:BURKINA:Sourou:Tougan
+13:BF:BFA:BURKINA:Sourou:Yaba
+14:BF:BFA:BURKINA:Sourou:Ye
+1:BF:BFA:BURKINA:Namentenga:Boulsa
+2:BF:BFA:BURKINA:Namentenga:Bouroum
+3:BF:BFA:BURKINA:Namentenga:Dargo
+4:BF:BFA:BURKINA:Namentenga:Kando
+5:BF:BFA:BURKINA:Namentenga:Tougouri
+6:BF:BFA:BURKINA:Namentenga:Yalgo
+7:BF:BFA:BURKINA:Namentenga:Zeguedeguin
+1:BF:BFA:BURKINA:Sanmatenga:Barsalogho
+2:BF:BFA:BURKINA:Sanmatenga:Boussouma
+3:BF:BFA:BURKINA:Sanmatenga:Dablo
+4:BF:BFA:BURKINA:Sanmatenga:Kaya
+5:BF:BFA:BURKINA:Sanmatenga:Korsimoro
+6:BF:BFA:BURKINA:Sanmatenga:Mane
+7:BF:BFA:BURKINA:Sanmatenga:Namissiguima
+8:BF:BFA:BURKINA:Sanmatenga:Pensa
+9:BF:BFA:BURKINA:Sanmatenga:Pibaore
+10:BF:BFA:BURKINA:Sanmatenga:Pissila
+11:BF:BFA:BURKINA:Sanmatenga:Ziga
+1:BF:BFA:BURKINA:Kossi:Balave
+2:BF:BFA:BURKINA:Kossi:Barani
+3:BF:BFA:BURKINA:Kossi:Bomborokui
+4:BF:BFA:BURKINA:Kossi:Djibasso
+5:BF:BFA:BURKINA:Kossi:Dokui
+6:BF:BFA:BURKINA:Kossi:Doumbala
+7:BF:BFA:BURKINA:Kossi:Kombori
+8:BF:BFA:BURKINA:Kossi:Kouka
+9:BF:BFA:BURKINA:Kossi:Madouba
+10:BF:BFA:BURKINA:Kossi:Nouna
+11:BF:BFA:BURKINA:Kossi:Sami
+12:BF:BFA:BURKINA:Kossi:Sanaba
+13:BF:BFA:BURKINA:Kossi:Solenzo
+14:BF:BFA:BURKINA:Kossi:Tansila
+1:BF:BFA:BURKINA:Oubritenga:Absouya
+2:BF:BFA:BURKINA:Oubritenga:Bousse
+3:BF:BFA:BURKINA:Oubritenga:Dapelgo
+4:BF:BFA:BURKINA:Oubritenga:Laye
+5:BF:BFA:BURKINA:Oubritenga:Loumbila
+6:BF:BFA:BURKINA:Oubritenga:Niou
+7:BF:BFA:BURKINA:Oubritenga:Pabre
+8:BF:BFA:BURKINA:Oubritenga:Saaba
+9:BF:BFA:BURKINA:Oubritenga:Sourgoubila
+10:BF:BFA:BURKINA:Oubritenga:Toeghin
+11:BF:BFA:BURKINA:Oubritenga:Ziniare
+12:BF:BFA:BURKINA:Oubritenga:Zitenga
+1:BF:BFA:BURKINA:Nahouri:Gniaro
+2:BF:BFA:BURKINA:Nahouri:Po
+3:BF:BFA:BURKINA:Nahouri:Tiebele
+4:BF:BFA:BURKINA:Nahouri:Zecco
+5:BF:BFA:BURKINA:Nahouri:Ziou
+1:BF:BFA:BURKINA:Soum:Aribinda
+2:BF:BFA:BURKINA:Soum:Baraboule
+3:BF:BFA:BURKINA:Soum:Diguel
+4:BF:BFA:BURKINA:Soum:Djibo
+5:BF:BFA:BURKINA:Soum:Koutougou
+6:BF:BFA:BURKINA:Soum:Nassamfou
+7:BF:BFA:BURKINA:Soum:Pobe-Mengao
+8:BF:BFA:BURKINA:Soum:Tongomayel
+1:BF:BFA:BURKINA:Gourma:Comin-Yanga
+2:BF:BFA:BURKINA:Gourma:Diabo
+3:BF:BFA:BURKINA:Gourma:Diapangou
+4:BF:BFA:BURKINA:Gourma:Fada N'gourma
+5:BF:BFA:BURKINA:Gourma:Gayeri
+6:BF:BFA:BURKINA:Gourma:Matiacoali
+7:BF:BFA:BURKINA:Gourma:Pama
+8:BF:BFA:BURKINA:Gourma:Soudougui
+9:BF:BFA:BURKINA:Gourma:Tibga
+10:BF:BFA:BURKINA:Gourma:Yamba
+11:BF:BFA:BURKINA:Gourma:Yonde
diff --git a/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8fd60df
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN1_LEX.txt
@@ -0,0 +1,58 @@
+1:BD-05:BD:BAGERHAT ZILA
+2:BD-02:BD:BARGUNA ZILA
+3:BD-06:BD:BARISAL DIV
+4:BD-07:BD:BHOLA ZILA
+5:BD-03:BD:BOGRA ZILA
+6:BD-04:BD:BRAHMANBARIA ZILA
+7:BD-09:BD:CHANDPUR ZILA
+8:BD-0:BD:CHITTAGONG DIV
+9:BD-2:BD:CHUADANGA ZILA
+10:BD-08:BD:COMILLA ZILA
+11:BD-10:BD:COXS BAZAR ZILA
+12:BD-3:BD:DHAKA DIV
+13:BD-4:BD:DINAJPUR ZILA
+14:BD-5:BD:FARIDPUR ZILA
+15:BD-6:BD:FENI ZILA
+16:BD-9:BD:GAIBANDHA ZILA
+17:BD-8:BD:GAZIPUR ZILA
+18:BD-7:BD:GOPALGANJ ZILA
+19:BD-20:BD:HABIGANJ ZILA
+20:BD-24:BD:JAIPURHAT ZILA
+21:BD-22:BD:JESSORE ZILA
+22:BD-25:BD:JHALAKATI ZILA
+23:BD-23:BD:JHENAIDAH ZILA
+24:BD-29:BD:KHAGRACHARI ZILA
+25:BD-27:BD:KHULNA DIV
+26:BD-26:BD:KISHOREGANJ ZILA
+27:BD-28:BD:KURIGRAM ZILA
+28:BD-30:BD:KUSHTIA ZILA
+29:BD-32:BD:LALMONIRHAT ZILA
+30:BD-36:BD:MADARIPUR ZILA
+31:BD-37:BD:MAGURA ZILA
+32:BD-33:BD:MANIKGANJ ZILA
+33:BD-39:BD:MEHERPUR ZILA
+34:BD-38:BD:MOULVIBAZAR ZILA
+35:BD-35:BD:MUNSHIGANJ ZILA
+36:BD-34:BD:MYMENSINGH ZILA
+37:BD-48:BD:NAOGAON ZILA
+38:BD-43:BD:NARAIL ZILA
+39:BD-40:BD:NARAYANGANJ ZILA
+40:BD-42:BD:NARSINGDI ZILA
+41:BD-44:BD:NATORE ZILA
+42:BD-45:BD:NAWABGANJ ZILA
+43:BD-46:BD:NILPHAMARI ZILA
+44:BD-47:BD:NOAKHALI ZILA
+45:BD-49:BD:PABNA ZILA
+46:BD-52:BD:PANCHAGARH ZILA
+47:BD-50:BD:PIROJPUR ZILA
+48:BD-53:BD:RAJBARI ZILA
+49:BD-54:BD:RAJSHAHI DIV
+50:BD-56:BD:RANGAMATI ZILA
+51:BD-55:BD:RANGPUR ZILA
+52:BD-58:BD:SATKHIRA ZILA
+53:BD-62:BD:SHARIATPUR ZILA
+54:BD-57:BD:SHERPUR ZILA
+55:BD-59:BD:SIRAJGANJ ZILA
+56:BD-60:BD:SYLHET ZILA
+57:BD-63:BD:TANGAIL ZILA
+58:BD-64:BD:THAKURGAON ZILA
diff --git a/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN2_LEX.txt
new file mode 100644
index 0000000..57f4228
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BGD/BGD_ADMIN2_LEX.txt
@@ -0,0 +1,64 @@
+1:BD:BGD:BANGLADESH:Dhaka Div:Dhaka Zila
+2:BD:BGD:BANGLADESH:Dhaka Div:Faridpur Zl
+3:BD:BGD:BANGLADESH:Dhaka Div:Gazipur Zl
+4:BD:BGD:BANGLADESH:Dhaka Div:Gopalganj Zl
+5:BD:BGD:BANGLADESH:Dhaka Div:Jamalpur Zl
+6:BD:BGD:BANGLADESH:Dhaka Div:Kishoreganj Zl
+7:BD:BGD:BANGLADESH:Dhaka Div:Madaripur Zl
+8:BD:BGD:BANGLADESH:Dhaka Div:Manikganj Zl
+9:BD:BGD:BANGLADESH:Dhaka Div:Munshiganj Zl
+10:BD:BGD:BANGLADESH:Dhaka Div:Mymensingh Zl
+11:BD:BGD:BANGLADESH:Dhaka Div:Narayanganj Zl
+12:BD:BGD:BANGLADESH:Dhaka Div:Narsingdi Zl
+13:BD:BGD:BANGLADESH:Dhaka Div:Netrokona Zl
+14:BD:BGD:BANGLADESH:Dhaka Div:Rajbari Zl
+15:BD:BGD:BANGLADESH:Dhaka Div:Shariatpur Zl
+16:BD:BGD:BANGLADESH:Dhaka Div:Sherpur Zl
+17:BD:BGD:BANGLADESH:Dhaka Div:Tangail Zl
+1:BD:BGD:BANGLADESH:Chittagong Div:Bandarban Zl
+2:BD:BGD:BANGLADESH:Chittagong Div:Brahmanbaria Zl
+3:BD:BGD:BANGLADESH:Chittagong Div:Chandpur Zl
+4:BD:BGD:BANGLADESH:Chittagong Div:Chittagong Zl
+5:BD:BGD:BANGLADESH:Chittagong Div:Comilla Zl
+6:BD:BGD:BANGLADESH:Chittagong Div:Cox Bazar Zl
+7:BD:BGD:BANGLADESH:Chittagong Div:Feni Zl
+8:BD:BGD:BANGLADESH:Chittagong Div:Habiganj Zl
+9:BD:BGD:BANGLADESH:Chittagong Div:Khagrachhari Zl
+10:BD:BGD:BANGLADESH:Chittagong Div:Lakshmipur Zl
+11:BD:BGD:BANGLADESH:Chittagong Div:Maulvibazar Zl
+12:BD:BGD:BANGLADESH:Chittagong Div:Noakhali Zl
+13:BD:BGD:BANGLADESH:Chittagong Div:Rangamati Zl
+14:BD:BGD:BANGLADESH:Chittagong Div:Sunamganj Zl
+15:BD:BGD:BANGLADESH:Chittagong Div:Sylhet Zl
+1:BD:BGD:BANGLADESH:Rajshahi Div:Bogra Zl
+2:BD:BGD:BANGLADESH:Rajshahi Div:Dinajpur Zl
+3:BD:BGD:BANGLADESH:Rajshahi Div:Gaibandha Zl
+4:BD:BGD:BANGLADESH:Rajshahi Div:Joypurhat Zl
+5:BD:BGD:BANGLADESH:Rajshahi Div:Kurigram Zl
+6:BD:BGD:BANGLADESH:Rajshahi Div:Lalmonirhat Zl
+7:BD:BGD:BANGLADESH:Rajshahi Div:Naogaon Zl
+8:BD:BGD:BANGLADESH:Rajshahi Div:Natore Zl
+9:BD:BGD:BANGLADESH:Rajshahi Div:Nawabganj Zl
+10:BD:BGD:BANGLADESH:Rajshahi Div:Nilphamari Zl
+11:BD:BGD:BANGLADESH:Rajshahi Div:Pabna Zl
+12:BD:BGD:BANGLADESH:Rajshahi Div:Panchagarh Zl
+13:BD:BGD:BANGLADESH:Rajshahi Div:Rajshahi Zl
+14:BD:BGD:BANGLADESH:Rajshahi Div:Rangpur Zl
+15:BD:BGD:BANGLADESH:Rajshahi Div:Sirajganj Zl
+16:BD:BGD:BANGLADESH:Rajshahi Div:Thakurgaon Zl
+1:BD:BGD:BANGLADESH:Barisal Div:Barguna Zl
+2:BD:BGD:BANGLADESH:Barisal Div:Barisal Zl
+3:BD:BGD:BANGLADESH:Barisal Div:Bhola Zl
+4:BD:BGD:BANGLADESH:Barisal Div:Jhalakati Zl
+5:BD:BGD:BANGLADESH:Barisal Div:Patuakhali Zl
+6:BD:BGD:BANGLADESH:Barisal Div:Pirojpur Zl
+1:BD:BGD:BANGLADESH:Khulna Div:Bagerhat Zl
+2:BD:BGD:BANGLADESH:Khulna Div:Chuadanga Zl
+3:BD:BGD:BANGLADESH:Khulna Div:Jessore Zl
+4:BD:BGD:BANGLADESH:Khulna Div:Jhenaidaha Zl
+5:BD:BGD:BANGLADESH:Khulna Div:Khulna Zl
+6:BD:BGD:BANGLADESH:Khulna Div:Kushtia Zl
+7:BD:BGD:BANGLADESH:Khulna Div:Magura Zl
+8:BD:BGD:BANGLADESH:Khulna Div:Meherpur Zl
+9:BD:BGD:BANGLADESH:Khulna Div:Narail Zl
+10:BD:BGD:BANGLADESH:Khulna Div:Satkhira Zl
diff --git a/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e3b20c9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN1_LEX.txt
@@ -0,0 +1,28 @@
+1:BG-0:BG:BLAGOEVGRAD
+2:BG-02:BG:BURGAS
+3:BG-08:BG:DOBRIE
+4:BG-07:BG:GABROVO
+5:BG-22:BG:GRAD SOFIJA (MUN.)
+6:BG-26:BG:HASKOVO
+7:BG-28:BG:JAMBOL
+8:BG-09:BG:KRDALI
+9:BG-29:BG:LOVEC
+10:BG-:BG:LOVEE
+11:BG-21:BG:MIHAJLOVGRAD
+12:BG-2:BG:MONTANA
+13:BG-3:BG:PAZARDIK
+14:BG-4:BG:PERNIK
+15:BG-5:BG:PLEVEN
+16:BG-6:BG:PLOVDIV
+17:BG-7:BG:RAZGRAD
+18:BG-8:BG:RUSE
+19:BG-9:BG:SILISTRA
+20:BG-20:BG:SLIVEN
+21:BG-23:BG:SOFIJA   CITY
+22:BG-24:BG:STARA ZAGORA
+23:BG-25:BG:TRGOVITE
+24:BG-27:BG:UMEN
+25:BG-03:BG:VARNA
+26:BG-04:BG:VELIKO TRNOVO
+27:BG-05:BG:VIDIN
+28:BG-06:BG:VRACA
diff --git a/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BGR/BGR_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..1491b14
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:BH-0:BH:AL ADD
+2:BH-03:BH:AL MANMAH
+3:BH-07:BH:AL MINAQAH AL WUS
+4:BH-05:BH:AL MINAQAH ASH SHAMLYAH
+5:BH-02:BH:AL MUARRAQ
+6:BH-09:BH:AR RIF
+7:BH-B:BH:BAHRAIN
+8:BH-04:BH:JIDD AF
+9:BH-2:BH:MADNAT AMAD
+10:BH-08:BH:MADNAT S
+11:BH-10:BH:MINAQAT JUZUR AWR
+12:BH-06:BH:SITRAH
diff --git a/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..d5818d7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BHR/BHR_ADMIN2_LEX.txt
@@ -0,0 +1,5 @@
+1:BH:BHR:BAHRAIN:Bahrain:BHR.L2.1
+2:BH:BHR:BAHRAIN:Bahrain:BHR.L2.2
+3:BH:BHR:BAHRAIN:Bahrain:BHR.L2.3
+4:BH:BHR:BAHRAIN:Bahrain:BHR.L2.4
+5:BH:BHR:BAHRAIN:Bahrain:BHR.L2.5
diff --git a/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2f0a1e7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN1_LEX.txt
@@ -0,0 +1,2 @@
+1:BA-BIH:BA:BOSNA I HERCEGOVINA
+2:BA-SRP:BA:REPUBLIKA SRPSKA
diff --git a/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BIH/BIH_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..fbb3c2c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:BO-B:BO:BENI
+2:BO-H:BO:CHUQUISACA
+3:BO-C:BO:COCHABAMBA
+4:BO-L:BO:LA PAZ
+5:BO-O:BO:ORURO
+6:BO-N:BO:PANDO
+7:BO-P:BO:POTOSI
+8:BO-S:BO:SANTA CRUZ
+9:BO-T:BO:TARIJA
diff --git a/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..6b21b54
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BOL/BOL_ADMIN2_LEX.txt
@@ -0,0 +1,100 @@
+1:BO:BOL:BOLIVIA:POTOSI:BILBAO
+2:BO:BOL:BOLIVIA:POTOSI:BUSTILLOS
+3:BO:BOL:BOLIVIA:POTOSI:CHARCAS
+4:BO:BOL:BOLIVIA:POTOSI:CHAYANTA
+5:BO:BOL:BOLIVIA:POTOSI:DANIEL CAMPOS
+6:BO:BOL:BOLIVIA:POTOSI:IBANEZ
+7:BO:BOL:BOLIVIA:POTOSI:LINARES
+8:BO:BOL:BOLIVIA:POTOSI:MODESTO OMISTE
+9:BO:BOL:BOLIVIA:POTOSI:NOR CHICHAS
+10:BO:BOL:BOLIVIA:POTOSI:NOR LIPEZ
+11:BO:BOL:BOLIVIA:POTOSI:QUIJARRO
+12:BO:BOL:BOLIVIA:POTOSI:SAAVEDRA
+13:BO:BOL:BOLIVIA:POTOSI:SUD CHICHAS
+14:BO:BOL:BOLIVIA:POTOSI:SUD LIPEZ
+15:BO:BOL:BOLIVIA:POTOSI:TOMAS FRIAS
+1:BO:BOL:BOLIVIA:COCHABAMBA:ARANI
+2:BO:BOL:BOLIVIA:COCHABAMBA:ARCE
+3:BO:BOL:BOLIVIA:COCHABAMBA:ARQUE
+4:BO:BOL:BOLIVIA:COCHABAMBA:AYOPAYA
+5:BO:BOL:BOLIVIA:COCHABAMBA:CAMPERO
+6:BO:BOL:BOLIVIA:COCHABAMBA:CAPINOTA
+7:BO:BOL:BOLIVIA:COCHABAMBA:CARRASCO
+8:BO:BOL:BOLIVIA:COCHABAMBA:CERCADO
+9:BO:BOL:BOLIVIA:COCHABAMBA:CHAPARE
+10:BO:BOL:BOLIVIA:COCHABAMBA:JORDAN
+11:BO:BOL:BOLIVIA:COCHABAMBA:MIZOQUE
+12:BO:BOL:BOLIVIA:COCHABAMBA:PUNATA
+13:BO:BOL:BOLIVIA:COCHABAMBA:QUILLACOLLO
+14:BO:BOL:BOLIVIA:COCHABAMBA:TAPACARI
+1:BO:BOL:BOLIVIA:SANTA CRUZ:A.SANDOVAL
+2:BO:BOL:BOLIVIA:SANTA CRUZ:ANDRES IBANEZ
+3:BO:BOL:BOLIVIA:SANTA CRUZ:CABALLERO
+4:BO:BOL:BOLIVIA:SANTA CRUZ:CHIQUITOS
+5:BO:BOL:BOLIVIA:SANTA CRUZ:CORDILLERA
+6:BO:BOL:BOLIVIA:SANTA CRUZ:FLORIDA
+7:BO:BOL:BOLIVIA:SANTA CRUZ:GUTIERREZ
+8:BO:BOL:BOLIVIA:SANTA CRUZ:ICHILO
+9:BO:BOL:BOLIVIA:SANTA CRUZ:NUFLO DE CHAVEZ
+10:BO:BOL:BOLIVIA:SANTA CRUZ:SANTIESTEBAN
+11:BO:BOL:BOLIVIA:SANTA CRUZ:VALLE GRANDE
+12:BO:BOL:BOLIVIA:SANTA CRUZ:VELASCO
+13:BO:BOL:BOLIVIA:SANTA CRUZ:WARNES
+1:BO:BOL:BOLIVIA:BENI:CERCADO
+2:BO:BOL:BOLIVIA:BENI:GRAL.J.BALLIVIA
+3:BO:BOL:BOLIVIA:BENI:ITENEZ
+4:BO:BOL:BOLIVIA:BENI:MAMORE
+5:BO:BOL:BOLIVIA:BENI:MARBAN
+6:BO:BOL:BOLIVIA:BENI:MOXOS
+7:BO:BOL:BOLIVIA:BENI:VACA DIEZ
+8:BO:BOL:BOLIVIA:BENI:YACUMA
+1:BO:BOL:BOLIVIA:PANDO:ABUNA
+2:BO:BOL:BOLIVIA:PANDO:GRAL.FDCO POMA
+3:BO:BOL:BOLIVIA:PANDO:MADRE DE DIOS
+4:BO:BOL:BOLIVIA:PANDO:MANURIPI
+5:BO:BOL:BOLIVIA:PANDO:NICOLAS SUAREZ
+1:BO:BOL:BOLIVIA:LA PAZ:AROMA
+2:BO:BOL:BOLIVIA:LA PAZ:CAMACHO
+3:BO:BOL:BOLIVIA:LA PAZ:FRANZ TAMAYO
+4:BO:BOL:BOLIVIA:LA PAZ:G.VILLARROEL
+5:BO:BOL:BOLIVIA:LA PAZ:INGAVI
+6:BO:BOL:BOLIVIA:LA PAZ:INQUISIVI
+7:BO:BOL:BOLIVIA:LA PAZ:IOAYZA
+8:BO:BOL:BOLIVIA:LA PAZ:ITURRALDE
+9:BO:BOL:BOLIVIA:LA PAZ:LARECAJA
+10:BO:BOL:BOLIVIA:LA PAZ:LOS ANDES
+11:BO:BOL:BOLIVIA:LA PAZ:MANCO KAPAC
+12:BO:BOL:BOLIVIA:LA PAZ:MUNECAS
+13:BO:BOL:BOLIVIA:LA PAZ:MURILLO
+14:BO:BOL:BOLIVIA:LA PAZ:NOR YUNGAS
+15:BO:BOL:BOLIVIA:LA PAZ:OMASUYOS
+16:BO:BOL:BOLIVIA:LA PAZ:PACAJES
+17:BO:BOL:BOLIVIA:LA PAZ:SAAVEDRA
+18:BO:BOL:BOLIVIA:LA PAZ:SUD YUNGAS
+1:BO:BOL:BOLIVIA:TARIJA:ARCE
+2:BO:BOL:BOLIVIA:TARIJA:CERCADO
+3:BO:BOL:BOLIVIA:TARIJA:GRAN CHACO
+4:BO:BOL:BOLIVIA:TARIJA:MENDEZ
+5:BO:BOL:BOLIVIA:TARIJA:OCONNOR
+6:BO:BOL:BOLIVIA:TARIJA:VILES
+1:BO:BOL:BOLIVIA:CHUQUISACA:AZURDUY
+2:BO:BOL:BOLIVIA:CHUQUISACA:B.BOETO
+3:BO:BOL:BOLIVIA:CHUQUISACA:HDO. SILES
+4:BO:BOL:BOLIVIA:CHUQUISACA:LUIS CALVO
+5:BO:BOL:BOLIVIA:CHUQUISACA:NOR CINTI
+6:BO:BOL:BOLIVIA:CHUQUISACA:OROPEZA
+7:BO:BOL:BOLIVIA:CHUQUISACA:SUD CINTI
+8:BO:BOL:BOLIVIA:CHUQUISACA:TOMINA
+9:BO:BOL:BOLIVIA:CHUQUISACA:YAMPARAEZ
+10:BO:BOL:BOLIVIA:CHUQUISACA:ZUDANEZ
+1:BO:BOL:BOLIVIA:ORURO:ATAHUALLPA
+2:BO:BOL:BOLIVIA:ORURO:AVAROA
+3:BO:BOL:BOLIVIA:ORURO:CARANGAS
+4:BO:BOL:BOLIVIA:ORURO:CERCADO
+5:BO:BOL:BOLIVIA:ORURO:DALENCE
+6:BO:BOL:BOLIVIA:ORURO:L.CABRERA
+7:BO:BOL:BOLIVIA:ORURO:LAGO POOPO
+8:BO:BOL:BOLIVIA:ORURO:LITORAL
+9:BO:BOL:BOLIVIA:ORURO:POOPO
+10:BO:BOL:BOLIVIA:ORURO:SAJAMA
+11:BO:BOL:BOLIVIA:ORURO:SAUCARI
diff --git a/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..9057bd1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN1_LEX.txt
@@ -0,0 +1,30 @@
+1:BR-AC:BR:ACRE
+2:BR-AL:BR:ALAGOAS
+3:BR-AP:BR:AMAPA
+4:BR-AM:BR:AMAZONAS
+5:BR-BA:BR:BAHIA
+6:BR-CAP:BR:CAPANEMA
+7:BR-CE:BR:CEARA
+8:BR-DF:BR:DISTRITO FEDERAL
+9:BR-ES:BR:ESPIRITU SANTO
+10:BR-GO:BR:GOIAS
+11:BR-MA:BR:MARANHAO
+12:BR-MP:BR:MARANHAO/PIAUI
+13:BR-MT:BR:MATO GROSSO
+14:BR-MS:BR:MATO GROSSO DO SUL
+15:BR-MG:BR:MINAS GERAIS
+16:BR-PA:BR:PARA
+17:BR-PB:BR:PARAIBA
+18:BR-PR:BR:PARANA
+19:BR-PE:BR:PERNAMBUCO
+20:BR-PI:BR:PIAUI
+21:BR-PRX:BR:PORTO XAVIER
+22:BR-RJ:BR:RIO DE JANEIRO
+23:BR-RN:BR:RIO GRANDE DO NORTE
+24:BR-RS:BR:RIO GRANDE DO SUL [RIO GRAANDE DO SUL] [RIO GRNDE DO SUL]
+25:BR-RO:BR:RONDONIA
+26:BR-RR:BR:RORAIMA
+27:BR-SC:BR:SANTA CATARINA
+28:BR-SP:BR:SAO PAULO
+29:BR-SE:BR:SERGIPE
+30:BR-TO:BR:TOCANTINS
diff --git a/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..9159e01
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BRA/BRA_ADMIN2_LEX.txt
@@ -0,0 +1,3955 @@
+1:BR:BRA:BRASIL:RONDONIA:Alta Floresta
+2:BR:BRA:BRASIL:RONDONIA:Alvorada  do O.
+3:BR:BRA:BRASIL:RONDONIA:Ariquemes
+4:BR:BRA:BRASIL:RONDONIA:Bom Principio
+5:BR:BRA:BRASIL:RONDONIA:Cacoal
+6:BR:BRA:BRASIL:RONDONIA:Cerejeiras
+7:BR:BRA:BRASIL:RONDONIA:Colorado do O.
+8:BR:BRA:BRASIL:RONDONIA:Costa Marques
+9:BR:BRA:BRASIL:RONDONIA:Guajara-Mirim
+10:BR:BRA:BRASIL:RONDONIA:Jaru
+11:BR:BRA:BRASIL:RONDONIA:Machadinho
+12:BR:BRA:BRASIL:RONDONIA:Nova B. Do Oeste
+13:BR:BRA:BRASIL:RONDONIA:Ouro Preto do
+14:BR:BRA:BRASIL:RONDONIA:Pimenta Bueno
+15:BR:BRA:BRASIL:RONDONIA:Porto Velho
+16:BR:BRA:BRASIL:RONDONIA:Pres. Medici
+17:BR:BRA:BRASIL:RONDONIA:Rolim de Moura
+18:BR:BRA:BRASIL:RONDONIA:Santa Luzia
+19:BR:BRA:BRASIL:RONDONIA:Vila Nova
+1:BR:BRA:BRASIL:AMAZONAS:Airao
+2:BR:BRA:BRASIL:AMAZONAS:Anori
+3:BR:BRA:BRASIL:AMAZONAS:Atalaia D'Norte
+4:BR:BRA:BRASIL:AMAZONAS:Autazes
+5:BR:BRA:BRASIL:AMAZONAS:BRA.L2.2
+6:BR:BRA:BRASIL:AMAZONAS:Barcelos
+7:BR:BRA:BRASIL:AMAZONAS:Barreirinha
+8:BR:BRA:BRASIL:AMAZONAS:Benjamin Constan
+9:BR:BRA:BRASIL:AMAZONAS:Boca Do Acre
+10:BR:BRA:BRASIL:AMAZONAS:Borba
+11:BR:BRA:BRASIL:AMAZONAS:Canutama
+12:BR:BRA:BRASIL:AMAZONAS:Carauari
+13:BR:BRA:BRASIL:AMAZONAS:Careiro
+14:BR:BRA:BRASIL:AMAZONAS:Coari
+15:BR:BRA:BRASIL:AMAZONAS:Codajas
+16:BR:BRA:BRASIL:AMAZONAS:Eirunepe
+17:BR:BRA:BRASIL:AMAZONAS:Envira
+18:BR:BRA:BRASIL:AMAZONAS:Fonte Boa
+19:BR:BRA:BRASIL:AMAZONAS:Humaita
+20:BR:BRA:BRASIL:AMAZONAS:Ilha Grande
+21:BR:BRA:BRASIL:AMAZONAS:Ipixuna
+22:BR:BRA:BRASIL:AMAZONAS:Itacoatiara
+23:BR:BRA:BRASIL:AMAZONAS:Itapiranga
+24:BR:BRA:BRASIL:AMAZONAS:JURUA
+25:BR:BRA:BRASIL:AMAZONAS:Japura
+26:BR:BRA:BRASIL:AMAZONAS:Jutai
+27:BR:BRA:BRASIL:AMAZONAS:Labrea
+28:BR:BRA:BRASIL:AMAZONAS:Manacapuru
+29:BR:BRA:BRASIL:AMAZONAS:Manaus
+30:BR:BRA:BRASIL:AMAZONAS:Manicore
+31:BR:BRA:BRASIL:AMAZONAS:Maraa
+32:BR:BRA:BRASIL:AMAZONAS:Maues
+33:BR:BRA:BRASIL:AMAZONAS:Nhamunda
+34:BR:BRA:BRASIL:AMAZONAS:Nova Olinda D'N.
+35:BR:BRA:BRASIL:AMAZONAS:Novo Aripuana
+36:BR:BRA:BRASIL:AMAZONAS:Parintins
+37:BR:BRA:BRASIL:AMAZONAS:Pauini
+38:BR:BRA:BRASIL:AMAZONAS:S.Antonio do Ica
+39:BR:BRA:BRASIL:AMAZONAS:S.Gabriel D'Cac.
+40:BR:BRA:BRASIL:AMAZONAS:S.Paulo d'Oliven
+41:BR:BRA:BRASIL:AMAZONAS:Silves
+42:BR:BRA:BRASIL:AMAZONAS:Tapaua
+43:BR:BRA:BRASIL:AMAZONAS:Tefe
+44:BR:BRA:BRASIL:AMAZONAS:Urucara
+45:BR:BRA:BRASIL:AMAZONAS:Urucurituba
+46:BR:BRA:BRASIL:AMAZONAS:Zona en Litigio
+1:BR:BRA:BRASIL:Porto Xavier:Porto Lucena
+1:BR:BRA:BRASIL:PARA:Abaetetuba
+2:BR:BRA:BRASIL:PARA:Acara
+3:BR:BRA:BRASIL:PARA:Afua
+4:BR:BRA:BRASIL:PARA:Alenquer
+5:BR:BRA:BRASIL:PARA:Almerim
+6:BR:BRA:BRASIL:PARA:Altamira
+7:BR:BRA:BRASIL:PARA:Anajas
+8:BR:BRA:BRASIL:PARA:Ananindeua
+9:BR:BRA:BRASIL:PARA:Augusto Correa
+10:BR:BRA:BRASIL:PARA:Aveiro
+11:BR:BRA:BRASIL:PARA:Bagre
+12:BR:BRA:BRASIL:PARA:Baiao
+13:BR:BRA:BRASIL:PARA:Barcarena
+14:BR:BRA:BRASIL:PARA:Belem
+15:BR:BRA:BRASIL:PARA:Benevides
+16:BR:BRA:BRASIL:PARA:Bonito
+17:BR:BRA:BRASIL:PARA:Braganga
+18:BR:BRA:BRASIL:PARA:Breves
+19:BR:BRA:BRASIL:PARA:Bujaru
+20:BR:BRA:BRASIL:PARA:Cachoei.D'Arari
+21:BR:BRA:BRASIL:PARA:Cameta
+22:BR:BRA:BRASIL:PARA:Capanema
+23:BR:BRA:BRASIL:PARA:Capitao Poco
+24:BR:BRA:BRASIL:PARA:Castanhal
+25:BR:BRA:BRASIL:PARA:Chaves
+26:BR:BRA:BRASIL:PARA:Colares
+27:BR:BRA:BRASIL:PARA:Conceicao Aragu
+28:BR:BRA:BRASIL:PARA:Curuca
+29:BR:BRA:BRASIL:PARA:Curvalinho
+30:BR:BRA:BRASIL:PARA:Faro
+31:BR:BRA:BRASIL:PARA:Gurupa
+32:BR:BRA:BRASIL:PARA:Igarape-Acu
+33:BR:BRA:BRASIL:PARA:Igarape-Miri
+34:BR:BRA:BRASIL:PARA:Inhangapi
+35:BR:BRA:BRASIL:PARA:Irituia
+36:BR:BRA:BRASIL:PARA:Itaituba
+37:BR:BRA:BRASIL:PARA:Itupiranga
+38:BR:BRA:BRASIL:PARA:Jacunda
+39:BR:BRA:BRASIL:PARA:Juruti
+40:BR:BRA:BRASIL:PARA:Limoeiro d'Ajuru
+41:BR:BRA:BRASIL:PARA:Magalahes Barata
+42:BR:BRA:BRASIL:PARA:Maraba
+43:BR:BRA:BRASIL:PARA:Maracana
+44:BR:BRA:BRASIL:PARA:Marapanim
+45:BR:BRA:BRASIL:PARA:Melgaco
+46:BR:BRA:BRASIL:PARA:Mocajuba
+47:BR:BRA:BRASIL:PARA:Moju
+48:BR:BRA:BRASIL:PARA:Monte Alegre
+49:BR:BRA:BRASIL:PARA:Muana
+50:BR:BRA:BRASIL:PARA:Nova Timboteua
+51:BR:BRA:BRASIL:PARA:Obidos
+52:BR:BRA:BRASIL:PARA:Oeiras d'Para
+53:BR:BRA:BRASIL:PARA:Oriximina
+54:BR:BRA:BRASIL:PARA:Ourem
+55:BR:BRA:BRASIL:PARA:Paragominas
+56:BR:BRA:BRASIL:PARA:Peixe Boi
+57:BR:BRA:BRASIL:PARA:Ponta de Pedras
+58:BR:BRA:BRASIL:PARA:Portel
+59:BR:BRA:BRASIL:PARA:Porto de Moz
+60:BR:BRA:BRASIL:PARA:Prainha
+61:BR:BRA:BRASIL:PARA:Primavera
+62:BR:BRA:BRASIL:PARA:S.Antonio d'Taua
+63:BR:BRA:BRASIL:PARA:S.Miguel D'Guama
+64:BR:BRA:BRASIL:PARA:Salinopolis
+65:BR:BRA:BRASIL:PARA:Salvaterra
+66:BR:BRA:BRASIL:PARA:Santana Araguaia
+67:BR:BRA:BRASIL:PARA:Santarem
+68:BR:BRA:BRASIL:PARA:Santarem Novo
+69:BR:BRA:BRASIL:PARA:Sao Caetano Odiv
+70:BR:BRA:BRASIL:PARA:Sao Domingos Cap
+71:BR:BRA:BRASIL:PARA:Sao Fco. do Para
+72:BR:BRA:BRASIL:PARA:Sao Felix D'Xin.
+73:BR:BRA:BRASIL:PARA:Sao Joao d'Arag
+74:BR:BRA:BRASIL:PARA:Sao Sebastiao da
+75:BR:BRA:BRASIL:PARA:Sen.Jose Porfiri
+76:BR:BRA:BRASIL:PARA:Soure
+77:BR:BRA:BRASIL:PARA:Sta.Cruz D'Arari
+78:BR:BRA:BRASIL:PARA:Sta.Isabel Para
+79:BR:BRA:BRASIL:PARA:Sta.Maria d'Para
+80:BR:BRA:BRASIL:PARA:Tome-Acu
+81:BR:BRA:BRASIL:PARA:Tucurui
+82:BR:BRA:BRASIL:PARA:Vigia
+83:BR:BRA:BRASIL:PARA:Viseu
+1:BR:BRA:BRASIL:PIAUI:Agricolandia
+2:BR:BRA:BRASIL:PIAUI:Agua Branca
+3:BR:BRA:BRASIL:PIAUI:Alto Longa
+4:BR:BRA:BRASIL:PIAUI:Altos
+5:BR:BRA:BRASIL:PIAUI:Amarante
+6:BR:BRA:BRASIL:PIAUI:Angical do Piaui
+7:BR:BRA:BRASIL:PIAUI:Anisio Abreu
+8:BR:BRA:BRASIL:PIAUI:Antonio Almeida
+9:BR:BRA:BRASIL:PIAUI:Aroazes
+10:BR:BRA:BRASIL:PIAUI:Arraial
+11:BR:BRA:BRASIL:PIAUI:Avelino Lopes
+12:BR:BRA:BRASIL:PIAUI:Barras
+13:BR:BRA:BRASIL:PIAUI:Barreiras Piaui
+14:BR:BRA:BRASIL:PIAUI:Barro Duro
+15:BR:BRA:BRASIL:PIAUI:Batalha
+16:BR:BRA:BRASIL:PIAUI:Beneditinos
+17:BR:BRA:BRASIL:PIAUI:Bertolinia
+18:BR:BRA:BRASIL:PIAUI:Bocaina
+19:BR:BRA:BRASIL:PIAUI:Bom Jesus
+20:BR:BRA:BRASIL:PIAUI:Buriti dos Lopes
+21:BR:BRA:BRASIL:PIAUI:CORRENTES
+22:BR:BRA:BRASIL:PIAUI:Campinas Piaui
+23:BR:BRA:BRASIL:PIAUI:Campo Maior
+24:BR:BRA:BRASIL:PIAUI:Canto do Buriti
+25:BR:BRA:BRASIL:PIAUI:Capitao de Campo
+26:BR:BRA:BRASIL:PIAUI:Caracol
+27:BR:BRA:BRASIL:PIAUI:Castelo do Piaui
+28:BR:BRA:BRASIL:PIAUI:Cocal
+29:BR:BRA:BRASIL:PIAUI:Conceicao Canino
+30:BR:BRA:BRASIL:PIAUI:Cristalandia P.
+31:BR:BRA:BRASIL:PIAUI:Cristino Castro
+32:BR:BRA:BRASIL:PIAUI:Curimata
+33:BR:BRA:BRASIL:PIAUI:Demerval Lobao
+34:BR:BRA:BRASIL:PIAUI:Dom Expedito L.
+35:BR:BRA:BRASIL:PIAUI:Elesbao Veloso
+36:BR:BRA:BRASIL:PIAUI:Eliseu Martins
+37:BR:BRA:BRASIL:PIAUI:Esperantina
+38:BR:BRA:BRASIL:PIAUI:Flores do Piaui
+39:BR:BRA:BRASIL:PIAUI:Floriano
+40:BR:BRA:BRASIL:PIAUI:Francinopolis
+41:BR:BRA:BRASIL:PIAUI:Francisco Aires
+42:BR:BRA:BRASIL:PIAUI:Francisco Santos
+43:BR:BRA:BRASIL:PIAUI:Fronteiras
+44:BR:BRA:BRASIL:PIAUI:Gilbues
+45:BR:BRA:BRASIL:PIAUI:Guadalupe
+46:BR:BRA:BRASIL:PIAUI:Hugo Napoleao
+47:BR:BRA:BRASIL:PIAUI:Inhuma
+48:BR:BRA:BRASIL:PIAUI:Ipiranga Piaui
+49:BR:BRA:BRASIL:PIAUI:Isaias Coelho
+50:BR:BRA:BRASIL:PIAUI:Itainopolis
+51:BR:BRA:BRASIL:PIAUI:Itaueira
+52:BR:BRA:BRASIL:PIAUI:Jaicos
+53:BR:BRA:BRASIL:PIAUI:Jerumenha
+54:BR:BRA:BRASIL:PIAUI:Joaquim Pires
+55:BR:BRA:BRASIL:PIAUI:Jose de Freitas
+56:BR:BRA:BRASIL:PIAUI:Landri Sales
+57:BR:BRA:BRASIL:PIAUI:Luis Correia
+58:BR:BRA:BRASIL:PIAUI:Luzilandia
+59:BR:BRA:BRASIL:PIAUI:Manoel Emilio
+60:BR:BRA:BRASIL:PIAUI:Marcos Parente
+61:BR:BRA:BRASIL:PIAUI:Matias Olimpio
+62:BR:BRA:BRASIL:PIAUI:Miguel Alves
+63:BR:BRA:BRASIL:PIAUI:Miguel Leao
+64:BR:BRA:BRASIL:PIAUI:Monsenhor Gil
+65:BR:BRA:BRASIL:PIAUI:Monsenhor Hipoli
+66:BR:BRA:BRASIL:PIAUI:Monte Alegre
+67:BR:BRA:BRASIL:PIAUI:Nazare do Piaui
+68:BR:BRA:BRASIL:PIAUI:Nossa Senhora di
+69:BR:BRA:BRASIL:PIAUI:Novo Oriente P.
+70:BR:BRA:BRASIL:PIAUI:Oeiras
+71:BR:BRA:BRASIL:PIAUI:Olho D'Agua G.
+72:BR:BRA:BRASIL:PIAUI:Padre Marcos
+73:BR:BRA:BRASIL:PIAUI:Paes Landim
+74:BR:BRA:BRASIL:PIAUI:Palmeira Piaui
+75:BR:BRA:BRASIL:PIAUI:Palmeirais
+76:BR:BRA:BRASIL:PIAUI:Parnagua
+77:BR:BRA:BRASIL:PIAUI:Parnaiba
+78:BR:BRA:BRASIL:PIAUI:Paulistana
+79:BR:BRA:BRASIL:PIAUI:Pedro II
+80:BR:BRA:BRASIL:PIAUI:Picos
+81:BR:BRA:BRASIL:PIAUI:Pimenteiras
+82:BR:BRA:BRASIL:PIAUI:Pio IX
+83:BR:BRA:BRASIL:PIAUI:Piracuruca
+84:BR:BRA:BRASIL:PIAUI:Piripiri
+85:BR:BRA:BRASIL:PIAUI:Porto
+86:BR:BRA:BRASIL:PIAUI:Prata do Piaui
+87:BR:BRA:BRASIL:PIAUI:Redencao Gurguei
+88:BR:BRA:BRASIL:PIAUI:Regeneracao
+89:BR:BRA:BRASIL:PIAUI:Ribeiro Goncalve
+90:BR:BRA:BRASIL:PIAUI:Rio Grande Piaui
+91:BR:BRA:BRASIL:PIAUI:S.Antonio Lisboa
+92:BR:BRA:BRASIL:PIAUI:S.Felix do Piaui
+93:BR:BRA:BRASIL:PIAUI:S.Joao Piaui
+94:BR:BRA:BRASIL:PIAUI:S.Joao da Serra
+95:BR:BRA:BRASIL:PIAUI:S.Jose do Peixe
+96:BR:BRA:BRASIL:PIAUI:S.Jose do Piaui
+97:BR:BRA:BRASIL:PIAUI:S.Miguel Tapuio
+98:BR:BRA:BRASIL:PIAUI:S.Pedro Piaui
+99:BR:BRA:BRASIL:PIAUI:S.Raimundo Nonat
+100:BR:BRA:BRASIL:PIAUI:Santa Luz
+101:BR:BRA:BRASIL:PIAUI:Santo Filomena
+102:BR:BRA:BRASIL:PIAUI:Sao Fco.do Piaui
+103:BR:BRA:BRASIL:PIAUI:Sao Goncalo Piau
+104:BR:BRA:BRASIL:PIAUI:Sao Juliao
+105:BR:BRA:BRASIL:PIAUI:Simoes
+106:BR:BRA:BRASIL:PIAUI:Simplicio Mendes
+107:BR:BRA:BRASIL:PIAUI:Socorro Piaui
+108:BR:BRA:BRASIL:PIAUI:Sta.Cruz Piaui
+109:BR:BRA:BRASIL:PIAUI:Sto.Inacio Piaui
+110:BR:BRA:BRASIL:PIAUI:Teresina
+111:BR:BRA:BRASIL:PIAUI:Uniao
+112:BR:BRA:BRASIL:PIAUI:Urucui
+113:BR:BRA:BRASIL:PIAUI:Valenca do Piaui
+114:BR:BRA:BRASIL:PIAUI:Varzea Grande
+1:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ACARI
+2:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ACU
+3:BR:BRA:BRASIL:RIO GRANDE DO NORTE:AFONSO BEZERRA
+4:BR:BRA:BRASIL:RIO GRANDE DO NORTE:AGUA NOVA
+5:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ALEXANDRIA
+6:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ALTO DO RODRIGUE
+7:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ANGICOS
+8:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ANTONIO MARTINS
+9:BR:BRA:BRASIL:RIO GRANDE DO NORTE:APODI
+10:BR:BRA:BRASIL:RIO GRANDE DO NORTE:AREIA BRANCA
+11:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ARES
+12:BR:BRA:BRASIL:RIO GRANDE DO NORTE:AUGUSTO SEVERO
+13:BR:BRA:BRASIL:RIO GRANDE DO NORTE:BAIA FORMOSA
+14:BR:BRA:BRASIL:RIO GRANDE DO NORTE:BARCELONA
+15:BR:BRA:BRASIL:RIO GRANDE DO NORTE:BENTO FERNANDES
+16:BR:BRA:BRASIL:RIO GRANDE DO NORTE:BOM JESUS
+17:BR:BRA:BRASIL:RIO GRANDE DO NORTE:BREJINHO
+18:BR:BRA:BRASIL:RIO GRANDE DO NORTE:C.JOAO PESSOA
+19:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CAICARA DO R.VEN
+20:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CAICO
+21:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CAMPO REDONDO
+22:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CANGUARETAMA
+23:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CARAUBAS
+24:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CARNAUBA DOS D.
+25:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CARNAUBAIS
+26:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CEARA-MIRIM
+27:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CERRO-CORA
+28:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CORONEL EZEQUIEL
+29:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CRUZETA
+30:BR:BRA:BRASIL:RIO GRANDE DO NORTE:CURRAIS NOVOS
+31:BR:BRA:BRASIL:RIO GRANDE DO NORTE:DOUTOR SEVERIANO
+32:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ENCANTO
+33:BR:BRA:BRASIL:RIO GRANDE DO NORTE:EQUADOR
+34:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ESPIRITO SANTO
+35:BR:BRA:BRASIL:RIO GRANDE DO NORTE:EXTREMOZ
+36:BR:BRA:BRASIL:RIO GRANDE DO NORTE:F. GUERRA
+37:BR:BRA:BRASIL:RIO GRANDE DO NORTE:FLORANIA
+38:BR:BRA:BRASIL:RIO GRANDE DO NORTE:FRANCISCO DANTAS
+39:BR:BRA:BRASIL:RIO GRANDE DO NORTE:FRUTUOSO GOMES
+40:BR:BRA:BRASIL:RIO GRANDE DO NORTE:G.DIX-SEPT ROSAD
+41:BR:BRA:BRASIL:RIO GRANDE DO NORTE:GALINHOS
+42:BR:BRA:BRASIL:RIO GRANDE DO NORTE:GOIANINHA
+43:BR:BRA:BRASIL:RIO GRANDE DO NORTE:GROSSOS
+44:BR:BRA:BRASIL:RIO GRANDE DO NORTE:GUAMARE
+45:BR:BRA:BRASIL:RIO GRANDE DO NORTE:IELMO MARINHO
+46:BR:BRA:BRASIL:RIO GRANDE DO NORTE:IPANGUACU
+47:BR:BRA:BRASIL:RIO GRANDE DO NORTE:IPUEIRA
+48:BR:BRA:BRASIL:RIO GRANDE DO NORTE:ITAU
+49:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JACANA
+50:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JANDAIRA
+51:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JANDUIS
+52:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JANUARIO CICCO
+53:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JAPI
+54:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JARDIM DE ANGICO
+55:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JARDIM DO SERIDO
+56:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JARDIM-PIRANHAS
+57:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JOAO CAMARA
+58:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JOAO DIAS
+59:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JOSE DA PENHA
+60:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JUCURUTU
+61:BR:BRA:BRASIL:RIO GRANDE DO NORTE:JUNCO
+62:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAGOA D'ANTA
+63:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAGOA DE PEDRAS
+64:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAGOA NOVA
+65:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAGOA SALGADA
+66:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAGOAS DE VELHOS
+67:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAJES
+68:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LAJES PINTADAS
+69:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LUCRECIA
+70:BR:BRA:BRASIL:RIO GRANDE DO NORTE:LUIS GOMES
+71:BR:BRA:BRASIL:RIO GRANDE DO NORTE:Lago
+72:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MACAIBA
+73:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MACAU
+74:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MARCELINO VIEIRA
+75:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MARTINS
+76:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MAXARANGUAPE
+77:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MONTANHAS
+78:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MONTE ALEGRE
+79:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MONTE-GAMELEIRAS
+80:BR:BRA:BRASIL:RIO GRANDE DO NORTE:MOSSORO
+81:BR:BRA:BRASIL:RIO GRANDE DO NORTE:NATAL
+82:BR:BRA:BRASIL:RIO GRANDE DO NORTE:NISIA FLORESTA
+83:BR:BRA:BRASIL:RIO GRANDE DO NORTE:NOVA CRUZ
+84:BR:BRA:BRASIL:RIO GRANDE DO NORTE:OLHO D"AGUA DO B
+85:BR:BRA:BRASIL:RIO GRANDE DO NORTE:OURO BRANCO
+86:BR:BRA:BRASIL:RIO GRANDE DO NORTE:P. D. FERROS
+87:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PARANA
+88:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PARAU
+89:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PARAZINHO
+90:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PARELHAS
+91:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PARNAMIRIM
+92:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PASSA E FICA
+93:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PASSAGEM
+94:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PATU
+95:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PEDRA GRANDE
+96:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PEDRA PRETA
+97:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PEDRO AVELINO
+98:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PEDRO VELHO
+99:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PENDENCIAS
+100:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PILOES
+101:BR:BRA:BRASIL:RIO GRANDE DO NORTE:POCO BRANCO
+102:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PORTALEGRE
+103:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PRES. JUSCELINO
+104:BR:BRA:BRASIL:RIO GRANDE DO NORTE:PUREZA
+105:BR:BRA:BRASIL:RIO GRANDE DO NORTE:R. GODEIRO
+106:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RAFAEL FERNANDES
+107:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RIACHO DA CRUZ
+108:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RIACHO SANTANA
+109:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RIACHUELO
+110:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RODOLFO FERNANDE
+111:BR:BRA:BRASIL:RIO GRANDE DO NORTE:RUY BARBOSA
+112:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SANTA CRUZ
+113:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SANTANA
+114:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SANTANA DO MATOS
+115:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SANTO ANTONIO
+116:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO BENTO DO NTE
+117:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO BENTO TRAIRI
+118:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO FCO. OESTE
+119:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO FERNANDO
+120:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO GONCALO DO A
+121:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO J.CAMPESTRE
+122:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO JOAO D. S.
+123:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO JOSE DE M.
+124:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO JOSE SERIDO
+125:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO MIGUEL
+126:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO PAULO POTENG
+127:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO PEDRO
+128:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO RAFAEL
+129:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO TOME
+130:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SAO VICENTE
+131:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SEN. ELOI SOUZA
+132:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SEN. GEORGINO A.
+133:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SERRA NEGRA DO N
+134:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SERRA SAO BENTO
+135:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SERRINHA
+136:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SEVERIANO MELO
+137:BR:BRA:BRASIL:RIO GRANDE DO NORTE:SITIO NOVO
+138:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TABULEIRO GRANDE
+139:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TAIPU
+140:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TANGARA
+141:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TENENTE ANANIAS
+142:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TIBAU DO SUL
+143:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TIMBAUBA DOS B.
+144:BR:BRA:BRASIL:RIO GRANDE DO NORTE:TOUROS
+145:BR:BRA:BRASIL:RIO GRANDE DO NORTE:UMARIZAL
+146:BR:BRA:BRASIL:RIO GRANDE DO NORTE:UPANEMA
+147:BR:BRA:BRASIL:RIO GRANDE DO NORTE:VARZEA
+148:BR:BRA:BRASIL:RIO GRANDE DO NORTE:VICOSA
+149:BR:BRA:BRASIL:RIO GRANDE DO NORTE:VILA FLOR
+1:BR:BRA:BRASIL:GOIAS:ABADIANIA
+2:BR:BRA:BRASIL:GOIAS:AGUA LIMPA
+3:BR:BRA:BRASIL:GOIAS:ALEXANIA
+4:BR:BRA:BRASIL:GOIAS:ALOANDIA
+5:BR:BRA:BRASIL:GOIAS:ALTO PARAISO DE
+6:BR:BRA:BRASIL:GOIAS:ALVORADA DNORT'
+7:BR:BRA:BRASIL:GOIAS:AMORINOPOLIS
+8:BR:BRA:BRASIL:GOIAS:ANAPOLIS
+9:BR:BRA:BRASIL:GOIAS:ANHANGUERA
+10:BR:BRA:BRASIL:GOIAS:ANICUNS
+11:BR:BRA:BRASIL:GOIAS:APARECIDA D'GOI
+12:BR:BRA:BRASIL:GOIAS:APORE
+13:BR:BRA:BRASIL:GOIAS:ARACU
+14:BR:BRA:BRASIL:GOIAS:ARAGARCAS
+15:BR:BRA:BRASIL:GOIAS:ARAGOIANIA
+16:BR:BRA:BRASIL:GOIAS:ARUANA
+17:BR:BRA:BRASIL:GOIAS:AURILANDIA
+18:BR:BRA:BRASIL:GOIAS:AVELINOPOLIS
+19:BR:BRA:BRASIL:GOIAS:BALIZA
+20:BR:BRA:BRASIL:GOIAS:BARRO ALTO
+21:BR:BRA:BRASIL:GOIAS:BELA VISTA D`GO
+22:BR:BRA:BRASIL:GOIAS:BOM JARDIM D'GO
+23:BR:BRA:BRASIL:GOIAS:BOM JESUS D'GOI
+24:BR:BRA:BRASIL:GOIAS:BRASABRANTES
+25:BR:BRA:BRASIL:GOIAS:BRASILIA
+26:BR:BRA:BRASIL:GOIAS:BRITANIA
+27:BR:BRA:BRASIL:GOIAS:BURITI ALEGRE
+28:BR:BRA:BRASIL:GOIAS:CABECEIRAS
+29:BR:BRA:BRASIL:GOIAS:CACHOEIRA ALTA
+30:BR:BRA:BRASIL:GOIAS:CACHOEIRA D'GOI
+31:BR:BRA:BRASIL:GOIAS:CACU
+32:BR:BRA:BRASIL:GOIAS:CAIAPONIA
+33:BR:BRA:BRASIL:GOIAS:CALDAS NOVAS
+34:BR:BRA:BRASIL:GOIAS:CAMPESTRE D'GOI
+35:BR:BRA:BRASIL:GOIAS:CAMPINORTE
+36:BR:BRA:BRASIL:GOIAS:CAMPO ALEGRE D'
+37:BR:BRA:BRASIL:GOIAS:CAMPOS BELOS
+38:BR:BRA:BRASIL:GOIAS:CARMO D'RIO VER
+39:BR:BRA:BRASIL:GOIAS:CATALAO
+40:BR:BRA:BRASIL:GOIAS:CATURAI
+41:BR:BRA:BRASIL:GOIAS:CAVALCANTE
+42:BR:BRA:BRASIL:GOIAS:CERES
+43:BR:BRA:BRASIL:GOIAS:CIRINOPOLIS
+44:BR:BRA:BRASIL:GOIAS:CORREGO D'OURO
+45:BR:BRA:BRASIL:GOIAS:CORUMBA DE GOIA
+46:BR:BRA:BRASIL:GOIAS:CORUMBAIBA
+47:BR:BRA:BRASIL:GOIAS:CRISTALINA
+48:BR:BRA:BRASIL:GOIAS:CRISTIANOPOLIS
+49:BR:BRA:BRASIL:GOIAS:CRIXAS
+50:BR:BRA:BRASIL:GOIAS:CROMINIA
+51:BR:BRA:BRASIL:GOIAS:CUMARI
+52:BR:BRA:BRASIL:GOIAS:DAMIANOPOLIS
+53:BR:BRA:BRASIL:GOIAS:DAMOLANDIA
+54:BR:BRA:BRASIL:GOIAS:DAVINOPOLIS
+55:BR:BRA:BRASIL:GOIAS:DIORAMA
+56:BR:BRA:BRASIL:GOIAS:EDEIA
+57:BR:BRA:BRASIL:GOIAS:ESTRELA DNORTE
+58:BR:BRA:BRASIL:GOIAS:FAZENDA NOVA
+59:BR:BRA:BRASIL:GOIAS:FIRMINOPOLIS
+60:BR:BRA:BRASIL:GOIAS:FLORES DE GOIAS
+61:BR:BRA:BRASIL:GOIAS:FORMOSA
+62:BR:BRA:BRASIL:GOIAS:FORMOSO
+63:BR:BRA:BRASIL:GOIAS:GOIANAPOLIS
+64:BR:BRA:BRASIL:GOIAS:GOIANDIRA
+65:BR:BRA:BRASIL:GOIAS:GOIANESIA
+66:BR:BRA:BRASIL:GOIAS:GOIANIA
+67:BR:BRA:BRASIL:GOIAS:GOIANIRA
+68:BR:BRA:BRASIL:GOIAS:GOIAS
+69:BR:BRA:BRASIL:GOIAS:GOIATUBA
+70:BR:BRA:BRASIL:GOIAS:GUAPO
+71:BR:BRA:BRASIL:GOIAS:GUARANI D'GOIAS
+72:BR:BRA:BRASIL:GOIAS:HEITORAI
+73:BR:BRA:BRASIL:GOIAS:HIDROLANDIA
+74:BR:BRA:BRASIL:GOIAS:HIDROLINA
+75:BR:BRA:BRASIL:GOIAS:IACIARA
+76:BR:BRA:BRASIL:GOIAS:INHUMAS
+77:BR:BRA:BRASIL:GOIAS:IPAMERI
+78:BR:BRA:BRASIL:GOIAS:IPORA
+79:BR:BRA:BRASIL:GOIAS:ISRAELANDIA
+80:BR:BRA:BRASIL:GOIAS:ITABERAI
+81:BR:BRA:BRASIL:GOIAS:ITAGUARU
+82:BR:BRA:BRASIL:GOIAS:ITAJA
+83:BR:BRA:BRASIL:GOIAS:ITAPACI
+84:BR:BRA:BRASIL:GOIAS:ITAPIRAPUA
+85:BR:BRA:BRASIL:GOIAS:ITAPURANGA
+86:BR:BRA:BRASIL:GOIAS:ITARUMA
+87:BR:BRA:BRASIL:GOIAS:ITAUCU
+88:BR:BRA:BRASIL:GOIAS:ITUMBIARA
+89:BR:BRA:BRASIL:GOIAS:IVOLANDIA
+90:BR:BRA:BRASIL:GOIAS:JANDAIA
+91:BR:BRA:BRASIL:GOIAS:JARAGUA
+92:BR:BRA:BRASIL:GOIAS:JATAI
+93:BR:BRA:BRASIL:GOIAS:JAUPACI
+94:BR:BRA:BRASIL:GOIAS:JOVIANIA
+95:BR:BRA:BRASIL:GOIAS:JUCARA
+96:BR:BRA:BRASIL:GOIAS:LEOPOLDO D'BULH
+97:BR:BRA:BRASIL:GOIAS:LUZIANIA
+98:BR:BRA:BRASIL:GOIAS:MAIRIPOTABA
+99:BR:BRA:BRASIL:GOIAS:MAMBAI
+100:BR:BRA:BRASIL:GOIAS:MARA ROSA
+101:BR:BRA:BRASIL:GOIAS:MARZAGAO
+102:BR:BRA:BRASIL:GOIAS:MATEIRA
+103:BR:BRA:BRASIL:GOIAS:MAURILANDIA
+104:BR:BRA:BRASIL:GOIAS:MINEIROS
+105:BR:BRA:BRASIL:GOIAS:MOIPORA
+106:BR:BRA:BRASIL:GOIAS:MONTE ALEGRE D'
+107:BR:BRA:BRASIL:GOIAS:MONTES CLAROS G
+108:BR:BRA:BRASIL:GOIAS:MORRINHOS
+109:BR:BRA:BRASIL:GOIAS:MOSSAMEDES
+110:BR:BRA:BRASIL:GOIAS:MOZARLANDIA
+111:BR:BRA:BRASIL:GOIAS:MUTUNOPOLIS
+112:BR:BRA:BRASIL:GOIAS:NAZARIO
+113:BR:BRA:BRASIL:GOIAS:NEROPOLIS
+114:BR:BRA:BRASIL:GOIAS:NIQUELANDIA
+115:BR:BRA:BRASIL:GOIAS:NOVA AMERICA
+116:BR:BRA:BRASIL:GOIAS:NOVA AURORA
+117:BR:BRA:BRASIL:GOIAS:NOVA ROMA
+118:BR:BRA:BRASIL:GOIAS:NOVA VENEZA
+119:BR:BRA:BRASIL:GOIAS:NOVO BRASIL
+120:BR:BRA:BRASIL:GOIAS:ORIZONA
+121:BR:BRA:BRASIL:GOIAS:OURO VERDE D'GO
+122:BR:BRA:BRASIL:GOIAS:OUVIDOR
+123:BR:BRA:BRASIL:GOIAS:PADRE BERNARDO
+124:BR:BRA:BRASIL:GOIAS:PALMEIRAS D'GOI
+125:BR:BRA:BRASIL:GOIAS:PALMELO
+126:BR:BRA:BRASIL:GOIAS:PALMINOPOLIS
+127:BR:BRA:BRASIL:GOIAS:PANAMA
+128:BR:BRA:BRASIL:GOIAS:PARAUNA
+129:BR:BRA:BRASIL:GOIAS:PETROLINA D'GOI
+130:BR:BRA:BRASIL:GOIAS:PILAR DE GOIAS
+131:BR:BRA:BRASIL:GOIAS:PIRACANJUBA
+132:BR:BRA:BRASIL:GOIAS:PIRANHAS
+133:BR:BRA:BRASIL:GOIAS:PIRENOPOLIS
+134:BR:BRA:BRASIL:GOIAS:PIRES DO RIO
+135:BR:BRA:BRASIL:GOIAS:PLANALTINA
+136:BR:BRA:BRASIL:GOIAS:PONTALINA
+137:BR:BRA:BRASIL:GOIAS:PORANGATU
+138:BR:BRA:BRASIL:GOIAS:PORTELANDIA
+139:BR:BRA:BRASIL:GOIAS:POSSE
+140:BR:BRA:BRASIL:GOIAS:QUIRINOPOLIS
+141:BR:BRA:BRASIL:GOIAS:RIALMA
+142:BR:BRA:BRASIL:GOIAS:RIANAPOLIS
+143:BR:BRA:BRASIL:GOIAS:RIO VERDE
+144:BR:BRA:BRASIL:GOIAS:RUBIATABA
+145:BR:BRA:BRASIL:GOIAS:S.BARBARA D'GOI
+146:BR:BRA:BRASIL:GOIAS:S.FCO.DE GOIAS
+147:BR:BRA:BRASIL:GOIAS:S.HELENA D'GOIA
+148:BR:BRA:BRASIL:GOIAS:S.JOAO DALIANC
+149:BR:BRA:BRASIL:GOIAS:S.LUIS D'MONTES
+150:BR:BRA:BRASIL:GOIAS:S.MIGUEL DARAGU
+151:BR:BRA:BRASIL:GOIAS:S.RITA D'ARAGUA
+152:BR:BRA:BRASIL:GOIAS:S.ROSA DE GOIAS
+153:BR:BRA:BRASIL:GOIAS:S.TERESA DGOIAS
+154:BR:BRA:BRASIL:GOIAS:S.TEREZINHA DG
+155:BR:BRA:BRASIL:GOIAS:SANCLERLANDIA
+156:BR:BRA:BRASIL:GOIAS:SAO DOMINGOS
+157:BR:BRA:BRASIL:GOIAS:SAO SIMAO
+158:BR:BRA:BRASIL:GOIAS:SERRANOPOLIS
+159:BR:BRA:BRASIL:GOIAS:SILVANIA
+160:BR:BRA:BRASIL:GOIAS:SITIO D'ABADIA
+161:BR:BRA:BRASIL:GOIAS:STA.CRUZ D'GOIA
+162:BR:BRA:BRASIL:GOIAS:TAQUARAL D'GOIA
+163:BR:BRA:BRASIL:GOIAS:TRES RANCHOS
+164:BR:BRA:BRASIL:GOIAS:TRINDADE
+165:BR:BRA:BRASIL:GOIAS:TURVANIA
+166:BR:BRA:BRASIL:GOIAS:URUACU
+167:BR:BRA:BRASIL:GOIAS:URUANA
+168:BR:BRA:BRASIL:GOIAS:URUTAI
+169:BR:BRA:BRASIL:GOIAS:VARJAO
+170:BR:BRA:BRASIL:GOIAS:VIANOPOLIS
+1:BR:BRA:BRASIL:MATO GROSSO:ACORIZAL
+2:BR:BRA:BRASIL:MATO GROSSO:ALTO ARAGUAIA
+3:BR:BRA:BRASIL:MATO GROSSO:ALTO GARCAS
+4:BR:BRA:BRASIL:MATO GROSSO:ALTO PARAGUAI
+5:BR:BRA:BRASIL:MATO GROSSO:ARAGUAINHA
+6:BR:BRA:BRASIL:MATO GROSSO:ARENAPOLIS
+7:BR:BRA:BRASIL:MATO GROSSO:ARIPUANA
+8:BR:BRA:BRASIL:MATO GROSSO:BARAO DE MELGAC
+9:BR:BRA:BRASIL:MATO GROSSO:BARRA DO GARCAS
+10:BR:BRA:BRASIL:MATO GROSSO:BARRA DOS BUGRE
+11:BR:BRA:BRASIL:MATO GROSSO:CACERES
+12:BR:BRA:BRASIL:MATO GROSSO:CHAPADA DOS G.
+13:BR:BRA:BRASIL:MATO GROSSO:CUIABA
+14:BR:BRA:BRASIL:MATO GROSSO:DIAMANTINO
+15:BR:BRA:BRASIL:MATO GROSSO:DOM AQUINO
+16:BR:BRA:BRASIL:MATO GROSSO:GRAL CARNEIRO
+17:BR:BRA:BRASIL:MATO GROSSO:GUIRATINGA
+18:BR:BRA:BRASIL:MATO GROSSO:ITIQUIRA
+19:BR:BRA:BRASIL:MATO GROSSO:JACIARA
+20:BR:BRA:BRASIL:MATO GROSSO:LUCIARA
+21:BR:BRA:BRASIL:MATO GROSSO:MATO GROSSO
+22:BR:BRA:BRASIL:MATO GROSSO:MIRASSOL DO O.
+23:BR:BRA:BRASIL:MATO GROSSO:N.S. LIVRAMENTO
+24:BR:BRA:BRASIL:MATO GROSSO:NOBRES
+25:BR:BRA:BRASIL:MATO GROSSO:NORTELANDIA
+26:BR:BRA:BRASIL:MATO GROSSO:PEDRA PRETA
+27:BR:BRA:BRASIL:MATO GROSSO:POCONE
+28:BR:BRA:BRASIL:MATO GROSSO:PONTE BRANCA
+29:BR:BRA:BRASIL:MATO GROSSO:POXOREO
+30:BR:BRA:BRASIL:MATO GROSSO:PTO DOS GAUCHOS
+31:BR:BRA:BRASIL:MATO GROSSO:RONDONOPOLIS
+32:BR:BRA:BRASIL:MATO GROSSO:ROSARIO OESTE
+33:BR:BRA:BRASIL:MATO GROSSO:S. A.DO LEVERGE
+34:BR:BRA:BRASIL:MATO GROSSO:SAO FELIX XINGU
+35:BR:BRA:BRASIL:MATO GROSSO:TANGARA DA SERR
+36:BR:BRA:BRASIL:MATO GROSSO:TESOURO
+37:BR:BRA:BRASIL:MATO GROSSO:TORIXOREU
+38:BR:BRA:BRASIL:MATO GROSSO:VARZEA GRANDE
+1:BR:BRA:BRASIL:RIO GRANDE DO SUL:Agudo
+2:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ajuricaba
+3:BR:BRA:BRASIL:RIO GRANDE DO SUL:Alecrim
+4:BR:BRA:BRASIL:RIO GRANDE DO SUL:Alegrete
+5:BR:BRA:BRASIL:RIO GRANDE DO SUL:Alpestre
+6:BR:BRA:BRASIL:RIO GRANDE DO SUL:Alvorada
+7:BR:BRA:BRASIL:RIO GRANDE DO SUL:Anta Gorda
+8:BR:BRA:BRASIL:RIO GRANDE DO SUL:Antonio Prado
+9:BR:BRA:BRASIL:RIO GRANDE DO SUL:Aratiba
+10:BR:BRA:BRASIL:RIO GRANDE DO SUL:Arroio Grande
+11:BR:BRA:BRASIL:RIO GRANDE DO SUL:Arroio de Meio
+12:BR:BRA:BRASIL:RIO GRANDE DO SUL:Arroio dos Ratos
+13:BR:BRA:BRASIL:RIO GRANDE DO SUL:Arvorezinha
+14:BR:BRA:BRASIL:RIO GRANDE DO SUL:Augusto Pestana
+15:BR:BRA:BRASIL:RIO GRANDE DO SUL:Baje
+16:BR:BRA:BRASIL:RIO GRANDE DO SUL:Barao de Cotejip
+17:BR:BRA:BRASIL:RIO GRANDE DO SUL:Barra do Ribeira
+18:BR:BRA:BRASIL:RIO GRANDE DO SUL:Barracao
+19:BR:BRA:BRASIL:RIO GRANDE DO SUL:Bento Goncalves
+20:BR:BRA:BRASIL:RIO GRANDE DO SUL:Boa Vista do Bur
+21:BR:BRA:BRASIL:RIO GRANDE DO SUL:Bocaroca
+22:BR:BRA:BRASIL:RIO GRANDE DO SUL:Bom Jesus
+23:BR:BRA:BRASIL:RIO GRANDE DO SUL:Bom Retiro do Su
+24:BR:BRA:BRASIL:RIO GRANDE DO SUL:Braga
+25:BR:BRA:BRASIL:RIO GRANDE DO SUL:Butia
+26:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cacapava do Sul
+27:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cacequi
+28:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cachoeira do Sul
+29:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cachoeirinha
+30:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cacique Doble
+31:BR:BRA:BRASIL:RIO GRANDE DO SUL:Caibate
+32:BR:BRA:BRASIL:RIO GRANDE DO SUL:Camaqua
+33:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cambara do Sul
+34:BR:BRA:BRASIL:RIO GRANDE DO SUL:Campinas das Mis
+35:BR:BRA:BRASIL:RIO GRANDE DO SUL:Campinas do Sul
+36:BR:BRA:BRASIL:RIO GRANDE DO SUL:Campo Bom
+37:BR:BRA:BRASIL:RIO GRANDE DO SUL:Campo Novo
+38:BR:BRA:BRASIL:RIO GRANDE DO SUL:Campo Real
+39:BR:BRA:BRASIL:RIO GRANDE DO SUL:Candelaria
+40:BR:BRA:BRASIL:RIO GRANDE DO SUL:Candido Godoi
+41:BR:BRA:BRASIL:RIO GRANDE DO SUL:Canela
+42:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cangucu
+43:BR:BRA:BRASIL:RIO GRANDE DO SUL:Canoas
+44:BR:BRA:BRASIL:RIO GRANDE DO SUL:Carazinho
+45:BR:BRA:BRASIL:RIO GRANDE DO SUL:Carlos Barbosa
+46:BR:BRA:BRASIL:RIO GRANDE DO SUL:Casca
+47:BR:BRA:BRASIL:RIO GRANDE DO SUL:Catuipe
+48:BR:BRA:BRASIL:RIO GRANDE DO SUL:Caxias do Sul
+49:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cerro largo
+50:BR:BRA:BRASIL:RIO GRANDE DO SUL:Chapada
+51:BR:BRA:BRASIL:RIO GRANDE DO SUL:Chiapeta
+52:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ciacara
+53:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ciriaco
+54:BR:BRA:BRASIL:RIO GRANDE DO SUL:Colorado
+55:BR:BRA:BRASIL:RIO GRANDE DO SUL:Condor
+56:BR:BRA:BRASIL:RIO GRANDE DO SUL:Constantina
+57:BR:BRA:BRASIL:RIO GRANDE DO SUL:Coronel Bicaco
+58:BR:BRA:BRASIL:RIO GRANDE DO SUL:Criciumal
+59:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cruz Alta
+60:BR:BRA:BRASIL:RIO GRANDE DO SUL:Cruzeiro do Sul
+61:BR:BRA:BRASIL:RIO GRANDE DO SUL:David Canabarro
+62:BR:BRA:BRASIL:RIO GRANDE DO SUL:Dois Irmaos
+63:BR:BRA:BRASIL:RIO GRANDE DO SUL:Dom Feliciano
+64:BR:BRA:BRASIL:RIO GRANDE DO SUL:Dom Pedrito
+65:BR:BRA:BRASIL:RIO GRANDE DO SUL:Dona Francisca
+66:BR:BRA:BRASIL:RIO GRANDE DO SUL:Encantado
+67:BR:BRA:BRASIL:RIO GRANDE DO SUL:Encruzilhada do
+68:BR:BRA:BRASIL:RIO GRANDE DO SUL:Erexim
+69:BR:BRA:BRASIL:RIO GRANDE DO SUL:Erval
+70:BR:BRA:BRASIL:RIO GRANDE DO SUL:Erval Grande
+71:BR:BRA:BRASIL:RIO GRANDE DO SUL:Erval Seco
+72:BR:BRA:BRASIL:RIO GRANDE DO SUL:Esmeralda
+73:BR:BRA:BRASIL:RIO GRANDE DO SUL:Espumoso
+74:BR:BRA:BRASIL:RIO GRANDE DO SUL:Estancia Velha
+75:BR:BRA:BRASIL:RIO GRANDE DO SUL:Esteio
+76:BR:BRA:BRASIL:RIO GRANDE DO SUL:Estrela
+77:BR:BRA:BRASIL:RIO GRANDE DO SUL:Farroupilha
+78:BR:BRA:BRASIL:RIO GRANDE DO SUL:Faxinal do Sotur
+79:BR:BRA:BRASIL:RIO GRANDE DO SUL:Feliz
+80:BR:BRA:BRASIL:RIO GRANDE DO SUL:Flores da Cunha
+81:BR:BRA:BRASIL:RIO GRANDE DO SUL:Fontoura Xavier
+82:BR:BRA:BRASIL:RIO GRANDE DO SUL:Formigueiro
+83:BR:BRA:BRASIL:RIO GRANDE DO SUL:Frederico Westph
+84:BR:BRA:BRASIL:RIO GRANDE DO SUL:Garibaldi
+85:BR:BRA:BRASIL:RIO GRANDE DO SUL:Gaurama
+86:BR:BRA:BRASIL:RIO GRANDE DO SUL:General Camara
+87:BR:BRA:BRASIL:RIO GRANDE DO SUL:Getulio Vargas
+88:BR:BRA:BRASIL:RIO GRANDE DO SUL:Gramado
+89:BR:BRA:BRASIL:RIO GRANDE DO SUL:Gravatai
+90:BR:BRA:BRASIL:RIO GRANDE DO SUL:Guaiba
+91:BR:BRA:BRASIL:RIO GRANDE DO SUL:Guapore
+92:BR:BRA:BRASIL:RIO GRANDE DO SUL:Guarani das Miss
+93:BR:BRA:BRASIL:RIO GRANDE DO SUL:Horizontina
+94:BR:BRA:BRASIL:RIO GRANDE DO SUL:Humaita
+95:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ibiaca
+96:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ibiraiaras
+97:BR:BRA:BRASIL:RIO GRANDE DO SUL:Igrejinha
+98:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ijui
+99:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ilopolis
+100:BR:BRA:BRASIL:RIO GRANDE DO SUL:Independencia
+101:BR:BRA:BRASIL:RIO GRANDE DO SUL:Irai
+102:BR:BRA:BRASIL:RIO GRANDE DO SUL:Isla
+103:BR:BRA:BRASIL:RIO GRANDE DO SUL:Itaqui
+104:BR:BRA:BRASIL:RIO GRANDE DO SUL:Itatiba do sul
+105:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ivoti
+106:BR:BRA:BRASIL:RIO GRANDE DO SUL:Jacutinga
+107:BR:BRA:BRASIL:RIO GRANDE DO SUL:Jaguarao
+108:BR:BRA:BRASIL:RIO GRANDE DO SUL:Jaguari
+109:BR:BRA:BRASIL:RIO GRANDE DO SUL:Jirua
+110:BR:BRA:BRASIL:RIO GRANDE DO SUL:Julio de Castilh
+111:BR:BRA:BRASIL:RIO GRANDE DO SUL:La. da lavagem
+112:BR:BRA:BRASIL:RIO GRANDE DO SUL:La. do peixe
+113:BR:BRA:BRASIL:RIO GRANDE DO SUL:La. dos barros
+114:BR:BRA:BRASIL:RIO GRANDE DO SUL:La. itapevi
+115:BR:BRA:BRASIL:RIO GRANDE DO SUL:Lago n.n
+116:BR:BRA:BRASIL:RIO GRANDE DO SUL:Lagoa Vermelha
+117:BR:BRA:BRASIL:RIO GRANDE DO SUL:Lagoa mangueira
+118:BR:BRA:BRASIL:RIO GRANDE DO SUL:Lajeado
+119:BR:BRA:BRASIL:RIO GRANDE DO SUL:Lavras do Sul
+120:BR:BRA:BRASIL:RIO GRANDE DO SUL:Liberato Salzano
+121:BR:BRA:BRASIL:RIO GRANDE DO SUL:Machadinho
+122:BR:BRA:BRASIL:RIO GRANDE DO SUL:Marau
+123:BR:BRA:BRASIL:RIO GRANDE DO SUL:Marcionilio Dias
+124:BR:BRA:BRASIL:RIO GRANDE DO SUL:Mariano Moro
+125:BR:BRA:BRASIL:RIO GRANDE DO SUL:Mata
+126:BR:BRA:BRASIL:RIO GRANDE DO SUL:Maximiliano de A
+127:BR:BRA:BRASIL:RIO GRANDE DO SUL:Miraguai
+128:BR:BRA:BRASIL:RIO GRANDE DO SUL:Montenegro
+129:BR:BRA:BRASIL:RIO GRANDE DO SUL:Mostardas
+130:BR:BRA:BRASIL:RIO GRANDE DO SUL:Mucum
+131:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nonoai
+132:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Araca
+133:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Bassano
+134:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Brescia
+135:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Palma
+136:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Petropolis
+137:BR:BRA:BRASIL:RIO GRANDE DO SUL:Nova Prata
+138:BR:BRA:BRASIL:RIO GRANDE DO SUL:Novo Hamburgo
+139:BR:BRA:BRASIL:RIO GRANDE DO SUL:Osorio
+140:BR:BRA:BRASIL:RIO GRANDE DO SUL:Paim Filho
+141:BR:BRA:BRASIL:RIO GRANDE DO SUL:Palmeira das Mis
+142:BR:BRA:BRASIL:RIO GRANDE DO SUL:Palmitinhos
+143:BR:BRA:BRASIL:RIO GRANDE DO SUL:Panambi
+144:BR:BRA:BRASIL:RIO GRANDE DO SUL:Parai
+145:BR:BRA:BRASIL:RIO GRANDE DO SUL:Passo Fundo
+146:BR:BRA:BRASIL:RIO GRANDE DO SUL:Pedro Osorio
+147:BR:BRA:BRASIL:RIO GRANDE DO SUL:Pejucara
+148:BR:BRA:BRASIL:RIO GRANDE DO SUL:Pelotas
+149:BR:BRA:BRASIL:RIO GRANDE DO SUL:Pinheiro Machado
+150:BR:BRA:BRASIL:RIO GRANDE DO SUL:Piratini
+151:BR:BRA:BRASIL:RIO GRANDE DO SUL:Planalto
+152:BR:BRA:BRASIL:RIO GRANDE DO SUL:Portao
+153:BR:BRA:BRASIL:RIO GRANDE DO SUL:Porto Alegre
+154:BR:BRA:BRASIL:RIO GRANDE DO SUL:Porto Lucena
+155:BR:BRA:BRASIL:RIO GRANDE DO SUL:Punta de tapes
+156:BR:BRA:BRASIL:RIO GRANDE DO SUL:Putinga
+157:BR:BRA:BRASIL:RIO GRANDE DO SUL:Quarai
+158:BR:BRA:BRASIL:RIO GRANDE DO SUL:Redentora
+159:BR:BRA:BRASIL:RIO GRANDE DO SUL:Repr. de passo f
+160:BR:BRA:BRASIL:RIO GRANDE DO SUL:Repr.da Ernestin
+161:BR:BRA:BRASIL:RIO GRANDE DO SUL:Repre.Posso Real
+162:BR:BRA:BRASIL:RIO GRANDE DO SUL:Restinga Seca
+163:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rio Grande
+164:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rio Pardo
+165:BR:BRA:BRASIL:RIO GRANDE DO SUL:Roca Sales
+166:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rodeio Bonito
+167:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rolante
+168:BR:BRA:BRASIL:RIO GRANDE DO SUL:Ronda Alta
+169:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rondinha
+170:BR:BRA:BRASIL:RIO GRANDE DO SUL:Roque Gonzales
+171:BR:BRA:BRASIL:RIO GRANDE DO SUL:Rosario do Sul
+172:BR:BRA:BRASIL:RIO GRANDE DO SUL:S.Vicente do Sul
+173:BR:BRA:BRASIL:RIO GRANDE DO SUL:Salvador do Sul
+174:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sananduva
+175:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santa Cruz do Su
+176:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santa Maria
+177:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santa Rosa
+178:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santana da Boa V
+179:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santana do livra
+180:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santiago
+181:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santo Angelo
+182:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santo Antonio
+183:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santo Augusto
+184:BR:BRA:BRASIL:RIO GRANDE DO SUL:Santo cristo
+185:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Borja
+186:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Fco. de Assi
+187:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Fco. de Paul
+188:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Gabriel
+189:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Jeronimo
+190:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Jose do Nort
+191:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Jose do Ouro
+192:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Leopoldo
+193:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Lourenco do
+194:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Luis Gonzaga
+195:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Marcos
+196:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Martinho
+197:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Nicolau
+198:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Paulo das Mi
+199:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Pedro do Sul
+200:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Sebastiao do
+201:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Sepe
+202:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sao Valentim
+203:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sapiranga
+204:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sapucaia do Sul
+205:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sarandi
+206:BR:BRA:BRASIL:RIO GRANDE DO SUL:Seberi
+207:BR:BRA:BRASIL:RIO GRANDE DO SUL:Selbach
+208:BR:BRA:BRASIL:RIO GRANDE DO SUL:Serafina Correia
+209:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sertao
+210:BR:BRA:BRASIL:RIO GRANDE DO SUL:Severiano de Alm
+211:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sobradinho
+212:BR:BRA:BRASIL:RIO GRANDE DO SUL:Soledade
+213:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sta.Barbara do S
+214:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sta.Vitoria do P
+215:BR:BRA:BRASIL:RIO GRANDE DO SUL:Sto.Antonio das
+216:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tapejara
+217:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tapera
+218:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tapes
+219:BR:BRA:BRASIL:RIO GRANDE DO SUL:Taquara
+220:BR:BRA:BRASIL:RIO GRANDE DO SUL:Taquari
+221:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tenente Portela
+222:BR:BRA:BRASIL:RIO GRANDE DO SUL:Torres
+223:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tres Coroas
+224:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tres de Maio
+225:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tres passos
+226:BR:BRA:BRASIL:RIO GRANDE DO SUL:Triunfo
+227:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tucunduva
+228:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tupancireta
+229:BR:BRA:BRASIL:RIO GRANDE DO SUL:Tuparendi
+230:BR:BRA:BRASIL:RIO GRANDE DO SUL:Uruguaiana
+231:BR:BRA:BRASIL:RIO GRANDE DO SUL:Vacaria
+232:BR:BRA:BRASIL:RIO GRANDE DO SUL:Venancio Aires
+233:BR:BRA:BRASIL:RIO GRANDE DO SUL:Vera Cruz
+234:BR:BRA:BRASIL:RIO GRANDE DO SUL:Veranopolis
+235:BR:BRA:BRASIL:RIO GRANDE DO SUL:Viadutos
+236:BR:BRA:BRASIL:RIO GRANDE DO SUL:Viamao
+237:BR:BRA:BRASIL:RIO GRANDE DO SUL:Vicente Dutra
+238:BR:BRA:BRASIL:RIO GRANDE DO SUL:Victor Graeff
+1:BR:BRA:BRASIL:RIO DE JANEIRO:ANGRA DOS REIS
+2:BR:BRA:BRASIL:RIO DE JANEIRO:ARARUAMA
+3:BR:BRA:BRASIL:RIO DE JANEIRO:ARARUANA
+4:BR:BRA:BRASIL:RIO DE JANEIRO:BARRA DO PIRAI
+5:BR:BRA:BRASIL:RIO DE JANEIRO:BARRA MANSA
+6:BR:BRA:BRASIL:RIO DE JANEIRO:BOM JARDIM
+7:BR:BRA:BRASIL:RIO DE JANEIRO:CABO FRIO
+8:BR:BRA:BRASIL:RIO DE JANEIRO:CACHOEIRAS D MAC
+9:BR:BRA:BRASIL:RIO DE JANEIRO:CAMBUCI
+10:BR:BRA:BRASIL:RIO DE JANEIRO:CAMPOS
+11:BR:BRA:BRASIL:RIO DE JANEIRO:CANTAGALO
+12:BR:BRA:BRASIL:RIO DE JANEIRO:CARMO
+13:BR:BRA:BRASIL:RIO DE JANEIRO:CASIMIRO D ABREU
+14:BR:BRA:BRASIL:RIO DE JANEIRO:CONCEICAO MACABU
+15:BR:BRA:BRASIL:RIO DE JANEIRO:CORDEIRO
+16:BR:BRA:BRASIL:RIO DE JANEIRO:DUAS BARRAS
+17:BR:BRA:BRASIL:RIO DE JANEIRO:DUQUE DE CAXIAS
+18:BR:BRA:BRASIL:RIO DE JANEIRO:ENGENHEIRO PAULO
+19:BR:BRA:BRASIL:RIO DE JANEIRO:ITABORAI
+20:BR:BRA:BRASIL:RIO DE JANEIRO:ITAGUAI
+21:BR:BRA:BRASIL:RIO DE JANEIRO:ITAOCARA
+22:BR:BRA:BRASIL:RIO DE JANEIRO:ITAPERUNA
+23:BR:BRA:BRASIL:RIO DE JANEIRO:LA. DE ARARUAMA
+24:BR:BRA:BRASIL:RIO DE JANEIRO:LA. DE IMBOACICA
+25:BR:BRA:BRASIL:RIO DE JANEIRO:LA. DE JACONE
+26:BR:BRA:BRASIL:RIO DE JANEIRO:LA. DO CAMPELO
+27:BR:BRA:BRASIL:RIO DE JANEIRO:LA. VERMELHA
+28:BR:BRA:BRASIL:RIO DE JANEIRO:LAGOA FEIA
+29:BR:BRA:BRASIL:RIO DE JANEIRO:LAJE DO MURIAE
+30:BR:BRA:BRASIL:RIO DE JANEIRO:MACAE
+31:BR:BRA:BRASIL:RIO DE JANEIRO:MAGE
+32:BR:BRA:BRASIL:RIO DE JANEIRO:MANGARATIBA
+33:BR:BRA:BRASIL:RIO DE JANEIRO:MARICA
+34:BR:BRA:BRASIL:RIO DE JANEIRO:MENDES
+35:BR:BRA:BRASIL:RIO DE JANEIRO:MIGUEL PEREIRA
+36:BR:BRA:BRASIL:RIO DE JANEIRO:MIRACEMA
+37:BR:BRA:BRASIL:RIO DE JANEIRO:NATIVIDADE
+38:BR:BRA:BRASIL:RIO DE JANEIRO:NILOPOLIS
+39:BR:BRA:BRASIL:RIO DE JANEIRO:NITEROI
+40:BR:BRA:BRASIL:RIO DE JANEIRO:NOVA FRIBURGO
+41:BR:BRA:BRASIL:RIO DE JANEIRO:NOVA IGUACU
+42:BR:BRA:BRASIL:RIO DE JANEIRO:PARACAMBI
+43:BR:BRA:BRASIL:RIO DE JANEIRO:PARAIBA DO SUL
+44:BR:BRA:BRASIL:RIO DE JANEIRO:PARATI
+45:BR:BRA:BRASIL:RIO DE JANEIRO:PETROPOLIS
+46:BR:BRA:BRASIL:RIO DE JANEIRO:PIRAI
+47:BR:BRA:BRASIL:RIO DE JANEIRO:PORCIUNCULA
+48:BR:BRA:BRASIL:RIO DE JANEIRO:RESENDE
+49:BR:BRA:BRASIL:RIO DE JANEIRO:RESENDE (Hidro.)
+50:BR:BRA:BRASIL:RIO DE JANEIRO:RIO BONITO
+51:BR:BRA:BRASIL:RIO DE JANEIRO:RIO CLARO
+52:BR:BRA:BRASIL:RIO DE JANEIRO:RIO DAS FLORES
+53:BR:BRA:BRASIL:RIO DE JANEIRO:RIO DE JANEIRO
+54:BR:BRA:BRASIL:RIO DE JANEIRO:S JOAO DE MERITI
+55:BR:BRA:BRASIL:RIO DE JANEIRO:S MARIA MADALENA
+56:BR:BRA:BRASIL:RIO DE JANEIRO:S SEBASTIAO D AL
+57:BR:BRA:BRASIL:RIO DE JANEIRO:SANTO ANTONIO P.
+58:BR:BRA:BRASIL:RIO DE JANEIRO:SAO FIDELIS
+59:BR:BRA:BRASIL:RIO DE JANEIRO:SAO GONCALO
+60:BR:BRA:BRASIL:RIO DE JANEIRO:SAO JOAO BARRA
+61:BR:BRA:BRASIL:RIO DE JANEIRO:SAO PEDRO ALDEIA
+62:BR:BRA:BRASIL:RIO DE JANEIRO:SAPUCAIA
+63:BR:BRA:BRASIL:RIO DE JANEIRO:SAQUAREMA
+64:BR:BRA:BRASIL:RIO DE JANEIRO:SILVA JARDIM
+65:BR:BRA:BRASIL:RIO DE JANEIRO:SUMIDOURO
+66:BR:BRA:BRASIL:RIO DE JANEIRO:TERESOPOLIS
+67:BR:BRA:BRASIL:RIO DE JANEIRO:TRAJANO D"MORAIS
+68:BR:BRA:BRASIL:RIO DE JANEIRO:TRES RIOS
+69:BR:BRA:BRASIL:RIO DE JANEIRO:VALENCIA
+70:BR:BRA:BRASIL:RIO DE JANEIRO:VASSOURAS
+71:BR:BRA:BRASIL:RIO DE JANEIRO:VOLTA REDONDA
+1:BR:BRA:BRASIL:BAHIA:ABAIRA
+2:BR:BRA:BRASIL:BAHIA:ABARE
+3:BR:BRA:BRASIL:BAHIA:ACAJUTIBA
+4:BR:BRA:BRASIL:BAHIA:AGUA FRIA
+5:BR:BRA:BRASIL:BAHIA:AGUA QUENTE
+6:BR:BRA:BRASIL:BAHIA:AIQUARA
+7:BR:BRA:BRASIL:BAHIA:ALAGOINHAS
+8:BR:BRA:BRASIL:BAHIA:ALCOBACA
+9:BR:BRA:BRASIL:BAHIA:ALMADINA
+10:BR:BRA:BRASIL:BAHIA:AMARGOSA
+11:BR:BRA:BRASIL:BAHIA:AMELIA RODRIGUEZ
+12:BR:BRA:BRASIL:BAHIA:ANAGE
+13:BR:BRA:BRASIL:BAHIA:ANDARAI
+14:BR:BRA:BRASIL:BAHIA:ANGICAL
+15:BR:BRA:BRASIL:BAHIA:ANGUERA
+16:BR:BRA:BRASIL:BAHIA:ANTAS
+17:BR:BRA:BRASIL:BAHIA:ANTONIO CARDOSO
+18:BR:BRA:BRASIL:BAHIA:ANTONIO GONCALVE
+19:BR:BRA:BRASIL:BAHIA:APORA
+20:BR:BRA:BRASIL:BAHIA:ARACATU
+21:BR:BRA:BRASIL:BAHIA:ARACI
+22:BR:BRA:BRASIL:BAHIA:ARAMARI
+23:BR:BRA:BRASIL:BAHIA:ARATUIPE
+24:BR:BRA:BRASIL:BAHIA:AURELINO LEAL
+25:BR:BRA:BRASIL:BAHIA:BAIANOPOLIS
+26:BR:BRA:BRASIL:BAHIA:BAIXA GRANDE
+27:BR:BRA:BRASIL:BAHIA:BARRA
+28:BR:BRA:BRASIL:BAHIA:BARRA DA CHOCA
+29:BR:BRA:BRASIL:BAHIA:BARRA DA ESTIVA
+30:BR:BRA:BRASIL:BAHIA:BARRA DO MENDES
+31:BR:BRA:BRASIL:BAHIA:BARRA DO ROCHA
+32:BR:BRA:BRASIL:BAHIA:BARREIRAS
+33:BR:BRA:BRASIL:BAHIA:BARRO PRETO
+34:BR:BRA:BRASIL:BAHIA:BELMONTE
+35:BR:BRA:BRASIL:BAHIA:BELO CAMPO
+36:BR:BRA:BRASIL:BAHIA:BIRITINGA
+37:BR:BRA:BRASIL:BAHIA:BOA NOVA
+38:BR:BRA:BRASIL:BAHIA:BOA VISTA TUPIM
+39:BR:BRA:BRASIL:BAHIA:BOM JESUS DA L.
+40:BR:BRA:BRASIL:BAHIA:BONINAL
+41:BR:BRA:BRASIL:BAHIA:BOQUIRA
+42:BR:BRA:BRASIL:BAHIA:BOTUPORA
+43:BR:BRA:BRASIL:BAHIA:BREJOES
+44:BR:BRA:BRASIL:BAHIA:BREJOLANDIA
+45:BR:BRA:BRASIL:BAHIA:BROTAS DE M.
+46:BR:BRA:BRASIL:BAHIA:BRUMADO
+47:BR:BRA:BRASIL:BAHIA:BUERAREMA
+48:BR:BRA:BRASIL:BAHIA:C. DO COITE
+49:BR:BRA:BRASIL:BAHIA:CAATIBA
+50:BR:BRA:BRASIL:BAHIA:CACHOEIRA
+51:BR:BRA:BRASIL:BAHIA:CACULE
+52:BR:BRA:BRASIL:BAHIA:CAEM
+53:BR:BRA:BRASIL:BAHIA:CAETITE
+54:BR:BRA:BRASIL:BAHIA:CAFARNAUM
+55:BR:BRA:BRASIL:BAHIA:CAIRU
+56:BR:BRA:BRASIL:BAHIA:CALDEIRAO GRANDE
+57:BR:BRA:BRASIL:BAHIA:CAMACAN
+58:BR:BRA:BRASIL:BAHIA:CAMACARI
+59:BR:BRA:BRASIL:BAHIA:CAMAMU
+60:BR:BRA:BRASIL:BAHIA:CAMPO ALEGRE DE
+61:BR:BRA:BRASIL:BAHIA:CAMPO FORMOSO
+62:BR:BRA:BRASIL:BAHIA:CANAPOLIS
+63:BR:BRA:BRASIL:BAHIA:CANARANA
+64:BR:BRA:BRASIL:BAHIA:CANAVIEIRAS
+65:BR:BRA:BRASIL:BAHIA:CANDEAL
+66:BR:BRA:BRASIL:BAHIA:CANDEIAS
+67:BR:BRA:BRASIL:BAHIA:CANDIBA
+68:BR:BRA:BRASIL:BAHIA:CANDIDO SALES
+69:BR:BRA:BRASIL:BAHIA:CANSANCAO
+70:BR:BRA:BRASIL:BAHIA:CARAVELAS
+71:BR:BRA:BRASIL:BAHIA:CARDEAL DA SILVA
+72:BR:BRA:BRASIL:BAHIA:CARINHANHA
+73:BR:BRA:BRASIL:BAHIA:CASA NOVA
+74:BR:BRA:BRASIL:BAHIA:CASTRO ALVES
+75:BR:BRA:BRASIL:BAHIA:CATOLANDIA
+76:BR:BRA:BRASIL:BAHIA:CATU
+77:BR:BRA:BRASIL:BAHIA:CENTRAL
+78:BR:BRA:BRASIL:BAHIA:CHORROCHO
+79:BR:BRA:BRASIL:BAHIA:CICERO DANTAS
+80:BR:BRA:BRASIL:BAHIA:CIPO
+81:BR:BRA:BRASIL:BAHIA:COARACI
+82:BR:BRA:BRASIL:BAHIA:COCOS
+83:BR:BRA:BRASIL:BAHIA:CONCEI.D JACUIPE
+84:BR:BRA:BRASIL:BAHIA:CONCEIC.D ALMEID
+85:BR:BRA:BRASIL:BAHIA:CONCEICA.D FEIRA
+86:BR:BRA:BRASIL:BAHIA:CONDE
+87:BR:BRA:BRASIL:BAHIA:CONDEUBA
+88:BR:BRA:BRASIL:BAHIA:CONTENDAS DO S.
+89:BR:BRA:BRASIL:BAHIA:CORACAO DE MARIA
+90:BR:BRA:BRASIL:BAHIA:CORDEIROS
+91:BR:BRA:BRASIL:BAHIA:CORIBE
+92:BR:BRA:BRASIL:BAHIA:CORONEL JOAO SA
+93:BR:BRA:BRASIL:BAHIA:CORRENTINA
+94:BR:BRA:BRASIL:BAHIA:COTEGIPE
+95:BR:BRA:BRASIL:BAHIA:CRAVOLANDIA
+96:BR:BRA:BRASIL:BAHIA:CRISOPOLIS
+97:BR:BRA:BRASIL:BAHIA:CRISTOPOLIS
+98:BR:BRA:BRASIL:BAHIA:CRUZ DAS ALMAS
+99:BR:BRA:BRASIL:BAHIA:CURACA
+100:BR:BRA:BRASIL:BAHIA:DARIO MEIRA
+101:BR:BRA:BRASIL:BAHIA:DOM BASILIO
+102:BR:BRA:BRASIL:BAHIA:DOM MACEDO COSTA
+103:BR:BRA:BRASIL:BAHIA:ELISIO MEDRADO
+104:BR:BRA:BRASIL:BAHIA:ENCRUZILHADA
+105:BR:BRA:BRASIL:BAHIA:ENTRE RIOS
+106:BR:BRA:BRASIL:BAHIA:ESPLANADA
+107:BR:BRA:BRASIL:BAHIA:EUCLIDES D CUNHA
+108:BR:BRA:BRASIL:BAHIA:FEIRA DE SANTANA
+109:BR:BRA:BRASIL:BAHIA:FIRMINO ALVES
+110:BR:BRA:BRASIL:BAHIA:FLORESTA AZUL
+111:BR:BRA:BRASIL:BAHIA:FORMOSA DO RIO P
+112:BR:BRA:BRASIL:BAHIA:GANDU
+113:BR:BRA:BRASIL:BAHIA:GENTIO DO OURO
+114:BR:BRA:BRASIL:BAHIA:GLORIA
+115:BR:BRA:BRASIL:BAHIA:GONGOGI
+116:BR:BRA:BRASIL:BAHIA:GOVERN.MANGABEIR
+117:BR:BRA:BRASIL:BAHIA:GUARATINGA
+118:BR:BRA:BRASIL:BAHIA:GUNAMBI
+119:BR:BRA:BRASIL:BAHIA:IACU
+120:BR:BRA:BRASIL:BAHIA:IBIASSUCE
+121:BR:BRA:BRASIL:BAHIA:IBICARAI
+122:BR:BRA:BRASIL:BAHIA:IBICOARA
+123:BR:BRA:BRASIL:BAHIA:IBICUI
+124:BR:BRA:BRASIL:BAHIA:IBIPEBA
+125:BR:BRA:BRASIL:BAHIA:IBIPITANGA
+126:BR:BRA:BRASIL:BAHIA:IBIQUERA
+127:BR:BRA:BRASIL:BAHIA:IBIRAPITANGA
+128:BR:BRA:BRASIL:BAHIA:IBIRAPUA
+129:BR:BRA:BRASIL:BAHIA:IBIRATAIA
+130:BR:BRA:BRASIL:BAHIA:IBITIARA
+131:BR:BRA:BRASIL:BAHIA:IBITITA
+132:BR:BRA:BRASIL:BAHIA:IBOTIRAMA
+133:BR:BRA:BRASIL:BAHIA:ICHU
+134:BR:BRA:BRASIL:BAHIA:IGAPORA
+135:BR:BRA:BRASIL:BAHIA:IGUAI
+136:BR:BRA:BRASIL:BAHIA:ILHEUS
+137:BR:BRA:BRASIL:BAHIA:INHAMBUPE
+138:BR:BRA:BRASIL:BAHIA:IPECAETA
+139:BR:BRA:BRASIL:BAHIA:IPIAU
+140:BR:BRA:BRASIL:BAHIA:IPIRA
+141:BR:BRA:BRASIL:BAHIA:IPUPIARA
+142:BR:BRA:BRASIL:BAHIA:IRAJUBA
+143:BR:BRA:BRASIL:BAHIA:IRAMAIA
+144:BR:BRA:BRASIL:BAHIA:IRAQUARA
+145:BR:BRA:BRASIL:BAHIA:IRARA
+146:BR:BRA:BRASIL:BAHIA:IRECE
+147:BR:BRA:BRASIL:BAHIA:ITABEPI
+148:BR:BRA:BRASIL:BAHIA:ITABERABA
+149:BR:BRA:BRASIL:BAHIA:ITABUNA
+150:BR:BRA:BRASIL:BAHIA:ITACARE
+151:BR:BRA:BRASIL:BAHIA:ITAETE
+152:BR:BRA:BRASIL:BAHIA:ITAGI
+153:BR:BRA:BRASIL:BAHIA:ITAGIBA
+154:BR:BRA:BRASIL:BAHIA:ITAGIMIRIM
+155:BR:BRA:BRASIL:BAHIA:ITAJU DO COLONIA
+156:BR:BRA:BRASIL:BAHIA:ITAJUIPE
+157:BR:BRA:BRASIL:BAHIA:ITAMARAJU
+158:BR:BRA:BRASIL:BAHIA:ITAMARI
+159:BR:BRA:BRASIL:BAHIA:ITAMBE
+160:BR:BRA:BRASIL:BAHIA:ITANAGRA
+161:BR:BRA:BRASIL:BAHIA:ITANHEM
+162:BR:BRA:BRASIL:BAHIA:ITAPARICA
+163:BR:BRA:BRASIL:BAHIA:ITAPE
+164:BR:BRA:BRASIL:BAHIA:ITAPETINGA
+165:BR:BRA:BRASIL:BAHIA:ITAPICURU
+166:BR:BRA:BRASIL:BAHIA:ITAPIRANGA
+167:BR:BRA:BRASIL:BAHIA:ITAQUARA
+168:BR:BRA:BRASIL:BAHIA:ITARANTIM
+169:BR:BRA:BRASIL:BAHIA:ITIRUCU
+170:BR:BRA:BRASIL:BAHIA:ITIUBA
+171:BR:BRA:BRASIL:BAHIA:ITORORO
+172:BR:BRA:BRASIL:BAHIA:ITUACU
+173:BR:BRA:BRASIL:BAHIA:ITUBERA
+174:BR:BRA:BRASIL:BAHIA:JACARACI
+175:BR:BRA:BRASIL:BAHIA:JACOBINA
+176:BR:BRA:BRASIL:BAHIA:JAGUAQUARA
+177:BR:BRA:BRASIL:BAHIA:JAGUARARI
+178:BR:BRA:BRASIL:BAHIA:JAGUARIPE
+179:BR:BRA:BRASIL:BAHIA:JANDAIRA
+180:BR:BRA:BRASIL:BAHIA:JEQUIE
+181:BR:BRA:BRASIL:BAHIA:JEQUIRICA
+182:BR:BRA:BRASIL:BAHIA:JEREMOABO
+183:BR:BRA:BRASIL:BAHIA:JITAUNA
+184:BR:BRA:BRASIL:BAHIA:JUAZEIRO
+185:BR:BRA:BRASIL:BAHIA:JUSSARA
+186:BR:BRA:BRASIL:BAHIA:JUSSIAPE
+187:BR:BRA:BRASIL:BAHIA:LAFAIETE COUTINH
+188:BR:BRA:BRASIL:BAHIA:LAJE
+189:BR:BRA:BRASIL:BAHIA:LAJEDAO
+190:BR:BRA:BRASIL:BAHIA:LAJEDINHO
+191:BR:BRA:BRASIL:BAHIA:LAMARAO
+192:BR:BRA:BRASIL:BAHIA:LAURO DE FREITAS
+193:BR:BRA:BRASIL:BAHIA:LENCOIS
+194:BR:BRA:BRASIL:BAHIA:LICINIO DE A.
+195:BR:BRA:BRASIL:BAHIA:LIVRAMENTO DO B.
+196:BR:BRA:BRASIL:BAHIA:MACAJUBA
+197:BR:BRA:BRASIL:BAHIA:MACARANI
+198:BR:BRA:BRASIL:BAHIA:MACAUBAS
+199:BR:BRA:BRASIL:BAHIA:MACURURE
+200:BR:BRA:BRASIL:BAHIA:MAIQUINIQUE
+201:BR:BRA:BRASIL:BAHIA:MAIRI
+202:BR:BRA:BRASIL:BAHIA:MALHADA
+203:BR:BRA:BRASIL:BAHIA:MALHADA DE PED.
+204:BR:BRA:BRASIL:BAHIA:MANUEL VITORINO
+205:BR:BRA:BRASIL:BAHIA:MARACAS
+206:BR:BRA:BRASIL:BAHIA:MARAGOGIPE
+207:BR:BRA:BRASIL:BAHIA:MARAU
+208:BR:BRA:BRASIL:BAHIA:MARCIONILIO SOUZ
+209:BR:BRA:BRASIL:BAHIA:MASCOTE
+210:BR:BRA:BRASIL:BAHIA:MATA DE SAO JOAO
+211:BR:BRA:BRASIL:BAHIA:MEDEIROS NETO
+212:BR:BRA:BRASIL:BAHIA:MIGUEL CALMON
+213:BR:BRA:BRASIL:BAHIA:MILAGRES
+214:BR:BRA:BRASIL:BAHIA:MIRANGABA
+215:BR:BRA:BRASIL:BAHIA:MONTE SANTO
+216:BR:BRA:BRASIL:BAHIA:MORPARA
+217:BR:BRA:BRASIL:BAHIA:MORRO DO CHAPEU
+218:BR:BRA:BRASIL:BAHIA:MORTUGABA
+219:BR:BRA:BRASIL:BAHIA:MUCUGE
+220:BR:BRA:BRASIL:BAHIA:MUCURI
+221:BR:BRA:BRASIL:BAHIA:MUNDO NOVO
+222:BR:BRA:BRASIL:BAHIA:MUNIZ FERREIRA
+223:BR:BRA:BRASIL:BAHIA:MURITIBA
+224:BR:BRA:BRASIL:BAHIA:MUTUIPE
+225:BR:BRA:BRASIL:BAHIA:NAZARE
+226:BR:BRA:BRASIL:BAHIA:NILO PECANHA
+227:BR:BRA:BRASIL:BAHIA:NOVA CANAA
+228:BR:BRA:BRASIL:BAHIA:NOVA ITARANA
+229:BR:BRA:BRASIL:BAHIA:NOVA SOURE
+230:BR:BRA:BRASIL:BAHIA:NOVA VICOSA
+231:BR:BRA:BRASIL:BAHIA:OLINDINA
+232:BR:BRA:BRASIL:BAHIA:OLIVERIA DOS B.
+233:BR:BRA:BRASIL:BAHIA:OURICANGAS
+234:BR:BRA:BRASIL:BAHIA:P. JANIO QUADROS
+235:BR:BRA:BRASIL:BAHIA:PALMAS DE M.A.
+236:BR:BRA:BRASIL:BAHIA:PALMEIRAS
+237:BR:BRA:BRASIL:BAHIA:PARAMIRIM
+238:BR:BRA:BRASIL:BAHIA:PARATINGA
+239:BR:BRA:BRASIL:BAHIA:PARIPIRANGA
+240:BR:BRA:BRASIL:BAHIA:PAU BRASIL
+241:BR:BRA:BRASIL:BAHIA:PAULO AFONSO
+242:BR:BRA:BRASIL:BAHIA:PEDRAO
+243:BR:BRA:BRASIL:BAHIA:PEDRO ALEXANDRE
+244:BR:BRA:BRASIL:BAHIA:PIATA
+245:BR:BRA:BRASIL:BAHIA:PILAO ARCADO
+246:BR:BRA:BRASIL:BAHIA:PINDAI
+247:BR:BRA:BRASIL:BAHIA:PINDOBACU
+248:BR:BRA:BRASIL:BAHIA:PIRIPA
+249:BR:BRA:BRASIL:BAHIA:PIRITIBA
+250:BR:BRA:BRASIL:BAHIA:PLANALTINO
+251:BR:BRA:BRASIL:BAHIA:PLANALTO
+252:BR:BRA:BRASIL:BAHIA:POCOES
+253:BR:BRA:BRASIL:BAHIA:POJUCA
+254:BR:BRA:BRASIL:BAHIA:PORTO SEGURO
+255:BR:BRA:BRASIL:BAHIA:POTIRAGUA
+256:BR:BRA:BRASIL:BAHIA:PRADO
+257:BR:BRA:BRASIL:BAHIA:PRES. DUTRA
+258:BR:BRA:BRASIL:BAHIA:QUEIMADAS
+259:BR:BRA:BRASIL:BAHIA:QUIJINGUE
+260:BR:BRA:BRASIL:BAHIA:R. DO JACUIPE
+261:BR:BRA:BRASIL:BAHIA:REMANSO
+262:BR:BRA:BRASIL:BAHIA:RETIROLANDIA
+263:BR:BRA:BRASIL:BAHIA:RIACHAO DAS NEVE
+264:BR:BRA:BRASIL:BAHIA:RIACHO DE SANT.
+265:BR:BRA:BRASIL:BAHIA:RIBEIRA D AMPARO
+266:BR:BRA:BRASIL:BAHIA:RIBEIRA D POMBAL
+267:BR:BRA:BRASIL:BAHIA:RIO DE CONTAS
+268:BR:BRA:BRASIL:BAHIA:RIO DO ANTONIO
+269:BR:BRA:BRASIL:BAHIA:RIO DO PIRES
+270:BR:BRA:BRASIL:BAHIA:RIO REAL
+271:BR:BRA:BRASIL:BAHIA:RODELAS
+272:BR:BRA:BRASIL:BAHIA:RUY BARBOSA
+273:BR:BRA:BRASIL:BAHIA:S.FSCO.DO CONDE
+274:BR:BRA:BRASIL:BAHIA:S.GONCALO D CAMP
+275:BR:BRA:BRASIL:BAHIA:S.MIGUEL D MATAS
+276:BR:BRA:BRASIL:BAHIA:S.SEBAST.D PASSE
+277:BR:BRA:BRASIL:BAHIA:SALINAS MARGARID
+278:BR:BRA:BRASIL:BAHIA:SALVADOR
+279:BR:BRA:BRASIL:BAHIA:SANTA BARBARA
+280:BR:BRA:BRASIL:BAHIA:SANTA BRIGIDA
+281:BR:BRA:BRASIL:BAHIA:SANTA INES
+282:BR:BRA:BRASIL:BAHIA:SANTA MARIA DA V
+283:BR:BRA:BRASIL:BAHIA:SANTA TEREZINHA
+284:BR:BRA:BRASIL:BAHIA:SANTALUZ
+285:BR:BRA:BRASIL:BAHIA:SANTANA
+286:BR:BRA:BRASIL:BAHIA:SANTANOPOLIS
+287:BR:BRA:BRASIL:BAHIA:SANTO AMARO
+288:BR:BRA:BRASIL:BAHIA:SANTO ESTEVAO
+289:BR:BRA:BRASIL:BAHIA:SAO DESIDERIO
+290:BR:BRA:BRASIL:BAHIA:SAO FELIPE
+291:BR:BRA:BRASIL:BAHIA:SAO FELIX
+292:BR:BRA:BRASIL:BAHIA:SAPEACU
+293:BR:BRA:BRASIL:BAHIA:SATIRO DIAS
+294:BR:BRA:BRASIL:BAHIA:SAUDE
+295:BR:BRA:BRASIL:BAHIA:SEABRA
+296:BR:BRA:BRASIL:BAHIA:SEBASTIAO L.
+297:BR:BRA:BRASIL:BAHIA:SENHOR DO BONFIM
+298:BR:BRA:BRASIL:BAHIA:SENTO SE
+299:BR:BRA:BRASIL:BAHIA:SERRA DOURADA
+300:BR:BRA:BRASIL:BAHIA:SERRA PRETA
+301:BR:BRA:BRASIL:BAHIA:SERRINHA
+302:BR:BRA:BRASIL:BAHIA:SERROLANDIA
+303:BR:BRA:BRASIL:BAHIA:SIMOES FILHO
+304:BR:BRA:BRASIL:BAHIA:SOUTO SOARES
+305:BR:BRA:BRASIL:BAHIA:STA RITA D CASSI
+306:BR:BRA:BRASIL:BAHIA:STA.CRUZ CABRALI
+307:BR:BRA:BRASIL:BAHIA:STA.CRUZ DA VITO
+308:BR:BRA:BRASIL:BAHIA:STO.ANTO.D JESUS
+309:BR:BRA:BRASIL:BAHIA:TABOCAS DO BREJO
+310:BR:BRA:BRASIL:BAHIA:TANHACU
+311:BR:BRA:BRASIL:BAHIA:TANQUINHO
+312:BR:BRA:BRASIL:BAHIA:TAPEROA
+313:BR:BRA:BRASIL:BAHIA:TAPIRAMUTA
+314:BR:BRA:BRASIL:BAHIA:TEODORO SAMPAIO
+315:BR:BRA:BRASIL:BAHIA:TEOFILANDIA
+316:BR:BRA:BRASIL:BAHIA:TEOLANDIA
+317:BR:BRA:BRASIL:BAHIA:TERRA NOVA
+318:BR:BRA:BRASIL:BAHIA:TREMEDAL
+319:BR:BRA:BRASIL:BAHIA:TUCANO
+320:BR:BRA:BRASIL:BAHIA:UAUA
+321:BR:BRA:BRASIL:BAHIA:UBAIRA
+322:BR:BRA:BRASIL:BAHIA:UBAITABA
+323:BR:BRA:BRASIL:BAHIA:UBATA
+324:BR:BRA:BRASIL:BAHIA:UIBAI
+325:BR:BRA:BRASIL:BAHIA:UNA
+326:BR:BRA:BRASIL:BAHIA:URANDI
+327:BR:BRA:BRASIL:BAHIA:URUCUCA
+328:BR:BRA:BRASIL:BAHIA:UTINGA
+329:BR:BRA:BRASIL:BAHIA:VALENCA
+330:BR:BRA:BRASIL:BAHIA:VALENTE
+331:BR:BRA:BRASIL:BAHIA:VARZEA DO POCO
+332:BR:BRA:BRASIL:BAHIA:VERA CRUZ
+333:BR:BRA:BRASIL:BAHIA:VITORIA D CONQUI
+334:BR:BRA:BRASIL:BAHIA:WAGNER
+335:BR:BRA:BRASIL:BAHIA:WENCESLAU GUIMAR
+336:BR:BRA:BRASIL:BAHIA:XIQUE-XIQUE
+1:BR:BRA:BRASIL:ESPIRITU SANTO:Afonso Claudio
+2:BR:BRA:BRASIL:ESPIRITU SANTO:Alegre
+3:BR:BRA:BRASIL:ESPIRITU SANTO:Alfredo Chaves
+4:BR:BRA:BRASIL:ESPIRITU SANTO:Anchieta
+5:BR:BRA:BRASIL:ESPIRITU SANTO:Aracruz
+6:BR:BRA:BRASIL:ESPIRITU SANTO:Attilio Vivacqua
+7:BR:BRA:BRASIL:ESPIRITU SANTO:Baixo Guandu
+8:BR:BRA:BRASIL:ESPIRITU SANTO:Barra De S. Fran
+9:BR:BRA:BRASIL:ESPIRITU SANTO:Boa Esperanca
+10:BR:BRA:BRASIL:ESPIRITU SANTO:Bom Jesus D"Nte.
+11:BR:BRA:BRASIL:ESPIRITU SANTO:Cachoeiro De Ita
+12:BR:BRA:BRASIL:ESPIRITU SANTO:Cariacica
+13:BR:BRA:BRASIL:ESPIRITU SANTO:Castelo
+14:BR:BRA:BRASIL:ESPIRITU SANTO:Colatina
+15:BR:BRA:BRASIL:ESPIRITU SANTO:Conceicao Barra
+16:BR:BRA:BRASIL:ESPIRITU SANTO:Conceicao Do Cas
+17:BR:BRA:BRASIL:ESPIRITU SANTO:Divino De S. Lou
+18:BR:BRA:BRASIL:ESPIRITU SANTO:Domingos Martins
+19:BR:BRA:BRASIL:ESPIRITU SANTO:Dores Do Rio Pre
+20:BR:BRA:BRASIL:ESPIRITU SANTO:Fundao
+21:BR:BRA:BRASIL:ESPIRITU SANTO:Guacui
+22:BR:BRA:BRASIL:ESPIRITU SANTO:Guarapari
+23:BR:BRA:BRASIL:ESPIRITU SANTO:Ibiragu
+24:BR:BRA:BRASIL:ESPIRITU SANTO:Iconha
+25:BR:BRA:BRASIL:ESPIRITU SANTO:Itaguacu
+26:BR:BRA:BRASIL:ESPIRITU SANTO:Itapemirim
+27:BR:BRA:BRASIL:ESPIRITU SANTO:Itarana
+28:BR:BRA:BRASIL:ESPIRITU SANTO:Iuna
+29:BR:BRA:BRASIL:ESPIRITU SANTO:Jeronimo Monteir
+30:BR:BRA:BRASIL:ESPIRITU SANTO:Lago Juparana
+31:BR:BRA:BRASIL:ESPIRITU SANTO:Laguina
+32:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna
+33:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna Capuba
+34:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna Do Boa Vi
+35:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna Jabaete
+36:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna Piabinha
+37:BR:BRA:BRASIL:ESPIRITU SANTO:Laguna Tapera
+38:BR:BRA:BRASIL:ESPIRITU SANTO:Linhares
+39:BR:BRA:BRASIL:ESPIRITU SANTO:Mantenopolis
+40:BR:BRA:BRASIL:ESPIRITU SANTO:Mimoso Do Sul
+41:BR:BRA:BRASIL:ESPIRITU SANTO:Montanha
+42:BR:BRA:BRASIL:ESPIRITU SANTO:Mucurici
+43:BR:BRA:BRASIL:ESPIRITU SANTO:Muniz Freire
+44:BR:BRA:BRASIL:ESPIRITU SANTO:Muqui
+45:BR:BRA:BRASIL:ESPIRITU SANTO:Nova Venecia
+46:BR:BRA:BRASIL:ESPIRITU SANTO:Pancas
+47:BR:BRA:BRASIL:ESPIRITU SANTO:Pinheiros
+48:BR:BRA:BRASIL:ESPIRITU SANTO:Piuma
+49:BR:BRA:BRASIL:ESPIRITU SANTO:Rio Novo Do Sul
+50:BR:BRA:BRASIL:ESPIRITU SANTO:S. Gabriel Da Pa
+51:BR:BRA:BRASIL:ESPIRITU SANTO:Santa Leopoldina
+52:BR:BRA:BRASIL:ESPIRITU SANTO:Santa Teresa
+53:BR:BRA:BRASIL:ESPIRITU SANTO:Sao Mateus
+54:BR:BRA:BRASIL:ESPIRITU SANTO:Serra
+55:BR:BRA:BRASIL:ESPIRITU SANTO:Viana
+56:BR:BRA:BRASIL:ESPIRITU SANTO:Vila Velha
+57:BR:BRA:BRASIL:ESPIRITU SANTO:Vitoria
+1:BR:BRA:BRASIL:TOCANTINS:ALMAS
+2:BR:BRA:BRASIL:TOCANTINS:ALVORADA
+3:BR:BRA:BRASIL:TOCANTINS:ANANAS
+4:BR:BRA:BRASIL:TOCANTINS:ARAGUACEMA
+5:BR:BRA:BRASIL:TOCANTINS:ARAGUACU
+6:BR:BRA:BRASIL:TOCANTINS:ARAGUAINA
+7:BR:BRA:BRASIL:TOCANTINS:ARAGUATINS
+8:BR:BRA:BRASIL:TOCANTINS:ARAPOEMA
+9:BR:BRA:BRASIL:TOCANTINS:ARRAIAS
+10:BR:BRA:BRASIL:TOCANTINS:AURORA DO NORTE
+11:BR:BRA:BRASIL:TOCANTINS:AXIXA DE GOIAS
+12:BR:BRA:BRASIL:TOCANTINS:BABACULANDIA
+13:BR:BRA:BRASIL:TOCANTINS:BREJINHO D'NAZA
+14:BR:BRA:BRASIL:TOCANTINS:COLINAS DE GOIA
+15:BR:BRA:BRASIL:TOCANTINS:CONCEICAO D'NOR
+16:BR:BRA:BRASIL:TOCANTINS:COUTO MAGALHAES
+17:BR:BRA:BRASIL:TOCANTINS:CRISTALANDIA
+18:BR:BRA:BRASIL:TOCANTINS:DIANOPOLIS
+19:BR:BRA:BRASIL:TOCANTINS:DOIS IRMAOS D'G
+20:BR:BRA:BRASIL:TOCANTINS:DUERE
+21:BR:BRA:BRASIL:TOCANTINS:FILADELFIA
+22:BR:BRA:BRASIL:TOCANTINS:FORMOSO D'ARAGU
+23:BR:BRA:BRASIL:TOCANTINS:GURUPI
+24:BR:BRA:BRASIL:TOCANTINS:ITACAJA
+25:BR:BRA:BRASIL:TOCANTINS:ITAGUATINS
+26:BR:BRA:BRASIL:TOCANTINS:ITAPORA DE GOIA
+27:BR:BRA:BRASIL:TOCANTINS:LIZARDA
+28:BR:BRA:BRASIL:TOCANTINS:MIRACEMA D'NORT
+29:BR:BRA:BRASIL:TOCANTINS:MIRANORTE
+30:BR:BRA:BRASIL:TOCANTINS:MONTE DO CARMO
+31:BR:BRA:BRASIL:TOCANTINS:NATIVIDADE
+32:BR:BRA:BRASIL:TOCANTINS:NAZARE
+33:BR:BRA:BRASIL:TOCANTINS:NOVO ACORDO
+34:BR:BRA:BRASIL:TOCANTINS:P.ALTA D'BOM JE
+35:BR:BRA:BRASIL:TOCANTINS:PARAISO D'NORTE
+36:BR:BRA:BRASIL:TOCANTINS:PARANA
+37:BR:BRA:BRASIL:TOCANTINS:PEDRO AFONSO
+38:BR:BRA:BRASIL:TOCANTINS:PEIXE
+39:BR:BRA:BRASIL:TOCANTINS:PEQUIZEIRO
+40:BR:BRA:BRASIL:TOCANTINS:PIACA
+41:BR:BRA:BRASIL:TOCANTINS:PINDORAMA D'GOI
+42:BR:BRA:BRASIL:TOCANTINS:PIUM
+43:BR:BRA:BRASIL:TOCANTINS:PONTE ALTA DNO
+44:BR:BRA:BRASIL:TOCANTINS:PORTO NACIONAL
+45:BR:BRA:BRASIL:TOCANTINS:S.SEBAST.D'TOCA
+46:BR:BRA:BRASIL:TOCANTINS:SITIO NOVO D'GO
+47:BR:BRA:BRASIL:TOCANTINS:TAGUATINGUA
+48:BR:BRA:BRASIL:TOCANTINS:TOCANTINIA
+49:BR:BRA:BRASIL:TOCANTINS:TOCANTINOPOLIS
+50:BR:BRA:BRASIL:TOCANTINS:TUPIRAMA
+51:BR:BRA:BRASIL:TOCANTINS:TUPIRANTINS
+52:BR:BRA:BRASIL:TOCANTINS:XAMBIOA
+1:BR:BRA:BRASIL:CEARA:ABAIARA
+2:BR:BRA:BRASIL:CEARA:ACARAPE
+3:BR:BRA:BRASIL:CEARA:ACARAU
+4:BR:BRA:BRASIL:CEARA:ACOPIARA
+5:BR:BRA:BRASIL:CEARA:AIUABA
+6:BR:BRA:BRASIL:CEARA:ALCANTARAS
+7:BR:BRA:BRASIL:CEARA:ALTANEIRA
+8:BR:BRA:BRASIL:CEARA:ALTO SANTO
+9:BR:BRA:BRASIL:CEARA:AMONTADA
+10:BR:BRA:BRASIL:CEARA:ANTONINA DO NOR.
+11:BR:BRA:BRASIL:CEARA:APUIARES
+12:BR:BRA:BRASIL:CEARA:AQUIRAZ
+13:BR:BRA:BRASIL:CEARA:ARACATI
+14:BR:BRA:BRASIL:CEARA:ARACOIABA
+15:BR:BRA:BRASIL:CEARA:ARARAU
+16:BR:BRA:BRASIL:CEARA:ARARIPE
+17:BR:BRA:BRASIL:CEARA:ARATUBA
+18:BR:BRA:BRASIL:CEARA:ARNEIROZ
+19:BR:BRA:BRASIL:CEARA:ASSARE
+20:BR:BRA:BRASIL:CEARA:AURORA
+21:BR:BRA:BRASIL:CEARA:BAIXIO
+22:BR:BRA:BRASIL:CEARA:BANABUIU
+23:BR:BRA:BRASIL:CEARA:BARBALHA
+24:BR:BRA:BRASIL:CEARA:BARREIRA
+25:BR:BRA:BRASIL:CEARA:BARRO
+26:BR:BRA:BRASIL:CEARA:BATURITE
+27:BR:BRA:BRASIL:CEARA:BEBERIBE
+28:BR:BRA:BRASIL:CEARA:BELA CRUZ
+29:BR:BRA:BRASIL:CEARA:BOA VIAGEM
+30:BR:BRA:BRASIL:CEARA:BREJO SANTO
+31:BR:BRA:BRASIL:CEARA:CAMOCIM
+32:BR:BRA:BRASIL:CEARA:CAMPOS SALES
+33:BR:BRA:BRASIL:CEARA:CANINDE
+34:BR:BRA:BRASIL:CEARA:CAPISTRANO
+35:BR:BRA:BRASIL:CEARA:CARIDADE
+36:BR:BRA:BRASIL:CEARA:CARIRE
+37:BR:BRA:BRASIL:CEARA:CARIRIACU
+38:BR:BRA:BRASIL:CEARA:CARIUS
+39:BR:BRA:BRASIL:CEARA:CARNAUBAL
+40:BR:BRA:BRASIL:CEARA:CASCAVEL
+41:BR:BRA:BRASIL:CEARA:CATARINA
+42:BR:BRA:BRASIL:CEARA:CAUCAIA
+43:BR:BRA:BRASIL:CEARA:CEDRO
+44:BR:BRA:BRASIL:CEARA:CHAVAL
+45:BR:BRA:BRASIL:CEARA:CHOROZINHO
+46:BR:BRA:BRASIL:CEARA:COCOCI
+47:BR:BRA:BRASIL:CEARA:COREAU
+48:BR:BRA:BRASIL:CEARA:CRATEUS
+49:BR:BRA:BRASIL:CEARA:CRATO
+50:BR:BRA:BRASIL:CEARA:EUZEBIO
+51:BR:BRA:BRASIL:CEARA:FARIAS BRITO
+52:BR:BRA:BRASIL:CEARA:FORQUILHA
+53:BR:BRA:BRASIL:CEARA:FORTALEZA
+54:BR:BRA:BRASIL:CEARA:FRECHEIRINHA
+55:BR:BRA:BRASIL:CEARA:GENERAL SAMPAIO
+56:BR:BRA:BRASIL:CEARA:GRACA
+57:BR:BRA:BRASIL:CEARA:GRANJA
+58:BR:BRA:BRASIL:CEARA:GRANJEIRO
+59:BR:BRA:BRASIL:CEARA:GROAIRAS
+60:BR:BRA:BRASIL:CEARA:GUAIUBA
+61:BR:BRA:BRASIL:CEARA:GUARACIABA DO N.
+62:BR:BRA:BRASIL:CEARA:GUARAMIRANGA
+63:BR:BRA:BRASIL:CEARA:HIDROLANDIA
+64:BR:BRA:BRASIL:CEARA:HORIZONTE
+65:BR:BRA:BRASIL:CEARA:IBIAPINA
+66:BR:BRA:BRASIL:CEARA:ICAPUI
+67:BR:BRA:BRASIL:CEARA:ICO
+68:BR:BRA:BRASIL:CEARA:IGAUTU
+69:BR:BRA:BRASIL:CEARA:INDEPENDENCIA
+70:BR:BRA:BRASIL:CEARA:IPAUMIRIM
+71:BR:BRA:BRASIL:CEARA:IPU
+72:BR:BRA:BRASIL:CEARA:IPUEIRAS
+73:BR:BRA:BRASIL:CEARA:IRACEMA
+74:BR:BRA:BRASIL:CEARA:IRAUCUBA
+75:BR:BRA:BRASIL:CEARA:ITAICABA
+76:BR:BRA:BRASIL:CEARA:ITAPAGE
+77:BR:BRA:BRASIL:CEARA:ITAPIPOCA
+78:BR:BRA:BRASIL:CEARA:ITAPIUNA
+79:BR:BRA:BRASIL:CEARA:ITAREMA
+80:BR:BRA:BRASIL:CEARA:ITATIRA
+81:BR:BRA:BRASIL:CEARA:JAGUARETAMA
+82:BR:BRA:BRASIL:CEARA:JAGUARIBARA
+83:BR:BRA:BRASIL:CEARA:JAGUARIBE
+84:BR:BRA:BRASIL:CEARA:JAGUARUANA
+85:BR:BRA:BRASIL:CEARA:JARDIM
+86:BR:BRA:BRASIL:CEARA:JATI
+87:BR:BRA:BRASIL:CEARA:JUAZEIRO DO NTE
+88:BR:BRA:BRASIL:CEARA:JUCAS
+89:BR:BRA:BRASIL:CEARA:LAGO
+90:BR:BRA:BRASIL:CEARA:LAVAS DA MANGABE
+91:BR:BRA:BRASIL:CEARA:LIMOEIRO DO NOR.
+92:BR:BRA:BRASIL:CEARA:MADALENA
+93:BR:BRA:BRASIL:CEARA:MARACANAU
+94:BR:BRA:BRASIL:CEARA:MARANGUAPE
+95:BR:BRA:BRASIL:CEARA:MARCO
+96:BR:BRA:BRASIL:CEARA:MARTINOPOLE
+97:BR:BRA:BRASIL:CEARA:MASSAPE
+98:BR:BRA:BRASIL:CEARA:MERUOCA
+99:BR:BRA:BRASIL:CEARA:MILAGRES
+100:BR:BRA:BRASIL:CEARA:MILHA
+101:BR:BRA:BRASIL:CEARA:MISSAO VELHA
+102:BR:BRA:BRASIL:CEARA:MOMBACA
+103:BR:BRA:BRASIL:CEARA:MONSENHOR TABOSA
+104:BR:BRA:BRASIL:CEARA:MORADA NOVA
+105:BR:BRA:BRASIL:CEARA:MORAUJO
+106:BR:BRA:BRASIL:CEARA:MORRINHOS
+107:BR:BRA:BRASIL:CEARA:MUCAMBO
+108:BR:BRA:BRASIL:CEARA:MULUNGU
+109:BR:BRA:BRASIL:CEARA:NOVA OLINDA
+110:BR:BRA:BRASIL:CEARA:NOVA RUSSAS
+111:BR:BRA:BRASIL:CEARA:NOVO ORIENTE
+112:BR:BRA:BRASIL:CEARA:OROS
+113:BR:BRA:BRASIL:CEARA:PACAJUS
+114:BR:BRA:BRASIL:CEARA:PACATUBA
+115:BR:BRA:BRASIL:CEARA:PACOTI
+116:BR:BRA:BRASIL:CEARA:PACUJA
+117:BR:BRA:BRASIL:CEARA:PALHANO
+118:BR:BRA:BRASIL:CEARA:PALMACIA
+119:BR:BRA:BRASIL:CEARA:PARACURU
+120:BR:BRA:BRASIL:CEARA:PARAIPABA
+121:BR:BRA:BRASIL:CEARA:PARAMBU
+122:BR:BRA:BRASIL:CEARA:PARAMOTI
+123:BR:BRA:BRASIL:CEARA:PEDRA BRANCA
+124:BR:BRA:BRASIL:CEARA:PENAFORTE
+125:BR:BRA:BRASIL:CEARA:PEREIRO
+126:BR:BRA:BRASIL:CEARA:PETENCOSTE
+127:BR:BRA:BRASIL:CEARA:PIQUET CARNEIRO
+128:BR:BRA:BRASIL:CEARA:PIRES FERREIRA
+129:BR:BRA:BRASIL:CEARA:PORANGA
+130:BR:BRA:BRASIL:CEARA:PORTEIRAS
+131:BR:BRA:BRASIL:CEARA:POTENGI
+132:BR:BRA:BRASIL:CEARA:POTIRETAMA
+133:BR:BRA:BRASIL:CEARA:QUITERIANOPOLES
+134:BR:BRA:BRASIL:CEARA:QUIXADA
+135:BR:BRA:BRASIL:CEARA:QUIXELO
+136:BR:BRA:BRASIL:CEARA:QUIXERAMOBIM
+137:BR:BRA:BRASIL:CEARA:QUIXERE
+138:BR:BRA:BRASIL:CEARA:REDENCAO
+139:BR:BRA:BRASIL:CEARA:RERIUTUBA
+140:BR:BRA:BRASIL:CEARA:RUSSAS
+141:BR:BRA:BRASIL:CEARA:SABOEIRO
+142:BR:BRA:BRASIL:CEARA:SANTA QUITERIA
+143:BR:BRA:BRASIL:CEARA:SANTANA DO A....
+144:BR:BRA:BRASIL:CEARA:SANTANA DO CARIR
+145:BR:BRA:BRASIL:CEARA:SAO BENEDITO
+146:BR:BRA:BRASIL:CEARA:SAO GONCALO DO A
+147:BR:BRA:BRASIL:CEARA:SAO JOAO DO J.
+148:BR:BRA:BRASIL:CEARA:SAO LUIZ DO CURU
+149:BR:BRA:BRASIL:CEARA:SENADOR POMPEU
+150:BR:BRA:BRASIL:CEARA:SENADOR SA
+151:BR:BRA:BRASIL:CEARA:SOBRAL
+152:BR:BRA:BRASIL:CEARA:SOLONOPOLE
+153:BR:BRA:BRASIL:CEARA:TABULEIRO DO NTE
+154:BR:BRA:BRASIL:CEARA:TAMBORIL
+155:BR:BRA:BRASIL:CEARA:TAUA
+156:BR:BRA:BRASIL:CEARA:TIANGUA
+157:BR:BRA:BRASIL:CEARA:TRAIRI
+158:BR:BRA:BRASIL:CEARA:TURURU
+159:BR:BRA:BRASIL:CEARA:UBAJARA
+160:BR:BRA:BRASIL:CEARA:UMARI
+161:BR:BRA:BRASIL:CEARA:UMIRIM
+162:BR:BRA:BRASIL:CEARA:URUBURETAMA
+163:BR:BRA:BRASIL:CEARA:URUOCA
+164:BR:BRA:BRASIL:CEARA:VARJOTA
+165:BR:BRA:BRASIL:CEARA:VARZEA ALEGRE
+166:BR:BRA:BRASIL:CEARA:VICOSA DO CEARA
+1:BR:BRA:BRASIL:MINAS GERAIS:A. DOS DOURADOS
+2:BR:BRA:BRASIL:MINAS GERAIS:ABAETE
+3:BR:BRA:BRASIL:MINAS GERAIS:ABRE CAMPO
+4:BR:BRA:BRASIL:MINAS GERAIS:ACAIACA
+5:BR:BRA:BRASIL:MINAS GERAIS:ACUCENA
+6:BR:BRA:BRASIL:MINAS GERAIS:AGUA BOA
+7:BR:BRA:BRASIL:MINAS GERAIS:AGUA COMPRIDA
+8:BR:BRA:BRASIL:MINAS GERAIS:AGUANIL
+9:BR:BRA:BRASIL:MINAS GERAIS:AGUAS FORMOSAS
+10:BR:BRA:BRASIL:MINAS GERAIS:AGUAS VERMELHAS
+11:BR:BRA:BRASIL:MINAS GERAIS:AIMORES
+12:BR:BRA:BRASIL:MINAS GERAIS:AIURUOCA
+13:BR:BRA:BRASIL:MINAS GERAIS:ALAGOA
+14:BR:BRA:BRASIL:MINAS GERAIS:ALBERTINA
+15:BR:BRA:BRASIL:MINAS GERAIS:ALEM PARAIBA
+16:BR:BRA:BRASIL:MINAS GERAIS:ALFENAS
+17:BR:BRA:BRASIL:MINAS GERAIS:ALMENARA
+18:BR:BRA:BRASIL:MINAS GERAIS:ALPERCATA
+19:BR:BRA:BRASIL:MINAS GERAIS:ALPINOPOLIS
+20:BR:BRA:BRASIL:MINAS GERAIS:ALTEROSA
+21:BR:BRA:BRASIL:MINAS GERAIS:ALTO RIO DOCE
+22:BR:BRA:BRASIL:MINAS GERAIS:ALVARENGA
+23:BR:BRA:BRASIL:MINAS GERAIS:ALVINOPOLIS
+24:BR:BRA:BRASIL:MINAS GERAIS:ALVORADA DE MINA
+25:BR:BRA:BRASIL:MINAS GERAIS:AMPARO DA SERRA
+26:BR:BRA:BRASIL:MINAS GERAIS:ANDRADAS
+27:BR:BRA:BRASIL:MINAS GERAIS:ANDRE FERNANDES
+28:BR:BRA:BRASIL:MINAS GERAIS:ANDRELANDIA
+29:BR:BRA:BRASIL:MINAS GERAIS:ANTONIO CARLOS
+30:BR:BRA:BRASIL:MINAS GERAIS:ANTONIO DIAS
+31:BR:BRA:BRASIL:MINAS GERAIS:ANTONIO PRADO DE
+32:BR:BRA:BRASIL:MINAS GERAIS:ARACAI
+33:BR:BRA:BRASIL:MINAS GERAIS:ARACITABA
+34:BR:BRA:BRASIL:MINAS GERAIS:ARACUAI
+35:BR:BRA:BRASIL:MINAS GERAIS:ARAGUARI
+36:BR:BRA:BRASIL:MINAS GERAIS:ARANTINA
+37:BR:BRA:BRASIL:MINAS GERAIS:ARAPONGA
+38:BR:BRA:BRASIL:MINAS GERAIS:ARAPUA
+39:BR:BRA:BRASIL:MINAS GERAIS:ARAUJOS
+40:BR:BRA:BRASIL:MINAS GERAIS:ARAXA
+41:BR:BRA:BRASIL:MINAS GERAIS:ARCEBURGO
+42:BR:BRA:BRASIL:MINAS GERAIS:ARCOS
+43:BR:BRA:BRASIL:MINAS GERAIS:AREADO
+44:BR:BRA:BRASIL:MINAS GERAIS:ARGIRITA
+45:BR:BRA:BRASIL:MINAS GERAIS:ARINOS
+46:BR:BRA:BRASIL:MINAS GERAIS:ASTOLFO DUTRA
+47:BR:BRA:BRASIL:MINAS GERAIS:ATALEIA
+48:BR:BRA:BRASIL:MINAS GERAIS:AUGUSTO DE LIMA
+49:BR:BRA:BRASIL:MINAS GERAIS:BAEPENDI
+50:BR:BRA:BRASIL:MINAS GERAIS:BALDIM
+51:BR:BRA:BRASIL:MINAS GERAIS:BAMBUI
+52:BR:BRA:BRASIL:MINAS GERAIS:BANDEIRA
+53:BR:BRA:BRASIL:MINAS GERAIS:BANDIERA DO SUL
+54:BR:BRA:BRASIL:MINAS GERAIS:BARAO D'MONTE A
+55:BR:BRA:BRASIL:MINAS GERAIS:BARAO DE COCAIS
+56:BR:BRA:BRASIL:MINAS GERAIS:BARBACENA
+57:BR:BRA:BRASIL:MINAS GERAIS:BARRA LONGA
+58:BR:BRA:BRASIL:MINAS GERAIS:BARREIRO GRANDE
+59:BR:BRA:BRASIL:MINAS GERAIS:BARROSO
+60:BR:BRA:BRASIL:MINAS GERAIS:BELA VISTA D'MI
+61:BR:BRA:BRASIL:MINAS GERAIS:BELMIRO BRAGA
+62:BR:BRA:BRASIL:MINAS GERAIS:BELO HORIZONTE
+63:BR:BRA:BRASIL:MINAS GERAIS:BELO ORIENTE
+64:BR:BRA:BRASIL:MINAS GERAIS:BELO VALE
+65:BR:BRA:BRASIL:MINAS GERAIS:BERILO
+66:BR:BRA:BRASIL:MINAS GERAIS:BERTOPOLIS
+67:BR:BRA:BRASIL:MINAS GERAIS:BETIM
+68:BR:BRA:BRASIL:MINAS GERAIS:BIAS FORTES
+69:BR:BRA:BRASIL:MINAS GERAIS:BICAS
+70:BR:BRA:BRASIL:MINAS GERAIS:BIQUINHAS
+71:BR:BRA:BRASIL:MINAS GERAIS:BOA ESPERANCA
+72:BR:BRA:BRASIL:MINAS GERAIS:BOCAINA DE MINA
+73:BR:BRA:BRASIL:MINAS GERAIS:BOCAIUVA
+74:BR:BRA:BRASIL:MINAS GERAIS:BOM DESPACHO
+75:BR:BRA:BRASIL:MINAS GERAIS:BOM JARDIM D'MI
+76:BR:BRA:BRASIL:MINAS GERAIS:BOM JESUS D'AMP
+77:BR:BRA:BRASIL:MINAS GERAIS:BOM JESUS D'GAL
+78:BR:BRA:BRASIL:MINAS GERAIS:BOM JESUS DA PEN
+79:BR:BRA:BRASIL:MINAS GERAIS:BOM REPOUSO
+80:BR:BRA:BRASIL:MINAS GERAIS:BOM SUCESSO
+81:BR:BRA:BRASIL:MINAS GERAIS:BONFIM
+82:BR:BRA:BRASIL:MINAS GERAIS:BONFINOPOLIS D
+83:BR:BRA:BRASIL:MINAS GERAIS:BORDA DA MATA
+84:BR:BRA:BRASIL:MINAS GERAIS:BOTELHOS
+85:BR:BRA:BRASIL:MINAS GERAIS:BOTUMIRIM
+86:BR:BRA:BRASIL:MINAS GERAIS:BRAS PIRES
+87:BR:BRA:BRASIL:MINAS GERAIS:BRASILIA DE M.
+88:BR:BRA:BRASIL:MINAS GERAIS:BRAUNAS
+89:BR:BRA:BRASIL:MINAS GERAIS:BRAZOPOLIS
+90:BR:BRA:BRASIL:MINAS GERAIS:BRUMADINHO
+91:BR:BRA:BRASIL:MINAS GERAIS:BUENO BRANDAO
+92:BR:BRA:BRASIL:MINAS GERAIS:BUENOPOLIS
+93:BR:BRA:BRASIL:MINAS GERAIS:BURITIS
+94:BR:BRA:BRASIL:MINAS GERAIS:BURITIZEIRO
+95:BR:BRA:BRASIL:MINAS GERAIS:CABO VERDE
+96:BR:BRA:BRASIL:MINAS GERAIS:CACHOEIRA D'MIN
+97:BR:BRA:BRASIL:MINAS GERAIS:CACHOEIRA DE MAC
+98:BR:BRA:BRASIL:MINAS GERAIS:CACHOEIRA DOURA
+99:BR:BRA:BRASIL:MINAS GERAIS:CAETANOPOLIS
+100:BR:BRA:BRASIL:MINAS GERAIS:CAETE
+101:BR:BRA:BRASIL:MINAS GERAIS:CAIANA
+102:BR:BRA:BRASIL:MINAS GERAIS:CAJURI
+103:BR:BRA:BRASIL:MINAS GERAIS:CALDAS
+104:BR:BRA:BRASIL:MINAS GERAIS:CAMACHO
+105:BR:BRA:BRASIL:MINAS GERAIS:CAMANDUCAIA
+106:BR:BRA:BRASIL:MINAS GERAIS:CAMBUI
+107:BR:BRA:BRASIL:MINAS GERAIS:CAMBUQUIRA
+108:BR:BRA:BRASIL:MINAS GERAIS:CAMPANARIO
+109:BR:BRA:BRASIL:MINAS GERAIS:CAMPANHA
+110:BR:BRA:BRASIL:MINAS GERAIS:CAMPESTRE
+111:BR:BRA:BRASIL:MINAS GERAIS:CAMPINA VERDE
+112:BR:BRA:BRASIL:MINAS GERAIS:CAMPO BELO
+113:BR:BRA:BRASIL:MINAS GERAIS:CAMPO DO MEIO
+114:BR:BRA:BRASIL:MINAS GERAIS:CAMPO FLORIDO
+115:BR:BRA:BRASIL:MINAS GERAIS:CAMPOS ALTOS
+116:BR:BRA:BRASIL:MINAS GERAIS:CAMPOS GERAIS
+117:BR:BRA:BRASIL:MINAS GERAIS:CANA VERDE
+118:BR:BRA:BRASIL:MINAS GERAIS:CANAA
+119:BR:BRA:BRASIL:MINAS GERAIS:CANAPOLIS
+120:BR:BRA:BRASIL:MINAS GERAIS:CANDEIAS
+121:BR:BRA:BRASIL:MINAS GERAIS:CAPARAO
+122:BR:BRA:BRASIL:MINAS GERAIS:CAPELA NOVA
+123:BR:BRA:BRASIL:MINAS GERAIS:CAPELINHA
+124:BR:BRA:BRASIL:MINAS GERAIS:CAPETINGA
+125:BR:BRA:BRASIL:MINAS GERAIS:CAPIM BRANCO
+126:BR:BRA:BRASIL:MINAS GERAIS:CAPINOPOLIS
+127:BR:BRA:BRASIL:MINAS GERAIS:CAPITAO  ENEAS
+128:BR:BRA:BRASIL:MINAS GERAIS:CAPITOLIO
+129:BR:BRA:BRASIL:MINAS GERAIS:CAPUTIRA
+130:BR:BRA:BRASIL:MINAS GERAIS:CARAI
+131:BR:BRA:BRASIL:MINAS GERAIS:CARANAIBA
+132:BR:BRA:BRASIL:MINAS GERAIS:CARANDAI
+133:BR:BRA:BRASIL:MINAS GERAIS:CARANGOLA
+134:BR:BRA:BRASIL:MINAS GERAIS:CARATINGA
+135:BR:BRA:BRASIL:MINAS GERAIS:CARAVALHOPOLIS
+136:BR:BRA:BRASIL:MINAS GERAIS:CARBONITA
+137:BR:BRA:BRASIL:MINAS GERAIS:CAREACU
+138:BR:BRA:BRASIL:MINAS GERAIS:CARLOS CHAGAS
+139:BR:BRA:BRASIL:MINAS GERAIS:CARMESIA
+140:BR:BRA:BRASIL:MINAS GERAIS:CARMO D'CACHOEI
+141:BR:BRA:BRASIL:MINAS GERAIS:CARMO DA MATA
+142:BR:BRA:BRASIL:MINAS GERAIS:CARMO DE MINAS
+143:BR:BRA:BRASIL:MINAS GERAIS:CARMO DO CAJURU
+144:BR:BRA:BRASIL:MINAS GERAIS:CARMO DO P.
+145:BR:BRA:BRASIL:MINAS GERAIS:CARMO DO RIO C.
+146:BR:BRA:BRASIL:MINAS GERAIS:CARMOPOLIS D'MI
+147:BR:BRA:BRASIL:MINAS GERAIS:CARRANCAS
+148:BR:BRA:BRASIL:MINAS GERAIS:CARVALHOS
+149:BR:BRA:BRASIL:MINAS GERAIS:CASA GRANDE
+150:BR:BRA:BRASIL:MINAS GERAIS:CASCALHO RICO
+151:BR:BRA:BRASIL:MINAS GERAIS:CASSIA
+152:BR:BRA:BRASIL:MINAS GERAIS:CASSITERITA
+153:BR:BRA:BRASIL:MINAS GERAIS:CATAGUASES
+154:BR:BRA:BRASIL:MINAS GERAIS:CATAS ALTAS D'N
+155:BR:BRA:BRASIL:MINAS GERAIS:CAXAMBU
+156:BR:BRA:BRASIL:MINAS GERAIS:CEDRO DO ABAETE
+157:BR:BRA:BRASIL:MINAS GERAIS:CENTRAL DE M.
+158:BR:BRA:BRASIL:MINAS GERAIS:CENTRALINA
+159:BR:BRA:BRASIL:MINAS GERAIS:CHACARA
+160:BR:BRA:BRASIL:MINAS GERAIS:CHALE
+161:BR:BRA:BRASIL:MINAS GERAIS:CHAPADA DO NTE
+162:BR:BRA:BRASIL:MINAS GERAIS:CHIADOR
+163:BR:BRA:BRASIL:MINAS GERAIS:CIPOTANEA
+164:BR:BRA:BRASIL:MINAS GERAIS:CLARAVAL
+165:BR:BRA:BRASIL:MINAS GERAIS:CLARO DOS POCOE
+166:BR:BRA:BRASIL:MINAS GERAIS:CLAUDIO
+167:BR:BRA:BRASIL:MINAS GERAIS:COIMBRA
+168:BR:BRA:BRASIL:MINAS GERAIS:COLUNA
+169:BR:BRA:BRASIL:MINAS GERAIS:COMENDADOR GOME
+170:BR:BRA:BRASIL:MINAS GERAIS:COMERCINHO
+171:BR:BRA:BRASIL:MINAS GERAIS:CONC.D'MATO DEN
+172:BR:BRA:BRASIL:MINAS GERAIS:CONCE.DOS OUROS
+173:BR:BRA:BRASIL:MINAS GERAIS:CONCEI.D'IPANEM
+174:BR:BRA:BRASIL:MINAS GERAIS:CONCEICAO DA A.
+175:BR:BRA:BRASIL:MINAS GERAIS:CONCEICAO DA PED
+176:BR:BRA:BRASIL:MINAS GERAIS:CONCEICAO DAS A
+177:BR:BRA:BRASIL:MINAS GERAIS:CONCEICAO DO P.
+178:BR:BRA:BRASIL:MINAS GERAIS:CONCEICAO R.VERD
+179:BR:BRA:BRASIL:MINAS GERAIS:CONGONHAL
+180:BR:BRA:BRASIL:MINAS GERAIS:CONGONHAS
+181:BR:BRA:BRASIL:MINAS GERAIS:CONGONHAS D'NOR
+182:BR:BRA:BRASIL:MINAS GERAIS:CONQUISTA
+183:BR:BRA:BRASIL:MINAS GERAIS:CONSELH.LAFAIET
+184:BR:BRA:BRASIL:MINAS GERAIS:CONSELHEIRO PEN
+185:BR:BRA:BRASIL:MINAS GERAIS:CONSOLACAO
+186:BR:BRA:BRASIL:MINAS GERAIS:CONTAGEM
+187:BR:BRA:BRASIL:MINAS GERAIS:COQUEIRAL
+188:BR:BRA:BRASIL:MINAS GERAIS:COR.XAVIER CHAV
+189:BR:BRA:BRASIL:MINAS GERAIS:CORDISBURGO
+190:BR:BRA:BRASIL:MINAS GERAIS:CORDISLANDIA
+191:BR:BRA:BRASIL:MINAS GERAIS:CORINTO
+192:BR:BRA:BRASIL:MINAS GERAIS:COROACI
+193:BR:BRA:BRASIL:MINAS GERAIS:COROCAO DE JESU
+194:BR:BRA:BRASIL:MINAS GERAIS:COROMANDEL
+195:BR:BRA:BRASIL:MINAS GERAIS:CORONEL FABRICI
+196:BR:BRA:BRASIL:MINAS GERAIS:CORONEL MURTA
+197:BR:BRA:BRASIL:MINAS GERAIS:CORONEL PACHECO
+198:BR:BRA:BRASIL:MINAS GERAIS:CORREGO DANTA
+199:BR:BRA:BRASIL:MINAS GERAIS:CORREGO DO BOM J
+200:BR:BRA:BRASIL:MINAS GERAIS:CORREGO NOVO
+201:BR:BRA:BRASIL:MINAS GERAIS:COUTO DE M.DE M
+202:BR:BRA:BRASIL:MINAS GERAIS:CRISTAIS
+203:BR:BRA:BRASIL:MINAS GERAIS:CRISTALIA
+204:BR:BRA:BRASIL:MINAS GERAIS:CRISTIANO OTONI
+205:BR:BRA:BRASIL:MINAS GERAIS:CRISTINA
+206:BR:BRA:BRASIL:MINAS GERAIS:CRUCILANDIA
+207:BR:BRA:BRASIL:MINAS GERAIS:CRUZEIRO DA F.
+208:BR:BRA:BRASIL:MINAS GERAIS:CRUZILIA
+209:BR:BRA:BRASIL:MINAS GERAIS:CURVELO
+210:BR:BRA:BRASIL:MINAS GERAIS:DATAS
+211:BR:BRA:BRASIL:MINAS GERAIS:DELFIM MOREIRA
+212:BR:BRA:BRASIL:MINAS GERAIS:DELFINOPOLIS
+213:BR:BRA:BRASIL:MINAS GERAIS:DESCOBERTO
+214:BR:BRA:BRASIL:MINAS GERAIS:DESTE.D'ENTRE R
+215:BR:BRA:BRASIL:MINAS GERAIS:DESTERRO DO MEL
+216:BR:BRA:BRASIL:MINAS GERAIS:DIAMANTINA
+217:BR:BRA:BRASIL:MINAS GERAIS:DIOGO D'VASCONC
+218:BR:BRA:BRASIL:MINAS GERAIS:DIONISIO
+219:BR:BRA:BRASIL:MINAS GERAIS:DIVINESIA
+220:BR:BRA:BRASIL:MINAS GERAIS:DIVINO
+221:BR:BRA:BRASIL:MINAS GERAIS:DIVINO D'LARANJ
+222:BR:BRA:BRASIL:MINAS GERAIS:DIVINOLANDIA D
+223:BR:BRA:BRASIL:MINAS GERAIS:DIVINOPOLIS
+224:BR:BRA:BRASIL:MINAS GERAIS:DIVISA NOVA
+225:BR:BRA:BRASIL:MINAS GERAIS:DOM CAVATI
+226:BR:BRA:BRASIL:MINAS GERAIS:DOM JOAQUIM
+227:BR:BRA:BRASIL:MINAS GERAIS:DOM SILVERIO
+228:BR:BRA:BRASIL:MINAS GERAIS:DOM VICOSO
+229:BR:BRA:BRASIL:MINAS GERAIS:DONA EUZEBIA
+230:BR:BRA:BRASIL:MINAS GERAIS:DORES DE CAMPOS
+231:BR:BRA:BRASIL:MINAS GERAIS:DORES DE G.
+232:BR:BRA:BRASIL:MINAS GERAIS:DORES DO INDAIA
+233:BR:BRA:BRASIL:MINAS GERAIS:DORES DO TURVO
+234:BR:BRA:BRASIL:MINAS GERAIS:DORESOPOLIS
+235:BR:BRA:BRASIL:MINAS GERAIS:DOURADOQUARA
+236:BR:BRA:BRASIL:MINAS GERAIS:ELOI MENDES
+237:BR:BRA:BRASIL:MINAS GERAIS:ENGENHEIRO CALD
+238:BR:BRA:BRASIL:MINAS GERAIS:ENGENHEIRO N.
+239:BR:BRA:BRASIL:MINAS GERAIS:ENTRE RIOS DE M
+240:BR:BRA:BRASIL:MINAS GERAIS:ERVALIA
+241:BR:BRA:BRASIL:MINAS GERAIS:ESMERALDAS
+242:BR:BRA:BRASIL:MINAS GERAIS:ESP.SANTO D'DOU
+243:BR:BRA:BRASIL:MINAS GERAIS:ESPERA FELIZ
+244:BR:BRA:BRASIL:MINAS GERAIS:ESPINOSA
+245:BR:BRA:BRASIL:MINAS GERAIS:ESTIVA
+246:BR:BRA:BRASIL:MINAS GERAIS:ESTRELA DALVA
+247:BR:BRA:BRASIL:MINAS GERAIS:ESTRELA DO I.
+248:BR:BRA:BRASIL:MINAS GERAIS:ESTRELA DO SUL
+249:BR:BRA:BRASIL:MINAS GERAIS:EUGENOPOLIS
+250:BR:BRA:BRASIL:MINAS GERAIS:EWBANK D'CAMARA
+251:BR:BRA:BRASIL:MINAS GERAIS:EXTREMA
+252:BR:BRA:BRASIL:MINAS GERAIS:FAMA
+253:BR:BRA:BRASIL:MINAS GERAIS:FARIA LEMOS
+254:BR:BRA:BRASIL:MINAS GERAIS:FELICIO DOS S.
+255:BR:BRA:BRASIL:MINAS GERAIS:FELISBERTO C.
+256:BR:BRA:BRASIL:MINAS GERAIS:FELISBURGO
+257:BR:BRA:BRASIL:MINAS GERAIS:FELIXLANDIA
+258:BR:BRA:BRASIL:MINAS GERAIS:FERNANDES TOURI
+259:BR:BRA:BRASIL:MINAS GERAIS:FERROS
+260:BR:BRA:BRASIL:MINAS GERAIS:FLORESTAL
+261:BR:BRA:BRASIL:MINAS GERAIS:FORMIGA
+262:BR:BRA:BRASIL:MINAS GERAIS:FORMOSO
+263:BR:BRA:BRASIL:MINAS GERAIS:FORTALEZA DE M.
+264:BR:BRA:BRASIL:MINAS GERAIS:FORTUNA D'MINAS
+265:BR:BRA:BRASIL:MINAS GERAIS:FRANCISCO BADAR
+266:BR:BRA:BRASIL:MINAS GERAIS:FRANCISCO DUMON
+267:BR:BRA:BRASIL:MINAS GERAIS:FRANCISCO SA
+268:BR:BRA:BRASIL:MINAS GERAIS:FREI GASPAR
+269:BR:BRA:BRASIL:MINAS GERAIS:FREI INOCENCIO
+270:BR:BRA:BRASIL:MINAS GERAIS:FRONTEIRA
+271:BR:BRA:BRASIL:MINAS GERAIS:FRUTAL
+272:BR:BRA:BRASIL:MINAS GERAIS:FUNILANDIA
+273:BR:BRA:BRASIL:MINAS GERAIS:GALILEIA
+274:BR:BRA:BRASIL:MINAS GERAIS:GONCALVES
+275:BR:BRA:BRASIL:MINAS GERAIS:GONZAGA
+276:BR:BRA:BRASIL:MINAS GERAIS:GOUVEA
+277:BR:BRA:BRASIL:MINAS GERAIS:GOVERNADOR V.
+278:BR:BRA:BRASIL:MINAS GERAIS:GRAO MOGOL
+279:BR:BRA:BRASIL:MINAS GERAIS:GRUPIARA
+280:BR:BRA:BRASIL:MINAS GERAIS:GUANHAES
+281:BR:BRA:BRASIL:MINAS GERAIS:GUAPE
+282:BR:BRA:BRASIL:MINAS GERAIS:GUARACIABA
+283:BR:BRA:BRASIL:MINAS GERAIS:GUARANESIA
+284:BR:BRA:BRASIL:MINAS GERAIS:GUARANI
+285:BR:BRA:BRASIL:MINAS GERAIS:GUARARA
+286:BR:BRA:BRASIL:MINAS GERAIS:GUARDA-MOR
+287:BR:BRA:BRASIL:MINAS GERAIS:GUAXUPE
+288:BR:BRA:BRASIL:MINAS GERAIS:GUIDOVAL
+289:BR:BRA:BRASIL:MINAS GERAIS:GUIMARANIA
+290:BR:BRA:BRASIL:MINAS GERAIS:GUIRICEMA
+291:BR:BRA:BRASIL:MINAS GERAIS:GURINHATA
+292:BR:BRA:BRASIL:MINAS GERAIS:HELIODORA
+293:BR:BRA:BRASIL:MINAS GERAIS:IAPU
+294:BR:BRA:BRASIL:MINAS GERAIS:IBERTIOGA
+295:BR:BRA:BRASIL:MINAS GERAIS:IBIA
+296:BR:BRA:BRASIL:MINAS GERAIS:IBIAI
+297:BR:BRA:BRASIL:MINAS GERAIS:IBIRACI
+298:BR:BRA:BRASIL:MINAS GERAIS:IBIRITE
+299:BR:BRA:BRASIL:MINAS GERAIS:IBITIURA DE MINA
+300:BR:BRA:BRASIL:MINAS GERAIS:IBITURUNA
+301:BR:BRA:BRASIL:MINAS GERAIS:IGARAPE
+302:BR:BRA:BRASIL:MINAS GERAIS:IGARATINGA
+303:BR:BRA:BRASIL:MINAS GERAIS:IGUATAMA
+304:BR:BRA:BRASIL:MINAS GERAIS:IJACI
+305:BR:BRA:BRASIL:MINAS GERAIS:ILICINEA
+306:BR:BRA:BRASIL:MINAS GERAIS:INCONFIDENTES
+307:BR:BRA:BRASIL:MINAS GERAIS:INDIANOPOLIS
+308:BR:BRA:BRASIL:MINAS GERAIS:INGAI
+309:BR:BRA:BRASIL:MINAS GERAIS:INHAPIM
+310:BR:BRA:BRASIL:MINAS GERAIS:INHAUMAS
+311:BR:BRA:BRASIL:MINAS GERAIS:INIMUTABA
+312:BR:BRA:BRASIL:MINAS GERAIS:IPANEMA
+313:BR:BRA:BRASIL:MINAS GERAIS:IPATINGA
+314:BR:BRA:BRASIL:MINAS GERAIS:IPIACU
+315:BR:BRA:BRASIL:MINAS GERAIS:IPUIUNA
+316:BR:BRA:BRASIL:MINAS GERAIS:IRAI DE MINAS
+317:BR:BRA:BRASIL:MINAS GERAIS:ITABIRA
+318:BR:BRA:BRASIL:MINAS GERAIS:ITABIRINHA DE M
+319:BR:BRA:BRASIL:MINAS GERAIS:ITABIRITO
+320:BR:BRA:BRASIL:MINAS GERAIS:ITACAMBIRA
+321:BR:BRA:BRASIL:MINAS GERAIS:ITACARAMBI
+322:BR:BRA:BRASIL:MINAS GERAIS:ITAGUARA
+323:BR:BRA:BRASIL:MINAS GERAIS:ITAIPE
+324:BR:BRA:BRASIL:MINAS GERAIS:ITAJUBA
+325:BR:BRA:BRASIL:MINAS GERAIS:ITAMARANDIBA
+326:BR:BRA:BRASIL:MINAS GERAIS:ITAMARATI D'MIN
+327:BR:BRA:BRASIL:MINAS GERAIS:ITAMBACURI
+328:BR:BRA:BRASIL:MINAS GERAIS:ITAMBE D'MATO D
+329:BR:BRA:BRASIL:MINAS GERAIS:ITAMOGI
+330:BR:BRA:BRASIL:MINAS GERAIS:ITAMONTE
+331:BR:BRA:BRASIL:MINAS GERAIS:ITANHANDU
+332:BR:BRA:BRASIL:MINAS GERAIS:ITANHOMI
+333:BR:BRA:BRASIL:MINAS GERAIS:ITAOBIM
+334:BR:BRA:BRASIL:MINAS GERAIS:ITAPAGIPE
+335:BR:BRA:BRASIL:MINAS GERAIS:ITAPECERICA
+336:BR:BRA:BRASIL:MINAS GERAIS:ITAPEVA
+337:BR:BRA:BRASIL:MINAS GERAIS:ITATIAIUCU
+338:BR:BRA:BRASIL:MINAS GERAIS:ITAUNA
+339:BR:BRA:BRASIL:MINAS GERAIS:ITAVERAVA
+340:BR:BRA:BRASIL:MINAS GERAIS:ITINGA
+341:BR:BRA:BRASIL:MINAS GERAIS:ITUETA
+342:BR:BRA:BRASIL:MINAS GERAIS:ITUIUTABA
+343:BR:BRA:BRASIL:MINAS GERAIS:ITUMIRIM
+344:BR:BRA:BRASIL:MINAS GERAIS:ITURAMA
+345:BR:BRA:BRASIL:MINAS GERAIS:ITUTINGA
+346:BR:BRA:BRASIL:MINAS GERAIS:JABOTICATUBAS
+347:BR:BRA:BRASIL:MINAS GERAIS:JACINTO
+348:BR:BRA:BRASIL:MINAS GERAIS:JACUI
+349:BR:BRA:BRASIL:MINAS GERAIS:JACUTINGA
+350:BR:BRA:BRASIL:MINAS GERAIS:JAGUARACU
+351:BR:BRA:BRASIL:MINAS GERAIS:JANAUBA
+352:BR:BRA:BRASIL:MINAS GERAIS:JANUARIA
+353:BR:BRA:BRASIL:MINAS GERAIS:JAPARAIBA
+354:BR:BRA:BRASIL:MINAS GERAIS:JECEABA
+355:BR:BRA:BRASIL:MINAS GERAIS:JEQUERI
+356:BR:BRA:BRASIL:MINAS GERAIS:JEQUITAI
+357:BR:BRA:BRASIL:MINAS GERAIS:JEQUITIBA
+358:BR:BRA:BRASIL:MINAS GERAIS:JEQUITINHONHA
+359:BR:BRA:BRASIL:MINAS GERAIS:JESUANIA
+360:BR:BRA:BRASIL:MINAS GERAIS:JOAIMA
+361:BR:BRA:BRASIL:MINAS GERAIS:JOANESIA
+362:BR:BRA:BRASIL:MINAS GERAIS:JOAO MONLEVADE
+363:BR:BRA:BRASIL:MINAS GERAIS:JOAO PINHEIRO
+364:BR:BRA:BRASIL:MINAS GERAIS:JOAQUIM FELICIO
+365:BR:BRA:BRASIL:MINAS GERAIS:JORDANIA
+366:BR:BRA:BRASIL:MINAS GERAIS:JOSE DE MELO
+367:BR:BRA:BRASIL:MINAS GERAIS:JUIZ DE FORA
+368:BR:BRA:BRASIL:MINAS GERAIS:JURAMENTO
+369:BR:BRA:BRASIL:MINAS GERAIS:JURUAIA
+370:BR:BRA:BRASIL:MINAS GERAIS:LADAINHA
+371:BR:BRA:BRASIL:MINAS GERAIS:LAGAMAR
+372:BR:BRA:BRASIL:MINAS GERAIS:LAGAO DOS PATOS
+373:BR:BRA:BRASIL:MINAS GERAIS:LAGO
+374:BR:BRA:BRASIL:MINAS GERAIS:LAGOA DA PRATA
+375:BR:BRA:BRASIL:MINAS GERAIS:LAGOA DOURADA
+376:BR:BRA:BRASIL:MINAS GERAIS:LAGOA FORMOSA
+377:BR:BRA:BRASIL:MINAS GERAIS:LAGOA SANTA
+378:BR:BRA:BRASIL:MINAS GERAIS:LAJINHA
+379:BR:BRA:BRASIL:MINAS GERAIS:LAMBARI
+380:BR:BRA:BRASIL:MINAS GERAIS:LAMIM
+381:BR:BRA:BRASIL:MINAS GERAIS:LARANJAL
+382:BR:BRA:BRASIL:MINAS GERAIS:LASSANCE
+383:BR:BRA:BRASIL:MINAS GERAIS:LAVRAS
+384:BR:BRA:BRASIL:MINAS GERAIS:LEANDRO FERREIR
+385:BR:BRA:BRASIL:MINAS GERAIS:LEOPOLDINA
+386:BR:BRA:BRASIL:MINAS GERAIS:LIBERDADE
+387:BR:BRA:BRASIL:MINAS GERAIS:LIMA DUARTE
+388:BR:BRA:BRASIL:MINAS GERAIS:LUMINARIAS
+389:BR:BRA:BRASIL:MINAS GERAIS:LUZ
+390:BR:BRA:BRASIL:MINAS GERAIS:MACHACALIS
+391:BR:BRA:BRASIL:MINAS GERAIS:MACHADO
+392:BR:BRA:BRASIL:MINAS GERAIS:MADRE D'DEUS D'
+393:BR:BRA:BRASIL:MINAS GERAIS:MALACACHETA
+394:BR:BRA:BRASIL:MINAS GERAIS:MANGA
+395:BR:BRA:BRASIL:MINAS GERAIS:MANHUACU
+396:BR:BRA:BRASIL:MINAS GERAIS:MANHUMIRIM
+397:BR:BRA:BRASIL:MINAS GERAIS:MANTENA
+398:BR:BRA:BRASIL:MINAS GERAIS:MAR DE ESPANHA
+399:BR:BRA:BRASIL:MINAS GERAIS:MARAVILHAS
+400:BR:BRA:BRASIL:MINAS GERAIS:MARIA DA FE
+401:BR:BRA:BRASIL:MINAS GERAIS:MARIANA
+402:BR:BRA:BRASIL:MINAS GERAIS:MARILAC
+403:BR:BRA:BRASIL:MINAS GERAIS:MARIPA DE MINAS
+404:BR:BRA:BRASIL:MINAS GERAIS:MARLIERIA
+405:BR:BRA:BRASIL:MINAS GERAIS:MARMELOPOLIS
+406:BR:BRA:BRASIL:MINAS GERAIS:MARTINHO CAMPOS
+407:BR:BRA:BRASIL:MINAS GERAIS:MATERLANDIA
+408:BR:BRA:BRASIL:MINAS GERAIS:MATEUS LEME
+409:BR:BRA:BRASIL:MINAS GERAIS:MATIAS BARBOSA
+410:BR:BRA:BRASIL:MINAS GERAIS:MATIPO
+411:BR:BRA:BRASIL:MINAS GERAIS:MATO VERDE
+412:BR:BRA:BRASIL:MINAS GERAIS:MATOZINHOS
+413:BR:BRA:BRASIL:MINAS GERAIS:MEDEIROS
+414:BR:BRA:BRASIL:MINAS GERAIS:MEDINA
+415:BR:BRA:BRASIL:MINAS GERAIS:MENDES PIMENTEL
+416:BR:BRA:BRASIL:MINAS GERAIS:MERCES
+417:BR:BRA:BRASIL:MINAS GERAIS:MESQUITA
+418:BR:BRA:BRASIL:MINAS GERAIS:MINAS NOVAS
+419:BR:BRA:BRASIL:MINAS GERAIS:MINDURI
+420:BR:BRA:BRASIL:MINAS GERAIS:MIRABELA
+421:BR:BRA:BRASIL:MINAS GERAIS:MIRADOURO
+422:BR:BRA:BRASIL:MINAS GERAIS:MIRAI
+423:BR:BRA:BRASIL:MINAS GERAIS:MOEDA
+424:BR:BRA:BRASIL:MINAS GERAIS:MOEMA
+425:BR:BRA:BRASIL:MINAS GERAIS:MONJOLOS
+426:BR:BRA:BRASIL:MINAS GERAIS:MONSENHOR PAULO
+427:BR:BRA:BRASIL:MINAS GERAIS:MONTALVANIA
+428:BR:BRA:BRASIL:MINAS GERAIS:MONTE ALEGRE D
+429:BR:BRA:BRASIL:MINAS GERAIS:MONTE AZUL
+430:BR:BRA:BRASIL:MINAS GERAIS:MONTE BELO
+431:BR:BRA:BRASIL:MINAS GERAIS:MONTE CARMELO
+432:BR:BRA:BRASIL:MINAS GERAIS:MONTE SANO DE M
+433:BR:BRA:BRASIL:MINAS GERAIS:MONTE SIAO
+434:BR:BRA:BRASIL:MINAS GERAIS:MONTES CLAROS
+435:BR:BRA:BRASIL:MINAS GERAIS:MORADA NOVA MINA
+436:BR:BRA:BRASIL:MINAS GERAIS:MORRO DE GRACA
+437:BR:BRA:BRASIL:MINAS GERAIS:MORRO DO PILAR
+438:BR:BRA:BRASIL:MINAS GERAIS:MUNHOZ
+439:BR:BRA:BRASIL:MINAS GERAIS:MURIAE
+440:BR:BRA:BRASIL:MINAS GERAIS:MUTUM
+441:BR:BRA:BRASIL:MINAS GERAIS:MUTUTINA
+442:BR:BRA:BRASIL:MINAS GERAIS:MUZAMBINHO
+443:BR:BRA:BRASIL:MINAS GERAIS:NACIP RAYDAN
+444:BR:BRA:BRASIL:MINAS GERAIS:NANUQUE
+445:BR:BRA:BRASIL:MINAS GERAIS:NATERCIA
+446:BR:BRA:BRASIL:MINAS GERAIS:NAZARENO
+447:BR:BRA:BRASIL:MINAS GERAIS:NEPOMUCENO
+448:BR:BRA:BRASIL:MINAS GERAIS:NOVA ERA
+449:BR:BRA:BRASIL:MINAS GERAIS:NOVA LIMA
+450:BR:BRA:BRASIL:MINAS GERAIS:NOVA MODICA
+451:BR:BRA:BRASIL:MINAS GERAIS:NOVA PONTE
+452:BR:BRA:BRASIL:MINAS GERAIS:NOVA RESENDE
+453:BR:BRA:BRASIL:MINAS GERAIS:NOVA SERRANA
+454:BR:BRA:BRASIL:MINAS GERAIS:NOVO CRUZEIRO
+455:BR:BRA:BRASIL:MINAS GERAIS:O.VERDES D MINA
+456:BR:BRA:BRASIL:MINAS GERAIS:OLARIA
+457:BR:BRA:BRASIL:MINAS GERAIS:OLIMPO NORONHA
+458:BR:BRA:BRASIL:MINAS GERAIS:OLIVEIRA
+459:BR:BRA:BRASIL:MINAS GERAIS:OLIVEIRA FORTES
+460:BR:BRA:BRASIL:MINAS GERAIS:ONCA DE PITANGU
+461:BR:BRA:BRASIL:MINAS GERAIS:OURO BRANCO
+462:BR:BRA:BRASIL:MINAS GERAIS:OURO FINO
+463:BR:BRA:BRASIL:MINAS GERAIS:OURO PRETO
+464:BR:BRA:BRASIL:MINAS GERAIS:PADRE PARAISO
+465:BR:BRA:BRASIL:MINAS GERAIS:PAINEIRAS
+466:BR:BRA:BRASIL:MINAS GERAIS:PAINS
+467:BR:BRA:BRASIL:MINAS GERAIS:PAIVA
+468:BR:BRA:BRASIL:MINAS GERAIS:PALMA
+469:BR:BRA:BRASIL:MINAS GERAIS:PAMPA
+470:BR:BRA:BRASIL:MINAS GERAIS:PAPAGAIOS
+471:BR:BRA:BRASIL:MINAS GERAIS:PARA DE MINAS
+472:BR:BRA:BRASIL:MINAS GERAIS:PARACATU
+473:BR:BRA:BRASIL:MINAS GERAIS:PARAGUACU
+474:BR:BRA:BRASIL:MINAS GERAIS:PARAISOPOLIS
+475:BR:BRA:BRASIL:MINAS GERAIS:PARAOPEBA
+476:BR:BRA:BRASIL:MINAS GERAIS:PASSA QUATRO
+477:BR:BRA:BRASIL:MINAS GERAIS:PASSA TEMPO
+478:BR:BRA:BRASIL:MINAS GERAIS:PASSA VINTE
+479:BR:BRA:BRASIL:MINAS GERAIS:PASSABEM
+480:BR:BRA:BRASIL:MINAS GERAIS:PASSOS
+481:BR:BRA:BRASIL:MINAS GERAIS:PATOS DE MINAS
+482:BR:BRA:BRASIL:MINAS GERAIS:PATROCINIO
+483:BR:BRA:BRASIL:MINAS GERAIS:PATROCINIO D'MU
+484:BR:BRA:BRASIL:MINAS GERAIS:PAULA CANDIDO
+485:BR:BRA:BRASIL:MINAS GERAIS:PAULISTA
+486:BR:BRA:BRASIL:MINAS GERAIS:PAVAO
+487:BR:BRA:BRASIL:MINAS GERAIS:PECANHA
+488:BR:BRA:BRASIL:MINAS GERAIS:PEDRA AZUL
+489:BR:BRA:BRASIL:MINAS GERAIS:PEDRA DO ANTA
+490:BR:BRA:BRASIL:MINAS GERAIS:PEDRA DO INDAIA
+491:BR:BRA:BRASIL:MINAS GERAIS:PEDRA DOURADA
+492:BR:BRA:BRASIL:MINAS GERAIS:PEDRALVA
+493:BR:BRA:BRASIL:MINAS GERAIS:PEDRINOPOLIS
+494:BR:BRA:BRASIL:MINAS GERAIS:PEDRO LEOPOLDO
+495:BR:BRA:BRASIL:MINAS GERAIS:PEDRO TEIXEIRA
+496:BR:BRA:BRASIL:MINAS GERAIS:PEQUERI
+497:BR:BRA:BRASIL:MINAS GERAIS:PEQUI
+498:BR:BRA:BRASIL:MINAS GERAIS:PERDIGAO
+499:BR:BRA:BRASIL:MINAS GERAIS:PERDIZES
+500:BR:BRA:BRASIL:MINAS GERAIS:PERDOES
+501:BR:BRA:BRASIL:MINAS GERAIS:PESCADOR
+502:BR:BRA:BRASIL:MINAS GERAIS:PIAU
+503:BR:BRA:BRASIL:MINAS GERAIS:PIEDAD.D'PONTE
+504:BR:BRA:BRASIL:MINAS GERAIS:PIEDADE D'GERAI
+505:BR:BRA:BRASIL:MINAS GERAIS:PIEDADE D'RIO G
+506:BR:BRA:BRASIL:MINAS GERAIS:PIMENTA
+507:BR:BRA:BRASIL:MINAS GERAIS:PIRACEMA
+508:BR:BRA:BRASIL:MINAS GERAIS:PIRAJUBA
+509:BR:BRA:BRASIL:MINAS GERAIS:PIRANGA
+510:BR:BRA:BRASIL:MINAS GERAIS:PIRANGUCU
+511:BR:BRA:BRASIL:MINAS GERAIS:PIRANGUINHO
+512:BR:BRA:BRASIL:MINAS GERAIS:PIRAPETINGA
+513:BR:BRA:BRASIL:MINAS GERAIS:PIRAPORA
+514:BR:BRA:BRASIL:MINAS GERAIS:PIRAUBA
+515:BR:BRA:BRASIL:MINAS GERAIS:PITANGUI
+516:BR:BRA:BRASIL:MINAS GERAIS:PIUI
+517:BR:BRA:BRASIL:MINAS GERAIS:PLANURA
+518:BR:BRA:BRASIL:MINAS GERAIS:POCO FUNDO
+519:BR:BRA:BRASIL:MINAS GERAIS:POCOS DE CALDAS
+520:BR:BRA:BRASIL:MINAS GERAIS:POCRANE
+521:BR:BRA:BRASIL:MINAS GERAIS:POMPEU
+522:BR:BRA:BRASIL:MINAS GERAIS:PONTE NOVA
+523:BR:BRA:BRASIL:MINAS GERAIS:PORTEIRINHA
+524:BR:BRA:BRASIL:MINAS GERAIS:PORTO FIRME
+525:BR:BRA:BRASIL:MINAS GERAIS:POTE
+526:BR:BRA:BRASIL:MINAS GERAIS:POUSO ALEGRE
+527:BR:BRA:BRASIL:MINAS GERAIS:POUSO ALTO
+528:BR:BRA:BRASIL:MINAS GERAIS:PRADOS
+529:BR:BRA:BRASIL:MINAS GERAIS:PRATA
+530:BR:BRA:BRASIL:MINAS GERAIS:PRATAPOLIS
+531:BR:BRA:BRASIL:MINAS GERAIS:PRATINHA
+532:BR:BRA:BRASIL:MINAS GERAIS:PRES.BERNARDES
+533:BR:BRA:BRASIL:MINAS GERAIS:PRESID OLEGARIO
+534:BR:BRA:BRASIL:MINAS GERAIS:PRESIDENTE J.
+535:BR:BRA:BRASIL:MINAS GERAIS:PRESIDENTE K.
+536:BR:BRA:BRASIL:MINAS GERAIS:PRESIDENTE SOAR
+537:BR:BRA:BRASIL:MINAS GERAIS:PRUDENTE D'MORA
+538:BR:BRA:BRASIL:MINAS GERAIS:QUARTEL GERAL
+539:BR:BRA:BRASIL:MINAS GERAIS:QUELUZITA
+540:BR:BRA:BRASIL:MINAS GERAIS:RAPOSOS
+541:BR:BRA:BRASIL:MINAS GERAIS:RAUL SOARES
+542:BR:BRA:BRASIL:MINAS GERAIS:RECREIO
+543:BR:BRA:BRASIL:MINAS GERAIS:RESENDE COSTA
+544:BR:BRA:BRASIL:MINAS GERAIS:RESPLENDOR
+545:BR:BRA:BRASIL:MINAS GERAIS:RESSAQUINHA
+546:BR:BRA:BRASIL:MINAS GERAIS:RIACHO DOS MACA
+547:BR:BRA:BRASIL:MINAS GERAIS:RIBEIRAO D'NEVE
+548:BR:BRA:BRASIL:MINAS GERAIS:RIBEIRAO VERMEL
+549:BR:BRA:BRASIL:MINAS GERAIS:RIO ACIMA
+550:BR:BRA:BRASIL:MINAS GERAIS:RIO CASCA
+551:BR:BRA:BRASIL:MINAS GERAIS:RIO DO PRADO
+552:BR:BRA:BRASIL:MINAS GERAIS:RIO DOCE
+553:BR:BRA:BRASIL:MINAS GERAIS:RIO ESPERA
+554:BR:BRA:BRASIL:MINAS GERAIS:RIO MANSO
+555:BR:BRA:BRASIL:MINAS GERAIS:RIO NOVO
+556:BR:BRA:BRASIL:MINAS GERAIS:RIO PARANAIBA
+557:BR:BRA:BRASIL:MINAS GERAIS:RIO PARDO D'MIN
+558:BR:BRA:BRASIL:MINAS GERAIS:RIO PIRACICABA
+559:BR:BRA:BRASIL:MINAS GERAIS:RIO POMBA
+560:BR:BRA:BRASIL:MINAS GERAIS:RIO PRETO
+561:BR:BRA:BRASIL:MINAS GERAIS:RIO VERMELHO
+562:BR:BRA:BRASIL:MINAS GERAIS:RITAPOLIS
+563:BR:BRA:BRASIL:MINAS GERAIS:ROCHEDO DE MINA
+564:BR:BRA:BRASIL:MINAS GERAIS:RODEIRO
+565:BR:BRA:BRASIL:MINAS GERAIS:ROMARIA
+566:BR:BRA:BRASIL:MINAS GERAIS:RUBELITA
+567:BR:BRA:BRASIL:MINAS GERAIS:RUBIM
+568:BR:BRA:BRASIL:MINAS GERAIS:S.ANT.D'RIO ABA
+569:BR:BRA:BRASIL:MINAS GERAIS:S.ANTON.D'AMPAR
+570:BR:BRA:BRASIL:MINAS GERAIS:S.ANTON.D'AVENT
+571:BR:BRA:BRASIL:MINAS GERAIS:S.ANTON.D'GRAMA
+572:BR:BRA:BRASIL:MINAS GERAIS:S.BARBARA D'TUG
+573:BR:BRA:BRASIL:MINAS GERAIS:S.BENTO ABADE
+574:BR:BRA:BRASIL:MINAS GERAIS:S.BRAS D'SUACUI
+575:BR:BRA:BRASIL:MINAS GERAIS:S.CRUZ D'ESCALV
+576:BR:BRA:BRASIL:MINAS GERAIS:S.DOMINGOS D'PR
+577:BR:BRA:BRASIL:MINAS GERAIS:S.FCO.D'OLIVEIR
+578:BR:BRA:BRASIL:MINAS GERAIS:S.GONC.D'RIO AB
+579:BR:BRA:BRASIL:MINAS GERAIS:S.GONC.DO SAPUC
+580:BR:BRA:BRASIL:MINAS GERAIS:S.GONCALO D'PAR
+581:BR:BRA:BRASIL:MINAS GERAIS:S.JOAO D'ORIENT
+582:BR:BRA:BRASIL:MINAS GERAIS:S.JOAO D'PARAIS
+583:BR:BRA:BRASIL:MINAS GERAIS:S.JOAO NEPOMUCE
+584:BR:BRA:BRASIL:MINAS GERAIS:S.JOSE D'GOIABA
+585:BR:BRA:BRASIL:MINAS GERAIS:S.JOSE D'VARGIN
+586:BR:BRA:BRASIL:MINAS GERAIS:S.JOSE DO ALEGR
+587:BR:BRA:BRASIL:MINAS GERAIS:S.JOSE DO MANTI
+588:BR:BRA:BRASIL:MINAS GERAIS:S.MARIA D'ITABI
+589:BR:BRA:BRASIL:MINAS GERAIS:S.MIGUEL DO ANT
+590:BR:BRA:BRASIL:MINAS GERAIS:S.PEDRO D'FERRO
+591:BR:BRA:BRASIL:MINAS GERAIS:S.RITA D'IBITIP
+592:BR:BRA:BRASIL:MINAS GERAIS:S.RITA D'ITUETO
+593:BR:BRA:BRASIL:MINAS GERAIS:S.RITA D'JACUTI
+594:BR:BRA:BRASIL:MINAS GERAIS:S.RITA D'SAPUCA
+595:BR:BRA:BRASIL:MINAS GERAIS:S.SEBAS.D'BELA
+596:BR:BRA:BRASIL:MINAS GERAIS:S.SEBAS.D'RIO P
+597:BR:BRA:BRASIL:MINAS GERAIS:S.SEBAST.D'OEST
+598:BR:BRA:BRASIL:MINAS GERAIS:S.TOME DAS LETR
+599:BR:BRA:BRASIL:MINAS GERAIS:S.VICENTE D'MIN
+600:BR:BRA:BRASIL:MINAS GERAIS:SABARA
+601:BR:BRA:BRASIL:MINAS GERAIS:SABINOPOLIS
+602:BR:BRA:BRASIL:MINAS GERAIS:SACRAMENTO
+603:BR:BRA:BRASIL:MINAS GERAIS:SALINAS
+604:BR:BRA:BRASIL:MINAS GERAIS:SALTO DA DIVISA
+605:BR:BRA:BRASIL:MINAS GERAIS:SAN ANTONIO DO
+606:BR:BRA:BRASIL:MINAS GERAIS:SANTA BARBARA
+607:BR:BRA:BRASIL:MINAS GERAIS:SANTA JULIANA
+608:BR:BRA:BRASIL:MINAS GERAIS:SANTA LUZIA
+609:BR:BRA:BRASIL:MINAS GERAIS:SANTA MARGARIDA
+610:BR:BRA:BRASIL:MINAS GERAIS:SANTA MARIA DO
+611:BR:BRA:BRASIL:MINAS GERAIS:SANTA RITA DE C
+612:BR:BRA:BRASIL:MINAS GERAIS:SANTA VICTORIA
+613:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'CATAG
+614:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'DESER
+615:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'GARAM
+616:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'JACAR
+617:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'MANHU
+618:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'MONTE
+619:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'PIRAP
+620:BR:BRA:BRASIL:MINAS GERAIS:SANTANA D'RIACH
+621:BR:BRA:BRASIL:MINAS GERAIS:SANTANA DA V.
+622:BR:BRA:BRASIL:MINAS GERAIS:SANTO ANT.DO J.
+623:BR:BRA:BRASIL:MINAS GERAIS:SANTO HIPOLITO
+624:BR:BRA:BRASIL:MINAS GERAIS:SANTOS DUMONT
+625:BR:BRA:BRASIL:MINAS GERAIS:SAO FCO DE S.
+626:BR:BRA:BRASIL:MINAS GERAIS:SAO FRANCISCO
+627:BR:BRA:BRASIL:MINAS GERAIS:SAO FRANCISCO DO
+628:BR:BRA:BRASIL:MINAS GERAIS:SAO GERALDO
+629:BR:BRA:BRASIL:MINAS GERAIS:SAO GERALDO DA P
+630:BR:BRA:BRASIL:MINAS GERAIS:SAO GONSALO ABAE
+631:BR:BRA:BRASIL:MINAS GERAIS:SAO GOTARDO
+632:BR:BRA:BRASIL:MINAS GERAIS:SAO J DA PONTE
+633:BR:BRA:BRASIL:MINAS GERAIS:SAO J.DO DIVINO
+634:BR:BRA:BRASIL:MINAS GERAIS:SAO JOAO BATISTA
+635:BR:BRA:BRASIL:MINAS GERAIS:SAO JOAO DA MATA
+636:BR:BRA:BRASIL:MINAS GERAIS:SAO JOAO DEL RE
+637:BR:BRA:BRASIL:MINAS GERAIS:SAO JOAO E.
+638:BR:BRA:BRASIL:MINAS GERAIS:SAO JOSE DO J.
+639:BR:BRA:BRASIL:MINAS GERAIS:SAO JOSE SAFIRA
+640:BR:BRA:BRASIL:MINAS GERAIS:SAO LOURENCO
+641:BR:BRA:BRASIL:MINAS GERAIS:SAO PEDRO DA U.
+642:BR:BRA:BRASIL:MINAS GERAIS:SAO PEDRO DO S.
+643:BR:BRA:BRASIL:MINAS GERAIS:SAO R. DE MINAS
+644:BR:BRA:BRASIL:MINAS GERAIS:SAO ROMAO
+645:BR:BRA:BRASIL:MINAS GERAIS:SAO SEBASTIAO DO
+646:BR:BRA:BRASIL:MINAS GERAIS:SAO SEBASTIAO M
+647:BR:BRA:BRASIL:MINAS GERAIS:SAO TIAGO
+648:BR:BRA:BRASIL:MINAS GERAIS:SAO TOMAS DE AQU
+649:BR:BRA:BRASIL:MINAS GERAIS:SAPUCAI-MIRIM
+650:BR:BRA:BRASIL:MINAS GERAIS:SARDOA
+651:BR:BRA:BRASIL:MINAS GERAIS:SEN. MODESTINO
+652:BR:BRA:BRASIL:MINAS GERAIS:SEN.JOSE BENTO
+653:BR:BRA:BRASIL:MINAS GERAIS:SENADOR CORTES
+654:BR:BRA:BRASIL:MINAS GERAIS:SENADOR FIRMINO
+655:BR:BRA:BRASIL:MINAS GERAIS:SENHORA DO PORT
+656:BR:BRA:BRASIL:MINAS GERAIS:SERICITA
+657:BR:BRA:BRASIL:MINAS GERAIS:SERITINGA
+658:BR:BRA:BRASIL:MINAS GERAIS:SERRA AZUL DE M
+659:BR:BRA:BRASIL:MINAS GERAIS:SERRA D AIMORES
+660:BR:BRA:BRASIL:MINAS GERAIS:SERRA DA SAUDAD
+661:BR:BRA:BRASIL:MINAS GERAIS:SERRA DO SALITR
+662:BR:BRA:BRASIL:MINAS GERAIS:SERRANIA
+663:BR:BRA:BRASIL:MINAS GERAIS:SERRANOS
+664:BR:BRA:BRASIL:MINAS GERAIS:SERRO
+665:BR:BRA:BRASIL:MINAS GERAIS:SETE LAGOAS
+666:BR:BRA:BRASIL:MINAS GERAIS:SILVEIRANIA
+667:BR:BRA:BRASIL:MINAS GERAIS:SILVIANOPOLIS
+668:BR:BRA:BRASIL:MINAS GERAIS:SIMAO PEREIRA
+669:BR:BRA:BRASIL:MINAS GERAIS:SIMONESIA
+670:BR:BRA:BRASIL:MINAS GERAIS:SOBRALIA
+671:BR:BRA:BRASIL:MINAS GERAIS:SOLEDADE D'MINA
+672:BR:BRA:BRASIL:MINAS GERAIS:SRA.DE OLIVEIRA
+673:BR:BRA:BRASIL:MINAS GERAIS:SRA.DOS REMEDIO
+674:BR:BRA:BRASIL:MINAS GERAIS:STA MARIA D.SU.
+675:BR:BRA:BRASIL:MINAS GERAIS:STA ROSA DA SERR
+676:BR:BRA:BRASIL:MINAS GERAIS:STA.EFIGENIA DE
+677:BR:BRA:BRASIL:MINAS GERAIS:STA.FE DE MINAS
+678:BR:BRA:BRASIL:MINAS GERAIS:STO ANTONIO DO M
+679:BR:BRA:BRASIL:MINAS GERAIS:TABULEIRO
+680:BR:BRA:BRASIL:MINAS GERAIS:TAIOBEIRAS
+681:BR:BRA:BRASIL:MINAS GERAIS:TAPACIGUARA
+682:BR:BRA:BRASIL:MINAS GERAIS:TAPIRA
+683:BR:BRA:BRASIL:MINAS GERAIS:TAPIRAI
+684:BR:BRA:BRASIL:MINAS GERAIS:TAQUARACU MINAS
+685:BR:BRA:BRASIL:MINAS GERAIS:TARUMIRIM
+686:BR:BRA:BRASIL:MINAS GERAIS:TEIXEIRAS
+687:BR:BRA:BRASIL:MINAS GERAIS:TEOFILO OTONI
+688:BR:BRA:BRASIL:MINAS GERAIS:TIMOTEO
+689:BR:BRA:BRASIL:MINAS GERAIS:TIRADENTES
+690:BR:BRA:BRASIL:MINAS GERAIS:TIROS
+691:BR:BRA:BRASIL:MINAS GERAIS:TOCANTINS
+692:BR:BRA:BRASIL:MINAS GERAIS:TOLEDO
+693:BR:BRA:BRASIL:MINAS GERAIS:TOMBOS
+694:BR:BRA:BRASIL:MINAS GERAIS:TRES CARACOES
+695:BR:BRA:BRASIL:MINAS GERAIS:TRES PONTAS
+696:BR:BRA:BRASIL:MINAS GERAIS:TUMIRITINGA
+697:BR:BRA:BRASIL:MINAS GERAIS:TURMALINA
+698:BR:BRA:BRASIL:MINAS GERAIS:TURVOLANDIA
+699:BR:BRA:BRASIL:MINAS GERAIS:UBA
+700:BR:BRA:BRASIL:MINAS GERAIS:UBAI
+701:BR:BRA:BRASIL:MINAS GERAIS:UBERABA
+702:BR:BRA:BRASIL:MINAS GERAIS:UBERLANDIA
+703:BR:BRA:BRASIL:MINAS GERAIS:UMBURATIBA
+704:BR:BRA:BRASIL:MINAS GERAIS:UNAI
+705:BR:BRA:BRASIL:MINAS GERAIS:URUCANIA
+706:BR:BRA:BRASIL:MINAS GERAIS:VARGEM BONITA
+707:BR:BRA:BRASIL:MINAS GERAIS:VARGINHA
+708:BR:BRA:BRASIL:MINAS GERAIS:VARZEA DA PALMA
+709:BR:BRA:BRASIL:MINAS GERAIS:VARZELANDIA
+710:BR:BRA:BRASIL:MINAS GERAIS:VAZANTE
+711:BR:BRA:BRASIL:MINAS GERAIS:VERISSIMO
+712:BR:BRA:BRASIL:MINAS GERAIS:VESPASIANO
+713:BR:BRA:BRASIL:MINAS GERAIS:VICOSA
+714:BR:BRA:BRASIL:MINAS GERAIS:VIEIRAS
+715:BR:BRA:BRASIL:MINAS GERAIS:VILA MATIAS
+716:BR:BRA:BRASIL:MINAS GERAIS:VIRGEM DA LAPA
+717:BR:BRA:BRASIL:MINAS GERAIS:VIRGINIA
+718:BR:BRA:BRASIL:MINAS GERAIS:VIRGINOPOLIS
+719:BR:BRA:BRASIL:MINAS GERAIS:VIRGOLANDIA
+720:BR:BRA:BRASIL:MINAS GERAIS:VISCONDE D'R.BR
+721:BR:BRA:BRASIL:MINAS GERAIS:VOLTA GRANDE
+722:BR:BRA:BRASIL:MINAS GERAIS:WENCESLAU BRAZ
+1:BR:BRA:BRASIL:PARAIBA:AGUA BRANCA
+2:BR:BRA:BRASIL:PARAIBA:AGUIAR
+3:BR:BRA:BRASIL:PARAIBA:ALAGOA GRANDE
+4:BR:BRA:BRASIL:PARAIBA:ALAGOA NOVA
+5:BR:BRA:BRASIL:PARAIBA:ALAGOINHA
+6:BR:BRA:BRASIL:PARAIBA:ALHANDRA
+7:BR:BRA:BRASIL:PARAIBA:ANTENOR NAVARRO
+8:BR:BRA:BRASIL:PARAIBA:ARACAGI
+9:BR:BRA:BRASIL:PARAIBA:ARARA
+10:BR:BRA:BRASIL:PARAIBA:ARARUNA
+11:BR:BRA:BRASIL:PARAIBA:AREAL
+12:BR:BRA:BRASIL:PARAIBA:AREIA
+13:BR:BRA:BRASIL:PARAIBA:AROEIRAS
+14:BR:BRA:BRASIL:PARAIBA:BAIA DA TRAICAO
+15:BR:BRA:BRASIL:PARAIBA:BANANEIRAS
+16:BR:BRA:BRASIL:PARAIBA:BARRA DE S. ROSA
+17:BR:BRA:BRASIL:PARAIBA:BARRA SAO MIGUEL
+18:BR:BRA:BRASIL:PARAIBA:BAYEUX
+19:BR:BRA:BRASIL:PARAIBA:BELEM
+20:BR:BRA:BRASIL:PARAIBA:BELEM DO BREJO C
+21:BR:BRA:BRASIL:PARAIBA:BOA VENTURA
+22:BR:BRA:BRASIL:PARAIBA:BOM JESUS
+23:BR:BRA:BRASIL:PARAIBA:BOM SUCESSO
+24:BR:BRA:BRASIL:PARAIBA:BONITO DE STA.FE
+25:BR:BRA:BRASIL:PARAIBA:BOQUEIRAO
+26:BR:BRA:BRASIL:PARAIBA:BOQUEIRAO COCHOS
+27:BR:BRA:BRASIL:PARAIBA:BORBOREMA
+28:BR:BRA:BRASIL:PARAIBA:BREJO DO CRUZ
+29:BR:BRA:BRASIL:PARAIBA:BREJO DOS SANTOS
+30:BR:BRA:BRASIL:PARAIBA:CAAPORA
+31:BR:BRA:BRASIL:PARAIBA:CABACEIRAS
+32:BR:BRA:BRASIL:PARAIBA:CABEDELO
+33:BR:BRA:BRASIL:PARAIBA:CACHOEIRA DOS I.
+34:BR:BRA:BRASIL:PARAIBA:CACIMBA D"DENTRO
+35:BR:BRA:BRASIL:PARAIBA:CACIMBA DE AREIA
+36:BR:BRA:BRASIL:PARAIBA:CAICARA
+37:BR:BRA:BRASIL:PARAIBA:CAJAZEIRAS
+38:BR:BRA:BRASIL:PARAIBA:CALDAS BRANDAO
+39:BR:BRA:BRASIL:PARAIBA:CAMALAU
+40:BR:BRA:BRASIL:PARAIBA:CAMPINA GRANDE
+41:BR:BRA:BRASIL:PARAIBA:CARRAPATEIRA
+42:BR:BRA:BRASIL:PARAIBA:CATINGUEIRA
+43:BR:BRA:BRASIL:PARAIBA:CATOLE DO ROCHA
+44:BR:BRA:BRASIL:PARAIBA:CONCEICAO
+45:BR:BRA:BRASIL:PARAIBA:CONDADO
+46:BR:BRA:BRASIL:PARAIBA:CONDE
+47:BR:BRA:BRASIL:PARAIBA:CONGO
+48:BR:BRA:BRASIL:PARAIBA:COREMAS
+49:BR:BRA:BRASIL:PARAIBA:CRUZ DO E. SANTO
+50:BR:BRA:BRASIL:PARAIBA:CUBATI
+51:BR:BRA:BRASIL:PARAIBA:CUITE
+52:BR:BRA:BRASIL:PARAIBA:CUITEGI
+53:BR:BRA:BRASIL:PARAIBA:CURRAL VELHO
+54:BR:BRA:BRASIL:PARAIBA:DESTERRO
+55:BR:BRA:BRASIL:PARAIBA:DESTERRO D"MALTA
+56:BR:BRA:BRASIL:PARAIBA:DIAMANTE
+57:BR:BRA:BRASIL:PARAIBA:DONA INES
+58:BR:BRA:BRASIL:PARAIBA:DUAS ESTRADAS
+59:BR:BRA:BRASIL:PARAIBA:EMAS
+60:BR:BRA:BRASIL:PARAIBA:ESPERANCA
+61:BR:BRA:BRASIL:PARAIBA:FAGUNDES
+62:BR:BRA:BRASIL:PARAIBA:FREI MARTINHO
+63:BR:BRA:BRASIL:PARAIBA:GUARABIRA
+64:BR:BRA:BRASIL:PARAIBA:GURINHEM
+65:BR:BRA:BRASIL:PARAIBA:GURJAO
+66:BR:BRA:BRASIL:PARAIBA:IBIARA
+67:BR:BRA:BRASIL:PARAIBA:IMACULADA
+68:BR:BRA:BRASIL:PARAIBA:INGA
+69:BR:BRA:BRASIL:PARAIBA:ITABAIANA
+70:BR:BRA:BRASIL:PARAIBA:ITAPORANGA
+71:BR:BRA:BRASIL:PARAIBA:ITAPOROROCA
+72:BR:BRA:BRASIL:PARAIBA:ITATUBA
+73:BR:BRA:BRASIL:PARAIBA:JACARAU
+74:BR:BRA:BRASIL:PARAIBA:JERICO
+75:BR:BRA:BRASIL:PARAIBA:JOAO PESSOA
+76:BR:BRA:BRASIL:PARAIBA:JUAREZ TAVORA
+77:BR:BRA:BRASIL:PARAIBA:JUAZEIRINHO
+78:BR:BRA:BRASIL:PARAIBA:JUNCO DO SERIDO
+79:BR:BRA:BRASIL:PARAIBA:JURIPIRANGA
+80:BR:BRA:BRASIL:PARAIBA:JURU
+81:BR:BRA:BRASIL:PARAIBA:LAGOA
+82:BR:BRA:BRASIL:PARAIBA:LAGOA DE DENTRO
+83:BR:BRA:BRASIL:PARAIBA:LAGOA SECA
+84:BR:BRA:BRASIL:PARAIBA:LASTRO
+85:BR:BRA:BRASIL:PARAIBA:LIVRAMENTO
+86:BR:BRA:BRASIL:PARAIBA:LUCENA
+87:BR:BRA:BRASIL:PARAIBA:MACARANDUBA
+88:BR:BRA:BRASIL:PARAIBA:MAE D"AGUA
+89:BR:BRA:BRASIL:PARAIBA:MALTA
+90:BR:BRA:BRASIL:PARAIBA:MAMANGUAPE
+91:BR:BRA:BRASIL:PARAIBA:MANAIRA
+92:BR:BRA:BRASIL:PARAIBA:MARI
+93:BR:BRA:BRASIL:PARAIBA:MATARACA
+94:BR:BRA:BRASIL:PARAIBA:MONGEIRO
+95:BR:BRA:BRASIL:PARAIBA:MONTADAS
+96:BR:BRA:BRASIL:PARAIBA:MONTE HOREBE
+97:BR:BRA:BRASIL:PARAIBA:MONTEIRO
+98:BR:BRA:BRASIL:PARAIBA:MULUNGU
+99:BR:BRA:BRASIL:PARAIBA:NATUBA
+100:BR:BRA:BRASIL:PARAIBA:NAZAREZINHO
+101:BR:BRA:BRASIL:PARAIBA:NOVA FLORESTA
+102:BR:BRA:BRASIL:PARAIBA:NOVA OLINDA
+103:BR:BRA:BRASIL:PARAIBA:NOVA PALMEIRA
+104:BR:BRA:BRASIL:PARAIBA:OLHO D'AGUA
+105:BR:BRA:BRASIL:PARAIBA:OLIVEDOS
+106:BR:BRA:BRASIL:PARAIBA:OURO VELHO
+107:BR:BRA:BRASIL:PARAIBA:PASSAGEM
+108:BR:BRA:BRASIL:PARAIBA:PATOS
+109:BR:BRA:BRASIL:PARAIBA:PAULISTA
+110:BR:BRA:BRASIL:PARAIBA:PEDRA BRANCA
+111:BR:BRA:BRASIL:PARAIBA:PEDRA LAVADRA
+112:BR:BRA:BRASIL:PARAIBA:PEDRAS DE FUEGO
+113:BR:BRA:BRASIL:PARAIBA:PIANCO
+114:BR:BRA:BRASIL:PARAIBA:PICUI
+115:BR:BRA:BRASIL:PARAIBA:PILAR
+116:BR:BRA:BRASIL:PARAIBA:PILOES
+117:BR:BRA:BRASIL:PARAIBA:PILOEZINHOS
+118:BR:BRA:BRASIL:PARAIBA:PIRPIRITUBA
+119:BR:BRA:BRASIL:PARAIBA:PITIMBU
+120:BR:BRA:BRASIL:PARAIBA:POCINHOS
+121:BR:BRA:BRASIL:PARAIBA:POMBAL
+122:BR:BRA:BRASIL:PARAIBA:PRATA
+123:BR:BRA:BRASIL:PARAIBA:PRINCESA ISABEL
+124:BR:BRA:BRASIL:PARAIBA:PUXINANA
+125:BR:BRA:BRASIL:PARAIBA:QUEIMADAS
+126:BR:BRA:BRASIL:PARAIBA:QUIXABA
+127:BR:BRA:BRASIL:PARAIBA:REMIGIO
+128:BR:BRA:BRASIL:PARAIBA:RICAHO D"CAVALOS
+129:BR:BRA:BRASIL:PARAIBA:RIO TINTO
+130:BR:BRA:BRASIL:PARAIBA:S. J. DO BONFIM
+131:BR:BRA:BRASIL:PARAIBA:S.J. DO CARIRI
+132:BR:BRA:BRASIL:PARAIBA:S.J. DO SABUGI
+133:BR:BRA:BRASIL:PARAIBA:S.J.DE ESPINHARA
+134:BR:BRA:BRASIL:PARAIBA:S.J.DOS CORDEIRO
+135:BR:BRA:BRASIL:PARAIBA:S.J.LAGOA TAPADA
+136:BR:BRA:BRASIL:PARAIBA:SALGADINHO
+137:BR:BRA:BRASIL:PARAIBA:SALGADO S.FELIX
+138:BR:BRA:BRASIL:PARAIBA:SANTA CRUZ
+139:BR:BRA:BRASIL:PARAIBA:SANTA HELENA
+140:BR:BRA:BRASIL:PARAIBA:SANTA LUZIA
+141:BR:BRA:BRASIL:PARAIBA:SANTA RITA
+142:BR:BRA:BRASIL:PARAIBA:SANTA TERESINHA
+143:BR:BRA:BRASIL:PARAIBA:SANTANA DE M.
+144:BR:BRA:BRASIL:PARAIBA:SANTANA DOS G.
+145:BR:BRA:BRASIL:PARAIBA:SAO BENTO
+146:BR:BRA:BRASIL:PARAIBA:SAO J.DE CAIANA
+147:BR:BRA:BRASIL:PARAIBA:SAO JOAO D"TIGRE
+148:BR:BRA:BRASIL:PARAIBA:SAO JOSE DE P.
+149:BR:BRA:BRASIL:PARAIBA:SAO MAMEDE
+150:BR:BRA:BRASIL:PARAIBA:SAO MIGUEL TAIPU
+151:BR:BRA:BRASIL:PARAIBA:SAO SEBASTIAO LR
+152:BR:BRA:BRASIL:PARAIBA:SAO SEBASTIAO U.
+153:BR:BRA:BRASIL:PARAIBA:SAPE
+154:BR:BRA:BRASIL:PARAIBA:SERIDO
+155:BR:BRA:BRASIL:PARAIBA:SERRA BRANCA
+156:BR:BRA:BRASIL:PARAIBA:SERRA DA RAIZ
+157:BR:BRA:BRASIL:PARAIBA:SERRA GRANDE
+158:BR:BRA:BRASIL:PARAIBA:SERRA REDONDA
+159:BR:BRA:BRASIL:PARAIBA:SERRARIA
+160:BR:BRA:BRASIL:PARAIBA:SOLANEA
+161:BR:BRA:BRASIL:PARAIBA:SOLEDADE
+162:BR:BRA:BRASIL:PARAIBA:SOUZA
+163:BR:BRA:BRASIL:PARAIBA:SUME
+164:BR:BRA:BRASIL:PARAIBA:TACIMA
+165:BR:BRA:BRASIL:PARAIBA:TAPEROA
+166:BR:BRA:BRASIL:PARAIBA:TAVARES
+167:BR:BRA:BRASIL:PARAIBA:TEIXEIRA
+168:BR:BRA:BRASIL:PARAIBA:TRIUNFO
+169:BR:BRA:BRASIL:PARAIBA:UIRAUNA
+170:BR:BRA:BRASIL:PARAIBA:UMBUZEIRO
+171:BR:BRA:BRASIL:PARAIBA:VARZEA
+1:BR:BRA:BRASIL:RORAIMA:BRA.L2.1
+1:BR:BRA:BRASIL:PERNAMBUCO:AFOGADOS DA I.
+2:BR:BRA:BRASIL:PERNAMBUCO:AFRANIO
+3:BR:BRA:BRASIL:PERNAMBUCO:AGRESTINA
+4:BR:BRA:BRASIL:PERNAMBUCO:AGUA PRETA
+5:BR:BRA:BRASIL:PERNAMBUCO:AGUAS BELAS
+6:BR:BRA:BRASIL:PERNAMBUCO:ALAGOINHA
+7:BR:BRA:BRASIL:PERNAMBUCO:ALIANCA
+8:BR:BRA:BRASIL:PERNAMBUCO:ALTINHO
+9:BR:BRA:BRASIL:PERNAMBUCO:AMARAJI
+10:BR:BRA:BRASIL:PERNAMBUCO:ANGELIM
+11:BR:BRA:BRASIL:PERNAMBUCO:ARARIPINA
+12:BR:BRA:BRASIL:PERNAMBUCO:ARCOVERDE
+13:BR:BRA:BRASIL:PERNAMBUCO:BARRA DE GUABIRA
+14:BR:BRA:BRASIL:PERNAMBUCO:BARREIROS
+15:BR:BRA:BRASIL:PERNAMBUCO:BELEM DE MARIA
+16:BR:BRA:BRASIL:PERNAMBUCO:BELEM DE SAO FCO
+17:BR:BRA:BRASIL:PERNAMBUCO:BELO JARDIM
+18:BR:BRA:BRASIL:PERNAMBUCO:BETANIA
+19:BR:BRA:BRASIL:PERNAMBUCO:BEZERROS
+20:BR:BRA:BRASIL:PERNAMBUCO:BODOCO
+21:BR:BRA:BRASIL:PERNAMBUCO:BOM CONSELHO
+22:BR:BRA:BRASIL:PERNAMBUCO:BOM JARDIM
+23:BR:BRA:BRASIL:PERNAMBUCO:BONITO
+24:BR:BRA:BRASIL:PERNAMBUCO:BRA.L2.3
+25:BR:BRA:BRASIL:PERNAMBUCO:BREJAO
+26:BR:BRA:BRASIL:PERNAMBUCO:BREJINHO
+27:BR:BRA:BRASIL:PERNAMBUCO:BREJO DA MADRE D
+28:BR:BRA:BRASIL:PERNAMBUCO:BUENOS AIRES
+29:BR:BRA:BRASIL:PERNAMBUCO:BUIQUE
+30:BR:BRA:BRASIL:PERNAMBUCO:CABO
+31:BR:BRA:BRASIL:PERNAMBUCO:CABROBO
+32:BR:BRA:BRASIL:PERNAMBUCO:CACHOERINHA
+33:BR:BRA:BRASIL:PERNAMBUCO:CAETES
+34:BR:BRA:BRASIL:PERNAMBUCO:CALCADO
+35:BR:BRA:BRASIL:PERNAMBUCO:CALUMBI
+36:BR:BRA:BRASIL:PERNAMBUCO:CAMOCIM S FELIX
+37:BR:BRA:BRASIL:PERNAMBUCO:CAMUTANGA
+38:BR:BRA:BRASIL:PERNAMBUCO:CANHOTINHO
+39:BR:BRA:BRASIL:PERNAMBUCO:CAPOEIRAS
+40:BR:BRA:BRASIL:PERNAMBUCO:CARNAIBA
+41:BR:BRA:BRASIL:PERNAMBUCO:CARPINA
+42:BR:BRA:BRASIL:PERNAMBUCO:CARUARU
+43:BR:BRA:BRASIL:PERNAMBUCO:CATENDE
+44:BR:BRA:BRASIL:PERNAMBUCO:CEDRO
+45:BR:BRA:BRASIL:PERNAMBUCO:CHA DE ALEGRIA
+46:BR:BRA:BRASIL:PERNAMBUCO:CHA GRANDE
+47:BR:BRA:BRASIL:PERNAMBUCO:CONDADO
+48:BR:BRA:BRASIL:PERNAMBUCO:CORRENTES
+49:BR:BRA:BRASIL:PERNAMBUCO:CORTES
+50:BR:BRA:BRASIL:PERNAMBUCO:CUMARU
+51:BR:BRA:BRASIL:PERNAMBUCO:CUPIRA
+52:BR:BRA:BRASIL:PERNAMBUCO:CUSTODIA
+53:BR:BRA:BRASIL:PERNAMBUCO:ESCADA
+54:BR:BRA:BRASIL:PERNAMBUCO:EXU
+55:BR:BRA:BRASIL:PERNAMBUCO:FEIRA NOVA
+56:BR:BRA:BRASIL:PERNAMBUCO:FERREIROS
+57:BR:BRA:BRASIL:PERNAMBUCO:FLORES
+58:BR:BRA:BRASIL:PERNAMBUCO:FLORESTA
+59:BR:BRA:BRASIL:PERNAMBUCO:FREI MIGUELINHO
+60:BR:BRA:BRASIL:PERNAMBUCO:GAMELEIRA
+61:BR:BRA:BRASIL:PERNAMBUCO:GARANHUNS
+62:BR:BRA:BRASIL:PERNAMBUCO:GLORIA DO GOITA
+63:BR:BRA:BRASIL:PERNAMBUCO:GOIANA
+64:BR:BRA:BRASIL:PERNAMBUCO:GRANITO
+65:BR:BRA:BRASIL:PERNAMBUCO:GRAVATA
+66:BR:BRA:BRASIL:PERNAMBUCO:IBIMIRIM
+67:BR:BRA:BRASIL:PERNAMBUCO:IBIRAJUBA
+68:BR:BRA:BRASIL:PERNAMBUCO:IGARACU
+69:BR:BRA:BRASIL:PERNAMBUCO:IGUARACI
+70:BR:BRA:BRASIL:PERNAMBUCO:INAJA
+71:BR:BRA:BRASIL:PERNAMBUCO:INGAZEIRA
+72:BR:BRA:BRASIL:PERNAMBUCO:IPOJUCA
+73:BR:BRA:BRASIL:PERNAMBUCO:IPUBI
+74:BR:BRA:BRASIL:PERNAMBUCO:ITACURUBA
+75:BR:BRA:BRASIL:PERNAMBUCO:ITAIBA
+76:BR:BRA:BRASIL:PERNAMBUCO:ITAMARACA
+77:BR:BRA:BRASIL:PERNAMBUCO:ITAPETIM
+78:BR:BRA:BRASIL:PERNAMBUCO:ITAQUITINGA
+79:BR:BRA:BRASIL:PERNAMBUCO:JABOATAO
+80:BR:BRA:BRASIL:PERNAMBUCO:JATAUBA
+81:BR:BRA:BRASIL:PERNAMBUCO:JATI
+82:BR:BRA:BRASIL:PERNAMBUCO:JOAO ALFREDO
+83:BR:BRA:BRASIL:PERNAMBUCO:JOAQUIM NABUCO
+84:BR:BRA:BRASIL:PERNAMBUCO:JUPI
+85:BR:BRA:BRASIL:PERNAMBUCO:JUREMA
+86:BR:BRA:BRASIL:PERNAMBUCO:LAGO
+87:BR:BRA:BRASIL:PERNAMBUCO:LAGOA D GATOS
+88:BR:BRA:BRASIL:PERNAMBUCO:LAGOA D OURO
+89:BR:BRA:BRASIL:PERNAMBUCO:LAGOA DO ITAENGA
+90:BR:BRA:BRASIL:PERNAMBUCO:LAJEDO
+91:BR:BRA:BRASIL:PERNAMBUCO:LIMOEIRO
+92:BR:BRA:BRASIL:PERNAMBUCO:MACAPARANA
+93:BR:BRA:BRASIL:PERNAMBUCO:MACHADOS
+94:BR:BRA:BRASIL:PERNAMBUCO:MARAIAL
+95:BR:BRA:BRASIL:PERNAMBUCO:MIRANDIBA
+96:BR:BRA:BRASIL:PERNAMBUCO:MORENO
+97:BR:BRA:BRASIL:PERNAMBUCO:NAZARE DA MATA
+98:BR:BRA:BRASIL:PERNAMBUCO:OLINDA
+99:BR:BRA:BRASIL:PERNAMBUCO:OROBO
+100:BR:BRA:BRASIL:PERNAMBUCO:OROCO
+101:BR:BRA:BRASIL:PERNAMBUCO:OURICURI
+102:BR:BRA:BRASIL:PERNAMBUCO:PALMARES
+103:BR:BRA:BRASIL:PERNAMBUCO:PALMEIRINA
+104:BR:BRA:BRASIL:PERNAMBUCO:PANELAS
+105:BR:BRA:BRASIL:PERNAMBUCO:PARANATAMA
+106:BR:BRA:BRASIL:PERNAMBUCO:PARNAMIRIM
+107:BR:BRA:BRASIL:PERNAMBUCO:PASSIRA
+108:BR:BRA:BRASIL:PERNAMBUCO:PAUDALHO
+109:BR:BRA:BRASIL:PERNAMBUCO:PAULISTA
+110:BR:BRA:BRASIL:PERNAMBUCO:PEDRA
+111:BR:BRA:BRASIL:PERNAMBUCO:PESQUEIRA
+112:BR:BRA:BRASIL:PERNAMBUCO:PETROLANDIA
+113:BR:BRA:BRASIL:PERNAMBUCO:PETROLINA
+114:BR:BRA:BRASIL:PERNAMBUCO:POCAO
+115:BR:BRA:BRASIL:PERNAMBUCO:POMBOS
+116:BR:BRA:BRASIL:PERNAMBUCO:PRIMAVERA
+117:BR:BRA:BRASIL:PERNAMBUCO:QUIPAPA
+118:BR:BRA:BRASIL:PERNAMBUCO:R.Pajeu
+119:BR:BRA:BRASIL:PERNAMBUCO:R.da Brigida
+120:BR:BRA:BRASIL:PERNAMBUCO:RECIFE
+121:BR:BRA:BRASIL:PERNAMBUCO:RIACHO DAS ALMAS
+122:BR:BRA:BRASIL:PERNAMBUCO:RIBEIRAO
+123:BR:BRA:BRASIL:PERNAMBUCO:RIO FORMOSO
+124:BR:BRA:BRASIL:PERNAMBUCO:Repr.POCO D"CRUZ
+125:BR:BRA:BRASIL:PERNAMBUCO:Repr.ROSARIO
+126:BR:BRA:BRASIL:PERNAMBUCO:S JOAQUIN D MONT
+127:BR:BRA:BRASIL:PERNAMBUCO:S. DOS MOREIRAS
+128:BR:BRA:BRASIL:PERNAMBUCO:S.C.D"CAPIBARIBE
+129:BR:BRA:BRASIL:PERNAMBUCO:S.M.DA BOA VISTA
+130:BR:BRA:BRASIL:PERNAMBUCO:S.MARIA D"CAMBUC
+131:BR:BRA:BRASIL:PERNAMBUCO:S.VICENTE FERRER
+132:BR:BRA:BRASIL:PERNAMBUCO:SAIRE
+133:BR:BRA:BRASIL:PERNAMBUCO:SALGADINHO
+134:BR:BRA:BRASIL:PERNAMBUCO:SALGUEIRO
+135:BR:BRA:BRASIL:PERNAMBUCO:SALIDAO
+136:BR:BRA:BRASIL:PERNAMBUCO:SALOA
+137:BR:BRA:BRASIL:PERNAMBUCO:SANHARO
+138:BR:BRA:BRASIL:PERNAMBUCO:SANTA TEREZINHA
+139:BR:BRA:BRASIL:PERNAMBUCO:SAO BENITO SUL
+140:BR:BRA:BRASIL:PERNAMBUCO:SAO BENTO DO UNA
+141:BR:BRA:BRASIL:PERNAMBUCO:SAO CAETANO
+142:BR:BRA:BRASIL:PERNAMBUCO:SAO JOAO
+143:BR:BRA:BRASIL:PERNAMBUCO:SAO JOAO D"EGITO
+144:BR:BRA:BRASIL:PERNAMBUCO:SAO JOAO DO BELM
+145:BR:BRA:BRASIL:PERNAMBUCO:SAO JOSE COROA G
+146:BR:BRA:BRASIL:PERNAMBUCO:SAO LOURENCO MAT
+147:BR:BRA:BRASIL:PERNAMBUCO:SERRA TALHADA
+148:BR:BRA:BRASIL:PERNAMBUCO:SERRITA
+149:BR:BRA:BRASIL:PERNAMBUCO:SERTANIA
+150:BR:BRA:BRASIL:PERNAMBUCO:SIRINHAEM
+151:BR:BRA:BRASIL:PERNAMBUCO:SURUBIM
+152:BR:BRA:BRASIL:PERNAMBUCO:TABIRA
+153:BR:BRA:BRASIL:PERNAMBUCO:TACAIMBO
+154:BR:BRA:BRASIL:PERNAMBUCO:TACARATU
+155:BR:BRA:BRASIL:PERNAMBUCO:TAMBE
+156:BR:BRA:BRASIL:PERNAMBUCO:TAQUARITINGA NTE
+157:BR:BRA:BRASIL:PERNAMBUCO:TEREZINHA
+158:BR:BRA:BRASIL:PERNAMBUCO:TERRA NOVA
+159:BR:BRA:BRASIL:PERNAMBUCO:TIMBAUBA
+160:BR:BRA:BRASIL:PERNAMBUCO:TORITAMA
+161:BR:BRA:BRASIL:PERNAMBUCO:TRACUNHAEM
+162:BR:BRA:BRASIL:PERNAMBUCO:TRINDADE
+163:BR:BRA:BRASIL:PERNAMBUCO:TRIUNFO
+164:BR:BRA:BRASIL:PERNAMBUCO:TUPANATINGA
+165:BR:BRA:BRASIL:PERNAMBUCO:TUPARETAMA
+166:BR:BRA:BRASIL:PERNAMBUCO:VENTUROSA
+167:BR:BRA:BRASIL:PERNAMBUCO:VERDEJANTE
+168:BR:BRA:BRASIL:PERNAMBUCO:VERTENTES
+169:BR:BRA:BRASIL:PERNAMBUCO:VICENCIA
+170:BR:BRA:BRASIL:PERNAMBUCO:VITORIA S.ANTAO
+1:BR:BRA:BRASIL:ALAGOAS:AGUA BRANCA
+2:BR:BRA:BRASIL:ALAGOAS:ANADIA
+3:BR:BRA:BRASIL:ALAGOAS:ARAPIRACA
+4:BR:BRA:BRASIL:ALAGOAS:ATALAIA
+5:BR:BRA:BRASIL:ALAGOAS:BARRA D S MIGUEL
+6:BR:BRA:BRASIL:ALAGOAS:BARRA DE S ANTON
+7:BR:BRA:BRASIL:ALAGOAS:BATALHA
+8:BR:BRA:BRASIL:ALAGOAS:BELEM
+9:BR:BRA:BRASIL:ALAGOAS:BELO MONTE
+10:BR:BRA:BRASIL:ALAGOAS:BOCA DE MATA
+11:BR:BRA:BRASIL:ALAGOAS:BRANQUINHA
+12:BR:BRA:BRASIL:ALAGOAS:CACIMBINHAS
+13:BR:BRA:BRASIL:ALAGOAS:CAJUEIRO
+14:BR:BRA:BRASIL:ALAGOAS:CAMPO ALEGRE
+15:BR:BRA:BRASIL:ALAGOAS:CAMPO GRANDE
+16:BR:BRA:BRASIL:ALAGOAS:CANAPI
+17:BR:BRA:BRASIL:ALAGOAS:CAPELA
+18:BR:BRA:BRASIL:ALAGOAS:CARNEIROS
+19:BR:BRA:BRASIL:ALAGOAS:CHA PRETA
+20:BR:BRA:BRASIL:ALAGOAS:COITE DO NOIA
+21:BR:BRA:BRASIL:ALAGOAS:COLONIA LEOPOLDI
+22:BR:BRA:BRASIL:ALAGOAS:COQUEIRO SECO
+23:BR:BRA:BRASIL:ALAGOAS:CORURIPE
+24:BR:BRA:BRASIL:ALAGOAS:DELMIRO GOUVEIA
+25:BR:BRA:BRASIL:ALAGOAS:DOIS RIACHOS
+26:BR:BRA:BRASIL:ALAGOAS:FEIRA GRANDE
+27:BR:BRA:BRASIL:ALAGOAS:FELIZ DESERTO
+28:BR:BRA:BRASIL:ALAGOAS:FLEXEIRAS
+29:BR:BRA:BRASIL:ALAGOAS:GIRAU DO PONCIAN
+30:BR:BRA:BRASIL:ALAGOAS:IBATEGUARA
+31:BR:BRA:BRASIL:ALAGOAS:IGACI
+32:BR:BRA:BRASIL:ALAGOAS:IGREJA NOVA
+33:BR:BRA:BRASIL:ALAGOAS:INHAPI
+34:BR:BRA:BRASIL:ALAGOAS:JACARO DOS HOMEN
+35:BR:BRA:BRASIL:ALAGOAS:JACUIPE
+36:BR:BRA:BRASIL:ALAGOAS:JAPARATINGA
+37:BR:BRA:BRASIL:ALAGOAS:JARAMATAIA
+38:BR:BRA:BRASIL:ALAGOAS:JOAQUIM GOMES
+39:BR:BRA:BRASIL:ALAGOAS:JUNDIA
+40:BR:BRA:BRASIL:ALAGOAS:JUNQUEIRO
+41:BR:BRA:BRASIL:ALAGOAS:LAGOA DA CANOA
+42:BR:BRA:BRASIL:ALAGOAS:LIMOEIRO D ANADI
+43:BR:BRA:BRASIL:ALAGOAS:MACEIO
+44:BR:BRA:BRASIL:ALAGOAS:MAJOR ISIDORO
+45:BR:BRA:BRASIL:ALAGOAS:MAR VERMELHO
+46:BR:BRA:BRASIL:ALAGOAS:MARAGOGI
+47:BR:BRA:BRASIL:ALAGOAS:MARAVILHA
+48:BR:BRA:BRASIL:ALAGOAS:MARECHAL DEODORO
+49:BR:BRA:BRASIL:ALAGOAS:MARIMBONDO
+50:BR:BRA:BRASIL:ALAGOAS:MATA GRANDE
+51:BR:BRA:BRASIL:ALAGOAS:MATRIZ D CAMARAG
+52:BR:BRA:BRASIL:ALAGOAS:MESSIAS
+53:BR:BRA:BRASIL:ALAGOAS:MIRADOR D NEGRAO
+54:BR:BRA:BRASIL:ALAGOAS:MONTEIROPOLIS
+55:BR:BRA:BRASIL:ALAGOAS:MURICI
+56:BR:BRA:BRASIL:ALAGOAS:NOVO LINO
+57:BR:BRA:BRASIL:ALAGOAS:OLHO D AGUA  D F
+58:BR:BRA:BRASIL:ALAGOAS:OLHO D'AGUA DO C
+59:BR:BRA:BRASIL:ALAGOAS:OLHO D-AGUA GRAN
+60:BR:BRA:BRASIL:ALAGOAS:OLIVENCA
+61:BR:BRA:BRASIL:ALAGOAS:OURO BRANCO
+62:BR:BRA:BRASIL:ALAGOAS:PALESTINA
+63:BR:BRA:BRASIL:ALAGOAS:PALMEIRA DOS IND
+64:BR:BRA:BRASIL:ALAGOAS:PAO-DE-ACUCAR
+65:BR:BRA:BRASIL:ALAGOAS:PASSO D CAMARAGI
+66:BR:BRA:BRASIL:ALAGOAS:PAULO JACINTO
+67:BR:BRA:BRASIL:ALAGOAS:PENEDO
+68:BR:BRA:BRASIL:ALAGOAS:PIACABUCU
+69:BR:BRA:BRASIL:ALAGOAS:PILAR
+70:BR:BRA:BRASIL:ALAGOAS:PINDOBA
+71:BR:BRA:BRASIL:ALAGOAS:PIRANHAS
+72:BR:BRA:BRASIL:ALAGOAS:POCO DAS TRINCHE
+73:BR:BRA:BRASIL:ALAGOAS:PORTO CALVO
+74:BR:BRA:BRASIL:ALAGOAS:PORTO D PEDRAS
+75:BR:BRA:BRASIL:ALAGOAS:PORTO REAL DO C.
+76:BR:BRA:BRASIL:ALAGOAS:QUEBRANGULO
+77:BR:BRA:BRASIL:ALAGOAS:RIO LARGO
+78:BR:BRA:BRASIL:ALAGOAS:ROTEIRO
+79:BR:BRA:BRASIL:ALAGOAS:S JOSE DA TAPERA
+80:BR:BRA:BRASIL:ALAGOAS:S LUIS DO QUITUN
+81:BR:BRA:BRASIL:ALAGOAS:S MIGUEL D CAMPO
+82:BR:BRA:BRASIL:ALAGOAS:S MIGUEL MILAGRE
+83:BR:BRA:BRASIL:ALAGOAS:SANTANA D MUNDAU
+84:BR:BRA:BRASIL:ALAGOAS:SANTANA DO IPANE
+85:BR:BRA:BRASIL:ALAGOAS:SAO BRAS
+86:BR:BRA:BRASIL:ALAGOAS:SAO JOSE DA LAJE
+87:BR:BRA:BRASIL:ALAGOAS:SAO SEBASTIAO
+88:BR:BRA:BRASIL:ALAGOAS:SATUBA
+89:BR:BRA:BRASIL:ALAGOAS:STA LUZIA DO NTE
+90:BR:BRA:BRASIL:ALAGOAS:TANQUE D'ARCA
+91:BR:BRA:BRASIL:ALAGOAS:TAQUARANA
+92:BR:BRA:BRASIL:ALAGOAS:TRAIPU
+93:BR:BRA:BRASIL:ALAGOAS:UNIAO DOS PALMAR
+94:BR:BRA:BRASIL:ALAGOAS:VICOSA
+1:BR:BRA:BRASIL:AMAPA:Amapa
+2:BR:BRA:BRASIL:AMAPA:Calcoene
+3:BR:BRA:BRASIL:AMAPA:Macapa
+4:BR:BRA:BRASIL:AMAPA:Mazagao
+5:BR:BRA:BRASIL:AMAPA:Oiapoque
+1:BR:BRA:BRASIL:SANTA CATARINA:ABELARDO LUZ
+2:BR:BRA:BRASIL:SANTA CATARINA:AGROLANDIA
+3:BR:BRA:BRASIL:SANTA CATARINA:AGRONOMICA
+4:BR:BRA:BRASIL:SANTA CATARINA:AGUA DOCE
+5:BR:BRA:BRASIL:SANTA CATARINA:AGUAS DO CHAPEC
+6:BR:BRA:BRASIL:SANTA CATARINA:AGUAS MORNAS
+7:BR:BRA:BRASIL:SANTA CATARINA:ALFREDO WAGNER
+8:BR:BRA:BRASIL:SANTA CATARINA:ANCHIETA
+9:BR:BRA:BRASIL:SANTA CATARINA:ANGELINA
+10:BR:BRA:BRASIL:SANTA CATARINA:ANITA GARIBALDI
+11:BR:BRA:BRASIL:SANTA CATARINA:ANITAPOLIS
+12:BR:BRA:BRASIL:SANTA CATARINA:ANTONIO CARLOS
+13:BR:BRA:BRASIL:SANTA CATARINA:ARAQUARI
+14:BR:BRA:BRASIL:SANTA CATARINA:ARARANGUA
+15:BR:BRA:BRASIL:SANTA CATARINA:ARMAZEM
+16:BR:BRA:BRASIL:SANTA CATARINA:ARROIO TRINTA
+17:BR:BRA:BRASIL:SANTA CATARINA:ASCURRA
+18:BR:BRA:BRASIL:SANTA CATARINA:ATALANTA
+19:BR:BRA:BRASIL:SANTA CATARINA:AURORA
+20:BR:BRA:BRASIL:SANTA CATARINA:B.JARDIM D'SERR
+21:BR:BRA:BRASIL:SANTA CATARINA:BALNEAR.CAMBORI
+22:BR:BRA:BRASIL:SANTA CATARINA:BARRA VELHA
+23:BR:BRA:BRASIL:SANTA CATARINA:BENEDITO NOVO
+24:BR:BRA:BRASIL:SANTA CATARINA:BIGUACU
+25:BR:BRA:BRASIL:SANTA CATARINA:BLUMENAU
+26:BR:BRA:BRASIL:SANTA CATARINA:BOM RETIRO
+27:BR:BRA:BRASIL:SANTA CATARINA:BOTIVERA
+28:BR:BRA:BRASIL:SANTA CATARINA:BRACO DO NORTE
+29:BR:BRA:BRASIL:SANTA CATARINA:BRUSQUE
+30:BR:BRA:BRASIL:SANTA CATARINA:CACADOR
+31:BR:BRA:BRASIL:SANTA CATARINA:CAIBI
+32:BR:BRA:BRASIL:SANTA CATARINA:CAMBORIU
+33:BR:BRA:BRASIL:SANTA CATARINA:CAMPO ALEGRE
+34:BR:BRA:BRASIL:SANTA CATARINA:CAMPO BELO D'SU
+35:BR:BRA:BRASIL:SANTA CATARINA:CAMPO DO ERE
+36:BR:BRA:BRASIL:SANTA CATARINA:CAMPOS NOVOS
+37:BR:BRA:BRASIL:SANTA CATARINA:CANELINHA
+38:BR:BRA:BRASIL:SANTA CATARINA:CANOINHAS
+39:BR:BRA:BRASIL:SANTA CATARINA:CAPINZAL
+40:BR:BRA:BRASIL:SANTA CATARINA:CATANDUVAS
+41:BR:BRA:BRASIL:SANTA CATARINA:CAXAMBU DO SUL
+42:BR:BRA:BRASIL:SANTA CATARINA:CHAPECO
+43:BR:BRA:BRASIL:SANTA CATARINA:CONCORDIA
+44:BR:BRA:BRASIL:SANTA CATARINA:CORONEL FREITAS
+45:BR:BRA:BRASIL:SANTA CATARINA:CORUPA
+46:BR:BRA:BRASIL:SANTA CATARINA:CRICIUMA
+47:BR:BRA:BRASIL:SANTA CATARINA:CUNHA PORA
+48:BR:BRA:BRASIL:SANTA CATARINA:CURITIBANOS
+49:BR:BRA:BRASIL:SANTA CATARINA:DESCANSO
+50:BR:BRA:BRASIL:SANTA CATARINA:DIONISIO CERQUE
+51:BR:BRA:BRASIL:SANTA CATARINA:DONA EMMA
+52:BR:BRA:BRASIL:SANTA CATARINA:ERVAL VELHO
+53:BR:BRA:BRASIL:SANTA CATARINA:FAXINAL D GUEDE
+54:BR:BRA:BRASIL:SANTA CATARINA:FLORIANOPOLIS
+55:BR:BRA:BRASIL:SANTA CATARINA:FRAIBURGO
+56:BR:BRA:BRASIL:SANTA CATARINA:GALVAO
+57:BR:BRA:BRASIL:SANTA CATARINA:GAROPABA
+58:BR:BRA:BRASIL:SANTA CATARINA:GARUVA
+59:BR:BRA:BRASIL:SANTA CATARINA:GASPAR
+60:BR:BRA:BRASIL:SANTA CATARINA:GOV.CELSO RAMOS
+61:BR:BRA:BRASIL:SANTA CATARINA:GRAO PARA
+62:BR:BRA:BRASIL:SANTA CATARINA:GRAVATAL
+63:BR:BRA:BRASIL:SANTA CATARINA:GUABIRUBA
+64:BR:BRA:BRASIL:SANTA CATARINA:GUARACIABA
+65:BR:BRA:BRASIL:SANTA CATARINA:GUARAMIRIM
+66:BR:BRA:BRASIL:SANTA CATARINA:GUARUJA DO SUL
+67:BR:BRA:BRASIL:SANTA CATARINA:HERVAL D.OESTE
+68:BR:BRA:BRASIL:SANTA CATARINA:IBICARE
+69:BR:BRA:BRASIL:SANTA CATARINA:IBIRAMA
+70:BR:BRA:BRASIL:SANTA CATARINA:ICARA
+71:BR:BRA:BRASIL:SANTA CATARINA:ILHOTA
+72:BR:BRA:BRASIL:SANTA CATARINA:IMARUI
+73:BR:BRA:BRASIL:SANTA CATARINA:IMBITUBA
+74:BR:BRA:BRASIL:SANTA CATARINA:IMBUIA
+75:BR:BRA:BRASIL:SANTA CATARINA:INDAIAL
+76:BR:BRA:BRASIL:SANTA CATARINA:IPIRA
+77:BR:BRA:BRASIL:SANTA CATARINA:IPUMIRIM
+78:BR:BRA:BRASIL:SANTA CATARINA:IRANI
+79:BR:BRA:BRASIL:SANTA CATARINA:IRINEOPOLIS
+80:BR:BRA:BRASIL:SANTA CATARINA:ITA
+81:BR:BRA:BRASIL:SANTA CATARINA:ITAIOPOLIS
+82:BR:BRA:BRASIL:SANTA CATARINA:ITAJAI
+83:BR:BRA:BRASIL:SANTA CATARINA:ITAPEMA
+84:BR:BRA:BRASIL:SANTA CATARINA:ITUPORANGA
+85:BR:BRA:BRASIL:SANTA CATARINA:Itapiranga
+86:BR:BRA:BRASIL:SANTA CATARINA:JABORA
+87:BR:BRA:BRASIL:SANTA CATARINA:JACINTO MACHADO
+88:BR:BRA:BRASIL:SANTA CATARINA:JAGUARUNA
+89:BR:BRA:BRASIL:SANTA CATARINA:JARAGUA DO SUL
+90:BR:BRA:BRASIL:SANTA CATARINA:JOACABA
+91:BR:BRA:BRASIL:SANTA CATARINA:JOINVILE
+92:BR:BRA:BRASIL:SANTA CATARINA:LACERDOPOLIS
+93:BR:BRA:BRASIL:SANTA CATARINA:LAGUNA
+94:BR:BRA:BRASIL:SANTA CATARINA:LAJES
+95:BR:BRA:BRASIL:SANTA CATARINA:LAURENTINO
+96:BR:BRA:BRASIL:SANTA CATARINA:LAURO MULLER
+97:BR:BRA:BRASIL:SANTA CATARINA:LEBON REGIS
+98:BR:BRA:BRASIL:SANTA CATARINA:LEOBERTO LEAL
+99:BR:BRA:BRASIL:SANTA CATARINA:LONTRAS
+100:BR:BRA:BRASIL:SANTA CATARINA:LUIZ ALVES
+101:BR:BRA:BRASIL:SANTA CATARINA:MACARANDUBA
+102:BR:BRA:BRASIL:SANTA CATARINA:MAFRA
+103:BR:BRA:BRASIL:SANTA CATARINA:MAJOR GERCINO
+104:BR:BRA:BRASIL:SANTA CATARINA:MAJOR VIEIRA
+105:BR:BRA:BRASIL:SANTA CATARINA:MARACAJA
+106:BR:BRA:BRASIL:SANTA CATARINA:MARAVILHA
+107:BR:BRA:BRASIL:SANTA CATARINA:MATOS COSTA
+108:BR:BRA:BRASIL:SANTA CATARINA:MELEIRO
+109:BR:BRA:BRASIL:SANTA CATARINA:MODELO
+110:BR:BRA:BRASIL:SANTA CATARINA:MONDAI
+111:BR:BRA:BRASIL:SANTA CATARINA:MONTE CASTELO
+112:BR:BRA:BRASIL:SANTA CATARINA:MORRO DA FUMACA
+113:BR:BRA:BRASIL:SANTA CATARINA:NAVEGANTES
+114:BR:BRA:BRASIL:SANTA CATARINA:NOVA ERECHIM
+115:BR:BRA:BRASIL:SANTA CATARINA:NOVA TRENTO
+116:BR:BRA:BRASIL:SANTA CATARINA:NOVA VENEZA
+117:BR:BRA:BRASIL:SANTA CATARINA:ORLEAES
+118:BR:BRA:BRASIL:SANTA CATARINA:OURO
+119:BR:BRA:BRASIL:SANTA CATARINA:P.CASTELO BRANC
+120:BR:BRA:BRASIL:SANTA CATARINA:PALHOCA
+121:BR:BRA:BRASIL:SANTA CATARINA:PALMA SOLA
+122:BR:BRA:BRASIL:SANTA CATARINA:PALMITOS
+123:BR:BRA:BRASIL:SANTA CATARINA:PAPANDUVA
+124:BR:BRA:BRASIL:SANTA CATARINA:PAULO LOPEZ
+125:BR:BRA:BRASIL:SANTA CATARINA:PEDRAS GRANDES
+126:BR:BRA:BRASIL:SANTA CATARINA:PENHA
+127:BR:BRA:BRASIL:SANTA CATARINA:PERITIBA
+128:BR:BRA:BRASIL:SANTA CATARINA:PETROLANDIA
+129:BR:BRA:BRASIL:SANTA CATARINA:PICARRAS
+130:BR:BRA:BRASIL:SANTA CATARINA:PINHALZINHO
+131:BR:BRA:BRASIL:SANTA CATARINA:PINHEIRO PRETO
+132:BR:BRA:BRASIL:SANTA CATARINA:PIRATUBA
+133:BR:BRA:BRASIL:SANTA CATARINA:POMERODE
+134:BR:BRA:BRASIL:SANTA CATARINA:PONTA ALTA
+135:BR:BRA:BRASIL:SANTA CATARINA:PONTE SERRADA
+136:BR:BRA:BRASIL:SANTA CATARINA:PORTO BELO
+137:BR:BRA:BRASIL:SANTA CATARINA:PORTO UNIAO
+138:BR:BRA:BRASIL:SANTA CATARINA:POUSO REDONDO
+139:BR:BRA:BRASIL:SANTA CATARINA:PRESDTE. GETULIO
+140:BR:BRA:BRASIL:SANTA CATARINA:PRESIDENTE NERE
+141:BR:BRA:BRASIL:SANTA CATARINA:QUILOMBO
+142:BR:BRA:BRASIL:SANTA CATARINA:RANCHO QUEIMADO
+143:BR:BRA:BRASIL:SANTA CATARINA:RIO DAS ANTAS
+144:BR:BRA:BRASIL:SANTA CATARINA:RIO DO CAMPO
+145:BR:BRA:BRASIL:SANTA CATARINA:RIO DO OESTE
+146:BR:BRA:BRASIL:SANTA CATARINA:RIO DO SUL
+147:BR:BRA:BRASIL:SANTA CATARINA:RIO DOS CEDROS
+148:BR:BRA:BRASIL:SANTA CATARINA:RIO FORTUNA
+149:BR:BRA:BRASIL:SANTA CATARINA:RIO NEGRINHO
+150:BR:BRA:BRASIL:SANTA CATARINA:RODEIO
+151:BR:BRA:BRASIL:SANTA CATARINA:ROMELANDIA
+152:BR:BRA:BRASIL:SANTA CATARINA:S.BENTO DO SUL
+153:BR:BRA:BRASIL:SANTA CATARINA:S.JOAO BATISTA
+154:BR:BRA:BRASIL:SANTA CATARINA:S.JOSE D'CERRIT
+155:BR:BRA:BRASIL:SANTA CATARINA:S.JOSE DO CEDRO
+156:BR:BRA:BRASIL:SANTA CATARINA:S.LOURENCO D'OE
+157:BR:BRA:BRASIL:SANTA CATARINA:S.MIGUEL D'OEST
+158:BR:BRA:BRASIL:SANTA CATARINA:SALETE
+159:BR:BRA:BRASIL:SANTA CATARINA:SALTO VELOSO
+160:BR:BRA:BRASIL:SANTA CATARINA:SANTA CECILIA
+161:BR:BRA:BRASIL:SANTA CATARINA:SAO BONIFACIO
+162:BR:BRA:BRASIL:SANTA CATARINA:SAO CARLOS
+163:BR:BRA:BRASIL:SANTA CATARINA:SAO DOMINGOS
+164:BR:BRA:BRASIL:SANTA CATARINA:SAO FCO. DO SUL
+165:BR:BRA:BRASIL:SANTA CATARINA:SAO JOAO DO SUL
+166:BR:BRA:BRASIL:SANTA CATARINA:SAO JOAQUIM
+167:BR:BRA:BRASIL:SANTA CATARINA:SAO JOSE
+168:BR:BRA:BRASIL:SANTA CATARINA:SAO LUDGERO
+169:BR:BRA:BRASIL:SANTA CATARINA:SAO MARTINHO
+170:BR:BRA:BRASIL:SANTA CATARINA:SAUDADES
+171:BR:BRA:BRASIL:SANTA CATARINA:SCHROEDER
+172:BR:BRA:BRASIL:SANTA CATARINA:SEARA
+173:BR:BRA:BRASIL:SANTA CATARINA:SIDEROPOLIS
+174:BR:BRA:BRASIL:SANTA CATARINA:SOMBRIO
+175:BR:BRA:BRASIL:SANTA CATARINA:STA.ROSA DE LIM
+176:BR:BRA:BRASIL:SANTA CATARINA:STO.AMARO D'IMP
+177:BR:BRA:BRASIL:SANTA CATARINA:TAIO
+178:BR:BRA:BRASIL:SANTA CATARINA:TANGARA
+179:BR:BRA:BRASIL:SANTA CATARINA:TIJUCAS
+180:BR:BRA:BRASIL:SANTA CATARINA:TIMBE DO SUL
+181:BR:BRA:BRASIL:SANTA CATARINA:TIMBO
+182:BR:BRA:BRASIL:SANTA CATARINA:TRES BARRAS
+183:BR:BRA:BRASIL:SANTA CATARINA:TREZE DE MAIO
+184:BR:BRA:BRASIL:SANTA CATARINA:TREZE TILIAS
+185:BR:BRA:BRASIL:SANTA CATARINA:TROMBUDO CENTRA
+186:BR:BRA:BRASIL:SANTA CATARINA:TUBARAO
+187:BR:BRA:BRASIL:SANTA CATARINA:TURVO
+188:BR:BRA:BRASIL:SANTA CATARINA:URUBICI
+189:BR:BRA:BRASIL:SANTA CATARINA:URUCANGA
+190:BR:BRA:BRASIL:SANTA CATARINA:VARGEAO
+191:BR:BRA:BRASIL:SANTA CATARINA:VIDAL RAMOS
+192:BR:BRA:BRASIL:SANTA CATARINA:VIDEIRA
+193:BR:BRA:BRASIL:SANTA CATARINA:WITMARSUM
+194:BR:BRA:BRASIL:SANTA CATARINA:XANXERE
+195:BR:BRA:BRASIL:SANTA CATARINA:XAVANTINA
+196:BR:BRA:BRASIL:SANTA CATARINA:XAXIM
+1:BR:BRA:BRASIL:RIO Grande DO SUL:Arroio do Tigre
+2:BR:BRA:BRASIL:RIO Grande DO SUL:Barros Cassal
+1:BR:BRA:BRASIL:MARANHAO/PIAUI:REP. BOA ESPER.
+1:BR:BRA:BRASIL:Capanema:Medianeira
+1:BR:BRA:BRASIL:MATO GROSSO DO SUL:A. CLARA
+2:BR:BRA:BRASIL:MATO GROSSO DO SUL:AMAMBAY
+3:BR:BRA:BRASIL:MATO GROSSO DO SUL:ANASTACIO
+4:BR:BRA:BRASIL:MATO GROSSO DO SUL:ANAURILANDIA
+5:BR:BRA:BRASIL:MATO GROSSO DO SUL:ANGELICA
+6:BR:BRA:BRASIL:MATO GROSSO DO SUL:ANTONIO JOAO
+7:BR:BRA:BRASIL:MATO GROSSO DO SUL:APARECIDA DO TAB
+8:BR:BRA:BRASIL:MATO GROSSO DO SUL:AQUIDAUANA
+9:BR:BRA:BRASIL:MATO GROSSO DO SUL:ARAL MOREIRA
+10:BR:BRA:BRASIL:MATO GROSSO DO SUL:BANDEIRANTES
+11:BR:BRA:BRASIL:MATO GROSSO DO SUL:BATAGUASSU
+12:BR:BRA:BRASIL:MATO GROSSO DO SUL:BATAIPORA
+13:BR:BRA:BRASIL:MATO GROSSO DO SUL:BELA VISTA
+14:BR:BRA:BRASIL:MATO GROSSO DO SUL:BONITO
+15:BR:BRA:BRASIL:MATO GROSSO DO SUL:BRASILANDIA
+16:BR:BRA:BRASIL:MATO GROSSO DO SUL:CAMAPUA
+17:BR:BRA:BRASIL:MATO GROSSO DO SUL:CAMPO GRANDE
+18:BR:BRA:BRASIL:MATO GROSSO DO SUL:CARACOL
+19:BR:BRA:BRASIL:MATO GROSSO DO SUL:CARAPO
+20:BR:BRA:BRASIL:MATO GROSSO DO SUL:CASSILANDIA
+21:BR:BRA:BRASIL:MATO GROSSO DO SUL:CORGUINHO
+22:BR:BRA:BRASIL:MATO GROSSO DO SUL:CORUMBA
+23:BR:BRA:BRASIL:MATO GROSSO DO SUL:COXIM
+24:BR:BRA:BRASIL:MATO GROSSO DO SUL:DEODAPOLIS
+25:BR:BRA:BRASIL:MATO GROSSO DO SUL:DOURADOS
+26:BR:BRA:BRASIL:MATO GROSSO DO SUL:EL DORADO
+27:BR:BRA:BRASIL:MATO GROSSO DO SUL:FATIMA DO SUL
+28:BR:BRA:BRASIL:MATO GROSSO DO SUL:GLORIA DE DOURAD
+29:BR:BRA:BRASIL:MATO GROSSO DO SUL:GUIA LOPES DE LA
+30:BR:BRA:BRASIL:MATO GROSSO DO SUL:IGUATEMI
+31:BR:BRA:BRASIL:MATO GROSSO DO SUL:INOCENCIA
+32:BR:BRA:BRASIL:MATO GROSSO DO SUL:ITAPORA
+33:BR:BRA:BRASIL:MATO GROSSO DO SUL:IVINHEMA
+34:BR:BRA:BRASIL:MATO GROSSO DO SUL:JARAGUARI
+35:BR:BRA:BRASIL:MATO GROSSO DO SUL:JARDIM
+36:BR:BRA:BRASIL:MATO GROSSO DO SUL:JATEI
+37:BR:BRA:BRASIL:MATO GROSSO DO SUL:LADARIO
+38:BR:BRA:BRASIL:MATO GROSSO DO SUL:MARACAJU
+39:BR:BRA:BRASIL:MATO GROSSO DO SUL:MIRANDA
+40:BR:BRA:BRASIL:MATO GROSSO DO SUL:MUNDO NOVO
+41:BR:BRA:BRASIL:MATO GROSSO DO SUL:NAVIRAI
+42:BR:BRA:BRASIL:MATO GROSSO DO SUL:NIOAQUE
+43:BR:BRA:BRASIL:MATO GROSSO DO SUL:NOVA ANDRADINA
+44:BR:BRA:BRASIL:MATO GROSSO DO SUL:P. MURTINHO
+45:BR:BRA:BRASIL:MATO GROSSO DO SUL:PARANAIBA
+46:BR:BRA:BRASIL:MATO GROSSO DO SUL:PEDRO GOMES
+47:BR:BRA:BRASIL:MATO GROSSO DO SUL:PONTA PORA
+48:BR:BRA:BRASIL:MATO GROSSO DO SUL:R. BRILHANTE
+49:BR:BRA:BRASIL:MATO GROSSO DO SUL:R. NEGRO
+50:BR:BRA:BRASIL:MATO GROSSO DO SUL:RIBAS DO R.PARDO
+51:BR:BRA:BRASIL:MATO GROSSO DO SUL:RIO VERDE DE M.G
+52:BR:BRA:BRASIL:MATO GROSSO DO SUL:ROCHEDO
+53:BR:BRA:BRASIL:MATO GROSSO DO SUL:SIDROLANDIA
+54:BR:BRA:BRASIL:MATO GROSSO DO SUL:TERENOS
+55:BR:BRA:BRASIL:MATO GROSSO DO SUL:TRES LAGOAS
+1:BR:BRA:BRASIL:MARANHAO:Afonso Cunha
+2:BR:BRA:BRASIL:MARANHAO:Alcantara
+3:BR:BRA:BRASIL:MARANHAO:Aldeias Altas
+4:BR:BRA:BRASIL:MARANHAO:Altamira do M.
+5:BR:BRA:BRASIL:MARANHAO:Alto Parnaiba
+6:BR:BRA:BRASIL:MARANHAO:Amarante Do Ma
+7:BR:BRA:BRASIL:MARANHAO:Anajatuba
+8:BR:BRA:BRASIL:MARANHAO:Anapuros
+9:BR:BRA:BRASIL:MARANHAO:Araioses
+10:BR:BRA:BRASIL:MARANHAO:Arari
+11:BR:BRA:BRASIL:MARANHAO:Axixa
+12:BR:BRA:BRASIL:MARANHAO:Bacabal
+13:BR:BRA:BRASIL:MARANHAO:Bacabinha
+14:BR:BRA:BRASIL:MARANHAO:Bacuri
+15:BR:BRA:BRASIL:MARANHAO:Balsas
+16:BR:BRA:BRASIL:MARANHAO:Barao De G.
+17:BR:BRA:BRASIL:MARANHAO:Barra do Corda
+18:BR:BRA:BRASIL:MARANHAO:Barreirinhas
+19:BR:BRA:BRASIL:MARANHAO:Benedito Leite
+20:BR:BRA:BRASIL:MARANHAO:Bequimao
+21:BR:BRA:BRASIL:MARANHAO:Bom Jardin
+22:BR:BRA:BRASIL:MARANHAO:Brejo
+23:BR:BRA:BRASIL:MARANHAO:Buriti
+24:BR:BRA:BRASIL:MARANHAO:Buriti Bravo
+25:BR:BRA:BRASIL:MARANHAO:Cajapio
+26:BR:BRA:BRASIL:MARANHAO:Cajari
+27:BR:BRA:BRASIL:MARANHAO:Candido Mendes
+28:BR:BRA:BRASIL:MARANHAO:Cantanhede
+29:BR:BRA:BRASIL:MARANHAO:Carolina
+30:BR:BRA:BRASIL:MARANHAO:Carutapera
+31:BR:BRA:BRASIL:MARANHAO:Caxias
+32:BR:BRA:BRASIL:MARANHAO:Cedral
+33:BR:BRA:BRASIL:MARANHAO:Chapadinha
+34:BR:BRA:BRASIL:MARANHAO:Codo
+35:BR:BRA:BRASIL:MARANHAO:Coelho Neto
+36:BR:BRA:BRASIL:MARANHAO:Colinas
+37:BR:BRA:BRASIL:MARANHAO:Coroata
+38:BR:BRA:BRASIL:MARANHAO:Cururupu
+39:BR:BRA:BRASIL:MARANHAO:Dom Pedro
+40:BR:BRA:BRASIL:MARANHAO:Duque Bacelar
+41:BR:BRA:BRASIL:MARANHAO:Esperantinopolis
+42:BR:BRA:BRASIL:MARANHAO:Fortaleza Das N.
+43:BR:BRA:BRASIL:MARANHAO:Fortuna
+44:BR:BRA:BRASIL:MARANHAO:G. Eugenio B.
+45:BR:BRA:BRASIL:MARANHAO:Godofredo Viana
+46:BR:BRA:BRASIL:MARANHAO:Goncalves Dias
+47:BR:BRA:BRASIL:MARANHAO:Gov. Archer
+48:BR:BRA:BRASIL:MARANHAO:Graca Aranha
+49:BR:BRA:BRASIL:MARANHAO:Grajau
+50:BR:BRA:BRASIL:MARANHAO:Guimaraes
+51:BR:BRA:BRASIL:MARANHAO:Humberto Campos
+52:BR:BRA:BRASIL:MARANHAO:Icatu
+53:BR:BRA:BRASIL:MARANHAO:Igarape Grande
+54:BR:BRA:BRASIL:MARANHAO:Imperatriz
+55:BR:BRA:BRASIL:MARANHAO:Ipixuna
+56:BR:BRA:BRASIL:MARANHAO:Itapecuru-Mirim
+57:BR:BRA:BRASIL:MARANHAO:Joao Lisboa
+58:BR:BRA:BRASIL:MARANHAO:Joselandia
+59:BR:BRA:BRASIL:MARANHAO:Lago Do Junco
+60:BR:BRA:BRASIL:MARANHAO:Lago Verde
+61:BR:BRA:BRASIL:MARANHAO:Lago da Pedra
+62:BR:BRA:BRASIL:MARANHAO:Lima Campos
+63:BR:BRA:BRASIL:MARANHAO:Loreto
+64:BR:BRA:BRASIL:MARANHAO:Luis Domingos
+65:BR:BRA:BRASIL:MARANHAO:Magalhaes De A.
+66:BR:BRA:BRASIL:MARANHAO:Mata Roma
+67:BR:BRA:BRASIL:MARANHAO:Matinha
+68:BR:BRA:BRASIL:MARANHAO:Matoes
+69:BR:BRA:BRASIL:MARANHAO:Mirador
+70:BR:BRA:BRASIL:MARANHAO:Mirinzal
+71:BR:BRA:BRASIL:MARANHAO:Moncao
+72:BR:BRA:BRASIL:MARANHAO:Montes Altos
+73:BR:BRA:BRASIL:MARANHAO:Morros
+74:BR:BRA:BRASIL:MARANHAO:Nina Rodrigues
+75:BR:BRA:BRASIL:MARANHAO:Nova Iorque
+76:BR:BRA:BRASIL:MARANHAO:Olho Dagua D. C.
+77:BR:BRA:BRASIL:MARANHAO:Paco do Lumiar
+78:BR:BRA:BRASIL:MARANHAO:Palmeirandia
+79:BR:BRA:BRASIL:MARANHAO:Paraibano
+80:BR:BRA:BRASIL:MARANHAO:Parnarama
+81:BR:BRA:BRASIL:MARANHAO:Passagem Franca
+82:BR:BRA:BRASIL:MARANHAO:Pastos Bons
+83:BR:BRA:BRASIL:MARANHAO:Pedreiras
+84:BR:BRA:BRASIL:MARANHAO:Penalva
+85:BR:BRA:BRASIL:MARANHAO:Peri-Mirim
+86:BR:BRA:BRASIL:MARANHAO:Pindare-Mirim
+87:BR:BRA:BRASIL:MARANHAO:Pinheiro
+88:BR:BRA:BRASIL:MARANHAO:Pio XII
+89:BR:BRA:BRASIL:MARANHAO:Pirapemas
+90:BR:BRA:BRASIL:MARANHAO:Pocao de Pedras
+91:BR:BRA:BRASIL:MARANHAO:Porto Franco
+92:BR:BRA:BRASIL:MARANHAO:Pres. Juscelino
+93:BR:BRA:BRASIL:MARANHAO:Pres. Vargas
+94:BR:BRA:BRASIL:MARANHAO:Presidente Dutra
+95:BR:BRA:BRASIL:MARANHAO:Primeira Cruz
+96:BR:BRA:BRASIL:MARANHAO:Riachao
+97:BR:BRA:BRASIL:MARANHAO:Rosario
+98:BR:BRA:BRASIL:MARANHAO:S. Benedito R.P
+99:BR:BRA:BRASIL:MARANHAO:S. Bernardo
+100:BR:BRA:BRASIL:MARANHAO:S. Domingo Do M.
+101:BR:BRA:BRASIL:MARANHAO:S. Fco Do Ma.
+102:BR:BRA:BRASIL:MARANHAO:S. Felix de B
+103:BR:BRA:BRASIL:MARANHAO:S. J. Dos P.
+104:BR:BRA:BRASIL:MARANHAO:S. J. de Ribamar
+105:BR:BRA:BRASIL:MARANHAO:S. Luzia
+106:BR:BRA:BRASIL:MARANHAO:S. Raimundo D.M
+107:BR:BRA:BRASIL:MARANHAO:S.Q. Do Maranhao
+108:BR:BRA:BRASIL:MARANHAO:Sambaiba
+109:BR:BRA:BRASIL:MARANHAO:Santa Helena
+110:BR:BRA:BRASIL:MARANHAO:Santa Ines
+111:BR:BRA:BRASIL:MARANHAO:Santa Rita
+112:BR:BRA:BRASIL:MARANHAO:Sao Antonio L.
+113:BR:BRA:BRASIL:MARANHAO:Sao Bento
+114:BR:BRA:BRASIL:MARANHAO:Sao Joao Batista
+115:BR:BRA:BRASIL:MARANHAO:Sao Luis
+116:BR:BRA:BRASIL:MARANHAO:Sao Mateus do Ma
+117:BR:BRA:BRASIL:MARANHAO:Sao Vicente F.
+118:BR:BRA:BRASIL:MARANHAO:Sitio Novo
+119:BR:BRA:BRASIL:MARANHAO:Sucupira Do Nte
+120:BR:BRA:BRASIL:MARANHAO:Tasso Fragoso
+121:BR:BRA:BRASIL:MARANHAO:Timbiras
+122:BR:BRA:BRASIL:MARANHAO:Timon
+123:BR:BRA:BRASIL:MARANHAO:Tuntum
+124:BR:BRA:BRASIL:MARANHAO:Turiacu
+125:BR:BRA:BRASIL:MARANHAO:Tutoia
+126:BR:BRA:BRASIL:MARANHAO:Urbano Santos
+127:BR:BRA:BRASIL:MARANHAO:Vargem Grande
+128:BR:BRA:BRASIL:MARANHAO:Viana
+129:BR:BRA:BRASIL:MARANHAO:Victoria Do M.
+130:BR:BRA:BRASIL:MARANHAO:Victorino Freire
+1:BR:BRA:BRASIL:SAO PAULO:Adamantina
+2:BR:BRA:BRASIL:SAO PAULO:Adolfo
+3:BR:BRA:BRASIL:SAO PAULO:Aguai
+4:BR:BRA:BRASIL:SAO PAULO:Aguas Da Prata
+5:BR:BRA:BRASIL:SAO PAULO:Aguas De Lindoia
+6:BR:BRA:BRASIL:SAO PAULO:Aguas De Sao Ped
+7:BR:BRA:BRASIL:SAO PAULO:Agudos
+8:BR:BRA:BRASIL:SAO PAULO:Alfredo Marconde
+9:BR:BRA:BRASIL:SAO PAULO:Altair
+10:BR:BRA:BRASIL:SAO PAULO:Altinopolis
+11:BR:BRA:BRASIL:SAO PAULO:Alto Alegre
+12:BR:BRA:BRASIL:SAO PAULO:Alvares Florence
+13:BR:BRA:BRASIL:SAO PAULO:Alvares Machado
+14:BR:BRA:BRASIL:SAO PAULO:Alvaro De Carval
+15:BR:BRA:BRASIL:SAO PAULO:Alvinlandia
+16:BR:BRA:BRASIL:SAO PAULO:Americana
+17:BR:BRA:BRASIL:SAO PAULO:Americo Brasilie
+18:BR:BRA:BRASIL:SAO PAULO:Americo De Campo
+19:BR:BRA:BRASIL:SAO PAULO:Amparo
+20:BR:BRA:BRASIL:SAO PAULO:Analandia
+21:BR:BRA:BRASIL:SAO PAULO:Andradina
+22:BR:BRA:BRASIL:SAO PAULO:Angatuba
+23:BR:BRA:BRASIL:SAO PAULO:Anhembi
+24:BR:BRA:BRASIL:SAO PAULO:Anhumas
+25:BR:BRA:BRASIL:SAO PAULO:Aparecida
+26:BR:BRA:BRASIL:SAO PAULO:Aparecida D'Oest
+27:BR:BRA:BRASIL:SAO PAULO:Apiai
+28:BR:BRA:BRASIL:SAO PAULO:Aquera
+29:BR:BRA:BRASIL:SAO PAULO:Aracatuba
+30:BR:BRA:BRASIL:SAO PAULO:Aracoiaba Da Ser
+31:BR:BRA:BRASIL:SAO PAULO:Aramina
+32:BR:BRA:BRASIL:SAO PAULO:Arandu
+33:BR:BRA:BRASIL:SAO PAULO:Araraquara
+34:BR:BRA:BRASIL:SAO PAULO:Araras
+35:BR:BRA:BRASIL:SAO PAULO:Arealva
+36:BR:BRA:BRASIL:SAO PAULO:Areias
+37:BR:BRA:BRASIL:SAO PAULO:Areiopolis
+38:BR:BRA:BRASIL:SAO PAULO:Ariranha
+39:BR:BRA:BRASIL:SAO PAULO:Artur Nogueira
+40:BR:BRA:BRASIL:SAO PAULO:Aruja
+41:BR:BRA:BRASIL:SAO PAULO:Assis
+42:BR:BRA:BRASIL:SAO PAULO:Atibaia
+43:BR:BRA:BRASIL:SAO PAULO:Auriflama
+44:BR:BRA:BRASIL:SAO PAULO:Avai
+45:BR:BRA:BRASIL:SAO PAULO:Avanhandava
+46:BR:BRA:BRASIL:SAO PAULO:Avare
+47:BR:BRA:BRASIL:SAO PAULO:Bady Bassit
+48:BR:BRA:BRASIL:SAO PAULO:Balbinos
+49:BR:BRA:BRASIL:SAO PAULO:Balsamo
+50:BR:BRA:BRASIL:SAO PAULO:Bananal
+51:BR:BRA:BRASIL:SAO PAULO:Barao De Antonin
+52:BR:BRA:BRASIL:SAO PAULO:Barbosa
+53:BR:BRA:BRASIL:SAO PAULO:Bariri
+54:BR:BRA:BRASIL:SAO PAULO:Barra Bonita
+55:BR:BRA:BRASIL:SAO PAULO:Barra Do Turvo
+56:BR:BRA:BRASIL:SAO PAULO:Barretos
+57:BR:BRA:BRASIL:SAO PAULO:Barrinha
+58:BR:BRA:BRASIL:SAO PAULO:Barueri
+59:BR:BRA:BRASIL:SAO PAULO:Bastos
+60:BR:BRA:BRASIL:SAO PAULO:Batatais
+61:BR:BRA:BRASIL:SAO PAULO:Bauru
+62:BR:BRA:BRASIL:SAO PAULO:Bebedouro
+63:BR:BRA:BRASIL:SAO PAULO:Bern. De Campos
+64:BR:BRA:BRASIL:SAO PAULO:Berto De Abreu
+65:BR:BRA:BRASIL:SAO PAULO:Bilac
+66:BR:BRA:BRASIL:SAO PAULO:Birigui
+67:BR:BRA:BRASIL:SAO PAULO:Biritiba Mirim
+68:BR:BRA:BRASIL:SAO PAULO:Boa Esperanca Do
+69:BR:BRA:BRASIL:SAO PAULO:Bocaina
+70:BR:BRA:BRASIL:SAO PAULO:Bofete
+71:BR:BRA:BRASIL:SAO PAULO:Boituva
+72:BR:BRA:BRASIL:SAO PAULO:Bon Jesus Dos Pe
+73:BR:BRA:BRASIL:SAO PAULO:Bora
+74:BR:BRA:BRASIL:SAO PAULO:Boracela
+75:BR:BRA:BRASIL:SAO PAULO:Borborema
+76:BR:BRA:BRASIL:SAO PAULO:Botucatu
+77:BR:BRA:BRASIL:SAO PAULO:Braganca Paulist
+78:BR:BRA:BRASIL:SAO PAULO:Brauna
+79:BR:BRA:BRASIL:SAO PAULO:Brodosqui
+80:BR:BRA:BRASIL:SAO PAULO:Brotas
+81:BR:BRA:BRASIL:SAO PAULO:Buri
+82:BR:BRA:BRASIL:SAO PAULO:Buritama
+83:BR:BRA:BRASIL:SAO PAULO:Buritizal
+84:BR:BRA:BRASIL:SAO PAULO:Cabralia Paulist
+85:BR:BRA:BRASIL:SAO PAULO:Cabreuva
+86:BR:BRA:BRASIL:SAO PAULO:Cacapava
+87:BR:BRA:BRASIL:SAO PAULO:Cachoeira Paulis
+88:BR:BRA:BRASIL:SAO PAULO:Cafelandia
+89:BR:BRA:BRASIL:SAO PAULO:Caiabu
+90:BR:BRA:BRASIL:SAO PAULO:Caieiras
+91:BR:BRA:BRASIL:SAO PAULO:Caiua
+92:BR:BRA:BRASIL:SAO PAULO:Cajamar
+93:BR:BRA:BRASIL:SAO PAULO:Cajobi
+94:BR:BRA:BRASIL:SAO PAULO:Cajuru
+95:BR:BRA:BRASIL:SAO PAULO:Campinas
+96:BR:BRA:BRASIL:SAO PAULO:Campo Do Jordao
+97:BR:BRA:BRASIL:SAO PAULO:Campo Limpo
+98:BR:BRA:BRASIL:SAO PAULO:Campos Novos Pau
+99:BR:BRA:BRASIL:SAO PAULO:Cananeia
+100:BR:BRA:BRASIL:SAO PAULO:Candido Mota
+101:BR:BRA:BRASIL:SAO PAULO:Candido Rodrigue
+102:BR:BRA:BRASIL:SAO PAULO:Capao Bonito
+103:BR:BRA:BRASIL:SAO PAULO:Capela Do Alto
+104:BR:BRA:BRASIL:SAO PAULO:Capivari
+105:BR:BRA:BRASIL:SAO PAULO:Caraguatatuba
+106:BR:BRA:BRASIL:SAO PAULO:Carapicuiba
+107:BR:BRA:BRASIL:SAO PAULO:Cardoso
+108:BR:BRA:BRASIL:SAO PAULO:Casa Branca
+109:BR:BRA:BRASIL:SAO PAULO:Cassia Dos Coque
+110:BR:BRA:BRASIL:SAO PAULO:Castilho
+111:BR:BRA:BRASIL:SAO PAULO:Catanduva
+112:BR:BRA:BRASIL:SAO PAULO:Catingua
+113:BR:BRA:BRASIL:SAO PAULO:Cedral
+114:BR:BRA:BRASIL:SAO PAULO:Cerqueira Cesar
+115:BR:BRA:BRASIL:SAO PAULO:Cerquilho
+116:BR:BRA:BRASIL:SAO PAULO:Cesario Lange
+117:BR:BRA:BRASIL:SAO PAULO:Charqueada
+118:BR:BRA:BRASIL:SAO PAULO:Chavantes
+119:BR:BRA:BRASIL:SAO PAULO:Clementina
+120:BR:BRA:BRASIL:SAO PAULO:Colina
+121:BR:BRA:BRASIL:SAO PAULO:Colombia
+122:BR:BRA:BRASIL:SAO PAULO:Conchal
+123:BR:BRA:BRASIL:SAO PAULO:Conchas
+124:BR:BRA:BRASIL:SAO PAULO:Cordeiropolis
+125:BR:BRA:BRASIL:SAO PAULO:Coroados
+126:BR:BRA:BRASIL:SAO PAULO:Coronel Macedo
+127:BR:BRA:BRASIL:SAO PAULO:Corumbatai
+128:BR:BRA:BRASIL:SAO PAULO:Cosmopolis
+129:BR:BRA:BRASIL:SAO PAULO:Cosmorama
+130:BR:BRA:BRASIL:SAO PAULO:Cotia
+131:BR:BRA:BRASIL:SAO PAULO:Cravinhos
+132:BR:BRA:BRASIL:SAO PAULO:Cristais Paul.
+133:BR:BRA:BRASIL:SAO PAULO:Cruzalia
+134:BR:BRA:BRASIL:SAO PAULO:Cruzeiro
+135:BR:BRA:BRASIL:SAO PAULO:Cubatao
+136:BR:BRA:BRASIL:SAO PAULO:Cunha
+137:BR:BRA:BRASIL:SAO PAULO:Descalvado
+138:BR:BRA:BRASIL:SAO PAULO:Diadema
+139:BR:BRA:BRASIL:SAO PAULO:Dios Corregos
+140:BR:BRA:BRASIL:SAO PAULO:Divinolandia
+141:BR:BRA:BRASIL:SAO PAULO:Dobrada
+142:BR:BRA:BRASIL:SAO PAULO:Dourado
+143:BR:BRA:BRASIL:SAO PAULO:Dracena
+144:BR:BRA:BRASIL:SAO PAULO:Duartina
+145:BR:BRA:BRASIL:SAO PAULO:Dulcinopolis
+146:BR:BRA:BRASIL:SAO PAULO:Dumont
+147:BR:BRA:BRASIL:SAO PAULO:Echapora
+148:BR:BRA:BRASIL:SAO PAULO:El Dorado
+149:BR:BRA:BRASIL:SAO PAULO:Elias Fausto
+150:BR:BRA:BRASIL:SAO PAULO:Embu
+151:BR:BRA:BRASIL:SAO PAULO:Embu Guacu
+152:BR:BRA:BRASIL:SAO PAULO:Estrela D'Oeste
+153:BR:BRA:BRASIL:SAO PAULO:Estrela do norte
+154:BR:BRA:BRASIL:SAO PAULO:Fartura
+155:BR:BRA:BRASIL:SAO PAULO:Fernando Prestes
+156:BR:BRA:BRASIL:SAO PAULO:Fernandopolis
+157:BR:BRA:BRASIL:SAO PAULO:Ferraz de Vascon
+158:BR:BRA:BRASIL:SAO PAULO:Flora Rica
+159:BR:BRA:BRASIL:SAO PAULO:Floreal
+160:BR:BRA:BRASIL:SAO PAULO:Florida Paulista
+161:BR:BRA:BRASIL:SAO PAULO:Franca
+162:BR:BRA:BRASIL:SAO PAULO:Francisco Morato
+163:BR:BRA:BRASIL:SAO PAULO:Franco Da Rocha
+164:BR:BRA:BRASIL:SAO PAULO:Galai
+165:BR:BRA:BRASIL:SAO PAULO:Garca
+166:BR:BRA:BRASIL:SAO PAULO:Gastao Vidigal
+167:BR:BRA:BRASIL:SAO PAULO:General Salgado
+168:BR:BRA:BRASIL:SAO PAULO:Getulina
+169:BR:BRA:BRASIL:SAO PAULO:Glicerio
+170:BR:BRA:BRASIL:SAO PAULO:Guaicara
+171:BR:BRA:BRASIL:SAO PAULO:Guaimbe
+172:BR:BRA:BRASIL:SAO PAULO:Guaira
+173:BR:BRA:BRASIL:SAO PAULO:Guapiara
+174:BR:BRA:BRASIL:SAO PAULO:Guara
+175:BR:BRA:BRASIL:SAO PAULO:Guaracai
+176:BR:BRA:BRASIL:SAO PAULO:Guaraci
+177:BR:BRA:BRASIL:SAO PAULO:Guarani d"Oeste
+178:BR:BRA:BRASIL:SAO PAULO:Guaranta
+179:BR:BRA:BRASIL:SAO PAULO:Guarantingueta
+180:BR:BRA:BRASIL:SAO PAULO:Guararapes
+181:BR:BRA:BRASIL:SAO PAULO:Guararema
+182:BR:BRA:BRASIL:SAO PAULO:Guarei
+183:BR:BRA:BRASIL:SAO PAULO:Guariba
+184:BR:BRA:BRASIL:SAO PAULO:Guaruja
+185:BR:BRA:BRASIL:SAO PAULO:Guarulhos
+186:BR:BRA:BRASIL:SAO PAULO:Guzolandia
+187:BR:BRA:BRASIL:SAO PAULO:Herculandia
+188:BR:BRA:BRASIL:SAO PAULO:Iacanga
+189:BR:BRA:BRASIL:SAO PAULO:Iacri
+190:BR:BRA:BRASIL:SAO PAULO:Ibate
+191:BR:BRA:BRASIL:SAO PAULO:Ibira
+192:BR:BRA:BRASIL:SAO PAULO:Ibirarema
+193:BR:BRA:BRASIL:SAO PAULO:Ibitinga
+194:BR:BRA:BRASIL:SAO PAULO:Ibuina
+195:BR:BRA:BRASIL:SAO PAULO:Icem
+196:BR:BRA:BRASIL:SAO PAULO:Iepe
+197:BR:BRA:BRASIL:SAO PAULO:Igaraca Do Tiete
+198:BR:BRA:BRASIL:SAO PAULO:Igarapava
+199:BR:BRA:BRASIL:SAO PAULO:Igarata
+200:BR:BRA:BRASIL:SAO PAULO:Iguape
+201:BR:BRA:BRASIL:SAO PAULO:Ilhabela
+202:BR:BRA:BRASIL:SAO PAULO:Indaiatuba
+203:BR:BRA:BRASIL:SAO PAULO:Indiana
+204:BR:BRA:BRASIL:SAO PAULO:Indiapora
+205:BR:BRA:BRASIL:SAO PAULO:Inubia Paulista
+206:BR:BRA:BRASIL:SAO PAULO:Ipaucu
+207:BR:BRA:BRASIL:SAO PAULO:Ipero
+208:BR:BRA:BRASIL:SAO PAULO:Ipeuna
+209:BR:BRA:BRASIL:SAO PAULO:Iporanga
+210:BR:BRA:BRASIL:SAO PAULO:Ipua
+211:BR:BRA:BRASIL:SAO PAULO:Iracemapolis
+212:BR:BRA:BRASIL:SAO PAULO:Irapua
+213:BR:BRA:BRASIL:SAO PAULO:Irapuru
+214:BR:BRA:BRASIL:SAO PAULO:Itabera
+215:BR:BRA:BRASIL:SAO PAULO:Itai
+216:BR:BRA:BRASIL:SAO PAULO:Itajobi
+217:BR:BRA:BRASIL:SAO PAULO:Itaju
+218:BR:BRA:BRASIL:SAO PAULO:Itanhaem
+219:BR:BRA:BRASIL:SAO PAULO:Itapecerica Da S
+220:BR:BRA:BRASIL:SAO PAULO:Itapetininga
+221:BR:BRA:BRASIL:SAO PAULO:Itapeva
+222:BR:BRA:BRASIL:SAO PAULO:Itapevi
+223:BR:BRA:BRASIL:SAO PAULO:Itapolis
+224:BR:BRA:BRASIL:SAO PAULO:Itaporanga
+225:BR:BRA:BRASIL:SAO PAULO:Itapui
+226:BR:BRA:BRASIL:SAO PAULO:Itapura
+227:BR:BRA:BRASIL:SAO PAULO:Itaquaquecetuba
+228:BR:BRA:BRASIL:SAO PAULO:Itarare
+229:BR:BRA:BRASIL:SAO PAULO:Itariri
+230:BR:BRA:BRASIL:SAO PAULO:Itatiba
+231:BR:BRA:BRASIL:SAO PAULO:Itatinga
+232:BR:BRA:BRASIL:SAO PAULO:Itirapina
+233:BR:BRA:BRASIL:SAO PAULO:Itirapua
+234:BR:BRA:BRASIL:SAO PAULO:Itobi
+235:BR:BRA:BRASIL:SAO PAULO:Itu
+236:BR:BRA:BRASIL:SAO PAULO:Itupeva
+237:BR:BRA:BRASIL:SAO PAULO:Ituverava
+238:BR:BRA:BRASIL:SAO PAULO:Jaborandi
+239:BR:BRA:BRASIL:SAO PAULO:Jabuticabal
+240:BR:BRA:BRASIL:SAO PAULO:Jacarei
+241:BR:BRA:BRASIL:SAO PAULO:Jaci
+242:BR:BRA:BRASIL:SAO PAULO:Jacupiranga
+243:BR:BRA:BRASIL:SAO PAULO:Jaguariuna
+244:BR:BRA:BRASIL:SAO PAULO:Jales
+245:BR:BRA:BRASIL:SAO PAULO:Jambeiro
+246:BR:BRA:BRASIL:SAO PAULO:Jandira
+247:BR:BRA:BRASIL:SAO PAULO:Jaragua
+248:BR:BRA:BRASIL:SAO PAULO:Jardinopolis
+249:BR:BRA:BRASIL:SAO PAULO:Jarinu
+250:BR:BRA:BRASIL:SAO PAULO:Jau
+251:BR:BRA:BRASIL:SAO PAULO:Jeriquara
+252:BR:BRA:BRASIL:SAO PAULO:Joanopolis
+253:BR:BRA:BRASIL:SAO PAULO:Joao Ramalho
+254:BR:BRA:BRASIL:SAO PAULO:Jose Bonifacio
+255:BR:BRA:BRASIL:SAO PAULO:Julio Mesquita
+256:BR:BRA:BRASIL:SAO PAULO:Jundiai
+257:BR:BRA:BRASIL:SAO PAULO:Junqueiropolis
+258:BR:BRA:BRASIL:SAO PAULO:Juquia
+259:BR:BRA:BRASIL:SAO PAULO:Juquitiba
+260:BR:BRA:BRASIL:SAO PAULO:Lagoinha
+261:BR:BRA:BRASIL:SAO PAULO:Laranjal Paulist
+262:BR:BRA:BRASIL:SAO PAULO:Lavinia
+263:BR:BRA:BRASIL:SAO PAULO:Lavrinhas
+264:BR:BRA:BRASIL:SAO PAULO:Leme
+265:BR:BRA:BRASIL:SAO PAULO:Lencois Paulista
+266:BR:BRA:BRASIL:SAO PAULO:Limeira
+267:BR:BRA:BRASIL:SAO PAULO:Lindoia
+268:BR:BRA:BRASIL:SAO PAULO:Lins
+269:BR:BRA:BRASIL:SAO PAULO:Lorena
+270:BR:BRA:BRASIL:SAO PAULO:Louveira
+271:BR:BRA:BRASIL:SAO PAULO:Lucelia
+272:BR:BRA:BRASIL:SAO PAULO:Lucianopolis
+273:BR:BRA:BRASIL:SAO PAULO:Luis Antonio
+274:BR:BRA:BRASIL:SAO PAULO:Luisiania
+275:BR:BRA:BRASIL:SAO PAULO:Lupercio
+276:BR:BRA:BRASIL:SAO PAULO:Lutecia
+277:BR:BRA:BRASIL:SAO PAULO:Macatuba
+278:BR:BRA:BRASIL:SAO PAULO:Macaubal
+279:BR:BRA:BRASIL:SAO PAULO:Macedonia
+280:BR:BRA:BRASIL:SAO PAULO:Magda
+281:BR:BRA:BRASIL:SAO PAULO:Mairinque
+282:BR:BRA:BRASIL:SAO PAULO:Mairipora
+283:BR:BRA:BRASIL:SAO PAULO:Manduri
+284:BR:BRA:BRASIL:SAO PAULO:Maraba Paulista
+285:BR:BRA:BRASIL:SAO PAULO:Maracai
+286:BR:BRA:BRASIL:SAO PAULO:Mariapolis
+287:BR:BRA:BRASIL:SAO PAULO:Marilia
+288:BR:BRA:BRASIL:SAO PAULO:Marinopolis
+289:BR:BRA:BRASIL:SAO PAULO:Martinopolis
+290:BR:BRA:BRASIL:SAO PAULO:Matao
+291:BR:BRA:BRASIL:SAO PAULO:Maua
+292:BR:BRA:BRASIL:SAO PAULO:Mendonca
+293:BR:BRA:BRASIL:SAO PAULO:Meridiano
+294:BR:BRA:BRASIL:SAO PAULO:Miguelopolis
+295:BR:BRA:BRASIL:SAO PAULO:Mineiros do Tiet
+296:BR:BRA:BRASIL:SAO PAULO:Mira Estrela
+297:BR:BRA:BRASIL:SAO PAULO:Miracatu
+298:BR:BRA:BRASIL:SAO PAULO:Mirandopolis
+299:BR:BRA:BRASIL:SAO PAULO:Mirante Do Paran
+300:BR:BRA:BRASIL:SAO PAULO:Mirassol
+301:BR:BRA:BRASIL:SAO PAULO:Mirassolandia
+302:BR:BRA:BRASIL:SAO PAULO:Mococa
+303:BR:BRA:BRASIL:SAO PAULO:Mogi Das Cruzes
+304:BR:BRA:BRASIL:SAO PAULO:Mogi Guacu
+305:BR:BRA:BRASIL:SAO PAULO:Mogi Mirim
+306:BR:BRA:BRASIL:SAO PAULO:Mombuca
+307:BR:BRA:BRASIL:SAO PAULO:Moncoes
+308:BR:BRA:BRASIL:SAO PAULO:Mongagua
+309:BR:BRA:BRASIL:SAO PAULO:Monte Alto
+310:BR:BRA:BRASIL:SAO PAULO:Monte Aprazivel
+311:BR:BRA:BRASIL:SAO PAULO:Monte Azul Pauli
+312:BR:BRA:BRASIL:SAO PAULO:Monte Castelo
+313:BR:BRA:BRASIL:SAO PAULO:Monteiro
+314:BR:BRA:BRASIL:SAO PAULO:Monteiro Lobato
+315:BR:BRA:BRASIL:SAO PAULO:Morro Agudo
+316:BR:BRA:BRASIL:SAO PAULO:Morungaba
+317:BR:BRA:BRASIL:SAO PAULO:Mte Alegre Do Su
+318:BR:BRA:BRASIL:SAO PAULO:Murutinga Do Sul
+319:BR:BRA:BRASIL:SAO PAULO:Narandiba
+320:BR:BRA:BRASIL:SAO PAULO:Natividade Da Se
+321:BR:BRA:BRASIL:SAO PAULO:Nazare Paulista
+322:BR:BRA:BRASIL:SAO PAULO:Neves Paulista
+323:BR:BRA:BRASIL:SAO PAULO:Nhandeara
+324:BR:BRA:BRASIL:SAO PAULO:Nipoa
+325:BR:BRA:BRASIL:SAO PAULO:Nova Alianca
+326:BR:BRA:BRASIL:SAO PAULO:Nova Europa
+327:BR:BRA:BRASIL:SAO PAULO:Nova Granada
+328:BR:BRA:BRASIL:SAO PAULO:Nova Guataporang
+329:BR:BRA:BRASIL:SAO PAULO:Nova Independenc
+330:BR:BRA:BRASIL:SAO PAULO:Nova Luzitania
+331:BR:BRA:BRASIL:SAO PAULO:Nova Odessa
+332:BR:BRA:BRASIL:SAO PAULO:Novo Horizonte
+333:BR:BRA:BRASIL:SAO PAULO:Nuporanga
+334:BR:BRA:BRASIL:SAO PAULO:Ocaucu
+335:BR:BRA:BRASIL:SAO PAULO:Oleo
+336:BR:BRA:BRASIL:SAO PAULO:Olimpia
+337:BR:BRA:BRASIL:SAO PAULO:Onda Verde
+338:BR:BRA:BRASIL:SAO PAULO:Oriente
+339:BR:BRA:BRASIL:SAO PAULO:Orindiuva
+340:BR:BRA:BRASIL:SAO PAULO:Orlandia
+341:BR:BRA:BRASIL:SAO PAULO:Osasco
+342:BR:BRA:BRASIL:SAO PAULO:Oscar Bressane
+343:BR:BRA:BRASIL:SAO PAULO:Osvaldo Cruz
+344:BR:BRA:BRASIL:SAO PAULO:Ourinhos
+345:BR:BRA:BRASIL:SAO PAULO:Pacaembu
+346:BR:BRA:BRASIL:SAO PAULO:Palestina
+347:BR:BRA:BRASIL:SAO PAULO:Palmares Paulist
+348:BR:BRA:BRASIL:SAO PAULO:Palmeira D'Oeste
+349:BR:BRA:BRASIL:SAO PAULO:Palmital
+350:BR:BRA:BRASIL:SAO PAULO:Panorama
+351:BR:BRA:BRASIL:SAO PAULO:Paraguacu Paulis
+352:BR:BRA:BRASIL:SAO PAULO:Paraibuna
+353:BR:BRA:BRASIL:SAO PAULO:Paraiso
+354:BR:BRA:BRASIL:SAO PAULO:Paranaparema
+355:BR:BRA:BRASIL:SAO PAULO:Paranapua
+356:BR:BRA:BRASIL:SAO PAULO:Parapua
+357:BR:BRA:BRASIL:SAO PAULO:Pardinho
+358:BR:BRA:BRASIL:SAO PAULO:Parelheiros
+359:BR:BRA:BRASIL:SAO PAULO:Pariquera-acu
+360:BR:BRA:BRASIL:SAO PAULO:Patrocinio Pauli
+361:BR:BRA:BRASIL:SAO PAULO:Pauliceia
+362:BR:BRA:BRASIL:SAO PAULO:Paulinia
+363:BR:BRA:BRASIL:SAO PAULO:Paulo De Faria
+364:BR:BRA:BRASIL:SAO PAULO:Pederneiras
+365:BR:BRA:BRASIL:SAO PAULO:Pedra Bela
+366:BR:BRA:BRASIL:SAO PAULO:Pedranopolis
+367:BR:BRA:BRASIL:SAO PAULO:Pedregulho
+368:BR:BRA:BRASIL:SAO PAULO:Pedreira
+369:BR:BRA:BRASIL:SAO PAULO:Pedro De Toledo
+370:BR:BRA:BRASIL:SAO PAULO:Penapolis
+371:BR:BRA:BRASIL:SAO PAULO:Pereira Barreto
+372:BR:BRA:BRASIL:SAO PAULO:Pereiras
+373:BR:BRA:BRASIL:SAO PAULO:Peruibe
+374:BR:BRA:BRASIL:SAO PAULO:Piacatu
+375:BR:BRA:BRASIL:SAO PAULO:Piedade
+376:BR:BRA:BRASIL:SAO PAULO:Pilar Do Sul
+377:BR:BRA:BRASIL:SAO PAULO:Pindamonhangaba
+378:BR:BRA:BRASIL:SAO PAULO:Pindorama
+379:BR:BRA:BRASIL:SAO PAULO:Pinhal
+380:BR:BRA:BRASIL:SAO PAULO:Pinhalzinho
+381:BR:BRA:BRASIL:SAO PAULO:Piquerobi
+382:BR:BRA:BRASIL:SAO PAULO:Piquete
+383:BR:BRA:BRASIL:SAO PAULO:Piracaia
+384:BR:BRA:BRASIL:SAO PAULO:Piracicaba
+385:BR:BRA:BRASIL:SAO PAULO:Piracununga
+386:BR:BRA:BRASIL:SAO PAULO:Piraju
+387:BR:BRA:BRASIL:SAO PAULO:Pirajui
+388:BR:BRA:BRASIL:SAO PAULO:Pirangi
+389:BR:BRA:BRASIL:SAO PAULO:Pirapora Do Bom
+390:BR:BRA:BRASIL:SAO PAULO:Pirapozinho
+391:BR:BRA:BRASIL:SAO PAULO:Piratininga
+392:BR:BRA:BRASIL:SAO PAULO:Pitangueiras
+393:BR:BRA:BRASIL:SAO PAULO:Planalto
+394:BR:BRA:BRASIL:SAO PAULO:Platina
+395:BR:BRA:BRASIL:SAO PAULO:Poa
+396:BR:BRA:BRASIL:SAO PAULO:Poloni
+397:BR:BRA:BRASIL:SAO PAULO:Pompeia
+398:BR:BRA:BRASIL:SAO PAULO:Pongai
+399:BR:BRA:BRASIL:SAO PAULO:Pontal
+400:BR:BRA:BRASIL:SAO PAULO:Pontes Gestral
+401:BR:BRA:BRASIL:SAO PAULO:Populina
+402:BR:BRA:BRASIL:SAO PAULO:Porangaba
+403:BR:BRA:BRASIL:SAO PAULO:Porto Feliz
+404:BR:BRA:BRASIL:SAO PAULO:Porto Ferreira
+405:BR:BRA:BRASIL:SAO PAULO:Potirendaba
+406:BR:BRA:BRASIL:SAO PAULO:Pradopolis
+407:BR:BRA:BRASIL:SAO PAULO:Praia Grande
+408:BR:BRA:BRASIL:SAO PAULO:Pres Bernardes
+409:BR:BRA:BRASIL:SAO PAULO:Pres Epitacio
+410:BR:BRA:BRASIL:SAO PAULO:Pres Prudente
+411:BR:BRA:BRASIL:SAO PAULO:Pres Venceslau
+412:BR:BRA:BRASIL:SAO PAULO:Presidente Alves
+413:BR:BRA:BRASIL:SAO PAULO:Promissao
+414:BR:BRA:BRASIL:SAO PAULO:Quata
+415:BR:BRA:BRASIL:SAO PAULO:Queiroz
+416:BR:BRA:BRASIL:SAO PAULO:Queluz
+417:BR:BRA:BRASIL:SAO PAULO:Quitana
+418:BR:BRA:BRASIL:SAO PAULO:Rafard
+419:BR:BRA:BRASIL:SAO PAULO:Rancharia
+420:BR:BRA:BRASIL:SAO PAULO:Rebeirao Vermelh
+421:BR:BRA:BRASIL:SAO PAULO:Redencao Da Serr
+422:BR:BRA:BRASIL:SAO PAULO:Regente Feijo
+423:BR:BRA:BRASIL:SAO PAULO:Reginopolis
+424:BR:BRA:BRASIL:SAO PAULO:Registro
+425:BR:BRA:BRASIL:SAO PAULO:Restinga
+426:BR:BRA:BRASIL:SAO PAULO:Ribeira
+427:BR:BRA:BRASIL:SAO PAULO:Ribeirao Bonito
+428:BR:BRA:BRASIL:SAO PAULO:Ribeirao Do Sul
+429:BR:BRA:BRASIL:SAO PAULO:Ribeirao Preto
+430:BR:BRA:BRASIL:SAO PAULO:Ribeirao branco
+431:BR:BRA:BRASIL:SAO PAULO:Riberao Corrente
+432:BR:BRA:BRASIL:SAO PAULO:Rifaina
+433:BR:BRA:BRASIL:SAO PAULO:Rincao
+434:BR:BRA:BRASIL:SAO PAULO:Rinopolis
+435:BR:BRA:BRASIL:SAO PAULO:Rio Claro
+436:BR:BRA:BRASIL:SAO PAULO:Rio Das Pedras
+437:BR:BRA:BRASIL:SAO PAULO:Rio Grande Da Se
+438:BR:BRA:BRASIL:SAO PAULO:Riolandia
+439:BR:BRA:BRASIL:SAO PAULO:Robeirao Pires
+440:BR:BRA:BRASIL:SAO PAULO:Roseira
+441:BR:BRA:BRASIL:SAO PAULO:Rubiacea
+442:BR:BRA:BRASIL:SAO PAULO:S. Joao Da Boa V
+443:BR:BRA:BRASIL:SAO PAULO:Sabino
+444:BR:BRA:BRASIL:SAO PAULO:Sagres
+445:BR:BRA:BRASIL:SAO PAULO:Sales
+446:BR:BRA:BRASIL:SAO PAULO:Sales Oliveira
+447:BR:BRA:BRASIL:SAO PAULO:Salesopolis
+448:BR:BRA:BRASIL:SAO PAULO:Salmourao
+449:BR:BRA:BRASIL:SAO PAULO:Salto
+450:BR:BRA:BRASIL:SAO PAULO:Salto Do Pirapor
+451:BR:BRA:BRASIL:SAO PAULO:Salto Grande
+452:BR:BRA:BRASIL:SAO PAULO:San Pedro
+453:BR:BRA:BRASIL:SAO PAULO:Sandovalina
+454:BR:BRA:BRASIL:SAO PAULO:Santa Adelia
+455:BR:BRA:BRASIL:SAO PAULO:Santa Albertina
+456:BR:BRA:BRASIL:SAO PAULO:Santa Barbara Do
+457:BR:BRA:BRASIL:SAO PAULO:Santa Barbara d"
+458:BR:BRA:BRASIL:SAO PAULO:Santa Branca
+459:BR:BRA:BRASIL:SAO PAULO:Santa Cruz Das P
+460:BR:BRA:BRASIL:SAO PAULO:Santa Cruz Do Ri
+461:BR:BRA:BRASIL:SAO PAULO:Santa Ernestina
+462:BR:BRA:BRASIL:SAO PAULO:Santa Fe Do Sul
+463:BR:BRA:BRASIL:SAO PAULO:Santa Gertrudes
+464:BR:BRA:BRASIL:SAO PAULO:Santa Isabel
+465:BR:BRA:BRASIL:SAO PAULO:Santa Lucia
+466:BR:BRA:BRASIL:SAO PAULO:Santa Mercedes
+467:BR:BRA:BRASIL:SAO PAULO:Santa Rosa De Vi
+468:BR:BRA:BRASIL:SAO PAULO:Santana Da Ponte
+469:BR:BRA:BRASIL:SAO PAULO:Santana De Parna
+470:BR:BRA:BRASIL:SAO PAULO:Santo Anastacio
+471:BR:BRA:BRASIL:SAO PAULO:Santo Andre
+472:BR:BRA:BRASIL:SAO PAULO:Santo Antonio Do
+473:BR:BRA:BRASIL:SAO PAULO:Santopolis Do Ag
+474:BR:BRA:BRASIL:SAO PAULO:Santos
+475:BR:BRA:BRASIL:SAO PAULO:Sao Bento Do Sap
+476:BR:BRA:BRASIL:SAO PAULO:Sao Bernardo do
+477:BR:BRA:BRASIL:SAO PAULO:Sao Caetano do S
+478:BR:BRA:BRASIL:SAO PAULO:Sao Carlos
+479:BR:BRA:BRASIL:SAO PAULO:Sao Francisco
+480:BR:BRA:BRASIL:SAO PAULO:Sao Joao Das Dua
+481:BR:BRA:BRASIL:SAO PAULO:Sao Joao Do Pau
+482:BR:BRA:BRASIL:SAO PAULO:Sao Joaquim da B
+483:BR:BRA:BRASIL:SAO PAULO:Sao Jose Da Bela
+484:BR:BRA:BRASIL:SAO PAULO:Sao Jose Do Barr
+485:BR:BRA:BRASIL:SAO PAULO:Sao Jose do Rio
+486:BR:BRA:BRASIL:SAO PAULO:Sao Jose dos Cam
+487:BR:BRA:BRASIL:SAO PAULO:Sao Luis Do Para
+488:BR:BRA:BRASIL:SAO PAULO:Sao Manuel
+489:BR:BRA:BRASIL:SAO PAULO:Sao Miguel Arcan
+490:BR:BRA:BRASIL:SAO PAULO:Sao Paulo
+491:BR:BRA:BRASIL:SAO PAULO:Sao Pedro Do Tur
+492:BR:BRA:BRASIL:SAO PAULO:Sao Sebastiao
+493:BR:BRA:BRASIL:SAO PAULO:Sao Sebastiao Da
+494:BR:BRA:BRASIL:SAO PAULO:Sao Simao
+495:BR:BRA:BRASIL:SAO PAULO:Sao roque
+496:BR:BRA:BRASIL:SAO PAULO:Sao vicente
+497:BR:BRA:BRASIL:SAO PAULO:Sarapui
+498:BR:BRA:BRASIL:SAO PAULO:Sarutaia
+499:BR:BRA:BRASIL:SAO PAULO:Sat. Clara D'Oes
+500:BR:BRA:BRASIL:SAO PAULO:Sebastianopolis
+501:BR:BRA:BRASIL:SAO PAULO:Serra Azul
+502:BR:BRA:BRASIL:SAO PAULO:Serra Negra
+503:BR:BRA:BRASIL:SAO PAULO:Serrana
+504:BR:BRA:BRASIL:SAO PAULO:Sertaozinho
+505:BR:BRA:BRASIL:SAO PAULO:Sete Barras
+506:BR:BRA:BRASIL:SAO PAULO:Severinia
+507:BR:BRA:BRASIL:SAO PAULO:Silveiras
+508:BR:BRA:BRASIL:SAO PAULO:Socorro
+509:BR:BRA:BRASIL:SAO PAULO:Sorocaba
+510:BR:BRA:BRASIL:SAO PAULO:Sta. Cruz Da Con
+511:BR:BRA:BRASIL:SAO PAULO:Sta. Maria da Se
+512:BR:BRA:BRASIL:SAO PAULO:Sta. Rita Do Oes
+513:BR:BRA:BRASIL:SAO PAULO:Sta.Rita do Pass
+514:BR:BRA:BRASIL:SAO PAULO:Sto Expedito
+515:BR:BRA:BRASIL:SAO PAULO:Sto. Antonio De
+516:BR:BRA:BRASIL:SAO PAULO:Sto. Antonio Do
+517:BR:BRA:BRASIL:SAO PAULO:Sto.Antonio da A
+518:BR:BRA:BRASIL:SAO PAULO:Sud Mennucci
+519:BR:BRA:BRASIL:SAO PAULO:Surame
+520:BR:BRA:BRASIL:SAO PAULO:Suzano
+521:BR:BRA:BRASIL:SAO PAULO:Tabapua
+522:BR:BRA:BRASIL:SAO PAULO:Tabatinga
+523:BR:BRA:BRASIL:SAO PAULO:Taboao Da Serra
+524:BR:BRA:BRASIL:SAO PAULO:Taciba
+525:BR:BRA:BRASIL:SAO PAULO:Taguai
+526:BR:BRA:BRASIL:SAO PAULO:Taiacu
+527:BR:BRA:BRASIL:SAO PAULO:Taiuva
+528:BR:BRA:BRASIL:SAO PAULO:Tambau
+529:BR:BRA:BRASIL:SAO PAULO:Tanabi
+530:BR:BRA:BRASIL:SAO PAULO:Tapirai
+531:BR:BRA:BRASIL:SAO PAULO:Tapiratiba
+532:BR:BRA:BRASIL:SAO PAULO:Taquaritinga
+533:BR:BRA:BRASIL:SAO PAULO:Taquarituba
+534:BR:BRA:BRASIL:SAO PAULO:Tarabai
+535:BR:BRA:BRASIL:SAO PAULO:Tatui
+536:BR:BRA:BRASIL:SAO PAULO:Taubate
+537:BR:BRA:BRASIL:SAO PAULO:Tejupa
+538:BR:BRA:BRASIL:SAO PAULO:Teodoro Sampaio
+539:BR:BRA:BRASIL:SAO PAULO:Terra Roxa
+540:BR:BRA:BRASIL:SAO PAULO:Tiete
+541:BR:BRA:BRASIL:SAO PAULO:Timburi
+542:BR:BRA:BRASIL:SAO PAULO:Torrinha
+543:BR:BRA:BRASIL:SAO PAULO:Tremembe
+544:BR:BRA:BRASIL:SAO PAULO:Tres Fronteiras
+545:BR:BRA:BRASIL:SAO PAULO:Tupa
+546:BR:BRA:BRASIL:SAO PAULO:Tupi Paulista
+547:BR:BRA:BRASIL:SAO PAULO:Turiuba
+548:BR:BRA:BRASIL:SAO PAULO:Turmalina
+549:BR:BRA:BRASIL:SAO PAULO:Ubatuba
+550:BR:BRA:BRASIL:SAO PAULO:Ubirajara
+551:BR:BRA:BRASIL:SAO PAULO:Uchoa
+552:BR:BRA:BRASIL:SAO PAULO:Uniao Paulista
+553:BR:BRA:BRASIL:SAO PAULO:Urania
+554:BR:BRA:BRASIL:SAO PAULO:Uru
+555:BR:BRA:BRASIL:SAO PAULO:Urupes
+556:BR:BRA:BRASIL:SAO PAULO:Valentim Gentil
+557:BR:BRA:BRASIL:SAO PAULO:Valinhos
+558:BR:BRA:BRASIL:SAO PAULO:Valparaiso
+559:BR:BRA:BRASIL:SAO PAULO:Vargem Grande Do
+560:BR:BRA:BRASIL:SAO PAULO:Varzea Paulista
+561:BR:BRA:BRASIL:SAO PAULO:Vera Cruz
+562:BR:BRA:BRASIL:SAO PAULO:Verde
+563:BR:BRA:BRASIL:SAO PAULO:Vinhedo
+564:BR:BRA:BRASIL:SAO PAULO:Viradouro
+565:BR:BRA:BRASIL:SAO PAULO:Vista alegre do
+566:BR:BRA:BRASIL:SAO PAULO:Votuporanga
+1:BR:BRA:BRASIL:PARANA:Abatia
+2:BR:BRA:BRASIL:PARANA:Adrianopolis
+3:BR:BRA:BRASIL:PARANA:Agudos do Sul
+4:BR:BRA:BRASIL:PARANA:Alm Tamandare
+5:BR:BRA:BRASIL:PARANA:Alto Parana
+6:BR:BRA:BRASIL:PARANA:Alto Piquiri
+7:BR:BRA:BRASIL:PARANA:Altonia
+8:BR:BRA:BRASIL:PARANA:Alvorada do Sul
+9:BR:BRA:BRASIL:PARANA:Amapora
+10:BR:BRA:BRASIL:PARANA:Ampere
+11:BR:BRA:BRASIL:PARANA:Andira
+12:BR:BRA:BRASIL:PARANA:Antonina
+13:BR:BRA:BRASIL:PARANA:Antonio Olinto
+14:BR:BRA:BRASIL:PARANA:Apucarana
+15:BR:BRA:BRASIL:PARANA:Arapongas
+16:BR:BRA:BRASIL:PARANA:Arapoti
+17:BR:BRA:BRASIL:PARANA:Araruna
+18:BR:BRA:BRASIL:PARANA:Araucaria
+19:BR:BRA:BRASIL:PARANA:Assai
+20:BR:BRA:BRASIL:PARANA:Assis Chateaubri
+21:BR:BRA:BRASIL:PARANA:Astorga
+22:BR:BRA:BRASIL:PARANA:Atalaia
+23:BR:BRA:BRASIL:PARANA:Balsa Nova
+24:BR:BRA:BRASIL:PARANA:Bandeirantes
+25:BR:BRA:BRASIL:PARANA:Barbosa Ferraz
+26:BR:BRA:BRASIL:PARANA:Barra do Jacare
+27:BR:BRA:BRASIL:PARANA:Barracao
+28:BR:BRA:BRASIL:PARANA:Bela  Vista do P
+29:BR:BRA:BRASIL:PARANA:Bituruna
+30:BR:BRA:BRASIL:PARANA:Boa Esperanca
+31:BR:BRA:BRASIL:PARANA:Bocaiuva do Sul
+32:BR:BRA:BRASIL:PARANA:Bom Sucesso
+33:BR:BRA:BRASIL:PARANA:Borrazopolis
+34:BR:BRA:BRASIL:PARANA:Cafeara
+35:BR:BRA:BRASIL:PARANA:California
+36:BR:BRA:BRASIL:PARANA:Cambara
+37:BR:BRA:BRASIL:PARANA:Cambe
+38:BR:BRA:BRASIL:PARANA:Cambira
+39:BR:BRA:BRASIL:PARANA:Campina Grande d
+40:BR:BRA:BRASIL:PARANA:Campina da lagoa
+41:BR:BRA:BRASIL:PARANA:Campo
+42:BR:BRA:BRASIL:PARANA:Campo Mourao
+43:BR:BRA:BRASIL:PARANA:Campo do Tenente
+44:BR:BRA:BRASIL:PARANA:Candido de Abreu
+45:BR:BRA:BRASIL:PARANA:Cap. Leonidas Ma
+46:BR:BRA:BRASIL:PARANA:Carlopolis
+47:BR:BRA:BRASIL:PARANA:Cascavel
+48:BR:BRA:BRASIL:PARANA:Castro
+49:BR:BRA:BRASIL:PARANA:Catanduvas
+50:BR:BRA:BRASIL:PARANA:Centenario do Su
+51:BR:BRA:BRASIL:PARANA:Cerro Azul
+52:BR:BRA:BRASIL:PARANA:Ceu  Azul
+53:BR:BRA:BRASIL:PARANA:Chopinzinho
+54:BR:BRA:BRASIL:PARANA:Cianorte
+55:BR:BRA:BRASIL:PARANA:Cidade Gaucha
+56:BR:BRA:BRASIL:PARANA:Clevelandia
+57:BR:BRA:BRASIL:PARANA:Colombo
+58:BR:BRA:BRASIL:PARANA:Colorado
+59:BR:BRA:BRASIL:PARANA:Congonhinhas
+60:BR:BRA:BRASIL:PARANA:Cons. Mayrinck
+61:BR:BRA:BRASIL:PARANA:Contenda
+62:BR:BRA:BRASIL:PARANA:Corbelia
+63:BR:BRA:BRASIL:PARANA:Cornelio Procopi
+64:BR:BRA:BRASIL:PARANA:Coronel Vivida
+65:BR:BRA:BRASIL:PARANA:Cruz Machado
+66:BR:BRA:BRASIL:PARANA:Cruzeiro d Oeste
+67:BR:BRA:BRASIL:PARANA:Cruzeiro do Sul
+68:BR:BRA:BRASIL:PARANA:Curitiba
+69:BR:BRA:BRASIL:PARANA:Curiuva
+70:BR:BRA:BRASIL:PARANA:Diamante do Nort
+71:BR:BRA:BRASIL:PARANA:Dois Vizinhos
+72:BR:BRA:BRASIL:PARANA:Doutor Camargo
+73:BR:BRA:BRASIL:PARANA:Eneas Marques
+74:BR:BRA:BRASIL:PARANA:Eng. Beltrao
+75:BR:BRA:BRASIL:PARANA:Faxinal
+76:BR:BRA:BRASIL:PARANA:Fenix
+77:BR:BRA:BRASIL:PARANA:Florai
+78:BR:BRA:BRASIL:PARANA:Floresta
+79:BR:BRA:BRASIL:PARANA:Florestopolis
+80:BR:BRA:BRASIL:PARANA:Florida
+81:BR:BRA:BRASIL:PARANA:Formosa
+82:BR:BRA:BRASIL:PARANA:Foz do Iguacu
+83:BR:BRA:BRASIL:PARANA:Francisco Alves
+84:BR:BRA:BRASIL:PARANA:Francisco Beltra
+85:BR:BRA:BRASIL:PARANA:General Carneiro
+86:BR:BRA:BRASIL:PARANA:Goio-Ere
+87:BR:BRA:BRASIL:PARANA:Grandes Rios
+88:BR:BRA:BRASIL:PARANA:Guaira
+89:BR:BRA:BRASIL:PARANA:Guairaca
+90:BR:BRA:BRASIL:PARANA:Guapirama
+91:BR:BRA:BRASIL:PARANA:Guaporema
+92:BR:BRA:BRASIL:PARANA:Guaraci
+93:BR:BRA:BRASIL:PARANA:Guaraniacu
+94:BR:BRA:BRASIL:PARANA:Guarapuava
+95:BR:BRA:BRASIL:PARANA:Guaraquecaba
+96:BR:BRA:BRASIL:PARANA:Guaratuba
+97:BR:BRA:BRASIL:PARANA:Ibaiti
+98:BR:BRA:BRASIL:PARANA:Ibipora
+99:BR:BRA:BRASIL:PARANA:Icaraima
+100:BR:BRA:BRASIL:PARANA:Iguaracu
+101:BR:BRA:BRASIL:PARANA:Imbituva
+102:BR:BRA:BRASIL:PARANA:Inacio Martins
+103:BR:BRA:BRASIL:PARANA:Inaja
+104:BR:BRA:BRASIL:PARANA:Indianopolis
+105:BR:BRA:BRASIL:PARANA:Ipiranga
+106:BR:BRA:BRASIL:PARANA:Ipora
+107:BR:BRA:BRASIL:PARANA:Irati
+108:BR:BRA:BRASIL:PARANA:Iretama
+109:BR:BRA:BRASIL:PARANA:Itaguaje
+110:BR:BRA:BRASIL:PARANA:Itambaraca
+111:BR:BRA:BRASIL:PARANA:Itambe
+112:BR:BRA:BRASIL:PARANA:Itapejara d' Oes
+113:BR:BRA:BRASIL:PARANA:Itauna do Sul
+114:BR:BRA:BRASIL:PARANA:Ivai
+115:BR:BRA:BRASIL:PARANA:Ivaipora
+116:BR:BRA:BRASIL:PARANA:Ivatuva
+117:BR:BRA:BRASIL:PARANA:Jabuti
+118:BR:BRA:BRASIL:PARANA:Jacarezinho
+119:BR:BRA:BRASIL:PARANA:Jaguapita
+120:BR:BRA:BRASIL:PARANA:Jaguaraiva
+121:BR:BRA:BRASIL:PARANA:Jandaia do Sul
+122:BR:BRA:BRASIL:PARANA:Janiopolis
+123:BR:BRA:BRASIL:PARANA:Japira
+124:BR:BRA:BRASIL:PARANA:Japura
+125:BR:BRA:BRASIL:PARANA:Jardim Alegre
+126:BR:BRA:BRASIL:PARANA:Jardim Olinda
+127:BR:BRA:BRASIL:PARANA:Jatazinho
+128:BR:BRA:BRASIL:PARANA:Joaquim Tavora
+129:BR:BRA:BRASIL:PARANA:Jucara
+130:BR:BRA:BRASIL:PARANA:Jundiai do Sul
+131:BR:BRA:BRASIL:PARANA:Kalore
+132:BR:BRA:BRASIL:PARANA:Lapa
+133:BR:BRA:BRASIL:PARANA:Laranjeiras do S
+134:BR:BRA:BRASIL:PARANA:Leopolis
+135:BR:BRA:BRASIL:PARANA:Loanda
+136:BR:BRA:BRASIL:PARANA:Lobato
+137:BR:BRA:BRASIL:PARANA:Londrina
+138:BR:BRA:BRASIL:PARANA:Lupionopolis
+139:BR:BRA:BRASIL:PARANA:Mal. Candido Ron
+140:BR:BRA:BRASIL:PARANA:Mallet
+141:BR:BRA:BRASIL:PARANA:Mambore
+142:BR:BRA:BRASIL:PARANA:Mandaguacu
+143:BR:BRA:BRASIL:PARANA:Mandaguari
+144:BR:BRA:BRASIL:PARANA:Mandirituba
+145:BR:BRA:BRASIL:PARANA:Mangueirinha
+146:BR:BRA:BRASIL:PARANA:Manuel Ribas
+147:BR:BRA:BRASIL:PARANA:Maria Helena
+148:BR:BRA:BRASIL:PARANA:Marialva
+149:BR:BRA:BRASIL:PARANA:Marilandia do Su
+150:BR:BRA:BRASIL:PARANA:Marilena
+151:BR:BRA:BRASIL:PARANA:Mariluz
+152:BR:BRA:BRASIL:PARANA:Maringa
+153:BR:BRA:BRASIL:PARANA:Mariopolis
+154:BR:BRA:BRASIL:PARANA:Marmeleiro
+155:BR:BRA:BRASIL:PARANA:Marumbi
+156:BR:BRA:BRASIL:PARANA:Matelandia
+157:BR:BRA:BRASIL:PARANA:Matinhos
+158:BR:BRA:BRASIL:PARANA:Medianeira
+159:BR:BRA:BRASIL:PARANA:Mirador
+160:BR:BRA:BRASIL:PARANA:Miraselva
+161:BR:BRA:BRASIL:PARANA:Moreira Sales
+162:BR:BRA:BRASIL:PARANA:Morretes
+163:BR:BRA:BRASIL:PARANA:Munhoz de Melo
+164:BR:BRA:BRASIL:PARANA:Nossa Senhora da
+165:BR:BRA:BRASIL:PARANA:Nova  Londrina
+166:BR:BRA:BRASIL:PARANA:Nova Alianca do
+167:BR:BRA:BRASIL:PARANA:Nova America da
+168:BR:BRA:BRASIL:PARANA:Nova Aurora
+169:BR:BRA:BRASIL:PARANA:Nova Cantu
+170:BR:BRA:BRASIL:PARANA:Nova Esperanca
+171:BR:BRA:BRASIL:PARANA:Nova Fatima
+172:BR:BRA:BRASIL:PARANA:Nova Olimpia
+173:BR:BRA:BRASIL:PARANA:Ortigueira
+174:BR:BRA:BRASIL:PARANA:Ourizona
+175:BR:BRA:BRASIL:PARANA:Paincandu
+176:BR:BRA:BRASIL:PARANA:Palmas
+177:BR:BRA:BRASIL:PARANA:Palmeira
+178:BR:BRA:BRASIL:PARANA:Palmital
+179:BR:BRA:BRASIL:PARANA:Palotina
+180:BR:BRA:BRASIL:PARANA:Paraiso  do Nort
+181:BR:BRA:BRASIL:PARANA:Paranacity
+182:BR:BRA:BRASIL:PARANA:Paranagua
+183:BR:BRA:BRASIL:PARANA:Paranapoema
+184:BR:BRA:BRASIL:PARANA:Paranavai
+185:BR:BRA:BRASIL:PARANA:Pato Branco
+186:BR:BRA:BRASIL:PARANA:Paula Freitas
+187:BR:BRA:BRASIL:PARANA:Paulo Frontin
+188:BR:BRA:BRASIL:PARANA:Peabiru
+189:BR:BRA:BRASIL:PARANA:Perola
+190:BR:BRA:BRASIL:PARANA:Perola  d' Oeste
+191:BR:BRA:BRASIL:PARANA:Pien
+192:BR:BRA:BRASIL:PARANA:Pinhalao
+193:BR:BRA:BRASIL:PARANA:Pinhao
+194:BR:BRA:BRASIL:PARANA:Pirai do Sul
+195:BR:BRA:BRASIL:PARANA:Piraquara
+196:BR:BRA:BRASIL:PARANA:Pitanga
+197:BR:BRA:BRASIL:PARANA:Planaltina do Pa
+198:BR:BRA:BRASIL:PARANA:Planalto
+199:BR:BRA:BRASIL:PARANA:Ponta Grossa
+200:BR:BRA:BRASIL:PARANA:Porecatu
+201:BR:BRA:BRASIL:PARANA:Porto  Amazonas
+202:BR:BRA:BRASIL:PARANA:Porto Vitoria
+203:BR:BRA:BRASIL:PARANA:Pres. C. Branco
+204:BR:BRA:BRASIL:PARANA:Primeiro De Maio
+205:BR:BRA:BRASIL:PARANA:Prudentopolis
+206:BR:BRA:BRASIL:PARANA:Pto. Rico
+207:BR:BRA:BRASIL:PARANA:Quatigua
+208:BR:BRA:BRASIL:PARANA:Quatro Barras
+209:BR:BRA:BRASIL:PARANA:Quedas do Iguacu
+210:BR:BRA:BRASIL:PARANA:Querencia do Nor
+211:BR:BRA:BRASIL:PARANA:Quinta do Sol
+212:BR:BRA:BRASIL:PARANA:Quitandinha
+213:BR:BRA:BRASIL:PARANA:RIO PARANAPANEMA
+214:BR:BRA:BRASIL:PARANA:Rancho Alegre
+215:BR:BRA:BRASIL:PARANA:Realeza
+216:BR:BRA:BRASIL:PARANA:Reboucas
+217:BR:BRA:BRASIL:PARANA:Renascenca
+218:BR:BRA:BRASIL:PARANA:Reserva
+219:BR:BRA:BRASIL:PARANA:Ribeirao Claro
+220:BR:BRA:BRASIL:PARANA:Riberao do Pinha
+221:BR:BRA:BRASIL:PARANA:Rio Azul
+222:BR:BRA:BRASIL:PARANA:Rio Bom
+223:BR:BRA:BRASIL:PARANA:Rio Branco do Su
+224:BR:BRA:BRASIL:PARANA:Rio Negro
+225:BR:BRA:BRASIL:PARANA:Rolandia
+226:BR:BRA:BRASIL:PARANA:Roncador
+227:BR:BRA:BRASIL:PARANA:Rondon
+228:BR:BRA:BRASIL:PARANA:S. Antonio de Su
+229:BR:BRA:BRASIL:PARANA:S. Isabel d' Oes
+230:BR:BRA:BRASIL:PARANA:S. Isabel do Ava
+231:BR:BRA:BRASIL:PARANA:S. Jorge d Oeste
+232:BR:BRA:BRASIL:PARANA:S. Jose dos Pinh
+233:BR:BRA:BRASIL:PARANA:S. Sebastiao da
+234:BR:BRA:BRASIL:PARANA:S.Cruz de Monte
+235:BR:BRA:BRASIL:PARANA:Sabaudia
+236:BR:BRA:BRASIL:PARANA:Salgado Filho
+237:BR:BRA:BRASIL:PARANA:Salto de Itarare
+238:BR:BRA:BRASIL:PARANA:Salto do Londra
+239:BR:BRA:BRASIL:PARANA:San Pedro do Iva
+240:BR:BRA:BRASIL:PARANA:Sanges
+241:BR:BRA:BRASIL:PARANA:Santa Amelia
+242:BR:BRA:BRASIL:PARANA:Santa Fe
+243:BR:BRA:BRASIL:PARANA:Santa Helena
+244:BR:BRA:BRASIL:PARANA:Santa Ines
+245:BR:BRA:BRASIL:PARANA:Santa Mariana
+246:BR:BRA:BRASIL:PARANA:Santana do Itara
+247:BR:BRA:BRASIL:PARANA:Santo Inacio
+248:BR:BRA:BRASIL:PARANA:Sao Carlos do Iv
+249:BR:BRA:BRASIL:PARANA:Sao Jeronimo da
+250:BR:BRA:BRASIL:PARANA:Sao Joao
+251:BR:BRA:BRASIL:PARANA:Sao Joao do Caiu
+252:BR:BRA:BRASIL:PARANA:Sao Joao do Ivai
+253:BR:BRA:BRASIL:PARANA:Sao Joao do Triu
+254:BR:BRA:BRASIL:PARANA:Sao Jorge
+255:BR:BRA:BRASIL:PARANA:Sao Jose Boa Vis
+256:BR:BRA:BRASIL:PARANA:Sao Mateus do Su
+257:BR:BRA:BRASIL:PARANA:Sao Miguel do Iguacu
+258:BR:BRA:BRASIL:PARANA:Sao Pedro do Par
+259:BR:BRA:BRASIL:PARANA:Sao Tome
+260:BR:BRA:BRASIL:PARANA:Sapopema
+261:BR:BRA:BRASIL:PARANA:Sertaneja
+262:BR:BRA:BRASIL:PARANA:Sertanopolis
+263:BR:BRA:BRASIL:PARANA:Siqueira Campos
+264:BR:BRA:BRASIL:PARANA:Sta.Cecilia do P
+265:BR:BRA:BRASIL:PARANA:Sto.Antonio da P
+266:BR:BRA:BRASIL:PARANA:Sto.Antonio do C
+267:BR:BRA:BRASIL:PARANA:Sto.Antonio do P
+268:BR:BRA:BRASIL:PARANA:Tamboara
+269:BR:BRA:BRASIL:PARANA:Tapejara
+270:BR:BRA:BRASIL:PARANA:Tapira
+271:BR:BRA:BRASIL:PARANA:Telemaco Borba
+272:BR:BRA:BRASIL:PARANA:Terra Boa
+273:BR:BRA:BRASIL:PARANA:Terra Rica
+274:BR:BRA:BRASIL:PARANA:Terra Roxa
+275:BR:BRA:BRASIL:PARANA:Texeira Soares
+276:BR:BRA:BRASIL:PARANA:Tibaji
+277:BR:BRA:BRASIL:PARANA:Tijucas do Sul
+278:BR:BRA:BRASIL:PARANA:Toledo
+279:BR:BRA:BRASIL:PARANA:Tomazina
+280:BR:BRA:BRASIL:PARANA:Tuneiras d Oeste
+281:BR:BRA:BRASIL:PARANA:Ubirata
+282:BR:BRA:BRASIL:PARANA:Umuarama
+283:BR:BRA:BRASIL:PARANA:Uniao da Vitoria
+284:BR:BRA:BRASIL:PARANA:Uniflor
+285:BR:BRA:BRASIL:PARANA:Urai
+286:BR:BRA:BRASIL:PARANA:Venceslau Bras
+287:BR:BRA:BRASIL:PARANA:Vere
+288:BR:BRA:BRASIL:PARANA:Vitorino
+289:BR:BRA:BRASIL:PARANA:Xambre
+1:BR:BRA:BRASIL:ACRE:ASSIS BRASIL
+2:BR:BRA:BRASIL:ACRE:BRASILEIA
+3:BR:BRA:BRASIL:ACRE:CRUZEIRO DO SUL
+4:BR:BRA:BRASIL:ACRE:FEIJO
+5:BR:BRA:BRASIL:ACRE:MANCIO LIMA
+6:BR:BRA:BRASIL:ACRE:MANUEL URBANO
+7:BR:BRA:BRASIL:ACRE:PLACIDO DE C.
+8:BR:BRA:BRASIL:ACRE:RIO BRANCO
+9:BR:BRA:BRASIL:ACRE:SENA MADUREIRA
+10:BR:BRA:BRASIL:ACRE:SENADOR GUIOMARD
+11:BR:BRA:BRASIL:ACRE:TARAUACA
+12:BR:BRA:BRASIL:ACRE:XAPURI
diff --git a/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..df14d5e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN1_LEX.txt
@@ -0,0 +1,4 @@
+1:BN-BE:BN:BELAIT
+2:BN-BM:BN:BRUNEI MUARA
+3:BN-TU:BN:MUARA/SERIA/TUTONG
+4:BN-TE:BN:TEMBURONG
diff --git a/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..8bba0ab
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BRN/BRN_ADMIN2_LEX.txt
@@ -0,0 +1,2 @@
+1:BN:BRN:BRUNEI:Muara/Seria/Tutong:BRN.L2.1
+1:BN:BRN:BRUNEI:Temburong:BRN.L2.2
diff --git a/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..06a2b2d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN1_LEX.txt
@@ -0,0 +1,22 @@
+1:BT-33:BT:BUMTHANG
+2:BT-CNG:BT:CHIRANG
+3:BT-2:BT:CHUKHA
+4:BT-DA:BT:DAGA
+5:BT-22:BT:DAGANA
+6:BT-GA:BT:GASA
+7:BT-36:BT:GAYLEGPHUG (SARBHANG)
+8:BT-3:BT:HAA
+9:BT-44:BT:LHUNTSHI
+10:BT-42:BT:MONGAR
+11:BT-34:BT:PARO
+12:BT-43:BT:PEMA GATSHEL
+13:BT-23:BT:PUNAKHA
+14:BT-4:BT:SAMCHI
+15:BT-45:BT:SAMDRUP JONGKHAR
+16:BT-37:BT:SHENGANG
+17:BT-38:BT:TASHIGANG
+18:BT-5:BT:THIMPHU
+19:BT-32:BT:TONGSA
+20:BT-TY:BT:TRASHI YANGTSE
+21:BT-35:BT:TRASHIGANG
+22:BT-24:BT:WANGDIPHODRANG
diff --git a/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..2715b66
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/BTN/BTN_ADMIN2_LEX.txt
@@ -0,0 +1,19 @@
+1:BT:BTN:BHUTAN:Bumthang:BTN.L2.10
+1:BT:BTN:BHUTAN:Lhuntshi:BTN.L2.13
+1:BT:BTN:BHUTAN:Samdrup Jongkhar:BTN.L2.9
+1:BT:BTN:BHUTAN:Chirang:BTN.L2.12
+1:BT:BTN:BHUTAN:Mongar:BTN.L2.7
+1:BT:BTN:BHUTAN:Shengang:BTN.L2.2
+1:BT:BTN:BHUTAN:Chukha:BTN.L2.17
+1:BT:BTN:BHUTAN:Thimphu:BTN.L2.4
+1:BT:BTN:BHUTAN:Tongsa:BTN.L2.11
+1:BT:BTN:BHUTAN:Haa:BTN.L2.5
+1:BT:BTN:BHUTAN:Tashigang:BTN.L2.8
+1:BT:BTN:BHUTAN:Punakha:BTN.L2.19
+1:BT:BTN:BHUTAN:Gaylegphug (Sarbhang):BTN.L2.18
+1:BT:BTN:BHUTAN:Pema Gatshel:BTN.L2.16
+1:BT:BTN:BHUTAN:Paro:BTN.L2.1
+1:BT:BTN:BHUTAN:Wangdiphodrang:BTN.L2.15
+1:BT:BTN:BHUTAN:Daga:BTN.L2.6
+1:BT:BTN:BHUTAN:Gasa:BTN.L2.3
+1:BT:BTN:BHUTAN:Samchi:BTN.L2.14
diff --git a/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN1_LEX.txt
new file mode 100644
index 0000000..3a09b8a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN1_LEX.txt
@@ -0,0 +1,18 @@
+1:CF-BB:CF:BAMINGUI BANGORAN [BAMINGUI BANGORA]
+2:CF-BGF:CF:BANGUI
+3:CF-BK:CF:BASSE KOTTO
+4:CF-HM:CF:HAUT MBOMOU
+5:CF-HK:CF:HAUTE KOTTO
+6:CF-KG:CF:KEMO
+7:CF-LB:CF:LOBAYE
+8:CF-HS:CF:MAMBERE KADEI
+9:CF-MB:CF:MBOMOU
+10:CF-KB:CF:NANA GREBIZI [NANA GRIBINGUI]
+11:CF-NM:CF:NANA MAMBERE
+12:CF-MP:CF:OMBELLA MPOKO
+13:CF-UK:CF:OUAKA
+14:CF-AC:CF:OUHAM
+15:CF-OP:CF:OUHAM PENDE
+16:CF-SE:CF:SANGHA1
+17:CF-SE:CF:SANGHA1
+18:CF-VK:CF:VAKAGA
diff --git a/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN2_LEX.txt
new file mode 100644
index 0000000..3fa5c21
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CAF/CAF_ADMIN2_LEX.txt
@@ -0,0 +1,51 @@
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ombella-Mpoko:Bimbo
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ombella-Mpoko:Boali
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ombella-Mpoko:Damara
+4:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ombella-Mpoko:Yaloke-Bossembele
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Kemo:Dekoa
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Kemo:Sibut
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouaka:Bakala
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouaka:Bambari
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouaka:Grimari
+4:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouaka:Ippy
+5:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouaka:Kouango
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham:Batangafo
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham:Bossangoa
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham:Bouca
+4:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham:Kabo
+5:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham:Markounda
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haut-Mbomou:Djemah
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haut-Mbomou:Obo
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haut-Mbomou:Zemio
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mbomou:Bakouma
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mbomou:Bangassou
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mbomou:Gambo-Ouango
+4:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mbomou:Rafai
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Nana-Gribingui:Kaga-Bandoro
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Nana-Gribingui:Mbres
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Bangui:Bangui
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haute-Kotto:Bria
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haute-Kotto:Ouadda
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Haute-Kotto:Yalinga
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham-Pende:Bocaranga
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham-Pende:Bozoum
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Ouham-Pende:Paoua
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Sangha:Bambio
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Sangha:Nola
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Bamingui-Bangora:Bamingui
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Bamingui-Bangora:Ndele
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Lobaye:Boda
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Lobaye:Mbaki
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Lobaye:Mongoumba
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Vakaga:Birao
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Vakaga:Ouandja-Djalle
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Basse-Kotto:Alindao
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Basse-Kotto:Kembe
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Basse-Kotto:Mingala
+4:CF:CAF:CENTRAL AFRICAN REPUBLIC:Basse-Kotto:Mobaye
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mambere-Kadei:Berberati
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mambere-Kadei:Carnot
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Mambere-Kadei:Gamboula
+1:CF:CAF:CENTRAL AFRICAN REPUBLIC:Nana-Mambere:Baboua
+2:CF:CAF:CENTRAL AFRICAN REPUBLIC:Nana-Mambere:Baoro
+3:CF:CAF:CENTRAL AFRICAN REPUBLIC:Nana-Mambere:Bouar
diff --git a/org.eclipse.stem.utility/parameters/sort/CAN/CAN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CAN/CAN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..1c43c05
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CAN/CAN_ADMIN1_LEX.txt
@@ -0,0 +1,13 @@
+1:CA-AB:CA:ALBERTA
+2:CA-BC:CA:BRITISH COLUMBIA
+3:CA-MB:CA:MANITOBA
+4:CA-NB:CA:NEW BRUNSWICK
+5:CA-NL:CA:NEWFOUNDLAND AND LABRADOR
+6:CA-NT:CA:NORTHWEST TERRITORIES
+7:CA-NS:CA:NOVA SCOTIA
+8:CA-NU:CA:NUNAVUT
+9:CA-ON:CA:ONTARIO
+10:CA-PE:CA:PRINCE EDWARD ISLAND
+11:CA-QC:CA:QUEBEC
+12:CA-SK:CA:SASKATCHEWAN
+13:CA-YT:CA:YUKON TERRITORY
diff --git a/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..04510e0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN1_LEX.txt
@@ -0,0 +1,27 @@
+1:CH-AG:CH:AARGAU
+2:CH-AR:CH:APPENZELL AUSSERRHODEN
+3:CH-AI:CH:APPENZELL INNERRHODEN
+4:CH-BL:CH:BASEL LANDSCHAFT
+5:CH-BS:CH:BASEL STADT
+6:CH-BE:CH:BERN/BERNE
+7:CH-FR:CH:FRIBOURG/FREIBURG
+8:CH-GE:CH:GENEVE
+9:CH-GN:CH:GENŠVE
+10:CH-GL:CH:GLARUS
+11:CH-GR:CH:GRAUB?NDEN/GRIGIONI/GRISCHUN
+12:CH-JU:CH:JURA
+13:CH-LU:CH:LUZERN
+14:CH-NW:CH:MIDWALDEN
+15:CH-NE:CH:NEUCHATEL
+16:CH-OW:CH:OBWALDEN
+17:CH-SG:CH:SANKT GALLEN
+18:CH-SH:CH:SCHAFFHAUSEN
+19:CH-SZ:CH:SCHWYZ
+20:CH-SO:CH:SOLOTHURN
+21:CH-TG:CH:THURGAU
+22:CH-TI:CH:TICINO
+23:CH-UR:CH:URI
+24:CH-VS:CH:VALAIS/WALLIS
+25:CH-VD:CH:VAUD
+26:CH-ZG:CH:ZUG
+27:CH-ZH:CH:ZURICH
diff --git a/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHE/CHE_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..37cc907
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN1_LEX.txt
@@ -0,0 +1,59 @@
+1:CL-AI:CL:AISEN
+2:CL-ANT:CL:ANTARTICA CHILENA
+3:CL-AN:CL:ANTOFAGASTA
+4:CL-AR:CL:ARAUCANA
+5:CL-ARC:CL:ARAUCO
+6:CL-ARI:CL:ARICA
+7:CL-AT:CL:ATACAMA
+8:CL-BI:CL:BIOBIO
+9:CL-CHP:CL:CACHAPOAL
+10:CL-CPT:CL:CAPITAN PRAT
+11:CL-CAR:CL:CARDENAL CARO
+12:CL-CAU:CL:CAUQUENES
+13:CL-CTN:CL:CAUTIN
+14:CL-CBU:CL:CHACABUCO
+15:CL-CHN:CL:CHANARAL
+16:CL-CLE:CL:CHILOE
+17:CL-CPA:CL:CHOAPA
+18:CL-CHQ:CL:COIHAIQUE
+19:CL-CHG:CL:COLCHAGUA
+20:CL-CON:CL:CONCEPCION
+21:CL-COP:CL:COPIAPO
+22:CL-CO:CL:COQUIMBO
+23:CL-COR:CL:CORDILLERA
+24:CL-CUR:CL:CURICO
+25:CL-EL:CL:EL LOA
+26:CL-ELQ:CL:ELQUI
+27:CL-GCR:CL:GENERAL CARRERA
+28:CL-HUA:CL:HUASCO
+29:CL-IQI:CL:IQUIQUE
+30:CL-LI:CL:LIBERTADOR GENERAL BERNARDO OHIGGINS
+31:CL-LIM:CL:LIMARI
+32:CL-LIN:CL:LINARES
+33:CL-LLA:CL:LLANQUIHUE
+34:CL-AND:CL:LOS ANDES
+35:CL-LL:CL:LOS LAGOS
+36:CL-MA:CL:MAGALLANES
+37:CL-MIP:CL:MAIPO
+38:CL-MLL:CL:MALLECO
+39:CL-ML:CL:MAULE
+40:CL-MIL:CL:MELIPILLA
+41:CL-NUB:CL:NUBLE
+42:CL-OSR:CL:OSORNO
+43:CL-PAL:CL:PALENA
+44:CL-PAN:CL:PARINACOTA
+45:CL-PET:CL:PETORCA
+46:CL-QUI:CL:QUILLOTA
+47:CL-RM:CL:REGIN METROPOLITANA DE SANTIAGO
+48:CL-SAT:CL:SAN ANTONIO
+49:CL-ACO:CL:SAN FELIPE DE ACONCAGUA
+50:CL-SGO:CL:SANTIAGO
+51:CL-TAL:CL:TALAGANTE
+52:CL-TCA:CL:TALCA
+53:CL-TA:CL:TARAPAC
+54:CL-TF:CL:TIERRA DEL FUEGO
+55:CL-TOC:CL:TOCOPILLA
+56:CL-ESP:CL:ULTIMA ESPERANZA
+57:CL-VDI:CL:VALDIVIA
+58:CL-VAL:CL:VALPARAISO
+59:CL-VS:CL:VALPARASO
diff --git a/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f668251
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHL/CHL_ADMIN2_LEX.txt
@@ -0,0 +1,324 @@
+1:CL:CHL:CHILE:VALDIVIA:Corral
+2:CL:CHL:CHILE:VALDIVIA:Futrono
+3:CL:CHL:CHILE:VALDIVIA:Lago Ranco
+4:CL:CHL:CHILE:VALDIVIA:Lanco
+5:CL:CHL:CHILE:VALDIVIA:Los Lagos
+6:CL:CHL:CHILE:VALDIVIA:Mafil
+7:CL:CHL:CHILE:VALDIVIA:Mariquina
+8:CL:CHL:CHILE:VALDIVIA:Paillaco
+9:CL:CHL:CHILE:VALDIVIA:Panguipulli
+10:CL:CHL:CHILE:VALDIVIA:Rio Bueno
+11:CL:CHL:CHILE:VALDIVIA:Valdivia
+12:CL:CHL:CHILE:VALDIVIA:Valdivia (Is.)
+1:CL:CHL:CHILE:NUBLE:Bulnes
+2:CL:CHL:CHILE:NUBLE:Chillan
+3:CL:CHL:CHILE:NUBLE:Cobquecura
+4:CL:CHL:CHILE:NUBLE:Coelemu
+5:CL:CHL:CHILE:NUBLE:Coihueco
+6:CL:CHL:CHILE:NUBLE:El Carmen
+7:CL:CHL:CHILE:NUBLE:Ninhue
+8:CL:CHL:CHILE:NUBLE:Niquen
+9:CL:CHL:CHILE:NUBLE:Pemuco
+10:CL:CHL:CHILE:NUBLE:Pinto
+11:CL:CHL:CHILE:NUBLE:Portezuelo
+12:CL:CHL:CHILE:NUBLE:Quillon
+13:CL:CHL:CHILE:NUBLE:Quirihue
+14:CL:CHL:CHILE:NUBLE:Ranquil
+15:CL:CHL:CHILE:NUBLE:San Carlos
+16:CL:CHL:CHILE:NUBLE:San Fabian
+17:CL:CHL:CHILE:NUBLE:San Ignacio
+18:CL:CHL:CHILE:NUBLE:San Nicolas
+19:CL:CHL:CHILE:NUBLE:Trehuaco
+20:CL:CHL:CHILE:NUBLE:Yungay
+1:CL:CHL:CHILE:EL LOA:Calama
+2:CL:CHL:CHILE:EL LOA:Ollague
+3:CL:CHL:CHILE:EL LOA:San Pedro de Atacama
+1:CL:CHL:CHILE:ARAUCO:Arauco
+2:CL:CHL:CHILE:ARAUCO:Arauco (Is.)
+3:CL:CHL:CHILE:ARAUCO:Canete
+4:CL:CHL:CHILE:ARAUCO:Contulmo
+5:CL:CHL:CHILE:ARAUCO:Curanilahue
+6:CL:CHL:CHILE:ARAUCO:Lebu
+7:CL:CHL:CHILE:ARAUCO:Los Alamos
+8:CL:CHL:CHILE:ARAUCO:Tirua
+9:CL:CHL:CHILE:ARAUCO:Tirua (Is.)
+1:CL:CHL:CHILE:SANTIAGO:Santiago
+1:CL:CHL:CHILE:ANTARTICA CHILENA:Navarino (Is.)
+1:CL:CHL:CHILE:ELQUI:Andacollo
+2:CL:CHL:CHILE:ELQUI:Coquimbo
+3:CL:CHL:CHILE:ELQUI:La Higuera
+4:CL:CHL:CHILE:ELQUI:La Higuera (Is.)
+5:CL:CHL:CHILE:ELQUI:La Serena
+6:CL:CHL:CHILE:ELQUI:Paiguano
+7:CL:CHL:CHILE:ELQUI:Vicuna
+1:CL:CHL:CHILE:GENERAL CARRERA:Chile Chico
+2:CL:CHL:CHILE:GENERAL CARRERA:Rio Ibanez
+1:CL:CHL:CHILE:MAIPO:Buin
+2:CL:CHL:CHILE:MAIPO:Calera De Tango
+3:CL:CHL:CHILE:MAIPO:Paine
+4:CL:CHL:CHILE:MAIPO:San Bernardo
+1:CL:CHL:CHILE:LLANQUIHUE:Calbuco (Is.)
+2:CL:CHL:CHILE:LLANQUIHUE:Cochamo
+3:CL:CHL:CHILE:LLANQUIHUE:Cochamo (Is.)
+4:CL:CHL:CHILE:LLANQUIHUE:Fresia
+5:CL:CHL:CHILE:LLANQUIHUE:Frutillar
+6:CL:CHL:CHILE:LLANQUIHUE:Isla
+7:CL:CHL:CHILE:LLANQUIHUE:LLanquihue
+8:CL:CHL:CHILE:LLANQUIHUE:Los Muermos
+9:CL:CHL:CHILE:LLANQUIHUE:Maullin
+10:CL:CHL:CHILE:LLANQUIHUE:Puerto Montt
+11:CL:CHL:CHILE:LLANQUIHUE:Puerto Varas
+1:CL:CHL:CHILE:MELIPILLA:Alhue
+2:CL:CHL:CHILE:MELIPILLA:Curacavi
+3:CL:CHL:CHILE:MELIPILLA:Maria Pinto
+4:CL:CHL:CHILE:MELIPILLA:Melipilla
+5:CL:CHL:CHILE:MELIPILLA:San Pedro
+1:CL:CHL:CHILE:TIERRA DEL FUEGO:Primavera
+2:CL:CHL:CHILE:TIERRA DEL FUEGO:Primavera (Is.)
+3:CL:CHL:CHILE:TIERRA DEL FUEGO:Timaukel
+4:CL:CHL:CHILE:TIERRA DEL FUEGO:Timaukel (Is.)
+1:CL:CHL:CHILE:CACHAPOAL:Codegua
+2:CL:CHL:CHILE:CACHAPOAL:Coinco
+3:CL:CHL:CHILE:CACHAPOAL:Coltauco
+4:CL:CHL:CHILE:CACHAPOAL:Donihue
+5:CL:CHL:CHILE:CACHAPOAL:Graneros
+6:CL:CHL:CHILE:CACHAPOAL:Las Cabras
+7:CL:CHL:CHILE:CACHAPOAL:Machali
+8:CL:CHL:CHILE:CACHAPOAL:Malloa
+9:CL:CHL:CHILE:CACHAPOAL:Mostazal
+10:CL:CHL:CHILE:CACHAPOAL:Olivar
+11:CL:CHL:CHILE:CACHAPOAL:Peumo
+12:CL:CHL:CHILE:CACHAPOAL:Pichidegua
+13:CL:CHL:CHILE:CACHAPOAL:Quinta De Tilcoco
+14:CL:CHL:CHILE:CACHAPOAL:Rancagua
+15:CL:CHL:CHILE:CACHAPOAL:Rengo
+16:CL:CHL:CHILE:CACHAPOAL:Requinao
+17:CL:CHL:CHILE:CACHAPOAL:San Vicente
+1:CL:CHL:CHILE:ANTOFAGASTA:Antofagasta
+2:CL:CHL:CHILE:ANTOFAGASTA:Antofagasta (Is.)
+3:CL:CHL:CHILE:ANTOFAGASTA:Mejillones
+4:CL:CHL:CHILE:ANTOFAGASTA:Sierra Gorda
+5:CL:CHL:CHILE:ANTOFAGASTA:Taltal
+1:CL:CHL:CHILE:CONCEPCION:Concepcion
+2:CL:CHL:CHILE:CONCEPCION:Coronel
+3:CL:CHL:CHILE:CONCEPCION:Florida
+4:CL:CHL:CHILE:CONCEPCION:Hualqui
+5:CL:CHL:CHILE:CONCEPCION:Lota
+6:CL:CHL:CHILE:CONCEPCION:Penco
+7:CL:CHL:CHILE:CONCEPCION:Santa Juana
+8:CL:CHL:CHILE:CONCEPCION:Talcahuano
+9:CL:CHL:CHILE:CONCEPCION:Talcahuano (Is.)
+10:CL:CHL:CHILE:CONCEPCION:Tome
+1:CL:CHL:CHILE:CHILOE:Ancud
+2:CL:CHL:CHILE:CHILOE:Castro
+3:CL:CHL:CHILE:CHILOE:Castro (Is.)
+4:CL:CHL:CHILE:CHILOE:Chonchi
+5:CL:CHL:CHILE:CHILOE:Curaco De Velez
+6:CL:CHL:CHILE:CHILOE:Dalcahue
+7:CL:CHL:CHILE:CHILOE:Puqueldon
+8:CL:CHL:CHILE:CHILOE:Queilen
+9:CL:CHL:CHILE:CHILOE:Queilen (Is.)
+10:CL:CHL:CHILE:CHILOE:Quellon
+11:CL:CHL:CHILE:CHILOE:Quellon (Is.)
+12:CL:CHL:CHILE:CHILOE:Quemchi
+13:CL:CHL:CHILE:CHILOE:Quemchi (Is.)
+14:CL:CHL:CHILE:CHILOE:Quinchao (Is.)
+1:CL:CHL:CHILE:PALENA:Chaiten
+2:CL:CHL:CHILE:PALENA:Chaiten (Is.)
+3:CL:CHL:CHILE:PALENA:Futaleufu
+4:CL:CHL:CHILE:PALENA:Hualaihue
+5:CL:CHL:CHILE:PALENA:Hualaihue (Is.)
+6:CL:CHL:CHILE:PALENA:Palena
+1:CL:CHL:CHILE:HUASCO:Alto del Carmen
+2:CL:CHL:CHILE:HUASCO:Freirina
+3:CL:CHL:CHILE:HUASCO:Freirina (Is.)
+4:CL:CHL:CHILE:HUASCO:Huasco
+5:CL:CHL:CHILE:HUASCO:Huasco (Is.)
+6:CL:CHL:CHILE:HUASCO:Vallenar
+1:CL:CHL:CHILE:CHOAPA:Illapel
+2:CL:CHL:CHILE:CHOAPA:Los Vilos
+3:CL:CHL:CHILE:CHOAPA:Los Vilos (Is.)
+4:CL:CHL:CHILE:CHOAPA:Mincha
+5:CL:CHL:CHILE:CHOAPA:Salamanca
+1:CL:CHL:CHILE:QUILLOTA:Calera
+2:CL:CHL:CHILE:QUILLOTA:Hijuelas
+3:CL:CHL:CHILE:QUILLOTA:La Cruz
+4:CL:CHL:CHILE:QUILLOTA:Limache
+5:CL:CHL:CHILE:QUILLOTA:Nogales
+6:CL:CHL:CHILE:QUILLOTA:Olmue
+7:CL:CHL:CHILE:QUILLOTA:Quillota
+1:CL:CHL:CHILE:TALAGANTE:El Monte
+2:CL:CHL:CHILE:TALAGANTE:Isla De Maipo
+3:CL:CHL:CHILE:TALAGANTE:Penaflor
+4:CL:CHL:CHILE:TALAGANTE:Talagante
+1:CL:CHL:CHILE:COLCHAGUA:Chepica
+2:CL:CHL:CHILE:COLCHAGUA:Chimbarongo
+3:CL:CHL:CHILE:COLCHAGUA:Lolol
+4:CL:CHL:CHILE:COLCHAGUA:Nancagua
+5:CL:CHL:CHILE:COLCHAGUA:Palmilla
+6:CL:CHL:CHILE:COLCHAGUA:Peralillo
+7:CL:CHL:CHILE:COLCHAGUA:Placilla
+8:CL:CHL:CHILE:COLCHAGUA:Pumanque
+9:CL:CHL:CHILE:COLCHAGUA:San Fernando
+10:CL:CHL:CHILE:COLCHAGUA:Santa Cruz
+1:CL:CHL:CHILE:CAUQUENES:Cauquenes
+2:CL:CHL:CHILE:CAUQUENES:Chanco
+3:CL:CHL:CHILE:CAUQUENES:Pelluhue
+1:CL:CHL:CHILE:LINARES:Colbun
+2:CL:CHL:CHILE:LINARES:Linares
+3:CL:CHL:CHILE:LINARES:Longavi
+4:CL:CHL:CHILE:LINARES:Parral
+5:CL:CHL:CHILE:LINARES:Retiro
+6:CL:CHL:CHILE:LINARES:San Javier
+7:CL:CHL:CHILE:LINARES:Villa Alegre
+8:CL:CHL:CHILE:LINARES:Yerbas buenas
+1:CL:CHL:CHILE:CHACABUCO:CHL.L2.1
+2:CL:CHL:CHILE:CHACABUCO:CHL.L2.2
+3:CL:CHL:CHILE:CHACABUCO:Colina
+1:CL:CHL:CHILE:AISEN:Aisen (Is.)
+2:CL:CHL:CHILE:AISEN:Cisnes
+3:CL:CHL:CHILE:AISEN:Cisnes (Is.)
+4:CL:CHL:CHILE:AISEN:Guaitacas
+5:CL:CHL:CHILE:AISEN:Guaitecas (Is.)
+1:CL:CHL:CHILE:ARICA:Arica
+2:CL:CHL:CHILE:ARICA:Camarones
+1:CL:CHL:CHILE:IQUIQUE:Camina
+2:CL:CHL:CHILE:IQUIQUE:Colchane
+3:CL:CHL:CHILE:IQUIQUE:Huara
+4:CL:CHL:CHILE:IQUIQUE:Iquique
+5:CL:CHL:CHILE:IQUIQUE:Pica
+6:CL:CHL:CHILE:IQUIQUE:Pozo Almonte
+1:CL:CHL:CHILE:CARDENAL CARO:La Estrella
+2:CL:CHL:CHILE:CARDENAL CARO:Litueche
+3:CL:CHL:CHILE:CARDENAL CARO:Marchihue
+4:CL:CHL:CHILE:CARDENAL CARO:Navidad
+5:CL:CHL:CHILE:CARDENAL CARO:Paredones
+6:CL:CHL:CHILE:CARDENAL CARO:Pichilemu
+1:CL:CHL:CHILE:COPIAPO:Caldera
+2:CL:CHL:CHILE:COPIAPO:Caldera (Is.)
+3:CL:CHL:CHILE:COPIAPO:Copiapo
+4:CL:CHL:CHILE:COPIAPO:Tierra Amarilla
+1:CL:CHL:CHILE:LIMARI:Combarbala
+2:CL:CHL:CHILE:LIMARI:Monte Patria
+3:CL:CHL:CHILE:LIMARI:Ovalle
+4:CL:CHL:CHILE:LIMARI:Punitaqui
+5:CL:CHL:CHILE:LIMARI:Rio Hurtado
+1:CL:CHL:CHILE:TALCA:Constitucion
+2:CL:CHL:CHILE:TALCA:Curepto
+3:CL:CHL:CHILE:TALCA:Empedrado
+4:CL:CHL:CHILE:TALCA:Maule
+5:CL:CHL:CHILE:TALCA:Pelarco
+6:CL:CHL:CHILE:TALCA:Pencahue
+7:CL:CHL:CHILE:TALCA:Rio Claro
+8:CL:CHL:CHILE:TALCA:San Clemente
+9:CL:CHL:CHILE:TALCA:Talca
+1:CL:CHL:CHILE:CAPITAN PRAT:Cochrane
+2:CL:CHL:CHILE:CAPITAN PRAT:Natales (Is.)
+3:CL:CHL:CHILE:CAPITAN PRAT:O'higgins
+4:CL:CHL:CHILE:CAPITAN PRAT:Tortel (Is.)
+1:CL:CHL:CHILE:BIOBIO:Antuco
+2:CL:CHL:CHILE:BIOBIO:Cabrero
+3:CL:CHL:CHILE:BIOBIO:Laja
+4:CL:CHL:CHILE:BIOBIO:Los Angeles
+5:CL:CHL:CHILE:BIOBIO:Mulchen
+6:CL:CHL:CHILE:BIOBIO:Nacimiento
+7:CL:CHL:CHILE:BIOBIO:Negrete
+8:CL:CHL:CHILE:BIOBIO:Quilago
+9:CL:CHL:CHILE:BIOBIO:Quillego
+10:CL:CHL:CHILE:BIOBIO:Rosendo
+11:CL:CHL:CHILE:BIOBIO:Santa Barbara
+12:CL:CHL:CHILE:BIOBIO:Tucapel
+13:CL:CHL:CHILE:BIOBIO:Yumbel
+1:CL:CHL:CHILE:VALPARAISO:Casa Blanca
+2:CL:CHL:CHILE:VALPARAISO:Puchuncavi
+3:CL:CHL:CHILE:VALPARAISO:Quilpue
+4:CL:CHL:CHILE:VALPARAISO:Quintero
+5:CL:CHL:CHILE:VALPARAISO:Valparaiso
+6:CL:CHL:CHILE:VALPARAISO:Villa Alemana
+7:CL:CHL:CHILE:VALPARAISO:Vina del Mar
+1:CL:CHL:CHILE:TOCOPILLA:Maria Elena
+2:CL:CHL:CHILE:TOCOPILLA:Tocopilla
+1:CL:CHL:CHILE:CHANARAL:Chanaral
+2:CL:CHL:CHILE:CHANARAL:Chanaral (Is.)
+3:CL:CHL:CHILE:CHANARAL:Diego de Almagro
+1:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:Catemu
+2:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:Llaillay
+3:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:Panquehue
+4:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:Putaendo
+5:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:San Felipe
+6:CL:CHL:CHILE:SAN FELIPE DE ACONCAGUA:Santa Maria
+1:CL:CHL:CHILE:COIHAIQUE:Coihaique
+2:CL:CHL:CHILE:COIHAIQUE:Lago Verde
+1:CL:CHL:CHILE:PARINACOTA:General Lagos
+2:CL:CHL:CHILE:PARINACOTA:Putre
+1:CL:CHL:CHILE:ULTIMA ESPERANZA:Natales
+2:CL:CHL:CHILE:ULTIMA ESPERANZA:Natales (Is.)
+3:CL:CHL:CHILE:ULTIMA ESPERANZA:Torres De Paine
+1:CL:CHL:CHILE:CAUTIN:Carahue
+2:CL:CHL:CHILE:CAUTIN:Cunco
+3:CL:CHL:CHILE:CAUTIN:Curarrehue
+4:CL:CHL:CHILE:CAUTIN:Freire
+5:CL:CHL:CHILE:CAUTIN:Galvarino
+6:CL:CHL:CHILE:CAUTIN:Golbea
+7:CL:CHL:CHILE:CAUTIN:Lautaro
+8:CL:CHL:CHILE:CAUTIN:Loncoche
+9:CL:CHL:CHILE:CAUTIN:Melipeuco
+10:CL:CHL:CHILE:CAUTIN:Nueva Imperial
+11:CL:CHL:CHILE:CAUTIN:Perquenco
+12:CL:CHL:CHILE:CAUTIN:Pitrufquen
+13:CL:CHL:CHILE:CAUTIN:Pucon
+14:CL:CHL:CHILE:CAUTIN:Saavedra
+15:CL:CHL:CHILE:CAUTIN:Temuco
+16:CL:CHL:CHILE:CAUTIN:Teodoro Schmidt
+17:CL:CHL:CHILE:CAUTIN:Tolten
+18:CL:CHL:CHILE:CAUTIN:Vilcun
+19:CL:CHL:CHILE:CAUTIN:Villarrica
+1:CL:CHL:CHILE:OSORNO:Entre Lagos
+2:CL:CHL:CHILE:OSORNO:Osorno
+3:CL:CHL:CHILE:OSORNO:Puerto Octay
+4:CL:CHL:CHILE:OSORNO:Purranque
+5:CL:CHL:CHILE:OSORNO:Rio Negro
+6:CL:CHL:CHILE:OSORNO:San Juan De La Costa
+7:CL:CHL:CHILE:OSORNO:San pablo
+1:CL:CHL:CHILE:LOS ANDES:Calle Larga
+2:CL:CHL:CHILE:LOS ANDES:Los Andes
+3:CL:CHL:CHILE:LOS ANDES:Rinconada
+4:CL:CHL:CHILE:LOS ANDES:San Esteban
+1:CL:CHL:CHILE:MAGALLANES:CHL.L2.3
+2:CL:CHL:CHILE:MAGALLANES:Punta Arenas (Is.)
+3:CL:CHL:CHILE:MAGALLANES:Rio Verde
+4:CL:CHL:CHILE:MAGALLANES:Rio Verde (Is.)
+1:CL:CHL:CHILE:CORDILLERA:Pirque
+2:CL:CHL:CHILE:CORDILLERA:Puente Alto
+3:CL:CHL:CHILE:CORDILLERA:san jode de Maipo
+1:CL:CHL:CHILE:CURICO:Curico
+2:CL:CHL:CHILE:CURICO:Hualane
+3:CL:CHL:CHILE:CURICO:Licanten
+4:CL:CHL:CHILE:CURICO:Molina
+5:CL:CHL:CHILE:CURICO:Rauco
+6:CL:CHL:CHILE:CURICO:Romeral
+7:CL:CHL:CHILE:CURICO:Sagrada Familia
+8:CL:CHL:CHILE:CURICO:Teno
+9:CL:CHL:CHILE:CURICO:Vichuquen
+1:CL:CHL:CHILE:PETORCA:Cabildo
+2:CL:CHL:CHILE:PETORCA:La Ligua
+3:CL:CHL:CHILE:PETORCA:Papudo
+4:CL:CHL:CHILE:PETORCA:Petorca
+5:CL:CHL:CHILE:PETORCA:Zapallar
+1:CL:CHL:CHILE:MALLECO:Angol
+2:CL:CHL:CHILE:MALLECO:Collipulli
+3:CL:CHL:CHILE:MALLECO:Curacautin
+4:CL:CHL:CHILE:MALLECO:Ercilla
+5:CL:CHL:CHILE:MALLECO:Lonquimay
+6:CL:CHL:CHILE:MALLECO:Los Sauces
+7:CL:CHL:CHILE:MALLECO:Lumaco
+8:CL:CHL:CHILE:MALLECO:Puren
+9:CL:CHL:CHILE:MALLECO:Renaico
+10:CL:CHL:CHILE:MALLECO:Traiguen
+11:CL:CHL:CHILE:MALLECO:Victoria
+1:CL:CHL:CHILE:SAN ANTONIO:Algarrobo
+2:CL:CHL:CHILE:SAN ANTONIO:Cartagena
+3:CL:CHL:CHILE:SAN ANTONIO:El Quisco
+4:CL:CHL:CHILE:SAN ANTONIO:El Tabo
+5:CL:CHL:CHILE:SAN ANTONIO:San Antonio
+6:CL:CHL:CHILE:SAN ANTONIO:Santo  Domingo
diff --git a/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..5cd2465
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN1_LEX.txt
@@ -0,0 +1,39 @@
+1:CN-34:CN:ANHUI
+2:CN-92:CN:AOMEN (ZH)
+3:CN-0:CN:BEIJING
+4:CN-50:CN:CHONGQING
+5:CN-35:CN:FUJIAN
+6:CN-62:CN:GANSU
+7:CN-44:CN:GUANGDONG
+8:CN-45:CN:GUANGXI
+9:CN-52:CN:GUIZHOU
+10:CN-46:CN:HAINAN
+11:CN-73:CN:HEBEI
+12:CN-23:CN:HEILONGJIANG
+13:CN-4:CN:HENAN
+14:CN-HK:CN:HONGKONG ISLAND
+15:CN-42:CN:HUBEI
+16:CN-43:CN:HUNAN
+17:CN-JK:CN:JAMMU AND KASHMIR
+18:CN-32:CN:JIANGSU
+19:CN-36:CN:JIANGXI
+20:CN-22:CN:JILIN
+21:CN-KOW:CN:KOWLOON AND NEW KOWLOON
+22:CN-72:CN:LIAONING
+23:CN-MAR:CN:MARINE
+24:CN-75:CN:NEI MONGOL ZIZHIQU
+25:CN-NT:CN:NEW TERRITORIES
+26:CN-64:CN:NINGXIA
+27:CN-63:CN:QINGHAI
+28:CN-6:CN:SHAANXI
+29:CN-37:CN:SHANDONG
+30:CN-3:CN:SHANGHAI
+31:CN-74:CN:SHANXI
+32:CN-5:CN:SICHUAN
+33:CN-7:CN:TAIWAN
+34:CN-2:CN:TIANJIN
+35:CN-9:CN:XIANGGANG (ZH)
+36:CN-65:CN:XINJIANG UYGUR
+37:CN-54:CN:XIZANG ZIZHIQU (TIBET)
+38:CN-53:CN:YUNNAN
+39:CN-33:CN:ZHEJIANG
diff --git a/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..982a64e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CHN/CHN_ADMIN2_LEX.txt
@@ -0,0 +1,2414 @@
+1:CN:CHN:CHINA:Yunnan:Anning
+2:CN:CHN:CHINA:Yunnan:Baoshan
+3:CN:CHN:CHINA:Yunnan:Bijiang
+4:CN:CHN:CHINA:Yunnan:Binchuan
+5:CN:CHN:CHINA:Yunnan:Cangyuan
+6:CN:CHN:CHINA:Yunnan:Changning
+7:CN:CHN:CHINA:Yunnan:Chengjiang
+8:CN:CHN:CHINA:Yunnan:Chengong
+9:CN:CHN:CHINA:Yunnan:Chuxiong
+10:CN:CHN:CHINA:Yunnan:Daguan
+11:CN:CHN:CHINA:Yunnan:Dali
+12:CN:CHN:CHINA:Yunnan:Dayao
+13:CN:CHN:CHINA:Yunnan:Deqen
+14:CN:CHN:CHINA:Yunnan:Dongchun Shi
+15:CN:CHN:CHINA:Yunnan:Eryuan
+16:CN:CHN:CHINA:Yunnan:Eshan
+17:CN:CHN:CHINA:Yunnan:Fengqing
+18:CN:CHN:CHINA:Yunnan:Fugong
+19:CN:CHN:CHINA:Yunnan:Fuming
+20:CN:CHN:CHINA:Yunnan:Funing
+21:CN:CHN:CHINA:Yunnan:Fuyuan
+22:CN:CHN:CHINA:Yunnan:Gejiu Shi
+23:CN:CHN:CHINA:Yunnan:Gengma
+24:CN:CHN:CHINA:Yunnan:Gongshan
+25:CN:CHN:CHINA:Yunnan:Guangnan
+26:CN:CHN:CHINA:Yunnan:Hekou
+27:CN:CHN:CHINA:Yunnan:Heqing
+28:CN:CHN:CHINA:Yunnan:Honghe
+29:CN:CHN:CHINA:Yunnan:Huaning
+30:CN:CHN:CHINA:Yunnan:Huaping
+31:CN:CHN:CHINA:Yunnan:Huize
+32:CN:CHN:CHINA:Yunnan:Jianchuan
+33:CN:CHN:CHINA:Yunnan:Jiangcheng
+34:CN:CHN:CHINA:Yunnan:Jiangchuan
+35:CN:CHN:CHINA:Yunnan:Jianshui
+36:CN:CHN:CHINA:Yunnan:Jingdong
+37:CN:CHN:CHINA:Yunnan:Jinggu
+38:CN:CHN:CHINA:Yunnan:Jinghong
+39:CN:CHN:CHINA:Yunnan:Jinning
+40:CN:CHN:CHINA:Yunnan:Jinping
+41:CN:CHN:CHINA:Yunnan:Kaiyuan Shi
+42:CN:CHN:CHINA:Yunnan:Kuenming Shiqu
+43:CN:CHN:CHINA:Yunnan:Lancang
+44:CN:CHN:CHINA:Yunnan:Lanping
+45:CN:CHN:CHINA:Yunnan:Lianghe
+46:CN:CHN:CHINA:Yunnan:Lijiang
+47:CN:CHN:CHINA:Yunnan:Lincang
+48:CN:CHN:CHINA:Yunnan:Longchuan
+49:CN:CHN:CHINA:Yunnan:Longling
+50:CN:CHN:CHINA:Yunnan:Luchun
+51:CN:CHN:CHINA:Yunnan:Ludian
+52:CN:CHN:CHINA:Yunnan:Lufeng
+53:CN:CHN:CHINA:Yunnan:Luliang
+54:CN:CHN:CHINA:Yunnan:Lunan
+55:CN:CHN:CHINA:Yunnan:Luoping
+56:CN:CHN:CHINA:Yunnan:Luquan
+57:CN:CHN:CHINA:Yunnan:Lushui
+58:CN:CHN:CHINA:Yunnan:Luxi
+59:CN:CHN:CHINA:Yunnan:Maguan
+60:CN:CHN:CHINA:Yunnan:Malipo
+61:CN:CHN:CHINA:Yunnan:Malong
+62:CN:CHN:CHINA:Yunnan:Menghai
+63:CN:CHN:CHINA:Yunnan:Mengla
+64:CN:CHN:CHINA:Yunnan:Menglian
+65:CN:CHN:CHINA:Yunnan:Mengzi
+66:CN:CHN:CHINA:Yunnan:Midu
+67:CN:CHN:CHINA:Yunnan:Mile
+68:CN:CHN:CHINA:Yunnan:Mojiang
+69:CN:CHN:CHINA:Yunnan:Mouding
+70:CN:CHN:CHINA:Yunnan:Nanhua
+71:CN:CHN:CHINA:Yunnan:Nanjian
+72:CN:CHN:CHINA:Yunnan:Ninglang
+73:CN:CHN:CHINA:Yunnan:Pingbian
+74:CN:CHN:CHINA:Yunnan:Puer
+75:CN:CHN:CHINA:Yunnan:Qiaojia
+76:CN:CHN:CHINA:Yunnan:Qiubei
+77:CN:CHN:CHINA:Yunnan:Qujing
+78:CN:CHN:CHINA:Yunnan:Ruili
+79:CN:CHN:CHINA:Yunnan:Shidian
+80:CN:CHN:CHINA:Yunnan:Shiping
+81:CN:CHN:CHINA:Yunnan:Shizong
+82:CN:CHN:CHINA:Yunnan:Shuangbai
+83:CN:CHN:CHINA:Yunnan:Shuangjiang
+84:CN:CHN:CHINA:Yunnan:Shuifu
+85:CN:CHN:CHINA:Yunnan:Simao
+86:CN:CHN:CHINA:Yunnan:Songming
+87:CN:CHN:CHINA:Yunnan:Suijiang
+88:CN:CHN:CHINA:Yunnan:Tengchong
+89:CN:CHN:CHINA:Yunnan:Tonghai
+90:CN:CHN:CHINA:Yunnan:Wandingzhen
+91:CN:CHN:CHINA:Yunnan:Weishan
+92:CN:CHN:CHINA:Yunnan:Weixi
+93:CN:CHN:CHINA:Yunnan:Weixin
+94:CN:CHN:CHINA:Yunnan:Wuding
+95:CN:CHN:CHINA:Yunnan:Wuenshan
+96:CN:CHN:CHINA:Yunnan:Xiaguan Shi
+97:CN:CHN:CHINA:Yunnan:Xiangyun
+98:CN:CHN:CHINA:Yunnan:Xichou
+99:CN:CHN:CHINA:Yunnan:Ximeng
+100:CN:CHN:CHINA:Yunnan:Xinping
+101:CN:CHN:CHINA:Yunnan:Xuanwei
+102:CN:CHN:CHINA:Yunnan:Xundian
+103:CN:CHN:CHINA:Yunnan:Yangbi
+104:CN:CHN:CHINA:Yunnan:Yanjin
+105:CN:CHN:CHINA:Yunnan:Yanshan
+106:CN:CHN:CHINA:Yunnan:Yaoan
+107:CN:CHN:CHINA:Yunnan:Yiliang
+108:CN:CHN:CHINA:Yunnan:Yimen
+109:CN:CHN:CHINA:Yunnan:Yingjiang
+110:CN:CHN:CHINA:Yunnan:Yongde
+111:CN:CHN:CHINA:Yunnan:Yongping
+112:CN:CHN:CHINA:Yunnan:Yongren
+113:CN:CHN:CHINA:Yunnan:Yongshan
+114:CN:CHN:CHINA:Yunnan:Yongsheng
+115:CN:CHN:CHINA:Yunnan:Yuanjiang
+116:CN:CHN:CHINA:Yunnan:Yuanmou
+117:CN:CHN:CHINA:Yunnan:Yuanyang
+118:CN:CHN:CHINA:Yunnan:Yun Xian
+119:CN:CHN:CHINA:Yunnan:Yunlong
+120:CN:CHN:CHINA:Yunnan:Yuxi
+121:CN:CHN:CHINA:Yunnan:Zhanyi
+122:CN:CHN:CHINA:Yunnan:Zhaotong
+123:CN:CHN:CHINA:Yunnan:Zhaotong Shi
+124:CN:CHN:CHINA:Yunnan:Zhenkang
+125:CN:CHN:CHINA:Yunnan:Zhenxiong
+126:CN:CHN:CHINA:Yunnan:Zhenyuan
+127:CN:CHN:CHINA:Yunnan:Zhongdian
+1:CN:CHN:CHINA:Guizhou:Anlong
+2:CN:CHN:CHINA:Guizhou:Anshun
+3:CN:CHN:CHINA:Guizhou:Anshun Shi
+4:CN:CHN:CHINA:Guizhou:Bijie
+5:CN:CHN:CHINA:Guizhou:Ceheng
+6:CN:CHN:CHINA:Guizhou:Cengong
+7:CN:CHN:CHINA:Guizhou:Changshun
+8:CN:CHN:CHINA:Guizhou:Chishui
+9:CN:CHN:CHINA:Guizhou:Congjiang
+10:CN:CHN:CHINA:Guizhou:Dafang
+11:CN:CHN:CHINA:Guizhou:Danzhai
+12:CN:CHN:CHINA:Guizhou:Daozhen
+13:CN:CHN:CHINA:Guizhou:Dejiang
+14:CN:CHN:CHINA:Guizhou:Dushan
+15:CN:CHN:CHINA:Guizhou:Duyun
+16:CN:CHN:CHINA:Guizhou:Fenggang
+17:CN:CHN:CHINA:Guizhou:Fuquan
+18:CN:CHN:CHINA:Guizhou:Guanling
+19:CN:CHN:CHINA:Guizhou:Guiding
+20:CN:CHN:CHINA:Guizhou:Guiyang Shi
+21:CN:CHN:CHINA:Guizhou:Hezhang
+22:CN:CHN:CHINA:Guizhou:Huangping
+23:CN:CHN:CHINA:Guizhou:Huishui
+24:CN:CHN:CHINA:Guizhou:Jiangkou
+25:CN:CHN:CHINA:Guizhou:Jianhe
+26:CN:CHN:CHINA:Guizhou:Jinping
+27:CN:CHN:CHINA:Guizhou:Jinsha
+28:CN:CHN:CHINA:Guizhou:Kaili
+29:CN:CHN:CHINA:Guizhou:Kaiyang
+30:CN:CHN:CHINA:Guizhou:Leishan
+31:CN:CHN:CHINA:Guizhou:Libo
+32:CN:CHN:CHINA:Guizhou:Liping
+33:CN:CHN:CHINA:Guizhou:Longli
+34:CN:CHN:CHINA:Guizhou:Luodian
+35:CN:CHN:CHINA:Guizhou:Luzhi
+36:CN:CHN:CHINA:Guizhou:Majiang
+37:CN:CHN:CHINA:Guizhou:Meitan
+38:CN:CHN:CHINA:Guizhou:Nayong
+39:CN:CHN:CHINA:Guizhou:Panxian
+40:CN:CHN:CHINA:Guizhou:Pingba
+41:CN:CHN:CHINA:Guizhou:Pingtang
+42:CN:CHN:CHINA:Guizhou:Pu An
+43:CN:CHN:CHINA:Guizhou:Puding
+44:CN:CHN:CHINA:Guizhou:Qianxi
+45:CN:CHN:CHINA:Guizhou:Qinglong
+46:CN:CHN:CHINA:Guizhou:Qingzhen
+47:CN:CHN:CHINA:Guizhou:Renhuai
+48:CN:CHN:CHINA:Guizhou:Rongjiang
+49:CN:CHN:CHINA:Guizhou:Sandu
+50:CN:CHN:CHINA:Guizhou:Sansui
+51:CN:CHN:CHINA:Guizhou:Shibing
+52:CN:CHN:CHINA:Guizhou:Shiqian
+53:CN:CHN:CHINA:Guizhou:Shuicheng
+54:CN:CHN:CHINA:Guizhou:Sinan
+55:CN:CHN:CHINA:Guizhou:Songtao
+56:CN:CHN:CHINA:Guizhou:Suiyang
+57:CN:CHN:CHINA:Guizhou:Taijiang
+58:CN:CHN:CHINA:Guizhou:Tianzhu
+59:CN:CHN:CHINA:Guizhou:Tongren
+60:CN:CHN:CHINA:Guizhou:Tongzi
+61:CN:CHN:CHINA:Guizhou:Wangmo
+62:CN:CHN:CHINA:Guizhou:Wanshan
+63:CN:CHN:CHINA:Guizhou:Weining
+64:CN:CHN:CHINA:Guizhou:Weng An
+65:CN:CHN:CHINA:Guizhou:Wuchuan
+66:CN:CHN:CHINA:Guizhou:Xifeng
+67:CN:CHN:CHINA:Guizhou:Xingren
+68:CN:CHN:CHINA:Guizhou:Xingyi
+69:CN:CHN:CHINA:Guizhou:Xishui
+70:CN:CHN:CHINA:Guizhou:Xiuwen
+71:CN:CHN:CHINA:Guizhou:Yanhe
+72:CN:CHN:CHINA:Guizhou:Yinjiang
+73:CN:CHN:CHINA:Guizhou:Yuping
+74:CN:CHN:CHINA:Guizhou:Yuqing
+75:CN:CHN:CHINA:Guizhou:Zhenfeng
+76:CN:CHN:CHINA:Guizhou:Zheng An
+77:CN:CHN:CHINA:Guizhou:Zhenning
+78:CN:CHN:CHINA:Guizhou:Zhenyuan
+79:CN:CHN:CHINA:Guizhou:Zhijin
+80:CN:CHN:CHINA:Guizhou:Ziyun
+81:CN:CHN:CHINA:Guizhou:Zunyi
+82:CN:CHN:CHINA:Guizhou:Zunyi Shi
+1:CN:CHN:CHINA:Shanxi:Anze
+2:CN:CHN:CHINA:Shanxi:Baode
+3:CN:CHN:CHINA:Shanxi:Changzhi
+4:CN:CHN:CHINA:Shanxi:Changzhi Shi
+5:CN:CHN:CHINA:Shanxi:Dai Xian
+6:CN:CHN:CHINA:Shanxi:Daning
+7:CN:CHN:CHINA:Shanxi:Datong
+8:CN:CHN:CHINA:Shanxi:Datong Shi
+9:CN:CHN:CHINA:Shanxi:Dingxiang
+10:CN:CHN:CHINA:Shanxi:Fangshan
+11:CN:CHN:CHINA:Shanxi:Fanshi
+12:CN:CHN:CHINA:Shanxi:Fenxi
+13:CN:CHN:CHINA:Shanxi:Fenyang
+14:CN:CHN:CHINA:Shanxi:Fushan
+15:CN:CHN:CHINA:Shanxi:Gaoping
+16:CN:CHN:CHINA:Shanxi:Gu Xian
+17:CN:CHN:CHINA:Shanxi:Guangling
+18:CN:CHN:CHINA:Shanxi:Hejin
+19:CN:CHN:CHINA:Shanxi:Hequ
+20:CN:CHN:CHINA:Shanxi:Heshun
+21:CN:CHN:CHINA:Shanxi:Hongtong
+22:CN:CHN:CHINA:Shanxi:Houma Shi
+23:CN:CHN:CHINA:Shanxi:Huairen
+24:CN:CHN:CHINA:Shanxi:Huguan
+25:CN:CHN:CHINA:Shanxi:Hunyuan
+26:CN:CHN:CHINA:Shanxi:Huo Xian
+27:CN:CHN:CHINA:Shanxi:Ji Xian
+28:CN:CHN:CHINA:Shanxi:Jiang Xian
+29:CN:CHN:CHINA:Shanxi:Jiaocheng
+30:CN:CHN:CHINA:Shanxi:Jiaokou
+31:CN:CHN:CHINA:Shanxi:Jiexlu
+32:CN:CHN:CHINA:Shanxi:Jingcheng
+33:CN:CHN:CHINA:Shanxi:Jingle
+34:CN:CHN:CHINA:Shanxi:Jinshan
+35:CN:CHN:CHINA:Shanxi:Kelan
+36:CN:CHN:CHINA:Shanxi:Lan Xian
+37:CN:CHN:CHINA:Shanxi:Licheng
+38:CN:CHN:CHINA:Shanxi:Lin Xian
+39:CN:CHN:CHINA:Shanxi:Linfen
+40:CN:CHN:CHINA:Shanxi:Linfen Shi
+41:CN:CHN:CHINA:Shanxi:Lingchuan
+42:CN:CHN:CHINA:Shanxi:Lingqiu
+43:CN:CHN:CHINA:Shanxi:Lingshi
+44:CN:CHN:CHINA:Shanxi:Linyi
+45:CN:CHN:CHINA:Shanxi:Lishi
+46:CN:CHN:CHINA:Shanxi:Liulin
+47:CN:CHN:CHINA:Shanxi:Loufan
+48:CN:CHN:CHINA:Shanxi:Lucheng
+49:CN:CHN:CHINA:Shanxi:Ningwu
+50:CN:CHN:CHINA:Shanxi:Pianguan
+51:CN:CHN:CHINA:Shanxi:Pingding
+52:CN:CHN:CHINA:Shanxi:Pinglu
+53:CN:CHN:CHINA:Shanxi:Pingshun
+54:CN:CHN:CHINA:Shanxi:Pingyao
+55:CN:CHN:CHINA:Shanxi:Pu Xian
+56:CN:CHN:CHINA:Shanxi:Qi Xian
+57:CN:CHN:CHINA:Shanxi:Qin Xian
+58:CN:CHN:CHINA:Shanxi:Qingxu
+59:CN:CHN:CHINA:Shanxi:Qinshui
+60:CN:CHN:CHINA:Shanxi:Qinyuan
+61:CN:CHN:CHINA:Shanxi:Quwo
+62:CN:CHN:CHINA:Shanxi:Ruicheng
+63:CN:CHN:CHINA:Shanxi:Shanyin
+64:CN:CHN:CHINA:Shanxi:Shenchi
+65:CN:CHN:CHINA:Shanxi:Shilou
+66:CN:CHN:CHINA:Shanxi:Shouyang
+67:CN:CHN:CHINA:Shanxi:Shuo Xian
+68:CN:CHN:CHINA:Shanxi:Taigu
+69:CN:CHN:CHINA:Shanxi:Taiyuan Shiqu
+70:CN:CHN:CHINA:Shanxi:Tianzhen
+71:CN:CHN:CHINA:Shanxi:Tunliu
+72:CN:CHN:CHINA:Shanxi:Wanrong
+73:CN:CHN:CHINA:Shanxi:Wenshui
+74:CN:CHN:CHINA:Shanxi:Wenxi
+75:CN:CHN:CHINA:Shanxi:Wutai
+76:CN:CHN:CHINA:Shanxi:Wuxiang
+77:CN:CHN:CHINA:Shanxi:Wuzhai
+78:CN:CHN:CHINA:Shanxi:Xi Xian
+79:CN:CHN:CHINA:Shanxi:Xia Xian
+80:CN:CHN:CHINA:Shanxi:Xiangfen
+81:CN:CHN:CHINA:Shanxi:Xiangning
+82:CN:CHN:CHINA:Shanxi:Xiangyuan
+83:CN:CHN:CHINA:Shanxi:Xiaoyi
+84:CN:CHN:CHINA:Shanxi:Xin Xian
+85:CN:CHN:CHINA:Shanxi:Xing Xian
+86:CN:CHN:CHINA:Shanxi:Xinjiang
+87:CN:CHN:CHINA:Shanxi:Xiyang
+88:CN:CHN:CHINA:Shanxi:Yangcheng
+89:CN:CHN:CHINA:Shanxi:Yanggao
+90:CN:CHN:CHINA:Shanxi:Yangqu
+91:CN:CHN:CHINA:Shanxi:Yangquan Shi
+92:CN:CHN:CHINA:Shanxi:Yicheng
+93:CN:CHN:CHINA:Shanxi:Ying Xian
+94:CN:CHN:CHINA:Shanxi:Yonghe
+95:CN:CHN:CHINA:Shanxi:Yongji
+96:CN:CHN:CHINA:Shanxi:Youyu
+97:CN:CHN:CHINA:Shanxi:Yu Xian
+98:CN:CHN:CHINA:Shanxi:Yuanping
+99:CN:CHN:CHINA:Shanxi:Yuanqu
+100:CN:CHN:CHINA:Shanxi:Yuci
+101:CN:CHN:CHINA:Shanxi:Yuci Shi
+102:CN:CHN:CHINA:Shanxi:Yuncheng
+103:CN:CHN:CHINA:Shanxi:Yushe
+104:CN:CHN:CHINA:Shanxi:Zhangzhi
+105:CN:CHN:CHINA:Shanxi:Zhongyang
+106:CN:CHN:CHINA:Shanxi:Zuoquan
+107:CN:CHN:CHINA:Shanxi:Zuoyun
+1:CN:CHN:CHINA:Qinghai:Baima
+2:CN:CHN:CHINA:Qinghai:Chindu
+3:CN:CHN:CHINA:Qinghai:Daqaidam
+4:CN:CHN:CHINA:Qinghai:Darlag
+5:CN:CHN:CHINA:Qinghai:Datong
+6:CN:CHN:CHINA:Qinghai:Dulan
+7:CN:CHN:CHINA:Qinghai:Gade
+8:CN:CHN:CHINA:Qinghai:Gangca
+9:CN:CHN:CHINA:Qinghai:Golmud Shi
+10:CN:CHN:CHINA:Qinghai:Gonghe
+11:CN:CHN:CHINA:Qinghai:Guide
+12:CN:CHN:CHINA:Qinghai:Guinan
+13:CN:CHN:CHINA:Qinghai:Haiyan
+14:CN:CHN:CHINA:Qinghai:Henan
+15:CN:CHN:CHINA:Qinghai:Hualong
+16:CN:CHN:CHINA:Qinghai:Huangyuan
+17:CN:CHN:CHINA:Qinghai:Huangzhong
+18:CN:CHN:CHINA:Qinghai:Huzhu
+19:CN:CHN:CHINA:Qinghai:Jainca
+20:CN:CHN:CHINA:Qinghai:Jigzhi
+21:CN:CHN:CHINA:Qinghai:Ledu
+22:CN:CHN:CHINA:Qinghai:Lenghu
+23:CN:CHN:CHINA:Qinghai:Madoi
+24:CN:CHN:CHINA:Qinghai:Mangnai
+25:CN:CHN:CHINA:Qinghai:Maqen
+26:CN:CHN:CHINA:Qinghai:Menyuan
+27:CN:CHN:CHINA:Qinghai:Minhe
+28:CN:CHN:CHINA:Qinghai:Nangqen
+29:CN:CHN:CHINA:Qinghai:Ping An
+30:CN:CHN:CHINA:Qinghai:Qilian
+31:CN:CHN:CHINA:Qinghai:Qumarleb
+32:CN:CHN:CHINA:Qinghai:Tianjun
+33:CN:CHN:CHINA:Qinghai:Tongde
+34:CN:CHN:CHINA:Qinghai:Tongren
+35:CN:CHN:CHINA:Qinghai:Ulan
+36:CN:CHN:CHINA:Qinghai:Xinghan
+37:CN:CHN:CHINA:Qinghai:Xining Shiqu
+38:CN:CHN:CHINA:Qinghai:Xunhua
+39:CN:CHN:CHINA:Qinghai:Yushu
+40:CN:CHN:CHINA:Qinghai:Zadoi
+41:CN:CHN:CHINA:Qinghai:Zekog
+42:CN:CHN:CHINA:Qinghai:Zhidot
+1:CN:CHN:CHINA:Chongqing:Ba Xian
+2:CN:CHN:CHINA:Chongqing:Bishan
+3:CN:CHN:CHINA:Chongqing:Changshou
+4:CN:CHN:CHINA:Chongqing:Chengkou
+5:CN:CHN:CHINA:Chongqing:Chongqing Shiqu
+6:CN:CHN:CHINA:Chongqing:Dazu
+7:CN:CHN:CHINA:Chongqing:Dianjiang
+8:CN:CHN:CHINA:Chongqing:Fengdu
+9:CN:CHN:CHINA:Chongqing:Fengjie
+10:CN:CHN:CHINA:Chongqing:Fuling
+11:CN:CHN:CHINA:Chongqing:Hechuan
+12:CN:CHN:CHINA:Chongqing:Jiangbei
+13:CN:CHN:CHINA:Chongqing:Jiangjin
+14:CN:CHN:CHINA:Chongqing:Kai Xian
+15:CN:CHN:CHINA:Chongqing:Liangping
+16:CN:CHN:CHINA:Chongqing:Nanchuan
+17:CN:CHN:CHINA:Chongqing:Pengshui
+18:CN:CHN:CHINA:Chongqing:Qianjiang
+19:CN:CHN:CHINA:Chongqing:Qijiang
+20:CN:CHN:CHINA:Chongqing:Rongchang
+21:CN:CHN:CHINA:Chongqing:Shizhu
+22:CN:CHN:CHINA:Chongqing:Tongliang
+23:CN:CHN:CHINA:Chongqing:Tongnan
+24:CN:CHN:CHINA:Chongqing:Wan Xian
+25:CN:CHN:CHINA:Chongqing:Wanxian Shi
+26:CN:CHN:CHINA:Chongqing:Wulong
+27:CN:CHN:CHINA:Chongqing:Wushan
+28:CN:CHN:CHINA:Chongqing:Wuxi
+29:CN:CHN:CHINA:Chongqing:Xiushan
+30:CN:CHN:CHINA:Chongqing:Yongchuan
+31:CN:CHN:CHINA:Chongqing:Youyang
+32:CN:CHN:CHINA:Chongqing:Yunyang
+33:CN:CHN:CHINA:Chongqing:Zhong Xian
+1:CN:CHN:CHINA:Jammu and Kashmir:Ladakh (Leh)
+1:CN:CHN:CHINA:Henan:Anyang
+2:CN:CHN:CHINA:Henan:Anyang Shi
+3:CN:CHN:CHINA:Henan:Baofeng
+4:CN:CHN:CHINA:Henan:Biyang
+5:CN:CHN:CHINA:Henan:Boai
+6:CN:CHN:CHINA:Henan:Changge
+7:CN:CHN:CHINA:Henan:Changyuan
+8:CN:CHN:CHINA:Henan:Dancheng
+9:CN:CHN:CHINA:Henan:Deng Xian
+10:CN:CHN:CHINA:Henan:Dengfeng
+11:CN:CHN:CHINA:Henan:Fangcheng
+12:CN:CHN:CHINA:Henan:Fanxian
+13:CN:CHN:CHINA:Henan:Fengqiu
+14:CN:CHN:CHINA:Henan:Fugou
+15:CN:CHN:CHINA:Henan:Gong Xian
+16:CN:CHN:CHINA:Henan:Guangshan
+17:CN:CHN:CHINA:Henan:Gushi
+18:CN:CHN:CHINA:Henan:Hebi Shi
+19:CN:CHN:CHINA:Henan:Houjia
+20:CN:CHN:CHINA:Henan:Hua Xian
+21:CN:CHN:CHINA:Henan:Huaibin
+22:CN:CHN:CHINA:Henan:Huaiyang
+23:CN:CHN:CHINA:Henan:Huangchuan
+24:CN:CHN:CHINA:Henan:Hui Xian
+25:CN:CHN:CHINA:Henan:Ji Xian
+26:CN:CHN:CHINA:Henan:Jia Xian
+27:CN:CHN:CHINA:Henan:Jiaozuo
+28:CN:CHN:CHINA:Henan:Jiyuan
+29:CN:CHN:CHINA:Henan:Kaifeng
+30:CN:CHN:CHINA:Henan:Kaifeng Shi
+31:CN:CHN:CHINA:Henan:Lankao
+32:CN:CHN:CHINA:Henan:Lin Xian
+33:CN:CHN:CHINA:Henan:Lingbao
+34:CN:CHN:CHINA:Henan:Linru
+35:CN:CHN:CHINA:Henan:Linying
+36:CN:CHN:CHINA:Henan:Luanchuan
+37:CN:CHN:CHINA:Henan:Luohe Shi
+38:CN:CHN:CHINA:Henan:Luoning
+39:CN:CHN:CHINA:Henan:Luoshan
+40:CN:CHN:CHINA:Henan:Luoyang Shi
+41:CN:CHN:CHINA:Henan:Lushan
+42:CN:CHN:CHINA:Henan:Lushi
+43:CN:CHN:CHINA:Henan:Luyi
+44:CN:CHN:CHINA:Henan:Meng Xian
+45:CN:CHN:CHINA:Henan:Menjin
+46:CN:CHN:CHINA:Henan:Mi Xian
+47:CN:CHN:CHINA:Henan:Mianchi
+48:CN:CHN:CHINA:Henan:Mingquan
+49:CN:CHN:CHINA:Henan:Nanle
+50:CN:CHN:CHINA:Henan:Nanyang
+51:CN:CHN:CHINA:Henan:Nanyang Shi
+52:CN:CHN:CHINA:Henan:Nanzhao
+53:CN:CHN:CHINA:Henan:Neihuang
+54:CN:CHN:CHINA:Henan:Neixiang
+55:CN:CHN:CHINA:Henan:Ningling
+56:CN:CHN:CHINA:Henan:Pingdingshan Shi
+57:CN:CHN:CHINA:Henan:Pingyu
+58:CN:CHN:CHINA:Henan:Puyang
+59:CN:CHN:CHINA:Henan:Qi Xian
+60:CN:CHN:CHINA:Henan:Qingfeng
+61:CN:CHN:CHINA:Henan:Qinyang
+62:CN:CHN:CHINA:Henan:Queshan
+63:CN:CHN:CHINA:Henan:Runan
+64:CN:CHN:CHINA:Henan:Ruyang
+65:CN:CHN:CHINA:Henan:Sanmenxia Shi
+66:CN:CHN:CHINA:Henan:Shan Xian
+67:CN:CHN:CHINA:Henan:Shangcai
+68:CN:CHN:CHINA:Henan:Shangcheng
+69:CN:CHN:CHINA:Henan:Shangqiu
+70:CN:CHN:CHINA:Henan:Shangqiu Shi
+71:CN:CHN:CHINA:Henan:Shangshui
+72:CN:CHN:CHINA:Henan:Shenqiu
+73:CN:CHN:CHINA:Henan:Sheqi
+74:CN:CHN:CHINA:Henan:Song Xian
+75:CN:CHN:CHINA:Henan:Sui Xian
+76:CN:CHN:CHINA:Henan:Suiping
+77:CN:CHN:CHINA:Henan:Taikang
+78:CN:CHN:CHINA:Henan:Taiqian
+79:CN:CHN:CHINA:Henan:Tanghe
+80:CN:CHN:CHINA:Henan:Tangyin
+81:CN:CHN:CHINA:Henan:Tongbai
+82:CN:CHN:CHINA:Henan:Tongxu
+83:CN:CHN:CHINA:Henan:Weishi
+84:CN:CHN:CHINA:Henan:Wen Xian
+85:CN:CHN:CHINA:Henan:Wuyang
+86:CN:CHN:CHINA:Henan:Wuzhi
+87:CN:CHN:CHINA:Henan:Xi Xian
+88:CN:CHN:CHINA:Henan:Xiangcheng
+89:CN:CHN:CHINA:Henan:Xiayi
+90:CN:CHN:CHINA:Henan:Xichuan
+91:CN:CHN:CHINA:Henan:Xihua
+92:CN:CHN:CHINA:Henan:Xin An
+93:CN:CHN:CHINA:Henan:Xincai
+94:CN:CHN:CHINA:Henan:Xingyang
+95:CN:CHN:CHINA:Henan:Xinxian
+96:CN:CHN:CHINA:Henan:Xinxiang
+97:CN:CHN:CHINA:Henan:Xinxiang Shi
+98:CN:CHN:CHINA:Henan:Xinyang
+99:CN:CHN:CHINA:Henan:Xinyang Shi
+100:CN:CHN:CHINA:Henan:Xinye
+101:CN:CHN:CHINA:Henan:Xinzheng
+102:CN:CHN:CHINA:Henan:Xiping
+103:CN:CHN:CHINA:Henan:Xiuwu
+104:CN:CHN:CHINA:Henan:Xixia
+105:CN:CHN:CHINA:Henan:Xuchang
+106:CN:CHN:CHINA:Henan:Xuchang Shi
+107:CN:CHN:CHINA:Henan:Xun Xian
+108:CN:CHN:CHINA:Henan:Yancheng
+109:CN:CHN:CHINA:Henan:Yanjin
+110:CN:CHN:CHINA:Henan:Yanling
+111:CN:CHN:CHINA:Henan:Yanshi
+112:CN:CHN:CHINA:Henan:Yichuan
+113:CN:CHN:CHINA:Henan:Yie Xian
+114:CN:CHN:CHINA:Henan:Yima Shi
+115:CN:CHN:CHINA:Henan:Yiyang
+116:CN:CHN:CHINA:Henan:Yongcheng
+117:CN:CHN:CHINA:Henan:Yu Xian
+118:CN:CHN:CHINA:Henan:Yuanyang
+119:CN:CHN:CHINA:Henan:Yucheng
+120:CN:CHN:CHINA:Henan:Zhecheng
+121:CN:CHN:CHINA:Henan:Zhengyang
+122:CN:CHN:CHINA:Henan:Zhengzhou Shiqu
+123:CN:CHN:CHINA:Henan:Zhenping
+124:CN:CHN:CHINA:Henan:Zhongmou
+125:CN:CHN:CHINA:Henan:Zhoukou Shi
+126:CN:CHN:CHINA:Henan:Zhumadian Shi
+1:CN:CHN:CHINA:New Territories:CHN.L2.18
+2:CN:CHN:CHINA:New Territories:CHN.L2.19
+3:CN:CHN:CHINA:New Territories:CHN.L2.20
+4:CN:CHN:CHINA:New Territories:CHN.L2.21
+5:CN:CHN:CHINA:New Territories:CHN.L2.22
+6:CN:CHN:CHINA:New Territories:CHN.L2.23
+7:CN:CHN:CHINA:New Territories:CHN.L2.24
+8:CN:CHN:CHINA:New Territories:CHN.L2.25
+9:CN:CHN:CHINA:New Territories:CHN.L2.26
+10:CN:CHN:CHINA:New Territories:CHN.L2.27
+11:CN:CHN:CHINA:New Territories:CHN.L2.28
+12:CN:CHN:CHINA:New Territories:CHN.L2.29
+13:CN:CHN:CHINA:New Territories:CHN.L2.30
+14:CN:CHN:CHINA:New Territories:CHN.L2.31
+15:CN:CHN:CHINA:New Territories:CHN.L2.32
+1:CN:CHN:CHINA:Shanghai:Baoshan
+2:CN:CHN:CHINA:Shanghai:Chongming
+3:CN:CHN:CHINA:Shanghai:Chuansha
+4:CN:CHN:CHINA:Shanghai:Fengxian
+5:CN:CHN:CHINA:Shanghai:Jiading
+6:CN:CHN:CHINA:Shanghai:Jinshan
+7:CN:CHN:CHINA:Shanghai:Nanhui
+8:CN:CHN:CHINA:Shanghai:Qingpu
+9:CN:CHN:CHINA:Shanghai:Shanghai
+10:CN:CHN:CHINA:Shanghai:Shanghai Shiqu
+11:CN:CHN:CHINA:Shanghai:Songjiang
+1:CN:CHN:CHINA:Marine:CHN.L2.10
+2:CN:CHN:CHINA:Marine:CHN.L2.11
+3:CN:CHN:CHINA:Marine:CHN.L2.12
+4:CN:CHN:CHINA:Marine:CHN.L2.13
+5:CN:CHN:CHINA:Marine:CHN.L2.14
+6:CN:CHN:CHINA:Marine:CHN.L2.15
+7:CN:CHN:CHINA:Marine:CHN.L2.16
+8:CN:CHN:CHINA:Marine:CHN.L2.17
+9:CN:CHN:CHINA:Marine:CHN.L2.5
+10:CN:CHN:CHINA:Marine:CHN.L2.6
+11:CN:CHN:CHINA:Marine:CHN.L2.7
+12:CN:CHN:CHINA:Marine:CHN.L2.8
+13:CN:CHN:CHINA:Marine:CHN.L2.9
+1:CN:CHN:CHINA:Hongkong Island:CHN.L2.1
+2:CN:CHN:CHINA:Hongkong Island:CHN.L2.2
+1:CN:CHN:CHINA:Nei Mongol Zizhiqu:Abag Qi
+2:CN:CHN:CHINA:Nei Mongol Zizhiqu:Abagnar Qi
+3:CN:CHN:CHINA:Nei Mongol Zizhiqu:Alxa Youqi
+4:CN:CHN:CHINA:Nei Mongol Zizhiqu:Alxa Zuoqi
+5:CN:CHN:CHINA:Nei Mongol Zizhiqu:Aohan Qi
+6:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ar Horqin Qi
+7:CN:CHN:CHINA:Nei Mongol Zizhiqu:Arun Qi
+8:CN:CHN:CHINA:Nei Mongol Zizhiqu:Bairin Zuoqi
+9:CN:CHN:CHINA:Nei Mongol Zizhiqu:Balrin Youqi
+10:CN:CHN:CHINA:Nei Mongol Zizhiqu:Baotou Shiqu
+11:CN:CHN:CHINA:Nei Mongol Zizhiqu:Butha Qi
+12:CN:CHN:CHINA:Nei Mongol Zizhiqu:Chenbarag Qi
+13:CN:CHN:CHINA:Nei Mongol Zizhiqu:Chifeng
+14:CN:CHN:CHINA:Nei Mongol Zizhiqu:Chifeng Shi
+15:CN:CHN:CHINA:Nei Mongol Zizhiqu:Dalad Qi
+16:CN:CHN:CHINA:Nei Mongol Zizhiqu:Darhan Muminggan Lia
+17:CN:CHN:CHINA:Nei Mongol Zizhiqu:Dengkou
+18:CN:CHN:CHINA:Nei Mongol Zizhiqu:Dong Ujimqin Qi
+19:CN:CHN:CHINA:Nei Mongol Zizhiqu:Dongsheng
+20:CN:CHN:CHINA:Nei Mongol Zizhiqu:Duolun
+21:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ejin Qi
+22:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ejinhoro Qi
+23:CN:CHN:CHINA:Nei Mongol Zizhiqu:Erenhot Shi
+24:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ergun Youqi
+25:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ergun Zuoqi
+26:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ewenkizu Zizhiqi
+27:CN:CHN:CHINA:Nei Mongol Zizhiqu:Fengzhen
+28:CN:CHN:CHINA:Nei Mongol Zizhiqu:Guyang
+29:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hagin Houqi
+30:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hailar Shi
+31:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hanggin Qi
+32:CN:CHN:CHINA:Nei Mongol Zizhiqu:Harqin Qi
+33:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hexigten Qi
+34:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hohhot Shiqu
+35:CN:CHN:CHINA:Nei Mongol Zizhiqu:Horinger
+36:CN:CHN:CHINA:Nei Mongol Zizhiqu:Horqin Youyiqianqi
+37:CN:CHN:CHINA:Nei Mongol Zizhiqu:Horqin Youyizhongqi
+38:CN:CHN:CHINA:Nei Mongol Zizhiqu:Horqin Zuoyihouqi
+39:CN:CHN:CHINA:Nei Mongol Zizhiqu:Horqin Zuoyizhongqi
+40:CN:CHN:CHINA:Nei Mongol Zizhiqu:Huade
+41:CN:CHN:CHINA:Nei Mongol Zizhiqu:Hure Qi
+42:CN:CHN:CHINA:Nei Mongol Zizhiqu:Jalaid Qi
+43:CN:CHN:CHINA:Nei Mongol Zizhiqu:Jarud Qi
+44:CN:CHN:CHINA:Nei Mongol Zizhiqu:Jining Shi
+45:CN:CHN:CHINA:Nei Mongol Zizhiqu:Jungar Qi
+46:CN:CHN:CHINA:Nei Mongol Zizhiqu:Kailu
+47:CN:CHN:CHINA:Nei Mongol Zizhiqu:Liangcheng
+48:CN:CHN:CHINA:Nei Mongol Zizhiqu:Linhe
+49:CN:CHN:CHINA:Nei Mongol Zizhiqu:Linxi
+50:CN:CHN:CHINA:Nei Mongol Zizhiqu:Manzhouli Shi
+51:CN:CHN:CHINA:Nei Mongol Zizhiqu:Morindawa Daur Ab
+52:CN:CHN:CHINA:Nei Mongol Zizhiqu:Naiman Qi
+53:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ningcheng
+54:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ongniud Qi
+55:CN:CHN:CHINA:Nei Mongol Zizhiqu:Oroqen Zizhiqi
+56:CN:CHN:CHINA:Nei Mongol Zizhiqu:Otog Qi
+57:CN:CHN:CHINA:Nei Mongol Zizhiqu:Otog Qianqi
+58:CN:CHN:CHINA:Nei Mongol Zizhiqu:Qahar Youyi Houqi
+59:CN:CHN:CHINA:Nei Mongol Zizhiqu:Qahar Youyi Qianqi
+60:CN:CHN:CHINA:Nei Mongol Zizhiqu:Qahar Youyi Zhongqi
+61:CN:CHN:CHINA:Nei Mongol Zizhiqu:Qingshuihe
+62:CN:CHN:CHINA:Nei Mongol Zizhiqu:Shangdu
+63:CN:CHN:CHINA:Nei Mongol Zizhiqu:Siziwang Qi
+64:CN:CHN:CHINA:Nei Mongol Zizhiqu:Sonid Youqi
+65:CN:CHN:CHINA:Nei Mongol Zizhiqu:Sonid Zuoqi
+66:CN:CHN:CHINA:Nei Mongol Zizhiqu:Taibus Qi
+67:CN:CHN:CHINA:Nei Mongol Zizhiqu:Togtoh
+68:CN:CHN:CHINA:Nei Mongol Zizhiqu:Tongliao
+69:CN:CHN:CHINA:Nei Mongol Zizhiqu:Tongliao Shi
+70:CN:CHN:CHINA:Nei Mongol Zizhiqu:Tumd Youqi
+71:CN:CHN:CHINA:Nei Mongol Zizhiqu:Tumd Zouqi
+72:CN:CHN:CHINA:Nei Mongol Zizhiqu:Tuquan
+73:CN:CHN:CHINA:Nei Mongol Zizhiqu:Ulanhot Shi
+74:CN:CHN:CHINA:Nei Mongol Zizhiqu:Urad Houqi
+75:CN:CHN:CHINA:Nei Mongol Zizhiqu:Urad Qianqi
+76:CN:CHN:CHINA:Nei Mongol Zizhiqu:Urad Zhongqi
+77:CN:CHN:CHINA:Nei Mongol Zizhiqu:Uxin Qi
+78:CN:CHN:CHINA:Nei Mongol Zizhiqu:Wuchuan
+79:CN:CHN:CHINA:Nei Mongol Zizhiqu:Wuhai Shi
+80:CN:CHN:CHINA:Nei Mongol Zizhiqu:Wuyuan
+81:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xi Ujimqin Qi
+82:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xianghuang Qi
+83:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xinbarag Youqi
+84:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xinbarag Zuoqi
+85:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xinghe
+86:CN:CHN:CHINA:Nei Mongol Zizhiqu:Xuguit Qi
+87:CN:CHN:CHINA:Nei Mongol Zizhiqu:Zhanglan Qi
+88:CN:CHN:CHINA:Nei Mongol Zizhiqu:Zhengxianbai Qi
+89:CN:CHN:CHINA:Nei Mongol Zizhiqu:Zhouzi
+1:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Amdo
+2:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Bainang
+3:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Banbar
+4:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Baqen
+5:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Baxoi
+6:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Biru
+7:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Bomi
+8:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Burang
+9:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Comai
+10:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Cona
+11:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Coqen
+12:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Dagze
+13:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Damxung
+14:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Dengqen
+15:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Dinggye
+16:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Doilungdeqen
+17:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gamba
+18:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gar
+19:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Ge Gyai
+20:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gerze
+21:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gongbogyamda
+22:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gonggar
+23:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gonjo
+24:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gyaca
+25:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gyangze
+26:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Gyirong
+27:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Jomda
+28:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Kangmar
+29:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhari
+30:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhasa Shiqu
+31:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhaze
+32:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhorong
+33:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhozhag
+34:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhunze
+35:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Lhunzhub
+36:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Mainling
+37:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Maizhokunggar
+38:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Markam
+39:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Medog
+40:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nagqu
+41:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nagrze
+42:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Namling
+43:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nang Xian
+44:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nedong
+45:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Ngamring
+46:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nyainrong
+47:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nyalam
+48:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nyemo
+49:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Nyingchi
+50:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Qamdo
+51:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Qonggyai
+52:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Qusum
+53:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Quxu
+54:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Raingoin
+55:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Rinbung
+56:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Riwoqe
+57:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Rutog
+58:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Saga
+59:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Sagya
+60:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Sangri
+61:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Sog Xian
+62:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Tingri
+63:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Xainza
+64:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Xaitongmoin
+65:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Xigaze
+66:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Yadong
+67:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zanda
+68:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zayu
+69:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zhag Yab
+70:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zhanang
+71:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zhongba
+72:CN:CHN:CHINA:Xizang Zizhiqu (Tibet):Zogang
+1:CN:CHN:CHINA:Jilin:Antu
+2:CN:CHN:CHINA:Jilin:Baicheng Shi
+3:CN:CHN:CHINA:Jilin:Changbai
+4:CN:CHN:CHINA:Jilin:Changchun Shiqu
+5:CN:CHN:CHINA:Jilin:Changling
+6:CN:CHN:CHINA:Jilin:Da An
+7:CN:CHN:CHINA:Jilin:Dehui
+8:CN:CHN:CHINA:Jilin:Dongfeng
+9:CN:CHN:CHINA:Jilin:Dunhua
+10:CN:CHN:CHINA:Jilin:Fusong
+11:CN:CHN:CHINA:Jilin:Fuyu
+12:CN:CHN:CHINA:Jilin:Hailong
+13:CN:CHN:CHINA:Jilin:Helong
+14:CN:CHN:CHINA:Jilin:Huadian
+15:CN:CHN:CHINA:Jilin:Huaide
+16:CN:CHN:CHINA:Jilin:Huinan
+17:CN:CHN:CHINA:Jilin:Hunchun
+18:CN:CHN:CHINA:Jilin:Hunjiang Shi
+19:CN:CHN:CHINA:Jilin:Ji An
+20:CN:CHN:CHINA:Jilin:Jiaohe
+21:CN:CHN:CHINA:Jilin:Jilin Shiqu
+22:CN:CHN:CHINA:Jilin:Jingyu
+23:CN:CHN:CHINA:Jilin:Jiutai
+24:CN:CHN:CHINA:Jilin:Liaoyuan Shi
+25:CN:CHN:CHINA:Jilin:Lishu
+26:CN:CHN:CHINA:Jilin:Liuhe
+27:CN:CHN:CHINA:Jilin:Nong An
+28:CN:CHN:CHINA:Jilin:Panshi
+29:CN:CHN:CHINA:Jilin:Qian An
+30:CN:CHN:CHINA:Jilin:Qiangorlos
+31:CN:CHN:CHINA:Jilin:Shuangliao
+32:CN:CHN:CHINA:Jilin:Shuangyang
+33:CN:CHN:CHINA:Jilin:Shulan
+34:CN:CHN:CHINA:Jilin:Siping Shi
+35:CN:CHN:CHINA:Jilin:Taoan
+36:CN:CHN:CHINA:Jilin:Tonghua
+37:CN:CHN:CHINA:Jilin:Tonghua Shi
+38:CN:CHN:CHINA:Jilin:Tongyu
+39:CN:CHN:CHINA:Jilin:Tumen Shi
+40:CN:CHN:CHINA:Jilin:Wangqing
+41:CN:CHN:CHINA:Jilin:Yanji
+42:CN:CHN:CHINA:Jilin:Yianji Shi
+43:CN:CHN:CHINA:Jilin:Yitong
+44:CN:CHN:CHINA:Jilin:Yongji
+45:CN:CHN:CHINA:Jilin:Yushu
+46:CN:CHN:CHINA:Jilin:Zhenlai
+1:CN:CHN:CHINA:Anhui:Anqing Shi
+2:CN:CHN:CHINA:Anhui:Bengbu Shi
+3:CN:CHN:CHINA:Anhui:Boxian
+4:CN:CHN:CHINA:Anhui:Changfeng
+5:CN:CHN:CHINA:Anhui:Chao Xian
+6:CN:CHN:CHINA:Anhui:Chuxian
+7:CN:CHN:CHINA:Anhui:Dangshan
+8:CN:CHN:CHINA:Anhui:Dangtu
+9:CN:CHN:CHINA:Anhui:Dingyuan
+10:CN:CHN:CHINA:Anhui:Dongzhi
+11:CN:CHN:CHINA:Anhui:Fanchang
+12:CN:CHN:CHINA:Anhui:Feidong
+13:CN:CHN:CHINA:Anhui:Feixi
+14:CN:CHN:CHINA:Anhui:Fengtai
+15:CN:CHN:CHINA:Anhui:Fengyang
+16:CN:CHN:CHINA:Anhui:Funan
+17:CN:CHN:CHINA:Anhui:Fuyang
+18:CN:CHN:CHINA:Anhui:Fuyang Shi
+19:CN:CHN:CHINA:Anhui:Guangde
+20:CN:CHN:CHINA:Anhui:Guichi
+21:CN:CHN:CHINA:Anhui:Guoyang
+22:CN:CHN:CHINA:Anhui:Guzhen
+23:CN:CHN:CHINA:Anhui:Hanshan
+24:CN:CHN:CHINA:Anhui:He Xian
+25:CN:CHN:CHINA:Anhui:Hefei Shiqu
+26:CN:CHN:CHINA:Anhui:Huaibei Shiqu
+27:CN:CHN:CHINA:Anhui:Huainan Shiqu
+28:CN:CHN:CHINA:Anhui:Huaining
+29:CN:CHN:CHINA:Anhui:Huaiyuan
+30:CN:CHN:CHINA:Anhui:Huoqiu
+31:CN:CHN:CHINA:Anhui:Huoshan
+32:CN:CHN:CHINA:Anhui:Jiashan
+33:CN:CHN:CHINA:Anhui:Jieshou
+34:CN:CHN:CHINA:Anhui:Jing Xian
+35:CN:CHN:CHINA:Anhui:Jingde
+36:CN:CHN:CHINA:Anhui:Jinzhai
+37:CN:CHN:CHINA:Anhui:Jixi
+38:CN:CHN:CHINA:Anhui:Laian
+39:CN:CHN:CHINA:Anhui:Langxi
+40:CN:CHN:CHINA:Anhui:Lingbi
+41:CN:CHN:CHINA:Anhui:Linquan
+42:CN:CHN:CHINA:Anhui:Lixin
+43:CN:CHN:CHINA:Anhui:Lu An
+44:CN:CHN:CHINA:Anhui:Lu An Shi
+45:CN:CHN:CHINA:Anhui:Lujiang
+46:CN:CHN:CHINA:Anhui:Maanshan Shi
+47:CN:CHN:CHINA:Anhui:Mengcheng
+48:CN:CHN:CHINA:Anhui:Nanling
+49:CN:CHN:CHINA:Anhui:Ningguo
+50:CN:CHN:CHINA:Anhui:Qianshan
+51:CN:CHN:CHINA:Anhui:Qimen
+52:CN:CHN:CHINA:Anhui:Qingyang
+53:CN:CHN:CHINA:Anhui:Quaujiao
+54:CN:CHN:CHINA:Anhui:Shexian
+55:CN:CHN:CHINA:Anhui:Shitai
+56:CN:CHN:CHINA:Anhui:Shouxian
+57:CN:CHN:CHINA:Anhui:Shucheng
+58:CN:CHN:CHINA:Anhui:Sixian
+59:CN:CHN:CHINA:Anhui:Suchou Shi
+60:CN:CHN:CHINA:Anhui:Suixi
+61:CN:CHN:CHINA:Anhui:Susong
+62:CN:CHN:CHINA:Anhui:Suxian
+63:CN:CHN:CHINA:Anhui:Taihe
+64:CN:CHN:CHINA:Anhui:Taihu
+65:CN:CHN:CHINA:Anhui:Taiping
+66:CN:CHN:CHINA:Anhui:Tianchang
+67:CN:CHN:CHINA:Anhui:Tongcheng
+68:CN:CHN:CHINA:Anhui:Tongling
+69:CN:CHN:CHINA:Anhui:Tongling Shiqu
+70:CN:CHN:CHINA:Anhui:Tunxi Shi
+71:CN:CHN:CHINA:Anhui:Wangjiang
+72:CN:CHN:CHINA:Anhui:Wuhe
+73:CN:CHN:CHINA:Anhui:Wuhu
+74:CN:CHN:CHINA:Anhui:Wuhu Shiqu
+75:CN:CHN:CHINA:Anhui:Wuwei
+76:CN:CHN:CHINA:Anhui:Xiaoxian
+77:CN:CHN:CHINA:Anhui:Xiuning
+78:CN:CHN:CHINA:Anhui:Xuancheng
+79:CN:CHN:CHINA:Anhui:Yingshang
+80:CN:CHN:CHINA:Anhui:Yixian
+81:CN:CHN:CHINA:Anhui:Yuexi
+82:CN:CHN:CHINA:Anhui:Zongyang
+1:CN:CHN:CHINA:Taiwan:Gaoxiong
+2:CN:CHN:CHINA:Taiwan:Gaoxiong Shi
+3:CN:CHN:CHINA:Taiwan:Hualia
+4:CN:CHN:CHINA:Taiwan:Jiayi
+5:CN:CHN:CHINA:Taiwan:Jilong Shi
+6:CN:CHN:CHINA:Taiwan:Miaoli
+7:CN:CHN:CHINA:Taiwan:Nantou
+8:CN:CHN:CHINA:Taiwan:Penghu
+9:CN:CHN:CHINA:Taiwan:Pingdong
+10:CN:CHN:CHINA:Taiwan:Raoping
+11:CN:CHN:CHINA:Taiwan:Taibei
+12:CN:CHN:CHINA:Taiwan:Taibei Shi
+13:CN:CHN:CHINA:Taiwan:Taidong
+14:CN:CHN:CHINA:Taiwan:Tainan
+15:CN:CHN:CHINA:Taiwan:Tainan Shi
+16:CN:CHN:CHINA:Taiwan:Taizhong
+17:CN:CHN:CHINA:Taiwan:Taizhong Shi
+18:CN:CHN:CHINA:Taiwan:Taoyuan
+19:CN:CHN:CHINA:Taiwan:Xinzhu
+20:CN:CHN:CHINA:Taiwan:Yilan
+21:CN:CHN:CHINA:Taiwan:Yunlin
+22:CN:CHN:CHINA:Taiwan:Zhanghua
+1:CN:CHN:CHINA:Sichuan:Aba
+2:CN:CHN:CHINA:Sichuan:An Xian
+3:CN:CHN:CHINA:Sichuan:Anyue
+4:CN:CHN:CHINA:Sichuan:Baisha
+5:CN:CHN:CHINA:Sichuan:Baiyu
+6:CN:CHN:CHINA:Sichuan:Baoxing
+7:CN:CHN:CHINA:Sichuan:Batang
+8:CN:CHN:CHINA:Sichuan:Bazhong
+9:CN:CHN:CHINA:Sichuan:Beichuan
+10:CN:CHN:CHINA:Sichuan:Butuo
+11:CN:CHN:CHINA:Sichuan:Cangxi
+12:CN:CHN:CHINA:Sichuan:Changning
+13:CN:CHN:CHINA:Sichuan:Chengdu Shiqu
+14:CN:CHN:CHINA:Sichuan:Chongqing
+15:CN:CHN:CHINA:Sichuan:Da Xian
+16:CN:CHN:CHINA:Sichuan:Danba
+17:CN:CHN:CHINA:Sichuan:Danleng
+18:CN:CHN:CHINA:Sichuan:Daocheng
+19:CN:CHN:CHINA:Sichuan:Dawu
+20:CN:CHN:CHINA:Sichuan:Daxian Shi
+21:CN:CHN:CHINA:Sichuan:Dayi
+22:CN:CHN:CHINA:Sichuan:Dazhu
+23:CN:CHN:CHINA:Sichuan:Dechang
+24:CN:CHN:CHINA:Sichuan:Dege
+25:CN:CHN:CHINA:Sichuan:Derong
+26:CN:CHN:CHINA:Sichuan:Deyang
+27:CN:CHN:CHINA:Sichuan:Dukou Shiqu
+28:CN:CHN:CHINA:Sichuan:Ebian
+29:CN:CHN:CHINA:Sichuan:Emei
+30:CN:CHN:CHINA:Sichuan:Fushun
+31:CN:CHN:CHINA:Sichuan:Ganluo
+32:CN:CHN:CHINA:Sichuan:Gao Xian
+33:CN:CHN:CHINA:Sichuan:Garze
+34:CN:CHN:CHINA:Sichuan:Guan Xian
+35:CN:CHN:CHINA:Sichuan:Guang An
+36:CN:CHN:CHINA:Sichuan:Guanghan
+37:CN:CHN:CHINA:Sichuan:Guangyuan
+38:CN:CHN:CHINA:Sichuan:Gulin
+39:CN:CHN:CHINA:Sichuan:Hanyuan
+40:CN:CHN:CHINA:Sichuan:Heishui
+41:CN:CHN:CHINA:Sichuan:Hejiang
+42:CN:CHN:CHINA:Sichuan:Hongya
+43:CN:CHN:CHINA:Sichuan:Hongyuan
+44:CN:CHN:CHINA:Sichuan:Huayun
+45:CN:CHN:CHINA:Sichuan:Huidong
+46:CN:CHN:CHINA:Sichuan:Huili
+47:CN:CHN:CHINA:Sichuan:Jiajiang
+48:CN:CHN:CHINA:Sichuan:Jiang An
+49:CN:CHN:CHINA:Sichuan:Jiange
+50:CN:CHN:CHINA:Sichuan:Jiangyou
+51:CN:CHN:CHINA:Sichuan:Jianyang
+52:CN:CHN:CHINA:Sichuan:Jinchuan
+53:CN:CHN:CHINA:Sichuan:Jintang
+54:CN:CHN:CHINA:Sichuan:Jinyan
+55:CN:CHN:CHINA:Sichuan:Jinyang
+56:CN:CHN:CHINA:Sichuan:Jiulong
+57:CN:CHN:CHINA:Sichuan:Junlian
+58:CN:CHN:CHINA:Sichuan:Kaijiang
+59:CN:CHN:CHINA:Sichuan:Kangding
+60:CN:CHN:CHINA:Sichuan:Langzhong
+61:CN:CHN:CHINA:Sichuan:Leibo
+62:CN:CHN:CHINA:Sichuan:Leshan Shi
+63:CN:CHN:CHINA:Sichuan:Lezhi
+64:CN:CHN:CHINA:Sichuan:Li Xian
+65:CN:CHN:CHINA:Sichuan:Linshui
+66:CN:CHN:CHINA:Sichuan:Litang
+67:CN:CHN:CHINA:Sichuan:Longchang
+68:CN:CHN:CHINA:Sichuan:Lu Xian
+69:CN:CHN:CHINA:Sichuan:Luding
+70:CN:CHN:CHINA:Sichuan:Luhuo
+71:CN:CHN:CHINA:Sichuan:Lushan
+72:CN:CHN:CHINA:Sichuan:Luzhou Shi
+73:CN:CHN:CHINA:Sichuan:Mabian
+74:CN:CHN:CHINA:Sichuan:Maowen
+75:CN:CHN:CHINA:Sichuan:Markam
+76:CN:CHN:CHINA:Sichuan:Meigu
+77:CN:CHN:CHINA:Sichuan:Meishan
+78:CN:CHN:CHINA:Sichuan:Mianning
+79:CN:CHN:CHINA:Sichuan:Mianyang Shi
+80:CN:CHN:CHINA:Sichuan:Mianzhu
+81:CN:CHN:CHINA:Sichuan:Mingshan
+82:CN:CHN:CHINA:Sichuan:Miyi
+83:CN:CHN:CHINA:Sichuan:Muchuan
+84:CN:CHN:CHINA:Sichuan:Muli
+85:CN:CHN:CHINA:Sichuan:Nanbu
+86:CN:CHN:CHINA:Sichuan:Nanchong
+87:CN:CHN:CHINA:Sichuan:Nanchong Shi
+88:CN:CHN:CHINA:Sichuan:Nanjiang
+89:CN:CHN:CHINA:Sichuan:Nanping
+90:CN:CHN:CHINA:Sichuan:Nanxi
+91:CN:CHN:CHINA:Sichuan:Naxi
+92:CN:CHN:CHINA:Sichuan:Neijiang
+93:CN:CHN:CHINA:Sichuan:Ningnan
+94:CN:CHN:CHINA:Sichuan:Peng An
+95:CN:CHN:CHINA:Sichuan:Peng Xian
+96:CN:CHN:CHINA:Sichuan:Pengshan
+97:CN:CHN:CHINA:Sichuan:Pengxi
+98:CN:CHN:CHINA:Sichuan:Pi Xian
+99:CN:CHN:CHINA:Sichuan:Pingchang
+100:CN:CHN:CHINA:Sichuan:Pingshan
+101:CN:CHN:CHINA:Sichuan:Pingwu
+102:CN:CHN:CHINA:Sichuan:Puge
+103:CN:CHN:CHINA:Sichuan:Pujiang
+104:CN:CHN:CHINA:Sichuan:Qianwei
+105:CN:CHN:CHINA:Sichuan:Qingchuan
+106:CN:CHN:CHINA:Sichuan:Qingshen
+107:CN:CHN:CHINA:Sichuan:Qionglai
+108:CN:CHN:CHINA:Sichuan:Qu Xian
+109:CN:CHN:CHINA:Sichuan:Renshou
+110:CN:CHN:CHINA:Sichuan:Rong Xian
+111:CN:CHN:CHINA:Sichuan:Santai
+112:CN:CHN:CHINA:Sichuan:Sertar
+113:CN:CHN:CHINA:Sichuan:Serxu
+114:CN:CHN:CHINA:Sichuan:Shehong
+115:CN:CHN:CHINA:Sichuan:Shifang
+116:CN:CHN:CHINA:Sichuan:Shimian
+117:CN:CHN:CHINA:Sichuan:Shuangliu
+118:CN:CHN:CHINA:Sichuan:Songpan
+119:CN:CHN:CHINA:Sichuan:Suining
+120:CN:CHN:CHINA:Sichuan:Tianquan
+121:CN:CHN:CHINA:Sichuan:Tongjiang
+122:CN:CHN:CHINA:Sichuan:Wangcang
+123:CN:CHN:CHINA:Sichuan:Wanyuan
+124:CN:CHN:CHINA:Sichuan:Weiyuan
+125:CN:CHN:CHINA:Sichuan:Wenchuan
+126:CN:CHN:CHINA:Sichuan:Wenjiang
+127:CN:CHN:CHINA:Sichuan:Wusheng
+128:CN:CHN:CHINA:Sichuan:Xiangcheng
+129:CN:CHN:CHINA:Sichuan:Xiaojin
+130:CN:CHN:CHINA:Sichuan:Xichang
+131:CN:CHN:CHINA:Sichuan:Xichang Shi
+132:CN:CHN:CHINA:Sichuan:Xichong
+133:CN:CHN:CHINA:Sichuan:Xide
+134:CN:CHN:CHINA:Sichuan:Xindu
+135:CN:CHN:CHINA:Sichuan:Xingwen
+136:CN:CHN:CHINA:Sichuan:Xinjin
+137:CN:CHN:CHINA:Sichuan:Xinlong
+138:CN:CHN:CHINA:Sichuan:Xuanhan
+139:CN:CHN:CHINA:Sichuan:Xuyong
+140:CN:CHN:CHINA:Sichuan:Ya An
+141:CN:CHN:CHINA:Sichuan:Yajiang
+142:CN:CHN:CHINA:Sichuan:Yanbian
+143:CN:CHN:CHINA:Sichuan:Yanting
+144:CN:CHN:CHINA:Sichuan:Yanyuan
+145:CN:CHN:CHINA:Sichuan:Yibin
+146:CN:CHN:CHINA:Sichuan:Yibin Shi
+147:CN:CHN:CHINA:Sichuan:Yilong
+148:CN:CHN:CHINA:Sichuan:Yingjing
+149:CN:CHN:CHINA:Sichuan:Yingshan
+150:CN:CHN:CHINA:Sichuan:Yuechi
+151:CN:CHN:CHINA:Sichuan:Yuexi
+152:CN:CHN:CHINA:Sichuan:Zamtang
+153:CN:CHN:CHINA:Sichuan:Zhaojue
+154:CN:CHN:CHINA:Sichuan:Zhongjiang
+155:CN:CHN:CHINA:Sichuan:Zigong Shiqu
+156:CN:CHN:CHINA:Sichuan:Zitong
+157:CN:CHN:CHINA:Sichuan:Ziyang
+158:CN:CHN:CHINA:Sichuan:Zizhong
+159:CN:CHN:CHINA:Sichuan:Zoige
+1:CN:CHN:CHINA:Kowloon and New Kowloon:CHN.L2.3
+2:CN:CHN:CHINA:Kowloon and New Kowloon:CHN.L2.4
+1:CN:CHN:CHINA:Hebei:Anci
+2:CN:CHN:CHINA:Hebei:Angou
+3:CN:CHN:CHINA:Hebei:Anping
+4:CN:CHN:CHINA:Hebei:Anxin
+5:CN:CHN:CHINA:Hebei:Ba Xian
+6:CN:CHN:CHINA:Hebei:Baixiang
+7:CN:CHN:CHINA:Hebei:Baoding Shi
+8:CN:CHN:CHINA:Hebei:Boye
+9:CN:CHN:CHINA:Hebei:Cang Xian
+10:CN:CHN:CHINA:Hebei:Cangzhou
+11:CN:CHN:CHINA:Hebei:Changli
+12:CN:CHN:CHINA:Hebei:Cheng An
+13:CN:CHN:CHINA:Hebei:Chengde
+14:CN:CHN:CHINA:Hebei:Chengde Shi
+15:CN:CHN:CHINA:Hebei:Chicheng
+16:CN:CHN:CHINA:Hebei:Chongli
+17:CN:CHN:CHINA:Hebei:Ci Xian
+18:CN:CHN:CHINA:Hebei:Dachang Hui Ac
+19:CN:CHN:CHINA:Hebei:Dacheng
+20:CN:CHN:CHINA:Hebei:Daming
+21:CN:CHN:CHINA:Hebei:Ding Xian
+22:CN:CHN:CHINA:Hebei:Dingxing
+23:CN:CHN:CHINA:Hebei:Dongguang
+24:CN:CHN:CHINA:Hebei:Feixiang
+25:CN:CHN:CHINA:Hebei:Fengnan
+26:CN:CHN:CHINA:Hebei:Fengning
+27:CN:CHN:CHINA:Hebei:Fengrun
+28:CN:CHN:CHINA:Hebei:Fucheng
+29:CN:CHN:CHINA:Hebei:Funing
+30:CN:CHN:CHINA:Hebei:Fuping
+31:CN:CHN:CHINA:Hebei:Gaocheng
+32:CN:CHN:CHINA:Hebei:Gaoyang
+33:CN:CHN:CHINA:Hebei:Gaoyi
+34:CN:CHN:CHINA:Hebei:Gu An
+35:CN:CHN:CHINA:Hebei:Guangping
+36:CN:CHN:CHINA:Hebei:Guantao
+37:CN:CHN:CHINA:Hebei:Guanzong
+38:CN:CHN:CHINA:Hebei:Gucheng
+39:CN:CHN:CHINA:Hebei:Guyuan
+40:CN:CHN:CHINA:Hebei:Haixing
+41:CN:CHN:CHINA:Hebei:Handan
+42:CN:CHN:CHINA:Hebei:Handan Shi
+43:CN:CHN:CHINA:Hebei:Hejian
+44:CN:CHN:CHINA:Hebei:Hengshui
+45:CN:CHN:CHINA:Hebei:Hengshui Shi
+46:CN:CHN:CHINA:Hebei:Huaian
+47:CN:CHN:CHINA:Hebei:Huailai
+48:CN:CHN:CHINA:Hebei:Huanghua
+49:CN:CHN:CHINA:Hebei:Huelu
+50:CN:CHN:CHINA:Hebei:Ji Xian
+51:CN:CHN:CHINA:Hebei:Jiaohe
+52:CN:CHN:CHINA:Hebei:Jing Xian
+53:CN:CHN:CHINA:Hebei:Jingxing
+54:CN:CHN:CHINA:Hebei:Jize
+55:CN:CHN:CHINA:Hebei:Julu
+56:CN:CHN:CHINA:Hebei:Kangbao
+57:CN:CHN:CHINA:Hebei:Kuancheng
+58:CN:CHN:CHINA:Hebei:Laishui
+59:CN:CHN:CHINA:Hebei:Laiyuan
+60:CN:CHN:CHINA:Hebei:Leting
+61:CN:CHN:CHINA:Hebei:Li Xian
+62:CN:CHN:CHINA:Hebei:Lincheng
+63:CN:CHN:CHINA:Hebei:Lingshou
+64:CN:CHN:CHINA:Hebei:Linxi
+65:CN:CHN:CHINA:Hebei:Linzhang
+66:CN:CHN:CHINA:Hebei:Longfang Shi
+67:CN:CHN:CHINA:Hebei:Longhua
+68:CN:CHN:CHINA:Hebei:Longyao
+69:CN:CHN:CHINA:Hebei:Luan Xian
+70:CN:CHN:CHINA:Hebei:Luancheng
+71:CN:CHN:CHINA:Hebei:Luannan
+72:CN:CHN:CHINA:Hebei:Luanping
+73:CN:CHN:CHINA:Hebei:Lulong Xian
+74:CN:CHN:CHINA:Hebei:Mancheng
+75:CN:CHN:CHINA:Hebei:Mengcun Hui Ac
+76:CN:CHN:CHINA:Hebei:Nangong
+77:CN:CHN:CHINA:Hebei:Nanhe
+78:CN:CHN:CHINA:Hebei:Nanpi
+79:CN:CHN:CHINA:Hebei:Neiqiu
+80:CN:CHN:CHINA:Hebei:Ningjin
+81:CN:CHN:CHINA:Hebei:Pingquan
+82:CN:CHN:CHINA:Hebei:Pingshan
+83:CN:CHN:CHINA:Hebei:Pingxiang
+84:CN:CHN:CHINA:Hebei:Qian An
+85:CN:CHN:CHINA:Hebei:Qianxi
+86:CN:CHN:CHINA:Hebei:Qing Xian
+87:CN:CHN:CHINA:Hebei:Qing Yuan
+88:CN:CHN:CHINA:Hebei:Qinghe
+89:CN:CHN:CHINA:Hebei:Qinglong
+90:CN:CHN:CHINA:Hebei:Qinhuangdao Shi
+91:CN:CHN:CHINA:Hebei:Qiu Xian
+92:CN:CHN:CHINA:Hebei:Quyang
+93:CN:CHN:CHINA:Hebei:Quzhou
+94:CN:CHN:CHINA:Hebei:Raoyang
+95:CN:CHN:CHINA:Hebei:Ren Xian
+96:CN:CHN:CHINA:Hebei:Renqiu
+97:CN:CHN:CHINA:Hebei:Rongcheng
+98:CN:CHN:CHINA:Hebei:Sanhe
+99:CN:CHN:CHINA:Hebei:Shahe
+100:CN:CHN:CHINA:Hebei:Shangyi
+101:CN:CHN:CHINA:Hebei:She Xian
+102:CN:CHN:CHINA:Hebei:Shen Xian
+103:CN:CHN:CHINA:Hebei:Shenze
+104:CN:CHN:CHINA:Hebei:Shijiazhuang Shi
+105:CN:CHN:CHINA:Hebei:Shulu
+106:CN:CHN:CHINA:Hebei:Suning
+107:CN:CHN:CHINA:Hebei:Tang Xian
+108:CN:CHN:CHINA:Hebei:Tangshan Shi
+109:CN:CHN:CHINA:Hebei:Wan Xian
+110:CN:CHN:CHINA:Hebei:Wangdu
+111:CN:CHN:CHINA:Hebei:Wanquan
+112:CN:CHN:CHINA:Hebei:Wei Xian
+113:CN:CHN:CHINA:Hebei:Weichang
+114:CN:CHN:CHINA:Hebei:Wen An
+115:CN:CHN:CHINA:Hebei:Wu An
+116:CN:CHN:CHINA:Hebei:Wuji
+117:CN:CHN:CHINA:Hebei:Wuqiang
+118:CN:CHN:CHINA:Hebei:Wuqiao
+119:CN:CHN:CHINA:Hebei:Wuyi
+120:CN:CHN:CHINA:Hebei:Xian Xian
+121:CN:CHN:CHINA:Hebei:Xianghe
+122:CN:CHN:CHINA:Hebei:Xincheng
+123:CN:CHN:CHINA:Hebei:Xinglong
+124:CN:CHN:CHINA:Hebei:Xingtai
+125:CN:CHN:CHINA:Hebei:Xingtai Shi
+126:CN:CHN:CHINA:Hebei:Xingtang
+127:CN:CHN:CHINA:Hebei:Xinhe
+128:CN:CHN:CHINA:Hebei:Xinle
+129:CN:CHN:CHINA:Hebei:Xiong Xian
+130:CN:CHN:CHINA:Hebei:Xuanhua
+131:CN:CHN:CHINA:Hebei:Xushui
+132:CN:CHN:CHINA:Hebei:Yangyuan
+133:CN:CHN:CHINA:Hebei:Yanshan
+134:CN:CHN:CHINA:Hebei:Yi Xian
+135:CN:CHN:CHINA:Hebei:Yongnian
+136:CN:CHN:CHINA:Hebei:Yongqing
+137:CN:CHN:CHINA:Hebei:Yu Xian
+138:CN:CHN:CHINA:Hebei:Yuanshi
+139:CN:CHN:CHINA:Hebei:Yutian
+140:CN:CHN:CHINA:Hebei:Zanhuang
+141:CN:CHN:CHINA:Hebei:Zaoqiang
+142:CN:CHN:CHINA:Hebei:Zhangbei
+143:CN:CHN:CHINA:Hebei:Zhangjiakou Shi
+144:CN:CHN:CHINA:Hebei:Zhao Xian
+145:CN:CHN:CHINA:Hebei:Zhengding
+146:CN:CHN:CHINA:Hebei:Zhuo Xian
+147:CN:CHN:CHINA:Hebei:Zhuolu
+148:CN:CHN:CHINA:Hebei:Zunhua
+1:CN:CHN:CHINA:Fujian:Anxi
+2:CN:CHN:CHINA:Fujian:Changle
+3:CN:CHN:CHINA:Fujian:Changtai
+4:CN:CHN:CHINA:Fujian:Changting
+5:CN:CHN:CHINA:Fujian:Chongan
+6:CN:CHN:CHINA:Fujian:Datian
+7:CN:CHN:CHINA:Fujian:Dehua
+8:CN:CHN:CHINA:Fujian:Dongshan
+9:CN:CHN:CHINA:Fujian:Fuan
+10:CN:CHN:CHINA:Fujian:Fuding
+11:CN:CHN:CHINA:Fujian:Fuqing
+12:CN:CHN:CHINA:Fujian:Fuzhou Shiqu
+13:CN:CHN:CHINA:Fujian:Guangze
+14:CN:CHN:CHINA:Fujian:Gutian
+15:CN:CHN:CHINA:Fujian:Huaan
+16:CN:CHN:CHINA:Fujian:Huian
+17:CN:CHN:CHINA:Fujian:Jiangle
+18:CN:CHN:CHINA:Fujian:Jiangyang
+19:CN:CHN:CHINA:Fujian:Jianning
+20:CN:CHN:CHINA:Fujian:Jianou
+21:CN:CHN:CHINA:Fujian:Jinjiang
+22:CN:CHN:CHINA:Fujian:Jinmen
+23:CN:CHN:CHINA:Fujian:Liancheng
+24:CN:CHN:CHINA:Fujian:Lianjiang
+25:CN:CHN:CHINA:Fujian:Longhai
+26:CN:CHN:CHINA:Fujian:Longyan Shi
+27:CN:CHN:CHINA:Fujian:Luoyuan
+28:CN:CHN:CHINA:Fujian:Mingqing
+29:CN:CHN:CHINA:Fujian:Mingxi
+30:CN:CHN:CHINA:Fujian:Minhou
+31:CN:CHN:CHINA:Fujian:Nanan
+32:CN:CHN:CHINA:Fujian:Nanjing
+33:CN:CHN:CHINA:Fujian:Nanping Shi
+34:CN:CHN:CHINA:Fujian:Ningde
+35:CN:CHN:CHINA:Fujian:Ninghua
+36:CN:CHN:CHINA:Fujian:Pinghe
+37:CN:CHN:CHINA:Fujian:Pingnan
+38:CN:CHN:CHINA:Fujian:Pingtan
+39:CN:CHN:CHINA:Fujian:Pucheng
+40:CN:CHN:CHINA:Fujian:Putian
+41:CN:CHN:CHINA:Fujian:Qingliu
+42:CN:CHN:CHINA:Fujian:Quanzhou Shi
+43:CN:CHN:CHINA:Fujian:Sha Xian
+44:CN:CHN:CHINA:Fujian:Shanghang
+45:CN:CHN:CHINA:Fujian:Shanming Shi
+46:CN:CHN:CHINA:Fujian:Shaowu
+47:CN:CHN:CHINA:Fujian:Shouning
+48:CN:CHN:CHINA:Fujian:Shunchang
+49:CN:CHN:CHINA:Fujian:Songxi
+50:CN:CHN:CHINA:Fujian:Taining
+51:CN:CHN:CHINA:Fujian:Tongan
+52:CN:CHN:CHINA:Fujian:Wuping
+53:CN:CHN:CHINA:Fujian:Xiamen Shiqu
+54:CN:CHN:CHINA:Fujian:Xianyou
+55:CN:CHN:CHINA:Fujian:Xiapu
+56:CN:CHN:CHINA:Fujian:Yongan
+57:CN:CHN:CHINA:Fujian:Yongchun
+58:CN:CHN:CHINA:Fujian:Yongding
+59:CN:CHN:CHINA:Fujian:Yongtai
+60:CN:CHN:CHINA:Fujian:Youxi
+61:CN:CHN:CHINA:Fujian:Yunxiao
+62:CN:CHN:CHINA:Fujian:Zhangping
+63:CN:CHN:CHINA:Fujian:Zhangpu
+64:CN:CHN:CHINA:Fujian:Zhangzhou Shi
+65:CN:CHN:CHINA:Fujian:Zhaoan
+66:CN:CHN:CHINA:Fujian:Zhenghe
+67:CN:CHN:CHINA:Fujian:Zherong
+68:CN:CHN:CHINA:Fujian:Zhouning
+1:CN:CHN:CHINA:Jiangsu:Baoying
+2:CN:CHN:CHINA:Jiangsu:Binhai
+3:CN:CHN:CHINA:Jiangsu:Changshu
+4:CN:CHN:CHINA:Jiangsu:Changzhou Shi
+5:CN:CHN:CHINA:Jiangsu:Daifeng
+6:CN:CHN:CHINA:Jiangsu:Dantu
+7:CN:CHN:CHINA:Jiangsu:Danyang
+8:CN:CHN:CHINA:Jiangsu:Donghai
+9:CN:CHN:CHINA:Jiangsu:Dongtai
+10:CN:CHN:CHINA:Jiangsu:Fengxian
+11:CN:CHN:CHINA:Jiangsu:Funing
+12:CN:CHN:CHINA:Jiangsu:Ganyu
+13:CN:CHN:CHINA:Jiangsu:Gaochun
+14:CN:CHN:CHINA:Jiangsu:Gaoyiu
+15:CN:CHN:CHINA:Jiangsu:Guannan
+16:CN:CHN:CHINA:Jiangsu:Guanyun
+17:CN:CHN:CHINA:Jiangsu:Haian
+18:CN:CHN:CHINA:Jiangsu:Haimen
+19:CN:CHN:CHINA:Jiangsu:Hanjiang
+20:CN:CHN:CHINA:Jiangsu:Hongze
+21:CN:CHN:CHINA:Jiangsu:Huaian
+22:CN:CHN:CHINA:Jiangsu:Huaiyin
+23:CN:CHN:CHINA:Jiangsu:Jiangdu
+24:CN:CHN:CHINA:Jiangsu:Jiangning
+25:CN:CHN:CHINA:Jiangsu:Jiangpu
+26:CN:CHN:CHINA:Jiangsu:Jiangyin
+27:CN:CHN:CHINA:Jiangsu:Jianhu
+28:CN:CHN:CHINA:Jiangsu:Jingjiang
+29:CN:CHN:CHINA:Jiangsu:Jinhu
+30:CN:CHN:CHINA:Jiangsu:Jintan
+31:CN:CHN:CHINA:Jiangsu:Jurong
+32:CN:CHN:CHINA:Jiangsu:Kunshan
+33:CN:CHN:CHINA:Jiangsu:Lianshui
+34:CN:CHN:CHINA:Jiangsu:Lianyungang Shi
+35:CN:CHN:CHINA:Jiangsu:Lishui
+36:CN:CHN:CHINA:Jiangsu:Liyang
+37:CN:CHN:CHINA:Jiangsu:Luhe
+38:CN:CHN:CHINA:Jiangsu:Nanjing Shiqu
+39:CN:CHN:CHINA:Jiangsu:Nantong
+40:CN:CHN:CHINA:Jiangsu:Nantong Shi
+41:CN:CHN:CHINA:Jiangsu:Peixian
+42:CN:CHN:CHINA:Jiangsu:Qidong
+43:CN:CHN:CHINA:Jiangsu:Qingjiang Shi
+44:CN:CHN:CHINA:Jiangsu:Rudong
+45:CN:CHN:CHINA:Jiangsu:Rugao
+46:CN:CHN:CHINA:Jiangsu:Shazhou
+47:CN:CHN:CHINA:Jiangsu:Sheyang
+48:CN:CHN:CHINA:Jiangsu:Shuyang
+49:CN:CHN:CHINA:Jiangsu:Sihong
+50:CN:CHN:CHINA:Jiangsu:Siyang
+51:CN:CHN:CHINA:Jiangsu:Suining
+52:CN:CHN:CHINA:Jiangsu:Suqian
+53:CN:CHN:CHINA:Jiangsu:Suzhou Shi
+54:CN:CHN:CHINA:Jiangsu:Taicang
+55:CN:CHN:CHINA:Jiangsu:Taixian
+56:CN:CHN:CHINA:Jiangsu:Taixing
+57:CN:CHN:CHINA:Jiangsu:Taizhou Shi
+58:CN:CHN:CHINA:Jiangsu:Tongshan
+59:CN:CHN:CHINA:Jiangsu:Wujiang
+60:CN:CHN:CHINA:Jiangsu:Wujin
+61:CN:CHN:CHINA:Jiangsu:Wuxi
+62:CN:CHN:CHINA:Jiangsu:Wuxi Shi
+63:CN:CHN:CHINA:Jiangsu:Wuxian
+64:CN:CHN:CHINA:Jiangsu:Xiangshui
+65:CN:CHN:CHINA:Jiangsu:Xinghua
+66:CN:CHN:CHINA:Jiangsu:Xinyi
+67:CN:CHN:CHINA:Jiangsu:Xuyi
+68:CN:CHN:CHINA:Jiangsu:Xuzhou Shi
+69:CN:CHN:CHINA:Jiangsu:Yangzhong
+70:CN:CHN:CHINA:Jiangsu:Yangzhou Shi
+71:CN:CHN:CHINA:Jiangsu:Yiancheng
+72:CN:CHN:CHINA:Jiangsu:Yixing
+73:CN:CHN:CHINA:Jiangsu:Yizheng
+74:CN:CHN:CHINA:Jiangsu:Zhenjiang Shi
+1:CN:CHN:CHINA:Hunan:Anhua
+2:CN:CHN:CHINA:Hunan:Anren
+3:CN:CHN:CHINA:Hunan:Anxiang
+4:CN:CHN:CHINA:Hunan:Baojing
+5:CN:CHN:CHINA:Hunan:Chaling
+6:CN:CHN:CHINA:Hunan:Changde
+7:CN:CHN:CHINA:Hunan:Changde Shi
+8:CN:CHN:CHINA:Hunan:Changning
+9:CN:CHN:CHINA:Hunan:Changsha
+10:CN:CHN:CHINA:Hunan:Changsha Shiqu
+11:CN:CHN:CHINA:Hunan:Chen Xian
+12:CN:CHN:CHINA:Hunan:Chengbu
+13:CN:CHN:CHINA:Hunan:Chenxi
+14:CN:CHN:CHINA:Hunan:Chenzhou Shi
+15:CN:CHN:CHINA:Hunan:Cili
+16:CN:CHN:CHINA:Hunan:Dao Xian
+17:CN:CHN:CHINA:Hunan:Dayong
+18:CN:CHN:CHINA:Hunan:Dong An
+19:CN:CHN:CHINA:Hunan:Dongkou
+20:CN:CHN:CHINA:Hunan:Fenghuang
+21:CN:CHN:CHINA:Hunan:Guidong
+22:CN:CHN:CHINA:Hunan:Guiyang
+23:CN:CHN:CHINA:Hunan:Guzhang
+24:CN:CHN:CHINA:Hunan:Hanshou
+25:CN:CHN:CHINA:Hunan:Hengdong
+26:CN:CHN:CHINA:Hunan:Hengnan
+27:CN:CHN:CHINA:Hunan:Hengshan
+28:CN:CHN:CHINA:Hunan:Hengyang
+29:CN:CHN:CHINA:Hunan:Hengyang Shi
+30:CN:CHN:CHINA:Hunan:Hongjiang Shi
+31:CN:CHN:CHINA:Hunan:Huaihua
+32:CN:CHN:CHINA:Hunan:Huaihua Shi
+33:CN:CHN:CHINA:Hunan:Huarong
+34:CN:CHN:CHINA:Hunan:Huayuan
+35:CN:CHN:CHINA:Hunan:Huitong
+36:CN:CHN:CHINA:Hunan:Jiahe
+37:CN:CHN:CHINA:Hunan:Jianghua
+38:CN:CHN:CHINA:Hunan:Jiangyong
+39:CN:CHN:CHINA:Hunan:Jing Xian
+40:CN:CHN:CHINA:Hunan:Jinshi Shi
+41:CN:CHN:CHINA:Hunan:Jishou
+42:CN:CHN:CHINA:Hunan:Laiyang
+43:CN:CHN:CHINA:Hunan:Lanshan
+44:CN:CHN:CHINA:Hunan:Lengshuijang Shi
+45:CN:CHN:CHINA:Hunan:Li Xian
+46:CN:CHN:CHINA:Hunan:Lianyuan
+47:CN:CHN:CHINA:Hunan:Liling
+48:CN:CHN:CHINA:Hunan:Ling Xian
+49:CN:CHN:CHINA:Hunan:Lingling
+50:CN:CHN:CHINA:Hunan:Linli
+51:CN:CHN:CHINA:Hunan:Linwu
+52:CN:CHN:CHINA:Hunan:Linxiang
+53:CN:CHN:CHINA:Hunan:Liuyang
+54:CN:CHN:CHINA:Hunan:Longhui
+55:CN:CHN:CHINA:Hunan:Longshan
+56:CN:CHN:CHINA:Hunan:Loudi Shi
+57:CN:CHN:CHINA:Hunan:Luxi
+58:CN:CHN:CHINA:Hunan:Mayang
+59:CN:CHN:CHINA:Hunan:Miluo
+60:CN:CHN:CHINA:Hunan:Nan Xian
+61:CN:CHN:CHINA:Hunan:Ningxiang
+62:CN:CHN:CHINA:Hunan:Ningyuan
+63:CN:CHN:CHINA:Hunan:Pingjiang
+64:CN:CHN:CHINA:Hunan:Qianyang
+65:CN:CHN:CHINA:Hunan:Qidong
+66:CN:CHN:CHINA:Hunan:Qiyang
+67:CN:CHN:CHINA:Hunan:Rucheng
+68:CN:CHN:CHINA:Hunan:Sangzhi
+69:CN:CHN:CHINA:Hunan:Shaodong
+70:CN:CHN:CHINA:Hunan:Shaoyang
+71:CN:CHN:CHINA:Hunan:Shaoyang Shi
+72:CN:CHN:CHINA:Hunan:Shimen
+73:CN:CHN:CHINA:Hunan:Shuangfeng
+74:CN:CHN:CHINA:Hunan:Shuangpai
+75:CN:CHN:CHINA:Hunan:Suining
+76:CN:CHN:CHINA:Hunan:Taojiang
+77:CN:CHN:CHINA:Hunan:Taoyuan
+78:CN:CHN:CHINA:Hunan:Tongdao
+79:CN:CHN:CHINA:Hunan:Wangcheng
+80:CN:CHN:CHINA:Hunan:Wugang
+81:CN:CHN:CHINA:Hunan:Xiangtan
+82:CN:CHN:CHINA:Hunan:Xiangtan Shi
+83:CN:CHN:CHINA:Hunan:Xiangxiang
+84:CN:CHN:CHINA:Hunan:Xiangyin
+85:CN:CHN:CHINA:Hunan:Xinhua
+86:CN:CHN:CHINA:Hunan:Xinhuang
+87:CN:CHN:CHINA:Hunan:Xinning
+88:CN:CHN:CHINA:Hunan:Xinshao
+89:CN:CHN:CHINA:Hunan:Xintian
+90:CN:CHN:CHINA:Hunan:Xupu
+91:CN:CHN:CHINA:Hunan:Yiyang
+92:CN:CHN:CHINA:Hunan:Yiyang Shi
+93:CN:CHN:CHINA:Hunan:Yizhang
+94:CN:CHN:CHINA:Hunan:Yongshun
+95:CN:CHN:CHINA:Hunan:Yongxing
+96:CN:CHN:CHINA:Hunan:Yongzhou Shi
+97:CN:CHN:CHINA:Hunan:You Xian
+98:CN:CHN:CHINA:Hunan:Yuanjiang
+99:CN:CHN:CHINA:Hunan:Yuanling
+100:CN:CHN:CHINA:Hunan:Yueyang Shi
+101:CN:CHN:CHINA:Hunan:Zhijiang
+102:CN:CHN:CHINA:Hunan:Zhuzhou
+103:CN:CHN:CHINA:Hunan:Zhuzhou Shiqu
+104:CN:CHN:CHINA:Hunan:Zixing
+1:CN:CHN:CHINA:Guangdong:Bao An
+2:CN:CHN:CHINA:Guangdong:Bolou
+3:CN:CHN:CHINA:Guangdong:Chaoan
+4:CN:CHN:CHINA:Guangdong:Chaoyang
+5:CN:CHN:CHINA:Guangdong:Chaozhou Shi
+6:CN:CHN:CHINA:Guangdong:Chenhai
+7:CN:CHN:CHINA:Guangdong:Conghua
+8:CN:CHN:CHINA:Guangdong:Dabu
+9:CN:CHN:CHINA:Guangdong:Deqing
+10:CN:CHN:CHINA:Guangdong:Dianbai
+11:CN:CHN:CHINA:Guangdong:Dongguan
+12:CN:CHN:CHINA:Guangdong:Douman
+13:CN:CHN:CHINA:Guangdong:Enping
+14:CN:CHN:CHINA:Guangdong:Fengkai
+15:CN:CHN:CHINA:Guangdong:Fengshun
+16:CN:CHN:CHINA:Guangdong:Fogang
+17:CN:CHN:CHINA:Guangdong:Foshan Shi
+18:CN:CHN:CHINA:Guangdong:Gaoming
+19:CN:CHN:CHINA:Guangdong:Gaoyao
+20:CN:CHN:CHINA:Guangdong:Gaozhou
+21:CN:CHN:CHINA:Guangdong:Guangning
+22:CN:CHN:CHINA:Guangdong:Guangzhou Shiqu
+23:CN:CHN:CHINA:Guangdong:Haifeng
+24:CN:CHN:CHINA:Guangdong:Haikang
+25:CN:CHN:CHINA:Guangdong:Heping
+26:CN:CHN:CHINA:Guangdong:Heshan
+27:CN:CHN:CHINA:Guangdong:Heyuan
+28:CN:CHN:CHINA:Guangdong:Huaiji
+29:CN:CHN:CHINA:Guangdong:Huaxian
+30:CN:CHN:CHINA:Guangdong:Huazhou
+31:CN:CHN:CHINA:Guangdong:Huidong
+32:CN:CHN:CHINA:Guangdong:Huilai
+33:CN:CHN:CHINA:Guangdong:Huiyang
+34:CN:CHN:CHINA:Guangdong:Huizhou Shi
+35:CN:CHN:CHINA:Guangdong:Jiangmen Shi
+36:CN:CHN:CHINA:Guangdong:Jiaoling
+37:CN:CHN:CHINA:Guangdong:Jiexi
+38:CN:CHN:CHINA:Guangdong:Jieyang
+39:CN:CHN:CHINA:Guangdong:Kaiping
+40:CN:CHN:CHINA:Guangdong:Lechang
+41:CN:CHN:CHINA:Guangdong:Lianjiang
+42:CN:CHN:CHINA:Guangdong:Liannan
+43:CN:CHN:CHINA:Guangdong:Lianping
+44:CN:CHN:CHINA:Guangdong:Lianshan
+45:CN:CHN:CHINA:Guangdong:Lianxian
+46:CN:CHN:CHINA:Guangdong:Longchuan
+47:CN:CHN:CHINA:Guangdong:Longmen
+48:CN:CHN:CHINA:Guangdong:Lufeng
+49:CN:CHN:CHINA:Guangdong:Luoding
+50:CN:CHN:CHINA:Guangdong:Maoming
+51:CN:CHN:CHINA:Guangdong:Mei Xian
+52:CN:CHN:CHINA:Guangdong:Meizhou Shi
+53:CN:CHN:CHINA:Guangdong:Nanao
+54:CN:CHN:CHINA:Guangdong:Nanhai
+55:CN:CHN:CHINA:Guangdong:Nanxiong
+56:CN:CHN:CHINA:Guangdong:Panyu
+57:CN:CHN:CHINA:Guangdong:Pingyuan
+58:CN:CHN:CHINA:Guangdong:Puning
+59:CN:CHN:CHINA:Guangdong:Qingyuan
+60:CN:CHN:CHINA:Guangdong:Qujiang
+61:CN:CHN:CHINA:Guangdong:Raoping
+62:CN:CHN:CHINA:Guangdong:Renhua
+63:CN:CHN:CHINA:Guangdong:Ruyuan
+64:CN:CHN:CHINA:Guangdong:Sanshui
+65:CN:CHN:CHINA:Guangdong:Shantou Shi
+66:CN:CHN:CHINA:Guangdong:Shaoguan Shiqu
+67:CN:CHN:CHINA:Guangdong:Shenzhen Shiqu
+68:CN:CHN:CHINA:Guangdong:Shixing
+69:CN:CHN:CHINA:Guangdong:Shunde
+70:CN:CHN:CHINA:Guangdong:Sihui
+71:CN:CHN:CHINA:Guangdong:Suixi
+72:CN:CHN:CHINA:Guangdong:Taishan
+73:CN:CHN:CHINA:Guangdong:Wengyuan
+74:CN:CHN:CHINA:Guangdong:Wuchuan
+75:CN:CHN:CHINA:Guangdong:Wuhua
+76:CN:CHN:CHINA:Guangdong:Xinfeng
+77:CN:CHN:CHINA:Guangdong:Xingning
+78:CN:CHN:CHINA:Guangdong:Xinhui
+79:CN:CHN:CHINA:Guangdong:Xinxing
+80:CN:CHN:CHINA:Guangdong:Xinyi
+81:CN:CHN:CHINA:Guangdong:Xuwen
+82:CN:CHN:CHINA:Guangdong:Yangchun
+83:CN:CHN:CHINA:Guangdong:Yangjiang
+84:CN:CHN:CHINA:Guangdong:Yangshan
+85:CN:CHN:CHINA:Guangdong:Yingde
+86:CN:CHN:CHINA:Guangdong:Yunan
+87:CN:CHN:CHINA:Guangdong:Yunfu
+88:CN:CHN:CHINA:Guangdong:Zengcheng
+89:CN:CHN:CHINA:Guangdong:Zhanjiang Shi
+90:CN:CHN:CHINA:Guangdong:Zhaoqing Shi
+91:CN:CHN:CHINA:Guangdong:Zhongshan
+92:CN:CHN:CHINA:Guangdong:Zhuhai Shi
+93:CN:CHN:CHINA:Guangdong:Zijin
+1:CN:CHN:CHINA:Shandong:Anqiu
+2:CN:CHN:CHINA:Shandong:Binxian
+3:CN:CHN:CHINA:Shandong:Boxing
+4:CN:CHN:CHINA:Shandong:Cangshan
+5:CN:CHN:CHINA:Shandong:Caoxian
+6:CN:CHN:CHINA:Shandong:Changle
+7:CN:CHN:CHINA:Shandong:Changqing
+8:CN:CHN:CHINA:Shandong:Changyi
+9:CN:CHN:CHINA:Shandong:Chengwu
+10:CN:CHN:CHINA:Shandong:Chiping
+11:CN:CHN:CHINA:Shandong:Dezhou Shi
+12:CN:CHN:CHINA:Shandong:Dingtao
+13:CN:CHN:CHINA:Shandong:Dong E
+14:CN:CHN:CHINA:Shandong:Dongming
+15:CN:CHN:CHINA:Shandong:Dongping
+16:CN:CHN:CHINA:Shandong:Feicheng
+17:CN:CHN:CHINA:Shandong:Feixian
+18:CN:CHN:CHINA:Shandong:Fushan
+19:CN:CHN:CHINA:Shandong:Gaomi
+20:CN:CHN:CHINA:Shandong:Gaoqing
+21:CN:CHN:CHINA:Shandong:Gaotang
+22:CN:CHN:CHINA:Shandong:Guangrao
+23:CN:CHN:CHINA:Shandong:Guanxian
+24:CN:CHN:CHINA:Shandong:Haiyang
+25:CN:CHN:CHINA:Shandong:Heze
+26:CN:CHN:CHINA:Shandong:Huang Xian
+27:CN:CHN:CHINA:Shandong:Huantai
+28:CN:CHN:CHINA:Shandong:Huimin
+29:CN:CHN:CHINA:Shandong:Jiaonan
+30:CN:CHN:CHINA:Shandong:Jiaoxian
+31:CN:CHN:CHINA:Shandong:Jiaxiang
+32:CN:CHN:CHINA:Shandong:Jimo
+33:CN:CHN:CHINA:Shandong:Jinan Shiqu
+34:CN:CHN:CHINA:Shandong:Jining
+35:CN:CHN:CHINA:Shandong:Jining Shi
+36:CN:CHN:CHINA:Shandong:Jinxiang
+37:CN:CHN:CHINA:Shandong:Jiyang
+38:CN:CHN:CHINA:Shandong:Juancheng
+39:CN:CHN:CHINA:Shandong:Junan
+40:CN:CHN:CHINA:Shandong:Juxian
+41:CN:CHN:CHINA:Shandong:Juye
+42:CN:CHN:CHINA:Shandong:Kenli
+43:CN:CHN:CHINA:Shandong:Laiwu
+44:CN:CHN:CHINA:Shandong:Laixi
+45:CN:CHN:CHINA:Shandong:Laiyang
+46:CN:CHN:CHINA:Shandong:Laoshan
+47:CN:CHN:CHINA:Shandong:Leling
+48:CN:CHN:CHINA:Shandong:Liangshan
+49:CN:CHN:CHINA:Shandong:Liaocheng
+50:CN:CHN:CHINA:Shandong:Licheng
+51:CN:CHN:CHINA:Shandong:Lijin
+52:CN:CHN:CHINA:Shandong:Ling Xian
+53:CN:CHN:CHINA:Shandong:Linqing
+54:CN:CHN:CHINA:Shandong:Linqu
+55:CN:CHN:CHINA:Shandong:Linshu
+56:CN:CHN:CHINA:Shandong:Linyi
+57:CN:CHN:CHINA:Shandong:Mengyin
+58:CN:CHN:CHINA:Shandong:Mouping
+59:CN:CHN:CHINA:Shandong:Ningjin
+60:CN:CHN:CHINA:Shandong:Ningyang
+61:CN:CHN:CHINA:Shandong:Penglai
+62:CN:CHN:CHINA:Shandong:Pingdu
+63:CN:CHN:CHINA:Shandong:Pingyi
+64:CN:CHN:CHINA:Shandong:Pingyin
+65:CN:CHN:CHINA:Shandong:Pingyuan
+66:CN:CHN:CHINA:Shandong:Qihe
+67:CN:CHN:CHINA:Shandong:Qingdao Shiqu
+68:CN:CHN:CHINA:Shandong:Qingyun
+69:CN:CHN:CHINA:Shandong:Qixia
+70:CN:CHN:CHINA:Shandong:Qufu
+71:CN:CHN:CHINA:Shandong:Rizhao
+72:CN:CHN:CHINA:Shandong:Rongcheng
+73:CN:CHN:CHINA:Shandong:Rushan
+74:CN:CHN:CHINA:Shandong:Shanghe
+75:CN:CHN:CHINA:Shandong:Shanxian
+76:CN:CHN:CHINA:Shandong:Shenxian
+77:CN:CHN:CHINA:Shandong:Shouguang
+78:CN:CHN:CHINA:Shandong:Sishui
+79:CN:CHN:CHINA:Shandong:Tai An Shi
+80:CN:CHN:CHINA:Shandong:Tancheng
+81:CN:CHN:CHINA:Shandong:Teng Xian
+82:CN:CHN:CHINA:Shandong:Weifang Shi
+83:CN:CHN:CHINA:Shandong:Weihai Shi
+84:CN:CHN:CHINA:Shandong:Weishan
+85:CN:CHN:CHINA:Shandong:Weixian
+86:CN:CHN:CHINA:Shandong:Wendeng
+87:CN:CHN:CHINA:Shandong:Wenshang
+88:CN:CHN:CHINA:Shandong:Wucheng
+89:CN:CHN:CHINA:Shandong:Wudi
+90:CN:CHN:CHINA:Shandong:Wulian
+91:CN:CHN:CHINA:Shandong:Xiajin
+92:CN:CHN:CHINA:Shandong:Xintai
+93:CN:CHN:CHINA:Shandong:Xinwen
+94:CN:CHN:CHINA:Shandong:Yanggu
+95:CN:CHN:CHINA:Shandong:Yangxin
+96:CN:CHN:CHINA:Shandong:Yantai Shi
+97:CN:CHN:CHINA:Shandong:Yanzhou
+98:CN:CHN:CHINA:Shandong:Yexian
+99:CN:CHN:CHINA:Shandong:Yidu
+100:CN:CHN:CHINA:Shandong:Yinan
+101:CN:CHN:CHINA:Shandong:Yishui
+102:CN:CHN:CHINA:Shandong:Yiyuan
+103:CN:CHN:CHINA:Shandong:Yucheng
+104:CN:CHN:CHINA:Shandong:Yuncheng
+105:CN:CHN:CHINA:Shandong:Yutai
+106:CN:CHN:CHINA:Shandong:Zhangqiu
+107:CN:CHN:CHINA:Shandong:Zhanhua
+108:CN:CHN:CHINA:Shandong:Zhaoyuan
+109:CN:CHN:CHINA:Shandong:Zhaozhuang Shiqu
+110:CN:CHN:CHINA:Shandong:Zhucheng
+111:CN:CHN:CHINA:Shandong:Zibo Shi
+112:CN:CHN:CHINA:Shandong:Zouping
+113:CN:CHN:CHINA:Shandong:Zouxian
+1:CN:CHN:CHINA:Tianjin:Baodi
+2:CN:CHN:CHINA:Tianjin:Hangu
+3:CN:CHN:CHINA:Tianjin:Ji Xian
+4:CN:CHN:CHINA:Tianjin:Jinghai
+5:CN:CHN:CHINA:Tianjin:Ninghe
+6:CN:CHN:CHINA:Tianjin:Tanggu
+7:CN:CHN:CHINA:Tianjin:Tianjin Shiqu
+8:CN:CHN:CHINA:Tianjin:Wuqing
+1:CN:CHN:CHINA:Liaoning:Anshan Shiqu
+2:CN:CHN:CHINA:Liaoning:Beipiao
+3:CN:CHN:CHINA:Liaoning:Beizhen
+4:CN:CHN:CHINA:Liaoning:Benxi
+5:CN:CHN:CHINA:Liaoning:Benxi Shiqu
+6:CN:CHN:CHINA:Liaoning:Changtu
+7:CN:CHN:CHINA:Liaoning:Chaoyang
+8:CN:CHN:CHINA:Liaoning:Chaoyang Shi
+9:CN:CHN:CHINA:Liaoning:Dalian Shiqu
+10:CN:CHN:CHINA:Liaoning:Dandong Shiqu
+11:CN:CHN:CHINA:Liaoning:Dawa
+12:CN:CHN:CHINA:Liaoning:Dengta
+13:CN:CHN:CHINA:Liaoning:Donggou
+14:CN:CHN:CHINA:Liaoning:Faku
+15:CN:CHN:CHINA:Liaoning:Fengcheng
+16:CN:CHN:CHINA:Liaoning:Fu Xian
+17:CN:CHN:CHINA:Liaoning:Fushun
+18:CN:CHN:CHINA:Liaoning:Fushun Shiqu
+19:CN:CHN:CHINA:Liaoning:Fuxin Mongolian Ac
+20:CN:CHN:CHINA:Liaoning:Fuxin Shiqu
+21:CN:CHN:CHINA:Liaoning:Gai Xian
+22:CN:CHN:CHINA:Liaoning:Haicheng
+23:CN:CHN:CHINA:Liaoning:Harqin
+24:CN:CHN:CHINA:Liaoning:Heishan
+25:CN:CHN:CHINA:Liaoning:Huanren
+26:CN:CHN:CHINA:Liaoning:Jianchang
+27:CN:CHN:CHINA:Liaoning:Jianping
+28:CN:CHN:CHINA:Liaoning:Jin Xian
+29:CN:CHN:CHINA:Liaoning:Jinxi
+30:CN:CHN:CHINA:Liaoning:Jinzhou Shiqu
+31:CN:CHN:CHINA:Liaoning:Kaiyuan
+32:CN:CHN:CHINA:Liaoning:Kangping
+33:CN:CHN:CHINA:Liaoning:Kuandian
+34:CN:CHN:CHINA:Liaoning:Liaoyang
+35:CN:CHN:CHINA:Liaoning:Liaoyang Shiqu
+36:CN:CHN:CHINA:Liaoning:Liaozhong
+37:CN:CHN:CHINA:Liaoning:Lingyuan
+38:CN:CHN:CHINA:Liaoning:Panshan
+39:CN:CHN:CHINA:Liaoning:Qingyuan
+40:CN:CHN:CHINA:Liaoning:Shenyang Shiqu
+41:CN:CHN:CHINA:Liaoning:Suizhong
+42:CN:CHN:CHINA:Liaoning:Taian
+43:CN:CHN:CHINA:Liaoning:Tiefa Shi
+44:CN:CHN:CHINA:Liaoning:Tieling
+45:CN:CHN:CHINA:Liaoning:Tieling Shi
+46:CN:CHN:CHINA:Liaoning:Xifeng
+47:CN:CHN:CHINA:Liaoning:Xinbin
+48:CN:CHN:CHINA:Liaoning:Xingcheng
+49:CN:CHN:CHINA:Liaoning:Xinjin
+50:CN:CHN:CHINA:Liaoning:Xinmin
+51:CN:CHN:CHINA:Liaoning:Xiuyan
+52:CN:CHN:CHINA:Liaoning:Yi Xian
+53:CN:CHN:CHINA:Liaoning:Yingkou
+54:CN:CHN:CHINA:Liaoning:Yingkou Shiqu
+55:CN:CHN:CHINA:Liaoning:Zhangwu
+56:CN:CHN:CHINA:Liaoning:Zhuanghe
+1:CN:CHN:CHINA:Hubei:Anlu
+2:CN:CHN:CHINA:Hubei:Badong
+3:CN:CHN:CHINA:Hubei:Baokang
+4:CN:CHN:CHINA:Hubei:Changyang
+5:CN:CHN:CHINA:Hubei:Chongyang
+6:CN:CHN:CHINA:Hubei:Dangyang
+7:CN:CHN:CHINA:Hubei:Dawu
+8:CN:CHN:CHINA:Hubei:Daye
+9:CN:CHN:CHINA:Hubei:Echeng
+10:CN:CHN:CHINA:Hubei:Echeng Shi
+11:CN:CHN:CHINA:Hubei:Enshi
+12:CN:CHN:CHINA:Hubei:Enshi Shi
+13:CN:CHN:CHINA:Hubei:Fangxian
+14:CN:CHN:CHINA:Hubei:Gong An
+15:CN:CHN:CHINA:Hubei:Guanghua
+16:CN:CHN:CHINA:Hubei:Guangji
+17:CN:CHN:CHINA:Hubei:Gucheng
+18:CN:CHN:CHINA:Hubei:Hanchuan
+19:CN:CHN:CHINA:Hubei:Hanyang
+20:CN:CHN:CHINA:Hubei:Hefeng
+21:CN:CHN:CHINA:Hubei:Hong An
+22:CN:CHN:CHINA:Hubei:Honghu
+23:CN:CHN:CHINA:Hubei:Huanggang
+24:CN:CHN:CHINA:Hubei:Huangmei
+25:CN:CHN:CHINA:Hubei:Huangpi
+26:CN:CHN:CHINA:Hubei:Huangshi Shiqu
+27:CN:CHN:CHINA:Hubei:Jiangling
+28:CN:CHN:CHINA:Hubei:Jianli
+29:CN:CHN:CHINA:Hubei:Jianshi
+30:CN:CHN:CHINA:Hubei:Jiayu
+31:CN:CHN:CHINA:Hubei:Jingmen
+32:CN:CHN:CHINA:Hubei:Jingmen Shi
+33:CN:CHN:CHINA:Hubei:Jingshan
+34:CN:CHN:CHINA:Hubei:Junxian
+35:CN:CHN:CHINA:Hubei:Laifeng
+36:CN:CHN:CHINA:Hubei:Laohekou
+37:CN:CHN:CHINA:Hubei:Lichuan
+38:CN:CHN:CHINA:Hubei:Luotian
+39:CN:CHN:CHINA:Hubei:Macheng
+40:CN:CHN:CHINA:Hubei:Mianyang
+41:CN:CHN:CHINA:Hubei:Nanzhang
+42:CN:CHN:CHINA:Hubei:Puqi
+43:CN:CHN:CHINA:Hubei:Qianjiang
+44:CN:CHN:CHINA:Hubei:Qichun
+45:CN:CHN:CHINA:Hubei:Shashi Shi
+46:CN:CHN:CHINA:Hubei:Shennongjia
+47:CN:CHN:CHINA:Hubei:Shishou
+48:CN:CHN:CHINA:Hubei:Shiyan Shi
+49:CN:CHN:CHINA:Hubei:Songzi
+50:CN:CHN:CHINA:Hubei:Sui Xian
+51:CN:CHN:CHINA:Hubei:Suizhou Shi
+52:CN:CHN:CHINA:Hubei:Tianmen
+53:CN:CHN:CHINA:Hubei:Tongcheng
+54:CN:CHN:CHINA:Hubei:Tongshan
+55:CN:CHN:CHINA:Hubei:Wuchang
+56:CN:CHN:CHINA:Hubei:Wufeng
+57:CN:CHN:CHINA:Hubei:Wuhan Shiqu
+58:CN:CHN:CHINA:Hubei:Xianfeng
+59:CN:CHN:CHINA:Hubei:Xiangfan Shi
+60:CN:CHN:CHINA:Hubei:Xiangyang
+61:CN:CHN:CHINA:Hubei:Xianning
+62:CN:CHN:CHINA:Hubei:Xiaogan
+63:CN:CHN:CHINA:Hubei:Xingshan
+64:CN:CHN:CHINA:Hubei:Xinzhou
+65:CN:CHN:CHINA:Hubei:Xishui
+66:CN:CHN:CHINA:Hubei:Xuan En
+67:CN:CHN:CHINA:Hubei:Yangxin
+68:CN:CHN:CHINA:Hubei:Yichang
+69:CN:CHN:CHINA:Hubei:Yichang Shi
+70:CN:CHN:CHINA:Hubei:Yicheng
+71:CN:CHN:CHINA:Hubei:Yidu
+72:CN:CHN:CHINA:Hubei:Yingcheng
+73:CN:CHN:CHINA:Hubei:Yingshan
+74:CN:CHN:CHINA:Hubei:Yuan An
+75:CN:CHN:CHINA:Hubei:Yun Xian
+76:CN:CHN:CHINA:Hubei:Yunmeng
+77:CN:CHN:CHINA:Hubei:Yunxi
+78:CN:CHN:CHINA:Hubei:Zaoyang
+79:CN:CHN:CHINA:Hubei:Zhijiang
+80:CN:CHN:CHINA:Hubei:Zhongxiang
+81:CN:CHN:CHINA:Hubei:Zhushan
+82:CN:CHN:CHINA:Hubei:Zhuxi
+83:CN:CHN:CHINA:Hubei:Zigui
+1:CN:CHN:CHINA:Beijing:Beijing Shiqu
+2:CN:CHN:CHINA:Beijing:Changping
+3:CN:CHN:CHINA:Beijing:Daxing
+4:CN:CHN:CHINA:Beijing:Fangshan
+5:CN:CHN:CHINA:Beijing:Huairou
+6:CN:CHN:CHINA:Beijing:Mentougou Qu
+7:CN:CHN:CHINA:Beijing:Miyun
+8:CN:CHN:CHINA:Beijing:Pinggu
+9:CN:CHN:CHINA:Beijing:Shunyi
+10:CN:CHN:CHINA:Beijing:Tong Xian
+11:CN:CHN:CHINA:Beijing:Yanqing
+12:CN:CHN:CHINA:Beijing:Yanshan Qu
+1:CN:CHN:CHINA:Hainan:Baisha
+2:CN:CHN:CHINA:Hainan:Baoting
+3:CN:CHN:CHINA:Hainan:Changjiang
+4:CN:CHN:CHINA:Hainan:Chengmai
+5:CN:CHN:CHINA:Hainan:Dan Xian
+6:CN:CHN:CHINA:Hainan:Ding An
+7:CN:CHN:CHINA:Hainan:Dongfang
+8:CN:CHN:CHINA:Hainan:Haikoushi
+9:CN:CHN:CHINA:Hainan:Ledong
+10:CN:CHN:CHINA:Hainan:Lingao
+11:CN:CHN:CHINA:Hainan:Lingshui
+12:CN:CHN:CHINA:Hainan:Qionghai
+13:CN:CHN:CHINA:Hainan:Qiongshan
+14:CN:CHN:CHINA:Hainan:Qiongzhong
+15:CN:CHN:CHINA:Hainan:Tunchang
+16:CN:CHN:CHINA:Hainan:Wanning
+17:CN:CHN:CHINA:Hainan:Wenchang
+18:CN:CHN:CHINA:Hainan:Ya Xian
+1:CN:CHN:CHINA:Ningxia:Guyuan
+2:CN:CHN:CHINA:Ningxia:Haiyuan
+3:CN:CHN:CHINA:Ningxia:Helan
+4:CN:CHN:CHINA:Ningxia:Jingyuan
+5:CN:CHN:CHINA:Ningxia:Lingwu
+6:CN:CHN:CHINA:Ningxia:Longde
+7:CN:CHN:CHINA:Ningxia:Pingluo
+8:CN:CHN:CHINA:Ningxia:Qingtongxia
+9:CN:CHN:CHINA:Ningxia:Shizuishan Shiqu
+10:CN:CHN:CHINA:Ningxia:Taole
+11:CN:CHN:CHINA:Ningxia:Tongxin
+12:CN:CHN:CHINA:Ningxia:Wuzhong
+13:CN:CHN:CHINA:Ningxia:Xiji
+14:CN:CHN:CHINA:Ningxia:Yanchi
+15:CN:CHN:CHINA:Ningxia:Yinchuan Shiqu
+16:CN:CHN:CHINA:Ningxia:Yongning
+17:CN:CHN:CHINA:Ningxia:Zhongning
+18:CN:CHN:CHINA:Ningxia:Zhongwei
+1:CN:CHN:CHINA:Guangxi:Bama
+2:CN:CHN:CHINA:Guangxi:Beihai Shi
+3:CN:CHN:CHINA:Guangxi:Beiliu
+4:CN:CHN:CHINA:Guangxi:Binyang
+5:CN:CHN:CHINA:Guangxi:Bobai
+6:CN:CHN:CHINA:Guangxi:Bose
+7:CN:CHN:CHINA:Guangxi:Cangwu
+8:CN:CHN:CHINA:Guangxi:Cenxi
+9:CN:CHN:CHINA:Guangxi:Chongzuo
+10:CN:CHN:CHINA:Guangxi:Daxin
+11:CN:CHN:CHINA:Guangxi:Debao
+12:CN:CHN:CHINA:Guangxi:Donglan
+13:CN:CHN:CHINA:Guangxi:Du An
+14:CN:CHN:CHINA:Guangxi:Fangcheng
+15:CN:CHN:CHINA:Guangxi:Fengshan
+16:CN:CHN:CHINA:Guangxi:Fuchuan
+17:CN:CHN:CHINA:Guangxi:Fusui
+18:CN:CHN:CHINA:Guangxi:Gongcheng
+19:CN:CHN:CHINA:Guangxi:Guanyang
+20:CN:CHN:CHINA:Guangxi:Gui Xian
+21:CN:CHN:CHINA:Guangxi:Guilin Shiqu
+22:CN:CHN:CHINA:Guangxi:Guiping
+23:CN:CHN:CHINA:Guangxi:He Xian
+24:CN:CHN:CHINA:Guangxi:Hechi
+25:CN:CHN:CHINA:Guangxi:Heng Xian
+26:CN:CHN:CHINA:Guangxi:Hepu
+27:CN:CHN:CHINA:Guangxi:Heshan Shi
+28:CN:CHN:CHINA:Guangxi:Huanjiang
+29:CN:CHN:CHINA:Guangxi:Jingxi
+30:CN:CHN:CHINA:Guangxi:Jinxiu
+31:CN:CHN:CHINA:Guangxi:Laibin
+32:CN:CHN:CHINA:Guangxi:Leye
+33:CN:CHN:CHINA:Guangxi:Lingchuan
+34:CN:CHN:CHINA:Guangxi:Lingshan
+35:CN:CHN:CHINA:Guangxi:Lingui
+36:CN:CHN:CHINA:Guangxi:Lingyun
+37:CN:CHN:CHINA:Guangxi:Lipu
+38:CN:CHN:CHINA:Guangxi:Liucheng
+39:CN:CHN:CHINA:Guangxi:Liujiang
+40:CN:CHN:CHINA:Guangxi:Liuzhou Shi
+41:CN:CHN:CHINA:Guangxi:Long An
+42:CN:CHN:CHINA:Guangxi:Longlin
+43:CN:CHN:CHINA:Guangxi:Longsheng
+44:CN:CHN:CHINA:Guangxi:Longzhou
+45:CN:CHN:CHINA:Guangxi:Luchuan
+46:CN:CHN:CHINA:Guangxi:Luocheng
+47:CN:CHN:CHINA:Guangxi:Luzhai
+48:CN:CHN:CHINA:Guangxi:Mashan
+49:CN:CHN:CHINA:Guangxi:Mengshan
+50:CN:CHN:CHINA:Guangxi:Nandan
+51:CN:CHN:CHINA:Guangxi:Nanning
+52:CN:CHN:CHINA:Guangxi:Napo
+53:CN:CHN:CHINA:Guangxi:Ningming
+54:CN:CHN:CHINA:Guangxi:Pingguo
+55:CN:CHN:CHINA:Guangxi:Pingle
+56:CN:CHN:CHINA:Guangxi:Pingnan
+57:CN:CHN:CHINA:Guangxi:Pingxiang Shi
+58:CN:CHN:CHINA:Guangxi:Pubei
+59:CN:CHN:CHINA:Guangxi:Qinzhou
+60:CN:CHN:CHINA:Guangxi:Quanzhou
+61:CN:CHN:CHINA:Guangxi:Rong An
+62:CN:CHN:CHINA:Guangxi:Rong Xian
+63:CN:CHN:CHINA:Guangxi:Rongshui
+64:CN:CHN:CHINA:Guangxi:Sanjiang
+65:CN:CHN:CHINA:Guangxi:Shanglin
+66:CN:CHN:CHINA:Guangxi:Shangsi
+67:CN:CHN:CHINA:Guangxi:Teng Xian
+68:CN:CHN:CHINA:Guangxi:Tian E
+69:CN:CHN:CHINA:Guangxi:Tiandeng
+70:CN:CHN:CHINA:Guangxi:Tiandong
+71:CN:CHN:CHINA:Guangxi:Tianlin
+72:CN:CHN:CHINA:Guangxi:Tianyang
+73:CN:CHN:CHINA:Guangxi:Wuming
+74:CN:CHN:CHINA:Guangxi:Wuxuan
+75:CN:CHN:CHINA:Guangxi:Wuzhou Shi
+76:CN:CHN:CHINA:Guangxi:Xiangzhou
+77:CN:CHN:CHINA:Guangxi:Xilin
+78:CN:CHN:CHINA:Guangxi:Xincheng
+79:CN:CHN:CHINA:Guangxi:Xing An
+80:CN:CHN:CHINA:Guangxi:Yangshou
+81:CN:CHN:CHINA:Guangxi:Yishan
+82:CN:CHN:CHINA:Guangxi:Yongfu
+83:CN:CHN:CHINA:Guangxi:Yongning
+84:CN:CHN:CHINA:Guangxi:Yulin
+85:CN:CHN:CHINA:Guangxi:Zhaoping
+86:CN:CHN:CHINA:Guangxi:Zhongshan
+87:CN:CHN:CHINA:Guangxi:Ziyuan
+1:CN:CHN:CHINA:Shaanxi:Ankang
+2:CN:CHN:CHINA:Shaanxi:Ansai
+3:CN:CHN:CHINA:Shaanxi:Baihe
+4:CN:CHN:CHINA:Shaanxi:Baishui
+5:CN:CHN:CHINA:Shaanxi:Baoji
+6:CN:CHN:CHINA:Shaanxi:Baoji Shiqu
+7:CN:CHN:CHINA:Shaanxi:Bin Xian
+8:CN:CHN:CHINA:Shaanxi:Chang An
+9:CN:CHN:CHINA:Shaanxi:Changwu
+10:CN:CHN:CHINA:Shaanxi:Chengcheng
+11:CN:CHN:CHINA:Shaanxi:Chenggu
+12:CN:CHN:CHINA:Shaanxi:Chunhua
+13:CN:CHN:CHINA:Shaanxi:Dali
+14:CN:CHN:CHINA:Shaanxi:Danfeng
+15:CN:CHN:CHINA:Shaanxi:Dingbian
+16:CN:CHN:CHINA:Shaanxi:Feng Xian
+17:CN:CHN:CHINA:Shaanxi:Fengxiang
+18:CN:CHN:CHINA:Shaanxi:Foping
+19:CN:CHN:CHINA:Shaanxi:Fu Xian
+20:CN:CHN:CHINA:Shaanxi:Fufeng
+21:CN:CHN:CHINA:Shaanxi:Fugu
+22:CN:CHN:CHINA:Shaanxi:Fuping
+23:CN:CHN:CHINA:Shaanxi:Ganquan
+24:CN:CHN:CHINA:Shaanxi:Gaoling
+25:CN:CHN:CHINA:Shaanxi:Hancheng
+26:CN:CHN:CHINA:Shaanxi:Hanyin
+27:CN:CHN:CHINA:Shaanxi:Hanzhong Shi
+28:CN:CHN:CHINA:Shaanxi:Hengshan
+29:CN:CHN:CHINA:Shaanxi:Heyang
+30:CN:CHN:CHINA:Shaanxi:Hu Xian
+31:CN:CHN:CHINA:Shaanxi:Hua Xian
+32:CN:CHN:CHINA:Shaanxi:Huangling
+33:CN:CHN:CHINA:Shaanxi:Huanglong
+34:CN:CHN:CHINA:Shaanxi:Huayin
+35:CN:CHN:CHINA:Shaanxi:Jia Xian
+36:CN:CHN:CHINA:Shaanxi:Jingbian
+37:CN:CHN:CHINA:Shaanxi:Jingyang
+38:CN:CHN:CHINA:Shaanxi:Langao
+39:CN:CHN:CHINA:Shaanxi:Lantian
+40:CN:CHN:CHINA:Shaanxi:Lintong
+41:CN:CHN:CHINA:Shaanxi:Linyou
+42:CN:CHN:CHINA:Shaanxi:Liquan
+43:CN:CHN:CHINA:Shaanxi:Liuba
+44:CN:CHN:CHINA:Shaanxi:Long Xian
+45:CN:CHN:CHINA:Shaanxi:Lueyang
+46:CN:CHN:CHINA:Shaanxi:Luochuan
+47:CN:CHN:CHINA:Shaanxi:Luonan
+48:CN:CHN:CHINA:Shaanxi:Mei Xian
+49:CN:CHN:CHINA:Shaanxi:Mian Xian
+50:CN:CHN:CHINA:Shaanxi:Mizhi
+51:CN:CHN:CHINA:Shaanxi:Nanzheng
+52:CN:CHN:CHINA:Shaanxi:Ningqiang
+53:CN:CHN:CHINA:Shaanxi:Ningshan
+54:CN:CHN:CHINA:Shaanxi:Pingli
+55:CN:CHN:CHINA:Shaanxi:Pucheng
+56:CN:CHN:CHINA:Shaanxi:Qian Xian
+57:CN:CHN:CHINA:Shaanxi:Qianyang
+58:CN:CHN:CHINA:Shaanxi:Qingjian
+59:CN:CHN:CHINA:Shaanxi:Qishan
+60:CN:CHN:CHINA:Shaanxi:Sanyuan
+61:CN:CHN:CHINA:Shaanxi:Shang Xian
+62:CN:CHN:CHINA:Shaanxi:Shangnan
+63:CN:CHN:CHINA:Shaanxi:Shanyang
+64:CN:CHN:CHINA:Shaanxi:Shenmu
+65:CN:CHN:CHINA:Shaanxi:Shiqian
+66:CN:CHN:CHINA:Shaanxi:Suide
+67:CN:CHN:CHINA:Shaanxi:Taibai
+68:CN:CHN:CHINA:Shaanxi:Tongchuan Shiqu
+69:CN:CHN:CHINA:Shaanxi:Tongguan
+70:CN:CHN:CHINA:Shaanxi:Weinan
+71:CN:CHN:CHINA:Shaanxi:Wubu
+72:CN:CHN:CHINA:Shaanxi:Wugong
+73:CN:CHN:CHINA:Shaanxi:Wuqi
+74:CN:CHN:CHINA:Shaanxi:Xi An Shiqu
+75:CN:CHN:CHINA:Shaanxi:Xianyang Shi
+76:CN:CHN:CHINA:Shaanxi:Xingping
+77:CN:CHN:CHINA:Shaanxi:Xixiang
+78:CN:CHN:CHINA:Shaanxi:Xunyang
+79:CN:CHN:CHINA:Shaanxi:Xunyi
+80:CN:CHN:CHINA:Shaanxi:Yan An Shi
+81:CN:CHN:CHINA:Shaanxi:Yanchang
+82:CN:CHN:CHINA:Shaanxi:Yanchuan
+83:CN:CHN:CHINA:Shaanxi:Yang Xian
+84:CN:CHN:CHINA:Shaanxi:Yao Xian
+85:CN:CHN:CHINA:Shaanxi:Yichuan
+86:CN:CHN:CHINA:Shaanxi:Yijun
+87:CN:CHN:CHINA:Shaanxi:Yongshou
+88:CN:CHN:CHINA:Shaanxi:Yulin
+89:CN:CHN:CHINA:Shaanxi:Zhashui
+90:CN:CHN:CHINA:Shaanxi:Zhen An
+91:CN:CHN:CHINA:Shaanxi:Zhengba
+92:CN:CHN:CHINA:Shaanxi:Zhenping
+93:CN:CHN:CHINA:Shaanxi:Zhidan
+94:CN:CHN:CHINA:Shaanxi:Zhouzhi
+95:CN:CHN:CHINA:Shaanxi:Zichang
+96:CN:CHN:CHINA:Shaanxi:Ziyang
+97:CN:CHN:CHINA:Shaanxi:Zizhou
+1:CN:CHN:CHINA:Heilongjiang:Acheng
+2:CN:CHN:CHINA:Heilongjiang:Aihui
+3:CN:CHN:CHINA:Heilongjiang:Anda
+4:CN:CHN:CHINA:Heilongjiang:Baiquan
+5:CN:CHN:CHINA:Heilongjiang:Baoqing
+6:CN:CHN:CHINA:Heilongjiang:Bayan
+7:CN:CHN:CHINA:Heilongjiang:Beian
+8:CN:CHN:CHINA:Heilongjiang:Bin Xian
+9:CN:CHN:CHINA:Heilongjiang:Boli
+10:CN:CHN:CHINA:Heilongjiang:Daqina Shi
+11:CN:CHN:CHINA:Heilongjiang:Dedu
+12:CN:CHN:CHINA:Heilongjiang:Dongning
+13:CN:CHN:CHINA:Heilongjiang:Dorbod
+14:CN:CHN:CHINA:Heilongjiang:Fangzheng
+15:CN:CHN:CHINA:Heilongjiang:Fujin
+16:CN:CHN:CHINA:Heilongjiang:Fuyu
+17:CN:CHN:CHINA:Heilongjiang:Fuyuan
+18:CN:CHN:CHINA:Heilongjiang:Gannan
+19:CN:CHN:CHINA:Heilongjiang:Hailin
+20:CN:CHN:CHINA:Heilongjiang:Hailun
+21:CN:CHN:CHINA:Heilongjiang:Harbin Shi
+22:CN:CHN:CHINA:Heilongjiang:Hegang Shi
+23:CN:CHN:CHINA:Heilongjiang:Heihe Shi
+24:CN:CHN:CHINA:Heilongjiang:Hua Nan
+25:CN:CHN:CHINA:Heilongjiang:Huachuan
+26:CN:CHN:CHINA:Heilongjiang:Hulan
+27:CN:CHN:CHINA:Heilongjiang:Hulin
+28:CN:CHN:CHINA:Heilongjiang:Huma
+29:CN:CHN:CHINA:Heilongjiang:Jiamusi Shi
+30:CN:CHN:CHINA:Heilongjiang:Jiayin
+31:CN:CHN:CHINA:Heilongjiang:Jidong
+32:CN:CHN:CHINA:Heilongjiang:Jixi Shi
+33:CN:CHN:CHINA:Heilongjiang:Jixian
+34:CN:CHN:CHINA:Heilongjiang:Kedong
+35:CN:CHN:CHINA:Heilongjiang:Keshan
+36:CN:CHN:CHINA:Heilongjiang:Lanxi
+37:CN:CHN:CHINA:Heilongjiang:Lindian
+38:CN:CHN:CHINA:Heilongjiang:Linkou
+39:CN:CHN:CHINA:Heilongjiang:Longjiang
+40:CN:CHN:CHINA:Heilongjiang:Luobei
+41:CN:CHN:CHINA:Heilongjiang:Mingshui
+42:CN:CHN:CHINA:Heilongjiang:Mishan
+43:CN:CHN:CHINA:Heilongjiang:Mohe
+44:CN:CHN:CHINA:Heilongjiang:Mudanjiang Shi
+45:CN:CHN:CHINA:Heilongjiang:Mulan
+46:CN:CHN:CHINA:Heilongjiang:Muling
+47:CN:CHN:CHINA:Heilongjiang:Nehe
+48:CN:CHN:CHINA:Heilongjiang:Nenjiang
+49:CN:CHN:CHINA:Heilongjiang:Ning An
+50:CN:CHN:CHINA:Heilongjiang:Qing An
+51:CN:CHN:CHINA:Heilongjiang:Qinggang
+52:CN:CHN:CHINA:Heilongjiang:Qiqihar Shi
+53:CN:CHN:CHINA:Heilongjiang:Qitaihe Shi
+54:CN:CHN:CHINA:Heilongjiang:Raohe
+55:CN:CHN:CHINA:Heilongjiang:Shangzhi
+56:CN:CHN:CHINA:Heilongjiang:Shuangcheng
+57:CN:CHN:CHINA:Heilongjiang:Shuangyashan Shi
+58:CN:CHN:CHINA:Heilongjiang:Suibin
+59:CN:CHN:CHINA:Heilongjiang:Suifenhe Shi
+60:CN:CHN:CHINA:Heilongjiang:Suihua
+61:CN:CHN:CHINA:Heilongjiang:Suileng
+62:CN:CHN:CHINA:Heilongjiang:Sunwu
+63:CN:CHN:CHINA:Heilongjiang:Tahe
+64:CN:CHN:CHINA:Heilongjiang:Tailai
+65:CN:CHN:CHINA:Heilongjiang:Tangyuan
+66:CN:CHN:CHINA:Heilongjiang:Tieli
+67:CN:CHN:CHINA:Heilongjiang:Tonghe
+68:CN:CHN:CHINA:Heilongjiang:Tongjiang
+69:CN:CHN:CHINA:Heilongjiang:Wangkui
+70:CN:CHN:CHINA:Heilongjiang:Wuchang
+71:CN:CHN:CHINA:Heilongjiang:Xunke
+72:CN:CHN:CHINA:Heilongjiang:Yanshou
+73:CN:CHN:CHINA:Heilongjiang:Yi An
+74:CN:CHN:CHINA:Heilongjiang:Yichun Shiqu
+75:CN:CHN:CHINA:Heilongjiang:Yilan
+76:CN:CHN:CHINA:Heilongjiang:Zhaodong
+77:CN:CHN:CHINA:Heilongjiang:Zhaoyuan
+78:CN:CHN:CHINA:Heilongjiang:Zhaozhou
+1:CN:CHN:CHINA:Zhejiang:Anji
+2:CN:CHN:CHINA:Zhejiang:Cangnan
+3:CN:CHN:CHINA:Zhejiang:Changshan
+4:CN:CHN:CHINA:Zhejiang:Changxing
+5:CN:CHN:CHINA:Zhejiang:Chunan
+6:CN:CHN:CHINA:Zhejiang:Cixi
+7:CN:CHN:CHINA:Zhejiang:Deqing
+8:CN:CHN:CHINA:Zhejiang:Dinghai
+9:CN:CHN:CHINA:Zhejiang:Dongyang
+10:CN:CHN:CHINA:Zhejiang:Fenghua
+11:CN:CHN:CHINA:Zhejiang:Fuyang
+12:CN:CHN:CHINA:Zhejiang:Haining
+13:CN:CHN:CHINA:Zhejiang:Haiyan
+14:CN:CHN:CHINA:Zhejiang:Hangzhou Shiqu
+15:CN:CHN:CHINA:Zhejiang:Huangyan
+16:CN:CHN:CHINA:Zhejiang:Huzhou
+17:CN:CHN:CHINA:Zhejiang:Jiande
+18:CN:CHN:CHINA:Zhejiang:Jiangshan
+19:CN:CHN:CHINA:Zhejiang:Jiaojiang Shi
+20:CN:CHN:CHINA:Zhejiang:Jiashan
+21:CN:CHN:CHINA:Zhejiang:Jiaxing
+22:CN:CHN:CHINA:Zhejiang:Jinhua Shi
+23:CN:CHN:CHINA:Zhejiang:Jiyun
+24:CN:CHN:CHINA:Zhejiang:Kaihua
+25:CN:CHN:CHINA:Zhejiang:Lanxi
+26:CN:CHN:CHINA:Zhejiang:Leqing
+27:CN:CHN:CHINA:Zhejiang:Linan
+28:CN:CHN:CHINA:Zhejiang:Linhai
+29:CN:CHN:CHINA:Zhejiang:Lishui
+30:CN:CHN:CHINA:Zhejiang:Longquan
+31:CN:CHN:CHINA:Zhejiang:Ningbo Shiqu
+32:CN:CHN:CHINA:Zhejiang:Ninghai
+33:CN:CHN:CHINA:Zhejiang:Pinghu
+34:CN:CHN:CHINA:Zhejiang:Pingyang
+35:CN:CHN:CHINA:Zhejiang:Pujiang
+36:CN:CHN:CHINA:Zhejiang:Putuo
+37:CN:CHN:CHINA:Zhejiang:Qingtian
+38:CN:CHN:CHINA:Zhejiang:Qingyuan
+39:CN:CHN:CHINA:Zhejiang:Quhai
+40:CN:CHN:CHINA:Zhejiang:Quzhou Shi
+41:CN:CHN:CHINA:Zhejiang:Ruian
+42:CN:CHN:CHINA:Zhejiang:Sanmen
+43:CN:CHN:CHINA:Zhejiang:Shangyu
+44:CN:CHN:CHINA:Zhejiang:Shaoxing Shi
+45:CN:CHN:CHINA:Zhejiang:Sheng Xian
+46:CN:CHN:CHINA:Zhejiang:Shuichang
+47:CN:CHN:CHINA:Zhejiang:Songyang
+48:CN:CHN:CHINA:Zhejiang:Taishun
+49:CN:CHN:CHINA:Zhejiang:Tiantai
+50:CN:CHN:CHINA:Zhejiang:Tonglu
+51:CN:CHN:CHINA:Zhejiang:Tongxiang
+52:CN:CHN:CHINA:Zhejiang:Wencheng
+53:CN:CHN:CHINA:Zhejiang:Wenling
+54:CN:CHN:CHINA:Zhejiang:Wenzhou Shiqu
+55:CN:CHN:CHINA:Zhejiang:Wuyi
+56:CN:CHN:CHINA:Zhejiang:Xiangshan
+57:CN:CHN:CHINA:Zhejiang:Xianju
+58:CN:CHN:CHINA:Zhejiang:Xiaoshan
+59:CN:CHN:CHINA:Zhejiang:Xinchang
+60:CN:CHN:CHINA:Zhejiang:Yin Xian
+61:CN:CHN:CHINA:Zhejiang:Yiwu
+62:CN:CHN:CHINA:Zhejiang:Yongjia
+63:CN:CHN:CHINA:Zhejiang:Yongkang
+64:CN:CHN:CHINA:Zhejiang:Yuhang
+65:CN:CHN:CHINA:Zhejiang:Yuhuan
+66:CN:CHN:CHINA:Zhejiang:Yunhe
+67:CN:CHN:CHINA:Zhejiang:Yuyao
+68:CN:CHN:CHINA:Zhejiang:Zhenhai
+69:CN:CHN:CHINA:Zhejiang:Zhuji
+1:CN:CHN:CHINA:Xinjiang Uygur:Akqi
+2:CN:CHN:CHINA:Xinjiang Uygur:Aksu
+3:CN:CHN:CHINA:Xinjiang Uygur:Akto
+4:CN:CHN:CHINA:Xinjiang Uygur:Altay
+5:CN:CHN:CHINA:Xinjiang Uygur:Artux
+6:CN:CHN:CHINA:Xinjiang Uygur:Awat
+7:CN:CHN:CHINA:Xinjiang Uygur:Bachu
+8:CN:CHN:CHINA:Xinjiang Uygur:Baicheng
+9:CN:CHN:CHINA:Xinjiang Uygur:Barkol
+10:CN:CHN:CHINA:Xinjiang Uygur:Bohu
+11:CN:CHN:CHINA:Xinjiang Uygur:Bole
+12:CN:CHN:CHINA:Xinjiang Uygur:Burqin
+13:CN:CHN:CHINA:Xinjiang Uygur:Changji
+14:CN:CHN:CHINA:Xinjiang Uygur:Emin
+15:CN:CHN:CHINA:Xinjiang Uygur:Fuhai
+16:CN:CHN:CHINA:Xinjiang Uygur:Fukang
+17:CN:CHN:CHINA:Xinjiang Uygur:Fuyun
+18:CN:CHN:CHINA:Xinjiang Uygur:Gongliu
+19:CN:CHN:CHINA:Xinjiang Uygur:Habahe
+20:CN:CHN:CHINA:Xinjiang Uygur:Hami
+21:CN:CHN:CHINA:Xinjiang Uygur:Hami Shi
+22:CN:CHN:CHINA:Xinjiang Uygur:Hejing
+23:CN:CHN:CHINA:Xinjiang Uygur:Hoboksar
+24:CN:CHN:CHINA:Xinjiang Uygur:Hotan
+25:CN:CHN:CHINA:Xinjiang Uygur:Hoxud
+26:CN:CHN:CHINA:Xinjiang Uygur:Huocheng
+27:CN:CHN:CHINA:Xinjiang Uygur:Hutubi
+28:CN:CHN:CHINA:Xinjiang Uygur:Jeminay
+29:CN:CHN:CHINA:Xinjiang Uygur:Jiashi
+30:CN:CHN:CHINA:Xinjiang Uygur:Jimsar
+31:CN:CHN:CHINA:Xinjiang Uygur:Jinghe
+32:CN:CHN:CHINA:Xinjiang Uygur:Kalpin
+33:CN:CHN:CHINA:Xinjiang Uygur:Karamay Shi
+34:CN:CHN:CHINA:Xinjiang Uygur:Kashi Shi
+35:CN:CHN:CHINA:Xinjiang Uygur:Korla
+36:CN:CHN:CHINA:Xinjiang Uygur:Korla Shi
+37:CN:CHN:CHINA:Xinjiang Uygur:Kuqa
+38:CN:CHN:CHINA:Xinjiang Uygur:Kuytun Shi
+39:CN:CHN:CHINA:Xinjiang Uygur:Lop
+40:CN:CHN:CHINA:Xinjiang Uygur:Luntai
+41:CN:CHN:CHINA:Xinjiang Uygur:Manas
+42:CN:CHN:CHINA:Xinjiang Uygur:Markit
+43:CN:CHN:CHINA:Xinjiang Uygur:Minfeng
+44:CN:CHN:CHINA:Xinjiang Uygur:Miquan
+45:CN:CHN:CHINA:Xinjiang Uygur:Mori
+46:CN:CHN:CHINA:Xinjiang Uygur:Moyu
+47:CN:CHN:CHINA:Xinjiang Uygur:Nilka
+48:CN:CHN:CHINA:Xinjiang Uygur:Pishan
+49:CN:CHN:CHINA:Xinjiang Uygur:Qapqai
+50:CN:CHN:CHINA:Xinjiang Uygur:Qiemo
+51:CN:CHN:CHINA:Xinjiang Uygur:Qinghe
+52:CN:CHN:CHINA:Xinjiang Uygur:Qira
+53:CN:CHN:CHINA:Xinjiang Uygur:Qitai
+54:CN:CHN:CHINA:Xinjiang Uygur:Ruoqiang
+55:CN:CHN:CHINA:Xinjiang Uygur:Shache
+56:CN:CHN:CHINA:Xinjiang Uygur:Shanshan
+57:CN:CHN:CHINA:Xinjiang Uygur:Shawan
+58:CN:CHN:CHINA:Xinjiang Uygur:Shihezi Shi
+59:CN:CHN:CHINA:Xinjiang Uygur:Shufu
+60:CN:CHN:CHINA:Xinjiang Uygur:Shule
+61:CN:CHN:CHINA:Xinjiang Uygur:Tacheng
+62:CN:CHN:CHINA:Xinjiang Uygur:Taxkorgan
+63:CN:CHN:CHINA:Xinjiang Uygur:Tekes
+64:CN:CHN:CHINA:Xinjiang Uygur:Toksun
+65:CN:CHN:CHINA:Xinjiang Uygur:Toli
+66:CN:CHN:CHINA:Xinjiang Uygur:Turpan
+67:CN:CHN:CHINA:Xinjiang Uygur:Urumqi
+68:CN:CHN:CHINA:Xinjiang Uygur:Urumqi Shiqu
+69:CN:CHN:CHINA:Xinjiang Uygur:Usu
+70:CN:CHN:CHINA:Xinjiang Uygur:Wenquan
+71:CN:CHN:CHINA:Xinjiang Uygur:Wensu
+72:CN:CHN:CHINA:Xinjiang Uygur:Wuqia
+73:CN:CHN:CHINA:Xinjiang Uygur:Wushi
+74:CN:CHN:CHINA:Xinjiang Uygur:Xayar
+75:CN:CHN:CHINA:Xinjiang Uygur:Xinhe
+76:CN:CHN:CHINA:Xinjiang Uygur:Xinyuan
+77:CN:CHN:CHINA:Xinjiang Uygur:Yanqi
+78:CN:CHN:CHINA:Xinjiang Uygur:Yecheng
+79:CN:CHN:CHINA:Xinjiang Uygur:Yengisar
+80:CN:CHN:CHINA:Xinjiang Uygur:Yining
+81:CN:CHN:CHINA:Xinjiang Uygur:Yining Shi
+82:CN:CHN:CHINA:Xinjiang Uygur:Yiwu
+83:CN:CHN:CHINA:Xinjiang Uygur:Yopurga
+84:CN:CHN:CHINA:Xinjiang Uygur:Yuli
+85:CN:CHN:CHINA:Xinjiang Uygur:Yumin
+86:CN:CHN:CHINA:Xinjiang Uygur:Yutian
+87:CN:CHN:CHINA:Xinjiang Uygur:Zepu
+88:CN:CHN:CHINA:Xinjiang Uygur:Zhaosu
+1:CN:CHN:CHINA:Jiangxi:Anfu
+2:CN:CHN:CHINA:Jiangxi:Anyi
+3:CN:CHN:CHINA:Jiangxi:Anyuan
+4:CN:CHN:CHINA:Jiangxi:Boyang
+5:CN:CHN:CHINA:Jiangxi:Chongren
+6:CN:CHN:CHINA:Jiangxi:Chongyi
+7:CN:CHN:CHINA:Jiangxi:Dayu
+8:CN:CHN:CHINA:Jiangxi:De An
+9:CN:CHN:CHINA:Jiangxi:Dexing
+10:CN:CHN:CHINA:Jiangxi:Dingnan
+11:CN:CHN:CHINA:Jiangxi:Dongxiang
+12:CN:CHN:CHINA:Jiangxi:Duchang
+13:CN:CHN:CHINA:Jiangxi:Fencheng
+14:CN:CHN:CHINA:Jiangxi:Fengxin
+15:CN:CHN:CHINA:Jiangxi:Fengyi
+16:CN:CHN:CHINA:Jiangxi:Fuzhou Shi
+17:CN:CHN:CHINA:Jiangxi:Gan Xian
+18:CN:CHN:CHINA:Jiangxi:Ganzhou Shi
+19:CN:CHN:CHINA:Jiangxi:Gaoan
+20:CN:CHN:CHINA:Jiangxi:Guangchang
+21:CN:CHN:CHINA:Jiangxi:Guangfen
+22:CN:CHN:CHINA:Jiangxi:Guixi
+23:CN:CHN:CHINA:Jiangxi:Hengfeng
+24:CN:CHN:CHINA:Jiangxi:Huichang
+25:CN:CHN:CHINA:Jiangxi:Hukou
+26:CN:CHN:CHINA:Jiangxi:Ji An
+27:CN:CHN:CHINA:Jiangxi:Ji An Shi
+28:CN:CHN:CHINA:Jiangxi:Jing An
+29:CN:CHN:CHINA:Jiangxi:Jingdezhen Shi
+30:CN:CHN:CHINA:Jiangxi:Jinggangshan
+31:CN:CHN:CHINA:Jiangxi:Jinxi
+32:CN:CHN:CHINA:Jiangxi:Jinxian
+33:CN:CHN:CHINA:Jiangxi:Jishui
+34:CN:CHN:CHINA:Jiangxi:Jiujiang
+35:CN:CHN:CHINA:Jiangxi:Jiujiang Shi
+36:CN:CHN:CHINA:Jiangxi:Lean
+37:CN:CHN:CHINA:Jiangxi:Leping
+38:CN:CHN:CHINA:Jiangxi:Lianhua
+39:CN:CHN:CHINA:Jiangxi:Lichuan
+40:CN:CHN:CHINA:Jiangxi:Linchuan
+41:CN:CHN:CHINA:Jiangxi:Longnan
+42:CN:CHN:CHINA:Jiangxi:Nanchang
+43:CN:CHN:CHINA:Jiangxi:Nanchang Shiqu
+44:CN:CHN:CHINA:Jiangxi:Nancheng
+45:CN:CHN:CHINA:Jiangxi:Nanfeng
+46:CN:CHN:CHINA:Jiangxi:Nankang
+47:CN:CHN:CHINA:Jiangxi:Ningdu
+48:CN:CHN:CHINA:Jiangxi:Ninggang
+49:CN:CHN:CHINA:Jiangxi:Pengze
+50:CN:CHN:CHINA:Jiangxi:Pingxiang Shi
+51:CN:CHN:CHINA:Jiangxi:Qianshan
+52:CN:CHN:CHINA:Jiangxi:Qingjiang
+53:CN:CHN:CHINA:Jiangxi:Quannan
+54:CN:CHN:CHINA:Jiangxi:Ruichang
+55:CN:CHN:CHINA:Jiangxi:Ruijin
+56:CN:CHN:CHINA:Jiangxi:Shanggao
+57:CN:CHN:CHINA:Jiangxi:Shangrao
+58:CN:CHN:CHINA:Jiangxi:Shangrao Shi
+59:CN:CHN:CHINA:Jiangxi:Shangyou
+60:CN:CHN:CHINA:Jiangxi:Shicheng
+61:CN:CHN:CHINA:Jiangxi:Suichuan
+62:CN:CHN:CHINA:Jiangxi:Taihe
+63:CN:CHN:CHINA:Jiangxi:Tonggu
+64:CN:CHN:CHINA:Jiangxi:Wan An
+65:CN:CHN:CHINA:Jiangxi:Wannian
+66:CN:CHN:CHINA:Jiangxi:Wanzai
+67:CN:CHN:CHINA:Jiangxi:Wuning
+68:CN:CHN:CHINA:Jiangxi:Wuyuan
+69:CN:CHN:CHINA:Jiangxi:Xiajiang
+70:CN:CHN:CHINA:Jiangxi:Xinfeng
+71:CN:CHN:CHINA:Jiangxi:Xingan
+72:CN:CHN:CHINA:Jiangxi:Xingguo
+73:CN:CHN:CHINA:Jiangxi:Xingzi
+74:CN:CHN:CHINA:Jiangxi:Xinjian
+75:CN:CHN:CHINA:Jiangxi:Xinyu
+76:CN:CHN:CHINA:Jiangxi:Xiushui
+77:CN:CHN:CHINA:Jiangxi:Xunwu
+78:CN:CHN:CHINA:Jiangxi:Yichun
+79:CN:CHN:CHINA:Jiangxi:Yichun Shi
+80:CN:CHN:CHINA:Jiangxi:Yifeng
+81:CN:CHN:CHINA:Jiangxi:Yihuang
+82:CN:CHN:CHINA:Jiangxi:Yingtan Shi
+83:CN:CHN:CHINA:Jiangxi:Yiyang
+84:CN:CHN:CHINA:Jiangxi:Yongfeng
+85:CN:CHN:CHINA:Jiangxi:Yongxin
+86:CN:CHN:CHINA:Jiangxi:Yongxiu
+87:CN:CHN:CHINA:Jiangxi:Yudu
+88:CN:CHN:CHINA:Jiangxi:Yugan
+89:CN:CHN:CHINA:Jiangxi:Yujiang
+90:CN:CHN:CHINA:Jiangxi:Yushan
+91:CN:CHN:CHINA:Jiangxi:Zixi
+1:CN:CHN:CHINA:Gansu:Aksay
+2:CN:CHN:CHINA:Gansu:Anxi
+3:CN:CHN:CHINA:Gansu:Cheng Xian
+4:CN:CHN:CHINA:Gansu:Chongxin
+5:CN:CHN:CHINA:Gansu:Dangchang
+6:CN:CHN:CHINA:Gansu:Dingxi
+7:CN:CHN:CHINA:Gansu:Doogxiang
+8:CN:CHN:CHINA:Gansu:Dunhuang
+9:CN:CHN:CHINA:Gansu:Gangu
+10:CN:CHN:CHINA:Gansu:Gaolan
+11:CN:CHN:CHINA:Gansu:Gaotai
+12:CN:CHN:CHINA:Gansu:Guanghe
+13:CN:CHN:CHINA:Gansu:Gulang
+14:CN:CHN:CHINA:Gansu:Heshui
+15:CN:CHN:CHINA:Gansu:Hezheng
+16:CN:CHN:CHINA:Gansu:Huachi
+17:CN:CHN:CHINA:Gansu:Huan Xian
+18:CN:CHN:CHINA:Gansu:Huating
+19:CN:CHN:CHINA:Gansu:Hui Xian
+20:CN:CHN:CHINA:Gansu:Huining
+21:CN:CHN:CHINA:Gansu:Jiayuguan Shi
+22:CN:CHN:CHINA:Gansu:Jinchang Shiqu
+23:CN:CHN:CHINA:Gansu:Jingchuan
+24:CN:CHN:CHINA:Gansu:Jingning
+25:CN:CHN:CHINA:Gansu:Jingtai
+26:CN:CHN:CHINA:Gansu:Jingyuan
+27:CN:CHN:CHINA:Gansu:Jinta
+28:CN:CHN:CHINA:Gansu:Jishishan
+29:CN:CHN:CHINA:Gansu:Jiuquan
+30:CN:CHN:CHINA:Gansu:Jone
+31:CN:CHN:CHINA:Gansu:Kang Xian
+32:CN:CHN:CHINA:Gansu:Kangle
+33:CN:CHN:CHINA:Gansu:Lanzhou Shiqu
+34:CN:CHN:CHINA:Gansu:Li Xian
+35:CN:CHN:CHINA:Gansu:Liangdang
+36:CN:CHN:CHINA:Gansu:Lingtai
+37:CN:CHN:CHINA:Gansu:Lingtao
+38:CN:CHN:CHINA:Gansu:Lintan
+39:CN:CHN:CHINA:Gansu:Linxia
+40:CN:CHN:CHINA:Gansu:Linze
+41:CN:CHN:CHINA:Gansu:Longxi
+42:CN:CHN:CHINA:Gansu:Luqu
+43:CN:CHN:CHINA:Gansu:Maqu
+44:CN:CHN:CHINA:Gansu:Min Xian
+45:CN:CHN:CHINA:Gansu:Minle
+46:CN:CHN:CHINA:Gansu:Minqin
+47:CN:CHN:CHINA:Gansu:Ning Xian
+48:CN:CHN:CHINA:Gansu:Pingliang
+49:CN:CHN:CHINA:Gansu:Qin An
+50:CN:CHN:CHINA:Gansu:Qingshui
+51:CN:CHN:CHINA:Gansu:Qingyang
+52:CN:CHN:CHINA:Gansu:Shandan
+53:CN:CHN:CHINA:Gansu:Subei
+54:CN:CHN:CHINA:Gansu:Sunan
+55:CN:CHN:CHINA:Gansu:Tewo
+56:CN:CHN:CHINA:Gansu:Tianshui
+57:CN:CHN:CHINA:Gansu:Tianshui Shi
+58:CN:CHN:CHINA:Gansu:Tianzhu
+59:CN:CHN:CHINA:Gansu:Tongwei
+60:CN:CHN:CHINA:Gansu:Weiyuan
+61:CN:CHN:CHINA:Gansu:Wen Xian
+62:CN:CHN:CHINA:Gansu:Wudu
+63:CN:CHN:CHINA:Gansu:Wushan
+64:CN:CHN:CHINA:Gansu:Wuwei
+65:CN:CHN:CHINA:Gansu:Xiahe
+66:CN:CHN:CHINA:Gansu:Xihe
+67:CN:CHN:CHINA:Gansu:Yongchang
+68:CN:CHN:CHINA:Gansu:Yongdeng
+69:CN:CHN:CHINA:Gansu:Yongjina
+70:CN:CHN:CHINA:Gansu:Yumen Shi
+71:CN:CHN:CHINA:Gansu:Yuzhong
+72:CN:CHN:CHINA:Gansu:Zhang Xian
+73:CN:CHN:CHINA:Gansu:Zhangjiachuan
+74:CN:CHN:CHINA:Gansu:Zhangye
+75:CN:CHN:CHINA:Gansu:Zhengning
+76:CN:CHN:CHINA:Gansu:Zhenyuan
+77:CN:CHN:CHINA:Gansu:Zhuanglang
+78:CN:CHN:CHINA:Gansu:Zhugqu
diff --git a/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN1_LEX.txt
new file mode 100644
index 0000000..5900eee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN1_LEX.txt
@@ -0,0 +1,65 @@
+1:CI-06:CI:8 MONTAGNES
+2:CI-ABE:CI:ABENGOUROU
+3:CI-ABI:CI:ABIDJAN
+4:CI-ABO:CI:ABOISSO
+5:CI-AD:CI:ADZOPE
+6:CI-AGB:CI:AGBOVILLE
+7:CI-6:CI:AGNEBI
+8:CI-AGN:CI:AGNIBILEKRO
+9:CI-BAN:CI:BANGOLO
+10:CI-09:CI:BAS SASSANDRA
+11:CI-BEO:CI:BEOUMI
+12:CI-BIA:CI:BIANKOUMA
+13:CI-BOD:CI:BONDOUKOU
+14:CI-BOG:CI:BONGOUANOU
+15:CI-BOF:CI:BOUAFLE
+16:CI-BOK:CI:BOUAKE
+17:CI-BOU:CI:BOUNA
+18:CI-BON:CI:BOUNDIALI
+19:CI-DAK:CI:DABAKALA
+20:CI-DAL:CI:DALOA
+21:CI-DAN:CI:DANANE
+22:CI-DAO:CI:DAOUKRO
+23:CI-0:CI:DENGUELE
+24:CI-DIM:CI:DIMBOKRO
+25:CI-DIV:CI:DIVO
+26:CI-DUE:CI:DUEKOUE
+27:CI-FER:CI:FERKESSEDOUGOU
+28:CI-GAG:CI:GAGNOA
+29:CI-LAH:CI:GRAND LAHOU
+30:CI-GUI:CI:GUIGLO
+31:CI-02:CI:HAUT SASSANDRA
+32:CI-ISS:CI:ISSIA
+33:CI-KAT:CI:KATIOLA
+34:CI-KOR:CI:KORHOGO
+35:CI-07:CI:LACS
+36:CI-LAK:CI:LAKOTA
+37:CI-MBA:CI:M'BAHIAKRO
+38:CI-MN:CI:MAN
+39:CI-MAN:CI:MANKONO
+40:CI-2:CI:MARAHOUE
+41:CI-05:CI:MOYEN COMOE
+42:CI-10:CI:NZI COMOE
+43:CI-ODI:CI:ODIENNE
+44:CI-OU:CI:OUME
+45:CI-SAK:CI:SAKASSOU
+46:CI-SP:CI:SAN PEDRO
+47:CI-SAS:CI:SASSANDRA
+48:CI-03:CI:SAVANES
+49:CI-SEG:CI:SEGUELA
+50:CI-SIN:CI:SINFRA
+51:CI-SOR:CI:SOUBRE
+52:CI-5:CI:SUD BANDAMA
+53:CI-3:CI:SUD COMOE
+54:CI-TAB:CI:TABOU
+55:CI-TAN:CI:TANDA
+56:CI-TEN:CI:TENGRELA
+57:CI-TIA:CI:TIASSALE
+58:CI-TOB:CI:TOUBA
+59:CI-TOM:CI:TOUMODI
+60:CI-04:CI:VALLEE DU BANDAMA
+61:CI-VAV:CI:VAVOUA
+62:CI-4:CI:WORODOUGOU
+63:CI-YAM:CI:YAMOUSSOUKRO
+64:CI-08:CI:ZANZAN
+65:CI-ZUE:CI:ZUENOULA
diff --git a/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN2_LEX.txt
new file mode 100644
index 0000000..3a3ecb7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CIV/CIV_ADMIN2_LEX.txt
@@ -0,0 +1,185 @@
+1:CI:CIV:IVORY COAST:Touba:Booko
+2:CI:CIV:IVORY COAST:Touba:Borotou
+3:CI:CIV:IVORY COAST:Touba:Guinteguela
+4:CI:CIV:IVORY COAST:Touba:Koonan
+5:CI:CIV:IVORY COAST:Touba:Koro
+6:CI:CIV:IVORY COAST:Touba:Ouaninou
+7:CI:CIV:IVORY COAST:Touba:Touba
+1:CI:CIV:IVORY COAST:Seguela:Djibrosso
+2:CI:CIV:IVORY COAST:Seguela:Dualla
+3:CI:CIV:IVORY COAST:Seguela:Kani
+4:CI:CIV:IVORY COAST:Seguela:Massala
+5:CI:CIV:IVORY COAST:Seguela:Morondo
+6:CI:CIV:IVORY COAST:Seguela:Seguela
+7:CI:CIV:IVORY COAST:Seguela:Sifie
+8:CI:CIV:IVORY COAST:Seguela:Worofla
+1:CI:CIV:IVORY COAST:Korhogo:Dikodougou
+2:CI:CIV:IVORY COAST:Korhogo:Guiembe
+3:CI:CIV:IVORY COAST:Korhogo:Karakoro
+4:CI:CIV:IVORY COAST:Korhogo:Komborodougou
+5:CI:CIV:IVORY COAST:Korhogo:Korhogo
+6:CI:CIV:IVORY COAST:Korhogo:M'bengue
+7:CI:CIV:IVORY COAST:Korhogo:Napieoledougou
+8:CI:CIV:IVORY COAST:Korhogo:Niofoin
+9:CI:CIV:IVORY COAST:Korhogo:Sinematiali
+10:CI:CIV:IVORY COAST:Korhogo:Sirasso
+11:CI:CIV:IVORY COAST:Korhogo:Tioroniaradougou
+1:CI:CIV:IVORY COAST:Katiola:Fronan
+2:CI:CIV:IVORY COAST:Katiola:Katiola
+3:CI:CIV:IVORY COAST:Katiola:Niakarmadougou
+4:CI:CIV:IVORY COAST:Katiola:Tafiere
+5:CI:CIV:IVORY COAST:Katiola:Tortiya
+1:CI:CIV:IVORY COAST:Tiassale:Taabo
+2:CI:CIV:IVORY COAST:Tiassale:Tiassale
+1:CI:CIV:IVORY COAST:Bouna:Bouna
+2:CI:CIV:IVORY COAST:Bouna:Dropo
+3:CI:CIV:IVORY COAST:Bouna:Nassian
+4:CI:CIV:IVORY COAST:Bouna:Tehini
+1:CI:CIV:IVORY COAST:San-Pedro:Grand-Bereby
+2:CI:CIV:IVORY COAST:San-Pedro:San-Pedro
+1:CI:CIV:IVORY COAST:Boundiali:Boundiali
+2:CI:CIV:IVORY COAST:Boundiali:Gbon
+3:CI:CIV:IVORY COAST:Boundiali:Kassere
+4:CI:CIV:IVORY COAST:Boundiali:Kolia
+5:CI:CIV:IVORY COAST:Boundiali:Kouto
+1:CI:CIV:IVORY COAST:Ferkessedougou:Diawala
+2:CI:CIV:IVORY COAST:Ferkessedougou:Ferkessedougou
+3:CI:CIV:IVORY COAST:Ferkessedougou:Kong
+4:CI:CIV:IVORY COAST:Ferkessedougou:Koumbala
+5:CI:CIV:IVORY COAST:Ferkessedougou:Nielle
+6:CI:CIV:IVORY COAST:Ferkessedougou:Ouangolodougou
+1:CI:CIV:IVORY COAST:Sassandra:Gueyo
+2:CI:CIV:IVORY COAST:Sassandra:Sassandra
+1:CI:CIV:IVORY COAST:Gagnoa:Gagnoa
+2:CI:CIV:IVORY COAST:Gagnoa:Guiberoua
+3:CI:CIV:IVORY COAST:Gagnoa:Ouragahio
+1:CI:CIV:IVORY COAST:Bouafle:Bonon
+2:CI:CIV:IVORY COAST:Bouafle:Bouafle
+1:CI:CIV:IVORY COAST:Daloa:Bediala
+2:CI:CIV:IVORY COAST:Daloa:Daloa
+3:CI:CIV:IVORY COAST:Daloa:Gboguhe
+4:CI:CIV:IVORY COAST:Daloa:Zoukougbeu
+1:CI:CIV:IVORY COAST:Tanda:Assuefry
+2:CI:CIV:IVORY COAST:Tanda:Kouassi-Datekro
+3:CI:CIV:IVORY COAST:Tanda:Koun-Fao
+4:CI:CIV:IVORY COAST:Tanda:Tanda
+5:CI:CIV:IVORY COAST:Tanda:Transua
+1:CI:CIV:IVORY COAST:Vavoua:Vavoua
+1:CI:CIV:IVORY COAST:Agboville:Agboville
+2:CI:CIV:IVORY COAST:Agboville:Azaguie
+3:CI:CIV:IVORY COAST:Agboville:Rubino
+1:CI:CIV:IVORY COAST:Zuenoula:Gohitafla
+2:CI:CIV:IVORY COAST:Zuenoula:Zuenoula
+1:CI:CIV:IVORY COAST:Guiglo:Blolequin
+2:CI:CIV:IVORY COAST:Guiglo:Guiglo
+3:CI:CIV:IVORY COAST:Guiglo:Tahi
+4:CI:CIV:IVORY COAST:Guiglo:Toulepleu
+1:CI:CIV:IVORY COAST:Adzope:Adzope
+2:CI:CIV:IVORY COAST:Adzope:Affery
+3:CI:CIV:IVORY COAST:Adzope:Agou
+4:CI:CIV:IVORY COAST:Adzope:Akoupe
+5:CI:CIV:IVORY COAST:Adzope:Yakasse-Attobrou
+1:CI:CIV:IVORY COAST:Dimbokro:Bocanda
+2:CI:CIV:IVORY COAST:Dimbokro:Dimbokro
+3:CI:CIV:IVORY COAST:Dimbokro:Kouassikro
+1:CI:CIV:IVORY COAST:Oume:Diegonefla
+2:CI:CIV:IVORY COAST:Oume:Oume
+1:CI:CIV:IVORY COAST:Abidjan:Abidjan-Ville
+2:CI:CIV:IVORY COAST:Abidjan:Alepe
+3:CI:CIV:IVORY COAST:Abidjan:Anyama
+4:CI:CIV:IVORY COAST:Abidjan:Bingerville
+5:CI:CIV:IVORY COAST:Abidjan:Bonoua
+6:CI:CIV:IVORY COAST:Abidjan:Dabou
+7:CI:CIV:IVORY COAST:Abidjan:Grand-Bassam
+8:CI:CIV:IVORY COAST:Abidjan:Jacqueville
+9:CI:CIV:IVORY COAST:Abidjan:Sikensi
+10:CI:CIV:IVORY COAST:Abidjan:Songon
+1:CI:CIV:IVORY COAST:Beoumi:Beoumi
+2:CI:CIV:IVORY COAST:Beoumi:Bodokro
+1:CI:CIV:IVORY COAST:Biankouma:Biankouma
+2:CI:CIV:IVORY COAST:Biankouma:Gbonne
+3:CI:CIV:IVORY COAST:Biankouma:Sipilou
+1:CI:CIV:IVORY COAST:Issia:Issia
+2:CI:CIV:IVORY COAST:Issia:Saioua
+1:CI:CIV:IVORY COAST:Bongouanou:Arrah
+2:CI:CIV:IVORY COAST:Bongouanou:Bongouanou
+3:CI:CIV:IVORY COAST:Bongouanou:M'batto
+4:CI:CIV:IVORY COAST:Bongouanou:Tiemelekro
+1:CI:CIV:IVORY COAST:Man:Facobly
+2:CI:CIV:IVORY COAST:Man:Kouibly
+3:CI:CIV:IVORY COAST:Man:Logouale
+4:CI:CIV:IVORY COAST:Man:Man
+5:CI:CIV:IVORY COAST:Man:Sangouine
+1:CI:CIV:IVORY COAST:Toumodi:Kokoumbo
+2:CI:CIV:IVORY COAST:Toumodi:Toumodi
+1:CI:CIV:IVORY COAST:Grand-Lahou:Grand-Lahou
+1:CI:CIV:IVORY COAST:Yamoussoukro:Didievi
+2:CI:CIV:IVORY COAST:Yamoussoukro:Tie-N'diekro
+3:CI:CIV:IVORY COAST:Yamoussoukro:Tiebissou
+4:CI:CIV:IVORY COAST:Yamoussoukro:Yamoussoukro
+1:CI:CIV:IVORY COAST:Abengourou:Abengourou
+2:CI:CIV:IVORY COAST:Abengourou:Bettie
+3:CI:CIV:IVORY COAST:Abengourou:Niable
+1:CI:CIV:IVORY COAST:Danane:Bin-Houye
+2:CI:CIV:IVORY COAST:Danane:Danane
+3:CI:CIV:IVORY COAST:Danane:Zouan-Hounien
+1:CI:CIV:IVORY COAST:Bouake:Botro
+2:CI:CIV:IVORY COAST:Bouake:Bouake
+3:CI:CIV:IVORY COAST:Bouake:Brobo
+4:CI:CIV:IVORY COAST:Bouake:Diabo
+5:CI:CIV:IVORY COAST:Bouake:Djebonoua
+1:CI:CIV:IVORY COAST:Divo:Divo
+2:CI:CIV:IVORY COAST:Divo:Fresco
+3:CI:CIV:IVORY COAST:Divo:Guitry
+4:CI:CIV:IVORY COAST:Divo:Hire
+1:CI:CIV:IVORY COAST:Aboisso:Aboisso
+2:CI:CIV:IVORY COAST:Aboisso:Adiake
+3:CI:CIV:IVORY COAST:Aboisso:Ayame
+4:CI:CIV:IVORY COAST:Aboisso:Mafere
+5:CI:CIV:IVORY COAST:Aboisso:Tiapoum
+1:CI:CIV:IVORY COAST:M'bahiakro:M'bahiakro
+2:CI:CIV:IVORY COAST:M'bahiakro:Prikro
+1:CI:CIV:IVORY COAST:Odienne:Bako
+2:CI:CIV:IVORY COAST:Odienne:Dioulatiedougou
+3:CI:CIV:IVORY COAST:Odienne:Goulia
+4:CI:CIV:IVORY COAST:Odienne:Kaniasso
+5:CI:CIV:IVORY COAST:Odienne:Madinani
+6:CI:CIV:IVORY COAST:Odienne:Minignan
+7:CI:CIV:IVORY COAST:Odienne:Odienne
+8:CI:CIV:IVORY COAST:Odienne:Samatiguila
+9:CI:CIV:IVORY COAST:Odienne:Seguelon
+10:CI:CIV:IVORY COAST:Odienne:Seydougou
+11:CI:CIV:IVORY COAST:Odienne:Tieme
+12:CI:CIV:IVORY COAST:Odienne:Tienko
+1:CI:CIV:IVORY COAST:Mankono:Dianra
+2:CI:CIV:IVORY COAST:Mankono:Kongasso
+3:CI:CIV:IVORY COAST:Mankono:Kounahiri
+4:CI:CIV:IVORY COAST:Mankono:Mankono
+5:CI:CIV:IVORY COAST:Mankono:Sarhala
+6:CI:CIV:IVORY COAST:Mankono:Tieningboue
+1:CI:CIV:IVORY COAST:Agnibilekro:Agnibilekro
+1:CI:CIV:IVORY COAST:Tengrela:Kanakono
+2:CI:CIV:IVORY COAST:Tengrela:Tengrela
+1:CI:CIV:IVORY COAST:Bondoukou:Bondoukou
+2:CI:CIV:IVORY COAST:Bondoukou:Sandegue
+1:CI:CIV:IVORY COAST:Dabakala:Bassawa
+2:CI:CIV:IVORY COAST:Dabakala:Bonieredougou
+3:CI:CIV:IVORY COAST:Dabakala:Dabakala
+4:CI:CIV:IVORY COAST:Dabakala:Foumbolo
+5:CI:CIV:IVORY COAST:Dabakala:Santama-Sokoro
+6:CI:CIV:IVORY COAST:Dabakala:Satama-Sokoura
+1:CI:CIV:IVORY COAST:Lakota:Lakota
+2:CI:CIV:IVORY COAST:Lakota:Zikisso
+1:CI:CIV:IVORY COAST:Soubre:Buyo
+2:CI:CIV:IVORY COAST:Soubre:Grand-Zattry
+3:CI:CIV:IVORY COAST:Soubre:Meagui (Gnamangui)
+4:CI:CIV:IVORY COAST:Soubre:Soubre
+1:CI:CIV:IVORY COAST:Daoukro:Daoukro
+2:CI:CIV:IVORY COAST:Daoukro:Ettrokro
+3:CI:CIV:IVORY COAST:Daoukro:Ouelle
+1:CI:CIV:IVORY COAST:Bangolo:Bangolo
+1:CI:CIV:IVORY COAST:Tabou:Grabo
+2:CI:CIV:IVORY COAST:Tabou:Tabou
+1:CI:CIV:IVORY COAST:Sinfra:Sinfra
+1:CI:CIV:IVORY COAST:Duekoue:Duekoue
+1:CI:CIV:IVORY COAST:Sakassou:Sakassou
diff --git a/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f1ddf9b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN1_LEX.txt
@@ -0,0 +1,11 @@
+1:CG-10:CG:BOUENZA
+2:CG-BZV:CG:BRAZZAVILLE
+3:CG-8:CG:CUVETTE
+4:CG-5:CG:CUVETTE OUEST
+5:CG-14:CG:KOUILOU
+6:CG-2:CG:LEKOUMOU
+7:CG-7:CG:LIKOUALA
+8:CG-9:CG:NIARI
+9:CG-4:CG:PLATEAUX [PLATEAUX1]
+10:CG-12:CG:POOL
+11:CG-3:CG:SANGHA
diff --git a/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..c4bdaad
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COG/COG_ADMIN2_LEX.txt
@@ -0,0 +1,46 @@
+1:CG:COG:CONGO:Plateaux:Abala
+2:CG:COG:CONGO:Plateaux:Djambala
+3:CG:COG:CONGO:Plateaux:Gamboma
+4:CG:COG:CONGO:Plateaux:Lekana
+1:CG:COG:CONGO:Pool:Boko
+2:CG:COG:CONGO:Pool:Kindamba
+3:CG:COG:CONGO:Pool:Kinkala
+4:CG:COG:CONGO:Pool:Mayama
+5:CG:COG:CONGO:Pool:Mindouli
+6:CG:COG:CONGO:Pool:Ngabe
+7:CG:COG:CONGO:Pool:Ngamaba (Brazzaville)
+1:CG:COG:CONGO:Bouenza:Boko-Songho
+2:CG:COG:CONGO:Bouenza:Loudima
+3:CG:COG:CONGO:Bouenza:Madingou
+4:CG:COG:CONGO:Bouenza:Mfouati
+5:CG:COG:CONGO:Bouenza:Mouyondzi
+6:CG:COG:CONGO:Bouenza:Nkayi District
+1:CG:COG:CONGO:Lekoumou:Bambama
+2:CG:COG:CONGO:Lekoumou:Komono
+3:CG:COG:CONGO:Lekoumou:Sibiti
+4:CG:COG:CONGO:Lekoumou:Zanaga
+1:CG:COG:CONGO:Likouala:Dongou
+2:CG:COG:CONGO:Likouala:Epena
+3:CG:COG:CONGO:Likouala:Impfondo
+1:CG:COG:CONGO:Sangha:Ouesso
+2:CG:COG:CONGO:Sangha:Sembe
+3:CG:COG:CONGO:Sangha:Souanke
+1:CG:COG:CONGO:Cuvette:Boundji
+2:CG:COG:CONGO:Cuvette:Ewo
+3:CG:COG:CONGO:Cuvette:Kelle
+4:CG:COG:CONGO:Cuvette:Loukela
+5:CG:COG:CONGO:Cuvette:Makoua
+6:CG:COG:CONGO:Cuvette:Mbomo
+7:CG:COG:CONGO:Cuvette:Mossaka
+8:CG:COG:CONGO:Cuvette:Okoyo
+9:CG:COG:CONGO:Cuvette:Owando
+1:CG:COG:CONGO:Niari:Divenie
+2:CG:COG:CONGO:Niari:Kibangou
+3:CG:COG:CONGO:Niari:Kimongo
+4:CG:COG:CONGO:Niari:Louvakou (Loubomo)
+5:CG:COG:CONGO:Niari:Mayoko
+6:CG:COG:CONGO:Niari:Mossendjo
+1:CG:COG:CONGO:Kouilou:Kakamoeka
+2:CG:COG:CONGO:Kouilou:Loandjili (Pointe Noire)
+3:CG:COG:CONGO:Kouilou:Madingo-Kayes
+4:CG:COG:CONGO:Kouilou:Mvouti
diff --git a/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6b3cbc5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN1_LEX.txt
@@ -0,0 +1,34 @@
+1:CO-AMA:CO:AMAZONAS
+2:CO-ANT:CO:ANTIOQUIA
+3:CO-ARA:CO:ARAUCA
+4:CO-ATL:CO:ATLANTICO
+5:CO-BOL:CO:BOLIVAR
+6:CO-BOY:CO:BOYACA
+7:CO-BUE:CO:BUENAVENTURA
+8:CO-CAL:CO:CALDAS
+9:CO-CAQ:CO:CAQUETA
+10:CO-CAS:CO:CASANARE
+11:CO-CAU:CO:CAUCA
+12:CO-CES:CO:CESAR
+13:CO-CHO:CO:CHOCO
+14:CO-COR:CO:CORDOBA
+15:CO-CUN:CO:CUNDINAMARCA
+16:CO-DC:CO:DISTRITO CAPITAL DE BOGOT
+17:CO-LAG:CO:GUAJIRA
+18:CO-GUA:CO:GUANIA
+19:CO-GUV:CO:GUAVIARE
+20:CO-HUI:CO:HUILA
+21:CO-MAG:CO:MAGDALENA
+22:CO-MET:CO:META
+23:CO-NAR:CO:NARINO
+24:CO-NSA:CO:NORTE DE SANTANDER
+25:CO-PUT:CO:PUTUMAYO
+26:CO-QUI:CO:QUINDIO
+27:CO-RIS:CO:RISARALDA
+28:CO-SAP:CO:SAN ANDRES Y PROVIDENCIA
+29:CO-SAN:CO:SANTANDER
+30:CO-SUC:CO:SUCRE
+31:CO-TOL:CO:TOLIMA
+32:CO-VAC:CO:VALLE DEL CAUCA
+33:CO-VAU:CO:VAUPES
+34:CO-VID:CO:VICHADA
diff --git a/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..078e69f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COL/COL_ADMIN2_LEX.txt
@@ -0,0 +1,1084 @@
+1:CO:COL:COLOMBIA:Vaupes:CARURU
+2:CO:COL:COLOMBIA:Vaupes:MITU
+3:CO:COL:COLOMBIA:Vaupes:PACOA
+4:CO:COL:COLOMBIA:Vaupes:PAPUNAHUA
+5:CO:COL:COLOMBIA:Vaupes:TARAIRA
+6:CO:COL:COLOMBIA:Vaupes:YAVARATE
+1:CO:COL:COLOMBIA:Tolima:ALPUJARRA
+2:CO:COL:COLOMBIA:Tolima:ALVARADO
+3:CO:COL:COLOMBIA:Tolima:AMBALEMA
+4:CO:COL:COLOMBIA:Tolima:ANZOATEGUI
+5:CO:COL:COLOMBIA:Tolima:ARMERO (GUAYABAL)
+6:CO:COL:COLOMBIA:Tolima:ATACO
+7:CO:COL:COLOMBIA:Tolima:CAJAMARCA
+8:CO:COL:COLOMBIA:Tolima:CARMEN DE APICALA
+9:CO:COL:COLOMBIA:Tolima:CASABIANCA
+10:CO:COL:COLOMBIA:Tolima:CHAPARRAL
+11:CO:COL:COLOMBIA:Tolima:COELLO
+12:CO:COL:COLOMBIA:Tolima:COYAIMA
+13:CO:COL:COLOMBIA:Tolima:CUNDAY
+14:CO:COL:COLOMBIA:Tolima:DOLORES
+15:CO:COL:COLOMBIA:Tolima:ESPINAL
+16:CO:COL:COLOMBIA:Tolima:FALAN
+17:CO:COL:COLOMBIA:Tolima:FLANDES
+18:CO:COL:COLOMBIA:Tolima:FRESNO
+19:CO:COL:COLOMBIA:Tolima:GUAMO
+20:CO:COL:COLOMBIA:Tolima:HERVEO
+21:CO:COL:COLOMBIA:Tolima:HONDA
+22:CO:COL:COLOMBIA:Tolima:IBAGUE
+23:CO:COL:COLOMBIA:Tolima:ICONONZO
+24:CO:COL:COLOMBIA:Tolima:LERIDA
+25:CO:COL:COLOMBIA:Tolima:LIBANO
+26:CO:COL:COLOMBIA:Tolima:MARIQUITA
+27:CO:COL:COLOMBIA:Tolima:MELGAR
+28:CO:COL:COLOMBIA:Tolima:MURILLO
+29:CO:COL:COLOMBIA:Tolima:NATAGAIMA
+30:CO:COL:COLOMBIA:Tolima:ORTEGA
+31:CO:COL:COLOMBIA:Tolima:PIEDRAS
+32:CO:COL:COLOMBIA:Tolima:PLANADAS
+33:CO:COL:COLOMBIA:Tolima:PRADO
+34:CO:COL:COLOMBIA:Tolima:PURIFICACION
+35:CO:COL:COLOMBIA:Tolima:RIOBLANCO
+36:CO:COL:COLOMBIA:Tolima:RONCESVALLES
+37:CO:COL:COLOMBIA:Tolima:ROVIRA
+38:CO:COL:COLOMBIA:Tolima:SALDA?A
+39:CO:COL:COLOMBIA:Tolima:SAN ANTONIO
+40:CO:COL:COLOMBIA:Tolima:SAN LUIS
+41:CO:COL:COLOMBIA:Tolima:SANTA ISABEL
+42:CO:COL:COLOMBIA:Tolima:SUAREZ
+43:CO:COL:COLOMBIA:Tolima:VALLE DE SAN JUAN
+44:CO:COL:COLOMBIA:Tolima:VENADILLO
+45:CO:COL:COLOMBIA:Tolima:VILLA HERMOSA
+46:CO:COL:COLOMBIA:Tolima:VILLARRICA
+1:CO:COL:COLOMBIA:Casanare:AGUAZUL
+2:CO:COL:COLOMBIA:Casanare:CHAMEZA
+3:CO:COL:COLOMBIA:Casanare:HATO COROZAL
+4:CO:COL:COLOMBIA:Casanare:LA SALINA
+5:CO:COL:COLOMBIA:Casanare:MANI
+6:CO:COL:COLOMBIA:Casanare:MONTERREY
+7:CO:COL:COLOMBIA:Casanare:NUNCHIA
+8:CO:COL:COLOMBIA:Casanare:OROCUE
+9:CO:COL:COLOMBIA:Casanare:PAZ DE ARIPORO
+10:CO:COL:COLOMBIA:Casanare:PORE
+11:CO:COL:COLOMBIA:Casanare:RECETOR
+12:CO:COL:COLOMBIA:Casanare:SABANALARGA
+13:CO:COL:COLOMBIA:Casanare:SACAMA
+14:CO:COL:COLOMBIA:Casanare:SAN LUIS DE PALENQUE
+15:CO:COL:COLOMBIA:Casanare:TAMARA
+16:CO:COL:COLOMBIA:Casanare:TAURAMENA
+17:CO:COL:COLOMBIA:Casanare:TRINIDAD
+18:CO:COL:COLOMBIA:Casanare:VILLANUEVA
+19:CO:COL:COLOMBIA:Casanare:YOPAL
+1:CO:COL:COLOMBIA:Cundinamarca:AGUA DE DIOS
+2:CO:COL:COLOMBIA:Cundinamarca:ALBAN
+3:CO:COL:COLOMBIA:Cundinamarca:ANAPOIMA
+4:CO:COL:COLOMBIA:Cundinamarca:ANOLAIMA
+5:CO:COL:COLOMBIA:Cundinamarca:APULO (RAFAEL REYES)
+6:CO:COL:COLOMBIA:Cundinamarca:ARBELAEZ
+7:CO:COL:COLOMBIA:Cundinamarca:BELTRAN
+8:CO:COL:COLOMBIA:Cundinamarca:BITUIMA
+9:CO:COL:COLOMBIA:Cundinamarca:BOJACA
+10:CO:COL:COLOMBIA:Cundinamarca:CABRERA
+11:CO:COL:COLOMBIA:Cundinamarca:CACHIPAY
+12:CO:COL:COLOMBIA:Cundinamarca:CAJICA
+13:CO:COL:COLOMBIA:Cundinamarca:CAPARRAPI
+14:CO:COL:COLOMBIA:Cundinamarca:CAQUEZA
+15:CO:COL:COLOMBIA:Cundinamarca:CARMEN DE CARUPA
+16:CO:COL:COLOMBIA:Cundinamarca:CHAGUANI
+17:CO:COL:COLOMBIA:Cundinamarca:CHIA
+18:CO:COL:COLOMBIA:Cundinamarca:CHIPAQUE
+19:CO:COL:COLOMBIA:Cundinamarca:CHOACHI
+20:CO:COL:COLOMBIA:Cundinamarca:CHOCONTA
+21:CO:COL:COLOMBIA:Cundinamarca:COGUA
+22:CO:COL:COLOMBIA:Cundinamarca:COTA
+23:CO:COL:COLOMBIA:Cundinamarca:CUCUNUBA
+24:CO:COL:COLOMBIA:Cundinamarca:EL COLEGIO
+25:CO:COL:COLOMBIA:Cundinamarca:EL PE?ON
+26:CO:COL:COLOMBIA:Cundinamarca:FACATATIVA
+27:CO:COL:COLOMBIA:Cundinamarca:FOMEQUE
+28:CO:COL:COLOMBIA:Cundinamarca:FOSCA
+29:CO:COL:COLOMBIA:Cundinamarca:FUNZA
+30:CO:COL:COLOMBIA:Cundinamarca:FUQUENE
+31:CO:COL:COLOMBIA:Cundinamarca:FUSAGASUGA
+32:CO:COL:COLOMBIA:Cundinamarca:GACHALA
+33:CO:COL:COLOMBIA:Cundinamarca:GACHANCIPA
+34:CO:COL:COLOMBIA:Cundinamarca:GACHETA
+35:CO:COL:COLOMBIA:Cundinamarca:GAMA
+36:CO:COL:COLOMBIA:Cundinamarca:GIRARDOT
+37:CO:COL:COLOMBIA:Cundinamarca:GUACHETA
+38:CO:COL:COLOMBIA:Cundinamarca:GUADUAS
+39:CO:COL:COLOMBIA:Cundinamarca:GUASCA
+40:CO:COL:COLOMBIA:Cundinamarca:GUATAQUI
+41:CO:COL:COLOMBIA:Cundinamarca:GUATAVITA
+42:CO:COL:COLOMBIA:Cundinamarca:GUAYABAL DE SIQUIMA
+43:CO:COL:COLOMBIA:Cundinamarca:GUAYABETAL
+44:CO:COL:COLOMBIA:Cundinamarca:GUTIERREZ
+45:CO:COL:COLOMBIA:Cundinamarca:JERUSALEN
+46:CO:COL:COLOMBIA:Cundinamarca:JUNIN
+47:CO:COL:COLOMBIA:Cundinamarca:LA CALERA
+48:CO:COL:COLOMBIA:Cundinamarca:LA MESA
+49:CO:COL:COLOMBIA:Cundinamarca:LA PALMA
+50:CO:COL:COLOMBIA:Cundinamarca:LA PE?A
+51:CO:COL:COLOMBIA:Cundinamarca:LA VEGA
+52:CO:COL:COLOMBIA:Cundinamarca:LENGUAZAQUE
+53:CO:COL:COLOMBIA:Cundinamarca:MACHETA
+54:CO:COL:COLOMBIA:Cundinamarca:MADRID
+55:CO:COL:COLOMBIA:Cundinamarca:MANTA
+56:CO:COL:COLOMBIA:Cundinamarca:MEDINA
+57:CO:COL:COLOMBIA:Cundinamarca:MOSQUERA
+58:CO:COL:COLOMBIA:Cundinamarca:NARI?O
+59:CO:COL:COLOMBIA:Cundinamarca:NEMOCON
+60:CO:COL:COLOMBIA:Cundinamarca:NILO
+61:CO:COL:COLOMBIA:Cundinamarca:NIMAIMA
+62:CO:COL:COLOMBIA:Cundinamarca:NOCAIMA
+63:CO:COL:COLOMBIA:Cundinamarca:PACHO
+64:CO:COL:COLOMBIA:Cundinamarca:PAIME
+65:CO:COL:COLOMBIA:Cundinamarca:PANDI
+66:CO:COL:COLOMBIA:Cundinamarca:PARATEBUENO
+67:CO:COL:COLOMBIA:Cundinamarca:PASCA
+68:CO:COL:COLOMBIA:Cundinamarca:PUERTO SALGAR
+69:CO:COL:COLOMBIA:Cundinamarca:PULI
+70:CO:COL:COLOMBIA:Cundinamarca:QUEBRADANEGRA
+71:CO:COL:COLOMBIA:Cundinamarca:QUETAME
+72:CO:COL:COLOMBIA:Cundinamarca:QUIPILE
+73:CO:COL:COLOMBIA:Cundinamarca:RICAURTE
+74:CO:COL:COLOMBIA:Cundinamarca:SAN ANTONIO DEL TEQUENDAM
+75:CO:COL:COLOMBIA:Cundinamarca:SAN BERNARDO
+76:CO:COL:COLOMBIA:Cundinamarca:SAN CAYETANO
+77:CO:COL:COLOMBIA:Cundinamarca:SAN FRANCISCO
+78:CO:COL:COLOMBIA:Cundinamarca:SAN JUAN DE RIO SECO
+79:CO:COL:COLOMBIA:Cundinamarca:SANTAFE DE BOGOTA D.C.
+80:CO:COL:COLOMBIA:Cundinamarca:SASAIMA
+81:CO:COL:COLOMBIA:Cundinamarca:SESQUILE
+82:CO:COL:COLOMBIA:Cundinamarca:SIBATE
+83:CO:COL:COLOMBIA:Cundinamarca:SILVANIA
+84:CO:COL:COLOMBIA:Cundinamarca:SIMIJACA
+85:CO:COL:COLOMBIA:Cundinamarca:SOACHA
+86:CO:COL:COLOMBIA:Cundinamarca:SOPO
+87:CO:COL:COLOMBIA:Cundinamarca:SUBACHOQUE
+88:CO:COL:COLOMBIA:Cundinamarca:SUESCA
+89:CO:COL:COLOMBIA:Cundinamarca:SUPATA
+90:CO:COL:COLOMBIA:Cundinamarca:SUSA
+91:CO:COL:COLOMBIA:Cundinamarca:SUTATAUSA
+92:CO:COL:COLOMBIA:Cundinamarca:TABIO
+93:CO:COL:COLOMBIA:Cundinamarca:TAUSA
+94:CO:COL:COLOMBIA:Cundinamarca:TENA
+95:CO:COL:COLOMBIA:Cundinamarca:TENJO
+96:CO:COL:COLOMBIA:Cundinamarca:TIBACUY
+97:CO:COL:COLOMBIA:Cundinamarca:TIBIRITA
+98:CO:COL:COLOMBIA:Cundinamarca:TOCAIMA
+99:CO:COL:COLOMBIA:Cundinamarca:TOCANCIPA
+100:CO:COL:COLOMBIA:Cundinamarca:TOPAIPI
+101:CO:COL:COLOMBIA:Cundinamarca:UBALA
+102:CO:COL:COLOMBIA:Cundinamarca:UBAQUE
+103:CO:COL:COLOMBIA:Cundinamarca:UBATE
+104:CO:COL:COLOMBIA:Cundinamarca:UNE
+105:CO:COL:COLOMBIA:Cundinamarca:UTICA
+106:CO:COL:COLOMBIA:Cundinamarca:VENECIA (OSPINA PEREZ)
+107:CO:COL:COLOMBIA:Cundinamarca:VERGARA
+108:CO:COL:COLOMBIA:Cundinamarca:VIANI
+109:CO:COL:COLOMBIA:Cundinamarca:VILLAGOMEZ
+110:CO:COL:COLOMBIA:Cundinamarca:VILLAPINZON
+111:CO:COL:COLOMBIA:Cundinamarca:VILLETA
+112:CO:COL:COLOMBIA:Cundinamarca:VIOTA
+113:CO:COL:COLOMBIA:Cundinamarca:YACOPI
+114:CO:COL:COLOMBIA:Cundinamarca:ZIPACON
+115:CO:COL:COLOMBIA:Cundinamarca:ZIPAQUIRA
+1:CO:COL:COLOMBIA:Caqueta:ALBANIA
+2:CO:COL:COLOMBIA:Caqueta:BELEN DE LOS ANDAQUIES
+3:CO:COL:COLOMBIA:Caqueta:CARTAGENA DEL CHAIRA
+4:CO:COL:COLOMBIA:Caqueta:CURILLO
+5:CO:COL:COLOMBIA:Caqueta:EL DONCELLO
+6:CO:COL:COLOMBIA:Caqueta:EL PAUJIL
+7:CO:COL:COLOMBIA:Caqueta:FLORENCIA
+8:CO:COL:COLOMBIA:Caqueta:LA MONTANITA
+9:CO:COL:COLOMBIA:Caqueta:MILAN
+10:CO:COL:COLOMBIA:Caqueta:MORELIA
+11:CO:COL:COLOMBIA:Caqueta:PUERTO RICO
+12:CO:COL:COLOMBIA:Caqueta:SAN JOSE DE FRAGUA
+13:CO:COL:COLOMBIA:Caqueta:SAN VICENTE DEL CAGUAN
+14:CO:COL:COLOMBIA:Caqueta:SOLANO
+15:CO:COL:COLOMBIA:Caqueta:VALPARAISO
+1:CO:COL:COLOMBIA:Choco:ACANDI
+2:CO:COL:COLOMBIA:Choco:ALTO BAUDO (PIE DE PATO)
+3:CO:COL:COLOMBIA:Choco:BAGADO
+4:CO:COL:COLOMBIA:Choco:BAHIA SOLANO (CIUDAD MUTI
+5:CO:COL:COLOMBIA:Choco:BAHIA SOLANO (Is.)
+6:CO:COL:COLOMBIA:Choco:BAJO BAUDO (Is.)
+7:CO:COL:COLOMBIA:Choco:BAJO BAUDO (PIZARRO)
+8:CO:COL:COLOMBIA:Choco:BOJAYA (BELLA VISTA)
+9:CO:COL:COLOMBIA:Choco:CANTON DE SAN PABLO
+10:CO:COL:COLOMBIA:Choco:CONDOTO
+11:CO:COL:COLOMBIA:Choco:EL CARMEN
+12:CO:COL:COLOMBIA:Choco:ISTMINA
+13:CO:COL:COLOMBIA:Choco:JURADO
+14:CO:COL:COLOMBIA:Choco:JURADO (Is.)
+15:CO:COL:COLOMBIA:Choco:LITORAL DEL SAN JUAN
+16:CO:COL:COLOMBIA:Choco:LITORAL DEL SAN JUAN (Is.
+17:CO:COL:COLOMBIA:Choco:LLORO
+18:CO:COL:COLOMBIA:Choco:NOVITA
+19:CO:COL:COLOMBIA:Choco:NUQUI
+20:CO:COL:COLOMBIA:Choco:QUIBDO
+21:CO:COL:COLOMBIA:Choco:RIOSUCIO
+22:CO:COL:COLOMBIA:Choco:SAN JOSE DEL PALMAR
+23:CO:COL:COLOMBIA:Choco:SIPI
+24:CO:COL:COLOMBIA:Choco:TADO
+25:CO:COL:COLOMBIA:Choco:UNGUIA
+1:CO:COL:COLOMBIA:Arauca:ARAUCA
+2:CO:COL:COLOMBIA:Arauca:ARAUQUITA
+3:CO:COL:COLOMBIA:Arauca:CRAVO NORTE
+4:CO:COL:COLOMBIA:Arauca:FORTUL
+5:CO:COL:COLOMBIA:Arauca:PUERTO RONDON
+6:CO:COL:COLOMBIA:Arauca:SARAVENA
+7:CO:COL:COLOMBIA:Arauca:TAME
+1:CO:COL:COLOMBIA:Guajira:BARRANCAS
+2:CO:COL:COLOMBIA:Guajira:EL MOLINO
+3:CO:COL:COLOMBIA:Guajira:FONSECA
+4:CO:COL:COLOMBIA:Guajira:MAICAO
+5:CO:COL:COLOMBIA:Guajira:MANAURE
+6:CO:COL:COLOMBIA:Guajira:RIOHACHA
+7:CO:COL:COLOMBIA:Guajira:SAN JUAN DEL CESAR
+8:CO:COL:COLOMBIA:Guajira:URIBIA
+9:CO:COL:COLOMBIA:Guajira:URUMITA
+10:CO:COL:COLOMBIA:Guajira:VILLANUEVA
+1:CO:COL:COLOMBIA:Cauca:ALMAGUER
+2:CO:COL:COLOMBIA:Cauca:ARGELIA
+3:CO:COL:COLOMBIA:Cauca:BALBOA
+4:CO:COL:COLOMBIA:Cauca:BOLIVAR
+5:CO:COL:COLOMBIA:Cauca:BUENOS AIRES
+6:CO:COL:COLOMBIA:Cauca:CAJIBIO
+7:CO:COL:COLOMBIA:Cauca:CALDONO
+8:CO:COL:COLOMBIA:Cauca:CALOTO
+9:CO:COL:COLOMBIA:Cauca:CORINTO
+10:CO:COL:COLOMBIA:Cauca:EL TAMBO
+11:CO:COL:COLOMBIA:Cauca:FLORENCIA
+12:CO:COL:COLOMBIA:Cauca:GUAPI
+13:CO:COL:COLOMBIA:Cauca:GUAPI (Is.)
+14:CO:COL:COLOMBIA:Cauca:INZA
+15:CO:COL:COLOMBIA:Cauca:Isla
+16:CO:COL:COLOMBIA:Cauca:JAMBALO
+17:CO:COL:COLOMBIA:Cauca:LA SIERRA
+18:CO:COL:COLOMBIA:Cauca:LA VEGA
+19:CO:COL:COLOMBIA:Cauca:LOPEZ DE MICAY
+20:CO:COL:COLOMBIA:Cauca:MERCADERES
+21:CO:COL:COLOMBIA:Cauca:MIRANDA
+22:CO:COL:COLOMBIA:Cauca:MORALES
+23:CO:COL:COLOMBIA:Cauca:PADILLA
+24:CO:COL:COLOMBIA:Cauca:PAEZ
+25:CO:COL:COLOMBIA:Cauca:PATIA (EL BORDO)
+26:CO:COL:COLOMBIA:Cauca:PIENDAMO
+27:CO:COL:COLOMBIA:Cauca:POPAYAN
+28:CO:COL:COLOMBIA:Cauca:PUERTO TEJADA
+29:CO:COL:COLOMBIA:Cauca:PURACE
+30:CO:COL:COLOMBIA:Cauca:ROSAS
+31:CO:COL:COLOMBIA:Cauca:SAN SEBASTIAN
+32:CO:COL:COLOMBIA:Cauca:SANTA ROSA
+33:CO:COL:COLOMBIA:Cauca:SANTANDER DE QUILICHAO
+34:CO:COL:COLOMBIA:Cauca:SILVIA
+35:CO:COL:COLOMBIA:Cauca:SOTARA
+36:CO:COL:COLOMBIA:Cauca:SUAREZ
+37:CO:COL:COLOMBIA:Cauca:TIMBIO
+38:CO:COL:COLOMBIA:Cauca:TIMBIQUI
+39:CO:COL:COLOMBIA:Cauca:TIMBIQUI (Is.)
+40:CO:COL:COLOMBIA:Cauca:TORIBIO
+41:CO:COL:COLOMBIA:Cauca:TOTORO
+1:CO:COL:COLOMBIA:Narino:ALBAN
+2:CO:COL:COLOMBIA:Narino:ALDANA
+3:CO:COL:COLOMBIA:Narino:ANCUYA
+4:CO:COL:COLOMBIA:Narino:ARBOLEDA
+5:CO:COL:COLOMBIA:Narino:BARBACOAS
+6:CO:COL:COLOMBIA:Narino:BELEN
+7:CO:COL:COLOMBIA:Narino:BUESACO
+8:CO:COL:COLOMBIA:Narino:CHACHAGUI
+9:CO:COL:COLOMBIA:Narino:COLON
+10:CO:COL:COLOMBIA:Narino:CONSACA
+11:CO:COL:COLOMBIA:Narino:CONTADERO
+12:CO:COL:COLOMBIA:Narino:CORDOBA
+13:CO:COL:COLOMBIA:Narino:CUASPUD
+14:CO:COL:COLOMBIA:Narino:CUMBAL
+15:CO:COL:COLOMBIA:Narino:CUMBITARA
+16:CO:COL:COLOMBIA:Narino:EL CHARCO
+17:CO:COL:COLOMBIA:Narino:EL CHARCO (Is.)
+18:CO:COL:COLOMBIA:Narino:EL ROSARIO
+19:CO:COL:COLOMBIA:Narino:EL TABLON
+20:CO:COL:COLOMBIA:Narino:EL TAMBO
+21:CO:COL:COLOMBIA:Narino:FRANCISCO PIZARRO
+22:CO:COL:COLOMBIA:Narino:FUNES
+23:CO:COL:COLOMBIA:Narino:GUACHUCAL
+24:CO:COL:COLOMBIA:Narino:GUAITARILLA
+25:CO:COL:COLOMBIA:Narino:GUALMATAN
+26:CO:COL:COLOMBIA:Narino:ILES
+27:CO:COL:COLOMBIA:Narino:IMUES
+28:CO:COL:COLOMBIA:Narino:IPIALES
+29:CO:COL:COLOMBIA:Narino:LA CRUZ
+30:CO:COL:COLOMBIA:Narino:LA FLORIDA
+31:CO:COL:COLOMBIA:Narino:LA LLANADA
+32:CO:COL:COLOMBIA:Narino:LA TOLA
+33:CO:COL:COLOMBIA:Narino:LA UNION
+34:CO:COL:COLOMBIA:Narino:LEIVA
+35:CO:COL:COLOMBIA:Narino:LINARES
+36:CO:COL:COLOMBIA:Narino:LOS ANDES
+37:CO:COL:COLOMBIA:Narino:MAGUI
+38:CO:COL:COLOMBIA:Narino:MALLAMA
+39:CO:COL:COLOMBIA:Narino:MOSQUERA
+40:CO:COL:COLOMBIA:Narino:MOSQUERA (Is.)
+41:CO:COL:COLOMBIA:Narino:OLAYA HERRERA
+42:CO:COL:COLOMBIA:Narino:OSPINA
+43:CO:COL:COLOMBIA:Narino:PASTO
+44:CO:COL:COLOMBIA:Narino:POLICARPA
+45:CO:COL:COLOMBIA:Narino:POTOSI
+46:CO:COL:COLOMBIA:Narino:PROVIDENCIA
+47:CO:COL:COLOMBIA:Narino:PUERRES
+48:CO:COL:COLOMBIA:Narino:PUPIALES
+49:CO:COL:COLOMBIA:Narino:RICAURTE
+50:CO:COL:COLOMBIA:Narino:ROBERTO PAYAN
+51:CO:COL:COLOMBIA:Narino:SAMANIEGO
+52:CO:COL:COLOMBIA:Narino:SAN BERNARDO
+53:CO:COL:COLOMBIA:Narino:SAN LORENZO
+54:CO:COL:COLOMBIA:Narino:SAN PABLO
+55:CO:COL:COLOMBIA:Narino:SAN PEDRO DE CARTAGO
+56:CO:COL:COLOMBIA:Narino:SANDONA
+57:CO:COL:COLOMBIA:Narino:SANTA BARBARA
+58:CO:COL:COLOMBIA:Narino:SANTA CRUZ
+59:CO:COL:COLOMBIA:Narino:SAPUYES
+60:CO:COL:COLOMBIA:Narino:TAMINANGO
+61:CO:COL:COLOMBIA:Narino:TANGUA
+62:CO:COL:COLOMBIA:Narino:TUMACO
+63:CO:COL:COLOMBIA:Narino:TUMACO (Is.)
+64:CO:COL:COLOMBIA:Narino:TUQUERRES
+65:CO:COL:COLOMBIA:Narino:YACUANQUER
+1:CO:COL:COLOMBIA:Buenaventura:Isla
+1:CO:COL:COLOMBIA:Guania:BARRANCO MINAS
+2:CO:COL:COLOMBIA:Guania:CACAHUAL
+3:CO:COL:COLOMBIA:Guania:INIRIDA
+4:CO:COL:COLOMBIA:Guania:LA GUADALUPE
+5:CO:COL:COLOMBIA:Guania:PANA PANA
+6:CO:COL:COLOMBIA:Guania:PUERTO COLOMBIA
+7:CO:COL:COLOMBIA:Guania:SAN FELIPE
+1:CO:COL:COLOMBIA:San Andres y Providencia:PROVIDENCIA
+2:CO:COL:COLOMBIA:San Andres y Providencia:SAN ANDRES
+3:CO:COL:COLOMBIA:San Andres y Providencia:SANTA CATALINA
+1:CO:COL:COLOMBIA:Huila:ACEVEDO
+2:CO:COL:COLOMBIA:Huila:AGRADO
+3:CO:COL:COLOMBIA:Huila:AIPE
+4:CO:COL:COLOMBIA:Huila:ALGECIRAS
+5:CO:COL:COLOMBIA:Huila:ALTAMIRA
+6:CO:COL:COLOMBIA:Huila:BARAYA
+7:CO:COL:COLOMBIA:Huila:CAMPO ALEGRE
+8:CO:COL:COLOMBIA:Huila:COLOMBIA
+9:CO:COL:COLOMBIA:Huila:ELIAS
+10:CO:COL:COLOMBIA:Huila:GARZON
+11:CO:COL:COLOMBIA:Huila:GIGANTE
+12:CO:COL:COLOMBIA:Huila:GUADALUPE
+13:CO:COL:COLOMBIA:Huila:HOBO
+14:CO:COL:COLOMBIA:Huila:IQUIRA
+15:CO:COL:COLOMBIA:Huila:ISNOS
+16:CO:COL:COLOMBIA:Huila:LA ARGENTINA
+17:CO:COL:COLOMBIA:Huila:LA PLATA
+18:CO:COL:COLOMBIA:Huila:NATAGA
+19:CO:COL:COLOMBIA:Huila:NEIVA
+20:CO:COL:COLOMBIA:Huila:OPORAPA
+21:CO:COL:COLOMBIA:Huila:PAICOL
+22:CO:COL:COLOMBIA:Huila:PALERMO
+23:CO:COL:COLOMBIA:Huila:PALESTINA
+24:CO:COL:COLOMBIA:Huila:PITAL
+25:CO:COL:COLOMBIA:Huila:PITALITO
+26:CO:COL:COLOMBIA:Huila:RIVERA
+27:CO:COL:COLOMBIA:Huila:SALADO BLANCO
+28:CO:COL:COLOMBIA:Huila:SAN AGUSTIN
+29:CO:COL:COLOMBIA:Huila:SANTA MARIA
+30:CO:COL:COLOMBIA:Huila:SUAZA
+31:CO:COL:COLOMBIA:Huila:TARQUI
+32:CO:COL:COLOMBIA:Huila:TELLO
+33:CO:COL:COLOMBIA:Huila:TERUEL
+34:CO:COL:COLOMBIA:Huila:TESALIA
+35:CO:COL:COLOMBIA:Huila:TIMANA
+36:CO:COL:COLOMBIA:Huila:VILLA VIEJA
+37:CO:COL:COLOMBIA:Huila:YAGUARA
+1:CO:COL:COLOMBIA:Norte de Santander:ABREGO
+2:CO:COL:COLOMBIA:Norte de Santander:ARBOLEDAS
+3:CO:COL:COLOMBIA:Norte de Santander:BOCHALEMA
+4:CO:COL:COLOMBIA:Norte de Santander:BUCARASICA
+5:CO:COL:COLOMBIA:Norte de Santander:CACHIRA
+6:CO:COL:COLOMBIA:Norte de Santander:CACOTA
+7:CO:COL:COLOMBIA:Norte de Santander:CHINACOTA
+8:CO:COL:COLOMBIA:Norte de Santander:CHITAGA
+9:CO:COL:COLOMBIA:Norte de Santander:CONVENCION
+10:CO:COL:COLOMBIA:Norte de Santander:CUCUTA
+11:CO:COL:COLOMBIA:Norte de Santander:CUCUTILLA
+12:CO:COL:COLOMBIA:Norte de Santander:DURANIA
+13:CO:COL:COLOMBIA:Norte de Santander:EL CARMEN
+14:CO:COL:COLOMBIA:Norte de Santander:EL TARRA
+15:CO:COL:COLOMBIA:Norte de Santander:EL ZULIA
+16:CO:COL:COLOMBIA:Norte de Santander:GRAMALOTE
+17:CO:COL:COLOMBIA:Norte de Santander:HACARI
+18:CO:COL:COLOMBIA:Norte de Santander:HERRAN
+19:CO:COL:COLOMBIA:Norte de Santander:LA ESPERANZA
+20:CO:COL:COLOMBIA:Norte de Santander:LA PLAYA
+21:CO:COL:COLOMBIA:Norte de Santander:LABATECA
+22:CO:COL:COLOMBIA:Norte de Santander:LOS PATIOS
+23:CO:COL:COLOMBIA:Norte de Santander:LOURDES
+24:CO:COL:COLOMBIA:Norte de Santander:MUTISCUA
+25:CO:COL:COLOMBIA:Norte de Santander:OCA?A
+26:CO:COL:COLOMBIA:Norte de Santander:PAMPLONA
+27:CO:COL:COLOMBIA:Norte de Santander:PAMPLONITA
+28:CO:COL:COLOMBIA:Norte de Santander:PUERTO SANTANDER
+29:CO:COL:COLOMBIA:Norte de Santander:RAGONVALIA
+30:CO:COL:COLOMBIA:Norte de Santander:SALAZAR
+31:CO:COL:COLOMBIA:Norte de Santander:SAN CALIXTO
+32:CO:COL:COLOMBIA:Norte de Santander:SAN CAYETANO
+33:CO:COL:COLOMBIA:Norte de Santander:SANTIAGO
+34:CO:COL:COLOMBIA:Norte de Santander:SARDINATA
+35:CO:COL:COLOMBIA:Norte de Santander:SILOS
+36:CO:COL:COLOMBIA:Norte de Santander:TEORAMA
+37:CO:COL:COLOMBIA:Norte de Santander:TIBU
+38:CO:COL:COLOMBIA:Norte de Santander:TOLEDO
+39:CO:COL:COLOMBIA:Norte de Santander:VILLA CARO
+40:CO:COL:COLOMBIA:Norte de Santander:VILLA DEL ROSARIO
+1:CO:COL:COLOMBIA:Putumayo:COLON
+2:CO:COL:COLOMBIA:Putumayo:MOCOA
+3:CO:COL:COLOMBIA:Putumayo:ORITO
+4:CO:COL:COLOMBIA:Putumayo:PUERTO ASIS
+5:CO:COL:COLOMBIA:Putumayo:PUERTO CAICEDO
+6:CO:COL:COLOMBIA:Putumayo:PUERTO GUZMAN
+7:CO:COL:COLOMBIA:Putumayo:PUERTO LEGUIZAMO
+8:CO:COL:COLOMBIA:Putumayo:SAN FRANCISCO
+9:CO:COL:COLOMBIA:Putumayo:SANTIAGO
+10:CO:COL:COLOMBIA:Putumayo:SIBUNDOY
+11:CO:COL:COLOMBIA:Putumayo:VALLE DEL GUAMUEZ (LA HOR
+12:CO:COL:COLOMBIA:Putumayo:VILLAGARZON
+1:CO:COL:COLOMBIA:Cordoba:AYAPEL
+2:CO:COL:COLOMBIA:Cordoba:BUENAVISTA
+3:CO:COL:COLOMBIA:Cordoba:CANALETE
+4:CO:COL:COLOMBIA:Cordoba:CERETE
+5:CO:COL:COLOMBIA:Cordoba:CHIMA
+6:CO:COL:COLOMBIA:Cordoba:CHINU
+7:CO:COL:COLOMBIA:Cordoba:CIENAGA DE ORO
+8:CO:COL:COLOMBIA:Cordoba:LORICA
+9:CO:COL:COLOMBIA:Cordoba:LOS CORDOBAS
+10:CO:COL:COLOMBIA:Cordoba:MO?ITOS
+11:CO:COL:COLOMBIA:Cordoba:MOMIL
+12:CO:COL:COLOMBIA:Cordoba:MONITOS (Is.)
+13:CO:COL:COLOMBIA:Cordoba:MONTELIBANO
+14:CO:COL:COLOMBIA:Cordoba:MONTERIA
+15:CO:COL:COLOMBIA:Cordoba:PLANETA RICA
+16:CO:COL:COLOMBIA:Cordoba:PUEBLO NUEVO
+17:CO:COL:COLOMBIA:Cordoba:PUERTO ESCONDIDO
+18:CO:COL:COLOMBIA:Cordoba:PUERTO LIBERTADOR
+19:CO:COL:COLOMBIA:Cordoba:PURISIMA
+20:CO:COL:COLOMBIA:Cordoba:SAHAGUN
+21:CO:COL:COLOMBIA:Cordoba:SAN ANDRES DE SOTAVENTO
+22:CO:COL:COLOMBIA:Cordoba:SAN ANTERO
+23:CO:COL:COLOMBIA:Cordoba:SAN BERNARDO EL VIENTO
+24:CO:COL:COLOMBIA:Cordoba:SAN BERNARDO EL VIENTO (I
+25:CO:COL:COLOMBIA:Cordoba:SAN CARLOS
+26:CO:COL:COLOMBIA:Cordoba:SAN PELAYO
+27:CO:COL:COLOMBIA:Cordoba:TIERRALTA
+28:CO:COL:COLOMBIA:Cordoba:VALENCIA
+1:CO:COL:COLOMBIA:Quindio:ARMENIA
+2:CO:COL:COLOMBIA:Quindio:BUENAVISTA
+3:CO:COL:COLOMBIA:Quindio:CALARCA
+4:CO:COL:COLOMBIA:Quindio:CIRCASIA
+5:CO:COL:COLOMBIA:Quindio:CORDOBA
+6:CO:COL:COLOMBIA:Quindio:FILANDIA
+7:CO:COL:COLOMBIA:Quindio:GENOVA
+8:CO:COL:COLOMBIA:Quindio:LA TEBAIDA
+9:CO:COL:COLOMBIA:Quindio:MONTENEGRO
+10:CO:COL:COLOMBIA:Quindio:PIJAO
+11:CO:COL:COLOMBIA:Quindio:QUIMBAYA
+12:CO:COL:COLOMBIA:Quindio:SALENTO
+1:CO:COL:COLOMBIA:Atlantico:BARANOA
+2:CO:COL:COLOMBIA:Atlantico:BARRANQUILLA  (DIST.PORT.
+3:CO:COL:COLOMBIA:Atlantico:CAMPO DE LA CRUZ
+4:CO:COL:COLOMBIA:Atlantico:CANDELARIA
+5:CO:COL:COLOMBIA:Atlantico:GALAPA
+6:CO:COL:COLOMBIA:Atlantico:JUAN DE ACOSTA
+7:CO:COL:COLOMBIA:Atlantico:LURUACO
+8:CO:COL:COLOMBIA:Atlantico:MALAMBO
+9:CO:COL:COLOMBIA:Atlantico:MANATI
+10:CO:COL:COLOMBIA:Atlantico:PALMAR DE VARELA
+11:CO:COL:COLOMBIA:Atlantico:PIOJO
+12:CO:COL:COLOMBIA:Atlantico:POLO NUEVO
+13:CO:COL:COLOMBIA:Atlantico:PONEDERA
+14:CO:COL:COLOMBIA:Atlantico:PUERTO COLOMBIA
+15:CO:COL:COLOMBIA:Atlantico:REPELON
+16:CO:COL:COLOMBIA:Atlantico:SABANAGRANDE
+17:CO:COL:COLOMBIA:Atlantico:SABANALARGA
+18:CO:COL:COLOMBIA:Atlantico:SANTA LUCIA
+19:CO:COL:COLOMBIA:Atlantico:SANTO TOMAS
+20:CO:COL:COLOMBIA:Atlantico:SOLEDAD
+21:CO:COL:COLOMBIA:Atlantico:SUAN
+22:CO:COL:COLOMBIA:Atlantico:TUBARA
+23:CO:COL:COLOMBIA:Atlantico:USIACURI
+1:CO:COL:COLOMBIA:Magdalena:ARACATACA
+2:CO:COL:COLOMBIA:Magdalena:ARIGUANI
+3:CO:COL:COLOMBIA:Magdalena:CERRO SAN ANTONIO
+4:CO:COL:COLOMBIA:Magdalena:CHIVOLO
+5:CO:COL:COLOMBIA:Magdalena:CIENAGA
+6:CO:COL:COLOMBIA:Magdalena:EL BANCO
+7:CO:COL:COLOMBIA:Magdalena:EL PI?ON
+8:CO:COL:COLOMBIA:Magdalena:FUNDACION
+9:CO:COL:COLOMBIA:Magdalena:GUAMAL
+10:CO:COL:COLOMBIA:Magdalena:PEDRAZA
+11:CO:COL:COLOMBIA:Magdalena:PIVIJAY
+12:CO:COL:COLOMBIA:Magdalena:PLATO
+13:CO:COL:COLOMBIA:Magdalena:PUEBLO VIEJO
+14:CO:COL:COLOMBIA:Magdalena:REMOLINO
+15:CO:COL:COLOMBIA:Magdalena:SALAMINA
+16:CO:COL:COLOMBIA:Magdalena:SAN SEBASTIAN DE BUENAVIS
+17:CO:COL:COLOMBIA:Magdalena:SAN ZENON
+18:CO:COL:COLOMBIA:Magdalena:SANTA ANA
+19:CO:COL:COLOMBIA:Magdalena:SANTA MARTA (DIST. ESP.)
+20:CO:COL:COLOMBIA:Magdalena:SANTA MARTA (DIST. ESP.)(
+21:CO:COL:COLOMBIA:Magdalena:TENERIFE
+1:CO:COL:COLOMBIA:Amazonas:EL ENCANTO
+2:CO:COL:COLOMBIA:Amazonas:LA CHORRERA
+3:CO:COL:COLOMBIA:Amazonas:LA PEDRERA
+4:CO:COL:COLOMBIA:Amazonas:LETICIA
+5:CO:COL:COLOMBIA:Amazonas:MIRITI PARANA
+6:CO:COL:COLOMBIA:Amazonas:PUERTO NARINO
+7:CO:COL:COLOMBIA:Amazonas:PUERTO SANTANDER
+8:CO:COL:COLOMBIA:Amazonas:TARAPACA
+1:CO:COL:COLOMBIA:Santander:AGUADA
+2:CO:COL:COLOMBIA:Santander:ALBANIA
+3:CO:COL:COLOMBIA:Santander:ARATOCA
+4:CO:COL:COLOMBIA:Santander:BARBOSA
+5:CO:COL:COLOMBIA:Santander:BARICHARA
+6:CO:COL:COLOMBIA:Santander:BARRANCABERMEJA
+7:CO:COL:COLOMBIA:Santander:BETULIA
+8:CO:COL:COLOMBIA:Santander:BOLIVAR
+9:CO:COL:COLOMBIA:Santander:BUCARAMANGA
+10:CO:COL:COLOMBIA:Santander:CABRERA
+11:CO:COL:COLOMBIA:Santander:CALIFORNIA
+12:CO:COL:COLOMBIA:Santander:CAPITANEJO
+13:CO:COL:COLOMBIA:Santander:CARCASI
+14:CO:COL:COLOMBIA:Santander:CEPITA
+15:CO:COL:COLOMBIA:Santander:CERRITO
+16:CO:COL:COLOMBIA:Santander:CHARALA
+17:CO:COL:COLOMBIA:Santander:CHARTA
+18:CO:COL:COLOMBIA:Santander:CHIMA
+19:CO:COL:COLOMBIA:Santander:CHIPATA
+20:CO:COL:COLOMBIA:Santander:CIMITARRA
+21:CO:COL:COLOMBIA:Santander:CONCEPCION
+22:CO:COL:COLOMBIA:Santander:CONFINES
+23:CO:COL:COLOMBIA:Santander:CONTRATACION
+24:CO:COL:COLOMBIA:Santander:COROMORO
+25:CO:COL:COLOMBIA:Santander:CURITI
+26:CO:COL:COLOMBIA:Santander:EL CARMEN
+27:CO:COL:COLOMBIA:Santander:EL GUACAMAYO
+28:CO:COL:COLOMBIA:Santander:EL PE?ON
+29:CO:COL:COLOMBIA:Santander:EL PLAYON
+30:CO:COL:COLOMBIA:Santander:ENCINO
+31:CO:COL:COLOMBIA:Santander:ENCISO
+32:CO:COL:COLOMBIA:Santander:FLORIAN
+33:CO:COL:COLOMBIA:Santander:FLORIDABLANCA
+34:CO:COL:COLOMBIA:Santander:GALAN
+35:CO:COL:COLOMBIA:Santander:GAMBITA
+36:CO:COL:COLOMBIA:Santander:GIRON
+37:CO:COL:COLOMBIA:Santander:GUACA
+38:CO:COL:COLOMBIA:Santander:GUADALUPE
+39:CO:COL:COLOMBIA:Santander:GUAPOTA
+40:CO:COL:COLOMBIA:Santander:GUAVATA
+41:CO:COL:COLOMBIA:Santander:GUEPSA
+42:CO:COL:COLOMBIA:Santander:HATO
+43:CO:COL:COLOMBIA:Santander:JESUS MARIA
+44:CO:COL:COLOMBIA:Santander:JORDAN
+45:CO:COL:COLOMBIA:Santander:LA BELLEZA
+46:CO:COL:COLOMBIA:Santander:LA PAZ
+47:CO:COL:COLOMBIA:Santander:LANDAZURI
+48:CO:COL:COLOMBIA:Santander:LEBRIJA
+49:CO:COL:COLOMBIA:Santander:LOS SANTOS
+50:CO:COL:COLOMBIA:Santander:MACARAVITA
+51:CO:COL:COLOMBIA:Santander:MALAGA
+52:CO:COL:COLOMBIA:Santander:MATANZA
+53:CO:COL:COLOMBIA:Santander:MOGOTES
+54:CO:COL:COLOMBIA:Santander:MOLAGAVITA
+55:CO:COL:COLOMBIA:Santander:OCAMONTE
+56:CO:COL:COLOMBIA:Santander:OIBA
+57:CO:COL:COLOMBIA:Santander:ONZAGA
+58:CO:COL:COLOMBIA:Santander:PALMAR
+59:CO:COL:COLOMBIA:Santander:PALMAS DEL SOCORRO
+60:CO:COL:COLOMBIA:Santander:PARAMO
+61:CO:COL:COLOMBIA:Santander:PIEDECUESTA
+62:CO:COL:COLOMBIA:Santander:PINCHOTE
+63:CO:COL:COLOMBIA:Santander:PUENTE NACIONAL
+64:CO:COL:COLOMBIA:Santander:PUERTO PARRA
+65:CO:COL:COLOMBIA:Santander:PUERTO WILCHES
+66:CO:COL:COLOMBIA:Santander:RIONEGRO
+67:CO:COL:COLOMBIA:Santander:SABANA DE TORRES
+68:CO:COL:COLOMBIA:Santander:SAN ANDRES
+69:CO:COL:COLOMBIA:Santander:SAN BENITO
+70:CO:COL:COLOMBIA:Santander:SAN GIL
+71:CO:COL:COLOMBIA:Santander:SAN JOAQUIN
+72:CO:COL:COLOMBIA:Santander:SAN JOSE MIRANDA
+73:CO:COL:COLOMBIA:Santander:SAN MIGUEL
+74:CO:COL:COLOMBIA:Santander:SAN VICENTE DE CHUCURI
+75:CO:COL:COLOMBIA:Santander:SANTA BARBARA
+76:CO:COL:COLOMBIA:Santander:SANTA HELENA DE OPON
+77:CO:COL:COLOMBIA:Santander:SIMACOTA
+78:CO:COL:COLOMBIA:Santander:SOCORRO
+79:CO:COL:COLOMBIA:Santander:SUAITA
+80:CO:COL:COLOMBIA:Santander:SUCRE
+81:CO:COL:COLOMBIA:Santander:SURATA
+82:CO:COL:COLOMBIA:Santander:TONA
+83:CO:COL:COLOMBIA:Santander:VALLE DE  SAN JOSE
+84:CO:COL:COLOMBIA:Santander:VELEZ
+85:CO:COL:COLOMBIA:Santander:VETAS
+86:CO:COL:COLOMBIA:Santander:VILLANUEVA
+87:CO:COL:COLOMBIA:Santander:ZAPATOCA
+1:CO:COL:COLOMBIA:Valle del Cauca:ALCALA
+2:CO:COL:COLOMBIA:Valle del Cauca:ANDALUCIA
+3:CO:COL:COLOMBIA:Valle del Cauca:ANSERMANUEVO
+4:CO:COL:COLOMBIA:Valle del Cauca:ARGELIA
+5:CO:COL:COLOMBIA:Valle del Cauca:BOLIVAR
+6:CO:COL:COLOMBIA:Valle del Cauca:BUENAVENTURA
+7:CO:COL:COLOMBIA:Valle del Cauca:BUENAVENTURA (Is.)
+8:CO:COL:COLOMBIA:Valle del Cauca:BUGA
+9:CO:COL:COLOMBIA:Valle del Cauca:BUGALAGRANDE
+10:CO:COL:COLOMBIA:Valle del Cauca:CAICEDONIA
+11:CO:COL:COLOMBIA:Valle del Cauca:CALI
+12:CO:COL:COLOMBIA:Valle del Cauca:CALIMA  (DARIEN)
+13:CO:COL:COLOMBIA:Valle del Cauca:CANDELARIA
+14:CO:COL:COLOMBIA:Valle del Cauca:CARTAGO
+15:CO:COL:COLOMBIA:Valle del Cauca:DAGUA
+16:CO:COL:COLOMBIA:Valle del Cauca:EL AGUILA
+17:CO:COL:COLOMBIA:Valle del Cauca:EL CAIRO
+18:CO:COL:COLOMBIA:Valle del Cauca:EL CERRITO
+19:CO:COL:COLOMBIA:Valle del Cauca:EL DOVIO
+20:CO:COL:COLOMBIA:Valle del Cauca:FLORIDA
+21:CO:COL:COLOMBIA:Valle del Cauca:GINEBRA
+22:CO:COL:COLOMBIA:Valle del Cauca:GUACARI
+23:CO:COL:COLOMBIA:Valle del Cauca:JAMUNDI
+24:CO:COL:COLOMBIA:Valle del Cauca:LA CUMBRE
+25:CO:COL:COLOMBIA:Valle del Cauca:LA UNION
+26:CO:COL:COLOMBIA:Valle del Cauca:LA VICTORIA
+27:CO:COL:COLOMBIA:Valle del Cauca:OBANDO
+28:CO:COL:COLOMBIA:Valle del Cauca:PALMIRA
+29:CO:COL:COLOMBIA:Valle del Cauca:PRADERA
+30:CO:COL:COLOMBIA:Valle del Cauca:RESTREPO
+31:CO:COL:COLOMBIA:Valle del Cauca:RIOFRIO
+32:CO:COL:COLOMBIA:Valle del Cauca:ROLDANILLO
+33:CO:COL:COLOMBIA:Valle del Cauca:SAN PEDRO
+34:CO:COL:COLOMBIA:Valle del Cauca:SEVILLA
+35:CO:COL:COLOMBIA:Valle del Cauca:TORO
+36:CO:COL:COLOMBIA:Valle del Cauca:TRUJILLO
+37:CO:COL:COLOMBIA:Valle del Cauca:TULUA
+38:CO:COL:COLOMBIA:Valle del Cauca:ULLOA
+39:CO:COL:COLOMBIA:Valle del Cauca:VERSALLES
+40:CO:COL:COLOMBIA:Valle del Cauca:VIJES
+41:CO:COL:COLOMBIA:Valle del Cauca:YOTOCO
+42:CO:COL:COLOMBIA:Valle del Cauca:YUMBO
+43:CO:COL:COLOMBIA:Valle del Cauca:ZARZAL
+1:CO:COL:COLOMBIA:Vichada:CUMARIBO
+2:CO:COL:COLOMBIA:Vichada:LA PRIMAVERA
+3:CO:COL:COLOMBIA:Vichada:PUERTO CARRENO
+4:CO:COL:COLOMBIA:Vichada:SAN JOSE DE OCUNE
+5:CO:COL:COLOMBIA:Vichada:SANTA RITA
+6:CO:COL:COLOMBIA:Vichada:SANTA ROSALIA
+1:CO:COL:COLOMBIA:Meta:ACACIAS
+2:CO:COL:COLOMBIA:Meta:BARRANCA DE UPIA
+3:CO:COL:COLOMBIA:Meta:CABUYARO
+4:CO:COL:COLOMBIA:Meta:CASTILLA LA NUEVA
+5:CO:COL:COLOMBIA:Meta:CUBARRAL
+6:CO:COL:COLOMBIA:Meta:CUMARAL
+7:CO:COL:COLOMBIA:Meta:EL CALVARIO
+8:CO:COL:COLOMBIA:Meta:EL CASTILLO
+9:CO:COL:COLOMBIA:Meta:EL DORADO
+10:CO:COL:COLOMBIA:Meta:FUENTE DE ORO
+11:CO:COL:COLOMBIA:Meta:GRANADA
+12:CO:COL:COLOMBIA:Meta:GUAMAL
+13:CO:COL:COLOMBIA:Meta:LA MACARENA
+14:CO:COL:COLOMBIA:Meta:LA URIBE
+15:CO:COL:COLOMBIA:Meta:LEJANIAS
+16:CO:COL:COLOMBIA:Meta:MAPIRIPAN
+17:CO:COL:COLOMBIA:Meta:MESETAS
+18:CO:COL:COLOMBIA:Meta:PUERTO CONCORDIA
+19:CO:COL:COLOMBIA:Meta:PUERTO GAITAN
+20:CO:COL:COLOMBIA:Meta:PUERTO LLERAS
+21:CO:COL:COLOMBIA:Meta:PUERTO LOPEZ
+22:CO:COL:COLOMBIA:Meta:PUERTO RICO
+23:CO:COL:COLOMBIA:Meta:RESTREPO
+24:CO:COL:COLOMBIA:Meta:SAN CARLOS DE GUAROA
+25:CO:COL:COLOMBIA:Meta:SAN JUAN DE ARAMA
+26:CO:COL:COLOMBIA:Meta:SAN JUANITO
+27:CO:COL:COLOMBIA:Meta:SAN MARTIN
+28:CO:COL:COLOMBIA:Meta:VILLAVICENCIO
+29:CO:COL:COLOMBIA:Meta:VISTAHERMOSA
+1:CO:COL:COLOMBIA:Risaralda:APIA
+2:CO:COL:COLOMBIA:Risaralda:BALBOA
+3:CO:COL:COLOMBIA:Risaralda:BELEN DE UMBRIA
+4:CO:COL:COLOMBIA:Risaralda:DOS QUEBRADAS
+5:CO:COL:COLOMBIA:Risaralda:GUATICA
+6:CO:COL:COLOMBIA:Risaralda:LA CELIA
+7:CO:COL:COLOMBIA:Risaralda:LA VIRGINIA
+8:CO:COL:COLOMBIA:Risaralda:MARSELLA
+9:CO:COL:COLOMBIA:Risaralda:MISTRATO
+10:CO:COL:COLOMBIA:Risaralda:PEREIRA
+11:CO:COL:COLOMBIA:Risaralda:PUEBLO RICO
+12:CO:COL:COLOMBIA:Risaralda:QUINCHIA
+13:CO:COL:COLOMBIA:Risaralda:SANTA ROSA DE CABAL
+14:CO:COL:COLOMBIA:Risaralda:SANTUARIO
+1:CO:COL:COLOMBIA:Cesar:AGUACHICA
+2:CO:COL:COLOMBIA:Cesar:AGUSTIN CODAZZI
+3:CO:COL:COLOMBIA:Cesar:ASTREA
+4:CO:COL:COLOMBIA:Cesar:BECERRIL
+5:CO:COL:COLOMBIA:Cesar:BOSCONIA
+6:CO:COL:COLOMBIA:Cesar:CHIMICHAGUA
+7:CO:COL:COLOMBIA:Cesar:CHIRIGUANA
+8:CO:COL:COLOMBIA:Cesar:CURUMANI
+9:CO:COL:COLOMBIA:Cesar:EL COPEY
+10:CO:COL:COLOMBIA:Cesar:EL PASO
+11:CO:COL:COLOMBIA:Cesar:GAMARRA
+12:CO:COL:COLOMBIA:Cesar:GONZALEZ
+13:CO:COL:COLOMBIA:Cesar:LA GLORIA
+14:CO:COL:COLOMBIA:Cesar:LA JAGUA DE IRIBICO
+15:CO:COL:COLOMBIA:Cesar:LA PAZ
+16:CO:COL:COLOMBIA:Cesar:MANAURE BALCON DEL CESAR
+17:CO:COL:COLOMBIA:Cesar:PAILITAS
+18:CO:COL:COLOMBIA:Cesar:PELAYA
+19:CO:COL:COLOMBIA:Cesar:RIO DE ORO
+20:CO:COL:COLOMBIA:Cesar:SAN ALBERTO
+21:CO:COL:COLOMBIA:Cesar:SAN DIEGO
+22:CO:COL:COLOMBIA:Cesar:SAN MARTIN
+23:CO:COL:COLOMBIA:Cesar:TAMALAMEQUE
+24:CO:COL:COLOMBIA:Cesar:VALLEDUPAR
+1:CO:COL:COLOMBIA:Guaviare:CALAMAR
+2:CO:COL:COLOMBIA:Guaviare:EL RETORNO
+3:CO:COL:COLOMBIA:Guaviare:MIRAFLORES
+4:CO:COL:COLOMBIA:Guaviare:SAN JOSE DEL GUAVIARE
+1:CO:COL:COLOMBIA:Boyaca:ALMEIDA
+2:CO:COL:COLOMBIA:Boyaca:AQUITANIA
+3:CO:COL:COLOMBIA:Boyaca:ARCABUCO
+4:CO:COL:COLOMBIA:Boyaca:BELEN
+5:CO:COL:COLOMBIA:Boyaca:BERBEO
+6:CO:COL:COLOMBIA:Boyaca:BETEITIVA
+7:CO:COL:COLOMBIA:Boyaca:BOAVITA
+8:CO:COL:COLOMBIA:Boyaca:BOYACA
+9:CO:COL:COLOMBIA:Boyaca:BRICE?O
+10:CO:COL:COLOMBIA:Boyaca:BUENAVISTA
+11:CO:COL:COLOMBIA:Boyaca:BUSBANZA
+12:CO:COL:COLOMBIA:Boyaca:CALDAS
+13:CO:COL:COLOMBIA:Boyaca:CAMPOHERMOSO
+14:CO:COL:COLOMBIA:Boyaca:CERINZA
+15:CO:COL:COLOMBIA:Boyaca:CHINAVITA
+16:CO:COL:COLOMBIA:Boyaca:CHIQUINQUIRA
+17:CO:COL:COLOMBIA:Boyaca:CHIQUIZA
+18:CO:COL:COLOMBIA:Boyaca:CHISCAS
+19:CO:COL:COLOMBIA:Boyaca:CHITA
+20:CO:COL:COLOMBIA:Boyaca:CHITARAQUE
+21:CO:COL:COLOMBIA:Boyaca:CHIVATA
+22:CO:COL:COLOMBIA:Boyaca:CHIVOR
+23:CO:COL:COLOMBIA:Boyaca:CIENEGA
+24:CO:COL:COLOMBIA:Boyaca:COMBITA
+25:CO:COL:COLOMBIA:Boyaca:COPER
+26:CO:COL:COLOMBIA:Boyaca:CORRALES
+27:CO:COL:COLOMBIA:Boyaca:COVARACHIA
+28:CO:COL:COLOMBIA:Boyaca:CUBARA
+29:CO:COL:COLOMBIA:Boyaca:CUCAITA
+30:CO:COL:COLOMBIA:Boyaca:CUITIVA
+31:CO:COL:COLOMBIA:Boyaca:DUITAMA
+32:CO:COL:COLOMBIA:Boyaca:EL COCUY
+33:CO:COL:COLOMBIA:Boyaca:EL ESPINO
+34:CO:COL:COLOMBIA:Boyaca:FIRAVITOBA
+35:CO:COL:COLOMBIA:Boyaca:FLORESTA
+36:CO:COL:COLOMBIA:Boyaca:GACHANTIVA
+37:CO:COL:COLOMBIA:Boyaca:GAMEZA
+38:CO:COL:COLOMBIA:Boyaca:GARAGOA
+39:CO:COL:COLOMBIA:Boyaca:GUACAMAYAS
+40:CO:COL:COLOMBIA:Boyaca:GUATEQUE
+41:CO:COL:COLOMBIA:Boyaca:GUAYATA
+42:CO:COL:COLOMBIA:Boyaca:GUICAN
+43:CO:COL:COLOMBIA:Boyaca:IZA
+44:CO:COL:COLOMBIA:Boyaca:JENESANO
+45:CO:COL:COLOMBIA:Boyaca:JERICO
+46:CO:COL:COLOMBIA:Boyaca:LA CAPILLA
+47:CO:COL:COLOMBIA:Boyaca:LA UVITA
+48:CO:COL:COLOMBIA:Boyaca:LA VICTORIA
+49:CO:COL:COLOMBIA:Boyaca:LABRANZAGRANDE
+50:CO:COL:COLOMBIA:Boyaca:MACANAL
+51:CO:COL:COLOMBIA:Boyaca:MARIPI
+52:CO:COL:COLOMBIA:Boyaca:MIRAFLORES
+53:CO:COL:COLOMBIA:Boyaca:MONGUA
+54:CO:COL:COLOMBIA:Boyaca:MONGUI
+55:CO:COL:COLOMBIA:Boyaca:MONIQUIRA
+56:CO:COL:COLOMBIA:Boyaca:MOTAVITA
+57:CO:COL:COLOMBIA:Boyaca:MUZO
+58:CO:COL:COLOMBIA:Boyaca:NOBSA
+59:CO:COL:COLOMBIA:Boyaca:NUEVO COLON
+60:CO:COL:COLOMBIA:Boyaca:OICATA
+61:CO:COL:COLOMBIA:Boyaca:OTANCHE
+62:CO:COL:COLOMBIA:Boyaca:PACHAVITA
+63:CO:COL:COLOMBIA:Boyaca:PAEZ
+64:CO:COL:COLOMBIA:Boyaca:PAIPA
+65:CO:COL:COLOMBIA:Boyaca:PAJARITO
+66:CO:COL:COLOMBIA:Boyaca:PANQUEBA
+67:CO:COL:COLOMBIA:Boyaca:PAUNA
+68:CO:COL:COLOMBIA:Boyaca:PAYA
+69:CO:COL:COLOMBIA:Boyaca:PAZ DE RIO
+70:CO:COL:COLOMBIA:Boyaca:PESCA
+71:CO:COL:COLOMBIA:Boyaca:PISVA
+72:CO:COL:COLOMBIA:Boyaca:PUERTO BOYACA
+73:CO:COL:COLOMBIA:Boyaca:QUIPAMA
+74:CO:COL:COLOMBIA:Boyaca:RAMIRIQUI
+75:CO:COL:COLOMBIA:Boyaca:RAQUIRA
+76:CO:COL:COLOMBIA:Boyaca:RONDON
+77:CO:COL:COLOMBIA:Boyaca:SABOYA
+78:CO:COL:COLOMBIA:Boyaca:SACHICA
+79:CO:COL:COLOMBIA:Boyaca:SAMACA
+80:CO:COL:COLOMBIA:Boyaca:SAN EDUARDO
+81:CO:COL:COLOMBIA:Boyaca:SAN JOSE DE PARE
+82:CO:COL:COLOMBIA:Boyaca:SAN LUIS DE GACENO
+83:CO:COL:COLOMBIA:Boyaca:SAN MATEO
+84:CO:COL:COLOMBIA:Boyaca:SAN MIGUEL DE SEMA
+85:CO:COL:COLOMBIA:Boyaca:SAN PABLO DE BORBUR
+86:CO:COL:COLOMBIA:Boyaca:SANTA ROSA DE VITERBO
+87:CO:COL:COLOMBIA:Boyaca:SANTA SOFIA
+88:CO:COL:COLOMBIA:Boyaca:SANTAMARIA
+89:CO:COL:COLOMBIA:Boyaca:SANTANA
+90:CO:COL:COLOMBIA:Boyaca:SATIVANORTE
+91:CO:COL:COLOMBIA:Boyaca:SATIVASUR
+92:CO:COL:COLOMBIA:Boyaca:SIACHOQUE
+93:CO:COL:COLOMBIA:Boyaca:SOATA
+94:CO:COL:COLOMBIA:Boyaca:SOCHA
+95:CO:COL:COLOMBIA:Boyaca:SOCOTA
+96:CO:COL:COLOMBIA:Boyaca:SOGAMOSO
+97:CO:COL:COLOMBIA:Boyaca:SOMONDOCO
+98:CO:COL:COLOMBIA:Boyaca:SORA
+99:CO:COL:COLOMBIA:Boyaca:SORACA
+100:CO:COL:COLOMBIA:Boyaca:SOTAQUIRA
+101:CO:COL:COLOMBIA:Boyaca:SUSACON
+102:CO:COL:COLOMBIA:Boyaca:SUTAMARCHAN
+103:CO:COL:COLOMBIA:Boyaca:SUTATENZA
+104:CO:COL:COLOMBIA:Boyaca:TASCO
+105:CO:COL:COLOMBIA:Boyaca:TENZA
+106:CO:COL:COLOMBIA:Boyaca:TIBABOSA
+107:CO:COL:COLOMBIA:Boyaca:TIBANA
+108:CO:COL:COLOMBIA:Boyaca:TINJACA
+109:CO:COL:COLOMBIA:Boyaca:TIPACOQUE
+110:CO:COL:COLOMBIA:Boyaca:TOCA
+111:CO:COL:COLOMBIA:Boyaca:TOGUI
+112:CO:COL:COLOMBIA:Boyaca:TOPAGA
+113:CO:COL:COLOMBIA:Boyaca:TOTA
+114:CO:COL:COLOMBIA:Boyaca:TUNJA
+115:CO:COL:COLOMBIA:Boyaca:TUNUNGUA
+116:CO:COL:COLOMBIA:Boyaca:TURMEQUE
+117:CO:COL:COLOMBIA:Boyaca:TUTA
+118:CO:COL:COLOMBIA:Boyaca:TUTASA
+119:CO:COL:COLOMBIA:Boyaca:UMBITA
+120:CO:COL:COLOMBIA:Boyaca:VENTAQUEMADA
+121:CO:COL:COLOMBIA:Boyaca:VILLA DE LEYVA
+122:CO:COL:COLOMBIA:Boyaca:VIRACACHA
+123:CO:COL:COLOMBIA:Boyaca:ZETAQUIRA
+1:CO:COL:COLOMBIA:Caldas:AGUADAS
+2:CO:COL:COLOMBIA:Caldas:ANSERMA
+3:CO:COL:COLOMBIA:Caldas:ARANZAZU
+4:CO:COL:COLOMBIA:Caldas:BELALCAZAR
+5:CO:COL:COLOMBIA:Caldas:CHINCHINA
+6:CO:COL:COLOMBIA:Caldas:FILADELFIA
+7:CO:COL:COLOMBIA:Caldas:LA DORADA
+8:CO:COL:COLOMBIA:Caldas:LA MERCED
+9:CO:COL:COLOMBIA:Caldas:MANIZALES
+10:CO:COL:COLOMBIA:Caldas:MANZANARES
+11:CO:COL:COLOMBIA:Caldas:MARMATO
+12:CO:COL:COLOMBIA:Caldas:MARQUETALIA
+13:CO:COL:COLOMBIA:Caldas:MARULANDA
+14:CO:COL:COLOMBIA:Caldas:NEIRA
+15:CO:COL:COLOMBIA:Caldas:PACORA
+16:CO:COL:COLOMBIA:Caldas:PALESTINA
+17:CO:COL:COLOMBIA:Caldas:PENSILVANIA
+18:CO:COL:COLOMBIA:Caldas:RIOSUCIO
+19:CO:COL:COLOMBIA:Caldas:RISARALDA
+20:CO:COL:COLOMBIA:Caldas:SALAMINA
+21:CO:COL:COLOMBIA:Caldas:SAMANA
+22:CO:COL:COLOMBIA:Caldas:SUPIA
+23:CO:COL:COLOMBIA:Caldas:VICTORIA
+24:CO:COL:COLOMBIA:Caldas:VILLAMARIA
+25:CO:COL:COLOMBIA:Caldas:VITERBO
+1:CO:COL:COLOMBIA:Antioquia:ABEJORRAL
+2:CO:COL:COLOMBIA:Antioquia:ABRIAQUI
+3:CO:COL:COLOMBIA:Antioquia:ALEJANDRIA
+4:CO:COL:COLOMBIA:Antioquia:AMAGA
+5:CO:COL:COLOMBIA:Antioquia:AMALFI
+6:CO:COL:COLOMBIA:Antioquia:ANDES
+7:CO:COL:COLOMBIA:Antioquia:ANGELOPOLIS
+8:CO:COL:COLOMBIA:Antioquia:ANGOSTURA
+9:CO:COL:COLOMBIA:Antioquia:ANORI
+10:CO:COL:COLOMBIA:Antioquia:ANTIOQUIA
+11:CO:COL:COLOMBIA:Antioquia:ANZA
+12:CO:COL:COLOMBIA:Antioquia:APARTADO
+13:CO:COL:COLOMBIA:Antioquia:ARBOLETES
+14:CO:COL:COLOMBIA:Antioquia:ARGELIA
+15:CO:COL:COLOMBIA:Antioquia:ARMENIA
+16:CO:COL:COLOMBIA:Antioquia:BARBOSA
+17:CO:COL:COLOMBIA:Antioquia:BELLO
+18:CO:COL:COLOMBIA:Antioquia:BELMIRA
+19:CO:COL:COLOMBIA:Antioquia:BETANIA
+20:CO:COL:COLOMBIA:Antioquia:BETULIA
+21:CO:COL:COLOMBIA:Antioquia:BOLIVAR
+22:CO:COL:COLOMBIA:Antioquia:BRICENO
+23:CO:COL:COLOMBIA:Antioquia:BURITICA
+24:CO:COL:COLOMBIA:Antioquia:CACERES
+25:CO:COL:COLOMBIA:Antioquia:CAICEDO
+26:CO:COL:COLOMBIA:Antioquia:CALDAS
+27:CO:COL:COLOMBIA:Antioquia:CAMPAMENTO
+28:CO:COL:COLOMBIA:Antioquia:CANASGORDAS
+29:CO:COL:COLOMBIA:Antioquia:CARACOLI
+30:CO:COL:COLOMBIA:Antioquia:CARAMANTA
+31:CO:COL:COLOMBIA:Antioquia:CAREPA
+32:CO:COL:COLOMBIA:Antioquia:CARMEN DE VIBORAL
+33:CO:COL:COLOMBIA:Antioquia:CAROLINA
+34:CO:COL:COLOMBIA:Antioquia:CAUCASIA
+35:CO:COL:COLOMBIA:Antioquia:CHIGORODO
+36:CO:COL:COLOMBIA:Antioquia:CISNEROS
+37:CO:COL:COLOMBIA:Antioquia:COCORNA
+38:CO:COL:COLOMBIA:Antioquia:CONCEPCION
+39:CO:COL:COLOMBIA:Antioquia:CONCORDIA
+40:CO:COL:COLOMBIA:Antioquia:COPACABANA
+41:CO:COL:COLOMBIA:Antioquia:DABEIBA
+42:CO:COL:COLOMBIA:Antioquia:DON MATIAS
+43:CO:COL:COLOMBIA:Antioquia:EBEJICO
+44:CO:COL:COLOMBIA:Antioquia:EL BAGRE
+45:CO:COL:COLOMBIA:Antioquia:ENTRERRIOS
+46:CO:COL:COLOMBIA:Antioquia:ENVIGADO
+47:CO:COL:COLOMBIA:Antioquia:FREDONIA
+48:CO:COL:COLOMBIA:Antioquia:FRONTINO
+49:CO:COL:COLOMBIA:Antioquia:GIRALDO
+50:CO:COL:COLOMBIA:Antioquia:GIRARDOTA
+51:CO:COL:COLOMBIA:Antioquia:GOMEZ PLATA
+52:CO:COL:COLOMBIA:Antioquia:GRANADA
+53:CO:COL:COLOMBIA:Antioquia:GUADALUPE
+54:CO:COL:COLOMBIA:Antioquia:GUARNE
+55:CO:COL:COLOMBIA:Antioquia:GUATAPE
+56:CO:COL:COLOMBIA:Antioquia:HELICONIA
+57:CO:COL:COLOMBIA:Antioquia:HISPANIA
+58:CO:COL:COLOMBIA:Antioquia:ITAGUI
+59:CO:COL:COLOMBIA:Antioquia:ITUANGO
+60:CO:COL:COLOMBIA:Antioquia:JARDIN
+61:CO:COL:COLOMBIA:Antioquia:JERICO
+62:CO:COL:COLOMBIA:Antioquia:LA CEJA
+63:CO:COL:COLOMBIA:Antioquia:LA ESTRELLA
+64:CO:COL:COLOMBIA:Antioquia:LA UNION
+65:CO:COL:COLOMBIA:Antioquia:LIBORINA
+66:CO:COL:COLOMBIA:Antioquia:MACEO
+67:CO:COL:COLOMBIA:Antioquia:MARINILLA
+68:CO:COL:COLOMBIA:Antioquia:MEDELLIN
+69:CO:COL:COLOMBIA:Antioquia:MONTEBELLO
+70:CO:COL:COLOMBIA:Antioquia:MURINDO
+71:CO:COL:COLOMBIA:Antioquia:MUTATA
+72:CO:COL:COLOMBIA:Antioquia:NARINO
+73:CO:COL:COLOMBIA:Antioquia:NECHI
+74:CO:COL:COLOMBIA:Antioquia:NECOCLI
+75:CO:COL:COLOMBIA:Antioquia:NECOCLI (Is.)
+76:CO:COL:COLOMBIA:Antioquia:OLAYA
+77:CO:COL:COLOMBIA:Antioquia:PENOL
+78:CO:COL:COLOMBIA:Antioquia:PEQUE
+79:CO:COL:COLOMBIA:Antioquia:PTO NARE (LA MAGD.)
+80:CO:COL:COLOMBIA:Antioquia:PUEBLORRICO
+81:CO:COL:COLOMBIA:Antioquia:PUERTO BERRIO
+82:CO:COL:COLOMBIA:Antioquia:PUERTO TRIUNFO
+83:CO:COL:COLOMBIA:Antioquia:REMEDIOS
+84:CO:COL:COLOMBIA:Antioquia:RETIRO
+85:CO:COL:COLOMBIA:Antioquia:RIONEGRO
+86:CO:COL:COLOMBIA:Antioquia:SABANALARGA
+87:CO:COL:COLOMBIA:Antioquia:SABANETA
+88:CO:COL:COLOMBIA:Antioquia:SALGAR
+89:CO:COL:COLOMBIA:Antioquia:SAN ANDRES
+90:CO:COL:COLOMBIA:Antioquia:SAN CARLOS
+91:CO:COL:COLOMBIA:Antioquia:SAN FRANCISCO
+92:CO:COL:COLOMBIA:Antioquia:SAN JERONIMO
+93:CO:COL:COLOMBIA:Antioquia:SAN JOSE DE LA MONTANA
+94:CO:COL:COLOMBIA:Antioquia:SAN JUAN DE URABA
+95:CO:COL:COLOMBIA:Antioquia:SAN LUIS
+96:CO:COL:COLOMBIA:Antioquia:SAN PEDRO
+97:CO:COL:COLOMBIA:Antioquia:SAN PEDRO DE URABA
+98:CO:COL:COLOMBIA:Antioquia:SAN RAFAEL
+99:CO:COL:COLOMBIA:Antioquia:SAN ROQUE
+100:CO:COL:COLOMBIA:Antioquia:SAN VICENTE
+101:CO:COL:COLOMBIA:Antioquia:SANTA BARBARA
+102:CO:COL:COLOMBIA:Antioquia:SANTA ROSA DE OSOS
+103:CO:COL:COLOMBIA:Antioquia:SANTO DOMINGO
+104:CO:COL:COLOMBIA:Antioquia:SANTUARIO
+105:CO:COL:COLOMBIA:Antioquia:SEGOVIA
+106:CO:COL:COLOMBIA:Antioquia:SONSON
+107:CO:COL:COLOMBIA:Antioquia:SOPETRAN
+108:CO:COL:COLOMBIA:Antioquia:TAMESIS
+109:CO:COL:COLOMBIA:Antioquia:TARAZA
+110:CO:COL:COLOMBIA:Antioquia:TARSO
+111:CO:COL:COLOMBIA:Antioquia:TITIRIBI
+112:CO:COL:COLOMBIA:Antioquia:TOLEDO
+113:CO:COL:COLOMBIA:Antioquia:TURBO
+114:CO:COL:COLOMBIA:Antioquia:TURBO (Is.)
+115:CO:COL:COLOMBIA:Antioquia:URAMITA
+116:CO:COL:COLOMBIA:Antioquia:URRAO
+117:CO:COL:COLOMBIA:Antioquia:VALDIVIA
+118:CO:COL:COLOMBIA:Antioquia:VALPARAISO
+119:CO:COL:COLOMBIA:Antioquia:VEGACHI
+120:CO:COL:COLOMBIA:Antioquia:VENECIA
+121:CO:COL:COLOMBIA:Antioquia:VIGIA DEL FUERTE
+122:CO:COL:COLOMBIA:Antioquia:YALI
+123:CO:COL:COLOMBIA:Antioquia:YARUMAL
+124:CO:COL:COLOMBIA:Antioquia:YOLOMBO
+125:CO:COL:COLOMBIA:Antioquia:YONDO
+126:CO:COL:COLOMBIA:Antioquia:ZARAGOZA
+1:CO:COL:COLOMBIA:Sucre:BUENAVISTA
+2:CO:COL:COLOMBIA:Sucre:CAIMITO
+3:CO:COL:COLOMBIA:Sucre:CHALAN
+4:CO:COL:COLOMBIA:Sucre:COLOSO (RICAURTE)
+5:CO:COL:COLOMBIA:Sucre:COROZAL
+6:CO:COL:COLOMBIA:Sucre:GALERAS
+7:CO:COL:COLOMBIA:Sucre:GUARANDA
+8:CO:COL:COLOMBIA:Sucre:LA UNION
+9:CO:COL:COLOMBIA:Sucre:LOS PALMITOS
+10:CO:COL:COLOMBIA:Sucre:MAJAGUAL
+11:CO:COL:COLOMBIA:Sucre:MORROA
+12:CO:COL:COLOMBIA:Sucre:OVEJAS
+13:CO:COL:COLOMBIA:Sucre:PALMITO
+14:CO:COL:COLOMBIA:Sucre:SAMPUES
+15:CO:COL:COLOMBIA:Sucre:SAN BENITO ABAD
+16:CO:COL:COLOMBIA:Sucre:SAN JUAN DE BETULIA
+17:CO:COL:COLOMBIA:Sucre:SAN MARCOS
+18:CO:COL:COLOMBIA:Sucre:SAN ONOFRE
+19:CO:COL:COLOMBIA:Sucre:SAN ONOFRE (Is.)
+20:CO:COL:COLOMBIA:Sucre:SAN PEDRO
+21:CO:COL:COLOMBIA:Sucre:SINCE
+22:CO:COL:COLOMBIA:Sucre:SINCELEJO
+23:CO:COL:COLOMBIA:Sucre:SUCRE
+24:CO:COL:COLOMBIA:Sucre:TOLU
+25:CO:COL:COLOMBIA:Sucre:TOLUVIEJO
+1:CO:COL:COLOMBIA:Bolivar:ACHI
+2:CO:COL:COLOMBIA:Bolivar:ALTOS DEL ROSARIO
+3:CO:COL:COLOMBIA:Bolivar:ARJONA
+4:CO:COL:COLOMBIA:Bolivar:BARRANCO DE LOBA
+5:CO:COL:COLOMBIA:Bolivar:CALAMAR
+6:CO:COL:COLOMBIA:Bolivar:CANTAGALLO
+7:CO:COL:COLOMBIA:Bolivar:CARTAGENA (DIST. ESP.)
+8:CO:COL:COLOMBIA:Bolivar:CARTAGENA (DIST. ESP.) (I
+9:CO:COL:COLOMBIA:Bolivar:CICUCO
+10:CO:COL:COLOMBIA:Bolivar:CORDOBA
+11:CO:COL:COLOMBIA:Bolivar:EL CARMEN DE BOLIVAR
+12:CO:COL:COLOMBIA:Bolivar:EL GUAMO
+13:CO:COL:COLOMBIA:Bolivar:HATILLO DE LOBA
+14:CO:COL:COLOMBIA:Bolivar:MAHATES
+15:CO:COL:COLOMBIA:Bolivar:MARGARITA
+16:CO:COL:COLOMBIA:Bolivar:MARIA LA BAJA
+17:CO:COL:COLOMBIA:Bolivar:MOMPOS
+18:CO:COL:COLOMBIA:Bolivar:MONTECRISTO
+19:CO:COL:COLOMBIA:Bolivar:MORALES
+20:CO:COL:COLOMBIA:Bolivar:PINILLOS
+21:CO:COL:COLOMBIA:Bolivar:RIO VIEJO
+22:CO:COL:COLOMBIA:Bolivar:SAN ESTANISLAO
+23:CO:COL:COLOMBIA:Bolivar:SAN FERNANDO
+24:CO:COL:COLOMBIA:Bolivar:SAN JACINTO
+25:CO:COL:COLOMBIA:Bolivar:SAN JUAN NEPOMUCENO
+26:CO:COL:COLOMBIA:Bolivar:SAN MARTIN DE LOBA
+27:CO:COL:COLOMBIA:Bolivar:SAN PABLO
+28:CO:COL:COLOMBIA:Bolivar:SANTA CATALINA
+29:CO:COL:COLOMBIA:Bolivar:SANTA ROSA
+30:CO:COL:COLOMBIA:Bolivar:SANTA ROSA DEL SUR
+31:CO:COL:COLOMBIA:Bolivar:SIMITI
+32:CO:COL:COLOMBIA:Bolivar:SOPLAVIENTO
+33:CO:COL:COLOMBIA:Bolivar:TALAIGUA NUEVO
+34:CO:COL:COLOMBIA:Bolivar:TURBACO
+35:CO:COL:COLOMBIA:Bolivar:TURBANA
+36:CO:COL:COLOMBIA:Bolivar:VILLANUEVA
+37:CO:COL:COLOMBIA:Bolivar:ZAMBRANO
diff --git a/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8b80036
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN1_LEX.txt
@@ -0,0 +1,5 @@
+1:KM-A:KM:ANJOUAN
+2:KM-G:KM:GRAND COMORE
+3:KM-ILM:KM:ILE DE MAYOTTE (FR.)
+4:KM-M:KM:MWALI
+5:KM-NZ:KM:NZWANI
diff --git a/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..04b2ab5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/COM/COM_ADMIN2_LEX.txt
@@ -0,0 +1,4 @@
+1:KM:COM:COMOROS:Mwali:COM.L2.4
+1:KM:COM:COMOROS:Ile de Mayotte (Fr.):COM.L2.3
+1:KM:COM:COMOROS:Nzwani:COM.L2.2
+1:KM:COM:COMOROS:Grand Comore:COM.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN1_LEX.txt
new file mode 100644
index 0000000..37f5e4f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:CV-BV:CV:BOA VISTA
+2:CV-BR:CV:BRAVA
+3:CV-CS:CV:CALHETA DE SO MIGUEL
+4:CV-FO:CV:FOGO
+5:CV-MA:CV:MAIO
+6:CV-MO:CV:MOSTEIROS
+7:CV-PA:CV:PAL
+8:CV-PN:CV:PORTO NOVO
+9:CV-PR:CV:PRAIA
+10:CV-RG:CV:RIBEIRA GRANDE
+11:CV-SL:CV:SAL
+12:CV-CA:CV:SANTA CATARINA
+13:CV-CR:CV:SANTA CRUZ
+14:CV-SON:CV:SANTO ANTAO
+15:CV-SN:CV:SAO NICOLAU
+16:CV-SV:CV:SAO VICENTE
+17:CV-SD:CV:SO DOMINGOS
+18:CV-SF:CV:SO FILIPE
+19:CV-TA:CV:TARRAFAL
diff --git a/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN2_LEX.txt
new file mode 100644
index 0000000..6c5e600
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CPV/CPV_ADMIN2_LEX.txt
@@ -0,0 +1,9 @@
+1:CV:CPV:CAPE VERDE:Sal:NA
+1:CV:CPV:CAPE VERDE:Santiago:NA
+1:CV:CPV:CAPE VERDE:Fogo:NA
+1:CV:CPV:CAPE VERDE:Sao Nicolau:NA
+1:CV:CPV:CAPE VERDE:Boa Vista:NA
+1:CV:CPV:CAPE VERDE:Sao Vicente:NA
+1:CV:CPV:CAPE VERDE:Maio:NA
+1:CV:CPV:CAPE VERDE:Brava:NA
+1:CV:CPV:CAPE VERDE:Santo Antao:NA
diff --git a/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..7225a68
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN1_LEX.txt
@@ -0,0 +1,15 @@
+1:CS-BR:CS:BRATISLAVA
+2:CS-CG:CS:CRNA GORA
+3:CS-JC:CS:JIHOCESKY KRAJ
+4:CS-JM:CS:JIHOMORAVSKY KRAJ
+5:CS-KM:CS:KOSOVO METOHIJA
+6:CS-PR:CS:PRAHA
+7:CS-SE:CS:SEVEROCESKY KRAJ
+8:CS-SV:CS:SEVEROMORAVSKY KRAJ
+9:CS-SR:CS:STREDOCESKY KRAJ
+10:CS-ST:CS:STREDOLSLOVENSKY KRAJ
+11:CS-VO:CS:VOJVODINA
+12:CS-VY:CS:VYCHODOCESKY KRAJ
+13:CS-YC:CS:YCHODOSLOVENSKI KRAJ
+14:CS-ZD:CS:ZAPADOCESKY KRAJ
+15:CS-ZA:CS:ZAPADOSLOVENSKY KRAJ
diff --git a/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/CZE/CZE_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN1_LEX.txt
new file mode 100644
index 0000000..cb63a02
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN1_LEX.txt
@@ -0,0 +1,40 @@
+1:DE-AR:DE:ARNSBERG
+2:DE-BW:DE:BADEN WÜRTTEMBERG
+3:DE-BE:DE:BERLIN
+4:DE-BB:DE:BRANDENBURG
+5:DE-BR:DE:BRAUNSCHWEIG
+6:DE-HB:DE:BREMEN
+7:DE-CM:DE:CHEMNITZ
+8:DE-DA:DE:DESSAU
+9:DE-DT:DE:DETMOLD
+10:DE-DR:DE:DRESDEN
+11:DE-DU:DE:DUESSELDORF
+12:DE-FR:DE:FREIBURG
+13:DE-GI:DE:GIESSEN
+14:DE-HH:DE:HAMBURG
+15:DE-HA:DE:HANNOVER
+16:DE-HE:DE:HESSEN
+17:DE-KA:DE:KASSEL
+18:DE-KO:DE:KOELN
+19:DD-LP:DE:LEIPZIG
+20:DE-LU:DE:LUENEBURG
+21:DE-MA:DE:MAGDEBURG
+22:DE-MV:DE:MECKLENBURG VORPOMMERN
+23:DE-MT:DE:MITTELFRANKEN
+24:DE-MU:DE:MUENSTER
+25:DE-NI:DE:NIEDERBAYERN
+26:DE-NW:DE:NORDRHEIN WESTFALEN
+27:DE-BY:DE:OBERBAYERN
+28:DE-OB:DE:OBERFRANKEN
+29:DE-RH:DE:RHEINHESSEN
+30:DE-RP:DE:RHEINHESSEN PFALZ
+31:DE-SL:DE:SAARLAND
+32:DE-SN:DE:SACHSEN
+33:DE-SH:DE:SCHWABEN
+34:DE-ST:DE:STUTTGART
+35:DE-TH:DE:THURINGEN
+36:DE-TI:DE:TRIER
+37:DE-TU:DE:TUEBINGEN
+38:DE-UT:DE:UNTERFRANKEN
+39:DE-UN:DE:UNTERFRANKREN
+40:DE-WE:DE:WESER EMS
diff --git a/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DEU/DEU_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8a8853e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:DK-040:DK:BORNHOLM
+2:DK-47:DK:FREDERIKSBERG
+3:DK-020:DK:FREDERIKSBORG
+4:DK-042:DK:FYN
+5:DK-022:DK:HOVEDSTADSREGIONEN
+6:DK-0:DK:KBENHAVN
+7:DK-0:DK:KBENHAVN
+8:DK-080:DK:NORDJYLLAND
+9:DK-023:DK:OST FOR STOREBAELT
+10:DK-070:DK:RHUS
+11:DK-055:DK:RIBE
+12:DK-065:DK:RINGKBING
+13:DK-025:DK:ROSKILDE
+14:DK-050:DK:SNDERJYLLAND
+15:DK-035:DK:STORSTRM
+16:DK-060:DK:VEJLE
+17:DK-021:DK:VEST FOR STOREBAELT
+18:DK-030:DK:VESTSJLLAND
+19:DK-076:DK:VIBORG
diff --git a/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DNK/DNK_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..113cc5d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN1_LEX.txt
@@ -0,0 +1,49 @@
+1:DZ-0:DZ:ADRAR
+2:DZ-44:DZ:AIN DAFLA
+3:DZ-46:DZ:AIN TAMOUCHENT
+4:DZ-6:DZ:ALGER
+5:DZ-23:DZ:ANNABA
+6:DZ-05:DZ:BATNA
+7:DZ-08:DZ:BECHAR
+8:DZ-06:DZ:BEJAIA
+9:DZ-07:DZ:BISKRA
+10:DZ-09:DZ:BLIDA
+11:DZ-34:DZ:BORJBOUARIREJ
+12:DZ-54:DZ:BOUIRA
+13:DZ-35:DZ:BOUMERDES
+14:DZ-02:DZ:CHLEF
+15:DZ-25:DZ:CONSTANTINE
+16:DZ-7:DZ:DJELFA
+17:DZ-32:DZ:EL BAYADH
+18:DZ-39:DZ:EL OUED
+19:DZ-36:DZ:EL TARF
+20:DZ-47:DZ:GHARDASA
+21:DZ-24:DZ:GUELMA
+22:DZ-33:DZ:ILLIZI
+23:DZ-8:DZ:JIJEL
+24:DZ-40:DZ:KHENCHELA
+25:DZ-03:DZ:LAGHOUAT
+26:DZ-29:DZ:MASCARA
+27:DZ-26:DZ:MEDIA
+28:DZ-43:DZ:MILA
+29:DZ-27:DZ:MOSTAGHANEM
+30:DZ-28:DZ:MSILA
+31:DZ-45:DZ:NAAMA
+32:DZ-63:DZ:ORAN
+33:DZ-30:DZ:OUARGLA
+34:DZ-04:DZ:OUM EL BOUAGHI
+35:DZ-48:DZ:RELIZANE
+36:DZ-20:DZ:SAIDA
+37:DZ-9:DZ:SETIF
+38:DZ-22:DZ:SIDI BEL ABBES
+39:DZ-62:DZ:SKIKDA
+40:DZ-4:DZ:SOUK AHRAS
+41:DZ-1:DZ:TAMANGHASSET
+42:DZ-TAM:DZ:TAMANRASSET
+43:DZ-52:DZ:TEBESSA
+44:DZ-37:DZ:TENDOUF
+45:DZ-64:DZ:TIARET
+46:DZ-42:DZ:TIPAZA
+47:DZ-38:DZ:TISSEMSILT
+48:DZ-5:DZ:TIZI OUZOU
+49:DZ-65:DZ:TLEMCEN
diff --git a/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f407b74
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/DZA/DZA_ADMIN2_LEX.txt
@@ -0,0 +1,48 @@
+1:DZ:DZA:ALGERIA:Tlemcen:DZA.L2.45
+1:DZ:DZA:ALGERIA:Tissemsilt:DZA.L2.40
+1:DZ:DZA:ALGERIA:Bechar:DZA.L2.32
+1:DZ:DZA:ALGERIA:Illizi:DZA.L2.29
+1:DZ:DZA:ALGERIA:GhardaSa:DZA.L2.11
+1:DZ:DZA:ALGERIA:Oum El Bouaghi:DZA.L2.24
+1:DZ:DZA:ALGERIA:Tendouf:DZA.L2.10
+1:DZ:DZA:ALGERIA:Oran:DZA.L2.19
+1:DZ:DZA:ALGERIA:Adrar:DZA.L2.44
+1:DZ:DZA:ALGERIA:Media:DZA.L2.41
+1:DZ:DZA:ALGERIA:Chlef:DZA.L2.22
+1:DZ:DZA:ALGERIA:Saida:DZA.L2.37
+1:DZ:DZA:ALGERIA:Laghouat:DZA.L2.17
+1:DZ:DZA:ALGERIA:Bouira:DZA.L2.48
+1:DZ:DZA:ALGERIA:Sidi-Bel-Abbes:DZA.L2.8
+1:DZ:DZA:ALGERIA:Tiaret:DZA.L2.35
+1:DZ:DZA:ALGERIA:Souk Ahras:DZA.L2.20
+1:DZ:DZA:ALGERIA:Annaba:DZA.L2.4
+1:DZ:DZA:ALGERIA:Relizane:DZA.L2.6
+1:DZ:DZA:ALGERIA:Tipaza:DZA.L2.31
+1:DZ:DZA:ALGERIA:Borjbouarirej:DZA.L2.16
+1:DZ:DZA:ALGERIA:Biskra:DZA.L2.1
+1:DZ:DZA:ALGERIA:Mascara:DZA.L2.34
+1:DZ:DZA:ALGERIA:Constantine:DZA.L2.47
+1:DZ:DZA:ALGERIA:Bejaia:DZA.L2.38
+1:DZ:DZA:ALGERIA:El Tarf:DZA.L2.30
+1:DZ:DZA:ALGERIA:Alger:DZA.L2.27
+1:DZ:DZA:ALGERIA:El Bayadh:DZA.L2.13
+1:DZ:DZA:ALGERIA:Tamanrasset:DZA.L2.2
+1:DZ:DZA:ALGERIA:Ain Dafla:DZA.L2.23
+1:DZ:DZA:ALGERIA:Mila:DZA.L2.3
+1:DZ:DZA:ALGERIA:Naama:DZA.L2.25
+1:DZ:DZA:ALGERIA:Batna:DZA.L2.26
+1:DZ:DZA:ALGERIA:Tebessa:DZA.L2.18
+1:DZ:DZA:ALGERIA:Jijel:DZA.L2.33
+1:DZ:DZA:ALGERIA:Mostaghanem:DZA.L2.5
+1:DZ:DZA:ALGERIA:Boumerdes:DZA.L2.39
+1:DZ:DZA:ALGERIA:Guelma:DZA.L2.21
+1:DZ:DZA:ALGERIA:Setif:DZA.L2.28
+1:DZ:DZA:ALGERIA:Khenchela:DZA.L2.14
+1:DZ:DZA:ALGERIA:Tizi-ouzou:DZA.L2.9
+1:DZ:DZA:ALGERIA:Djelfa:DZA.L2.43
+1:DZ:DZA:ALGERIA:Ouargla:DZA.L2.36
+1:DZ:DZA:ALGERIA:Skikda:DZA.L2.46
+1:DZ:DZA:ALGERIA:Ain Tamouchent:DZA.L2.42
+1:DZ:DZA:ALGERIA:Blida:DZA.L2.15
+1:DZ:DZA:ALGERIA:Msila:DZA.L2.7
+1:DZ:DZA:ALGERIA:El Oued:DZA.L2.12
diff --git a/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f988c17
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN1_LEX.txt
@@ -0,0 +1,23 @@
+1:EC-A:EC:AZUAY
+2:EC-B:EC:BOLIVAR
+3:EC-F:EC:CANAR
+4:EC-C:EC:CARCHI
+5:EC-H:EC:CHIMBORAZO
+6:EC-X:EC:COTOPAXI
+7:EC-O:EC:EL ORO
+8:EC-E:EC:ESMERALDAS
+9:EC-W:EC:GALPAGOS
+10:EC-G:EC:GUAYAS
+11:EC-I:EC:IMBABURA
+12:EC-L:EC:LOJA
+13:EC-R:EC:LOS RIOS
+14:EC-M:EC:MANABI
+15:EC-S:EC:MORONA SANTIAGO
+16:EC-N:EC:NAPO
+17:EC-D:EC:ORELLANA
+18:EC-Y:EC:PASTAZA
+19:EC-P:EC:PICHINCHA
+20:EC-U:EC:SUCUMBIOS
+21:EC-T:EC:TUNGURAHUA
+22:EC-Z:EC:ZAMORA CHINCHIPE
+23:EC-ZND:EC:ZONA NO DELIMTDA
diff --git a/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN2_LEX.txt
new file mode 100644
index 0000000..c0f3981
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ECU/ECU_ADMIN2_LEX.txt
@@ -0,0 +1,205 @@
+1:EC:ECU:ECUADOR:BOLIVAR:Caluma
+2:EC:ECU:ECUADOR:BOLIVAR:Chillanes
+3:EC:ECU:ECUADOR:BOLIVAR:Chimbo
+4:EC:ECU:ECUADOR:BOLIVAR:Echeandia
+5:EC:ECU:ECUADOR:BOLIVAR:Guaranda
+6:EC:ECU:ECUADOR:BOLIVAR:Las Naves
+7:EC:ECU:ECUADOR:BOLIVAR:San Miguel
+1:EC:ECU:ECUADOR:GUAYAS:Alfredo Baqueriz
+2:EC:ECU:ECUADOR:GUAYAS:Balao
+3:EC:ECU:ECUADOR:GUAYAS:Balzar
+4:EC:ECU:ECUADOR:GUAYAS:Colimes
+5:EC:ECU:ECUADOR:GUAYAS:Coronel Marcelin
+6:EC:ECU:ECUADOR:GUAYAS:Daule
+7:EC:ECU:ECUADOR:GUAYAS:Duran
+8:EC:ECU:ECUADOR:GUAYAS:El Empalme
+9:EC:ECU:ECUADOR:GUAYAS:Guayaquil
+10:EC:ECU:ECUADOR:GUAYAS:La Libertad
+11:EC:ECU:ECUADOR:GUAYAS:Lomas de Sargent
+12:EC:ECU:ECUADOR:GUAYAS:Milagro
+13:EC:ECU:ECUADOR:GUAYAS:Naranjal
+14:EC:ECU:ECUADOR:GUAYAS:Naranjito
+15:EC:ECU:ECUADOR:GUAYAS:Nobol
+16:EC:ECU:ECUADOR:GUAYAS:Palestina
+17:EC:ECU:ECUADOR:GUAYAS:Pedro Carbo
+18:EC:ECU:ECUADOR:GUAYAS:Playas
+19:EC:ECU:ECUADOR:GUAYAS:Salinas
+20:EC:ECU:ECUADOR:GUAYAS:Samborondon
+21:EC:ECU:ECUADOR:GUAYAS:Santa Elena
+22:EC:ECU:ECUADOR:GUAYAS:Santa Lucia
+23:EC:ECU:ECUADOR:GUAYAS:Simon Bolivar
+24:EC:ECU:ECUADOR:GUAYAS:Urbina Jado
+25:EC:ECU:ECUADOR:GUAYAS:Yaguachi
+1:EC:ECU:ECUADOR:EL ORO:Arenillas
+2:EC:ECU:ECUADOR:EL ORO:Atahualpa
+3:EC:ECU:ECUADOR:EL ORO:Balsas
+4:EC:ECU:ECUADOR:EL ORO:Chilla
+5:EC:ECU:ECUADOR:EL ORO:El Guabo
+6:EC:ECU:ECUADOR:EL ORO:Huaquillas
+7:EC:ECU:ECUADOR:EL ORO:Isla Correa
+8:EC:ECU:ECUADOR:EL ORO:Isla Matapalo
+9:EC:ECU:ECUADOR:EL ORO:Las Lajas
+10:EC:ECU:ECUADOR:EL ORO:Machala
+11:EC:ECU:ECUADOR:EL ORO:Marcabeli
+12:EC:ECU:ECUADOR:EL ORO:Pasaje
+13:EC:ECU:ECUADOR:EL ORO:Pinas
+14:EC:ECU:ECUADOR:EL ORO:Portovelo
+15:EC:ECU:ECUADOR:EL ORO:Santa Rosa
+16:EC:ECU:ECUADOR:EL ORO:Zaruma
+1:EC:ECU:ECUADOR:MORONA SANTIAGO:Gualaquiza
+2:EC:ECU:ECUADOR:MORONA SANTIAGO:Huamboya
+3:EC:ECU:ECUADOR:MORONA SANTIAGO:Morona
+4:EC:ECU:ECUADOR:MORONA SANTIAGO:Palora
+5:EC:ECU:ECUADOR:MORONA SANTIAGO:San Juan Bosco
+6:EC:ECU:ECUADOR:MORONA SANTIAGO:Santiago
+7:EC:ECU:ECUADOR:MORONA SANTIAGO:Sucua
+1:EC:ECU:ECUADOR:PASTAZA:Mera
+2:EC:ECU:ECUADOR:PASTAZA:Pastaza
+3:EC:ECU:ECUADOR:PASTAZA:Santa Clara
+1:EC:ECU:ECUADOR:AZUAY:Chordeleg
+2:EC:ECU:ECUADOR:AZUAY:Cuenca
+3:EC:ECU:ECUADOR:AZUAY:El Pan
+4:EC:ECU:ECUADOR:AZUAY:Giron
+5:EC:ECU:ECUADOR:AZUAY:Gualaceo
+6:EC:ECU:ECUADOR:AZUAY:Nabon
+7:EC:ECU:ECUADOR:AZUAY:Ona
+8:EC:ECU:ECUADOR:AZUAY:Paute
+9:EC:ECU:ECUADOR:AZUAY:Pucara
+10:EC:ECU:ECUADOR:AZUAY:San Fernando
+11:EC:ECU:ECUADOR:AZUAY:Santa Isabel
+12:EC:ECU:ECUADOR:AZUAY:Sevilla de Oro
+13:EC:ECU:ECUADOR:AZUAY:Sissig
+1:EC:ECU:ECUADOR:NAPO:Aguarico
+2:EC:ECU:ECUADOR:NAPO:Archidona
+3:EC:ECU:ECUADOR:NAPO:El Chaco
+4:EC:ECU:ECUADOR:NAPO:La Joya de los S
+5:EC:ECU:ECUADOR:NAPO:Loreto
+6:EC:ECU:ECUADOR:NAPO:Orellana
+7:EC:ECU:ECUADOR:NAPO:Quijos
+8:EC:ECU:ECUADOR:NAPO:Tena
+1:EC:ECU:ECUADOR:MANABI:24 de Mayo
+2:EC:ECU:ECUADOR:MANABI:Bolivar
+3:EC:ECU:ECUADOR:MANABI:Chone
+4:EC:ECU:ECUADOR:MANABI:El Carmen
+5:EC:ECU:ECUADOR:MANABI:Est del Medio
+6:EC:ECU:ECUADOR:MANABI:Flavio Alfaro
+7:EC:ECU:ECUADOR:MANABI:I. Salango
+8:EC:ECU:ECUADOR:MANABI:Isla del Medio
+9:EC:ECU:ECUADOR:MANABI:Jipijapa
+10:EC:ECU:ECUADOR:MANABI:Junin
+11:EC:ECU:ECUADOR:MANABI:Manta
+12:EC:ECU:ECUADOR:MANABI:Montecristi
+13:EC:ECU:ECUADOR:MANABI:Pajan
+14:EC:ECU:ECUADOR:MANABI:Pedernales
+15:EC:ECU:ECUADOR:MANABI:Pichincha
+16:EC:ECU:ECUADOR:MANABI:Portoviejo
+17:EC:ECU:ECUADOR:MANABI:Rocafuerte
+18:EC:ECU:ECUADOR:MANABI:Santa Ana
+19:EC:ECU:ECUADOR:MANABI:Sucre
+20:EC:ECU:ECUADOR:MANABI:Tosagua
+1:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:Chinchipe
+2:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:El Pangui
+3:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:Nangaritza
+4:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:Yacuambi
+5:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:Yantzaza
+6:EC:ECU:ECUADOR:ZAMORA CHINCHIPE:Zamora
+1:EC:ECU:ECUADOR:IMBABURA:Antonio Ante
+2:EC:ECU:ECUADOR:IMBABURA:Cotacachi
+3:EC:ECU:ECUADOR:IMBABURA:Ibarra
+4:EC:ECU:ECUADOR:IMBABURA:Otavalo
+5:EC:ECU:ECUADOR:IMBABURA:Pimampiro
+6:EC:ECU:ECUADOR:IMBABURA:San Miguel Urcuq
+1:EC:ECU:ECUADOR:ESMERALDAS:Atacames
+2:EC:ECU:ECUADOR:ESMERALDAS:Eloy Alfaro
+3:EC:ECU:ECUADOR:ESMERALDAS:Esmeraldas
+4:EC:ECU:ECUADOR:ESMERALDAS:Is.Canchimalero
+5:EC:ECU:ECUADOR:ESMERALDAS:Isla El Brujo
+6:EC:ECU:ECUADOR:ESMERALDAS:Isla Luis Vargas
+7:EC:ECU:ECUADOR:ESMERALDAS:Isla Sta.Rosa
+8:EC:ECU:ECUADOR:ESMERALDAS:Isla Tatabrero
+9:EC:ECU:ECUADOR:ESMERALDAS:La Isla (Muisne)
+10:EC:ECU:ECUADOR:ESMERALDAS:La Isla (Munisme
+11:EC:ECU:ECUADOR:ESMERALDAS:Muisne
+12:EC:ECU:ECUADOR:ESMERALDAS:Quininde
+13:EC:ECU:ECUADOR:ESMERALDAS:San Lorenzo
+14:EC:ECU:ECUADOR:ESMERALDAS:San Lorenzo (Is)
+1:EC:ECU:ECUADOR:LOJA:Calvas
+2:EC:ECU:ECUADOR:LOJA:Catamayo
+3:EC:ECU:ECUADOR:LOJA:Celica
+4:EC:ECU:ECUADOR:LOJA:Chaguarpamba
+5:EC:ECU:ECUADOR:LOJA:Espindola
+6:EC:ECU:ECUADOR:LOJA:Gonzanama
+7:EC:ECU:ECUADOR:LOJA:Loja
+8:EC:ECU:ECUADOR:LOJA:Macara
+9:EC:ECU:ECUADOR:LOJA:Paltas
+10:EC:ECU:ECUADOR:LOJA:Pindal
+11:EC:ECU:ECUADOR:LOJA:Puyango
+12:EC:ECU:ECUADOR:LOJA:Quilanga
+13:EC:ECU:ECUADOR:LOJA:Saraguro
+14:EC:ECU:ECUADOR:LOJA:Sozoranga
+15:EC:ECU:ECUADOR:LOJA:Zapotillo
+1:EC:ECU:ECUADOR:CHIMBORAZO:Alausi
+2:EC:ECU:ECUADOR:CHIMBORAZO:Chambo
+3:EC:ECU:ECUADOR:CHIMBORAZO:Chunchi
+4:EC:ECU:ECUADOR:CHIMBORAZO:Colta
+5:EC:ECU:ECUADOR:CHIMBORAZO:Cumanda
+6:EC:ECU:ECUADOR:CHIMBORAZO:Guamote
+7:EC:ECU:ECUADOR:CHIMBORAZO:Guano
+8:EC:ECU:ECUADOR:CHIMBORAZO:Pallatanga
+9:EC:ECU:ECUADOR:CHIMBORAZO:Penipe
+10:EC:ECU:ECUADOR:CHIMBORAZO:Riobamba
+1:EC:ECU:ECUADOR:COTOPAXI:La Mana
+2:EC:ECU:ECUADOR:COTOPAXI:Latacunga
+3:EC:ECU:ECUADOR:COTOPAXI:Pangua
+4:EC:ECU:ECUADOR:COTOPAXI:Pujili
+5:EC:ECU:ECUADOR:COTOPAXI:Salcedo
+6:EC:ECU:ECUADOR:COTOPAXI:Saquisili
+7:EC:ECU:ECUADOR:COTOPAXI:Sigchos
+1:EC:ECU:ECUADOR:CANAR:Azogues
+2:EC:ECU:ECUADOR:CANAR:Biblian
+3:EC:ECU:ECUADOR:CANAR:Canar
+4:EC:ECU:ECUADOR:CANAR:Deleg
+5:EC:ECU:ECUADOR:CANAR:El Tambo
+6:EC:ECU:ECUADOR:CANAR:La Troncal
+1:EC:ECU:ECUADOR:TUNGURAHUA:Ambato
+2:EC:ECU:ECUADOR:TUNGURAHUA:Banos
+3:EC:ECU:ECUADOR:TUNGURAHUA:Cevallos
+4:EC:ECU:ECUADOR:TUNGURAHUA:Mocha
+5:EC:ECU:ECUADOR:TUNGURAHUA:Patate
+6:EC:ECU:ECUADOR:TUNGURAHUA:Quero
+7:EC:ECU:ECUADOR:TUNGURAHUA:Santiago Pillaro
+8:EC:ECU:ECUADOR:TUNGURAHUA:Sn Pedro Pelileo
+9:EC:ECU:ECUADOR:TUNGURAHUA:Tisaleo
+1:EC:ECU:ECUADOR:CARCHI:Bolivar
+2:EC:ECU:ECUADOR:CARCHI:Espejo
+3:EC:ECU:ECUADOR:CARCHI:Mira
+4:EC:ECU:ECUADOR:CARCHI:Montufar
+5:EC:ECU:ECUADOR:CARCHI:Tulcan
+1:EC:ECU:ECUADOR:PICHINCHA:Cayambe
+2:EC:ECU:ECUADOR:PICHINCHA:Mejia
+3:EC:ECU:ECUADOR:PICHINCHA:Pedro Moncayo
+4:EC:ECU:ECUADOR:PICHINCHA:Pedro Vicente M.
+5:EC:ECU:ECUADOR:PICHINCHA:Quito
+6:EC:ECU:ECUADOR:PICHINCHA:Ruminahui
+7:EC:ECU:ECUADOR:PICHINCHA:Santo Domingo
+8:EC:ECU:ECUADOR:PICHINCHA:Sn Miguel Bancos
+1:EC:ECU:ECUADOR:Zona No Delimtda:El Piedrero
+2:EC:ECU:ECUADOR:Zona No Delimtda:La Concordia
+3:EC:ECU:ECUADOR:Zona No Delimtda:Las Golondrinas
+4:EC:ECU:ECUADOR:Zona No Delimtda:Manga de Cura
+1:EC:ECU:ECUADOR:SUCUMBIOS:Cascales
+2:EC:ECU:ECUADOR:SUCUMBIOS:Gonzalo Pizarro
+3:EC:ECU:ECUADOR:SUCUMBIOS:Lago Agrio
+4:EC:ECU:ECUADOR:SUCUMBIOS:Putumayo
+5:EC:ECU:ECUADOR:SUCUMBIOS:Shushufindi
+6:EC:ECU:ECUADOR:SUCUMBIOS:Sucumbios
+1:EC:ECU:ECUADOR:LOS RIOS:Baba
+2:EC:ECU:ECUADOR:LOS RIOS:Babahoyo
+3:EC:ECU:ECUADOR:LOS RIOS:Buena Fe
+4:EC:ECU:ECUADOR:LOS RIOS:Montalvo
+5:EC:ECU:ECUADOR:LOS RIOS:Palenque
+6:EC:ECU:ECUADOR:LOS RIOS:Puebloviejo
+7:EC:ECU:ECUADOR:LOS RIOS:Quevedo
+8:EC:ECU:ECUADOR:LOS RIOS:Urdaneta
+9:EC:ECU:ECUADOR:LOS RIOS:Ventanas
+10:EC:ECU:ECUADOR:LOS RIOS:Vinces
diff --git a/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN1_LEX.txt
new file mode 100644
index 0000000..719d6d5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN1_LEX.txt
@@ -0,0 +1,30 @@
+1:EG-DK:EG:AD DAQAHLIYAH
+2:EG-BA:EG:AL BAR AL AMAR
+3:EG-BH:EG:AL BUAYRAH
+4:EG-FYM:EG:AL FAYYUM
+5:EG-GH:EG:AL GHARBIYAH
+6:EG-ALX:EG:AL ISKANDARIYAH
+7:EG-IS:EG:AL ISMALYAH
+8:EG-GZ:EG:AL JZAH
+9:EG-MNF:EG:AL MINFYAH
+10:EG-MN:EG:AL MINY
+11:EG-KB:EG:AL QALYBYAH
+12:EG-C:EG:AL QHIRAH
+13:EG-WAD:EG:AL WD AL JADD
+14:EG-SUZ:EG:AS SUWAYS
+15:EG-SHR:EG:ASH SHARQYAH
+16:EG-ASN:EG:ASWN
+17:EG-AST:EG:ASY
+18:EG-BNS:EG:BAN SUWAYF
+19:EG-PTS:EG:BR SAD
+20:EG-DT:EG:DUMY
+21:EG-FRG:EG:FRONTIER GOVERNATES
+22:EG-JS:EG:JANB SN
+23:EG-KFS:EG:KAFR ASH SHAYKH
+24:EG-LOE:EG:LOWER EGYPT
+25:EG-MT:EG:MAR
+26:EG-KN:EG:QIN
+27:EG-SIN:EG:SHAML SN
+28:EG-SHG:EG:SHJ
+29:EG-UPE:EG:UPPER EGYPT
+30:EG-URG:EG:URBAN GOVERNATES
diff --git a/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN2_LEX.txt
new file mode 100644
index 0000000..52dde37
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/EGY/EGY_ADMIN2_LEX.txt
@@ -0,0 +1,26 @@
+1:EG:EGY:EGYPT:Urban Governates:Al Iskandariyah (Alex.)
+2:EG:EGY:EGYPT:Urban Governates:Al Qahirah (Cairo)
+3:EG:EGY:EGYPT:Urban Governates:As Suways (Suez)
+4:EG:EGY:EGYPT:Urban Governates:Bur Said (Port Said)
+1:EG:EGY:EGYPT:Lower Egypt:Al Buhayrah (Behera)
+2:EG:EGY:EGYPT:Lower Egypt:Al Daqahliyah (Dakahlia)
+3:EG:EGY:EGYPT:Lower Egypt:Al Gharbiyah (Gharbia)
+4:EG:EGY:EGYPT:Lower Egypt:Al Minufiyah (Menoufia)
+5:EG:EGY:EGYPT:Lower Egypt:Al Qalyubiyah (Kalyoubia)
+6:EG:EGY:EGYPT:Lower Egypt:As Ismailiyah (Ismailia)
+7:EG:EGY:EGYPT:Lower Egypt:Ash Sharqiyah (Sharkia)
+8:EG:EGY:EGYPT:Lower Egypt:Dumyat (Damietta)
+9:EG:EGY:EGYPT:Lower Egypt:Kafr-El-Sheikh
+1:EG:EGY:EGYPT:Frontier Governates:Al Bahr/Al Ahmar (RedSea)
+2:EG:EGY:EGYPT:Frontier Governates:Al Wadi/Al Jadid
+3:EG:EGY:EGYPT:Frontier Governates:Janub Sina (South Sinai)
+4:EG:EGY:EGYPT:Frontier Governates:Matruh
+5:EG:EGY:EGYPT:Frontier Governates:Shamal Sina (North Sinai)
+1:EG:EGY:EGYPT:Upper Egypt:Al Fayyum (Fayoum)
+2:EG:EGY:EGYPT:Upper Egypt:Al Jizah (Giza)
+3:EG:EGY:EGYPT:Upper Egypt:Al Minya (Menia)
+4:EG:EGY:EGYPT:Upper Egypt:Aswan
+5:EG:EGY:EGYPT:Upper Egypt:Asyiut
+6:EG:EGY:EGYPT:Upper Egypt:Beni Suwayf (Beni-Suef)
+7:EG:EGY:EGYPT:Upper Egypt:Qina
+8:EG:EGY:EGYPT:Upper Egypt:Suhaj
diff --git a/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN1_LEX.txt
new file mode 100644
index 0000000..399d058
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:ER-AKG:ER:AKELE GUZAY
+2:ER-AK:ER:AKORDAT
+3:ER-AN:ER:ANSEBA
+4:ER-AS:ER:ASSEB
+5:ER-DU:ER:DEBUB
+6:ER-GAS:ER:GASH & SETIT
+7:ER-GB:ER:GASH BARKA
+8:ER-HA:ER:HAMASSIEN
+9:ER-KE:ER:KEREN
+10:ER-DK:ER:KEY BAHIR
+11:ER-MA:ER:MAAKEL [MAEKEL]
+12:ER-SA:ER:SAHEL
+13:ER-SK:ER:SEMENAWI KEYIH BAHRI [SEMIEN KEIH BAHRI]
+14:ER-SE:ER:SERAYE
diff --git a/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN2_LEX.txt
new file mode 100644
index 0000000..153ab66
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ERI/ERI_ADMIN2_LEX.txt
@@ -0,0 +1,38 @@
+1:ER:ERI:ERITREA:Keren:Elabered
+2:ER:ERI:ERITREA:Keren:Hagaz
+3:ER:ERI:ERITREA:Keren:Halhal
+4:ER:ERI:ERITREA:Keren:Melbaso
+1:ER:ERI:ERITREA:Seraye:Adi Kwala
+2:ER:ERI:ERITREA:Seraye:Areza
+3:ER:ERI:ERITREA:Seraye:Dibarwa
+4:ER:ERI:ERITREA:Seraye:Mendefera
+1:ER:ERI:ERITREA:Gash & Setit:Gonye
+2:ER:ERI:ERITREA:Gash & Setit:Omhajer
+3:ER:ERI:ERITREA:Gash & Setit:Shemboko
+4:ER:ERI:ERITREA:Gash & Setit:Teseneye
+1:ER:ERI:ERITREA:Akordat:Akordat
+2:ER:ERI:ERITREA:Akordat:Kerke Bet
+3:ER:ERI:ERITREA:Akordat:Keru
+4:ER:ERI:ERITREA:Akordat:Mansura
+1:ER:ERI:ERITREA:Akele Guzay:Adi Keyih
+2:ER:ERI:ERITREA:Akele Guzay:Dekemehare
+3:ER:ERI:ERITREA:Akele Guzay:Segeneyiti
+4:ER:ERI:ERITREA:Akele Guzay:Senafe
+1:ER:ERI:ERITREA:Hamassien:Debubawi Bahri
+2:ER:ERI:ERITREA:Hamassien:Debubawi Hamasen
+3:ER:ERI:ERITREA:Hamassien:Mirabawi Hamasen
+4:ER:ERI:ERITREA:Hamassien:Semenawi Bahri
+5:ER:ERI:ERITREA:Hamassien:Semenawi Hamasen
+1:ER:ERI:ERITREA:Key Bahir:Ginda
+2:ER:ERI:ERITREA:Key Bahir:Harigo
+3:ER:ERI:ERITREA:Key Bahir:Mitsiwa
+4:ER:ERI:ERITREA:Key Bahir:Sheib
+5:ER:ERI:ERITREA:Key Bahir:Wekiro
+6:ER:ERI:ERITREA:Key Bahir:Zula
+1:ER:ERI:ERITREA:Asseb:Beyilul
+2:ER:ERI:ERITREA:Asseb:Edi
+3:ER:ERI:ERITREA:Asseb:Mersa Fatima
+4:ER:ERI:ERITREA:Asseb:Rahayita
+5:ER:ERI:ERITREA:Asseb:Tiyo
+1:ER:ERI:ERITREA:Sahel:Afabet
+2:ER:ERI:ERITREA:Sahel:Karora
diff --git a/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d145f97
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN1_LEX.txt
@@ -0,0 +1,59 @@
+1:ES-C:ES:A CORUA
+2:ES-AB:ES:ALBACETE
+3:ES-A:ES:ALICANTE
+4:ES-AL:ES:ALMERA
+5:ES-AD:ES:ANDALUCIA
+6:ES-AR:ES:ARAGON
+7:ES-O:ES:ASTURIAS
+8:ES-BA:ES:BADAJOZ
+9:ES-PM:ES:BALEARES
+10:ES-B:ES:BARCELONA
+11:ES-BU:ES:BURGOS
+12:ES-CN:ES:CANARIAS
+13:ES-S:ES:CANTABRIA
+14:ES-CS:ES:CASTELLN
+15:ES-MA:ES:CASTILLA   LA MANCHA
+16:ES-LE:ES:CASTILLA   LEON
+17:ES-CT:ES:CATALUNA
+18:ES-CC:ES:CCERES
+19:ES-CA:ES:CDIZ
+20:ES-CE:ES:CEUTA
+21:ES-CR:ES:CIUDAD REAL
+22:ES-CO:ES:CRDOBA
+23:ES-CU:ES:CUENCA
+24:ES-ET:ES:EXTREMADURA
+25:ES-GA:ES:GALICIA
+26:ES-GI:ES:GIRONA
+27:ES-GR:ES:GRANADA
+28:ES-GU:ES:GUADALAJARA
+29:ES-SS:ES:GUIPZCOA
+30:ES-H:ES:HUELVA
+31:ES-HU:ES:HUESCA
+32:ES-J:ES:JAEN
+33:ES-LO:ES:LA RIOJA
+34:ES-GC:ES:LAS PALMAS
+35:ES-VI:ES:LAVA
+36:ES-L:ES:LLEIDA
+37:ES-LU:ES:LUGO
+38:ES-M:ES:MADRID
+39:ES-ML:ES:MELILLA
+40:ES-MU:ES:MURCIA
+41:ES-NA:ES:NAVARRA
+42:ES-OR:ES:OURENSE
+43:ES-VA:ES:PAIS VASCO
+44:ES-P:ES:PALENCIA
+45:ES-PO:ES:PONTEVEDRA
+46:ES-RI:ES:RIOJA
+47:ES-SA:ES:SALAMANCA
+48:ES-TF:ES:SANTA CRUZ DE TENERIFE
+49:ES-SG:ES:SEGOVIA
+50:ES-SE:ES:SEVILLA
+51:ES-SO:ES:SORIA
+52:ES-T:ES:TARRAGONA
+53:ES-TE:ES:TERUEL
+54:ES-TO:ES:TOLEDO
+55:ES-V:ES:VALENCIA
+56:ES-AV:ES:VILA
+57:ES-BI:ES:VIZCAYA
+58:ES-ZA:ES:ZAMORA
+59:ES-Z:ES:ZARAGOZA
diff --git a/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ESP/ESP_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..66d1199
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN1_LEX.txt
@@ -0,0 +1,16 @@
+1:FI-AL:FI:ALAND/AHVENANMAA
+2:FI-ES:FI:ETEL SUOMEN LNI
+3:FI-TA:FI:H„ME/TAVASTEHUS
+4:FI-IS:FI:IT SUOMEN LNI
+5:FI-KE:FI:KESKI SUOMI/MELLERSTA FINLAND
+6:FI-KU:FI:KUOPIO
+7:FI-KY:FI:KYMI/KYMMENE
+8:FI-LL:FI:LAPPI/LAPPLAND
+9:FI-LS:FI:LNSI SUOMEN LNI
+10:FI-MK:FI:MIKKELI/ST MICHEL
+11:FI-UL:FI:OULU/ULEABORG
+12:FI-OL:FI:OULUN LNI
+13:FI-PO:FI:POHJOIS KARJALA/NORRA KARELEN
+14:FI-TU:FI:TURKU PORI/ABO BJ”RNEBORG
+15:FI-UU:FI:UUDENMAA/NYLAND
+16:FI-VA:FI:VAASA/VASA
diff --git a/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FIN/FIN_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..56fd1e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN1_LEX.txt
@@ -0,0 +1,114 @@
+1:FR-0:FR:AIN
+2:FR-02:FR:AISNE
+3:FR-03:FR:ALLIER
+4:FR-04:FR:ALPES DE HAUTE PROVENCE
+5:FR-06:FR:ALPES MARITIMES
+6:FR-AL:FR:ALSACE
+7:FR-AQ:FR:AQUITAINE
+8:FR-07:FR:ARDECHE
+9:FR-08:FR:ARDENNES
+10:FR-09:FR:ARIEGE
+11:FR-:FR:AUDE
+12:FR-AU:FR:AUVERGNE
+13:FR-2:FR:AVEYRON
+14:FR-67:FR:BAS RHIN
+15:FR-BA:FR:BASSE NORMANDIE
+16:FR-3:FR:BOUCHES DU RHONE
+17:FR-BO:FR:BOURGOGNE
+18:FR-BR:FR:BRETAGNE
+19:FR-4:FR:CALVADOS
+20:FR-5:FR:CANTAL
+21:FR-CE:FR:CENTRE
+22:FR-CH:FR:CHAMPAGNE ARDENNE
+23:FR-6:FR:CHARENTE
+24:FR-7:FR:CHARENTE MARITIME
+25:FR-8:FR:CHER
+26:FR-9:FR:CORREZE
+27:FR-2A:FR:CORSE DU SUD
+28:FR-22:FR:COTES DARMOR
+29:FR-23:FR:CREUSE
+30:FR-79:FR:DEUX SEVRES
+31:FR-24:FR:DORDOGNE
+32:FR-25:FR:DOUBS
+33:FR-26:FR:DROME
+34:FR-27:FR:EURE
+35:FR-28:FR:EURE ET LOIR
+36:FR-29:FR:FINISTERE
+37:FR-CO:FR:FRANCHE COMTE
+38:FR-30:FR:GARD
+39:FR-32:FR:GERS
+40:FR-33:FR:GIRONDE
+41:FR-68:FR:HAUT RHIN
+42:FR-2B:FR:HAUTE CORSE
+43:FR-43:FR:HAUTE LOIRE
+44:FR-52:FR:HAUTE MARNE
+45:FR-HA:FR:HAUTE NORMANDIE
+46:FR-70:FR:HAUTE SAONE
+47:FR-74:FR:HAUTE SAVOIE
+48:FR-87:FR:HAUTE VIENNE
+49:FR-05:FR:HAUTES ALPES
+50:FR-65:FR:HAUTES PYRENEES
+51:FR-92:FR:HAUTS DE SEINE
+52:FR-34:FR:HERAULT
+53:FR-IF:FR:ILE DE FRANCE
+54:FR-35:FR:ILLE ET VILAINE
+55:FR-36:FR:INDRE
+56:FR-37:FR:INDRE ET LOIRE
+57:FR-38:FR:ISERE
+58:FR-39:FR:JURA
+59:FR-40:FR:LANDES
+60:FR-LA:FR:LANGUEDOC ROUSSILLON
+61:FR-LI:FR:LIMOUSIN
+62:FR-42:FR:LOIRE
+63:FR-44:FR:LOIRE ATLANTIQUE
+64:FR-45:FR:LOIRET
+65:FR-LO:FR:LORRAINE
+66:FR-46:FR:LOT
+67:FR-47:FR:LOT ET GARONNE
+68:FR-48:FR:LOZERE
+69:FR-49:FR:MAINE ET LOIRE
+70:FR-50:FR:MANCHE
+71:FR-53:FR:MAYENNE
+72:FR-YT:FR:MAYOTTE (SEE ALSO SEPARATE ENTRY UNDER YT)
+73:FR-54:FR:MEURTHE ET MOSELLE
+74:FR-55:FR:MEUSE
+75:FR-MP:FR:MIDI PYRENEES
+76:FR-56:FR:MORBIHAN
+77:FR-57:FR:MOSELLE
+78:FR-58:FR:NIEVRE
+79:FR-59:FR:NORD
+80:FR-PC:FR:NORD   PAS DE CALAIS
+81:FR-NC:FR:NOUVELLE CALEDONIE (SEE ALSO SEPARATE ENTRY UNDER NC)
+82:FR-60:FR:OISE
+83:FR-75:FR:PARIS
+84:FR-62:FR:PAS DE CALAIS
+85:FR-PL:FR:PAYS DE LA LOIRE
+86:FR-PI:FR:PICARDIE
+87:FR-PO:FR:POITOU CHARENTES
+88:FR-PF:FR:POLYNESIE FRANCAISE (SEE ALSO SEPARATE ENTRY UNDER PF)
+89:FR-PA:FR:PROVENCE ALPES COTE D'AZUR
+90:FR-63:FR:PUY DE DOME
+91:FR-64:FR:PYRENEES ATLANTIQUES
+92:FR-66:FR:PYRENEES ORIENTALES
+93:FR-69:FR:RHONE
+94:FR-RH:FR:RHONE ALPES
+95:FR-PM:FR:SAINT PIERRE ET MIQUELON (SEE ALSO SEPARATE ENTRY UNDER PM)
+96:FR-72:FR:SARTHE
+97:FR-73:FR:SAVOIE
+98:FR-77:FR:SEINE ET MARNE
+99:FR-76:FR:SEINE MARITIME
+100:FR-93:FR:SEINE SAINT DENIS
+101:FR-80:FR:SOMME
+102:FR-82:FR:TARN ET GARONNE
+103:FR-TF:FR:TERRES AUSTRALES FRANCAISES (SEE ALSO SEPARATE ENTRY UNDER TF)
+104:FR-90:FR:TERRITOIRE DE BELFORT
+105:FR-94:FR:VAL DE MARNE
+106:FR-95:FR:VAL DOISE
+107:FR-83:FR:VAR
+108:FR-84:FR:VAUCLUSE
+109:FR-85:FR:VENDEE
+110:FR-86:FR:VIENNE
+111:FR-88:FR:VOSGES
+112:FR-WF:FR:WALLIS ET FUTUNA (SEE ALSO SEPARATE ENTRY UNDER WF)
+113:FR-89:FR:YONNE
+114:FR-78:FR:YVELINES
diff --git a/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FRA/FRA_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN1_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/FRO/FRO_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..5d7d580
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:GA-1:GA:ESTUAIRE
+2:GA-2:GA:HAUT OGOOUE
+3:GA-3:GA:MOYEN OGOOUE
+4:GA-4:GA:NGOUNIE
+5:GA-5:GA:NYANGA
+6:GA-6:GA:OGOOUE IVINDO
+7:GA-7:GA:OGOOUE LOLO
+8:GA-8:GA:OGOOUE MARITIME
+9:GA-9:GA:WOULEU NTEM
diff --git a/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e33996f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GAB/GAB_ADMIN2_LEX.txt
@@ -0,0 +1,46 @@
+1:GA:GAB:GABON:Wouleu-Ntem:Haut-Como (Medouneu)
+2:GA:GAB:GABON:Wouleu-Ntem:Haut-Ntem (Minvoul)
+3:GA:GAB:GABON:Wouleu-Ntem:Ntem (Bitam)
+4:GA:GAB:GABON:Wouleu-Ntem:Okano (Mitzik)
+5:GA:GAB:GABON:Wouleu-Ntem:Woleu (Oyem)
+1:GA:GAB:GABON:Estuaire:Komo (Kango)
+2:GA:GAB:GABON:Estuaire:Komo-Mondah (Ntoum)
+3:GA:GAB:GABON:Estuaire:Libreville
+4:GA:GAB:GABON:Estuaire:Noya (Cocobeach)
+1:GA:GAB:GABON:Haut-Ogooue:Djoue (Onga)
+2:GA:GAB:GABON:Haut-Ogooue:Djouori-agnili (Bongovill
+3:GA:GAB:GABON:Haut-Ogooue:Lekabi-Iewolo (Ngouoni)
+4:GA:GAB:GABON:Haut-Ogooue:Lekoko (Bakoumba)
+5:GA:GAB:GABON:Haut-Ogooue:Lekoni-Lekori (Akieni)
+6:GA:GAB:GABON:Haut-Ogooue:Lembombi-Leyou (Mouanda)
+7:GA:GAB:GABON:Haut-Ogooue:Mpassa (Franceville)
+8:GA:GAB:GABON:Haut-Ogooue:Ogouoe-Letili (Boumango)
+9:GA:GAB:GABON:Haut-Ogooue:Plateaux (Lekoni)
+10:GA:GAB:GABON:Haut-Ogooue:Sebe-brikolo (Okondja)
+1:GA:GAB:GABON:Ogooue-Ivindo:Ivindo (Makokou)
+2:GA:GAB:GABON:Ogooue-Ivindo:Lope (Booue)
+3:GA:GAB:GABON:Ogooue-Ivindo:Mvoung (Oveng)
+4:GA:GAB:GABON:Ogooue-Ivindo:Zadie (Mekambo)
+1:GA:GAB:GABON:Ngounie:Boumi-lowetsi (Mbigou)
+2:GA:GAB:GABON:Ngounie:Dola (Ndende)
+3:GA:GAB:GABON:Ngounie:Douya Onoye (Mouila)
+4:GA:GAB:GABON:Ngounie:Louetsi-Bibaka (Malinga)
+5:GA:GAB:GABON:Ngounie:Louetsi-Wano (Lebamba)
+6:GA:GAB:GABON:Ngounie:Mougalaba (Guietsou)
+7:GA:GAB:GABON:Ngounie:Ndolou (Mandji)
+8:GA:GAB:GABON:Ngounie:Ogoulou (Mimongo)
+9:GA:GAB:GABON:Ngounie:Tsamba Mangotsi (Foug.)
+1:GA:GAB:GABON:Nyanga:Basse Banio (Mayumba)
+2:GA:GAB:GABON:Nyanga:Douigny (Moabi)
+3:GA:GAB:GABON:Nyanga:Doutsila (Mabanda)
+4:GA:GAB:GABON:Nyanga:Haute-Banio (Ndindi)
+5:GA:GAB:GABON:Nyanga:Mougoutsi (Tchibanga)
+1:GA:GAB:GABON:Ogooue-Maritime:Bendje (Port Gentil)
+2:GA:GAB:GABON:Ogooue-Maritime:Etinboue (Omboue)
+3:GA:GAB:GABON:Ogooue-Maritime:Ndougou (Gamba)
+1:GA:GAB:GABON:Ogooue-Lolo:Lolo Bouenguidi (Koula.)
+2:GA:GAB:GABON:Ogooue-Lolo:Lombo-Bouenguidi (Pana)
+3:GA:GAB:GABON:Ogooue-Lolo:Mouloudnou (Latoursville)
+4:GA:GAB:GABON:Ogooue-Lolo:Offoue-Onoye (Iboundji)
+1:GA:GAB:GABON:Moyen Ogooue:Abanga-Bigne (Ndjole)
+2:GA:GAB:GABON:Moyen Ogooue:Ogooue et lacs (Lambar.)
diff --git a/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f86ea54
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN1_LEX.txt
@@ -0,0 +1,249 @@
+1:GB-ABE:GB:ABERDEEN CITY
+2:GB-ABD:GB:ABERDEENSHIRE
+3:GB-ANS:GB:ANGUS
+4:GB-ANT:GB:ANTRIM
+5:GB-ARD:GB:ARDS
+6:GB-AGB:GB:ARGYLL AND BUTE
+7:GB-ARM:GB:ARMAGH
+8:GB-AVO:GB:AVON
+9:GB-BLA:GB:BALLYMENA
+10:GB-BLY:GB:BALLYMONEY
+11:GB-BNB:GB:BANBRIDGE
+12:GB-BDG:GB:BARKING AND DAGENHAM
+13:GB-BNE:GB:BARNET
+14:GB-BNS:GB:BARNSLEY
+15:GB-BAS:GB:BATH AND NORTH EAST SOMERSET
+16:GB-BDF:GB:BEDFORDSHIRE
+17:GB-BFS:GB:BELFAST
+18:GB-BER:GB:BERKS
+19:GB-BEX:GB:BEXLEY
+20:GB-BIR:GB:BIRMINGHAM
+21:GB-BBD:GB:BLACKBURN WITH DARWEN
+22:GB-BPL:GB:BLACKPOOL
+23:GB-BGW:GB:BLAENAU GWENT
+24:GB-BOL:GB:BOLTON
+25:GB-BCF:GB:BORD CENTR FIFE LOTHIAN TAY
+26:GB-BMH:GB:BOURNEMOUTH
+27:GB-BRC:GB:BRACKNELL FOREST
+28:GB-BRD:GB:BRADFORD
+29:GB-BEN:GB:BRENT
+30:GB-BGE:GB:BRIDGEND [PEN Y BONT AR OGWR GB POG]
+31:GB-BNH:GB:BRIGHTON AND HOVE
+32:GB-BST:GB:BRISTOL, CITY OF
+33:GB-BRY:GB:BROMLEY
+34:GB-BKM:GB:BUCKINGHAMSHIRE
+35:GB-BUR:GB:BURY
+36:GB-CAY:GB:CAERPHILLY [CAERFFILI GB CAF]
+37:GB-CLD:GB:CALDERDALE
+38:GB-CAM:GB:CAMBRIDGESHIRE
+39:GB-CMD:GB:CAMDEN
+40:GB-CRF:GB:CARDIFF [CAERDYDD GB CRD]
+41:GB-CMN:GB:CARMARTHENSHIRE [SIR GAERFYRDDIN GB GFY]
+42:GB-CKF:GB:CARRICKFERGUS
+43:GB-CSR:GB:CASTLEREAGH
+44:GB-CGN:GB:CEREDIGION [SIR CEREDIGION]
+45:GB-CHS:GB:CHESHIRE
+46:GB-CLK:GB:CLACKMANNANSHIRE
+47:GB-CLV:GB:CLEVELAND
+48:GB-CLW:GB:CLWYD
+49:GB-CLR:GB:COLERAINE
+50:GB-CWY:GB:CONWY
+51:GB-CKT:GB:COOKSTOWN
+52:GB-CON:GB:CORNWALL
+53:GB-COV:GB:COVENTRY
+54:GB-CGV:GB:CRAIGAVON
+55:GB-CRY:GB:CROYDON
+56:GB-CMA:GB:CUMBRIA
+57:GB-DAL:GB:DARLINGTON
+58:GB-DEN:GB:DENBIGHSHIRE [SIR DDINBYCH GB DDB]
+59:GB-DER:GB:DERBY
+60:GB-DBY:GB:DERBYSHIRE
+61:GB-DRY:GB:DERRY
+62:GB-DEV:GB:DEVON
+63:GB-DNC:GB:DONCASTER
+64:GB-DOR:GB:DORSET
+65:GB-DOW:GB:DOWN
+66:GB-DUD:GB:DUDLEY
+67:GB-DGY:GB:DUMFRIES GALLO
+68:GB-DND:GB:DUNDEE CITY
+69:GB-DGN:GB:DUNGANNON
+70:GB-DUR:GB:DURHAM
+71:GB-EAL:GB:EALING
+72:GB-EAG:GB:EAST ANGLIA
+73:GB-EAY:GB:EAST AYRSHIRE
+74:GB-EDU:GB:EAST DUNBARTONSHIRE
+75:GB-ELN:GB:EAST LOTHIAN
+76:GB-ERW:GB:EAST RENFREWSHIRE
+77:GB-ERY:GB:EAST RIDING OF YORKSHIRE
+78:GB-ESX:GB:EAST SUSSEX
+79:GB-EDH:GB:EDINBURGH, CITY OF
+80:GB-ELS:GB:EILEAN SIAR
+81:GB-ENF:GB:ENFIELD
+82:GB-ESS:GB:ESSEX
+83:GB-FAL:GB:FALKIRK
+84:GB-FER:GB:FERMANAGH
+85:GB-FIF:GB:FIFE
+86:GB-FLN:GB:FLINTSHIRE [SIR Y FFLINT GB FFL]
+87:GB-GAT:GB:GATESHEAD
+88:GB-GLG:GB:GLASGOW CITY
+89:GB-GLS:GB:GLOUCESTERSHIRE
+90:GB-GRA:GB:GRAMPIAN
+91:GB-LND:GB:GREATER LONDON
+92:GB-MAN:GB:GREATER MANCHESTER
+93:GB-GRE:GB:GREENWICH
+94:GB-GSY:GB:GUERNSEY [GUERNESEY]
+95:GB-GWT:GB:GWENT
+96:GB-GWN:GB:GWYNEDD
+97:GB-HCK:GB:HACKNEY
+98:GB-HAL:GB:HALTON
+99:GB-HMF:GB:HAMMERSMITH AND FULHAM
+100:GB-HAM:GB:HAMPSHIRE
+101:GB-HRY:GB:HARINGEY
+102:GB-HRW:GB:HARROW
+103:GB-HPL:GB:HARTLEPOOL
+104:GB-HAV:GB:HAVERING
+105:GB-HEF:GB:HEREFORD
+106:GB-HRT:GB:HERTFORDSHIRE
+107:GB-HLD:GB:HIGHLAND
+108:GB-HGL:GB:HIGHLANDS
+109:GB-HIL:GB:HILLINGDON
+110:GB-HNS:GB:HOUNSLOW
+111:GB-HUM:GB:HUMBERSIDE
+112:GB-IVC:GB:INVERCLYDE
+113:GB-AGY:GB:ISLE OF ANGLESEY [SIR YNYS MON GB YNM]
+114:GB-IOW:GB:ISLE OF WIGHT
+115:GB-IOS:GB:ISLES OF SCILLY
+116:GB-ISL:GB:ISLINGTON
+117:GB-JSY:GB:JERSEY
+118:GB-KEC:GB:KENSINGTON AND CHELSEA
+119:GB-KEN:GB:KENT
+120:GB-KHL:GB:KINGSTON UPON HULL, CITY OF
+121:GB-KTT:GB:KINGSTON UPON THAMES
+122:GB-KIR:GB:KIRKLEES
+123:GB-KWL:GB:KNOWSLEY
+124:GB-LBH:GB:LAMBETH
+125:GB-LAN:GB:LANCASHIRE
+126:GB-LRN:GB:LARNE
+127:GB-LDS:GB:LEEDS
+128:GB-LCE:GB:LEICESTER
+129:GB-LEC:GB:LEICESTERSHIRE
+130:GB-LEW:GB:LEWISHAM
+131:GB-LMV:GB:LIMAVADY
+132:GB-LIN:GB:LINCOLNSHIRE
+133:GB-LSB:GB:LISBURN
+134:GB-LIV:GB:LIVERPOOL
+135:GB-LUT:GB:LUTON
+136:GB-MFT:GB:MAGHERAFELT
+137:GB-MDW:GB:MEDWAY
+138:GB-MER:GB:MERSEYSIDE
+139:GB-MTY:GB:MERTHYR TYDFIL [MERTHYR TUDFUL GB MTU]
+140:GB-MRT:GB:MERTON
+141:GB-MDB:GB:MIDDLESBROUGH
+142:GB-MLN:GB:MIDLOTHIAN
+143:GB-MIK:GB:MILTON KEYNES
+144:GB-MON:GB:MONMOUTHSHIRE [SIR FYNWY GB FYN]
+145:GB-MRY:GB:MORAY
+146:GB-MYL:GB:MOYLE
+147:GB-NTL:GB:NEATH PORT TALBOT [CASTELL NEDD PORT TALBOT GB CTL]
+148:GB-NET:GB:NEWCASTLE UPON TYNE
+149:GB-NWM:GB:NEWHAM
+150:GB-NWP:GB:NEWPORT [CASNEWYDD GB CNW]
+151:GB-NYM:GB:NEWRY AND MOURNE
+152:GB-NTA:GB:NEWTOWNABBEY
+153:GB-NFK:GB:NORFOLK
+154:GB-NAY:GB:NORTH AYRSHIRE
+155:GB-NDN:GB:NORTH DOWN
+156:GB-NEL:GB:NORTH EAST LINCOLNSHIRE
+157:GB-NLK:GB:NORTH LANARKSHIRE
+158:GB-NLN:GB:NORTH LINCOLNSHIRE
+159:GB-NSM:GB:NORTH SOMERSET
+160:GB-NTY:GB:NORTH TYNESIDE
+161:GB-NYK:GB:NORTH YORKSHIRE
+162:GB-NTH:GB:NORTHAMPTONSHIRE
+163:GB-NIR:GB:NORTHERN IRELAND
+164:GB-NBL:GB:NORTHUMBERLAND
+165:GB-NGM:GB:NOTTINGHAM
+166:GB-NTT:GB:NOTTINGHAMSHIRE
+167:GB-OLD:GB:OLDHAM
+168:GB-OMH:GB:OMAGH
+169:GB-ORK:GB:ORKNEY ISLANDS
+170:GB-OXF:GB:OXFORDSHIRE
+171:GB-PEM:GB:PEMBROKESHIRE [SIR BENFRO GB BNF]
+172:GB-PKN:GB:PERTH AND KINROSS
+173:GB-PTE:GB:PETERBOROUGH
+174:GB-PLY:GB:PLYMOUTH
+175:GB-POL:GB:POOLE
+176:GB-POR:GB:PORTSMOUTH
+177:GB-POW:GB:POWYS
+178:GB-RDG:GB:READING
+179:GB-RDB:GB:REDBRIDGE
+180:GB-RCC:GB:REDCAR AND CLEVELAND
+181:GB-RFW:GB:RENFREWSHIRE
+182:GB-RCT:GB:RHONDDA, CYNON, TAFF [RHONDDA, CYNON,TAF]
+183:GB-RIC:GB:RICHMOND UPON THAMES
+184:GB-RCH:GB:ROCHDALE
+185:GB-ROT:GB:ROTHERHAM
+186:GB-RUT:GB:RUTLAND
+187:GB-SLF:GB:SALFORD
+188:GB-SAW:GB:SANDWELL
+189:GB-SCB:GB:SCOTTISH BORDERS, THE
+190:GB-SFT:GB:SEFTON
+191:GB-SHF:GB:SHEFFIELD
+192:GB-ZET:GB:SHETLAND ISLANDS
+193:GB-SHR:GB:SHROPSHIRE
+194:GB-SLG:GB:SLOUGH
+195:GB-SOL:GB:SOLIHULL
+196:GB-SOM:GB:SOMERSET
+197:GB-SAY:GB:SOUTH AYRSHIRE
+198:GB-SGC:GB:SOUTH GLOUCESTERSHIRE
+199:GB-SLK:GB:SOUTH LANARKSHIRE
+200:GB-STY:GB:SOUTH TYNESIDE
+201:GB-SYO:GB:SOUTH YORKSHIRE
+202:GB-STH:GB:SOUTHAMPTON
+203:GB-SOS:GB:SOUTHEND ON SEA
+204:GB-SWK:GB:SOUTHWARK
+205:GB-SHN:GB:ST. HELENS
+206:GB-STS:GB:STAFFORDSHIRE
+207:GB-STG:GB:STIRLING
+208:GB-SKP:GB:STOCKPORT
+209:GB-STT:GB:STOCKTON ON TEES
+210:GB-STE:GB:STOKE ON TRENT
+211:GB-STB:GB:STRABANE
+212:GB-SFK:GB:SUFFOLK
+213:GB-SND:GB:SUNDERLAND
+214:GB-SRY:GB:SURREY
+215:GB-STN:GB:SUTTON
+216:GB-SWA:GB:SWANSEA [ABERTAWE GB ATA]
+217:GB-SWD:GB:SWINDON
+218:GB-TAM:GB:TAMESIDE
+219:GB-TFW:GB:TELFORD AND WREKIN
+220:GB-THR:GB:THURROCK
+221:GB-TOB:GB:TORBAY
+222:GB-TOF:GB:TORFAEN [TOR FAEN]
+223:GB-TWH:GB:TOWER HAMLETS
+224:GB-TRF:GB:TRAFFORD
+225:GB-UK:GB:UNITED KINGDOM
+226:GB-VGL:GB:VALE OF GLAMORGAN, THE [BRO MORGANNWG GB BMG]
+227:GB-WKF:GB:WAKEFIELD
+228:GB-WLL:GB:WALSALL
+229:GB-WFT:GB:WALTHAM FOREST
+230:GB-WND:GB:WANDSWORTH
+231:GB-WRT:GB:WARRINGTON
+232:GB-WAR:GB:WARWICKSHIRE
+233:GB-WBK:GB:WEST BERKSHIRE
+234:GB-WDU:GB:WEST DUNBARTONSHIRE
+235:GB-WLN:GB:WEST LOTHIAN
+236:GB-WMD:GB:WEST MIDLANDS
+237:GB-WMI:GB:WEST MIDLANDS (COUNTY)
+238:GB-WSX:GB:WEST SUSSEX
+239:GB-WYO:GB:WEST YORKSHIRE
+240:GB-WSM:GB:WESTMINSTER
+241:GB-WGN:GB:WIGAN
+242:GB-WIL:GB:WILTSHIRE
+243:GB-WNM:GB:WINDSOR AND MAIDENHEAD
+244:GB-WRL:GB:WIRRAL
+245:GB-WOK:GB:WOKINGHAM
+246:GB-WLV:GB:WOLVERHAMPTON
+247:GB-WOR:GB:WORCESTERSHIRE
+248:GB-WRX:GB:WREXHAM [WRECSAM GB WRC]
+249:GB-YOR:GB:YORK
diff --git a/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GBR/GBR_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..cc64bf2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:GH-AH:GH:ASHANTI
+2:GH-BA:GH:BRONG AHAFO
+3:GH-CP:GH:CENTRAL [CENTRAL1]
+4:GH-EP:GH:EASTERN [EASTERN3]
+5:GH-AA:GH:GREATER ACCRA
+6:GH-NP:GH:NORTHERN
+7:GH-UE:GH:UPPER EAST
+8:GH-UW:GH:UPPER WEST
+9:GH-TV:GH:VOLTA
+10:GH-WP:GH:WESTERN2
diff --git a/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e562864
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GHA/GHA_ADMIN2_LEX.txt
@@ -0,0 +1,141 @@
+1:GH:GHA:GHANA:Greater Accra:Accra-Tema
+2:GH:GHA:GHANA:Greater Accra:Ada
+3:GH:GHA:GHANA:Greater Accra:Dangbe
+4:GH:GHA:GHANA:Greater Accra:Ga
+5:GH:GHA:GHANA:Greater Accra:Shai
+6:GH:GHA:GHANA:Greater Accra:Tema (Accra)
+1:GH:GHA:GHANA:Central:Abura
+2:GH:GHA:GHANA:Central:Agonaman
+3:GH:GHA:GHANA:Central:Ajumako
+4:GH:GHA:GHANA:Central:Anyan-Breman
+5:GH:GHA:GHANA:Central:Asebu
+6:GH:GHA:GHANA:Central:Assin
+7:GH:GHA:GHANA:Central:Awutu-Senya
+8:GH:GHA:GHANA:Central:Cape Coast
+9:GH:GHA:GHANA:Central:Denkyira
+10:GH:GHA:GHANA:Central:Ekumfi
+11:GH:GHA:GHANA:Central:Gomoa-Akyempim
+12:GH:GHA:GHANA:Central:Gomoa-Assin-Ajumako
+13:GH:GHA:GHANA:Central:Komenda-Edina-Aguafo-Abre
+14:GH:GHA:GHANA:Central:Mfantsiman
+15:GH:GHA:GHANA:Central:Nyaakrom-Nkum
+16:GH:GHA:GHANA:Central:Swedru
+17:GH:GHA:GHANA:Central:Twifo Denkyira Heman
+18:GH:GHA:GHANA:Central:Winneba
+1:GH:GHA:GHANA:Upper East:Bawku
+2:GH:GHA:GHANA:Upper East:Bolgatanga-Tongo
+3:GH:GHA:GHANA:Upper East:Bongo-Nabdam
+4:GH:GHA:GHANA:Upper East:Chiana-Paga
+5:GH:GHA:GHANA:Upper East:Kusanaba-Zebilla
+6:GH:GHA:GHANA:Upper East:Navrongo
+7:GH:GHA:GHANA:Upper East:Pusiga-Pulimakum
+8:GH:GHA:GHANA:Upper East:Sandemen
+9:GH:GHA:GHANA:Upper East:Tempane-Garu
+1:GH:GHA:GHANA:Upper West:Lambussie-Nandom
+2:GH:GHA:GHANA:Upper West:Lawra Jirapa
+3:GH:GHA:GHANA:Upper West:Nadawli-Funsi
+4:GH:GHA:GHANA:Upper West:Tumu
+5:GH:GHA:GHANA:Upper West:Wa
+1:GH:GHA:GHANA:Western:Ahanta
+2:GH:GHA:GHANA:Western:Amenfi
+3:GH:GHA:GHANA:Western:Aowin
+4:GH:GHA:GHANA:Western:Axim
+5:GH:GHA:GHANA:Western:Dompim
+6:GH:GHA:GHANA:Western:Jomoro
+7:GH:GHA:GHANA:Western:Juabeso-Bia
+8:GH:GHA:GHANA:Western:Prestea
+9:GH:GHA:GHANA:Western:Sefwi-Bibiani Bekwai
+10:GH:GHA:GHANA:Western:Sekondi-Takoradi
+11:GH:GHA:GHANA:Western:Shama
+12:GH:GHA:GHANA:Western:Tarkwa-Aboso
+13:GH:GHA:GHANA:Western:Wiawso
+1:GH:GHA:GHANA:Northern:Bimbilla
+2:GH:GHA:GHANA:Northern:Bole
+3:GH:GHA:GHANA:Northern:Damango
+4:GH:GHA:GHANA:Northern:Gushiegu-Chereponi
+5:GH:GHA:GHANA:Northern:Nalerigu
+6:GH:GHA:GHANA:Northern:Saboba-Zabzugu
+7:GH:GHA:GHANA:Northern:Salaga
+8:GH:GHA:GHANA:Northern:Savelugu
+9:GH:GHA:GHANA:Northern:Tamale
+10:GH:GHA:GHANA:Northern:Tolon
+11:GH:GHA:GHANA:Northern:Walewale
+12:GH:GHA:GHANA:Northern:Yendi
+1:GH:GHA:GHANA:Volta:Adaklu-Anyigbe
+2:GH:GHA:GHANA:Volta:Akan Bowire
+3:GH:GHA:GHANA:Volta:Akan Wawa
+4:GH:GHA:GHANA:Volta:Anlo
+5:GH:GHA:GHANA:Volta:Avenor
+6:GH:GHA:GHANA:Volta:Biakoye
+7:GH:GHA:GHANA:Volta:Buem
+8:GH:GHA:GHANA:Volta:Dayi
+9:GH:GHA:GHANA:Volta:Dutasor
+10:GH:GHA:GHANA:Volta:Dzoze
+11:GH:GHA:GHANA:Volta:Gbi
+12:GH:GHA:GHANA:Volta:Ho
+13:GH:GHA:GHANA:Volta:Keta
+14:GH:GHA:GHANA:Volta:Kete-Krachi
+15:GH:GHA:GHANA:Volta:Kpandu
+16:GH:GHA:GHANA:Volta:Some-Aflao
+17:GH:GHA:GHANA:Volta:Tongu
+18:GH:GHA:GHANA:Volta:Yingor
+1:GH:GHA:GHANA:Ashanti:Adaagya
+2:GH:GHA:GHANA:Ashanti:Adansi
+3:GH:GHA:GHANA:Ashanti:Agona Ashanti
+4:GH:GHA:GHANA:Ashanti:Ahafo-Ano
+5:GH:GHA:GHANA:Ashanti:Akrokerri Dompoase
+6:GH:GHA:GHANA:Ashanti:Amanamo
+7:GH:GHA:GHANA:Ashanti:Amansie
+8:GH:GHA:GHANA:Ashanti:Ashanti-Akin
+9:GH:GHA:GHANA:Ashanti:Atwima-Kwanwoma
+10:GH:GHA:GHANA:Ashanti:Atwima-Nwabiagya
+11:GH:GHA:GHANA:Ashanti:Bekwai
+12:GH:GHA:GHANA:Ashanti:Ejisu
+13:GH:GHA:GHANA:Ashanti:Ejura-Sekodumasi
+14:GH:GHA:GHANA:Ashanti:Juaben
+15:GH:GHA:GHANA:Ashanti:Juaso-Bankaman
+16:GH:GHA:GHANA:Ashanti:Konongo-Odumasi
+17:GH:GHA:GHANA:Ashanti:Kumasi
+18:GH:GHA:GHANA:Ashanti:Kwabre
+19:GH:GHA:GHANA:Ashanti:Lake-Bosomtwi
+20:GH:GHA:GHANA:Ashanti:Mampong
+21:GH:GHA:GHANA:Ashanti:Manso
+22:GH:GHA:GHANA:Ashanti:Mponua
+23:GH:GHA:GHANA:Ashanti:Nsuta-Kwamang-Beposo
+24:GH:GHA:GHANA:Ashanti:Obuasi
+25:GH:GHA:GHANA:Ashanti:Odotobri
+26:GH:GHA:GHANA:Ashanti:Offinso
+27:GH:GHA:GHANA:Ashanti:Sekyere
+28:GH:GHA:GHANA:Ashanti:Tepa
+1:GH:GHA:GHANA:Eastern:Abefiti
+2:GH:GHA:GHANA:Eastern:Abirem
+3:GH:GHA:GHANA:Eastern:Abuakwa
+4:GH:GHA:GHANA:Eastern:Afram
+5:GH:GHA:GHANA:Eastern:Akropong
+6:GH:GHA:GHANA:Eastern:Akwamu-Anum-Boso
+7:GH:GHA:GHANA:Eastern:Asamankese
+8:GH:GHA:GHANA:Eastern:Begoro
+9:GH:GHA:GHANA:Eastern:Birim-Anafo
+10:GH:GHA:GHANA:Eastern:Kade-Akwatia
+11:GH:GHA:GHANA:Eastern:Koforidua
+12:GH:GHA:GHANA:Eastern:Kwaben
+13:GH:GHA:GHANA:Eastern:Manya Krobo
+14:GH:GHA:GHANA:Eastern:Nkawkaw
+15:GH:GHA:GHANA:Eastern:Nsawam-Aburi
+16:GH:GHA:GHANA:Eastern:Oda
+17:GH:GHA:GHANA:Eastern:Suhum
+18:GH:GHA:GHANA:Eastern:Yilo-Krobo-Osudoku
+1:GH:GHA:GHANA:Brong Ahafo:Asutifi
+2:GH:GHA:GHANA:Brong Ahafo:Atebubu
+3:GH:GHA:GHANA:Brong Ahafo:Bechem
+4:GH:GHA:GHANA:Brong Ahafo:Berekum
+5:GH:GHA:GHANA:Brong Ahafo:Dormaa
+6:GH:GHA:GHANA:Brong Ahafo:Duayaw-Nkwanta
+7:GH:GHA:GHANA:Brong Ahafo:Goaso
+8:GH:GHA:GHANA:Brong Ahafo:Jaman
+9:GH:GHA:GHANA:Brong Ahafo:Kukuom
+10:GH:GHA:GHANA:Brong Ahafo:Kwame Danso
+11:GH:GHA:GHANA:Brong Ahafo:Nkoranza
+12:GH:GHA:GHANA:Brong Ahafo:Sunyani
+13:GH:GHA:GHANA:Brong Ahafo:Techiman
+14:GH:GHA:GHANA:Brong Ahafo:Wenchi
diff --git a/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..da04140
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN1_LEX.txt
@@ -0,0 +1,33 @@
+1:GN-BE:GN:BEYLA
+2:GN-BF:GN:BOFFA
+3:GN-BK:GN:BOKE
+4:GN-CO:GN:COYAH
+5:GN-DB:GN:DABOLA
+6:GN-DL:GN:DALABA
+7:GN-DI:GN:DINGUIRAYE
+8:GN-DU:GN:DUBREKA
+9:GN-FA:GN:FARANAH
+10:GN-FO:GN:FORECARIAH
+11:GN-FR:GN:FRIA
+12:GN-GA:GN:GAOUAL
+13:GN-GU:GN:GUEKEDOU
+14:GN-KA:GN:KANKAN
+15:GN-KE:GN:KEROUANE
+16:GN-KD:GN:KINDIA
+17:GN-KS:GN:KISSIDOUGOU
+18:GN-KB:GN:KOUBIA
+19:GN-KN:GN:KOUNDARA
+20:GN-KO:GN:KOUROUSSA
+21:GN-LA:GN:LABE
+22:GN-LE:GN:LELOUMA
+23:GN-LO:GN:LOLA
+24:GN-MC:GN:MACENTA
+25:GN-ML:GN:MALI
+26:GN-MM:GN:MAMOU
+27:GN-MD:GN:MANDIANA
+28:GN-NZ:GN:NZEREKORE
+29:GN-PI:GN:PITA
+30:GN-SI:GN:SIGUIRI
+31:GN-TE:GN:TELIMELE
+32:GN-TO:GN:TOUGUE
+33:GN-YO:GN:YOMOU
diff --git a/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..abb2490
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GIN/GIN_ADMIN2_LEX.txt
@@ -0,0 +1,33 @@
+1:GN:GIN:GUINEA:Kindia:Boffa
+2:GN:GIN:GUINEA:Kindia:Boke
+3:GN:GIN:GUINEA:Kindia:Coyah
+4:GN:GIN:GUINEA:Kindia:Dubreka
+5:GN:GIN:GUINEA:Kindia:Forecariah
+6:GN:GIN:GUINEA:Kindia:Fria
+7:GN:GIN:GUINEA:Kindia:Kindia
+8:GN:GIN:GUINEA:Kindia:Telimele
+1:GN:GIN:GUINEA:Labe:Dalaba
+2:GN:GIN:GUINEA:Labe:Gaoual
+3:GN:GIN:GUINEA:Labe:Koubia
+4:GN:GIN:GUINEA:Labe:Koundara
+5:GN:GIN:GUINEA:Labe:Labe
+6:GN:GIN:GUINEA:Labe:Lelouma
+7:GN:GIN:GUINEA:Labe:Mali
+8:GN:GIN:GUINEA:Labe:Mamou
+9:GN:GIN:GUINEA:Labe:Pita
+10:GN:GIN:GUINEA:Labe:Touge
+1:GN:GIN:GUINEA:Nzerekore:Beyla
+2:GN:GIN:GUINEA:Nzerekore:Gueckedou
+3:GN:GIN:GUINEA:Nzerekore:Kissidougou
+4:GN:GIN:GUINEA:Nzerekore:Lola
+5:GN:GIN:GUINEA:Nzerekore:Macenta
+6:GN:GIN:GUINEA:Nzerekore:Nzerekore
+7:GN:GIN:GUINEA:Nzerekore:Yomou
+1:GN:GIN:GUINEA:Kankan:Dabola
+2:GN:GIN:GUINEA:Kankan:Dinguiraye
+3:GN:GIN:GUINEA:Kankan:Faranah
+4:GN:GIN:GUINEA:Kankan:Kankan
+5:GN:GIN:GUINEA:Kankan:Kerouane
+6:GN:GIN:GUINEA:Kankan:Kouroussa
+7:GN:GIN:GUINEA:Kankan:Mandiana
+8:GN:GIN:GUINEA:Kankan:Siguiri
diff --git a/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ee86fd1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN1_LEX.txt
@@ -0,0 +1,6 @@
+1:GM-B:GM:BANJUL
+2:GM-L:GM:LOWER RIVER
+3:GM-M:GM:MACCARTHY ISLAND
+4:GM-N:GM:NORTH BANK
+5:GM-U:GM:UPPER RIVER
+6:GM-W:GM:WESTERN [WESTERN1]
diff --git a/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f3b4f65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GMB/GMB_ADMIN2_LEX.txt
@@ -0,0 +1,37 @@
+1:GM:GMB:GAMBIA THE:Banjul:Banjul
+2:GM:GMB:GAMBIA THE:Banjul:KUDC
+1:GM:GMB:GAMBIA THE:North Bank:Central Baddibu
+2:GM:GMB:GAMBIA THE:North Bank:Jokadu
+3:GM:GMB:GAMBIA THE:North Bank:Lower Baddibu
+4:GM:GMB:GAMBIA THE:North Bank:Lower Niumi
+5:GM:GMB:GAMBIA THE:North Bank:Upper Baddibu
+6:GM:GMB:GAMBIA THE:North Bank:Upper Niumi
+1:GM:GMB:GAMBIA THE:Western:Foni Bintang-Karenai
+2:GM:GMB:GAMBIA THE:Western:Foni Bondali
+3:GM:GMB:GAMBIA THE:Western:Foni Brefet
+4:GM:GMB:GAMBIA THE:Western:Foni Jarrol
+5:GM:GMB:GAMBIA THE:Western:Foni Kansala
+6:GM:GMB:GAMBIA THE:Western:Kombo Central
+7:GM:GMB:GAMBIA THE:Western:Kombo East
+8:GM:GMB:GAMBIA THE:Western:Kombo North/St Mary
+9:GM:GMB:GAMBIA THE:Western:Kombo South
+1:GM:GMB:GAMBIA THE:Upper River:Fulladu East
+2:GM:GMB:GAMBIA THE:Upper River:Kantora
+3:GM:GMB:GAMBIA THE:Upper River:Sandu
+4:GM:GMB:GAMBIA THE:Upper River:Wuli
+1:GM:GMB:GAMBIA THE:Lower River:Jarra Central
+2:GM:GMB:GAMBIA THE:Lower River:Jarra East
+3:GM:GMB:GAMBIA THE:Lower River:Jarra West
+4:GM:GMB:GAMBIA THE:Lower River:Kiang Central
+5:GM:GMB:GAMBIA THE:Lower River:Kiang East
+6:GM:GMB:GAMBIA THE:Lower River:Kiang West
+1:GM:GMB:GAMBIA THE:Maccarthy Island:Fulladu West
+2:GM:GMB:GAMBIA THE:Maccarthy Island:Lower Saloum
+3:GM:GMB:GAMBIA THE:Maccarthy Island:Maccarthy Island
+4:GM:GMB:GAMBIA THE:Maccarthy Island:Niamina Dankunku
+5:GM:GMB:GAMBIA THE:Maccarthy Island:Niamina East
+6:GM:GMB:GAMBIA THE:Maccarthy Island:Niamina West
+7:GM:GMB:GAMBIA THE:Maccarthy Island:Niani
+8:GM:GMB:GAMBIA THE:Maccarthy Island:Nianija
+9:GM:GMB:GAMBIA THE:Maccarthy Island:Sami
+10:GM:GMB:GAMBIA THE:Maccarthy Island:Upper Saloum
diff --git a/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e7415e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:GW-BA:GW:BAFATA
+2:GW-BM:GW:BIOMBO
+3:GW-BS:GW:BISSAU
+4:GW-BL:GW:BOLAMA
+5:GW-CA:GW:CACHEU
+6:GW-GA:GW:GABU
+7:GW-OI:GW:OIO
+8:GW-QU:GW:QUINARA
+9:GW-TO:GW:TOMBALI
diff --git a/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..c23cc22
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GNB/GNB_ADMIN2_LEX.txt
@@ -0,0 +1,37 @@
+1:GW:GNB:GUINEA BISSAU:Bolama:Bolama
+2:GW:GNB:GUINEA BISSAU:Bolama:Bubaque
+3:GW:GNB:GUINEA BISSAU:Bolama:Caravela (Uno)
+1:GW:GNB:GUINEA BISSAU:Biombo:Prabis
+2:GW:GNB:GUINEA BISSAU:Biombo:Quinhamel
+3:GW:GNB:GUINEA BISSAU:Biombo:Safim
+1:GW:GNB:GUINEA BISSAU:Bafata:Bafata
+2:GW:GNB:GUINEA BISSAU:Bafata:Bambadinca
+3:GW:GNB:GUINEA BISSAU:Bafata:Contuboel
+4:GW:GNB:GUINEA BISSAU:Bafata:Galomaro
+5:GW:GNB:GUINEA BISSAU:Bafata:Gamamundo
+6:GW:GNB:GUINEA BISSAU:Bafata:Xitole
+1:GW:GNB:GUINEA BISSAU:Tombali:Bedanda
+2:GW:GNB:GUINEA BISSAU:Tombali:Cacine
+3:GW:GNB:GUINEA BISSAU:Tombali:Catio
+4:GW:GNB:GUINEA BISSAU:Tombali:Quebo
+1:GW:GNB:GUINEA BISSAU:Quinara:Buba
+2:GW:GNB:GUINEA BISSAU:Quinara:Empada
+3:GW:GNB:GUINEA BISSAU:Quinara:Fulacunda
+4:GW:GNB:GUINEA BISSAU:Quinara:Tite
+1:GW:GNB:GUINEA BISSAU:Bissau:Bissau
+1:GW:GNB:GUINEA BISSAU:Oio:Bissora
+2:GW:GNB:GUINEA BISSAU:Oio:Farim
+3:GW:GNB:GUINEA BISSAU:Oio:Mansaba
+4:GW:GNB:GUINEA BISSAU:Oio:Mansoa
+5:GW:GNB:GUINEA BISSAU:Oio:Nhacra
+1:GW:GNB:GUINEA BISSAU:Gabu:Boe
+2:GW:GNB:GUINEA BISSAU:Gabu:Gabu
+3:GW:GNB:GUINEA BISSAU:Gabu:Piche
+4:GW:GNB:GUINEA BISSAU:Gabu:Pirada
+5:GW:GNB:GUINEA BISSAU:Gabu:Sonaco
+1:GW:GNB:GUINEA BISSAU:Cacheu:Bigene
+2:GW:GNB:GUINEA BISSAU:Cacheu:Bula
+3:GW:GNB:GUINEA BISSAU:Cacheu:Cacheu
+4:GW:GNB:GUINEA BISSAU:Cacheu:Caio
+5:GW:GNB:GUINEA BISSAU:Cacheu:Canghungo
+6:GW:GNB:GUINEA BISSAU:Cacheu:Sao Domingos
diff --git a/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ea96fef
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:GQ-AN:GQ:ANNOBON
+2:GQ-BN:GQ:BIOKO NORTE
+3:GQ-BS:GQ:BIOKO SUR
+4:GQ-CS:GQ:CENTRO SUR
+5:GQ-KN:GQ:KIENTEM
+6:GQ-LI:GQ:LITORAL
+7:GQ-C:GQ:REGION CONTINENTAL
+8:GQ-I:GQ:REGION INSULAR
+9:GQ-WN:GQ:WELENZAS
diff --git a/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN2_LEX.txt
new file mode 100644
index 0000000..44250b5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GNQ/GNQ_ADMIN2_LEX.txt
@@ -0,0 +1,9 @@
+1:GQ:GNQ:EQUATORIAL GUINEA:Kientem:GNQ.L2.6
+1:GQ:GNQ:EQUATORIAL GUINEA:Welenzas:GNQ.L2.5
+1:GQ:GNQ:EQUATORIAL GUINEA:Bioko Sur:GNQ.L2.9
+1:GQ:GNQ:EQUATORIAL GUINEA:Litoral:GNQ.L2.2
+2:GQ:GNQ:EQUATORIAL GUINEA:Litoral:GNQ.L2.3
+3:GQ:GNQ:EQUATORIAL GUINEA:Litoral:GNQ.L2.4
+1:GQ:GNQ:EQUATORIAL GUINEA:Annobon:GNQ.L2.7
+1:GQ:GNQ:EQUATORIAL GUINEA:Centro Sur:GNQ.L2.8
+1:GQ:GNQ:EQUATORIAL GUINEA:Bioko Norte:GNQ.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2a5e561
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN1_LEX.txt
@@ -0,0 +1,57 @@
+1:GR-3:GR:ACHAIA
+2:GR-69:GR:AGIO OROS
+3:GR-0:GR:AITOLIA AKARNANIA
+4:GR-80:GR:ANATOLIKI MAKEDONIA
+5:GR-:GR:ARGOLIS
+6:GR-2:GR:ARKADIA
+7:GR-A:GR:ATTIKI
+8:GR-64:GR:CHALKIDIKI
+9:GR-94:GR:CHANIA
+10:GR-85:GR:CHIOS
+11:GR-8:GR:DODEKANISOS
+12:GR-52:GR:DRAMA
+13:GR-71:GR:DYTIKI ELLADA
+14:GR-60:GR:DYTIKI MAKEDONIA
+15:GR-7:GR:EVROS
+16:GR-05:GR:EVRYTANIA
+17:GR-04:GR:EVVOIA
+18:GR-07:GR:FOKIS
+19:GR-06:GR:FTHIOTIS
+20:GR-5:GR:GREVENA
+21:GR-4:GR:ILEIA
+22:GR-53:GR:IMATHIA
+23:GR-33:GR:IOANNINA
+24:GR-67:GR:IONIA NISIA
+25:GR-61:GR:IPEIROS
+26:GR-9:GR:IRAKLEION
+27:GR-56:GR:KASTORIA
+28:GR-55:GR:KAVALLA
+29:GR-23:GR:KEFALLINIA
+30:GR-86:GR:KENTRIKI MAKEDONIA
+31:GR-22:GR:KERKYRA
+32:GR-57:GR:KILKIS
+33:GR-58:GR:KOZANI
+34:GR-76:GR:KRITI
+35:GR-82:GR:KYKLADES
+36:GR-6:GR:LAKONIA
+37:GR-42:GR:LARISA
+38:GR-92:GR:LASITHION
+39:GR-24:GR:LEFKAS
+40:GR-83:GR:LESVOS
+41:GR-43:GR:MAGNISIA
+42:GR-75:GR:NOTIO AIGAIO
+43:GR-59:GR:PELLA
+44:GR-74:GR:PELOPONNISOS
+45:GR-34:GR:PREVEZA
+46:GR-93:GR:RETHYMNON
+47:GR-73:GR:RODOPI
+48:GR-84:GR:SAMOS
+49:GR-62:GR:SERRAI
+50:GR-70:GR:STEREA ELLADA
+51:GR-32:GR:THESPROTIA
+52:GR-63:GR:THESSALIA
+53:GR-54:GR:THESSALONIKI
+54:GR-44:GR:TRIKALA
+55:GR-03:GR:VOIOTIA
+56:GR-65:GR:VOREIO AIGAIO
+57:GR-72:GR:XANTHI
diff --git a/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GRC/GRC_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN1_LEX.txt
new file mode 100644
index 0000000..c576a92
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN1_LEX.txt
@@ -0,0 +1,11 @@
+1:GY-BA:GY:BARIMA WAINI
+2:GY-BAW:GY:BARIMA/WAINI
+3:GY-CU:GY:CUYUNI/MAZARUNI
+4:GY-DE:GY:DEMERARA/MAHAICA
+5:GY-EB:GY:EAST BERBICE/CORENTYNE
+6:GY-ES:GY:ESSEQUIBO I./WEST D.
+7:GY-MA:GY:MAHAICA/BERBICE
+8:GY-PM:GY:POMEROON/SUPENAAM
+9:GY-PT:GY:POTARO/SIPARUNI
+10:GY-UD:GY:UPPER DEMERARA/BERBICE
+11:GY-UT:GY:UPPER TAKUTU/U.ESSEQUIBO
diff --git a/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN2_LEX.txt
new file mode 100644
index 0000000..d70729c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/GUY/GUY_ADMIN2_LEX.txt
@@ -0,0 +1,27 @@
+1:GY:GUY:GUYANA:CUYUNI/MAZARUNI:VII-1  Cuyuni
+2:GY:GUY:GUYANA:CUYUNI/MAZARUNI:VII-2 Mazaruni/L.B.E.Rive
+1:GY:GUY:GUYANA:POTARO/SIPARUNI:VIII-1 Ireng/Upper Potaro
+2:GY:GUY:GUYANA:POTARO/SIPARUNI:VIII-2 Lower Potaro/Ladsm
+1:GY:GUY:GUYANA:BARIMA/WAINI:I-1  Barima
+2:GY:GUY:GUYANA:BARIMA/WAINI:I-2  Waini
+1:GY:GUY:GUYANA:POMEROON/SUPENAAM:II-1 Moruka/Pomeroon
+2:GY:GUY:GUYANA:POMEROON/SUPENAAM:II-2 Somerset And Berks
+1:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-1 East Berbice/W.Canje
+2:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-2  East Canje/E.C.Berb
+3:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-3 Black Bush Polder
+4:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-4 Lower Corentyne Rive
+5:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-5 Left Bank Upper Canj
+6:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-6 Upper Canje/Corentyn
+7:GY:GUY:GUYANA:EAST BERBICE/CORENTYNE:VI-7 Upper Corentyne
+1:GY:GUY:GUYANA:DEMERARA/MAHAICA:IV-1 Moblissa/La Reconnai
+2:GY:GUY:GUYANA:DEMERARA/MAHAICA:IV-2 Buxton/Mahaica
+1:GY:GUY:GUYANA:UPPER DEMERARA/BERBICE:X-1 Right Bank Essequibo
+2:GY:GUY:GUYANA:UPPER DEMERARA/BERBICE:X-2 Torani/Bulletwood
+1:GY:GUY:GUYANA:UPPER TAKUTU/U.ESSEQUIBO:IX-1 Rupununi West
+2:GY:GUY:GUYANA:UPPER TAKUTU/U.ESSEQUIBO:IX-2 Rewa(Illiwa)/U.E
+1:GY:GUY:GUYANA:MAHAICA/BERBICE:V-1  Mahaica/Mahaicony
+2:GY:GUY:GUYANA:MAHAICA/BERBICE:V-2 Mahaicony/Berbice
+1:GY:GUY:GUYANA:ESSEQUIBO I./WEST D.:Essequibo I./L.B.E.River
+2:GY:GUY:GUYANA:ESSEQUIBO I./WEST D.:III-1 Essequibo Islands
+3:GY:GUY:GUYANA:ESSEQUIBO I./WEST D.:III-2 Bonasika/Boerasirie
+4:GY:GUY:GUYANA:ESSEQUIBO I./WEST D.:III-3 Lower West Demerara
diff --git a/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN1_LEX.txt
new file mode 100644
index 0000000..0639daf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN1_LEX.txt
@@ -0,0 +1,20 @@
+1:HR-07:HR:BJELOVARSKO BILOGORSKA ZUPANIJA
+2:HR-9:HR:DUBROVAKO NERETVANSKA ZUPANIJA
+3:HR-2:HR:GRAD ZAGREB
+4:HR-11:HR:HRVATSKA
+5:HR-8:HR:ISTARSKA ZUPANIJA
+6:HR-04:HR:KARLOVAKA ZUPANIJA
+7:HR-06:HR:KOPRIVNIKO KRIZEVA KA ZUPANIJA
+8:HR-02:HR:KRAPINSKO ZAGORSKA ZUPANIJA
+9:HR-09:HR:LIKO SENJSKA ZUPANIJA
+10:HR-20:HR:MEIMURSKA ZUPANIJA
+11:HR-4:HR:OSJEKO BARANJSKA ZUPANIJA
+12:HR-:HR:POZESKO SLAVONSKA ZUPANIJA
+13:HR-08:HR:PRIMORSKO GORANSKA ZUPANIJA
+14:HR-5:HR:SIBENSKO KNINSKA ZUPANIJA
+15:HR-03:HR:SISAKO MOSLAVAKA ZUPANIJA
+16:HR-7:HR:SPLITSKO DALMATINSKA ZUPANIJA
+17:HR-05:HR:VARAZDINSKA ZUPANIJA
+18:HR-0:HR:VIROVITIKO PODRAVSKA ZUPANIJA
+19:HR-6:HR:VUKOVARSKO SRIJEMSKA ZUPANIJA
+20:HR-3:HR:ZADARSKA ZUPANIJA
diff --git a/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/HRV/HRV_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..27225ee
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN1_LEX.txt
@@ -0,0 +1,42 @@
+1:HU-BK:HU:BACS KISKUN
+2:HU-BA:HU:BARANYA
+3:HU-BC:HU:BEKESCSABA
+4:HU-BZ:HU:BORSOD ABAUJ ZEMPLEN
+5:HU-BZ:HU:BORSOD ABAUJ ZEMPLEN
+6:HU-BU:HU:BUDAPEST
+7:HU-CS:HU:CSONGRAD
+8:HU-DE:HU:DEBRECEN
+9:HU-DU:HU:DUNAUJVAROS
+10:HU-EG:HU:EGER
+11:HU-FE:HU:FEJER
+12:HU-GY:HU:GYR
+13:HU-GS:HU:GYR MOSON SOPRON
+14:HU-SO:HU:GY”R MOSON SOPRON
+15:HU-HB:HU:HAJDU BIHAR
+16:HU-HE:HU:HEVES
+17:HU-HV:HU:HODMEZVASARHELY
+18:HU-JN:HU:JASZ NAGYKUN SZOLNOK
+19:HU-KV:HU:KAPOSVAR
+20:HU-KM:HU:KECSKEMET
+21:HU-KE:HU:KOMAROM ESZTERGOM
+22:HU-MI:HU:MISKOLC
+23:HU-NK:HU:NAGYKANIZSA
+24:HU-NO:HU:NOGRAD
+25:HU-NY:HU:NYIREGYHAZA
+26:HU-PS:HU:PECS
+27:HU-PE:HU:PEST
+28:HU-ST:HU:SALGOTARJAN
+29:HU-SN:HU:SOPRON
+30:HU-BE:HU:SZABOLCS SZATAR BEREG
+31:HU-SZ:HU:SZABOLCS SZATMAR BEREG
+32:HU-SD:HU:SZEGED
+33:HU-SF:HU:SZEKESFEHERVAR
+34:HU-SS:HU:SZEKSZARD
+35:HU-SK:HU:SZOLNOK
+36:HU-SH:HU:SZOMBATHELY
+37:HU-TB:HU:TATABANYA
+38:HU-TO:HU:TOLNA
+39:HU-VA:HU:VAS
+40:HU-VE:HU:VESZPREM
+41:HU-VE:HU:VESZPREM
+42:HU-ZA:HU:ZALA
diff --git a/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/HUN/HUN_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6ec56a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN1_LEX.txt
@@ -0,0 +1,36 @@
+1:ID-AC:ID:ACEH
+2:ID-BA:ID:BALI
+3:ID-BB:ID:BANGKA BELITUNG
+4:ID-BT:ID:BANTEN
+5:ID-BE:ID:BENGKULU
+6:ID-YOG:ID:D.I YOGYAKARTA
+7:ID-JAK:ID:DKI JAKARTA
+8:ID-GO:ID:GORONTALO
+9:ID-IJA:ID:IRIAN JAYA
+10:ID-JK:ID:JAKARTA RAYA
+11:ID-JA:ID:JAMBI
+12:ID-JB:ID:JAWA BARAT
+13:ID-JT:ID:JAWA TENGAH
+14:ID-JI:ID:JAWA TIMUR
+15:ID-KB:ID:KALIMANTAN BARAT
+16:ID-KS:ID:KALIMANTAN SELATAN
+17:ID-KT:ID:KALIMANTAN TENGAH
+18:ID-KI:ID:KALIMANTAN TIMUR
+19:ID-KR:ID:KEPULAUAN RIAU
+20:ID-LA:ID:LAMPUNG
+21:ID-MA:ID:MALUKU
+22:ID-MU:ID:MALUKU UTARA
+23:ID-NB:ID:NUSA TENGGARA BARAT
+24:ID-NT:ID:NUSA TENGGARA TIMUR
+25:ID-PA:ID:PAPUA
+26:ID-RI:ID:RIAU
+27:ID-SR:ID:SULAWESI BARAT
+28:ID-SN:ID:SULAWESI SELATAN
+29:ID-ST:ID:SULAWESI TENGAH
+30:ID-SG:ID:SULAWESI TENGGARA
+31:ID-SA:ID:SULAWESI UTARA
+32:ID-SB:ID:SUMATERA BARAT
+33:ID-SS:ID:SUMATERA SELATAN
+34:ID-SU:ID:SUMATERA UTARA
+35:ID0-TIM:ID:TIMOR TIMUR
+36:ID-YO:ID:YOGYAKARTA
diff --git a/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..584a88d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IDN/IDN_ADMIN2_LEX.txt
@@ -0,0 +1,293 @@
+1:ID:IDN:INDONESIA:Sulawesi Utara:Bolaang Mongondow
+2:ID:IDN:INDONESIA:Sulawesi Utara:Gorontalo
+3:ID:IDN:INDONESIA:Sulawesi Utara:Kodya Gorontalo
+4:ID:IDN:INDONESIA:Sulawesi Utara:Kodya Manado
+5:ID:IDN:INDONESIA:Sulawesi Utara:Minahasa
+1:ID:IDN:INDONESIA:Sulawesi Tenggara:Buton
+2:ID:IDN:INDONESIA:Sulawesi Tenggara:Kendari
+3:ID:IDN:INDONESIA:Sulawesi Tenggara:Kolaka
+4:ID:IDN:INDONESIA:Sulawesi Tenggara:Muna
+1:ID:IDN:INDONESIA:Sumatera Utara:Dairi
+2:ID:IDN:INDONESIA:Sumatera Utara:Deli Serdang
+3:ID:IDN:INDONESIA:Sumatera Utara:Karo
+4:ID:IDN:INDONESIA:Sumatera Utara:Kodya Binjai
+5:ID:IDN:INDONESIA:Sumatera Utara:Kodya Medan
+6:ID:IDN:INDONESIA:Sumatera Utara:Kodya P.Siantar
+7:ID:IDN:INDONESIA:Sumatera Utara:Kodya Sibolga
+8:ID:IDN:INDONESIA:Sumatera Utara:Kodya T.Balai
+9:ID:IDN:INDONESIA:Sumatera Utara:Labuhan Batu
+10:ID:IDN:INDONESIA:Sumatera Utara:Langkat
+11:ID:IDN:INDONESIA:Sumatera Utara:Nias
+12:ID:IDN:INDONESIA:Sumatera Utara:Simalungun
+13:ID:IDN:INDONESIA:Sumatera Utara:Tapanuli Slt
+14:ID:IDN:INDONESIA:Sumatera Utara:Tapanuli Utara
+1:ID:IDN:INDONESIA:Maluku:Halmahera Tengah
+2:ID:IDN:INDONESIA:Maluku:Kodya Ambon
+3:ID:IDN:INDONESIA:Maluku:Maluku Tengah
+4:ID:IDN:INDONESIA:Maluku:Maluku Tenggara
+5:ID:IDN:INDONESIA:Maluku:Maluku Utara
+1:ID:IDN:INDONESIA:Sumatera Barat:Agam
+2:ID:IDN:INDONESIA:Sumatera Barat:Kodya Bukittinggi
+3:ID:IDN:INDONESIA:Sumatera Barat:Kodya Padang
+4:ID:IDN:INDONESIA:Sumatera Barat:Kodya Padangpanjang
+5:ID:IDN:INDONESIA:Sumatera Barat:Kodya Sawahlunto
+6:ID:IDN:INDONESIA:Sumatera Barat:Kodya Solok
+7:ID:IDN:INDONESIA:Sumatera Barat:Limapuluhkoto
+8:ID:IDN:INDONESIA:Sumatera Barat:Padang Pariaman
+9:ID:IDN:INDONESIA:Sumatera Barat:Pasaman
+10:ID:IDN:INDONESIA:Sumatera Barat:Payakumbuh
+11:ID:IDN:INDONESIA:Sumatera Barat:Pesisir Selatan
+12:ID:IDN:INDONESIA:Sumatera Barat:Sawahlunto/Sijunjung
+13:ID:IDN:INDONESIA:Sumatera Barat:Solok
+14:ID:IDN:INDONESIA:Sumatera Barat:Tanahdatar
+1:ID:IDN:INDONESIA:Jawa Barat:Bandung
+2:ID:IDN:INDONESIA:Jawa Barat:Bekasi
+3:ID:IDN:INDONESIA:Jawa Barat:Bogor
+4:ID:IDN:INDONESIA:Jawa Barat:Ciamis
+5:ID:IDN:INDONESIA:Jawa Barat:Cianjur
+6:ID:IDN:INDONESIA:Jawa Barat:Cirebon
+7:ID:IDN:INDONESIA:Jawa Barat:Garut
+8:ID:IDN:INDONESIA:Jawa Barat:Indramayu
+9:ID:IDN:INDONESIA:Jawa Barat:Karawang
+10:ID:IDN:INDONESIA:Jawa Barat:Kodya Bandung
+11:ID:IDN:INDONESIA:Jawa Barat:Kodya Bogor
+12:ID:IDN:INDONESIA:Jawa Barat:Kodya Cirebon
+13:ID:IDN:INDONESIA:Jawa Barat:Kodya Sukabumi
+14:ID:IDN:INDONESIA:Jawa Barat:Kuningan
+15:ID:IDN:INDONESIA:Jawa Barat:Lebak
+16:ID:IDN:INDONESIA:Jawa Barat:Majalengka
+17:ID:IDN:INDONESIA:Jawa Barat:Pandeglang
+18:ID:IDN:INDONESIA:Jawa Barat:Purwakarta
+19:ID:IDN:INDONESIA:Jawa Barat:Serang
+20:ID:IDN:INDONESIA:Jawa Barat:Subang
+21:ID:IDN:INDONESIA:Jawa Barat:Sukabumi
+22:ID:IDN:INDONESIA:Jawa Barat:Sumedang
+23:ID:IDN:INDONESIA:Jawa Barat:Tangerang
+24:ID:IDN:INDONESIA:Jawa Barat:Tasikmalaya
+1:ID:IDN:INDONESIA:D.I Yogyakarta:Bantul
+2:ID:IDN:INDONESIA:D.I Yogyakarta:Gunung Kidul
+3:ID:IDN:INDONESIA:D.I Yogyakarta:Kodya Yogyakarta
+4:ID:IDN:INDONESIA:D.I Yogyakarta:Kulon Progo
+5:ID:IDN:INDONESIA:D.I Yogyakarta:Sleman
+1:ID:IDN:INDONESIA:Jawa Timur:Bangkalan
+2:ID:IDN:INDONESIA:Jawa Timur:Banyuwangi
+3:ID:IDN:INDONESIA:Jawa Timur:Blitar
+4:ID:IDN:INDONESIA:Jawa Timur:Bojonegoro
+5:ID:IDN:INDONESIA:Jawa Timur:Bondowoso
+6:ID:IDN:INDONESIA:Jawa Timur:Gresik
+7:ID:IDN:INDONESIA:Jawa Timur:Jember
+8:ID:IDN:INDONESIA:Jawa Timur:Jombang
+9:ID:IDN:INDONESIA:Jawa Timur:Kediri
+10:ID:IDN:INDONESIA:Jawa Timur:Kodya Blitar
+11:ID:IDN:INDONESIA:Jawa Timur:Kodya Kediri
+12:ID:IDN:INDONESIA:Jawa Timur:Kodya Madiun
+13:ID:IDN:INDONESIA:Jawa Timur:Kodya Malang
+14:ID:IDN:INDONESIA:Jawa Timur:Kodya Mojokerto
+15:ID:IDN:INDONESIA:Jawa Timur:Kodya Pasuruan
+16:ID:IDN:INDONESIA:Jawa Timur:Kodya Probolinggo
+17:ID:IDN:INDONESIA:Jawa Timur:Kodya Surabaya
+18:ID:IDN:INDONESIA:Jawa Timur:Lamongan
+19:ID:IDN:INDONESIA:Jawa Timur:Lumajang
+20:ID:IDN:INDONESIA:Jawa Timur:Madiun
+21:ID:IDN:INDONESIA:Jawa Timur:Magetan
+22:ID:IDN:INDONESIA:Jawa Timur:Malang
+23:ID:IDN:INDONESIA:Jawa Timur:Mojokerto
+24:ID:IDN:INDONESIA:Jawa Timur:Nganjuk
+25:ID:IDN:INDONESIA:Jawa Timur:Ngawi
+26:ID:IDN:INDONESIA:Jawa Timur:Pacitan
+27:ID:IDN:INDONESIA:Jawa Timur:Pamekasan
+28:ID:IDN:INDONESIA:Jawa Timur:Pasuruan
+29:ID:IDN:INDONESIA:Jawa Timur:Ponorogo
+30:ID:IDN:INDONESIA:Jawa Timur:Probolinggo
+31:ID:IDN:INDONESIA:Jawa Timur:Sampang
+32:ID:IDN:INDONESIA:Jawa Timur:Sidoarjo
+33:ID:IDN:INDONESIA:Jawa Timur:Situbondo
+34:ID:IDN:INDONESIA:Jawa Timur:Sumenep
+35:ID:IDN:INDONESIA:Jawa Timur:Trenggalek
+36:ID:IDN:INDONESIA:Jawa Timur:Tuban
+37:ID:IDN:INDONESIA:Jawa Timur:Tulungagung
+1:ID:IDN:INDONESIA:Kalimantan Selatan:Banjar
+2:ID:IDN:INDONESIA:Kalimantan Selatan:Barito Kuala
+3:ID:IDN:INDONESIA:Kalimantan Selatan:Hulu Sei Selatan
+4:ID:IDN:INDONESIA:Kalimantan Selatan:Hulu Sei Tengah
+5:ID:IDN:INDONESIA:Kalimantan Selatan:Hulu Sei Utara
+6:ID:IDN:INDONESIA:Kalimantan Selatan:Kodya Banjarmasin
+7:ID:IDN:INDONESIA:Kalimantan Selatan:Kota Baru
+8:ID:IDN:INDONESIA:Kalimantan Selatan:Tabalong
+9:ID:IDN:INDONESIA:Kalimantan Selatan:Tanah Laut
+10:ID:IDN:INDONESIA:Kalimantan Selatan:Tapin
+1:ID:IDN:INDONESIA:Riau:Bengkalis
+2:ID:IDN:INDONESIA:Riau:Indragiri Hilir
+3:ID:IDN:INDONESIA:Riau:Indragiri Hulu
+4:ID:IDN:INDONESIA:Riau:Kampar
+5:ID:IDN:INDONESIA:Riau:Kodya Pekanbaru
+6:ID:IDN:INDONESIA:Riau:Riau Kepulauan
+1:ID:IDN:INDONESIA:Sumatera Selatan:Bangka
+2:ID:IDN:INDONESIA:Sumatera Selatan:Belitung
+3:ID:IDN:INDONESIA:Sumatera Selatan:Kodya Palembang
+4:ID:IDN:INDONESIA:Sumatera Selatan:Lahat
+5:ID:IDN:INDONESIA:Sumatera Selatan:Muara Enimr/Liot
+6:ID:IDN:INDONESIA:Sumatera Selatan:Musi Banyuasin
+7:ID:IDN:INDONESIA:Sumatera Selatan:Musi Rawas
+8:ID:IDN:INDONESIA:Sumatera Selatan:Ogan Kemering Ilir
+9:ID:IDN:INDONESIA:Sumatera Selatan:Ogan Komering Ulu
+1:ID:IDN:INDONESIA:Jambi:Batanghari
+2:ID:IDN:INDONESIA:Jambi:Bungatebo
+3:ID:IDN:INDONESIA:Jambi:Kerinci
+4:ID:IDN:INDONESIA:Jambi:Kodya Jambi
+5:ID:IDN:INDONESIA:Jambi:Saralangun
+6:ID:IDN:INDONESIA:Jambi:Tanjung Jabung
+1:ID:IDN:INDONESIA:Dki Jakarta:Jakarta Barat
+2:ID:IDN:INDONESIA:Dki Jakarta:Jakarta Pusat
+3:ID:IDN:INDONESIA:Dki Jakarta:Jakarta Selatan
+4:ID:IDN:INDONESIA:Dki Jakarta:Jakarta Timur
+5:ID:IDN:INDONESIA:Dki Jakarta:Jakarta Utara
+1:ID:IDN:INDONESIA:Sulawesi Selatan:Bantaeng
+2:ID:IDN:INDONESIA:Sulawesi Selatan:Barru
+3:ID:IDN:INDONESIA:Sulawesi Selatan:Bone
+4:ID:IDN:INDONESIA:Sulawesi Selatan:Bulukumba
+5:ID:IDN:INDONESIA:Sulawesi Selatan:Enrekang
+6:ID:IDN:INDONESIA:Sulawesi Selatan:Gowa
+7:ID:IDN:INDONESIA:Sulawesi Selatan:Jeneponto
+8:ID:IDN:INDONESIA:Sulawesi Selatan:Kodya Pare-Pare
+9:ID:IDN:INDONESIA:Sulawesi Selatan:Kodya Ujung Pandang
+10:ID:IDN:INDONESIA:Sulawesi Selatan:Luwu
+11:ID:IDN:INDONESIA:Sulawesi Selatan:Majene
+12:ID:IDN:INDONESIA:Sulawesi Selatan:Mamuju
+13:ID:IDN:INDONESIA:Sulawesi Selatan:Pangkep
+14:ID:IDN:INDONESIA:Sulawesi Selatan:Pinrang
+15:ID:IDN:INDONESIA:Sulawesi Selatan:Polmas
+16:ID:IDN:INDONESIA:Sulawesi Selatan:Selayar
+17:ID:IDN:INDONESIA:Sulawesi Selatan:Sidrap
+18:ID:IDN:INDONESIA:Sulawesi Selatan:Sinjai
+19:ID:IDN:INDONESIA:Sulawesi Selatan:Soppeng
+20:ID:IDN:INDONESIA:Sulawesi Selatan:Takalar
+21:ID:IDN:INDONESIA:Sulawesi Selatan:Tanatoraja
+22:ID:IDN:INDONESIA:Sulawesi Selatan:Wajo
+1:ID:IDN:INDONESIA:Kalimantan Barat:Kapuas Hulu
+2:ID:IDN:INDONESIA:Kalimantan Barat:Ketapang
+3:ID:IDN:INDONESIA:Kalimantan Barat:Kodya Pontianak
+4:ID:IDN:INDONESIA:Kalimantan Barat:Pontianak
+5:ID:IDN:INDONESIA:Kalimantan Barat:Sambas
+6:ID:IDN:INDONESIA:Kalimantan Barat:Sanggau
+7:ID:IDN:INDONESIA:Kalimantan Barat:Sintang
+1:ID:IDN:INDONESIA:Bali:Badung
+2:ID:IDN:INDONESIA:Bali:Bangli
+3:ID:IDN:INDONESIA:Bali:Buleleng
+4:ID:IDN:INDONESIA:Bali:Gianyar
+5:ID:IDN:INDONESIA:Bali:Jembrana
+6:ID:IDN:INDONESIA:Bali:Karangasem
+7:ID:IDN:INDONESIA:Bali:Klungkung
+8:ID:IDN:INDONESIA:Bali:Tabanan
+1:ID:IDN:INDONESIA:Timor Timur:Ainaro
+2:ID:IDN:INDONESIA:Timor Timur:Alieau
+3:ID:IDN:INDONESIA:Timor Timur:Ambeno
+4:ID:IDN:INDONESIA:Timor Timur:Baucau
+5:ID:IDN:INDONESIA:Timor Timur:Bobonaro
+6:ID:IDN:INDONESIA:Timor Timur:Covalima
+7:ID:IDN:INDONESIA:Timor Timur:Dilli
+8:ID:IDN:INDONESIA:Timor Timur:Ermera
+9:ID:IDN:INDONESIA:Timor Timur:Lautem
+10:ID:IDN:INDONESIA:Timor Timur:Liquica
+11:ID:IDN:INDONESIA:Timor Timur:Manatuto
+12:ID:IDN:INDONESIA:Timor Timur:Manufahi
+13:ID:IDN:INDONESIA:Timor Timur:Viqueque
+1:ID:IDN:INDONESIA:Lampung:Kodya Bandarlampung
+2:ID:IDN:INDONESIA:Lampung:Lampung Selatan
+3:ID:IDN:INDONESIA:Lampung:Lampung Tengah
+4:ID:IDN:INDONESIA:Lampung:Lampung Utara
+1:ID:IDN:INDONESIA:Sulawesi Tengah:Banggai
+2:ID:IDN:INDONESIA:Sulawesi Tengah:Buol-Tolitoli
+3:ID:IDN:INDONESIA:Sulawesi Tengah:Donggala
+4:ID:IDN:INDONESIA:Sulawesi Tengah:Poso
+1:ID:IDN:INDONESIA:Aceh:Aceh Barat
+2:ID:IDN:INDONESIA:Aceh:Aceh Besar
+3:ID:IDN:INDONESIA:Aceh:Aceh Selatan
+4:ID:IDN:INDONESIA:Aceh:Aceh Tengah
+5:ID:IDN:INDONESIA:Aceh:Aceh Tenggara
+6:ID:IDN:INDONESIA:Aceh:Aceh Timur
+7:ID:IDN:INDONESIA:Aceh:Aceh Utara
+8:ID:IDN:INDONESIA:Aceh:Kodya Banda Aceh
+9:ID:IDN:INDONESIA:Aceh:Kodya Sabang
+10:ID:IDN:INDONESIA:Aceh:Pidie
+1:ID:IDN:INDONESIA:Bengkulu:Bengkulu Selatan
+2:ID:IDN:INDONESIA:Bengkulu:Bengkulu Utara
+3:ID:IDN:INDONESIA:Bengkulu:Kodya Nengkulu
+4:ID:IDN:INDONESIA:Bengkulu:Rejang Lebong
+1:ID:IDN:INDONESIA:Nusa Tenggara Timur:Alor
+2:ID:IDN:INDONESIA:Nusa Tenggara Timur:Belu
+3:ID:IDN:INDONESIA:Nusa Tenggara Timur:Ende
+4:ID:IDN:INDONESIA:Nusa Tenggara Timur:Flores Timur
+5:ID:IDN:INDONESIA:Nusa Tenggara Timur:Kupang
+6:ID:IDN:INDONESIA:Nusa Tenggara Timur:Manggarai
+7:ID:IDN:INDONESIA:Nusa Tenggara Timur:Ngada
+8:ID:IDN:INDONESIA:Nusa Tenggara Timur:Sikka
+9:ID:IDN:INDONESIA:Nusa Tenggara Timur:Sumba Barat
+10:ID:IDN:INDONESIA:Nusa Tenggara Timur:Sumba Timur
+11:ID:IDN:INDONESIA:Nusa Tenggara Timur:Timor Tengah Selatan
+12:ID:IDN:INDONESIA:Nusa Tenggara Timur:Timor Tengah Utara
+1:ID:IDN:INDONESIA:Nusa Tenggara Barat:Bima
+2:ID:IDN:INDONESIA:Nusa Tenggara Barat:Dompu
+3:ID:IDN:INDONESIA:Nusa Tenggara Barat:Lombok Barat
+4:ID:IDN:INDONESIA:Nusa Tenggara Barat:Lombok Tengah
+5:ID:IDN:INDONESIA:Nusa Tenggara Barat:Lombok Timur
+6:ID:IDN:INDONESIA:Nusa Tenggara Barat:Sumbawa
+1:ID:IDN:INDONESIA:Kalimantan Tengah:Barito Selatan
+2:ID:IDN:INDONESIA:Kalimantan Tengah:Barito Timur
+3:ID:IDN:INDONESIA:Kalimantan Tengah:Barito Utara
+4:ID:IDN:INDONESIA:Kalimantan Tengah:Gunung Mas
+5:ID:IDN:INDONESIA:Kalimantan Tengah:Kapuas
+6:ID:IDN:INDONESIA:Kalimantan Tengah:Katingan
+7:ID:IDN:INDONESIA:Kalimantan Tengah:Kodya Palangkaraya
+8:ID:IDN:INDONESIA:Kalimantan Tengah:Murung Raya
+9:ID:IDN:INDONESIA:Kalimantan Tengah:Waringin Barat
+10:ID:IDN:INDONESIA:Kalimantan Tengah:Waringin Timur
+1:ID:IDN:INDONESIA:Jawa Tengah:Banjar Negara
+2:ID:IDN:INDONESIA:Jawa Tengah:Banyumas
+3:ID:IDN:INDONESIA:Jawa Tengah:Batang
+4:ID:IDN:INDONESIA:Jawa Tengah:Blora
+5:ID:IDN:INDONESIA:Jawa Tengah:Boyolali
+6:ID:IDN:INDONESIA:Jawa Tengah:Brebes
+7:ID:IDN:INDONESIA:Jawa Tengah:Cilacap
+8:ID:IDN:INDONESIA:Jawa Tengah:Demak
+9:ID:IDN:INDONESIA:Jawa Tengah:Grobongan
+10:ID:IDN:INDONESIA:Jawa Tengah:Jepara
+11:ID:IDN:INDONESIA:Jawa Tengah:Karanganyar
+12:ID:IDN:INDONESIA:Jawa Tengah:Kebumen
+13:ID:IDN:INDONESIA:Jawa Tengah:Klaten
+14:ID:IDN:INDONESIA:Jawa Tengah:Kodya Magelang
+15:ID:IDN:INDONESIA:Jawa Tengah:Kodya Pekalongan
+16:ID:IDN:INDONESIA:Jawa Tengah:Kodya Salatiga
+17:ID:IDN:INDONESIA:Jawa Tengah:Kodya Semarang
+18:ID:IDN:INDONESIA:Jawa Tengah:Kodya Surakarta
+19:ID:IDN:INDONESIA:Jawa Tengah:Kodya Tegal
+20:ID:IDN:INDONESIA:Jawa Tengah:Kudus
+21:ID:IDN:INDONESIA:Jawa Tengah:Magelang
+22:ID:IDN:INDONESIA:Jawa Tengah:Pati
+23:ID:IDN:INDONESIA:Jawa Tengah:Pekalongan
+24:ID:IDN:INDONESIA:Jawa Tengah:Pemalang
+25:ID:IDN:INDONESIA:Jawa Tengah:Purbalingga
+26:ID:IDN:INDONESIA:Jawa Tengah:Purworedjo
+27:ID:IDN:INDONESIA:Jawa Tengah:Rembang
+28:ID:IDN:INDONESIA:Jawa Tengah:Semarang
+29:ID:IDN:INDONESIA:Jawa Tengah:Sragen
+30:ID:IDN:INDONESIA:Jawa Tengah:Sukoharjo
+31:ID:IDN:INDONESIA:Jawa Tengah:Tegal
+32:ID:IDN:INDONESIA:Jawa Tengah:Temanggung
+33:ID:IDN:INDONESIA:Jawa Tengah:Wonogiri
+34:ID:IDN:INDONESIA:Jawa Tengah:Wonosobo
+1:ID:IDN:INDONESIA:Irian Jaya:Fak-Fak
+2:ID:IDN:INDONESIA:Irian Jaya:Jayapura
+3:ID:IDN:INDONESIA:Irian Jaya:Jayawijaya
+4:ID:IDN:INDONESIA:Irian Jaya:Manokwari
+5:ID:IDN:INDONESIA:Irian Jaya:Merauke
+6:ID:IDN:INDONESIA:Irian Jaya:Paniai
+7:ID:IDN:INDONESIA:Irian Jaya:Sorong
+8:ID:IDN:INDONESIA:Irian Jaya:Teluk Cenderwasih
+9:ID:IDN:INDONESIA:Irian Jaya:Yapen Waropen
+1:ID:IDN:INDONESIA:Kalimantan Timur:Berau
+2:ID:IDN:INDONESIA:Kalimantan Timur:Bulungan
+3:ID:IDN:INDONESIA:Kalimantan Timur:Kodya Balikpapan
+4:ID:IDN:INDONESIA:Kalimantan Timur:Kodya Samarinda
+5:ID:IDN:INDONESIA:Kalimantan Timur:Kutai
+6:ID:IDN:INDONESIA:Kalimantan Timur:Pasir
diff --git a/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d5d603e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN1_LEX.txt
@@ -0,0 +1,36 @@
+1:IN-NIC:IN:ANDAMAN & NICOBAR
+2:IN-AN:IN:ANDAMAN AND NICOBAR ISLANDS
+3:IN-AP:IN:ANDHRA PRADESH
+4:IN-AR:IN:ARUNACHAL PRADESH
+5:IN-AS:IN:ASSAM
+6:IN-BR:IN:BIHAR
+7:IN-CH:IN:CHANDIGARH
+8:IN-CT:IN:CHHATTASGARH
+9:IN-DN:IN:DADRA AND NAGAR HAVELI
+10:IN-DD:IN:DAMAN AND DIU
+11:IN-DL:IN:DELHI
+12:IN-GA:IN:GOA
+13:IN-GJ:IN:GUJARAT
+14:IN-HR:IN:HARYANA
+15:IN-HP:IN:HIMACHAL PRADESH
+16:IN-JK:IN:JAMMU AND KASHMIR
+17:IN-JH:IN:JHARKHAND
+18:IN-KA:IN:KARNATAKA
+19:IN-KL:IN:KERALA
+20:IN-LD:IN:LAKSHADWEEP
+21:IN-MP:IN:MADHYA PRADESH
+22:IN-MH:IN:MAHARASHTRA
+23:IN-MN:IN:MANIPUR
+24:IN-ML:IN:MEGHALAYA
+25:IN-MZ:IN:MIZORAM
+26:IN-NL:IN:NAGALAND
+27:IN-OR:IN:ORISSA
+28:IN-PY:IN:PONDICHERRY
+29:IN-PB:IN:PUNJAB
+30:IN-RJ:IN:RAJASTHAN
+31:IN-SK:IN:SIKKIM
+32:IN-TN:IN:TAMIL NADU
+33:IN-TR:IN:TRIPURA
+34:IN-UP:IN:UTTAR PRADESH
+35:IN-UL:IN:UTTARANCHAL
+36:IN-WB:IN:WEST BENGAL
diff --git a/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f4c04e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IND/IND_ADMIN2_LEX.txt
@@ -0,0 +1,470 @@
+1:IN:IND:INDIA:Sikkim:East District
+2:IN:IND:INDIA:Sikkim:North District
+3:IN:IND:INDIA:Sikkim:South District
+4:IN:IND:INDIA:Sikkim:West District
+1:IN:IND:INDIA:Karnataka:Bangalore Rural
+2:IN:IND:INDIA:Karnataka:Bangalore Urban
+3:IN:IND:INDIA:Karnataka:Belgaum
+4:IN:IND:INDIA:Karnataka:Bellary
+5:IN:IND:INDIA:Karnataka:Bidar
+6:IN:IND:INDIA:Karnataka:Bijapur
+7:IN:IND:INDIA:Karnataka:Chikmagalur
+8:IN:IND:INDIA:Karnataka:Chitradurga
+9:IN:IND:INDIA:Karnataka:Dakshin Kannad
+10:IN:IND:INDIA:Karnataka:Dharwad
+11:IN:IND:INDIA:Karnataka:Gulbarga
+12:IN:IND:INDIA:Karnataka:Hassan
+13:IN:IND:INDIA:Karnataka:Kodagu
+14:IN:IND:INDIA:Karnataka:Kolar
+15:IN:IND:INDIA:Karnataka:Mandya
+16:IN:IND:INDIA:Karnataka:Mysore
+17:IN:IND:INDIA:Karnataka:Raichur
+18:IN:IND:INDIA:Karnataka:Shimoga
+19:IN:IND:INDIA:Karnataka:Tumkur
+20:IN:IND:INDIA:Karnataka:Uttar Kannad
+1:IN:IND:INDIA:Nagaland:Kohima
+2:IN:IND:INDIA:Nagaland:Mokokchung
+3:IN:IND:INDIA:Nagaland:Mon
+4:IN:IND:INDIA:Nagaland:Phek
+5:IN:IND:INDIA:Nagaland:Tuesang
+6:IN:IND:INDIA:Nagaland:Wokha
+7:IN:IND:INDIA:Nagaland:Zunheboto
+1:IN:IND:INDIA:Punjab:Amritsar
+2:IN:IND:INDIA:Punjab:Bathinda
+3:IN:IND:INDIA:Punjab:Fairdkot
+4:IN:IND:INDIA:Punjab:Firozpur
+5:IN:IND:INDIA:Punjab:Gurdaspur
+6:IN:IND:INDIA:Punjab:Hoshiarpur
+7:IN:IND:INDIA:Punjab:Jalandhar
+8:IN:IND:INDIA:Punjab:Kapurthala
+9:IN:IND:INDIA:Punjab:Ludhiana
+10:IN:IND:INDIA:Punjab:Patiala
+11:IN:IND:INDIA:Punjab:Rupnagar
+12:IN:IND:INDIA:Punjab:Sangrur
+1:IN:IND:INDIA:Delhi:Delhi
+1:IN:IND:INDIA:Maharashtra:Ahmadnagar
+2:IN:IND:INDIA:Maharashtra:Akola
+3:IN:IND:INDIA:Maharashtra:Amravati
+4:IN:IND:INDIA:Maharashtra:Aurangabad
+5:IN:IND:INDIA:Maharashtra:Beed
+6:IN:IND:INDIA:Maharashtra:Bhandara
+7:IN:IND:INDIA:Maharashtra:Buldana
+8:IN:IND:INDIA:Maharashtra:Chandrapur
+9:IN:IND:INDIA:Maharashtra:Dhule
+10:IN:IND:INDIA:Maharashtra:Garhchiroli
+11:IN:IND:INDIA:Maharashtra:Greater Bombay
+12:IN:IND:INDIA:Maharashtra:Jalgaon
+13:IN:IND:INDIA:Maharashtra:Jalna
+14:IN:IND:INDIA:Maharashtra:Kolhapur
+15:IN:IND:INDIA:Maharashtra:Latur
+16:IN:IND:INDIA:Maharashtra:Nagpur
+17:IN:IND:INDIA:Maharashtra:Nanded
+18:IN:IND:INDIA:Maharashtra:Nashik
+19:IN:IND:INDIA:Maharashtra:Osmanabad
+20:IN:IND:INDIA:Maharashtra:Parbhani
+21:IN:IND:INDIA:Maharashtra:Pune
+22:IN:IND:INDIA:Maharashtra:Raigarh (Alibag)
+23:IN:IND:INDIA:Maharashtra:Ratnagiri
+24:IN:IND:INDIA:Maharashtra:Sangli
+25:IN:IND:INDIA:Maharashtra:Satara
+26:IN:IND:INDIA:Maharashtra:Sindhudurg
+27:IN:IND:INDIA:Maharashtra:Solapur
+28:IN:IND:INDIA:Maharashtra:Thane
+29:IN:IND:INDIA:Maharashtra:Wardha
+30:IN:IND:INDIA:Maharashtra:Yavatmal
+1:IN:IND:INDIA:Andhra Pradesh:Adilabad
+2:IN:IND:INDIA:Andhra Pradesh:Anantapur
+3:IN:IND:INDIA:Andhra Pradesh:Chittoor
+4:IN:IND:INDIA:Andhra Pradesh:Cuddapah
+5:IN:IND:INDIA:Andhra Pradesh:East Godavari
+6:IN:IND:INDIA:Andhra Pradesh:Guntur
+7:IN:IND:INDIA:Andhra Pradesh:Hyderabad
+8:IN:IND:INDIA:Andhra Pradesh:Karimnagar
+9:IN:IND:INDIA:Andhra Pradesh:Khammam
+10:IN:IND:INDIA:Andhra Pradesh:Krishna
+11:IN:IND:INDIA:Andhra Pradesh:Kurnool
+12:IN:IND:INDIA:Andhra Pradesh:Mahbubnagar
+13:IN:IND:INDIA:Andhra Pradesh:Medak
+14:IN:IND:INDIA:Andhra Pradesh:Nalgonda
+15:IN:IND:INDIA:Andhra Pradesh:Nellore
+16:IN:IND:INDIA:Andhra Pradesh:Nizamabad
+17:IN:IND:INDIA:Andhra Pradesh:Prakasam
+18:IN:IND:INDIA:Andhra Pradesh:Rangareddi
+19:IN:IND:INDIA:Andhra Pradesh:Srikakulam
+20:IN:IND:INDIA:Andhra Pradesh:Vishakhapatnam
+21:IN:IND:INDIA:Andhra Pradesh:Vizianagaram
+22:IN:IND:INDIA:Andhra Pradesh:Warangal
+23:IN:IND:INDIA:Andhra Pradesh:West Godavari
+1:IN:IND:INDIA:Chandigarh:Chandigarh
+1:IN:IND:INDIA:Gujarat:Ahmadabad
+2:IN:IND:INDIA:Gujarat:Amreli
+3:IN:IND:INDIA:Gujarat:Banas Kantha
+4:IN:IND:INDIA:Gujarat:Bharuch
+5:IN:IND:INDIA:Gujarat:Bhavnagar
+6:IN:IND:INDIA:Gujarat:Gandhinagar
+7:IN:IND:INDIA:Gujarat:Jamnagar
+8:IN:IND:INDIA:Gujarat:Junagadh
+9:IN:IND:INDIA:Gujarat:Kachchh (Bhuj)
+10:IN:IND:INDIA:Gujarat:Kheda
+11:IN:IND:INDIA:Gujarat:Mahesana
+12:IN:IND:INDIA:Gujarat:Panchmahals (Godhra)
+13:IN:IND:INDIA:Gujarat:Rajkot
+14:IN:IND:INDIA:Gujarat:Sabarkantha (Himatnagar)
+15:IN:IND:INDIA:Gujarat:Surat
+16:IN:IND:INDIA:Gujarat:Surendranagar
+17:IN:IND:INDIA:Gujarat:The Dangs (Ahwa)
+18:IN:IND:INDIA:Gujarat:Vadodara
+19:IN:IND:INDIA:Gujarat:Valsad
+1:IN:IND:INDIA:Jammu and Kashmir:Anantnag (Kashmir South)
+2:IN:IND:INDIA:Jammu and Kashmir:Bagdam
+3:IN:IND:INDIA:Jammu and Kashmir:Baramula (Kashmir North)
+4:IN:IND:INDIA:Jammu and Kashmir:Doda
+5:IN:IND:INDIA:Jammu and Kashmir:Jammu
+6:IN:IND:INDIA:Jammu and Kashmir:Kargil
+7:IN:IND:INDIA:Jammu and Kashmir:Kathua
+8:IN:IND:INDIA:Jammu and Kashmir:Kupwara (Muzaffarabad)
+9:IN:IND:INDIA:Jammu and Kashmir:Ladakh (Leh)
+10:IN:IND:INDIA:Jammu and Kashmir:Mirpur
+11:IN:IND:INDIA:Jammu and Kashmir:Pulwama
+12:IN:IND:INDIA:Jammu and Kashmir:Punch
+13:IN:IND:INDIA:Jammu and Kashmir:Rajauri
+14:IN:IND:INDIA:Jammu and Kashmir:Srinagar
+15:IN:IND:INDIA:Jammu and Kashmir:Udhampur
+1:IN:IND:INDIA:Manipur:Bishnupur
+2:IN:IND:INDIA:Manipur:Chandel
+3:IN:IND:INDIA:Manipur:Churachandpur
+4:IN:IND:INDIA:Manipur:Imphal
+5:IN:IND:INDIA:Manipur:Imphal (Cachar) (x)
+6:IN:IND:INDIA:Manipur:Senapati
+7:IN:IND:INDIA:Manipur:Tamenglong
+8:IN:IND:INDIA:Manipur:Thoubal
+9:IN:IND:INDIA:Manipur:Ukhrul
+1:IN:IND:INDIA:Pondicherry:Karaikal
+2:IN:IND:INDIA:Pondicherry:Mahe
+3:IN:IND:INDIA:Pondicherry:Pondicherry
+4:IN:IND:INDIA:Pondicherry:Yanam
+1:IN:IND:INDIA:Meghalaya:E. Garo Hills (Williamn.)
+2:IN:IND:INDIA:Meghalaya:E. Khasi Hills (Shillong)
+3:IN:IND:INDIA:Meghalaya:Jaintia Hills (Jowai)
+4:IN:IND:INDIA:Meghalaya:W. Garo Hills (Tura)
+5:IN:IND:INDIA:Meghalaya:W. Khasi Hills (Nongst.)
+1:IN:IND:INDIA:Lakshadweep:Laccadive Islands
+1:IN:IND:INDIA:Daman and Diu:Daman
+2:IN:IND:INDIA:Daman and Diu:Diu
+1:IN:IND:INDIA:Tamil Nadu:Chengaianna
+2:IN:IND:INDIA:Tamil Nadu:Chidambaranar
+3:IN:IND:INDIA:Tamil Nadu:Coimbatore
+4:IN:IND:INDIA:Tamil Nadu:Dharmapuri
+5:IN:IND:INDIA:Tamil Nadu:Kamarajar
+6:IN:IND:INDIA:Tamil Nadu:Kanniyakumari
+7:IN:IND:INDIA:Tamil Nadu:Madras
+8:IN:IND:INDIA:Tamil Nadu:Madurai
+9:IN:IND:INDIA:Tamil Nadu:Nilgiris
+10:IN:IND:INDIA:Tamil Nadu:North Arcot (Ambedkar)
+11:IN:IND:INDIA:Tamil Nadu:Pasumpon Muthuramalingam
+12:IN:IND:INDIA:Tamil Nadu:Periyar
+13:IN:IND:INDIA:Tamil Nadu:Pudukkottai
+14:IN:IND:INDIA:Tamil Nadu:Quaide Milleth
+15:IN:IND:INDIA:Tamil Nadu:Ramanathapuram
+16:IN:IND:INDIA:Tamil Nadu:Salem
+17:IN:IND:INDIA:Tamil Nadu:South Arcot
+18:IN:IND:INDIA:Tamil Nadu:Thanjavur
+19:IN:IND:INDIA:Tamil Nadu:Tiruchchirappalli
+20:IN:IND:INDIA:Tamil Nadu:Tirunelveli Kattabomman
+21:IN:IND:INDIA:Tamil Nadu:Tiruvannamalai Sambuvaray
+1:IN:IND:INDIA:Rajasthan:Ajmer
+2:IN:IND:INDIA:Rajasthan:Alwar
+3:IN:IND:INDIA:Rajasthan:Banswara
+4:IN:IND:INDIA:Rajasthan:Barmer
+5:IN:IND:INDIA:Rajasthan:Bharatpur
+6:IN:IND:INDIA:Rajasthan:Bhilwara
+7:IN:IND:INDIA:Rajasthan:Bikaner
+8:IN:IND:INDIA:Rajasthan:Bundi
+9:IN:IND:INDIA:Rajasthan:Chittaurgarh
+10:IN:IND:INDIA:Rajasthan:Churu
+11:IN:IND:INDIA:Rajasthan:Daulpur
+12:IN:IND:INDIA:Rajasthan:Dungarpur
+13:IN:IND:INDIA:Rajasthan:Gangangar
+14:IN:IND:INDIA:Rajasthan:Jaipur
+15:IN:IND:INDIA:Rajasthan:Jaisalmer
+16:IN:IND:INDIA:Rajasthan:Jalor
+17:IN:IND:INDIA:Rajasthan:Jhalawar
+18:IN:IND:INDIA:Rajasthan:Jhunjhunun
+19:IN:IND:INDIA:Rajasthan:Jodhpur
+20:IN:IND:INDIA:Rajasthan:Kota
+21:IN:IND:INDIA:Rajasthan:Nagaur
+22:IN:IND:INDIA:Rajasthan:Pali
+23:IN:IND:INDIA:Rajasthan:Sawai Madhopur
+24:IN:IND:INDIA:Rajasthan:Sikar
+25:IN:IND:INDIA:Rajasthan:Sirohi
+26:IN:IND:INDIA:Rajasthan:Tonk
+27:IN:IND:INDIA:Rajasthan:Udaipur
+1:IN:IND:INDIA:Orissa:Balangir
+2:IN:IND:INDIA:Orissa:Baleshwar
+3:IN:IND:INDIA:Orissa:Cuttack
+4:IN:IND:INDIA:Orissa:Dhenkanal
+5:IN:IND:INDIA:Orissa:Ganjam
+6:IN:IND:INDIA:Orissa:Kalahandi
+7:IN:IND:INDIA:Orissa:Kendujhar
+8:IN:IND:INDIA:Orissa:Koraput
+9:IN:IND:INDIA:Orissa:Mayurbhanj
+10:IN:IND:INDIA:Orissa:Phulbani
+11:IN:IND:INDIA:Orissa:Puri
+12:IN:IND:INDIA:Orissa:Sambalpur
+13:IN:IND:INDIA:Orissa:Sundargarh
+1:IN:IND:INDIA:Bihar:Araria
+2:IN:IND:INDIA:Bihar:Aurangabad
+3:IN:IND:INDIA:Bihar:Begusarai
+4:IN:IND:INDIA:Bihar:Bhagalpur
+5:IN:IND:INDIA:Bihar:Bhojpur
+6:IN:IND:INDIA:Bihar:Darbhanga
+7:IN:IND:INDIA:Bihar:Deoghar
+8:IN:IND:INDIA:Bihar:Dhanbad
+9:IN:IND:INDIA:Bihar:Dumka (Santal Pargana)
+10:IN:IND:INDIA:Bihar:Gaya
+11:IN:IND:INDIA:Bihar:Giridih
+12:IN:IND:INDIA:Bihar:Godda
+13:IN:IND:INDIA:Bihar:Gopalganj
+14:IN:IND:INDIA:Bihar:Gumla
+15:IN:IND:INDIA:Bihar:Hazaribag
+16:IN:IND:INDIA:Bihar:Jehanabad
+17:IN:IND:INDIA:Bihar:Katihar
+18:IN:IND:INDIA:Bihar:Khagaria
+19:IN:IND:INDIA:Bihar:Kishanganj
+20:IN:IND:INDIA:Bihar:Lohardaga
+21:IN:IND:INDIA:Bihar:Madhepura
+22:IN:IND:INDIA:Bihar:Madhubani
+23:IN:IND:INDIA:Bihar:Munger
+24:IN:IND:INDIA:Bihar:Muzaffarpur
+25:IN:IND:INDIA:Bihar:Nalanda
+26:IN:IND:INDIA:Bihar:Nawada
+27:IN:IND:INDIA:Bihar:Palamu (Daltenganj)
+28:IN:IND:INDIA:Bihar:Paschim Champaran
+29:IN:IND:INDIA:Bihar:Pashchimi Singhbhum (Ch.)
+30:IN:IND:INDIA:Bihar:Patna
+31:IN:IND:INDIA:Bihar:Purbi Champaran
+32:IN:IND:INDIA:Bihar:Purbi Singhbhum
+33:IN:IND:INDIA:Bihar:Purnia
+34:IN:IND:INDIA:Bihar:Ranchi
+35:IN:IND:INDIA:Bihar:Rohtas
+36:IN:IND:INDIA:Bihar:Saharsa
+37:IN:IND:INDIA:Bihar:Sahibganj
+38:IN:IND:INDIA:Bihar:Samastipur
+39:IN:IND:INDIA:Bihar:Saran
+40:IN:IND:INDIA:Bihar:Sitamarhi
+41:IN:IND:INDIA:Bihar:Siwan
+42:IN:IND:INDIA:Bihar:Vaishali
+1:IN:IND:INDIA:Mizoram:Aizawl
+2:IN:IND:INDIA:Mizoram:Chhimtuipui
+3:IN:IND:INDIA:Mizoram:Lunglei
+1:IN:IND:INDIA:Himachal Pradesh:Bilaspur
+2:IN:IND:INDIA:Himachal Pradesh:Chamba
+3:IN:IND:INDIA:Himachal Pradesh:Hamirpur
+4:IN:IND:INDIA:Himachal Pradesh:Kangra
+5:IN:IND:INDIA:Himachal Pradesh:Kinnaur
+6:IN:IND:INDIA:Himachal Pradesh:Kullu
+7:IN:IND:INDIA:Himachal Pradesh:Lahul and Spiti
+8:IN:IND:INDIA:Himachal Pradesh:Mandi
+9:IN:IND:INDIA:Himachal Pradesh:Shimla
+10:IN:IND:INDIA:Himachal Pradesh:Sirmaur (Nahan)
+11:IN:IND:INDIA:Himachal Pradesh:Solan
+12:IN:IND:INDIA:Himachal Pradesh:Una
+1:IN:IND:INDIA:Kerala:Alleppey
+2:IN:IND:INDIA:Kerala:Ernakulam
+3:IN:IND:INDIA:Kerala:Idukki
+4:IN:IND:INDIA:Kerala:Kannur (Cannanore)
+5:IN:IND:INDIA:Kerala:Kasaragod
+6:IN:IND:INDIA:Kerala:Kollam (Quilon)
+7:IN:IND:INDIA:Kerala:Kottayam
+8:IN:IND:INDIA:Kerala:Kozhikode
+9:IN:IND:INDIA:Kerala:Malappuram
+10:IN:IND:INDIA:Kerala:Palakkad (Palghat)
+11:IN:IND:INDIA:Kerala:Pathanamthitta
+12:IN:IND:INDIA:Kerala:Thiruvananthapuram (Triv)
+13:IN:IND:INDIA:Kerala:Trissur (Trichur)
+14:IN:IND:INDIA:Kerala:Wayanad (Wynad)
+1:IN:IND:INDIA:Arunachal Pradesh:Changlang
+2:IN:IND:INDIA:Arunachal Pradesh:Dibang Valley (Anni)
+3:IN:IND:INDIA:Arunachal Pradesh:East Kameng (Seppa)
+4:IN:IND:INDIA:Arunachal Pradesh:East Siang (Along)
+5:IN:IND:INDIA:Arunachal Pradesh:Lohit (Teju)
+6:IN:IND:INDIA:Arunachal Pradesh:Lower Subansiri (Ziro)
+7:IN:IND:INDIA:Arunachal Pradesh:Tawang
+8:IN:IND:INDIA:Arunachal Pradesh:Tirap
+9:IN:IND:INDIA:Arunachal Pradesh:Upper Subansiri (Dap.)
+10:IN:IND:INDIA:Arunachal Pradesh:West Kameng (Bomdila)
+11:IN:IND:INDIA:Arunachal Pradesh:West Siang
+1:IN:IND:INDIA:Tripura:North Tripura
+2:IN:IND:INDIA:Tripura:South Tripura
+3:IN:IND:INDIA:Tripura:West Tripura
+1:IN:IND:INDIA:Uttar Pradesh:Agra
+2:IN:IND:INDIA:Uttar Pradesh:Aligarh
+3:IN:IND:INDIA:Uttar Pradesh:Allahabad
+4:IN:IND:INDIA:Uttar Pradesh:Almora
+5:IN:IND:INDIA:Uttar Pradesh:Azamgarh
+6:IN:IND:INDIA:Uttar Pradesh:Bahraich
+7:IN:IND:INDIA:Uttar Pradesh:Ballia
+8:IN:IND:INDIA:Uttar Pradesh:Banda
+9:IN:IND:INDIA:Uttar Pradesh:Barabanki
+10:IN:IND:INDIA:Uttar Pradesh:Bareilly
+11:IN:IND:INDIA:Uttar Pradesh:Basti
+12:IN:IND:INDIA:Uttar Pradesh:Bijnor
+13:IN:IND:INDIA:Uttar Pradesh:Budaun
+14:IN:IND:INDIA:Uttar Pradesh:Bulandshahr
+15:IN:IND:INDIA:Uttar Pradesh:Chamoli
+16:IN:IND:INDIA:Uttar Pradesh:Dehra Dun
+17:IN:IND:INDIA:Uttar Pradesh:Deoria
+18:IN:IND:INDIA:Uttar Pradesh:Etah
+19:IN:IND:INDIA:Uttar Pradesh:Etawah
+20:IN:IND:INDIA:Uttar Pradesh:Faizabad
+21:IN:IND:INDIA:Uttar Pradesh:Farrukhabad
+22:IN:IND:INDIA:Uttar Pradesh:Fatehpur
+23:IN:IND:INDIA:Uttar Pradesh:Firozabad
+24:IN:IND:INDIA:Uttar Pradesh:Garhwal
+25:IN:IND:INDIA:Uttar Pradesh:Gazipur
+26:IN:IND:INDIA:Uttar Pradesh:Ghaziabad
+27:IN:IND:INDIA:Uttar Pradesh:Gonda
+28:IN:IND:INDIA:Uttar Pradesh:Gorakhpur
+29:IN:IND:INDIA:Uttar Pradesh:Hamirpur
+30:IN:IND:INDIA:Uttar Pradesh:Hardoi
+31:IN:IND:INDIA:Uttar Pradesh:Hardwar
+32:IN:IND:INDIA:Uttar Pradesh:Jalaun
+33:IN:IND:INDIA:Uttar Pradesh:Jaunpur
+34:IN:IND:INDIA:Uttar Pradesh:Jhansi
+35:IN:IND:INDIA:Uttar Pradesh:Kandur Nagar
+36:IN:IND:INDIA:Uttar Pradesh:Kanpur Dehat
+37:IN:IND:INDIA:Uttar Pradesh:Kheri
+38:IN:IND:INDIA:Uttar Pradesh:Lalitpur
+39:IN:IND:INDIA:Uttar Pradesh:Lucknow
+40:IN:IND:INDIA:Uttar Pradesh:Maharajganj
+41:IN:IND:INDIA:Uttar Pradesh:Maij
+42:IN:IND:INDIA:Uttar Pradesh:Mainpuri
+43:IN:IND:INDIA:Uttar Pradesh:Mathura
+44:IN:IND:INDIA:Uttar Pradesh:Meerut
+45:IN:IND:INDIA:Uttar Pradesh:Mirzapur
+46:IN:IND:INDIA:Uttar Pradesh:Moradabad
+47:IN:IND:INDIA:Uttar Pradesh:Muzaffarnagar
+48:IN:IND:INDIA:Uttar Pradesh:Nainital
+49:IN:IND:INDIA:Uttar Pradesh:Partapgarh
+50:IN:IND:INDIA:Uttar Pradesh:Pilibhit
+51:IN:IND:INDIA:Uttar Pradesh:Pithoragarh
+52:IN:IND:INDIA:Uttar Pradesh:Rae Bareli
+53:IN:IND:INDIA:Uttar Pradesh:Rampur
+54:IN:IND:INDIA:Uttar Pradesh:Saharanpur
+55:IN:IND:INDIA:Uttar Pradesh:Shahjahanpur
+56:IN:IND:INDIA:Uttar Pradesh:Siddharthnagar
+57:IN:IND:INDIA:Uttar Pradesh:Sitapur
+58:IN:IND:INDIA:Uttar Pradesh:Sonbhadra
+59:IN:IND:INDIA:Uttar Pradesh:Sultanpur
+60:IN:IND:INDIA:Uttar Pradesh:Tehri-Garhwal
+61:IN:IND:INDIA:Uttar Pradesh:Unnao
+62:IN:IND:INDIA:Uttar Pradesh:Uttarkashi
+63:IN:IND:INDIA:Uttar Pradesh:Varanasi
+1:IN:IND:INDIA:Assam:Barpeta
+2:IN:IND:INDIA:Assam:Bongaigaon
+3:IN:IND:INDIA:Assam:Cachar
+4:IN:IND:INDIA:Assam:Darrang (Mangaldai)
+5:IN:IND:INDIA:Assam:Dhemaji
+6:IN:IND:INDIA:Assam:Dhubri
+7:IN:IND:INDIA:Assam:Dibrugarh
+8:IN:IND:INDIA:Assam:Goalpara
+9:IN:IND:INDIA:Assam:Golaghat
+10:IN:IND:INDIA:Assam:Hajlakandi
+11:IN:IND:INDIA:Assam:Jorhat
+12:IN:IND:INDIA:Assam:Kamrup
+13:IN:IND:INDIA:Assam:Karbi Anglong
+14:IN:IND:INDIA:Assam:Karbi Anglong (Diphu)
+15:IN:IND:INDIA:Assam:Karimganj
+16:IN:IND:INDIA:Assam:Kokrajhar
+17:IN:IND:INDIA:Assam:Lakhimpur
+18:IN:IND:INDIA:Assam:Marigaon
+19:IN:IND:INDIA:Assam:N. Cacha Hills (Haflong)
+20:IN:IND:INDIA:Assam:Nagaon
+21:IN:IND:INDIA:Assam:Nalbari
+22:IN:IND:INDIA:Assam:Sibsagar
+23:IN:IND:INDIA:Assam:Sonitpur (Tezpur)
+24:IN:IND:INDIA:Assam:Tinsukia
+1:IN:IND:INDIA:Madhya Pradesh:Balaghat
+2:IN:IND:INDIA:Madhya Pradesh:Bastar (Jagdalpur)
+3:IN:IND:INDIA:Madhya Pradesh:Betul
+4:IN:IND:INDIA:Madhya Pradesh:Bhind
+5:IN:IND:INDIA:Madhya Pradesh:Bhopal
+6:IN:IND:INDIA:Madhya Pradesh:Bilaspur
+7:IN:IND:INDIA:Madhya Pradesh:Chhatrapur
+8:IN:IND:INDIA:Madhya Pradesh:Chhindwara
+9:IN:IND:INDIA:Madhya Pradesh:Damoh
+10:IN:IND:INDIA:Madhya Pradesh:Datia
+11:IN:IND:INDIA:Madhya Pradesh:Dewas
+12:IN:IND:INDIA:Madhya Pradesh:Dhar
+13:IN:IND:INDIA:Madhya Pradesh:Durg
+14:IN:IND:INDIA:Madhya Pradesh:East Nimar (Khandwa)
+15:IN:IND:INDIA:Madhya Pradesh:Guna
+16:IN:IND:INDIA:Madhya Pradesh:Gwalior
+17:IN:IND:INDIA:Madhya Pradesh:Hoshangabad
+18:IN:IND:INDIA:Madhya Pradesh:Indore
+19:IN:IND:INDIA:Madhya Pradesh:Jabalpur
+20:IN:IND:INDIA:Madhya Pradesh:Jhabua
+21:IN:IND:INDIA:Madhya Pradesh:Mandla
+22:IN:IND:INDIA:Madhya Pradesh:Mandsaur
+23:IN:IND:INDIA:Madhya Pradesh:Morena
+24:IN:IND:INDIA:Madhya Pradesh:Narsimhapur
+25:IN:IND:INDIA:Madhya Pradesh:Panna
+26:IN:IND:INDIA:Madhya Pradesh:Raigarh
+27:IN:IND:INDIA:Madhya Pradesh:Raipur
+28:IN:IND:INDIA:Madhya Pradesh:Raisen
+29:IN:IND:INDIA:Madhya Pradesh:Raj Nandgaon
+30:IN:IND:INDIA:Madhya Pradesh:Rajgarh
+31:IN:IND:INDIA:Madhya Pradesh:Ratlam
+32:IN:IND:INDIA:Madhya Pradesh:Rewa
+33:IN:IND:INDIA:Madhya Pradesh:Sagar
+34:IN:IND:INDIA:Madhya Pradesh:Satna
+35:IN:IND:INDIA:Madhya Pradesh:Sehore
+36:IN:IND:INDIA:Madhya Pradesh:Seoni
+37:IN:IND:INDIA:Madhya Pradesh:Shahdol
+38:IN:IND:INDIA:Madhya Pradesh:Shajapur
+39:IN:IND:INDIA:Madhya Pradesh:Shivpuri
+40:IN:IND:INDIA:Madhya Pradesh:Sidhi
+41:IN:IND:INDIA:Madhya Pradesh:Surguja (Ambikapur)
+42:IN:IND:INDIA:Madhya Pradesh:Tikamgarh
+43:IN:IND:INDIA:Madhya Pradesh:Ujjain
+44:IN:IND:INDIA:Madhya Pradesh:Vidisha
+45:IN:IND:INDIA:Madhya Pradesh:West Nimar (Khargon)
+1:IN:IND:INDIA:West Bengal:Bankura
+2:IN:IND:INDIA:West Bengal:Barddhaman
+3:IN:IND:INDIA:West Bengal:Birbhum (Situri)
+4:IN:IND:INDIA:West Bengal:Calcutta
+5:IN:IND:INDIA:West Bengal:Darjiling
+6:IN:IND:INDIA:West Bengal:Haora
+7:IN:IND:INDIA:West Bengal:Hugli (Chunchura)
+8:IN:IND:INDIA:West Bengal:Jalpaiguri
+9:IN:IND:INDIA:West Bengal:Koch Bihar
+10:IN:IND:INDIA:West Bengal:Maldah
+11:IN:IND:INDIA:West Bengal:Medinipur
+12:IN:IND:INDIA:West Bengal:Murshidabad
+13:IN:IND:INDIA:West Bengal:Nadia (Krishnanagar)
+14:IN:IND:INDIA:West Bengal:North 24 Panganas
+15:IN:IND:INDIA:West Bengal:Puruliya
+16:IN:IND:INDIA:West Bengal:South 24 Panganas
+17:IN:IND:INDIA:West Bengal:West Dinajpur
+1:IN:IND:INDIA:Dadra and Nagar Haveli:(Dadra) and Nagar Haveli
+2:IN:IND:INDIA:Dadra and Nagar Haveli:Dadra and (Nagar Haveli)
+1:IN:IND:INDIA:Haryana:Ambala
+2:IN:IND:INDIA:Haryana:Bhiwani
+3:IN:IND:INDIA:Haryana:Faridabad
+4:IN:IND:INDIA:Haryana:Gurgaon
+5:IN:IND:INDIA:Haryana:Hisar
+6:IN:IND:INDIA:Haryana:Jind
+7:IN:IND:INDIA:Haryana:Kaithal
+8:IN:IND:INDIA:Haryana:Karnal
+9:IN:IND:INDIA:Haryana:Kurukshetra
+10:IN:IND:INDIA:Haryana:Mahendragarh
+11:IN:IND:INDIA:Haryana:Panipat
+12:IN:IND:INDIA:Haryana:Rewari
+13:IN:IND:INDIA:Haryana:Rohtak
+14:IN:IND:INDIA:Haryana:Sirsa
+15:IN:IND:INDIA:Haryana:Sonipat
+16:IN:IND:INDIA:Haryana:Yamunanagar
+1:IN:IND:INDIA:Andaman & Nicobar:Andaman Islands
+2:IN:IND:INDIA:Andaman & Nicobar:Nicobar Islands
+1:IN:IND:INDIA:Goa:North Goa
+2:IN:IND:INDIA:Goa:South Goa
diff --git a/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..37bb30f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN1_LEX.txt
@@ -0,0 +1,27 @@
+1:IE-CW:IE:CARLOW
+2:IE-CN:IE:CAVAN
+3:IE-CE:IE:CLARE
+4:IE-C:IE:CORK
+5:IE-DL:IE:DONEGAL
+6:IE-D:IE:DUBLIN
+7:IE-G:IE:GALWAY
+8:IE-I:IE:IRELAND
+9:IE-KY:IE:KERRY
+10:IE-KE:IE:KILDARE
+11:IE-KK:IE:KILKENNY
+12:IE-LS:IE:LAOIS
+13:IE-LM:IE:LEITRIM
+14:IE-LK:IE:LIMERICK
+15:IE-LD:IE:LONGFORD
+16:IE-LH:IE:LOUTH
+17:IE-MO:IE:MAYO
+18:IE-MH:IE:MEATH
+19:IE-MN:IE:MONAGHAN
+20:IE-OY:IE:OFFALY
+21:IE-RN:IE:ROSCOMMON
+22:IE-SO:IE:SLIGO
+23:IE-TA:IE:TIPPERARY
+24:IE-WD:IE:WATERFORD
+25:IE-WH:IE:WESTMEATH
+26:IE-WX:IE:WEXFORD
+27:IE-WW:IE:WICKLOW
diff --git a/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRL/IRL_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..56eec96
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN1_LEX.txt
@@ -0,0 +1,38 @@
+1:IR-03:IR:ARDABL
+2:IR-BKT:IR:BAKHTARAN
+3:IR-06:IR:BUSHEHR
+4:IR-08:IR:CHAHARMAHAL AND BAKHTIAR
+5:IR-EAZ:IR:EAST AZARBAYEJAN
+6:IR-04:IR:ESFAHAN
+7:IR-4:IR:FARS
+8:IR-9:IR:GILAN
+9:IR-27:IR:GOLESTN
+10:IR-24:IR:HAMADAN
+11:IR-HSA:IR:HORASAN
+12:IR-23:IR:HORMOZGAN
+13:IR-05:IR:ILAM
+14:IR-5:IR:KERMAN
+15:IR-7:IR:KERMNSHH
+16:IR-09:IR:KHORSN
+17:IR-0:IR:KHUZESTAN
+18:IR-10:IR:KHZESTN
+19:IR-8:IR:KOHGILUYEH & BOYER AHMAD
+20:IR-6:IR:KORDESTAN
+21:IR-LRS:IR:LORESTAN
+22:IR-20:IR:LORESTN
+23:IR-22:IR:MARKAZ
+24:IR-MKZ:IR:MARKAZI
+25:IR-MZD:IR:MAZANDARAN
+26:IR-2:IR:MZANDARN
+27:IR-28:IR:QAZVN
+28:IR-26:IR:QOM
+29:IR-SEM:IR:SEMNAN
+30:IR-SBL:IR:SISTAN AND BALUCHESTAN
+31:IR-3:IR:SSTN VA BALCHESTN
+32:IR-THR:IR:TEHRAN
+33:IR-07:IR:TEHRN
+34:IR-WAJ:IR:WEST AZARBAYEJAN
+35:IR-25:IR:YAZD
+36:IR-Z:IR:ZANJAN
+37:IR-11:IR:ZANJN
+38:IR-02:IR:ZARBYJN E GHARB
diff --git a/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..fcf1835
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRN/IRN_ADMIN2_LEX.txt
@@ -0,0 +1,105 @@
+1:IR:IRN:IRAN:Chaharmahal and Bakhtiar:IRN.L2.3
+1:IR:IRN:IRAN:Bakhtaran:IRN.L2.5
+1:IR:IRN:IRAN:Semnan:IRN.L2.14
+1:IR:IRN:IRAN:Hormozgan:IRN.L2.54
+2:IR:IRN:IRAN:Hormozgan:IRN.L2.55
+3:IR:IRN:IRAN:Hormozgan:IRN.L2.56
+4:IR:IRN:IRAN:Hormozgan:IRN.L2.57
+5:IR:IRN:IRAN:Hormozgan:IRN.L2.58
+6:IR:IRN:IRAN:Hormozgan:IRN.L2.59
+7:IR:IRN:IRAN:Hormozgan:IRN.L2.60
+8:IR:IRN:IRAN:Hormozgan:IRN.L2.61
+9:IR:IRN:IRAN:Hormozgan:IRN.L2.62
+10:IR:IRN:IRAN:Hormozgan:IRN.L2.63
+11:IR:IRN:IRAN:Hormozgan:IRN.L2.64
+12:IR:IRN:IRAN:Hormozgan:IRN.L2.65
+13:IR:IRN:IRAN:Hormozgan:IRN.L2.66
+14:IR:IRN:IRAN:Hormozgan:IRN.L2.67
+15:IR:IRN:IRAN:Hormozgan:IRN.L2.68
+16:IR:IRN:IRAN:Hormozgan:IRN.L2.69
+17:IR:IRN:IRAN:Hormozgan:IRN.L2.70
+18:IR:IRN:IRAN:Hormozgan:IRN.L2.71
+19:IR:IRN:IRAN:Hormozgan:IRN.L2.72
+20:IR:IRN:IRAN:Hormozgan:IRN.L2.73
+21:IR:IRN:IRAN:Hormozgan:IRN.L2.74
+22:IR:IRN:IRAN:Hormozgan:IRN.L2.75
+23:IR:IRN:IRAN:Hormozgan:IRN.L2.76
+24:IR:IRN:IRAN:Hormozgan:IRN.L2.77
+25:IR:IRN:IRAN:Hormozgan:IRN.L2.78
+26:IR:IRN:IRAN:Hormozgan:IRN.L2.79
+27:IR:IRN:IRAN:Hormozgan:IRN.L2.80
+28:IR:IRN:IRAN:Hormozgan:IRN.L2.81
+29:IR:IRN:IRAN:Hormozgan:IRN.L2.82
+30:IR:IRN:IRAN:Hormozgan:IRN.L2.83
+31:IR:IRN:IRAN:Hormozgan:IRN.L2.84
+32:IR:IRN:IRAN:Hormozgan:IRN.L2.85
+33:IR:IRN:IRAN:Hormozgan:IRN.L2.86
+34:IR:IRN:IRAN:Hormozgan:IRN.L2.87
+35:IR:IRN:IRAN:Hormozgan:IRN.L2.88
+36:IR:IRN:IRAN:Hormozgan:IRN.L2.89
+37:IR:IRN:IRAN:Hormozgan:IRN.L2.90
+38:IR:IRN:IRAN:Hormozgan:IRN.L2.91
+1:IR:IRN:IRAN:Kohgiluyeh & Boyer Ahmad:IRN.L2.6
+1:IR:IRN:IRAN:Kerman:IRN.L2.13
+1:IR:IRN:IRAN:Gilan:IRN.L2.17
+1:IR:IRN:IRAN:Sistan and Baluchestan:IRN.L2.15
+2:IR:IRN:IRAN:Sistan and Baluchestan:IRN.L2.16
+1:IR:IRN:IRAN:Zanjan:IRN.L2.11
+1:IR:IRN:IRAN:Lorestan:IRN.L2.19
+1:IR:IRN:IRAN:West Azarbayejan:IRN.L2.9
+1:IR:IRN:IRAN:Yazd:IRN.L2.1
+1:IR:IRN:IRAN:Esfahan:IRN.L2.8
+1:IR:IRN:IRAN:Bushehr:IRN.L2.100
+2:IR:IRN:IRAN:Bushehr:IRN.L2.101
+3:IR:IRN:IRAN:Bushehr:IRN.L2.102
+4:IR:IRN:IRAN:Bushehr:IRN.L2.103
+5:IR:IRN:IRAN:Bushehr:IRN.L2.104
+6:IR:IRN:IRAN:Bushehr:IRN.L2.105
+7:IR:IRN:IRAN:Bushehr:IRN.L2.94
+8:IR:IRN:IRAN:Bushehr:IRN.L2.95
+9:IR:IRN:IRAN:Bushehr:IRN.L2.96
+10:IR:IRN:IRAN:Bushehr:IRN.L2.97
+11:IR:IRN:IRAN:Bushehr:IRN.L2.98
+12:IR:IRN:IRAN:Bushehr:IRN.L2.99
+1:IR:IRN:IRAN:Hamadan:IRN.L2.53
+1:IR:IRN:IRAN:Mazandaran:IRN.L2.92
+2:IR:IRN:IRAN:Mazandaran:IRN.L2.93
+1:IR:IRN:IRAN:Fars:IRN.L2.10
+1:IR:IRN:IRAN:Markazi:IRN.L2.4
+1:IR:IRN:IRAN:Horasan:IRN.L2.2
+1:IR:IRN:IRAN:Kordestan:IRN.L2.20
+1:IR:IRN:IRAN:Khuzestan:IRN.L2.21
+2:IR:IRN:IRAN:Khuzestan:IRN.L2.22
+3:IR:IRN:IRAN:Khuzestan:IRN.L2.23
+4:IR:IRN:IRAN:Khuzestan:IRN.L2.24
+5:IR:IRN:IRAN:Khuzestan:IRN.L2.25
+6:IR:IRN:IRAN:Khuzestan:IRN.L2.26
+7:IR:IRN:IRAN:Khuzestan:IRN.L2.27
+8:IR:IRN:IRAN:Khuzestan:IRN.L2.28
+9:IR:IRN:IRAN:Khuzestan:IRN.L2.29
+10:IR:IRN:IRAN:Khuzestan:IRN.L2.30
+11:IR:IRN:IRAN:Khuzestan:IRN.L2.31
+12:IR:IRN:IRAN:Khuzestan:IRN.L2.32
+13:IR:IRN:IRAN:Khuzestan:IRN.L2.33
+14:IR:IRN:IRAN:Khuzestan:IRN.L2.34
+15:IR:IRN:IRAN:Khuzestan:IRN.L2.35
+16:IR:IRN:IRAN:Khuzestan:IRN.L2.36
+17:IR:IRN:IRAN:Khuzestan:IRN.L2.37
+18:IR:IRN:IRAN:Khuzestan:IRN.L2.38
+19:IR:IRN:IRAN:Khuzestan:IRN.L2.39
+20:IR:IRN:IRAN:Khuzestan:IRN.L2.40
+21:IR:IRN:IRAN:Khuzestan:IRN.L2.41
+22:IR:IRN:IRAN:Khuzestan:IRN.L2.42
+23:IR:IRN:IRAN:Khuzestan:IRN.L2.43
+24:IR:IRN:IRAN:Khuzestan:IRN.L2.44
+25:IR:IRN:IRAN:Khuzestan:IRN.L2.45
+26:IR:IRN:IRAN:Khuzestan:IRN.L2.46
+27:IR:IRN:IRAN:Khuzestan:IRN.L2.47
+28:IR:IRN:IRAN:Khuzestan:IRN.L2.48
+29:IR:IRN:IRAN:Khuzestan:IRN.L2.49
+30:IR:IRN:IRAN:Khuzestan:IRN.L2.50
+31:IR:IRN:IRAN:Khuzestan:IRN.L2.51
+32:IR:IRN:IRAN:Khuzestan:IRN.L2.52
+1:IR:IRN:IRAN:Ilam:IRN.L2.7
+1:IR:IRN:IRAN:Tehran:IRN.L2.18
+1:IR:IRN:IRAN:East Azarbayejan:IRN.L2.12
diff --git a/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8c45191
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:IQ-AN:IQ:AL ANBAR
+2:IQ-BA:IQ:AL BASRAH
+3:IQ-MU:IQ:AL MUTHANNIA
+4:IQ-QA:IQ:AL QADISIYAH
+5:IQ-NA:IQ:AN NAJAF
+6:IQ-AR:IQ:ARBIL
+7:IQ-TS:IQ:AT TAMIM
+8:IQ-BB:IQ:BABIL
+9:IQ-BG:IQ:BAGHDAD
+10:IQ-DQ:IQ:DHI QAR
+11:IQ-DA:IQ:DIHOK
+12:IQ-DI:IQ:DIYALA
+13:IQ-NEU:IQ:IRQ/SAU NEUTRAL ZONE
+14:IQ-KA:IQ:KARBALA
+15:IQ-MA:IQ:MISAN
+16:IQ-NI:IQ:NEINEVA
+17:IQ-SD:IQ:SALAHUDDIN
+18:IQ-SU:IQ:SULAYMANIYAH
+19:IQ-WA:IQ:WASIT
diff --git a/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5a02bc2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/IRQ/IRQ_ADMIN2_LEX.txt
@@ -0,0 +1,19 @@
+1:IQ:IRQ:IRAQ:At-Tamim:IRQ.L2.11
+1:IQ:IRQ:IRAQ:Dhi-Qar:IRQ.L2.16
+1:IQ:IRQ:IRAQ:Misan:IRQ.L2.3
+1:IQ:IRQ:IRAQ:Al-Basrah:IRQ.L2.5
+1:IQ:IRQ:IRAQ:IRQ/SAU Neutral Zone:IRQ.L2.10
+1:IQ:IRQ:IRAQ:Arbil:IRQ.L2.14
+1:IQ:IRQ:IRAQ:Neineva:IRQ.L2.19
+1:IQ:IRQ:IRAQ:Sulaymaniyah:IRQ.L2.17
+1:IQ:IRQ:IRAQ:Diyala:IRQ.L2.12
+1:IQ:IRQ:IRAQ:Salahuddin:IRQ.L2.6
+1:IQ:IRQ:IRAQ:Babil:IRQ.L2.15
+1:IQ:IRQ:IRAQ:Dihok:IRQ.L2.13
+1:IQ:IRQ:IRAQ:Al-Qadisiyah:IRQ.L2.2
+1:IQ:IRQ:IRAQ:Baghdad:IRQ.L2.4
+1:IQ:IRQ:IRAQ:An-Najaf:IRQ.L2.18
+1:IQ:IRQ:IRAQ:Karbala:IRQ.L2.7
+1:IQ:IRQ:IRAQ:Al-Muthannia:IRQ.L2.8
+1:IQ:IRQ:IRAQ:Al-Anbar:IRQ.L2.9
+1:IQ:IRQ:IRAQ:Wasit:IRQ.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..588fb21
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:IS-7:IS:AUSTURLAND
+2:IS-:IS:HOFUOBORGARSVAOI UTAN REYKJAVIKUR
+3:IS-I:IS:ICELAND
+4:IS-6:IS:NOROURLAND EYSTRA
+5:IS-5:IS:NOROURLAND VESTRA
+6:IS-0:IS:REYKJAVIK
+7:IS-8:IS:SUOURLAND
+8:IS-2:IS:SUOURNES
+9:IS-4:IS:VESTFIROIR
+10:IS-3:IS:VESTURLAND
diff --git a/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ISL/ISL_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ab194dd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN1_LEX.txt
@@ -0,0 +1,124 @@
+1:IT-AB:IT:ABRUZZI
+2:IT-AG:IT:AGRIGENTO
+3:IT-AL:IT:ALESSANDRIA
+4:IT-AN:IT:ANCONA
+5:IT-AO:IT:AOSTA
+6:IT-AR:IT:AREZZO
+7:IT-AP:IT:ASCOLI PICENO
+8:IT-AT:IT:ASTI
+9:IT-AV:IT:AVELLINO
+10:IT-BA:IT:BARI
+11:IT-BC:IT:BASILICATA
+12:IT-BL:IT:BELLUNO
+13:IT-BN:IT:BENEVENTO
+14:IT-BG:IT:BERGAMO
+15:IT-BI:IT:BIELLA
+16:IT-BO:IT:BOLOGNA
+17:IT-BZ:IT:BOLZANO
+18:IT-BS:IT:BRESCIA
+19:IT-BR:IT:BRINDISI
+20:IT-CA:IT:CAGLIARI
+21:IT-CI:IT:CALABRIA
+22:IT-CL:IT:CALTANISSETTA
+23:IT-CM:IT:CAMPANIA
+24:IT-CB:IT:CAMPOBASSO
+25:IT-CE:IT:CASERTA
+26:IT-CT:IT:CATANIA
+27:IT-CZ:IT:CATANZARO
+28:IT-CH:IT:CHIETI
+29:IT-CO:IT:COMO
+30:IT-CS:IT:COSENZA
+31:IT-CR:IT:CREMONA
+32:IT-KR:IT:CROTONE
+33:IT-CN:IT:CUNEO
+34:IT-ER:IT:EMILIA ROMAGNA
+35:IT-EN:IT:ENNA
+36:IT-FE:IT:FERRARA
+37:IT-FI:IT:FIRENZE
+38:IT-FG:IT:FOGGIA
+39:IT-FO:IT:FORLÌ
+40:IT-GI:IT:FRIULI VENEZIA
+41:IT-FV:IT:FRIULI VENEZIA GIULIA
+42:IT-FR:IT:FROSINONE
+43:IT-GE:IT:GENOVA
+44:IT-GO:IT:GORIZIA
+45:IT-GR:IT:GROSSETO
+46:IT-IM:IT:IMPERIA
+47:IT-IS:IT:ISERNIA
+48:IT-SP:IT:LA SPEZIA
+49:IT-AQ:IT:LAQUILA
+50:IT-LT:IT:LATINA
+51:IT-LA:IT:LAZIO
+52:IT-LE:IT:LECCE
+53:IT-LC:IT:LECCO
+54:IT-LG:IT:LIGURIA
+55:IT-LI:IT:LIVORNO
+56:IT-LO:IT:LODI
+57:IT-LB:IT:LOMBARDIA
+58:IT-LU:IT:LUCCA
+59:IT-MC:IT:MACERATA
+60:IT-MN:IT:MANTOVA
+61:IT-MA:IT:MARCHE
+62:IT-MS:IT:MASSA CARRARA
+63:IT-MT:IT:MATERA
+64:IT-ME:IT:MESSINA
+65:IT-MI:IT:MILANO
+66:IT-MO:IT:MODENA
+67:IT-ML:IT:MOLISE
+68:IT-NA:IT:NAPOLI
+69:IT-NO:IT:NOVARA
+70:IT-NU:IT:NUORO
+71:IT-OR:IT:ORISTANO
+72:IT-PD:IT:PADOVA
+73:IT-PA:IT:PALERMO
+74:IT-PR:IT:PARMA
+75:IT-PV:IT:PAVIA
+76:IT-PG:IT:PERUGIA
+77:IT-PS:IT:PESARO E URBINO
+78:IT-PE:IT:PESCARA
+79:IT-PC:IT:PIACENZA
+80:IT-PM:IT:PIEMONTE
+81:IT-PI:IT:PISA
+82:IT-PT:IT:PISTOIA
+83:IT-PN:IT:PORDENONE
+84:IT-PZ:IT:POTENZA
+85:IT-PO:IT:PRATO
+86:IT-PU:IT:PUGLIA
+87:IT-RG:IT:RAGUSA
+88:IT-RA:IT:RAVENNA
+89:IT-RC:IT:REGGIO CALABRIA
+90:IT-RE:IT:REGGIO EMILIA
+91:IT-RI:IT:RIETI
+92:IT-RN:IT:RIMINI
+93:IT-RM:IT:ROMA
+94:IT-RO:IT:ROVIGO
+95:IT-SA:IT:SALERNO
+96:IT-SD:IT:SARDEGNA
+97:IT-SS:IT:SASSARI
+98:IT-SV:IT:SAVONA
+99:IT-SC:IT:SICILIA
+100:IT-SI:IT:SIENA
+101:IT-SR:IT:SIRACUSA
+102:IT-SO:IT:SONDRIO
+103:IT-TA:IT:TARANTO
+104:IT-TE:IT:TERAMO
+105:IT-TR:IT:TERNI
+106:IT-TO:IT:TORINO
+107:IT-TC:IT:TOSCANA
+108:IT-TP:IT:TRAPANI
+109:IT-AD:IT:TRENTINO ALTO ADIGE
+110:IT-TN:IT:TRENTO
+111:IT-TV:IT:TREVISO
+112:IT-TS:IT:TRIESTE
+113:IT-UD:IT:UDINE
+114:IT-UM:IT:UMBRIA
+115:IT-AS:IT:VALLE D'AOSTA
+116:IT-VA:IT:VARESE
+117:IT-VN:IT:VENETO
+118:IT-VE:IT:VENEZIA
+119:IT-VB:IT:VERBANO CUSIO OSSOLA
+120:IT-VC:IT:VERCELLI
+121:IT-VR:IT:VERONA
+122:IT-VV:IT:VIBO VALENTIA
+123:IT-VI:IT:VICENZA
+124:IT-VT:IT:VITERBO
diff --git a/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ITA/ITA_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f47121d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:JO-AQ:JO:AL QABA
+2:JO-AM:JO:AMMAN
+3:JO-IR:JO:IRBID
+4:JO-JA:JO:JARASH
+5:JO-AJ:JO:JLN
+6:JO-KA:JO:KARAK
+7:JO-MN:JO:MA AN
+8:JO-MA:JO:MAFRAQ
+9:JO-MD:JO:MDABA
+10:JO-BA:JO:SALT (BALQA)
+11:JO-AT:JO:TAFILA
+12:JO-AZ:JO:ZARQA
diff --git a/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..8757c24
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/JOR/JOR_ADMIN2_LEX.txt
@@ -0,0 +1,8 @@
+1:JO:JOR:JORDAN:Zarqa:JOR.L2.2
+1:JO:JOR:JORDAN:Salt (Balqa):JOR.L2.4
+1:JO:JOR:JORDAN:Amman:JOR.L2.1
+1:JO:JOR:JORDAN:Karak:JOR.L2.8
+1:JO:JOR:JORDAN:Mafraq:JOR.L2.3
+1:JO:JOR:JORDAN:Ma-an:JOR.L2.6
+1:JO:JOR:JORDAN:Irbid:JOR.L2.7
+1:JO:JOR:JORDAN:Tafila:JOR.L2.5
diff --git a/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..b72ebec
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN1_LEX.txt
@@ -0,0 +1,56 @@
+1:JP-23:JP:AITI [AICHI]
+2:JP-05:JP:AKITA
+3:JP-02:JP:AOMORI
+4:JP-CHB:JP:CHUBU
+5:JP-CHG:JP:CHUGOKU
+6:JP-38:JP:EHIME
+7:JP-2:JP:GIHU [GIFU]
+8:JP-51:JP:GUNMA
+9:JP-34:JP:HIROSIMA [HIROSHIMA]
+10:JP-0:JP:HOKKAIDO [HOKKAIDO]
+11:JP-HRI:JP:HOKURIKU
+12:JP-8:JP:HUKUI [FUKUI]
+13:JP-40:JP:HUKUOKA [FUKUOKA]
+14:JP-07:JP:HUKUSIMA [FUKUSHIMA]
+15:JP-28:JP:HYOGO [HYOGO]
+16:JP-08:JP:IBARAKI
+17:JP-7:JP:ISIKAWA [ISHIKAWA]
+18:JP-44:JP:ITA [OITA]
+19:JP-03:JP:IWATE
+20:JP-37:JP:KAGAWA
+21:JP-46:JP:KAGOSIMA [KAGOSHIMA]
+22:JP-4:JP:KANAGAWA
+23:JP-KNT:JP:KANTO
+24:JP-KIN:JP:KINKI
+25:JP-39:JP:KOTI [KOCHI]
+26:JP-43:JP:KUMAMOTO
+27:JP-26:JP:KYOTO [KYOTO]
+28:JP-KYU:JP:KYUSHU
+29:JP-24:JP:MIE
+30:JP-04:JP:MIYAGI
+31:JP-45:JP:MIYAZAKI
+32:JP-20:JP:NAGANO
+33:JP-42:JP:NAGASAKI
+34:JP-29:JP:NARA
+35:JP-5:JP:NIIGATA
+36:JP-33:JP:OKAYAMA
+37:JP-47:JP:OKINAWA
+38:JP-RYU:JP:RYUKIU ISLANDS
+39:JP-50:JP:SAITAMA
+40:JP-27:JP:SAKA [OSAKA]
+41:JP-SKO:JP:SHIKOKU
+42:JP-25:JP:SIGA [SHIGA]
+43:JP-32:JP:SIMANE [SHIMANE]
+44:JP-22:JP:SIZUOKA [SHIZUOKA]
+45:JP-52:JP:TIBA [CHIBA]
+46:JP-TOH:JP:TOHOKU
+47:JP-TAI:JP:TOKAI
+48:JP-36:JP:TOKUSIMA [TOKUSHIMA]
+49:JP-53:JP:TOKYO [TOKYO]
+50:JP-09:JP:TOTIGI [TOCHIGI]
+51:JP-3:JP:TOTTORI
+52:JP-6:JP:TOYAMA
+53:JP-30:JP:WAKAYAMA
+54:JP-06:JP:YAMAGATA
+55:JP-35:JP:YAMAGUTI [YAMAGUCHI]
+56:JP-9:JP:YAMANASI [YAMANASHI]
diff --git a/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..a511c26
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/JPN/JPN_ADMIN2_LEX.txt
@@ -0,0 +1,47 @@
+1:JP:JPN:JAPAN:Hokuriku:Fukui
+2:JP:JPN:JAPAN:Hokuriku:Ishikawa
+3:JP:JPN:JAPAN:Hokuriku:Niigata
+4:JP:JPN:JAPAN:Hokuriku:Toyama
+1:JP:JPN:JAPAN:Kinki:Hyogo
+2:JP:JPN:JAPAN:Kinki:Kyoto
+3:JP:JPN:JAPAN:Kinki:Nara
+4:JP:JPN:JAPAN:Kinki:Osaka
+5:JP:JPN:JAPAN:Kinki:Shiga
+6:JP:JPN:JAPAN:Kinki:Wakayama
+1:JP:JPN:JAPAN:Chugoku:Hiroshima
+2:JP:JPN:JAPAN:Chugoku:Okajama
+3:JP:JPN:JAPAN:Chugoku:Shimane
+4:JP:JPN:JAPAN:Chugoku:Tottori
+5:JP:JPN:JAPAN:Chugoku:Yamaguchi
+1:JP:JPN:JAPAN:Kyushu:Fukuoka
+2:JP:JPN:JAPAN:Kyushu:Kagoshima
+3:JP:JPN:JAPAN:Kyushu:Kumamoto
+4:JP:JPN:JAPAN:Kyushu:Miyazaki
+5:JP:JPN:JAPAN:Kyushu:Nagasaki
+6:JP:JPN:JAPAN:Kyushu:Oita
+7:JP:JPN:JAPAN:Kyushu:Saga
+1:JP:JPN:JAPAN:Chubu:Gifu
+2:JP:JPN:JAPAN:Chubu:Nagano
+3:JP:JPN:JAPAN:Chubu:Yamanashi
+1:JP:JPN:JAPAN:Ryukiu-Islands:Okinawa
+1:JP:JPN:JAPAN:Tokai:Aichi
+2:JP:JPN:JAPAN:Tokai:Mie
+3:JP:JPN:JAPAN:Tokai:Shizuoka
+1:JP:JPN:JAPAN:Tohoku:Akita
+2:JP:JPN:JAPAN:Tohoku:Aomori
+3:JP:JPN:JAPAN:Tohoku:Fukushima
+4:JP:JPN:JAPAN:Tohoku:Iwate
+5:JP:JPN:JAPAN:Tohoku:Miyagi
+6:JP:JPN:JAPAN:Tohoku:Yamagata
+1:JP:JPN:JAPAN:Hokkaido:Hokkaido
+1:JP:JPN:JAPAN:Kanto:Gumma
+2:JP:JPN:JAPAN:Kanto:Ibaraki
+3:JP:JPN:JAPAN:Kanto:Kanagawa
+4:JP:JPN:JAPAN:Kanto:Saitama
+5:JP:JPN:JAPAN:Kanto:Tochigi
+6:JP:JPN:JAPAN:Kanto:Tokyo
+7:JP:JPN:JAPAN:Kanto:Tshiba
+1:JP:JPN:JAPAN:Shikoku:Ehime
+2:JP:JPN:JAPAN:Shikoku:Kagawa
+3:JP:JPN:JAPAN:Shikoku:Kochi
+4:JP:JPN:JAPAN:Shikoku:Tokushima
diff --git a/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e08b4f0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN1_LEX.txt
@@ -0,0 +1,29 @@
+1:KZ-AKT:KZ:AKTYUBINSK
+2:KZ-ALM:KZ:ALMA ATA
+3:KZ-ALA:KZ:ALMATY
+4:KZ-AKM:KZ:AQMOLA OBLYSY
+5:KZ-ARS:KZ:ARAL SEA
+6:KZ-AST:KZ:ASTANA
+7:KZ-ATY:KZ:ATYRAU OBLYSY
+8:KZ-ZAP:KZ:BATYS QAZAQSTAN OBLYSY
+9:KZ-CHI:KZ:CHIMKENT
+10:KZ-DZA:KZ:DZHAMBUL
+11:KZ-DZE:KZ:DZHEZKAZGAN
+12:KZ-EAK:KZ:EAST KAZAKHSTAN
+13:KZ-GUR:KZ:GURYEV
+14:KZ-KAR:KZ:KARAGANDA
+15:KZ-KOC:KZ:KOCHETAV
+16:KZ-KUS:KZ:KUSTANAY
+17:KZ-KZO:KZ:KZYL ORDA
+18:KZ-MAN:KZ:MANGGHYSTAU OBLYSY
+19:KZ-NOK:KZ:NORTH KAZAKHSTAN
+20:KZ-YUZ:KZ:ONGTÜSTIK QAZAQSTAN OBLYSY
+21:KZ-PAV:KZ:PAVLODAR
+22:KZ-KZY:KZ:QYZYLORDA OBLYSY
+23:KZ-SEM:KZ:SEMIPALATINSK
+24:KZ-VOS:KZ:SHYGHYS QAZAQSTAN OBLYSY
+25:KZ-SEV:KZ:SOLTÜSTIK QAZAQSTAN OBLYSY
+26:KZ-TAK:KZ:TALDY KURGAN
+27:KZ-TSE:KZ:TSELINOGRAD
+28:KZ-URA:KZ:URALSK
+29:KZ-ZHA:KZ:ZHAMBYL OBLYSY
diff --git a/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN2_LEX.txt
new file mode 100644
index 0000000..60fb500
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KAZ/KAZ_ADMIN2_LEX.txt
@@ -0,0 +1,54 @@
+1:KZ:KAZ:KAZAKHSTAN:Chimkent:KAZ.L2.7
+1:KZ:KAZ:KAZAKHSTAN:Taldy Kurgan:KAZ.L2.54
+1:KZ:KAZ:KAZAKHSTAN:Semipalatinsk:KAZ.L2.5
+1:KZ:KAZ:KAZAKHSTAN:Uralsk:KAZ.L2.9
+1:KZ:KAZ:KAZAKHSTAN:Kzyl-Orda:KAZ.L2.51
+1:KZ:KAZ:KAZAKHSTAN:North Kazakhstan:KAZ.L2.3
+1:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.11
+2:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.12
+3:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.13
+4:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.14
+5:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.15
+6:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.16
+7:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.17
+8:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.18
+9:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.19
+10:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.20
+11:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.21
+12:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.22
+13:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.23
+14:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.24
+15:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.25
+16:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.26
+17:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.27
+18:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.28
+19:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.29
+20:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.30
+21:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.31
+22:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.32
+23:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.33
+24:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.34
+25:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.35
+26:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.36
+27:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.37
+28:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.38
+29:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.39
+30:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.40
+31:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.41
+32:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.42
+33:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.43
+34:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.44
+35:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.45
+36:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.46
+37:KZ:KAZ:KAZAKHSTAN:Aral Sea:KAZ.L2.47
+1:KZ:KAZ:KAZAKHSTAN:Kochetav:KAZ.L2.1
+1:KZ:KAZ:KAZAKHSTAN:Tselinograd:KAZ.L2.48
+1:KZ:KAZ:KAZAKHSTAN:Aktyubinsk:KAZ.L2.6
+1:KZ:KAZ:KAZAKHSTAN:East Kazakhstan:KAZ.L2.10
+1:KZ:KAZ:KAZAKHSTAN:Pavlodar:KAZ.L2.4
+1:KZ:KAZ:KAZAKHSTAN:Guryev:KAZ.L2.49
+1:KZ:KAZ:KAZAKHSTAN:Karaganda:KAZ.L2.2
+1:KZ:KAZ:KAZAKHSTAN:Dzhambul:KAZ.L2.52
+1:KZ:KAZ:KAZAKHSTAN:Alma-Ata:KAZ.L2.50
+1:KZ:KAZ:KAZAKHSTAN:Dzhezkazgan:KAZ.L2.53
+1:KZ:KAZ:KAZAKHSTAN:Kustanay:KAZ.L2.8
diff --git a/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..133c794
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN1_LEX.txt
@@ -0,0 +1,8 @@
+1:KE-200:KE:CENTRAL [CENTRAL2]
+2:KE-300:KE:COAST
+3:KE-400:KE:EASTERN
+4:KE-0:KE:NAIROBI [NAIROBI MUNICIPALITY]
+5:KE-500:KE:NORTH EASTERN  [N. EASTERN]
+6:KE-600:KE:NYANZA
+7:KE-700:KE:RIFT VALLEY
+8:KE-900:KE:WESTERN
diff --git a/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..4049a8f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KEN/KEN_ADMIN2_LEX.txt
@@ -0,0 +1,47 @@
+1:KE:KEN:KENYA:NAIROBI:NAIROBI
+1:KE:KEN:KENYA:NYANZA:HOMA_BAY
+2:KE:KEN:KENYA:NYANZA:KISII
+3:KE:KEN:KENYA:NYANZA:KISUMU
+4:KE:KEN:KENYA:NYANZA:MIGORI
+5:KE:KEN:KENYA:NYANZA:NYAMIRA
+6:KE:KEN:KENYA:NYANZA:SIAYA
+1:KE:KEN:KENYA:N. EASTERN:GARISSA
+2:KE:KEN:KENYA:N. EASTERN:MANDERA
+3:KE:KEN:KENYA:N. EASTERN:WAJIR
+1:KE:KEN:KENYA:CENTRAL:KIAMBU
+2:KE:KEN:KENYA:CENTRAL:KIRINYAGA
+3:KE:KEN:KENYA:CENTRAL:MURANGA
+4:KE:KEN:KENYA:CENTRAL:NYANDARUA
+5:KE:KEN:KENYA:CENTRAL:NYERI
+1:KE:KEN:KENYA:WESTERN:BUNGOMA
+2:KE:KEN:KENYA:WESTERN:BUSIA
+3:KE:KEN:KENYA:WESTERN:KAKAMEGA
+4:KE:KEN:KENYA:WESTERN:VIHIGA
+1:KE:KEN:KENYA:EASTERN:EMBU
+2:KE:KEN:KENYA:EASTERN:ISIOLO
+3:KE:KEN:KENYA:EASTERN:KITUI
+4:KE:KEN:KENYA:EASTERN:MACHAKOS
+5:KE:KEN:KENYA:EASTERN:MAKUENI
+6:KE:KEN:KENYA:EASTERN:MARSABIT
+7:KE:KEN:KENYA:EASTERN:MERU
+8:KE:KEN:KENYA:EASTERN:NITHI
+1:KE:KEN:KENYA:COAST:KILIFI
+2:KE:KEN:KENYA:COAST:KWALE
+3:KE:KEN:KENYA:COAST:LAMU
+4:KE:KEN:KENYA:COAST:MOMBASA
+5:KE:KEN:KENYA:COAST:TAITA TAVETA
+6:KE:KEN:KENYA:COAST:TANA RIVER
+1:KE:KEN:KENYA:RIFT VALLEY:BARINGO
+2:KE:KEN:KENYA:RIFT VALLEY:BOMET
+3:KE:KEN:KENYA:RIFT VALLEY:E. MARAKWET
+4:KE:KEN:KENYA:RIFT VALLEY:KAJIADO
+5:KE:KEN:KENYA:RIFT VALLEY:KERICHO
+6:KE:KEN:KENYA:RIFT VALLEY:LAIKIPIA
+7:KE:KEN:KENYA:RIFT VALLEY:NAKURU
+8:KE:KEN:KENYA:RIFT VALLEY:NANDI
+9:KE:KEN:KENYA:RIFT VALLEY:NAROK
+10:KE:KEN:KENYA:RIFT VALLEY:SAMBURU
+11:KE:KEN:KENYA:RIFT VALLEY:TRANS-NZOIA
+12:KE:KEN:KENYA:RIFT VALLEY:TURKANA
+13:KE:KEN:KENYA:RIFT VALLEY:UASIN GISHU
+14:KE:KEN:KENYA:RIFT VALLEY:WEST POKOT
diff --git a/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8b6ddbf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:KG-B:KG:BATKEN
+2:KG-GB:KG:BISHKEK
+3:KG-C:KG:CHÜ
+4:KG-ISK:KG:ISSYK KUL
+5:KG-J:KG:JALAL ABAD
+6:KG-KIT:KG:KIRGHIZISTAN TERRITORIES
+7:KG-N:KG:NARYN
+8:KG-O:KG:OSH
+9:KG-T:KG:TALAS
+10:KG-Y:KG:YSYK KL
diff --git a/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN2_LEX.txt
new file mode 100644
index 0000000..56c5d4e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KGZ/KGZ_ADMIN2_LEX.txt
@@ -0,0 +1,3 @@
+1:KG:KGZ:KYRGYZSTAN:Kirghizistan Territories:KGZ.L2.3
+1:KG:KGZ:KYRGYZSTAN:Issyk-Kul:KGZ.L2.2
+1:KG:KGZ:KYRGYZSTAN:Osh:KGZ.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..bcc64fa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN1_LEX.txt
@@ -0,0 +1,33 @@
+1:KH-2:KH:BAAT DAMBANG
+2:KH-10:KH:BANTEAY MEAN CHEY [BANTEAY MEANCHEY]
+3:KH-BEA:KH:BANTEAY MEANCHEY
+4:KH-BTG:KH:BATTAMBANG
+5:KH-3:KH:KAMPONG CHAAM
+6:KH-KPC:KH:KAMPONG CHAM
+7:KH-4:KH:KAMPONG CHHNANG
+8:KH-KMS:KH:KAMPONG SPEU
+9:KH-5:KH:KAMPONG SPUEU [KAMPNG SPE]
+10:KH-KTH:KH:KAMPONG THOM
+11:KH-6:KH:KAMPONG THUM [KAMPNG THUM]
+12:KH-7:KH:KAMPOT [KAMPOT]
+13:KH-KAN:KH:KANDAL
+14:KH-9:KH:KAOH KONG [KAOH KNG]
+15:KH-KOH:KH:KOH KONG
+16:KH-0:KH:KRACHEH [KRACHEH]
+17:KH-KRE:KH:KRATIE
+18:KH-23:KH:KRONG KAEB
+19:KH-8:KH:KRONG PREAH SIHANOUK
+20:KH-24:KH:MONDOL KIRI [MONDL KIRI]
+21:KH-MOK:KH:MONDUL KIRI
+22:KH-22:KH:OTDAR MEAN CHEY [TDAR MEANCHEY]
+23:KH-20:KH:PHNOM PENH
+24:KH-21:KH:PREAH VIHEAR
+25:KH-PVG:KH:PREY VENG
+26:KH-PUR:KH:PURSAT
+27:KH-RAK:KH:RATANA KIRI
+28:KH-SER:KH:SIEM REAP
+29:KH-STR:KH:STUNG TRENG
+30:KH-SVY:KH:SVAY RIENG
+31:KH-25:KH:TAAKAEV [TAKEV]
+32:KH-TKE:KH:TAKEO
+33:KH-TOL:KH:TONLE SAP
diff --git a/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..1b72a60
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KHM/KHM_ADMIN2_LEX.txt
@@ -0,0 +1,165 @@
+1:KH:KHM:CAMBODIA:Mondul Kiri:Koh Nhek
+2:KH:KHM:CAMBODIA:Mondul Kiri:O Reang
+3:KH:KHM:CAMBODIA:Mondul Kiri:Pich Roda
+1:KH:KHM:CAMBODIA:Kampot:Angkor Chey
+2:KH:KHM:CAMBODIA:Kampot:Bantey Meas
+3:KH:KHM:CAMBODIA:Kampot:Chhouk
+4:KH:KHM:CAMBODIA:Kampot:Chumkiri
+5:KH:KHM:CAMBODIA:Kampot:Dang Tung
+6:KH:KHM:CAMBODIA:Kampot:Kampong Trach
+7:KH:KHM:CAMBODIA:Kampot:Kampot (DC)
+8:KH:KHM:CAMBODIA:Kampot:Kampot (PT)
+1:KH:KHM:CAMBODIA:Kampong Chhnang:Baribo
+2:KH:KHM:CAMBODIA:Kampong Chhnang:Chul Kiri
+3:KH:KHM:CAMBODIA:Kampong Chhnang:Kampong Chhnang (PT)
+4:KH:KHM:CAMBODIA:Kampong Chhnang:Kampong Leng
+5:KH:KHM:CAMBODIA:Kampong Chhnang:Kampong Tralach
+6:KH:KHM:CAMBODIA:Kampong Chhnang:Rolear Phiear
+7:KH:KHM:CAMBODIA:Kampong Chhnang:Samaki Meanchey
+8:KH:KHM:CAMBODIA:Kampong Chhnang:Tuk Phos
+1:KH:KHM:CAMBODIA:Banteay Meanchey:Banteay Ampil
+2:KH:KHM:CAMBODIA:Banteay Meanchey:Mongkol Borey
+3:KH:KHM:CAMBODIA:Banteay Meanchey:Phnom Srok
+4:KH:KHM:CAMBODIA:Banteay Meanchey:Preah Net Preah
+5:KH:KHM:CAMBODIA:Banteay Meanchey:Serey Sophorn
+6:KH:KHM:CAMBODIA:Banteay Meanchey:Sisophon (PT)
+7:KH:KHM:CAMBODIA:Banteay Meanchey:Thmar Puok
+1:KH:KHM:CAMBODIA:Kandal:Kandal Stung
+2:KH:KHM:CAMBODIA:Kandal:Kean Svey
+3:KH:KHM:CAMBODIA:Kandal:Khsach Kandal
+4:KH:KHM:CAMBODIA:Kandal:Koh Thom
+5:KH:KHM:CAMBODIA:Kandal:Leuk Dek
+6:KH:KHM:CAMBODIA:Kandal:Lvea Em
+7:KH:KHM:CAMBODIA:Kandal:Muk Kampoul
+8:KH:KHM:CAMBODIA:Kandal:Phnom Penh (DC)
+9:KH:KHM:CAMBODIA:Kandal:Ponhea Leu
+10:KH:KHM:CAMBODIA:Kandal:Saang
+11:KH:KHM:CAMBODIA:Kandal:Takmau (PT)
+1:KH:KHM:CAMBODIA:Preah Vihear:Chey Sen
+2:KH:KHM:CAMBODIA:Preah Vihear:Chhep
+3:KH:KHM:CAMBODIA:Preah Vihear:Chom Khsan
+4:KH:KHM:CAMBODIA:Preah Vihear:Koulen
+5:KH:KHM:CAMBODIA:Preah Vihear:Rovieng
+6:KH:KHM:CAMBODIA:Preah Vihear:Sangkum Thmey
+7:KH:KHM:CAMBODIA:Preah Vihear:Tbeng Meanchey
+1:KH:KHM:CAMBODIA:Phnom Penh:Dangkork
+2:KH:KHM:CAMBODIA:Phnom Penh:Mean Chey
+3:KH:KHM:CAMBODIA:Phnom Penh:Phnom Penh (PC)
+4:KH:KHM:CAMBODIA:Phnom Penh:Russey Keo
+1:KH:KHM:CAMBODIA:Kampong Speu:Baset
+2:KH:KHM:CAMBODIA:Kampong Speu:Kampong Speu
+3:KH:KHM:CAMBODIA:Kampong Speu:Kong Pisey
+4:KH:KHM:CAMBODIA:Kampong Speu:Oral
+5:KH:KHM:CAMBODIA:Kampong Speu:Oudong
+6:KH:KHM:CAMBODIA:Kampong Speu:Phnom Sruoch
+7:KH:KHM:CAMBODIA:Kampong Speu:Samrong Tong
+8:KH:KHM:CAMBODIA:Kampong Speu:Thpong
+1:KH:KHM:CAMBODIA:Prey Veng:Bar Phnom
+2:KH:KHM:CAMBODIA:Prey Veng:Kamchay Mear
+3:KH:KHM:CAMBODIA:Prey Veng:Kampong Trabek
+4:KH:KHM:CAMBODIA:Prey Veng:Kanch Chreach
+5:KH:KHM:CAMBODIA:Prey Veng:Mesang
+6:KH:KHM:CAMBODIA:Prey Veng:Peam Chor
+7:KH:KHM:CAMBODIA:Prey Veng:Peam Ro
+8:KH:KHM:CAMBODIA:Prey Veng:Peareang
+9:KH:KHM:CAMBODIA:Prey Veng:Pey Veng (DC)
+10:KH:KHM:CAMBODIA:Prey Veng:Preah Sdech
+11:KH:KHM:CAMBODIA:Prey Veng:Prey Veng (PT)
+12:KH:KHM:CAMBODIA:Prey Veng:Sithor Kandal
+1:KH:KHM:CAMBODIA:Stung Treng:Sesan
+2:KH:KHM:CAMBODIA:Stung Treng:Siem Bok
+3:KH:KHM:CAMBODIA:Stung Treng:Siem Pang
+4:KH:KHM:CAMBODIA:Stung Treng:Stung Treng (PT)
+5:KH:KHM:CAMBODIA:Stung Treng:Thala Bariwat
+1:KH:KHM:CAMBODIA:Siem Reap:Angkor Chum
+2:KH:KHM:CAMBODIA:Siem Reap:Angkor Thom
+3:KH:KHM:CAMBODIA:Siem Reap:Bantey Srey
+4:KH:KHM:CAMBODIA:Siem Reap:Chi Kreng
+5:KH:KHM:CAMBODIA:Siem Reap:Chong Kal
+6:KH:KHM:CAMBODIA:Siem Reap:Kralanh
+7:KH:KHM:CAMBODIA:Siem Reap:Pouk
+8:KH:KHM:CAMBODIA:Siem Reap:Samroung
+9:KH:KHM:CAMBODIA:Siem Reap:Siem Reap (DC)
+10:KH:KHM:CAMBODIA:Siem Reap:Siem Reap (PT)
+11:KH:KHM:CAMBODIA:Siem Reap:Sotr Nikum
+12:KH:KHM:CAMBODIA:Siem Reap:Srey Snom
+13:KH:KHM:CAMBODIA:Siem Reap:Svey Leu
+14:KH:KHM:CAMBODIA:Siem Reap:Varin
+1:KH:KHM:CAMBODIA:Tonle Sap:Mittapheap
+2:KH:KHM:CAMBODIA:Tonle Sap:Prey Noup
+3:KH:KHM:CAMBODIA:Tonle Sap:Stung Hav
+1:KH:KHM:CAMBODIA:Koh Kong:Botum Sakor
+2:KH:KHM:CAMBODIA:Koh Kong:Kiri Sakor
+3:KH:KHM:CAMBODIA:Koh Kong:Koh Kong (DC)
+4:KH:KHM:CAMBODIA:Koh Kong:Koh Kong (PT)
+5:KH:KHM:CAMBODIA:Koh Kong:Mondul Sema
+6:KH:KHM:CAMBODIA:Koh Kong:Sre Ambel
+7:KH:KHM:CAMBODIA:Koh Kong:Thmar Baing
+1:KH:KHM:CAMBODIA:Battambang:Banon
+2:KH:KHM:CAMBODIA:Battambang:Battambang (PT)
+3:KH:KHM:CAMBODIA:Battambang:Battambong (DC)
+4:KH:KHM:CAMBODIA:Battambang:Bavel
+5:KH:KHM:CAMBODIA:Battambang:Ek Phnom
+6:KH:KHM:CAMBODIA:Battambang:Mong Russey
+7:KH:KHM:CAMBODIA:Battambang:Rattanak Mondul
+8:KH:KHM:CAMBODIA:Battambang:Sangke
+1:KH:KHM:CAMBODIA:Takeo:Angkor Borey
+2:KH:KHM:CAMBODIA:Takeo:Bati
+3:KH:KHM:CAMBODIA:Takeo:Borey Chulasar
+4:KH:KHM:CAMBODIA:Takeo:Kiri Vong
+5:KH:KHM:CAMBODIA:Takeo:Koh Andet
+6:KH:KHM:CAMBODIA:Takeo:Prey Kabas
+7:KH:KHM:CAMBODIA:Takeo:Samrong
+8:KH:KHM:CAMBODIA:Takeo:Takeo (PT)
+9:KH:KHM:CAMBODIA:Takeo:Tram Kak
+10:KH:KHM:CAMBODIA:Takeo:Treang
+1:KH:KHM:CAMBODIA:Pursat:Bakan
+2:KH:KHM:CAMBODIA:Pursat:Kandieng
+3:KH:KHM:CAMBODIA:Pursat:Krakor
+4:KH:KHM:CAMBODIA:Pursat:Kravanh
+5:KH:KHM:CAMBODIA:Pursat:Pursat (PT)
+1:KH:KHM:CAMBODIA:Ratana Kiri:Andong Meas
+2:KH:KHM:CAMBODIA:Ratana Kiri:Banlung (PT)
+3:KH:KHM:CAMBODIA:Ratana Kiri:Bar Keo
+4:KH:KHM:CAMBODIA:Ratana Kiri:Kon Mum
+5:KH:KHM:CAMBODIA:Ratana Kiri:Lum Phat
+6:KH:KHM:CAMBODIA:Ratana Kiri:O Chum
+7:KH:KHM:CAMBODIA:Ratana Kiri:O Ya Dav
+8:KH:KHM:CAMBODIA:Ratana Kiri:Taveng
+9:KH:KHM:CAMBODIA:Ratana Kiri:Ven Sai
+1:KH:KHM:CAMBODIA:Kampong Cham:Batheay
+2:KH:KHM:CAMBODIA:Kampong Cham:Chamkar Leu
+3:KH:KHM:CAMBODIA:Kampong Cham:Cheng Prey
+4:KH:KHM:CAMBODIA:Kampong Cham:Dambe
+5:KH:KHM:CAMBODIA:Kampong Cham:Kampong Cham (PT)
+6:KH:KHM:CAMBODIA:Kampong Cham:Kampong Siem
+7:KH:KHM:CAMBODIA:Kampong Cham:Kang Meas
+8:KH:KHM:CAMBODIA:Kampong Cham:Koh Sotin
+9:KH:KHM:CAMBODIA:Kampong Cham:Kroch Chma
+10:KH:KHM:CAMBODIA:Kampong Cham:Memot
+11:KH:KHM:CAMBODIA:Kampong Cham:O Reang Ov
+12:KH:KHM:CAMBODIA:Kampong Cham:Ponhea Krek
+13:KH:KHM:CAMBODIA:Kampong Cham:Prey Chhor
+14:KH:KHM:CAMBODIA:Kampong Cham:Srei Santhor
+15:KH:KHM:CAMBODIA:Kampong Cham:Stung Trang
+16:KH:KHM:CAMBODIA:Kampong Cham:Tbong Khmum
+1:KH:KHM:CAMBODIA:Kratie:Chlong
+2:KH:KHM:CAMBODIA:Kratie:Kratie
+3:KH:KHM:CAMBODIA:Kratie:Prek Prasap
+4:KH:KHM:CAMBODIA:Kratie:Sambo
+5:KH:KHM:CAMBODIA:Kratie:Snoul
+1:KH:KHM:CAMBODIA:Kampong Thom:Baray
+2:KH:KHM:CAMBODIA:Kampong Thom:Kampong Svay
+3:KH:KHM:CAMBODIA:Kampong Thom:Kampong Thom (PT)
+4:KH:KHM:CAMBODIA:Kampong Thom:Prasat Balang
+5:KH:KHM:CAMBODIA:Kampong Thom:Prasat Sambo
+6:KH:KHM:CAMBODIA:Kampong Thom:Sandan
+7:KH:KHM:CAMBODIA:Kampong Thom:Santuk
+8:KH:KHM:CAMBODIA:Kampong Thom:Stung
+1:KH:KHM:CAMBODIA:Svay Rieng:Chan Trea
+2:KH:KHM:CAMBODIA:Svay Rieng:Kampong Ro
+3:KH:KHM:CAMBODIA:Svay Rieng:Ramdoul
+4:KH:KHM:CAMBODIA:Svay Rieng:Romeas Hek
+5:KH:KHM:CAMBODIA:Svay Rieng:Svay Rieng (DC)
+6:KH:KHM:CAMBODIA:Svay Rieng:Svay Rieng (PT)
+7:KH:KHM:CAMBODIA:Svay Rieng:Svay Teap
diff --git a/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..14cfb9b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN1_LEX.txt
@@ -0,0 +1,16 @@
+1:KR-49:KR:CHEJU DO
+2:KR-45:KR:CHOLLABUK DO
+3:KR-46:KR:CHOLLANAM DO
+4:KR-43:KR:CHUNGCHONGBUK DO
+5:KR-44:KR:CHUNGCHONGNAM DO
+6:KR-28:KR:INCHON
+7:KR-42:KR:KANG WON DO
+8:KR-29:KR:KWANGJU
+9:KR-4:KR:KYONGGI DO
+10:KR-47:KR:KYONGSANGBUK DO
+11:KR-48:KR:KYONGSANGNAM DO
+12:KR-26:KR:PUSAN
+13:KR-0:KR:SEOUL
+14:KR-27:KR:TAEGU
+15:KR-30:KR:TAEJON
+16:KR-3:KR:ULSAN GWANGYEOGSI [ULSAN KWANGYKSHI]
diff --git a/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..27d2d3d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KOR/KOR_ADMIN2_LEX.txt
@@ -0,0 +1,327 @@
+1:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.100
+2:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.101
+3:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.102
+4:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.103
+5:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.104
+6:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.105
+7:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.106
+8:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.107
+9:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.108
+10:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.109
+11:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.110
+12:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.111
+13:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.112
+14:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.113
+15:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.114
+16:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.115
+17:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.116
+18:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.117
+19:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.118
+20:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.119
+21:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.120
+22:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.121
+23:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.122
+24:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.123
+25:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.124
+26:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.125
+27:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.126
+28:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.127
+29:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.128
+30:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.129
+31:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.130
+32:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.131
+33:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.132
+34:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.133
+35:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.134
+36:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.135
+37:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.136
+38:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.137
+39:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.138
+40:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.139
+41:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.140
+42:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.141
+43:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.142
+44:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.143
+45:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.144
+46:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.145
+47:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.146
+48:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.147
+49:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.148
+50:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.149
+51:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.150
+52:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.151
+53:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.152
+54:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.153
+55:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.154
+56:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.155
+57:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.156
+58:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.157
+59:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.158
+60:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.159
+61:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.160
+62:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.161
+63:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.162
+64:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.163
+65:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.164
+66:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.165
+67:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.166
+68:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.167
+69:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.168
+70:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.169
+71:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.170
+72:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.171
+73:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.172
+74:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.173
+75:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.174
+76:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.175
+77:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.176
+78:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.177
+79:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.178
+80:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.179
+81:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.180
+82:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.181
+83:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.182
+84:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.183
+85:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.184
+86:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.185
+87:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.186
+88:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.187
+89:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.188
+90:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.189
+91:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.190
+92:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.191
+93:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.192
+94:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.193
+95:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.194
+96:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.195
+97:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.196
+98:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.197
+99:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.198
+100:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.199
+101:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.200
+102:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.201
+103:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.202
+104:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.203
+105:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.204
+106:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.205
+107:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.206
+108:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.207
+109:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.208
+110:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.209
+111:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.210
+112:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.211
+113:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.212
+114:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.213
+115:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.214
+116:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.215
+117:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.216
+118:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.217
+119:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.218
+120:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.219
+121:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.220
+122:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.221
+123:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.222
+124:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.223
+125:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.224
+126:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.225
+127:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.226
+128:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.227
+129:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.228
+130:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.229
+131:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.230
+132:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.231
+133:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.232
+134:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.233
+135:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.234
+136:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.235
+137:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.236
+138:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.237
+139:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.238
+140:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.239
+141:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.240
+142:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.241
+143:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.242
+144:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.243
+145:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.244
+146:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.245
+147:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.246
+148:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.247
+149:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.248
+150:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.249
+151:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.250
+152:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.251
+153:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.252
+154:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.253
+155:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.254
+156:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.255
+157:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.256
+158:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.257
+159:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.258
+160:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.259
+161:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.260
+162:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.261
+163:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.262
+164:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.263
+165:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.264
+166:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.265
+167:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.266
+168:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.267
+169:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.268
+170:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.269
+171:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.270
+172:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.271
+173:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.272
+174:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.273
+175:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.274
+176:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.275
+177:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.276
+178:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.277
+179:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.278
+180:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.279
+181:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.280
+182:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.281
+183:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.282
+184:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.283
+185:KR:KOR:SOUTH KOREA:Chollanam-Do:KOR.L2.99
+1:KR:KOR:SOUTH KOREA:Pusan:KOR.L2.64
+2:KR:KOR:SOUTH KOREA:Pusan:KOR.L2.65
+1:KR:KOR:SOUTH KOREA:Chungchongbuk-Do:KOR.L2.17
+1:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.20
+2:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.21
+3:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.22
+4:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.23
+5:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.24
+6:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.25
+7:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.26
+8:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.27
+9:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.28
+10:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.29
+11:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.30
+12:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.31
+13:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.32
+14:KR:KOR:SOUTH KOREA:Chollabuk-Do:KOR.L2.33
+1:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.1
+2:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.10
+3:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.2
+4:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.3
+5:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.4
+6:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.5
+7:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.6
+8:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.7
+9:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.8
+10:KR:KOR:SOUTH KOREA:Inchon:KOR.L2.9
+1:KR:KOR:SOUTH KOREA:Cheju-Do:KOR.L2.11
+2:KR:KOR:SOUTH KOREA:Cheju-Do:KOR.L2.12
+3:KR:KOR:SOUTH KOREA:Cheju-Do:KOR.L2.13
+4:KR:KOR:SOUTH KOREA:Cheju-Do:KOR.L2.14
+1:KR:KOR:SOUTH KOREA:Kwangju:KOR.L2.66
+1:KR:KOR:SOUTH KOREA:Taejon:KOR.L2.34
+1:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.36
+2:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.37
+3:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.38
+4:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.39
+5:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.40
+6:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.41
+7:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.42
+8:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.43
+9:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.44
+10:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.45
+11:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.46
+12:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.47
+13:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.48
+14:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.49
+15:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.50
+16:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.51
+17:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.52
+18:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.53
+19:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.54
+20:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.55
+21:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.56
+22:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.57
+23:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.58
+24:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.59
+25:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.60
+26:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.61
+27:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.62
+28:KR:KOR:SOUTH KOREA:Chungchongnam-Do:KOR.L2.63
+1:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.67
+2:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.68
+3:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.69
+4:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.70
+5:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.71
+6:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.72
+7:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.73
+8:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.74
+9:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.75
+10:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.76
+11:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.77
+12:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.78
+13:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.79
+14:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.80
+15:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.81
+16:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.82
+17:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.83
+18:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.84
+19:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.85
+20:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.86
+21:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.87
+22:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.88
+23:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.89
+24:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.90
+25:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.91
+26:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.92
+27:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.93
+28:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.94
+29:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.95
+30:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.96
+31:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.97
+32:KR:KOR:SOUTH KOREA:Kyonggi-Do:KOR.L2.98
+1:KR:KOR:SOUTH KOREA:Seoul:KOR.L2.16
+1:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.284
+2:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.285
+3:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.286
+4:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.287
+5:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.288
+6:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.289
+7:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.290
+8:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.291
+9:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.292
+10:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.293
+11:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.294
+12:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.295
+13:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.296
+14:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.297
+15:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.298
+16:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.299
+17:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.300
+18:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.301
+19:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.302
+20:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.303
+21:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.304
+22:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.305
+23:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.306
+24:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.307
+25:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.308
+26:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.309
+27:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.310
+28:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.311
+29:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.312
+30:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.313
+31:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.314
+32:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.315
+33:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.316
+34:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.317
+35:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.318
+36:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.319
+37:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.320
+38:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.321
+39:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.322
+40:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.323
+41:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.324
+42:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.325
+43:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.326
+44:KR:KOR:SOUTH KOREA:Kyongsangnam-Do:KOR.L2.327
+1:KR:KOR:SOUTH KOREA:Taegu:KOR.L2.15
+1:KR:KOR:SOUTH KOREA:Kyongsangbuk-Do:KOR.L2.18
+2:KR:KOR:SOUTH KOREA:Kyongsangbuk-Do:KOR.L2.19
+1:KR:KOR:SOUTH KOREA:Kang-Won-Do:KOR.L2.35
diff --git a/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN1_LEX.txt
new file mode 100644
index 0000000..eb2d845
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN1_LEX.txt
@@ -0,0 +1,6 @@
+1:KW-AH:KW:AL AMADI
+2:KW-FA:KW:AL FARWANIYAH
+3:KW-JA:KW:AL JAHRAH
+4:KW-KU:KW:AL KUWAYT
+5:KW-HA:KW:AWALLI
+6:KW-K:KW:KUWAIT
diff --git a/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN2_LEX.txt
new file mode 100644
index 0000000..b178159
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/KWT/KWT_ADMIN2_LEX.txt
@@ -0,0 +1,10 @@
+1:KW:KWT:KUWAIT:Kuwait:KWT.L2.1
+2:KW:KWT:KUWAIT:Kuwait:KWT.L2.10
+3:KW:KWT:KUWAIT:Kuwait:KWT.L2.2
+4:KW:KWT:KUWAIT:Kuwait:KWT.L2.3
+5:KW:KWT:KUWAIT:Kuwait:KWT.L2.4
+6:KW:KWT:KUWAIT:Kuwait:KWT.L2.5
+7:KW:KWT:KUWAIT:Kuwait:KWT.L2.6
+8:KW:KWT:KUWAIT:Kuwait:KWT.L2.7
+9:KW:KWT:KUWAIT:Kuwait:KWT.L2.8
+10:KW:KWT:KUWAIT:Kuwait:KWT.L2.9
diff --git a/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6953530
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN1_LEX.txt
@@ -0,0 +1,21 @@
+1:LA-AT:LA:ATTOPU
+2:LA-BK:LA:BOKEO
+3:LA-BL:LA:BOLIKHAMSAI
+4:LA-CH:LA:CHAMPASSACK
+5:LA-HO:LA:HOUAPHANH
+6:LA-KH:LA:KHAMMOUAN
+7:LA-KK:LA:KHAMMOUANE
+8:LA-LP:LA:LUANG PRABANG
+9:LA-LM:LA:NAMTHA
+10:LA-OU:LA:OUDOMXAY
+11:LA-PH:LA:PHONGSALY
+12:LA-SL:LA:SALAVAN [SARAVANE]
+13:LA-SR:LA:SARAVANE
+14:LA-SV:LA:SAVANNAKHET
+15:LA-XA:LA:SAYABOURI
+16:LA-XE:LA:SEKONG
+17:LA-VT:LA:VIENTIANE
+18:LA-VI:LA:VIENTIANE (MUNIC.)
+19:LA-VI2:LA:VIENTIANE 2
+20:LA-XN:LA:XAISOMBOUN
+21:LA-XI:LA:XIANGKHOUANG
diff --git a/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN2_LEX.txt
new file mode 100644
index 0000000..2b62d54
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LAO/LAO_ADMIN2_LEX.txt
@@ -0,0 +1,133 @@
+1:LA:LAO:LAOS:Bolikhamsai:Borikhane
+2:LA:LAO:LAOS:Bolikhamsai:Khamkeut
+3:LA:LAO:LAOS:Bolikhamsai:Pakkading
+4:LA:LAO:LAOS:Bolikhamsai:Paksane
+5:LA:LAO:LAOS:Bolikhamsai:Thaphabat
+6:LA:LAO:LAOS:Bolikhamsai:Viengthong
+1:LA:LAO:LAOS:Attopu:Phouvong
+2:LA:LAO:LAOS:Attopu:Samakkhixay
+3:LA:LAO:LAOS:Attopu:Sanamxay
+4:LA:LAO:LAOS:Attopu:Sanxay
+5:LA:LAO:LAOS:Attopu:Saysettha
+1:LA:LAO:LAOS:Vientiane (Munic.):Chanthaboury
+2:LA:LAO:LAOS:Vientiane (Munic.):Hatsayphong
+3:LA:LAO:LAOS:Vientiane (Munic.):Naxaythong
+4:LA:LAO:LAOS:Vientiane (Munic.):Pak Ngum
+5:LA:LAO:LAOS:Vientiane (Munic.):Sangthong
+6:LA:LAO:LAOS:Vientiane (Munic.):Saysettha
+7:LA:LAO:LAOS:Vientiane (Munic.):Sikhottabong
+8:LA:LAO:LAOS:Vientiane (Munic.):Sisattanack
+9:LA:LAO:LAOS:Vientiane (Munic.):Xaythany
+1:LA:LAO:LAOS:Namtha:Long
+2:LA:LAO:LAOS:Namtha:Na Le
+3:LA:LAO:LAOS:Namtha:Namtha
+4:LA:LAO:LAOS:Namtha:Sing
+5:LA:LAO:LAOS:Namtha:Viengphoukha
+1:LA:LAO:LAOS:Bokeo:Houay Xay
+2:LA:LAO:LAOS:Bokeo:Meung
+3:LA:LAO:LAOS:Bokeo:Pak Tha
+4:LA:LAO:LAOS:Bokeo:Pha Oudom
+5:LA:LAO:LAOS:Bokeo:Ton Pheung
+1:LA:LAO:LAOS:Vientiane 2:Hom
+2:LA:LAO:LAOS:Vientiane 2:Longsane
+3:LA:LAO:LAOS:Vientiane 2:Phoune
+4:LA:LAO:LAOS:Vientiane 2:Saysomboune
+5:LA:LAO:LAOS:Vientiane 2:Thathome
+1:LA:LAO:LAOS:Sekong:Dack Cheung
+2:LA:LAO:LAOS:Sekong:Kaleum
+3:LA:LAO:LAOS:Sekong:La Mam
+4:LA:LAO:LAOS:Sekong:Tha Teng
+1:LA:LAO:LAOS:Sayabouri:Boten
+2:LA:LAO:LAOS:Sayabouri:Hongsa
+3:LA:LAO:LAOS:Sayabouri:Kenethao
+4:LA:LAO:LAOS:Sayabouri:Khob
+5:LA:LAO:LAOS:Sayabouri:Ngeune
+6:LA:LAO:LAOS:Sayabouri:Pak Lay
+7:LA:LAO:LAOS:Sayabouri:Phieng
+8:LA:LAO:LAOS:Sayabouri:Sayaboury
+9:LA:LAO:LAOS:Sayabouri:Xieng Hon
+1:LA:LAO:LAOS:Xiangkhouang:Kham
+2:LA:LAO:LAOS:Xiangkhouang:Khoune
+3:LA:LAO:LAOS:Xiangkhouang:Mok May
+4:LA:LAO:LAOS:Xiangkhouang:Nong Het
+5:LA:LAO:LAOS:Xiangkhouang:Pek
+6:LA:LAO:LAOS:Xiangkhouang:Phaxay
+7:LA:LAO:LAOS:Xiangkhouang:Phou Kout
+1:LA:LAO:LAOS:Luang Prabang:Chomphet
+2:LA:LAO:LAOS:Luang Prabang:Luang Prabang
+3:LA:LAO:LAOS:Luang Prabang:Nam Bak
+4:LA:LAO:LAOS:Luang Prabang:Nane
+5:LA:LAO:LAOS:Luang Prabang:Ngoy
+6:LA:LAO:LAOS:Luang Prabang:Pak Ou
+7:LA:LAO:LAOS:Luang Prabang:Pak Seng
+8:LA:LAO:LAOS:Luang Prabang:Phonxay
+9:LA:LAO:LAOS:Luang Prabang:Phoukhoune
+10:LA:LAO:LAOS:Luang Prabang:Viengkham
+11:LA:LAO:LAOS:Luang Prabang:Xiengngeun
+1:LA:LAO:LAOS:Phongsaly:Boun Neua
+2:LA:LAO:LAOS:Phongsaly:Boun Tay
+3:LA:LAO:LAOS:Phongsaly:Khoua
+4:LA:LAO:LAOS:Phongsaly:May
+5:LA:LAO:LAOS:Phongsaly:Phongsaly
+6:LA:LAO:LAOS:Phongsaly:Samphanh
+7:LA:LAO:LAOS:Phongsaly:Yot Ou
+1:LA:LAO:LAOS:Saravane:Khongsedone
+2:LA:LAO:LAOS:Saravane:Lakhonepheng
+3:LA:LAO:LAOS:Saravane:Lao Ngam
+4:LA:LAO:LAOS:Saravane:Sa Mouay
+5:LA:LAO:LAOS:Saravane:Saravane
+6:LA:LAO:LAOS:Saravane:Ta Oy
+7:LA:LAO:LAOS:Saravane:Toumlane
+8:LA:LAO:LAOS:Saravane:Vapy
+1:LA:LAO:LAOS:Houaphanh:Houameuang
+2:LA:LAO:LAOS:Houaphanh:Samneua
+3:LA:LAO:LAOS:Houaphanh:Samtay
+4:LA:LAO:LAOS:Houaphanh:Viengthong
+5:LA:LAO:LAOS:Houaphanh:Viengxay
+6:LA:LAO:LAOS:Houaphanh:Xiengkho
+1:LA:LAO:LAOS:Vientiane:Kasy
+2:LA:LAO:LAOS:Vientiane:Keooudom
+3:LA:LAO:LAOS:Vientiane:Pheuang
+4:LA:LAO:LAOS:Vientiane:Pholhong
+5:LA:LAO:LAOS:Vientiane:Sanakham
+6:LA:LAO:LAOS:Vientiane:Thoulakhom
+7:LA:LAO:LAOS:Vientiane:Vangvieng
+1:LA:LAO:LAOS:Khammouane:Boualapha
+2:LA:LAO:LAOS:Khammouane:Hineboune
+3:LA:LAO:LAOS:Khammouane:Mahaxay
+4:LA:LAO:LAOS:Khammouane:Nakai
+5:LA:LAO:LAOS:Khammouane:Nong Bok
+6:LA:LAO:LAOS:Khammouane:Saybouathong
+7:LA:LAO:LAOS:Khammouane:Sebangphay
+8:LA:LAO:LAOS:Khammouane:Thakhek
+9:LA:LAO:LAOS:Khammouane:Yommalath
+1:LA:LAO:LAOS:Champassack:Batiengchaleunsouk
+2:LA:LAO:LAOS:Champassack:Champassack
+3:LA:LAO:LAOS:Champassack:Khong
+4:LA:LAO:LAOS:Champassack:Mounlapamok
+5:LA:LAO:LAOS:Champassack:Pak Se
+6:LA:LAO:LAOS:Champassack:Paksong
+7:LA:LAO:LAOS:Champassack:Pathouphone
+8:LA:LAO:LAOS:Champassack:Phonthong
+9:LA:LAO:LAOS:Champassack:Sanasomboune
+10:LA:LAO:LAOS:Champassack:Soukhoumma
+1:LA:LAO:LAOS:Savannakhet:Assaphone
+2:LA:LAO:LAOS:Savannakhet:Atsaphangthong
+3:LA:LAO:LAOS:Savannakhet:Champhone
+4:LA:LAO:LAOS:Savannakhet:Khanthaboury
+5:LA:LAO:LAOS:Savannakhet:Nong
+6:LA:LAO:LAOS:Savannakhet:Outhoumphone
+7:LA:LAO:LAOS:Savannakhet:Phine
+8:LA:LAO:LAOS:Savannakhet:Seponh
+9:LA:LAO:LAOS:Savannakhet:Songkhone
+10:LA:LAO:LAOS:Savannakhet:Thapangthong
+11:LA:LAO:LAOS:Savannakhet:Viraboury
+12:LA:LAO:LAOS:Savannakhet:Xayboury
+13:LA:LAO:LAOS:Savannakhet:Xonboury
+1:LA:LAO:LAOS:Oudomxay:Beng
+2:LA:LAO:LAOS:Oudomxay:Houne
+3:LA:LAO:LAOS:Oudomxay:La
+4:LA:LAO:LAOS:Oudomxay:Na Mo
+5:LA:LAO:LAOS:Oudomxay:Nga
+6:LA:LAO:LAOS:Oudomxay:Pak Beng
+7:LA:LAO:LAOS:Oudomxay:Xay
diff --git a/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2a18c2a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN1_LEX.txt
@@ -0,0 +1,7 @@
+1:LB-BA:LB:BEIROUT
+2:LB-BI:LB:EL BEQAA
+3:LB-JL:LB:JABAL LOUBNANE
+4:LB-L:LB:LEBANON
+5:LB-AS:LB:LOUBNANE ECH CHEMALI
+6:LB-JA:LB:LOUBNANE EJ JNOUBI
+7:LB-NA:LB:NABATIYE
diff --git a/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..aee4bf7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBN/LBN_ADMIN2_LEX.txt
@@ -0,0 +1 @@
+1:LB:LBN:LEBANON:Lebanon:LBN.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..efa5b20
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN1_LEX.txt
@@ -0,0 +1,15 @@
+1:LR-BM:LR:BOMI TERR.
+2:LR-BG:LR:BONG
+3:LR-GB:LR:GRAND BASSA
+4:LR-CM:LR:GRAND CAPE MOUNT
+5:LR-GG:LR:GRAND GEDEH
+6:LR-GK:LR:KRU COAST TERR.
+7:LR-LO:LR:LOFA
+8:LR-MG:LR:MARGIBI
+9:LR-MR:LR:MARSHALL TERR.
+10:LR-MY:LR:MARYLAND
+11:LR-MO:LR:MONTSERRADO
+12:LR-NI:LR:NIMBA
+13:LR-RI:LR:RIVERCESS TERR.
+14:LR-SA:LR:SASSTOWN TERR.
+15:LR-SI:LR:SINOE
diff --git a/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..10e5abe
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBR/LBR_ADMIN2_LEX.txt
@@ -0,0 +1,54 @@
+1:LR:LBR:LIBERIA:Marshall Terr.:Mamba Kaba
+2:LR:LBR:LIBERIA:Marshall Terr.:Marshall
+1:LR:LBR:LIBERIA:Montserrado:Careysburg
+2:LR:LBR:LIBERIA:Montserrado:Firestone
+3:LR:LBR:LIBERIA:Montserrado:Kakata
+4:LR:LBR:LIBERIA:Montserrado:Monrovia
+5:LR:LBR:LIBERIA:Montserrado:St. Paul River
+6:LR:LBR:LIBERIA:Montserrado:Todee
+1:LR:LBR:LIBERIA:Maryland:Buah
+2:LR:LBR:LIBERIA:Maryland:Harper
+3:LR:LBR:LIBERIA:Maryland:Plebo
+1:LR:LBR:LIBERIA:Grand Bassa:No. 1
+2:LR:LBR:LIBERIA:Grand Bassa:No. 2
+3:LR:LBR:LIBERIA:Grand Bassa:No. 3
+4:LR:LBR:LIBERIA:Grand Bassa:No. 4
+5:LR:LBR:LIBERIA:Grand Bassa:No. 5 Buchanan
+1:LR:LBR:LIBERIA:Grand Gedeh:Gbarzon
+2:LR:LBR:LIBERIA:Grand Gedeh:Gbeapo
+3:LR:LBR:LIBERIA:Grand Gedeh:Konobo
+4:LR:LBR:LIBERIA:Grand Gedeh:Tchien
+5:LR:LBR:LIBERIA:Grand Gedeh:Webbo
+1:LR:LBR:LIBERIA:Grand Cape Mount:Garwla
+2:LR:LBR:LIBERIA:Grand Cape Mount:Porkpaa
+3:LR:LBR:LIBERIA:Grand Cape Mount:Robertsport
+4:LR:LBR:LIBERIA:Grand Cape Mount:Tewor
+1:LR:LBR:LIBERIA:Sinoe:Bloni Sinoe
+2:LR:LBR:LIBERIA:Sinoe:Greenville
+3:LR:LBR:LIBERIA:Sinoe:Juarzon Sinoe
+4:LR:LBR:LIBERIA:Sinoe:Juarzon Sub
+5:LR:LBR:LIBERIA:Sinoe:Sinoe River Sobo
+1:LR:LBR:LIBERIA:Sasstown Terr.:Jeoh
+1:LR:LBR:LIBERIA:Bong:Gbarnga
+2:LR:LBR:LIBERIA:Bong:Gibi
+3:LR:LBR:LIBERIA:Bong:Kokoyah
+4:LR:LBR:LIBERIA:Bong:Salala
+5:LR:LBR:LIBERIA:Bong:Sanoyea
+1:LR:LBR:LIBERIA:Bomi Terr.:Klay
+2:LR:LBR:LIBERIA:Bomi Terr.:Mecca
+1:LR:LBR:LIBERIA:Nimba:Gbehlay
+2:LR:LBR:LIBERIA:Nimba:Saclepea
+3:LR:LBR:LIBERIA:Nimba:Sanniquellie
+4:LR:LBR:LIBERIA:Nimba:Tappita
+5:LR:LBR:LIBERIA:Nimba:Yarwein Mensonn.
+6:LR:LBR:LIBERIA:Nimba:Zoe Geh
+1:LR:LBR:LIBERIA:Kru Coast Terr.:Lowe Kru Coast
+2:LR:LBR:LIBERIA:Kru Coast Terr.:Upper Kru Coast
+1:LR:LBR:LIBERIA:Lofa:Bopolu
+2:LR:LBR:LIBERIA:Lofa:Gbarma
+3:LR:LBR:LIBERIA:Lofa:Guma
+4:LR:LBR:LIBERIA:Lofa:Kolahun
+5:LR:LBR:LIBERIA:Lofa:Voinjama
+6:LR:LBR:LIBERIA:Lofa:Zorzor
+1:LR:LBR:LIBERIA:Rivercess Terr.:Morweh No. 5B
+2:LR:LBR:LIBERIA:Rivercess Terr.:Timbo No. 5A
diff --git a/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN1_LEX.txt
new file mode 100644
index 0000000..be276a3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN1_LEX.txt
@@ -0,0 +1,52 @@
+1:LY-SS:LY:ABRTAH URMN
+2:LY-ADJ:LY:AJDABIYA (AGEDABIA)
+3:LY-AJ:LY:AJDBIY
+4:LY-AZY:LY:AL AZIZIYAH
+5:LY-BU:LY:AL BUNN
+6:LY-FTH:LY:AL FATAH
+7:LY-HZ:LY:AL IZM AL AKHAR
+8:LY-JA:LY:AL JABAL AL AKHDAR
+9:LY-JI:LY:AL JIFRAH
+10:LY-JU:LY:AL JUFRAH
+11:LY-KHO:LY:AL KHOMS
+12:LY-KF:LY:AL KUFRAH
+13:LY-MJ:LY:AL MARJ
+14:LY-MB:LY:AL MARQAB
+15:LY-QT:LY:AL QARN
+16:LY-QB:LY:AL QUBBAH
+17:LY-WA:LY:AL WAH
+18:LY-NQ:LY:AN NUQA AL KHAMS
+19:LY-TB:LY:ARBULUS
+20:LY-ASH:LY:ASH SHATI
+21:LY-SH:LY:ASH SHI
+22:LY-AWB:LY:AWBARI (UBARI)
+23:LY-ZA:LY:AZ ZAWIA (AZZAWIYA)
+24:LY-BW:LY:BAN WALD
+25:LY-BA:LY:BANGHAZI
+26:LY-DR:LY:DARNAH
+27:LY-GHA:LY:GHADAMIS
+28:LY-GD:LY:GHADMIS
+29:LY-GRY:LY:GHARYAN
+30:LY-GR:LY:GHARYN
+31:LY-GT:LY:GHT
+32:LY-JB:LY:JAGHBB
+33:LY-MI:LY:MIRTAH
+34:LY-MIS:LY:MISURATA
+35:LY-MZ:LY:MIZDAH
+36:LY-MQ:LY:MURZUQ
+37:LY-NL:LY:NLT
+38:LY-NUG:LY:NUQAT AL KHAMS
+39:LY-SB:LY:SABH
+40:LY-SAB:LY:SABHA
+41:LY-SAW:LY:SAWFAJJIN (SOFULJEEN)
+42:LY-SR:LY:SURT
+43:LY-SUR:LY:SURT (SIRTE)
+44:LY-TM:LY:TARHNAH MASALLTAH
+45:LY-TAR:LY:TARHUNAH
+46:LY-TN:LY:TJR WA AN NAW ARB
+47:LY-TRI:LY:TRIPOLI (TARABULUS)
+48:LY-TUB:LY:TUBRUQ (TOBRUK)
+49:LY-WD:LY:WD AL AYT
+50:LY-YAF:LY:YAFRAN (YEFREN)
+51:LY-YJ:LY:YAFRAN JD
+52:LY-ZEL:LY:ZELEITIN (ZLITEN)
diff --git a/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN2_LEX.txt
new file mode 100644
index 0000000..bf5ba56
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LBY/LBY_ADMIN2_LEX.txt
@@ -0,0 +1,25 @@
+1:LY:LBY:LIBYA:Murzuq:N.A
+1:LY:LBY:LIBYA:Ghadamis:N.A
+1:LY:LBY:LIBYA:Al Fatah:N.A
+1:LY:LBY:LIBYA:Tarhunah:N.A
+1:LY:LBY:LIBYA:Awbari (Ubari):N.A
+1:LY:LBY:LIBYA:Al Aziziyah:N.A
+1:LY:LBY:LIBYA:Yafran (Yefren):N.A
+1:LY:LBY:LIBYA:Tubruq (Tobruk):N.A
+1:LY:LBY:LIBYA:Ash Shati:N.A
+1:LY:LBY:LIBYA:Al Kufrah:N.A
+1:LY:LBY:LIBYA:Ajdabiya (Agedabia):N.A
+1:LY:LBY:LIBYA:Zeleitin (Zliten):N.A
+1:LY:LBY:LIBYA:Sabha:N.A
+1:LY:LBY:LIBYA:Al Jufrah:N.A
+1:LY:LBY:LIBYA:Al Khoms:N.A
+1:LY:LBY:LIBYA:Az Zawia (Azzawiya):N.A
+1:LY:LBY:LIBYA:Darnah:N.A
+1:LY:LBY:LIBYA:Surt (Sirte):N.A
+1:LY:LBY:LIBYA:Tripoli (Tarabulus):N.A
+1:LY:LBY:LIBYA:Banghazi:N.A
+1:LY:LBY:LIBYA:Gharyan:N.A
+1:LY:LBY:LIBYA:Misurata:N.A
+1:LY:LBY:LIBYA:Sawfajjin (Sofuljeen):N.A
+1:LY:LBY:LIBYA:Nuqat Al Khams:N.A
+1:LY:LBY:LIBYA:Al Jabal Al Akhdar:N.A
diff --git a/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..659bbeb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:LI-LIE:LI:LICHTENSTEIN
diff --git a/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LIE/LIE_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN1_LEX.txt
new file mode 100644
index 0000000..0c05596
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:LS-D:LS:BEREA
+2:LS-B:LS:BUTHA BUTHE
+3:LS-C:LS:LERIBE
+4:LS-E:LS:MAFETENG
+5:LS-A:LS:MASERU
+6:LS-F:LS:MOHALE'S HOEK
+7:LS-J:LS:MOKHOTLONG
+8:LS-H:LS:QUACHA'S NEK
+9:LS-G:LS:QUTHING
+10:LS-K:LS:THABA TSEKA
diff --git a/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN2_LEX.txt
new file mode 100644
index 0000000..75bcde0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LSO/LSO_ADMIN2_LEX.txt
@@ -0,0 +1,11 @@
+1:LS:LSO:LESOTHO:Leribe:LSO.L2.5
+1:LS:LSO:LESOTHO:Mafeteng:LSO.L2.10
+2:LS:LSO:LESOTHO:Mafeteng:LSO.L2.11
+1:LS:LSO:LESOTHO:Mohale'S Hoek:LSO.L2.6
+1:LS:LSO:LESOTHO:Mokhotlong:LSO.L2.4
+1:LS:LSO:LESOTHO:Butha-Buthe:LSO.L2.7
+1:LS:LSO:LESOTHO:Quthing:LSO.L2.3
+1:LS:LSO:LESOTHO:Thaba Tseka:LSO.L2.1
+1:LS:LSO:LESOTHO:Berea:LSO.L2.9
+1:LS:LSO:LESOTHO:Maseru:LSO.L2.2
+1:LS:LSO:LESOTHO:Quacha'S Nek:LSO.L2.8
diff --git a/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN1_LEX.txt
new file mode 100644
index 0000000..9def5e2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:LU-L:LX:LUXEMBOURG (GRAND DUCHE)
diff --git a/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/LUX/LUX_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN1_LEX.txt
new file mode 100644
index 0000000..aa31876
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:MO-M:MO:MACAU
diff --git a/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN2_LEX.txt
new file mode 100644
index 0000000..047cc5e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MAC/MAC_ADMIN2_LEX.txt
@@ -0,0 +1,3 @@
+1:MO:MAC:MACAU:Macau:MAC.L2.1
+2:MO:MAC:MACAU:Macau:MAC.L2.2
+3:MO:MAC:MACAU:Macau:MAC.L2.3
diff --git a/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6215887
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN1_LEX.txt
@@ -0,0 +1,58 @@
+1:MA-AGD:MA:AGADIR
+2:MA-BAH:MA:AIT BAHA
+3:MA-MEL:MA:AIT MELLOUL
+4:MA-HAO:MA:AL HAOUZ
+5:MA-HOC:MA:AL HOCEIMA
+6:MA-ASZ:MA:ASSA ZAG
+7:MA-AZI:MA:AZILAL
+8:MA-BES:MA:BEN SLIMANE
+9:MA-BEM:MA:BENI MELLAL
+10:MA-BER:MA:BERKANE
+11:MA-BOD:MA:BOUJDOUR
+12:MA-BOM:MA:BOULEMANE
+13:MA-CAS:MA:CASABLANCA [DAR EL BEIDA]
+14:MA-C:MA:CENTRE
+15:MA-CEN:MA:CENTRE NORD
+16:MA-CES:MA:CENTRE SUD
+17:MA-CHE:MA:CHEFCHAOUENE
+18:MA-CHI:MA:CHICHAOUA
+19:MA-HAJ:MA:EL HAJEB
+20:MA-JDI:MA:EL JADIDA
+21:MA-ERR:MA:ERRACHIDIA
+22:MA-ESM:MA:ES SMARA
+23:MA-ESI:MA:ESSAOUIRA
+24:MA-FES:MA:FES
+25:MA-FIG:MA:FIGUIG
+26:MA-GUE:MA:GUELMIM
+27:MA-IFR:MA:IFRANE
+28:MA-JRA:MA:JERADA
+29:MA-KES:MA:KELAAT SRAGHNA
+30:MA-KEN:MA:KENITRA
+31:MA-KHE:MA:KHEMISSET
+32:MA-KHN:MA:KHENIFRA
+33:MA-KHO:MA:KHOURIBGA
+34:MA-LAA:MA:LAAYOUNE
+35:MA-LAR:MA:LARACHE
+36:MA-MAR:MA:MARRAKECH
+37:MA-MEK:MA:MEKNES
+38:MA-NAD:MA:NADOR
+39:MA-N:MA:NORD OUEST
+40:MA-OR:MA:ORIENTAL
+41:MA-OUA:MA:OUARZAZATE
+42:MA-OUD:MA:OUED ED DAHAB
+43:MA-OUJ:MA:OUJDA
+44:MA-RBA:MA:RABAT SALE
+45:MA-SAF:MA:SAFI
+46:MA-SEF:MA:SEFROU
+47:MA-SET:MA:SETTAT
+48:MA-SIK:MA:SIDI KACEM
+49:MA-S:MA:SUD
+50:MA-TNT:MA:TAN TAN
+51:MA-TNG:MA:TANGER
+52:MA-TAO:MA:TAOUNATE
+53:MA-TAR:MA:TAROUDANNT
+54:MA-TAT:MA:TATA
+55:MA-TAZ:MA:TAZA
+56:MA-TE:MA:TENSIFT
+57:MA-TET:MA:TETOUAN
+58:MA-TIZ:MA:TIZNIT
diff --git a/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5c1603d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MAR/MAR_ADMIN2_LEX.txt
@@ -0,0 +1,49 @@
+1:MA:MAR:MOROCCO:Centre:Ain Chock
+2:MA:MAR:MOROCCO:Centre:Ain Sebaa/Hay M.
+3:MA:MAR:MOROCCO:Centre:Al Fida/Derb Sul
+4:MA:MAR:MOROCCO:Centre:Azilal
+5:MA:MAR:MOROCCO:Centre:Ben Slimane
+6:MA:MAR:MOROCCO:Centre:Ben-Msick/Othman
+7:MA:MAR:MOROCCO:Centre:Beni Mellal
+8:MA:MAR:MOROCCO:Centre:Casa-Anfa
+9:MA:MAR:MOROCCO:Centre:El Jadida
+10:MA:MAR:MOROCCO:Centre:Khouribga
+11:MA:MAR:MOROCCO:Centre:Settat
+12:MA:MAR:MOROCCO:Centre:Sidi Bern./Moham.-Znata
+1:MA:MAR:MOROCCO:Centre Sud:Errachidia
+2:MA:MAR:MOROCCO:Centre Sud:Ifrane
+3:MA:MAR:MOROCCO:Centre Sud:Khenifra
+4:MA:MAR:MOROCCO:Centre Sud:Meknes
+1:MA:MAR:MOROCCO:Tensift:El Kelaa
+2:MA:MAR:MOROCCO:Tensift:Essaouira
+3:MA:MAR:MOROCCO:Tensift:Marrakesh
+4:MA:MAR:MOROCCO:Tensift:Safi
+1:MA:MAR:MOROCCO:Sud:Agadir
+2:MA:MAR:MOROCCO:Sud:Boujdour
+3:MA:MAR:MOROCCO:Sud:Es-Semara
+4:MA:MAR:MOROCCO:Sud:Guelmin
+5:MA:MAR:MOROCCO:Sud:Laayoune
+6:MA:MAR:MOROCCO:Sud:Ouarzazate
+7:MA:MAR:MOROCCO:Sud:Oued Ed Dahab
+8:MA:MAR:MOROCCO:Sud:Tan-Tan
+9:MA:MAR:MOROCCO:Sud:Taroudant
+10:MA:MAR:MOROCCO:Sud:Tata
+11:MA:MAR:MOROCCO:Sud:Tiznit
+1:MA:MAR:MOROCCO:Centre Nord:Al Hoceima
+2:MA:MAR:MOROCCO:Centre Nord:Boulmane
+3:MA:MAR:MOROCCO:Centre Nord:Fes
+4:MA:MAR:MOROCCO:Centre Nord:Taounate
+5:MA:MAR:MOROCCO:Centre Nord:Taza
+1:MA:MAR:MOROCCO:Oriental:Figuig
+2:MA:MAR:MOROCCO:Oriental:Nador
+3:MA:MAR:MOROCCO:Oriental:Oujda
+1:MA:MAR:MOROCCO:Nord Ouest:Chefchaouene
+2:MA:MAR:MOROCCO:Nord Ouest:Kenitra
+3:MA:MAR:MOROCCO:Nord Ouest:Khemisset
+4:MA:MAR:MOROCCO:Nord Ouest:Larache
+5:MA:MAR:MOROCCO:Nord Ouest:Rabat
+6:MA:MAR:MOROCCO:Nord Ouest:Sale
+7:MA:MAR:MOROCCO:Nord Ouest:Sidi Kacem
+8:MA:MAR:MOROCCO:Nord Ouest:Skhirate Temara
+9:MA:MAR:MOROCCO:Nord Ouest:Tanger
+10:MA:MAR:MOROCCO:Nord Ouest:Tetouan
diff --git a/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..64fe55e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:MD-BA:MD:BLI
+2:MD-CA:MD:CAHUL
+3:MD-CU:MD:CHIINU
+4:MD-CU:MD:CHIINU
+5:MD-ED:MD:EDINE
+6:MD-GA:MD:GGUZIA, UNITATE TERITORIAL AUTONOM
+7:MD-LA:MD:LPUNA
+8:MD-M:MD:MOLDAVIA
+9:MD-OR:MD:ORHEI
+10:MD-SO:MD:SOROCA
+11:MD-SN:MD:STINGA NISTRULUI, UNITATEA TERITORIAL DIN
+12:MD-TA:MD:TARACLIA
+13:MD-TI:MD:TIGHINA [BENDER]
+14:MD-UN:MD:UNGHENI
diff --git a/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f4199d6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MDA/MDA_ADMIN2_LEX.txt
@@ -0,0 +1 @@
+1:MD:MDA:MOLDOVIA:MOLDAVIA:MOLDAVIA
diff --git a/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f7953a0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN1_LEX.txt
@@ -0,0 +1,6 @@
+1:MG-T:MG:ANTANANARIVO
+2:MG-D:MG:ANTSIRANANA
+3:MG-F:MG:FIANARANTSOA
+4:MG-M:MG:MAHAJANGA
+5:MG-A:MG:TOAMASINA
+6:MG-U:MG:TOLIARY
diff --git a/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..ad31f5a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MDG/MDG_ADMIN2_LEX.txt
@@ -0,0 +1,111 @@
+1:MG:MDG:MADAGASCAR:Toamasina:Ambatondrazaka
+2:MG:MDG:MADAGASCAR:Toamasina:Amparafaravola
+3:MG:MDG:MADAGASCAR:Toamasina:Andilamena
+4:MG:MDG:MADAGASCAR:Toamasina:Anosibe An-Ala
+5:MG:MDG:MADAGASCAR:Toamasina:Antanambao-Manampot
+6:MG:MDG:MADAGASCAR:Toamasina:Fenoarivo-Est
+7:MG:MDG:MADAGASCAR:Toamasina:Mahanoro
+8:MG:MDG:MADAGASCAR:Toamasina:Mananara-Nord
+9:MG:MDG:MADAGASCAR:Toamasina:Maroantsetra
+10:MG:MDG:MADAGASCAR:Toamasina:Marolambo
+11:MG:MDG:MADAGASCAR:Toamasina:Moramanga
+12:MG:MDG:MADAGASCAR:Toamasina:Nosy-Boraha (St. Marie)
+13:MG:MDG:MADAGASCAR:Toamasina:Soanierana-Ivongo
+14:MG:MDG:MADAGASCAR:Toamasina:Toamasina Rural
+15:MG:MDG:MADAGASCAR:Toamasina:Toamasina Urban
+16:MG:MDG:MADAGASCAR:Toamasina:Vatomandry
+17:MG:MDG:MADAGASCAR:Toamasina:Vavatenina
+18:MG:MDG:MADAGASCAR:Toamasina:Vohibinany (Brickaville
+1:MG:MDG:MADAGASCAR:Fianarantsoa:Ambalavao
+2:MG:MDG:MADAGASCAR:Fianarantsoa:Ambatofinandrahana
+3:MG:MDG:MADAGASCAR:Fianarantsoa:Ambohimahasoa
+4:MG:MDG:MADAGASCAR:Fianarantsoa:Ambositra
+5:MG:MDG:MADAGASCAR:Fianarantsoa:Befotaka
+6:MG:MDG:MADAGASCAR:Fianarantsoa:Fandriana
+7:MG:MDG:MADAGASCAR:Fianarantsoa:Farafangana
+8:MG:MDG:MADAGASCAR:Fianarantsoa:Fianarantsoa Rural
+9:MG:MDG:MADAGASCAR:Fianarantsoa:Fianarantsoa Urban
+10:MG:MDG:MADAGASCAR:Fianarantsoa:Iakora
+11:MG:MDG:MADAGASCAR:Fianarantsoa:Ifanadiana
+12:MG:MDG:MADAGASCAR:Fianarantsoa:Ihosy
+13:MG:MDG:MADAGASCAR:Fianarantsoa:Ikalamavony
+14:MG:MDG:MADAGASCAR:Fianarantsoa:Ikongo (Fort Carnot)
+15:MG:MDG:MADAGASCAR:Fianarantsoa:Ivohibe
+16:MG:MDG:MADAGASCAR:Fianarantsoa:Manakara Sud
+17:MG:MDG:MADAGASCAR:Fianarantsoa:Manandriana
+18:MG:MDG:MADAGASCAR:Fianarantsoa:Mananjary
+19:MG:MDG:MADAGASCAR:Fianarantsoa:Midongy-Sud
+20:MG:MDG:MADAGASCAR:Fianarantsoa:Nosy-Varika
+21:MG:MDG:MADAGASCAR:Fianarantsoa:Vangaindrano
+22:MG:MDG:MADAGASCAR:Fianarantsoa:Vohipeno
+23:MG:MDG:MADAGASCAR:Fianarantsoa:Vondrozo
+1:MG:MDG:MADAGASCAR:Antananarivo:Ambatolampy
+2:MG:MDG:MADAGASCAR:Antananarivo:Ambohidratrimo
+3:MG:MDG:MADAGASCAR:Antananarivo:Andramasina
+4:MG:MDG:MADAGASCAR:Antananarivo:Anjozorobe
+5:MG:MDG:MADAGASCAR:Antananarivo:Ankazobe
+6:MG:MDG:MADAGASCAR:Antananarivo:Antananarivo-Nord
+7:MG:MDG:MADAGASCAR:Antananarivo:Antananarivo-Sud
+8:MG:MDG:MADAGASCAR:Antananarivo:Antananarivo-ville
+9:MG:MDG:MADAGASCAR:Antananarivo:Antanifotsy
+10:MG:MDG:MADAGASCAR:Antananarivo:Antsirabe Rural
+11:MG:MDG:MADAGASCAR:Antananarivo:Antsirabe Urban
+12:MG:MDG:MADAGASCAR:Antananarivo:Arivonimamo
+13:MG:MDG:MADAGASCAR:Antananarivo:Betafo
+14:MG:MDG:MADAGASCAR:Antananarivo:Faratsiho
+15:MG:MDG:MADAGASCAR:Antananarivo:Fenoarivo-Centre
+16:MG:MDG:MADAGASCAR:Antananarivo:Manjakandriana
+17:MG:MDG:MADAGASCAR:Antananarivo:Miarinarivo
+18:MG:MDG:MADAGASCAR:Antananarivo:Soavinandriana
+19:MG:MDG:MADAGASCAR:Antananarivo:Tsiroanomandidy
+1:MG:MDG:MADAGASCAR:Mahajanga:Ambato-Boina
+2:MG:MDG:MADAGASCAR:Mahajanga:Ambatomainty
+3:MG:MDG:MADAGASCAR:Mahajanga:Analalava
+4:MG:MDG:MADAGASCAR:Mahajanga:Antsalova
+5:MG:MDG:MADAGASCAR:Mahajanga:Antsohihy
+6:MG:MDG:MADAGASCAR:Mahajanga:Bealanana
+7:MG:MDG:MADAGASCAR:Mahajanga:Befandriana-Nord
+8:MG:MDG:MADAGASCAR:Mahajanga:Besalampy
+9:MG:MDG:MADAGASCAR:Mahajanga:Boriziny (Port-Berg.)
+10:MG:MDG:MADAGASCAR:Mahajanga:Kandreho
+11:MG:MDG:MADAGASCAR:Mahajanga:Maevatanana
+12:MG:MDG:MADAGASCAR:Mahajanga:Mahajanga Rural
+13:MG:MDG:MADAGASCAR:Mahajanga:Mahajanga Urban
+14:MG:MDG:MADAGASCAR:Mahajanga:Maintirano
+15:MG:MDG:MADAGASCAR:Mahajanga:Mampikony
+16:MG:MDG:MADAGASCAR:Mahajanga:Mandritsara
+17:MG:MDG:MADAGASCAR:Mahajanga:Marovoay
+18:MG:MDG:MADAGASCAR:Mahajanga:Mitsinjo
+19:MG:MDG:MADAGASCAR:Mahajanga:Morafenobe
+20:MG:MDG:MADAGASCAR:Mahajanga:Soalala
+21:MG:MDG:MADAGASCAR:Mahajanga:Tsaratanana
+1:MG:MDG:MADAGASCAR:Toliary:Amboasary-Sud
+2:MG:MDG:MADAGASCAR:Toliary:Ambovombe-Androy
+3:MG:MDG:MADAGASCAR:Toliary:Ampanihy
+4:MG:MDG:MADAGASCAR:Toliary:Ankazoabo-Sud
+5:MG:MDG:MADAGASCAR:Toliary:Bekily
+6:MG:MDG:MADAGASCAR:Toliary:Beloha
+7:MG:MDG:MADAGASCAR:Toliary:Belon-i Tsiribihina
+8:MG:MDG:MADAGASCAR:Toliary:Benenitra
+9:MG:MDG:MADAGASCAR:Toliary:Beroroha
+10:MG:MDG:MADAGASCAR:Toliary:Betioky-Sud
+11:MG:MDG:MADAGASCAR:Toliary:Betroka
+12:MG:MDG:MADAGASCAR:Toliary:Mahabo
+13:MG:MDG:MADAGASCAR:Toliary:Manja
+14:MG:MDG:MADAGASCAR:Toliary:Miandrivazo
+15:MG:MDG:MADAGASCAR:Toliary:Morombe
+16:MG:MDG:MADAGASCAR:Toliary:Morondava
+17:MG:MDG:MADAGASCAR:Toliary:Sakaraha
+18:MG:MDG:MADAGASCAR:Toliary:Taolagnaro (F-Dauphin)
+19:MG:MDG:MADAGASCAR:Toliary:Toliary Rural
+20:MG:MDG:MADAGASCAR:Toliary:Toliary Urban
+21:MG:MDG:MADAGASCAR:Toliary:Tsihombe
+1:MG:MDG:MADAGASCAR:Antsiranana:Ambanja
+2:MG:MDG:MADAGASCAR:Antsiranana:Ambilobe
+3:MG:MDG:MADAGASCAR:Antsiranana:Andapa
+4:MG:MDG:MADAGASCAR:Antsiranana:Antalaha
+5:MG:MDG:MADAGASCAR:Antsiranana:Antsiranana Rural
+6:MG:MDG:MADAGASCAR:Antsiranana:Antsiranana Urban
+7:MG:MDG:MADAGASCAR:Antsiranana:Nosy-Be
+8:MG:MDG:MADAGASCAR:Antsiranana:Sambava
+9:MG:MDG:MADAGASCAR:Antsiranana:Vohimarina (Iharana)
diff --git a/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN1_LEX.txt
new file mode 100644
index 0000000..17536bd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN1_LEX.txt
@@ -0,0 +1,32 @@
+1:MX-AGU:MX:AGUASCALIENTES
+2:MX-BCN:MX:BAJA CALIFORNIA NORTE
+3:MX-BCS:MX:BAJA CALIFORNIA SUR
+4:MX-CAM:MX:CAMPECHE
+5:MX-CHP:MX:CHIAPAS
+6:MX-CHH:MX:CHIHUAHUA
+7:MX-COA:MX:COAHUILA DE ZARAGOZA
+8:MX-COL:MX:COLIMA
+9:MX-DIF:MX:DISTRITO FEDERAL
+10:MX-DUR:MX:DURANGO
+11:MX-GUA:MX:GUANAJUATO
+12:MX-GRO:MX:GUERRERO
+13:MX-HID:MX:HIDALGO
+14:MX-JAL:MX:JALISCO
+15:MX-MEX:MX:MEXICO
+16:MX-MIC:MX:MICHOACAN DE OCAMPO
+17:MX-MOR:MX:MORELOS
+18:MX-NAY:MX:NAYARIT
+19:MX-NLE:MX:NUEVO LEON
+20:MX-OAX:MX:OAXACA
+21:MX-PUE:MX:PUEBLA
+22:MX-QUE:MX:QUERETARO DE ARTEAGA
+23:MX-ROO:MX:QUINTANA ROO
+24:MX-SLP:MX:SAN LUIS POTOSI
+25:MX-SIN:MX:SINALOA
+26:MX-SON:MX:SONORA
+27:MX-TAB:MX:TABASCO
+28:MX-TAM:MX:TAMAULIPAS
+29:MX-TLA:MX:TLAXCALA
+30:MX-VER:MX:VERACRUZ LLAVE
+31:MX-YUC:MX:YUCATAN
+32:MX-ZAC:MX:ZACATECAS
diff --git a/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MEX/MEX_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN1_LEX.txt
new file mode 100644
index 0000000..85c1132
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:MK-M:MK:MAKEDONIJA
diff --git a/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e050691
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MKD/MKD_ADMIN2_LEX.txt
@@ -0,0 +1 @@
+1:MK:MKD:MAKEDONIJA:MAKEDONIJA:MAKEDONIJA
diff --git a/org.eclipse.stem.utility/parameters/sort/MMR/MMR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MMR/MMR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..9e47671
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MMR/MMR_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:MM-07:MM:AYEYARWADY
+2:MM-02:MM:BAGO
+3:MM-4:MM:CHIN
+4:MM-08:MM:KACHIN
+5:MM-2:MM:KAYAH
+6:MM-3:MM:KAYIN
+7:MM-03:MM:MAGWAY
+8:MM-04:MM:MANDALAY
+9:MM-5:MM:MON
+10:MM-6:MM:RAKHINE
+11:MM-0:MM:SAGAING
+12:MM-7:MM:SHAN
+13:MM-05:MM:TANINTHARYI
+14:MM-06:MM:YANGON
diff --git a/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..fda0812
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN1_LEX.txt
@@ -0,0 +1,22 @@
+1:MN-073:MN:ARHANGAY
+2:MN-07:MN:BAYAN OLGIY [BAYAN LGIY]
+3:MN-069:MN:BAYANHONGOR
+4:MN-067:MN:BULGAN
+5:MN-037:MN:DARHAN UUL
+6:MN-06:MN:DORNOD
+7:MN-063:MN:DORNOGOVI [DORNOGOV]
+8:MN-059:MN:DUNDGOVI [DUNDGOV]
+9:MN-057:MN:DZAVHAN
+10:MN-064:MN:GOV SÜMBER
+11:MN-065:MN:GOVI ALTAY [GOV ALTAY]
+12:MN-039:MN:HENTIY
+13:MN-043:MN:HOVD
+14:MN-04:MN:HOVSGOL [HVSGL]
+15:MN-053:MN:OMNOGOVI [MNGOV]
+16:MN-035:MN:ORHON
+17:MN-055:MN:OVORHANGAY [VRHANGAY]
+18:MN-049:MN:SELENGE
+19:MN-05:MN:SUHBAATAR [SÜHBAATAR]
+20:MN-047:MN:TOV [TV]
+21:MN-03:MN:ULAANBAATAR
+22:MN-046:MN:UVS
diff --git a/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..4dbfda5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MNG/MNG_ADMIN2_LEX.txt
@@ -0,0 +1,18 @@
+1:MN:MNG:MONGOLIA:Dzavhan:MNG.L2.3
+1:MN:MNG:MONGOLIA:Hentiy:MNG.L2.6
+1:MN:MNG:MONGOLIA:Dundgovi:MNG.L2.8
+1:MN:MNG:MONGOLIA:Tov:MNG.L2.7
+1:MN:MNG:MONGOLIA:Selenge:MNG.L2.5
+1:MN:MNG:MONGOLIA:Arhangay:MNG.L2.1
+1:MN:MNG:MONGOLIA:Hovsgol:MNG.L2.16
+1:MN:MNG:MONGOLIA:Dornogovi:MNG.L2.10
+1:MN:MNG:MONGOLIA:Omnogovi:MNG.L2.12
+1:MN:MNG:MONGOLIA:Bayanhongor:MNG.L2.11
+1:MN:MNG:MONGOLIA:Uvs:MNG.L2.14
+1:MN:MNG:MONGOLIA:Govi-Altay:MNG.L2.15
+1:MN:MNG:MONGOLIA:Hovd:MNG.L2.13
+1:MN:MNG:MONGOLIA:Dornod:MNG.L2.2
+1:MN:MNG:MONGOLIA:Bulgan:MNG.L2.9
+1:MN:MNG:MONGOLIA:Suhbaatar:MNG.L2.18
+1:MN:MNG:MONGOLIA:Ovorhangay:MNG.L2.4
+1:MN:MNG:MONGOLIA:Bayan-Olgiy:MNG.L2.17
diff --git a/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN1_LEX.txt
new file mode 100644
index 0000000..669b641
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN1_LEX.txt
@@ -0,0 +1,11 @@
+1:MZ-P:MZ:CABO DELGADO
+2:MZ-G:MZ:GAZA
+3:MZ-I:MZ:INHAMBANE
+4:MZ-B:MZ:MANICA
+5:MZ-MPM:MZ:MAPUTO
+6:MZ-MPM:MZ:MAPUTO
+7:MZ-N:MZ:NAMPULA
+8:MZ-A:MZ:NASSA
+9:MZ-S:MZ:SOFALA
+10:MZ-T:MZ:TETE
+11:MZ-Q:MZ:ZAMBEZIA
diff --git a/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN2_LEX.txt
new file mode 100644
index 0000000..bee2692
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MOZ/MOZ_ADMIN2_LEX.txt
@@ -0,0 +1,128 @@
+1:MZ:MOZ:MOZAMBIQUE:Nampula:Angoche
+2:MZ:MOZ:MOZAMBIQUE:Nampula:Erati
+3:MZ:MOZ:MOZAMBIQUE:Nampula:Lalaua
+4:MZ:MOZ:MOZAMBIQUE:Nampula:Malema
+5:MZ:MOZ:MOZAMBIQUE:Nampula:Meconta
+6:MZ:MOZ:MOZAMBIQUE:Nampula:Mecuburi
+7:MZ:MOZ:MOZAMBIQUE:Nampula:Memba
+8:MZ:MOZ:MOZAMBIQUE:Nampula:Mogovolas
+9:MZ:MOZ:MOZAMBIQUE:Nampula:Moma
+10:MZ:MOZ:MOZAMBIQUE:Nampula:Monapo
+11:MZ:MOZ:MOZAMBIQUE:Nampula:Mongincual
+12:MZ:MOZ:MOZAMBIQUE:Nampula:Mossuril
+13:MZ:MOZ:MOZAMBIQUE:Nampula:Muecate
+14:MZ:MOZ:MOZAMBIQUE:Nampula:Murrupula
+15:MZ:MOZ:MOZAMBIQUE:Nampula:Nacala Velha
+16:MZ:MOZ:MOZAMBIQUE:Nampula:Namapa
+17:MZ:MOZ:MOZAMBIQUE:Nampula:Nampula
+18:MZ:MOZ:MOZAMBIQUE:Nampula:Ribaue
+1:MZ:MOZ:MOZAMBIQUE:Manica:Barue
+2:MZ:MOZ:MOZAMBIQUE:Manica:Gondola
+3:MZ:MOZ:MOZAMBIQUE:Manica:Guro
+4:MZ:MOZ:MOZAMBIQUE:Manica:Machaze
+5:MZ:MOZ:MOZAMBIQUE:Manica:Macossa
+6:MZ:MOZ:MOZAMBIQUE:Manica:Manica
+7:MZ:MOZ:MOZAMBIQUE:Manica:Mossurize
+8:MZ:MOZ:MOZAMBIQUE:Manica:Sussundenga
+9:MZ:MOZ:MOZAMBIQUE:Manica:Tambara
+1:MZ:MOZ:MOZAMBIQUE:Nassa:Cuamba
+2:MZ:MOZ:MOZAMBIQUE:Nassa:Lago
+3:MZ:MOZ:MOZAMBIQUE:Nassa:Lichinga
+4:MZ:MOZ:MOZAMBIQUE:Nassa:Majune
+5:MZ:MOZ:MOZAMBIQUE:Nassa:Mandimba
+6:MZ:MOZ:MOZAMBIQUE:Nassa:Marrupa
+7:MZ:MOZ:MOZAMBIQUE:Nassa:Maua
+8:MZ:MOZ:MOZAMBIQUE:Nassa:Mavago
+9:MZ:MOZ:MOZAMBIQUE:Nassa:Mecanhelas
+10:MZ:MOZ:MOZAMBIQUE:Nassa:Mecula
+11:MZ:MOZ:MOZAMBIQUE:Nassa:Metarica
+12:MZ:MOZ:MOZAMBIQUE:Nassa:Muembe
+13:MZ:MOZ:MOZAMBIQUE:Nassa:N'gauma
+14:MZ:MOZ:MOZAMBIQUE:Nassa:Nipepe
+15:MZ:MOZ:MOZAMBIQUE:Nassa:Sanga
+1:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Ancuabe
+2:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Balama
+3:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Chiure
+4:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Macomia
+5:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Mecufi
+6:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Meluco
+7:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Mocimboa da Praia
+8:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Montepuez
+9:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Mueda
+10:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Muidumbe
+11:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Namuno
+12:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Nangade
+13:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Palma
+14:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Pemba
+15:MZ:MOZ:MOZAMBIQUE:Cabo Delgado:Quissanga
+1:MZ:MOZ:MOZAMBIQUE:Tete:Angonia
+2:MZ:MOZ:MOZAMBIQUE:Tete:Cahora Bassa
+3:MZ:MOZ:MOZAMBIQUE:Tete:Changara
+4:MZ:MOZ:MOZAMBIQUE:Tete:Chifunde
+5:MZ:MOZ:MOZAMBIQUE:Tete:Chiuta
+6:MZ:MOZ:MOZAMBIQUE:Tete:Macanga
+7:MZ:MOZ:MOZAMBIQUE:Tete:Magoe
+8:MZ:MOZ:MOZAMBIQUE:Tete:Maravia
+9:MZ:MOZ:MOZAMBIQUE:Tete:Moatize
+10:MZ:MOZ:MOZAMBIQUE:Tete:Mutarara
+11:MZ:MOZ:MOZAMBIQUE:Tete:Tsangano
+12:MZ:MOZ:MOZAMBIQUE:Tete:Zumbu
+1:MZ:MOZ:MOZAMBIQUE:Gaza:Bilene
+2:MZ:MOZ:MOZAMBIQUE:Gaza:Chibuto
+3:MZ:MOZ:MOZAMBIQUE:Gaza:Chicualacuala
+4:MZ:MOZ:MOZAMBIQUE:Gaza:Chigubo
+5:MZ:MOZ:MOZAMBIQUE:Gaza:Chokwe
+6:MZ:MOZ:MOZAMBIQUE:Gaza:Guija
+7:MZ:MOZ:MOZAMBIQUE:Gaza:Mabalane
+8:MZ:MOZ:MOZAMBIQUE:Gaza:Mandlakazi
+9:MZ:MOZ:MOZAMBIQUE:Gaza:Massangena
+10:MZ:MOZ:MOZAMBIQUE:Gaza:Massingir
+11:MZ:MOZ:MOZAMBIQUE:Gaza:Xai-Xai
+1:MZ:MOZ:MOZAMBIQUE:Zambezia:Alto Molocue
+2:MZ:MOZ:MOZAMBIQUE:Zambezia:Chinde
+3:MZ:MOZ:MOZAMBIQUE:Zambezia:Gile
+4:MZ:MOZ:MOZAMBIQUE:Zambezia:Gurue
+5:MZ:MOZ:MOZAMBIQUE:Zambezia:Ile
+6:MZ:MOZ:MOZAMBIQUE:Zambezia:Inhassunge
+7:MZ:MOZ:MOZAMBIQUE:Zambezia:Lugela
+8:MZ:MOZ:MOZAMBIQUE:Zambezia:Maganja da Costa
+9:MZ:MOZ:MOZAMBIQUE:Zambezia:Milange
+10:MZ:MOZ:MOZAMBIQUE:Zambezia:Mocuba
+11:MZ:MOZ:MOZAMBIQUE:Zambezia:Mopeia
+12:MZ:MOZ:MOZAMBIQUE:Zambezia:Morrumbala
+13:MZ:MOZ:MOZAMBIQUE:Zambezia:Namacurra
+14:MZ:MOZ:MOZAMBIQUE:Zambezia:Namarroi
+15:MZ:MOZ:MOZAMBIQUE:Zambezia:Nicoadala
+16:MZ:MOZ:MOZAMBIQUE:Zambezia:Pebane
+1:MZ:MOZ:MOZAMBIQUE:Inhambane:Funhalouro
+2:MZ:MOZ:MOZAMBIQUE:Inhambane:Govuro
+3:MZ:MOZ:MOZAMBIQUE:Inhambane:Homoine
+4:MZ:MOZ:MOZAMBIQUE:Inhambane:Inharrime
+5:MZ:MOZ:MOZAMBIQUE:Inhambane:Inhassoro
+6:MZ:MOZ:MOZAMBIQUE:Inhambane:Jangamo
+7:MZ:MOZ:MOZAMBIQUE:Inhambane:Mabote
+8:MZ:MOZ:MOZAMBIQUE:Inhambane:Massinga
+9:MZ:MOZ:MOZAMBIQUE:Inhambane:Morrumbene
+10:MZ:MOZ:MOZAMBIQUE:Inhambane:Panda
+11:MZ:MOZ:MOZAMBIQUE:Inhambane:Vilanculos
+12:MZ:MOZ:MOZAMBIQUE:Inhambane:Zavala
+1:MZ:MOZ:MOZAMBIQUE:Sofala:Buzi
+2:MZ:MOZ:MOZAMBIQUE:Sofala:Caia
+3:MZ:MOZ:MOZAMBIQUE:Sofala:Chemba
+4:MZ:MOZ:MOZAMBIQUE:Sofala:Cheringoma
+5:MZ:MOZ:MOZAMBIQUE:Sofala:Chibabava
+6:MZ:MOZ:MOZAMBIQUE:Sofala:Dondo
+7:MZ:MOZ:MOZAMBIQUE:Sofala:Gorongosa
+8:MZ:MOZ:MOZAMBIQUE:Sofala:Machanga
+9:MZ:MOZ:MOZAMBIQUE:Sofala:Maringue
+10:MZ:MOZ:MOZAMBIQUE:Sofala:Marromeu
+11:MZ:MOZ:MOZAMBIQUE:Sofala:Muanza
+12:MZ:MOZ:MOZAMBIQUE:Sofala:Nhamatanda
+1:MZ:MOZ:MOZAMBIQUE:Maputo:Boane
+2:MZ:MOZ:MOZAMBIQUE:Maputo:Magude
+3:MZ:MOZ:MOZAMBIQUE:Maputo:Manhica
+4:MZ:MOZ:MOZAMBIQUE:Maputo:Maputo
+5:MZ:MOZ:MOZAMBIQUE:Maputo:Marracuene
+6:MZ:MOZ:MOZAMBIQUE:Maputo:Matutuine
+7:MZ:MOZ:MOZAMBIQUE:Maputo:Moamba
+8:MZ:MOZ:MOZAMBIQUE:Maputo:Namaacha
diff --git a/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN1_LEX.txt
new file mode 100644
index 0000000..a3936b3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN1_LEX.txt
@@ -0,0 +1,18 @@
+1:MU-AG:MU:AGALEGA ISLANDS
+2:MU-BR:MU:BEAU BASSIN ROSE HILL
+3:MU-BL:MU:BLACK RIVER
+4:MU-CC:MU:CARGADOS CARAJOS SHOALS [SAINT BRANDON ISLANDS]
+5:MU-CU:MU:CUREPIPE
+6:MU-FL:MU:FLACQ
+7:MU-GP:MU:GRAND PORT
+8:MUS-M:MU:MAURITIUS
+9:MU-MO:MU:MOKA
+10:MU-PA:MU:PAMPLEMOUSSES
+11:MU-PW:MU:PLAINES WILHEMS
+12:MU-PU:MU:PORT LOUIS
+13:MU-PU:MU:PORT LOUIS
+14:MU-QB:MU:QUATRE BORNES
+15:MU-RR:MU:RIVIERE DU REMPART
+16:MU-RO:MU:RODRIGUES ISLAND
+17:MU-SA:MU:SAVANNE
+18:MU-VP:MU:VACOAS PHOENIX
diff --git a/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN2_LEX.txt
new file mode 100644
index 0000000..3484fcc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MUS/MUS_ADMIN2_LEX.txt
@@ -0,0 +1 @@
+1:MU:MUS:MAURITIUS:Mauritius:MUS.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN1_LEX.txt
new file mode 100644
index 0000000..4a35431
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN1_LEX.txt
@@ -0,0 +1,30 @@
+1:MW-BA:MW:BALAKA
+2:MW-BL:MW:BLANTYRE
+3:MW-C:MW:CENTRAL [CENTRAL4]
+4:MW-CK:MW:CHIKWAWA
+5:MW-CR:MW:CHIRADZULU
+6:MW-CT:MW:CHITIPA
+7:MW-DE:MW:DEDZA
+8:MW-DO:MW:DOWA
+9:MW-KR:MW:KARONGA
+10:MW-KS:MW:KASUNGU
+11:MW-LK:MW:LIKOMA ISLAND
+12:MW-LI:MW:LILONGWE
+13:MW-MH:MW:MACHINGA
+14:MW-MG:MW:MANGOCHI
+15:MW-MC:MW:MCHINJI
+16:MW-MU:MW:MULANJE
+17:MW-MW:MW:MWANZA
+18:MW-MZ:MW:MZIMBA
+19:MW-NB:MW:NKHATA BAY
+20:MW-NK:MW:NKHOTAKOTA
+21:MW-N:MW:NORTHERN [NORTHERN1]
+22:MW-NS:MW:NSANJE
+23:MW-NU:MW:NTCHEU
+24:MW-NI:MW:NTCHISI
+25:MW-PH:MW:PHALOMBE
+26:MW-RU:MW:RUMPHI
+27:MW-SA:MW:SALIMA
+28:MW-S:MW:SOUTHERN [SOUTHERN2]
+29:MW-TH:MW:THYOLO
+30:MW-ZO:MW:ZOMBA
diff --git a/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN2_LEX.txt
new file mode 100644
index 0000000..966375f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/MWI/MWI_ADMIN2_LEX.txt
@@ -0,0 +1,24 @@
+1:MW:MWI:MALAWI:Southern:Blantyre
+2:MW:MWI:MALAWI:Southern:Chikwawa
+3:MW:MWI:MALAWI:Southern:Chiradzulu
+4:MW:MWI:MALAWI:Southern:Machinga
+5:MW:MWI:MALAWI:Southern:Mangochi
+6:MW:MWI:MALAWI:Southern:Mulanje
+7:MW:MWI:MALAWI:Southern:Mwanza
+8:MW:MWI:MALAWI:Southern:Nsanje
+9:MW:MWI:MALAWI:Southern:Thyolo
+10:MW:MWI:MALAWI:Southern:Zomba
+1:MW:MWI:MALAWI:Central:Dedza
+2:MW:MWI:MALAWI:Central:Dowa
+3:MW:MWI:MALAWI:Central:Kasungu
+4:MW:MWI:MALAWI:Central:Lilongwe
+5:MW:MWI:MALAWI:Central:Mchingi
+6:MW:MWI:MALAWI:Central:Nkhotakota
+7:MW:MWI:MALAWI:Central:Ntcheu
+8:MW:MWI:MALAWI:Central:Ntchisi
+9:MW:MWI:MALAWI:Central:Salima
+1:MW:MWI:MALAWI:Northern:Chitipa
+2:MW:MWI:MALAWI:Northern:Karonga
+3:MW:MWI:MALAWI:Northern:Mzimba
+4:MW:MWI:MALAWI:Northern:Nkata-Bay
+5:MW:MWI:MALAWI:Northern:Rumphi
diff --git a/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ffd823c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN1_LEX.txt
@@ -0,0 +1,38 @@
+1:NA-BET:NA:BETHANIEN
+2:NA-BO:NA:BOESMANLAND
+3:NA-CA:NA:CAPRIVI
+4:NA-DA:NA:DAMARALAND
+5:NA-ER:NA:ERONGO
+6:NA-GO:NA:GOBABIS
+7:NA-GR:NA:GROOTFONTEIN
+8:NA-HA:NA:HARDAP
+9:NA-HEA:NA:HEREROLAND EAST
+10:NA-HEW:NA:HEREROLAND WEST
+11:NA-KAK:NA:KAOKOLAND
+12:NA-KA:NA:KARAS
+13:NA-KAS:NA:KARASBURG
+14:NA-KIB:NA:KARIBIB
+15:NA-KAV:NA:KAVANGO
+16:NA-KE:NA:KEETMANSHOOP
+17:NA-KH:NA:KHOMAS
+18:NA-KU:NA:KUNENE
+19:NA-LU:NA:LUDERITZ
+20:NA-MLT:NA:MALTAHOHE
+21:NA-MRI:NA:MARIENTAL
+22:NA-NAL:NA:NAMALAND
+23:NA-OW:NA:OHANGWENA
+24:NA-OKD:NA:OKAHANDJA
+25:NA-OK:NA:OKAVANGO
+26:NA-OH:NA:OMAHEKE
+27:NA-OMU:NA:OMARURU
+28:NA-OS:NA:OMUSATI
+29:NA-ON:NA:OSHANA
+30:NA-OT:NA:OSHIKOTO
+31:NA-OTI:NA:OTJIWARONGO
+32:NA-OD:NA:OTJOZONDJUPA
+33:NA-OUT:NA:OUTJO
+34:NA-OWA:NA:OWAMBO
+35:NA-RBH:NA:REHOBOTH
+36:NA-SWK:NA:SWAKOPMUND
+37:NA-TSB:NA:TSUMEB
+38:NA-WIH:NA:WINDHOEK
diff --git a/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5c9908b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NAM/NAM_ADMIN2_LEX.txt
@@ -0,0 +1,33 @@
+1:NA:NAM:NAMIBIA:Luderitz:NAM.L2.10
+2:NA:NAM:NAMIBIA:Luderitz:NAM.L2.4
+3:NA:NAM:NAMIBIA:Luderitz:NAM.L2.5
+4:NA:NAM:NAMIBIA:Luderitz:NAM.L2.6
+5:NA:NAM:NAMIBIA:Luderitz:NAM.L2.7
+6:NA:NAM:NAMIBIA:Luderitz:NAM.L2.8
+7:NA:NAM:NAMIBIA:Luderitz:NAM.L2.9
+1:NA:NAM:NAMIBIA:Mariental:NAM.L2.15
+1:NA:NAM:NAMIBIA:Keetmanshoop:NAM.L2.13
+1:NA:NAM:NAMIBIA:Swakopmund:NAM.L2.30
+1:NA:NAM:NAMIBIA:Namaland:NAM.L2.1
+1:NA:NAM:NAMIBIA:Karibib:NAM.L2.29
+1:NA:NAM:NAMIBIA:Hereroland East:NAM.L2.11
+2:NA:NAM:NAMIBIA:Hereroland East:NAM.L2.12
+1:NA:NAM:NAMIBIA:Kaokoland:NAM.L2.28
+1:NA:NAM:NAMIBIA:Grootfontein:NAM.L2.24
+1:NA:NAM:NAMIBIA:Hereroland West:NAM.L2.19
+1:NA:NAM:NAMIBIA:Kavango:NAM.L2.26
+1:NA:NAM:NAMIBIA:Boesmanland:NAM.L2.18
+1:NA:NAM:NAMIBIA:Bethanien:NAM.L2.3
+1:NA:NAM:NAMIBIA:Okahandja:NAM.L2.17
+1:NA:NAM:NAMIBIA:Tsumeb:NAM.L2.32
+1:NA:NAM:NAMIBIA:Outjo:NAM.L2.22
+1:NA:NAM:NAMIBIA:Owambo:NAM.L2.14
+1:NA:NAM:NAMIBIA:Windhoek:NAM.L2.33
+1:NA:NAM:NAMIBIA:Gobabis:NAM.L2.23
+1:NA:NAM:NAMIBIA:Damaraland:NAM.L2.27
+1:NA:NAM:NAMIBIA:Rehoboth:NAM.L2.20
+1:NA:NAM:NAMIBIA:Caprivi:NAM.L2.25
+1:NA:NAM:NAMIBIA:Otjiwarongo:NAM.L2.31
+1:NA:NAM:NAMIBIA:Karasburg:NAM.L2.21
+1:NA:NAM:NAMIBIA:Maltahohe:NAM.L2.2
+1:NA:NAM:NAMIBIA:Omaruru:NAM.L2.16
diff --git a/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN1_LEX.txt
new file mode 100644
index 0000000..a58a0cb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN1_LEX.txt
@@ -0,0 +1,8 @@
+1:NE-9:NE:AGADEZ
+2:NE-2:NE:DIFFA
+3:NE-3:NE:DOSSO
+4:NE-4:NE:MARADI
+5:NE-8:NE:NIAMEY
+6:NE-5:NE:TAHOUA
+7:NE-6:NE:TILLABERY
+8:NE-7:NE:ZINDER
diff --git a/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e5129e3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NER/NER_ADMIN2_LEX.txt
@@ -0,0 +1,35 @@
+1:NE:NER:NIGER:Diffa:Diffa
+2:NE:NER:NIGER:Diffa:Maine-Sorda
+3:NE:NER:NIGER:Diffa:Nguigmi
+1:NE:NER:NIGER:Zinder:Goure
+2:NE:NER:NIGER:Zinder:Magaria
+3:NE:NER:NIGER:Zinder:Matameye
+4:NE:NER:NIGER:Zinder:Mirriah
+5:NE:NER:NIGER:Zinder:Tanout
+1:NE:NER:NIGER:Maradi:Aguie
+2:NE:NER:NIGER:Maradi:Dakoro
+3:NE:NER:NIGER:Maradi:Guidan-Roumji
+4:NE:NER:NIGER:Maradi:Madarounfa
+5:NE:NER:NIGER:Maradi:Mayahi
+6:NE:NER:NIGER:Maradi:Tessaoua
+1:NE:NER:NIGER:Tahoua:Birni Nkonni
+2:NE:NER:NIGER:Tahoua:Bouza
+3:NE:NER:NIGER:Tahoua:Illela
+4:NE:NER:NIGER:Tahoua:Keita
+5:NE:NER:NIGER:Tahoua:Madaoua
+6:NE:NER:NIGER:Tahoua:Tahoua
+7:NE:NER:NIGER:Tahoua:Tchin-Tabaraden
+1:NE:NER:NIGER:Tillabery:Felingue
+2:NE:NER:NIGER:Tillabery:Kollo
+3:NE:NER:NIGER:Tillabery:Ouallam
+4:NE:NER:NIGER:Tillabery:Say
+5:NE:NER:NIGER:Tillabery:Tera
+6:NE:NER:NIGER:Tillabery:Tillaberi
+1:NE:NER:NIGER:Dosso:Boboye
+2:NE:NER:NIGER:Dosso:Dosso Canton
+3:NE:NER:NIGER:Dosso:Doutchi
+4:NE:NER:NIGER:Dosso:Gaya
+5:NE:NER:NIGER:Dosso:Loga
+1:NE:NER:NIGER:Agadez:Arlit
+2:NE:NER:NIGER:Agadez:Bilma
+3:NE:NER:NIGER:Agadez:Tchirozerine
diff --git a/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..733c214
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN1_LEX.txt
@@ -0,0 +1,40 @@
+1:NG-AB:NG:ABIA
+2:NG-FC:NG:ABUJA CAPITAL TERRITORY
+3:NG-AD:NG:ADAMAWA
+4:NG-AWM:NG:ADAMWARA
+5:NG-AK:NG:AKWA IBOM
+6:NG-AKW:NG:AKWALBOM
+7:NG-AN:NG:ANAMBRA
+8:NG-BA:NG:BAUCHI
+9:NG-BY:NG:BAYELSA
+10:NG-BE:NG:BENUE
+11:NG-BO:NG:BORNO
+12:NG-CR:NG:CROSS RIVER
+13:NG-DE:NG:DELTA
+14:NG-EB:NG:EBONYI
+15:NG-ED:NG:EDO
+16:NG-EK:NG:EKITI
+17:NG-EN:NG:ENUGU
+18:NG-FCT:NG:FCT
+19:NG-GO:NG:GOMBE
+20:NG-IM:NG:IMO
+21:NG-JI:NG:JIGAWA
+22:NG-KD:NG:KADUNA
+23:NG-KN:NG:KANO
+24:NG-KT:NG:KATSINA
+25:NG-KE:NG:KEBBI
+26:NG-KO:NG:KOGI
+27:NG-KW:NG:KWARA
+28:NG-LA:NG:LAGOS
+29:NG-NA:NG:NASSARAWA
+30:NG-NI:NG:NIGER
+31:NG-OG:NG:OGUN
+32:NG-ON:NG:ONDO
+33:NG-OS:NG:OSUN
+34:NG-OY:NG:OYO
+35:NG-PL:NG:PLATEAU
+36:NG-RI:NG:RIVERS
+37:NG-SO:NG:SOKOTO
+38:NG-TA:NG:TARABA
+39:NG-YO:NG:YOBE
+40:NG-ZA:NG:ZAMFARA
diff --git a/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..563f3a0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NGA/NGA_ADMIN2_LEX.txt
@@ -0,0 +1,538 @@
+1:NG:NGA:NIGERIA:Jigawa:Babura
+2:NG:NGA:NIGERIA:Jigawa:Biriniwa
+3:NG:NGA:NIGERIA:Jigawa:BirninKu
+4:NG:NGA:NIGERIA:Jigawa:Dutse
+5:NG:NGA:NIGERIA:Jigawa:Garki
+6:NG:NGA:NIGERIA:Jigawa:Gumel
+7:NG:NGA:NIGERIA:Jigawa:Gwaram
+8:NG:NGA:NIGERIA:Jigawa:Hadejia
+9:NG:NGA:NIGERIA:Jigawa:Jahun
+10:NG:NGA:NIGERIA:Jigawa:KafinHau
+11:NG:NGA:NIGERIA:Jigawa:Kazaure
+12:NG:NGA:NIGERIA:Jigawa:KiriKasa
+13:NG:NGA:NIGERIA:Jigawa:Kiyawa
+14:NG:NGA:NIGERIA:Jigawa:MalamMad
+15:NG:NGA:NIGERIA:Jigawa:Ringim
+16:NG:NGA:NIGERIA:Jigawa:Roni
+17:NG:NGA:NIGERIA:Jigawa:Sule-Tan
+1:NG:NGA:NIGERIA:Cross River:Abi
+2:NG:NGA:NIGERIA:Cross River:Akamkpa
+3:NG:NGA:NIGERIA:Cross River:Akpabuyo
+4:NG:NGA:NIGERIA:Cross River:Biase
+5:NG:NGA:NIGERIA:Cross River:Boki
+6:NG:NGA:NIGERIA:Cross River:Calabar
+7:NG:NGA:NIGERIA:Cross River:Ikom
+8:NG:NGA:NIGERIA:Cross River:Obanliku
+9:NG:NGA:NIGERIA:Cross River:Obubra
+10:NG:NGA:NIGERIA:Cross River:Obudu
+11:NG:NGA:NIGERIA:Cross River:Odukpani
+12:NG:NGA:NIGERIA:Cross River:Ogoja
+13:NG:NGA:NIGERIA:Cross River:Yakurr
+14:NG:NGA:NIGERIA:Cross River:Yala Cross
+1:NG:NGA:NIGERIA:Imo:Aboh-Mba
+2:NG:NGA:NIGERIA:Imo:Ahizu-Mb
+3:NG:NGA:NIGERIA:Imo:Ehime-Mb
+4:NG:NGA:NIGERIA:Imo:Ezinihit
+5:NG:NGA:NIGERIA:Imo:Ideato
+6:NG:NGA:NIGERIA:Imo:IdeatoNo
+7:NG:NGA:NIGERIA:Imo:Ihitte/U
+8:NG:NGA:NIGERIA:Imo:Ikeduru
+9:NG:NGA:NIGERIA:Imo:IsialaMb
+10:NG:NGA:NIGERIA:Imo:Isu
+11:NG:NGA:NIGERIA:Imo:Mbaitoli
+12:NG:NGA:NIGERIA:Imo:Ngor-Okp
+13:NG:NGA:NIGERIA:Imo:Nkwerre
+14:NG:NGA:NIGERIA:Imo:Obowo
+15:NG:NGA:NIGERIA:Imo:Oguta
+16:NG:NGA:NIGERIA:Imo:Ohaji/Eg
+17:NG:NGA:NIGERIA:Imo:Okigwe
+18:NG:NGA:NIGERIA:Imo:Orlu
+19:NG:NGA:NIGERIA:Imo:Orsu
+20:NG:NGA:NIGERIA:Imo:Oru
+21:NG:NGA:NIGERIA:Imo:Owerri
+1:NG:NGA:NIGERIA:Edo:Akoko-Ed
+2:NG:NGA:NIGERIA:Edo:EsanCent
+3:NG:NGA:NIGERIA:Edo:EsanNort
+4:NG:NGA:NIGERIA:Edo:EsanSout
+5:NG:NGA:NIGERIA:Edo:EsanWest
+6:NG:NGA:NIGERIA:Edo:EtsakoEa
+7:NG:NGA:NIGERIA:Edo:EtsakoWe
+8:NG:NGA:NIGERIA:Edo:Oredo Edo
+9:NG:NGA:NIGERIA:Edo:Orhionmw
+10:NG:NGA:NIGERIA:Edo:OviaNort
+11:NG:NGA:NIGERIA:Edo:OviaSouth-West
+12:NG:NGA:NIGERIA:Edo:OwanWest
+1:NG:NGA:NIGERIA:Plateau:Akwanga
+2:NG:NGA:NIGERIA:Plateau:Awe
+3:NG:NGA:NIGERIA:Plateau:BarinkiL
+4:NG:NGA:NIGERIA:Plateau:Bassa
+5:NG:NGA:NIGERIA:Plateau:Doma
+6:NG:NGA:NIGERIA:Plateau:JosNorth
+7:NG:NGA:NIGERIA:Plateau:Kanam
+8:NG:NGA:NIGERIA:Plateau:Keffi
+9:NG:NGA:NIGERIA:Plateau:Lafia
+10:NG:NGA:NIGERIA:Plateau:Langtang
+11:NG:NGA:NIGERIA:Plateau:Langtang (B)
+12:NG:NGA:NIGERIA:Plateau:Mangu
+13:NG:NGA:NIGERIA:Plateau:Nasarawa
+14:NG:NGA:NIGERIA:Plateau:Pankshin
+15:NG:NGA:NIGERIA:Plateau:Qua'anpa
+16:NG:NGA:NIGERIA:Plateau:Shendam
+17:NG:NGA:NIGERIA:Plateau:Wase
+1:NG:NGA:NIGERIA:Oyo:Afijio
+2:NG:NGA:NIGERIA:Oyo:Akinyele
+3:NG:NGA:NIGERIA:Oyo:Egbeda
+4:NG:NGA:NIGERIA:Oyo:IbadanNorth
+5:NG:NGA:NIGERIA:Oyo:IbadanNorth-East
+6:NG:NGA:NIGERIA:Oyo:IbadanNorth-West
+7:NG:NGA:NIGERIA:Oyo:IbadanSouth-East
+8:NG:NGA:NIGERIA:Oyo:IbadanSouth-West
+9:NG:NGA:NIGERIA:Oyo:Ibarapa
+10:NG:NGA:NIGERIA:Oyo:Ido
+11:NG:NGA:NIGERIA:Oyo:Ifedapo
+12:NG:NGA:NIGERIA:Oyo:Ifeloju
+13:NG:NGA:NIGERIA:Oyo:Irepo
+14:NG:NGA:NIGERIA:Oyo:Iseyin
+15:NG:NGA:NIGERIA:Oyo:Kajola
+16:NG:NGA:NIGERIA:Oyo:Lagelu
+17:NG:NGA:NIGERIA:Oyo:Ogbomoso
+18:NG:NGA:NIGERIA:Oyo:Ogo-Oluw
+19:NG:NGA:NIGERIA:Oyo:Oluyole
+20:NG:NGA:NIGERIA:Oyo:Ona-Ara
+21:NG:NGA:NIGERIA:Oyo:Orelope
+22:NG:NGA:NIGERIA:Oyo:Orire
+23:NG:NGA:NIGERIA:Oyo:Oyo
+24:NG:NGA:NIGERIA:Oyo:Surulere
+1:NG:NGA:NIGERIA:Delta:AniochaN
+2:NG:NGA:NIGERIA:Delta:AniochaS
+3:NG:NGA:NIGERIA:Delta:Bomadi
+4:NG:NGA:NIGERIA:Delta:Burutu
+5:NG:NGA:NIGERIA:Delta:EthiopeE
+6:NG:NGA:NIGERIA:Delta:EthiopeW
+7:NG:NGA:NIGERIA:Delta:IkaNorth
+8:NG:NGA:NIGERIA:Delta:IkaSouth
+9:NG:NGA:NIGERIA:Delta:IsokoNor
+10:NG:NGA:NIGERIA:Delta:IsokoSou
+11:NG:NGA:NIGERIA:Delta:NdokwaEa
+12:NG:NGA:NIGERIA:Delta:NdokwaWe
+13:NG:NGA:NIGERIA:Delta:Okpe
+14:NG:NGA:NIGERIA:Delta:Oshimill
+15:NG:NGA:NIGERIA:Delta:Sapele
+16:NG:NGA:NIGERIA:Delta:UgheliNo
+17:NG:NGA:NIGERIA:Delta:UgheliSo
+18:NG:NGA:NIGERIA:Delta:WarriNorth
+19:NG:NGA:NIGERIA:Delta:WarriSouth
+1:NG:NGA:NIGERIA:Taraba:Bali
+2:NG:NGA:NIGERIA:Taraba:Donga
+3:NG:NGA:NIGERIA:Taraba:Gashaka
+4:NG:NGA:NIGERIA:Taraba:Ibi
+5:NG:NGA:NIGERIA:Taraba:Jalingo
+6:NG:NGA:NIGERIA:Taraba:Karim-La
+7:NG:NGA:NIGERIA:Taraba:Lau
+8:NG:NGA:NIGERIA:Taraba:Sardauna
+9:NG:NGA:NIGERIA:Taraba:Takum
+10:NG:NGA:NIGERIA:Taraba:Wukari
+11:NG:NGA:NIGERIA:Taraba:Yorro
+12:NG:NGA:NIGERIA:Taraba:Zing
+1:NG:NGA:NIGERIA:Adamwara:Fufore
+2:NG:NGA:NIGERIA:Adamwara:Ganye
+3:NG:NGA:NIGERIA:Adamwara:Gombi
+4:NG:NGA:NIGERIA:Adamwara:Guyuk
+5:NG:NGA:NIGERIA:Adamwara:Hong
+6:NG:NGA:NIGERIA:Adamwara:Jada
+7:NG:NGA:NIGERIA:Adamwara:Madagali
+8:NG:NGA:NIGERIA:Adamwara:Maiha
+9:NG:NGA:NIGERIA:Adamwara:Mayo-Bel
+10:NG:NGA:NIGERIA:Adamwara:Michika
+11:NG:NGA:NIGERIA:Adamwara:Mubi
+12:NG:NGA:NIGERIA:Adamwara:Numan
+13:NG:NGA:NIGERIA:Adamwara:Shelleng
+14:NG:NGA:NIGERIA:Adamwara:Song
+15:NG:NGA:NIGERIA:Adamwara:Yola
+1:NG:NGA:NIGERIA:Katsina:Bakori
+2:NG:NGA:NIGERIA:Katsina:Batsari
+3:NG:NGA:NIGERIA:Katsina:Bindawa
+4:NG:NGA:NIGERIA:Katsina:Daura
+5:NG:NGA:NIGERIA:Katsina:Dutsin-M
+6:NG:NGA:NIGERIA:Katsina:Faskari
+7:NG:NGA:NIGERIA:Katsina:Funtua
+8:NG:NGA:NIGERIA:Katsina:Ingawa
+9:NG:NGA:NIGERIA:Katsina:Jibia
+10:NG:NGA:NIGERIA:Katsina:Kaita
+11:NG:NGA:NIGERIA:Katsina:Kankara
+12:NG:NGA:NIGERIA:Katsina:Kankiya
+13:NG:NGA:NIGERIA:Katsina:Katsina (K)
+14:NG:NGA:NIGERIA:Katsina:Malumfas
+15:NG:NGA:NIGERIA:Katsina:Mani
+16:NG:NGA:NIGERIA:Katsina:Mashi
+17:NG:NGA:NIGERIA:Katsina:Musawa
+18:NG:NGA:NIGERIA:Katsina:Rimi
+19:NG:NGA:NIGERIA:Katsina:Safana
+20:NG:NGA:NIGERIA:Katsina:Zango
+1:NG:NGA:NIGERIA:FCT:Abaji
+2:NG:NGA:NIGERIA:FCT:AbujaMun
+3:NG:NGA:NIGERIA:FCT:Gwagwala
+4:NG:NGA:NIGERIA:FCT:Kuje
+1:NG:NGA:NIGERIA:Rivers:Abua/Odu
+2:NG:NGA:NIGERIA:Rivers:Ahoada
+3:NG:NGA:NIGERIA:Rivers:Akukutor
+4:NG:NGA:NIGERIA:Rivers:Andoni/O
+5:NG:NGA:NIGERIA:Rivers:Asari-To
+6:NG:NGA:NIGERIA:Rivers:Bonny
+7:NG:NGA:NIGERIA:Rivers:Brass
+8:NG:NGA:NIGERIA:Rivers:Degema
+9:NG:NGA:NIGERIA:Rivers:Ekeremor
+10:NG:NGA:NIGERIA:Rivers:Emuoha
+11:NG:NGA:NIGERIA:Rivers:Etche
+12:NG:NGA:NIGERIA:Rivers:Gokana
+13:NG:NGA:NIGERIA:Rivers:Ikwerre
+14:NG:NGA:NIGERIA:Rivers:Khana
+15:NG:NGA:NIGERIA:Rivers:Northern
+16:NG:NGA:NIGERIA:Rivers:Obio/Akp
+17:NG:NGA:NIGERIA:Rivers:Ogba/Egbe
+18:NG:NGA:NIGERIA:Rivers:Okrika
+19:NG:NGA:NIGERIA:Rivers:PortHarcourt
+20:NG:NGA:NIGERIA:Rivers:Sagbama
+21:NG:NGA:NIGERIA:Rivers:SouthernIjaw
+22:NG:NGA:NIGERIA:Rivers:Tai/Ekem
+1:NG:NGA:NIGERIA:Kano:Albasu
+2:NG:NGA:NIGERIA:Kano:Bagwai
+3:NG:NGA:NIGERIA:Kano:Bebeji
+4:NG:NGA:NIGERIA:Kano:Bichi
+5:NG:NGA:NIGERIA:Kano:Bunkure
+6:NG:NGA:NIGERIA:Kano:Dala
+7:NG:NGA:NIGERIA:Kano:Dambatta
+8:NG:NGA:NIGERIA:Kano:DawakinK
+9:NG:NGA:NIGERIA:Kano:DawakinT
+10:NG:NGA:NIGERIA:Kano:Gabasawa
+11:NG:NGA:NIGERIA:Kano:Gaya
+12:NG:NGA:NIGERIA:Kano:Gezawa
+13:NG:NGA:NIGERIA:Kano:Gwarzo
+14:NG:NGA:NIGERIA:Kano:Kabo
+15:NG:NGA:NIGERIA:Kano:Kano
+16:NG:NGA:NIGERIA:Kano:Karaye
+17:NG:NGA:NIGERIA:Kano:Kumbotso
+18:NG:NGA:NIGERIA:Kano:Kura
+19:NG:NGA:NIGERIA:Kano:Minjibir
+20:NG:NGA:NIGERIA:Kano:Nassaraw
+21:NG:NGA:NIGERIA:Kano:Rano
+22:NG:NGA:NIGERIA:Kano:RiminGad
+23:NG:NGA:NIGERIA:Kano:Shanono
+24:NG:NGA:NIGERIA:Kano:Sumaila
+25:NG:NGA:NIGERIA:Kano:Takai
+26:NG:NGA:NIGERIA:Kano:Tsanyawa
+27:NG:NGA:NIGERIA:Kano:TudunWad
+28:NG:NGA:NIGERIA:Kano:Ungogo
+29:NG:NGA:NIGERIA:Kano:Wudil
+1:NG:NGA:NIGERIA:Yobe:Bade
+2:NG:NGA:NIGERIA:Yobe:Damaturu
+3:NG:NGA:NIGERIA:Yobe:Fika
+4:NG:NGA:NIGERIA:Yobe:Fune
+5:NG:NGA:NIGERIA:Yobe:Geidam
+6:NG:NGA:NIGERIA:Yobe:Gujba
+7:NG:NGA:NIGERIA:Yobe:Nangere
+8:NG:NGA:NIGERIA:Yobe:Nguru
+9:NG:NGA:NIGERIA:Yobe:Yunusari
+10:NG:NGA:NIGERIA:Yobe:Yusufari
+1:NG:NGA:NIGERIA:Osun:Atakumosa
+2:NG:NGA:NIGERIA:Osun:Ayedaade
+3:NG:NGA:NIGERIA:Osun:Ayedire
+4:NG:NGA:NIGERIA:Osun:Boripe
+5:NG:NGA:NIGERIA:Osun:Ede
+6:NG:NGA:NIGERIA:Osun:Egbedore
+7:NG:NGA:NIGERIA:Osun:Ejigbo
+8:NG:NGA:NIGERIA:Osun:IfeCentral
+9:NG:NGA:NIGERIA:Osun:IfeNorth
+10:NG:NGA:NIGERIA:Osun:IfeSouth
+11:NG:NGA:NIGERIA:Osun:Ifelodun
+12:NG:NGA:NIGERIA:Osun:Ila
+13:NG:NGA:NIGERIA:Osun:Ilesa
+14:NG:NGA:NIGERIA:Osun:Irewole
+15:NG:NGA:NIGERIA:Osun:Iwo
+16:NG:NGA:NIGERIA:Osun:Obokun
+17:NG:NGA:NIGERIA:Osun:Odo0tin
+18:NG:NGA:NIGERIA:Osun:Ola-Oluwa
+19:NG:NGA:NIGERIA:Osun:Olorunda
+20:NG:NGA:NIGERIA:Osun:Oriade
+21:NG:NGA:NIGERIA:Osun:Osogbo
+1:NG:NGA:NIGERIA:Ogun:AbeokutaNorth
+2:NG:NGA:NIGERIA:Ogun:AdoOdo/Ota
+3:NG:NGA:NIGERIA:Ogun:EgbadoNorth
+4:NG:NGA:NIGERIA:Ogun:EgbadoSouth
+5:NG:NGA:NIGERIA:Ogun:Ifo
+6:NG:NGA:NIGERIA:Ogun:IjebuEast
+7:NG:NGA:NIGERIA:Ogun:IjebuNorth
+8:NG:NGA:NIGERIA:Ogun:IjebuOde
+9:NG:NGA:NIGERIA:Ogun:Obafemi-Owode
+10:NG:NGA:NIGERIA:Ogun:Odeda
+11:NG:NGA:NIGERIA:Ogun:OgunWaterside
+12:NG:NGA:NIGERIA:Ogun:Shagamu
+1:NG:NGA:NIGERIA:Abia:Aba
+2:NG:NGA:NIGERIA:Abia:Afikpo
+3:NG:NGA:NIGERIA:Abia:AfikpoSo
+4:NG:NGA:NIGERIA:Abia:Arochukw
+5:NG:NGA:NIGERIA:Abia:Bende
+6:NG:NGA:NIGERIA:Abia:Ikwuano
+7:NG:NGA:NIGERIA:Abia:Isiala-N
+8:NG:NGA:NIGERIA:Abia:Isuikwua
+9:NG:NGA:NIGERIA:Abia:Obioma-N
+10:NG:NGA:NIGERIA:Abia:Ohafia Abia
+11:NG:NGA:NIGERIA:Abia:Ohaozara
+12:NG:NGA:NIGERIA:Abia:Onicha
+13:NG:NGA:NIGERIA:Abia:Ukwa
+14:NG:NGA:NIGERIA:Abia:UkwaEast
+15:NG:NGA:NIGERIA:Abia:Umuahia
+1:NG:NGA:NIGERIA:Benue:Ado
+2:NG:NGA:NIGERIA:Benue:Apa
+3:NG:NGA:NIGERIA:Benue:Buruku
+4:NG:NGA:NIGERIA:Benue:Gboko
+5:NG:NGA:NIGERIA:Benue:Guma
+6:NG:NGA:NIGERIA:Benue:Gwer
+7:NG:NGA:NIGERIA:Benue:GwerWest
+8:NG:NGA:NIGERIA:Benue:Katsina (Benue)
+9:NG:NGA:NIGERIA:Benue:Konshish
+10:NG:NGA:NIGERIA:Benue:Kwande
+11:NG:NGA:NIGERIA:Benue:Makurdi
+12:NG:NGA:NIGERIA:Benue:Ogbadibo
+13:NG:NGA:NIGERIA:Benue:Oju
+14:NG:NGA:NIGERIA:Benue:Okpokwu
+15:NG:NGA:NIGERIA:Benue:Oturkpo
+16:NG:NGA:NIGERIA:Benue:Ukum
+17:NG:NGA:NIGERIA:Benue:Ushongo
+18:NG:NGA:NIGERIA:Benue:Vandeiky
+1:NG:NGA:NIGERIA:Akwalbom:Abak
+2:NG:NGA:NIGERIA:Akwalbom:Eket
+3:NG:NGA:NIGERIA:Akwalbom:Ekpe-Ata
+4:NG:NGA:NIGERIA:Akwalbom:Essien-U
+5:NG:NGA:NIGERIA:Akwalbom:EtimEkpo
+6:NG:NGA:NIGERIA:Akwalbom:Etinan
+7:NG:NGA:NIGERIA:Akwalbom:Ikono
+8:NG:NGA:NIGERIA:Akwalbom:Ikot-Aba
+9:NG:NGA:NIGERIA:Akwalbom:Ikot-Ekp
+10:NG:NGA:NIGERIA:Akwalbom:Ini
+11:NG:NGA:NIGERIA:Akwalbom:Itu
+12:NG:NGA:NIGERIA:Akwalbom:Mbo
+13:NG:NGA:NIGERIA:Akwalbom:Mkpat-En
+14:NG:NGA:NIGERIA:Akwalbom:Nsit-Ibo
+15:NG:NGA:NIGERIA:Akwalbom:Nsit-Ubi
+16:NG:NGA:NIGERIA:Akwalbom:Okobo
+17:NG:NGA:NIGERIA:Akwalbom:Onna
+18:NG:NGA:NIGERIA:Akwalbom:Oron
+19:NG:NGA:NIGERIA:Akwalbom:Oruk-Ana
+20:NG:NGA:NIGERIA:Akwalbom:Ukanafun
+21:NG:NGA:NIGERIA:Akwalbom:UquoIben
+22:NG:NGA:NIGERIA:Akwalbom:Uruan
+23:NG:NGA:NIGERIA:Akwalbom:UrueOffo
+24:NG:NGA:NIGERIA:Akwalbom:Uyo
+1:NG:NGA:NIGERIA:Kwara:Asa
+2:NG:NGA:NIGERIA:Kwara:Baruten
+3:NG:NGA:NIGERIA:Kwara:Edu
+4:NG:NGA:NIGERIA:Kwara:Ifelodun
+5:NG:NGA:NIGERIA:Kwara:IlorinWe
+6:NG:NGA:NIGERIA:Kwara:Irepodun
+7:NG:NGA:NIGERIA:Kwara:Irepodun (B)
+8:NG:NGA:NIGERIA:Kwara:Kaiama
+9:NG:NGA:NIGERIA:Kwara:Moro
+10:NG:NGA:NIGERIA:Kwara:Offa
+11:NG:NGA:NIGERIA:Kwara:Oyun
+1:NG:NGA:NIGERIA:Bauchi:Akko
+2:NG:NGA:NIGERIA:Bauchi:Alkaleri
+3:NG:NGA:NIGERIA:Bauchi:Balanga
+4:NG:NGA:NIGERIA:Bauchi:Bauchi
+5:NG:NGA:NIGERIA:Bauchi:Billiri
+6:NG:NGA:NIGERIA:Bauchi:Darazo
+7:NG:NGA:NIGERIA:Bauchi:Dass
+8:NG:NGA:NIGERIA:Bauchi:Dukku
+9:NG:NGA:NIGERIA:Bauchi:Gamawa
+10:NG:NGA:NIGERIA:Bauchi:Gamjuwa
+11:NG:NGA:NIGERIA:Bauchi:Gombe
+12:NG:NGA:NIGERIA:Bauchi:Itas/Gad
+13:NG:NGA:NIGERIA:Bauchi:Jama'are
+14:NG:NGA:NIGERIA:Bauchi:Kaltungo
+15:NG:NGA:NIGERIA:Bauchi:Katagum
+16:NG:NGA:NIGERIA:Bauchi:Misau
+17:NG:NGA:NIGERIA:Bauchi:Nafada/B
+18:NG:NGA:NIGERIA:Bauchi:Ningi
+19:NG:NGA:NIGERIA:Bauchi:Shira
+20:NG:NGA:NIGERIA:Bauchi:Tafawa-B
+21:NG:NGA:NIGERIA:Bauchi:Toro
+22:NG:NGA:NIGERIA:Bauchi:Yamaltu/
+23:NG:NGA:NIGERIA:Bauchi:Zaki
+1:NG:NGA:NIGERIA:Ondo:Ado-Ekiti
+2:NG:NGA:NIGERIA:Ondo:AkokoNorth
+3:NG:NGA:NIGERIA:Ondo:AkokoNorthWest
+4:NG:NGA:NIGERIA:Ondo:AkokoSou
+5:NG:NGA:NIGERIA:Ondo:Akure
+6:NG:NGA:NIGERIA:Ondo:EkitiEas
+7:NG:NGA:NIGERIA:Ondo:EkitiSouth-West
+8:NG:NGA:NIGERIA:Ondo:EkitiWest
+9:NG:NGA:NIGERIA:Ondo:Emure/Ise/Orun
+10:NG:NGA:NIGERIA:Ondo:Idanre
+11:NG:NGA:NIGERIA:Ondo:Ido/Osi
+12:NG:NGA:NIGERIA:Ondo:Ifedore
+13:NG:NGA:NIGERIA:Ondo:Ijero
+14:NG:NGA:NIGERIA:Ondo:Ikale
+15:NG:NGA:NIGERIA:Ondo:Ikere
+16:NG:NGA:NIGERIA:Ondo:Ikole
+17:NG:NGA:NIGERIA:Ondo:IlajeEseodo
+18:NG:NGA:NIGERIA:Ondo:IleOluji/Okeigbo
+19:NG:NGA:NIGERIA:Ondo:Irele
+20:NG:NGA:NIGERIA:Ondo:Moba
+21:NG:NGA:NIGERIA:Ondo:Odigbo
+22:NG:NGA:NIGERIA:Ondo:Ondo
+23:NG:NGA:NIGERIA:Ondo:Ose
+24:NG:NGA:NIGERIA:Ondo:Owo
+25:NG:NGA:NIGERIA:Ondo:Oye
+1:NG:NGA:NIGERIA:Kogi:Adavi
+2:NG:NGA:NIGERIA:Kogi:Ajaokuta
+3:NG:NGA:NIGERIA:Kogi:Ankpa
+4:NG:NGA:NIGERIA:Kogi:Bassa
+5:NG:NGA:NIGERIA:Kogi:Dekina
+6:NG:NGA:NIGERIA:Kogi:Idah
+7:NG:NGA:NIGERIA:Kogi:Ijumu
+8:NG:NGA:NIGERIA:Kogi:Kabba/Bu
+9:NG:NGA:NIGERIA:Kogi:Kogi
+10:NG:NGA:NIGERIA:Kogi:Kotonkar
+11:NG:NGA:NIGERIA:Kogi:Ofu
+12:NG:NGA:NIGERIA:Kogi:Okehi
+13:NG:NGA:NIGERIA:Kogi:Okene
+14:NG:NGA:NIGERIA:Kogi:Olamabor
+15:NG:NGA:NIGERIA:Kogi:YagbaEas
+16:NG:NGA:NIGERIA:Kogi:YagbaWes
+1:NG:NGA:NIGERIA:Enugu:Abakalik
+2:NG:NGA:NIGERIA:Enugu:Awgu
+3:NG:NGA:NIGERIA:Enugu:EnuguSou
+4:NG:NGA:NIGERIA:Enugu:Ezeagu
+5:NG:NGA:NIGERIA:Enugu:Ezza
+6:NG:NGA:NIGERIA:Enugu:Igbo-Eti
+7:NG:NGA:NIGERIA:Enugu:Igbo-Eze
+8:NG:NGA:NIGERIA:Enugu:Ikwo
+9:NG:NGA:NIGERIA:Enugu:Ishielu
+10:NG:NGA:NIGERIA:Enugu:Isi-Uzo
+11:NG:NGA:NIGERIA:Enugu:Izzi
+12:NG:NGA:NIGERIA:Enugu:Nkanu
+13:NG:NGA:NIGERIA:Enugu:Nsukka
+14:NG:NGA:NIGERIA:Enugu:Ohaukwu
+15:NG:NGA:NIGERIA:Enugu:Oji-River
+16:NG:NGA:NIGERIA:Enugu:Udi
+17:NG:NGA:NIGERIA:Enugu:Uzo-Uwani
+1:NG:NGA:NIGERIA:Lagos:Agege
+2:NG:NGA:NIGERIA:Lagos:Badagary
+3:NG:NGA:NIGERIA:Lagos:Epe
+4:NG:NGA:NIGERIA:Lagos:Eti-Osa
+5:NG:NGA:NIGERIA:Lagos:Ibeju/Lekki
+6:NG:NGA:NIGERIA:Lagos:Ikeja
+7:NG:NGA:NIGERIA:Lagos:Ikorodu
+8:NG:NGA:NIGERIA:Lagos:LagosIsland
+9:NG:NGA:NIGERIA:Lagos:Mainland
+10:NG:NGA:NIGERIA:Lagos:Mushin
+11:NG:NGA:NIGERIA:Lagos:Ojo
+12:NG:NGA:NIGERIA:Lagos:Shomolu
+1:NG:NGA:NIGERIA:Kaduna:Birnin-G
+2:NG:NGA:NIGERIA:Kaduna:Chikun
+3:NG:NGA:NIGERIA:Kaduna:Doka/Kaw
+4:NG:NGA:NIGERIA:Kaduna:Giwa
+5:NG:NGA:NIGERIA:Kaduna:Igabi
+6:NG:NGA:NIGERIA:Kaduna:Ikara
+7:NG:NGA:NIGERIA:Kaduna:Jaba
+8:NG:NGA:NIGERIA:Kaduna:Jema'a
+9:NG:NGA:NIGERIA:Kaduna:Kachia
+10:NG:NGA:NIGERIA:Kaduna:Kaura
+11:NG:NGA:NIGERIA:Kaduna:Kauru
+12:NG:NGA:NIGERIA:Kaduna:Lere
+13:NG:NGA:NIGERIA:Kaduna:Makarfi
+14:NG:NGA:NIGERIA:Kaduna:Sabon-Ga
+15:NG:NGA:NIGERIA:Kaduna:Soba
+16:NG:NGA:NIGERIA:Kaduna:Tudun
+17:NG:NGA:NIGERIA:Kaduna:ZangonKa
+18:NG:NGA:NIGERIA:Kaduna:Zaria
+1:NG:NGA:NIGERIA:Borno:Askira/U
+2:NG:NGA:NIGERIA:Borno:Bama
+3:NG:NGA:NIGERIA:Borno:Biu
+4:NG:NGA:NIGERIA:Borno:Damboa
+5:NG:NGA:NIGERIA:Borno:Dikwa
+6:NG:NGA:NIGERIA:Borno:Gwoza
+7:NG:NGA:NIGERIA:Borno:Kaga
+8:NG:NGA:NIGERIA:Borno:Konduga
+9:NG:NGA:NIGERIA:Borno:Kukawa
+10:NG:NGA:NIGERIA:Borno:Maidugur
+11:NG:NGA:NIGERIA:Borno:Mobbar
+12:NG:NGA:NIGERIA:Borno:Monguno
+13:NG:NGA:NIGERIA:Borno:Ngala
+14:NG:NGA:NIGERIA:Borno:Shani
+1:NG:NGA:NIGERIA:Kebbi:Arewa
+2:NG:NGA:NIGERIA:Kebbi:Argungu
+3:NG:NGA:NIGERIA:Kebbi:Bagudo
+4:NG:NGA:NIGERIA:Kebbi:BirninKe
+5:NG:NGA:NIGERIA:Kebbi:Bunza
+6:NG:NGA:NIGERIA:Kebbi:Dandi
+7:NG:NGA:NIGERIA:Kebbi:Gwandu
+8:NG:NGA:NIGERIA:Kebbi:Jega
+9:NG:NGA:NIGERIA:Kebbi:Koko/Bes
+10:NG:NGA:NIGERIA:Kebbi:Maiyama
+11:NG:NGA:NIGERIA:Kebbi:Ngaski
+12:NG:NGA:NIGERIA:Kebbi:Sakaba
+13:NG:NGA:NIGERIA:Kebbi:Suru
+14:NG:NGA:NIGERIA:Kebbi:Yauri
+15:NG:NGA:NIGERIA:Kebbi:Zuru
+1:NG:NGA:NIGERIA:Anambra:Aguata
+2:NG:NGA:NIGERIA:Anambra:Anambra
+3:NG:NGA:NIGERIA:Anambra:Anaocha
+4:NG:NGA:NIGERIA:Anambra:AwkaNort
+5:NG:NGA:NIGERIA:Anambra:AwkaSout
+6:NG:NGA:NIGERIA:Anambra:Idemili
+7:NG:NGA:NIGERIA:Anambra:Ihiala
+8:NG:NGA:NIGERIA:Anambra:Njikoka
+9:NG:NGA:NIGERIA:Anambra:NnewiNort
+10:NG:NGA:NIGERIA:Anambra:NnewiSou
+11:NG:NGA:NIGERIA:Anambra:Ogbaru
+12:NG:NGA:NIGERIA:Anambra:OnitshaN
+13:NG:NGA:NIGERIA:Anambra:OrumbaNo
+14:NG:NGA:NIGERIA:Anambra:OrumbaSo
+15:NG:NGA:NIGERIA:Anambra:Oyi
+1:NG:NGA:NIGERIA:Niger:Agaie
+2:NG:NGA:NIGERIA:Niger:Agwara
+3:NG:NGA:NIGERIA:Niger:Bida
+4:NG:NGA:NIGERIA:Niger:Borgu
+5:NG:NGA:NIGERIA:Niger:Bosso
+6:NG:NGA:NIGERIA:Niger:Gbako
+7:NG:NGA:NIGERIA:Niger:Gurara
+8:NG:NGA:NIGERIA:Niger:Kontogur
+9:NG:NGA:NIGERIA:Niger:Lapai
+10:NG:NGA:NIGERIA:Niger:Lavun
+11:NG:NGA:NIGERIA:Niger:Magama
+12:NG:NGA:NIGERIA:Niger:Mokwa
+13:NG:NGA:NIGERIA:Niger:Paikoro
+14:NG:NGA:NIGERIA:Niger:Rafi
+15:NG:NGA:NIGERIA:Niger:Rijau
+16:NG:NGA:NIGERIA:Niger:Shiroro
+17:NG:NGA:NIGERIA:Niger:Suleja
+18:NG:NGA:NIGERIA:Niger:Wushishi
+1:NG:NGA:NIGERIA:Sokoto:Anka
+2:NG:NGA:NIGERIA:Sokoto:Bakura
+3:NG:NGA:NIGERIA:Sokoto:Binji
+4:NG:NGA:NIGERIA:Sokoto:Bodinga
+5:NG:NGA:NIGERIA:Sokoto:Bungudu
+6:NG:NGA:NIGERIA:Sokoto:Dange-Sh
+7:NG:NGA:NIGERIA:Sokoto:Gada
+8:NG:NGA:NIGERIA:Sokoto:Goronyo
+9:NG:NGA:NIGERIA:Sokoto:Gummi
+10:NG:NGA:NIGERIA:Sokoto:Gusau
+11:NG:NGA:NIGERIA:Sokoto:Gwadabaw
+12:NG:NGA:NIGERIA:Sokoto:Illela
+13:NG:NGA:NIGERIA:Sokoto:Isa
+14:NG:NGA:NIGERIA:Sokoto:Kaura-Na
+15:NG:NGA:NIGERIA:Sokoto:Kware
+16:NG:NGA:NIGERIA:Sokoto:Maradun
+17:NG:NGA:NIGERIA:Sokoto:Rabah
+18:NG:NGA:NIGERIA:Sokoto:SabonBir
+19:NG:NGA:NIGERIA:Sokoto:Silame
+20:NG:NGA:NIGERIA:Sokoto:Sokoto
+21:NG:NGA:NIGERIA:Sokoto:Talatar
+22:NG:NGA:NIGERIA:Sokoto:Tambawal
+23:NG:NGA:NIGERIA:Sokoto:Tangazar
+24:NG:NGA:NIGERIA:Sokoto:Tsafe
+25:NG:NGA:NIGERIA:Sokoto:Wamakko
+26:NG:NGA:NIGERIA:Sokoto:Wurno
+27:NG:NGA:NIGERIA:Sokoto:Yabo
+28:NG:NGA:NIGERIA:Sokoto:Zurmi
diff --git a/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN1_LEX.txt
new file mode 100644
index 0000000..0c45a8d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:NL-DR:NL:DRENTHE
+2:NL-FL:NL:FLEVOLAND
+3:NL-FR:NL:FRIESLAND
+4:NL-GE:NL:GELDERLAND
+5:NL-GR:NL:GRONINGEN
+6:NL-LI:NL:LIMBURG
+7:NL-NB:NL:NOORD BRABANT
+8:NL-NH:NL:NOORD HOLLAND
+9:NL-OV:NL:OVERIJSSEL
+10:NL-UT:NL:UTRECHT
+11:NL-ZE:NL:ZEELAND
+12:NL-ZH:NL:ZUID HOLLAND
diff --git a/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NLD/NLD_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..c93ddfe
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:NO-02:NO:AKERSHUS
+2:NO-09:NO:AUST AGDER
+3:NO-06:NO:BUSKERUD
+4:NO-20:NO:FINNMARK
+5:NO-04:NO:HEDMARK
+6:NO-2:NO:HORDALAND
+7:NO-22:NO:JAN MAYEN (ARCTIC REGION) (SEE ALSO COUNTRY CODE SJ)
+8:NO-5:NO:MOERE OG ROMSDAL
+9:NO-7:NO:NORD TROENDELAG
+10:NO-8:NO:NORDLAND
+11:NO-0:NO:OESTFOLD
+12:NO-05:NO:OPPLAND
+13:NO-03:NO:OSLO OG AKERSHUS
+14:NO-21:NO:ROGALAND
+15:NO-6:NO:SOER TROENDELAG
+16:NO-4:NO:SOGN OG FJORDANE
+17:NO-08:NO:TELEMARK
+18:NO-9:NO:TROMS
+19:NO-07:NO:VESTFOLD
diff --git a/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NOR/NOR_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..200a54e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:NP-BA:NP:BAGMATI
+2:NP-BH:NP:BHERI
+3:NP-C:NP:CENTRAL
+4:NP-DH:NP:DHAWALAGIRI
+5:NP-E:NP:EAST
+6:NP-FAW:NP:FAR WEST
+7:NP-GA:NP:GANDAKI
+8:NP-JA:NP:JANAKPUR
+9:NP-KA:NP:KARNALI
+10:NP-KO:NP:KOSI [KOSHI]
+11:NP-LU:NP:LUMBINI
+12:NP-MA:NP:MAHAKALI
+13:NP-ME:NP:MECHI
+14:NP-MID:NP:MIDWEST
+15:NP-NA:NP:NARAYANI
+16:NP-RA:NP:RAPTI
+17:NP-SA:NP:SAGARMATHA
+18:NP-SE:NP:SETI
+19:NP-W:NP:WEST
diff --git a/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..72f8aa1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/NPL/NPL_ADMIN2_LEX.txt
@@ -0,0 +1,14 @@
+1:NP:NPL:NEPAL:Central:Bagmati
+2:NP:NPL:NEPAL:Central:Janakpur
+3:NP:NPL:NEPAL:Central:Narayani
+1:NP:NPL:NEPAL:Far West:Mahakali
+2:NP:NPL:NEPAL:Far West:Seti
+1:NP:NPL:NEPAL:West:Dhawalagi
+2:NP:NPL:NEPAL:West:Gandaki
+3:NP:NPL:NEPAL:West:Lumbini
+1:NP:NPL:NEPAL:Midwest:Bheri
+2:NP:NPL:NEPAL:Midwest:Karnali
+3:NP:NPL:NEPAL:Midwest:Rapti
+1:NP:NPL:NEPAL:East:Koshi
+2:NP:NPL:NEPAL:East:Mechi
+3:NP:NPL:NEPAL:East:Sagarmath
diff --git a/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..5c5ea29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:OM-DA:OM:A DAKHLIYA
+2:OM-SH:OM:A SHARQIYA
+3:OM-BA:OM:AL BATNAH
+4:OM-DHA:OM:AL DHAHIRA
+5:OM-JA:OM:AL JANBYAH [ZUFR]
+6:OM-WU:OM:AL WUSTA
+7:OM-ZA:OM:AZ ZHIRAH
+8:OH-DHF:OM:DHOFAR
+9:OM-MU:OM:MUSANDAM
+10:OM-MA:OM:MUSCAT
diff --git a/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..4b34f6e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/OMN/OMN_ADMIN2_LEX.txt
@@ -0,0 +1,49 @@
+1:OM:OMN:OMAN:Al Batnah:A Rustaq
+2:OM:OMN:OMAN:Al Batnah:Al Awabi
+3:OM:OMN:OMAN:Al Batnah:Al Khabourah
+4:OM:OMN:OMAN:Al Batnah:Al Masnaah
+5:OM:OMN:OMAN:Al Batnah:As Suwaiq
+6:OM:OMN:OMAN:Al Batnah:Barka
+7:OM:OMN:OMAN:Al Batnah:Liwa
+8:OM:OMN:OMAN:Al Batnah:Nakhal
+9:OM:OMN:OMAN:Al Batnah:Saham
+10:OM:OMN:OMAN:Al Batnah:Shinas
+11:OM:OMN:OMAN:Al Batnah:Sohar
+1:OM:OMN:OMAN:Al Wusta:Al Wusta (1)
+1:OM:OMN:OMAN:Musandam:Al Khasab
+2:OM:OMN:OMAN:Musandam:Bukha
+3:OM:OMN:OMAN:Musandam:Diba
+4:OM:OMN:OMAN:Musandam:Madha
+1:OM:OMN:OMAN:Muscat:A Seeb
+2:OM:OMN:OMAN:Muscat:Bausher
+3:OM:OMN:OMAN:Muscat:Muscat
+4:OM:OMN:OMAN:Muscat:Muttrah
+5:OM:OMN:OMAN:Muscat:Quriyat
+1:OM:OMN:OMAN:Al Dhahira:Al Buraimi
+2:OM:OMN:OMAN:Al Dhahira:Dhank
+3:OM:OMN:OMAN:Al Dhahira:Ibri
+4:OM:OMN:OMAN:Al Dhahira:Mahdha
+5:OM:OMN:OMAN:Al Dhahira:Yanqul
+1:OM:OMN:OMAN:Dhofar:Al Halaniyat Isl.
+2:OM:OMN:OMAN:Dhofar:Marbat
+3:OM:OMN:OMAN:Dhofar:Muqshin
+4:OM:OMN:OMAN:Dhofar:Salalah
+5:OM:OMN:OMAN:Dhofar:Sudh
+6:OM:OMN:OMAN:Dhofar:Taqah
+7:OM:OMN:OMAN:Dhofar:Thumrait
+1:OM:OMN:OMAN:A Dakhliya:Adam
+2:OM:OMN:OMAN:A Dakhliya:Al Hamra
+3:OM:OMN:OMAN:A Dakhliya:Bahla
+4:OM:OMN:OMAN:A Dakhliya:Bid Bid
+5:OM:OMN:OMAN:A Dakhliya:Izki
+6:OM:OMN:OMAN:A Dakhliya:Manah
+7:OM:OMN:OMAN:A Dakhliya:Nizwa (Nazwa)
+8:OM:OMN:OMAN:A Dakhliya:Samail
+1:OM:OMN:OMAN:A Sharqiya:Al Mudhaibi
+2:OM:OMN:OMAN:A Sharqiya:Al Qabil
+3:OM:OMN:OMAN:A Sharqiya:Al Wafi
+4:OM:OMN:OMAN:A Sharqiya:Biddiya
+5:OM:OMN:OMAN:A Sharqiya:Ibra
+6:OM:OMN:OMAN:A Sharqiya:Jalan Bani
+7:OM:OMN:OMAN:A Sharqiya:Masirah
+8:OM:OMN:OMAN:A Sharqiya:Sur
diff --git a/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2afdfc8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN1_LEX.txt
@@ -0,0 +1,9 @@
+1:PK-BA:PK:BALUCHISTAN [BALUCHISTAN (EN)]
+2:PK-TA:PK:F.A.T.A. [FEDERALLY ADMINISTERED TRIBAL AREAS]
+3:PK-FC:PK:F.C.T.
+4:PK-IS:PK:ISLAMABAD
+5:PK-JK:PK:JAMMU AND KASHMIR [AZAD KASHMIR]
+6:PK-NW:PK:N.W.F.P. [NORTH WEST FRONTIER]
+7:PK-NA:PK:NORTHERN AREAS
+8:PK-PB:PK:PUNJAB
+9:PK-SD:PK:SIND [SIND (EN)]
diff --git a/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5098319
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PAK/PAK_ADMIN2_LEX.txt
@@ -0,0 +1,80 @@
+1:PK:PAK:PAKISTAN:F.C.T.:Islamabad
+1:PK:PAK:PAKISTAN:Punjab:Attok
+2:PK:PAK:PAKISTAN:Punjab:Bahawalnagar
+3:PK:PAK:PAKISTAN:Punjab:Bahawalpur
+4:PK:PAK:PAKISTAN:Punjab:Dera Ghazi Khan
+5:PK:PAK:PAKISTAN:Punjab:Faisalabad
+6:PK:PAK:PAKISTAN:Punjab:Gujarat
+7:PK:PAK:PAKISTAN:Punjab:Gujranwala
+8:PK:PAK:PAKISTAN:Punjab:Jhang
+9:PK:PAK:PAKISTAN:Punjab:Jhelum
+10:PK:PAK:PAKISTAN:Punjab:Kasur
+11:PK:PAK:PAKISTAN:Punjab:Lahore
+12:PK:PAK:PAKISTAN:Punjab:Mainwali
+13:PK:PAK:PAKISTAN:Punjab:Multan
+14:PK:PAK:PAKISTAN:Punjab:Muzaffargarh
+15:PK:PAK:PAKISTAN:Punjab:Rahim Yar Khan
+16:PK:PAK:PAKISTAN:Punjab:Rawalpindi
+17:PK:PAK:PAKISTAN:Punjab:Sahiwal
+18:PK:PAK:PAKISTAN:Punjab:Sargodha
+19:PK:PAK:PAKISTAN:Punjab:Sheikhupura
+20:PK:PAK:PAKISTAN:Punjab:Sialkot
+21:PK:PAK:PAKISTAN:Punjab:Vehari
+1:PK:PAK:PAKISTAN:Baluchistan:Chagai
+2:PK:PAK:PAKISTAN:Baluchistan:Gwadar
+3:PK:PAK:PAKISTAN:Baluchistan:Kachhi
+4:PK:PAK:PAKISTAN:Baluchistan:Kalat
+5:PK:PAK:PAKISTAN:Baluchistan:Kharan
+6:PK:PAK:PAKISTAN:Baluchistan:Khuzdar
+7:PK:PAK:PAKISTAN:Baluchistan:Kohlu
+8:PK:PAK:PAKISTAN:Baluchistan:Lasbela
+9:PK:PAK:PAKISTAN:Baluchistan:Loralai
+10:PK:PAK:PAKISTAN:Baluchistan:Nasirabad
+11:PK:PAK:PAKISTAN:Baluchistan:Panjgur
+12:PK:PAK:PAKISTAN:Baluchistan:Pishin
+13:PK:PAK:PAKISTAN:Baluchistan:Quetta
+14:PK:PAK:PAKISTAN:Baluchistan:Sibi
+15:PK:PAK:PAKISTAN:Baluchistan:Turbat
+16:PK:PAK:PAKISTAN:Baluchistan:Zhob
+1:PK:PAK:PAKISTAN:Jammu and Kashmir:Baramula (Kashmir North)
+2:PK:PAK:PAKISTAN:Jammu and Kashmir:Chilas
+3:PK:PAK:PAKISTAN:Jammu and Kashmir:Gilgit
+4:PK:PAK:PAKISTAN:Jammu and Kashmir:Gilgit (Tribal Territory)
+5:PK:PAK:PAKISTAN:Jammu and Kashmir:Kargil
+6:PK:PAK:PAKISTAN:Jammu and Kashmir:Kupwara (Gilgit Wazarat)
+7:PK:PAK:PAKISTAN:Jammu and Kashmir:Kupwara (Muzaffarabad)
+8:PK:PAK:PAKISTAN:Jammu and Kashmir:Ladakh (Leh)
+9:PK:PAK:PAKISTAN:Jammu and Kashmir:Mirpur
+10:PK:PAK:PAKISTAN:Jammu and Kashmir:Punch
+1:PK:PAK:PAKISTAN:N.W.F.P.:Abbottabad
+2:PK:PAK:PAKISTAN:N.W.F.P.:Bannu
+3:PK:PAK:PAKISTAN:N.W.F.P.:Chitral
+4:PK:PAK:PAKISTAN:N.W.F.P.:Dera Ismail Khan
+5:PK:PAK:PAKISTAN:N.W.F.P.:Dir
+6:PK:PAK:PAKISTAN:N.W.F.P.:Kohat
+7:PK:PAK:PAKISTAN:N.W.F.P.:Kohistan
+8:PK:PAK:PAKISTAN:N.W.F.P.:Malakand P.A.
+9:PK:PAK:PAKISTAN:N.W.F.P.:Mansehra
+10:PK:PAK:PAKISTAN:N.W.F.P.:Mardan
+11:PK:PAK:PAKISTAN:N.W.F.P.:Peshawar
+12:PK:PAK:PAKISTAN:N.W.F.P.:Swat
+1:PK:PAK:PAKISTAN:Sind:Badin
+2:PK:PAK:PAKISTAN:Sind:Dadu
+3:PK:PAK:PAKISTAN:Sind:Hyderabad
+4:PK:PAK:PAKISTAN:Sind:Jakobabad
+5:PK:PAK:PAKISTAN:Sind:Karachi
+6:PK:PAK:PAKISTAN:Sind:Khairpur
+7:PK:PAK:PAKISTAN:Sind:Larkana
+8:PK:PAK:PAKISTAN:Sind:Nawab Shah
+9:PK:PAK:PAKISTAN:Sind:Sanghar
+10:PK:PAK:PAKISTAN:Sind:Shikarpur
+11:PK:PAK:PAKISTAN:Sind:Sukkur
+12:PK:PAK:PAKISTAN:Sind:Tharparkar
+13:PK:PAK:PAKISTAN:Sind:Thatta
+1:PK:PAK:PAKISTAN:F.A.T.A.:Bajaur
+2:PK:PAK:PAKISTAN:F.A.T.A.:Khyber
+3:PK:PAK:PAKISTAN:F.A.T.A.:Kurram
+4:PK:PAK:PAKISTAN:F.A.T.A.:Mohmand
+5:PK:PAK:PAKISTAN:F.A.T.A.:N. Waziristan
+6:PK:PAK:PAKISTAN:F.A.T.A.:Orakzai
+7:PK:PAK:PAKISTAN:F.A.T.A.:S. Waziristan
diff --git a/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN1_LEX.txt
new file mode 100644
index 0000000..c5a1f50
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN1_LEX.txt
@@ -0,0 +1,25 @@
+1:PE-AMA:PE:AMAZONAS
+2:PE-ANC:PE:ANCASH
+3:PE-APU:PE:APURIMAC
+4:PE-ARE:PE:AREQUIPA
+5:PE-AYA:PE:AYACUCHO
+6:PE-CAJ:PE:CAJAMARCA
+7:PE-CUS:PE:CUZCO [CUSCO]
+8:PE-CAL:PE:EL CALLAO
+9:PE-HUV:PE:HUANCAVELICA
+10:PE-HUC:PE:HUANUCO
+11:PE-ICA:PE:ICA
+12:PE-JUN:PE:JUNIN
+13:PE-LAL:PE:LA LIBERTAD
+14:PE-LAM:PE:LAMBAYEQUE
+15:PE-LIM:PE:LIMA
+16:PE-LOR:PE:LORETO
+17:PE-MDD:PE:MADRE DE DIOS
+18:PE-MOQ:PE:MOQUEGUA
+19:PE-PAS:PE:PASCO
+20:PE-PIU:PE:PIURA
+21:PE-PUN:PE:PUNO
+22:PE-SAM:PE:SAN MARTIN
+23:PE-TAC:PE:TACNA
+24:PE-TUM:PE:TUMBES
+25:PE-UCA:PE:UCAYALI
diff --git a/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN2_LEX.txt
new file mode 100644
index 0000000..55955ba
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PER/PER_ADMIN2_LEX.txt
@@ -0,0 +1,178 @@
+1:PE:PER:PERU:JUNIN:Chanchamayo
+2:PE:PER:PERU:JUNIN:Concepcion
+3:PE:PER:PERU:JUNIN:Huancayo
+4:PE:PER:PERU:JUNIN:Jauja
+5:PE:PER:PERU:JUNIN:Junin
+6:PE:PER:PERU:JUNIN:Satipo
+7:PE:PER:PERU:JUNIN:Tarma
+8:PE:PER:PERU:JUNIN:Yauli
+1:PE:PER:PERU:AMAZONAS:Bagua
+2:PE:PER:PERU:AMAZONAS:Bagua Grande
+3:PE:PER:PERU:AMAZONAS:Bongara
+4:PE:PER:PERU:AMAZONAS:Chachapoyas
+5:PE:PER:PERU:AMAZONAS:Condorcanqui
+6:PE:PER:PERU:AMAZONAS:Luya
+7:PE:PER:PERU:AMAZONAS:Rodriguez de M.
+1:PE:PER:PERU:CAJAMARCA:Cajabamba
+2:PE:PER:PERU:CAJAMARCA:Cajamarca
+3:PE:PER:PERU:CAJAMARCA:Celendin
+4:PE:PER:PERU:CAJAMARCA:Chota
+5:PE:PER:PERU:CAJAMARCA:Contumaza
+6:PE:PER:PERU:CAJAMARCA:Cutervo
+7:PE:PER:PERU:CAJAMARCA:Hualgayoc
+8:PE:PER:PERU:CAJAMARCA:Jaen
+9:PE:PER:PERU:CAJAMARCA:San Ignacio
+10:PE:PER:PERU:CAJAMARCA:San Marcos
+11:PE:PER:PERU:CAJAMARCA:San Miguel
+12:PE:PER:PERU:CAJAMARCA:San Pablo
+13:PE:PER:PERU:CAJAMARCA:Santa Cruz
+1:PE:PER:PERU:PUNO:Amantani
+2:PE:PER:PERU:PUNO:Azangaro
+3:PE:PER:PERU:PUNO:Carabaya
+4:PE:PER:PERU:PUNO:Chucuito
+5:PE:PER:PERU:PUNO:Huancane
+6:PE:PER:PERU:PUNO:Isla Soto
+7:PE:PER:PERU:PUNO:Isla Taquile
+8:PE:PER:PERU:PUNO:Lago Titicaca
+9:PE:PER:PERU:PUNO:Lampa
+10:PE:PER:PERU:PUNO:Melgar
+11:PE:PER:PERU:PUNO:Puno
+12:PE:PER:PERU:PUNO:Punta Challuta
+13:PE:PER:PERU:PUNO:San Roman
+14:PE:PER:PERU:PUNO:Sandia
+1:PE:PER:PERU:PIURA:Ayabaca
+2:PE:PER:PERU:PIURA:Huancabamba
+3:PE:PER:PERU:PIURA:Isla
+4:PE:PER:PERU:PIURA:Morropon
+5:PE:PER:PERU:PIURA:Paita
+6:PE:PER:PERU:PIURA:Piura
+7:PE:PER:PERU:PIURA:Sullana
+8:PE:PER:PERU:PIURA:Talara
+1:PE:PER:PERU:HUANCAVELICA:Acobamba
+2:PE:PER:PERU:HUANCAVELICA:Angares
+3:PE:PER:PERU:HUANCAVELICA:Castrovirreyna
+4:PE:PER:PERU:HUANCAVELICA:Huancavelica
+5:PE:PER:PERU:HUANCAVELICA:Tayacaja
+1:PE:PER:PERU:AYACUCHO:Cangallo
+2:PE:PER:PERU:AYACUCHO:Huamanga
+3:PE:PER:PERU:AYACUCHO:Huanta
+4:PE:PER:PERU:AYACUCHO:Lamar
+5:PE:PER:PERU:AYACUCHO:Lucanas
+6:PE:PER:PERU:AYACUCHO:Paranicochas
+7:PE:PER:PERU:AYACUCHO:Victor Fajardo
+8:PE:PER:PERU:AYACUCHO:nn
+1:PE:PER:PERU:MOQUEGUA:Gral.Sanchez Cer
+2:PE:PER:PERU:MOQUEGUA:Ilo
+3:PE:PER:PERU:MOQUEGUA:Mariscal Nieto
+1:PE:PER:PERU:LORETO:Alto Amazonas
+2:PE:PER:PERU:LORETO:Loreto
+3:PE:PER:PERU:LORETO:Mar.R.Castilla
+4:PE:PER:PERU:LORETO:Maynas
+5:PE:PER:PERU:LORETO:Requena
+6:PE:PER:PERU:LORETO:Ucayali
+1:PE:PER:PERU:PASCO:Daniel Carrion
+2:PE:PER:PERU:PASCO:Oxapampa
+3:PE:PER:PERU:PASCO:Pasco
+1:PE:PER:PERU:LIMA:Cajatambo
+2:PE:PER:PERU:LIMA:Canete
+3:PE:PER:PERU:LIMA:Canta
+4:PE:PER:PERU:LIMA:Chancay
+5:PE:PER:PERU:LIMA:Huaral
+6:PE:PER:PERU:LIMA:Huarochiri
+7:PE:PER:PERU:LIMA:Isla
+8:PE:PER:PERU:LIMA:Lima
+9:PE:PER:PERU:LIMA:Yauyos
+1:PE:PER:PERU:TACNA:Tacna
+2:PE:PER:PERU:TACNA:Tarata
+1:PE:PER:PERU:SAN MARTIN:Bellavista
+2:PE:PER:PERU:SAN MARTIN:Huallagua
+3:PE:PER:PERU:SAN MARTIN:Lamas
+4:PE:PER:PERU:SAN MARTIN:Mariscal Caceres
+5:PE:PER:PERU:SAN MARTIN:Moyobamba
+6:PE:PER:PERU:SAN MARTIN:Rioja
+7:PE:PER:PERU:SAN MARTIN:San Martin
+8:PE:PER:PERU:SAN MARTIN:nn
+1:PE:PER:PERU:AREQUIPA:Arequipa
+2:PE:PER:PERU:AREQUIPA:Camana
+3:PE:PER:PERU:AREQUIPA:Caraveli
+4:PE:PER:PERU:AREQUIPA:Castilla
+5:PE:PER:PERU:AREQUIPA:Caylloma
+6:PE:PER:PERU:AREQUIPA:Condesuyos
+7:PE:PER:PERU:AREQUIPA:Islay
+8:PE:PER:PERU:AREQUIPA:La Union
+1:PE:PER:PERU:TUMBES:Contralmirante V
+2:PE:PER:PERU:TUMBES:Tumbes
+3:PE:PER:PERU:TUMBES:Zarumilla
+1:PE:PER:PERU:MADRE DE DIOS:Manu
+2:PE:PER:PERU:MADRE DE DIOS:Tahuamanu
+3:PE:PER:PERU:MADRE DE DIOS:Tambopata
+1:PE:PER:PERU:UCAYALI:Atalaya
+2:PE:PER:PERU:UCAYALI:Coronel Portillo
+3:PE:PER:PERU:UCAYALI:Padre Abad
+4:PE:PER:PERU:UCAYALI:Purus
+1:PE:PER:PERU:CUZCO:Acomayo
+2:PE:PER:PERU:CUZCO:Anta
+3:PE:PER:PERU:CUZCO:Calca
+4:PE:PER:PERU:CUZCO:Canas
+5:PE:PER:PERU:CUZCO:Canchis
+6:PE:PER:PERU:CUZCO:Chumbivilcas
+7:PE:PER:PERU:CUZCO:Espinar
+8:PE:PER:PERU:CUZCO:La Convencion
+9:PE:PER:PERU:CUZCO:Paruro
+10:PE:PER:PERU:CUZCO:Paucartambo
+11:PE:PER:PERU:CUZCO:Quispicanchis
+12:PE:PER:PERU:CUZCO:Urubamba
+13:PE:PER:PERU:CUZCO:nn
+1:PE:PER:PERU:HUANUCO:Ambo
+2:PE:PER:PERU:HUANUCO:Dos de Mayo
+3:PE:PER:PERU:HUANUCO:Huamalies
+4:PE:PER:PERU:HUANUCO:Huanuco
+5:PE:PER:PERU:HUANUCO:Leoncio Prado
+6:PE:PER:PERU:HUANUCO:Maranon
+7:PE:PER:PERU:HUANUCO:Pachitea
+8:PE:PER:PERU:HUANUCO:nn
+1:PE:PER:PERU:ICA:Chincha
+2:PE:PER:PERU:ICA:Ica
+3:PE:PER:PERU:ICA:Isla
+4:PE:PER:PERU:ICA:Nazca
+5:PE:PER:PERU:ICA:Palpa
+6:PE:PER:PERU:ICA:Pisco
+1:PE:PER:PERU:LA LIBERTAD:Bolivar
+2:PE:PER:PERU:LA LIBERTAD:Isla
+3:PE:PER:PERU:LA LIBERTAD:Otuzco
+4:PE:PER:PERU:LA LIBERTAD:Pacasmayo
+5:PE:PER:PERU:LA LIBERTAD:Pataz
+6:PE:PER:PERU:LA LIBERTAD:Sanchez Carrion
+7:PE:PER:PERU:LA LIBERTAD:Sant.de Chuco
+8:PE:PER:PERU:LA LIBERTAD:Trujillo
+9:PE:PER:PERU:LA LIBERTAD:nn
+1:PE:PER:PERU:LAMBAYEQUE:Chiclayo
+2:PE:PER:PERU:LAMBAYEQUE:Ferrenate
+3:PE:PER:PERU:LAMBAYEQUE:Isla
+4:PE:PER:PERU:LAMBAYEQUE:Lambayeque
+1:PE:PER:PERU:APURIMAC:Abancay
+2:PE:PER:PERU:APURIMAC:Andahuaylas
+3:PE:PER:PERU:APURIMAC:Antabamba
+4:PE:PER:PERU:APURIMAC:Aymaraes
+5:PE:PER:PERU:APURIMAC:Chincheros
+6:PE:PER:PERU:APURIMAC:Cotabambas
+7:PE:PER:PERU:APURIMAC:Grau
+1:PE:PER:PERU:ANCASH:Aija
+2:PE:PER:PERU:ANCASH:Bolognesi
+3:PE:PER:PERU:ANCASH:Carhuaz
+4:PE:PER:PERU:ANCASH:Casma
+5:PE:PER:PERU:ANCASH:Chacas
+6:PE:PER:PERU:ANCASH:Corongo
+7:PE:PER:PERU:ANCASH:Huaraz
+8:PE:PER:PERU:ANCASH:Huari
+9:PE:PER:PERU:ANCASH:Huaylas
+10:PE:PER:PERU:ANCASH:Isla
+11:PE:PER:PERU:ANCASH:Luzuriaga
+12:PE:PER:PERU:ANCASH:Pallasca
+13:PE:PER:PERU:ANCASH:Pomabamba
+14:PE:PER:PERU:ANCASH:Recuay
+15:PE:PER:PERU:ANCASH:San Ant.Raimondi
+16:PE:PER:PERU:ANCASH:San Luis
+17:PE:PER:PERU:ANCASH:Santa
+18:PE:PER:PERU:ANCASH:Sihuas
+19:PE:PER:PERU:ANCASH:Yuncay
diff --git a/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e64e2b7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN1_LEX.txt
@@ -0,0 +1,93 @@
+1:PH-ABR:PH:ABRA
+2:PH-AGN:PH:AGUSAN DEL NORTE
+3:PH-AGS:PH:AGUSAN DEL SUR
+4:PH-AKL:PH:AKLAN
+5:PH-ALB:PH:ALBAY
+6:PH-ANT:PH:ANTIQUE
+7:PH-APA:PH:APAYAO
+8:PH-AUR:PH:AURORA
+9:PH-BAS:PH:BASILAN
+10:PH-BAN:PH:BATAAN
+11:PH-BTN:PH:BATANES
+12:PH-BTG:PH:BATANGAS
+13:PH-BEN:PH:BENGUET
+14:PH-BIL:PH:BILIRAN
+15:PH-BOH:PH:BOHOL
+16:PH-BUK:PH:BUKIDNON
+17:PH-BUL:PH:BULACAN
+18:PH-CAG:PH:CAGAYAN
+19:PH-CAN:PH:CAMARINES NORTE
+20:PH-CAS:PH:CAMARINES SUR
+21:PH-CAM:PH:CAMIGUIN
+22:PH-CAP:PH:CAPIZ
+23:PH-CAR:PH:CAR
+24:PH-CAT:PH:CATANDUANES
+25:PH-CAV:PH:CAVITE
+26:PH-CEB:PH:CEBU
+27:PH-COM:PH:COMPOSTELA VALLEY
+28:PH-DAV:PH:DAVAO DEL NORTE
+29:PH-DAS:PH:DAVAO DEL SUR
+30:PH-DAO:PH:DAVAO ORIENTAL
+31:PH-EAS:PH:EASTERN SAMAR
+32:PH-GUI:PH:GUIMARAS
+33:PH-IFU:PH:IFUGAO
+34:PH-ILN:PH:ILOCOS NORTE
+35:PH-ILS:PH:ILOCOS SUR
+36:PH-ILI:PH:ILOILO
+37:PH-ISA:PH:ISABELA
+38:PH-KAL:PH:KALINGA
+39:PH-LUN:PH:LA UNION
+40:PH-LAG:PH:LAGUNA
+41:PH-LAN:PH:LANAO DEL NORTE
+42:PH-LAS:PH:LANAO DEL SUR
+43:PH-LEY:PH:LEYTE
+44:PH-MAG:PH:MAGUINDANAO
+45:PH-MAD:PH:MARINDUQUE
+46:PH-MAS:PH:MASBATE
+47:PH-MDC:PH:MINDORO OCCIDENTAL
+48:PH-MDR:PH:MINDORO ORIENTAL
+49:PH-MSC:PH:MISAMIS OCCIDENTAL
+50:PH-MSR:PH:MISAMIS ORIENTAL
+51:PH-MOU:PH:MOUNTAIN PROVINCE
+52:PH-NCR:PH:NCR
+53:PH-NEC:PH:NEGROS OCCIDENTAL
+54:PH-NER:PH:NEGROS ORIENTAL
+55:PH-NCO:PH:NORTH COTABATO
+56:PH-NSA:PH:NORTHERN SAMAR
+57:PH-NUE:PH:NUEVA ECIJA
+58:PH-NUV:PH:NUEVA VIZCAYA
+59:PH-PLW:PH:PALAWAN
+60:PH-PAM:PH:PAMPANGA
+61:PH-PAN:PH:PANGASINAN
+62:PH-QUE:PH:QUEZON
+63:PH-QUI:PH:QUIRINO
+64:PH-1:PH:REGION 1
+65:PH-10:PH:REGION 10
+66:PH-11:PH:REGION 11
+67:PH-12:PH:REGION 12
+68:PH-2:PH:REGION 2
+69:PH-3:PH:REGION 3
+70:PH-4:PH:REGION 4
+71:PH-5:PH:REGION 5
+72:PH-6:PH:REGION 6
+73:PH-7:PH:REGION 7
+74:PH-8:PH:REGION 8
+75:PH-9:PH:REGION 9
+76:PH-RIZ:PH:RIZAL
+77:PH-ROM:PH:ROMBLON
+78:PH-SAR:PH:SARANGANI
+79:PH-SIG:PH:SIQUIJOR
+80:PH-SOR:PH:SORSOGON
+81:PH-SCO:PH:SOUTH COTABATO
+82:PH-SLE:PH:SOUTHERN LEYTE
+83:PH-SUK:PH:SULTAN KUDARAT
+84:PH-SLU:PH:SULU
+85:PH-SUN:PH:SURIGAO DEL NORTE
+86:PH-SUR:PH:SURIGAO DEL SUR
+87:PH-TAR:PH:TARLAC
+88:PH-TAW:PH:TAWI TAWI
+89:PH-WSA:PH:WESTERN SAMAR
+90:PH-ZMB:PH:ZAMBALES
+91:PH-ZAN:PH:ZAMBOANGA DEL NORTE
+92:PH-ZAS:PH:ZAMBOANGA DEL SUR
+93:PH-ZSI:PH:ZAMBOANGA SIBUGUEY [ZAMBOANGA SIBUGAY]
diff --git a/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..93104c7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PHL/PHL_ADMIN2_LEX.txt
@@ -0,0 +1,74 @@
+1:PH:PHL:PHILIPPINES:Region 3:Bataan
+2:PH:PHL:PHILIPPINES:Region 3:Bulacan
+3:PH:PHL:PHILIPPINES:Region 3:Nueva Ecija
+4:PH:PHL:PHILIPPINES:Region 3:Pampanga
+5:PH:PHL:PHILIPPINES:Region 3:Tarlac
+6:PH:PHL:PHILIPPINES:Region 3:Zambales
+1:PH:PHL:PHILIPPINES:Region 6:Aklan
+2:PH:PHL:PHILIPPINES:Region 6:Antique
+3:PH:PHL:PHILIPPINES:Region 6:Capiz
+4:PH:PHL:PHILIPPINES:Region 6:Iloilo
+5:PH:PHL:PHILIPPINES:Region 6:Negros Occidental
+1:PH:PHL:PHILIPPINES:Region 11:Davao Del Norte
+2:PH:PHL:PHILIPPINES:Region 11:Davao Del Sur
+3:PH:PHL:PHILIPPINES:Region 11:Davao Oriental
+4:PH:PHL:PHILIPPINES:Region 11:South Cotabato
+5:PH:PHL:PHILIPPINES:Region 11:Surigao Del Sur
+1:PH:PHL:PHILIPPINES:NCR:Manila
+1:PH:PHL:PHILIPPINES:Region 1:Ilocos Norte
+2:PH:PHL:PHILIPPINES:Region 1:Ilocos Sur
+3:PH:PHL:PHILIPPINES:Region 1:La Union
+4:PH:PHL:PHILIPPINES:Region 1:Pangasinan
+1:PH:PHL:PHILIPPINES:CAR:Abra
+2:PH:PHL:PHILIPPINES:CAR:Benguet
+3:PH:PHL:PHILIPPINES:CAR:Ifugao
+4:PH:PHL:PHILIPPINES:CAR:Kalinga-Apayao
+5:PH:PHL:PHILIPPINES:CAR:Mountain
+1:PH:PHL:PHILIPPINES:Region 10:Agusan Del Norte
+2:PH:PHL:PHILIPPINES:Region 10:Agusan Del Sur
+3:PH:PHL:PHILIPPINES:Region 10:Bukidnon
+4:PH:PHL:PHILIPPINES:Region 10:Camiguin
+5:PH:PHL:PHILIPPINES:Region 10:Misamis Occidental
+6:PH:PHL:PHILIPPINES:Region 10:Misamis Oriental
+7:PH:PHL:PHILIPPINES:Region 10:Surigao Del Norte
+1:PH:PHL:PHILIPPINES:Region 5:Albay
+2:PH:PHL:PHILIPPINES:Region 5:Camarines Norte
+3:PH:PHL:PHILIPPINES:Region 5:Camarines Sur
+4:PH:PHL:PHILIPPINES:Region 5:Catanduanes
+5:PH:PHL:PHILIPPINES:Region 5:Masbate
+6:PH:PHL:PHILIPPINES:Region 5:Sorsogon
+1:PH:PHL:PHILIPPINES:Region 8:Eastern Samar
+2:PH:PHL:PHILIPPINES:Region 8:Leyte
+3:PH:PHL:PHILIPPINES:Region 8:Northern Samar
+4:PH:PHL:PHILIPPINES:Region 8:Southern Leyte
+5:PH:PHL:PHILIPPINES:Region 8:Western Samar
+1:PH:PHL:PHILIPPINES:Region 9:Basilan
+2:PH:PHL:PHILIPPINES:Region 9:Sulu
+3:PH:PHL:PHILIPPINES:Region 9:Tawi-Tawi
+4:PH:PHL:PHILIPPINES:Region 9:Zamboanga Del Norte
+5:PH:PHL:PHILIPPINES:Region 9:Zamboanga Del Sur
+1:PH:PHL:PHILIPPINES:Region 7:Bohol
+2:PH:PHL:PHILIPPINES:Region 7:Cebu
+3:PH:PHL:PHILIPPINES:Region 7:Negros Oriental
+4:PH:PHL:PHILIPPINES:Region 7:Siquijor
+1:PH:PHL:PHILIPPINES:Region 2:Batanes
+2:PH:PHL:PHILIPPINES:Region 2:Cagayan
+3:PH:PHL:PHILIPPINES:Region 2:Isabela
+4:PH:PHL:PHILIPPINES:Region 2:Nueva Vizcaya
+5:PH:PHL:PHILIPPINES:Region 2:Quirino
+1:PH:PHL:PHILIPPINES:Region 12:Lanao Del Norte
+2:PH:PHL:PHILIPPINES:Region 12:Lanao Del Sur
+3:PH:PHL:PHILIPPINES:Region 12:Maguindanao
+4:PH:PHL:PHILIPPINES:Region 12:North Cotabato
+5:PH:PHL:PHILIPPINES:Region 12:Sultan Kudarat
+1:PH:PHL:PHILIPPINES:Region 4:Aurora
+2:PH:PHL:PHILIPPINES:Region 4:Batangas
+3:PH:PHL:PHILIPPINES:Region 4:Cavite
+4:PH:PHL:PHILIPPINES:Region 4:Laguna
+5:PH:PHL:PHILIPPINES:Region 4:Marinduque
+6:PH:PHL:PHILIPPINES:Region 4:Occidental Mindoro
+7:PH:PHL:PHILIPPINES:Region 4:Oriental Mindoro
+8:PH:PHL:PHILIPPINES:Region 4:Palawan
+9:PH:PHL:PHILIPPINES:Region 4:Quezon
+10:PH:PHL:PHILIPPINES:Region 4:Rizal
+11:PH:PHL:PHILIPPINES:Region 4:Romblon
diff --git a/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6d8cc22
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN1_LEX.txt
@@ -0,0 +1,20 @@
+1:PG-CPM:PG:CENTRAL
+2:PG-CPK:PG:CHIMBU
+3:PG-EBR:PG:EAST NEW BRITAIN
+4:PG-ESW:PG:EAST SEPIK
+5:PG-EHG:PG:EASTERN HIGHLANDS
+6:PG-EPW:PG:ENGA
+7:PG-GPK:PG:GULF
+8:PG-MPM:PG:MADANG
+9:PG-MRL:PG:MANUS
+10:PG-MBA:PG:MILNE BAY
+11:PG-MPL:PG:MOROBE
+12:PG-NCD:PG:NATIONAL CAPITAL DISTRICT (PORT MORESBY)
+13:PG-NIK:PG:NEW IRELAND
+14:PG-NSA:PG:NORTH SOLOMONS
+15:PG-NPP:PG:NORTHERN
+16:PG-SAN:PG:SANDAUN [WEST SEPIK]
+17:PG-SHM:PG:SOUTHERN HIGHLANDS
+18:PG-WBK:PG:WEST NEW BRITAIN
+19:PG-WPD:PG:WESTERN
+20:PG-WHM:PG:WESTERN HIGHLANDS
diff --git a/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN2_LEX.txt
new file mode 100644
index 0000000..197d570
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PNG/PNG_ADMIN2_LEX.txt
@@ -0,0 +1,402 @@
+1:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.1
+2:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.10
+3:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.100
+4:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.101
+5:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.102
+6:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.103
+7:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.104
+8:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.105
+9:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.106
+10:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.107
+11:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.108
+12:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.109
+13:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.11
+14:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.110
+15:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.111
+16:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.112
+17:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.113
+18:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.114
+19:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.115
+20:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.116
+21:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.117
+22:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.118
+23:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.119
+24:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.12
+25:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.120
+26:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.121
+27:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.122
+28:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.123
+29:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.124
+30:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.125
+31:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.126
+32:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.127
+33:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.128
+34:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.129
+35:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.13
+36:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.130
+37:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.131
+38:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.132
+39:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.133
+40:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.134
+41:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.135
+42:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.136
+43:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.137
+44:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.138
+45:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.139
+46:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.14
+47:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.140
+48:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.141
+49:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.142
+50:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.143
+51:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.144
+52:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.145
+53:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.146
+54:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.147
+55:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.148
+56:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.149
+57:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.15
+58:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.150
+59:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.151
+60:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.152
+61:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.153
+62:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.154
+63:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.155
+64:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.156
+65:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.157
+66:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.158
+67:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.159
+68:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.16
+69:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.160
+70:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.161
+71:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.162
+72:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.163
+73:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.164
+74:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.165
+75:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.166
+76:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.167
+77:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.168
+78:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.169
+79:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.17
+80:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.170
+81:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.171
+82:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.172
+83:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.173
+84:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.174
+85:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.175
+86:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.176
+87:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.177
+88:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.178
+89:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.179
+90:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.18
+91:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.180
+92:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.181
+93:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.182
+94:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.183
+95:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.184
+96:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.185
+97:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.186
+98:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.187
+99:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.188
+100:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.189
+101:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.19
+102:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.190
+103:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.191
+104:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.192
+105:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.193
+106:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.194
+107:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.195
+108:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.196
+109:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.197
+110:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.198
+111:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.199
+112:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.2
+113:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.20
+114:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.200
+115:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.201
+116:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.202
+117:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.203
+118:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.204
+119:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.205
+120:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.206
+121:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.207
+122:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.208
+123:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.209
+124:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.21
+125:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.210
+126:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.211
+127:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.212
+128:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.213
+129:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.214
+130:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.215
+131:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.216
+132:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.217
+133:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.218
+134:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.219
+135:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.22
+136:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.220
+137:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.221
+138:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.222
+139:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.223
+140:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.224
+141:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.225
+142:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.226
+143:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.227
+144:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.228
+145:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.229
+146:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.23
+147:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.230
+148:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.231
+149:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.232
+150:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.233
+151:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.234
+152:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.235
+153:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.236
+154:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.237
+155:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.238
+156:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.239
+157:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.24
+158:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.240
+159:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.241
+160:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.242
+161:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.243
+162:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.244
+163:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.245
+164:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.246
+165:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.247
+166:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.248
+167:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.249
+168:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.25
+169:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.250
+170:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.251
+171:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.252
+172:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.253
+173:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.254
+174:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.255
+175:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.256
+176:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.257
+177:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.258
+178:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.259
+179:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.26
+180:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.260
+181:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.261
+182:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.262
+183:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.263
+184:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.264
+185:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.265
+186:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.266
+187:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.267
+188:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.268
+189:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.269
+190:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.27
+191:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.270
+192:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.271
+193:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.272
+194:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.273
+195:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.274
+196:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.275
+197:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.276
+198:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.277
+199:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.278
+200:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.279
+201:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.28
+202:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.280
+203:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.281
+204:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.282
+205:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.283
+206:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.284
+207:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.285
+208:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.286
+209:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.287
+210:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.288
+211:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.289
+212:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.29
+213:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.290
+214:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.291
+215:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.292
+216:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.293
+217:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.294
+218:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.295
+219:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.296
+220:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.297
+221:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.298
+222:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.299
+223:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.3
+224:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.30
+225:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.300
+226:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.301
+227:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.302
+228:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.303
+229:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.304
+230:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.305
+231:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.306
+232:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.307
+233:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.308
+234:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.309
+235:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.31
+236:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.310
+237:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.311
+238:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.312
+239:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.313
+240:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.314
+241:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.315
+242:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.316
+243:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.317
+244:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.318
+245:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.319
+246:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.32
+247:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.320
+248:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.321
+249:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.322
+250:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.323
+251:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.324
+252:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.325
+253:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.326
+254:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.327
+255:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.328
+256:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.329
+257:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.33
+258:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.330
+259:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.331
+260:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.332
+261:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.333
+262:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.334
+263:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.335
+264:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.336
+265:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.337
+266:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.338
+267:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.339
+268:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.34
+269:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.340
+270:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.341
+271:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.342
+272:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.343
+273:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.344
+274:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.345
+275:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.346
+276:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.347
+277:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.348
+278:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.349
+279:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.35
+280:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.350
+281:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.351
+282:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.352
+283:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.353
+284:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.354
+285:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.355
+286:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.356
+287:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.357
+288:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.358
+289:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.359
+290:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.36
+291:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.360
+292:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.361
+293:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.362
+294:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.363
+295:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.364
+296:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.365
+297:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.366
+298:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.367
+299:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.368
+300:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.369
+301:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.37
+302:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.370
+303:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.371
+304:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.372
+305:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.373
+306:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.374
+307:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.375
+308:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.376
+309:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.377
+310:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.378
+311:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.379
+312:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.38
+313:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.380
+314:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.381
+315:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.382
+316:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.383
+317:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.384
+318:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.385
+319:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.386
+320:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.387
+321:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.388
+322:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.389
+323:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.39
+324:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.390
+325:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.391
+326:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.392
+327:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.393
+328:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.394
+329:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.395
+330:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.396
+331:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.397
+332:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.398
+333:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.399
+334:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.4
+335:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.40
+336:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.400
+337:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.401
+338:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.402
+339:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.41
+340:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.42
+341:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.43
+342:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.44
+343:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.45
+344:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.46
+345:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.47
+346:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.48
+347:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.49
+348:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.5
+349:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.50
+350:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.51
+351:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.52
+352:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.53
+353:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.54
+354:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.55
+355:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.56
+356:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.57
+357:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.58
+358:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.59
+359:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.6
+360:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.60
+361:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.61
+362:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.62
+363:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.63
+364:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.64
+365:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.65
+366:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.66
+367:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.67
+368:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.68
+369:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.69
+370:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.7
+371:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.70
+372:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.71
+373:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.72
+374:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.73
+375:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.74
+376:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.75
+377:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.76
+378:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.77
+379:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.78
+380:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.79
+381:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.8
+382:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.80
+383:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.81
+384:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.82
+385:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.83
+386:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.84
+387:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.85
+388:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.86
+389:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.87
+390:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.88
+391:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.89
+392:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.9
+393:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.90
+394:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.91
+395:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.92
+396:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.93
+397:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.94
+398:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.95
+399:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.96
+400:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.97
+401:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.98
+402:PG:PNG:PAPUA NEW GUINEA:N.A.:PNG.L2.99
diff --git a/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN1_LEX.txt
new file mode 100644
index 0000000..eb82756
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN1_LEX.txt
@@ -0,0 +1,60 @@
+1:PL-BP:PL:BIALA PODLASKA
+2:PL-BI:PL:BIALYSTOK
+3:PL-BB:PL:BIELSKO BIALA
+4:PL-BY:PL:BYDGOSZCZ
+5:PL-CH:PL:CHELM
+6:PL-CE:PL:CIECHANOW
+7:PL-CZ:PL:CZESTOCHOWA
+8:PL-DS:PL:DOLNOELSKIE
+9:PL-EL:PL:ELBLAG
+10:PL-SL:PL:ELSKIE
+11:PL-GD:PL:GDANSK
+12:PL-GO:PL:GORZOW
+13:PL-JE:PL:JELENIA GORA
+14:PL-KA:PL:KALISZ
+15:PL-KT:PL:KATOWICE
+16:PL-KL:PL:KIELCE
+17:PL-KO:PL:KOSZALIN
+18:PL-KW:PL:KRAKOW
+19:PL-KR:PL:KROSNO
+20:PL-KP:PL:KUJAWSKO POMORSKIE
+21:PL-LG:PL:LEGNICA
+22:PL-LE:PL:LESZNO
+23:PL-LD:PL:LODZ
+24:PL-LO:PL:LOMZA
+25:PL-LU:PL:LUBELSKIE
+26:PL-LL:PL:LUBLIN
+27:PL-LB:PL:LUBUSKIE
+28:PL-MZ:PL:MAZOWIECKIE
+29:PL-MA:PL:MA³OPOLSKIE
+30:PL-NS:PL:NOWY SACZ
+31:PL-OL:PL:OLSZTYN
+32:PL-OP:PL:OPOLE
+33:PL-OS:PL:OSTROLEKA
+34:PL-PI:PL:PILA
+35:PL-PO:PL:PIOTRKOW
+36:PL-PK:PL:PODKARPACKIE
+37:PL-PD:PL:PODLASKIE
+38:PL-PM:PL:POMORSKIE
+39:PL-PZ:PL:POZNAN
+40:PL-PR:PL:PRZEMYSL
+41:PL-RA:PL:RADOM
+42:PL-RZ:PL:RZESZOW
+43:PL-SI:PL:SIEDLCE
+44:PL-SR:PL:SIERADZ
+45:PL-SK:PL:SKIERNIEWICE
+46:PL-SP:PL:SLUPSK
+47:PL-SU:PL:SUWALSKI
+48:PL-CI:PL:SZCZECIN
+49:PL-TA:PL:TARNOBRZEG
+50:PL-TW:PL:TARNOW
+51:PL-TO:PL:TORUN
+52:PL-WY:PL:WALBRZYCH
+53:PL-WN:PL:WARMISKO MAZURSKIE
+54:PL-WA:PL:WARSZAWA
+55:PL-WP:PL:WIELKOPOLSKIE
+56:PL-WO:PL:WLOCLAWEK
+57:PL-WR:PL:WROCLAW
+58:PL-ZP:PL:ZACHODNIOPOMORSKIE
+59:PL-ZM:PL:ZAMOSC
+60:PL-ZE:PL:ZIELONA GORA
diff --git a/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/POL/POL_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN1_LEX.txt
new file mode 100644
index 0000000..feaa5dd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN1_LEX.txt
@@ -0,0 +1,79 @@
+1:PR-72001:PR:ADJUNTAS
+2:PR-72003:PR:AGUADA
+3:PR-72005:PR:AGUADILLA
+4:PR-72007:PR:AGUAS BUENAS
+5:PR-72009:PR:AIBONITO
+6:PR-72013:PR:ARECIBO
+7:PR-72015:PR:ARROYO
+8:PR-72011:PR:AÑASCO
+9:PR-72017:PR:BARCELONETA
+10:PR-72019:PR:BARRANQUITAS
+11:PR-72021:PR:BAYAMÓN
+12:PR-72023:PR:CABO ROJO
+13:PR-72025:PR:CAGUAS
+14:PR-72027:PR:CAMUY
+15:PR-72029:PR:CANÓVANAS
+16:PR-72031:PR:CAROLINA
+17:PR-72033:PR:CATAÑO
+18:PR-72035:PR:CAYEY
+19:PR-72037:PR:CEIBA
+20:PR-72039:PR:CIALES
+21:PR-72041:PR:CIDRA
+22:PR-72043:PR:COAMO
+23:PR-72045:PR:COMERÍO
+24:PR-72047:PR:COROZAL
+25:PR-72049:PR:CULEBRA
+26:PR-72051:PR:DORADO
+27:PR-72053:PR:FAJARDO
+28:PR-72054:PR:FLORIDA
+29:PR-72057:PR:GUAYAMA
+30:PR-72059:PR:GUAYANILLA
+31:PR-72061:PR:GUAYNABO
+32:PR-72063:PR:GURABO
+33:PR-72055:PR:GUÁNICA
+34:PR-72065:PR:HATILLO
+35:PR-72067:PR:HORMIGUEROS
+36:PR-72069:PR:HUMACAO
+37:PR-72071:PR:ISABELA
+38:PR-72073:PR:JAYUYA
+39:PR-72075:PR:JUANA DÍAZ
+40:PR-72077:PR:JUNCOS
+41:PR-72079:PR:LAJAS
+42:PR-72081:PR:LARES
+43:PR-72083:PR:LAS MARÍAS
+44:PR-72085:PR:LAS PIEDRAS
+45:PR-72087:PR:LOÍZA
+46:PR-72089:PR:LUQUILLO
+47:PR-72091:PR:MANATÍ
+48:PR-72093:PR:MARICAO
+49:PR-72095:PR:MAUNABO
+50:PR-72097:PR:MAYAGÜEZ
+51:PR-72099:PR:MOCA
+52:PR-72101:PR:MOROVIS
+53:PR-72103:PR:NAGUABO
+54:PR-72105:PR:NARANJITO
+55:PR-72107:PR:OROCOVIS
+56:PR-72109:PR:PATILLAS
+57:PR-72111:PR:PEÑUELAS
+58:PR-72113:PR:PONCE
+59:PR-TR:PR:PUERTO RICO
+60:PR-72115:PR:QUEBRADILLAS
+61:PR-72117:PR:RINCÓN
+62:PR-72119:PR:RÍO GRANDE
+63:PR-72121:PR:SABANA GRANDE
+64:PR-72123:PR:SALINAS
+65:PR-72125:PR:SAN GERMÁN
+66:PR-72127:PR:SAN JUAN
+67:PR-72129:PR:SAN LORENZO
+68:PR-72131:PR:SAN SEBASTIÁN
+69:PR-72133:PR:SANTA ISABEL
+70:PR-72135:PR:TOA ALTA
+71:PR-72137:PR:TOA BAJA
+72:PR-72139:PR:TRUJILLO ALTO
+73:PR-72141:PR:UTUADO
+74:PR-72143:PR:VEGA ALTA
+75:PR-72145:PR:VEGA BAJA
+76:PR-72147:PR:VIEQUES
+77:PR-72149:PR:VILLALBA
+78:PR-72151:PR:YABUCOA
+79:PR-72153:PR:YAUCO
diff --git a/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRI/PRI_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN1_LEX.txt
new file mode 100644
index 0000000..7c9411d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN1_LEX.txt
@@ -0,0 +1,25 @@
+1:KP-CHA:KP:CHAGANG DO
+2:KP-CHG:KP:CHANGANG
+3:KP-HAB:KP:HAMGYONGBUK DO
+4:KP-HAN:KP:HAMGYONGNAM DO
+5:KP-HWB:KP:HWANGHAEBUK DO
+6:KP-HWN:KP:HWANGHAENAM DO
+7:KP-KSO:KP:KAESONG
+8:KP-KAE:KP:KAESONG SI
+9:KP-KGW:KP:KANGWON
+10:KP-KAN:KP:KANGWON DO
+11:KP-NAJ:KP:NAJIN SONBONG SI
+12:KP-NAP:KP:NAMPO
+13:KP-NAM:KP:NAMPO SI
+14:KP-HGY:KP:NORTH HAMGYONG
+15:KP-HWA:KP:NORTH HWANGHAE
+16:KP-NPY:KP:NORTH PYONGAN
+17:KP-PYB:KP:PYONGANBUK DO
+18:KP-PYN:KP:PYONGANNAM DO
+19:KP-PY:KP:PYONGYANG
+20:KP-PYO:KP:PYONGYANG SI
+21:KP-SHO:KP:SOUTH HAMGYONG
+22:KP-SHA:KP:SOUTH HWANGHAE
+23:KP-SPY:KP:SOUTH PYONGAN
+24:KP-YGN:KP:YANGGANG
+25:KP-YAN:KP:YANGGANG DO
diff --git a/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e9274c9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRK/PRK_ADMIN2_LEX.txt
@@ -0,0 +1,70 @@
+1:KP:PRK:NORTH KOREA:Kangwon:PRK.L2.7
+2:KP:PRK:NORTH KOREA:Kangwon:PRK.L2.8
+3:KP:PRK:NORTH KOREA:Kangwon:PRK.L2.9
+1:KP:PRK:NORTH KOREA:South Pyongan:PRK.L2.10
+1:KP:PRK:NORTH KOREA:Changang:PRK.L2.1
+1:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.12
+2:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.13
+3:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.14
+4:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.15
+5:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.16
+6:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.17
+7:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.18
+8:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.19
+9:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.20
+10:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.21
+11:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.22
+12:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.23
+13:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.24
+14:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.25
+15:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.26
+16:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.27
+17:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.28
+18:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.29
+19:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.30
+20:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.31
+21:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.32
+22:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.33
+23:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.34
+24:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.35
+25:KP:PRK:NORTH KOREA:South Hwanghae:PRK.L2.36
+1:KP:PRK:NORTH KOREA:Pyongyang:PRK.L2.6
+1:KP:PRK:NORTH KOREA:South Hamgyong:PRK.L2.66
+2:KP:PRK:NORTH KOREA:South Hamgyong:PRK.L2.67
+3:KP:PRK:NORTH KOREA:South Hamgyong:PRK.L2.68
+4:KP:PRK:NORTH KOREA:South Hamgyong:PRK.L2.69
+1:KP:PRK:NORTH KOREA:Yanggang:PRK.L2.70
+1:KP:PRK:NORTH KOREA:Nampo:PRK.L2.37
+1:KP:PRK:NORTH KOREA:Kaesong:PRK.L2.5
+1:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.38
+2:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.39
+3:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.40
+4:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.41
+5:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.42
+6:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.43
+7:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.44
+8:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.45
+9:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.46
+10:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.47
+11:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.48
+12:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.49
+13:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.50
+14:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.51
+15:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.52
+16:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.53
+17:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.54
+18:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.55
+19:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.56
+20:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.57
+21:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.58
+22:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.59
+23:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.60
+24:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.61
+25:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.62
+26:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.63
+27:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.64
+28:KP:PRK:NORTH KOREA:North Pyongan:PRK.L2.65
+1:KP:PRK:NORTH KOREA:North Hamgyong:PRK.L2.2
+2:KP:PRK:NORTH KOREA:North Hamgyong:PRK.L2.3
+3:KP:PRK:NORTH KOREA:North Hamgyong:PRK.L2.4
+1:KP:PRK:NORTH KOREA:North Hwanghae:PRK.L2.11
diff --git a/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN1_LEX.txt
new file mode 100644
index 0000000..bd00102
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN1_LEX.txt
@@ -0,0 +1,24 @@
+1:PT-14:PT:ALENTEJO
+2:PT-15:PT:ALGARVE
+3:PT-0:PT:AVEIRO
+4:PT-02:PT:BEJA
+5:PT-03:PT:BRAGA
+6:PT-04:PT:BRAGANCA
+7:PT-05:PT:CASTELO BRANCO
+8:PT-10:PT:CENTRO
+9:PT-06:PT:COIMBRA
+10:PT-08:PT:FARO
+11:PT-09:PT:GUARDA
+12:PT-:PT:LISBOA
+13:PT-01:PT:LISBOA E VALE DO TEJO
+14:PT-11:PT:NORTE
+15:PT-2:PT:PORTALEGRE
+16:PT-3:PT:PORTO
+17:PT-30:PT:REGIO AUTNOMA DA MADEIRA
+18:PT-20:PT:REGIO AUTNOMA DOS ACORES
+19:PT-4:PT:SANTAREM
+20:PT-5:PT:SETBAL
+21:PT-6:PT:VIANA DO CASTELO
+22:PT-7:PT:VILA REAL
+23:PT-8:PT:VISEU
+24:PT-07:PT:VORA
diff --git a/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRT/PRT_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN1_LEX.txt
new file mode 100644
index 0000000..8fab20f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:PY-6:PY:ALTO PARAGUAY
+2:PY-0:PY:ALTO PARANA
+3:PY-3:PY:AMAMBAY
+4:PY-ASU:PY:ASUNCION
+5:PY-19:PY:BOQUERON
+6:PY-5:PY:CAAGUAZ
+7:PY-CAZ:PY:CAAGUAZU
+8:PY-16:PY:CAAZAPA
+9:PY-14:PY:CANINDEYU
+10:PY-17:PY:CENTRAL
+11:PY-18:PY:CONCEPCION
+12:PY-13:PY:CORDILLERA
+13:PY-4:PY:GUAIRA
+14:PY-7:PY:ITAPUA
+15:PY-8:PY:MISIONES
+16:PY-2:PY:NEEMBUCU
+17:PY-9:PY:PARAGUARI
+18:PY-15:PY:PRESIDENTE HAYES
+19:PY-12:PY:SAN PEDRO
diff --git a/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN2_LEX.txt
new file mode 100644
index 0000000..b75eaf0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/PRY/PRY_ADMIN2_LEX.txt
@@ -0,0 +1,249 @@
+1:PY:PRY:PARAGUAY:UNKNOWN:RIO ALTO PARANA
+1:PY:PRY:PARAGUAY:BOQUERON:Gral. Eugenio A. Garay
+2:PY:PRY:PARAGUAY:BOQUERON:Mcal. Estigarribia
+3:PY:PRY:PARAGUAY:BOQUERON:Pedro P. Pena
+1:PY:PRY:PARAGUAY:NEEMBUCU:Alberdi
+2:PY:PRY:PARAGUAY:NEEMBUCU:Cerrito
+3:PY:PRY:PARAGUAY:NEEMBUCU:Desmochados
+4:PY:PRY:PARAGUAY:NEEMBUCU:Gral. Jose E. Diaz
+5:PY:PRY:PARAGUAY:NEEMBUCU:Guazucua
+6:PY:PRY:PARAGUAY:NEEMBUCU:Humaita
+7:PY:PRY:PARAGUAY:NEEMBUCU:Humaita (Is.)
+8:PY:PRY:PARAGUAY:NEEMBUCU:Isla (Rio Parana)
+9:PY:PRY:PARAGUAY:NEEMBUCU:Isla Umbu
+10:PY:PRY:PARAGUAY:NEEMBUCU:Isla Umbu (Is.)
+11:PY:PRY:PARAGUAY:NEEMBUCU:Laguna Vera
+12:PY:PRY:PARAGUAY:NEEMBUCU:Laureles
+13:PY:PRY:PARAGUAY:NEEMBUCU:Mayor Martinez
+14:PY:PRY:PARAGUAY:NEEMBUCU:Paso de Patria
+15:PY:PRY:PARAGUAY:NEEMBUCU:Pilar
+16:PY:PRY:PARAGUAY:NEEMBUCU:Pilar (Is.)
+17:PY:PRY:PARAGUAY:NEEMBUCU:Rio Parana
+18:PY:PRY:PARAGUAY:NEEMBUCU:San Juan Bta. del Neembuc
+19:PY:PRY:PARAGUAY:NEEMBUCU:Tacuaras
+20:PY:PRY:PARAGUAY:NEEMBUCU:Tacuaras (Is.)
+21:PY:PRY:PARAGUAY:NEEMBUCU:Villa Franca
+22:PY:PRY:PARAGUAY:NEEMBUCU:Villa Oliva
+23:PY:PRY:PARAGUAY:NEEMBUCU:Villa Oliva (Is.)
+24:PY:PRY:PARAGUAY:NEEMBUCU:Villa Rica (Is.)
+25:PY:PRY:PARAGUAY:NEEMBUCU:Villalvin
+1:PY:PRY:PARAGUAY:SAN PEDRO:25 de Diciembre
+2:PY:PRY:PARAGUAY:SAN PEDRO:Antequera
+3:PY:PRY:PARAGUAY:SAN PEDRO:Antequera (Is.)
+4:PY:PRY:PARAGUAY:SAN PEDRO:Chore
+5:PY:PRY:PARAGUAY:SAN PEDRO:Elizardo Aquino
+6:PY:PRY:PARAGUAY:SAN PEDRO:Isidoro Resquin
+7:PY:PRY:PARAGUAY:SAN PEDRO:Itacurubi del Rosario
+8:PY:PRY:PARAGUAY:SAN PEDRO:Lima
+9:PY:PRY:PARAGUAY:SAN PEDRO:Nueva Germania
+10:PY:PRY:PARAGUAY:SAN PEDRO:Rio Paraguay
+11:PY:PRY:PARAGUAY:SAN PEDRO:S.Pedro Y. (Is.)
+12:PY:PRY:PARAGUAY:SAN PEDRO:S.Pedro de Ycuamandyyu
+13:PY:PRY:PARAGUAY:SAN PEDRO:San Estanislao
+14:PY:PRY:PARAGUAY:SAN PEDRO:San Pablo
+15:PY:PRY:PARAGUAY:SAN PEDRO:Tacuati
+16:PY:PRY:PARAGUAY:SAN PEDRO:Union
+17:PY:PRY:PARAGUAY:SAN PEDRO:Villa del R. (Is.)
+18:PY:PRY:PARAGUAY:SAN PEDRO:Villa del Rosario
+19:PY:PRY:PARAGUAY:SAN PEDRO:Yataity del Norte
+1:PY:PRY:PARAGUAY:ITAPUA:Alto Vera
+2:PY:PRY:PARAGUAY:ITAPUA:Bella Vista
+3:PY:PRY:PARAGUAY:ITAPUA:Cambyreta
+4:PY:PRY:PARAGUAY:ITAPUA:Capitan Meza
+5:PY:PRY:PARAGUAY:ITAPUA:Capitan Miranda
+6:PY:PRY:PARAGUAY:ITAPUA:Carlos A Lopez
+7:PY:PRY:PARAGUAY:ITAPUA:Carmen del Parana
+8:PY:PRY:PARAGUAY:ITAPUA:Coronel Bogado
+9:PY:PRY:PARAGUAY:ITAPUA:Edelira
+10:PY:PRY:PARAGUAY:ITAPUA:Encarnacion
+11:PY:PRY:PARAGUAY:ITAPUA:Fram
+12:PY:PRY:PARAGUAY:ITAPUA:Gral Artigas
+13:PY:PRY:PARAGUAY:ITAPUA:Gral. Delgado
+14:PY:PRY:PARAGUAY:ITAPUA:Hohenau
+15:PY:PRY:PARAGUAY:ITAPUA:Isla
+16:PY:PRY:PARAGUAY:ITAPUA:Isla Yacyreta
+17:PY:PRY:PARAGUAY:ITAPUA:Jesus
+18:PY:PRY:PARAGUAY:ITAPUA:La Paz
+19:PY:PRY:PARAGUAY:ITAPUA:Leandro Oviedo
+20:PY:PRY:PARAGUAY:ITAPUA:Mayor Otano
+21:PY:PRY:PARAGUAY:ITAPUA:Natalio
+22:PY:PRY:PARAGUAY:ITAPUA:Nueva Alborada
+23:PY:PRY:PARAGUAY:ITAPUA:Obligado
+24:PY:PRY:PARAGUAY:ITAPUA:Pirapo
+25:PY:PRY:PARAGUAY:ITAPUA:San Cosme Y Damian
+26:PY:PRY:PARAGUAY:ITAPUA:San Juan
+27:PY:PRY:PARAGUAY:ITAPUA:San Pedro del Parana
+28:PY:PRY:PARAGUAY:ITAPUA:San Rafael del Parana
+29:PY:PRY:PARAGUAY:ITAPUA:Tomas Romero P.
+30:PY:PRY:PARAGUAY:ITAPUA:Trinidad
+31:PY:PRY:PARAGUAY:ITAPUA:Yatytay
+1:PY:PRY:PARAGUAY:GUAIRA:Borja
+2:PY:PRY:PARAGUAY:GUAIRA:Capitan Troche
+3:PY:PRY:PARAGUAY:GUAIRA:Cnel Martinez
+4:PY:PRY:PARAGUAY:GUAIRA:Cnel. Martinez
+5:PY:PRY:PARAGUAY:GUAIRA:Colonia Independencia
+6:PY:PRY:PARAGUAY:GUAIRA:Dr. Bottrell
+7:PY:PRY:PARAGUAY:GUAIRA:Gral Garay
+8:PY:PRY:PARAGUAY:GUAIRA:Itape
+9:PY:PRY:PARAGUAY:GUAIRA:Iturbe
+10:PY:PRY:PARAGUAY:GUAIRA:Jose Fassardi
+11:PY:PRY:PARAGUAY:GUAIRA:Mbocayati
+12:PY:PRY:PARAGUAY:GUAIRA:Natalicio Talavera
+13:PY:PRY:PARAGUAY:GUAIRA:Numi
+14:PY:PRY:PARAGUAY:GUAIRA:San Salvador
+15:PY:PRY:PARAGUAY:GUAIRA:Villarica
+16:PY:PRY:PARAGUAY:GUAIRA:Yataity
+1:PY:PRY:PARAGUAY:CONCEPCION:Belen
+2:PY:PRY:PARAGUAY:CONCEPCION:Concepcion
+3:PY:PRY:PARAGUAY:CONCEPCION:Horqueta
+4:PY:PRY:PARAGUAY:CONCEPCION:Loreto
+5:PY:PRY:PARAGUAY:CONCEPCION:San Carlos
+6:PY:PRY:PARAGUAY:CONCEPCION:San Lazaro
+7:PY:PRY:PARAGUAY:CONCEPCION:Yby Yau
+1:PY:PRY:PARAGUAY:CENTRAL:Aregua
+2:PY:PRY:PARAGUAY:CENTRAL:Asuncion
+3:PY:PRY:PARAGUAY:CENTRAL:Asuncion (Is.)
+4:PY:PRY:PARAGUAY:CENTRAL:Capiata
+5:PY:PRY:PARAGUAY:CENTRAL:Fdo. de La Mora
+6:PY:PRY:PARAGUAY:CENTRAL:Guarambare
+7:PY:PRY:PARAGUAY:CENTRAL:Ita
+8:PY:PRY:PARAGUAY:CENTRAL:Itaugua
+9:PY:PRY:PARAGUAY:CENTRAL:J. A. Saldivar
+10:PY:PRY:PARAGUAY:CENTRAL:Lago
+11:PY:PRY:PARAGUAY:CENTRAL:Lago Ypacarai
+12:PY:PRY:PARAGUAY:CENTRAL:Lambare
+13:PY:PRY:PARAGUAY:CENTRAL:Limpio
+14:PY:PRY:PARAGUAY:CENTRAL:Limpio (Is.)
+15:PY:PRY:PARAGUAY:CENTRAL:Luque
+16:PY:PRY:PARAGUAY:CENTRAL:M. Roque Alonso
+17:PY:PRY:PARAGUAY:CENTRAL:M.Roque Alonso (Is.)
+18:PY:PRY:PARAGUAY:CENTRAL:Nemby
+19:PY:PRY:PARAGUAY:CENTRAL:Nueva Italia
+20:PY:PRY:PARAGUAY:CENTRAL:Rio Paraguay
+21:PY:PRY:PARAGUAY:CENTRAL:San Antonio
+22:PY:PRY:PARAGUAY:CENTRAL:San Lorenzo
+23:PY:PRY:PARAGUAY:CENTRAL:Villa Elisa
+24:PY:PRY:PARAGUAY:CENTRAL:Villeta
+25:PY:PRY:PARAGUAY:CENTRAL:Ypacarai
+26:PY:PRY:PARAGUAY:CENTRAL:Ypane
+1:PY:PRY:PARAGUAY:PARAGUARI:Acahay
+2:PY:PRY:PARAGUAY:PARAGUARI:Caapucu
+3:PY:PRY:PARAGUAY:PARAGUARI:Caballero
+4:PY:PRY:PARAGUAY:PARAGUARI:Carapegua
+5:PY:PRY:PARAGUAY:PARAGUARI:Escobar
+6:PY:PRY:PARAGUAY:PARAGUARI:La Colmena
+7:PY:PRY:PARAGUAY:PARAGUARI:Lag.Parana mi
+8:PY:PRY:PARAGUAY:PARAGUARI:Lago Ypoa
+9:PY:PRY:PARAGUAY:PARAGUARI:Mbuyapey
+10:PY:PRY:PARAGUAY:PARAGUARI:Paraguari
+11:PY:PRY:PARAGUAY:PARAGUARI:Pirayu
+12:PY:PRY:PARAGUAY:PARAGUARI:Quiindy
+13:PY:PRY:PARAGUAY:PARAGUARI:Quyquyho
+14:PY:PRY:PARAGUAY:PARAGUARI:San Roque Gonzalez
+15:PY:PRY:PARAGUAY:PARAGUARI:Sapucai
+16:PY:PRY:PARAGUAY:PARAGUARI:Tebicuarymi
+17:PY:PRY:PARAGUAY:PARAGUARI:Yaguaron
+18:PY:PRY:PARAGUAY:PARAGUARI:Ybycui
+19:PY:PRY:PARAGUAY:PARAGUARI:Ybytymi
+1:PY:PRY:PARAGUAY:CAAGUAZU:3 de Febrero
+2:PY:PRY:PARAGUAY:CAAGUAZU:Caaguazu
+3:PY:PRY:PARAGUAY:CAAGUAZU:Carayao
+4:PY:PRY:PARAGUAY:CAAGUAZU:Cecilio Baez
+5:PY:PRY:PARAGUAY:CAAGUAZU:Coronel Oviedo
+6:PY:PRY:PARAGUAY:CAAGUAZU:J.E. Estigarribia
+7:PY:PRY:PARAGUAY:CAAGUAZU:Jose D. Ocampos
+8:PY:PRY:PARAGUAY:CAAGUAZU:Juan M. Frutos
+9:PY:PRY:PARAGUAY:CAAGUAZU:La Pastora
+10:PY:PRY:PARAGUAY:CAAGUAZU:Mcal. Fco. Solano Lopez
+11:PY:PRY:PARAGUAY:CAAGUAZU:Nueva Londres
+12:PY:PRY:PARAGUAY:CAAGUAZU:R.I. 3 Corrales
+13:PY:PRY:PARAGUAY:CAAGUAZU:Raul  A. Oviedo
+14:PY:PRY:PARAGUAY:CAAGUAZU:Repatriacion
+15:PY:PRY:PARAGUAY:CAAGUAZU:Rio Yguazu
+16:PY:PRY:PARAGUAY:CAAGUAZU:San Joaquin
+17:PY:PRY:PARAGUAY:CAAGUAZU:San Jose de los Arroyos
+18:PY:PRY:PARAGUAY:CAAGUAZU:Santa Rosa del Mbutuy
+19:PY:PRY:PARAGUAY:CAAGUAZU:Simon Bolivar
+20:PY:PRY:PARAGUAY:CAAGUAZU:Yhu
+1:PY:PRY:PARAGUAY:PRESIDENTE HAYES:Benjamin Aceval
+2:PY:PRY:PARAGUAY:PRESIDENTE HAYES:Pozo Colorado
+3:PY:PRY:PARAGUAY:PRESIDENTE HAYES:Puerto Pinasco
+4:PY:PRY:PARAGUAY:PRESIDENTE HAYES:Villa Hayes
+1:PY:PRY:PARAGUAY:CAAZAPA:Abai
+2:PY:PRY:PARAGUAY:CAAZAPA:Buena Vista
+3:PY:PRY:PARAGUAY:CAAZAPA:Caazapa
+4:PY:PRY:PARAGUAY:CAAZAPA:Dr. Moises Bertoni
+5:PY:PRY:PARAGUAY:CAAZAPA:Fulgencio Yegros
+6:PY:PRY:PARAGUAY:CAAZAPA:Gral. Higinio Morinigo
+7:PY:PRY:PARAGUAY:CAAZAPA:Maciel
+8:PY:PRY:PARAGUAY:CAAZAPA:San Juan Nepomuceno
+9:PY:PRY:PARAGUAY:CAAZAPA:Tavai
+10:PY:PRY:PARAGUAY:CAAZAPA:Yuty
+1:PY:PRY:PARAGUAY:ALTO PARANA:Ciudad  del Este
+2:PY:PRY:PARAGUAY:ALTO PARANA:D. M. Irala
+3:PY:PRY:PARAGUAY:ALTO PARANA:Hernandarias
+4:PY:PRY:PARAGUAY:ALTO PARANA:Itakyry
+5:PY:PRY:PARAGUAY:ALTO PARANA:J.E. Oleary
+6:PY:PRY:PARAGUAY:ALTO PARANA:Los Cedrales
+7:PY:PRY:PARAGUAY:ALTO PARANA:Mallorquin
+8:PY:PRY:PARAGUAY:ALTO PARANA:Mbaracayu
+9:PY:PRY:PARAGUAY:ALTO PARANA:Minga Guazu
+10:PY:PRY:PARAGUAY:ALTO PARANA:Minga Pora
+11:PY:PRY:PARAGUAY:ALTO PARANA:Nacunday
+12:PY:PRY:PARAGUAY:ALTO PARANA:Naranjal
+13:PY:PRY:PARAGUAY:ALTO PARANA:Pte. Franco
+14:PY:PRY:PARAGUAY:ALTO PARANA:Rio Yguazu
+15:PY:PRY:PARAGUAY:ALTO PARANA:San Alberto
+16:PY:PRY:PARAGUAY:ALTO PARANA:San Cristobal
+17:PY:PRY:PARAGUAY:ALTO PARANA:Santa Rita
+18:PY:PRY:PARAGUAY:ALTO PARANA:Santa Rosa
+19:PY:PRY:PARAGUAY:ALTO PARANA:Yguazu
+20:PY:PRY:PARAGUAY:ALTO PARANA:Yguazu (Lago)
+1:PY:PRY:PARAGUAY:AMAMBAY:Bella Vista
+2:PY:PRY:PARAGUAY:AMAMBAY:Capitan Bado
+3:PY:PRY:PARAGUAY:AMAMBAY:Pedro Juan Caballero
+1:PY:PRY:PARAGUAY:ALTO PARAGUAY:Fuerte OLimpo
+2:PY:PRY:PARAGUAY:ALTO PARAGUAY:La Victoria
+3:PY:PRY:PARAGUAY:ALTO PARAGUAY:Mayor Pablo La Gerenza
+1:PY:PRY:PARAGUAY:CORDILLERA:1 de Marzo
+2:PY:PRY:PARAGUAY:CORDILLERA:Altos
+3:PY:PRY:PARAGUAY:CORDILLERA:Arroyos y Est.(Is.)
+4:PY:PRY:PARAGUAY:CORDILLERA:Arroyos y Esteros
+5:PY:PRY:PARAGUAY:CORDILLERA:Atyra
+6:PY:PRY:PARAGUAY:CORDILLERA:Caacupe
+7:PY:PRY:PARAGUAY:CORDILLERA:Caraguatay
+8:PY:PRY:PARAGUAY:CORDILLERA:Emboscada
+9:PY:PRY:PARAGUAY:CORDILLERA:Emboscada (Is.)
+10:PY:PRY:PARAGUAY:CORDILLERA:Eusebio Ayala
+11:PY:PRY:PARAGUAY:CORDILLERA:Isla Pucu
+12:PY:PRY:PARAGUAY:CORDILLERA:Itacurubi de la Cordiller
+13:PY:PRY:PARAGUAY:CORDILLERA:Juan de Mena
+14:PY:PRY:PARAGUAY:CORDILLERA:Loma Grande
+15:PY:PRY:PARAGUAY:CORDILLERA:Mbacayaty del Yhaguy
+16:PY:PRY:PARAGUAY:CORDILLERA:Nueva Colombia
+17:PY:PRY:PARAGUAY:CORDILLERA:Piribebuy
+18:PY:PRY:PARAGUAY:CORDILLERA:Rio Paraguay
+19:PY:PRY:PARAGUAY:CORDILLERA:San Bernardino
+20:PY:PRY:PARAGUAY:CORDILLERA:San Jose Obrero
+21:PY:PRY:PARAGUAY:CORDILLERA:Santa Elena
+22:PY:PRY:PARAGUAY:CORDILLERA:Tobati
+23:PY:PRY:PARAGUAY:CORDILLERA:Valenzuela
+1:PY:PRY:PARAGUAY:CANINDEYU:Corpus Christi
+2:PY:PRY:PARAGUAY:CANINDEYU:Curuguaty
+3:PY:PRY:PARAGUAY:CANINDEYU:F. Caballero Alvarez
+4:PY:PRY:PARAGUAY:CANINDEYU:Itanara
+5:PY:PRY:PARAGUAY:CANINDEYU:Salto del Guaira
+6:PY:PRY:PARAGUAY:CANINDEYU:Villa Igatimi
+7:PY:PRY:PARAGUAY:CANINDEYU:Ypejhu
+1:PY:PRY:PARAGUAY:MISIONES:Ayolas
+2:PY:PRY:PARAGUAY:MISIONES:Ayolas (Is.)
+3:PY:PRY:PARAGUAY:MISIONES:Isla Apipe
+4:PY:PRY:PARAGUAY:MISIONES:San Ignacio
+5:PY:PRY:PARAGUAY:MISIONES:San Juan Bautista
+6:PY:PRY:PARAGUAY:MISIONES:San Miguel
+7:PY:PRY:PARAGUAY:MISIONES:San Patricio
+8:PY:PRY:PARAGUAY:MISIONES:Santa Maria
+9:PY:PRY:PARAGUAY:MISIONES:Santa Rosa
+10:PY:PRY:PARAGUAY:MISIONES:Santiago
+11:PY:PRY:PARAGUAY:MISIONES:Villa Florida
+12:PY:PRY:PARAGUAY:MISIONES:Yabebyry
diff --git a/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d2e5d17
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:QA-DA:QA:AD DAWAH
+2:QA-GH:QA:AL GHUWAYRIYAH
+3:QA-JU:QA:AL JUMAYLIYAH
+4:QA-KH:QA:AL KHAWR
+5:QA-WA:QA:AL WAKRAH
+6:QA-RA:QA:AR RAYYAN
+7:QA-JB:QA:JARIYAN AL BANAH
+8:QA-MS:QA:MADNAT ASH SHAML
+9:QA-Q:QA:QATAR
+10:QA-US:QA:UMM ALL
diff --git a/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN2_LEX.txt
new file mode 100644
index 0000000..f8d5f98
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/QAT/QAT_ADMIN2_LEX.txt
@@ -0,0 +1,15 @@
+1:QA:QAT:QATAR:Qatar:QAT.L2.1
+2:QA:QAT:QATAR:Qatar:QAT.L2.10
+3:QA:QAT:QATAR:Qatar:QAT.L2.11
+4:QA:QAT:QATAR:Qatar:QAT.L2.12
+5:QA:QAT:QATAR:Qatar:QAT.L2.13
+6:QA:QAT:QATAR:Qatar:QAT.L2.14
+7:QA:QAT:QATAR:Qatar:QAT.L2.15
+8:QA:QAT:QATAR:Qatar:QAT.L2.2
+9:QA:QAT:QATAR:Qatar:QAT.L2.3
+10:QA:QAT:QATAR:Qatar:QAT.L2.4
+11:QA:QAT:QATAR:Qatar:QAT.L2.5
+12:QA:QAT:QATAR:Qatar:QAT.L2.6
+13:QA:QAT:QATAR:Qatar:QAT.L2.7
+14:QA:QAT:QATAR:Qatar:QAT.L2.8
+15:QA:QAT:QATAR:Qatar:QAT.L2.9
diff --git a/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN1_LEX.txt
new file mode 100644
index 0000000..26ed721
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN1_LEX.txt
@@ -0,0 +1,43 @@
+1:RO-AB:RO:ALBA
+2:RO-AR:RO:ARAD
+3:RO-AG:RO:ARGES
+4:RO-BC:RO:BACAU
+5:RO-BH:RO:BIHOR
+6:RO-BN:RO:BISTRITA NASAUD
+7:RO-BT:RO:BOTOSANI
+8:RO-BR:RO:BRAILA
+9:RO-BV:RO:BRASOV
+10:RO-B:RO:BUCURESTI
+11:RO-BZ:RO:BUZAU
+12:RO-CA:RO:CALARASI
+13:RO-CS:RO:CARAS SEVERIN
+14:RO-CL:RO:CLRAI
+15:RO-CJ:RO:CLUJ
+16:RO-CT:RO:CONSTANTA
+17:RO-CV:RO:COVASNA
+18:RO-DB:RO:DIMBOVITA
+19:RO-DJ:RO:DOLJ
+20:RO-GL:RO:GALATI
+21:RO-GR:RO:GIURGIU
+22:RO-GJ:RO:GORJ
+23:RO-HR:RO:HARGHITA
+24:RO-HD:RO:HUNEDOARA
+25:RO-IL:RO:IALOMITA
+26:RO-IS:RO:IASI
+27:RO-IF:RO:ILFOV
+28:RO-MM:RO:MARAMURES
+29:RO-MH:RO:MEHEDINTI
+30:RO-MS:RO:MURES
+31:RO-NT:RO:NEAMT
+32:RO-OT:RO:OLT
+33:RO-PH:RO:PRAHOVA
+34:RO-SJ:RO:SALAJ
+35:RO-SM:RO:SATU MARE
+36:RO-SB:RO:SIBIU
+37:RO-SV:RO:SUCEAVA
+38:RO-TR:RO:TELEORMAN
+39:RO-TM:RO:TIMIS
+40:RO-TL:RO:TULCEA
+41:RO-VS:RO:VASLUI
+42:RO-VL:RO:VILCEA
+43:RO-VN:RO:VRANCEA
diff --git a/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ROU/ROU_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e9e3b00
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN1_LEX.txt
@@ -0,0 +1,89 @@
+1:RU-AD:RU:ADYGEYA, RESPUBLIKA
+2:RU-AGB:RU:AGINSKIY BURYATSKIY AVTONOMNYY OKRUG
+3:RU-AL:RU:ALTAY, RESPUBLIKA
+4:RU-ALT:RU:ALTAYSKIY KRAY
+5:RU-AMU:RU:AMURSKAYA OBLAST
+6:RU-ARK:RU:ARKHANGELSKAYA OBLAST
+7:RU-AST:RU:ASTRAKHANSKAYA OBLAST
+8:RU-BA:RU:BASHKORTOSTAN, RESPUBLIKA
+9:RU-BEL:RU:BELGORODSKAYA OBLAST
+10:RU-BRY:RU:BRYANSKAYA OBLAST
+11:RU-BU:RU:BURYATIYA, RESPUBLIKA
+12:RU-CE:RU:CHECHENSKAYA RESPUBLIKA
+13:RU-CHE:RU:CHELYABINSKAYA OBLAST
+14:RU-CHI:RU:CHITINSKAYA OBLAST
+15:RU-CHU:RU:CHUKOTSKIY AVTONOMNYY OKRUG
+16:RU-CU:RU:CHUVASHSKAYA RESPUBLIKA
+17:RU-DA:RU:DAGESTAN, RESPUBLIKA
+18:RU-EVE:RU:EVENKIYSKIY AVTONOMNYY OKRUG
+19:RU-IN:RU:INGUSHSKAYA RESPUBLIKA [RESPUBLIKA INGUSHETIYA]
+20:RU-IRK:RU:IRKUTSKAYA OBLAST
+21:RU-IVA:RU:IVANOVSKAYA OBLAST
+22:RU-KB:RU:KABARDINO BALKARSKAYA RESPUBLIKA
+23:RU-KGD:RU:KALININGRAD OBL.
+24:RU-KL:RU:KALMYKIYA, RESPUBLIKA
+25:RU-KLU:RU:KALUZHSKAYA OBLAST
+26:RU-KAM:RU:KAMCHATSKAYA OBLAST
+27:RU-KC:RU:KARACHAYEVO CHERKESSKAYA RESPUBLIKA
+28:RU-KR:RU:KARELIYA, RESPUBLIKA
+29:RU-KEM:RU:KEMEROVSKAYA OBLAST
+30:RU-KHA:RU:KHABAROVSKIY KRAY
+31:RU-KK:RU:KHAKASIYA, RESPUBLIKA
+32:RU-KHM:RU:KHANTY MANSIYSKIY AVTONOMNYY OKRUG [YUGRA]
+33:RU-KIR:RU:KIROVSKAYA OBLAST
+34:RU-KOP:RU:KOMI PERMYATSKIY AVTONOMNYY OKRUG
+35:RU-KO:RU:KOMI, RESPUBLIKA
+36:RU-KOR:RU:KORYAKSKIY AVTONOMNYY OKRUG
+37:RU-KOS:RU:KOSTROMSKAYA OBLAST
+38:RU-KDA:RU:KRASNODARSKIY KRAY
+39:RU-KYA:RU:KRASNOYARSKIY KRAY
+40:RU-KGN:RU:KURGANSKAYA OBLAST
+41:RU-KRS:RU:KURSKAYA OBLAST
+42:RU-LEN:RU:LENINGRADSKAYA OBLAST
+43:RU-LIP:RU:LIPETSKAYA OBLAST
+44:RU-MAG:RU:MAGADANSKAYA OBLAST
+45:RU-ME:RU:MARIY EL, RESPUBLIKA
+46:RU-MO:RU:MORDOVIYA, RESPUBLIKA
+47:RU-MOS:RU:MOSKOVSKAYA OBLAST
+48:RU-MOW:RU:MOSKVA
+49:RU-MUR:RU:MURMANSKAYA OBLAST
+50:RU-NEN:RU:NENETSKIY AVTONOMNYY OKRUG
+51:RU-NIZ:RU:NIZHEGORODSKAYA OBLAST
+52:RU-NGR:RU:NOVGORODSKAYA OBLAST
+53:RU-NVS:RU:NOVOSIBIRSKAYA OBLAST
+54:RU-OMS:RU:OMSKAYA OBLAST
+55:RU-ORE:RU:ORENBURGSKAYA OBLAST
+56:RU-ORL:RU:ORLOVSKAYA OBLAST
+57:RU-PNZ:RU:PENZENSKAYA OBLAST
+58:RU-PER:RU:PERMSKAYA OBLAST
+59:RU-PRI:RU:PRIMORSKIY KRAY
+60:RU-PSK:RU:PSKOVSKAYA OBLAST
+61:RU-ROS:RU:ROSTOVSKAYA OBLAST
+62:RU-RYA:RU:RYAZANSKAYA OBLAST
+63:RU-SA:RU:SAKHA, RESPUBLIKA [YAKUTIYA]
+64:RU-SAK:RU:SAKHALINSKAYA OBLAST
+65:RU-SAM:RU:SAMARSKAYA OBLAST
+66:RU-SPE:RU:SANKT PETERBURG
+67:RU-SAR:RU:SARATOVSKAYA OBLAST
+68:RU-SE:RU:SEVERNAYA OSETIYA, RESPUBLIKA [ALANIYA] [RESPUBLIKA SEVERNAYA OSETIYA ALANIYA]
+69:RU-SMO:RU:SMOLENSKAYA OBLAST
+70:RU-STA:RU:STAVROPOLSKIY KRAY
+71:RU-SVE:RU:SVERDLOVSKAYA OBLAST
+72:RU-TAM:RU:TAMBOVSKAYA OBLAST
+73:RU-TA:RU:TATARSTAN, RESPUBLIKA
+74:RU-TAY:RU:TAYMYRSKIY (DOLGANO NENETSKIY) AVTONOMNYY OKRUG
+75:RU-TOM:RU:TOMSKAYA OBLAST
+76:RU-TUL:RU:TULSKAYA OBLAST
+77:RU-TVE:RU:TVERSKAYA OBLAST
+78:RU-TYU:RU:TYUMENSKAYA OBLAST
+79:RU-TY:RU:TYVA, RESPUBLIKA [TUVA]
+80:RU-UD:RU:UDMURTSKAYA RESPUBLIKA
+81:RU-ULY:RU:ULYANOVSKAYA OBLAST
+82:RU-UOB:RU:UST ORDYNSKIY BURYATSKIY AVTONOMNYY OKRUG
+83:RU-VLA:RU:VLADIMIRSKAYA OBLAST
+84:RU-VGG:RU:VOLGOGRADSKAYA OBLAST
+85:RU-VLG:RU:VOLOGODSKAYA OBLAST
+86:RU-VOR:RU:VORONEZHSKAYA OBLAST
+87:RU-YAN:RU:YAMALO NENETSKIY AVTONOMNYY OKRUG
+88:RU-YAR:RU:YAROSLAVSKAYA OBLAST
+89:RU-YEV:RU:YEVREYSKAYA AVTONOMNAYA OBLAST
diff --git a/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/RUS/RUS_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..4fa5f20
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN1_LEX.txt
@@ -0,0 +1,12 @@
+1:RW-C:RW:BUTARE
+2:RW-I:RW:BYUMBA
+3:RW-E:RW:CYANGUGU
+4:RW-D:RW:GIKONGORO
+5:RW-G:RW:GISENYI
+6:RW-B:RW:GITARAMA
+7:RW-J:RW:KIBUNGU
+8:RW-F:RW:KIBUYE
+9:RW-K:RW:KIGALI
+10:RW-L:RW:KIGALI VILLE
+11:RW-M:RW:MUTARA
+12:RW-H:RW:RUHENGERI
diff --git a/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..3c9d86f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/RWA/RWA_ADMIN2_LEX.txt
@@ -0,0 +1,142 @@
+1:RW:RWA:RWANDA:Gitarama:Bulinga
+2:RW:RWA:RWANDA:Gitarama:Kayenzi
+3:RW:RWA:RWANDA:Gitarama:Kigoma
+4:RW:RWA:RWANDA:Gitarama:Masango
+5:RW:RWA:RWANDA:Gitarama:Muambira
+6:RW:RWA:RWANDA:Gitarama:Mugina
+7:RW:RWA:RWANDA:Gitarama:Mukingi
+8:RW:RWA:RWANDA:Gitarama:Murama
+9:RW:RWA:RWANDA:Gitarama:Mushubati
+10:RW:RWA:RWANDA:Gitarama:Ntongwe
+11:RW:RWA:RWANDA:Gitarama:Nyabikenke
+12:RW:RWA:RWANDA:Gitarama:Nyakabanda
+13:RW:RWA:RWANDA:Gitarama:Nyamabuye
+14:RW:RWA:RWANDA:Gitarama:Runda
+15:RW:RWA:RWANDA:Gitarama:Rutobwe
+16:RW:RWA:RWANDA:Gitarama:Taba
+17:RW:RWA:RWANDA:Gitarama:Tambwe
+1:RW:RWA:RWANDA:Butare:Gishamvu
+2:RW:RWA:RWANDA:Butare:Huye
+3:RW:RWA:RWANDA:Butare:Kibayi
+4:RW:RWA:RWANDA:Butare:Kigembe
+5:RW:RWA:RWANDA:Butare:Maraba
+6:RW:RWA:RWANDA:Butare:Mbazi
+7:RW:RWA:RWANDA:Butare:Muganzi
+8:RW:RWA:RWANDA:Butare:Mugusa
+9:RW:RWA:RWANDA:Butare:Muyaga
+10:RW:RWA:RWANDA:Butare:Muyira
+11:RW:RWA:RWANDA:Butare:Ndora
+12:RW:RWA:RWANDA:Butare:Ngoma
+13:RW:RWA:RWANDA:Butare:Ntyazo
+14:RW:RWA:RWANDA:Butare:Nyabisindu
+15:RW:RWA:RWANDA:Butare:Nyakizu
+16:RW:RWA:RWANDA:Butare:Nyaruhengeri
+17:RW:RWA:RWANDA:Butare:Ruhashya
+18:RW:RWA:RWANDA:Butare:Runyinya
+19:RW:RWA:RWANDA:Butare:Rusatira
+20:RW:RWA:RWANDA:Butare:Shyanda
+1:RW:RWA:RWANDA:Gikongoro:Karama
+2:RW:RWA:RWANDA:Gikongoro:Karambo
+3:RW:RWA:RWANDA:Gikongoro:Kinyamakara
+4:RW:RWA:RWANDA:Gikongoro:Kivu
+5:RW:RWA:RWANDA:Gikongoro:Mubuga
+6:RW:RWA:RWANDA:Gikongoro:Mudasomwa
+7:RW:RWA:RWANDA:Gikongoro:Muko
+8:RW:RWA:RWANDA:Gikongoro:Musange
+9:RW:RWA:RWANDA:Gikongoro:Musebeya
+10:RW:RWA:RWANDA:Gikongoro:Nshiri
+11:RW:RWA:RWANDA:Gikongoro:Nyamagabe
+12:RW:RWA:RWANDA:Gikongoro:Rukondo
+13:RW:RWA:RWANDA:Gikongoro:Rwanmiko
+1:RW:RWA:RWANDA:Kibuye:Bwakira
+2:RW:RWA:RWANDA:Kibuye:Gishyita
+3:RW:RWA:RWANDA:Kibuye:Gisovu
+4:RW:RWA:RWANDA:Kibuye:Gitsi
+5:RW:RWA:RWANDA:Kibuye:Kivumu
+6:RW:RWA:RWANDA:Kibuye:Mabanza
+7:RW:RWA:RWANDA:Kibuye:Mwendo
+8:RW:RWA:RWANDA:Kibuye:Rutsiro
+9:RW:RWA:RWANDA:Kibuye:Rwamatamu
+1:RW:RWA:RWANDA:Gisenyi:Gaseke
+2:RW:RWA:RWANDA:Gisenyi:Giciye
+3:RW:RWA:RWANDA:Gisenyi:Kanama
+4:RW:RWA:RWANDA:Gisenyi:Karago
+5:RW:RWA:RWANDA:Gisenyi:Kayove
+6:RW:RWA:RWANDA:Gisenyi:Kibirira
+7:RW:RWA:RWANDA:Gisenyi:Mutura
+8:RW:RWA:RWANDA:Gisenyi:Nyamyumba
+9:RW:RWA:RWANDA:Gisenyi:Ramba
+10:RW:RWA:RWANDA:Gisenyi:Rubavu
+11:RW:RWA:RWANDA:Gisenyi:Rwerere
+12:RW:RWA:RWANDA:Gisenyi:Satinsyi
+1:RW:RWA:RWANDA:Kibungu:Birenga
+2:RW:RWA:RWANDA:Kibungu:Kabarondo
+3:RW:RWA:RWANDA:Kibungu:Kayonza
+4:RW:RWA:RWANDA:Kibungu:Kigarama
+5:RW:RWA:RWANDA:Kibungu:Mugesera
+6:RW:RWA:RWANDA:Kibungu:Muhazi
+7:RW:RWA:RWANDA:Kibungu:Rukara
+8:RW:RWA:RWANDA:Kibungu:Rukira
+9:RW:RWA:RWANDA:Kibungu:Rusumo
+10:RW:RWA:RWANDA:Kibungu:Rutonde
+11:RW:RWA:RWANDA:Kibungu:Sake
+1:RW:RWA:RWANDA:Kigali:Bicumbi
+2:RW:RWA:RWANDA:Kigali:Butamwa
+3:RW:RWA:RWANDA:Kigali:Gashora
+4:RW:RWA:RWANDA:Kigali:Gikomero
+5:RW:RWA:RWANDA:Kigali:Gikoro
+6:RW:RWA:RWANDA:Kigali:Kanombe
+7:RW:RWA:RWANDA:Kigali:Kanzenze
+8:RW:RWA:RWANDA:Kigali:Mbogo
+9:RW:RWA:RWANDA:Kigali:Mugambazi
+10:RW:RWA:RWANDA:Kigali:Musasa
+11:RW:RWA:RWANDA:Kigali:Ngenda
+12:RW:RWA:RWANDA:Kigali:Nyarugenge
+13:RW:RWA:RWANDA:Kigali:Rubungo
+14:RW:RWA:RWANDA:Kigali:Rushashi
+15:RW:RWA:RWANDA:Kigali:Rutongo
+16:RW:RWA:RWANDA:Kigali:Shyorongi
+17:RW:RWA:RWANDA:Kigali:Tare
+1:RW:RWA:RWANDA:Ruhengeri:Butaro
+2:RW:RWA:RWANDA:Ruhengeri:Cyabingo
+3:RW:RWA:RWANDA:Ruhengeri:Cyeru
+4:RW:RWA:RWANDA:Ruhengeri:Gatonde
+5:RW:RWA:RWANDA:Ruhengeri:Kidaho
+6:RW:RWA:RWANDA:Ruhengeri:Kigombe
+7:RW:RWA:RWANDA:Ruhengeri:Kinigi
+8:RW:RWA:RWANDA:Ruhengeri:Mukingo
+9:RW:RWA:RWANDA:Ruhengeri:Ndusu
+10:RW:RWA:RWANDA:Ruhengeri:Nkuli
+11:RW:RWA:RWANDA:Ruhengeri:Nkumba
+12:RW:RWA:RWANDA:Ruhengeri:Nyakinama
+13:RW:RWA:RWANDA:Ruhengeri:Nyamugali
+14:RW:RWA:RWANDA:Ruhengeri:Nyamutera
+15:RW:RWA:RWANDA:Ruhengeri:Nyarutovu
+16:RW:RWA:RWANDA:Ruhengeri:Ruhondo
+1:RW:RWA:RWANDA:Byumba:Buyoga
+2:RW:RWA:RWANDA:Byumba:Bwisige
+3:RW:RWA:RWANDA:Byumba:Cyumba
+4:RW:RWA:RWANDA:Byumba:Cyungo
+5:RW:RWA:RWANDA:Byumba:Giti
+6:RW:RWA:RWANDA:Byumba:Gituza
+7:RW:RWA:RWANDA:Byumba:Kibali
+8:RW:RWA:RWANDA:Byumba:Kinyami
+9:RW:RWA:RWANDA:Byumba:Kivuye
+10:RW:RWA:RWANDA:Byumba:Kiyombe
+11:RW:RWA:RWANDA:Byumba:Muhura
+12:RW:RWA:RWANDA:Byumba:Mukarange
+13:RW:RWA:RWANDA:Byumba:Murambi
+14:RW:RWA:RWANDA:Byumba:Muvumba
+15:RW:RWA:RWANDA:Byumba:Ngarama
+16:RW:RWA:RWANDA:Byumba:Rutare
+17:RW:RWA:RWANDA:Byumba:Tumba
+1:RW:RWA:RWANDA:Cyangugu:Bugarama
+2:RW:RWA:RWANDA:Cyangugu:Cyimbogo
+3:RW:RWA:RWANDA:Cyangugu:Gafunzo
+4:RW:RWA:RWANDA:Cyangugu:Gatare
+5:RW:RWA:RWANDA:Cyangugu:Gishoma
+6:RW:RWA:RWANDA:Cyangugu:Gisuma
+7:RW:RWA:RWANDA:Cyangugu:Kamembe
+8:RW:RWA:RWANDA:Cyangugu:Karengera
+9:RW:RWA:RWANDA:Cyangugu:Kirambo
+10:RW:RWA:RWANDA:Cyangugu:Nyakabuye
diff --git a/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN1_LEX.txt
new file mode 100644
index 0000000..36df7f0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN1_LEX.txt
@@ -0,0 +1,15 @@
+1:SA-4:SA:ASIR
+2:SA-10:SA:BAHA
+3:SA-04:SA:EASTERN PROVINCE
+4:SA-06:SA:HAIL
+5:SA-NEU:SA:IRQ/SAU NEUTRAL ZONE
+6:SA-2:SA:JAWF
+7:SA-09:SA:JIZAN
+8:SA-03:SA:MADINAH
+9:SA-02:SA:MAKKAH
+10:SA-12:SA:NAJRAN
+11:SA-08:SA:NORTHERN FRONTIER
+12:SA-05:SA:QUASSIM
+13:SA-QAY:SA:QURAY YAT
+14:SA-0:SA:RIYAD
+15:SA-07:SA:TABUK
diff --git a/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN2_LEX.txt
new file mode 100644
index 0000000..de62a47
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SAU/SAU_ADMIN2_LEX.txt
@@ -0,0 +1,15 @@
+1:SA:SAU:SAUDI ARABIA:Jizan:SAU.L2.4
+1:SA:SAU:SAUDI ARABIA:Quray Yat:SAU.L2.9
+1:SA:SAU:SAUDI ARABIA:Makkah:SAU.L2.15
+1:SA:SAU:SAUDI ARABIA:Asir:SAU.L2.2
+1:SA:SAU:SAUDI ARABIA:Riyad:SAU.L2.5
+1:SA:SAU:SAUDI ARABIA:Hail:SAU.L2.14
+1:SA:SAU:SAUDI ARABIA:IRQ/SAU Neutral Zone:SAU.L2.3
+1:SA:SAU:SAUDI ARABIA:Eastern Province:SAU.L2.6
+1:SA:SAU:SAUDI ARABIA:Najran:SAU.L2.12
+1:SA:SAU:SAUDI ARABIA:Tabuk:SAU.L2.11
+1:SA:SAU:SAUDI ARABIA:Jawf:SAU.L2.10
+1:SA:SAU:SAUDI ARABIA:Madinah:SAU.L2.8
+1:SA:SAU:SAUDI ARABIA:Quassim:SAU.L2.1
+1:SA:SAU:SAUDI ARABIA:Northern Frontier:SAU.L2.7
+1:SA:SAU:SAUDI ARABIA:Baha:SAU.L2.13
diff --git a/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2850304
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN1_LEX.txt
@@ -0,0 +1,33 @@
+1:SD-26:SD:AL BAR AL AMAR
+2:SD-8:SD:AL BUAYRT
+3:SD-07:SD:AL JAZRAH
+4:SD-03:SD:AL KHARM
+5:SD-06:SD:AL QARIF
+6:SD-22:SD:AL WADAH
+7:SD-04:SD:AN NL
+8:SD-08:SD:AN NL AL ABYA
+9:SD-24:SD:AN NL AL AZRAQ
+10:SD-0:SD:ASH SHAMLYAH
+11:SD-BEG:SD:BAHR EL GHAZAL
+12:SD-7:SD:BAR AL JABAL
+13:SD-C:SD:CENTRAL
+14:SD-DAF:SD:DARFUR
+15:SD-E:SD:EASTERN [EASTERN1]
+16:SD-EQ:SD:EQUATORIA
+17:SD-6:SD:GHARB AL ISTIWYAH
+18:SD-4:SD:GHARB BAR AL GHAZL
+19:SD-2:SD:GHARB DRFR
+20:SD-10:SD:JANB DRFR
+21:SD-3:SD:JANB KURDUFN
+22:SD-20:SD:JNQAL
+23:SD-05:SD:KASSAL
+24:SD-KHA:SD:KHARTOUM
+25:SD-KOR:SD:KORDUFAN
+26:SD-23:SD:L AN NL
+27:SD-N:SD:NORTHERN [NORTHERN3]
+28:SD-5:SD:SHAML BAR AL GHAZL
+29:SD-02:SD:SHAML DRFR
+30:SD-09:SD:SHAML KURDUFN
+31:SD-9:SD:SHARQ AL ISTIWYAH
+32:SD-25:SD:SINNR
+33:SD-UPN:SD:UPPER NILE
diff --git a/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..2695e13
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SDN/SDN_ADMIN2_LEX.txt
@@ -0,0 +1,18 @@
+1:SD:SDN:SUDAN:Darfur:Northern Darfur
+2:SD:SDN:SUDAN:Darfur:Southern Darfur
+1:SD:SDN:SUDAN:Bahr el Ghazal:Bahr el Ghazal
+2:SD:SDN:SUDAN:Bahr el Ghazal:El Buheyrat
+1:SD:SDN:SUDAN:Upper Nile:Junglei
+2:SD:SDN:SUDAN:Upper Nile:Upper Nile (Sobat)
+1:SD:SDN:SUDAN:Kordufan:North. Kordofan
+2:SD:SDN:SUDAN:Kordufan:South. Kordofan
+1:SD:SDN:SUDAN:Central:Blue Nile
+2:SD:SDN:SUDAN:Central:El Gazira
+3:SD:SDN:SUDAN:Central:White Nile
+1:SD:SDN:SUDAN:Khartoum:Khartoum
+1:SD:SDN:SUDAN:Northern:Nile
+2:SD:SDN:SUDAN:Northern:Northern
+1:SD:SDN:SUDAN:Eastern:Kassala
+2:SD:SDN:SUDAN:Eastern:Red Sea
+1:SD:SDN:SUDAN:Equatoria:East. Equatoria
+2:SD:SDN:SUDAN:Equatoria:West. Equatoria
diff --git a/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..d1d2585
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN1_LEX.txt
@@ -0,0 +1,31 @@
+1:SN-BAK:SN:BAKEL
+2:SN-BBY:SN:BAMBEY
+3:SN-BGO:SN:BIGNONA
+4:SN-DAG:SN:DAGANA
+5:SN-DK:SN:DAKAR
+6:SN-DB:SN:DIOURBEL
+7:SN-FK:SN:FATICK
+8:SN-FDI:SN:FOUNDIOUGNE
+9:SN-GS:SN:GOSSAS
+10:SN-KAF:SN:KAFFRINE
+11:SN-KL:SN:KAOLACK
+12:SN-KEM:SN:KEBEMER
+13:SN-KEU:SN:KEDOUGOU
+14:SN-KD:SN:KOLDA
+15:SN-LGE:SN:LINGUERE
+16:SN-LG:SN:LOUGA
+17:SN-MT:SN:MATAM
+18:SN-MBK:SN:MBACKE
+19:SN-MBU:SN:MBOUR
+20:SN-NDR:SN:NIORO DU RIP
+21:SN-OUY:SN:OUSSOUYE
+22:SN-PKE:SN:PIKINE
+23:SN-PDR:SN:PODOR
+24:SN-RUQ:SN:RUFISQUE BARGNY
+25:SN-SL:SN:SAINT LOUIS
+26:SN-SDH:SN:SEDHIOU
+27:SN-TC:SN:TAMBACOUNDA
+28:SN-TH:SN:THIES
+29:SN-TVO:SN:TIVAOUANE
+30:SN-VGR:SN:VELINGARA
+31:SN-ZG:SN:ZIGUINCHOR
diff --git a/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5fa14c0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SEN/SEN_ADMIN2_LEX.txt
@@ -0,0 +1,93 @@
+1:SN:SEN:SENEGAL:Bakel:Bala
+2:SN:SEN:SENEGAL:Bakel:Diawara
+3:SN:SEN:SENEGAL:Bakel:Goudiri
+4:SN:SEN:SENEGAL:Bakel:Kidira
+1:SN:SEN:SENEGAL:Mbour:Fissel
+2:SN:SEN:SENEGAL:Mbour:Nguekokh
+3:SN:SEN:SENEGAL:Mbour:Thiadiaye
+1:SN:SEN:SENEGAL:Tambacounda:Koumpentoum
+2:SN:SEN:SENEGAL:Tambacounda:Koussanar
+3:SN:SEN:SENEGAL:Tambacounda:Makacolibantang
+4:SN:SEN:SENEGAL:Tambacounda:Missirah
+1:SN:SEN:SENEGAL:Pikine:Pikine
+1:SN:SEN:SENEGAL:Matam:Kanel
+2:SN:SEN:SENEGAL:Matam:Ourossogui
+3:SN:SEN:SENEGAL:Matam:Semme
+4:SN:SEN:SENEGAL:Matam:Thilogne
+1:SN:SEN:SENEGAL:Nioro-Du-Rip:Medina Sabakh
+2:SN:SEN:SENEGAL:Nioro-Du-Rip:Paoskoto
+3:SN:SEN:SENEGAL:Nioro-Du-Rip:Wack Ngouna
+1:SN:SEN:SENEGAL:Thies:Notto
+2:SN:SEN:SENEGAL:Thies:Pout
+3:SN:SEN:SENEGAL:Thies:Thienaba
+1:SN:SEN:SENEGAL:Foundiougne:Djilor
+2:SN:SEN:SENEGAL:Foundiougne:Niodior
+3:SN:SEN:SENEGAL:Foundiougne:Toubacouta
+1:SN:SEN:SENEGAL:Rufisque-Bargny:Sebikotane
+1:SN:SEN:SENEGAL:Fatick:Diakhao
+2:SN:SEN:SENEGAL:Fatick:Fimela
+3:SN:SEN:SENEGAL:Fatick:Niakhar
+4:SN:SEN:SENEGAL:Fatick:Tattaguine
+1:SN:SEN:SENEGAL:Sedhiou:Bounkiling
+2:SN:SEN:SENEGAL:Sedhiou:Diattacounda
+3:SN:SEN:SENEGAL:Sedhiou:Diende
+4:SN:SEN:SENEGAL:Sedhiou:Marsassoum
+5:SN:SEN:SENEGAL:Sedhiou:Tanaff
+1:SN:SEN:SENEGAL:Diourbel:Ndindy
+2:SN:SEN:SENEGAL:Diourbel:Ndoulo
+1:SN:SEN:SENEGAL:Kolda:Dabo
+2:SN:SEN:SENEGAL:Kolda:Dioulacolon
+3:SN:SEN:SENEGAL:Kolda:Medina Yoro Foulah
+1:SN:SEN:SENEGAL:Dakar:Dakar
+1:SN:SEN:SENEGAL:Louga:Keur Momar Sarr
+2:SN:SEN:SENEGAL:Louga:Koki
+3:SN:SEN:SENEGAL:Louga:Mbediene
+4:SN:SEN:SENEGAL:Louga:Sakal
+1:SN:SEN:SENEGAL:Kedougou:Bandafassi
+2:SN:SEN:SENEGAL:Kedougou:Fongolimbi
+3:SN:SEN:SENEGAL:Kedougou:Salemata
+4:SN:SEN:SENEGAL:Kedougou:Saraya
+1:SN:SEN:SENEGAL:Kaffrine:Birkelane
+2:SN:SEN:SENEGAL:Kaffrine:Koungheul
+3:SN:SEN:SENEGAL:Kaffrine:Maleme Hodar
+4:SN:SEN:SENEGAL:Kaffrine:Nganda
+1:SN:SEN:SENEGAL:Kaolack:Gandiaye
+2:SN:SEN:SENEGAL:Kaolack:Ndiedieng
+3:SN:SEN:SENEGAL:Kaolack:Ndoffane
+1:SN:SEN:SENEGAL:Linguere:Barkedji
+2:SN:SEN:SENEGAL:Linguere:Dahra
+3:SN:SEN:SENEGAL:Linguere:Dodji
+4:SN:SEN:SENEGAL:Linguere:Yang-Yang
+1:SN:SEN:SENEGAL:Velingara:Bonconto
+2:SN:SEN:SENEGAL:Velingara:Kounkane
+3:SN:SEN:SENEGAL:Velingara:Pakour
+1:SN:SEN:SENEGAL:Kebemer:Darou Mousti
+2:SN:SEN:SENEGAL:Kebemer:Ndande
+3:SN:SEN:SENEGAL:Kebemer:Sagata
+1:SN:SEN:SENEGAL:Tivaouane:Meouane
+2:SN:SEN:SENEGAL:Tivaouane:Merina Dakhar
+3:SN:SEN:SENEGAL:Tivaouane:Niakhene
+4:SN:SEN:SENEGAL:Tivaouane:Pambal
+1:SN:SEN:SENEGAL:Gossas:Colobane
+2:SN:SEN:SENEGAL:Gossas:Kahone
+3:SN:SEN:SENEGAL:Gossas:Ouadiour
+1:SN:SEN:SENEGAL:Ziguinchor:Niaguis
+2:SN:SEN:SENEGAL:Ziguinchor:Niassia
+1:SN:SEN:SENEGAL:Bignona:Diouloulou
+2:SN:SEN:SENEGAL:Bignona:Sindian
+3:SN:SEN:SENEGAL:Bignona:Tendouck
+4:SN:SEN:SENEGAL:Bignona:Tenghori
+1:SN:SEN:SENEGAL:Bambey:Baba Garage
+2:SN:SEN:SENEGAL:Bambey:Lambaye
+3:SN:SEN:SENEGAL:Bambey:Ngoye
+1:SN:SEN:SENEGAL:Oussouye:Cabrousse
+2:SN:SEN:SENEGAL:Oussouye:Loudia Ouolof
+1:SN:SEN:SENEGAL:Dagana:Mbane
+2:SN:SEN:SENEGAL:Dagana:Rao
+3:SN:SEN:SENEGAL:Dagana:Ross-Bethio
+1:SN:SEN:SENEGAL:Mbacke:Kael
+2:SN:SEN:SENEGAL:Mbacke:Ndame
+1:SN:SEN:SENEGAL:Podor:Cas-Cas
+2:SN:SEN:SENEGAL:Podor:Ndioum
+3:SN:SEN:SENEGAL:Podor:Salde
+4:SN:SEN:SENEGAL:Podor:Thille Boubacar
diff --git a/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN1_LEX.txt
new file mode 100644
index 0000000..12016e4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:SG-S:SG:SINGAPORE
diff --git a/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN2_LEX.txt
new file mode 100644
index 0000000..94df75c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SGP/SGP_ADMIN2_LEX.txt
@@ -0,0 +1,13 @@
+1:SG:SGP:SINGAPORE:Singapore:SGP.L2.1
+2:SG:SGP:SINGAPORE:Singapore:SGP.L2.10
+3:SG:SGP:SINGAPORE:Singapore:SGP.L2.11
+4:SG:SGP:SINGAPORE:Singapore:SGP.L2.12
+5:SG:SGP:SINGAPORE:Singapore:SGP.L2.13
+6:SG:SGP:SINGAPORE:Singapore:SGP.L2.2
+7:SG:SGP:SINGAPORE:Singapore:SGP.L2.3
+8:SG:SGP:SINGAPORE:Singapore:SGP.L2.4
+9:SG:SGP:SINGAPORE:Singapore:SGP.L2.5
+10:SG:SGP:SINGAPORE:Singapore:SGP.L2.6
+11:SG:SGP:SINGAPORE:Singapore:SGP.L2.7
+12:SG:SGP:SINGAPORE:Singapore:SGP.L2.8
+13:SG:SGP:SINGAPORE:Singapore:SGP.L2.9
diff --git a/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..f2b7a0c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN1_LEX.txt
@@ -0,0 +1,4 @@
+1:SL-E:SL:EASTERN [EASTERN2]
+2:SL-N:SL:NORTHERN [NORTHERN2]
+3:SL-S:SL:SOUTHERN
+4:SL-W:SL:WESTERN AREA (FREETOWN) [WESTERN3] [WESTERN]
diff --git a/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..37719cb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SLE/SLE_ADMIN2_LEX.txt
@@ -0,0 +1,14 @@
+1:SL:SLE:SIERRA LEONE:Southern:Bo
+2:SL:SLE:SIERRA LEONE:Southern:Bonthe
+3:SL:SLE:SIERRA LEONE:Southern:Moyamba
+4:SL:SLE:SIERRA LEONE:Southern:Pujehun
+1:SL:SLE:SIERRA LEONE:Eastern2:Kailahun
+2:SL:SLE:SIERRA LEONE:Eastern2:Kenema
+3:SL:SLE:SIERRA LEONE:Eastern2:Kono
+1:SL:SLE:SIERRA LEONE:Northern2:Bombali
+2:SL:SLE:SIERRA LEONE:Northern2:Kambia
+3:SL:SLE:SIERRA LEONE:Northern2:Koinadugu
+4:SL:SLE:SIERRA LEONE:Northern2:Port Loko
+5:SL:SLE:SIERRA LEONE:Northern2:Tonkolili
+1:SL:SLE:SIERRA LEONE:Western3:Freetown
+2:SL:SLE:SIERRA LEONE:Western3:Western Rural
diff --git a/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2de5fe7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN1_LEX.txt
@@ -0,0 +1 @@
+1:SM-M:SM:SAN MARINO
diff --git a/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SMR/SMR_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..9d7ef1a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN1_LEX.txt
@@ -0,0 +1,18 @@
+1:SO-AW:SO:AWDAL
+2:SO-BK:SO:BAKOOL
+3:SO-BN:SO:BANAADIR
+4:SO-BR:SO:BARI
+5:SO-BY:SO:BAY
+6:SO-GE:SO:GADO
+7:SO-GA:SO:GALGUDUUD
+8:SO-HI:SO:HIIRAN
+9:SO-JD:SO:J. DHEXE
+10:SO-JH:SO:J. HOOSE
+11:SO-MU:SO:MUDUG
+12:SO-NU:SO:NUGAAL
+13:SO-SA:SO:SANAAG
+14:SO-SD:SO:SH. DHEXE
+15:SO-SH:SO:SH. HOOSE
+16:SO-SO:SO:SOOL
+17:SO-TO:SO:TOG DHEER
+18:SO-WO:SO:W. GALBEED
diff --git a/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..d294e57
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SOM/SOM_ADMIN2_LEX.txt
@@ -0,0 +1,74 @@
+1:SO:SOM:SOMALIA:Bay:Baydhabo
+2:SO:SOM:SOMALIA:Bay:Buur Xakaba (Bur Hacaba)
+3:SO:SOM:SOMALIA:Bay:Diinsoor
+4:SO:SOM:SOMALIA:Bay:Qansax Dheere
+1:SO:SOM:SOMALIA:Gado:Baar-Dheere
+2:SO:SOM:SOMALIA:Gado:Beled Xaawo (Bula-hawa)
+3:SO:SOM:SOMALIA:Gado:Ceel Waaq (El Wak)
+4:SO:SOM:SOMALIA:Gado:Dolow
+5:SO:SOM:SOMALIA:Gado:Garbahaaray
+6:SO:SOM:SOMALIA:Gado:Luuk
+1:SO:SOM:SOMALIA:Sh. Hoose:Afgooye (Afgoi)
+2:SO:SOM:SOMALIA:Sh. Hoose:Baraawe
+3:SO:SOM:SOMALIA:Sh. Hoose:Kuntuwaaray
+4:SO:SOM:SOMALIA:Sh. Hoose:Marka
+5:SO:SOM:SOMALIA:Sh. Hoose:Qoryooley
+6:SO:SOM:SOMALIA:Sh. Hoose:Sablale
+7:SO:SOM:SOMALIA:Sh. Hoose:Wanla Weyn
+1:SO:SOM:SOMALIA:Galguduud:Caabudwaaq
+2:SO:SOM:SOMALIA:Galguduud:Cadaado
+3:SO:SOM:SOMALIA:Galguduud:Ceel Buur (El Bur)
+4:SO:SOM:SOMALIA:Galguduud:Ceel Dheer (El Dere)
+5:SO:SOM:SOMALIA:Galguduud:Dhuusamareeb
+1:SO:SOM:SOMALIA:Bari:Bander-Beyla (Benderbela
+2:SO:SOM:SOMALIA:Bari:Bosaaso
+3:SO:SOM:SOMALIA:Bari:Calawla (Alula)
+4:SO:SOM:SOMALIA:Bari:Iskushuban
+5:SO:SOM:SOMALIA:Bari:Qandala
+6:SO:SOM:SOMALIA:Bari:Qardho
+1:SO:SOM:SOMALIA:Nugaal:Burtinle
+2:SO:SOM:SOMALIA:Nugaal:Eyl
+3:SO:SOM:SOMALIA:Nugaal:Garoowe
+4:SO:SOM:SOMALIA:Nugaal:Lascaanod (Lasanod)
+5:SO:SOM:SOMALIA:Nugaal:Taleex
+6:SO:SOM:SOMALIA:Nugaal:Xudun
+1:SO:SOM:SOMALIA:Sh. Dhexe:Aadan
+2:SO:SOM:SOMALIA:Sh. Dhexe:Balcad
+3:SO:SOM:SOMALIA:Sh. Dhexe:Cadale
+4:SO:SOM:SOMALIA:Sh. Dhexe:Jawhar
+1:SO:SOM:SOMALIA:Bakool:Ceel Barde (El Barde)
+2:SO:SOM:SOMALIA:Bakool:Rab Dhuure
+3:SO:SOM:SOMALIA:Bakool:Tiyeeglow
+4:SO:SOM:SOMALIA:Bakool:Wajid
+5:SO:SOM:SOMALIA:Bakool:Xudur (Hudur)
+1:SO:SOM:SOMALIA:Hiiran:Beled Weyn
+2:SO:SOM:SOMALIA:Hiiran:Buulo Burdo (Bula-Brif)
+3:SO:SOM:SOMALIA:Hiiran:Jalalaqsi
+1:SO:SOM:SOMALIA:Sanaag:Badhan
+2:SO:SOM:SOMALIA:Sanaag:Ceel-Afwein
+3:SO:SOM:SOMALIA:Sanaag:Ceerigaabo (Erigavo)
+1:SO:SOM:SOMALIA:Banaadir:Mogadisho
+1:SO:SOM:SOMALIA:J. Dhexe:Bu'aale
+2:SO:SOM:SOMALIA:J. Dhexe:Jilib
+3:SO:SOM:SOMALIA:J. Dhexe:Saakow
+1:SO:SOM:SOMALIA:Mudug:Gaalkacayo
+2:SO:SOM:SOMALIA:Mudug:Goldogob
+3:SO:SOM:SOMALIA:Mudug:Hobyo
+4:SO:SOM:SOMALIA:Mudug:Jariiban
+5:SO:SOM:SOMALIA:Mudug:Xarardheere (Harardere)
+1:SO:SOM:SOMALIA:Tog-Dheer:Burao
+2:SO:SOM:SOMALIA:Tog-Dheer:Buuhoodle
+3:SO:SOM:SOMALIA:Tog-Dheer:Caynabo
+4:SO:SOM:SOMALIA:Tog-Dheer:Oodweyne
+5:SO:SOM:SOMALIA:Tog-Dheer:Sheekh
+1:SO:SOM:SOMALIA:J. Hoose:Afmadow
+2:SO:SOM:SOMALIA:J. Hoose:Badhaadhe
+3:SO:SOM:SOMALIA:J. Hoose:Jamaame
+4:SO:SOM:SOMALIA:J. Hoose:Kismaayo
+1:SO:SOM:SOMALIA:W. Galbeed:Baki
+2:SO:SOM:SOMALIA:W. Galbeed:Berbera
+3:SO:SOM:SOMALIA:W. Galbeed:Boorama
+4:SO:SOM:SOMALIA:W. Galbeed:Gabiley
+5:SO:SOM:SOMALIA:W. Galbeed:Hargeysa
+6:SO:SOM:SOMALIA:W. Galbeed:Lughaya
+7:SO:SOM:SOMALIA:W. Galbeed:Saylac
diff --git a/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..1c8963a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN1_LEX.txt
@@ -0,0 +1,5 @@
+1:YU-CGO:YU:CRNA GORA
+2:YU-KOS:YU:KOSOVO
+3:YU-MKD:YU:MAKEDONIJA
+4:YU-SRB:YU:SRBIJA
+5:YU-VOJ:YU:VOJVODINA
diff --git a/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SRB/SRB_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN1_LEX.txt
new file mode 100644
index 0000000..a9ded12
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN1_LEX.txt
@@ -0,0 +1,2 @@
+1:ST-P:ST:PRINCIPE
+2:ST-S:ST:SAO TOME
diff --git a/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN2_LEX.txt
new file mode 100644
index 0000000..de0bd66
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/STP/STP_ADMIN2_LEX.txt
@@ -0,0 +1,2 @@
+1:ST:STP:SAO TOME AND PRINCIPE:Sao Tome:STP.L2.1
+1:ST:STP:SAO TOME AND PRINCIPE:Principe:STP.L2.2
diff --git a/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..954d998
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN1_LEX.txt
@@ -0,0 +1,10 @@
+1:SR-BR:SR:BROKOPONDO
+2:SR-CM:SR:COMMEWIJNE
+3:SR-CR:SR:CORONIE
+4:SR-MA:SR:MAROWIJNE
+5:SR-NI:SR:NICKERIE
+6:SR-PR:SR:PARA
+7:SR-PM:SR:PARAMARIBO
+8:SR-SA:SR:SARAMACCA
+9:SR-SI:SR:SIPALIWINI
+10:SR-WA:SR:WANICA
diff --git a/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..5161b5a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SUR/SUR_ADMIN2_LEX.txt
@@ -0,0 +1,63 @@
+1:SR:SUR:SURINAME:UNKNOWN:Isla
+1:SR:SUR:SURINAME:PARA:Bigi Poika
+2:SR:SUR:SURINAME:PARA:Carolina
+3:SR:SUR:SURINAME:PARA:Noord
+4:SR:SUR:SURINAME:PARA:Oost
+5:SR:SUR:SURINAME:PARA:Zuid
+1:SR:SUR:SURINAME:WANICA:De Nieuwe Grond
+2:SR:SUR:SURINAME:WANICA:Domburg
+3:SR:SUR:SURINAME:WANICA:Houttuin
+4:SR:SUR:SURINAME:WANICA:Koewarasan
+5:SR:SUR:SURINAME:WANICA:Kwatta
+6:SR:SUR:SURINAME:WANICA:Lelydorp
+7:SR:SUR:SURINAME:WANICA:Saramaccapolder
+1:SR:SUR:SURINAME:MAROWIJNE:Albina
+2:SR:SUR:SURINAME:MAROWIJNE:Galibi
+3:SR:SUR:SURINAME:MAROWIJNE:Moengo
+4:SR:SUR:SURINAME:MAROWIJNE:Moengotapoe
+5:SR:SUR:SURINAME:MAROWIJNE:Patamacca
+6:SR:SUR:SURINAME:MAROWIJNE:Wanhatti
+1:SR:SUR:SURINAME:COMMEWIJNE:Alkmaar
+2:SR:SUR:SURINAME:COMMEWIJNE:Bakki
+3:SR:SUR:SURINAME:COMMEWIJNE:Margaretha
+4:SR:SUR:SURINAME:COMMEWIJNE:Meerzorg
+5:SR:SUR:SURINAME:COMMEWIJNE:Nw. Amsterdam
+6:SR:SUR:SURINAME:COMMEWIJNE:Tamanredjo
+1:SR:SUR:SURINAME:CORONIE:Johanna Maria
+2:SR:SUR:SURINAME:CORONIE:Totness
+3:SR:SUR:SURINAME:CORONIE:Welgelegen
+1:SR:SUR:SURINAME:NICKERIE:Groot Henar
+2:SR:SUR:SURINAME:NICKERIE:Nw . Nickerie
+3:SR:SUR:SURINAME:NICKERIE:Oostelijke Polders
+4:SR:SUR:SURINAME:NICKERIE:Wageningen
+5:SR:SUR:SURINAME:NICKERIE:Westelijke Polders
+1:SR:SUR:SURINAME:PARAMARIBO:Beekhuizen
+2:SR:SUR:SURINAME:PARAMARIBO:Blauwgrond
+3:SR:SUR:SURINAME:PARAMARIBO:Centrum
+4:SR:SUR:SURINAME:PARAMARIBO:Flora
+5:SR:SUR:SURINAME:PARAMARIBO:Latour
+6:SR:SUR:SURINAME:PARAMARIBO:Livorno
+7:SR:SUR:SURINAME:PARAMARIBO:Munder
+8:SR:SUR:SURINAME:PARAMARIBO:Pontbuiten
+9:SR:SUR:SURINAME:PARAMARIBO:Rainville
+10:SR:SUR:SURINAME:PARAMARIBO:Tammenga
+11:SR:SUR:SURINAME:PARAMARIBO:Weg Naar Zee
+12:SR:SUR:SURINAME:PARAMARIBO:Welgelegen
+1:SR:SUR:SURINAME:BROKOPONDO:Brownsweg
+2:SR:SUR:SURINAME:BROKOPONDO:Centrum
+3:SR:SUR:SURINAME:BROKOPONDO:Klaaskreek
+4:SR:SUR:SURINAME:BROKOPONDO:Kwakoegron
+5:SR:SUR:SURINAME:BROKOPONDO:Marechalskreek
+6:SR:SUR:SURINAME:BROKOPONDO:Sarakreek
+1:SR:SUR:SURINAME:SARAMACCA:Calcutta
+2:SR:SUR:SURINAME:SARAMACCA:Groningen
+3:SR:SUR:SURINAME:SARAMACCA:Jarikaba
+4:SR:SUR:SURINAME:SARAMACCA:Kampong Baroe
+5:SR:SUR:SURINAME:SARAMACCA:Tijgerkreek
+6:SR:SUR:SURINAME:SARAMACCA:Wayambo Weg
+1:SR:SUR:SURINAME:SIPALIWINI:Boven Suriname
+2:SR:SUR:SURINAME:SIPALIWINI:Bven Saramacca
+3:SR:SUR:SURINAME:SIPALIWINI:Coeroeni
+4:SR:SUR:SURINAME:SIPALIWINI:Coppename
+5:SR:SUR:SURINAME:SIPALIWINI:Kabalebo
+6:SR:SUR:SURINAME:SIPALIWINI:Tapanahony
diff --git a/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..90db98a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN1_LEX.txt
@@ -0,0 +1,166 @@
+1:SI-00:SI:AJDOVEINA
+2:SI-90:SI:ALEC
+3:SI-033:SI:ALOVCI
+4:SI-002:SI:BELTINCI
+5:SI-48:SI:BENEDIKT
+6:SI-49:SI:BISTRICA OB SOTLI
+7:SI-003:SI:BLED
+8:SI-50:SI:BLOKE
+9:SI-004:SI:BOHINJ
+10:SI-005:SI:BOROVNICA
+11:SI-006:SI:BOVEC
+12:SI-5:SI:BRASLOVEE
+13:SI-007:SI:BRDA
+14:SI-009:SI:BREICE
+15:SI-008:SI:BREZOVICA
+16:SI-52:SI:CANKOVA
+17:SI-0:SI:CELJE
+18:SI-02:SI:CERKLJE NA GORENJSKEM
+19:SI-03:SI:CERKNICA
+20:SI-04:SI:CERKNO
+21:SI-53:SI:CERKVENJAK
+22:SI-08:SI:DESTRNIK
+23:SI-09:SI:DIVAEA
+24:SI-54:SI:DOBJE
+25:SI-020:SI:DOBREPOLJE
+26:SI-55:SI:DOBRNA
+27:SI-56:SI:DOBROVNIK[DOBRONAK]
+28:SI-022:SI:DOL PRI LJUBLJANI
+29:SI-57:SI:DOLENJSKE TOPLICE
+30:SI-023:SI:DOMALE
+31:SI-024:SI:DORNAVA
+32:SI-025:SI:DRAVOGRAD
+33:SI-026:SI:DUPLEK
+34:SI-46:SI:ELEZNIKI
+35:SI-83:SI:EMPETER VRTOJBA
+36:SI-9:SI:ENTJERNEJ
+37:SI-20:SI:ENTJUR PRI CELJU
+38:SI-027:SI:GORENJA VAS POLJANE
+39:SI-028:SI:GORINICA
+40:SI-029:SI:GORNJA RADGONA
+41:SI-030:SI:GORNJI GRAD
+42:SI-58:SI:GRAD
+43:SI-032:SI:GROSUPLJE
+44:SI-59:SI:HAJDINA
+45:SI-6:SI:HODO[HODOS]
+46:SI-60:SI:HOEE SLIVNICA
+47:SI-62:SI:HORJUL
+48:SI-034:SI:HRASTNIK
+49:SI-035:SI:HRPELJE KOZINA
+50:SI-036:SI:IDRIJA
+51:SI-037:SI:IG
+52:SI-038:SI:ILIRSKA BISTRICA
+53:SI-47:SI:IRI
+54:SI-92:SI:IROVNICA
+55:SI-039:SI:IVANENA GORICA
+56:SI-040:SI:IZOLA[ISOLA]
+57:SI-63:SI:JEZERSKO
+58:SI-042:SI:JURINCI
+59:SI-043:SI:KAMNIK
+60:SI-044:SI:KANAL
+61:SI-045:SI:KIDRIEEVO
+62:SI-046:SI:KOBARID
+63:SI-047:SI:KOBILJE
+64:SI-048:SI:KOEEVJE
+65:SI-22:SI:KOFJA LOKA
+66:SI-23:SI:KOFLJICA
+67:SI-049:SI:KOMEN
+68:SI-64:SI:KOMENDA
+69:SI-050:SI:KOPER[CAPODISTRIA]
+70:SI-65:SI:KOSTEL
+71:SI-052:SI:KRANJ
+72:SI-053:SI:KRANJSKA GORA
+73:SI-66:SI:KRIEVCI
+74:SI-054:SI:KRKO
+75:SI-055:SI:KUNGOTA
+76:SI-056:SI:KUZMA
+77:SI-057:SI:LAKO
+78:SI-058:SI:LENART
+79:SI-059:SI:LENDAVA[LENDVA]
+80:SI-060:SI:LITIJA
+81:SI-062:SI:LJUBNO
+82:SI-063:SI:LJUTOMER
+83:SI-064:SI:LOGATEC
+84:SI-065:SI:LOKA DOLINA
+85:SI-066:SI:LOKI POTOK
+86:SI-67:SI:LOVRENC NA POHORJU
+87:SI-067:SI:LUEE
+88:SI-068:SI:LUKOVICA
+89:SI-069:SI:MAJPERK
+90:SI-070:SI:MARIBOR
+91:SI-24:SI:MARJE PRI JELAH
+92:SI-68:SI:MARKOVCI
+93:SI-25:SI:MARTNO OB PAKI
+94:SI-94:SI:MARTNO PRI LITIJI
+95:SI-074:SI:MEICA
+96:SI-072:SI:MENGE
+97:SI-073:SI:METLIKA
+98:SI-69:SI:MIKLAV NA DRAVSKEM POLJU
+99:SI-075:SI:MIREN KOSTANJEVICA
+100:SI-70:SI:MIRNA PEE
+101:SI-076:SI:MISLINJA
+102:SI-077:SI:MORAVEE
+103:SI-078:SI:MORAVSKE TOPLICE
+104:SI-079:SI:MOZIRJE
+105:SI-080:SI:MURSKA SOBOTA
+106:SI-082:SI:NAKLO
+107:SI-083:SI:NAZARJE
+108:SI-084:SI:NOVA GORICA
+109:SI-085:SI:NOVO MESTO
+110:SI-086:SI:ODRANCI
+111:SI-7:SI:OPLOTNICA
+112:SI-087:SI:ORMO
+113:SI-088:SI:OSILNICA
+114:SI-26:SI:OTANJ
+115:SI-089:SI:PESNICA
+116:SI-090:SI:PIRAN[PIRANO]
+117:SI-092:SI:PODEETRTEK
+118:SI-72:SI:PODLEHNIK
+119:SI-093:SI:PODVELKA
+120:SI-73:SI:POLZELA
+121:SI-094:SI:POSTOJNA
+122:SI-74:SI:PREBOLD
+123:SI-095:SI:PREDDVOR
+124:SI-75:SI:PREVALJE
+125:SI-096:SI:PTUJ
+126:SI-097:SI:PUCONCI
+127:SI-099:SI:RADEEE
+128:SI-098:SI:RAEE FRAM
+129:SI-76:SI:RAZKRIJE
+130:SI-05:SI:RENOVCI
+131:SI-77:SI:RIBNICA NA POHORJU
+132:SI-06:SI:RNA NA KOROKEM
+133:SI-07:SI:RNOMELJ
+134:SI-:SI:SEANA
+135:SI-78:SI:SELNICA OB DRAVI
+136:SI-01:SI:SLOVENIJA
+137:SI-2:SI:SLOVENJ GRADEC
+138:SI-3:SI:SLOVENSKA BISTRICA
+139:SI-4:SI:SLOVENSKE KONJICE
+140:SI-79:SI:SODRAICA
+141:SI-80:SI:SOLEAVA
+142:SI-8:SI:SVETA ANA
+143:SI-82:SI:SVETI ANDRA V SLOVENSKIH GORICAH
+144:SI-84:SI:TABOR
+145:SI-28:SI:TOLMIN
+146:SI-27:SI:TORE
+147:SI-29:SI:TRBOVLJE
+148:SI-30:SI:TREBNJE
+149:SI-85:SI:TRNOVSKA VAS
+150:SI-86:SI:TRZIN
+151:SI-32:SI:TURNIEE
+152:SI-93:SI:UEMBERK
+153:SI-33:SI:VELENJE
+154:SI-87:SI:VELIKA POLANA
+155:SI-34:SI:VELIKE LAEE
+156:SI-88:SI:VEREJ
+157:SI-35:SI:VIDEM
+158:SI-36:SI:VIPAVA
+159:SI-37:SI:VITANJE
+160:SI-38:SI:VODICE
+161:SI-39:SI:VOJNIK
+162:SI-89:SI:VRANSKO
+163:SI-40:SI:VRHNIKA
+164:SI-42:SI:ZAGORJE OB SAVI
+165:SI-43:SI:ZAVRE
+166:SI-44:SI:ZREEE
diff --git a/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SVN/SVN_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN1_LEX.txt
new file mode 100644
index 0000000..6b9458b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN1_LEX.txt
@@ -0,0 +1,28 @@
+1:SE-K:SE:BLEKINGE
+2:SE-BH:SE:B”HUS
+3:SE-W:SE:DALARNAS LN [SE 20]
+4:SE-I:SE:GOTLAND
+5:SE-X:SE:G„VLEBORG
+6:SE-N:SE:HALLAND
+7:SE-F:SE:J”NK”PING
+8:SE-Z:SE:J„MTLAND
+9:SE-H:SE:KALMAR
+10:SE-KP:SE:KOPPARBERG
+11:SE-RI:SE:KRISTIANSTAD
+12:SE-G:SE:KRONOBERG
+13:SE-MO:SE:MALM”HUS
+14:SE-BD:SE:NORRBOTTEN
+15:SE-T:SE:OREBRO
+16:SE-ST:SE:OSTERG”TLAND
+17:SE-SK:SE:SKARABORG
+18:SE-M:SE:SKNE LN [SE 2]
+19:SE-E:SE:STERGTLANDS LN [SE 05]
+20:SE-AB:SE:STOCKHOLM
+21:SE-D:SE:S”RMLAND
+22:SE-C:SE:UPPSALA
+23:SE-U:SE:V STMANLAND
+24:SE-O:SE:VSTRA GTALANDS LN [SE 4]
+25:SE-S:SE:V„RMLAND
+26:SE-AC:SE:V„STERBOTTEN
+27:SE-Y:SE:V„STERNORRLAND
+28:SE-L:SE:ZLVSBORG
diff --git a/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SWE/SWE_ADMIN2_LEX.txt
diff --git a/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN1_LEX.txt
new file mode 100644
index 0000000..35de781
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN1_LEX.txt
@@ -0,0 +1,2 @@
+1:SC-M:SC:MAHE ISLAND
+2:SC-P:SC:PRASLIN ISLAND
diff --git a/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN2_LEX.txt
new file mode 100644
index 0000000..7df584c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SYC/SYC_ADMIN2_LEX.txt
@@ -0,0 +1,2 @@
+1:SC:SYC:SEYCHELLES:Mahe Island:SYC.L2.2
+1:SC:SYC:SEYCHELLES:Praslin Island:SYC.L2.1
diff --git a/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..b85c82c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:SY-HL:SY:ALEPPO (HALAB)
+2:SY-RA:SY:AR RAQQAH
+3:SY-SU:SY:AS SUWAYDA
+4:SY-DR:SY:DARA
+5:SY-DY:SY:DAYR AZ ZAWR
+6:SY-DI:SY:DIMASHQ
+7:SY-HM:SY:HAMAH
+8:SY-HA:SY:HASAKA (AL HAKSA)
+9:SY-HI:SY:HOMS (HIMS)
+10:SY-ID:SY:IDLIB
+11:SY-QU:SY:KUNEITRA (EL QUNAYTIRAH
+12:SY-LA:SY:LATTAKIA (AL LADHIQIYAH
+13:SY-RD:SY:RF DIMASHQ
+14:SY-TA:SY:TARTUS
diff --git a/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..d68f297
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/SYR/SYR_ADMIN2_LEX.txt
@@ -0,0 +1,13 @@
+1:SY:SYR:SYRIA:Hasaka (Al Haksa):SYR.L2.8
+1:SY:SYR:SYRIA:Dimashq:SYR.L2.1
+1:SY:SYR:SYRIA:Ar Raqqah:SYR.L2.2
+1:SY:SYR:SYRIA:Lattakia (Al Ladhiqiyah:SYR.L2.4
+1:SY:SYR:SYRIA:As Suwayda:SYR.L2.10
+1:SY:SYR:SYRIA:Tartus:SYR.L2.13
+1:SY:SYR:SYRIA:Aleppo (Halab):SYR.L2.9
+1:SY:SYR:SYRIA:Kuneitra (El Qunaytirah:SYR.L2.3
+1:SY:SYR:SYRIA:Homs (Hims):SYR.L2.7
+1:SY:SYR:SYRIA:Hamah:SYR.L2.11
+1:SY:SYR:SYRIA:Idlib:SYR.L2.5
+1:SY:SYR:SYRIA:Dara:SYR.L2.12
+1:SY:SYR:SYRIA:Dayr Az Zawr:SYR.L2.6
diff --git a/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN1_LEX.txt
new file mode 100644
index 0000000..4875531
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:TD-BA:TD:BATHA
+2:TD-BI:TD:BILTINE
+3:TD-BET:TD:BORKOU ENNEDI TIBESTI
+4:TD-CB:TD:CHARI BAGUIRMI
+5:TD-GR:TD:GUERA
+6:TD-KA:TD:KANEM
+7:TD-LC:TD:LAKE
+8:TD-LO:TD:LOGONE OCCIDEN
+9:TD-LR:TD:LOGONE ORIENTA
+10:TD-MK:TD:MAYO KEBBI
+11:TD-MC:TD:MOYEN CHARI
+12:TD-OD:TD:OUADDAI
+13:TD-SA:TD:SALAMAT
+14:TD-TA:TD:TANDJILE
diff --git a/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN2_LEX.txt
new file mode 100644
index 0000000..4105d33
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TCD/TCD_ADMIN2_LEX.txt
@@ -0,0 +1,14 @@
+1:TD:TCD:CHAD:Lake:Bol
+1:TD:TCD:CHAD:Chari-Baguirmi:Massakory
+1:TD:TCD:CHAD:Moyen-Chari:Kyabe
+1:TD:TCD:CHAD:Kanem:Nokou
+1:TD:TCD:CHAD:Batha:Djedaa
+1:TD:TCD:CHAD:Mayo-Kebbi:Bongor
+1:TD:TCD:CHAD:Logone Orienta:Doba
+1:TD:TCD:CHAD:Salamat:Abou Deia
+1:TD:TCD:CHAD:Borkou-Ennedi-Tibesti:Tibesti
+1:TD:TCD:CHAD:Logone Occiden:Benoye
+1:TD:TCD:CHAD:Tandjile:Lai
+1:TD:TCD:CHAD:Ouaddai:Abeche
+1:TD:TCD:CHAD:Guera:Mangalme
+1:TD:TCD:CHAD:Biltine:Iriba
diff --git a/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN1_LEX.txt
new file mode 100644
index 0000000..18391b3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN1_LEX.txt
@@ -0,0 +1,5 @@
+1:TG-C:TG:CENTRE [CENTRE1]
+2:TG-K:TG:KARA
+3:TG-M:TG:MARITIME
+4:TG-P:TG:PLATEAUX
+5:TG-S:TG:SAVANNES [SAVANES]
diff --git a/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN2_LEX.txt
new file mode 100644
index 0000000..237d314
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TGO/TGO_ADMIN2_LEX.txt
@@ -0,0 +1,21 @@
+1:TG:TGO:TOGO:Centre:Sotouboua
+2:TG:TGO:TOGO:Centre:Tchamba (Nyala)
+3:TG:TGO:TOGO:Centre:Tchaudjo
+1:TG:TGO:TOGO:Kara:Assoli
+2:TG:TGO:TOGO:Kara:Bassar
+3:TG:TGO:TOGO:Kara:Bimah
+4:TG:TGO:TOGO:Kara:Doufelgou
+5:TG:TGO:TOGO:Kara:Keran
+6:TG:TGO:TOGO:Kara:Kozah
+1:TG:TGO:TOGO:Maritime:Golfe (incl Lome)
+2:TG:TGO:TOGO:Maritime:Lacs
+3:TG:TGO:TOGO:Maritime:Vo
+4:TG:TGO:TOGO:Maritime:Yoto
+5:TG:TGO:TOGO:Maritime:Zio
+1:TG:TGO:TOGO:Savanes:Oti
+2:TG:TGO:TOGO:Savanes:Tone
+1:TG:TGO:TOGO:Plateaux:Amou
+2:TG:TGO:TOGO:Plateaux:Haho
+3:TG:TGO:TOGO:Plateaux:Kloto
+4:TG:TGO:TOGO:Plateaux:Ogou
+5:TG:TGO:TOGO:Plateaux:Wawa
diff --git a/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..ad56eac
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN1_LEX.txt
@@ -0,0 +1,73 @@
+1:TH-37:TH:AMNAT CHAROEN
+2:TH-5:TH:ANG THONG
+3:TH-0:TH:BANGKOK
+4:TH-3:TH:BURI RAM
+5:TH-C:TH:CENTRAL
+6:TH-24:TH:CHACHOENGSAO
+7:TH-8:TH:CHAI NAT
+8:TH-36:TH:CHAIYAPHUM
+9:TH-22:TH:CHANTHABURI
+10:TH-50:TH:CHIANG MAI
+11:TH-57:TH:CHIANG RAI
+12:TH-20:TH:CHON BURI
+13:TH-86:TH:CHUMPHON
+14:TH-46:TH:KALASIN
+15:TH-62:TH:KAMPHAENG PHET
+16:TH-7:TH:KANCHANABURI
+17:TH-40:TH:KHON KAEN
+18:TH-52:TH:LAMPANG
+19:TH-42:TH:LOEI
+20:TH-6:TH:LOP BURI
+21:TH-58:TH:MAE HONG SON
+22:TH-44:TH:MAHA SARAKHAM
+23:TH-49:TH:MUKDAHAN
+24:TH-26:TH:NAKHON NAYOK
+25:TH-73:TH:NAKHON PATHOM
+26:TH-48:TH:NAKHON PHANOM
+27:TH-30:TH:NAKHON RATCHASIMA
+28:TH-60:TH:NAKHON SAWAN
+29:TH-80:TH:NAKHON SI THAMMARAT
+30:TH-55:TH:NAN
+31:TH-96:TH:NARATHIWAT
+32:TH-39:TH:NONG BUA LAM PHU
+33:TH-43:TH:NONG KHAI
+34:TH-2:TH:NONTHABURI
+35:TH-NE:TH:NORTHEASTERN
+36:TH-N:TH:NORTHERN
+37:TH-94:TH:PATTANI
+38:TH-82:TH:PHANGNGA
+39:TH-93:TH:PHATTHALUNG
+40:TH-56:TH:PHAYAO
+41:TH-67:TH:PHETCHABUN
+42:TH-76:TH:PHETCHABURI
+43:TH-66:TH:PHICHIT
+44:TH-65:TH:PHITSANULOK
+45:TH-4:TH:PHRA NAKHON SI AYUTTHAYA
+46:TH-54:TH:PHRAE
+47:TH-83:TH:PHUKET
+48:TH-25:TH:PRACHIN BURI
+49:TH-77:TH:PRACHUAP KHIRI KHAN
+50:TH-85:TH:RANONG
+51:TH-70:TH:RATCHABURI
+52:TH-45:TH:ROI ET
+53:TH-27:TH:SA KAEO
+54:TH-47:TH:SAKON NAKHON
+55:TH-81:TH:SAMUT PRAKAN
+56:TH-74:TH:SAMUT SAKHON
+57:TH-75:TH:SAMUT SONGKHRAM
+58:TH-79:TH:SARABURI
+59:TH-9:TH:SATUN
+60:TH-33:TH:SI SA KET
+61:TH-90:TH:SONGKHLA
+62:TH-S:TH:SOUTHERN
+63:TH-64:TH:SUKHOTHAI
+64:TH-72:TH:SUPHAN BURI
+65:TH-84:TH:SURAT THANI
+66:TH-32:TH:SURIN
+67:TH-63:TH:TAK
+68:TH-92:TH:TRANG
+69:TH-23:TH:TRAT
+70:TH-34:TH:UBON RATCHATHANI
+71:TH-53:TH:UTTARADIT
+72:TH-95:TH:YALA
+73:TH-35:TH:YASOTHON
diff --git a/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..eab69a7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/THA/THA_ADMIN2_LEX.txt
@@ -0,0 +1,72 @@
+1:TH:THA:THAILAND:Southern:Chumphon
+2:TH:THA:THAILAND:Southern:Krabi
+3:TH:THA:THAILAND:Southern:Nakhon Thammarat
+4:TH:THA:THAILAND:Southern:Narathiwat
+5:TH:THA:THAILAND:Southern:Pattani
+6:TH:THA:THAILAND:Southern:Phangnga
+7:TH:THA:THAILAND:Southern:Phatthalung
+8:TH:THA:THAILAND:Southern:Phuket
+9:TH:THA:THAILAND:Southern:Ranong
+10:TH:THA:THAILAND:Southern:Satun
+11:TH:THA:THAILAND:Southern:Songkhla
+12:TH:THA:THAILAND:Southern:Surat Thani
+13:TH:THA:THAILAND:Southern:Trang
+14:TH:THA:THAILAND:Southern:Yala
+1:TH:THA:THAILAND:Northeastern:Buri Rum
+2:TH:THA:THAILAND:Northeastern:Chaiyaphum
+3:TH:THA:THAILAND:Northeastern:Kalasin
+4:TH:THA:THAILAND:Northeastern:Khon Kaen
+5:TH:THA:THAILAND:Northeastern:Loei
+6:TH:THA:THAILAND:Northeastern:Maha Sarakham
+7:TH:THA:THAILAND:Northeastern:Nakhon Phanom & Mukdahan
+8:TH:THA:THAILAND:Northeastern:Nakhon Ratchasima
+9:TH:THA:THAILAND:Northeastern:Nong Khai
+10:TH:THA:THAILAND:Northeastern:Roi Et
+11:TH:THA:THAILAND:Northeastern:Sakon Nakhon
+12:TH:THA:THAILAND:Northeastern:Sisaket
+13:TH:THA:THAILAND:Northeastern:Surin
+14:TH:THA:THAILAND:Northeastern:Ubon Ratchathani
+15:TH:THA:THAILAND:Northeastern:Udon Thani
+16:TH:THA:THAILAND:Northeastern:Yasothon
+1:TH:THA:THAILAND:Central:Ang Thong
+2:TH:THA:THAILAND:Central:Chachoengsao
+3:TH:THA:THAILAND:Central:Chainat
+4:TH:THA:THAILAND:Central:Chanthaburi
+5:TH:THA:THAILAND:Central:Chon Buri
+6:TH:THA:THAILAND:Central:Kanchanaburi
+7:TH:THA:THAILAND:Central:Lop Buri
+8:TH:THA:THAILAND:Central:Nakhon Pathom
+9:TH:THA:THAILAND:Central:Nakon Nayok
+10:TH:THA:THAILAND:Central:Nonthaburi
+11:TH:THA:THAILAND:Central:Pathum Thani
+12:TH:THA:THAILAND:Central:Phetcha Buri
+13:TH:THA:THAILAND:Central:Phranakhon Si Ayutthaya
+14:TH:THA:THAILAND:Central:Prachin Buri
+15:TH:THA:THAILAND:Central:Prachuap Khiri Khan
+16:TH:THA:THAILAND:Central:Ratchaburi
+17:TH:THA:THAILAND:Central:Rayong
+18:TH:THA:THAILAND:Central:Samut Prakan
+19:TH:THA:THAILAND:Central:Samut Sakhon
+20:TH:THA:THAILAND:Central:Samut Songkhram
+21:TH:THA:THAILAND:Central:Sara Buri
+22:TH:THA:THAILAND:Central:Sing Buri
+23:TH:THA:THAILAND:Central:Suphan Buri
+24:TH:THA:THAILAND:Central:Trat
+1:TH:THA:THAILAND:Northern:Chiang Mai
+2:TH:THA:THAILAND:Northern:Chiang Rai
+3:TH:THA:THAILAND:Northern:Kamphaeng Phet
+4:TH:THA:THAILAND:Northern:Lampang
+5:TH:THA:THAILAND:Northern:Lamphun
+6:TH:THA:THAILAND:Northern:Mae Hong Son
+7:TH:THA:THAILAND:Northern:Nakhon Sawan
+8:TH:THA:THAILAND:Northern:Nan
+9:TH:THA:THAILAND:Northern:Phayao
+10:TH:THA:THAILAND:Northern:Phetchabun
+11:TH:THA:THAILAND:Northern:Phichit
+12:TH:THA:THAILAND:Northern:Phitsanulok
+13:TH:THA:THAILAND:Northern:Phrae
+14:TH:THA:THAILAND:Northern:Sukhothai
+15:TH:THA:THAILAND:Northern:Tak
+16:TH:THA:THAILAND:Northern:Uthai Thani
+17:TH:THA:THAILAND:Northern:Uttaradit
+1:TH:THA:THAILAND:Bangkok:Krung Mahanakhon (Bangk.)
diff --git a/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN1_LEX.txt
new file mode 100644
index 0000000..263ebc5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN1_LEX.txt
@@ -0,0 +1,5 @@
+1:TJ-GB:TJ:GORNO BADAKHSHAN
+2:TJ-KT:TJ:KHATLON
+3:TJ-LE:TJ:LENINABAD
+4:TJ-SU:TJ:SUGHD
+5:TJ-TA:TJ:TADZHIKISTAN TERRITORIES
diff --git a/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN2_LEX.txt
new file mode 100644
index 0000000..e8cedd8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TJK/TJK_ADMIN2_LEX.txt
@@ -0,0 +1,4 @@
+1:TJ:TJK:TAJIKISTAN:Khatlon:TJK.L2.1
+1:TJ:TJK:TAJIKISTAN:Gorno-Badakhshan:TJK.L2.2
+1:TJ:TJK:TAJIKISTAN:Tadzhikistan Territories:TJK.L2.4
+1:TJ:TJK:TAJIKISTAN:Leninabad:TJK.L2.3
diff --git a/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..78b1830
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN1_LEX.txt
@@ -0,0 +1,8 @@
+1:TM-A:TM:AHAL
+2:TM-B:TM:BALKAN
+3:TM-CHA:TM:CHARDZHOU
+4:TM-D:TM:DAOGUZ
+5:TM-L:TM:LEBAP
+6:TM-M:TM:MARY
+7:TM-TAS:TM:TASHAUZ
+8:TM-TT:TM:TURKMENISTAN TERRITORIES
diff --git a/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..6ad739c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TKM/TKM_ADMIN2_LEX.txt
@@ -0,0 +1,13 @@
+1:TM:TKM:TURKMENISTAN:Tashauz:TKM.L2.11
+1:TM:TKM:TURKMENISTAN:Chardzhou:TKM.L2.12
+1:TM:TKM:TURKMENISTAN:Mary:TKM.L2.13
+1:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.1
+2:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.10
+3:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.2
+4:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.3
+5:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.4
+6:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.5
+7:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.6
+8:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.7
+9:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.8
+10:TM:TKM:TURKMENISTAN:Turkmenistan Territories:TKM.L2.9
diff --git a/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..884ae93
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN1_LEX.txt
@@ -0,0 +1,28 @@
+1:TN-3:TN:BEJA
+2:TN-23:TN:BIZERTE
+3:TN-8:TN:GABES
+4:TN-7:TN:GAFSA
+5:TN-32:TN:JENDOUBA
+6:TN-4:TN:KAIROUAN
+7:TN-42:TN:KASSERINE
+8:TN-73:TN:KEBILI
+9:TN-2:TN:LARIANA
+10:TN-33:TN:LE KEF
+11:TN-53:TN:MAHDIA
+12:TN-82:TN:MEDENINE
+13:TN-52:TN:MONASTIR
+14:TN-R1:TN:REGION 1
+15:TN-R2:TN:REGION 2
+16:TN-R3:TN:REGION 3
+17:TN-R4:TN:REGION 4
+18:TN-R5:TN:REGION 5
+19:TN-R6:TN:REGION 6
+20:TN-R7:TN:REGION 7
+21:TN-6:TN:SFAX
+22:TN-43:TN:SIDI BOUZID
+23:TN-34:TN:SILIANA
+24:TN-5:TN:SOUSSE
+25:TN-83:TN:TATAOUINE
+26:TN-72:TN:TOZEUR
+27:TN-10:TN:TUNIS
+28:TN-22:TN:ZAGHOUAN
diff --git a/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..c863549
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TUN/TUN_ADMIN2_LEX.txt
@@ -0,0 +1,23 @@
+1:TN:TUN:TUNISIA:Region 3:Al-Kaf
+2:TN:TUN:TUNISIA:Region 3:Beja
+3:TN:TUN:TUNISIA:Region 3:Dschunduba
+4:TN:TUN:TUNISIA:Region 3:Siliana
+1:TN:TUN:TUNISIA:Region 6:Gafsa
+2:TN:TUN:TUNISIA:Region 6:Kebili
+3:TN:TUN:TUNISIA:Region 6:Tozeur
+1:TN:TUN:TUNISIA:Region 1:Ariana
+2:TN:TUN:TUNISIA:Region 1:Ben Arous (Tunis Sud)
+3:TN:TUN:TUNISIA:Region 1:Tunis
+1:TN:TUN:TUNISIA:Region 5:Mahdia
+2:TN:TUN:TUNISIA:Region 5:Monastir
+3:TN:TUN:TUNISIA:Region 5:Sfax
+4:TN:TUN:TUNISIA:Region 5:Susa
+1:TN:TUN:TUNISIA:Region 7:Gabes
+2:TN:TUN:TUNISIA:Region 7:Medenine
+3:TN:TUN:TUNISIA:Region 7:Tataouine
+1:TN:TUN:TUNISIA:Region 2:Bizerte
+2:TN:TUN:TUNISIA:Region 2:Nabul
+3:TN:TUN:TUNISIA:Region 2:Saghuan
+1:TN:TUN:TUNISIA:Region 4:Kairouwan
+2:TN:TUN:TUNISIA:Region 4:Kasserine
+3:TN:TUN:TUNISIA:Region 4:Sidi Bu Said
diff --git a/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN1_LEX.txt
new file mode 100644
index 0000000..57c1fa8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN1_LEX.txt
@@ -0,0 +1,81 @@
+1:TR-0:TR:ADANA
+2:TR-02:TR:ADIYAMAN
+3:TR-03:TR:AFYON
+4:TR-04:TR:AGRI
+5:TR-68:TR:AKSARAY
+6:TR-05:TR:AMASYA
+7:TR-06:TR:ANKARA
+8:TR-07:TR:ANTALYA
+9:TR-75:TR:ARDAHAN
+10:TR-08:TR:ARTVIN
+11:TR-09:TR:AYDIN
+12:TR-10:TR:BALIKESIR
+13:TR-74:TR:BARTN
+14:TR-72:TR:BATMAN
+15:TR-69:TR:BAYBURT
+16:TR-87:TR:BILECIK
+17:TR-2:TR:BINGOL
+18:TR-83:TR:BITLIS
+19:TR-4:TR:BOLU
+20:TR-85:TR:BURDUR
+21:TR-90:TR:BURSA
+22:TR-7:TR:CANAKKALE
+23:TR-8:TR:CANKIRI
+24:TR-9:TR:CORUM
+25:TR-20:TR:DENIZLI
+26:TR-82:TR:DIYARBAKIR
+27:TR-22:TR:EDIRNE
+28:TR-23:TR:ELAZIG
+29:TR-24:TR:ERZINCAN
+30:TR-25:TR:ERZURUM
+31:TR-26:TR:ESKISEHIR
+32:TR-27:TR:GAZIANTEP
+33:TR-28:TR:GIRESUN
+34:TR-29:TR:GUMUSHANE
+35:TR-30:TR:HAKKARI
+36:TR-3:TR:HATAY
+37:TR-33:TR:ICEL
+38:TR-76:TR:IDR
+39:TR-32:TR:ISPARTA
+40:TR-34:TR:ISTANBUL
+41:TR-35:TR:IZMIR
+42:TR-KMA:TR:K. MARAS
+43:TR-46:TR:KAHRAMANMARA
+44:TR-78:TR:KARABÜK
+45:TR-70:TR:KARAMAN
+46:TR-36:TR:KARS
+47:TR-37:TR:KASTAMONU
+48:TR-38:TR:KAYSERI
+49:TR-79:TR:KILIS
+50:TR-88:TR:KINKKALE
+51:TR-39:TR:KIRKLARELI
+52:TR-40:TR:KIRSEHIR
+53:TR-84:TR:KOCAELI
+54:TR-42:TR:KONYA
+55:TR-43:TR:KUTAHYA
+56:TR-44:TR:MALATYA
+57:TR-45:TR:MANISA
+58:TR-47:TR:MARDIN
+59:TR-48:TR:MUGLA
+60:TR-49:TR:MUS
+61:TR-50:TR:NEVSEHIR
+62:TR-5:TR:NIGDE
+63:TR-52:TR:ORDU
+64:TR-80:TR:OSMANIYE
+65:TR-53:TR:RIZE
+66:TR-54:TR:SAKARYA
+67:TR-55:TR:SAMSUN
+68:TR-63:TR:SANLIURFA
+69:TR-56:TR:SIIRT
+70:TR-57:TR:SINOP
+71:TR-73:TR:SIRNAK
+72:TR-58:TR:SIVAS
+73:TR-59:TR:TEKIRDAG
+74:TR-60:TR:TOKAT
+75:TR-6:TR:TRABZON
+76:TR-62:TR:TUNCELI
+77:TR-64:TR:USAK
+78:TR-65:TR:VAN
+79:TR-77:TR:YALOVA
+80:TR-66:TR:YOZGAT
+81:TR-67:TR:ZINGULDAK
diff --git a/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN2_LEX.txt
new file mode 100644
index 0000000..03a4181
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TUR/TUR_ADMIN2_LEX.txt
@@ -0,0 +1,136 @@
+1:TR:TUR:TURKEY:Izmir:TUR.L2.10
+2:TR:TUR:TURKEY:Izmir:TUR.L2.11
+3:TR:TUR:TURKEY:Izmir:TUR.L2.12
+4:TR:TUR:TURKEY:Izmir:TUR.L2.3
+5:TR:TUR:TURKEY:Izmir:TUR.L2.4
+6:TR:TUR:TURKEY:Izmir:TUR.L2.5
+7:TR:TUR:TURKEY:Izmir:TUR.L2.6
+8:TR:TUR:TURKEY:Izmir:TUR.L2.7
+9:TR:TUR:TURKEY:Izmir:TUR.L2.8
+10:TR:TUR:TURKEY:Izmir:TUR.L2.9
+1:TR:TUR:TURKEY:Sanliurfa:TUR.L2.56
+1:TR:TUR:TURKEY:Erzurum:TUR.L2.35
+1:TR:TUR:TURKEY:Kars:TUR.L2.29
+1:TR:TUR:TURKEY:Giresun:TUR.L2.23
+1:TR:TUR:TURKEY:Istanbul:TUR.L2.69
+2:TR:TUR:TURKEY:Istanbul:TUR.L2.70
+3:TR:TUR:TURKEY:Istanbul:TUR.L2.71
+4:TR:TUR:TURKEY:Istanbul:TUR.L2.72
+5:TR:TUR:TURKEY:Istanbul:TUR.L2.73
+6:TR:TUR:TURKEY:Istanbul:TUR.L2.74
+7:TR:TUR:TURKEY:Istanbul:TUR.L2.75
+8:TR:TUR:TURKEY:Istanbul:TUR.L2.76
+9:TR:TUR:TURKEY:Istanbul:TUR.L2.77
+1:TR:TUR:TURKEY:Agri:TUR.L2.66
+1:TR:TUR:TURKEY:Batman:TUR.L2.49
+1:TR:TUR:TURKEY:Konya:TUR.L2.101
+1:TR:TUR:TURKEY:Yozgat:TUR.L2.57
+1:TR:TUR:TURKEY:Nevsehir:TUR.L2.129
+1:TR:TUR:TURKEY:Eskisehir:TUR.L2.116
+1:TR:TUR:TURKEY:Corum:TUR.L2.31
+1:TR:TUR:TURKEY:Ordu:TUR.L2.115
+1:TR:TUR:TURKEY:Tekirdag:TUR.L2.100
+1:TR:TUR:TURKEY:Tunceli:TUR.L2.123
+1:TR:TUR:TURKEY:Cankiri:TUR.L2.52
+1:TR:TUR:TURKEY:Kastamonu:TUR.L2.128
+1:TR:TUR:TURKEY:Kayseri:TUR.L2.68
+1:TR:TUR:TURKEY:Van:TUR.L2.21
+1:TR:TUR:TURKEY:Erzincan:TUR.L2.14
+1:TR:TUR:TURKEY:Bilecik:TUR.L2.58
+1:TR:TUR:TURKEY:Malatya:TUR.L2.133
+1:TR:TUR:TURKEY:Kocaeli:TUR.L2.117
+1:TR:TUR:TURKEY:Canakkale:TUR.L2.15
+2:TR:TUR:TURKEY:Canakkale:TUR.L2.16
+3:TR:TUR:TURKEY:Canakkale:TUR.L2.17
+4:TR:TUR:TURKEY:Canakkale:TUR.L2.18
+5:TR:TUR:TURKEY:Canakkale:TUR.L2.19
+6:TR:TUR:TURKEY:Canakkale:TUR.L2.20
+1:TR:TUR:TURKEY:Aydin:TUR.L2.61
+2:TR:TUR:TURKEY:Aydin:TUR.L2.62
+3:TR:TUR:TURKEY:Aydin:TUR.L2.63
+1:TR:TUR:TURKEY:Karaman:TUR.L2.135
+1:TR:TUR:TURKEY:Zinguldak:TUR.L2.25
+1:TR:TUR:TURKEY:Burdur:TUR.L2.22
+1:TR:TUR:TURKEY:Trabzon:TUR.L2.130
+1:TR:TUR:TURKEY:Sirnak:TUR.L2.51
+1:TR:TUR:TURKEY:Manisa:TUR.L2.126
+1:TR:TUR:TURKEY:Bitlis:TUR.L2.120
+1:TR:TUR:TURKEY:Kirsehir:TUR.L2.24
+1:TR:TUR:TURKEY:Diyarbakir:TUR.L2.50
+1:TR:TUR:TURKEY:Usak:TUR.L2.60
+1:TR:TUR:TURKEY:Aksaray:TUR.L2.122
+1:TR:TUR:TURKEY:Antalya:TUR.L2.106
+2:TR:TUR:TURKEY:Antalya:TUR.L2.107
+3:TR:TUR:TURKEY:Antalya:TUR.L2.108
+4:TR:TUR:TURKEY:Antalya:TUR.L2.109
+5:TR:TUR:TURKEY:Antalya:TUR.L2.110
+6:TR:TUR:TURKEY:Antalya:TUR.L2.111
+7:TR:TUR:TURKEY:Antalya:TUR.L2.112
+8:TR:TUR:TURKEY:Antalya:TUR.L2.113
+9:TR:TUR:TURKEY:Antalya:TUR.L2.114
+1:TR:TUR:TURKEY:Sinop:TUR.L2.134
+1:TR:TUR:TURKEY:Kirklareli:TUR.L2.27
+1:TR:TUR:TURKEY:Sakarya:TUR.L2.104
+1:TR:TUR:TURKEY:Mugla:TUR.L2.78
+2:TR:TUR:TURKEY:Mugla:TUR.L2.79
+3:TR:TUR:TURKEY:Mugla:TUR.L2.80
+4:TR:TUR:TURKEY:Mugla:TUR.L2.81
+5:TR:TUR:TURKEY:Mugla:TUR.L2.82
+6:TR:TUR:TURKEY:Mugla:TUR.L2.83
+7:TR:TUR:TURKEY:Mugla:TUR.L2.84
+8:TR:TUR:TURKEY:Mugla:TUR.L2.85
+9:TR:TUR:TURKEY:Mugla:TUR.L2.86
+10:TR:TUR:TURKEY:Mugla:TUR.L2.87
+11:TR:TUR:TURKEY:Mugla:TUR.L2.88
+12:TR:TUR:TURKEY:Mugla:TUR.L2.89
+13:TR:TUR:TURKEY:Mugla:TUR.L2.90
+14:TR:TUR:TURKEY:Mugla:TUR.L2.91
+15:TR:TUR:TURKEY:Mugla:TUR.L2.92
+16:TR:TUR:TURKEY:Mugla:TUR.L2.93
+17:TR:TUR:TURKEY:Mugla:TUR.L2.94
+18:TR:TUR:TURKEY:Mugla:TUR.L2.95
+1:TR:TUR:TURKEY:Mus:TUR.L2.64
+1:TR:TUR:TURKEY:Rize:TUR.L2.97
+1:TR:TUR:TURKEY:Tokat:TUR.L2.98
+1:TR:TUR:TURKEY:Ankara:TUR.L2.65
+1:TR:TUR:TURKEY:K. Maras:TUR.L2.59
+1:TR:TUR:TURKEY:Bayburt:TUR.L2.34
+1:TR:TUR:TURKEY:Elazig:TUR.L2.54
+1:TR:TUR:TURKEY:Adana:TUR.L2.55
+1:TR:TUR:TURKEY:Kutahya:TUR.L2.67
+1:TR:TUR:TURKEY:Bolu:TUR.L2.2
+1:TR:TUR:TURKEY:Edirne:TUR.L2.121
+1:TR:TUR:TURKEY:Kinkkale:TUR.L2.125
+1:TR:TUR:TURKEY:Hakkari:TUR.L2.53
+1:TR:TUR:TURKEY:Hatay:TUR.L2.96
+1:TR:TUR:TURKEY:Bingol:TUR.L2.127
+1:TR:TUR:TURKEY:Mardin:TUR.L2.136
+1:TR:TUR:TURKEY:Samsun:TUR.L2.99
+1:TR:TUR:TURKEY:Adiyaman:TUR.L2.30
+1:TR:TUR:TURKEY:Nigde:TUR.L2.131
+1:TR:TUR:TURKEY:Gumushane:TUR.L2.118
+1:TR:TUR:TURKEY:Gaziantep:TUR.L2.124
+1:TR:TUR:TURKEY:Isparta:TUR.L2.28
+1:TR:TUR:TURKEY:Bursa:TUR.L2.102
+2:TR:TUR:TURKEY:Bursa:TUR.L2.103
+1:TR:TUR:TURKEY:Amasya:TUR.L2.1
+1:TR:TUR:TURKEY:Artvin:TUR.L2.13
+1:TR:TUR:TURKEY:Sivas:TUR.L2.26
+1:TR:TUR:TURKEY:Denizli:TUR.L2.119
+1:TR:TUR:TURKEY:Afyon:TUR.L2.132
+1:TR:TUR:TURKEY:Siirt:TUR.L2.105
+1:TR:TUR:TURKEY:Icel:TUR.L2.32
+2:TR:TUR:TURKEY:Icel:TUR.L2.33
+1:TR:TUR:TURKEY:Balikesir:TUR.L2.36
+2:TR:TUR:TURKEY:Balikesir:TUR.L2.37
+3:TR:TUR:TURKEY:Balikesir:TUR.L2.38
+4:TR:TUR:TURKEY:Balikesir:TUR.L2.39
+5:TR:TUR:TURKEY:Balikesir:TUR.L2.40
+6:TR:TUR:TURKEY:Balikesir:TUR.L2.41
+7:TR:TUR:TURKEY:Balikesir:TUR.L2.42
+8:TR:TUR:TURKEY:Balikesir:TUR.L2.43
+9:TR:TUR:TURKEY:Balikesir:TUR.L2.44
+10:TR:TUR:TURKEY:Balikesir:TUR.L2.45
+11:TR:TUR:TURKEY:Balikesir:TUR.L2.46
+12:TR:TUR:TURKEY:Balikesir:TUR.L2.47
+13:TR:TUR:TURKEY:Balikesir:TUR.L2.48
diff --git a/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..b0ac93d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN1_LEX.txt
@@ -0,0 +1,26 @@
+1:TZ-0:TZ:ARUSHA
+2:TZ-02:TZ:DAR ES SALAAM
+3:TZ-03:TZ:DODOMA
+4:TZ-04:TZ:IRINGA
+5:TZ-05:TZ:KAGERA
+6:TZ-06:TZ:KASKAZINI PEMBA
+7:TZ-07:TZ:KASKAZINI UNGUJA
+8:TZ-08:TZ:KIGOMA
+9:TZ-09:TZ:KILIMANJARO
+10:TZ-10:TZ:KUSINI PEMBA
+11:TZ-11:TZ:KUSINI UNGUJA
+12:TZ-2:TZ:LINDI
+13:TZ-26:TZ:MANYARA
+14:TZ-3:TZ:MARA
+15:TZ-4:TZ:MBEYA
+16:TZ-5:TZ:MJINI MAGHARIBI
+17:TZ-6:TZ:MOROGORO
+18:TZ-7:TZ:MTWARA
+19:TZ-8:TZ:MWANZA
+20:TZ-9:TZ:PWANI
+21:TZ-20:TZ:RUKWA
+22:TZ-12:TZ:RUVUMA
+23:TZ-22:TZ:SHINYANGA
+24:TZ-23:TZ:SINGIDA
+25:TZ-24:TZ:TABORA
+26:TZ-25:TZ:TANGA
diff --git a/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..7d1418d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/TZA/TZA_ADMIN2_LEX.txt
@@ -0,0 +1,97 @@
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kusini Unguja:Zansibar Central
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kusini Unguja:Zansibar South
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Dodoma:Dodoma
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Dodoma:Kondoa
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Dodoma:Mpwapwa
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Shinyanga:Bariadi
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Shinyanga:Kahama
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Shinyanga:Maswa
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Shinyanga:Meatu
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Shinyanga:Shinyanga
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kusini-Pemba:Chakechake
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kusini-Pemba:Mkoani
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Lindi:Kilwa
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Lindi:Lindi
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Lindi:Liwale
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Lindi:Nachingwea
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kilimanjaro:Hai
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kilimanjaro:Moshi
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Kilimanjaro:Mwanga
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Kilimanjaro:Rombo
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Kilimanjaro:Same
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Mtwara:Masasi
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Mtwara:Mtwara
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Mtwara:Newala
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Dar-Es-Salaam:Dar-Es-Salaam
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Iringa:Iringa
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Iringa:Ludewa
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Iringa:Makete
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Iringa:Mufindi
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Iringa:Njombe
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Mara:Bunda
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Mara:Musoma
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Mara:Serengeti
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Mara:Tarime
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Tabora:Igunga
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Tabora:Nzega
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Tabora:Tabora
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Tabora:Urambo
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Rukwa:Mpanda
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Rukwa:Nkasi
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Rukwa:Sumbawanga
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kagera:Biharamulo
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kagera:Bukoba
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Kagera:Karagwe
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Kagera:Muleba
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Kagera:Ngara
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Arumeru
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Arusha
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Babati
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Hanang
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Kiteto
+6:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Mbulu
+7:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Monduli
+8:TZ:TZA:TANZANIA UNITED REPUBLIC:Arusha:Ngorongoro
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Chunya
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Ileje
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Kyela
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Mbeya
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Mbozi
+6:TZ:TZA:TANZANIA UNITED REPUBLIC:Mbeya:Rungwe
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:L. Victoria:L. Victoria
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Ruvuma:Mbinga
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Ruvuma:Songea
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Ruvuma:Tunduru
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kaskazini-Unguja:Zansibar North
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kaskazini-Unguja:Zansibar North-Central
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kigoma:Kasulu
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kigoma:Kibondo
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Kigoma:Kigoma
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Geita
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Kwimba
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Magu
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Mwanza
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Sengerema
+6:TZ:TZA:TANZANIA UNITED REPUBLIC:Mwanza:Ukerewe
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Singida:Iramba
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Singida:Manyoni
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Singida:Singida
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Kaskazini-Pemba:Micheweni-Pemba
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Kaskazini-Pemba:Wete-Pemba
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Morogoro:Kilombero
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Morogoro:Kilosa
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Morogoro:Morogoro
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Morogoro:Ulanga
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Handeni
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Korogwe
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Lushoto
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Muheza
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Pangani
+6:TZ:TZA:TANZANIA UNITED REPUBLIC:Tanga:Tanga
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Pwani:Bagamoyo
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Pwani:Kibaha
+3:TZ:TZA:TANZANIA UNITED REPUBLIC:Pwani:Kisarawe
+4:TZ:TZA:TANZANIA UNITED REPUBLIC:Pwani:Mafia
+5:TZ:TZA:TANZANIA UNITED REPUBLIC:Pwani:Rufiji
+1:TZ:TZA:TANZANIA UNITED REPUBLIC:Mjini-Magharibi:Zansibar Town
+2:TZ:TZA:TANZANIA UNITED REPUBLIC:Mjini-Magharibi:Zansibar West
diff --git a/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e55518b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN1_LEX.txt
@@ -0,0 +1,56 @@
+1:UG-30:UG:ADJUMANI
+2:UG-302:UG:APAC
+3:UG-303:UG:ARUA
+4:UG-21:UG:BUGIRI
+5:UG-40:UG:BUNDIBUGYO
+6:UG-402:UG:BUSHENYI
+7:UG-202:UG:BUSIA
+8:UG-304:UG:GULU
+9:UG-403:UG:HOIMA
+10:UG-203:UG:IGANGA
+11:UG-204:UG:JINJA
+12:UG-404:UG:KABALE
+13:UG-405:UG:KABAROLE
+14:UG-23:UG:KABERAMAIDO
+15:UG-0:UG:KALANGALA
+16:UG-02:UG:KAMPALA
+17:UG-205:UG:KAMULI
+18:UG-43:UG:KAMWENGE
+19:UG-44:UG:KANUNGU
+20:UG-206:UG:KAPCHORWA
+21:UG-406:UG:KASESE
+22:UG-207:UG:KATAKWI
+23:UG-2:UG:KAYUNGA
+24:UG-407:UG:KIBAALE
+25:UG-03:UG:KIBOGA
+26:UG-408:UG:KISORO
+27:UG-305:UG:KITGUM
+28:UG-306:UG:KOTIDO
+29:UG-208:UG:KUMI
+30:UG-45:UG:KYENJOJO
+31:UG-V:UG:LAKE VICTORIA
+32:UG-307:UG:LIRA
+33:UG-04:UG:LUWERO
+34:UG-05:UG:MASAKA
+35:UG-409:UG:MASINDI
+36:UG-24:UG:MAYUGE
+37:UG-209:UG:MBALE
+38:UG-41:UG:MBARARA
+39:UG-308:UG:MOROTO
+40:UG-309:UG:MOYO
+41:UG-06:UG:MPIGI
+42:UG-07:UG:MUBENDE
+43:UG-08:UG:MUKONO
+44:UG-3:UG:NAKAPIRIPIRIT
+45:UG-09:UG:NAKASONGOLA
+46:UG-31:UG:NEBBI
+47:UG-4:UG:NTUNGAMO
+48:UG-32:UG:PADER
+49:UG-20:UG:PALLISA
+50:UG-10:UG:RAKAI
+51:UG-42:UG:RUKUNGIRI
+52:UG-11:UG:SEMBABULE
+53:UG-25:UG:SIRONKO
+54:UG-52:UG:SOROTI
+55:UG-22:UG:TORORO
+56:UG-33:UG:YUMBE
diff --git a/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..be85d74
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/UGA/UGA_ADMIN2_LEX.txt
@@ -0,0 +1,185 @@
+1:UG:UGA:UGANDA:Rukungiri:Kinkiizi
+2:UG:UGA:UGANDA:Rukungiri:Rubabo
+3:UG:UGA:UGANDA:Rukungiri:Rujumbura
+1:UG:UGA:UGANDA:Arua:Aringa
+2:UG:UGA:UGANDA:Arua:Arua Municipality
+3:UG:UGA:UGANDA:Arua:Ayivu
+4:UG:UGA:UGANDA:Arua:Koboko
+5:UG:UGA:UGANDA:Arua:Madi-Okollo
+6:UG:UGA:UGANDA:Arua:Maracha
+7:UG:UGA:UGANDA:Arua:Terego
+8:UG:UGA:UGANDA:Arua:Vurra
+1:UG:UGA:UGANDA:Soroti:Amuria
+2:UG:UGA:UGANDA:Soroti:Kaberamaido
+3:UG:UGA:UGANDA:Soroti:Kalaki
+4:UG:UGA:UGANDA:Soroti:Kapelebyong
+5:UG:UGA:UGANDA:Soroti:Kasilo
+6:UG:UGA:UGANDA:Soroti:Serere
+7:UG:UGA:UGANDA:Soroti:Soroti
+8:UG:UGA:UGANDA:Soroti:Soroti Municipality
+9:UG:UGA:UGANDA:Soroti:Usuk
+1:UG:UGA:UGANDA:Rakai:Kabula
+2:UG:UGA:UGANDA:Rakai:Kakuuto
+3:UG:UGA:UGANDA:Rakai:Kooki
+4:UG:UGA:UGANDA:Rakai:Kyotera
+1:UG:UGA:UGANDA:Moroto:Bokora
+2:UG:UGA:UGANDA:Moroto:Kadam (Chekwii)
+3:UG:UGA:UGANDA:Moroto:Matheniko
+4:UG:UGA:UGANDA:Moroto:Moroto Municipality
+5:UG:UGA:UGANDA:Moroto:Pian
+6:UG:UGA:UGANDA:Moroto:Upe
+1:UG:UGA:UGANDA:Mbale:Bubulo
+2:UG:UGA:UGANDA:Mbale:Budadiri
+3:UG:UGA:UGANDA:Mbale:Bulambuli
+4:UG:UGA:UGANDA:Mbale:Bungokho
+5:UG:UGA:UGANDA:Mbale:Majiya
+6:UG:UGA:UGANDA:Mbale:Mbale Municipality
+1:UG:UGA:UGANDA:Bundibugyo:Bwamba
+2:UG:UGA:UGANDA:Bundibugyo:Ntoroko
+1:UG:UGA:UGANDA:Mubende:Busujju
+2:UG:UGA:UGANDA:Mubende:Buwekula
+3:UG:UGA:UGANDA:Mubende:Kassanda
+4:UG:UGA:UGANDA:Mubende:Mityana
+1:UG:UGA:UGANDA:Lake Victoria:UGA.L2.1
+2:UG:UGA:UGANDA:Lake Victoria:UGA.L2.10
+3:UG:UGA:UGANDA:Lake Victoria:UGA.L2.11
+4:UG:UGA:UGANDA:Lake Victoria:UGA.L2.12
+5:UG:UGA:UGANDA:Lake Victoria:UGA.L2.13
+6:UG:UGA:UGANDA:Lake Victoria:UGA.L2.14
+7:UG:UGA:UGANDA:Lake Victoria:UGA.L2.15
+8:UG:UGA:UGANDA:Lake Victoria:UGA.L2.16
+9:UG:UGA:UGANDA:Lake Victoria:UGA.L2.17
+10:UG:UGA:UGANDA:Lake Victoria:UGA.L2.18
+11:UG:UGA:UGANDA:Lake Victoria:UGA.L2.19
+12:UG:UGA:UGANDA:Lake Victoria:UGA.L2.2
+13:UG:UGA:UGANDA:Lake Victoria:UGA.L2.20
+14:UG:UGA:UGANDA:Lake Victoria:UGA.L2.21
+15:UG:UGA:UGANDA:Lake Victoria:UGA.L2.22
+16:UG:UGA:UGANDA:Lake Victoria:UGA.L2.3
+17:UG:UGA:UGANDA:Lake Victoria:UGA.L2.4
+18:UG:UGA:UGANDA:Lake Victoria:UGA.L2.5
+19:UG:UGA:UGANDA:Lake Victoria:UGA.L2.6
+20:UG:UGA:UGANDA:Lake Victoria:UGA.L2.7
+21:UG:UGA:UGANDA:Lake Victoria:UGA.L2.8
+22:UG:UGA:UGANDA:Lake Victoria:UGA.L2.9
+1:UG:UGA:UGANDA:Kasese:Bukonjo
+2:UG:UGA:UGANDA:Kasese:Busongora
+1:UG:UGA:UGANDA:Pallisa:Budaka
+2:UG:UGA:UGANDA:Pallisa:Butebo
+3:UG:UGA:UGANDA:Pallisa:Kibuku
+4:UG:UGA:UGANDA:Pallisa:Pallisa
+1:UG:UGA:UGANDA:Masindi:Bujenje
+2:UG:UGA:UGANDA:Masindi:Buliisa
+3:UG:UGA:UGANDA:Masindi:Buruli
+4:UG:UGA:UGANDA:Masindi:Kibanda
+1:UG:UGA:UGANDA:Kampala:Kampala City Council
+1:UG:UGA:UGANDA:Kabarole:Bunyangabu
+2:UG:UGA:UGANDA:Kabarole:Burahya
+3:UG:UGA:UGANDA:Kabarole:Fort Portal Municipality
+4:UG:UGA:UGANDA:Kabarole:Kibale
+5:UG:UGA:UGANDA:Kabarole:Kitagwenda
+6:UG:UGA:UGANDA:Kabarole:Kyaka
+7:UG:UGA:UGANDA:Kabarole:Mwenge
+1:UG:UGA:UGANDA:Gulu:Aswa
+2:UG:UGA:UGANDA:Gulu:Gulu Municipality
+3:UG:UGA:UGANDA:Gulu:Kilak
+4:UG:UGA:UGANDA:Gulu:Nwoya
+5:UG:UGA:UGANDA:Gulu:Omoro
+1:UG:UGA:UGANDA:Masaka:Bukomansimbi
+2:UG:UGA:UGANDA:Masaka:Bukoto
+3:UG:UGA:UGANDA:Masaka:Kalungu
+4:UG:UGA:UGANDA:Masaka:Lwemiyaga
+5:UG:UGA:UGANDA:Masaka:Masaka Municipality
+6:UG:UGA:UGANDA:Masaka:Mawogola
+1:UG:UGA:UGANDA:Luwero:Buruli
+2:UG:UGA:UGANDA:Luwero:Katikamu
+3:UG:UGA:UGANDA:Luwero:Nakaseke
+4:UG:UGA:UGANDA:Luwero:Wabusana (Bamunanika)
+1:UG:UGA:UGANDA:Kalangala:Bujumba
+2:UG:UGA:UGANDA:Kalangala:Kyamuswa
+1:UG:UGA:UGANDA:Mpigi:Busiro
+2:UG:UGA:UGANDA:Mpigi:Butambala
+3:UG:UGA:UGANDA:Mpigi:Entebbe Municipality
+4:UG:UGA:UGANDA:Mpigi:Gomba
+5:UG:UGA:UGANDA:Mpigi:Kyadondo
+6:UG:UGA:UGANDA:Mpigi:Mawokota
+1:UG:UGA:UGANDA:Jinja:Butembe
+2:UG:UGA:UGANDA:Jinja:Jinja Municipality
+3:UG:UGA:UGANDA:Jinja:Kagoma
+1:UG:UGA:UGANDA:Kiboga:Kiboga
+1:UG:UGA:UGANDA:Kabale:Kabale Municipality
+2:UG:UGA:UGANDA:Kabale:Ndorwa
+3:UG:UGA:UGANDA:Kabale:Rubanda
+4:UG:UGA:UGANDA:Kabale:Rukiga
+1:UG:UGA:UGANDA:Apac:Kole
+2:UG:UGA:UGANDA:Apac:Kwania
+3:UG:UGA:UGANDA:Apac:Maruzi
+4:UG:UGA:UGANDA:Apac:Oyam
+1:UG:UGA:UGANDA:Nebbi:Jonam
+2:UG:UGA:UGANDA:Nebbi:Okoro
+3:UG:UGA:UGANDA:Nebbi:Padyere
+1:UG:UGA:UGANDA:Mbarara:Bukanga
+2:UG:UGA:UGANDA:Mbarara:Ibanda
+3:UG:UGA:UGANDA:Mbarara:Isingiro
+4:UG:UGA:UGANDA:Mbarara:Kashari
+5:UG:UGA:UGANDA:Mbarara:Kazo
+6:UG:UGA:UGANDA:Mbarara:Mbarara Municipality
+7:UG:UGA:UGANDA:Mbarara:Nyabushozi
+8:UG:UGA:UGANDA:Mbarara:Ruhaama
+9:UG:UGA:UGANDA:Mbarara:Rwampara
+1:UG:UGA:UGANDA:Kibaale:Bugangaizi
+2:UG:UGA:UGANDA:Kibaale:Buyaga
+3:UG:UGA:UGANDA:Kibaale:Buyanja
+1:UG:UGA:UGANDA:Kisoro:Bufumbira
+1:UG:UGA:UGANDA:Hoima:Bugahya
+2:UG:UGA:UGANDA:Hoima:Buhaguzi
+1:UG:UGA:UGANDA:Kumi:Bukedea
+2:UG:UGA:UGANDA:Kumi:Kumi
+3:UG:UGA:UGANDA:Kumi:Ngora
+1:UG:UGA:UGANDA:Iganga:Bugweri
+2:UG:UGA:UGANDA:Iganga:Bukooli
+3:UG:UGA:UGANDA:Iganga:Bunya
+4:UG:UGA:UGANDA:Iganga:Busiki
+5:UG:UGA:UGANDA:Iganga:Kigulu
+6:UG:UGA:UGANDA:Iganga:Luuka
+1:UG:UGA:UGANDA:Bushenyi:Buhweju
+2:UG:UGA:UGANDA:Bushenyi:Bunyaruguru
+3:UG:UGA:UGANDA:Bushenyi:Igara
+4:UG:UGA:UGANDA:Bushenyi:Kajara
+5:UG:UGA:UGANDA:Bushenyi:Ruhinda
+6:UG:UGA:UGANDA:Bushenyi:Rushenyi
+7:UG:UGA:UGANDA:Bushenyi:Sheema
+1:UG:UGA:UGANDA:Kamuli:Budiope
+2:UG:UGA:UGANDA:Kamuli:Bugabula
+3:UG:UGA:UGANDA:Kamuli:Bulamogi
+4:UG:UGA:UGANDA:Kamuli:Buzaaya
+1:UG:UGA:UGANDA:Kotido:Dodoth
+2:UG:UGA:UGANDA:Kotido:Jie
+3:UG:UGA:UGANDA:Kotido:Labwor
+1:UG:UGA:UGANDA:Tororo:Bunyole
+2:UG:UGA:UGANDA:Tororo:Kisoko (West Budama)
+3:UG:UGA:UGANDA:Tororo:Samia-Bugwe
+4:UG:UGA:UGANDA:Tororo:Tororo
+5:UG:UGA:UGANDA:Tororo:Tororo Municipality
+1:UG:UGA:UGANDA:Moyo:East Moyo
+2:UG:UGA:UGANDA:Moyo:Obongi
+3:UG:UGA:UGANDA:Moyo:West Moyo
+1:UG:UGA:UGANDA:Lira:Dokolo
+2:UG:UGA:UGANDA:Lira:Erute
+3:UG:UGA:UGANDA:Lira:Kioga
+4:UG:UGA:UGANDA:Lira:Lira Municipality
+5:UG:UGA:UGANDA:Lira:Moroto
+6:UG:UGA:UGANDA:Lira:Otuke
+1:UG:UGA:UGANDA:Kitgum:Agago
+2:UG:UGA:UGANDA:Kitgum:Aruu
+3:UG:UGA:UGANDA:Kitgum:Chua
+4:UG:UGA:UGANDA:Kitgum:Lamwo
+1:UG:UGA:UGANDA:Kapchorwa:Kongasis
+2:UG:UGA:UGANDA:Kapchorwa:Kween
+3:UG:UGA:UGANDA:Kapchorwa:Tingey
+1:UG:UGA:UGANDA:Mukono:Bbaale
+2:UG:UGA:UGANDA:Mukono:Buvuma Islands
+3:UG:UGA:UGANDA:Mukono:Buyikwe
+4:UG:UGA:UGANDA:Mukono:Mukono
+5:UG:UGA:UGANDA:Mukono:Nakifuma
+6:UG:UGA:UGANDA:Mukono:Ntenjeru
diff --git a/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN1_LEX.txt
new file mode 100644
index 0000000..22cd1d6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN1_LEX.txt
@@ -0,0 +1,19 @@
+1:UY-AR:UY:ARTIGAS
+2:UY-CA:UY:CANELONES
+3:UY-CL:UY:CERRO LARGO
+4:UY-CO:UY:COLONIA
+5:UY-DU:UY:DURAZNO
+6:UY-FS:UY:FLORES
+7:UY-FD:UY:FLORIDA
+8:UY-LA:UY:LAVALLEJA
+9:UY-MA:UY:MALDONADO
+10:UY-MO:UY:MONTEVIDEO
+11:UY-PA:UY:PAYSANDU
+12:UY-RN:UY:RIO NEGRO
+13:UY-RV:UY:RIVERA
+14:UY-RO:UY:ROCHA
+15:UY-SA:UY:SALTO
+16:UY-SJ:UY:SAN JOSE
+17:UY-SO:UY:SORIANO
+18:UY-TA:UY:TACUAREMBO
+19:UY-TT:UY:TREINTA Y TRES
diff --git a/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN2_LEX.txt
new file mode 100644
index 0000000..8ddfdc0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/URY/URY_ADMIN2_LEX.txt
@@ -0,0 +1,36 @@
+1:UY:URY:URUGUAY:FLORES:URY.L2.4
+1:UY:URY:URUGUAY:ARTIGAS:URY.L2.12
+1:UY:URY:URUGUAY:COLONIA:Isla
+2:UY:URY:URUGUAY:COLONIA:URY.L2.16
+1:UY:URY:URUGUAY:MONTEVIDEO:URY.L2.17
+1:UY:URY:URUGUAY:ROCHA:URY.L2.13
+2:UY:URY:URUGUAY:ROCHA:URY.L2.14
+1:UY:URY:URUGUAY:PAYSANDU:URY.L2.25
+2:UY:URY:URUGUAY:PAYSANDU:URY.L2.26
+1:UY:URY:URUGUAY:RIO NEGRO:Rio Negro
+2:UY:URY:URUGUAY:RIO NEGRO:URY.L2.10
+3:UY:URY:URUGUAY:RIO NEGRO:URY.L2.7
+4:UY:URY:URUGUAY:RIO NEGRO:URY.L2.8
+5:UY:URY:URUGUAY:RIO NEGRO:URY.L2.9
+1:UY:URY:URUGUAY:TACUAREMBO:URY.L2.2
+1:UY:URY:URUGUAY:RIVERA:URY.L2.28
+1:UY:URY:URUGUAY:CANELONES:Rio Santa
+2:UY:URY:URUGUAY:CANELONES:URY.L2.19
+1:UY:URY:URUGUAY:TREINTA Y TRES:Lag. Guacha
+2:UY:URY:URUGUAY:TREINTA Y TRES:Lago
+3:UY:URY:URUGUAY:TREINTA Y TRES:Laguna
+4:UY:URY:URUGUAY:TREINTA Y TRES:URY.L2.20
+5:UY:URY:URUGUAY:TREINTA Y TRES:URY.L2.21
+6:UY:URY:URUGUAY:TREINTA Y TRES:URY.L2.22
+7:UY:URY:URUGUAY:TREINTA Y TRES:URY.L2.23
+8:UY:URY:URUGUAY:TREINTA Y TRES:URY.L2.24
+1:UY:URY:URUGUAY:FLORIDA:URY.L2.5
+1:UY:URY:URUGUAY:LAVALLEJA:Lago
+2:UY:URY:URUGUAY:LAVALLEJA:URY.L2.1
+1:UY:URY:URUGUAY:MALDONADO:Isla
+2:UY:URY:URUGUAY:MALDONADO:URY.L2.18
+1:UY:URY:URUGUAY:SALTO:URY.L2.3
+1:UY:URY:URUGUAY:SAN JOSE:URY.L2.6
+1:UY:URY:URUGUAY:CERRO LARGO:URY.L2.15
+1:UY:URY:URUGUAY:SORIANO:URY.L2.27
+1:UY:URY:URUGUAY:DURAZNO:URY.L2.11
diff --git a/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN1_LEX.txt
new file mode 100644
index 0000000..3268298
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN1_LEX.txt
@@ -0,0 +1,56 @@
+1:US-AL:US:ALABAMA
+2:US-AK:US:ALASKA
+3:US-AZ:US:ARIZONA
+4:US-AR:US:ARKANSAS
+5:US-DUMMY1:US:ARL
+6:US-CA:US:CALIFORNIA
+7:US-DUMMY2:US:CAM
+8:US-CO:US:COLORADO
+9:US-CT:US:CONNECTICUT
+10:US-DE:US:DELAWARE
+11:US-DC:US:DISTRICT OF COLUMBIA
+12:US-FL:US:FLORIDA
+13:US-GA:US:GEORGIA
+14:US-DUMMY3:US:GEP
+15:US-HI:US:HAWAII
+16:US-ID:US:IDAHO
+17:US-IL:US:ILLINOIS
+18:US-IN:US:INDIANA
+19:US-IA:US:IOWA
+20:US-KS:US:KANSAS
+21:US-KY:US:KENTUCKY
+22:US-LA:US:LOUISIANA
+23:US-ME:US:MAINE
+24:US-MD:US:MARYLAND
+25:US-MA:US:MASSACHUSETTS
+26:US-MI:US:MICHIGAN
+27:US-MN:US:MINNESOTA
+28:US-MS:US:MISSISSIPPI
+29:US-MO:US:MISSOURI
+30:US-MT:US:MONTANA
+31:US-NE:US:NEBRASKA
+32:US-NV:US:NEVADA
+33:US-NH:US:NEW HAMPSHIRE
+34:US-NJ:US:NEW JERSEY
+35:US-NM:US:NEW MEXICO
+36:US-NY:US:NEW YORK
+37:US-NC:US:NORTH CAROLINA
+38:US-ND:US:NORTH DAKOTA
+39:US-OH:US:OHIO
+40:US-OK:US:OKLAHOMA
+41:US-OR:US:OREGON
+42:US-PA:US:PENNSYLVANIA
+43:US-PR:US:PUERTO RICO
+44:US-RI:US:RHODE ISLAND
+45:US-SC:US:SOUTH CAROLINA
+46:US-SD:US:SOUTH DAKOTA
+47:US-TN:US:TENNESSEE
+48:US-TX:US:TEXAS
+49:US-UT:US:UTAH
+50:US-VT:US:VERMONT
+51:US-VA:US:VIRGINIA
+52:US-DUMMY4:US:VIS
+53:US-WA:US:WASHINGTON
+54:US-WV:US:WEST VIRGINIA
+55:US-WI:US:WISCONSIN
+56:US-WY:US:WYOMING
diff --git a/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN2_LEX.txt
new file mode 100644
index 0000000..3fa2833
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/USA/USA_ADMIN2_LEX.txt
@@ -0,0 +1,3141 @@
+1:US:USA:UNITED STATES:WYOMING:Albany County
+2:US:USA:UNITED STATES:WYOMING:Big Horn County
+3:US:USA:UNITED STATES:WYOMING:Campbell County
+4:US:USA:UNITED STATES:WYOMING:Carbon County
+5:US:USA:UNITED STATES:WYOMING:Converse County
+6:US:USA:UNITED STATES:WYOMING:Crook County
+7:US:USA:UNITED STATES:WYOMING:Fremont County
+8:US:USA:UNITED STATES:WYOMING:Goshen County
+9:US:USA:UNITED STATES:WYOMING:Hot Springs County
+10:US:USA:UNITED STATES:WYOMING:Johnson County
+11:US:USA:UNITED STATES:WYOMING:Laramie County
+12:US:USA:UNITED STATES:WYOMING:Lincoln County
+13:US:USA:UNITED STATES:WYOMING:Natrona County
+14:US:USA:UNITED STATES:WYOMING:Niobrara County
+15:US:USA:UNITED STATES:WYOMING:Park County
+16:US:USA:UNITED STATES:WYOMING:Platte County
+17:US:USA:UNITED STATES:WYOMING:Sheridan County
+18:US:USA:UNITED STATES:WYOMING:Sublette County
+19:US:USA:UNITED STATES:WYOMING:Sweetwater County
+20:US:USA:UNITED STATES:WYOMING:Teton County
+21:US:USA:UNITED STATES:WYOMING:Uinta County
+22:US:USA:UNITED STATES:WYOMING:Washakie County
+23:US:USA:UNITED STATES:WYOMING:Weston County
+1:US:USA:UNITED STATES:GEORGIA:Appling County
+2:US:USA:UNITED STATES:GEORGIA:Atkinson County
+3:US:USA:UNITED STATES:GEORGIA:Bacon County
+4:US:USA:UNITED STATES:GEORGIA:Baker County
+5:US:USA:UNITED STATES:GEORGIA:Baldwin County
+6:US:USA:UNITED STATES:GEORGIA:Banks County
+7:US:USA:UNITED STATES:GEORGIA:Barrow County
+8:US:USA:UNITED STATES:GEORGIA:Bartow County
+9:US:USA:UNITED STATES:GEORGIA:Ben Hill County
+10:US:USA:UNITED STATES:GEORGIA:Berrien County
+11:US:USA:UNITED STATES:GEORGIA:Bibb County
+12:US:USA:UNITED STATES:GEORGIA:Bleckley County
+13:US:USA:UNITED STATES:GEORGIA:Brantley County
+14:US:USA:UNITED STATES:GEORGIA:Brooks County
+15:US:USA:UNITED STATES:GEORGIA:Bryan County
+16:US:USA:UNITED STATES:GEORGIA:Bulloch County
+17:US:USA:UNITED STATES:GEORGIA:Burke County
+18:US:USA:UNITED STATES:GEORGIA:Butts County
+19:US:USA:UNITED STATES:GEORGIA:Calhoun County
+20:US:USA:UNITED STATES:GEORGIA:Camden County
+21:US:USA:UNITED STATES:GEORGIA:Candler County
+22:US:USA:UNITED STATES:GEORGIA:Carroll County
+23:US:USA:UNITED STATES:GEORGIA:Catoosa County
+24:US:USA:UNITED STATES:GEORGIA:Charlton County
+25:US:USA:UNITED STATES:GEORGIA:Chatham County
+26:US:USA:UNITED STATES:GEORGIA:Chattahoochee County
+27:US:USA:UNITED STATES:GEORGIA:Chattooga County
+28:US:USA:UNITED STATES:GEORGIA:Cherokee County
+29:US:USA:UNITED STATES:GEORGIA:Clarke County
+30:US:USA:UNITED STATES:GEORGIA:Clay County
+31:US:USA:UNITED STATES:GEORGIA:Clayton County
+32:US:USA:UNITED STATES:GEORGIA:Clinch County
+33:US:USA:UNITED STATES:GEORGIA:Cobb County
+34:US:USA:UNITED STATES:GEORGIA:Coffee County
+35:US:USA:UNITED STATES:GEORGIA:Colquitt County
+36:US:USA:UNITED STATES:GEORGIA:Columbia County
+37:US:USA:UNITED STATES:GEORGIA:Cook County
+38:US:USA:UNITED STATES:GEORGIA:Coweta County
+39:US:USA:UNITED STATES:GEORGIA:Crawford County
+40:US:USA:UNITED STATES:GEORGIA:Crisp County
+41:US:USA:UNITED STATES:GEORGIA:Dade County
+42:US:USA:UNITED STATES:GEORGIA:Dawson County
+43:US:USA:UNITED STATES:GEORGIA:DeKalb County
+44:US:USA:UNITED STATES:GEORGIA:Decatur County
+45:US:USA:UNITED STATES:GEORGIA:Dodge County
+46:US:USA:UNITED STATES:GEORGIA:Dooly County
+47:US:USA:UNITED STATES:GEORGIA:Dougherty County
+48:US:USA:UNITED STATES:GEORGIA:Douglas County
+49:US:USA:UNITED STATES:GEORGIA:Early County
+50:US:USA:UNITED STATES:GEORGIA:Echols County
+51:US:USA:UNITED STATES:GEORGIA:Effingham County
+52:US:USA:UNITED STATES:GEORGIA:Elbert County
+53:US:USA:UNITED STATES:GEORGIA:Emanuel County
+54:US:USA:UNITED STATES:GEORGIA:Evans County
+55:US:USA:UNITED STATES:GEORGIA:Fannin County
+56:US:USA:UNITED STATES:GEORGIA:Fayette County
+57:US:USA:UNITED STATES:GEORGIA:Floyd County
+58:US:USA:UNITED STATES:GEORGIA:Forsyth County
+59:US:USA:UNITED STATES:GEORGIA:Franklin County
+60:US:USA:UNITED STATES:GEORGIA:Fulton County
+61:US:USA:UNITED STATES:GEORGIA:Gilmer County
+62:US:USA:UNITED STATES:GEORGIA:Glascock County
+63:US:USA:UNITED STATES:GEORGIA:Glynn County
+64:US:USA:UNITED STATES:GEORGIA:Gordon County
+65:US:USA:UNITED STATES:GEORGIA:Grady County
+66:US:USA:UNITED STATES:GEORGIA:Greene County
+67:US:USA:UNITED STATES:GEORGIA:Gwinnett County
+68:US:USA:UNITED STATES:GEORGIA:Habersham County
+69:US:USA:UNITED STATES:GEORGIA:Hall County
+70:US:USA:UNITED STATES:GEORGIA:Hancock County
+71:US:USA:UNITED STATES:GEORGIA:Haralson County
+72:US:USA:UNITED STATES:GEORGIA:Harris County
+73:US:USA:UNITED STATES:GEORGIA:Hart County
+74:US:USA:UNITED STATES:GEORGIA:Heard County
+75:US:USA:UNITED STATES:GEORGIA:Henry County
+76:US:USA:UNITED STATES:GEORGIA:Houston County
+77:US:USA:UNITED STATES:GEORGIA:Irwin County
+78:US:USA:UNITED STATES:GEORGIA:Jackson County
+79:US:USA:UNITED STATES:GEORGIA:Jasper County
+80:US:USA:UNITED STATES:GEORGIA:Jeff Davis County
+81:US:USA:UNITED STATES:GEORGIA:Jefferson County
+82:US:USA:UNITED STATES:GEORGIA:Jenkins County
+83:US:USA:UNITED STATES:GEORGIA:Johnson County
+84:US:USA:UNITED STATES:GEORGIA:Jones County
+85:US:USA:UNITED STATES:GEORGIA:Lamar County
+86:US:USA:UNITED STATES:GEORGIA:Lanier County
+87:US:USA:UNITED STATES:GEORGIA:Laurens County
+88:US:USA:UNITED STATES:GEORGIA:Lee County
+89:US:USA:UNITED STATES:GEORGIA:Liberty County
+90:US:USA:UNITED STATES:GEORGIA:Lincoln County
+91:US:USA:UNITED STATES:GEORGIA:Long County
+92:US:USA:UNITED STATES:GEORGIA:Lowndes County
+93:US:USA:UNITED STATES:GEORGIA:Lumpkin County
+94:US:USA:UNITED STATES:GEORGIA:Macon County
+95:US:USA:UNITED STATES:GEORGIA:Madison County
+96:US:USA:UNITED STATES:GEORGIA:Marion County
+97:US:USA:UNITED STATES:GEORGIA:McDuffie County
+98:US:USA:UNITED STATES:GEORGIA:McIntosh County
+99:US:USA:UNITED STATES:GEORGIA:Meriwether County
+100:US:USA:UNITED STATES:GEORGIA:Miller County
+101:US:USA:UNITED STATES:GEORGIA:Mitchell County
+102:US:USA:UNITED STATES:GEORGIA:Monroe County
+103:US:USA:UNITED STATES:GEORGIA:Montgomery County
+104:US:USA:UNITED STATES:GEORGIA:Morgan County
+105:US:USA:UNITED STATES:GEORGIA:Murray County
+106:US:USA:UNITED STATES:GEORGIA:Muscogee County
+107:US:USA:UNITED STATES:GEORGIA:Newton County
+108:US:USA:UNITED STATES:GEORGIA:Oconee County
+109:US:USA:UNITED STATES:GEORGIA:Oglethorpe County
+110:US:USA:UNITED STATES:GEORGIA:Paulding County
+111:US:USA:UNITED STATES:GEORGIA:Peach County
+112:US:USA:UNITED STATES:GEORGIA:Pickens County
+113:US:USA:UNITED STATES:GEORGIA:Pierce County
+114:US:USA:UNITED STATES:GEORGIA:Pike County
+115:US:USA:UNITED STATES:GEORGIA:Polk County
+116:US:USA:UNITED STATES:GEORGIA:Pulaski County
+117:US:USA:UNITED STATES:GEORGIA:Putnam County
+118:US:USA:UNITED STATES:GEORGIA:Quitman County
+119:US:USA:UNITED STATES:GEORGIA:Rabun County
+120:US:USA:UNITED STATES:GEORGIA:Randolph County
+121:US:USA:UNITED STATES:GEORGIA:Richmond County
+122:US:USA:UNITED STATES:GEORGIA:Rockdale County
+123:US:USA:UNITED STATES:GEORGIA:Schley County
+124:US:USA:UNITED STATES:GEORGIA:Screven County
+125:US:USA:UNITED STATES:GEORGIA:Seminole County
+126:US:USA:UNITED STATES:GEORGIA:Spalding County
+127:US:USA:UNITED STATES:GEORGIA:Stephens County
+128:US:USA:UNITED STATES:GEORGIA:Stewart County
+129:US:USA:UNITED STATES:GEORGIA:Sumter County
+130:US:USA:UNITED STATES:GEORGIA:Talbot County
+131:US:USA:UNITED STATES:GEORGIA:Taliaferro County
+132:US:USA:UNITED STATES:GEORGIA:Tattnall County
+133:US:USA:UNITED STATES:GEORGIA:Taylor County
+134:US:USA:UNITED STATES:GEORGIA:Telfair County
+135:US:USA:UNITED STATES:GEORGIA:Terrell County
+136:US:USA:UNITED STATES:GEORGIA:Thomas County
+137:US:USA:UNITED STATES:GEORGIA:Tift County
+138:US:USA:UNITED STATES:GEORGIA:Toombs County
+139:US:USA:UNITED STATES:GEORGIA:Towns County
+140:US:USA:UNITED STATES:GEORGIA:Treutlen County
+141:US:USA:UNITED STATES:GEORGIA:Troup County
+142:US:USA:UNITED STATES:GEORGIA:Turner County
+143:US:USA:UNITED STATES:GEORGIA:Twiggs County
+144:US:USA:UNITED STATES:GEORGIA:Union County
+145:US:USA:UNITED STATES:GEORGIA:Upson County
+146:US:USA:UNITED STATES:GEORGIA:Walker County
+147:US:USA:UNITED STATES:GEORGIA:Walton County
+148:US:USA:UNITED STATES:GEORGIA:Ware County
+149:US:USA:UNITED STATES:GEORGIA:Warren County
+150:US:USA:UNITED STATES:GEORGIA:Washington County
+151:US:USA:UNITED STATES:GEORGIA:Wayne County
+152:US:USA:UNITED STATES:GEORGIA:Webster County
+153:US:USA:UNITED STATES:GEORGIA:Wheeler County
+154:US:USA:UNITED STATES:GEORGIA:White County
+155:US:USA:UNITED STATES:GEORGIA:Whitfield County
+156:US:USA:UNITED STATES:GEORGIA:Wilcox County
+157:US:USA:UNITED STATES:GEORGIA:Wilkes County
+158:US:USA:UNITED STATES:GEORGIA:Wilkinson County
+159:US:USA:UNITED STATES:GEORGIA:Worth County
+1:US:USA:UNITED STATES:COLORADO:Adams County
+2:US:USA:UNITED STATES:COLORADO:Alamosa County
+3:US:USA:UNITED STATES:COLORADO:Arapahoe County
+4:US:USA:UNITED STATES:COLORADO:Archuleta County
+5:US:USA:UNITED STATES:COLORADO:Baca County
+6:US:USA:UNITED STATES:COLORADO:Bent County
+7:US:USA:UNITED STATES:COLORADO:Boulder County
+8:US:USA:UNITED STATES:COLORADO:Chaffee County
+9:US:USA:UNITED STATES:COLORADO:Cheyenne County
+10:US:USA:UNITED STATES:COLORADO:Clear Creek County
+11:US:USA:UNITED STATES:COLORADO:Conejos County
+12:US:USA:UNITED STATES:COLORADO:Costilla County
+13:US:USA:UNITED STATES:COLORADO:Crowley County
+14:US:USA:UNITED STATES:COLORADO:Custer County
+15:US:USA:UNITED STATES:COLORADO:Delta County
+16:US:USA:UNITED STATES:COLORADO:Denver County
+17:US:USA:UNITED STATES:COLORADO:Dolores County
+18:US:USA:UNITED STATES:COLORADO:Douglas County
+19:US:USA:UNITED STATES:COLORADO:Eagle County
+20:US:USA:UNITED STATES:COLORADO:El Paso County
+21:US:USA:UNITED STATES:COLORADO:Elbert County
+22:US:USA:UNITED STATES:COLORADO:Fremont County
+23:US:USA:UNITED STATES:COLORADO:Garfield County
+24:US:USA:UNITED STATES:COLORADO:Gilpin County
+25:US:USA:UNITED STATES:COLORADO:Grand County
+26:US:USA:UNITED STATES:COLORADO:Gunnison County
+27:US:USA:UNITED STATES:COLORADO:Hinsdale County
+28:US:USA:UNITED STATES:COLORADO:Huerfano County
+29:US:USA:UNITED STATES:COLORADO:Jackson County
+30:US:USA:UNITED STATES:COLORADO:Jefferson County
+31:US:USA:UNITED STATES:COLORADO:Kiowa County
+32:US:USA:UNITED STATES:COLORADO:Kit Carson County
+33:US:USA:UNITED STATES:COLORADO:La Plata County
+34:US:USA:UNITED STATES:COLORADO:Lake County
+35:US:USA:UNITED STATES:COLORADO:Larimer County
+36:US:USA:UNITED STATES:COLORADO:Las Animas County
+37:US:USA:UNITED STATES:COLORADO:Lincoln County
+38:US:USA:UNITED STATES:COLORADO:Logan County
+39:US:USA:UNITED STATES:COLORADO:Mesa County
+40:US:USA:UNITED STATES:COLORADO:Mineral County
+41:US:USA:UNITED STATES:COLORADO:Moffat County
+42:US:USA:UNITED STATES:COLORADO:Montezuma County
+43:US:USA:UNITED STATES:COLORADO:Montrose County
+44:US:USA:UNITED STATES:COLORADO:Morgan County
+45:US:USA:UNITED STATES:COLORADO:Otero County
+46:US:USA:UNITED STATES:COLORADO:Ouray County
+47:US:USA:UNITED STATES:COLORADO:Park County
+48:US:USA:UNITED STATES:COLORADO:Phillips County
+49:US:USA:UNITED STATES:COLORADO:Pitkin County
+50:US:USA:UNITED STATES:COLORADO:Prowers County
+51:US:USA:UNITED STATES:COLORADO:Pueblo County
+52:US:USA:UNITED STATES:COLORADO:Rio Blanco County
+53:US:USA:UNITED STATES:COLORADO:Rio Grande County
+54:US:USA:UNITED STATES:COLORADO:Routt County
+55:US:USA:UNITED STATES:COLORADO:Saguache County
+56:US:USA:UNITED STATES:COLORADO:San Juan County
+57:US:USA:UNITED STATES:COLORADO:San Miguel County
+58:US:USA:UNITED STATES:COLORADO:Sedgwick County
+59:US:USA:UNITED STATES:COLORADO:Summit County
+60:US:USA:UNITED STATES:COLORADO:Teller County
+61:US:USA:UNITED STATES:COLORADO:Washington County
+62:US:USA:UNITED STATES:COLORADO:Weld County
+63:US:USA:UNITED STATES:COLORADO:Yuma County
+1:US:USA:UNITED STATES:NEBRASKA:Adams County
+2:US:USA:UNITED STATES:NEBRASKA:Antelope County
+3:US:USA:UNITED STATES:NEBRASKA:Arthur County
+4:US:USA:UNITED STATES:NEBRASKA:Banner County
+5:US:USA:UNITED STATES:NEBRASKA:Blaine County
+6:US:USA:UNITED STATES:NEBRASKA:Boone County
+7:US:USA:UNITED STATES:NEBRASKA:Box Butte County
+8:US:USA:UNITED STATES:NEBRASKA:Boyd County
+9:US:USA:UNITED STATES:NEBRASKA:Brown County
+10:US:USA:UNITED STATES:NEBRASKA:Buffalo County
+11:US:USA:UNITED STATES:NEBRASKA:Burt County
+12:US:USA:UNITED STATES:NEBRASKA:Butler County
+13:US:USA:UNITED STATES:NEBRASKA:Cass County
+14:US:USA:UNITED STATES:NEBRASKA:Cedar County
+15:US:USA:UNITED STATES:NEBRASKA:Chase County
+16:US:USA:UNITED STATES:NEBRASKA:Cherry County
+17:US:USA:UNITED STATES:NEBRASKA:Cheyenne County
+18:US:USA:UNITED STATES:NEBRASKA:Clay County
+19:US:USA:UNITED STATES:NEBRASKA:Colfax County
+20:US:USA:UNITED STATES:NEBRASKA:Cuming County
+21:US:USA:UNITED STATES:NEBRASKA:Custer County
+22:US:USA:UNITED STATES:NEBRASKA:Dakota County
+23:US:USA:UNITED STATES:NEBRASKA:Dawes County
+24:US:USA:UNITED STATES:NEBRASKA:Dawson County
+25:US:USA:UNITED STATES:NEBRASKA:Deuel County
+26:US:USA:UNITED STATES:NEBRASKA:Dixon County
+27:US:USA:UNITED STATES:NEBRASKA:Dodge County
+28:US:USA:UNITED STATES:NEBRASKA:Douglas County
+29:US:USA:UNITED STATES:NEBRASKA:Dundy County
+30:US:USA:UNITED STATES:NEBRASKA:Fillmore County
+31:US:USA:UNITED STATES:NEBRASKA:Franklin County
+32:US:USA:UNITED STATES:NEBRASKA:Frontier County
+33:US:USA:UNITED STATES:NEBRASKA:Furnas County
+34:US:USA:UNITED STATES:NEBRASKA:Gage County
+35:US:USA:UNITED STATES:NEBRASKA:Garden County
+36:US:USA:UNITED STATES:NEBRASKA:Garfield County
+37:US:USA:UNITED STATES:NEBRASKA:Gosper County
+38:US:USA:UNITED STATES:NEBRASKA:Grant County
+39:US:USA:UNITED STATES:NEBRASKA:Greeley County
+40:US:USA:UNITED STATES:NEBRASKA:Hall County
+41:US:USA:UNITED STATES:NEBRASKA:Hamilton County
+42:US:USA:UNITED STATES:NEBRASKA:Harlan County
+43:US:USA:UNITED STATES:NEBRASKA:Hayes County
+44:US:USA:UNITED STATES:NEBRASKA:Hitchcock County
+45:US:USA:UNITED STATES:NEBRASKA:Holt County
+46:US:USA:UNITED STATES:NEBRASKA:Hooker County
+47:US:USA:UNITED STATES:NEBRASKA:Howard County
+48:US:USA:UNITED STATES:NEBRASKA:Jefferson County
+49:US:USA:UNITED STATES:NEBRASKA:Johnson County
+50:US:USA:UNITED STATES:NEBRASKA:Kearney County
+51:US:USA:UNITED STATES:NEBRASKA:Keith County
+52:US:USA:UNITED STATES:NEBRASKA:Keya Paha County
+53:US:USA:UNITED STATES:NEBRASKA:Kimball County
+54:US:USA:UNITED STATES:NEBRASKA:Knox County
+55:US:USA:UNITED STATES:NEBRASKA:Lancaster County
+56:US:USA:UNITED STATES:NEBRASKA:Lincoln County
+57:US:USA:UNITED STATES:NEBRASKA:Logan County
+58:US:USA:UNITED STATES:NEBRASKA:Loup County
+59:US:USA:UNITED STATES:NEBRASKA:Madison County
+60:US:USA:UNITED STATES:NEBRASKA:McPherson County
+61:US:USA:UNITED STATES:NEBRASKA:Merrick County
+62:US:USA:UNITED STATES:NEBRASKA:Morrill County
+63:US:USA:UNITED STATES:NEBRASKA:Nance County
+64:US:USA:UNITED STATES:NEBRASKA:Nemaha County
+65:US:USA:UNITED STATES:NEBRASKA:Nuckolls County
+66:US:USA:UNITED STATES:NEBRASKA:Otoe County
+67:US:USA:UNITED STATES:NEBRASKA:Pawnee County
+68:US:USA:UNITED STATES:NEBRASKA:Perkins County
+69:US:USA:UNITED STATES:NEBRASKA:Phelps County
+70:US:USA:UNITED STATES:NEBRASKA:Pierce County
+71:US:USA:UNITED STATES:NEBRASKA:Platte County
+72:US:USA:UNITED STATES:NEBRASKA:Polk County
+73:US:USA:UNITED STATES:NEBRASKA:Red Willow County
+74:US:USA:UNITED STATES:NEBRASKA:Richardson County
+75:US:USA:UNITED STATES:NEBRASKA:Rock County
+76:US:USA:UNITED STATES:NEBRASKA:Saline County
+77:US:USA:UNITED STATES:NEBRASKA:Sarpy County
+78:US:USA:UNITED STATES:NEBRASKA:Saunders County
+79:US:USA:UNITED STATES:NEBRASKA:Scotts Bluff County
+80:US:USA:UNITED STATES:NEBRASKA:Seward County
+81:US:USA:UNITED STATES:NEBRASKA:Sheridan County
+82:US:USA:UNITED STATES:NEBRASKA:Sherman County
+83:US:USA:UNITED STATES:NEBRASKA:Sioux County
+84:US:USA:UNITED STATES:NEBRASKA:Stanton County
+85:US:USA:UNITED STATES:NEBRASKA:Thayer County
+86:US:USA:UNITED STATES:NEBRASKA:Thomas County
+87:US:USA:UNITED STATES:NEBRASKA:Thurston County
+88:US:USA:UNITED STATES:NEBRASKA:Valley County
+89:US:USA:UNITED STATES:NEBRASKA:Washington County
+90:US:USA:UNITED STATES:NEBRASKA:Wayne County
+91:US:USA:UNITED STATES:NEBRASKA:Webster County
+92:US:USA:UNITED STATES:NEBRASKA:Wheeler County
+93:US:USA:UNITED STATES:NEBRASKA:York County
+1:US:USA:UNITED STATES:SOUTH CAROLINA:Abbeville County
+2:US:USA:UNITED STATES:SOUTH CAROLINA:Aiken County
+3:US:USA:UNITED STATES:SOUTH CAROLINA:Allendale County
+4:US:USA:UNITED STATES:SOUTH CAROLINA:Anderson County
+5:US:USA:UNITED STATES:SOUTH CAROLINA:Bamberg County
+6:US:USA:UNITED STATES:SOUTH CAROLINA:Barnwell County
+7:US:USA:UNITED STATES:SOUTH CAROLINA:Beaufort County
+8:US:USA:UNITED STATES:SOUTH CAROLINA:Berkeley County
+9:US:USA:UNITED STATES:SOUTH CAROLINA:Calhoun County
+10:US:USA:UNITED STATES:SOUTH CAROLINA:Charleston County
+11:US:USA:UNITED STATES:SOUTH CAROLINA:Cherokee County
+12:US:USA:UNITED STATES:SOUTH CAROLINA:Chester County
+13:US:USA:UNITED STATES:SOUTH CAROLINA:Chesterfield County
+14:US:USA:UNITED STATES:SOUTH CAROLINA:Clarendon County
+15:US:USA:UNITED STATES:SOUTH CAROLINA:Colleton County
+16:US:USA:UNITED STATES:SOUTH CAROLINA:Darlington County
+17:US:USA:UNITED STATES:SOUTH CAROLINA:Dillon County
+18:US:USA:UNITED STATES:SOUTH CAROLINA:Dorchester County
+19:US:USA:UNITED STATES:SOUTH CAROLINA:Edgefield County
+20:US:USA:UNITED STATES:SOUTH CAROLINA:Fairfield County
+21:US:USA:UNITED STATES:SOUTH CAROLINA:Florence County
+22:US:USA:UNITED STATES:SOUTH CAROLINA:Georgetown County
+23:US:USA:UNITED STATES:SOUTH CAROLINA:Greenville County
+24:US:USA:UNITED STATES:SOUTH CAROLINA:Greenwood County
+25:US:USA:UNITED STATES:SOUTH CAROLINA:Hampton County
+26:US:USA:UNITED STATES:SOUTH CAROLINA:Horry County
+27:US:USA:UNITED STATES:SOUTH CAROLINA:Jasper County
+28:US:USA:UNITED STATES:SOUTH CAROLINA:Kershaw County
+29:US:USA:UNITED STATES:SOUTH CAROLINA:Lancaster County
+30:US:USA:UNITED STATES:SOUTH CAROLINA:Laurens County
+31:US:USA:UNITED STATES:SOUTH CAROLINA:Lee County
+32:US:USA:UNITED STATES:SOUTH CAROLINA:Lexington County
+33:US:USA:UNITED STATES:SOUTH CAROLINA:Marion County
+34:US:USA:UNITED STATES:SOUTH CAROLINA:Marlboro County
+35:US:USA:UNITED STATES:SOUTH CAROLINA:McCormick County
+36:US:USA:UNITED STATES:SOUTH CAROLINA:Newberry County
+37:US:USA:UNITED STATES:SOUTH CAROLINA:Oconee County
+38:US:USA:UNITED STATES:SOUTH CAROLINA:Orangeburg County
+39:US:USA:UNITED STATES:SOUTH CAROLINA:Pickens County
+40:US:USA:UNITED STATES:SOUTH CAROLINA:Richland County
+41:US:USA:UNITED STATES:SOUTH CAROLINA:Saluda County
+42:US:USA:UNITED STATES:SOUTH CAROLINA:Spartanburg County
+43:US:USA:UNITED STATES:SOUTH CAROLINA:Sumter County
+44:US:USA:UNITED STATES:SOUTH CAROLINA:Union County
+45:US:USA:UNITED STATES:SOUTH CAROLINA:Williamsburg County
+46:US:USA:UNITED STATES:SOUTH CAROLINA:York County
+1:US:USA:UNITED STATES:ALASKA:Aleutians East Borough
+2:US:USA:UNITED STATES:ALASKA:Aleutians West
+3:US:USA:UNITED STATES:ALASKA:Anchorage Municipality
+4:US:USA:UNITED STATES:ALASKA:Bethel
+5:US:USA:UNITED STATES:ALASKA:Bristol Bay Borough
+6:US:USA:UNITED STATES:ALASKA:Denali Borough
+7:US:USA:UNITED STATES:ALASKA:Dillingham
+8:US:USA:UNITED STATES:ALASKA:Fairbanks North Star Borough
+9:US:USA:UNITED STATES:ALASKA:Haines Borough
+10:US:USA:UNITED STATES:ALASKA:Juneau Borough
+11:US:USA:UNITED STATES:ALASKA:Kenai Peninsula Borough
+12:US:USA:UNITED STATES:ALASKA:Ketchikan Gateway Borough
+13:US:USA:UNITED STATES:ALASKA:Kodiak Island Borough
+14:US:USA:UNITED STATES:ALASKA:Lake and Peninsula Borough
+15:US:USA:UNITED STATES:ALASKA:Matanuska-Susitna Borough
+16:US:USA:UNITED STATES:ALASKA:Nome
+17:US:USA:UNITED STATES:ALASKA:North Slope Borough
+18:US:USA:UNITED STATES:ALASKA:Northwest Arctic Borough
+19:US:USA:UNITED STATES:ALASKA:Prince of Wales-Outer Ketchikan
+20:US:USA:UNITED STATES:ALASKA:Sitka Borough
+21:US:USA:UNITED STATES:ALASKA:Skagway-Hoonah-Angoon
+22:US:USA:UNITED STATES:ALASKA:Southeast Fairbanks
+23:US:USA:UNITED STATES:ALASKA:Valdez-Cordova
+24:US:USA:UNITED STATES:ALASKA:Wade Hampton
+25:US:USA:UNITED STATES:ALASKA:Wrangell-Petersburg
+26:US:USA:UNITED STATES:ALASKA:Yakutat Borough
+27:US:USA:UNITED STATES:ALASKA:Yukon-Koyukuk
+1:US:USA:UNITED STATES:PENNSYLVANIA:Adams County
+2:US:USA:UNITED STATES:PENNSYLVANIA:Allegheny County
+3:US:USA:UNITED STATES:PENNSYLVANIA:Armstrong County
+4:US:USA:UNITED STATES:PENNSYLVANIA:Beaver County
+5:US:USA:UNITED STATES:PENNSYLVANIA:Bedford County
+6:US:USA:UNITED STATES:PENNSYLVANIA:Berks County
+7:US:USA:UNITED STATES:PENNSYLVANIA:Blair County
+8:US:USA:UNITED STATES:PENNSYLVANIA:Bradford County
+9:US:USA:UNITED STATES:PENNSYLVANIA:Bucks County
+10:US:USA:UNITED STATES:PENNSYLVANIA:Butler County
+11:US:USA:UNITED STATES:PENNSYLVANIA:Cambria County
+12:US:USA:UNITED STATES:PENNSYLVANIA:Cameron County
+13:US:USA:UNITED STATES:PENNSYLVANIA:Carbon County
+14:US:USA:UNITED STATES:PENNSYLVANIA:Centre County
+15:US:USA:UNITED STATES:PENNSYLVANIA:Chester County
+16:US:USA:UNITED STATES:PENNSYLVANIA:Clarion County
+17:US:USA:UNITED STATES:PENNSYLVANIA:Clearfield County
+18:US:USA:UNITED STATES:PENNSYLVANIA:Clinton County
+19:US:USA:UNITED STATES:PENNSYLVANIA:Columbia County
+20:US:USA:UNITED STATES:PENNSYLVANIA:Crawford County
+21:US:USA:UNITED STATES:PENNSYLVANIA:Cumberland County
+22:US:USA:UNITED STATES:PENNSYLVANIA:Dauphin County
+23:US:USA:UNITED STATES:PENNSYLVANIA:Delaware County
+24:US:USA:UNITED STATES:PENNSYLVANIA:Elk County
+25:US:USA:UNITED STATES:PENNSYLVANIA:Erie County
+26:US:USA:UNITED STATES:PENNSYLVANIA:Fayette County
+27:US:USA:UNITED STATES:PENNSYLVANIA:Forest County
+28:US:USA:UNITED STATES:PENNSYLVANIA:Franklin County
+29:US:USA:UNITED STATES:PENNSYLVANIA:Fulton County
+30:US:USA:UNITED STATES:PENNSYLVANIA:Greene County
+31:US:USA:UNITED STATES:PENNSYLVANIA:Huntingdon County
+32:US:USA:UNITED STATES:PENNSYLVANIA:Indiana County
+33:US:USA:UNITED STATES:PENNSYLVANIA:Jefferson County
+34:US:USA:UNITED STATES:PENNSYLVANIA:Juniata County
+35:US:USA:UNITED STATES:PENNSYLVANIA:Lackawanna County
+36:US:USA:UNITED STATES:PENNSYLVANIA:Lancaster County
+37:US:USA:UNITED STATES:PENNSYLVANIA:Lawrence County
+38:US:USA:UNITED STATES:PENNSYLVANIA:Lebanon County
+39:US:USA:UNITED STATES:PENNSYLVANIA:Lehigh County
+40:US:USA:UNITED STATES:PENNSYLVANIA:Luzerne County
+41:US:USA:UNITED STATES:PENNSYLVANIA:Lycoming County
+42:US:USA:UNITED STATES:PENNSYLVANIA:McKean County
+43:US:USA:UNITED STATES:PENNSYLVANIA:Mercer County
+44:US:USA:UNITED STATES:PENNSYLVANIA:Mifflin County
+45:US:USA:UNITED STATES:PENNSYLVANIA:Monroe County
+46:US:USA:UNITED STATES:PENNSYLVANIA:Montgomery County
+47:US:USA:UNITED STATES:PENNSYLVANIA:Montour County
+48:US:USA:UNITED STATES:PENNSYLVANIA:Northampton County
+49:US:USA:UNITED STATES:PENNSYLVANIA:Northumberland County
+50:US:USA:UNITED STATES:PENNSYLVANIA:Perry County
+51:US:USA:UNITED STATES:PENNSYLVANIA:Philadelphia County
+52:US:USA:UNITED STATES:PENNSYLVANIA:Pike County
+53:US:USA:UNITED STATES:PENNSYLVANIA:Potter County
+54:US:USA:UNITED STATES:PENNSYLVANIA:Schuylkill County
+55:US:USA:UNITED STATES:PENNSYLVANIA:Snyder County
+56:US:USA:UNITED STATES:PENNSYLVANIA:Somerset County
+57:US:USA:UNITED STATES:PENNSYLVANIA:Sullivan County
+58:US:USA:UNITED STATES:PENNSYLVANIA:Susquehanna County
+59:US:USA:UNITED STATES:PENNSYLVANIA:Tioga County
+60:US:USA:UNITED STATES:PENNSYLVANIA:Union County
+61:US:USA:UNITED STATES:PENNSYLVANIA:Venango County
+62:US:USA:UNITED STATES:PENNSYLVANIA:Warren County
+63:US:USA:UNITED STATES:PENNSYLVANIA:Washington County
+64:US:USA:UNITED STATES:PENNSYLVANIA:Wayne County
+65:US:USA:UNITED STATES:PENNSYLVANIA:Westmoreland County
+66:US:USA:UNITED STATES:PENNSYLVANIA:Wyoming County
+67:US:USA:UNITED STATES:PENNSYLVANIA:York County
+1:US:USA:UNITED STATES:VIRGINIA:Accomack County
+2:US:USA:UNITED STATES:VIRGINIA:Albemarle County
+3:US:USA:UNITED STATES:VIRGINIA:Alexandria city
+4:US:USA:UNITED STATES:VIRGINIA:Alleghany County
+5:US:USA:UNITED STATES:VIRGINIA:Amelia County
+6:US:USA:UNITED STATES:VIRGINIA:Amherst County
+7:US:USA:UNITED STATES:VIRGINIA:Appomattox County
+8:US:USA:UNITED STATES:VIRGINIA:Arlington County
+9:US:USA:UNITED STATES:VIRGINIA:Augusta County
+10:US:USA:UNITED STATES:VIRGINIA:Bath County
+11:US:USA:UNITED STATES:VIRGINIA:Bedford County
+12:US:USA:UNITED STATES:VIRGINIA:Bedford city
+13:US:USA:UNITED STATES:VIRGINIA:Bland County
+14:US:USA:UNITED STATES:VIRGINIA:Botetourt County
+15:US:USA:UNITED STATES:VIRGINIA:Bristol city
+16:US:USA:UNITED STATES:VIRGINIA:Brunswick County
+17:US:USA:UNITED STATES:VIRGINIA:Buchanan County
+18:US:USA:UNITED STATES:VIRGINIA:Buckingham County
+19:US:USA:UNITED STATES:VIRGINIA:Buena Vista city
+20:US:USA:UNITED STATES:VIRGINIA:Campbell County
+21:US:USA:UNITED STATES:VIRGINIA:Caroline County
+22:US:USA:UNITED STATES:VIRGINIA:Carroll County
+23:US:USA:UNITED STATES:VIRGINIA:Charles City County
+24:US:USA:UNITED STATES:VIRGINIA:Charlotte County
+25:US:USA:UNITED STATES:VIRGINIA:Charlottesville city
+26:US:USA:UNITED STATES:VIRGINIA:Chesapeake city
+27:US:USA:UNITED STATES:VIRGINIA:Chesterfield County
+28:US:USA:UNITED STATES:VIRGINIA:Clarke County
+29:US:USA:UNITED STATES:VIRGINIA:Clifton Forge city
+30:US:USA:UNITED STATES:VIRGINIA:Colonial Heights city
+31:US:USA:UNITED STATES:VIRGINIA:Covington city
+32:US:USA:UNITED STATES:VIRGINIA:Craig County
+33:US:USA:UNITED STATES:VIRGINIA:Culpeper County
+34:US:USA:UNITED STATES:VIRGINIA:Cumberland County
+35:US:USA:UNITED STATES:VIRGINIA:Danville city
+36:US:USA:UNITED STATES:VIRGINIA:Dickenson County
+37:US:USA:UNITED STATES:VIRGINIA:Dinwiddie County
+38:US:USA:UNITED STATES:VIRGINIA:Emporia city
+39:US:USA:UNITED STATES:VIRGINIA:Essex County
+40:US:USA:UNITED STATES:VIRGINIA:Fairfax County
+41:US:USA:UNITED STATES:VIRGINIA:Fairfax city
+42:US:USA:UNITED STATES:VIRGINIA:Falls Church city
+43:US:USA:UNITED STATES:VIRGINIA:Fauquier County
+44:US:USA:UNITED STATES:VIRGINIA:Floyd County
+45:US:USA:UNITED STATES:VIRGINIA:Fluvanna County
+46:US:USA:UNITED STATES:VIRGINIA:Franklin County
+47:US:USA:UNITED STATES:VIRGINIA:Franklin city
+48:US:USA:UNITED STATES:VIRGINIA:Frederick County
+49:US:USA:UNITED STATES:VIRGINIA:Fredericksburg city
+50:US:USA:UNITED STATES:VIRGINIA:Galax city
+51:US:USA:UNITED STATES:VIRGINIA:Giles County
+52:US:USA:UNITED STATES:VIRGINIA:Gloucester County
+53:US:USA:UNITED STATES:VIRGINIA:Goochland County
+54:US:USA:UNITED STATES:VIRGINIA:Grayson County
+55:US:USA:UNITED STATES:VIRGINIA:Greene County
+56:US:USA:UNITED STATES:VIRGINIA:Greensville County
+57:US:USA:UNITED STATES:VIRGINIA:Halifax County
+58:US:USA:UNITED STATES:VIRGINIA:Hampton city
+59:US:USA:UNITED STATES:VIRGINIA:Hanover County
+60:US:USA:UNITED STATES:VIRGINIA:Harrisonburg city
+61:US:USA:UNITED STATES:VIRGINIA:Henrico County
+62:US:USA:UNITED STATES:VIRGINIA:Henry County
+63:US:USA:UNITED STATES:VIRGINIA:Highland County
+64:US:USA:UNITED STATES:VIRGINIA:Hopewell city
+65:US:USA:UNITED STATES:VIRGINIA:Isle of Wight County
+66:US:USA:UNITED STATES:VIRGINIA:James City County
+67:US:USA:UNITED STATES:VIRGINIA:King George County
+68:US:USA:UNITED STATES:VIRGINIA:King William County
+69:US:USA:UNITED STATES:VIRGINIA:King and Queen County
+70:US:USA:UNITED STATES:VIRGINIA:Lancaster County
+71:US:USA:UNITED STATES:VIRGINIA:Lee County
+72:US:USA:UNITED STATES:VIRGINIA:Lexington city
+73:US:USA:UNITED STATES:VIRGINIA:Loudoun County
+74:US:USA:UNITED STATES:VIRGINIA:Louisa County
+75:US:USA:UNITED STATES:VIRGINIA:Lunenburg County
+76:US:USA:UNITED STATES:VIRGINIA:Lynchburg city
+77:US:USA:UNITED STATES:VIRGINIA:Madison County
+78:US:USA:UNITED STATES:VIRGINIA:Manassas Park city
+79:US:USA:UNITED STATES:VIRGINIA:Manassas city
+80:US:USA:UNITED STATES:VIRGINIA:Martinsville city
+81:US:USA:UNITED STATES:VIRGINIA:Mathews County
+82:US:USA:UNITED STATES:VIRGINIA:Mecklenburg County
+83:US:USA:UNITED STATES:VIRGINIA:Middlesex County
+84:US:USA:UNITED STATES:VIRGINIA:Montgomery County
+85:US:USA:UNITED STATES:VIRGINIA:Nelson County
+86:US:USA:UNITED STATES:VIRGINIA:New Kent County
+87:US:USA:UNITED STATES:VIRGINIA:Newport News city
+88:US:USA:UNITED STATES:VIRGINIA:Norfolk city
+89:US:USA:UNITED STATES:VIRGINIA:Northampton County
+90:US:USA:UNITED STATES:VIRGINIA:Northumberland County
+91:US:USA:UNITED STATES:VIRGINIA:Norton city
+92:US:USA:UNITED STATES:VIRGINIA:Nottoway County
+93:US:USA:UNITED STATES:VIRGINIA:Orange County
+94:US:USA:UNITED STATES:VIRGINIA:Page County
+95:US:USA:UNITED STATES:VIRGINIA:Patrick County
+96:US:USA:UNITED STATES:VIRGINIA:Petersburg city
+97:US:USA:UNITED STATES:VIRGINIA:Pittsylvania County
+98:US:USA:UNITED STATES:VIRGINIA:Poquoson city
+99:US:USA:UNITED STATES:VIRGINIA:Portsmouth city
+100:US:USA:UNITED STATES:VIRGINIA:Powhatan County
+101:US:USA:UNITED STATES:VIRGINIA:Prince Edward County
+102:US:USA:UNITED STATES:VIRGINIA:Prince George County
+103:US:USA:UNITED STATES:VIRGINIA:Prince William County
+104:US:USA:UNITED STATES:VIRGINIA:Pulaski County
+105:US:USA:UNITED STATES:VIRGINIA:Radford city
+106:US:USA:UNITED STATES:VIRGINIA:Rappahannock County
+107:US:USA:UNITED STATES:VIRGINIA:Richmond County
+108:US:USA:UNITED STATES:VIRGINIA:Richmond city
+109:US:USA:UNITED STATES:VIRGINIA:Roanoke County
+110:US:USA:UNITED STATES:VIRGINIA:Roanoke city
+111:US:USA:UNITED STATES:VIRGINIA:Rockbridge County
+112:US:USA:UNITED STATES:VIRGINIA:Rockingham County
+113:US:USA:UNITED STATES:VIRGINIA:Russell County
+114:US:USA:UNITED STATES:VIRGINIA:Salem city
+115:US:USA:UNITED STATES:VIRGINIA:Scott County
+116:US:USA:UNITED STATES:VIRGINIA:Shenandoah County
+117:US:USA:UNITED STATES:VIRGINIA:Smyth County
+118:US:USA:UNITED STATES:VIRGINIA:Southampton County
+119:US:USA:UNITED STATES:VIRGINIA:Spotsylvania County
+120:US:USA:UNITED STATES:VIRGINIA:Stafford County
+121:US:USA:UNITED STATES:VIRGINIA:Staunton city
+122:US:USA:UNITED STATES:VIRGINIA:Suffolk city
+123:US:USA:UNITED STATES:VIRGINIA:Surry County
+124:US:USA:UNITED STATES:VIRGINIA:Sussex County
+125:US:USA:UNITED STATES:VIRGINIA:Tazewell County
+126:US:USA:UNITED STATES:VIRGINIA:Virginia Beach city
+127:US:USA:UNITED STATES:VIRGINIA:Warren County
+128:US:USA:UNITED STATES:VIRGINIA:Washington County
+129:US:USA:UNITED STATES:VIRGINIA:Waynesboro city
+130:US:USA:UNITED STATES:VIRGINIA:Westmoreland County
+131:US:USA:UNITED STATES:VIRGINIA:Williamsburg city
+132:US:USA:UNITED STATES:VIRGINIA:Winchester city
+133:US:USA:UNITED STATES:VIRGINIA:Wise County
+134:US:USA:UNITED STATES:VIRGINIA:Wythe County
+135:US:USA:UNITED STATES:VIRGINIA:York County
+1:US:USA:UNITED STATES:KENTUCKY:Adair County
+2:US:USA:UNITED STATES:KENTUCKY:Allen County
+3:US:USA:UNITED STATES:KENTUCKY:Anderson County
+4:US:USA:UNITED STATES:KENTUCKY:Ballard County
+5:US:USA:UNITED STATES:KENTUCKY:Barren County
+6:US:USA:UNITED STATES:KENTUCKY:Bath County
+7:US:USA:UNITED STATES:KENTUCKY:Bell County
+8:US:USA:UNITED STATES:KENTUCKY:Boone County
+9:US:USA:UNITED STATES:KENTUCKY:Bourbon County
+10:US:USA:UNITED STATES:KENTUCKY:Boyd County
+11:US:USA:UNITED STATES:KENTUCKY:Boyle County
+12:US:USA:UNITED STATES:KENTUCKY:Bracken County
+13:US:USA:UNITED STATES:KENTUCKY:Breathitt County
+14:US:USA:UNITED STATES:KENTUCKY:Breckinridge County
+15:US:USA:UNITED STATES:KENTUCKY:Bullitt County
+16:US:USA:UNITED STATES:KENTUCKY:Butler County
+17:US:USA:UNITED STATES:KENTUCKY:Caldwell County
+18:US:USA:UNITED STATES:KENTUCKY:Calloway County
+19:US:USA:UNITED STATES:KENTUCKY:Campbell County
+20:US:USA:UNITED STATES:KENTUCKY:Carlisle County
+21:US:USA:UNITED STATES:KENTUCKY:Carroll County
+22:US:USA:UNITED STATES:KENTUCKY:Carter County
+23:US:USA:UNITED STATES:KENTUCKY:Casey County
+24:US:USA:UNITED STATES:KENTUCKY:Christian County
+25:US:USA:UNITED STATES:KENTUCKY:Clark County
+26:US:USA:UNITED STATES:KENTUCKY:Clay County
+27:US:USA:UNITED STATES:KENTUCKY:Clinton County
+28:US:USA:UNITED STATES:KENTUCKY:Crittenden County
+29:US:USA:UNITED STATES:KENTUCKY:Cumberland County
+30:US:USA:UNITED STATES:KENTUCKY:Daviess County
+31:US:USA:UNITED STATES:KENTUCKY:Edmonson County
+32:US:USA:UNITED STATES:KENTUCKY:Elliott County
+33:US:USA:UNITED STATES:KENTUCKY:Estill County
+34:US:USA:UNITED STATES:KENTUCKY:Fayette County
+35:US:USA:UNITED STATES:KENTUCKY:Fleming County
+36:US:USA:UNITED STATES:KENTUCKY:Floyd County
+37:US:USA:UNITED STATES:KENTUCKY:Franklin County
+38:US:USA:UNITED STATES:KENTUCKY:Fulton County
+39:US:USA:UNITED STATES:KENTUCKY:Gallatin County
+40:US:USA:UNITED STATES:KENTUCKY:Garrard County
+41:US:USA:UNITED STATES:KENTUCKY:Grant County
+42:US:USA:UNITED STATES:KENTUCKY:Graves County
+43:US:USA:UNITED STATES:KENTUCKY:Grayson County
+44:US:USA:UNITED STATES:KENTUCKY:Green County
+45:US:USA:UNITED STATES:KENTUCKY:Greenup County
+46:US:USA:UNITED STATES:KENTUCKY:Hancock County
+47:US:USA:UNITED STATES:KENTUCKY:Hardin County
+48:US:USA:UNITED STATES:KENTUCKY:Harlan County
+49:US:USA:UNITED STATES:KENTUCKY:Harrison County
+50:US:USA:UNITED STATES:KENTUCKY:Hart County
+51:US:USA:UNITED STATES:KENTUCKY:Henderson County
+52:US:USA:UNITED STATES:KENTUCKY:Henry County
+53:US:USA:UNITED STATES:KENTUCKY:Hickman County
+54:US:USA:UNITED STATES:KENTUCKY:Hopkins County
+55:US:USA:UNITED STATES:KENTUCKY:Jackson County
+56:US:USA:UNITED STATES:KENTUCKY:Jefferson County
+57:US:USA:UNITED STATES:KENTUCKY:Jessamine County
+58:US:USA:UNITED STATES:KENTUCKY:Johnson County
+59:US:USA:UNITED STATES:KENTUCKY:Kenton County
+60:US:USA:UNITED STATES:KENTUCKY:Knott County
+61:US:USA:UNITED STATES:KENTUCKY:Knox County
+62:US:USA:UNITED STATES:KENTUCKY:Larue County
+63:US:USA:UNITED STATES:KENTUCKY:Laurel County
+64:US:USA:UNITED STATES:KENTUCKY:Lawrence County
+65:US:USA:UNITED STATES:KENTUCKY:Lee County
+66:US:USA:UNITED STATES:KENTUCKY:Leslie County
+67:US:USA:UNITED STATES:KENTUCKY:Letcher County
+68:US:USA:UNITED STATES:KENTUCKY:Lewis County
+69:US:USA:UNITED STATES:KENTUCKY:Lincoln County
+70:US:USA:UNITED STATES:KENTUCKY:Livingston County
+71:US:USA:UNITED STATES:KENTUCKY:Logan County
+72:US:USA:UNITED STATES:KENTUCKY:Lyon County
+73:US:USA:UNITED STATES:KENTUCKY:Madison County
+74:US:USA:UNITED STATES:KENTUCKY:Magoffin County
+75:US:USA:UNITED STATES:KENTUCKY:Marion County
+76:US:USA:UNITED STATES:KENTUCKY:Marshall County
+77:US:USA:UNITED STATES:KENTUCKY:Martin County
+78:US:USA:UNITED STATES:KENTUCKY:Mason County
+79:US:USA:UNITED STATES:KENTUCKY:McCracken County
+80:US:USA:UNITED STATES:KENTUCKY:McCreary County
+81:US:USA:UNITED STATES:KENTUCKY:McLean County
+82:US:USA:UNITED STATES:KENTUCKY:Meade County
+83:US:USA:UNITED STATES:KENTUCKY:Menifee County
+84:US:USA:UNITED STATES:KENTUCKY:Mercer County
+85:US:USA:UNITED STATES:KENTUCKY:Metcalfe County
+86:US:USA:UNITED STATES:KENTUCKY:Monroe County
+87:US:USA:UNITED STATES:KENTUCKY:Montgomery County
+88:US:USA:UNITED STATES:KENTUCKY:Morgan County
+89:US:USA:UNITED STATES:KENTUCKY:Muhlenberg County
+90:US:USA:UNITED STATES:KENTUCKY:Nelson County
+91:US:USA:UNITED STATES:KENTUCKY:Nicholas County
+92:US:USA:UNITED STATES:KENTUCKY:Ohio County
+93:US:USA:UNITED STATES:KENTUCKY:Oldham County
+94:US:USA:UNITED STATES:KENTUCKY:Owen County
+95:US:USA:UNITED STATES:KENTUCKY:Owsley County
+96:US:USA:UNITED STATES:KENTUCKY:Pendleton County
+97:US:USA:UNITED STATES:KENTUCKY:Perry County
+98:US:USA:UNITED STATES:KENTUCKY:Pike County
+99:US:USA:UNITED STATES:KENTUCKY:Powell County
+100:US:USA:UNITED STATES:KENTUCKY:Pulaski County
+101:US:USA:UNITED STATES:KENTUCKY:Robertson County
+102:US:USA:UNITED STATES:KENTUCKY:Rockcastle County
+103:US:USA:UNITED STATES:KENTUCKY:Rowan County
+104:US:USA:UNITED STATES:KENTUCKY:Russell County
+105:US:USA:UNITED STATES:KENTUCKY:Scott County
+106:US:USA:UNITED STATES:KENTUCKY:Shelby County
+107:US:USA:UNITED STATES:KENTUCKY:Simpson County
+108:US:USA:UNITED STATES:KENTUCKY:Spencer County
+109:US:USA:UNITED STATES:KENTUCKY:Taylor County
+110:US:USA:UNITED STATES:KENTUCKY:Todd County
+111:US:USA:UNITED STATES:KENTUCKY:Trigg County
+112:US:USA:UNITED STATES:KENTUCKY:Trimble County
+113:US:USA:UNITED STATES:KENTUCKY:Union County
+114:US:USA:UNITED STATES:KENTUCKY:Warren County
+115:US:USA:UNITED STATES:KENTUCKY:Washington County
+116:US:USA:UNITED STATES:KENTUCKY:Wayne County
+117:US:USA:UNITED STATES:KENTUCKY:Webster County
+118:US:USA:UNITED STATES:KENTUCKY:Whitley County
+119:US:USA:UNITED STATES:KENTUCKY:Wolfe County
+120:US:USA:UNITED STATES:KENTUCKY:Woodford County
+1:US:USA:UNITED STATES:NEW JERSEY:Atlantic County
+2:US:USA:UNITED STATES:NEW JERSEY:Bergen County
+3:US:USA:UNITED STATES:NEW JERSEY:Burlington County
+4:US:USA:UNITED STATES:NEW JERSEY:Camden County
+5:US:USA:UNITED STATES:NEW JERSEY:Cape May County
+6:US:USA:UNITED STATES:NEW JERSEY:Cumberland County
+7:US:USA:UNITED STATES:NEW JERSEY:Essex County
+8:US:USA:UNITED STATES:NEW JERSEY:Gloucester County
+9:US:USA:UNITED STATES:NEW JERSEY:Hudson County
+10:US:USA:UNITED STATES:NEW JERSEY:Hunterdon County
+11:US:USA:UNITED STATES:NEW JERSEY:Mercer County
+12:US:USA:UNITED STATES:NEW JERSEY:Middlesex County
+13:US:USA:UNITED STATES:NEW JERSEY:Monmouth County
+14:US:USA:UNITED STATES:NEW JERSEY:Morris County
+15:US:USA:UNITED STATES:NEW JERSEY:Ocean County
+16:US:USA:UNITED STATES:NEW JERSEY:Passaic County
+17:US:USA:UNITED STATES:NEW JERSEY:Salem County
+18:US:USA:UNITED STATES:NEW JERSEY:Somerset County
+19:US:USA:UNITED STATES:NEW JERSEY:Sussex County
+20:US:USA:UNITED STATES:NEW JERSEY:Union County
+21:US:USA:UNITED STATES:NEW JERSEY:Warren County
+1:US:USA:UNITED STATES:IDAHO:Ada County
+2:US:USA:UNITED STATES:IDAHO:Adams County
+3:US:USA:UNITED STATES:IDAHO:Bannock County
+4:US:USA:UNITED STATES:IDAHO:Bear Lake County
+5:US:USA:UNITED STATES:IDAHO:Benewah County
+6:US:USA:UNITED STATES:IDAHO:Bingham County
+7:US:USA:UNITED STATES:IDAHO:Blaine County
+8:US:USA:UNITED STATES:IDAHO:Boise County
+9:US:USA:UNITED STATES:IDAHO:Bonner County
+10:US:USA:UNITED STATES:IDAHO:Bonneville County
+11:US:USA:UNITED STATES:IDAHO:Boundary County
+12:US:USA:UNITED STATES:IDAHO:Butte County
+13:US:USA:UNITED STATES:IDAHO:Camas County
+14:US:USA:UNITED STATES:IDAHO:Canyon County
+15:US:USA:UNITED STATES:IDAHO:Caribou County
+16:US:USA:UNITED STATES:IDAHO:Cassia County
+17:US:USA:UNITED STATES:IDAHO:Clark County
+18:US:USA:UNITED STATES:IDAHO:Clearwater County
+19:US:USA:UNITED STATES:IDAHO:Custer County
+20:US:USA:UNITED STATES:IDAHO:Elmore County
+21:US:USA:UNITED STATES:IDAHO:Franklin County
+22:US:USA:UNITED STATES:IDAHO:Fremont County
+23:US:USA:UNITED STATES:IDAHO:Gem County
+24:US:USA:UNITED STATES:IDAHO:Gooding County
+25:US:USA:UNITED STATES:IDAHO:Idaho County
+26:US:USA:UNITED STATES:IDAHO:Jefferson County
+27:US:USA:UNITED STATES:IDAHO:Jerome County
+28:US:USA:UNITED STATES:IDAHO:Kootenai County
+29:US:USA:UNITED STATES:IDAHO:Latah County
+30:US:USA:UNITED STATES:IDAHO:Lemhi County
+31:US:USA:UNITED STATES:IDAHO:Lewis County
+32:US:USA:UNITED STATES:IDAHO:Lincoln County
+33:US:USA:UNITED STATES:IDAHO:Madison County
+34:US:USA:UNITED STATES:IDAHO:Minidoka County
+35:US:USA:UNITED STATES:IDAHO:Nez Perce County
+36:US:USA:UNITED STATES:IDAHO:Oneida County
+37:US:USA:UNITED STATES:IDAHO:Owyhee County
+38:US:USA:UNITED STATES:IDAHO:Payette County
+39:US:USA:UNITED STATES:IDAHO:Power County
+40:US:USA:UNITED STATES:IDAHO:Shoshone County
+41:US:USA:UNITED STATES:IDAHO:Teton County
+42:US:USA:UNITED STATES:IDAHO:Twin Falls County
+43:US:USA:UNITED STATES:IDAHO:Valley County
+44:US:USA:UNITED STATES:IDAHO:Washington County
+1:US:USA:UNITED STATES:CALIFORNIA:Alameda County
+2:US:USA:UNITED STATES:CALIFORNIA:Alpine County
+3:US:USA:UNITED STATES:CALIFORNIA:Amador County
+4:US:USA:UNITED STATES:CALIFORNIA:Butte County
+5:US:USA:UNITED STATES:CALIFORNIA:Calaveras County
+6:US:USA:UNITED STATES:CALIFORNIA:Colusa County
+7:US:USA:UNITED STATES:CALIFORNIA:Contra Costa County
+8:US:USA:UNITED STATES:CALIFORNIA:Del Norte County
+9:US:USA:UNITED STATES:CALIFORNIA:El Dorado County
+10:US:USA:UNITED STATES:CALIFORNIA:Fresno County
+11:US:USA:UNITED STATES:CALIFORNIA:Glenn County
+12:US:USA:UNITED STATES:CALIFORNIA:Humboldt County
+13:US:USA:UNITED STATES:CALIFORNIA:Imperial County
+14:US:USA:UNITED STATES:CALIFORNIA:Inyo County
+15:US:USA:UNITED STATES:CALIFORNIA:Kern County
+16:US:USA:UNITED STATES:CALIFORNIA:Kings County
+17:US:USA:UNITED STATES:CALIFORNIA:Lake County
+18:US:USA:UNITED STATES:CALIFORNIA:Lassen County
+19:US:USA:UNITED STATES:CALIFORNIA:Los Angeles County
+20:US:USA:UNITED STATES:CALIFORNIA:Madera County
+21:US:USA:UNITED STATES:CALIFORNIA:Marin County
+22:US:USA:UNITED STATES:CALIFORNIA:Mariposa County
+23:US:USA:UNITED STATES:CALIFORNIA:Mendocino County
+24:US:USA:UNITED STATES:CALIFORNIA:Merced County
+25:US:USA:UNITED STATES:CALIFORNIA:Modoc County
+26:US:USA:UNITED STATES:CALIFORNIA:Mono County
+27:US:USA:UNITED STATES:CALIFORNIA:Monterey County
+28:US:USA:UNITED STATES:CALIFORNIA:Napa County
+29:US:USA:UNITED STATES:CALIFORNIA:Nevada County
+30:US:USA:UNITED STATES:CALIFORNIA:Orange County
+31:US:USA:UNITED STATES:CALIFORNIA:Placer County
+32:US:USA:UNITED STATES:CALIFORNIA:Plumas County
+33:US:USA:UNITED STATES:CALIFORNIA:Riverside County
+34:US:USA:UNITED STATES:CALIFORNIA:Sacramento County
+35:US:USA:UNITED STATES:CALIFORNIA:San Benito County
+36:US:USA:UNITED STATES:CALIFORNIA:San Bernardino County
+37:US:USA:UNITED STATES:CALIFORNIA:San Diego County
+38:US:USA:UNITED STATES:CALIFORNIA:San Francisco County
+39:US:USA:UNITED STATES:CALIFORNIA:San Joaquin County
+40:US:USA:UNITED STATES:CALIFORNIA:San Luis Obispo County
+41:US:USA:UNITED STATES:CALIFORNIA:San Mateo County
+42:US:USA:UNITED STATES:CALIFORNIA:Santa Barbara County
+43:US:USA:UNITED STATES:CALIFORNIA:Santa Clara County
+44:US:USA:UNITED STATES:CALIFORNIA:Santa Cruz County
+45:US:USA:UNITED STATES:CALIFORNIA:Shasta County
+46:US:USA:UNITED STATES:CALIFORNIA:Sierra County
+47:US:USA:UNITED STATES:CALIFORNIA:Siskiyou County
+48:US:USA:UNITED STATES:CALIFORNIA:Solano County
+49:US:USA:UNITED STATES:CALIFORNIA:Sonoma County
+50:US:USA:UNITED STATES:CALIFORNIA:Stanislaus County
+51:US:USA:UNITED STATES:CALIFORNIA:Sutter County
+52:US:USA:UNITED STATES:CALIFORNIA:Tehama County
+53:US:USA:UNITED STATES:CALIFORNIA:Trinity County
+54:US:USA:UNITED STATES:CALIFORNIA:Tulare County
+55:US:USA:UNITED STATES:CALIFORNIA:Tuolumne County
+56:US:USA:UNITED STATES:CALIFORNIA:Ventura County
+57:US:USA:UNITED STATES:CALIFORNIA:Yolo County
+58:US:USA:UNITED STATES:CALIFORNIA:Yuba County
+1:US:USA:UNITED STATES:OKLAHOMA:Adair County
+2:US:USA:UNITED STATES:OKLAHOMA:Alfalfa County
+3:US:USA:UNITED STATES:OKLAHOMA:Atoka County
+4:US:USA:UNITED STATES:OKLAHOMA:Beaver County
+5:US:USA:UNITED STATES:OKLAHOMA:Beckham County
+6:US:USA:UNITED STATES:OKLAHOMA:Blaine County
+7:US:USA:UNITED STATES:OKLAHOMA:Bryan County
+8:US:USA:UNITED STATES:OKLAHOMA:Caddo County
+9:US:USA:UNITED STATES:OKLAHOMA:Canadian County
+10:US:USA:UNITED STATES:OKLAHOMA:Carter County
+11:US:USA:UNITED STATES:OKLAHOMA:Cherokee County
+12:US:USA:UNITED STATES:OKLAHOMA:Choctaw County
+13:US:USA:UNITED STATES:OKLAHOMA:Cimarron County
+14:US:USA:UNITED STATES:OKLAHOMA:Cleveland County
+15:US:USA:UNITED STATES:OKLAHOMA:Coal County
+16:US:USA:UNITED STATES:OKLAHOMA:Comanche County
+17:US:USA:UNITED STATES:OKLAHOMA:Cotton County
+18:US:USA:UNITED STATES:OKLAHOMA:Craig County
+19:US:USA:UNITED STATES:OKLAHOMA:Creek County
+20:US:USA:UNITED STATES:OKLAHOMA:Custer County
+21:US:USA:UNITED STATES:OKLAHOMA:Delaware County
+22:US:USA:UNITED STATES:OKLAHOMA:Dewey County
+23:US:USA:UNITED STATES:OKLAHOMA:Ellis County
+24:US:USA:UNITED STATES:OKLAHOMA:Garfield County
+25:US:USA:UNITED STATES:OKLAHOMA:Garvin County
+26:US:USA:UNITED STATES:OKLAHOMA:Grady County
+27:US:USA:UNITED STATES:OKLAHOMA:Grant County
+28:US:USA:UNITED STATES:OKLAHOMA:Greer County
+29:US:USA:UNITED STATES:OKLAHOMA:Harmon County
+30:US:USA:UNITED STATES:OKLAHOMA:Harper County
+31:US:USA:UNITED STATES:OKLAHOMA:Haskell County
+32:US:USA:UNITED STATES:OKLAHOMA:Hughes County
+33:US:USA:UNITED STATES:OKLAHOMA:Jackson County
+34:US:USA:UNITED STATES:OKLAHOMA:Jefferson County
+35:US:USA:UNITED STATES:OKLAHOMA:Johnston County
+36:US:USA:UNITED STATES:OKLAHOMA:Kay County
+37:US:USA:UNITED STATES:OKLAHOMA:Kingfisher County
+38:US:USA:UNITED STATES:OKLAHOMA:Kiowa County
+39:US:USA:UNITED STATES:OKLAHOMA:Latimer County
+40:US:USA:UNITED STATES:OKLAHOMA:Le Flore County
+41:US:USA:UNITED STATES:OKLAHOMA:Lincoln County
+42:US:USA:UNITED STATES:OKLAHOMA:Logan County
+43:US:USA:UNITED STATES:OKLAHOMA:Love County
+44:US:USA:UNITED STATES:OKLAHOMA:Major County
+45:US:USA:UNITED STATES:OKLAHOMA:Marshall County
+46:US:USA:UNITED STATES:OKLAHOMA:Mayes County
+47:US:USA:UNITED STATES:OKLAHOMA:McClain County
+48:US:USA:UNITED STATES:OKLAHOMA:McCurtain County
+49:US:USA:UNITED STATES:OKLAHOMA:McIntosh County
+50:US:USA:UNITED STATES:OKLAHOMA:Murray County
+51:US:USA:UNITED STATES:OKLAHOMA:Muskogee County
+52:US:USA:UNITED STATES:OKLAHOMA:Noble County
+53:US:USA:UNITED STATES:OKLAHOMA:Nowata County
+54:US:USA:UNITED STATES:OKLAHOMA:Okfuskee County
+55:US:USA:UNITED STATES:OKLAHOMA:Oklahoma County
+56:US:USA:UNITED STATES:OKLAHOMA:Okmulgee County
+57:US:USA:UNITED STATES:OKLAHOMA:Osage County
+58:US:USA:UNITED STATES:OKLAHOMA:Ottawa County
+59:US:USA:UNITED STATES:OKLAHOMA:Pawnee County
+60:US:USA:UNITED STATES:OKLAHOMA:Payne County
+61:US:USA:UNITED STATES:OKLAHOMA:Pittsburg County
+62:US:USA:UNITED STATES:OKLAHOMA:Pontotoc County
+63:US:USA:UNITED STATES:OKLAHOMA:Pottawatomie County
+64:US:USA:UNITED STATES:OKLAHOMA:Pushmataha County
+65:US:USA:UNITED STATES:OKLAHOMA:Roger Mills County
+66:US:USA:UNITED STATES:OKLAHOMA:Rogers County
+67:US:USA:UNITED STATES:OKLAHOMA:Seminole County
+68:US:USA:UNITED STATES:OKLAHOMA:Sequoyah County
+69:US:USA:UNITED STATES:OKLAHOMA:Stephens County
+70:US:USA:UNITED STATES:OKLAHOMA:Texas County
+71:US:USA:UNITED STATES:OKLAHOMA:Tillman County
+72:US:USA:UNITED STATES:OKLAHOMA:Tulsa County
+73:US:USA:UNITED STATES:OKLAHOMA:Wagoner County
+74:US:USA:UNITED STATES:OKLAHOMA:Washington County
+75:US:USA:UNITED STATES:OKLAHOMA:Washita County
+76:US:USA:UNITED STATES:OKLAHOMA:Woods County
+77:US:USA:UNITED STATES:OKLAHOMA:Woodward County
+1:US:USA:UNITED STATES:KANSAS:Allen County
+2:US:USA:UNITED STATES:KANSAS:Anderson County
+3:US:USA:UNITED STATES:KANSAS:Atchison County
+4:US:USA:UNITED STATES:KANSAS:Barber County
+5:US:USA:UNITED STATES:KANSAS:Barton County
+6:US:USA:UNITED STATES:KANSAS:Bourbon County
+7:US:USA:UNITED STATES:KANSAS:Brown County
+8:US:USA:UNITED STATES:KANSAS:Butler County
+9:US:USA:UNITED STATES:KANSAS:Chase County
+10:US:USA:UNITED STATES:KANSAS:Chautauqua County
+11:US:USA:UNITED STATES:KANSAS:Cherokee County
+12:US:USA:UNITED STATES:KANSAS:Cheyenne County
+13:US:USA:UNITED STATES:KANSAS:Clark County
+14:US:USA:UNITED STATES:KANSAS:Clay County
+15:US:USA:UNITED STATES:KANSAS:Cloud County
+16:US:USA:UNITED STATES:KANSAS:Coffey County
+17:US:USA:UNITED STATES:KANSAS:Comanche County
+18:US:USA:UNITED STATES:KANSAS:Cowley County
+19:US:USA:UNITED STATES:KANSAS:Crawford County
+20:US:USA:UNITED STATES:KANSAS:Decatur County
+21:US:USA:UNITED STATES:KANSAS:Dickinson County
+22:US:USA:UNITED STATES:KANSAS:Doniphan County
+23:US:USA:UNITED STATES:KANSAS:Douglas County
+24:US:USA:UNITED STATES:KANSAS:Edwards County
+25:US:USA:UNITED STATES:KANSAS:Elk County
+26:US:USA:UNITED STATES:KANSAS:Ellis County
+27:US:USA:UNITED STATES:KANSAS:Ellsworth County
+28:US:USA:UNITED STATES:KANSAS:Finney County
+29:US:USA:UNITED STATES:KANSAS:Ford County
+30:US:USA:UNITED STATES:KANSAS:Franklin County
+31:US:USA:UNITED STATES:KANSAS:Geary County
+32:US:USA:UNITED STATES:KANSAS:Gove County
+33:US:USA:UNITED STATES:KANSAS:Graham County
+34:US:USA:UNITED STATES:KANSAS:Grant County
+35:US:USA:UNITED STATES:KANSAS:Gray County
+36:US:USA:UNITED STATES:KANSAS:Greeley County
+37:US:USA:UNITED STATES:KANSAS:Greenwood County
+38:US:USA:UNITED STATES:KANSAS:Hamilton County
+39:US:USA:UNITED STATES:KANSAS:Harper County
+40:US:USA:UNITED STATES:KANSAS:Harvey County
+41:US:USA:UNITED STATES:KANSAS:Haskell County
+42:US:USA:UNITED STATES:KANSAS:Hodgeman County
+43:US:USA:UNITED STATES:KANSAS:Jackson County
+44:US:USA:UNITED STATES:KANSAS:Jefferson County
+45:US:USA:UNITED STATES:KANSAS:Jewell County
+46:US:USA:UNITED STATES:KANSAS:Johnson County
+47:US:USA:UNITED STATES:KANSAS:Kearny County
+48:US:USA:UNITED STATES:KANSAS:Kingman County
+49:US:USA:UNITED STATES:KANSAS:Kiowa County
+50:US:USA:UNITED STATES:KANSAS:Labette County
+51:US:USA:UNITED STATES:KANSAS:Lane County
+52:US:USA:UNITED STATES:KANSAS:Leavenworth County
+53:US:USA:UNITED STATES:KANSAS:Lincoln County
+54:US:USA:UNITED STATES:KANSAS:Linn County
+55:US:USA:UNITED STATES:KANSAS:Logan County
+56:US:USA:UNITED STATES:KANSAS:Lyon County
+57:US:USA:UNITED STATES:KANSAS:Marion County
+58:US:USA:UNITED STATES:KANSAS:Marshall County
+59:US:USA:UNITED STATES:KANSAS:McPherson County
+60:US:USA:UNITED STATES:KANSAS:Meade County
+61:US:USA:UNITED STATES:KANSAS:Miami County
+62:US:USA:UNITED STATES:KANSAS:Mitchell County
+63:US:USA:UNITED STATES:KANSAS:Montgomery County
+64:US:USA:UNITED STATES:KANSAS:Morris County
+65:US:USA:UNITED STATES:KANSAS:Morton County
+66:US:USA:UNITED STATES:KANSAS:Nemaha County
+67:US:USA:UNITED STATES:KANSAS:Neosho County
+68:US:USA:UNITED STATES:KANSAS:Ness County
+69:US:USA:UNITED STATES:KANSAS:Norton County
+70:US:USA:UNITED STATES:KANSAS:Osage County
+71:US:USA:UNITED STATES:KANSAS:Osborne County
+72:US:USA:UNITED STATES:KANSAS:Ottawa County
+73:US:USA:UNITED STATES:KANSAS:Pawnee County
+74:US:USA:UNITED STATES:KANSAS:Phillips County
+75:US:USA:UNITED STATES:KANSAS:Pottawatomie County
+76:US:USA:UNITED STATES:KANSAS:Pratt County
+77:US:USA:UNITED STATES:KANSAS:Rawlins County
+78:US:USA:UNITED STATES:KANSAS:Reno County
+79:US:USA:UNITED STATES:KANSAS:Republic County
+80:US:USA:UNITED STATES:KANSAS:Rice County
+81:US:USA:UNITED STATES:KANSAS:Riley County
+82:US:USA:UNITED STATES:KANSAS:Rooks County
+83:US:USA:UNITED STATES:KANSAS:Rush County
+84:US:USA:UNITED STATES:KANSAS:Russell County
+85:US:USA:UNITED STATES:KANSAS:Saline County
+86:US:USA:UNITED STATES:KANSAS:Scott County
+87:US:USA:UNITED STATES:KANSAS:Sedgwick County
+88:US:USA:UNITED STATES:KANSAS:Seward County
+89:US:USA:UNITED STATES:KANSAS:Shawnee County
+90:US:USA:UNITED STATES:KANSAS:Sheridan County
+91:US:USA:UNITED STATES:KANSAS:Sherman County
+92:US:USA:UNITED STATES:KANSAS:Smith County
+93:US:USA:UNITED STATES:KANSAS:Stafford County
+94:US:USA:UNITED STATES:KANSAS:Stanton County
+95:US:USA:UNITED STATES:KANSAS:Stevens County
+96:US:USA:UNITED STATES:KANSAS:Sumner County
+97:US:USA:UNITED STATES:KANSAS:Thomas County
+98:US:USA:UNITED STATES:KANSAS:Trego County
+99:US:USA:UNITED STATES:KANSAS:Wabaunsee County
+100:US:USA:UNITED STATES:KANSAS:Wallace County
+101:US:USA:UNITED STATES:KANSAS:Washington County
+102:US:USA:UNITED STATES:KANSAS:Wichita County
+103:US:USA:UNITED STATES:KANSAS:Wilson County
+104:US:USA:UNITED STATES:KANSAS:Woodson County
+105:US:USA:UNITED STATES:KANSAS:Wyandotte County
+1:US:USA:UNITED STATES:NEW MEXICO:Bernalillo County
+2:US:USA:UNITED STATES:NEW MEXICO:Catron County
+3:US:USA:UNITED STATES:NEW MEXICO:Chaves County
+4:US:USA:UNITED STATES:NEW MEXICO:Cibola County
+5:US:USA:UNITED STATES:NEW MEXICO:Colfax County
+6:US:USA:UNITED STATES:NEW MEXICO:Curry County
+7:US:USA:UNITED STATES:NEW MEXICO:De Baca County
+8:US:USA:UNITED STATES:NEW MEXICO:Dona Ana County
+9:US:USA:UNITED STATES:NEW MEXICO:Eddy County
+10:US:USA:UNITED STATES:NEW MEXICO:Grant County
+11:US:USA:UNITED STATES:NEW MEXICO:Guadalupe County
+12:US:USA:UNITED STATES:NEW MEXICO:Harding County
+13:US:USA:UNITED STATES:NEW MEXICO:Hidalgo County
+14:US:USA:UNITED STATES:NEW MEXICO:Lea County
+15:US:USA:UNITED STATES:NEW MEXICO:Lincoln County
+16:US:USA:UNITED STATES:NEW MEXICO:Los Alamos County
+17:US:USA:UNITED STATES:NEW MEXICO:Luna County
+18:US:USA:UNITED STATES:NEW MEXICO:McKinley County
+19:US:USA:UNITED STATES:NEW MEXICO:Mora County
+20:US:USA:UNITED STATES:NEW MEXICO:Otero County
+21:US:USA:UNITED STATES:NEW MEXICO:Quay County
+22:US:USA:UNITED STATES:NEW MEXICO:Rio Arriba County
+23:US:USA:UNITED STATES:NEW MEXICO:Roosevelt County
+24:US:USA:UNITED STATES:NEW MEXICO:San Juan County
+25:US:USA:UNITED STATES:NEW MEXICO:San Miguel County
+26:US:USA:UNITED STATES:NEW MEXICO:Sandoval County
+27:US:USA:UNITED STATES:NEW MEXICO:Santa Fe County
+28:US:USA:UNITED STATES:NEW MEXICO:Sierra County
+29:US:USA:UNITED STATES:NEW MEXICO:Socorro County
+30:US:USA:UNITED STATES:NEW MEXICO:Taos County
+31:US:USA:UNITED STATES:NEW MEXICO:Torrance County
+32:US:USA:UNITED STATES:NEW MEXICO:Union County
+33:US:USA:UNITED STATES:NEW MEXICO:Valencia County
+1:US:USA:UNITED STATES:MARYLAND:Allegany County
+2:US:USA:UNITED STATES:MARYLAND:Anne Arundel County
+3:US:USA:UNITED STATES:MARYLAND:Baltimore County
+4:US:USA:UNITED STATES:MARYLAND:Baltimore city
+5:US:USA:UNITED STATES:MARYLAND:Calvert County
+6:US:USA:UNITED STATES:MARYLAND:Caroline County
+7:US:USA:UNITED STATES:MARYLAND:Carroll County
+8:US:USA:UNITED STATES:MARYLAND:Cecil County
+9:US:USA:UNITED STATES:MARYLAND:Charles County
+10:US:USA:UNITED STATES:MARYLAND:Dorchester County
+11:US:USA:UNITED STATES:MARYLAND:Frederick County
+12:US:USA:UNITED STATES:MARYLAND:Garrett County
+13:US:USA:UNITED STATES:MARYLAND:Harford County
+14:US:USA:UNITED STATES:MARYLAND:Howard County
+15:US:USA:UNITED STATES:MARYLAND:Kent County
+16:US:USA:UNITED STATES:MARYLAND:Montgomery County
+17:US:USA:UNITED STATES:MARYLAND:Prince George's County
+18:US:USA:UNITED STATES:MARYLAND:Queen Anne's County
+19:US:USA:UNITED STATES:MARYLAND:Somerset County
+20:US:USA:UNITED STATES:MARYLAND:St. Mary's County
+21:US:USA:UNITED STATES:MARYLAND:Talbot County
+22:US:USA:UNITED STATES:MARYLAND:Washington County
+23:US:USA:UNITED STATES:MARYLAND:Wicomico County
+24:US:USA:UNITED STATES:MARYLAND:Worcester County
+1:US:USA:UNITED STATES:NORTH CAROLINA:Alamance County
+2:US:USA:UNITED STATES:NORTH CAROLINA:Alexander County
+3:US:USA:UNITED STATES:NORTH CAROLINA:Alleghany County
+4:US:USA:UNITED STATES:NORTH CAROLINA:Anson County
+5:US:USA:UNITED STATES:NORTH CAROLINA:Ashe County
+6:US:USA:UNITED STATES:NORTH CAROLINA:Avery County
+7:US:USA:UNITED STATES:NORTH CAROLINA:Beaufort County
+8:US:USA:UNITED STATES:NORTH CAROLINA:Bertie County
+9:US:USA:UNITED STATES:NORTH CAROLINA:Bladen County
+10:US:USA:UNITED STATES:NORTH CAROLINA:Brunswick County
+11:US:USA:UNITED STATES:NORTH CAROLINA:Buncombe County
+12:US:USA:UNITED STATES:NORTH CAROLINA:Burke County
+13:US:USA:UNITED STATES:NORTH CAROLINA:Cabarrus County
+14:US:USA:UNITED STATES:NORTH CAROLINA:Caldwell County
+15:US:USA:UNITED STATES:NORTH CAROLINA:Camden County
+16:US:USA:UNITED STATES:NORTH CAROLINA:Carteret County
+17:US:USA:UNITED STATES:NORTH CAROLINA:Caswell County
+18:US:USA:UNITED STATES:NORTH CAROLINA:Catawba County
+19:US:USA:UNITED STATES:NORTH CAROLINA:Chatham County
+20:US:USA:UNITED STATES:NORTH CAROLINA:Cherokee County
+21:US:USA:UNITED STATES:NORTH CAROLINA:Chowan County
+22:US:USA:UNITED STATES:NORTH CAROLINA:Clay County
+23:US:USA:UNITED STATES:NORTH CAROLINA:Cleveland County
+24:US:USA:UNITED STATES:NORTH CAROLINA:Columbus County
+25:US:USA:UNITED STATES:NORTH CAROLINA:Craven County
+26:US:USA:UNITED STATES:NORTH CAROLINA:Cumberland County
+27:US:USA:UNITED STATES:NORTH CAROLINA:Currituck County
+28:US:USA:UNITED STATES:NORTH CAROLINA:Dare County
+29:US:USA:UNITED STATES:NORTH CAROLINA:Davidson County
+30:US:USA:UNITED STATES:NORTH CAROLINA:Davie County
+31:US:USA:UNITED STATES:NORTH CAROLINA:Duplin County
+32:US:USA:UNITED STATES:NORTH CAROLINA:Durham County
+33:US:USA:UNITED STATES:NORTH CAROLINA:Edgecombe County
+34:US:USA:UNITED STATES:NORTH CAROLINA:Forsyth County
+35:US:USA:UNITED STATES:NORTH CAROLINA:Franklin County
+36:US:USA:UNITED STATES:NORTH CAROLINA:Gaston County
+37:US:USA:UNITED STATES:NORTH CAROLINA:Gates County
+38:US:USA:UNITED STATES:NORTH CAROLINA:Graham County
+39:US:USA:UNITED STATES:NORTH CAROLINA:Granville County
+40:US:USA:UNITED STATES:NORTH CAROLINA:Greene County
+41:US:USA:UNITED STATES:NORTH CAROLINA:Guilford County
+42:US:USA:UNITED STATES:NORTH CAROLINA:Halifax County
+43:US:USA:UNITED STATES:NORTH CAROLINA:Harnett County
+44:US:USA:UNITED STATES:NORTH CAROLINA:Haywood County
+45:US:USA:UNITED STATES:NORTH CAROLINA:Henderson County
+46:US:USA:UNITED STATES:NORTH CAROLINA:Hertford County
+47:US:USA:UNITED STATES:NORTH CAROLINA:Hoke County
+48:US:USA:UNITED STATES:NORTH CAROLINA:Hyde County
+49:US:USA:UNITED STATES:NORTH CAROLINA:Iredell County
+50:US:USA:UNITED STATES:NORTH CAROLINA:Jackson County
+51:US:USA:UNITED STATES:NORTH CAROLINA:Johnston County
+52:US:USA:UNITED STATES:NORTH CAROLINA:Jones County
+53:US:USA:UNITED STATES:NORTH CAROLINA:Lee County
+54:US:USA:UNITED STATES:NORTH CAROLINA:Lenoir County
+55:US:USA:UNITED STATES:NORTH CAROLINA:Lincoln County
+56:US:USA:UNITED STATES:NORTH CAROLINA:Macon County
+57:US:USA:UNITED STATES:NORTH CAROLINA:Madison County
+58:US:USA:UNITED STATES:NORTH CAROLINA:Martin County
+59:US:USA:UNITED STATES:NORTH CAROLINA:McDowell County
+60:US:USA:UNITED STATES:NORTH CAROLINA:Mecklenburg County
+61:US:USA:UNITED STATES:NORTH CAROLINA:Mitchell County
+62:US:USA:UNITED STATES:NORTH CAROLINA:Montgomery County
+63:US:USA:UNITED STATES:NORTH CAROLINA:Moore County
+64:US:USA:UNITED STATES:NORTH CAROLINA:Nash County
+65:US:USA:UNITED STATES:NORTH CAROLINA:New Hanover County
+66:US:USA:UNITED STATES:NORTH CAROLINA:Northampton County
+67:US:USA:UNITED STATES:NORTH CAROLINA:Onslow County
+68:US:USA:UNITED STATES:NORTH CAROLINA:Orange County
+69:US:USA:UNITED STATES:NORTH CAROLINA:Pamlico County
+70:US:USA:UNITED STATES:NORTH CAROLINA:Pasquotank County
+71:US:USA:UNITED STATES:NORTH CAROLINA:Pender County
+72:US:USA:UNITED STATES:NORTH CAROLINA:Perquimans County
+73:US:USA:UNITED STATES:NORTH CAROLINA:Person County
+74:US:USA:UNITED STATES:NORTH CAROLINA:Pitt County
+75:US:USA:UNITED STATES:NORTH CAROLINA:Polk County
+76:US:USA:UNITED STATES:NORTH CAROLINA:Randolph County
+77:US:USA:UNITED STATES:NORTH CAROLINA:Richmond County
+78:US:USA:UNITED STATES:NORTH CAROLINA:Robeson County
+79:US:USA:UNITED STATES:NORTH CAROLINA:Rockingham County
+80:US:USA:UNITED STATES:NORTH CAROLINA:Rowan County
+81:US:USA:UNITED STATES:NORTH CAROLINA:Rutherford County
+82:US:USA:UNITED STATES:NORTH CAROLINA:Sampson County
+83:US:USA:UNITED STATES:NORTH CAROLINA:Scotland County
+84:US:USA:UNITED STATES:NORTH CAROLINA:Stanly County
+85:US:USA:UNITED STATES:NORTH CAROLINA:Stokes County
+86:US:USA:UNITED STATES:NORTH CAROLINA:Surry County
+87:US:USA:UNITED STATES:NORTH CAROLINA:Swain County
+88:US:USA:UNITED STATES:NORTH CAROLINA:Transylvania County
+89:US:USA:UNITED STATES:NORTH CAROLINA:Tyrrell County
+90:US:USA:UNITED STATES:NORTH CAROLINA:Union County
+91:US:USA:UNITED STATES:NORTH CAROLINA:Vance County
+92:US:USA:UNITED STATES:NORTH CAROLINA:Wake County
+93:US:USA:UNITED STATES:NORTH CAROLINA:Warren County
+94:US:USA:UNITED STATES:NORTH CAROLINA:Washington County
+95:US:USA:UNITED STATES:NORTH CAROLINA:Watauga County
+96:US:USA:UNITED STATES:NORTH CAROLINA:Wayne County
+97:US:USA:UNITED STATES:NORTH CAROLINA:Wilkes County
+98:US:USA:UNITED STATES:NORTH CAROLINA:Wilson County
+99:US:USA:UNITED STATES:NORTH CAROLINA:Yadkin County
+100:US:USA:UNITED STATES:NORTH CAROLINA:Yancey County
+1:US:USA:UNITED STATES:NEW YORK:Albany County
+2:US:USA:UNITED STATES:NEW YORK:Allegany County
+3:US:USA:UNITED STATES:NEW YORK:Bronx County
+4:US:USA:UNITED STATES:NEW YORK:Broome County
+5:US:USA:UNITED STATES:NEW YORK:Cattaraugus County
+6:US:USA:UNITED STATES:NEW YORK:Cayuga County
+7:US:USA:UNITED STATES:NEW YORK:Chautauqua County
+8:US:USA:UNITED STATES:NEW YORK:Chemung County
+9:US:USA:UNITED STATES:NEW YORK:Chenango County
+10:US:USA:UNITED STATES:NEW YORK:Clinton County
+11:US:USA:UNITED STATES:NEW YORK:Columbia County
+12:US:USA:UNITED STATES:NEW YORK:Cortland County
+13:US:USA:UNITED STATES:NEW YORK:Delaware County
+14:US:USA:UNITED STATES:NEW YORK:Dutchess County
+15:US:USA:UNITED STATES:NEW YORK:Erie County
+16:US:USA:UNITED STATES:NEW YORK:Essex County
+17:US:USA:UNITED STATES:NEW YORK:Franklin County
+18:US:USA:UNITED STATES:NEW YORK:Fulton County
+19:US:USA:UNITED STATES:NEW YORK:Genesee County
+20:US:USA:UNITED STATES:NEW YORK:Greene County
+21:US:USA:UNITED STATES:NEW YORK:Hamilton County
+22:US:USA:UNITED STATES:NEW YORK:Herkimer County
+23:US:USA:UNITED STATES:NEW YORK:Jefferson County
+24:US:USA:UNITED STATES:NEW YORK:Kings County
+25:US:USA:UNITED STATES:NEW YORK:Lewis County
+26:US:USA:UNITED STATES:NEW YORK:Livingston County
+27:US:USA:UNITED STATES:NEW YORK:Madison County
+28:US:USA:UNITED STATES:NEW YORK:Monroe County
+29:US:USA:UNITED STATES:NEW YORK:Montgomery County
+30:US:USA:UNITED STATES:NEW YORK:Nassau County
+31:US:USA:UNITED STATES:NEW YORK:New York County
+32:US:USA:UNITED STATES:NEW YORK:Niagara County
+33:US:USA:UNITED STATES:NEW YORK:Oneida County
+34:US:USA:UNITED STATES:NEW YORK:Onondaga County
+35:US:USA:UNITED STATES:NEW YORK:Ontario County
+36:US:USA:UNITED STATES:NEW YORK:Orange County
+37:US:USA:UNITED STATES:NEW YORK:Orleans County
+38:US:USA:UNITED STATES:NEW YORK:Oswego County
+39:US:USA:UNITED STATES:NEW YORK:Otsego County
+40:US:USA:UNITED STATES:NEW YORK:Putnam County
+41:US:USA:UNITED STATES:NEW YORK:Queens County
+42:US:USA:UNITED STATES:NEW YORK:Rensselaer County
+43:US:USA:UNITED STATES:NEW YORK:Richmond County
+44:US:USA:UNITED STATES:NEW YORK:Rockland County
+45:US:USA:UNITED STATES:NEW YORK:Saratoga County
+46:US:USA:UNITED STATES:NEW YORK:Schenectady County
+47:US:USA:UNITED STATES:NEW YORK:Schoharie County
+48:US:USA:UNITED STATES:NEW YORK:Schuyler County
+49:US:USA:UNITED STATES:NEW YORK:Seneca County
+50:US:USA:UNITED STATES:NEW YORK:St. Lawrence County
+51:US:USA:UNITED STATES:NEW YORK:Steuben County
+52:US:USA:UNITED STATES:NEW YORK:Suffolk County
+53:US:USA:UNITED STATES:NEW YORK:Sullivan County
+54:US:USA:UNITED STATES:NEW YORK:Tioga County
+55:US:USA:UNITED STATES:NEW YORK:Tompkins County
+56:US:USA:UNITED STATES:NEW YORK:Ulster County
+57:US:USA:UNITED STATES:NEW YORK:Warren County
+58:US:USA:UNITED STATES:NEW YORK:Washington County
+59:US:USA:UNITED STATES:NEW YORK:Wayne County
+60:US:USA:UNITED STATES:NEW YORK:Westchester County
+61:US:USA:UNITED STATES:NEW YORK:Wyoming County
+62:US:USA:UNITED STATES:NEW YORK:Yates County
+1:US:USA:UNITED STATES:SOUTH DAKOTA:Aurora County
+2:US:USA:UNITED STATES:SOUTH DAKOTA:Beadle County
+3:US:USA:UNITED STATES:SOUTH DAKOTA:Bennett County
+4:US:USA:UNITED STATES:SOUTH DAKOTA:Bon Homme County
+5:US:USA:UNITED STATES:SOUTH DAKOTA:Brookings County
+6:US:USA:UNITED STATES:SOUTH DAKOTA:Brown County
+7:US:USA:UNITED STATES:SOUTH DAKOTA:Brule County
+8:US:USA:UNITED STATES:SOUTH DAKOTA:Buffalo County
+9:US:USA:UNITED STATES:SOUTH DAKOTA:Butte County
+10:US:USA:UNITED STATES:SOUTH DAKOTA:Campbell County
+11:US:USA:UNITED STATES:SOUTH DAKOTA:Charles Mix County
+12:US:USA:UNITED STATES:SOUTH DAKOTA:Clark County
+13:US:USA:UNITED STATES:SOUTH DAKOTA:Clay County
+14:US:USA:UNITED STATES:SOUTH DAKOTA:Codington County
+15:US:USA:UNITED STATES:SOUTH DAKOTA:Corson County
+16:US:USA:UNITED STATES:SOUTH DAKOTA:Custer County
+17:US:USA:UNITED STATES:SOUTH DAKOTA:Davison County
+18:US:USA:UNITED STATES:SOUTH DAKOTA:Day County
+19:US:USA:UNITED STATES:SOUTH DAKOTA:Deuel County
+20:US:USA:UNITED STATES:SOUTH DAKOTA:Dewey County
+21:US:USA:UNITED STATES:SOUTH DAKOTA:Douglas County
+22:US:USA:UNITED STATES:SOUTH DAKOTA:Edmunds County
+23:US:USA:UNITED STATES:SOUTH DAKOTA:Fall River County
+24:US:USA:UNITED STATES:SOUTH DAKOTA:Faulk County
+25:US:USA:UNITED STATES:SOUTH DAKOTA:Grant County
+26:US:USA:UNITED STATES:SOUTH DAKOTA:Gregory County
+27:US:USA:UNITED STATES:SOUTH DAKOTA:Haakon County
+28:US:USA:UNITED STATES:SOUTH DAKOTA:Hamlin County
+29:US:USA:UNITED STATES:SOUTH DAKOTA:Hand County
+30:US:USA:UNITED STATES:SOUTH DAKOTA:Hanson County
+31:US:USA:UNITED STATES:SOUTH DAKOTA:Harding County
+32:US:USA:UNITED STATES:SOUTH DAKOTA:Hughes County
+33:US:USA:UNITED STATES:SOUTH DAKOTA:Hutchinson County
+34:US:USA:UNITED STATES:SOUTH DAKOTA:Hyde County
+35:US:USA:UNITED STATES:SOUTH DAKOTA:Jackson County
+36:US:USA:UNITED STATES:SOUTH DAKOTA:Jerauld County
+37:US:USA:UNITED STATES:SOUTH DAKOTA:Jones County
+38:US:USA:UNITED STATES:SOUTH DAKOTA:Kingsbury County
+39:US:USA:UNITED STATES:SOUTH DAKOTA:Lake County
+40:US:USA:UNITED STATES:SOUTH DAKOTA:Lawrence County
+41:US:USA:UNITED STATES:SOUTH DAKOTA:Lincoln County
+42:US:USA:UNITED STATES:SOUTH DAKOTA:Lyman County
+43:US:USA:UNITED STATES:SOUTH DAKOTA:Marshall County
+44:US:USA:UNITED STATES:SOUTH DAKOTA:McCook County
+45:US:USA:UNITED STATES:SOUTH DAKOTA:McPherson County
+46:US:USA:UNITED STATES:SOUTH DAKOTA:Meade County
+47:US:USA:UNITED STATES:SOUTH DAKOTA:Mellette County
+48:US:USA:UNITED STATES:SOUTH DAKOTA:Miner County
+49:US:USA:UNITED STATES:SOUTH DAKOTA:Minnehaha County
+50:US:USA:UNITED STATES:SOUTH DAKOTA:Moody County
+51:US:USA:UNITED STATES:SOUTH DAKOTA:Pennington County
+52:US:USA:UNITED STATES:SOUTH DAKOTA:Perkins County
+53:US:USA:UNITED STATES:SOUTH DAKOTA:Potter County
+54:US:USA:UNITED STATES:SOUTH DAKOTA:Roberts County
+55:US:USA:UNITED STATES:SOUTH DAKOTA:Sanborn County
+56:US:USA:UNITED STATES:SOUTH DAKOTA:Shannon County
+57:US:USA:UNITED STATES:SOUTH DAKOTA:Spink County
+58:US:USA:UNITED STATES:SOUTH DAKOTA:Stanley County
+59:US:USA:UNITED STATES:SOUTH DAKOTA:Sully County
+60:US:USA:UNITED STATES:SOUTH DAKOTA:Todd County
+61:US:USA:UNITED STATES:SOUTH DAKOTA:Tripp County
+62:US:USA:UNITED STATES:SOUTH DAKOTA:Turner County
+63:US:USA:UNITED STATES:SOUTH DAKOTA:Union County
+64:US:USA:UNITED STATES:SOUTH DAKOTA:Walworth County
+65:US:USA:UNITED STATES:SOUTH DAKOTA:Yankton County
+66:US:USA:UNITED STATES:SOUTH DAKOTA:Ziebach County
+1:US:USA:UNITED STATES:WEST VIRGINIA:Barbour County
+2:US:USA:UNITED STATES:WEST VIRGINIA:Berkeley County
+3:US:USA:UNITED STATES:WEST VIRGINIA:Boone County
+4:US:USA:UNITED STATES:WEST VIRGINIA:Braxton County
+5:US:USA:UNITED STATES:WEST VIRGINIA:Brooke County
+6:US:USA:UNITED STATES:WEST VIRGINIA:Cabell County
+7:US:USA:UNITED STATES:WEST VIRGINIA:Calhoun County
+8:US:USA:UNITED STATES:WEST VIRGINIA:Clay County
+9:US:USA:UNITED STATES:WEST VIRGINIA:Doddridge County
+10:US:USA:UNITED STATES:WEST VIRGINIA:Fayette County
+11:US:USA:UNITED STATES:WEST VIRGINIA:Gilmer County
+12:US:USA:UNITED STATES:WEST VIRGINIA:Grant County
+13:US:USA:UNITED STATES:WEST VIRGINIA:Greenbrier County
+14:US:USA:UNITED STATES:WEST VIRGINIA:Hampshire County
+15:US:USA:UNITED STATES:WEST VIRGINIA:Hancock County
+16:US:USA:UNITED STATES:WEST VIRGINIA:Hardy County
+17:US:USA:UNITED STATES:WEST VIRGINIA:Harrison County
+18:US:USA:UNITED STATES:WEST VIRGINIA:Jackson County
+19:US:USA:UNITED STATES:WEST VIRGINIA:Jefferson County
+20:US:USA:UNITED STATES:WEST VIRGINIA:Kanawha County
+21:US:USA:UNITED STATES:WEST VIRGINIA:Lewis County
+22:US:USA:UNITED STATES:WEST VIRGINIA:Lincoln County
+23:US:USA:UNITED STATES:WEST VIRGINIA:Logan County
+24:US:USA:UNITED STATES:WEST VIRGINIA:Marion County
+25:US:USA:UNITED STATES:WEST VIRGINIA:Marshall County
+26:US:USA:UNITED STATES:WEST VIRGINIA:Mason County
+27:US:USA:UNITED STATES:WEST VIRGINIA:McDowell County
+28:US:USA:UNITED STATES:WEST VIRGINIA:Mercer County
+29:US:USA:UNITED STATES:WEST VIRGINIA:Mineral County
+30:US:USA:UNITED STATES:WEST VIRGINIA:Mingo County
+31:US:USA:UNITED STATES:WEST VIRGINIA:Monongalia County
+32:US:USA:UNITED STATES:WEST VIRGINIA:Monroe County
+33:US:USA:UNITED STATES:WEST VIRGINIA:Morgan County
+34:US:USA:UNITED STATES:WEST VIRGINIA:Nicholas County
+35:US:USA:UNITED STATES:WEST VIRGINIA:Ohio County
+36:US:USA:UNITED STATES:WEST VIRGINIA:Pendleton County
+37:US:USA:UNITED STATES:WEST VIRGINIA:Pleasants County
+38:US:USA:UNITED STATES:WEST VIRGINIA:Pocahontas County
+39:US:USA:UNITED STATES:WEST VIRGINIA:Preston County
+40:US:USA:UNITED STATES:WEST VIRGINIA:Putnam County
+41:US:USA:UNITED STATES:WEST VIRGINIA:Raleigh County
+42:US:USA:UNITED STATES:WEST VIRGINIA:Randolph County
+43:US:USA:UNITED STATES:WEST VIRGINIA:Ritchie County
+44:US:USA:UNITED STATES:WEST VIRGINIA:Roane County
+45:US:USA:UNITED STATES:WEST VIRGINIA:Summers County
+46:US:USA:UNITED STATES:WEST VIRGINIA:Taylor County
+47:US:USA:UNITED STATES:WEST VIRGINIA:Tucker County
+48:US:USA:UNITED STATES:WEST VIRGINIA:Tyler County
+49:US:USA:UNITED STATES:WEST VIRGINIA:Upshur County
+50:US:USA:UNITED STATES:WEST VIRGINIA:Wayne County
+51:US:USA:UNITED STATES:WEST VIRGINIA:Webster County
+52:US:USA:UNITED STATES:WEST VIRGINIA:Wetzel County
+53:US:USA:UNITED STATES:WEST VIRGINIA:Wirt County
+54:US:USA:UNITED STATES:WEST VIRGINIA:Wood County
+55:US:USA:UNITED STATES:WEST VIRGINIA:Wyoming County
+1:US:USA:UNITED STATES:LOUISIANA:Acadia Parish
+2:US:USA:UNITED STATES:LOUISIANA:Allen Parish
+3:US:USA:UNITED STATES:LOUISIANA:Ascension Parish
+4:US:USA:UNITED STATES:LOUISIANA:Assumption Parish
+5:US:USA:UNITED STATES:LOUISIANA:Avoyelles Parish
+6:US:USA:UNITED STATES:LOUISIANA:Beauregard Parish
+7:US:USA:UNITED STATES:LOUISIANA:Bienville Parish
+8:US:USA:UNITED STATES:LOUISIANA:Bossier Parish
+9:US:USA:UNITED STATES:LOUISIANA:Caddo Parish
+10:US:USA:UNITED STATES:LOUISIANA:Calcasieu Parish
+11:US:USA:UNITED STATES:LOUISIANA:Caldwell Parish
+12:US:USA:UNITED STATES:LOUISIANA:Cameron Parish
+13:US:USA:UNITED STATES:LOUISIANA:Catahoula Parish
+14:US:USA:UNITED STATES:LOUISIANA:Claiborne Parish
+15:US:USA:UNITED STATES:LOUISIANA:Concordia Parish
+16:US:USA:UNITED STATES:LOUISIANA:De Soto Parish
+17:US:USA:UNITED STATES:LOUISIANA:East Baton Rouge Parish
+18:US:USA:UNITED STATES:LOUISIANA:East Carroll Parish
+19:US:USA:UNITED STATES:LOUISIANA:East Feliciana Parish
+20:US:USA:UNITED STATES:LOUISIANA:Evangeline Parish
+21:US:USA:UNITED STATES:LOUISIANA:Franklin Parish
+22:US:USA:UNITED STATES:LOUISIANA:Grant Parish
+23:US:USA:UNITED STATES:LOUISIANA:Iberia Parish
+24:US:USA:UNITED STATES:LOUISIANA:Iberville Parish
+25:US:USA:UNITED STATES:LOUISIANA:Jackson Parish
+26:US:USA:UNITED STATES:LOUISIANA:Jefferson Davis Parish
+27:US:USA:UNITED STATES:LOUISIANA:Jefferson Parish
+28:US:USA:UNITED STATES:LOUISIANA:La Salle Parish
+29:US:USA:UNITED STATES:LOUISIANA:Lafayette Parish
+30:US:USA:UNITED STATES:LOUISIANA:Lafourche Parish
+31:US:USA:UNITED STATES:LOUISIANA:Lincoln Parish
+32:US:USA:UNITED STATES:LOUISIANA:Livingston Parish
+33:US:USA:UNITED STATES:LOUISIANA:Madison Parish
+34:US:USA:UNITED STATES:LOUISIANA:Morehouse Parish
+35:US:USA:UNITED STATES:LOUISIANA:Natchitoches Parish
+36:US:USA:UNITED STATES:LOUISIANA:Orleans Parish
+37:US:USA:UNITED STATES:LOUISIANA:Ouachita Parish
+38:US:USA:UNITED STATES:LOUISIANA:Plaquemines Parish
+39:US:USA:UNITED STATES:LOUISIANA:Pointe Coupee Parish
+40:US:USA:UNITED STATES:LOUISIANA:Rapides Parish
+41:US:USA:UNITED STATES:LOUISIANA:Red River Parish
+42:US:USA:UNITED STATES:LOUISIANA:Richland Parish
+43:US:USA:UNITED STATES:LOUISIANA:Sabine Parish
+44:US:USA:UNITED STATES:LOUISIANA:St. Bernard Parish
+45:US:USA:UNITED STATES:LOUISIANA:St. Charles Parish
+46:US:USA:UNITED STATES:LOUISIANA:St. Helena Parish
+47:US:USA:UNITED STATES:LOUISIANA:St. James Parish
+48:US:USA:UNITED STATES:LOUISIANA:St. John the Baptist Parish
+49:US:USA:UNITED STATES:LOUISIANA:St. Landry Parish
+50:US:USA:UNITED STATES:LOUISIANA:St. Martin Parish
+51:US:USA:UNITED STATES:LOUISIANA:St. Mary Parish
+52:US:USA:UNITED STATES:LOUISIANA:St. Tammany Parish
+53:US:USA:UNITED STATES:LOUISIANA:Tangipahoa Parish
+54:US:USA:UNITED STATES:LOUISIANA:Tensas Parish
+55:US:USA:UNITED STATES:LOUISIANA:Terrebonne Parish
+56:US:USA:UNITED STATES:LOUISIANA:Union Parish
+57:US:USA:UNITED STATES:LOUISIANA:Vermilion Parish
+58:US:USA:UNITED STATES:LOUISIANA:Vernon Parish
+59:US:USA:UNITED STATES:LOUISIANA:Washington Parish
+60:US:USA:UNITED STATES:LOUISIANA:Webster Parish
+61:US:USA:UNITED STATES:LOUISIANA:West Baton Rouge Parish
+62:US:USA:UNITED STATES:LOUISIANA:West Carroll Parish
+63:US:USA:UNITED STATES:LOUISIANA:West Feliciana Parish
+64:US:USA:UNITED STATES:LOUISIANA:Winn Parish
+1:US:USA:UNITED STATES:TENNESSEE:Anderson County
+2:US:USA:UNITED STATES:TENNESSEE:Bedford County
+3:US:USA:UNITED STATES:TENNESSEE:Benton County
+4:US:USA:UNITED STATES:TENNESSEE:Bledsoe County
+5:US:USA:UNITED STATES:TENNESSEE:Blount County
+6:US:USA:UNITED STATES:TENNESSEE:Bradley County
+7:US:USA:UNITED STATES:TENNESSEE:Campbell County
+8:US:USA:UNITED STATES:TENNESSEE:Cannon County
+9:US:USA:UNITED STATES:TENNESSEE:Carroll County
+10:US:USA:UNITED STATES:TENNESSEE:Carter County
+11:US:USA:UNITED STATES:TENNESSEE:Cheatham County
+12:US:USA:UNITED STATES:TENNESSEE:Chester County
+13:US:USA:UNITED STATES:TENNESSEE:Claiborne County
+14:US:USA:UNITED STATES:TENNESSEE:Clay County
+15:US:USA:UNITED STATES:TENNESSEE:Cocke County
+16:US:USA:UNITED STATES:TENNESSEE:Coffee County
+17:US:USA:UNITED STATES:TENNESSEE:Crockett County
+18:US:USA:UNITED STATES:TENNESSEE:Cumberland County
+19:US:USA:UNITED STATES:TENNESSEE:Davidson County
+20:US:USA:UNITED STATES:TENNESSEE:DeKalb County
+21:US:USA:UNITED STATES:TENNESSEE:Decatur County
+22:US:USA:UNITED STATES:TENNESSEE:Dickson County
+23:US:USA:UNITED STATES:TENNESSEE:Dyer County
+24:US:USA:UNITED STATES:TENNESSEE:Fayette County
+25:US:USA:UNITED STATES:TENNESSEE:Fentress County
+26:US:USA:UNITED STATES:TENNESSEE:Franklin County
+27:US:USA:UNITED STATES:TENNESSEE:Gibson County
+28:US:USA:UNITED STATES:TENNESSEE:Giles County
+29:US:USA:UNITED STATES:TENNESSEE:Grainger County
+30:US:USA:UNITED STATES:TENNESSEE:Greene County
+31:US:USA:UNITED STATES:TENNESSEE:Grundy County
+32:US:USA:UNITED STATES:TENNESSEE:Hamblen County
+33:US:USA:UNITED STATES:TENNESSEE:Hamilton County
+34:US:USA:UNITED STATES:TENNESSEE:Hancock County
+35:US:USA:UNITED STATES:TENNESSEE:Hardeman County
+36:US:USA:UNITED STATES:TENNESSEE:Hardin County
+37:US:USA:UNITED STATES:TENNESSEE:Hawkins County
+38:US:USA:UNITED STATES:TENNESSEE:Haywood County
+39:US:USA:UNITED STATES:TENNESSEE:Henderson County
+40:US:USA:UNITED STATES:TENNESSEE:Henry County
+41:US:USA:UNITED STATES:TENNESSEE:Hickman County
+42:US:USA:UNITED STATES:TENNESSEE:Houston County
+43:US:USA:UNITED STATES:TENNESSEE:Humphreys County
+44:US:USA:UNITED STATES:TENNESSEE:Jackson County
+45:US:USA:UNITED STATES:TENNESSEE:Jefferson County
+46:US:USA:UNITED STATES:TENNESSEE:Johnson County
+47:US:USA:UNITED STATES:TENNESSEE:Knox County
+48:US:USA:UNITED STATES:TENNESSEE:Lake County
+49:US:USA:UNITED STATES:TENNESSEE:Lauderdale County
+50:US:USA:UNITED STATES:TENNESSEE:Lawrence County
+51:US:USA:UNITED STATES:TENNESSEE:Lewis County
+52:US:USA:UNITED STATES:TENNESSEE:Lincoln County
+53:US:USA:UNITED STATES:TENNESSEE:Loudon County
+54:US:USA:UNITED STATES:TENNESSEE:Macon County
+55:US:USA:UNITED STATES:TENNESSEE:Madison County
+56:US:USA:UNITED STATES:TENNESSEE:Marion County
+57:US:USA:UNITED STATES:TENNESSEE:Marshall County
+58:US:USA:UNITED STATES:TENNESSEE:Maury County
+59:US:USA:UNITED STATES:TENNESSEE:McMinn County
+60:US:USA:UNITED STATES:TENNESSEE:McNairy County
+61:US:USA:UNITED STATES:TENNESSEE:Meigs County
+62:US:USA:UNITED STATES:TENNESSEE:Monroe County
+63:US:USA:UNITED STATES:TENNESSEE:Montgomery County
+64:US:USA:UNITED STATES:TENNESSEE:Moore County
+65:US:USA:UNITED STATES:TENNESSEE:Morgan County
+66:US:USA:UNITED STATES:TENNESSEE:Obion County
+67:US:USA:UNITED STATES:TENNESSEE:Overton County
+68:US:USA:UNITED STATES:TENNESSEE:Perry County
+69:US:USA:UNITED STATES:TENNESSEE:Pickett County
+70:US:USA:UNITED STATES:TENNESSEE:Polk County
+71:US:USA:UNITED STATES:TENNESSEE:Putnam County
+72:US:USA:UNITED STATES:TENNESSEE:Rhea County
+73:US:USA:UNITED STATES:TENNESSEE:Roane County
+74:US:USA:UNITED STATES:TENNESSEE:Robertson County
+75:US:USA:UNITED STATES:TENNESSEE:Rutherford County
+76:US:USA:UNITED STATES:TENNESSEE:Scott County
+77:US:USA:UNITED STATES:TENNESSEE:Sequatchie County
+78:US:USA:UNITED STATES:TENNESSEE:Sevier County
+79:US:USA:UNITED STATES:TENNESSEE:Shelby County
+80:US:USA:UNITED STATES:TENNESSEE:Smith County
+81:US:USA:UNITED STATES:TENNESSEE:Stewart County
+82:US:USA:UNITED STATES:TENNESSEE:Sullivan County
+83:US:USA:UNITED STATES:TENNESSEE:Sumner County
+84:US:USA:UNITED STATES:TENNESSEE:Tipton County
+85:US:USA:UNITED STATES:TENNESSEE:Trousdale County
+86:US:USA:UNITED STATES:TENNESSEE:Unicoi County
+87:US:USA:UNITED STATES:TENNESSEE:Union County
+88:US:USA:UNITED STATES:TENNESSEE:Van Buren County
+89:US:USA:UNITED STATES:TENNESSEE:Warren County
+90:US:USA:UNITED STATES:TENNESSEE:Washington County
+91:US:USA:UNITED STATES:TENNESSEE:Wayne County
+92:US:USA:UNITED STATES:TENNESSEE:Weakley County
+93:US:USA:UNITED STATES:TENNESSEE:White County
+94:US:USA:UNITED STATES:TENNESSEE:Williamson County
+95:US:USA:UNITED STATES:TENNESSEE:Wilson County
+1:US:USA:UNITED STATES:TEXAS:Anderson County
+2:US:USA:UNITED STATES:TEXAS:Andrews County
+3:US:USA:UNITED STATES:TEXAS:Angelina County
+4:US:USA:UNITED STATES:TEXAS:Aransas County
+5:US:USA:UNITED STATES:TEXAS:Archer County
+6:US:USA:UNITED STATES:TEXAS:Armstrong County
+7:US:USA:UNITED STATES:TEXAS:Atascosa County
+8:US:USA:UNITED STATES:TEXAS:Austin County
+9:US:USA:UNITED STATES:TEXAS:Bailey County
+10:US:USA:UNITED STATES:TEXAS:Bandera County
+11:US:USA:UNITED STATES:TEXAS:Bastrop County
+12:US:USA:UNITED STATES:TEXAS:Baylor County
+13:US:USA:UNITED STATES:TEXAS:Bee County
+14:US:USA:UNITED STATES:TEXAS:Bell County
+15:US:USA:UNITED STATES:TEXAS:Bexar County
+16:US:USA:UNITED STATES:TEXAS:Blanco County
+17:US:USA:UNITED STATES:TEXAS:Borden County
+18:US:USA:UNITED STATES:TEXAS:Bosque County
+19:US:USA:UNITED STATES:TEXAS:Bowie County
+20:US:USA:UNITED STATES:TEXAS:Brazoria County
+21:US:USA:UNITED STATES:TEXAS:Brazos County
+22:US:USA:UNITED STATES:TEXAS:Brewster County
+23:US:USA:UNITED STATES:TEXAS:Briscoe County
+24:US:USA:UNITED STATES:TEXAS:Brooks County
+25:US:USA:UNITED STATES:TEXAS:Brown County
+26:US:USA:UNITED STATES:TEXAS:Burleson County
+27:US:USA:UNITED STATES:TEXAS:Burnet County
+28:US:USA:UNITED STATES:TEXAS:Caldwell County
+29:US:USA:UNITED STATES:TEXAS:Calhoun County
+30:US:USA:UNITED STATES:TEXAS:Callahan County
+31:US:USA:UNITED STATES:TEXAS:Cameron County
+32:US:USA:UNITED STATES:TEXAS:Camp County
+33:US:USA:UNITED STATES:TEXAS:Carson County
+34:US:USA:UNITED STATES:TEXAS:Cass County
+35:US:USA:UNITED STATES:TEXAS:Castro County
+36:US:USA:UNITED STATES:TEXAS:Chambers County
+37:US:USA:UNITED STATES:TEXAS:Cherokee County
+38:US:USA:UNITED STATES:TEXAS:Childress County
+39:US:USA:UNITED STATES:TEXAS:Clay County
+40:US:USA:UNITED STATES:TEXAS:Cochran County
+41:US:USA:UNITED STATES:TEXAS:Coke County
+42:US:USA:UNITED STATES:TEXAS:Coleman County
+43:US:USA:UNITED STATES:TEXAS:Collin County
+44:US:USA:UNITED STATES:TEXAS:Collingsworth County
+45:US:USA:UNITED STATES:TEXAS:Colorado County
+46:US:USA:UNITED STATES:TEXAS:Comal County
+47:US:USA:UNITED STATES:TEXAS:Comanche County
+48:US:USA:UNITED STATES:TEXAS:Concho County
+49:US:USA:UNITED STATES:TEXAS:Cooke County
+50:US:USA:UNITED STATES:TEXAS:Coryell County
+51:US:USA:UNITED STATES:TEXAS:Cottle County
+52:US:USA:UNITED STATES:TEXAS:Crane County
+53:US:USA:UNITED STATES:TEXAS:Crockett County
+54:US:USA:UNITED STATES:TEXAS:Crosby County
+55:US:USA:UNITED STATES:TEXAS:Culberson County
+56:US:USA:UNITED STATES:TEXAS:Dallam County
+57:US:USA:UNITED STATES:TEXAS:Dallas County
+58:US:USA:UNITED STATES:TEXAS:Dawson County
+59:US:USA:UNITED STATES:TEXAS:DeWitt County
+60:US:USA:UNITED STATES:TEXAS:Deaf Smith County
+61:US:USA:UNITED STATES:TEXAS:Delta County
+62:US:USA:UNITED STATES:TEXAS:Denton County
+63:US:USA:UNITED STATES:TEXAS:Dickens County
+64:US:USA:UNITED STATES:TEXAS:Dimmit County
+65:US:USA:UNITED STATES:TEXAS:Donley County
+66:US:USA:UNITED STATES:TEXAS:Duval County
+67:US:USA:UNITED STATES:TEXAS:Eastland County
+68:US:USA:UNITED STATES:TEXAS:Ector County
+69:US:USA:UNITED STATES:TEXAS:Edwards County
+70:US:USA:UNITED STATES:TEXAS:El Paso County
+71:US:USA:UNITED STATES:TEXAS:Ellis County
+72:US:USA:UNITED STATES:TEXAS:Erath County
+73:US:USA:UNITED STATES:TEXAS:Falls County
+74:US:USA:UNITED STATES:TEXAS:Fannin County
+75:US:USA:UNITED STATES:TEXAS:Fayette County
+76:US:USA:UNITED STATES:TEXAS:Fisher County
+77:US:USA:UNITED STATES:TEXAS:Floyd County
+78:US:USA:UNITED STATES:TEXAS:Foard County
+79:US:USA:UNITED STATES:TEXAS:Fort Bend County
+80:US:USA:UNITED STATES:TEXAS:Franklin County
+81:US:USA:UNITED STATES:TEXAS:Freestone County
+82:US:USA:UNITED STATES:TEXAS:Frio County
+83:US:USA:UNITED STATES:TEXAS:Gaines County
+84:US:USA:UNITED STATES:TEXAS:Galveston County
+85:US:USA:UNITED STATES:TEXAS:Garza County
+86:US:USA:UNITED STATES:TEXAS:Gillespie County
+87:US:USA:UNITED STATES:TEXAS:Glasscock County
+88:US:USA:UNITED STATES:TEXAS:Goliad County
+89:US:USA:UNITED STATES:TEXAS:Gonzales County
+90:US:USA:UNITED STATES:TEXAS:Gray County
+91:US:USA:UNITED STATES:TEXAS:Grayson County
+92:US:USA:UNITED STATES:TEXAS:Gregg County
+93:US:USA:UNITED STATES:TEXAS:Grimes County
+94:US:USA:UNITED STATES:TEXAS:Guadalupe County
+95:US:USA:UNITED STATES:TEXAS:Hale County
+96:US:USA:UNITED STATES:TEXAS:Hall County
+97:US:USA:UNITED STATES:TEXAS:Hamilton County
+98:US:USA:UNITED STATES:TEXAS:Hansford County
+99:US:USA:UNITED STATES:TEXAS:Hardeman County
+100:US:USA:UNITED STATES:TEXAS:Hardin County
+101:US:USA:UNITED STATES:TEXAS:Harris County
+102:US:USA:UNITED STATES:TEXAS:Harrison County
+103:US:USA:UNITED STATES:TEXAS:Hartley County
+104:US:USA:UNITED STATES:TEXAS:Haskell County
+105:US:USA:UNITED STATES:TEXAS:Hays County
+106:US:USA:UNITED STATES:TEXAS:Hemphill County
+107:US:USA:UNITED STATES:TEXAS:Henderson County
+108:US:USA:UNITED STATES:TEXAS:Hidalgo County
+109:US:USA:UNITED STATES:TEXAS:Hill County
+110:US:USA:UNITED STATES:TEXAS:Hockley County
+111:US:USA:UNITED STATES:TEXAS:Hood County
+112:US:USA:UNITED STATES:TEXAS:Hopkins County
+113:US:USA:UNITED STATES:TEXAS:Houston County
+114:US:USA:UNITED STATES:TEXAS:Howard County
+115:US:USA:UNITED STATES:TEXAS:Hudspeth County
+116:US:USA:UNITED STATES:TEXAS:Hunt County
+117:US:USA:UNITED STATES:TEXAS:Hutchinson County
+118:US:USA:UNITED STATES:TEXAS:Irion County
+119:US:USA:UNITED STATES:TEXAS:Jack County
+120:US:USA:UNITED STATES:TEXAS:Jackson County
+121:US:USA:UNITED STATES:TEXAS:Jasper County
+122:US:USA:UNITED STATES:TEXAS:Jeff Davis County
+123:US:USA:UNITED STATES:TEXAS:Jefferson County
+124:US:USA:UNITED STATES:TEXAS:Jim Hogg County
+125:US:USA:UNITED STATES:TEXAS:Jim Wells County
+126:US:USA:UNITED STATES:TEXAS:Johnson County
+127:US:USA:UNITED STATES:TEXAS:Jones County
+128:US:USA:UNITED STATES:TEXAS:Karnes County
+129:US:USA:UNITED STATES:TEXAS:Kaufman County
+130:US:USA:UNITED STATES:TEXAS:Kendall County
+131:US:USA:UNITED STATES:TEXAS:Kenedy County
+132:US:USA:UNITED STATES:TEXAS:Kent County
+133:US:USA:UNITED STATES:TEXAS:Kerr County
+134:US:USA:UNITED STATES:TEXAS:Kimble County
+135:US:USA:UNITED STATES:TEXAS:King County
+136:US:USA:UNITED STATES:TEXAS:Kinney County
+137:US:USA:UNITED STATES:TEXAS:Kleberg County
+138:US:USA:UNITED STATES:TEXAS:Knox County
+139:US:USA:UNITED STATES:TEXAS:La Salle County
+140:US:USA:UNITED STATES:TEXAS:Lamar County
+141:US:USA:UNITED STATES:TEXAS:Lamb County
+142:US:USA:UNITED STATES:TEXAS:Lampasas County
+143:US:USA:UNITED STATES:TEXAS:Lavaca County
+144:US:USA:UNITED STATES:TEXAS:Lee County
+145:US:USA:UNITED STATES:TEXAS:Leon County
+146:US:USA:UNITED STATES:TEXAS:Liberty County
+147:US:USA:UNITED STATES:TEXAS:Limestone County
+148:US:USA:UNITED STATES:TEXAS:Lipscomb County
+149:US:USA:UNITED STATES:TEXAS:Live Oak County
+150:US:USA:UNITED STATES:TEXAS:Llano County
+151:US:USA:UNITED STATES:TEXAS:Loving County
+152:US:USA:UNITED STATES:TEXAS:Lubbock County
+153:US:USA:UNITED STATES:TEXAS:Lynn County
+154:US:USA:UNITED STATES:TEXAS:Madison County
+155:US:USA:UNITED STATES:TEXAS:Marion County
+156:US:USA:UNITED STATES:TEXAS:Martin County
+157:US:USA:UNITED STATES:TEXAS:Mason County
+158:US:USA:UNITED STATES:TEXAS:Matagorda County
+159:US:USA:UNITED STATES:TEXAS:Maverick County
+160:US:USA:UNITED STATES:TEXAS:McCulloch County
+161:US:USA:UNITED STATES:TEXAS:McLennan County
+162:US:USA:UNITED STATES:TEXAS:McMullen County
+163:US:USA:UNITED STATES:TEXAS:Medina County
+164:US:USA:UNITED STATES:TEXAS:Menard County
+165:US:USA:UNITED STATES:TEXAS:Midland County
+166:US:USA:UNITED STATES:TEXAS:Milam County
+167:US:USA:UNITED STATES:TEXAS:Mills County
+168:US:USA:UNITED STATES:TEXAS:Mitchell County
+169:US:USA:UNITED STATES:TEXAS:Montague County
+170:US:USA:UNITED STATES:TEXAS:Montgomery County
+171:US:USA:UNITED STATES:TEXAS:Moore County
+172:US:USA:UNITED STATES:TEXAS:Morris County
+173:US:USA:UNITED STATES:TEXAS:Motley County
+174:US:USA:UNITED STATES:TEXAS:Nacogdoches County
+175:US:USA:UNITED STATES:TEXAS:Navarro County
+176:US:USA:UNITED STATES:TEXAS:Newton County
+177:US:USA:UNITED STATES:TEXAS:Nolan County
+178:US:USA:UNITED STATES:TEXAS:Nueces County
+179:US:USA:UNITED STATES:TEXAS:Ochiltree County
+180:US:USA:UNITED STATES:TEXAS:Oldham County
+181:US:USA:UNITED STATES:TEXAS:Orange County
+182:US:USA:UNITED STATES:TEXAS:Palo Pinto County
+183:US:USA:UNITED STATES:TEXAS:Panola County
+184:US:USA:UNITED STATES:TEXAS:Parker County
+185:US:USA:UNITED STATES:TEXAS:Parmer County
+186:US:USA:UNITED STATES:TEXAS:Pecos County
+187:US:USA:UNITED STATES:TEXAS:Polk County
+188:US:USA:UNITED STATES:TEXAS:Potter County
+189:US:USA:UNITED STATES:TEXAS:Presidio County
+190:US:USA:UNITED STATES:TEXAS:Rains County
+191:US:USA:UNITED STATES:TEXAS:Randall County
+192:US:USA:UNITED STATES:TEXAS:Reagan County
+193:US:USA:UNITED STATES:TEXAS:Real County
+194:US:USA:UNITED STATES:TEXAS:Red River County
+195:US:USA:UNITED STATES:TEXAS:Reeves County
+196:US:USA:UNITED STATES:TEXAS:Refugio County
+197:US:USA:UNITED STATES:TEXAS:Roberts County
+198:US:USA:UNITED STATES:TEXAS:Robertson County
+199:US:USA:UNITED STATES:TEXAS:Rockwall County
+200:US:USA:UNITED STATES:TEXAS:Runnels County
+201:US:USA:UNITED STATES:TEXAS:Rusk County
+202:US:USA:UNITED STATES:TEXAS:Sabine County
+203:US:USA:UNITED STATES:TEXAS:San Augustine County
+204:US:USA:UNITED STATES:TEXAS:San Jacinto County
+205:US:USA:UNITED STATES:TEXAS:San Patricio County
+206:US:USA:UNITED STATES:TEXAS:San Saba County
+207:US:USA:UNITED STATES:TEXAS:Schleicher County
+208:US:USA:UNITED STATES:TEXAS:Scurry County
+209:US:USA:UNITED STATES:TEXAS:Shackelford County
+210:US:USA:UNITED STATES:TEXAS:Shelby County
+211:US:USA:UNITED STATES:TEXAS:Sherman County
+212:US:USA:UNITED STATES:TEXAS:Smith County
+213:US:USA:UNITED STATES:TEXAS:Somervell County
+214:US:USA:UNITED STATES:TEXAS:Starr County
+215:US:USA:UNITED STATES:TEXAS:Stephens County
+216:US:USA:UNITED STATES:TEXAS:Sterling County
+217:US:USA:UNITED STATES:TEXAS:Stonewall County
+218:US:USA:UNITED STATES:TEXAS:Sutton County
+219:US:USA:UNITED STATES:TEXAS:Swisher County
+220:US:USA:UNITED STATES:TEXAS:Tarrant County
+221:US:USA:UNITED STATES:TEXAS:Taylor County
+222:US:USA:UNITED STATES:TEXAS:Terrell County
+223:US:USA:UNITED STATES:TEXAS:Terry County
+224:US:USA:UNITED STATES:TEXAS:Throckmorton County
+225:US:USA:UNITED STATES:TEXAS:Titus County
+226:US:USA:UNITED STATES:TEXAS:Tom Green County
+227:US:USA:UNITED STATES:TEXAS:Travis County
+228:US:USA:UNITED STATES:TEXAS:Trinity County
+229:US:USA:UNITED STATES:TEXAS:Tyler County
+230:US:USA:UNITED STATES:TEXAS:Upshur County
+231:US:USA:UNITED STATES:TEXAS:Upton County
+232:US:USA:UNITED STATES:TEXAS:Uvalde County
+233:US:USA:UNITED STATES:TEXAS:Val Verde County
+234:US:USA:UNITED STATES:TEXAS:Van Zandt County
+235:US:USA:UNITED STATES:TEXAS:Victoria County
+236:US:USA:UNITED STATES:TEXAS:Walker County
+237:US:USA:UNITED STATES:TEXAS:Waller County
+238:US:USA:UNITED STATES:TEXAS:Ward County
+239:US:USA:UNITED STATES:TEXAS:Washington County
+240:US:USA:UNITED STATES:TEXAS:Webb County
+241:US:USA:UNITED STATES:TEXAS:Wharton County
+242:US:USA:UNITED STATES:TEXAS:Wheeler County
+243:US:USA:UNITED STATES:TEXAS:Wichita County
+244:US:USA:UNITED STATES:TEXAS:Wilbarger County
+245:US:USA:UNITED STATES:TEXAS:Willacy County
+246:US:USA:UNITED STATES:TEXAS:Williamson County
+247:US:USA:UNITED STATES:TEXAS:Wilson County
+248:US:USA:UNITED STATES:TEXAS:Winkler County
+249:US:USA:UNITED STATES:TEXAS:Wise County
+250:US:USA:UNITED STATES:TEXAS:Wood County
+251:US:USA:UNITED STATES:TEXAS:Yoakum County
+252:US:USA:UNITED STATES:TEXAS:Young County
+253:US:USA:UNITED STATES:TEXAS:Zapata County
+254:US:USA:UNITED STATES:TEXAS:Zavala County
+1:US:USA:UNITED STATES:ALABAMA:Autauga County
+2:US:USA:UNITED STATES:ALABAMA:Baldwin County
+3:US:USA:UNITED STATES:ALABAMA:Barbour County
+4:US:USA:UNITED STATES:ALABAMA:Bibb County
+5:US:USA:UNITED STATES:ALABAMA:Blount County
+6:US:USA:UNITED STATES:ALABAMA:Bullock County
+7:US:USA:UNITED STATES:ALABAMA:Butler County
+8:US:USA:UNITED STATES:ALABAMA:Calhoun County
+9:US:USA:UNITED STATES:ALABAMA:Chambers County
+10:US:USA:UNITED STATES:ALABAMA:Cherokee County
+11:US:USA:UNITED STATES:ALABAMA:Chilton County
+12:US:USA:UNITED STATES:ALABAMA:Choctaw County
+13:US:USA:UNITED STATES:ALABAMA:Clarke County
+14:US:USA:UNITED STATES:ALABAMA:Clay County
+15:US:USA:UNITED STATES:ALABAMA:Cleburne County
+16:US:USA:UNITED STATES:ALABAMA:Coffee County
+17:US:USA:UNITED STATES:ALABAMA:Colbert County
+18:US:USA:UNITED STATES:ALABAMA:Conecuh County
+19:US:USA:UNITED STATES:ALABAMA:Coosa County
+20:US:USA:UNITED STATES:ALABAMA:Covington County
+21:US:USA:UNITED STATES:ALABAMA:Crenshaw County
+22:US:USA:UNITED STATES:ALABAMA:Cullman County
+23:US:USA:UNITED STATES:ALABAMA:Dale County
+24:US:USA:UNITED STATES:ALABAMA:Dallas County
+25:US:USA:UNITED STATES:ALABAMA:DeKalb County
+26:US:USA:UNITED STATES:ALABAMA:Elmore County
+27:US:USA:UNITED STATES:ALABAMA:Escambia County
+28:US:USA:UNITED STATES:ALABAMA:Etowah County
+29:US:USA:UNITED STATES:ALABAMA:Fayette County
+30:US:USA:UNITED STATES:ALABAMA:Franklin County
+31:US:USA:UNITED STATES:ALABAMA:Geneva County
+32:US:USA:UNITED STATES:ALABAMA:Greene County
+33:US:USA:UNITED STATES:ALABAMA:Hale County
+34:US:USA:UNITED STATES:ALABAMA:Henry County
+35:US:USA:UNITED STATES:ALABAMA:Houston County
+36:US:USA:UNITED STATES:ALABAMA:Jackson County
+37:US:USA:UNITED STATES:ALABAMA:Jefferson County
+38:US:USA:UNITED STATES:ALABAMA:Lamar County
+39:US:USA:UNITED STATES:ALABAMA:Lauderdale County
+40:US:USA:UNITED STATES:ALABAMA:Lawrence County
+41:US:USA:UNITED STATES:ALABAMA:Lee County
+42:US:USA:UNITED STATES:ALABAMA:Limestone County
+43:US:USA:UNITED STATES:ALABAMA:Lowndes County
+44:US:USA:UNITED STATES:ALABAMA:Macon County
+45:US:USA:UNITED STATES:ALABAMA:Madison County
+46:US:USA:UNITED STATES:ALABAMA:Marengo County
+47:US:USA:UNITED STATES:ALABAMA:Marion County
+48:US:USA:UNITED STATES:ALABAMA:Marshall County
+49:US:USA:UNITED STATES:ALABAMA:Mobile County
+50:US:USA:UNITED STATES:ALABAMA:Monroe County
+51:US:USA:UNITED STATES:ALABAMA:Montgomery County
+52:US:USA:UNITED STATES:ALABAMA:Morgan County
+53:US:USA:UNITED STATES:ALABAMA:Perry County
+54:US:USA:UNITED STATES:ALABAMA:Pickens County
+55:US:USA:UNITED STATES:ALABAMA:Pike County
+56:US:USA:UNITED STATES:ALABAMA:Randolph County
+57:US:USA:UNITED STATES:ALABAMA:Russell County
+58:US:USA:UNITED STATES:ALABAMA:Shelby County
+59:US:USA:UNITED STATES:ALABAMA:St. Clair County
+60:US:USA:UNITED STATES:ALABAMA:Sumter County
+61:US:USA:UNITED STATES:ALABAMA:Talladega County
+62:US:USA:UNITED STATES:ALABAMA:Tallapoosa County
+63:US:USA:UNITED STATES:ALABAMA:Tuscaloosa County
+64:US:USA:UNITED STATES:ALABAMA:Walker County
+65:US:USA:UNITED STATES:ALABAMA:Washington County
+66:US:USA:UNITED STATES:ALABAMA:Wilcox County
+67:US:USA:UNITED STATES:ALABAMA:Winston County
+1:US:USA:UNITED STATES:CONNECTICUT:Fairfield County
+2:US:USA:UNITED STATES:CONNECTICUT:Hartford County
+3:US:USA:UNITED STATES:CONNECTICUT:Litchfield County
+4:US:USA:UNITED STATES:CONNECTICUT:Middlesex County
+5:US:USA:UNITED STATES:CONNECTICUT:New Haven County
+6:US:USA:UNITED STATES:CONNECTICUT:New London County
+7:US:USA:UNITED STATES:CONNECTICUT:Tolland County
+8:US:USA:UNITED STATES:CONNECTICUT:Windham County
+1:US:USA:UNITED STATES:MONTANA:Beaverhead County
+2:US:USA:UNITED STATES:MONTANA:Big Horn County
+3:US:USA:UNITED STATES:MONTANA:Blaine County
+4:US:USA:UNITED STATES:MONTANA:Broadwater County
+5:US:USA:UNITED STATES:MONTANA:Carbon County
+6:US:USA:UNITED STATES:MONTANA:Carter County
+7:US:USA:UNITED STATES:MONTANA:Cascade County
+8:US:USA:UNITED STATES:MONTANA:Chouteau County
+9:US:USA:UNITED STATES:MONTANA:Custer County
+10:US:USA:UNITED STATES:MONTANA:Daniels County
+11:US:USA:UNITED STATES:MONTANA:Dawson County
+12:US:USA:UNITED STATES:MONTANA:Deer Lodge County
+13:US:USA:UNITED STATES:MONTANA:Fallon County
+14:US:USA:UNITED STATES:MONTANA:Fergus County
+15:US:USA:UNITED STATES:MONTANA:Flathead County
+16:US:USA:UNITED STATES:MONTANA:Gallatin County
+17:US:USA:UNITED STATES:MONTANA:Garfield County
+18:US:USA:UNITED STATES:MONTANA:Glacier County
+19:US:USA:UNITED STATES:MONTANA:Golden Valley County
+20:US:USA:UNITED STATES:MONTANA:Granite County
+21:US:USA:UNITED STATES:MONTANA:Hill County
+22:US:USA:UNITED STATES:MONTANA:Jefferson County
+23:US:USA:UNITED STATES:MONTANA:Judith Basin County
+24:US:USA:UNITED STATES:MONTANA:Lake County
+25:US:USA:UNITED STATES:MONTANA:Lewis and Clark County
+26:US:USA:UNITED STATES:MONTANA:Liberty County
+27:US:USA:UNITED STATES:MONTANA:Lincoln County
+28:US:USA:UNITED STATES:MONTANA:Madison County
+29:US:USA:UNITED STATES:MONTANA:McCone County
+30:US:USA:UNITED STATES:MONTANA:Meagher County
+31:US:USA:UNITED STATES:MONTANA:Mineral County
+32:US:USA:UNITED STATES:MONTANA:Missoula County
+33:US:USA:UNITED STATES:MONTANA:Musselshell County
+34:US:USA:UNITED STATES:MONTANA:Park County
+35:US:USA:UNITED STATES:MONTANA:Petroleum County
+36:US:USA:UNITED STATES:MONTANA:Phillips County
+37:US:USA:UNITED STATES:MONTANA:Pondera County
+38:US:USA:UNITED STATES:MONTANA:Powder River County
+39:US:USA:UNITED STATES:MONTANA:Powell County
+40:US:USA:UNITED STATES:MONTANA:Prairie County
+41:US:USA:UNITED STATES:MONTANA:Ravalli County
+42:US:USA:UNITED STATES:MONTANA:Richland County
+43:US:USA:UNITED STATES:MONTANA:Roosevelt County
+44:US:USA:UNITED STATES:MONTANA:Rosebud County
+45:US:USA:UNITED STATES:MONTANA:Sanders County
+46:US:USA:UNITED STATES:MONTANA:Sheridan County
+47:US:USA:UNITED STATES:MONTANA:Silver Bow County
+48:US:USA:UNITED STATES:MONTANA:Stillwater County
+49:US:USA:UNITED STATES:MONTANA:Sweet Grass County
+50:US:USA:UNITED STATES:MONTANA:Teton County
+51:US:USA:UNITED STATES:MONTANA:Toole County
+52:US:USA:UNITED STATES:MONTANA:Treasure County
+53:US:USA:UNITED STATES:MONTANA:Valley County
+54:US:USA:UNITED STATES:MONTANA:Wheatland County
+55:US:USA:UNITED STATES:MONTANA:Wibaux County
+56:US:USA:UNITED STATES:MONTANA:Yellowstone County
+1:US:USA:UNITED STATES:MAINE:Androscoggin County
+2:US:USA:UNITED STATES:MAINE:Aroostook County
+3:US:USA:UNITED STATES:MAINE:Cumberland County
+4:US:USA:UNITED STATES:MAINE:Franklin County
+5:US:USA:UNITED STATES:MAINE:Hancock County
+6:US:USA:UNITED STATES:MAINE:Kennebec County
+7:US:USA:UNITED STATES:MAINE:Knox County
+8:US:USA:UNITED STATES:MAINE:Lincoln County
+9:US:USA:UNITED STATES:MAINE:Oxford County
+10:US:USA:UNITED STATES:MAINE:Penobscot County
+11:US:USA:UNITED STATES:MAINE:Piscataquis County
+12:US:USA:UNITED STATES:MAINE:Sagadahoc County
+13:US:USA:UNITED STATES:MAINE:Somerset County
+14:US:USA:UNITED STATES:MAINE:Waldo County
+15:US:USA:UNITED STATES:MAINE:Washington County
+16:US:USA:UNITED STATES:MAINE:York County
+1:US:USA:UNITED STATES:FLORIDA:Alachua County
+2:US:USA:UNITED STATES:FLORIDA:Baker County
+3:US:USA:UNITED STATES:FLORIDA:Bay County
+4:US:USA:UNITED STATES:FLORIDA:Bradford County
+5:US:USA:UNITED STATES:FLORIDA:Brevard County
+6:US:USA:UNITED STATES:FLORIDA:Broward County
+7:US:USA:UNITED STATES:FLORIDA:Calhoun County
+8:US:USA:UNITED STATES:FLORIDA:Charlotte County
+9:US:USA:UNITED STATES:FLORIDA:Citrus County
+10:US:USA:UNITED STATES:FLORIDA:Clay County
+11:US:USA:UNITED STATES:FLORIDA:Collier County
+12:US:USA:UNITED STATES:FLORIDA:Columbia County
+13:US:USA:UNITED STATES:FLORIDA:DeSoto County
+14:US:USA:UNITED STATES:FLORIDA:Dixie County
+15:US:USA:UNITED STATES:FLORIDA:Duval County
+16:US:USA:UNITED STATES:FLORIDA:Escambia County
+17:US:USA:UNITED STATES:FLORIDA:Flagler County
+18:US:USA:UNITED STATES:FLORIDA:Franklin County
+19:US:USA:UNITED STATES:FLORIDA:Gadsden County
+20:US:USA:UNITED STATES:FLORIDA:Gilchrist County
+21:US:USA:UNITED STATES:FLORIDA:Glades County
+22:US:USA:UNITED STATES:FLORIDA:Gulf County
+23:US:USA:UNITED STATES:FLORIDA:Hamilton County
+24:US:USA:UNITED STATES:FLORIDA:Hardee County
+25:US:USA:UNITED STATES:FLORIDA:Hendry County
+26:US:USA:UNITED STATES:FLORIDA:Hernando County
+27:US:USA:UNITED STATES:FLORIDA:Highlands County
+28:US:USA:UNITED STATES:FLORIDA:Hillsborough County
+29:US:USA:UNITED STATES:FLORIDA:Holmes County
+30:US:USA:UNITED STATES:FLORIDA:Indian River County
+31:US:USA:UNITED STATES:FLORIDA:Jackson County
+32:US:USA:UNITED STATES:FLORIDA:Jefferson County
+33:US:USA:UNITED STATES:FLORIDA:Lafayette County
+34:US:USA:UNITED STATES:FLORIDA:Lake County
+35:US:USA:UNITED STATES:FLORIDA:Lee County
+36:US:USA:UNITED STATES:FLORIDA:Leon County
+37:US:USA:UNITED STATES:FLORIDA:Levy County
+38:US:USA:UNITED STATES:FLORIDA:Liberty County
+39:US:USA:UNITED STATES:FLORIDA:Madison County
+40:US:USA:UNITED STATES:FLORIDA:Manatee County
+41:US:USA:UNITED STATES:FLORIDA:Marion County
+42:US:USA:UNITED STATES:FLORIDA:Martin County
+43:US:USA:UNITED STATES:FLORIDA:Miami-Dade County
+44:US:USA:UNITED STATES:FLORIDA:Monroe County
+45:US:USA:UNITED STATES:FLORIDA:Nassau County
+46:US:USA:UNITED STATES:FLORIDA:Okaloosa County
+47:US:USA:UNITED STATES:FLORIDA:Okeechobee County
+48:US:USA:UNITED STATES:FLORIDA:Orange County
+49:US:USA:UNITED STATES:FLORIDA:Osceola County
+50:US:USA:UNITED STATES:FLORIDA:Palm Beach County
+51:US:USA:UNITED STATES:FLORIDA:Pasco County
+52:US:USA:UNITED STATES:FLORIDA:Pinellas County
+53:US:USA:UNITED STATES:FLORIDA:Polk County
+54:US:USA:UNITED STATES:FLORIDA:Putnam County
+55:US:USA:UNITED STATES:FLORIDA:Santa Rosa County
+56:US:USA:UNITED STATES:FLORIDA:Sarasota County
+57:US:USA:UNITED STATES:FLORIDA:Seminole County
+58:US:USA:UNITED STATES:FLORIDA:St. Johns County
+59:US:USA:UNITED STATES:FLORIDA:St. Lucie County
+60:US:USA:UNITED STATES:FLORIDA:Sumter County
+61:US:USA:UNITED STATES:FLORIDA:Suwannee County
+62:US:USA:UNITED STATES:FLORIDA:Taylor County
+63:US:USA:UNITED STATES:FLORIDA:Union County
+64:US:USA:UNITED STATES:FLORIDA:Volusia County
+65:US:USA:UNITED STATES:FLORIDA:Wakulla County
+66:US:USA:UNITED STATES:FLORIDA:Walton County
+67:US:USA:UNITED STATES:FLORIDA:Washington County
+1:US:USA:UNITED STATES:UTAH:Beaver County
+2:US:USA:UNITED STATES:UTAH:Box Elder County
+3:US:USA:UNITED STATES:UTAH:Cache County
+4:US:USA:UNITED STATES:UTAH:Carbon County
+5:US:USA:UNITED STATES:UTAH:Daggett County
+6:US:USA:UNITED STATES:UTAH:Davis County
+7:US:USA:UNITED STATES:UTAH:Duchesne County
+8:US:USA:UNITED STATES:UTAH:Emery County
+9:US:USA:UNITED STATES:UTAH:Garfield County
+10:US:USA:UNITED STATES:UTAH:Grand County
+11:US:USA:UNITED STATES:UTAH:Iron County
+12:US:USA:UNITED STATES:UTAH:Juab County
+13:US:USA:UNITED STATES:UTAH:Kane County
+14:US:USA:UNITED STATES:UTAH:Millard County
+15:US:USA:UNITED STATES:UTAH:Morgan County
+16:US:USA:UNITED STATES:UTAH:Piute County
+17:US:USA:UNITED STATES:UTAH:Rich County
+18:US:USA:UNITED STATES:UTAH:Salt Lake County
+19:US:USA:UNITED STATES:UTAH:San Juan County
+20:US:USA:UNITED STATES:UTAH:Sanpete County
+21:US:USA:UNITED STATES:UTAH:Sevier County
+22:US:USA:UNITED STATES:UTAH:Summit County
+23:US:USA:UNITED STATES:UTAH:Tooele County
+24:US:USA:UNITED STATES:UTAH:Uintah County
+25:US:USA:UNITED STATES:UTAH:Utah County
+26:US:USA:UNITED STATES:UTAH:Wasatch County
+27:US:USA:UNITED STATES:UTAH:Washington County
+28:US:USA:UNITED STATES:UTAH:Wayne County
+29:US:USA:UNITED STATES:UTAH:Weber County
+1:US:USA:UNITED STATES:NEW HAMPSHIRE:Belknap County
+2:US:USA:UNITED STATES:NEW HAMPSHIRE:Carroll County
+3:US:USA:UNITED STATES:NEW HAMPSHIRE:Cheshire County
+4:US:USA:UNITED STATES:NEW HAMPSHIRE:Coos County
+5:US:USA:UNITED STATES:NEW HAMPSHIRE:Grafton County
+6:US:USA:UNITED STATES:NEW HAMPSHIRE:Hillsborough County
+7:US:USA:UNITED STATES:NEW HAMPSHIRE:Merrimack County
+8:US:USA:UNITED STATES:NEW HAMPSHIRE:Rockingham County
+9:US:USA:UNITED STATES:NEW HAMPSHIRE:Strafford County
+10:US:USA:UNITED STATES:NEW HAMPSHIRE:Sullivan County
+1:US:USA:UNITED STATES:IOWA:Adair County
+2:US:USA:UNITED STATES:IOWA:Adams County
+3:US:USA:UNITED STATES:IOWA:Allamakee County
+4:US:USA:UNITED STATES:IOWA:Appanoose County
+5:US:USA:UNITED STATES:IOWA:Audubon County
+6:US:USA:UNITED STATES:IOWA:Benton County
+7:US:USA:UNITED STATES:IOWA:Black Hawk County
+8:US:USA:UNITED STATES:IOWA:Boone County
+9:US:USA:UNITED STATES:IOWA:Bremer County
+10:US:USA:UNITED STATES:IOWA:Buchanan County
+11:US:USA:UNITED STATES:IOWA:Buena Vista County
+12:US:USA:UNITED STATES:IOWA:Butler County
+13:US:USA:UNITED STATES:IOWA:Calhoun County
+14:US:USA:UNITED STATES:IOWA:Carroll County
+15:US:USA:UNITED STATES:IOWA:Cass County
+16:US:USA:UNITED STATES:IOWA:Cedar County
+17:US:USA:UNITED STATES:IOWA:Cerro Gordo County
+18:US:USA:UNITED STATES:IOWA:Cherokee County
+19:US:USA:UNITED STATES:IOWA:Chickasaw County
+20:US:USA:UNITED STATES:IOWA:Clarke County
+21:US:USA:UNITED STATES:IOWA:Clay County
+22:US:USA:UNITED STATES:IOWA:Clayton County
+23:US:USA:UNITED STATES:IOWA:Clinton County
+24:US:USA:UNITED STATES:IOWA:Crawford County
+25:US:USA:UNITED STATES:IOWA:Dallas County
+26:US:USA:UNITED STATES:IOWA:Davis County
+27:US:USA:UNITED STATES:IOWA:Decatur County
+28:US:USA:UNITED STATES:IOWA:Delaware County
+29:US:USA:UNITED STATES:IOWA:Des Moines County
+30:US:USA:UNITED STATES:IOWA:Dickinson County
+31:US:USA:UNITED STATES:IOWA:Dubuque County
+32:US:USA:UNITED STATES:IOWA:Emmet County
+33:US:USA:UNITED STATES:IOWA:Fayette County
+34:US:USA:UNITED STATES:IOWA:Floyd County
+35:US:USA:UNITED STATES:IOWA:Franklin County
+36:US:USA:UNITED STATES:IOWA:Fremont County
+37:US:USA:UNITED STATES:IOWA:Greene County
+38:US:USA:UNITED STATES:IOWA:Grundy County
+39:US:USA:UNITED STATES:IOWA:Guthrie County
+40:US:USA:UNITED STATES:IOWA:Hamilton County
+41:US:USA:UNITED STATES:IOWA:Hancock County
+42:US:USA:UNITED STATES:IOWA:Hardin County
+43:US:USA:UNITED STATES:IOWA:Harrison County
+44:US:USA:UNITED STATES:IOWA:Henry County
+45:US:USA:UNITED STATES:IOWA:Howard County
+46:US:USA:UNITED STATES:IOWA:Humboldt County
+47:US:USA:UNITED STATES:IOWA:Ida County
+48:US:USA:UNITED STATES:IOWA:Iowa County
+49:US:USA:UNITED STATES:IOWA:Jackson County
+50:US:USA:UNITED STATES:IOWA:Jasper County
+51:US:USA:UNITED STATES:IOWA:Jefferson County
+52:US:USA:UNITED STATES:IOWA:Johnson County
+53:US:USA:UNITED STATES:IOWA:Jones County
+54:US:USA:UNITED STATES:IOWA:Keokuk County
+55:US:USA:UNITED STATES:IOWA:Kossuth County
+56:US:USA:UNITED STATES:IOWA:Lee County
+57:US:USA:UNITED STATES:IOWA:Linn County
+58:US:USA:UNITED STATES:IOWA:Louisa County
+59:US:USA:UNITED STATES:IOWA:Lucas County
+60:US:USA:UNITED STATES:IOWA:Lyon County
+61:US:USA:UNITED STATES:IOWA:Madison County
+62:US:USA:UNITED STATES:IOWA:Mahaska County
+63:US:USA:UNITED STATES:IOWA:Marion County
+64:US:USA:UNITED STATES:IOWA:Marshall County
+65:US:USA:UNITED STATES:IOWA:Mills County
+66:US:USA:UNITED STATES:IOWA:Mitchell County
+67:US:USA:UNITED STATES:IOWA:Monona County
+68:US:USA:UNITED STATES:IOWA:Monroe County
+69:US:USA:UNITED STATES:IOWA:Montgomery County
+70:US:USA:UNITED STATES:IOWA:Muscatine County
+71:US:USA:UNITED STATES:IOWA:O'Brien County
+72:US:USA:UNITED STATES:IOWA:Osceola County
+73:US:USA:UNITED STATES:IOWA:Page County
+74:US:USA:UNITED STATES:IOWA:Palo Alto County
+75:US:USA:UNITED STATES:IOWA:Plymouth County
+76:US:USA:UNITED STATES:IOWA:Pocahontas County
+77:US:USA:UNITED STATES:IOWA:Polk County
+78:US:USA:UNITED STATES:IOWA:Pottawattamie County
+79:US:USA:UNITED STATES:IOWA:Poweshiek County
+80:US:USA:UNITED STATES:IOWA:Ringgold County
+81:US:USA:UNITED STATES:IOWA:Sac County
+82:US:USA:UNITED STATES:IOWA:Scott County
+83:US:USA:UNITED STATES:IOWA:Shelby County
+84:US:USA:UNITED STATES:IOWA:Sioux County
+85:US:USA:UNITED STATES:IOWA:Story County
+86:US:USA:UNITED STATES:IOWA:Tama County
+87:US:USA:UNITED STATES:IOWA:Taylor County
+88:US:USA:UNITED STATES:IOWA:Union County
+89:US:USA:UNITED STATES:IOWA:Van Buren County
+90:US:USA:UNITED STATES:IOWA:Wapello County
+91:US:USA:UNITED STATES:IOWA:Warren County
+92:US:USA:UNITED STATES:IOWA:Washington County
+93:US:USA:UNITED STATES:IOWA:Wayne County
+94:US:USA:UNITED STATES:IOWA:Webster County
+95:US:USA:UNITED STATES:IOWA:Winnebago County
+96:US:USA:UNITED STATES:IOWA:Winneshiek County
+97:US:USA:UNITED STATES:IOWA:Woodbury County
+98:US:USA:UNITED STATES:IOWA:Worth County
+99:US:USA:UNITED STATES:IOWA:Wright County
+1:US:USA:UNITED STATES:ILLINOIS:Adams County
+2:US:USA:UNITED STATES:ILLINOIS:Alexander County
+3:US:USA:UNITED STATES:ILLINOIS:Bond County
+4:US:USA:UNITED STATES:ILLINOIS:Boone County
+5:US:USA:UNITED STATES:ILLINOIS:Brown County
+6:US:USA:UNITED STATES:ILLINOIS:Bureau County
+7:US:USA:UNITED STATES:ILLINOIS:Calhoun County
+8:US:USA:UNITED STATES:ILLINOIS:Carroll County
+9:US:USA:UNITED STATES:ILLINOIS:Cass County
+10:US:USA:UNITED STATES:ILLINOIS:Champaign County
+11:US:USA:UNITED STATES:ILLINOIS:Christian County
+12:US:USA:UNITED STATES:ILLINOIS:Clark County
+13:US:USA:UNITED STATES:ILLINOIS:Clay County
+14:US:USA:UNITED STATES:ILLINOIS:Clinton County
+15:US:USA:UNITED STATES:ILLINOIS:Coles County
+16:US:USA:UNITED STATES:ILLINOIS:Cook County
+17:US:USA:UNITED STATES:ILLINOIS:Crawford County
+18:US:USA:UNITED STATES:ILLINOIS:Cumberland County
+19:US:USA:UNITED STATES:ILLINOIS:De Witt County
+20:US:USA:UNITED STATES:ILLINOIS:DeKalb County
+21:US:USA:UNITED STATES:ILLINOIS:Douglas County
+22:US:USA:UNITED STATES:ILLINOIS:DuPage County
+23:US:USA:UNITED STATES:ILLINOIS:Edgar County
+24:US:USA:UNITED STATES:ILLINOIS:Edwards County
+25:US:USA:UNITED STATES:ILLINOIS:Effingham County
+26:US:USA:UNITED STATES:ILLINOIS:Fayette County
+27:US:USA:UNITED STATES:ILLINOIS:Ford County
+28:US:USA:UNITED STATES:ILLINOIS:Franklin County
+29:US:USA:UNITED STATES:ILLINOIS:Fulton County
+30:US:USA:UNITED STATES:ILLINOIS:Gallatin County
+31:US:USA:UNITED STATES:ILLINOIS:Greene County
+32:US:USA:UNITED STATES:ILLINOIS:Grundy County
+33:US:USA:UNITED STATES:ILLINOIS:Hamilton County
+34:US:USA:UNITED STATES:ILLINOIS:Hancock County
+35:US:USA:UNITED STATES:ILLINOIS:Hardin County
+36:US:USA:UNITED STATES:ILLINOIS:Henderson County
+37:US:USA:UNITED STATES:ILLINOIS:Henry County
+38:US:USA:UNITED STATES:ILLINOIS:Iroquois County
+39:US:USA:UNITED STATES:ILLINOIS:Jackson County
+40:US:USA:UNITED STATES:ILLINOIS:Jasper County
+41:US:USA:UNITED STATES:ILLINOIS:Jefferson County
+42:US:USA:UNITED STATES:ILLINOIS:Jersey County
+43:US:USA:UNITED STATES:ILLINOIS:Jo Daviess County
+44:US:USA:UNITED STATES:ILLINOIS:Johnson County
+45:US:USA:UNITED STATES:ILLINOIS:Kane County
+46:US:USA:UNITED STATES:ILLINOIS:Kankakee County
+47:US:USA:UNITED STATES:ILLINOIS:Kendall County
+48:US:USA:UNITED STATES:ILLINOIS:Knox County
+49:US:USA:UNITED STATES:ILLINOIS:La Salle County
+50:US:USA:UNITED STATES:ILLINOIS:Lake County
+51:US:USA:UNITED STATES:ILLINOIS:Lawrence County
+52:US:USA:UNITED STATES:ILLINOIS:Lee County
+53:US:USA:UNITED STATES:ILLINOIS:Livingston County
+54:US:USA:UNITED STATES:ILLINOIS:Logan County
+55:US:USA:UNITED STATES:ILLINOIS:Macon County
+56:US:USA:UNITED STATES:ILLINOIS:Macoupin County
+57:US:USA:UNITED STATES:ILLINOIS:Madison County
+58:US:USA:UNITED STATES:ILLINOIS:Marion County
+59:US:USA:UNITED STATES:ILLINOIS:Marshall County
+60:US:USA:UNITED STATES:ILLINOIS:Mason County
+61:US:USA:UNITED STATES:ILLINOIS:Massac County
+62:US:USA:UNITED STATES:ILLINOIS:McDonough County
+63:US:USA:UNITED STATES:ILLINOIS:McHenry County
+64:US:USA:UNITED STATES:ILLINOIS:McLean County
+65:US:USA:UNITED STATES:ILLINOIS:Menard County
+66:US:USA:UNITED STATES:ILLINOIS:Mercer County
+67:US:USA:UNITED STATES:ILLINOIS:Monroe County
+68:US:USA:UNITED STATES:ILLINOIS:Montgomery County
+69:US:USA:UNITED STATES:ILLINOIS:Morgan County
+70:US:USA:UNITED STATES:ILLINOIS:Moultrie County
+71:US:USA:UNITED STATES:ILLINOIS:Ogle County
+72:US:USA:UNITED STATES:ILLINOIS:Peoria County
+73:US:USA:UNITED STATES:ILLINOIS:Perry County
+74:US:USA:UNITED STATES:ILLINOIS:Piatt County
+75:US:USA:UNITED STATES:ILLINOIS:Pike County
+76:US:USA:UNITED STATES:ILLINOIS:Pope County
+77:US:USA:UNITED STATES:ILLINOIS:Pulaski County
+78:US:USA:UNITED STATES:ILLINOIS:Putnam County
+79:US:USA:UNITED STATES:ILLINOIS:Randolph County
+80:US:USA:UNITED STATES:ILLINOIS:Richland County
+81:US:USA:UNITED STATES:ILLINOIS:Rock Island County
+82:US:USA:UNITED STATES:ILLINOIS:Saline County
+83:US:USA:UNITED STATES:ILLINOIS:Sangamon County
+84:US:USA:UNITED STATES:ILLINOIS:Schuyler County
+85:US:USA:UNITED STATES:ILLINOIS:Scott County
+86:US:USA:UNITED STATES:ILLINOIS:Shelby County
+87:US:USA:UNITED STATES:ILLINOIS:St. Clair County
+88:US:USA:UNITED STATES:ILLINOIS:Stark County
+89:US:USA:UNITED STATES:ILLINOIS:Stephenson County
+90:US:USA:UNITED STATES:ILLINOIS:Tazewell County
+91:US:USA:UNITED STATES:ILLINOIS:Union County
+92:US:USA:UNITED STATES:ILLINOIS:Vermilion County
+93:US:USA:UNITED STATES:ILLINOIS:Wabash County
+94:US:USA:UNITED STATES:ILLINOIS:Warren County
+95:US:USA:UNITED STATES:ILLINOIS:Washington County
+96:US:USA:UNITED STATES:ILLINOIS:Wayne County
+97:US:USA:UNITED STATES:ILLINOIS:White County
+98:US:USA:UNITED STATES:ILLINOIS:Whiteside County
+99:US:USA:UNITED STATES:ILLINOIS:Will County
+100:US:USA:UNITED STATES:ILLINOIS:Williamson County
+101:US:USA:UNITED STATES:ILLINOIS:Winnebago County
+102:US:USA:UNITED STATES:ILLINOIS:Woodford County
+1:US:USA:UNITED STATES:NORTH DAKOTA:Adams County
+2:US:USA:UNITED STATES:NORTH DAKOTA:Barnes County
+3:US:USA:UNITED STATES:NORTH DAKOTA:Benson County
+4:US:USA:UNITED STATES:NORTH DAKOTA:Billings County
+5:US:USA:UNITED STATES:NORTH DAKOTA:Bottineau County
+6:US:USA:UNITED STATES:NORTH DAKOTA:Bowman County
+7:US:USA:UNITED STATES:NORTH DAKOTA:Burke County
+8:US:USA:UNITED STATES:NORTH DAKOTA:Burleigh County
+9:US:USA:UNITED STATES:NORTH DAKOTA:Cass County
+10:US:USA:UNITED STATES:NORTH DAKOTA:Cavalier County
+11:US:USA:UNITED STATES:NORTH DAKOTA:Dickey County
+12:US:USA:UNITED STATES:NORTH DAKOTA:Divide County
+13:US:USA:UNITED STATES:NORTH DAKOTA:Dunn County
+14:US:USA:UNITED STATES:NORTH DAKOTA:Eddy County
+15:US:USA:UNITED STATES:NORTH DAKOTA:Emmons County
+16:US:USA:UNITED STATES:NORTH DAKOTA:Foster County
+17:US:USA:UNITED STATES:NORTH DAKOTA:Golden Valley County
+18:US:USA:UNITED STATES:NORTH DAKOTA:Grand Forks County
+19:US:USA:UNITED STATES:NORTH DAKOTA:Grant County
+20:US:USA:UNITED STATES:NORTH DAKOTA:Griggs County
+21:US:USA:UNITED STATES:NORTH DAKOTA:Hettinger County
+22:US:USA:UNITED STATES:NORTH DAKOTA:Kidder County
+23:US:USA:UNITED STATES:NORTH DAKOTA:LaMoure County
+24:US:USA:UNITED STATES:NORTH DAKOTA:Logan County
+25:US:USA:UNITED STATES:NORTH DAKOTA:McHenry County
+26:US:USA:UNITED STATES:NORTH DAKOTA:McIntosh County
+27:US:USA:UNITED STATES:NORTH DAKOTA:McKenzie County
+28:US:USA:UNITED STATES:NORTH DAKOTA:McLean County
+29:US:USA:UNITED STATES:NORTH DAKOTA:Mercer County
+30:US:USA:UNITED STATES:NORTH DAKOTA:Morton County
+31:US:USA:UNITED STATES:NORTH DAKOTA:Mountrail County
+32:US:USA:UNITED STATES:NORTH DAKOTA:Nelson County
+33:US:USA:UNITED STATES:NORTH DAKOTA:Oliver County
+34:US:USA:UNITED STATES:NORTH DAKOTA:Pembina County
+35:US:USA:UNITED STATES:NORTH DAKOTA:Pierce County
+36:US:USA:UNITED STATES:NORTH DAKOTA:Ramsey County
+37:US:USA:UNITED STATES:NORTH DAKOTA:Ransom County
+38:US:USA:UNITED STATES:NORTH DAKOTA:Renville County
+39:US:USA:UNITED STATES:NORTH DAKOTA:Richland County
+40:US:USA:UNITED STATES:NORTH DAKOTA:Rolette County
+41:US:USA:UNITED STATES:NORTH DAKOTA:Sargent County
+42:US:USA:UNITED STATES:NORTH DAKOTA:Sheridan County
+43:US:USA:UNITED STATES:NORTH DAKOTA:Sioux County
+44:US:USA:UNITED STATES:NORTH DAKOTA:Slope County
+45:US:USA:UNITED STATES:NORTH DAKOTA:Stark County
+46:US:USA:UNITED STATES:NORTH DAKOTA:Steele County
+47:US:USA:UNITED STATES:NORTH DAKOTA:Stutsman County
+48:US:USA:UNITED STATES:NORTH DAKOTA:Towner County
+49:US:USA:UNITED STATES:NORTH DAKOTA:Traill County
+50:US:USA:UNITED STATES:NORTH DAKOTA:Walsh County
+51:US:USA:UNITED STATES:NORTH DAKOTA:Ward County
+52:US:USA:UNITED STATES:NORTH DAKOTA:Wells County
+53:US:USA:UNITED STATES:NORTH DAKOTA:Williams County
+1:US:USA:UNITED STATES:MISSOURI:Adair County
+2:US:USA:UNITED STATES:MISSOURI:Andrew County
+3:US:USA:UNITED STATES:MISSOURI:Atchison County
+4:US:USA:UNITED STATES:MISSOURI:Audrain County
+5:US:USA:UNITED STATES:MISSOURI:Barry County
+6:US:USA:UNITED STATES:MISSOURI:Barton County
+7:US:USA:UNITED STATES:MISSOURI:Bates County
+8:US:USA:UNITED STATES:MISSOURI:Benton County
+9:US:USA:UNITED STATES:MISSOURI:Bollinger County
+10:US:USA:UNITED STATES:MISSOURI:Boone County
+11:US:USA:UNITED STATES:MISSOURI:Buchanan County
+12:US:USA:UNITED STATES:MISSOURI:Butler County
+13:US:USA:UNITED STATES:MISSOURI:Caldwell County
+14:US:USA:UNITED STATES:MISSOURI:Callaway County
+15:US:USA:UNITED STATES:MISSOURI:Camden County
+16:US:USA:UNITED STATES:MISSOURI:Cape Girardeau County
+17:US:USA:UNITED STATES:MISSOURI:Carroll County
+18:US:USA:UNITED STATES:MISSOURI:Carter County
+19:US:USA:UNITED STATES:MISSOURI:Cass County
+20:US:USA:UNITED STATES:MISSOURI:Cedar County
+21:US:USA:UNITED STATES:MISSOURI:Chariton County
+22:US:USA:UNITED STATES:MISSOURI:Christian County
+23:US:USA:UNITED STATES:MISSOURI:Clark County
+24:US:USA:UNITED STATES:MISSOURI:Clay County
+25:US:USA:UNITED STATES:MISSOURI:Clinton County
+26:US:USA:UNITED STATES:MISSOURI:Cole County
+27:US:USA:UNITED STATES:MISSOURI:Cooper County
+28:US:USA:UNITED STATES:MISSOURI:Crawford County
+29:US:USA:UNITED STATES:MISSOURI:Dade County
+30:US:USA:UNITED STATES:MISSOURI:Dallas County
+31:US:USA:UNITED STATES:MISSOURI:Daviess County
+32:US:USA:UNITED STATES:MISSOURI:DeKalb County
+33:US:USA:UNITED STATES:MISSOURI:Dent County
+34:US:USA:UNITED STATES:MISSOURI:Douglas County
+35:US:USA:UNITED STATES:MISSOURI:Dunklin County
+36:US:USA:UNITED STATES:MISSOURI:Franklin County
+37:US:USA:UNITED STATES:MISSOURI:Gasconade County
+38:US:USA:UNITED STATES:MISSOURI:Gentry County
+39:US:USA:UNITED STATES:MISSOURI:Greene County
+40:US:USA:UNITED STATES:MISSOURI:Grundy County
+41:US:USA:UNITED STATES:MISSOURI:Harrison County
+42:US:USA:UNITED STATES:MISSOURI:Henry County
+43:US:USA:UNITED STATES:MISSOURI:Hickory County
+44:US:USA:UNITED STATES:MISSOURI:Holt County
+45:US:USA:UNITED STATES:MISSOURI:Howard County
+46:US:USA:UNITED STATES:MISSOURI:Howell County
+47:US:USA:UNITED STATES:MISSOURI:Iron County
+48:US:USA:UNITED STATES:MISSOURI:Jackson County
+49:US:USA:UNITED STATES:MISSOURI:Jasper County
+50:US:USA:UNITED STATES:MISSOURI:Jefferson County
+51:US:USA:UNITED STATES:MISSOURI:Johnson County
+52:US:USA:UNITED STATES:MISSOURI:Knox County
+53:US:USA:UNITED STATES:MISSOURI:Laclede County
+54:US:USA:UNITED STATES:MISSOURI:Lafayette County
+55:US:USA:UNITED STATES:MISSOURI:Lawrence County
+56:US:USA:UNITED STATES:MISSOURI:Lewis County
+57:US:USA:UNITED STATES:MISSOURI:Lincoln County
+58:US:USA:UNITED STATES:MISSOURI:Linn County
+59:US:USA:UNITED STATES:MISSOURI:Livingston County
+60:US:USA:UNITED STATES:MISSOURI:Macon County
+61:US:USA:UNITED STATES:MISSOURI:Madison County
+62:US:USA:UNITED STATES:MISSOURI:Maries County
+63:US:USA:UNITED STATES:MISSOURI:Marion County
+64:US:USA:UNITED STATES:MISSOURI:McDonald County
+65:US:USA:UNITED STATES:MISSOURI:Mercer County
+66:US:USA:UNITED STATES:MISSOURI:Miller County
+67:US:USA:UNITED STATES:MISSOURI:Mississippi County
+68:US:USA:UNITED STATES:MISSOURI:Moniteau County
+69:US:USA:UNITED STATES:MISSOURI:Monroe County
+70:US:USA:UNITED STATES:MISSOURI:Montgomery County
+71:US:USA:UNITED STATES:MISSOURI:Morgan County
+72:US:USA:UNITED STATES:MISSOURI:New Madrid County
+73:US:USA:UNITED STATES:MISSOURI:Newton County
+74:US:USA:UNITED STATES:MISSOURI:Nodaway County
+75:US:USA:UNITED STATES:MISSOURI:Oregon County
+76:US:USA:UNITED STATES:MISSOURI:Osage County
+77:US:USA:UNITED STATES:MISSOURI:Ozark County
+78:US:USA:UNITED STATES:MISSOURI:Pemiscot County
+79:US:USA:UNITED STATES:MISSOURI:Perry County
+80:US:USA:UNITED STATES:MISSOURI:Pettis County
+81:US:USA:UNITED STATES:MISSOURI:Phelps County
+82:US:USA:UNITED STATES:MISSOURI:Pike County
+83:US:USA:UNITED STATES:MISSOURI:Platte County
+84:US:USA:UNITED STATES:MISSOURI:Polk County
+85:US:USA:UNITED STATES:MISSOURI:Pulaski County
+86:US:USA:UNITED STATES:MISSOURI:Putnam County
+87:US:USA:UNITED STATES:MISSOURI:Ralls County
+88:US:USA:UNITED STATES:MISSOURI:Randolph County
+89:US:USA:UNITED STATES:MISSOURI:Ray County
+90:US:USA:UNITED STATES:MISSOURI:Reynolds County
+91:US:USA:UNITED STATES:MISSOURI:Ripley County
+92:US:USA:UNITED STATES:MISSOURI:Saline County
+93:US:USA:UNITED STATES:MISSOURI:Schuyler County
+94:US:USA:UNITED STATES:MISSOURI:Scotland County
+95:US:USA:UNITED STATES:MISSOURI:Scott County
+96:US:USA:UNITED STATES:MISSOURI:Shannon County
+97:US:USA:UNITED STATES:MISSOURI:Shelby County
+98:US:USA:UNITED STATES:MISSOURI:St. Charles County
+99:US:USA:UNITED STATES:MISSOURI:St. Clair County
+100:US:USA:UNITED STATES:MISSOURI:St. Francois County
+101:US:USA:UNITED STATES:MISSOURI:St. Louis County
+102:US:USA:UNITED STATES:MISSOURI:St. Louis city
+103:US:USA:UNITED STATES:MISSOURI:Ste. Genevieve County
+104:US:USA:UNITED STATES:MISSOURI:Stoddard County
+105:US:USA:UNITED STATES:MISSOURI:Stone County
+106:US:USA:UNITED STATES:MISSOURI:Sullivan County
+107:US:USA:UNITED STATES:MISSOURI:Taney County
+108:US:USA:UNITED STATES:MISSOURI:Texas County
+109:US:USA:UNITED STATES:MISSOURI:Vernon County
+110:US:USA:UNITED STATES:MISSOURI:Warren County
+111:US:USA:UNITED STATES:MISSOURI:Washington County
+112:US:USA:UNITED STATES:MISSOURI:Wayne County
+113:US:USA:UNITED STATES:MISSOURI:Webster County
+114:US:USA:UNITED STATES:MISSOURI:Worth County
+115:US:USA:UNITED STATES:MISSOURI:Wright County
+1:US:USA:UNITED STATES:INDIANA:Adams County
+2:US:USA:UNITED STATES:INDIANA:Allen County
+3:US:USA:UNITED STATES:INDIANA:Bartholomew County
+4:US:USA:UNITED STATES:INDIANA:Benton County
+5:US:USA:UNITED STATES:INDIANA:Blackford County
+6:US:USA:UNITED STATES:INDIANA:Boone County
+7:US:USA:UNITED STATES:INDIANA:Brown County
+8:US:USA:UNITED STATES:INDIANA:Carroll County
+9:US:USA:UNITED STATES:INDIANA:Cass County
+10:US:USA:UNITED STATES:INDIANA:Clark County
+11:US:USA:UNITED STATES:INDIANA:Clay County
+12:US:USA:UNITED STATES:INDIANA:Clinton County
+13:US:USA:UNITED STATES:INDIANA:Crawford County
+14:US:USA:UNITED STATES:INDIANA:Daviess County
+15:US:USA:UNITED STATES:INDIANA:DeKalb County
+16:US:USA:UNITED STATES:INDIANA:Dearborn County
+17:US:USA:UNITED STATES:INDIANA:Decatur County
+18:US:USA:UNITED STATES:INDIANA:Delaware County
+19:US:USA:UNITED STATES:INDIANA:Dubois County
+20:US:USA:UNITED STATES:INDIANA:Elkhart County
+21:US:USA:UNITED STATES:INDIANA:Fayette County
+22:US:USA:UNITED STATES:INDIANA:Floyd County
+23:US:USA:UNITED STATES:INDIANA:Fountain County
+24:US:USA:UNITED STATES:INDIANA:Franklin County
+25:US:USA:UNITED STATES:INDIANA:Fulton County
+26:US:USA:UNITED STATES:INDIANA:Gibson County
+27:US:USA:UNITED STATES:INDIANA:Grant County
+28:US:USA:UNITED STATES:INDIANA:Greene County
+29:US:USA:UNITED STATES:INDIANA:Hamilton County
+30:US:USA:UNITED STATES:INDIANA:Hancock County
+31:US:USA:UNITED STATES:INDIANA:Harrison County
+32:US:USA:UNITED STATES:INDIANA:Hendricks County
+33:US:USA:UNITED STATES:INDIANA:Henry County
+34:US:USA:UNITED STATES:INDIANA:Howard County
+35:US:USA:UNITED STATES:INDIANA:Huntington County
+36:US:USA:UNITED STATES:INDIANA:Jackson County
+37:US:USA:UNITED STATES:INDIANA:Jasper County
+38:US:USA:UNITED STATES:INDIANA:Jay County
+39:US:USA:UNITED STATES:INDIANA:Jefferson County
+40:US:USA:UNITED STATES:INDIANA:Jennings County
+41:US:USA:UNITED STATES:INDIANA:Johnson County
+42:US:USA:UNITED STATES:INDIANA:Knox County
+43:US:USA:UNITED STATES:INDIANA:Kosciusko County
+44:US:USA:UNITED STATES:INDIANA:LaGrange County
+45:US:USA:UNITED STATES:INDIANA:LaPorte County
+46:US:USA:UNITED STATES:INDIANA:Lake County
+47:US:USA:UNITED STATES:INDIANA:Lawrence County
+48:US:USA:UNITED STATES:INDIANA:Madison County
+49:US:USA:UNITED STATES:INDIANA:Marion County
+50:US:USA:UNITED STATES:INDIANA:Marshall County
+51:US:USA:UNITED STATES:INDIANA:Martin County
+52:US:USA:UNITED STATES:INDIANA:Miami County
+53:US:USA:UNITED STATES:INDIANA:Monroe County
+54:US:USA:UNITED STATES:INDIANA:Montgomery County
+55:US:USA:UNITED STATES:INDIANA:Morgan County
+56:US:USA:UNITED STATES:INDIANA:Newton County
+57:US:USA:UNITED STATES:INDIANA:Noble County
+58:US:USA:UNITED STATES:INDIANA:Ohio County
+59:US:USA:UNITED STATES:INDIANA:Orange County
+60:US:USA:UNITED STATES:INDIANA:Owen County
+61:US:USA:UNITED STATES:INDIANA:Parke County
+62:US:USA:UNITED STATES:INDIANA:Perry County
+63:US:USA:UNITED STATES:INDIANA:Pike County
+64:US:USA:UNITED STATES:INDIANA:Porter County
+65:US:USA:UNITED STATES:INDIANA:Posey County
+66:US:USA:UNITED STATES:INDIANA:Pulaski County
+67:US:USA:UNITED STATES:INDIANA:Putnam County
+68:US:USA:UNITED STATES:INDIANA:Randolph County
+69:US:USA:UNITED STATES:INDIANA:Ripley County
+70:US:USA:UNITED STATES:INDIANA:Rush County
+71:US:USA:UNITED STATES:INDIANA:Scott County
+72:US:USA:UNITED STATES:INDIANA:Shelby County
+73:US:USA:UNITED STATES:INDIANA:Spencer County
+74:US:USA:UNITED STATES:INDIANA:St. Joseph County
+75:US:USA:UNITED STATES:INDIANA:Starke County
+76:US:USA:UNITED STATES:INDIANA:Steuben County
+77:US:USA:UNITED STATES:INDIANA:Sullivan County
+78:US:USA:UNITED STATES:INDIANA:Switzerland County
+79:US:USA:UNITED STATES:INDIANA:Tippecanoe County
+80:US:USA:UNITED STATES:INDIANA:Tipton County
+81:US:USA:UNITED STATES:INDIANA:Union County
+82:US:USA:UNITED STATES:INDIANA:Vanderburgh County
+83:US:USA:UNITED STATES:INDIANA:Vermillion County
+84:US:USA:UNITED STATES:INDIANA:Vigo County
+85:US:USA:UNITED STATES:INDIANA:Wabash County
+86:US:USA:UNITED STATES:INDIANA:Warren County
+87:US:USA:UNITED STATES:INDIANA:Warrick County
+88:US:USA:UNITED STATES:INDIANA:Washington County
+89:US:USA:UNITED STATES:INDIANA:Wayne County
+90:US:USA:UNITED STATES:INDIANA:Wells County
+91:US:USA:UNITED STATES:INDIANA:White County
+92:US:USA:UNITED STATES:INDIANA:Whitley County
+1:US:USA:UNITED STATES:WASHINGTON:Adams County
+2:US:USA:UNITED STATES:WASHINGTON:Asotin County
+3:US:USA:UNITED STATES:WASHINGTON:Benton County
+4:US:USA:UNITED STATES:WASHINGTON:Chelan County
+5:US:USA:UNITED STATES:WASHINGTON:Clallam County
+6:US:USA:UNITED STATES:WASHINGTON:Clark County
+7:US:USA:UNITED STATES:WASHINGTON:Columbia County
+8:US:USA:UNITED STATES:WASHINGTON:Cowlitz County
+9:US:USA:UNITED STATES:WASHINGTON:Douglas County
+10:US:USA:UNITED STATES:WASHINGTON:Ferry County
+11:US:USA:UNITED STATES:WASHINGTON:Franklin County
+12:US:USA:UNITED STATES:WASHINGTON:Garfield County
+13:US:USA:UNITED STATES:WASHINGTON:Grant County
+14:US:USA:UNITED STATES:WASHINGTON:Grays Harbor County
+15:US:USA:UNITED STATES:WASHINGTON:Island County
+16:US:USA:UNITED STATES:WASHINGTON:Jefferson County
+17:US:USA:UNITED STATES:WASHINGTON:King County
+18:US:USA:UNITED STATES:WASHINGTON:Kitsap County
+19:US:USA:UNITED STATES:WASHINGTON:Kittitas County
+20:US:USA:UNITED STATES:WASHINGTON:Klickitat County
+21:US:USA:UNITED STATES:WASHINGTON:Lewis County
+22:US:USA:UNITED STATES:WASHINGTON:Lincoln County
+23:US:USA:UNITED STATES:WASHINGTON:Mason County
+24:US:USA:UNITED STATES:WASHINGTON:Okanogan County
+25:US:USA:UNITED STATES:WASHINGTON:Pacific County
+26:US:USA:UNITED STATES:WASHINGTON:Pend Oreille County
+27:US:USA:UNITED STATES:WASHINGTON:Pierce County
+28:US:USA:UNITED STATES:WASHINGTON:San Juan County
+29:US:USA:UNITED STATES:WASHINGTON:Skagit County
+30:US:USA:UNITED STATES:WASHINGTON:Skamania County
+31:US:USA:UNITED STATES:WASHINGTON:Snohomish County
+32:US:USA:UNITED STATES:WASHINGTON:Spokane County
+33:US:USA:UNITED STATES:WASHINGTON:Stevens County
+34:US:USA:UNITED STATES:WASHINGTON:Thurston County
+35:US:USA:UNITED STATES:WASHINGTON:Wahkiakum County
+36:US:USA:UNITED STATES:WASHINGTON:Walla Walla County
+37:US:USA:UNITED STATES:WASHINGTON:Whatcom County
+38:US:USA:UNITED STATES:WASHINGTON:Whitman County
+39:US:USA:UNITED STATES:WASHINGTON:Yakima County
+1:US:USA:UNITED STATES:ARKANSAS:Arkansas County
+2:US:USA:UNITED STATES:ARKANSAS:Ashley County
+3:US:USA:UNITED STATES:ARKANSAS:Baxter County
+4:US:USA:UNITED STATES:ARKANSAS:Benton County
+5:US:USA:UNITED STATES:ARKANSAS:Boone County
+6:US:USA:UNITED STATES:ARKANSAS:Bradley County
+7:US:USA:UNITED STATES:ARKANSAS:Calhoun County
+8:US:USA:UNITED STATES:ARKANSAS:Carroll County
+9:US:USA:UNITED STATES:ARKANSAS:Chicot County
+10:US:USA:UNITED STATES:ARKANSAS:Clark County
+11:US:USA:UNITED STATES:ARKANSAS:Clay County
+12:US:USA:UNITED STATES:ARKANSAS:Cleburne County
+13:US:USA:UNITED STATES:ARKANSAS:Cleveland County
+14:US:USA:UNITED STATES:ARKANSAS:Columbia County
+15:US:USA:UNITED STATES:ARKANSAS:Conway County
+16:US:USA:UNITED STATES:ARKANSAS:Craighead County
+17:US:USA:UNITED STATES:ARKANSAS:Crawford County
+18:US:USA:UNITED STATES:ARKANSAS:Crittenden County
+19:US:USA:UNITED STATES:ARKANSAS:Cross County
+20:US:USA:UNITED STATES:ARKANSAS:Dallas County
+21:US:USA:UNITED STATES:ARKANSAS:Desha County
+22:US:USA:UNITED STATES:ARKANSAS:Drew County
+23:US:USA:UNITED STATES:ARKANSAS:Faulkner County
+24:US:USA:UNITED STATES:ARKANSAS:Franklin County
+25:US:USA:UNITED STATES:ARKANSAS:Fulton County
+26:US:USA:UNITED STATES:ARKANSAS:Garland County
+27:US:USA:UNITED STATES:ARKANSAS:Grant County
+28:US:USA:UNITED STATES:ARKANSAS:Greene County
+29:US:USA:UNITED STATES:ARKANSAS:Hempstead County
+30:US:USA:UNITED STATES:ARKANSAS:Hot Spring County
+31:US:USA:UNITED STATES:ARKANSAS:Howard County
+32:US:USA:UNITED STATES:ARKANSAS:Independence County
+33:US:USA:UNITED STATES:ARKANSAS:Izard County
+34:US:USA:UNITED STATES:ARKANSAS:Jackson County
+35:US:USA:UNITED STATES:ARKANSAS:Jefferson County
+36:US:USA:UNITED STATES:ARKANSAS:Johnson County
+37:US:USA:UNITED STATES:ARKANSAS:Lafayette County
+38:US:USA:UNITED STATES:ARKANSAS:Lawrence County
+39:US:USA:UNITED STATES:ARKANSAS:Lee County
+40:US:USA:UNITED STATES:ARKANSAS:Lincoln County
+41:US:USA:UNITED STATES:ARKANSAS:Little River County
+42:US:USA:UNITED STATES:ARKANSAS:Logan County
+43:US:USA:UNITED STATES:ARKANSAS:Lonoke County
+44:US:USA:UNITED STATES:ARKANSAS:Madison County
+45:US:USA:UNITED STATES:ARKANSAS:Marion County
+46:US:USA:UNITED STATES:ARKANSAS:Miller County
+47:US:USA:UNITED STATES:ARKANSAS:Mississippi County
+48:US:USA:UNITED STATES:ARKANSAS:Monroe County
+49:US:USA:UNITED STATES:ARKANSAS:Montgomery County
+50:US:USA:UNITED STATES:ARKANSAS:Nevada County
+51:US:USA:UNITED STATES:ARKANSAS:Newton County
+52:US:USA:UNITED STATES:ARKANSAS:Ouachita County
+53:US:USA:UNITED STATES:ARKANSAS:Perry County
+54:US:USA:UNITED STATES:ARKANSAS:Phillips County
+55:US:USA:UNITED STATES:ARKANSAS:Pike County
+56:US:USA:UNITED STATES:ARKANSAS:Poinsett County
+57:US:USA:UNITED STATES:ARKANSAS:Polk County
+58:US:USA:UNITED STATES:ARKANSAS:Pope County
+59:US:USA:UNITED STATES:ARKANSAS:Prairie County
+60:US:USA:UNITED STATES:ARKANSAS:Pulaski County
+61:US:USA:UNITED STATES:ARKANSAS:Randolph County
+62:US:USA:UNITED STATES:ARKANSAS:Saline County
+63:US:USA:UNITED STATES:ARKANSAS:Scott County
+64:US:USA:UNITED STATES:ARKANSAS:Searcy County
+65:US:USA:UNITED STATES:ARKANSAS:Sebastian County
+66:US:USA:UNITED STATES:ARKANSAS:Sevier County
+67:US:USA:UNITED STATES:ARKANSAS:Sharp County
+68:US:USA:UNITED STATES:ARKANSAS:St. Francis County
+69:US:USA:UNITED STATES:ARKANSAS:Stone County
+70:US:USA:UNITED STATES:ARKANSAS:Union County
+71:US:USA:UNITED STATES:ARKANSAS:Van Buren County
+72:US:USA:UNITED STATES:ARKANSAS:Washington County
+73:US:USA:UNITED STATES:ARKANSAS:White County
+74:US:USA:UNITED STATES:ARKANSAS:Woodruff County
+75:US:USA:UNITED STATES:ARKANSAS:Yell County
+1:US:USA:UNITED STATES:DELAWARE:Kent County
+2:US:USA:UNITED STATES:DELAWARE:New Castle County
+3:US:USA:UNITED STATES:DELAWARE:Sussex County
+1:US:USA:UNITED STATES:RHODE ISLAND:Bristol County
+2:US:USA:UNITED STATES:RHODE ISLAND:Kent County
+3:US:USA:UNITED STATES:RHODE ISLAND:Newport County
+4:US:USA:UNITED STATES:RHODE ISLAND:Providence County
+5:US:USA:UNITED STATES:RHODE ISLAND:Washington County
+1:US:USA:UNITED STATES:MASSACHUSETTS:Barnstable County
+2:US:USA:UNITED STATES:MASSACHUSETTS:Berkshire County
+3:US:USA:UNITED STATES:MASSACHUSETTS:Bristol County
+4:US:USA:UNITED STATES:MASSACHUSETTS:Dukes County
+5:US:USA:UNITED STATES:MASSACHUSETTS:Essex County
+6:US:USA:UNITED STATES:MASSACHUSETTS:Franklin County
+7:US:USA:UNITED STATES:MASSACHUSETTS:Hampden County
+8:US:USA:UNITED STATES:MASSACHUSETTS:Hampshire County
+9:US:USA:UNITED STATES:MASSACHUSETTS:Middlesex County
+10:US:USA:UNITED STATES:MASSACHUSETTS:Nantucket County
+11:US:USA:UNITED STATES:MASSACHUSETTS:Norfolk County
+12:US:USA:UNITED STATES:MASSACHUSETTS:Plymouth County
+13:US:USA:UNITED STATES:MASSACHUSETTS:Suffolk County
+14:US:USA:UNITED STATES:MASSACHUSETTS:Worcester County
+1:US:USA:UNITED STATES:OREGON:Baker County
+2:US:USA:UNITED STATES:OREGON:Benton County
+3:US:USA:UNITED STATES:OREGON:Clackamas County
+4:US:USA:UNITED STATES:OREGON:Clatsop County
+5:US:USA:UNITED STATES:OREGON:Columbia County
+6:US:USA:UNITED STATES:OREGON:Coos County
+7:US:USA:UNITED STATES:OREGON:Crook County
+8:US:USA:UNITED STATES:OREGON:Curry County
+9:US:USA:UNITED STATES:OREGON:Deschutes County
+10:US:USA:UNITED STATES:OREGON:Douglas County
+11:US:USA:UNITED STATES:OREGON:Gilliam County
+12:US:USA:UNITED STATES:OREGON:Grant County
+13:US:USA:UNITED STATES:OREGON:Harney County
+14:US:USA:UNITED STATES:OREGON:Hood River County
+15:US:USA:UNITED STATES:OREGON:Jackson County
+16:US:USA:UNITED STATES:OREGON:Jefferson County
+17:US:USA:UNITED STATES:OREGON:Josephine County
+18:US:USA:UNITED STATES:OREGON:Klamath County
+19:US:USA:UNITED STATES:OREGON:Lake County
+20:US:USA:UNITED STATES:OREGON:Lane County
+21:US:USA:UNITED STATES:OREGON:Lincoln County
+22:US:USA:UNITED STATES:OREGON:Linn County
+23:US:USA:UNITED STATES:OREGON:Malheur County
+24:US:USA:UNITED STATES:OREGON:Marion County
+25:US:USA:UNITED STATES:OREGON:Morrow County
+26:US:USA:UNITED STATES:OREGON:Multnomah County
+27:US:USA:UNITED STATES:OREGON:Polk County
+28:US:USA:UNITED STATES:OREGON:Sherman County
+29:US:USA:UNITED STATES:OREGON:Tillamook County
+30:US:USA:UNITED STATES:OREGON:Umatilla County
+31:US:USA:UNITED STATES:OREGON:Union County
+32:US:USA:UNITED STATES:OREGON:Wallowa County
+33:US:USA:UNITED STATES:OREGON:Wasco County
+34:US:USA:UNITED STATES:OREGON:Washington County
+35:US:USA:UNITED STATES:OREGON:Wheeler County
+36:US:USA:UNITED STATES:OREGON:Yamhill County
+1:US:USA:UNITED STATES:ARIZONA:Apache County
+2:US:USA:UNITED STATES:ARIZONA:Cochise County
+3:US:USA:UNITED STATES:ARIZONA:Coconino County
+4:US:USA:UNITED STATES:ARIZONA:Gila County
+5:US:USA:UNITED STATES:ARIZONA:Graham County
+6:US:USA:UNITED STATES:ARIZONA:Greenlee County
+7:US:USA:UNITED STATES:ARIZONA:La Paz County
+8:US:USA:UNITED STATES:ARIZONA:Maricopa County
+9:US:USA:UNITED STATES:ARIZONA:Mohave County
+10:US:USA:UNITED STATES:ARIZONA:Navajo County
+11:US:USA:UNITED STATES:ARIZONA:Pima County
+12:US:USA:UNITED STATES:ARIZONA:Pinal County
+13:US:USA:UNITED STATES:ARIZONA:Santa Cruz County
+14:US:USA:UNITED STATES:ARIZONA:Yavapai County
+15:US:USA:UNITED STATES:ARIZONA:Yuma County
+1:US:USA:UNITED STATES:HAWAII:Hawaii County
+2:US:USA:UNITED STATES:HAWAII:Honolulu County
+3:US:USA:UNITED STATES:HAWAII:Kalawao County
+4:US:USA:UNITED STATES:HAWAII:Kauai County
+5:US:USA:UNITED STATES:HAWAII:Maui County
+1:US:USA:UNITED STATES:VERMONT:Addison County
+2:US:USA:UNITED STATES:VERMONT:Bennington County
+3:US:USA:UNITED STATES:VERMONT:Caledonia County
+4:US:USA:UNITED STATES:VERMONT:Chittenden County
+5:US:USA:UNITED STATES:VERMONT:Essex County
+6:US:USA:UNITED STATES:VERMONT:Franklin County
+7:US:USA:UNITED STATES:VERMONT:Grand Isle County
+8:US:USA:UNITED STATES:VERMONT:Lamoille County
+9:US:USA:UNITED STATES:VERMONT:Orange County
+10:US:USA:UNITED STATES:VERMONT:Orleans County
+11:US:USA:UNITED STATES:VERMONT:Rutland County
+12:US:USA:UNITED STATES:VERMONT:Washington County
+13:US:USA:UNITED STATES:VERMONT:Windham County
+14:US:USA:UNITED STATES:VERMONT:Windsor County
+1:US:USA:UNITED STATES:OHIO:Adams County
+2:US:USA:UNITED STATES:OHIO:Allen County
+3:US:USA:UNITED STATES:OHIO:Ashland County
+4:US:USA:UNITED STATES:OHIO:Ashtabula County
+5:US:USA:UNITED STATES:OHIO:Athens County
+6:US:USA:UNITED STATES:OHIO:Auglaize County
+7:US:USA:UNITED STATES:OHIO:Belmont County
+8:US:USA:UNITED STATES:OHIO:Brown County
+9:US:USA:UNITED STATES:OHIO:Butler County
+10:US:USA:UNITED STATES:OHIO:Carroll County
+11:US:USA:UNITED STATES:OHIO:Champaign County
+12:US:USA:UNITED STATES:OHIO:Clark County
+13:US:USA:UNITED STATES:OHIO:Clermont County
+14:US:USA:UNITED STATES:OHIO:Clinton County
+15:US:USA:UNITED STATES:OHIO:Columbiana County
+16:US:USA:UNITED STATES:OHIO:Coshocton County
+17:US:USA:UNITED STATES:OHIO:Crawford County
+18:US:USA:UNITED STATES:OHIO:Cuyahoga County
+19:US:USA:UNITED STATES:OHIO:Darke County
+20:US:USA:UNITED STATES:OHIO:Defiance County
+21:US:USA:UNITED STATES:OHIO:Delaware County
+22:US:USA:UNITED STATES:OHIO:Erie County
+23:US:USA:UNITED STATES:OHIO:Fairfield County
+24:US:USA:UNITED STATES:OHIO:Fayette County
+25:US:USA:UNITED STATES:OHIO:Franklin County
+26:US:USA:UNITED STATES:OHIO:Fulton County
+27:US:USA:UNITED STATES:OHIO:Gallia County
+28:US:USA:UNITED STATES:OHIO:Geauga County
+29:US:USA:UNITED STATES:OHIO:Greene County
+30:US:USA:UNITED STATES:OHIO:Guernsey County
+31:US:USA:UNITED STATES:OHIO:Hamilton County
+32:US:USA:UNITED STATES:OHIO:Hancock County
+33:US:USA:UNITED STATES:OHIO:Hardin County
+34:US:USA:UNITED STATES:OHIO:Harrison County
+35:US:USA:UNITED STATES:OHIO:Henry County
+36:US:USA:UNITED STATES:OHIO:Highland County
+37:US:USA:UNITED STATES:OHIO:Hocking County
+38:US:USA:UNITED STATES:OHIO:Holmes County
+39:US:USA:UNITED STATES:OHIO:Huron County
+40:US:USA:UNITED STATES:OHIO:Jackson County
+41:US:USA:UNITED STATES:OHIO:Jefferson County
+42:US:USA:UNITED STATES:OHIO:Knox County
+43:US:USA:UNITED STATES:OHIO:Lake County
+44:US:USA:UNITED STATES:OHIO:Lawrence County
+45:US:USA:UNITED STATES:OHIO:Licking County
+46:US:USA:UNITED STATES:OHIO:Logan County
+47:US:USA:UNITED STATES:OHIO:Lorain County
+48:US:USA:UNITED STATES:OHIO:Lucas County
+49:US:USA:UNITED STATES:OHIO:Madison County
+50:US:USA:UNITED STATES:OHIO:Mahoning County
+51:US:USA:UNITED STATES:OHIO:Marion County
+52:US:USA:UNITED STATES:OHIO:Medina County
+53:US:USA:UNITED STATES:OHIO:Meigs County
+54:US:USA:UNITED STATES:OHIO:Mercer County
+55:US:USA:UNITED STATES:OHIO:Miami County
+56:US:USA:UNITED STATES:OHIO:Monroe County
+57:US:USA:UNITED STATES:OHIO:Montgomery County
+58:US:USA:UNITED STATES:OHIO:Morgan County
+59:US:USA:UNITED STATES:OHIO:Morrow County
+60:US:USA:UNITED STATES:OHIO:Muskingum County
+61:US:USA:UNITED STATES:OHIO:Noble County
+62:US:USA:UNITED STATES:OHIO:Ottawa County
+63:US:USA:UNITED STATES:OHIO:Paulding County
+64:US:USA:UNITED STATES:OHIO:Perry County
+65:US:USA:UNITED STATES:OHIO:Pickaway County
+66:US:USA:UNITED STATES:OHIO:Pike County
+67:US:USA:UNITED STATES:OHIO:Portage County
+68:US:USA:UNITED STATES:OHIO:Preble County
+69:US:USA:UNITED STATES:OHIO:Putnam County
+70:US:USA:UNITED STATES:OHIO:Richland County
+71:US:USA:UNITED STATES:OHIO:Ross County
+72:US:USA:UNITED STATES:OHIO:Sandusky County
+73:US:USA:UNITED STATES:OHIO:Scioto County
+74:US:USA:UNITED STATES:OHIO:Seneca County
+75:US:USA:UNITED STATES:OHIO:Shelby County
+76:US:USA:UNITED STATES:OHIO:Stark County
+77:US:USA:UNITED STATES:OHIO:Summit County
+78:US:USA:UNITED STATES:OHIO:Trumbull County
+79:US:USA:UNITED STATES:OHIO:Tuscarawas County
+80:US:USA:UNITED STATES:OHIO:Union County
+81:US:USA:UNITED STATES:OHIO:Van Wert County
+82:US:USA:UNITED STATES:OHIO:Vinton County
+83:US:USA:UNITED STATES:OHIO:Warren County
+84:US:USA:UNITED STATES:OHIO:Washington County
+85:US:USA:UNITED STATES:OHIO:Wayne County
+86:US:USA:UNITED STATES:OHIO:Williams County
+87:US:USA:UNITED STATES:OHIO:Wood County
+88:US:USA:UNITED STATES:OHIO:Wyandot County
+1:US:USA:UNITED STATES:MISSISSIPPI:Adams County
+2:US:USA:UNITED STATES:MISSISSIPPI:Alcorn County
+3:US:USA:UNITED STATES:MISSISSIPPI:Amite County
+4:US:USA:UNITED STATES:MISSISSIPPI:Attala County
+5:US:USA:UNITED STATES:MISSISSIPPI:Benton County
+6:US:USA:UNITED STATES:MISSISSIPPI:Bolivar County
+7:US:USA:UNITED STATES:MISSISSIPPI:Calhoun County
+8:US:USA:UNITED STATES:MISSISSIPPI:Carroll County
+9:US:USA:UNITED STATES:MISSISSIPPI:Chickasaw County
+10:US:USA:UNITED STATES:MISSISSIPPI:Choctaw County
+11:US:USA:UNITED STATES:MISSISSIPPI:Claiborne County
+12:US:USA:UNITED STATES:MISSISSIPPI:Clarke County
+13:US:USA:UNITED STATES:MISSISSIPPI:Clay County
+14:US:USA:UNITED STATES:MISSISSIPPI:Coahoma County
+15:US:USA:UNITED STATES:MISSISSIPPI:Copiah County
+16:US:USA:UNITED STATES:MISSISSIPPI:Covington County
+17:US:USA:UNITED STATES:MISSISSIPPI:DeSoto County
+18:US:USA:UNITED STATES:MISSISSIPPI:Forrest County
+19:US:USA:UNITED STATES:MISSISSIPPI:Franklin County
+20:US:USA:UNITED STATES:MISSISSIPPI:George County
+21:US:USA:UNITED STATES:MISSISSIPPI:Greene County
+22:US:USA:UNITED STATES:MISSISSIPPI:Grenada County
+23:US:USA:UNITED STATES:MISSISSIPPI:Hancock County
+24:US:USA:UNITED STATES:MISSISSIPPI:Harrison County
+25:US:USA:UNITED STATES:MISSISSIPPI:Hinds County
+26:US:USA:UNITED STATES:MISSISSIPPI:Holmes County
+27:US:USA:UNITED STATES:MISSISSIPPI:Humphreys County
+28:US:USA:UNITED STATES:MISSISSIPPI:Issaquena County
+29:US:USA:UNITED STATES:MISSISSIPPI:Itawamba County
+30:US:USA:UNITED STATES:MISSISSIPPI:Jackson County
+31:US:USA:UNITED STATES:MISSISSIPPI:Jasper County
+32:US:USA:UNITED STATES:MISSISSIPPI:Jefferson County
+33:US:USA:UNITED STATES:MISSISSIPPI:Jefferson Davis County
+34:US:USA:UNITED STATES:MISSISSIPPI:Jones County
+35:US:USA:UNITED STATES:MISSISSIPPI:Kemper County
+36:US:USA:UNITED STATES:MISSISSIPPI:Lafayette County
+37:US:USA:UNITED STATES:MISSISSIPPI:Lamar County
+38:US:USA:UNITED STATES:MISSISSIPPI:Lauderdale County
+39:US:USA:UNITED STATES:MISSISSIPPI:Lawrence County
+40:US:USA:UNITED STATES:MISSISSIPPI:Leake County
+41:US:USA:UNITED STATES:MISSISSIPPI:Lee County
+42:US:USA:UNITED STATES:MISSISSIPPI:Leflore County
+43:US:USA:UNITED STATES:MISSISSIPPI:Lincoln County
+44:US:USA:UNITED STATES:MISSISSIPPI:Lowndes County
+45:US:USA:UNITED STATES:MISSISSIPPI:Madison County
+46:US:USA:UNITED STATES:MISSISSIPPI:Marion County
+47:US:USA:UNITED STATES:MISSISSIPPI:Marshall County
+48:US:USA:UNITED STATES:MISSISSIPPI:Monroe County
+49:US:USA:UNITED STATES:MISSISSIPPI:Montgomery County
+50:US:USA:UNITED STATES:MISSISSIPPI:Neshoba County
+51:US:USA:UNITED STATES:MISSISSIPPI:Newton County
+52:US:USA:UNITED STATES:MISSISSIPPI:Noxubee County
+53:US:USA:UNITED STATES:MISSISSIPPI:Oktibbeha County
+54:US:USA:UNITED STATES:MISSISSIPPI:Panola County
+55:US:USA:UNITED STATES:MISSISSIPPI:Pearl River County
+56:US:USA:UNITED STATES:MISSISSIPPI:Perry County
+57:US:USA:UNITED STATES:MISSISSIPPI:Pike County
+58:US:USA:UNITED STATES:MISSISSIPPI:Pontotoc County
+59:US:USA:UNITED STATES:MISSISSIPPI:Prentiss County
+60:US:USA:UNITED STATES:MISSISSIPPI:Quitman County
+61:US:USA:UNITED STATES:MISSISSIPPI:Rankin County
+62:US:USA:UNITED STATES:MISSISSIPPI:Scott County
+63:US:USA:UNITED STATES:MISSISSIPPI:Sharkey County
+64:US:USA:UNITED STATES:MISSISSIPPI:Simpson County
+65:US:USA:UNITED STATES:MISSISSIPPI:Smith County
+66:US:USA:UNITED STATES:MISSISSIPPI:Stone County
+67:US:USA:UNITED STATES:MISSISSIPPI:Sunflower County
+68:US:USA:UNITED STATES:MISSISSIPPI:Tallahatchie County
+69:US:USA:UNITED STATES:MISSISSIPPI:Tate County
+70:US:USA:UNITED STATES:MISSISSIPPI:Tippah County
+71:US:USA:UNITED STATES:MISSISSIPPI:Tishomingo County
+72:US:USA:UNITED STATES:MISSISSIPPI:Tunica County
+73:US:USA:UNITED STATES:MISSISSIPPI:Union County
+74:US:USA:UNITED STATES:MISSISSIPPI:Walthall County
+75:US:USA:UNITED STATES:MISSISSIPPI:Warren County
+76:US:USA:UNITED STATES:MISSISSIPPI:Washington County
+77:US:USA:UNITED STATES:MISSISSIPPI:Wayne County
+78:US:USA:UNITED STATES:MISSISSIPPI:Webster County
+79:US:USA:UNITED STATES:MISSISSIPPI:Wilkinson County
+80:US:USA:UNITED STATES:MISSISSIPPI:Winston County
+81:US:USA:UNITED STATES:MISSISSIPPI:Yalobusha County
+82:US:USA:UNITED STATES:MISSISSIPPI:Yazoo County
+1:US:USA:UNITED STATES:DISTRICT OF COLUMBIA:District of Columbia
+1:US:USA:UNITED STATES:MICHIGAN:Alcona County
+2:US:USA:UNITED STATES:MICHIGAN:Alger County
+3:US:USA:UNITED STATES:MICHIGAN:Allegan County
+4:US:USA:UNITED STATES:MICHIGAN:Alpena County
+5:US:USA:UNITED STATES:MICHIGAN:Antrim County
+6:US:USA:UNITED STATES:MICHIGAN:Arenac County
+7:US:USA:UNITED STATES:MICHIGAN:Baraga County
+8:US:USA:UNITED STATES:MICHIGAN:Barry County
+9:US:USA:UNITED STATES:MICHIGAN:Bay County
+10:US:USA:UNITED STATES:MICHIGAN:Benzie County
+11:US:USA:UNITED STATES:MICHIGAN:Berrien County
+12:US:USA:UNITED STATES:MICHIGAN:Branch County
+13:US:USA:UNITED STATES:MICHIGAN:Calhoun County
+14:US:USA:UNITED STATES:MICHIGAN:Cass County
+15:US:USA:UNITED STATES:MICHIGAN:Charlevoix County
+16:US:USA:UNITED STATES:MICHIGAN:Cheboygan County
+17:US:USA:UNITED STATES:MICHIGAN:Chippewa County
+18:US:USA:UNITED STATES:MICHIGAN:Clare County
+19:US:USA:UNITED STATES:MICHIGAN:Clinton County
+20:US:USA:UNITED STATES:MICHIGAN:Crawford County
+21:US:USA:UNITED STATES:MICHIGAN:Delta County
+22:US:USA:UNITED STATES:MICHIGAN:Dickinson County
+23:US:USA:UNITED STATES:MICHIGAN:Eaton County
+24:US:USA:UNITED STATES:MICHIGAN:Emmet County
+25:US:USA:UNITED STATES:MICHIGAN:Genesee County
+26:US:USA:UNITED STATES:MICHIGAN:Gladwin County
+27:US:USA:UNITED STATES:MICHIGAN:Gogebic County
+28:US:USA:UNITED STATES:MICHIGAN:Grand Traverse County
+29:US:USA:UNITED STATES:MICHIGAN:Gratiot County
+30:US:USA:UNITED STATES:MICHIGAN:Hillsdale County
+31:US:USA:UNITED STATES:MICHIGAN:Houghton County
+32:US:USA:UNITED STATES:MICHIGAN:Huron County
+33:US:USA:UNITED STATES:MICHIGAN:Ingham County
+34:US:USA:UNITED STATES:MICHIGAN:Ionia County
+35:US:USA:UNITED STATES:MICHIGAN:Iosco County
+36:US:USA:UNITED STATES:MICHIGAN:Iron County
+37:US:USA:UNITED STATES:MICHIGAN:Isabella County
+38:US:USA:UNITED STATES:MICHIGAN:Jackson County
+39:US:USA:UNITED STATES:MICHIGAN:Kalamazoo County
+40:US:USA:UNITED STATES:MICHIGAN:Kalkaska County
+41:US:USA:UNITED STATES:MICHIGAN:Kent County
+42:US:USA:UNITED STATES:MICHIGAN:Keweenaw County
+43:US:USA:UNITED STATES:MICHIGAN:Lake County
+44:US:USA:UNITED STATES:MICHIGAN:Lapeer County
+45:US:USA:UNITED STATES:MICHIGAN:Leelanau County
+46:US:USA:UNITED STATES:MICHIGAN:Lenawee County
+47:US:USA:UNITED STATES:MICHIGAN:Livingston County
+48:US:USA:UNITED STATES:MICHIGAN:Luce County
+49:US:USA:UNITED STATES:MICHIGAN:Mackinac County
+50:US:USA:UNITED STATES:MICHIGAN:Macomb County
+51:US:USA:UNITED STATES:MICHIGAN:Manistee County
+52:US:USA:UNITED STATES:MICHIGAN:Marquette County
+53:US:USA:UNITED STATES:MICHIGAN:Mason County
+54:US:USA:UNITED STATES:MICHIGAN:Mecosta County
+55:US:USA:UNITED STATES:MICHIGAN:Menominee County
+56:US:USA:UNITED STATES:MICHIGAN:Midland County
+57:US:USA:UNITED STATES:MICHIGAN:Missaukee County
+58:US:USA:UNITED STATES:MICHIGAN:Monroe County
+59:US:USA:UNITED STATES:MICHIGAN:Montcalm County
+60:US:USA:UNITED STATES:MICHIGAN:Montmorency County
+61:US:USA:UNITED STATES:MICHIGAN:Muskegon County
+62:US:USA:UNITED STATES:MICHIGAN:Newaygo County
+63:US:USA:UNITED STATES:MICHIGAN:Oakland County
+64:US:USA:UNITED STATES:MICHIGAN:Oceana County
+65:US:USA:UNITED STATES:MICHIGAN:Ogemaw County
+66:US:USA:UNITED STATES:MICHIGAN:Ontonagon County
+67:US:USA:UNITED STATES:MICHIGAN:Osceola County
+68:US:USA:UNITED STATES:MICHIGAN:Oscoda County
+69:US:USA:UNITED STATES:MICHIGAN:Otsego County
+70:US:USA:UNITED STATES:MICHIGAN:Ottawa County
+71:US:USA:UNITED STATES:MICHIGAN:Presque Isle County
+72:US:USA:UNITED STATES:MICHIGAN:Roscommon County
+73:US:USA:UNITED STATES:MICHIGAN:Saginaw County
+74:US:USA:UNITED STATES:MICHIGAN:Sanilac County
+75:US:USA:UNITED STATES:MICHIGAN:Schoolcraft County
+76:US:USA:UNITED STATES:MICHIGAN:Shiawassee County
+77:US:USA:UNITED STATES:MICHIGAN:St. Clair County
+78:US:USA:UNITED STATES:MICHIGAN:St. Joseph County
+79:US:USA:UNITED STATES:MICHIGAN:Tuscola County
+80:US:USA:UNITED STATES:MICHIGAN:Van Buren County
+81:US:USA:UNITED STATES:MICHIGAN:Washtenaw County
+82:US:USA:UNITED STATES:MICHIGAN:Wayne County
+83:US:USA:UNITED STATES:MICHIGAN:Wexford County
+1:US:USA:UNITED STATES:MINNESOTA:Aitkin County
+2:US:USA:UNITED STATES:MINNESOTA:Anoka County
+3:US:USA:UNITED STATES:MINNESOTA:Becker County
+4:US:USA:UNITED STATES:MINNESOTA:Beltrami County
+5:US:USA:UNITED STATES:MINNESOTA:Benton County
+6:US:USA:UNITED STATES:MINNESOTA:Big Stone County
+7:US:USA:UNITED STATES:MINNESOTA:Blue Earth County
+8:US:USA:UNITED STATES:MINNESOTA:Brown County
+9:US:USA:UNITED STATES:MINNESOTA:Carlton County
+10:US:USA:UNITED STATES:MINNESOTA:Carver County
+11:US:USA:UNITED STATES:MINNESOTA:Cass County
+12:US:USA:UNITED STATES:MINNESOTA:Chippewa County
+13:US:USA:UNITED STATES:MINNESOTA:Chisago County
+14:US:USA:UNITED STATES:MINNESOTA:Clay County
+15:US:USA:UNITED STATES:MINNESOTA:Clearwater County
+16:US:USA:UNITED STATES:MINNESOTA:Cook County
+17:US:USA:UNITED STATES:MINNESOTA:Cottonwood County
+18:US:USA:UNITED STATES:MINNESOTA:Crow Wing County
+19:US:USA:UNITED STATES:MINNESOTA:Dakota County
+20:US:USA:UNITED STATES:MINNESOTA:Dodge County
+21:US:USA:UNITED STATES:MINNESOTA:Douglas County
+22:US:USA:UNITED STATES:MINNESOTA:Faribault County
+23:US:USA:UNITED STATES:MINNESOTA:Fillmore County
+24:US:USA:UNITED STATES:MINNESOTA:Freeborn County
+25:US:USA:UNITED STATES:MINNESOTA:Goodhue County
+26:US:USA:UNITED STATES:MINNESOTA:Grant County
+27:US:USA:UNITED STATES:MINNESOTA:Hennepin County
+28:US:USA:UNITED STATES:MINNESOTA:Houston County
+29:US:USA:UNITED STATES:MINNESOTA:Hubbard County
+30:US:USA:UNITED STATES:MINNESOTA:Isanti County
+31:US:USA:UNITED STATES:MINNESOTA:Itasca County
+32:US:USA:UNITED STATES:MINNESOTA:Jackson County
+33:US:USA:UNITED STATES:MINNESOTA:Kanabec County
+34:US:USA:UNITED STATES:MINNESOTA:Kandiyohi County
+35:US:USA:UNITED STATES:MINNESOTA:Kittson County
+36:US:USA:UNITED STATES:MINNESOTA:Koochiching County
+37:US:USA:UNITED STATES:MINNESOTA:Lac qui Parle County
+38:US:USA:UNITED STATES:MINNESOTA:Lake County
+39:US:USA:UNITED STATES:MINNESOTA:Lake of the Woods County
+40:US:USA:UNITED STATES:MINNESOTA:Le Sueur County
+41:US:USA:UNITED STATES:MINNESOTA:Lincoln County
+42:US:USA:UNITED STATES:MINNESOTA:Lyon County
+43:US:USA:UNITED STATES:MINNESOTA:Mahnomen County
+44:US:USA:UNITED STATES:MINNESOTA:Marshall County
+45:US:USA:UNITED STATES:MINNESOTA:Martin County
+46:US:USA:UNITED STATES:MINNESOTA:McLeod County
+47:US:USA:UNITED STATES:MINNESOTA:Meeker County
+48:US:USA:UNITED STATES:MINNESOTA:Mille Lacs County
+49:US:USA:UNITED STATES:MINNESOTA:Morrison County
+50:US:USA:UNITED STATES:MINNESOTA:Mower County
+51:US:USA:UNITED STATES:MINNESOTA:Murray County
+52:US:USA:UNITED STATES:MINNESOTA:Nicollet County
+53:US:USA:UNITED STATES:MINNESOTA:Nobles County
+54:US:USA:UNITED STATES:MINNESOTA:Norman County
+55:US:USA:UNITED STATES:MINNESOTA:Olmsted County
+56:US:USA:UNITED STATES:MINNESOTA:Otter Tail County
+57:US:USA:UNITED STATES:MINNESOTA:Pennington County
+58:US:USA:UNITED STATES:MINNESOTA:Pine County
+59:US:USA:UNITED STATES:MINNESOTA:Pipestone County
+60:US:USA:UNITED STATES:MINNESOTA:Polk County
+61:US:USA:UNITED STATES:MINNESOTA:Pope County
+62:US:USA:UNITED STATES:MINNESOTA:Ramsey County
+63:US:USA:UNITED STATES:MINNESOTA:Red Lake County
+64:US:USA:UNITED STATES:MINNESOTA:Redwood County
+65:US:USA:UNITED STATES:MINNESOTA:Renville County
+66:US:USA:UNITED STATES:MINNESOTA:Rice County
+67:US:USA:UNITED STATES:MINNESOTA:Rock County
+68:US:USA:UNITED STATES:MINNESOTA:Roseau County
+69:US:USA:UNITED STATES:MINNESOTA:Scott County
+70:US:USA:UNITED STATES:MINNESOTA:Sherburne County
+71:US:USA:UNITED STATES:MINNESOTA:Sibley County
+72:US:USA:UNITED STATES:MINNESOTA:St. Louis County
+73:US:USA:UNITED STATES:MINNESOTA:Stearns County
+74:US:USA:UNITED STATES:MINNESOTA:Steele County
+75:US:USA:UNITED STATES:MINNESOTA:Stevens County
+76:US:USA:UNITED STATES:MINNESOTA:Swift County
+77:US:USA:UNITED STATES:MINNESOTA:Todd County
+78:US:USA:UNITED STATES:MINNESOTA:Traverse County
+79:US:USA:UNITED STATES:MINNESOTA:Wabasha County
+80:US:USA:UNITED STATES:MINNESOTA:Wadena County
+81:US:USA:UNITED STATES:MINNESOTA:Waseca County
+82:US:USA:UNITED STATES:MINNESOTA:Washington County
+83:US:USA:UNITED STATES:MINNESOTA:Watonwan County
+84:US:USA:UNITED STATES:MINNESOTA:Wilkin County
+85:US:USA:UNITED STATES:MINNESOTA:Winona County
+86:US:USA:UNITED STATES:MINNESOTA:Wright County
+87:US:USA:UNITED STATES:MINNESOTA:Yellow Medicine County
+1:US:USA:UNITED STATES:NEVADA:Carson City
+2:US:USA:UNITED STATES:NEVADA:Churchill County
+3:US:USA:UNITED STATES:NEVADA:Clark County
+4:US:USA:UNITED STATES:NEVADA:Douglas County
+5:US:USA:UNITED STATES:NEVADA:Elko County
+6:US:USA:UNITED STATES:NEVADA:Esmeralda County
+7:US:USA:UNITED STATES:NEVADA:Eureka County
+8:US:USA:UNITED STATES:NEVADA:Humboldt County
+9:US:USA:UNITED STATES:NEVADA:Lander County
+10:US:USA:UNITED STATES:NEVADA:Lincoln County
+11:US:USA:UNITED STATES:NEVADA:Lyon County
+12:US:USA:UNITED STATES:NEVADA:Mineral County
+13:US:USA:UNITED STATES:NEVADA:Nye County
+14:US:USA:UNITED STATES:NEVADA:Pershing County
+15:US:USA:UNITED STATES:NEVADA:Storey County
+16:US:USA:UNITED STATES:NEVADA:Washoe County
+17:US:USA:UNITED STATES:NEVADA:White Pine County
+1:US:USA:UNITED STATES:WISCONSIN:Adams County
+2:US:USA:UNITED STATES:WISCONSIN:Ashland County
+3:US:USA:UNITED STATES:WISCONSIN:Barron County
+4:US:USA:UNITED STATES:WISCONSIN:Bayfield County
+5:US:USA:UNITED STATES:WISCONSIN:Brown County
+6:US:USA:UNITED STATES:WISCONSIN:Buffalo County
+7:US:USA:UNITED STATES:WISCONSIN:Burnett County
+8:US:USA:UNITED STATES:WISCONSIN:Calumet County
+9:US:USA:UNITED STATES:WISCONSIN:Chippewa County
+10:US:USA:UNITED STATES:WISCONSIN:Clark County
+11:US:USA:UNITED STATES:WISCONSIN:Columbia County
+12:US:USA:UNITED STATES:WISCONSIN:Crawford County
+13:US:USA:UNITED STATES:WISCONSIN:Dane County
+14:US:USA:UNITED STATES:WISCONSIN:Dodge County
+15:US:USA:UNITED STATES:WISCONSIN:Door County
+16:US:USA:UNITED STATES:WISCONSIN:Douglas County
+17:US:USA:UNITED STATES:WISCONSIN:Dunn County
+18:US:USA:UNITED STATES:WISCONSIN:Eau Claire County
+19:US:USA:UNITED STATES:WISCONSIN:Florence County
+20:US:USA:UNITED STATES:WISCONSIN:Fond du Lac County
+21:US:USA:UNITED STATES:WISCONSIN:Forest County
+22:US:USA:UNITED STATES:WISCONSIN:Grant County
+23:US:USA:UNITED STATES:WISCONSIN:Green County
+24:US:USA:UNITED STATES:WISCONSIN:Green Lake County
+25:US:USA:UNITED STATES:WISCONSIN:Iowa County
+26:US:USA:UNITED STATES:WISCONSIN:Iron County
+27:US:USA:UNITED STATES:WISCONSIN:Jackson County
+28:US:USA:UNITED STATES:WISCONSIN:Jefferson County
+29:US:USA:UNITED STATES:WISCONSIN:Juneau County
+30:US:USA:UNITED STATES:WISCONSIN:Kenosha County
+31:US:USA:UNITED STATES:WISCONSIN:Kewaunee County
+32:US:USA:UNITED STATES:WISCONSIN:La Crosse County
+33:US:USA:UNITED STATES:WISCONSIN:Lafayette County
+34:US:USA:UNITED STATES:WISCONSIN:Langlade County
+35:US:USA:UNITED STATES:WISCONSIN:Lincoln County
+36:US:USA:UNITED STATES:WISCONSIN:Manitowoc County
+37:US:USA:UNITED STATES:WISCONSIN:Marathon County
+38:US:USA:UNITED STATES:WISCONSIN:Marinette County
+39:US:USA:UNITED STATES:WISCONSIN:Marquette County
+40:US:USA:UNITED STATES:WISCONSIN:Menominee County
+41:US:USA:UNITED STATES:WISCONSIN:Milwaukee County
+42:US:USA:UNITED STATES:WISCONSIN:Monroe County
+43:US:USA:UNITED STATES:WISCONSIN:Oconto County
+44:US:USA:UNITED STATES:WISCONSIN:Oneida County
+45:US:USA:UNITED STATES:WISCONSIN:Outagamie County
+46:US:USA:UNITED STATES:WISCONSIN:Ozaukee County
+47:US:USA:UNITED STATES:WISCONSIN:Pepin County
+48:US:USA:UNITED STATES:WISCONSIN:Pierce County
+49:US:USA:UNITED STATES:WISCONSIN:Polk County
+50:US:USA:UNITED STATES:WISCONSIN:Portage County
+51:US:USA:UNITED STATES:WISCONSIN:Price County
+52:US:USA:UNITED STATES:WISCONSIN:Racine County
+53:US:USA:UNITED STATES:WISCONSIN:Richland County
+54:US:USA:UNITED STATES:WISCONSIN:Rock County
+55:US:USA:UNITED STATES:WISCONSIN:Rusk County
+56:US:USA:UNITED STATES:WISCONSIN:Sauk County
+57:US:USA:UNITED STATES:WISCONSIN:Sawyer County
+58:US:USA:UNITED STATES:WISCONSIN:Shawano County
+59:US:USA:UNITED STATES:WISCONSIN:Sheboygan County
+60:US:USA:UNITED STATES:WISCONSIN:St. Croix County
+61:US:USA:UNITED STATES:WISCONSIN:Taylor County
+62:US:USA:UNITED STATES:WISCONSIN:Trempealeau County
+63:US:USA:UNITED STATES:WISCONSIN:Vernon County
+64:US:USA:UNITED STATES:WISCONSIN:Vilas County
+65:US:USA:UNITED STATES:WISCONSIN:Walworth County
+66:US:USA:UNITED STATES:WISCONSIN:Washburn County
+67:US:USA:UNITED STATES:WISCONSIN:Washington County
+68:US:USA:UNITED STATES:WISCONSIN:Waukesha County
+69:US:USA:UNITED STATES:WISCONSIN:Waupaca County
+70:US:USA:UNITED STATES:WISCONSIN:Waushara County
+71:US:USA:UNITED STATES:WISCONSIN:Winnebago County
+72:US:USA:UNITED STATES:WISCONSIN:Wood County
diff --git a/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..67a480c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN1_LEX.txt
@@ -0,0 +1,15 @@
+1:UZ-AN:UZ:ANDIZHAN
+2:UZ-AS:UZ:ARAL SEA
+3:UZ-BU:UZ:BUKHARA
+4:UZ-FA:UZ:FERGANA
+5:UZ-JI:UZ:JIZZAX
+6:UZ-QR:UZ:KARAKALPAK [QORAQALPOG‘ISTON RESPUBLIKASI]
+7:UZ-QA:UZ:KASHKADARYA [QASHQADARYO]
+8:UZ-XO:UZ:KHOREZM [XORAZM]
+9:UZ-NG:UZ:NAMANGAN
+10:UZ-NW:UZ:NAVOIY
+11:UZ-SA:UZ:SAMARKAND [SAMARQAND]
+12:UZ-SU:UZ:SURKHANDARYA [SURXONDARYO]
+13:UZ-SI:UZ:SYRDARYA [SIRDARYO]
+14:UZ-TO:UZ:TASHKENT OBLAST [TOSHKENT]
+15:UZ-TK:UZ:TOSHKENT
diff --git a/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..4a2306c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/UZB/UZB_ADMIN2_LEX.txt
@@ -0,0 +1,48 @@
+1:UZ:UZB:UZBEKISTAN:Samarkand:UZB.L2.4
+1:UZ:UZB:UZBEKISTAN:Karakalpak:UZB.L2.5
+1:UZ:UZB:UZBEKISTAN:Surkhandarya:UZB.L2.3
+1:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.10
+2:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.11
+3:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.12
+4:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.13
+5:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.14
+6:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.15
+7:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.16
+8:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.17
+9:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.18
+10:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.19
+11:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.20
+12:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.21
+13:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.22
+14:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.23
+15:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.24
+16:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.25
+17:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.26
+18:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.27
+19:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.28
+20:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.29
+21:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.30
+22:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.31
+23:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.32
+24:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.33
+25:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.34
+26:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.35
+27:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.36
+28:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.37
+29:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.38
+30:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.39
+31:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.40
+32:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.41
+33:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.42
+34:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.43
+35:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.7
+36:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.8
+37:UZ:UZB:UZBEKISTAN:Aral Sea:UZB.L2.9
+1:UZ:UZB:UZBEKISTAN:Andizhan:UZB.L2.44
+1:UZ:UZB:UZBEKISTAN:Fergana:UZB.L2.1
+1:UZ:UZB:UZBEKISTAN:Tashkent Oblast:UZB.L2.45
+1:UZ:UZB:UZBEKISTAN:Bukhara:UZB.L2.48
+1:UZ:UZB:UZBEKISTAN:Kashkadarya:UZB.L2.2
+1:UZ:UZB:UZBEKISTAN:Khorezm:UZB.L2.47
+1:UZ:UZB:UZBEKISTAN:Namangan:UZB.L2.6
+1:UZ:UZB:UZBEKISTAN:Syrdarya:UZB.L2.46
diff --git a/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN1_LEX.txt
new file mode 100644
index 0000000..65236cb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN1_LEX.txt
@@ -0,0 +1,25 @@
+1:VE-Z:VE:AMAZONAS
+2:VE-B:VE:ANZOATEGUI
+3:VE-C:VE:APURE
+4:VE-D:VE:ARAGUA
+5:VE-E:VE:BARINAS
+6:VE-F:VE:BOLIVAR
+7:VE-G:VE:CARABOBO
+8:VE-H:VE:COJEDES
+9:VE-Y:VE:DELTA AMACURO
+10:VE-W:VE:DEPENDENCIAS FEDERALES
+11:VE-A:VE:DISTRITO FEDERAL
+12:VE-I:VE:FALCON
+13:VE-J:VE:GUARICO
+14:VE-K:VE:LARA
+15:VE-L:VE:MERIDA
+16:VE-M:VE:MIRANDA
+17:VE-N:VE:MONAGAS
+18:VE-O:VE:NUEVA ESPARTA
+19:VE-P:VE:PORTUGUESA
+20:VE-R:VE:SUCRE
+21:VE-S:VE:TACHIRA
+22:VE-T:VE:TRUJILLO
+23:VE-X:VE:VARGAS
+24:VE-U:VE:YARACUY
+25:VE-V:VE:ZULIA
diff --git a/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN2_LEX.txt
new file mode 100644
index 0000000..c914870
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/VEN/VEN_ADMIN2_LEX.txt
@@ -0,0 +1,301 @@
+1:VE:VEN:VENEZUELA:UNKNOWN:Isla
+2:VE:VEN:VENEZUELA:UNKNOWN:Isla La Tortuga
+3:VE:VEN:VENEZUELA:UNKNOWN:Rio Orinoco
+1:VE:VEN:VENEZUELA:BOLIVAR:Caroni
+2:VE:VEN:VENEZUELA:BOLIVAR:Cedeno
+3:VE:VEN:VENEZUELA:BOLIVAR:El Callao
+4:VE:VEN:VENEZUELA:BOLIVAR:Gran Sabana
+5:VE:VEN:VENEZUELA:BOLIVAR:Heres
+6:VE:VEN:VENEZUELA:BOLIVAR:Piar
+7:VE:VEN:VENEZUELA:BOLIVAR:Raul Leoni
+8:VE:VEN:VENEZUELA:BOLIVAR:Roscio
+9:VE:VEN:VENEZUELA:BOLIVAR:Sifontes
+10:VE:VEN:VENEZUELA:BOLIVAR:Sucre
+1:VE:VEN:VENEZUELA:LARA:Andres Eloy Blanco
+2:VE:VEN:VENEZUELA:LARA:Crespo
+3:VE:VEN:VENEZUELA:LARA:Iribarren
+4:VE:VEN:VENEZUELA:LARA:Jimenez
+5:VE:VEN:VENEZUELA:LARA:Moran
+6:VE:VEN:VENEZUELA:LARA:Palavecino
+7:VE:VEN:VENEZUELA:LARA:Simon Planas
+8:VE:VEN:VENEZUELA:LARA:Torres
+9:VE:VEN:VENEZUELA:LARA:Urdaneta
+1:VE:VEN:VENEZUELA:AMAZONAS:D. Atabapo
+2:VE:VEN:VENEZUELA:AMAZONAS:D. Atures
+3:VE:VEN:VENEZUELA:AMAZONAS:D. Casiquiare
+4:VE:VEN:VENEZUELA:AMAZONAS:D. Rio Negro
+1:VE:VEN:VENEZUELA:NUEVA ESPARTA:Antolin del Cami
+2:VE:VEN:VENEZUELA:NUEVA ESPARTA:Arismendi
+3:VE:VEN:VENEZUELA:NUEVA ESPARTA:Diaz
+4:VE:VEN:VENEZUELA:NUEVA ESPARTA:Garcia
+5:VE:VEN:VENEZUELA:NUEVA ESPARTA:Gomez
+6:VE:VEN:VENEZUELA:NUEVA ESPARTA:Isla De Coche
+7:VE:VEN:VENEZUELA:NUEVA ESPARTA:Isla De Cubagua
+8:VE:VEN:VENEZUELA:NUEVA ESPARTA:Maneiro
+9:VE:VEN:VENEZUELA:NUEVA ESPARTA:Marcano
+10:VE:VEN:VENEZUELA:NUEVA ESPARTA:Marino
+11:VE:VEN:VENEZUELA:NUEVA ESPARTA:Peninsula de Macanao
+1:VE:VEN:VENEZUELA:ARAGUA:Bolivar
+2:VE:VEN:VENEZUELA:ARAGUA:Camatagua
+3:VE:VEN:VENEZUELA:ARAGUA:Girardot
+4:VE:VEN:VENEZUELA:ARAGUA:Jose Angel Lamas
+5:VE:VEN:VENEZUELA:ARAGUA:Jose Felix Ribas
+6:VE:VEN:VENEZUELA:ARAGUA:Libertador
+7:VE:VEN:VENEZUELA:ARAGUA:Mario Briceno Iragorry
+8:VE:VEN:VENEZUELA:ARAGUA:San Casimiro
+9:VE:VEN:VENEZUELA:ARAGUA:San Sebastian
+10:VE:VEN:VENEZUELA:ARAGUA:Santiago Marino
+11:VE:VEN:VENEZUELA:ARAGUA:Santos Michelena
+12:VE:VEN:VENEZUELA:ARAGUA:Sucre
+13:VE:VEN:VENEZUELA:ARAGUA:Tovar
+14:VE:VEN:VENEZUELA:ARAGUA:Urdaneta
+15:VE:VEN:VENEZUELA:ARAGUA:Zamora
+1:VE:VEN:VENEZUELA:PORTUGUESA:Agua Blanca
+2:VE:VEN:VENEZUELA:PORTUGUESA:Araure
+3:VE:VEN:VENEZUELA:PORTUGUESA:Esteller
+4:VE:VEN:VENEZUELA:PORTUGUESA:Guanare
+5:VE:VEN:VENEZUELA:PORTUGUESA:Guanarito
+6:VE:VEN:VENEZUELA:PORTUGUESA:Monsenor Jose Vicente de
+7:VE:VEN:VENEZUELA:PORTUGUESA:Ospino
+8:VE:VEN:VENEZUELA:PORTUGUESA:Paez
+9:VE:VEN:VENEZUELA:PORTUGUESA:Papelon
+10:VE:VEN:VENEZUELA:PORTUGUESA:San Genaro de Boconoito
+11:VE:VEN:VENEZUELA:PORTUGUESA:San Rafael de Onoto
+12:VE:VEN:VENEZUELA:PORTUGUESA:Santa Rosalia
+13:VE:VEN:VENEZUELA:PORTUGUESA:Sucre
+14:VE:VEN:VENEZUELA:PORTUGUESA:Turen
+1:VE:VEN:VENEZUELA:SUCRE:Andres Eloy Blanco
+2:VE:VEN:VENEZUELA:SUCRE:Andres Mata
+3:VE:VEN:VENEZUELA:SUCRE:Arismendi
+4:VE:VEN:VENEZUELA:SUCRE:Benitez
+5:VE:VEN:VENEZUELA:SUCRE:Bermudez
+6:VE:VEN:VENEZUELA:SUCRE:Bolivar
+7:VE:VEN:VENEZUELA:SUCRE:Cajigal
+8:VE:VEN:VENEZUELA:SUCRE:Cruz Salmeron Acosta
+9:VE:VEN:VENEZUELA:SUCRE:Isla
+10:VE:VEN:VENEZUELA:SUCRE:Libertador
+11:VE:VEN:VENEZUELA:SUCRE:Marino
+12:VE:VEN:VENEZUELA:SUCRE:Mejia
+13:VE:VEN:VENEZUELA:SUCRE:Montes
+14:VE:VEN:VENEZUELA:SUCRE:Ribero
+15:VE:VEN:VENEZUELA:SUCRE:Sucre
+16:VE:VEN:VENEZUELA:SUCRE:Valdez
+1:VE:VEN:VENEZUELA:MONAGAS:Acosta
+2:VE:VEN:VENEZUELA:MONAGAS:Bolivar
+3:VE:VEN:VENEZUELA:MONAGAS:Caripe
+4:VE:VEN:VENEZUELA:MONAGAS:Cedeno
+5:VE:VEN:VENEZUELA:MONAGAS:Ezequiel Zamora
+6:VE:VEN:VENEZUELA:MONAGAS:Libertador
+7:VE:VEN:VENEZUELA:MONAGAS:Maturin
+8:VE:VEN:VENEZUELA:MONAGAS:Piar
+9:VE:VEN:VENEZUELA:MONAGAS:Punceres
+10:VE:VEN:VENEZUELA:MONAGAS:Sotillo
+1:VE:VEN:VENEZUELA:ZULIA:Almirante Padilla
+2:VE:VEN:VENEZUELA:ZULIA:Baralt
+3:VE:VEN:VENEZUELA:ZULIA:Cabimas
+4:VE:VEN:VENEZUELA:ZULIA:Catatumbo
+5:VE:VEN:VENEZUELA:ZULIA:Colon
+6:VE:VEN:VENEZUELA:ZULIA:Isla
+7:VE:VEN:VENEZUELA:ZULIA:Jesus Enrique Lozada
+8:VE:VEN:VENEZUELA:ZULIA:La Canada de Urdaneta
+9:VE:VEN:VENEZUELA:ZULIA:Lagunillas
+10:VE:VEN:VENEZUELA:ZULIA:Machiques de Perija
+11:VE:VEN:VENEZUELA:ZULIA:Mara
+12:VE:VEN:VENEZUELA:ZULIA:Maracaibo
+13:VE:VEN:VENEZUELA:ZULIA:Miranda
+14:VE:VEN:VENEZUELA:ZULIA:Paez
+15:VE:VEN:VENEZUELA:ZULIA:Rosario de Perija
+16:VE:VEN:VENEZUELA:ZULIA:Santa Rita
+17:VE:VEN:VENEZUELA:ZULIA:Sucre
+18:VE:VEN:VENEZUELA:ZULIA:Valmore Rodriguez
+1:VE:VEN:VENEZUELA:YARACUY:Autonomo Bolivar
+2:VE:VEN:VENEZUELA:YARACUY:Autonomo Bruzual
+3:VE:VEN:VENEZUELA:YARACUY:Autonomo Jose Antonio Pae
+4:VE:VEN:VENEZUELA:YARACUY:Autonomo Nirgua
+5:VE:VEN:VENEZUELA:YARACUY:Autonomo Pena
+6:VE:VEN:VENEZUELA:YARACUY:Autonomo San Felipe
+7:VE:VEN:VENEZUELA:YARACUY:Autonomo Sucre
+8:VE:VEN:VENEZUELA:YARACUY:Autonomo Urachique
+1:VE:VEN:VENEZUELA:TACHIRA:Andres Bello
+2:VE:VEN:VENEZUELA:TACHIRA:Ayacucho
+3:VE:VEN:VENEZUELA:TACHIRA:Bolivar
+4:VE:VEN:VENEZUELA:TACHIRA:Cardenas
+5:VE:VEN:VENEZUELA:TACHIRA:Cordoba
+6:VE:VEN:VENEZUELA:TACHIRA:Fernandez Feo
+7:VE:VEN:VENEZUELA:TACHIRA:Garcia de Hevia
+8:VE:VEN:VENEZUELA:TACHIRA:Guasimos
+9:VE:VEN:VENEZUELA:TACHIRA:Independencia
+10:VE:VEN:VENEZUELA:TACHIRA:Jauregui
+11:VE:VEN:VENEZUELA:TACHIRA:Junin
+12:VE:VEN:VENEZUELA:TACHIRA:Libertad
+13:VE:VEN:VENEZUELA:TACHIRA:Libertador
+14:VE:VEN:VENEZUELA:TACHIRA:Lobatera
+15:VE:VEN:VENEZUELA:TACHIRA:Michelena
+16:VE:VEN:VENEZUELA:TACHIRA:Panamericano
+17:VE:VEN:VENEZUELA:TACHIRA:Pedro Maria Urena
+18:VE:VEN:VENEZUELA:TACHIRA:Samuel Dario Maldonado
+19:VE:VEN:VENEZUELA:TACHIRA:San Cristobal
+20:VE:VEN:VENEZUELA:TACHIRA:Seboruco
+21:VE:VEN:VENEZUELA:TACHIRA:Sucre
+22:VE:VEN:VENEZUELA:TACHIRA:Uribante
+1:VE:VEN:VENEZUELA:COJEDES:Anzoategui
+2:VE:VEN:VENEZUELA:COJEDES:Falcon
+3:VE:VEN:VENEZUELA:COJEDES:Girardot
+4:VE:VEN:VENEZUELA:COJEDES:Pao de San Juan Bautista
+5:VE:VEN:VENEZUELA:COJEDES:Ricaurte
+6:VE:VEN:VENEZUELA:COJEDES:San Carlos
+7:VE:VEN:VENEZUELA:COJEDES:Tinaco
+1:VE:VEN:VENEZUELA:DISTRITO FEDERAL:Caracas
+2:VE:VEN:VENEZUELA:DISTRITO FEDERAL:Vargas
+1:VE:VEN:VENEZUELA:FALCON:Acosta
+2:VE:VEN:VENEZUELA:FALCON:Bolivar
+3:VE:VEN:VENEZUELA:FALCON:Buchivacoa
+4:VE:VEN:VENEZUELA:FALCON:Cacique Manaure
+5:VE:VEN:VENEZUELA:FALCON:Carirubana
+6:VE:VEN:VENEZUELA:FALCON:Colina
+7:VE:VEN:VENEZUELA:FALCON:Dabajuro
+8:VE:VEN:VENEZUELA:FALCON:Democracia
+9:VE:VEN:VENEZUELA:FALCON:Falcon
+10:VE:VEN:VENEZUELA:FALCON:Federacion
+11:VE:VEN:VENEZUELA:FALCON:Isla
+12:VE:VEN:VENEZUELA:FALCON:Jacura
+13:VE:VEN:VENEZUELA:FALCON:Los Tanques
+14:VE:VEN:VENEZUELA:FALCON:Mauroa
+15:VE:VEN:VENEZUELA:FALCON:Miranda
+16:VE:VEN:VENEZUELA:FALCON:Monsenor Iturriza
+17:VE:VEN:VENEZUELA:FALCON:Palma Sola
+18:VE:VEN:VENEZUELA:FALCON:Petit
+19:VE:VEN:VENEZUELA:FALCON:Piritu
+20:VE:VEN:VENEZUELA:FALCON:San Francisco
+21:VE:VEN:VENEZUELA:FALCON:Silva
+22:VE:VEN:VENEZUELA:FALCON:Union
+23:VE:VEN:VENEZUELA:FALCON:Zamora
+1:VE:VEN:VENEZUELA:MERIDA:Alberto Adriani
+2:VE:VEN:VENEZUELA:MERIDA:Andres Bello
+3:VE:VEN:VENEZUELA:MERIDA:Antonio Pinto Salinas
+4:VE:VEN:VENEZUELA:MERIDA:Aricagua
+5:VE:VEN:VENEZUELA:MERIDA:Arzobispo Chacon
+6:VE:VEN:VENEZUELA:MERIDA:Campo Elias
+7:VE:VEN:VENEZUELA:MERIDA:Caracciolo Parra Olmedo
+8:VE:VEN:VENEZUELA:MERIDA:Cardenal Quintero
+9:VE:VEN:VENEZUELA:MERIDA:Guaraque
+10:VE:VEN:VENEZUELA:MERIDA:Julio Cesar Salas
+11:VE:VEN:VENEZUELA:MERIDA:Justo Briceno
+12:VE:VEN:VENEZUELA:MERIDA:Libertador
+13:VE:VEN:VENEZUELA:MERIDA:Miranda
+14:VE:VEN:VENEZUELA:MERIDA:Obispo Ramos de Lora
+15:VE:VEN:VENEZUELA:MERIDA:Padre Noguera
+16:VE:VEN:VENEZUELA:MERIDA:Pueblo Llano
+17:VE:VEN:VENEZUELA:MERIDA:Rangel
+18:VE:VEN:VENEZUELA:MERIDA:Rivas Davila
+19:VE:VEN:VENEZUELA:MERIDA:Santos Marquina
+20:VE:VEN:VENEZUELA:MERIDA:Sucre
+21:VE:VEN:VENEZUELA:MERIDA:Tovar
+22:VE:VEN:VENEZUELA:MERIDA:Tulio Febres Cordero
+23:VE:VEN:VENEZUELA:MERIDA:Zea
+1:VE:VEN:VENEZUELA:DELTA AMACURO:D. Antonio Diaz
+2:VE:VEN:VENEZUELA:DELTA AMACURO:D. Pedernales
+3:VE:VEN:VENEZUELA:DELTA AMACURO:Isla
+4:VE:VEN:VENEZUELA:DELTA AMACURO:Tucupita
+1:VE:VEN:VENEZUELA:TRUJILLO:Bocono
+2:VE:VEN:VENEZUELA:TRUJILLO:Candelaria
+3:VE:VEN:VENEZUELA:TRUJILLO:Carache
+4:VE:VEN:VENEZUELA:TRUJILLO:Escuque
+5:VE:VEN:VENEZUELA:TRUJILLO:Miranda
+6:VE:VEN:VENEZUELA:TRUJILLO:Monte Carmelo
+7:VE:VEN:VENEZUELA:TRUJILLO:Motatan
+8:VE:VEN:VENEZUELA:TRUJILLO:Pampan
+9:VE:VEN:VENEZUELA:TRUJILLO:Rafael Rangel
+10:VE:VEN:VENEZUELA:TRUJILLO:San Rafael de Carvajal
+11:VE:VEN:VENEZUELA:TRUJILLO:Sucre
+12:VE:VEN:VENEZUELA:TRUJILLO:Trujillo
+13:VE:VEN:VENEZUELA:TRUJILLO:Urdaneta
+14:VE:VEN:VENEZUELA:TRUJILLO:Valera
+1:VE:VEN:VENEZUELA:APURE:Autonomo Achaguas
+2:VE:VEN:VENEZUELA:APURE:Autonomo Biruaca
+3:VE:VEN:VENEZUELA:APURE:Autonomo Munoz
+4:VE:VEN:VENEZUELA:APURE:Autonomo Paez
+5:VE:VEN:VENEZUELA:APURE:Autonomo Pedro Camejo
+6:VE:VEN:VENEZUELA:APURE:Autonomo Romulo Gallegos
+7:VE:VEN:VENEZUELA:APURE:Autonomo San Fernando
+1:VE:VEN:VENEZUELA:MIRANDA:Acevedo
+2:VE:VEN:VENEZUELA:MIRANDA:Andres Bello
+3:VE:VEN:VENEZUELA:MIRANDA:Baruta
+4:VE:VEN:VENEZUELA:MIRANDA:Brion
+5:VE:VEN:VENEZUELA:MIRANDA:Buroz
+6:VE:VEN:VENEZUELA:MIRANDA:Carrizal
+7:VE:VEN:VENEZUELA:MIRANDA:Chacao
+8:VE:VEN:VENEZUELA:MIRANDA:Cristobal Rojas
+9:VE:VEN:VENEZUELA:MIRANDA:El Hatillo
+10:VE:VEN:VENEZUELA:MIRANDA:Guaicaipuro
+11:VE:VEN:VENEZUELA:MIRANDA:Independencia
+12:VE:VEN:VENEZUELA:MIRANDA:Isla
+13:VE:VEN:VENEZUELA:MIRANDA:Lander
+14:VE:VEN:VENEZUELA:MIRANDA:Los Salias
+15:VE:VEN:VENEZUELA:MIRANDA:Paez
+16:VE:VEN:VENEZUELA:MIRANDA:Paz Castillo
+17:VE:VEN:VENEZUELA:MIRANDA:Pedro Gual
+18:VE:VEN:VENEZUELA:MIRANDA:Plaza
+19:VE:VEN:VENEZUELA:MIRANDA:Simon Bolivar
+20:VE:VEN:VENEZUELA:MIRANDA:Sucre
+21:VE:VEN:VENEZUELA:MIRANDA:Urdaneta
+22:VE:VEN:VENEZUELA:MIRANDA:Zamora
+1:VE:VEN:VENEZUELA:GUARICO:Camaguan
+2:VE:VEN:VENEZUELA:GUARICO:Chaguaramas
+3:VE:VEN:VENEZUELA:GUARICO:El Socorro
+4:VE:VEN:VENEZUELA:GUARICO:Guacharamas
+5:VE:VEN:VENEZUELA:GUARICO:Infante
+6:VE:VEN:VENEZUELA:GUARICO:Las Mercedes
+7:VE:VEN:VENEZUELA:GUARICO:Mellado
+8:VE:VEN:VENEZUELA:GUARICO:Miranda
+9:VE:VEN:VENEZUELA:GUARICO:Monagas
+10:VE:VEN:VENEZUELA:GUARICO:Ortiz
+11:VE:VEN:VENEZUELA:GUARICO:Ribas
+12:VE:VEN:VENEZUELA:GUARICO:Roscio
+13:VE:VEN:VENEZUELA:GUARICO:San Jose de Guaribe
+14:VE:VEN:VENEZUELA:GUARICO:Santa Maria de Ipire
+15:VE:VEN:VENEZUELA:GUARICO:Zaraza
+1:VE:VEN:VENEZUELA:ANZOATEGUI:Anaco
+2:VE:VEN:VENEZUELA:ANZOATEGUI:Aragua
+3:VE:VEN:VENEZUELA:ANZOATEGUI:Bolivar
+4:VE:VEN:VENEZUELA:ANZOATEGUI:Bruzual
+5:VE:VEN:VENEZUELA:ANZOATEGUI:Cajigal
+6:VE:VEN:VENEZUELA:ANZOATEGUI:Carvajal
+7:VE:VEN:VENEZUELA:ANZOATEGUI:Freites
+8:VE:VEN:VENEZUELA:ANZOATEGUI:Guanipa
+9:VE:VEN:VENEZUELA:ANZOATEGUI:Guanta
+10:VE:VEN:VENEZUELA:ANZOATEGUI:I. De Adentro
+11:VE:VEN:VENEZUELA:ANZOATEGUI:I. de Afuera
+12:VE:VEN:VENEZUELA:ANZOATEGUI:Independencia
+13:VE:VEN:VENEZUELA:ANZOATEGUI:Isla
+14:VE:VEN:VENEZUELA:ANZOATEGUI:Libertad
+15:VE:VEN:VENEZUELA:ANZOATEGUI:Lic. Diego Bautista Urban
+16:VE:VEN:VENEZUELA:ANZOATEGUI:Miranda
+17:VE:VEN:VENEZUELA:ANZOATEGUI:Monagas
+18:VE:VEN:VENEZUELA:ANZOATEGUI:Penalver
+19:VE:VEN:VENEZUELA:ANZOATEGUI:Piritu
+20:VE:VEN:VENEZUELA:ANZOATEGUI:Simon Rodriguez
+21:VE:VEN:VENEZUELA:ANZOATEGUI:Sotillo
+1:VE:VEN:VENEZUELA:BARINAS:Alberto Arvelo Torrealba
+2:VE:VEN:VENEZUELA:BARINAS:Antonio Jose de Sucre
+3:VE:VEN:VENEZUELA:BARINAS:Arismendi
+4:VE:VEN:VENEZUELA:BARINAS:Barinas
+5:VE:VEN:VENEZUELA:BARINAS:Bolivar
+6:VE:VEN:VENEZUELA:BARINAS:Cruz Paredes
+7:VE:VEN:VENEZUELA:BARINAS:Ezequiel Zamora
+8:VE:VEN:VENEZUELA:BARINAS:Obispos
+9:VE:VEN:VENEZUELA:BARINAS:Pedraza
+10:VE:VEN:VENEZUELA:BARINAS:Rojas
+11:VE:VEN:VENEZUELA:BARINAS:Sosa
+1:VE:VEN:VENEZUELA:CARABOBO:Bejuma
+2:VE:VEN:VENEZUELA:CARABOBO:Carlos Arevalo
+3:VE:VEN:VENEZUELA:CARABOBO:Diego Ibarra
+4:VE:VEN:VENEZUELA:CARABOBO:Guacara
+5:VE:VEN:VENEZUELA:CARABOBO:Isla
+6:VE:VEN:VENEZUELA:CARABOBO:Juan Jose Mora
+7:VE:VEN:VENEZUELA:CARABOBO:Lago de Valencia
+8:VE:VEN:VENEZUELA:CARABOBO:Miranda
+9:VE:VEN:VENEZUELA:CARABOBO:Montalban
+10:VE:VEN:VENEZUELA:CARABOBO:Puerto Cabello
+11:VE:VEN:VENEZUELA:CARABOBO:San Joaquin
+12:VE:VEN:VENEZUELA:CARABOBO:Valencia
diff --git a/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..e1a2493
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN1_LEX.txt
@@ -0,0 +1,68 @@
+1:VN-44:VN:AN GIANG
+2:VN-43:VN:BA RIA   VUNG TAU
+3:VN-53:VN:BAC CAN
+4:VN-54:VN:BAC GIANG
+5:VN-55:VN:BAC LIEU
+6:VN-56:VN:BAC NINH
+7:VN-BTH:VN:BAC THAI
+8:VN-50:VN:BEN TRE
+9:VN-3:VN:BINH DINH
+10:VN-57:VN:BINH DUONG
+11:VN-58:VN:BINH PHUOC
+12:VN-40:VN:BINH THUAN
+13:VN-59:VN:CA MAU
+14:VN-48:VN:CAN THO
+15:VN-04:VN:CAO BANG
+16:VN-60:VN:DA NANG, THANH PHO
+17:VN-33:VN:DAC LAC
+18:VN-72:VN:DAK NONG
+19:VN-7:VN:DIEN BIEN
+20:VN-39:VN:DONG NAI
+21:VN-45:VN:DONG THAP
+22:VN-30:VN:GIA LAI
+23:VN-HBC:VN:HA BAC
+24:VN-03:VN:HA GIANG
+25:VN-64:VN:HA NOI
+26:VN-65:VN:HA TAY
+27:VN-23:VN:HA TINH
+28:VN-6:VN:HAI HUNG
+29:VN-62:VN:HAI PHONG
+30:VN-73:VN:HAU GIANG
+31:VN-66:VN:HO CHI MINH CITY
+32:VN-4:VN:HOA BINH
+33:VN-67:VN:HUNG YEN
+34:VN-34:VN:KHANH HOA
+35:VN-47:VN:KIEN GIANG
+36:VN-28:VN:KON TUM
+37:VN-0:VN:LAI CHAU
+38:VN-35:VN:LAM DONG
+39:VN-09:VN:LANG SON
+40:VN-02:VN:LAO CAI
+41:VN-41:VN:LONG AN
+42:VN-MHI:VN:MINH HAI
+43:VN-74:VN:NAM DINH
+44:VN-63:VN:NAM HA
+45:VN-22:VN:NGHE AN
+46:VN-8:VN:NINH BINH
+47:VN-36:VN:NINH THUAN
+48:VN-68:VN:PHU THO
+49:VN-32:VN:PHU YEN
+50:VN-24:VN:QUANG BINH
+51:VN-27:VN:QUANG NAM DA NANG
+52:VN-29:VN:QUANG NGAI
+53:VN-31:VN:QUANG NINH
+54:VN-25:VN:QUANG TRI
+55:VN-52:VN:SOC TRANG
+56:VN-05:VN:SON LA
+57:VN-SBE:VN:SONG BE
+58:VN-37:VN:TAY NINH
+59:VN-20:VN:THAI BINH
+60:VN-69:VN:THAI NGUYEN
+61:VN-2:VN:THANH HOA
+62:VN-26:VN:THUA THIEN HUE
+63:VN-46:VN:TIEN GIANG
+64:VN-51:VN:TRA VINH
+65:VN-07:VN:TUYEN QUANG
+66:VN-49:VN:VINH LONG
+67:VN-70:VN:VINH PHU
+68:VN-06:VN:YEN BAI
diff --git a/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..36afc1c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/VNM/VNM_ADMIN2_LEX.txt
@@ -0,0 +1,519 @@
+1:VN:VNM:VIETNAM:Ha Tay:Ba Vi
+2:VN:VNM:VIETNAM:Ha Tay:Chuong Mi
+3:VN:VNM:VIETNAM:Ha Tay:Dan Phuong
+4:VN:VNM:VIETNAM:Ha Tay:Ha Dong
+5:VN:VNM:VIETNAM:Ha Tay:Hoai Duc
+6:VN:VNM:VIETNAM:Ha Tay:My Duc
+7:VN:VNM:VIETNAM:Ha Tay:Phu Xuyen
+8:VN:VNM:VIETNAM:Ha Tay:Phuc Tho
+9:VN:VNM:VIETNAM:Ha Tay:Quoc Oai
+10:VN:VNM:VIETNAM:Ha Tay:Son Tay
+11:VN:VNM:VIETNAM:Ha Tay:Thach That
+12:VN:VNM:VIETNAM:Ha Tay:Thanh Oai
+13:VN:VNM:VIETNAM:Ha Tay:Thuong Tin
+14:VN:VNM:VIETNAM:Ha Tay:Ung Hoa
+1:VN:VNM:VIETNAM:Nam Ha:Binh Luc
+2:VN:VNM:VIETNAM:Nam Ha:Duy Tien
+3:VN:VNM:VIETNAM:Nam Ha:Ha Nam
+4:VN:VNM:VIETNAM:Nam Ha:Hai Hau
+5:VN:VNM:VIETNAM:Nam Ha:Kim Bang
+6:VN:VNM:VIETNAM:Nam Ha:Ly Nhan
+7:VN:VNM:VIETNAM:Nam Ha:Nam Dinh Town
+8:VN:VNM:VIETNAM:Nam Ha:Nam Ninh
+9:VN:VNM:VIETNAM:Nam Ha:Nghia Hung
+10:VN:VNM:VIETNAM:Nam Ha:Thanh Liem
+11:VN:VNM:VIETNAM:Nam Ha:Vu Ban
+12:VN:VNM:VIETNAM:Nam Ha:Xuan Thuy
+13:VN:VNM:VIETNAM:Nam Ha:Y Yen
+1:VN:VNM:VIETNAM:Ninh Thuan:Ben Cau
+2:VN:VNM:VIETNAM:Ninh Thuan:Chau Thanh
+3:VN:VNM:VIETNAM:Ninh Thuan:Duong Minh Chau
+4:VN:VNM:VIETNAM:Ninh Thuan:Go Dau
+5:VN:VNM:VIETNAM:Ninh Thuan:Hoa Thanh
+6:VN:VNM:VIETNAM:Ninh Thuan:Ninh Hai
+7:VN:VNM:VIETNAM:Ninh Thuan:Ninh Phuoc
+8:VN:VNM:VIETNAM:Ninh Thuan:Ninh Son
+9:VN:VNM:VIETNAM:Ninh Thuan:Phan Rang-Thap C
+10:VN:VNM:VIETNAM:Ninh Thuan:Tan Bien
+11:VN:VNM:VIETNAM:Ninh Thuan:Tan Chau
+12:VN:VNM:VIETNAM:Ninh Thuan:Trang Bang
+13:VN:VNM:VIETNAM:Ninh Thuan:Tx.Tay Ninh
+1:VN:VNM:VIETNAM:Thua Thien-Hue:A Luoi
+2:VN:VNM:VIETNAM:Thua Thien-Hue:Hue Town
+3:VN:VNM:VIETNAM:Thua Thien-Hue:Huong Thuy
+4:VN:VNM:VIETNAM:Thua Thien-Hue:Huong Tra
+5:VN:VNM:VIETNAM:Thua Thien-Hue:Nam Dong
+6:VN:VNM:VIETNAM:Thua Thien-Hue:Phong Dien
+7:VN:VNM:VIETNAM:Thua Thien-Hue:Phu Loc
+8:VN:VNM:VIETNAM:Thua Thien-Hue:Phu Vang
+9:VN:VNM:VIETNAM:Thua Thien-Hue:Quang Dien
+1:VN:VNM:VIETNAM:Lai Chau:Dien Bien
+2:VN:VNM:VIETNAM:Lai Chau:Muong Lay
+3:VN:VNM:VIETNAM:Lai Chau:Muong Te
+4:VN:VNM:VIETNAM:Lai Chau:Phong Tho
+5:VN:VNM:VIETNAM:Lai Chau:Sin Ho
+6:VN:VNM:VIETNAM:Lai Chau:Tua Chua
+7:VN:VNM:VIETNAM:Lai Chau:Tuan Giao
+8:VN:VNM:VIETNAM:Lai Chau:Tx.Lai Chau
+1:VN:VNM:VIETNAM:Quang Nam-Da Nang:Da Nang Town
+2:VN:VNM:VIETNAM:Quang Nam-Da Nang:Dai Loc
+3:VN:VNM:VIETNAM:Quang Nam-Da Nang:Dien Ban
+4:VN:VNM:VIETNAM:Quang Nam-Da Nang:Duy Xuyen
+5:VN:VNM:VIETNAM:Quang Nam-Da Nang:Giang
+6:VN:VNM:VIETNAM:Quang Nam-Da Nang:Hien
+7:VN:VNM:VIETNAM:Quang Nam-Da Nang:Hiep Duc
+8:VN:VNM:VIETNAM:Quang Nam-Da Nang:Hoa Vang
+9:VN:VNM:VIETNAM:Quang Nam-Da Nang:Hoi An
+10:VN:VNM:VIETNAM:Quang Nam-Da Nang:Nui Thanh
+11:VN:VNM:VIETNAM:Quang Nam-Da Nang:Phuoc Son
+12:VN:VNM:VIETNAM:Quang Nam-Da Nang:Que Son
+13:VN:VNM:VIETNAM:Quang Nam-Da Nang:Tam Ky
+14:VN:VNM:VIETNAM:Quang Nam-Da Nang:Thang Binh
+15:VN:VNM:VIETNAM:Quang Nam-Da Nang:Tien Phuoc
+16:VN:VNM:VIETNAM:Quang Nam-Da Nang:Tra My
+1:VN:VNM:VIETNAM:Phu Yen:Dong Xuan
+2:VN:VNM:VIETNAM:Phu Yen:Son Hoa
+3:VN:VNM:VIETNAM:Phu Yen:Song Cau
+4:VN:VNM:VIETNAM:Phu Yen:Song Hinh
+5:VN:VNM:VIETNAM:Phu Yen:Tuy An
+6:VN:VNM:VIETNAM:Phu Yen:Tuy Hoa
+7:VN:VNM:VIETNAM:Phu Yen:Tuy Hoa Town
+1:VN:VNM:VIETNAM:Ba Ria - Vung Tau:Chau Thanh
+2:VN:VNM:VIETNAM:Ba Ria - Vung Tau:Con Dao
+3:VN:VNM:VIETNAM:Ba Ria - Vung Tau:Long Dat
+4:VN:VNM:VIETNAM:Ba Ria - Vung Tau:Vung Tau
+5:VN:VNM:VIETNAM:Ba Ria - Vung Tau:Xuyen Moc
+1:VN:VNM:VIETNAM:Ha Tinh:Cam Xuyen
+2:VN:VNM:VIETNAM:Ha Tinh:Can Loc
+3:VN:VNM:VIETNAM:Ha Tinh:Duc Tho
+4:VN:VNM:VIETNAM:Ha Tinh:Huong Khe
+5:VN:VNM:VIETNAM:Ha Tinh:Huong Son
+6:VN:VNM:VIETNAM:Ha Tinh:Ky Anh
+7:VN:VNM:VIETNAM:Ha Tinh:Nghi Xuan
+8:VN:VNM:VIETNAM:Ha Tinh:Thach Ha
+9:VN:VNM:VIETNAM:Ha Tinh:Tx.Ha Tinh
+1:VN:VNM:VIETNAM:Vinh Long:Binh Minh
+2:VN:VNM:VIETNAM:Vinh Long:Long Ho
+3:VN:VNM:VIETNAM:Vinh Long:Tam Binh
+4:VN:VNM:VIETNAM:Vinh Long:Tra On
+5:VN:VNM:VIETNAM:Vinh Long:Vinh Long
+6:VN:VNM:VIETNAM:Vinh Long:Vung Liem
+1:VN:VNM:VIETNAM:Thanh Hoa:Ba Thuoc
+2:VN:VNM:VIETNAM:Thanh Hoa:Bim Son
+3:VN:VNM:VIETNAM:Thanh Hoa:Cam Thuy
+4:VN:VNM:VIETNAM:Thanh Hoa:Dong Son
+5:VN:VNM:VIETNAM:Thanh Hoa:Ha Trung
+6:VN:VNM:VIETNAM:Thanh Hoa:Hau Loc
+7:VN:VNM:VIETNAM:Thanh Hoa:Hoang Hoa
+8:VN:VNM:VIETNAM:Thanh Hoa:Lang Chanh
+9:VN:VNM:VIETNAM:Thanh Hoa:Nga Son
+10:VN:VNM:VIETNAM:Thanh Hoa:Ngoc Lac
+11:VN:VNM:VIETNAM:Thanh Hoa:Nhu Xuan
+12:VN:VNM:VIETNAM:Thanh Hoa:Nong Cong
+13:VN:VNM:VIETNAM:Thanh Hoa:Quan Hoa
+14:VN:VNM:VIETNAM:Thanh Hoa:Quang Xuong
+15:VN:VNM:VIETNAM:Thanh Hoa:Sam Son
+16:VN:VNM:VIETNAM:Thanh Hoa:Thach Thanh
+17:VN:VNM:VIETNAM:Thanh Hoa:Thieu Yen
+18:VN:VNM:VIETNAM:Thanh Hoa:Tho Xuan
+19:VN:VNM:VIETNAM:Thanh Hoa:Thuong Xuan
+20:VN:VNM:VIETNAM:Thanh Hoa:Tinh Gia
+21:VN:VNM:VIETNAM:Thanh Hoa:Trieu Son
+22:VN:VNM:VIETNAM:Thanh Hoa:Tx.Thanh Hoa
+23:VN:VNM:VIETNAM:Thanh Hoa:Vinh Loc
+1:VN:VNM:VIETNAM:Song Be:Ben Cat
+2:VN:VNM:VIETNAM:Song Be:Binh Long
+3:VN:VNM:VIETNAM:Song Be:Bu Dang
+4:VN:VNM:VIETNAM:Song Be:Dong Phu
+5:VN:VNM:VIETNAM:Song Be:Loc Ninh
+6:VN:VNM:VIETNAM:Song Be:Phuoc Long
+7:VN:VNM:VIETNAM:Song Be:Tan Uyen
+8:VN:VNM:VIETNAM:Song Be:Thu Dau Mot
+9:VN:VNM:VIETNAM:Song Be:Thuan An
+1:VN:VNM:VIETNAM:Binh Thuan:Bac Binh
+2:VN:VNM:VIETNAM:Binh Thuan:Duc Linh
+3:VN:VNM:VIETNAM:Binh Thuan:Ham Tan
+4:VN:VNM:VIETNAM:Binh Thuan:Ham Thuan Bac
+5:VN:VNM:VIETNAM:Binh Thuan:Ham Thuan Nam
+6:VN:VNM:VIETNAM:Binh Thuan:Phan Thiet
+7:VN:VNM:VIETNAM:Binh Thuan:Tanh Linh
+8:VN:VNM:VIETNAM:Binh Thuan:Tuy Phong
+1:VN:VNM:VIETNAM:Quang Tri:Ben Hai
+2:VN:VNM:VIETNAM:Quang Tri:Dong Ha
+3:VN:VNM:VIETNAM:Quang Tri:Huong Hoa
+4:VN:VNM:VIETNAM:Quang Tri:Trieu Hai
+1:VN:VNM:VIETNAM:Son La:Bac Yen
+2:VN:VNM:VIETNAM:Son La:Mai Son
+3:VN:VNM:VIETNAM:Son La:Moc Chau
+4:VN:VNM:VIETNAM:Son La:Muong La
+5:VN:VNM:VIETNAM:Son La:Phu Yen
+6:VN:VNM:VIETNAM:Son La:Quynh Nhai
+7:VN:VNM:VIETNAM:Son La:Song Ma
+8:VN:VNM:VIETNAM:Son La:Thuan Chau
+9:VN:VNM:VIETNAM:Son La:Tx.Son La
+10:VN:VNM:VIETNAM:Son La:Yen Chau
+1:VN:VNM:VIETNAM:Can Tho:Can Tho Town
+2:VN:VNM:VIETNAM:Can Tho:Chau Thanh
+3:VN:VNM:VIETNAM:Can Tho:Long My
+4:VN:VNM:VIETNAM:Can Tho:O Mon
+5:VN:VNM:VIETNAM:Can Tho:Phung Hiep
+6:VN:VNM:VIETNAM:Can Tho:Thot Not
+7:VN:VNM:VIETNAM:Can Tho:Vi Thanh
+1:VN:VNM:VIETNAM:Khanh Hoa:Cam Ranh
+2:VN:VNM:VIETNAM:Khanh Hoa:Dien Khanh
+3:VN:VNM:VIETNAM:Khanh Hoa:Khanh Son
+4:VN:VNM:VIETNAM:Khanh Hoa:Khanh Vinh
+5:VN:VNM:VIETNAM:Khanh Hoa:Nha Trang Town
+6:VN:VNM:VIETNAM:Khanh Hoa:Ninh Hoa
+7:VN:VNM:VIETNAM:Khanh Hoa:Van Ninh
+1:VN:VNM:VIETNAM:Lam Dong:Bao Loc
+2:VN:VNM:VIETNAM:Lam Dong:Cat Tien
+3:VN:VNM:VIETNAM:Lam Dong:Da Lat Town
+4:VN:VNM:VIETNAM:Lam Dong:Da Teh
+5:VN:VNM:VIETNAM:Lam Dong:Dak Uoai
+6:VN:VNM:VIETNAM:Lam Dong:Di Linh
+7:VN:VNM:VIETNAM:Lam Dong:Don Duong
+8:VN:VNM:VIETNAM:Lam Dong:Duc Trong
+9:VN:VNM:VIETNAM:Lam Dong:Lac Duong
+10:VN:VNM:VIETNAM:Lam Dong:Lam Ha
+1:VN:VNM:VIETNAM:Bac Thai:Bach Thong
+2:VN:VNM:VIETNAM:Bac Thai:Cho Don
+3:VN:VNM:VIETNAM:Bac Thai:Dai Tu
+4:VN:VNM:VIETNAM:Bac Thai:Dinh Hoa
+5:VN:VNM:VIETNAM:Bac Thai:Dong Hi
+6:VN:VNM:VIETNAM:Bac Thai:Na Ri
+7:VN:VNM:VIETNAM:Bac Thai:Pho Yen
+8:VN:VNM:VIETNAM:Bac Thai:Phu Binh
+9:VN:VNM:VIETNAM:Bac Thai:Phu Luong
+10:VN:VNM:VIETNAM:Bac Thai:Song Cong
+11:VN:VNM:VIETNAM:Bac Thai:Thai Nguyen
+12:VN:VNM:VIETNAM:Bac Thai:Vo Nhai
+1:VN:VNM:VIETNAM:Binh Dinh:An Lao
+2:VN:VNM:VIETNAM:Binh Dinh:An Nhon
+3:VN:VNM:VIETNAM:Binh Dinh:Hoai An
+4:VN:VNM:VIETNAM:Binh Dinh:Hoai Nhon
+5:VN:VNM:VIETNAM:Binh Dinh:Phu Cat
+6:VN:VNM:VIETNAM:Binh Dinh:Phu My
+7:VN:VNM:VIETNAM:Binh Dinh:Quy Nhon Town
+8:VN:VNM:VIETNAM:Binh Dinh:Tay Son
+9:VN:VNM:VIETNAM:Binh Dinh:Tuy Phuoc
+10:VN:VNM:VIETNAM:Binh Dinh:Van Canh
+11:VN:VNM:VIETNAM:Binh Dinh:Vinh Thanh
+1:VN:VNM:VIETNAM:Soc Trang:Ke Sach
+2:VN:VNM:VIETNAM:Soc Trang:Long Phu
+3:VN:VNM:VIETNAM:Soc Trang:My Tu
+4:VN:VNM:VIETNAM:Soc Trang:My Xuyen
+5:VN:VNM:VIETNAM:Soc Trang:Soc Trang
+6:VN:VNM:VIETNAM:Soc Trang:Thanh Tri
+7:VN:VNM:VIETNAM:Soc Trang:Vinh Chau
+1:VN:VNM:VIETNAM:Hai Phong:An Hai
+2:VN:VNM:VIETNAM:Hai Phong:An Lao
+3:VN:VNM:VIETNAM:Hai Phong:Cat Hai
+4:VN:VNM:VIETNAM:Hai Phong:Do Son
+5:VN:VNM:VIETNAM:Hai Phong:Inner City
+6:VN:VNM:VIETNAM:Hai Phong:Kien An
+7:VN:VNM:VIETNAM:Hai Phong:Kien Thuy
+8:VN:VNM:VIETNAM:Hai Phong:Thuy Nguyen
+9:VN:VNM:VIETNAM:Hai Phong:Tien Lang
+10:VN:VNM:VIETNAM:Hai Phong:Vinh Bao
+1:VN:VNM:VIETNAM:An Giang:Chau Doc
+2:VN:VNM:VIETNAM:An Giang:Chau Phu
+3:VN:VNM:VIETNAM:An Giang:Chau Thanh
+4:VN:VNM:VIETNAM:An Giang:Cho Moi
+5:VN:VNM:VIETNAM:An Giang:Long Xuyen
+6:VN:VNM:VIETNAM:An Giang:Phu Chau
+7:VN:VNM:VIETNAM:An Giang:Phu Tan
+8:VN:VNM:VIETNAM:An Giang:Thoai Son
+9:VN:VNM:VIETNAM:An Giang:Tinh Bien
+10:VN:VNM:VIETNAM:An Giang:Tri Ton
+1:VN:VNM:VIETNAM:Dong Thap:Cao Lanh
+2:VN:VNM:VIETNAM:Dong Thap:Chau Thanh
+3:VN:VNM:VIETNAM:Dong Thap:Hong Ngu
+4:VN:VNM:VIETNAM:Dong Thap:Sa Dec
+5:VN:VNM:VIETNAM:Dong Thap:Tam Nong
+6:VN:VNM:VIETNAM:Dong Thap:Thanh Binh
+7:VN:VNM:VIETNAM:Dong Thap:Thanh Hung
+8:VN:VNM:VIETNAM:Dong Thap:Thap Muoi
+9:VN:VNM:VIETNAM:Dong Thap:Tx.Cao Lanh
+1:VN:VNM:VIETNAM:Nghe An:Anh Son
+2:VN:VNM:VIETNAM:Nghe An:Con Cuong
+3:VN:VNM:VIETNAM:Nghe An:Dien Chau
+4:VN:VNM:VIETNAM:Nghe An:Do Luong
+5:VN:VNM:VIETNAM:Nghe An:Hung Nguyen
+6:VN:VNM:VIETNAM:Nghe An:Ky Son
+7:VN:VNM:VIETNAM:Nghe An:Nam Dan
+8:VN:VNM:VIETNAM:Nghe An:Nghi Loc
+9:VN:VNM:VIETNAM:Nghe An:Nghia Dan
+10:VN:VNM:VIETNAM:Nghe An:Que Phong
+11:VN:VNM:VIETNAM:Nghe An:Quy Chau
+12:VN:VNM:VIETNAM:Nghe An:Quy Hop
+13:VN:VNM:VIETNAM:Nghe An:Quynh Luu
+14:VN:VNM:VIETNAM:Nghe An:Tan Ky
+15:VN:VNM:VIETNAM:Nghe An:Thanh Chuong
+16:VN:VNM:VIETNAM:Nghe An:Tuong Duong
+17:VN:VNM:VIETNAM:Nghe An:Vinh Town
+18:VN:VNM:VIETNAM:Nghe An:Yen Thanh
+1:VN:VNM:VIETNAM:Cao Bang:Ba Be
+2:VN:VNM:VIETNAM:Cao Bang:Bao Lac
+3:VN:VNM:VIETNAM:Cao Bang:Ha Lang
+4:VN:VNM:VIETNAM:Cao Bang:Ha Quang
+5:VN:VNM:VIETNAM:Cao Bang:Hoa An
+6:VN:VNM:VIETNAM:Cao Bang:Ngan Son
+7:VN:VNM:VIETNAM:Cao Bang:Nguyen Binh
+8:VN:VNM:VIETNAM:Cao Bang:Quang Hoa
+9:VN:VNM:VIETNAM:Cao Bang:Thach An
+10:VN:VNM:VIETNAM:Cao Bang:Thong Nong
+11:VN:VNM:VIETNAM:Cao Bang:Tra Linh
+12:VN:VNM:VIETNAM:Cao Bang:Trung Khanh
+13:VN:VNM:VIETNAM:Cao Bang:Tx.Cao Bang
+1:VN:VNM:VIETNAM:Minh Hai:Bac Lieu
+2:VN:VNM:VIETNAM:Minh Hai:Ca Mau
+3:VN:VNM:VIETNAM:Minh Hai:Cai Nuoc
+4:VN:VNM:VIETNAM:Minh Hai:Dam Doi
+5:VN:VNM:VIETNAM:Minh Hai:Gia Rai
+6:VN:VNM:VIETNAM:Minh Hai:Hong Dan
+7:VN:VNM:VIETNAM:Minh Hai:Ngoc Hien
+8:VN:VNM:VIETNAM:Minh Hai:Thoi Binh
+9:VN:VNM:VIETNAM:Minh Hai:Tran Van Thoi
+10:VN:VNM:VIETNAM:Minh Hai:U Minh
+11:VN:VNM:VIETNAM:Minh Hai:Vinh Loi
+1:VN:VNM:VIETNAM:Yen Bai:Luc Yen
+2:VN:VNM:VIETNAM:Yen Bai:Mu Cang Chai
+3:VN:VNM:VIETNAM:Yen Bai:Tram Tau
+4:VN:VNM:VIETNAM:Yen Bai:Tran Yen
+5:VN:VNM:VIETNAM:Yen Bai:Tx.Yen Bai
+6:VN:VNM:VIETNAM:Yen Bai:Van Chan
+7:VN:VNM:VIETNAM:Yen Bai:Van Yen
+8:VN:VNM:VIETNAM:Yen Bai:Yen Binh
+1:VN:VNM:VIETNAM:Tien Giang:Cai Be
+2:VN:VNM:VIETNAM:Tien Giang:Cai Lay
+3:VN:VNM:VIETNAM:Tien Giang:Chau Thanh
+4:VN:VNM:VIETNAM:Tien Giang:Cho Gao
+5:VN:VNM:VIETNAM:Tien Giang:Go Cong
+6:VN:VNM:VIETNAM:Tien Giang:Go Cong Dong
+7:VN:VNM:VIETNAM:Tien Giang:Go Cong Tay
+8:VN:VNM:VIETNAM:Tien Giang:My Tho Town
+1:VN:VNM:VIETNAM:Lang Son:Bac Son
+2:VN:VNM:VIETNAM:Lang Son:Binh Gia
+3:VN:VNM:VIETNAM:Lang Son:Cao Loc
+4:VN:VNM:VIETNAM:Lang Son:Chi Lang
+5:VN:VNM:VIETNAM:Lang Son:Dinh Lap
+6:VN:VNM:VIETNAM:Lang Son:Huu Lung
+7:VN:VNM:VIETNAM:Lang Son:Loc Binh
+8:VN:VNM:VIETNAM:Lang Son:Trang Dinh
+9:VN:VNM:VIETNAM:Lang Son:Tx.Lang Son
+10:VN:VNM:VIETNAM:Lang Son:Van Lang
+11:VN:VNM:VIETNAM:Lang Son:Van Quan
+1:VN:VNM:VIETNAM:Quang Ngai:Ba To
+2:VN:VNM:VIETNAM:Quang Ngai:Binh Son
+3:VN:VNM:VIETNAM:Quang Ngai:Duc Pho
+4:VN:VNM:VIETNAM:Quang Ngai:Minh Long
+5:VN:VNM:VIETNAM:Quang Ngai:Mo Duc
+6:VN:VNM:VIETNAM:Quang Ngai:Nghia Hanh
+7:VN:VNM:VIETNAM:Quang Ngai:Son Ha
+8:VN:VNM:VIETNAM:Quang Ngai:Son Tinh
+9:VN:VNM:VIETNAM:Quang Ngai:Tra Bong
+10:VN:VNM:VIETNAM:Quang Ngai:Tu Nghia
+11:VN:VNM:VIETNAM:Quang Ngai:Tx.Quang Ngai
+1:VN:VNM:VIETNAM:Ha Noi:Dong Anh
+2:VN:VNM:VIETNAM:Ha Noi:Gia Lam
+3:VN:VNM:VIETNAM:Ha Noi:Inner City
+4:VN:VNM:VIETNAM:Ha Noi:Soc Son
+5:VN:VNM:VIETNAM:Ha Noi:Thanh Tri
+6:VN:VNM:VIETNAM:Ha Noi:Tu Liem
+1:VN:VNM:VIETNAM:Ha Giang:Bac Me
+2:VN:VNM:VIETNAM:Ha Giang:Bac Quang
+3:VN:VNM:VIETNAM:Ha Giang:Dong Van
+4:VN:VNM:VIETNAM:Ha Giang:Hoang Su Phi
+5:VN:VNM:VIETNAM:Ha Giang:Meo Vac
+6:VN:VNM:VIETNAM:Ha Giang:Quan Ba
+7:VN:VNM:VIETNAM:Ha Giang:Tx.Ha Giang
+8:VN:VNM:VIETNAM:Ha Giang:Vi Xuyen
+9:VN:VNM:VIETNAM:Ha Giang:Xin Man
+10:VN:VNM:VIETNAM:Ha Giang:Yen Minh
+1:VN:VNM:VIETNAM:Gia Lai:A Yun Pa
+2:VN:VNM:VIETNAM:Gia Lai:An Khe
+3:VN:VNM:VIETNAM:Gia Lai:Chu Pa
+4:VN:VNM:VIETNAM:Gia Lai:Chu Prong
+5:VN:VNM:VIETNAM:Gia Lai:Chu Sre
+6:VN:VNM:VIETNAM:Gia Lai:Kbang
+7:VN:VNM:VIETNAM:Gia Lai:Kon Chro
+8:VN:VNM:VIETNAM:Gia Lai:Krongpa
+9:VN:VNM:VIETNAM:Gia Lai:Mang Yang
+10:VN:VNM:VIETNAM:Gia Lai:Playku
+1:VN:VNM:VIETNAM:Dong Nai:Bien Hoa Town
+2:VN:VNM:VIETNAM:Dong Nai:Long Thanh
+3:VN:VNM:VIETNAM:Dong Nai:Tan Phu
+4:VN:VNM:VIETNAM:Dong Nai:Thong Nhat
+5:VN:VNM:VIETNAM:Dong Nai:Vinh An
+6:VN:VNM:VIETNAM:Dong Nai:Xuan Loc
+1:VN:VNM:VIETNAM:Tuyen Quang:Chiem Hoa
+2:VN:VNM:VIETNAM:Tuyen Quang:Ham Yen
+3:VN:VNM:VIETNAM:Tuyen Quang:Na Hang
+4:VN:VNM:VIETNAM:Tuyen Quang:Son Duong
+5:VN:VNM:VIETNAM:Tuyen Quang:Tx.Tuyen Quang
+6:VN:VNM:VIETNAM:Tuyen Quang:Yen Son
+1:VN:VNM:VIETNAM:Lao Cai:Bac Ha
+2:VN:VNM:VIETNAM:Lao Cai:Bao Thang
+3:VN:VNM:VIETNAM:Lao Cai:Bao Yen
+4:VN:VNM:VIETNAM:Lao Cai:Bat Xat
+5:VN:VNM:VIETNAM:Lao Cai:Muong Khuong
+6:VN:VNM:VIETNAM:Lao Cai:Sa Pa
+7:VN:VNM:VIETNAM:Lao Cai:Than Uyen
+8:VN:VNM:VIETNAM:Lao Cai:Tx.Lao Cai
+9:VN:VNM:VIETNAM:Lao Cai:Van Ban
+1:VN:VNM:VIETNAM:Ninh Binh:Gia Vien
+2:VN:VNM:VIETNAM:Ninh Binh:Hoa Lu
+3:VN:VNM:VIETNAM:Ninh Binh:Hoang Long
+4:VN:VNM:VIETNAM:Ninh Binh:Kim Son
+5:VN:VNM:VIETNAM:Ninh Binh:Ninh Binh
+6:VN:VNM:VIETNAM:Ninh Binh:Tam Diep
+1:VN:VNM:VIETNAM:Long An:Ben Luc
+2:VN:VNM:VIETNAM:Long An:Can Duoc
+3:VN:VNM:VIETNAM:Long An:Can Giuoc
+4:VN:VNM:VIETNAM:Long An:Chau Thanh
+5:VN:VNM:VIETNAM:Long An:Duc Hoa
+6:VN:VNM:VIETNAM:Long An:Duc Hue
+7:VN:VNM:VIETNAM:Long An:Moc Hoa
+8:VN:VNM:VIETNAM:Long An:Tan An
+9:VN:VNM:VIETNAM:Long An:Tan Thanh
+10:VN:VNM:VIETNAM:Long An:Tan Tru
+11:VN:VNM:VIETNAM:Long An:Thanh Hoa
+12:VN:VNM:VIETNAM:Long An:Thu Thua
+13:VN:VNM:VIETNAM:Long An:Vinh Hung
+1:VN:VNM:VIETNAM:Tra Vinh:Cang Long
+2:VN:VNM:VIETNAM:Tra Vinh:Cau Ke
+3:VN:VNM:VIETNAM:Tra Vinh:Cau Ngang
+4:VN:VNM:VIETNAM:Tra Vinh:Chau Thanh
+5:VN:VNM:VIETNAM:Tra Vinh:Duyen Hai
+6:VN:VNM:VIETNAM:Tra Vinh:Tieu Can
+7:VN:VNM:VIETNAM:Tra Vinh:Tra Cu
+8:VN:VNM:VIETNAM:Tra Vinh:Tra Vinh
+1:VN:VNM:VIETNAM:Hai Hung:Cam Binh
+2:VN:VNM:VIETNAM:Hai Hung:Chau Giang
+3:VN:VNM:VIETNAM:Hai Hung:Chi Linh
+4:VN:VNM:VIETNAM:Hai Hung:Hai Duong
+5:VN:VNM:VIETNAM:Hai Hung:Hung Yen
+6:VN:VNM:VIETNAM:Hai Hung:Kim Mon
+7:VN:VNM:VIETNAM:Hai Hung:Kim Thi
+8:VN:VNM:VIETNAM:Hai Hung:My Van
+9:VN:VNM:VIETNAM:Hai Hung:Nam Thanh
+10:VN:VNM:VIETNAM:Hai Hung:Ninh Thanh
+11:VN:VNM:VIETNAM:Hai Hung:Phu Tien
+12:VN:VNM:VIETNAM:Hai Hung:Tu Loc
+1:VN:VNM:VIETNAM:Quang Binh:Bo Trach
+2:VN:VNM:VIETNAM:Quang Binh:Dong Hoi
+3:VN:VNM:VIETNAM:Quang Binh:Le Thuy
+4:VN:VNM:VIETNAM:Quang Binh:Minh Hoa
+5:VN:VNM:VIETNAM:Quang Binh:Quang Ninh
+6:VN:VNM:VIETNAM:Quang Binh:Quang Trach
+7:VN:VNM:VIETNAM:Quang Binh:Tuyen Hoa
+1:VN:VNM:VIETNAM:Kien Giang:An Bien
+2:VN:VNM:VIETNAM:Kien Giang:An Minh
+3:VN:VNM:VIETNAM:Kien Giang:Chau Thanh
+4:VN:VNM:VIETNAM:Kien Giang:Giong Rieng
+5:VN:VNM:VIETNAM:Kien Giang:Go Quao
+6:VN:VNM:VIETNAM:Kien Giang:Ha Tien
+7:VN:VNM:VIETNAM:Kien Giang:Hon Dat
+8:VN:VNM:VIETNAM:Kien Giang:Kien Hai
+9:VN:VNM:VIETNAM:Kien Giang:Phu Quoc
+10:VN:VNM:VIETNAM:Kien Giang:Rach Gia
+11:VN:VNM:VIETNAM:Kien Giang:Tan Hiep
+12:VN:VNM:VIETNAM:Kien Giang:Vinh Thuan
+1:VN:VNM:VIETNAM:Ben Tre:Ba Tri
+2:VN:VNM:VIETNAM:Ben Tre:Binh Dai
+3:VN:VNM:VIETNAM:Ben Tre:Chau Thanh
+4:VN:VNM:VIETNAM:Ben Tre:Cho Lach
+5:VN:VNM:VIETNAM:Ben Tre:Giong Trom
+6:VN:VNM:VIETNAM:Ben Tre:Mo Cay
+7:VN:VNM:VIETNAM:Ben Tre:Thanh Phu
+8:VN:VNM:VIETNAM:Ben Tre:Tx.Ben Tre
+1:VN:VNM:VIETNAM:Vinh Phu:Doan Hung
+2:VN:VNM:VIETNAM:Vinh Phu:Lap Thach
+3:VN:VNM:VIETNAM:Vinh Phu:Me Linh
+4:VN:VNM:VIETNAM:Vinh Phu:Phong Chau
+5:VN:VNM:VIETNAM:Vinh Phu:Phu Tho
+6:VN:VNM:VIETNAM:Vinh Phu:Song Thao
+7:VN:VNM:VIETNAM:Vinh Phu:Tam Dao
+8:VN:VNM:VIETNAM:Vinh Phu:Tam Thanh
+9:VN:VNM:VIETNAM:Vinh Phu:Thanh Hoa
+10:VN:VNM:VIETNAM:Vinh Phu:Thanh Son
+11:VN:VNM:VIETNAM:Vinh Phu:Viet Tri
+12:VN:VNM:VIETNAM:Vinh Phu:Vinh Lac
+13:VN:VNM:VIETNAM:Vinh Phu:Vinh Yen
+14:VN:VNM:VIETNAM:Vinh Phu:Yen Lap
+1:VN:VNM:VIETNAM:Ho Chi Minh City:Binh Chanh
+2:VN:VNM:VIETNAM:Ho Chi Minh City:Cu Chi
+3:VN:VNM:VIETNAM:Ho Chi Minh City:Duyen Hai
+4:VN:VNM:VIETNAM:Ho Chi Minh City:Hoc Mon
+5:VN:VNM:VIETNAM:Ho Chi Minh City:Inner City
+6:VN:VNM:VIETNAM:Ho Chi Minh City:Nha Be
+7:VN:VNM:VIETNAM:Ho Chi Minh City:Thu Duc
+1:VN:VNM:VIETNAM:Kon Tum:Dac Glay
+2:VN:VNM:VIETNAM:Kon Tum:Dac To
+3:VN:VNM:VIETNAM:Kon Tum:Kon Tum
+4:VN:VNM:VIETNAM:Kon Tum:Konplong
+5:VN:VNM:VIETNAM:Kon Tum:Sa Thay
+1:VN:VNM:VIETNAM:Thai Binh:Dong Hung
+2:VN:VNM:VIETNAM:Thai Binh:Hung Ha
+3:VN:VNM:VIETNAM:Thai Binh:Kien Xuong
+4:VN:VNM:VIETNAM:Thai Binh:Quynh Phu
+5:VN:VNM:VIETNAM:Thai Binh:Thai Thuy
+6:VN:VNM:VIETNAM:Thai Binh:Tien Hai
+7:VN:VNM:VIETNAM:Thai Binh:Tx.Thai Binh
+8:VN:VNM:VIETNAM:Thai Binh:Vu Thu
+1:VN:VNM:VIETNAM:Quang Ninh:Ba Che
+2:VN:VNM:VIETNAM:Quang Ninh:Binh Lieu
+3:VN:VNM:VIETNAM:Quang Ninh:Cam Pha
+4:VN:VNM:VIETNAM:Quang Ninh:Cam Pha Town
+5:VN:VNM:VIETNAM:Quang Ninh:Dong Trieu
+6:VN:VNM:VIETNAM:Quang Ninh:Hai Ninh
+7:VN:VNM:VIETNAM:Quang Ninh:Hoanh Bo
+8:VN:VNM:VIETNAM:Quang Ninh:Hon Gai
+9:VN:VNM:VIETNAM:Quang Ninh:Quang Ha
+10:VN:VNM:VIETNAM:Quang Ninh:Tien Yen
+11:VN:VNM:VIETNAM:Quang Ninh:Uong Bi
+12:VN:VNM:VIETNAM:Quang Ninh:Yen Hung
+1:VN:VNM:VIETNAM:Ha Bac:Bac Giang
+2:VN:VNM:VIETNAM:Ha Bac:Bac Ninh
+3:VN:VNM:VIETNAM:Ha Bac:Gia Luong
+4:VN:VNM:VIETNAM:Ha Bac:Hiep Hoa
+5:VN:VNM:VIETNAM:Ha Bac:Lang Giang
+6:VN:VNM:VIETNAM:Ha Bac:Luc Nam
+7:VN:VNM:VIETNAM:Ha Bac:Luc Ngan
+8:VN:VNM:VIETNAM:Ha Bac:Que Vo
+9:VN:VNM:VIETNAM:Ha Bac:Son Dong
+10:VN:VNM:VIETNAM:Ha Bac:Tan Yen
+11:VN:VNM:VIETNAM:Ha Bac:Thuan Thanh
+12:VN:VNM:VIETNAM:Ha Bac:Tien Son
+13:VN:VNM:VIETNAM:Ha Bac:Viet Yen
+14:VN:VNM:VIETNAM:Ha Bac:Yen Dung
+15:VN:VNM:VIETNAM:Ha Bac:Yen Phong
+16:VN:VNM:VIETNAM:Ha Bac:Yen The
+1:VN:VNM:VIETNAM:Hoa Binh:Da Bac
+2:VN:VNM:VIETNAM:Hoa Binh:Kim Boi
+3:VN:VNM:VIETNAM:Hoa Binh:Ky Son
+4:VN:VNM:VIETNAM:Hoa Binh:Lac Son
+5:VN:VNM:VIETNAM:Hoa Binh:Lac Thuy
+6:VN:VNM:VIETNAM:Hoa Binh:Luong Son
+7:VN:VNM:VIETNAM:Hoa Binh:Mai Chau
+8:VN:VNM:VIETNAM:Hoa Binh:Tan Lac
+9:VN:VNM:VIETNAM:Hoa Binh:Tx.Hoa Binh
+10:VN:VNM:VIETNAM:Hoa Binh:Yen Thuy
+1:VN:VNM:VIETNAM:Dac Lac:Buon Ma Thuat
+2:VN:VNM:VIETNAM:Dac Lac:Chu Giut
+3:VN:VNM:VIETNAM:Dac Lac:Chumgar
+4:VN:VNM:VIETNAM:Dac Lac:Dac Min
+5:VN:VNM:VIETNAM:Dac Lac:Dak Nong
+6:VN:VNM:VIETNAM:Dac Lac:Dak Rlap
+7:VN:VNM:VIETNAM:Dac Lac:Eakar
+8:VN:VNM:VIETNAM:Dac Lac:Krongana
+9:VN:VNM:VIETNAM:Dac Lac:Krongbong
+10:VN:VNM:VIETNAM:Dac Lac:Krongbuc
+11:VN:VNM:VIETNAM:Dac Lac:Krongnang
+12:VN:VNM:VIETNAM:Dac Lac:Krongno
+13:VN:VNM:VIETNAM:Dac Lac:Krongpach
+14:VN:VNM:VIETNAM:Dac Lac:Lac
+15:VN:VNM:VIETNAM:Dac Lac:M'Drak
+16:VN:VNM:VIETNAM:Dac Lac:Ya Hleo
+17:VN:VNM:VIETNAM:Dac Lac:Ya Sup
diff --git a/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN1_LEX.txt
new file mode 100644
index 0000000..171b9fc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN1_LEX.txt
@@ -0,0 +1,21 @@
+1:YE-AB:YE:ABYAN
+2:YE-DA:YE:AD DLI
+3:YE-AD:YE:ADAN
+4:YE-HJ:YE:AJJAH
+5:YE-BA:YE:AL BAYA
+6:YE-JA:YE:AL JAWF
+7:YE-MR:YE:AL MAHRAH
+8:YE-MW:YE:AL MAWIT
+9:YE-HU:YE:AL UDAYDAH
+10:YE-AM:YE:AMRN
+11:YE-SN:YE:AN
+12:YE-HD:YE:ARAMAWT
+13:YE-SD:YE:DAH
+14:YE-DH:YE:DHAMAR
+15:YE-N:YE:FORMER NORTH YEMEN
+16:YE-S:YE:FORMER SOUTH YEMEN
+17:YE-IB:YE:IBB
+18:YE-LA:YE:LAIJ
+19:YE-MA:YE:MARIB
+20:YE-SH:YE:SHABWAH
+21:YE-TA:YE:TIZZ
diff --git a/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN2_LEX.txt
new file mode 100644
index 0000000..adf2f3f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/YEM/YEM_ADMIN2_LEX.txt
@@ -0,0 +1,8 @@
+1:YE:YEM:YEMEN:Former North Yemen:North Yemen (1)
+1:YE:YEM:YEMEN:Former South Yemen:Abyan
+2:YE:YEM:YEMEN:Former South Yemen:Adan
+3:YE:YEM:YEMEN:Former South Yemen:Al Mahrah
+4:YE:YEM:YEMEN:Former South Yemen:Hadramawt
+5:YE:YEM:YEMEN:Former South Yemen:Lahij
+6:YE:YEM:YEMEN:Former South Yemen:Shabwah
+7:YE:YEM:YEMEN:Former South Yemen:Socotra
diff --git a/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN1_LEX.txt
new file mode 100644
index 0000000..3aae348
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN1_LEX.txt
@@ -0,0 +1,13 @@
+1:ZA-EC:ZA:EASTERN CAPE [EASTERN TVL]
+2:ZA-FS:ZA:FREE STATE
+3:ZA-GT:ZA:GAUTENG
+4:ZA-NL:ZA:KWAZULU NATAL
+5:ZA-LP:ZA:LIMPOPO
+6:ZA-MP:ZA:MPUMALANGA
+7:ZA-NAT:ZA:NATAL
+8:ZA-NW:ZA:NORTH WEST
+9:ZA-NC:ZA:NORTHERN CAPE [NORTHERN TVL]
+10:ZA-OR:ZA:ORANGE
+11:ZA-OFS:ZA:ORANGE FREE STATE
+12:ZA-PWM:ZA:PWV
+13:ZA-WC:ZA:WESTERN CAPE
diff --git a/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN2_LEX.txt
new file mode 100644
index 0000000..38af75a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ZAF/ZAF_ADMIN2_LEX.txt
@@ -0,0 +1,374 @@
+1:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Amersfort
+2:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Balfour
+3:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Barberton
+4:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Belfast
+5:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Bethal
+6:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Carolina
+7:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Delmas
+8:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Eerstehoek
+9:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Ermelo
+10:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Groblersdal
+11:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Hoeveldrif
+12:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Lydenburg
+13:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Mdutjana
+14:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Middelsburg
+15:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Moutse
+16:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Nelspruit
+17:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Piet Retief
+18:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Standerton
+19:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Volksrust
+20:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Wakkerstroom
+21:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Waterval Boven
+22:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Witbank
+23:ZA:ZAF:SOUTH AFRICA:Eastern TVL:Witriver
+24:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.78
+25:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.79
+26:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.80
+27:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.81
+28:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.82
+29:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.83
+30:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.84
+31:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.85
+32:ZA:ZAF:SOUTH AFRICA:Eastern TVL:ZAF.L2.86
+1:ZA:ZAF:SOUTH AFRICA:Northern Cape:Barkly West
+2:ZA:ZAF:SOUTH AFRICA:Northern Cape:Britstown
+3:ZA:ZAF:SOUTH AFRICA:Northern Cape:Calvinia
+4:ZA:ZAF:SOUTH AFRICA:Northern Cape:Carnarvon
+5:ZA:ZAF:SOUTH AFRICA:Northern Cape:Colesberg
+6:ZA:ZAF:SOUTH AFRICA:Northern Cape:De Aar
+7:ZA:ZAF:SOUTH AFRICA:Northern Cape:Fraserburg
+8:ZA:ZAF:SOUTH AFRICA:Northern Cape:Gordonia
+9:ZA:ZAF:SOUTH AFRICA:Northern Cape:Hanover
+10:ZA:ZAF:SOUTH AFRICA:Northern Cape:Hartswater
+11:ZA:ZAF:SOUTH AFRICA:Northern Cape:Hay
+12:ZA:ZAF:SOUTH AFRICA:Northern Cape:Herbert
+13:ZA:ZAF:SOUTH AFRICA:Northern Cape:Hopetown
+14:ZA:ZAF:SOUTH AFRICA:Northern Cape:Kenhardt
+15:ZA:ZAF:SOUTH AFRICA:Northern Cape:Kimberley
+16:ZA:ZAF:SOUTH AFRICA:Northern Cape:Kuruman
+17:ZA:ZAF:SOUTH AFRICA:Northern Cape:Namakwaland
+18:ZA:ZAF:SOUTH AFRICA:Northern Cape:Noupoort
+19:ZA:ZAF:SOUTH AFRICA:Northern Cape:Philipstown
+20:ZA:ZAF:SOUTH AFRICA:Northern Cape:Postmasburg
+21:ZA:ZAF:SOUTH AFRICA:Northern Cape:Prieska
+22:ZA:ZAF:SOUTH AFRICA:Northern Cape:Richmond
+23:ZA:ZAF:SOUTH AFRICA:Northern Cape:Sutherland
+24:ZA:ZAF:SOUTH AFRICA:Northern Cape:Victoria West
+25:ZA:ZAF:SOUTH AFRICA:Northern Cape:Walvis Bay
+26:ZA:ZAF:SOUTH AFRICA:Northern Cape:Warrenton
+27:ZA:ZAF:SOUTH AFRICA:Northern Cape:Williston
+1:ZA:ZAF:SOUTH AFRICA:Natal:Alfred
+2:ZA:ZAF:SOUTH AFRICA:Natal:Babanango
+3:ZA:ZAF:SOUTH AFRICA:Natal:Bergville
+4:ZA:ZAF:SOUTH AFRICA:Natal:Camper Down
+5:ZA:ZAF:SOUTH AFRICA:Natal:Dannhauser
+6:ZA:ZAF:SOUTH AFRICA:Natal:Dundee
+7:ZA:ZAF:SOUTH AFRICA:Natal:Durban/Chats.
+8:ZA:ZAF:SOUTH AFRICA:Natal:Embumbulu
+9:ZA:ZAF:SOUTH AFRICA:Natal:Eshowe
+10:ZA:ZAF:SOUTH AFRICA:Natal:Estcourt
+11:ZA:ZAF:SOUTH AFRICA:Natal:Ezingolweni
+12:ZA:ZAF:SOUTH AFRICA:Natal:Glencoe
+13:ZA:ZAF:SOUTH AFRICA:Natal:Hlabisa
+14:ZA:ZAF:SOUTH AFRICA:Natal:Inanda
+15:ZA:ZAF:SOUTH AFRICA:Natal:Ingwavuma
+16:ZA:ZAF:SOUTH AFRICA:Natal:Ixopo
+17:ZA:ZAF:SOUTH AFRICA:Natal:Klipriver
+18:ZA:ZAF:SOUTH AFRICA:Natal:Kranskop
+19:ZA:ZAF:SOUTH AFRICA:Natal:Lion River
+20:ZA:ZAF:SOUTH AFRICA:Natal:Lower Tugula
+21:ZA:ZAF:SOUTH AFRICA:Natal:Lower Umfolozi
+22:ZA:ZAF:SOUTH AFRICA:Natal:Mahlabatini
+23:ZA:ZAF:SOUTH AFRICA:Natal:Mapumulo
+24:ZA:ZAF:SOUTH AFRICA:Natal:Mooirivier
+25:ZA:ZAF:SOUTH AFRICA:Natal:Mount Currie
+26:ZA:ZAF:SOUTH AFRICA:Natal:Mpendle
+27:ZA:ZAF:SOUTH AFRICA:Natal:Msinga
+28:ZA:ZAF:SOUTH AFRICA:Natal:Mtonjaneni
+29:ZA:ZAF:SOUTH AFRICA:Natal:Mtunzini
+30:ZA:ZAF:SOUTH AFRICA:Natal:Ndwedwe
+31:ZA:ZAF:SOUTH AFRICA:Natal:New Hanover
+32:ZA:ZAF:SOUTH AFRICA:Natal:Newcastle
+33:ZA:ZAF:SOUTH AFRICA:Natal:Ngotshe
+34:ZA:ZAF:SOUTH AFRICA:Natal:Nkandala
+35:ZA:ZAF:SOUTH AFRICA:Natal:Nongoma
+36:ZA:ZAF:SOUTH AFRICA:Natal:Nqutu
+37:ZA:ZAF:SOUTH AFRICA:Natal:Paulpietersburg
+38:ZA:ZAF:SOUTH AFRICA:Natal:Pietermaritzburg
+39:ZA:ZAF:SOUTH AFRICA:Natal:Pinetown
+40:ZA:ZAF:SOUTH AFRICA:Natal:Polela
+41:ZA:ZAF:SOUTH AFRICA:Natal:Port Shepstone
+42:ZA:ZAF:SOUTH AFRICA:Natal:Richmond
+43:ZA:ZAF:SOUTH AFRICA:Natal:Ubombo
+44:ZA:ZAF:SOUTH AFRICA:Natal:Umvoti
+45:ZA:ZAF:SOUTH AFRICA:Natal:Umzinto
+46:ZA:ZAF:SOUTH AFRICA:Natal:Underberg
+47:ZA:ZAF:SOUTH AFRICA:Natal:Utrecht
+48:ZA:ZAF:SOUTH AFRICA:Natal:Vryheid
+49:ZA:ZAF:SOUTH AFRICA:Natal:Vulam./Emzumbe
+50:ZA:ZAF:SOUTH AFRICA:Natal:Weenen
+51:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.30
+52:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.31
+53:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.32
+54:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.33
+55:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.34
+56:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.35
+57:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.36
+58:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.37
+59:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.38
+60:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.39
+61:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.40
+62:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.41
+63:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.42
+64:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.43
+65:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.44
+66:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.45
+67:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.46
+68:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.47
+69:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.48
+70:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.49
+71:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.50
+72:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.51
+73:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.52
+74:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.53
+75:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.54
+76:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.55
+77:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.56
+78:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.57
+79:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.58
+80:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.59
+81:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.60
+82:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.61
+83:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.62
+84:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.63
+85:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.64
+86:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.65
+87:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.66
+88:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.67
+89:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.68
+90:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.69
+91:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.70
+92:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.71
+93:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.72
+94:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.73
+95:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.74
+96:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.75
+97:ZA:ZAF:SOUTH AFRICA:Natal:ZAF.L2.76
+1:ZA:ZAF:SOUTH AFRICA:North West:Brits
+2:ZA:ZAF:SOUTH AFRICA:North West:Coligny
+3:ZA:ZAF:SOUTH AFRICA:North West:Delareyville
+4:ZA:ZAF:SOUTH AFRICA:North West:Klerksdorp
+5:ZA:ZAF:SOUTH AFRICA:North West:Koster
+6:ZA:ZAF:SOUTH AFRICA:North West:Lichtenburg
+7:ZA:ZAF:SOUTH AFRICA:North West:Marico
+8:ZA:ZAF:SOUTH AFRICA:North West:Potchefstroom
+9:ZA:ZAF:SOUTH AFRICA:North West:Rustenburg
+10:ZA:ZAF:SOUTH AFRICA:North West:Schweizer R.
+11:ZA:ZAF:SOUTH AFRICA:North West:Swartruggen
+12:ZA:ZAF:SOUTH AFRICA:North West:Ventersdorp
+13:ZA:ZAF:SOUTH AFRICA:North West:Vryburg
+14:ZA:ZAF:SOUTH AFRICA:North West:Vryburg 1/Mafeking 1
+15:ZA:ZAF:SOUTH AFRICA:North West:Wolmaransstad
+16:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.1
+17:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.2
+18:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.3
+19:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.4
+20:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.5
+21:ZA:ZAF:SOUTH AFRICA:North West:ZAF.L2.6
+1:ZA:ZAF:SOUTH AFRICA:Northern TVL:Bochum
+2:ZA:ZAF:SOUTH AFRICA:Northern TVL:Bolobedu
+3:ZA:ZAF:SOUTH AFRICA:Northern TVL:Giyani
+4:ZA:ZAF:SOUTH AFRICA:Northern TVL:Letaba
+5:ZA:ZAF:SOUTH AFRICA:Northern TVL:Malamuele
+6:ZA:ZAF:SOUTH AFRICA:Northern TVL:Messina
+7:ZA:ZAF:SOUTH AFRICA:Northern TVL:Mokerong
+8:ZA:ZAF:SOUTH AFRICA:Northern TVL:Naphuno
+9:ZA:ZAF:SOUTH AFRICA:Northern TVL:Nebo
+10:ZA:ZAF:SOUTH AFRICA:Northern TVL:Pietersburg
+11:ZA:ZAF:SOUTH AFRICA:Northern TVL:Pilgrim's Rest
+12:ZA:ZAF:SOUTH AFRICA:Northern TVL:Potgietersrus
+13:ZA:ZAF:SOUTH AFRICA:Northern TVL:Ritavi
+14:ZA:ZAF:SOUTH AFRICA:Northern TVL:Sekgosese
+15:ZA:ZAF:SOUTH AFRICA:Northern TVL:Sekhukhuneland
+16:ZA:ZAF:SOUTH AFRICA:Northern TVL:Seshego
+17:ZA:ZAF:SOUTH AFRICA:Northern TVL:Soutpansberg
+18:ZA:ZAF:SOUTH AFRICA:Northern TVL:Thabamoopo
+19:ZA:ZAF:SOUTH AFRICA:Northern TVL:Thabazimbi
+20:ZA:ZAF:SOUTH AFRICA:Northern TVL:Warmbad
+21:ZA:ZAF:SOUTH AFRICA:Northern TVL:Waterberg
+22:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.10
+23:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.11
+24:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.12
+25:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.13
+26:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.14
+27:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.15
+28:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.16
+29:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.17
+30:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.18
+31:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.19
+32:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.20
+33:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.21
+34:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.22
+35:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.23
+36:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.24
+37:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.25
+38:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.26
+39:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.27
+40:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.7
+41:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.8
+42:ZA:ZAF:SOUTH AFRICA:Northern TVL:ZAF.L2.9
+1:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Aberdeen
+2:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Adelaide
+3:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Albany
+4:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Albert
+5:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Alexandria
+6:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Aliwal North
+7:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Barkly East
+8:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Bathurst
+9:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Bedford
+10:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Chatcart
+11:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Cradock
+12:ZA:ZAF:SOUTH AFRICA:Eastern Cape:East London
+13:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Elliot
+14:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Fort Beaufort
+15:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Graaff-Reinet
+16:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Hankey
+17:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Hofmeyr
+18:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Humansdorp
+19:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Indwe
+20:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Jansenville
+21:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Joubertina
+22:ZA:ZAF:SOUTH AFRICA:Eastern Cape:King William Town
+23:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Kirkwood
+24:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Komga
+25:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Lady Grey
+26:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Maclear
+27:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Mdantsane
+28:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Mdantsane 4
+29:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Middleburg
+30:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Molteno
+31:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Mount Currie
+32:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Pearston
+33:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Port Elisabeth
+34:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Queenstown
+35:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Somerset East
+36:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Sterkstroom
+37:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Steylerville
+38:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Steynsburg
+39:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Stochenstrom
+40:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Sutterheim
+41:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Tarkastad
+42:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Uitenhage
+43:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Veterstad
+44:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Victoria East
+45:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Willowmore
+46:ZA:ZAF:SOUTH AFRICA:Eastern Cape:Wodehouse
+47:ZA:ZAF:SOUTH AFRICA:Eastern Cape:ZAF.L2.28
+48:ZA:ZAF:SOUTH AFRICA:Eastern Cape:ZAF.L2.29
+1:ZA:ZAF:SOUTH AFRICA:PWV:Alberton
+2:ZA:ZAF:SOUTH AFRICA:PWV:Benoni
+3:ZA:ZAF:SOUTH AFRICA:PWV:Boksburg
+4:ZA:ZAF:SOUTH AFRICA:PWV:Brakpan
+5:ZA:ZAF:SOUTH AFRICA:PWV:Bronkhorstspruit
+6:ZA:ZAF:SOUTH AFRICA:PWV:Cullinan
+7:ZA:ZAF:SOUTH AFRICA:PWV:Germiston
+8:ZA:ZAF:SOUTH AFRICA:PWV:Heidelberg
+9:ZA:ZAF:SOUTH AFRICA:PWV:Johannesburg
+10:ZA:ZAF:SOUTH AFRICA:PWV:Kempton Park
+11:ZA:ZAF:SOUTH AFRICA:PWV:Krugersdorp
+12:ZA:ZAF:SOUTH AFRICA:PWV:Nigel
+13:ZA:ZAF:SOUTH AFRICA:PWV:Oberholzer
+14:ZA:ZAF:SOUTH AFRICA:PWV:Pretoria
+15:ZA:ZAF:SOUTH AFRICA:PWV:Randburg
+16:ZA:ZAF:SOUTH AFRICA:PWV:Randfontein
+17:ZA:ZAF:SOUTH AFRICA:PWV:Roode Port
+18:ZA:ZAF:SOUTH AFRICA:PWV:Springs
+19:ZA:ZAF:SOUTH AFRICA:PWV:Vanderbijl P.
+20:ZA:ZAF:SOUTH AFRICA:PWV:Vereeniging
+21:ZA:ZAF:SOUTH AFRICA:PWV:Westonaria
+22:ZA:ZAF:SOUTH AFRICA:PWV:Wonderboom
+1:ZA:ZAF:SOUTH AFRICA:Orange:Witzieshoek (Qaqwa)
+1:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bethlehem
+2:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bethulie
+3:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bloemfontein/Bots
+4:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bo/Jak/Kof/Fau
+5:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bothaville
+6:ZA:ZAF:SOUTH AFRICA:Orange Free State:Brandfort
+7:ZA:ZAF:SOUTH AFRICA:Orange Free State:Bulfontein
+8:ZA:ZAF:SOUTH AFRICA:Orange Free State:Clocolan
+9:ZA:ZAF:SOUTH AFRICA:Orange Free State:Dewts Doorp
+10:ZA:ZAF:SOUTH AFRICA:Orange Free State:Edenburg
+11:ZA:ZAF:SOUTH AFRICA:Orange Free State:Excelsior
+12:ZA:ZAF:SOUTH AFRICA:Orange Free State:Ficksburg
+13:ZA:ZAF:SOUTH AFRICA:Orange Free State:Fouriesburg
+14:ZA:ZAF:SOUTH AFRICA:Orange Free State:Frankfort
+15:ZA:ZAF:SOUTH AFRICA:Orange Free State:Harrismith
+16:ZA:ZAF:SOUTH AFRICA:Orange Free State:Heilbron
+17:ZA:ZAF:SOUTH AFRICA:Orange Free State:Hennenman
+18:ZA:ZAF:SOUTH AFRICA:Orange Free State:Hoopstad
+19:ZA:ZAF:SOUTH AFRICA:Orange Free State:Jagersfontein
+20:ZA:ZAF:SOUTH AFRICA:Orange Free State:Koppies
+21:ZA:ZAF:SOUTH AFRICA:Orange Free State:Kroonstad
+22:ZA:ZAF:SOUTH AFRICA:Orange Free State:Ladybrand
+23:ZA:ZAF:SOUTH AFRICA:Orange Free State:Lindley
+24:ZA:ZAF:SOUTH AFRICA:Orange Free State:Marquard
+25:ZA:ZAF:SOUTH AFRICA:Orange Free State:Odendaalsrus
+26:ZA:ZAF:SOUTH AFRICA:Orange Free State:Parys
+27:ZA:ZAF:SOUTH AFRICA:Orange Free State:Petrusburg
+28:ZA:ZAF:SOUTH AFRICA:Orange Free State:Philippolis
+29:ZA:ZAF:SOUTH AFRICA:Orange Free State:Reddessburg
+30:ZA:ZAF:SOUTH AFRICA:Orange Free State:Reitz
+31:ZA:ZAF:SOUTH AFRICA:Orange Free State:Rouxville
+32:ZA:ZAF:SOUTH AFRICA:Orange Free State:Sasolsburg
+33:ZA:ZAF:SOUTH AFRICA:Orange Free State:Senekal
+34:ZA:ZAF:SOUTH AFRICA:Orange Free State:Smithfield
+35:ZA:ZAF:SOUTH AFRICA:Orange Free State:Theunissen
+36:ZA:ZAF:SOUTH AFRICA:Orange Free State:Trompsburg
+37:ZA:ZAF:SOUTH AFRICA:Orange Free State:Ventersburg
+38:ZA:ZAF:SOUTH AFRICA:Orange Free State:Viljoenskroon
+39:ZA:ZAF:SOUTH AFRICA:Orange Free State:Vrede
+40:ZA:ZAF:SOUTH AFRICA:Orange Free State:Vredefort
+41:ZA:ZAF:SOUTH AFRICA:Orange Free State:Wepener
+42:ZA:ZAF:SOUTH AFRICA:Orange Free State:Wessels Bron
+43:ZA:ZAF:SOUTH AFRICA:Orange Free State:Winburg
+44:ZA:ZAF:SOUTH AFRICA:Orange Free State:ZAF.L2.77
+45:ZA:ZAF:SOUTH AFRICA:Orange Free State:Zastron
+1:ZA:ZAF:SOUTH AFRICA:Western Cape:Beaufort West
+2:ZA:ZAF:SOUTH AFRICA:Western Cape:Belleville
+3:ZA:ZAF:SOUTH AFRICA:Western Cape:Bredasdorp
+4:ZA:ZAF:SOUTH AFRICA:Western Cape:Caledon
+5:ZA:ZAF:SOUTH AFRICA:Western Cape:Calitzdorp
+6:ZA:ZAF:SOUTH AFRICA:Western Cape:Cape
+7:ZA:ZAF:SOUTH AFRICA:Western Cape:Ceres
+8:ZA:ZAF:SOUTH AFRICA:Western Cape:Clanwillian
+9:ZA:ZAF:SOUTH AFRICA:Western Cape:George
+10:ZA:ZAF:SOUTH AFRICA:Western Cape:Goodwood
+11:ZA:ZAF:SOUTH AFRICA:Western Cape:Heidelberg
+12:ZA:ZAF:SOUTH AFRICA:Western Cape:Hermanus
+13:ZA:ZAF:SOUTH AFRICA:Western Cape:Hopefield
+14:ZA:ZAF:SOUTH AFRICA:Western Cape:Knysna
+15:ZA:ZAF:SOUTH AFRICA:Western Cape:Kuilsriver
+16:ZA:ZAF:SOUTH AFRICA:Western Cape:Ladismith
+17:ZA:ZAF:SOUTH AFRICA:Western Cape:Laingsburg
+18:ZA:ZAF:SOUTH AFRICA:Western Cape:Malmesbury
+19:ZA:ZAF:SOUTH AFRICA:Western Cape:Montagu
+20:ZA:ZAF:SOUTH AFRICA:Western Cape:Mossel Baai
+21:ZA:ZAF:SOUTH AFRICA:Western Cape:Murraysburg
+22:ZA:ZAF:SOUTH AFRICA:Western Cape:Oudtshoorn
+23:ZA:ZAF:SOUTH AFRICA:Western Cape:Paarl
+24:ZA:ZAF:SOUTH AFRICA:Western Cape:Piketberg
+25:ZA:ZAF:SOUTH AFRICA:Western Cape:Prince Albert
+26:ZA:ZAF:SOUTH AFRICA:Western Cape:Riversdale
+27:ZA:ZAF:SOUTH AFRICA:Western Cape:Robertson
+28:ZA:ZAF:SOUTH AFRICA:Western Cape:Simonstown
+29:ZA:ZAF:SOUTH AFRICA:Western Cape:Stellenbosch
+30:ZA:ZAF:SOUTH AFRICA:Western Cape:Strand
+31:ZA:ZAF:SOUTH AFRICA:Western Cape:Swellendam
+32:ZA:ZAF:SOUTH AFRICA:Western Cape:Tulbagh
+33:ZA:ZAF:SOUTH AFRICA:Western Cape:Uniondale
+34:ZA:ZAF:SOUTH AFRICA:Western Cape:Vanhynsdorp
+35:ZA:ZAF:SOUTH AFRICA:Western Cape:Vredenburg
+36:ZA:ZAF:SOUTH AFRICA:Western Cape:Vredendal
+37:ZA:ZAF:SOUTH AFRICA:Western Cape:Wellington
+38:ZA:ZAF:SOUTH AFRICA:Western Cape:Winberg
+39:ZA:ZAF:SOUTH AFRICA:Western Cape:Worcester
diff --git a/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN1_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN1_LEX.txt
new file mode 100644
index 0000000..2b5010f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN1_LEX.txt
@@ -0,0 +1,14 @@
+1:ZM-02:ZM:CENTRAL
+2:ZM-C3:ZM:CENTRAL3
+3:ZM-08:ZM:COPPERBELT
+4:ZM-03:ZM:EASTERN
+5:ZM-E4:ZM:EASTERN4
+6:ZM-04:ZM:LUAPULA
+7:ZM-09:ZM:LUSAKA
+8:ZM-06:ZM:NORTH WESTERN
+9:ZM-05:ZM:NORTHERN
+10:ZM-N4:ZM:NORTHERN4
+11:ZM-07:ZM:SOUTHERN
+12:ZM-S3:ZM:SOUTHERN3
+13:ZM-0:ZM:WESTERN
+14:ZM-W4:ZM:WESTERN4
diff --git a/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN2_LEX.txt b/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN2_LEX.txt
new file mode 100644
index 0000000..470025b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/sort/ZMB/ZMB_ADMIN2_LEX.txt
@@ -0,0 +1,57 @@
+1:ZM:ZMB:ZAMBIA:Southern:Choma
+2:ZM:ZMB:ZAMBIA:Southern:Gwembe
+3:ZM:ZMB:ZAMBIA:Southern:Kalomo
+4:ZM:ZMB:ZAMBIA:Southern:Livingstone
+5:ZM:ZMB:ZAMBIA:Southern:Mazabuka
+6:ZM:ZMB:ZAMBIA:Southern:Monze
+7:ZM:ZMB:ZAMBIA:Southern:Namwala
+8:ZM:ZMB:ZAMBIA:Southern:Siavonga
+9:ZM:ZMB:ZAMBIA:Southern:Sinazongwe
+1:ZM:ZMB:ZAMBIA:Copperbelt:Chililbombwe
+2:ZM:ZMB:ZAMBIA:Copperbelt:Chingola
+3:ZM:ZMB:ZAMBIA:Copperbelt:Kalulishi
+4:ZM:ZMB:ZAMBIA:Copperbelt:Kitwe
+5:ZM:ZMB:ZAMBIA:Copperbelt:Luanshya
+6:ZM:ZMB:ZAMBIA:Copperbelt:Mufulira
+7:ZM:ZMB:ZAMBIA:Copperbelt:Ndola Rural
+8:ZM:ZMB:ZAMBIA:Copperbelt:Ndola Urban
+1:ZM:ZMB:ZAMBIA:Luapula:Kawambwa
+2:ZM:ZMB:ZAMBIA:Luapula:Mansa
+3:ZM:ZMB:ZAMBIA:Luapula:Mwense
+4:ZM:ZMB:ZAMBIA:Luapula:Nchelenge
+5:ZM:ZMB:ZAMBIA:Luapula:Samfiya
+1:ZM:ZMB:ZAMBIA:Lusaka:Luangwa
+2:ZM:ZMB:ZAMBIA:Lusaka:Lusaka Rural
+3:ZM:ZMB:ZAMBIA:Lusaka:Lusaka Urban
+1:ZM:ZMB:ZAMBIA:Central:Kabwe Rural
+2:ZM:ZMB:ZAMBIA:Central:Kabwe Urban
+3:ZM:ZMB:ZAMBIA:Central:Mkushi
+4:ZM:ZMB:ZAMBIA:Central:Mumbwa
+5:ZM:ZMB:ZAMBIA:Central:Serenje
+1:ZM:ZMB:ZAMBIA:Western:Kalabo
+2:ZM:ZMB:ZAMBIA:Western:Kaoma
+3:ZM:ZMB:ZAMBIA:Western:Lukulu
+4:ZM:ZMB:ZAMBIA:Western:Mongu
+5:ZM:ZMB:ZAMBIA:Western:Senanga
+6:ZM:ZMB:ZAMBIA:Western:Sesheke
+1:ZM:ZMB:ZAMBIA:North Western:Kabompo
+2:ZM:ZMB:ZAMBIA:North Western:Kasempa
+3:ZM:ZMB:ZAMBIA:North Western:Mufumbwe
+4:ZM:ZMB:ZAMBIA:North Western:Mwinilunga
+5:ZM:ZMB:ZAMBIA:North Western:Solwezi
+6:ZM:ZMB:ZAMBIA:North Western:Zambezi
+1:ZM:ZMB:ZAMBIA:Northern:Chilubi
+2:ZM:ZMB:ZAMBIA:Northern:Chinsali
+3:ZM:ZMB:ZAMBIA:Northern:Isoka
+4:ZM:ZMB:ZAMBIA:Northern:Kaputa
+5:ZM:ZMB:ZAMBIA:Northern:Kasama
+6:ZM:ZMB:ZAMBIA:Northern:Luwingu
+7:ZM:ZMB:ZAMBIA:Northern:Mbala
+8:ZM:ZMB:ZAMBIA:Northern:Mpika
+9:ZM:ZMB:ZAMBIA:Northern:Mporokoso
+1:ZM:ZMB:ZAMBIA:Eastern:Chadiza
+2:ZM:ZMB:ZAMBIA:Eastern:Chama
+3:ZM:ZMB:ZAMBIA:Eastern:Chipata
+4:ZM:ZMB:ZAMBIA:Eastern:Katete
+5:ZM:ZMB:ZAMBIA:Eastern:Lundazi
+6:ZM:ZMB:ZAMBIA:Eastern:Petauke
diff --git a/org.eclipse.stem.utility/parameters/targets/AfricanCountries.txt b/org.eclipse.stem.utility/parameters/targets/AfricanCountries.txt
new file mode 100644
index 0000000..ea51b15
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/AfricanCountries.txt
@@ -0,0 +1,47 @@
+C:\diva\Africa\Algeria\Algeria.txt
+C:\diva\Africa\Angola\Angola.txt
+C:\diva\Africa\Benin\Benin.txt
+C:\diva\Africa\BurkinaFaso\BurkinaFaso.txt	
+C:\diva\Africa\Burundi\Burundi.txt	
+C:\diva\Africa\CapeVerde\CapeVerde.txt	
+C:\diva\Africa\CentralAfricanRepublic\Central
+C:\diva\Africa\Chad\Chad.txt
+C:\diva\Africa\Comoros\Comoros.txt
+C:\diva\Africa\Congo\Congo.txt
+C:\diva\Africa\Egypt\Egypt.txt
+C:\diva\Africa\EquatorialGuinea\EquatorialGuinea.txt
+C:\diva\Africa\Eritrea\Eritrea.txt
+C:\diva\Africa\Gabon\Gabon.txt
+C:\diva\Africa\Gambia\Gambia.txt
+C:\diva\Africa\Ghana\Ghana.txt
+#C:\diva\Africa\GloriosoIslands\GloriosoIslands.txt
+C:\diva\Africa\Guinea\Guinea.txt
+C:\diva\Africa\GuineaBissau\GuineaBissau.txt
+C:\diva\Africa\IvoryCoast\IvoryCoast.txt
+C:\diva\Africa\Kenya\Kenya.txt
+C:\diva\Africa\Lesotho\Lesotho.txt
+C:\diva\Africa\Liberia\Liberia.txt
+C:\diva\Africa\Libya\Libya.txt
+C:\diva\Africa\Madagascar\Madagascar.txt
+C:\diva\Africa\Malawi\Malawi.txt
+C:\diva\Africa\Mauritius\Mauritius.txt
+C:\diva\Africa\Morocco\Morocco.txt
+C:\diva\Africa\Mozambique\Mozambique.txt
+C:\diva\Africa\Namibia\Namibia.txt
+C:\diva\Africa\Niger\Niger.txt
+C:\diva\Africa\Nigeria\Nigeria.txt
+C:\diva\Africa\PapuaNewGuinea\PapuaNewGuinea.txt
+C:\diva\Africa\Rwanda\Rwanda.txt
+C:\diva\Africa\SaoTomePrincipe\SaoTomePrincipe.txt
+C:\diva\Africa\Senegal\Senegal.txt
+C:\diva\Africa\Seychelles\Seychelles.txt
+C:\diva\Africa\SierraLeone\SierraLeone.txt
+C:\diva\Africa\Somalia\Somalia.txt
+C:\diva\Africa\SouthAfrica\SouthAfrica.txt
+C:\diva\Africa\Sudan\Sudan.txt
+C:\diva\Africa\Tanzania\Tanzania.txt
+C:\diva\Africa\Togo\Togo.txt
+C:\diva\Africa\Tunisia\Tunisia.txt
+C:\diva\Africa\Uganda\Uganda.txt
+C:\diva\Africa\Zaire\Zaire.txt
+C:\diva\Africa\Zambia\Zambia.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/Countries.txt b/org.eclipse.stem.utility/parameters/targets/Countries.txt
new file mode 100644
index 0000000..fd9bbce
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/Countries.txt
@@ -0,0 +1,160 @@
+#MISSING COUNTRIES
+#C:\shapeFiles\canada\CanadaSorted.txt
+#C:\shapeFiles\Australia\AustraliaSorted.txt
+#C:\shapeFiles\Zaire\ZaireSorted.txt
+#C:\shapeFiles\Zimbabwe\ZimbabweSorted.txt
+#C:\shapeFiles\Belarus\BelarusSorted.txt
+#C:\shapeFiles\Belize\BelizeSorted.txt
+#C:\shapeFiles\Botswana\BotswanaSorted.txt
+#C:\shapeFiles\Cameroon\CameroonSorted.txt
+#C:\shapeFiles\CostaRica\CostaRicaSorted.txt
+#C:\shapeFiles\ElSalvador\ElSalvadorSorted.txt
+#C:\shapeFiles\Estonia\EstoniaSorted.txt
+#C:\shapeFiles\Ethiopia\EthiopiaSorted.txt
+#C:\shapeFiles\Guatemala\GuatemalaSorted.txt
+#C:\shapeFiles\Honduras\HondurasSorted.txt
+#C:\shapeFiles\Latvia\LatviaSorted.txt
+#C:\shapeFiles\Lithuania\LithuaniaSorted.txt
+#C:\shapeFiles\Mali\MaliSorted.txt
+#C:\shapeFiles\Mauritania\MauritaniaSorted.txt
+#C:\shapeFiles\Nicaragua\NicaraguaSorted.txt
+#C:\shapeFiles\Panama\PanamaSorted.txt
+C:\diva\Europe\ALBANIA\ALBANIA.txt
+C:\diva\Europe\ANDORRA\ANDORRA.txt
+C:\diva\Europe\AUSTRIA\AUSTRIA.txt
+C:\diva\Europe\BELGIUM\BELGIUM.txt
+C:\diva\Europe\BULGARIA\BULGARIA.txt
+C:\diva\Europe\BOSNIA AND HERZEGOVNIA\BOSNIA AND HERZEGOVINA.txt
+C:\diva\Europe\SWITZERLAND\SWITZERLAND.txt
+C:\diva\Europe\CZECH REPUBLIC\CZECH REPUBLIC.txt
+C:\diva\Europe\GERMANY\GERMANY.txt
+C:\diva\Europe\DENMARK\DENMARK.txt
+C:\diva\Europe\SPAIN\SPAIN.txt
+C:\diva\Europe\FINLAND\FINLAND.txt
+C:\diva\Europe\FRANCE\FRANCE.txt
+C:\diva\Europe\FAROE ISLANDS\FAROE ISLANDS.txt
+C:\diva\Europe\GREAT BRITAIN\GREAT BRITAIN.txt
+C:\diva\Europe\GREECE\GREECE.txt
+C:\diva\Europe\CROATIA\CROATIA.txt
+C:\diva\Europe\HUNGARY\HUNGARY.txt
+C:\diva\Europe\IRELAND\IRELAND.txt
+C:\diva\Europe\ICELAND\ICELAND.txt
+C:\diva\Europe\ITALY\ITALY.txt
+C:\diva\Europe\LIECHSTENSTEIN\LIECHSTENSTEIN.txt
+C:\diva\Europe\LUXEMBOURG\LUXEMBOURG.txt
+C:\diva\Europe\NETHERLANDS\NETHERLANDS.txt
+C:\diva\Europe\NORWAY\NORWAY.txt
+C:\diva\Europe\POLAND\POLAND.txt
+C:\diva\Europe\PORTUGAL\PORTUGAL.txt
+C:\diva\Europe\ROMANIA\ROMANIA.txt
+C:\diva\Europe\RUSSIA\RUSSIA.txt
+C:\diva\Europe\SAN MARINO\SAN MARINO.txt
+C:\diva\Europe\YUG\YUGOSLAVIA.txt
+C:\diva\Europe\SLOVENIA\SLOVENIA.txt
+C:\diva\Europe\SWEDEN\SWEDEN.txt
+C:\diva\Europe\UNITED KINGDOM\UNITED KINGDOM.txt
+C:\diva\Africa\Algeria\Algeria.txt
+C:\diva\Africa\Angola\Angola.txt
+C:\diva\Africa\Benin\Benin.txt
+C:\diva\Africa\BurkinaFaso\BurkinaFaso.txt	
+C:\diva\Africa\Burundi\Burundi.txt	
+C:\diva\Africa\CapeVerde\CapeVerde.txt	
+C:\diva\Africa\CentralAfricanRepublic\Central African Republic.txt
+C:\diva\Africa\Chad\Chad.txt
+C:\diva\Africa\Comoros\Comoros.txt
+C:\diva\Africa\Congo\Congo.txt
+C:\diva\Africa\Egypt\Egypt.txt
+C:\diva\Africa\EquatorialGuinea\EquatorialGuinea.txt
+C:\diva\Africa\Eritrea\Eritrea.txt
+C:\diva\Africa\Gabon\Gabon.txt
+C:\diva\Africa\Gambia\Gambia.txt
+C:\diva\Africa\Ghana\Ghana.txt
+C:\diva\Africa\Guinea\Guinea.txt
+C:\diva\Africa\GuineaBissau\GuineaBissau.txt
+C:\diva\Africa\IvoryCoast\IvoryCoast.txt
+C:\diva\Africa\Kenya\Kenya.txt
+C:\diva\Africa\Lesotho\Lesotho.txt
+C:\diva\Africa\Liberia\Liberia.txt
+C:\diva\Africa\Libya\Libya.txt
+C:\diva\Africa\Madagascar\Madagascar.txt
+C:\diva\Africa\Malawi\Malawi.txt
+C:\diva\Africa\Mauritius\Mauritius.txt
+C:\diva\Africa\Morocco\Morocco.txt
+C:\diva\Africa\Mozambique\Mozambique.txt
+C:\diva\Africa\Namibia\Namibia.txt
+C:\diva\Africa\Niger\Niger.txt
+C:\diva\Africa\Nigeria\Nigeria.txt
+C:\diva\Africa\PapuaNewGuinea\PapuaNewGuinea.txt
+C:\diva\Africa\Rwanda\Rwanda.txt
+C:\diva\Africa\SaoTomePrincipe\SaoTomePrincipe.txt
+C:\diva\Africa\Senegal\Senegal.txt
+C:\diva\Africa\Seychelles\Seychelles.txt
+C:\diva\Africa\SierraLeone\SierraLeone.txt
+C:\diva\Africa\Somalia\Somalia.txt
+C:\diva\Africa\SouthAfrica\SouthAfrica.txt
+C:\diva\Africa\Sudan\Sudan.txt
+C:\diva\Africa\Tanzania\Tanzania.txt
+C:\diva\Africa\Togo\Togo.txt
+C:\diva\Africa\Tunisia\Tunisia.txt
+C:\diva\Africa\Uganda\Uganda.txt
+C:\diva\Africa\Zambia\Zambia.txt
+C:\diva\MidEast\Bahrain\Bahrain.txt
+C:\diva\MidEast\Irak\Irak.txt
+C:\diva\MidEast\Iran\Iran.txt
+C:\diva\MidEast\Jordan\Jordan.txt
+C:\diva\MidEast\Kuwait\Kuwait.txt
+C:\diva\MidEast\Lebanon\Lebanon.txt
+C:\diva\MidEast\Oman\Oman.txt
+C:\diva\MidEast\Qatar\Qatar.txt
+C:\diva\MidEast\SaudiArabia\SaudiArabia.txt
+C:\diva\MidEast\Syria\Syria.txt
+C:\diva\MidEast\UnitedArabEmirates\UnitedArabEmirates.txt
+C:\diva\MidEast\Yemen\Yemen.txt
+C:\diva\RestOfAsia\Afghanistan\Afghanistan.txt
+C:\diva\RestOfAsia\Armenia\Armenia.txt
+C:\diva\RestOfAsia\Azerbaijan\Azerbaijan.txt
+C:\diva\RestOfAsia\Kazakhstan\Kazakhstan.txt
+C:\diva\RestOfAsia\Kyrgyzstan\Kyrgyzstan.txt
+C:\diva\RestOfAsia\Mongolia\Mongolia.txt
+C:\diva\RestOfAsia\Pakistan\Pakistan.txt
+C:\diva\RestOfAsia\Tajikistan\Tajikistan.txt
+C:\diva\RestOfAsia\Turkey\Turkey.txt
+C:\diva\RestOfAsia\Turkmenistan\Turkmenistan.txt
+C:\diva\RestOfAsia\Uzbekistan\Uzbekistan.txt
+C:\diva\NorthAmerica\Mexico\Mexico.txt
+C:\diva\NorthAmerica\USA\USA_GROUPED.txt
+C:\diva\NorthAmerica\PuertoRico\PuertoRico.txt
+C:\diva\SouthAmerica\Argentina\Argentina.txt
+C:\diva\SouthAmerica\Bolivia\Bolivia.txt
+C:\diva\SouthAmerica\Brazil\Brazil.txt
+C:\diva\SouthAmerica\Chile\Chile.txt
+C:\diva\SouthAmerica\Colombia\Colombia.txt
+C:\diva\SouthAmerica\Ecuador\Ecuador.txt
+C:\diva\SouthAmerica\Guyana\Guyana.txt
+C:\diva\SouthAmerica\Paraguay\Paraguay.txt
+C:\diva\SouthAmerica\Peru\Peru.txt
+C:\diva\SouthAmerica\Suriname\Suriname.txt
+C:\diva\SouthAmerica\Uruguay\Uruguay.txt
+C:\diva\SouthAmerica\Venezuela\Venezuela.txt
+C:\diva\SouthAsia\Bangladesh\Bangladesh.txt
+C:\diva\SouthAsia\Bhutan\Bhutan.txt
+C:\diva\SouthAsia\Brunei\Brunei.txt
+C:\diva\SouthAsia\Cambodia\Cambodia.txt
+C:\diva\SouthAsia\China\China.txt
+C:\diva\SouthAsia\India\India.txt
+C:\diva\SouthAsia\Indonesia\Indonesia.txt
+C:\diva\SouthAsia\Japan\Japan.txt
+C:\diva\SouthAsia\Laos\Laos.txt
+C:\diva\SouthAsia\Macau\Macau.txt
+C:\diva\SouthAsia\Nepal\Nepal.txt
+C:\diva\SouthAsia\NorthKorea\NorthKorea.txt
+C:\diva\SouthAsia\Philippines\Philippines.txt
+C:\diva\SouthAsia\Singapore\Singapore.txt
+C:\diva\SouthAsia\SouthKorea\SouthKorea.txt
+C:\diva\SouthAsia\Thailand\Thailand.txt
+C:\diva\SouthAsia\Vietnam\Vietnam.txt
+
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/targets/CountriesLight.txt b/org.eclipse.stem.utility/parameters/targets/CountriesLight.txt
new file mode 100644
index 0000000..6ba6f27
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/CountriesLight.txt
@@ -0,0 +1,184 @@
+#MISSING COUNTRIES
+#C:\shapeFiles\canada\CanadaSorted.txt
+#C:\shapeFiles\Australia\AustraliaSorted.txt
+#C:\shapeFiles\Zaire\ZaireSorted.txt
+#C:\shapeFiles\Zimbabwe\ZimbabweSorted.txt
+#C:\shapeFiles\Belarus\BelarusSorted.txt
+#C:\shapeFiles\Belize\BelizeSorted.txt
+#C:\shapeFiles\Botswana\BotswanaSorted.txt
+#C:\shapeFiles\Cameroon\CameroonSorted.txt
+#C:\shapeFiles\CostaRica\CostaRicaSorted.txt
+#C:\shapeFiles\ElSalvador\ElSalvadorSorted.txt
+#C:\shapeFiles\Estonia\EstoniaSorted.txt
+#C:\shapeFiles\Ethiopia\EthiopiaSorted.txt
+#C:\shapeFiles\Guatemala\GuatemalaSorted.txt
+#C:\shapeFiles\Honduras\HondurasSorted.txt
+#C:\shapeFiles\Latvia\LatviaSorted.txt
+#C:\shapeFiles\Lithuania\LithuaniaSorted.txt
+#C:\shapeFiles\Mali\MaliSorted.txt
+#C:\shapeFiles\Mauritania\MauritaniaSorted.txt
+#C:\shapeFiles\Nicaragua\NicaraguaSorted.txt
+#C:\shapeFiles\Panama\PanamaSorted.txt
+# EUROPE
+C:\diva\Europe\ALBANIA\ALBANIA.txt
+C:\diva\Europe\ANDORRA\ANDORRA.txt
+#C:\diva\Europe\AUSTRIA\AUSTRIA.txt
+#C:\diva\Europe\BELGIUM\BELGIUM.txt
+#C:\diva\Europe\BULGARIA\BULGARIA.txt
+#C:\diva\Europe\BOSNIA AND HERZEGOVINA\BOSNIA AND HERZEGOVINA.txt
+#C:\diva\Europe\SWITZERLAND\SWITZERLAND.txt
+#C:\diva\Europe\CZECH REPUBLIC\CZECH REPUBLIC.txt
+#C:\diva\Europe\GERMANY\GERMANY.txt
+#C:\diva\Europe\DENMARK\DENMARK.txt
+#C:\diva\Europe\SPAIN\SPAIN.txt
+#C:\diva\Europe\FINLAND\FINLAND.txt
+#C:\diva\Europe\FRANCE\FRANCE.txt
+##C:\diva\Europe\FAROE ISLANDS\FAROE ISLANDS.txt
+##C:\diva\Europe\GREAT BRITAIN\GREAT BRITAIN.txt
+#C:\diva\Europe\GREECE\GREECE.txt
+#C:\diva\Europe\CROATIA\CROATIA.txt
+#C:\diva\Europe\HUNGARY\HUNGARY.txt
+#C:\diva\Europe\IRELAND\IRELAND.txt
+#C:\diva\Europe\ICELAND\ICELAND.txt
+#C:\diva\Europe\ITALY\ITALY.txt
+#C:\diva\Europe\LIECHSTENSTEIN\LIECHSTENSTEIN.txt
+#C:\diva\Europe\LUXEMBOURG\LUXEMBOURG.txt
+#C:\diva\Europe\NETHERLANDS\NETHERLANDS.txt
+#C:\diva\Europe\NORWAY\NORWAY.txt
+#C:\diva\Europe\POLAND\POLAND.txt
+#C:\diva\Europe\PORTUGAL\PORTUGAL.txt
+#C:\diva\Europe\ROMANIA\ROMANIA.txt
+#C:\diva\grouped\RUS\RUS_GROUPED.txt
+#C:\diva\Europe\SAN MARINO\SAN MARINO.txt
+#C:\diva\Europe\YUGOSLAVIA\YUGOSLAVIA.txt
+#C:\diva\Europe\SLOVENIA\SLOVENIA.txt
+#C:\diva\Europe\SWEDEN\SWEDEN.txt
+#C:\diva\Europe\UNITED KINGDOM\UNITED KINGDOM.txt
+##C:\diva\RestOfAsia\Afghanistan\Afghanistan.txt
+##C:\diva\RestOfAsia\Armenia\Armenia.txt
+##C:\diva\Africa\Algeria\Algeria.txt
+##C:\diva\Africa\Angola\Angola.txt
+##C:\diva\Africa\Uganda\Uganda.txt
+##C:\diva\MidEast\Irak\Irak.txt
+##C:\diva\MidEast\Iran\Iran.txt
+#C:\diva\NorthAmerica\Mexico\Mexico.txt
+##C:\diva\SouthAmerica\Brazil\Brazil.txt
+##C:\diva\SouthAmerica\Argentina\Argentina.txt
+##C:\diva\SouthAmerica\Bolivia\Bolivia.txt
+##C:\diva\SouthAmerica\Uruguay\Uruguay.txt
+##C:\diva\SouthAmerica\Venezuela\Venezuela.txt
+##C:\diva\SouthAsia\Japan\Japan.txt
+##C:\diva\SouthAsia\Laos\Laos.txt
+##C:\diva\SouthAsia\Vietnam\Vietnam.txt
+# ALL OF AFRICA
+##C:\diva\Africa\Algeria\Algeria.txt
+##C:\diva\Africa\Angola\Angola.txt
+##C:\diva\Africa\Benin\Benin.txt
+##C:\diva\Africa\BurkinaFaso\BurkinaFaso.txt	
+##C:\diva\Africa\Burundi\Burundi.txt	
+##C:\diva\Africa\CapeVerde\CapeVerde.txt	
+##C:\diva\Africa\CentralAfricanRepublic\Central
+##C:\diva\Africa\Chad\Chad.txt
+##C:\diva\Africa\Comoros\Comoros.txt
+##C:\diva\Africa\Congo\Congo.txt
+##C:\diva\Africa\Egypt\Egypt.txt
+##C:\diva\Africa\EquatorialGuinea\EquatorialGuinea.txt
+##C:\diva\Africa\Eritrea\Eritrea.txt
+##C:\diva\Africa\Gabon\Gabon.txt
+##C:\diva\Africa\Gambia\Gambia.txt
+##C:\diva\Africa\Ghana\Ghana.txt
+###C:\diva\Africa\GloriosoIslands\GloriosoIslands.txt
+##C:\diva\Africa\Guinea\Guinea.txt
+##C:\diva\Africa\GuineaBissau\GuineaBissau.txt
+##C:\diva\Africa\IvoryCoast\IvoryCoast.txt
+##C:\diva\Africa\Kenya\Kenya.txt
+##C:\diva\Africa\Lesotho\Lesotho.txt
+##C:\diva\Africa\Liberia\Liberia.txt
+##C:\diva\Africa\Libya\Libya.txt
+##C:\diva\Africa\Madagascar\Madagascar.txt
+##C:\diva\Africa\Malawi\Malawi.txt
+#C:\diva\Africa\Mali\Mali.txt
+##C:\diva\Africa\Mauritius\Mauritius.txt
+##C:\diva\Africa\Morocco\Morocco.txt
+##C:\diva\Africa\Mozambique\Mozambique.txt
+##C:\diva\Africa\Namibia\Namibia.txt
+##C:\diva\Africa\Niger\Niger.txt
+##C:\diva\Africa\Nigeria\Nigeria.txt
+##C:\diva\Africa\PapuaNewGuinea\PapuaNewGuinea.txt
+##C:\diva\Africa\Rwanda\Rwanda.txt
+##C:\diva\Africa\SaoTomePrincipe\SaoTomePrincipe.txt
+##C:\diva\Africa\Senegal\Senegal.txt
+##C:\diva\Africa\Seychelles\Seychelles.txt
+##C:\diva\Africa\SierraLeone\SierraLeone.txt
+##C:\diva\Africa\Somalia\Somalia.txt
+##C:\diva\Africa\SouthAfrica\SouthAfrica.txt
+##C:\diva\Africa\Sudan\Sudan.txt
+##C:\diva\Africa\Tanzania\Tanzania.txt
+##C:\diva\Africa\Togo\Togo.txt
+##C:\diva\Africa\Tunisia\Tunisia.txt
+##C:\diva\Africa\Uganda\Uganda.txt
+###C:\diva\Africa\Zaire\Zaire.txt
+##C:\diva\Africa\Zambia\Zambia.txt
+# REST OF ASIA
+##C:\diva\RestOfAsia\Afghanistan\Afghanistan.txt
+##C:\diva\RestOfAsia\Armenia\Armenia.txt
+##C:\diva\RestOfAsia\Azerbaijan\Azerbaijan.txt
+##C:\diva\RestOfAsia\Kazakhstan\Kazakhstan.txt
+##C:\diva\RestOfAsia\Kyrgyzstan\Kyrgyzstan.txt
+###C:\diva\RestOfAsia\Macedonia\Macedonia.txt
+##C:\diva\RestOfAsia\Moldova\Moldova.txt
+##C:\diva\RestOfAsia\Mongolia\Mongolia.txt
+#C:\diva\RestOfAsia\Pakistan\Pakistan.txt
+##C:\diva\RestOfAsia\Tajikistan\Tajikistan.txt
+##C:\diva\RestOfAsia\Turkey\Turkey.txt
+##C:\diva\RestOfAsia\Turkmenistan\Turkmenistan.txt
+##C:\diva\RestOfAsia\Uzbekistan\Uzbekistan.txt
+# MID EAST REGION
+##C:\diva\MidEast\Bahrain\Bahrain.txt
+##C:\diva\MidEast\Irak\Irak.txt
+##C:\diva\MidEast\Iran\Iran.txt
+##C:\diva\MidEast\Jordan\Jordan.txt
+##C:\diva\MidEast\Kuwait\Kuwait.txt
+##C:\diva\MidEast\Lebanon\Lebanon.txt
+##C:\diva\MidEast\Oman\Oman.txt
+##C:\diva\MidEast\Qatar\Qatar.txt
+##C:\diva\MidEast\SaudiArabia\SaudiArabia.txt
+##C:\diva\MidEast\Syria\Syria.txt
+##C:\diva\MidEast\UnitedArabEmirates\UnitedArabEmirates.txt
+##C:\diva\MidEast\Yemen\Yemen.txt
+# NORTH AND SOUTH AMERICA
+#C:\diva\NorthAmerica\Mexico\Mexico.txt
+##C:\diva\NorthAmerica\USA\USA.txt
+#C:\diva\NorthAmerica\PuertoRico\PuertoRico.txt
+##C:\diva\SouthAmerica\Argentina\Argentina.txt
+##C:\diva\SouthAmerica\Bolivia\Bolivia.txt
+##C:\diva\SouthAmerica\Brazil\Brazil.txt
+##C:\diva\SouthAmerica\Chile\Chile.txt
+##C:\diva\SouthAmerica\Colombia\Colombia.txt
+##C:\diva\SouthAmerica\Ecuador\Ecuador.txt
+###C:\diva\SouthAmerica\FaulklandIslands\FaulklandIslands.txt
+##C:\diva\SouthAmerica\Guyana\Guyana.txt
+##C:\diva\SouthAmerica\Paraguay\Paraguay.txt
+##C:\diva\SouthAmerica\Peru\Peru.txt
+##C:\diva\SouthAmerica\Suriname\Suriname.txt
+##C:\diva\SouthAmerica\Uruguay\Uruguay.txt
+##C:\diva\SouthAmerica\Venezuela\Venezuela.txt
+# SOUTH ASIA
+##C:\diva\SouthAsia\Bangladesh\Bangladesh.txt
+##C:\diva\SouthAsia\Bhutan\Bhutan.txt
+##C:\diva\SouthAsia\Brunei\Brunei.txt
+##C:\diva\SouthAsia\Cambodia\Cambodia.txt
+##C:\diva\SouthAsia\China\China.txt
+##C:\diva\SouthAsia\India\India.txt
+##C:\diva\SouthAsia\Indonesia\Indonesia.txt
+##C:\diva\SouthAsia\Japan\Japan.txt
+##C:\diva\SouthAsia\Laos\Laos.txt
+##C:\diva\SouthAsia\Macau\Macau.txt
+###C:\diva\SouthAsia\Myanmar\Myanmar.txt
+##C:\diva\SouthAsia\Nepal\Nepal.txt
+##C:\diva\SouthAsia\NorthKorea\NorthKorea.txt
+##C:\diva\SouthAsia\Philippines\Philippines.txt
+##C:\diva\SouthAsia\Singapore\Singapore.txt
+##C:\diva\SouthAsia\SouthKorea\SouthKorea.txt
+##C:\diva\SouthAsia\Thailand\Thailand.txt
+##C:\diva\SouthAsia\Vietnam\Vietnam.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/EuropeCountries.txt b/org.eclipse.stem.utility/parameters/targets/EuropeCountries.txt
new file mode 100644
index 0000000..ebd5e06
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/EuropeCountries.txt
@@ -0,0 +1,42 @@
+#UNCOMMENT THE NEXT SINGLE LINE ONLY BEFORE RUN EuropeDataCleaner :
+#C:\EuropeData2007\EuropeUN\UNdataShp\Europe.txt
+#UNCOMMENT THE NEXT SINGLE LINE ONLY BEFORE RUN EuropeDataFormatter :
+#C:\EuropeData2007\EuropeUN\UNdataShp\EuropeSorted2.txt
+#UNCOMMENT THE NEXT SINGLE LINE ONLY BEFORE RUN RussiaDataCleaner :
+#C:\EuropeData2007\Russia\Russia.txt
+#UNCOMMENT THE NEXT SINGLE LINE ONLY BEFORE RUN RussiaDataConverter AND RussiaDataExtractor :
+C:\EuropeData2007\Russia\RussiaSorted.txt
+#UNCOMMENT ALL THE FOLLOWING LINES BEFORE RUNNING EuropeDataExtractor, COMMENT OTHERWISE :
+##C:\stemII\org.eclipse.stem.utility\dataMigration\output\ALB\ALB.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\AND\AND.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\AUT\AUT.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\BEL\BEL.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\BGR\BGR.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\BIH\BIH.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\CHE\CHE.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\CZE\CZE.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\DEU\DEU.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\DNK\DNK.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\ESP\ESP.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\FIN\FIN.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\FRA\FRA.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\FRO\FRO.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\GBR\GBR.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\GRC\GRC.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\HRV\HRV.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\HUN\HUN.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\IRL\IRL.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\ISL\ISL.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\ITA\ITA.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\LIE\LIE.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\LUX\LUX.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\NLD\NLD.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\NOR\NOR.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\POL\POL.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\PRT\PRT.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\ROU\ROU.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\RUS\RUS.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\SMR\SMR.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\SRB\SRB.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\SVN\SVN.txt
+#C:\stemII\org.eclipse.stem.utility\dataMigration\output\SWE\SWE.txt
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/targets/EuropeNames.txt b/org.eclipse.stem.utility/parameters/targets/EuropeNames.txt
new file mode 100644
index 0000000..8a543a3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/EuropeNames.txt
@@ -0,0 +1,2557 @@
+2	:	Finnmark
+3	:	Finnmark
+4	:	Finnmark
+5	:	Finnmark
+6	:	Finnmark
+7	:	Finnmark
+8	:	Finnmark
+9	:	Lappi/Lappland
+10	:	Finnmark
+11	:	Troms
+12	:	Troms
+13	:	Troms
+14	:	Troms
+15	:	Troms
+16	:	Troms
+17	:	Troms
+18	:	Troms
+19	:	Troms
+20	:	Troms
+21	:	Troms
+22	:	Troms
+23	:	Troms
+24	:	Nordland
+25	:	Norrbotten
+26	:	Island
+27	:	Troms
+28	:	Nordland
+29	:	Nordland
+30	:	Troms
+31	:	Nordland
+32	:	Nordland
+33	:	Troms
+34	:	Nordland
+35	:	Nordland
+36	:	Nordland
+37	:	Nordland
+38	:	Island
+39	:	Nordland
+40	:	Oulu/Uleaborg
+41	:	Nordland
+42	:	Nordland
+43	:	Nordland
+44	:	Nordland
+45	:	Lappi/Lappland
+46	:	Nordland
+47	:	V„sterbotten
+48	:	Norrbotten
+49	:	Nordland
+50	:	Nordland
+51	:	Norrbotten
+52	:	Norrbotten
+53	:	Nordland
+54	:	Nordland
+55	:	Norrbotten
+56	:	Island
+57	:	Nordland
+58	:	Norrbotten
+59	:	Norrbotten
+60	:	Island
+61	:	Norrbotten
+62	:	Norrbotten
+63	:	Norrbotten
+64	:	Norrbotten
+65	:	Norrbotten
+66	:	Oulu/Uleaborg
+67	:	Norrbotten
+68	:	Nordland
+69	:	Norrbotten
+70	:	Nordland
+71	:	Nord-Troendelag
+72	:	J„mtland
+73	:	Pohjois-Karjala/Norra-Karelen
+74	:	Nordland
+75	:	Kuopio
+76	:	Vaasa/Vasa
+77	:	Soer-Troendelag
+78	:	Keski-Suomi/Mellersta-Finland
+79	:	V„sterbotten
+80	:	V„sternorrland
+81	:	Mikkeli/St Michel
+82	:	Soer-Troendelag
+83	:	Soer-Troendelag
+84	:	Soer-Troendelag
+85	:	Soer-Troendelag
+86	:	Soer-Troendelag
+87	:	V„sternorrland
+88	:	Soer-Troendelag
+89	:	Soer-Troendelag
+90	:	Moere og Romsdal
+91	:	Moere og Romsdal
+92	:	Moere og Romsdal
+93	:	Kymi/Kymmene
+94	:	Moere og Romsdal
+95	:	Soer-Troendelag
+96	:	H„me/Tavastehus
+97	:	Moere og Romsdal
+98	:	Moere og Romsdal
+99	:	V„sternorrland
+100	:	V„sternorrland
+101	:	V„sternorrland
+102	:	V„sternorrland
+103	:	Turku-Pori/Abo-Bj”rneborg
+104	:	Moere og Romsdal
+105	:	Moere og Romsdal
+106	:	Moere og Romsdal
+107	:	Moere og Romsdal
+108	:	Moere og Romsdal
+109	:	V„sternorrland
+110	:	Hedmark
+111	:	Moere og Romsdal
+112	:	Moere og Romsdal
+113	:	Moere og Romsdal
+114	:	Moere og Romsdal
+115	:	Moere og Romsdal
+116	:	Vaasa/Vasa
+117	:	Vaasa/Vasa
+118	:	G„vleborg
+119	:	Moere og Romsdal
+120	:	Moere og Romsdal
+121	:	Moere og Romsdal
+122	:	Vaasa/Vasa
+123	:	Vaasa/Vasa
+124	:	Moere og Romsdal
+125	:	Oppland
+126	:	Turku-Pori/Abo-Bj”rneborg
+127	:	Kopparberg
+128	:	Moere og Romsdal
+129	:	Turku-Pori/Abo-Bj”rneborg
+130	:	Moere og Romsdal
+131	:	Turku-Pori/Abo-Bj”rneborg
+132	:	Sogn og Fjordane
+133	:	Turku-Pori/Abo-Bj”rneborg
+134	:	Turku-Pori/Abo-Bj”rneborg
+135	:	Turku-Pori/Abo-Bj”rneborg
+136	:	Turku-Pori/Abo-Bj”rneborg
+137	:	Turku-Pori/Abo-Bj”rneborg
+138	:	Turku-Pori/Abo-Bj”rneborg
+139	:	Turku-Pori/Abo-Bj”rneborg
+140	:	Turku-Pori/Abo-Bj”rneborg
+141	:	Turku-Pori/Abo-Bj”rneborg
+142	:	Turku-Pori/Abo-Bj”rneborg
+143	:	Turku-Pori/Abo-Bj”rneborg
+144	:	Turku-Pori/Abo-Bj”rneborg
+145	:	Turku-Pori/Abo-Bj”rneborg
+146	:	Sogn og Fjordane
+147	:	Turku-Pori/Abo-Bj”rneborg
+148	:	Turku-Pori/Abo-Bj”rneborg
+149	:	Turku-Pori/Abo-Bj”rneborg
+150	:	Turku-Pori/Abo-Bj”rneborg
+151	:	Turku-Pori/Abo-Bj”rneborg
+152	:	Turku-Pori/Abo-Bj”rneborg
+153	:	Turku-Pori/Abo-Bj”rneborg
+154	:	Turku-Pori/Abo-Bj”rneborg
+155	:	Turku-Pori/Abo-Bj”rneborg
+156	:	Turku-Pori/Abo-Bj”rneborg
+157	:	Turku-Pori/Abo-Bj”rneborg
+158	:	Turku-Pori/Abo-Bj”rneborg
+159	:	Sogn og Fjordane
+160	:	Sogn og Fjordane
+161	:	Turku-Pori/Abo-Bj”rneborg
+162	:	Turku-Pori/Abo-Bj”rneborg
+163	:	Sogn og Fjordane
+164	:	Sogn og Fjordane
+165	:	Sogn og Fjordane
+166	:	Sogn og Fjordane
+167	:	Uudenmaa/Nyland
+168	:	Sogn og Fjordane
+169	:	Sogn og Fjordane
+170	:	Sogn og Fjordane
+171	:	Turku-Pori/Abo-Bj”rneborg
+172	:	Sogn og Fjordane
+173	:	Turku-Pori/Abo-Bj”rneborg
+174	:	Turku-Pori/Abo-Bj”rneborg
+175	:	Turku-Pori/Abo-Bj”rneborg
+176	:	Turku-Pori/Abo-Bj”rneborg
+177	:	Turku-Pori/Abo-Bj”rneborg
+178	:	Turku-Pori/Abo-Bj”rneborg
+179	:	Turku-Pori/Abo-Bj”rneborg
+180	:	Turku-Pori/Abo-Bj”rneborg
+181	:	Turku-Pori/Abo-Bj”rneborg
+182	:	Turku-Pori/Abo-Bj”rneborg
+183	:	Sogn og Fjordane
+184	:	Turku-Pori/Abo-Bj”rneborg
+185	:	Kymi/Kymmene
+186	:	Kymi/Kymmene
+187	:	Turku-Pori/Abo-Bj”rneborg
+188	:	Kymi/Kymmene
+189	:	Kymi/Kymmene
+190	:	Kymi/Kymmene
+191	:	Sogn og Fjordane
+192	:	Kymi/Kymmene
+193	:	Kymi/Kymmene
+194	:	Kymi/Kymmene
+195	:	Kymi/Kymmene
+196	:	Kymi/Kymmene
+197	:	Kymi/Kymmene
+198	:	Kymi/Kymmene
+199	:	Kymi/Kymmene
+200	:	Kymi/Kymmene
+201	:	Kymi/Kymmene
+202	:	Kymi/Kymmene
+203	:	Sogn og Fjordane
+204	:	Kymi/Kymmene
+205	:	Kymi/Kymmene
+206	:	Kymi/Kymmene
+207	:	Kymi/Kymmene
+208	:	Kymi/Kymmene
+209	:	Kymi/Kymmene
+210	:	Kymi/Kymmene
+211	:	Kymi/Kymmene
+212	:	Kymi/Kymmene
+213	:	Kymi/Kymmene
+214	:	Kymi/Kymmene
+215	:	Kymi/Kymmene
+216	:	Sogn og Fjordane
+217	:	Kymi/Kymmene
+218	:	Kymi/Kymmene
+219	:	Kymi/Kymmene
+220	:	Kymi/Kymmene
+221	:	Kymi/Kymmene
+222	:	Kymi/Kymmene
+223	:	Kymi/Kymmene
+224	:	Kymi/Kymmene
+225	:	Kymi/Kymmene
+226	:	Kymi/Kymmene
+227	:	Kymi/Kymmene
+228	:	Kymi/Kymmene
+229	:	Kymi/Kymmene
+230	:	Kymi/Kymmene
+231	:	Kymi/Kymmene
+232	:	Kymi/Kymmene
+233	:	Kymi/Kymmene
+234	:	Kymi/Kymmene
+235	:	Kymi/Kymmene
+236	:	Kymi/Kymmene
+237	:	Kymi/Kymmene
+238	:	Turku-Pori/Abo-Bj”rneborg
+239	:	Kymi/Kymmene
+240	:	Kymi/Kymmene
+241	:	Kymi/Kymmene
+242	:	Kymi/Kymmene
+243	:	Kymi/Kymmene
+244	:	Kymi/Kymmene
+245	:	Turku-Pori/Abo-Bj”rneborg
+246	:	Uudenmaa/Nyland
+247	:	Kymi/Kymmene
+248	:	Turku-Pori/Abo-Bj”rneborg
+249	:	Sogn og Fjordane
+250	:	Kymi/Kymmene
+251	:	Uudenmaa/Nyland
+252	:	Uudenmaa/Nyland
+253	:	Kymi/Kymmene
+254	:	Kymi/Kymmene
+255	:	Turku-Pori/Abo-Bj”rneborg
+256	:	Sogn og Fjordane
+257	:	Kymi/Kymmene
+258	:	Kymi/Kymmene
+259	:	Uudenmaa/Nyland
+260	:	Kymi/Kymmene
+261	:	Kymi/Kymmene
+262	:	Uudenmaa/Nyland
+263	:	Turku-Pori/Abo-Bj”rneborg
+264	:	Uudenmaa/Nyland
+265	:	Kymi/Kymmene
+266	:	Kymi/Kymmene
+267	:	G„vleborg
+268	:	Sogn og Fjordane
+269	:	Turku-Pori/Abo-Bj”rneborg
+270	:	Uudenmaa/Nyland
+271	:	Uudenmaa/Nyland
+272	:	Kymi/Kymmene
+273	:	Kymi/Kymmene
+274	:	Uudenmaa/Nyland
+275	:	Kymi/Kymmene
+276	:	Uudenmaa/Nyland
+277	:	Sogn og Fjordane
+278	:	Uudenmaa/Nyland
+279	:	Kymi/Kymmene
+280	:	Uudenmaa/Nyland
+281	:	Uudenmaa/Nyland
+282	:	Turku-Pori/Abo-Bj”rneborg
+283	:	Uudenmaa/Nyland
+284	:	Uudenmaa/Nyland
+285	:	Kymi/Kymmene
+286	:	Turku-Pori/Abo-Bj”rneborg
+287	:	Uudenmaa/Nyland
+288	:	Turku-Pori/Abo-Bj”rneborg
+289	:	Kymi/Kymmene
+290	:	Uudenmaa/Nyland
+291	:	Uudenmaa/Nyland
+292	:	Uudenmaa/Nyland
+293	:	Turku-Pori/Abo-Bj”rneborg
+294	:	Uudenmaa/Nyland
+295	:	Kymi/Kymmene
+296	:	Uudenmaa/Nyland
+297	:	Uudenmaa/Nyland
+298	:	Uudenmaa/Nyland
+299	:	Uudenmaa/Nyland
+300	:	Uudenmaa/Nyland
+301	:	Turku-Pori/Abo-Bj”rneborg
+302	:	Uudenmaa/Nyland
+303	:	Uudenmaa/Nyland
+304	:	Turku-Pori/Abo-Bj”rneborg
+305	:	Turku-Pori/Abo-Bj”rneborg
+306	:	Uudenmaa/Nyland
+307	:	Turku-Pori/Abo-Bj”rneborg
+308	:	Turku-Pori/Abo-Bj”rneborg
+309	:	Uudenmaa/Nyland
+310	:	Sogn og Fjordane
+311	:	G„vleborg
+312	:	Turku-Pori/Abo-Bj”rneborg
+313	:	Uudenmaa/Nyland
+314	:	Sogn og Fjordane
+315	:	G„vleborg
+316	:	Uudenmaa/Nyland
+317	:	Uudenmaa/Nyland
+318	:	Uudenmaa/Nyland
+319	:	Turku-Pori/Abo-Bj”rneborg
+320	:	Turku-Pori/Abo-Bj”rneborg
+321	:	Turku-Pori/Abo-Bj”rneborg
+322	:	Uudenmaa/Nyland
+323	:	Sogn og Fjordane
+324	:	Uudenmaa/Nyland
+325	:	Turku-Pori/Abo-Bj”rneborg
+326	:	Uudenmaa/Nyland
+327	:	Uudenmaa/Nyland
+328	:	Uudenmaa/Nyland
+329	:	Uudenmaa/Nyland
+330	:	Uudenmaa/Nyland
+331	:	Uudenmaa/Nyland
+332	:	Uudenmaa/Nyland
+333	:	Uudenmaa/Nyland
+334	:	Uudenmaa/Nyland
+335	:	Turku-Pori/Abo-Bj”rneborg
+336	:	HIGHLANDS
+337	:	Uudenmaa/Nyland
+338	:	Uudenmaa/Nyland
+339	:	Uudenmaa/Nyland
+340	:	G„vleborg
+341	:	Uudenmaa/Nyland
+342	:	Uudenmaa/Nyland
+343	:	Sogn og Fjordane
+344	:	Uudenmaa/Nyland
+345	:	HIGHLANDS
+346	:	Uudenmaa/Nyland
+347	:	Uudenmaa/Nyland
+348	:	Uudenmaa/Nyland
+349	:	Uudenmaa/Nyland
+350	:	Uudenmaa/Nyland
+351	:	Uudenmaa/Nyland
+352	:	Sogn og Fjordane
+353	:	Uudenmaa/Nyland
+354	:	Uudenmaa/Nyland
+355	:	Uudenmaa/Nyland
+356	:	Uudenmaa/Nyland
+357	:	Uudenmaa/Nyland
+358	:	Uudenmaa/Nyland
+359	:	Turku-Pori/Abo-Bj”rneborg
+360	:	Uudenmaa/Nyland
+361	:	Uudenmaa/Nyland
+362	:	Uudenmaa/Nyland
+363	:	Uudenmaa/Nyland
+364	:	Uudenmaa/Nyland
+365	:	Uudenmaa/Nyland
+366	:	Uudenmaa/Nyland
+367	:	Turku-Pori/Abo-Bj”rneborg
+368	:	Uudenmaa/Nyland
+369	:	Uudenmaa/Nyland
+370	:	Turku-Pori/Abo-Bj”rneborg
+371	:	Turku-Pori/Abo-Bj”rneborg
+372	:	V„rmland
+373	:	Uudenmaa/Nyland
+374	:	Uudenmaa/Nyland
+375	:	Uudenmaa/Nyland
+376	:	Uudenmaa/Nyland
+377	:	Sogn og Fjordane
+378	:	Uudenmaa/Nyland
+379	:	Buskerud
+380	:	Turku-Pori/Abo-Bj”rneborg
+381	:	Uudenmaa/Nyland
+382	:	Turku-Pori/Abo-Bj”rneborg
+383	:	Uudenmaa/Nyland
+384	:	HIGHLANDS
+385	:	Uudenmaa/Nyland
+386	:	Uudenmaa/Nyland
+387	:	HIGHLANDS
+388	:	Sogn og Fjordane
+389	:	Turku-Pori/Abo-Bj”rneborg
+390	:	Aland/Ahvenanmaa
+391	:	Uudenmaa/Nyland
+392	:	Uudenmaa/Nyland
+393	:	Uudenmaa/Nyland
+394	:	Turku-Pori/Abo-Bj”rneborg
+395	:	Uudenmaa/Nyland
+396	:	Turku-Pori/Abo-Bj”rneborg
+397	:	Turku-Pori/Abo-Bj”rneborg
+398	:	Hordaland
+399	:	Uudenmaa/Nyland
+400	:	Aland/Ahvenanmaa
+401	:	Turku-Pori/Abo-Bj”rneborg
+402	:	Turku-Pori/Abo-Bj”rneborg
+403	:	Aland/Ahvenanmaa
+404	:	Uudenmaa/Nyland
+405	:	Uudenmaa/Nyland
+406	:	Turku-Pori/Abo-Bj”rneborg
+407	:	Turku-Pori/Abo-Bj”rneborg
+408	:	Uudenmaa/Nyland
+409	:	Aland/Ahvenanmaa
+410	:	HIGHLANDS
+411	:	Uudenmaa/Nyland
+412	:	Turku-Pori/Abo-Bj”rneborg
+413	:	Aland/Ahvenanmaa
+414	:	Turku-Pori/Abo-Bj”rneborg
+415	:	Turku-Pori/Abo-Bj”rneborg
+416	:	Turku-Pori/Abo-Bj”rneborg
+417	:	HIGHLANDS
+418	:	Turku-Pori/Abo-Bj”rneborg
+419	:	Turku-Pori/Abo-Bj”rneborg
+420	:	Turku-Pori/Abo-Bj”rneborg
+421	:	Turku-Pori/Abo-Bj”rneborg
+422	:	Uudenmaa/Nyland
+423	:	Hordaland
+424	:	HIGHLANDS
+425	:	Uudenmaa/Nyland
+426	:	Aland/Ahvenanmaa
+427	:	Turku-Pori/Abo-Bj”rneborg
+428	:	Uudenmaa/Nyland
+429	:	Uudenmaa/Nyland
+430	:	Aland/Ahvenanmaa
+431	:	Turku-Pori/Abo-Bj”rneborg
+432	:	Turku-Pori/Abo-Bj”rneborg
+433	:	Uudenmaa/Nyland
+434	:	Turku-Pori/Abo-Bj”rneborg
+435	:	Turku-Pori/Abo-Bj”rneborg
+436	:	Turku-Pori/Abo-Bj”rneborg
+437	:	Turku-Pori/Abo-Bj”rneborg
+438	:	Turku-Pori/Abo-Bj”rneborg
+439	:	Uudenmaa/Nyland
+440	:	Turku-Pori/Abo-Bj”rneborg
+441	:	HIGHLANDS
+442	:	Uudenmaa/Nyland
+443	:	Aland/Ahvenanmaa
+444	:	Turku-Pori/Abo-Bj”rneborg
+445	:	HIGHLANDS
+446	:	Turku-Pori/Abo-Bj”rneborg
+447	:	Uudenmaa/Nyland
+448	:	HIGHLANDS
+449	:	Aland/Ahvenanmaa
+450	:	Uudenmaa/Nyland
+451	:	Turku-Pori/Abo-Bj”rneborg
+452	:	Aland/Ahvenanmaa
+453	:	Uudenmaa/Nyland
+454	:	Turku-Pori/Abo-Bj”rneborg
+455	:	Uudenmaa/Nyland
+456	:	Turku-Pori/Abo-Bj”rneborg
+457	:	Turku-Pori/Abo-Bj”rneborg
+458	:	Turku-Pori/Abo-Bj”rneborg
+459	:	Turku-Pori/Abo-Bj”rneborg
+460	:	Turku-Pori/Abo-Bj”rneborg
+461	:	Turku-Pori/Abo-Bj”rneborg
+462	:	Uudenmaa/Nyland
+463	:	Turku-Pori/Abo-Bj”rneborg
+464	:	Uppsala
+465	:	Aland/Ahvenanmaa
+466	:	Aland/Ahvenanmaa
+467	:	Turku-Pori/Abo-Bj”rneborg
+468	:	Turku-Pori/Abo-Bj”rneborg
+469	:	Turku-Pori/Abo-Bj”rneborg
+470	:	Turku-Pori/Abo-Bj”rneborg
+471	:	Turku-Pori/Abo-Bj”rneborg
+472	:	Turku-Pori/Abo-Bj”rneborg
+473	:	Turku-Pori/Abo-Bj”rneborg
+474	:	Aland/Ahvenanmaa
+475	:	Turku-Pori/Abo-Bj”rneborg
+476	:	Aland/Ahvenanmaa
+477	:	Turku-Pori/Abo-Bj”rneborg
+478	:	Turku-Pori/Abo-Bj”rneborg
+479	:	Turku-Pori/Abo-Bj”rneborg
+480	:	Uudenmaa/Nyland
+481	:	Aland/Ahvenanmaa
+482	:	Aland/Ahvenanmaa
+483	:	Aland/Ahvenanmaa
+484	:	Aland/Ahvenanmaa
+485	:	Turku-Pori/Abo-Bj”rneborg
+486	:	Aland/Ahvenanmaa
+487	:	Turku-Pori/Abo-Bj”rneborg
+488	:	Aland/Ahvenanmaa
+489	:	Aland/Ahvenanmaa
+490	:	Turku-Pori/Abo-Bj”rneborg
+491	:	Aland/Ahvenanmaa
+492	:	Turku-Pori/Abo-Bj”rneborg
+493	:	Turku-Pori/Abo-Bj”rneborg
+494	:	Turku-Pori/Abo-Bj”rneborg
+495	:	Turku-Pori/Abo-Bj”rneborg
+496	:	Turku-Pori/Abo-Bj”rneborg
+497	:	Aland/Ahvenanmaa
+498	:	Uudenmaa/Nyland
+499	:	Turku-Pori/Abo-Bj”rneborg
+500	:	Aland/Ahvenanmaa
+501	:	Turku-Pori/Abo-Bj”rneborg
+502	:	HIGHLANDS
+503	:	Aland/Ahvenanmaa
+504	:	Turku-Pori/Abo-Bj”rneborg
+505	:	Turku-Pori/Abo-Bj”rneborg
+506	:	HIGHLANDS
+507	:	Turku-Pori/Abo-Bj”rneborg
+508	:	Aland/Ahvenanmaa
+509	:	Aland/Ahvenanmaa
+510	:	Aland/Ahvenanmaa
+511	:	Turku-Pori/Abo-Bj”rneborg
+512	:	Turku-Pori/Abo-Bj”rneborg
+513	:	Turku-Pori/Abo-Bj”rneborg
+514	:	Uudenmaa/Nyland
+515	:	Aland/Ahvenanmaa
+516	:	Aland/Ahvenanmaa
+517	:	Turku-Pori/Abo-Bj”rneborg
+518	:	Turku-Pori/Abo-Bj”rneborg
+519	:	Turku-Pori/Abo-Bj”rneborg
+520	:	Aland/Ahvenanmaa
+521	:	Aland/Ahvenanmaa
+522	:	Turku-Pori/Abo-Bj”rneborg
+523	:	Aland/Ahvenanmaa
+524	:	Aland/Ahvenanmaa
+525	:	Aland/Ahvenanmaa
+526	:	Aland/Ahvenanmaa
+527	:	Uppsala
+528	:	Aland/Ahvenanmaa
+529	:	Turku-Pori/Abo-Bj”rneborg
+530	:	HIGHLANDS
+531	:	Turku-Pori/Abo-Bj”rneborg
+532	:	Aland/Ahvenanmaa
+533	:	Turku-Pori/Abo-Bj”rneborg
+534	:	Turku-Pori/Abo-Bj”rneborg
+535	:	Turku-Pori/Abo-Bj”rneborg
+536	:	Aland/Ahvenanmaa
+537	:	Turku-Pori/Abo-Bj”rneborg
+538	:	Turku-Pori/Abo-Bj”rneborg
+539	:	Uudenmaa/Nyland
+540	:	Turku-Pori/Abo-Bj”rneborg
+541	:	Turku-Pori/Abo-Bj”rneborg
+542	:	Turku-Pori/Abo-Bj”rneborg
+543	:	Turku-Pori/Abo-Bj”rneborg
+544	:	Aland/Ahvenanmaa
+545	:	Aland/Ahvenanmaa
+546	:	Uudenmaa/Nyland
+547	:	Aland/Ahvenanmaa
+548	:	Aland/Ahvenanmaa
+549	:	Aland/Ahvenanmaa
+550	:	Turku-Pori/Abo-Bj”rneborg
+551	:	Aland/Ahvenanmaa
+552	:	Aland/Ahvenanmaa
+553	:	Aland/Ahvenanmaa
+554	:	Turku-Pori/Abo-Bj”rneborg
+555	:	Uudenmaa/Nyland
+556	:	Uudenmaa/Nyland
+557	:	Turku-Pori/Abo-Bj”rneborg
+558	:	Turku-Pori/Abo-Bj”rneborg
+559	:	Turku-Pori/Abo-Bj”rneborg
+560	:	Uppsala
+561	:	Aland/Ahvenanmaa
+562	:	Turku-Pori/Abo-Bj”rneborg
+563	:	Turku-Pori/Abo-Bj”rneborg
+564	:	Aland/Ahvenanmaa
+565	:	Aland/Ahvenanmaa
+566	:	Aland/Ahvenanmaa
+567	:	Aland/Ahvenanmaa
+568	:	Aland/Ahvenanmaa
+569	:	HIGHLANDS
+570	:	Aland/Ahvenanmaa
+571	:	Turku-Pori/Abo-Bj”rneborg
+572	:	Turku-Pori/Abo-Bj”rneborg
+573	:	Aland/Ahvenanmaa
+574	:	Turku-Pori/Abo-Bj”rneborg
+575	:	Aland/Ahvenanmaa
+576	:	Turku-Pori/Abo-Bj”rneborg
+577	:	Uudenmaa/Nyland
+578	:	Turku-Pori/Abo-Bj”rneborg
+579	:	Turku-Pori/Abo-Bj”rneborg
+580	:	Turku-Pori/Abo-Bj”rneborg
+581	:	Aland/Ahvenanmaa
+582	:	Aland/Ahvenanmaa
+583	:	Aland/Ahvenanmaa
+584	:	Turku-Pori/Abo-Bj”rneborg
+585	:	Aland/Ahvenanmaa
+586	:	Aland/Ahvenanmaa
+587	:	Turku-Pori/Abo-Bj”rneborg
+588	:	Aland/Ahvenanmaa
+589	:	Turku-Pori/Abo-Bj”rneborg
+590	:	Aland/Ahvenanmaa
+591	:	Uudenmaa/Nyland
+592	:	Uudenmaa/Nyland
+593	:	Aland/Ahvenanmaa
+594	:	Turku-Pori/Abo-Bj”rneborg
+595	:	Turku-Pori/Abo-Bj”rneborg
+596	:	Aland/Ahvenanmaa
+597	:	Aland/Ahvenanmaa
+598	:	Aland/Ahvenanmaa
+599	:	Turku-Pori/Abo-Bj”rneborg
+600	:	Turku-Pori/Abo-Bj”rneborg
+601	:	Aland/Ahvenanmaa
+602	:	Uudenmaa/Nyland
+603	:	Aland/Ahvenanmaa
+604	:	Turku-Pori/Abo-Bj”rneborg
+605	:	Turku-Pori/Abo-Bj”rneborg
+606	:	Aland/Ahvenanmaa
+607	:	Uudenmaa/Nyland
+608	:	Aland/Ahvenanmaa
+609	:	HIGHLANDS
+610	:	Uudenmaa/Nyland
+611	:	Turku-Pori/Abo-Bj”rneborg
+612	:	Turku-Pori/Abo-Bj”rneborg
+613	:	Aland/Ahvenanmaa
+614	:	Turku-Pori/Abo-Bj”rneborg
+615	:	Aland/Ahvenanmaa
+616	:	Turku-Pori/Abo-Bj”rneborg
+617	:	Turku-Pori/Abo-Bj”rneborg
+618	:	Uudenmaa/Nyland
+619	:	Aland/Ahvenanmaa
+620	:	Uudenmaa/Nyland
+621	:	Uudenmaa/Nyland
+622	:	Turku-Pori/Abo-Bj”rneborg
+623	:	Turku-Pori/Abo-Bj”rneborg
+624	:	Uudenmaa/Nyland
+625	:	Turku-Pori/Abo-Bj”rneborg
+626	:	Uudenmaa/Nyland
+627	:	Uudenmaa/Nyland
+628	:	Turku-Pori/Abo-Bj”rneborg
+629	:	Uudenmaa/Nyland
+630	:	Turku-Pori/Abo-Bj”rneborg
+631	:	Uudenmaa/Nyland
+632	:	Turku-Pori/Abo-Bj”rneborg
+633	:	Uudenmaa/Nyland
+634	:	Aland/Ahvenanmaa
+635	:	Turku-Pori/Abo-Bj”rneborg
+636	:	Turku-Pori/Abo-Bj”rneborg
+637	:	Aland/Ahvenanmaa
+638	:	Turku-Pori/Abo-Bj”rneborg
+639	:	Aland/Ahvenanmaa
+640	:	Uudenmaa/Nyland
+641	:	Aland/Ahvenanmaa
+642	:	Turku-Pori/Abo-Bj”rneborg
+643	:	Turku-Pori/Abo-Bj”rneborg
+644	:	Turku-Pori/Abo-Bj”rneborg
+645	:	Turku-Pori/Abo-Bj”rneborg
+646	:	HIGHLANDS
+647	:	Turku-Pori/Abo-Bj”rneborg
+648	:	Uudenmaa/Nyland
+649	:	Turku-Pori/Abo-Bj”rneborg
+650	:	Uudenmaa/Nyland
+651	:	Uudenmaa/Nyland
+652	:	Aland/Ahvenanmaa
+653	:	Uudenmaa/Nyland
+654	:	Turku-Pori/Abo-Bj”rneborg
+655	:	Aland/Ahvenanmaa
+656	:	Uudenmaa/Nyland
+657	:	Aland/Ahvenanmaa
+658	:	Turku-Pori/Abo-Bj”rneborg
+659	:	HIGHLANDS
+660	:	Turku-Pori/Abo-Bj”rneborg
+661	:	Turku-Pori/Abo-Bj”rneborg
+662	:	Aland/Ahvenanmaa
+663	:	Turku-Pori/Abo-Bj”rneborg
+664	:	Turku-Pori/Abo-Bj”rneborg
+665	:	Aland/Ahvenanmaa
+666	:	Uudenmaa/Nyland
+667	:	Turku-Pori/Abo-Bj”rneborg
+668	:	Hordaland
+669	:	Turku-Pori/Abo-Bj”rneborg
+670	:	Turku-Pori/Abo-Bj”rneborg
+671	:	Uudenmaa/Nyland
+672	:	Aland/Ahvenanmaa
+673	:	Turku-Pori/Abo-Bj”rneborg
+674	:	Turku-Pori/Abo-Bj”rneborg
+675	:	HIGHLANDS
+676	:	Uudenmaa/Nyland
+677	:	Uudenmaa/Nyland
+678	:	Aland/Ahvenanmaa
+679	:	Aland/Ahvenanmaa
+680	:	Turku-Pori/Abo-Bj”rneborg
+681	:	Aland/Ahvenanmaa
+682	:	Aland/Ahvenanmaa
+683	:	Uudenmaa/Nyland
+684	:	Turku-Pori/Abo-Bj”rneborg
+685	:	Turku-Pori/Abo-Bj”rneborg
+686	:	HIGHLANDS
+687	:	Turku-Pori/Abo-Bj”rneborg
+688	:	Aland/Ahvenanmaa
+689	:	Uudenmaa/Nyland
+690	:	Aland/Ahvenanmaa
+691	:	Aland/Ahvenanmaa
+692	:	Aland/Ahvenanmaa
+693	:	Turku-Pori/Abo-Bj”rneborg
+694	:	Turku-Pori/Abo-Bj”rneborg
+695	:	Aland/Ahvenanmaa
+696	:	Turku-Pori/Abo-Bj”rneborg
+697	:	Turku-Pori/Abo-Bj”rneborg
+698	:	Turku-Pori/Abo-Bj”rneborg
+699	:	Aland/Ahvenanmaa
+700	:	HIGHLANDS
+701	:	Uudenmaa/Nyland
+702	:	Aland/Ahvenanmaa
+703	:	Turku-Pori/Abo-Bj”rneborg
+704	:	Uudenmaa/Nyland
+705	:	Turku-Pori/Abo-Bj”rneborg
+706	:	Turku-Pori/Abo-Bj”rneborg
+707	:	Aland/Ahvenanmaa
+708	:	Turku-Pori/Abo-Bj”rneborg
+709	:	HIGHLANDS
+710	:	Turku-Pori/Abo-Bj”rneborg
+711	:	Turku-Pori/Abo-Bj”rneborg
+712	:	Aland/Ahvenanmaa
+713	:	Turku-Pori/Abo-Bj”rneborg
+714	:	Aland/Ahvenanmaa
+715	:	HIGHLANDS
+716	:	Turku-Pori/Abo-Bj”rneborg
+717	:	Turku-Pori/Abo-Bj”rneborg
+718	:	HIGHLANDS
+719	:	Aland/Ahvenanmaa
+720	:	Aland/Ahvenanmaa
+721	:	Aland/Ahvenanmaa
+722	:	HIGHLANDS
+723	:	Aland/Ahvenanmaa
+724	:	Uudenmaa/Nyland
+725	:	Turku-Pori/Abo-Bj”rneborg
+726	:	Aland/Ahvenanmaa
+727	:	Uudenmaa/Nyland
+728	:	Uudenmaa/Nyland
+729	:	Aland/Ahvenanmaa
+730	:	Aland/Ahvenanmaa
+731	:	Uudenmaa/Nyland
+732	:	Uudenmaa/Nyland
+733	:	Turku-Pori/Abo-Bj”rneborg
+734	:	Uudenmaa/Nyland
+735	:	Turku-Pori/Abo-Bj”rneborg
+736	:	Uudenmaa/Nyland
+737	:	Uudenmaa/Nyland
+738	:	Uudenmaa/Nyland
+739	:	Turku-Pori/Abo-Bj”rneborg
+740	:	Uudenmaa/Nyland
+741	:	Turku-Pori/Abo-Bj”rneborg
+742	:	Aland/Ahvenanmaa
+743	:	Turku-Pori/Abo-Bj”rneborg
+744	:	Uudenmaa/Nyland
+745	:	Aland/Ahvenanmaa
+746	:	Uudenmaa/Nyland
+747	:	Uudenmaa/Nyland
+748	:	Aland/Ahvenanmaa
+749	:	Turku-Pori/Abo-Bj”rneborg
+750	:	Turku-Pori/Abo-Bj”rneborg
+751	:	Uudenmaa/Nyland
+752	:	Turku-Pori/Abo-Bj”rneborg
+753	:	Uudenmaa/Nyland
+754	:	Turku-Pori/Abo-Bj”rneborg
+755	:	Aland/Ahvenanmaa
+756	:	Uudenmaa/Nyland
+757	:	Turku-Pori/Abo-Bj”rneborg
+758	:	Turku-Pori/Abo-Bj”rneborg
+759	:	Turku-Pori/Abo-Bj”rneborg
+760	:	Uudenmaa/Nyland
+761	:	Aland/Ahvenanmaa
+762	:	Turku-Pori/Abo-Bj”rneborg
+763	:	Aland/Ahvenanmaa
+764	:	Uudenmaa/Nyland
+765	:	Turku-Pori/Abo-Bj”rneborg
+766	:	Uudenmaa/Nyland
+767	:	Turku-Pori/Abo-Bj”rneborg
+768	:	Uudenmaa/Nyland
+769	:	Aland/Ahvenanmaa
+770	:	Turku-Pori/Abo-Bj”rneborg
+771	:	Turku-Pori/Abo-Bj”rneborg
+772	:	Uudenmaa/Nyland
+773	:	Aland/Ahvenanmaa
+774	:	Turku-Pori/Abo-Bj”rneborg
+775	:	Aland/Ahvenanmaa
+776	:	Uudenmaa/Nyland
+777	:	Turku-Pori/Abo-Bj”rneborg
+778	:	Uudenmaa/Nyland
+779	:	Uudenmaa/Nyland
+780	:	Aland/Ahvenanmaa
+781	:	Uudenmaa/Nyland
+782	:	Aland/Ahvenanmaa
+783	:	Turku-Pori/Abo-Bj”rneborg
+784	:	Aland/Ahvenanmaa
+785	:	Uudenmaa/Nyland
+786	:	Turku-Pori/Abo-Bj”rneborg
+787	:	Turku-Pori/Abo-Bj”rneborg
+788	:	Uudenmaa/Nyland
+789	:	Uudenmaa/Nyland
+790	:	Uudenmaa/Nyland
+791	:	Turku-Pori/Abo-Bj”rneborg
+792	:	Turku-Pori/Abo-Bj”rneborg
+793	:	Uudenmaa/Nyland
+794	:	Turku-Pori/Abo-Bj”rneborg
+795	:	Aland/Ahvenanmaa
+796	:	Uudenmaa/Nyland
+797	:	Aland/Ahvenanmaa
+798	:	Turku-Pori/Abo-Bj”rneborg
+799	:	Uudenmaa/Nyland
+800	:	Aland/Ahvenanmaa
+801	:	Uudenmaa/Nyland
+802	:	Aland/Ahvenanmaa
+803	:	Turku-Pori/Abo-Bj”rneborg
+804	:	Uudenmaa/Nyland
+805	:	Uudenmaa/Nyland
+806	:	Aland/Ahvenanmaa
+807	:	Aland/Ahvenanmaa
+808	:	Turku-Pori/Abo-Bj”rneborg
+809	:	Turku-Pori/Abo-Bj”rneborg
+810	:	Uudenmaa/Nyland
+811	:	Uudenmaa/Nyland
+812	:	Aland/Ahvenanmaa
+813	:	Turku-Pori/Abo-Bj”rneborg
+814	:	Aland/Ahvenanmaa
+815	:	Turku-Pori/Abo-Bj”rneborg
+816	:	Oslo og Akershus
+817	:	Turku-Pori/Abo-Bj”rneborg
+818	:	Uudenmaa/Nyland
+819	:	Uudenmaa/Nyland
+820	:	Uudenmaa/Nyland
+821	:	Turku-Pori/Abo-Bj”rneborg
+822	:	Uudenmaa/Nyland
+823	:	Turku-Pori/Abo-Bj”rneborg
+824	:	Turku-Pori/Abo-Bj”rneborg
+825	:	Aland/Ahvenanmaa
+826	:	Uudenmaa/Nyland
+827	:	Turku-Pori/Abo-Bj”rneborg
+828	:	Turku-Pori/Abo-Bj”rneborg
+829	:	Uudenmaa/Nyland
+830	:	Turku-Pori/Abo-Bj”rneborg
+831	:	Uudenmaa/Nyland
+832	:	Aland/Ahvenanmaa
+833	:	Turku-Pori/Abo-Bj”rneborg
+834	:	Turku-Pori/Abo-Bj”rneborg
+835	:	Turku-Pori/Abo-Bj”rneborg
+836	:	Turku-Pori/Abo-Bj”rneborg
+837	:	Turku-Pori/Abo-Bj”rneborg
+838	:	Turku-Pori/Abo-Bj”rneborg
+839	:	Uudenmaa/Nyland
+840	:	Turku-Pori/Abo-Bj”rneborg
+841	:	Uudenmaa/Nyland
+842	:	Uudenmaa/Nyland
+843	:	Uudenmaa/Nyland
+844	:	Turku-Pori/Abo-Bj”rneborg
+845	:	Uudenmaa/Nyland
+846	:	HIGHLANDS
+847	:	Uudenmaa/Nyland
+848	:	Uudenmaa/Nyland
+849	:	Aland/Ahvenanmaa
+850	:	Turku-Pori/Abo-Bj”rneborg
+851	:	Turku-Pori/Abo-Bj”rneborg
+852	:	Aland/Ahvenanmaa
+853	:	Turku-Pori/Abo-Bj”rneborg
+854	:	Uudenmaa/Nyland
+855	:	Turku-Pori/Abo-Bj”rneborg
+856	:	Aland/Ahvenanmaa
+857	:	Turku-Pori/Abo-Bj”rneborg
+858	:	Uudenmaa/Nyland
+859	:	Turku-Pori/Abo-Bj”rneborg
+860	:	Uudenmaa/Nyland
+861	:	Uudenmaa/Nyland
+862	:	Aland/Ahvenanmaa
+863	:	Turku-Pori/Abo-Bj”rneborg
+864	:	Turku-Pori/Abo-Bj”rneborg
+865	:	Aland/Ahvenanmaa
+866	:	Uudenmaa/Nyland
+867	:	Aland/Ahvenanmaa
+868	:	Turku-Pori/Abo-Bj”rneborg
+869	:	Aland/Ahvenanmaa
+870	:	Uudenmaa/Nyland
+871	:	Aland/Ahvenanmaa
+872	:	Turku-Pori/Abo-Bj”rneborg
+873	:	Uudenmaa/Nyland
+874	:	Uudenmaa/Nyland
+875	:	Uudenmaa/Nyland
+876	:	Stockholm
+877	:	Turku-Pori/Abo-Bj”rneborg
+878	:	Aland/Ahvenanmaa
+879	:	Uudenmaa/Nyland
+880	:	Aland/Ahvenanmaa
+881	:	Aland/Ahvenanmaa
+882	:	Uudenmaa/Nyland
+883	:	Uudenmaa/Nyland
+884	:	Turku-Pori/Abo-Bj”rneborg
+885	:	Uudenmaa/Nyland
+886	:	Uudenmaa/Nyland
+887	:	Aland/Ahvenanmaa
+888	:	Aland/Ahvenanmaa
+889	:	Aland/Ahvenanmaa
+890	:	Aland/Ahvenanmaa
+891	:	Aland/Ahvenanmaa
+892	:	Turku-Pori/Abo-Bj”rneborg
+893	:	Aland/Ahvenanmaa
+894	:	Turku-Pori/Abo-Bj”rneborg
+895	:	Turku-Pori/Abo-Bj”rneborg
+896	:	Aland/Ahvenanmaa
+897	:	Uudenmaa/Nyland
+898	:	Uudenmaa/Nyland
+899	:	Turku-Pori/Abo-Bj”rneborg
+900	:	Aland/Ahvenanmaa
+901	:	Aland/Ahvenanmaa
+902	:	Turku-Pori/Abo-Bj”rneborg
+903	:	Turku-Pori/Abo-Bj”rneborg
+904	:	Turku-Pori/Abo-Bj”rneborg
+905	:	HIGHLANDS
+906	:	Aland/Ahvenanmaa
+907	:	Turku-Pori/Abo-Bj”rneborg
+908	:	Turku-Pori/Abo-Bj”rneborg
+909	:	Turku-Pori/Abo-Bj”rneborg
+910	:	Aland/Ahvenanmaa
+911	:	Aland/Ahvenanmaa
+912	:	Aland/Ahvenanmaa
+913	:	Aland/Ahvenanmaa
+914	:	Turku-Pori/Abo-Bj”rneborg
+915	:	Uudenmaa/Nyland
+916	:	Aland/Ahvenanmaa
+917	:	Aland/Ahvenanmaa
+918	:	Aland/Ahvenanmaa
+919	:	V stmanland
+920	:	Turku-Pori/Abo-Bj”rneborg
+921	:	Turku-Pori/Abo-Bj”rneborg
+922	:	Aland/Ahvenanmaa
+923	:	Aland/Ahvenanmaa
+924	:	Aland/Ahvenanmaa
+925	:	HIGHLANDS
+926	:	Aland/Ahvenanmaa
+927	:	Turku-Pori/Abo-Bj”rneborg
+928	:	Uudenmaa/Nyland
+929	:	Aland/Ahvenanmaa
+930	:	Turku-Pori/Abo-Bj”rneborg
+931	:	Uudenmaa/Nyland
+932	:	Turku-Pori/Abo-Bj”rneborg
+933	:	Aland/Ahvenanmaa
+934	:	Turku-Pori/Abo-Bj”rneborg
+935	:	Turku-Pori/Abo-Bj”rneborg
+936	:	Turku-Pori/Abo-Bj”rneborg
+937	:	Aland/Ahvenanmaa
+938	:	Turku-Pori/Abo-Bj”rneborg
+939	:	Aland/Ahvenanmaa
+940	:	Turku-Pori/Abo-Bj”rneborg
+941	:	Turku-Pori/Abo-Bj”rneborg
+942	:	Turku-Pori/Abo-Bj”rneborg
+943	:	HIGHLANDS
+944	:	HIGHLANDS
+945	:	Stockholm
+946	:	Turku-Pori/Abo-Bj”rneborg
+947	:	Turku-Pori/Abo-Bj”rneborg
+948	:	Turku-Pori/Abo-Bj”rneborg
+949	:	Turku-Pori/Abo-Bj”rneborg
+950	:	HIGHLANDS
+951	:	Turku-Pori/Abo-Bj”rneborg
+952	:	Turku-Pori/Abo-Bj”rneborg
+953	:	Aland/Ahvenanmaa
+954	:	Turku-Pori/Abo-Bj”rneborg
+955	:	Turku-Pori/Abo-Bj”rneborg
+956	:	Aland/Ahvenanmaa
+957	:	Turku-Pori/Abo-Bj”rneborg
+958	:	Turku-Pori/Abo-Bj”rneborg
+959	:	Turku-Pori/Abo-Bj”rneborg
+960	:	Turku-Pori/Abo-Bj”rneborg
+961	:	Turku-Pori/Abo-Bj”rneborg
+962	:	Turku-Pori/Abo-Bj”rneborg
+963	:	Turku-Pori/Abo-Bj”rneborg
+964	:	Turku-Pori/Abo-Bj”rneborg
+965	:	Turku-Pori/Abo-Bj”rneborg
+966	:	Aland/Ahvenanmaa
+967	:	Aland/Ahvenanmaa
+968	:	Aland/Ahvenanmaa
+969	:	Aland/Ahvenanmaa
+970	:	Aland/Ahvenanmaa
+971	:	Turku-Pori/Abo-Bj”rneborg
+972	:	Turku-Pori/Abo-Bj”rneborg
+973	:	Aland/Ahvenanmaa
+974	:	Aland/Ahvenanmaa
+975	:	Aland/Ahvenanmaa
+976	:	Turku-Pori/Abo-Bj”rneborg
+977	:	Aland/Ahvenanmaa
+978	:	Turku-Pori/Abo-Bj”rneborg
+979	:	Turku-Pori/Abo-Bj”rneborg
+980	:	Aland/Ahvenanmaa
+981	:	Aland/Ahvenanmaa
+982	:	Turku-Pori/Abo-Bj”rneborg
+983	:	Aland/Ahvenanmaa
+984	:	Turku-Pori/Abo-Bj”rneborg
+985	:	Turku-Pori/Abo-Bj”rneborg
+986	:	Aland/Ahvenanmaa
+987	:	Uudenmaa/Nyland
+988	:	Aland/Ahvenanmaa
+989	:	Aland/Ahvenanmaa
+990	:	Turku-Pori/Abo-Bj”rneborg
+991	:	Aland/Ahvenanmaa
+992	:	Turku-Pori/Abo-Bj”rneborg
+993	:	Aland/Ahvenanmaa
+994	:	Turku-Pori/Abo-Bj”rneborg
+995	:	Turku-Pori/Abo-Bj”rneborg
+996	:	Turku-Pori/Abo-Bj”rneborg
+997	:	Aland/Ahvenanmaa
+998	:	Aland/Ahvenanmaa
+999	:	Aland/Ahvenanmaa
+1000	:	Aland/Ahvenanmaa
+1001	:	Aland/Ahvenanmaa
+1002	:	Aland/Ahvenanmaa
+1003	:	Aland/Ahvenanmaa
+1004	:	Aland/Ahvenanmaa
+1005	:	Aland/Ahvenanmaa
+1006	:	Aland/Ahvenanmaa
+1007	:	Aland/Ahvenanmaa
+1008	:	Aland/Ahvenanmaa
+1009	:	Aland/Ahvenanmaa
+1010	:	Aland/Ahvenanmaa
+1011	:	HIGHLANDS
+1012	:	Aland/Ahvenanmaa
+1013	:	Turku-Pori/Abo-Bj”rneborg
+1014	:	Aland/Ahvenanmaa
+1015	:	Aland/Ahvenanmaa
+1016	:	Aland/Ahvenanmaa
+1017	:	Aland/Ahvenanmaa
+1018	:	Aland/Ahvenanmaa
+1019	:	Turku-Pori/Abo-Bj”rneborg
+1020	:	Turku-Pori/Abo-Bj”rneborg
+1021	:	Orebro
+1022	:	Telemark
+1023	:	Oestfold
+1024	:	Stockholm
+1025	:	HIGHLANDS
+1026	:	Stockholm
+1027	:	HIGHLANDS
+1028	:	HIGHLANDS
+1029	:	Rogaland
+1030	:	HIGHLANDS
+1031	:	Stockholm
+1032	:	Oestfold
+1033	:	Stockholm
+1034	:	Stockholm
+1035	:	HIGHLANDS
+1036	:	Stockholm
+1037	:	Stockholm
+1038	:	HIGHLANDS
+1039	:	Stockholm
+1040	:	S”rmland
+1041	:	HIGHLANDS
+1042	:	HIGHLANDS
+1043	:	Stockholm
+1044	:	Vestfold
+1045	:	Aust-Agder
+1046	:	Stockholm
+1047	:	HIGHLANDS
+1048	:	HIGHLANDS
+1049	:	HIGHLANDS
+1050	:	Stockholm
+1051	:	HIGHLANDS
+1052	:	HIGHLANDS
+1053	:	Stockholm
+1054	:	HIGHLANDS
+1055	:	HIGHLANDS
+1056	:	Stockholm
+1057	:	Stockholm
+1058	:	UNKNOWN
+1059	:	HIGHLANDS
+1060	:	HIGHLANDS
+1061	:	Stockholm
+1062	:	HIGHLANDS
+1063	:	HIGHLANDS
+1064	:	HIGHLANDS
+1065	:	HIGHLANDS
+1066	:	HIGHLANDS
+1067	:	HIGHLANDS
+1068	:	HIGHLANDS
+1069	:	HIGHLANDS
+1070	:	Stockholm
+1071	:	HIGHLANDS
+1072	:	HIGHLANDS
+1073	:	Zlvsborg
+1074	:	Stockholm
+1075	:	HIGHLANDS
+1076	:	Stockholm
+1077	:	HIGHLANDS
+1078	:	HIGHLANDS
+1079	:	Vest-Agder
+1080	:	HIGHLANDS
+1081	:	HIGHLANDS
+1082	:	HIGHLANDS
+1083	:	HIGHLANDS
+1084	:	HIGHLANDS
+1085	:	HIGHLANDS
+1086	:	Stockholm
+1087	:	HIGHLANDS
+1088	:	HIGHLANDS
+1089	:	HIGHLANDS
+1090	:	Osterg”tland
+1091	:	HIGHLANDS
+1092	:	HIGHLANDS
+1093	:	HIGHLANDS
+1094	:	HIGHLANDS
+1095	:	Stockholm
+1096	:	HIGHLANDS
+1097	:	Skaraborg
+1098	:	HIGHLANDS
+1099	:	Stockholm
+1100	:	B”hus
+1101	:	HIGHLANDS
+1102	:	HIGHLANDS
+1103	:	HIGHLANDS
+1104	:	HIGHLANDS
+1105	:	HIGHLANDS
+1106	:	HIGHLANDS
+1107	:	HIGHLANDS
+1108	:	HIGHLANDS
+1109	:	HIGHLANDS
+1110	:	HIGHLANDS
+1111	:	S”rmland
+1112	:	HIGHLANDS
+1113	:	HIGHLANDS
+1114	:	HIGHLANDS
+1115	:	HIGHLANDS
+1116	:	HIGHLANDS
+1117	:	HIGHLANDS
+1118	:	HIGHLANDS
+1119	:	HIGHLANDS
+1120	:	HIGHLANDS
+1121	:	HIGHLANDS
+1122	:	HIGHLANDS
+1123	:	HIGHLANDS
+1124	:	UNKNOWN
+1125	:	S”rmland
+1126	:	Skaraborg
+1127	:	Skaraborg
+1128	:	B”hus
+1129	:	B”hus
+1130	:	HIGHLANDS
+1131	:	HIGHLANDS
+1132	:	B”hus
+1133	:	HIGHLANDS
+1134	:	HIGHLANDS
+1135	:	HIGHLANDS
+1136	:	HIGHLANDS
+1137	:	HIGHLANDS
+1138	:	HIGHLANDS
+1139	:	B”hus
+1140	:	B”hus
+1141	:	HIGHLANDS
+1142	:	HIGHLANDS
+1143	:	Telemark
+1144	:	HIGHLANDS
+1145	:	HIGHLANDS
+1146	:	HIGHLANDS
+1147	:	HIGHLANDS
+1148	:	HIGHLANDS
+1149	:	HIGHLANDS
+1150	:	HIGHLANDS
+1151	:	HIGHLANDS
+1152	:	Gotland
+1153	:	HIGHLANDS
+1154	:	HIGHLANDS
+1155	:	HIGHLANDS
+1156	:	HIGHLANDS
+1157	:	HIGHLANDS
+1158	:	HIGHLANDS
+1159	:	HIGHLANDS
+1160	:	HIGHLANDS
+1161	:	HIGHLANDS
+1162	:	HIGHLANDS
+1163	:	HIGHLANDS
+1164	:	HIGHLANDS
+1165	:	HIGHLANDS
+1166	:	HIGHLANDS
+1167	:	HIGHLANDS
+1168	:	HIGHLANDS
+1169	:	HIGHLANDS
+1170	:	HIGHLANDS
+1171	:	HIGHLANDS
+1172	:	HIGHLANDS
+1173	:	HIGHLANDS
+1174	:	HIGHLANDS
+1175	:	HIGHLANDS
+1176	:	HIGHLANDS
+1177	:	HIGHLANDS
+1178	:	Aust-Agder
+1179	:	HIGHLANDS
+1180	:	HIGHLANDS
+1181	:	HIGHLANDS
+1182	:	HIGHLANDS
+1183	:	HIGHLANDS
+1184	:	HIGHLANDS
+1185	:	HIGHLANDS
+1186	:	HIGHLANDS
+1187	:	HIGHLANDS
+1188	:	HIGHLANDS
+1189	:	Aust-Agder
+1190	:	Aust-Agder
+1191	:	HIGHLANDS
+1192	:	HIGHLANDS
+1193	:	HIGHLANDS
+1194	:	HIGHLANDS
+1195	:	HIGHLANDS
+1196	:	HIGHLANDS
+1197	:	HIGHLANDS
+1198	:	HIGHLANDS
+1199	:	HIGHLANDS
+1200	:	HIGHLANDS
+1201	:	HIGHLANDS
+1202	:	Rogaland
+1203	:	HIGHLANDS
+1204	:	HIGHLANDS
+1205	:	HIGHLANDS
+1206	:	HIGHLANDS
+1207	:	HIGHLANDS
+1208	:	HIGHLANDS
+1209	:	HIGHLANDS
+1210	:	HIGHLANDS
+1211	:	HIGHLANDS
+1212	:	HIGHLANDS
+1213	:	HIGHLANDS
+1214	:	HIGHLANDS
+1215	:	Gotland
+1216	:	HIGHLANDS
+1217	:	HIGHLANDS
+1218	:	HIGHLANDS
+1219	:	HIGHLANDS
+1220	:	HIGHLANDS
+1221	:	HIGHLANDS
+1222	:	HIGHLANDS
+1223	:	B”hus
+1224	:	Kalmar
+1225	:	HIGHLANDS
+1226	:	HIGHLANDS
+1227	:	HIGHLANDS
+1228	:	HIGHLANDS
+1229	:	HIGHLANDS
+1230	:	HIGHLANDS
+1231	:	B”hus
+1232	:	Gotland
+1233	:	GRAMPIAN
+1234	:	Aust-Agder
+1235	:	J”nk”ping
+1236	:	Vest-Agder
+1237	:	Vest-Agder
+1238	:	HIGHLANDS
+1239	:	HIGHLANDS
+1240	:	HIGHLANDS
+1241	:	HIGHLANDS
+1242	:	B”hus
+1243	:	HIGHLANDS
+1244	:	HIGHLANDS
+1245	:	HIGHLANDS
+1246	:	HIGHLANDS
+1247	:	HIGHLANDS
+1248	:	HIGHLANDS
+1249	:	HIGHLANDS
+1250	:	HIGHLANDS
+1251	:	HIGHLANDS
+1252	:	HIGHLANDS
+1253	:	HIGHLANDS
+1254	:	HIGHLANDS
+1255	:	Vest-Agder
+1256	:	HIGHLANDS
+1257	:	HIGHLANDS
+1258	:	HIGHLANDS
+1259	:	HIGHLANDS
+1260	:	HIGHLANDS
+1261	:	HIGHLANDS
+1262	:	HIGHLANDS
+1263	:	Vest-Agder
+1264	:	HIGHLANDS
+1265	:	HIGHLANDS
+1266	:	Vest-Agder
+1267	:	HIGHLANDS
+1268	:	HIGHLANDS
+1269	:	HIGHLANDS
+1270	:	HIGHLANDS
+1271	:	HIGHLANDS
+1272	:	HIGHLANDS
+1273	:	HIGHLANDS
+1274	:	HIGHLANDS
+1275	:	HIGHLANDS
+1276	:	HIGHLANDS
+1277	:	HIGHLANDS
+1278	:	HIGHLANDS
+1279	:	HIGHLANDS
+1280	:	HIGHLANDS
+1281	:	B”hus
+1282	:	B”hus
+1283	:	HIGHLANDS
+1284	:	HIGHLANDS
+1285	:	HIGHLANDS
+1286	:	HIGHLANDS
+1287	:	B”hus
+1288	:	HIGHLANDS
+1289	:	HIGHLANDS
+1290	:	HIGHLANDS
+1291	:	HIGHLANDS
+1292	:	HIGHLANDS
+1293	:	HIGHLANDS
+1294	:	HIGHLANDS
+1295	:	VEST FOR STOREBAELT
+1296	:	HIGHLANDS
+1297	:	HIGHLANDS
+1298	:	B”hus
+1299	:	B”hus
+1300	:	HIGHLANDS
+1301	:	HIGHLANDS
+1302	:	HIGHLANDS
+1303	:	HIGHLANDS
+1304	:	HIGHLANDS
+1305	:	HIGHLANDS
+1306	:	Halland
+1307	:	Kronoberg
+1308	:	HIGHLANDS
+1309	:	HIGHLANDS
+1310	:	HIGHLANDS
+1311	:	HIGHLANDS
+1312	:	BORD-CENTR-FIFE-LOTHIAN-TAY
+1313	:	VEST FOR STOREBAELT
+1314	:	HIGHLANDS
+1315	:	HIGHLANDS
+1316	:	VEST FOR STOREBAELT
+1317	:	HIGHLANDS
+1318	:	HIGHLANDS
+1319	:	HIGHLANDS
+1320	:	HIGHLANDS
+1321	:	HIGHLANDS
+1322	:	VEST FOR STOREBAELT
+1323	:	HIGHLANDS
+1324	:	HIGHLANDS
+1325	:	HIGHLANDS
+1326	:	HIGHLANDS
+1327	:	DUMFRIES-GALLO
+1328	:	VEST FOR STOREBAELT
+1329	:	HIGHLANDS
+1330	:	Kronoberg
+1331	:	HIGHLANDS
+1332	:	HIGHLANDS
+1333	:	HIGHLANDS
+1334	:	VEST FOR STOREBAELT
+1335	:	HIGHLANDS
+1336	:	DUMFRIES-GALLO
+1337	:	HIGHLANDS
+1338	:	HIGHLANDS
+1339	:	HIGHLANDS
+1340	:	VEST FOR STOREBAELT
+1341	:	HIGHLANDS
+1342	:	DUMFRIES-GALLO
+1343	:	VEST FOR STOREBAELT
+1344	:	VEST FOR STOREBAELT
+1345	:	VEST FOR STOREBAELT
+1346	:	VEST FOR STOREBAELT
+1347	:	VEST FOR STOREBAELT
+1348	:	VEST FOR STOREBAELT
+1349	:	VEST FOR STOREBAELT
+1350	:	HIGHLANDS
+1351	:	VEST FOR STOREBAELT
+1352	:	VEST FOR STOREBAELT
+1353	:	VEST FOR STOREBAELT
+1354	:	DUMFRIES-GALLO
+1355	:	HIGHLANDS
+1356	:	HIGHLANDS
+1357	:	HIGHLANDS
+1358	:	HIGHLANDS
+1359	:	HIGHLANDS
+1360	:	DUMFRIES-GALLO
+1361	:	VEST FOR STOREBAELT
+1362	:	VEST FOR STOREBAELT
+1363	:	VEST FOR STOREBAELT
+1364	:	DUMFRIES-GALLO
+1365	:	VEST FOR STOREBAELT
+1366	:	DUMFRIES-GALLO
+1367	:	VEST FOR STOREBAELT
+1368	:	VEST FOR STOREBAELT
+1369	:	VEST FOR STOREBAELT
+1370	:	VEST FOR STOREBAELT
+1371	:	VEST FOR STOREBAELT
+1372	:	VEST FOR STOREBAELT
+1373	:	VEST FOR STOREBAELT
+1374	:	DUMFRIES-GALLO
+1375	:	DUMFRIES-GALLO
+1376	:	VEST FOR STOREBAELT
+1377	:	VEST FOR STOREBAELT
+1378	:	VEST FOR STOREBAELT
+1379	:	DUMFRIES-GALLO
+1380	:	VEST FOR STOREBAELT
+1381	:	DUMFRIES-GALLO
+1382	:	VEST FOR STOREBAELT
+1383	:	DUMFRIES-GALLO
+1384	:	DUMFRIES-GALLO
+1385	:	VEST FOR STOREBAELT
+1386	:	VEST FOR STOREBAELT
+1387	:	DUMFRIES-GALLO
+1388	:	Blekinge
+1389	:	Kristianstad
+1390	:	VEST FOR STOREBAELT
+1391	:	DUMFRIES-GALLO
+1392	:	DUMFRIES-GALLO
+1393	:	DUMFRIES-GALLO
+1394	:	DUMFRIES-GALLO
+1395	:	IRELAND
+1396	:	IRELAND
+1397	:	IRELAND
+1398	:	IRELAND
+1399	:	Malm”hus
+1400	:	Blekinge
+1401	:	Blekinge
+1402	:	IRELAND
+1403	:	Blekinge
+1404	:	IRELAND
+1405	:	IRELAND
+1406	:	Blekinge
+1407	:	IRELAND
+1408	:	Blekinge
+1409	:	Blekinge
+1410	:	Blekinge
+1411	:	DUMFRIES-GALLO
+1412	:	NORTHUMBERLAND
+1413	:	IRELAND
+1414	:	IRELAND
+1415	:	IRELAND
+1416	:	IRELAND
+1417	:	Blekinge
+1418	:	IRELAND
+1419	:	IRELAND
+1420	:	IRELAND
+1421	:	Blekinge
+1422	:	IRELAND
+1423	:	IRELAND
+1424	:	IRELAND
+1425	:	IRELAND
+1426	:	NORTHERN IRELAND
+1427	:	IRELAND
+1428	:	HOVEDSTADSREGIONEN
+1429	:	NORTHERN IRELAND
+1430	:	IRELAND
+1431	:	NORTHERN IRELAND
+1432	:	VEST FOR STOREBAELT
+1433	:	IRELAND
+1434	:	NORTHERN IRELAND
+1435	:	IRELAND
+1436	:	IRELAND
+1437	:	IRELAND
+1438	:	IRELAND
+1439	:	IRELAND
+1440	:	IRELAND
+1441	:	IRELAND
+1442	:	OST FOR STOREBAELT
+1443	:	IRELAND
+1444	:	VEST FOR STOREBAELT
+1445	:	VEST FOR STOREBAELT
+1446	:	VEST FOR STOREBAELT
+1447	:	VEST FOR STOREBAELT
+1448	:	VEST FOR STOREBAELT
+1449	:	VEST FOR STOREBAELT
+1450	:	VEST FOR STOREBAELT
+1451	:	VEST FOR STOREBAELT
+1452	:	VEST FOR STOREBAELT
+1453	:	VEST FOR STOREBAELT
+1454	:	VEST FOR STOREBAELT
+1455	:	IRELAND
+1456	:	VEST FOR STOREBAELT
+1457	:	VEST FOR STOREBAELT
+1458	:	VEST FOR STOREBAELT
+1459	:	IRELAND
+1460	:	HOVEDSTADSREGIONEN
+1461	:	IRELAND
+1462	:	IRELAND
+1463	:	HOVEDSTADSREGIONEN
+1464	:	HOVEDSTADSREGIONEN
+1465	:	HOVEDSTADSREGIONEN
+1466	:	CUMBRIA
+1467	:	IRELAND
+1468	:	IRELAND
+1469	:	NORTHERN IRELAND
+1491	:	IRELAND
+1501	:	IRELAND
+1505	:	VEST FOR STOREBAELT
+1516	:	IRELAND
+1528	:	IRELAND
+1533	:	IRELAND
+1534	:	IRELAND
+1535	:	IRELAND
+1537	:	IRELAND
+1538	:	IRELAND
+1540	:	HOVEDSTADSREGIONEN
+1542	:	HOVEDSTADSREGIONEN
+1544	:	VEST FOR STOREBAELT
+1548	:	NORTHERN IRELAND
+1549	:	IRELAND
+1550	:	IRELAND
+1551	:	NORTHERN IRELAND
+1554	:	IRELAND
+1556	:	IRELAND
+1558	:	VEST FOR STOREBAELT
+1559	:	IRELAND
+1560	:	OST FOR STOREBAELT
+1568	:	NORTHERN IRELAND
+1569	:	IRELAND
+1570	:	NORTHERN IRELAND
+1571	:	OST FOR STOREBAELT
+1572	:	VEST FOR STOREBAELT
+1573	:	OST FOR STOREBAELT
+1579	:	IRELAND
+1580	:	VEST FOR STOREBAELT
+1586	:	IRELAND
+1589	:	OST FOR STOREBAELT
+1593	:	IRELAND
+1594	:	IRELAND
+1595	:	IRELAND
+1596	:	IRELAND
+1597	:	NORTHERN IRELAND
+1598	:	VEST FOR STOREBAELT
+1599	:	CLEVELAND
+1600	:	NORTHERN IRELAND
+1601	:	IRELAND
+1602	:	NORTHERN IRELAND
+1603	:	VEST FOR STOREBAELT
+1604	:	IRELAND
+1605	:	NORTHERN IRELAND
+1606	:	VEST FOR STOREBAELT
+1607	:	NORTHERN IRELAND
+1608	:	VEST FOR STOREBAELT
+1609	:	NORTHERN IRELAND
+1610	:	NORTHERN IRELAND
+1611	:	NORTHERN IRELAND
+1612	:	NORTHERN IRELAND
+1613	:	VEST FOR STOREBAELT
+1614	:	NORTHERN IRELAND
+1615	:	VEST FOR STOREBAELT
+1616	:	NORTHERN IRELAND
+1617	:	NORTHERN IRELAND
+1618	:	NORTHERN IRELAND
+1619	:	VEST FOR STOREBAELT
+1620	:	NORTHERN IRELAND
+1621	:	IRELAND
+1622	:	NORTHERN IRELAND
+1623	:	OST FOR STOREBAELT
+1624	:	VEST FOR STOREBAELT
+1625	:	VEST FOR STOREBAELT
+1626	:	IRELAND
+1627	:	NORTHERN IRELAND
+1628	:	IRELAND
+1629	:	IRELAND
+1630	:	IRELAND
+1631	:	OST FOR STOREBAELT
+1632	:	OST FOR STOREBAELT
+1633	:	IRELAND
+1634	:	OST FOR STOREBAELT
+1635	:	IRELAND
+1636	:	NORTHERN IRELAND
+1637	:	IRELAND
+1638	:	IRELAND
+1639	:	NORTHERN IRELAND
+1640	:	IRELAND
+1641	:	NORTHERN IRELAND
+1642	:	OST FOR STOREBAELT
+1643	:	NORTHERN IRELAND
+1644	:	IRELAND
+1645	:	IRELAND
+1646	:	IRELAND
+1647	:	IRELAND
+1648	:	OST FOR STOREBAELT
+1649	:	IRELAND
+1650	:	IRELAND
+1651	:	VEST FOR STOREBAELT
+1652	:	IRELAND
+1653	:	Gdansk
+1654	:	VEST FOR STOREBAELT
+1655	:	OST FOR STOREBAELT
+1656	:	IRELAND
+1657	:	IRELAND
+1658	:	IRELAND
+1659	:	Suwalski
+1660	:	VEST FOR STOREBAELT
+1661	:	IRELAND
+1662	:	VEST FOR STOREBAELT
+1663	:	IRELAND
+1664	:	VEST FOR STOREBAELT
+1665	:	IRELAND
+1666	:	VEST FOR STOREBAELT
+1667	:	VEST FOR STOREBAELT
+1668	:	OST FOR STOREBAELT
+1669	:	NORTHERN IRELAND
+1670	:	UNITED KINGDOM
+1671	:	OST FOR STOREBAELT
+1672	:	OST FOR STOREBAELT
+1673	:	Kaliningrad obl.
+1674	:	VEST FOR STOREBAELT
+1675	:	IRELAND
+1676	:	VEST FOR STOREBAELT
+1677	:	IRELAND
+1678	:	OST FOR STOREBAELT
+1679	:	VEST FOR STOREBAELT
+1680	:	Slupsk
+1681	:	VEST FOR STOREBAELT
+1682	:	IRELAND
+1683	:	VEST FOR STOREBAELT
+1684	:	OST FOR STOREBAELT
+1685	:	SCHLESWIG-HOLSTEIN
+1686	:	VEST FOR STOREBAELT
+1687	:	IRELAND
+1688	:	IRELAND
+1689	:	VEST FOR STOREBAELT
+1690	:	IRELAND
+1691	:	IRELAND
+1692	:	IRELAND
+1693	:	VEST FOR STOREBAELT
+1694	:	OST FOR STOREBAELT
+1695	:	IRELAND
+1696	:	IRELAND
+1697	:	OST FOR STOREBAELT
+1698	:	OST FOR STOREBAELT
+1699	:	OST FOR STOREBAELT
+1700	:	VEST FOR STOREBAELT
+1701	:	OST FOR STOREBAELT
+1702	:	VEST FOR STOREBAELT
+1703	:	NORTH YORKSHIRE
+1704	:	IRELAND
+1705	:	OST FOR STOREBAELT
+1706	:	IRELAND
+1707	:	VEST FOR STOREBAELT
+1708	:	VEST FOR STOREBAELT
+1709	:	IRELAND
+1710	:	OST FOR STOREBAELT
+1711	:	VEST FOR STOREBAELT
+1712	:	IRELAND
+1713	:	VEST FOR STOREBAELT
+1714	:	IRELAND
+1715	:	OST FOR STOREBAELT
+1716	:	OST FOR STOREBAELT
+1717	:	Olsztyn
+1718	:	VEST FOR STOREBAELT
+1719	:	VEST FOR STOREBAELT
+1720	:	VEST FOR STOREBAELT
+1721	:	VEST FOR STOREBAELT
+1722	:	VEST FOR STOREBAELT
+1723	:	OST FOR STOREBAELT
+1724	:	Elblag
+1725	:	UNKNOWN
+1726	:	VEST FOR STOREBAELT
+1727	:	IRELAND
+1728	:	IRELAND
+1729	:	OST FOR STOREBAELT
+1730	:	OST FOR STOREBAELT
+1731	:	OST FOR STOREBAELT
+1732	:	OST FOR STOREBAELT
+1733	:	VEST FOR STOREBAELT
+1734	:	IRELAND
+1735	:	OST FOR STOREBAELT
+1736	:	OST FOR STOREBAELT
+1737	:	OST FOR STOREBAELT
+1738	:	UNITED KINGDOM
+1739	:	IRELAND
+1740	:	IRELAND
+1741	:	IRELAND
+1742	:	MECKLENBURG-VORPOMMERN
+1743	:	IRELAND
+1744	:	CHEMNITZ
+1745	:	LANCASHIRE
+1746	:	IRELAND
+1747	:	IRELAND
+1748	:	IRELAND
+1749	:	Koszalin
+1750	:	IRELAND
+1751	:	IRELAND
+1752	:	IRELAND
+1753	:	IRELAND
+1754	:	CHEMNITZ
+1755	:	IRELAND
+1756	:	IRELAND
+1757	:	IRELAND
+1758	:	IRELAND
+1759	:	IRELAND
+1760	:	IRELAND
+1761	:	OST FOR STOREBAELT
+1762	:	IRELAND
+1763	:	OST FOR STOREBAELT
+1764	:	OST FOR STOREBAELT
+1765	:	OST FOR STOREBAELT
+1766	:	MECKLENBURG-VORPOMMERN
+1767	:	IRELAND
+1768	:	IRELAND
+1769	:	IRELAND
+1770	:	IRELAND
+1771	:	IRELAND
+1772	:	IRELAND
+1773	:	IRELAND
+1774	:	OST FOR STOREBAELT
+1775	:	IRELAND
+1776	:	IRELAND
+1777	:	IRELAND
+1778	:	IRELAND
+1779	:	IRELAND
+1780	:	IRELAND
+1781	:	IRELAND
+1782	:	MECKLENBURG-VORPOMMERN
+1783	:	CHEMNITZ
+1784	:	MECKLENBURG-VORPOMMERN
+1785	:	Bialystok
+1786	:	IRELAND
+1787	:	IRELAND
+1788	:	CHEMNITZ
+1789	:	IRELAND
+1790	:	MECKLENBURG-VORPOMMERN
+1791	:	MECKLENBURG-VORPOMMERN
+1792	:	HUMBERSIDE
+1793	:	Lomza
+1794	:	IRELAND
+1795	:	IRELAND
+1796	:	MECKLENBURG-VORPOMMERN
+1797	:	IRELAND
+1798	:	IRELAND
+1799	:	MECKLENBURG-VORPOMMERN
+1800	:	IRELAND
+1801	:	IRELAND
+1802	:	IRELAND
+1803	:	IRELAND
+1804	:	IRELAND
+1805	:	IRELAND
+1806	:	MECKLENBURG-VORPOMMERN
+1807	:	IRELAND
+1808	:	WEST YORKSHIRE
+1809	:	MECKLENBURG-VORPOMMERN
+1810	:	MECKLENBURG-VORPOMMERN
+1811	:	IRELAND
+1812	:	Bydgoszcz
+1813	:	IRELAND
+1814	:	Szczecin
+1815	:	IRELAND
+1816	:	MECKLENBURG-VORPOMMERN
+1817	:	MERSEYSIDE
+1818	:	WESER-EMS
+1819	:	IRELAND
+1820	:	IRELAND
+1821	:	Ostroleka
+1822	:	GREATER MANCHESTER
+1823	:	Szczecin
+1824	:	CLWYD
+1825	:	MECKLENBURG-VORPOMMERN
+1826	:	CLWYD
+1827	:	SOUTH YORKSHIRE
+1828	:	IRELAND
+1829	:	MECKLENBURG-VORPOMMERN
+1830	:	IRELAND
+1831	:	IRELAND
+1832	:	MERSEYSIDE
+1833	:	IRELAND
+1834	:	Torun
+1835	:	DERBYSHIRE
+1836	:	IRELAND
+1837	:	IRELAND
+1838	:	CHESHIRE
+1839	:	CLWYD
+1840	:	IRELAND
+1841	:	IRELAND
+1842	:	IRELAND
+1843	:	IRELAND
+1844	:	IRELAND
+1845	:	Szczecin
+1846	:	IRELAND
+1847	:	IRELAND
+1848	:	LINCOLNSHIRE
+1849	:	IRELAND
+1850	:	IRELAND
+1851	:	WESER-EMS
+1852	:	IRELAND
+1853	:	Ciechanow
+1854	:	IRELAND
+1855	:	Pila
+1856	:	MERSEYSIDE
+1857	:	LUENEBURG
+1858	:	WESER-EMS
+1859	:	IRELAND
+1860	:	IRELAND
+1861	:	WESER-EMS
+1862	:	IRELAND
+1863	:	WESER-EMS
+1864	:	HAMBURG
+1865	:	WESER-EMS
+1866	:	WESER-EMS
+1867	:	WESER-EMS
+1868	:	WESER-EMS
+1869	:	SHROPSHIRE
+1870	:	WESER-EMS
+1871	:	IRELAND
+1872	:	WESER-EMS
+1873	:	IRELAND
+1874	:	IRELAND
+1875	:	WESER-EMS
+1876	:	IRELAND
+1877	:	WESER-EMS
+1878	:	IRELAND
+1879	:	IRELAND
+1880	:	Wloclawek
+1881	:	GRONINGEN
+1882	:	GRONINGEN
+1883	:	GRONINGEN
+1884	:	FRIESLAND
+1885	:	BRANDENBURG
+1886	:	CLWYD
+1887	:	Gorzow
+1888	:	FRIESLAND
+1889	:	FRIESLAND
+1890	:	FRIESLAND
+1891	:	GRONINGEN
+1892	:	IRELAND
+1893	:	FRIESLAND
+1894	:	IRELAND
+1895	:	Plock
+1896	:	Siedlce
+1897	:	FRIESLAND
+1898	:	FRIESLAND
+1899	:	IRELAND
+1900	:	LEICESTERSHIRE
+1901	:	IRELAND
+1902	:	IRELAND
+1903	:	IRELAND
+1904	:	IRELAND
+1905	:	IRELAND
+1906	:	IRELAND
+1907	:	IRELAND
+1908	:	EAST ANGLIA
+1909	:	IRELAND
+1910	:	NOORD-HOLLAND
+1911	:	IRELAND
+1912	:	IRELAND
+1913	:	IRELAND
+1914	:	BREMEN
+1915	:	DRENTHE
+1916	:	IRELAND
+1917	:	Biala Podlaska
+1918	:	Warszawa
+1919	:	WEST MIDLANDS (COUNTY)
+1920	:	UNKNOWN
+1921	:	HEREFORD
+1922	:	IRELAND
+1923	:	FRIESLAND
+1924	:	IRELAND
+1925	:	IRELAND
+1926	:	IRELAND
+1927	:	IRELAND
+1928	:	IRELAND
+1929	:	IRELAND
+1930	:	IRELAND
+1931	:	Poznan
+1932	:	IRELAND
+1933	:	MAGDEBURG
+1934	:	IRELAND
+1935	:	NOORD-HOLLAND
+1936	:	HANNOVER
+1937	:	IRELAND
+1938	:	IRELAND
+1939	:	IRELAND
+1940	:	IRELAND
+1941	:	IRELAND
+1942	:	IRELAND
+1943	:	IRELAND
+1944	:	Skierniewice
+1945	:	IRELAND
+1946	:	Konin
+1947	:	IRELAND
+1948	:	IRELAND
+1949	:	OVERIJSSEL
+1950	:	IRELAND
+1951	:	FLEVOLAND
+1952	:	IRELAND
+1953	:	IRELAND
+1954	:	IRELAND
+1955	:	IRELAND
+1956	:	IRELAND
+1957	:	BRAUNSCHWEIG
+1958	:	IRELAND
+1959	:	BERLIN
+1960	:	FLEVOLAND
+1961	:	BEDFORDSHIRE
+1962	:	BERKS
+1963	:	AVON
+1964	:	GWENT
+1965	:	GELDERLAND
+1966	:	Radom
+1967	:	Zielona Gora
+1968	:	Lublin
+1969	:	DETMOLD
+1970	:	Chelm
+1971	:	Lodz
+1972	:	MUENSTER
+1973	:	Kalisz
+1974	:	Sieradz
+1975	:	ZUID-HOLLAND
+1976	:	Leszno
+1977	:	ESSEX
+1978	:	UTRECHT
+1979	:	Piotrkow
+1980	:	DESSAU
+1981	:	ESSEX
+1982	:	ESSEX
+1983	:	ESSEX
+1984	:	ESSEX
+1985	:	ESSEX
+1986	:	ESSEX
+1987	:	ZUID-HOLLAND
+1988	:	GREATER LONDON
+1989	:	UNKNOWN
+1990	:	ESSEX
+1991	:	ESSEX
+1992	:	ESSEX
+1993	:	Legnica
+1994	:	Wroclaw
+1995	:	DUESSELDORF
+1996	:	ZUID-HOLLAND
+1997	:	HALLE
+1998	:	DORSET
+1999	:	CORNWALL
+2001	:	NOORD-BRABANT
+2002	:	Zamosc
+2004	:	SURREY
+2005	:	ZUID-HOLLAND
+2006	:	LIMBURG
+2007	:	HAMPSHIRE
+2008	:	ZEELAND
+2009	:	Kielce
+2010	:	KENT
+2011	:	ARNSBERG
+2012	:	Tarnobrzeg
+2013	:	LEIPZIG
+2014	:	DRESDEN
+2015	:	KENT
+2016	:	Jelenia Gora
+2017	:	KENT
+2018	:	KENT
+2019	:	KENT
+2020	:	THURINGEN
+2021	:	KASSEL
+2022	:	UNKNOWN
+2023	:	Czestochowa
+2024	:	ANTWERPEN
+2025	:	UNKNOWN
+2026	:	ZEELAND
+2027	:	ANTWERPEN
+2028	:	WEST-VLAANDEREN
+2029	:	Opole
+2030	:	WEST-VLAANDEREN
+2031	:	DRESDEN
+2032	:	OOST-VLAANDEREN
+2033	:	LIMBURG
+2034	:	NORD - PAS-DE-CALAIS
+2035	:	Walbrzych
+2036	:	KOELN
+2037	:	Przemysl
+2038	:	HAMPSHIRE
+2039	:	HAMPSHIRE
+2040	:	Severocesky kraj
+2041	:	CHEMNITZ
+2042	:	Rzeszow
+2043	:	UNKNOWN
+2044	:	Katowice
+2045	:	BRUXELLES-BRUSSEL
+2046	:	GIESSEN
+2047	:	Vychodocesky kraj
+2048	:	CORNWALL
+2049	:	CORNWALL
+2050	:	HAINAUT
+2051	:	CORNWALL
+2052	:	Tarnow
+2053	:	KOBLENZ
+2054	:	CORNWALL
+2055	:	CORNWALL
+2056	:	HAINAUT
+2057	:	CORNWALL
+2058	:	CORNWALL
+2059	:	Krakow
+2060	:	NIVELLES
+2061	:	LIEGE
+2062	:	LIMBURG
+2063	:	Stredocesky kraj
+2064	:	NAMUR
+2065	:	Severomoravsky kraj
+2066	:	PICARDIE
+2067	:	Bielsko-Biala
+2068	:	UNTERFRANKEN
+2069	:	Krosno
+2070	:	OBERFRANKEN
+2071	:	Zapadocesky kraj
+2072	:	DARMSTADT
+2073	:	LUXEMBOURG
+2074	:	TRIER
+2075	:	Nowy Sacz
+2076	:	HAUTE-NORMANDIE
+2077	:	Praha
+2078	:	UNITED KINGDOM
+2079	:	CHAMPAGNE-ARDENNE
+2080	:	BASSE-NORMANDIE
+2081	:	LUXEMBOURG (GRAND-DUCHE)
+2082	:	Ychodoslovenski kraj
+2083	:	OBERPFALZ
+2084	:	RHEINHESSEN-PFALZ
+2085	:	Stredolslovensky kraj
+2086	:	UNITED KINGDOM
+2087	:	Jihomoravsky kraj
+2088	:	UNITED KINGDOM
+2089	:	MITTELFRANKEN
+2090	:	Jihocesky kraj
+2091	:	STUTTGART
+2092	:	LORRAINE
+2093	:	KARLSRUHE
+2094	:	SAARLAND
+2095	:	Botosani
+2096	:	BRETAGNE
+2097	:	ILE DE FRANCE
+2098	:	BRETAGNE
+2099	:	BRETAGNE
+2100	:	Zapadoslovensky kraj
+2101	:	BASSE-NORMANDIE
+2102	:	BRETAGNE
+2103	:	NIEDERBAYERN
+2104	:	Borsod-Abauj-Zemplen
+2105	:	Suceava
+2106	:	CENTRE
+2107	:	Szabolcs-Szatar-Bereg
+2108	:	Nieder”sterreich
+2109	:	OBERBAYERN
+2110	:	ALSACE
+2111	:	Iasi
+2112	:	SCHWABEN
+2113	:	Maramures
+2114	:	Satu Mare
+2115	:	PAYS DE LA LOIRE
+2116	:	Ober”sterreich
+2117	:	Bistrita-Nasaud
+2118	:	Nograd
+2119	:	FREIBURG
+2120	:	Heves
+2121	:	TUEBINGEN
+2122	:	Neamt
+2123	:	Hajdu-Bihar
+2124	:	Wien
+2125	:	BOURGOGNE
+2126	:	Bratislava
+2127	:	Vaslui
+2128	:	Pest
+2129	:	Burgenland
+2130	:	Cluj
+2131	:	Bihor
+2132	:	Harghita
+2133	:	BRETAGNE
+2134	:	Salaj
+2135	:	Gy”r-Moson-Sopron
+2136	:	Jasz-Nagykun-Szolnok
+2137	:	Mures
+2138	:	Bacau
+2139	:	Komarom-Esztergom
+2140	:	Salzburg
+2141	:	FRANCHE-COMTE
+2142	:	Fejer
+2143	:	BRETAGNE
+2144	:	BRETAGNE
+2145	:	Steiermark
+2146	:	Fejer
+2147	:	BRETAGNE
+2148	:	Bekes
+2149	:	Veszprem
+2150	:	UNKNOWN
+2151	:	Schaffhausen
+2152	:	Tirol
+2153	:	Galati
+2154	:	Vas
+2155	:	Thurgau
+2156	:	Schaffhausen
+2157	:	Thurgau
+2158	:	Zurich
+2159	:	Vrancea
+2160	:	Aargau
+2161	:	Bacs-Kiskun
+2162	:	Basel-Stadt
+2163	:	Zurich
+2164	:	Voralberg
+2165	:	Basel-Landschaft
+2166	:	Covasna
+2167	:	Sankt Gallen
+2168	:	Bern/Berne
+2169	:	POITOU-CHARENTES
+2170	:	Basel-Stadt
+2171	:	Solothurn
+2172	:	Sankt Gallen
+2173	:	Appenzell Ausserrhoden
+2174	:	Alba
+2175	:	Basel-Stadt
+2176	:	Appenzell Innerrhoden
+2177	:	Appenzell Innerrhoden
+2178	:	Arad
+2179	:	Csongrad
+2180	:	Appenzell Innerrhoden
+2181	:	UNKNOWN
+2182	:	Brasov
+2183	:	Sibiu
+2184	:	Zala
+2185	:	Somogy
+2186	:	Tulcea
+2187	:	Luzern
+2188	:	Tolna
+2189	:	Lichtenstein
+2190	:	Zug
+2191	:	Schwyz
+2192	:	Tirol
+2193	:	Buzau
+2194	:	K„rnten
+2195	:	Neuchatel
+2196	:	Hunedoara
+2197	:	UNKNOWN
+2198	:	Glarus
+2199	:	UNKNOWN
+2200	:	UNKNOWN
+2201	:	TRENTINO-ALTO ADIGE
+2202	:	Slovenija
+2203	:	UNKNOWN
+2204	:	Schwyz
+2205	:	Graubnden/Grigioni/Grischun
+2206	:	Braila
+2207	:	UNKNOWN
+2208	:	Fribourg/Freiburg
+2209	:	Midwalden
+2210	:	Schwyz
+2211	:	Neuchatel
+2212	:	Uri
+2213	:	Obwalden
+2214	:	UNKNOWN
+2215	:	AUVERGNE
+2216	:	Vaud
+2217	:	Fribourg/Freiburg
+2218	:	Neuchatel
+2219	:	Neuchatel
+2220	:	Obwalden
+2221	:	Prahova
+2222	:	Baranya
+2223	:	Fribourg/Freiburg
+2224	:	Hrvatska
+2225	:	Timis
+2226	:	Fribourg/Freiburg
+2227	:	Arges
+2228	:	UNKNOWN
+2229	:	UNKNOWN
+2230	:	POITOU-CHARENTES
+2231	:	VENETO
+2232	:	Vojvodina
+2233	:	FRIULI-VENEZIA GIULIA
+2234	:	LIMOUSIN
+2235	:	Vilcea
+2236	:	Valais/Wallis
+2237	:	Dimbovita
+2238	:	LOMBARDIA
+2239	:	Ticino
+2240	:	RHONE-ALPES
+2241	:	UNKNOWN
+2242	:	Calarasi
+2243	:	Calarasi
+2244	:	PIEMONTE
+2245	:	Caras-Severin
+2246	:	Ialomita
+2247	:	Vaud
+2248	:	Vaud
+2249	:	GenŠve
+2250	:	Gorj
+2251	:	Bucuresti
+2252	:	Constanta
+2253	:	AQUITAINE
+2254	:	VALLE D'AOSTA
+2255	:	Olt
+2256	:	Mehedinti
+2257	:	FRIULI-VENEZIA GIULIA
+2258	:	Giurgiu
+2259	:	FRIULI-VENEZIA GIULIA
+2260	:	FRIULI-VENEZIA GIULIA
+2261	:	Teleorman
+2262	:	Dolj
+2263	:	Razgrad
+2264	:	Varna
+2265	:	Srbija
+2266	:	Bosna i Hercegovina
+2267	:	Giurgiu
+2268	:	Hrvatska
+2269	:	VENETO
+2270	:	Hrvatska
+2271	:	VENETO
+2272	:	Razgrad
+2273	:	Hrvatska
+2274	:	MIDI-PYRENEES
+2275	:	Varna
+2276	:	PROVENCE-ALPES-COTE D'AZUR
+2277	:	VENETO
+2278	:	Varna
+2279	:	EMILIA-ROMAGNA
+2280	:	Hrvatska
+2281	:	LANGUEDOC-ROUSSILLON
+2282	:	Hrvatska
+2283	:	Mihajlovgrad
+2284	:	VENETO
+2285	:	GALICIA
+2286	:	VENETO
+2287	:	Hrvatska
+2288	:	Hrvatska
+2289	:	Hrvatska
+2290	:	VENETO
+2291	:	Hrvatska
+2292	:	Hrvatska
+2293	:	Razgrad
+2294	:	Hrvatska
+2295	:	Lovec
+2296	:	Lovec
+2297	:	Hrvatska
+2298	:	Hrvatska
+2299	:	Mihajlovgrad
+2300	:	Hrvatska
+2301	:	Mihajlovgrad
+2302	:	ASTURIAS
+2303	:	Hrvatska
+2304	:	LIGURIA
+2305	:	Hrvatska
+2306	:	Hrvatska
+2307	:	Hrvatska
+2308	:	Hrvatska
+2309	:	Hrvatska
+2310	:	Hrvatska
+2311	:	Hrvatska
+2312	:	Hrvatska
+2313	:	Lovec
+2314	:	Burgas
+2315	:	PROVENCE-ALPES-COTE D'AZUR
+2316	:	Hrvatska
+2317	:	Hrvatska
+2318	:	TOSCANA
+2319	:	Hrvatska
+2320	:	Hrvatska
+2321	:	Burgas
+2322	:	Hrvatska
+2323	:	Lovec
+2324	:	Hrvatska
+2325	:	Hrvatska
+2326	:	Hrvatska
+2327	:	Hrvatska
+2328	:	Hrvatska
+2329	:	Hrvatska
+2330	:	CANTABRIA
+2331	:	Hrvatska
+2332	:	Hrvatska
+2333	:	Burgas
+2334	:	CASTILLA - LEON
+2335	:	Hrvatska
+2336	:	Grad Sofija (mun.)
+2337	:	Hrvatska
+2338	:	PAIS VASCO
+2339	:	Haskovo
+2340	:	Hrvatska
+2341	:	San Marino
+2342	:	Hrvatska
+2343	:	Hrvatska
+2344	:	Hrvatska
+2345	:	MARCHE
+2346	:	Hrvatska
+2347	:	Hrvatska
+2348	:	Crna Gora
+2349	:	Hrvatska
+2350	:	CANTABRIA
+2351	:	Hrvatska
+2352	:	Hrvatska
+2353	:	Plovdiv
+2354	:	Hrvatska
+2355	:	Hrvatska
+2356	:	Hrvatska
+2357	:	Hrvatska
+2358	:	Hrvatska
+2359	:	Hrvatska
+2360	:	Kosovo
+2361	:	Hrvatska
+2362	:	Hrvatska
+2363	:	Hrvatska
+2364	:	Sofija - city
+2365	:	NAVARRA
+2366	:	Grad Sofija (mun.)
+2367	:	Hrvatska
+2368	:	MIDI-PYRENEES
+2369	:	Plovdiv
+2370	:	MIDI-PYRENEES
+2371	:	Hrvatska
+2372	:	Hrvatska
+2373	:	Trkiye
+2374	:	UMBRIA
+2375	:	Hrvatska
+2376	:	Hrvatska
+2377	:	NORTE
+2378	:	Hrvatska
+2379	:	Haskovo
+2380	:	Grad Sofija (mun.)
+2381	:	Hrvatska
+2382	:	CASTILLA - LEON
+2383	:	Hrvatska
+2384	:	Hrvatska
+2385	:	ARAGON
+2386	:	Hrvatska
+2387	:	Hrvatska
+2388	:	RIOJA
+2389	:	Hrvatska
+2390	:	Hrvatska
+2391	:	Hrvatska
+2392	:	Hrvatska
+2393	:	Hrvatska
+2394	:	Grad Sofija (mun.)
+2395	:	Shqip‰ria
+2396	:	CATALUNA
+2397	:	Makedonija
+2398	:	Haskovo
+2399	:	Hrvatska
+2400	:	ANATOLIKI MAKEDONIA
+2401	:	Hrvatska
+2402	:	Hrvatska
+2403	:	Plovdiv
+2404	:	TOSCANA
+2405	:	Hrvatska
+2406	:	Hrvatska
+2407	:	Hrvatska
+2408	:	Hrvatska
+2409	:	PROVENCE-ALPES-COTE D'AZUR
+2410	:	Hrvatska
+2411	:	Hrvatska
+2412	:	Hrvatska
+2413	:	Hrvatska
+2414	:	Hrvatska
+2415	:	PROVENCE-ALPES-COTE D'AZUR
+2416	:	Hrvatska
+2417	:	Hrvatska
+2418	:	PROVENCE-ALPES-COTE D'AZUR
+2419	:	PROVENCE-ALPES-COTE D'AZUR
+2420	:	Hrvatska
+2421	:	CORSE
+2422	:	ABRUZZI
+2423	:	Andorra
+2424	:	TOSCANA
+2425	:	LAZIO
+2426	:	TOSCANA
+2427	:	CENTRO
+2428	:	TOSCANA
+2429	:	KENTRIKI MAKEDONIA
+2430	:	Crna Gora
+2431	:	PUGLIA
+2432	:	PUGLIA
+2433	:	PUGLIA
+2434	:	PUGLIA
+2435	:	TOSCANA
+2436	:	MOLISE
+2437	:	PUGLIA
+2438	:	CASTILLA - LA MANCHA
+2439	:	ANATOLIKI MAKEDONIA
+2440	:	MADRID
+2441	:	ANATOLIKI MAKEDONIA
+2442	:	DYTIKI MAKEDONIA
+2443	:	CAMPANIA
+2444	:	Trkiye
+2445	:	EXTREMADURA
+2446	:	BASILICATA
+2447	:	VOREIO AIGAIO
+2448	:	LISBOA E VALE DO TEJO
+2449	:	SARDEGNA
+2450	:	COMUNIDAD VALENCIANA
+2451	:	LAZIO
+2452	:	THESSALIA
+2453	:	IPEIROS
+2454	:	LAZIO
+2455	:	LAZIO
+2456	:	ALENTEJO
+2457	:	CAMPANIA
+2458	:	CAMPANIA
+2459	:	CAMPANIA
+2460	:	VOREIO AIGAIO
+2461	:	VOREIO AIGAIO
+2462	:	COMUNIDAD VALENCIANA
+2463	:	CAMPANIA
+2464	:	THESSALIA
+2465	:	THESSALIA
+2466	:	THESSALIA
+2467	:	IONIA NISIA
+2468	:	CALABRIA
+2469	:	IONIA NISIA
+2470	:	IONIA NISIA
+2471	:	THESSALIA
+2472	:	THESSALIA
+2473	:	THESSALIA
+2474	:	BALEARES
+2475	:	THESSALIA
+2476	:	THESSALIA
+2477	:	VOREIO AIGAIO
+2478	:	BALEARES
+2479	:	STEREA ELLADA
+2480	:	BALEARES
+2481	:	STEREA ELLADA
+2482	:	VOREIO AIGAIO
+2483	:	VOREIO AIGAIO
+2484	:	VOREIO AIGAIO
+2485	:	VOREIO AIGAIO
+2486	:	VOREIO AIGAIO
+2487	:	VOREIO AIGAIO
+2488	:	BALEARES
+2489	:	DYTIKI ELLADA
+2490	:	IONIA NISIA
+2491	:	BALEARES
+2492	:	IONIA NISIA
+2493	:	ANDALUCIA
+2494	:	BALEARES
+2495	:	IONIA NISIA
+2496	:	ATTIKI
+2497	:	BALEARES
+2498	:	VOREIO AIGAIO
+2499	:	BALEARES
+2500	:	IONIA NISIA
+2501	:	BALEARES
+2502	:	IONIA NISIA
+2503	:	IONIA NISIA
+2504	:	BALEARES
+2505	:	BALEARES
+2506	:	BALEARES
+2507	:	MURCIA
+2508	:	IONIA NISIA
+2509	:	NOTIO AIGAIO
+2510	:	IONIA NISIA
+2511	:	VOREIO AIGAIO
+2512	:	VOREIO AIGAIO
+2513	:	IONIA NISIA
+2514	:	BALEARES
+2515	:	BALEARES
+2516	:	DYTIKI ELLADA
+2517	:	DYTIKI ELLADA
+2518	:	IONIA NISIA
+2519	:	VOREIO AIGAIO
+2520	:	BALEARES
+2521	:	BALEARES
+2522	:	BALEARES
+2523	:	BALEARES
+2524	:	NOTIO AIGAIO
+2525	:	BALEARES
+2526	:	PELOPONNISOS
+2527	:	DYTIKI ELLADA
+2528	:	PELOPONNISOS
+2529	:	ATTIKI
+2530	:	DYTIKI ELLADA
+2531	:	ALGARVE
+2532	:	SICILIA
+2533	:	NOTIO AIGAIO
+2534	:	NOTIO AIGAIO
+2535	:	NOTIO AIGAIO
+2536	:	NOTIO AIGAIO
+2537	:	NOTIO AIGAIO
+2538	:	NOTIO AIGAIO
+2539	:	NOTIO AIGAIO
+2540	:	SICILIA
+2541	:	NOTIO AIGAIO
+2542	:	PELOPONNISOS
+2543	:	SICILIA
+2544	:	NOTIO AIGAIO
+2545	:	NOTIO AIGAIO
+2546	:	SICILIA
+2547	:	SICILIA
+2548	:	NOTIO AIGAIO
+2549	:	PELOPONNISOS
+2550	:	NOTIO AIGAIO
+2551	:	SICILIA
+2552	:	SICILIA
+2553	:	NOTIO AIGAIO
+2554	:	NOTIO AIGAIO
+2556	:	SICILIA
+2557	:	NOTIO AIGAIO
+2558	:	NOTIO AIGAIO
+2559	:	IONIA NISIA
+2560	:	PELOPONNISOS
+2561	:	ATTIKI
+2562	:	NOTIO AIGAIO
+2563	:	NOTIO AIGAIO
+2564	:	NOTIO AIGAIO
+2565	:	NOTIO AIGAIO
+2566	:	ANDALUCIA
+2567	:	SICILIA
+2568	:	ALGARVE
+2569	:	NOTIO AIGAIO
+2570	:	NOTIO AIGAIO
+2571	:	ALGARVE
+2572	:	PELOPONNISOS
+2573	:	ALGARVE
+2574	:	NOTIO AIGAIO
+2575	:	ALGARVE
+2576	:	NOTIO AIGAIO
+2577	:	PELOPONNISOS
+2578	:	NOTIO AIGAIO
+2579	:	NOTIO AIGAIO
+2580	:	NOTIO AIGAIO
+2581	:	NOTIO AIGAIO
+2582	:	NOTIO AIGAIO
+2583	:	NOTIO AIGAIO
+2584	:	NOTIO AIGAIO
+2585	:	NOTIO AIGAIO
+2586	:	PELOPONNISOS
+2587	:	NOTIO AIGAIO
+2588	:	NOTIO AIGAIO
+2589	:	NOTIO AIGAIO
+2590	:	NOTIO AIGAIO
+2591	:	NOTIO AIGAIO
+2592	:	PELOPONNISOS
+2593	:	NOTIO AIGAIO
+2594	:	NOTIO AIGAIO
+2595	:	NOTIO AIGAIO
+2596	:	SICILIA
+2597	:	NOTIO AIGAIO
+2598	:	NOTIO AIGAIO
+2599	:	NOTIO AIGAIO
+2600	:	SICILIA
+2601	:	NOTIO AIGAIO
+2602	:	SICILIA
+2603	:	NOTIO AIGAIO
+2604	:	NOTIO AIGAIO
+2605	:	NOTIO AIGAIO
+2606	:	NOTIO AIGAIO
+2607	:	NOTIO AIGAIO
+2608	:	NOTIO AIGAIO
+2609	:	PELOPONNISOS
+2610	:	NOTIO AIGAIO
+2611	:	NOTIO AIGAIO
+2612	:	NOTIO AIGAIO
+2613	:	PELOPONNISOS
+2614	:	PELOPONNISOS
+2615	:	PELOPONNISOS
+2616	:	NOTIO AIGAIO
+2617	:	NOTIO AIGAIO
+2618	:	ATTIKI
+2619	:	NOTIO AIGAIO
+2620	:	KRITI
+2621	:	SICILIA
+2622	:	KRITI
+2623	:	KRITI
+2624	:	KRITI
+2625	:	KRITI
+2626	:	KRITI
+2627	:	CANARIAS
+2628	:	CANARIAS
+2629	:	CANARIAS
+2630	:	CANARIAS
+2631	:	CANARIAS
+2632	:	CANARIAS
+2633	:	CANARIAS
+2634	:	CANARIAS
+2635	:	CANARIAS
+2636	:	CANARIAS
+2637	:	CANARIAS
+2638	:	UNKNOWN
+2639	:	UNKNOWN
+5280	:	UNKNOWN
+5281	:	UNKNOWN
+5282	:	UNKNOWN
+5283	:	UNKNOWN
+5284	:	UNKNOWN
+5285	:	UNKNOWN
+5286	:	UNKNOWN
+5287	:	UNKNOWN
+5288	:	UNKNOWN
+5289	:	UNKNOWN
+5290	:	UNKNOWN
+EOI	:	UNKNOWN
+EOS	:	UNKNOWN
diff --git a/org.eclipse.stem.utility/parameters/targets/MidEastCountries.txt b/org.eclipse.stem.utility/parameters/targets/MidEastCountries.txt
new file mode 100644
index 0000000..2a67b04
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/MidEastCountries.txt
@@ -0,0 +1,12 @@
+C:\diva\MidEast\Bahrain\Bahrain.txt
+C:\diva\MidEast\Irak\Irak.txt
+C:\diva\MidEast\Iran\Iran.txt
+C:\diva\MidEast\Jordan\Jordan.txt
+C:\diva\MidEast\Kuwait\Kuwait.txt
+C:\diva\MidEast\Lebanon\Lebanon.txt
+C:\diva\MidEast\Oman\Oman.txt
+C:\diva\MidEast\Qatar\Qatar.txt
+C:\diva\MidEast\SaudiArabia.txt
+C:\diva\MidEast\Syria\Syria.txt
+C:\diva\MidEast\UnitedArabEmirates\UnitedArabEmirates.txt
+C:\diva\MidEast\Yemen\Yemen.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/NorthAmericanCountries.txt b/org.eclipse.stem.utility/parameters/targets/NorthAmericanCountries.txt
new file mode 100644
index 0000000..e454244
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/NorthAmericanCountries.txt
@@ -0,0 +1,2 @@
+C:\diva\NorthAmerica\USA\USA.txt
+C:\diva\NorthAmerica\Mexico\Mexico.txt
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/targets/README.txt b/org.eclipse.stem.utility/parameters/targets/README.txt
new file mode 100644
index 0000000..3a1d25a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/README.txt
@@ -0,0 +1,3 @@
+
+
+The files in this folder are used by PropertiesGeneratorto generate the properties files (names,area, and population) for each country.
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/targets/RestOfAsiaCountries.txt b/org.eclipse.stem.utility/parameters/targets/RestOfAsiaCountries.txt
new file mode 100644
index 0000000..1a2c272
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/RestOfAsiaCountries.txt
@@ -0,0 +1,13 @@
+C:\diva\RestOfAsia\Afghanistan\Afghanistan.txt
+C:\diva\RestOfAsia\Armenia\Armenia.txt
+C:\diva\RestOfAsia\Azerbaijan\Azerbaijan.txt
+C:\diva\RestOfAsia\Kazakhstan\Kazakhstan.txt
+C:\diva\RestOfAsia\Kyrgyzstan\Kyrgyzstan.txt
+C:\diva\RestOfAsia\Macedonia\Macedonia.txt
+C:\diva\RestOfAsia\Moldova\Moldova.txt
+C:\diva\RestOfAsia\Mongolia\Mongolia.txt
+C:\diva\RestOfAsia\Pakistan\Pakistan.txt
+C:\diva\RestOfAsia\Tajikistan\Tajikistan.txt
+C:\diva\RestOfAsia\Turkey\Turkey.txt
+C:\diva\RestOfAsia\Turkmenistan\Turkmenistan.txt
+C:\diva\RestOfAsia\Uzbekistan\Uzbekistan.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/SouthAmericanCountries.txt b/org.eclipse.stem.utility/parameters/targets/SouthAmericanCountries.txt
new file mode 100644
index 0000000..1daa4ad
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/SouthAmericanCountries.txt
@@ -0,0 +1,13 @@
+C:\diva\SouthAmerica\Argentina\Argentina.txt
+C:\diva\SouthAmerica\Bolivia\Bolivia.txt
+C:\diva\SouthAmerica\Brazil\Brazil.txt
+C:\diva\SouthAmerica\Chile\Chile.txt
+C:\diva\SouthAmerica\Colombia\Colombia.txt
+C:\diva\SouthAmerica\Ecuador\Ecuador.txt
+C:\diva\SouthAmerica\FaulklandIslands\FaulklandIslands.txt
+C:\diva\SouthAmerica\Guyana\Guyana.txt
+C:\diva\SouthAmerica\Paraguay\Paraguay.txt
+C:\diva\SouthAmerica\Peru\Peru.txt
+C:\diva\SouthAmerica\Suriname\Suriname.txt
+C:\diva\SouthAmerica\Uruguay\Uruguay.txt
+C:\diva\SouthAmerica\Venezuela\Venezuela.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/SouthAsianCountries.txt b/org.eclipse.stem.utility/parameters/targets/SouthAsianCountries.txt
new file mode 100644
index 0000000..f4317e3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/SouthAsianCountries.txt
@@ -0,0 +1,18 @@
+C:\diva\SouthAsia\Bangladesh\Bangladesh.txt
+C:\diva\SouthAsia\Bhutan\Bhutan.txt
+C:\diva\SouthAsia\Brunei\Brunei.txt
+C:\diva\SouthAsia\Cambodia\Cambodia.txt
+C:\diva\SouthAsia\China\China.txt
+C:\diva\SouthAsia\India\India.txt
+C:\diva\SouthAsia\Indonesia\Indonesia.txt
+C:\diva\SouthAsia\Japan\Japan.txt
+C:\diva\SouthAsia\Laos\Laos.txt
+C:\diva\SouthAsia\Macau\Macau.txt
+C:\diva\SouthAsia\Myanmar\Myanmar.txt
+C:\diva\SouthAsia\Nepal\Nepal.txt
+C:\diva\SouthAsia\NorthKorea\NorthKorea.txt
+C:\diva\SouthAsia\Philippines\Philippines.txt
+C:\diva\SouthAsia\Singapore\Singapore.txt
+C:\diva\SouthAsia\SouthKorea\SouthKorea.txt
+C:\diva\SouthAsia\Thailand\Thailand.txt
+C:\diva\SouthAsia\Vietnam\Vietnam.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/country_names.txt b/org.eclipse.stem.utility/parameters/targets/country_names.txt
new file mode 100644
index 0000000..d834cc5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/country_names.txt
@@ -0,0 +1,163 @@
+Canada
+Australia
+Zaire
+Zimbabwe
+Belarus
+Belize
+Botswana
+Cameroon
+Costa Rica
+El Salvador
+Estonia
+Ethiopia
+Guatemala
+Honduras
+Latvia
+Mali
+Mauritania
+Nicaragua
+Panama
+Mali
+Papua New Guinea
+Guinea Bissau
+Macedonia
+Moldovia
+Albania
+Andorra
+Austria
+Belgium
+Bosnia and Herzegovina
+Bulgaria
+Croatia
+Czech Republic
+Denmark
+Faroe Islands
+Finland
+France
+Germany
+Greece
+Hungary
+Ireland
+Spain
+Switzerland
+United Kingdom
+Iceland
+Italy
+Liechtenstein
+Luxembourg
+Netherlands
+Norway
+Poland
+Portugal
+Romania
+Russia
+San Marino
+Slovenia
+Sweden
+United Kingdom
+Yugoslavia
+Algeria
+Angola
+Armenia
+Benin
+BurkinaFaso
+Burundi
+Brunei
+Cape Verde
+Central African Republic
+Chad
+Congo
+Comoros
+Egypt
+Equatorial Guinea
+Eritrea
+Gabon
+Gambia
+Ghana
+Guinea
+Guinea Bissau
+Ivory Coast
+Kenya
+Lesotho
+Liberia
+Libya
+Madagascar
+Malawi
+Mauritius
+Morocco
+Mozambique
+Namibia
+Niger
+Nigeria
+Papua New Guinea
+Puerto Rico
+Rwanda
+Sao Tome and Principe
+Senegal
+Seychelles
+Sierra Leone
+Singapore
+South Africa
+Somalia
+Sudan
+Tanzania
+Togo
+Tunisia
+Uganda
+Zambia
+Bahrain
+Iraq
+Iran
+Jordan
+Kuwait
+Lebanon
+Oman
+Qatar
+Saudi Arabia
+Syria
+United Arab Emirates
+#UnitedArabEmirates
+Yemen
+Mexico
+Afghanistan
+Azerbaijan
+Kazakhstan
+Kyrgyzstan
+Macedonia
+Moldovia
+Mongolia
+Pakistan
+Tajikistan
+Turkey
+Turkmenistan
+Uzbekistan
+Argentina
+Bolivia
+Brasil
+Chile
+Colombia
+Ecuador
+Guyana
+Paraguay
+Peru
+Suriname
+Uruguay
+Venezuela
+Bangladesh
+Bhutan
+Brunei
+Cambodia
+China
+India
+Indonesia
+Japan
+Laos
+Macau
+Myanmar
+Nepal
+North Korea
+Philippines
+South Korea
+Thailand
+Vietnam
+United States
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/targets/formatList.txt b/org.eclipse.stem.utility/parameters/targets/formatList.txt
new file mode 100644
index 0000000..fa78700
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/formatList.txt
@@ -0,0 +1 @@
+C:\diva\NorthAmerica\USA\Original\USA_Census.txt
diff --git a/org.eclipse.stem.utility/parameters/targets/groupedDataFiles.txt b/org.eclipse.stem.utility/parameters/targets/groupedDataFiles.txt
new file mode 100644
index 0000000..462e771
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/groupedDataFiles.txt
@@ -0,0 +1,149 @@
+## EUROPE
+#C:\diva\grouped\ALB\ALB_GROUPED.txt
+#C:\diva\grouped\AND\AND_GROUPED.txt
+#C:\diva\grouped\AUT\AUT_GROUPED.txt
+#C:\diva\grouped\BEL\BEL_GROUPED.txt
+#C:\diva\grouped\BIH\BIH_GROUPED.txt
+#C:\diva\grouped\BGR\BGR_GROUPED.txt
+C:\diva\grouped\CHE\CHE_GROUPED.txt
+#C:\diva\grouped\CZE\CZE_GROUPED.txt
+#C:\diva\grouped\DEU\DEU_GROUPED.txt
+#C:\diva\grouped\DNK\DNK_GROUPED.txt
+#C:\diva\grouped\ESP\ESP_GROUPED.txt
+#C:\diva\grouped\FIN\FIN_GROUPED.txt
+#C:\diva\grouped\FRA\FRA_GROUPED.txt
+##C:\diva\grouped\FAROE ISLANDS\FAROE ISLANDS.txt
+#C:\diva\grouped\GBR\GBR_GROUPED.txt
+#C:\diva\grouped\GRC\GRC_GROUPED.txt
+#C:\diva\grouped\HRV\HRV_GROUPED.txt
+#C:\diva\grouped\HUN\HUN_GROUPED.txt
+#C:\diva\grouped\IRL\IRL_GROUPED.txt
+#C:\diva\grouped\ISL\ISL_GROUPED.txt
+#C:\diva\grouped\ITA\ITA_GROUPED.txt
+#C:\diva\Europe\LIECHTENSTEIN\LIECHTENSTEIN.txt
+#C:\diva\grouped\LUX\LUX_GROUPED.txt
+#C:\diva\grouped\NLD\NLD_GROUPED.txt
+#C:\diva\grouped\NOR\NOR_GROUPED.txt
+#C:\diva\grouped\POL\POL_GROUPED.txt
+#C:\diva\grouped\PRT\PRT_GROUPED.txt
+#C:\diva\grouped\ROU\ROU_GROUPED.txt
+#C:\diva\grouped\RUS\RUS_GROUPED.txt
+#C:\diva\grouped\SMR\SMR_GROUPED.txt
+#C:\diva\grouped\SRB\SRB_GROUPED.txt
+#C:\diva\grouped\SVN\SVN_GROUPED.txt
+#C:\diva\grouped\SWE\SWE_GROUPED.txt
+## AFRICA
+#C:\diva\grouped\DZA\DZA_GROUPED.txt
+#C:\diva\grouped\AGO\AGO_GROUPED.txt
+#C:\diva\grouped\BEN\BEN_GROUPED.txt
+#C:\diva\grouped\BFA\BFA_GROUPED.txt	
+#C:\diva\grouped\BDI\BDI_GROUPED.txt	
+#C:\diva\grouped\CPV\CPV_GROUPED.txt	
+#C:\diva\grouped\CAF\CAF_GROUPED.txt
+#C:\diva\grouped\TCD\TCD_GROUPED.txt
+#C:\diva\grouped\COM\COM_GROUPED.txt
+#C:\diva\grouped\COG\COG_GROUPED.txt
+#C:\diva\grouped\EGY\EGY_GROUPED.txt
+#C:\diva\grouped\GNQ\GNQ_GROUPED.txt
+#C:\diva\grouped\ERI\ERI_GROUPED.txt
+#C:\diva\grouped\GAB\GAB_GROUPED.txt
+#C:\diva\grouped\GMB\GMB_GROUPED.txt
+#C:\diva\grouped\GNB\GNB_GROUPED.txt
+#C:\diva\grouped\GHA\GHA_GROUPED.txt
+#C:\diva\grouped\GHA\GHA_GROUPED.txt
+#C:\diva\grouped\GIN\GIN_GROUPED.txt
+#C:\diva\grouped\CIV\CIV_GROUPED.txt
+#C:\diva\grouped\KEN\KEN_GROUPED.txt
+#C:\diva\grouped\LSO\LSO_GROUPED.txt
+#C:\diva\grouped\LBR\LBR_GROUPED.txt
+#C:\diva\grouped\LBY\LBY_GROUPED.txt
+#C:\diva\grouped\MDG\MDG_GROUPED.txt
+#C:\diva\grouped\MWI\MWI_GROUPED.txt
+#C:\diva\grouped\MUS\MUS_GROUPED.txt
+#C:\diva\grouped\MAR\MAR_GROUPED.txt
+#C:\diva\grouped\MOZ\MOZ_GROUPED.txt
+#C:\diva\grouped\NAM\NAM_GROUPED.txt
+#C:\diva\grouped\NER\NER_GROUPED.txt
+#C:\diva\grouped\NGA\NGA_GROUPED.txt
+#C:\diva\grouped\PNG\PNG_GROUPED.txt
+#C:\diva\grouped\RWA\RWA_GROUPED.txt
+#C:\diva\grouped\STP\STP_GROUPED.txt
+#C:\diva\grouped\SEN\SEN_GROUPED.txt
+#C:\diva\grouped\SYC\SYC_GROUPED.txt
+#C:\diva\grouped\SLE\SLE_GROUPED.txt
+#C:\diva\grouped\SOM\SOM_GROUPED.txt
+#C:\diva\grouped\ZAF\ZAF_GROUPED.txt
+#C:\diva\grouped\SDN\SDN_GROUPED.txt
+#C:\diva\grouped\TZA\TZA_GROUPED.txt
+#C:\diva\grouped\TGO\TGO_GROUPED.txt
+#C:\diva\grouped\TUN\TUN_GROUPED.txt
+#C:\diva\grouped\UGA\UGA_GROUPED.txt
+#C:\diva\grouped\ZMB\ZMB_GROUPED.txt
+## MID EAST
+##C:\diva\grouped\BHR\BHR_GROUPED.txt
+##C:\diva\grouped\IRQ\IRQ_GROUPED.txt
+##C:\diva\grouped\IRN\IRN_GROUPED.txt
+##C:\diva\grouped\JOR\JOR_GROUPED.txt
+##C:\diva\grouped\KWT\KWT_GROUPED.txt
+##C:\diva\grouped\LBN\LBN_GROUPED.txt
+##C:\diva\grouped\OMN\OMN_GROUPED.txt
+##C:\diva\grouped\QAT\QAT_GROUPED.txt
+##C:\diva\grouped\SAU\SAU_GROUPED.txt
+##C:\diva\grouped\SYR\SYR_GROUPED.txt
+##C:\diva\grouped\ARE\ARE_GROUPED.txt
+##C:\diva\grouped\YEM\YEM_GROUPED.txt
+## ASIA
+##C:\diva\grouped\AFG\AFG_GROUPED.txt
+##C:\diva\grouped\ARM\ARM_GROUPED.txt
+##C:\diva\grouped\AZE\AZE_GROUPED.txt
+##C:\diva\grouped\KAZ\KAZ_GROUPED.txt
+##C:\diva\grouped\KGZ\KGZ_GROUPED.txt
+##C:\diva\grouped\MNG\MNG_GROUPED.txt
+#C:\diva\grouped\PAK\PAK_GROUPED.txt
+##C:\diva\grouped\TJK\TJK_GROUPED.txt
+##C:\diva\grouped\TUR\TUR_GROUPED.txt
+##C:\diva\grouped\TKM\TKM_GROUPED.txt
+##C:\diva\grouped\UZB\UZB_GROUPED.txt
+##C:\diva\RestOfAsia\MOLDOVA\Moldova.txt
+##C:\diva\RestOfAsia\MACEDONIA\Macedonia.txt
+## AMERICA
+#C:\diva\grouped\MEX\MEX_GROUPED.txt
+#C:\diva\grouped\USA\USA_GROUPED.txt
+C:\diva\grouped\CAN\CAN_GROUPED.txt
+#C:\diva\grouped\PRI\PRI_GROUPED.txt
+#C:\diva\grouped\ARG\ARG_GROUPED.txt
+#C:\diva\grouped\BOL\BOL_GROUPED.txt
+#C:\diva\grouped\BRA\BRA_GROUPED.txt
+#C:\diva\grouped\CHL\CHL_GROUPED.txt
+#C:\diva\grouped\COL\COL_GROUPED.txt
+#C:\diva\grouped\ECU\ECU_GROUPED.txt
+#C:\diva\grouped\GUY\GUY_GROUPED.txt
+#C:\diva\grouped\PRY\PRY_GROUPED.txt
+#C:\diva\grouped\PER\PER_GROUPED.txt
+#C:\diva\grouped\SUR\SUR_GROUPED.txt
+#C:\diva\grouped\URY\URY_GROUPED.txt
+#C:\diva\grouped\VEN\VEN_GROUPED.txt
+## SOUTH EAST ASIA
+##C:\diva\grouped\BGD\BGD_GROUPED.txt
+##C:\diva\grouped\BTN\BTN_GROUPED.txt
+##C:\diva\grouped\BRN\BRN_GROUPED.txt
+##C:\diva\grouped\KHM\KHM_GROUPED.txt
+#C:\diva\grouped\CHN\CHN_GROUPED.txt
+##C:\diva\grouped\IND\IND_GROUPED.txt
+##C:\diva\grouped\IDN\IDN_GROUPED.txt
+##C:\diva\grouped\JPN\JPN_GROUPED.txt
+##C:\diva\grouped\LAO\LAO_GROUPED.txt
+##C:\diva\grouped\MAC\MAC_GROUPED.txt
+##C:\diva\grouped\Myanmar\Myanmar.txt
+##C:\diva\grouped\NPL\NPL_GROUPED.txt
+##C:\diva\grouped\PRK\PRK_GROUPED.txt
+##C:\diva\grouped\PHL\PHL_GROUPED.txt
+##C:\diva\grouped\SGP\SGP_GROUPED.txt
+##C:\diva\grouped\KOR\KOR_GROUPED.txt
+##C:\diva\grouped\THA\THA_GROUPED.txt
+##C:\diva\grouped\VNM\VNM_GROUPED.txt
+
+
+
+
+
diff --git a/org.eclipse.stem.utility/parameters/targets/reduceList.txt b/org.eclipse.stem.utility/parameters/targets/reduceList.txt
new file mode 100644
index 0000000..1bc8e81
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/targets/reduceList.txt
@@ -0,0 +1,160 @@
+# List of countries to which we want to apply reduction (down sampling)
+# Use alpha 3 code to identify a country.
+# Jamies new ( 20 countries ) :
+#
+#CAN
+#AUS
+#ZAR
+#ZWE
+#BLR
+#BLZ
+#BWA
+#CMR
+#CRI
+#SLV
+#EST
+#ETH
+#GTM
+#HDN
+#LVA
+#LTU
+#MLI
+#MRT
+#NIC
+#PAN
+#
+ALB
+AND
+#AUT
+#BEL
+#BIH
+#BGR
+#HRV
+#CHE
+#CZE
+#DNK
+#FIN
+#FRA
+#DEU
+#GRC
+#GBR
+#HUN
+#ISL
+#IRL
+#ITA
+#LIE
+#LUX
+#NLD
+#NOR
+#POL
+#PRT
+#ROU
+#RUS
+#SMR
+#SVN
+#ESP
+#SWE
+#SRB
+#DZA
+#AGO
+#ARM
+#BEN
+#BFA
+#BDI
+#BRN
+#CPV
+#CAF
+#TCD
+#COG
+#COM
+#EGY
+#GNQ
+#ERI
+#GAB
+#GMB
+#GNB
+#GHA
+#CIV
+#KEN
+#LSO
+#LBR
+#LBY
+#MDG
+#MWI
+#MUS
+#MAR
+#MOZ
+#NAM
+#NER
+#NGA
+#PNG
+#PRI
+#RWA
+#STP
+#SEN
+#SYC
+#SLE
+#SGP
+#ZAF
+#SOM
+#SDN
+#TZA
+#TGO
+#TUN
+#UGA
+#ZMB
+#BHR
+#IRQ
+#IRN
+#JOR
+#KWT
+#LBN
+#OMN
+#QAT
+#SAU
+#SYR
+#ARE
+#YEM
+#MEX
+#AFG
+#AZE
+#KAZ
+#KGZ
+#MDA
+#MKD
+#MNG
+#PAK
+#TJK
+#TUR
+#TKM
+#UZB
+#ARG
+#BOL
+#BRA
+#CHL
+#COL
+#ECU
+#GIN
+#GUY
+#PRY
+#PER
+#SUR
+#URY
+#VEN
+#BGD
+#BTN
+#BRN
+#KHM
+#CHN
+#IND
+#IDN
+#JPN
+#LAO
+#MAC
+#NPL
+#PRK
+#PHL
+#KOR
+#THA
+#VNM
+#USA
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/urls/.txt b/org.eclipse.stem.utility/parameters/urls/.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Afghanistan.txt b/org.eclipse.stem.utility/parameters/urls/Afghanistan.txt
new file mode 100644
index 0000000..8eda0be
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Afghanistan.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.cso.gov.af/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=AFG&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/af.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Albania.txt b/org.eclipse.stem.utility/parameters/urls/Albania.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Albania.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Algeria.txt b/org.eclipse.stem.utility/parameters/urls/Algeria.txt
new file mode 100644
index 0000000..9a39ce1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Algeria.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.citypopulation.de/Algeria.html
+POP*http://www.ons.dz/English/indexag.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=DZA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ag.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Andorra.txt b/org.eclipse.stem.utility/parameters/urls/Andorra.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Andorra.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Angola.txt b/org.eclipse.stem.utility/parameters/urls/Angola.txt
new file mode 100644
index 0000000..1b44833
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Angola.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=AGO&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ao.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Argentina.txt b/org.eclipse.stem.utility/parameters/urls/Argentina.txt
new file mode 100644
index 0000000..8305774
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Argentina.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.indec.mecon.ar/default.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ARG&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ar.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Armenia.txt b/org.eclipse.stem.utility/parameters/urls/Armenia.txt
new file mode 100644
index 0000000..dce27f7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Armenia.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.armstat.am/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ARM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/am.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Australia.txt b/org.eclipse.stem.utility/parameters/urls/Australia.txt
new file mode 100644
index 0000000..7b5bb6e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Australia.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/australia.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Austria.txt b/org.eclipse.stem.utility/parameters/urls/Austria.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Austria.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Azerbaijan.txt b/org.eclipse.stem.utility/parameters/urls/Azerbaijan.txt
new file mode 100644
index 0000000..00c460b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Azerbaijan.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.azstat.org/indexen.php
+POP2*http://www.gender-az.org/shablon_en.shtml?doc/en/about/country
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=AZE&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/aj.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Bahrain.txt b/org.eclipse.stem.utility/parameters/urls/Bahrain.txt
new file mode 100644
index 0000000..5bef115
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bahrain.txt
@@ -0,0 +1,7 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BHR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ba.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
+
diff --git a/org.eclipse.stem.utility/parameters/urls/Bangladesh.txt b/org.eclipse.stem.utility/parameters/urls/Bangladesh.txt
new file mode 100644
index 0000000..d4bab67
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bangladesh.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*https://www.cia.gov/library/publications/the-world-factbook/
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BGD&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bg.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Belarus.txt b/org.eclipse.stem.utility/parameters/urls/Belarus.txt
new file mode 100644
index 0000000..a289149
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Belarus.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/belarus.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Belgium.txt b/org.eclipse.stem.utility/parameters/urls/Belgium.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Belgium.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Belize.txt b/org.eclipse.stem.utility/parameters/urls/Belize.txt
new file mode 100644
index 0000000..9770b5c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Belize.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/belize.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Benin.txt b/org.eclipse.stem.utility/parameters/urls/Benin.txt
new file mode 100644
index 0000000..7e87de4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Benin.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.insae-bj.org/
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BEN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bn.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Bhutan.txt b/org.eclipse.stem.utility/parameters/urls/Bhutan.txt
new file mode 100644
index 0000000..54f2696
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bhutan.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.citypopulation.de/Buthan.html
+POP*http://www.bhutancensus.gov.bt/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BTN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bt.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Bolivia.txt b/org.eclipse.stem.utility/parameters/urls/Bolivia.txt
new file mode 100644
index 0000000..217ed90
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bolivia.txt
@@ -0,0 +1,9 @@
+#
+CITYPOP*http://www.citypopulation.de/Bolivia.html
+POP*http://www.ine.gov.bo/
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BOL&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bl.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Bosnia and Herzegovina.txt b/org.eclipse.stem.utility/parameters/urls/Bosnia and Herzegovina.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bosnia and Herzegovina.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Botswana.txt b/org.eclipse.stem.utility/parameters/urls/Botswana.txt
new file mode 100644
index 0000000..6ab687c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Botswana.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/botswana.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Brasil.txt b/org.eclipse.stem.utility/parameters/urls/Brasil.txt
new file mode 100644
index 0000000..8092b09
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Brasil.txt
@@ -0,0 +1,11 @@
+#
+CITYPOP*http://www.citypopulation.de/Brazil.html
+POPULSTAT*http://www.library.uu.nl/wesp/populstat/Americas/brazilt.htm
+POP*http://www.ibge.gov.br/english/default.php
+POP2*http://www.goldfields.co.za/Investor/Annual_Reports/Fy_2003/gf_ar03/sd_03/story/study_6.htm
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BRA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/br.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Brunei.txt b/org.eclipse.stem.utility/parameters/urls/Brunei.txt
new file mode 100644
index 0000000..1bb0e66
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Brunei.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BRN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bx.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Bulgaria.txt b/org.eclipse.stem.utility/parameters/urls/Bulgaria.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Bulgaria.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Burkina.txt b/org.eclipse.stem.utility/parameters/urls/Burkina.txt
new file mode 100644
index 0000000..1aecacc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Burkina.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.insd.bf/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BFA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/uv.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/urls/BurkinaFaso.txt b/org.eclipse.stem.utility/parameters/urls/BurkinaFaso.txt
new file mode 100644
index 0000000..2c47a92
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/BurkinaFaso.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.insd.bf/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BFA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/uv.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Burundi.txt b/org.eclipse.stem.utility/parameters/urls/Burundi.txt
new file mode 100644
index 0000000..4f75503
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Burundi.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*https://www.cia.gov/library/publications/the-world-factbook/
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=BDI&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/by.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Cambodia.txt b/org.eclipse.stem.utility/parameters/urls/Cambodia.txt
new file mode 100644
index 0000000..e6b5de8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Cambodia.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.nis.gov.kh/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KHM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/cb.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Cameroon.txt b/org.eclipse.stem.utility/parameters/urls/Cameroon.txt
new file mode 100644
index 0000000..eb009f0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Cameroon.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/cameroon.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Canada.txt b/org.eclipse.stem.utility/parameters/urls/Canada.txt
new file mode 100644
index 0000000..e8b3a12
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Canada.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/canada.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Cape Verde.txt b/org.eclipse.stem.utility/parameters/urls/Cape Verde.txt
new file mode 100644
index 0000000..1256ac7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Cape Verde.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.ine.cv/
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=CPV&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/cv.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Central African Republic.txt b/org.eclipse.stem.utility/parameters/urls/Central African Republic.txt
new file mode 100644
index 0000000..2fa3100
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Central African Republic.txt
@@ -0,0 +1,7 @@
+#
+POP*http://www.stat-centrafrique.com/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=CAF&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ct.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Chad.txt b/org.eclipse.stem.utility/parameters/urls/Chad.txt
new file mode 100644
index 0000000..d2a0963
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Chad.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.citypopulation.de/Chad.html
+#
+POP*http://www.inseed-tchad.org/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TCD&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/cd.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Chile.txt b/org.eclipse.stem.utility/parameters/urls/Chile.txt
new file mode 100644
index 0000000..51af543
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Chile.txt
@@ -0,0 +1,10 @@
+#
+CITYPOP*http://www.citypopulation.de/Chile.html
+POP*http://www.ine.cl/ine/canales/chile_estadistico/home.php
+POP2*http://www.visitingchile.com/regiones/region-sur/region-bio-bio/provincia-arauco/provincia-arauco.php
+DEMOGRAFIA*http://www.ine.cl/ine/canales/chile_estadistico/demografia_y_vitales/demografia/demografia.php
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=CHL&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ci.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/China.txt b/org.eclipse.stem.utility/parameters/urls/China.txt
new file mode 100644
index 0000000..02d4125
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/China.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.stats.gov.cn/english/index.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=CHN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ch.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Colombia.txt b/org.eclipse.stem.utility/parameters/urls/Colombia.txt
new file mode 100644
index 0000000..b60ee1c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Colombia.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.dane.gov.co/
+POP2*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=COL&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/co.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Comoros.txt b/org.eclipse.stem.utility/parameters/urls/Comoros.txt
new file mode 100644
index 0000000..373d9e9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Comoros.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=COM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/cn.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Congo.txt b/org.eclipse.stem.utility/parameters/urls/Congo.txt
new file mode 100644
index 0000000..1e7c129
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Congo.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.cnsee.org/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=COG&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/cf.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/CostaRica.txt b/org.eclipse.stem.utility/parameters/urls/CostaRica.txt
new file mode 100644
index 0000000..85e4005
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/CostaRica.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/costarica.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Croatia.txt b/org.eclipse.stem.utility/parameters/urls/Croatia.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Croatia.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Czech Republic.txt b/org.eclipse.stem.utility/parameters/urls/Czech Republic.txt
new file mode 100644
index 0000000..b1083c2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Czech Republic.txt
@@ -0,0 +1,4 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+#
+CITYPOP*http://www.citypopulation.de/CzechRep.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Denmark.txt b/org.eclipse.stem.utility/parameters/urls/Denmark.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Denmark.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Ecuador.txt b/org.eclipse.stem.utility/parameters/urls/Ecuador.txt
new file mode 100644
index 0000000..b3769a4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Ecuador.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.inec.gov.ec/default.asp
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ECU&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ec.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Egypt.txt b/org.eclipse.stem.utility/parameters/urls/Egypt.txt
new file mode 100644
index 0000000..d8e7c46
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Egypt.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.sis.gov.eg/En/Default.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=EGY&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/eg.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/ElSalvador.txt b/org.eclipse.stem.utility/parameters/urls/ElSalvador.txt
new file mode 100644
index 0000000..325fac2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/ElSalvador.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/elsalvador.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Equatorial Guinea.txt b/org.eclipse.stem.utility/parameters/urls/Equatorial Guinea.txt
new file mode 100644
index 0000000..c1d424b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Equatorial Guinea.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.dgecnstat-ge.org/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GNQ&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ek.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Eritrea.txt b/org.eclipse.stem.utility/parameters/urls/Eritrea.txt
new file mode 100644
index 0000000..43dd9b1
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Eritrea.txt
@@ -0,0 +1,9 @@
+#
+CITYPOP*http://www.citypopulation.de/Eritrea.html
+POP*https://www.cia.gov/library/publications/the-world-factbook/
+AREA*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ERI&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/er.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Estonia.txt b/org.eclipse.stem.utility/parameters/urls/Estonia.txt
new file mode 100644
index 0000000..8fc5c25
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Estonia.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/estonia.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Ethiopia.txt b/org.eclipse.stem.utility/parameters/urls/Ethiopia.txt
new file mode 100644
index 0000000..a8a7a71
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Ethiopia.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/ethiopia.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Faroe Islands.txt b/org.eclipse.stem.utility/parameters/urls/Faroe Islands.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Faroe Islands.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Faulkland Islands.txt b/org.eclipse.stem.utility/parameters/urls/Faulkland Islands.txt
new file mode 100644
index 0000000..dff81b7
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Faulkland Islands.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=FLK&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/fk.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Finland.txt b/org.eclipse.stem.utility/parameters/urls/Finland.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Finland.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/France.txt b/org.eclipse.stem.utility/parameters/urls/France.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/France.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Gabon.txt b/org.eclipse.stem.utility/parameters/urls/Gabon.txt
new file mode 100644
index 0000000..9208299
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Gabon.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.stat-gabon.ga/Home/Index1.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GAB&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/gb.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Gambia The.txt b/org.eclipse.stem.utility/parameters/urls/Gambia The.txt
new file mode 100644
index 0000000..bc31959
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Gambia The.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GMB&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ga.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Germany.txt b/org.eclipse.stem.utility/parameters/urls/Germany.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Germany.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Ghana.txt b/org.eclipse.stem.utility/parameters/urls/Ghana.txt
new file mode 100644
index 0000000..766e7f0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Ghana.txt
@@ -0,0 +1,7 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GHA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/gh.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
+
diff --git a/org.eclipse.stem.utility/parameters/urls/Glorioso Islands.txt b/org.eclipse.stem.utility/parameters/urls/Glorioso Islands.txt
new file mode 100644
index 0000000..2682a42
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Glorioso Islands.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=REU&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/zz.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Greece.txt b/org.eclipse.stem.utility/parameters/urls/Greece.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Greece.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Guatemala.txt b/org.eclipse.stem.utility/parameters/urls/Guatemala.txt
new file mode 100644
index 0000000..417536f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Guatemala.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/guatemala.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Guinea Bissau.txt b/org.eclipse.stem.utility/parameters/urls/Guinea Bissau.txt
new file mode 100644
index 0000000..79d082b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Guinea Bissau.txt
@@ -0,0 +1,6 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GNB&THEME=_adm
+CITYPOP*http://www.stat-guinebissau.com/
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/pu.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Guinea.txt b/org.eclipse.stem.utility/parameters/urls/Guinea.txt
new file mode 100644
index 0000000..88e7c52
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Guinea.txt
@@ -0,0 +1,6 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GIN&THEME=_adm
+CITYPOP*http://www.stat-guinee.org/
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/gv.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Guyana.txt b/org.eclipse.stem.utility/parameters/urls/Guyana.txt
new file mode 100644
index 0000000..5e895bc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Guyana.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.statisticsguyana.gov.gy/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=GUY&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/gy.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Honduras.txt b/org.eclipse.stem.utility/parameters/urls/Honduras.txt
new file mode 100644
index 0000000..3ac9779
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Honduras.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/honduras.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Hungary.txt b/org.eclipse.stem.utility/parameters/urls/Hungary.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Hungary.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Iceland.txt b/org.eclipse.stem.utility/parameters/urls/Iceland.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Iceland.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/India.txt b/org.eclipse.stem.utility/parameters/urls/India.txt
new file mode 100644
index 0000000..57fa44f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/India.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.censusindia.net/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=IND&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/in.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Indonesia.txt b/org.eclipse.stem.utility/parameters/urls/Indonesia.txt
new file mode 100644
index 0000000..4fc962b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Indonesia.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.citypopulation.de/Indonesia.html
+POP*http://www.bps.go.id/index.shtml
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=IDN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/id.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Iran.txt b/org.eclipse.stem.utility/parameters/urls/Iran.txt
new file mode 100644
index 0000000..389e197
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Iran.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.sci.org.ir/portal/faces/public/sci_en
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=IRN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ir.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Iraq.txt b/org.eclipse.stem.utility/parameters/urls/Iraq.txt
new file mode 100644
index 0000000..73ffaaa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Iraq.txt
@@ -0,0 +1,5 @@
+#
+#
+CITYPOP*https://www.cia.gov/library/publications/the-world-factbook/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=IRQ&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/iz.html
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/urls/Ireland.txt b/org.eclipse.stem.utility/parameters/urls/Ireland.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Ireland.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Italy.txt b/org.eclipse.stem.utility/parameters/urls/Italy.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Italy.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Ivory Coast.txt b/org.eclipse.stem.utility/parameters/urls/Ivory Coast.txt
new file mode 100644
index 0000000..71751bb
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Ivory Coast.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.ins.ci/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=CIV&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/iv.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Japan.txt b/org.eclipse.stem.utility/parameters/urls/Japan.txt
new file mode 100644
index 0000000..f39de37
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Japan.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.stat.go.jp/english/index.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=JPN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ja.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Jordan.txt b/org.eclipse.stem.utility/parameters/urls/Jordan.txt
new file mode 100644
index 0000000..e84c6aa
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Jordan.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.dos.gov.jo/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=JOR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/jo.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Kazakhstan.txt b/org.eclipse.stem.utility/parameters/urls/Kazakhstan.txt
new file mode 100644
index 0000000..dcb9129
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Kazakhstan.txt
@@ -0,0 +1,8 @@
+#
+CITYPOP*http://www.citypopulation.de/Kazakhstan.html
+POP*http://www.stat.kz/stat/index.aspx?sl=news&l=en
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KAZ&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/kz.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Kenya.txt b/org.eclipse.stem.utility/parameters/urls/Kenya.txt
new file mode 100644
index 0000000..031479d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Kenya.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.cbs.go.ke/
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KEN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ke.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Kuwait.txt b/org.eclipse.stem.utility/parameters/urls/Kuwait.txt
new file mode 100644
index 0000000..1b4e10f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Kuwait.txt
@@ -0,0 +1,7 @@
+#
+#
+CITYPOP*http://www.mop.gov.kw/MopWebSite/english/default.asp
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KWT&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ku.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Kyrgyzstan.txt b/org.eclipse.stem.utility/parameters/urls/Kyrgyzstan.txt
new file mode 100644
index 0000000..06053a5
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Kyrgyzstan.txt
@@ -0,0 +1,7 @@
+#
+COUNTRYPROFILE*http://www.fao.org/countryprofiles/Maps/KGZ/19/im/att/kgz_AD_dbf1.html
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KGZ&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/kg.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Laos.txt b/org.eclipse.stem.utility/parameters/urls/Laos.txt
new file mode 100644
index 0000000..2869cf6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Laos.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=LAO&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/la.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Latvia.txt b/org.eclipse.stem.utility/parameters/urls/Latvia.txt
new file mode 100644
index 0000000..c56038c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Latvia.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/latvia.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Lebanon.txt b/org.eclipse.stem.utility/parameters/urls/Lebanon.txt
new file mode 100644
index 0000000..e98ce9f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Lebanon.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=LBN&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/le.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Lesotho.txt b/org.eclipse.stem.utility/parameters/urls/Lesotho.txt
new file mode 100644
index 0000000..cf2e467
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Lesotho.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=LSO&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/lt.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Liberia.txt b/org.eclipse.stem.utility/parameters/urls/Liberia.txt
new file mode 100644
index 0000000..68b0465
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Liberia.txt
@@ -0,0 +1,7 @@
+#
+STATOIDS*http://www.statoids.com/ulr.html
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=LBR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/li.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Libya.txt b/org.eclipse.stem.utility/parameters/urls/Libya.txt
new file mode 100644
index 0000000..51b8ab3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Libya.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=LBY&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ly.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Liechtenstein.txt b/org.eclipse.stem.utility/parameters/urls/Liechtenstein.txt
new file mode 100644
index 0000000..b9b64e0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Liechtenstein.txt
@@ -0,0 +1,3 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+#
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Lithuania.txt b/org.eclipse.stem.utility/parameters/urls/Lithuania.txt
new file mode 100644
index 0000000..4074379
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Lithuania.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/lithuania.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Luxembourg.txt b/org.eclipse.stem.utility/parameters/urls/Luxembourg.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Luxembourg.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Macau.txt b/org.eclipse.stem.utility/parameters/urls/Macau.txt
new file mode 100644
index 0000000..d5c389b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Macau.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MAC&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mc.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Macedonia.txt b/org.eclipse.stem.utility/parameters/urls/Macedonia.txt
new file mode 100644
index 0000000..106bebc
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Macedonia.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MKD&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mk.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Madagascar.txt b/org.eclipse.stem.utility/parameters/urls/Madagascar.txt
new file mode 100644
index 0000000..96609ae
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Madagascar.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MDG&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ma.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Malawi.txt b/org.eclipse.stem.utility/parameters/urls/Malawi.txt
new file mode 100644
index 0000000..470ea2d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Malawi.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MWI&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mi.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mali.txt b/org.eclipse.stem.utility/parameters/urls/Mali.txt
new file mode 100644
index 0000000..9666332
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mali.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/mali.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mauritania.txt b/org.eclipse.stem.utility/parameters/urls/Mauritania.txt
new file mode 100644
index 0000000..5708c14
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mauritania.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/mauritania.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mauritius.txt b/org.eclipse.stem.utility/parameters/urls/Mauritius.txt
new file mode 100644
index 0000000..dc81b06
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mauritius.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MUS&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mp.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mexico.txt b/org.eclipse.stem.utility/parameters/urls/Mexico.txt
new file mode 100644
index 0000000..69a9fdd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mexico.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MEX&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mx.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Moldovia.txt b/org.eclipse.stem.utility/parameters/urls/Moldovia.txt
new file mode 100644
index 0000000..382ceb2
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Moldovia.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MDA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/md.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mongolia.txt b/org.eclipse.stem.utility/parameters/urls/Mongolia.txt
new file mode 100644
index 0000000..ca5232d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mongolia.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MNG&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mg.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Morocco.txt b/org.eclipse.stem.utility/parameters/urls/Morocco.txt
new file mode 100644
index 0000000..abfb8b3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Morocco.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MAR&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mo.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Mozambique.txt b/org.eclipse.stem.utility/parameters/urls/Mozambique.txt
new file mode 100644
index 0000000..0e4da43
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Mozambique.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MOZ&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mz.html\
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Myanmar.txt b/org.eclipse.stem.utility/parameters/urls/Myanmar.txt
new file mode 100644
index 0000000..4fbace0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Myanmar.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=MMR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/bm.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Namibia.txt b/org.eclipse.stem.utility/parameters/urls/Namibia.txt
new file mode 100644
index 0000000..7648655
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Namibia.txt
@@ -0,0 +1,7 @@
+#
+POPULSTAT*http://www.library.uu.nl/wesp/populstat/Africa/namibiap.htm
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=NAM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/wa.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Nepal.txt b/org.eclipse.stem.utility/parameters/urls/Nepal.txt
new file mode 100644
index 0000000..a271b52
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Nepal.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=NPL&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/np.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Netherlands.txt b/org.eclipse.stem.utility/parameters/urls/Netherlands.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Netherlands.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Nicaragua.txt b/org.eclipse.stem.utility/parameters/urls/Nicaragua.txt
new file mode 100644
index 0000000..753a6b9
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Nicaragua.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/nicaragua.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Niger.txt b/org.eclipse.stem.utility/parameters/urls/Niger.txt
new file mode 100644
index 0000000..bbf676e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Niger.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=NER&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ng.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Nigeria.txt b/org.eclipse.stem.utility/parameters/urls/Nigeria.txt
new file mode 100644
index 0000000..aad2565
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Nigeria.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=NGA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ni.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/North Korea.txt b/org.eclipse.stem.utility/parameters/urls/North Korea.txt
new file mode 100644
index 0000000..ef2c87f
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/North Korea.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PRK&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/kn.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Norway.txt b/org.eclipse.stem.utility/parameters/urls/Norway.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Norway.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Oman.txt b/org.eclipse.stem.utility/parameters/urls/Oman.txt
new file mode 100644
index 0000000..3ec14c6
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Oman.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=OMN&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/mu.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Pakistan.txt b/org.eclipse.stem.utility/parameters/urls/Pakistan.txt
new file mode 100644
index 0000000..a098655
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Pakistan.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PAK&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/pk.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Panama.txt b/org.eclipse.stem.utility/parameters/urls/Panama.txt
new file mode 100644
index 0000000..c69fe19
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Panama.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/panama.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Papua New Guinea.txt b/org.eclipse.stem.utility/parameters/urls/Papua New Guinea.txt
new file mode 100644
index 0000000..b2cd063
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Papua New Guinea.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PNG&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/pp.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Paraguay.txt b/org.eclipse.stem.utility/parameters/urls/Paraguay.txt
new file mode 100644
index 0000000..1ac09fd
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Paraguay.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PRY&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/pa.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Peru.txt b/org.eclipse.stem.utility/parameters/urls/Peru.txt
new file mode 100644
index 0000000..cbd044d
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Peru.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PER&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/pe.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Philippines.txt b/org.eclipse.stem.utility/parameters/urls/Philippines.txt
new file mode 100644
index 0000000..6f979e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Philippines.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.citypopulation.de/Philippines.html
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=PHL&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/rp.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Poland.txt b/org.eclipse.stem.utility/parameters/urls/Poland.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Poland.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Portugal.txt b/org.eclipse.stem.utility/parameters/urls/Portugal.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Portugal.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Puerto Rico.txt b/org.eclipse.stem.utility/parameters/urls/Puerto Rico.txt
new file mode 100644
index 0000000..a0eb8d3
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Puerto Rico.txt
@@ -0,0 +1,3 @@
+USCENSUSPUERTORICO*http://factfinder.census.gov/servlet/GCTTable?_bm=y&-geo_id=04000US72&-_box_head_nbr=GCT-PH1&-ds_name=DEC_2000_SF1_U&-redoLog=false&-mt_name=DEC_2000_SF1_U_GCTPH1_US9&-format=ST-2&-CONTEXT=gct
+#
+
diff --git a/org.eclipse.stem.utility/parameters/urls/Qatar.txt b/org.eclipse.stem.utility/parameters/urls/Qatar.txt
new file mode 100644
index 0000000..896b97b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Qatar.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=QAT&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/qa.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Romania.txt b/org.eclipse.stem.utility/parameters/urls/Romania.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Romania.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Russia.txt b/org.eclipse.stem.utility/parameters/urls/Russia.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Russia.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Rwanda.txt b/org.eclipse.stem.utility/parameters/urls/Rwanda.txt
new file mode 100644
index 0000000..afc419e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Rwanda.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=RWA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/rw.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/San Marino.txt b/org.eclipse.stem.utility/parameters/urls/San Marino.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/San Marino.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Sao Tome and Principe.txt b/org.eclipse.stem.utility/parameters/urls/Sao Tome and Principe.txt
new file mode 100644
index 0000000..c8d2dff
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Sao Tome and Principe.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=STP&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/tp.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Saudi Arabia.txt b/org.eclipse.stem.utility/parameters/urls/Saudi Arabia.txt
new file mode 100644
index 0000000..8d08c00
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Saudi Arabia.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.citypopulation.de/SaudiArabia.html
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SAU&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sa.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Senegal.txt b/org.eclipse.stem.utility/parameters/urls/Senegal.txt
new file mode 100644
index 0000000..c96d53b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Senegal.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SEN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sg.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Seychelles.txt b/org.eclipse.stem.utility/parameters/urls/Seychelles.txt
new file mode 100644
index 0000000..c5ddb48
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Seychelles.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SEN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/se.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Sierra Leone.txt b/org.eclipse.stem.utility/parameters/urls/Sierra Leone.txt
new file mode 100644
index 0000000..f6b22ad
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Sierra Leone.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SLE&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sl.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Singapore.txt b/org.eclipse.stem.utility/parameters/urls/Singapore.txt
new file mode 100644
index 0000000..432b366
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Singapore.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SGP&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sn.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Slovenia.txt b/org.eclipse.stem.utility/parameters/urls/Slovenia.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Slovenia.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Somalia.txt b/org.eclipse.stem.utility/parameters/urls/Somalia.txt
new file mode 100644
index 0000000..cf36d86
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Somalia.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SOM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/so.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/South Africa.txt b/org.eclipse.stem.utility/parameters/urls/South Africa.txt
new file mode 100644
index 0000000..98c2a7b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/South Africa.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ZAF&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sf.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/South Korea.txt b/org.eclipse.stem.utility/parameters/urls/South Korea.txt
new file mode 100644
index 0000000..987ee5e
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/South Korea.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=KOR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ks.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Spain.txt b/org.eclipse.stem.utility/parameters/urls/Spain.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Spain.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Sudan.txt b/org.eclipse.stem.utility/parameters/urls/Sudan.txt
new file mode 100644
index 0000000..4f9c8af
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Sudan.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SDN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/su.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Suriname.txt b/org.eclipse.stem.utility/parameters/urls/Suriname.txt
new file mode 100644
index 0000000..53a7ed4
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Suriname.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SUR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ns.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Sweden.txt b/org.eclipse.stem.utility/parameters/urls/Sweden.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Sweden.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Switzerland.txt b/org.eclipse.stem.utility/parameters/urls/Switzerland.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Switzerland.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Syria.txt b/org.eclipse.stem.utility/parameters/urls/Syria.txt
new file mode 100644
index 0000000..f48a18a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Syria.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=SYR&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sy.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Tajikistan.txt b/org.eclipse.stem.utility/parameters/urls/Tajikistan.txt
new file mode 100644
index 0000000..94f79e8
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Tajikistan.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TJK&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ti.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Tanzania United Republic.txt b/org.eclipse.stem.utility/parameters/urls/Tanzania United Republic.txt
new file mode 100644
index 0000000..aec03bf
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Tanzania United Republic.txt
@@ -0,0 +1,7 @@
+#
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TZA&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/tz.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Thailand.txt b/org.eclipse.stem.utility/parameters/urls/Thailand.txt
new file mode 100644
index 0000000..90ba203
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Thailand.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=THA&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/th.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Togo.txt b/org.eclipse.stem.utility/parameters/urls/Togo.txt
new file mode 100644
index 0000000..3ee2407
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Togo.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TGO&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/to.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Tunisia.txt b/org.eclipse.stem.utility/parameters/urls/Tunisia.txt
new file mode 100644
index 0000000..826b210
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Tunisia.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TUN&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ts.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Turkey.txt b/org.eclipse.stem.utility/parameters/urls/Turkey.txt
new file mode 100644
index 0000000..33f4779
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Turkey.txt
@@ -0,0 +1,6 @@
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TUR&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/tu.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Turkmenistan.txt b/org.eclipse.stem.utility/parameters/urls/Turkmenistan.txt
new file mode 100644
index 0000000..0a1795b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Turkmenistan.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=TKM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/tx.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/UNITED STATES.txt b/org.eclipse.stem.utility/parameters/urls/UNITED STATES.txt
new file mode 100644
index 0000000..809db8b
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/UNITED STATES.txt
@@ -0,0 +1,5 @@
+USCENSUSAREA*http://www.census.gov/population/www/censusdata/density.html
+USCENSUSPOP*http://www.census.gov/population/cen2000/phc-t4/tab01.xls
+USCENSUSBOUNDS*http://www.census.gov/geo/www/cob/co2000.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/parameters/urls/Uganda.txt b/org.eclipse.stem.utility/parameters/urls/Uganda.txt
new file mode 100644
index 0000000..2c10b30
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Uganda.txt
@@ -0,0 +1,7 @@
+#
+#
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=UGA&THEME=_adm
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ug.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/United Kingdom.txt b/org.eclipse.stem.utility/parameters/urls/United Kingdom.txt
new file mode 100644
index 0000000..e16fc65
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/United Kingdom.txt
@@ -0,0 +1,2 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/UnitedArabEmirates.txt b/org.eclipse.stem.utility/parameters/urls/UnitedArabEmirates.txt
new file mode 100644
index 0000000..ab23a5c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/UnitedArabEmirates.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ARE&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/sy.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Uruguay.txt b/org.eclipse.stem.utility/parameters/urls/Uruguay.txt
new file mode 100644
index 0000000..b49b077
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Uruguay.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=URY&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/uy.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Uzbekistan.txt b/org.eclipse.stem.utility/parameters/urls/Uzbekistan.txt
new file mode 100644
index 0000000..c1317ec
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Uzbekistan.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.citypopulation.de/Uzbekistan.html
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=UZB&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/uz.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Venezuela.txt b/org.eclipse.stem.utility/parameters/urls/Venezuela.txt
new file mode 100644
index 0000000..243dc41
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Venezuela.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=VEN&THEME=_adm
+#
+CIA*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Vietnam.txt b/org.eclipse.stem.utility/parameters/urls/Vietnam.txt
new file mode 100644
index 0000000..ff0b50a
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Vietnam.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=VNM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/vm.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Yemen.txt b/org.eclipse.stem.utility/parameters/urls/Yemen.txt
new file mode 100644
index 0000000..0a503e0
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Yemen.txt
@@ -0,0 +1,6 @@
+#
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=YEM&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/ym.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Yugoslavia.txt b/org.eclipse.stem.utility/parameters/urls/Yugoslavia.txt
new file mode 100644
index 0000000..324c337
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Yugoslavia.txt
@@ -0,0 +1,4 @@
+UNITEDNATIONS*http://www.grid.unep.ch/data/data.php?category=human_related
+#
+CITYPOP*http://www.citypopulation.de/Deutschland.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Zaire.txt b/org.eclipse.stem.utility/parameters/urls/Zaire.txt
new file mode 100644
index 0000000..85438ae
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Zaire.txt
@@ -0,0 +1,5 @@
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ZAR&THEME=_adm
+#
+CIA*UNKNOWN
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Zambia.txt b/org.eclipse.stem.utility/parameters/urls/Zambia.txt
new file mode 100644
index 0000000..c19cb7c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Zambia.txt
@@ -0,0 +1,7 @@
+#
+CITYPOP*http://www.citypopulation.de/Zambia.html
+DIVA*http://www.cipotato.org/DIVA/data/DataServer.asp?AREA=ZMB&THEME=_adm
+#
+CIA*https://www.cia.gov/cia/publications/factbook/geos/za.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/parameters/urls/Zimbabwe.txt b/org.eclipse.stem.utility/parameters/urls/Zimbabwe.txt
new file mode 100644
index 0000000..9770b5c
--- /dev/null
+++ b/org.eclipse.stem.utility/parameters/urls/Zimbabwe.txt
@@ -0,0 +1,5 @@
+#
+POP*http://www.xist.org/cntry/belize.aspx
+CIA*http://www.geocomm.com/faq/copyright.html
+ISO3166_1*https://www.cia.gov/library/publications/the-world-factbook/
+ISO3166_2*https://www.cia.gov/library/publications/the-world-factbook/
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin1LexSorter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin1LexSorter.java
new file mode 100644
index 0000000..5d04c2e
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin1LexSorter.java
@@ -0,0 +1,375 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class sort
+ * all level 1 ISO3166-2 descriptors. To do so, first it extracts all the
+ * ISO3166-2 descriptors we have distributed in the following two files:
+ * ISO3166_2_list.txt and ISO_LEVEL1_FIX.txt. The output is written into a
+ * semicolon separated format of the form:
+ * 
+ * COUNTRY:ALPHA2:XX-YY:NAME:INDEX
+ * 
+ * This output will be used during generation of the level 2 descriptors and
+ * during generation of the relationship files.
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/Admin1LexSorter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\Admin1LexSorter.config)
+ * 
+ * 
+ */
+public class Admin1LexSorter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public Admin1LexSorter(String iso3166_1, String iso3166_2, String
+	// fixFile,
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public Admin1LexSorter(String configFile) {
+	
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRY_NAMES;
+		}
+		if (outputDir == null) {
+			outputDir = path + GenConstants.LEX_DIR;
+		}
+
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries.
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter lexFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List<ISOCode2> iso2List = new ArrayList<ISOCode2>();
+
+		int size = targetList.size();
+
+		// Iterate for every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String country = ((String) targetList.get(i)).trim();
+
+			System.out
+					.println("\t\t<<<< Processing country : " + country + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			// Get the ISO3166-1 info for this country
+			if (isoCode == null) {
+				isoCode = GenUtils.getISOCode(country, codeList);
+			}
+
+			if (iso2List != null) {
+				// Load the ISO 3166-2 objects
+				iso2List = GenUtils.loadISO2(iso3166_2, isoCode.getAlpha2());
+			}
+
+			// If the directory does not exist for this country,
+			// create it using ISO alpha3 code.
+			File countryDir = new File(outputDir + isoCode.getAlpha3());
+
+			if (countryDir != null && countryDir.exists() == false) {
+				// Directory does not exist. Create it.
+				countryDir.mkdir();
+			}
+
+			// Create and open the output file.
+			if (lexFile == null) {
+				// Create the file name
+				fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+						+ "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+				// Create tne new file
+				lexFile = GenUtils.openWriter(fileName);
+			}
+
+			// Extract descriptors from ISO_LEVEL1_FIX, convert them into
+			// ISOCode2 format,
+			// and put them into a list.
+			List<ISOCode2> isoFixList = GenUtils.extractDescriptors(
+					codefixList, isoCode);
+
+			// Now find all the unique descriptors in isoFixDescriptors and
+			// iso2List. Order of parameters makes a difference here. Always
+			// pass first the isoFixList
+			List<String> descriptorList = getUniqueDescriptors(isoFixList,
+					iso2List);
+
+			// Now, run the lexicographic sorter on the set of unique
+			// descriptors.
+			Collections.sort(descriptorList);
+
+			// Now, create a unified list of ISO3166-2 objects based on the
+			// sorted descriptors
+			// System.out.println("Descriptors by lexicographic ordering : ");
+
+			int index = 1;
+			Iterator it = descriptorList.iterator();
+			while (it.hasNext()) {
+				String desc = (String) it.next();
+				// Do a lookup corresponding to the descriptor.
+				ISOCode2 current = GenUtils.getISO2Object(iso2List, desc);
+
+				if (current == null) {
+					// Code not found in regular list, look in fix list.
+					current = GenUtils.getISO2Object(isoFixList, desc);
+				}
+
+				GenUtils.addData(lexFile, String.valueOf(index) + ":" //$NON-NLS-1$
+						+ current.getId() + ":" + current.getAlpha2() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+						+ current.getName() + "\n"); //$NON-NLS-1$
+				index++;
+			}
+
+			// // We dont need the ISO code object for this country
+			// // anymore, we are done processing it.
+			isoCode = null;
+
+			if (lexFile != null) {
+				lexFile.close();
+				lexFile = null;
+				System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+				fileName = null;
+			}
+
+			// Run garbage collection
+			System.gc();
+
+		} // for
+
+	}
+
+	/**
+	 * Find all unique descriptors in the two lists.
+	 * 
+	 * @param list1
+	 *            a list with ISO 3166-2 codes
+	 * @param list2
+	 *            a different list with ISO 3166-2 codes
+	 * 
+	 * @return a list with unique descriptors.
+	 * 
+	 */
+	protected List<String> getUniqueDescriptors(List<ISOCode2> list1,
+			List<ISOCode2> list2) {
+
+		List<String> descriptorSet = new ArrayList<String>();
+		List<String> nameSet = new ArrayList<String>();
+
+		Iterator it1 = list1.iterator();
+		while (it1.hasNext()) {
+			ISOCode2 code = (ISOCode2) it1.next();
+			if (descriptorSet.contains(code.getId()) == false) {
+				descriptorSet.add(code.getId());
+				nameSet.add(code.getName());
+			}
+		}
+
+		Iterator it2 = list2.iterator();
+		while (it2.hasNext()) {
+			ISOCode2 code = (ISOCode2) it2.next();
+			if (descriptorSet.contains(code.getId()) == false) {
+				descriptorSet.add(code.getId());
+				nameSet.add(code.getName());
+			}
+		}
+
+		return nameSet;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int TARGET_LIST = 3;
+		// final int OUTPUT_DIR = 4;
+		// final int PARAMS = 5;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// Admin1LexSorter sorter = new Admin1LexSorter(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		Admin1LexSorter sorter = new Admin1LexSorter(args[CONFIG_FILE]);
+
+		sorter.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin2LexSorter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin2LexSorter.java
new file mode 100644
index 0000000..790d9c8
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Admin2LexSorter.java
@@ -0,0 +1,495 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class sort
+ * all level 1 ISO3166-2 descriptors. To do so, first it extracts all the
+ * ISO3166-2 descriptors we have distributed in the following two files:
+ * ISO3166_2_list.txt and ISO_LEVEL1_FIX.txt. The output is written into a
+ * semicolon separated format of the form:
+ * 
+ * COUNTRY:ALPHA2:XX-YY:NAME:INDEX
+ * 
+ * This output will be used during generation of the level 2 descriptors and
+ * during generation of the relationship files.
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/Admin2LexSorter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\Admin2LexSorter.config)
+ * 
+ * 
+ */
+public class Admin2LexSorter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	/**
+	 * Hash map for dealing with
+	 */
+	HashMap<String, List<String>> adminData = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public Admin2LexSorter(String iso3166_1, String targetFile, String
+	// outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// adminData = new HashMap<String, List<String>>();
+	// }
+
+	/**
+	 * @param configFile
+	 */
+	public Admin2LexSorter(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (outputDir == null) {
+			outputDir = path + GenConstants.LEX_DIR;
+		}
+
+		targetList = null;
+		adminData = new HashMap<String, List<String>>();
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Collect all level 2 data, sort it and store the result.
+		process();
+
+		// Now, print the result.
+		printSortedSequences();
+
+	}
+
+	/**
+	 * Collect all level 2 administration data and its containment relationship
+	 * to level 1 data. Sort the collections lexicographically and store the
+	 * result for each country.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter lexFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Get the level 2 data we need :
+			String admin1 = null;
+			String admin2 = null;
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+					// Record the previous level.
+					int oldlevel = level - 1;
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(
+									items[ISOData.COUNTRY_NAME], codeList);
+						}
+
+						// Get the level of the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (lexFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+							// Create tne new file
+							lexFile = GenUtils.openWriter(fileName);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// We have switched to a different data level (i,e,
+						// admin 0 to admin 1)
+						if (transition == true) {
+							oldlevel = level;
+							// Reset our repeated history
+							// repeatedEntries = new String();
+							entryList = new ArrayList<String>();
+						}
+
+						// Ignore all data that is not level 2.
+						if (level == DataTypes.LEVEL_0
+								|| level == DataTypes.LEVEL_1) {
+							continue;
+						}
+
+						// Get the level 2 data we need :
+						admin1 = items[ISOData.ADMIN1_NAME];
+						admin2 = items[ISOData.ADMIN2_NAME];
+
+						// If entity is UNKOWN or N.A. handle it properly.
+						if (admin2.equals("UNKNOWN") || admin2.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+							admin2 = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+									+ String.valueOf(unkCounter++);
+						}
+
+						// Make sure this is not a repeated entry.
+						if (GenUtils.isRepeated(admin1 + admin2, entryList) == true) {
+							continue;
+						}
+
+						// Remember this entity to avoid duplicates.
+						entryList.add(admin1 + admin2);
+
+						if (adminData.get(admin1) == null) {
+							// Create a new ArrayList of administration 2
+							// objects for every level 1 location.
+							List<String> admin2List = new ArrayList<String>();
+							admin2List.add(admin2);
+							adminData.put(admin1, admin2List);
+						} else {
+							List<String> admin2List = adminData.get(admin1);
+							if (admin2List == null) {
+								admin2List = new ArrayList<String>();
+							}
+							admin2List.add(admin2);
+							adminData.put(admin1, admin2List);
+						}
+
+					}// while
+
+					if (adminData == null) {
+						continue;
+					}
+
+					Set<String> keys = adminData.keySet();
+					Iterator it = keys.iterator();
+
+					// Sort every list.
+					while (it.hasNext()) {
+						List<String> admin2List = adminData.get(it.next());
+						Collections.sort(admin2List);
+					}
+
+					System.out
+							.println("\t\tDescriptors by lexicographic ordering : "); //$NON-NLS-1$
+
+					Set<String> keyset = adminData.keySet();
+					Iterator it1 = keyset.iterator();
+
+					while (it1.hasNext()) {
+
+						admin1 = (String) it1.next();
+
+						// admin1 is the key in our HashMap.
+						List<String> admin2List = adminData.get(admin1);
+
+						Iterator it2 = admin2List.iterator();
+
+						int index = 1;
+
+						System.out.println("\t\tAdmin 1 = " + admin1); //$NON-NLS-1$
+
+						while (it2.hasNext()) {
+
+							admin2 = (String) it2.next();
+							System.out.println("\t\tAt : " + index //$NON-NLS-1$
+									+ " -- admin2 is : " + admin2); //$NON-NLS-1$
+
+							GenUtils.addData(lexFile, String.valueOf(index)
+									+ ":" + isoCode.getAlpha2() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+									+ isoCode.getAlpha3() + ":" //$NON-NLS-1$
+									+ isoCode.getName() + ":" + admin1 + ":" //$NON-NLS-1$ //$NON-NLS-2$
+									+ admin2 + "\n"); //$NON-NLS-1$
+							index++;
+
+						}
+
+					}
+
+					adminData.clear();
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (lexFile != null) {
+						lexFile.close();
+						lexFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Collect all level 2 administration data, sort it lexicographically and
+	 * store the result.
+	 */
+	protected void printSortedSequences() {
+
+		System.out.println("\t\tDescriptors by lexicographic ordering : "); //$NON-NLS-1$
+
+		if (adminData == null) {
+			return;
+		}
+		Set<String> keys = adminData.keySet();
+		Iterator it1 = keys.iterator();
+
+		while (it1.hasNext()) {
+
+			String admin1 = (String) it1.next();
+
+			List<String> admin2List = adminData.get(admin1);
+
+			Iterator it2 = admin2List.iterator();
+
+			int index = 1;
+
+			System.out.println("\t\tAdmin 1 = " + admin1); //$NON-NLS-1$
+
+			while (it2.hasNext()) {
+				System.out.println("\t\tAt : " + index++ + " -- admin2 is : " //$NON-NLS-1$ //$NON-NLS-2$
+						+ it2.next());
+			}
+
+		}
+
+	}
+
+	/**
+	 * Find an entry in the lexicographically sorted list and get its index.
+	 * 
+	 * @param list
+	 *            a list of strings.
+	 * @param entry
+	 *            the entry we want to find in the list.
+	 * 
+	 * @return the index of the entry in the sorted list (if found).
+	 */
+	protected int indexLookup(List<String> list, String entry) {
+
+		int index = 1;
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+			String current = (String) it.next();
+			if (current.toUpperCase().equals(entry.toUpperCase())) {
+				return index;
+			}
+			index++;
+		}
+		// Not found.
+		System.out.println("\t\tindexLookup : entry not found for " + entry); //$NON-NLS-1$
+		return -1;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int TARGET_LIST = 1;
+		// final int OUTPUT_DIR = 2;
+		// final int PARAMS = 3;
+		//
+		// if (args.length < PARAMS) {
+		//
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// Admin2LexSorter sorter = new Admin2LexSorter(args[ISO_3166_1],
+		// args[TARGET_LIST], args[OUTPUT_DIR]);
+		// sorter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		Admin2LexSorter sorter = new Admin2LexSorter(args[CONFIG_FILE]);
+
+		sorter.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirArrivalDepartureAnalyzer.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirArrivalDepartureAnalyzer.java
new file mode 100644
index 0000000..ac51fd9
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirArrivalDepartureAnalyzer.java
@@ -0,0 +1,125 @@
+ package org.eclipse.stem.utility.generators;
+
+ /*******************************************************************************
+  * Copyright (c) 2009 IBM Corporation 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:
+  *     IBM Corporation - initial API and implementation
+  *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.StringTokenizer;
+
+/**
+ *
+ */
+public class AirArrivalDepartureAnalyzer {
+	
+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings({ "nls" })
+	public static void main(String [] args) {
+		if(args.length < 1) {
+			System.err.println("Usage: AirTransportGenerator <input .csv file>");
+			System.exit(-1);
+		}
+		
+		try {
+		String inputFile = args[0];
+		
+		File csvfile = new File(inputFile);
+		if(!csvfile.exists()) {
+			System.err.println("Error, "+inputFile+" doesn't exist");
+			System.exit(-1);
+		}
+		
+		
+		BufferedReader ireader = new BufferedReader(new InputStreamReader(new FileInputStream(csvfile)));
+		   
+		FileWriter fw = new FileWriter(inputFile+".out.csv");
+			
+		HashMap<String, Integer> nationalArrivals = new HashMap<String, Integer>();
+		HashMap<String, Integer> nationalDepartures = new HashMap<String, Integer>();
+		HashMap<String, Integer> stateTrips = new HashMap<String, Integer>();
+		
+		String line;
+		line = ireader.readLine(); //skip first header row
+		while((line=ireader.readLine()) != null) {    		
+		  		StringTokenizer st = new StringTokenizer(line,",");
+		  		String departureId  = st.nextToken().trim();
+		  		String arrivalId = st.nextToken().trim();
+		  		int population1 = Integer.parseInt(st.nextToken().trim());
+		  		int population2 = Integer.parseInt(st.nextToken().trim());
+		  		double flighttime = Double.parseDouble(st.nextToken().trim());
+		  		double distance = Double.parseDouble(st.nextToken().trim());
+		  		int travellers = Integer.parseInt(st.nextToken().trim());
+		  		
+		  		String departureState = departureId.substring(0, 5);
+		  		String arrivalState = arrivalId.substring(0, 5);
+		  		
+		  		if(departureState.equals(arrivalState)) {
+		  			// Travel within a state
+		  			if(stateTrips.containsKey(departureState)) 
+		  				stateTrips.put(departureState, stateTrips.get(departureState) + travellers);
+		  			else
+		  				stateTrips.put(departureState, travellers);
+		  		} else {
+		  			// Travel state to another state
+		  			if(nationalDepartures.containsKey(departureState)) 
+		  				nationalDepartures.put(departureState, nationalDepartures.get(departureState) + travellers);
+		  			else
+		  				nationalDepartures.put(departureState, travellers);
+		  			if(nationalArrivals.containsKey(arrivalState)) 
+		  				nationalArrivals.put(arrivalState, nationalArrivals.get(arrivalState) + travellers);
+		  			else
+		  				nationalArrivals.put(arrivalState, travellers);
+		  		}	
+		} // for each line
+		
+		ArrayList<String> allStates = new ArrayList<String>();
+		for(String state:nationalArrivals.keySet()) if(!allStates.contains(state)) allStates.add(state);
+		for(String state:nationalDepartures.keySet()) if(!allStates.contains(state)) allStates.add(state);
+		for(String state:stateTrips.keySet()) if(!allStates.contains(state)) allStates.add(state);
+		
+		fw.write("State, Local state trips, National Arrivals, NationalDepartures, % leaving state");
+		fw.write(LS);
+		for(String state:allStates) {
+			int st = (stateTrips.containsKey(state))? stateTrips.get(state) : 0;
+			int na = (nationalArrivals.containsKey(state))? nationalArrivals.get(state) : 0;
+			int nd = (nationalDepartures.containsKey(state))? nationalDepartures.get(state) : 0;
+			
+			fw.write(state+",");
+			fw.write(st+"");
+			fw.write(",");
+			fw.write(na+"");
+			fw.write(",");
+			fw.write(nd+"");
+			fw.write(",");
+			
+			double perc = ((double)na+(double)nd) / ((double)na+(double)nd+st);
+			fw.write(""+perc);
+			fw.write(LS);
+		}
+		fw.flush();
+		fw.close();
+		
+	} catch(Exception e) {
+		e.printStackTrace();
+	}
+		
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator.java
new file mode 100644
index 0000000..a5240b2
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator.java
@@ -0,0 +1,204 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * The utility takes as input a .properties file containing arrival/departure/base population information
+ * for airports at a given level (e.g. counties) and generates a new file containing
+ * arrival/departure information for the pipe air transportation hub at the level above (e.g .state).
+ * 
+ * The arrival/departure information in the input file includes all passengers, domestic and international
+ */
+public class AirTransportGenerator {
+	
+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	private static Map<String, ArrayList<TransportationRecord>> records = new HashMap<String, ArrayList<TransportationRecord>>();
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings({ "nls", "synthetic-access" })
+	public static void main(String [] args) {
+		if(args.length < 2) {
+			System.err.println("Usage: AirTransportGenerator <input .properties file> <Top Transporation System");
+			System.exit(-1);
+		}
+		
+		try {
+		String inputFile = args[0];
+		String topSystem = args[1];
+		
+		File propfile = new File(inputFile);
+		if(!propfile.exists()) {
+			System.err.println("Error, "+inputFile+" doesn't exist");
+			System.exit(-1);
+		}
+		
+		
+		BufferedReader ireader = new BufferedReader(new InputStreamReader(new FileInputStream(propfile)));
+		   
+		FileWriter fw = new FileWriter(inputFile+".new");
+			
+		String line;
+		while((line=ireader.readLine()) != null) {
+		  	if(!line.startsWith("#") &&
+		  			!line.startsWith("RECORD_CLASSNAME") &&
+		  			!line.startsWith("TITLE") &&
+		  			!line.startsWith("VALID") &&
+		  			!line.startsWith("TRANSPORT_MODE ") &&
+		  			!line.startsWith("ISOKEY_0") &&
+		  			!line.startsWith("ISOKEY_0_LEVEL") &&
+		   			!line.startsWith("ISOKEY_1") &&
+		  			!line.startsWith("ISOKEY_1_LEVEL") &&
+		  			!line.startsWith("POPULATION_IDENTIFIER") &&
+		  			!line.startsWith("RATE_TIME_PERIOD") &&
+		  			!line.startsWith("AVG_TIME_IN_SYSTEM") &&
+		  			!line.startsWith("START_POPULATION_IN_NETWORK") &&
+		  			!(line.trim().length() == 0)
+				) {
+		  		// Find the transportation record
+		    		
+		  		int eqindex = line.indexOf("=");
+		  		String trans = line.substring(eqindex+1);
+		  		StringTokenizer st = new StringTokenizer(trans,",");
+		  		TransportationRecord record = new TransportationRecord();
+		  		record.hub_top = st.nextToken().trim();
+		  		record.hub_bottom = st.nextToken().trim();
+		  		record.arrivals = Integer.parseInt(st.nextToken().trim());
+		  		record.departures = Integer.parseInt(st.nextToken().trim());
+		  		record.base_population = Integer.parseInt(st.nextToken().trim());
+		
+		  		if(records.containsKey(record.hub_top))
+		  			records.get(record.hub_top).add(record);
+		  		else {
+		  			ArrayList<TransportationRecord> list = new ArrayList<TransportationRecord>();
+		  			records.put(record.hub_top, list);
+		  			list.add(record);
+		  		}
+		  		line = "";
+		  	}
+		    if(line!=null&&line.trim().length() != 0)	fw.write(line+LS);
+		    fw.flush();
+		}  // For each line
+		
+		// Now figure out the arrival/departure for the top transportation systems
+		
+		// The denominator
+		double denom = getDenominator();
+	
+		int linenr = 1;
+		for(String hub:records.keySet()) {
+			List<TransportationRecord> list = records.get(hub);
+			int arr_sum=0, dep_sum=0;
+			for(TransportationRecord record:list) {
+				arr_sum+=record.arrivals;
+				dep_sum+=record.departures;
+			}
+			// The population is sum of all arrivals and departures / 2
+			int base_population = (arr_sum+dep_sum)/2;
+			// Figure put the arrival/departure rate 
+			
+			
+			double prob = 0.0; // probability of an in-state-travel 
+			
+			// The probability of an in-state travel is the sum if the probability
+			// of travel within the state
+			for(TransportationRecord source:list) {
+				for(TransportationRecord dest:list) {
+					if(source == dest) continue;
+					double p = getProbability(source, dest, denom);
+					prob += p;
+				}
+			}
+						
+			// These are the out-of-state travellers
+			int arrivals = base_population - (int)(base_population*prob);
+			int departures = base_population - (int)(base_population*prob);
+			
+			fw.write(""+linenr++);
+			fw.write(" = ");
+			fw.write(topSystem);
+			fw.write(",");
+			fw.write(hub);
+			fw.write(",");
+			fw.write(arrivals+"");
+			fw.write(",");
+			fw.write(departures+"");
+			fw.write(",");
+			fw.write(base_population+"");
+			fw.write(LS);
+		}
+		
+		// 
+		fw.flush();
+		fw.close();
+		
+	} catch(Exception e) {
+		e.printStackTrace();
+	}
+		
+	} // main
+	
+	private static double getDenominator() {
+		double result = 0.0;
+		for(String key1:records.keySet()) {
+			List<TransportationRecord> records1 = records.get(key1);
+			for(TransportationRecord record1:records1) {
+				// average arrivals/departures, should be the same anyway
+				double nom1 = (record1.arrivals + record1.departures)/2.0;
+				double den1 = record1.base_population;
+				double phi1 = nom1/den1;
+				for(String key2:records.keySet()) {
+					List<TransportationRecord> records2 = records.get(key2);
+					for(TransportationRecord record2:records2) {
+						if(record1 == record2) continue; // skip travel to/from same destination
+						// average arrivals/departures, should be the same anyway
+						double nom2 = (record2.arrivals + record2.departures)/2.0;
+						double den2 = record2.base_population;
+						double phi2 = nom2/den2;
+						result += phi1*phi2;
+					}
+				}
+			}
+		}
+		return result;
+	}
+	
+	private static double getProbability(TransportationRecord source, TransportationRecord dest, double denominator) {
+		double nom1 = (source.arrivals + source.departures)/2.0;
+		double den1 = source.base_population;
+		double phi1 = nom1/den1;
+		double nom2 = (dest.arrivals + dest.departures)/2.0;
+		double den2 = dest.base_population;
+		double phi2 = nom2/den2;
+		return phi1*phi2/denominator;
+	}
+	private static class TransportationRecord {
+		public int arrivals;
+		public int departures;
+		public int base_population;
+		public String hub_top;
+		public String hub_bottom;
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator2.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator2.java
new file mode 100644
index 0000000..0132c48
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AirTransportGenerator2.java
@@ -0,0 +1,688 @@
+package org.eclipse.stem.utility.generators;

+

+import java.io.BufferedReader;

+import java.io.File;

+import java.io.FileInputStream;

+import java.io.FileReader;

+import java.io.FileWriter;

+import java.io.IOException;

+import java.io.InputStreamReader;

+import java.util.HashMap;

+import java.util.Map;

+import java.util.StringTokenizer;

+

+/**

+ * The utility takes as input a .csv file where each row has the following columns:

+ * 

+ * 1. Airport code

+ * 2. STEM ID

+ * 3. Total passengers (per year)

+ * 4. Lat/Lon string

+ * 5. Lat (number)

+ * 6. Lon (number)

+ * 

+ * It generates multiple stem .properties files that the ant script converts to EMF models. 

+ */

+@SuppressWarnings("nls")

+public class AirTransportGenerator2 {

+	

+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$

+	

+	private static HashMap<String, String>level0IsoKeys = new HashMap<String, String>();

+	

+	// When we don't have data, use this numbers. 15/day or 0.01% of population,

+	// whichever is smallest

+	

+	private static int DEFAULT_PASSENGERS_WHEN_MISSING = 5475;

+	

+	

+	private static int DEFAULT_DIVISIOR = 365; // Numbers are yearly, we want daily

+	

+	// What percentage of passengers departing from a level 3 (city) region 

+	// are expected to travel to at least another city. There are no intra-city

+	// flights so this is 100 %

+	

+	private static double DEFAULT_PERCENT_START_3_LEVEL_3_TO_LEVEL_2 = 100;

+	

+	// What percentage of passengers when departing from a level 2 (e.g. county) region

+	// are expected to arrive at at least a different county. Since cross-county flights

+	// are rare we set this to 100.

+

+	private static double DEFAULT_PERCENT_START_3_LEVEL_2_TO_LEVEL_1 = 100;

+	

+	// What percentage of passengers when departing from a level 1 (e.g. state) region

+	// are expected to arrive at at least another state. The average for US is 6.7 %

+	// of flights are within the same state so we use that globally.

+

+	private static double DEFAULT_PERCENT_START_3_LEVEL_1_TO_LEVEL_0 = 93.3;

+	

+	// What percentage of passengers when departing from a level 0 (e.g. country) region

+	// are expected to arrive at at least another country. This is very tricky.

+	// It's international versus domestic flights needed for all countries. We're

+	// guessing 50%.

+	

+	private static double DEFAULT_PERCENT_START_3_LEVEL_0_TO_LEVEL_m1 = 50;

+	

+	// What percentage of passengers when departing from a level 2 (e.g. county) region

+	// are expected to arrive at at least a different county. Since cross-county flights

+	// are rare we set this to 100.

+	private static double DEFAULT_PERCENT_START_2_LEVEL_2_TO_LEVEL_1 = 100; 

+	// What percentage of passengers when departing from a level 1 (e.g. state) region

+	// are expected to arrive at at least another state. The average for US is 6.7 %

+	// of flights are within the same state so we use that globally.

+	private static double DEFAULT_PERCENT_START_2_LEVEL_1_TO_LEVEL_0 = 93.3;

+	// What percentage of passengers when departing from a level 0 (e.g. country) region

+	// are expected to arrive at at least another country. This is very tricky.

+	// It's international versus domestic flights needed for all countries. We're

+	// guessing 50%.

+	private static double DEFAULT_PERCENT_START_2_LEVEL_0_TO_LEVEL_m1 = 50;

+	

+	// The above percentages are when we have data on level 2 (counties) for airports.

+	// When we only have data on level 1 or 0, the percentages are different. The 

+	// motivation being less detailed data means it's more likely that flights are

+	// national/international.

+	

+	// A flight leaving the state is 100 % likely to at least go to another state

+	private static double DEFAULT_PERCENT_START_1_LEVEL_1_TO_LEVEL_0 = 93.3;

+	

+	// A flight departing the country is 50 % likely to arrive in another country

+	private static double DEFAULT_PERCENT_START_1_LEVEL_0_TO_LEVEL_m1 = 50;

+

+	// If only have airport for the country all flights are international

+	private static double DEFAULT_PERCENT_START_0_LEVEL_0_TO_LEVEL_m1 = 100;

+	

+	/**

+	 * Map stem id to population

+	 */

+	private static Map<String,Integer> stemPopulationMap = new HashMap<String,Integer>();

+

+	static {

+		level0IsoKeys.put("TL", "TLS");

+		level0IsoKeys.put("TK", "TKL");

+		level0IsoKeys.put("TJ", "TJK");

+		level0IsoKeys.put("TH", "THA");

+		level0IsoKeys.put("TG", "TGO");

+		level0IsoKeys.put("TF", "ATF");

+		level0IsoKeys.put("GY", "GUY");

+		level0IsoKeys.put("TD", "TCD");

+		level0IsoKeys.put("TC", "TCA");

+		level0IsoKeys.put("GW", "GNB");

+		level0IsoKeys.put("GU", "GUM");

+		level0IsoKeys.put("GT", "GTM");

+		level0IsoKeys.put("GS", "SGS");

+		level0IsoKeys.put("GR", "GRC");

+		level0IsoKeys.put("GQ", "GNQ");

+		level0IsoKeys.put("GP", "GLP");

+		level0IsoKeys.put("SZ", "SWZ");

+		level0IsoKeys.put("SY", "SYR");

+		level0IsoKeys.put("GN", "GIN");

+		level0IsoKeys.put("GM", "GMB");

+		level0IsoKeys.put("GL", "GRL");

+		level0IsoKeys.put("SV", "SLV");

+		level0IsoKeys.put("ST", "STP");

+		level0IsoKeys.put("GI", "GIB");

+		level0IsoKeys.put("GH", "GHA");

+		level0IsoKeys.put("SR", "SUR");

+		level0IsoKeys.put("GG", "GGY");

+		level0IsoKeys.put("SQ", "SQR");

+		level0IsoKeys.put("GF", "GUF");

+		level0IsoKeys.put("GE", "GEO");

+		level0IsoKeys.put("SO", "SOM");

+		level0IsoKeys.put("GD", "GRD");

+		level0IsoKeys.put("SN", "SEN");

+		level0IsoKeys.put("SM", "SMR");

+		level0IsoKeys.put("GB", "GBR");

+		level0IsoKeys.put("SL", "SLE");

+		level0IsoKeys.put("GA", "GAB");

+		level0IsoKeys.put("SK", "SVK");

+		level0IsoKeys.put("SJ", "SJM");

+		level0IsoKeys.put("SI", "SVN");

+		level0IsoKeys.put("SH", "SHN");

+		level0IsoKeys.put("SG", "SGP");

+		level0IsoKeys.put("SE", "SWE");

+		level0IsoKeys.put("SD", "SDN");

+		level0IsoKeys.put("SC", "SYC");

+		level0IsoKeys.put("SB", "SLB");

+		level0IsoKeys.put("SA", "SAU");

+		level0IsoKeys.put("FR", "FRA");

+		level0IsoKeys.put("FO", "FRO");

+		level0IsoKeys.put("FM", "FSM");

+		level0IsoKeys.put("RW", "RWA");

+		level0IsoKeys.put("FK", "FLK");

+		level0IsoKeys.put("RU", "RUS");

+		level0IsoKeys.put("FJ", "FJI");

+		level0IsoKeys.put("FI", "FIN");

+		level0IsoKeys.put("RS", "SRB");

+		level0IsoKeys.put("RO", "ROU");

+		level0IsoKeys.put("RE", "REU");

+		level0IsoKeys.put("ET", "ETH");

+		level0IsoKeys.put("ES", "ESP");

+		level0IsoKeys.put("ER", "ERI");

+		level0IsoKeys.put("EH", "ESH");

+		level0IsoKeys.put("EG", "EGY");

+		level0IsoKeys.put("EE", "EST");

+		level0IsoKeys.put("EC", "ECU");

+		level0IsoKeys.put("DZ", "DZA");

+		level0IsoKeys.put("QA", "QAT");

+		level0IsoKeys.put("DO", "DOM");

+		level0IsoKeys.put("PY", "PRY");

+		level0IsoKeys.put("DM", "DMA");

+		level0IsoKeys.put("PW", "PLW");

+		level0IsoKeys.put("DK", "DNK");

+		level0IsoKeys.put("DJ", "DJI");

+		level0IsoKeys.put("PT", "PRT");

+		level0IsoKeys.put("PS", "PSE");

+		level0IsoKeys.put("PR", "PRI");

+		level0IsoKeys.put("DE", "DEU");

+		level0IsoKeys.put("PN", "PCN");

+		level0IsoKeys.put("PM", "SPM");

+		level0IsoKeys.put("PL", "POL");

+		level0IsoKeys.put("PK", "PAK");

+		level0IsoKeys.put("PH", "PHL");

+		level0IsoKeys.put("PG", "PNG");

+		level0IsoKeys.put("CZ", "CZE");

+		level0IsoKeys.put("PF", "PYF");

+		level0IsoKeys.put("CY", "CYP");

+		level0IsoKeys.put("PE", "PER");

+		level0IsoKeys.put("CX", "CXR");

+		level0IsoKeys.put("CV", "CPV");

+		level0IsoKeys.put("CU", "CUB");

+		level0IsoKeys.put("PA", "PAN");

+		level0IsoKeys.put("CR", "CRI");

+		level0IsoKeys.put("CO", "COL");

+		level0IsoKeys.put("CN", "CHN");

+		level0IsoKeys.put("CM", "CMR");

+		level0IsoKeys.put("CL", "CHL");

+		level0IsoKeys.put("CK", "COK");

+		level0IsoKeys.put("CI", "CIV");

+		level0IsoKeys.put("CH", "CHE");

+		level0IsoKeys.put("CG", "COG");

+		level0IsoKeys.put("CF", "CAF");

+		level0IsoKeys.put("CD", "COD");

+		level0IsoKeys.put("CC", "CCK");

+		level0IsoKeys.put("OM", "OMN");

+		level0IsoKeys.put("CA", "CAN");

+		level0IsoKeys.put("BZ", "BLZ");

+		level0IsoKeys.put("BY", "BLR");

+		level0IsoKeys.put("BW", "BWA");

+		level0IsoKeys.put("BV", "BVT");

+		level0IsoKeys.put("BT", "BTN");

+		level0IsoKeys.put("BS", "BHS");

+		level0IsoKeys.put("BR", "BRA");

+		level0IsoKeys.put("BO", "BOL");

+		level0IsoKeys.put("NZ", "NZL");

+		level0IsoKeys.put("BN", "BRN");

+		level0IsoKeys.put("BM", "BMU");

+		level0IsoKeys.put("BJ", "BEN");

+		level0IsoKeys.put("NU", "NIU");

+		level0IsoKeys.put("BI", "BDI");

+		level0IsoKeys.put("BH", "BHR");

+		level0IsoKeys.put("BG", "BGR");

+		level0IsoKeys.put("NR", "NRU");

+		level0IsoKeys.put("BF", "BFA");

+		level0IsoKeys.put("BE", "BEL");

+		level0IsoKeys.put("NP", "NPL");

+		level0IsoKeys.put("BD", "BGD");

+		level0IsoKeys.put("NO", "NOR");

+		level0IsoKeys.put("BB", "BRB");

+		level0IsoKeys.put("BA", "BIH");

+		level0IsoKeys.put("NL", "NLD");

+		level0IsoKeys.put("ZW", "ZWE");

+		level0IsoKeys.put("NI", "NIC");

+		level0IsoKeys.put("NG", "NGA");

+		level0IsoKeys.put("AZ", "AZE");

+		level0IsoKeys.put("NF", "NFK");

+		level0IsoKeys.put("NE", "NER");

+		level0IsoKeys.put("AX", "ALA");

+		level0IsoKeys.put("AW", "ABW");

+		level0IsoKeys.put("NC", "NCL");

+		level0IsoKeys.put("ZM", "ZMB");

+		level0IsoKeys.put("AU", "AUS");

+		level0IsoKeys.put("NA", "NAM");

+		level0IsoKeys.put("AT", "AUT");

+		level0IsoKeys.put("AS", "ASM");

+		level0IsoKeys.put("AR", "ARG");

+		level0IsoKeys.put("AQ", "ATA");

+		level0IsoKeys.put("AO", "AGO");

+		level0IsoKeys.put("MZ", "MOZ");

+		level0IsoKeys.put("AN", "ANT");

+		level0IsoKeys.put("MY", "MYS");

+		level0IsoKeys.put("AM", "ARM");

+		level0IsoKeys.put("MX", "MEX");

+		level0IsoKeys.put("AL", "ALB");

+		level0IsoKeys.put("MW", "MWI");

+		level0IsoKeys.put("MV", "MDV");

+		level0IsoKeys.put("MU", "MUS");

+		level0IsoKeys.put("ZA", "ZAF");

+		level0IsoKeys.put("AI", "AIA");

+		level0IsoKeys.put("MT", "MLT");

+		level0IsoKeys.put("MS", "MSR");

+		level0IsoKeys.put("AG", "ATG");

+		level0IsoKeys.put("MR", "MRT");

+		level0IsoKeys.put("AF", "AFG");

+		level0IsoKeys.put("MQ", "MTQ");

+		level0IsoKeys.put("AE", "ARE");

+		level0IsoKeys.put("MP", "MNP");

+		level0IsoKeys.put("AD", "AND");

+		level0IsoKeys.put("MO", "MAC");

+		level0IsoKeys.put("MN", "MNG");

+		level0IsoKeys.put("MM", "MMR");

+		level0IsoKeys.put("ML", "MLI");

+		level0IsoKeys.put("MK", "MKD");

+		level0IsoKeys.put("YT", "MYT");

+		level0IsoKeys.put("MH", "MHL");

+		level0IsoKeys.put("MG", "MDG");

+		level0IsoKeys.put("ME", "MNE");

+		level0IsoKeys.put("MD", "MDA");

+		level0IsoKeys.put("MC", "MCO");

+		level0IsoKeys.put("MA", "MAR");

+		level0IsoKeys.put("LY", "LBY");

+		level0IsoKeys.put("YE", "YEM");

+		level0IsoKeys.put("LV", "LVA");

+		level0IsoKeys.put("LU", "LUX");

+		level0IsoKeys.put("LT", "LTU");

+		level0IsoKeys.put("LS", "LSO");

+		level0IsoKeys.put("LR", "LBR");

+		level0IsoKeys.put("LK", "LKA");

+		level0IsoKeys.put("LI", "LIE");

+		level0IsoKeys.put("LC", "LCA");

+		level0IsoKeys.put("LB", "LBN");

+		level0IsoKeys.put("LA", "LAO");

+		level0IsoKeys.put("KZ", "KAZ");

+		level0IsoKeys.put("KY", "CYM");

+		level0IsoKeys.put("KW", "KWT");

+		level0IsoKeys.put("KR", "KOR");

+		level0IsoKeys.put("KP", "PRK");

+		level0IsoKeys.put("KN", "KNA");

+		level0IsoKeys.put("KM", "COM");

+		level0IsoKeys.put("KI", "KIR");

+		level0IsoKeys.put("KH", "KHM");

+		level0IsoKeys.put("WS", "WSM");

+		level0IsoKeys.put("KG", "KGZ");

+		level0IsoKeys.put("KE", "KEN");

+		level0IsoKeys.put("WF", "WLF");

+		level0IsoKeys.put("JP", "JPN");

+		level0IsoKeys.put("JO", "JOR");

+		level0IsoKeys.put("JM", "JAM");

+		level0IsoKeys.put("VU", "VUT");

+		level0IsoKeys.put("JE", "JEY");

+		level0IsoKeys.put("VN", "VNM");

+		level0IsoKeys.put("VI", "VIR");

+		level0IsoKeys.put("VG", "VGB");

+		level0IsoKeys.put("VE", "VEN");

+		level0IsoKeys.put("VC", "VCT");

+		level0IsoKeys.put("VA", "VAT");

+		level0IsoKeys.put("IT", "ITA");

+		level0IsoKeys.put("IS", "ISL");

+		level0IsoKeys.put("IR", "IRN");

+		level0IsoKeys.put("IQ", "IRQ");

+		level0IsoKeys.put("IO", "IOT");

+		level0IsoKeys.put("UZ", "UZB");

+		level0IsoKeys.put("IN", "IND");

+		level0IsoKeys.put("UY", "URY");

+		level0IsoKeys.put("IM", "IMN");

+		level0IsoKeys.put("IL", "ISR");

+		level0IsoKeys.put("US", "USA");

+		level0IsoKeys.put("IE", "IRL");

+		level0IsoKeys.put("ID", "IDN");

+		level0IsoKeys.put("UM", "UMI");

+		level0IsoKeys.put("UG", "UGA");

+		level0IsoKeys.put("HU", "HUN");

+		level0IsoKeys.put("UA", "UKR");

+		level0IsoKeys.put("HT", "HTI");

+		level0IsoKeys.put("HR", "HRV");

+		level0IsoKeys.put("TZ", "TZA");

+		level0IsoKeys.put("HN", "HND");

+		level0IsoKeys.put("HM", "HMD");

+		level0IsoKeys.put("TW", "TWN");

+		level0IsoKeys.put("TV", "TUV");

+		level0IsoKeys.put("HK", "HKG");

+		level0IsoKeys.put("TT", "TTO");

+		level0IsoKeys.put("TR", "TUR");

+		level0IsoKeys.put("TO", "TON");

+		level0IsoKeys.put("TN", "TUN");

+		level0IsoKeys.put("TM", "TKM");

+		level0IsoKeys.put("OH", "OMN");

+	}

+	/**

+	 * 

+	 * @param args

+	 */

+	@SuppressWarnings({ "nls" })

+	public static void main(String [] args) {

+		if(args.length < 1) {

+			System.err.println("Usage: AirTransportGenerator2 <input .properties file>");

+			System.exit(-1);

+		}

+		

+		try {

+		String inputFile = args[0];

+		

+		File propfile = new File(inputFile);

+		if(!propfile.exists()) {

+			System.err.println("Error, "+inputFile+" doesn't exist");

+			System.exit(-1);

+		}

+		

+		readStemPopulationMap(PopulationPath);

+		

+		BufferedReader ireader = new BufferedReader(new InputStreamReader(new FileInputStream(propfile)));

+		   			

+		HashMap<String, FileWriter> writers = new HashMap<String, FileWriter>();

+		HashMap<String, Integer> counters = new HashMap<String, Integer>();

+		HashMap<String, Integer> totalPassengers = new HashMap<String, Integer>();

+		HashMap<String, String> airportCodes = new HashMap<String, String>();

+		

+		String line;

+		while((line=ireader.readLine()) != null) {

+		  StringTokenizer st = new StringTokenizer(line, ",");

+		  String airportCode = st.nextToken().trim();

+		  if(airportCode.startsWith("#")) continue; // skip

+		  String stemCode = st.nextToken().trim();

+		  // trim at first space if found

+		

+		  if(stemCode.indexOf(" ") != -1)

+			  stemCode = stemCode.substring(0, stemCode.indexOf(" "));

+		  

+		  int startLevel = GenUtils.getLevel(stemCode);

+		  int passengers = Integer.parseInt(st.nextToken().trim());

+		  //int population = Integer.parseInt(st.nextToken().trim());

+		  boolean generated = (passengers == -1);

+		  Integer POPULATION = stemPopulationMap.get(stemCode);

+		  if(POPULATION == null && generated) {

+			  System.err.println("Error, population not found for "+stemCode);

+			  System.exit(-1);

+		  }

+		  int population = 0;

+		  if(POPULATION != null) population = POPULATION.intValue();

+		  // Skip rest

+		  String s = null;

+		  while(st.hasMoreTokens()) s=st.nextToken();

+		  

+		

+		  // 0.01 % per day or 15 / day, whichever is smallest

+		  double threshold = ((double)population*(double)DEFAULT_DIVISIOR)/10000.0;

+		  

+		  if(generated && threshold < DEFAULT_PASSENGERS_WHEN_MISSING)

+			  passengers = (int)threshold;

+		  else if(generated) 

+			  passengers = DEFAULT_PASSENGERS_WHEN_MISSING;

+		  else passengers = passengers / 2; // Total troughput, we want arrivals/departures so divide by 2

+		  	  

+		  System.out.println(stemCode+" Population: "+population+ " passengers: "+passengers+" generated: "+generated);

+		  while(stemCode != null) {

+			  int level = GenUtils.getLevel(stemCode);

+			  double factor = 1.0;

+			  if(level == 3 && startLevel == 3) factor = DEFAULT_PERCENT_START_3_LEVEL_3_TO_LEVEL_2/100.0;

+			  else if(level == 2 && startLevel == 3) factor = DEFAULT_PERCENT_START_3_LEVEL_2_TO_LEVEL_1/100.0;

+			  else if(level == 1 && startLevel == 3) factor = DEFAULT_PERCENT_START_3_LEVEL_1_TO_LEVEL_0/100.0;

+			  else if(level == 0 && startLevel == 3) factor = DEFAULT_PERCENT_START_3_LEVEL_0_TO_LEVEL_m1/100.0;

+			  else if(level == 2 && startLevel == 2) factor = DEFAULT_PERCENT_START_2_LEVEL_2_TO_LEVEL_1/100.0;

+			  else if(level == 1 && startLevel == 2) factor = DEFAULT_PERCENT_START_2_LEVEL_1_TO_LEVEL_0/100.0;

+			  else if(level == 0 && startLevel == 2) factor = DEFAULT_PERCENT_START_2_LEVEL_0_TO_LEVEL_m1/100.0;

+			  else if(level == 1 && startLevel == 1) factor = DEFAULT_PERCENT_START_1_LEVEL_1_TO_LEVEL_0/100.0;

+			  else if(level == 0 && startLevel == 1) factor = DEFAULT_PERCENT_START_1_LEVEL_0_TO_LEVEL_m1/100.0;

+			  else if(level == 0 && startLevel == 0) factor = DEFAULT_PERCENT_START_0_LEVEL_0_TO_LEVEL_m1/100.0;

+				  	  

+			  if(totalPassengers.containsKey(stemCode))

+				  totalPassengers.put(stemCode, (int)(totalPassengers.get(stemCode)+passengers*factor));

+			  else

+				  totalPassengers.put(stemCode, (int)(passengers*factor));

+			  

+			  if(airportCodes.containsKey(stemCode))

+				  airportCodes.put(stemCode, airportCodes.get(stemCode)+", "+airportCode + ((generated)?"(Estimated)":"(Actual)"));

+			  else

+				  airportCodes.put(stemCode, airportCode + ((generated)?"(Estimated)":"(Actual)"));

+			  

+			  stemCode = GenUtils.upCode(stemCode);

+		  }

+		}

+		ireader.close();

+		

+		for(String stemCode:totalPassengers.keySet()) {

+		  int level = GenUtils.getLevel(stemCode);

+		  // Turn two letter country code into three letter country code

+		  String country = GenUtils.extractAlpha1(stemCode);

+		  double numPassengers = totalPassengers.get(stemCode);

+		  numPassengers /= DEFAULT_DIVISIOR;

+		  

+		  if(country.length() == 2) 

+			  country = level0IsoKeys.get(country);

+		  if(country == null) {

+			  System.err.println("Error, country code in : "+stemCode+" not recognized");

+			  continue;

+		  }

+		  String filename=null;

+		  if(level == 0)

+			  filename = "ZZZ_-1_ZZZ_0.properties";

+		  else filename = country+"_"+(level-1)+"_"+country+"_"+level+".properties";

+		  FileWriter fw = null;

+		  if(writers.containsKey(filename))

+			  fw = writers.get(filename);

+		  else {

+			  fw = new FileWriter(filename);

+			  writers.put(filename, fw);

+			  writerHeader(fw, filename, country, level);

+		  }

+		  String parentKey=null, childKey=null;

+		  

+		  if(level >= 2) {

+			  parentKey = stemCode.substring(0, stemCode.lastIndexOf("-"));

+			  childKey = stemCode;

+		  } else if (level == 1) { 

+			  parentKey = country;

+			  childKey = stemCode;

+		  } else if (level == 0) {

+			  parentKey = "ZZZ";

+			  childKey = country;

+		  }

+		  int linecount;

+		  if(counters.containsKey(filename)) {

+			  linecount = counters.get(filename);

+			  counters.put(filename, linecount+1);

+		  }

+		  else {

+			  linecount = 0;

+			  counters.put(filename, linecount+1);

+		  }

+		  

+		  fw.write("# "+airportCodes.get(stemCode)+LS);

+		  fw.write(linecount+" = ");

+		  fw.write(parentKey);

+		  fw.write(',');

+		  fw.write(childKey);

+		  fw.write(',');

+		  fw.write(numPassengers+"");

+		  fw.write(',');

+		  fw.write(numPassengers+"");

+		  fw.write(LS);

+		  System.out.println(stemCode+" passengers: "+numPassengers);

+		}  // For each line

+		

+		

+		for(FileWriter fw:writers.values()) {

+			fw.flush();

+			fw.close();

+		}		

+	} catch(Exception e) {

+		e.printStackTrace();

+	}

+		

+	} // main

+	

+	

+	@SuppressWarnings("nls")

+	public static void writerHeader(FileWriter fw, String filename, String country, int level) throws IOException {

+		String ctry = country;

+		if(level == 0) ctry = "ZZZ";

+		fw.write("# "+filename+LS);

+		fw.write("#/*******************************************************************************"+LS); 

+		fw.write("# * Copyright (c) 2008 IBM Corporation and others."+LS); 

+		fw.write("# * All rights reserved. This program and the accompanying materials"+LS); 

+		fw.write("# * are made available under the terms of the Eclipse Public License v1.0"+LS); 

+		fw.write("# * which accompanies this distribution, and is available at"+LS);

+		fw.write("# * http://www.eclipse.org/legal/epl-v10.html "+LS);

+		fw.write("# * "+LS);

+		fw.write("# * Contributors"+LS); 

+		fw.write("# *     IBM Corporation - initial API and implementation"+LS); 

+		fw.write("# *******************************************************************************/"+LS); 

+		fw.write(LS);		 

+		fw.write("# This is the name of the class that will interpret the rest of the file's contents"+LS); 

+		fw.write("RECORD_CLASSNAME =  org.eclipse.stem.internal.data.geography.infrastructure.transportation.specifications.AirTransportationGeographicRelationshipPropertyFileSpecification"+LS);

+		fw.write(LS); 

+		fw.write("# The title of the relationship"+LS); 

+		fw.write("TITLE = Air transport between "+ctry+"("+(level-1)+") and "+ctry+"("+level+")"); 

+		fw.write(LS); 

+		fw.write("# This is the date range for which the values in this file are valid"+LS); 

+		fw.write("# See http://purl.org/dc/terms/1.1/valid"+LS); 

+		fw.write("VALID = start=2000-01-01; end=2008-12-31;"+LS);

+		fw.write(LS); 

+		fw.write("# The data is derived from the following primary source"+LS); 

+		fw.write("#SOURCE = http://www.azworldairports.com"+LS); 

+		fw.write(LS); 

+		fw.write("# ISO3166-1 alpha3 keys and levels of relationship"+LS); 

+		fw.write("ISOKEY_0 = "+ctry+LS); 

+		fw.write("ISOKEY_0_LEVEL = "+(level -1)+LS); 

+		fw.write("ISOKEY_1 = "+ctry+LS); 

+		fw.write("ISOKEY_1_LEVEL = "+level+LS);

+		fw.write(LS); 

+		fw.write("# The mode of transportation "+LS);

+		fw.write("TRANSPORT_MODE = air"+LS); 

+		fw.write(LS);

+		fw.write("# The population being transported"+LS); 

+		fw.write("POPULATION_IDENTIFIER = human"+LS); 

+		fw.write(LS);

+		fw.write("# The time period for the rate in milliseconds "+LS); 

+		fw.write("RATE_TIME_PERIOD = 86400000"+LS); 

+		fw.write(LS); 

+		fw.write("#Average time in transportation network"+LS); 

+		fw.write("AVG_TIME_IN_SYSTEM = 1"+LS); 

+		fw.write(LS);

+		 

+		fw.write("# Record No. = Enclosing Node Key,  Node Key, ArrivalRate (individuals per RATE_TIME_PERIOD), DepartureRate(Individuals per RATE_TIME_PERIOD)"+LS); 

+		fw.flush();

+	}

+

+	public static String PopulationPath = "C:/stemws/org.eclipse.stem.internal.data.geography.population.human/resources/data/country/";

+

+	/**

+	 * read in the stem population data

+	 * 

+	 */

+	public static void readStemPopulationMap(String path) {

+		final String NOTFOUND = "xx";

+		String useName = NOTFOUND;

+

+		try {

+			File f = new File(path);

+

+			if(f.isDirectory()) {

+				String[] subFolders = f.list();

+				for(int i=0;i<subFolders.length;++i) 

+					readStemPopulationMap(path+File.separator+subFolders[i]);

+			} else {

+				if (f.getName().endsWith(".properties")) {

+											

+					BufferedReader fileReader = openReader(f);

+

+					// Add all the source URLs for this country.

+					if (fileReader != null) {

+						String buffer = null;

+						while (EOF(buffer = fileReader.readLine()) != true) {

+

+							// System.out.println(" "+buffer);

+							// Tokenize

+							// REJECT STRINGS

+							final String s1 = "RECORD_CLASSNAME";

+							final String s2 = "ISOKEY";

+							final String s3 = "ADMIN_LEVEL";

+							final String s4 = "VALID";

+							final String s5 = "SOURCE";

+							final String s6 = "POPULATION";

+							final String s7 = "YEAR";

+							final String s8 = "TITLE";

+							final String s9 = "#";

+							if ((buffer.indexOf(s1) == -1)

+									&& (buffer.indexOf(s2) == -1)

+									&& (buffer.indexOf(s3) == -1)

+									&& (buffer.indexOf(s4) == -1)

+									&& (buffer.indexOf(s5) == -1)

+									&& (buffer.indexOf(s6) == -1)

+									&& (buffer.indexOf(s7) == -1)

+									&& (buffer.indexOf(s8) == -1)

+									&& (buffer.indexOf(s9) == -1)

+									&& (buffer.indexOf("=") >= 1)) {

+

+								StringTokenizer tokenizer = new StringTokenizer(buffer, "="); //$NON-NLS-1$

+	

+								// Level 2

+								String stemID = tokenizer.nextToken().trim();

+								if(stemID.contains("ZZZ")) continue;

+								String population = tokenizer.nextToken().trim();

+	

+								// System.out.println(""+stemID2+" = "+population);

+								// populationIdMap.put(stemID2, new

+								// Integer(population.trim()));

+								try {

+									Integer popVal = new Integer(population);

+									int itest = popVal.intValue();

+									if (itest <= -1) {

+										System.out.println("invalid population val for country"

+														+ stemID);

+										System.exit(-1);

+									}

+									stemPopulationMap.put(stemID, itest);

+								} catch (NumberFormatException nfe) {

+										System.out

+												.println("!!!! invalid data"

+														+ buffer);

+										System.exit(-1);

+								}

+							} // Not header field

+						} // While !EOF

+					} // While FileReader is not null

+				} // is .properties file

+			} // Is file

+		} catch (Exception e) {

+			System.out.println("Error reading file" + useName);

+			e.printStackTrace();

+			System.exit(1);

+		}

+	}// readStemPopulation()

+	

+	/**

+	 * Create a newBufferedReader

+	 * 

+	 * @param fileName

+	 *            the name of the file we want to open for reading

+	 * 

+	 * @return a reader to a given file

+	 */

+	static protected BufferedReader openReader(File file) {

+

+		try {

+

+			return new BufferedReader(new FileReader(file));

+

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+

+		return null;

+	}

+	

+	/**

+	 * Indicate End-Of-File

+	 * 

+	 * @param buffer

+	 *            A buffer of diva data

+	 * 

+	 * @return True if we have reached End-Of-File

+	 */

+	static protected boolean EOF(String buffer) {

+		if (buffer == null )

+			return true;

+		return false;

+	}

+

+}

diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaDataMigrator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaDataMigrator.java
new file mode 100644
index 0000000..d82def5
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaDataMigrator.java
@@ -0,0 +1,379 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * extract the population data from the STEM I data files as a simple text file.
+ * The area data extracted is used during generation of STEM II properties
+ * files.
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\migration\country_names.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\migratedData\
+ * 
+ */
+
+public class AreaDataMigrator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String isoFile = null;
+
+	private String countriesFile = null;
+
+	private String outputDir = null;
+
+	/**
+	 * A map containing tuples of the form (location,area)
+	 */
+	Map areaMap = null;
+
+	Map nameMap = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List countriesList = null;
+
+	List codeList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param isoFile
+	 *            a file containing ISO3166-1 codes
+	 * @param countriesFile
+	 *            a file containing countries for which we will generate area
+	 *            properties files
+	 * @param outputDir
+	 *            the output directory where we will write the new area files
+	 */
+	AreaDataMigrator(String isoFile, String countriesFile, String outputDir) {
+		this.isoFile = isoFile;
+		this.countriesFile = countriesFile;
+		this.outputDir = outputDir;
+		areaMap = new HashMap();
+		nameMap = new HashMap();
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		countriesList = GenUtils.populateList(countriesFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(isoFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Method that loads an XML file with STEM I name and area data.
+	 * 
+	 * @param fileName
+	 *            the XML test file
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return the root element of the XML document
+	 * 
+	 * 
+	 */
+	protected Element loadXML(String fileName) {
+
+		Document doc = null;
+		DocumentBuilder docBuilder = null;
+
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory
+					.newInstance();
+			// XML document builder
+			docBuilder = factory.newDocumentBuilder();
+			doc = docBuilder.newDocument();
+			// Load XML file
+			File xmlFile = new File(fileName);
+			String filePath = xmlFile.getAbsolutePath();
+			System.out.println("File path = " + filePath); //$NON-NLS-1$
+			doc = docBuilder.parse(filePath);
+		} catch (ParserConfigurationException pce) {
+			System.out
+					.println("LoadXML():  Error configuring xml document builder " //$NON-NLS-1$
+							+ pce.getMessage());
+		} catch (SAXException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		// Return the root of this XML document
+		return doc.getDocumentElement();
+	}
+
+	/**
+	 * Read all arguments in a dataset, one by one.
+	 * 
+	 * @param file
+	 *            filename of XML file we want to load and extract data from.
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return a map with tuples (Key=locationID,Value)
+	 * 
+	 */
+	protected Map extractAreaData(String file) {
+
+		Map<String, String> areaMap = new HashMap<String, String>();
+
+		Element root = loadXML(file);
+		// get all the elements
+		NodeList nl = root.getElementsByTagName("*"); //$NON-NLS-1$
+		for (int i = 0; i < nl.getLength(); i++) {
+			Element el = (Element) nl.item(i);
+			String location = el.getAttribute("locationId").toUpperCase(); //$NON-NLS-1$
+			String area = el.getAttribute("value"); //$NON-NLS-1$
+			// Store both values for later lookup. Use uppercase.
+			areaMap.put(location, area);
+		}
+
+		// return areaList;
+		return areaMap;
+	}
+
+	/**
+	 * Read all arguments in a dataset, one by one.
+	 * 
+	 * @param the
+	 *            filename
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return a map with tuples (Key=ID,Value=Name)
+	 * 
+	 */
+	protected Map extractNameData(String file) {
+
+		Map<String, String> nameMap = new HashMap<String, String>();
+
+		Element root = loadXML(file);
+		// get all the elements
+		NodeList nl = root.getElementsByTagName("*"); //$NON-NLS-1$
+
+		for (int i = 0; i < nl.getLength(); i++) {
+			Element regions = (Element) nl.item(i);
+			NodeList locations = regions.getElementsByTagName("location"); //$NON-NLS-1$
+			for (int j = 0; j < locations.getLength(); j++) {
+				Element el = (Element) locations.item(j);
+				String id = el.getAttribute("id").toUpperCase(); //$NON-NLS-1$
+				String name = el.getAttribute("name").toUpperCase(); //$NON-NLS-1$
+
+				// Store both values for later lookup. Use uppercase.
+				nameMap.put(id, name);
+			}
+		}
+
+		return nameMap;
+	}
+
+	/**
+	 * Find all matches between locations and form a new tuple with the location
+	 * name and area value for each location.
+	 * 
+	 * @param m1
+	 *            A map containing tuples of the form (location,area)
+	 * @param m2
+	 *            A map containing tuples of the form (location,name)
+	 * @param level
+	 *            The administrative level
+	 * 
+	 * s@return A tuple of the form (name:area)
+	 */
+	protected String match(Map m1, Map m2, int level) {
+
+		String result = null;
+		Set keys = m1.keySet();
+		Iterator it1 = keys.iterator();
+
+		while (it1.hasNext()) {
+
+			String key = (String) it1.next();
+
+			if (m2.containsKey(key)) { // To be more strict, change this to
+				// m2.equals(key)
+				if (result == null) {
+
+					if (((String) m2.get(key)).startsWith(":")) { //$NON-NLS-1$
+						System.out.println("Ignoring malformed entry : " //$NON-NLS-1$
+								+ m2.get(key));
+					}
+
+					result = m2.get(key) + ":" + String.valueOf(level) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+							+ m1.get(key) + "\n"; //$NON-NLS-1$
+				} else {
+					result += m2.get(key) + ":" + String.valueOf(level) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+							+ m1.get(key) + "\n"; //$NON-NLS-1$
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Process our global list of countries with cross-referencing.
+	 * 
+	 */
+	public void process() {
+
+		PrintWriter outputFile = null;
+
+		// Admin levels for each country
+		// TO DO : fix this hard coded value. Should be passed as a parameter.
+		// Path should contain the location of the STEM's 1 maps : it should
+		// take value from parameter instead.
+		final String path = "C:\\EclipseProjects\\workspace2\\GreenScreen\\InstallTemplate\\Maps\\"; //$NON-NLS-1$
+
+		final int LEVELS = 1;
+
+		for (int i = 0; i < countriesList.size(); i++) {
+
+			// Get the next country in the list.
+			String country = ((String) countriesList.get(i)).trim();
+
+			// Get the ISO3166-1 info for this country
+			ISOCode1 isoCode = GenUtils.getISOCode(country, codeList);
+
+			if (isoCode == null) {
+				System.out.println("iso code is null for " + country); //$NON-NLS-1$
+				continue;
+			}
+
+			System.out.println("Country is :  " + country + " code = " //$NON-NLS-1$ //$NON-NLS-2$
+					+ isoCode.getName());
+
+			// Open output file
+			if (outputFile == null) {
+				String fileName = outputDir;
+				fileName += isoCode.getName() + "_AREA.txt"; //$NON-NLS-1$
+				outputFile = GenUtils.openWriter(fileName);
+			}
+
+			for (int j = 0; j <= LEVELS; j++) {
+				// Open the source data files for this country:
+
+				// Open the area file
+				String areaFile = path;
+				areaFile += isoCode.getAlpha3() + "_Area_" + j + ".xml"; //$NON-NLS-1$ //$NON-NLS-2$
+				BufferedReader areaReader = GenUtils.openReader(areaFile);
+				if (areaReader == null) {
+					System.out.println("File not found for : " + areaFile); //$NON-NLS-1$
+					continue;
+				}
+
+				// Open the names file
+				String nameFile = path;
+				nameFile += isoCode.getAlpha3() + "_Names_" + j + ".xml"; //$NON-NLS-1$ //$NON-NLS-2$
+				BufferedReader nameReader = GenUtils.openReader(nameFile);
+				if (nameReader == null) {
+					System.out.println("File not found for : " + nameFile); //$NON-NLS-1$
+					continue;
+				}
+
+				// Load the XML area and names documents and extract the data we
+				// need
+				try {
+					areaMap = extractAreaData(areaFile);
+					nameMap = extractNameData(nameFile);
+					// now do the matchings
+					String tuple = match(areaMap, nameMap, j);
+					// write match to output file.
+					// A match is a tuple of the form (name:area)
+					outputFile.write(tuple);
+					// Close the resources
+					areaReader.close();
+					nameReader.close();
+					areaReader = null;
+					nameReader = null;
+					areaFile = null;
+					nameFile = null;
+				} catch (IOException e) {
+					e.printStackTrace();
+					continue;
+				}
+			} // for j
+
+			if (outputFile != null) {
+				outputFile.close();
+				outputFile = null;
+			}
+		}
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		final int ISO_FILE = 0;
+		final int COUNTRY_FILE = 1;
+		final int OUTPUT_DIR = 2;
+		final int PARAMS = 3;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$
+			System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+			System.out.println("\t\t Target countries file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$
+			return;
+		}
+
+		AreaDataMigrator migrator = new AreaDataMigrator(args[ISO_FILE],
+				args[COUNTRY_FILE], args[OUTPUT_DIR]);
+		migrator.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaGenerator.java
new file mode 100644
index 0000000..6be712a
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AreaGenerator.java
@@ -0,0 +1,1393 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * generate the area.properties files for all countries.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/AreaGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\AreaGenerator.config)
+ * 
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+
+public class AreaGenerator {
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String areaData = null;
+
+	private String polygonAreaData = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * Lists for ISO 3166-1 codes, target countries, and population data.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List areaList = null;
+
+	List level1PolygonAreaList = null;
+
+	List level2PolygonAreaList = null;
+
+	List usaLevel2List = null;
+
+	/**
+	 * Hash set for storing the source URLs relevant to area data.
+	 */
+	Set<String> urlSet = null;
+
+	/**
+	 * Hash map to keep track of which sources will be shown commented out and
+	 * which will appear active.
+	 */
+	HashMap<String, Boolean> urlStatus = null;
+
+	/**
+	 * String used to indicate default value for unknown areas.
+	 */
+	String DEFAULT = "0"; //$NON-NLS-1$	
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param areaData -
+	 *            directory conaining aread data for each country in data set.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param polygonAreaData -
+	 *            the path to area data in polygon units
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public AreaGenerator(String iso3166_1, String iso3166_2, String fixFile,
+	// String areaData, String targetFile, String polygonAreaData,
+	// String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.areaData = areaData;
+	// this.polygonAreaData = polygonAreaData;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// // Set the URL IDs that are relevant for area data.
+	// initAreaURLSet();
+	// // Set which URLs are active and which ones should be commented out.
+	// setURLStatus();
+	//
+	// }
+	/**
+	 * @param configFile
+	 */
+	public AreaGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("POLYGON_AREAS")) { //$NON-NLS-1$
+				polygonAreaData = vars.get(var);
+			} else if (var.equals("AREA_POP")) { //$NON-NLS-1$
+				areaData = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.GROUPED_COUNTRIES;
+		}
+		if (polygonAreaData == null) {
+			polygonAreaData = path + GenConstants.POLYGON_AREAS_DIR;
+		}
+		if (areaData == null) {
+			areaData = path + GenConstants.AREA_POPULATION_DIR;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = workspace + GenConstants.PROPERTIES_OUTPUT_DIR;
+		}
+
+		targetList = null;
+		// Set the URL IDs that are relevant for area data.
+		initAreaURLSet();
+		// Set which URLs are active and which ones should be commented out.
+		setURLStatus();
+
+	}
+
+	/**
+	 * Sets the URL IDs relevant for area data. We are only interested in URLs
+	 * with ID = DIVA. This can be different for different types of data. For
+	 * example, for population data, we are interested on ID = CIA
+	 */
+	protected void initAreaURLSet() {
+		urlSet = new HashSet<String>();
+		urlSet.add(new String("CIA")); //$NON-NLS-1$
+		urlSet.add(new String("USCENSUSAREA")); //$NON-NLS-1$
+		urlSet.add(new String("USCENSUSBOUNDS")); //$NON-NLS-1$
+		urlSet.add(new String("USCENSUSPUERTORICO")); //$NON-NLS-1$
+		urlSet.add(new String("CITYPOPULATION")); //$NON-NLS-1$
+		urlSet.add(new String("UNITEDNATIONS")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Set which URL appears as uncommented or ACTIVE and which ones appear as
+	 * commented out or SECONDARY. Only URL should be active. All others should
+	 * appear commented.
+	 * 
+	 */
+	protected void setURLStatus() {
+		urlStatus = new HashMap<String, Boolean>();
+		// This will be the active URL.
+		urlStatus.put("CIA", new Boolean(true)); //$NON-NLS-1$
+		// All other URLs appear as commented out, secondary.
+		urlStatus.put("USCENSUSAREA", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("USCENSUSBOUNDS", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("USCENSUSPUERTORICO", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("CIA", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("CITYPOPULATION", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("UNITEDNATIONS", new Boolean(true)); //$NON-NLS-1$
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// THIS IS AN SPECIAL CASE.
+		// FOR THE USA ONLY, WE HAVE THE LEVEL 2 DATA FOR ALL COUNTIES.
+		usaLevel2List = GenUtils.populateList(GenConstants.USA_LEVEL_2_AREA);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its area.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		final int LEVEL_1 = 1;
+		final int LEVEL_2 = 2;
+
+		// A writer for the new file we are creating.
+		PrintWriter propertiesFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Level 0 area in square kilometers
+		String level0AreaSqKm = null;
+
+		// Aggregate polygon area for level 1
+		String aggregateLevel1PolygonArea = null;
+
+		// Value used as default to compute the
+		// approximate area of an unknown location
+		String defaultAreaSqKm = DEFAULT;
+		String defaultPolygonArea = DEFAULT;
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its names.properties file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+
+			System.out
+					.println("\t\t<<<< AREA GENERATOR -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous level.
+					int oldLevel = level - 1;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficieny.
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(
+									items[ISOData.COUNTRY_NAME], codeList);
+						}
+
+						// Read and keep in memory a list of the area data
+						// for this country.
+						if (areaList == null) {
+							String name = areaData + isoCode.getName()
+									+ "_AREA.txt"; //$NON-NLS-1$
+							areaList = GenUtils.populateList(name);
+						}
+
+						// Get the level of the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldLevel) ? true : false;
+
+						// Variable used to hold the formatted output data.
+						String data = null;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldLevel = level;
+							// Reset our repeated history
+							if (entryList != null) {
+								entryList.clear();
+							}
+							entryList = new ArrayList<String>();
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							// Close previous file if it is still open.
+							if (propertiesFile != null) {
+								System.out.println("\t\t<<Generated : " //$NON-NLS-1$
+										+ fileName + ">>"); //$NON-NLS-1$
+								propertiesFile.close();
+								propertiesFile = null;
+								fileName = null;
+							}
+
+							// Read and keep in memory a list of the level 1
+							// area data
+							// in polygon units for this country.
+							if (level1PolygonAreaList == null && level == 1) {
+
+								// Load the polygon area data for level 1.
+								String name = polygonAreaData
+										+ isoCode.getAlpha3()
+										+ "\\" //$NON-NLS-1$
+										+ isoCode.getAlpha3()
+										+ "_1_POLYAREA.txt"; //$NON-NLS-1$
+
+								// Load level 1 polygon area list
+								level1PolygonAreaList = GenUtils
+										.populateList(name);
+
+								// Find the level 0 area in square kilometers
+								level0AreaSqKm = getArea(
+										items[ISOData.COUNTRY_NAME],
+										items[ISOData.COUNTRY_NAME], areaList,
+										0);
+
+								// Find the aggregate polygon area for level 1
+								aggregateLevel1PolygonArea = getAggregateArea(level1PolygonAreaList);
+							}
+
+							// Read and keep in memory a list of the level 2
+							// area data
+							// in polygon units for this country.
+							if (level2PolygonAreaList == null && level == 2) {
+
+								// Load the polygon area data for level 2.
+								String name = polygonAreaData
+										+ isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+										+ "_2_POLYAREA.txt"; //$NON-NLS-1$
+
+								level2PolygonAreaList = GenUtils
+										.populateList(name);
+
+							}
+
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (propertiesFile == null) {
+							// Create the file name for the new properties.file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_" + "area.properties"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+							// Create tne new properties.file for this country.
+							propertiesFile = GenUtils.openWriter(fileName);
+						}
+
+						// If we have switched to a different data level (i,e,
+						// admin 0 to admin 1)
+						if (transition == true) {
+							// Just add the header.
+							data = getHeader(isoCode, level);
+							GenUtils.addData(propertiesFile, data);
+							// Forget the data we just wrote.
+							data = null;
+						}
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+
+							if (transition == true) {
+								data = "# Country\n"; //$NON-NLS-1$
+								data += isoCode.getAlpha3()
+										+ " = " //$NON-NLS-1$
+										+ getArea(items[ISOData.COUNTRY_NAME],
+												level) + "\n"; //$NON-NLS-1$
+								// Write formatted output
+								GenUtils.addData(propertiesFile, data);
+							}
+							continue;
+
+						case DataTypes.LEVEL_1:
+
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// Verify for repeated entries -- avoid duplcates
+						switch (level) {
+
+						case LEVEL_1:
+							if (GenUtils.isRepeated(current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(current);
+							break;
+
+						case LEVEL_2:
+							if (GenUtils.isRepeated(items[ISOData.ADMIN1_NAME]
+									+ current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(items[ISOData.ADMIN1_NAME] + current);
+							break;
+
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this country
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list
+								// of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							// STEP 2: piece together the ID using the
+							// proper lex objects : the USA is a special
+							// case
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								descriptor = lex1Current.getDescriptor()
+										+ "-" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA();
+							} else {
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+								// Add some commens to allow reverse engineering
+								// or backtracking the origin of this generated
+								// key as much as possible.
+								data = "# Generated key details : " //$NON-NLS-1$
+										+ " Level 1 ( " //$NON-NLS-1$
+										+ lex1Current.getDescriptor()
+										+ " = " //$NON-NLS-1$
+										+ lex1Current.getAdmin1()
+										+ "). " //$NON-NLS-1$
+										+ "Level 2" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex()
+										+ " = " + lex2Current.getAdmin2() //$NON-NLS-1$
+										+ "). \n"; //$NON-NLS-1$
+							}
+
+						} else { // Compose descriptor for level 1 and level
+							// 0 data.
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+
+								// If there is no descriptor still, generate
+								// one!
+								if (descriptor.equals(current) == true) {
+									descriptor = isoCode.getAlpha2() + "-" //$NON-NLS-1$
+											+ current;
+								}
+							}
+
+							data = "#" + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+						}
+
+						String area = DEFAULT;
+						String level1AreaSqKm = DEFAULT;
+
+						switch (level) {
+
+						case 1:
+
+							if (descriptor.contains("UNK") == false) { //$NON-NLS-1$
+								area = getArea(current,
+										items[ISOData.COUNTRY_NAME], areaList,
+										level);
+							} else {
+								// Use the following formula to compute
+								// approximate area :
+								// [POLYGON_AREA1/POLYGON_AREA0] * AREA0_SQKM
+
+								area = getApproximateL1Area(current,
+										items[ISOData.COUNTRY_NAME],
+										aggregateLevel1PolygonArea,
+										level0AreaSqKm);
+
+							}
+
+							break;
+
+						case 2:
+
+							// Treat the USA as a special case :
+							// for the USA we have a list of level 2 data.
+							if (descriptor.contains("US-")) { //$NON-NLS-1$
+
+								// Firt, find the ISOCode2 for this USA admin.
+								ISOCode2 code = GenUtils.getISO2Object(
+										iso2List, items[ISOData.ADMIN1_NAME],
+										isoCode.getAlpha2());
+
+								// Second, find the area for this USA admin.
+								area = getUSAL2Area(items[ISOData.ADMIN2_NAME],
+										code.getIndex(), usaLevel2List);
+								break;
+							}
+
+							if (descriptor.contains("UNK") == false) { //$NON-NLS-1$
+
+								// First, get the area in SQ KM for the level 1
+								// container of the current level 2 adminstratin
+								level1AreaSqKm = getArea(
+										items[ISOData.ADMIN1_NAME],
+										items[ISOData.COUNTRY_NAME], areaList,
+										level - 1);
+
+								// Now get the approximate area in SQ KM for the
+								// level 2 administration
+								area = getApproximateL2Area(descriptor,
+										items[ISOData.ADMIN1_NAME],
+										items[ISOData.COUNTRY_NAME],
+										level1AreaSqKm);
+							} else {
+								// Use the following formula to compute
+								// approximate area :
+								// [POLYGON_AREA2 / POLYGON_AREA1] * AREA1_SQKM
+
+								String level2PolygonArea = getPolygonArea(
+										descriptor, items[ISOData.ADMIN1_NAME],
+										level2PolygonAreaList, 2);
+
+								double ratio = 0.0;
+								double approxArea = 0.0;
+
+								if (Double.parseDouble(defaultPolygonArea) != 0) {
+									ratio = Double
+											.parseDouble(level2PolygonArea)
+											* Double
+													.parseDouble(defaultPolygonArea);
+									approxArea = Double
+											.parseDouble(defaultAreaSqKm)
+											* ratio;
+								}
+
+								area = Double.toString(approxArea);
+
+								System.out.println("UNKNOWN : " //$NON-NLS-1$
+										+ items[ISOData.ADMIN2_NAME]
+										+ "," + descriptor //$NON-NLS-1$
+										+ "," + area); //$NON-NLS-1$
+
+							}
+
+							if (defaultAreaSqKm == DEFAULT) {
+								defaultAreaSqKm = level1AreaSqKm;
+								defaultPolygonArea = getPolygonArea(
+										items[ISOData.ADMIN1_NAME],
+										items[ISOData.COUNTRY_NAME],
+										level1PolygonAreaList, 1);
+							}
+
+							break;
+
+						}
+
+						if (data != null) {
+							data += descriptor + " = " + GenUtils.format(area) //$NON-NLS-1$
+									+ "\n"; //$NON-NLS-1$
+						} else {
+							data = descriptor + " = " + GenUtils.format(area) //$NON-NLS-1$
+									+ "\n"; //$NON-NLS-1$
+						}
+
+						// If area is not known (desfault value), then comment
+						// it
+						// if (area.equals(DEFAULT)) {
+						// System.out
+						// .println("VUK : " + descriptor + " , " + current
+						// //$NON-NLS-1$ //$NON-NLS-2$
+						// + " , " + level); //$NON-NLS-1$
+						// }
+
+						// Write the formatted output
+						GenUtils.addData(propertiesFile, data);
+						data = null;
+
+					} // while
+
+					// Reset our location used to compute approximate area for
+					// unknown locations.
+					defaultAreaSqKm = DEFAULT;
+					defaultPolygonArea = DEFAULT;
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Get rid of the lists of polyon area data.
+					if (level1PolygonAreaList != null) {
+						level1PolygonAreaList.clear();
+						level1PolygonAreaList = null;
+					}
+
+					if (level2PolygonAreaList != null) {
+						level2PolygonAreaList.clear();
+						level2PolygonAreaList = null;
+					}
+
+					// Reset the area list
+					if (areaList != null) {
+						areaList.clear();
+						areaList = null;
+					}
+
+					// Close all open resources.
+					reader.close();
+
+					if (propertiesFile != null) {
+						propertiesFile.close();
+						propertiesFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		} // for
+	}
+
+	/**
+	 * Generate the header comment for this file -- it varies for different
+	 * admin levels.
+	 * 
+	 * @param code
+	 *            ISO 3166-1 code
+	 * @param level
+	 *            administrative level
+	 * 
+	 * @return the header for the new file.
+	 * 
+	 */
+	protected String getHeader(ISOCode1 code, int level) {
+
+		final int DATA_DESCRIPTOR = 0;
+		final int URL = 1;
+
+		// Create the file name for the URL file.
+		String urlFile = workspace + GenConstants.PARAMS_DIR
+				+ GenConstants.URLS_DIR;
+		urlFile += code.getName() + ".txt"; //$NON-NLS-1$
+
+		String header = null;
+
+		header = "# " + code.getAlpha3() + "_" + level + "_area.properties\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		header += "# This file contains area values for " + code.getName() //$NON-NLS-1$
+				+ "\n"; //$NON-NLS-1$
+		// header += Calendar.getInstance().getTime() + "\n";
+
+		// Add the copyright statement.
+		header += GenUtils.getCopyright();
+
+		// Add an explanation of the key format in our data files.
+		header += GenUtils.getKeyFormatExplanation();
+
+		header += "# This is the name of the class that will interpret the rest of the file's contents\n"; //$NON-NLS-1$
+		header += "RECORD_CLASSNAME = org.eclipse.stem.internal.data.CountryGraphRecord$CountryAreaLabelGraphRecord\n\n"; //$NON-NLS-1$
+
+		header += "# The ISO-3166-1 alpha3 code for the country\n"; //$NON-NLS-1$
+		header += "ISOKEY = " + code.getAlpha3() + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		header += "# The administration level of the area data\n"; //$NON-NLS-1$
+		header += "ADMIN_LEVEL = " + level + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		header += "# This is the date range for which the area values in this file are valid \n"; //$NON-NLS-1$
+		header += "# See http://purl.org/dc/terms/1.1/valid\n"; //$NON-NLS-1$
+		header += "VALID = start=1900-01-01;\n\n"; //$NON-NLS-1$
+
+		// The United Nations data policy applies only to Europe :
+		// header += GenUtils.getUNPolicy();
+
+		header += "# This is the source of the data\n"; //$NON-NLS-1$
+
+		// Open the URL file for this country.
+		// System.out.println("url file = " + urlFile);
+		BufferedReader urlReader = GenUtils.openReader(urlFile);
+
+		try {
+			// Add all the source URLs for this country.
+			if (urlReader != null) {
+				String buffer = null;
+				while (GenUtils.EOF(buffer = urlReader.readLine()) != true) {
+
+					// System.out.println("Buffer = " + buffer);
+
+					// Tokenize
+					StringTokenizer tokenizer = new StringTokenizer(buffer, "*"); //$NON-NLS-1$
+
+					// We know that we expect only two tokens. Get them. Order
+					// matters here.
+					String[] tokens = new String[2];
+					tokens[DATA_DESCRIPTOR] = tokenizer.nextToken();
+					tokens[URL] = tokenizer.nextToken();
+
+					// URL sourceURL = null;
+
+					// Is this data descriptor one of our data sources (source
+					// URL) ?
+					if (GenUtils.isSourceURL(urlSet, tokens[DATA_DESCRIPTOR]) == true) {
+
+						// try {
+						// Is this data descriptor one of our active data
+						// sources ?
+
+						if (GenUtils.isActiveURL(urlStatus,
+								tokens[DATA_DESCRIPTOR]) == false) {
+							// No, it is not one an active URL, so comment
+							// it
+							// out.
+							// sourceURL = new URL(tokens[URL]);
+
+							// header += "# "
+							// + "SOURCE = "
+							// + URLEncoder.encode(sourceURL
+							// .toString(), "UTF-8") + "\n";
+							header += "# " + "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						} else {
+							// header += "SOURCE = "
+							// + URLEncoder.encode(sourceURL.toString(),
+							// "UTF-8") + "\n";
+							//$NON-NLS-3$
+							header += "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+
+						// } catch (java.io.UnsupportedEncodingException e) {
+						// System.out.println("Error:" + e.getMessage());
+						// //$NON-NLS-1$
+						// }
+
+					}
+
+				} // while
+
+				// To make it look better, add an extra new line.
+				header += "\n"; //$NON-NLS-1$
+
+			}
+
+		} catch (IOException e) {
+			//
+		}
+
+		if (level == DataTypes.LEVEL_1) {
+			header += "\n# State/Province\n\n"; //$NON-NLS-1$
+		} else if (level == DataTypes.LEVEL_2) {
+			header += "# Level 1 (admin 1 = e.g., state)\n"; //$NON-NLS-1$
+			header += "# Level 2 (admin 2 = e.g., county)\n\n"; //$NON-NLS-1$
+		}
+
+		return header;
+	}
+
+	/**
+	 * Find the area value for a given entity.
+	 * 
+	 * @param entity
+	 *            the entity for which we want to find the area
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return the area value
+	 */
+	protected String getArea(String entity, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int AREA = 2;
+
+		Iterator it = areaList.iterator();
+
+		String entityStr = entity.toUpperCase();
+
+		while (it.hasNext()) {
+
+			String[] areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			// Round up area value to 1
+			// if (Double.parseDouble(areaData[AREA]) < 1.0) {
+			// // 1 SQKM is the minimum area value we return.
+			// areaData[AREA] = "1.0";
+			// }
+
+			if (areaData[ENTITY].trim().toUpperCase().equals(entityStr)) {
+
+				// We got a name match, now check both entities belong to same
+				// admin level
+				// (i.e. both are cities or both are counties, etc)
+				// Otherwise it is ambigous because we can have cities and
+				// counties with the same name
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(areaData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return areaData[AREA].trim();
+			}
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the area of a polygon (in polygon units)
+	 * 
+	 * @param descriptor
+	 * @param container
+	 * @param polygonAreaList
+	 * @param level
+	 * 
+	 * @return a polygon area
+	 */
+	protected String getPolygonArea(String descriptor, String container,
+			List polygonAreaList, int level) {
+
+		final int CONTAINER = 0;
+
+		final int ADMINISTRATION = 1;
+
+		final int DESCRIPTOR = 2;
+
+		final int POLYGON_AREA = 3;
+
+		Iterator it = polygonAreaList.iterator();
+
+		String descriptorStr = descriptor.toUpperCase().trim();
+
+		String containerStr = container.toUpperCase().trim();
+
+		while (it.hasNext()) {
+
+			String match = null;
+
+			String[] areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			match = areaData[ADMINISTRATION].toUpperCase().trim();
+
+			switch (level) {
+
+			case DataTypes.LEVEL_1:
+				// We match based on the administration name.
+				match = areaData[ADMINISTRATION].toUpperCase().trim();
+				break;
+
+			case DataTypes.LEVEL_2:
+				// We match based on the descriptor of the level 2 admin.
+				match = areaData[DESCRIPTOR].toUpperCase().trim();
+				// int endIndex = match.lastIndexOf("-");
+				// match = match.substring(0, endIndex);
+				break;
+
+			}
+
+			// System.out.println("Match = " + match);
+
+			String areaContainer = areaData[CONTAINER].toUpperCase().trim();
+
+			if (match.equals(descriptorStr)
+					&& areaContainer.equals(containerStr)) {
+				return areaData[POLYGON_AREA].trim();
+			}
+
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the area value for a given entity.
+	 * 
+	 * @param entity
+	 *            the entity for which we want to find the area
+	 * 
+	 * @param entityContainer
+	 * 
+	 * @param areaList
+	 * 
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return the area value
+	 */
+	protected String getArea(String entity, String entityContainer,
+			List areaList, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int AREA = 2;
+
+		String[] areaData = null;
+
+		Iterator it = areaList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String entityContainerStr = entityContainer.toUpperCase().trim();
+
+		while (it.hasNext()) {
+
+			areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			// Round up area value to 1
+			// if (Double.parseDouble(areaData[AREA]) < 1.0) {
+			// // 1 SQKM is the minimum area value we return.
+			// areaData[AREA] = "1.0";
+			// }
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = areaData[ENTITY].toUpperCase().trim();
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						// Check both entities belong to same level
+						if (String.valueOf(level)
+								.equals(areaData[LEVEL].trim()) == false) {
+							// Ignore : same name , but different level
+							continue;
+						}
+						return areaData[AREA].trim();
+					}
+				} // for
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(areaData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+				return areaData[AREA].trim();
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the area value for a given county (level 2 admin) within the USA
+	 * 
+	 * @param entity
+	 *            the entity for which we want to find the area
+	 * 
+	 * @param state
+	 * 
+	 * @param areaList
+	 * 
+	 * @return the area value
+	 */
+	protected String getUSAL2Area(String entity, String state, List areaList) {
+
+		final int ENTITY = 0;
+
+		final int STATE_ID = 1;
+
+		final int AREA = 2;
+
+		String[] areaData = null;
+
+		Iterator it = areaList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String stateStr = state.toUpperCase().trim();
+
+		while (it.hasNext()) {
+
+			areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			// Get the entity name and remove blanks
+			String location = areaData[ENTITY].toUpperCase().trim();
+
+			location = location.toUpperCase().trim();
+
+			if (entityStr.equals(location)) {
+
+				// Check both entities belong to same state
+				if (stateStr.equals(areaData[STATE_ID].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+				return areaData[AREA].trim();
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the approximate area value for a known location.
+	 * 
+	 * @param level2Container
+	 * @param level1Container
+	 * @param level0Container
+	 * @param level1AreaSqKm
+	 * 
+	 * @return the approximate area value
+	 */
+	protected String getApproximateL2Area(String level2Container,
+			String level1Container, String level0Container,
+			String level1AreaSqKm) {
+
+		// Find the area in polygon units of the level 1 container
+		String level1PolygonArea = getPolygonArea(level1Container,
+				level0Container, level1PolygonAreaList, 1);
+
+		// Find the area in polygon units of the level 2 administration
+		String level2PolygonArea = getPolygonArea(level2Container,
+				level1Container, level2PolygonAreaList, 2);
+
+		// Compute the approximate area, but check division by zero first.
+		if (Double.parseDouble(level2PolygonArea) <= 0) {
+			return DEFAULT;
+		}
+
+		double ratio = Double.parseDouble(level2PolygonArea)
+				/ Double.parseDouble(level1PolygonArea);
+
+		String area = String
+				.valueOf(ratio * Double.parseDouble(level1AreaSqKm));
+
+		return area;
+	}
+
+	/**
+	 * Find the approximate area value for a known location.
+	 * 
+	 * @param level1Container
+	 * @param level0Container
+	 * @param aggreateLevel1PolygonArea
+	 * @param level1AreaSqKm
+	 * 
+	 * @return the approximate area value
+	 */
+	protected String getApproximateL1Area(String level1Container,
+			String level0Container, String aggregateLevel1PolygonArea,
+			String level0AreaSqKm) {
+
+		// Find the area in polygon units of the level 1 container
+		String level1PolygonArea = getPolygonArea(level1Container,
+				level0Container, level1PolygonAreaList, 1);
+
+		// Compute the approximate area, but check division by zero first.
+		if (Double.parseDouble(level1PolygonArea) <= 0) {
+			return DEFAULT;
+		}
+
+		double ratio = Double.parseDouble(level1PolygonArea)
+				/ Double.parseDouble(aggregateLevel1PolygonArea);
+
+		String area = String
+				.valueOf(ratio * Double.parseDouble(level0AreaSqKm));
+
+		return area;
+	}
+
+	/**
+	 * 
+	 * @return sum of all level K areas either in polygon units
+	 * 
+	 */
+	protected String getAggregateArea(List areaList) {
+
+		final int AREA = 3;
+		Double aggregate = new Double(0.0);
+
+		if (areaList == null)
+			return "1.0"; //$NON-NLS-1$
+		Iterator it = areaList.iterator();
+		while (it.hasNext()) {
+			String[] areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+			aggregate += Double.parseDouble(areaData[AREA].trim());
+		}
+
+		return Double.toString(aggregate);
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int AREA_DATA = 3;
+		// final int TARGET_LIST = 4;
+		// final int POLYGON_AREAS = 5;
+		// final int LEX_DIR = 6;
+		// final int OUTPUT_DIR = 7;
+		// final int PARAMS = 8;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Area file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Polygon areas"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// AreaGenerator gen = new AreaGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[AREA_DATA],
+		// args[TARGET_LIST], args[POLYGON_AREAS], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		AreaGenerator gen = new AreaGenerator(args[CONFIG_FILE]);
+		gen.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AttenuateLogFile.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AttenuateLogFile.java
new file mode 100644
index 0000000..27956fa
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/AttenuateLogFile.java
@@ -0,0 +1,152 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+/**
+ * The utility attenuates seasonal data to dampen infectious cases during seasons when
+ * a particular strain is not dominant. For instance, if a log file contains influenza
+ * cases for 10 years worth of data, and year 1, 2, 5 and 7 of those years had H3N2 strain,
+ * you can use the program to get rid of the peaks for year 3, 4, 6, 8, 9 and 10.
+ */
+public class AttenuateLogFile {
+
+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	
+	/**
+	 * NLS Prefix for Infector name
+	 */
+	public static String infectorPrefix = Messages.getString("Inoculator.1"); //$NON-NLS-1$
+	
+	/**
+	 * NLS Prefix for Inoculator name
+	 */
+	public static String inoculatorPrefix = Messages.getString("Inoculator.2"); //$NON-NLS-1$
+	
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings("nls")
+	public static void main(String [] args) {
+		if(args.length < 4) {
+			System.err.println("Usage: AttenuateLogFile <log file> <cycle period> <start offset> <signal1> <signal2> ... <signal n>"); //$NON-NLS-1$
+			System.exit(-1);
+		}
+		
+		String logFile = args[0];
+		double period = Double.parseDouble(args[1]);
+		int offset = Integer.parseInt(args[2]);
+		double damp  = Double.parseDouble(args[3]);
+		
+		int [] signal = new int[args.length-4];
+		for(int i=4;i<args.length;++i) signal[i-4]=Integer.parseInt(args[i]);
+		
+		ArrayList<String>headers = new ArrayList<String>();
+		ArrayList<ArrayList<String>>logText = new ArrayList<ArrayList<String>>();
+		ArrayList<ArrayList<Double>>logData = new ArrayList<ArrayList<Double>>();
+		
+		try {
+			 // Read infectious file
+			 FileInputStream ifile = new FileInputStream(logFile); 
+		     BufferedReader ireader = new BufferedReader(new InputStreamReader(ifile));
+		     String header = null;
+		     header=ireader.readLine();
+		     if(header == null) {
+		    	 System.err.println("Error, "+args[0]+" file is empty!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		     StringTokenizer st = new StringTokenizer(header, ","); //$NON-NLS-1$
+		     int column = 0;
+		     while(st.hasMoreTokens()) {
+		    	 String val = st.nextToken();
+		    	 headers.add(val.trim());
+		    	 ++column;
+		     }
+		    
+		    String data = null; 
+		    data=ireader.readLine();
+		    if(data == null) {
+		    	 System.err.println("Error, "+args[0]+" file has no data!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		    
+		    while(data != null && data.trim().length() > 0) {
+		    
+			    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+			    column = 0;
+			    ArrayList<String> txtlist = new ArrayList<String>();
+			    ArrayList<Double> datalist = new ArrayList<Double>();
+				while (st.hasMoreTokens()) {
+					String val = st.nextToken().trim();
+					if(column < 2)
+						txtlist.add(val);
+					else
+						datalist.add(Double.parseDouble(val));
+				    ++ column;
+			    } // read tokens
+				logText.add(txtlist);
+				logData.add(datalist);
+				data=ireader.readLine();
+		    }
+		    ireader.close();
+		    
+		    // Process the data
+		    
+		    int day = offset;
+		    int year = 0;
+		    double startNewYear = period;
+		    System.out.println("signal: "+signal);
+		    for(int i=0;i<logText.size();++i) {
+		    	int sig = signal[year];
+		    	ArrayList<Double> infdata = logData.get(i);
+		    	if(sig == 0)
+		    		for(int j=0;j<infdata.size();++j) infdata.set(j, infdata.get(j)*damp);
+		    	
+		    	day += 1;
+		    	if(day > startNewYear) {
+		    		startNewYear += period;
+		    		++year;
+		    	}
+		    	System.out.println("iteration "+i+" signal: "+sig);
+		    }
+		    
+		    FileWriter outfw = new FileWriter(logFile+".new.csv");
+		    for(int i=0;i<headers.size();++i) {
+		    	outfw.write(headers.get(i));
+		    	if(i <headers.size()-1) outfw.write(",");
+		    }
+		    outfw.write(LS);
+		    
+		    for(int i=0;i<logText.size();++i) {
+		    	 ArrayList<String> txtlist = logText.get(i);
+				 ArrayList<Double> datalist = logData.get(i);
+				 for(String t:txtlist) outfw.write(t+",");
+				 for(int j=0;j<datalist.size();++j) {
+					 outfw.write(datalist.get(j)+"");
+					 if(j<datalist.size()-1)outfw.write(",");
+				}
+				 outfw.write(LS);
+		    }		    
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaner.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaner.java
new file mode 100644
index 0000000..09bd535
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaner.java
@@ -0,0 +1,341 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * clean the data for Canada. This program will remove all unnecesary data from
+ * the original data source file for Canada. The original data source file for
+ * Canada was downloaded from :
+ * http://www.geocomm.com/faq/copyright.html
+ * 
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\workspace2\org.eclipse.stem.utility\dataMigration\input\properties\CountriesLight.txt 
+ * C:\shapeFiles\canada\
+ * 
+ * on nelsons machine it used to be...
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\EuropeData2007\Canada\
+ * 
+ * Overview of the data generation process for the Canada data set.
+ * 
+ * 1) Data Cleaning : start by running CanadaDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named CanadaSorted.txt with cleaned data.
+ * 
+ * In other words : Canada.txt --> ||CanadaDataCleaner|| --> CanadaSorted.txt
+ * 
+ * NOTE: CanadaSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 
+ * 2) Data Converter : run CanadaDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 3) Area and Population Data Extraction : run CanadaDataExtractor to extract
+ * area and population data or all administrations in Canada.
+ * 
+ */
+public class CanadaDataCleaner {
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+	List<String> targetList = null;
+
+	List<String> codeList = null;
+
+	/**
+	 * Hash map to keep track of polygons.
+	 */
+	HashMap<String, String> map = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	public CanadaDataCleaner(String targetFile, String outputDir) {
+		// Set values of global variables.
+		this.targetFile = targetFile;
+		this.outputDir = outputDir;
+		targetList = null;
+		map = new HashMap<String, String>();
+	}
+
+	/**
+	 * This method sets up and runs the finder.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * Process our global list of target countries.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter canadaFile = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = targetList.get(i).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out.println("<<<< Processing Country : " + file + " >>>>"); //$NON-NLS-1$  //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 100;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,,", ",UNKNOWN,UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.substring(BUFFER_MIN,
+								BUFFER_MAX).split(","); //$NON-NLS-1$
+
+						// Clear buffer of data we dont need.
+						String cleanBuffer = clean(buffer);
+
+						File countryDir = new File(outputDir);
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (canadaFile == null) {
+							fileName = countryDir + "\\" + "CanadaSorted.txt"; //$NON-NLS-1$ //$NON-NLS-2$									
+							// Create tne new properties.file for this country.
+							canadaFile = GenUtils.openWriter(fileName);
+						}
+
+						String val = map
+								.get(items[CanadaDataCleaningHeader.NAME1]);
+						if (val != null) {
+							// Concatenate
+							val += cleanBuffer + "\n"; //$NON-NLS-1$
+						} else {
+							// First entry
+							val = cleanBuffer + "\n"; //$NON-NLS-1$
+						}
+						map.put(items[CanadaDataCleaningHeader.NAME1], val);
+
+					}// while
+
+					// Close all open resources.
+					reader.close();
+
+					if (canadaFile != null) {
+						String output = consolidateData(map);
+						if (output != null) {
+							GenUtils.addData(canadaFile, output);
+						}
+						canadaFile.close();
+						canadaFile = null;
+						System.out.println("" //$NON-NLS-1$
+								+ fileName);
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * 
+	 * Get all the values in the map.
+	 * 
+	 * @param map
+	 *            a map of locations
+	 * 
+	 * @return String a string will all locations grouped secuentialy.
+	 * 
+	 */
+	String consolidateData(HashMap<String, String> map) {
+
+		String value = null;
+
+		if (map.isEmpty()) {
+			return null;
+		}
+
+		Set<String> keys = map.keySet();
+
+		Iterator it = keys.iterator();
+
+		while (it.hasNext()) {
+
+			String key = (String) it.next();
+
+			if (value == null) {
+				value = map.get(key);
+			} else {
+				value += map.get(key);
+			}
+
+		}
+
+		return value;
+	}
+
+	/**
+	 * Remove all irrelevant data from our buffer
+	 */
+	String clean(String buffer) {
+// count by 1
+		final int LIMIT = 9;
+		String newBuffer = null;
+
+		String[] items = buffer.split(","); //$NON-NLS-1$
+
+		int index = 0;
+
+		while (index < items.length) {
+
+			if (index >= LIMIT) {
+				newBuffer += "," + items[index++]; //$NON-NLS-1$
+				continue;
+			}
+
+			// set the country name manually
+			
+			newBuffer = "CAN, CANADA"; //$NON-NLS-1$
+			
+			switch (index) {
+/*
+			case CanadaDataCleaningHeader.ID:
+				newBuffer = items[index];
+				break;
+*/
+			
+
+            /*
+			case CanadaDataCleaningHeader.AREA:
+				newBuffer = "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case CanadaDataCleaningHeader.COUNTRY:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+            */
+			case CanadaDataCleaningHeader.NAME1:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+/*
+			case CanadaDataCleaningHeader.NAME2:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case CanadaDataCleaningHeader.NAME3:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case CanadaDataCleaningHeader.POP1:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case CanadaDataCleaningHeader.POP2:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+*/
+			}
+
+			index++;
+
+		}
+
+		return newBuffer;
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		final int TARGET_LIST = 0;
+		final int OUTPUT_DIR = 1;
+		final int PARAMS = 2;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$			
+			System.out.println("\t\t Target countries file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$					
+			return;
+		}
+
+		CanadaDataCleaner formatter = new CanadaDataCleaner(args[TARGET_LIST],
+				args[OUTPUT_DIR]);
+		formatter.run();
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaningHeader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaningHeader.java
new file mode 100644
index 0000000..5c737a4
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/CanadaDataCleaningHeader.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * 
+ * Relevant keys to the Canadian dataset. Keys in this class are used during the
+ * data cleaning process to extract only the relevant keys from the original
+ * data source file for Canada. These keys are used when running an instance of
+ * RussiaDataCleaner to perform data cleaning.
+ * 
+ */
+public abstract class CanadaDataCleaningHeader {
+
+	/**
+	 * Total Area
+	 */
+	public static final int AREA = 1;
+
+	/**
+	 * Country identifier
+	 */
+	public static final int COUNTRY = 7;
+
+	/**
+	 * Location name 1
+	 */
+	public static final int NAME1 = 8;
+
+	/**
+	 * Population value this is not really the population but it will create
+	 * dummy files
+	 */
+	public static final int POP1 = 4;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ContainmentRelationshipFinder.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ContainmentRelationshipFinder.java
new file mode 100644
index 0000000..91ce1fb
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ContainmentRelationshipFinder.java
@@ -0,0 +1,435 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+
+/**
+ * This class represents 
+ */
+public class ContainmentRelationshipFinder {
+
+	private static String CNTRY_LVL0_CODE;
+	// get the path
+	private static final String sep = File.separator;
+	@SuppressWarnings("nls")
+	private static final String PATH = "C:"+sep+"eclipse"+sep+"workspace3"+sep;
+	@SuppressWarnings("nls")
+	private static final String[] excludeList = {"USA","JPN","CVS","THA","ZZZ"};
+	private static HashSet<String> excludeSet = new HashSet<String>();
+	private static File level1Nodes = null;
+	private static File level2Nodes = null;
+	
+	// the sets of Nodes
+	static Set<String> levelOneSet= new HashSet<String>();
+	static Set<String> levelTwoSet= new HashSet<String>();
+	// for and level two nodes not inside level
+	static Set<String> orphanedSet = new HashSet<String>();
+	static String outFileName;
+	static FileWriter fw;
+	
+	/**
+	 * @param args
+	 */
+	@SuppressWarnings("nls")
+	public static void main(String[] args) {
+		for (int i = 0; i < excludeList.length; i ++) {
+			excludeSet.add(excludeList[i]);
+		}
+		
+		
+		Set allCountries = getAllCountries();
+		Iterator iter = allCountries.iterator();
+		
+		while(iter.hasNext()) {
+			levelOneSet.clear();
+			levelTwoSet.clear();
+			orphanedSet.clear();
+			
+			CNTRY_LVL0_CODE = (String) iter.next();
+			setNodesFiles(CNTRY_LVL0_CODE);
+			levelOneSet = getNodesInFile(level1Nodes);
+			levelTwoSet = getNodesInFile(level2Nodes);
+			
+			String nodeDir = PATH+"org.eclipse.stem.internal.data"+sep+"resources"+sep+"data"+sep+"relationship"+sep+"relativephysical"+sep;
+			///////////////////////////////////////
+			outFileName = nodeDir+CNTRY_LVL0_CODE+"_1_"+CNTRY_LVL0_CODE+"_2.properties"; 
+			// 1. process level TWO if we have them
+			if(levelTwoSet.size() >= 1) {
+				if (levelOneSet.size()<=0) {
+					System.out.println("ERROR. Found Level 2 data with no level 1 data for... "+CNTRY_LVL0_CODE);
+					System.exit(1);
+				}
+																	
+				 try {
+						fw = new FileWriter(outFileName);
+					} catch (IOException e) {
+						System.out.println("Error creating file writer " + e.getMessage());
+						e.printStackTrace();
+						System.exit(1);
+					}
+				writeL1ToL2Header();
+				orphanedSet = writeL2inL1Nodes();
+				if (fw != null) {
+					 try {
+							fw.flush();
+							fw.close();
+						} catch (IOException e) {
+							System.out.println("Error creating file writer " + e.getMessage());
+							e.printStackTrace();
+							System.exit(1);
+						}
+					}
+			}// if level2 exists
+			
+			
+			
+			/////////////////////////////////////
+			outFileName = nodeDir+CNTRY_LVL0_CODE+"_0_"+CNTRY_LVL0_CODE+"_1.properties"; 
+			// now write any level 1 and or orphaned nodes into the level0-1 file
+			if (orphanedSet.size() >= 1) {
+				levelOneSet.addAll(orphanedSet);
+				System.out.println("Warning, country "+CNTRY_LVL0_CODE+" has "+orphanedSet.size()+" orphaned levelTwoNodes ");
+				Iterator ugh = orphanedSet.iterator();
+				while(ugh.hasNext()) {
+					String code = (String) ugh.next();
+					System.out.println("orphan = "+code);
+				}// level1
+			}
+				
+			
+			if(levelOneSet.size()>=1) {
+				 try {
+						fw = new FileWriter(outFileName);
+					} catch (IOException e) {
+						System.out.println("Error creating file writer " + e.getMessage());
+						e.printStackTrace();
+						System.exit(1);
+					}
+				writeL0ToL1Header();
+				writeL1inL0Nodes();
+				
+				if (fw != null) {
+					 try {
+							fw.flush();
+							fw.close();
+						} catch (IOException e) {
+							System.out.println("Error creating file writer " + e.getMessage());
+							e.printStackTrace();
+							System.exit(1);
+						}
+					}
+			}// if level 1 exists
+			
+		
+			
+		} // all countries
+		
+	}// main
+	
+	
+	
+
+	@SuppressWarnings("nls")
+	private static Set<String> writeL2inL1Nodes() {
+		// ... then
+		//1 = JP-0, JP-0-G100001, Contains 
+		//2 = JP-TOH, JP-TOH-G460002, Contains
+		//3 = JP-TOH, JP-TOH-G460001, Contains
+		//4 = JP-TOH, JP-TOH-G460004, Contains
+		int icount = 0;
+		Set<String> orphans = new HashSet<String>();
+		Set<String> matchSet = new HashSet<String>(); 
+		Iterator iter = levelOneSet.iterator();
+		while(iter.hasNext()) {
+			String levelOneCode = (String) iter.next();
+			Iterator iter2 = levelTwoSet.iterator();
+			while(iter2.hasNext()) {
+				String levelTwoCode = (String) iter2.next();
+				if(levelTwoCode.indexOf(levelOneCode)>=0) {
+					icount ++;
+					write(""+icount+" = "+levelOneCode+", "+levelTwoCode+", Contains");
+					matchSet.add(levelTwoCode);
+				}
+			}//level 2
+		}// level1
+		
+		// check that everyone was added somewhere
+		Iterator iter3 = levelTwoSet.iterator();
+		while(iter3.hasNext()) {
+			String levelTwoCode = (String) iter3.next();
+		    if (!matchSet.contains(levelTwoCode)) orphans.add(levelTwoCode);
+		}
+		
+		return orphans;
+	}
+
+
+
+
+	/**
+	 * 
+	 */
+	@SuppressWarnings("nls")
+	private static void writeL1inL0Nodes() {
+		//1 = JPN, JP-CHB, Contains
+		//2 = JPN, JP-CHG, Contains
+		//3 = JPN, JP-0, Contains
+		//4 = JPN, JP-KNT, Contains
+		int icount = 0;
+		Iterator iter = levelOneSet.iterator();
+		while(iter.hasNext()) {
+			String levelOneCode = (String) iter.next();
+			icount ++;
+			write(""+icount+" = "+CNTRY_LVL0_CODE+", "+levelOneCode+", Contains");
+		}// level1
+	}//writeL1inL0Nodes()
+
+
+
+
+	/**
+	 * @param str
+	 */
+	@SuppressWarnings("nls")
+	public static void write(String str) {
+		try {
+		     fw.write(str+"\n"); 
+		 } catch (IOException e) {
+				System.out.println("Error writing to file writer "+e.getMessage());
+			    e.printStackTrace();
+			    System.exit(1);
+		  }// try
+	} // write
+	
+	
+	
+
+	/**
+	 * 
+	 */
+	@SuppressWarnings("nls")
+	public static void writeL0ToL1Header() {
+		write("# "+CNTRY_LVL0_CODE+"_0_"+CNTRY_LVL0_CODE+"_1.properties ");
+		write("#/*******************************************************************************");
+		write("# * Copyright (c) 2007 IBM Corporation and others.");
+		write("# * All rights reserved. This program and the accompanying materials");
+		write("# * are made available under the terms of the Eclipse Public License v1.0");
+		write("# * which accompanies this distribution, and is available at");
+		write("# * http://www.eclipse.org/legal/epl-v10.html");
+		write("# *");
+		write("# * Contributors:");
+		write("# *     IBM Corporation - initial API and implementation");
+		write("# *******************************************************************************/");
+		write("");
+		write("# This is the name of the class that will interpret the rest of the file's contents");
+		write("RECORD_CLASSNAME = org.eclipse.stem.internal.data.records.RelativePhysicalRelationshipGraphRecord");
+		write("");
+		write("# The title of the relationship");
+		write("TITLE = Physical containment of "+CNTRY_LVL0_CODE+" level (1) by "+CNTRY_LVL0_CODE+" (0)");
+		write("");
+		write("# This is the date range for which the values in this file are valid");
+		write("# See http://purl.org/dc/terms/1.1/valid");
+		write("VALID = start=1900-01-01;");
+		write("");
+		write("# This is the source of the data");
+		write("SOURCE = http://www.ibm.com");
+		write("");
+		write("# ISO3166-1 alpha3 keys and levels of relationship");
+		write("ISOKEY_0 = "+CNTRY_LVL0_CODE+"");
+		write("ISOKEY_0_LEVEL = 0");
+		write("ISOKEY_1 = "+CNTRY_LVL0_CODE+"");
+		write("ISOKEY_1_LEVEL = 1");
+		write("");
+		write("# Record Number = Key1, Key2, relationship");
+		
+		
+		
+	}
+	
+	
+	/**
+	 * 
+	 */
+	@SuppressWarnings("nls")
+	public static void writeL1ToL2Header() {
+		write("# "+CNTRY_LVL0_CODE+"_1_"+CNTRY_LVL0_CODE+"_2.properties ");
+		write("#/*******************************************************************************");
+		write("# * Copyright (c) 2007 IBM Corporation and others.");
+		write("# * All rights reserved. This program and the accompanying materials");
+		write("# * are made available under the terms of the Eclipse Public License v1.0");
+		write("# * which accompanies this distribution, and is available at");
+		write("# * http://www.eclipse.org/legal/epl-v10.html");
+		write("# *");
+		write("# * Contributors:");
+		write("# *     IBM Corporation - initial API and implementation");
+		write("# *******************************************************************************/");
+		write("");
+		write("# This is the name of the class that will interpret the rest of the file's contents");
+		write("RECORD_CLASSNAME = org.eclipse.stem.internal.data.records.RelativePhysicalRelationshipGraphRecord");
+		write("");
+		write("# The title of the relationship");
+		write("TITLE = Physical containment of Japan level (2) by "+CNTRY_LVL0_CODE+" (1)");
+		write("");
+		write("# This is the date range for which the values in this file are valid");
+		write("# See http://purl.org/dc/terms/1.1/valid");
+		write("VALID = start=1900-01-01;");
+		write("");
+		write("# This is the source of the data");
+		write("SOURCE = http://www.ibm.com");
+		write("");
+		write("# ISO3166-1 alpha3 keys and levels of relationship");
+		write("ISOKEY_0 = "+CNTRY_LVL0_CODE+"");
+		write("ISOKEY_0_LEVEL = 1");
+		write("ISOKEY_1 = "+CNTRY_LVL0_CODE+"");
+		write("ISOKEY_1_LEVEL = 2");
+		write("");
+		write("# Record Number = Key1, Key2, relationship");
+	}
+	/**
+	 * 
+	 * @return a set of all the countries
+	 */
+	@SuppressWarnings("nls")
+	public static Set getAllCountries() {
+		HashSet<String> all = new HashSet<String>();
+		int icount = 0;
+		String nodeDir = PATH+"org.eclipse.stem.internal.data"+sep+"resources"+sep+"data"+sep+"country"+sep;
+		System.out.println("country dir = "+nodeDir);
+		File nodes = new File(nodeDir);
+		if (nodes.exists()&&nodes.isDirectory()) {
+			//System.out.println("found top level data dir");
+			File[] contained = nodes.listFiles();
+			for (int i = 0; i < contained.length; i ++) {
+				File file = contained[i];
+				if (file.isDirectory()) {
+					String fileName = file.getName();
+					if((fileName.length()==3)&&(!excludeSet.contains(fileName))) {
+						all.add(fileName);
+						icount ++;
+						//System.out.println("found "+fileName);
+					}// if it's a country dir not on exclude lise
+				}// if directory
+			}// for all contained files
+			System.out.println(" found "+icount+" countries");
+		} else {
+			System.out.println("top level data dir not found - check static path hardcoded");
+		}
+		
+		return all;
+	}
+	
+	/**
+	 * @param countryCode
+	 */
+	@SuppressWarnings("nls")
+	public static void setNodesFiles(String countryCode) {
+		// init
+		level1Nodes = null;
+		level2Nodes = null;
+
+		// directory of node data
+		String nodeDir = PATH+"org.eclipse.stem.internal.data"+sep+"resources"+sep+"data"+sep+"country"+sep+countryCode;
+		File dir = new File(nodeDir);
+		
+		if (dir.exists()&&dir.isDirectory()) {
+			//System.out.println("found top level data dir");
+			File[] files = dir.listFiles();
+			for (int i = 0; i < files.length; i ++) {
+				File file = files[i];
+				if (file.isFile()) {
+					if(file.getName().indexOf("_1_node.properties") >= 1) {
+						level1Nodes = file;
+					}
+					if(file.getName().indexOf("_2_node.properties") >= 1) {
+						level2Nodes = file;
+					}
+				}
+				
+			}// for i files contained
+		}// if directory
+		return;
+	}
+	
+	
+	
+	/**
+	 * @param file
+	 * @return foo
+	 */
+	@SuppressWarnings("nls")
+	public static Set<String> getNodesInFile(File file ) {
+		HashSet<String> nodeSet = new HashSet<String>();
+		if (file==null) return nodeSet;
+		// the data starts after this required string. must have both
+		final String startString1 = "SPATIAL_URI";
+		final String startString2 = "platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/";
+		FileInputStream fis;
+		BufferedReader d = null;
+		try {
+			fis = new FileInputStream(file); 
+			d = new BufferedReader(new InputStreamReader(fis));
+		} catch(Exception e) {
+        	System.out.println("error opening stream for file "+file.getName());
+        	System.out.println(" error "+e.getMessage());
+        	e.printStackTrace();
+        	System.exit(1);
+        }
+        
+        String record = "";
+        boolean start = false;
+        try {
+        while ( (record=d.readLine()) != null ) { 
+           // get past the header and make sure we found
+           // the required tags of a valid node file
+           // System.out.println( "line=  " + record);
+          
+           
+           if (start) {
+        	   int comment = record.indexOf("#");
+                if(comment < 0) {
+                	// not a comment
+                	int eqChr = record.indexOf("=");
+                	if (eqChr >= 1) {
+                		// this is a node
+                		String padded = record.substring(0,eqChr);
+                		String node = padded.trim();
+                		
+                		//************
+                		//System.out.println("found key= ["+node+"]");
+                		//************
+                		
+                		nodeSet.add(node);
+                	}// if this is a node
+                }// not a comment
+           } // if start string has been found
+           if ((record.indexOf(startString1)>=0)&&(record.indexOf(startString2)>=0)) {
+        	   start = true;
+           }
+        }// while
+        } catch(Exception e) {
+        	System.out.println("error reading file "+file.getName());
+        	System.out.println(" error "+e.getMessage());
+        	e.printStackTrace();
+        	System.exit(1);
+        }
+        
+        if (!start) {
+        	System.out.println(" file "+file.getName()+" has no valid data");
+        	System.exit(1);
+        }
+		
+		return nodeSet;
+	}// get Nodes in File
+	
+	
+	
+	
+}// Class ContainmentRelationshipFinder 
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DataTypes.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DataTypes.java
new file mode 100644
index 0000000..a5f94dd
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DataTypes.java
@@ -0,0 +1,42 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- Instances of this utility
+ * class hold symbolic constants.
+ * 
+ */
+
+public abstract class DataTypes {
+
+	/**
+	 * Symbolic constants describing the current type of data we are processing.
+	 * 
+	 */
+
+	/**
+	 * Data at admin 0 level
+	 */
+	public static final int LEVEL_0 = 0;
+
+	/**
+	 * Data at admin 1 level
+	 */
+	public static final int LEVEL_1 = 1;
+
+	/**
+	 * Data at admin 2 level
+	 */
+	public static final int LEVEL_2 = 2;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DownSampler.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DownSampler.java
new file mode 100644
index 0000000..7f6e616
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/DownSampler.java
@@ -0,0 +1,114 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this class run a
+ * SinglePassDownSampler object and if more than one pass is necessary it runs
+ * an instance of MultiPassDownSampler. You can specify as arguments the
+ * threshold (alpha degrees)
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/DownSampler.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\DownSampler.config)
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+
+public class DownSampler {
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int SINGLE_PASS = 1;
+		// final int THRESHOLD = 0;
+		// final int PASSES = 1;
+		// final int ISO_3166_1 = 2;
+		// final int ISO_3166_2 = 3;
+		// final int FIX_FILE = 4;
+		// final int SINGLE_PASS_TARGET_LIST = 5; // The path to the original
+		// data
+		// // file (single-pass downsampler only)
+		// final int MULTI_PASS_TARGET_LIST = 6; // A list of alpha 3 codes for
+		// // (multi-pass downsampler only)
+		// final int LEX_DIR = 7;
+		// final int OUTPUT_DIR = 8;
+		// final int PARAMS = 9;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Threshold (in degrees)"); //$NON-NLS-1$
+		// System.out.println("\t\t Total iterations"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Single pass target countries file");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Multi pass target countries file");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// // SinglePassDownSampler performs one pass, the first pass only.
+		// SinglePassDownSampler simpleSampler = new SinglePassDownSampler(
+		// args[THRESHOLD], args[ISO_3166_1], args[ISO_3166_2],
+		// args[FIX_FILE], args[SINGLE_PASS_TARGET_LIST], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+		// simpleSampler.run();
+		//
+		// // If more than one pass is needed, then run MultiPassDownSampler.
+		// if (Integer.parseInt(args[PASSES]) > SINGLE_PASS) {
+		// MultiPassDownSampler multiSampler = new MultiPassDownSampler(
+		// args[THRESHOLD], args[PASSES], args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE],
+		// args[MULTI_PASS_TARGET_LIST], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+		// multiSampler.run();
+		// }
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		// SinglePassDownSampler performs one pass, the first pass only.
+		SinglePassDownSampler s1 = new SinglePassDownSampler(args[CONFIG_FILE]);
+		s1.run();
+
+		// If more than one pass is needed, then run MultiPassDownSampler.
+		// if (Integer.parseInt(args[PASSES]) > SINGLE_PASS) {
+		MultiPassDownSampler s2 = new MultiPassDownSampler(args[CONFIG_FILE]);
+		s2.run();
+		// }
+
+	}
+
+} // main
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaner.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaner.java
new file mode 100644
index 0000000..f35c14f
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaner.java
@@ -0,0 +1,409 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * clean the data for Europe. This program will remove all unnecesary data from
+ * the original data source file for Europe. The original data source file for
+ * Europe was downloaded from :
+ * http://www.grid.unep.ch/data/data.php?category=human_related
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/EuropeDataCleaner.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\EuropeDataCleaner.config)
+ * 
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\EuropeData2007\EuropeUN\UNdataShp\
+ * 
+ * Overview of the data generation process for the Europe data set.
+ * 
+ * 1) Data Cleaning : start by running EuropeDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named EuropeSorted.txt with cleaned data.
+ * 
+ * In other words : Europe.txt --> ||EuropeDataCleaner|| --> EuropeSorted.txt
+ * 
+ * NOTE: EuropeSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 2) Data Formatting : run EuropeDataFormatter to break down the data source
+ * (EuropeSorted.txt) into multiple data files, one for each country as
+ * indicated by the ID (i.e. NO,IT,FR,UK, etc). The result will be multiple data
+ * files (i.e. italy.txt, spain.txt, etc). Each file will be found under a
+ * folder with same name as the country (i.e. ITALY\italy.txt, SPAIN\spain.txt,
+ * etc).
+ * 
+ * 3) Data Converter : run EuropeDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 4) Area and Population Data Extraction : run EuropeDataExtractor to extract
+ * all area and population data.
+ * 
+ */
+public class EuropeDataCleaner {
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+	List<String> targetList = null;
+
+	List<String> codeList = null;
+
+	/**
+	 * Hash map to keep track of polygons.
+	 */
+	HashMap<String, String> map = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public EuropeDataCleaner(String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// map = new HashMap<String, String>();
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public EuropeDataCleaner(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+		map = new HashMap<String, String>();
+
+	}
+
+	/**
+	 * This method sets up and runs the finder.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * Process our global list of target countries.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter europeFile = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = targetList.get(i).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< EUROPE DATA CLEANER -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 200;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,,", ",UNKNOWN,UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.substring(BUFFER_MIN,
+								BUFFER_MAX).split(","); //$NON-NLS-1$
+
+						// Clear buffer of data we dont need.
+						String cleanBuffer = clean(buffer);
+						// System.out.println(Messages.getString("EuropeDataCleaner.20")
+						// + cleanBuffer); //$NON-NLS-1$
+
+						File countryDir = new File(outputDir);
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (europeFile == null) {
+							fileName = countryDir + "\\" + "EuropeSorted.txt"; //$NON-NLS-1$ //$NON-NLS-2$									
+							// Create tne new properties.file for this country.
+							europeFile = GenUtils.openWriter(fileName);
+						}
+
+						String val = map
+								.get(items[EuropeDataCleaningHeader.STRID]
+										.substring(0, 2));
+						if (val != null) {
+							// Concatenate
+							val += cleanBuffer + "\n"; //$NON-NLS-1$
+						} else {
+							// First entry
+							val = cleanBuffer + "\n"; //$NON-NLS-1$
+						}
+						map.put(items[EuropeDataCleaningHeader.STRID]
+								.substring(0, 2), val);
+
+					}// while
+
+					// Close all open resources.
+					reader.close();
+
+					if (europeFile != null) {
+						String output = consolidateData(map);
+						if (output != null) {
+							GenUtils.addData(europeFile, output);
+						}
+						europeFile.close();
+						europeFile = null;
+						System.out.println("\t\tGenerated :" //$NON-NLS-1$
+								+ fileName);
+						fileName = null;
+					}
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * 
+	 * Get all the values in the map.
+	 * 
+	 * @param map
+	 *            a map of locations
+	 * 
+	 * @return String a string will all locations grouped secuentialy.
+	 * 
+	 */
+	String consolidateData(HashMap<String, String> map) {
+
+		String value = null;
+
+		if (map.isEmpty()) {
+			return null;
+		}
+
+		Set<String> keys = map.keySet();
+
+		Iterator it = keys.iterator();
+
+		while (it.hasNext()) {
+
+			String key = (String) it.next();
+
+			if (value == null) {
+				value = map.get(key);
+			} else {
+				value += map.get(key);
+			}
+
+		}
+
+		return value;
+	}
+
+	/**
+	 * Remove all irrelevant data from our buffer
+	 */
+	String clean(String buffer) {
+
+		final int LIMIT = 20;
+		String newBuffer = null;
+
+		String[] items = buffer.split(","); //$NON-NLS-1$
+
+		int index = 0;
+
+		while (index < items.length) {
+
+			if (index > LIMIT) {
+				newBuffer += "," + items[index++]; //$NON-NLS-1$
+				continue;
+			}
+
+			switch (index) {
+
+			case EuropeDataCleaningHeader.NUMID:
+				newBuffer = items[index];
+				break;
+
+			case EuropeDataCleaningHeader.STRID:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.AREA:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.POP1:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.POP2:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.POP3:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.POP4:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case EuropeDataCleaningHeader.TEMPID:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			}
+
+			index++;
+
+		}
+
+		return newBuffer;
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int TARGET_LIST = 0;
+		// final int OUTPUT_DIR = 1;
+		// final int PARAMS = 2;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// EuropeDataCleaner formatter = new
+		// EuropeDataCleaner(args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// formatter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		EuropeDataCleaner cleaner = new EuropeDataCleaner(args[CONFIG_FILE]);
+		cleaner.run();
+
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaningHeader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaningHeader.java
new file mode 100644
index 0000000..1565378
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataCleaningHeader.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * 
+ * Relevant keys to the European dataset. Keys in this class are used during the
+ * data cleaning process to extract only the relevant keys from the original
+ * data source file for Europe. These keys are used when running an instance of
+ * EuropeDataCleaner to perform data cleaning.
+ * 
+ */
+public abstract class EuropeDataCleaningHeader {
+
+	/**
+	 * Numeric ID
+	 */
+	public static final int NUMID = 6;
+
+	/**
+	 * Name ID
+	 */
+	public static final int STRID = 7;
+
+	/**
+	 * Total Area
+	 */
+	public static final int AREA = 11;
+
+	/**
+	 * Population value 1
+	 */
+	public static final int POP1 = 15;
+
+	/**
+	 * Population value 2
+	 */
+	public static final int POP2 = 16;
+
+	/**
+	 * Population value 3
+	 */
+	public static final int POP3 = 17;
+
+	/**
+	 * Population value 4
+	 */
+	public static final int POP4 = 18;
+
+	/**
+	 * Alternative ID
+	 */
+	public static final int TEMPID = 20;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataConverter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataConverter.java
new file mode 100644
index 0000000..be608d6
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataConverter.java
@@ -0,0 +1,411 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Convert a data file that comes into the format UN Europe :
+ * http://www.grid.unep.ch/data/data.php?category=human_related into the Diva
+ * format that the generators can handle. This wont format any arbitrary format
+ * into Diva format. Converts only : UN European format -> Diva format
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/EuropeDataConverter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\EuropeDataConverter.config)
+ * 
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeNames.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\diva\Europe\
+ * 
+ * Brief overview of the data generation process for the Europe data set.
+ * 
+ * 1) Data Cleaning : start by running EuropeDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named EuropeSorted.txt with cleaned data.
+ * 
+ * In other words : Europe.txt --> ||EuropeDataCleaner|| --> EuropeSorted.txt
+ * 
+ * NOTE: EuropeSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 2) Data Formatting : run EuropeDataFormatter to break down the data source
+ * (EuropeSorted.txt) into multiple data files, one for each country as
+ * indicated by the ID (i.e. NO,IT,FR,UK, etc). The result will be multiple data
+ * files (i.e. italy.txt, spain.txt, etc). Each file will be found under a
+ * folder with same name as the country (i.e. ITALY\italy.txt, SPAIN\spain.txt,
+ * etc).
+ * 
+ * 3) Data Converter : run EuropeDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 4) Area and Population Data Extraction : run EuropeDataExtractor to extract
+ * all area and population data.
+ * 
+ * 
+ */
+
+public class EuropeDataConverter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	private String namesFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List dataList = null;
+
+	List namesList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param namesFile -
+	 *            files with all Europe level 1 names.
+	 * @param targetFile -
+	 *            list of target countries
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	public EuropeDataConverter(String iso3166_1, String namesFile,
+			String targetFile, String outputDir) {
+		// Set values of global variables.
+		this.iso3166_1 = iso3166_1;
+		this.namesFile = namesFile;
+		this.targetFile = targetFile;
+		this.outputDir = outputDir;
+		targetList = null;
+	}
+
+	/**
+	 * @param configFile
+	 */
+	public EuropeDataConverter(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("NAMES_FILE")) { //$NON-NLS-1$
+				namesFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (namesFile == null) {
+			namesFile = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Load all level 1 names for Europe.
+		namesList = GenUtils.populateList(namesFile);
+
+		// Run the converter: UN Europe -> Diva set format
+		process();
+	}
+
+	/**
+	 * Convert a data file that comes into the format UN Europe :
+	 * http://www.grid.unep.ch/data/data.php?category=human_related into the
+	 * Diva format that the generators can handle. This wont format any
+	 * arbitrary format into Diva format. Converts only : UN European format ->
+	 * Diva format
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter divaFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next file in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< EUROPE DATA CONVERTER  -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.split(","); //$NON-NLS-1$
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							String country = GenUtils.getCountryName(
+									items[EuropeDataFormattingHeader.STRID]
+											.substring(0, 2), codeList);
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getName());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new output file.
+						if (divaFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ ".txt"; //$NON-NLS-1$
+
+							System.out.println("\t\tFilename  = " + fileName); //$NON-NLS-1$
+
+							// Create tne new file
+							divaFile = GenUtils.openWriter(fileName);
+						}
+
+						// Apply the formatting to the current buffer : UN
+						// Europe -> Diva format
+						String divaLine = convert2Diva(isoCode, items);
+
+						// Write the converted line
+						System.out.println("\t\tDiva string = " + divaLine); //$NON-NLS-1$
+						GenUtils.addData(divaFile, divaLine);
+
+					}// while
+
+					// Reset ISO Code
+					isoCode = null;
+
+					// Reset file name
+					fileName = null;
+
+					// Close the target file.
+					divaFile.close();
+					divaFile = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Convert the buffer given in UN Europe format into Diva format
+	 * 
+	 * @param isoCode
+	 *            ISO 3166-1 code
+	 * 
+	 * @param data
+	 *            a buffer with data on UN Europe format
+	 * 
+	 * @return converted string
+	 * 
+	 */
+	public String convert2Diva(ISOCode1 isoCode, String[] data) {
+
+		// NUMID,STRID,AREA,POP1,POP2,POP3,POP4,TEMPID,<...polygon data...>
+
+		// 2189.0,LI,1.60000000000000000E+02,0.0,0.0,UNKNOWN,<...polygon
+		// data...>
+
+		// <ALPHA3,COUNTRY_NAME,ADMIN1,<...polygon data...>
+
+		// AGO,Angola,Luanda,<...polygon data...>
+
+		// The formatted prefix string
+		String divaString = ""; //$NON-NLS-1$
+
+		// Get relevant data for conversion.
+		Double val = Double.parseDouble(data[EuropeDataFormattingHeader.NUMID]);
+		String numID = String.valueOf(val.intValue());
+		String alpha2 = isoCode.getAlpha2();
+		String alpha3 = isoCode.getAlpha3();
+
+		// Find the location name based on its numeric ID
+		String location_name = GenUtils.getEuropeanLocation(numID, namesList);
+
+		// Find the country name based on the alpha 2 code.
+		String country_name = GenUtils.getCountryName(alpha2, codeList);
+
+		// Get the number of items in the buffer
+		int length = data.length;
+
+		// Add fixed data we already have available :
+		divaString = alpha3 + "," + country_name + "," + location_name; //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Concatenate polygon data -- ignore the first eight items
+		// which are non-polygon data :
+		// NUMID,STRID,AREA,POP1,POP2,POP3,POP4,TEMPID,
+		for (int i = 8; i < length; i++) {
+
+			divaString += "," + data[i]; //$NON-NLS-1$
+
+		} // for
+
+		// Finally add a new line to the string.
+		divaString += "\n"; //$NON-NLS-1$
+
+		return divaString;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int EUROPE_NAMES = 1;
+		// final int TARGET_LIST = 2;
+		// final int OUTPUT_DIR = 3;
+		// final int PARAMS = 4;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t European locations file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// EuropeDataConverter converter = new EuropeDataConverter(
+		// args[ISO_3166_1], args[EUROPE_NAMES], args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// converter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		EuropeDataConverter converter = new EuropeDataConverter(
+				args[CONFIG_FILE]);
+		converter.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataExtractor.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataExtractor.java
new file mode 100644
index 0000000..5e6a92d
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataExtractor.java
@@ -0,0 +1,432 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This class will extract area and population data from the European data
+ * source file (EuropeSorted.txt). For each country, it will generate both and
+ * AREA and a POPULATION files under
+ * org.eclipse.stem.utility\dataMigration\input\AreaPopulationData.
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/EuropeDataExtractor.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\EuropeDataExtractor.config)
+ * 
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeNames.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * 
+ * Overview of the data generation process for the Europe data set.
+ * 
+ * 1) Data Cleaning : start by running EuropeDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named EuropeSorted.txt with cleaned data.
+ * 
+ * In other words : Europe.txt --> ||EuropeDataCleaner|| --> EuropeSorted.txt
+ * 
+ * NOTE: EuropeSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 2) Data Formatting : run EuropeDataFormatter to break down the data source
+ * (EuropeSorted.txt) into multiple data files, one for each country as
+ * indicated by the ID (i.e. NO,IT,FR,UK, etc). The result will be multiple data
+ * files (i.e. italy.txt, spain.txt, etc). Each file will be found under a
+ * folder with same name as the country (i.e. ITALY\italy.txt, SPAIN\spain.txt,
+ * etc).
+ * 
+ * 3) Data Converter : run EuropeDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 4) Area and Population Data Extraction : run EuropeDataExtractor to extract
+ * all area and population data.
+ * 
+ * 
+ */
+
+public class EuropeDataExtractor {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	private String namesFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List dataList = null;
+
+	List namesList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param namesFile -
+	 *            files with all Europe level 1 names.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public EuropeDataExtractor(String iso3166_1, String namesFile,
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.namesFile = namesFile;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// }
+	/**
+	 * @param configFile
+	 */
+	public EuropeDataExtractor(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("NAMES_FILE")) { //$NON-NLS-1$
+				namesFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (namesFile == null) {
+			namesFile = path + GenConstants.EUROPE_NAMES;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.AREA_POPULATION_DIR;
+		}
+
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Load all level 1 names for Europe.
+		namesList = GenUtils.populateList(namesFile);
+
+		// Run the converter: UN Europe -> Diva set format
+		process();
+	}
+
+	/**
+	 * 
+	 * Generate area and population files from data extracted from
+	 * EuropeSorted.txt The area and population files will be used by the
+	 * generators to produce the property files.
+	 * 
+	 */
+	protected void process() {
+
+		ArrayList<String> repeated = new ArrayList<String>();
+
+		// A writer for the new file we are creating.
+		PrintWriter areaFile = null;
+		PrintWriter popFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next file in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< EUROPE DATA EXTRACTOR -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 200;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficiency.
+						int max = (buffer.length() > BUFFER_MAX) ? BUFFER_MAX
+								: buffer.length();
+						String[] items = buffer.substring(BUFFER_MIN, max)
+								.split(","); //$NON-NLS-1$
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							String country = GenUtils.getCountryName(
+									items[EuropeDataFormattingHeader.STRID]
+											.substring(0, 2), codeList);
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir);
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open a new area file.
+						if (areaFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ "_AREA.txt"; //$NON-NLS-1$
+
+							// Create tne new file
+							areaFile = GenUtils.openWriter(fileName);
+						}
+
+						// Similarly, create and open a new population file.
+						if (popFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ "_POPULATION.txt"; //$NON-NLS-1$
+
+							// Create tne new file
+							popFile = GenUtils.openWriter(fileName);
+						}
+
+						// Extract area value
+						String area = items[EuropeDataFormattingHeader.AREA];
+
+						// Extract population value
+						String pop1 = items[EuropeDataFormattingHeader.POP1];
+						String pop2 = items[EuropeDataFormattingHeader.POP2];
+						String pop3 = items[EuropeDataFormattingHeader.POP3];
+						String pop4 = items[EuropeDataFormattingHeader.POP4];
+
+						// Find location name
+						// Get relevant data for conversion.
+						Double val = Double
+								.parseDouble(items[EuropeDataFormattingHeader.NUMID]);
+						String numID = String.valueOf(val.intValue());
+
+						// Find the location name based on its numeric ID
+						String location = GenUtils.getEuropeanLocation(numID,
+								namesList);
+
+						if (repeated.contains(location)) {
+							continue;
+						}
+						// remember this element
+						repeated.add(location);
+
+						String pop = null;
+
+						// Get first the most up-to-date population value. If it
+						// is zero, then get next
+						// one and so on. POP4 is the most up-to-date value.
+						pop = pop4;
+
+						if (Double.parseDouble(pop) == 0.0) {
+							pop = pop3;
+						}
+
+						if (Double.parseDouble(pop) == 0.0) {
+							pop = pop2;
+						}
+
+						if (Double.parseDouble(pop) == 0.0) {
+							// This is the most outdated value, but there is no
+							// other choice.
+							pop = pop1;
+						}
+
+						if (Double.parseDouble(pop) <= 0.0) {
+							System.out
+									.println("\t\tPopulation is zero for location : " //$NON-NLS-1$
+											+ items[EuropeDataFormattingHeader.STRID]);
+						}
+
+						if (Double.valueOf(area) < 1.0) {
+							area = "1.0"; //$NON-NLS-1$
+						}
+
+						// Write area value
+						GenUtils.addData(areaFile, location + " : 1 : " //$NON-NLS-1$
+								+ Double.valueOf(area) + "\n"); //$NON-NLS-1$
+
+						// Write population value
+						GenUtils.addData(popFile, location + " : 1 : " //$NON-NLS-1$
+								+ Double.valueOf(pop).intValue() + "\n"); //$NON-NLS-1$
+
+					}// while
+
+					// Reset ISO Code
+					isoCode = null;
+
+					// Reset file name
+					fileName = null;
+
+					// Close the target files.
+					areaFile.close();
+					areaFile = null;
+					popFile.close();
+					popFile = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int EUROPE_NAMES = 1;
+		// final int TARGET_LIST = 2;
+		// final int OUTPUT_DIR = 3;
+		// final int PARAMS = 4;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t European locations file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// EuropeDataExtractor converter = new EuropeDataExtractor(
+		// args[ISO_3166_1], args[EUROPE_NAMES], args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// converter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		EuropeDataExtractor extractor = new EuropeDataExtractor(
+				args[CONFIG_FILE]);
+		extractor.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormatter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormatter.java
new file mode 100644
index 0000000..b6c1164
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormatter.java
@@ -0,0 +1,370 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * will take as input the cleaned data source file for Europe (EuropeSorted.txt)
+ * and will break it into multiple data files, one for each European country in
+ * the dataset. The new output data files will be created under :
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\output
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/EuropeDataFormatter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\EuropeDataFormatter.config)
+ * 
+ * 
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISOFix\ISO_LEVEL1_FIX.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\output\
+ * 
+ * Brief overview of the data generation process for the Europe data set.
+ * 
+ * 1) Data Cleaning : start by running EuropeDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named EuropeSorted.txt with cleaned data.
+ * 
+ * In other words : Europe.txt --> ||EuropeDataCleaner|| --> EuropeSorted.txt
+ * 
+ * NOTE: EuropeSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 2) Data Formatting : run EuropeDataFormatter to break down the data source
+ * (EuropeSorted.txt) into multiple data files, one for each country as
+ * indicated by the ID (i.e. NO,IT,FR,UK, etc). The result will be multiple data
+ * files (i.e. italy.txt, spain.txt, etc). Each file will be found under a
+ * folder with same name as the country (i.e. ITALY\italy.txt, SPAIN\spain.txt,
+ * etc).
+ * 
+ * 3) Data Converter : run EuropeDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 4) Area and Population Data Extraction : run EuropeDataExtractor to extract
+ * all area and population data.
+ * 
+ * 
+ */
+public class EuropeDataFormatter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String iso3166_1 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+	List<String> targetList = null;
+
+	List<String> codeList = null;
+
+	List<String> codefixList = null;
+
+	/**
+	 * Hash map to keep track of polygons.
+	 */
+	HashMap<String, String> map = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public EuropeDataFormatter(String iso3166_1, String fixFile,
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// // Create the hash maps :
+	// map = new HashMap<String, String>();
+	// }
+	/**
+	 * @param configFile
+	 */
+	public EuropeDataFormatter(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+		// Create the hash maps :
+		map = new HashMap<String, String>();
+
+	}
+
+	/**
+	 * This method sets up and runs the finder.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * 
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter europeFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Object to detect transitions in data
+		ISOCode1 currentCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = targetList.get(i).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< DATA FORMATTER -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,,", ",UNKNOWN,UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$				
+
+						String[] items = buffer.split(","); //$NON-NLS-1$
+
+						// Get ISO code for current entry.
+						String country = GenUtils.getCountryName(
+								items[EuropeDataFormattingHeader.STRID]
+										.substring(0, 2), codeList);
+						currentCode = GenUtils.getISOCode(country, codeList);
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							country = GenUtils.getCountryName(
+									items[EuropeDataFormattingHeader.STRID]
+											.substring(0, 2), codeList);
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Check for country-transitions
+						if (isoCode.getAlpha2().equals(currentCode.getAlpha2()) == false) {
+							// If we have a transition, then close previous
+							// file.
+							if (europeFile != null) {
+								europeFile.close();
+								europeFile = null;
+								System.out.println(Messages
+										.getString("\t\tGenerated :") //$NON-NLS-1$
+										+ fileName);
+								fileName = null;
+							}
+
+							// Set iso code to the current code.
+							isoCode = currentCode;
+
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (europeFile == null) {
+							// Create the file name for the new properties.file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ ".txt"; //$NON-NLS-1$
+							// Create tne new properties.file for this country.
+							europeFile = GenUtils.openWriter(fileName);
+						}
+
+						// Variable used to hold the output data.
+						GenUtils.addData(europeFile, buffer + "\n"); //$NON-NLS-1$						
+
+					}// while
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int FIX_FILE = 1;
+		// final int TARGET_LIST = 2;
+		// final int OUTPUT_DIR = 3;
+		// final int PARAMS = 4;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// EuropeDataFormatter formatter = new EuropeDataFormatter(
+		// args[ISO_3166_1], args[FIX_FILE], args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// formatter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		EuropeDataFormatter formatter = new EuropeDataFormatter(
+				args[CONFIG_FILE]);
+		formatter.run();
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormattingHeader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormattingHeader.java
new file mode 100644
index 0000000..e12ead1
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/EuropeDataFormattingHeader.java
@@ -0,0 +1,61 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * 
+ * Relevant keys to the European dataset.
+ * 
+ */
+public abstract class EuropeDataFormattingHeader {
+
+	/**
+	 * Numeric ID
+	 */
+	public static final int NUMID = 0;
+
+	/**
+	 * Name ID
+	 */
+	public static final int STRID = 1;
+
+	/**
+	 * Total Area
+	 */
+	public static final int AREA = 2;
+
+	/**
+	 * Population value 1
+	 */
+	public static final int POP1 = 3;
+
+	/**
+	 * Population value 2
+	 */
+	public static final int POP2 = 4;
+
+	/**
+	 * Population value 3
+	 */
+	public static final int POP3 = 5;
+
+	/**
+	 * Population value 4
+	 */
+	public static final int POP4 = 6;
+
+	/**
+	 * Alternative ID
+	 */
+	public static final int TEMPID = 7;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/FindRunParameterFile.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/FindRunParameterFile.java
new file mode 100644
index 0000000..e215843
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/FindRunParameterFile.java
@@ -0,0 +1,146 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+/**
+ * Given a set of run parameter names and values, find a matching run parameter
+ * file anywhere in a sub directory of the input directory. Useful for finding
+ * exactly the logged data you want 
+ */
+public class FindRunParameterFile {
+
+	/**
+	 * 
+	 * @param args
+	 */
+	public static void main(String [] args) {
+		if(args.length < 1) {
+			System.err.println("Usage: FindRunParameterFile <dir> <param 1> <val 1> <param 2> <val 2> ... <param n> <val n>"); //$NON-NLS-1$
+			System.exit(-1);
+		}
+		
+		String dir = args[0];
+				
+		try {
+			 // Open dir
+			File d = new File(dir);
+			if(!d.exists() || !d.isDirectory()) { 
+				System.err.println(dir+ "not found or it is not a directory"); //$NON-NLS-1$
+				System.exit(-1);
+			}
+			
+			recurseSearch(d, args);
+			} catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+	private static void recurseSearch(File d, String [] args) {
+		 // Read infectious file
+		
+		try {
+		 if(d.isDirectory()) {
+			 // Keep going down deeper
+			 String [] files  = d.list();
+			 for(String _d:files) {
+				 File f = new File(d.getAbsolutePath()+File.separator+_d);
+				 // Unix make sure it's not parent dir or we get infinite loop problem here
+				 // Fix later
+				 recurseSearch(f, args);
+			 }
+		 }
+		 
+		 // Not a directory. Does the file name match?
+		 
+		 String name = d.getName();
+		 if(!name.equals("runparameters.csv") && !name.equals("runparamters.csv")) return ; // wrong file //$NON-NLS-1$ //$NON-NLS-2$
+		 
+		 
+		 
+		 
+		 ArrayList<String> paramNames = new ArrayList<String>();
+		 ArrayList<String> paramVals = new ArrayList<String>();
+		 
+		 FileInputStream ifile = new FileInputStream(d); 
+	     BufferedReader ireader = new BufferedReader(new InputStreamReader(ifile));
+	     String header = null;
+	     header=ireader.readLine();
+	     if(header == null) {
+	    	 System.err.println("Error, "+d.getAbsolutePath()+" file is empty!");  //$NON-NLS-1$//$NON-NLS-2$
+	    	 System.exit(-2);
+	     }
+	     StringTokenizer st = new StringTokenizer(header, ","); //$NON-NLS-1$
+	     while(st.hasMoreTokens()) {
+	    	 String val = st.nextToken();
+	    	 paramNames.add(val.trim());
+	     }
+	    
+	    String data = null; 
+	    data=ireader.readLine();
+	    if(data == null) {
+	    	 System.err.println("Error, "+d.getAbsolutePath()+" file has no data!");  //$NON-NLS-1$//$NON-NLS-2$
+	    	 System.exit(-2);
+	     }
+	    
+	    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+	   while (st.hasMoreTokens()) {
+			String val = st.nextToken().trim();
+			
+			// Standard format for number 
+			try {
+				BigDecimal bd = new BigDecimal(val);
+			    bd = bd.setScale(5,BigDecimal.ROUND_HALF_UP);
+			    val = bd.toString();
+			}catch(NumberFormatException nfe) {
+				// Ignore not a double
+			}
+			paramVals.add(val);
+	    } // read tokens
+	 
+	   ireader.close();
+		
+	   // Now see if the file matches
+	   
+	   boolean match = true;
+	   for(int i = 1;i<args.length;i+=2) {
+		   String pname = args[i].trim();
+		   String pval = args[i+1].trim(); // index out of bound if bad input
+		   // Conform to standard number format if it's a number
+		   try {
+				BigDecimal bd = new BigDecimal(pval);
+			    bd = bd.setScale(5,BigDecimal.ROUND_HALF_UP);
+			    pval = bd.toString();
+			}catch(NumberFormatException nfe) {
+				// Ignore not a double
+			}
+		   if(!paramNames.contains(pname)) {match = false;break;}
+		   for(int n=0;n<paramNames.size();++n) 
+			   if(pname.equals(paramNames.get(n)) && !pval.equals(paramVals.get(n))) {match=false;break;}
+	   }
+	   if(!match) return;
+	   
+	   System.out.println(d.getAbsolutePath());
+	 	} catch(Exception e) {
+			e.printStackTrace();
+		}
+	    
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GMLGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GMLGenerator.java
new file mode 100644
index 0000000..e4e9172
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GMLGenerator.java
@@ -0,0 +1,943 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * generate the GML data files for the diva data set at admin levels 0, 1, and
+ * 2.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/GMLGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\GMLGenerator.config)
+ * 
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ * 
+ */
+
+public class GMLGenerator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	private String usaDescriptorFile = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List usaDescriptorList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            data file with the ISO3166-2 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile
+	 *            the list of countries for which we will generate GML files
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir
+	 *            the output directory for the GML files we generate
+	 */
+	// public GMLGenerator(String iso3166_1, String iso3166_2, String fixFile,
+	// String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// // The next descriptor is used only when processing the USA
+	// this.usaDescriptorFile = workspace
+	// +
+	// "\\org.eclipse.stem.utility\\parameters\\ISOFIX\\USA_FIPS.txt";//$NON-NLS-1$
+	// targetList = null;
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public GMLGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.GROUPED_COUNTRIES;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = workspace + GenConstants.MAPS_OUTPUT_DIR;
+		}
+
+		targetList = null;
+
+		// The next descriptor is used only when processing the USA
+		this.usaDescriptorFile = path + GenConstants.USA_FIPS_FILE;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Load the list of descriptors for the USA (special case)
+		usaDescriptorList = GenUtils.populateList(usaDescriptorFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its GML file.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter gmlFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		int lineCounter = 0;
+
+		// Iterate for every country and create its GML data file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// We use this list to keep track of duplicated polygons.
+			List<STEMPolygon> polygons = null;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< GML GENERATOR -- Processing :" + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous type.
+					int oldlevel = level - 1;
+
+					// Used to distinguish between a simple polygon and islands
+					// of polygons. Initialize string to the blank character.
+					String island = " "; //$NON-NLS-1$
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						lineCounter++;
+
+						// The data we want to write to the new GML file.
+						String output = " "; //$NON-NLS-1$
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX]
+						// to make processsing more
+						// efficient, we dont need all of it.
+						int BUFFER_MIN = 0;
+						int BUFFER_MAX = 125;
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Get the type of the data we are processing.
+						level = GenUtils.getLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldlevel = level;
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							// Close the previous file
+							if (gmlFile != null) {
+								output = closePolygonIslandTags();
+								output += getClosingTags();
+								GenUtils.addData(gmlFile, output);
+								gmlFile.close();
+							}
+
+							// Clear the list of unique polygons
+							if (polygons != null) {
+								polygons.clear();
+							}
+
+							// Get a new, empty polygon list
+							polygons = new ArrayList<STEMPolygon>();
+
+							// If the directory does not exist for this country,
+							// create it using ISO alpha3 code.
+							File countryDir = new File(outputDir
+									+ isoCode.getAlpha3());
+
+							if (countryDir != null
+									&& countryDir.exists() == false) {
+								// Directory does not exist. Create it.
+								countryDir.mkdir();
+							}
+
+							// Create the file name for the new
+							// GML file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_MAP.xml"; //$NON-NLS-1$ //$NON-NLS-2$
+
+							// Reset the previous entity
+							island = " "; //$NON-NLS-1$
+
+							// Open the writer for the new GML file
+							gmlFile = GenUtils.openWriter(fileName);
+
+							// Add the header of the file
+							output = getOpeningTags(isoCode, level);
+
+							// Write data
+							GenUtils.addData(gmlFile, output.trim());
+
+						} // if( transition == true )
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							current = isoCode.getAlpha3();
+							break;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase()
+									.trim();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase()
+									.trim();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								// STEP 2: piece together the ID using the
+								// proper lex objects : the USA is a special
+								// case
+								descriptor = GenUtils.getUSADescriptor(
+										lex2Current.getAdmin2(), GenUtils
+												.extractAlpha2(lex1Current
+														.getDescriptor()),
+										usaDescriptorList);
+
+								if (descriptor.contains("Not Found")) { //$NON-NLS-1$
+									System.out
+											.println("\t\tDescriptor Not Found" //$NON-NLS-1$
+													+ lex2Current.getAdmin2()
+													+ "in" //$NON-NLS-1$
+													+ lex1Current.getAdmin1());
+								}
+
+							} else {
+								// STEP 2: piece together the ID using the
+								// proper lex objects.
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+							}
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else {
+							// Compose descriptor for l 1 and l 0 data
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+							}
+
+						}
+
+						// System.out.println("Descriptor is : " + descriptor
+						// + " at level : " + level + " for " + current);
+
+						// Create a STEM polygon with this polygon data
+						STEMPolygon polygon = new STEMPolygon(buffer, level);
+
+						// Check that this is indeed a STEM polygon
+						if (isPolygon(polygon) != true) {
+							// Not a polygon, ignore.
+							continue;
+						}
+
+						// We know it is a polygon, but now check that its not
+						// duplicated.
+						if (isPolygonDuplicated(polygons.iterator(), polygon) == true) {
+							// Yes, it is duplicated
+							continue;
+						}
+
+						// Add this polygon to our list of unique polygons so
+						// that we can check duplicates of this polygon later.
+						polygons.add(polygon);
+
+						// Check to see if this polygon is part of an island of
+						// polygons or a simple polygon and handle it
+						// accordingly.
+						if (level == 0) {
+							// If we are at admin level 0 and island is not
+							// NULL, then we have an island.
+							if (island.equals(" ")) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								island = "Admin Level 0"; //$NON-NLS-1$
+							}
+							output += addLinearRingTags(buffer, level);
+						} else {
+
+							if (island.equals(" ") == true) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								output += addLinearRingTags(buffer, level);
+
+							} else {
+
+								if (current.equals(island) == false) {
+									output = closePolygonIslandTags();
+									output += openPolygonIslandTags(descriptor);
+									output += addLinearRingTags(buffer, level);
+								} else {
+									output = addLinearRingTags(buffer, level);
+									GenUtils.addData(gmlFile, output.trim());
+									continue;
+								}
+							}
+
+							switch (level) {
+
+							case DataTypes.LEVEL_1:
+								island = items[ISOData.ADMIN1_NAME]
+										.toUpperCase();
+								break;
+
+							case DataTypes.LEVEL_2:
+								island = items[ISOData.ADMIN2_NAME]
+										.toUpperCase();
+								break;
+							}
+
+						}
+
+						GenUtils.addData(gmlFile, output.trim());
+
+					} // while loop
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (gmlFile != null) {
+						// Write formatted output
+						GenUtils.addData(gmlFile, closePolygonIslandTags());
+						GenUtils.addData(gmlFile, getClosingTags());
+						gmlFile.close();
+						gmlFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * Check to see if this is a real polygon (i.e. closed)
+	 * 
+	 * @param polygon
+	 *            A STEM polygon
+	 * 
+	 * @return true if the parameter "polygon" is a STEM polygon
+	 */
+	protected boolean isPolygon(STEMPolygon polygon) {
+
+		PointData init = polygon.getInit();
+		PointData last = polygon.getLast();
+
+		if (init.getLt() != last.getLt()) {
+			// Not a polygon
+			return false;
+		} else if (init.getLg() != last.getLg()) {
+			// Not a polygon
+			return false;
+		}
+
+		// Yes, it is a polygon
+		return true;
+	}
+
+	/**
+	 * Check to see if this polygon is duplicated.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * @param it
+	 *            an iterator on the polygon list
+	 * 
+	 * @return true if this polygon is already in the list of known polygons
+	 */
+	protected boolean isPolygonDuplicated(Iterator it, STEMPolygon polygon) {
+
+		if (it.hasNext() != true) {
+			return false;
+		}
+
+		while (it.hasNext()) {
+			STEMPolygon current = (STEMPolygon) it.next();
+			if (current.same(polygon) == true) {
+				// Not unique, it is duplicated so condition is false.
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * This method creates the opening XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @param id
+	 *            the descriptor for the entity
+	 * 
+	 * @return a GML tag that opens a polygon island element.
+	 */
+	protected String openPolygonIslandTags(String id) {
+
+		String tags = null;
+		tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the tags that describe a "polygon island" or linear
+	 * ring and puts the polygon data inside of it.
+	 * 
+	 * @param buffer
+	 *            the data buffer containing all the polygond data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag that open a linear ring element
+	 */
+	protected String addLinearRingTags(String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = "<gml:LinearRing>\n"; //$NON-NLS-1$
+		tags += "<gml:posList>\n"; //$NON-NLS-1$
+		tags += polygonData + "\n"; //$NON-NLS-1$
+		tags += "</gml:posList>\n"; //$NON-NLS-1$
+		tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the closing XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @return a GML tag that closes a polygon
+	 */
+	protected String closePolygonIslandTags() {
+
+		String tags = null;
+		tags = "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+		tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the XML tags that deal with simple polygon data and
+	 * includes the polygon data in it.
+	 * 
+	 * @param buffer
+	 *            the data buffer containing all the polygon data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag that describes a polygon
+	 */
+	protected String createSimplePolygonTags(String id, String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = null;
+
+		if (polygonData == null) {
+			tags = "<gml:Polygon gml:id=\"" + id + "\"/>\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		} else {
+			tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+			tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "<gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "<gml:posList>\n"; //$NON-NLS-1$
+			tags += polygonData + "\n"; //$NON-NLS-1$
+			tags += "</gml:posList>\n"; //$NON-NLS-1$
+			tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+		}
+
+		return tags;
+	}
+
+	/**
+	 * Generate the opening tags for this GML file.
+	 * 
+	 * @param code
+	 *            the ISO code
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return the opening tags for the GML file
+	 */
+	protected String getOpeningTags(ISOCode1 code, int level) {
+
+		// Calendar date = Calendar.getInstance();
+
+		String tags = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; //$NON-NLS-1$
+		tags += GenUtils.geGMLCopyright();
+		tags += GenUtils.getGMLKeyFormatExplanation();
+		// tags += GenUtils.getGMLUNPolicy();
+		tags += "<Map xmlns:gml=\"http://www.opengis.net/gml\" xmlns:georss=\"http://www.georss.org/georss\">\n"; //$NON-NLS-1$
+		tags += "<title>" + code.getAlpha3() + " Level " + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ " Map</title>\n"; //$NON-NLS-1$
+		tags += "<subTitle>Administrative Boundaries</subTitle>\n"; //$NON-NLS-1$
+		tags += "<updated>Tue Nov 07 16:57:55 PST 2006 </updated>\n"; //$NON-NLS-1$
+		tags += "<entry>\n"; //$NON-NLS-1$
+		tags += "<georss:where>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * Generate the closing tags for this GML file.
+	 * 
+	 * @return the closing tags of the GML file
+	 */
+	protected String getClosingTags() {
+		String tags = "</georss:where>\n"; //$NON-NLS-1$
+		tags += "</entry>\n"; //$NON-NLS-1$
+		tags += "</Map>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * The execution entry point
+	 * 
+	 * @param args
+	 */
+
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int TARGET_LIST = 3;
+		// final int LEX_DIR = 4;
+		// final int OUTPUT_DIR = 5;
+		// final int PARAMS = 6;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// GMLGenerator gen = new GMLGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2],
+		// args[FIX_FILE], args[TARGET_LIST], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+		// gen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		GMLGenerator gen = new GMLGenerator(args[CONFIG_FILE]);
+
+		gen.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenConstants.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenConstants.java
new file mode 100644
index 0000000..61deccd
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenConstants.java
@@ -0,0 +1,70 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * A group of constants that appear repeatedly in many of the data generators.
+ * 
+ */
+public class GenConstants {
+
+	final static String PARAMS_DIR = "org.eclipse.stem.utility\\parameters\\"; //$NON-NLS-1$
+
+	final static String URLS_DIR = "urls\\"; //$NON-NLS-1$
+
+	final static String POPULATION_PROFILES = "profiles\\"; //$NON-NLS-1$
+
+	final static String PROPERTIES_OUTPUT_DIR = "org.eclipse.stem.internal.data\\resources\\data\\country\\"; //$NON-NLS-1$
+		
+	final static String MAPS_OUTPUT_DIR = "org.eclipse.stem.geography\\resources\\data\\geo\\country\\"; //$NON-NLS-1$
+
+	final static String ISO3166_1_FILE = "ISO3166-1\\ISO3166_1_list.txt"; //$NON-NLS-1$ 
+
+	final static String ISO3166_2_FILE = "ISO3166-2\\ISO3166_2_list.txt"; //$NON-NLS-1$	
+
+	final static String ISOFIX_FILE = "ISOFIX\\ISO_FIX.txt"; //$NON-NLS-1$ 
+
+	final static String POLYGON_AREAS_DIR = "polygonAreas\\"; //$NON-NLS-1$
+
+	final static String AREA_POPULATION_DIR = "AreaPopulationData\\"; //$NON-NLS-1$
+	
+	final static String USA_LEVEL_2_AREA = AREA_POPULATION_DIR + "USA_2_AREA.txt"; //$NON-NLS-1$
+	
+	final static String USA_LEVEL_2_POPULATION = AREA_POPULATION_DIR + "USA_2_POPULATION.txt"; //$NON-NLS-1$
+
+	final static String LEX_DIR = "sort\\"; //$NON-NLS-1$
+
+	final static String EUROPE_NAMES = "targets\\EuropeNames.txt"; //$NON-NLS-1$
+
+	final static String EUROPE_COUNTRIES = "targets\\EuropeCountries.txt"; //$NON-NLS-1$
+
+	final static String GROUPED_COUNTRIES = "targets\\groupedDataFiles.txt"; //$NON-NLS-1$
+
+	final static String USA_FIPS_FILE = "ISOFIX\\USA_FIPS.txt";//$NON-NLS-1$	
+
+	final static String REDUCE_LIST = "targets\\reduceList.txt"; //$NON-NLS-1$
+
+	final static String DEFAULT_ITERATIONS = "5"; //$NON-NLS-1$
+
+	final static String DEFAULT_THRESHOLD = "5"; //$NON-NLS-1$
+
+	final static String USA_L1_DATA = "USA_L1_Data\\USA_L1.txt"; //$NON-NLS-1$
+
+	final static String FORMAT_LIST = "targets\\formatList.txt"; //$NON-NLS-1$
+
+	final static String COUNTRY_NAMES = "targets\\country_names.Ftxt"; //$NON-NLS-1$
+
+	final static String COUNTRIES_LIST = "targets\\groupedDataFiles.txt"; //$NON-NLS-1$
+	
+	final static String DUMMY_DIR =  "C:\\Dummy\\"; //$NON-NLS-1$
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenUtils.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenUtils.java
new file mode 100644
index 0000000..93ff101
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GenUtils.java
@@ -0,0 +1,1772 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : The methods in this class are
+ * utility methods used by the various data generators for STEM II.
+ * 
+ */
+
+public class GenUtils {
+
+	/**
+	 * Add data to the properties file.
+	 * 
+	 * @param propertiesFile
+	 *            a writer to the output file
+	 * @param data
+	 *            the data we want to write
+	 */
+	static protected void addData(PrintWriter propertiesFile, String data) {
+		propertiesFile.write(data);
+	}
+
+	/**
+	 * This method finds what kind of data we are dealing with currently.
+	 * 
+	 * @param data
+	 *            a buffer of diva data
+	 * 
+	 * @return the admin level of the data
+	 */
+	static protected int getDataLevel(String[] data) {
+
+		if (isNumeric(data[ISOData.ADMIN2_NAME]) == false) {
+			return DataTypes.LEVEL_2;
+		} else if (isNumeric(data[ISOData.ADMIN1_NAME]) == false) {
+			return DataTypes.LEVEL_1;
+		}
+
+		return DataTypes.LEVEL_0;
+	}
+
+	/**
+	 * Convert from radians to degrees.
+	 * 
+	 * @param value
+	 *            in radians
+	 * 
+	 * @return double -- the value in degrees
+	 */
+	static protected double toDegrees(double value) {
+		double dValue = value;
+		dValue *= 180.0 * (1.0 / java.lang.Math.PI);
+		return dValue;
+	} // toDegrees
+
+	/**
+	 * Extract the workspace out of a path i.e. if given path =
+	 * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+	 * This method should return : C:\stemII\
+	 * 
+	 * @param path
+	 * @return workspace
+	 */
+	static protected String getWorkspace(String path) {
+		int i = Integer.MIN_VALUE;
+		int j = Integer.MIN_VALUE;
+
+		if (path.contains("\\") == false) //$NON-NLS-1$
+			return new String("C:\\Dummy\\"); //$NON-NLS-1$
+		i = path.indexOf("\\"); //$NON-NLS-1$
+		j = path.indexOf("\\", i + 1); //$NON-NLS-1$
+
+		if (j != Integer.MIN_VALUE) {
+			return path.substring(0, j + 1);
+		}
+
+		return new String(GenConstants.DUMMY_DIR);
+	}
+
+	/**
+	 * Convert from a String holding a double value of the form D.DDDDDDD into
+	 * an Integer of the form : DDDDDDDD
+	 * 
+	 * @param value
+	 *            string holding a double value in the form D.DDDDDDD
+	 * 
+	 * @return an Integer value in form DDDDDDDD
+	 */
+	static protected Integer toIntFormat(String value) {
+		Double dVal = Double.valueOf(value);
+		return Integer.valueOf((int) (100000000.0 * dVal.doubleValue()));
+	}
+
+	/**
+	 * Convert an array of Integers into an array of ints.
+	 * 
+	 * @param an
+	 *            array of Integers
+	 * 
+	 * @return an array of int[]
+	 */
+	static protected int[] toIntArray(ArrayList<Integer> array) {
+
+		int[] intArray = new int[array.size()];
+		Iterator it = array.iterator();
+
+		int index = 0;
+
+		while (it.hasNext()) {
+			intArray[index] = ((Integer) it.next()).intValue();
+			index++;
+		}
+
+		return intArray;
+
+	}
+
+	/**
+	 * Convert the value of string to a double
+	 * 
+	 * @param str
+	 * 
+	 * @return double
+	 */
+	static protected double getDouble(String str) {
+		Double holder = new Double(str);
+		return holder.doubleValue();
+	}
+
+	/**
+	 * Remove decimal point from value and return its string representation
+	 * 
+	 * @param degrees
+	 * 
+	 * @return formatted string
+	 */
+	static protected String format(double degrees) {
+		// String str = null;
+		// String subStr = null;
+
+		double dVal = degrees;
+		// boolean negative = false;
+
+		// Decimal format does the rounding for us.
+		// if (dVal < -0.0000005) {
+		// dVal -= 0.0000005;
+		// } else if (dVal > 0.0000005) {
+		// dVal += 0.0000005;
+		// }
+
+		// dVal *= 1000000.0;
+		// int iVal = (int) dVal;
+		// return ""+iVal;
+		// str = Double.toString(dVal);
+		// int dot = str.indexOf("."); //$NON-NLS-1$
+		// subStr = str.substring(0, str.length() < dot + 7 ? str.length()
+		// : dot + 7);
+		// return subStr;
+		DecimalFormat form = new DecimalFormat("###0.000000"); //$NON-NLS-1$
+		return form.format(dVal);
+
+	} // formatData
+
+	/**
+	 * Format only six decimal digits after decimal point.
+	 * 
+	 * @param value
+	 *            unformatted value
+	 * 
+	 * @return formatted string
+	 */
+	static protected String format(String value) {
+		String subStr = null;
+
+		int dot = value.indexOf("."); //$NON-NLS-1$
+		subStr = value.substring(0, value.length() < dot + 7 ? value.length()
+				: dot + 7);
+		return subStr;
+
+	} // formatData
+
+	/**
+	 * This method checks to see if we have already seen a given entry.
+	 * 
+	 * @param current
+	 *            entry we are trying to match
+	 * @param list
+	 *            a list containing all seen entries
+	 * 
+	 * @return boolean whether the entry is repeated or not
+	 * 
+	 */
+	static protected boolean isRepeated(String current, List<String> list) {
+
+		String currentStr = current.toUpperCase().trim();
+		Iterator it = list.iterator();
+		while (it.hasNext()) {
+			String entry = ((String) it.next()).toUpperCase().trim();
+			if (entry.equals(currentStr)) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * This method finds what kind of data we are dealing with currently.
+	 * 
+	 * @param data
+	 *            A buffer of pure diva data
+	 * 
+	 * @return the admin level for the data in this buffer
+	 */
+	static protected int getLevel(String[] data) {
+
+		if (isNumeric(data[ISOData.ADMIN2_NAME]) == false) {
+			return DataTypes.LEVEL_2;
+		} else if (isNumeric(data[ISOData.ADMIN1_NAME]) == false) {
+			return DataTypes.LEVEL_1;
+		}
+
+		return DataTypes.LEVEL_0;
+	}
+
+	/**
+	 * Test if the string contains a number
+	 * 
+	 * @param str
+	 *            the string for which we want to test if it represents a number
+	 * 
+	 * @return boolean true if this string represents a number
+	 */
+
+	static protected boolean isNumeric(String str) {
+
+		try {
+			Double.valueOf(str);
+		} catch (NumberFormatException e) { // If an exception is thrown, then
+			// it is not a number.
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Test whether this key represents an active URL or not.
+	 * 
+	 * @param urlStatus
+	 *            A map with tuples (URL:STATUS)
+	 * @param key
+	 *            The URL whose status we want to get.
+	 * 
+	 * @return Test whether this key represents an active URL or not.
+	 * 
+	 */
+	static protected boolean isActiveURL(HashMap<String, Boolean> urlStatus,
+			String key) {
+
+		if (urlStatus.containsKey(key)) {
+			return urlStatus.get(key).booleanValue();
+		}
+
+		return false;
+	}
+
+	/**
+	 * Do a lookup based on name and get the ISO3166-2 fix code for this item.
+	 * If we cant match, then record the country and entity name of the
+	 * unmatched items.
+	 * 
+	 * @param list
+	 *            a list of ISO3166-2 fix codes
+	 * @param entity
+	 *            the entity for which we are seeking an ISO code
+	 * 
+	 * @param country
+	 *            the country to which the entity belongs to
+	 * 
+	 * @return the ISO3166-2 fix code for a given country
+	 */
+	static protected String getFixCode(List list, String entity, String country) {
+
+		final int COUNTRY = 0;
+
+		final int ADMIN1 = 1;
+
+		final int FIX = 3;
+
+		String entityStr = entity.toUpperCase().trim();
+
+		String countryStr = country.toUpperCase().trim();
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+
+			while (it.hasNext()) {
+
+				String[] compare = null;
+
+				String code = (String) it.next();
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(code, ":"); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+
+				// Now do the comparison
+				if (entityStr.equals(compare[ADMIN1])
+						&& countryStr.equals(compare[COUNTRY])) {
+					return compare[FIX];
+				}
+			}
+		}
+
+		// Match not found, return itself.
+		return entityStr;
+	}
+
+	/**
+	 * Do a lookup based on name and get the ISO3166-2 info for this item. If we
+	 * cant match, then record the country and entity name of the unmatched
+	 * items.
+	 * 
+	 * @param list
+	 *            a list of ISO3166-2 codes
+	 * @param name
+	 *            the entity for which we are seeking an ISO code *
+	 * @param alpha2
+	 *            the alpha2 code of the country to which the entity belongs to
+	 * 
+	 * @return the ISO3166-2 descriptor.
+	 */
+	static protected String getISO2Descriptor(List list, String name,
+			String alpha2) {
+
+		ISOCode2 code = null;
+
+		String nameStr = name.toUpperCase();
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+
+			while (it.hasNext()) {
+
+				String[] compare = null;
+
+				code = (ISOCode2) it.next();
+
+				if (code.getAlpha2().equals(alpha2) == false) {
+					continue;
+				}
+
+				// IF ISO 3166-2 contains brackets then we have to do two
+				// comparisons
+
+				// Get the entity name and remove blanks
+				String entity = code.getName().toUpperCase().trim();
+
+				if (entity.contains("[")) { //$NON-NLS-1$
+
+					entity = entity.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+					// Tokenize
+					StringTokenizer tokens = new StringTokenizer(entity, "["); //$NON-NLS-1$
+
+					// Get tokens -> order matters here!
+					compare = new String[tokens.countTokens()];
+					int i = 0;
+					while (tokens.hasMoreTokens()) {
+						compare[i++] = tokens.nextToken().toUpperCase().trim();
+					}
+				}
+
+				if (compare != null) {
+					for (int i = 0; i < compare.length; i++) {
+						if (nameStr.replace("-", " ").equals(compare[i])) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							return code.getId();
+						}
+					}
+				} else if (nameStr.replace("-", " ").equals(code.getName())) { //$NON-NLS-1$ //$NON-NLS-2$
+					return code.getId();
+				}
+
+			} // while
+
+		} // if
+
+		return nameStr;
+	}
+
+	/**
+	 * Do a lookup based on name and get the ISO3166-2 object for this item. If
+	 * we cant match, then record the country and entity name of the unmatched
+	 * items.
+	 * 
+	 * @param list
+	 *            a list of ISO3166-2 codes
+	 * @param name
+	 *            the entity for which we are seeking an ISO code *
+	 * @param alpha2
+	 *            the alpha2 code of the country to which the entity belongs to
+	 * 
+	 * @return the ISO2Code
+	 */
+	static protected ISOCode2 getISO2Object(List list, String name,
+			String alpha2) {
+
+		ISOCode2 code = null;
+
+		String nameStr = name.toUpperCase().trim();
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+
+			while (it.hasNext()) {
+
+				String[] compare = null;
+
+				code = (ISOCode2) it.next();
+
+				if (code.getAlpha2().equals(alpha2) == false) {
+					continue;
+				}
+
+				// IF ISO 3166-2 contains brackets then we have to do at least
+				// two comparisons
+
+				// Get the entity name and remove blanks
+				String entity = code.getName().toUpperCase().trim();
+
+				if (entity.contains("[")) { //$NON-NLS-1$
+
+					entity = entity.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+					// Tokenize
+					StringTokenizer tokens = new StringTokenizer(entity, "["); //$NON-NLS-1$
+
+					// Get tokens -> order matters here!
+					compare = new String[tokens.countTokens()];
+					int i = 0;
+					while (tokens.hasMoreTokens()) {
+						compare[i++] = tokens.nextToken().toUpperCase().trim();
+					}
+				}
+
+				if (compare != null) {
+					for (int i = 0; i < compare.length; i++) {
+						if (nameStr.equals(compare[i])) {
+
+							return code;
+						}
+					}
+				} else if (nameStr.equals(code.getName().toUpperCase().trim())) {
+					return code;
+				}
+
+			} // while
+
+		} // if
+
+		return new ISOCode2("FOO", "UNK", "UNK", "0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	}
+
+	/**
+	 * Do a lookup based on name and get the ISO3166-2 info for this item. If we
+	 * cant match, then record the country and entity name of the unmatched
+	 * items.
+	 * 
+	 * @param list
+	 *            a list of ISO3166-2 codes.
+	 * @param descriptor
+	 *            the descriptor we are trying to match.
+	 * 
+	 * @return the ISO3166-2 code for a given country
+	 */
+	static protected ISOCode2 getISO2Object(List list, String descriptor) {
+
+		ISOCode2 code = null;
+
+		String descriptorStr = descriptor.toUpperCase();
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+
+			while (it.hasNext()) {
+
+				code = (ISOCode2) it.next();
+
+				if (descriptorStr.equals(code.getName())) {
+					return code;
+				}
+
+			} // while
+
+		} // if
+
+		return null;
+	}
+
+	/**
+	 * Produce a list of ISO2Codes representing the sorted descriptors in list.
+	 * 
+	 * @param list
+	 *            a list of descriptors
+	 * 
+	 * @return a list of ISO 3166-2 codes.
+	 */
+	static protected List<ISOCode2> getSortedDescriptors(List<String> list) {
+
+		Iterator it = list.iterator();
+		while (it.hasNext()) {
+			System.out.println("Descriptor -> " + it.next()); //$NON-NLS-1$
+
+		}
+
+		return null;
+	}
+
+	/**
+	 * Find a level 2 value for a given level 2 administration It can be either
+	 * area or population depending on the type of data.
+	 * 
+	 * @param entity
+	 *            the entity for which we want to find the value
+	 * 
+	 * @param state
+	 * 
+	 * @param list
+	 *            a list of level 2 administrations
+	 * 
+	 * @return the level 2 value (area or population value)
+	 */
+	static protected String getLevel2Data(String entity, String state, List list) {
+
+		final int ENTITY = 0;
+
+		final int STATE_ID = 1;
+
+		final int AREA = 2;
+
+		String[] data = null;
+
+		Iterator it = list.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String stateStr = state.toUpperCase().trim();
+
+		while (it.hasNext()) {
+
+			data = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			// Get the entity name and remove blanks
+			String location = data[ENTITY].toUpperCase().trim();
+
+			location = location.toUpperCase().trim();
+
+			if (entity.equals(location)) {
+
+				// Check both entities belong to same state
+				if (stateStr.equals(data[STATE_ID].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+				return data[AREA].trim();
+			}
+
+		} // while
+
+		return "0"; //$NON-NLS-1$
+	}
+
+	/**
+	 * Load all the ISO 3166-2 data for the country described
+	 * 
+	 * @param isoFile
+	 *            file containing ISO 3166-2 codes
+	 * 
+	 * @return a list holding the ISO 3166-2 codes
+	 */
+	static protected List<ISOCode2> loadISO2(String isoFile) {
+
+		String buffer = null;
+		List<ISOCode2> list = new ArrayList<ISOCode2>();
+
+		BufferedReader reader = openReader(isoFile);
+		try {
+
+			if (reader != null) {
+				while (EOF(buffer = reader.readLine()) != true) {
+					// System.out.println("Read : " + buffer);
+					// If this line starts with "#", then ignore it.
+
+					if (buffer.trim().startsWith("#")) { //$NON-NLS-1$
+						continue;
+					}
+
+					// Make sure that we mark all unknown data.
+					buffer.replace(";;", ";UNKNOWN;"); //$NON-NLS-1$ //$NON-NLS-2$
+
+					// Make it all uppercase
+					buffer.toUpperCase();
+
+					// Tokenize
+					StringTokenizer tokens = new StringTokenizer(buffer, ";"); //$NON-NLS-1$
+
+					// Get tokens -> order matters here!
+					String alpha2 = tokens.nextToken().trim();
+					String id = tokens.nextToken().trim();
+					String name = tokens.nextToken().trim();
+					String index = tokens.nextToken().trim();
+
+					ISOCode2 code = new ISOCode2(alpha2, id, name, index);
+
+					// add new code to our list
+					list.add(code);
+
+					buffer = null;
+				}
+				reader.close();
+			}
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return list;
+	}
+
+	/**
+	 * 
+	 * @param configFile
+	 * @return hash map with all configuration variables and their values
+	 */
+	static protected HashMap<String, String> loadConfigFile(String configFile) {
+		final int VAR = 0;
+		final int VALUE = 1;
+		final int TOTAL = 2;
+		HashMap<String, String> vars = new HashMap<String, String>();
+		String buffer = null;
+		BufferedReader reader = openReader(configFile);
+
+		try {
+			if (reader != null) {
+				while (EOF(buffer = reader.readLine()) != true) {
+
+					// If this line starts with "#", then ignore it.
+					if (buffer.trim().startsWith("#")) { //$NON-NLS-1$
+						System.out.println("\t\t" + buffer); //$NON-NLS-1$
+						continue;
+					}
+
+					if (buffer.contains("=") == false) { //$NON-NLS-1$
+						System.out
+								.println("\t\tBad configuration file -- format should be : VAR = VALUE "); //$NON-NLS-1$
+						System.out.println("\t\tIgnoring line : " + buffer); //$NON-NLS-1$
+						continue;
+					}
+
+					String[] tokens = buffer.trim().split("="); //$NON-NLS-1$
+
+					if (tokens.length < TOTAL) {
+						System.out
+								.println("\t\tBad configuration file -- format should be :  VAR = VALUE  "); //$NON-NLS-1$
+						System.out.println("\t\tIgnoring line : " + buffer); //$NON-NLS-1$
+						continue;
+					}
+
+					// Get variable and value and ignore everything else on the
+					// line.
+					String var = tokens[VAR].toUpperCase().trim();
+					String value = tokens[VALUE].trim();
+
+					// Check that it is a valid CONFIGURATION VARIABLE
+					if (verifyVar(var) == false) {
+						System.out
+								.println("\t\tBad configuration file -- invalid configuration variable : " //$NON-NLS-1$
+										+ var);
+						System.out.println("\t\tIgnoring line : " + buffer); //$NON-NLS-1$
+						continue;
+					}
+
+					System.out.println("\t\t<+>" + buffer); //$NON-NLS-1$
+
+					vars.put(var, value);
+
+				}
+			}
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		// Verify that we have a valid workspace. It is the only non-optional
+		// variable.
+		if (GenUtils.verifyWorkspace(vars) == false) {
+			System.out
+					.println("\t\tBad configuration file -- WORKSPACE variable not found. Please use format VAR = VALUE (i.e. WORKSPACE = C:\\stemII\\ "); //$NON-NLS-1$
+			System.out.println("\t\tIgnoring line : " + buffer); //$NON-NLS-1$
+		}
+
+		return vars;
+
+	}
+
+	/**
+	 * 
+	 * @param var
+	 * @return boolean
+	 */
+	static protected boolean verifyVar(String var) {
+
+		if (var.equals("WORKSPACE") || var.equals("ISO3166_1") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("ISO3166_2") || var.equals("ISO_FIX") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("POP_PROFILES") || var.equals("LEX_DIR") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("TARGET_LIST") || var.equals("AREA_POP") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("POLYGON_AREAS") || var.equals("OUTPUT") //$NON-NLS-1$ //$NON-NLS-2$ 
+				|| var.equals("PROPERTIES_OUTPUT") || var.equals("MAP_OUTPUT") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("THRESHOLD") || var.equals("NAMES_LIST") //$NON-NLS-1$ //$NON-NLS-2$ 
+				|| var.equals("ITERATIONS") || var.equals("REDUCE_LIST") //$NON-NLS-1$ //$NON-NLS-2$
+				|| var.equals("INPUT")) { //$NON-NLS-1$
+			return true;
+		}
+
+		return false;
+
+	}
+
+	/**
+	 * 
+	 * @param vars --
+	 *            all the configuration variables
+	 * @return false if we dont have a valid workspace variable
+	 */
+	static protected boolean verifyWorkspace(HashMap<String, String> vars) {
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param vars --
+	 *            all the configuration variables
+	 * @return false if we dont have a valid output directory
+	 */
+	static protected boolean verifyOutputDirectory(HashMap<String, String> vars) {
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+			if (var.equals("OUTPUT") || var.equals("MAP_OUTPUT") //$NON-NLS-1$ //$NON-NLS-2$
+					|| var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Load selectively the ISO 3166-2 data for the country described by desc
+	 * 
+	 * @param isoFile
+	 *            file containing ISO 3166-2 codes
+	 * @param desc
+	 *            ISO3166-2 two letter country code
+	 * 
+	 * @return a list holding the ISO 3166-2 codes
+	 */
+	static protected List<ISOCode2> loadISO2(String isoFile, String desc) {
+
+		String buffer = null;
+		List<ISOCode2> list = new ArrayList<ISOCode2>();
+
+		BufferedReader reader = openReader(isoFile);
+		try {
+
+			if (reader != null) {
+				while (EOF(buffer = reader.readLine()) != true) {
+					// System.out.println("Read : " + buffer);
+
+					// If this line starts with "#", then ignore it.
+					if (buffer.trim().startsWith("#")) { //$NON-NLS-1$
+						continue;
+					}
+
+					// Make sure that we mark all unknown data.
+					buffer.replace(";;", ";UNKNOWN;"); //$NON-NLS-1$ //$NON-NLS-2$
+
+					// Make it all uppercase
+					buffer.toUpperCase();
+
+					// Tokenize
+					StringTokenizer tokens = new StringTokenizer(buffer, ";"); //$NON-NLS-1$
+
+					// Get tokens -> order matters here!
+					String alpha2 = tokens.nextToken().trim();
+					String id = tokens.nextToken().trim();
+					String name = tokens.nextToken().trim();
+					String index = tokens.nextToken().trim();
+
+					// If current element does not match our target, then ignore
+					// it.
+					if (desc.equals(alpha2) == false) {
+						continue;
+					}
+
+					ISOCode2 code = new ISOCode2(alpha2, id, name, index);
+
+					// add new code to our list
+					list.add(code);
+
+					buffer = null;
+				}
+				reader.close();
+			}
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return list;
+	}
+
+	/**
+	 * Load selectively the ISO 3166-2 fix data for the country described by
+	 * desc
+	 * 
+	 * @param list
+	 *            list containing ISO 3166-2 codes
+	 * @param code
+	 *            ISO3166-1 code whose name attribute we want to match or
+	 *            filter.
+	 * 
+	 * @return a list holding the ISO 3166-2 codes matched.
+	 * 
+	 */
+	static protected List<ISOCode2> extractDescriptors(List list, ISOCode1 code) {
+
+		List<ISOCode2> descriptors = new ArrayList<ISOCode2>();
+
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+
+			String current = (String) it.next();
+
+			if (current.trim().startsWith("#")) { //$NON-NLS-1$
+				continue;
+			}
+
+			// Tokenize
+			StringTokenizer tokens = new StringTokenizer(current, ":"); //$NON-NLS-1$
+
+			// Get tokens -> order matters here!
+			String country = tokens.nextToken().trim();
+			String name = tokens.nextToken().trim();
+			// String alias = tokens.nextToken().trim();
+			tokens.nextToken().trim();
+			String id = tokens.nextToken().trim();
+
+			// If current element does not match our target, then ignore
+			// it.
+			if (code.getName().equals(country.toUpperCase()) == false) {
+				continue;
+			}
+
+			ISOCode2 newCode = new ISOCode2(code.getAlpha2(), id, name, "0"); //$NON-NLS-1$
+
+			// add new code to our list
+			descriptors.add(newCode);
+		}
+
+		return descriptors;
+	}
+
+	/**
+	 * Check to see if this ID is a relevant URL source or not. As an example,
+	 * for area data we only care about URLs with ID = DIVA For Population data,
+	 * we care about URLs with ID = CIA
+	 * 
+	 * @param urlSet
+	 * @param id
+	 * 
+	 * @return whether a URL is part of this URL set.
+	 * 
+	 */
+	static protected boolean isSourceURL(Set<String> urlSet, String id) {
+
+		if (urlSet.contains(id)) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Find the ISO Code for this country and create an ISO object for it.
+	 * 
+	 * @param country
+	 *            the country to look for.
+	 * 
+	 * @param codeList
+	 *            a list will all the ISO 3166-1 codes.
+	 * 
+	 * @return the ISO object (ISO info) for this country.
+	 */
+	static protected ISOCode1 getISOCode(String country, List codeList) {
+
+		Iterator it = codeList.iterator();
+
+		String countryStr = country.toUpperCase();
+
+		while (it.hasNext()) {
+
+			String code = ((String) it.next()).toUpperCase();
+
+			// Tokenize
+			StringTokenizer tokens = new StringTokenizer(code, ","); //$NON-NLS-1$
+
+			// Get tokens -> order matters here!
+			String name = tokens.nextToken().trim();
+			String numeric_code = tokens.nextToken().trim();
+			String alpha3 = tokens.nextToken().trim();
+			String alpha2 = tokens.nextToken().trim();
+
+			if (name.equals(countryStr)) {
+				return new ISOCode1(name, numeric_code, alpha2, alpha3);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Extract all relevant data. We need :
+	 * 
+	 * The 3 letter ISO3166-1 Alpha 3 code, the country name, the admin1 name,
+	 * the admin2 name.
+	 * 
+	 * @param buffer
+	 *            a buffer of diva data
+	 * 
+	 * @return a string array holding the extracted data
+	 * 
+	 */
+	static protected String[] extract(String buffer) {
+
+		String[] data = new String[4];
+
+		// Tokenize
+		StringTokenizer code = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+		// System.out.println("\t\tRead : " + buffer);
+		// System.out.println("alpha 3 code : " + code.nextToken());
+		// System.out.println("country name code : " + code.nextToken());
+		// System.out.println("admin1 code : " + code.nextToken());
+		// System.out.println("admin2 code : " + code.nextToken());
+		// Order matters here.
+		data[ISOData.ALPHA3_CODE] = code.nextToken().trim();
+		data[ISOData.COUNTRY_NAME] = code.nextToken().trim();
+		data[ISOData.ADMIN1_NAME] = code.nextToken().trim();
+		data[ISOData.ADMIN2_NAME] = code.nextToken().trim();
+		return data;
+	}
+
+	/**
+	 * Indicate End-Of-File
+	 * 
+	 * @param buffer
+	 *            A buffer of diva data
+	 * 
+	 * @return True if we have reached End-Of-File
+	 */
+	static protected boolean EOF(String buffer) {
+		if (buffer == null || buffer.length() == 0)
+			return true;
+		return false;
+	}
+
+	/**
+	 * This method extracts the alpha two code for a state from the ISO3166-2
+	 * descriptor. In other words, given: US-NY, this method should return: NY
+	 * Useful for generating the USA only.
+	 * 
+	 * @param descriptor
+	 *            the ISO3166-2 descriptor.
+	 * 
+	 * @return an Alpha 2 code for a state.
+	 * 
+	 */
+	static protected String extractAlpha2(String descriptor) {
+
+		final int ALPHA2 = 1;
+
+		String[] tokens = null;
+
+		if (descriptor != null) {
+
+			tokens = descriptor.split("-"); //$NON-NLS-1$
+
+		}
+
+		if (tokens.length < ALPHA2) {
+			return null;
+		}
+
+		return tokens[ALPHA2];
+	}
+	
+	/**
+	 * This method extracts the alpha one code for a state from the ISO3166-2
+	 * descriptor. In other words, given: US-NY, this method should return: NY
+	 * Useful for generating the USA only.
+	 * 
+	 * @param descriptor
+	 *            the ISO3166-2 descriptor.
+	 * 
+	 * @return an Alpha 1 code for country
+	 * 
+	 */
+	static protected String extractAlpha1(String descriptor) {
+
+		final int ALPHA1 = 0;
+
+		String[] tokens = null;
+
+		if (descriptor != null) {
+
+			tokens = descriptor.split("-"); //$NON-NLS-1$
+
+		}
+
+		if (tokens.length < ALPHA1) {
+			return null;
+		}
+
+		return tokens[ALPHA1];
+	}
+
+	/**
+	 * This method simply returns a string with IBM's copyright statement.
+	 * 
+	 * @return the copyright statement
+	 */
+	static protected String getCopyright() {
+
+		String copyright = "# /*********************************************************************************************\n"; //$NON-NLS-1$
+		copyright += "# * Copyright (c) 2007 IBM Corporation and others.\n"; //$NON-NLS-1$
+		copyright += "# * All rights reserved. This program and the accompanying materials\n"; //$NON-NLS-1$
+		copyright += "# * are made available under the terms of the Eclipse Public License v1.0\n"; //$NON-NLS-1$
+		copyright += "# * which accompanies this distribution, and is available at\n"; //$NON-NLS-1$
+		copyright += "# * http://www.eclipse.org/legal/epl-v10.html\n"; //$NON-NLS-1$
+		copyright += "# *\n"; //$NON-NLS-1$
+		copyright += "# * Contributors:\n"; //$NON-NLS-1$
+		copyright += "# *     IBM Corporation - initial API and implementation\n"; //$NON-NLS-1$
+		copyright += "# ***********************************************************************************************/\n\n"; //$NON-NLS-1$
+
+		return copyright;
+
+	}
+
+	/**
+	 * This method simply returns a string with a copyright statement for the
+	 * European data (United Nations).
+	 * 
+	 * @return the licensing policy for Europe
+	 */
+	static protected String getUNPolicy() {
+
+		String copyright = "# /*********************************************************************************************\n"; //$NON-NLS-1$
+		copyright += "# * The Data source for Europe is \"UNESCO (1987) through UNEP/GRID-Europe.\"\n"; //$NON-NLS-1$
+		copyright += "# * For more details please visit : http://www.grid.unep.ch/data/policy.php\n"; //$NON-NLS-1$
+		copyright += "# ***********************************************************************************************/\n\n"; //$NON-NLS-1$
+
+		return copyright;
+
+	}
+
+	/**
+	 * This method simply returns a string with a copyright statement for the
+	 * European data (United Nations).
+	 * 
+	 * @return the licensing policy for Europe
+	 */
+	static protected String getGMLUNPolicy() {
+
+		String copyright = "<!-- \n"; //$NON-NLS-1$
+		copyright += "# /*********************************************************************************************\n"; //$NON-NLS-1$
+		copyright += "# * The Data source for Europe is \"UNESCO (1987) through UNEP/GRID-Europe.\"\n"; //$NON-NLS-1$
+		copyright += "# * For more details please visit : http://www.grid.unep.ch/data/policy.php\n"; //$NON-NLS-1$
+		copyright += "# ***********************************************************************************************/ -->\n\n"; //$NON-NLS-1$
+
+		return copyright;
+
+	}
+
+	/**
+	 * Find a descriptor for the USA based on the location's name.
+	 * 
+	 * @param county -
+	 *            the county for which we want to find the descriptor
+	 * 
+	 * @param stateID -
+	 *            the ID for the state in which this county is located
+	 * 
+	 * @param List -
+	 *            a list containing (descriptor:location) tuples
+	 * 
+	 * @return String - the descriptor
+	 */
+	static protected String getUSADescriptor(String county, String stateID,
+			List list) {
+
+		final int DESCRIPTOR = 0;
+
+		final int LOCATION = 1;
+
+		String[] data = null;
+
+		Iterator it = list.iterator();
+
+		String countyStr = county.toUpperCase().trim();
+
+		while (it.hasNext()) {
+
+			String miniBuffer = (String) it.next();
+
+			if (miniBuffer.contains("#")) { //$NON-NLS-1$
+				continue;
+			}
+
+			data = miniBuffer.split(":"); //$NON-NLS-1$
+
+			// Get the location name and remove blanks
+			String location = data[LOCATION].toUpperCase().trim();
+
+			location = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			if (countyStr.equals(location)) {
+
+				// Check both entities belong to same state
+				if (data[DESCRIPTOR].contains(stateID) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+				return data[DESCRIPTOR];
+			}
+
+		} // while
+
+		// Not found
+		return "Not Found"; //$NON-NLS-1$
+	}
+
+	/**
+	 * This method simply returns a string explaining what a key is in our
+	 * properties files.
+	 * 
+	 * @return the explanation of the key format we use in our properties and
+	 *         GML files.
+	 */
+	static protected String getKeyFormatExplanation() {
+
+		String format = "# /**********************************************************************************************\n"; //$NON-NLS-1$
+		format += "# * Key Format: \n"; //$NON-NLS-1$
+		format += "# * \n"; //$NON-NLS-1$
+		format += "# * \t For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: \n"; //$NON-NLS-1$
+		format += "# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.\n"; //$NON-NLS-1$
+		format += "# *\n"; //$NON-NLS-1$
+		format += "# * \t For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate\n"; //$NON-NLS-1$
+		format += "# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County\n"; //$NON-NLS-1$
+		format += "# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the\n"; //$NON-NLS-1$
+		format += "# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.\n"; //$NON-NLS-1$
+		format += "# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within \n"; //$NON-NLS-1$
+		format += "# * a level 1 administration. \n"; //$NON-NLS-1$
+		format += "# ************************************************************************************************/\n\n"; //$NON-NLS-1$
+
+		return format;
+	}
+
+	/**
+	 * This method simply returns a string explaining what a key is in our GML
+	 * files.
+	 * 
+	 * @return the explanation of the key format we use in our properties and
+	 *         GML files.
+	 */
+	static protected String getGMLKeyFormatExplanation() {
+
+		String format = "<!-- \n"; //$NON-NLS-1$
+		format += "# /*******************************************************************************************************\n"; //$NON-NLS-1$
+		format += "# * Key Format: \n"; //$NON-NLS-1$
+		format += "# * \n"; //$NON-NLS-1$
+		format += "# * \t For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: \n"; //$NON-NLS-1$
+		format += "# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.\n"; //$NON-NLS-1$
+		format += "# *\n"; //$NON-NLS-1$
+		format += "# * \t For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate\n"; //$NON-NLS-1$
+		format += "# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County\n"; //$NON-NLS-1$
+		format += "# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the\n"; //$NON-NLS-1$
+		format += "# * level 1 administrations within a country. Similarly, the four leftmost digits indicate the level 2 administration.\n"; //$NON-NLS-1$
+		format += "# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within \n"; //$NON-NLS-1$
+		format += "# * a level 1 administration. \n"; //$NON-NLS-1$
+		format += "# *************************************************************************************************** --> \n\n"; //$NON-NLS-1$
+
+		return format;
+	}
+
+	/**
+	 * This method simply returns a string with IBM's copyright statement
+	 * commented out for GML files.
+	 * 
+	 * @return the copyright statement
+	 */
+	static protected String geGMLCopyright() {
+
+		String copyright = "<!-- \n"; //$NON-NLS-1$
+		copyright += "# ***************************************************************************************************\n"; //$NON-NLS-1$
+		copyright += "# * Copyright (c) 2007 IBM Corporation and others.\n"; //$NON-NLS-1$
+		copyright += "# * All rights reserved. This program and the accompanying materials\n"; //$NON-NLS-1$
+		copyright += "# * are made available under the terms of the Eclipse Public License v1.0\n"; //$NON-NLS-1$
+		copyright += "# * which accompanies this distribution, and is available at\n"; //$NON-NLS-1$
+		copyright += "# * http://www.eclipse.org/legal/epl-v10.html\n"; //$NON-NLS-1$
+		copyright += "# *\n"; //$NON-NLS-1$
+		copyright += "# * Contributors:\n"; //$NON-NLS-1$
+		copyright += "# *     IBM Corporation - initial API and implementation\n"; //$NON-NLS-1$
+		copyright += "# ********************************************************************************************** --> \n"; //$NON-NLS-1$		
+
+		return copyright;
+
+	}
+
+	/**
+	 * 
+	 * Find the country name by doing a reverse lookup based on the alpha 2
+	 * codes
+	 * 
+	 * @param alpha2
+	 * @param codeList
+	 * 
+	 * @return country name
+	 */
+	static protected String getCountryName(String alpha2Code, List codeList) {
+
+		Iterator it = codeList.iterator();
+
+		while (it.hasNext()) {
+
+			String code = ((String) it.next()).toUpperCase();
+
+			// Tokenize
+			StringTokenizer tokens = new StringTokenizer(code, ","); //$NON-NLS-1$
+
+			// Get tokens -> order matters here!
+			String name = tokens.nextToken().trim();
+			tokens.nextToken().trim(); // the numeric code, ignore.
+			tokens.nextToken().trim(); // the alpha3 code, ignore.
+			String alpha2 = tokens.nextToken().trim().toUpperCase();
+
+			if (alpha2.equals(alpha2Code.toUpperCase())) {
+				return name;
+			}
+		}
+		// Not found.
+		return null;
+	}
+
+	/**
+	 * 
+	 * Find the country name by doing a reverse lookup based on the numeric code
+	 * for a given European location
+	 * 
+	 * @param numID
+	 *            the numerical ID for a location in Europe
+	 * @param codeList
+	 * 
+	 * @return country name
+	 */
+	static protected String getEuropeanLocation(String numID, List codeList) {
+
+		final int NUMCODE = 0;
+		final int LOCATION_NAME = 1;
+
+		Iterator it = codeList.iterator();
+
+		while (it.hasNext()) {
+
+			String loc = ((String) it.next());
+			loc = loc.replace('\t', ' ');
+			String[] tokens = loc.split(":"); //$NON-NLS-1$
+			String code = tokens[NUMCODE].trim();
+			String name = tokens[LOCATION_NAME];
+			if (numID.equals(code)) {
+				return name;
+			}
+		}
+		// Not found.
+		return null;
+	}
+
+	/**
+	 * Do a lookup in the lex2 list for the current entry.
+	 * 
+	 * @param list
+	 *            a list of lex2 objects.
+	 * @param admin1
+	 *            an administrative 1 location.
+	 * @param admin2
+	 *            an administrative 2 location.
+	 * 
+	 * @return a lex2 object for the current location.
+	 * 
+	 */
+	static protected Lex2Obj lex2Lookup(List<Lex2Obj> list, String admin1,
+			String admin2) {
+
+		Lex2Obj lexObj = null;
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+			lexObj = (Lex2Obj) it.next();
+			if (admin2.toUpperCase().equals(lexObj.getAdmin2())
+					&& admin1.toUpperCase().equals(lexObj.getAdmin1())) {
+				return lexObj;
+			}
+		}
+		// Not found.
+		// System.out
+		// .println("lex2Lookup : entry not found. Creating dummy lex2Object for
+		// : "
+		// + admin2);
+		return new Lex2Obj("0", "AA", "AAA", "DUMMY", "FOO", "FOO"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+	}
+
+	/**
+	 * Do a lookup in the lex1 list for the current entry. *
+	 * 
+	 * @param list
+	 *            a list of lex1 objects.
+	 * @param admin1
+	 *            an administrative 1 location.
+	 * 
+	 * @return a lex1 object for the current location.
+	 * 
+	 */
+	static protected Lex1Obj lex1Lookup(List<Lex1Obj> list, String entry) {
+
+		if (list == null) {
+			return null;
+		}
+
+		Iterator it = list.iterator();
+		String[] compare = null;
+		Lex1Obj lexObj = null;
+
+		while (it.hasNext()) {
+
+			lexObj = (Lex1Obj) it.next();
+
+			if (lexObj.getAdmin1().contains("[")) { //$NON-NLS-1$
+
+				String tempHolder = lexObj.getAdmin1().replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(tempHolder, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				// We have more than one entry to compare to. Ex
+				// 18:AF-KNR:AF:KONAR [KUNAR]
+				// We have to compare individually against KONAR and KUNAR
+				// Also, remove hyphens. Ex. for Algeria: Tizi-Ouzou should be
+				// Tizi Ouzou
+				for (int i = 0; i < compare.length; i++) {
+					if (entry.toUpperCase().replace("-", " ") //$NON-NLS-1$ //$NON-NLS-2$
+							.equals(compare[i])) {
+						return lexObj;
+					}
+				}
+			}
+
+			if (entry.toUpperCase().replace("-", " ") //$NON-NLS-1$ //$NON-NLS-2$
+					.equals(lexObj.getAdmin1())) {
+				return lexObj;
+			}
+		}
+		// Not found.
+		// System.out
+		// .println("lex1Lookup : entry not found. Creating dummy lex1Object for
+		// : "
+		// + entry);
+		return new Lex1Obj("0", lexObj.getAlpha2() + "-UNK", "AA", "FOO"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+	}
+
+	/**
+	 * 
+	 * This method takes a List<String> and produces a list of Lex1Objects
+	 * 
+	 * @param list
+	 *            a list of locations
+	 * 
+	 * @return a list of lex1 objects.
+	 */
+	static protected List<Lex1Obj> createLex1List(List<String> list) {
+
+		String[] lex1Data = null;
+		List<Lex1Obj> lex1List = null;
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+			while (it.hasNext()) {
+
+				// Get the content
+				String content = (String) it.next();
+
+				// Tokenize the string
+				StringTokenizer code = new StringTokenizer(content, ":"); //$NON-NLS-1$
+
+				// Are we dealing with a lex1 object or with a lex2 object ?
+				if (code.countTokens() == Lex1Data.CONSTANTS) {
+
+					if (lex1Data == null) {
+						lex1Data = new String[Lex1Data.CONSTANTS];
+					}
+
+					// Order matters here.
+					lex1Data[Lex1Data.INDEX] = code.nextToken().trim();
+					lex1Data[Lex1Data.DESC] = code.nextToken().trim();
+					lex1Data[Lex1Data.ALPHA2] = code.nextToken().trim();
+					lex1Data[Lex1Data.ADMIN1] = code.nextToken().trim();
+
+					// Now create a lex 1 object
+					Lex1Obj lexObj = new Lex1Obj(lex1Data[Lex1Data.INDEX],
+							lex1Data[Lex1Data.DESC], lex1Data[Lex1Data.ALPHA2],
+							lex1Data[Lex1Data.ADMIN1]);
+
+					if (lex1List == null) {
+						lex1List = new ArrayList<Lex1Obj>();
+					}
+					lex1List.add(lexObj);
+
+				} else {
+					System.out
+							.println("Malformed lex data object. Total data elements = " //$NON-NLS-1$
+									+ code.countTokens() + ". Expected : " //$NON-NLS-1$
+									+ Lex1Data.CONSTANTS);
+				}
+
+			} // while
+
+		} // if
+
+		return lex1List;
+	}
+
+	/**
+	 * 
+	 * This method takes a List<String> and produces a list of Lex2Objects.
+	 * 
+	 * @param list
+	 *            a list of locations.
+	 * 
+	 * @return a list of lex2 objects.
+	 */
+	static protected List<Lex2Obj> createLex2List(List<String> list) {
+
+		String[] lex2Data = null;
+		List<Lex2Obj> lex2List = null;
+
+		if (list != null) {
+
+			Iterator it = list.iterator();
+
+			while (it.hasNext()) {
+
+				// Get the content
+				String content = (String) it.next();
+
+				// Tokenize the string
+				StringTokenizer code = new StringTokenizer(content, ":"); //$NON-NLS-1$
+
+				// Are we dealing with a lex1 object or with a lex2 object ?
+				if (code.countTokens() == Lex2Data.CONSTANTS) {
+
+					if (code.countTokens() == Lex2Data.CONSTANTS) {
+
+						if (lex2Data == null) {
+							lex2Data = new String[Lex2Data.CONSTANTS];
+						}
+
+						// Order matters here.
+						lex2Data[Lex2Data.INDEX] = code.nextToken().trim();
+						lex2Data[Lex2Data.ALPHA2] = code.nextToken().trim();
+						lex2Data[Lex2Data.ALPHA3] = code.nextToken().trim();
+						lex2Data[Lex2Data.COUNTRY] = code.nextToken().trim();
+						lex2Data[Lex2Data.ADMIN1] = code.nextToken().trim();
+						lex2Data[Lex2Data.ADMIN2] = code.nextToken().trim();
+
+						// Now create a lex 2 object
+						Lex2Obj lexObj = new Lex2Obj(lex2Data[Lex2Data.INDEX],
+								lex2Data[Lex2Data.ALPHA2],
+								lex2Data[Lex2Data.ALPHA3],
+								lex2Data[Lex2Data.COUNTRY],
+								lex2Data[Lex2Data.ADMIN1],
+								lex2Data[Lex2Data.ADMIN2]);
+
+						// Create the lex 2 list if necessary
+						if (lex2List == null) {
+							lex2List = new ArrayList<Lex2Obj>();
+						}
+
+						// Add it to our list
+						lex2List.add(lexObj);
+
+					} else {
+						System.out
+								.println("Malformed lex data object. Total data elements = " //$NON-NLS-1$
+										+ code.countTokens() + ". Expected : " //$NON-NLS-1$
+										+ Lex1Data.CONSTANTS);
+					}
+
+				} // if
+
+			} // while
+
+		} // if
+
+		return lex2List;
+	}
+
+	/**
+	 * finds the admin level of the id by counting '-' characters
+	 * @param id
+	 * @return
+	 */
+	@SuppressWarnings("nls")
+	public static int getLevel(String id) {
+		
+		if(id.indexOf("-") ==-1) return 0;
+		
+		int idx1 = id.indexOf("-");
+		String firstPart = id.substring(idx1+1,id.length());
+		if(firstPart.indexOf("-") ==-1) return 1;
+		
+		int idx2 = firstPart.indexOf("-");
+		String secondPart = firstPart.substring(idx2+1,firstPart.length());
+		if(secondPart.indexOf("-") ==-1) return 2;
+		
+
+		int idx3 = secondPart.indexOf("-");
+		String thirdPart = secondPart.substring(idx3+1,secondPart.length());
+		if(thirdPart.indexOf("-") ==-1) {
+			return 3;
+		} 
+		// TODO should generalize this.
+		return 4; // two levels past where we now have data....
+		
+	}
+	
+	/**
+	 * Return the string resulting from "upping" the level of
+	 * the passed in stem id. So for instance, a county ID
+	 * would return the state id for the county etc.
+	 * 
+	 * @param id The id
+	 * @return The converted stem id
+	 */
+	public static String upCode(String id) {
+		
+		int level = getLevel(id);
+		int targetLevel = level -1;
+		if(targetLevel == -1) return null;
+		StringBuilder res = new StringBuilder();
+		int lvl = 0;
+		for(int i=0;i<id.length();++i) {
+			char c = id.charAt(i);
+			if(c == '-') {
+				if(lvl == targetLevel) return res.toString();
+				++lvl;
+			}
+			res.append(c);
+			
+		}
+		return null;
+	}
+	
+	/**
+	 * Populate a list with whatever source of data is specified. NOTE: the
+	 * source has to have the format -> token1:token2:...tokenK
+	 * 
+	 * @param source
+	 *            The file which is source of data
+	 * 
+	 * @return a list loaded with items as specified by the source
+	 * 
+	 */
+	static protected List<String> populateList(String source) {
+
+		List<String> list = new ArrayList<String>();
+		String buffer = null;
+
+		BufferedReader reader = openReader(source);
+		try {
+
+			if (reader != null) {
+				while (EOF(buffer = reader.readLine()) != true) {
+					// If this line starts with "#", then ignore it.
+					if (buffer.trim().startsWith("#") //$NON-NLS-1$
+							|| buffer.trim().startsWith(":")) { //$NON-NLS-1$
+						continue;
+					}
+					list.add(buffer.trim());
+					buffer = null;
+				}
+				reader.close();
+			}
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return list;
+	}
+
+	/**
+	 * Open a folder for reading
+	 * 
+	 * @param fileName
+	 *            the folder to be opened
+	 * 
+	 * @return a reference to the folder
+	 */
+	static protected BufferedReader openFolder(String file) {
+
+		BufferedReader buffer = null;
+
+		try {
+			File myFile = new File(file);
+			if (!myFile.exists() || !myFile.canRead()) {
+				System.out.println("Cant read : " + file); //$NON-NLS-1$
+				return null;
+			}
+			buffer = new BufferedReader(new FileReader(file));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		return buffer;
+	}
+
+	/**
+	 * Open a file for reading
+	 * 
+	 * @param fileName
+	 *            a folder we want to open
+	 * 
+	 * @return a reference to the folder
+	 */
+	static protected File openDirectory(String file) {
+
+		File dir = null;
+
+		dir = new File(file);
+		if (!dir.exists() || !dir.canRead() || !dir.isDirectory()) {
+			System.out.println("Cant read : " + file); //$NON-NLS-1$
+			return null;
+		}
+
+		return dir;
+	}
+
+	/**
+	 * Create a newBufferedReader
+	 * 
+	 * @param fileName
+	 *            the name of the file we want to open for reading
+	 * 
+	 * @return a reader to a given file
+	 */
+	static protected BufferedReader openReader(String file) {
+
+		try {
+
+			File f = new File(file);
+
+			if (f.exists() == false) {
+				return null;
+			}
+
+			return new BufferedReader(new FileReader(file));
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return null;
+	}
+
+	/**
+	 * Create a new PrintWriter
+	 * 
+	 * @param fileName
+	 *            the name of the file we want to open for writing
+	 * @return PrintWriter a writer to a given file
+	 */
+	static protected PrintWriter openWriter(String file) {
+
+		try {
+
+			return new PrintWriter(new BufferedWriter(new FileWriter(file)));
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return null;
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GroupGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GroupGenerator.java
new file mode 100644
index 0000000..e2f5923
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/GroupGenerator.java
@@ -0,0 +1,667 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class are
+ * used to group all data according to administration name. For example, if data
+ * for California is scattered all over the data file, this program will group
+ * all data for California consecutively. The benefit is that this way we will
+ * have a single polygon for California instead of having multiple polygons if
+ * the data is scattered or non-consecutive.
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/GroupGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\GroupGenerator.config)
+ * 
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ * 
+ */
+
+public class GroupGenerator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	/**
+	 * Hash maps to keep track of each entry.
+	 */
+	HashMap<String, String> level0Map = null;
+
+	HashMap<String, String> level1Map = null;
+
+	HashMap<String, String> level2Map = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            data file with the ISO3166-2 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile
+	 *            the list of countries for which we will generate GML files
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir
+	 *            the output directory for the GML files we generate
+	 */
+	// public GroupGenerator(String iso3166_1, String iso3166_2, String fixFile,
+	// String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// level0Map = null;
+	// level1Map = null;
+	// level2Map = null;
+	// targetList = null;
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public GroupGenerator(String configFile) {	
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+
+		if (GenUtils.verifyOutputDirectory(vars) == false) {
+			System.out
+					.println("\t\tBad configuration file -- OUTPUT variable not found. Please specify output directory using format VAR = VALUE (i.e. OUTPUT = C:\\diva\\grouped\\ "); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		level0Map = null;
+		level1Map = null;
+		level2Map = null;
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its GML file.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter groupFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its GML data file.
+		for (int i = 0; i < size; i++) {
+
+			// Create the hash maps :
+			level0Map = new HashMap<String, String>();
+			level1Map = new HashMap<String, String>();
+			level2Map = new HashMap<String, String>();
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknown or n.a. entries
+			int unkCounter = 1;
+
+			// We use this list to keep track of duplicated polygons.
+			List<STEMPolygon> polygons = null;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+
+			System.out
+					.println("\t\t<<<< GROUP GENERATOR -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes the level of data
+					// being processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous type.
+					int oldlevel = level - 1;
+
+					// The data we want to write to the new GML file.
+					String output = " "; //$NON-NLS-1$
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX]
+						// to make processsing more
+						// efficient, we dont need all of it.
+						int BUFFER_MIN = 0;
+						int BUFFER_MAX = 125;
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Get the type of the data we are processing.
+						level = GenUtils.getLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldlevel = level;
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+
+							// Clear the list of unique polygons
+							if (polygons != null) {
+								polygons.clear();
+							}
+
+							// Get a new, empty polygon list
+							polygons = new ArrayList<STEMPolygon>();
+
+							// If the directory does not exist for this country,
+							// create it using ISO alpha3 code.
+							File countryDir = new File(outputDir
+									+ isoCode.getAlpha3());
+
+							if (countryDir != null
+									&& countryDir.exists() == false) {
+								// Directory does not exist. Create it.
+								countryDir.mkdir();
+							}
+
+							// Create the file name for the new file
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_GROUPED.txt"; //$NON-NLS-1$
+
+							// Open the writer for the new file
+							groupFile = GenUtils.openWriter(fileName);
+
+						} // if( transition == true )
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							current = isoCode.getAlpha3();
+							break;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex1Object to which lex2Current belongs
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								// STEP 2: piece together the ID using the
+								// proper lex objects : the USA is a special
+								// case
+								descriptor = lex1Current.getDescriptor()
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA();
+							} else {
+								// STEP 2: piece together the ID using the
+								// proper lex objects.
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+							}
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else {
+							// Compose descriptor for l 1 and l 0 data
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+							}
+
+						}
+
+						String key = null;
+						HashMap<String, String> map = null;
+
+						// Store the data in the hash map
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							key = items[ISOData.COUNTRY_NAME];
+							map = level0Map;
+							break;
+
+						case DataTypes.LEVEL_1:
+							key = items[ISOData.ADMIN1_NAME];
+							map = level1Map;
+							break;
+
+						case DataTypes.LEVEL_2:
+							key = items[ISOData.ADMIN1_NAME] + ":" //$NON-NLS-1$
+									+ items[ISOData.ADMIN2_NAME];
+							map = level2Map;
+							break;
+						}
+
+						if (map.containsKey(key)) {
+							// Concatenate to current value
+							String value = map.get(key);
+							value += buffer + "\n"; //$NON-NLS-1$
+							map.put(key, value);
+						} else {
+							map.put(key, buffer + "\n"); //$NON-NLS-1$
+						}
+
+						// Run garbage collection
+						System.gc();
+
+					} // while loop
+
+					// Now write the entries in the hash maps to the file :
+
+					output = consolidateData(level0Map);
+					if (output != null) {
+						GenUtils.addData(groupFile, output);
+					}
+
+					output = consolidateData(level1Map);
+					if (output != null) {
+						GenUtils.addData(groupFile, output);
+					}
+
+					output = consolidateData(level2Map);
+					if (output != null) {
+						GenUtils.addData(groupFile, output);
+					}
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Clear the hash maps
+					if (level0Map != null) {
+						level0Map.clear();
+						level0Map = null;
+					}
+
+					if (level1Map != null) {
+						level1Map.clear();
+						level1Map = null;
+					}
+
+					if (level2Map != null) {
+						level2Map.clear();
+						level2Map = null;
+					}
+
+					if (groupFile != null) {
+						groupFile.close();
+						groupFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * 
+	 * Get all the values in the map.
+	 * 
+	 * @param map
+	 *            a map of locations
+	 * 
+	 * @return String a string will all locations grouped secuentialy.
+	 * 
+	 */
+	String consolidateData(HashMap<String, String> map) {
+
+		String value = null;
+
+		if (map.isEmpty()) {
+			return null;
+		}
+
+		Set<String> keys = map.keySet();
+
+		Iterator it = keys.iterator();
+
+		while (it.hasNext()) {
+
+			String key = (String) it.next();
+
+			if (value == null) {
+				value = map.get(key);
+			} else {
+				value += map.get(key);
+			}
+
+		}
+
+		return value;
+	}
+
+	/**
+	 * The execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int TARGET_LIST = 3;
+		// final int LEX_DIR = 4;
+		// final int OUTPUT_DIR = 5;
+		// final int PARAMS = 6;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// GroupGenerator groupGen = new GroupGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[TARGET_LIST],
+		// args[LEX_DIR], args[OUTPUT_DIR]);
+		// groupGen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		GroupGenerator gen = new GroupGenerator(args[CONFIG_FILE]);
+
+		gen.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode1.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode1.java
new file mode 100644
index 0000000..a1474da
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode1.java
@@ -0,0 +1,92 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class are
+ * just a convenience container for ISO3166-1 data.
+ * 
+ */
+public class ISOCode1 {
+
+	/**
+	 * The four data items describing our ISO3166-1 object
+	 */
+	private String alpha3 = null;
+
+	private String alpha2 = null;
+
+	private String numeric = null;
+
+	private String name = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param name
+	 * @param numeric
+	 * @param alpha2
+	 * @param alpha3
+	 */
+	public ISOCode1(String name, String numeric, String alpha2, String alpha3) {
+		this.alpha2 = alpha2;
+		this.alpha3 = alpha3;
+		this.numeric = numeric;
+		this.name = name;
+	}
+
+	/**
+	 * Get the alpha 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAlpha2() {
+		return alpha2;
+	}
+
+	/**
+	 * Get the alpha 3 code
+	 * 
+	 * @return the alpha 3 code
+	 */
+	public String getAlpha3() {
+		return alpha3;
+	}
+
+	/**
+	 * Get the numeric code
+	 * 
+	 * @return the numeric code
+	 */
+	public String getNumeric() {
+		return numeric;
+	}
+
+	/**
+	 * Get the name
+	 * 
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Clear the object
+	 */
+	public void clear() {
+		this.alpha2 = null;
+		this.alpha3 = null;
+		this.numeric = null;
+		this.name = null;
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode2.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode2.java
new file mode 100644
index 0000000..44644e5
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOCode2.java
@@ -0,0 +1,94 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class are
+ * just a convenience container for ISO3166-2 data.
+ * 
+ */
+
+public class ISOCode2 {
+
+	/**
+	 * The three data items describing our ISO3166-1 object.
+	 * 
+	 */
+	private String alpha2 = null;
+
+	private String id = null;
+
+	private String name = null;
+
+	private String index = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param alpha2
+	 * @param id
+	 * @param name
+	 * @param index
+	 */
+	public ISOCode2(String alpha2, String id, String name, String index) {
+		this.alpha2 = alpha2;
+		this.id = id;
+		this.name = name.replace("-", " "); //$NON-NLS-1$ //$NON-NLS-2$
+		this.index = index;
+	}
+
+	/**
+	 * Get the alpha 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAlpha2() {
+		return alpha2;
+	}
+
+	/**
+	 * Get the id (if any) for this country
+	 * 
+	 * @return the id
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * Get the name
+	 * 
+	 * @return the name
+	 */
+	public String getName() {
+		return name.toUpperCase();
+	}
+
+	/**
+	 * Get the relative position of this entity within the list of ISO codes
+	 * 
+	 * @return this code relative index
+	 */
+	public String getIndex() {
+		return String.valueOf(index);
+	}
+
+	/**
+	 * Clear the object
+	 */
+	public void clear() {
+		this.alpha2 = null;
+		this.id = null;
+		this.name = null;
+		this.index = null;
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOData.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOData.java
new file mode 100644
index 0000000..de03ec4
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/ISOData.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : A holder for constants related
+ * to ISO3166-1
+ * 
+ */
+
+public abstract class ISOData {
+
+	/**
+	 * Symbolic constants describing an ISO3166-1 Object.
+	 */
+	/**
+	 * Alpha 3 country code
+	 */
+	public static final int ALPHA3_CODE = 0;
+
+	/**
+	 * Country name
+	 */
+	public static final int COUNTRY_NAME = 1;
+
+	/**
+	 * Administration 1 name
+	 */
+	public static final int ADMIN1_NAME = 2;
+
+	/**
+	 * Administration 2 name
+	 */
+	public static final int ADMIN2_NAME = 3;
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/InfectorInoculatorGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/InfectorInoculatorGenerator.java
new file mode 100644
index 0000000..ad15086
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/InfectorInoculatorGenerator.java
@@ -0,0 +1,208 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+/**
+ * The file imports an infectious log file (param1), a population log file (param 2)
+ * and using the specified disease name (param3) it generates infector and inoculator XML file
+ * that can be imported into a scenario to initialize it to the initial log file
+ * state
+ */
+public class InfectorInoculatorGenerator {
+
+	/**
+	 * NLS Prefix for Infector name
+	 */
+	public static String infectorPrefix = Messages.getString("Inoculator.1"); //$NON-NLS-1$
+	
+	/**
+	 * NLS Prefix for Inoculator name
+	 */
+	public static String inoculatorPrefix = Messages.getString("Inoculator.2"); //$NON-NLS-1$
+	
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings("nls")
+	public static void main(String [] args) {
+		if(args.length < 6) {
+			System.err.println("Usage: InfectorInoculatorGenerator <I file> <R file> <P file> <disease name> <project name> <default I% (optional)> <scale R fraction (optional)>"); //$NON-NLS-1$
+			System.exit(-1);
+		}
+		
+		String diseaseName = args[3];
+		String projectName = args[4];
+	
+		boolean useDefault = false;
+		double iperc = 0.0;
+		double rscale = 1.0;
+		
+		if(args.length >5) {
+			useDefault = true;
+			iperc = Double.parseDouble(args[5]);
+		}
+		if(args.length > 6) {
+			useDefault = true;
+			rscale = Double.parseDouble(args[6]);
+		}
+			
+		ArrayList<String>locations = new ArrayList<String>();
+		ArrayList<Double>infectious = new ArrayList<Double>();
+		ArrayList<Double>recovered = new ArrayList<Double>();
+		ArrayList<Double>population = new ArrayList<Double>();
+		
+		try {
+			 // Read infectious file
+			 FileInputStream ifile = new FileInputStream(args[0]); 
+		     BufferedReader ireader = new BufferedReader(new InputStreamReader(ifile));
+		     String header = null;
+		     header=ireader.readLine();
+		     if(header == null) {
+		    	 System.err.println("Error, "+args[0]+" file is empty!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		     StringTokenizer st = new StringTokenizer(header, ","); //$NON-NLS-1$
+		     int column = 0;
+		     while(st.hasMoreTokens()) {
+		    	 String val = st.nextToken();
+		    	 if(column < 2) {++column;continue;}
+		    	 locations.add(val.trim());
+		    	 ++column;
+		     }
+		    
+		    String data = null; 
+		    data=ireader.readLine();
+		    if(data == null) {
+		    	 System.err.println("Error, "+args[0]+" file has no data!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		    
+		    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+		    column = 0;
+			while (st.hasMoreTokens()) {
+				String val = st.nextToken().trim();
+				if(column < 2) {++column;continue;} // skip iteration, time
+				infectious.add(Double.parseDouble(val));
+			    ++ column;
+		    } // read tokens
+		    
+		    ireader.close();
+		    
+		    // Read recovered file
+		    ifile = new FileInputStream(args[1]); 
+		    ireader = new BufferedReader(new InputStreamReader(ifile));
+		    header = null;
+		    header=ireader.readLine();
+		    if(header == null) {
+		     System.err.println("Error, "+args[1]+" file is empty!"); //$NON-NLS-1$//$NON-NLS-2$
+		     System.exit(-2);
+		    }
+		    
+		    data = null; 
+		    data=ireader.readLine();
+		    if(data == null) {
+		    	 System.err.println("Error, "+args[1]+" file has no data!"); //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		    
+		    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+		    column = 0;
+			while (st.hasMoreTokens()) {
+				String val = st.nextToken().trim();
+				if(column < 2) {++column;continue;} // skip iteration, time
+				recovered.add(Double.parseDouble(val));
+			    ++ column;
+		    } // read tokens
+		    
+		    ireader.close();
+		    
+		    // Read population file
+		    ifile = new FileInputStream(args[2]); 
+		    ireader = new BufferedReader(new InputStreamReader(ifile));
+		    header = null;
+		    header=ireader.readLine();
+		    if(header == null) {
+		     System.err.println("Error, "+args[2]+" file is empty!"); //$NON-NLS-1$//$NON-NLS-2$
+		     System.exit(-2);
+		    }
+		    
+		    data = null; 
+		    data=ireader.readLine();
+		    if(data == null) {
+		    	 System.err.println("Error, "+args[2]+" file has no data!"); //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		    
+		    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+		    column = 0;
+			while (st.hasMoreTokens()) {
+				String val = st.nextToken().trim();
+				if(column < 2) {++column;continue;} // skip iteration, time
+				population.add(Double.parseDouble(val));
+			    ++ column;
+		    } // read tokens
+		    
+		    ireader.close();
+		    
+		    
+		    int index = 0;
+		    // Write
+		    for(String location:locations) {
+		    	String infectorfilename = infectorPrefix+index;
+		    	String inoculatorfilename = inoculatorPrefix+index;
+		    	FileWriter infectorfw = new FileWriter(infectorfilename+".standard");
+		    	FileWriter inoculatorfw = new FileWriter(inoculatorfilename+".standard");
+		    	
+		    	double infd = infectious.get(index);
+		    	if(infd == 0.0 && useDefault) {
+		    		infd = population.get(index)*iperc/100.0;
+		    	}
+		    	
+		    	infectorfw.write("<?xml version=\"1.0\" encoding=\"ASCII\"?>\n");
+		    	infectorfw.write("<org.eclipse.stem.diseasemodels.standard:SIInfector xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:org.eclipse.stem.diseasemodels.standard=\"http:///org/eclipse/stem/diseasemodels/standard.ecore\" ");
+		    	infectorfw.write(" uRI=\"platform:/resource/"+projectName+"/decorators/"+infectorfilename+".standard\" typeURI=\"stemtype://org.eclipse.stem/identifiable83\" ");
+		    	infectorfw.write(" diseaseName=\""+diseaseName+"\" targetISOKey=\""+location+"\" populationIdentifier=\"human\" infectiousCount=\""+infd+"\">\n");
+		    	infectorfw.write(" <dublinCore title=\"Infect "+infd+" &quot;human&quot; population members with the disease &quot;"+diseaseName+"&quot; at the location &quot;"+location+"&quot;.\" identifier=\"platform:/resource/"+projectName+"/decorators/"+infectorfilename+".standard\" description=\"Infect "+infd+" &quot;human&quot; population members with the disease &quot;"+diseaseName+"&quot; at the location &quot;"+location+"&quot; (CH-GN).\" creator=\"generated\" format=\"http:///org/eclipse/stem/diseasemodels/standard.ecore\" type=\"stemtype://org.eclipse.stem/identifiable83\" created=\"2008-12-17\"/>\n");
+		    	infectorfw.write("</org.eclipse.stem.diseasemodels.standard:SIInfector>\n");
+		    	infectorfw.flush();
+		    	infectorfw.close();
+		    	
+		    	double inoculatedPercentage = 100.0*recovered.get(index)/population.get(index);
+		    	inoculatedPercentage = inoculatedPercentage * rscale;
+		    	System.out.println("r_scale:"+rscale);
+		    	
+		    	inoculatorfw.write("<?xml version=\"1.0\" encoding=\"ASCII\"?>\n");
+		    	inoculatorfw.write("<org.eclipse.stem.diseasemodels.standard:SIRInoculator xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:org.eclipse.stem.diseasemodels.standard=\"http:///org/eclipse/stem/diseasemodels/standard.ecore\" ");
+		    	inoculatorfw.write(" uRI=\"platform:/resource/"+projectName+"/decorators/"+inoculatorfilename+".standard\" typeURI=\"stemtype://org.eclipse.stem/identifiable9\" ");
+		    	inoculatorfw.write(" diseaseName=\""+diseaseName+"\" targetISOKey=\""+location+"\" populationIdentifier=\"human\" infectiousCount=\"0\" inoculatedPercentage=\""+inoculatedPercentage+"\">\n");
+		    	inoculatorfw.write(" <dublinCore title=\"Inoculate "+inoculatedPercentage+" &quot;human&quot; percent of population against the disease &quot;"+diseaseName+"&quot; at the location &quot;"+location+"&quot;.\" identifier=\"platform:/resource/"+projectName+"/decorators/"+inoculatorfilename+".standard\" description=\"Inoculate "+inoculatedPercentage+" &quot;human&quot; percent of population against the disease &quot;"+diseaseName+"&quot; at the location &quot;"+location+"&quot; .\" creator=\"generated\" format=\"http:///org/eclipse/stem/diseasemodels/standard.ecore\" type=\"stemtype://org.eclipse.stem/identifiable9\" created=\"2008-12-17\"/>\n");
+		    	inoculatorfw.write("</org.eclipse.stem.diseasemodels.standard:SIRInoculator>\n");
+		    	inoculatorfw.flush();
+		    	inoculatorfw.close();
+		    	
+		    	
+		    	++index;
+		    }
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Data.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Data.java
new file mode 100644
index 0000000..7af073c
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Data.java
@@ -0,0 +1,50 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : A holder for constants related
+ * to Lex1data objects
+ * 
+ */
+public class Lex1Data {
+
+	/**
+	 * Symbolic constants describing an Lex1Data Object.
+	 */
+
+	/**
+	 * Total number of symbolic constants for lex 1 data objects.
+	 */
+	public static final int CONSTANTS = 4;
+
+	/**
+	 * index of this element in lexicographically sorted sequence.
+	 */
+	public static final int INDEX = 0;
+
+	/**
+	 * descriptor
+	 */
+	public static final int DESC = 1;
+
+	/**
+	 * Alpha 2 code
+	 */
+	public static final int ALPHA2 = 2;
+
+	/**
+	 * Administration 1 name
+	 */
+	public static final int ADMIN1 = 3;
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Obj.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Obj.java
new file mode 100644
index 0000000..161c28b
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex1Obj.java
@@ -0,0 +1,112 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this class
+ * represent a Lex1 object which is not much more than a holder of data for a
+ * given location during a lexicographic sorting of level 1 administrations.
+ * 
+ */
+public class Lex1Obj {
+
+	/**
+	 * The four data items describing our ISO3166-1 object
+	 */
+	private String index = null;
+
+	private String desc = null;
+
+	private String alpha2 = null;
+
+	private String admin1 = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param index
+	 * @param desc
+	 * @param alpha2
+	 * @param admin1
+	 */
+	public Lex1Obj(String index, String desc, String alpha2, String admin1) {
+		this.index = index;
+		this.desc = desc;
+		this.alpha2 = alpha2;
+		this.admin1 = admin1;
+	}
+
+	/**
+	 * Get the alpha 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAlpha2() {
+		return alpha2;
+	}
+
+	/**
+	 * Get the admin 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAdmin1() {
+		return admin1.toUpperCase();
+	}
+
+	/**
+	 * Get the index
+	 * 
+	 * @return the numeric code
+	 */
+	public int getIndex() {
+		return Integer.parseInt(index);
+	}
+
+	/**
+	 * Get the index padded with as many leftmost zeroes as necessary.
+	 * 
+	 * @return the index padded with leftmost zeroes
+	 */
+	public String getFormattedIndex() {
+		if (index.length() < 2) {
+			index = "0" + index; //$NON-NLS-1$
+		}
+		return index;
+	}
+
+	/**
+	 * Get the descriptor
+	 * 
+	 * @return the descriptor
+	 */
+	public String getDescriptor() {
+		return desc;
+	}
+
+	/**
+	 * Get the ID for the admin1 For example, for US-AK, we want to get AK which
+	 * is the ID for the admin1 area.
+	 * 
+	 * @return the substring with the ID.
+	 */
+	public String getID() {
+		int hyphen = desc.indexOf("-"); //$NON-NLS-1$
+		if ((hyphen + 1) < desc.length()) {
+			return desc.substring(hyphen + 1);
+		}
+		return desc;
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Data.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Data.java
new file mode 100644
index 0000000..71d45ae
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Data.java
@@ -0,0 +1,58 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : A holder for constants related
+ * to Lex2data objects.
+ * 
+ */
+public class Lex2Data {
+
+	/**
+	 * Symbolic constants describing an Lex1Data Object.
+	 */
+
+	/**
+	 * Total number of symbolic constants for lex 1 data objects.
+	 */
+	public static final int CONSTANTS = 6;
+
+	/**
+	 * index of this element in lexicographically sorted sequence.
+	 */
+	public static final int INDEX = 0;
+
+	/**
+	 * Alpha 2 code
+	 */
+	public static final int ALPHA2 = 1;
+
+	/**
+	 * Alpha 3 code
+	 */
+	public static final int ALPHA3 = 2;
+
+	/**
+	 * Country
+	 */
+	public static final int COUNTRY = 3;
+
+	/**
+	 * Administration 1 name
+	 */
+	public static final int ADMIN1 = 4;
+
+	/**
+	 * Admin 2 name
+	 */
+	public static final int ADMIN2 = 5;
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Obj.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Obj.java
new file mode 100644
index 0000000..f3ce025
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Lex2Obj.java
@@ -0,0 +1,144 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this class
+ * represent a Lex1 object which is not much more than a holder of data for a
+ * given location during a lexicographic sorting of level 2 administrations.
+ * 
+ */
+
+public class Lex2Obj {
+
+	/**
+	 * The four data items describing our ISO3166-1 object
+	 */
+	private String index = null;
+
+	private String alpha2 = null;
+
+	private String admin2 = null;
+
+	private String alpha3 = null;
+
+	private String admin1 = null;
+
+	private String country = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param index
+	 * @param alpha2
+	 * @param alpha3
+	 * @param country
+	 * @param admin1
+	 * @param admin2
+	 */
+	public Lex2Obj(String index, String alpha2, String alpha3, String country,
+			String admin1, String admin2) {
+		this.index = index;
+		this.alpha2 = alpha2;
+		this.admin2 = admin2;
+		this.admin1 = admin1;
+		this.alpha3 = alpha3;
+		this.country = country;
+	}
+
+	/**
+	 * Get the country code
+	 * 
+	 * @return the country code
+	 */
+	public String getCountry() {
+		return country;
+	}
+
+	/**
+	 * Get the alpha 1 code
+	 * 
+	 * @return the alpha 1 code
+	 */
+	public String getAlpha3() {
+		return alpha3;
+	}
+
+	/**
+	 * Get the alpha 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAlpha2() {
+		return alpha2;
+	}
+
+	/**
+	 * Get the admin 2 code
+	 * 
+	 * @return the alpha 2 code
+	 */
+	public String getAdmin2() {
+		return admin2.toUpperCase();
+	}
+
+	/**
+	 * Get the admin 1 code
+	 * 
+	 * @return the a code
+	 */
+	public String getAdmin1() {
+		return admin1.toUpperCase();
+	}
+
+	/**
+	 * Get the index
+	 * 
+	 * @return the numeric code
+	 */
+	public int getIndex() {
+		return Integer.parseInt(index);
+	}
+
+	/**
+	 * Get the index padded with as many leftmost zeroes as necessary.
+	 * 
+	 * @return the index padded with leftmost zeroes
+	 */
+	public String getFormattedIndex() {
+		final int MINSIZE = 4;
+		if (index.length() < MINSIZE) {
+			int padding = MINSIZE - index.length();
+			for (int i = 0; i < padding; i++) {
+				index = "0" + index; //$NON-NLS-1$
+			}
+		}
+		return index;
+	}
+
+	/**
+	 * Get the index padded with as many leftmost zeroes as necessary. Special
+	 * case for the USA : at most three characters insteadd
+	 * 
+	 * @return the index padded with leftmost zeroes
+	 */
+	public String getFormattedIndexUSA() {
+		final int MINSIZE = 3;
+		if (index.length() < MINSIZE) {
+			int padding = MINSIZE - index.length();
+			for (int i = 0; i < padding; i++) {
+				index = "0" + index; //$NON-NLS-1$
+			}
+		}
+		return index;
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MapReader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MapReader.java
new file mode 100644
index 0000000..14f0a45
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MapReader.java
@@ -0,0 +1,248 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+//import com.bbn.openmap.dataAccess.shape.EsriGraphicList;
+//import com.bbn.openmap.dataAccess.shape.EsriPolygon;
+//import com.bbn.openmap.dataAccess.shape.EsriPolygonList;
+//import com.bbn.openmap.dataAccess.shape.input.DbfInputStream;
+//import com.bbn.openmap.dataAccess.shape.input.ShpInputStream;
+//import com.bbn.openmap.dataAccess.shape.input.ShxInputStream;
+//import com.bbn.openmap.omGraphics.OMPoly;
+
+/**
+ * STEM II Data Migration/Generation Utilities - This class reads ESRI shape
+ * files and converts each of them into a plain text file as output.
+ */
+public class MapReader {
+
+	PrintWriter pw;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param outFile
+	 *            the output file
+	 */
+	public MapReader(String outFile) {
+
+		try {
+			this.pw = new PrintWriter(new FileWriter(outFile));
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+			return;
+		} catch (IOException e) {
+			e.printStackTrace();
+			return;
+		}
+	}
+
+	/**
+	 * read in a given directory
+	 * 
+	 * @param dir
+	 *            the directory we want to read
+	 */
+	public void readDirectory(String dir) {
+		try {
+
+			File f = new File(dir);
+			File[] files = f.listFiles();
+
+			int counter = 0;
+
+			String shpFile = null;
+			String dbfFile = null;
+			String shxFile = null;
+
+			for (int i = 0; i < files.length; i++) {
+				if (files[i].isDirectory())
+					readDirectory(files[i].getAbsolutePath());
+				String name = files[i].getName();
+				name = name.toLowerCase();
+
+				if (name.indexOf(".shp") != -1 && shpFile == null) { //$NON-NLS-1$
+					shpFile = files[i].getAbsolutePath();
+					counter++;
+				} else if (name.indexOf(".dbf") != -1 && dbfFile == null) { //$NON-NLS-1$
+					dbfFile = files[i].getAbsolutePath();
+					counter++;
+				} else if (name.indexOf(".shx") != -1 && shxFile == null) { //$NON-NLS-1$
+					shxFile = files[i].getAbsolutePath();
+					counter++;
+				} else {
+					// Ignore .txt and any other kind of files in this folder
+					continue;
+				}
+
+				if (counter == 3) {
+					readFile(shpFile, shxFile, dbfFile);
+					counter = 0;
+					shpFile = null;
+					dbfFile = null;
+					shxFile = null;
+				}
+
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Read a ESRI shape file
+	 * 
+	 * @param shpFile
+	 *            main shape file
+	 * @param shxFile
+	 *            index file
+	 * @param dbfFile
+	 *            dBase table
+	 */
+	public void readFile(String shpFile, String shxFile, String dbfFile) {
+
+		System.out.println("shpFile is : " + shpFile); //$NON-NLS-1$
+		System.out.println("shxFile is : " + shxFile); //$NON-NLS-1$
+		System.out.println("dbfFile is : " + dbfFile); //$NON-NLS-1$
+
+//		try {
+//			ArrayList aRecord = null;
+//			FileInputStream shpFis = new FileInputStream(shpFile);
+//			FileInputStream shxFis = new FileInputStream(shxFile);
+//			FileInputStream dbfFis = new FileInputStream(dbfFile);
+//
+//			DbfInputStream dbfIs = new DbfInputStream(dbfFis);
+//			// String names[] = dbfIs.getColumnNames();
+//			ArrayList records = dbfIs.getRecords();
+//			dbfFis.close();
+//
+//			// Get the index.
+//			ShxInputStream shxIs = new ShxInputStream(shxFis);
+//			int[][] offSets = shxIs.getIndex();
+//
+//			// Get the shape data
+//			ShpInputStream sis = new ShpInputStream(shpFis);
+//			EsriGraphicList egl = sis.getGeometry(offSets);
+//
+//			// System.out.println("Size="+egl.size());
+//
+//			for (int i = 0; i < offSets[0].length; i++) {
+//
+//				/*
+//				 * try{ com.bbn.openmap.dataAccess.shape.EsriPolyline polyLine =
+//				 * null; polyLine =
+//				 * (com.bbn.openmap.dataAccess.shape.EsriPolyline)egl.getOMGraphicAt(i);
+//				 * aRecord = (ArrayList)records.get(i);
+//				 * 
+//				 * for (int j=0;j<aRecord.size();j++){ if (j>0) pw.print(",");
+//				 * pw.print(aRecord.get(j)); }
+//				 * 
+//				 * float latlon[] = polyLine.getLatLonArray(); for (int j=0;j<latlon.length;j++){
+//				 * pw.print(","+latlon[j]); } pw.println(); } catch(
+//				 * java.lang.ClassCastException e ){ e.printStackTrace(); }
+//				 */
+//
+//				try {
+//					OMPoly espg = (EsriPolygon) egl.getOMGraphicAt(i);
+//					aRecord = (ArrayList) records.get(i);
+//
+//					for (int j = 0; j < aRecord.size(); j++) {
+//
+//						if (this.pw == null) {
+//							System.out.println("PrintWriter is null !"); //$NON-NLS-1$							
+//							return;
+//						}
+//
+//						if (j > 0)
+//							this.pw.print(","); //$NON-NLS-1$
+//						this.pw.print(aRecord.get(j));
+//					}
+//
+//					float latlon[] = espg.getLatLonArray();
+//					for (int j = 0; j < latlon.length; j++) {
+//						this.pw.print("," + latlon[j]); //$NON-NLS-1$
+//					}
+//					this.pw.println();
+//
+//				} catch (ClassCastException e) {
+//
+//					EsriPolygonList epl = (EsriPolygonList) egl
+//							.getOMGraphicAt(i);
+//					for (int j = 0; j < epl.size(); j++) {
+//
+//						EsriPolygon espg = (EsriPolygon) epl.getOMGraphicAt(j);
+//
+//						aRecord = (ArrayList) records.get(i);
+//						for (int q = 0; q < aRecord.size(); q++) {
+//							if (q > 0)
+//								this.pw.print(","); //$NON-NLS-1$
+//							this.pw.print(aRecord.get(q));
+//						}
+//
+//						float latlon[] = espg.getLatLonArray();
+//						for (int q = 0; q < latlon.length; q++) {
+//							this.pw.print("," + latlon[q]); //$NON-NLS-1$
+//						}
+//
+//						this.pw.println();
+//
+//					} // for
+//
+//				} // catch
+//
+//			} // for
+//
+//			shxIs.close();
+//
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+
+	} // readfile
+
+	/**
+	 * Close the writer
+	 * 
+	 */
+	public void closeFile() {
+		this.pw.close();
+	}
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		final int ESRI_FILE = 0;
+		final int OUTPUT_FILE = 1;
+
+		if (args.length < 2) {
+			System.out
+					.println("Wrong arguments. Provide ESRI file and output filename."); //$NON-NLS-1$
+			return;
+		}
+
+		MapReader mr = new MapReader(args[OUTPUT_FILE]);
+		mr.readDirectory(args[ESRI_FILE]);
+		mr.closeFile();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MatchProfiler.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MatchProfiler.java
new file mode 100644
index 0000000..d27d7ee
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MatchProfiler.java
@@ -0,0 +1,538 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class were
+ * used at some intermediate point to find matches with missing identifiers. It
+ * had a short period of useful life.
+ * 
+ * To run add the following parameters to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\Countries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\match\matchList.txt
+ * 
+ */
+
+public class MatchProfiler {
+
+	private String ciaData = null;
+
+	private String targetFile = null;
+
+	private String matchFile = null;
+
+	private String iso3166_1 = null;
+
+	/**
+	 * Lists for population data.
+	 */
+
+	List targetList = null;
+
+	List populationList = null;
+
+	List matchList = null;
+
+	List areaList = null;
+
+	List codeList = null;
+
+	/**
+	 * String used to indicate default value for unknown locations.
+	 */
+	String DEFAULT = "0"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param ciaData -
+	 *            the directory containing population data for all countries
+	 * @param targetFile -
+	 *            the list of countries to process
+	 * @param matchFile -
+	 *            the list of locations already matched
+	 * 
+	 */
+	public MatchProfiler(String iso3166_1, String ciaData,
+			String targetFile, String matchFile) {
+		// Set values of global variables.
+		this.iso3166_1 = iso3166_1;
+		this.targetFile = targetFile;
+		this.matchFile = matchFile;
+		this.ciaData = ciaData;
+	}
+
+	/**
+	 * Run the generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Load the list of matched locations
+		matchList = GenUtils.populateList(matchFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its population.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		final int LOCATION = 0;
+
+		final int LEVEL = 1;
+
+		int size = targetList.size();
+
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+	
+			String country = extractCountryName(file);
+
+			// Get the ISO3166-1 info for this
+			// country
+			if (isoCode == null) {
+				isoCode = GenUtils.getISOCode(country, codeList);
+			}
+
+			// Read and keep in memory a list of the population data
+			// for this country.
+			if (populationList == null) {
+				String name = ciaData + country + "_POPULATION.txt"; //$NON-NLS-1$
+				populationList = GenUtils.populateList(name);
+			}
+
+			// Now load the area data for this country.
+			if (areaList == null) {
+				String name = ciaData + country + "_AREA.txt"; //$NON-NLS-1$
+				areaList = GenUtils.populateList(name);
+			}
+
+			// Iterate through all of the population list trying to
+			// find a
+			// location that hasnt been matched already.
+			// If a location does not have a match, print it.
+			Iterator it = populationList.iterator();
+
+			while (it.hasNext()) {
+
+				String[] data = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+				if (country.equals(data[LOCATION].toUpperCase()) == false
+						&& findMatch(data[LOCATION].toUpperCase().trim()) == false
+						&& data[LEVEL].trim().equals("1")) { //$NON-NLS-1$
+					// output info about this location in the format
+					// location, area, population
+					String population = getPopulation(data[LOCATION], country,
+							1);
+					String area = getArea(data[LOCATION], country, 1);
+					System.out.println(country + "," + data[LOCATION] + "," //$NON-NLS-1$ //$NON-NLS-2$
+							+ area + "," + population); //$NON-NLS-1$
+				}
+
+			}
+
+			// We dont need the ISO code object for this country
+			// anymore, we are done processing it.
+			isoCode = null;
+
+			// Reset the population list
+			if (populationList != null) {
+				populationList.clear();
+				populationList = null;
+			}
+
+			// Reset the area list
+			if (areaList != null) {
+				areaList.clear();
+				areaList = null;
+			}
+
+			// Run garbage collection
+			System.gc();
+
+		} // For loop
+
+	}
+
+	/**
+	 * Extract the country name from the file name. Useful utility method.
+	 * 
+	 * @param file
+	 *            a filename.
+	 * 
+	 * @return the country name embedded in the filename.
+	 */
+	String extractCountryName(String file) {
+
+		int separator = file.lastIndexOf("\\"); //$NON-NLS-1$
+
+		int dot = file.lastIndexOf("."); //$NON-NLS-1$
+
+		String substring = file.substring(separator + 1, dot);
+
+		return substring.toUpperCase();
+	}
+
+	/**
+	 * Find if a given location has been matched already.
+	 * 
+	 * @param a
+	 *            location
+	 * 
+	 * @return whether a match is found or not for the location.
+	 */
+	protected boolean findMatch(String location) {
+
+		final int LOCATION = 1;
+
+		Iterator it = matchList.iterator();
+
+		while (it.hasNext()) {
+
+			String[] data = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			String entity = data[LOCATION];
+
+			String locationStr = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			locationStr = locationStr.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (locationStr.contains("[")) { //$NON-NLS-1$
+
+				locationStr = locationStr.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(locationStr, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entity.replace("-", " ").equals(compare[i]) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entity + "-1")) { //$NON-NLS-1$
+						return true;
+					}
+
+				}
+			} else if (entity.equals(location)
+					|| entity.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entity + "-1")) { //$NON-NLS-1$
+
+				return true;
+			}
+
+			// if (data[LOCATION].toUpperCase().trim().equals(location)) {
+			// return true;
+			// }
+		}
+
+		return false;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location.
+	 * 
+	 * @return the population of a location (if found).
+	 */
+	protected String getPopulation(String entity, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase();
+
+		while (it.hasNext()) {
+
+			String[] popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			if (entityStr.equals(popData[ENTITY].trim().toUpperCase())) {
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+			}
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location
+	 * 
+	 * @param entityContainer
+	 *            a container (i.e. level 1 adminitratiion) for the location
+	 * 
+	 * 
+	 * @return the population of the location
+	 */
+	protected String getPopulation(String entity, String entityContainer,
+			int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		String[] popData = null;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String entityContainerStr = entityContainer.toUpperCase();
+
+		while (it.hasNext()) {
+
+			popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = popData[ENTITY];
+
+			location = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						// Check both entities belong to same level
+						if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+							// Ignore : same name , but different level
+							continue;
+						}
+
+						return popData[POPULATION].trim();
+
+					}
+
+				}
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the area value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location
+	 * 
+	 * @param entityContainer
+	 *            a container (i.e. level 1 adminitratiion) for the location
+	 * 
+	 * @param level
+	 *            the administrative level.
+	 * 
+	 * @return the area of the location
+	 */
+	protected String getArea(String entity, String entityContainer, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int AREA = 2;
+
+		String[] areaData = null;
+
+		Iterator it = areaList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String entityContainerStr = entityContainer.toUpperCase();
+
+		while (it.hasNext()) {
+
+			areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = areaData[ENTITY];
+
+			location = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						// Check both entities belong to same level
+						if (String.valueOf(level)
+								.equals(areaData[LEVEL].trim()) == false) {
+							// Ignore : same name , but different level
+							continue;
+						}
+
+						return areaData[AREA].trim();
+					}
+
+				}
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(areaData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return areaData[AREA].trim();
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 * 
+	 */
+	public static void main(String[] args) {
+		final int ISO_3166_1 = 0;
+		final int CIA_DATA = 1;
+		final int TARGET_LIST = 2;
+		final int MATCHES = 3;
+		final int PARAMS = 4;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$
+			System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+			System.out.println("\t\t CIA data"); //$NON-NLS-1$			
+			System.out.println("\t\t Target countries file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$					
+			return;
+		}
+
+		MatchProfiler profiler = new MatchProfiler(args[ISO_3166_1],
+				args[CIA_DATA], args[TARGET_LIST], args[MATCHES]);
+		profiler.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Messages.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Messages.java
new file mode 100644
index 0000000..53c7bef
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/Messages.java
@@ -0,0 +1,45 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 
+ * Autogenerated class
+ * 
+ */
+public class Messages {
+	private static final String BUNDLE_NAME = "org.eclipse.stem.utility.generators.messages"; //$NON-NLS-1$
+
+	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+			.getBundle(BUNDLE_NAME);
+
+	private Messages() {
+		// Nothing here
+	}
+
+	/**
+	 * Returns the externalized string literal.
+	 * 
+	 * @param key
+	 * @return the externalized string literal.
+	 */
+	public static String getString(String key) {
+		try {
+			return RESOURCE_BUNDLE.getString(key);
+		} catch (MissingResourceException e) {
+			return '!' + key + '!';
+		}
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MultiPassDownSampler.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MultiPassDownSampler.java
new file mode 100644
index 0000000..284b450
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/MultiPassDownSampler.java
@@ -0,0 +1,1869 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this class are
+ * used to run a point-reduction algorithm on the Diva set.
+ * 
+ * 
+ * NOTE: MULTI PASS DOWN SAMPLER is used for iterations two and beyond. For
+ * first or single iteration always use single pass down sampler.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/MultiPassDownSampler.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\MultiPassDownSampler.config)
+ * 
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ * 
+ */
+public class MultiPassDownSampler {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String threshold = null;
+
+	private String iterations = null;
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String inputDir = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	private String usaDescriptorFile = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List usaDescriptorList = null;
+
+	/**
+	 * List to keep track of pairs (PointDava:Value)
+	 */
+	List<String> pointDataList = null;
+
+	/**
+	 * A flag that indicates whether we can delete a point.
+	 */
+	// No, it is not safe to remove this node.
+	final String UNSAFE = "0"; //$NON-NLS-1$
+
+	// Yes, it can be deleted.
+	final String SAFE = "1"; //$NON-NLS-1$
+
+	// Safety state not known yet -> initial value.
+	final String UNKNOWN = "2"; //$NON-NLS-1$
+
+	/**
+	 * Used for global stats.
+	 */
+	double totalPoints = 0;
+
+	double totalRemoved = 0;
+
+	double totalPolygons = 0;
+
+	double globalMinPercent = Double.MAX_VALUE;
+
+	double globalMaxPercent = 0.0;
+
+	double globalPercent = 0.0;
+
+	/**
+	 * Lists to keep track of the occurences of values of the angles : 180 -
+	 * ArcCos(teta)
+	 * 
+	 */
+	HashMap<Double, Integer> angleValueMap = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param threshold -
+	 *            the threshold in degress
+	 * @param iterations -
+	 *            the total number of down sampling iterations
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            data file with the ISO3166-2 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile
+	 *            the list of countries for which we will generate GML files
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir
+	 *            the output directory for the GML files we generate
+	 */
+	// public MultiPassDownSampler(String threshold, String iterations,
+	// String iso3166_1, String iso3166_2, String fixFile,
+	// String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.threshold = threshold;
+	// this.iterations = iterations;
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// // For the moment and for convenience, the input dir is also the output
+	// // dir.
+	// this.inputDir = outputDir;
+	// targetList = null;
+	// angleValueMap = new HashMap<Double, Integer>();
+	// this.usaDescriptorFile = workspace
+	// + "\\org.eclipse.stem.utility\\parameters\\ISOFIX\\USA_FIPS.txt";
+	// //$NON-NLS-1$
+	// }
+	/**
+	 * @param configFile
+	 */
+	public MultiPassDownSampler(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("THRESHOLD")) { //$NON-NLS-1$
+				threshold = vars.get(var);
+			} else if (var.equals("ITERATIONS")) { //$NON-NLS-1$
+				iterations = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST") || var.equals("REDUCE_LIST")) { //$NON-NLS-1$ //$NON-NLS-2$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("MAP_OUTPUT") || var.equals("OUTPUT")) { //$NON-NLS-1$ //$NON-NLS-2$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (threshold == null) {
+			threshold = GenConstants.DEFAULT_THRESHOLD; // Defaults to 5 degrees
+		}
+		if (iterations == null) {
+			iterations = GenConstants.DEFAULT_ITERATIONS; // Defaults to 5
+			// iterations
+		}
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.REDUCE_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+
+		if (GenUtils.verifyOutputDirectory(vars) == false) {
+			System.out
+					.println("\t\tBad configuration file -- OUTPUT variable not found. Please specify output directory using format VAR = VALUE (i.e. OUTPUT = C:\\diva\\grouped\\ "); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		// For the moment and for convenience, the input dir is also the output
+		// dir.
+		this.inputDir = outputDir;
+		targetList = null;
+		angleValueMap = new HashMap<Double, Integer>();
+		this.usaDescriptorFile = path + GenConstants.USA_FIPS_FILE;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Load the list of descriptors for the USA (special case)
+		usaDescriptorList = GenUtils.populateList(usaDescriptorFile);
+
+		// Initialize the hash map
+		initHashMap(angleValueMap);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Initialize the hash map.
+	 * 
+	 * @param map -
+	 *            the hash map
+	 * 
+	 */
+	public void initHashMap(HashMap<Double, Integer> map) {
+		// Add some keys/values to our hash map
+		map.put(new Double(90.0), new Integer(0));
+		map.put(new Double(45.0), new Integer(0));
+		map.put(new Double(22.5), new Integer(0));
+		map.put(new Double(11.25), new Integer(0));
+		map.put(new Double(5.5125), new Integer(0));
+		map.put(new Double(2.0), new Integer(0));
+		map.put(new Double(1.5), new Integer(0));
+		map.put(new Double(1.0), new Integer(0));
+		map.put(new Double(0.75), new Integer(0));
+		map.put(new Double(0.5), new Integer(0));
+		map.put(new Double(0.25), new Integer(0));
+		map.put(new Double(0.15), new Integer(0));
+		map.put(new Double(0.05), new Integer(0));
+	}
+
+	/**
+	 * Perform the second iteration of down sampling and beyond.
+	 * 
+	 * NOTE: We assume that SinglePassDownSampler has been run once already.
+	 * 
+	 */
+	protected void process() {
+
+		// The initial pass : first pass already done by SinglePassDownSampler
+		final int INIT = 2;
+
+		// The current pass or iteration
+		int pass = INIT;
+
+		// The total number of iterations
+		int totalIterations = Integer.parseInt(iterations);
+
+		// A writer for the new file we are creating.
+		PrintWriter gmlFile = null;
+
+		// A writer for the reduced data file.
+		PrintWriter reducedFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Alpha 3 code for the next code to process...
+		String countryAlpha3 = null;
+
+		// Iterate for every country and create its GML data file.
+		int i = 0;
+
+		// Get the first country in list.
+		countryAlpha3 = ((String) targetList.get(i)).trim();
+
+		if (countryAlpha3 == null) {
+			System.out.println("\t\tError : alpha 3 country code is null."); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		while (i < size) {
+
+			// Is it time to process the next country ?
+			if (pass > totalIterations) {
+				// Yes , we are done with the iterations , go to next.
+				i++;
+				pass = INIT;
+				countryAlpha3 = (i < size) ? ((String) targetList.get(i))
+						.trim() : "DUMMY"; //$NON-NLS-1$
+				continue;
+			}
+
+			// Keep with the same country until we are done with the total
+			// number of passes. Otherwise, get the next country in reduce list.
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// We use this list to keep track of duplicated polygons.
+			List<STEMPolygon> polygons = null;
+
+			// Data source
+			fileName = inputDir + countryAlpha3 + "\\" + countryAlpha3 //$NON-NLS-1$
+					+ "_REDUCED_" + (pass - 1) + ".txt"; //$NON-NLS-1$ //$NON-NLS-2$
+
+			BufferedReader reader = GenUtils.openReader(fileName);
+			System.out
+					.println("\t\t<<<< MULTI PASS DOWN-SAMPLER -- Processing country : " + fileName + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			System.out
+					.println("\t\t<<<< Pass " + pass + " of " + totalIterations //$NON-NLS-1$ //$NON-NLS-2$
+							+ ">>>>"); //$NON-NLS-1$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous type.
+					int oldlevel = level - 1;
+
+					// Used to distinguish between a simple polygon and islands
+					// of polygons. Initialize string to the blank character.
+					String island = " "; //$NON-NLS-1$
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// The data we want to write to the new GML file.
+						String output = " "; //$NON-NLS-1$
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX]
+						// to make processsing more
+						// efficient, we dont need all of it.
+						int BUFFER_MIN = 0;
+						int BUFFER_MAX = 125;
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Get the type of the data we are processing.
+						level = GenUtils.getLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+							// Use previous level to detect transitions.
+							oldlevel = level;
+
+							// Reset the previous entity
+							island = " "; //$NON-NLS-1$
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							// Close the previous file
+							if (gmlFile != null) {
+								output = closePolygonIslandTags();
+								output += getClosingTags();
+								GenUtils.addData(gmlFile, output);
+								gmlFile.close();
+							}
+
+							// Clear the list of unique polygons
+							if (polygons != null) {
+								polygons.clear();
+							}
+
+							// Get a new, empty polygon list
+							polygons = new ArrayList<STEMPolygon>();
+
+							// If the directory does not exist for this country,
+							// create it using ISO alpha3 code.
+							File countryDir = new File(outputDir
+									+ isoCode.getAlpha3());
+
+							if (countryDir != null
+									&& countryDir.exists() == false) {
+								// Directory does not exist. Create it.
+								countryDir.mkdir();
+							}
+
+							// Open the writer for the reduced data file
+							if (reducedFile == null) {
+								// Create proper name for the reduced data file.
+								fileName = countryDir + "\\" //$NON-NLS-1$
+										+ isoCode.getAlpha3() + "_REDUCED_" //$NON-NLS-1$
+										+ pass + ".txt"; //$NON-NLS-1$
+								reducedFile = GenUtils.openWriter(fileName);
+							}
+
+							// //Create the file name for the reduced GML file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_REDUCED_MAP_" + pass //$NON-NLS-1$ //$NON-NLS-2$									
+									+ ".xml"; //$NON-NLS-1$
+
+							// Create the file name for the reduced GML file.
+							// fileName = countryDir + "\\" +
+							// isoCode.getAlpha3() //$NON-NLS-1$
+							// + "_" + level + "_MAP" //$NON-NLS-1$
+							// //$NON-NLS-2$
+							// + ".xml"; //$NON-NLS-1$
+
+							// Open the writer for the new GML file
+							gmlFile = GenUtils.openWriter(fileName);
+
+							// Add the header of the file
+							output = getOpeningTags(isoCode, level);
+
+							// Write data
+							GenUtils.addData(gmlFile, output.trim());
+
+						} // if( transition == true )
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							current = isoCode.getAlpha3();
+							break;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex1Object to which lex2Current belongs
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								// STEP 2: piece together the ID using the
+								// proper lex objects : the USA is a special
+								// case
+								descriptor = GenUtils.getUSADescriptor(
+										lex2Current.getAdmin2(), GenUtils
+												.extractAlpha2(lex1Current
+														.getDescriptor()),
+										usaDescriptorList);
+
+							} else {
+								// STEP 2: piece together the ID using the
+								// proper lex objects.
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+							}
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else {
+							// Compose descriptor for l 1 and l 0 data
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+							}
+
+						}
+
+						// System.out.println("Descriptor is : " + descriptor
+						// + " at level : " + level + " for " + current);
+
+						// Create a STEM polygon with this polygon data
+						STEMPolygon polygon = new STEMPolygon(buffer, level);
+
+						// Check that this is indeed a STEM polygon
+						if (isPolygon(polygon) != true) {
+							// Not a polygon, ignore.
+							continue;
+						}
+
+						// Compute a map of angle values.
+						List<String> pointDataList = computeInverseCosines(polygon);
+
+						// Now apply reduction : get rid of all points with
+						// angles less than or equal to alpha degrees
+						double alpha = Double.parseDouble(threshold);
+						List<String> reducedPointDataList = reduce(alpha,
+								pointDataList);
+
+						// Update Global Stats
+						updateGlobalStats(pointDataList.size(),
+								reducedPointDataList.size());
+
+						// Show some of the stats after each reduction.
+						// showStats(pointDataList, reducedPointDataList, pass);
+
+						// Put all the remaining points into a new buffer
+						String reducedPolygonDataBuffer = extractListIntoString(reducedPointDataList);
+
+						// Reconstruct a buffer with the reduced point-data.
+
+						// Extract all data from old buffer except the polygon
+						// data :
+						String nonPolygonDataBuffer = extractNonPolygonData(
+								buffer.length() < BUFFER_MAX ? buffer : buffer
+										.substring(BUFFER_MIN, BUFFER_MAX),
+								level);
+
+						// Now put together a new buffer which has been reduced
+						String reducedBuffer = nonPolygonDataBuffer
+								+ reducedPolygonDataBuffer + "\n"; //$NON-NLS-1$
+
+						// Write reduced data buffer into the reduced data file
+						GenUtils.addData(reducedFile, reducedBuffer);
+
+						// Delete the old polygon
+						polygon.clear();
+
+						// Create a new, reduced STEM polygon with the new data
+						// buffer
+						polygon = new STEMPolygon(reducedPolygonDataBuffer,
+								level);
+
+						// We know it is a polygon, but now check that its not
+						// duplicated.
+						if (isPolygonDuplicated(polygons.iterator(), polygon) == true) {
+							// Yes, it is duplicated
+							continue;
+						}
+
+						// Add this polygon to our list of unique polygons so
+						// that we can check duplicates of this polygon later.
+						polygons.add(polygon);
+
+						// Check to see if this polygon is part of an island of
+						// polygons or a simple polygon
+						if (level == 0) {
+							// If we are at admin level 0 and island is not
+							// NULL, then we have an island.
+							if (island.equals(" ")) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								island = "Admin Level 0"; //$NON-NLS-1$
+							}
+							output += addLinearRingTags(reducedBuffer, level);
+						} else {
+
+							if (island.equals(" ") == true) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								output += addLinearRingTags(reducedBuffer,
+										level);
+
+							} else {
+
+								if (current.equals(island) == false) {
+									output = closePolygonIslandTags();
+									output += openPolygonIslandTags(descriptor);
+									output += addLinearRingTags(reducedBuffer,
+											level);
+								} else {
+									output = addLinearRingTags(reducedBuffer,
+											level);
+									GenUtils.addData(gmlFile, output.trim());
+									continue;
+								}
+							}
+
+							switch (level) {
+
+							case DataTypes.LEVEL_1:
+								island = items[ISOData.ADMIN1_NAME]
+										.toUpperCase();
+								break;
+
+							case DataTypes.LEVEL_2:
+								island = items[ISOData.ADMIN2_NAME]
+										.toUpperCase();
+								break;
+							}
+						}
+
+						GenUtils.addData(gmlFile, output.trim());
+
+					} // while loop
+
+					// Reset all lex-related items
+
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (gmlFile != null) {
+						// Write formatted output
+						GenUtils.addData(gmlFile, closePolygonIslandTags());
+						GenUtils.addData(gmlFile, getClosingTags());
+						gmlFile.close();
+						gmlFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					if (reducedFile != null) {
+						reducedFile.close();
+						reducedFile = null;
+					}
+
+					// Increase the pass counter.
+					pass++;
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+				// Show global stats for this pass
+				showGlobalStats();
+
+				// Now clear them before next iteration
+				resetGlobalStats();
+
+				// Now clear the hash map
+				initHashMap(angleValueMap);
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * Extract all non polygon data from the buffer. Amount of non - polygon
+	 * data varies according to level.
+	 * 
+	 * @param buffer
+	 *            a buffer of diva data.
+	 * 
+	 * @param level
+	 *            administrative level
+	 * 
+	 * @return String all the non-polygon data.
+	 */
+	public String extractNonPolygonData(String buffer, int level) {
+
+		int offset = 0;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+
+		}
+
+		// first occurrence of the comma separator
+		int beginIndex = buffer.indexOf(","); //$NON-NLS-1$
+		int endIndex = beginIndex;
+
+		int i = 1;
+
+		while (i < offset) {
+			endIndex = buffer.indexOf(",", beginIndex + 1); //$NON-NLS-1$
+			beginIndex = endIndex;
+			i++;
+		}
+
+		beginIndex = 0;
+
+		// extract the sequence up to index
+		return buffer.substring(beginIndex, endIndex + 1);
+
+	}
+
+	/**
+	 * Find and show the differences between the normal point-data list and the
+	 * reduced point-data list.
+	 * 
+	 * @param normalList -
+	 *            a list with the original point data.
+	 * 
+	 * @param reducedList -
+	 *            a list with the reduced point data.
+	 * 
+	 * @param pass -
+	 *            the current pass or iteration.
+	 * 
+	 */
+	public void showStats(List<String> normalList, List<String> reducedList,
+			int pass) {
+
+		// double normalSize = normalList.size();
+		// double reducedSize = reducedList.size();
+		// double dif = normalSize - reducedSize;
+		// double ratio = dif / normalSize;
+		// double percent = ratio * 100.0;
+
+		System.out.println("\t\t************ DOWN SAMPLING STATS FOR " + pass //$NON-NLS-1$
+				+ " ITERATION ************\n"); //$NON-NLS-1$
+
+		// Create and print profile of the angle values
+		System.out.println("\t\tProfiling results BEFORE reduction : \n\n"); //$NON-NLS-1$
+
+		profile(normalList);
+		showProfile();
+
+		// System.out.println("Total points in original polygon : "
+		// + normalList.size());
+		// System.out.println("Total points in reduced polygon : "
+		// + reducedList.size());
+		// System.out.println("Total points marked for deletion : " + dif);
+		//
+		// System.out.println("Percentage of reduction : " + percent + "%");
+		//
+		System.out.println("\t\tProfiling results AFTER reduction : \n\n"); //$NON-NLS-1$
+
+		profile(reducedList);
+		showProfile();
+
+	}
+
+	/**
+	 * Clear the global stats (between every iteration)
+	 */
+	public void resetGlobalStats() {
+
+		totalPoints = 0;
+
+		totalRemoved = 0;
+
+		totalPolygons = 0;
+
+		globalMinPercent = Double.MAX_VALUE;
+
+		globalMaxPercent = 0.0;
+
+		globalPercent = 0.0;
+
+	}
+
+	/**
+	 * Update global stats.
+	 * 
+	 * @param normalSize -
+	 *            the total number of points before reduction
+	 * 
+	 * @param reducedSize -
+	 *            the total number of points after reduction
+	 * 
+	 */
+	public void updateGlobalStats(double normalSize, double reducedSize) {
+
+		double dif = normalSize - reducedSize;
+		double ratio = dif / normalSize;
+		double percent = ratio * 100.0;
+
+		globalMinPercent = (globalMinPercent > percent) ? percent
+				: globalMinPercent;
+
+		globalMaxPercent = (globalMaxPercent < percent) ? percent
+				: globalMaxPercent;
+
+		globalPercent += percent;
+
+		totalPoints += normalSize;
+
+		totalRemoved += reducedSize;
+
+		totalPolygons += 1;
+
+	}
+
+	/**
+	 * Print the global stats
+	 */
+	public void showGlobalStats() {
+
+		System.out.println("\t\t************** GLOBAL STATS **************"); //$NON-NLS-1$
+
+		System.out.println("\t\tTotal polygons : " + totalPolygons); //$NON-NLS-1$
+
+		System.out.println("\t\tTotal points : " + totalPoints); //$NON-NLS-1$
+
+		System.out.println("\t\tAvg points per polygon : " + totalPoints //$NON-NLS-1$
+				/ totalPolygons);
+
+		System.out.println("\t\tGlobal reduction : " + globalPercent //$NON-NLS-1$
+				/ totalPolygons + "%"); //$NON-NLS-1$
+
+		System.out
+				.println("\t\tGlobal MIN reduction  : " + globalMinPercent + "%"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		System.out
+				.println("\t\tGlobal MAX reduction  : " + globalMaxPercent + "%"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	}
+
+	/**
+	 * Just print the profile for the polygon point-data
+	 * 
+	 */
+	public void showProfile() {
+
+		// Create a profile
+		// profile(angleValueMap);
+
+		// Sort the keys
+		Set<Double> keys = angleValueMap.keySet();
+		List<Double> sortedKeys = new ArrayList<Double>(keys);
+		Collections.sort(sortedKeys);
+
+		System.out.println("\t\tFrequencies of angles :  "); //$NON-NLS-1$
+
+		// Print the number of occurrences for each value
+		Iterator keyIter = sortedKeys.iterator();
+		while (keyIter.hasNext()) {
+
+			// Get the key
+			Double key = (Double) keyIter.next();
+
+			// Get the value
+			int val = (angleValueMap.get(key)).intValue();
+
+			System.out.println("\t\t Angle >= " + key + " Frequency : " + val); //$NON-NLS-1$ //$NON-NLS-2$
+
+		}
+
+	}
+
+	/**
+	 * Algorithm for reducing the data by marking and then removing (nearly) all
+	 * points with angle less than alpha. All points marked for deletion are
+	 * called SAFE.
+	 * 
+	 * @param alpha -
+	 *            the threshold
+	 * @param list -
+	 *            a list containing extended point data of the form :
+	 *            INDEX:LT:LG:ANGLE:SAFETY
+	 * 
+	 * @return list - a reduced list of points that should not be deleted
+	 *         because they dont meet the criteria (i.e. their angle is greater
+	 *         than threshold or were marked as UNSAFE)
+	 * 
+	 */
+	public List<String> reduce(double alpha, List<String> list) {
+
+		/**
+		 * Remove all points which are safe to remove.
+		 * 
+		 * To be safe, a point should satisfy two conditions :
+		 * 
+		 * 1) Have an angle with value less than alpha degress.
+		 * 
+		 * 2) We CANNOT mark SAFE for deletion two consecutive points.
+		 * 
+		 */
+
+		// This list will contain only the elements that we should not remove
+		List<String> reducedList = new ArrayList<String>();
+
+		// Symbolic constants for controlling the sliding window algorithm
+		final int START = 0;
+		final int WINDOW_LENGTH = 2;
+
+		// Multiplier to obtain minimum lenght at which makes sense to run this
+		// algorithm:
+		final int MULTIPLIER = 1;
+
+		// MINIMUM LENGTH = MULTIPLIER * (WINDOW_LENGTH + 1)
+		final int MINIMUM_LENGTH = MULTIPLIER * (WINDOW_LENGTH + 1);
+
+		// Indexes into the string containing extended point data:
+		// INDEX:LT:LG:ANGLE:SAFETY
+		final int INDEX = 0;
+		final int LT = 1;
+		final int LG = 2;
+		final int ANGLE = 3;
+		final int SAFETY = 4;
+
+		// Our sliding window covers exactly three nodes.
+		String[] p1 = null;
+		String[] p2 = null;
+		String[] p3 = null;
+
+		// Angle values for each of the three points in the sliding window.
+		double a1 = 0.0;
+		double a2 = 0.0;
+		double a3 = 0.0;
+
+		// State (SAFE or UNSAFE) of each of three points in the sliding window.
+		String s1 = UNKNOWN;
+		String s2 = UNKNOWN;
+		String s3 = UNKNOWN;
+
+		// A pointer to the beginning and the end of the sliding window.
+		int left_border = 0;
+		int right_border = left_border + WINDOW_LENGTH;
+
+		// Our current position within the sliding window.
+		int index = START;
+
+		if (list.size() < MINIMUM_LENGTH) {
+			// There is no point in running this algorithm if points
+			// less than minimum value. No need to reduce.
+			return list;
+		}
+
+		final int END = list.size() - 1;
+
+		// System.out.println("List size is : " + end);
+
+		while (right_border <= END) {
+
+			// UNKNOWN == NOT YET PROCESSED -- Eventually it will be marked
+			// either SAFE or UNSAFE
+
+			boolean flag = false;
+
+			// if (p1 == null) {
+			// Get the three initial points covered by our sliding window.
+			index = left_border;
+			p1 = list.get(index++).split(":"); //$NON-NLS-1$
+			p2 = list.get(index++).split(":"); //$NON-NLS-1$
+			p3 = list.get(index).split(":"); //$NON-NLS-1$
+			// }
+
+			// Now get the angle value for each of the three points.
+			a1 = Double.parseDouble(p1[ANGLE]);
+			a2 = Double.parseDouble(p2[ANGLE]);
+			a3 = Double.parseDouble(p3[ANGLE]);
+
+			// Now get the state of each of the three points.
+			s1 = p1[SAFETY];
+			s2 = p2[SAFETY];
+			s3 = p3[SAFETY];
+
+			// Check to see if the initial, leftmost point is greater than
+			// alpha or if it is UNSAFE. If so, then slide forward the window.
+			if (a1 > alpha) {
+				// Just slide forward the window one unit.
+				left_border += 1;
+				right_border += 1;
+				continue;
+			}
+
+			if (s1.equals(UNSAFE)) {
+
+				if (a2 < alpha && a2 <= a3) {
+					// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+					// Advance sliding window after P2
+					s2 = SAFE;
+					s3 = UNSAFE;
+				} else if (a3 < alpha) {
+					// [ P1 = UNSAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+					s2 = UNSAFE;
+				}
+
+			} else if (a1 < alpha && a1 < a2) {
+				// [ P1 = SAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = SAFE;
+				s2 = UNSAFE;
+				// Now check to see if is safe to mark P3 too.
+				if (a3 < alpha) {
+					// [ P1 = SAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+				}
+			} else if (a1 < alpha && a1 > a2) {
+				// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+				// SPECIAL CASE : Advance sliding window after P3
+				s1 = UNSAFE;
+				s2 = SAFE;
+				s3 = UNSAFE;
+				// Special case : set flag to advance sliding window after P3
+				flag = true;
+
+			} else if (a1 > alpha && a2 > alpha) {
+				// [ P1 = UNSAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = UNSAFE;
+				s2 = UNSAFE;
+			}
+
+			// Pack the modified point-data.
+			String t1 = p1[INDEX] + ":" + p1[LT] + ":" + p1[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p1[ANGLE] + ":" + s1; //$NON-NLS-1$
+
+			String t2 = p2[INDEX] + ":" + p2[LT] + ":" + p2[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p2[ANGLE] + ":" + s2; //$NON-NLS-1$
+
+			String t3 = p3[INDEX] + ":" + p3[LT] + ":" + p3[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p3[ANGLE] + ":" + s3; //$NON-NLS-1$
+
+			// Store the modified (marked) point-data.
+			list.set(Integer.parseInt(p1[INDEX]), t1);
+			list.set(Integer.parseInt(p2[INDEX]), t2);
+			list.set(Integer.parseInt(p3[INDEX]), t3);
+
+			if (flag == true) {
+				// SPECIAL CASE : Advance sliding window after P3.
+				left_border = right_border + 1;
+				right_border = left_border + WINDOW_LENGTH;
+				// Go to the next iteration.
+				continue;
+			}
+
+			// DEFAULT : Advance sliding window after P2.
+			left_border = right_border;
+			right_border = left_border + WINDOW_LENGTH;
+
+		} // while
+
+		// Now remove the SAFE points and return the reduced list.
+		Iterator it = list.listIterator();
+
+		while (it.hasNext()) {
+
+			String data = (String) it.next();
+
+			String[] tokens = data.split(":"); //$NON-NLS-1$
+
+			if (tokens[SAFETY].equals(SAFE)) {
+				continue;
+			}
+			reducedList.add(data);
+
+		}
+
+		// System.out.println("Reduced list size is : " + reducedList.size());
+
+		return reducedList;
+
+	}
+
+	/**
+	 * Profile the angle data. Count how many times each value occurs
+	 * 
+	 * @param list -
+	 *            a list of angles for each data point in the polygon
+	 * 
+	 */
+	public void profile(List<String> list) {
+
+		final int ANGLE = 3;
+
+		if (list == null) {
+			return;
+		}
+
+		// We want to iterate through all the points of the
+		// polygon
+		Iterator it = list.iterator();
+
+		// Clear the hash map before start using it.
+		initHashMap(angleValueMap);
+
+		// Count the occurrences of the values of the 180 offset
+		// minus the angle.
+		// This count will be useful for finding a good threshold.
+		while (it.hasNext()) {
+
+			String p = (String) it.next();
+
+			String[] elements = p.split(":"); //$NON-NLS-1$
+
+			Double angle = new Double(elements[ANGLE]);
+
+			double degrees = angle.doubleValue();
+
+			count(degrees, angleValueMap);
+
+		} // while
+
+	}
+
+	/**
+	 * Based on the current value of the angle, keep track of it.
+	 * 
+	 * @param degrees -
+	 *            The value of the last offset - Cos-1(angle) value.
+	 * 
+	 * @param map -
+	 *            The map holding angles and their count
+	 * 
+	 */
+	public void count(double degrees, HashMap<Double, Integer> map) {
+
+		// Filter to find the appropriate bucket for the value
+
+		if (degrees >= 90.0) {
+			int count = (map.get(new Double(90.0))).intValue();
+			map.put(new Double(90.0), new Integer(++count));
+
+		} else if (degrees >= 45.0) {
+			int count = (map.get(new Double(45.0))).intValue();
+			map.put(new Double(45.0), new Integer(++count));
+
+		} else if (degrees >= 22.5) {
+			int count = (map.get(new Double(22.5))).intValue();
+			map.put(new Double(22.5), new Integer(++count));
+
+		} else if (degrees >= 11.25) {
+			int count = (map.get(new Double(11.25))).intValue();
+			map.put(new Double(11.25), new Integer(++count));
+
+		} else if (degrees >= 5.5125) {
+			int count = (map.get(new Double(5.5125))).intValue();
+			map.put(new Double(5.5125), new Integer(++count));
+
+		} else if (degrees >= 2.0) {
+			int count = (map.get(new Double(2.0))).intValue();
+			map.put(new Double(2.0), new Integer(++count));
+
+		} else if (degrees >= 1.5) {
+			int count = (map.get(new Double(1.5))).intValue();
+			map.put(new Double(1.5), new Integer(++count));
+
+		} else if (degrees >= 1.0) {
+			int count = (map.get(new Double(1.0))).intValue();
+			map.put(new Double(1.0), new Integer(++count));
+
+		} else if (degrees >= 0.75) {
+			int count = (map.get(new Double(0.75))).intValue();
+			map.put(new Double(0.75), new Integer(++count));
+
+		} else if (degrees >= 0.5) {
+			int count = (map.get(new Double(0.5))).intValue();
+			map.put(new Double(0.5), new Integer(++count));
+
+		} else if (degrees >= 0.25) {
+			int count = (map.get(new Double(0.25))).intValue();
+			map.put(new Double(0.25), new Integer(++count));
+
+		} else if (degrees >= 0.15) {
+			int count = (map.get(new Double(0.15))).intValue();
+			map.put(new Double(0.15), new Integer(++count));
+
+		} else if (degrees >= 0.05) {
+			int count = (map.get(new Double(0.05))).intValue();
+			map.put(new Double(0.05), new Integer(++count));
+
+		}
+
+	}
+
+	/**
+	 * Simply extract the LT,LG values from the list.
+	 * 
+	 * @param list
+	 *            a list with point-data of the form: INDEX:LT:LG:ANGLE:SAFETY
+	 * 
+	 * @return String a concatenation of all the LT,LG values.
+	 */
+	String extractListIntoString(List<String> list) {
+
+		final int LT = 1;
+
+		final int LG = 2;
+
+		String buffer = null;
+
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+
+			String p = (String) it.next();
+
+			String[] elements = p.split(":"); //$NON-NLS-1$
+
+			if (buffer == null) {
+
+				buffer = elements[LT] + "," + elements[LG] + ","; //$NON-NLS-1$ //$NON-NLS-2$
+
+			} else {
+
+				buffer += elements[LT] + "," + elements[LG] + ","; //$NON-NLS-1$ //$NON-NLS-2$
+
+			}
+
+		}
+
+		return buffer;
+	}
+
+	/**
+	 * Compute the cosine inverse of an angle and subract that value from an
+	 * offset of 180 degrees.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * 
+	 * @return List a list of angle values for all points in the polygon
+	 * 
+	 */
+	List<String> computeInverseCosines(STEMPolygon polygon) {
+
+		final double INFINITY = 10000000;
+
+		// List to keep track of tuples of the form : ( point, inverse
+		// ANGLE angle )
+		List<String> pointDataList = new ArrayList<String>();
+
+		// First, get an iterator to the points in the polygon
+		Iterator it = polygon.getIterator();
+
+		double degrees = 0.0;
+
+		// Get the first three points
+		double inverseCosine = INFINITY;
+
+		// String to store initial point. This will be used to set the value
+		// of the last point. Since a polygon has to be closed, the first and
+		// last points should be the same. It is better to store it than to
+		// recompute it later.
+		String initPointData = null;
+		String lastPointData = null;
+
+		PointData p1 = null;
+		PointData p2 = null;
+		PointData p3 = null;
+
+		int index = 0;
+
+		// Set the value of the first and last point.
+		// We never delete the first or the last point, otherwise we will
+		// turn this polygon into a non-polygon.
+		// Set to UNSAFE and angle to Double.MAX_VALUE to make sure that neither
+		// of these points ever be removed.
+
+		if (initPointData == null) {
+
+			PointData init = polygon.getInit();
+
+			// Set angle to a
+			initPointData = String.valueOf(0) + ":" + init.getLt() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+					+ init.getLg() + ":" + Double.MAX_VALUE + ":" + UNSAFE; //$NON-NLS-1$ //$NON-NLS-2$
+
+			lastPointData = String.valueOf(polygon.points() - 1) + ":" //$NON-NLS-1$
+					+ init.getLt() + ":" + init.getLg() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+					+ Double.MAX_VALUE + ":" + UNSAFE; //$NON-NLS-1$
+
+		}
+
+		while (it.hasNext()) {
+
+			if (p1 == null) {
+				p1 = (PointData) it.next();
+				continue;
+			}
+
+			if (p2 == null) {
+				p2 = (PointData) it.next();
+				continue;
+			}
+
+			if (p3 == null) {
+				p3 = (PointData) it.next();
+			}
+
+			if (index == 0) {
+				// System.out.println("Adding (1) : " + initPointData);
+				pointDataList.add(index++, initPointData);
+			}
+
+			// String used to represent extended point data. It has the form :
+			// INDEX:LT:LG:ANGLE:SAFETY
+			String tuple = null;
+
+			// Now that we have three consecutive points, compute the inverse
+			// ANGLE of the angle
+			// for the triangle formed by these three consecutive points.
+			final double cc = 100000000000.0;
+			double lt1 = p1.getLt() * cc;
+			double lt2 = p2.getLt() * cc;
+			double lt3 = p3.getLt() * cc;
+			double lg1 = p1.getLg() * cc;
+			double lg2 = p2.getLg() * cc;
+			double lg3 = p3.getLg() * cc;
+
+			// compute: a^2 = (Xi- Xi-1)^2 + (Yi- Yi-1)^2
+			double a = Math.pow((lg2 - lg1), 2) + Math.pow((lt2 - lt1), 2);
+
+			// compute: b^2 = (Xi+1 -Xi)^2 + (Yi+1 -Yi)^2
+			double b = Math.pow((lg3 - lg2), 2) + Math.pow((lt3 - lt2), 2);
+
+			// compute: c^2 = (Xi+1 - Xi-1)^2 + (Yi+1 - Yi-1)^2
+			double c = Math.pow((lg3 - lg1), 2) + Math.pow((lt3 - lt1), 2);
+
+			// System.out.println(" A^2 = " + a);
+
+			// System.out.println(" B^2 = " + b);
+
+			// System.out.println(" C^2 = " + c);
+
+			// Now compute: (a^2 + b^2 - c^2) / 2ab
+
+			double ratio = ((a + b) - c) / (2 * Math.sqrt(a) * Math.sqrt(b));
+
+			// System.out.println("Ratio is : " + ratio);
+
+			// Now compute the arc ANGLE : cos-1( ratio )
+			inverseCosine = Math.acos(ratio);
+
+			degrees = Math.abs(180.0 - GenUtils.toDegrees(inverseCosine));
+
+			tuple = String.valueOf(index) + ":" + p2.getLt() + ":" + p2.getLg() //$NON-NLS-1$ //$NON-NLS-2$
+					+ ":" + new Double(degrees) + ":" + UNKNOWN; //$NON-NLS-1$ //$NON-NLS-2$
+
+			// Store tuple in the map
+			// System.out.println("Adding (1) : " + tuple);
+			pointDataList.add(index++, tuple);
+
+			// System.out.println("Inverse cosine is " + inverseANGLE);
+
+			// Slide the points by one to do the new computation of the angle
+
+			// Now set p1 <- p2
+			p1 = p2;
+
+			// Now set p2 <- p3
+			p2 = p3;
+
+			// Now set p3 = null
+			p3 = null;
+
+			// Check to see if this is the last iteration.
+			if (it.hasNext() == false) {
+
+				// If so, add the last point.
+				// System.out.println("Adding (2) : " + lastPointData);
+				pointDataList.add(index, lastPointData);
+				break;
+			}
+
+		}
+
+		return pointDataList;
+	}
+
+	/**
+	 * Check to see if this is a real polygon (i.e. closed)
+	 * 
+	 * @param polygon
+	 *            A STEM polygon
+	 * 
+	 * @return true if the parameter "polygon" is a STEM polygon
+	 */
+	protected boolean isPolygon(STEMPolygon polygon) {
+
+		PointData init = polygon.getInit();
+		PointData last = polygon.getLast();
+
+		if (init.getLt() != last.getLt()) {
+			// Not a polygon
+			return false;
+		} else if (init.getLg() != last.getLg()) {
+			// Not a polygon
+			return false;
+		}
+
+		// Yes, it is a polygon
+		return true;
+	}
+
+	/**
+	 * Check to see if this polygon is duplicated.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * @param it
+	 *            an iterator on the polygon list
+	 * 
+	 * @return true if this polygon is already in the list of known polygons
+	 */
+	protected boolean isPolygonDuplicated(Iterator it, STEMPolygon polygon) {
+
+		if (it.hasNext() != true) {
+			return false;
+		}
+
+		while (it.hasNext()) {
+			STEMPolygon current = (STEMPolygon) it.next();
+			if (current.same(polygon) == true) {
+				// Not unique, it is duplicated so condition is false.
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * This method creates the opening XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @param id
+	 *            the descriptor for the entity
+	 * 
+	 * @return a GML tag that describes a polygon
+	 */
+	protected String openPolygonIslandTags(String id) {
+
+		String tags = null;
+		tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the tags that describe a "polygon island" or linear
+	 * ring and puts the polygon data inside of it.
+	 * 
+	 * @param buffer
+	 *            the data buffer containing all the polygond data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag for opening a linear ring.
+	 */
+	protected String addLinearRingTags(String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = "<gml:LinearRing>\n"; //$NON-NLS-1$
+		tags += "<gml:posList>\n"; //$NON-NLS-1$
+		tags += polygonData + "\n"; //$NON-NLS-1$
+		tags += "</gml:posList>\n"; //$NON-NLS-1$
+		tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the closing XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @return a GML tag for closing a polygon.
+	 */
+	protected String closePolygonIslandTags() {
+
+		String tags = null;
+		tags = "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+		tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the XML tags that deal with simple polygon data and
+	 * includes the polygon data in it.
+	 * 
+	 * @param id
+	 *            the descriptor for the entity
+	 * @param buffer
+	 *            the data buffer containing all the polygon data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag to create a simple polygon.
+	 */
+	protected String createSimplePolygonTags(String id, String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = null;
+
+		if (polygonData == null) {
+			tags = "<gml:Polygon gml:id=\"" + id + "\"/>\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		} else {
+			tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+			tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "<gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "<gml:posList>\n"; //$NON-NLS-1$
+			tags += polygonData + "\n"; //$NON-NLS-1$
+			tags += "</gml:posList>\n"; //$NON-NLS-1$
+			tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+		}
+
+		return tags;
+	}
+
+	/**
+	 * Generate the opening tags for this GML file.
+	 * 
+	 * @param code
+	 *            the ISO code
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return the opening tags for the GML file.
+	 */
+	protected String getOpeningTags(ISOCode1 code, int level) {
+
+		// Calendar date = Calendar.getInstance();
+		String tags = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; //$NON-NLS-1$
+		tags += GenUtils.geGMLCopyright();
+		tags += GenUtils.getGMLKeyFormatExplanation();
+		tags += "<Map xmlns:gml=\"http://www.opengis.net/gml\" xmlns:georss=\"http://www.georss.org/georss\">\n"; //$NON-NLS-1$
+		tags += "<title>" + code.getAlpha3() + " Level " + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ " Map</title>\n"; //$NON-NLS-1$
+		tags += "<subTitle>Administrative Boundaries</subTitle>\n"; //$NON-NLS-1$
+		tags += "<updated>Tue Nov 07 16:57:55 PST 2006 </updated>\n"; //$NON-NLS-1$
+		tags += "<entry>\n"; //$NON-NLS-1$
+		tags += "<georss:where>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * Generate the closing tags for this GML file.
+	 * 
+	 * @return the closing tags of the GML file
+	 */
+	protected String getClosingTags() {
+		String tags = "</georss:where>\n"; //$NON-NLS-1$
+		tags += "</entry>\n"; //$NON-NLS-1$
+		tags += "</Map>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * The execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int THRESHOLD = 0;
+		// final int iterations = 1;
+		// final int ISO_3166_1 = 2;
+		// final int ISO_3166_2 = 3;
+		// final int FIX_FILE = 4;
+		// final int TARGET_LIST = 5;
+		// final int LEX_DIR = 6;
+		// final int OUTPUT_DIR = 7;
+		// final int PARAMS = 8;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Threshold (in degrees)"); //$NON-NLS-1$
+		// System.out.println("\t\t Total iterations"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$F
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// MultiPassDownSampler sampler = new MultiPassDownSampler(
+		// args[THRESHOLD], args[iterations], args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[TARGET_LIST],
+		// args[LEX_DIR], args[OUTPUT_DIR]);
+		// sampler.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		MultiPassDownSampler sampler = new MultiPassDownSampler(
+				args[CONFIG_FILE]);
+
+		sampler.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NameGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NameGenerator.java
new file mode 100644
index 0000000..2d48064
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NameGenerator.java
@@ -0,0 +1,718 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- This is a utility class that
+ * generates the names.properties files for all countries.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/NameGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\NameGenerator.config)
+ * 
+ * 
+ */
+
+public class NameGenerator {
+
+	/**
+	 * STEM II Properties File Utility -- This class is a utility to generate
+	 * the names.properties files.
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs. \
+	 * @param targetList -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+	List<String> targetList = null;
+
+	List<String> codeList = null;
+
+	List<String> codefixList = null;
+
+	/**
+	 * Hash set for storing the source URLs relevant to area data.
+	 */
+	Set<String> urlSet = null;
+
+	/**
+	 * Hash map to keep track of which sources will be shown commented out and
+	 * which will appear active.
+	 */
+	// HashMap<String, Boolean> urlStatus = null;
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public NameGenerator(String iso3166_1, String iso3166_2, String fixFile,
+	// String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// // Set the URL IDs that are relevant for area data.
+	// initNameURLSet();
+	// // Set which URLs are active and which ones should be commented out.
+	// // setURLStatus();
+	// }
+	/**
+	 * @param configFile
+	 */
+	public NameGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = workspace + GenConstants.PROPERTIES_OUTPUT_DIR;
+		}
+
+		targetList = null;
+		// Set the URL IDs that are relevant for area data.
+		initNameURLSet();
+		// Set which URLs are active and which ones should be commented out.
+		// setURLStatus();
+
+	}
+
+	/**
+	 * Sets the URL IDs relevant for area data. We are only interested in URLs
+	 * with ID = DIVA. This can be different for different types of data. For
+	 * example, for population data, we are interested  ID = CIA
+	 */
+	protected void initNameURLSet() {
+		urlSet = new HashSet<String>();
+		urlSet.add(new String("ISO3166_1")); //$NON-NLS-1$
+		urlSet.add(new String("USCENSUSPOP")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Set which URL appears as uncommented or ACTIVE and which ones appear as
+	 * commented out or SECONDARY. Only URL should be active. All others should
+	 * appear commented.
+	 * 
+	 */
+	// protected void setURLStatus() {
+	// urlStatus = new HashMap<String, Boolean>();
+	// // This will be the active URL.
+	// urlStatus.put("ISO3166_1", new Boolean(true));
+	// // All other URLs appear as commented out, secondary.
+	// urlStatus.put("CIA", new Boolean(false));
+	// urlStatus.put("USCENSUSPOP", new Boolean(false));
+	//		
+	// }
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its name.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		final int LEVEL_1 = 1;
+		final int LEVEL_2 = 2;
+
+		// A writer for the new file we are creating.
+		PrintWriter propertiesFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List<ISOCode2> iso2List = new ArrayList<ISOCode2>();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its names.properties file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = targetList.get(i).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< NAME GENERATOR -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+					// Record the previous level.
+					int oldlevel = level - 1;
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+					// String used to ignore repeated entries.
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(
+									items[ISOData.COUNTRY_NAME], codeList);
+						}
+
+						// Get the level of the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (propertiesFile == null) {
+							// Create the file name for the new properties.file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_names.properties"; //$NON-NLS-1$
+							// Create tne new properties.file for this country.
+							propertiesFile = GenUtils.openWriter(fileName);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// Variable used to hold the formatted output data.
+						String data = null;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// We have switched to a different data level (i,e,
+						// admin 0 to admin 1)
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldlevel = level;
+							// Reset our repeated history
+							if (entryList != null) {
+								entryList.clear();
+							}
+							entryList = new ArrayList<String>();
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+
+							if (level == 0) {
+								// Add an explanation of the key format in our
+								// data files.
+								data = GenUtils.getKeyFormatExplanation();
+								// Add the header.
+								data += getHeader(isoCode, level);
+							} else {
+								// Add the header
+								data = getHeader(isoCode, level);
+							}
+
+							GenUtils.addData(propertiesFile, data);
+							data = null;
+						}
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+
+							// Handle level 0 data different than the other
+							// admin levels.
+							if (transition == true) {
+								data = items[ISOData.ALPHA3_CODE] + " = " //$NON-NLS-1$
+										+ items[ISOData.COUNTRY_NAME] + "\n"; //$NON-NLS-1$
+								GenUtils.addData(propertiesFile, data);
+							}
+							continue;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // Switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// Verify for repeated entries -- avvoid duplcates
+						switch (level) {
+
+						case LEVEL_1:
+							if (GenUtils.isRepeated(current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(current);
+							break;
+
+						case LEVEL_2:
+							if (GenUtils.isRepeated(items[ISOData.ADMIN1_NAME]
+									+ current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(items[ISOData.ADMIN1_NAME] + current);
+							break;
+
+						}
+
+						String descriptor = null;
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							// STEP 2: piece together the ID using the
+							// proper lex objects : the USA is a special
+							// case
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								descriptor = lex1Current.getDescriptor()
+										+ "-" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA();
+							} else {
+								descriptor = lex1Current.getDescriptor() + "-" //$NON-NLS-1$
+										+ "G" + lex1Current.getFormattedIndex() //$NON-NLS-1$
+										+ lex2Current.getFormattedIndex();
+
+								// Add some commens to allow reverse engineering
+								// or
+								// backtracking the origin of this generated key
+								// as
+								// much as possible.
+								data = "# Generated key details : " //$NON-NLS-1$
+										+ " Level 1 ( " //$NON-NLS-1$
+										+ lex1Current.getDescriptor()
+										+ " = " //$NON-NLS-1$
+										+ lex1Current.getAdmin1()
+										+ " ). " //$NON-NLS-1$
+										+ "Level 2 ( " //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex()
+										+ " = " + lex2Current.getAdmin2() //$NON-NLS-1$
+										+ " ). \n"; //$NON-NLS-1$
+							}
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else { // Compose descriptor for level 1 and level
+							// 0 data.
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+
+								// If there is no descriptor still, generate
+								// one!
+								if (descriptor.equals(current) == true) {
+									descriptor = isoCode.getAlpha2() + "-" //$NON-NLS-1$
+											+ current;
+								}
+
+							}
+
+							// Handle the USA as a special case
+							if (descriptor.contains("US-")) { //$NON-NLS-1$
+								data = "#" + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+							}
+
+						}
+
+						// System.out.println("Descriptor is : " + descriptor
+						// + " at level : " + level + " for " + current);
+
+						if (data != null) {
+							data += descriptor + " = " + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						} else {
+							data = descriptor + " = " + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+
+						GenUtils.addData(propertiesFile, data);
+						data = null;
+
+					}// while
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (propertiesFile != null) {
+						propertiesFile.close();
+						propertiesFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Generate the header comment for this file.
+	 * 
+	 * @param code
+	 *            ISO 3166-1 Code
+	 * 
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a header comment for the new file.
+	 */
+	protected String getHeader(ISOCode1 code, int level) {
+
+		String header = null;
+
+		// header = GenUtils.getUNPolicy();
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			header = "# " + code.getName() + "_names.properties "; //$NON-NLS-1$ //$NON-NLS-2$
+			// header += Calendar.getInstance().getTime() + "\n";
+			// header += GenUtils.getCopyright();
+
+			header += "# Level 0\n"; //$NON-NLS-1$
+			// header += code.getAlpha3() + " = " + code.getName() + "\n\n";
+			break;
+
+		case DataTypes.LEVEL_1:
+			header = "\n# Level 1 (admin 1 = e.g., state)\n"; //$NON-NLS-1$
+			break;
+
+		case DataTypes.LEVEL_2:
+			header = "\n# Level 2 (admin 2 = e.g., country)\n"; //$NON-NLS-1$
+			break;
+
+		}
+		return header;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int TARGET_LIST = 3;
+		// final int LEX_DIR = 4;
+		// final int OUTPUT_DIR = 5;
+		// final int PARAMS = 6;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// NameGenerator gen = new NameGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[TARGET_LIST],
+		// args[LEX_DIR], args[OUTPUT_DIR]);
+		// gen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		NameGenerator gen = new NameGenerator(args[CONFIG_FILE]);
+		gen.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NodeDataGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NodeDataGenerator.java
new file mode 100644
index 0000000..6145afd
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/NodeDataGenerator.java
@@ -0,0 +1,818 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- This is a utility class that
+ * generates the node.properties files for all countries.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/NodeDataGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\NodeDataGenerator.config)
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+
+public class NodeDataGenerator {
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	/**
+	 * Hash set for storing the source URLs relevant to area data.
+	 */
+	Set<String> urlSet = null;
+
+	/**
+	 * Hash map to keep track of which sources will be shown commented out and
+	 * which will appear active.
+	 */
+	HashMap<String, Boolean> urlStatus = null;
+
+	/**
+	 * Constructor *
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 */
+	// public NodeDataGenerator(String iso3166_1, String iso3166_2,
+	// String fixFile, String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// // Set the URL IDs that are relevant for area data.
+	// initNodeDataURLSet();
+	// // Set which URLs are active and which ones should be commented out.
+	// setURLStatus();
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public NodeDataGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = workspace + GenConstants.PROPERTIES_OUTPUT_DIR;
+		}
+
+		targetList = null;
+		// Set the URL IDs that are relevant for area data.
+		initNodeDataURLSet();
+		// Set which URLs are active and which ones should be commented out.
+		setURLStatus();
+
+	}
+
+	/**
+	 * Sets the URL IDs relevant for area data. We are only interested in URLs
+	 * with ID = DIVA. This can be different for different types of data. For
+	 * example, for population data, we are interested on ID = CIA
+	 */
+	protected void initNodeDataURLSet() {
+		urlSet = new HashSet<String>();
+		urlSet.add(new String("CIA")); //$NON-NLS-1$
+		urlSet.add(new String("ISO3166_1")); //$NON-NLS-1$
+		urlSet.add(new String("UNITEDNATIONS")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Set which URL appears as uncommented or ACTIVE and which ones appear as
+	 * commented out or SECONDARY. Only URL should be active. All others should
+	 * appear commented.
+	 * 
+	 */
+	protected void setURLStatus() {
+		urlStatus = new HashMap<String, Boolean>();
+		// This will be the active URL.
+		urlStatus.put("CIA", new Boolean(true)); //$NON-NLS-1$
+		// All other URLs appear as commented out, secondary.
+		urlStatus.put("CIA", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("ISO3166_1", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("UNITEDNATIONS", new Boolean(true)); //$NON-NLS-1$
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its node.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		final int LEVEL_1 = 1;
+		final int LEVEL_2 = 2;
+
+		// A writer for the new file we are creating.
+		PrintWriter propertiesFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its nodedata.properties file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< NODE DATA GENERATOR -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+					// Record the previous level.
+					int oldlevel = level - 1;
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+					// String used to ignore repeated entries.
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficiency.
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Get the levelof the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// Variable used to hold the formatted output data.
+						String data = null;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						// We have switched to a different data level (i,e,
+						// admin 0 to admin 1)
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldlevel = level;
+							// Reset our repeated history
+							if (entryList != null) {
+								entryList.clear();
+							}
+							entryList = new ArrayList<String>();
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							if (propertiesFile != null) {
+								System.out.println("\t\tGenerated : " //$NON-NLS-1$
+										+ fileName);
+								propertiesFile.close();
+								propertiesFile = null;
+								fileName = null;
+							}
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (propertiesFile == null) {
+							// Create the file name for the new properties.file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_node.properties"; //$NON-NLS-1$ //$NON-NLS-2$
+							// Create tne new population file for this country.
+							propertiesFile = GenUtils.openWriter(fileName);
+						}
+
+						if (transition == true) {
+							// Just add the header
+							data = getHeader(isoCode, level);
+							GenUtils.addData(propertiesFile, data);
+							// Forget the data we just wrote.
+							data = null;
+						}
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+
+							// Handle data level 0 different that the other
+							// admin levels.
+							if (transition == true) {
+								data = isoCode.getAlpha3() + " = " //$NON-NLS-1$
+										+ isoCode.getName() + ", " //$NON-NLS-1$
+										+ isoCode.getNumeric() + ", " //$NON-NLS-1$
+										+ isoCode.getAlpha2();
+								// Write formatted output
+								GenUtils.addData(propertiesFile, data);
+							}
+							continue;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// Verify for repeated entries -- avoid duplcates
+						switch (level) {
+
+						case LEVEL_1:
+							if (GenUtils.isRepeated(current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(current);
+							break;
+
+						case LEVEL_2:
+							if (GenUtils.isRepeated(items[ISOData.ADMIN1_NAME]
+									+ current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(items[ISOData.ADMIN1_NAME] + current);
+							break;
+
+						}
+
+						// Load the lex lists.
+						if (lex1DataSet == null && lex2DataSet == null) {
+
+							// Compose the file names for the lex files for
+							// this
+							// country.
+							lexAdmin1File = lexDir + isoCode.getAlpha3() + "\\" //$NON-NLS-1$
+									+ isoCode.getAlpha3();
+							lexAdmin2File = lexAdmin1File;
+							lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+							lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+							// Load the lex1 and lex2 files for this
+							// country.
+							lex1DataSet = GenUtils.populateList(lexAdmin1File);
+							lex2DataSet = GenUtils.populateList(lexAdmin2File);
+
+							// Create a method to search for an item on a
+							// list
+							// of lex data objects.
+							lex1List = GenUtils.createLex1List(lex1DataSet);
+							lex2List = GenUtils.createLex2List(lex2DataSet);
+
+						}
+
+						// Compose the level2 descriptor using the lex data:
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							// STEP 2: piece together the ID using the
+							// proper lex objects : the USA is a special case
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+
+								descriptor = lex1Current.getDescriptor()
+										+ "-" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA();
+
+								current = current
+										+ ", " //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA()
+										+ ", " //$NON-NLS-1$
+										+ GenUtils.extractAlpha2(lex1Current
+												.getDescriptor());
+
+							} else {
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+
+								// Add some commens to allow reverse engineering
+								// or
+								// backtracking the origin of this generated key
+								// as
+								// much as possible.
+								data = "# Generated key details : " //$NON-NLS-1$
+										+ " Level 1 ( " //$NON-NLS-1$
+										+ lex1Current.getDescriptor()
+										+ " = " //$NON-NLS-1$
+										+ lex1Current.getAdmin1()
+										+ " ). " //$NON-NLS-1$
+										+ "Level 2 ( " //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex()
+										+ " = " + lex2Current.getAdmin2() //$NON-NLS-1$
+										+ " ). \n"; //$NON-NLS-1$
+
+								if (current.contains(".L2.")) { //$NON-NLS-1$
+									current = descriptor
+											+ ", " + "G" //$NON-NLS-1$ //$NON-NLS-2$
+											+ lex1Current.getFormattedIndex()
+											+ lex2Current.getFormattedIndex()
+											+ ", " + lex1Current.getID(); //$NON-NLS-1$
+								}
+
+							}
+
+						} else { // Compose descriptor for level 1 and level
+							// 0 data.
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+
+								// If there is no descriptor still, generate
+								// one!
+								if (descriptor.equals(current) == true) {
+									descriptor = isoCode.getAlpha2() + "-" //$NON-NLS-1$
+											+ current;
+								}
+							}
+
+							// Handle the USA as a special case
+							if (descriptor.contains("US-")) { //$NON-NLS-1$
+								data = "#" + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+							}
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									current);
+
+							if (lex1Current == null) {
+								System.out
+										.println("\t\tFound problem : " + current //$NON-NLS-1$
+												+ " " + descriptor + " " //$NON-NLS-1$ //$NON-NLS-2$
+												+ items[ISOData.COUNTRY_NAME]);
+							} else {
+								current = current
+										+ ", " //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ ", " //$NON-NLS-1$
+										+ lex1Current.getID();
+							}
+
+						}
+
+						// System.out.println("Composed : " + descriptor + " = "
+						// + current);
+
+						if (data != null) {
+							data += descriptor + " = " + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						} else {
+							data = descriptor + " = " + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+
+						GenUtils.addData(propertiesFile, data);
+						data = null;
+
+					} // while loop
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (propertiesFile != null) {
+						propertiesFile.close();
+						propertiesFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * Generate the header comment for this file.
+	 * 
+	 * @param code
+	 *            ISO 3166-1 Code
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a header comment for the new file.
+	 */
+	protected String getHeader(ISOCode1 code, int level) {
+
+		final int DATA_DESCRIPTOR = 0;
+		final int URL = 1;
+
+		// Create the file name for the URL file.
+		String urlFile = workspace + GenConstants.PARAMS_DIR
+				+ GenConstants.URLS_DIR;
+		urlFile += code.getName() + ".txt"; //$NON-NLS-1$
+
+		String header = "# " + code.getAlpha3() + "_" + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ "_node.properties " //$NON-NLS-1$
+				+ "\n"; //$NON-NLS-1$
+
+		// Add the copyright statement.
+		header += GenUtils.getCopyright();
+
+		// Add an explanation of the key format in our data files.
+		header += GenUtils.getKeyFormatExplanation();
+
+		header += "# This is the name of the class that will interpret the rest of the file's contents\n"; //$NON-NLS-1$
+		header += "RECORD_CLASSNAME = org.eclipse.stem.internal.data.CountryGraphRecord$CountryNodeGraphRecord\n\n"; //$NON-NLS-1$
+
+		header += "# The ISO-3166-1 alpha3 code for the country\n"; //$NON-NLS-1$
+		header += "ISOKEY = " + code.getAlpha3() + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		header += "# The administration level of the node data\n"; //$NON-NLS-1$
+		header += "ADMIN_LEVEL = " + level + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		header += "# This is the date range for which the area values in this file are valid \n"; //$NON-NLS-1$
+		header += "# See http://purl.org/dc/terms/1.1/valid\n"; //$NON-NLS-1$
+		header += "VALID = start=1900-01-01;\n\n"; //$NON-NLS-1$
+
+		// The United Nations data policy applies only to Europe :
+		// header += GenUtils.getUNPolicy();
+
+		header += "# This is the source of the data\n"; //$NON-NLS-1$
+
+		urlFile += code.getName() + ".txt"; //$NON-NLS-1$
+
+		// Open the URL file for this country.
+		// System.out.println("url file = " + urlFile);
+		BufferedReader urlReader = GenUtils.openReader(urlFile);
+
+		try {
+			// Add all the source URLs for this country.
+			if (urlReader != null) {
+				String buffer = null;
+				while (GenUtils.EOF(buffer = urlReader.readLine()) != true) {
+
+					// System.out.println("Buffer = " + buffer);
+
+					// Tokenize
+					StringTokenizer tokenizer = new StringTokenizer(buffer, "*"); //$NON-NLS-1$
+
+					// We know that we expect only two tokens. Get them. Order
+					// matters here.
+					String[] tokens = new String[2];
+					tokens[DATA_DESCRIPTOR] = tokenizer.nextToken();
+					tokens[URL] = tokenizer.nextToken();
+
+					if (GenUtils.isSourceURL(urlSet, tokens[DATA_DESCRIPTOR]) == true) {
+
+						// try {
+						// Is this data descriptor one of our active data
+						// sources ?
+						if (GenUtils.isActiveURL(urlStatus,
+								tokens[DATA_DESCRIPTOR]) == false) {
+							// No, it is not one an active URL, so comment
+							// it
+							// out.
+							// header += "# " + "SOURCE = " +
+							// URLEncoder.encode(tokens[URL], "UTF-8") + "\n";
+							header += "# " + "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						} else {
+							// header += "SOURCE = " +
+							// URLEncoder.encode(tokens[URL], "UTF-8") + "\n";
+							header += "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+
+						// } catch (java.io.UnsupportedEncodingException e) {
+						// System.out.println("Error:" + e.getMessage());
+						// //$NON-NLS-1$
+						// }
+					}
+
+				} // while
+
+				// To make it look better, add an extra new line.
+				header += "\n"; //$NON-NLS-1$
+
+			}
+
+		} catch (IOException e) {
+			//
+		}
+
+		header += "# The file that contains the latitude/longitude data for the node \n"; //$NON-NLS-1$
+		header += "SPATIAL_URI = "; //$NON-NLS-1$
+		header += "platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/"; //$NON-NLS-1$
+		header += code.getAlpha3() + "/" + code.getAlpha3() + "_" + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ "_MAP.xml\n\n"; //$NON-NLS-1$
+
+		return header;
+	}
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int TARGET_LIST = 3;
+		// final int LEX_DIR = 4;
+		// final int OUTPUT_DIR = 5;
+		// final int PARAMS = 6;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// NodeDataGenerator gen = new NodeDataGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[TARGET_LIST],
+		// args[LEX_DIR], args[OUTPUT_DIR]);
+		// gen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		NodeDataGenerator gen = new NodeDataGenerator(args[CONFIG_FILE]);
+		gen.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PolygonAreaGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PolygonAreaGenerator.java
new file mode 100644
index 0000000..543da54
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PolygonAreaGenerator.java
@@ -0,0 +1,969 @@
+package org.eclipse.stem.utility.generators;
+
+import java.awt.Polygon;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- This is a utility class that
+ * computes the area of a polygon in polygon units. This is useful to compute
+ * the approximate area of a location when we dont know the exact area value.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/PolygonAreaGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\PolygonAreaGenerator.config)
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-2\ISO3166_2_list.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISOFix\ISO_LEVEL1_FIX.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\Countries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\sort\
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\PolygonAreas\
+ * 
+ * 
+ * 
+ */
+
+public class PolygonAreaGenerator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String areaData = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List areaList = null;
+
+	/* Hash map to hold aggregate polygon area values */
+	HashMap<String, String> areaValues = null;
+
+	/**
+	 * String used to indicate default value for unknown areas.
+	 */
+	String DEFAULT = "0"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            data file with the ISO3166-2 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param areaData -
+	 *            file containing area data in SQ KM
+	 * @param targetFile
+	 *            the list of countries for which we will generate GML files
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir
+	 *            the output directory for the GML files we generate
+	 */
+	// public PolygonAreaGenerator(String iso3166_1, String iso3166_2,
+	// String fixFile, String areaData, String targetFile, String lexDir,
+	// String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.areaData = areaData;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// }
+	/**
+	 * @param configFile
+	 */
+	public PolygonAreaGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		areaValues = new HashMap<String, String>();
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("AREA_POP")) { //$NON-NLS-1$
+				areaData = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (areaData == null) {
+			areaData = path + GenConstants.AREA_POPULATION_DIR;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = path + GenConstants.POLYGON_AREAS_DIR;
+		}
+
+		targetList = null;
+	}
+
+	/**
+	 * Convert the value of string to a double
+	 * 
+	 * @param str
+	 *            a numeric string
+	 * 
+	 * @return double value of a numeric string
+	 */
+	protected double getDouble(String str) {
+		Double holder = new Double(str);
+		return holder.doubleValue();
+	}
+
+	/**
+	 * Remove decimal point from value and return its string representation
+	 * 
+	 * @param degrees
+	 *            an angle in degrees
+	 * 
+	 * @return formatted string a formatted angle in degress
+	 */
+	protected String format(double degrees) {
+		String str = null;
+		String subStr = null;
+
+		str = Double.toString(degrees);
+		int dot = str.indexOf("."); //$NON-NLS-1$
+		subStr = str.substring(0, str.length() < dot + 7 ? str.length()
+				: dot + 7);
+		return subStr;
+
+	} // formatData
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its GML file.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter polygonAreaFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		// Sum of the areas at level 1
+		// double areaSum = 0.0;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its GML data file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// We use this list to keep track of duplicated polygons.
+			List<STEMPolygon> polygons = new ArrayList<STEMPolygon>();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+
+			System.out
+					.println("\t\t<<<< POLYGON AREA GENERATOR -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous type.
+					int oldlevel = level - 1;
+
+					// String used to ignore repeated entries.
+					// String repeatedEntries = null;
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// The data we want to write to the new GML file.
+						String output = " "; //$NON-NLS-1$
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX]
+						// to make processsing more
+						// efficient, we dont need all of it.
+						int BUFFER_MIN = 0;
+						int BUFFER_MAX = 125;
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Read and keep in memory a list of the area data
+						// for this
+						// country.
+						if (areaList == null) {
+							String name = areaData + isoCode.getName()
+									+ "_AREA.txt"; //$NON-NLS-1$
+							areaList = GenUtils.populateList(name);
+						}
+
+						// Get the type of the data we are processing.
+						level = GenUtils.getLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+
+							// if (oldlevel >= 0) {
+							// System.out.println("Sum area for level "
+							// + level + " is : " + areaSum);
+							// areaSum = 0.0;
+							// }
+
+							// Write all keys in our hash map
+							if (areaValues.isEmpty() == false) {
+								Set<String> keys = areaValues.keySet();
+								Iterator it = keys.iterator();
+								while (it.hasNext()) {
+									String key = (String) it.next();
+									String value = areaValues.get(key);
+									output = key + ":" + value + "\n"; //$NON-NLS-1$ //$NON-NLS-2$								
+									GenUtils.addData(polygonAreaFile, output);
+								}
+								// Clear our hash map
+								areaValues.clear();
+							}
+
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldlevel = level;
+							// Reset our repeated history
+							if (entryList != null) {
+								entryList.clear();
+							}
+							entryList = new ArrayList<String>();
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							// Close the previous file
+							if (polygonAreaFile != null) {
+								polygonAreaFile.close();
+							}
+
+							// If the directory does not exist for this country,
+							// create it using ISO alpha3 code.
+							File countryDir = new File(outputDir
+									+ isoCode.getAlpha3());
+
+							if (countryDir != null
+									&& countryDir.exists() == false) {
+								// Directory does not exist. Create it.
+								countryDir.mkdir();
+							}
+
+							// Create the file name for the new
+							// polygon area file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_POLYAREA.txt"; //$NON-NLS-1$ //$NON-NLS-2$
+
+							// Open the writer for the new polygon area file
+							polygonAreaFile = GenUtils.openWriter(fileName);
+
+						} // if( transition == true )
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							current = isoCode.getAlpha3();
+							break;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this country
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							// STEP 2: piece together the ID using the proper
+							// lex objects.
+							descriptor = lex1Current.getDescriptor()
+									+ "-G" //$NON-NLS-1$
+									+ lex1Current.getFormattedIndex()
+									+ lex2Current.getFormattedIndex();
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else { // Compose descriptor for level 1 and level
+							// 0 data.
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+							}
+
+						}
+
+						// Create a STEM polygon with this polygon data
+						STEMPolygon polygon = new STEMPolygon(buffer, level);
+
+						// Check that this is indeed a STEM polygon
+						if (isPolygon(polygon) != true) {
+							// Not a polygon, ignore.
+							continue;
+						}
+
+						// We know it is a polygon, but now check that its not
+						// duplicated.
+						if (isPolygonDuplicated(polygons.iterator(), polygon) == true) {
+							// Yes, it is duplicated
+							continue;
+						}
+
+						// Add this polygon to our list of unique polygons so
+						// that we can check duplicates of this polygon later.
+						polygons.add(polygon);
+
+						String area = null;
+
+						// areaSum += getPolygonArea(polygon);
+						area = format(getPolygonArea(polygon));
+
+						// Format output data as follows:
+
+						String container = null;
+
+						switch (level) {
+
+						case 0:
+							container = current;
+
+						case 1:
+							container = items[ISOData.COUNTRY_NAME];
+							break;
+
+						case 2:
+							container = items[ISOData.ADMIN1_NAME];
+							break;
+
+						}
+
+						String key = container
+								+ ":" + current + ":" + descriptor; //$NON-NLS-1$ //$NON-NLS-2$
+						
+						if (areaValues.containsKey(key) == false) {
+							areaValues.put(key, area);
+						} else {							
+							String val = areaValues.get(key);
+							Double aggregateArea = Double.parseDouble(val)
+									+ Double.parseDouble(area);
+							areaValues.put(key, aggregateArea.toString());
+						}
+
+						// output = container + ":" + current + ":" + descriptor
+						// //$NON-NLS-1$ //$NON-NLS-2$
+						// + ":" + area + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+						// GenUtils.addData(polygonAreaFile, output);
+
+					} // while loop
+
+					Set<String> keys = areaValues.keySet();
+					Iterator it = keys.iterator();
+					while (it.hasNext()) {
+						String key = (String) it.next();
+						String value = areaValues.get(key);
+						String output = key + ":" + value + "\n"; //$NON-NLS-1$ //$NON-NLS-2$						
+						GenUtils.addData(polygonAreaFile, output);
+					}
+					// Clear our hash map
+					areaValues.clear();
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Clear the area list.
+					if (areaList != null) {
+						areaList.clear();
+						areaList = null;
+					}
+
+					// Close all open resources.
+					reader.close();
+
+					if (polygonAreaFile != null) {
+						// Write formatted output
+						polygonAreaFile.close();
+						polygonAreaFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * Check to see if this is a real polygon (i.e. closed)
+	 * 
+	 * @param polygon
+	 *            A STEM polygon
+	 * 
+	 * @return true if the parameter "polygon" is a STEM polygon
+	 */
+	protected boolean isPolygon(STEMPolygon polygon) {
+
+		PointData init = polygon.getInit();
+		PointData last = polygon.getLast();
+
+		if (init.getLt() != last.getLt()) {
+			// Not a polygon
+			return false;
+		} else if (init.getLg() != last.getLg()) {
+			// Not a polygon
+			return false;
+		}
+
+		// Yes, it is a polygon
+		return true;
+	}
+
+	/**
+	 * Check to see if this polygon is duplicated.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * @param it
+	 *            an iterator on the polygon list
+	 * 
+	 * @return true if this polygon is already in the list of known polygons
+	 */
+	protected boolean isPolygonDuplicated(Iterator it, STEMPolygon polygon) {
+
+		if (it.hasNext() != true) {
+			return false;
+		}
+
+		while (it.hasNext()) {
+			STEMPolygon current = (STEMPolygon) it.next();
+			if (current.same(polygon) == true) {
+				// Not unique, it is duplicated so condition is false.
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * get the area in square km of a child polygon inside a parent of known
+	 * area (sq km). e.g., the fractional area of a state occupied by a county.
+	 * 
+	 * @param child
+	 *            a location.
+	 * 
+	 * @param parent
+	 *            the container for the location (child).
+	 * 
+	 * @param parentAreaInSqKm
+	 *            area for the container in square kilometers.
+	 * 
+	 * @return area of child in sq km
+	 */
+	public static double getChildAreaSqKm(STEMPolygon child,
+			STEMPolygon parent, double parentAreaInSqKm) {
+		double area2 = getPolygonArea(child);
+		double area1 = getPolygonArea(parent);
+		double result = area2 / area1;
+		assert (result <= 1.0);
+		result *= parentAreaInSqKm;
+		return result;
+	}
+
+	/**
+	 * get the area in square km of a child polygon inside a parent of known
+	 * area (sq km). e.g., the fractional area of a state occupied by a county.
+	 * 
+	 * @param childSet
+	 *            as set of polygon children (may be a group of islands)
+	 * @param parentSet
+	 *            a set of polygon parents (may be a group of islands)
+	 * 
+	 * @param parentAreaInSqKm
+	 *            area of the container in square kilometers.
+	 * 
+	 * @return area of child in sq km
+	 */
+	public static double getChildAreaSqKm(Set childSet, Set parentSet,
+			double parentAreaInSqKm) {
+		double area2 = getPolygonArea(childSet);
+		double area1 = getPolygonArea(parentSet);
+		double result = area2 / area1;
+		assert (result <= 1.0);
+		result *= parentAreaInSqKm;
+		return result;
+	}
+
+	/**
+	 * get the area of any STEM polygon in polygon lt,lg units
+	 * 
+	 * @param p
+	 *            a STEM polygon
+	 * 
+	 * @return the area in polygon units for the STEM polygon
+	 */
+	public static double getPolygonArea(STEMPolygon p) {
+
+		double area = 0.0;
+		Double[] ltPoints = p.getLtPoints();
+		Double[] lgPoints = p.getLgPoints();
+		int n = ltPoints.length;
+		for (int i = 0; i < n - 1; i++) {
+			// System.out.println("****************** ****************");
+			// System.out.println(" ltPoints[" + i + "] = " +
+			// ltPoints[i].doubleValue() );
+			// System.out.println(" ltPoints[" + (i + 1) + "] = "
+			// + ltPoints[i + 1].doubleValue() );
+			// System.out.println(" lgPoints[" + i + "] = " +
+			// lgPoints[i].doubleValue());
+			// System.out.println(" lgPoints[" + (i + 1) + "] = "
+			// + lgPoints[i + 1].doubleValue());
+			// System.out.println("****************** ****************");
+			area += (ltPoints[i].doubleValue() * lgPoints[i + 1].doubleValue())
+					- (ltPoints[i + 1].doubleValue() * lgPoints[i]
+							.doubleValue());
+		} // next point
+		// System.out.println("Area is : " + area);
+		area /= 2.0;
+
+		return Math.abs(area);
+	}
+
+	/**
+	 * get the area of any polygon in polygon x,y units
+	 * 
+	 * @param polySet -
+	 *            a set of java.awt.Polygon all representing one location this
+	 *            might be a cluster of islands that together make up a place
+	 * 
+	 * @return the area in polygon x,y units
+	 */
+	public static double getPolygonArea(Set polySet) {
+		double area = 0.0;
+		Iterator iter = polySet.iterator();
+		while (iter.hasNext()) {
+			double inner = 0.0;
+			Polygon p = (Polygon) iter.next();
+			int[] x = p.xpoints;
+			int[] y = p.ypoints;
+			int n = x.length;
+			for (int i = 0; i < n - 1; i++) {
+				inner += (x[i] * y[i + 1]) - (x[i + 1] * y[i]);
+			} // next point
+			inner /= 2.0;
+			area += Math.abs(inner);
+		} // next polygon
+		return area;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            the location for which we want to find the area
+	 * 
+	 * @param entityContainer
+	 *            a container for the location (entity)
+	 * 
+	 * @param level
+	 *            the administrative level
+	 * 
+	 * @return the area value
+	 */
+	protected String getArea(String entity, String entityContainer, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int AREA = 2;
+
+		String[] areaData = null;
+
+		Iterator it = areaList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String entityContainerStr = entityContainer.toUpperCase();
+
+		while (it.hasNext()) {
+
+			areaData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = areaData[ENTITY].toUpperCase().trim();
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						// Check both entities belong to same level
+						if (String.valueOf(level)
+								.equals(areaData[LEVEL].trim()) == false) {
+							// Ignore : same name , but different level
+							continue;
+						}
+
+						return areaData[AREA].trim();
+
+					}
+
+				}
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(areaData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+				return areaData[AREA].trim();
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * The execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int AREA_DATA = 3;
+		// final int TARGET_LIST = 4;
+		// final int LEX_DIR = 5;
+		// final int OUTPUT_DIR = 6;
+		// final int PARAMS = 7;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Area data file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//		
+		// PolygonAreaGenerator gen = new PolygonAreaGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[AREA_DATA],
+		// args[TARGET_LIST], args[LEX_DIR], args[OUTPUT_DIR]);
+		// gen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		PolygonAreaGenerator gen = new PolygonAreaGenerator(args[CONFIG_FILE]);
+
+		gen.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationDataMigrator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationDataMigrator.java
new file mode 100644
index 0000000..3716a4b
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationDataMigrator.java
@@ -0,0 +1,424 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * STEM II Data Migration/Generation Utilities -- This is a utility class that
+ * extracts the population data from the STEM I data files as a simple text file
+ * that will be used in STEM II. The population data extracted is used during
+ * generation of STEM II properties files.
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\migration\country_names.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * 
+ */
+
+public class PopulationDataMigrator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String isoFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	String populationList = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	/**
+	 * A map containing tuples of the form (location,area)
+	 */
+	Map populationMap = null;
+
+	Map nameMap = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param isoFile -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 */
+	public PopulationDataMigrator(String isoFile, String targetFile,
+			String outputDir) {
+		this.isoFile = isoFile;
+		this.targetFile = targetFile;
+		this.outputDir = outputDir;
+		populationMap = new HashMap();
+		nameMap = new HashMap();
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(isoFile);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Method that loads the XML file containing the tests for this actor.
+	 * 
+	 * @param fileName
+	 *            the XML test file
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return the root element of the XML document.
+	 * 
+	 */
+	protected Element loadXML(String fileName) {
+
+		Document doc = null;
+		DocumentBuilder docBuilder = null;
+
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory
+					.newInstance();
+			// XML document builder
+			docBuilder = factory.newDocumentBuilder();
+			doc = docBuilder.newDocument();
+			// Load XML file
+			File xmlFile = new File(fileName);
+			String filePath = xmlFile.getAbsolutePath();
+			System.out.println("File path = " + filePath); //$NON-NLS-1$
+			doc = docBuilder.parse(filePath);
+		} catch (ParserConfigurationException pce) {
+			System.out
+					.println("LoadXML():  Error configuring xml document builder " //$NON-NLS-1$
+							+ pce.getMessage());
+		} catch (SAXException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		// Return the root of this XML document
+		return doc.getDocumentElement();
+	}
+
+	/**
+	 * Read all arguments in a dataset, one by one.
+	 * 
+	 * @param file
+	 *            a filename
+	 * 
+	 * @param level
+	 *            adminstrative level
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return a map with tuples (Key=ID,Value=Populations)
+	 * 
+	 * 
+	 */
+	protected Map extractPopulationData(String file, int level) {
+
+		Map<String, String> pMap = new HashMap<String, String>();
+
+		Element root = loadXML(file);
+		// get all the elements
+		NodeList nl = root.getElementsByTagName("*"); //$NON-NLS-1$
+
+		for (int i = 0; i < nl.getLength(); i++) {
+			Element el = (Element) nl.item(i);
+			String name = el.getAttribute("locationId").toUpperCase(); //$NON-NLS-1$
+			String population = el.getAttribute("population"); //$NON-NLS-1$
+			// String density = el.getAttribute("population_density");
+			// //$NON-NLS-1$
+			pMap.put(name, population);
+
+		}
+
+		return pMap;
+	}
+
+	// protected String extractPopulationData(String file, int level) {
+	//
+	// String populationList = null;
+	//
+	// Map<String, String> populationMap = new HashMap<String, String>();
+	//
+	// Element root = loadXML(file);
+	// // get all the elements
+	// NodeList nl = root.getElementsByTagName("*"); //$NON-NLS-1$
+	//
+	// for (int i = 0; i < nl.getLength(); i++) {
+	// Element el = (Element) nl.item(i);
+	// String name = el.getAttribute("locationId").toUpperCase(); //$NON-NLS-1$
+	// String population = el.getAttribute("population"); //$NON-NLS-1$
+	// String density = el.getAttribute("population_density"); //$NON-NLS-1$
+	// // Store (concatenate)
+	// if (populationList == null) {
+	// populationList = name + ":" + String.valueOf(level) + ":" //$NON-NLS-1$
+	// //$NON-NLS-2$
+	// + population + ":" + density + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+	// } else {
+	// populationList += name + ":" + String.valueOf(level) + ":" //$NON-NLS-1$
+	// //$NON-NLS-2$
+	// + population + ":" + density + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+	// }
+	// }
+	//
+	// return populationList;
+	// }
+
+	/**
+	 * Read all arguments in a dataset, one by one.
+	 * 
+	 * @param the
+	 *            filename
+	 * 
+	 * @throws FileNotFoundException
+	 * @throws IOException
+	 * 
+	 * @return a map with tuples (Key=ID,Value=Name)
+	 * 
+	 */
+	protected Map extractNameData(String file) {
+
+		Map<String, String> nameMap = new HashMap<String, String>();
+
+		Element root = loadXML(file);
+		// get all the elements
+		NodeList nl = root.getElementsByTagName("*"); //$NON-NLS-1$
+
+		for (int i = 0; i < nl.getLength(); i++) {
+			Element regions = (Element) nl.item(i);
+			NodeList locations = regions.getElementsByTagName("location"); //$NON-NLS-1$
+			for (int j = 0; j < locations.getLength(); j++) {
+				Element el = (Element) locations.item(j);
+				String id = el.getAttribute("id").toUpperCase(); //$NON-NLS-1$
+				String name = el.getAttribute("name").toUpperCase(); //$NON-NLS-1$
+
+				// Store both values for later lookup. Use uppercase.
+				nameMap.put(id, name);
+			}
+		}
+
+		return nameMap;
+	}
+
+	/**
+	 * Find all matches between locations and form a new tuple with the location
+	 * name and area value for each location.
+	 * 
+	 * @param m1
+	 *            A map containing tuples of the form (location,population)
+	 * @param m2
+	 *            A map containing tuples of the form (location,name)
+	 * @param level
+	 *            The administrative level
+	 * 
+	 * s@return A tuple of the form (name:area)
+	 */
+	protected String match(Map m1, Map m2, int level) {
+
+		String result = null;
+		Set keys = m1.keySet();
+		Iterator it1 = keys.iterator();
+
+		while (it1.hasNext()) {
+
+			String key = (String) it1.next();
+
+			if (m2.containsKey(key)) { // To be more strict, change this to
+				// m2.equals(key)
+				if (result == null) {
+
+					if (((String) m2.get(key)).startsWith(":")) { //$NON-NLS-1$
+						System.out.println("" //$NON-NLS-1$
+								+ m2.get(key));
+					}
+
+					result = m2.get(key) + ":" + String.valueOf(level) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+							+ m1.get(key) + "\n"; //$NON-NLS-1$
+				} else {
+					result += m2.get(key) + ":" + String.valueOf(level) + ":" //$NON-NLS-1$ //$NON-NLS-2$
+							+ m1.get(key) + "\n"; //$NON-NLS-1$
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Process our global list of countries.
+	 * 
+	 */
+	public void process() {
+
+		PrintWriter outputFile = null;
+
+		// Admin levels for each country
+		// TO DO: fix these hardcoded variables. Should be set via parameters.
+		final String populationPath = "C:\\EclipseProjects\\workspace2\\GreenScreen\\InstallTemplate\\Populations\\"; //$NON-NLS-1$
+		final String namePath = "C:\\EclipseProjects\\workspace2\\GreenScreen\\InstallTemplate\\Maps\\"; //$NON-NLS-1$
+
+		final int LEVELS = 1;
+
+		for (int i = 0; i < targetList.size(); i++) {
+
+			// Get the next country in the list.
+			String country = ((String) targetList.get(i)).trim();
+
+			// Get the ISO3166-1 info for this country
+			ISOCode1 isoCode = GenUtils.getISOCode(country, codeList);
+
+			if (isoCode == null) {
+				System.out.println("iso code is null for " + country); //$NON-NLS-1$
+				continue;
+			}
+
+			System.out.println("Country is :  " + country + " code = " //$NON-NLS-1$ //$NON-NLS-2$
+					+ isoCode.getName());
+
+			// Open output file
+			if (outputFile == null) {
+				String fileName = outputDir;
+				fileName += isoCode.getName() + "_POPULATION.txt"; //$NON-NLS-1$
+				outputFile = GenUtils.openWriter(fileName);
+			}
+
+			for (int j = 0; j <= LEVELS; j++) {
+
+				// Open the population file
+				String populationFile = populationPath;
+				populationFile += isoCode.getAlpha3() + "_Human_" + j + ".xml"; //$NON-NLS-1$ //$NON-NLS-2$
+				BufferedReader populationReader = GenUtils
+						.openReader(populationFile);
+				if (populationReader == null) {
+					System.out
+							.println("File not found for : " + populationFile); //$NON-NLS-1$
+					continue;
+				}
+
+				// Open the names file
+				String nameFile = namePath;
+				nameFile += isoCode.getAlpha3() + "_Names_" + j + ".xml"; //$NON-NLS-1$ //$NON-NLS-2$
+				BufferedReader nameReader = GenUtils.openReader(nameFile);
+				if (nameReader == null) {
+					System.out.println("File not found for : " + nameFile); //$NON-NLS-1$
+					continue;
+				}
+
+				// Load the XML area and names documents and extract the data we
+				// need
+				try {
+					// populationList = extractPopulationData(populationFile,
+					// j);
+					populationMap = extractPopulationData(populationFile, j);
+					nameMap = extractNameData(nameFile);
+					// now do the matchings
+					String tuple = match(populationMap, nameMap, j);
+
+					// write match to output file
+					// outputFile.write(populationList.toString());
+					outputFile.write(tuple);
+
+					// Close the resources
+					populationReader.close();
+					nameReader.close();
+					populationReader = null;
+					nameReader = null;
+					populationFile = null;
+					nameFile = null;
+
+					// Run garbage collection
+					System.gc();
+
+				} catch (IOException e) {
+					e.printStackTrace();
+					continue;
+				}
+			} // for j
+
+			if (outputFile != null) {
+				outputFile.close();
+				outputFile = null;
+			}
+		}
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		final int ISO_FILE = 0;
+		final int COUNTRY_FILE = 1;
+		final int OUTPUT_DIR = 2;
+		final int PARAMS = 3;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$
+			System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$						
+			System.out.println("\t\t Target countries file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$								
+			return;
+		}
+
+		PopulationDataMigrator migrator = new PopulationDataMigrator(
+				args[ISO_FILE], args[COUNTRY_FILE], args[OUTPUT_DIR]);
+		migrator.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationGenerator.java
new file mode 100644
index 0000000..ff7100f
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationGenerator.java
@@ -0,0 +1,1158 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- This class is a utility to
+ * generate the population.properties files.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/PopulationGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\PopulationGenerator.config)
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+
+public class PopulationGenerator {
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String populationData = null;
+
+	private String populationProfile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * Lists for ISO 3166-1 codes, target countries, and population data.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List populationList = null;
+
+	List populationProfileList = null;
+
+	List usaLevel2List = null;
+
+	/**
+	 * Hash set for storing the source URLs relevant to area data.
+	 */
+	Set<String> urlSet = null;
+
+	/**
+	 * Hash map to keep track of which sources will be shown commented out and
+	 * which will appear active.
+	 */
+	HashMap<String, Boolean> urlStatus = null;
+
+	/**
+	 * String used to indicate default value for unknown areas.
+	 */
+	String DEFAULT = "0"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            file with the ISO3166-2 data used for generating the IDs.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param populationData -
+	 *            the directory containing population data for all countries
+	 * @param populationProfile -
+	 *            the directory containing population profile data for all
+	 *            countries
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public PopulationGenerator(String iso3166_1, String iso3166_2,
+	// String fixFile, String populationData, String populationProfile,
+	// String targetFile, String lexDir, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// this.populationData = populationData;
+	// this.populationProfile = populationProfile;
+	// this.lexDir = lexDir;
+	// targetList = null;
+	// // Set the URL IDs that are relevant for area data.
+	// initPopulationURLSet();
+	// // Set which URLs are active and which ones should be commented out.
+	// setURLStatus();
+	// }
+	/**
+	 * @param configFile
+	 */
+	public PopulationGenerator(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("AREA_POP")) { //$NON-NLS-1$
+				populationData = vars.get(var);
+			} else if (var.equals("POP_PROFILES")) { //$NON-NLS-1$
+				populationProfile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (populationData == null) {
+			populationData = path + GenConstants.AREA_POPULATION_DIR;
+		}
+		if (populationProfile == null) {
+			populationProfile = path + GenConstants.POPULATION_PROFILES;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+		if (outputDir == null) {
+			outputDir = workspace + GenConstants.PROPERTIES_OUTPUT_DIR;
+		}
+
+		targetList = null;
+		// Set the URL IDs that are relevant for area data.
+		initPopulationURLSet();
+		// Set which URLs are active and which ones should be commented out.
+		setURLStatus();
+
+	}
+
+	/**
+	 * Sets the URL IDs relevant for area data. This can be different for
+	 * different types of data. For example, for population data, we are
+	 * interested on ID = CIA
+	 */
+	protected void initPopulationURLSet() {
+		urlSet = new HashSet<String>();
+		urlSet.add(new String("USCENSUSPOP")); //$NON-NLS-1$
+		urlSet.add(new String("USCENSUSPUERTORICO")); //$NON-NLS-1$
+		urlSet.add(new String("CITYPOP")); //$NON-NLS-1$
+		urlSet.add(new String("CIA")); //$NON-NLS-1$
+		urlSet.add(new String("POP")); //$NON-NLS-1$
+		urlSet.add(new String("POP2")); //$NON-NLS-1$
+		urlSet.add(new String("DEMOGRAFIA")); //$NON-NLS-1$
+		urlSet.add(new String("STATOIDS")); //$NON-NLS-1$
+		urlSet.add(new String("UNITEDNATIONS")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Set which URL appears as uncommented or ACTIVE and which ones appear as
+	 * commented out or SECONDARY. Only URL should be active. All others should
+	 * appear commented.
+	 * 
+	 */
+	protected void setURLStatus() {
+		urlStatus = new HashMap<String, Boolean>();
+		// This will be the active URL.
+		urlStatus.put("CIA", new Boolean(true)); //$NON-NLS-1$
+		// All other URLs appear as commented out, secondary.
+		urlStatus.put("USCENSUSPOP", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("USCENSUSPUERTORICO", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("CITYPOP", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("CIA", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("POP2", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("POP", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("DEMOGRAFIA", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("STATOIDS", new Boolean(false)); //$NON-NLS-1$
+		urlStatus.put("UNITEDNATIONS", new Boolean(true)); //$NON-NLS-1$
+	}
+
+	/**
+	 * Run the generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// THIS IS AN SPECIAL CASE.
+		// FOR THE USA ONLY, WE HAVE THE LEVEL 2 DATA FOR ALL COUNTIES.
+		usaLevel2List = GenUtils
+				.populateList(GenConstants.USA_LEVEL_2_POPULATION);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its population.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		final int LEVEL_1 = 1;
+		final int LEVEL_2 = 2;
+
+		// A writer for the new file we are creating.
+		PrintWriter propertiesFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Name of the fix file for a given country
+		// String fixFile = null;
+
+		// A writer for the fix file
+		// PrintWriter fixWriter = null;
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its population.properties file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< POPULATION GENERATOR -- Processing country : " + file + //$NON-NLS-1$
+							">>>>"); //$NON-NLS-1$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous level.
+					int oldLevel = level - 1;
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+					// String used to ignore repeated entries.
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficiency.
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// We need a fix file to keep track of all unmatched
+						// items
+						// TO DO : match all unmatched items manually
+						// if (fixWriter == null) {
+						// fixFile = outputDir + "LEVEL1_POP_FIX.txt";
+						// System.out.println("Fix file name is : " + fixFile);
+						// // Open the fix writer
+						// fixWriter = GenUtils.openWriter(fixFile);
+						// }
+
+						// Read and keep in memory a list of the population data
+						// for this country.
+						if (populationList == null) {
+							String name = populationData + country
+									+ "_POPULATION.txt"; //$NON-NLS-1$
+							populationList = GenUtils.populateList(name);
+
+							// Create the file name for the new properties.file.
+							name = populationProfile + "\\" //$NON-NLS-1$
+									+ isoCode.getAlpha3() + "\\" //$NON-NLS-1$
+									+ isoCode.getAlpha3() + "_" //$NON-NLS-1$
+									+ "population.profile"; //$NON-NLS-1$
+
+							populationProfileList = GenUtils.populateList(name);
+
+						}
+
+						// Get the level of the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldLevel) ? true : false;
+
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldLevel = level;
+							// Reset our repeated history
+							if (entryList != null) {
+								entryList.clear();
+							}
+							entryList = new ArrayList<String>();
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							if (propertiesFile != null) {
+								// System.out.println("\t\tGenerated : "
+								// + fileName);
+								propertiesFile.close();
+								propertiesFile = null;
+								fileName = null;
+							}
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (propertiesFile == null) {
+							// Create the file name for the new properties.file.
+							String alpha3 = isoCode.getAlpha3();
+							fileName = countryDir + "\\" + alpha3 + "_" + level //$NON-NLS-1$ //$NON-NLS-2$
+									+ "_human_2000_" + "population.properties"; //$NON-NLS-1$ //$NON-NLS-2$
+							// Create tne new population file for this country.
+							propertiesFile = GenUtils.openWriter(fileName);
+						}
+
+						// Variable used to hold the formatted output data.
+						String data = null;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// We have switched to a different data level (i,e,
+						// admin 0 to admin 1)
+						if (transition == true) {
+							// Just add the header
+							data = getHeader(isoCode, level);
+							GenUtils.addData(propertiesFile, data);
+							// Forget the data we just wrote.
+							data = null;
+						}
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+
+							// Handle data level 0 different that the other
+							// admin levels.
+
+							if (transition == true) {
+								data = "# Country\n"; //$NON-NLS-1$
+								data += isoCode.getAlpha3() + " = " //$NON-NLS-1$
+										+ getPopulation(country, level);
+								// Write formatted output
+								GenUtils.addData(propertiesFile, data);
+							}
+							continue;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // Switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// Verify for repeated entries -- avvoid duplcates
+						switch (level) {
+
+						case LEVEL_1:
+							if (GenUtils.isRepeated(current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(current);
+							break;
+
+						case LEVEL_2:
+							if (GenUtils.isRepeated(items[ISOData.ADMIN1_NAME]
+									+ current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+							// Remember this entity to avoid duplicates.
+							entryList.add(items[ISOData.ADMIN1_NAME] + current);
+							break;
+
+						}
+
+						// If ISO2Code is equal to entity, then we dont have a
+						// match. Add it to fix file. DONT DELETE
+						// if (descriptor.equals(current) && level == 1) {
+						// // Unmatched item, add it to our fix file
+						// fixWriter.write(country + ":" + descriptor
+						// + ":UNKNOWN:UNKNOWN\n");
+						// }
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list
+								// of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex 1 object to which lex2Current belongs
+							// to.
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							// STEP 2: piece together the ID using the
+							// proper lex objects : the USA is a special
+							// case
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								descriptor = lex1Current.getDescriptor()
+										+ "-" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndexUSA();
+							} else {
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+								// Add some commens to allow reverse engineering
+								// or
+								// backtracking the origin of this generated key
+								// as
+								// much as possible.
+								data = "# Generated key details : " //$NON-NLS-1$
+										+ " Level 1 ( " //$NON-NLS-1$
+										+ lex1Current.getDescriptor()
+										+ " = " //$NON-NLS-1$
+										+ lex1Current.getAdmin1()
+										+ " ). " //$NON-NLS-1$
+										+ "Level 2 ( " //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex()
+										+ " = " + lex2Current.getAdmin2() //$NON-NLS-1$
+										+ " ). \n"; //$NON-NLS-1$
+
+							}
+
+						} else { // Compose descriptor for level 1 and level
+							// 0 data
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+
+								// If there is no descriptor still, generate
+								// one!
+								if (descriptor.equals(current) == true) {
+									descriptor = isoCode.getAlpha2() + "-" //$NON-NLS-1$
+											+ current;
+								}
+							}
+
+							// Handle the USA as a special case
+							if (descriptor.contains("US-")) { //$NON-NLS-1$
+								data = "#" + current + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+							}
+						}
+
+						String population = null;
+
+						switch (level) {
+
+						case 1:
+							population = getPopulation(current,
+									items[ISOData.COUNTRY_NAME], level);
+							break;
+
+						case 2:
+
+							// Treat the USA as a special case :
+							// for the USA we have a list of level 2 data.
+							if (descriptor.contains("US-")) { //$NON-NLS-1$
+
+								// First, find the ISOCode2 for this USA admin.
+								ISOCode2 code = GenUtils.getISO2Object(
+										iso2List, items[ISOData.ADMIN1_NAME],
+										isoCode.getAlpha2());
+
+								// Second, find the area for this USA admin.
+								population = GenUtils.getLevel2Data(
+										items[ISOData.ADMIN2_NAME], code
+												.getIndex(), usaLevel2List);
+								break;
+							}
+
+							if (items[ISOData.ADMIN1_NAME].equals("N.A.")) { //$NON-NLS-1$
+								// This will handle unknown locations.
+								population = getPopulation(current, current,
+										level);
+							} else {
+								population = getPopulation(current,
+										items[ISOData.ADMIN1_NAME], level);
+							}
+
+							// If returned population = DEFAULT, then we dont
+							// have a population value for it.
+							// Compute the approximate population based on the
+							// population for the level 1 container.
+							if (population == DEFAULT) {
+								population = getApproximatePopulation(items[ISOData.ADMIN1_NAME]);
+							}
+							break;
+						}
+
+						if (data != null) {
+							data += descriptor + " = " + population + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						} else {
+							data = descriptor + " = " + population + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+						}
+
+						// Write formatted output
+						GenUtils.addData(propertiesFile, data);
+						data = null;
+
+					} // while loop
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Reset the population list
+					if (populationList != null) {
+						populationList.clear();
+						populationList = null;
+					}
+
+					// Close all open resources.
+					reader.close();
+
+					if (propertiesFile != null) {
+						propertiesFile.close();
+						propertiesFile = null;
+						// System.out.println("\t\tGenerated : " + fileName);
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // For loop
+
+		// Close the fix writer : DONT DELETE
+		// if (fixWriter != null) {
+		// System.out.println("Closing fix file");
+		// fixWriter.close();
+		// fixWriter = null;
+		// fixFile = null;
+		// }
+	}
+
+	/**
+	 * Generate the header comment for this file.
+	 * 
+	 * @param code
+	 * @param level
+	 * 
+	 * @return the header for the document
+	 * 
+	 */
+	protected String getHeader(ISOCode1 code, int level) {
+
+		final int DATA_DESCRIPTOR = 0;
+		final int URL = 1;
+
+		// Create the file name for the URL file.
+		String urlFile = workspace + GenConstants.PARAMS_DIR
+				+ GenConstants.URLS_DIR;
+		urlFile += code.getName() + ".txt"; //$NON-NLS-1$
+
+		String header = "# " + code.getAlpha3() + "_" + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ "_human_2000_population.properties \n"; //$NON-NLS-1$
+		// header += Calendar.getInstance().getTime() + "\n";
+		header += "# This file contains population values for the " //$NON-NLS-1$
+				+ code.getName() + " in 2000\n"; //$NON-NLS-1$
+
+		header += "#\n"; //$NON-NLS-1$
+		// header += "# Where no population data was available for the level 2
+		// regions within a country, the population values have\n";
+		// header += "# been set to the Level 1 parent region population (P)
+		// divided by the number of contained level 2 child regions (N).\n";
+		// header += "# The approximation enforces that the sum of level 2
+		// populations = the level 1 population and allows composition of a
+		// model\n";
+		// header += "# using the available map resolutions. These approximation
+		// values will be replaced as better data becomes available.\n";
+		// header += "# The regions where this approximation was used are
+		// identified by the fact that all level 2 regions have the same\n";
+		// header += "# population (P/N).\n";
+		// header += "#\n";
+
+		// Add the copyright statement.
+		header += GenUtils.getCopyright();
+
+		// Add an explanation of the key format in our data files.
+		header += GenUtils.getKeyFormatExplanation();
+
+		header += "# This is the name of the class that will interpret the rest of the file's contents\n"; //$NON-NLS-1$
+		header += "RECORD_CLASSNAME = org.eclipse.stem.internal.data.CountryGraphRecord$CountryPopulationLabelGraphRecord\n\n"; //$NON-NLS-1$
+
+		header += "# The ISO-3166-1 alpha3 code for the country\n"; //$NON-NLS-1$
+		header += "ISOKEY = " + code.getAlpha3() + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$	
+
+		// header += "# The units are individuals\n\n";
+
+		header += "# The administration level of the population data\n"; //$NON-NLS-1$
+		header += "ADMIN_LEVEL = " + level + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+		header += "# This is the date range for which the population values in this file are valid \n"; //$NON-NLS-1$
+		header += "# See http://purl.org/dc/terms/1.1/valid\n"; //$NON-NLS-1$
+		header += "VALID = start=2006-01-01; end=2006-12-31;\n\n"; //$NON-NLS-1$
+
+		// The United Nations data policy applies only to Europe :
+		// header += GenUtils.getUNPolicy();
+
+		header += "# This is the source of the data\n"; //$NON-NLS-1$
+
+		// Open the URL file for this country.
+		// System.out.println("url file = " + urlFile);
+		BufferedReader urlReader = GenUtils.openReader(urlFile);
+
+		try {
+			// Add all the source URLs for this country.
+			if (urlReader != null) {
+				String buffer = null;
+				while (GenUtils.EOF(buffer = urlReader.readLine()) != true) {
+
+					// System.out.println("Buffer = " + buffer);
+
+					// Tokenize
+					StringTokenizer tokenizer = new StringTokenizer(buffer, "*"); //$NON-NLS-1$
+
+					// We know that we expect only two tokens. Get them. Order
+					// matters here.
+					String[] tokens = new String[2];
+					tokens[DATA_DESCRIPTOR] = tokenizer.nextToken();
+					tokens[URL] = tokenizer.nextToken();
+
+					if (GenUtils.isSourceURL(urlSet, tokens[DATA_DESCRIPTOR]) == true) {
+
+						// try {
+						// Is this data descriptor one of our active data
+						// sources ?
+						if (GenUtils.isActiveURL(urlStatus,
+								tokens[DATA_DESCRIPTOR]) == false) {
+							// No, it is not one an active URL, so comment it
+							// out
+							// header += "# " + "SOURCE = " +
+							// URLEncoder.encode(tokens[URL], "UTF-8") + "\n";
+							header += "# " + "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+						} else {
+							// header += "SOURCE = " +
+							// URLEncoder.encode(tokens[URL], "UTF-8") + "\n";
+							header += "SOURCE = " + tokens[URL] + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+
+						}
+
+						// } catch (java.io.UnsupportedEncodingException e) {
+						// System.out.println("Error:" + e.getMessage());
+						// //$NON-NLS-1$
+						// }
+
+					}
+
+				} // while
+
+				// To make it look better, add an extra new line.
+				header += "\n"; //$NON-NLS-1$
+
+			}
+
+		} catch (IOException e) {
+			//
+		}
+
+		header += "# The population identifier\n"; //$NON-NLS-1$
+		header += "POPULATION = human\n\n"; //$NON-NLS-1$
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			// Do nothing.
+			break;
+
+		case DataTypes.LEVEL_1:
+			header += "# State/Province\n\n"; //$NON-NLS-1$
+			break;
+
+		case DataTypes.LEVEL_2:
+			header += "# Level 1 (admin 1 = e.g., state)\n"; //$NON-NLS-1$
+			header += "# Level 2 (admin 2 = e.g., county)\n\n"; //$NON-NLS-1$
+			break;
+
+		default:
+			break;
+
+		}
+
+		return header;
+	}
+
+	/**
+	 * Compute a default population value based on data from container
+	 * 
+	 * @param entity
+	 *            the location for which we want to create an approximate value
+	 * 
+	 * @return the approximate population value
+	 */
+
+	protected String getApproximatePopulation(String entity) {
+
+		final int LOCATION = 0;
+		final int POPULATION = 1;
+		final int COUNT = 2;
+
+		String entityStr = entity.toUpperCase().trim();
+
+		Iterator it = populationProfileList.iterator();
+
+		while (it.hasNext()) {
+
+			String current = (String) it.next();
+
+			// Tokenize
+			StringTokenizer tokenizer = new StringTokenizer(current, ":"); //$NON-NLS-1$
+
+			// We know that we expect only two tokens. Get them.
+			// Order matters here.
+			String[] tokens = new String[3];
+			// This is the admin1 region
+			tokens[LOCATION] = tokenizer.nextToken().toUpperCase().trim();
+			// This is the population value
+			tokens[POPULATION] = tokenizer.nextToken();
+			// This is the number of admin2 location within this admin 1 region
+			tokens[COUNT] = tokenizer.nextToken();
+
+			if (tokens[LOCATION].equals(entityStr)
+					&& Integer.parseInt(tokens[2]) != 0) {
+				// System.out.println("Value is : " + tokens[1]);
+				int val = Integer.parseInt(tokens[1].replace(",", "")) //$NON-NLS-1$ //$NON-NLS-2$
+						/ Integer.parseInt(tokens[2]);
+				return String.valueOf(val);
+			}
+
+		}
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location
+	 * @param level
+	 *            administrative level for the location (entity)
+	 * 
+	 * @return the population for a location
+	 */
+	protected String getPopulation(String entity, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase();
+
+		while (it.hasNext()) {
+
+			String[] popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			if (entityStr.equals(popData[ENTITY].trim().toUpperCase())) {
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+			}
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location.
+	 * @param entityContainer
+	 *            a container for the location (entity)
+	 * 
+	 * @return the population value for a location
+	 */
+	protected String getPopulation(String entity, String entityContainer,
+			int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		String[] popData = null;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		entityStr = entityStr.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		String entityContainerStr = entityContainer.toUpperCase();
+
+		while (it.hasNext()) {
+
+			popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = popData[ENTITY].toUpperCase().trim();
+
+			location = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						// Check both entities belong to same level
+						if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+							// Ignore : same name , but different level
+							continue;
+						}
+
+						return popData[POPULATION].trim();
+
+					}
+
+				}
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 * 
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int POPULATION_DATA = 3;
+		// final int POPULATION_PROFILE = 4;
+		// final int TARGET_LIST = 5;
+		// final int LEX_DIR = 6;
+		// final int OUTPUT_DIR = 7;
+		// final int PARAMS = 8;
+		//
+		// if (args.length < PARAMS) {
+		//
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Population data file"); //$NON-NLS-1$
+		// System.out.println("\t\t Population profile"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// PopulationGenerator gen = new PopulationGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[POPULATION_DATA],
+		// args[POPULATION_PROFILE], args[TARGET_LIST], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+		// gen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		PopulationGenerator gen = new PopulationGenerator(args[CONFIG_FILE]);
+		gen.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationModifier.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationModifier.java
new file mode 100644
index 0000000..fd32360
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationModifier.java
@@ -0,0 +1,100 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Given a data reference date (when was population values taken), a desired target date and
+ * a daily growth rate, reverse population values back (or forward) to the target date in
+ * all population properties file found in the target directory
+ */
+public class PopulationModifier {
+	
+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings("nls")
+	public static void main(String [] args) {
+		if(args.length < 4) {
+			System.err.println("Usage: PopulationModifier <target dir> <reference date> <target date> <daily growth rate>");
+			System.exit(-1);
+		}
+		
+		try {
+		String dir = args[0];
+		SimpleDateFormat sdf = new SimpleDateFormat("M/d/y");
+		Date ref = sdf.parse(args[1]);
+		Date target = sdf.parse(args[2]);
+		double daysbackward = (ref.getTime() - target.getTime()) / (3600*24*1000);
+		double growth = Double.parseDouble(args[3]);
+		
+		
+		File f = new File(dir);
+		if(!f.exists() || !f.isDirectory()) {
+			System.err.println("Error, "+dir+" is not a directory or doesn't exist");
+			System.exit(-1);
+		}
+		
+		
+		String [] files = f.list();
+		for(String file : files) {
+			if(!file.contains("_population.properties")) continue;
+			File propfile = new File(dir+File.separator+file);
+		
+			BufferedReader ireader = new BufferedReader(new InputStreamReader(new FileInputStream(propfile)));
+		   
+			FileWriter fw = new FileWriter(dir+File.separator+file+".new");
+			
+			String line;
+		    while((line=ireader.readLine()) != null) {
+		    	if(!line.startsWith("#") &&
+		    			!line.startsWith("RECORD_CLASSNAME") &&
+		    			!line.startsWith("ISOKEY") &&
+		    			!line.startsWith("ADMIN_LEVEL") &&
+		    			!line.startsWith("VALID") &&
+		    			!line.startsWith("SOURCE") &&
+		    			!line.startsWith("POPULATION") &&
+		    			!line.startsWith("YEAR") &&
+		    			!(line.trim().length() == 0)
+		    			) {
+		    		// Find the population number
+		    		
+		    		int eqindex = line.indexOf("=");
+		    		String pops = line.substring(eqindex+1);
+		    		double ref_pop = Double.parseDouble(pops);
+		    		double g = 1.0+growth;
+		    		double fact = Math.pow(g, daysbackward);
+		    		long target_pop = (long)(ref_pop / fact);
+		    		line = line.substring(0, eqindex)+" = "+target_pop;
+		    	}
+		    	fw.write(line+LS);
+		    }
+		    fw.flush();
+		    fw.close();
+		    
+		}  // For each file
+	} catch(Exception e) {
+		e.printStackTrace();
+	}
+		
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationProfiler.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationProfiler.java
new file mode 100644
index 0000000..a07fc25
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PopulationProfiler.java
@@ -0,0 +1,540 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this class finds
+ * out how many level 2 administrations each level 1 admin has. In other words,
+ * it profiles each level 1 admin based on its population and the number of
+ * level 2 administrations that belong to it.
+ * 
+ * To run add the following parameters to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\Countries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\profiles\
+ * 
+ */
+public class PopulationProfiler {
+
+	private String populationData = null;
+
+	private String outputDir = null;
+
+	private String targetFile = null;
+
+	private String iso3166_1 = null;
+
+	/**
+	 * Lists for population data.
+	 */
+
+	List targetList = null;
+
+	List populationList = null;
+
+	List codeList = null;
+
+	/**
+	 * String used to indicate default value for unknown areas.
+	 */
+	String DEFAULT = "0"; //$NON-NLS-1$
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param populationData -
+	 *            the directory containing population data for all countries
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	public PopulationProfiler(String iso3166_1, String populationData,
+			String targetFile, String outputDir) {
+		// Set values of global variables.
+		this.iso3166_1 = iso3166_1;
+		this.outputDir = outputDir;
+		this.targetFile = targetFile;
+		this.populationData = populationData;
+	}
+
+	/**
+	 * Run the generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Process our global list of target countries. For each country in list,
+	 * generate its population.properties file.
+	 * 
+	 */
+	protected void process() {
+
+		final int CONTAINER = 0;
+		final int COUNT = 1;
+
+		/**
+		 * Hash map for dealing with population data
+		 */
+		HashMap<String, String> pData = new HashMap<String, String>();
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// A writer for the new file we are creating.
+		PrintWriter propertiesFile = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its population.properties file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out.println("<<<< Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level
+					// of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+					// Record the previous level.
+					int oldLevel = level - 1;
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 120;
+
+					List<String> entryList = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficiency.
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Read and keep in memory a list of the population data
+						// for this country.
+						if (populationList == null) {
+							String name = populationData + country
+									+ "_POPULATION.txt"; //$NON-NLS-1$
+							populationList = GenUtils.populateList(name);
+						}
+
+						// Get the level of the data we are processing.
+						level = GenUtils.getDataLevel(items);
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldLevel) ? true : false;
+
+						if (transition == true) {
+							// Keep track of previous level in order to detect
+							// transitions.
+							oldLevel = level;
+							// Reset our repeated history
+							// repeatedEntries = new String();
+							entryList = new ArrayList<String>();
+							if (propertiesFile != null) {
+								System.out.println("\t\tGenerated : " //$NON-NLS-1$
+										+ fileName);
+								propertiesFile.close();
+								propertiesFile = null;
+								fileName = null;
+							}
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getAlpha3());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (propertiesFile == null) {
+							// Create the file name for the new properties.file.
+							String alpha3 = isoCode.getAlpha3();
+							fileName = countryDir + "\\" + alpha3 + "_" //$NON-NLS-1$ //$NON-NLS-2$
+									+ "population.profile"; //$NON-NLS-1$
+							// Create tne new population file for this country.
+							propertiesFile = GenUtils.openWriter(fileName);
+						}
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							// Do Nothinng
+							continue;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // Switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// Make sure this is not a repeated level 1 entry.
+						if (level == 1) {
+
+							if (GenUtils.isRepeated(current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+
+							// Remember this entity to avoid duplicates.
+							entryList.add(current);
+						}
+
+						// Make sure this is not a repeated level 2 entry.
+						if (level == 2) {
+
+							if (GenUtils.isRepeated(items[ISOData.ADMIN1_NAME]
+									+ current, entryList) == true) {
+								// Duplicated, ignore.
+								continue;
+							}
+
+							// Remember this entity to avoid duplicates.
+							entryList.add(items[ISOData.ADMIN1_NAME] + current);
+						}
+
+						String population = null;
+
+						population = getPopulation(items[ISOData.ADMIN1_NAME],
+								items[ISOData.COUNTRY_NAME], level);
+
+						// increase count for the container of this entity
+						String pVal = pData.get(items[ISOData.ADMIN1_NAME]);
+
+						if (pVal == null) {
+
+							pData.put(items[ISOData.ADMIN1_NAME], population
+									+ ":" + 0); //$NON-NLS-1$
+							continue;
+						}
+
+						// Tokenize
+						StringTokenizer tokenizer = new StringTokenizer(pVal,
+								":"); //$NON-NLS-1$
+
+						// We know that we expect only two tokens. Get them.
+						// Order matters here.
+						String[] tokens = new String[2];
+						// This is the location
+						tokens[CONTAINER] = tokenizer.nextToken().toUpperCase();
+						// This is the count of entities
+						tokens[COUNT] = tokenizer.nextToken();
+
+						int count = Integer.parseInt(tokens[1]);
+						count++;
+
+						pVal = tokens[CONTAINER] + ":" + count; //$NON-NLS-1$
+
+						pData.put(items[ISOData.ADMIN1_NAME], pVal);
+
+						System.out.println("Counted : " //$NON-NLS-1$
+								+ items[ISOData.ADMIN1_NAME] + " ADMIN 2 : " //$NON-NLS-1$
+								+ items[ISOData.ADMIN2_NAME]);
+
+					} // while loop
+
+					// Now write the results
+					Iterator it = pData.keySet().iterator();
+
+					while (it.hasNext()) {
+
+						String key = (String) it.next();
+						System.out.println("Key is " + key); //$NON-NLS-1$
+
+						String value = pData.get(key);
+						System.out.println("Value is : " + value); //$NON-NLS-1$
+
+						GenUtils.addData(propertiesFile, key + ":" + value //$NON-NLS-1$
+								+ "\n"); //$NON-NLS-1$
+
+					}
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Reset the population list
+					if (populationList != null) {
+						populationList.clear();
+						populationList = null;
+					}
+
+					// Reset teh hash map
+					pData.clear();
+
+					// Close all open resources.
+					reader.close();
+
+					if (propertiesFile != null) {
+						propertiesFile.close();
+						propertiesFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // For loop
+
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location
+	 * @param level
+	 *            administrative level
+	 * 
+	 * @return the population value for a location
+	 */
+	protected String getPopulation(String entity, int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase();
+
+		while (it.hasNext()) {
+
+			String[] popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			if (entityStr.equals(popData[ENTITY].trim().toUpperCase())) {
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+			}
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Find the population value for a given entity.
+	 * 
+	 * @param entity
+	 *            a location
+	 * 
+	 * @param entityContainer
+	 *            a container for the location (entity)
+	 * 
+	 * @return the population value for a location
+	 */
+	protected String getPopulation(String entity, String entityContainer,
+			int level) {
+
+		final int ENTITY = 0;
+
+		final int LEVEL = 1;
+
+		final int POPULATION = 2;
+
+		String[] popData = null;
+
+		Iterator it = populationList.iterator();
+
+		String entityStr = entity.toUpperCase().trim();
+
+		String entityContainerStr = entityContainer.toUpperCase();
+
+		while (it.hasNext()) {
+
+			popData = ((String) it.next()).split(":"); //$NON-NLS-1$
+
+			String[] compare = null;
+
+			// Get the entity name and remove blanks
+			String location = popData[ENTITY];
+
+			location = location.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			location = location.toUpperCase().trim();
+
+			// Handle Aliases -- complex stuff :$
+			if (location.contains("[")) { //$NON-NLS-1$
+
+				location = location.replace("]", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+				// Tokenize
+				StringTokenizer tokens = new StringTokenizer(location, "["); //$NON-NLS-1$
+
+				// Get tokens -> order matters here!
+				compare = new String[tokens.countTokens()];
+				int i = 0;
+				while (tokens.hasMoreTokens()) {
+					compare[i++] = tokens.nextToken().toUpperCase().trim();
+				}
+			}
+
+			if (compare != null) {
+				for (int i = 0; i < compare.length; i++) {
+					if (entityStr.replace("-", " ").equals( //$NON-NLS-1$ //$NON-NLS-2$
+							compare[i].replace("-", " ")) //$NON-NLS-1$ //$NON-NLS-2$
+							|| compare[i].equals(entityStr + "-1") //$NON-NLS-1$
+							|| compare[i].equals(entityContainerStr)) {
+
+						return popData[POPULATION].trim();
+					}
+
+				}
+			} else if (entityStr.equals(location)
+					|| entityStr.replace("-", " ").equals(location) //$NON-NLS-1$ //$NON-NLS-2$
+					|| location.equals(entityStr + "-1")) { //$NON-NLS-1$
+
+				// Check both entities belong to same level
+				if (String.valueOf(level).equals(popData[LEVEL].trim()) == false) {
+					// Ignore : same name , but different level
+					continue;
+				}
+
+				return popData[POPULATION].trim();
+
+			}
+
+		} // while
+
+		return DEFAULT;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 * 
+	 */
+	public static void main(String[] args) {
+		final int ISO_3166_1 = 0;
+		final int POPULATION_DATA = 1;
+		final int TARGET_LIST = 2;
+		final int OUTPUT_DIR = 3;
+		final int PARAMS = 4;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$
+			System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+			System.out.println("\t\t Population data file"); //$NON-NLS-1$
+			System.out.println("\t\t Target countries file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$								
+			return;
+		}
+
+		PopulationProfiler profiler = new PopulationProfiler(args[ISO_3166_1],
+				args[POPULATION_DATA], args[TARGET_LIST], args[OUTPUT_DIR]);
+		profiler.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PropertiesGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PropertiesGenerator.java
new file mode 100644
index 0000000..475a60f
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/PropertiesGenerator.java
@@ -0,0 +1,161 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities --This class generates all the
+ * property files for each country. It does so by invoking the Name, Area,
+ * Population, and Node Data generators.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/PropertiesGenerator.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\PropertiesGenerator.config)
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+
+public class PropertiesGenerator {
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+
+		// final int ISO_3166_1 = 0;
+		// final int ISO_3166_2 = 1;
+		// final int FIX_FILE = 2;
+		// final int CIA_DATA = 3;
+		// final int POPULATION_PROFILE = 4;
+		// final int COUNTRY_LIST = 5;
+		// final int POLYGON_AREAS = 6;
+		// final int LEX_DIR = 7;
+		// final int PROPERTIES_OUTPUT_DIR = 8;
+		// final int GML_OUTPUT_DIR = 9;
+		// final int PARAMS = 10;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t CIA data"); //$NON-NLS-1$
+		// System.out.println("\t\t Population profile"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Polygon areas"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory for properties files");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Output directory for GML maps");
+		// //$NON-NLS-1$
+		// return;
+		// }
+
+		// // Generate the names.properties files for each country.
+		// NameGenerator nameGen = new NameGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[COUNTRY_LIST],
+		// args[LEX_DIR], args[PROPERTIES_OUTPUT_DIR]);
+		// nameGen.run();
+		//
+		// // Run garbage collection
+		// System.gc();
+		//
+		// // Generate the population.properties files for each country.
+		// PopulationGenerator popGen = new
+		// PopulationGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[CIA_DATA],
+		// args[POPULATION_PROFILE], args[COUNTRY_LIST], args[LEX_DIR],
+		// args[PROPERTIES_OUTPUT_DIR]);
+		// popGen.run();
+		//
+		// // Run garbage collection
+		// System.gc();
+		//
+		// // Generate the area.properties files for each country.
+		// AreaGenerator areaGen = new AreaGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[CIA_DATA],
+		// args[COUNTRY_LIST], args[POLYGON_AREAS], args[LEX_DIR],
+		// args[PROPERTIES_OUTPUT_DIR]);
+		// areaGen.run();
+		//
+		// // Run garbage collection
+		// System.gc();
+		//
+		// // Generate the node.properties files for each country.
+		// NodeDataGenerator nodeDataGen = new
+		// NodeDataGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[COUNTRY_LIST],
+		// args[LEX_DIR], args[PROPERTIES_OUTPUT_DIR]);
+		// nodeDataGen.run();
+		//
+		// // Run garbage collection
+		// System.gc();
+		//
+		// // Generate the GML files for each country.
+		// GMLGenerator gmlGen = new GMLGenerator(args[ISO_3166_1],
+		// args[ISO_3166_2], args[FIX_FILE], args[COUNTRY_LIST],
+		// args[LEX_DIR], args[GML_OUTPUT_DIR]);
+		// gmlGen.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		// Generate the names.properties files for each country.
+		NameGenerator nameGen = new NameGenerator(args[CONFIG_FILE]);
+		nameGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the population.properties files for each country.
+		PopulationGenerator popGen = new PopulationGenerator(args[CONFIG_FILE]);
+		popGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the area.properties files for each country.
+		AreaGenerator areaGen = new AreaGenerator(args[CONFIG_FILE]);
+		areaGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the node.properties files for each country.
+		NodeDataGenerator nodeDataGen = new NodeDataGenerator(args[CONFIG_FILE]);
+		nodeDataGen.run();
+
+		// Run garbage collection
+		System.gc();
+
+		// Generate the GML files for each country.
+		GMLGenerator gmlGen = new GMLGenerator(args[CONFIG_FILE]);
+		gmlGen.run();
+
+	} // main
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaner.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaner.java
new file mode 100644
index 0000000..059f6af
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaner.java
@@ -0,0 +1,402 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * clean the data for Russia. This program will remove all unnecesary data from
+ * the original data source file for Russia. The original data source file for
+ * Russia was downloaded from :
+ * http://www.grid.unep.ch/data/data.php?category=human_related
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/RussiaDataCleaner.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\RussiaDataCleaner.config)
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\EuropeData2007\Russia\
+ * 
+ * Overview of the data generation process for the Russia data set.
+ * 
+ * 1) Data Cleaning : start by running RussiaDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named RussiaSorted.txt with cleaned data.
+ * 
+ * In other words : Russia.txt --> ||RussiaDataCleaner|| --> RussiaSorted.txt
+ * 
+ * NOTE: RussiaSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 
+ * 2) Data Converter : run RussiaDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 3) Area and Population Data Extraction : run RussiaDataExtractor to extract
+ * area and population data or all administrations in Russia.
+ * 
+ */
+public class RussiaDataCleaner {
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+	List<String> targetList = null;
+
+	List<String> codeList = null;
+
+	/**
+	 * Hash map to keep track of polygons.
+	 */
+	HashMap<String, String> map = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public RussiaDataCleaner(String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// map = new HashMap<String, String>();
+	//	}
+
+	/**
+	 * @param configFile
+	 */
+	public RussiaDataCleaner(String configFile) {
+	
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+		map = new HashMap<String, String>();
+
+	}
+
+	/**
+	 * This method sets up and runs the finder.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * Process our global list of target countries.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter russiaFile = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = targetList.get(i).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< RUSSIA DATA CLEANER -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$  //$NON-NLS-2$
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 200;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,,", ",UNKNOWN,UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.substring(BUFFER_MIN,
+								BUFFER_MAX).split(","); //$NON-NLS-1$
+
+						// Clear buffer of data we dont need.
+						String cleanBuffer = clean(buffer);
+
+						File countryDir = new File(outputDir);
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new file.
+						if (russiaFile == null) {
+							fileName = countryDir + "\\" + "RussiaSorted.txt"; //$NON-NLS-1$ //$NON-NLS-2$									
+							// Create tne new properties.file for this country.
+							russiaFile = GenUtils.openWriter(fileName);
+						}
+
+						String val = map
+								.get(items[RussiaDataCleaningHeader.NAME1]);
+						if (val != null) {
+							// Concatenate
+							val += cleanBuffer + "\n"; //$NON-NLS-1$
+						} else {
+							// First entry
+							val = cleanBuffer + "\n"; //$NON-NLS-1$
+						}
+						map.put(items[RussiaDataCleaningHeader.NAME1], val);
+
+					}// while
+
+					// Close all open resources.
+					reader.close();
+
+					if (russiaFile != null) {
+						String output = consolidateData(map);
+						if (output != null) {
+							GenUtils.addData(russiaFile, output);
+						}
+						russiaFile.close();
+						russiaFile = null;
+						System.out.println("" //$NON-NLS-1$
+								+ fileName);
+						fileName = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * 
+	 * Get all the values in the map.
+	 * 
+	 * @param map
+	 *            a map of locations
+	 * 
+	 * @return String a string will all locations grouped secuentialy.
+	 * 
+	 */
+	String consolidateData(HashMap<String, String> map) {
+
+		String value = null;
+
+		if (map.isEmpty()) {
+			return null;
+		}
+
+		Set<String> keys = map.keySet();
+
+		Iterator it = keys.iterator();
+
+		while (it.hasNext()) {
+
+			String key = (String) it.next();
+
+			if (value == null) {
+				value = map.get(key);
+			} else {
+				value += map.get(key);
+			}
+
+		}
+
+		return value;
+	}
+
+	/**
+	 * Remove all irrelevant data from our buffer
+	 */
+	String clean(String buffer) {
+
+		// Number of non-polygon columns.
+		final int LIMIT = 17;
+		String newBuffer = null;
+
+		String[] items = buffer.split(","); //$NON-NLS-1$
+
+		int index = 0;
+
+		while (index < items.length) {
+
+			if (index >= LIMIT) {
+				newBuffer += "," + items[index++]; //$NON-NLS-1$
+				continue;
+			}
+
+			switch (index) {
+
+			case RussiaDataCleaningHeader.ID:
+				newBuffer = items[index];
+				break;
+
+			case RussiaDataCleaningHeader.AREA:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.COUNTRY:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.NAME1:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.NAME2:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.NAME3:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.POP1:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			case RussiaDataCleaningHeader.POP2:
+				newBuffer += "," + items[index]; //$NON-NLS-1$
+				break;
+
+			}
+
+			index++;
+
+		}
+
+		return newBuffer;
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int TARGET_LIST = 0;
+		// final int OUTPUT_DIR = 1;
+		// final int PARAMS = 2;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// RussiaDataCleaner formatter = new
+		// RussiaDataCleaner(args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// formatter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		RussiaDataCleaner cleaner = new RussiaDataCleaner(args[CONFIG_FILE]);
+		cleaner.run();
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaningHeader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaningHeader.java
new file mode 100644
index 0000000..957ee93
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataCleaningHeader.java
@@ -0,0 +1,64 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * 
+ * Relevant keys to the Russian dataset. Keys in this class are used during the
+ * data cleaning process to extract only the relevant keys from the original
+ * data source file for Russia. These keys are used when running an instance of
+ * RussiaDataCleaner to perform data cleaning.
+ * 
+ */
+public abstract class RussiaDataCleaningHeader {
+
+	/**
+	 * Administration ID (numeric)
+	 */
+	public static final int ID = 4;
+
+	/**
+	 * Total Area
+	 */
+	public static final int AREA = 5;
+	
+	/**
+	 * Country identifier
+	 */
+	public static final int COUNTRY = 9;
+
+	/**
+	 * Location name 1
+	 */
+	public static final int NAME1 = 10;
+
+	/**
+	 * Location name 2
+	 */
+	public static final int NAME2 = 11;
+
+	/**
+	 * Location name 3
+	 */
+	public static final int NAME3 = 12;
+
+	/**
+	 * Population value (estimated population for 1995)
+	 */
+	public static final int POP1 = 14;
+
+	/**
+	 * Population value (concrete population)
+	 */
+	public static final int POP2 = 16;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataConverter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataConverter.java
new file mode 100644
index 0000000..9911dde
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataConverter.java
@@ -0,0 +1,402 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Convert a data file that comes into the format UN Russia :
+ * http://www.grid.unep.ch/data/data.php?category=human_related into the Diva
+ * format that the generators can handle. This wont format any arbitrary format
+ * into Diva format. Converts only : UN Russia format -> Diva format
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/RussiaDataConverter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\RussiaDataConverter.config)
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeNames.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\diva\Europe\ * Overview of the data generation process for the Russia data
+ * set.
+ * 
+ * 1) Data Cleaning : start by running RussiaDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named RussiaSorted.txt with cleaned data.
+ * 
+ * In other words : Russia.txt --> ||RussiaDataCleaner|| --> RussiaSorted.txt
+ * 
+ * NOTE: RussiaSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 
+ * 2) Data Converter : run RussiaDataConverter to convert file in cleaned format
+ * into Diva format. Process : RussiaSorted.txt --> ||RussiaDataConverter|| -->
+ * Russia.txt
+ * 
+ * 
+ * 3) Area and Population Data Extraction : run RussiaDataExtractor to extract
+ * area and population data or all administrations in Russia.
+ * 
+ * 
+ */
+
+public class RussiaDataConverter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List dataList = null;
+
+	/**
+	 * An index to count the number of unnamed entries in the data set.
+	 */
+	int unkCounter = 1;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param targetFile -
+	 *            list of target countries
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public RussiaDataConverter(String iso3166_1, /* String namesFile, */
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// }
+	/**
+	 * @param configFile
+	 */
+	public RussiaDataConverter(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Run the converter: UN Russia -> Diva set format
+		process();
+	}
+
+	/**
+	 * Convert a data file that comes into the format UN Russia :
+	 * http://www.grid.unep.ch/data/data.php?category=human_related into the
+	 * Diva format that the generators can handle. This wont format any
+	 * arbitrary format into Diva format. Converts only : UN Russiaan format ->
+	 * Diva format
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter divaFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next file in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< RUSSIA DATA CONVERTER -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$ 
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.split(","); //$NON-NLS-1$
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							String country = GenUtils.getCountryName(
+									items[RussiaDataFormattingHeader.COUNTRY]
+											.substring(0, 2), codeList);
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir
+								+ isoCode.getName());
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new output file.
+						if (divaFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ ".txt"; //$NON-NLS-1$
+
+							System.out.println("\t\tFilename  = " + fileName); //$NON-NLS-1$
+
+							// Create tne new file
+							divaFile = GenUtils.openWriter(fileName);
+						}
+
+						// Apply the formatting to the current buffer : UN
+						// Russia -> Diva format
+						String divaLine = convert2Diva(isoCode, items);
+
+						// Write the converted line
+						System.out.println("\t\tDiva string = " + divaLine); //$NON-NLS-1$
+						GenUtils.addData(divaFile, divaLine);
+
+					}// while
+
+					// Reset ISO Code
+					isoCode = null;
+
+					// Reset file name
+					fileName = null;
+
+					// Close the target file.
+					divaFile.close();
+					divaFile = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Convert the buffer given in UN Russia format into Diva format
+	 * 
+	 * @param isoCode
+	 *            ISO 3166-1 code
+	 * 
+	 * @param data
+	 *            a buffer with data on UN Russia format
+	 * 
+	 * @return converted string
+	 * 
+	 */
+	public String convert2Diva(ISOCode1 isoCode, String[] data) {
+
+		// ID,AREA,COUNTRY_CODE,NAME1,NAME2,NAME3,POP1,POP2,<...polygon data...>
+
+		// 1.0,2.9789999E+02,RUS,UNKNOWN,UNKNOWN,UNKNOWN,0.0,0.0,<...polygon
+		// data...>
+
+		// <ALPHA3,COUNTRY_NAME,ADMIN1,<...polygon data...>
+
+		// AGO,Angola,Luanda,<...polygon data...>
+
+		// The formatted prefix string
+		String divaString = ""; //$NON-NLS-1$
+
+		// Get relevant data for conversion.
+		String alpha2 = isoCode.getAlpha2();
+		String alpha3 = isoCode.getAlpha3();
+
+		String location_name = null;
+
+		if (data[RussiaDataFormattingHeader.NAME3].equals("UNKNOWN") || data[RussiaDataFormattingHeader.NAME3].equals("n.a.")) { //$NON-NLS-1$ //$NON-NLS-2$
+			// If this is an unnamed location, then we use our convenation for
+			// naming unnamed locations :
+			// <ALPHA2_CODE>-UNK-<UNKNOWN_COUNTER_VALUE>
+			location_name = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+					+ String.valueOf(unkCounter++);
+		} else {
+			// The location name is a concatenation of the level 2
+			// administration (NAME3) and the level 1 container
+			// (NAME2). We ignore the level 0 container (NAME1).
+			location_name = data[RussiaDataFormattingHeader.NAME2] + ";" //$NON-NLS-1$
+					+ data[RussiaDataFormattingHeader.NAME3];
+		}
+
+		// Find the country name based on the alpha 2 code.
+		String country_name = GenUtils.getCountryName(alpha2, codeList);
+
+		// Get the number of items in the buffer
+		int length = data.length;
+
+		// Add fixed data we already have available :
+		divaString = alpha3 + "," + country_name + "," + location_name; //$NON-NLS-1$ //$NON-NLS-2$
+
+		// Concatenate polygon data -- ignore the first eight items
+		// which are non-polygon data :
+		// ID,AREA,COUNTRY,NAME1,NAME2,NAME3,POP1,POP2
+		for (int i = 8; i < length; i++) {
+
+			divaString += "," + data[i]; //$NON-NLS-1$
+
+		} // for
+
+		// Finally add a new line to the string.
+		divaString += "\n"; //$NON-NLS-1$
+
+		return divaString;
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int TARGET_LIST = 1;
+		// final int OUTPUT_DIR = 2;
+		// final int PARAMS = 3;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// RussiaDataConverter converter = new RussiaDataConverter(
+		// args[ISO_3166_1], /* args[Russia_NAMES], */args[TARGET_LIST],
+		// args[OUTPUT_DIR]);
+		// converter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		RussiaDataConverter converter = new RussiaDataConverter(
+				args[CONFIG_FILE]);
+		converter.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataExtractor.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataExtractor.java
new file mode 100644
index 0000000..2eea330
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataExtractor.java
@@ -0,0 +1,419 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This class will extract area and population data from the Russian UN data
+ * source file (RussiaSorted.txt). It will generate both and AREA and POPULATION
+ * files under
+ * org.eclipse.stem.utility\dataMigration\input\AreaPopulationData.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/RussiaDataExtractor.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\RussiaDataExtractor.config)
+ * 
+ * F Add the following values to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\ISO3166-1\ISO3166_1_en.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\EuropeCountries.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\AreaPopulationData\
+ * 
+ * Overview of the data generation process for the Europe data set. * Overview
+ * of the data generation process for the Russia data set.
+ * 
+ * 1) Data Cleaning : start by running RussiaDataCleaner. This program will
+ * remove all unnecesary data (i.e. columns) in the original source file. In
+ * addition, this program will group the data based on its ID (i.e. NO,IT,FR,UK,
+ * etc). The result will be a file named RussiaSorted.txt with cleaned data.
+ * 
+ * In other words : Russia.txt --> ||RussiaDataCleaner|| --> RussiaSorted.txt
+ * 
+ * NOTE: RussiaSorted.txt will be used as the input for the remaining part of
+ * the process.
+ * 
+ * 
+ * 2) Data Converter : run RussiaDataConverter to convert file in cleaned format
+ * into Diva format.
+ * 
+ * 
+ * 3) Area and Population Data Extraction : run RussiaDataExtractor to extract
+ * area and population data of all Russian administrations.
+ * 
+ * 
+ */
+
+public class RussiaDataExtractor {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	private String iso3166_1 = null;
+
+	// private String namesFile = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List dataList = null;
+
+	// List namesList = null;
+
+	/**
+	 * An index to count the number of unnamed entries in the data set.
+	 */
+	int unkCounter = 1;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public RussiaDataExtractor(String iso3166_1,/* String namesFile, */
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// this.iso3166_1 = iso3166_1;
+	// // this.namesFile = namesFile;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// }
+	/**
+	 * @param configFile
+	 */
+	public RussiaDataExtractor(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.EUROPE_COUNTRIES;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Load all level 1 names for Europe.
+		// namesList = GenUtils.populateList(namesFile);
+
+		// Run the converter: UN Europe -> Diva set format
+		process();
+	}
+
+	/**
+	 * 
+	 * Generate area and population files from data extracted from
+	 * EuropeSorted.txt The area and population files will be used by the
+	 * generators to produce the property files.
+	 * 
+	 */
+	protected void process() {
+
+		ArrayList<String> repeated = new ArrayList<String>();
+
+		// A writer for the new file we are creating.
+		PrintWriter areaFile = null;
+		PrintWriter popFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next file in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< RUSSIA DATA EXTRACTOR -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$  //$NON-NLS-2$
+
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX] to
+					// make processing more
+					// efficient, we dont need all of it.
+					int BUFFER_MIN = 0;
+					int BUFFER_MAX = 200;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// Use only part of the buffer, not all of it for
+						// efficiency.
+						int max = (buffer.length() > BUFFER_MAX) ? BUFFER_MAX
+								: buffer.length();
+						String[] items = buffer.substring(BUFFER_MIN, max)
+								.split(","); //$NON-NLS-1$
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							String country = GenUtils.getCountryName(
+									items[RussiaDataFormattingHeader.COUNTRY]
+											.substring(0, 2), codeList);
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir);
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open a new area file.
+						if (areaFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ "_AREA.txt"; //$NON-NLS-1$
+
+							// Create tne new file
+							areaFile = GenUtils.openWriter(fileName);
+						}
+
+						// Similarly, create and open a new population file.
+						if (popFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\" + isoCode.getName() //$NON-NLS-1$
+									+ "_POPULATION.txt"; //$NON-NLS-1$
+
+							// Create tne new file
+							popFile = GenUtils.openWriter(fileName);
+						}
+
+						// Get relevant data for conversion.
+
+						// Extract area value
+						String area = items[RussiaDataFormattingHeader.AREA];
+
+						// Extract population value
+						String pop1 = items[RussiaDataFormattingHeader.POP1];
+						String pop2 = items[RussiaDataFormattingHeader.POP2];
+
+						// Extract location information
+						String name2 = items[RussiaDataFormattingHeader.NAME2];
+						String name3 = items[RussiaDataFormattingHeader.NAME3];
+
+						String location_name = null;
+
+						if (name3.equals("UNKNOWN") || name3.equals("n.a.")) { //$NON-NLS-1$ //$NON-NLS-2$
+							// If this is an unnamed location, then we use our
+							// convenation for
+							// naming unnamed locations :
+							// <ALPHA2_CODE>-UNK-<UNKNOWN_COUNTER_VALUE>
+							location_name = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+									+ String.valueOf(unkCounter++);
+						} else {
+							// The location name is a concatenation of level 2
+							// administration (NAME3) and the level 1 container
+							// (NAME2). We ignore the level 0 container (NAME1).
+							location_name = name2 + ";" + name3; //$NON-NLS-1$
+						}
+
+						if (repeated.contains(location_name)) {
+							continue;
+						}
+						// remember this element
+						repeated.add(location_name);
+
+						String pop = null;
+
+						// Get first the estimated value and if it is zero, then
+						// get the real population value for Russia.
+						pop = pop1;
+
+						if (Double.parseDouble(pop) == 0.0) {
+							pop = pop2;
+						}
+
+						if (Double.parseDouble(pop) <= 0.0) {
+							System.out
+									.println("\t\tPopulation is zero for location : " //$NON-NLS-1$
+											+ location_name);
+						}
+
+						if (Double.valueOf(area) < 1.0) {
+							area = "1.0"; //$NON-NLS-1$
+						}
+
+						// Write area value
+						GenUtils.addData(areaFile, location_name + " : 1 : " //$NON-NLS-1$
+								+ Double.valueOf(area) + "\n"); //$NON-NLS-1$
+
+						// Write population value
+						GenUtils.addData(popFile, location_name + " : 1 : " //$NON-NLS-1$
+								+ Double.valueOf(pop).intValue() + "\n"); //$NON-NLS-1$
+
+					}// while
+
+					// Reset ISO Code
+					isoCode = null;
+
+					// Reset file name
+					fileName = null;
+
+					// Close the target files.
+					areaFile.close();
+					areaFile = null;
+					popFile.close();
+					popFile = null;
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int TARGET_LIST = 1;
+		// final int OUTPUT_DIR = 2;
+		// final int PARAMS = 3;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// RussiaDataExtractor converter = new RussiaDataExtractor(
+		// args[ISO_3166_1], args[TARGET_LIST], args[OUTPUT_DIR]);
+		// converter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		RussiaDataExtractor extractor = new RussiaDataExtractor(
+				args[CONFIG_FILE]);
+		extractor.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataFormattingHeader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataFormattingHeader.java
new file mode 100644
index 0000000..8426f24
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/RussiaDataFormattingHeader.java
@@ -0,0 +1,62 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * 
+ * Relevant keys to the Russian dataset. Used during conversion process from the
+ * Russian UN format -> Diva format.
+ * 
+ */
+public abstract class RussiaDataFormattingHeader {
+
+	/**
+	 * Numeric ID
+	 */
+	public static final int ID = 0;
+
+	/**
+	 * Area
+	 */
+	public static final int AREA = 1;
+
+	/**
+	 * Country name
+	 */
+	public static final int COUNTRY = 2;
+
+	/**
+	 * Location Name 1
+	 */
+	public static final int NAME1 = 3;
+
+	/**
+	 * Location Name 2
+	 */
+	public static final int NAME2 = 4;
+
+	/**
+	 * Location Name 3
+	 */
+	public static final int NAME3 = 5;
+
+	/**
+	 * Population value 1
+	 */
+	public static final int POP1 = 6;
+
+	/**
+	 * Population value 2
+	 */
+	public static final int POP2 = 7;
+
+}
\ No newline at end of file
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/STEMPolygon.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/STEMPolygon.java
new file mode 100644
index 0000000..1682385
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/STEMPolygon.java
@@ -0,0 +1,430 @@
+package org.eclipse.stem.utility.generators;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * are a a holder for polygon data. It is used in checkings for duplicate or
+ * non-polygon data
+ * 
+ */
+
+public class STEMPolygon {
+
+	private List<PointData> list = new ArrayList<PointData>();
+
+	private String _data = null;
+
+	private int _level = -1;
+
+	private PointData init = null;
+
+	private PointData last = null;
+
+	private Double ltPoints[] = null;
+
+	private Double lgPoints[] = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param data
+	 *            raw polygon data (lt, lg) values
+	 * @param level
+	 *            the admin level for this data
+	 */
+	public STEMPolygon(String data, int level) {
+		_data = data;
+		_level = level;
+		extractLtLgData();
+		ltPoints = new Double[list.size()];
+		lgPoints = new Double[list.size()];
+		// Clear the data buffer to be more memory-efficient
+		_data = null;
+	}
+
+	/**
+	 * Get the number of points in a polygon.
+	 * 
+	 * @return the number of points in a given polygon.
+	 */
+	public int points() {
+		return list.size();
+	}
+
+	/**
+	 * Clear this polygon
+	 */
+	void clear() {
+		list.clear();
+		lgPoints = null;
+		ltPoints = null;
+		init = null;
+		last = null;
+	}
+
+	/**
+	 * Convert the value of string to a double
+	 * 
+	 * @param str
+	 *            the string representation of a double.
+	 * 
+	 * @return double value extracted from numeric string
+	 */
+	protected double getDouble(String str) {
+		Double holder = new Double(str);
+		return holder.doubleValue();
+	}
+
+	/**
+	 * Test if the string contains a number
+	 * 
+	 * @param str
+	 *            the value we want to test
+	 * 
+	 * @return true if this value is numeric
+	 */
+	protected boolean isNumeric(String str) {
+
+		try {
+			Double.valueOf(str);
+		} catch (NumberFormatException e) { // If an exception is thrown, then
+			// it is not a number. Otherwise it
+			// is.
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Tests whether another polygon and THIS polygon are the same
+	 * 
+	 * @param polygon
+	 *            the other polygon we want to compare agains THIS one
+	 * 
+	 * @return true if these two polygons are the same
+	 */
+	public boolean same(STEMPolygon polygon) {
+
+		// If they dont have the same number of points they cant be the same
+		// polygon.
+		if (list.size() != polygon.points()) {
+			return false;
+		}
+
+		// Otherwise, compare if they have the same starting and ending points.
+		// If they dont, then they cant be the same point.
+
+		if (init != polygon.getInit()) {
+			return false;
+		} else if (last != polygon.getLast()) {
+			return false;
+		}
+
+		// Finally, since they have the same number of points, the same starting
+		// and ending points, check the
+		// intermediate points to see if they are really the same.
+
+		// advance the first token which we know already to be the same
+		Iterator it1 = list.iterator();
+		Iterator it2 = list.iterator();
+
+		PointData d1 = null;
+		PointData d2 = null;
+
+		while (it1.hasNext()) {
+
+			d1 = (PointData) it1.next();
+			d2 = (PointData) it2.next();
+
+			if (d1.same(d2) != true) {
+				return false;
+			}
+
+		}
+
+		// Yes, both polygons are the same.
+		return true;
+	}
+
+	/**
+	 * convert to degrees and change format of data to STEM convention -- eight
+	 * digits, no decimal point
+	 * 
+	 * @param value
+	 *            in radians
+	 * 
+	 * @return the angle value in degrees
+	 */
+	protected double toDegrees(double value) {
+		double dValue = value;
+		dValue *= 180.0;
+		dValue /= java.lang.Math.PI;
+		// return (int) (1000000.0 * value);
+		return dValue;
+	} // toDegrees
+
+	/**
+	 * Get all the lt points in this polygon
+	 * 
+	 * @return the lt points
+	 */
+	public Double[] getLtPoints() {
+
+		int index = 0;
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+			PointData pData = (PointData) it.next();
+			ltPoints[index++] = new Double(toDegrees(pData.getLt()));
+		}
+
+		return ltPoints;
+	}
+
+	/**
+	 * Get all the lg points in this polygon
+	 * 
+	 * @return the lg points
+	 */
+	public Double[] getLgPoints() {
+
+		int index = 0;
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+			PointData pData = (PointData) it.next();
+			lgPoints[index++] = new Double(toDegrees(pData.getLg()));
+		}
+
+		return lgPoints;
+	}
+
+	/**
+	 * Extract the lat, long data from the data buffer
+	 * 
+	 */
+	protected void extractLtLgData() {
+
+		/**
+		 * This method creates the XML tags that deal with polygon data and
+		 * includes the polygon data in it.
+		 * 
+		 * @param id
+		 * @param data
+		 * @return
+		 */
+
+		int offset = 0;
+		final int INVALID = -10000000;
+		double lt = INVALID;
+		double lg = INVALID;
+
+		switch (_level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(_data, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		// We are now located at the beginning of the polygon data.
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			if (lt == INVALID) {
+				lt = getDouble(token);
+			} else if (lg == INVALID) {
+				lg = getDouble(token);
+			}
+
+			if (lt != INVALID && lg != INVALID) {
+				// PointData point = new PointData(toDegrees(lt),
+				// toDegrees(lg));
+				PointData point = new PointData(lt, lg);
+				if (init == null) {
+					init = point;
+				}
+				last = point;
+				// Eliminate repeated points : for every new point, add to list
+				// only if it is not duplicated
+				// if (checkDuplicatedPoints(point) == false) {
+				list.add(point);
+				// }
+				lt = INVALID;
+				lg = INVALID;
+			}
+		}
+
+	} // extractLtLgData
+
+	/**
+	 * Check for duplicated points in the polygon
+	 */
+	// private boolean checkDuplicatedPoints(PointData point) {
+	//
+	// Iterator it = this.list.iterator();
+	//
+	// // Iterate through all the points in the polygon, avoid duplicates.
+	// while (it.hasNext()) {
+	//
+	// PointData current = (PointData) it.next();
+	// // Check to see if these two polygons are the same
+	// // NOTE: the exception if the initial polygon
+	// if (point.same(current)) {
+	// return true;
+	// }
+	// }
+	// // Not duplicated
+	// return false;
+	// }
+	/**
+	 * Get the starting point of a polygon
+	 * 
+	 * @return the first point of a polygon
+	 */
+	public PointData getInit() {
+		return init;
+	}
+
+	/**
+	 * Get the last point of a polygon
+	 * 
+	 * @return the last point of a polygon
+	 */
+	public PointData getLast() {
+		return last;
+	}
+
+	/**
+	 * Get iterator to list of polygon data objects.
+	 * 
+	 * @return an iterator through our list of polygons
+	 */
+	public Iterator getIterator() {
+		return list.listIterator();
+	}
+
+}
+
+/**
+ * A utility class used to hold polygon data. An instance of this class
+ * represents a single point.
+ * 
+ */
+class PointData {
+
+	private double _lt = -1;
+
+	private double _lg = -1;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param lt
+	 *            the latitude in degrees
+	 * @param lg
+	 *            the longitude in degress
+	 */
+	public PointData(double lt, double lg) {
+		// _lt = GenUtils.toDegrees(lt);
+		// _lg = GenUtils.toDegrees(lg);
+		_lt = lt;
+		_lg = lg;
+	}
+
+	/**
+	 * Get the latitude value
+	 * 
+	 * @return the latitude in degress
+	 * 
+	 */
+	public double getLt() {
+		return _lt;
+	}
+
+	/**
+	 * Get the longitude value
+	 * 
+	 * @return the longitude in degress
+	 */
+	public double getLg() {
+		return _lg;
+	}
+
+	/**
+	 * Set the latitude
+	 * 
+	 * @param lt
+	 *            the latitude
+	 */
+	public void setLt(double lt) {
+		_lt = lt;
+	}
+
+	/**
+	 * Set the longitude
+	 * 
+	 * @param lg
+	 *            the longitude
+	 */
+	public void setLg(double lg) {
+		_lg = lg;
+	}
+
+	/**
+	 * Check to see if two point objects are the same.
+	 * 
+	 * @param point
+	 *            the point data holder
+	 * 
+	 * @return true if two points are the same
+	 */
+	public boolean same(PointData point) {
+
+		if (this._lt != point._lt) {
+			return false;
+		} else if (this._lg != point._lg) {
+			return false;
+		}
+
+		// Yes, it is the same data.
+		return true;
+	}
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SinglePassDownSampler.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SinglePassDownSampler.java
new file mode 100644
index 0000000..94626af
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SinglePassDownSampler.java
@@ -0,0 +1,1785 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- Instances of this class are
+ * used to run a point-reduction algorithm on the Diva set.
+ * 
+ * NOTE : SINGLE PASS DOWN SAMPLER is to be used only for a single iteration or
+ * as the first step of more than one iteration.
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/SinglePassDownSampler.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\SinglePassDownSampler.config)
+ * 
+ * 
+ * SET VMARGS TO : -Xms1024m -Xmx1024m
+ * 
+ */
+public class SinglePassDownSampler {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String threshold = null;
+
+	private String iso3166_1 = null;
+
+	private String iso3166_2 = null;
+
+	private String fixFile = null;
+
+	private String targetFile = null;
+
+	private String lexDir = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	private String usaDescriptorFile = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	List codeList = null;
+
+	List codefixList = null;
+
+	List usaDescriptorList = null;
+
+	/**
+	 * List to keep track of pairs (PointDava:Value)
+	 */
+	List<String> pointDataList = null;
+
+	/**
+	 * A flag that indicates whether we can delete a point.
+	 */
+	// No, it is not safe to remove this node.
+	final String UNSAFE = "0"; //$NON-NLS-1$
+
+	// Yes, it can be deleted.
+	final String SAFE = "1"; //$NON-NLS-1$
+
+	// Safety state not known yet -> initial value.
+	final String UNKNOWN = "2"; // //$NON-NLS-1$
+
+	/**
+	 * Used for global stats.
+	 */
+	double totalPoints = 0;
+
+	double totalRemoved = 0;
+
+	double totalPolygons = 0;
+
+	double globalMinPercent = Double.MAX_VALUE;
+
+	double globalMaxPercent = 0.0;
+
+	double globalPercent = 0.0;
+
+	/**
+	 * Lists to keep track of the occurences of values of the angles : 180 -
+	 * ArcCos(teta)
+	 * 
+	 */
+	HashMap<Double, Integer> angleValueMap = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param threshold -
+	 *            the threshold in degress
+	 * @param iso3166_1 -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param iso3166_2 -
+	 *            data file with the ISO3166-2 codes.
+	 * @param fixFile -
+	 *            file containing missing ISO3166-2 codes
+	 * @param targetFile
+	 *            the list of countries for which we will generate GML files
+	 * @param lexDir
+	 *            folder containing lexicographically sorted files
+	 * @param outputDir
+	 *            the output directory for the GML files we generate
+	 */
+	// public SinglePassDownSampler(String threshold, String iso3166_1,
+	// String iso3166_2, String fixFile, String targetFile, String lexDir,
+	// String outputDir) {
+	// // Set values of global variables.
+	// this.threshold = threshold;
+	// this.iso3166_1 = iso3166_1;
+	// this.iso3166_2 = iso3166_2;
+	// this.fixFile = fixFile;
+	// this.targetFile = targetFile;
+	// this.lexDir = lexDir;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// angleValueMap = new HashMap<Double, Integer>();
+	// this.usaDescriptorFile = workspace
+	// + "\\org.eclipse.stem.utility\\parameters\\ISOFIX\\USA_FIPS.txt";
+	// //$NON-NLS-1$
+	// }
+	/**
+	 * @param configFile
+	 */
+	public SinglePassDownSampler(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("THRESHOLD")) { //$NON-NLS-1$
+				threshold = vars.get(var);
+			} else if (var.equals("ISO3166_1")) { //$NON-NLS-1$
+				iso3166_1 = vars.get(var);
+			} else if (var.equals("ISO3166_2")) { //$NON-NLS-1$
+				iso3166_2 = vars.get(var);
+			} else if (var.equals("ISO_FIX")) { //$NON-NLS-1$
+				fixFile = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("LEX_DIR")) { //$NON-NLS-1$
+				lexDir = vars.get(var);
+			} else if (var.equals("MAP_OUTPUT") || var.equals("OUTPUT")) { //$NON-NLS-1$ //$NON-NLS-2$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (threshold == null) {
+			threshold = GenConstants.DEFAULT_THRESHOLD; // Defaults to 5 degrees
+		}
+		if (iso3166_1 == null) {
+			iso3166_1 = path + GenConstants.ISO3166_1_FILE;
+		}
+		if (iso3166_2 == null) {
+			iso3166_2 = path + GenConstants.ISO3166_2_FILE;
+		}
+		if (fixFile == null) {
+			fixFile = path + GenConstants.ISOFIX_FILE;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.COUNTRIES_LIST;
+		}
+		if (lexDir == null) {
+			lexDir = path + GenConstants.LEX_DIR;
+		}
+
+		if (GenUtils.verifyOutputDirectory(vars) == false) {
+			System.out
+					.println("\t\tBad configuration file -- OUTPUT variable not found. Please specify output directory using format VAR = VALUE (i.e. OUTPUT = C:\\diva\\grouped\\ "); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		targetList = null;
+		angleValueMap = new HashMap<Double, Integer>();
+		this.usaDescriptorFile = path + GenConstants.USA_FIPS_FILE;
+
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(iso3166_1);
+
+		// Read and keep in memory a list of the missing ISO3166-2 codes
+		codefixList = GenUtils.populateList(fixFile);
+
+		// Load the list of descriptors for the USA (special case)
+		usaDescriptorList = GenUtils.populateList(usaDescriptorFile);
+
+		// Initialize the hash map
+		initHashMap(angleValueMap);
+
+		// Now, process each item in the target list.
+		process();
+
+	}
+
+	/**
+	 * Initialize the hash map
+	 * 
+	 * @param map -
+	 *            the hash map
+	 * 
+	 */
+	public void initHashMap(HashMap<Double, Integer> map) {
+		// Add some keys/values to our hash map
+		map.put(new Double(90.0), new Integer(0));
+		map.put(new Double(45.0), new Integer(0));
+		map.put(new Double(22.5), new Integer(0));
+		map.put(new Double(11.25), new Integer(0));
+		map.put(new Double(5.5125), new Integer(0));
+		map.put(new Double(2.0), new Integer(0));
+		map.put(new Double(1.5), new Integer(0));
+		map.put(new Double(1.0), new Integer(0));
+		map.put(new Double(0.75), new Integer(0));
+		map.put(new Double(0.5), new Integer(0));
+		map.put(new Double(0.25), new Integer(0));
+		map.put(new Double(0.15), new Integer(0));
+		map.put(new Double(0.05), new Integer(0));
+	}
+
+	/**
+	 * Perform only the first iteration of down sampling.
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter gmlFile = null;
+
+		// A writer for the reduced data file.
+		PrintWriter reducedFile = null;
+
+		// Object holding ISO3166-1 related data.
+		ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		// Name of the new reduced data file.
+
+		// A list for ISO 3166-2 objects
+		List iso2List = new ArrayList();
+
+		// Filenames for lex1 and lex2 files for a given country.
+		String lexAdmin1File = null;
+		String lexAdmin2File = null;
+
+		// Lists holding the lex1 and lex2 values.
+		// NOTE: lex values are the lexicographically sorted values for
+		// administration levels.
+		List<String> lex1DataSet = null;
+		List<String> lex2DataSet = null;
+
+		// Lists for holding lex1 and lex2 objects for a given country.
+		List<Lex1Obj> lex1List = null;
+		List<Lex2Obj> lex2List = null;
+
+		int size = targetList.size();
+
+		// Iterate for every country and create its GML data file.
+		for (int i = 0; i < size; i++) {
+
+			// Get the next country in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// An index for unknwon or n.a. entries
+			int unkCounter = 1;
+
+			// We use this list to keep track of duplicated polygons.
+			List<STEMPolygon> polygons = null;
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+
+			System.out
+					.println("\t\t<<<< SINGLE PASS DOWN SAMPLER -- Processing country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			System.out.println("\t\t<<<< Pass 1 >>>>"); //$NON-NLS-1$
+
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+					// Describes level of data we
+					// are now processing : LEVEL0, LEVEL1, or LEVEL2.
+					int level = -1;
+
+					// Record the previous type.
+					int oldlevel = level - 1;
+
+					// Used to distinguish between a simple polygon and islands
+					// of polygons. Initialize string to the blank character.
+					String island = " "; //$NON-NLS-1$
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// The data we want to write to the new GML file.
+						String output = " "; //$NON-NLS-1$
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						// We take a chunk of the data [BUFFER_MIN,BUFFER_MAX]
+						// to make processsing more
+						// efficient, we dont need all of it.
+						int BUFFER_MIN = 0;
+						int BUFFER_MAX = 125;
+
+						String[] items = GenUtils
+								.extract(buffer.length() < BUFFER_MAX ? buffer
+										: buffer.substring(BUFFER_MIN,
+												BUFFER_MAX));
+
+						// Get the country name
+						String country = items[ISOData.COUNTRY_NAME];
+
+						// Get the ISO3166-1 info for this country
+						if (isoCode == null) {
+							isoCode = GenUtils.getISOCode(country, codeList);
+						}
+
+						// Get the type of the data we are processing.
+						level = GenUtils.getLevel(items);
+
+						if (level != 0 && iso2List != null) {
+							// Load the ISO 3166-2 objects for this country
+							iso2List = GenUtils.loadISO2(iso3166_2);
+						}
+
+						// This variable indicates a transition in our data
+						// processing
+						boolean transition = (level != oldlevel) ? true : false;
+
+						// The current entity we are dealing with.
+						// Based on its admin level it can be a country, a
+						// county, etc;
+						String current = null;
+
+						// Descriptor for current entry.
+						String descriptor = null;
+
+						if (transition == true) {
+							// Use previous level to detect transitions.
+							oldlevel = level;
+
+							// Reset the previous entity
+							island = " "; //$NON-NLS-1$
+
+							// Reset counter of UNKNOWN and N.A. entries.
+							unkCounter = 1;
+							// Close the previous file
+							if (gmlFile != null) {
+								output = closePolygonIslandTags();
+								output += getClosingTags();
+								GenUtils.addData(gmlFile, output);
+								gmlFile.close();
+							}
+
+							// Clear the list of unique polygons
+							if (polygons != null) {
+								polygons.clear();
+							}
+
+							// Get a new, empty polygon list
+							polygons = new ArrayList<STEMPolygon>();
+
+							// If the directory does not exist for this country,
+							// create it using ISO alpha3 code.
+							File countryDir = new File(outputDir
+									+ isoCode.getAlpha3());
+
+							if (countryDir != null
+									&& countryDir.exists() == false) {
+								// Directory does not exist. Create it.
+								countryDir.mkdir();
+							}
+
+							// Open the writer for the reduced data file
+							if (reducedFile == null) {
+								// Name for the reduced data file.
+								fileName = countryDir
+										+ "\\" //$NON-NLS-1$
+										+ isoCode.getAlpha3()
+										+ "_REDUCED_1.txt"; //$NON-NLS-1$
+								reducedFile = GenUtils.openWriter(fileName);
+							}
+
+							// Create the file name for the reduced GML file.
+							fileName = countryDir + "\\" + isoCode.getAlpha3() //$NON-NLS-1$
+									+ "_" + level + "_REDUCED_MAP_1.xml"; //$NON-NLS-1$ //$NON-NLS-2$
+
+							// Open the writer for the new GML file
+							gmlFile = GenUtils.openWriter(fileName);
+
+							// Add the header of the file
+							output = getOpeningTags(isoCode, level);
+
+							// Write data
+							GenUtils.addData(gmlFile, output.trim());
+
+						} // if( transition == true )
+
+						switch (level) {
+
+						case DataTypes.LEVEL_0:
+							current = isoCode.getAlpha3();
+							break;
+
+						case DataTypes.LEVEL_1:
+							current = items[ISOData.ADMIN1_NAME].toUpperCase();
+							break;
+
+						case DataTypes.LEVEL_2:
+							current = items[ISOData.ADMIN2_NAME].toUpperCase();
+							break;
+
+						} // switch
+
+						// Handle UNKNOWN and N.A. entries differently.
+						if (current.equals("UNKNOWN") || current.equals("N.A.")) { //$NON-NLS-1$ //$NON-NLS-2$
+
+							if (level == 1) {
+								current = isoCode.getAlpha2() + "-UNK-" //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+
+							} else {
+								// Level 2 data.
+								current = isoCode.getAlpha3() + ".L2." //$NON-NLS-1$
+										+ String.valueOf(unkCounter++);
+							}
+						}
+
+						// We get the descriptor for administration entities
+						// differently based on its level.
+
+						if (level == 2) {
+
+							if (lex1DataSet == null && lex2DataSet == null) {
+
+								// Compose the file names for the lex files for
+								// this
+								// country.
+								lexAdmin1File = lexDir + isoCode.getAlpha3()
+										+ "\\" + isoCode.getAlpha3(); //$NON-NLS-1$
+								lexAdmin2File = lexAdmin1File;
+								lexAdmin1File += "_ADMIN1_LEX.txt"; //$NON-NLS-1$
+								lexAdmin2File += "_ADMIN2_LEX.txt"; //$NON-NLS-1$
+
+								// Load the lex1 and lex2 files for this
+								// country.
+								lex1DataSet = GenUtils
+										.populateList(lexAdmin1File);
+								lex2DataSet = GenUtils
+										.populateList(lexAdmin2File);
+
+								// Create a method to search for an item on a
+								// list of lex data objects.
+								lex1List = GenUtils.createLex1List(lex1DataSet);
+								lex2List = GenUtils.createLex2List(lex2DataSet);
+
+							}
+
+							// Compose the level2 descriptor using the lex data:
+
+							// STEP 1: Do a look up in the lex 2 lists.
+
+							// Get the lex 2 object for the current entry.
+							Lex2Obj lex2Current = GenUtils.lex2Lookup(lex2List,
+									items[ISOData.ADMIN1_NAME], current);
+
+							// Get the lex1Object to which lex2Current belongs
+							Lex1Obj lex1Current = GenUtils.lex1Lookup(lex1List,
+									lex2Current.getAdmin1());
+
+							if (lex1Current.getDescriptor().contains("US-")) { //$NON-NLS-1$
+								// STEP 2: piece together the ID using the
+								// proper lex objects : the USA is a special
+								// case
+								descriptor = GenUtils.getUSADescriptor(
+										lex2Current.getAdmin2(), GenUtils
+												.extractAlpha2(lex1Current
+														.getDescriptor()),
+										usaDescriptorList);
+
+							} else {
+								// STEP 2: piece together the ID using the
+								// proper lex objects.
+								descriptor = lex1Current.getDescriptor()
+										+ "-G" //$NON-NLS-1$
+										+ lex1Current.getFormattedIndex()
+										+ lex2Current.getFormattedIndex();
+							}
+
+							if (current.contains(".L2.")) { //$NON-NLS-1$
+								current = descriptor;
+							}
+
+						} else {
+							// Compose descriptor for l 1 and l 0 data
+							// Get the descriptor for this entity.
+							descriptor = GenUtils.getISO2Descriptor(iso2List,
+									current, isoCode.getAlpha2());
+
+							// If we cant find the descriptor, then look in the
+							// fix list.
+							if (descriptor.equals(current) == true) {
+								// Look for a descriptor in the fix file
+								descriptor = GenUtils.getFixCode(codefixList,
+										current, items[ISOData.COUNTRY_NAME]);
+							}
+
+						}
+
+						// System.out.println("Descriptor is : " + descriptor
+						// + " at level : " + level + " for " + current);
+
+						// Create a STEM polygon with this polygon data
+						STEMPolygon polygon = new STEMPolygon(buffer, level);
+
+						// Check that this is indeed a STEM polygon
+						if (isPolygon(polygon) != true) {
+							// Not a polygon, ignore.
+							continue;
+						}
+
+						// Compute a map of angle values.
+						List<String> pointDataList = computeInverseCosines(polygon);
+
+						// Now apply reduction : get rid of all points with
+						// angles less than or equal to alpha degrees
+						double alpha = Double.parseDouble(threshold);
+						List<String> reducedPointDataList = reduce(alpha,
+								pointDataList);
+
+						// Update Global Stats with results/data from the
+						// reduction.
+						updateGlobalStats(pointDataList.size(),
+								reducedPointDataList.size());
+
+						// Show some of the stats after each reduction.
+						// showStats(pointDataList, reducedPointDataList, 1);
+
+						// Put all the remaining points into a new buffer
+						String reducedPolygonDataBuffer = extractListIntoString(reducedPointDataList);
+
+						// Reconstruct a buffer with the reduced point-data.
+
+						// Extract all data from old buffer except the polygon
+						// data :
+						String nonPolygonDataBuffer = extractNonPolygonData(
+								buffer.length() < BUFFER_MAX ? buffer : buffer
+										.substring(BUFFER_MIN, BUFFER_MAX),
+								level);
+
+						// Now put together a new buffer which has been reduced
+						String reducedBuffer = nonPolygonDataBuffer
+								+ reducedPolygonDataBuffer + "\n"; //$NON-NLS-1$
+
+						// Write reduced data buffer into the reduced data file
+						GenUtils.addData(reducedFile, reducedBuffer);
+
+						// Delete the old polygon
+						polygon.clear();
+						polygon = null;
+
+						// Create a new, reduced STEM polygon with the new data
+						// buffer
+						polygon = new STEMPolygon(reducedBuffer, level);
+
+						// Check that this is indeed a STEM polygon
+						if (isPolygon(polygon) != true) {
+							System.out.println("\t\tNot a polygon!"); //$NON-NLS-1$
+							// Not a polygon, ignore.
+							continue;
+						}
+
+						// We know it is a polygon, but now check that its not
+						// duplicated.
+						if (isPolygonDuplicated(polygons.iterator(), polygon) == true) {
+							// Yes, it is duplicated
+							continue;
+						}
+
+						// Add this polygon to our list of unique polygons so
+						// that we can check duplicates of this polygon later.
+						polygons.add(polygon);
+
+						// Check to see if this polygon is part of an island of
+						// polygons or a simple polygon
+						if (level == 0) {
+							// If we are at admin level 0 and island is not
+							// NULL, then we have an island.
+							if (island.equals(" ")) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								island = "Admin Level 0"; //$NON-NLS-1$
+							}
+							output += addLinearRingTags(reducedBuffer, level);
+						} else {
+
+							if (island.equals(" ") == true) { //$NON-NLS-1$
+								output = openPolygonIslandTags(descriptor);
+								output += addLinearRingTags(reducedBuffer,
+										level);
+
+							} else {
+
+								if (current.equals(island) == false) {
+									output = closePolygonIslandTags();
+									output += openPolygonIslandTags(descriptor);
+									output += addLinearRingTags(reducedBuffer,
+											level);
+								} else {
+									output = addLinearRingTags(reducedBuffer,
+											level);
+									GenUtils.addData(gmlFile, output.trim());
+									continue;
+								}
+							}
+
+							switch (level) {
+
+							case DataTypes.LEVEL_1:
+								island = items[ISOData.ADMIN1_NAME]
+										.toUpperCase();
+								break;
+
+							case DataTypes.LEVEL_2:
+								island = items[ISOData.ADMIN2_NAME]
+										.toUpperCase();
+								break;
+							}
+
+						}
+
+						GenUtils.addData(gmlFile, output.trim());
+
+					} // while loop
+
+					// Reset all lex-related items
+					if (lex1DataSet != null) {
+						lex1DataSet.clear();
+						lex1DataSet = null;
+					}
+					if (lex2DataSet != null) {
+						lex2DataSet.clear();
+						lex2DataSet = null;
+					}
+					if (lex1List != null) {
+						lex1List.clear();
+						lex1List = null;
+					}
+					if (lex2List != null) {
+						lex2List.clear();
+						lex2List = null;
+					}
+
+					lexAdmin1File = null;
+					lexAdmin2File = null;
+
+					// We dont need the ISO code object for this country
+					// anymore, we are done processing it.
+					isoCode = null;
+
+					// Close all open resources.
+					reader.close();
+
+					if (gmlFile != null) {
+						// Write formatted output
+						GenUtils.addData(gmlFile, closePolygonIslandTags());
+						GenUtils.addData(gmlFile, getClosingTags());
+						gmlFile.close();
+						gmlFile = null;
+						System.out.println("\t\tGenerated : " + fileName); //$NON-NLS-1$
+						fileName = null;
+					}
+
+					if (reducedFile != null) {
+						reducedFile.close();
+						reducedFile = null;
+					}
+
+					// Run garbage collection
+					System.gc();
+				}
+
+				// Show global stats
+				showGlobalStats();
+
+				// Now clear the hash map
+				initHashMap(angleValueMap);
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		}
+
+	}
+
+	/**
+	 * Extract all non polygon data from the buffer. Amount of non - polygon
+	 * data varies according to level.
+	 * 
+	 * @param buffer
+	 *            a buffer of diva data.
+	 * 
+	 * @param level
+	 *            administrative level
+	 * 
+	 * @return String all the non-polygon data.
+	 */
+	public String extractNonPolygonData(String buffer, int level) {
+
+		int offset = 0;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+
+		}
+
+		// first occurrence of the comma separator
+		int beginIndex = buffer.indexOf(","); //$NON-NLS-1$
+		int endIndex = beginIndex;
+
+		int i = 1;
+
+		while (i < offset) {
+			endIndex = buffer.indexOf(",", beginIndex + 1); //$NON-NLS-1$
+			beginIndex = endIndex;
+			i++;
+		}
+
+		beginIndex = 0;
+
+		// extract the sequence up to index
+		return buffer.substring(beginIndex, endIndex + 1);
+
+	}
+
+	/**
+	 * Find and show the differences between the normal point-data list and the
+	 * reduced point-data list.
+	 * 
+	 * @param normalList -
+	 *            a list with the original point data
+	 * @param reducedList -
+	 *            a list with the reduced point data
+	 * 
+	 * @param pass -
+	 *            the current pass or iteration
+	 * 
+	 */
+	public void showStats(List<String> normalList, List<String> reducedList,
+			int pass) {
+
+		// double normalSize = normalList.size();
+		// double reducedSize = reducedList.size();
+		// double dif = normalSize - reducedSize;
+		// double ratio = dif / normalSize;
+		// double percent = ratio * 100.0;
+
+		System.out.println("\t\t************ DOWN SAMPLING STATS FOR " + pass //$NON-NLS-1$
+				+ " ITERATION ************\n"); //$NON-NLS-1$
+
+		// Create and print profile of the angle values
+		System.out.println("\t\tProfiling results BEFORE reduction : \n\n"); //$NON-NLS-1$
+
+		profile(normalList);
+		showProfile();
+
+		// System.out.println("Total points in original polygon : "
+		// + normalList.size());
+		// System.out.println("Total points in reduced polygon : "
+		// + reducedList.size());
+		// System.out.println("Total points marked for deletion : " + dif);
+		//
+		// System.out.println("Percentage of reduction : " + percent + "%");
+		//
+		System.out.println("\t\tProfiling results AFTER reduction : \n\n"); //$NON-NLS-1$
+
+		profile(reducedList);
+		showProfile();
+		System.out.println("\n\n\n"); //$NON-NLS-1$
+
+	}
+
+	/**
+	 * Update global stats.
+	 * 
+	 * @param normalSize -
+	 *            the total number of points before reduction
+	 * 
+	 * @param reducedSize -
+	 *            the total number of points after reduction
+	 * 
+	 */
+	public void updateGlobalStats(double normalSize, double reducedSize) {
+
+		double dif = normalSize - reducedSize;
+		double ratio = dif / normalSize;
+		double percent = ratio * 100.0;
+
+		globalMinPercent = (globalMinPercent > percent) ? percent
+				: globalMinPercent;
+
+		globalMaxPercent = (globalMaxPercent < percent) ? percent
+				: globalMaxPercent;
+
+		globalPercent += percent;
+
+		totalPoints += normalSize;
+
+		totalRemoved += reducedSize;
+
+		totalPolygons += 1;
+
+	}
+
+	/**
+	 * Print the global stats
+	 */
+	public void showGlobalStats() {
+
+		System.out.println("\t\t************** GLOBAL STATS **************"); //$NON-NLS-1$
+
+		System.out.println("\t\tTotal polygons : " + totalPolygons); //$NON-NLS-1$
+
+		System.out.println("\t\tTotal points : " + totalPoints); //$NON-NLS-1$
+
+		System.out.println("\t\tAvg points per polygon : " + totalPoints //$NON-NLS-1$
+				/ totalPolygons);
+
+		System.out.println("\t\tGlobal reduction : " + globalPercent //$NON-NLS-1$
+				/ totalPolygons + "%"); //$NON-NLS-1$
+
+		System.out
+				.println("\t\tGlobal MIN reduction  : " + globalMinPercent + "%"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		System.out
+				.println("\t\tGlobal MAX reduction  : " + globalMaxPercent + "%"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	}
+
+	/**
+	 * Just print the profile for the polygon point-data
+	 * 
+	 */
+	public void showProfile() {
+		// Sort the keys
+		Set<Double> keys = angleValueMap.keySet();
+		List<Double> sortedKeys = new ArrayList<Double>(keys);
+		Collections.sort(sortedKeys);
+
+		System.out.println("\t\tFrequencies of angles :  "); //$NON-NLS-1$
+
+		// Print the number of occurrences for each value
+		Iterator keyIter = sortedKeys.iterator();
+		while (keyIter.hasNext()) {
+
+			// Get the key
+			Double key = (Double) keyIter.next();
+
+			// Get the value
+			int val = (angleValueMap.get(key)).intValue();
+
+			System.out.println("\t\t Angle >= " + key + " Frequency : " + val); //$NON-NLS-1$ //$NON-NLS-2$
+
+		}
+
+	}
+
+	/**
+	 * Algorithm for reducing the data by marking and then removing (nearly) all
+	 * points with angle less than alpha. All points marked for deletion are
+	 * called SAFE.
+	 * 
+	 * @param alpha -
+	 *            the threshold
+	 * @param list -
+	 *            a list containing extended point data of the form :
+	 *            INDEX:LT:LG:ANGLE:SAFETY
+	 * 
+	 * @return list - a reduced list of points that should not be deleted
+	 *         because they dont meet the criteria (i.e. their angle is greater
+	 *         than threshold or were marked as UNSAFE)
+	 * 
+	 */
+	public List<String> reduce(double alpha, List<String> list) {
+
+		/**
+		 * Remove all points which are safe to remove.
+		 * 
+		 * To be safe, a point should satisfy two conditions :
+		 * 
+		 * 1) Have an angle with value less than alpha degress.
+		 * 
+		 * 2) We CANNOT mark SAFE for deletion two consecutive points.
+		 * 
+		 */
+
+		// This list will contain only the elements that we should not remove
+		List<String> reducedList = new ArrayList<String>();
+
+		// Symbolic constants for controlling the sliding window algorithm
+		final int START = 0;
+		final int WINDOW_LENGTH = 2;
+
+		// Multiplier to obtain minimum lenght at which makes sense to run this
+		// algorithm:
+		final int MULTIPLIER = 1;
+
+		// MINIMUM LENGTH = MULTIPLIER * (WINDOW_LENGTH + 1)
+		final int MINIMUM_LENGTH = MULTIPLIER * (WINDOW_LENGTH + 1);
+
+		// Indexes into the string containing extended point data:
+		// INDEX:LT:LG:ANGLE:SAFETY
+		final int INDEX = 0;
+		final int LT = 1;
+		final int LG = 2;
+		final int ANGLE = 3;
+		final int SAFETY = 4;
+
+		// Our sliding window covers exactly three nodes.
+		String[] p1 = null;
+		String[] p2 = null;
+		String[] p3 = null;
+
+		// Angle values for each of the three points in the sliding window.
+		double a1 = 0.0;
+		double a2 = 0.0;
+		double a3 = 0.0;
+
+		// State (SAFE or UNSAFE) of each of three points in the sliding window.
+		String s1 = UNKNOWN;
+		String s2 = UNKNOWN;
+		String s3 = UNKNOWN;
+
+		// A pointer to the beginning and the end of the sliding window.
+		int left_border = 0;
+		int right_border = left_border + WINDOW_LENGTH;
+
+		// Our current position within the sliding window.
+		int index = START;
+
+		if (list.size() < MINIMUM_LENGTH) {
+			// There is no point in running this algorithm if points
+			// less than minimum value. No need to reduce.
+			return list;
+		}
+
+		final int END = list.size() - 1;
+
+		// System.out.println("List size is : " + end);
+
+		while (right_border <= END) {
+
+			// UNKNOWN == NOT YET PROCESSED -- Eventually it will be marked
+			// either SAFE or UNSAFE
+
+			boolean flag = false;
+
+			// if (p1 == null) {
+			// Get the three initial points covered by our sliding window.
+			index = left_border;
+			p1 = list.get(index++).split(":"); //$NON-NLS-1$
+			p2 = list.get(index++).split(":"); //$NON-NLS-1$
+			p3 = list.get(index).split(":"); //$NON-NLS-1$
+			// }
+
+			// Now get the angle value for each of the three points.
+			a1 = Double.parseDouble(p1[ANGLE]);
+			a2 = Double.parseDouble(p2[ANGLE]);
+			a3 = Double.parseDouble(p3[ANGLE]);
+
+			// Now get the state of each of the three points.
+			s1 = p1[SAFETY];
+			s2 = p2[SAFETY];
+			s3 = p3[SAFETY];
+
+			// Check to see if the initial, leftmost point is greater than
+			// alpha or if it is UNSAFE. If so, then slide forward the window.
+			if (a1 > alpha) {
+				// Just slide forward the window one unit.
+				left_border += 1;
+				right_border += 1;
+				continue;
+			}
+
+			if (s1.equals(UNSAFE)) {
+
+				if (a2 < alpha && a2 <= a3) {
+					// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+					// Advance sliding window after P2
+					s2 = SAFE;
+					s3 = UNSAFE;
+				} else if (a3 < alpha) {
+					// [ P1 = UNSAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+					s2 = UNSAFE;
+				}
+
+			} else if (a1 < alpha && a1 < a2) {
+				// [ P1 = SAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = SAFE;
+				s2 = UNSAFE;
+				// Now check to see if is safe to mark P3 too.
+				if (a3 < alpha) {
+					// [ P1 = SAFE, P2 = UNSAFE, P3 = SAFE ]
+					// Advance sliding window after P2
+					s3 = SAFE;
+				}
+			} else if (a1 < alpha && a1 > a2) {
+				// [ P1 = UNSAFE, P2 = SAFE, P3 = UNSAFE ]
+				// SPECIAL CASE : Advance sliding window after P3
+				s1 = UNSAFE;
+				s2 = SAFE;
+				s3 = UNSAFE;
+				// Special case : set flag to advance sliding window after P3
+				flag = true;
+
+			} else if (a1 > alpha && a2 > alpha) {
+				// [ P1 = UNSAFE, P2 = UNSAFE, P3 = UNKNOWN ]
+				// Advance sliding window after P2
+				s1 = UNSAFE;
+				s2 = UNSAFE;
+			}
+
+			// Pack the modified point-data.
+			String t1 = p1[INDEX] + ":" + p1[LT] + ":" + p1[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p1[ANGLE] + ":" + s1; //$NON-NLS-1$
+
+			String t2 = p2[INDEX] + ":" + p2[LT] + ":" + p2[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p2[ANGLE] + ":" + s2; //$NON-NLS-1$
+
+			String t3 = p3[INDEX] + ":" + p3[LT] + ":" + p3[LG] + ":" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					+ p3[ANGLE] + ":" + s3; //$NON-NLS-1$
+
+			// Store the modified (marked) point-data.
+			list.set(Integer.parseInt(p1[INDEX]), t1);
+			list.set(Integer.parseInt(p2[INDEX]), t2);
+			list.set(Integer.parseInt(p3[INDEX]), t3);
+
+			if (flag == true) {
+				// SPECIAL CASE : Advance sliding window after P3.
+				left_border = right_border + 1;
+				right_border = left_border + WINDOW_LENGTH;
+				// Go to the next iteration.
+				continue;
+			}
+
+			// DEFAULT : Advance sliding window after P2.
+			left_border = right_border;
+			right_border = left_border + WINDOW_LENGTH;
+
+		} // while
+
+		// Now remove the SAFE points and return the reduced list.
+		Iterator it = list.listIterator();
+
+		while (it.hasNext()) {
+
+			String data = (String) it.next();
+
+			String[] tokens = data.split(":"); //$NON-NLS-1$
+
+			if (tokens[SAFETY].equals(SAFE)) {
+				continue;
+			}
+			reducedList.add(data);
+
+		}
+
+		// System.out.println("Reduced list size is : " + reducedList.size());
+
+		return reducedList;
+
+	}
+
+	/**
+	 * Profile the angle data. Count how many times each value occurs
+	 * 
+	 * @param list -
+	 *            a list of angles for each data point in the polygon
+	 * 
+	 */
+	public void profile(List<String> list) {
+
+		final int ANGLE = 3;
+
+		if (list == null) {
+			return;
+		}
+
+		// We want to iterate through all the points of the
+		// polygon
+		Iterator it = list.iterator();
+
+		// Clear the hash map before start using it.
+		initHashMap(angleValueMap);
+
+		// Count the occurrences of the values of the 180 offset
+		// minus the angle.
+		// This count will be useful for finding a good threshold.
+		while (it.hasNext()) {
+
+			String p = (String) it.next();
+
+			String[] elements = p.split(":"); //$NON-NLS-1$
+
+			Double angle = new Double(elements[ANGLE]);
+
+			double degrees = angle.doubleValue();
+
+			count(degrees, angleValueMap);
+
+		} // while
+
+	}
+
+	/**
+	 * Based on the current value of the angle, keep track of it.
+	 * 
+	 * @param degrees -
+	 *            The value of the last offset - Cos-1(angle) value.
+	 * 
+	 * @param map -
+	 *            The map holding angles and their count
+	 * 
+	 */
+	public void count(double degrees, HashMap<Double, Integer> map) {
+
+		// Filter to find the appropriate bucket for the value
+
+		if (degrees >= 90.0) {
+			int count = (map.get(new Double(90.0))).intValue();
+			map.put(new Double(90.0), new Integer(++count));
+
+		} else if (degrees >= 45.0) {
+			int count = (map.get(new Double(45.0))).intValue();
+			map.put(new Double(45.0), new Integer(++count));
+
+		} else if (degrees >= 22.5) {
+			int count = (map.get(new Double(22.5))).intValue();
+			map.put(new Double(22.5), new Integer(++count));
+
+		} else if (degrees >= 11.25) {
+			int count = (map.get(new Double(11.25))).intValue();
+			map.put(new Double(11.25), new Integer(++count));
+
+		} else if (degrees >= 5.5125) {
+			int count = (map.get(new Double(5.5125))).intValue();
+			map.put(new Double(5.5125), new Integer(++count));
+
+		} else if (degrees >= 2.0) {
+			int count = (map.get(new Double(2.0))).intValue();
+			map.put(new Double(2.0), new Integer(++count));
+
+		} else if (degrees >= 1.5) {
+			int count = (map.get(new Double(1.5))).intValue();
+			map.put(new Double(1.5), new Integer(++count));
+
+		} else if (degrees >= 1.0) {
+			int count = (map.get(new Double(1.0))).intValue();
+			map.put(new Double(1.0), new Integer(++count));
+
+		} else if (degrees >= 0.75) {
+			int count = (map.get(new Double(0.75))).intValue();
+			map.put(new Double(0.75), new Integer(++count));
+
+		} else if (degrees >= 0.5) {
+			int count = (map.get(new Double(0.5))).intValue();
+			map.put(new Double(0.5), new Integer(++count));
+
+		} else if (degrees >= 0.25) {
+			int count = (map.get(new Double(0.25))).intValue();
+			map.put(new Double(0.25), new Integer(++count));
+
+		} else if (degrees >= 0.15) {
+			int count = (map.get(new Double(0.15))).intValue();
+			map.put(new Double(0.15), new Integer(++count));
+
+		} else if (degrees >= 0.05) {
+			int count = (map.get(new Double(0.05))).intValue();
+			map.put(new Double(0.05), new Integer(++count));
+
+		}
+
+	}
+
+	/**
+	 * Simply extract the LT,LG values from the list.
+	 * 
+	 * @param list
+	 *            a list with point-data of the form: INDEX:LT:LG:ANGLE:SAFETY
+	 * 
+	 * @return String a concatenation of all the LT,LG values.
+	 */
+	String extractListIntoString(List<String> list) {
+
+		final int LT = 1;
+
+		final int LG = 2;
+
+		String buffer = null;
+
+		Iterator it = list.iterator();
+
+		while (it.hasNext()) {
+
+			String p = (String) it.next();
+
+			String[] elements = p.split(":"); //$NON-NLS-1$
+
+			if (buffer == null) {
+
+				buffer = elements[LT] + "," + elements[LG] + ","; //$NON-NLS-1$ //$NON-NLS-2$
+
+			} else {
+
+				buffer += elements[LT] + "," + elements[LG] + ","; //$NON-NLS-1$ //$NON-NLS-2$
+
+			}
+
+		}
+
+		return buffer;
+	}
+
+	/**
+	 * Compute the cosine inverse of an angle and subract that value from an
+	 * offset of 180 degrees.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * 
+	 * @return List a list of angle values for all points in the polygon
+	 * 
+	 */
+	List<String> computeInverseCosines(STEMPolygon polygon) {
+
+		final double INFINITY = 10000000;
+
+		// List to keep track of tuples of the form : ( point, inverse
+		// ANGLE angle )
+		List<String> pointDataList = new ArrayList<String>();
+
+		// First, get an iterator to the points in the polygon
+		Iterator it = polygon.getIterator();
+
+		double degrees = 0.0;
+
+		// Get the first three points
+		double inverseCosine = INFINITY;
+
+		// String to store initial point. This will be used to set the value
+		// of the last point. Since a polygon has to be closed, the first and
+		// last points should be the same. It is better to store it than to
+		// recompute it later.
+		String initPointData = null;
+		String lastPointData = null;
+
+		PointData p1 = null;
+		PointData p2 = null;
+		PointData p3 = null;
+
+		int index = 0;
+
+		// Set the value of the first and last point.
+		// We never delete the first or the last point, otherwise we will
+		// turn this polygon into a non-polygon.
+		// Set to UNSAFE and angle to Double.MAX_VALUE to make sure that neither
+		// of these points ever be removed.
+
+		if (initPointData == null) {
+
+			PointData init = polygon.getInit();
+
+			// Set angle to a
+			initPointData = String.valueOf(0) + ":" + init.getLt() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+					+ init.getLg() + ":" + Double.MAX_VALUE + ":" + UNSAFE; //$NON-NLS-1$ //$NON-NLS-2$
+
+			lastPointData = String.valueOf(polygon.points() - 1) + ":" //$NON-NLS-1$
+					+ init.getLt() + ":" + init.getLg() + ":" //$NON-NLS-1$ //$NON-NLS-2$
+					+ Double.MAX_VALUE + ":" + UNSAFE; //$NON-NLS-1$
+
+		}
+
+		while (it.hasNext()) {
+
+			if (p1 == null) {
+				p1 = (PointData) it.next();
+				continue;
+			}
+
+			if (p2 == null) {
+				p2 = (PointData) it.next();
+				continue;
+			}
+
+			if (p3 == null) {
+				p3 = (PointData) it.next();
+			}
+
+			if (index == 0) {
+				// System.out.println("Adding (1) : " + initPointData);
+				pointDataList.add(index++, initPointData);
+			}
+
+			// String used to represent extended point data. It has the form :
+			// INDEX:LT:LG:ANGLE:SAFETY
+			String tuple = null;
+
+			// Now that we have three consecutive points, compute the inverse
+			// ANGLE of the angle
+			// for the triangle formed by these three consecutive points.
+			final double cc = 100000000000.0;
+			double lt1 = p1.getLt() * cc;
+			double lt2 = p2.getLt() * cc;
+			double lt3 = p3.getLt() * cc;
+			double lg1 = p1.getLg() * cc;
+			double lg2 = p2.getLg() * cc;
+			double lg3 = p3.getLg() * cc;
+
+			// compute: a^2 = (Xi- Xi-1)^2 + (Yi- Yi-1)^2
+			double a = Math.pow((lg2 - lg1), 2) + Math.pow((lt2 - lt1), 2);
+
+			// compute: b^2 = (Xi+1 -Xi)^2 + (Yi+1 -Yi)^2
+			double b = Math.pow((lg3 - lg2), 2) + Math.pow((lt3 - lt2), 2);
+
+			// compute: c^2 = (Xi+1 - Xi-1)^2 + (Yi+1 - Yi-1)^2
+			double c = Math.pow((lg3 - lg1), 2) + Math.pow((lt3 - lt1), 2);
+
+			// System.out.println(" A^2 = " + a);
+
+			// System.out.println(" B^2 = " + b);
+
+			// System.out.println(" C^2 = " + c);
+
+			// Now compute: (a^2 + b^2 - c^2) / 2ab
+
+			double ratio = ((a + b) - c) / (2 * Math.sqrt(a) * Math.sqrt(b));
+
+			// System.out.println("Ratio is : " + ratio);
+
+			// Now compute the arc ANGLE : cos-1( ratio )
+			inverseCosine = Math.acos(ratio);
+
+			degrees = Math.abs(180.0 - GenUtils.toDegrees(inverseCosine));
+
+			tuple = String.valueOf(index) + ":" + p2.getLt() + ":" + p2.getLg() //$NON-NLS-1$ //$NON-NLS-2$
+					+ ":" + new Double(degrees) + ":" + UNKNOWN; //$NON-NLS-1$ //$NON-NLS-2$
+
+			// Store tuple in the map
+			// System.out.println("Adding (1) : " + tuple);
+			pointDataList.add(index++, tuple);
+
+			// System.out.println("Inverse cosine is " + inverseANGLE);
+
+			// Slide the points by one to do the new computation of the angle
+
+			// Now set p1 <- p2
+			p1 = p2;
+
+			// Now set p2 <- p3
+			p2 = p3;
+
+			// Now set p3 = null
+			p3 = null;
+
+			// Check to see if this is the last iteration.
+			if (it.hasNext() == false) {
+
+				// If so, add the last point.
+				// System.out.println("Adding (2) : " + lastPointData);
+				pointDataList.add(index, lastPointData);
+				break;
+			}
+
+		}
+
+		return pointDataList;
+	}
+
+	/**
+	 * Check to see if this is a real polygon (i.e. closed)
+	 * 
+	 * @param polygon
+	 *            A STEM polygon
+	 * 
+	 * @return true if the parameter "polygon" is a STEM polygon
+	 */
+	protected boolean isPolygon(STEMPolygon polygon) {
+
+		PointData init = polygon.getInit();
+		PointData last = polygon.getLast();
+
+		if (init.getLt() != last.getLt()) {
+			// Not a polygon
+			return false;
+		} else if (init.getLg() != last.getLg()) {
+			// Not a polygon
+			return false;
+		}
+
+		// Yes, it is a polygon
+		return true;
+	}
+
+	/**
+	 * Check to see if this polygon is duplicated.
+	 * 
+	 * @param polygon
+	 *            a STEM polygon
+	 * @param it
+	 *            an iterator on the polygon list
+	 * 
+	 * @return true if this polygon is already in the list of known polygons
+	 */
+	protected boolean isPolygonDuplicated(Iterator it, STEMPolygon polygon) {
+
+		if (it.hasNext() != true) {
+			return false;
+		}
+
+		while (it.hasNext()) {
+			STEMPolygon current = (STEMPolygon) it.next();
+			if (current.same(polygon) == true) {
+				// Not unique, it is duplicated so condition is false.
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * This method creates the opening XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @param id
+	 *            the descriptor for the entity
+	 * 
+	 * @return a GML tag that describes a polygon
+	 */
+	protected String openPolygonIslandTags(String id) {
+
+		String tags = null;
+		tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the tags that describe a "polygon island" or linear
+	 * ring and puts the polygon data inside of it.
+	 * 
+	 * @param buffer
+	 *            the data buffer containing all the polygond data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag for opening a linear ring.
+	 */
+	protected String addLinearRingTags(String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = "<gml:LinearRing>\n"; //$NON-NLS-1$
+		tags += "<gml:posList>\n"; //$NON-NLS-1$
+		tags += polygonData + "\n"; //$NON-NLS-1$
+		tags += "</gml:posList>\n"; //$NON-NLS-1$
+		tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the closing XML tags that deal with islands of
+	 * polygon data.
+	 * 
+	 * @return a GML tag for closing a polygon.
+	 */
+	protected String closePolygonIslandTags() {
+
+		String tags = null;
+		tags = "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+		tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+
+		return tags;
+	}
+
+	/**
+	 * This method creates the XML tags that deal with simple polygon data and
+	 * includes the polygon data in it.
+	 * 
+	 * @param id
+	 *            the descriptor for the entity
+	 * @param buffer
+	 *            the data buffer containing all the polygon data
+	 * @param level
+	 *            the admin level
+	 * 
+	 * @return a GML tag to create simple polygon.
+	 */
+	protected String createSimplePolygonTags(String id, String buffer, int level) {
+
+		int offset = 0;
+
+		String polygonData = null;
+
+		switch (level) {
+
+		case DataTypes.LEVEL_0:
+			offset = 2;
+			break;
+
+		case DataTypes.LEVEL_1:
+			offset = 3;
+			break;
+
+		case DataTypes.LEVEL_2:
+			offset = 4;
+			break;
+		}
+
+		// Tokenize
+		StringTokenizer tokens = new StringTokenizer(buffer, ","); //$NON-NLS-1$
+
+		// Advance the first K-tokens.
+		for (int i = 0; i < offset; i++) {
+			if (tokens.hasMoreTokens()) {
+				tokens.nextToken();
+			}
+		}
+
+		while (tokens.hasMoreTokens()) {
+
+			String token = tokens.nextToken();
+
+			if (GenUtils.isNumeric(token) == false) {
+				continue; // Ignore, this is not a valid coordinate.
+			}
+
+			// Convert token (polygon data) to an int.
+			double coord = GenUtils.toDegrees(GenUtils.getDouble(token));
+
+			// Format lt, lg values according to our convention
+			if (polygonData == null) {
+				polygonData = GenUtils.format(coord) + " "; //$NON-NLS-1$
+			} else {
+				polygonData += GenUtils.format(coord) + " "; //$NON-NLS-1$
+			}
+		}
+
+		String tags = null;
+
+		if (polygonData == null) {
+			tags = "<gml:Polygon gml:id=\"" + id + "\"/>\n"; //$NON-NLS-1$ //$NON-NLS-2$
+		} else {
+			tags = "<gml:Polygon gml:id=\"" + id + "\">\n"; //$NON-NLS-1$ //$NON-NLS-2$
+			tags += "<gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "<gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "<gml:posList>\n"; //$NON-NLS-1$
+			tags += polygonData + "\n"; //$NON-NLS-1$
+			tags += "</gml:posList>\n"; //$NON-NLS-1$
+			tags += "</gml:LinearRing>\n"; //$NON-NLS-1$
+			tags += "</gml:outerBoundaryIs>\n"; //$NON-NLS-1$
+			tags += "</gml:Polygon>\n"; //$NON-NLS-1$
+		}
+
+		return tags;
+	}
+
+	/**
+	 * Generate the opening tags for this GML file.
+	 * 
+	 * @param code
+	 *            the ISO code
+	 * @param level
+	 *            the admin level
+	 * @return the opening tags for the GML file
+	 */
+	protected String getOpeningTags(ISOCode1 code, int level) {
+
+		// Calendar date = Calendar.getInstance();
+
+		String tags = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; //$NON-NLS-1$
+		tags += GenUtils.geGMLCopyright();
+		tags += GenUtils.getGMLKeyFormatExplanation();
+		tags += "<Map xmlns:gml=\"http://www.opengis.net/gml\" xmlns:georss=\"http://www.georss.org/georss\">\n"; //$NON-NLS-1$
+		tags += "<title>" + code.getAlpha3() + " Level " + level //$NON-NLS-1$ //$NON-NLS-2$
+				+ " Map</title>\n"; //$NON-NLS-1$
+		tags += "<subTitle>Administrative Boundaries</subTitle>\n"; //$NON-NLS-1$
+		tags += "<updated>Tue Nov 07 16:57:55 PST 2006 </updated>\n"; //$NON-NLS-1$
+		tags += "<entry>\n"; //$NON-NLS-1$
+		tags += "<georss:where>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * Generate the closing tags for this GML file.
+	 * 
+	 * @return the closing tags of the GML file
+	 */
+	protected String getClosingTags() {
+		String tags = "</georss:where>\n"; //$NON-NLS-1$
+		tags += "</entry>\n"; //$NON-NLS-1$
+		tags += "</Map>\n"; //$NON-NLS-1$
+		return tags;
+	}
+
+	/**
+	 * The execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int THRESHOLD = 0;
+		// final int ISO_3166_1 = 1;
+		// final int ISO_3166_2 = 2;
+		// final int FIX_FILE = 3;
+		// final int TARGET_LIST = 4;
+		// final int LEX_DIR = 5;
+		// final int OUTPUT_DIR = 6;
+		// final int PARAMS = 7;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t Threshold (in degrees)"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO 3166-2 file"); //$NON-NLS-1$
+		// System.out.println("\t\t ISO fix file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Lexicographic sorting directory");
+		// //$NON-NLS-1$$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+		//
+		// SinglePassDownSampler sampler = new SinglePassDownSampler(
+		// args[THRESHOLD], args[ISO_3166_1], args[ISO_3166_2],
+		// args[FIX_FILE], args[TARGET_LIST], args[LEX_DIR],
+		// args[OUTPUT_DIR]);
+		// sampler.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		SinglePassDownSampler sampler = new SinglePassDownSampler(
+				args[CONFIG_FILE]);
+
+		sampler.run();
+
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SplitLogFile.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SplitLogFile.java
new file mode 100644
index 0000000..c4716e7
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/SplitLogFile.java
@@ -0,0 +1,134 @@
+package org.eclipse.stem.utility.generators;
+
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/**
+ * Split a log file into 2 or more files
+ */
+public class SplitLogFile {
+
+	static String LS = System.getProperty("line.separator"); //$NON-NLS-1$
+	
+	
+	/**
+	 * 
+	 * @param args
+	 */
+	@SuppressWarnings("nls")
+	public static void main(String [] args) {
+		if(args.length < 1) {
+			System.err.println("Usage: SplitLogFile <log file> <segments>"); //$NON-NLS-1$
+			System.exit(-1);
+		}
+		
+		String logFile = args[0];
+		int segments = 2; //default
+		if(args.length == 2)
+			segments = Integer.parseInt(args[1]);
+		
+		
+		ArrayList<String>headers = new ArrayList<String>();
+		ArrayList<ArrayList<String>>logText = new ArrayList<ArrayList<String>>();
+		ArrayList<ArrayList<Double>>logData = new ArrayList<ArrayList<Double>>();
+		
+		List<String>iterations = new ArrayList<String>();
+		List<String>timestamps = new ArrayList<String>();
+		List<List>dataVals = new ArrayList<List>();
+		
+		try {
+			 // Read infectious file
+			 FileInputStream ifile = new FileInputStream(logFile); 
+		     BufferedReader ireader = new BufferedReader(new InputStreamReader(ifile));
+		     String header = null;
+		     header=ireader.readLine();
+		     if(header == null) {
+		    	 System.err.println("Error, "+args[0]+" file is empty!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		     StringTokenizer st = new StringTokenizer(header, ","); //$NON-NLS-1$
+		     int column = 0;
+		     while(st.hasMoreTokens()) {
+		    	 String val = st.nextToken();
+		    	 headers.add(val.trim());
+		    	 ++column;
+		     }
+		    
+		   
+		    
+		    FileWriter [] writers = null;
+		    int columnsperfile = (headers.size()-2)/segments;
+		    writers = new FileWriter[segments];
+		    for(int i=0;i<segments;++i) {
+		    	writers[i] = new FileWriter(logFile+"."+i+".csv");
+		    	writers[i].write(headers.get(0));
+		    	writers[i].write(",");
+		    	writers[i].write(headers.get(1));
+		    	writers[i].write(",");
+		    	int end = (i==segments-1)? headers.size() : (2+(i+1)*columnsperfile);
+		    	for(int j=2+i*columnsperfile;j<end;++j) {
+		    		writers[i].write(headers.get(j));
+		    		if(j<end-1)writers[i].write(",");
+		    	}
+		    	writers[i].write(LS);
+		    }
+		    
+		    String data = null; 
+		    data=ireader.readLine();
+		    if(data == null) {
+		    	 System.err.println("Error, "+args[0]+" file has no data!");  //$NON-NLS-1$//$NON-NLS-2$
+		    	 System.exit(-2);
+		     }
+		    while(data != null && data.trim().length() > 0) {
+			    st = new StringTokenizer(data, ","); //$NON-NLS-1$
+			    column = 0;
+			    ArrayList<String> txtlist = new ArrayList<String>();
+			    ArrayList<Double> datalist = new ArrayList<Double>();
+				while (st.hasMoreTokens()) {
+					String val = st.nextToken().trim();
+					txtlist.add(val);
+				    ++ column;
+			    } // read tokens
+				
+				for(int i=0;i<segments;++i) {
+					writers[i].write(txtlist.get(0));
+				 	writers[i].write(",");
+					writers[i].write(txtlist.get(1));
+				 	writers[i].write(",");
+				 	
+					int end = (i==segments-1)? headers.size() : (2+(i+1)*columnsperfile);
+			    	for(int j=2+i*columnsperfile;j<end;++j) {
+			    		writers[i].write(txtlist.get(j));
+			    		if(j<end-1)writers[i].write(",");
+			    	}
+			    	writers[i].write(LS);
+				}
+				txtlist.clear();
+				data=ireader.readLine();
+		    }
+		    ireader.close();
+		    for(int i=0;i<segments;++i) {writers[i].flush();writers[i].close();}
+		    // Process the data
+		} catch(Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
+}
+
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/URLGenerator.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/URLGenerator.java
new file mode 100644
index 0000000..1c3b3e7
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/URLGenerator.java
@@ -0,0 +1,209 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- Instances of this utility
+ * class collect all the URLs and stores them in a single file.
+ * 
+ */
+
+public class URLGenerator {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+
+	private String isoFile = null;
+
+	private String urlFile = null;
+
+	private String outputDir = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List urls = null;
+
+	List codeList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param isoFile
+	 *            data file containing the ISO3166-1 codes
+	 * @param urlFile -
+	 *            the directory containing URLs for countries in out data set
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	public URLGenerator(String isoFile, String urlFile, String outputDir) {
+		this.isoFile = isoFile;
+		this.urlFile = urlFile;
+		this.outputDir = outputDir;
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		urls = GenUtils.populateList(urlFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		codeList = GenUtils.populateList(isoFile);
+
+		// Now, process each item in the target list.
+		process();
+	}
+
+	/**
+	 * Process our global list of countries -- find and add a URL for each
+	 * country.
+	 * 
+	 */
+	public void process() {
+
+		final int COUNTRY = 0;
+		PrintWriter outputFile = null;
+
+		// A URL location is a folder with URL files
+		// for every URL location
+		for (int i = 0; i < urls.size(); i++) {
+
+			// Get the next URL location in the list.
+			String urlLocation = ((String) urls.get(i)).trim();
+
+			// If this line starts with "#", then ignore it.
+			if (urlLocation.trim().startsWith("#")) { //$NON-NLS-1$
+				continue;
+			}
+
+			System.out
+					.println("URL is : " + urlLocation); //$NON-NLS-1$
+
+			// Open the URL location (a folder that contains URL files)
+			File dir = GenUtils.openDirectory(urlLocation);
+
+			try {
+
+				if (dir != null) {
+
+					// Get a URL file
+					File[] urlFiles = dir.listFiles();
+
+					for (int j = 0; j < urlFiles.length; j++) {
+
+						BufferedReader reader = GenUtils.openReader(urlFiles[j]
+								.getAbsolutePath());
+
+						String url = null;
+
+						// Read a URL
+						while (GenUtils.EOF(url = reader.readLine()) != true) {
+							System.out.println(Messages
+									.getString("URLGenerator.2") + url); //$NON-NLS-1$
+							// If this line starts with "#", then ignore it.
+							if (url.trim().startsWith("#")) { //$NON-NLS-1$
+								break;
+							}
+
+							String[] tokens = urlFiles[j].getName()
+									.split("\\."); //$NON-NLS-1$
+
+							// Get the ISO3166-1 info for this country
+							ISOCode1 isoCode = GenUtils.getISOCode(
+									tokens[COUNTRY], codeList);
+							if (isoCode == null) {
+								System.out.println(Messages
+										.getString("URLGenerator.5") //$NON-NLS-1$
+										+ tokens[COUNTRY]);
+								break;
+							}
+
+							// Open output file
+							if (outputFile == null) {
+								String fileName = outputDir;
+								fileName += tokens[COUNTRY]
+										+ Messages.getString("URLGenerator.6"); //$NON-NLS-1$
+								outputFile = GenUtils.openWriter(fileName);
+							}
+
+							// Now write the URL to our file
+							outputFile.write(isoCode.getName() + ":" //$NON-NLS-1$
+									+ isoCode.getAlpha3() + ":" + url + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+							System.out.println(isoCode.getName() + ":" //$NON-NLS-1$
+									+ isoCode.getAlpha3() + ":" + url + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						} // internal while
+
+						reader.close();
+
+						if (outputFile != null) {
+							outputFile.close();
+							outputFile = null;
+						}
+
+						// Run garbage collection
+						System.gc();
+
+					} // for j
+
+				} // if (dir != null)s
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for i
+
+	}
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		final int ISO_FILE = 0;
+		final int URL_INDEX = 1;
+		final int OUTPUT_DIR = 2;
+		final int PARAMS = 3;
+
+		if (args.length < PARAMS) {
+
+			System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\tTo run, please provide the following arguments : "); //$NON-NLS-1$			
+			System.out.println("\t\t ISO 3166-1 file"); //$NON-NLS-1$
+			System.out.println("\t\t URL index file"); //$NON-NLS-1$			
+			System.out.println("\t\t Output directory"); //$NON-NLS-1$				
+			return;
+		}
+
+		URLGenerator gen = new URLGenerator(args[ISO_FILE], args[URL_INDEX],
+				args[OUTPUT_DIR]);
+		gen.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/USA2DivaFormatConverter.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/USA2DivaFormatConverter.java
new file mode 100644
index 0000000..1a241e9
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/USA2DivaFormatConverter.java
@@ -0,0 +1,451 @@
+/**
+ * 
+ */
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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: IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+/**
+ * 
+ * STEM II Data Migration/Generation Utilities : Instances of this utility class
+ * convert data from an alternative format into Diva format. It was used for a
+ * very specific purpose to help bring the data for the USA into the same format
+ * as the rest of the files in the Diva set.
+ * 
+ * 
+ * To configure, see configuration file :
+ * org.eclipse.stem.utility/configuration/USA2DivaFormatConverter.config
+ * 
+ * 
+ * To run, add path to configuration file in the run profile (i.e.
+ * C:\stemII\org.eclipse.stem.utility\configuration\USA2DivaFormatConverter.config)
+ * 
+ * To run, add the following parameters to the run configuration:
+ * 
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\USA_L1_Data\USA_L1.txt
+ * C:\stemII\org.eclipse.stem.utility\dataMigration\input\properties\formatList.txt
+ * C:\diva\NorthAmerica\USA\
+ * 
+ */
+
+public class USA2DivaFormatConverter {
+
+	/**
+	 * Our source files for ISO 3166-1 codes and for the list of target
+	 * countries.
+	 */
+	// private String iso3166_1 = null;
+	private String usaL1File = null;
+
+	private String targetFile = null;
+
+	private String outputDir = null;
+
+	private String workspace = null;
+
+	/**
+	 * List for ISO 3166-1 codes and target countries.
+	 */
+
+	List targetList = null;
+
+	// List codeList = null;
+
+	List dataList = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param usaL1File -
+	 *            data file with the ISO3166-1 ALPHA_2 and ALPHA_3 codes.
+	 * @param targetFile -
+	 *            data file where we find a list of countries for generation of
+	 *            their corresponding area.properties files.
+	 * @param outputDir -
+	 *            the output directory for the files generated.
+	 * 
+	 */
+	// public USA2DivaFormatConverter(/* String iso3166_1, */String usaL1File,
+	// String targetFile, String outputDir) {
+	// // Set values of global variables.
+	// // this.iso3166_1 = iso3166_1;
+	// this.usaL1File = usaL1File;
+	// this.targetFile = targetFile;
+	// this.outputDir = outputDir;
+	// targetList = null;
+	// }
+	/**
+	 * @param configFile
+	 */
+	public USA2DivaFormatConverter(String configFile) {
+
+		// Load all configuration variables
+		HashMap<String, String> vars = GenUtils.loadConfigFile(configFile);
+
+		Set<String> keys = vars.keySet();
+		Iterator it = keys.iterator();
+		while (it.hasNext()) {
+			String var = (String) it.next();
+
+			// Assign values to configuration variables :
+			if (var.equals("WORKSPACE")) { //$NON-NLS-1$
+				workspace = vars.get(var);
+			} else if (var.equals("NAMES_LIST")) { //$NON-NLS-1$
+				usaL1File = vars.get(var);
+			} else if (var.equals("TARGET_LIST")) { //$NON-NLS-1$
+				targetFile = vars.get(var);
+			} else if (var.equals("PROPERTIES_OUTPUT")) { //$NON-NLS-1$
+				outputDir = vars.get(var);
+			}
+
+		} // while
+
+		// The workspace variable should end with a slash character
+		if (workspace.endsWith("\\") == false) { //$NON-NLS-1$
+			workspace += "\\"; //$NON-NLS-1$
+		}
+
+		String path = workspace + GenConstants.PARAMS_DIR;
+
+		// Set remaining config vars using WORKSPACE (workspace relative)
+		if (usaL1File == null) {
+			usaL1File = path + GenConstants.USA_L1_DATA;
+		}
+		if (targetFile == null) {
+			targetFile = path + GenConstants.FORMAT_LIST;
+		}
+		if (outputDir == null) {
+			outputDir = GenConstants.DUMMY_DIR;
+		}
+
+		targetList = null;
+	}
+
+	/**
+	 * This method sets up and runs this generator.
+	 * 
+	 */
+	public void run() {
+		// Read and keep in memory a list of the countries we want.
+		targetList = GenUtils.populateList(targetFile);
+
+		// Read and keep in memory a list of the ISO3166-1 ALPHA2, ALPHA3, and
+		// numeric codes.
+		// codeList = GenUtils.populateList(iso3166_1);
+
+		// Read level 1 data for the USA
+		dataList = GenUtils.populateList(usaL1File);
+
+		// Run the converter: US Census format -> Diva set format
+		process();
+
+	}
+
+	/**
+	 * Convert a data file that comes into the format from the US Census :
+	 * http://www.census.gov/geo/www/cob/co2000.html into the Diva format that
+	 * the generators can handle. Both formats, the US Census the Diva format
+	 * are fixed, well-defined formats. This wont format any arbitrary format
+	 * into Diva format. Converts : US Census format -> Diva format
+	 * 
+	 */
+	protected void process() {
+
+		// A writer for the new file we are creating.
+		PrintWriter divaFile = null;
+
+		// Object holding ISO3166-1 related data.
+		// ISOCode1 isoCode = null;
+
+		// Name of the new properties file.
+		String fileName = null;
+
+		int size = targetList.size();
+
+		// For every country
+		for (int i = 0; i < size; i++) {
+
+			// Get the next file in the list.
+			String file = ((String) targetList.get(i)).trim();
+
+			// Open the data source file for this country.
+			BufferedReader reader = GenUtils.openReader(file);
+			System.out
+					.println("\t\t<<<< USA TO DIVA FORMAT CONVERTER -- Processing Country : " + file + " >>>>"); //$NON-NLS-1$ //$NON-NLS-2$ 
+			try {
+
+				if (reader != null) {
+
+					String buffer = null;
+
+					while (GenUtils.EOF(buffer = reader.readLine()) != true) {
+
+						// Make sure that we mark all unknown data.
+						buffer = buffer.replace(",,", ",UNKNOWN,"); //$NON-NLS-1$ //$NON-NLS-2$
+
+						String[] items = buffer.split(","); //$NON-NLS-1$
+
+						// If the directory does not exist for this country,
+						// create it using ISO alpha3 code.
+						File countryDir = new File(outputDir + "USA"); //$NON-NLS-1$
+
+						if (countryDir != null && countryDir.exists() == false) {
+							// Directory does not exist. Create it.
+							countryDir.mkdir();
+						}
+
+						// Create and open the new output file.
+						if (divaFile == null) {
+							// Create the file name
+							fileName = countryDir + "\\USA.txt"; //$NON-NLS-1$
+
+							// Create tne new file
+							divaFile = GenUtils.openWriter(fileName);
+						}
+
+						// Apply the formatting to the current buffer : US
+						// Census format -> Diva format
+						String divaLine = convert2Diva(items);
+
+						// Write the converted line
+						// System.out.println("Diva string = " + divaLine);
+						GenUtils.addData(divaFile, divaLine);
+
+					}// while
+
+					// This is an ugly hack since the editors are not powerful
+					// enough and cant handle copy paste operations of 20MEGS
+					// appendData(divaFile);
+
+					// Close the target file.
+					divaFile.close();
+
+					// Close all open resources.
+					reader.close();
+
+					// Run garbage collection
+					System.gc();
+
+				}
+
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+		} // for
+
+	}
+
+	/**
+	 * Convert the buffer given in US Census format into Diva format
+	 * 
+	 * @param data
+	 *            a buffer with data on US Census format
+	 * 
+	 * @return converted string
+	 * 
+	 */
+	public String convert2Diva(String[] data) {
+
+		// Useful symbolic constants
+		final int STATE_ID = 4;
+		final int L1_ADMIN = 5;
+		final int L2_ADMIN = 6;
+		final int L2_ADMIN_TYPE = 8; // VALID TYPES = BOROUGH, PARISH,COUNTY,
+		// CITY. INVALID = CENSUS AREA
+
+		// Level of the data we are processing
+		int level = -1;
+
+		// State ID
+		String state_id = null;
+
+		// The formatted prefix string
+		String divaString = "USA,United States"; //$NON-NLS-1$
+
+		// Get the level of the data we are processing.
+		level = GenUtils.isNumeric(data[L1_ADMIN]) == false ? 1 : 2;
+
+		// Get the state ID
+		state_id = data[STATE_ID];
+
+		// Get rid of blanks
+		state_id = state_id.trim();
+
+		// * IF LEVEL == 1, then we can ignore columns 6,7,8, and 9
+		//
+		// ** Level 1 data should be in the format:
+		//
+		// USA, United States, Level1 Admin, <POLYGON DATA>
+		//
+		//
+		// * IF LEVEL == 2, then we can ignore columns 6,8, and 9
+		//
+		// ** Level 2 data should be in the format:
+		//
+		// USA, United States, Level1 Admin, Level 2 Admin, <POLYGON DATA>
+		//
+		// To find the level 1 container, iterate over the list with data for
+		// the USA. If during iteration we match state_id, then that is the
+		// container.
+
+		// Get the number of items in the buffer
+		int length = data.length;
+
+		// Process each element in the buffer -- ignore the first five items.
+		for (int i = 5; i < length; i++) {
+
+			// Ignore irrelevant data items that occur at both levels
+			if (i == 7 || i == 8) {
+				continue;
+			}
+
+			// Ignore irrelevant data that only occurs at level 1
+			if (level == 1) {
+				if (i == 6 || i == 9) {
+					continue;
+				}
+			}
+
+			// Ignore irrelevant data that only occurs at level 2
+			// If level is 2, then find the container for this entity
+			if (level == 2) {
+
+				// Irrelevant data, ignore.
+				if (i == 5) {
+					continue;
+				}
+
+				// Find the container of the level 2 administration.
+				if (i == 6) {
+					divaString += "," + findContainer(state_id, dataList); //$NON-NLS-1$
+
+					if (data[L2_ADMIN_TYPE].contains("Census Area") == false) { //$NON-NLS-1$
+						// Add the type to the name of the administration :
+						// (i.e. for Fairfax = admin and city = type, get
+						// Fairfax city)
+						divaString += "," + data[L2_ADMIN] + " " //$NON-NLS-1$ //$NON-NLS-2$
+								+ data[L2_ADMIN_TYPE];
+						continue;
+					}
+
+				}
+
+			}
+
+			divaString += "," + data[i]; //$NON-NLS-1$
+
+		} // for
+
+		// Finally add a new line to the string.
+		divaString += "\n"; //$NON-NLS-1$
+
+		return divaString;
+	}
+
+	/**
+	 * Find the level 1 container for the current level 2 administration
+	 * 
+	 * @param state -
+	 *            the id of the container (state)
+	 * 
+	 * @param dataList -
+	 *            a list of level 1 data for the USA
+	 * 
+	 * @return - the name of the level 1 container
+	 * 
+	 */
+	public String findContainer(String state, List dataList) {
+
+		// Format in data list is :
+		// US : USA : US-AL : Alabama : 1
+
+		// Useful symbolic constants
+		final int CONTAINER = 3;
+		final int STATE_ID = 4;
+
+		String stateStr = state.replace("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+		Iterator it = dataList.iterator();
+
+		while (it.hasNext()) {
+
+			String entry = ((String) it.next()).toUpperCase().trim();
+
+			entry = entry.replaceAll("\\t", ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+			String entries[] = entry.split(":"); //$NON-NLS-1$
+
+			String current_id = entries[STATE_ID];
+
+			if (Integer.parseInt(stateStr) == Integer.parseInt(current_id)) {
+				return entries[CONTAINER].toUpperCase();
+			}
+
+		}
+
+		return "NOT FOUND"; //$NON-NLS-1$
+	}
+
+	/**
+	 * Main execution entry point.
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		// final int ISO_3166_1 = 0;
+		// final int USA_L1_DATA = 0;
+		// final int TARGET_LIST = 1;
+		// final int OUTPUT_DIR = 2;
+		// final int PARAMS = 3;
+		//
+		// if (args.length < PARAMS) {
+		// System.out.println("--Wrong arguments--"); //$NON-NLS-1$
+		// System.out
+		// .println("\tTo run, please provide the following arguments : ");
+		// //$NON-NLS-1$
+		// System.out.println("\t\t USA level 1 data file"); //$NON-NLS-1$
+		// System.out.println("\t\t Target countries file"); //$NON-NLS-1$
+		// System.out.println("\t\t Output directory"); //$NON-NLS-1$
+		// return;
+		// }
+
+		// USADivaConverter converter = new USADivaConverter(/*
+		// args[ISO_3166_1], */
+		// args[USA_L1_DATA], args[TARGET_LIST], args[OUTPUT_DIR]);
+		// converter.run();
+
+		final int CONFIG_FILE = 0;
+		final int PARAMS = 1;
+
+		if (args.length < PARAMS) {
+			System.out.println("\t\t--Wrong arguments--"); //$NON-NLS-1$
+			System.out
+					.println("\t\tTo run, please provide the following argument(s) : "); //$NON-NLS-1$
+			System.out.println("\t\t\t Configuration file"); //$NON-NLS-1$
+			System.exit(1);
+		}
+
+		USA2DivaFormatConverter converter = new USA2DivaFormatConverter(
+				args[CONFIG_FILE]);
+
+		converter.run();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/WorldReader.java b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/WorldReader.java
new file mode 100644
index 0000000..1eadb35
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/WorldReader.java
@@ -0,0 +1,138 @@
+package org.eclipse.stem.utility.generators;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/**
+ * STEM II Data Migration/Generation Utilities -- Instances of this utility class take as input
+ * a file containing a list of all input data we want to read. The input should
+ * be in ESRI format and the output is a plain text file.
+ *
+ *
+ * NOTE: to run instances of this class, we need MapReader.java from STEM I.
+ * Once we get MapReader, we need to uncomment lines 111-113 in this file.
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * C:\EclipseProjects\workspace2\GreenScreen\dataMigration\input\world\NorthAmerica.txt
+ * 
+ */
+
+/**
+ * 
+ * NOTE: This is just an example of a real configuration. Paths will change
+ * according to the location in your machine of the ISO3166-1, ISO3166-2 data
+ * files as well as the output directory and the directory where we find the
+ * migrated (or extracted) area/population data from STEM I.
+ * 
+ * Add the following values to the run configuration:
+ * 
+ * 
+ * 
+ */
+
+public class WorldReader {
+
+	final int LOCATION = 0;
+
+	final int FILE_NAME = 1;
+
+	String[] locations = null;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param locations
+	 */
+	public WorldReader(String[] locations) {
+
+		// Set a reference to the input locations.
+		this.locations = locations;
+
+	}
+
+	/**
+	 * Process all input country files. For each country file, call MapReader on
+	 * it to generate plain text file from ESRI file.
+	 */
+	public void processInput() {
+
+		String input = null;
+
+		if (locations == null) {
+			System.out.println("Error: please specify an input location(s)"); //$NON-NLS-1$
+			return;
+		}
+
+		int size = locations.length;
+
+		for (int i = 0; i < size; i++) {
+
+			try {
+				// First, open the input file - process input files one at a
+				// time.
+
+				System.out.println("Location is : " + locations[i]); //$NON-NLS-1$
+				BufferedReader in = new BufferedReader(new FileReader(
+						locations[i]));
+				while ((input = in.readLine()) != null) {
+					if (input.length() > 0) {
+						System.out.println("World Reader -- Input = " + input); //$NON-NLS-1$
+						mapRead(input);
+					}
+				}
+				in.close();
+			} catch (FileNotFoundException e) {
+				e.printStackTrace();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * Tokenize the input into a location and file name.
+	 * 
+	 * @param input
+	 *            A string of the form: LOCATION;FILENAME
+	 */
+	public void mapRead(String input) {
+		// Split input string to get the input folder and the output file name.
+		String[] data = input.split(";"); //$NON-NLS-1$
+		String location = data[LOCATION];
+		String fileName = data[FILE_NAME];
+
+		if (location == null || fileName == null) {
+			return;
+		}
+		System.out.println("Location is : " + location); //$NON-NLS-1$
+		System.out.println("File name is : " + fileName); //$NON-NLS-1$
+		MapReader mr = new MapReader(fileName.trim());
+		mr.readDirectory(location.trim());
+		mr.closeFile();
+	}
+
+	/**
+	 * Execution entry point
+	 * 
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		WorldReader wr = new WorldReader(args);
+		wr.processInput();
+	}
+
+}
diff --git a/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/messages.properties b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/messages.properties
new file mode 100644
index 0000000..1d2a69b
--- /dev/null
+++ b/org.eclipse.stem.utility/src/org/eclipse/stem/utility/generators/messages.properties
@@ -0,0 +1,338 @@
+Admin1LexSorter.0=Processing country : 
+Admin1LexSorter.3=_ADMIN1_LEX.txt
+Admin1LexSorter.3=_ADMIN1_LEX.txt
+Admin1LexSorter.10=Wrong arguments. Provide ISO 3166-1, ISO 3166-2, ISO code fix file, list of countries, and output directory.
+Admin2LexSorter.10=Descriptors by lexicographic ordering : 
+Admin2LexSorter.11=Admin 1 = 
+Admin2LexSorter.12=\t\tAt : 
+Admin2LexSorter.19=\t\tGenerated : 
+Admin2LexSorter.20=\t\tGenerated : 
+Admin2LexSorter.21=Descriptors by lexicographic ordering : 
+Admin2LexSorter.22=Admin 1 = 
+Admin2LexSorter.23=At : 
+Admin2LexSorter.24=\ -- admin2 is : 
+Admin2LexSorter.25=indexLookup : entry not found for 
+Admin1LexSorter.1=Processing country : 
+Admin1LexSorter.2=\ >>>>
+Admin1LexSorter.8=\t\tGenerated : 
+Admin1LexSorter.9=Wrong arguments. Provide ISO 3166-1, ISO 3166-2, ISO code fix file, list of countries, and output directory.
+Admin1LexSorter.9=\t\tGenerated : 
+Admin2LexSorter.0=Processing country : 
+Admin2LexSorter.5=_ADMIN2_LEX.txt
+Admin2LexSorter.9=Descriptors by lexicographic ordering : 
+AreaDataMigrator.0=File path = 
+AreaDataMigrator.1=LoadXML():  Error configuring xml document builder 
+AreaGenerator.10=CIA
+AreaGenerator.11=CIA
+AreaGenerator.114=UNITEDNATIONS
+AreaGenerator.115=UNITEDNATIONS
+AreaGenerator.122=_2_POLYAREA.txt
+AreaGenerator.116=area.properties
+AreaGenerator.123=Level 2 ( 
+AreaGenerator.117=\ Level 2 admin = 
+AreaGenerator.118=\ Descriptor = 
+AreaGenerator.119=\ area = 
+AreaGenerator.120=\ level = 
+AreaDataMigrator.10=Ignoring malformed entry : 
+AreaDataMigrator.17=C:\\EclipseProjects\\workspace2\\GreenScreen\\InstallTemplate\\Maps\\
+AreaDataMigrator.19=Country is :  
+AreaDataMigrator.20=\ code = 
+AreaDataMigrator.21=_AREA.txt
+AreaDataMigrator.22=_Area_
+AreaDataMigrator.23=.xml
+AreaDataMigrator.24=File not found for : 
+AreaDataMigrator.28=Wrong arguments. Provide ISO data file, list of countries, and output directory.
+AreaGenerator.1=CIA
+AreaGenerator.2=USCENSUSPUERTORICO
+AreaGenerator.3=USCENSUSAREA
+AreaGenerator.4=USCENSUSBOUNDS
+AreaGenerator.5=CIA
+AreaGenerator.6=CITYPOPULATION
+AreaGenerator.7=USCENSUSPUERTORICO
+AreaGenerator.8=USCENSUSBOUNDS
+AreaGenerator.9=USCENSUSAREA
+AreaGenerator.0=CITYPOPULATION
+DivaConverter.1=Processing country : 
+DivaConverter.1=Processing country : 
+DivaConverter.7=\\USA.txt
+DivaConverter.8=USA,United States
+DivaConverter.10=Census Area
+DivaConverter.20=NOT FOUND
+DivaConverter.21=Wrong arguments. Provide USA level 1 data file, target list, and output directory.
+DownSampler.0=Wrong arguments. Provide threshold (alpha degress), total passes, ISO 3166-1 and ISO 3166-2 data files, ISO code fix file, list of countries, and output directories.
+GenUtils.15=FOO
+GenUtils.16=UNK
+GenUtils.17=UNK
+GenUtils.18=0
+GenUtils.19=Descriptor -> 
+GenUtils.9=0
+GenUtils.39=\# * Copyright (c) 2006 IBM Corporation and others.\n
+GenUtils.40=\# * All rights reserved. This program and the accompanying materials\n
+GenUtils.41=\# * are made available under the terms of the Eclipse Public License v1.0\n
+GenUtils.42=\# * which accompanies this distribution, and is available at\n
+GenUtils.43=\# * http://www.eclipse.org/legal/epl-v10.html\n
+GenUtils.45=\# * Contributors:\n
+GenUtils.46=\# *     IBM Corporation - initial API and implementation\n
+GenUtils.14=Not Found
+GenUtils.13=\# * Key Format: \n
+GenUtils.12=\# * \t For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: \n
+GenUtils.57=\# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.\n
+GenUtils.59=\# * \t For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate\n
+GenUtils.60=\# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County\n
+GenUtils.61=\# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the\n
+GenUtils.62=\# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.\n
+GenUtils.63=\# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within \n
+GenUtils.64=\# * a level 1 administration. \n
+GenUtils.68=\# * Key Format: \n
+GenUtils.70=\# * \t For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: \n
+GenUtils.71=\# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.\n
+GenUtils.73=\# * \t For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate\n
+GenUtils.74=\# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County\n
+GenUtils.75=\# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the\n
+GenUtils.76=\# * level 1 administrations within a country. Similarly, the four leftmost digits indicate the level 2 administration.\n
+GenUtils.77=\# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within \n
+GenUtils.78=\# * a level 1 administration. \n
+GenUtils.82=\# * Copyright (c) 2006 IBM Corporation and others.\n
+GenUtils.83=\# * All rights reserved. This program and the accompanying materials\n
+GenUtils.84=\# * are made available under the terms of the Eclipse Public License v1.0\n
+GenUtils.85=\# * which accompanies this distribution, and is available at\n
+GenUtils.86=\# * http://www.eclipse.org/legal/epl-v10.html\n
+GenUtils.88=\# * Contributors:\n
+GenUtils.89=\# *     IBM Corporation - initial API and implementation\n
+GenUtils.11=0
+GenUtils.92=AA
+GenUtils.93=AAA
+GenUtils.94=DUMMY
+GenUtils.95=FOO
+GenUtils.96=FOO
+GenUtils.10=0
+GenUtils.106=-UNK
+GenUtils.107=AA
+GenUtils.108=FOO
+GenUtils.110=Malformed lex data object. Total data elements = 
+GenUtils.111=. Expected : 
+GenUtils.113=Malformed lex data object. Total data elements = 
+GenUtils.114=. Expected : 
+GenUtils.117=Cant read : 
+GenUtils.118=Cant read : 
+GMLGenerator.0=<?xml version=
+GMLGenerator.1=\ encoding=
+GMLGenerator.72=Not Found
+GMLGenerator.73=Descriptor not found for  
+GMLGenerator.71=\ in 
+GMLGenerator.2=?>\n
+GMLGenerator.74=">\n
+GMLGenerator.75="/>\n
+GMLGenerator.76=">\n
+GroupGenerator.0=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+GroupGenerator.8=_GROUPED.txt
+GroupGenerator.14=_ADMIN1_LEX.txt
+GroupGenerator.15=_ADMIN2_LEX.txt
+GroupGenerator.22=\t\tGenerated : 
+GroupGenerator.23=Wrong arguments. Provide ISO3166-1 and ISO3166-2 files, ISO codes fix file, list of countries, and output directory.
+Lex1Obj.0=0
+Lex2Obj.0=0
+Lex2Obj.1=0
+MatchProfiler.0=0
+MatchProfiler.1=_POPULATION.txt
+MatchProfiler.2=_AREA.txt
+MatchProfiler.58=Wrong arguments. Provide: iso 3166-2 file, CIA data, target file, and match file. 
+MultiPassDownSampler.3=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\ISOFix\\USA_FIPS.txt
+MultiPassDownSampler.4=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+MultiPassDownSampler.8=_REDUCED_
+MultiPassDownSampler.9=.txt
+MultiPassDownSampler.11=Processing country : 
+MultiPassDownSampler.2=%
+MultiPassDownSampler.14=\ of 
+MultiPassDownSampler.22=.txt
+MultiPassDownSampler.23=.txt
+MultiPassDownSampler.26=.xml
+MultiPassDownSampler.27=.xml
+MultiPassDownSampler.33=_ADMIN2_LEX.txt
+MultiPassDownSampler.34=_ADMIN2_LEX.txt
+MultiPassDownSampler.40=Admin Level 0
+MultiPassDownSampler.42=\t\tGenerated : 
+MultiPassDownSampler.45=\ ITERATION ************\n
+MultiPassDownSampler.46=Profiling results BEFORE reduction : \n\n
+MultiPassDownSampler.47=Profiling results AFTER reduction : \n\n
+MultiPassDownSampler.48=************** GLOBAL STATS **************
+MultiPassDownSampler.49=Total polygons : 
+MultiPassDownSampler.50=Total points : 
+MultiPassDownSampler.51=Avg points per polygon : 
+MultiPassDownSampler.52=Global reduction : 
+MultiPassDownSampler.53=Global reduction : 
+MultiPassDownSampler.55=Global MIN reduction  : 
+MultiPassDownSampler.57=Global MAX reduction  : 
+MultiPassDownSampler.59=\ Angle >= 
+MultiPassDownSampler.60=\ Frequency : 
+MultiPassDownSampler.61=\ Frequency : 
+MultiPassDownSampler.96=">\n
+MultiPassDownSampler.97=<gml:outerBoundaryIs>\n
+MultiPassDownSampler.98=<gml:outerBoundaryIs>\n
+MultiPassDownSampler.102=<gml:posList>\n
+MultiPassDownSampler.103=<gml:posList>\n
+MultiPassDownSampler.105=</gml:LinearRing>\n
+MultiPassDownSampler.106=</gml:outerBoundaryIs>\n
+MultiPassDownSampler.107=</gml:Polygon>\n
+MultiPassDownSampler.108=</gml:Polygon>\n
+MultiPassDownSampler.112="/>\n
+MultiPassDownSampler.113=<gml:Polygon gml:id="
+MultiPassDownSampler.114=">\n
+MultiPassDownSampler.115=<gml:outerBoundaryIs>\n
+MultiPassDownSampler.116=<gml:LinearRing>\n
+MultiPassDownSampler.117=<gml:posList>\n
+MultiPassDownSampler.118=\n
+MultiPassDownSampler.120=</gml:LinearRing>\n
+MultiPassDownSampler.121=</gml:outerBoundaryIs>\n
+MultiPassDownSampler.122=</gml:Polygon>\n
+MultiPassDownSampler.123=<?xml version="1.0" encoding="UTF-8"?>\n
+MultiPassDownSampler.124=<Map xmlns:gml="http://www.opengis.net/gml" xmlns:georss="http://www.georss.org/georss">\n
+MultiPassDownSampler.125=<title>
+MultiPassDownSampler.126=\ Level 
+MultiPassDownSampler.127=\ Map</title>\n
+MultiPassDownSampler.128=<subTitle>Administrative Boundaries</subTitle>\n
+MultiPassDownSampler.129=<updated>Tue Nov 07 16:57:55 PST 2006 </updated>\n
+MultiPassDownSampler.130=<entry>\n
+MultiPassDownSampler.131=<georss:where>\n
+MultiPassDownSampler.132=</georss:where>\n
+MultiPassDownSampler.133=</entry>\n
+MultiPassDownSampler.134=</Map>\n
+MultiPassDownSampler.135=Wrong arguments. Provide threshold (alpha degrees), total passes, ISO3166-1 and ISO3166-2 files, ISO codes fix file, list of countries, and output directory.
+MultiPassDownSampler.136=%
+NameGenerator.0=ISO3166_1
+NameGenerator.1=Processing country : 
+NameGenerator.2=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+NameGenerator.9=_names.properties
+NameGenerator.17=_ADMIN2_LEX.txt
+NameGenerator.18=_ADMIN2_LEX.txt
+NameGenerator.23=\ Level 1 ( 
+NameGenerator.24=\ Level 1 ( 
+NameGenerator.26=Level 2 ( 
+NameGenerator.27=Level 2 ( 
+NameGenerator.29=\ ). \n
+NameGenerator.39=\t\tGenerated : 
+NameGenerator.41=\# Level 0\n
+NameGenerator.42=\n\# Level 1 (admin 1 = e.g., state)\n
+NameGenerator.43=\n\# Level 2 (admin 2 = e.g., country)\n
+NameGenerator.44=Wrong arguments. Provide ISO 3166-1, ISO 3166-2, ISO code fix file, list of countries, and output directory.
+NameGenerator.45=USCENSUSPOP
+NodeDataGenerator.0=CIA
+NodeDataGenerator.1=ISO3166_1
+NodeDataGenerator.2=CIA
+NodeDataGenerator.3=CIA
+NodeDataGenerator.4=\t\tGenerated : 
+NodeDataGenerator.4=_node.properties 
+NodeDataGenerator.4=Processing country : 
+NodeDataGenerator.5=<<<< Processing country : 
+NodeDataGenerator.5=ISO3166_1
+NodeDataGenerator.5=\t\tGenerated : 
+NodeDataGenerator.6=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+NodeDataGenerator.12=\t\tGenerated : 
+NodeDataGenerator.6=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+NodeDataGenerator.15=_node.properties
+NodeDataGenerator.6=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\sort\\
+NodeDataGenerator.14=_node.properties
+NodeDataGenerator.11=\t\tGenerated : 
+NodeDataGenerator.14=_node.properties
+NodeDataGenerator.24=_ADMIN2_LEX.txt
+NodeDataGenerator.24=_ADMIN2_LEX.txt
+NodeDataGenerator.24=_ADMIN2_LEX.txt
+NodeDataGenerator.25=_ADMIN2_LEX.txt
+NodeDataGenerator.23=_ADMIN1_LEX.txt
+NodeDataGenerator.23=_ADMIN1_LEX.txt
+NodeDataGenerator.31=\ Level 1 ( 
+NodeDataGenerator.31=\ Level 1 ( 
+NodeDataGenerator.31=\ Level 1 ( 
+NodeDataGenerator.32=\ Level 1 ( 
+NodeDataGenerator.33=\ ). 
+NodeDataGenerator.33=\ ). 
+NodeDataGenerator.33=\ ). 
+NodeDataGenerator.34=Level 2 ( 
+NodeDataGenerator.34=Level 2 ( 
+NodeDataGenerator.34=Level 2 ( 
+NodeDataGenerator.35=Level 2 ( 
+NodeDataGenerator.37=\ ). \n
+NodeDataGenerator.30=\# Generated key details : 
+NodeDataGenerator.30=\# Generated key details : 
+NodeDataGenerator.36=\ ). \n
+NodeDataGenerator.36=\ ). \n
+NodeDataGenerator.52=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\urls\\
+NodeDataGenerator.53=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\urls\\
+NodeDataGenerator.56=_node.properties 
+NodeDataGenerator.52=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\urls\\
+NodeDataGenerator.58=\# This is the name of the class that will interpret the rest of the file's contents\n
+NodeDataGenerator.52=C:\\stemII\\org.eclipse.stem.utility\\dataMigration\\input\\urls\\
+NodeDataGenerator.58=RECORD_CLASSNAME = org.eclipse.stem.internal.data.CountryGraphRecord$CountryNodeGraphRecord\n\n
+NodeDataGenerator.58=RECORD_CLASSNAME = org.eclipse.stem.internal.data.CountryGraphRecord$CountryNodeGraphRecord\n\n
+NodeDataGenerator.51=\t\tGenerated : 
+NodeDataGenerator.51=\t\tGenerated : 
+NodeDataGenerator.55=_node.properties 
+NodeDataGenerator.57=\# This is the name of the class that will interpret the rest of the file's contents\n
+NodeDataGenerator.57=\# This is the name of the class that will interpret the rest of the file's contents\n
+NodeDataGenerator.59=\# The ISO-3166-1 alpha3 code for the country\n
+NodeDataGenerator.59=\# The ISO-3166-1 alpha3 code for the country\n
+NodeDataGenerator.59=\# The ISO-3166-1 alpha3 code for the country\n
+NodeDataGenerator.60=ISOKEY = 
+NodeDataGenerator.60=ISOKEY = 
+NodeDataGenerator.60=ISOKEY = 
+NodeDataGenerator.61=ISOKEY = 
+NodeDataGenerator.63=ADMIN_LEVEL = 
+NodeDataGenerator.63=ADMIN_LEVEL = 
+NodeDataGenerator.63=ADMIN_LEVEL = 
+NodeDataGenerator.64=ADMIN_LEVEL = 
+NodeDataGenerator.66=\# See http://purl.org/dc/terms/1.1/valid\n
+NodeDataGenerator.66=\# See http://purl.org/dc/terms/1.1/valid\n
+NodeDataGenerator.66=\# See http://purl.org/dc/terms/1.1/valid\n
+NodeDataGenerator.67=VALID = start=1900-01-01;\n\n
+NodeDataGenerator.67=VALID = start=1900-01-01;\n\n
+NodeDataGenerator.67=VALID = start=1900-01-01;\n\n
+NodeDataGenerator.68=\# This is the source of the data\n
+NodeDataGenerator.68=\# This is the source of the data\n
+NodeDataGenerator.68=\# This is the source of the data\n
+NodeDataGenerator.62=\# The administration level of the node data\n
+NodeDataGenerator.62=\# The administration level of the node data\n
+NodeDataGenerator.65=\# This is the date range for which the area values in this file are valid \n
+NodeDataGenerator.65=\# This is the date range for which the area values in this file are valid \n
+NodeDataGenerator.69=.txt
+NodeDataGenerator.69=.txt
+NodeDataGenerator.69=.txt
+NodeDataGenerator.70=.txt
+NodeDataGenerator.73=SOURCE = 
+NodeDataGenerator.75=SOURCE = 
+NodeDataGenerator.78=SPATIAL_URI = 
+NodeDataGenerator.78=SPATIAL_URI = 
+NodeDataGenerator.78=SPATIAL_URI = 
+NodeDataGenerator.72=SOURCE = 
+NodeDataGenerator.72=SOURCE = 
+NodeDataGenerator.74=SOURCE = 
+NodeDataGenerator.74=SOURCE = 
+NodeDataGenerator.77=\# The file that contains the latitude/longitude data for the node \n
+NodeDataGenerator.77=\# The file that contains the latitude/longitude data for the node \n
+NodeDataGenerator.79=platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/
+NodeDataGenerator.79=platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/
+NodeDataGenerator.79=platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/
+NodeDataGenerator.80=platform:/plugin/org.eclipse.stem.geography/resources/data/geo/country/
+NodeDataGenerator.83=Wrong arguments. Provide ISO 3166-1 and ISO 3166-2 data files, ISO fix file, list of countries, and output directory.
+NodeDataGenerator.83=Wrong arguments. Provide ISO 3166-1 and ISO 3166-2 data files, ISO fix file, list of countries, and output directory.
+NodeDataGenerator.83=Wrong arguments. Provide ISO 3166-1 and ISO 3166-2 data files, ISO fix file, list of countries, and output directory.
+NodeDataGenerator.84=CIA
+NodeDataGenerator.8=\ >>>>
+NodeDataGenerator.82=_MAP.xml\n\n
+NodeDataGenerator.82=_MAP.xml\n\n
+URLGenerator.1=URL location is :  
+URLGenerator.2=Read URL : 
+URLGenerator.5=ISO code not found for entry : 
+URLGenerator.6=_URL.txt
+URLGenerator.13=Wrong arguments. Provide ISO data file, list of countries, and output directory.
+EuropeDataCleaner.20=Clean data is : 
+LocationFinder.0=UID
+LocationFinder.1=EuropeSample.txt
+LocationFinder.2=Key is : 
+LocationFinder.9=Processing country : 
+LocationFinder.14=TODO -> SET FILENAME HERE
+LocationFinder.15=\t\tGenerated :
+LocationFinder.17=Error : number of X's and Y's dont match\!
+LocationFinder.18=\t\t\t closing line : 
+LocationFinder.19=Wrong arguments.
+Inoculator.1=infector_
+Inoculator.2=inoculator_